Repository: kniEngine/kni Branch: main Commit: eb694dc95e93 Files: 2580 Total size: 28.5 MB Directory structure: gitextract_llhyw4pl/ ├── .config/ │ └── dotnet-tools.json_ ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── dotnet.yml │ └── sponsors.yml ├── .gitignore ├── .gitmodules ├── BuildNuget.bat ├── CHANGELOG.md ├── CODESTYLE.md ├── CONTRIBUTING.md ├── Clean.bat ├── Documentation/ │ ├── articles/ │ │ ├── README.md │ │ ├── content/ │ │ │ ├── adding_ttf_fonts.md │ │ │ ├── content.md │ │ │ ├── custom_effects.md │ │ │ ├── localization.md │ │ │ ├── toc.yml │ │ │ ├── using_mgcb_editor.md │ │ │ └── why_content_pipeline.md │ │ ├── getting_started/ │ │ │ ├── 0_getting_started.md │ │ │ ├── 1_setting_up_your_development_environment_macos.md │ │ │ ├── 1_setting_up_your_development_environment_ubuntu.md │ │ │ ├── 1_setting_up_your_development_environment_windows.md │ │ │ ├── 2_creating_a_new_project_netcore.md │ │ │ ├── 2_creating_a_new_project_vs.md │ │ │ ├── 2_creating_a_new_project_vsm.md │ │ │ ├── 3_understanding_the_code.md │ │ │ ├── 4_adding_content.md │ │ │ ├── 5_adding_basic_code.md │ │ │ └── toc.yml │ │ ├── help_and_support.md │ │ ├── migrate_37.md │ │ ├── migrate_38.md │ │ ├── migrate_381.md │ │ ├── migrate_3_10.md │ │ ├── migrate_3_11.md │ │ ├── migrate_3_12.md │ │ ├── migrate_3_13.md │ │ ├── migrate_3_14.md │ │ ├── migrate_4_0.md │ │ ├── migrate_4_1.md │ │ ├── migrate_xna.md │ │ ├── packaging_games.md │ │ ├── platforms.md │ │ ├── samples.md │ │ ├── toc.yml │ │ ├── tools/ │ │ │ ├── knifxc.md │ │ │ ├── mgcb.md │ │ │ ├── mgcb_editor.md │ │ │ ├── toc.yml │ │ │ └── tools.md │ │ ├── tutorials.md │ │ └── whats_new.md │ ├── docfx.json │ ├── index.md │ ├── metadata.json │ ├── theme/ │ │ ├── material/ │ │ │ ├── partials/ │ │ │ │ └── head.tmpl.partial │ │ │ └── styles/ │ │ │ └── main.css │ │ └── monogame/ │ │ ├── partials/ │ │ │ ├── head.tmpl.partial │ │ │ └── navbar.tmpl.partial │ │ └── styles/ │ │ └── monogame.css │ └── toc.yml ├── ISSUE_TEMPLATE.md ├── Installers/ │ ├── Windows/ │ │ ├── KniSdkSetup.nsi │ │ └── SponsorPage.ini │ └── default.build ├── KNI.sln ├── Kni.Platform.Android.GL.Xamarin.sln ├── Kni.Platform.Android.GL.sln ├── Kni.Platform.Blazor.GL.sln ├── Kni.Platform.Cardboard.GL.sln ├── Kni.Platform.Oculus.GL.sln ├── Kni.Platform.Ref.sln ├── Kni.Platform.SDL2.GL.sln ├── Kni.Platform.UAP.DX11.sln ├── Kni.Platform.WinForms.DX11.sln ├── Kni.Platform.iOS.GL.sln ├── LICENSE.txt ├── MonoGame.Tools.Linux.sln ├── NuGetPackages/ │ ├── Content.Pipeline.Builder.Windows.nuspec │ ├── Content.Pipeline.Builder.nuspec │ ├── MonoGame.Framework.WindowsUniversal.nuspec │ ├── MonoGame.Templates.nuspec1 │ ├── RegisterLocalNuget.bat │ └── build/ │ └── Builder/ │ └── nkast.Xna.Framework.Content.Pipeline.Builder.targets ├── Platforms/ │ ├── AssemblyInfo.cs │ ├── Audio/ │ │ ├── Android/ │ │ │ ├── ConcreteAudioFactory.cs │ │ │ ├── ConcreteAudioServiceDroid.cs │ │ │ └── ConcreteMicrophoneDroid.cs │ │ ├── Blazor/ │ │ │ ├── AudioLoader.cs │ │ │ ├── ConcreteAudioFactory.cs │ │ │ ├── ConcreteAudioService.cs │ │ │ ├── ConcreteDynamicSoundEffectInstance.cs │ │ │ ├── ConcreteMicrophone.cs │ │ │ ├── ConcreteSoundEffect.cs │ │ │ └── ConcreteSoundEffectInstance.cs │ │ ├── OpenAL/ │ │ │ ├── AudioLoader.cs │ │ │ ├── ConcreteAudioFactory.cs │ │ │ ├── ConcreteAudioService.cs │ │ │ ├── ConcreteDynamicSoundEffectInstance.cs │ │ │ ├── ConcreteMicrophone.cs │ │ │ ├── ConcreteSoundEffect.cs │ │ │ ├── ConcreteSoundEffectInstance.cs │ │ │ └── OpenAL.cs │ │ ├── Ref/ │ │ │ ├── ConcreteAudioFactory.cs │ │ │ ├── ConcreteAudioService.cs │ │ │ ├── ConcreteDynamicSoundEffectInstance.cs │ │ │ ├── ConcreteMicrophone.cs │ │ │ ├── ConcreteSoundEffect.cs │ │ │ └── ConcreteSoundEffectInstance.cs │ │ └── XAudio/ │ │ ├── ConcreteAudioFactory.cs │ │ ├── ConcreteAudioService.cs │ │ ├── ConcreteDynamicSoundEffectInstance.cs │ │ ├── ConcreteMicrophone.cs │ │ ├── ConcreteSoundEffect.cs │ │ └── ConcreteSoundEffectInstance.cs │ ├── Content/ │ │ ├── .Android/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .Blazor/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .WindowsDX11/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ ├── .iOS/ │ │ │ ├── ConcreteTitleContainer.cs │ │ │ └── ConcreteTitleContainerFactory.cs │ │ └── .macOS/ │ │ ├── ConcreteTitleContainer.cs │ │ └── ConcreteTitleContainerFactory.cs │ ├── Devices/ │ │ ├── .Android/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ ├── ConcreteSensorService.cs │ │ │ └── SensorListener.cs │ │ ├── .Blazor/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ └── ConcreteSensorService.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ └── ConcreteSensorService.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ └── ConcreteSensorService.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ └── ConcreteSensorService.cs │ │ ├── .WindowsDX/ │ │ │ ├── ConcreteDevicesFactory.cs │ │ │ ├── ConcreteHaptics.cs │ │ │ └── Sensors/ │ │ │ ├── ConcreteAccelerometer.cs │ │ │ ├── ConcreteCompass.cs │ │ │ └── ConcreteSensorService.cs │ │ └── .iOS/ │ │ ├── ConcreteDevicesFactory.cs │ │ ├── ConcreteHaptics.cs │ │ └── Sensors/ │ │ ├── ConcreteAccelerometer.cs │ │ ├── ConcreteCompass.cs │ │ └── ConcreteSensorService.cs │ ├── Directory.Build.props │ ├── Game/ │ │ ├── .Android/ │ │ │ ├── AndroidCompatibility.cs │ │ │ ├── AndroidGameActivity.cs │ │ │ ├── AndroidGameWindow.cs │ │ │ ├── AndroidSurfaceView.cs │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ ├── ConcreteGraphicsDeviceManager.cs │ │ │ ├── ISurfaceView.cs │ │ │ ├── OrientationListener.cs │ │ │ ├── RunnableObject.cs │ │ │ ├── ScreenReceiver.cs │ │ │ └── TouchEventListener.cs │ │ ├── .Blazor/ │ │ │ ├── BlazorGameWindow.cs │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ └── ConcreteGraphicsDeviceManager.cs │ │ ├── .CardboardLegacy/ │ │ │ ├── AndroidCompatibility.cs │ │ │ ├── AndroidGameActivity.cs │ │ │ ├── AndroidGameWindow.cs │ │ │ ├── AndroidSurfaceView.cs │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ └── ConcreteGraphicsDeviceManager.cs │ │ ├── .Oculus/ │ │ │ └── AndroidCompatibility.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ └── ConcreteGraphicsDeviceManager.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ ├── ConcreteGraphicsDeviceManager.cs │ │ │ ├── SDL2.cs │ │ │ └── SDLGameWindow.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ ├── ConcreteGraphicsDeviceManager.cs │ │ │ ├── GameFrameworkViewSource.cs │ │ │ ├── InputEvents.cs │ │ │ ├── UAPFrameworkView.cs │ │ │ ├── UAPGameWindow.cs │ │ │ └── XamlGame.cs │ │ ├── .WindowsDX11/ │ │ │ ├── ConcreteGame.cs │ │ │ ├── ConcreteGameFactory.cs │ │ │ ├── ConcreteGraphicsDeviceManager.cs │ │ │ ├── KeysHelper.cs │ │ │ ├── TimerHelper.cs │ │ │ ├── WinFormsGameForm.cs │ │ │ └── WinFormsGameWindow.cs │ │ └── .iOS/ │ │ ├── ConcreteGame.cs │ │ ├── ConcreteGameFactory.cs │ │ ├── ConcreteGraphicsDeviceManager.cs │ │ ├── IPlatformBackButton.tvOS.cs │ │ ├── OrientationConverter.cs │ │ ├── iOSGameView.cs │ │ ├── iOSGameViewController.cs │ │ ├── iOSGameView_Touch.cs │ │ └── iOSGameWindow.cs │ ├── Graphics/ │ │ ├── .BlazorGL/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsCapabilities.cs │ │ │ ├── ConcreteGraphicsContext.cs │ │ │ ├── ConcreteGraphicsDebug.cs │ │ │ ├── ConcreteGraphicsDevice.cs │ │ │ ├── ConcreteGraphicsFactory.cs │ │ │ ├── ConcreteOcclusionQuery.cs │ │ │ ├── ConcreteRenderTarget2D.cs │ │ │ ├── ConcreteRenderTarget3D.cs │ │ │ ├── ConcreteRenderTargetCube.cs │ │ │ ├── ConcreteSamplerStateCollection.cs │ │ │ ├── ConcreteTexture.cs │ │ │ ├── ConcreteTexture2D.Stream.cs │ │ │ ├── ConcreteTexture2D.cs │ │ │ ├── ConcreteTexture3D.cs │ │ │ ├── ConcreteTextureCollection.cs │ │ │ ├── ConcreteTextureCube.cs │ │ │ ├── GLExtensions.cs │ │ │ ├── IRenderTargetStrategyGL.cs │ │ │ ├── Shader/ │ │ │ │ ├── ConcreteConstantBuffer.cs │ │ │ │ ├── ConcreteConstantBufferCollection.cs │ │ │ │ ├── ConcretePixelShader.cs │ │ │ │ ├── ConcreteShader.cs │ │ │ │ ├── ConcreteVertexShader.cs │ │ │ │ └── ShaderProgram.cs │ │ │ ├── States/ │ │ │ │ ├── ConcreteBlendState.cs │ │ │ │ ├── ConcreteDepthStencilState.cs │ │ │ │ ├── ConcreteRasterizerState.cs │ │ │ │ └── ConcreteSamplerState.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteDynamicIndexBuffer.cs │ │ │ ├── ConcreteDynamicVertexBuffer.cs │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ ├── ConcreteVertexBuffer.cs │ │ │ └── VertexDeclarationAttributeInfo.cs │ │ ├── .Common/ │ │ │ └── SpriteBatcher.cs │ │ ├── .DX11/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsCapabilities.cs │ │ │ ├── ConcreteGraphicsContext.cs │ │ │ ├── ConcreteGraphicsDebug.cs │ │ │ ├── ConcreteGraphicsDevice.cs │ │ │ ├── ConcreteGraphicsFactory.cs │ │ │ ├── ConcreteOcclusionQuery.cs │ │ │ ├── ConcreteRenderTarget2D.cs │ │ │ ├── ConcreteRenderTarget3D.cs │ │ │ ├── ConcreteRenderTargetCube.cs │ │ │ ├── ConcreteRenderTargetSwapChain.cs │ │ │ ├── ConcreteSamplerStateCollection.cs │ │ │ ├── ConcreteTexture.cs │ │ │ ├── ConcreteTexture2D.Stream.cs │ │ │ ├── ConcreteTexture2D.cs │ │ │ ├── ConcreteTexture3D.cs │ │ │ ├── ConcreteTextureCollection.cs │ │ │ ├── ConcreteTextureCube.cs │ │ │ ├── GraphicsSharpDXExtensions.cs │ │ │ ├── IRenderTargetStrategyDX11.cs │ │ │ ├── Shader/ │ │ │ │ ├── ConcreteConstantBuffer.cs │ │ │ │ ├── ConcreteConstantBufferCollection.cs │ │ │ │ ├── ConcretePixelShader.cs │ │ │ │ ├── ConcreteShader.cs │ │ │ │ └── ConcreteVertexShader.cs │ │ │ ├── SharpDXExtensions.cs │ │ │ ├── SpriteBatcher.cs │ │ │ ├── States/ │ │ │ │ ├── ConcreteBlendState.cs │ │ │ │ ├── ConcreteDepthStencilState.cs │ │ │ │ ├── ConcreteRasterizerState.cs │ │ │ │ └── ConcreteSamplerState.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteDynamicIndexBuffer.cs │ │ │ ├── ConcreteDynamicVertexBuffer.cs │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ ├── ConcreteVertexBuffer.cs │ │ │ ├── InputLayoutCache.cs │ │ │ └── VertexInputLayoutKey.cs │ │ ├── .GL/ │ │ │ ├── ConcreteGraphicsCapabilities.cs │ │ │ ├── ConcreteGraphicsContext.cs │ │ │ ├── ConcreteGraphicsDebug.cs │ │ │ ├── ConcreteGraphicsDevice.cs │ │ │ ├── ConcreteGraphicsFactory.cs │ │ │ ├── ConcreteOcclusionQuery.cs │ │ │ ├── ConcreteRenderTarget2D.cs │ │ │ ├── ConcreteRenderTarget3D.cs │ │ │ ├── ConcreteRenderTargetCube.cs │ │ │ ├── ConcreteRenderTargetSwapChain.cs │ │ │ ├── ConcreteSamplerStateCollection.cs │ │ │ ├── ConcreteTexture.cs │ │ │ ├── ConcreteTexture2D.Stream.cs │ │ │ ├── ConcreteTexture2D.cs │ │ │ ├── ConcreteTexture3D.cs │ │ │ ├── ConcreteTextureCollection.cs │ │ │ ├── ConcreteTextureCube.cs │ │ │ ├── GLExtensions.cs │ │ │ ├── GLVersion.cs │ │ │ ├── IRenderTargetStrategyGL.cs │ │ │ ├── OpenGL.Common.cs │ │ │ ├── OpenGL.cs │ │ │ ├── Shader/ │ │ │ │ ├── ConcreteConstantBuffer.cs │ │ │ │ ├── ConcreteConstantBufferCollection.cs │ │ │ │ ├── ConcretePixelShader.cs │ │ │ │ ├── ConcreteShader.cs │ │ │ │ ├── ConcreteVertexShader.cs │ │ │ │ └── ShaderProgram.cs │ │ │ ├── States/ │ │ │ │ ├── ConcreteBlendState.cs │ │ │ │ ├── ConcreteDepthStencilState.cs │ │ │ │ ├── ConcreteRasterizerState.cs │ │ │ │ └── ConcreteSamplerState.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteDynamicIndexBuffer.cs │ │ │ ├── ConcreteDynamicVertexBuffer.cs │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ ├── ConcreteVertexBuffer.cs │ │ │ └── VertexDeclarationAttributeInfo.cs │ │ ├── .GL.Android/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsContext.Android.cs │ │ │ ├── ConcreteGraphicsDevice.Android.cs │ │ │ ├── OpenGL.Android.cs │ │ │ ├── SurfaceConfig.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ └── ConcreteVertexBuffer.cs │ │ ├── .GL.SDL/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsContext.SDL.cs │ │ │ ├── ConcreteGraphicsDevice.SDL.cs │ │ │ ├── OpenGL.SDL.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ └── ConcreteVertexBuffer.cs │ │ ├── .GL.iOS/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsContext.iOS.cs │ │ │ ├── ConcreteGraphicsDevice.iOS.cs │ │ │ ├── OpenGL.iOS.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ └── ConcreteVertexBuffer.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteGraphicsAdapter.cs │ │ │ ├── ConcreteGraphicsAdaptersProvider.cs │ │ │ ├── ConcreteGraphicsCapabilities.cs │ │ │ ├── ConcreteGraphicsContext.cs │ │ │ ├── ConcreteGraphicsDebug.cs │ │ │ ├── ConcreteGraphicsDevice.cs │ │ │ ├── ConcreteGraphicsFactory.cs │ │ │ ├── ConcreteOcclusionQuery.cs │ │ │ ├── ConcreteRenderTarget2D.cs │ │ │ ├── ConcreteRenderTarget3D.cs │ │ │ ├── ConcreteRenderTargetCube.cs │ │ │ ├── ConcreteSamplerStateCollection.cs │ │ │ ├── ConcreteTexture.cs │ │ │ ├── ConcreteTexture2D.Stream.cs │ │ │ ├── ConcreteTexture2D.cs │ │ │ ├── ConcreteTexture3D.cs │ │ │ ├── ConcreteTextureCollection.cs │ │ │ ├── ConcreteTextureCube.cs │ │ │ ├── Shader/ │ │ │ │ ├── ConcreteConstantBuffer.cs │ │ │ │ ├── ConcreteConstantBufferCollection.cs │ │ │ │ ├── ConcretePixelShader.cs │ │ │ │ ├── ConcreteShader.cs │ │ │ │ └── ConcreteVertexShader.cs │ │ │ ├── States/ │ │ │ │ ├── ConcreteBlendState.cs │ │ │ │ ├── ConcreteDepthStencilState.cs │ │ │ │ ├── ConcreteRasterizerState.cs │ │ │ │ └── ConcreteSamplerState.cs │ │ │ └── Vertices/ │ │ │ ├── ConcreteDynamicIndexBuffer.cs │ │ │ ├── ConcreteDynamicVertexBuffer.cs │ │ │ ├── ConcreteIndexBuffer.cs │ │ │ └── ConcreteVertexBuffer.cs │ │ ├── Effect/ │ │ │ ├── Resources/ │ │ │ │ ├── AlphaTestEffect.dx11.fxo │ │ │ │ ├── AlphaTestEffect.gles.fxo │ │ │ │ ├── AlphaTestEffect.ogl.fxo │ │ │ │ ├── BasicEffect.dx11.fxo │ │ │ │ ├── BasicEffect.gles.fxo │ │ │ │ ├── BasicEffect.ogl.fxo │ │ │ │ ├── DualTextureEffect.dx11.fxo │ │ │ │ ├── DualTextureEffect.gles.fxo │ │ │ │ ├── DualTextureEffect.ogl.fxo │ │ │ │ ├── EnvironmentMapEffect.dx11.fxo │ │ │ │ ├── EnvironmentMapEffect.gles.fxo │ │ │ │ ├── EnvironmentMapEffect.ogl.fxo │ │ │ │ ├── SkinnedEffect.dx11.fxo │ │ │ │ ├── SkinnedEffect.gles.fxo │ │ │ │ ├── SkinnedEffect.ogl.fxo │ │ │ │ ├── SpriteEffect.dx11.fxo │ │ │ │ ├── SpriteEffect.gles.fxo │ │ │ │ └── SpriteEffect.ogl.fxo │ │ │ └── Shaders/ │ │ │ ├── AlphaTestEffect.fx │ │ │ ├── BasicEffect.fx │ │ │ ├── BuildShaders.bat │ │ │ ├── Common.fxh │ │ │ ├── DualTextureEffect.fx │ │ │ ├── EnvironmentMapEffect.fx │ │ │ ├── Lighting.fxh │ │ │ ├── Macros.fxh │ │ │ ├── Microsoft_Permissive_License.rtf │ │ │ ├── SkinnedEffect.fx │ │ │ ├── SpriteEffect.fx │ │ │ └── Structures.fxh │ │ ├── RenderTargetSwapChain.OpenGL.cs │ │ └── SwapChainRenderTarget.DirectX.cs │ ├── ILLink.Descriptors.xml │ ├── Input/ │ │ ├── .Android/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ └── Touch/ │ │ │ └── ConcreteTouchPanel.cs │ │ ├── .Blazor/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ ├── Touch/ │ │ │ │ └── ConcreteTouchPanel.cs │ │ │ └── XR/ │ │ │ └── ConcreteTouchController.cs │ │ ├── .LibOVR/ │ │ │ └── XR/ │ │ │ └── ConcreteTouchControllerStrategy.cs │ │ ├── .OpenXR/ │ │ │ └── XR/ │ │ │ └── ConcreteTouchControllerStrategy.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ └── Touch/ │ │ │ └── ConcreteTouchPanel.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ ├── KeyboardUtil.cs │ │ │ └── Touch/ │ │ │ └── ConcreteTouchPanel.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ └── Touch/ │ │ │ └── ConcreteTouchPanel.cs │ │ ├── .WindowsDX/ │ │ │ ├── ConcreteGamePad.cs │ │ │ ├── ConcreteGamePadDevice.cs │ │ │ ├── ConcreteInputFactory.cs │ │ │ ├── ConcreteJoystick.cs │ │ │ ├── ConcreteKeyboard.cs │ │ │ ├── ConcreteKeyboardInput.cs │ │ │ ├── ConcreteMessageBox.cs │ │ │ ├── ConcreteMouse.cs │ │ │ ├── ConcreteMouseCursor.cs │ │ │ └── Touch/ │ │ │ └── ConcreteTouchPanel.cs │ │ └── .iOS/ │ │ ├── ConcreteGamePad.cs │ │ ├── ConcreteGamePad.tvOS.cs │ │ ├── ConcreteGamePadDevice.cs │ │ ├── ConcreteInputFactory.cs │ │ ├── ConcreteJoystick.cs │ │ ├── ConcreteKeyboard.cs │ │ ├── ConcreteKeyboardInput.cs │ │ ├── ConcreteMessageBox.cs │ │ ├── ConcreteMouse.cs │ │ ├── ConcreteMouseCursor.cs │ │ └── Touch/ │ │ └── ConcreteTouchPanel.cs │ ├── Kni.Platform.Android.GL.Xamarin.csproj │ ├── Kni.Platform.Android.GL.csproj │ ├── Kni.Platform.Blazor.GL.csproj │ ├── Kni.Platform.Cardboard.GL.csproj │ ├── Kni.Platform.Oculus.GL.csproj │ ├── Kni.Platform.Ref.csproj │ ├── Kni.Platform.SDL2.GL.csproj │ ├── Kni.Platform.SDL2.GL.dll.config │ ├── Kni.Platform.UAP.DX11.csproj │ ├── Kni.Platform.WinForms.DX11.OculusOVR.csproj │ ├── Kni.Platform.WinForms.DX11.csproj │ ├── Kni.Platform.iOS.GL.csproj │ ├── Media/ │ │ ├── Android/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ └── ConcreteVideoPlayer.cs │ │ ├── Blazor/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ └── ConcreteVideoPlayer.cs │ │ ├── DesktopGL/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ └── ConcreteVideoPlayer.cs │ │ ├── MacOS/ │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteVideo.cs │ │ │ └── ConcreteVideoPlayer.cs │ │ ├── Ref/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ └── ConcreteVideoPlayer.cs │ │ ├── WME/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ ├── ConcreteVideoPlayer.cs │ │ │ └── MusicProperties.cs │ │ ├── WMS/ │ │ │ ├── ConcreteAlbum.cs │ │ │ ├── ConcreteMediaFactory.cs │ │ │ ├── ConcreteMediaLibrary.cs │ │ │ ├── ConcreteMediaPlayer.cs │ │ │ ├── ConcreteSong.cs │ │ │ ├── ConcreteVideo.cs │ │ │ ├── ConcreteVideoPlayer.cs │ │ │ └── VideoSampleGrabber.cs │ │ └── iOS/ │ │ ├── ConcreteAlbum.cs │ │ ├── ConcreteMediaFactory.cs │ │ ├── ConcreteMediaLibrary.cs │ │ ├── ConcreteMediaPlayer.cs │ │ ├── ConcreteSong.cs │ │ ├── ConcreteVideo.cs │ │ └── ConcreteVideoPlayer.cs │ ├── MonoGame.Framework.DesktopGL.csproj │ ├── Properties/ │ │ ├── AssemblyInfo.Android.cs │ │ ├── AssemblyInfo.Blazor.cs │ │ ├── AssemblyInfo.DesktopGL.cs │ │ ├── AssemblyInfo.Ref.cs │ │ ├── AssemblyInfo.UWP.cs │ │ ├── AssemblyInfo.Windows.cs │ │ ├── AssemblyInfo.cs │ │ └── AssemblyInfo.iOS.cs │ ├── Resources/ │ │ └── Resource.designer.cs │ ├── Storage/ │ │ ├── .Android/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ ├── .Blazor/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ ├── .WindowsDX/ │ │ │ ├── ConcreteStorageContainer.cs │ │ │ ├── ConcreteStorageDevice.cs │ │ │ ├── ConcreteStorageFactory.cs │ │ │ └── ConcreteStorageService.cs │ │ └── .iOS/ │ │ ├── ConcreteStorageContainer.cs │ │ ├── ConcreteStorageDevice.cs │ │ ├── ConcreteStorageFactory.cs │ │ └── ConcreteStorageService.cs │ ├── Utilities/ │ │ ├── .Android/ │ │ │ └── FuncLoader.cs │ │ ├── .SDL2/ │ │ │ └── FuncLoader.cs │ │ ├── .iOS/ │ │ │ └── FuncLoader.cs │ │ ├── AssemblyHelper.cs │ │ ├── CurrentPlatform.cs │ │ ├── InteropHelpers.cs │ │ ├── MemCopyHelper.cs │ │ └── Png/ │ │ ├── PngCommon.cs │ │ ├── PngReader.cs │ │ ├── PngWriter.cs │ │ └── ZLibStream.cs │ ├── XR/ │ │ ├── .Android/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .BlazorGL/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .CardboardLegacy/ │ │ │ ├── CardboardHeadsetState.cs │ │ │ ├── ConcreteXRDevice.cs │ │ │ ├── ConcreteXRFactory.cs │ │ │ └── GoogleCardboard/ │ │ │ ├── Additions/ │ │ │ │ └── AboutAdditions.txt │ │ │ ├── GoogleCardboard.csproj │ │ │ ├── Jars/ │ │ │ │ └── cardboard.jar │ │ │ └── Transforms/ │ │ │ ├── EnumFields.xml │ │ │ ├── EnumMethods.xml │ │ │ └── Metadata.xml │ │ ├── .LibOVR/ │ │ │ ├── ConcreteOvrSwapChainData.cs │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .Oculus/ │ │ │ ├── ConcreteOxrSwapChainData.cs │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .Ref/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .SDL2/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .UAP/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ ├── .WindowsDX/ │ │ │ ├── ConcreteXRDevice.cs │ │ │ └── ConcreteXRFactory.cs │ │ └── .iOS/ │ │ ├── ConcreteXRDevice.cs │ │ └── ConcreteXRFactory.cs │ └── build/ │ ├── .Android/ │ │ └── nkast.Kni.Platform.Android.GL.targets │ ├── .SDL2/ │ │ ├── MonoGame.Framework.DesktopGL.targets │ │ └── nkast.Kni.Platform.SDL2.GL.targets │ ├── .UAP/ │ │ └── nkast.Kni.Platform.UAP.DX11.targets │ ├── .WindowsDX/ │ │ └── nkast.Kni.Platform.WinForms.DX11.targets │ └── .iOS/ │ └── nkast.Kni.Platform.iOS.GL.targets ├── README.md ├── REQUIREMENTS.md ├── Templates/ │ ├── Directory.Build.props │ ├── MonoGame.Templates.CSharp/ │ │ ├── MonoGame.Templates.CSharp.csproj │ │ └── content/ │ │ ├── MonoGame.Application.Android.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Activity1.cs │ │ │ ├── AndroidManifest.xml │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ ├── MGNamespace.csproj │ │ │ └── Resources/ │ │ │ └── Values/ │ │ │ └── Strings.xml │ │ ├── MonoGame.Application.DesktopGL.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ ├── MGNamespace.csproj │ │ │ ├── Program.cs │ │ │ └── app.manifest │ │ ├── MonoGame.Application.UWP.CoreApp.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ ├── MGNamespace.csproj │ │ │ ├── Package.appxmanifest │ │ │ ├── Program.cs │ │ │ └── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── Default.rd.xml │ │ ├── MonoGame.Application.UWP.XAML.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── App.xaml │ │ │ ├── App.xaml.cs │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ ├── GamePage.xaml │ │ │ ├── GamePage.xaml.cs │ │ │ ├── MGNamespace.csproj │ │ │ ├── Package.appxmanifest │ │ │ └── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── Default.rd.xml │ │ ├── MonoGame.Application.WindowsDX.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ ├── MGNamespace.csproj │ │ │ ├── Program.cs │ │ │ └── app.manifest │ │ ├── MonoGame.Application.iOS.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Entitlements.plist │ │ │ ├── Game1.cs │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── MGNamespace.csproj │ │ │ └── Program.cs │ │ ├── MonoGame.Library.CSharp/ │ │ │ ├── .config/ │ │ │ │ └── dotnet-tools.json │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Game1.cs │ │ │ └── MGNamespace.csproj │ │ ├── MonoGame.Library.Pipeline.Extension.CSharp/ │ │ │ ├── .template.config/ │ │ │ │ └── template.json │ │ │ ├── Importer1.cs │ │ │ ├── MGNamespace.csproj │ │ │ └── Processor1.cs │ │ └── MonoGame.Library.Shared.CSharp/ │ │ ├── .template.config/ │ │ │ └── template.json │ │ ├── Content/ │ │ │ └── Content.mgcb │ │ ├── Game1.cs │ │ ├── MGNamespace.projitems │ │ └── MGNamespace.shproj │ ├── MonoGame.Templates.VSExtension/ │ │ ├── MonoGame.Templates.VSExtension.csproj │ │ ├── MonoGameTemplatesVSExtensionPackage.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Templates.pkgdef │ │ └── source.extension.vsixmanifest │ ├── VisualStudio2022/ │ │ ├── ItemTemplates/ │ │ │ ├── DrawableGameComponent/ │ │ │ │ ├── DrawableGameComponent.cs │ │ │ │ └── DrawableGameComponent.vstemplate │ │ │ └── GameComponent/ │ │ │ ├── GameComponent.cs │ │ │ └── GameComponent.vstemplate │ │ ├── ProjectTemplates/ │ │ │ ├── Android.NetCore/ │ │ │ │ ├── Activity.cs │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── Application.csproj │ │ │ │ ├── Assets/ │ │ │ │ │ └── AboutAssets.txt │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ └── Resources/ │ │ │ │ ├── AboutResources.txt │ │ │ │ ├── Resource.Designer.cs │ │ │ │ └── Values/ │ │ │ │ ├── Strings.xml │ │ │ │ └── Styles.xml │ │ │ ├── BlazorGL.NetCore/ │ │ │ │ ├── App.razor │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── MainLayout.razor │ │ │ │ ├── MainLayout.razor.css │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Index.razor.cs │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── launchSettings.json │ │ │ │ ├── _Imports.razor │ │ │ │ └── wwwroot/ │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.txt │ │ │ │ ├── css/ │ │ │ │ │ └── app.css │ │ │ │ ├── index.html │ │ │ │ └── js/ │ │ │ │ ├── decode.js │ │ │ │ ├── micProcessor.js │ │ │ │ └── streamProcessor.js │ │ │ ├── ContentPipelineExtension.NetFramework/ │ │ │ │ ├── ContentImporter.cs │ │ │ │ ├── ContentPipelineExtension.csproj │ │ │ │ ├── ContentPipelineExtension.vstemplate │ │ │ │ ├── ContentProcessor.cs │ │ │ │ └── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── ContentPipelineExtension.NetStandard/ │ │ │ │ ├── ContentImporter.cs │ │ │ │ ├── ContentPipelineExtension.csproj │ │ │ │ ├── ContentPipelineExtension.vstemplate │ │ │ │ ├── ContentProcessor.cs │ │ │ │ └── Directory.Build.props │ │ │ ├── DesktopGL.NetCore/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ └── app.manifest │ │ │ ├── DesktopGL.NetFramework/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ └── app.manifest │ │ │ ├── Multiplatform.NetCore/ │ │ │ │ ├── Android/ │ │ │ │ │ ├── Activity.cs │ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Assets/ │ │ │ │ │ │ └── AboutAssets.txt │ │ │ │ │ ├── Directory.Build.props │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ └── Resources/ │ │ │ │ │ ├── AboutResources.txt │ │ │ │ │ ├── Resource.Designer.cs │ │ │ │ │ └── Values/ │ │ │ │ │ ├── Strings.xml │ │ │ │ │ └── Styles.xml │ │ │ │ ├── BlazorGL/ │ │ │ │ │ ├── App.razor │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Content/ │ │ │ │ │ │ └── Content.mgcb │ │ │ │ │ ├── Directory.Build.props │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ ├── MainLayout.razor │ │ │ │ │ ├── MainLayout.razor.css │ │ │ │ │ ├── Pages/ │ │ │ │ │ │ ├── Index.razor │ │ │ │ │ │ └── Index.razor.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ ├── Properties/ │ │ │ │ │ │ └── launchSettings.json │ │ │ │ │ ├── _Imports.razor │ │ │ │ │ └── wwwroot/ │ │ │ │ │ ├── Content/ │ │ │ │ │ │ └── Content.txt │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── app.css │ │ │ │ │ ├── index.html │ │ │ │ │ └── js/ │ │ │ │ │ ├── decode.js │ │ │ │ │ ├── micProcessor.js │ │ │ │ │ └── streamProcessor.js │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── DesktopGL/ │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Directory.Build.props │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── app.manifest │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── GameMultiplatform.vstemplate │ │ │ │ ├── Shared/ │ │ │ │ │ ├── Game.cs │ │ │ │ │ ├── Shared.vstemplate │ │ │ │ │ ├── SharedProject.projitems │ │ │ │ │ └── SharedProject.shproj │ │ │ │ └── WindowsDX/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ └── app.manifest │ │ │ ├── Multiplatform.NetFramework/ │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── DesktopGL/ │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ ├── Program.cs │ │ │ │ │ ├── Properties/ │ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ │ └── app.manifest │ │ │ │ ├── GameMultiplatform.vstemplate │ │ │ │ ├── Shared/ │ │ │ │ │ ├── Game.cs │ │ │ │ │ ├── Shared.vstemplate │ │ │ │ │ ├── SharedProject.projitems │ │ │ │ │ └── SharedProject.shproj │ │ │ │ ├── UWPCore/ │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ ├── Package.appxmanifest │ │ │ │ │ ├── Program.cs │ │ │ │ │ └── Properties/ │ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ │ └── Default.rd.xml │ │ │ │ ├── UWPXaml/ │ │ │ │ │ ├── App.xaml │ │ │ │ │ ├── App.xaml.cs │ │ │ │ │ ├── Application.csproj │ │ │ │ │ ├── Game.vstemplate │ │ │ │ │ ├── MainPage.xaml │ │ │ │ │ ├── MainPage.xaml.cs │ │ │ │ │ ├── Package.appxmanifest │ │ │ │ │ └── Properties/ │ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ │ └── Default.rd.xml │ │ │ │ └── WindowsDX/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ └── app.manifest │ │ │ ├── Oculus.NetCore/ │ │ │ │ ├── Activity.cs │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── Application.csproj │ │ │ │ ├── Assets/ │ │ │ │ │ └── AboutAssets.txt │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ └── Resources/ │ │ │ │ ├── AboutResources.txt │ │ │ │ ├── Resource.Designer.cs │ │ │ │ └── Values/ │ │ │ │ ├── Strings.xml │ │ │ │ └── Styles.xml │ │ │ ├── UWPCore.UAP/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Package.appxmanifest │ │ │ │ ├── Program.cs │ │ │ │ └── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── Default.rd.xml │ │ │ ├── UWPXaml.UAP/ │ │ │ │ ├── App.xaml │ │ │ │ ├── App.xaml.cs │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── MainPage.xaml │ │ │ │ ├── MainPage.xaml.cs │ │ │ │ ├── Package.appxmanifest │ │ │ │ └── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── Default.rd.xml │ │ │ ├── WindowsDX.NetCore/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ └── app.manifest │ │ │ ├── WindowsDX.NetFramework/ │ │ │ │ ├── Application.csproj │ │ │ │ ├── Content/ │ │ │ │ │ └── Content.mgcb │ │ │ │ ├── Game.cs │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ └── app.manifest │ │ │ └── iOS.NetCore/ │ │ │ ├── Application.csproj │ │ │ ├── Content/ │ │ │ │ └── Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ ├── Entitlements.plist │ │ │ ├── Game.cs │ │ │ ├── Game.vstemplate │ │ │ ├── Info.plist │ │ │ └── Program.cs │ │ └── default.build │ ├── default.build │ └── dotnetTemplates/ │ ├── Install.bat │ ├── README.md │ ├── Uninstall.bat │ ├── content/ │ │ ├── Android.NetCore.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Activity.cs │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── AndroidManifest.xml │ │ │ ├── Assets/ │ │ │ │ └── AboutAssets.txt │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ └── Resources/ │ │ │ ├── AboutResources.txt │ │ │ ├── Resource.Designer.cs │ │ │ └── Values/ │ │ │ ├── Strings.xml │ │ │ └── Styles.xml │ │ ├── BlazorGL.NetCore.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── App.razor │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ ├── MainLayout.razor │ │ │ ├── MainLayout.razor.css │ │ │ ├── Pages/ │ │ │ │ ├── Index.razor │ │ │ │ └── Index.razor.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── _Imports.razor │ │ │ └── wwwroot/ │ │ │ ├── Content/ │ │ │ │ └── .gitignore │ │ │ ├── css/ │ │ │ │ └── app.css │ │ │ ├── index.html │ │ │ └── js/ │ │ │ ├── decode.js │ │ │ ├── micProcessor.js │ │ │ └── streamProcessor.js │ │ ├── ContentPipelineExtension.NetStandard.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── ContentImporter1.cs │ │ │ ├── ContentProcessor1.cs │ │ │ └── Directory.Build.props │ │ ├── DrawableGameComponent.CSharp/ │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ └── DrawableGameComponent1.cs │ │ ├── GameComponent.CSharp/ │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ └── GameComponent1.cs │ │ ├── Multiplatform.NetCore.CSharp/ │ │ │ ├── $projectname$.Android.GL/ │ │ │ │ ├── $projectname$.Android.GL.csproj │ │ │ │ ├── $projectname$Activity.cs │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── Assets/ │ │ │ │ │ └── AboutAssets.txt │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ └── Resources/ │ │ │ │ ├── AboutResources.txt │ │ │ │ ├── Resource.Designer.cs │ │ │ │ └── Values/ │ │ │ │ ├── Strings.xml │ │ │ │ └── Styles.xml │ │ │ ├── $projectname$.Blazor.GL/ │ │ │ │ ├── $projectname$.Blazor.GL.csproj │ │ │ │ ├── App.razor │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── MainLayout.razor │ │ │ │ ├── MainLayout.razor.css │ │ │ │ ├── Pages/ │ │ │ │ │ ├── Index.razor │ │ │ │ │ └── Index.razor.cs │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── launchSettings.json │ │ │ │ ├── _Imports.razor │ │ │ │ └── wwwroot/ │ │ │ │ ├── Content/ │ │ │ │ │ └── .gitignore │ │ │ │ ├── css/ │ │ │ │ │ └── app.css │ │ │ │ ├── index.html │ │ │ │ └── js/ │ │ │ │ ├── decode.js │ │ │ │ ├── micProcessor.js │ │ │ │ └── streamProcessor.js │ │ │ ├── $projectname$.SDL2.GL/ │ │ │ │ ├── $projectname$.SDL2.GL.csproj │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ └── app.manifest │ │ │ ├── $projectname$.Shared/ │ │ │ │ ├── $projectname$.Shared.projitems │ │ │ │ ├── $projectname$.Shared.shproj │ │ │ │ └── $projectname$Game.cs │ │ │ ├── $projectname$.WinForms.DX11/ │ │ │ │ ├── $projectname$.WinForms.DX11.csproj │ │ │ │ ├── Directory.Build.props │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ └── app.manifest │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ └── Directory.Build.props │ │ ├── Multiplatform.NetFramework.CSharp/ │ │ │ ├── $projectname$.SDL2.GL/ │ │ │ │ ├── $projectname$.SDL2.GL.csproj │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ └── app.manifest │ │ │ ├── $projectname$.Shared/ │ │ │ │ ├── $projectname$.Shared.projitems │ │ │ │ ├── $projectname$.Shared.shproj │ │ │ │ └── $projectname$Game.cs │ │ │ ├── $projectname$.UWPCore/ │ │ │ │ ├── $projectname$.UWPCore.csproj │ │ │ │ ├── Package.appxmanifest │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ └── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── Default.rd.xml │ │ │ ├── $projectname$.UWPXaml/ │ │ │ │ ├── $projectname$.UWPXaml.csproj │ │ │ │ ├── App.xaml │ │ │ │ ├── App.xaml.cs │ │ │ │ ├── MainPage.xaml │ │ │ │ ├── MainPage.xaml.cs │ │ │ │ ├── Package.appxmanifest │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ └── Properties/ │ │ │ │ ├── AssemblyInfo.cs │ │ │ │ └── Default.rd.xml │ │ │ ├── $projectname$.WinForms.DX11/ │ │ │ │ ├── $projectname$.WinForms.DX11.csproj │ │ │ │ ├── Platform$projectname$Game.cs │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ └── app.manifest │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ └── .template.config/ │ │ │ ├── ide.host.json │ │ │ └── template.json │ │ ├── Oculus.NetCore.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Activity.cs │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── Game.vstemplate │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── AndroidManifest.xml │ │ │ ├── Assets/ │ │ │ │ └── AboutAssets.txt │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ └── Resources/ │ │ │ ├── AboutResources.txt │ │ │ ├── Resource.Designer.cs │ │ │ └── Values/ │ │ │ ├── Strings.xml │ │ │ └── Styles.xml │ │ ├── SDL2.GL.NetCore.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ ├── Program.cs │ │ │ └── app.manifest │ │ ├── SDL2.GL.NetFramework.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── app.manifest │ │ ├── UWPCore.UAP.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Package.appxmanifest │ │ │ ├── Program.cs │ │ │ └── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── Default.rd.xml │ │ ├── UWPXaml.UAP.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── App.xaml │ │ │ ├── App.xaml.cs │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── MainPage.xaml │ │ │ ├── MainPage.xaml.cs │ │ │ ├── Package.appxmanifest │ │ │ └── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── Default.rd.xml │ │ ├── WinForms.DX11.NetCore.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Directory.Build.props │ │ │ ├── Program.cs │ │ │ └── app.manifest │ │ ├── WinForms.DX11.NetFramework.CSharp/ │ │ │ ├── $projectname$.csproj │ │ │ ├── $projectname$.sln │ │ │ ├── $projectname$Game.cs │ │ │ ├── .template.config/ │ │ │ │ ├── ide.host.json │ │ │ │ └── template.json │ │ │ ├── Content/ │ │ │ │ └── $projectname$Content.mgcb │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── app.manifest │ │ └── iOS.NetCore.CSharp/ │ │ ├── $projectname$.csproj │ │ ├── $projectname$.sln │ │ ├── $projectname$Game.cs │ │ ├── .template.config/ │ │ │ ├── ide.host.json │ │ │ └── template.json │ │ ├── Content/ │ │ │ └── $projectname$Content.mgcb │ │ ├── Directory.Build.props │ │ ├── Entitlements.plist │ │ ├── Info.plist │ │ └── Program.cs │ ├── installPackage.bat │ ├── nkast.Kni.Templates.csproj │ ├── pack.bat │ └── uninstallPackage.bat ├── Tests/ │ ├── Assets/ │ │ ├── Audio/ │ │ │ ├── Tests.xap │ │ │ ├── Win/ │ │ │ │ ├── Tests.xgs │ │ │ │ ├── Tests.xsb │ │ │ │ └── Tests.xwb │ │ │ ├── rock_loop_stereo.ogg │ │ │ ├── rock_loop_stereo.wma │ │ │ ├── tone_mono_44khz_16bit.xnb │ │ │ ├── tone_mono_44khz_8bit.xnb │ │ │ ├── tone_mono_44khz_float.xnb │ │ │ ├── tone_mono_44khz_imaadpcm.xnb │ │ │ ├── tone_mono_44khz_msadpcm.xnb │ │ │ ├── tone_stereo_44khz_16bit.xnb │ │ │ ├── tone_stereo_44khz_8bit.xnb │ │ │ ├── tone_stereo_44khz_float.xnb │ │ │ ├── tone_stereo_44khz_imaadpcm.xnb │ │ │ └── tone_stereo_44khz_msadpcm.xnb │ │ ├── Effects/ │ │ │ ├── Bevels.fx │ │ │ ├── BlackOut.fx │ │ │ ├── ColorFlip.fx │ │ │ ├── ComputeShader.fx │ │ │ ├── CustomSpriteBatchEffect.fx │ │ │ ├── CustomSpriteBatchEffectComparisonSampler.fx │ │ │ ├── DeferredBasicEffect.fx │ │ │ ├── DefinesTest.fx │ │ │ ├── DirectX/ │ │ │ │ ├── Bevels.xnb │ │ │ │ ├── BlackOut.xnb │ │ │ │ ├── ColorFlip.xnb │ │ │ │ ├── CustomSpriteBatchEffect.xnb │ │ │ │ ├── CustomSpriteBatchEffectComparisonSampler.xnb │ │ │ │ ├── Grayscale.xnb │ │ │ │ ├── HighContrast.xnb │ │ │ │ ├── Instancing.xnb │ │ │ │ ├── Invert.xnb │ │ │ │ ├── NewSyntax_s0s1t0t1.xnb │ │ │ │ ├── NewSyntax_t0t1.xnb │ │ │ │ ├── NoEffect.xnb │ │ │ │ ├── OldSyntax_s0s1t0t1.xnb │ │ │ │ ├── OldSyntax_t0t1.xnb │ │ │ │ ├── OldSyntax_t1t0.xnb │ │ │ │ ├── ParserTest.xnb │ │ │ │ ├── RainbowH.xnb │ │ │ │ ├── TextureArrayEffect.xnb │ │ │ │ └── VertexTextureEffect.xnb │ │ │ ├── DirectX.mgcb │ │ │ ├── Grayscale.fx │ │ │ ├── HighContrast.fx │ │ │ ├── Instancing.fx │ │ │ ├── Invert.fx │ │ │ ├── NewSyntax_s0s1t0t1.fx │ │ │ ├── NewSyntax_t0t1.fx │ │ │ ├── NoEffect.fx │ │ │ ├── OldSyntax_s0s1.fx │ │ │ ├── OldSyntax_s0s1t0t1.fx │ │ │ ├── OldSyntax_t0t1.fx │ │ │ ├── OldSyntax_t1t0.fx │ │ │ ├── OldSyntax_x.fx │ │ │ ├── OpenGL/ │ │ │ │ ├── Bevels.xnb │ │ │ │ ├── BlackOut.xnb │ │ │ │ ├── ColorFlip.xnb │ │ │ │ ├── CustomSpriteBatchEffect.xnb │ │ │ │ ├── Grayscale.xnb │ │ │ │ ├── HighContrast.xnb │ │ │ │ ├── Invert.xnb │ │ │ │ ├── NewSyntax_s0s1t0t1.xnb │ │ │ │ ├── NewSyntax_t0t1.xnb │ │ │ │ ├── NoEffect.xnb │ │ │ │ ├── OldSyntax_s0s1t0t1.xnb │ │ │ │ ├── OldSyntax_t0t1.xnb │ │ │ │ ├── OldSyntax_t1t0.xnb │ │ │ │ └── RainbowH.xnb │ │ │ ├── OpenGL.mgcb │ │ │ ├── OptimizedMatrix.fx │ │ │ ├── OptimizedMatrixArray.fx │ │ │ ├── ParserTest.fx │ │ │ ├── PreprocessorInclude.fxh │ │ │ ├── PreprocessorTest.fx │ │ │ ├── README.txt │ │ │ ├── RainbowH.fx │ │ │ ├── TextureArrayEffect.fx │ │ │ ├── VertexTextureEffect.fx │ │ │ ├── XNA/ │ │ │ │ ├── Bevels.xnb │ │ │ │ ├── BlackOut.xnb │ │ │ │ ├── ColorFlip.xnb │ │ │ │ ├── CustomSpriteBatchEffect.xnb │ │ │ │ ├── Grayscale.xnb │ │ │ │ ├── HighContrast.xnb │ │ │ │ ├── Instancing.xnb │ │ │ │ ├── Invert.xnb │ │ │ │ ├── NoEffect.xnb │ │ │ │ ├── OldSyntax_s0s1.xnb │ │ │ │ ├── OldSyntax_s0s1t0t1.xnb │ │ │ │ ├── OldSyntax_t0t1.xnb │ │ │ │ ├── OldSyntax_x.xnb │ │ │ │ └── RainbowH.xnb │ │ │ ├── XNA.csproj │ │ │ └── XNA.sln │ │ ├── Fonts/ │ │ │ ├── DataFont.xnb │ │ │ ├── Default.xnb │ │ │ ├── JingJing.spritefont │ │ │ ├── JingJing.xnb │ │ │ ├── Lindsey.spritefont │ │ │ ├── Lindsey.xnb │ │ │ ├── Localized.spritefont │ │ │ ├── Motorwerk.spritefont │ │ │ ├── Motorwerk.xnb │ │ │ ├── QuartzMS.spritefont │ │ │ ├── QuartzMS.xnb │ │ │ ├── SegoeKeycaps.spritefont │ │ │ ├── SegoeKeycaps.xnb │ │ │ └── Strings.resx │ │ ├── Models/ │ │ │ ├── BlenderDefaultCube.xnb │ │ │ ├── Box.blend │ │ │ ├── Dude/ │ │ │ │ ├── dude.fbx │ │ │ │ ├── dude_2011.fbx │ │ │ │ ├── head.tga │ │ │ │ ├── jacket.tga │ │ │ │ ├── pants.tga │ │ │ │ └── upBodyC.tga │ │ │ ├── NonSkeletonAnimated.fbx │ │ │ ├── Spaceship.xnb │ │ │ └── enemy_0.xnb │ │ ├── Projects/ │ │ │ ├── BuildSimpleProject.csproj │ │ │ └── Content/ │ │ │ ├── Content.mgcb │ │ │ └── ContentFont.spritefont │ │ ├── Textures/ │ │ │ ├── GlassPane.xnb │ │ │ ├── LogoOnly_64px-R8G8B8.dds │ │ │ ├── LogoOnly_64px-X8R8G8B8.dds │ │ │ ├── LogoOnly_64px-mipmaps.dds │ │ │ ├── LogoOnly_64px.dds │ │ │ ├── LogoOnly_64px.tga │ │ │ ├── LogoOnly_64px.tif │ │ │ ├── Logo_65x64_16bit.xnb │ │ │ ├── MonoGameIcon.xnb │ │ │ ├── SampleCube64DXT1Mips.dds │ │ │ ├── SampleCube64DXT1Mips.xnb │ │ │ ├── Sunset.dds │ │ │ ├── Surge.xnb │ │ │ ├── fun-background.xnb │ │ │ ├── lines-128.xnb │ │ │ ├── lines-32.xnb │ │ │ ├── lines-64.xnb │ │ │ ├── lines-diag-128.xnb │ │ │ ├── lines-diag-32.xnb │ │ │ ├── lines-diag-64.xnb │ │ │ ├── random_16px_dxt.xnb │ │ │ ├── random_16px_dxt_alpha.xnb │ │ │ ├── red_668_dxt.xnb │ │ │ ├── rgbf.tif │ │ │ ├── sample_1280x853.hdr │ │ │ ├── white-1.xnb │ │ │ ├── white-128.xnb │ │ │ ├── white-32.xnb │ │ │ └── white-64.xnb │ │ ├── Xml/ │ │ │ ├── 01_TheBasics.xml │ │ │ ├── 02_Inheritance.xml │ │ │ ├── 03_IncludingPrivateMembers.xml │ │ │ ├── 04_ExcludingPublicMembers.xml │ │ │ ├── 04_ExcludingPublicMembersOutput.xml │ │ │ ├── 05_RenamingXmlElements.xml │ │ │ ├── 06_NullReferences.xml │ │ │ ├── 07_OptionalElements.xml │ │ │ ├── 08_AllowNull.xml │ │ │ ├── 09_Collections.xml │ │ │ ├── 10_CollectionItemName.xml │ │ │ ├── 11_Dictionaries.xml │ │ │ ├── 12_MathTypes.xml │ │ │ ├── 13_PolymorphicTypes.xml │ │ │ ├── 14_Namespaces.xml │ │ │ ├── 15_FlattenContent.xml │ │ │ ├── 16_SharedResources.xml │ │ │ ├── 17_ExternalReferences.xml │ │ │ ├── 18_PrimitiveTypes.xml │ │ │ ├── 19_FontDescription.xml │ │ │ ├── 20_SystemTypes.xml │ │ │ ├── 21_CustomFormatting.xml │ │ │ ├── 22_GetterOnlyProperties.xml │ │ │ ├── 23_GetterOnlyPolymorphicArrayProperties.xml │ │ │ ├── 24_GenericTypes.xml │ │ │ ├── 25_StructArrayNoElements.xml │ │ │ ├── 26_ChildCollections.xml │ │ │ ├── 27_Colors.xml │ │ │ └── 28_XnaCurve.xml │ │ └── tests.xsl │ ├── Components/ │ │ ├── Colored3DCubeComponent.cs │ │ ├── DrawFrameNumberComponent.cs │ │ ├── FlexibleGameComponent.cs │ │ ├── ImplicitDrawOrderComponent.cs │ │ ├── InitializeOrderComponent.cs │ │ ├── Simple3DCubeComponent.cs │ │ ├── SpaceshipModelDrawComponent.cs │ │ ├── TexturedQuadComponent.cs │ │ ├── VisualTestDrawableGameComponent.cs │ │ └── VisualTestGameComponent.cs │ ├── ContentPipeline/ │ │ ├── AssetTestClasses.cs │ │ ├── AudioContentTests.cs │ │ ├── BitmapContentTests.cs │ │ ├── BuilderTargetsTest.cs │ │ ├── ContentCompilerTest.cs │ │ ├── EffectProcessorTests.cs │ │ ├── FbxImporterTests.cs │ │ ├── FontDescriptionProcessorTests.cs │ │ ├── FontDescriptionTests.cs │ │ ├── FontTextureProcessorTests.cs │ │ ├── IntermediateDeserializerTest.cs │ │ ├── IntermediateSerializerTest.cs │ │ ├── MeshBuilderTests.cs │ │ ├── MeshHelperTest.cs │ │ ├── ModelProcessorTests.cs │ │ ├── Mp3ImporterTests.cs │ │ ├── OggImporterTests.cs │ │ ├── OpenAssetImporterTests.cs │ │ ├── TestCompiler.cs │ │ ├── TestImporterContext.cs │ │ ├── TextureContentTests.cs │ │ ├── TextureImporterTests.cs │ │ ├── TextureProcessorTests.cs │ │ ├── WavImporterTests.cs │ │ └── WmaImporterTests.cs │ ├── Directory.Build.props │ ├── Framework/ │ │ ├── BoundingTest.cs │ │ ├── ColorTest.cs │ │ ├── CurveKeyCollectionTest.cs │ │ ├── CurveKeyTest.cs │ │ ├── CurveTest.cs │ │ ├── EnumConformingTest.cs │ │ ├── FrameworkDispatcherTest.cs │ │ ├── MathHelperTest.cs │ │ ├── MatrixTest.cs │ │ ├── PackedVectorTest.cs │ │ ├── PlaneTest.cs │ │ ├── PointTest.cs │ │ ├── QuaternionTest.cs │ │ ├── RayTest.cs │ │ ├── RectangleTest.cs │ │ ├── TitleContainerTest.cs │ │ ├── UtilitiesTest.cs │ │ ├── Vector2Test.cs │ │ ├── Vector3Test.cs │ │ ├── Vector4Test.cs │ │ └── VertexTests.cs │ ├── Framework.Audio/ │ │ ├── DynamicSoundEffectInstanceTest.cs │ │ ├── SoundEffectInstanceTest.cs │ │ ├── SoundEffectTest.cs │ │ ├── XAudio/ │ │ │ └── SoundEffectInstanceXAudioTest.cs │ │ └── XactTest.cs │ ├── Framework.Game/ │ │ ├── GameComponentTest.cs │ │ ├── GameTest+Methods.cs │ │ ├── GameTest+Properties.cs │ │ └── GameTest.cs │ ├── Framework.Graphics/ │ │ ├── BlendStateTest.cs │ │ ├── DepthStencilStateTest.cs │ │ ├── EffectTest.cs │ │ ├── GraphicsAdapterTest.cs │ │ ├── GraphicsDeviceManagerTest.cs │ │ ├── GraphicsDeviceTest.cs │ │ ├── IndexBufferTest.cs │ │ ├── MiscellaneousTests.cs │ │ ├── ModelTest.cs │ │ ├── OcclusionQueryTest.cs │ │ ├── ProfileReachTest.cs │ │ ├── RasterizerStateTest.cs │ │ ├── RenderTarget2DTest.cs │ │ ├── RenderTargetCubeTest.cs │ │ ├── SamplerStateTest.cs │ │ ├── ScissorRectangleTest.cs │ │ ├── ShaderTest.cs │ │ ├── SpriteBatchTest.cs │ │ ├── SpriteFontTest.cs │ │ ├── Texture2DNonVisualTest.cs │ │ ├── Texture2DTest.cs │ │ ├── Texture3DNonVisualTest.cs │ │ ├── Texture3DTest.cs │ │ ├── TextureCubeTest.cs │ │ ├── VertexBufferTest.cs │ │ ├── ViewportTest.cs │ │ └── VisualMiscellaneousTests.cs │ ├── Framework.Input/ │ │ ├── GamePadTest.cs │ │ ├── GestureRecognizerTest.cs │ │ ├── JoystickTest.cs │ │ ├── KeyboardTest.cs │ │ ├── MouseTest.cs │ │ ├── TouchCollectionTest.cs │ │ ├── TouchLocationTest.cs │ │ └── TouchPanelTest.cs │ ├── Interactive/ │ │ ├── Linux/ │ │ │ └── MouseGetStateAndIsMouseVisibleTester/ │ │ │ └── MouseGetStateAndIsMouseVisibleTester.csproj │ │ ├── MacOS/ │ │ │ ├── BlockingRun/ │ │ │ │ ├── BlockingRun.csproj │ │ │ │ ├── BlockingRunGame.cs │ │ │ │ ├── Content/ │ │ │ │ │ └── SimpleFont.xnb │ │ │ │ ├── Info.plist │ │ │ │ └── Main.cs │ │ │ ├── GamePadTest/ │ │ │ │ ├── Content/ │ │ │ │ │ ├── UiCursor.xnb │ │ │ │ │ └── fntStandard.xnb │ │ │ │ ├── Game1.cs │ │ │ │ ├── GamePadTest.csproj │ │ │ │ ├── Info.plist │ │ │ │ └── Program.cs │ │ │ ├── MouseGetStateAndIsMouseVisibleTester/ │ │ │ │ ├── MouseGetStateAndIsMouseVisibleTester/ │ │ │ │ │ ├── Content/ │ │ │ │ │ │ ├── UiCursor.xnb │ │ │ │ │ │ └── fntStandard.xnb │ │ │ │ │ ├── Enums.cs │ │ │ │ │ ├── Game1.cs │ │ │ │ │ ├── Info.plist │ │ │ │ │ ├── InputManager.cs │ │ │ │ │ ├── MainMenu.xib │ │ │ │ │ ├── MouseGetStateAndIsMouseVisibleTester.csproj │ │ │ │ │ ├── Object.cs │ │ │ │ │ ├── Program.cs │ │ │ │ │ ├── Properties/ │ │ │ │ │ │ └── AssemblyInfo.cs │ │ │ │ │ └── TextManager.cs │ │ │ │ └── MouseGetStateAndIsMouseVisibleTester.sln │ │ │ ├── PrimitivesTest/ │ │ │ │ ├── App.config │ │ │ │ ├── Game1.cs │ │ │ │ ├── Info.plist │ │ │ │ ├── PrimitivesTest.csproj │ │ │ │ └── Program.cs │ │ │ ├── SoundTest/ │ │ │ │ ├── Content/ │ │ │ │ │ ├── DepositingIntoVat_Loop.xnb │ │ │ │ │ ├── Explosion.xnb │ │ │ │ │ ├── ExplosionSound.xnb │ │ │ │ │ └── FillingHoneyPot_Loop.xnb │ │ │ │ ├── Game1.cs │ │ │ │ ├── Info.plist │ │ │ │ ├── MainMenu.xib │ │ │ │ ├── Program.cs │ │ │ │ └── SoundTest_MacOS.csproj │ │ │ ├── SoundTest2/ │ │ │ │ └── SoundTest2_MacOs/ │ │ │ │ ├── Content/ │ │ │ │ │ ├── DepositingIntoVat_Loop.xnb │ │ │ │ │ ├── Explosion.xnb │ │ │ │ │ ├── ExplosionSound.xnb │ │ │ │ │ └── FillingHoneyPot_Loop.xnb │ │ │ │ ├── Game1.cs │ │ │ │ ├── Info.plist │ │ │ │ ├── MainMenu.xib │ │ │ │ ├── Program.cs │ │ │ │ └── SoundTest2_MacOs.csproj │ │ │ ├── TestDataSetAndGet/ │ │ │ │ ├── Content/ │ │ │ │ │ ├── Block.xnb │ │ │ │ │ ├── Person.xnb │ │ │ │ │ └── Warrior3Active.xnb │ │ │ │ ├── Game1.cs │ │ │ │ ├── Info.plist │ │ │ │ ├── Program.cs │ │ │ │ └── TestDataSetAndGet.csproj │ │ │ └── TextureScaleColorTest/ │ │ │ ├── Content/ │ │ │ │ ├── FontCalibri14.xnb │ │ │ │ └── blank.xnb │ │ │ ├── Game1.cs │ │ │ ├── Info.plist │ │ │ ├── MainMenu.xib │ │ │ ├── Program.cs │ │ │ └── TextureScaleColorTest.csproj │ │ ├── MonoGame.InteractiveTests.Linux.sln │ │ ├── MonoGame.InteractiveTests.MacOS.sln │ │ ├── MonoGame.InteractiveTests.Windows.sln │ │ ├── Windows/ │ │ │ ├── Issue1355/ │ │ │ │ ├── Issue1355/ │ │ │ │ │ ├── Game.cs │ │ │ │ │ ├── Issue1355.csproj │ │ │ │ │ └── Issue1355_MonoGame.csproj │ │ │ │ ├── Issue1355.sln │ │ │ │ └── Issue1355Content/ │ │ │ │ ├── DutchAndHarley.spritefont │ │ │ │ └── Issue1355Content.contentproj │ │ │ ├── SoundTest/ │ │ │ │ └── SoundTest.csproj │ │ │ └── SoundTest2/ │ │ │ └── SoundTest2.csproj │ │ └── iOS/ │ │ ├── AppDelegate.cs │ │ ├── Categories.cs │ │ ├── Guide/ │ │ │ └── GuideTestGame.cs │ │ ├── Info.plist │ │ ├── InteractiveTestAttribute.cs │ │ ├── Main.cs │ │ ├── MonoGame.InteractiveTests.iOS.csproj │ │ ├── RootViewController.cs │ │ ├── TestUI/ │ │ │ ├── Button.cs │ │ │ ├── DrawContext.cs │ │ │ ├── Label.cs │ │ │ ├── PaddingF.cs │ │ │ ├── TestUITestGame.cs │ │ │ ├── Universe.cs │ │ │ ├── UniverseComponent.cs │ │ │ ├── View.cs │ │ │ └── ViewCollection.cs │ │ └── TextureScaleTest/ │ │ ├── Info.plist │ │ ├── Program.cs │ │ └── TextureScaleColorTest.csproj │ ├── Kni.Tests.SDL2.GL.csproj │ ├── Kni.Tests.WinForms.DX11.csproj │ ├── Kni.Tests.XNA.csproj │ ├── Kni.Tests.XNA.sln │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── README.md │ ├── Runner/ │ │ ├── Constants.cs │ │ ├── ContentPipeline/ │ │ │ ├── AssetTestUtility.cs │ │ │ ├── TestContentBuildLogger.cs │ │ │ └── TestProcessorContext.cs │ │ ├── Extensions.cs │ │ ├── FrameInfo.cs │ │ ├── FramePixelData.Desktop.cs │ │ ├── FramePixelData.cs │ │ ├── FramePixelData.iOS.cs │ │ ├── GameBase/ │ │ │ ├── CountCallsGame.cs │ │ │ ├── FixtureBase.cs │ │ │ ├── FrameCompareComponent.cs │ │ │ ├── GraphicsDeviceTestFixtureBase.cs │ │ │ ├── MockGame.cs │ │ │ ├── PixelDeltaFrameComparer.cs │ │ │ ├── TestGameBase.cs │ │ │ ├── UpdateGuard.cs │ │ │ ├── VisualTestFixtureBase.cs │ │ │ └── VisualTestGame.cs │ │ ├── PixelArgb.cs │ │ ├── Program.cs │ │ ├── Utility.cs │ │ └── iOS/ │ │ ├── AppDelegate.cs │ │ ├── Info.plist │ │ └── Main.cs │ └── Utilities/ │ └── ActionDaemon.cs ├── ThirdParty/ │ ├── AssimpNet/ │ │ ├── 4.1.0/ │ │ │ └── lib/ │ │ │ ├── net40/ │ │ │ │ └── AssimpNet.xml │ │ │ └── netstandard1.3/ │ │ │ └── AssimpNet.xml │ │ └── 5.0.0/ │ │ ├── License.txt │ │ └── lib/ │ │ ├── net40/ │ │ │ └── AssimpNet.xml │ │ └── netstandard2.0/ │ │ └── AssimpNet.xml │ ├── GamepadConfig/ │ │ ├── GamepadConfig.exe.config │ │ ├── License.txt │ │ ├── Settings.xml │ │ ├── Tao.Sdl.dll.config │ │ ├── Xbox 360 Gamepad.xml │ │ └── Xbox 360 Wireless Receiver.xml │ ├── Lidgren.Network/ │ │ ├── Documentation/ │ │ │ ├── ChangedFromV2.txt │ │ │ ├── Discovery.html │ │ │ ├── Improvements.txt │ │ │ ├── PacketLayout.txt │ │ │ ├── SimulatingBadNetwork.html │ │ │ ├── TODO.txt │ │ │ └── Tutorial.html │ │ ├── Encryption/ │ │ │ ├── NetAESEncryption.cs │ │ │ ├── NetBlockEncryptionBase.cs │ │ │ ├── NetCryptoProviderBase.cs │ │ │ ├── NetDESEncryption.cs │ │ │ ├── NetEncryption.cs │ │ │ ├── NetRC2Encryption.cs │ │ │ ├── NetTripleDESEncryption.cs │ │ │ ├── NetXorEncryption.cs │ │ │ └── NetXteaEncryption.cs │ │ ├── NamespaceDoc.cs │ │ ├── NetBigInteger.cs │ │ ├── NetBitVector.cs │ │ ├── NetBitWriter.cs │ │ ├── NetBuffer.Peek.cs │ │ ├── NetBuffer.Read.Reflection.cs │ │ ├── NetBuffer.Read.cs │ │ ├── NetBuffer.Write.Reflection.cs │ │ ├── NetBuffer.Write.cs │ │ ├── NetBuffer.cs │ │ ├── NetClient.cs │ │ ├── NetConnection.Handshake.cs │ │ ├── NetConnection.Latency.cs │ │ ├── NetConnection.MTU.cs │ │ ├── NetConnection.cs │ │ ├── NetConnectionStatistics.cs │ │ ├── NetConnectionStatus.cs │ │ ├── NetConstants.cs │ │ ├── NetDeliveryMethod.cs │ │ ├── NetException.cs │ │ ├── NetFragmentationHelper.cs │ │ ├── NetFragmentationInfo.cs │ │ ├── NetIncomingMessage.cs │ │ ├── NetIncomingMessageType.cs │ │ ├── NetMessageType.cs │ │ ├── NetNatIntroduction.cs │ │ ├── NetOutgoingMessage.cs │ │ ├── NetPeer.Discovery.cs │ │ ├── NetPeer.Fragmentation.cs │ │ ├── NetPeer.Internal.cs │ │ ├── NetPeer.LatencySimulation.cs │ │ ├── NetPeer.Logging.cs │ │ ├── NetPeer.MessagePools.cs │ │ ├── NetPeer.Send.cs │ │ ├── NetPeer.cs │ │ ├── NetPeerConfiguration.cs │ │ ├── NetPeerStatistics.cs │ │ ├── NetPeerStatus.cs │ │ ├── NetQueue.cs │ │ ├── NetRandom.Implementations.cs │ │ ├── NetRandom.cs │ │ ├── NetRandomSeed.cs │ │ ├── NetReceiverChannelBase.cs │ │ ├── NetReliableOrderedReceiver.cs │ │ ├── NetReliableSenderChannel.cs │ │ ├── NetReliableSequencedReceiver.cs │ │ ├── NetReliableUnorderedReceiver.cs │ │ ├── NetSRP.cs │ │ ├── NetSendResult.cs │ │ ├── NetSenderChannelBase.cs │ │ ├── NetServer.cs │ │ ├── NetStoredReliableMessage.cs │ │ ├── NetTime.cs │ │ ├── NetTuple.cs │ │ ├── NetUPnP.cs │ │ ├── NetUnreliableSenderChannel.cs │ │ ├── NetUnreliableSequencedReceiver.cs │ │ ├── NetUnreliableUnorderedReceiver.cs │ │ ├── NetUtility.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── Resources/ │ │ └── Resource.Designer.cs │ ├── SharpFont/ │ │ └── Windows/ │ │ └── x64/ │ │ └── SharpFont.XML │ └── Typography/ │ ├── README.md │ └── netstandard2.0/ │ ├── Typography.GlyphLayout.deps.json │ └── Typography.OpenFont.deps.json ├── Tools/ │ ├── Content.Pipeline.Editor.WinForms/ │ │ ├── App.config │ │ ├── Common/ │ │ │ ├── ActionStack.cs │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── CommandLineParser.cs │ │ │ ├── CompressionMethod.cs │ │ │ ├── ContentFolder.cs │ │ │ ├── ContentItem.Importer.cs │ │ │ ├── ContentItem.Processor.cs │ │ │ ├── ContentItem.cs │ │ │ ├── ContentItemConverter.cs │ │ │ ├── ContentItemPathComparer.cs │ │ │ ├── ContentItemState.cs │ │ │ ├── ContentItemTemplate.cs │ │ │ ├── FileType.cs │ │ │ ├── IController.cs │ │ │ ├── IProjectItem.cs │ │ │ ├── IProjectObserver.cs │ │ │ ├── IView.cs │ │ │ ├── OutputParser.cs │ │ │ ├── Package.cs │ │ │ ├── PackageReferencesCollection.cs │ │ │ ├── PathComparer.cs │ │ │ ├── PathHelper.cs │ │ │ ├── PipelineController.ExcludeAction.cs │ │ │ ├── PipelineController.IncludeAction.cs │ │ │ ├── PipelineController.MoveAction.cs │ │ │ ├── PipelineController.NewAction.cs │ │ │ ├── PipelineController.UpdateContentItemAction.cs │ │ │ ├── PipelineController.UpdateProjectAction.cs │ │ │ ├── PipelineController.cs │ │ │ ├── PipelineProject.cs │ │ │ ├── PipelineProjectParser.cs │ │ │ ├── PipelineSettings.cs │ │ │ ├── PipelineTypes.cs │ │ │ ├── ProjectState.cs │ │ │ ├── Selection.cs │ │ │ ├── StringExtensions.cs │ │ │ └── Util.cs │ │ ├── Content.Pipeline.Editor.net4.csproj │ │ ├── Content.Pipeline.Editor.net8.csproj │ │ ├── Forms/ │ │ │ ├── AboutDialog.Designer.cs │ │ │ ├── AboutDialog.cs │ │ │ ├── AboutDialog.resx │ │ │ ├── BuildIcons.cs │ │ │ ├── ContentIcons.cs │ │ │ ├── Controls/ │ │ │ │ ├── FilterOutputControl.cs │ │ │ │ └── TabControlEx.cs │ │ │ ├── EditorIcons.cs │ │ │ ├── FolderSelectDialog.cs │ │ │ ├── MainView.Designer.cs │ │ │ ├── MainView.cs │ │ │ ├── MainView.resx │ │ │ ├── MultiSelectTreeview.cs │ │ │ ├── NewContentDialog.Designer.cs │ │ │ ├── NewContentDialog.cs │ │ │ ├── NewContentDialog.resx │ │ │ ├── PackageDialog.Designer.cs │ │ │ ├── PackageDialog.cs │ │ │ ├── PackageDialog.resx │ │ │ ├── PackageReferenceDialog.Designer.cs │ │ │ ├── PackageReferenceDialog.cs │ │ │ ├── PackageReferenceDialog.resx │ │ │ ├── PipelineProjectProxy.cs │ │ │ ├── ReferenceDialog.Designer.cs │ │ │ ├── ReferenceDialog.cs │ │ │ ├── ReferenceDialog.resx │ │ │ ├── SortedEnumTypeConverter.cs │ │ │ ├── TextEditDialog.Designer.cs │ │ │ ├── TextEditDialog.cs │ │ │ ├── TextEditDialog.resx │ │ │ ├── TreeViewExtensions.cs │ │ │ └── TreeViewNodeSorter.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── Resources.Designer.cs │ │ │ ├── Resources.resx │ │ │ ├── Settings.Designer.cs │ │ │ └── Settings.settings │ │ ├── Templates/ │ │ │ ├── Effect.fx │ │ │ ├── Effect.template │ │ │ ├── LocalizedSpriteFont.spritefont │ │ │ ├── LocalizedSpriteFont.template │ │ │ ├── SpriteEffect.fx │ │ │ ├── SpriteEffect.template │ │ │ ├── SpriteFont.spritefont │ │ │ ├── SpriteFont.template │ │ │ ├── XmlContent.template │ │ │ └── XmlContent.xml │ │ └── app.manifest │ ├── Directory.Build.props │ ├── EffectCompiler/ │ │ ├── BuildLogger.cs │ │ ├── CommandLineParser.cs │ │ ├── EffectCompiler.csproj │ │ ├── ImporterContext.cs │ │ ├── Options.cs │ │ ├── ProcessorContext.cs │ │ ├── Program.cs │ │ └── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── launchSettings.json │ ├── MonoGame.Content.Builder/ │ │ ├── AssertListener.cs │ │ ├── BuildAsyncState.cs │ │ ├── BuildEvent.cs │ │ ├── CommandLineParser.cs │ │ ├── CompressionMethod.cs │ │ ├── ConsoleAsyncLogger.cs │ │ ├── ConsoleLogger.cs │ │ ├── ContentBuilder.cs │ │ ├── Directory.Build.props │ │ ├── ImporterContext.cs │ │ ├── MGCB.csproj │ │ ├── Package.cs │ │ ├── PackageReferencesCollection.cs │ │ ├── PathHelper.cs │ │ ├── PipelineManager.cs │ │ ├── ProcessorContext.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ └── launchSettings.json │ │ └── SourceFileCollection.cs │ └── MonoGame.Packaging.Flatpak/ │ ├── BuildFlatpakTask.cs │ ├── MonoGame.Packaging.Flatpak.Common.props │ ├── MonoGame.Packaging.Flatpak.csproj │ ├── MonoGame.Packaging.Flatpak.targets │ └── README.md ├── default.build ├── global.json ├── kniPackage.props └── src/ ├── Xna.Framework/ │ ├── BoundingBox.cs │ ├── BoundingFrustum.cs │ ├── BoundingSphere.cs │ ├── Complex.cs │ ├── ContainmentType.cs │ ├── Curve.cs │ ├── CurveContinuity.cs │ ├── CurveKey.cs │ ├── CurveKeyCollection.cs │ ├── CurveLoopType.cs │ ├── CurveTangent.cs │ ├── FrameworkDispatcher.cs │ ├── ICurveEvaluator.cs │ ├── ILLink.Descriptors.xml │ ├── IntersectsHelper.cs │ ├── MathHelper.cs │ ├── Matrix.cs │ ├── Plane.cs │ ├── PlaneIntersectionType.cs │ ├── PlayerIndex.cs │ ├── Point.cs │ ├── Pose2.cs │ ├── Pose3.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Quaternion.cs │ ├── Ray.cs │ ├── Rectangle.cs │ ├── Vector2.cs │ ├── Vector3.cs │ ├── Vector4.cs │ └── Xna.Framework.csproj ├── Xna.Framework.Audio/ │ ├── Audio/ │ │ ├── AudioChannels.cs │ │ ├── AudioEmitter.cs │ │ ├── AudioFactory.cs │ │ ├── AudioListener.cs │ │ ├── AudioService.InstancePool.cs │ │ ├── AudioService.Microphones.cs │ │ ├── AudioService.cs │ │ ├── AudioServiceStrategy.cs │ │ ├── DynamicSoundEffectInstance.cs │ │ ├── InstancePlayLimitException.cs │ │ ├── Microphone.cs │ │ ├── NoAudioHardwareException.cs │ │ ├── NoMicrophoneConnectedException.cs │ │ ├── SoundEffect.cs │ │ ├── SoundEffectInstance.cs │ │ ├── SoundState.cs │ │ ├── Utilities/ │ │ │ ├── AudioUtil.cs │ │ │ └── MsAdpcmDecoder.cs │ │ └── Xact/ │ │ ├── AudioCategory.cs │ │ ├── AudioEngine.cs │ │ ├── AudioStopOptions.cs │ │ ├── ClipEvent.cs │ │ ├── CrossfadeType.cs │ │ ├── Cue.cs │ │ ├── DspParameter.cs │ │ ├── FilterMode.cs │ │ ├── MaxInstanceBehavior.cs │ │ ├── MiniFormatTag.cs │ │ ├── PlayWaveEvent.cs │ │ ├── ReverbSettings.cs │ │ ├── RpcCurve.cs │ │ ├── RpcParameter.cs │ │ ├── RpcPoint.cs │ │ ├── RpcPointType.cs │ │ ├── RpcVariable.cs │ │ ├── SoundBank.cs │ │ ├── VolumeEvent.cs │ │ ├── WaveBank.cs │ │ ├── XactClip.cs │ │ ├── XactHelpers.cs │ │ └── XactSound.cs │ ├── Content/ │ │ └── SoundEffectReader.cs │ ├── ILLink.Descriptors.xml │ ├── NamespaceDoc.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Audio.csproj ├── Xna.Framework.Content/ │ ├── Content/ │ │ ├── ContentLoadException.cs │ │ ├── ContentManager.cs │ │ ├── ContentReader.cs │ │ ├── ContentReaders/ │ │ │ ├── ArrayReader.cs │ │ │ ├── BooleanReader.cs │ │ │ ├── BoundingBoxReader.cs │ │ │ ├── BoundingFrustumReader.cs │ │ │ ├── BoundingSphereReader.cs │ │ │ ├── ByteReader.cs │ │ │ ├── CharReader.cs │ │ │ ├── ComplexReader.cs │ │ │ ├── CurveReader.cs │ │ │ ├── DateTimeReader.cs │ │ │ ├── DecimalReader.cs │ │ │ ├── DictionaryReader.cs │ │ │ ├── DoubleReader.cs │ │ │ ├── EnumReader.cs │ │ │ ├── ExternalReferenceReader.cs │ │ │ ├── Int16Reader.cs │ │ │ ├── Int32Reader.cs │ │ │ ├── Int64Reader.cs │ │ │ ├── ListReader.cs │ │ │ ├── MatrixReader.cs │ │ │ ├── MultiArrayReader.cs │ │ │ ├── NullableReader.cs │ │ │ ├── PlaneReader.cs │ │ │ ├── PointReader.cs │ │ │ ├── QuaternionReader.cs │ │ │ ├── RayReader.cs │ │ │ ├── RectangleReader.cs │ │ │ ├── ReflectiveReader.cs │ │ │ ├── SByteReader.cs │ │ │ ├── SingleReader.cs │ │ │ ├── StringReader.cs │ │ │ ├── TimeSpanReader.cs │ │ │ ├── UInt16Reader.cs │ │ │ ├── UInt32Reader.cs │ │ │ ├── UInt64Reader.cs │ │ │ ├── Vector2Reader.cs │ │ │ ├── Vector3Reader.cs │ │ │ └── Vector4Reader.cs │ │ ├── ContentSerializerAttribute.cs │ │ ├── ContentSerializerCollectionItemNameAttribute.cs │ │ ├── ContentSerializerIgnoreAttribute.cs │ │ ├── ContentSerializerRuntimeTypeAttribute.cs │ │ ├── ContentSerializerTypeVersionAttribute.cs │ │ ├── ContentTypeReader.cs │ │ ├── ContentTypeReaderManager.cs │ │ ├── ResourceContentManager.cs │ │ └── Utilities/ │ │ ├── ContentBufferPool.cs │ │ ├── ContentExtensions.cs │ │ ├── FileHelpers.cs │ │ ├── Lz4DecoderStream.cs │ │ ├── LzxDecoder.cs │ │ ├── LzxDecoderStream.cs │ │ └── ReflectionHelpers.cs │ ├── ILLink.Descriptors.xml │ ├── NamespaceDoc.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── TitleContainer.cs │ ├── TitleContainerFactory.cs │ ├── TitleContainerStrategy.cs │ ├── TitlePlatform.cs │ └── Xna.Framework.Content.csproj ├── Xna.Framework.Content.Pipeline/ │ ├── ChildCollection.cs │ ├── ContentBuildLogger.cs │ ├── ContentIdentity.cs │ ├── ContentImporter.cs │ ├── ContentImporterAttribute.cs │ ├── ContentImporterContext.cs │ ├── ContentItem.cs │ ├── ContentProcessor.cs │ ├── ContentProcessorAttribute.cs │ ├── ContentProcessorContext.cs │ ├── ExternalReference.cs │ ├── IContentImporter.cs │ ├── IContentProcessor.cs │ ├── InvalidContentException.cs │ ├── NamedValueDictionary.cs │ ├── OpaqueDataDictionary.cs │ ├── PipelineComponentScanner.cs │ ├── PipelineException.cs │ ├── ProcessorParameter.cs │ ├── ProcessorParameterCollection.cs │ ├── Processors/ │ │ └── PassThroughProcessor.cs │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── AssemblyInfo.net4.cs │ ├── Serialization/ │ │ ├── Compiler/ │ │ │ ├── ArrayWriter.cs │ │ │ ├── BooleanWriter.cs │ │ │ ├── BoundingBoxWriter.cs │ │ │ ├── BoundingFrustumWriter.cs │ │ │ ├── BoundingSphereWriter.cs │ │ │ ├── ByteWriter.cs │ │ │ ├── CharWriter.cs │ │ │ ├── ComplexWriter.cs │ │ │ ├── ContentCompiler.cs │ │ │ ├── ContentCompression.cs │ │ │ ├── ContentTypeWriter.cs │ │ │ ├── ContentTypeWriterAttribute.cs │ │ │ ├── ContentTypeWriterBase.cs │ │ │ ├── ContentTypeWriterBaseGeneric.cs │ │ │ ├── ContentWriter.cs │ │ │ ├── CurveWriter.cs │ │ │ ├── DateTimeWriter.cs │ │ │ ├── DecimalWriter.cs │ │ │ ├── DictionaryWriter.cs │ │ │ ├── DoubleWriter.cs │ │ │ ├── EnumWriter.cs │ │ │ ├── ExternalReferenceWriter.cs │ │ │ ├── Int16Writer.cs │ │ │ ├── Int32Writer.cs │ │ │ ├── Int64Writer.cs │ │ │ ├── ListWriter.cs │ │ │ ├── MatrixWriter.cs │ │ │ ├── MultiArrayWriter.cs │ │ │ ├── NullableWriter.cs │ │ │ ├── PlaneWriter.cs │ │ │ ├── PointWriter.cs │ │ │ ├── QuaternionWriter.cs │ │ │ ├── RayWriter.cs │ │ │ ├── RectangleWriter.cs │ │ │ ├── ReflectiveWriter.cs │ │ │ ├── SByteWriter.cs │ │ │ ├── SingleWriter.cs │ │ │ ├── StringWriter.cs │ │ │ ├── TimeSpanWriter.cs │ │ │ ├── UInt16Writer.cs │ │ │ ├── UInt32Writer.cs │ │ │ ├── UInt64Writer.cs │ │ │ ├── Vector2Writer.cs │ │ │ ├── Vector3Writer.cs │ │ │ └── Vector4Writer.cs │ │ └── Intermediate/ │ │ ├── ArraySerializer.cs │ │ ├── BoolSerializer.cs │ │ ├── ByteSerializer.cs │ │ ├── CharSerializer.cs │ │ ├── ColorSerializer.cs │ │ ├── ContentTypeSerializer.cs │ │ ├── ContentTypeSerializerAttribute.cs │ │ ├── ContentTypeSerializerT.cs │ │ ├── CurveKeyCollectionSerializer.cs │ │ ├── DictionarySerializer.cs │ │ ├── DoubleSerializer.cs │ │ ├── ElementSerializerT.cs │ │ ├── EnumSerializer.cs │ │ ├── ExternalReferenceSerializer.cs │ │ ├── FloatSerializer.cs │ │ ├── GenericCollectionHelper.cs │ │ ├── IntSerializer.cs │ │ ├── IntermediateReader.cs │ │ ├── IntermediateSerializer.cs │ │ ├── IntermediateWriter.cs │ │ ├── ListSerializer.cs │ │ ├── LongSerializer.cs │ │ ├── MatrixSerializer.cs │ │ ├── NamedValueDictionarySerializer.cs │ │ ├── NamespaceAliasHelper.cs │ │ ├── NonGenericIListSerializer.cs │ │ ├── NullableSerializer.cs │ │ ├── PackedElementsHelper.cs │ │ ├── PlaneSerializer.cs │ │ ├── PointSerializer.cs │ │ ├── QuaternionSerializer.cs │ │ ├── RectangleSerializer.cs │ │ ├── ReflectiveSerializer.cs │ │ ├── SByteSerializer.cs │ │ ├── ShortSerializer.cs │ │ ├── StringSerializer.cs │ │ ├── TimeSpanSerializer.cs │ │ ├── UIntSerializer.cs │ │ ├── ULongSerializer.cs │ │ ├── UShortSerializer.cs │ │ ├── Vector2Serializer.cs │ │ ├── Vector3Serializer.cs │ │ └── Vector4Serializer.cs │ ├── TargetPlatform.cs │ ├── Utilities/ │ │ ├── ContentExtensions.cs │ │ ├── LZ4/ │ │ │ ├── LZ4Codec.Unsafe.cs │ │ │ ├── LZ4Codec.Unsafe32.Dirty.cs │ │ │ ├── LZ4Codec.Unsafe32HC.Dirty.cs │ │ │ ├── LZ4Codec.Unsafe64.Dirty.cs │ │ │ ├── LZ4Codec.Unsafe64HC.Dirty.cs │ │ │ └── LZ4Codec.cs │ │ ├── PathHelper.cs │ │ └── ReflectionHelpers.cs │ ├── XmlImporter.cs │ └── Xna.Framework.Content.Pipeline.csproj ├── Xna.Framework.Content.Pipeline.Audio/ │ ├── Audio/ │ │ ├── AudioContent.cs │ │ ├── AudioFileType.cs │ │ ├── AudioFormat.cs │ │ ├── ConversionFormat.cs │ │ └── ConversionQuality.cs │ ├── ExternalTool.cs │ ├── Mp3Importer.cs │ ├── OggImporter.cs │ ├── Processors/ │ │ ├── SoundEffectContent.cs │ │ └── SoundEffectProcessor.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Serialization/ │ │ └── Compiler/ │ │ └── SoundEffectWriter.cs │ ├── WavImporter.cs │ ├── WmaImporter.cs │ └── Xna.Framework.Content.Pipeline.Audio.csproj ├── Xna.Framework.Content.Pipeline.Graphics/ │ ├── DdsLoader.cs │ ├── EffectCompiler/ │ │ ├── SamplerStateContent.cs │ │ └── TPGParser/ │ │ ├── FXParser.tpg │ │ ├── ParseTree.cs │ │ ├── ParseTreeTools.cs │ │ ├── Parser.cs │ │ ├── PassInfo.cs │ │ ├── SamplerStateInfo.cs │ │ ├── Scanner.cs │ │ ├── ShaderInfo.cs │ │ └── TechniqueInfo.cs │ ├── EffectImporter.cs │ ├── ExternalTool.cs │ ├── FbxImporter.cs │ ├── FontDescriptionImporter.cs │ ├── Graphics/ │ │ ├── AlphaTestMaterialContent.cs │ │ ├── AnimationChannel.cs │ │ ├── AnimationChannelDictionary.cs │ │ ├── AnimationContent.cs │ │ ├── AnimationContentDictionary.cs │ │ ├── AnimationKeyframe.cs │ │ ├── AtcBitmapContent.cs │ │ ├── AtcExplicitBitmapContent.cs │ │ ├── AtcInterpolatedBitmapContent.cs │ │ ├── BasicMaterialContent.cs │ │ ├── BitmapContent.cs │ │ ├── BoneContent.cs │ │ ├── BoneWeight.cs │ │ ├── BoneWeightCollection.cs │ │ ├── DualTextureMaterialContent.cs │ │ ├── Dxt1BitmapContent.cs │ │ ├── Dxt3BitmapContent.cs │ │ ├── Dxt5BitmapContent.cs │ │ ├── DxtBitmapContent.cs │ │ ├── EffectContent.cs │ │ ├── EffectMaterialContent.cs │ │ ├── EnvironmentMapMaterialContent.cs │ │ ├── Etc1BitmapContent.cs │ │ ├── Font/ │ │ │ ├── CharacterRegion.cs │ │ │ ├── CharacterRegionTypeConverter.cs │ │ │ ├── FontFamilyInfo.cs │ │ │ ├── Glyph.cs │ │ │ ├── GlyphPacker.cs │ │ │ ├── GrowRule.cs │ │ │ ├── MaxRectsBin.cs │ │ │ └── MaxRectsHeuristic.cs │ │ ├── FontDescription.cs │ │ ├── FontDescriptionStyle.cs │ │ ├── GeometryContent.cs │ │ ├── GeometryContentCollection.cs │ │ ├── GraphicsUtil.cs │ │ ├── IndexCollection.cs │ │ ├── IndirectPositionCollection.cs │ │ ├── LocalizedFontDescription.cs │ │ ├── MaterialContent.cs │ │ ├── MeshBuilder.cs │ │ ├── MeshContent.cs │ │ ├── MeshHelper.cs │ │ ├── MipmapChain.cs │ │ ├── MipmapChainCollection.cs │ │ ├── NodeContent.cs │ │ ├── NodeContentCollection.cs │ │ ├── PixelBitmapContent.cs │ │ ├── PositionCollection.cs │ │ ├── PvrtcBitmapContent.cs │ │ ├── PvrtcRgb2BitmapContent.cs │ │ ├── PvrtcRgb4BitmapContent.cs │ │ ├── PvrtcRgba2BitmapContent.cs │ │ ├── PvrtcRgba4BitmapContent.cs │ │ ├── SkinnedMaterialContent.cs │ │ ├── Texture2DContent.cs │ │ ├── Texture3DContent.cs │ │ ├── TextureContent.cs │ │ ├── TextureCubeContent.cs │ │ ├── TextureReferenceDictionary.cs │ │ ├── VectorConverter.cs │ │ ├── VertexChannel.cs │ │ ├── VertexChannelCollection.cs │ │ ├── VertexChannelGeneric.cs │ │ ├── VertexChannelNames.cs │ │ └── VertexContent.cs │ ├── OpenAssetImporter.cs │ ├── Processors/ │ │ ├── CompiledEffectContent.cs │ │ ├── FontDescriptionProcessor.cs │ │ ├── FontTextureProcessor.cs │ │ ├── LocalizedFontProcessor.cs │ │ ├── MaterialProcessor.cs │ │ ├── MaterialProcessorDefaultEffect.cs │ │ ├── ModelBoneContent.cs │ │ ├── ModelBoneContentCollection.cs │ │ ├── ModelContent.cs │ │ ├── ModelMeshContent.cs │ │ ├── ModelMeshContentCollection.cs │ │ ├── ModelMeshPartContent.cs │ │ ├── ModelMeshPartContentCollection.cs │ │ ├── ModelProcessor.cs │ │ ├── SpriteFontContent.cs │ │ ├── TextureProcessor.cs │ │ ├── TextureProcessorOutputFormat.cs │ │ ├── VertexBufferContent.cs │ │ └── VertexDeclarationContent.cs │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── launchSettings.json │ ├── Serialization/ │ │ └── Compiler/ │ │ ├── AlphaTestEffectWriter.cs │ │ ├── BasicEffectWriter.cs │ │ ├── ColorWriter.cs │ │ ├── CompiledEffectWriter.cs │ │ ├── ContentTypeWriterBase.cs │ │ ├── DualTextureEffectWriter.cs │ │ ├── EffectMaterialWriter.cs │ │ ├── EnvironmentMapEffectWriter.cs │ │ ├── IndexBufferWriter.cs │ │ ├── ModelWriter.cs │ │ ├── SkinnedEffectWriter.cs │ │ ├── SpriteFontWriter.cs │ │ ├── Texture2DWriter.cs │ │ ├── TextureCubeWriter.cs │ │ ├── TextureWriter.cs │ │ ├── VertexBufferWriter.cs │ │ └── VertexDeclarationWriter.cs │ ├── TextureImporter.cs │ ├── Utilities/ │ │ ├── ContentWriterExtensions.cs │ │ ├── FreeImageAPI.cs │ │ ├── FreeImageAPIC.cs │ │ ├── GraphicsExtensions.cs │ │ ├── ReflectionHelpers.cs │ │ └── VectorConverterEx.cs │ ├── XImporter.cs │ ├── XNA.Framework.Content.Pipeline.Graphics.csproj │ └── XNA.Framework.Content.Pipeline.Graphics.dll.config ├── Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/ │ ├── EffectCompiler/ │ │ ├── ConstantBufferData.cs │ │ ├── EffectObject.cs │ │ ├── GLSLBytecode.cs │ │ ├── KNIFXWriter11.cs │ │ ├── MarshalHelper.cs │ │ ├── MojoShader.cs │ │ ├── Preprocessor.cs │ │ ├── SamplerInfo.cs │ │ ├── ShaderCompilerException.cs │ │ ├── ShaderData.cs │ │ ├── ShaderProfile.cs │ │ ├── ShaderProfileDX11.cs │ │ ├── ShaderProfileGL.cs │ │ ├── ShaderProfileType.cs │ │ ├── ShaderStage.cs │ │ └── ShaderVersion.cs │ ├── ExternalTool.cs │ ├── Processors/ │ │ ├── EffectProcessor.cs │ │ ├── EffectProcessorDebugMode.cs │ │ └── MojoEffectProcessor.cs │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ └── launchSettings.json │ └── Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj ├── Xna.Framework.Content.Pipeline.Media/ │ ├── ExternalTool.cs │ ├── H264Importer.cs │ ├── Processors/ │ │ ├── SongProcessor.cs │ │ ├── VideoProcessor.cs │ │ └── VideoProcessorOutputFormat.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Serialization/ │ │ └── Compiler/ │ │ ├── SongWriter.cs │ │ └── VideoWriter.cs │ ├── SongContent.cs │ ├── Utilities/ │ │ └── PathHelper.cs │ ├── VideoContent.cs │ ├── VideoImporter.cs │ ├── WmvImporter.cs │ └── Xna.Framework.Content.Pipeline.Media.csproj ├── Xna.Framework.Design/ │ ├── Design/ │ │ ├── ColorConverter.cs │ │ ├── Vector2Converter.cs │ │ ├── Vector3Converter.cs │ │ └── Vector4Converter.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Design.csproj ├── Xna.Framework.Devices/ │ ├── Devices/ │ │ ├── DevicesFactory.cs │ │ ├── Haptics.cs │ │ ├── HapticsStrategy.cs │ │ └── Sensors/ │ │ ├── Accelerometer.cs │ │ ├── AccelerometerFailedException.cs │ │ ├── AccelerometerReading.cs │ │ ├── AccelerometerStrategy.cs │ │ ├── CalibrationEventArgs.cs │ │ ├── Compass.cs │ │ ├── CompassReading.cs │ │ ├── CompassStrategy.cs │ │ ├── ISensorReading.cs │ │ ├── SensorBase.cs │ │ ├── SensorFailedException.cs │ │ ├── SensorReadingEventArgs.cs │ │ ├── SensorService.cs │ │ ├── SensorServiceStrategy.cs │ │ ├── SensorState.cs │ │ └── SensorStrategy.cs │ ├── ILLink.Descriptors.xml │ ├── NamespaceDoc.cs │ └── Xna.Framework.Devices.csproj ├── Xna.Framework.Game/ │ ├── DrawableGameComponent.cs │ ├── FileDropEventArgs.cs │ ├── Game.cs │ ├── GameComponent.cs │ ├── GameComponentCollection.cs │ ├── GameComponentCollectionEventArgs.cs │ ├── GameFactory.cs │ ├── GameServiceContainer.cs │ ├── GameStrategy.cs │ ├── GameTime.cs │ ├── GameWindow.cs │ ├── GraphicsDeviceManager.cs │ ├── GraphicsDeviceManagerStrategy.cs │ ├── IDrawable.cs │ ├── IGameComponent.cs │ ├── ILLink.Descriptors.xml │ ├── IUpdateable.cs │ ├── LaunchParameters.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Game.csproj ├── Xna.Framework.Graphics/ │ ├── Color.cs │ ├── Content/ │ │ ├── AlphaTestEffectReader.cs │ │ ├── BasicEffectReader.cs │ │ ├── ColorReader.cs │ │ ├── DualTextureEffectReader.cs │ │ ├── EffectMaterialReader.cs │ │ ├── EffectReader.cs │ │ ├── EnvironmentMapEffectReader.cs │ │ ├── IndexBufferReader.cs │ │ ├── ModelReader.cs │ │ ├── SkinnedEffectReader.cs │ │ ├── SpriteFontReader.cs │ │ ├── Texture2DReader.cs │ │ ├── Texture3DReader.cs │ │ ├── TextureCubeReader.cs │ │ ├── TextureReader.cs │ │ ├── VertexBufferReader.cs │ │ └── VertexDeclarationReader.cs │ ├── DisplayOrientation.cs │ ├── Graphics/ │ │ ├── ClearOptions.cs │ │ ├── ColorWriteChannels.cs │ │ ├── CubeMapFace.cs │ │ ├── DeviceLostException.cs │ │ ├── DeviceNotResetException.cs │ │ ├── DirectionalLight.cs │ │ ├── DisplayMode.cs │ │ ├── DisplayModeCollection.cs │ │ ├── Effect/ │ │ │ ├── AlphaTestEffect.cs │ │ │ ├── BasicEffect.cs │ │ │ ├── DualTextureEffect.cs │ │ │ ├── Effect.cs │ │ │ ├── EffectAnnotation.cs │ │ │ ├── EffectAnnotationCollection.cs │ │ │ ├── EffectHelpers.cs │ │ │ ├── EffectMaterial.cs │ │ │ ├── EffectParameter.cs │ │ │ ├── EffectParameterClass.cs │ │ │ ├── EffectParameterCollection.cs │ │ │ ├── EffectParameterType.cs │ │ │ ├── EffectPass.cs │ │ │ ├── EffectPassCollection.cs │ │ │ ├── EffectTechnique.cs │ │ │ ├── EffectTechniqueCollection.cs │ │ │ ├── EnvironmentMapEffect.cs │ │ │ ├── IEffectBones.cs │ │ │ ├── IEffectFog.cs │ │ │ ├── IEffectLights.cs │ │ │ ├── IEffectMatrices.cs │ │ │ ├── KNIFXHeader.cs │ │ │ ├── KNIFXReader11.cs │ │ │ ├── MGFXHeader.cs │ │ │ ├── MGFXReader10.cs │ │ │ ├── SkinnedEffect.cs │ │ │ └── SpriteEffect.cs │ │ ├── GraphicsAdapter.cs │ │ ├── GraphicsAdapterStrategy.cs │ │ ├── GraphicsAdaptersProviderStrategy.cs │ │ ├── GraphicsBackend.cs │ │ ├── GraphicsCapabilities.cs │ │ ├── GraphicsContext.cs │ │ ├── GraphicsContextStrategy.cs │ │ ├── GraphicsDebug.cs │ │ ├── GraphicsDebugMessage.cs │ │ ├── GraphicsDebugStrategy.cs │ │ ├── GraphicsDevice.cs │ │ ├── GraphicsDeviceStatus.cs │ │ ├── GraphicsDeviceStrategy.cs │ │ ├── GraphicsFactory.cs │ │ ├── GraphicsMetrics.cs │ │ ├── GraphicsProfile.cs │ │ ├── GraphicsResource.cs │ │ ├── GraphicsResourceStrategy.cs │ │ ├── IGraphicsDeviceService.cs │ │ ├── IGraphicsResourceStrategy.cs │ │ ├── IRenderTarget.cs │ │ ├── IRenderTarget2DStrategy.cs │ │ ├── IRenderTarget3DStrategy.cs │ │ ├── IRenderTargetCubeStrategy.cs │ │ ├── IRenderTargetStrategy.cs │ │ ├── ITexture2DStrategy.cs │ │ ├── ITexture3DStrategy.cs │ │ ├── ITextureCubeStrategy.cs │ │ ├── ITextureStrategy.cs │ │ ├── Model.cs │ │ ├── ModelBone.cs │ │ ├── ModelBoneCollection.cs │ │ ├── ModelEffectCollection.cs │ │ ├── ModelMesh.cs │ │ ├── ModelMeshCollection.cs │ │ ├── ModelMeshPart.cs │ │ ├── ModelMeshPartCollection.cs │ │ ├── NoSuitableGraphicsDeviceException.cs │ │ ├── OcclusionQuery.cs │ │ ├── OcclusionQueryStrategy.cs │ │ ├── PackedVector/ │ │ │ ├── Alpha8.cs │ │ │ ├── Bgr565.cs │ │ │ ├── Bgra4444.cs │ │ │ ├── Bgra5551.cs │ │ │ ├── Byte4.cs │ │ │ ├── HalfSingle.cs │ │ │ ├── HalfTypeHelper.cs │ │ │ ├── HalfVector2.cs │ │ │ ├── HalfVector4.cs │ │ │ ├── IPackedVector.cs │ │ │ ├── NormalizedByte2.cs │ │ │ ├── NormalizedByte4.cs │ │ │ ├── NormalizedShort2.cs │ │ │ ├── NormalizedShort4.cs │ │ │ ├── Rg32.cs │ │ │ ├── Rgba1010102.cs │ │ │ ├── Rgba64.cs │ │ │ ├── Short2.cs │ │ │ └── Short4.cs │ │ ├── PresentInterval.cs │ │ ├── PresentationEventArgs.cs │ │ ├── PresentationParameters.cs │ │ ├── RenderTarget2D.cs │ │ ├── RenderTarget3D.cs │ │ ├── RenderTargetBinding.cs │ │ ├── RenderTargetCube.cs │ │ ├── RenderTargetUsage.cs │ │ ├── ResourceCreatedEventArgs.cs │ │ ├── ResourceDestroyedEventArgs.cs │ │ ├── SamplerStateCollection.cs │ │ ├── SamplerStateCollectionStrategy.cs │ │ ├── SetDataOptions.cs │ │ ├── Shader/ │ │ │ ├── ConstantBuffer.cs │ │ │ ├── ConstantBufferCollection.cs │ │ │ ├── ConstantBufferCollectionStrategy.cs │ │ │ ├── ConstantBufferStrategy.cs │ │ │ ├── PixelShader.cs │ │ │ ├── SamplerInfo.cs │ │ │ ├── Shader.cs │ │ │ ├── ShaderProfileType.cs │ │ │ ├── ShaderStage.cs │ │ │ ├── ShaderStrategy.cs │ │ │ ├── ShaderVersion.cs │ │ │ ├── VertexAttribute.cs │ │ │ └── VertexShader.cs │ │ ├── SpriteBatch.cs │ │ ├── SpriteBatchItem.cs │ │ ├── SpriteBatcherStrategy.cs │ │ ├── SpriteEffects.cs │ │ ├── SpriteFont.cs │ │ ├── SpriteSortMode.cs │ │ ├── States/ │ │ │ ├── Blend.cs │ │ │ ├── BlendFunction.cs │ │ │ ├── BlendState.cs │ │ │ ├── BlendStateStrategy.cs │ │ │ ├── CompareFunction.cs │ │ │ ├── CullMode.cs │ │ │ ├── DepthFormat.cs │ │ │ ├── DepthStencilState.cs │ │ │ ├── DepthStencilStateStrategy.cs │ │ │ ├── FillMode.cs │ │ │ ├── IBlendStateStrategy.cs │ │ │ ├── IDepthStencilStateStrategy.cs │ │ │ ├── IRasterizerStateStrategy.cs │ │ │ ├── ISamplerStateStrategy.cs │ │ │ ├── RasterizerState.cs │ │ │ ├── RasterizerStateStrategy.cs │ │ │ ├── ReadonlyBlendStateStrategy.cs │ │ │ ├── ReadonlyDepthStencilStateStrategy.cs │ │ │ ├── ReadonlyRasterizerStateStrategy.cs │ │ │ ├── ReadonlySamplerStateStrategy.cs │ │ │ ├── ResourceBlendStateStrategy.cs │ │ │ ├── ResourceDepthStencilStateStrategy.cs │ │ │ ├── ResourceRasterizerStateStrategy.cs │ │ │ ├── ResourceSamplerStateStrategy.cs │ │ │ ├── SamplerState.cs │ │ │ ├── SamplerStateStrategy.cs │ │ │ ├── StencilOperation.cs │ │ │ ├── TargetBlendState.cs │ │ │ ├── TextureAddressMode.cs │ │ │ ├── TextureFilter.cs │ │ │ └── TextureFilterMode.cs │ │ ├── SurfaceFormat.cs │ │ ├── Texture.cs │ │ ├── Texture2D.cs │ │ ├── Texture3D.cs │ │ ├── TextureCollection.cs │ │ ├── TextureCollectionStrategy.cs │ │ ├── TextureCube.cs │ │ ├── Utilities/ │ │ │ ├── ContentReaderExtensions.cs │ │ │ ├── DxtDecoder.cs │ │ │ ├── GraphicsExtensions.cs │ │ │ ├── HashHelpers.cs │ │ │ ├── ReflectionHelpers.cs │ │ │ └── TextureHelpers.cs │ │ ├── Vertices/ │ │ │ ├── BufferUsage.cs │ │ │ ├── DynamicIndexBuffer.cs │ │ │ ├── DynamicVertexBuffer.cs │ │ │ ├── IDynamicIndexBufferStrategy.cs │ │ │ ├── IDynamicVertexBufferStrategy.cs │ │ │ ├── IPlatformVertexDeclaration.cs │ │ │ ├── IVertexType.cs │ │ │ ├── IndexBuffer.cs │ │ │ ├── IndexBufferStrategy.cs │ │ │ ├── IndexElementSize.cs │ │ │ ├── PrimitiveType.cs │ │ │ ├── VertexBuffer.cs │ │ │ ├── VertexBufferBinding.cs │ │ │ ├── VertexBufferCollection.cs │ │ │ ├── VertexBufferStrategy.cs │ │ │ ├── VertexDeclaration.cs │ │ │ ├── VertexDeclarationCache.cs │ │ │ ├── VertexElement.cs │ │ │ ├── VertexElementFormat.cs │ │ │ ├── VertexElementUsage.cs │ │ │ ├── VertexPosition.cs │ │ │ ├── VertexPositionColor.cs │ │ │ ├── VertexPositionColorNormal.cs │ │ │ ├── VertexPositionColorNormalTexture.cs │ │ │ ├── VertexPositionColorTexture.cs │ │ │ ├── VertexPositionNormalTexture.cs │ │ │ └── VertexPositionTexture.cs │ │ └── Viewport.cs │ ├── GraphicsDeviceInformation.cs │ ├── IGraphicsDeviceManager.cs │ ├── ILLink.Descriptors.xml │ ├── PreparingDeviceSettingsEventArgs.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Graphics.csproj ├── Xna.Framework.Input/ │ ├── ILLink.Descriptors.xml │ ├── Input/ │ │ ├── ButtonState.cs │ │ ├── Buttons.cs │ │ ├── GamePad.cs │ │ ├── GamePadButtons.cs │ │ ├── GamePadCapabilities.cs │ │ ├── GamePadDPad.cs │ │ ├── GamePadDeadZone.cs │ │ ├── GamePadState.cs │ │ ├── GamePadStrategy.cs │ │ ├── GamePadThumbSticks.cs │ │ ├── GamePadTouchButtons.cs │ │ ├── GamePadTriggers.cs │ │ ├── GamePadType.cs │ │ ├── InputFactory.cs │ │ ├── InputKeyEventArgs.cs │ │ ├── Joystick.cs │ │ ├── JoystickCapabilities.cs │ │ ├── JoystickHat.cs │ │ ├── JoystickState.cs │ │ ├── JoystickStrategy.cs │ │ ├── KeyState.cs │ │ ├── Keyboard.cs │ │ ├── KeyboardInput.cs │ │ ├── KeyboardInputStrategy.cs │ │ ├── KeyboardState.cs │ │ ├── KeyboardStrategy.cs │ │ ├── Keys.cs │ │ ├── MessageBox.cs │ │ ├── MessageBoxStrategy.cs │ │ ├── Mouse.cs │ │ ├── MouseCursor.cs │ │ ├── MouseCursorStrategy.cs │ │ ├── MouseState.cs │ │ ├── MouseStrategy.cs │ │ ├── TextInputEventArgs.cs │ │ ├── Touch/ │ │ │ ├── GestureLocationData.cs │ │ │ ├── GestureSample.cs │ │ │ ├── GestureType.cs │ │ │ ├── TouchCollection.cs │ │ │ ├── TouchLocation.cs │ │ │ ├── TouchLocationData.cs │ │ │ ├── TouchLocationState.cs │ │ │ ├── TouchPanel.cs │ │ │ ├── TouchPanelCapabilities.cs │ │ │ ├── TouchPanelStrategy.Legacy.cs │ │ │ ├── TouchPanelStrategy.LegacyGesture.cs │ │ │ └── TouchPanelStrategy.cs │ │ ├── TouchButtonState.cs │ │ └── XR/ │ │ ├── ITouchControllerInput.cs │ │ ├── TouchController.cs │ │ └── TouchControllerType.cs │ ├── NamespaceDoc.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Input.csproj ├── Xna.Framework.Media/ │ ├── Content/ │ │ ├── SongReader.cs │ │ └── VideoReader.cs │ ├── ILLink.Descriptors.xml │ ├── Media/ │ │ ├── Album.cs │ │ ├── AlbumCollection.cs │ │ ├── AlbumStrategy.cs │ │ ├── Artist.cs │ │ ├── Genre.cs │ │ ├── MediaFactory.cs │ │ ├── MediaLibrary.cs │ │ ├── MediaLibraryStrategy.cs │ │ ├── MediaPlayer.cs │ │ ├── MediaPlayerStrategy.cs │ │ ├── MediaQueue.cs │ │ ├── MediaSource.cs │ │ ├── MediaSourceType.cs │ │ ├── MediaState.cs │ │ ├── Playlist.cs │ │ ├── PlaylistCollection.cs │ │ ├── Song.cs │ │ ├── SongCollection.cs │ │ ├── SongStrategy.cs │ │ ├── Utilities/ │ │ │ └── FileHelpers.cs │ │ ├── Video.cs │ │ ├── VideoPlayer.cs │ │ ├── VideoPlayerStrategy.cs │ │ ├── VideoSoundtrackType.cs │ │ └── VideoStrategy.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Xna.Framework.Media.csproj ├── Xna.Framework.Storage/ │ ├── ILLink.Descriptors.xml │ ├── NamespaceDoc.cs │ ├── Storage/ │ │ ├── StorageContainer.cs │ │ ├── StorageContainerStrategy.cs │ │ ├── StorageDevice.cs │ │ ├── StorageDeviceStrategy.cs │ │ ├── StorageFactory.cs │ │ ├── StorageService.cs │ │ └── StorageServiceStrategy.cs │ └── Xna.Framework.Storage.csproj └── Xna.Framework.XR/ ├── ILLink.Descriptors.xml ├── NamespaceDoc.cs ├── XR/ │ ├── HandsState.cs │ ├── HeadsetState.cs │ ├── XRDevice.cs │ ├── XRDeviceState.cs │ ├── XRDeviceStrategy.cs │ ├── XREye.cs │ ├── XRFactory.cs │ └── XRSessionMode.cs └── Xna.Framework.XR.csproj ================================================ FILE CONTENTS ================================================ ================================================ FILE: .config/dotnet-tools.json_ ================================================ { "version": 1, "isRoot": true, "tools": { "cake.tool": { "version": "2.0.0", "commands": [ "dotnet-cake" ] } } } ================================================ FILE: .gitattributes ================================================ # MonoGame - Copyright (C) The MonoGame Team # This file is subject to the terms and conditions defined in # file 'LICENSE.txt', which is part of this source code package. # This forces the 3-way merge on the changelog to take lines # from both versions instead of leaving conflicts to resolve. CHANGELOG.md -text merge=union ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: [nkast] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: ["https://paypal.me/nkastellanos"] ================================================ FILE: .github/workflows/dotnet.yml ================================================ # This workflow will build a .NET project # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net name: .NET on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v4 with: submodules: recursive # - name: Setup .NET # uses: actions/setup-dotnet@v4 # with: # dotnet-version: 8.0.x # - name: Cache .NET workloads # uses: actions/cache@v4 # with: # path: ~\AppData\Local\Microsoft\dotnet\workloads # key: ${{ runner.os }}-dotnet-workloads-${{ hashFiles('**/*.csproj') }} # restore-keys: | # ${{ runner.os }}-dotnet-workloads- # - name: Install workloads # run: dotnet workload install android ios - name: Cache .NET nuget packages uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} restore-keys: | ${{ runner.os }}-nuget- - name: dotnet version run: dotnet --version - name: dotnet runtimes run: dotnet --list-runtimes - name: dotnet sdks run: dotnet --list-sdks - name: dotnet workloads run: dotnet workload list - name: Restore Android workload run: dotnet workload restore Kni.Platform.Android.GL.sln - name: Restore iOS workload run: dotnet workload restore Kni.Platform.iOS.GL.sln - name: Restore Blazor workload run: dotnet workload restore Kni.Platform.Blazor.GL.sln - name: Restore WinForms workload run: dotnet workload restore Kni.Platform.WinForms.DX11.sln - name: dotnet workloads (after restore) run: dotnet workload list - name: Restore dependencies run: dotnet restore KNI.sln # - name: Build # run: dotnet build KNI.sln --no-restore --property:WarningLevel=1 - name: Build Ref run: dotnet build Platforms\Kni.Platform.Ref.csproj --property:WarningLevel=1 - name: Build Blazor.GL run: dotnet build Kni.Platform.Blazor.GL.sln --property:WarningLevel=1 - name: Build WinForms.DX11 run: dotnet build Kni.Platform.WinForms.DX11.sln --property:WarningLevel=1 - name: Build SDL2.GL run: dotnet build Kni.Platform.SDL2.GL.sln --property:WarningLevel=1 - name: Build iOS.GL run: dotnet build Kni.Platform.iOS.GL.sln --property:WarningLevel=1 - name: Build Android.GL run: dotnet build Kni.Platform.Android.GL.sln --property:WarningLevel=1 - name: Install Android SDK Platform 32 shell: cmd run: | echo y | "%ANDROID_HOME%\cmdline-tools\latest\bin\sdkmanager.bat" --install "platforms;android-32" - name: Build Oculus.GL run: dotnet build Kni.Platform.Oculus.GL.sln --property:WarningLevel=1 # - name: Build Cardboard.GL # run: dotnet build Kni.Platform.Cardboard.GL.sln --property:WarningLevel=1 # - name: Build Windows UAP.DX11 # run: dotnet msbuild Kni.Platform.UAP.DX11.sln --property:WarningLevel=1 # - name: Test # run: dotnet test --no-build --verbosity normal ================================================ FILE: .github/workflows/sponsors.yml ================================================ name: Generate Sponsors README on: workflow_dispatch: schedule: # This is a cron schedule, it will run every day at 15:30. You can change this to whatever you want.x - cron: 30 15 1,15 * * jobs: deploy: runs-on: ubuntu-latest steps: # Checkout the repository - name: Checkout 🛎️ uses: actions/checkout@v2 # Generate the sponsors - name: Generate Sponsors 💖 uses: JamesIves/github-sponsors-readme-action@v1 with: token: ${{ secrets.SECRET_SPONSORS_README }} file: 'README.md' # Deploy the changes back to the main branch of the repository - name: Deploy to GitHub Pages 🚀 uses: JamesIves/github-pages-deploy-action@v4 with: branch: main # As we're deploying changes to our markdown files, this needs to be . to push the root directory back to the repository. folder: '.' ================================================ FILE: .gitignore ================================================ #OS junk files [Tt]humbs.db *.DS_Store #Output Linux Installer Installers/Linux/tmp_deb/ Installers/Linux/tmp_run/ *.run *.deb #Visual Studio files *.pidb *.userprefs *.[Oo]bj *.exe *.pdb *.user *.aps *.pch *.vspscc *.vssscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.[Cc]ache *.ilk *.log *.lib *.sbr *.sdf *.csproj.csdat ipch/ obj/ [Bb]in [Dd]ebug*/ [Rr]elease*/ Ankh.NoLoad .vs/ project.lock.json /MonoGame.Framework/MonoGame.Framework.Net.WindowsUniversal.project.lock.json /MonoGame.Framework/MonoGame.Framework.WindowsUniversal.project.lock.json artifacts/ # JetBrains Rider .idea/ #Tooling _ReSharper*/ *.resharper [Tt]est[Rr]esult* #Visual Studio Rebracer extension, allows the user to automatically change the style configuration by project rebracer.xml #Subversion files .svn # Office Temp Files ~$* #monodroid private beta monodroid*.msi #Unix temporary files *~ # Output docs Documentation/Output/ #Mac Package Files *.pkg *.mpack **/packages #Nuget Packages **/*.nupkg #Zip files *.zip Installers/Windows/header.nsh Installers/MacOS/Scripts/Framework/postinstall IDE/MonoDevelop/MonoDevelop.MonoGame/templates/Common/MonoGame.Framework.dll.config # CAKE .cake/** ================================================ FILE: .gitmodules ================================================ [submodule "ThirdParty/Dependencies"] path = ThirdParty/Dependencies url = https://github.com/kniEngine/kniDependencies.git [submodule "ThirdParty/NVorbis"] path = ThirdParty/NVorbis url=https://github.com/NVorbis/NVorbis.git [submodule "ThirdParty/SDL_GameControllerDB"] path = ThirdParty/SDL_GameControllerDB url = https://github.com/gabomdq/SDL_GameControllerDB.git [submodule "ThirdParty/StbImageSharp"] path = ThirdParty/StbImageSharp url = https://github.com/StbSharp/StbImageSharp.git [submodule "ThirdParty/StbImageWriteSharp"] path = ThirdParty/StbImageWriteSharp url = https://github.com/StbSharp/StbImageWriteSharp.git ================================================ FILE: BuildNuget.bat ================================================ dotnet pack src\Xna.Framework\Xna.Framework.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Content\Xna.Framework.Content.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Audio\Xna.Framework.Audio.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Media\Xna.Framework.Media.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Input\Xna.Framework.Input.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Game\Xna.Framework.Game.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Devices\Xna.Framework.Devices.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Storage\Xna.Framework.Storage.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.XR\Xna.Framework.XR.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Design\Xna.Framework.Design.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Content.Pipeline\Xna.Framework.Content.Pipeline.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Content.Pipeline.Audio\Xna.Framework.Content.Pipeline.Audio.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Content.Pipeline.Graphics\Xna.Framework.Content.Pipeline.Graphics.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack src\Xna.Framework.Content.Pipeline.Media\Xna.Framework.Content.Pipeline.Media.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release "C:\Program Files (x86)\NuGet3\nuget.exe" pack NuGetPackages/Content.Pipeline.Builder.nuspec -OutputDirectory NuGetPackages\Output\ -BasePath . -Version 4.2.9001 -Properties Configuration=Release "C:\Program Files (x86)\NuGet3\nuget.exe" pack NuGetPackages/Content.Pipeline.Builder.Windows.nuspec -OutputDirectory NuGetPackages\Output\ -BasePath . -Version 4.2.9001 -Properties Configuration=Release "C:\Program Files (x86)\NuGet3\nuget.exe" pack NuGetPackages/MonoGame.Framework.WindowsUniversal.nuspec -OutputDirectory NuGetPackages\Output\ -BasePath . -Version 4.2.9001 -Properties Configuration=Release dotnet pack Platforms\Kni.Platform.Android.GL.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.Oculus.GL.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.iOS.GL.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.WinForms.DX11.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.SDL2.GL.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Kni.Platform.Blazor.GL.sln --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.Ref.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.WinForms.DX11.OculusOVR.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release dotnet pack Platforms\Kni.Platform.Cardboard.GL.csproj --output NuGetPackages\Output\ /t:Build /p:Configuration=Release @pause ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## 4.2.9001 Release - November 2, 2025 ### Fixed - fix BoundingFrustum Intersects BoundingSphere #2436 - fix GraphicsResourceStrategy.Dispose() #2334 - fix ShouldNotOverrideTextures tests #2401 (XNA API compatibility) - fix shouldSetAndGetOptimizedMatrixArray Test #2466 - Fix SFX MasterVolume #2381 - [DesktopGL] fix SDL MediaPlayer.IsRepeating gaps #2515 - [OpenAL] fix default microphone selection #2339 - [XAudio/WebAudio] fix SoundEffectInstance default Volume #2360 - [Android] fix Android ConcreteMediaPlayerStrategy IsRepeating #2440 - [Android] fix Android ConcreteVideoPlayer IsLooped #2439 - [Blazor.GL] MouseState.ScrollWheelValue does not change #2532 - [GL] fix GLes precision #2448 - [GL] fix GraphicsDevice.Clear(...) #2354 - [Content.Pipeline] fix Incremental builds #2449 - [Content.Pipeline] fix ColorWriter RuntimeType namespace #2298 - [Content.Pipeline] fix BuildEvent SourceFile for external references #2333 - [Content.Pipeline] fix parsing WebM metadata #2386 - [Content.Pipeline] fix parsing WMV metadata #2322 - [PipelineEditor] content editor preserve Link #2345 ### Performance - optimize ConstantBufferStrategy.SetData(...) #2320 - reduce ModelBoneCollection allocations #2501 - [OpenAL] reduce allocations on OpenAL DynamicSoundEffectInstance #2484 - [OpenAL] reduce allocations on OpenAL SoundEffect #2489 - [Content.Pipeline] optimize CreateGeometry(...) #2336 - [Content.Pipeline] perf SoundEffectProcessor #2369 ### Changed - thread-safe Model.Draw(...) #2500 - KNIFX Format #2396, #2400 - multiplatform shaders #2464 - check Shader model Version #2350 - GLSL 300es Shaders #2406 - [GL] seperate GL shaders #2456, #2457, #2463 - [Android] upgrade to 16K aligned OpenAL v1.24.3 + OBOE #2495, #2504 - [Winforms.DX11] enable DX Keyboard Input by default when there is no GameWindow/Game. #2528 - [Blazor.GL] update Wasm v8.0.11 #2467,#2543 - [WebGL] allow feature level FL10_0 #2517 - [GL] allow SM4.0 on GLSL #2428, #2446 - [DX11] upgrade to SharpDX 4.2.0 #2297, #2479 - [Content.Pipeline] default media formats #2384 - [Content.Pipeline] use WebM as the default on all platforms #2388 - [Content.Pipeline] use MP3 as the default on all platforms #2389 - [Content.Pipeline] Transcode Video files #2324 - [PipelineEditor] resolving packages modal window #2471 - [PipelineEditor] preserve ProcessorParams #2476, #2482 - [PipelineEditor] PathComparer #2290 ### Added - [Android] implement ConcreteMouse #2422, #2423 - [Winforms.DX11] implements SaveAsJpeg() #2519 - [Blazor.GL] Implements BlazorGameWindow.OnTextInput #2351 - [Blazor.GL] Implements Mouse.SetCursor for BlazorGL #2346 - [WebAudio] implement WebAudio Pan #2361 - [WebAudio] implement WebAudio Ieee float #2367 - [WebAudio] implements DynamicSoundEffectInstance #2468 - [WebAudio] implements MicrophoneStrategy #2469 - [WebGL] Implements DrawInstancedPrimitives support for BlazorGL #2338 - [Content.Pipeline] VideoImporter #2385 - [Content.Pipeline] added .fx defines __GL__, __GLES__ #2546 ### Removed - [Content.Pipeline] drop support for legacy MGFX v09 #2397 - [Content.Pipeline] removed .fx defines MGFX, DEBUG, GLSL, HLSL, OPENGL, SM4 #2545 ## 4.1.9001 Release - April 08, 2025 ### Fixed - [GL] fix DrawRangeElementsBaseVertex and DrawElementsBaseVertex #2191 - [BlazorGL] fix Reach profile #2192 - [Content.Pipeline] fix Nvidia.TextureTools 'exited with code (0xc0000409)' #2206 - fix AboutAssets.txt templates typo #2195 - [Android] initialize AndroidGameWindow.CurrentOrientation #2222 - [Android] fix AndroidGameWindow Dispose #2242 - fix build targets #2244 - fix BoundingFrustumIntersectsBoundingSphere #2245, #2246, #2247 - [BlazorGL] disable webkit text highlighting #2259 - [Content.Pipeline] fix assimp SpecularPower #2264 - [Android] fix ConcreteMicrophone #2269 - [Oculus] fix .net9 build and target SDK 32 #2275,#2276 ### Performance - reduce GetRenderTargets() allocations #2212 ### Changed - [GL] improve PlatformNotSupportedException error messages #2209 - return the number of render targets from GetRenderTargets() #2213 - improve KNIFXC help output #2277, #2281 ### Added - [BlazorGL] implemented MediaPlayer.MediaStateChanged #2258 ### Removed ## 4.0.9001 Release - January 14, 2025 ### Fixed - fixed SensorBase.Dispose() #1925 - fixed sensor Dispose/finalize #1929 - fix TestContentManager usage #1955 - fix PipelineEditor OpenFile #1964 - fix SDL IndexBuffer ShouldSetAndGetStructData #1974 - fix SDL VertexBuffer ShouldSetAndGetStructData #1974, #2000 - rebuild Assets when compression method changed #1980 - fix DesktopGL native runtimes #1992 - fix IFrame event capture #1993 - fix DesktopGL MediaPlayer.Position #2006 - fix PipelineEditor OnReferencesModified #2026 - fix BoundingFrustrum Intersects & Contains #2052, #2073, #2074 - fix CheckGLError(...) #2055 - [SDL2] pin buffer to avoid access to invalid memory #2058 - [OpenGL] fix Discard rendertargets #2062 - [OpenGL] fix multisample surface types #2063 - fix Complex out parameters #2125 - fix GL TextureFilter.Linear #2165 - fix GetInfoLog() #2166 - fix DrawRangeElementsBaseVertex #2187, #2181 ### Performance - optimize DX VertexBuffer Get/Set Data #1967 - optimize SDL IndexBuffer GetData #1974 - optimize SDL VertexBuffer GetData #1974, #2000 - perf ConvertFloat32ToInt16() #2008, #2009, #2028 - perf DesktopGL Texture GetData(...) #2011 - perf use Environment.CurrentManagedThreadId #2013 - perf use generic ContentTypeReaderT, avoid boxing for value types #2029 - optimize GamePadDPad #2114 ### Changed - remove MaxSensorCount limit #1928 - rename Sensors namespace #1942 Microsoft.Devices.Sensors -> Microsoft.Xna.Framework.Devices.Sensors - The library MonoGame.Framework is split into Xna.Framework.Devices, and Xna.Framework.Storage #1947, #1988. - ContentLoadException message include assetName #1963 - throw 'Operation not called on main thread' for VertexShader/PixelShader #2014 - throw 'Operation not called on main thread' for GetBackBufferData(...) #2020 - [PipelineEditor] resize dialogs #2066, #2067 - Rename Platform assembly #2136, #2146, #2147 - rename Platform packages #2137, #2150, #2156 ### Added - Vibrator class #1941, #2089 - implement UAP Accelerometer #1948 - XNB compression extension #1961, #2039 - Brotli XNB compression #1962, #1966, #2033, #2040, #2041 - /packageReference option in .mgcb to consume importers & processors from nuget #2027, #2068, #2069, #2070, #2075 - added Plane.Intersects(Ray) #2044, #2046 - added XR library, and unify LibOVR. - implement XR for BlazorGL platform #2090 - [WebGL] implement half-float surface formats #2042 - [WebGL] implement multisampling in rendertargets #2088 - System.Numerics explicit conversion #2110 - Matrix.CreateRotationZ(Complex) #2120 - Pose3 and Pose2 structs #2121 - windowsDX11 net4.8 #2142, #2152 - tools net4.8 #2151 - Oculus native backend #2174 - [Blazor] implement MediaPlayer.PlayPosition and VideoPlayer.PlayPosition #2184 ### Removed - drop net6.0 from WindowsDX & BlazorGL #2086 - xamarin .nuspec #2154 - Xamarin iOS project #2155 ## 3.14.9001 Release - September 23, 2024 ### Fixed - fixed TouchPanel scalling #1852 - [BlazorGL] fixed Gamepad disconnect #1771 - [BlazorGL] map GamePad Indices #1773 - [BlazorGL] fixed Buffers SetData(...) with startIndex #1834 - [BlazorGL] fixed TouchPanel initialization #1837 - [OpenGL] fix DrawIndexedPrimitives (#1869 - [WindowsDX/UAP] fixed GamePadState.IsConnected #1769 - [Content.Pipeline] fixed OpenAssetImporter #1817,#1868 - [Content.Pipeline] fixed DX textureSlot #1851 ### Performance ### Changed - IsContentLost will not throw NotImplementedException #1865 - [Android] GraphicsAdapter.MonitorHandle return the native eglDisplay handle #1795 - [OpenGL/WebGL] include GL shader compilation InfoLog in the exception message. #1830,#1832,#1838 - [BlazorGL] Upgrade Wasm packages to v8.0.2 #1860 - [UAP] update to SDK v10.19041 #1769 - [LibOVR] OvrDevice require GraphicsProfile FL11_0 #1795 - [LibOVR] Upgrade LibOVR packages to v2.1 #1862 ### Added - [OpenGL] ColorSRgba support #1802,#1805 - [OpenGL] implemented GL shared texture2D #1854 - [Android/GLES] implemented RenderTarget multisampling #1843,#1814 - [Android/GLES] implemented Multiple Render Targets #1845 - [BlazorGL] implemented Multiple Render Targets #1840 - [BlazorGL] implemented SamplerStates #1765 - [BlazorGL] implemented DXT5 compression #1766 - [BlazorGL] implemented TextureCube #1767 - [BlazorGL] support for SM 3.0 standard_derivatives #1833,#1844 - [BlazorGL] implemented float texture surfaceTypes (Vector4,Vector2,Single) #1842 - [BlazorGL] implemented Buffers GetData(...) #1861 - [BlazorGL] implemented Gamepad Trigger buttons #1770 - [BlazorGL] implemented GamePad.SetVibration #1853 - [LibOVR] add OvrDevice.TrackFloorLevelOrigin #1864 - [Oculus/OpenXR] add HandsState.GetGripTransform() #1856 ### Removed ## 3.13.9001 Release - July 24, 2024 ### Fixed - fix GamePadCapabilities #1565 - [iOS] fix Game.Services NullReferenceException #1607 - [SDL] fix JoystickCapabilities.IsGamepad #1626 - [ANDROID] fix Keyboard #1688 - fix templates .mgcb file creation #1693 - Fix templates projectname #1694 - fix BlazorGL template alpha blend #1695 - [DX11] fix NonPowerOfTwoUnusedTextureShouldNotThrow test #1701 - [GL] fix NonPowerOfTwoUnusedTextureShouldNotThrow test #1702 - [EffectProcessor] inorder samplers merge #1709 - [EffectProcessor] fix ShaderProfileDX11 samplerSlot #1710 - fix CreateGamePadCapabilities #1713 - fix ResourceNameAlphaTestEffect #1724 - [BlazorGL] fix MediaPlayer IsRepeating #1726 - [SDL] early Joysticks initialization #1735 - [BlazorGL] clear KeyboardState on focus lost #1736 - [BlazorGL] fix Keyboard special keys #1738 - fix MGCB builds with no response file #1745 ### Performance - optimize ConcreteTextureCollection.PlatformApply() #1605 - perf use HashSet for ContentManager _disposableAssets #1711 - [Android] reduce FromEGLConfig() allocations #1583 - [GL] use HashSet for GL Extensions #1587 - [GL] optimized PlatformApplyVertexBuffers() #1604, #1673 - [GL] discard VertexBuffer in SpriteBatcher #1636 - [OpenGL] remove glFinish() from Texture2D.SetData() #1638 - [OpenGL] use DrawRangeElements #1703 - [SDL] cache JoystickCapabilities #1625 - [SDL] cache GamePadCapabilities #1630 - [SDL] reduce Vorbis MediaPlayer allocations #1680 - [SDL] reuse Vorbis reader for Song Repeat #1684 ### Changed - [EffectProcessor] Shader Model 1.x error message #1722 - [BlazorGL] implemented DrawUserPrimitives and DrawUserIndexedPrimitives with vertexOffset #1723 - [BlazorGL] implemented GamePad #1730 - [BlazorGL] implemented TouchPanelCapabilities MaximumTouchCount and IsConnected #1731 - [BlazorGL] implemented Medium quality SoundEfects (MsAdpcm) #1748 - [BlazorGL] implemented SoundEffect.FromStream() #1749 - [BlazorGL] implemented Buffers SetData(...) with startIndex #1753 - [BlazorGL] implemented HiDef and WebGL2 #1756 ### Added ### Removed - VS2019 templates removed #1631 - Xamarin templates removed #1632 - removed GamePadState.Default #1650, #1651, #1653 ## 3.12.9001 Release - May 12, 2024 ### Fixed - fix FBX GlobalSettings transforms #1310, #1545. - fix ContentCompiler.Compile(...) #1320. - fix psShader error message #1333. - fix TitleContainer.Current comments #1339. - [Android] fix Android Game Initialization #1446, #1551. - [UAP] fix UAP Game Initialization #1452. - [iOS] fix iOS Game Initialization #1487. - allow the Game loop to run without a GraphicsDeviceManager #1453, #1467. - fix XAudio ADPCM fallback #1508. - fix ProcessMesh() channel mapping to VertexElement #1538. - fix ExternalReferenceWriter GetRuntimeReader(...) #1540. - ModelProcessor default ColorKeyColor #1542. - set MaterialProcessor Parameter default values #1546, #1547. - Fixed resolve Type bug due to splitting out to different assemblies #1534, #1552. ### Performance - skip XNB compression for uncompressed files #1321, #1334. - compact sizeof GamePadCapabilities #1430. - compact sizeof JoystickHat #1471. - optimize BufferPool array allocation #1526, #1527. - optimize ProcessMesh #1537. ### Changed - [Content.Pipeline] upgrade Assimp to v5.2.4 #1305. - renamed HandState.GetHandTransform(int handIndex) parameter #1312. - allow Shader Model 2_0 and 3_0 on DirectX targets #1333. - Game.ResetElapsedTime() is no longer virtual #1439. - GameTime properties are now readonly/protected. #1443. - The library MonoGame.Framework is split into Xna.Framework.Input, and Xna.Framework.Game #1517, #1518. ### Added - GameWindow keyboard events are now visible in all platforms #1317, #1323. - fx macro __KNIFX__. - protected GameWindow.OnClientSizeChanged() (XNA API compatibility) #1486. - ModelProcessor.GenerateNormals #1543. ### Removed - TouchPanelState class #1337. - TouchPanel.GetState(GameWindow) #1337. - Removed Cardboard Xamarin target #1507, #1548. - Removed obsolete PlatformInfo, GraphicsBackend, PlatformInfo #1519. - protected ContentManager.LoadedAssets property #1523. ## 3.11.9002 Release - March 09, 2024 ### Fixed - [Content.Pipeline] fixed FontDescriptionStyle (Regular,Bold,Italic) #1019, #1056, #1142. - [Content.Pipeline] fixed FontDescriptionStyle flags #1053. - [Content.Pipeline] fixed FontDescription.Name. Resolve FontFamily #1060. - [Content.Pipeline] fixed MeshHelper.CalculateNormals() #1128. - [Content.Pipeline] fixed ProcessorContext.BuildAsset asset path #1147. - [PipelineEditor] fixed content Editor layout. Preserve splitter positions & window size. #1214, #1225. - [GL] bugfix: #991 zero-initialized RenderTargetBinding instances being accessed in PlatformUnbindRenderTarget #998. - [Android] fixed GL InitExtensions() #1239. - [Android] fixed LzxDecoderStream #1261. - [UAP.XAML] fixed PresentationParameters.DeviceWindowHandle #970. - fixed SoundEffectInstance finalizer #1281. - fixed default initialization of PresentationParameters #985. - fixed spelling errors in comments #1063, #1281, #1209. - fixed WindowsDX VS2019 template #1106. ### Performance - Optimized VertexElements iteration #1115. ### Changed - [Content.Pipeline] local fonts must specify the full filename + extension #1055. - [Content.Pipeline] Builder.Task nuget package to replace build targets #1139, #1140, #1141 #1224, #1270. - [Content.Pipeline] VertexBufferWriter will throw PipelineException on invalid VertexData.Length #1150. - [Content.Pipeline] ModelProcessor throws InvalidOperationException on invalid geometry #1151. - [Content.Pipeline] ContentWriter.Write(Color) & ContentReader.ReadColor() replaced with extensions #1190, #1191. - [Content.Pipeline] Upgrade content pipeline to net8 #1229, #1230, #1235. - [Content.Pipeline] 2MGFX tool renamed to Knifx #1251. - [Content.Pipeline] renamed stock importers #1252. - [PipelineEditor] Upgrade ContentMenu to ContentMenuStrip #1213. - [PipelineEditor] Upgrade content editor from net4.x to net8 #1216, #1217, #1218, #1219, #1220, #1223, #1226. - set Tools icon (content editor, MGCB, 2MGFX) #1221. - [BlazorGL] Upgrade WebAssembly packages to v6.0.27 #1233. - [BlazorGL] Upgrade Wasm packages to v8.0.0 #1249, #1287. - [Android] Disabled fast deployment in net8 template #1279. - [Android/iOS] Enable trimming in iOS, Android templates #1288. - [DesktopGL] Enable trimming and nativeAOT in DesktopGL templates #1288. - [DX11] GraphicsAdapter.DriverType & GraphicsAdapter.UseDriverType moved to PresentationParameters #1007. - [LibOVR] Upgrade LibOVR packages to v2.0 #1286. - [LibOVR] implement TouchController.ThumbSticks #1290, #1291, #1292. - DesktopGL & WindowsDX11 projects upgraded to netcode SDK #1131. - test files merged #1129. - VS2019 project templates updated to use nuget packages #1269. - updated VS2022 template icons #1289. - The library MonoGame.Framework is split into MonoGame.Framework, Xna.Framework.Content, Xna.Framework.Graphics, Xna.Framework.Audio, and Xna.Framework.Media #1166, #1167, #1176, #1188. - PlatformInfo.GraphicsBackend marked obsolete. Use Adapter.Backend #1202. - PlatformInfo.MonoGamePlatform marked obsolete.Use TitleContainer.Platform #1208. - Upgrade platforms to net8 #1228, #1236. - Upgrade templates to net8 #1237. - Upgrade framework to net8 #1263. ### Added - - RenderTargetBinding(RenderTarget3D) .ctor is now visible in all platforms #982. - ResourceContentReader class is now visible in all platforms #1100. - Added ContentReader.BufferPool property #1092. - Added MediaQueue.Count property #1182. - Added Adapter.Backend #1202. - Added TitleContainer.Platform #1208. - Added ColorConverter class #1253. - Added MGCB debug profiles #1274. - Enable trimming in framework libraries #1282, 1283. - VertexDeclaration implements IDisposable #1284. ### Removed - [UAP.XAML] removed custom game constructor #961. - [UAP] removed UAP gameloop thread #968. - [UAP] removed template WizardExtension #1272. - removed PresentationParameters.Clear() method #962. - removed PresentationParameters.SwapChanPanel property #972, #975. - removed Video.FileName property #1178. ## 3.10.9001 Release - November 30, 2023 ### Fixed - Fixed spelling of 'Occurred' in Exceptions, Errors and comments #536. - Fixed spelling errors #545. - Fixed not-supported compression format error message #537. - Fixed GraphicsResource.Disposing event. Throw Disposing before the object is disposed or or collected (XNA Compatibility) #583. - Fixed GraphicsDevice.Disposing event #587. Throw Disposing before the object is disposed or collected. - [OculusVR] Dispose of OvrDevice on device disposing #589. - [OpenAL] Fixed Microphone.BufferDuration redundancy #599. - [OpenGL] Fixed GenRenderbuffer() & DeleteFramebuffer() #647. - [DX11] Fixed MultiSample in shared textures #666. - Fixed spelling in MeshHelper documentation #679. - [OpenGL/WebGL] Fixed Texture bindings #694. - [OpenGL/WebGL] Fixed GL Texture MultiSampleCount #720. - Fixed spelling in comments #744. - Fixed GLSL Texture parameter #752. - Fixed HLSL Texture parameter #754, #755, #830. - Fixed Game.IsActive on startup #759. - Fixed collection of DynamicSoundEffectInstance objects #776. - Fixed collection of MediaPlayer objects #777, #784. - [OpenGL] Fixed appling of VertexBuffersAttribs #787. - [OpenGL] Fixed disposal of GraphicsResource objects from the GC Finalizer thread. #797, #798, #799, #800, #802, #803, #805. - [DX11] Fixed resizing while a renderTarget is attached to the backbuffer #808. - [OpenGL] Fixed updating of GraphicsDevice.ScissorRectangle after a ClientResize event #810. - Fixed content Builder db corruption #864. - Fixed content Builder IntermediateOutputDir when building from VS target. #875, #876, #877, #878 . - Fixed content Builder /Clean option. #882. - Fixed content Editor crash from invalid builder's output #890. - Fixed content Builder non-standard output. #892. - Fixed content Builder race condition in CopyItems #894. - Fixed content Builder Success/Error counters in CopyItems #895. - Fixed Game.SuppressDraw #915. - [SDL] Bugfix: Tick() was called after Game.Exit() #917. ### Performance - [OpenGL/WebGL] Optimized SamplerState.PlatformApplyState(...) #580. - [OpenGL] Optimized Effect loading GL #672. - [DX11] Optimized DrawUserIndexedPrimitives #678. - [OpenGL/WebGL] Optimized Apply of TextureCollection #705. - Optimized DrawIndexedPrimitives #706. - [OpenGL] Optimized DrawIndexedPrimitives & DrawInstancedPrimitives #709. - Optimized SpriteBatch flush #710. - [DX11] Optimized SetConstantBuffers #711. - Optimized Effect processor #763. - [OpenGL/WebGL] Optimized ComputeHash #768. - Optimized GraphicsResource.GraphicsDevice code-flow #783, #780. - Optimized PlatformApplyVertexBuffersAttribs code-flow #786. - Optimized content Builder db #871, #872. - Optimized content Builder CleanItems #884. - Optimized content Builder project file loading #887. - Optimized SetParameter code-flow #896. - Optimized Po2 check #906. ### Changed - [Android] implemented GameWindow.Handle and PresentationParameters.DeviceWindowHandle #534. - GraphicsDevice.Handle and Texture.Handle marked obsolete. Use GraphicsDevice.GetD3D11Device() and Texture.GetD3D11Resource() extensions. #593. - Renamed parameter 'cubeMapFace' of TextureCube.SetData() (XNA Compatibility) #613. - Unresolvable Character error from a SpriteFont now reports the unresolved chracter. #648. - Renamed parameter 'usage' of IndexBuffer & VertexBuffer (XNA Compatibility) #686. - Renamed constants in project templates, LINUX->DESKTOPGL, WINDOWS->WINDOWSDX #712. - VertexDeclaration is no longer inherited from GraphicsResource (breaks XNA API) #760, #773. - Macros removed from the SpriteEffect.fx template #769, #817. - The content Editor enforce rooted content #774. - Updated CompareFunction Members documentation #815. - Cleaned up UAP project templates #831. - VS2022 project templates updated to use nuget packages. #839. - Invalid XNB file error from ContentManager now reports the invalid platform flag #865, #866. - Content builder with /quiet option no longer output 'Skipping...' files in VS build output. #873. - VS2022 project templates updated to use new build target Kni.Content.Builder.targets #879, #880, #928. - Content builder with /guiet option now output a single-line report message. #886. - Content builder reports milliseconds in 3 digits. #886. - [BlazorGL] implemented Texture2D.GetData() #716. - [BlazorGL] implemented SongReader & MediaPlayer #723. - [BlazorGL] implemented VideoPlayer #724. - [BlazorGL] implemented Depth24Stencil8 for render targets #816. - [BlazorGL] implemented Depth24Stencil8 for GraphicsDeviceManager.PreferredDepthStencilFormat #821. - [BlazorGL] implemented GraphicsDeviceManager.PreferrMultiSampling #824. - [BlazorGL] implemented PresentationParameters.RenderTargetUsage #825. - [BlazorGL] implemented Game.IsActive #826. - [OpenGL/WebGL] GraphicsAdapter.IsDefaultAdapter #826. - [DesktopGL] GraphicsAdapter.IsProfileSupported #903. - [ANDROID/iOS] Mobile/Xamarin projects & templates upgraded to .net8 #925, #926, #927. - [BlazorGL] Brotli decompression is disabled by default #931. ### Added - GraphicsDevice.Flush() added to all platforms #590. - DynamicBuffer.ContentLost event (XNA API compatibility) #725. - [BlazorGL] loading screen #911. - [BlazorGL] added enableBrotliDecompression boolean in index.html #930. ### Removed - Textur2D.Reload() method #571. - [Android/iOS] Native Texture2D.FromStream() methods #572. - .net6 Libraries removed from the SDK #835. - VS2017 project templates #850. - Implicit response & content filenames as arguments in the content builder, Use /@:responseFile and /build:contentFile #867. - /LauncgDebugger option from the content builder #868. - .net6 Templates #920. ## 3.9.9001 Release - august 09, 2023 ### Fixed - bugfix: fix Complex.Magnitude. - bugfix: fix DictionaryReader. - bugfix: fix RenderTarget3D/RenderTargetCube multisample. - bugfix: fix EffectParameter.SetValueTranspose(Matrix) for Matrxi4x3 and Matrix3x4. - bugfix: [OpenGL] Dispose of GraphicsContext. - bugfix: [OpenGL] fix MarshalStringToPtr(...). - bugfix: [OpenGL] fix RenderTarget2D multisample. - bugfix: [OpenGL] IndexBuffer is invalidated after a call to DrawUserPrimitives, IndexBuffer's .ctor and GetData/SetData. - bugfix: [WindowsDX] fix ObjectDisposedException in PreFilterMessage. - bugfix: [WindowsDX] fix VideoPlayer.Resume(). - bugfix: [WindowsDX] fix VideoPlayer memory leak. - bugfix: [WindowsDX/UAP] fix VideoPlayer.GetTexture(). - bugfix: [DesktopGL] DeviceWindowHandle is not updated to the actual GL Window handle. - bugfix: [DesktopGL] game window fails to load Icon.bmp. - bugfix: [DesktopGL] GameWindow.Title. - bugfix: [Content.Pipeline] fix FontDescriptionProcessor smoothing. - bugfix: [Content.Pipeline] FontDescription.Spacing was incorectly applied to VerticalLineSpacing (XNA API compatibility). - bugfix: [Content.Pipeline] fix FontDescriptionProcessor Yoffset Cropping. - bugfix: [Content.Pipeline] fix font size. - bugfix: [Content.Pipeline] Added 1px spacing to Glyphs when UseKerning is false. - bugfix: [Content.Pipeline] method CalculateAlphaRange(...) should throw instead of returning default value when the type is unsupported. - bugfix: [Content.Pipeline] fix GLSL optimized matrix parameter. - bugfix: [Content.Pipeline] fix Compression of 16bit Textures with Alpha. - bugfix: [Content.Pipeline] fix EnvironmentMapEffectWriter. - bugfix: [Content.Pipeline] fix MeshHelper.CalculateNormals(...). - bugfix: [Content.Pipeline] Implement ContentImporterContext.AddDependency() (XNA API compatibility). - bugfix: [Content.Pipeline] Interpolate curved animation (XNA API compatibility). ### Performance - [DesktopGL] reduce GamePad.GetCapabilities(...) string allocations. - [GL] Use DYNAMIC_DRAW for Dynamic buffers instead of STREAM_DRAW. - [Content.Pipeline] Optimized ProcessPremultiplyAlpha(...). - [Content.Pipeline] Optimized Texture compression. - [Content.Pipeline] Optimized FontDescriptionProcessor and FontTextureProcessor. - [Content.Pipeline] Optimized PixelBitmapContentT.SetPixelData(...) and PixelBitmapContentT.ReplaceColor(...). - [PipelineEditor] optimize UpdateRecentProjectList(). ### Changed - The library MonoGame.Framework is split into MonoGame.Framework, Xna.Framework and Xna.Framework.Design. - Game.Exit() will now throw PlatformNotSupportedException instead of InvalidOperationException (XNA API change). - GameWindow.Title will throw ArgumentNullException (XNA API compatibility). - Max Capacity of TextureCollection, ConstantBufferCollection, SamplerStateCollection increased to 32. Collections will throw ArgumentOutOfRangeException. - EffectParameter.SetValue(Matrix) will throw InvalidCastException for unsuported Matrix types. - Vector2/3/4TypeConverter, renamed to Vector2/3/4Converter. - IsContentLost will throw NotImplementedException. - [BlazorGL] Game.Exit() will throw PlatformNotSupportedException. - [BlazorGL] MaxTextureSlots increased to 8 from 4. - [WindowsDX] Texture2D.Reload() will throw NotImplementedException. - [PipelineEditor] font size increased to 11 from 9. - [Content.Pipeline] AssimpNet updated to v4.1.0. - [Content.Pipeline] The library MonoGame.Framework.Content.Pipeline is split into Xna.Framework.Content.Pipeline, Xna.Framework.Content.Pipeline.Audio, Xna.Framework.Content.Pipeline.Media, Xna.Framework.Content.Pipeline.Graphics and Xna.Framework.Content.Pipeline.Graphics.MojoProcessor. ### Added - Implement IPackedVector for Color (XNA API compatibility). - Implement EffectParameter.SetValue(Matrix) for Matrix4x2. - [DesktopGL] Implement Mouse Raw Input. - [WindowsDX/UAP] Implement VideoPlayer.IsLooped. - [Android] Implement VideoPlayer.GetTexture(), VideoPlayer.PlayPosition, VideoPlayer.IsLooped, VideoPlayer.Volume. - [BlazorGL] Implement building effects for the WebGL Platform. - [BlazorGL] Update template to prevent Arrows Keys and Spacebar scrolling the outer page when running inside an iframe. (by @Terria-K) - [BlazorGL] Update template to prevent Mousewheel scrolling the outer page when running inside an iframe. - [Content.Pipeline] added FontDescriptionProcessor.Smoothing parameter. - [Content.Pipeline] support Alpha8, NormalizedShort2, NormalizedShort4 in PixelBitmapContent (XNA API compatibility). ### Removed - GraphicsDevice.IsContentLost property. - GraphicsDevice.ResourcesLost property. - [UAP] removed Game.PreviousExecutionState property. - [Android] removed Game.Activity property. - [Content.Pipeline] StbSharp is now internal. ## 3.8.9102 Release - February 5, 2023 ### Fixed - bugfix: Android gameloop will now pause while app is in the background. - bugfix: FontDescriptionProcessor glyph cropping. - bugfix: FontDescriptionProcessor glyph whitespaces width. - bugfix: GlyphPacker failed when FontDescription imports a single character. - bugfix: [MGCB] processorParam flag changed to 'm'. Fix conflict with processor flag 'p'. - bugfix: [MGCB] remove multiple flags support. Fix conflict with all non-flag parameters. - bugfix: [DesktopGL] Game initialization. ### Performance - [GL] Single ShaderProgramCache lookup. - [GL] Use _blendFactorDirty & _blendStateDirty to skip checks. - Parallel PixelBitmapContent .ctor() and GetPixelData(). - Multithread content pipeline builder. ### Changed - GraphicsAdapter is no longer IDisposable (XNA API compatibility). - MonoGameAndroidGameView renamed to AndroidSurfaceView - base ContentTypeWriter.ShouldCompressContent(...) returns true. - Include type name in the error message for failed resolved Types in content pipeline. - Report duplicate importers/processors without faling/halting the build. - [OpenGL/GLES] resources are released immediately when the object is collected/Disposed. - Song in DesktopGL is re-implemented as DynamicSoundEffectInstance. - Include FontDescription.DefaultCharacter in the imported Glyphs instead of throwing an error (XNA API compatibility). - SpriteFont template updated with DefaultCharacter '�'. - Reverted WinForms editor replaces eto. - Calling EffectPass.Apply() will always apply the EffectPass that it was called on (XNA API compatibility). Changing the CurrentTechnique in Effect.OnApply() in no longer allowed and will throw an InvalidOperationException. - MonoGamePlatform enum BLAZOR renamed to BlazorGL. - [BlazorGL] workaround for .net7 Unmarshalled interop bug. ### Added - The following Classes/Methods are now visible in all platforms. SetRenderTarget(RenderTarget2D renderTarget, int arraySlice) SetRenderTarget(RenderTarget3D renderTarget, int arraySlice) - Restored SpriteFont.Characters property (XNA API compatibility). - [MGCB] Parameter 'singleThread' (-s) to turn of Multithread build. - fx macros __DEBUG__, __DIRECTX__, __OPENGL__, __MOJOSHADER__. - DrawableGameComponent and GameComponent VS2022 template. - BlazorGL VS2022 template. ### Removed - IWindowInfo - AndroidGameActivity.RenderOnUIThread - Song.Position - Protected methods PlatformOnSongRepeat(), PlatformPlay(), PlatformResume() in MediaPlayer. - GlyphCollection.CopyTo() - Stadia platform. ## 3.8.9101 Release - October 9, 2022 ### Fixed - bugfix: [DesktopGL] screen appear white washed. - bugfix: [GL] TextureSlots number can be greater that implementation limitations. - bugfix: [webGL] Texture.Dispose() throws Exception when garbage collected. - bugfix: [WebAudio] SoundEffect.Volume is not applied to a playing instance. - bugfix: [DirectX] RenderTargetCube throws Exception when created without a Depth. - bugfix: Content manager should throw error when TypeVersion does not match. ### Performance - perf: [GL] 250% faster spriteBatcher. - perf: 10% faster MeasureString(). - perf: Optimize Vector array Transform methods. - perf: cache resolved TypeReader types ### Changed - [webGL] implement Discard mode in Dynamic buffers. - [webGL] implement Dtx3 texture compression. ### Added - Oculus VR (PC library), Implemented as addon lib for WindowsDX. Added classes/structs: OvrDevice, HandsState, HeadsetState. The following classes/structs were added in Framework.Input.Oculus: TouchController, TouchControllerState, TouchControllerType, TouchButtons, TouchButtonState. - Complex numbers. Added classes/structs/methods: Complex, ComplexWriter, ComplexReader, Vector2.Transform() overloads, SpriteBatch.Draw() and SpriteBatch.DrawString() overloads. - The following Classes/Methods are now visible in all platforms. Video, VideoPlayer, VideoReader, OcclusionQuery, Texture3D, RenderTarget3D, Texture3DReader, EffectParameter.GetValueTexture3D() ## 3.8.9100 Release - Aug 11, 2022 ### Fixed - Fix incremental build of external assets. - fix MGFXHeader. - fix EffectProcessor. - fix Mouse.SetCursor() resource leaks. - fix memory leak on ContentManager.ReloadGraphicsAssets(). - Fix DrawableGameComponent.Dispose(). - TextureProcessor no longer override existing MipMaps (XNA API compatibility). - [UAP] fix IsFullScreen. Implement IsFullScreenMode, PreferredLaunchWindowingMode. - [UAP] fix GamePad race condition. - fix ContentTypeReaderManager,ResolveType() when running on Core/Net6. - fix game loop, Reset IsRunningSlowly after 5 frames. - fix error "Could not find ContentTypeReader ReflectiveReader". - fix FBX/OpenAssetImporter TextureCoordinate AddressV mode. - fix FBX/OpenAssetImporter material.SpecularPower. - [Android] fix GraphicsDeviceManager.SupportedOrientations and Backbuffer size handling. - fix SoundEffectInstance, DynamicSoundEffectInstance states (Play/Stop/Pause/Resume). - fix SoundEffectInstance resource leaks. - fix DynamicSoundEffectInstance.BufferNeeded. - [openAL] fix SoundEffectInstance Pan and Apply3D. - GraphicsDeviceManager will not swap PreferredBackBufferWidth/PreferredBackBufferHeight. - fix graphics context ApplyState. - [DirectX] fix RenderTargetCube with depth for Feature level 10_0 and higher. - fix mgcb output. Some errors are not caught by the mgcb editor. - mgcb generates output combatible with Visual Studio. mgcb errors and warnings are visible on the Error List panel. - fix error in FontDescriptionProcessor, throw InvalidContentException instead of InvalidOperationException. - fix reported shader error/warning line number when #include files are used. - fix pipeline error due to missing redistributable msvcr110.dll. ### Performance - [DesktopDX] reduce WinForms garbage from EventArgs. - optimize Intersects BoundingBox vs BoundingSphere. - optimize BoundingBox.CreateFromPoints(). - precalculate Glyph TexCoord (SpriteBatch). - optimize Viewport Project()/Unproject(). - [DirectX] grow internal buffers in chunks. - fast IntermediateSerializer.FindType(). - Reduce garbage in EffectResource loading. - TouchCollection with Fixed Size array. Doesn't allocate memory/generate garbage. - [DesktopDX] reduce WinForms keyboard garbage from EventArgs. - [DirectX] optimized spriteBatcher. Two phase batching with buffers. - [DirectX] optimized spriteBatcher. Write vertices directly to the Mapped Buffer. - improved gameLoop. - [DirectX] optimized Texture2D.GetData() when (rowPitch != 0). - reduce garbage from GameWindow.TextInput, GameWindow.KeyUp, GameWindow.KeyDown events. - [Android] reduce garbage in ContentManager.Load<>(). - [ANDROID] Reduce garbage from gameLoop. - optimized SpriteBatch.End()/Setup(). - [Audio] Optimize and reduce memory garbage. - optimize graphics context ApplyState. - reduced size of TouchLocation. Split TouchLocation/TouchLocationData and other minor optimizations. ### Changed - backward compatible EffectReader (v9,v8). - no longer applying reordering of content items in .mgcb files. - ContentManager allow rooted paths on all platforms. - [UAP] ContentManager throws DirectoryNotFoundException. - Matrix.CreatePerspective() no longer support infinite far planes. - Game.Exit() throws InvalidOperationException on platforms that don't allow programmatically exiting the app (Android, iOS). - [WindowsDX] implement Mouse.WindowHandle. - Texture2D.FromStream() does no longer cut-off alpha pixels (breaks XNA API). - GamePadDPad and GamePadState constructors (XNA API compatibility). - [UWP] Allow BackBuffer Scaling - [WindowsDX] game will not update during moving/resizing of the window. instead the window gets repainted. - removed sender parameter from on-event virtual methods (breaks XNA API). Game.OnExiting(), Game.OnActivated(), Game.OnDeactivated(), GameComponent.OnUpdateOrderChanged(), GameComponent.OnEnabledChanged() , DrawableGameComponent.OnDrawOrderChanged(), DrawableGameComponent.OnVisibleChanged(). - in effect templates the GL level is now the same version as DX. - some Model properties, methods and setters were made internal/private. - all ContentWriters are now backward compatible with XNA (XNA API compatibility). - [UAP/Xaml] game loop runs from main thread. - [DirectAudio] decode invalid MSADPCM during loading. - [WindowsDX] BaseIndexInstancing is disabled. - implement Graphic Profiles (Reach & HiDef) (XNA API compatibility). - implement Extended Graphics profiles (FL10_0,FL10_1,FL11_0,FL11_1). - The following event arguments were changed to classes inheriting EventArgs. FileDropEventArgs, InputKeyEventArgs, TextInputEventArgs. - SpriteFont.Glyphs returns a GlyphCollection. - [Android] TitleContainer now returns a random access stream. - [Android] Fine tune resolution for automatic orientation (45 degrees angle). - [Android] Shockproof automatic orientation (0.5sec delay). - [Android] Suspend game during a Call (Requires READ_PHONE_STATE permission). - [Android] Implement Game.IsActive. - FrameworkDispatcher is no longer a static class (breaks XNA API). - SoundEffect, SoundEffectInstance, DynamicSoundEffectInstance is now thread safe. - Audio device might get initialized on demand and shutdown automatically as needed multiple times. - DynamicSoundEffectInstance.BufferNeeded will not automatically stop firing. - [GL] Texture2D.SetData(), Texture2D.GetData() no longer work from worker threads. - GraphicsDeviceManager explicitly implements IGraphicsDeviceManager. - SpriteFontContent properties, methods and setters were made internal/private. - Converters under the Framework.Design namespace now convert only to/from String. - Texture2D.FromStream now use native decoders when posible. - Net.Framework libraries (DesktopGL, Content.Pipeline) set to target 4.0. - Net6 libraries DesktopGL & Content.Pipeline set to target netstandard2.0. ### Added - Mouse.IsRawInputAvailable, MouseState.RawX, MouseState.RawY. - Game.IsVisible. - GraphicsProfile.FL10_0, GraphicsProfile.FL10_1, GraphicsProfile.FL11_0, GraphicsProfile.FL11_1. - GlyphCollection. - The following Classes/Methods are now visible (XNA API compatibility). BoundingSphere.Intersects(BoundingFrustum frustum), Ray.Intersects(BoundingFrustum), EffectParameter.GetValueBooleanArray(), EffectParameter.GetValueQuaternionArray(), EffectParameter.SetValue(bool[]), EffectParameter.SetValue(Quaternion[]), EffectParameter.SetValue(string). GraphicsDevice.Present(Rectangle? , Rectangle? , IntPtr ) - MediaLibrary.SavePicture() overloads. - IFrameworkDispatcher, FrameworkDispatcher.Current. - GraphicsDeviceManager implements Dispose() on all platforms. - StorageDevice, StorageContainer. - VectorConverter (XNA API compatibility). - Blazor/WebGL platform. - Reference platform. ### Removed - System.Numerics. - ContentProcessorContext.SourceIdentity. - ContentStats. - ContentBuildLogger.LoggerRootDirectory, ContentBuildLogger.IndentString. - ContentManager.Unload(). - Buttons.None. - TouchPanel.EnableMouseTouchPoint, TouchPanel.EnableMouseGestures. - Texture2D.FromFile(), DefaultColorProcessors, Texture2D.FromStream(GraphicsDevice, Stream, Action). - ContentTypeReaderManager.AddTypeCreator(), ContentTypeReaderManager.ClearTypeCreators(). - SpriteFont.Characters, SpriteFont.GetGlyphs(), Glyph.Character. - MonoGameAndroidGameView.Visible, MonoGameAndroidGameView.Size. - SoundEffect.FromFile(). - RenderTargetCube.GetRenderTargetView(), RenderTargetCube.GetDepthStencilView() (IRenderTarget methods). - GrowRule, MaxRectsBin, MaxRectsHeuristic were made internal. - VectorConversion. ## 3.8.1 HOTFIX Release - July 26, 2022 ## What's Changed - Fix MonoGame publisher name for the VS marketplace by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7847 - Corrected 'Framwork' to 'Framework' by @benjitrosch in https://github.com/MonoGame/MonoGame/pull/7850 - added missing words to platforms.md by @MrGrak in https://github.com/MonoGame/MonoGame/pull/7852 - Fixed grammatical error from 'project' to 'projects' by @benjitrosch in https://github.com/MonoGame/MonoGame/pull/7855 - Grammar Hotfix on README by @Emersont1 in https://github.com/MonoGame/MonoGame/pull/7856 - Remove redundant dependencies by @vpenades in https://github.com/MonoGame/MonoGame/pull/7854 - Fixes Visual Studio freezing with the extension by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7857 - Updated migration guide by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7858 - More migration guide updates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7859 - Wild cards don't work in dotnet-tools.json by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7860 - Removed explicit global usings by @vpenades in https://github.com/MonoGame/MonoGame/pull/7853 ## 3.8.1 Release - July 24, 2022 ## What's Changed - Update build version to 3.8.1.xxxx by @tomspilman in https://github.com/MonoGame/MonoGame/pull/7296 - Fix broken links by @rejurime in https://github.com/MonoGame/MonoGame/pull/7297 - [DesktopGL] Fix setting backbuffer size not working in constructor by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7299 - Add quotation marks around MGCBPath by @bjornenalfa in https://github.com/MonoGame/MonoGame/pull/7304 - [Templates] Update FSharp projects by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7302 - fix Texture.GetSharedHandle() by @nkast in https://github.com/MonoGame/MonoGame/pull/7306 - [MGCB Editor] Update registration handling files by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7311 - Updated to the latest version of StbSharp by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7312 - Support MSAA in SwapChainRenderTarget by @nkast in https://github.com/MonoGame/MonoGame/pull/7307 - Updated link for the XNA 3.1 to XNA 4.0 cheatsheet by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7321 - Updated and added links to latest MonoGame 3.8 content in tutorials.md by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7322 - Explicitly document BackToFront and FrontToBack use an unstable sort. by @goosenoises in https://github.com/MonoGame/MonoGame/pull/7323 - Update mgfxc_wine_setup.sh by @Kwyrky in https://github.com/MonoGame/MonoGame/pull/7327 - Fix multisampling in DesktopGL by @sk-zk in https://github.com/MonoGame/MonoGame/pull/7338 - [MGCB Editor] macOS fixes by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7337 - Fix shader error messages for OpenGL by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7340 - Added IEffectBones interface, implemented by SkinnedEffect. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7344 - Update NVTT (fixes #5866) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7354 - Edited the Getting Started parts of the documentation for grammar, clarity, and style by @HopefulFrog in https://github.com/MonoGame/MonoGame/pull/7374 - Updated Matrix.CreatePerspective - to support infinite far planes. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7367 - Add missing underscore in code section by @pbedn in https://github.com/MonoGame/MonoGame/pull/7349 - Update CONTRIBUTING.md by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7394 - Added ICurveEvaluator{T} interface. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7387 - Update Eto.Froms for VS for Mac addin by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7365 - Fix for MGFXO file format to increases collection size limits. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7397 - NUnit Test Attachments To preview Test images in VS. by @vpenades in https://github.com/MonoGame/MonoGame/pull/7413 - [macOS] Properly check current folder if we are inside of .app bundle by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7416 - fix 7402: enqueue buffer ref before sending to OAL by @lodicolo in https://github.com/MonoGame/MonoGame/pull/7403 - Fixes 3D Audio Direction Issues On Platforms Using OpenAL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7404 - Fixes Stopping Looped Sounds On Platforms Using XAudio by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7405 - Fixes Buffer Bindings Cache Issue On Platforms Using OpenGL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7406 - Fixes 3D Audio Direction Issues On Platforms Using X3DAudio by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7389 - Proposal for adding basic interoperability with System.Numerics.Vectors by @vpenades in https://github.com/MonoGame/MonoGame/pull/7417 - [VSMac] Mark .spritefont files as .xml files by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7426 - Updated console references by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7432 - Removed residual OUYA references by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7433 - [VSMac] Fix freeze upon opening a mgcb file and bump dependencies by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7435 - [MGCB Editor] Fix help link (fixes #7428) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7438 - Changed uses of Math to MathF where it was used for floats by @initram in https://github.com/MonoGame/MonoGame/pull/7390 - [MGCB.Task] Separate obj folder per target framework (fixes #7409) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7441 - Revert "Changed uses of Math to MathF where it was used for floats" by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7442 - File drop event on DesktopGL and WindowsDX platforms by @Quant1um in https://github.com/MonoGame/MonoGame/pull/7362 - [MGCB Editor] Bump Eto.Forms version (fixes #7418) by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7439 - Update SDL to 2.0.14 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7445 - Help with compatibility toward NativeAOT by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7462 - Generic Threading.BlockOnUIThread for reducing garbage allocs by @TechPizzaDev in https://github.com/MonoGame/MonoGame/pull/7384 - Fix UWP Vsync support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7463 - [DesktopGL] Improve mouse handling outside gamewindow by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7440 - Updated to the latest StbSharp 2.22.5, which added support for HDR images by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7467 - Fix type collisions and default implementations for consoles by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7466 - Removed threading limitations by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7472 - Fixed a typo in the comments. charaters --> characters by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7473 - fixed grammar in CONTRIBUTING.md by @algobytewise in https://github.com/MonoGame/MonoGame/pull/7469 - Fixed a small handful of typos in the comments of SpriteFont. by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7479 - Update copyright year to 2021 in LICENSE.txt by @monegit in https://github.com/MonoGame/MonoGame/pull/7482 - Fixes PacketNumber For Non-Haptic Gamepads On Platforms Using SDL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7487 - Fixes Duplicate/Missing Gamepads On Platforms Using SDL by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7486 - Bump GtkSharp to fix crashes on Arch Linux by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7493 - Update NVorbis submodule by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7495 - Added selective ContentManager asset unloading by @kimimaru4000 in https://github.com/MonoGame/MonoGame/pull/6663 - Update Mac Extension Link by @gideongrinberg in https://github.com/MonoGame/MonoGame/pull/7497 - Remove deprecated property Color.TransparentBlack by @nkast in https://github.com/MonoGame/MonoGame/pull/7505 - Remove duplicate check with wrong argument name by @nkast in https://github.com/MonoGame/MonoGame/pull/7504 - fix spelling error by @nkast in https://github.com/MonoGame/MonoGame/pull/7503 - Prevent App suspension when the user press 'B' button on UWP (xbox controller) by @nkast in https://github.com/MonoGame/MonoGame/pull/7500 - fix PipelineBuildEvent deserialization by @nkast in https://github.com/MonoGame/MonoGame/pull/7502 - Support drawing point primitives by @roy-t in https://github.com/MonoGame/MonoGame/pull/7477 - Update samples.md by @Michael1993 in https://github.com/MonoGame/MonoGame/pull/7358 - Merged the two requirements files into the REQUIREMENTS.md by @RicoGuerra in https://github.com/MonoGame/MonoGame/pull/7484 - Upgrade tooling to .NET 5 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7437 - Upgraded projects and documentation to NET5 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7514 - Changed Math to MathF by @initram in https://github.com/MonoGame/MonoGame/pull/7451 - Shared MSAA RenderTarget by @nkast in https://github.com/MonoGame/MonoGame/pull/7506 - Added pixels processing function parameter to the Texture2D.FromStream/TextureFromFile by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7369 - Docs/content pipeline update by @SimonDarksideJ in https://github.com/MonoGame/MonoGame/pull/7370 - Don't recompile the same shader multiple times. by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7392 - Update Game.cs by @SAJenkin in https://github.com/MonoGame/MonoGame/pull/7528 - Fix FontDescriptionProcessor kerning by @nkast in https://github.com/MonoGame/MonoGame/pull/7501 - Fix assembly trimming in templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7529 - Fixed GLDesktop PlatformStop() resolving issue #7372 by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7453 - Fix VSCode launch configuration for MGCB Editor on Mac by @the-maverick-m in https://github.com/MonoGame/MonoGame/pull/7535 - OpenGL debug context for better error messages by @cpt-max in https://github.com/MonoGame/MonoGame/pull/7536 - cask is no longer a brew command by @miluchen in https://github.com/MonoGame/MonoGame/pull/7543 - Fix iOS GamePlatform to run pending background tasks #7520 by @Mindfulplays in https://github.com/MonoGame/MonoGame/pull/7522 - Removed PS Vita support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7531 - Optimized ApplyAlpha by removing two unnecessary arithmetic operations by @rds1983 in https://github.com/MonoGame/MonoGame/pull/7555 - [Feature] GitHub Actions integration by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7511 - [Content Pipeline] Fix library names when packaging the nuget by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7557 - Null song parameters for MediaPlayer.Play are not allowed in XNA by @james0x0A in https://github.com/MonoGame/MonoGame/pull/7558 - Fixes XACT ADPCM Compression Playback by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7564 - Fixes XACT Cue.IsPlaying Behaviour When Paused by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7563 - Fixes EffectParameter SetValue Using Int For Float Parameters by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7568 - Added a keyboard shortcut (F2) to rename a file. by @rbwhitaker in https://github.com/MonoGame/MonoGame/pull/7575 - Fix NRE for Game._gameTimer by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7587 - Enable setting 8 render targets when targetting Windows by @bjornenalfa in https://github.com/MonoGame/MonoGame/pull/7549 - Fixed Comment for Intersects Method by @JacksonDorsett in https://github.com/MonoGame/MonoGame/pull/7592 - remove unused usings from Content readers by @nkast in https://github.com/MonoGame/MonoGame/pull/7595 - remove CLSCompliant(false) from internal members by @nkast in https://github.com/MonoGame/MonoGame/pull/7594 - remove unused reader/writer classes by @nkast in https://github.com/MonoGame/MonoGame/pull/7597 - Added PlayStation 5 support by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7645 - Fix back and start buttons on iOS by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7694 - Update stuff to .NET 6 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7688 - net6 mobile and UWP fixes by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7697 - Fixed a broken link in custom_effects docs. by @davidhesselbom in https://github.com/MonoGame/MonoGame/pull/7663 - terminology, spelling & grammar corrections by @mikeirvingweb in https://github.com/MonoGame/MonoGame/pull/7657 - Fix comment typos in enum GestureType by @Brett208 in https://github.com/MonoGame/MonoGame/pull/7658 - Update SDL_GameControllerDB by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7702 - Console check fake project by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7698 - Improve GamePad support on macOS and introduce support for rumble by @carlfriess in https://github.com/MonoGame/MonoGame/pull/7690 - Fix mgcb building content during nuget package restore by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7709 - Visual Studio 2022 Extension for templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7699 - Fix up mgcb-editor dotnet tool by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7708 - Optimized SpriteFont GlyphPacker by @TechPizzaDev in https://github.com/MonoGame/MonoGame/pull/7464 - Add thread locking to the UWP gamepads dictionary by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7655 - Multisampling on Android by @j0nat in https://github.com/MonoGame/MonoGame/pull/7561 - proposal: additional vertex structs by @lodicolo in https://github.com/MonoGame/MonoGame/pull/7421 - Fixes UWP Set Window Size Thread Access Error by @squarebananas in https://github.com/MonoGame/MonoGame/pull/7570 - Fix templates for VS for Mac 2022 by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7764 - Fix memory leak on desktop gl static variable by @adnanioricce in https://github.com/MonoGame/MonoGame/pull/7684 - Make the VS extension to open .mgcb by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7765 - Fix broken links to Extended samples in docs by @NogginBox in https://github.com/MonoGame/MonoGame/pull/7767 - RTL text rendering overload for SpriteBatch.DrawString by @BlueElectivire in https://github.com/MonoGame/MonoGame/pull/7644 - fix GamePad.GetCapabilities(...) race codition by @nkast in https://github.com/MonoGame/MonoGame/pull/7770 - Update templates by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7771 - Build system upgrades by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7772 - Add automatic upload of artifacts to GitHub packages by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7773 - [Actions] Use GITHUB_TOKEN for deploy job by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7775 - Fix obsolete call on iOS by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7777 - Fix SoundEffectInstance pooling by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7776 - Update wine script for NET 6 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7790 - Auto versioning of VS extension by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7788 - Added RollForward directive by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7789 - Cleaned up rollforward from mobiles by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7791 - Remove default Inner Exceptions by @nkast in https://github.com/MonoGame/MonoGame/pull/7800 - fix list of supported surfaces by @nkast in https://github.com/MonoGame/MonoGame/pull/7801 - Update submodules by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7806 - Add Buttons.None by @TimerbaevRR in https://github.com/MonoGame/MonoGame/pull/7818 - Fix Buttons.None by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7822 - [Actions] Fix UWP package path by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7825 - [Actions] Build VS for Mac addin by @harry-cpp in https://github.com/MonoGame/MonoGame/pull/7824 - [WIP] Documentation update for 3.8.1 by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7798 - Removed trimming property from templates by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7829 - Create a release when pushing a tag by @mrhelmut in https://github.com/MonoGame/MonoGame/pull/7828 ## 3.8 Release - August 10, 2020 ### Added - New Plane constructor. [#6085](https://github.com/MonoGame/MonoGame/pull/6085) - Round, Ceiling, Floor functions for Vector2/3/4. [#6318](https://github.com/MonoGame/MonoGame/pull/6318) - Dotnet templating templates. [#6494](https://github.com/MonoGame/MonoGame/pull/6494) - TransformMatrix for SpriteEffect. [#6623](https://github.com/MonoGame/MonoGame/pull/6623) - SpriteBatch constructor overload with capacity parameter. [#6682](https://github.com/MonoGame/MonoGame/pull/6682) - [OpenGL] Support for separate blend states per render target. [#6343](https://github.com/MonoGame/MonoGame/pull/6343) - Multiply operator overload for Color: `scale * Color`. [#6747](https://github.com/MonoGame/MonoGame/pull/6747) - Overloads for garbageless BoundingBox.CreateFromPoints. [#6743](https://github.com/MonoGame/MonoGame/pull/6743) - UseStandardPixelAddressing flag. [#6621](https://github.com/MonoGame/MonoGame/pull/6621) [#6780](https://github.com/MonoGame/MonoGame/pull/6780) - [MGCB] Search fonts in HKEY_CURRENT_USER on Windows. [#6671](https://github.com/MonoGame/MonoGame/pull/6671) - Garbageless GetPressedKeys overload. [#6643](https://github.com/MonoGame/MonoGame/pull/6643) - Expose GraphicsDevice.DiscardColor to set the clear color of render targets. [#6832](https://github.com/MonoGame/MonoGame/pull/6832) - KeyDown and KeyUp events on GameWindow. [#6762](https://github.com/MonoGame/MonoGame/pull/6762) - FromFile for Texture2D and SoundEffect. [#6586](https://github.com/MonoGame/MonoGame/pull/6586) - PlatformInfo class to query runtime platform. [#6846](https://github.com/MonoGame/MonoGame/pull/6846) [#6873](https://github.com/MonoGame/MonoGame/pull/6873) - API to query graphical system at runtime. [#6872](https://github.com/MonoGame/MonoGame/pull/6872) - Etc2 texture format support. [#6864](https://github.com/MonoGame/MonoGame/pull/6864) - MonoGame.Content.Builder package. [#6905](https://github.com/MonoGame/MonoGame/pull/6905) - τ constant. [#6937](https://github.com/MonoGame/MonoGame/pull/6937) - [UWP] Overloads for more detailed vibration control. [#6933](https://github.com/MonoGame/MonoGame/pull/6933) - [MGCB Editor] Always use Headerbar. [#6938](https://github.com/MonoGame/MonoGame/pull/6938) - Joystick display name for the Joystick API. [#7008](https://github.com/MonoGame/MonoGame/pull/7008) - [OpenGL] Overload with base index for draw instancing. [#7016](https://github.com/MonoGame/MonoGame/pull/7016) - Google Stadia Support. [#7020](https://github.com/MonoGame/MonoGame/pull/7020) [#7049](https://github.com/MonoGame/MonoGame/pull/7049) - LastJoystickIndex for the Joystick API. [#7017](https://github.com/MonoGame/MonoGame/pull/7017) - MouseState.ToString. [#7091](https://github.com/MonoGame/MonoGame/pull/7091) - [MGCB Editor] .NET Core tool. [#7090](https://github.com/MonoGame/MonoGame/pull/7090) - [MGFXC] Wine support. [#7098](https://github.com/MonoGame/MonoGame/pull/7098) [#7103](https://github.com/MonoGame/MonoGame/pull/7103) [#7107](https://github.com/MonoGame/MonoGame/pull/7107) [#7188](https://github.com/MonoGame/MonoGame/pull/7188) - EffectParameter.SetValue for int array. [#7143](https://github.com/MonoGame/MonoGame/pull/7143) - Add Web platform information to the content builder. [#7144](https://github.com/MonoGame/MonoGame/pull/7144) - [macOS] MonoGame Content pad for VS for Mac. [#7266](https://github.com/MonoGame/MonoGame/pull/7266) ### Removed - Remove obsolete SpriteBatch.Draw overload. [#6818](https://github.com/MonoGame/MonoGame/pull/6818) - Disable Piranha portable build. [#6844](https://github.com/MonoGame/MonoGame/pull/6844) - Removed MonoGame.Framework.Net. [#6900](https://github.com/MonoGame/MonoGame/pull/6900) [#6775](https://github.com/MonoGame/MonoGame/pull/6775) - Remove internal PNG Utility Classes. [#6976](https://github.com/MonoGame/MonoGame/pull/6976) - Protobuild removed and replaced with solutions and projects. [#7040](https://github.com/MonoGame/MonoGame/pull/7040) [#7041](https://github.com/MonoGame/MonoGame/pull/7041) ### Changed - OpenAssetImporter Improvements and FbxImporter Unit Tests. [#6158](https://github.com/MonoGame/MonoGame/pull/6158) - Made sound system optional. [#6629](https://github.com/MonoGame/MonoGame/pull/6629) - [UWP] Do not set minimum window size. [#6763](https://github.com/MonoGame/MonoGame/pull/6763) - Added Cake build script to replace NANT. [#6776](https://github.com/MonoGame/MonoGame/pull/6776) - Marked Color.TransparentBlack obsolete. [#6817](https://github.com/MonoGame/MonoGame/pull/6817) - [SDL] Performance and garbage optimizations to Joystick. [#6829](https://github.com/MonoGame/MonoGame/pull/6829) [#6834](https://github.com/MonoGame/MonoGame/pull/6834) - Track GamePad packet number and general optimizations. [#6760](https://github.com/MonoGame/MonoGame/pull/6760) - [DirectX] Basic performance enhancements to Texture2D. [#6726](https://github.com/MonoGame/MonoGame/pull/6726) - Inline Vector2 operator / and Point.ToVector2(). [#6700](https://github.com/MonoGame/MonoGame/pull/6700) - Make OggStreamer thread a background thread. [#6848](https://github.com/MonoGame/MonoGame/pull/6848) - Made it so Texture2D in any format could be saved as Png/Jpeg when using MonoGame.DesktopGL backend. [#6855](https://github.com/MonoGame/MonoGame/pull/6855) - Upgrade SDK projects to .NET 4.5.2. [#6902](https://github.com/MonoGame/MonoGame/pull/6902) [#6903](https://github.com/MonoGame/MonoGame/pull/6903) [#7050](https://github.com/MonoGame/MonoGame/pull/7050) - Reduced garbage in Direct X-specific SetRenderTargets methods. [#7034](https://github.com/MonoGame/MonoGame/pull/7034) - MouseState Improvements. [#6973](https://github.com/MonoGame/MonoGame/pull/6973) - KeyboardState Improvements. [#6972](https://github.com/MonoGame/MonoGame/pull/6972) - [SDL] Updated controller DB. [#7124](https://github.com/MonoGame/MonoGame/pull/7124) - We now pool ContentManager scratch buffers. [#5921](https://github.com/MonoGame/MonoGame/pull/5921) - [OpenAL] Clean up sound disposal. [#7097](https://github.com/MonoGame/MonoGame/pull/7097) - [macOS] Replaced System.Drawing with StbImageSharp to enable tests. [#7071](https://github.com/MonoGame/MonoGame/pull/7071) - [Docs] Moved to DocFX v2 for documentation. [#7127](https://github.com/MonoGame/MonoGame/pull/7127) - [SDL] Bump dependencies to SDL 2.0.12. [#7133](https://github.com/MonoGame/MonoGame/pull/7133) - [Docs] Update for 3.8. [#7117](https://github.com/MonoGame/MonoGame/pull/7117) [#7240](https://github.com/MonoGame/MonoGame/pull/7240) - [MGCB Editor] Changed position for context menu item Rebuild. [#7176](https://github.com/MonoGame/MonoGame/pull/7176) - [MGCB] Replace symbols for assembly references. [#7272](https://github.com/MonoGame/MonoGame/pull/7272) ### Fixed - Support arrays > 255 elements in shaders. [#5995](https://github.com/MonoGame/MonoGame/pull/5995) - [DesktopGL] Fix setting mouse cursor from Texture2D. [#6187](https://github.com/MonoGame/MonoGame/pull/6187) - Remove trailing NUL chars in registry font name. [#6577](https://github.com/MonoGame/MonoGame/pull/6577) - [OpenAL] Fix loading OpenAL-Soft in DesktopGL when # is in path. [#6581](https://github.com/MonoGame/MonoGame/pull/6581) - [WindowsDX] Avoid freezing while moving/resizing window. [#6594](https://github.com/MonoGame/MonoGame/pull/6594) - [iOS] Fixed background music stopping on game startup. [#6596](https://github.com/MonoGame/MonoGame/pull/6596) - Fixed GameUpdateRequiredException namespace. [#6597](https://github.com/MonoGame/MonoGame/pull/6597) - [MGCB] Fixed build not cleaning empty projects. [#6615](https://github.com/MonoGame/MonoGame/pull/6615) - Reduce garbage from TextInput. [#6664](https://github.com/MonoGame/MonoGame/pull/6664) - Fix for loading native libraries on Amazon Fire HD 8. [#6677](https://github.com/MonoGame/MonoGame/pull/6677) - Fixes reflection support on SpriteBatch ctor. [#6709](https://github.com/MonoGame/MonoGame/pull/6709) - [Android] Fixed crashes on launch and resume. [#6741](https://github.com/MonoGame/MonoGame/pull/6741) - [Android] Fixed restoration of an activity after Game.Exit. [#6739](https://github.com/MonoGame/MonoGame/pull/6739) - [SDL] Fix rumble infinity threshold. [#6744](https://github.com/MonoGame/MonoGame/pull/6744) - [SDL] Fixed OnTextInput. [#6749](https://github.com/MonoGame/MonoGame/pull/6749) - Move touches are now aged too. (fixes #6753). [#6756](https://github.com/MonoGame/MonoGame/pull/6756) - [Android] Fixed Texture2D.GetData corrupting the Texture2D object. [#6729](https://github.com/MonoGame/MonoGame/pull/6729) - [MGCB Editor] Fix assembly load API used for custom user references. [#6770](https://github.com/MonoGame/MonoGame/pull/6770) - Fix nuget metadata URL properties. [#6774](https://github.com/MonoGame/MonoGame/pull/6774) - Fix IRenderTarget comments. [#6785](https://github.com/MonoGame/MonoGame/pull/6785) - Catch ArgumentException when trying to get encoding upon PipelineController.DoBuild. [#6826](https://github.com/MonoGame/MonoGame/pull/6826) - [OpenAL] Free source when sound instance is disposed. [#6813](https://github.com/MonoGame/MonoGame/pull/6813) - Use Resume when Play is called on Paused sound effect instance. [#6815](https://github.com/MonoGame/MonoGame/pull/6815) - Fixed BoundingSphere.Intersects(BoundingBox). [#6666](https://github.com/MonoGame/MonoGame/pull/6666) - Override Dispose in DrawableGameComponent to unload content. [#6858](https://github.com/MonoGame/MonoGame/pull/6858) - Fixed SwapChain is null in GraphicsDevice.PlatformDispose. [#6869](https://github.com/MonoGame/MonoGame/pull/6869) - Swap red and blue when setting mouse cursor texture. [#6859](https://github.com/MonoGame/MonoGame/pull/6859) - [DesktopGL] Fix IsActive not getting set to false. [#6895](https://github.com/MonoGame/MonoGame/pull/6895) - Fix FileHelpers Uri getting confused by double slashes. [#6924](https://github.com/MonoGame/MonoGame/pull/6924) - [UWP] Vibrate controller handles instead of triggers. [#6933](https://github.com/MonoGame/MonoGame/pull/6933) - Fix for CoreRT support. [#6948](https://github.com/MonoGame/MonoGame/pull/6948) - Fix a crash on macOS and CoreRT related to mishandling unmanaged function pointers. [#6949](https://github.com/MonoGame/MonoGame/pull/6949) - [MGCB] Rethrow InvalidContentException for Importers instead of wrapping it in a new PipelineException. [#6954](https://github.com/MonoGame/MonoGame/pull/6954) - Throw InvalidContentException with error line number/position in ContentIdentity. [#6953](https://github.com/MonoGame/MonoGame/pull/6953) - Fall back to less precise frame pacing on non-Windows platforms. [#6941](https://github.com/MonoGame/MonoGame/pull/6941) - [UWP] Fixes content loading to work with packaged files (and not just resources). [#6964](https://github.com/MonoGame/MonoGame/pull/6964) - [UWP] Fixes window resizing upon GraphicsDeviceManager.ApplyChanges(). [#6964](https://github.com/MonoGame/MonoGame/pull/6964) - [Android] fix GamePad.Back emulation. [#6951](https://github.com/MonoGame/MonoGame/pull/6951) - [Android] Fixes android APIs fallback. [#6952](https://github.com/MonoGame/MonoGame/pull/6952) - Fixed sample count in SoundEffect. [#6996](https://github.com/MonoGame/MonoGame/pull/6996) - [SDL] Fixed memory leak in controller mapping by freeing the returned string. [#7021](https://github.com/MonoGame/MonoGame/pull/7021) - [macOS] Look for native libraries in Frameworks folder for .app bundles. [#7022](https://github.com/MonoGame/MonoGame/pull/7022) - [OpenGL] Fixed PlatformClear and PlatformPresent to be private in GraphicsDevice. [#7026](https://github.com/MonoGame/MonoGame/pull/7026) - [DesktopGL] Fixed GraphicsAdapter.Description to return renderer. [#6959](https://github.com/MonoGame/MonoGame/pull/6959) - [OpenGL] Query correct value for the bounds to GL.ActiveTexture. [#6970](https://github.com/MonoGame/MonoGame/pull/6970) - Fix Content.mgcb not being visible in VS 2019. [#7064](https://github.com/MonoGame/MonoGame/pull/7064) - [iOS] Fix initialization crash on GLES 2.0 devices. [#7047](https://github.com/MonoGame/MonoGame/pull/7047) - [iOS] Fix GL error and race condition. [#7073](https://github.com/MonoGame/MonoGame/pull/7073) - [MGCB Editor] Mac fixes. [#7077](https://github.com/MonoGame/MonoGame/pull/7077) - [OpenAL] Fixing audio duplicating sourceids. [#7095](https://github.com/MonoGame/MonoGame/pull/7095) - [MGCB] Fix FindCommand not looking system locations on macOS/Linux. [#7100](https://github.com/MonoGame/MonoGame/pull/7100) - Fix FuncLoader not properly checking the current folder (fixes #7101). [#7102](https://github.com/MonoGame/MonoGame/pull/7102) - Fix .NET Standard template using wrong nuget. [#7099](https://github.com/MonoGame/MonoGame/pull/7099) - [DirectX] Fixed MSAA RenderTarget GetData and SetData. [#5838](https://github.com/MonoGame/MonoGame/pull/5838) - Fixed deconstruction of color for bytes and floats. [#7109](https://github.com/MonoGame/MonoGame/pull/7109) - [MGCB] Fix failing to find ffmpeg because it tries relative path. [#7138](https://github.com/MonoGame/MonoGame/pull/7138) - [MGFXC] Various fixes. [#7148](https://github.com/MonoGame/MonoGame/pull/7148) - Fixed a bug where The "New Item" dialogue would have no templates listed. [#7141](https://github.com/MonoGame/MonoGame/pull/7141) - [MGCB Editor] Darken text in output. [#7163](https://github.com/MonoGame/MonoGame/pull/7163) - [MGCB] Fix trying to chmod root files. [#7183](https://github.com/MonoGame/MonoGame/pull/7183) - [MGCB Editor] Fixed to not require root privileges for installing. [#7185](https://github.com/MonoGame/MonoGame/pull/7185) - [SDL] Better debugging for macOS. [#7187](https://github.com/MonoGame/MonoGame/pull/7187) - Fixed content failing to load on NetCore. [#7199](https://github.com/MonoGame/MonoGame/pull/7199) - [MGCB Editor] Fix parsing filename from arguments on macOS. [#7215](https://github.com/MonoGame/MonoGame/pull/7215) - [Linux] Flatpak packaging upgrades. [#7224](https://github.com/MonoGame/MonoGame/pull/7224) - Fix path in RebuildMGFX.bat. [#7239](https://github.com/MonoGame/MonoGame/pull/7239) - [DirectX] Fix issues with RenderTexture2D and SwapChainRenderTarget. [#7225](https://github.com/MonoGame/MonoGame/pull/7225) - [macOS] VSMac addin fixes. [#7253](https://github.com/MonoGame/MonoGame/pull/7253) - [MGCB Editor] PropertyGrid fixes. [#7256](https://github.com/MonoGame/MonoGame/pull/7256) - [MGCB Editor] General fixes. [#7262](https://github.com/MonoGame/MonoGame/pull/7262) - Fix a race condition when playing sound in worker threads. [#7219](https://github.com/MonoGame/MonoGame/pull/7219) - [Android] Fixed surface recreation when resuming from sleep mode on FireTV. [#7211](https://github.com/MonoGame/MonoGame/pull/7211) - Fix loading of content with special characters in a file name. [#7267](https://github.com/MonoGame/MonoGame/pull/7267) ## 3.7.1 Release - December 8, 2018 - MGCB now generates content building statistics. [#6401](https://github.com/MonoGame/MonoGame/pull/6401) - Fixes to dependency loading in Pipeline Tool. [#6450](https://github.com/MonoGame/MonoGame/pull/6450) - Fixed crash when canceling choose folder dialog in Pipeline Tool. [#6449](https://github.com/MonoGame/MonoGame/pull/6449) - Fix add item dialog jumping around in Pipeline Tool. [#6451](https://github.com/MonoGame/MonoGame/pull/6451) - Fix OpenAL library loading on some Android phones. [#6454](https://github.com/MonoGame/MonoGame/pull/6454) - Fix Gamepad index tracking under UWP. [#6456](https://github.com/MonoGame/MonoGame/pull/6456) - Rename "Copy Asset Path" to "Copy Asset Name" for consistency with XNA in Pipeline Tool. [#6457](https://github.com/MonoGame/MonoGame/pull/6457) - Fix TextInput Keys argument for UWP. [#6455](https://github.com/MonoGame/MonoGame/pull/6455) - Add new GamePad.GetState() overloads to support different dead zone modes. [#6467](https://github.com/MonoGame/MonoGame/pull/6467) - Fixed incorrect offset DynamicSoundEffectInstance.SubmitBuffer under XAudio. [#6523](https://github.com/MonoGame/MonoGame/pull/6523) - Improved accuracy of fixed time step. [#6535](https://github.com/MonoGame/MonoGame/pull/6535) - Ensure intermediate output path exists before writing stats in Pipeline Tool. [#6503](https://github.com/MonoGame/MonoGame/pull/6503) - Fix for special window close case under SDL. [#6489](https://github.com/MonoGame/MonoGame/pull/6489) - Marshal microphone identifiers as UTF-8. [#6530](https://github.com/MonoGame/MonoGame/pull/6530) - Clear the current selections when excluding items in the Pipeline Tool. [#6549](https://github.com/MonoGame/MonoGame/pull/6549) - Enable standard derivatives extension for GLSL shaders. [#6501](https://github.com/MonoGame/MonoGame/pull/6501) - Fixed framebuffer object EXT loading under OpenGL. [#6562](https://github.com/MonoGame/MonoGame/pull/6562) - Fixed GL.RenderbufferStorage for devices that use the EXT entry points. [#6563](https://github.com/MonoGame/MonoGame/pull/6563) - Fix VS template installation when C# folder is missing. [#6544](https://github.com/MonoGame/MonoGame/pull/6544) - Fix for SDL loading when a '#' is in the directory path. [#6573](https://github.com/MonoGame/MonoGame/pull/6573) - Restored Buttons[] constructor in GamePadState fixing XNA compatibility. [#6572](https://github.com/MonoGame/MonoGame/pull/6572) ## 3.7 Release - September 23, 2018 - Remove Scale and Rotation properties from Matrix. [#5584](https://github.com/MonoGame/MonoGame/pull/5584) - Added Switch as a platform. [#5596](https://github.com/MonoGame/MonoGame/pull/5596) - DirectX: Fixed multisample clamping logic. [#5477](https://github.com/MonoGame/MonoGame/pull/5477) - SDL Gamepad DB update. [#5605](https://github.com/MonoGame/MonoGame/pull/5605) - Add Missing method OpaqueDataDictionary.GetValue. [#5637](https://github.com/MonoGame/MonoGame/pull/5637) - Increase code coverage in Model* family. [#5632](https://github.com/MonoGame/MonoGame/pull/5632) - Fix scroll wheel events on Windows Universal. [#5631](https://github.com/MonoGame/MonoGame/pull/5631) - Implement GetHashCode on Vertex types. [#5654](https://github.com/MonoGame/MonoGame/pull/5654) - Implement GetHashCode and ToString methods for Joystick. [#5670](https://github.com/MonoGame/MonoGame/pull/5670) - Fixed Gamepad DPad on Android. [#5673](https://github.com/MonoGame/MonoGame/pull/5673) - Pipeline process not terminating on exit fix. [#5672](https://github.com/MonoGame/MonoGame/pull/5672) - Added Joystick.IsSupported property. [#5678](https://github.com/MonoGame/MonoGame/pull/5678) - Use GraphicsCapabilities.MaxTextureAnisotropy on SamplerState. [#5676](https://github.com/MonoGame/MonoGame/pull/5676) - Make SpriteBatch.End throw when Begin not called. [#5689](https://github.com/MonoGame/MonoGame/pull/5689) - Add Open Output Directory option to Pipeline Tool. [#5690](https://github.com/MonoGame/MonoGame/pull/5690) - Rename Exit to Quit on Pipeline Tool Linux Headerbar. [#5687](https://github.com/MonoGame/MonoGame/pull/5687) - Added minimum size to the Pipeline Tool window. [#5692](https://github.com/MonoGame/MonoGame/pull/5692) - Added Id and DisplayName properties to Gamepad. [#5625](https://github.com/MonoGame/MonoGame/pull/5625) - Improved GameController database loading for DesktopGL. [#5606](https://github.com/MonoGame/MonoGame/pull/5606) - RPC curves are now updated before Cue is played. [#5709](https://github.com/MonoGame/MonoGame/pull/5709) - Fixes to Texture2D.FromStream on Windows DirectX. [#5712](https://github.com/MonoGame/MonoGame/pull/5712) - Support DistanceScale and DopplerFactor under OpenAL. [#5718](https://github.com/MonoGame/MonoGame/pull/5718) - Implemented Microphone for OpenAL platforms. [#5651](https://github.com/MonoGame/MonoGame/pull/5651) - Implemented caching of staging resources used to copy data from a Texture2D under DirectX. [#5704](https://github.com/MonoGame/MonoGame/pull/5704) - Reusable function for raising events. [#5713](https://github.com/MonoGame/MonoGame/pull/5713) - Remove reference to SharpDX from project templates. [#5611](https://github.com/MonoGame/MonoGame/pull/5611) - Improvements to VideoPlayer for Desktop DirectX. [#5737](https://github.com/MonoGame/MonoGame/pull/5737) - Use SharpDX NuGet packages from our NuGet packages. [#5748](https://github.com/MonoGame/MonoGame/pull/5748) - Fixed leaks that affected shutting down and recreating GraphicsDevice under DirectX. [#5728](https://github.com/MonoGame/MonoGame/pull/5728) - Texture2D mipmap generation and population fixes. [#5614](https://github.com/MonoGame/MonoGame/pull/5614) - Remove SharpDX.RawInput.dll reference from DirectX graphics backend. [#5723](https://github.com/MonoGame/MonoGame/pull/5723) - New fast Texture2D.FromStream implementation for DesktopGL ported from STB. [#5630](https://github.com/MonoGame/MonoGame/pull/5630) - Added support DrawInstancedPrimitives on OpenGL platforms. [#4920](https://github.com/MonoGame/MonoGame/pull/4920) - Fixed mouse touch event to release when mouse moves outside the client area or we loses focus. [#5641](https://github.com/MonoGame/MonoGame/pull/5641) - Added GraphicsAdapter.UseDebugLayers to enable GPU debug features in release builds. [#5791](https://github.com/MonoGame/MonoGame/pull/5791) - Fixed DirectX back buffer update when multisampling changes. [#5617](https://github.com/MonoGame/MonoGame/pull/5617) - Adds Xbox One S controller support to Linux. [#5797](https://github.com/MonoGame/MonoGame/pull/5797) - Do not allow the Pipeline tool to delete files outside the content folder. [#5820](https://github.com/MonoGame/MonoGame/pull/5820) - OpenGL Mouse.SetCursor now works with alpha correctly. [#5829](https://github.com/MonoGame/MonoGame/pull/5829) - Implement Mouse.SetCursor() for Windows. [#5831](https://github.com/MonoGame/MonoGame/pull/5831) - Fix pre-emptive song finish in OggStreamer. [#5821](https://github.com/MonoGame/MonoGame/pull/5821) - UWP Templates use target version selected in wizard. [#5819](https://github.com/MonoGame/MonoGame/pull/5819) - Implement Mouse.WindowHandle under Windows DirectX. [#5816](https://github.com/MonoGame/MonoGame/pull/5816) - Improve shader error/warning parsing in Pipeline Tool. [#5849](https://github.com/MonoGame/MonoGame/pull/5849) - Fix crash on multi-editing bool values in Pipeline Tool. [#5859](https://github.com/MonoGame/MonoGame/pull/5859) - Fixes to XACT sound effect pooling. [#5832](https://github.com/MonoGame/MonoGame/pull/5832) - Improved disposal of OpenGL resources. [#5850](https://github.com/MonoGame/MonoGame/pull/5850) - Better support for WAV audio formats in content pipeline and FromStream. [#5750](https://github.com/MonoGame/MonoGame/pull/5750) - Fix for build hang with no mgcb file in project. [#5886](https://github.com/MonoGame/MonoGame/pull/5886) - Removed deprecated Rider settings from Linux installer. [#5881](https://github.com/MonoGame/MonoGame/pull/5881) - Improved performance of SpriteFont.MeasureString() & SpriteBatch.DrawString(). [#5874](https://github.com/MonoGame/MonoGame/pull/5874) - Sort content when saving MGCB files. [#5930](https://github.com/MonoGame/MonoGame/pull/5930) - Fix a crash when building content in xbuild. [#5897](https://github.com/MonoGame/MonoGame/pull/5897) - Fixed back button problems in UWP. [#5810](https://github.com/MonoGame/MonoGame/pull/5810) - Removed Windows 8.1 and Windows Phone 8.1 support. [#5809](https://github.com/MonoGame/MonoGame/pull/5809) - Upgrade to SharpDX 4.0.1. [#5949](https://github.com/MonoGame/MonoGame/pull/5949) - Update the UWP Template to use the Latest SDK. [#5931](https://github.com/MonoGame/MonoGame/pull/5931) - Fixed the Scissor rect calculation on DesktopGL and OpenGL platforms. [#5977](https://github.com/MonoGame/MonoGame/pull/5977) - Calculate the Client Bounds a bit later. [#5975](https://github.com/MonoGame/MonoGame/pull/5975) - Rework Android OpenGL Framebuffer Support. [#5993](https://github.com/MonoGame/MonoGame/pull/5993) - Implemented GraphicsDevice.GetBackBufferData. [#5114](https://github.com/MonoGame/MonoGame/pull/5114) - Optimizations to Length and Normalize in Vector3 and Vector4. [#6004](https://github.com/MonoGame/MonoGame/pull/6004) - Added MGCB man page for Linux. [#5987](https://github.com/MonoGame/MonoGame/pull/5987) - Included mgcb autocomplete for bash. [#5985](https://github.com/MonoGame/MonoGame/pull/5985) - Fixed GamePad.SetVibration crash. [#5965](https://github.com/MonoGame/MonoGame/pull/5965) - Fallback SurfaceFormat for RenderTargets. [#6170](https://github.com/MonoGame/MonoGame/pull/6170) - Added O(1) EffectParameter lookups by name. [#6146](https://github.com/MonoGame/MonoGame/pull/6146) - Reduce MouseState garbage in Desktop DirectX. [#6168](https://github.com/MonoGame/MonoGame/pull/6168) - Made SpriteFont constructor public. [#6126](https://github.com/MonoGame/MonoGame/pull/6126) - New Template System using Nuget. [#6135](https://github.com/MonoGame/MonoGame/pull/6135) - Use StbSharp for all Texture2D.FromStream. [#6008](https://github.com/MonoGame/MonoGame/pull/6008) - Dynamic reference loading in Pipeline Tool. [#6202](https://github.com/MonoGame/MonoGame/pull/6202) - Fix Pipeline tool to work regardless of Mono changes. [#6197](https://github.com/MonoGame/MonoGame/pull/6197) - Update Template Icons and Fix Mac Info.plist. [#6209](https://github.com/MonoGame/MonoGame/pull/6209) - Fix typo in VS2013 Shared Project Template. [#6216](https://github.com/MonoGame/MonoGame/pull/6216) - Fill up dotnet template info. [#6226](https://github.com/MonoGame/MonoGame/pull/6226) - Support Mac Unit Tests. [#5952](https://github.com/MonoGame/MonoGame/pull/5952) - Updated Assimp to latest version. [#6222](https://github.com/MonoGame/MonoGame/pull/6222) - Make sure that the window titlebar is within screen bounds on DesktopGL. [#6258](https://github.com/MonoGame/MonoGame/pull/6258) - Fixed trigger/dpad button state and reduced garbage in iOS Gamepad. [#6271](https://github.com/MonoGame/MonoGame/pull/6271) - Updated Windows Universal Min SDK Versions. [#6257](https://github.com/MonoGame/MonoGame/pull/6257) - Fix property content serialization detection when using a property named `Item`. [#5996](https://github.com/MonoGame/MonoGame/pull/5996) - Fix launcher default mimetype in Linux installer. [#6275](https://github.com/MonoGame/MonoGame/pull/6275) - Restore NVTT. [#6239](https://github.com/MonoGame/MonoGame/pull/6239) - Support unicode in window title under DesktopGL. [#6335](https://github.com/MonoGame/MonoGame/pull/6335) - Add crash report window to Pipeline Tool. [#6272](https://github.com/MonoGame/MonoGame/pull/6272) - Fix linking for copy action in Pipeline Tool. [#6398](https://github.com/MonoGame/MonoGame/pull/6398) - Implemented KeyboardInput and MessageBox for Windows DX. [#6410](https://github.com/MonoGame/MonoGame/pull/6410) - Fixed audio interruption bug on iOS. [#6433](https://github.com/MonoGame/MonoGame/pull/6433) ## 3.6 Release - February 28, 2017 - Fixed XML deserialization of Curve type. [#5494](https://github.com/MonoGame/MonoGame/pull/5494) - Fix #5498 Pipeline Tool template loading on MacOS. [#5501](https://github.com/MonoGame/MonoGame/pull/5501) - Fix typo in the exclude.addins which cause warnings when installing the Addin in XS. [#5500](https://github.com/MonoGame/MonoGame/pull/5500) - Added support for arbitrary defines passed to the Effect compiler. [#5496](https://github.com/MonoGame/MonoGame/pull/5496) - Fixed GraphicsDevice.Present() to check for current render target. [#5389](https://github.com/MonoGame/MonoGame/pull/5389) - Custom texture compression for SpriteFonts. [#5299](https://github.com/MonoGame/MonoGame/pull/5299) - Performance improvements to SpriteBatch.DrawString(). [#5226](https://github.com/MonoGame/MonoGame/pull/5226) - Removed the OUYA platform [#5194](https://github.com/MonoGame/MonoGame/pull/5194) - Dispose of all graphical resources in unit tests. [#5133](https://github.com/MonoGame/MonoGame/pull/5133) - Throw NoSuitableGraphicsDeviceException if graphics device creation fails. [#5130](https://github.com/MonoGame/MonoGame/pull/5130) - Optimized and added additional constructors to Color. [#5117](https://github.com/MonoGame/MonoGame/pull/5117) - Added SamplerState.TextureFilterMode to correctly support comparison filtering. [#5112](https://github.com/MonoGame/MonoGame/pull/5112) - Fixed Apply3D() on stereo SoundEffect. [#5099](https://github.com/MonoGame/MonoGame/pull/5099) - Fixed Effect.OnApply to return void to match XNA. [#5090](https://github.com/MonoGame/MonoGame/pull/5090) - Fix crash when DynamicSoundEffectInstance not disposed. [#5075](https://github.com/MonoGame/MonoGame/pull/5075) - Texture2D.FromStream now correctly throws on null arguments. [#5050](https://github.com/MonoGame/MonoGame/pull/5050) - Implemented GraphicsAdapter for DirectX platforms. [#5024](https://github.com/MonoGame/MonoGame/pull/5024) - Fixed initialization of GameComponent when created within another GameComponent. [#5020](https://github.com/MonoGame/MonoGame/pull/5020) - Improved SoundEffect internal platform extendability. [#5006](https://github.com/MonoGame/MonoGame/pull/5006) - Refactored audio processing for platform extensibility. [#5001](https://github.com/MonoGame/MonoGame/pull/5001) - Refactored texture processing for platform extensibility. [#4996](https://github.com/MonoGame/MonoGame/pull/4996) - Refactor ShaderProfile to allow for pipeline extensibility. [#4992](https://github.com/MonoGame/MonoGame/pull/4992) - Removed unnessasary dictionary lookup for user index buffers for DirectX platforms. [#4988](https://github.com/MonoGame/MonoGame/pull/4988) - New SetRenderTargets() method which allows for variable target count. [#4987](https://github.com/MonoGame/MonoGame/pull/4987) - Added support for XACT reverb and filter effects. [#4974](https://github.com/MonoGame/MonoGame/pull/4974) - Remove array in GamePadDPad constructor. [#4970](https://github.com/MonoGame/MonoGame/pull/4970) - Updated to the latest version of Protobuild. [#4964](https://github.com/MonoGame/MonoGame/pull/4964) - Fixed static VBs and IBs on UWP on XB1. [#4955](https://github.com/MonoGame/MonoGame/pull/4955) - Updated to the latest version of Protobuild. [#4950](https://github.com/MonoGame/MonoGame/pull/4950) - Update Xamarin Studio addin for latest platform changes. [#4926](https://github.com/MonoGame/MonoGame/pull/4926) - Replace OpenTK with custom OpenGL bindings [#4874](https://github.com/MonoGame/MonoGame/pull/4874) - Fix Mouse updating when moving the Window. [#4924](https://github.com/MonoGame/MonoGame/pull/4924) - Fix incorrect use of startIndex in Texture2D.GetData DX. [#4833](https://github.com/MonoGame/MonoGame/pull/4833) - Cleanup of AssemblyInfo for framework assembly. [#4810](https://github.com/MonoGame/MonoGame/pull/4810) - New SDL2 backend for desktop GL platforms. [#4428](https://github.com/MonoGame/MonoGame/pull/4428) - Two MaterialProcessor properties fixed. [#4746](https://github.com/MonoGame/MonoGame/pull/4746) - Fixed thumbstick virtual buttons to always use independent axes. [#4742](https://github.com/MonoGame/MonoGame/pull/4742) - Fixed back buffer MSAA on DirectX platforms. [#4739](https://github.com/MonoGame/MonoGame/pull/4739) - Added new CHANGELOG.md to project. [#4732](https://github.com/MonoGame/MonoGame/pull/4732) - Added obsolete attribute and updated documentation. [#4731](https://github.com/MonoGame/MonoGame/pull/4731) - Fixed layout of UWP windows in VS template to ignore window chrome. [#4727](https://github.com/MonoGame/MonoGame/pull/4727) - Remove support for reading raw assets through ContentManager. [#4726](https://github.com/MonoGame/MonoGame/pull/4726) - Implemented DynamicSoundEffectInstance for DirectX and OpenAL platforms. [#4715](https://github.com/MonoGame/MonoGame/pull/4715) - Removed unused Yeti Mp3 compressor. [#4713](https://github.com/MonoGame/MonoGame/pull/4713) - MonoGame Portable Assemblies. [#4712](https://github.com/MonoGame/MonoGame/pull/4712) - Fixed RGBA64 packing and added unit tests. [#4683](https://github.com/MonoGame/MonoGame/pull/4683) - Fix Gamepad crash when platform doesn't support the amount. [#4677](https://github.com/MonoGame/MonoGame/pull/4677) - Fixed Song stopping before they are finished on Windows. [#4668](https://github.com/MonoGame/MonoGame/pull/4668) - Removed the Linux .deb installer. [#4665](https://github.com/MonoGame/MonoGame/pull/4665) - OpenAssetImporter is now automatically selected for all the formats it supports. [#4663](https://github.com/MonoGame/MonoGame/pull/4663) - Fixed broken unit tests under Linux. [#4614](https://github.com/MonoGame/MonoGame/pull/4614) - Split out Title Container into partial classes. [#4590](https://github.com/MonoGame/MonoGame/pull/4590) - Added Rider Support to Linux installer. [#4589](https://github.com/MonoGame/MonoGame/pull/4589) - Implement vertexStride in VertexBuffer.SetData for OpenGL. [#4568](https://github.com/MonoGame/MonoGame/pull/4568) - Performance improvement to SpriteBatch vertex generation. [#4547](https://github.com/MonoGame/MonoGame/pull/4547) - Optimization of indices initialization in SpriteBatcher. [#4546](https://github.com/MonoGame/MonoGame/pull/4546) - Optimized ContentReader to decode LZ4 compressed streams directly. [#4522](https://github.com/MonoGame/MonoGame/pull/4522) - TitleContainer partial class cleanup. [#4520](https://github.com/MonoGame/MonoGame/pull/4520) - Remove raw asset support from ContentManager. [#4489](https://github.com/MonoGame/MonoGame/pull/4489) - Initial implementation of RenderTargetCube for OpenGL. [#4488](https://github.com/MonoGame/MonoGame/pull/4488) - Removed unnecessary platform differences in MGFX. [#4486](https://github.com/MonoGame/MonoGame/pull/4486) - SoundEffect fixes and tests. [#4469](https://github.com/MonoGame/MonoGame/pull/4469) - Cleanup FX syntax for shader compiler. [#4462](https://github.com/MonoGame/MonoGame/pull/4462) - General Improvements to Pipeline Gtk implementation. [#4459](https://github.com/MonoGame/MonoGame/pull/4459) - ShaderProfile Refactor. [#4438](https://github.com/MonoGame/MonoGame/pull/4438) - GraphicsDeviceManager partial class refactor. [#4425](https://github.com/MonoGame/MonoGame/pull/4425) - Remove legacy Storage classes. [#4320](https://github.com/MonoGame/MonoGame/pull/4320) - Added mipmap generation for DirectX render targets. [#4189](https://github.com/MonoGame/MonoGame/pull/4189) ## 3.5.1 Release - March 30, 2016 - Fixed negative values when pressing up on left thumbstick on Mac. - Removed exception and just return empty state when requesting an invalid GamePad index. - Fixed texture processing for 64bpp textures. - Fixed Texture2D.SaveAsPng on Mac. ## 3.5 Release - March 17, 2016 - Content Pipeline Integration for Xamarin Studio and MonoDevleop on Mac and Linux. - Automatic inclusion of XNBs into your final project on Mac and Linux. - Improved Mac and Linux installers. - Assemblies are now installed locally on Mac and Linux just like they are on Windows. - New cross-platform "Desktop" project where same binary and content will work on Windows, Linux and Mac desktops. - Better Support for Xamarin.Mac and Xam.Mac. - Apple TV support (requires to be built from source at the moment). - Various sound system fixes. - New GraphicsMetrics API. - Optimizations to SpriteBatch performance and garbage generation. - Many improvements to the Pipeline tool: added toolbar, new filtered output view, new templates, drag and drop, and more. - New GamePad support for UWP. - Mac and Linux now support Vorbis compressed music. - Major refactor of texture support in content pipeline. - Added 151 new unit tests. - Big improvements to FBX and model content processing. - Various fixes to XML serialization. - MediaLibrary implementation for Windows platforms. - Removed PlayStation Mobile platform. - Added content pipeline extension template project. - Support for binding multiple vertex buffers in a draw call. - Fixed deadzone issues in GamePad support. - OcclusionQuery support for DX platforms. - Fixed incorrect z depth in SpriteBatch. - Lots of OpenTK backend fixes. - Much improved font processing. - Added new VertexPosition vertex format. - Better VS project template installation under Windows. ## 3.4 Release - April 29, 2015 - Removed old XNA content pipeline extensions. - Added all missing PackedVector types. - Replacement of old SDL joystick path with OpenTK. - Added SamplerState.ComparisonFunction feature to DX and OGL platforms. - Fixed bug where content importers would not be autodetected on upper case file extensions. - Fixed compatibility with XNA sound effect XNBs. - Lots of reference doc improvements. - Added SamplerState.BorderColor feature to DX and OGL platforms. - Lots of improvements to the Mac, Linux and Windows versions of the Pipeline GUI tool. - Fixes for bad key mapping on Linux. - Support for texture arrays on DX platforms. - Fixed broken ModelMesh.Tag - VS templates will now only install if VS is detected on your system. - Added Color.MonoGameOrange. - Fixed Xact SoundBack loading bug on Android. - Added support for a bunch of missing render states to MGFX. - Added support for sRGB texture formats to DX and OGL platforms. - Added RasterizerState.DepthClipEnable support for DX and OGL platforms. - New support for the Windows 10 UAP plafform. - Fixed bug which caused the GamePad left thumbstick to not work correctly. - Preliminary base classed for future Joystick API. - Performance improvement on iOS by avoiding unnessasary GL context changes. - Fixed bug where MediaPlayer volume affected all sounds. - New XamarinStudio/MonoDevelop Addin for Mac. - New Mac installer packages. ## 3.3 Release - March 16, 2015 - Support for vertex texture fetch on Windows. - New modern classes for KeyboardInput and MessageBox. - Added more validation to draw calls and render states. - Cleaned up usage of statics to support multiple GraphicsDevice instances. - Support Window.Position on WindowsGL platform. - Reduction of redundant OpenGL calls. - Fullscreen support for Windows DX platform. - Implemented Texture2D SaveAsPng and SaveAsJpeg for Android. - Improved GamePad deadzone calculations. - We now use FFmpeg for audio content building. - BoundingSphere fixes and optimizations. - Many improvements to Linux platform. - Various fixes to FontTextureProcessor. - New Windows Universal App template for Windows Store and Windows Phone support. - Many fixes to reduce garbage generation during runtime. - Adding support for TextureFormatOptions to FontDescriptionProcessor. - XNA compatibility improvements to FontDescriptionProcessor. - Resuscitated the unit test framework with 100s of additional unit tests. - BoundingFrustum fixes and optimizations. - Added VS2013 project templates. - Moved to new MonoGame logo. - Added MSAA render target support for OpenGL platforms. - Added optional content compression support to content pipeline and runtime. - TextureCube content reader and GetData fixes. - New OpenAL software implementation for Android. - Xact compatibility improvements. - Lots of Android fixes and improvements. - Added MediaLibrary implementation for Android, iOS, Windows Phone, and Windows Store. - Added ReflectiveWriter implementation to content pipeline. - Fixes to Texture2D.GetData on DirectX platforms. - SpriteFont rendering performance optimizations. - Huge refactor of ModelProcessor to be more compatible with XNA. - Moved NET and GamerServices into its own MonoGame.Framework.Net assembly. - Runtime support for ETC1 textures for Androud. - Improved compatibility for FBXImporter and XImporter. - Multiple SpritBatch compatibility fixes. - We now use FreeImage in TextureImporter to support many more input formats. - MGFX parsing and render state improvements. - New Pipeline GUI tool for managing content projects for Windows, Mac, and Linux desktops. - New implementation of content pipeline IntermediateSerializer. - All tools and content pipeline built for 64-bit. - New documentation system. - Implement web platform (JSIL) stubs. - Lots of fixes to PSM. - Added Protobuild support for project generation. - Major refactor of internals to better separate platform specific code. - Added MGCB command line tool to Windows installer. ## 3.2 Release - April 7, 2014 - Implemented missing PackedVector types. - VS2013 support for MonoGame templates. - Big improvement to XInput performance on Windows/Windows8. - Added GameWindow.TextInput event enhancement. - Added Xamarin.Mac compatability. - Support for WPF interop under DirectX. - Enhancement to support multiple GameWindows on Windows under DirectX. - Various SpriteFont compatibility improvements. - OpenAL performance/memory/error handling improvements. - Reduction of Effect runtime memory usage. - Support for DXT/S3TC textures on Android. - Touch support on Windows desktop games. - Added new RenderTarget3D enhancement. - OUYA gamepad improvements. - Internal improvements to reduce garbage generation. - Various windowing fixes for OpenTK on Linux, Mac, and Windows. - Automatic support for content reloading on resume for Android. - Support for TextureCube, Texture3D, and RenderTargetCube on DirectX. - Added TitleContainer.SupportRetina enhancement for loading @2x content. - Lots of Android/Kindle compatibility fixes. - Added enhancement GameWindow.IsBorderless. - OpenGL now supports multiple render targets. - Game.IsRunningSlowly working accurately to XNA. - Game tick resolution improvements. - XACT compatibility improvements. - Various fixes and improvements to math types. - DrawUserIndexedPrimitives now works with 32bit indicies. - GamerServices fixes under iOS. - Various MonoGame FX improvements and fixes. - Render target fixes for Windows Phone. - MediaPlayer/MediaQueue/Song fixes on Windows Phone. - XNA accuracy fixes to TitleContainer. - Fixes to SpriteBatch performance and compatibility with XNA. - Threading fixes around SoundEffectInstance. - Support for Song.Duration. - Fixed disposal of OpenGL shader program cache. - Improved support of PoT textures in OpenGL. - Implemented missing EffectParameter SetValue/GetValue calls. - Touch fixes to Windows Phone. - Fixes to orientation support in iOS. - Lots of PSM fixes which make it usable for 2D games. - New Windows desktop platform using DirectX/XAudio. - Old Windows project renamed WindowsGL. - Fixed offsetInBytes parameter in IndexBuffer/VertexBuffer SetData. - Fixed subpixel offset when viewport is changed in OpenGL. - Tons of content pipeline improvements making it close to complete. ## 3.0.1 Release - March 3, 2013 - Fix template error. - Fix offsetInBytes parameter in IndexBuffer/VertexBuffer SetData. - Fixes the scale applied on the origin in SpriteBatch. - Fixed render targets on WP8. - Removed minVertexIndex Exception. - Fixed some threading issues on iOS. - Use generic link for opening store on iOS. - Fix Matrix::Transpose. - Fixed vertexOffset in DrawUserIndexedPrimitives in GL. - Keys.RightControl/RightShift Support for WinRT. - Dispose in ShaderProgramCache. - IsRunningSlowly Fix. ## 3.0 Release - January 1, 2013 - 3D (many thanks to Infinite Flight Studios for the code and Sickhead Games in taking the time to merge the code in). - New platforms: Windows 8, Windows Phone 8, OUYA, PlayStation Mobile (including Vita). - Custom Effects. - PVRTC support for iOS. - iOS supports compressed Songs. - Skinned Meshs. - VS2012 templates. - New Windows Installer. - New MonoDevelop Package/AddIn. - A LOT of bug fixes. - Closer XNA 4 compatibility. ## 2.5.1 Release - June 18, 2012 - Updated android to use enumerations rather than hardocded ids as part of the Mono for Android 4.2 update. - Changed the Android video player to make use of the ViewView. - Corrected namespaces for SongReader and SoundEffectReader. - Updated the Keyboard mapping for android. - Added RectangleArrayReader. - Removed links to the third party GamePadBridge. - Added some missing mouseState operators. - Replaced all calls to DateTime.Now with DateTime.UtcNow. - Fixed SpriteFont rendering (again). - Added code to correclty dispose of Textures on all platforms. - Added some fixes for the sound on iOS. - Adding missing MediaQueue class. - Fixed Rectangle Intersect code. - Changed the way UserPrimitives work on windows. - Made sure the @2x file support on iOS works. - Updated project templates. - Added project templates for MacOS. - Fixed MonoDevelop.MonoGame AddIn so it works on Linux. ## 2.5 Release - March 29, 2012 ### Fixes and Features - Minor fixes to the Networking stack to make it more reliable when looking for games. - SpriteBatch Fixes including making sure the matrix parameter is applied in both gles 1.1 and gles 2.0. - Updated IDrawable and IUpdatable interfaces to match XNA 4.0. - Fixed the Tick method. - Updated VideoPlayer constructor contract to match XNA 4.0. - Added Code to Lookup the Host Application Guid for Networking, the guid id is now pulled from the AssemblyInfo.cs if one is present. - Uses OpenAL on all platforms except Android. - Added Dxt5 decompression support. - Improves SpriteFont to conform more closely to XNA 4.0. - Moved DynamicVertexBuffer and DynamicIndexBuffer into its own files. ### iOS - Fixed Console.WriteLine problem. - Fixed loading of @2x Retina files. - Fixed Landscape Rendering. - Fixed Orientations changes correctly animate. - Fixed Guide.BeginShowKeyboardInput. - Fixed StorageDevice AOT compile problem. - Fixed SpriteBatch to respect matrices when drawn. - Fixed DoubleTap, improves touches in serial Game instances. - Fixed App startup in non-Portrait orientations. - Fixed UnauthorizedAccessException using TitleContainer. - Fixed a runtime JIT error that was occuring with List(). - Guide.ShowKeyboard is not working. - App Backgrounding has regressed. A patch is already being tested in the develop branch and the fix will be rolled out as part of the v2.5.1. ### Android - Project Templates for MonoDevelop. - Fixed a few issues with Gestures. - Fixed the name of the assembly to be MonoGame.Framework.Android. - Fixed a Memory Leak in Texture Loading. - Force linear filter and clamp wrap on npot textures in ES2.0 on Android. - Added SetData and GetData support for Texture2D. - Guide.SignIn picks up the first email account on the phone. - CatapultWars does not render correctly under gles 1.1. ### MacOS X - SoundEffectInstance.Stop now works correctly. ### Linux - Project Templates for Visual Studio and MonoDevelop. - Fixed a bug when loading of Wav files. ### Windows - Project Templates for Visual Studio and MonoDevelop. - Fixed a bug when loading of Wav files. - Added Game.IsMouseVisible implementation for Windows. - Guide.SignIn picks up the logged in user. - Added a new Installer to install the MonoDevelop and / or Visual Studio Templates and binaries. ## 2.1 Release - October 28, 2011 ### Features - Content Manager rewritten to use partial classes and implementation of cached assets that are loaded. Greatly improves memory footprint. - Experimental support for GamePads and Joysticks. Enhancements will be coming to integrate better for developers. - ContentReader improvements across the board. - Improved support for XACT audio. - StarterKits VectorRumble. ### iOS - Gesture support has been improved. - Better support for portrait to landscape rotations. - Fixed a rendering bug related to upsidedown portrait mode. - Better WaveBank support. - The Guide functionality is only available in iOS, for this release. ### Android - Updated to support Mono for Android 4.0. - Improvements to the Orientation Support. - Changed Sound system to use SoundPool. - Added Tap and DoubleTap Gesture Support. ### MacOS X - A lot of enhancements and fixes for Full Screen and Windowed control. - Cursor support fixed for IsMouseVisible. - Implementation of IsActive property and the events Activated and Deactivated. - First steps of DrawPrimitives, DrawUserPrimitives, DrawIndexedPrimitives. - Better WaveBank support. - Support for ApplyChanges() and setting the backbuffer and viewport sizes correctly. ### Linux - All new implementation which share quite a bit of code between MacOS X and Windows. - Added shader support via the Effects class. ### Windows - All new implementation which shares quite a bit of code between MacOS and Linux. ## 2.0 Release - October 28, 2011 - Project renamed MonoGame. - Project moved to GitHub. - Support for Linux, Mac, Linux, and OpenGL on Windows. ## 0.7 Release - December 2, 2009 - First stable release. - Originally named XnaTouch. - iPhone support only. - 2D rendering support. - Audio support. - Networking support. - Partial multitouch support. - Partial accelerometer support. ================================================ FILE: CODESTYLE.md ================================================ > #### NOTE: This code style standard for MonoGame is a work in progress and much of the code does not currently conform to these rules. This is something that will be addressed by the core team. # Introduction As the MonoGame project gains more traction and becomes more widely used, we aim to provide a more professional and consistent look to the large amount of source now in the project. It was a broadly supported decision by the core development team to follow the Microsoft coding guidelines (the default provided in Visual Studio's C# editor). These coding guidelines listed below are based on a [MSDN blog post](http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx) from 2005 by Brad Abrams describing the internal coding guidelines at Microsoft, with some changes to suit our project. # Coding Guidelines ## Tabs & Indenting Tab characters (\0x09) should not be used in code. All indentation should be done with 4 space characters. ## Bracing Open braces should always be at the beginning of the line after the statement that begins the block. Contents of the brace should be indented by 4 spaces. Single statements do not have braces. For example: ``` if (someExpression) { DoSomething(); DoAnotherThing(); } else DoSomethingElse(); ``` `case` statements should be indented from the switch statement like this: ``` switch (someExpression) { case 0: DoSomething(); break; case 1: DoSomethingElse(); break; case 2: { int n = 1; DoAnotherThing(n); } break; } ``` Braces are not used for single statement blocks immediately following a `for`, `foreach`, `if`, `do`, etc. The single statement block should always be on the following line and indented by four spaces. This increases code readability and maintainability. ``` for (int i = 0; i < 100; ++i) DoSomething(i); ``` ## Single line property statements Single line property statements can have braces that begin and end on the same line. This should only be used for simple property statements. Add a single space before and after the braces. ``` public class Foo { int bar; public int Bar { get { return bar; } set { bar = value; } } } ``` ## Commenting Comments should be used to describe intention, algorithmic overview, and/or logical flow. It would be ideal if, from reading the comments alone, someone other than the author could understand a function's intended behavior and general operation. While there are no minimum comment requirements (and certainly some very small routines need no commenting at all), it is best that most routines have comments reflecting the programmer's intent and approach. Comments must provide added value or explanation to the code. Simply describing the code is not helpful or useful. ``` // Wrong // Set count to 1 count = 1; // Right // Set the initial reference count so it isn't cleaned up next frame count = 1; ``` ### Copyright/License notice Each file should start with a copyright notice. This is a short statement declaring the project name and copyright notice, and directing the reader to the license document elsewhere in the project. To avoid errors in doc comment builds, avoid using triple-slash doc comments. ``` // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. ``` ### Documentation Comments All methods should use XML doc comments. For internal dev comments, the `` tag should be used. ``` public class Foo { /// Public stuff about the method /// What a neat parameter! /// Cool internal stuff! public void MyMethod(int bar) { ... } } ``` ### Comment Style The // (two slashes) style of comment tags should be used in most situations. Wherever possible, place comments above the code instead of beside it. Here are some examples: ``` // This is required for WebClient to work through the proxy GlobalProxySelection.Select = new WebProxy("http://itgproxy"); // Create object to access Internet resources WebClient myClient = new WebClient(); ``` ## Spacing Spaces improve readability by decreasing code density. Here are some guidelines for the use of space characters within code: Do use a single space after a comma between function arguments. ``` Console.In.Read(myChar, 0, 1); // Right Console.In.Read(myChar,0,1); // Wrong ``` Do not use a space after the parenthesis and function arguments. ``` CreateFoo(myChar, 0, 1) // Right CreateFoo( myChar, 0, 1 ) // Wrong ``` Do not use spaces between a function name and parentheses. ``` CreateFoo() // Right CreateFoo () // Wrong ``` Do not use spaces inside brackets. ``` x = dataArray[index]; // Right x = dataArray[ index ]; // Wrong ``` Do use a single space before flow control statements. ``` while (x == y) // Right while(x==y) // Wrong ``` Do use a single space before and after binary operators. ``` if (x == y) // Right if (x==y) // Wrong ``` Do not use a space between a unary operator and the operand. ``` ++i; // Right ++ i; // Wrong ``` Do not use a space before a semi-colon. Do use a space after a semi-colon if there is more on the same line. ``` for (int i = 0; i < 100; ++i) // Right for (int i=0 ; i<100 ; ++i) // Wrong ``` ## Naming Follow all .NET Framework Design Guidelines for both internal and external members. Highlights of these include: * Do not use Hungarian notation * Do use an underscore prefix for member variables, e.g. "_foo" * Do use camelCasing for member variables (first word all lowercase, subsequent words initial uppercase) * Do use camelCasing for parameters * Do use camelCasing for local variables * Do use PascalCasing for function, property, event, and class names (all words initial uppercase) * Do prefix interfaces names with "I" * Do not prefix enums, classes, or delegates with any letter The reasons to extend the public rules (no Hungarian, underscore prefix for member variables, etc.) is to produce a consistent source code appearance. In addition, the goal is to have clean, readable source. Code legibility should be a primary goal. ## File Organization * Source files should contain only one public type, although multiple internal types are permitted if required * Source files should be given the name of the public type in the file * Directory names should follow the namespace for the class after `Framework`. For example, one would expect to find the public class `Microsoft.Xna.Framework.Graphics.GraphicsDevice` in **MonoGame.Framework\Graphics\GraphicsDevice.cs** * Class members should be grouped logically, and encapsulated into regions (Fields, Constructors, Properties, Events, Methods, Private interface implementations, Nested types) * Using statements should be before the namespace declaration. ``` using System; namespace MyNamespace { public class MyClass : IFoo { #region Fields int foo; #endregion #region Properties public int Foo { get { ... } set { ... } } #endregion #region Constructors public MyClass() { ... } #endregion #region Events public event EventHandler FooChanged { add { ... } remove { ... } } #endregion #region Methods void DoSomething() { ... } void FindSomething() { ... } #endregion #region Private interface implementations void IFoo.DoSomething() { DoSomething(); } #endregion #region Nested types class NestedType { ... } #endregion } } ``` # Useful Links [C# Coding Conventions (MSDN)](http://msdn.microsoft.com/en-us/library/ff926074.aspx) ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to MonoGame We're happy that you have chosen to contribute to the MonoGame project. You are joining a group of hundreds of volunteers that have helped build MonoGame since 2009. To organize these efforts, the MonoGame Team has written this simple guide to help you. Please read this document completely before contributing. ## How To Contribute MonoGame has a `master` branch for stable releases and a `develop` branch for daily development. New features and fixes are always submitted to the `develop` branch. If you are looking for ways to help, you should start by looking at the [Help Wanted tasks](https://github.com/mono/MonoGame/issues?q=is%3Aissue+is%3Aopen+label%3A%22Help+Wanted%22). Please let us know if you plan to work on an issue so that others are not duplicating your work. The MonoGame project follows standard [GitHub flow](https://guides.github.com/introduction/flow/index.html). You should learn and be familiar with how to [use Git](https://help.github.com/articles/set-up-git/), how to [create a fork of MonoGame](https://help.github.com/articles/fork-a-repo/), and how to [submit a Pull Request](https://help.github.com/articles/using-pull-requests/). After you submit a PR, the [MonoGame build server](http://teamcity.monogame.net/?guest=1) will build your changes and verify that all tests pass. Project maintainers and contributors will review your changes and provide constructive feedback to improve your submission. Once we are satisfied that your changes are good for MonoGame, we will merge your PR. ## Quick Guidelines Here are a few simple rules and suggestions to remember when contributing to MonoGame. * :bangbang: **NEVER** commit code that you didn't personally write. * :bangbang: **NEVER** use decompiler tools to steal code and submit it as your own work. * :bangbang: **NEVER** decompile XNA assemblies and steal Microsoft's copyrighted code. * **PLEASE** try to keep your PRs focused on a single topic and of a reasonable size or we may ask you to break it up. * **PLEASE** be sure to write simple and descriptive commit messages. * **DO NOT** surprise us with new APIs or big new features. Open an issue to discuss your ideas first. * **DO NOT** reorder type members as it makes it difficult to compare code changes in a PR. * **DO** try to follow our [coding style](CODESTYLE.md) for new code. * **DO** give priority to the existing style of the file you're changing. * **DO** try to add to our [unit tests](Test) when adding new features or fixing bugs. * **DO NOT** send PRs for code style changes or make code changes just for the sake of style. * **PLEASE** keep a civil and respectful tone when discussing and reviewing contributions. * **PLEASE** tell others about MonoGame and your contributions via social media. ## Decompiler Tools We prohibit the use of tools like dotPeek, ILSpy, JustDecompiler, or .NET Reflector which convert compiled assemblies into readable code. There has been confusion on this point in the past, so we want to make this clear. It is **NEVER ACCEPTABLE** to decompile copyrighted assemblies and submit that code to the MonoGame project. * It **DOES NOT** matter how much you change the code. * It **DOES NOT** matter what country you live in or what your local laws say. * It **DOES NOT** matter that XNA is discontinued. * It **DOES NOT** matter how small the bit of code you have stolen is. * It **DOES NOT** matter what your opinion of stealing code is. If you did not write the code, you do not have ownership of the code and you shouldn't submit it to MonoGame. If we find a contribution to be in violation of copyright, it will be immediately removed. We will bar that contributor from the MonoGame project. ## Code guidelines Due to limitations on private target platforms, MonoGame enforces the use of C# 5.0 features. It is however allowed to use the latest class library, but if contributions make use of classes that are not present in .NET 4.5, it will be required from the contribution to implement backward-compatible switches. These limitations should be lifted at some point. ## Licensing The MonoGame project is under the [Microsoft Public License](https://opensource.org/licenses/MS-PL) except for a few portions of the code. See the [LICENSE.txt](LICENSE.txt) file for more details. Third-party libraries used by MonoGame are under their own licenses. Please refer to those libraries for details on the license they use. We accept contributions in "good faith" that it isn't bound to a conflicting license. By submitting a PR you agree to distribute your work under the MonoGame license and copyright. To this end, when submitting new files, include the following in the header if appropriate: ```csharp // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. ``` ## Need More Help? If you need help, please ask questions on our [community forums](http://community.monogame.net/) or come [chat on Gitter](https://gitter.im/mono/MonoGame). Thanks for reading this guide and helping make MonoGame great! :heart: The MonoGame Team ================================================ FILE: Clean.bat ================================================ for /d /r . %%d in (bin,obj,bak) do @if exist "%%d" rd /s /q "%%d" rd /s /q "Artifacts" cd Templates del /s /q *.zip cd .. pause ================================================ FILE: Documentation/articles/README.md ================================================ THIS IS A WORK IN PROGRESS! # MonoGame Documentation This is the source for the [documentation published on MonoGame.net](http://www.monogame.net/documentation/). It is rebuilt when the code changes and is published nightly to the website. ## General Rules The following rules must be observed at all times when contributing documentation to the MonoGame project. - Write in a neutral, technical tone. - Avoid humor, personal opinions, and colloquial language. - **Never** plagiarize any documentation from another source. - Do not use automatic documentation tools as they are ineffective. Breaking these rules can result in your contribution being rejected. ## Getting Started You can create and edit documentation right from the web browser without needing to install Git or ever leave the GitHub site. - [Fork the MonoGame repo](https://help.github.com/articles/fork-a-repo/). - [Create a new branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) from `develop` and make your changes only in that branch. - [Create a new file](https://help.github.com/articles/creating-new-files/) or [edit an existing one](https://help.github.com/articles/editing-files-in-your-repository/) using the GitHub markup editor. - [Submit pull requests](https://help.github.com/articles/creating-a-pull-request/) early and often to merge your documentation changes. ## Style Guide Review the following expectations before contributing any documentation. ### Manuals, Guides, and Tutorials TODO! ### API Reference The API reference documentation is a big part of the documentation effort for MonoGame. The documentation is written in the [C# XML format](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/xml-documentation-comments) and is inline to the MonoGame source code. The final web pages with API documentation are generated using [DocFX]([DocFX - static documentation generator | DocFX website](https://dotnet.github.io/docfx/)). #### Every Word Should Contain Value Every word in the reference documentation should provide information beyond the API itself. Documentation that only rehashes or rephrases what is already apparent in the class, method, parameter, or property name has zero value and wastes time for both the writer and reader. #### The First Sentence Is the Most Important There is no guarantee that the reader will read beyond the first sentence of the reference documentation. This is why that first sentence is the most important and should convey the most key piece of information. Take your time to write the most concise and clear first sentence possible. This helps users tremendously and goes a long way towards having great documentation. #### Surface Information Hidden in the Code Being inline with the code allows you to easily look for critical information within it that the user might not know from looking at the API alone. Take your time to explore inner method calls and platform specific sections of the code. The time to write the documentation is once you feel you fully understand the code you are documenting. If you don't feel you understand the code then leave the documentation for someone else to write. #### Documentation Is Referenced Not Read Remember that the user is searching for an answer for a specific question. It is your job to predict these questions and provide them clear answers. ## License All documentation contributed to the MonoGame project is subject to the [Creative Commons Attribution-NonCommercial-ShareAlike](http://creativecommons.org/licenses/by-nc-sa/4.0/) license. By contributing you are agreeing to the terms of that license.

Creative Commons License
MonoGame Documentation by the MonoGame Team is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike License.

================================================ FILE: Documentation/articles/content/adding_ttf_fonts.md ================================================ # TrueType fonts MonoGame supports more than one method of using fonts, the following is an explanation of how to use TrueType fonts. ## Using TrueType Fonts with MonoGame To be able to use a TrueType font, MonoGame requires the **TrueType font file** and a **.spritefont** file. > TrueType fonts may be installed on the system, or added manually in to the same directory as the .spritefont file. 1. Create the .spritefont file by selecting "Edit -> Add -> New Item" from the MGCB Editor menu, then select **SpriteFont Description** from the list and click **Create**. ![Adding TTF fonts step 2](~/images/content/adding_ttf_fonts.PNG) 2. Open the newly created .spritefont file in your text editor of choice, find this line and change it to your selected .ttf font. If the font is installed on the system, just type the name of the font. ```xml Arial ``` ## Usage Example Make a class variable of type [`Spritefont`](xref:Microsoft.Xna.Framework.Graphics.SpriteFont) ```csharp SpriteFont font; ``` Load the font with [`ContentManager.Load`](xref:Microsoft.Xna.Framework.Content.ContentManager) ```csharp font = myGame.Content.Load("Fonts/myFont") ``` Draw text with [`SpriteBatch.Draw`](xref:Microsoft.Xna.Framework.Graphics.SpriteBatch) ```csharp spriteBatch.Begin(); // Finds the center of the string in coordinates inside the text rectangle Vector2 textMiddlePoint = font.MeasureString(text) / 2; // Places text in center of the screen Vector2 position = new Vector2(myGame.Window.ClientBounds.Width / 2, myGame.Window.ClientBounds.Height / 2); spriteBatch.DrawString(font, "MonoGame Font Test", position, Color.White, 0, textMiddlePoint, 1.0f, SpriteEffects.None, 0.5f) spriteBatch.End(); ``` ================================================ FILE: Documentation/articles/content/content.md ================================================ # Adding Content A big part of your game is your content. This includes standard files like textures, sound effects, music, videos, and custom effects as well as custom content like level and enemy files. MonoGame implements its own content pipeline for transforming your unoptimized assets into platform optimized content. This is critical in building a game which runs as fast as possible under tight resource constraints. This section will cover the following topics: - [Why use the Content Pipeline](why_content_pipeline.md) - [Using MGCB Editor](using_mgcb_editor.md) - [TrueType Fonts](adding_ttf_fonts.md) - [Custom Effects](custom_effects.md) - [Localization](localization.md) ================================================ FILE: Documentation/articles/content/custom_effects.md ================================================ # Custom Effects A core element of Microsoft XNA is the effect system which is used for all rendering. For KNI we are supporting stock and custom HLSL effects, for DirectX 11, desktop OpenGL, mobile GLES and WebGL. There currently is no effect system or shader language that supports all the platforms we require, forcing us to build a new custom effect system. ## MGFX KNIFX is KNI's "Effect" runtime and tools which with the following core goals: * Support a similar technique, passes, shaders structure as Microsoft FX files. * Have a textual format for ease of editing. * Have a compiled and optimized binary format for runtime use. * Be cross-platform and support multiple shader languages and bytecodes. * Easy to extend for future platforms and features. ## Stock Effects KNI has the following effects built-in and fully supported on current platforms: * BasicEffect * AlphaTestEffect * DualTextureEffect * EnvironmentMapEffect * SkinnedEffect * SpriteEffect Under the hood these effects use the same system and tools as one would for a custom Effect. The source of these effects can be found in the ['Platforms\Graphics\Effect\Shaders'](https://github.com/kniEngine/kni/tree/main/Platforms/Graphics/Effect/Shaders) folder. ## Custom Effects To use a custom effect with KNI you must do one of the following: * Run the effect file through the [content processor](~/articles/tools/mgcb.md) for loading via the [`ContentManager`](xref:Microsoft.Xna.Framework.Content.ContentManager) (Recommended). * Process your effect file with the [KNIFXC tool](~/articles/tools/knifxc.md) and load them yourself at runtime. ## Effect Writing Tips These are some tips for writing or converting effects for use with KNI. | The compiler support both new HLSL syntax and is backward compatible with the old HLSL syntax. vs_4_0_level_9_1 and vs_2_0 are interchangeable:| | The supported shader models when targeting DX are the following:| |---| | * `vs_4_0_level_9_1` and `ps_4_0_level_9_1` (`Reach` `GraphicsProfile`)| | * `vs_4_0_level_9_3` and `ps_4_0_level_9_3` (requires `HiDef` `GraphicsProfile` at runtime)| | * `vs_2_0` and `ps_2_0` (`Reach` `GraphicsProfile`)| | * `vs_3_0` and `ps_3_0` (requires `HiDef` `GraphicsProfile` at runtime)| | * `vs_4_0` and `ps_4_0` (requires `FL10_0` `GraphicsProfile` at runtime)| | * `vs_4_1` and `ps_4_1` (requires `FL10_1` `GraphicsProfile` at runtime)| | * `vs_5_0` and `ps_5_0` (requires `FL11_0` `GraphicsProfile` at runtime)| |---| |When targeting GL platforms we automatically translate FX files to GLSL using a library called [MojoShader](http://icculus.org/mojoshader/).| |Shader Model 4.0 under GL unlocks the instruction count limit of 3.0, but is otherwise limited to 3.0 instructions| |The supported feature levels are the following:| |---| | * `vs_4_0_level_9_1` and `ps_4_0_level_9_1` (`Reach` `GraphicsProfile`)| | * `vs_4_0_level_9_3` and `ps_4_0_level_9_3` (requires `HiDef` `GraphicsProfile` at runtime)| | * `vs_2_0` and `ps_2_0` (`Reach` `GraphicsProfile`)| | * `vs_3_0` and `ps_3_0` (requires `HiDef` `GraphicsProfile` at runtime)| | * `vs_4_0` and `ps_4_0` (requires `FL10_0` `GraphicsProfile` at runtime)| |---| |You can use preprocessor checks to add conditional code or compilation depending on defined symbols. KNI defines the following symbols when compiling effects:| |---| | * `__KNIFX__` | | * `__DEBUG__` when building with the Debug flag | | * `__DIRECTX__` when targeting DirectX | | * `__GL__` when targeting OpenGL/GLES/WebGL | | * `__OPENGL__` when targeting desktop OpenGL | | * `__GLES__` when targeting GLES/WebGL | | * `__MOJOSHADER__` when building with MojoShader, targeting OpenGL/GLES/WebGL | |---| Custom symbols can be defined from the [MGCB Editor](~/articles/tools/mgcb_editor.md) or via [KNIFXC](~/articles/tools/knifxc.md). * Make sure the pixel shaders inputs **exactly match** the vertex shader outputs so the parameters are passed in the correct registers. The parameters need to have the same size and order. Omitting parameters might not break compilation, but can cause unexpected results. * The effect compiler is aggressive about removing unused parameters, be sure the parameters you are setting are actually used. * Preshaders are not supported. * If you think you have found a bug porting a shader, [please let us know](https://github.com/kniEngine/kni/issues). ================================================ FILE: Documentation/articles/content/localization.md ================================================ # Localization Localization is an important part of any game. While it can be possible to design a game that is region independent, it is quite hard. At some point you will need to produce localized text and graphics. MonoGame has a simple localization system built in. If you want to develop your own system you are still able to do so. But the default system should be good enough for most use cases. ## Creating resx files MonoGame runs on .net/Mono on most platforms. Localization is handled by those platforms via the use of resx files. There are walkthroughs on [MSDN](https://msdn.microsoft.com/en-us/library/aa992030(v=vs.100).aspx) which walk you through the process. A simplified version is presented here. Create a .resx file in the IDE e.g Foo.resx and add it to your game project. Note this needs to be added to the main app projects. The Foo.resx file should have an Action of EmbeddedResouce and a Generator value of ResXFileCodeGenerator. Here is a snippet from the .csproj: ```xml ResXFileCodeGenerator Foo.Designer.cs ``` Add any string resources to that file. These are in the form of a Key/Value pair. You can use the built-in editor or manually edit the .resx file by hand. It is an xml file so you can view the contents easily. ```xml Wall Style : {0} ``` When the resx is processed by the generator, it produces a **Foo.Designer.cs** file which is then included in your project. You can then access the "string" value by using code as follows: ```csharp var s = MyProject.Foo.Wall_Style; ``` > Note in the example we have a place holder ({0}) for additional text. You can still use te property of Foo.Wall_Style with things like string.Format. ```csharp int i = 1; var s = string.Format (MyProject.Foo.Wall_Style, i); ``` All this means you do not need to hardcode the string directly. When accessing the **MyProject.Foo.Wall_Style** property, the code will look up the value from the embedded resx file automatically. You can add support for a new language by adding a new resx file which uses the language/region code as a suffix, e.g Foo.**de-DE**.resx. This new file will contain the translations for that language/region. In the above example we are targetting German. ### Universal Windows Platform (UWP) considerations Unfortunately UWP does not support resx files any more. They have a new file called a **resw**. The format is similar but incompatible to resx. As a result, you will need to duplicate the data into a set of additional resw files to get the translation to work on UWP. The process is like the standard resx process. ## Upgrading your SpriteFont files By default, the SpriteFont processor uses a limited set of characters to generate the font. While this is fine for English languages it will probably not include special characters needed for other languages (French, Arabic, Korean etc). As a result MonoGame has a **LocalizedFontProcessor** which does something slightly different. The process looks at the resx files you provide it with and generates an optimized **spritefont** which only contains the characters your game uses. To make use of this functionality you ned to tell the spritefont which resx files to use. Open the **.spritefont** with a xml/text editor and add lines like this inside the Asset node: ```xml ..\Foo.resx ..\Foo.de-DE.resx ``` > Note the paths are relative to the .spritefont directory. In the example above the resx files are in the directory above the .spritefont. You should end up with a .spritefont file like this ```xml Verdana 14 1 ..\Foo.resx ..\Foo.de-DE.resx ``` Once that is done you then need to change the **.mgcb file** so that the **SpriteFontProcessor** is replaced with the **LocalizedFontProcessor**. This can be done by editing the .mgcb file or using the MGCB Editor. After that you can just compile your content as normal. If the processor has any trouble resolving or reading the resx files you will get an error. ## Loading the Font Loading the font can be done in the normal way. The end result of the process is an .xnb file containing a normal SpriteFont. ```csharp var font = Content.Load("Foo"); ``` ### Other Localized assets Not all localized assets will be fonts. In certain situations you might need to swap out an entire textures or spritesheets. For these cases a new method has been added to the ContentManager, **LoadLocalized**. The idea behind this method is that it will look for localized files **BEFORE** loading the default one. So for example say you have an asset, MyCharacter. You have a MyCharacter.xnb file which contains the data for that item. You can also has a MyCharacter.de-DE.xnb file which contains the German version of that asset. This asset could be a Texture, Audio or any other game asset. You can then use LoadLocalized to load the localized version of the asset. ```csharp var myCharacter = Content.LoadLocalized("MyCharacter"); ``` The decision on which localized asset to load is made by looking for a file with the following patterns ```xml . . ``` These values are retrieved from ```csharp CultureInfo.CurrentCulture.Name // eg. "en-US" CultureInfo.CurrentCulture.TwoLetterISOLanguageName // eg. "en" ``` which are part of the **System.Globalization namespace**. > On a side note you can also use the `LoadLocalized` to load language specific SpriteFonts. They just need to be named in the same way as we have described above. ================================================ FILE: Documentation/articles/content/toc.yml ================================================ - name: Why use the Content Pipeline href: why_content_pipeline.md - name: Using MGCB Editor href: using_mgcb_editor.md - name: Custom Effects href: custom_effects.md - name: TrueType fonts href: adding_ttf_fonts.md - name: Localization href: localization.md ================================================ FILE: Documentation/articles/content/using_mgcb_editor.md ================================================ # Using MGCB Editor The [MGCB Editor](~/articles/tools/mgcb_editor.md) is used to organize and build content for use with MonoGame. It is accessed by double-clicking a "**.mgcb**" file from within the Visual Studio solution explorer (providing that you installed [MonoGame's Visual Studio extension](/Documentation/articles/getting_started/1_setting_up_your_development_environment_windows.md)). Alternatively, you can build it [directly from source](https://github.com/MonoGame/MonoGame/tree/develop/Tools/MonoGame.Content.Builder.Editor) if needed. ## Create A Project To start a new project just select “New...” from the “File” menu. ![MGCB Editor new project](~/images/content/mgcb_new.png) This will give you a new empty project to add content to. ## Importing an XNA (.contentproj) content project If you are starting from an existing XNA project, the MGCB Editor supports importing your existing **.contentproj**. Again you can access this from the “**File**” menu: ![MGCB Editor import XNA](~/images/content/mgcb_import.png) This creates a new project, adding all your content and content settings from the XNA project. If you happened to be using custom processors, you may need to edit the assembly references to link to the correct paths which we discuss next. ## Project Settings You can edit the content project settings directly from the property grid editor after selecting the project node in the tree view: ![Project settings](~/images/content/mgcb_project.png) This is where you set up the folders for output, the platform to target, the assembly references for custom processors, etc. > Note that currently, the MGCB Editor is not set up to support multiple target platforms. This means you may need to manage multiple content projects or manually change the target platform between builds. If you are using `MonoGame.Content.Builder.Task` to build content as part of building your project, the correct platform will automatically be targeted. ## Adding Content Items Once you have a project set up you can add content to it for building. You can do this from the “**Edit**” menu: ![Edit menu](~/images/content/mgcb_addexisting.png) Selecting “**New Item...**” will bring up the New Item dialog which displays a list of new items that can be created: ![New item](~/images/content/mgcb_newitem.png) When you select “**Existing Item...**”, you can select an existing item from disk to add to the content project. ## Built-in Content Importers and Processors MonoGame provides default **Importers** (File Read) and **Processors** (File Transform) methods for handling almost all standard content which is automatically selected for known content types. In most cases, you do not need to alter these settings when adding content. The lists below highlight the default configuration options for each file type. > If you wish to create your own Importers and Processors for custom file types, please see the "[Custom Content Processors](#custom-content-processors)" section. ## File Types The MonoGame Content Builder (MGCB) pipeline supports many different file types within a content project, along with several default processing options for those files: ### Images ![Image Properties](~/images/content/MGCB-ImageProperties.png) Images come in a variety of formats such as png or jpg, most of which are natively supported by the MonoGame content pipeline. Additionally, the following options are configurable per image asset when imported: | Property | Description | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | | ColorKeyColor | Background color used for transparency | | ColorKeyEnabled | If enabled, any colors identified using the Color Key will be marked as transparent (Alpha 0). The default value is **false** | | GenerateMipmaps | If enabled, this will generate MipMaps for the selected texture. The default value is **false** | | MakeSquare | if enabled this will make best efforts to expand the image to a square. The default value is **false** | | PremultiplyAlpha | If enabled this will treat the selected texture as an Alpha Mask. The default value is **false** | | ResizeToPowerOfTwo | If enabled this will resize the image dimensions to the next largest power of 2 size, e.g. 128x128 or 512x512. The default value is **false** | | TextureFormat | Selected format of the Texture to process, e.g. raw Color, DXT. The default value is **color** | ### Audio ![Image Properties](~/images/content/MGCB-AudioProperties.png) MonoGame supports several audio formats to cope with a wide variety of audio needs, from Wav files for effects to MP3's for songs/background music. The type of audio you use will depend on the audio needs for your project. Audio can be configured to use either the **Sound Effect** processor which imports audio as a [SoundEffect](xref:Microsoft.Xna.Framework.Audio.SoundEffect) which is generally used for short and quick audio sounds. Alternatively, by selecting the **Song** processor, the audio will be imported as a **Song** which is used for long-running audio using the Media Player class. | Property | Description | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | DebugMode | Depending on the setting, this will either leave the audio uncompressed (for speed) when debugging or optimized for a production build. The default value is **false** | | Quality | The quality of compression to be used when compiling the asset. The default value is **best** | ### Models ![Image Properties](~/images/content/MGCB-ModelProperties.png) | Property | Description | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | ColorKeyColor | Background color used for transparency | | ColorKeyEnabled | If enabled, any colors identified using the Color Key will be marked as transparent (Alpha 0). The default value is **false** | | DefaultEffect | The default effect class to apply to this model. The default value is **BasicEffect** | | GenerateMipmaps | If enabled, this will generate MipMaps for the selected texture. The default value is **false** | | GenerateTangentFrames | Generate model tangents for use in Normal Mapping. The default value is **false** | | PremultiplyTextureAlpha | If enabled this will treat the selected texture as an Alpha Mask. The default value is **false** | | PremultiplyVertexColors | If enabled this will treat the selected texture as a Vertex Color Mask. The default value is **false** | | ResizeTexturesToPowerOfTwo | If enabled this will resize the models texture(s) dimensions to the next largest power of 2 size, e.g. 128x128 or 512x512 | | RotationX | Default model X Axis Rotation–Number, in degrees of rotation. The default value is **0** | | RotationY | Default model Y Axis Rotation–Number, in degrees of rotation. The default value is **0** | | RotationZ | Default model Z Axis Rotation–Number, in degrees of rotation. The default value is **0** | | Scale | Default model scale. The default value is **1.0f** | | SwapWindingOrder | Boolean value indicating if the winding order is swapped. This is useful for models that appear to be drawn inside out. The default value is **false**. | | TextureFormat | Selected format of the Texture to process, e.g. raw Color, DXT. The default value is **compressed** | ### [Fonts](adding_ttf_fonts.md) ![Font Properties](~/images/content/MGCB-Fontproperties.png) MonoGame uses a **Font descriptor** file to describe the type of font to import, the font in question needs to be installed in the machines Font library for it to enable the project to build, else this will result in a Font importer error. > It is recommended you keep a copy of the Font file in the content folder for reference to avoid issues with missing Fonts, that way any developer on the project can re-add the Font to their machine when needed. | Property | Description | | ---------------- | -------------------------------------------------------------------------------------------------------------- | | PremultiplyAlpha | If enabled this will treat the font texture that is generated as an Alpha Mask. The default value is **false** | | TextureFormat | Selected format of the font Texture to process, e.g. raw Color, DXT. The default value is **compressed** | See the [TrueType fonts](adding_ttf_fonts.md) section for more detail on working with Fonts. Additionally, check out the [Localization](localization.md) section for details on working with managing translated text within your project using [resx](https://msdn.microsoft.com/en-us/library/aa992030(v=vs.100).aspx) files. ### [Effects](custom_effects.md) ![Effect Properties](~/images/content/MGCB-EffectProperties.png) Effects in MonoGame are shaders that have been built with a supported shader language (HLSL / GLSL) which will then be pre-processed into a common shader language / effect used by MonoGame. | Property | Description | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | DebugMode | Depending on the setting, this will either leave the audio uncompressed (for speed) when debugging, or optimise for a production build. The default value is **false** | | Defines | Custom compiler defines to enable specific code paths (#if) in the shader file, if appropriate. The default value is **empty** | See the [Effects](custom_effects.md) section for more detail on the built-in effects with MonoGame and how to generate your own custom effects. ### Video ![Image Properties](~/images/content/MGCB-VideoProperties.png) MonoGame uses a custom video player which converts video files into a format that can be used and rendered by MonoGame using a series of VideoTextures. There are no configurable properties for the Video Player currently. ### Text (e.g. XML) ![Image Properties](~/images/content/MGCB-TextProperties.png) One of the most powerful processors in MonoGame is the text processor, ideally used for XML files used to manage Game Class content in text files rather than writing it all in code. So long as the XML file conforms to the MonoGame (XNA) standard, it will generate data within the game for use in the solution. For an example on how to use XML in your MonoGame project, [check out this article](https://dzone.com/articles/getting-started-with-monogame-using-xml). ## Custom Content Processors Just like XNA, the MonoGame content pipeline supports custom content processors. To use them you need to rebuild them correctly to work against MonoGame. The first step is removing all `Microsoft.Xna.Framework.XXX` references and replacing them with references to `MonoGame.Framework` and `MonoGame.Framework.Content.Pipeline`. This is required as you will no longer be building against Microsoft XNA. Once your references are working, you then need to change your assembly target platform. MonoGame does not support x86 (aka 32bit) assemblies in the content pipeline. This is mainly to allow of processing really big content as well as to simplify the number of configurations and native code dependencies. For this reason, you should try to target “Any CPU” with your custom content assembly. After you have done these fixes, you should be able to add these new processors to the content project “References”. ## Building Content The MGCB Editor has 3 actions related to building content: Build, Rebuild and Clean: - **Build** - This will build all content that needs to be built and put it in the output directory (bin by default). Content will be skipped if it has not changed since the last build. The time source content was last edited is saved in the intermediate directory (obj by default) to determine if content changed since the last build. - **Rebuild** - Cleans the project first and then Builds it again. - **Clean** - Cleaning the project will empty the output and intermediate directories. ## Linking Content To Your Game Once you have built your content, you have a few different ways to add it to your game project. They all have the same goal, to get the built XNB's in your project output folder so a [`ContentManager`](xref:Microsoft.Xna.Framework.Content.ContentManager) can easily find and load them. ### KniContentReference The simplest method is to set up your game project from one of the templates that come with the SDK. When you create a new project, it will include a Content.mgcb file with its Build Action set to **KniContentReference** and a reference to `MonoGame.Content.Builder.Task` which processes *KniContentReference* items. ![MonoGame Content Reference](~/images/content/MGCB-ContentReference.png) > This build action is defined in the .targets file [here](https://github.com/MonoGame/MonoGame/blob/develop/Tools/MonoGame.Content.Builder.Task/MonoGame.Content.Builder.Task.targets). The **KniContentReference** is set up so that when the project is built, the MGCB will automatically build any new/modified content and copy the resulting XNB's to the project output directory, so they can be used in the project. This way you do not even have to manually build the content with the MGCB Editor. Just add your content to the .mgcb with the MGCB Editor and the rest will happen when you build your project. The content files do not need to be added to your project. ### Manual Copy If you do not want to use the automated process, you can build the content project with the MGCB Editor and copy the XNB's to the output folder of your project manually. ### Add As Content If you are using Visual Studio, you can bypass the content pipeline all together and simply the files to your C# game project directly (or as links). Create a folder in the project called Content then right-click on the folder and select Add > Existing Item. ![Add existing item](~/images/content/existing_item.png) You will now see a file dialog from which you can add your content files. > Note that if you do not want Visual Studio to make a local copy of the files. Make sure to use “**Add As Link**” when “Linking” files. > > ![Add as link](~/images/content/add_as_link.png) Once the files are added you will need to select them all and change their properties in the properties window to: * "Build Action" to **Content** * "Copy to Output Directory" to **Copy if newer** ![Copy if newer](~/images/content/copy_if_newer.png) ### Add With Wildcard The more automatic option is to edit your game .csproj manually and have it include you content automatically using wildcards. To do this just open the .csproj with any text editor, then add the following after any other `****`: ```xml PreserveNewest ``` Then any files you put in a Content folder within your game project will automatically be included in the build. ## Reporting Bugs If you run into any problems with MGCB or the MGCB Editor, please ask for help on the [community site](http://community.monogame.net/) or submit a [bug report on GitHub](https://github.com/MonoGame/MonoGame/issues). ================================================ FILE: Documentation/articles/content/why_content_pipeline.md ================================================ # Why use the Content Pipeline The MonoGame team continues to put a lot of effort into a cross-platform content pipeline, but would you use the Content Pipeline when MonoGame also supports loading assets natively, like .png, .mp3, .wav? Well, it all boils down to a couple of words, performance and efficiency. ## Textures Most image formats (like PNGs) are generally not optimized for games, most GPUs have specific hardware supported compressed formats for textures. PNGs or JPEGs just get uncompressed when passed to the GPU. By using the hardware compression you often get 4x to 8x more textures space for your game as well as faster load times and smaller packages. When we load the .png from storage at runtime, the texture is then loaded into memory and decompressed/unpacked from its compressed png format into raw bytes. > Note that 262 KB is quite a bit bigger than the compressed size. A new texture is then created for that data because your device cannot decompress on the fly (yet) so it has to use that data as is. Creating the texture uses 262kb of graphics memory on the GPU. That does not sound too bad, but if you are using larger textures say 1024×1024, then you are using 4 MB or more of GPU memory for that one texture. Multiply that over the number of textures in your game and you soon run out of texture memory on the GPU. If this happens then the GPU has to swap that data out into system memory (if it supports that) or throw an error when you try to create textures that will not fit into available memory. > So to sum up: > > using **.pngs** = smaller package size & higher memory usage & less textures If you pre-process the texture using the content pipeline, because we know that we are targeting iOS and we know the GPU on those devices support using PVRTC texture compression, we can compress the textures ready for the GPU to use. So we take our sample .png and compress it at build time using PVRTC and we end up with a 32kb file (size depends on the texture, alpha channel, etc). Hmm, that is a lot bigger than the .png on disk, but that is not the whole story. The difference here is that there is no need to unpack/decompress it at runtime which saves on load time, also, we can create a texture from that data directly so we only use 32kb of texture memory on the GPU and not 262kb. That is a massive saving. > Summing up: > > **compressed textures** = larger package size (maybe) & lower runtime memory usage & more textures This applies to all platforms as most desktop GPUs support DXT texture compression, so the content pipeline will produce DXT compressed textures which can be loaded and used directly. The Android platform currently does not have consistent support for compressed textures at the moment so MonoGame has to decompress DXT textures on the device and use it directly, when this changes MonoGame will adapt. In the Content Pipeline tool, MonoGame will automatically pick the correct texture format to use, so for opaque textures, it will use ETC1 (which is supported on all android devices but does not support alpha channels) but for textures with an alpha channel, it will use RGBA4444 (dithered). It will also allow the user to override this default and enable picking from a wide variety of compression options manually such as PVRTC, ATITC, DXT/S3TC, ETC1, and RGBA4444. This will give the developer the choice of what to use/support. ## Audio All platforms support different audio formats, if you are handling this yourself you will need to manually convert all your files and include the right formats for each platform. A better option would be to keep one source file (be it .mp3, .wmv, etc) and then convert it to a supported format for the target platform at build time. This creates longer build times, but at least we know the music will work. MonoGame uses ffmpeg to do the heavy lifting when converting between formats as it can pretty much convert any type to any other type which is really cool. > The build times are only for the first time the asset is processed, the Content Pipeline will preserve the generated content for subsequent builds until the source is changed Most platforms have audio processing that is optimized to certain compressed formats. By not using them you loose performance and system memory. If you save the sound effects as ADPCM, these run pretty optimally on Windows systems. The problem however, is that once you try to take your game to another platform where ACPCM is not optimal. You will need to manually re-export all your game content into the new optimal format for that platform (assuming you kept all your original content uncompressed) ## Shaders There are a number of shading languages that you can use depending on the platform you are targeting: - For OpenGL based systems that is GLSL - For DirectX based systems it is HLSL - There is also CG from Nvidia. The Effect system in XNA/MonoGame was designed around the HLSL language as it is based around the .fx format, which allows a developer to write both vertex and pixel shaders in one place. Historically both GLSL and HLSL have separate vertex and pixel shaders. HLSL until recently compiled and linked these at build time, however, GLSL does this at runtime. Without a content pipeline or some form of tooling a developer would need to write two shaders, one for HLSL and one for GLSL. The good news is the MonoGame KNIFXC.exe tool can create a shader in .fx format and also enable it to work in GLSL. It does this by using an open-source library called libMojoShader, which does some funky HLSL to GLSL instruction conversion to create an OpenGL-based shader, but rather than doing that at runtime, we do it at build time so we do not need to deploy mojoshader with the OpenGL based games. All this saves you the hassle of having to write and maintain two shaders. ## Models MonoGame, thanks to the excellent assimp project, supports a much wider range of models including .x, .fbx and .3ds. However, some of these formats might produce some weirdness at render time as only .fbx has been fully tested. Also note that assimp does not support the older version .fbx format which ships with most of the original XNA samples, so you will need to [convert those to the new format manually](https://www.codeproject.com/articles/1041397/updating-old-fbx-files-for-the-modern-era). > A nice trick to upgrade the old .fbx is to open them in Visual Studio 2012+ and then save it again under a new name. [This article](https://www.codeproject.com/articles/1041397/updating-old-fbx-files-for-the-modern-era) walks through some of the quick, easy, and FREE methods for updating older .fbx files. When the MonoGame content pipeline processes a Model file, it is converted into an optimized internal format that will contain the Vertices, Texture Coordinates, and Normals. The pipeline will also pull out the textures used in the model and put those through the pipeline too, so you get optimized textures automatically. ## Summary This is why using the content pipeline and XNB's is superior. You feed uncompressed source content to the MonoGame content pipeline, tell it what platform you are building for and it takes care of converting it to the most optimal format for that platform. When you decide to ship to another platform it is a one-click change to rebuild your content optimized for that platform. Hopefully, you have a good idea of why you should use the content pipeline in your games. Using the raw assets is ok when you are putting together a simple demo or proof of concept but sooner or later you will need to start optimizing your content. My advice would be to use the Pipeline tooling from the outset so you get used to it. Information on the [Pipeline tool](~/articles/tools/mgcb_editor.md) can be found here. ================================================ FILE: Documentation/articles/getting_started/0_getting_started.md ================================================ # Getting Started This section walks you through the basics of MonoGame, and helps you to create your first game. First, select the operating system and toolset you will be working with to create your first MonoGame project, then continue reading to understand the basic layout of a MonoGame project. By the end of this tutorial set, you will have a working project to build for your target platform and will be ready to tackle your next steps. ## 1. Setting up your development environment - [Windows](1_setting_up_your_development_environment_windows.md) - [macOS](1_setting_up_your_development_environment_macos.md) - [Linux](1_setting_up_your_development_environment_ubuntu.md) ## 2. Creating a new project - With [Visual Studio 2022](2_creating_a_new_project_vs.md) - With [Visual Studio 2022 for Mac](2_creating_a_new_project_vsm.md) - With [the .NET command line interface](2_creating_a_new_project_netcore.md) (compatible with JetBrains Rider and Visual Studio Code) ## 3. Building your game - [Understanding the Code](3_understanding_the_code.md) - [Adding Content](4_adding_content.md) - [Adding Basic Code](5_adding_basic_code.md) ================================================ FILE: Documentation/articles/getting_started/1_setting_up_your_development_environment_macos.md ================================================ # Setting up your development environment for macOS This section provides a step-by-step guide for setting up your development environment on macOS. MonoGame can work with most .NET compatible tools, but we recommend [Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/vs/mac/) (prior versions are not supported). Alternatively, you can use [JetBrains Rider](https://www.jetbrains.com/rider/) or [Visual Studio Code](https://code.visualstudio.com/). ## Install Visual Studio for Mac Go to the following URL to download and install Visual Studio 2022 for Mac: https://visualstudio.microsoft.com/vs/mac/ ### Install MonoGame extension for Visual Studio for Mac Download the MonoGame extension for Visual Studio 2022 for Mac from the following link: https://github.com/MonoGame/MonoGame/releases/tag/v3.8.1 Open up Visual Studio 2022 for Mac and you should be able to see a window as shown below: ![VS for Mac installer](~/images/getting_started/vsmac-mg-install-1.png) In the menu bar, click on **Visual Studio**, and then click on the **Extensions...** menu item. ![Launch Extensions manager](~/images/getting_started/vsmac-mg-install-2.png) Next, click on the **Install from file...** button in the bottom left and select the extension file you downloaded in the previous step. ![Import VSM extension](~/images/getting_started/vsmac-mg-install-3.png) Finally, click on the Install button once again. ![Install VSM extension](~/images/getting_started/vsmac-mg-install-4.png) ## [Optional] Set up Wine for effect compilation Effect (shader) compilation requires access to DirectX, so it will not work natively on macOS systems, but it can be used through Wine. Here are instructions to get this working. Install brew ```sh /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ``` Install wine64: ```sh brew install xquartz brew install wine-stable brew install p7zip wget ``` Before wine is usable, you will need to open it manually first - otherwise, you will get an error that Apple couldn't verify it. - Open Finder - Navigate to Applications - Control+Click on Wine Stable - Choose to open it If you choose, you may close it now - it has been unblocked. Create wine prefix: ```sh wget -qO- https://raw.githubusercontent.com/MonoGame/MonoGame/master/Tools/MonoGame.Effect.Compiler/mgfxc_wine_setup.sh | bash ``` If you ever need to undo the script, simply delete the `.winemonogame` folder in your home directory. **Next up:** [Creating a new project](2_creating_a_new_project_vsm.md) ## [Alternative] Install the .NET 6 SDK (compatible with JetBrains Rider and Visual Studio Code) If you prefer to use JetBrains Rider or Visual Studio Code, after installing any of them you will need to [install the .NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). Once the .NET 6 SDK is installed, you can open a terminal and install the MonoGame templates by typing the following command: ```sh dotnet new --install MonoGame.Templates.CSharp ``` **Next up:** [Creating a new project](2_creating_a_new_project_vsm.md) ================================================ FILE: Documentation/articles/getting_started/1_setting_up_your_development_environment_ubuntu.md ================================================ # Setting up your development environment for Linux This section provides a step-by-step guide for setting up your development environment on Linux. The only development environment that MonoGame officially supports on Linux is [Visual Studio Code](https://code.visualstudio.com/). ## Install .NET 6 SDK To install the .NET 6 SDK on your Linux distribution, please follow [Microsoft's instructions](https://docs.microsoft.com/dotnet/core/install/linux). ## Install Visual Studio Code To install Visual Studio on your Linux distribution, please follow [Microsoft's instructions](https://code.visualstudio.com/docs/setup/linux). ## Install Visual Studio Code C# extension: In order to code and build C# projects, you will also need to install a Visual Studio Code C# extension. You can do this with the following command within the Visual Studio Code command line interface: ```sh code --install-extension ms-dotnettools.csharp ``` > Or alternatively, select the "Extensions" tab on the left hand side in VSCOde and search for the C# Extension published by Microsoft. ## Install MonoGame templates The following command will install templates for the .NET CLI and Rider IDE. > There is no template support for MonoDevelop. ```sh dotnet new --install MonoGame.Templates.CSharp ``` ## [Optional] Set up Wine for effect compilation Effect (shader) compilation requires access to DirectX, so it will not work natively on Linux systems, but it can be used through Wine. Here are instructions to get this working (providing that your distribution is using apt). Install wine64: ```sh sudo apt install wine64 p7zip-full curl ``` Create wine prefix: ```sh wget -qO- https://raw.githubusercontent.com/MonoGame/MonoGame/master/Tools/MonoGame.Effect.Compiler/mgfxc_wine_setup.sh | bash ``` If you ever need to undo the script, simply delete the `.winemonogame` folder in your home directory. **Next up:** [Creating a new project](2_creating_a_new_project_netcore.md) ================================================ FILE: Documentation/articles/getting_started/1_setting_up_your_development_environment_windows.md ================================================ # Setting up your development environment for Windows This section provides a step-by-step guide for setting up your development environment on Windows. MonoGame can work with most .NET compatible tools, but we recommend [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (prior versions are not supported with MonoGame 3.8.1). Alternatively, you can use [JetBrains Rider](https://www.jetbrains.com/rider/) or [Visual Studio Code](https://code.visualstudio.com/). ## [Recommended] Install Visual Studio 2022 Before using MonoGame, you will need to install [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) or later (any edition, including Community) with the following workloads, depending on your desired [target platform(s)](~/platforms.md): * .NET desktop development (mandatory for all platforms) * Mobile Development with .NET (optional, if you wish to target Android, iOS, or iPadOS) * Universal Windows Platform development (optional, if you wish to build for the Windows Store, or Xbox) ![Visual Studio optional components](~/images/getting_started/1_installer_vs_components.png) If you are targeting the standard Windows DirectX backend, you will also need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) for audio and gamepads to work properly. ### Install MonoGame extension for Visual Studio 2022 To create new projects from within Visual Studio 2022, you will need to install the MonoGame extension, which can be installed from "*Extensions -> Manage Extensions*" in the Visual Studio 2022 menu bar. ![Visual Studio Extension Manager](~/images/getting_started/1_VisualStudioExtensionManager.png) Once it is open, simply search for **MonoGame** in the top right search window, as shown above, and install the "MonoGame Framework C# project templates" (make sure that it is version 3.8.1 or above). You now have the MonoGame templates installed, ready to create new projects. **Next up:** [Creating a new project](2_creating_a_new_project_vs.md) ## [Alternative] Install the .NET 6 SDK (compatible with JetBrains Rider and Visual Studio Code) If you prefer to use JetBrains Rider or Visual Studio Code, and after installing any of them, you will also need to [install the .NET 6 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). Once the .NET 6 SDK is installed, you can open a Command Prompt and install the MonoGame templates by typing the following command: ```sh dotnet new --install MonoGame.Templates.CSharp ``` **Next up:** [Creating a new project](2_creating_a_new_project_vs.md) ================================================ FILE: Documentation/articles/getting_started/2_creating_a_new_project_netcore.md ================================================ # .NET CLI (JetBrains Rider or Visual Studio Code) This guide will walk you through building a starter game with MonoGame using only the command line/terminal on your operating system and a lightweight coding tool of your choice (such as [Visual Studio Code](https://code.visualstudio.com/) or [JetBrains Rider](https://www.jetbrains.com/rider/)). > It is assumed that you have already properly installed the .NET 6 SDK and MonoGame. > Be aware that for iOS/iPadOS, and Android, development might be limited when using the .NET CLI. Many of the development features for those targets are exclusive to Visual Studio 2022. ## Create a MonoGame Project You can now create new MonoGame projects. To do that: - Create a new directory for your project. - Open a new terminal window or command prompt and navigate to your project directory. - Run `dotnet new -o ` to create your project, where `` is a platform identifier, and `` the name of your project. For example: ``` dotnet new mgdesktopgl -o MyGame ``` > To know which platform identifier (short name) to use for your project, please refer to [Target Platforms](~/articles/platforms.md), or type the following command into the command prompt to list the installed templates and their corresponding short names: > > ``` > dotnet new -l > ``` Once created, you can open your code editor of choice in the new folder and begin editing. > To run your project, check the instructions for [packaging your game](~/articles/packaging_games.md) to build the executable using the .NET tooling. **Next up:** [Understanding the code](3_understanding_the_code.md) ================================================ FILE: Documentation/articles/getting_started/2_creating_a_new_project_vs.md ================================================ # Creating a Project with Visual Studio 2022 This guide will walk you through building a starter game with MonoGame using Windows and Visual Studio 2022. > It is assumed that you have already properly installed Visual Studio 2022 and MonoGame. Start Visual Studio 2022 and select **New Project...** in the upper left corner. ![New Solution](~/images/getting_started/vswin-mg-new-1.png) You should see the "Create a new project" dialog pop up. From here, select the **Templates > Visual C# > MonoGame** category, and then select **MonoGame Cross Platform Desktop Project**. ![New Template](~/images/getting_started/vswin-mg-new-2.png) Next, type in a name for your project. For this tutorial, **Pong** will be used (note: project names cannot contain spaces). After you have entered the name, click on the **...** button next to the Location text field and choose the folder you want to save the project in. Finally, click **OK** to create the project. ![Project Name](~/images/getting_started/vswin-mg-new-3.png) If everything went correctly, you should see a project named **Pong** open up like in the picture below. To run your game, simply press the big **Play Button** in the toolbar, or press **F5**. ![Project Start](~/images/getting_started/vswin-mg-new-4.png) You should now see your game window running. ![Game](~/images/getting_started/vswin-mg-new-5.png) **Next up:** [Understanding the code](3_understanding_the_code.md) ================================================ FILE: Documentation/articles/getting_started/2_creating_a_new_project_vsm.md ================================================ # Creating a Project with Visual Studio for Mac This guide will walk you through building a starter game with MonoGame using a Mac and Visual Studio for Mac. > It is assumed that you have already properly installed Visual Studio 2022 for Mac and MonoGame. Start Visual Studio 2022 for Mac and select **New** on the right side. ![New Solution](~/images/getting_started/vsmac-mg-new-1.png) Now you should see a "New Project" dialog pop up. From here, select the **MonoGame > App** category, then select **MonoGame Cross Platform Desktop Project** and click **Next**. ![New Template](~/images/getting_started/vsmac-mg-new-2.png) On the following dialog, type in a name for your project. For this tutorial, **Pong** will be used (note: project names cannot contain spaces). After you have entered the name, click on the **Browse** button next to the Location text field and choose the folder you want to save the project in. Finally, click **Create** to create a new project. ![Project Name](~/images/getting_started/vsmac-mg-new-3.png) If everything went correctly, you should see a project named **Pong** open up like in the picture below. To run your game, simply press the big **Play Button** in the upper left corner, or press **F5**. ![Project Start](~/images/getting_started/vsmac-mg-new-4.png) You should now see your game window running. ![Game](~/images/getting_started/vsmac-mg-new-5.png) **Next up:** [Understanding the Code](3_understanding_the_code.md) ================================================ FILE: Documentation/articles/getting_started/3_understanding_the_code.md ================================================ # Understanding the Code This tutorial will go over the code that is generated when you start a blank project. > For help with creating a project, please look at the Creating a New Project section of the [Getting Started guide](0_getting_started.md). Within the **Game.cs** class file, which is the core of any MonoGame project, you will find several critical sections necessary for your game to run: * **Using statements** - which provide easy access to the various components of MonoGame. * The **Game Class** definition - the heart of any MonoGame project. * The **Game constructor** and key variables - which tell the project how to start. * The **Initialize** method - to initialize the game upon its startup. * The **Load and Unload Content** methods - which are used to add and remove assets from the running game from the [Content project](4_adding_content.md). * The **Update** method - which is called on a regular interval to update your game state, e.g. take player inputs, move ships, or animate entities. * The **Draw** method - which is called on a regular interval to take the current game state and draw your game entities to the screen. Read further for more details and examples while looking through the code of your new project. --- ## Using Statements ```csharp using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Storage; using Microsoft.Xna.Framework.Input; ``` These using statements make it easier to use the code that MonoGame has to offer. > They are prefixed with Microsoft.Xna.Framework because MonoGame is an open source re-implementation of Microsoft's XNA framework, and in order to maintain compatibility with the XNA code, it uses the same namespaces. ## The Game1 Class ```csharp public class Game1 : Game ``` The main **Game1** class inherits from the **Game** class, which provides all the core methods for your game (ie. Load/Unload Content, Update, Draw etc.). You usually only have one Game class per game, so its name is not that important. ## Instance Variables ```csharp GraphicsDeviceManager graphics; SpriteBatch spriteBatch; ``` The two default variables that the blank template starts with are the **GraphicsDeviceManager** and **SpriteBatch**. Both of these variables that are used for drawing to the screen, as you will see in a later tutorial. ## Constructor ```csharp public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } ``` The main game constructor is used to initialize the starting variables. In this case, a new **GraphicsDeviceManager** is created, and the root directory containing the game's content files is set. ## Initialize Method ```csharp protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } ``` The **Initialize** method is called after the constructor but before the main game loop (Update/Draw). This is where you can query any required services and load any non-graphic related content. ## LoadContent Method ```csharp protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } ``` The **LoadContent** method is used to load your game content. It is called only once per game, within the **Initialize** method, before the main game loop starts. ## Update Method ```csharp protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } ``` The **Update** method is called multiple times per second, and it is used to update your game state (checking for collisions, gathering input, playing audio, etc.). ## Draw Method ```csharp protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } ``` Similar to the Update method, the **Draw** method is also called multiple times per second. This, as the name suggests, is responsible for drawing content to the screen. **Next up:** [Adding Content](4_adding_content.md) ================================================ FILE: Documentation/articles/getting_started/4_adding_content.md ================================================ # Adding Content This tutorial will go over adding content such as images or sounds to your game. > For help with creating a project, please look at the [Creating a New Project](0_getting_started.md) section of the Getting Started guide. ## MonoGame Content Builder Tool (MGCB Editor) This tutorial assumes that you are using Visual Studio 2022 with its MonoGame extension installed. If you are not using the extension, you will need to manually install and use the [MGCB Editor](~/articles/tools/mgcb_editor.md). > This is technically optional, since you can edit the .mgcb files manually if you wish, but the editor is highly recommended for ease of use. ## Adding content First, you will need some content for your game. For this tutorial, use the following image of a ball: ![Open Content](~/images/getting_started/ball.png) Copy the image to your machine by using **right-click > Save Image As** and save it somewhere locally with the name “ball.png”. Now open up your game project and look at the Solution Explorer window. Expand the **Content** folder and open up **Content.mgcb** file by double-clicking on it. ![Open Content](~/images/getting_started/3_open_content.png) You should now see the MGCB Editor window open up. If a text file opens instead, then right-click on **Content.mgcb** and select **Open With**, then select **MGCB Editor** in the list, click **Set as Default** and then click **OK**, then try again. > If you do not see the **MGCB Editor** option when you right-click and select **Open With**, then please review the [Tools documentation](~/articles/tools/tools.md) for installing the MGCB Editor tool for your operating system. ![MGCB Editor](~/images/getting_started/3_mgcb_editor_tool.png) Your game content is managed from this external tool. You can add content to your game in one of the following ways: - **Add Existing Item** toolbar button - **Edit > Add > Existing Item...** menu button - **right-click > Add > Existing Item...** context menu Make sure the "Content" MGCB file is selected to the left, then click the **Add Existing Item** toolbar button. ![Add Content](~/images/getting_started/3_add_content.png) You should now be prompted to select a file. Select the “**ball.png**” image that you downloaded a moment ago. Once you have confirmed your selection, you will be asked whether to copy the file, add a link to it, or skip it. Make sure "**Copy the file to the directory**" option is selected and click **Add**. ![Copy Content](~/images/getting_started/3_copy_content.png) Now click the **Save** toolbar button and close the MGCB Editor tool. ![Save Content](~/images/getting_started/3_save_content.png) --- ## Adding the content in your game Now that you have added the asset to the Content project, it is time to load it into your game. First, open up the **Game1.cs** class file and declare a new **ballTexture** variable of type **Texture2D** in the **Game1** class, so you can store the ball image into memory. ```csharp public class Game1 : Game { Texture2D ballTexture; private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; ``` Next, find the **LoadContent** method. Here, use **Content.Load()** function to load the "ball" sprite and store it in the **ballTexture** parameter. **Content.Load()** requires you to specify what type of content you are trying to load, in this case it is a **Texture2D**. ```csharp protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here ballTexture = Content.Load("ball"); } ``` Finally, find the Draw method to draw the ball onto the screen. This is done by: - Opening a SpriteBatch (an image drawing collection function). - Adding the images you want to draw and specifying where you want to draw them. - Then finally closing the SpriteBatch to commit the textures you want drawn to the screen. > **Note**: if you add multiple images, they will be drawn in the order you place them from back to front (each drawn on top of each other). As shown below: ```csharp protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here _spriteBatch.Begin(); _spriteBatch.Draw(ballTexture, new Vector2(0, 0), Color.White); _spriteBatch.End(); base.Draw(gameTime); } ``` Now run the game. You should get the following: ![Game](~/images/getting_started/3_game.png) **Next up:** [Adding Basic Code](5_adding_basic_code.md) ================================================ FILE: Documentation/articles/getting_started/5_adding_basic_code.md ================================================ # Adding Basic Code This tutorial will go over adding basic logic to your game, continuing from where [Adding Content](4_adding_content.md) left off. --- ## Positioning the content First, you need to add few new variables in the Game1.cs class file: one for position and one for speed. ```csharp public class Game1 : Game { Texture2D ballTexture; Vector2 ballPosition; float ballSpeed; ``` Next, you need to initialize them. Find the **Initialize** method and add the following lines. ```csharp // TODO: Add your initialization logic here ballPosition = new Vector2(_graphics.PreferredBackBufferWidth / 2, _graphics.PreferredBackBufferHeight / 2); ballSpeed = 100f; base.Initialize(); ``` With this, you are setting the ball's starting position to the center of the screen based on the dimensions of the screen determined by the current **BackBufferWidth** and **BackBufferHeight** that was obtained from the Graphics Device (the current resolution the game is running at). Lastly, change the Draw method to draw the ball at the correct position. Find the **Draw** method and update the **spriteBatch.Draw** call to: ```csharp _spriteBatch.Draw(ballTexture, ballPosition, Color.White); ``` Now run the game. ![Draw Ball 1](~/images/getting_started/4_ball_not_center.png) As you can see, the ball is not quite centered yet. That is because the default origin of a texture is its top-left corner, or (0, 0) relative to the texture, so the ball texture is drawn with its top-left corner exactly centered, rather than its actual center. You can specify a different origin when drawing, as shown in the following code snippet. The new origin takes into account the height and width of the image when drawing: ```csharp _spriteBatch.Draw( ballTexture, ballPosition, null, Color.White, 0f, new Vector2(ballTexture.Width / 2, ballTexture.Height / 2), Vector2.One, SpriteEffects.None, 0f ); ``` This change adds a few extra parameters to the spriteBatch.Draw call, but do not worry about that for now. This new code sets the actual center (width / 2 and height / 2) of the image as its origin (drawing point). Now the image will get drawn to the center of the screen. ![Draw Ball 2](~/images/getting_started/4_ball_center.png) --- ## Getting user input Time to set up some movement. Find the **Update** method in the Game1.cs class file and add: ```csharp // TODO: Add your update logic here var kstate = Keyboard.GetState(); if (kstate.IsKeyDown(Keys.Up)) { ballPosition.Y -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; } if(kstate.IsKeyDown(Keys.Down)) { ballPosition.Y += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; } if (kstate.IsKeyDown(Keys.Left)) { ballPosition.X -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; } if(kstate.IsKeyDown(Keys.Right)) { ballPosition.X += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; } base.Update(gameTime); ``` The following is a line-by-line analysis of the above code. ```csharp var kstate = Keyboard.GetState(); ``` This code fetches the current keyboard state ('Keyboard.GetState()') and stores it into a variable called **kstate**. ```csharp if (kstate.IsKeyDown(Keys.Up)) ``` This line checks to see if the Up Arrow key is pressed. ```csharp ballPosition.Y -= ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; ``` If the **Up Arrow** key is pressed, the ball moves using the value you assigned to **ballSpeed**. The reason why **ballSpeed** is multiplied by **gameTime.ElapsedGameTime.TotalSeconds** is because, when not using fixed time step, the time between Update calls varies. To account for this, the ballSpeed is multiplied by the amount of time that has passed since the last Update call. The result is that the ball appears to move at the same speed regardless of what framerate the game happens to be running at. > Try experimenting with what happens if you do not multiply the **ballSpeed** by **gameTime.ElapsedGameTime.TotalSeconds**, to see the difference it makes. The rest of the lines of code do the same thing but for the Down, Left and Right Arrow keys, and down, left, and right movement, respectively. If you run the game, you should be able to move the ball with the arrow keys. You will probably notice that the ball is not confined to the window. You can fix that by setting bounds onto the ballPosition after it has already been moved to ensure it cannot go further than the width or height of the screen. ```csharp if(kstate.IsKeyDown(Keys.Right)) { ballPosition.X += ballSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; } if(ballPosition.X > GraphicsDevice.Viewport.Width - ballTexture.Width / 2) { ballPosition.X = GraphicsDevice.Viewport.Width - ballTexture.Width / 2; } else if(ballPosition.X < ballTexture.Width / 2) { ballPosition.X = ballTexture.Width / 2; } if(ballPosition.Y > GraphicsDevice.Viewport.Height - ballTexture.Height / 2) { ballPosition.Y = GraphicsDevice.Viewport.Height - ballTexture.Height / 2; } else if(ballPosition.Y < ballTexture.Height / 2) { ballPosition.Y = ballTexture.Height / 2; } base.Update(gameTime); ``` Now run the game to test for yourself that the ball cannot go beyond the window bounds any more. Happy Coding ^^ ## Further Reading Check out the [Tutorials section](~/articles/tutorials.md) for many more helpful guides and tutorials on building games with MonoGame. We have an expansive library of helpful content, all provided by other MonoGame developers in the community. Additionally, be sure to check out the official [MonoGame Samples](~/articles/samples.md) page for fully built sample projects built with MonoGame and targeting our most common platforms. ================================================ FILE: Documentation/articles/getting_started/toc.yml ================================================ - name: 1. Setting up your development environment items: - name: Windows href: 1_setting_up_your_development_environment_windows.md - name: macOS href: 1_setting_up_your_development_environment_macos.md - name: Linux href: 1_setting_up_your_development_environment_ubuntu.md - name: 2. Creating a new project items: - name: Visual Studio 2022 href: 2_creating_a_new_project_vs.md - name: Visual Studio 2022 for Mac href: 2_creating_a_new_project_vsm.md - name: .NET CLI (Rider or Visual Studio Code) href: 2_creating_a_new_project_netcore.md - name: 3. Understanding the Code href: 3_understanding_the_code.md - name: 4. Adding Content href: 4_adding_content.md - name: 5. Adding Basic Code href: 5_adding_basic_code.md ================================================ FILE: Documentation/articles/help_and_support.md ================================================ # Help and Support There is a wealth of [community created content, blogs and tutorials](tutorials.md) available. If you want to find an answer to a more specific problem, you can ask it on our [community site](https://community.monogame.net/). You can also chat to other MonoGame users via [Discord](https://discord.gg/xCehJFD) using the links below [![Discord](~/images/third_party/discordlogo.png)](https://discord.gg/xCehJFD) ## Bugs and feature requests If you find a bug or have a feature request, [please open a new issue](https://github.com/mono/monogame/issues). Before opening any issue, please search for existing issues. Please note that the issue tracker is not for requesting help. ================================================ FILE: Documentation/articles/migrate_37.md ================================================ # Migrating from 3.7 Previously MonoGame installed on your machine through an installer, but from 3.8 onwards everything is installed through NuGet packages and Visual Studio Extensions. > **Note** MonoGame 3.8 project templates are not compatible with earlier versions of MonoGame. If you wish to work on or build older MonoGame projects, then you will still need to install [MonoGame 3.7.1](https://www.monogame.net/downloads/) or earlier to open them. ## WindowsDX and DesktopGL WindowsDX and DesktopGL templates now use SDK-style projects. To migrate old projects we recommend creating a new project with the 3.8+ templates and copying the csproj to your project folder. Make sure you back up your old project. > For more information about SDK-style projects see the [documentation](https://docs.microsoft.com/en-us/dotnet/core/tools/csproj). ## Other Platforms To migrate open up your project file in a text editor. The reference to the MonoGame assembly looks like this: ```xml $(MonoGameInstallDirectory)\MonoGame\v3.0\Assemblies\{Platform}\MonoGame.Framework.dll ``` The task to build your content is imported at the end of the project file like this: ```xml ``` You can remove these references and add a reference to the MonoGame NuGet packages instead. ```xml ``` ## Tooling MonoGame tools (MGCB, 2MGFX, and the Pipeline Tool) are now distributed as [.NET Tools](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools) automatically when using any of the MonoGame 3.8.1 templates. The templates also build your .mgcb files automatically thanks to the `MonoGame.Content.Builder.Task` NuGet package. The Pipeline Tool has been renamed MonoGame Content Builder Editor (MGCB Editor) and does not require an installation anymore (providing that you are using the MonoGame 3.8.1 templates). The Visual Studio 2022 extensions make .mgcb files within your solution clickable and will open the MGCB Editor on them. ================================================ FILE: Documentation/articles/migrate_38.md ================================================ # Migrating from 3.8.0 Migrating from 3.8.0 should be straightforward for most platforms. The major difference is that 3.8.1 now requires .NET 6 and Visual Studio 2022. You can follow the [environment setup tutorial](./getting_started/0_getting_started.md) to make sure that you are not missing any components. The MGCB Editor is no longer a global .NET tool and we recommend that you use the new Visual Studio 2022 extension which helps accessing it without the need of CLI commands. ## WindowsDX, DesktopGL, and UWP Upgrading from 3.8.0 should be as straightforward as upgrading your ```TargetFramework``` and MonoGame version. Edit your csproj file to change your ```TargetFramework```: ```xml net6.0 ``` Then edit your MonoGame ```PackageReference``` to point to 3.8.1: ```xml ``` ### Accessing MGCB and MCGB Editor without a global tool MGCB Editor is no longer a .NET global tool, and doesn't need to be installed or registered. However, if you are migrating from 3.8.0, you will need to setup a configuration file. Next to your ```.csproj```, create a folder nammed ```.config``` and a file within it nammed ```dotnet-tools.json``` with this content: ```json { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.263", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.263", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.263", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.263", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.263", "commands": [ "mgcb-editor-mac" ] } } } ``` Please note that you can't use the ```3.8.1.*``` wildcard in the ```dotnet-tools.json``` file (tool versions have to be fully qualified). We strongly recommand that the versions match the MonoGame version referenced in your ```.csproj``` (if you're using the ```*``` wildcard, make sure that they don't end up mismatching if the nugets are updated without you noticing). You will also need to add this to your ```.csproj```: ```xml ``` With these changes, .NET will automatically install the MGCB Editor for you when launching Visual Studio 2022 (if you want to install it manually and skip adding the Target, run ```dotnet tool restore``` within the project directory). Then, if you installed the Visual Studio extension, you should also be able to just double-click an ```.mgcb``` file to open the MGCB Editor. You can also open the MGCB Editor with the CLI via ```dotnet mgcb-editor``` when executed from within the project directory. This new configuration has the advantage of allowing to have per-project versions of MGCB and its Editor (instead of per-machine like a global tool). ## iOS/iPadOS, and Android .NET 6 introduced breaking changes in how csproj are defined for iOS/iPadOS and Android. We recommand that you create new projects using the 3.8.1 templates and that you copy over your project files there. ================================================ FILE: Documentation/articles/migrate_381.md ================================================ # Migrating from MonoGame 3.8.1 to KNI 4.2 ## Migrating Framework Edit your .csproj file of the main project and replace: ```xml ``` to: ```xml ``` where {Platform} maps as follows. - Android - > Android.GL - DesktopGL - > SDL2.GL - iOS -> iOS.GL - WindowsUniversal -> UAP.DX11 - WindowsDX - > WinForms.DX11 For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ### Migrating Framework (Android) Edit your Activity1.cs file and replace: ```xml ScreenOrientation = ScreenOrientation.FullUser, ``` To: ```xml ScreenOrientation = ScreenOrientation.FullSensor, ``` ## Migrating Content Builder Edit your .csproj file and add: ```xml {Platform} ``` Where {Platform} is Windows, DesktopGL, Android, etc. Then replace: ```xml ``` With: ```xml ``` Then rename 'MonoGameContentReference': ```xml ``` With 'KniContentReference': ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ## Migrating Effects Edit your .fx file and rename 'VS_SHADERMODEL' and 'PS_SHADERMODEL': ``` pass Pass0 { VertexShader = compile VS_SHADERMODEL VSMethod(); PixelShader = compile PS_SHADERMODEL PSMethod(); } ``` With 'vs_4_0_level_9_1' and 'ps_4_0_level_9_1': ``` pass Pass0 { VertexShader = compile vs_4_0_level_9_1 VSMethod(); PixelShader = compile ps_4_0_level_9_1 PSMethod(); } ``` Then remove: ``` #if OPENGL #define SV_POSITION POSITION #define VS_SHADERMODEL vs_3_0 #define PS_SHADERMODEL ps_3_0 #else #define VS_SHADERMODEL vs_4_0_level_9_1 #define PS_SHADERMODEL ps_4_0_level_9_1 #endif ``` Replace the following defines: DEBUG with `__DEBUG__`
MGFX with `__KNIFX__`
HLSL and SM4 with `__DIRECTX__`
GLSL and OPENGL with `__GL__` or (`__OPENGL__` || `__GLES__`)
## Trimming (optional) ### Enable Trimming (Android) Edit your .csproj file and add: ```xml True partial ``` ### Enable Trimming and Aot (DesktopGL) Edit your .csproj file and upgrade TargetFramework from net6.0 to net8.0. Then add: ```xml True True ``` ================================================ FILE: Documentation/articles/migrate_3_10.md ================================================ # Migrating from 3.10 to 3.11 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and remove: ```xml ``` Then add: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating BlazorGL projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` Edit index.html file and replace: ``` ``` with: ``` ``` ### Migrating OculusVR projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` ## Trimming ### Enable Trimming (Android) Edit your .csproj file and add: ```xml True partial ``` ### Enable Trimming (BlazorGL) Edit your .csproj file and upgrade TargetFramework from net6.0 to net8.0. Trimming is enabled by default. ### Enable Trimming and Aot (DesktopGL) Edit your .csproj file and upgrade TargetFramework from net6.0 to net8.0. Then add: ```xml True True ``` ================================================ FILE: Documentation/articles/migrate_3_11.md ================================================ # Migrating from 3.11 to 3.12 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ================================================ FILE: Documentation/articles/migrate_3_12.md ================================================ # Migrating from 3.12 to 3.13 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating BlazorGL projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` Edit index.html file and replace: ``` ``` with: ``` ``` ### Migrating OculusVR projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` ================================================ FILE: Documentation/articles/migrate_3_13.md ================================================ # Migrating from 3.13 to 3.14 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating BlazorGL projects Edit index.html file and replace: ``` ``` with: ``` ``` ### Migrating OculusVR projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` ================================================ FILE: Documentation/articles/migrate_3_14.md ================================================ # Migrating from 3.14 to 4.0 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` where {Platform} maps as follows. - Android - > Android.GL - BlazorGL - > Blazor.GL - Cardboard - > Cardboard.GL - DesktopGL - > SDL2.GL - iOS -> iOS.GL - WindowsUniversal -> UAP.DX11 - WindowsDX - > WinForms.DX11 For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating BlazorGL projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` Edit index.html file and replace: ``` ``` with: ``` ``` after this line: ``` import { BrotliDecode } from './js/decode.min.js'; ``` add ``` import { BrotliDecode } from './js/decode.min.js'; window.BrotliDecode = BrotliDecode; ``` ### Migrating OculusVR projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` In Program.cs, before creating the the Game instance, ``` using (var game = new $ext_safeprojectname$Game()) game.Run(); ``` add: ``` Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory()); using (var game = new $ext_safeprojectname$Game()) game.Run(); ``` ================================================ FILE: Documentation/articles/migrate_4_0.md ================================================ # Migrating from 4.0 to 4.1 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating Blazor.GL projects Edit /wwwroot/css/app.css file and replace: ``` #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; } ``` with: ``` #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; /* Disable text highlighting and magnifying glass on iPhone/webkit */ -webkit-user-select: none; } ``` ### Migrating Oculus.GL projects Edit your AndroidManifest.xml file and add: ```xml ``` ================================================ FILE: Documentation/articles/migrate_4_1.md ================================================ # Migrating from 4.1 to 4.2 ## Migrating Framework Edit your .csproj file and replace: ```xml ``` to: ```xml ``` For libraries, edit your .csproj file and replace: ```xml ``` to: ```xml ``` ## Migrating Content Builder Edit your .csproj file and replace: ```xml ``` to: ```xml ``` if your importers require Windows libraries (WinForms,WPF), use the 'nkast.Xna.Framework.Content.Pipeline.Builder.Windows' package. ### Migrating Blazor.GL projects Edit your .csproj file and replace: ```xml ``` with: ```xml ``` Edit index.html file and replace: ```xml ``` with: ```xml ``` Create a new Blazor.GL project, and copy the files: \wwwroot\js\micProcessor.js \wwwroot\js\streamProcessor.js ### Migrating Oculus.GL projects Edit your Application.csproj file and after , add: ```xml 32.0 ``` ## Migrating Effects Edit your .fx file and replace the following defines: replace DEBUG with `__DEBUG__`
replace MGFX with `__KNIFX__`
replace HLSL and SM4 with `__DIRECTX__`
replace GLSL , OPENGL and `__OPENGL__` with `__GL__` or (`__OPENGL__` || `__GLES__`)
================================================ FILE: Documentation/articles/migrate_xna.md ================================================ # Migrating from XNA MonoGame is API compatible with [XNA 4.0](https://docs.microsoft.com/en-us/previous-versions/windows/xna/bb200104(v=xnagamestudio.41)) even down to the namespaces. That means you do not have to change much of your game code to port from XNA to MonoGame. There are however some exceptions and some things to keep in mind. > If your game targets XNA 3.1, you might want to use this archived migration cheatsheet to upgrade to 4.0: > > [http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/](https://www.nelsonhurst.com/xna-cheatsheet/) ## Missing/removed API - The Storage namespace was removed due to portability issues (short discussion [here](https://github.com/MonoGame/MonoGame/issues/4311)). - GamerServices was removed. This part of MonoGame was badly maintained due to low usage and difficulties in providing the GamerServices API for different platforms. - The Net namespace was removed due to its cost of maintenance. ## Effects MonoGame does not use the legacy fxc compiler for effects that XNA used. Instead, MonoGame uses the DX11 compiler. The way MonoGame handles shaders imposes some restrictions and causes some caveats in what is and is not supported. This is all documented in the [custom effects](content/custom_effects.md) documentation page. ## Half pixel offset XNA uses the DirectX 9 graphics API. MonoGame uses the newer Direct X 11 API for DirectX platforms. DirectX 9 interprets UV coordinates differently from other graphics API's. This is typically referred to as the half-pixel offset. MonoGame supports replicating XNA's behavior (currently only on OpenGL platforms) by setting the `PreferHalfPixelOffset` flag in [`GraphicsDeviceManager`](xref:Microsoft.Xna.Framework.GraphicsDeviceManager) to `true`. This flag is set to `false` by default to encourage users to use the modern style of pixel addressing. DirectX platforms will ignore setting the `PreferHalfPixelOffset` flag and will always render with a half pixel offset compared to XNA. This is usually not noticeable. This value is passed to `UseHalfPixelOffset` in [`GraphicsDevice`](xref:Microsoft.Xna.Framework.Graphics.GraphicsDevice). If `UseHalfPixelOffset` is `true`, you have to add half-pixel offset to a Projection matrix. [`SpriteBatch`](xref:Microsoft.Xna.Framework.Graphics.SpriteBatch) rendering is not affected by the flag. Regardless of what value the flag has, `SpriteBatch` will render things exactly the same as in XNA. If you migrated your game from XNA and some things seem blurred out or very slightly offset, you may want to try to enable the `PreferHalfPixelOffset` flag. ================================================ FILE: Documentation/articles/packaging_games.md ================================================ # Package games for distribution Once your game is ready to be published, it is recommended that you package it properly for consumption by players. ## Desktop games To publish desktop games, it is recommended that you build your project as a [self-contained](https://docs.microsoft.com/en-us/dotnet/core/deploying/#publish-self-contained) .NET application. As such, your game will require absolutely no external dependencies and should run out-of-the-box as-is. ### Building and packaging for Windows From the .NET CLI: `dotnet publish -c Release -r win-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained` You can then zip the content of the publish folder and distribute the archive as-is. If you are targeting WindowsDX, note that players will need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) to be installed on their machine for audio and gamepads to work properly. ### Building and packaging for Linux From the .NET CLI: `dotnet publish -c Release -r linux-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained` You can then archive the content of the publish folder and distribute the archive as-is. We recommend using the .tar.gz archiving format to preserve the execution permissions. ### Build and packaging for macOS From the .NET CLI: ``` dotnet publish -c Release -r osx-x64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained dotnet publish -c Release -r osx-arm64 /p:PublishReadyToRun=false /p:TieredCompilation=false --self-contained ``` We recommend that you distribute your game as an [application bundle](https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html). Application bundles are directories with the following file structure: ``` YourGame.app                    (this is your root folder)     - Contents         - Resources             - Content           (this is where all your content and XNB's should go)             - YourGame.icns     (this is your app icon, in ICNS format)         - MacOS - amd64 (this is where your game executable for amd64 belongs, place files from the osx-x64/publish directory here) - amd64 (this is where your game executable for arm64 belongs, place files from the osx-arm64/publish directory here) - YourGame (the entry point script of your app, see bellow for contents)      - Info.plist            (the metadata of your app, see bellow for contents) ``` The contents of the entry point script: ```sh #!/bin/bash cd "$(dirname $BASH_SOURCE)/../Resources" if [[ $(uname -p) == 'arm' ]]; then ./../MacOS/arm64/YourGame else ./../MacOS/amd64/YourGame fi ``` The Info.plist file is a standard macOS file containing metadata about your game. Here's an example file with required and recommended values set: ```xml CFBundleDevelopmentRegion en CFBundleExecutable YourGame CFBundleIconFile YourGame CFBundleIdentifier com.your-domain.YourGame CFBundleInfoDictionaryVersion 6.0 CFBundleName YourGame CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature FONV CFBundleVersion 1 LSApplicationCategoryType public.app-category.games LSMinimumSystemVersion 10.15 NSHumanReadableCopyright Copyright © 2022 NSPrincipalClass NSApplication LSRequiresNativeExecution LSArchitecturePriority arm64 ``` For more information about Info.plist files, see the [documentation](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). After completing these steps, your .app folder should appear as an executable application on macOS. For archiving, we recommend using the .tar.gz format to preserve the execution permissions (you will likely run into permission issues if you use .zip at any point). ## Special notes about .NET parameters .NET proposes several parameters when publishing apps that may sound helpful, but have many issues when it comes to games (because they were never meant for games in the first place, but for small lightweight applications). ### ReadyToRun (R2R) [ReadyToRun](https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#readytorun-images) is advertised as improving application startup time, but slightly increasing binary size. We recommend not using it for games, because it produces micro stutters when your game is running. Ready2Run code is of low quality and makes the Just-In-Time compiler (JIT) to trigger regularly to promote the code to a higher quality. Whenever the JIT runs, it produces potentially very visible stutters. Disabling ReadyToRun solves this issue (at the cost of a slightly longer startup time, but typically very negligible). ReadyToRun is disabled by default. You can configure it by setting the `PublishReadyToRun` property in your csproj file. MonoGame templates for .NET projects explicitly set this to `false`. ### Tiered compilation [Tiered compilation](https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#tiered-compilation) is a companion system to ReadyToRun and works on the same principle to enhance startup time. We suggest disabling it to avoid any stutter while your game is running. Tiered compilation is **enabled by default**. To disable it set the `TieredCompilation` property to `false` in your csproj. MonoGame templates for .NET projects explicitly set this to `false`. ### SingleFilePublish SingleFilePublish packages your game into a single executable file with all dependencies and content integrated. While it sounds very convenient, be aware that it's not magical and is in fact a hidden self-extracting zip archive. As such, it may make app startup take **a lot** longer if your game is large, and may fail to launch on systems where user permissions don't allow extracting files (or if there is not enough storage space available). We highly recommend not using it for better compatibility across systems. ## Windows Store games Please refer to the [Windows Store documentation](https://docs.microsoft.com/en-us/windows/uwp/publish/). ## Mobile games Please refer to the Xamarin documentation: - [Android](https://docs.microsoft.com/en-us/xamarin/android/deploy-test/publishing/) - [iOS](https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/app-distribution/app-store-distribution/publishing-to-the-app-store?tabs=windows) ================================================ FILE: Documentation/articles/platforms.md ================================================ # Supported Platforms MonoGame supports building games for the following **systems**: | **Desktop PCs** | **Mobiles** | | --------------------------- | -------------------------- | | Windows
OculusVR
Web
macOS
Linux | iOS
iPadOS
Android | **Gaming consoles are restricted to registered developers and are not publicly available nor publicly documented. To get access to those platforms, please contact your console account manager(s). MonoGame documentation for closed platforms is available in their respective repositories.* ## Understanding MonoGame's platform types There are different implementations of MonoGame that we call **target platforms** (or just **platforms**). The platforms mostly correspond to the systems MonoGame supports but some platforms support multiple systems. For instance, the *DesktopGL* platform can be used to build games that will run either on Windows, macOS, or Linux with the same base code and project. Each platform comes with its own project template that you can choose when starting a project. Below is a list of public platforms with their corresponding NuGet package, the `dotnet new` template identifier, and an explanation of the platform. - [WindowsDX](#windowsdx) - [DesktopGL](#desktopgl) - [Windows Universal](#windowsuniversal) - [Android](#android) - [iOS](#ios) Beside these target platforms, MonoGame provides additional templates for shared game logic and extensions to the MonoGame Content Pipeline that can be used across all platforms. - [.NET Standard Library](#net-standard-library) - [Shared Project](#shared-project) - [Content Pipeline Extension](#content-pipeline-extension) ## Platform details ### WindowsDX | **Supported Systems** | **NuGet Package** | **Template ID** | | --------------------- | ---------------------------- | --------------- | | Windows | MonoGame.Framework.WindowsDX | mgwindowsdx | WindowsDX uses WinForms to manage the game window, **DirectX** (9.0c or newer) is used for graphics, and XAudio is used for audio. You can target **Windows*** 8.1 and up with this platform. WindowsDX requires the [DirectX June 2010](https://www.microsoft.com/en-us/download/details.aspx?id=8109) runtime to both build and run games. Make sure that your players have it installed (otherwise you might be missing sound and gamepad rumble support). ### DesktopGL | **Supported Systems** | **NuGet Package** | **Template ID** | | --------------------- | ---------------------------- | --------------- | | Windows, macOS, Linux | MonoGame.Framework.DesktopGL | mgdesktopgl | DesktopGL uses SDL for windowing, **OpenGL** for graphics, and OpenAL-Soft for audio. DesktopGL supports **Windows** (8.1 and up), **macOS** (Catalina 10.15 and up) and **Linux** (64bit-only). DesktopGL requires at least OpenGL 2.0 with the ARB_framebuffer_object extension (or alternatively at least OpenGL 3.0). DesktopGL is a convenient way to publish builds for Windows, macOS, and Linux from a single project and source code. It also allows to cross-compile any build from any of these operating systems (e.g. you can build a Linux game from Windows). You can target Windows 8.1 (and up), macOS Catalina 10.15 (and up), and Linux with this platform. DesktopGL currently does not have a `VideoPlayer` implementation. ### WindowsUniversal | **Supported Systems** | **NuGet Package** | **Template ID** | | ------------------------------------ | ----------------------------------- | --------------------------------------------------- | | Windows 10, Xbox (UWP-only, not XDK) | MonoGame.Framework.WindowsUniversal | mguwpcore (core app, no xaml), mguwpxaml (xaml app) | The WindowsUniversal platform runs on [Universal Windows Platform (UWP)](https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide). WindowsUniversal uses **DirectX** for graphics, and XAudio for audio just like the WindowsDX platform. UWP comes in two flavors, each with its own project template: - **XAML app template**: an app in which your game will be hosted within an XAML page. This can be useful if you wish to offer a more complex UWP experience with multiple pages or XAML controls. - **Core app template**: a raw app without any XAML, more straightforward if you don't need XAML controls. This platform is meant to publish games on the **Windows Store**, for both **Windows** and **Xbox** (through the [Xbox Live Creators Program](https://www.xbox.com/en-US/developers/creators-program)). Note that UWP games running on Xbox get [restricted access](https://docs.microsoft.com/en-us/windows/uwp/xbox-apps/system-resource-allocation) to the console capabilities. To unlock those restrictions, MonoGame has a dedicated Xbox platform for registered [ID@Xbox](https://www.xbox.com/en-US/Developers/id) developers targeting the XDK (this platform is private and requires you to contact your ID@Xbox manager). Building for UWP requires the Windows SDK version 22621 or better to be installed. ### Android | **Supported Systems** | **NuGet Package** | **Template ID** | | --------------------- | -------------------------- | --------------- | | Android | MonoGame.Framework.Android | mgandroid | The Android platform uses [Xamarin.Android](https://docs.microsoft.com/en-us/xamarin/android/). **OpenGL** is used for graphics, and OpenAL for audio. Building for Android requires the .NET Xamarin component to be installed. You can install it with the Visual Studio installer (if you're using Visual Studio) or with the CLI command ```dotnet workload install android``` (if you're working with Rider, VS Code, or the CLI). Building for Android also requires the Java 11 JDK (we recommand that you use [the Microsoft's distribution](https://docs.microsoft.com/en-us/java/openjdk/download#openjdk-11)) as well as the Android SDK 31. ### iOS | **Supported Systems** | **NuGet Package** | **Template ID** | | --------------------- | ---------------------- | --------------- | | iOS, iPadOS | MonoGame.Framework.iOS | mgios | The iOS platform uses [Xamarin.iOS](https://docs.microsoft.com/en-us/xamarin/ios/). **OpenGL** is used for graphics, and OpenAL for audio. Building for Android requires the .NET Xamarin component to be installed. You can install it with the Visual Studio installer (if you're using Visual Studio) or with the CLI command `dotnet workload install ios` (if you're working with Rider, VS Code, or the CLI). The latest version of Xcode will also be required. You can test and deploy an iOS game on Windows by [pairing your Visual Studio 2022 with a mac on your local network](https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/windows/connecting-to-mac/). This feature is not avaible for Rider, Visual Studio Code, or the CLI. ## Other templates ### .NET Standard Library **Template ID**: mgnetstandard A project template to create [.NET Standard](https://docs.microsoft.com/en-us/dotnet/standard/net-standard) libraries to distribute code through a DLL. This can be used to redistribute libraries or to share code between multiple projects (like different platforms). ### Shared Project **Template ID**: mgshared A project template to create a [shared project](https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/shared-projects) which can be used to share code between multiple other projects. The difference with .NET Standard libraries is that shared projects don't produce an intermediate DLL and the code is directly shared and built into the other projects it reference. ### Content Pipeline Extension **Template ID**: mgpipeline A project template for writing custom logic for handling content and building it into XNB files. # ================================================ FILE: Documentation/articles/samples.md ================================================ # Samples & Demos The samples and demos below are recommended for learning how to use MonoGame. ## Official MonoGame Samples These are [the official samples](https://github.com/MonoGame/MonoGame.Samples) that contain the following: - [Platformer 2D](https://github.com/MonoGame/MonoGame.Samples/tree/develop/Platformer2D) - [NeonShooter](https://github.com/MonoGame/MonoGame.Samples/tree/develop/NeonShooter) ## XNA Game Studio Archive The [XNA Game Studio archive](https://github.com/SimonDarksideJ/XNAGameStudio) contains all of the original XNA sample content. This contains a vast array of samples demonstrating almost every feature of XNA, which is easily translatable to MonoGame. There are pre-converted samples available on the repository as well. ## MonoGame.Extended Samples [MonoGame.Extended](https://github.com/craftworkgames/MonoGame.Extended) is an extension for MonoGame that makes it easier to make games. They have [demos](https://github.com/craftworkgames/MonoGame.Extended-samples/tree/master/src/Demos) and [games](https://github.com/craftworkgames/MonoGame.Extended-samples/tree/master/src/Games) that can be tried out. ## CartBlanche's Samples This is a [large library of MonoGame samples](https://github.com/CartBlanche/MonoGame-Samples) covering a large range of topics, including: > Will require MonoGame 3.7 or earlier installed to open. - Physics - P2P Networking - Textures - Shaders It also includes games such as: - Tetris - Pacman - Role Playing Game ================================================ FILE: Documentation/articles/toc.yml ================================================ - name: Introduction href: ../index.md - name: What's New href: whats_new.md - name: Getting Started href: getting_started/toc.yml topicHref: getting_started/0_getting_started.md - name: Tools href: tools/toc.yml topicHref: tools/tools.md - name: Content Pipeline href: content/toc.yml topicHref: content/content.md - name: Supported platforms href: platforms.md - name: Migrating from 3.7 href: migrate_37.md - name: Migrating from 3.8.0 href: migrate_38.md name: Migrating from 3.10.9001 href: migrate_3_10.md - name: Migrating from XNA href: migrate_xna.md - name: Packaging href: packaging_games.md - name: Samples and Demos href: samples.md - name: Community Tutorials href: tutorials.md - name: Help and Support href: help_and_support.md ================================================ FILE: Documentation/articles/tools/knifxc.md ================================================ # KNI Effects Compiler (KNIFXC) The KNIFXC tool is used to compile [DirectX Effect files](https://docs.microsoft.com/en-us/windows/win32/direct3d9/writing-an-effect) (shaders) for usage with KNI. It will compile shaders into fxo files ready to be consumed by the ```Effect``` class. The KNIFXC uses the EffectProcessor to compile effects and extract them from the xnb file. If you compile effects with KNIFXC you can load effects using the `Microsoft.Framework.Xna.Graphics.Effect` constructor that takes a byte array with the effect code. Effects compiled with KNIFXC are not content files and can not be loaded by the `ContentManager`. ## Installation KNIFXC can be installed as a [.NET tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools). Make sure you have the .NET SDK installed. You can download it [here](https://dotnet.microsoft.com/download). In a terminal run `dotnet tool install -g dotnet-knifxc` to install KNIFXC. ## Command Line The command line options are: ```bat KNIFXC [/Debug] [/Platform:] ``` ### Source File The input effect file in typical FX format with samplers, techniques, and passes defined. This parameter is required. ### Output File The path to write the compiled effect to. This parameter is required. NOTE: The generated file is not an XNB file for use with the ContentManager. If the `/Debug` flag is passed the resulting compiled effect file will contain extra debug information and the fewest possible optimizations. ### Platform Profile The `/Platform` option defines the platform we're targeting with this effect file. It can be one of the following: - Windows - DesktopGL - Android ### Help If you use `/?`, `/help`, or simply pass no parameters to KNIFXC you will get information about these command-line options. ## Runtime Use The resulting compiled effect file can be used from your game code like so: ```csharp byte[] bytecode = File.ReadAllBytes("mycompiled.fxo"); var effect = new Effect(bytecode); ``` This is how the stock effects (BasicEffect, DualTextureEffect, etc) are compiled and loaded. ================================================ FILE: Documentation/articles/tools/mgcb.md ================================================ # MonoGame Content Builder (MGCB) The MonoGame Content Builder is a command line tool for building XNB content on Windows, Mac, and Linux desktop systems. Typically, it is executed by the [MGCB Editor](mgcb_editor.md) when editing content or by `MonoGame.Content.Builder.Task` during the build process of a MonoGame project. Alternatively you can use it yourself from the command line for specialized build pipelines or for debugging content processing. ## Installation MGCB can be installed as a [.NET tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools). Make sure you have the .NET SDK installed. You can download it [here](https://dotnet.microsoft.com/download). In a terminal run `dotnet tool install -g dotnet-mgcb` to install MGCB. Then you can execute MGCB by simply running `mgcb`. ## Command Line Options The options are processed “left to right”. When an option is repeated, it is overwritten. ### Output Directory ``` /outputDir: ``` Specifies the directory where all content is written. Defaults to the current working directory. ### Intermediate Directory ``` /intermediateDir: ``` Specifies the directory where all intermediate files are written. Defaults to the current working directory. ### Rebuild Content ``` /rebuild ``` Force a full rebuild of all content. ### Clean Content ``` /clean ``` Delete all previously built content and intermediate files. Only the `/intermediateDir` and `/outputDir` need to be defined for clean to do its job. ### Incremental Build ``` /incremental ``` Only build content that changed since the last build. ### Assembly Reference ``` /reference: ``` An optional parameter which adds an assembly reference which contains importers, processors, or writers needed during content building. ### Target Platform ``` /platform: ``` Set the target platform for this build. It must be a member of the [TargetPlatform](xref:Microsoft.Xna.Framework.Content.Pipeline.TargetPlatform) enum: * Windows * iOS * Android * DesktopGL * WindowsStoreApp * WebGL If not set, it will default to Windows. ### Target Graphics Profile ``` /profile: ``` Set the target graphics profile for this build. It must be a member of the [GraphicsProfile](xref:Microsoft.Xna.Framework.Graphics.GraphicsProfile) enum: * Reach * HiDef If not set, it will default to HiDef. ### Target Build Configuration ``` /config: ``` The optional build configuration name from the build system. This is sometimes used as a hint in content processors. ### Content Compression ``` /compress ``` Uses LZ4 compression to compress the contents of the XNB files. Content build times will increase with this option enabled. Compression is not recommended for Android as the app package is already compressed. This is not compatible with LZX compression used in XNA content. ### Content Importer Name ``` /importer: ``` An optional parameter which defines the class name of the content importer for reading source content. If the option is omitted or used without a class name the default content importer for the source type is used. ### Content Processor Name ``` /processor: ``` An optional parameter which defines the class name of the content processor for processing imported content. If the option is omitted used without a class name the default content processor for the imported content is used. Note that when you change the processor all previously defined `/processorParam` are cleared. ### Content Processor Parameter ``` /processorParam:= ``` An optional parameter which defines a parameter name and value to set on a content processor. Note all defined processor parameters are cleared when the `/processor` is set. ### Build Content File ``` /build: /build:; ``` Instructs the content builder to build the specified content file using the previously set switches and options. Optional destination path may be specified if you want to change the output file path. ### Launch Debugger ``` /launchdebugger ``` Allows a debugger to attach to the MGCB executable before content is built. ### Response File ``` /@: ``` This defines a text response file (sometimes called a command file) that contains the same options and switches you would normally find on the command line. Each switch is specified on a new line. Comment lines are prefixed with #. These lines are ignored. You can specify multiple response files or mix normal command line switches with response files. An example response file could look like this: ``` # Directories /outputDir:bin/foo /intermediateDir:obj/foo /rebuild # Build a texture /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyEnabled=false /build:Textures\wood.png /build:Textures\metal.png /build:Textures\plastic.png ``` #### Preprocessor Macros Response files support preprocessor macros to allow conditionals within a response file. ``` $if = $endif ``` Preprocessor symbols can be defined from the command line with the `define` option or in a response file with the `$set` directive. ``` MGCB.exe /define:BuildEffects=No /@:example.mgcb $if BuildEffects=Yes /importer:EffectImporter /processor:EffectProcessor /build:Effects\custom.fx # all other effects here.... $endif ``` ``` $set BuildEffects=Yes $if BuildEffects=Yes # ... # This is executed $endif ``` For booleans you can omit a value to set a symbol and to check if it is set: ``` $set BuildEffects $if BuildEffects # ... # This is executed $endif ``` ### Customizing your Build Process When building content from your project with `MonoGame.Content.Builder.Task`, there are a few ways to hook into the build process. `MonoGame.Content.Builder.Task` runs a target called `RunContentBuilder` just before your project builds. If you want to do any processing before or after this process you can use the `BeforeTargets` and `AfterTargets` mechanism provided by `msbuild` to run your own targets. ``` ``` If you want to customize the arguments sent to the `MGCB.exe` as part of the build process you can use the `` property to define those. For example to pass in the current project configuration you could include the following code in a PropertyGroup in your .csproj file. ``` -config:$(Configuration) ``` ================================================ FILE: Documentation/articles/tools/mgcb_editor.md ================================================ # MGCB Editor MonoGame Content Builder (MGCB) Editor is the front-end GUI editor for MonoGame content builder projects. ![MCGB Editor](~/images/MGCB-editor.png) The MGCB Editor has the following features: * Create, open, and save MGCB projects. * Import existing XNA .contentproj. * Tree view showing content of project. * Property grid for editing content settings. * Full undo/redo support. * Build, rebuild, and clean the project. * Rebuild selected items. * Create new content like fonts and xml. * Support for custom importers/processors/writers. * Template format for adding new custom content types. ## Installation Instructions The MGCB Editor is automatically installed (if you are using MonoGame's templates) and accessible by double-clicking an .mgcb file from Visual Studio 2022 (if you have the extension installed). Alternatively, you can open the MGCB Editor from the .NET command line. This will only work if you are using the MonoGame templates and executing the command from the root directory of your project: ``` dotnet mgcb-editor ``` If it is the first time you run the tool, you might need to restore tools first (.NET should invite you to do so if you try the above command): ``` dotnet tool restore ``` See [Using MGCB Editor](~/articles/content/using_mgcb_editor.md) for more information. ================================================ FILE: Documentation/articles/tools/toc.yml ================================================ - name: MGCB href: mgcb.md - name: MGCB Editor href: mgcb_editor.md - name: KNIFXC href: knifxc.md ================================================ FILE: Documentation/articles/tools/tools.md ================================================ # Tools MonoGame distributes tooling to help manage and build content for your game. These tools are available as [.NET Tools](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools) and are automatically installed if you are using the MonoGame templates. Usage instructions are on the following pages: - [MonoGame Content Builder](mgcb.md) (MGCB): used to build content pipeline content. - [MGCB Editor](mgcb_editor.md): The MonoGame Content Builder (MGCB) Editor is a graphical front end to edit mgcb files. - [KNI Effect Compiler](knifxc.md) (KNIFXC): used to compile stand alone effects (shaders). ================================================ FILE: Documentation/articles/tutorials.md ================================================ # Tutorials Check out the awesome work of the larger MonoGame community with their own tutorials, blogs and videos. > If you have a blog or article on MonoGame and wish to have it recognized here, reach out to the MonoGame team using the [support links listed on the help page](help_and_support.md). ## Microsoft - [Archived XNA Game Studio documentation](https://docs.microsoft.com/en-us/previous-versions/windows/xna/bb200104(v=xnagamestudio.41)) - [XNA Game Studio educational resources archive](https://github.com/SimonDarksideJ/XNAGameStudio) ## RB Whitaker's MonoGame Tutorials - [1 - C# Crash Course](http://rbwhitaker.wikidot.com/c-sharp-tutorials) - [2 - MonoGame Getting started tutorials](http://rbwhitaker.wikidot.com/monogame-getting-started-tutorials) - [3 - MonoGame 2D tutorials](http://rbwhitaker.wikidot.com/monogame-2d-tutorials) - [4 - 3D tutorials](http://rbwhitaker.wikidot.com/monogame-3d-tutorials) - [Extra - XNA tutorials](http://rbwhitaker.wikidot.com/xna-tutorials) ## Neil Danson's F# series - [Part 1 - MacOS](http://neildanson.wordpress.com/2013/07/30/f-and-monogame/) - [Part 2 - Android](http://neildanson.wordpress.com/2013/07/31/f-and-monogame-part-2-android/) - [Part 3 - iOS](http://neildanson.wordpress.com/2013/07/31/f-and-monogame-part-3-ios/) - [Part 4 - Content Pipeline](http://neildanson.wordpress.com/2013/08/13/f-and-monogame-part-4-content-pipeline/) ## Darkside of MonoGame video series - [Getting Started with MonoGame using Visual Studio 2019](https://www.youtube.com/watch?v=BahlvXQcJw4) - [Getting Started with MonoGame using Visual Studio for Mac](https://www.youtube.com/watch?v=Hxo9A0-qcVo) - [Getting Started with MonoGame using the command-line](https://www.youtube.com/watch?v=MOcZriFLt7c) - [Walk-through setting up your Mac for MonoGame CLI](https://www.youtube.com/watch?v=2c_41vMhDYo) - [Getting Started with MonoGame using 2D](https://www.youtube.com/watch?v=6inkDfpUxAU) - [Getting Started with MonoGame using XML](https://www.youtube.com/watch?v=wCc_rLrqsIo) - [Getting the most out of your assets–The MonoGame Content Pipeline](https://www.youtube.com/watch?v=5mEQqCgTaLU) - [MonoGame - Building multi-platform solutions](https://www.youtube.com/watch?v=WonVmlpPBuU&t=735s) - [Building apps & games for Xbox One using UWP](https://www.youtube.com/watch?v=AAMToCwPy8s&t=1s) ## Video Tutorials - [CodingMadeEasy RPG Tutorial](http://www.youtube.com/watch?feature=player_embedded&v=agt9-J9RPZ0) - [Psuedo Games Tutorials](http://www.youtube.com/watch?feature=player_embedded&v=BwtQn02oy6A) - [Desenvolvendo jogos multiplataforma em C# com MonoGame - Alexandre Chohfi (Portuguese)](http://channel9.msdn.com/Blogs/MSDN-Brasil-Cursos-de-Desenvolvimento/Desenvolvendo-jogos-multiplataforma-em-C-com-MonoGame) - [Desenvolvimento de jogos para Windows 8 com XNA - Alexandre Chohfi (Portuguese)](https://www.youtube.com/watch?v=gM5pRnYV1tA) - [Batholith Entertainment Game dev tutorials](https://www.youtube.com/playlist?list=PLZ6ofHM1rvK8lQSoKX1USZstM-ZXikFHp) - [Let's Code: The T-Rex Runner Game with MonoGame](https://www.youtube.com/watch?v=DJCQVJ83J1U) ## Others - [Dark Genesis Blog MonoGame content](http://darkgenesis.zenithmoon.com/tag/monogame/) - [awesome-monogame - A large list of MonoGame libraries and more by aloisdeniel](https://github.com/aloisdeniel/awesome-monogame) - [A collection of tutorials, libraries and more, many of which are MonoGame related](https://github.com/UnterrainerInformatik/GameDevelopmentLinks) - [How to create animations and sprite sheets for MonoGame](https://www.codeandweb.com/texturepacker/tutorials/how-to-create-sprite-sheets-and-animations-with-monogame) - [Making a platformer in F# with MonoGame](http://bruinbrown.wordpress.com/2013/10/06/making-a-platformer-in-f-with-monogame/) - [XNA 4.0 Shader Programming / HLSL](http://digitalerr0r.wordpress.com/tutorials/) - [Using Spine with MonoGame - by Randolph Burt (Randeroo)](http://randolphburt.co.uk/2013/03/30/dragons-and-dancing-crabs/) - [Mac porting series](http://benkane.wordpress.com/2012/01/20/the-great-porting-adventure-day-8/) - [Porting a Windows Phone 7 Game to Android](http://warrenburch.blogspot.co.uk/2011/12/porting-windows-phone-7-game-to-android.html) - [A series on embedding MonoGame/WinGL into WinForms](http://jaquadro.com/2013/03/bringing-your-xna-winforms-controls-to-monogame-opengl/) - [French articles about MonoGame on Linux, Windows and Windows 8](http://www.demonixis.net/blog/category/tutoriels/tuto-xna/) - [MonoGame "Hello World" on Mac OS X and Xamarin Studio](http://jaquadro.com/2013/09/monogame-hello-world-on-mac-os-x-and-xamarin-studio/) - [Solving Resolution Independent Rendering And 2D Camera Using MonoGame](http://blog.roboblob.com/2013/07/27/solving-resolution-independent-rendering-and-2d-camera-using-monogame/) - [XNA is Dead; Long Live the New XNA, MonoGame](http://www.codemag.com/Article/1411081) - [Running MonoGame on Android Wear](http://crossplatform.io/running-monogame-on-android-wear/) - [Text rendering in MonoGame](https://roy-t.nl/2018/07/04/Text-Rendering.html) - [Randomchaos-MonoGame-Samples](https://github.com/NemoKradXNA/Randomchaos-MonoGame-Samples) ================================================ FILE: Documentation/articles/whats_new.md ================================================ # What's New The MonoGame 3.8.1 release marks some big changes since 3.8.0 in how we build and distribute. > [!NOTE] Refer to the [Changelog](../../CHANGELOG.md) for a more complete list of changes. ## .NET 6 Support We now support [.NET 6](https://docs.microsoft.com/en-us/dotnet/core/introduction) exclusively. This brings us up to date with the latest improvements in the .NET ecosystem and allows for exciting new features like [.NET NativeAOT Runtime](https://github.com/dotnet/runtimelab/tree/feature/NativeAOT) and much easier distribution of your games for Windows, macOS and Linux. ## Visual Studio 2022 extension MonoGame 3.8.1 now comes with an optional Visual Studio extension which will install all the MonoGame project templates and will allow a quick access to the [MGCB Editor](./tools/mgcb_editor.md). This extension is avaible for Visual Studio 2022, and Visual Studio 2022 for Mac. ## Visual Studio 2019 and prior are no more supported Because .NET 6 isn't supported by Visual Studio 2019, starting with MonoGame 3.8.1 it will no more be possible to build games with it. Moving forward, we will only support Visual Studio 2022, and Visual Studio 2022 for Mac. If you need to use Visual Studio 2019, we encourage you to stick to MonoGame 3.8.0. JetBrains Rider and Visual Studio Code can be used regardless of the version of MonoGame. ## Last version to support 32bit Windows MonoGame 3.8.1 will be the last version to support building and running 32bit games on Windows. This is motivated by the fact that 32bit players are near full extinction (less than 0.24% of the Steam user base). It will also help developers with less complex distribution and less confusing debug/build experiences. ## Apple M1 silicon support Games built using the ```DesktopGL``` [platform](./platforms.md) and targeting ```osx-arm64``` will now run natively on Apple M1 silicon without Rosetta emulation. **However**, it is not yet possible to use the [MGCB](./tools/mgcb.md) or the [MGCB Editor](./tools/mgcb_editor.md) on Apple M1 silicon, unless you are running the ```osx-x64``` variant of the .NET SDK (and therefore using Rosetta emulation). We are working toward resolving this inconvenience. ================================================ FILE: Documentation/docfx.json ================================================ { "metadata": [ { "src": [ { "src": "..", "files": [ "MonoGame.Framework/MonoGame.Framework.WindowsDX.csproj", "MonoGame.Framework.Content.Pipeline/MonoGame.Framework.Content.Pipeline.csproj" ] } ], "dest": "obj/api/merged" } ], "build": { "content": [ { "src": "obj/api/merged", "dest": "api/", "files": [ "**.yml", "index.md" ] }, { "files": [ "articles/**.md", "articles/**/toc.yml", "toc.yml", "index.md" ], "exclude": [ "**/bin/**", "**/obj/**", "_site/**", "**~" ] }, { "src": "..", "files": [ "CHANGELOG.md" ] } ], "resource": [ { "files": [ "images/**" ], "exclude": [ "**/bin/**", "**/obj/**", "**~" ] } ], "xrefService": [ "https://xref.docs.microsoft.com/query?uid={uid}" ], "overwrite": [ { "files": [ "apidoc/**.md" ], "exclude": [ "**/bin/**", "**/obj/**", "_site/**", "**~" ] } ], "dest": "_site", "postProcessors": [ ], "globalMetadata": { "_appTitle": "MonoGame Documentation", "_appLogoPath": "images/mg-logo-white.svg", "_appFaviconPath": "images/favicon-192x192.png", "_appFooter": "

© 2012 Microsoft Corporation. All rights reserved.

© The MonoGame Team.

", "baseDir": "MonoGame-docfx" }, "fileMetadataFiles": [ "metadata.json" ], "template": [ "default", "theme/material", "theme/monogame" ], "noLangKeyword": false } } ================================================ FILE: Documentation/index.md ================================================ --- uid: index.md title: Introduction ---




Welcome to the MonoGame documentation hub! MonoGame is a simple and powerful .NET framework for creating games for desktop PCs, video game consoles, and mobile devices using the C# programming language. It is a re-implementation of the discontinued [Microsoft's XNA Framework](https://msdn.microsoft.com/en-us/library/bb200104.aspx), and it provides the following features: - Game framework - 2D and 3D rendering - Sound effect and music playback - Keyboard, mouse, touch, and controller inputs - Content building and optimization - Math library optimized for games This documentation [helps you to get started](articles/getting_started/0_getting_started.md) by providing overviews of key features and tools, and a complete API reference. Please use the links at the top and left to navigate the documentation sections. > This documentation assume that the reader has a basic knowledge of the C# programming language. ## What is MonoGame exactly? MonoGame is a "bring your own tools" kind of framework, which means that it provides the building blocks to build your own engine and tools, but it isn't quite an engine itself. If you are expecting a scene editor (like Unity or Unreal), MonoGame is not that. If you love coding and understanding how things work under the hood, MonoGame might be what you are looking for. And fear not, getting a game running with MonoGame only takes a few minutes. [Let's get started!](articles/getting_started/0_getting_started.md) ## We Need Your Help! MonoGame is an open-source project maintained by its community. Great open source projects require high-quality documentation. This is a call for volunteers to continue to help us make the MonoGame documentation truly great. If you can create tutorials, feature guides, code snippets, reference docs, video walkthroughs, or make any improvement to the current documentation, we could use your help! Check out the [README on GitHub](https://github.com/MonoGame/MonoGame/blob/develop/README.md) or [talk with us on the community site](http://community.monogame.net/t/lets-improve-the-monogame-documentation/916) to learn how to help! For a quick start, you can jump on this [list of documentation tasks](https://github.com/MonoGame/MonoGame/projects/4). ================================================ FILE: Documentation/metadata.json ================================================ { "_disableAffix": { "index.md": true }, "_disableContribution": { "../CHANGELOG.md": true }, "_disableBreadcrumb": { "index.md": true, "../CHANGELOG.md": true, "articles/**": true } } ================================================ FILE: Documentation/theme/material/partials/head.tmpl.partial ================================================ {{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} {{#_description}}{{/_description}} {{#_noindex}}{{/_noindex}} {{#_enableSearch}}{{/_enableSearch}} {{#_enableNewTab}}{{/_enableNewTab}} ================================================ FILE: Documentation/theme/material/styles/main.css ================================================ /* Custom css for MG theme */ .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-top: none; } .navbar-inverse .navbar-toggle { border-color: #fff3; } .navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { border-color: #fff3; background-color: #fff1; } /* COLOR VARIABLES*/ :root { --header-bg-color: #e73c00; --header-ft-color: #fff; --highlight-light: #ff6933; --highlight-dark: #e73c00; --font-color: #34393e; --custom-box-shadow: 0 1px 2px 0 rgba(61, 65, 68, 0.06), 0 1px 3px 1px rgba(61, 65, 68, 0.16); } body { color: var(--font-color); font-family: "Roboto", sans-serif; line-height: 1.5; font-size: 16px; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; word-wrap: break-word; } /* HIGHLIGHT COLOR */ button, a { color: var(--highlight-dark); cursor: pointer; } button:hover, button:focus, a:hover, a:focus { color: var(--highlight-light); text-decoration: none; } .affix > ul > li.active > a, .affix > ul > li.active > a::before { color: var(--highlight-dark); } .affix ul > li.active > a, .affix ul > li.active > a::before { color: var(--highlight-dark); } .toc .nav > li.active > a { color: var(--highlight-dark); } .toc .nav > li.active > a:hover .toc .nav > li.active > a:focus { color: var(--highlight-light); } .toc .nav > li.active > a:hover, .toc .nav > li.active > a:focus { color: var(--highlight-light); } .pagination > .active > a { background-color: var(--header-bg-color); border-color: var(--header-bg-color); } .pagination > .active > a, .pagination > .active > a:focus, .pagination > .active > a:hover, .pagination > .active > span, .pagination > .active > span:focus, .pagination > .active > span:hover { background-color: var(--highlight-light); border-color: var(--highlight-light); } /* HEADINGS */ h1 { font-weight: 600; font-size: 32px; } h2 { font-weight: 600; font-size: 24px; line-height: 1.8; } h3 { font-weight: 600; font-size: 20px; line-height: 1.8; } h5 { font-size: 14px; padding: 10px 0px; } article h1, article h2, article h3, article h4 { margin-top: 35px; margin-bottom: 15px; } article h4 { padding-bottom: 8px; border-bottom: 2px solid #ddd; } /* NAVBAR */ .navbar-brand > img { color: var(--header-ft-color); } .navbar { border: none; /* Both navbars use box-shadow */ -webkit-box-shadow: var(--custom-box-shadow); -moz-box-shadow: var(--custom-box-shadow); box-shadow: var(--custom-box-shadow); } .subnav { border-top: 1px solid #ddd; background-color: #fff; } .navbar-inverse { background-color: var(--header-bg-color); z-index: 100; } .navbar-inverse .navbar-nav > li > a, .navbar-inverse .navbar-text { color: var(--header-ft-color); background-color: var(--header-bg-color); border-bottom: 3px solid transparent; padding-bottom: 12px; } .navbar-inverse .navbar-nav > li > a:focus, .navbar-inverse .navbar-nav > li > a:hover { color: var(--header-ft-color); background-color: var(--header-bg-color); border-bottom: 3px solid white; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:focus, .navbar-inverse .navbar-nav > .active > a:hover { color: var(--header-ft-color); background-color: var(--header-bg-color); border-bottom: 3px solid white; } .navbar-form .form-control { border: none; border-radius: 20px; } /* SIDEBAR */ .toc .level1 > li { font-weight: 400; } .toc .nav > li > a { color: var(--font-color); } .sidefilter { background-color: #fff; border-left: none; border-right: none; } .sidefilter { background-color: #fff; border-left: none; border-right: none; } .toc-filter { padding: 10px; margin: 0; } .toc-filter > input { border: 2px solid #ddd; border-radius: 20px; } .toc-filter > .filter-icon { display: none; } .sidetoc > .toc { background-color: #fff; overflow-x: hidden; } .sidetoc { background-color: #fff; border: none; } /* ALERTS */ .alert { padding: 0px 0px 5px 0px; color: inherit; background-color: inherit; border: none; box-shadow: var(--custom-box-shadow); } .alert > p { margin-bottom: 0; padding: 5px 10px; } .alert > ul { margin-bottom: 0; padding: 5px 40px; } .alert > h5 { padding: 10px 15px; margin-top: 0; text-transform: uppercase; font-weight: bold; border-radius: 4px 4px 0 0; } .alert-info > h5 { color: #1976d2; border-bottom: 4px solid #1976d2; background-color: #e3f2fd; } .alert-warning > h5 { color: #f57f17; border-bottom: 4px solid #f57f17; background-color: #fff3e0; } .alert-danger > h5 { color: #d32f2f; border-bottom: 4px solid #d32f2f; background-color: #ffebee; } /* CODE HIGHLIGHT */ pre { padding: 9.5px; margin: 0 0 10px; font-size: 13px; word-break: break-all; word-wrap: break-word; background-color: #fffaef; border-radius: 4px; border: none; box-shadow: var(--custom-box-shadow); } ================================================ FILE: Documentation/theme/monogame/partials/head.tmpl.partial ================================================ {{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} {{#_description}}{{/_description}} {{#_noindex}}{{/_noindex}} {{#_enableSearch}}{{/_enableSearch}} {{#_enableNewTab}}{{/_enableNewTab}} ================================================ FILE: Documentation/theme/monogame/partials/navbar.tmpl.partial ================================================ {{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} ================================================ FILE: Documentation/theme/monogame/styles/monogame.css ================================================ .article { margin-top: 80px; } .mg-link { display: block; padding: 15px 15px 0 15px; color: var(--header-ft-color); } .mg-link:hover, .mg-link:focus { color: var(--header-ft-color); } .mg-link-block { float: right; } @media (min-width: 768px) { #navbar { display: inline-block !important; } } @media (max-width: 767px) { .mg-link-block { display: none; } } ================================================ FILE: Documentation/toc.yml ================================================ - name: Articles href: articles/ - name: Api href: obj/api/merged/ - name: Changelog href: ../CHANGELOG.md ================================================ FILE: ISSUE_TEMPLATE.md ================================================ #### What version of KNI does the bug occur on: - KNI x.xx.xxxx #### What operating system are you using: - Windows10 #### What KNI platform are you using: - KniPlatform ================================================ FILE: Installers/Windows/KniSdkSetup.nsi ================================================ SetCompressor /SOLID /FINAL lzma !include "header.nsh" !include "LogicLib.nsh" !define APPNAME "KNI" ;Include Modern UI !include "Sections.nsh" !include "MUI2.nsh" !include "InstallOptions.nsh" !define MUI_ICON "${FrameworkPath}\Kni.ico" !define MUI_UNICON "${FrameworkPath}\Kni.ico" ; Request application privileges for Windows Vista RequestExecutionLevel admin ;Interface Configuration !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "${FrameworkPath}\Kni.bmp" !define MUI_ABORTWARNING !define MUI_WELCOMEFINISHPAGE_BITMAP "${FrameworkPath}\panel.bmp" ;Languages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "..\..\License.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES Page Custom SponsorPage SponsorPageLeave !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" Name '${APPNAME} SDK ${INSTALLERVERSION}' OutFile 'KniSdkSetup.exe' InstallDir '$PROGRAMFILES\${APPNAME}\v${VERSION}' VIProductVersion "${INSTALLERVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APPNAME} SDK" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Kni framework" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${INSTALLERVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${INSTALLERVERSION}" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${APPNAME} SDK Installer" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright © Kni framework" !macro VS_ASSOCIATE_EDITOR TOOLNAME VSVERSION EXT TOOLPATH WriteRegStr HKCU 'Software\Microsoft\VisualStudio\${VSVERSION}\Default Editors\${EXT}' 'Custom' '${TOOLNAME}' WriteRegDWORD HKCU 'Software\Microsoft\VisualStudio\${VSVERSION}\Default Editors\${EXT}' 'Type' 0x00000002 WriteRegStr HKCU 'Software\Microsoft\VisualStudio\${VSVERSION}\Default Editors\${EXT}\${TOOLNAME}' '' '${TOOLPATH}' WriteRegStr HKCU 'Software\Microsoft\VisualStudio\${VSVERSION}\Default Editors\${EXT}\${TOOLNAME}' 'Arguments' '' !macroend !macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}" WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}` WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}` WriteRegStr HKCR "${FILECLASS}\shell" "" "open" WriteRegStr HKCR "${FILECLASS}\shell\open" "" `${COMMANDTEXT}` WriteRegStr HKCR "${FILECLASS}\shell\open\command" "" `${COMMAND}` !macroend ;-------------------------------- ; The stuff to install Section "Kni Core Components" CoreComponents ;No components page, name is not important SectionIn RO ; Install the Kni tools to a single shared folder. SetOutPath '$INSTDIR\Tools' File /r '..\..\Tools\EffectCompiler\bin\Windows\AnyCPU\Release\net8.0\*.exe' File /r '..\..\Tools\EffectCompiler\bin\Windows\AnyCPU\Release\net8.0\*.runtimeconfig.json' File /r '..\..\Tools\EffectCompiler\bin\Windows\AnyCPU\Release\net8.0\*.dll' File /r '..\..\Tools\MonoGame.Content.Builder\bin\Windows\AnyCPU\Release\net8.0-windows\*.exe' File /r '..\..\Tools\MonoGame.Content.Builder\bin\Windows\AnyCPU\Release\net8.0-windows\*.runtimeconfig.json' File /r '..\..\Tools\MonoGame.Content.Builder\bin\Windows\AnyCPU\Release\net8.0-windows\*.dll' File /r '..\..\Tools\Content.Pipeline.Editor.WinForms\bin\AnyCPU\Release\net8.0-windows\Templates' ;File /r '..\..\Tools\Content.Pipeline.Editor.WinForms\bin\AnyCPU\Release\net8.0-windows\runtimes' File /r '..\..\Tools\Content.Pipeline.Editor.WinForms\bin\AnyCPU\Release\net8.0-windows\PipelineEditor.exe' File /r '..\..\Tools\Content.Pipeline.Editor.WinForms\bin\AnyCPU\Release\net8.0-windows\PipelineEditor.runtimeconfig.json' File /r '..\..\Tools\Content.Pipeline.Editor.WinForms\bin\AnyCPU\Release\net8.0-windows\PipelineEditor.dll' File '..\..\Artifacts\Xna.Framework.Design\Release\netstandard2.0\*.dll' ; Associate .mgcb files open in the Pipeline tool. !insertmacro VS_ASSOCIATE_EDITOR 'MonoGame Pipeline' '15.0' 'mgcb' '$INSTDIR\Tools\PipelineEditor.exe' !insertmacro APP_ASSOCIATE 'mgcb' 'MonoGame.ContentBuilderFile' 'A MonoGame content builder project.' '$INSTDIR\Tools\PipelineEditor.exe,0' 'Open with PipelineEditor' '$INSTDIR\Tools\PipelineEditor.exe "%1"' ; Install framework packages ;SetOutPath '$INSTDIR\Packages\' ;File '..\..\Artifacts\Packages\*.*' End32Bitvs64BitCheck: ; Add remote programs WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'DisplayName' '${APPNAME} SDK' WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'DisplayVersion' '${INSTALLERVERSION}' WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'DisplayIcon' '$INSTDIR\Kni.ico' WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'InstallLocation' '$INSTDIR\' WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'Publisher' 'Kni framework' WriteRegStr HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' 'UninstallString' '$INSTDIR\uninstall.exe' SetOutPath '$INSTDIR' File '..\Kni.ico' ; Uninstaller WriteUninstaller "uninstall.exe" SectionEnd Section "VS012 Redistributables (x64)" VS2012Redist SetOutPath "$INSTDIR" File "..\..\ThirdParty\VCRedist\vcredist2012_x64.exe" ExecWait '"$INSTDIR\vcredist2012_x64.exe" /passive /norestart' SectionEnd Section "VS2022 Templates" VS2022 IfFileExists `$DOCUMENTS\Visual Studio 2022\*.*` InstallTemplates CannotInstallTemplates InstallTemplates: SetOutPath "$DOCUMENTS\Visual Studio 2022\Templates\ProjectTemplates\Visual C#\KNI" File /r '..\..\Templates\VisualStudio2022\ProjectTemplates\*.zip' SetOutPath "$DOCUMENTS\Visual Studio 2022\Templates\ItemTemplates\Visual C#\KNI" File /r '..\..\Templates\VisualStudio2022\ItemTemplates\*.zip' GOTO EndTemplates CannotInstallTemplates: DetailPrint "Visual Studio 2022 not found" EndTemplates: SectionEnd ; Optional section (can be disabled by the user) Section "Start Menu Shortcuts" Menu CreateDirectory $SMPROGRAMS\${APPNAME} SetOutPath "$INSTDIR" CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall MonoGame.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 SetOutPath "$INSTDIR\Tools" CreateShortCut "$SMPROGRAMS\${APPNAME}\Kni PipelineEditor.lnk" "$INSTDIR\Tools\PipelineEditor.exe" "" "$INSTDIR\Tools\PipelineEditor.exe" 0 WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Website.url" "InternetShortcut" "URL" "http://www.monogame.net" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Website.url" "InternetShortcut" "IconFile" "$INSTDIR\Kni.ico" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Website.url" "InternetShortcut" "IconIndex" "0" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Documentation.url" "InternetShortcut" "URL" "http://www.monogame.net/documentation" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Documentation.url" "InternetShortcut" "IconFile" "$INSTDIR\Kni.ico" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Documentation.url" "InternetShortcut" "IconIndex" "0" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Support.url" "InternetShortcut" "URL" "http://community.monogame.net/" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Support.url" "InternetShortcut" "IconFile" "$INSTDIR\Kni.ico" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Support.url" "InternetShortcut" "IconIndex" "0" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Bug Reports.url" "InternetShortcut" "URL" "https://github.com/kniEngine/kni/issues" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Bug Reports.url" "InternetShortcut" "IconFile" "$INSTDIR\Kni.ico" WriteINIStr "$SMPROGRAMS\${APPNAME}\MonoGame Bug Reports.url" "InternetShortcut" "IconIndex" "0" SectionEnd LangString CoreComponentsDesc ${LANG_ENGLISH} "Install the Runtimes and the MSBuild extensions for MonoGame" LangString VS2012RedistDesc ${LANG_ENGLISH} "Install the VS2012 Redistributables (x64)" LangString VS2022Desc ${LANG_ENGLISH} "Install the project templates for Visual Studio 2022" LangString MenuDesc ${LANG_ENGLISH} "Add a link to the MonoGame website to your start menu" !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${CoreComponents} $(CoreComponentsDesc) !insertmacro MUI_DESCRIPTION_TEXT ${VS2012Redist} $(VS2012RedistDesc) !insertmacro MUI_DESCRIPTION_TEXT ${NugetPackages} $(NugetPackagesDesc) !insertmacro MUI_DESCRIPTION_TEXT ${VS2022} $(VS2022Desc) !insertmacro MUI_DESCRIPTION_TEXT ${Menu} $(MenuDesc) !insertmacro MUI_FUNCTION_DESCRIPTION_END Function SponsorPage ReserveFile "SponsorPage.ini" !insertmacro INSTALLOPTIONS_EXTRACT "SponsorPage.ini" !insertmacro INSTALLOPTIONS_DISPLAY "SponsorPage.ini" FunctionEnd Function SponsorPageLeave # Find out which field event called us. 0 = Next button called us. !insertmacro INSTALLOPTIONS_READ $R0 "SponsorPage.ini" "Settings" "State" ${If} $R0 == 3 # Field 3. ExecShell "open" "https://github.com/sponsors/nkast" abort ${EndIf} FunctionEnd Function checkVS2012Redist ; TODO: check if VS2012 Redisttributables are installed FunctionEnd Function checkVS2022 IfFileExists `$DOCUMENTS\Visual Studio 2022\*.*` end disable disable: SectionSetFlags ${VS2022} $0 end: FunctionEnd Function .onInit IntOp $0 $0 | ${SF_RO} call checkVS2012Redist Call checkVS2022 IntOp $0 ${SF_SELECTED} | ${SF_RO} SectionSetFlags ${core_id} $0 FunctionEnd ;-------------------------------- ;Uninstaller Section Section "Uninstall" DeleteRegKey HKLM 'Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}' ;DeleteRegKey HKCU 'Software\Microsoft\VisualStudio\12.0\Default Editors\mgcb' DeleteRegKey HKCR '.mgcb' DeleteRegKey HKCR 'MonoGame.ContentBuilderFile' RMDir /r "$DOCUMENTS\Visual Studio 2022\Templates\ProjectTemplates\Visual C#\KNI" RMDir /r "$DOCUMENTS\Visual Studio 2022\Templates\ItemTemplates\Visual C#\KNI" RMDir /r "$SMPROGRAMS\${APPNAME}" Delete "$INSTDIR\Uninstall.exe" RMDir /r "$INSTDIR" SectionEnd ================================================ FILE: Installers/Windows/SponsorPage.ini ================================================ [Settings] NumFields=3 [Field 1] Type=Label Text=While KNI is free and open-source, maintaining and expanding the framework requires ongoing effort and resources. We rely on the support of our community to continue delivering top-notch updates, features, and support. Left=16 Right=280 Top=10 Bottom=48 [Field 2] Type=Label Text=By becoming a Sponsor, you can directly contribute to the growth and sustainability of the KNI Game Framework. Left=16 Right=280 Top=50 Bottom=88 [Field 3] Type=Button Text=Sponsor KNI Left=16 Right=110 Top=100 Bottom=120 State= Flags=NOTIFY ================================================ FILE: Installers/default.build ================================================ Default Installer Automated Build script !define FrameworkPath "${project::get-base-directory()}" !define VERSION "4.2" !define INSTALLERVERSION "${buildNumber}" ================================================ FILE: KNI.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content.Pipeline", "Content.Pipeline", "{F2A58A8B-F174-48E0-BE84-F221C705CE27}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{4C7DF6E2-94B3-4C09-A49D-C70922861A48}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Design", "src\Xna.Framework.Design\Xna.Framework.Design.csproj", "{E37F98D7-C4E8-4556-B322-AEF99638ECE1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline", "src\Xna.Framework.Content.Pipeline\Xna.Framework.Content.Pipeline.csproj", "{73509F44-3566-4B79-BB47-C7C6E2AA2351}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics", "src\Xna.Framework.Content.Pipeline.Graphics\Xna.Framework.Content.Pipeline.Graphics.csproj", "{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics.MojoProcessor", "src\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj", "{476EE43E-E93B-4019-B8B7-AD52C4216456}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Audio", "src\Xna.Framework.Content.Pipeline.Audio\Xna.Framework.Content.Pipeline.Audio.csproj", "{ACD26013-5730-4CAF-9468-3BAAE867A8A2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Media", "src\Xna.Framework.Content.Pipeline.Media\Xna.Framework.Content.Pipeline.Media.csproj", "{63486463-8AEE-483E-862A-7720CD62B4DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Android.GL", "Platforms\Kni.Platform.Android.GL.csproj", "{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kni.Platform.Android.GL.Xamarin", "Platforms\Kni.Platform.Android.GL.Xamarin.csproj", "{BA9476CF-99BA-4D03-92F2-73D2C5E58883}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Blazor.GL", "Platforms\Kni.Platform.Blazor.GL.csproj", "{E442B4FA-5F28-40AC-92C2-2979786418D3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Cardboard.GL", "Platforms\Kni.Platform.Cardboard.GL.csproj", "{BF257928-8B5D-4371-BD03-C18DA71918C3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.SDL2.GL", "Platforms\Kni.Platform.SDL2.GL.csproj", "{6D75E618-19CA-4C51-9546-F10965FBC0B8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.iOS.GL", "Platforms\Kni.Platform.iOS.GL.csproj", "{D93291EF-3419-412E-BC56-376BD6A02224}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Ref", "Platforms\Kni.Platform.Ref.csproj", "{2ACF610C-9188-4F16-A611-577C1223DD90}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kni.Platform.UAP.DX11", "Platforms\Kni.Platform.UAP.DX11.csproj", "{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.WinForms.DX11", "Platforms\Kni.Platform.WinForms.DX11.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.WinForms.DX11.OculusOVR", "Platforms\Kni.Platform.WinForms.DX11.OculusOVR.csproj", "{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EffectCompiler", "Tools\EffectCompiler\EffectCompiler.csproj", "{46474D32-2E58-6957-6E64-6F7773324D47}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MGCB", "Tools\MonoGame.Content.Builder\MGCB.csproj", "{4243474D-572E-6E69-646F-77734D474342}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Content.Pipeline.Editor.net8", "Tools\Content.Pipeline.Editor.WinForms\Content.Pipeline.Editor.net8.csproj", "{5212C44E-1573-43C2-85E8-5751A12FBBFD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Tests.SDL2.GL", "Tests\Kni.Tests.SDL2.GL.csproj", "{DED2DDB6-D4BE-B1B4-2E54-657374732E57}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Tests.WinForms.DX11", "Tests\Kni.Tests.WinForms.DX11.csproj", "{DED2DDB6-D4BE-656D-2E54-657374732E57}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Oculus.GL", "Platforms\Kni.Platform.Oculus.GL.csproj", "{3472997A-CD26-4D0D-B64A-795F913E6777}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.Build.0 = Release|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.Build.0 = Debug|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.ActiveCfg = Release|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.Build.0 = Release|Any CPU {E442B4FA-5F28-40AC-92C2-2979786418D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E442B4FA-5F28-40AC-92C2-2979786418D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {E442B4FA-5F28-40AC-92C2-2979786418D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {E442B4FA-5F28-40AC-92C2-2979786418D3}.Release|Any CPU.Build.0 = Release|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.Build.0 = Release|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.Build.0 = Release|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.Build.0 = Debug|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.ActiveCfg = Release|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.Build.0 = Release|Any CPU {2ACF610C-9188-4F16-A611-577C1223DD90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2ACF610C-9188-4F16-A611-577C1223DD90}.Debug|Any CPU.Build.0 = Debug|Any CPU {2ACF610C-9188-4F16-A611-577C1223DD90}.Release|Any CPU.ActiveCfg = Release|Any CPU {2ACF610C-9188-4F16-A611-577C1223DD90}.Release|Any CPU.Build.0 = Release|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.Build.0 = Debug|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.Build.0 = Release|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.Build.0 = Release|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.ActiveCfg = Release|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.Build.0 = Release|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.Build.0 = Debug|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.ActiveCfg = Release|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.Build.0 = Release|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.Build.0 = Debug|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.ActiveCfg = Release|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.Build.0 = Release|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.Build.0 = Release|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.Build.0 = Debug|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.ActiveCfg = Release|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {BA9476CF-99BA-4D03-92F2-73D2C5E58883} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {E442B4FA-5F28-40AC-92C2-2979786418D3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {BF257928-8B5D-4371-BD03-C18DA71918C3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {6D75E618-19CA-4C51-9546-F10965FBC0B8} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {D93291EF-3419-412E-BC56-376BD6A02224} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {2ACF610C-9188-4F16-A611-577C1223DD90} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {7DE47032-A904-4C29-BD22-2D235E8D91BA} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {46474D32-2E58-6957-6E64-6F7773324D47} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {4243474D-572E-6E69-646F-77734D474342} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {5212C44E-1573-43C2-85E8-5751A12FBBFD} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {DED2DDB6-D4BE-B1B4-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A} {DED2DDB6-D4BE-656D-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A} {3472997A-CD26-4D0D-B64A-795F913E6777} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48F20664-456B-4FE0-AE0A-7F5AC695B13C} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Android.GL.Xamarin.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kni.Platform.Android.GL.Xamarin", "Platforms\Kni.Platform.Android.GL.Xamarin.csproj", "{BA9476CF-99BA-4D03-92F2-73D2C5E58883}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Debug|Any CPU.Build.0 = Debug|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.ActiveCfg = Release|Any CPU {BA9476CF-99BA-4D03-92F2-73D2C5E58883}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {BA9476CF-99BA-4D03-92F2-73D2C5E58883} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Android.GL.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Android.GL", "Platforms\Kni.Platform.Android.GL.csproj", "{CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Blazor.GL.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Blazor.GL", "Platforms\Kni.Platform.Blazor.GL.csproj", "{6FE118A2-6D2B-4652-8C50-79DF113CA22B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Debug|Any CPU.Build.0 = Debug|Any CPU {6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Release|Any CPU.ActiveCfg = Release|Any CPU {6FE118A2-6D2B-4652-8C50-79DF113CA22B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6FE118A2-6D2B-4652-8C50-79DF113CA22B} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {FD0DE32B-7FB8-4E51-987B-3C6F5EC228B9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Cardboard.GL.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Cardboard.GL", "Platforms\Kni.Platform.Cardboard.GL.csproj", "{BF257928-8B5D-4371-BD03-C18DA71918C3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GoogleCardboard", "Platforms\XR\.CardboardLegacy\GoogleCardboard\GoogleCardboard.csproj", "{4EAA991B-83C7-41AA-B845-8A13E05E0334}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF257928-8B5D-4371-BD03-C18DA71918C3}.Release|Any CPU.Build.0 = Release|Any CPU {4EAA991B-83C7-41AA-B845-8A13E05E0334}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4EAA991B-83C7-41AA-B845-8A13E05E0334}.Debug|Any CPU.Build.0 = Debug|Any CPU {4EAA991B-83C7-41AA-B845-8A13E05E0334}.Release|Any CPU.ActiveCfg = Release|Any CPU {4EAA991B-83C7-41AA-B845-8A13E05E0334}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {BF257928-8B5D-4371-BD03-C18DA71918C3} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {4EAA991B-83C7-41AA-B845-8A13E05E0334} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Oculus.GL.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Oculus.GL", "Platforms\Kni.Platform.Oculus.GL.csproj", "{3472997A-CD26-4D0D-B64A-795F913E6777}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Debug|Any CPU.Build.0 = Debug|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.ActiveCfg = Release|Any CPU {3472997A-CD26-4D0D-B64A-795F913E6777}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3472997A-CD26-4D0D-B64A-795F913E6777} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.Ref.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.Ref", "Platforms\Kni.Platform.Ref.csproj", "{91E64EE8-04D3-4850-A3CA-C4839EF167F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {91E64EE8-04D3-4850-A3CA-C4839EF167F2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {91E64EE8-04D3-4850-A3CA-C4839EF167F2} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0B8E7E4B-7522-4B37-932C-19ACF360618E} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.SDL2.GL.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Design", "src\Xna.Framework.Design\Xna.Framework.Design.csproj", "{E37F98D7-C4E8-4556-B322-AEF99638ECE1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.SDL2.GL", "Platforms\Kni.Platform.SDL2.GL.csproj", "{6D75E618-19CA-4C51-9546-F10965FBC0B8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Tests.SDL2.GL", "Tests\Kni.Tests.SDL2.GL.csproj", "{DED2DDB6-D4BE-B1B4-2E54-657374732E57}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content.Pipeline", "Content.Pipeline", "{28AEF6DE-B48A-4EA8-9262-B91E48544888}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline", "src\Xna.Framework.Content.Pipeline\Xna.Framework.Content.Pipeline.csproj", "{D3C16384-9049-4E8F-AE16-8D66CDB415BC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Audio", "src\Xna.Framework.Content.Pipeline.Audio\Xna.Framework.Content.Pipeline.Audio.csproj", "{95E174DB-00F0-4C2C-8187-4B61287847F0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics", "src\Xna.Framework.Content.Pipeline.Graphics\Xna.Framework.Content.Pipeline.Graphics.csproj", "{F56A9FCE-D61D-4D1F-A592-F50155930EAC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics.MojoProcessor", "src\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj", "{5A371934-6507-4DFB-9942-C347DFA0C16D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Media", "src\Xna.Framework.Content.Pipeline.Media\Xna.Framework.Content.Pipeline.Media.csproj", "{EAE3E234-EB8E-496E-A269-5DB6026732D5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D75E618-19CA-4C51-9546-F10965FBC0B8}.Release|Any CPU.Build.0 = Release|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU {DED2DDB6-D4BE-B1B4-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU {D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3C16384-9049-4E8F-AE16-8D66CDB415BC}.Release|Any CPU.Build.0 = Release|Any CPU {95E174DB-00F0-4C2C-8187-4B61287847F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {95E174DB-00F0-4C2C-8187-4B61287847F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {95E174DB-00F0-4C2C-8187-4B61287847F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {95E174DB-00F0-4C2C-8187-4B61287847F0}.Release|Any CPU.Build.0 = Release|Any CPU {F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Debug|Any CPU.Build.0 = Debug|Any CPU {F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Release|Any CPU.ActiveCfg = Release|Any CPU {F56A9FCE-D61D-4D1F-A592-F50155930EAC}.Release|Any CPU.Build.0 = Release|Any CPU {5A371934-6507-4DFB-9942-C347DFA0C16D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5A371934-6507-4DFB-9942-C347DFA0C16D}.Debug|Any CPU.Build.0 = Debug|Any CPU {5A371934-6507-4DFB-9942-C347DFA0C16D}.Release|Any CPU.ActiveCfg = Release|Any CPU {5A371934-6507-4DFB-9942-C347DFA0C16D}.Release|Any CPU.Build.0 = Release|Any CPU {EAE3E234-EB8E-496E-A269-5DB6026732D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EAE3E234-EB8E-496E-A269-5DB6026732D5}.Debug|Any CPU.Build.0 = Debug|Any CPU {EAE3E234-EB8E-496E-A269-5DB6026732D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {EAE3E234-EB8E-496E-A269-5DB6026732D5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D75E618-19CA-4C51-9546-F10965FBC0B8} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {DED2DDB6-D4BE-B1B4-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A} {D3C16384-9049-4E8F-AE16-8D66CDB415BC} = {28AEF6DE-B48A-4EA8-9262-B91E48544888} {95E174DB-00F0-4C2C-8187-4B61287847F0} = {28AEF6DE-B48A-4EA8-9262-B91E48544888} {F56A9FCE-D61D-4D1F-A592-F50155930EAC} = {28AEF6DE-B48A-4EA8-9262-B91E48544888} {5A371934-6507-4DFB-9942-C347DFA0C16D} = {28AEF6DE-B48A-4EA8-9262-B91E48544888} {EAE3E234-EB8E-496E-A269-5DB6026732D5} = {28AEF6DE-B48A-4EA8-9262-B91E48544888} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9D1DC476-C56A-4EA2-BD08-955AD37A0DD1} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.UAP.DX11.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kni.Platform.UAP.DX11", "Platforms\Kni.Platform.UAP.DX11.csproj", "{09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Debug|Any CPU.Build.0 = Debug|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.WinForms.DX11.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content.Pipeline", "Content.Pipeline", "{F2A58A8B-F174-48E0-BE84-F221C705CE27}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Design", "src\Xna.Framework.Design\Xna.Framework.Design.csproj", "{E37F98D7-C4E8-4556-B322-AEF99638ECE1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline", "src\Xna.Framework.Content.Pipeline\Xna.Framework.Content.Pipeline.csproj", "{73509F44-3566-4B79-BB47-C7C6E2AA2351}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics", "src\Xna.Framework.Content.Pipeline.Graphics\Xna.Framework.Content.Pipeline.Graphics.csproj", "{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics.MojoProcessor", "src\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj", "{476EE43E-E93B-4019-B8B7-AD52C4216456}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Audio", "src\Xna.Framework.Content.Pipeline.Audio\Xna.Framework.Content.Pipeline.Audio.csproj", "{ACD26013-5730-4CAF-9468-3BAAE867A8A2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Media", "src\Xna.Framework.Content.Pipeline.Media\Xna.Framework.Content.Pipeline.Media.csproj", "{63486463-8AEE-483E-862A-7720CD62B4DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.WinForms.DX11", "Platforms\Kni.Platform.WinForms.DX11.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.WinForms.DX11.OculusOVR", "Platforms\Kni.Platform.WinForms.DX11.OculusOVR.csproj", "{9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EffectCompiler", "Tools\EffectCompiler\EffectCompiler.csproj", "{46474D32-2E58-6957-6E64-6F7773324D47}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MGCB", "Tools\MonoGame.Content.Builder\MGCB.csproj", "{4243474D-572E-6E69-646F-77734D474342}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Content.Pipeline.Editor.net8", "Tools\Content.Pipeline.Editor.WinForms\Content.Pipeline.Editor.net8.csproj", "{5212C44E-1573-43C2-85E8-5751A12FBBFD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Tests.WinForms.DX11", "Tests\Kni.Tests.WinForms.DX11.csproj", "{DED2DDB6-D4BE-656D-2E54-657374732E57}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Debug|Any CPU.Build.0 = Debug|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E37F98D7-C4E8-4556-B322-AEF99638ECE1}.Release|Any CPU.Build.0 = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|Any CPU.Build.0 = Release|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.ActiveCfg = Release|Any CPU {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47}.Release|Any CPU.Build.0 = Release|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Debug|Any CPU.Build.0 = Debug|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.ActiveCfg = Release|Any CPU {46474D32-2E58-6957-6E64-6F7773324D47}.Release|Any CPU.Build.0 = Release|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Debug|Any CPU.Build.0 = Debug|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.ActiveCfg = Release|Any CPU {4243474D-572E-6E69-646F-77734D474342}.Release|Any CPU.Build.0 = Release|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {5212C44E-1573-43C2-85E8-5751A12FBBFD}.Release|Any CPU.Build.0 = Release|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Debug|Any CPU.Build.0 = Debug|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.ActiveCfg = Release|Any CPU {DED2DDB6-D4BE-656D-2E54-657374732E57}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {E37F98D7-C4E8-4556-B322-AEF99638ECE1} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {7DE47032-A904-4C29-BD22-2D235E8D91BA} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {9DE8C1A3-25EB-4FD7-A0B6-34720AD48B47} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {46474D32-2E58-6957-6E64-6F7773324D47} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {4243474D-572E-6E69-646F-77734D474342} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {5212C44E-1573-43C2-85E8-5751A12FBBFD} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} {DED2DDB6-D4BE-656D-2E54-657374732E57} = {94670BA5-3B36-4EBA-A3E0-27912F6BD11A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {10805590-D308-49FA-97FF-13C844224544} EndGlobalSection EndGlobal ================================================ FILE: Kni.Platform.iOS.GL.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xna.Framework.XR", "src\Xna.Framework.XR\Xna.Framework.XR.csproj", "{6D0D985D-B256-4208-9E78-77897D461698}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kni.Platform.iOS.GL", "Platforms\Kni.Platform.iOS.GL.csproj", "{D93291EF-3419-412E-BC56-376BD6A02224}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D0D985D-B256-4208-9E78-77897D461698}.Release|Any CPU.Build.0 = Release|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Debug|Any CPU.Build.0 = Debug|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.ActiveCfg = Release|Any CPU {D93291EF-3419-412E-BC56-376BD6A02224}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6D0D985D-B256-4208-9E78-77897D461698} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {D93291EF-3419-412E-BC56-376BD6A02224} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} EndGlobalSection EndGlobal ================================================ FILE: LICENSE.txt ================================================ Microsoft Public License (Ms-PL) Kni - Copyright © 2014-2025 Nick Kastellanos ------------------------------------------------------------------------------- Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009-2021 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. ------------------------------------------------------------------------------- The MIT License (MIT) Portions Copyright © The Mono.Xna Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MonoGame.Tools.Linux.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34723.18 MinimumVisualStudioVersion = 17.9.34723.18 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A5A52329-49D0-4CE0-BA3E-DBD2BA90988F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content.Pipeline", "Content.Pipeline", "{F2A58A8B-F174-48E0-BE84-F221C705CE27}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{753EFCC6-42AB-433E-A013-B7B5D1FE50E0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{94670BA5-3B36-4EBA-A3E0-27912F6BD11A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework", "src\Xna.Framework\Xna.Framework.csproj", "{741B4B1E-89E4-434C-8867-6129838AFD51}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content", "src\Xna.Framework.Content\Xna.Framework.Content.csproj", "{1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Graphics", "src\Xna.Framework.Graphics\Xna.Framework.Graphics.csproj", "{4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Audio", "src\Xna.Framework.Audio\Xna.Framework.Audio.csproj", "{3F81F76D-F0F3-44FE-A256-40AF153C33F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Media", "src\Xna.Framework.Media\Xna.Framework.Media.csproj", "{6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Input", "src\Xna.Framework.Input\Xna.Framework.Input.csproj", "{8FB8B257-C091-4C41-B221-75C37B68CD8F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Game", "src\Xna.Framework.Game\Xna.Framework.Game.csproj", "{90BBD6EF-F386-4F47-88CD-BF386C7D1705}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Devices", "src\Xna.Framework.Devices\Xna.Framework.Devices.csproj", "{6B3E56F7-C567-463C-9746-0244FD959322}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Storage", "src\Xna.Framework.Storage\Xna.Framework.Storage.csproj", "{7AE82BAB-5F52-427A-8F6F-DA829261FF9C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline", "src\Xna.Framework.Content.Pipeline\Xna.Framework.Content.Pipeline.csproj", "{73509F44-3566-4B79-BB47-C7C6E2AA2351}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics", "src\Xna.Framework.Content.Pipeline.Graphics\Xna.Framework.Content.Pipeline.Graphics.csproj", "{7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Graphics.MojoProcessor", "src\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj", "{476EE43E-E93B-4019-B8B7-AD52C4216456}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Audio", "src\Xna.Framework.Content.Pipeline.Audio\Xna.Framework.Content.Pipeline.Audio.csproj", "{ACD26013-5730-4CAF-9468-3BAAE867A8A2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xna.Framework.Content.Pipeline.Media", "src\Xna.Framework.Content.Pipeline.Media\Xna.Framework.Content.Pipeline.Media.csproj", "{63486463-8AEE-483E-862A-7720CD62B4DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoGame.Framework.DesktopGL", "Platforms\MonoGame.Framework.DesktopGL.csproj", "{5B5871CA-AD66-4B5E-B097-B7144CF1B570}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonoGame.Packaging.Flatpak", "Tools\MonoGame.Packaging.Flatpak\MonoGame.Packaging.Flatpak.csproj", "{2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|Any CPU.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x64.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x64.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x86.ActiveCfg = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Debug|x86.Build.0 = Debug|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|Any CPU.Build.0 = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x64.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x64.Build.0 = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x86.ActiveCfg = Release|Any CPU {741B4B1E-89E4-434C-8867-6129838AFD51}.Release|x86.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x64.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x64.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x86.ActiveCfg = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Debug|x86.Build.0 = Debug|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|Any CPU.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x64.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x64.Build.0 = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x86.ActiveCfg = Release|Any CPU {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449}.Release|x86.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x64.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x64.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x86.ActiveCfg = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Debug|x86.Build.0 = Debug|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|Any CPU.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x64.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x64.Build.0 = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x86.ActiveCfg = Release|Any CPU {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F}.Release|x86.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x64.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x64.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x86.ActiveCfg = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Debug|x86.Build.0 = Debug|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|Any CPU.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x64.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x64.Build.0 = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x86.ActiveCfg = Release|Any CPU {3F81F76D-F0F3-44FE-A256-40AF153C33F7}.Release|x86.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x64.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x64.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x86.ActiveCfg = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Debug|x86.Build.0 = Debug|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|Any CPU.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x64.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x64.Build.0 = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x86.ActiveCfg = Release|Any CPU {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD}.Release|x86.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x64.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x64.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x86.ActiveCfg = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Debug|x86.Build.0 = Debug|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|Any CPU.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x64.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x64.Build.0 = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x86.ActiveCfg = Release|Any CPU {8FB8B257-C091-4C41-B221-75C37B68CD8F}.Release|x86.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|Any CPU.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x64.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x64.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x86.ActiveCfg = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Debug|x86.Build.0 = Debug|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|Any CPU.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x64.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x64.Build.0 = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x86.ActiveCfg = Release|Any CPU {90BBD6EF-F386-4F47-88CD-BF386C7D1705}.Release|x86.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x64.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x64.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x86.ActiveCfg = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Debug|x86.Build.0 = Debug|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|Any CPU.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|x64.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|x64.Build.0 = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|x86.ActiveCfg = Release|Any CPU {6B3E56F7-C567-463C-9746-0244FD959322}.Release|x86.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x64.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x64.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x86.ActiveCfg = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Debug|x86.Build.0 = Debug|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|Any CPU.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x64.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x64.Build.0 = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x86.ActiveCfg = Release|Any CPU {7AE82BAB-5F52-427A-8F6F-DA829261FF9C}.Release|x86.Build.0 = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|Any CPU.Build.0 = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x64.ActiveCfg = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x64.Build.0 = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x86.ActiveCfg = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Debug|x86.Build.0 = Debug|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.ActiveCfg = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|Any CPU.Build.0 = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x64.ActiveCfg = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x64.Build.0 = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x86.ActiveCfg = Release|Any CPU {73509F44-3566-4B79-BB47-C7C6E2AA2351}.Release|x86.Build.0 = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x64.ActiveCfg = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x64.Build.0 = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x86.ActiveCfg = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Debug|x86.Build.0 = Debug|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|Any CPU.Build.0 = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x64.ActiveCfg = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x64.Build.0 = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x86.ActiveCfg = Release|Any CPU {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1}.Release|x86.Build.0 = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|Any CPU.Build.0 = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x64.ActiveCfg = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x64.Build.0 = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x86.ActiveCfg = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Debug|x86.Build.0 = Debug|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.ActiveCfg = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|Any CPU.Build.0 = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x64.ActiveCfg = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x64.Build.0 = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x86.ActiveCfg = Release|Any CPU {476EE43E-E93B-4019-B8B7-AD52C4216456}.Release|x86.Build.0 = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x64.ActiveCfg = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x64.Build.0 = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x86.ActiveCfg = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Debug|x86.Build.0 = Debug|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|Any CPU.Build.0 = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x64.ActiveCfg = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x64.Build.0 = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x86.ActiveCfg = Release|Any CPU {ACD26013-5730-4CAF-9468-3BAAE867A8A2}.Release|x86.Build.0 = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x64.ActiveCfg = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x64.Build.0 = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x86.ActiveCfg = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Debug|x86.Build.0 = Debug|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|Any CPU.Build.0 = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x64.ActiveCfg = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x64.Build.0 = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x86.ActiveCfg = Release|Any CPU {63486463-8AEE-483E-862A-7720CD62B4DF}.Release|x86.Build.0 = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|Any CPU.Build.0 = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x64.ActiveCfg = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x64.Build.0 = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x86.ActiveCfg = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Debug|x86.Build.0 = Debug|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|Any CPU.Build.0 = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x64.ActiveCfg = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x64.Build.0 = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x86.ActiveCfg = Release|Any CPU {5B5871CA-AD66-4B5E-B097-B7144CF1B570}.Release|x86.Build.0 = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x64.ActiveCfg = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x64.Build.0 = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x86.ActiveCfg = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Debug|x86.Build.0 = Debug|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|Any CPU.Build.0 = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x64.ActiveCfg = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x64.Build.0 = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x86.ActiveCfg = Release|Any CPU {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {741B4B1E-89E4-434C-8867-6129838AFD51} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {3F81F76D-F0F3-44FE-A256-40AF153C33F7} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {8FB8B257-C091-4C41-B221-75C37B68CD8F} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {90BBD6EF-F386-4F47-88CD-BF386C7D1705} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {6B3E56F7-C567-463C-9746-0244FD959322} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} = {A5A52329-49D0-4CE0-BA3E-DBD2BA90988F} {73509F44-3566-4B79-BB47-C7C6E2AA2351} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {7A3FA1D0-1B03-49CB-9E1B-B9DBF27D74B1} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {476EE43E-E93B-4019-B8B7-AD52C4216456} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {ACD26013-5730-4CAF-9468-3BAAE867A8A2} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {63486463-8AEE-483E-862A-7720CD62B4DF} = {F2A58A8B-F174-48E0-BE84-F221C705CE27} {5B5871CA-AD66-4B5E-B097-B7144CF1B570} = {9E8F9D1A-DEF1-4FA1-8DE9-0A82B7BC99D9} {2AAE746F-0EBE-48B4-8657-2B469B3E1C8F} = {753EFCC6-42AB-433E-A013-B7B5D1FE50E0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5765210B-8045-485C-9F8A-F32B3D24A405} EndGlobalSection EndGlobal ================================================ FILE: NuGetPackages/Content.Pipeline.Builder.Windows.nuspec ================================================  nkast.Xna.Framework.Content.Pipeline.Builder.Windows $version$ nkast.Xna.Framework.Content.Pipeline.Builder.Windows Kastellanos Nikos Kastellanos Nikos https://github.com/kniEngine/kni/blob/develop/LICENSE.txt https://github.com/kniEngine/kni false KNI Framework Content Pipeline Builder (WinForms, WPF and DirectX11 backend). MSBuild task to build content for KNI (Windows). ©2024 Kastellanos Nikos en-US ================================================ FILE: NuGetPackages/Content.Pipeline.Builder.nuspec ================================================  nkast.Xna.Framework.Content.Pipeline.Builder $version$ nkast.Xna.Framework.Content.Pipeline.Builder Kastellanos Nikos Kastellanos Nikos https://github.com/kniEngine/kni/blob/develop/LICENSE.txt https://github.com/kniEngine/kni false KNI Framework Content Pipeline Builder MSBuild task to build content for KNI. ©2024 Kastellanos Nikos en-US ================================================ FILE: NuGetPackages/MonoGame.Framework.WindowsUniversal.nuspec ================================================  nkast.Kni.Platform.UAP.DX11 0.0.0.0 nkast.Kni.Platform.UAP.DX11 Kastellanos Nikos, MonoGame Team Kastellanos Nikos https://github.com/kniEngine/kni/blob/develop/LICENSE.txt https://github.com/kniEngine/kni false This is a custom build of MonoGame framework. Includes bugfixes, performance improvements, less memory garbage per frame, and better memory management. This package provides you with MonoGame Framework that works on Windows 10, Windows Phone 10 and Xbox One using UWP(Universal Windows Platform). This package provides you with MonoGame Framework that works on Windows 10, Windows Phone 10 and Xbox One using UWP(Universal Windows Platform). ©2013-2025 Kastellanos Nikos, ©2009-2022 The MonoGame Team en-US ================================================ FILE: NuGetPackages/MonoGame.Templates.nuspec1 ================================================ MonoGame.Templates MonoGame Template Pack 0.0.0.0 MonoGameTeam Templates for building MonoGame based games. https://github.com/mono/MonoGame/blob/develop/LICENSE.txt http://monogame.net/ false Copyright 2013-2017 ================================================ FILE: NuGetPackages/RegisterLocalNuget.bat ================================================ set username=username "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Design 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Audio 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Graphics 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Media 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Input 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Game 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Devices 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Storage 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.XR 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline.Audio 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline.Graphics 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline.Media 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline.Builder 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Xna.Framework.Content.Pipeline.Builder.Windows 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.Blazor.GL 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.WinForms.DX11 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.UAP.DX11 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.SDL2.GL 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.Android.GL 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.Oculus.GL 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" delete nkast.Kni.Platform.WinForms.DX11.OculusOVR 4.2.9001 -Source "C:\Users\%username%\.nuget\localPackages" -NonInteractive "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Design.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Audio.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Graphics.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Media.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Input.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Game.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Devices.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Storage.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.XR.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.Audio.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.Graphics.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.Media.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.Builder.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Xna.Framework.Content.Pipeline.Builder.Windows.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.Blazor.GL.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.WinForms.DX11.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.UAP.DX11.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.SDL2.GL.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.Android.GL.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.Oculus.GL.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" "C:\Program Files (x86)\nuget\nuget.exe" add output\nkast.Kni.Platform.WinForms.DX11.OculusOVR.4.2.9001.nupkg -Source "C:\Users\%username%\.nuget\localPackages" @pause ================================================ FILE: NuGetPackages/build/Builder/nkast.Xna.Framework.Content.Pipeline.Builder.targets ================================================ true %(KniContentReference.Link) %(KniContentReference.RootDir)%(KniContentReference.Directory) %(KniContentReference.ContentFolder) $([System.String]::Copy("%(FullDir)").Replace('\','/')) $([System.IO.Path]::GetDirectoryName(%(Link))) $([System.IO.Path]::GetFileName($([System.IO.Path]::GetDirectoryName(%(RelativeDir))))) %(ContentFolder)/ %(FullDir)bin/$(KniPlatform)/ $(MSBuildProjectDirectory)/wwwroot/%(ContentFolder)/ %(FullDir)obj/$(KniPlatform)/ $(MonoMacResourcePrefix) $(IPhoneResourcePrefix) $(MonoAndroidAssetsPrefix) $(PlatformResourcePrefix)\ /quiet $(MSBuildThisFileDirectory)..\tools\MGCB.dll dotnet "$(KniContentBuilderExe)" %(ContentReference.ContentDir) ================================================ FILE: Platforms/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: Platforms/Audio/Android/ConcreteAudioFactory.cs ================================================ // Copyright (C)2022-2025 Nick Kastellanos namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteAudioFactory : AudioFactory { public override AudioServiceStrategy CreateAudioServiceStrategy() { return new ConcreteAudioServiceDroid(); } public override MicrophoneStrategy CreateMicrophoneStrategy() { #if !XAMARIN if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M) { return new ConcreteMicrophoneDroid(); } #endif // falback to OpenAL Mic return new ConcreteMicrophone(); } public override SoundEffectStrategy CreateSoundEffectStrategy() { return new ConcreteSoundEffect(); } } } ================================================ FILE: Platforms/Audio/Android/ConcreteAudioServiceDroid.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Globalization; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; using Microsoft.Xna.Platform.Utilities; using Android.Content.PM; using Android.Content; using Android.Media; namespace Microsoft.Xna.Platform.Audio { internal class ConcreteAudioServiceDroid: ConcreteAudioService { internal ConcreteAudioServiceDroid() : base() { } public override void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone) { #if !XAMARIN if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M) { Context appContext = Android.App.Application.Context; AudioManager audioManager = appContext.GetSystemService(Context.AudioService) as AudioManager; if (audioManager != null) { AudioDeviceInfo[] devices = audioManager.GetDevices(GetDevicesTargets.Inputs); foreach (var device in devices) { if (device.Type == AudioDeviceType.BuiltinMic || device.Type == AudioDeviceType.WiredHeadset || device.Type == AudioDeviceType.UsbDevice || device.Type == AudioDeviceType.BluetoothSco ) { string deviceIdentifier = device.ProductName; if (!String.IsNullOrWhiteSpace(device.Address)) deviceIdentifier = deviceIdentifier + "_" + device.Address; Microphone microphone = base.CreateMicrophone(deviceIdentifier); microphones.Add(microphone); } } } // set the default Microphone if (microphones.Count > 0) { defaultMicrophone = base.CreateMicrophone("DefaultMicrophone"); microphones.Insert(0, defaultMicrophone); } return; } #endif // falback to OpenAL Mic base.PlatformPopulateCaptureDevices(microphones, ref defaultMicrophone); } public override int PlatformGetMaxPlayingInstances() { return 32; } public override void Suspend() { // Pause all currently playing sounds by pausing the mixer OpenAL.ALC.DevicePause(base.ALDevice); } public override void Resume() { // Resume all sounds that were playing when the activity was paused OpenAL.ALC.DeviceResume(base.ALDevice); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Audio/Android/ConcreteMicrophoneDroid.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Audio; using Android.Media; using Android.Runtime; namespace Microsoft.Xna.Platform.Audio { /// /// Provides microphones capture features. /// public sealed class ConcreteMicrophoneDroid : MicrophoneStrategy { private AudioRecord _audioRecord; private int _bufferSize; private const ChannelIn ChannelConfig = ChannelIn.Mono; private const Encoding AudioFormat = Encoding.Pcm16bit; private const int AUDIORECORD_ERROR_BAD_VALUE = -2; private const int AUDIORECORD_ERROR = -1; public override TimeSpan BufferDuration { get { return base.BufferDuration; } set { base.BufferDuration = value; } } public override MicrophoneState State { get { return base.State; } set { base.State = value; } } public ConcreteMicrophoneDroid() : base() { } public override void PlatformStart(string deviceName) { #if !XAMARIN if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M) { // Calculate the buffer size int minBufferSize = AudioRecord.GetMinBufferSize(SampleRate, ChannelConfig, AudioFormat); if (minBufferSize == AUDIORECORD_ERROR_BAD_VALUE || minBufferSize == AUDIORECORD_ERROR) throw new InvalidOperationException("GetMinBufferSize failed with error "+ minBufferSize + "."); _bufferSize = base.GetSampleSizeInBytes(base.BufferDuration); if (_bufferSize <= minBufferSize) throw new Exception("Invalid buffer size for AudioRecord!"); if (deviceName == "DefaultMicrophone") { // Create AudioRecord instance _audioRecord = new AudioRecord( AudioSource.Mic, // Microphone as the audio source SampleRate, ChannelConfig, AudioFormat, _bufferSize * 2 ); } else { throw new NotImplementedException(); } if (_audioRecord.State != Android.Media.State.Initialized) throw new Exception("AudioRecord initialization failed!"); _audioRecord.SetNotificationMarkerPosition(_bufferSize); _audioRecord.MarkerReached += _audioRecord_MarkerReached; _audioRecord.StartRecording(); } else { throw new InvalidOperationException(); } #endif } public override void PlatformStop() { _audioRecord.MarkerReached -= _audioRecord_MarkerReached; _audioRecord.Stop(); _audioRecord.Release(); } public override bool PlatformIsHeadset() { throw new NotImplementedException(); } int _notifications = 0; private void _audioRecord_MarkerReached(object sender, AudioRecord.MarkerReachedEventArgs e) { AudioRecord audioRecord = (AudioRecord)sender; _audioRecord.SetNotificationMarkerPosition(_bufferSize); _notifications++; return; } public override bool PlatformUpdate() { int notifications = _notifications; _notifications = Math.Max(0, _notifications-1); return (notifications > 0); } public override int PlatformGetData(byte[] buffer, int offset, int count) { count = Math.Min(count, _bufferSize); int bytesRead = _audioRecord.Read(buffer, offset, count); return bytesRead; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/Blazor/AudioLoader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Platform.Audio { internal static class AudioLoader { internal const int FormatPcm = 1; internal const int FormatMsAdpcm = 2; internal const int FormatIeee = 3; internal const int FormatIma4 = 17; // Converts block alignment in bytes to sample alignment, primarily for compressed formats // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt public static int SampleAlignment(int audioFormat, int channels, int bitsPerSample, int blockAlignment) { switch (audioFormat) { case FormatPcm: // PCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count ("+ channels + ") is not supported."); return 0; case FormatIeee: // IEEE Float if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return 0; case FormatMsAdpcm: // Microsoft ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return (blockAlignment / channels - 7) * 2 + 2; case FormatIma4: // IMA4 ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return (blockAlignment / channels - 4) / 4 * 8 + 1; default: throw new NotSupportedException("The specified sound format (" + audioFormat.ToString() + ") is not supported."); } } /// /// Load a WAV file from stream. /// /// The stream positioned at the start of the WAV file. /// Gets the audio format value. /// Gets the frequency or sample rate. /// Gets the number of channels. /// Gets the block alignment, important for compressed sounds. /// Gets the number of bits per sample. /// Gets the number of samples per block. /// Gets the total number of samples. /// The byte buffer containing the waveform data or compressed blocks. public static byte[] Load(Stream stream, out int audioFormat, out int frequency, out int channels, out int blockAlignment, out int bitsPerSample, out int samplesPerBlock, out int sampleCount) { using (BinaryReader reader = new BinaryReader(stream)) { byte[] audioData = null; //header string signature = new string(reader.ReadChars(4)); if (signature != "RIFF") throw new ArgumentException("Specified stream is not a wave file."); reader.ReadInt32(); // riff_chunk_size string wformat = new string(reader.ReadChars(4)); if (wformat != "WAVE") throw new ArgumentException("Specified stream is not a wave file."); audioFormat = 0; channels = 0; bitsPerSample = 0; frequency = 0; blockAlignment = 0; samplesPerBlock = 0; sampleCount = 0; // WAVE header while (audioData == null) { string chunkType = new string(reader.ReadChars(4)); int chunkSize = reader.ReadInt32(); switch (chunkType) { case "fmt ": { audioFormat = reader.ReadInt16(); // 2 channels = reader.ReadInt16(); // 4 frequency = reader.ReadInt32(); // 8 int byteRate = reader.ReadInt32(); // 12 blockAlignment = (int)reader.ReadInt16(); // 14 bitsPerSample = reader.ReadInt16(); // 16 // Read extra data if present if (chunkSize > 16) { int extraDataSize = reader.ReadInt16(); if (audioFormat == FormatIma4) { samplesPerBlock = reader.ReadInt16(); extraDataSize -= 2; } if (extraDataSize > 0) { if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(extraDataSize, SeekOrigin.Current); else { for (int i = 0; i < extraDataSize; ++i) reader.ReadByte(); } } } } break; case "fact": if (audioFormat == FormatIma4) { sampleCount = reader.ReadInt32() * channels; chunkSize -= 4; } // Skip any remaining chunk data if (chunkSize > 0) { if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(chunkSize, SeekOrigin.Current); else { for (int i = 0; i < chunkSize; ++i) reader.ReadByte(); } } break; case "data": audioData = reader.ReadBytes(chunkSize); break; default: // Skip this chunk if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(chunkSize, SeekOrigin.Current); else { for (int i = 0; i < chunkSize; ++i) reader.ReadByte(); } break; } } // Calculate fields we didn't read from the file if (samplesPerBlock == 0) { samplesPerBlock = SampleAlignment(audioFormat, channels, bitsPerSample, blockAlignment); } if (sampleCount == 0) { switch (audioFormat) { case FormatPcm: case FormatIeee: sampleCount = audioData.Length / ((channels * bitsPerSample) / 8); break; case FormatIma4: case FormatMsAdpcm: sampleCount = ((audioData.Length / blockAlignment) * samplesPerBlock) + SampleAlignment(audioFormat, channels, bitsPerSample, audioData.Length % blockAlignment); break; default: throw new InvalidDataException("Unhandled WAV format " + audioFormat.ToString()); } } return audioData; } } // Convert buffer containing 24-bit signed PCM wav data to a 16-bit signed PCM buffer internal static unsafe byte[] Convert24To16(byte[] data, int offset, int count) { if ((offset + count > data.Length) || ((count % 3) != 0)) throw new ArgumentException("Invalid 24-bit PCM data received"); // Sample count includes both channels if stereo int sampleCount = count / 3; byte[] outData = new byte[sampleCount * sizeof(short)]; fixed (byte* src = &data[offset]) { fixed (byte* dst = &outData[0]) { int srcIndex = 0; int dstIndex = 0; for (int i = 0; i < sampleCount; ++i) { // Drop the least significant byte from the 24-bit sample to get the 16-bit sample dst[dstIndex] = src[srcIndex + 1]; dst[dstIndex + 1] = src[srcIndex + 2]; dstIndex += 2; srcIndex += 3; } } } return outData; } // Convert buffer containing IEEE 32-bit float wav data to a 16-bit signed PCM buffer internal static unsafe byte[] ConvertFloatTo16(byte[] data, int offset, int count) { if ((offset + count > data.Length) || ((count % 4) != 0)) throw new ArgumentException("Invalid 32-bit float PCM data received"); // Sample count includes both channels if stereo int sampleCount = count / 4; byte[] outData = new byte[sampleCount * sizeof(short)]; fixed (byte* src = &data[offset]) { float* f = (float*)src; fixed (byte* dst = &outData[0]) { byte* d = dst; for (int i = 0; i < sampleCount; ++i) { short s = (short)(*f * 32767.0f); *d++ = (byte)(s & 0xff); *d++ = (byte)(s >> 8); ++f; } } } return outData; } #region IMA4 decoding // Step table static int[] stepTable = new int[] { 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; // Step index tables static int[] indexTable = new int[] { // ADPCM data size is 4 -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8 }; struct ImaState { public int predictor; public int stepIndex; } static int AdpcmImaWavExpandNibble(ref ImaState channel, int nibble) { int diff = stepTable[channel.stepIndex] >> 3; if ((nibble & 0x04) != 0) diff += stepTable[channel.stepIndex]; if ((nibble & 0x02) != 0) diff += stepTable[channel.stepIndex] >> 1; if ((nibble & 0x01) != 0) diff += stepTable[channel.stepIndex] >> 2; if ((nibble & 0x08) != 0) channel.predictor -= diff; else channel.predictor += diff; if (channel.predictor < -32768) channel.predictor = -32768; else if (channel.predictor > 32767) channel.predictor = 32767; channel.stepIndex += indexTable[nibble]; if (channel.stepIndex < 0) channel.stepIndex = 0; else if (channel.stepIndex > 88) channel.stepIndex = 88; return channel.predictor; } // Convert buffer containing IMA/ADPCM wav data to a 16-bit signed PCM buffer internal static byte[] ConvertIma4ToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment) { ImaState channel0 = new ImaState(); ImaState channel1 = new ImaState(); int sampleCountFullBlock = ((blockAlignment / channels) - 4) / 4 * 8 + 1; int sampleCountLastBlock = 0; if ((count % blockAlignment) > 0) sampleCountLastBlock = (((count % blockAlignment) / channels) - 4) / 4 * 8 + 1; int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock; byte[] samples = new byte[sampleCount * sizeof(short) * channels]; int sampleOffset = 0; while (count > 0) { int blockSize = blockAlignment; if (count < blockSize) blockSize = count; count -= blockAlignment; channel0.predictor = buffer[offset++]; channel0.predictor |= buffer[offset++] << 8; if ((channel0.predictor & 0x8000) != 0) channel0.predictor -= 0x10000; channel0.stepIndex = buffer[offset++]; if (channel0.stepIndex > 88) channel0.stepIndex = 88; offset++; int index = sampleOffset * 2; samples[index] = (byte)channel0.predictor; samples[index + 1] = (byte)(channel0.predictor >> 8); ++sampleOffset; if (channels == 2) { channel1.predictor = buffer[offset++]; channel1.predictor |= buffer[offset++] << 8; if ((channel1.predictor & 0x8000) != 0) channel1.predictor -= 0x10000; channel1.stepIndex = buffer[offset++]; if (channel1.stepIndex > 88) channel1.stepIndex = 88; offset++; index = sampleOffset * 2; samples[index] = (byte)channel1.predictor; samples[index + 1] = (byte)(channel1.predictor >> 8); ++sampleOffset; } if (channels == 2) { for (int nibbles = 2 * (blockSize - 8); nibbles > 0; nibbles -= 16) { for (int i = 0; i < 4; i++) { index = (sampleOffset + i * 4) * 2; int sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index = (sampleOffset + i * 4 + 2) * 2; sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); } offset += 4; for (int i = 0; i < 4; i++) { index = (sampleOffset + i * 4 + 1) * 2; int sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index = (sampleOffset + i * 4 + 3) * 2; sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); } offset += 4; sampleOffset += 16; } } else { for (int nibbles = 2 * (blockSize - 4); nibbles > 0; nibbles -= 2) { index = (sampleOffset * 2); int b = buffer[offset]; int sample = AdpcmImaWavExpandNibble(ref channel0, b & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index += 2; sample = AdpcmImaWavExpandNibble(ref channel0, b >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); sampleOffset += 2; ++offset; } } } return samples; } #endregion } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteAudioFactory.cs ================================================ // Copyright (C)2022 Nick Kastellanos namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteAudioFactory : AudioFactory { public override AudioServiceStrategy CreateAudioServiceStrategy() { return new ConcreteAudioService(); } public override MicrophoneStrategy CreateMicrophoneStrategy() { return new ConcreteMicrophone(); } public override SoundEffectStrategy CreateSoundEffectStrategy() { return new ConcreteSoundEffect(); } } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteAudioService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; using nkast.Wasm.Audio; namespace Microsoft.Xna.Platform.Audio { internal class ConcreteAudioService : AudioServiceStrategy { internal AudioContext Context { get; private set; } internal ConcreteAudioService() { Context = new AudioContext(); } public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy) { return new ConcreteSoundEffectInstance(this, sfxStrategy); } public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels) { return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels); } public override void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone) { // set the default Microphone defaultMicrophone = base.CreateMicrophone("DefaultMicrophone"); microphones.Insert(0, defaultMicrophone); } public override int PlatformGetMaxPlayingInstances() { // These platforms are only limited by memory. return int.MaxValue; } public override void PlatformSetReverbSettings(ReverbSettings reverbSettings) { } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { // TODO: dispose managed state (managed objects). Context.Dispose(); } // TODO: free unmanaged resources (unmanaged objects) // TODO: set large fields to null. Context = null; } } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteDynamicSoundEffectInstance.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Xna.Framework.Audio; using nkast.Wasm.Audio; using nkast.Wasm.ChannelMessaging; namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance , IDynamicSoundEffectInstanceStrategy { private int _sampleRate; private int _channels; AudioWorkletNode _streamSource; private bool _isStreamSourceInitialized; private int _pendingBuffers; private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null); DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance { get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; } set { _dynamicSoundEffectInstanceRef.Target = value; } } public override float Pitch { get { return base.Pitch; } set { if (value != 0) throw new NotSupportedException("DynamicSoundEffectInstance does not support Pitch."); base.Pitch = value; } } internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels) : base(audioServiceStrategy, null) { _sampleRate = sampleRate; _channels = channels; AudioContext context = ConcreteAudioService.Context; // TODO: implement resampling. if (_sampleRate != context.SampleRate) throw new NotImplementedException($"Sample rate {_sampleRate} does not match AudioContext sample rate {context.SampleRate}."); // TODO: implement Stereo. if (_channels != 1) throw new NotImplementedException($"Channels {_channels} is not implemented."); } public int BuffersNeeded { get; set; } public int DynamicPlatformGetPendingBufferCount() { return _tmpBuffers.Count + _pendingBuffers; } public override void PlatformPause() { throw new NotImplementedException(); } public override void PlatformPlay(bool isLooped) { AudioContext context = ConcreteAudioService.Context; float masterVolume = SoundEffect.MasterVolume; _gainNode.Gain.SetTargetAtTime(this.Volume * masterVolume, 0, 0); _stereoPannerNode.Pan.SetTargetAtTime(this.Pan, 0, 0); InitStreamSourceAsync(); } private async Task InitStreamSourceAsync() { AudioContext context = ConcreteAudioService.Context; await context.AudioWorklet.AddModuleAsync("js/streamProcessor.js"); _streamSource = context.CreateWorklet("stream-processor"); _streamSource.Port.Message += StreamSource_OnMessage; _streamSource.Connect(_sourceTarget); _isStreamSourceInitialized = true; // Submit any pending buffers that were added before the AudioWorklet was initialized. while (_tmpBuffers.Count > 0) { byte[] tmpBuffer = _tmpBuffers.Dequeue(); _streamSource.Port.PostMessage(tmpBuffer, 0, tmpBuffer.Length); _pendingBuffers++; } } private void ReleaseMicrophoneDevice() { if (_streamSource != null) { _streamSource.Disconnect(_sourceTarget); _streamSource.Dispose(); _streamSource = null; } _isStreamSourceInitialized = false; _pendingBuffers = 0; _tmpBuffers.Clear(); } private void StreamSource_OnMessage(object sender, MessageEventArgs e) { if (e.DataByteArray != null) { } else { var msg = e.DataFloat64; if (msg == 1) // buffer is proccessed { _pendingBuffers--; } } } public override void PlatformResume(bool isLooped) { throw new NotImplementedException(); } public override void PlatformStop() { ReleaseMicrophoneDevice(); } public override void PlatformRelease(bool isLooped) { System.Diagnostics.Debug.Assert(isLooped == false); throw new NotImplementedException(); } private readonly Queue _tmpBuffers = new Queue(); public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state) { if (_isStreamSourceInitialized == false) { // store pending buffers until the AudioWorklet is initialized byte[] tmpBuffer = new byte[count]; Buffer.BlockCopy(buffer, offset, tmpBuffer, 0, count); _tmpBuffers.Enqueue(tmpBuffer); } else { _streamSource.Port.PostMessage(buffer, offset, count); _pendingBuffers++; } } public void DynamicPlatformUpdateBuffers() { } public void DynamicPlatformClearBuffers() { _pendingBuffers = 0; _tmpBuffers.Clear(); _streamSource.Port.PostMessage(2); // 2 = clear buffers } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteMicrophone.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Xna.Framework.Audio; using nkast.Wasm.Audio; using nkast.Wasm.ChannelMessaging; using nkast.Wasm.Dom; using nkast.Wasm.Media; namespace Microsoft.Xna.Platform.Audio { /// /// Provides microphones capture features. /// public sealed class ConcreteMicrophone : MicrophoneStrategy { AudioContext _ac; private CancellationTokenSource _micInitCts; MediaStream _micStream; MediaStreamSourceNode _micNode; AudioWorkletNode _micWorkletNode; byte[] _dataBuffer; private int _dataBufferBegin = 0; private int _dataBufferEnd = 0; public override TimeSpan BufferDuration { get { return base.BufferDuration; } set { base.BufferDuration = value; } } public override MicrophoneState State { get { return base.State; } set { base.State = value; } } internal ConcreteMicrophone() : base() { using (AudioContext ac = new AudioContext()) { base.SampleRate = ac.SampleRate; int bufferSize = base.SampleRate * 1 * sizeof(short) * 2; _dataBuffer = new byte[bufferSize]; } } public override void PlatformStart(string deviceName) { InitMicrophoneDeviceAsync(); } public override void PlatformStop() { ReleaseMicrophoneDevice(); } public override bool PlatformIsHeadset() { throw new NotImplementedException(); } public override bool PlatformUpdate() { if (_dataBufferEnd != _dataBufferBegin) return true; return false; } public override int PlatformGetData(byte[] buffer, int offset, int count) { int availableDataSize = (_dataBufferEnd - _dataBufferBegin); if (availableDataSize < 0) availableDataSize = availableDataSize + _dataBuffer.Length; count = Math.Min(count, availableDataSize); if (count > 0) { int firstBlockSize = Math.Min(count, _dataBuffer.Length - _dataBufferBegin); Buffer.BlockCopy(_dataBuffer, _dataBufferBegin, buffer, offset, firstBlockSize); if (count > firstBlockSize) Buffer.BlockCopy(_dataBuffer, 0, buffer, offset + firstBlockSize, (count - firstBlockSize)); _dataBufferBegin = (_dataBufferBegin + count) % _dataBuffer.Length; } return count; } private void OnMicMessage(object sender, MessageEventArgs e) { if (e.DataByteArray != null) { JSUInt8Array data = e.DataByteArray; int count = data.Count; if (count > _dataBuffer.Length / 2) throw new InvalidOperationException("_dataBuffer must be at least twice as large as data length."); if (count <= (_dataBuffer.Length - _dataBufferEnd)) { data.CopyTo(0, _dataBuffer, _dataBufferEnd, count); } else { int firstBlockSize = (_dataBuffer.Length - _dataBufferEnd); data.CopyTo(0, _dataBuffer, _dataBufferEnd, firstBlockSize); data.CopyTo(firstBlockSize, _dataBuffer, 0, count - firstBlockSize); } _dataBufferEnd = (_dataBufferEnd + count) % _dataBuffer.Length; data.Dispose(); } else { double msg = e.DataFloat64; } } private async Task InitMicrophoneDeviceAsync() { _micInitCts = new CancellationTokenSource(); CancellationToken token = _micInitCts.Token; try { _ac = new AudioContext(); // init micProcessor AudioWorklet await _ac.AudioWorklet.AddModuleAsync("js/micProcessor.js"); if (token.IsCancellationRequested) return; _micWorkletNode = _ac.CreateWorklet("mic-processor"); _micWorkletNode.Port.Message += OnMicMessage; // init and start Microphone MediaDevices md = MediaDevices.FromNavigator(Window.Current.Navigator); _micStream = await md.GetUserMediaAsync(new UserMediaConstraints() { Audio = true }); if (token.IsCancellationRequested) return; _micNode = _ac.CreateMediaStreamSource(_micStream); _micNode.Connect(_micWorkletNode); } catch (Exception ex) { } } private void ReleaseMicrophoneDevice() { if (_micInitCts != null) { _micInitCts.Cancel(); _micInitCts = null; } if (_micNode != null) { _micNode.Disconnect(_micWorkletNode); _micNode.Dispose(); _micNode = null; } if (_micStream != null) { _micStream.Dispose(); _micStream = null; } if (_micWorkletNode != null) { _micWorkletNode.Port.Message-= OnMicMessage; _micWorkletNode.Dispose(); _micWorkletNode = null; } if (_ac != null) { _ac.Dispose(); _ac = null; } } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteSoundEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.Utilities; using nkast.Wasm.Audio; namespace Microsoft.Xna.Platform.Audio { class ConcreteSoundEffect : SoundEffectStrategy { private AudioBuffer _audioBuffer; internal const int FormatPcm = 1; internal const int FormatMsAdpcm = 2; internal const int FormatIeee = 3; internal const int FormatIma4 = 17; #region Initialization public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration) { byte[] buffer; int audioFormat; int freq; int channels; int blockAlignment; int bitsPerSample; int samplesPerBlock; int sampleCount; buffer = AudioLoader.Load(stream, out audioFormat, out freq, out channels, out blockAlignment, out bitsPerSample, out samplesPerBlock, out sampleCount); duration = TimeSpan.FromSeconds((float)sampleCount / (float)freq); PlatformInitializeBuffer(buffer, 0, buffer.Length, audioFormat, channels, freq, blockAlignment, bitsPerSample, 0, sampleCount / channels); } private void PlatformInitializeBuffer(byte[] buffer, int bufferOffset, int bufferSize, int audioFormat, int channels, int sampleRate, int blockAlignment, int bitsPerSample, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); switch (audioFormat) { case AudioLoader.FormatPcm: // PCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); PlatformInitializePcm(buffer, bufferOffset, bufferSize, bitsPerSample, sampleRate, channels, loopStart, loopLength); break; case AudioLoader.FormatIeee: // IEEE Float if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); { InitializeIeeeFloat(buffer, bufferOffset, bufferSize, bitsPerSample, sampleRate, channels, loopStart, loopLength); } break; case AudioLoader.FormatMsAdpcm: // Microsoft ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); { // If MS-ADPCM is not supported, convert to 16-bit signed PCM buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, bufferOffset, bufferSize, channels, blockAlignment); PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength); } break; case AudioLoader.FormatIma4: // IMA4 ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); { // If IMA/ADPCM is not supported, convert to 16-bit signed PCM buffer = AudioLoader.ConvertIma4ToPcm(buffer, bufferOffset, bufferSize, channels, blockAlignment); PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength); } break; default: throw new NotSupportedException("The specified sound format (" + audioFormat.ToString() + ") is not supported."); } } public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength) { short format = BitConverter.ToInt16(header, 0); short channels = BitConverter.ToInt16(header, 2); int sampleRate = BitConverter.ToInt32(header, 4); short blockAlignment = BitConverter.ToInt16(header, 12); short bitsPerSample = BitConverter.ToInt16(header, 14); switch (format) { case FormatPcm: { this.PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); } break; case FormatMsAdpcm: { buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, 0, buffer.Length, channels, blockAlignment); PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength); } break; case FormatIeee: { this.InitializeIeeeFloat(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); } break; default: throw new NotImplementedException(); } } public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); if (index != 0) throw new NotImplementedException(); if (loopStart != 0) throw new NotImplementedException(); int numOfChannels = (int)channels; _audioBuffer = concreteAudioService.Context.CreateBuffer(numOfChannels, loopLength, sampleRate); // convert buffer to float (-1,+1) and set data for each channel. unsafe { fixed (void* pBuffer = buffer) { switch (sampleBits) { case 16: // PCM 16bit short* pBuffer16 = (short*)pBuffer; float[] dest = new float[loopLength]; for (int c = 0; c < numOfChannels; c++) { for (int i = 0; i < loopLength; i++) { dest[i] = (float)pBuffer16[i * numOfChannels] / (float)short.MaxValue; } _audioBuffer.CopyToChannel(dest, c); } break; default: throw new NotImplementedException(); } } } } public void InitializeIeeeFloat(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); if (index != 0) throw new NotImplementedException(); if (loopStart != 0) throw new NotImplementedException(); int numOfChannels = (int)channels; _audioBuffer = concreteAudioService.Context.CreateBuffer(numOfChannels, loopLength, sampleRate); // set data for each channel. unsafe { fixed (void* pBuffer = buffer) { switch (sampleBits) { case 32: float* pBuffer32f = (float*)pBuffer; float[] dest = new float[loopLength]; for (int c = 0; c < numOfChannels; c++) { for (int i = 0; i < loopLength; i++) { dest[i] = pBuffer32f[i * numOfChannels]; } _audioBuffer.CopyToChannel(dest, c); } break; default: throw new NotImplementedException(); } } } } public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); } #endregion internal AudioBuffer GetAudioBuffer() { return _audioBuffer; } #region IDisposable Members protected override void Dispose(bool disposing) { if (disposing) { _audioBuffer.Dispose(); } _audioBuffer = null; } #endregion } } ================================================ FILE: Platforms/Audio/Blazor/ConcreteSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using nkast.Wasm.Audio; using AudioListener = Microsoft.Xna.Framework.Audio.AudioListener; using WebAudioListener = nkast.Wasm.Audio.AudioListener; namespace Microsoft.Xna.Platform.Audio { public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy { private AudioServiceStrategy _audioServiceStrategy; private ConcreteSoundEffect _concreteSoundEffect; internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } } AudioBufferSourceNode _bufferSource; bool _ended; protected StereoPannerNode _stereoPannerNode; protected GainNode _gainNode; protected AudioNode _sourceTarget; public override bool IsXAct { get { return base.IsXAct; } set { base.IsXAct = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override float Pan { get { return base.Pan; } set { base.Pan = value; if (_stereoPannerNode != null) { _stereoPannerNode.Pan.SetTargetAtTime(value, 0, 0.05f); } } } public override float Volume { get { return base.Volume; } set { base.Volume = value; // XAct sound effects are not tied to the SoundEffect master volume. float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f; if (_gainNode != null) { _gainNode.Gain.SetTargetAtTime(value * masterVolume, 0, 0.05f); } } } public override float Pitch { get { return base.Pitch; } set { base.Pitch = value; if (_bufferSource != null) { float wapitch = (float)Math.Pow(2, value); //TODO: implement Pitch //_bufferSource.PlaybackRate.SetTargetAtTime(wapitch, 0, 0.05f); } } } #region Initialization internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) : base(audioServiceStrategy, sfxStrategy) { _audioServiceStrategy = audioServiceStrategy; _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy; AudioContext context = ConcreteAudioService.Context; _stereoPannerNode = ConcreteAudioService.Context.CreateStereoPanner(); _gainNode = ConcreteAudioService.Context.CreateGain(); _sourceTarget = context.Destination; _stereoPannerNode.Connect(_sourceTarget); _sourceTarget = _stereoPannerNode; _gainNode.Connect(_sourceTarget); _sourceTarget = _gainNode; this.Volume = 1.0f; this.Pan = 0.0f; this.Pitch = 0.0f; } #endregion // Initialization public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter) { } public override void PlatformPause() { throw new NotImplementedException(); } public override void PlatformPlay(bool isLooped) { AudioContext context = ConcreteAudioService.Context; _bufferSource = context.CreateBufferSource(); _bufferSource.Loop = isLooped; _bufferSource.Buffer = _concreteSoundEffect.GetAudioBuffer(); _bufferSource.Connect(_sourceTarget); // XAct sound effects are not tied to the SoundEffect master volume. float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f; _gainNode.Gain.SetTargetAtTime(base.Volume * masterVolume, 0, 0); _stereoPannerNode.Pan.SetTargetAtTime(base.Pan, 0, 0); _bufferSource.OnEnded += _bufferSource_OnEnded; _bufferSource.Start(); } public override void PlatformResume(bool isLooped) { throw new NotImplementedException(); } public override void PlatformStop() { AudioContext context = ConcreteAudioService.Context; _bufferSource.OnEnded -= _bufferSource_OnEnded; _ended = false; _bufferSource.Stop(); _bufferSource.Disconnect(_sourceTarget); _bufferSource.Dispose(); _bufferSource = null; } public override void PlatformRelease(bool isLooped) { } public override bool PlatformUpdateState(ref SoundState state) { if (state != SoundState.Stopped && _ended) { _ended = false; state = SoundState.Stopped; _bufferSource.Disconnect(_sourceTarget); _bufferSource.Dispose(); _bufferSource = null; return true; } return false; } public override void PlatformSetIsLooped(bool isLooped, SoundState state) { if (_bufferSource != null) { _bufferSource.Loop = isLooped; } } public override void PlatformSetReverbMix(SoundState state, float mix, float pan) { } public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency) { } public override void PlatformClearFilter() { } protected override void Dispose(bool disposing) { if (disposing) { if (_bufferSource != null) _bufferSource.Dispose(); _gainNode.Dispose(); _stereoPannerNode.Dispose(); } _bufferSource = null; _gainNode = null; _stereoPannerNode = null; } private void _bufferSource_OnEnded(object sender, EventArgs e) { _ended = true; } } } ================================================ FILE: Platforms/Audio/OpenAL/AudioLoader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Platform.Audio { internal static class AudioLoader { internal const int FormatPcm = 1; internal const int FormatMsAdpcm = 2; internal const int FormatIeee = 3; internal const int FormatIma4 = 17; // Converts block alignment in bytes to sample alignment, primarily for compressed formats // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt public static int SampleAlignment(int audioFormat, int channels, int bitsPerSample, int blockAlignment) { switch (audioFormat) { case FormatPcm: // PCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count ("+ channels + ") is not supported."); return 0; case FormatIeee: // IEEE Float if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return 0; case FormatMsAdpcm: // Microsoft ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return (blockAlignment / channels - 7) * 2 + 2; case FormatIma4: // IMA4 ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); return (blockAlignment / channels - 4) / 4 * 8 + 1; default: throw new NotSupportedException("The specified sound format (" + audioFormat.ToString() + ") is not supported."); } } /// /// Load a WAV file from stream. /// /// The stream positioned at the start of the WAV file. /// Gets the audio format value. /// Gets the frequency or sample rate. /// Gets the number of channels. /// Gets the block alignment, important for compressed sounds. /// Gets the number of bits per sample. /// Gets the number of samples per block. /// Gets the total number of samples. /// The byte buffer containing the waveform data or compressed blocks. public static byte[] Load(Stream stream, out int audioFormat, out int frequency, out int channels, out int blockAlignment, out int bitsPerSample, out int samplesPerBlock, out int sampleCount) { using (BinaryReader reader = new BinaryReader(stream)) { byte[] audioData = null; //header string signature = new string(reader.ReadChars(4)); if (signature != "RIFF") throw new ArgumentException("Specified stream is not a wave file."); reader.ReadInt32(); // riff_chunk_size string wformat = new string(reader.ReadChars(4)); if (wformat != "WAVE") throw new ArgumentException("Specified stream is not a wave file."); audioFormat = 0; channels = 0; bitsPerSample = 0; frequency = 0; blockAlignment = 0; samplesPerBlock = 0; sampleCount = 0; // WAVE header while (audioData == null) { string chunkType = new string(reader.ReadChars(4)); int chunkSize = reader.ReadInt32(); switch (chunkType) { case "fmt ": { audioFormat = reader.ReadInt16(); // 2 channels = reader.ReadInt16(); // 4 frequency = reader.ReadInt32(); // 8 int byteRate = reader.ReadInt32(); // 12 blockAlignment = (int)reader.ReadInt16(); // 14 bitsPerSample = reader.ReadInt16(); // 16 // Read extra data if present if (chunkSize > 16) { int extraDataSize = reader.ReadInt16(); if (audioFormat == FormatIma4) { samplesPerBlock = reader.ReadInt16(); extraDataSize -= 2; } if (extraDataSize > 0) { if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(extraDataSize, SeekOrigin.Current); else { for (int i = 0; i < extraDataSize; ++i) reader.ReadByte(); } } } } break; case "fact": if (audioFormat == FormatIma4) { sampleCount = reader.ReadInt32() * channels; chunkSize -= 4; } // Skip any remaining chunk data if (chunkSize > 0) { if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(chunkSize, SeekOrigin.Current); else { for (int i = 0; i < chunkSize; ++i) reader.ReadByte(); } } break; case "data": audioData = reader.ReadBytes(chunkSize); break; default: // Skip this chunk if (reader.BaseStream.CanSeek) reader.BaseStream.Seek(chunkSize, SeekOrigin.Current); else { for (int i = 0; i < chunkSize; ++i) reader.ReadByte(); } break; } } // Calculate fields we didn't read from the file if (samplesPerBlock == 0) { samplesPerBlock = SampleAlignment(audioFormat, channels, bitsPerSample, blockAlignment); } if (sampleCount == 0) { switch (audioFormat) { case FormatPcm: case FormatIeee: sampleCount = audioData.Length / ((channels * bitsPerSample) / 8); break; case FormatIma4: case FormatMsAdpcm: sampleCount = ((audioData.Length / blockAlignment) * samplesPerBlock) + SampleAlignment(audioFormat, channels, bitsPerSample, audioData.Length % blockAlignment); break; default: throw new InvalidDataException("Unhandled WAV format " + audioFormat.ToString()); } } return audioData; } } // Convert buffer containing 24-bit signed PCM wav data to a 16-bit signed PCM buffer internal static unsafe byte[] Convert24To16(byte[] data, int offset, int count) { if ((offset + count > data.Length) || ((count % 3) != 0)) throw new ArgumentException("Invalid 24-bit PCM data received"); // Sample count includes both channels if stereo int sampleCount = count / 3; byte[] outData = new byte[sampleCount * sizeof(short)]; fixed (byte* src = &data[offset]) { fixed (byte* dst = &outData[0]) { int srcIndex = 0; int dstIndex = 0; for (int i = 0; i < sampleCount; ++i) { // Drop the least significant byte from the 24-bit sample to get the 16-bit sample dst[dstIndex] = src[srcIndex + 1]; dst[dstIndex + 1] = src[srcIndex + 2]; dstIndex += 2; srcIndex += 3; } } } return outData; } // Convert buffer containing IEEE 32-bit float wav data to a 16-bit signed PCM buffer internal static unsafe byte[] ConvertFloatTo16(byte[] data, int offset, int count) { if ((offset + count > data.Length) || ((count % 4) != 0)) throw new ArgumentException("Invalid 32-bit float PCM data received"); // Sample count includes both channels if stereo int sampleCount = count / 4; byte[] outData = new byte[sampleCount * sizeof(short)]; fixed (byte* src = &data[offset]) { float* f = (float*)src; fixed (byte* dst = &outData[0]) { byte* d = dst; for (int i = 0; i < sampleCount; ++i) { short s = (short)(*f * 32767.0f); *d++ = (byte)(s & 0xff); *d++ = (byte)(s >> 8); ++f; } } } return outData; } #region IMA4 decoding // Step table static int[] stepTable = new int[] { 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; // Step index tables static int[] indexTable = new int[] { // ADPCM data size is 4 -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8 }; struct ImaState { public int predictor; public int stepIndex; } static int AdpcmImaWavExpandNibble(ref ImaState channel, int nibble) { int diff = stepTable[channel.stepIndex] >> 3; if ((nibble & 0x04) != 0) diff += stepTable[channel.stepIndex]; if ((nibble & 0x02) != 0) diff += stepTable[channel.stepIndex] >> 1; if ((nibble & 0x01) != 0) diff += stepTable[channel.stepIndex] >> 2; if ((nibble & 0x08) != 0) channel.predictor -= diff; else channel.predictor += diff; if (channel.predictor < -32768) channel.predictor = -32768; else if (channel.predictor > 32767) channel.predictor = 32767; channel.stepIndex += indexTable[nibble]; if (channel.stepIndex < 0) channel.stepIndex = 0; else if (channel.stepIndex > 88) channel.stepIndex = 88; return channel.predictor; } // Convert buffer containing IMA/ADPCM wav data to a 16-bit signed PCM buffer internal static byte[] ConvertIma4ToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment) { ImaState channel0 = new ImaState(); ImaState channel1 = new ImaState(); int sampleCountFullBlock = ((blockAlignment / channels) - 4) / 4 * 8 + 1; int sampleCountLastBlock = 0; if ((count % blockAlignment) > 0) sampleCountLastBlock = (((count % blockAlignment) / channels) - 4) / 4 * 8 + 1; int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock; byte[] samples = new byte[sampleCount * sizeof(short) * channels]; int sampleOffset = 0; while (count > 0) { int blockSize = blockAlignment; if (count < blockSize) blockSize = count; count -= blockAlignment; channel0.predictor = buffer[offset++]; channel0.predictor |= buffer[offset++] << 8; if ((channel0.predictor & 0x8000) != 0) channel0.predictor -= 0x10000; channel0.stepIndex = buffer[offset++]; if (channel0.stepIndex > 88) channel0.stepIndex = 88; offset++; int index = sampleOffset * 2; samples[index] = (byte)channel0.predictor; samples[index + 1] = (byte)(channel0.predictor >> 8); ++sampleOffset; if (channels == 2) { channel1.predictor = buffer[offset++]; channel1.predictor |= buffer[offset++] << 8; if ((channel1.predictor & 0x8000) != 0) channel1.predictor -= 0x10000; channel1.stepIndex = buffer[offset++]; if (channel1.stepIndex > 88) channel1.stepIndex = 88; offset++; index = sampleOffset * 2; samples[index] = (byte)channel1.predictor; samples[index + 1] = (byte)(channel1.predictor >> 8); ++sampleOffset; } if (channels == 2) { for (int nibbles = 2 * (blockSize - 8); nibbles > 0; nibbles -= 16) { for (int i = 0; i < 4; i++) { index = (sampleOffset + i * 4) * 2; int sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index = (sampleOffset + i * 4 + 2) * 2; sample = AdpcmImaWavExpandNibble(ref channel0, buffer[offset + i] >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); } offset += 4; for (int i = 0; i < 4; i++) { index = (sampleOffset + i * 4 + 1) * 2; int sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index = (sampleOffset + i * 4 + 3) * 2; sample = AdpcmImaWavExpandNibble(ref channel1, buffer[offset + i] >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); } offset += 4; sampleOffset += 16; } } else { for (int nibbles = 2 * (blockSize - 4); nibbles > 0; nibbles -= 2) { index = (sampleOffset * 2); int b = buffer[offset]; int sample = AdpcmImaWavExpandNibble(ref channel0, b & 0x0f); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); index += 2; sample = AdpcmImaWavExpandNibble(ref channel0, b >> 4); samples[index] = (byte)sample; samples[index + 1] = (byte)(sample >> 8); sampleOffset += 2; ++offset; } } } return samples; } #endregion } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteAudioFactory.cs ================================================ // Copyright (C)2022 Nick Kastellanos namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteAudioFactory : AudioFactory { public override AudioServiceStrategy CreateAudioServiceStrategy() { return new ConcreteAudioService(); } public override MicrophoneStrategy CreateMicrophoneStrategy() { return new ConcreteMicrophone(); } public override SoundEffectStrategy CreateSoundEffectStrategy() { return new ConcreteSoundEffect(); } } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteAudioService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2025 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; using Microsoft.Xna.Platform.Utilities; #if ANDROID using Microsoft.Xna.Framework; using System.Globalization; using Android.Content.PM; using Android.Content; using Android.Media; #endif #if IOS || TVOS using Microsoft.Xna.Framework; using AudioToolbox; using AudioUnit; using AVFoundation; #endif namespace Microsoft.Xna.Platform.Audio { internal class ConcreteAudioService : AudioServiceStrategy { private IntPtr _device; private IntPtr _context; IntPtr NullContext = IntPtr.Zero; #if ANDROID private const int DEFAULT_FREQUENCY = 48000; private const int DEFAULT_UPDATE_SIZE = 512; private const int DEFAULT_UPDATE_BUFFER_COUNT = 2; #endif private Stack _alSourcesPool = new Stack(32); bool _isDisposed; // supported formats public bool SupportsIma4 { get; private set; } public bool SupportsAdpcm { get; private set; } public bool SupportsIeee { get; private set; } // Ieee Float32 //supported extensions public bool SupportsEfx { get; private set; } internal int ReverbSlot = 0; internal int ReverbEffect = 0; public int Filter { get; private set; } internal AL OpenAL { get { return AL.Current; } } protected IntPtr ALDevice { get {return _device; } } internal ConcreteAudioService() { if (OpenAL.NativeLibrary == IntPtr.Zero) throw new DllNotFoundException("Couldn't initialize OpenAL because the native binaries couldn't be found."); if (!OpenSoundDevice()) throw new NoAudioHardwareException("OpenAL device could not be initialized, see console output for details."); // We have hardware here and it is ready Filter = 0; if (OpenAL.Efx.IsInitialized) { Filter = OpenAL.Efx.GenFilter(); } } public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy) { return new ConcreteSoundEffectInstance(this, sfxStrategy); } public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels) { return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels); } /// /// Open the sound device, sets up an audio context, and makes the new context /// the current context. Note that this method will stop the playback of /// music that was running prior to the game start. If any error occurs, then /// the state of the controller is reset. /// /// True if the sound device was setup, and false if not. private bool OpenSoundDevice() { try { _device = OpenAL.ALC.OpenDevice(string.Empty); OpenAL.Efx.Initialize(_device); } catch (Exception ex) { throw new NoAudioHardwareException("OpenAL device could not be initialized.", ex); } OpenAL.ALC.CheckError("Could not open OpenAL device"); if (_device != IntPtr.Zero) { #if ANDROID // Query the device for the ideal frequency and update buffer size so // we can get the low latency sound path. /* The recommended sequence is: Check for feature "android.hardware.audio.low_latency" using code such as this: import android.content.pm.PackageManager; ... PackageManager pm = getContext().getPackageManager(); boolean claimsFeature = pm.hasSystemFeature(PackageManager.FEATURE_AUDIO_LOW_LATENCY); Check for API level 17 or higher, to confirm use of android.media.AudioManager.getProperty(). Get the native or optimal output sample rate and buffer size for this device's primary output stream, using code such as this: import android.media.AudioManager; ... AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); String sampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER)); Note that sampleRate and framesPerBuffer are Strings. First check for null and then convert to int using Integer.parseInt(). Now use OpenSL ES to create an AudioPlayer with PCM buffer queue data locator. See http://stackoverflow.com/questions/14842803/low-latency-audio-playback-on-android */ int frequency = DEFAULT_FREQUENCY; int updateSize = DEFAULT_UPDATE_SIZE; int updateBuffers = DEFAULT_UPDATE_BUFFER_COUNT; if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr1) { var appContext = Android.App.Application.Context; Android.Util.Log.Debug("OAL", appContext.PackageManager.HasSystemFeature(PackageManager.FeatureAudioLowLatency) ? "Supports low latency audio playback." : "Does not support low latency audio playback."); AudioManager audioManager = appContext.GetSystemService(Context.AudioService) as AudioManager; if (audioManager != null) { string frequencyStr = audioManager.GetProperty(AudioManager.PropertyOutputSampleRate); if (!string.IsNullOrEmpty(frequencyStr)) frequency = int.Parse(frequencyStr, CultureInfo.InvariantCulture); string updateSizeStr = audioManager.GetProperty(AudioManager.PropertyOutputFramesPerBuffer); if (!string.IsNullOrEmpty(updateSizeStr)) updateSize = int.Parse(updateSizeStr, CultureInfo.InvariantCulture); } // If 4.4 or higher, then we don't need to double buffer on the application side. // See http://stackoverflow.com/a/15006327 if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) { updateBuffers = 1; } } else { Android.Util.Log.Debug("OAL", "Android 4.2 or higher required for low latency audio playback."); } Android.Util.Log.Debug("OAL", "Using sample rate " + frequency + "Hz and " + updateBuffers + " buffers of " + updateSize + " frames."); // These are missing and non-standard ALC constants const int AlcFrequency = 0x1007; const int AlcUpdateSize = 0x1014; const int AlcUpdateBuffers = 0x1015; int[] attribute = new[] { AlcFrequency, frequency, AlcUpdateSize, updateSize, AlcUpdateBuffers, updateBuffers, 0 }; #elif IOS || TVOS AVAudioSession.SharedInstance().Init(); // NOTE: Do not override AVAudioSessionCategory set by the game developer: // see https://github.com/MonoGame/MonoGame/issues/6595 EventHandler handler = delegate(object sender, AVAudioSessionInterruptionEventArgs e) { switch (e.InterruptionType) { case AVAudioSessionInterruptionType.Began: AVAudioSession.SharedInstance().SetActive(false); OpenAL.ALC.MakeContextCurrent(IntPtr.Zero); OpenAL.ALC.SuspendContext(_context); break; case AVAudioSessionInterruptionType.Ended: AVAudioSession.SharedInstance().SetActive(true); OpenAL.ALC.MakeContextCurrent(_context); OpenAL.ALC.ProcessContext(_context); break; } }; AVAudioSession.Notifications.ObserveInterruption(handler); // Activate the instance or else the interruption handler will not be called. AVAudioSession.SharedInstance().SetActive(true); int[] attribute = new int[0]; #else int[] attribute = new int[0]; #endif _context = OpenAL.ALC.CreateContext(_device, attribute); OpenAL.ALC.CheckError("Could not create OpenAL context"); if (_context != NullContext) { OpenAL.ALC.MakeContextCurrent(_context); OpenAL.ALC.CheckError("Could not make OpenAL context current"); SupportsIma4 = OpenAL.IsExtensionPresent("AL_EXT_IMA4"); SupportsAdpcm = OpenAL.IsExtensionPresent("AL_SOFT_MSADPCM"); SupportsIeee = OpenAL.IsExtensionPresent("AL_EXT_float32"); SupportsEfx = OpenAL.IsExtensionPresent("AL_EXT_EFX"); return true; } } return false; } public override void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone) { if (!OpenAL.ALC.IsExtensionPresent(_device, "ALC_EXT_CAPTURE")) { return; } // default device string defaultDevice = OpenAL.ALC.GetString(_device, AlcGetString.CaptureDefaultDeviceSpecifier); // enumerating capture devices IntPtr deviceList = OpenAL.ALC.alcGetString(IntPtr.Zero, (int)AlcGetString.CaptureDeviceSpecifier); // Marshal native UTF-8 character array to .NET string // The native string is a null-char separated list of known capture device specifiers ending with an empty string while (true) { string deviceIdentifier = InteropHelpers.Utf8ToString(deviceList); if (string.IsNullOrEmpty(deviceIdentifier)) break; Microphone microphone = base.CreateMicrophone(deviceIdentifier); microphones.Add(microphone); if (deviceIdentifier == defaultDevice) defaultMicrophone = microphone; // increase the offset, add one extra for the terminator deviceList += deviceIdentifier.Length + 1; } // set the default Microphone if defaultDevice was Empty. if (defaultMicrophone == null && microphones.Count > 0) defaultMicrophone = microphones[0]; #if (false) // Xamarin platforms don't provide an handle to alGetString that allow to marshal string arrays // so we're basically only adding the default microphone Microphone microphone = base.CreateMicrophone(defaultDevice); microphones.Add(microphone); defaultMicrophone = microphone; #endif } public override int PlatformGetMaxPlayingInstances() { #if DESKTOPGL // MacOS & Linux shares a limit of 256. return 256; #elif IOS || TVOS // Reference: http://stackoverflow.com/questions/3894044/maximum-number-of-openal-sound-buffers-on-iphone return 32; #else throw new InvalidOperationException(); #endif } public override void PlatformSetReverbSettings(ReverbSettings reverbSettings) { if (!OpenAL.Efx.IsInitialized) return; if (ReverbEffect != 0) return; EffectsExtension efx = OpenAL.Efx; efx.GenAuxiliaryEffectSlots(1, out ReverbSlot); efx.GenEffect(out ReverbEffect); efx.Effect(ReverbEffect, EfxEffecti.EffectType, (int)EfxEffectType.Reverb); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbReflectionsDelay, reverbSettings.ReflectionsDelayMs / 1000.0f); efx.Effect(ReverbEffect, EfxEffectf.LateReverbDelay, reverbSettings.ReverbDelayMs / 1000.0f); // map these from range 0-15 to 0-1 efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDiffusion, reverbSettings.EarlyDiffusion / 15f); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDiffusion, reverbSettings.LateDiffusion / 15f); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGainLF, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.LowEqGain - 8f), 1.0f)); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbLFReference, (reverbSettings.LowEqCutoff * 50f) + 50f); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGainHF, XactHelpers.ParseVolumeFromDecibels(reverbSettings.HighEqGain - 8f)); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbHFReference, (reverbSettings.HighEqCutoff * 500f) + 1000f); // According to Xamarin docs EaxReverbReflectionsGain Unit: Linear gain Range [0.0f .. 3.16f] Default: 0.05f efx.Effect(ReverbEffect, EfxEffectf.EaxReverbReflectionsGain, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.ReflectionsGainDb), 3.16f)); efx.Effect(ReverbEffect, EfxEffectf.EaxReverbGain, Math.Min(XactHelpers.ParseVolumeFromDecibels(reverbSettings.ReverbGainDb), 1.0f)); // map these from 0-100 down to 0-1 efx.Effect(ReverbEffect, EfxEffectf.EaxReverbDensity, reverbSettings.DensityPct / 100f); efx.AuxiliaryEffectSlot(ReverbSlot, EfxEffectSlotf.EffectSlotGain, reverbSettings.WetDryMixPct / 200f); // Dont know what to do with these EFX has no mapping for them. Just ignore for now // we can enable them as we go. //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionLeft, reverbSettings.PositionLeft); //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionRight, reverbSettings.PositionRight); //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionLeftMatrix, reverbSettings.PositionLeftMatrix); //efx.SetEffectParam(ReverbEffect, EfxEffectf.PositionRightMatrix, reverbSettings.PositionRightMatrix); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RearDelayMs); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterFrequencyHz); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterMainDb); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomFilterHighFrequencyDb); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.DecayTimeSec); //efx.SetEffectParam(ReverbEffect, EfxEffectf.LowFrequencyReference, reverbSettings.RoomSizeFeet); efx.BindEffectToAuxiliarySlot(ReverbSlot, ReverbEffect); } /// /// Reserves a sound buffer and return its identifier. If there are no available sources /// or the controller was not able to setup the hardware then an /// is thrown. /// /// The source number of the reserved sound buffer. public int ReserveSource() { if (_alSourcesPool.Count > 0) return _alSourcesPool.Pop(); int src = OpenAL.GenSource(); OpenAL.CheckError("Failed to generate source."); return src; } public void RecycleSource(int sourceId) { OpenAL.Source(sourceId, ALSourcei.Buffer, 0); OpenAL.CheckError("Failed to free source from buffers."); _alSourcesPool.Push(sourceId); } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } if (ReverbEffect != 0) { OpenAL.Efx.DeleteAuxiliaryEffectSlot(ReverbSlot); OpenAL.Efx.DeleteEffect((int)ReverbEffect); } while (_alSourcesPool.Count > 0) { OpenAL.DeleteSource(_alSourcesPool.Pop()); OpenAL.CheckError("Failed to delete source."); } if (Filter != 0 && OpenAL.Efx.IsInitialized) { OpenAL.Efx.DeleteFilter(Filter); } // CleanUpOpenAL OpenAL.ALC.MakeContextCurrent(NullContext); if (_context != NullContext) { OpenAL.ALC.DestroyContext(_context); } if (_device != IntPtr.Zero) { OpenAL.ALC.CloseDevice(_device); } _context = NullContext; _device = IntPtr.Zero; } } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteDynamicSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance , IDynamicSoundEffectInstanceStrategy { private int _sampleRate; private int _channels; private ALFormat _alFormat; private int _queuedBuffersCount; private int _lastalBuffer = 0; private Queue _markerQueue = new Queue(); public event MarkerHandler Marker; public delegate void MarkerHandler(object sender, int markerId); struct MarkerInfo { public readonly int alBuffer; public readonly int Marker; public MarkerInfo(int lastBufferId, int marker) : this() { this.alBuffer = lastBufferId; this.Marker = marker; } public override string ToString() { return string.Format("{{ alBuffer: {0}, Marker: {1} }}", alBuffer, Marker); } } private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null); DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance { get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; } set { _dynamicSoundEffectInstanceRef.Target = value; } } internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels) : base(audioServiceStrategy, null) { _sampleRate = sampleRate; _channels = channels; _alFormat = channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16; _sourceId = ConcreteAudioService.ReserveSource(); } public int BuffersNeeded { get; set; } public int DynamicPlatformGetPendingBufferCount() { return _queuedBuffersCount; } public override void PlatformPause() { ConcreteAudioService.OpenAL.SourcePause(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to pause the source."); } public override void PlatformPlay(bool isLooped) { // Ensure that the source is not looped (due to source recycling) ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, false); ConcreteAudioService.OpenAL.CheckError("Failed to set source loop state."); ConcreteAudioService.OpenAL.SourcePlay(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to play the source."); } public override void PlatformResume(bool isLooped) { ConcreteAudioService.OpenAL.SourcePlay(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to play the source."); } public override void PlatformStop() { ConcreteAudioService.OpenAL.SourceStop(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to stop the source."); DynamicPlatformClearBuffers(); } public override void PlatformRelease(bool isLooped) { System.Diagnostics.Debug.Assert(isLooped == false); // TODO: remove queued buffers except for the current one that is still playing. throw new NotImplementedException(); } public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state) { // Get a buffer int alBuffer = ConcreteAudioService.OpenAL.GenBuffer(); ConcreteAudioService.OpenAL.CheckError("Failed to generate OpenAL data buffer."); // Bind the data ConcreteAudioService.OpenAL.BufferData(alBuffer, _alFormat, buffer, offset, count, _sampleRate, 0); ConcreteAudioService.OpenAL.CheckError("Failed to fill buffer."); // Queue the buffer _queuedBuffersCount++; _lastalBuffer = alBuffer; ConcreteAudioService.OpenAL.SourceQueueBuffer(_sourceId, alBuffer); ConcreteAudioService.OpenAL.CheckError("Failed to queue the buffer."); // If the source has run out of buffers, restart it ALSourceState sourceState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId); if (state == SoundState.Playing && sourceState == ALSourceState.Stopped) { ConcreteAudioService.OpenAL.SourcePlay(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to resume source playback."); } } internal void SubmitMarker(int markerId) { lock (AudioService.SyncHandle) { if (_lastalBuffer == 0) throw new InvalidOperationException("No buffer submitted to associate marker with."); MarkerInfo markerInfo = new MarkerInfo(_lastalBuffer, markerId); _markerQueue.Enqueue(markerInfo); } } unsafe public void DynamicPlatformUpdateBuffers() { // Get the processed buffers ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersProcessed, out int processedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to get processed buffer count."); // Unqueue and release buffers if (processedBuffers > 0) { int* pProcessedBuffers = stackalloc int[processedBuffers]; ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, processedBuffers, pProcessedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to unqueue buffers."); ConcreteAudioService.OpenAL.alDeleteBuffers(processedBuffers, pProcessedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to delete buffers."); for (int i = 0; i < processedBuffers; i++) { _queuedBuffersCount--; int alBuffer = pProcessedBuffers[i]; while (_markerQueue.Count > 0 && _markerQueue.Peek().alBuffer == alBuffer) { MarkerInfo markerInfo = _markerQueue.Dequeue(); var handler = Marker; if (handler != null) handler(this, markerInfo.Marker); } } // Raise the event for each removed buffer this.BuffersNeeded+= processedBuffers; } } unsafe public void DynamicPlatformClearBuffers() { // Get the queued buffers ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersQueued, out int queuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to get processed buffer count."); // Remove all queued buffers if (queuedBuffers > 0) { int* pQueuedBuffers = stackalloc int[queuedBuffers]; ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, queuedBuffers, pQueuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to unqueue buffers."); ConcreteAudioService.OpenAL.alDeleteBuffers(queuedBuffers, pQueuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to delete buffers."); _queuedBuffersCount-= queuedBuffers; } _lastalBuffer = 0; _markerQueue.Clear(); } protected unsafe override void Dispose(bool disposing) { if (disposing) { } ALSourceState sourceState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to get state."); if (sourceState != ALSourceState.Stopped) { ConcreteAudioService.OpenAL.SourceStop(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to stop source."); } // Get the queued buffers ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.BuffersQueued, out int queuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to get processed buffer count."); // Remove all queued buffers if (queuedBuffers > 0) { int* pQueuedBuffers = stackalloc int[queuedBuffers]; ConcreteAudioService.OpenAL.alSourceUnqueueBuffers(_sourceId, queuedBuffers, pQueuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to unqueue buffers."); ConcreteAudioService.OpenAL.alDeleteBuffers(queuedBuffers, pQueuedBuffers); ConcreteAudioService.OpenAL.CheckError("Failed to delete buffers."); _queuedBuffersCount-= queuedBuffers; } _lastalBuffer = 0; _markerQueue.Clear(); ConcreteAudioService.RecycleSource(_sourceId); _sourceId = 0; //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteMicrophone.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; namespace Microsoft.Xna.Platform.Audio { /// /// Provides microphones capture features. /// public sealed class ConcreteMicrophone : MicrophoneStrategy { private IntPtr _captureDevice = IntPtr.Zero; internal AL OpenAL { get { return AL.Current; } } public override TimeSpan BufferDuration { get { return base.BufferDuration; } set { base.BufferDuration = value; } } public override MicrophoneState State { get { return base.State; } set { base.State = value; } } internal ConcreteMicrophone() : base() { } private void CheckALCError(string operation) { AlcError error = OpenAL.ALC.GetErrorForDevice(_captureDevice); if (error != AlcError.NoError) { string msg = String.Format("{0} - OpenAL Error: {1}", operation, error); throw new NoMicrophoneConnectedException(msg); } } public override void PlatformStart(string deviceName) { int sampleSizeInBytes = GetSampleSizeInBytes(BufferDuration) * 2; _captureDevice = OpenAL.ALC.CaptureOpenDevice(deviceName, checked((uint)SampleRate), ALFormat.Mono16, sampleSizeInBytes); if (_captureDevice == IntPtr.Zero) { CheckALCError("Failed to open capture device '"+ deviceName + "'."); throw new NoMicrophoneConnectedException("Failed to open capture device'"+ deviceName + "'."); } OpenAL.ALC.CaptureStart(_captureDevice); CheckALCError("Failed to start capture."); } public override void PlatformStop() { OpenAL.ALC.CaptureStop(_captureDevice); CheckALCError("Failed to stop capture."); OpenAL.ALC.CaptureCloseDevice(_captureDevice); CheckALCError("Failed to close capture device."); _captureDevice = IntPtr.Zero; } private int GetQueuedSampleCount() { int sampleCount = OpenAL.ALC.GetInteger(_captureDevice, AlcGetInteger.CaptureSamples); CheckALCError("Failed to query capture samples."); return sampleCount; } public override bool PlatformIsHeadset() { throw new NotImplementedException(); } public override bool PlatformUpdate() { int sampleCount = GetQueuedSampleCount(); return (sampleCount > 0); } public override int PlatformGetData(byte[] buffer, int offset, int count) { int sampleCount = GetQueuedSampleCount(); sampleCount = Math.Min(count / 2, sampleCount); // 16bit adjust if (sampleCount > 0) { GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); try { OpenAL.ALC.CaptureSamples(_captureDevice, handle.AddrOfPinnedObject() + offset, sampleCount); CheckALCError("Failed to capture samples."); } finally { handle.Free(); } return sampleCount * 2; // 16bit adjust } return 0; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteSoundEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; using Microsoft.Xna.Platform.Audio.Utilities; #if IOS || TVOS using AudioToolbox; using AudioUnit; #endif namespace Microsoft.Xna.Platform.Audio { class ConcreteSoundEffect : SoundEffectStrategy { private AudioService _audioService; private int _bufferId; private bool _isBufferDisposed; #region Initialization public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration) { byte[] buffer; int audioFormat; int freq; int channels; int blockAlignment; int bitsPerSample; int samplesPerBlock; int sampleCount; buffer = AudioLoader.Load(stream, out audioFormat, out freq, out channels, out blockAlignment, out bitsPerSample, out samplesPerBlock, out sampleCount); duration = TimeSpan.FromSeconds((float)sampleCount / (float)freq); PlatformInitializeBuffer(buffer, 0, buffer.Length, audioFormat, channels, freq, blockAlignment, bitsPerSample, 0, 0); } public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength) { short audioFormat = BitConverter.ToInt16(header, 0); short channels = BitConverter.ToInt16(header, 2); int sampleRate = BitConverter.ToInt32(header, 4); short blockAlignment = BitConverter.ToInt16(header, 12); short bitsPerSample = BitConverter.ToInt16(header, 14); PlatformInitializeBuffer(buffer, index, count, audioFormat, channels, sampleRate, blockAlignment, bitsPerSample, loopStart, loopLength); } private void PlatformInitializeBuffer(byte[] buffer, int index, int count, int audioFormat, int channels, int sampleRate, int blockAlignment, int bitsPerSample, int loopStart, int loopLength) { AudioService audioService = AudioService.Current; ConcreteAudioService concreteAudioService = ((IPlatformAudioService)audioService).Strategy.ToConcrete(); switch (audioFormat) { case AudioLoader.FormatPcm: // PCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); break; case AudioLoader.FormatIeee: // IEEE Float if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); if (!concreteAudioService.SupportsIeee) { // If 32-bit IEEE float is not supported, convert to 16-bit signed PCM buffer = AudioLoader.ConvertFloatTo16(buffer, index, count); index = 0; count = buffer.Length; bitsPerSample = 16; PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); } else { InitializeIeeeFloat(concreteAudioService, buffer, index, count, sampleRate, channels, loopStart, loopLength); } break; case AudioLoader.FormatMsAdpcm: // Microsoft ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); if (!concreteAudioService.SupportsAdpcm) { // If MS-ADPCM is not supported, convert to 16-bit signed PCM buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment); index = 0; count = buffer.Length; bitsPerSample = 16; PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); } else { InitializeAdpcm(concreteAudioService, buffer, index, count, sampleRate, channels, blockAlignment, loopStart, loopLength); } break; case AudioLoader.FormatIma4: // IMA4 ADPCM if (channels < 1 || 2 < channels) throw new NotSupportedException("The specified channel count (" + channels + ") is not supported."); if (!concreteAudioService.SupportsIma4) { // If IMA/ADPCM is not supported, convert to 16-bit signed PCM buffer = AudioLoader.ConvertIma4ToPcm(buffer, index, count, channels, blockAlignment); index = 0; count = buffer.Length; bitsPerSample = 16; PlatformInitializePcm(buffer, index, count, bitsPerSample, sampleRate, channels, loopStart, loopLength); } else { InitializeIma4(concreteAudioService, buffer, index, count, sampleRate, channels, blockAlignment, loopStart, loopLength); } break; default: throw new NotSupportedException("The specified sound format (" + audioFormat.ToString() + ") is not supported."); } } public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); if (sampleBits == 24) { // Convert 24-bit signed PCM to 16-bit signed PCM buffer = AudioLoader.Convert24To16(buffer, index, count); index = 0; count = buffer.Length; sampleBits = 16; } int sampleAlignment = 0; ALFormat alFormat; switch (channels) { case 1: alFormat = (sampleBits == 8) ? ALFormat.Mono8 : ALFormat.Mono16; break; case 2: alFormat = (sampleBits == 8) ? ALFormat.Stereo8 : ALFormat.Stereo16; break; default: throw new NotSupportedException("The specified channel count is not supported."); } CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment); } public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)AudioService.Current).Strategy.ToConcrete(); if (!concreteAudioService.SupportsAdpcm) { // If MS-ADPCM is not supported, convert to 16-bit signed PCM buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment); index = 0; count = buffer.Length; int sampleBits = 16; PlatformInitializePcm(buffer, index, count, sampleBits, sampleRate, channels, loopStart, loopLength); } else { InitializeAdpcm(concreteAudioService, buffer, index, count, sampleRate, channels, (blockAlignment + 22) * channels, loopStart, loopLength); } } private void InitializeIeeeFloat(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int loopStart, int loopLength) { int sampleAlignment = 0; ALFormat alFormat; switch (channels) { case 1: alFormat = ALFormat.MonoFloat32; break; case 2: alFormat = ALFormat.StereoFloat32; break; default: throw new NotSupportedException("The specified channel count is not supported."); } CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment); } private void InitializeAdpcm(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int blockAlignment, int loopStart, int loopLength) { int sampleAlignment = AudioLoader.SampleAlignment(AudioLoader.FormatMsAdpcm, channels, 0, blockAlignment); // Buffer length must be aligned with the block alignment count = count - (count % blockAlignment); ALFormat alFormat; switch (channels) { case 1: alFormat = ALFormat.MonoMSAdpcm; break; case 2: alFormat = ALFormat.StereoMSAdpcm; break; default: throw new NotSupportedException("The specified channel count is not supported."); } CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment); } private void InitializeIma4(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, int sampleRate, int channels, int blockAlignment, int loopStart, int loopLength) { int sampleAlignment = AudioLoader.SampleAlignment(AudioLoader.FormatIma4, channels, 0, blockAlignment); ALFormat alFormat; switch (channels) { case 1: alFormat = ALFormat.MonoIma4; break; case 2: alFormat = ALFormat.StereoIma4; break; default: throw new NotSupportedException("The specified channel count is not supported."); } CreateBuffer(concreteAudioService, buffer, index, count, alFormat, sampleRate, sampleAlignment); } private void CreateBuffer(ConcreteAudioService concreteAudioService, byte[] buffer, int index, int count, ALFormat alFormat, int sampleRate, int sampleAlignment) { _audioService = AudioService.Current; _audioService.Disposing += _audioService_Disposing; _bufferId = concreteAudioService.OpenAL.GenBuffer(); concreteAudioService.OpenAL.CheckError("Failed to generate OpenAL data buffer."); concreteAudioService.OpenAL.BufferData(_bufferId, alFormat, buffer, index, count, sampleRate, sampleAlignment); concreteAudioService.OpenAL.CheckError("Failed to fill buffer."); } internal void _audioService_Disposing(object sender, EventArgs e) { DeleteBuffer(); } private void DeleteBuffer() { if (!_isBufferDisposed) { ConcreteAudioService concreteAudioService = ((IPlatformAudioService)_audioService).Strategy.ToConcrete(); concreteAudioService.OpenAL.DeleteBuffer(_bufferId); concreteAudioService.OpenAL.CheckError("Failed to delete buffer."); _isBufferDisposed = true; _bufferId = 0; _audioService.Disposing -= _audioService_Disposing; _audioService = null; } _audioService = null; } #endregion internal int GetALBufferId() { return _bufferId; } #region IDisposable Members protected override void Dispose(bool disposing) { if (disposing) { } DeleteBuffer(); } #endregion } } ================================================ FILE: Platforms/Audio/OpenAL/ConcreteSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.OpenAL; namespace Microsoft.Xna.Platform.Audio { public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy { private AudioServiceStrategy _audioServiceStrategy; private ConcreteSoundEffect _concreteSoundEffect; internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } } protected int _sourceId; float reverb; bool applyFilter = false; EfxFilterType filterType; float filterQ; float frequency; // emmiter's position/velocity relative to the listener Vector3 _relativePosition; Vector3 _relativeVelocity; public override bool IsXAct { get { return base.IsXAct; } set { base.IsXAct = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override float Pan { get { return base.Pan; } set { base.Pan = value; // OpenAL doesn't support Panning. We emulate it using 3D audio. // If the user set both Pan and Apply3D(), only the last call takes effect. _relativePosition.X = (float)Math.Sin(value * MathHelper.PiOver2) * SoundEffect.DistanceScale; _relativePosition.Y = (float)Math.Cos(value * MathHelper.PiOver2) * SoundEffect.DistanceScale; _relativePosition.Z = 0f; if (_sourceId != 0) { ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition); ConcreteAudioService.OpenAL.CheckError("Failed to set source pan."); } } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (_sourceId != 0) { // XAct sound effects are not tied to the SoundEffect master volume. float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f; ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Gain, value * masterVolume); ConcreteAudioService.OpenAL.CheckError("Failed to set source volume."); } } } public override float Pitch { get { return base.Pitch; } set { base.Pitch = value; if (_sourceId != 0) { ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Pitch, XnaPitchToAlPitch(value)); ConcreteAudioService.OpenAL.CheckError("Failed to set source pitch."); } } } #region Initialization internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) : base(audioServiceStrategy, sfxStrategy) { _audioServiceStrategy = audioServiceStrategy; _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy; this.Pan = 0.0f; this.Volume = 1.0f; this.Pitch = 0.0f; } #endregion // Initialization /// /// Converts the XNA [-1, 1] pitch range to OpenAL pitch (0, INF). /// The pitch of the sound in the Microsoft XNA range. /// private static float XnaPitchToAlPitch(float xnaPitch) { return (float)Math.Pow(2, xnaPitch); } internal int GetSamplePosition() { ConcreteAudioService.OpenAL.GetSource(_sourceId, ALGetSourcei.SampleOffset, out int samplePosition); ConcreteAudioService.OpenAL.CheckError("Failed to get sample offset."); return samplePosition; } public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter) { // set up matrix to transform world space coordinates to listener space coordinates Matrix worldSpaceToListenerSpace = Matrix.Invert(Matrix.CreateWorld(listener.Position, listener.Forward, listener.Up)); // set up our final position and velocity according to orientation of listener _relativePosition = emitter.Position; Vector3.Transform(ref _relativePosition, ref worldSpaceToListenerSpace, out _relativePosition); _relativeVelocity = emitter.Velocity - listener.Velocity; Vector3.TransformNormal(ref _relativeVelocity, ref worldSpaceToListenerSpace, out _relativeVelocity); if (_sourceId != 0) { // set the position based on relative position ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition); ConcreteAudioService.OpenAL.CheckError("Failed to set source position."); ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Velocity, ref _relativeVelocity); ConcreteAudioService.OpenAL.CheckError("Failed to set source velocity."); ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.ReferenceDistance, SoundEffect.DistanceScale); ConcreteAudioService.OpenAL.CheckError("Failed to set source distance scale."); ConcreteAudioService.OpenAL.DopplerFactor(SoundEffect.DopplerScale); ConcreteAudioService.OpenAL.CheckError("Failed to set Doppler scale."); } } public override void PlatformPause() { ConcreteAudioService.OpenAL.SourcePause(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to pause source."); } public override void PlatformPlay(bool isLooped) { _sourceId = ConcreteAudioService.ReserveSource(); // bind buffer to source int bufferId = _concreteSoundEffect.GetALBufferId(); ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.Buffer, bufferId); ConcreteAudioService.OpenAL.CheckError("Failed to bind buffer to source."); // Send the position, gain, looping, pitch, and distance model to the OpenAL driver. ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.SourceRelative, 1); ConcreteAudioService.OpenAL.CheckError("Failed set source relative."); // Distance Model ConcreteAudioService.OpenAL.DistanceModel(ALDistanceModel.InverseDistanceClamped); ConcreteAudioService.OpenAL.CheckError("Failed set source distance."); // Position/Pan ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Position, ref _relativePosition); ConcreteAudioService.OpenAL.CheckError("Failed to set source position/pan."); // Velocity ConcreteAudioService.OpenAL.Source(_sourceId, ALSource3f.Velocity, ref _relativeVelocity); ConcreteAudioService.OpenAL.CheckError("Failed to set source pan."); // Distance Scale ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.ReferenceDistance, SoundEffect.DistanceScale); ConcreteAudioService.OpenAL.CheckError("Failed to set source distance scale."); // Doppler Scale ConcreteAudioService.OpenAL.DopplerFactor(SoundEffect.DopplerScale); ConcreteAudioService.OpenAL.CheckError("Failed to set Doppler scale."); // Volume // XAct sound effects are not tied to the SoundEffect master volume. float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f; ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Gain, base.Volume * masterVolume); ConcreteAudioService.OpenAL.CheckError("Failed to set source volume."); // Looping ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, isLooped); ConcreteAudioService.OpenAL.CheckError("Failed to set source loop state."); // Pitch ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcef.Pitch, XnaPitchToAlPitch(base.Pitch)); ConcreteAudioService.OpenAL.CheckError("Failed to set source pitch."); ApplyReverb(); ApplyFilter(); ConcreteAudioService.OpenAL.SourcePlay(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to play source."); } public override void PlatformResume(bool isLooped) { ConcreteAudioService.OpenAL.SourcePlay(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to play source."); } public override void PlatformStop() { ConcreteAudioService.OpenAL.SourceStop(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to stop source."); // Reset the SendFilter to 0 if we are NOT using reverb since // sources are recycled if (ConcreteAudioService.SupportsEfx) { ConcreteAudioService.OpenAL.Efx.BindSourceToAuxiliarySlot(_sourceId, 0, 0, 0); ConcreteAudioService.OpenAL.CheckError("Failed to unset reverb."); ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.EfxDirectFilter, 0); ConcreteAudioService.OpenAL.CheckError("Failed to unset filter."); } ConcreteAudioService.RecycleSource(_sourceId); _sourceId = 0; } public override void PlatformRelease(bool isLooped) { if (isLooped) { ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, false); ConcreteAudioService.OpenAL.CheckError("Failed to set source loop state."); } } public override bool PlatformUpdateState(ref SoundState state) { // check if the sound has stopped if (state == SoundState.Playing) { ALSourceState alState = ConcreteAudioService.OpenAL.GetSourceState(_sourceId); ConcreteAudioService.OpenAL.CheckError("Failed to get source state."); if (alState == ALSourceState.Stopped) { // update instance PlatformStop(); state = SoundState.Stopped; return true; } } return false; } public override void PlatformSetIsLooped(bool isLooped, SoundState state) { if (_sourceId != 0) { ConcreteAudioService.OpenAL.Source(_sourceId, ALSourceb.Looping, isLooped); ConcreteAudioService.OpenAL.CheckError("Failed to set source loop state."); } } public override void PlatformSetReverbMix(SoundState state, float mix, float pan) { if (!ConcreteAudioService.OpenAL.Efx.IsInitialized) return; reverb = mix; if (state == SoundState.Playing) { ApplyReverb(); reverb = 0f; } } void ApplyReverb() { if (reverb > 0f && ConcreteAudioService.ReverbSlot != 0) { ConcreteAudioService.OpenAL.Efx.BindSourceToAuxiliarySlot(_sourceId, ConcreteAudioService.ReverbSlot, 0, 0); ConcreteAudioService.OpenAL.CheckError("Failed to set reverb."); } } void ApplyFilter() { if (applyFilter && ConcreteAudioService.Filter > 0) { float freq = frequency / 20000f; float lf = 1.0f - freq; EffectsExtension efx = ConcreteAudioService.OpenAL.Efx; efx.Filter(ConcreteAudioService.Filter, EfxFilteri.FilterType, (int)filterType); ConcreteAudioService.OpenAL.CheckError("Failed to set filter."); switch (filterType) { case EfxFilterType.Lowpass: efx.Filter(ConcreteAudioService.Filter, EfxFilterf.LowpassGainHF, freq); ConcreteAudioService.OpenAL.CheckError("Failed to set LowpassGainHF."); break; case EfxFilterType.Highpass: efx.Filter(ConcreteAudioService.Filter, EfxFilterf.HighpassGainLF, freq); ConcreteAudioService.OpenAL.CheckError("Failed to set HighpassGainLF."); break; case EfxFilterType.Bandpass: efx.Filter(ConcreteAudioService.Filter, EfxFilterf.BandpassGainHF, freq); ConcreteAudioService.OpenAL.CheckError("Failed to set BandpassGainHF."); efx.Filter(ConcreteAudioService.Filter, EfxFilterf.BandpassGainLF, lf); ConcreteAudioService.OpenAL.CheckError("Failed to set BandpassGainLF."); break; } ConcreteAudioService.OpenAL.Source(_sourceId, ALSourcei.EfxDirectFilter, ConcreteAudioService.Filter); ConcreteAudioService.OpenAL.CheckError("Failed to set DirectFilter."); } } public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency) { if (!ConcreteAudioService.OpenAL.Efx.IsInitialized) return; applyFilter = true; switch (mode) { case FilterMode.BandPass: filterType = EfxFilterType.Bandpass; break; case FilterMode.LowPass: filterType = EfxFilterType.Lowpass; break; case FilterMode.HighPass: filterType = EfxFilterType.Highpass; break; } this.filterQ = filterQ; this.frequency = frequency; if (state == SoundState.Playing) { ApplyFilter(); applyFilter = false; } } public override void PlatformClearFilter() { if (!ConcreteAudioService.OpenAL.Efx.IsInitialized) return; applyFilter = false; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/OpenAL/OpenAL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Utilities; #if ANDROID using System.IO; #endif namespace Microsoft.Xna.Platform.Audio.OpenAL { internal enum ALFormat { Mono8 = 0x1100, Mono16 = 0x1101, Stereo8 = 0x1102, Stereo16 = 0x1103, MonoIma4 = 0x1300, StereoIma4 = 0x1301, MonoMSAdpcm = 0x1302, StereoMSAdpcm = 0x1303, MonoFloat32 = 0x10010, StereoFloat32 = 0x10011, } internal enum ALError { NoError = 0, InvalidName = 0xA001, InvalidEnum = 0xA002, InvalidValue = 0xA003, InvalidOperation = 0xA004, OutOfMemory = 0xA005, } internal enum ALGetString { Extensions = 0xB004, } internal enum ALBufferi { UnpackBlockAlignmentSoft = 0x200C, LoopSoftPointsExt = 0x2015, } internal enum ALGetBufferi { Bits = 0x2002, Channels = 0x2003, Size = 0x2004, } internal enum ALSourceb { Looping = 0x1007, } internal enum ALSourcei { SourceRelative = 0x202, Buffer = 0x1009, EfxDirectFilter = 0x20005, EfxAuxilarySendFilter = 0x20006, } internal enum ALSourcef { Pitch = 0x1003, Gain = 0x100A, ReferenceDistance = 0x1020, } internal enum ALGetSourcei { SampleOffset = 0x1025, SourceState = 0x1010, BuffersQueued = 0x1015, BuffersProcessed = 0x1016, } internal enum ALSourceState { Initial = 0x1011, Playing = 0x1012, Paused = 0x1013, Stopped = 0x1014, } internal enum ALListener3f { Position = 0x1004, } internal enum ALSource3f { Position = 0x1004, Velocity = 0x1006, } internal enum ALDistanceModel { None = 0, InverseDistanceClamped = 0xD002, } internal enum AlcError { NoError = 0, InvalidDevice = 0xA001, InvalidContext = 0xA002, InvalidEnum = 0xA003, InvalidValue = 0xA004, OutOfMemory = 0xA005, } internal enum AlcGetString { CaptureDeviceSpecifier = 0x0310, CaptureDefaultDeviceSpecifier = 0x0311, Extensions = 0x1006, } internal enum AlcGetInteger { CaptureSamples = 0x0312, } internal enum EfxFilteri { FilterType = 0x8001, } internal enum EfxFilterf { LowpassGain = 0x0001, LowpassGainHF = 0x0002, HighpassGain = 0x0001, HighpassGainLF = 0x0002, BandpassGain = 0x0001, BandpassGainLF = 0x0002, BandpassGainHF = 0x0003, } internal enum EfxFilterType { None = 0x0000, Lowpass = 0x0001, Highpass = 0x0002, Bandpass = 0x0003, } internal enum EfxEffecti { EffectType = 0x8001, SlotEffect = 0x0001, } internal enum EfxEffectSlotf { EffectSlotGain = 0x0002, } internal enum EfxEffectf { EaxReverbDensity = 0x0001, EaxReverbDiffusion = 0x0002, EaxReverbGain = 0x0003, EaxReverbGainHF = 0x0004, EaxReverbGainLF = 0x0005, DecayTime = 0x0006, DecayHighFrequencyRatio = 0x0007, DecayLowFrequencyRation = 0x0008, EaxReverbReflectionsGain = 0x0009, EaxReverbReflectionsDelay = 0x000A, ReflectionsPain = 0x000B, LateReverbGain = 0x000C, LateReverbDelay = 0x000D, LateRevertPain = 0x000E, EchoTime = 0x000F, EchoDepth = 0x0010, ModulationTime = 0x0011, ModulationDepth = 0x0012, AirAbsorbsionHighFrequency = 0x0013, EaxReverbHFReference = 0x0014, EaxReverbLFReference = 0x0015, RoomRolloffFactor = 0x0016, DecayHighFrequencyLimit = 0x0017, } internal enum EfxEffectType { Reverb = 0x8000, } internal class AL { public IntPtr NativeLibrary { get; private set; } public Alc ALC { get; private set; } public EffectsExtension Efx { get; private set; } private static AL _current; public static AL Current { get { if (_current != null) return _current; if (_current == null) _current = new AL(); return _current; } } public AL() { NativeLibrary = GetNativeLibrary(); LoadEntryPoints(NativeLibrary); ALC = new Alc(NativeLibrary); Efx = new EffectsExtension(this); } private IntPtr GetNativeLibrary() { #if DESKTOPGL if (CurrentPlatform.OS == OS.Windows) return FuncLoader.LoadLibraryExt("soft_oal.dll"); else if (CurrentPlatform.OS == OS.Linux) return FuncLoader.LoadLibraryExt("libopenal.so.1"); else if (CurrentPlatform.OS == OS.MacOSX) return FuncLoader.LoadLibraryExt("libopenal.1.dylib"); else return FuncLoader.LoadLibraryExt("openal"); #elif ANDROID IntPtr ret = FuncLoader.LoadLibrary("libopenal.so"); if (ret != IntPtr.Zero) return ret; string appFilesDir = Environment.GetFolderPath(Environment.SpecialFolder.Personal); string appDir = Path.GetDirectoryName(appFilesDir); string lib = Path.Combine(appDir, "lib", "libopenal.so"); return FuncLoader.LoadLibrary(lib); #elif IOS || TVOS return FuncLoader.LoadLibrary("/System/Library/Frameworks/OpenAL.framework/OpenAL"); #else throw new PlatformNotSupportedException(); #endif } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alenable(int cap); internal d_alenable Enable; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_albufferdata(int buffer, int format, byte* data, int size, int freq); internal d_albufferdata alBufferData; internal unsafe void BufferData(int buffer, ALFormat alFormat, byte[] data, int index, int count, int freq, int sampleAlignment) { if (sampleAlignment > 0) { Bufferi(buffer, ALBufferi.UnpackBlockAlignmentSoft, sampleAlignment); this.CheckError("Failed to fill buffer."); } fixed(byte* pData = data) { alBufferData(buffer, (int)alFormat, (pData + index), count, freq); } } internal unsafe void BufferData(int buffer, ALFormat alFormat, short[] data, int count, int freq) { fixed (void* pData = data) { alBufferData(buffer, (int)alFormat, (byte*)pData, count, freq); } } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_aldeletebuffers(int n, int* pbuffers); internal d_aldeletebuffers alDeleteBuffers; internal unsafe void DeleteBuffers(int[] buffers) { fixed (int* pbuffers = buffers) { alDeleteBuffers(buffers.Length, pbuffers); } } internal unsafe void DeleteBuffer(int buffer) { alDeleteBuffers(1, &buffer); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_albufferi(int buffer, ALBufferi param, int value); internal d_albufferi Bufferi; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_algetbufferi(int buffer, ALGetBufferi param, out int value); internal d_algetbufferi GetBufferi; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_albufferiv(int buffer, ALBufferi param, int[] values); internal d_albufferiv Bufferiv; internal void GetBuffer(int buffer, ALGetBufferi param, out int value) { GetBufferi(buffer, param, out value); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_algenbuffers(int count, int* pbuffers); internal d_algenbuffers alGenBuffers; internal unsafe void GenBuffers(int[] buffers) { fixed (int* pbuffers = buffers) { alGenBuffers(buffers.Length, pbuffers); } } internal unsafe int GenBuffer() { int buffer; alGenBuffers(1, &buffer); return buffer; } internal float GetDuration(int buffer, int sampleRate) { int samples = GetSamples(buffer); return (float)samples / (float)sampleRate; } internal int GetSamples(int buffer) { int bits, channels, unpackedSize; GetBuffer(buffer, ALGetBufferi.Bits, out bits); this.CheckError("Failed to get buffer bits"); GetBuffer(buffer, ALGetBufferi.Channels, out channels); this.CheckError("Failed to get buffer channels"); GetBuffer(buffer, ALGetBufferi.Size, out unpackedSize); this.CheckError("Failed to get buffer size"); return (unpackedSize / ((bits / 8) * channels)); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_algensources(int n, int* sources); internal d_algensources alGenSources; internal unsafe void GenSources(int[] sources) { fixed (int* psources = sources) { alGenSources(sources.Length, psources); } } internal unsafe int GenSource() { int source; alGenSources(1, &source); return source; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate ALError d_algeterror(); internal d_algeterror GetError; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate bool d_alisbuffer(int buffer); internal d_alisbuffer alIsBuffer; internal bool IsBuffer(int buffer) { return alIsBuffer(buffer); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsourcepause(int source); internal d_alsourcepause alSourcePause; internal void SourcePause(int source) { alSourcePause(source); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsourceplay(int source); internal d_alsourceplay alSourcePlay; internal void SourcePlay(int source) { alSourcePlay(source); } internal static string GetErrorString(ALError errorCode) { return errorCode.ToString(); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate bool d_alissource(int source); internal d_alissource IsSource; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_aldeletesources(int n, int* psources); internal d_aldeletesources alDeleteSources; internal unsafe void DeleteSource(int source) { alDeleteSources(1, &source); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsourcestop(int source); internal d_alsourcestop SourceStop; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsourcei(int source, int param, int value); internal d_alsourcei alSourcei; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsource3i(int source, ALSourcei param, int a, int b, int c); internal d_alsource3i alSource3i; internal void Source(int source, ALSourcei param, int value) { alSourcei(source, (int)param, value); } internal void Source(int source, ALSourceb param, bool value) { alSourcei(source, (int)param, value ? 1 : 0); } internal void Source(int source, ALSource3f param, float x, float y, float z) { alSource3f(source, param, x, y, z); } internal void Source(int source, ALSource3f param, ref Vector3 value) { alSource3f(source, param, value.X, value.Y, value.Z); } internal void Source(int source, ALSourcef param, float value) { alSourcef(source, param, value); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsourcef(int source, ALSourcef param, float value); internal d_alsourcef alSourcef; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alsource3f(int source, ALSource3f param, float x, float y, float z); internal d_alsource3f alSource3f; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_algetsourcei(int source, ALGetSourcei param, out int value); internal d_algetsourcei GetSource; internal ALSourceState GetSourceState(int source) { int state; GetSource(source, ALGetSourcei.SourceState, out state); return (ALSourceState)state; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_algetlistener3f(ALListener3f param, out float value1, out float value2, out float value3); internal d_algetlistener3f GetListener; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_aldistancemodel(ALDistanceModel model); internal d_aldistancemodel DistanceModel; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_aldopplerfactor(float value); internal d_aldopplerfactor DopplerFactor; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_alsourcequeuebuffers(int source, int numEntries, int* pbuffers); internal d_alsourcequeuebuffers alSourceQueueBuffers; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_alsourceunqueuebuffers(int source, int numEntries, int* pbuffers); internal d_alsourceunqueuebuffers alSourceUnqueueBuffers; internal unsafe void SourceQueueBuffers(int source, int numEntries, int[] buffers) { fixed (int* pbuffers = buffers) { alSourceQueueBuffers(source, numEntries, pbuffers); } } internal unsafe void SourceQueueBuffer(int source, int buffer) { alSourceQueueBuffers(source, 1, &buffer); } internal unsafe void SourceUnqueueBuffers(int source, int numEntries, int[] buffers) { fixed (int* pbuffers = buffers) { alSourceUnqueueBuffers(source, numEntries, pbuffers); } } internal unsafe int SourceUnqueueBuffer(int source) { int buffer; alSourceUnqueueBuffers(source, 1, &buffer); return buffer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate int d_algetenumvalue(string enumName); internal d_algetenumvalue alGetEnumValue; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate bool d_alisextensionpresent(string extensionName); internal d_alisextensionpresent IsExtensionPresent; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_algetprocaddress(string functionName); internal d_algetprocaddress alGetProcAddress; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_algetstring(int p); private d_algetstring alGetString; internal string GetString(int p) { return Marshal.PtrToStringAnsi(alGetString(p)); } internal string Get(ALGetString p) { return GetString((int)p); } private void LoadEntryPoints(IntPtr library) { Enable = FuncLoader.LoadFunctionOrNull(library, "alEnable"); alBufferData = FuncLoader.LoadFunctionOrNull(library, "alBufferData"); alDeleteBuffers = FuncLoader.LoadFunctionOrNull(library, "alDeleteBuffers"); Bufferi = FuncLoader.LoadFunctionOrNull(library, "alBufferi"); GetBufferi = FuncLoader.LoadFunctionOrNull(library, "alGetBufferi"); Bufferiv = FuncLoader.LoadFunctionOrNull(library, "alBufferiv"); alGenBuffers = FuncLoader.LoadFunctionOrNull(library, "alGenBuffers"); alGenSources = FuncLoader.LoadFunctionOrNull(library, "alGenSources"); GetError = FuncLoader.LoadFunctionOrNull(library, "alGetError"); alIsBuffer = FuncLoader.LoadFunctionOrNull(library, "alIsBuffer"); alSourcePause = FuncLoader.LoadFunctionOrNull(library, "alSourcePause"); alSourcePlay = FuncLoader.LoadFunctionOrNull(library, "alSourcePlay"); IsSource = FuncLoader.LoadFunctionOrNull(library, "alIsSource"); alDeleteSources = FuncLoader.LoadFunctionOrNull(library, "alDeleteSources"); SourceStop = FuncLoader.LoadFunctionOrNull(library, "alSourceStop"); alSourcei = FuncLoader.LoadFunctionOrNull(library, "alSourcei"); alSource3i = FuncLoader.LoadFunctionOrNull(library, "alSource3i"); alSourcef = FuncLoader.LoadFunctionOrNull(library, "alSourcef"); alSource3f = FuncLoader.LoadFunctionOrNull(library, "alSource3f"); GetSource = FuncLoader.LoadFunctionOrNull(library, "alGetSourcei"); GetListener = FuncLoader.LoadFunctionOrNull(library, "alGetListener3f"); DistanceModel = FuncLoader.LoadFunctionOrNull(library, "alDistanceModel"); DopplerFactor = FuncLoader.LoadFunctionOrNull(library, "alDopplerFactor"); alSourceQueueBuffers = FuncLoader.LoadFunctionOrNull(library, "alSourceQueueBuffers"); alSourceUnqueueBuffers = FuncLoader.LoadFunctionOrNull(library, "alSourceUnqueueBuffers"); alGetEnumValue = FuncLoader.LoadFunctionOrNull(library, "alGetEnumValue"); IsExtensionPresent = FuncLoader.LoadFunctionOrNull(library, "alIsExtensionPresent"); alGetProcAddress = FuncLoader.LoadFunctionOrNull(library, "alGetProcAddress"); alGetString = FuncLoader.LoadFunctionOrNull(library, "alGetString"); } } internal class Alc { public Alc(IntPtr library) { LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alccreatecontext(IntPtr device, int[] attributes); internal d_alccreatecontext CreateContext; internal AlcError GetError() { return GetErrorForDevice(IntPtr.Zero); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate AlcError d_alcgeterror(IntPtr device); internal d_alcgeterror GetErrorForDevice; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal unsafe delegate void d_alcgetintegerv(IntPtr device, int param, int size, int* value); internal d_alcgetintegerv alcGetIntegerv; internal unsafe int GetInteger(IntPtr device, AlcGetInteger param) { int value; alcGetIntegerv(device, (int)param, 1, &value); return value; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alcgetcurrentcontext(); internal d_alcgetcurrentcontext GetCurrentContext; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcmakecontextcurrent(IntPtr context); internal d_alcmakecontextcurrent MakeContextCurrent; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcdestroycontext(IntPtr context); internal d_alcdestroycontext DestroyContext; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcclosedevice(IntPtr device); internal d_alcclosedevice CloseDevice; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alcopendevice(string device); internal d_alcopendevice OpenDevice; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alccaptureopendevice(string device, uint sampleRate, int format, int sampleSize); internal d_alccaptureopendevice alcCaptureOpenDevice; internal IntPtr CaptureOpenDevice(string device, uint sampleRate, ALFormat alFormat, int sampleSize) { return alcCaptureOpenDevice(device, sampleRate, (int)alFormat, sampleSize); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alccapturestart(IntPtr device); internal d_alccapturestart CaptureStart; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alccapturesamples(IntPtr device, IntPtr buffer, int samples); internal d_alccapturesamples CaptureSamples; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alccapturestop(IntPtr device); internal d_alccapturestop CaptureStop; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alccaptureclosedevice(IntPtr device); internal d_alccaptureclosedevice CaptureCloseDevice; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate bool d_alcisextensionpresent(IntPtr device, string extensionName); internal d_alcisextensionpresent IsExtensionPresent; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate IntPtr d_alcgetstring(IntPtr device, int p); internal d_alcgetstring alcGetString; private void LoadEntryPoints(IntPtr library) { CreateContext = FuncLoader.LoadFunctionOrNull(library, "alcCreateContext"); GetErrorForDevice = FuncLoader.LoadFunctionOrNull(library, "alcGetError"); alcGetIntegerv = FuncLoader.LoadFunctionOrNull(library, "alcGetIntegerv"); GetCurrentContext = FuncLoader.LoadFunctionOrNull(library, "alcGetCurrentContext"); MakeContextCurrent = FuncLoader.LoadFunctionOrNull(library, "alcMakeContextCurrent"); DestroyContext = FuncLoader.LoadFunctionOrNull(library, "alcDestroyContext"); CloseDevice = FuncLoader.LoadFunctionOrNull(library, "alcCloseDevice"); OpenDevice = FuncLoader.LoadFunctionOrNull(library, "alcOpenDevice"); alcCaptureOpenDevice = FuncLoader.LoadFunctionOrNull(library, "alcCaptureOpenDevice"); CaptureStart = FuncLoader.LoadFunctionOrNull(library, "alcCaptureStart"); CaptureSamples = FuncLoader.LoadFunctionOrNull(library, "alcCaptureSamples"); CaptureStop = FuncLoader.LoadFunctionOrNull(library, "alcCaptureStop"); CaptureCloseDevice = FuncLoader.LoadFunctionOrNull(library, "alcCaptureCloseDevice"); IsExtensionPresent = FuncLoader.LoadFunctionOrNull(library, "alcIsExtensionPresent"); alcGetString = FuncLoader.LoadFunctionOrNull(library, "alcGetString"); #if IOS || TVOS SuspendContext = FuncLoader.LoadFunctionOrNull(library, "alcSuspendContext"); ProcessContext = FuncLoader.LoadFunctionOrNull(library, "alcProcessContext"); #endif #if ANDROID DevicePause = FuncLoader.LoadFunctionOrNull(library, "alcDevicePauseSOFT"); DeviceResume = FuncLoader.LoadFunctionOrNull(library, "alcDeviceResumeSOFT"); #endif } internal string GetString(IntPtr device, int p) { return Marshal.PtrToStringAnsi(alcGetString(device, p)); } internal string GetString(IntPtr device, AlcGetString p) { return GetString(device, (int)p); } #if IOS || TVOS [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcsuspendcontext(IntPtr context); internal d_alcsuspendcontext SuspendContext; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcprocesscontext(IntPtr context); internal d_alcprocesscontext ProcessContext; #endif #if ANDROID [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcdevicepausesoft(IntPtr device); internal d_alcdevicepausesoft DevicePause; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void d_alcdeviceresumesoft(IntPtr device); internal d_alcdeviceresumesoft DeviceResume; #endif } internal class XRamExtension { internal enum XRamStorage { Automatic, Hardware, Accessible } private int RamSize; private int RamFree; private int StorageAuto; private int StorageHardware; private int StorageAccessible; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate bool SetBufferModeDelegate(int n, ref int buffers, int value); private SetBufferModeDelegate setBufferMode; internal bool IsInitialized { get; private set; } private AL _openAL; internal XRamExtension(AL openAL) { _openAL = openAL; Initialize(); } private void Initialize() { IsInitialized = false; if (_openAL.IsExtensionPresent("EAX-RAM")) { RamSize = _openAL.alGetEnumValue("AL_EAX_RAM_SIZE"); RamFree = _openAL.alGetEnumValue("AL_EAX_RAM_FREE"); StorageAuto = _openAL.alGetEnumValue("AL_STORAGE_AUTOMATIC"); StorageHardware = _openAL.alGetEnumValue("AL_STORAGE_HARDWARE"); StorageAccessible = _openAL.alGetEnumValue("AL_STORAGE_ACCESSIBLE"); if (RamSize == 0 || RamFree == 0 || StorageAuto == 0 || StorageHardware == 0 || StorageAccessible == 0) { return; } try { LoadEntryPoints(); } catch (Exception) { return; } IsInitialized = true; } } private void LoadEntryPoints() { setBufferMode = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("EAXSetBufferMode")); } internal bool SetBufferMode(int n, ref int buffer, XRamStorage storage) { if (storage == XRamExtension.XRamStorage.Accessible) { return setBufferMode(n, ref buffer, StorageAccessible); } if (storage != XRamExtension.XRamStorage.Hardware) { return setBufferMode(n, ref buffer, StorageAuto); } return setBufferMode(n, ref buffer, StorageHardware); } } internal class EffectsExtension { /* Effect API */ [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alGenEffectsDelegate(int n, out int effect); private alGenEffectsDelegate alGenEffects; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alDeleteEffectsDelegate(int n, ref int effect); private alDeleteEffectsDelegate alDeleteEffects; //[UnmanagedFunctionPointer(CallingConvention.Cdecl)] //private delegate bool alIsEffectDelegate(int effect); //private alIsEffectDelegate alIsEffect; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alEffectfDelegate(int effect, EfxEffectf param, float value); private alEffectfDelegate alEffectf; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alEffectiDelegate(int effect, EfxEffecti param, int value); private alEffectiDelegate alEffecti; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alGenAuxiliaryEffectSlotsDelegate(int n, out int effectslots); private alGenAuxiliaryEffectSlotsDelegate alGenAuxiliaryEffectSlots; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alDeleteAuxiliaryEffectSlotsDelegate(int n, ref int effectslots); private alDeleteAuxiliaryEffectSlotsDelegate alDeleteAuxiliaryEffectSlots; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alAuxiliaryEffectSlotiDelegate(int slot, EfxEffecti type, int effect); private alAuxiliaryEffectSlotiDelegate alAuxiliaryEffectSloti; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alAuxiliaryEffectSlotfDelegate(int slot, EfxEffectSlotf param, float value); private alAuxiliaryEffectSlotfDelegate alAuxiliaryEffectSlotf; /* Filter API */ [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private unsafe delegate void alGenFiltersDelegate(int n, [Out] int* pfilters); private alGenFiltersDelegate alGenFilters; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alFilteriDelegate(int filter, EfxFilteri param, int value); private alFilteriDelegate alFilteri; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void alFilterfDelegate(int filter, EfxFilterf param, float value); private alFilterfDelegate alFilterf; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private unsafe delegate void alDeleteFiltersDelegate(int n, [In] int* pfilters); private alDeleteFiltersDelegate alDeleteFilters; internal bool IsInitialized { get; private set; } private AL _openAL; public EffectsExtension(AL openAL) { _openAL = openAL; } internal void Initialize(IntPtr device) { IsInitialized = false; if (_openAL.ALC.IsExtensionPresent(device, "ALC_EXT_EFX")) { LoadEntryPoints(); IsInitialized = true; } } private void LoadEntryPoints() { alGenEffects = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alGenEffects")); alDeleteEffects = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alDeleteEffects")); alEffectf = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alEffectf")); alEffecti = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alEffecti")); alGenAuxiliaryEffectSlots = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alGenAuxiliaryEffectSlots")); alDeleteAuxiliaryEffectSlots = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alDeleteAuxiliaryEffectSlots")); alAuxiliaryEffectSloti = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alAuxiliaryEffectSloti")); alAuxiliaryEffectSlotf = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alAuxiliaryEffectSlotf")); alGenFilters = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alGenFilters")); alFilteri = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alFilteri")); alFilterf = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alFilterf")); alDeleteFilters = InteropHelpers.GetDelegateForFunctionPointer(_openAL.alGetProcAddress("alDeleteFilters")); } /* alEffecti(effect, EfxEffecti.FilterType, (int)EfxEffectType.Reverb); ALHelper.CheckError("Failed to set Filter Type."); */ internal void GenAuxiliaryEffectSlots(int count, out int slot) { this.alGenAuxiliaryEffectSlots(count, out slot); _openAL.CheckError("Failed to Genereate Aux slot"); } internal void GenEffect(out int effect) { this.alGenEffects(1, out effect); _openAL.CheckError("Failed to Generate Effect."); } internal void DeleteAuxiliaryEffectSlot(int slot) { alDeleteAuxiliaryEffectSlots(1, ref slot); } internal void DeleteEffect(int effect) { alDeleteEffects(1, ref effect); } internal void BindEffectToAuxiliarySlot(int slot, int effect) { alAuxiliaryEffectSloti(slot, EfxEffecti.SlotEffect, effect); _openAL.CheckError("Failed to bind Effect"); } internal void AuxiliaryEffectSlot(int slot, EfxEffectSlotf param, float value) { alAuxiliaryEffectSlotf(slot, param, value); _openAL.CheckError("Failes to set " + param + " " + value); } internal void BindSourceToAuxiliarySlot(int source, int slot, int slotnumber, int filter) { _openAL.alSource3i(source, ALSourcei.EfxAuxilarySendFilter, slot, slotnumber, filter); } internal void Effect(int effect, EfxEffectf param, float value) { alEffectf(effect, param, value); _openAL.CheckError("Failed to set " + param + " " + value); } internal void Effect(int effect, EfxEffecti param, int value) { alEffecti(effect, param, value); _openAL.CheckError("Failed to set " + param + " " + value); } internal unsafe int GenFilter() { int filter = 0; this.alGenFilters(1, &filter); return filter; } internal void Filter(int filter, EfxFilteri param, int EfxFilterType) { this.alFilteri(filter, param, EfxFilterType); } internal void Filter(int filter, EfxFilterf param, float EfxFilterType) { this.alFilterf(filter, param, EfxFilterType); } internal void BindFilterToSource(int source, int filter) { _openAL.Source(source, ALSourcei.EfxDirectFilter, filter); } internal unsafe void DeleteFilter(int filter) { alDeleteFilters(1, &filter); } } internal static class ALHelper { [System.Diagnostics.Conditional("DEBUG")] [System.Diagnostics.DebuggerHidden] internal static void CheckError(this AL openAL, string message) { System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message)); ALError error = openAL.GetError(); if (error != ALError.NoError) { throw new InvalidOperationException(message + " (Reason: " + AL.GetErrorString(error) + ")"); } } [System.Diagnostics.Conditional("DEBUG")] [System.Diagnostics.DebuggerHidden] internal static void CheckError(this AL openAL, string message, params object[] args) { System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message)); ALError error = openAL.GetError(); if (error != ALError.NoError) { message = String.Format(message, args); throw new InvalidOperationException(message + " (Reason: " + AL.GetErrorString(error) + ")"); } } public static bool IsStereoFormat(ALFormat alFormat) { return (alFormat == ALFormat.Stereo8 || alFormat == ALFormat.Stereo16 || alFormat == ALFormat.StereoFloat32 || alFormat == ALFormat.StereoIma4 || alFormat == ALFormat.StereoMSAdpcm); } } internal static class AlcHelper { [System.Diagnostics.Conditional("DEBUG")] [System.Diagnostics.DebuggerHidden] internal static void CheckError(this Alc alc, string message) { System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message)); AlcError error = alc.GetError(); if (error != AlcError.NoError) { throw new InvalidOperationException(message + " (Reason: " + error.ToString() + ")"); } } [System.Diagnostics.Conditional("DEBUG")] [System.Diagnostics.DebuggerHidden] internal static void CheckError(this Alc alc, string message, params object[] args) { System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(message)); AlcError error = alc.GetError(); if (error != AlcError.NoError) { message = String.Format(message, args); throw new InvalidOperationException(message + " (Reason: " + error.ToString() + ")"); } } } } ================================================ FILE: Platforms/Audio/Ref/ConcreteAudioFactory.cs ================================================ // Copyright (C)2022 Nick Kastellanos namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteAudioFactory : AudioFactory { public override AudioServiceStrategy CreateAudioServiceStrategy() { return new ConcreteAudioService(); } public override MicrophoneStrategy CreateMicrophoneStrategy() { return new ConcreteMicrophone(); } public override SoundEffectStrategy CreateSoundEffectStrategy() { return new ConcreteSoundEffect(); } } } ================================================ FILE: Platforms/Audio/Ref/ConcreteAudioService.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { internal class ConcreteAudioService : AudioServiceStrategy { internal ConcreteAudioService() { throw new PlatformNotSupportedException(); } public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy) { return new ConcreteSoundEffectInstance(this, sfxStrategy); } public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels) { return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels); } public override void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone) { throw new PlatformNotSupportedException(); } public override int PlatformGetMaxPlayingInstances() { return int.MaxValue; } public override void PlatformSetReverbSettings(ReverbSettings reverbSettings) { throw new PlatformNotSupportedException(); } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/Ref/ConcreteDynamicSoundEffectInstance.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance , IDynamicSoundEffectInstanceStrategy { private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null); DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance { get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; } set { _dynamicSoundEffectInstanceRef.Target = value; } } internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels) : base(audioServiceStrategy, null) { throw new PlatformNotSupportedException(); } public int BuffersNeeded { get; set; } public int DynamicPlatformGetPendingBufferCount() { throw new PlatformNotSupportedException(); } public override void PlatformPause() { throw new PlatformNotSupportedException(); } public override void PlatformPlay(bool isLooped) { throw new PlatformNotSupportedException(); } public override void PlatformResume(bool isLooped) { throw new PlatformNotSupportedException(); } public override void PlatformStop() { throw new PlatformNotSupportedException(); } public override void PlatformRelease(bool isLooped) { System.Diagnostics.Debug.Assert(isLooped == false); throw new PlatformNotSupportedException(); } public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state) { throw new PlatformNotSupportedException(); } public void DynamicPlatformUpdateBuffers() { throw new PlatformNotSupportedException(); } public void DynamicPlatformClearBuffers() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Audio/Ref/ConcreteMicrophone.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { /// /// Provides microphones capture features. /// public sealed class ConcreteMicrophone : MicrophoneStrategy { public override TimeSpan BufferDuration { get { return base.BufferDuration; } set { base.BufferDuration = value; } } public override MicrophoneState State { get { return base.State; } set { base.State = value; } } internal ConcreteMicrophone() : base() { throw new PlatformNotSupportedException(); } public override void PlatformStart(string deviceName) { throw new PlatformNotSupportedException(); } public override void PlatformStop() { throw new PlatformNotSupportedException(); } public override bool PlatformIsHeadset() { throw new PlatformNotSupportedException(); } public override bool PlatformUpdate() { throw new PlatformNotSupportedException(); } public override int PlatformGetData(byte[] buffer, int offset, int count) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/Ref/ConcreteSoundEffect.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { class ConcreteSoundEffect : SoundEffectStrategy { #region Initialization public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration) { duration = TimeSpan.Zero; throw new PlatformNotSupportedException(); } public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength) { throw new PlatformNotSupportedException(); } public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength) { throw new PlatformNotSupportedException(); } public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength) { throw new PlatformNotSupportedException(); } #endregion #region IDisposable Members protected override void Dispose(bool disposing) { if (disposing) { } } #endregion } } ================================================ FILE: Platforms/Audio/Ref/ConcreteSoundEffectInstance.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using AudioListener = Microsoft.Xna.Framework.Audio.AudioListener; namespace Microsoft.Xna.Platform.Audio { public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy { public override bool IsXAct { get { return base.IsXAct; } set { base.IsXAct = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override float Pan { get { return base.Pan; } set { base.Pan = value; throw new PlatformNotSupportedException(); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; throw new PlatformNotSupportedException(); } } public override float Pitch { get { return base.Pitch; } set { base.Pitch = value; throw new PlatformNotSupportedException(); } } #region Initialization internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) : base(audioServiceStrategy, sfxStrategy) { throw new PlatformNotSupportedException(); } #endregion // Initialization public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter) { throw new PlatformNotSupportedException(); } public override void PlatformPause() { throw new PlatformNotSupportedException(); } public override void PlatformPlay(bool isLooped) { throw new PlatformNotSupportedException(); } public override void PlatformResume(bool isLooped) { throw new PlatformNotSupportedException(); } public override void PlatformStop() { throw new PlatformNotSupportedException(); } public override void PlatformRelease(bool isLooped) { throw new PlatformNotSupportedException(); } public override bool PlatformUpdateState(ref SoundState state) { throw new PlatformNotSupportedException(); } public override void PlatformSetIsLooped(bool isLooped, SoundState state) { throw new PlatformNotSupportedException(); } public override void PlatformSetReverbMix(SoundState state, float mix, float pan) { throw new PlatformNotSupportedException(); } public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency) { throw new PlatformNotSupportedException(); } public override void PlatformClearFilter() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteAudioFactory.cs ================================================ // Copyright (C)2022 Nick Kastellanos namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteAudioFactory : AudioFactory { public override AudioServiceStrategy CreateAudioServiceStrategy() { return new ConcreteAudioService(); } public override MicrophoneStrategy CreateMicrophoneStrategy() { return new ConcreteMicrophone(); } public override SoundEffectStrategy CreateSoundEffectStrategy() { return new ConcreteSoundEffect(); } } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteAudioService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; using SharpDX; using SharpDX.XAudio2; using SharpDX.Multimedia; using SharpDX.X3DAudio; namespace Microsoft.Xna.Platform.Audio { internal class ConcreteAudioService : AudioServiceStrategy { internal XAudio2 Device { get; private set; } internal MasteringVoice MasterVoice { get; private set; } private X3DAudio _device3D; private bool _device3DDirty = true; private Speakers _speakers = Speakers.FrontLeft | Speakers.FrontRight; // Stereo // XNA does not expose this, but it exists in X3DAudio. // TODO: move to SoundEngine. //[CLSCompliant(false)] public Speakers Speakers { get { return _speakers; } set { if (_speakers == value) return; _speakers = value; _device3DDirty = true; } } internal X3DAudio Device3D { get { if (_device3DDirty) { _device3DDirty = false; _device3D = new X3DAudio(_speakers); } return _device3D; } } private SubmixVoice _reverbVoice; internal ConcreteAudioService() { try { if (Device == null) { #if WINDOWSDX AppDomain.CurrentDomain.ProcessExit += (sender, e) => { AudioService.Shutdown(); }; #endif #if DEBUG && !(UAP || WINUI) try { //Fails if the XAudio2 SDK is not installed Device = new XAudio2(XAudio2Flags.DebugEngine, ProcessorSpecifier.DefaultProcessor); Device.StartEngine(); } catch #endif { Device = new XAudio2(XAudio2Flags.None, ProcessorSpecifier.DefaultProcessor); Device.StartEngine(); } } // Just use the default device. #if (UAP || WINUI) string deviceId = null; #else const int deviceId = 0; #endif if (MasterVoice == null) { // Let windows autodetect number of channels and sample rate. MasterVoice = new MasteringVoice(Device, XAudio2.DefaultChannels, XAudio2.DefaultSampleRate); } // The autodetected value of MasterVoice.ChannelMask corresponds to the speaker layout. #if (UAP || WINUI) Speakers = (Speakers)MasterVoice.ChannelMask; #else Speakers = Device.Version == XAudio2Version.Version27 ? Device.GetDeviceDetails(deviceId).OutputFormat.ChannelMask : (Speakers)MasterVoice.ChannelMask; #endif } catch { // Release the device and null it as // we have no audio support. if (Device != null) { Device.Dispose(); Device = null; } MasterVoice = null; } } public override SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy sfxStrategy) { return new ConcreteSoundEffectInstance(this, sfxStrategy); } public override IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels) { return new ConcreteDynamicSoundEffectInstance(this, sampleRate, channels); } public override void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone) { } internal SubmixVoice ReverbVoice { get { if (_reverbVoice == null) { VoiceDetails details = MasterVoice.VoiceDetails; _reverbVoice = new SubmixVoice(Device, details.InputChannelCount, details.InputSampleRate); #if SHARPDX263 var reverb = new SharpDX.XAudio2.Fx.Reverb(); #else var reverb = new SharpDX.XAudio2.Fx.Reverb(Device); #endif EffectDescriptor desc = new EffectDescriptor(reverb); desc.InitialState = true; desc.OutputChannelCount = details.InputChannelCount; _reverbVoice.SetEffectChain(desc); } return _reverbVoice; } } public override int PlatformGetMaxPlayingInstances() { // These platforms are only limited by memory. return int.MaxValue; } public override void PlatformSetReverbSettings(ReverbSettings reverbSettings) { // All parameters related to sampling rate or time are relative to a 48kHz // voice and must be scaled for use with other sampling rates. float timeScale = 48000.0f / ReverbVoice.VoiceDetails.InputSampleRate; var settings = new SharpDX.XAudio2.Fx.ReverbParameters { ReflectionsGain = reverbSettings.ReflectionsGainDb, ReverbGain = reverbSettings.ReverbGainDb, DecayTime = reverbSettings.DecayTimeSec, ReflectionsDelay = (byte)(reverbSettings.ReflectionsDelayMs * timeScale), ReverbDelay = (byte)(reverbSettings.ReverbDelayMs * timeScale), RearDelay = (byte)(reverbSettings.RearDelayMs * timeScale), RoomSize = reverbSettings.RoomSizeFeet, Density = reverbSettings.DensityPct, LowEQGain = (byte)reverbSettings.LowEqGain, LowEQCutoff = (byte)reverbSettings.LowEqCutoff, HighEQGain = (byte)reverbSettings.HighEqGain, HighEQCutoff = (byte)reverbSettings.HighEqCutoff, PositionLeft = (byte)reverbSettings.PositionLeft, PositionRight = (byte)reverbSettings.PositionRight, PositionMatrixLeft = (byte)reverbSettings.PositionLeftMatrix, PositionMatrixRight = (byte)reverbSettings.PositionRightMatrix, EarlyDiffusion = (byte)reverbSettings.EarlyDiffusion, LateDiffusion = (byte)reverbSettings.LateDiffusion, RoomFilterMain = reverbSettings.RoomFilterMainDb, RoomFilterFreq = reverbSettings.RoomFilterFrequencyHz * timeScale, RoomFilterHF = reverbSettings.RoomFilterHighFrequencyDb, WetDryMix = reverbSettings.WetDryMixPct }; ReverbVoice.SetEffectParameters(0, settings); } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { if (_reverbVoice != null) { _reverbVoice.DestroyVoice(); _reverbVoice.Dispose(); _reverbVoice = null; } if (MasterVoice != null) { MasterVoice.Dispose(); MasterVoice = null; } if (Device != null) { Device.StopEngine(); Device.Dispose(); Device = null; } } _device3DDirty = true; _speakers = Speakers.FrontLeft | Speakers.FrontRight; // Stereo } } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteDynamicSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; using SharpDX; using SharpDX.Multimedia; using SharpDX.XAudio2; namespace Microsoft.Xna.Platform.Audio { public sealed class ConcreteDynamicSoundEffectInstance : ConcreteSoundEffectInstance , IDynamicSoundEffectInstanceStrategy { private static ByteBufferPool _bufferPool = new ByteBufferPool(); private int _sampleRate; private int _channels; private List _queuedBuffers = new List(); private int _uid; private readonly WeakReference _dynamicSoundEffectInstanceRef = new WeakReference(null); DynamicSoundEffectInstance IDynamicSoundEffectInstanceStrategy.DynamicSoundEffectInstance { get { return _dynamicSoundEffectInstanceRef.Target as DynamicSoundEffectInstance; } set { _dynamicSoundEffectInstanceRef.Target = value; } } internal ConcreteDynamicSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, int sampleRate, int channels) : base(audioServiceStrategy, null) { _sampleRate = sampleRate; _channels = channels; WaveFormat format = new WaveFormat(sampleRate, channels); _voice = new SourceVoice(ConcreteAudioService.Device, format, true); _voice.BufferEnd += OnBufferEnd; } public int BuffersNeeded { get; set; } public int DynamicPlatformGetPendingBufferCount() { return _queuedBuffers.Count; } public override void PlatformPause() { _voice.Stop(); } public override void PlatformPlay(bool isLooped) { _voice.Start(); } public override void PlatformResume(bool isLooped) { _voice.Start(); } public override void PlatformStop() { _voice.Stop(); } public override void PlatformRelease(bool isLooped) { System.Diagnostics.Debug.Assert(isLooped == false); // Dequeue all the submitted buffers _voice.FlushSourceBuffers(); } public void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state) { // we need to copy so datastream does not pin the buffer that the user might modify later byte[] dataBuffer = _bufferPool.Get(count); Buffer.BlockCopy(buffer, offset, dataBuffer, 0, count); DataStream stream = DataStream.Create(dataBuffer, true, false, 0, true); AudioBuffer audioBuffer = new AudioBuffer(stream); audioBuffer.AudioBytes = count; audioBuffer.Context = new IntPtr(unchecked(_uid++)); _voice.SubmitSourceBuffer(audioBuffer, null); _queuedBuffers.Add(new QueuedBuffer(dataBuffer, audioBuffer)); } public void DynamicPlatformUpdateBuffers() { // The XAudio implementation utilizes callbacks, so no work here. } public void DynamicPlatformClearBuffers() { // Dequeue all the submitted buffers _voice.FlushSourceBuffers(); for (int i = _queuedBuffers.Count - 1; i >= 0; i--) { QueuedBuffer queuedBuffer = _queuedBuffers[i]; _queuedBuffers.RemoveAt(i); queuedBuffer.AudioBuffer.Stream.Dispose(); _bufferPool.Return(queuedBuffer.DataBuffer); } } private void OnBufferEnd(IntPtr context) { lock (AudioService.SyncHandle) { // Release the queued buffer for (int i = 0; i < _queuedBuffers.Count; i++) { if (_queuedBuffers[i].AudioBuffer.Context == context) { QueuedBuffer queuedBuffer = _queuedBuffers[i]; _queuedBuffers.RemoveAt(i); queuedBuffer.AudioBuffer.Stream.Dispose(); _bufferPool.Return(queuedBuffer.DataBuffer); break; } } // Raise the event lock (AudioService.SyncHandle) { this.BuffersNeeded++; } } } protected override void Dispose(bool disposing) { if (disposing) { for (int i = _queuedBuffers.Count - 1; i >= 0; i--) { QueuedBuffer queuedBuffer = _queuedBuffers[i]; _queuedBuffers.RemoveAt(i); queuedBuffer.AudioBuffer.Stream.Dispose(); _bufferPool.Return(queuedBuffer.DataBuffer); } } base.Dispose(disposing); } struct QueuedBuffer { public byte[] DataBuffer; public AudioBuffer AudioBuffer; public QueuedBuffer(byte[] dataBuffer, AudioBuffer audioBuffer) { this.DataBuffer = dataBuffer; this.AudioBuffer = audioBuffer; } } class ByteBufferPool { private const int _minBufferSize = 0; private const int _maxBuffers = int.MaxValue; private readonly List _bufferPool = new List(); public ByteBufferPool() { } /// /// Get a buffer that is at least as big as size. /// public byte[] Get(int size) { if (size < _minBufferSize) size = _minBufferSize; lock (_bufferPool) { int index = FirstLargerThan(size); if (index == -1) { if (_bufferPool.Count > 0) _bufferPool.RemoveAt(_bufferPool.Count - 1); #if NET8_0_OR_GREATER return GC.AllocateUninitializedArray(size); #else return new byte[size]; #endif } else { byte[] result = _bufferPool[index]; _bufferPool.RemoveAt(index); return result; } } } /// /// Return the given buffer to the pool. /// public void Return(byte[] buffer) { lock (_bufferPool) { if (_bufferPool.Count >= _maxBuffers) return; int index = FirstLargerThan(buffer.Length); if (index == -1) _bufferPool.Add(buffer); else _bufferPool.Insert(index, buffer); } } // Find the smallest buffer that is larger than or equally large as size or -1 if none exist private int FirstLargerThan(int size) { if (_bufferPool.Count == 0) return -1; int l = 0; int r = _bufferPool.Count - 1; while (l <= r) { int m = (l + r) / 2; byte[] buffer = _bufferPool[m]; if (buffer.Length < size) { l = m + 1; } else if (buffer.Length > size) { r = m; if (l == r) return l; } else { return m; } } return -1; } } } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteMicrophone.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { /// /// Provides microphones capture features. /// public sealed class ConcreteMicrophone : MicrophoneStrategy { public override TimeSpan BufferDuration { get { return base.BufferDuration; } set { base.BufferDuration = value; } } public override MicrophoneState State { get { return base.State; } set { base.State = value; } } internal ConcreteMicrophone() : base() { } public override void PlatformStart(string deviceName) { throw new NotImplementedException(); } public override void PlatformStop() { throw new NotImplementedException(); } public override bool PlatformIsHeadset() { throw new NotImplementedException(); } public override bool PlatformUpdate() { throw new NotImplementedException(); } public override int PlatformGetData(byte[] buffer, int offset, int count) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteSoundEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Platform.Audio.Utilities; using SharpDX; using SharpDX.XAudio2; using SharpDX.Multimedia; namespace Microsoft.Xna.Platform.Audio { class ConcreteSoundEffect : SoundEffectStrategy { private DataStream _dataStream; private AudioBuffer _buffer; private AudioBuffer _loopedBuffer; internal WaveFormat _format; #region Initialization public override void PlatformLoadAudioStream(Stream stream, out TimeSpan duration) { SoundStream soundStream = null; try { soundStream = new SoundStream(stream); } catch (InvalidOperationException ex) { throw new ArgumentException("Ensure that the specified stream contains valid PCM or IEEE Float wave data.", ex); } DataStream dataStream = soundStream.ToDataStream(); int sampleCount = 0; switch (soundStream.Format.Encoding) { case WaveFormatEncoding.Adpcm: { int samplesPerBlock = (soundStream.Format.BlockAlign / soundStream.Format.Channels - 7) * 2 + 2; sampleCount = ((int)dataStream.Length / soundStream.Format.BlockAlign) * samplesPerBlock; } break; case WaveFormatEncoding.Pcm: case WaveFormatEncoding.IeeeFloat: sampleCount = (int)(dataStream.Length / ((soundStream.Format.Channels * soundStream.Format.BitsPerSample) / 8)); break; default: throw new ArgumentException("Ensure that the specified stream contains valid PCM, MS-ADPCM or IEEE Float wave data."); } duration = TimeSpan.FromSeconds((float)sampleCount / (float)soundStream.Format.SampleRate); CreateBuffers(soundStream.Format, dataStream, 0, sampleCount); } public override void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength) { short format = BitConverter.ToInt16(header, 0); short channels = BitConverter.ToInt16(header, 2); int sampleRate = BitConverter.ToInt32(header, 4); short blockAlignment = BitConverter.ToInt16(header, 12); short bitsPerSample = BitConverter.ToInt16(header, 14); WaveFormat waveFormat; switch (format) { case 1: { waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels); } break; case 2: if (blockAlignment == 1024) { // If MS-ADPCM is not supported, convert to 16-bit signed PCM buffer = MsAdpcmDecoder.ConvertMsAdpcmToPcm(buffer, index, count, channels, blockAlignment); index = 0; count = buffer.Length; format = 1; bitsPerSample = 16; waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels); } else { waveFormat = new WaveFormatAdpcm(sampleRate, channels, blockAlignment); } break; case 3: { waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels); } break; default: throw new NotSupportedException("Unsupported wave format!"); } // We make a copy because old versions of // DataStream.Create(...) didn't work correctly for offsets. byte[] bufferCopy = new byte[count]; Buffer.BlockCopy(buffer, index, bufferCopy, 0, count); DataStream dataStream = DataStream.Create(bufferCopy, true, false); CreateBuffers( waveFormat, dataStream, loopStart, loopLength); } public override void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength) { WaveFormat waveFormat = new WaveFormat(sampleRate, sampleBits, channels); // We make a copy because old versions of // DataStream.Create(...) didn't work correctly for offsets. byte[] bufferCopy = new byte[count]; Buffer.BlockCopy(buffer, index, bufferCopy, 0, count); DataStream dataStream = DataStream.Create(bufferCopy, true, false); CreateBuffers( waveFormat, dataStream, loopStart, loopLength); } public override void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength) { WaveFormat waveFormat = new WaveFormatAdpcm(sampleRate, channels, (blockAlignment + 22) * channels); // We make a copy because old versions of // DataStream.Create(...) didn't work correctly for offsets. byte[] bufferCopy = new byte[count]; Buffer.BlockCopy(buffer, index, bufferCopy, 0, count); DataStream dataStream = DataStream.Create(bufferCopy, true, false); CreateBuffers( waveFormat, dataStream, loopStart, loopLength); } private void CreateBuffers(WaveFormat format, DataStream dataStream, int loopStart, int loopLength) { _format = format; _dataStream = dataStream; _buffer = new AudioBuffer { Stream = _dataStream, AudioBytes = (int)_dataStream.Length, Flags = BufferFlags.EndOfStream, PlayBegin = loopStart, PlayLength = loopLength, Context = new IntPtr(42), }; _loopedBuffer = new AudioBuffer { Stream = _dataStream, AudioBytes = (int)_dataStream.Length, Flags = BufferFlags.EndOfStream, LoopBegin = loopStart, LoopLength = loopLength, LoopCount = AudioBuffer.LoopInfinite, Context = new IntPtr(42), }; } #endregion internal AudioBuffer GetDXDataBuffer(bool isLooped) { return isLooped ? _loopedBuffer : _buffer; } #region IDisposable Members protected override void Dispose(bool disposing) { if (disposing) { if (_dataStream != null) { _dataStream.Dispose(); _dataStream = null; } } } #endregion } } ================================================ FILE: Platforms/Audio/XAudio/ConcreteSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using SharpDX.XAudio2; using SharpDX.X3DAudio; using SharpDX.Mathematics.Interop; namespace Microsoft.Xna.Platform.Audio { public class ConcreteSoundEffectInstance : SoundEffectInstanceStrategy { private AudioServiceStrategy _audioServiceStrategy; private ConcreteSoundEffect _concreteSoundEffect; internal ConcreteAudioService ConcreteAudioService { get { return (ConcreteAudioService)_audioServiceStrategy; } } protected SourceVoice _voice; private SharpDX.XAudio2.Fx.Reverb _reverb; private float _reverbMix; private static float[] _defaultChannelAzimuths = new float[] { 0f, 0f }; private static readonly float[] _outputMatrix = new float[16]; public override bool IsXAct { get { return base.IsXAct; } set { base.IsXAct = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override float Pan { get { return base.Pan; } set { base.Pan = value; if (_voice != null && ConcreteAudioService.MasterVoice != null) { UpdateOutputMatrix(value); } } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (_voice != null && ConcreteAudioService.MasterVoice != null) { // XAct sound effects are not tied to the SoundEffect master volume. float masterVolume = (!this.IsXAct) ? SoundEffect.MasterVolume : 1f; _voice.SetVolume(value * masterVolume, XAudio2.CommitNow); } } } public override float Pitch { get { return base.Pitch; } set { base.Pitch = value; if (_voice != null && ConcreteAudioService.MasterVoice != null) { // NOTE: This is copy of what XAudio2.SemitonesToFrequencyRatio() does // which avoids the native call and is actually more accurate. float xapitch = (float)Math.Pow(2.0, value); _voice.SetFrequencyRatio(xapitch); } } } #region Initialization internal ConcreteSoundEffectInstance(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) : base(audioServiceStrategy, sfxStrategy) { _audioServiceStrategy = audioServiceStrategy; _concreteSoundEffect = (ConcreteSoundEffect)sfxStrategy; if (_concreteSoundEffect!=null) { _voice = new SourceVoice(ConcreteAudioService.Device, _concreteSoundEffect._format, VoiceFlags.UseFilter, XAudio2.MaximumFrequencyRatio); UpdateOutputMatrix(0); // Ensure the output matrix is set for this new voice } this.Volume = 1.0f; this.Pan = 0.0f; this.Pitch = 0.0f; } #endregion // Initialization public override void PlatformApply3D(AudioListener listener, AudioEmitter emitter) { // If we have no voice then nothing to do. if (_voice == null || ConcreteAudioService.MasterVoice == null) return; // Convert from XNA Emitter to a SharpDX Emitter Emitter e = ToDXEmitter(emitter); e.CurveDistanceScaler = SoundEffect.DistanceScale; e.DopplerScaler = SoundEffect.DopplerScale; e.ChannelCount = _concreteSoundEffect._format.Channels; //stereo channel if (e.ChannelCount > 1) { e.ChannelRadius = 0; e.ChannelAzimuths = _defaultChannelAzimuths; } // Convert from XNA Listener to a SharpDX Listener Listener l = ToDXListener(listener); // Number of channels in the sound being played. // Not actually sure if XNA supported 3D attenuation of sterio sounds, but X3DAudio does. int srcChannelCount = _concreteSoundEffect._format.Channels; // Number of output channels. int dstChannelCount = ConcreteAudioService.MasterVoice.VoiceDetails.InputChannelCount; // XNA supports distance attenuation and doppler. DspSettings dpsSettings = ConcreteAudioService.Device3D.Calculate(l, e, CalculateFlags.Matrix | CalculateFlags.Doppler, srcChannelCount, dstChannelCount); // Apply Volume settings (from distance attenuation) ... _voice.SetOutputMatrix(ConcreteAudioService.MasterVoice, srcChannelCount, dstChannelCount, dpsSettings.MatrixCoefficients, 0); // Apply Pitch settings (from doppler) ... _voice.SetFrequencyRatio(dpsSettings.DopplerFactor); } private Emitter _dxEmitter; private Listener _dxListener; private Emitter ToDXEmitter(AudioEmitter emitter) { // Pulling out Vector properties for efficiency. Vector3 pos = emitter.Position; Vector3 vel = emitter.Velocity; Vector3 forward = emitter.Forward; Vector3 up = emitter.Up; // From MSDN: // X3DAudio uses a left-handed Cartesian coordinate system, // with values on the x-axis increasing from left to right, on the y-axis from bottom to top, // and on the z-axis from near to far. // Azimuths are measured clockwise from a given reference direction. // // From MSDN: // The XNA Framework uses a right-handed coordinate system, // with the positive z-axis pointing toward the observer when the positive x-axis is pointing to the right, // and the positive y-axis is pointing up. // // Programmer Notes: // According to this description the z-axis (forward vector) is inverted between these two coordinate systems. // Therefore, we need to negate the z component of any position/directions/velocity values. forward.Z *= -1.0f; up.Z *= -1.0f; pos.Z *= -1.0f; vel.Z *= -1.0f; if (_dxEmitter == null) _dxEmitter = new Emitter(); _dxEmitter.Position = new RawVector3(pos.X, pos.Y, pos.Z); _dxEmitter.Velocity = new RawVector3(vel.X, vel.Y, vel.Z); _dxEmitter.OrientFront = new RawVector3(forward.X, forward.Y, forward.Z); _dxEmitter.OrientTop = new RawVector3(up.X, up.Y, up.Z); _dxEmitter.DopplerScaler = emitter.DopplerScale; return _dxEmitter; } private Listener ToDXListener(AudioListener listener) { // Pulling out Vector properties for efficiency. Vector3 pos = listener.Position; Vector3 vel = listener.Velocity; Vector3 forward = listener.Forward; Vector3 up = listener.Up; // From MSDN: // X3DAudio uses a left-handed Cartesian coordinate system, // with values on the x-axis increasing from left to right, on the y-axis from bottom to top, // and on the z-axis from near to far. // Azimuths are measured clockwise from a given reference direction. // // From MSDN: // The XNA Framework uses a right-handed coordinate system, // with the positive z-axis pointing toward the observer when the positive x-axis is pointing to the right, // and the positive y-axis is pointing up. // // Programmer Notes: // According to this description the z-axis (forward vector) is inverted between these two coordinate systems. // Therefore, we need to negate the z component of any position/directions/velocity values. forward.Z *= -1.0f; up.Z *= -1.0f; pos.Z *= -1.0f; vel.Z *= -1.0f; if (_dxListener == null) _dxListener = new Listener(); _dxListener.Position = new RawVector3 { X = pos.X, Y = pos.Y, Z = pos.Z }; _dxListener.Velocity = new RawVector3 { X = vel.X, Y = vel.Y, Z = vel.Z }; _dxListener.OrientFront = new RawVector3 { X = forward.X, Y = forward.Y, Z = forward.Z }; _dxListener.OrientTop = new RawVector3 { X = up.X, Y = up.Y, Z = up.Z }; return _dxListener; } public override void PlatformPause() { _voice.Stop(); } public override void PlatformPlay(bool isLooped) { // Choose the correct buffer depending on if we are looped. AudioBuffer buffer = _concreteSoundEffect.GetDXDataBuffer(isLooped); if (_voice.State.BuffersQueued > 0) { _voice.Stop(); _voice.FlushSourceBuffers(); } _voice.SubmitSourceBuffer(buffer, null); _voice.Start(); } public override void PlatformResume(bool isLooped) { // Restart the sound if (and only if) it stopped playing if (!isLooped) { if (_voice.State.BuffersQueued == 0) { _voice.Stop(); _voice.FlushSourceBuffers(); AudioBuffer buffer = _concreteSoundEffect.GetDXDataBuffer(false); _voice.SubmitSourceBuffer(buffer, null); } } _voice.Start(); } public override void PlatformStop() { _voice.Stop(); _voice.FlushSourceBuffers(); } public override void PlatformRelease(bool isLooped) { if (isLooped) _voice.ExitLoop(); else _voice.Stop((int)PlayFlags.Tails); } public override bool PlatformUpdateState(ref SoundState state) { // check if the sound has stopped if (state == SoundState.Playing) { // If no voice or no buffers queued the sound is stopped. if (ConcreteAudioService.MasterVoice == null || _voice.State.BuffersQueued == 0) { // update instance state = SoundState.Stopped; return true; } } return false; } public override void PlatformSetIsLooped(bool isLooped, SoundState state) { if (state == SoundState.Playing) { if (isLooped) { // enable loop while sound is playing AudioBuffer loopedBuffer = _concreteSoundEffect.GetDXDataBuffer(true); _voice.SubmitSourceBuffer(loopedBuffer, null); } else { // release loop while sound is playing _voice.ExitLoop(); } } } private void UpdateOutputMatrix(float pan) { int srcChannelCount = _voice.VoiceDetails.InputChannelCount; int dstChannelCount = ConcreteAudioService.MasterVoice.VoiceDetails.InputChannelCount; // Set the pan on the correct channels based on the reverb mix. if (!(_reverbMix > 0.0f)) _voice.SetOutputMatrix(srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, 1.0f, srcChannelCount)); else { _voice.SetOutputMatrix(ConcreteAudioService.ReverbVoice, srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, _reverbMix, srcChannelCount)); _voice.SetOutputMatrix(ConcreteAudioService.MasterVoice, srcChannelCount, dstChannelCount, CalculateOutputMatrix(pan, 1.0f - Math.Min(_reverbMix, 1.0f), srcChannelCount)); } } internal static float[] CalculateOutputMatrix(float pan, float scale, int inputChannels) { // XNA only ever outputs to the front left/right speakers (channels 0 and 1) // Assumes there are at least 2 speaker channels to output to // Clear all the channels. float[] outputMatrix = _outputMatrix; Array.Clear(outputMatrix, 0, outputMatrix.Length); if (inputChannels == 1) // Mono source { // Left/Right output levels: // Pan -1.0: L = 1.0, R = 0.0 // Pan 0.0: L = 1.0, R = 1.0 // Pan +1.0: L = 0.0, R = 1.0 outputMatrix[0] = (pan > 0f) ? ((1f - pan) * scale) : scale; // Front-left output outputMatrix[1] = (pan < 0f) ? ((1f + pan) * scale) : scale; // Front-right output } else if (inputChannels == 2) // Stereo source { // Left/Right input (Li/Ri) mix for Left/Right outputs (Lo/Ro): // Pan -1.0: Lo = 0.5Li + 0.5Ri, Ro = 0.0Li + 0.0Ri // Pan 0.0: Lo = 1.0Li + 0.0Ri, Ro = 0.0Li + 1.0Ri // Pan +1.0: Lo = 0.0Li + 0.0Ri, Ro = 0.5Li + 0.5Ri if (pan <= 0f) { outputMatrix[0] = (1f + pan * 0.5f) * scale; // Front-left output, Left input outputMatrix[1] = (-pan * 0.5f) * scale; // Front-left output, Right input outputMatrix[2] = 0f; // Front-right output, Left input outputMatrix[3] = (1f + pan) * scale; // Front-right output, Right input } else { outputMatrix[0] = (1f - pan) * scale; // Front-left output, Left input outputMatrix[1] = 0f; // Front-left output, Right input outputMatrix[2] = (pan * 0.5f) * scale; // Front-right output, Left input outputMatrix[3] = (1f - pan * 0.5f) * scale; // Front-right output, Right input } } return outputMatrix; } public override void PlatformSetReverbMix(SoundState state, float mix, float pan) { // At least for XACT we can't go over 2x the volume on the mix. _reverbMix = MathHelper.Clamp(mix, 0, 2); // If we have no voice then nothing more to do. if (_voice == null || ConcreteAudioService.MasterVoice == null) return; if (!(_reverbMix > 0.0f)) _voice.SetOutputVoices(new VoiceSendDescriptor(ConcreteAudioService.MasterVoice)); else { _voice.SetOutputVoices(new VoiceSendDescriptor(ConcreteAudioService.ReverbVoice), new VoiceSendDescriptor(ConcreteAudioService.MasterVoice)); } UpdateOutputMatrix(pan); } public override void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency) { if (_voice == null || ConcreteAudioService.MasterVoice == null) return; FilterParameters filter = new FilterParameters { Frequency = XAudio2.CutoffFrequencyToRadians(frequency, _voice.VoiceDetails.InputSampleRate), OneOverQ = 1.0f / filterQ, Type = (FilterType)mode }; _voice.SetFilterParameters(filter); } public override void PlatformClearFilter() { if (_voice == null || ConcreteAudioService.MasterVoice == null) return; FilterParameters filter = new FilterParameters { Frequency = 1.0f, OneOverQ = 1.0f, Type = FilterType.LowPassFilter }; _voice.SetFilterParameters(filter); } protected override void Dispose(bool disposing) { if (disposing) { if (_reverb != null) { _reverb.Dispose(); _reverb = null; } if (ConcreteAudioService.MasterVoice != null) { _voice.DestroyVoice(); // TODO: _voice.Dispose() should also destroy voice _voice.Dispose(); _voice = null; } } } } } ================================================ FILE: Platforms/Content/.Android/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private TitlePlatform _platform = TitlePlatform.Android; public override string Location { get { return string.Empty; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { } public override Stream PlatformOpenStream(string name) { Stream stream = Android.App.Application.Context.Assets.Open(name, Android.Content.Res.Access.Random); // This results in a ~50% reduction in load times on Android due to slow Android asset streams. stream = new BufferedStream(stream); return stream; } } } ================================================ FILE: Platforms/Content/.Android/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.Blazor/ConcreteTitleContainer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using nkast.Wasm.XHR; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private TitlePlatform _platform = TitlePlatform.BlazorWASM; public override string Location { get { return string.Empty; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { } public override Stream PlatformOpenStream(string name) { XMLHttpRequest request = new XMLHttpRequest(); request.Open("GET", name, false); request.OverrideMimeType("text/plain; charset=x-user-defined"); request.Send(); if (request.Status == 200) { string responseText = request.ResponseText; byte[] buffer = new byte[responseText.Length]; for (int i = 0; i < responseText.Length; i++) buffer[i] = (byte)(responseText[i] & 0xff); Stream ms = new MemoryStream(buffer); return ms; } else { throw new IOException("HTTP request failed. Status:" + request.Status); } } public override Stream DecompressBrotliStream(Stream stream, uint compressedDataSize, uint decompressedDataSize) { try { Stream decompressedStream = base.DecompressBrotliStream(stream, compressedDataSize, decompressedDataSize); return decompressedStream; } catch (PlatformNotSupportedException e) { byte[] compressedBuffer = new byte[compressedDataSize]; stream.Read(compressedBuffer); byte[] decompressedBuffer = new byte[decompressedDataSize]; var xhr = new nkast.Wasm.XHR.XMLHttpRequest(); xhr.DecompressBrotliStream( compressedBuffer, compressedDataSize, decompressedBuffer, decompressedDataSize); Stream decompressedStream = new MemoryStream(decompressedBuffer); return decompressedStream; } } } } ================================================ FILE: Platforms/Content/.Blazor/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.Ref/ConcreteTitleContainer.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { public override string Location { get { throw new PlatformNotSupportedException(); } } public override TitlePlatform Platform { get { throw new PlatformNotSupportedException(); } } public ConcreteTitleContainer() : base() { throw new PlatformNotSupportedException(); } public override Stream PlatformOpenStream(string name) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Content/.Ref/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.SDL2/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private string _location = string.Empty; private TitlePlatform _platform = TitlePlatform.SDL; public override string Location { get { return _location; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { // Check for the package Resources Folder first. This is where the assets // will be bundled. if (CurrentPlatform.OS == OS.MacOSX) _location = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "Resources"); if (!Directory.Exists(_location)) _location = AppDomain.CurrentDomain.BaseDirectory; } public override Stream PlatformOpenStream(string name) { string absolutePath = Path.Combine(_location, name); return File.OpenRead(absolutePath); } } } ================================================ FILE: Platforms/Content/.SDL2/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.UAP/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using System.Threading.Tasks; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private string _location = string.Empty; private TitlePlatform _platform = TitlePlatform.UAP; public override string Location { get { return _location; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { _location = Windows.ApplicationModel.Package.Current.InstalledLocation.Path; } public override Stream PlatformOpenStream(string name) { return Task.Run(() => PlatformOpenStreamAsync(name).Result).Result; } private async Task PlatformOpenStreamAsync(string name) { try { Windows.Storage.StorageFile file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///" + name)); var randomAccessStream = await file.OpenReadAsync(); return randomAccessStream.AsStreamForRead(); } catch (IOException) { // The file must not exist... return a null stream. return null; } } } } ================================================ FILE: Platforms/Content/.UAP/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.WindowsDX11/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private string _location = string.Empty; private TitlePlatform _platform = TitlePlatform.Windows; public override string Location { get { return _location; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { _location = AppDomain.CurrentDomain.BaseDirectory; } public override Stream PlatformOpenStream(string name) { string absolutePath = Path.Combine(_location, name); return File.OpenRead(absolutePath); } } } ================================================ FILE: Platforms/Content/.WindowsDX11/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.iOS/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Foundation; using Microsoft.Xna.Framework; using UIKit; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private string _location = string.Empty; private TitlePlatform _platform = TitlePlatform.iOS; public override string Location { get { return _location; } } public override TitlePlatform Platform { get { return _platform; } } private bool _supportRetina; private int _retinaScale; public ConcreteTitleContainer() : base() { _location = NSBundle.MainBundle.ResourcePath; _supportRetina = UIScreen.MainScreen.Scale >= 2.0f; _retinaScale = (int)Math.Round(UIScreen.MainScreen.Scale); } public override Stream PlatformOpenStream(string name) { string absolutePath = Path.Combine(_location, name); if (_supportRetina) { for (int scale = _retinaScale; scale >= 2; scale--) { // Insert the @#x immediately prior to the extension. If this file exists // and we are on a Retina device, return this file instead. string absolutePathX = Path.Combine(Path.GetDirectoryName(absolutePath), Path.GetFileNameWithoutExtension(absolutePath) + "@" + scale + "x" + Path.GetExtension(absolutePath)); if (File.Exists(absolutePathX)) return File.OpenRead(absolutePathX); } } return File.OpenRead(absolutePath); } } } ================================================ FILE: Platforms/Content/.iOS/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Content/.macOS/ConcreteTitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { internal sealed class ConcreteTitleContainer : TitleContainerStrategy { private string _location = string.Empty; private TitlePlatform _platform = TitlePlatform.MacOS; public override string Location { get { return _location; } } public override TitlePlatform Platform { get { return _platform; } } public ConcreteTitleContainer() : base() { _location = NSBundle.MainBundle.ResourcePath; } public override Stream PlatformOpenStream(string name) { string absolutePath = Path.Combine(_location, name); return File.OpenRead(absolutePath); } } } ================================================ FILE: Platforms/Content/.macOS/ConcreteTitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public sealed class ConcreteTitleContainerFactory : TitleContainerFactory { public override TitleContainerStrategy CreateTitleContainerStrategy() { return new ConcreteTitleContainer(); } } } ================================================ FILE: Platforms/Devices/.Android/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.Android/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { Android.OS.Vibrator _nativeVibrator; private bool _hasVibrator = true; public ConcreteHaptics() { _nativeVibrator = (Android.OS.Vibrator)Android.App.Application.Context.GetSystemService(Android.Content.Context.VibratorService); try { _hasVibrator = _nativeVibrator.HasVibrator; } catch { /* ignore */ } } public override void Vibrate(TimeSpan duration) { if (_hasVibrator) { try { _nativeVibrator.Vibrate((long)duration.TotalMilliseconds); } catch { /* ignore */ } } } } } ================================================ FILE: Platforms/Devices/.Android/Sensors/ConcreteAccelerometer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; using Android.Content; using Android.Hardware; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { internal static SensorManager _sensorManager; internal static Sensor _sensorAccelerometer; static int _instanceCount; SensorListener _sensorListener; private SensorReadingEventArgs _eventArgs = new SensorReadingEventArgs(default(AccelerometerReading)); public override SensorState State { get { if (_sensorManager == null) { ConcreteAccelerometer.Initialize(); base.State = (_sensorAccelerometer != null) ? SensorState.Initializing : SensorState.NotSupported; } return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { if (base.ReportInterval != value) { base.ReportInterval = value; // TODO: implement ReportInterval for Android } } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { _instanceCount++; base.State = (_sensorAccelerometer != null) ? SensorState.Initializing : SensorState.NotSupported; _sensorListener = new SensorListener(); _sensorListener.AccuracyChanged += _sensorListener_AccuracyChanged; _sensorListener.SensorChanged += _sensorListener_SensorChanged; } static internal void Initialize() { _sensorManager = (SensorManager)AndroidGameWindow.Activity.GetSystemService(Context.SensorService); _sensorAccelerometer = _sensorManager.GetDefaultSensor(SensorType.Accelerometer); } public override void Start() { if (this.State == SensorState.Ready) throw base.CreateAccelerometerFailedException("Failed to start accelerometer data acquisition. Data acquisition already started.", -1); if (_sensorManager == null) ConcreteAccelerometer.Initialize(); if ((_sensorManager == null || _sensorAccelerometer == null)) throw base.CreateAccelerometerFailedException("Failed to start accelerometer data acquisition. No default sensor found.", -1); _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game); // So the system can pause and resume the sensor when the activity is paused AndroidGameWindow.Activity.Paused += _activity_Paused; AndroidGameWindow.Activity.Resumed += _activity_Resumed; base.State = SensorState.Ready; } public override void Stop() { if (this.State == SensorState.Ready) { if (_sensorManager != null && _sensorAccelerometer != null) { AndroidGameWindow.Activity.Paused -= _activity_Paused; AndroidGameWindow.Activity.Resumed -= _activity_Resumed; _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer); } } base.State = SensorState.Disabled; } void _activity_Paused(object sender, EventArgs eventArgs) { _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer); } void _activity_Resumed(object sender, EventArgs eventArgs) { _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game); } private void _sensorListener_AccuracyChanged(object sender, EventArgs eventArgs) { //do nothing } private void _sensorListener_SensorChanged(object sender, SensorListener.SensorChangedEventArgs eventArgs) { try { SensorEvent e = eventArgs.Event; if (e != null && e.Sensor.Type == SensorType.Accelerometer) { IList values = e.Values; try { AccelerometerReading reading = new AccelerometerReading(); base.IsDataValid = (values != null && values.Count == 3); if (base.IsDataValid) { const float gravity = SensorManager.GravityEarth; reading = base.CreateAccelerometerReading( acceleration: new Vector3(values[0], values[1], values[2]) / gravity, timestamp: DateTime.UtcNow ); } base.CurrentReading = reading; _eventArgs.SensorReading = base.CurrentReading; base.OnReadingChanged(_eventArgs); } finally { IDisposable d = values as IDisposable; if (d != null) d.Dispose(); } } } catch (NullReferenceException) { //Occassionally an NullReferenceException is thrown when accessing e.Values?? // mono : Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object // mono : at Android.Runtime.JNIEnv.GetObjectField (IntPtr jobject, IntPtr jfieldID) [0x00000] in :0 // mono : at Android.Hardware.SensorEvent.get_Values () [0x00000] in :0 } } protected override void Dispose(bool disposing) { if (disposing) { } if (this.State == SensorState.Ready) Stop(); _instanceCount--; if (_instanceCount == 0) { _sensorAccelerometer = null; _sensorManager = null; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Android/Sensors/ConcreteCompass.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; using Android.Content; using Android.Hardware; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { internal static SensorManager _sensorManager; internal static Sensor _sensorMagneticField; static Sensor _sensorAccelerometer; static int _instanceCount; SensorListener _sensorListener; float[] _valuesAccelerometer; float[] _valuesMagenticField; float[] _matrixR; float[] _matrixI; float[] _matrixValues; private SensorReadingEventArgs _eventArgs = new SensorReadingEventArgs(default(CompassReading)); public override SensorState State { get { if (_sensorManager == null) { ConcreteCompass.Initialize(); } return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { if (base.ReportInterval != value) { base.ReportInterval = value; // TODO: implement ReportInterval for Android } } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { _instanceCount++; base.State = (_sensorMagneticField != null) ? SensorState.Initializing : SensorState.NotSupported; _valuesAccelerometer = new float[3]; _valuesMagenticField = new float[3]; _matrixR = new float[9]; _matrixI = new float[9]; _matrixValues = new float[3]; _sensorListener = new SensorListener(); _sensorListener.AccuracyChanged += _sensorListener_AccuracyChanged; _sensorListener.SensorChanged += _sensorListener_SensorChanged; } static internal void Initialize() { _sensorManager = (SensorManager)AndroidGameWindow.Activity.GetSystemService(Context.SensorService); _sensorMagneticField = _sensorManager.GetDefaultSensor(SensorType.MagneticField); _sensorAccelerometer = _sensorManager.GetDefaultSensor(SensorType.Accelerometer); } public override void Start() { if (this.State == SensorState.Ready) throw base.CreateSensorFailedException("Failed to start compass data acquisition. Data acquisition already started."); if (_sensorManager == null) ConcreteCompass.Initialize(); if ((_sensorManager == null || _sensorMagneticField == null || _sensorAccelerometer == null)) throw base.CreateSensorFailedException("Failed to start compass data acquisition. No default sensor found."); _sensorManager.RegisterListener(_sensorListener, _sensorMagneticField, SensorDelay.Game); _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game); base.State = SensorState.Ready; } public override void Stop() { if (this.State == SensorState.Ready) { if (_sensorManager != null && _sensorMagneticField != null && _sensorAccelerometer != null) { _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer); _sensorManager.UnregisterListener(_sensorListener, _sensorMagneticField); } } base.State = SensorState.Disabled; } void _activity_Paused(object sender, EventArgs eventArgs) { _sensorManager.UnregisterListener(_sensorListener, _sensorMagneticField); _sensorManager.UnregisterListener(_sensorListener, _sensorAccelerometer); } void _activity_Resumed(object sender, EventArgs eventArgs) { _sensorManager.RegisterListener(_sensorListener, _sensorAccelerometer, SensorDelay.Game); _sensorManager.RegisterListener(_sensorListener, _sensorMagneticField, SensorDelay.Game); } private void _sensorListener_AccuracyChanged(object sender, EventArgs eventArgs) { //do nothing } private void _sensorListener_SensorChanged(object sender, SensorListener.SensorChangedEventArgs eventArgs) { try { SensorEvent e = eventArgs.Event; switch (e.Sensor.Type) { case SensorType.Accelerometer: _valuesAccelerometer[0] = e.Values[0]; _valuesAccelerometer[1] = e.Values[1]; _valuesAccelerometer[2] = e.Values[2]; break; case SensorType.MagneticField: _valuesMagenticField[0] = e.Values[0]; _valuesMagenticField[1] = e.Values[1]; _valuesMagenticField[2] = e.Values[2]; break; } base.IsDataValid = SensorManager.GetRotationMatrix(_matrixR, _matrixI, _valuesAccelerometer, _valuesMagenticField); if (base.IsDataValid) { SensorManager.GetOrientation(_matrixR, _matrixValues); double headingAccuracy = 0; // Not implemented. double magneticHeading = _matrixValues[0]; Vector3 magnetometerReading = new Vector3(_valuesMagenticField[0], _valuesMagenticField[1], _valuesMagenticField[2]); // We need the magnetic declination from true north to calculate the true heading from the magnetic heading. // On Android, this is available through Android.Hardware.GeomagneticField, but this requires your geo position. double trueHeading = magneticHeading; // Not implemented, fallback to magneticHeading. CompassReading reading = base.CreateCompassReading( headingAccuracy: headingAccuracy, magneticHeading: magneticHeading, magnetometerReading: magnetometerReading, timestamp: DateTime.UtcNow, trueHeading: trueHeading ); base.CurrentReading = reading; _eventArgs.SensorReading = base.CurrentReading; base.OnReadingChanged(_eventArgs); } } catch (NullReferenceException) { //Occassionally an NullReferenceException is thrown when accessing e.Values?? // mono : Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object // mono : at Android.Runtime.JNIEnv.GetObjectField (IntPtr jobject, IntPtr jfieldID) [0x00000] in :0 // mono : at Android.Hardware.SensorEvent.get_Values () [0x00000] in :0 } } protected override void Dispose(bool disposing) { if (disposing) { } if (this.State == SensorState.Ready) Stop(); _instanceCount--; if (_instanceCount == 0) { _sensorAccelerometer = null; _sensorMagneticField = null; _sensorManager = null; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Android/Sensors/ConcreteSensorService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; using Android.Hardware; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { } public override bool PlatformIsAccelerometerSupported() { if (ConcreteAccelerometer._sensorManager == null) ConcreteAccelerometer.Initialize(); return ConcreteAccelerometer._sensorAccelerometer != null; } public override bool PlatformIsCompassSupported() { if (ConcreteCompass._sensorManager == null) ConcreteCompass.Initialize(); return ConcreteCompass._sensorMagneticField != null; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.Android/Sensors/SensorListener.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Android.Hardware; namespace Microsoft.Xna.Platform.Devices.Sensors { internal class SensorListener : Java.Lang.Object, ISensorEventListener { public event EventHandler AccuracyChanged; public event EventHandler SensorChanged; public SensorListener() { } void ISensorEventListener.OnAccuracyChanged(Sensor sensor, SensorStatus accuracy) { var handler = AccuracyChanged; if (handler != null) handler(this, EventArgs.Empty); } void ISensorEventListener.OnSensorChanged(SensorEvent e) { var handler = SensorChanged; if (handler != null) handler(this, new SensorListener.SensorChangedEventArgs(e)); } public class SensorChangedEventArgs : EventArgs { public readonly SensorEvent Event; internal SensorChangedEventArgs(SensorEvent sensorEvent) { this.Event = sensorEvent; } } } } ================================================ FILE: Platforms/Devices/.Blazor/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.Blazor/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using nkast.Wasm.Dom; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { } public override void Vibrate(TimeSpan duration) { Window.Current.Navigator.Vibrate(duration); } } } ================================================ FILE: Platforms/Devices/.Blazor/Sensors/ConcreteAccelerometer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Blazor/Sensors/ConcreteCompass.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Blazor/Sensors/ConcreteSensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { } public override bool PlatformIsAccelerometerSupported() { return false; } public override bool PlatformIsCompassSupported() { return false; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.Ref/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.Ref/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { throw new PlatformNotSupportedException(); } public override void Vibrate(TimeSpan duration) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Devices/.Ref/Sensors/ConcreteAccelerometer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { throw new PlatformNotSupportedException(); } public override void Start() { throw new PlatformNotSupportedException(); } public override void Stop() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Ref/Sensors/ConcreteCompass.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { throw new PlatformNotSupportedException(); } public override void Start() { throw new PlatformNotSupportedException(); } public override void Stop() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.Ref/Sensors/ConcreteSensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { throw new PlatformNotSupportedException(); } public override bool PlatformIsAccelerometerSupported() { throw new PlatformNotSupportedException(); } public override bool PlatformIsCompassSupported() { throw new PlatformNotSupportedException(); } public override void Suspend() { throw new PlatformNotSupportedException(); } public override void Resume() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.SDL2/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.SDL2/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { } public override void Vibrate(TimeSpan duration) { } } } ================================================ FILE: Platforms/Devices/.SDL2/Sensors/ConcreteAccelerometer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.SDL2/Sensors/ConcreteCompass.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.SDL2/Sensors/ConcreteSensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { } public override bool PlatformIsAccelerometerSupported() { return false; } public override bool PlatformIsCompassSupported() { return false; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.UAP/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.UAP/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { } public override void Vibrate(TimeSpan duration) { } } } ================================================ FILE: Platforms/Devices/.UAP/Sensors/ConcreteAccelerometer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; using WinSensors = Windows.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { internal WinSensors.Accelerometer _waccelerometer; public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; _waccelerometer.ReportInterval = (uint)value.TotalMilliseconds; } } public override AccelerometerReading CurrentReading { get { WinSensors.AccelerometerReading wreading = _waccelerometer.GetCurrentReading(); if (wreading == null) { base.IsDataValid = false; return new AccelerometerReading(); } AccelerometerReading reading = base.CreateAccelerometerReading( acceleration: new Vector3((float)wreading.AccelerationX, (float)wreading.AccelerationY, (float)wreading.AccelerationZ), // timestamp: war.Timestamp //cause Memory garbage timestamp: DateTimeOffset.MinValue ); base.IsDataValid = true; return reading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { _waccelerometer = WinSensors.Accelerometer.GetDefault(); if (_waccelerometer == null) { base.State = SensorState.NotSupported; return; } base.State = SensorState.Disabled; } public override void Start() { if (this.State != SensorState.Ready) { _waccelerometer.ReadingChanged += _waccelerometer_ReadingChanged; base.State = SensorState.Ready; } } public override void Stop() { if (this.State == SensorState.Ready) { _waccelerometer.ReadingChanged -= _waccelerometer_ReadingChanged; base.State = SensorState.Disabled; } } private void _waccelerometer_ReadingChanged(WinSensors.Accelerometer sender, WinSensors.AccelerometerReadingChangedEventArgs args) { WinSensors.AccelerometerReading wreading = args.Reading; if (wreading == null) { base.IsDataValid = false; return; } AccelerometerReading reading = base.CreateAccelerometerReading( acceleration: new Vector3((float)wreading.AccelerationX, (float)wreading.AccelerationY, (float)wreading.AccelerationZ), // timestamp: war.Timestamp //cause Memory garbage timestamp: DateTimeOffset.MinValue ); base.IsDataValid = true; base.CurrentReading = reading; var eventArgs = new SensorReadingEventArgs(reading); base.OnReadingChanged(eventArgs); } protected override void Dispose(bool disposing) { if (disposing) { } if (this.State == SensorState.Ready) Stop(); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.UAP/Sensors/ConcreteCompass.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.UAP/Sensors/ConcreteSensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; using WinSensors = Windows.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { bool _isAccelerometerSupported; internal ConcreteSensorService() { WinSensors.Accelerometer waccelerometer = WinSensors.Accelerometer.GetDefault(); _isAccelerometerSupported = (waccelerometer != null); } public override bool PlatformIsAccelerometerSupported() { return _isAccelerometerSupported; } public override bool PlatformIsCompassSupported() { return false; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.WindowsDX/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.WindowsDX/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { } public override void Vibrate(TimeSpan duration) { } } } ================================================ FILE: Platforms/Devices/.WindowsDX/Sensors/ConcreteAccelerometer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.WindowsDX/Sensors/ConcreteCompass.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { public override SensorState State { get { return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { base.ReportInterval = value; } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { base.State = SensorState.NotSupported; } public override void Start() { } public override void Stop() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.WindowsDX/Sensors/ConcreteSensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { } public override bool PlatformIsAccelerometerSupported() { return false; } public override bool PlatformIsCompassSupported() { return false; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Devices/.iOS/ConcreteDevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteDevicesFactory : DevicesFactory { public override HapticsStrategy CreateConcreteHapticsStrategy() { return new ConcreteHaptics(); } public override SensorServiceStrategy CreateSensorServiceStrategy() { return new ConcreteSensorService(); } public override AccelerometerStrategy CreateAccelerometerStrategy() { return new ConcreteAccelerometer(); } public override CompassStrategy CreateCompassStrategy() { return new ConcreteCompass(); } } } ================================================ FILE: Platforms/Devices/.iOS/ConcreteHaptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public sealed class ConcreteHaptics : HapticsStrategy { public ConcreteHaptics() { } public override void Vibrate(TimeSpan duration) { } } } ================================================ FILE: Platforms/Devices/.iOS/Sensors/ConcreteAccelerometer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; using CoreMotion; using Foundation; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteAccelerometer : AccelerometerStrategy { static int _instanceCount; private static SensorState _state = (((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsAccelerometerSupported()) ? SensorState.Initializing : SensorState.NotSupported; internal static readonly CoreMotion.CMMotionManager _motionManager = new CoreMotion.CMMotionManager(); private static event CMAccelerometerHandler readingChanged; private SensorReadingEventArgs _eventArgs = new SensorReadingEventArgs(default(AccelerometerReading)); public override SensorState State { get { return _state; //return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { if (base.ReportInterval != value) { base.ReportInterval = value; ConcreteAccelerometer._motionManager.AccelerometerUpdateInterval = this.ReportInterval.TotalSeconds; } } } public override AccelerometerReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteAccelerometer() { if (!((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsAccelerometerSupported()) throw base.CreateAccelerometerFailedException("Failed to start accelerometer data acquisition. No default sensor found.", -1); _instanceCount++; readingChanged += ReadingChangedHandler; } public override void Start() { if (this.State == SensorState.Ready) throw base.CreateAccelerometerFailedException("Failed to start accelerometer data acquisition. Data acquisition already started.", -1); ConcreteAccelerometer._motionManager.StartAccelerometerUpdates(NSOperationQueue.CurrentQueue, AccelerometerHandler); _state = SensorState.Ready; } public override void Stop() { ConcreteAccelerometer._motionManager.StopAccelerometerUpdates(); _state = SensorState.Disabled; } private void AccelerometerHandler(CMAccelerometerData data, NSError error) { readingChanged(data, error); } private void ReadingChangedHandler(CMAccelerometerData data, NSError error) { AccelerometerReading reading = new AccelerometerReading(); base.IsDataValid = (error == null); if (base.IsDataValid) { reading = base.CreateAccelerometerReading( acceleration: new Vector3((float)data.Acceleration.X, (float)data.Acceleration.Y, (float)data.Acceleration.Z), timestamp: DateTime.UtcNow ); base.CurrentReading = reading; _eventArgs.SensorReading = base.CurrentReading; base.OnReadingChanged(_eventArgs); } } protected override void Dispose(bool disposing) { if (disposing) { } if (this.State == SensorState.Ready) Stop(); _instanceCount--; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.iOS/Sensors/ConcreteCompass.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; using CoreMotion; using Foundation; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteCompass : CompassStrategy { static int _instanceCount; private static SensorState _state = (((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsCompassSupported()) ? SensorState.Initializing : SensorState.NotSupported; private bool _calibrate = false; private static event CMDeviceMotionHandler readingChanged; private SensorReadingEventArgs _eventArgs = new SensorReadingEventArgs(default(CompassReading)); public override SensorState State { get { return _state; //return base.State; } set { base.State = value; } } public override bool IsDataValid { get { return base.IsDataValid; } set { base.IsDataValid = value; } } public override TimeSpan ReportInterval { get { return base.ReportInterval; } set { if (base.ReportInterval != value) { base.ReportInterval = value; ConcreteAccelerometer._motionManager.MagnetometerUpdateInterval = this.ReportInterval.TotalSeconds; } } } public override CompassReading CurrentReading { get { return base.CurrentReading; } set { base.CurrentReading = value; } } public ConcreteCompass() { if (!((IPlatformSensorService)SensorService.Current).Strategy.PlatformIsCompassSupported()) throw base.CreateSensorFailedException("Failed to start compass data acquisition. No default sensor found."); _instanceCount++; readingChanged += ReadingChangedHandler; } public override void Start() { if (this.State == SensorState.Ready) throw base.CreateSensorFailedException("Failed to start compass data acquisition. Data acquisition already started."); // For true north use CMAttitudeReferenceFrame.XTrueNorthZVertical, but be aware that it requires location service ConcreteAccelerometer._motionManager.StartDeviceMotionUpdates(CMAttitudeReferenceFrame.XMagneticNorthZVertical, NSOperationQueue.CurrentQueue, MagnetometerHandler); _state = SensorState.Ready; } public override void Stop() { ConcreteAccelerometer._motionManager.StopDeviceMotionUpdates(); _state = SensorState.Disabled; } private void MagnetometerHandler(CMDeviceMotion magnetometerData, NSError error) { readingChanged(magnetometerData, error); } private void ReadingChangedHandler(CMDeviceMotion data, NSError error) { base.IsDataValid = (error == null); if (base.IsDataValid) { double headingAccuracy = 0; switch (data.MagneticField.Accuracy) { case CMMagneticFieldCalibrationAccuracy.High: headingAccuracy = 5d; break; case CMMagneticFieldCalibrationAccuracy.Medium: headingAccuracy = 30d; break; case CMMagneticFieldCalibrationAccuracy.Low: headingAccuracy = 45d; break; } double magneticHeading = Math.Atan2(-data.MagneticField.Field.X, data.MagneticField.Field.Y) / Math.PI * 180; Vector3 magnetometerReading = new Vector3((float)data.MagneticField.Field.Y, (float)-data.MagneticField.Field.X, (float)data.MagneticField.Field.Z); double trueHeading = magneticHeading; // Not implemented, fallback to magneticHeading. CompassReading reading = base.CreateCompassReading( headingAccuracy: headingAccuracy, magneticHeading: magneticHeading, magnetometerReading: magnetometerReading, timestamp: DateTime.UtcNow, trueHeading: trueHeading ); // Send calibrate event if needed if (data.MagneticField.Accuracy == CMMagneticFieldCalibrationAccuracy.Uncalibrated) { if (this._calibrate == false) { base.OnCalibrate(CalibrationEventArgs.Empty); } this._calibrate = true; } else if (this._calibrate == true) this._calibrate = false; base.CurrentReading = reading; _eventArgs.SensorReading = base.CurrentReading; base.OnReadingChanged(_eventArgs); } } protected override void Dispose(bool disposing) { if (disposing) { } if (this.State == SensorState.Ready) Stop(); _instanceCount--; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Devices/.iOS/Sensors/ConcreteSensorService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { internal sealed class ConcreteSensorService : SensorServiceStrategy { internal ConcreteSensorService() { } public override bool PlatformIsAccelerometerSupported() { return ConcreteAccelerometer._motionManager.AccelerometerAvailable; } public override bool PlatformIsCompassSupported() { return ConcreteAccelerometer._motionManager.DeviceMotionAvailable; } public override void Suspend() { } public override void Resume() { } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Directory.Build.props ================================================ obj\$(MSBuildProjectName)\ ================================================ FILE: Platforms/Game/.Android/AndroidCompatibility.cs ================================================ using System; using System.Linq; using Android.App; using Android.Content.Res; using Android.OS; using Android.Views; namespace Microsoft.Xna.Framework { /// /// Properties that change from how XNA works by default /// public class AndroidCompatibility { private static AndroidCompatibility _current; /// /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round. /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when /// more devices exhibit the same issues. /// private readonly string[] Kindles = new[] { "KFTT", "KFJWI", "KFJWA", "KFSOWI", "KFTHWA", "KFTHWI", "KFAPWA", "KFAPWI" }; public bool FlipLandscape { get; private set; } [CLSCompliant(false)] public Orientation NaturalOrientation { get; private set; } [CLSCompliant(false)] public static AndroidCompatibility Current { get { if (_current != null) return _current; else throw new InvalidOperationException("Not initialized."); } } internal static void Initialize(Activity activity) { if (_current == null) _current = new AndroidCompatibility(activity); } private AndroidCompatibility(Activity activity) { FlipLandscape = Kindles.Contains(Build.Model); NaturalOrientation = GetDeviceNaturalOrientation(activity); } private Orientation GetDeviceNaturalOrientation(Activity activity) { // check if MainActivity setup is correct. Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation; if (screenOrientation != Android.Content.PM.ScreenOrientation.FullSensor) throw new InvalidOperationException("NaturalOrientation detection failed. Set ScreenOrientation in MainActivity to FullSensor."); Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Landscape; default: return Orientation.Portrait; } } break; case Orientation.Landscape: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Landscape; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; default: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; } } /// /// Get the absolute orientation of the device, accounting for platform differences. /// /// [CLSCompliant(false)] public DisplayOrientation GetAbsoluteOrientation(Activity activity) { Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.Portrait; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.Portrait; } } break; case Orientation.Landscape: default: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; } } break; } } internal DisplayOrientation GetAbsoluteOrientation(int degrees) { // Orientation is reported by the device in degrees compared to the natural orientation // Some tablets have a natural landscape orientation, which we need to account for if (NaturalOrientation == Orientation.Landscape) degrees += 270; // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. degrees = ( ((degrees + 22) / 45) * 45) % 360; // Surprisingly 90 degree is landscape right, except on Kindle devices switch (degrees) { case 0: return DisplayOrientation.Portrait; case 180: return DisplayOrientation.PortraitDown; case 90: if (FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case 270: if (FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; default: return DisplayOrientation.Unknown; } } } } ================================================ FILE: Platforms/Game/.Android/AndroidGameActivity.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Android.App; using Android.Content; using Android.OS; using Android.Views; using Microsoft.Xna.Platform; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidGameActivity : Activity { public bool AutoPauseAndResumeMediaPlayer = true; internal event EventHandler WindowFocused; internal event EventHandler WindowUnfocused; public event EventHandler Paused; public event EventHandler Resumed; internal event EventHandler Destroyed; /// /// OnCreate called when the activity is launched from cold or after the app /// has been killed due to a higher priority app needing the memory /// /// /// Saved instance state. /// protected override void OnCreate(Bundle savedInstanceState) { // Detection of NaturalOrientation. This must happend as soon as possible at start up. AndroidCompatibility.Initialize(this); RequestWindowFeature(WindowFeatures.NoTitle); base.OnCreate(savedInstanceState); AndroidGameWindow.Activity = this; } private bool _isActivityActive = false; internal bool IsActivityActive { get { return _isActivityActive; } } public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig) { base.OnConfigurationChanged(newConfig); } protected override void OnPause() { base.OnPause(); _isActivityActive = false; var handler = Paused; if (handler != null) handler(this, EventArgs.Empty); } protected override void OnResume() { base.OnResume(); _isActivityActive = true; var handler = Resumed; if (handler != null) handler(this, EventArgs.Empty); } public override void OnWindowFocusChanged(bool hasFocus) { base.OnWindowFocusChanged(hasFocus); var handler = (hasFocus) ? WindowFocused : WindowUnfocused; if (handler != null) handler(this, EventArgs.Empty); } protected override void OnDestroy() { var handler = Destroyed; if (handler != null) handler(this, EventArgs.Empty); base.OnDestroy(); } } [CLSCompliant(false)] public static class ActivityExtensions { public static ActivityAttribute GetActivityAttribute(this AndroidGameActivity obj) { var attr = obj.GetType().GetCustomAttributes(typeof(ActivityAttribute), true); if (attr != null) { return ((ActivityAttribute)attr[0]); } return null; } } } ================================================ FILE: Platforms/Game/.Android/AndroidGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Input.Touch; using Android.Content; using Android.Content.PM; using Android.OS; using Android.Views; using Android.Util; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidGameWindow : GameWindow, IDisposable { // What is the state of the app. internal enum AppState { Paused, Resumed, Exited, } private static Dictionary _instances = new Dictionary(); internal static AndroidGameWindow FromHandle(IntPtr windowHandle) { return _instances[windowHandle]; } internal static AndroidGameActivity Activity { get; set; } internal AndroidSurfaceView GameView { get; private set; } internal RunnableObject _runner; internal AndroidGameActivity _activity; internal readonly Game _game; private bool _isActivated = false; private AndroidGameWindow.AppState _appState = AndroidGameWindow.AppState.Exited; MediaState _mediaPlayer_PrevState = MediaState.Stopped; private Rectangle _clientBounds; private DisplayOrientation _currentOrientation; private OrientationListener _orientationListener; internal ScreenReceiver _screenReceiver; private TouchEventListener _touchEventListener; public override IntPtr Handle { get { return GameView.Handle; } } public AndroidGameWindow(AndroidGameActivity activity, Game game) { _activity = activity; _game = game; _activity.Paused += Activity_Paused; _activity.Resumed += Activity_Resumed; _activity.Destroyed += Activity_Destroyed; _activity.WindowFocused += Activity_WindowFocused; _activity.WindowUnfocused += Activity_WindowUnfocused; Point size; // GetRealSize() was defined in JellyBeanMr1 / API 17 / Android 4.2 if (Build.VERSION.SdkInt < BuildVersionCodes.JellyBeanMr1) { size.X = activity.Resources.DisplayMetrics.WidthPixels; size.Y = activity.Resources.DisplayMetrics.HeightPixels; } else { Android.Graphics.Point p = new Android.Graphics.Point(); activity.WindowManager.DefaultDisplay.GetRealSize(p); size.X = p.X; size.Y = p.Y; } _clientBounds = new Rectangle(0, 0, size.X, size.Y); // init _currentOrientation DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity); // Android 2.3 and above support reverse orientations int sdkVer = (int)Android.OS.Build.VERSION.SdkInt; if (sdkVer < 10) { if (currentOrientation == DisplayOrientation.LandscapeRight) currentOrientation = DisplayOrientation.LandscapeLeft; if (currentOrientation == DisplayOrientation.PortraitDown) currentOrientation = DisplayOrientation.PortraitDown; } _currentOrientation = currentOrientation; _activity.RequestedOrientation = XnaOrientationToAndroid(currentOrientation); GameView = new AndroidSurfaceView(activity); GameView.LayoutChange += GameView_LayoutChange; _runner = new RunnableObject(); _runner.Tick += OnTick; GameView.RequestFocus(); GameView.FocusableInTouchMode = true; _instances.Add(this.Handle, this); _orientationListener = new OrientationListener(this, _activity); IntentFilter filter = new IntentFilter(); filter.AddAction(Intent.ActionScreenOff); filter.AddAction(Intent.ActionScreenOn); filter.AddAction(Intent.ActionUserPresent); filter.AddAction(Android.Telephony.TelephonyManager.ActionPhoneStateChanged); _screenReceiver = new ScreenReceiver(_activity); _activity.RegisterReceiver(_screenReceiver, filter); _screenReceiver.Unlocked += ScreenReceiver_Unlocked; _screenReceiver.Locked += ScreenReceiver_Locked; _touchEventListener = new TouchEventListener(); _touchEventListener.SetTouchListener(this); if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = this.Handle; if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = this.Handle; } private void ScreenReceiver_Unlocked(object sender, EventArgs e) { MediaPlayer.IsMuted = false; _appState = AndroidGameWindow.AppState.Resumed; this._runner.RequestFrame(); try { if (!this.GameView.IsFocused) this.GameView.RequestFocus(); } catch (Exception ex) { Log.Verbose("RequestFocus()", ex.ToString()); } } private void ScreenReceiver_Locked(object sender, EventArgs e) { MediaPlayer.IsMuted = true; } void Activity_Resumed(object sender, EventArgs e) { if (!_isActivated) { _isActivated = true; OnActivated(); } _appState = AndroidGameWindow.AppState.Resumed; _runner.RequestFrame(); try { if (!GameView.IsFocused) GameView.RequestFocus(); } catch (Exception ex) { Log.Verbose("RequestFocus()", ex.ToString()); } Microsoft.Xna.Platform.Audio.AudioService.Resume(); if (_mediaPlayer_PrevState == MediaState.Playing && _activity.AutoPauseAndResumeMediaPlayer) MediaPlayer.Resume(); if (!this.GameView.IsFocused) this.GameView.RequestFocus(); if (_game != null) { IGraphicsDeviceManager deviceManager = (IGraphicsDeviceManager)_game.Services.GetService(typeof(IGraphicsDeviceManager)); if (deviceManager != null) { // TODO: Set fullscreen in ApplyChanges() GraphicsDeviceManager gdm = (GraphicsDeviceManager)deviceManager; this.ForceSetFullScreen(gdm.IsFullScreen); } } if (_game != null) { if (_orientationListener.CanDetectOrientation()) _orientationListener.Enable(); } } void Activity_Paused(object sender, EventArgs e) { if (_isActivated) { _isActivated = false; OnDeactivated(); } _mediaPlayer_PrevState = MediaPlayer.State; _appState = AndroidGameWindow.AppState.Paused; this.GameView.ClearFocus(); Microsoft.Xna.Platform.Audio.AudioService.Suspend(); if (_activity.AutoPauseAndResumeMediaPlayer) MediaPlayer.Pause(); if (_orientationListener.CanDetectOrientation()) _orientationListener.Disable(); } void Activity_Destroyed(object sender, EventArgs e) { _screenReceiver.Unlocked -= ScreenReceiver_Unlocked; _screenReceiver.Locked -= ScreenReceiver_Locked; _activity.UnregisterReceiver(_screenReceiver); _screenReceiver.IsScreenLocked = false; _orientationListener = null; if (_game != null) { _game.Dispose(); } } private void Activity_WindowFocused(object sender, EventArgs e) { if (!_isActivated) { _isActivated = true; OnActivated(); } } private void Activity_WindowUnfocused(object sender, EventArgs e) { if (_isActivated) { _isActivated = false; OnDeactivated(); } } internal void ForceSetFullScreen(bool _isFullScreen) { if (_isFullScreen) { _activity.Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen); _activity.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen); } else { _activity.Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen); } } /// /// Updates the screen orientation. Filters out requests for unsupported orientations. /// internal void SetOrientation(DisplayOrientation newOrientation, DisplayOrientation supported) { // If the new orientation is not supported, force a supported orientation if ((newOrientation & supported) == 0) { if ((supported & DisplayOrientation.LandscapeLeft) != 0) newOrientation = DisplayOrientation.LandscapeLeft; else if ((supported & DisplayOrientation.LandscapeRight) != 0) newOrientation = DisplayOrientation.LandscapeRight; else if ((supported & DisplayOrientation.Portrait) != 0) newOrientation = DisplayOrientation.Portrait; else if ((supported & DisplayOrientation.PortraitDown) != 0) newOrientation = DisplayOrientation.PortraitDown; } if (newOrientation != _currentOrientation) { // Android 2.3 and above support reverse orientations int sdkVer = (int)Android.OS.Build.VERSION.SdkInt; if (sdkVer < 10) { if (newOrientation == DisplayOrientation.LandscapeRight) newOrientation = DisplayOrientation.LandscapeLeft; if (newOrientation == DisplayOrientation.PortraitDown) newOrientation = DisplayOrientation.PortraitDown; } if ((newOrientation & supported) != 0) { _currentOrientation = newOrientation; _activity.RequestedOrientation = XnaOrientationToAndroid(newOrientation); OnOrientationChanged(); } } } public override string ScreenDeviceName { get { throw new NotImplementedException(); } } public override Rectangle ClientBounds { get { return _clientBounds; } } private void GameView_LayoutChange(object sender, View.LayoutChangeEventArgs e) { Rectangle bounds = new Rectangle( GameView.Left, GameView.Top, GameView.Width, GameView.Height); if (bounds != _clientBounds) { _clientBounds = bounds; OnClientSizeChanged(); Android.Util.Log.Debug("Kni", "GameWindow.ChangeClientBounds: newClientBounds=" + this.ClientBounds.Width + "," + this.ClientBounds.Height); // Set the new display size on the touch panel. TouchPanel.DisplayWidth = this.ClientBounds.Width; TouchPanel.DisplayHeight = this.ClientBounds.Height; } } public override bool AllowUserResizing { get { return false; } set { /* Ignore */ } } // A copy of ScreenOrientation from Android 2.3 // This allows us to continue to support 2.2 whilst // utilising the 2.3 improved orientation support. enum ScreenOrientationAll { Unspecified = -1, Landscape = 0, Portrait = 1, User = 2, Behind = 3, Sensor = 4, Nosensor = 5, SensorLandscape = 6, SensorPortrait = 7, ReverseLandscape = 8, ReversePortrait = 9, FullSensor = 10, } public override DisplayOrientation CurrentOrientation { get { return _currentOrientation; } } private static ScreenOrientation XnaOrientationToAndroid(DisplayOrientation value) { switch (value) { case DisplayOrientation.LandscapeLeft: return (ScreenOrientation)ScreenOrientationAll.Landscape; case DisplayOrientation.LandscapeRight: return (ScreenOrientation)ScreenOrientationAll.ReverseLandscape; case DisplayOrientation.Portrait: return (ScreenOrientation)ScreenOrientationAll.Portrait; case DisplayOrientation.PortraitDown: return (ScreenOrientation)ScreenOrientationAll.ReversePortrait; default: return ScreenOrientation.Unspecified; } } public void Dispose() { if (_activity != null) { _activity.Paused -= Activity_Paused; _activity.Resumed -= Activity_Resumed; _activity.Destroyed -= Activity_Destroyed; _activity.WindowFocused -= Activity_WindowFocused; _activity.WindowUnfocused -= Activity_WindowUnfocused; _activity = null; } _appState = AndroidGameWindow.AppState.Exited; if (GameView != null) { if (Mouse.WindowHandle == this.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == this.Handle) TouchPanel.WindowHandle = IntPtr.Zero; GameView.LayoutChange -= GameView_LayoutChange; GameView.Dispose(); GameView = null; } _instances.Remove(this.Handle); } protected override void SetTitle(string title) { } internal void StartGameLoop() { _runner.InitLoopHandler(); _runner.RequestFrame(); } internal void OnTick(object sender, EventArgs args) { try { RunStep(); // tick } finally { // request next tick if (_appState == AndroidGameWindow.AppState.Resumed) _runner.RequestFrame(); } } private void RunStep() { switch (_appState) { case AndroidGameWindow.AppState.Resumed: if (GameView._isAndroidSurfaceAvailable) // do not run game if surface is not available { _orientationListener.Update(); if (!_screenReceiver.IsScreenLocked) // do not run game if Screen is Locked { if (_game != null) { ((IPlatformGame)_game).GetStrategy().OnFrameTick(); } } } break; case AndroidGameWindow.AppState.Paused: break; case AndroidGameWindow.AppState.Exited: break; default: throw new InvalidOperationException("currentState"); } return; } } } ================================================ FILE: Platforms/Game/.Android/AndroidSurfaceView.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Input; using Android.Content; using Android.Media; using Android.Util; using Android.Views; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidSurfaceView : SurfaceView , ISurfaceView , ISurfaceHolderCallback { ISurfaceHolder _surfaceHolder; internal bool _isAndroidSurfaceAvailable = false; public AndroidSurfaceView(Context context) : base(context) { // default _surfaceHolder = Holder; // Add callback to get the SurfaceCreated etc events _surfaceHolder.AddCallback((ISurfaceHolderCallback)this); // Holder.SetType is deprecated. The SurfaceType value is ignored. if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Honeycomb) _surfaceHolder.SetType(SurfaceType.Gpu); } void ISurfaceHolderCallback.SurfaceCreated(ISurfaceHolder holder) { Log.Debug("AndroidSurfaceView", "SurfaceCreated"); _isAndroidSurfaceAvailable = true; var handler = _surfaceCreatedEvent; if (handler != null) handler(this, EventArgs.Empty); } void ISurfaceHolderCallback.SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height) { Log.Debug("AndroidSurfaceView", "SurfaceChanged: width=" + width + ", height=" + height + ", format=" + format.ToString()); var handler = _surfaceChangedEvent; if (handler != null) handler(this, EventArgs.Empty); } void ISurfaceHolderCallback.SurfaceDestroyed(ISurfaceHolder holder) { Log.Debug("AndroidSurfaceView", "SurfaceDestroyed"); _isAndroidSurfaceAvailable = false; var handler = _surfaceDestroyedEvent; if (handler != null) handler(this, EventArgs.Empty); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } #region Key and Motion public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { bool handled = false; if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnKeyDown(keyCode, e)) return true; handled = ((IPlatformKeyboard)Keyboard.Current).GetStrategy().KeyDown(keyCode); // we need to handle the Back key here because it doesn't work any other way if (keyCode == Keycode.Back) { ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = true; handled = true; } if (keyCode == Keycode.VolumeUp) { AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService); audioManager.AdjustStreamVolume(Stream.Music, Adjust.Raise, VolumeNotificationFlags.ShowUi); return true; } if (keyCode == Keycode.VolumeDown) { AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService); audioManager.AdjustStreamVolume(Stream.Music, Adjust.Lower, VolumeNotificationFlags.ShowUi); return true; } return handled; } public override bool OnKeyUp(Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back) ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = false; if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnKeyUp(keyCode, e)) return true; return ((IPlatformKeyboard)Keyboard.Current).GetStrategy().KeyUp(keyCode); } public override bool OnGenericMotionEvent(MotionEvent e) { if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnGenericMotionEvent(e)) return true; if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse) { if (((IPlatformMouse)Mouse.Current).GetStrategy().OnGenericMotionEvent(e)) return true; } return base.OnGenericMotionEvent(e); } #endregion #region ISurfaceView private event EventHandler _surfaceCreatedEvent; private event EventHandler _surfaceChangedEvent; private event EventHandler _surfaceDestroyedEvent; event EventHandler ISurfaceView.SurfaceCreated { add { _surfaceCreatedEvent += value; } remove { _surfaceCreatedEvent -= value; } } event EventHandler ISurfaceView.SurfaceChanged { add { _surfaceChangedEvent += value; } remove { _surfaceChangedEvent -= value; } } event EventHandler ISurfaceView.SurfaceDestroyed { add { _surfaceDestroyedEvent += value; } remove { _surfaceDestroyedEvent -= value; } } #endregion } } ================================================ FILE: Platforms/Game/.Android/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Media; using Android.Views; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { private static ConcreteGame _concreteGameInstance = null; internal static ConcreteGame GameConcreteInstance { get { return ConcreteGame._concreteGameInstance; } } private AndroidGameWindow _gameWindow; public ConcreteGame(Game game) : base(game) { ConcreteGame._concreteGameInstance = this; System.Diagnostics.Debug.Assert(AndroidGameWindow.Activity != null, "Must set Game.Activity before creating the Game instance"); this.Services.AddService(typeof(Android.App.Activity), AndroidGameWindow.Activity); _gameWindow = new AndroidGameWindow(AndroidGameWindow.Activity, game); base.Window = _gameWindow; base.SetWindowListeners(); Services.AddService(typeof(View), _gameWindow.GameView); ConcreteMediaLibraryStrategy.Context = AndroidGameWindow.Activity; } protected override void Dispose(bool disposing) { if (disposing) { } AndroidGameWindow.Activity = null; base.Dispose(disposing); } public override void Exit() { throw new PlatformNotSupportedException("Android platform does not allow programmatically closing."); } public override void TickExiting() { // Android games do not "exit" or shut down. throw new PlatformNotSupportedException(); } protected override void Run() { StartGameLoop(); // Prevent the default run loop from starting. // We will run the loop from the GameView's IRunnable.Run(). return; // StartRunLoop //_gameWindow.GameView.Resume(); //this.CallEndRun(); //this.DoExiting(); } private void StartGameLoop() { _gameWindow.StartGameLoop(); } private void OnFrameTickBegin() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); } bool _isReadyToRun = false; internal void OnFrameTick() { if (_isReadyToRun == false) { OnFrameTickBegin(); _isReadyToRun = true; } if (AndroidGameWindow.Activity.IsActivityActive) { this.Game.Tick(); } } } } ================================================ FILE: Platforms/Game/.Android/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.Android/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; using Android.Views; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; // Preferred buffer width/height is used to determine default supported orientations, // so set the default values to match Xna behaviour of landscape only by default. // Note also that it's using the device window dimensions. base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height); base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width); this.Game.Window.OrientationChanged += GameWindow_OrientationChanged; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { if (base.GraphicsDevice != null) return base.GraphicsDevice.PresentationParameters.IsFullScreen; return base.IsFullScreen; } set { base.IsFullScreen = value; if (base.GraphicsDevice != null) base.GraphicsDevice.PresentationParameters.IsFullScreen = value; if (base.GraphicsDevice != null) { // TODO: Set fullscreen in ApplyChanges() IntPtr windowHandle = base.GraphicsDevice.PresentationParameters.DeviceWindowHandle; AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle); gameWindow.ForceSetFullScreen(base.IsFullScreen); } } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { this.IsFullScreen = !this.IsFullScreen; //ApplyChanges(); } public override void CreateDevice() { PresentationParameters pp = new PresentationParameters(); pp.MultiSampleCount = (this.PreferMultiSampling) ? 4 : 1; pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferWidth = 800; pp.BackBufferHeight = 480; // force "full screen" as default on Android pp.IsFullScreen = true; pp.DeviceWindowHandle = this.Game.Window.Handle; GraphicsDeviceInformation gdi = new GraphicsDeviceInformation(); gdi.GraphicsProfile = this.GraphicsProfile; gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.PresentationParameters = pp; var pe = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(pe); pp = gdi.PresentationParameters; this.GraphicsProfile = gdi.GraphicsProfile; AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; pp.DisplayOrientation = base.Game.Window.CurrentOrientation; pp.BackBufferWidth = surfaceView.Width; pp.BackBufferHeight = surfaceView.Height; this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp); // ApplyChanges { TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight; } // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event... // we need to get those working. TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; this.OnDeviceCreated(EventArgs.Empty); Android.App.Activity activity = AndroidGameWindow.Activity; DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity); DisplayOrientation supported2 = this.SupportedOrientations; if (supported2 == DisplayOrientation.Default) { if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight) supported2 = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported2 = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } androidGameWindow.SetOrientation(currentOrientation, supported2); } private void GameWindow_OrientationChanged(object sender, EventArgs e) { if (GraphicsDevice != null) { AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation; base.GraphicsDevice.PresentationParameters.BackBufferWidth = surfaceView.Width; base.GraphicsDevice.PresentationParameters.BackBufferHeight = surfaceView.Height; if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound) { PresentationParameters pp = this.GraphicsDevice.PresentationParameters; base.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight); base.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, pp.BackBufferWidth, pp.BackBufferHeight); } TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = base.GraphicsDevice.PresentationParameters.DisplayOrientation; } } public override void ApplyChanges() { if (base.GraphicsDevice == null) { // TODO: Calling ApplyChanges() before Game.Initialize() should create the device. System.Diagnostics.Debug.Assert(false); //this.CreateDevice(); return; } AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; // Trigger a change in orientation in case the supported orientations have changed DisplayOrientation supported = this.SupportedOrientations; if (supported == DisplayOrientation.Default) { if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight) supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } androidGameWindow.SetOrientation(base.Game.Window.CurrentOrientation, supported); } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { #if OCULUS return; // On Oculus, do not Present() the backbuffer. #endif //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { if (base.Game != null && base.Game.Window != null) { base.Game.Window.OrientationChanged -= GameWindow_OrientationChanged; } } } } } ================================================ FILE: Platforms/Game/.Android/ISurfaceView.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Graphics.OpenGL; using Javax.Microedition.Khronos.Egl; namespace Microsoft.Xna.Platform { interface ISurfaceView { public event EventHandler SurfaceCreated; public event EventHandler SurfaceChanged; public event EventHandler SurfaceDestroyed; } } ================================================ FILE: Platforms/Game/.Android/OrientationListener.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform; using Android.App; using Android.Content; using Android.Hardware; using Android.Views; using Android.Provider; namespace Microsoft.Xna.Framework { internal class OrientationListener : OrientationEventListener { private AndroidGameWindow _gameWindow; internal DisplayOrientation targetOrientation = DisplayOrientation.Unknown; DateTime prevTickTime = DateTime.Now; TimeSpan elapsed = TimeSpan.Zero; /// /// Constructor. SensorDelay.Ui is passed to the base class as this orientation listener /// is just used for flipping the screen orientation, therefore high frequency data is not required. /// public OrientationListener(AndroidGameWindow gameWindow, Context context) : base(context, SensorDelay.Ui) { this._gameWindow = gameWindow; } public override void OnOrientationChanged(int orientation) { if (orientation == OrientationEventListener.OrientationUnknown) { targetOrientation = DisplayOrientation.Unknown; elapsed = TimeSpan.Zero; return; } // Avoid changing orientation whilst the screen is locked if (_gameWindow._screenReceiver.IsScreenLocked) return; DisplayOrientation absOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(orientation); GraphicsDeviceManager deviceManager = (_gameWindow._game.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager); if (deviceManager != null) { DisplayOrientation supported = deviceManager.SupportedOrientations; if (supported == DisplayOrientation.Default) { if (deviceManager.PreferredBackBufferWidth <= deviceManager.PreferredBackBufferHeight) supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } if ((supported & absOrientation) == 0) { targetOrientation = DisplayOrientation.Unknown; elapsed = TimeSpan.Zero; return; } } if (absOrientation == _gameWindow.CurrentOrientation || absOrientation == DisplayOrientation.Unknown ) { targetOrientation = DisplayOrientation.Unknown; elapsed = TimeSpan.Zero; return; } // Delay changing of Orientation. Filter random shocks. if (targetOrientation != absOrientation) { targetOrientation = absOrientation; elapsed = TimeSpan.Zero; } return; } internal void Update() { DateTime currTickTime = DateTime.Now; TimeSpan elapsedTime = TimeSpan.Zero; if (prevTickTime.Ticks != 0) { elapsedTime = (currTickTime - prevTickTime); if (elapsedTime.TotalMilliseconds < 0) elapsedTime = TimeSpan.Zero; } prevTickTime = currTickTime; try { if (targetOrientation != DisplayOrientation.Unknown) { elapsed += elapsedTime; // orientation must be stable for 0.5 seconds before changing. if (elapsed.TotalSeconds > 0.5) { GraphicsDeviceManager deviceManager = (_gameWindow._game.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager); if (deviceManager != null) { DisplayOrientation supported = deviceManager.SupportedOrientations; if (supported == DisplayOrientation.Default) { if (deviceManager.PreferredBackBufferWidth <= deviceManager.PreferredBackBufferHeight) supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } _gameWindow.SetOrientation(targetOrientation, supported); targetOrientation = DisplayOrientation.Unknown; elapsed = TimeSpan.Zero; } else { DisplayOrientation supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight) | (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown) ; _gameWindow.SetOrientation(targetOrientation, supported); targetOrientation = DisplayOrientation.Unknown; elapsed = TimeSpan.Zero; } } } } catch (Exception) { /* ignore */ } } } } ================================================ FILE: Platforms/Game/.Android/RunnableObject.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Platform { internal class RunnableObject : Java.Lang.Object , Java.Lang.IRunnable { private Android.OS.Handler _handler; private int _frameRequests = 0; public event EventHandler Tick; public RunnableObject() : base() { } public void InitLoopHandler() { Android.OS.Looper looper = Android.OS.Looper.MainLooper; _handler = new Android.OS.Handler(looper); } public void RequestFrame() { if (_frameRequests == 0) { _handler.Post((Java.Lang.IRunnable)this); _frameRequests++; } } void Java.Lang.IRunnable.Run() { _frameRequests--; var handler = Tick; if (handler != null) handler(this, EventArgs.Empty); } } } ================================================ FILE: Platforms/Game/.Android/ScreenReceiver.cs ================================================ using System; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; using Android.App; using Android.Content; using Android.Util; namespace Microsoft.Xna.Framework { internal class ScreenReceiver : BroadcastReceiver { private AndroidGameActivity _activity; private bool _isScreenLocked; public event EventHandler Locked; public event EventHandler Unlocked; public bool IsScreenLocked { get { return _isScreenLocked; } internal set { _isScreenLocked = value; } } public ScreenReceiver(AndroidGameActivity activity) { this._activity = activity; } public override void OnReceive(Context context, Intent intent) { Android.Util.Log.Info("Kni", intent.Action.ToString()); if(intent.Action == Intent.ActionScreenOff) { OnLocked(); } else if(intent.Action == Intent.ActionScreenOn) { // If the user turns the screen on just after it has automatically turned off, // the keyguard will not have had time to activate and the ActionUserPreset intent // will not be broadcast. We need to check if the lock is currently active // and if not re-enable the game related functions. // http://stackoverflow.com/questions/4260794/how-to-tell-if-device-is-sleeping KeyguardManager keyguard = (KeyguardManager)context.GetSystemService(Context.KeyguardService); if (!keyguard.InKeyguardRestrictedInputMode()) OnUnlocked(); } else if(intent.Action == Intent.ActionUserPresent) { // This intent is broadcast when the user unlocks the phone OnUnlocked(); } if (intent.Action == Android.Telephony.TelephonyManager.ActionPhoneStateChanged) { if (intent.Extras != null) { string state = intent.GetStringExtra(Android.Telephony.TelephonyManager.ExtraState); if (state == Android.Telephony.TelephonyManager.ExtraStateRinging) { // TODO: Find a way to set Game.IsActive = false during a call. // View.ClearFocus() doesn't have any affect. // The best we can do currently is to sent the game to foreground. _activity.MoveTaskToBack(true); } } } } private void OnLocked() { _isScreenLocked = true; var handler = Locked; if (handler != null) handler(this, EventArgs.Empty); } private void OnUnlocked() { _isScreenLocked = false; var handler = Locked; if (handler != null) handler(this, EventArgs.Empty); } } } ================================================ FILE: Platforms/Game/.Android/TouchEventListener.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using Android.Views; namespace Microsoft.Xna.Platform.Input.Touch { class TouchEventListener : Java.Lang.Object , View.IOnTouchListener { public void SetTouchListener(GameWindow window) { GameWindow gameWindow = window; AndroidGameWindow androidGameWindow = (AndroidGameWindow)gameWindow; androidGameWindow.GameView.SetOnTouchListener(this); } bool View.IOnTouchListener.OnTouch(View v, MotionEvent e) { Vector2 position = Vector2.Zero; position.X = e.GetX(e.ActionIndex); position.Y = e.GetY(e.ActionIndex); int id = e.GetPointerId(e.ActionIndex); if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse) { ((IPlatformMouse)Framework.Input.Mouse.Current).GetStrategy().OnTouchEvent(e); } switch (e.ActionMasked) { // DOWN case MotionEventActions.Down: case MotionEventActions.PointerDown: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(id, position); break; // MOVE case MotionEventActions.Move: for (int i = 0; i < e.PointerCount; i++) { id = e.GetPointerId(i); position.X = e.GetX(i); position.Y = e.GetY(i); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(id, position); } break; // UP case MotionEventActions.Up: case MotionEventActions.PointerUp: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(id, position); break; // OUTSIDE case MotionEventActions.Outside: for (int i = 0; i < e.PointerCount; i++) { id = e.GetPointerId(i); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(id, position); } break; // CANCEL case MotionEventActions.Cancel: for (int i = 0; i < e.PointerCount; i++) { id = e.GetPointerId(i); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddCanceledEvent(id, position); } break; } return true; } } } ================================================ FILE: Platforms/Game/.Blazor/BlazorGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using nkast.Wasm.Canvas; using nkast.Wasm.Dom; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Framework { // TODO: BlazorGameWindow should be internal public class BlazorGameWindow : GameWindow, IDisposable { private static Dictionary _instances = new Dictionary(); internal static BlazorGameWindow FromHandle(IntPtr handle) { return _instances[handle]; } private Window _window; private ConcreteGame _concreteGame; private bool _isResizable; private bool _isBorderless; private bool _isMouseHidden; private bool _isMouseInBounds; private readonly List _keys = new List(); private Point _locationBeforeFullScreen; // flag to indicate that we're switching to/from full screen and should ignore resize events private bool _switchingFullScreen; #region Internal Properties #endregion #region Public Properties public override IntPtr Handle { get { return new IntPtr(_window.Uid); } } public override string ScreenDeviceName { get { return String.Empty; } } public override Rectangle ClientBounds { get { return new Rectangle(0, 0, _canvas.Width, _canvas.Height); } } public override bool AllowUserResizing { get { return _isResizable; } set { if (_isResizable == value) return; _isResizable = value; if (!_isBorderless) { } } } public override bool IsBorderless { get { return _isBorderless; } set { if (_isBorderless == value) return; _isBorderless = value; if (!_isBorderless) { } } } public override DisplayOrientation CurrentOrientation { get { return DisplayOrientation.Default; } } public bool IsFullScreen { get; private set; } public bool HardwareModeSwitch { get; private set; } #endregion internal Canvas _canvas { get; private set; } internal Window wasmWindow { get { return _window; } } internal BlazorGameWindow(ConcreteGame concreteGame) { _concreteGame = concreteGame; _window = Window.Current; _canvas = _window.Document.GetElementById("theCanvas"); _instances.Add(this.Handle, this); ChangeClientSize(GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight); SetIcon(); // Capture mouse events. if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = this.Handle; //Form.MouseEnter += OnMouseEnter; //Form.MouseLeave += OnMouseLeave; // Capture touch events. if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = this.Handle; _window.OnTouchStart += (object sender, float x, float y, int identifier) => { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(identifier, new Vector2(x, y)); }; _window.OnTouchMove += (object sender, float x, float y, int identifier) => { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(identifier, new Vector2(x, y)); }; _window.OnTouchEnd += (object sender, float x, float y, int identifier) => { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(identifier, new Vector2(x, y)); }; _window.OnTouchCancel += (object sender) => { // TODO: Implement TouchEvent.ChangedTouches and call TouchPanelStrategy.AddCanceledEvent(...) // instead of InvalidateTouches(). // see: https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent/changedTouches ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().BlazorCancelAllTouches(); }; // keyboard events ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetKeys(_keys); _window.OnKeyDown += (object sender, char key, int keyCode, int location) => { Keys xnakey = (Keys)keyCode; // map special keys switch (keyCode) { case 16: xnakey = (location == 2) ? Keys.RightShift: Keys.LeftShift; break; case 17: xnakey = (location == 2) ? Keys.RightControl : Keys.LeftControl; break; case 18: xnakey = (location == 2) ? Keys.RightAlt : Keys.LeftAlt; break; } if (!_keys.Contains(xnakey)) _keys.Add(xnakey); OnKeyDown(xnakey); if (IsTextInputAttached()) { bool controlKeyBlocksTextInput = false; for (int i = 0; i < _keys.Count; i++) { Keys keyToCheck = _keys[i]; if (keyToCheck == Keys.LeftControl || keyToCheck == Keys.RightControl || keyToCheck == Keys.LeftAlt) { controlKeyBlocksTextInput = true; break; } } if (key != '\0' && !controlKeyBlocksTextInput) OnTextInput(key, xnakey); } }; _window.OnKeyUp += (object sender, char key, int keyCode, int location) => { Keys xnakey = (Keys)keyCode; // map special keys switch (keyCode) { case 16: xnakey = (location == 2) ? Keys.RightShift: Keys.LeftShift; break; case 17: xnakey = (location == 2) ? Keys.RightControl : Keys.LeftControl; break; case 18: xnakey = (location == 2) ? Keys.RightAlt : Keys.LeftAlt; break; } if (_keys.Contains(xnakey)) _keys.Remove(xnakey); OnKeyUp(xnakey); }; _window.OnFocus += OnActivated; _window.OnBlur += OnDeactivated; // Form.Resize += OnResize; // Form.ResizeBegin += OnResizeBegin; // Form.ResizeEnd += OnResizeEnd; _window.OnResize += OnResize; // Form.KeyPress += OnKeyPress; } private void SetIcon() { } ~BlazorGameWindow() { Dispose(false); } private void OnActivated(object sender) { base.OnActivated(); //Keyboard.SetActive(true); } private void OnDeactivated(object sender) { _keys.Clear(); base.OnDeactivated(); } private void OnMouseEnter(object sender, EventArgs e) { _isMouseInBounds = true; if (!_concreteGame.IsMouseVisible && !_isMouseHidden) { _isMouseHidden = true; //Cursor.Hide(); } } private void OnMouseLeave(object sender, EventArgs e) { _isMouseInBounds = false; if (_isMouseHidden) { _isMouseHidden = false; //Cursor.Show(); } } internal void OnResize(object sender) { UpdateBackBufferSize(); OnClientSizeChanged(); } // TODO: move UpdateBackBufferSize() in graphicsDeviceManager private void UpdateBackBufferSize() { GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; if (gdm != null) { if (gdm.GraphicsDevice == null) return; _canvas.Width = _window.InnerWidth; _canvas.Height = _window.InnerHeight; int newWidth = _canvas.Width; int newHeight = _canvas.Height; if (newWidth != gdm.PreferredBackBufferWidth || newHeight != gdm.PreferredBackBufferHeight) { // Set the default new back buffer size gdm.PreferredBackBufferWidth = newWidth; gdm.PreferredBackBufferHeight = newHeight; gdm.ApplyChanges(); } } } protected override void SetTitle(string title) { _window.Document.Title = title; } internal void ChangeClientSize(int width, int height) { } #region Public Methods public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } void Dispose(bool disposing) { if (disposing) { } if (Mouse.WindowHandle == this.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == this.Handle) TouchPanel.WindowHandle = IntPtr.Zero; _instances.Remove(this.Handle); _canvas = null; _concreteGame = null; } public void MouseVisibleToggled() { if (_concreteGame.IsMouseVisible) { if (_isMouseHidden) { //Cursor.Show(); _isMouseHidden = false; } } else if (!_isMouseHidden && _isMouseInBounds) { //Cursor.Hide(); _isMouseHidden = true; } } internal void OnPresentationChanged(PresentationParameters pp) { var raiseClientSizeChanged = false; if (pp.IsFullScreen && pp.HardwareModeSwitch && IsFullScreen && HardwareModeSwitch) { if(_concreteGame.IsActive) { // stay in hardware full screen, need to call ResizeTargets so the displaymode can be switched // _concreteGame.GraphicsDevice.ResizeTargets(); } else { // This needs to be called in case the user presses the Windows key while the focus is on the second monitor, // which (sometimes) causes the window to exit fullscreen mode, but still keeps it visible MinimizeFullScreen(); } } else if (pp.IsFullScreen && (!IsFullScreen || pp.HardwareModeSwitch != HardwareModeSwitch)) { EnterFullScreen(pp); raiseClientSizeChanged = true; } else if (!pp.IsFullScreen && IsFullScreen) { ExitFullScreen(); raiseClientSizeChanged = true; } if (raiseClientSizeChanged) OnClientSizeChanged(); } #endregion internal void EnterFullScreen(PresentationParameters pp) { } private void ExitFullScreen() { } private void MinimizeFullScreen() { } internal void InitFocus() { if (this.wasmWindow.Document.HasFocus()) OnActivated(); } } } ================================================ FILE: Platforms/Game/.Blazor/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { //internal static string LaunchParameters; private BlazorGameWindow _gameWindow; // this disable the Tick(), when we are in WebXR mode // and running under XRSession.RequestAnimationFrame. internal bool _suppressTick; public ConcreteGame(Game game) : base(game) { _gameWindow = new BlazorGameWindow(this); base.Window = _gameWindow; base.SetWindowListeners(); } protected override void Run() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); _gameWindow.InitFocus(); StartGameLoop(); return; //this.CallEndRun(); //this.DoExiting(); } private void StartGameLoop() { // request next frame } public override bool IsMouseVisible { get { return base.IsMouseVisible; } set { if (base.IsMouseVisible != value) { base.IsMouseVisible = value; _gameWindow.MouseVisibleToggled(); } } } public override void Tick() { if (_suppressTick) return; base.Tick(); } public override void Exit() { throw new PlatformNotSupportedException("BlazorGL platform does not allow programmatically closing."); } public override void TickExiting() { // BlazorGL games do not "exit" or shut down. throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { if (_gameWindow != null) { _gameWindow.Dispose(); _gameWindow = null; Window = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Game/.Blazor/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.Blazor/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; base.PreferredBackBufferWidth = clientBounds.Width; base.PreferredBackBufferHeight = clientBounds.Height; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { return base.IsFullScreen; } set { base.IsFullScreen = value; } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { base.IsFullScreen = !base.IsFullScreen; ApplyChanges(); } public override void ApplyChanges() { if (this.GraphicsDevice == null) { this.CreateDevice(); } // populates a gdi with settings in this gdm and allows users to override them with // PrepareDeviceSettings event this information should be applied to the GraphicsDevice var gdi = this.DoPreparingDeviceSettings(); if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile) { // if the GraphicsProfile changed we need to create a new GraphicsDevice this.GraphicsDevice.Dispose(); this.GraphicsDevice = null; this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); } else { GraphicsDevice.Reset(gdi.PresentationParameters); } } /// /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to /// allow users to change the settings. Then returns that GraphicsDeviceInformation. /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. /// internal GraphicsDeviceInformation DoPreparingDeviceSettings() { var gdi = new GraphicsDeviceInformation(); gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.GraphicsProfile = GraphicsProfile; PresentationParameters pp = new PresentationParameters(); pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.BackBufferWidth = this.PreferredBackBufferWidth; pp.BackBufferHeight = this.PreferredBackBufferHeight; pp.IsFullScreen = this.IsFullScreen; pp.HardwareModeSwitch = this.HardwareModeSwitch; pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate; pp.DisplayOrientation = this.Game.Window.CurrentOrientation; pp.DeviceWindowHandle = this.Game.Window.Handle; // always initialize MultiSampleCount to the maximum, if users want to overwrite // this they have to respond to the PreparingDeviceSettingsEvent and modify // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount int maxMultiSampleCount = 0; if (this.PreferMultiSampling) { if (GraphicsDevice != null) { maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat); } else { maxMultiSampleCount = 32; } } pp.MultiSampleCount = maxMultiSampleCount; gdi.PresentationParameters = pp; var args = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(args); if (gdi.PresentationParameters == null || gdi.Adapter == null) throw new NullReferenceException("Members should not be set to null in PreparingDeviceSettingsEventArgs"); return gdi; } public override void CreateDevice() { if (this.GraphicsDevice != null) return; var gdi = this.DoPreparingDeviceSettings(); this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // Set the new display size on the touch panel. TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); PresentationParameters pp = this.GraphicsDevice.PresentationParameters; BlazorGameWindow gameWindow = (BlazorGameWindow)Game.Window; gameWindow.ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight); if (pp.IsFullScreen) { gameWindow.EnterFullScreen(pp); if (!pp.HardwareModeSwitch) { ConcreteGraphicsDevice cgd = ((IPlatformGraphicsDevice)this.GraphicsDevice).Strategy.ToConcrete(); ((IPlatformGraphicsContext)cgd.MainContext).Strategy.ApplyRenderTargets(null); } } } private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs) { TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; } private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args) { PresentationParameters pp = args.PresentationParameters; ((BlazorGameWindow)this.Game.Window).OnPresentationChanged(pp); } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.CardboardLegacy/AndroidCompatibility.cs ================================================ using System; using System.Linq; using Android.App; using Android.Content.Res; using Android.OS; using Android.Views; namespace Microsoft.Xna.Framework { /// /// Properties that change from how XNA works by default /// public class AndroidCompatibility { private static AndroidCompatibility _current; /// /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round. /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when /// more devices exhibit the same issues. /// private readonly string[] Kindles = new[] { "KFTT", "KFJWI", "KFJWA", "KFSOWI", "KFTHWA", "KFTHWI", "KFAPWA", "KFAPWI" }; public bool FlipLandscape { get; private set; } [CLSCompliant(false)] public Orientation NaturalOrientation { get; private set; } [CLSCompliant(false)] public static AndroidCompatibility Current { get { if (_current != null) return _current; else throw new InvalidOperationException("Not initialized."); } } internal static void Initialize(Activity activity) { if (_current == null) _current = new AndroidCompatibility(activity); } private AndroidCompatibility(Activity activity) { FlipLandscape = Kindles.Contains(Build.Model); NaturalOrientation = GetDeviceNaturalOrientation(activity); } private Orientation GetDeviceNaturalOrientation(Activity activity) { // check if MainActivity setup is correct. Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation; if (screenOrientation != Android.Content.PM.ScreenOrientation.Landscape) throw new InvalidOperationException("NaturalOrientation detection failed. Set ScreenOrientation in MainActivity to Landscape."); Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Landscape; default: return Orientation.Portrait; } } break; case Orientation.Landscape: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Landscape; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; default: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; } } /// /// Get the absolute orientation of the device, accounting for platform differences. /// /// [CLSCompliant(false)] public DisplayOrientation GetAbsoluteOrientation(Activity activity) { Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.Portrait; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.Portrait; } } break; case Orientation.Landscape: default: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; } } break; } } internal DisplayOrientation GetAbsoluteOrientation(int degrees) { // Orientation is reported by the device in degrees compared to the natural orientation // Some tablets have a natural landscape orientation, which we need to account for if (NaturalOrientation == Orientation.Landscape) degrees += 270; // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. degrees = ( ((degrees + 22) / 45) * 45) % 360; // Surprisingly 90 degree is landscape right, except on Kindle devices switch (degrees) { case 0: return DisplayOrientation.Portrait; case 180: return DisplayOrientation.PortraitDown; case 90: if (FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case 270: if (FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; default: return DisplayOrientation.Unknown; } } } } ================================================ FILE: Platforms/Game/.CardboardLegacy/AndroidGameActivity.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform; using Android.App; using Android.Content; using Android.OS; using Android.Views; using VRCardboard = Com.Google.Vrtoolkit.Cardboard; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidGameActivity : VRCardboard.CardboardActivity { public bool AutoPauseAndResumeMediaPlayer = true; internal event EventHandler WindowFocused; internal event EventHandler WindowUnfocused; public event EventHandler Paused; public event EventHandler Resumed; internal event EventHandler Destroyed; /// /// OnCreate called when the activity is launched from cold or after the app /// has been killed due to a higher priority app needing the memory /// /// /// Saved instance state. /// protected override void OnCreate(Bundle savedInstanceState) { // Detection of NaturalOrientation. This must happend as soon as possible at start up. AndroidCompatibility.Initialize(this); if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.P) { // Enable drawing over the camera cutoff. Cardboard renderer requires the entire screen. // fixes: [CardboardView] Surface size 2340x1036 does not match the expected screen size 2340x1080. Rendering is disabled. Window.Attributes.LayoutInDisplayCutoutMode |= Android.Views.LayoutInDisplayCutoutMode.ShortEdges; } RequestWindowFeature(WindowFeatures.NoTitle); base.OnCreate(savedInstanceState); AndroidGameWindow.Activity = this; } private bool _isActivityActive = false; internal bool IsActivityActive { get { return _isActivityActive; } } public override void OnConfigurationChanged(Android.Content.Res.Configuration newConfig) { base.OnConfigurationChanged(newConfig); } protected override void OnPause() { base.OnPause(); _isActivityActive = false; var handler = Paused; if (handler != null) handler(this, EventArgs.Empty); } protected override void OnResume() { base.OnResume(); _isActivityActive = true; var handler = Resumed; if (handler != null) handler(this, EventArgs.Empty); } public override void OnWindowFocusChanged(bool hasFocus) { base.OnWindowFocusChanged(hasFocus); var handler = (hasFocus) ? WindowFocused : WindowUnfocused; if (handler != null) handler(this, EventArgs.Empty); } protected override void OnDestroy() { var handler = Destroyed; if (handler != null) handler(this, EventArgs.Empty); base.OnDestroy(); } } [CLSCompliant(false)] public static class ActivityExtensions { public static ActivityAttribute GetActivityAttribute(this AndroidGameActivity obj) { var attr = obj.GetType().GetCustomAttributes(typeof(ActivityAttribute), true); if (attr != null) { return ((ActivityAttribute)attr[0]); } return null; } } } ================================================ FILE: Platforms/Game/.CardboardLegacy/AndroidGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Input.Touch; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Framework.Graphics; using VRCardboard = Com.Google.Vrtoolkit.Cardboard; using Android.Content; using Android.Content.PM; using Android.OS; using Android.Views; using Android.Util; using Android.Runtime; using Javax.Microedition.Khronos.Egl; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidGameWindow : GameWindow, IDisposable { // What is the state of the app. internal enum AppState { Paused, Resumed, Exited, } private static Dictionary _instances = new Dictionary(); internal static AndroidGameWindow FromHandle(IntPtr windowHandle) { return _instances[windowHandle]; } internal static AndroidGameActivity Activity { get; set; } internal AndroidSurfaceView GameView { get; private set; } internal AndroidGameActivity _activity; internal readonly Game _game; private bool _isActivated = false; private AndroidGameWindow.AppState _appState = AndroidGameWindow.AppState.Exited; MediaState _mediaPlayer_PrevState = MediaState.Stopped; private Rectangle _clientBounds; private DisplayOrientation _currentOrientation; private OrientationListener _orientationListener; internal ScreenReceiver _screenReceiver; private TouchEventListener _touchEventListener; public override IntPtr Handle { get { return GameView.Handle; } } public AndroidGameWindow(AndroidGameActivity activity, Game game) { _activity = activity; _game = game; _activity.Paused += Activity_Paused; _activity.Resumed += Activity_Resumed; _activity.Destroyed += Activity_Destroyed; _activity.WindowFocused += Activity_WindowFocused; _activity.WindowUnfocused += Activity_WindowUnfocused; Point size; // GetRealSize() was defined in JellyBeanMr1 / API 17 / Android 4.2 if (Build.VERSION.SdkInt < BuildVersionCodes.JellyBeanMr1) { size.X = activity.Resources.DisplayMetrics.WidthPixels; size.Y = activity.Resources.DisplayMetrics.HeightPixels; } else { Android.Graphics.Point p = new Android.Graphics.Point(); activity.WindowManager.DefaultDisplay.GetRealSize(p); size.X = p.X; size.Y = p.Y; } _clientBounds = new Rectangle(0, 0, size.X, size.Y); // init _currentOrientation DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity); // Android 2.3 and above support reverse orientations int sdkVer = (int)Android.OS.Build.VERSION.SdkInt; if (sdkVer < 10) { if (currentOrientation == DisplayOrientation.LandscapeRight) currentOrientation = DisplayOrientation.LandscapeLeft; if (currentOrientation == DisplayOrientation.PortraitDown) currentOrientation = DisplayOrientation.PortraitDown; } _currentOrientation = currentOrientation; _activity.RequestedOrientation = XnaOrientationToAndroid(currentOrientation); GameView = new AndroidSurfaceView(activity, this); GameView.LayoutChange += GameView_LayoutChange; GameView.RequestFocus(); GameView.FocusableInTouchMode = true; _instances.Add(this.Handle, this); _orientationListener = new OrientationListener(this, _activity); IntentFilter filter = new IntentFilter(); filter.AddAction(Intent.ActionScreenOff); filter.AddAction(Intent.ActionScreenOn); filter.AddAction(Intent.ActionUserPresent); filter.AddAction(Android.Telephony.TelephonyManager.ActionPhoneStateChanged); _screenReceiver = new ScreenReceiver(_activity); _activity.RegisterReceiver(_screenReceiver, filter); _screenReceiver.Unlocked += ScreenReceiver_Unlocked; _screenReceiver.Locked += ScreenReceiver_Locked; _touchEventListener = new TouchEventListener(); _touchEventListener.SetTouchListener(this); if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = this.Handle; if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = this.Handle; } private void ScreenReceiver_Unlocked(object sender, EventArgs e) { MediaPlayer.IsMuted = false; _appState = AndroidGameWindow.AppState.Resumed; try { if (!this.GameView.IsFocused) this.GameView.RequestFocus(); } catch (Exception ex) { Log.Verbose("RequestFocus()", ex.ToString()); } } private void ScreenReceiver_Locked(object sender, EventArgs e) { MediaPlayer.IsMuted = true; } void Activity_Resumed(object sender, EventArgs e) { if (!_isActivated) { _isActivated = true; OnActivated(); } _appState = AndroidGameWindow.AppState.Resumed; try { if (!GameView.IsFocused) GameView.RequestFocus(); } catch (Exception ex) { Log.Verbose("RequestFocus()", ex.ToString()); } Microsoft.Xna.Platform.Audio.AudioService.Resume(); if (_mediaPlayer_PrevState == MediaState.Playing && _activity.AutoPauseAndResumeMediaPlayer) MediaPlayer.Resume(); if (!this.GameView.IsFocused) this.GameView.RequestFocus(); if (_game != null) { IGraphicsDeviceManager deviceManager = (IGraphicsDeviceManager)_game.Services.GetService(typeof(IGraphicsDeviceManager)); if (deviceManager != null) { // TODO: Set fullscreen in ApplyChanges() GraphicsDeviceManager gdm = (GraphicsDeviceManager)deviceManager; this.ForceSetFullScreen(gdm.IsFullScreen); } } if (_game != null) { if (_orientationListener.CanDetectOrientation()) _orientationListener.Enable(); } } void Activity_Paused(object sender, EventArgs e) { if (_isActivated) { _isActivated = false; OnDeactivated(); } _mediaPlayer_PrevState = MediaPlayer.State; _appState = AndroidGameWindow.AppState.Paused; this.GameView.ClearFocus(); Microsoft.Xna.Platform.Audio.AudioService.Suspend(); if (_activity.AutoPauseAndResumeMediaPlayer) MediaPlayer.Pause(); if (_orientationListener.CanDetectOrientation()) _orientationListener.Disable(); } void Activity_Destroyed(object sender, EventArgs e) { _screenReceiver.Unlocked -= ScreenReceiver_Unlocked; _screenReceiver.Locked -= ScreenReceiver_Locked; _activity.UnregisterReceiver(_screenReceiver); _screenReceiver.IsScreenLocked = false; _orientationListener = null; if (_game != null) { _game.Dispose(); } } private void Activity_WindowFocused(object sender, EventArgs e) { if (!_isActivated) { _isActivated = true; OnActivated(); } } private void Activity_WindowUnfocused(object sender, EventArgs e) { if (_isActivated) { _isActivated = false; OnDeactivated(); } } internal void ForceSetFullScreen(bool _isFullScreen) { if (_isFullScreen) { _activity.Window.ClearFlags(WindowManagerFlags.ForceNotFullscreen); _activity.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen); } else { _activity.Window.SetFlags(WindowManagerFlags.ForceNotFullscreen, WindowManagerFlags.ForceNotFullscreen); } } /// /// Updates the screen orientation. Filters out requests for unsupported orientations. /// internal void SetOrientation(DisplayOrientation newOrientation, DisplayOrientation supported) { // If the new orientation is not supported, force a supported orientation if ((newOrientation & supported) == 0) { if ((supported & DisplayOrientation.LandscapeLeft) != 0) newOrientation = DisplayOrientation.LandscapeLeft; else if ((supported & DisplayOrientation.LandscapeRight) != 0) newOrientation = DisplayOrientation.LandscapeRight; else if ((supported & DisplayOrientation.Portrait) != 0) newOrientation = DisplayOrientation.Portrait; else if ((supported & DisplayOrientation.PortraitDown) != 0) newOrientation = DisplayOrientation.PortraitDown; } if (newOrientation != _currentOrientation) { // Android 2.3 and above support reverse orientations int sdkVer = (int)Android.OS.Build.VERSION.SdkInt; if (sdkVer < 10) { if (newOrientation == DisplayOrientation.LandscapeRight) newOrientation = DisplayOrientation.LandscapeLeft; if (newOrientation == DisplayOrientation.PortraitDown) newOrientation = DisplayOrientation.PortraitDown; } if ((newOrientation & supported) != 0) { _currentOrientation = newOrientation; _activity.RequestedOrientation = XnaOrientationToAndroid(newOrientation); OnOrientationChanged(); } } } public override string ScreenDeviceName { get { throw new NotImplementedException(); } } public override Rectangle ClientBounds { get { return _clientBounds; } } private void GameView_LayoutChange(object sender, View.LayoutChangeEventArgs e) { Rectangle bounds = new Rectangle( GameView.Left, GameView.Top, GameView.Width, GameView.Height); if (bounds != _clientBounds) { _clientBounds = bounds; OnClientSizeChanged(); Android.Util.Log.Debug("Kni", "GameWindow.ChangeClientBounds: newClientBounds=" + this.ClientBounds.Width + "," + this.ClientBounds.Height); // Set the new display size on the touch panel. TouchPanel.DisplayWidth = this.ClientBounds.Width; TouchPanel.DisplayHeight = this.ClientBounds.Height; } } public override bool AllowUserResizing { get { return false; } set { /* Ignore */ } } // A copy of ScreenOrientation from Android 2.3 // This allows us to continue to support 2.2 whilst // utilising the 2.3 improved orientation support. enum ScreenOrientationAll { Unspecified = -1, Landscape = 0, Portrait = 1, User = 2, Behind = 3, Sensor = 4, Nosensor = 5, SensorLandscape = 6, SensorPortrait = 7, ReverseLandscape = 8, ReversePortrait = 9, FullSensor = 10, } public override DisplayOrientation CurrentOrientation { get { return _currentOrientation; } } private static ScreenOrientation XnaOrientationToAndroid(DisplayOrientation value) { switch (value) { case DisplayOrientation.LandscapeLeft: return (ScreenOrientation)ScreenOrientationAll.Landscape; case DisplayOrientation.LandscapeRight: return (ScreenOrientation)ScreenOrientationAll.ReverseLandscape; case DisplayOrientation.Portrait: return (ScreenOrientation)ScreenOrientationAll.Portrait; case DisplayOrientation.PortraitDown: return (ScreenOrientation)ScreenOrientationAll.ReversePortrait; default: return ScreenOrientation.Unspecified; } } public void Dispose() { if (_activity != null) { _activity.Paused -= Activity_Paused; _activity.Resumed -= Activity_Resumed; _activity.Destroyed -= Activity_Destroyed; _activity.WindowFocused -= Activity_WindowFocused; _activity.WindowUnfocused -= Activity_WindowUnfocused; _activity = null; } _appState = AndroidGameWindow.AppState.Exited; if (GameView != null) { if (Mouse.WindowHandle == this.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == this.Handle) TouchPanel.WindowHandle = IntPtr.Zero; GameView.LayoutChange -= GameView_LayoutChange; GameView.Dispose(); GameView = null; } _instances.Remove(this.Handle); } protected override void SetTitle(string title) { } internal void StartGameLoop() { // Cardboard: _isStarted = true; return; } private void RunFrame() { try { RunStep(); // tick } catch (Exception ex) { /* ignore */ } } private void RunStep() { switch (_appState) { case AndroidGameWindow.AppState.Resumed: if (GameView._isAndroidSurfaceAvailable) // do not run game if surface is not available { _orientationListener.Update(); if (!_screenReceiver.IsScreenLocked) // do not run game if Screen is Locked { if (_game != null) { ((IPlatformGame)_game).GetStrategy().OnFrameTick(); } } } break; case AndroidGameWindow.AppState.Paused: break; case AndroidGameWindow.AppState.Exited: break; default: throw new InvalidOperationException("currentState"); } return; } private EGLConfig _eglConfig; internal EGLConfig EglConfig { get { return _eglConfig; } } Microsoft.Xna.Framework.XR.CardboardHeadsetState _hsState; private void UpdateLocalHeadsetState(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2) { Viewport2XNA(eyeParams1.Viewport, ref _hsState.LeftEye.Viewport); Matrix2XNA(eyeParams1.Transform.GetEyeView(), ref _hsState.LeftEye.View); Matrix2XNA(eyeParams1.Transform.GetPerspective(), ref _hsState.LeftEye.Projection); if (eyeParams2 == null) { _hsState.RightEye.Viewport = new Viewport(); _hsState.RightEye.View = Microsoft.Xna.Framework.Matrix.Identity; _hsState.RightEye.Projection = Microsoft.Xna.Framework.Matrix.Identity; } else { Viewport2XNA(eyeParams2.Viewport, ref _hsState.RightEye.Viewport); Matrix2XNA(eyeParams2.Transform.GetEyeView(), ref _hsState.RightEye.View); Matrix2XNA(eyeParams2.Transform.GetPerspective(), ref _hsState.RightEye.Projection); } } private void Viewport2XNA(VRCardboard.Viewport viewport, ref Viewport result) { result.X = viewport.X; result.Y = viewport.Y; result.Width = viewport.Width; result.Height = viewport.Height; result.MinDepth = 0f; result.MaxDepth = 1f; } private void Matrix2XNA(float[] matrix, ref Matrix result) { result.M11 = matrix[0]; result.M12 = matrix[1]; result.M13 = matrix[2]; result.M14 = matrix[3]; result.M21 = matrix[4]; result.M22 = matrix[5]; result.M23 = matrix[6]; result.M24 = matrix[7]; result.M31 = matrix[8]; result.M32 = matrix[9]; result.M33 = matrix[10]; result.M34 = matrix[11]; result.M41 = matrix[12]; result.M42 = matrix[13]; result.M43 = matrix[14]; result.M44 = matrix[15]; } internal void UpdateHeadsetState(out Microsoft.Xna.Framework.XR.CardboardHeadsetState state) { state = _hsState; } #region CardboardView.IRenderer volatile bool _isStarted = false; private int _glFramebuffer; // the current frame buffer private int[] _parameterFramebufferBinding = new int[3]; private void GLGetRenderBufferSize(out int w, out int h) { var device = _game.GraphicsDevice; GraphicsContext graphicsContext = ((IPlatformGraphicsDevice)device).Strategy.CurrentContext; var GL = ((IPlatformGraphicsContext)graphicsContext).Strategy.ToConcrete().GL; int[] renderbufferParameters = new int[2]; GL.BindFramebuffer(FramebufferTarget.Framebuffer, _glFramebuffer); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _glFramebuffer); GL.CheckGLError(); Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferWidth, renderbufferParameters, 0 ); Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferHeight, renderbufferParameters, 1 ); w = renderbufferParameters[0]; h = renderbufferParameters[1]; renderbufferParameters = new int[10]; Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferInternalFormat, renderbufferParameters, 0 ); int internalFormat = renderbufferParameters[0]; renderbufferParameters = new int[10]; Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferRedSize, renderbufferParameters, 0 ); int redSize = renderbufferParameters[0]; renderbufferParameters = new int[10]; Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferDepthSize, renderbufferParameters, 0 ); int depthSize = renderbufferParameters[0]; renderbufferParameters = new int[10]; Android.Opengl.GLES20.GlGetRenderbufferParameteriv( (int)RenderbufferTarget.Renderbuffer, Android.Opengl.GLES20.GlRenderbufferStencilSize, renderbufferParameters, 0 ); int stencilSize = renderbufferParameters[0]; } internal void VrRendererOnDrawFrame(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2) { if (!_isStarted) return; this.UpdateLocalHeadsetState(headTransform, eyeParams1, eyeParams2); // If distortion correction is enabled the GL context will be set to draw into a framebuffer backed // by a texture at the time of this call. If an implementor needs to change the current framebuffer, // it must be reset back afterwards to the one obtained viaglGetIntegerv(GL_FRAMEBUFFER_BINDING, ...) // at the beginning of this call. Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 0); _glFramebuffer = _parameterFramebufferBinding[0]; if (_game.GraphicsDevice != null) { ((IPlatformGraphicsDevice)_game.GraphicsDevice).Strategy.ToConcrete()._glDefaultFramebuffer = _glFramebuffer; // GL Context is modified by cardboard. We have to reset your cached state. GraphicsContext mainContext = ((IPlatformGraphicsDevice)_game.GraphicsDevice).Strategy.MainContext; ((IPlatformGraphicsContext)mainContext).Strategy.ToConcrete().Cardboard_ResetContext(); } if (_game.GraphicsDevice != null) { //int w, h; //GLGetRenderBufferSize(out w, out h); //_game.GraphicsDevice.Viewport = new Viewport(0,0,w,h); } this.RunFrame(); Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 1); System.Diagnostics.Debug.Assert(_glFramebuffer == _parameterFramebufferBinding[1], "framebuffer must be restored back to the one set at the beggining of CardboardView.IRenderer.OnDrawFrame()"); } internal void VrRendererOnFinishFrame(VRCardboard.Viewport viewport) { Android.Opengl.GLES20.GlGetIntegerv(Android.Opengl.GLES20.GlFramebufferBinding, _parameterFramebufferBinding, 2); _glFramebuffer = _parameterFramebufferBinding[2]; } internal void VrRendererOnRendererShutdown() { } internal void VrRendererOnSurfaceChanged(int width, int height) { } internal void VrRendererOnSurfaceCreated(EGLConfig config) { _eglConfig = config; #if DEBUG IEGL10 egl10 = Javax.Microedition.Khronos.Egl.EGLContext.EGL.JavaCast(); _eglDisplay = egl10.EglGetDisplay(EGL10.EglDefaultDisplay); _eglSurface = egl10.EglGetCurrentSurface(EGL10.EglDraw); _eglContext = egl10.EglGetCurrentContext(); if (_eglDisplay == EGL10.EglNoDisplay) _eglDisplay = null; if (_eglSurface == EGL10.EglNoSurface) _eglSurface = null; if (_eglContext == EGL10.EglNoContext) _eglContext = null; #endif } #if DEBUG private EGLDisplay _eglDisplay; private EGLSurface _eglSurface; private EGLContext _eglContext; #endif #endregion CardboardView.IRenderer } } ================================================ FILE: Platforms/Game/.CardboardLegacy/AndroidSurfaceView.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Input; using Android.Content; using Android.Media; using Android.Util; using Android.Views; using Javax.Microedition.Khronos.Egl; using VRCardboard = Com.Google.Vrtoolkit.Cardboard; namespace Microsoft.Xna.Framework { [CLSCompliant(false)] public class AndroidSurfaceView : VRCardboard.CardboardView , ISurfaceView , VRCardboard.CardboardView.IRenderer { internal bool _isAndroidSurfaceAvailable = false; private readonly AndroidGameWindow _gameWindow; public AndroidSurfaceView(Context context, AndroidGameWindow gameWindow) : base(context) { _gameWindow = gameWindow; // Holder.SetType is deprecated. The SurfaceType value is ignored. if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Honeycomb) Holder.SetType(SurfaceType.Gpu); this.Holder.SetFormat(Android.Graphics.Format.Rgba8888); ((VRCardboard.CardboardActivity)context).CardboardView = this; ((Android.App.Activity)context).SetContentView(this); this.SetRenderer(this); //gameView.DistortionCorrectionEnabled = false; //gameView.SetVRModeEnabled(false); } public override void SurfaceCreated(ISurfaceHolder holder) { Log.Debug("AndroidSurfaceView", "SurfaceCreated"); _isAndroidSurfaceAvailable = true; var handler = _surfaceCreatedEvent; if (handler != null) handler(this, EventArgs.Empty); base.SurfaceCreated(holder); } public override void SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height) { Log.Debug("AndroidSurfaceView", "SurfaceChanged: width=" + width + ", height=" + height + ", format=" + format.ToString()); var handler = _surfaceChangedEvent; if (handler != null) handler(this, EventArgs.Empty); base.SurfaceChanged(holder, format, width, height); } public override void SurfaceDestroyed(ISurfaceHolder holder) { Log.Debug("AndroidSurfaceView", "SurfaceDestroyed"); _isAndroidSurfaceAvailable = false; var handler = _surfaceDestroyedEvent; if (handler != null) handler(this, EventArgs.Empty); base.SurfaceDestroyed(holder); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } #region Key and Motion public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { bool handled = false; if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnKeyDown(keyCode, e)) return true; handled = ((IPlatformKeyboard)Keyboard.Current).GetStrategy().KeyDown(keyCode); // we need to handle the Back key here because it doesn't work any other way if (keyCode == Keycode.Back) { ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = true; handled = true; } if (keyCode == Keycode.VolumeUp) { AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService); audioManager.AdjustStreamVolume(Stream.Music, Adjust.Raise, VolumeNotificationFlags.ShowUi); return true; } if (keyCode == Keycode.VolumeDown) { AudioManager audioManager = (AudioManager)Context.GetSystemService(Context.AudioService); audioManager.AdjustStreamVolume(Stream.Music, Adjust.Lower, VolumeNotificationFlags.ShowUi); return true; } return handled; } public override bool OnKeyUp(Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back) ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = false; if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnKeyUp(keyCode, e)) return true; return ((IPlatformKeyboard)Keyboard.Current).GetStrategy().KeyUp(keyCode); } public override bool OnGenericMotionEvent(MotionEvent e) { if (((IPlatformGamePad)GamePad.Current).GetStrategy().OnGenericMotionEvent(e)) return true; if ((e.Source & InputSourceType.Mouse) == InputSourceType.Mouse) { if (((IPlatformMouse)Mouse.Current).GetStrategy().OnGenericMotionEvent(e)) return true; } return base.OnGenericMotionEvent(e); } #endregion #region ISurfaceView private event EventHandler _surfaceCreatedEvent; private event EventHandler _surfaceChangedEvent; private event EventHandler _surfaceDestroyedEvent; event EventHandler ISurfaceView.SurfaceCreated { add { _surfaceCreatedEvent += value; } remove { _surfaceCreatedEvent -= value; } } event EventHandler ISurfaceView.SurfaceChanged { add { _surfaceChangedEvent += value; } remove { _surfaceChangedEvent -= value; } } event EventHandler ISurfaceView.SurfaceDestroyed { add { _surfaceDestroyedEvent += value; } remove { _surfaceDestroyedEvent -= value; } } #endregion #region CardboardView.IRenderer void IRenderer.OnDrawFrame(VRCardboard.HeadTransform headTransform, VRCardboard.EyeParams eyeParams1, VRCardboard.EyeParams eyeParams2) { _gameWindow.VrRendererOnDrawFrame(headTransform, eyeParams1, eyeParams2); } void IRenderer.OnFinishFrame(VRCardboard.Viewport viewport) { _gameWindow.VrRendererOnFinishFrame(viewport); } void IRenderer.OnRendererShutdown() { _gameWindow.VrRendererOnRendererShutdown(); } void IRenderer.OnSurfaceChanged(int width, int height) { _gameWindow.VrRendererOnSurfaceChanged(width, height); } void IRenderer.OnSurfaceCreated(EGLConfig config) { _gameWindow.VrRendererOnSurfaceCreated(config); } #endregion CardboardView.IRenderer } } ================================================ FILE: Platforms/Game/.CardboardLegacy/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Media; using Android.Views; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { private static ConcreteGame _concreteGameInstance = null; internal static ConcreteGame GameConcreteInstance { get { return ConcreteGame._concreteGameInstance; } } private AndroidGameWindow _gameWindow; public ConcreteGame(Game game) : base(game) { ConcreteGame._concreteGameInstance = this; System.Diagnostics.Debug.Assert(AndroidGameWindow.Activity != null, "Must set Game.Activity before creating the Game instance"); this.Services.AddService(typeof(Android.App.Activity), AndroidGameWindow.Activity); _gameWindow = new AndroidGameWindow(AndroidGameWindow.Activity, game); base.Window = _gameWindow; base.SetWindowListeners(); Services.AddService(typeof(View), _gameWindow.GameView); ConcreteMediaLibraryStrategy.Context = AndroidGameWindow.Activity; } protected override void Dispose(bool disposing) { if (disposing) { } AndroidGameWindow.Activity = null; base.Dispose(disposing); } public override void Exit() { throw new PlatformNotSupportedException("Android platform does not allow programmatically closing."); } public override void TickExiting() { // Android games do not "exit" or shut down. throw new PlatformNotSupportedException(); } protected override void Run() { StartGameLoop(); // Prevent the default run loop from starting. // We will run the loop from the GameView's IRunnable.Run(). return; // StartRunLoop //_gameWindow.GameView.Resume(); //this.CallEndRun(); //this.DoExiting(); } private void StartGameLoop() { _gameWindow.StartGameLoop(); } private void OnFrameTickBegin() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); } bool _isReadyToRun = false; internal void OnFrameTick() { if (_isReadyToRun == false) { OnFrameTickBegin(); _isReadyToRun = true; } if (AndroidGameWindow.Activity.IsActivityActive) { this.Game.Tick(); } } } } ================================================ FILE: Platforms/Game/.CardboardLegacy/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.CardboardLegacy/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; using Android.Views; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; // Preferred buffer width/height is used to determine default supported orientations, // so set the default values to match Xna behaviour of landscape only by default. // Note also that it's using the device window dimensions. base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height); base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width); this.Game.Window.OrientationChanged += GameWindow_OrientationChanged; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { if (base.GraphicsDevice != null) return base.GraphicsDevice.PresentationParameters.IsFullScreen; return base.IsFullScreen; } set { base.IsFullScreen = value; if (base.GraphicsDevice != null) base.GraphicsDevice.PresentationParameters.IsFullScreen = value; if (base.GraphicsDevice != null) { // TODO: Set fullscreen in ApplyChanges() IntPtr windowHandle = base.GraphicsDevice.PresentationParameters.DeviceWindowHandle; AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle); gameWindow.ForceSetFullScreen(base.IsFullScreen); } } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { this.IsFullScreen = !this.IsFullScreen; //ApplyChanges(); } public override void CreateDevice() { PresentationParameters pp = new PresentationParameters(); pp.MultiSampleCount = (this.PreferMultiSampling) ? 4 : 1; pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferWidth = 800; pp.BackBufferHeight = 480; // force "full screen" as default on Android pp.IsFullScreen = true; pp.DeviceWindowHandle = this.Game.Window.Handle; GraphicsDeviceInformation gdi = new GraphicsDeviceInformation(); gdi.GraphicsProfile = this.GraphicsProfile; gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.PresentationParameters = pp; var pe = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(pe); pp = gdi.PresentationParameters; this.GraphicsProfile = gdi.GraphicsProfile; AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; pp.DisplayOrientation = base.Game.Window.CurrentOrientation; pp.BackBufferWidth = surfaceView.Width; pp.BackBufferHeight = surfaceView.Height; this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp); // ApplyChanges { TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight; } // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event... // we need to get those working. TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; this.OnDeviceCreated(EventArgs.Empty); Android.App.Activity activity = AndroidGameWindow.Activity; DisplayOrientation currentOrientation = AndroidCompatibility.Current.GetAbsoluteOrientation(activity); DisplayOrientation supported2 = this.SupportedOrientations; if (supported2 == DisplayOrientation.Default) { if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight) supported2 = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported2 = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } androidGameWindow.SetOrientation(currentOrientation, supported2); } private void GameWindow_OrientationChanged(object sender, EventArgs e) { if (GraphicsDevice != null) { AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation; base.GraphicsDevice.PresentationParameters.BackBufferWidth = surfaceView.Width; base.GraphicsDevice.PresentationParameters.BackBufferHeight = surfaceView.Height; if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound) { PresentationParameters pp = this.GraphicsDevice.PresentationParameters; base.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight); base.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, pp.BackBufferWidth, pp.BackBufferHeight); } TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = base.GraphicsDevice.PresentationParameters.DisplayOrientation; } } public override void ApplyChanges() { if (base.GraphicsDevice == null) { // TODO: Calling ApplyChanges() before Game.Initialize() should create the device. System.Diagnostics.Debug.Assert(false); //this.CreateDevice(); return; } AndroidGameWindow androidGameWindow = (AndroidGameWindow)base.Game.Window; View surfaceView = androidGameWindow.GameView; // Trigger a change in orientation in case the supported orientations have changed DisplayOrientation supported = this.SupportedOrientations; if (supported == DisplayOrientation.Default) { if (this.PreferredBackBufferWidth <= this.PreferredBackBufferHeight) supported = (DisplayOrientation.Portrait | DisplayOrientation.PortraitDown); else supported = (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight); } androidGameWindow.SetOrientation(base.Game.Window.CurrentOrientation, supported); } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { #if CARDBOARD return; // On Cardboard, surface is presented by IRenderer.OnFinishFrame(...). #endif //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { if (base.Game != null && base.Game.Window != null) { base.Game.Window.OrientationChanged -= GameWindow_OrientationChanged; } } } } } ================================================ FILE: Platforms/Game/.Oculus/AndroidCompatibility.cs ================================================ using System; using System.Linq; using Android.App; using Android.Content.Res; using Android.OS; using Android.Views; namespace Microsoft.Xna.Framework { /// /// Properties that change from how XNA works by default /// public class AndroidCompatibility { private static AndroidCompatibility _current; /// /// Because the Kindle Fire devices default orientation is fliped by 180 degrees from all the other android devices /// on the market we need to do some special processing to make sure that LandscapeLeft is the correct way round. /// This list contains all the Build.Model strings of the effected devices, it should be added to if and when /// more devices exhibit the same issues. /// private readonly string[] Kindles = new[] { "KFTT", "KFJWI", "KFJWA", "KFSOWI", "KFTHWA", "KFTHWI", "KFAPWA", "KFAPWI" }; public bool FlipLandscape { get; private set; } [CLSCompliant(false)] public Orientation NaturalOrientation { get; private set; } [CLSCompliant(false)] public static AndroidCompatibility Current { get { if (_current != null) return _current; else throw new InvalidOperationException("Not initialized."); } } internal static void Initialize(Activity activity) { if (_current == null) _current = new AndroidCompatibility(activity); } private AndroidCompatibility(Activity activity) { FlipLandscape = Kindles.Contains(Build.Model); NaturalOrientation = GetDeviceNaturalOrientation(activity); } private Orientation GetDeviceNaturalOrientation(Activity activity) { // check if MainActivity setup is correct. Android.Content.PM.ScreenOrientation screenOrientation = activity.RequestedOrientation; if (screenOrientation != Android.Content.PM.ScreenOrientation.Landscape) throw new InvalidOperationException("Invalid orientation. Set ScreenOrientation in MainActivity to Landscape."); Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Landscape; default: return Orientation.Portrait; } } break; case Orientation.Landscape: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Landscape; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; default: { switch (rotation) { case SurfaceOrientation.Rotation0: case SurfaceOrientation.Rotation180: return Orientation.Portrait; case SurfaceOrientation.Rotation90: case SurfaceOrientation.Rotation270: return Orientation.Portrait; default: return Orientation.Portrait; } } break; } } /// /// Get the absolute orientation of the device, accounting for platform differences. /// /// [CLSCompliant(false)] public DisplayOrientation GetAbsoluteOrientation(Activity activity) { Orientation orientation = activity.Resources.Configuration.Orientation; SurfaceOrientation rotation = activity.WindowManager.DefaultDisplay.Rotation; switch (orientation) { case Orientation.Portrait: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.Portrait; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.PortraitDown; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); return DisplayOrientation.Portrait; } } break; case Orientation.Landscape: default: { switch (rotation) { case SurfaceOrientation.Rotation0: default: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation180: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation == Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case SurfaceOrientation.Rotation90: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; case SurfaceOrientation.Rotation270: System.Diagnostics.Debug.Assert(AndroidCompatibility.Current.NaturalOrientation != Orientation.Landscape); if (AndroidCompatibility.Current.FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; } } break; } } internal DisplayOrientation GetAbsoluteOrientation(int degrees) { // Orientation is reported by the device in degrees compared to the natural orientation // Some tablets have a natural landscape orientation, which we need to account for if (NaturalOrientation == Orientation.Landscape) degrees += 270; // Round orientation into one of 8 positions, either 0, 45, 90, 135, 180, 225, 270, 315. degrees = ( ((degrees + 22) / 45) * 45) % 360; // Surprisingly 90 degree is landscape right, except on Kindle devices switch (degrees) { case 0: return DisplayOrientation.Portrait; case 180: return DisplayOrientation.PortraitDown; case 90: if (FlipLandscape) return DisplayOrientation.LandscapeLeft; return DisplayOrientation.LandscapeRight; case 270: if (FlipLandscape) return DisplayOrientation.LandscapeRight; return DisplayOrientation.LandscapeLeft; default: return DisplayOrientation.Unknown; } } } } ================================================ FILE: Platforms/Game/.Ref/ConcreteGame.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { public ConcreteGame(Game game) : base(game) { } protected override void RunGameLoop() { throw new PlatformNotSupportedException(); } public override void TickExiting() { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Game/.Ref/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.Ref/ConcreteGraphicsDeviceManager.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { throw new PlatformNotSupportedException(); } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { return base.IsFullScreen; } set { base.IsFullScreen = value; } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { base.ToggleFullScreen(); } public override void ApplyChanges() { throw new PlatformNotSupportedException(); } #region IGraphicsDeviceManager strategy public override void CreateDevice() { throw new PlatformNotSupportedException(); } public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { base.EndDraw(); } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.SDL2/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { private SdlGameWindow _gameWindow; private Sdl SDL { get { return Sdl.Current; } } protected override void RunGameLoop() { SDL.WINDOW.Show(Window.Handle); while (true) { bool isExiting = _gameWindow.SdlRunLoop(); _isExiting |= isExiting; if (!_isExiting) Game.Tick(); else break; } } private bool _isExiting; public ConcreteGame(Game game) : base(game) { var minVersion = new Sdl.Version(2,0,5); if (SDL.version < minVersion) Debug.WriteLine("Please use SDL " + minVersion + " or higher."); // Needed so VS can debug the project on Windows if (SDL.version >= minVersion && CurrentPlatform.OS == OS.Windows && Debugger.IsAttached) SDL.SetHint("SDL_WINDOWS_DISABLE_THREAD_NAMING", "1"); SDL.Init(Sdl.InitFlags.Video ); SDL.DisableScreenSaver(); _gameWindow = new SdlGameWindow(Game); base.Window = _gameWindow; base.SetWindowListeners(); } public override bool IsMouseVisible { get { return base.IsMouseVisible; } set { if (base.IsMouseVisible != value) { base.IsMouseVisible = value; _gameWindow.SetCursorVisible(Game.IsMouseVisible); } } } public override void TickExiting() { _isExiting = true; } protected override void Dispose(bool disposing) { if (_gameWindow != null) { _gameWindow.Dispose(); _gameWindow = null; SDL.Quit(); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Game/.SDL2/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.SDL2/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; using ColorFormat = Microsoft.Xna.Platform.Graphics.OpenGL.ColorFormat; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { private Sdl SDL { get { return Sdl.Current; } } public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; base.PreferredBackBufferWidth = clientBounds.Width; base.PreferredBackBufferHeight = clientBounds.Height; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { return base.IsFullScreen; } set { base.IsFullScreen = value; } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { base.IsFullScreen = !base.IsFullScreen; ApplyChanges(); } public override void ApplyChanges() { if (this.GraphicsDevice == null) { this.CreateDevice(); } // populates a gdi with settings in this gdm and allows users to override them with // PrepareDeviceSettings event this information should be applied to the GraphicsDevice var gdi = this.DoPreparingDeviceSettings(); if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile) { // if the GraphicsProfile changed we need to create a new GraphicsDevice this.GraphicsDevice.Dispose(); this.GraphicsDevice = null; this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); } else { GraphicsDevice.Reset(gdi.PresentationParameters); } } /// /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to /// allow users to change the settings. Then returns that GraphicsDeviceInformation. /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. /// internal GraphicsDeviceInformation DoPreparingDeviceSettings() { var gdi = new GraphicsDeviceInformation(); gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.GraphicsProfile = GraphicsProfile; PresentationParameters pp = new PresentationParameters(); pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferWidth = this.PreferredBackBufferWidth; pp.BackBufferHeight = this.PreferredBackBufferHeight; pp.IsFullScreen = this.IsFullScreen; pp.HardwareModeSwitch = this.HardwareModeSwitch; pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate; pp.DisplayOrientation = this.Game.Window.CurrentOrientation; pp.DeviceWindowHandle = this.Game.Window.Handle; int maxMultiSampleCount = 0; if (this.PreferMultiSampling) { if (GraphicsDevice != null) { maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat); } } pp.MultiSampleCount = maxMultiSampleCount; gdi.PresentationParameters = pp; var args = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(args); if (gdi.PresentationParameters == null || gdi.Adapter == null) throw new NullReferenceException("Members should not be set to null in PreparingDeviceSettingsEventArgs"); return gdi; } private void PlatformInitialize(PresentationParameters presentationParameters) { var surfaceFormat = ToGLColorFormat(this.PreferredBackBufferFormat); var depthStencilFormat = this.PreferredDepthStencilFormat; // TODO Need to get this data from the Presentation Parameters SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.RedSize, surfaceFormat.R); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.GreenSize, surfaceFormat.G); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.BlueSize, surfaceFormat.B); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.AlphaSize, surfaceFormat.A); switch (depthStencilFormat) { case DepthFormat.None: SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 0); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0); break; case DepthFormat.Depth16: SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 16); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0); break; case DepthFormat.Depth24: SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 24); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 0); break; case DepthFormat.Depth24Stencil8: SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DepthSize, 24); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.StencilSize, 8); break; } SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.DoubleBuffer, 1); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMajorVersion, 2); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMinorVersion, 1); if (presentationParameters.MultiSampleCount > 0) { SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.MultiSampleBuffers, 1); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.MultiSampleSamples, presentationParameters.MultiSampleCount); } ((SdlGameWindow)Game.Window).CreateWindow(); presentationParameters.DeviceWindowHandle = Game.Window.Handle; } /// /// Convert a to an GL ColorFormat. /// This is used for setting up the backbuffer format of the OpenGL context. /// /// A GL ColorFormat instance. /// The to convert. private static ColorFormat ToGLColorFormat(SurfaceFormat format) { switch (format) { case SurfaceFormat.Alpha8: return new ColorFormat(0, 0, 0, 8); case SurfaceFormat.Bgr565: return new ColorFormat(5, 6, 5, 0); case SurfaceFormat.Bgra4444: return new ColorFormat(4, 4, 4, 4); case SurfaceFormat.Bgra5551: return new ColorFormat(5, 5, 5, 1); case SurfaceFormat.Bgr32: return new ColorFormat(8, 8, 8, 0); case SurfaceFormat.Bgra32: case SurfaceFormat.Color: case SurfaceFormat.ColorSRgb: case SurfaceFormat.ColorSRgba: return new ColorFormat(8, 8, 8, 8); case SurfaceFormat.Rgba1010102: return new ColorFormat(10, 10, 10, 2); default: // Floating point backbuffers formats could be implemented // but they are not typically used on the backbuffer. In // those cases it is better to create a render target instead. throw new NotSupportedException(); } } public override void CreateDevice() { if (this.GraphicsDevice != null) return; var gdi = this.DoPreparingDeviceSettings(); this.PlatformInitialize(gdi.PresentationParameters); this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); PresentationParameters gdpp = this.GraphicsDevice.PresentationParameters; this.GraphicsDevice.Viewport = new Viewport(0, 0, gdpp.BackBufferWidth, gdpp.BackBufferHeight); ((SdlGameWindow)this.Game.Window).EndScreenDeviceChange(string.Empty, gdpp.BackBufferWidth, gdpp.BackBufferHeight, gdpp.IsFullScreen); } private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs) { TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; } private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args) { PresentationParameters pp = args.PresentationParameters; int displayIndex = SDL.WINDOW.GetDisplayIndex(Game.Window.Handle); string displayName = SDL.DISPLAY.GetDisplayName(displayIndex); ((SdlGameWindow)this.Game.Window).EndScreenDeviceChange(displayName, pp.BackBufferWidth, pp.BackBufferHeight, pp.IsFullScreen); } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.SDL2/SDL2.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics; using Microsoft.Xna.Platform.Utilities; internal class Sdl { private static Sdl _current; public IntPtr NativeLibrary { get; private set; } public Window WINDOW { get; private set; } public Display DISPLAY { get; private set; } public GL OpenGL { get; private set; } public Mouse MOUSE { get; private set; } public Keyboard KEYBOARD { get; private set; } public Joystick JOYSTICK { get; private set; } public GameController GAMECONTROLLER { get; private set; } public Haptic HAPTIC { get; private set; } public readonly Version version; public static Sdl Current { get { if (_current != null) return _current; if (_current == null) _current = new Sdl(); return _current; } } public Sdl() { NativeLibrary = GetNativeLibrary(); LoadEntryPoints(NativeLibrary); GetVersion(out version); WINDOW = new Window(this, NativeLibrary); DISPLAY = new Display(this, NativeLibrary); OpenGL = new GL(this, NativeLibrary); MOUSE = new Mouse(this, NativeLibrary); KEYBOARD = new Keyboard(this, NativeLibrary); JOYSTICK = new Joystick(this, NativeLibrary); GAMECONTROLLER = new GameController(this, NativeLibrary); HAPTIC = new Haptic(this, NativeLibrary); } private IntPtr GetNativeLibrary() { if (CurrentPlatform.OS == OS.Windows) return FuncLoader.LoadLibraryExt("SDL2.dll"); else if (CurrentPlatform.OS == OS.Linux) return FuncLoader.LoadLibraryExt("libSDL2-2.0.so.0"); else if (CurrentPlatform.OS == OS.MacOSX) return FuncLoader.LoadLibraryExt("libSDL2.dylib"); else return FuncLoader.LoadLibraryExt("sdl2"); } [Flags] public enum InitFlags : int { Video = 0x00000020, Joystick = 0x00000200, Haptic = 0x00001000, GameController = 0x00002000, } public enum EventType : uint { First = 0, Quit = 0x100, WindowEvent = 0x200, SysWM = 0x201, KeyDown = 0x300, KeyUp = 0x301, TextEditing = 0x302, TextInput = 0x303, MouseMotion = 0x400, MouseButtonDown = 0x401, MouseButtonup = 0x402, MouseWheel = 0x403, JoyAxisMotion = 0x600, JoyBallMotion = 0x601, JoyHatMotion = 0x602, JoyButtonDown = 0x603, JoyButtonUp = 0x604, JoyDeviceAdded = 0x605, JoyDeviceRemoved = 0x606, ControllerAxisMotion = 0x650, ControllerButtonDown = 0x651, ControllerButtonUp = 0x652, ControllerDeviceAdded = 0x653, ControllerDeviceRemoved = 0x654, ControllerDeviceRemapped = 0x655, FingerDown = 0x700, FingerUp = 0x701, FingerMotion = 0x702, DollarGesture = 0x800, DollarRecord = 0x801, MultiGesture = 0x802, ClipboardUpdate = 0x900, DropFile = 0x1000, DropText = 0x1001, DropBegin = 0x1002, DropComplete = 0x1003, AudioDeviceAdded = 0x1100, AudioDeviceRemoved = 0x1101, RenderTargetsReset = 0x2000, RenderDeviceReset = 0x2001, UserEvent = 0x8000, Last = 0xFFFF } public enum EventAction { AddEvent = 0x0, PeekEvent = 0x1, GetEvent = 0x2, } [StructLayout(LayoutKind.Explicit, Size = 56)] public struct Event { [FieldOffset(0)] public EventType Type; [FieldOffset(0)] public Window.Event Window; [FieldOffset(0)] public Keyboard.Event Key; [FieldOffset(0)] public Mouse.MotionEvent Motion; [FieldOffset(0)] public Keyboard.TextEditingEvent Edit; [FieldOffset(0)] public Keyboard.TextInputEvent Text; [FieldOffset(0)] public Mouse.WheelEvent Wheel; [FieldOffset(0)] public Joystick.DeviceEvent JoystickDevice; [FieldOffset(0)] public GameController.DeviceEvent ControllerDevice; [FieldOffset(0)] public Drop.Event Drop; } public struct Rectangle { public int X; public int Y; public int Width; public int Height; } public struct Version { public byte Major; public byte Minor; public byte Patch; public int PackedValue { get { return (Major << 16 | Minor << 8 | Patch); } } public Version(byte major, byte minor, byte patch) : this() { this.Major = major; this.Minor = minor; this.Patch = patch; } public static bool operator <(Version l, Version r) { return l.PackedValue < r.PackedValue; } public static bool operator >(Version l, Version r) { return l.PackedValue > r.PackedValue; } public static bool operator <=(Version l, Version r) { return l.PackedValue <= r.PackedValue; } public static bool operator >=(Version l, Version r) { return l.PackedValue >= r.PackedValue; } public override string ToString() { return String.Format("{0}.{1}.{2}",Major, Minor, Patch); } } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_init(InitFlags flags); public d_sdl_init SDL_Init; public void Init(InitFlags flags) { int res = SDL_Init(flags); GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_InitSubSystem(InitFlags flags); public d_sdl_InitSubSystem SDL_InitSubSystem; public void InitSubSystem(InitFlags flags) { int res = SDL_InitSubSystem(flags); GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_QuitSubSystem(InitFlags flags); public d_sdl_QuitSubSystem QuitSubSystem; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_WasInit(InitFlags flags); public d_sdl_init WasInit; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_quit(); public d_sdl_quit Quit; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_disablescreensaver(); public d_sdl_disablescreensaver DisableScreenSaver; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_getversion(out Version version); public d_sdl_getversion GetVersion; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_pollevent([Out] out Event _event); public d_sdl_pollevent PollEvent; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_pumpevents(); public d_sdl_pumpevents PumpEvents; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_creatergbsurfacefrom(IntPtr pixels, int width, int height, int depth, int pitch, uint rMask, uint gMask, uint bMask, uint aMask); private d_sdl_creatergbsurfacefrom SDL_CreateRGBSurfaceFrom; public IntPtr CreateRGBSurfaceFrom(byte[] pixels, int width, int height, int depth, int pitch, uint rMask, uint gMask, uint bMask, uint aMask) { var handle = GCHandle.Alloc(pixels, GCHandleType.Pinned); try { return SDL_CreateRGBSurfaceFrom(handle.AddrOfPinnedObject(), width, height, depth, pitch, rMask, gMask, bMask, aMask); } finally { handle.Free(); } } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_freesurface(IntPtr surface); public d_sdl_freesurface FreeSurface; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_geterror(); private d_sdl_geterror SDL_GetError; public string GetError() { return InteropHelpers.Utf8ToString(SDL_GetError()); } public void GetError(int res) { if (res < 0) Debug.WriteLine(GetError()); } public void GetError(IntPtr pointer) { if (pointer == IntPtr.Zero) Debug.WriteLine(GetError()); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_clearerror(); public d_sdl_clearerror ClearError; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr d_sdl_gethint(string name); public d_sdl_gethint SDL_GetHint; public string GetHint(string name) { return InteropHelpers.Utf8ToString(SDL_GetHint(name)); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_loadbmp_rw(IntPtr src, int freesrc); private d_sdl_loadbmp_rw SDL_LoadBMP_RW; public IntPtr LoadBMP_RW(IntPtr src, int freesrc) { IntPtr pointer = SDL_LoadBMP_RW(src, freesrc); GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_rwfrommem(byte[] mem, int size); private d_sdl_rwfrommem SDL_RWFromMem; public IntPtr RwFromMem(byte[] mem, int size) { IntPtr pointer = SDL_RWFromMem(mem, size); GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_sethint(string name, string value); public d_sdl_sethint SetHint; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_free(IntPtr ptr); public d_sdl_free SDL_Free; private void LoadEntryPoints(IntPtr library) { SDL_Init = FuncLoader.LoadFunctionOrNull(library, "SDL_Init"); SDL_InitSubSystem = FuncLoader.LoadFunctionOrNull(library, "SDL_InitSubSystem"); QuitSubSystem = FuncLoader.LoadFunctionOrNull(library, "SDL_QuitSubSystem"); WasInit = FuncLoader.LoadFunctionOrNull(library, "SDL_WasInit"); Quit = FuncLoader.LoadFunctionOrNull(library, "SDL_Quit"); DisableScreenSaver = FuncLoader.LoadFunctionOrNull(library, "SDL_DisableScreenSaver"); GetVersion = FuncLoader.LoadFunctionOrNull(library, "SDL_GetVersion"); PollEvent = FuncLoader.LoadFunctionOrNull(library, "SDL_PollEvent"); PumpEvents = FuncLoader.LoadFunctionOrNull(library, "SDL_PumpEvents"); SDL_CreateRGBSurfaceFrom = FuncLoader.LoadFunctionOrNull(library, "SDL_CreateRGBSurfaceFrom"); FreeSurface = FuncLoader.LoadFunctionOrNull(library, "SDL_FreeSurface"); SDL_GetError = FuncLoader.LoadFunctionOrNull(library, "SDL_GetError"); ClearError = FuncLoader.LoadFunctionOrNull(library, "SDL_ClearError"); SDL_GetHint = FuncLoader.LoadFunctionOrNull(library, "SDL_GetHint"); SDL_LoadBMP_RW = FuncLoader.LoadFunctionOrNull(library, "SDL_LoadBMP_RW"); SDL_RWFromMem = FuncLoader.LoadFunctionOrNull(library, "SDL_RWFromMem"); SetHint = FuncLoader.LoadFunctionOrNull(library, "SDL_SetHint"); SDL_Free = FuncLoader.LoadFunctionOrNull(library, "SDL_free"); } public class Window { private Sdl _sdl; public const int PosUndefined = 0x1FFF0000; public const int PosCentered = 0x2FFF0000; public enum EventId : byte { None, Shown, Hidden, Exposed, Moved, Resized, SizeChanged, Minimized, Maximized, Restored, Enter, Leave, FocusGained, FocusLost, Close, } public Window(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } public enum State : int { Fullscreen = 0x00000001, OpenGL = 0x00000002, Shown = 0x00000004, Hidden = 0x00000008, Borderless = 0x00000010, Resizable = 0x00000020, Minimized = 0x00000040, Maximized = 0x00000080, Grabbed = 0x00000100, InputFocus = 0x00000200, MouseFocus = 0x00000400, Foreign = 0x00000800, FullscreenDesktop = 0x00001001, AllowHighDPI = 0x00002000, MouseCapture = 0x00004000, } [StructLayout(LayoutKind.Sequential)] public struct Event { public EventType Type; public uint TimeStamp; public uint WindowID; public EventId EventID; private byte padding1; private byte padding2; private byte padding3; public int Data1; public int Data2; } public enum SysWMType { Unknow, Windows, X11, Directfb, Cocoa, UiKit, Wayland, Mir, WinRt, Android } [StructLayout(LayoutKind.Sequential)] public struct SDL_SysWMinfo { public Version version; public SysWMType subsystem; public IntPtr window; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_createwindow(string title, int x, int y, int w, int h, int flags); private d_sdl_createwindow SDL_CreateWindow; public IntPtr Create(string title, int x, int y, int w, int h, Sdl.Window.State flags) { IntPtr pointer = SDL_CreateWindow(title, x, y, w, h, (int)flags); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_destroywindow(IntPtr window); public d_sdl_destroywindow Destroy; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate uint d_sdl_getwindowid(IntPtr window); public d_sdl_getwindowid GetWindowId; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getwindowdisplayindex(IntPtr window); private d_sdl_getwindowdisplayindex SDL_GetWindowDisplayIndex; public int GetDisplayIndex(IntPtr window) { int res = SDL_GetWindowDisplayIndex(window); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_getwindowflags(IntPtr window); public d_sdl_getwindowflags GetWindowFlags; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setwindowicon(IntPtr window, IntPtr icon); public d_sdl_setwindowicon SetIcon; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_getwindowposition(IntPtr window, out int x, out int y); public d_sdl_getwindowposition GetPosition; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_getwindowsize(IntPtr window, out int w, out int h); public d_sdl_getwindowsize GetSize; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setwindowbordered(IntPtr window, int bordered); public d_sdl_setwindowbordered SetBordered; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_setwindowfullscreen(IntPtr window, int flags); private d_sdl_setwindowfullscreen SDL_SetWindowFullscreen; public void SetFullscreen(IntPtr window, Sdl.Window.State flags) { int res = SDL_SetWindowFullscreen(window, (int)flags); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setwindowposition(IntPtr window, int x, int y); public d_sdl_setwindowposition SetPosition; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setwindowresizable(IntPtr window, bool resizable); public d_sdl_setwindowresizable SetResizable; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setwindowsize(IntPtr window, int w, int h); public d_sdl_setwindowsize SetSize; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private unsafe delegate void d_sdl_setwindowtitle(IntPtr window, byte* value); private d_sdl_setwindowtitle SDL_SetWindowTitle; public unsafe void SetTitle(IntPtr handle, string title) { byte[] str = Encoding.UTF8.GetBytes(title+'\0'); fixed (byte* pStr = str) { SDL_SetWindowTitle(handle, pStr); } } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_showwindow(IntPtr window); public d_sdl_showwindow Show; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate bool d_sdl_getwindowwminfo(IntPtr window, ref SDL_SysWMinfo sysWMinfo); public d_sdl_getwindowwminfo GetWindowWMInfo; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_getwindowborderssize(IntPtr window, out int top, out int left, out int right, out int bottom); public d_sdl_getwindowborderssize GetBorderSize; private void LoadEntryPoints(IntPtr library) { SDL_CreateWindow = FuncLoader.LoadFunctionOrNull(library, "SDL_CreateWindow"); Destroy = FuncLoader.LoadFunctionOrNull(library, "SDL_DestroyWindow"); GetWindowId = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowID"); SDL_GetWindowDisplayIndex = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowDisplayIndex"); GetWindowFlags = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowFlags"); SetIcon = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowIcon"); GetPosition = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowPosition"); GetSize = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowSize"); SetBordered = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowBordered"); SDL_SetWindowFullscreen = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowFullscreen"); SetPosition = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowPosition"); SetResizable = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowResizable"); SetSize = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowSize"); SDL_SetWindowTitle = FuncLoader.LoadFunctionOrNull(library, "SDL_SetWindowTitle"); Show = FuncLoader.LoadFunctionOrNull(library, "SDL_ShowWindow"); GetWindowWMInfo = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowWMInfo"); GetBorderSize = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowBordersSize"); } } public class Display { private Sdl _sdl; public struct Mode { public uint Format; public int Width; public int Height; public int RefreshRate; public IntPtr DriverData; } public Display(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getdisplaybounds(int displayIndex, out Rectangle rect); private d_sdl_getdisplaybounds SDL_GetDisplayBounds; public void GetBounds(int displayIndex, out Rectangle rect) { int res = SDL_GetDisplayBounds(displayIndex, out rect); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getcurrentdisplaymode(int displayIndex, out Mode mode); private d_sdl_getcurrentdisplaymode SDL_GetCurrentDisplayMode; public void GetCurrentDisplayMode(int displayIndex, out Mode mode) { int res = SDL_GetCurrentDisplayMode(displayIndex, out mode); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getdisplaymode(int displayIndex, int modeIndex, out Mode mode); private d_sdl_getdisplaymode SDL_GetDisplayMode; public void GetDisplayMode(int displayIndex, int modeIndex, out Mode mode) { int res = SDL_GetDisplayMode(displayIndex, modeIndex, out mode); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getclosestdisplaymode(int displayIndex, Mode mode, out Mode closest); private d_sdl_getclosestdisplaymode SDL_GetClosestDisplayMode; public void GetClosestDisplayMode(int displayIndex, Mode mode, out Mode closest) { int res = SDL_GetClosestDisplayMode(displayIndex, mode, out closest); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_getdisplayname(int index); private d_sdl_getdisplayname SDL_GetDisplayName; public string GetDisplayName(int index) { IntPtr pointer = SDL_GetDisplayName(index); _sdl.GetError(pointer); return InteropHelpers.Utf8ToString(pointer); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getnumdisplaymodes(int displayIndex); private d_sdl_getnumdisplaymodes SDL_GetNumDisplayModes; public int GetNumDisplayModes(int displayIndex) { int res = SDL_GetNumDisplayModes(displayIndex); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getnumvideodisplays(); private d_sdl_getnumvideodisplays SDL_GetNumVideoDisplays; public int GetNumVideoDisplays() { int res = SDL_GetNumVideoDisplays(); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_getwindowdisplayindex(IntPtr window); private d_sdl_getwindowdisplayindex SDL_GetWindowDisplayIndex; public int GetWindowDisplayIndex(IntPtr window) { int res = SDL_GetWindowDisplayIndex(window); _sdl.GetError(res); return res; } private void LoadEntryPoints(IntPtr library) { SDL_GetDisplayBounds = FuncLoader.LoadFunctionOrNull(library, "SDL_GetDisplayBounds"); SDL_GetCurrentDisplayMode = FuncLoader.LoadFunctionOrNull(library, "SDL_GetCurrentDisplayMode"); SDL_GetDisplayMode = FuncLoader.LoadFunctionOrNull(library, "SDL_GetDisplayMode"); SDL_GetClosestDisplayMode = FuncLoader.LoadFunctionOrNull(library, "SDL_GetClosestDisplayMode"); SDL_GetDisplayName = FuncLoader.LoadFunctionOrNull(library, "SDL_GetDisplayName"); SDL_GetNumDisplayModes = FuncLoader.LoadFunctionOrNull(library, "SDL_GetNumDisplayModes"); SDL_GetNumVideoDisplays = FuncLoader.LoadFunctionOrNull(library, "SDL_GetNumVideoDisplays"); SDL_GetWindowDisplayIndex = FuncLoader.LoadFunctionOrNull(library, "SDL_GetWindowDisplayIndex"); } } public class GL { private Sdl _sdl; public enum Attribute { RedSize, GreenSize, BlueSize, AlphaSize, BufferSize, DoubleBuffer, DepthSize, StencilSize, AccumRedSize, AccumGreenSize, AccumBlueSize, AccumAlphaSize, Stereo, MultiSampleBuffers, MultiSampleSamples, AcceleratedVisual, RetainedBacking, ContextMajorVersion, ContextMinorVersion, ContextEgl, ContextFlags, ContextProfileMask, ShareWithCurrentContext, FramebufferSRGBCapable, ContextReleaseBehaviour, } public enum ContextProfile : int { /// leaves the choice of profile up to SDL Default = 0, Core = 1, Compatibility = 2, ES = 3, } [Flags] public enum ContextFlag : int { Debug = 1, ForwardCompatible = 2, RobustAccess = 4, ResetIsolation = 8, } public enum ContextReleaseBehaviour : int { None = 0, Flush = 1, } public GL(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_gl_createcontext(IntPtr window); private d_sdl_gl_createcontext SDL_GL_CreateContext; public IntPtr CreateGLContext(IntPtr window) { IntPtr pointer = SDL_GL_CreateContext(window); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_gl_deletecontext(IntPtr context); public d_sdl_gl_deletecontext DeleteContext; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_gl_getcurrentcontext(); private d_sdl_gl_getcurrentcontext SDL_GL_GetCurrentContext; public IntPtr GetCurrentContext() { IntPtr pointer = SDL_GL_GetCurrentContext(); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr d_sdl_gl_getprocaddress(string proc); public d_sdl_gl_getprocaddress GetProcAddress; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gl_getswapinterval(); public d_sdl_gl_getswapinterval GetSwapInterval; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gl_makecurrent(IntPtr window, IntPtr context); public d_sdl_gl_makecurrent MakeCurrent; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_gl_setattribute(Attribute attr, int value); private d_sdl_gl_setattribute SDL_GL_SetAttribute; public int SetAttribute(Attribute attr, int value) { int res = SDL_GL_SetAttribute(attr, value); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gl_setswapinterval(int interval); public d_sdl_gl_setswapinterval SetSwapInterval; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_gl_swapwindow(IntPtr window); public d_sdl_gl_swapwindow SwapWindow; private void LoadEntryPoints(IntPtr library) { SDL_GL_CreateContext = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_CreateContext"); DeleteContext = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_DeleteContext"); SDL_GL_GetCurrentContext = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_GetCurrentContext"); GetProcAddress = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_GetProcAddress"); GetSwapInterval = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_GetSwapInterval"); MakeCurrent = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_MakeCurrent"); SDL_GL_SetAttribute = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_SetAttribute"); SetSwapInterval = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_SetSwapInterval"); SwapWindow = FuncLoader.LoadFunctionOrNull(library, "SDL_GL_SwapWindow"); } } public class Mouse { private Sdl _sdl; [Flags] public enum Button { Left = 1 << 0, Middle = 1 << 1, Right = 1 << 2, X1Mask = 1 << 3, X2Mask = 1 << 4 } public enum SystemCursor { Arrow, IBeam, Wait, Crosshair, WaitArrow, SizeNWSE, SizeNESW, SizeWE, SizeNS, SizeAll, No, Hand } [StructLayout(LayoutKind.Sequential)] public struct MotionEvent { public EventType Type; public uint Timestamp; public uint WindowID; public uint Which; public byte State; private byte _padding1; private byte _padding2; private byte _padding3; public int X; public int Y; public int Xrel; public int Yrel; } [StructLayout(LayoutKind.Sequential)] public struct WheelEvent { public EventType Type; public uint TimeStamp; public uint WindowId; public uint Which; public int X; public int Y; public uint Direction; } public Mouse(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_createcolorcursor(IntPtr surface, int x, int y); private d_sdl_createcolorcursor SDL_CreateColorCursor; public IntPtr CreateColorCursor(IntPtr surface, int x, int y) { IntPtr pointer = SDL_CreateColorCursor(surface, x, y); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_createsystemcursor(SystemCursor id); private d_sdl_createsystemcursor SDL_CreateSystemCursor; public IntPtr CreateSystemCursor(SystemCursor id) { IntPtr pointer = SDL_CreateSystemCursor(id); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_freecursor(IntPtr cursor); public d_sdl_freecursor FreeCursor; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate Button d_sdl_getglobalmousestate(out int x, out int y); public d_sdl_getglobalmousestate GetGlobalState; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate Button d_sdl_getmousestate(out int x, out int y); public d_sdl_getmousestate GetState; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_setcursor(IntPtr cursor); public d_sdl_setcursor SetCursor; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_showcursor(int toggle); public d_sdl_showcursor ShowCursor; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_warpmouseinwindow(IntPtr window, int x, int y); public d_sdl_warpmouseinwindow WarpInWindow; private void LoadEntryPoints(IntPtr library) { SDL_CreateColorCursor = FuncLoader.LoadFunctionOrNull(library, "SDL_CreateColorCursor"); SDL_CreateSystemCursor = FuncLoader.LoadFunctionOrNull(library, "SDL_CreateSystemCursor"); FreeCursor = FuncLoader.LoadFunctionOrNull(library, "SDL_FreeCursor"); GetGlobalState = FuncLoader.LoadFunctionOrNull(library, "SDL_GetGlobalMouseState"); GetState = FuncLoader.LoadFunctionOrNull(library, "SDL_GetMouseState"); SetCursor = FuncLoader.LoadFunctionOrNull(library, "SDL_SetCursor"); ShowCursor = FuncLoader.LoadFunctionOrNull(library, "SDL_ShowCursor"); WarpInWindow = FuncLoader.LoadFunctionOrNull(library, "SDL_WarpMouseInWindow"); } } public class Keyboard { private Sdl _sdl; public struct Keysym { public int Scancode; public int Sym; public Keymod Mod; public uint Unicode; } [Flags] public enum Keymod : ushort { None = 0x0000, LeftShift = 0x0001, RightShift = 0x0002, LeftCtrl = 0x0040, RightCtrl = 0x0080, LeftAlt = 0x0100, RightAlt = 0x0200, LeftGui = 0x0400, RightGui = 0x0800, NumLock = 0x1000, CapsLock = 0x2000, AltGr = 0x4000, Reserved = 0x8000, Ctrl = (LeftCtrl | RightCtrl), Shift = (LeftShift | RightShift), Alt = (LeftAlt | RightAlt), Gui = (LeftGui | RightGui) } [StructLayout(LayoutKind.Sequential)] public struct Event { public EventType Type; public uint TimeStamp; public uint WindowId; public byte State; public byte Repeat; private byte padding2; private byte padding3; public Keysym Keysym; } [StructLayout(LayoutKind.Sequential)] public unsafe struct TextEditingEvent { public EventType Type; public uint Timestamp; public uint WindowId; public fixed byte Text[32]; public int Start; public int Length; } [StructLayout(LayoutKind.Sequential)] public unsafe struct TextInputEvent { public EventType Type; public uint Timestamp; public uint WindowId; public fixed byte Text[32]; } public Keyboard(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate Keymod d_sdl_getmodstate(); public d_sdl_getmodstate GetModState; private void LoadEntryPoints(IntPtr library) { GetModState = FuncLoader.LoadFunctionOrNull(library, "SDL_GetModState"); } } public class Joystick { private Sdl _sdl; [Flags] public enum Hat : byte { Centered = 0, Up = 1 << 0, Right = 1 << 1, Down = 1 << 2, Left = 1 << 3 } [StructLayout(LayoutKind.Sequential)] public struct DeviceEvent { public EventType Type; public uint TimeStamp; public int Which; } public Joystick(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_joystickclose(IntPtr joystick); public d_sdl_joystickclose Close; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_joystickfrominstanceid(int joyid); private d_sdl_joystickfrominstanceid SDL_JoystickFromInstanceID; public IntPtr FromInstanceID(int joyid) { IntPtr pointer = SDL_JoystickFromInstanceID(joyid); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate short d_sdl_joystickgetaxis(IntPtr joystick, int axis); public d_sdl_joystickgetaxis GetAxis; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate byte d_sdl_joystickgetbutton(IntPtr joystick, int button); public d_sdl_joystickgetbutton GetButton; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_joystickname(IntPtr joystick); private d_sdl_joystickname JoystickName; public string GetJoystickName(IntPtr joystick) { return InteropHelpers.Utf8ToString(JoystickName(joystick)); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate Guid d_sdl_joystickgetguid(IntPtr joystick); public d_sdl_joystickgetguid GetGUID; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate Hat d_sdl_joystickgethat(IntPtr joystick, int hat); public d_sdl_joystickgethat GetHat; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_joystickinstanceid(IntPtr joystick); public d_sdl_joystickinstanceid InstanceID; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_joystickopen(int deviceIndex); private d_sdl_joystickopen SDL_JoystickOpen; public IntPtr Open(int deviceIndex) { IntPtr pointer = SDL_JoystickOpen(deviceIndex); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_joysticknumaxes(IntPtr joystick); private d_sdl_joysticknumaxes SDL_JoystickNumAxes; public int NumAxes(IntPtr joystick) { int res = SDL_JoystickNumAxes(joystick); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_joysticknumbuttons(IntPtr joystick); private d_sdl_joysticknumbuttons SDL_JoystickNumButtons; public int NumButtons(IntPtr joystick) { int res = SDL_JoystickNumButtons(joystick); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_joysticknumhats(IntPtr joystick); private d_sdl_joysticknumhats SDL_JoystickNumHats; public int NumHats(IntPtr joystick) { int res = SDL_JoystickNumHats(joystick); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_numjoysticks(); private d_sdl_numjoysticks SDL_NumJoysticks; public int NumJoysticks() { int res = SDL_NumJoysticks(); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_JoystickUpdate(); public d_sdl_JoystickUpdate JoystickUpdate; private void LoadEntryPoints(IntPtr library) { Close = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickClose"); SDL_JoystickFromInstanceID = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickFromInstanceID"); GetAxis = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickGetAxis"); GetButton = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickGetButton"); JoystickName = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickName"); GetGUID = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickGetGUID"); GetHat = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickGetHat"); InstanceID = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickInstanceID"); SDL_JoystickOpen = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickOpen"); SDL_JoystickNumAxes = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickNumAxes"); SDL_JoystickNumButtons = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickNumButtons"); SDL_JoystickNumHats = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickNumHats"); SDL_NumJoysticks = FuncLoader.LoadFunctionOrNull(library, "SDL_NumJoysticks"); JoystickUpdate = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickUpdate"); } } public class GameController { private Sdl _sdl; public enum Axis { Invalid = -1, LeftX, LeftY, RightX, RightY, TriggerLeft, TriggerRight, Max, } public enum Button { Invalid = -1, A, B, X, Y, Back, Guide, Start, LeftStick, RightStick, LeftShoulder, RightShoulder, DpadUp, DpadDown, DpadLeft, DpadRight, Max, } [StructLayout(LayoutKind.Sequential)] public struct DeviceEvent { public EventType Type; public uint TimeStamp; public int Which; } public GameController(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gamecontrolleraddmapping(string mappingString); public d_sdl_gamecontrolleraddmapping AddMapping; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gamecontrolleraddmappingsfromrw(IntPtr rw, int freew); public d_sdl_gamecontrolleraddmappingsfromrw AddMappingFromRw; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_gamecontrollerclose(IntPtr gamecontroller); public d_sdl_gamecontrollerclose Close; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_joystickfrominstanceid(int joyid); private d_sdl_joystickfrominstanceid SDL_GameControllerFromInstanceID; public IntPtr FromInstanceID(int joyid) { IntPtr pointer = SDL_GameControllerFromInstanceID(joyid); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate short d_sdl_gamecontrollergetaxis(IntPtr gamecontroller, Axis axis); public d_sdl_gamecontrollergetaxis GetAxis; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate byte d_sdl_gamecontrollergetbutton(IntPtr gamecontroller, Button button); public d_sdl_gamecontrollergetbutton GetButton; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_gamecontrollergetjoystick(IntPtr gamecontroller); private d_sdl_gamecontrollergetjoystick SDL_GameControllerGetJoystick; public IntPtr GetJoystick(IntPtr gamecontroller) { IntPtr pointer = SDL_GameControllerGetJoystick(gamecontroller); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate byte d_sdl_isgamecontroller(int joystickIndex); public d_sdl_isgamecontroller IsGameController; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr d_sdl_gamecontrollermapping(IntPtr gamecontroller); public d_sdl_gamecontrollermapping SDL_GameControllerMapping; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_gamecontrolleropen(int joystickIndex); private d_sdl_gamecontrolleropen SDL_GameControllerOpen; public IntPtr Open(int joystickIndex) { IntPtr pointer = SDL_GameControllerOpen(joystickIndex); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_gamecontrollername(IntPtr gamecontroller); private d_sdl_gamecontrollername SDL_GameControllerName; public string GetName(IntPtr gamecontroller) { return InteropHelpers.Utf8ToString(SDL_GameControllerName(gamecontroller)); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_gamecontrollerrumble(IntPtr gamecontroller, ushort left, ushort right, uint duration); public d_sdl_gamecontrollerrumble Rumble; public d_sdl_gamecontrollerrumble RumbleTriggers; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate byte d_sdl_gamecontrollerhasrumble(IntPtr gamecontroller); public d_sdl_gamecontrollerhasrumble HasRumble; public d_sdl_gamecontrollerhasrumble HasRumbleTriggers; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_GameControllerUpdate(); public d_sdl_GameControllerUpdate GameControllerUpdate; private void LoadEntryPoints(IntPtr library) { AddMapping = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerAddMapping"); AddMappingFromRw = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerAddMappingsFromRW"); Close = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerClose"); SDL_GameControllerFromInstanceID = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickFromInstanceID"); GetAxis = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerGetAxis"); GetButton = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerGetButton"); SDL_GameControllerGetJoystick = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerGetJoystick"); IsGameController = FuncLoader.LoadFunctionOrNull(library, "SDL_IsGameController"); SDL_GameControllerMapping = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerMapping"); SDL_GameControllerOpen = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerOpen"); SDL_GameControllerName = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerName"); Rumble = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerRumble"); RumbleTriggers = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerRumbleTriggers"); HasRumble = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerHasRumble"); HasRumbleTriggers = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerHasRumbleTriggers"); GameControllerUpdate = FuncLoader.LoadFunctionOrNull(library, "SDL_GameControllerUpdate"); } } public class Haptic { private Sdl _sdl; // For some reason, different game controllers support different maximum values // Also, the closer a given res is to the maximum, the more likely the res will be ignored // Hence, we're setting an arbitrary safe res as a maximum public const uint Infinity = 1000000U; public enum EffectId : ushort { LeftRight = (1 << 2), } [StructLayout(LayoutKind.Sequential)] public struct LeftRight { public EffectId Type; public uint Length; public ushort LargeMagnitude; public ushort SmallMagnitude; } [StructLayout(LayoutKind.Explicit)] public struct Effect { [FieldOffset(0)] public EffectId type; [FieldOffset(0)] public LeftRight leftright; } public Haptic(Sdl sdl, IntPtr library) { _sdl = sdl; LoadEntryPoints(library); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_hapticclose(IntPtr haptic); public d_sdl_hapticclose Close; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_hapticeffectsupported(IntPtr haptic, ref Effect effect); public d_sdl_hapticeffectsupported EffectSupported; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int d_sdl_joystickishaptic(IntPtr joystick); public d_sdl_joystickishaptic IsHaptic; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticneweffect(IntPtr haptic, ref Effect effect); private d_sdl_hapticneweffect SDL_HapticNewEffect; public void NewEffect(IntPtr haptic, ref Effect effect) { int res = SDL_HapticNewEffect(haptic, ref effect); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr d_sdl_hapticopen(int device_index); public d_sdl_hapticopen Open; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr d_sdl_hapticopenfromjoystick(IntPtr joystick); private d_sdl_hapticopenfromjoystick SDL_HapticOpenFromJoystick; public IntPtr OpenFromJoystick(IntPtr joystick) { IntPtr pointer = SDL_HapticOpenFromJoystick(joystick); _sdl.GetError(pointer); return pointer; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticrumbleinit(IntPtr haptic); private d_sdl_hapticrumbleinit SDL_HapticRumbleInit; public void RumbleInit(IntPtr haptic) { int res = SDL_HapticRumbleInit(haptic); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticrumbleplay(IntPtr haptic, float strength, uint length); private d_sdl_hapticrumbleplay SDL_HapticRumblePlay; public void RumblePlay(IntPtr haptic, float strength, uint length) { int res = SDL_HapticRumblePlay(haptic, strength, length); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticrumblesupported(IntPtr haptic); private d_sdl_hapticrumblesupported SDL_HapticRumbleSupported; public int RumbleSupported(IntPtr haptic) { int res = SDL_HapticRumbleSupported(haptic); _sdl.GetError(res); return res; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticruneffect(IntPtr haptic, int effect, uint iterations); private d_sdl_hapticruneffect SDL_HapticRunEffect; public void RunEffect(IntPtr haptic, int effect, uint iterations) { int res = SDL_HapticRunEffect(haptic, effect, iterations); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticstopall(IntPtr haptic); private d_sdl_hapticstopall SDL_HapticStopAll; public void StopAll(IntPtr haptic) { int res = SDL_HapticStopAll(haptic); _sdl.GetError(res); } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate int d_sdl_hapticupdateeffect(IntPtr haptic, int effect, ref Effect data); private d_sdl_hapticupdateeffect SDL_HapticUpdateEffect; public void UpdateEffect(IntPtr haptic, int effect, ref Effect data) { int res = SDL_HapticUpdateEffect(haptic, effect, ref data); _sdl.GetError(res); } private void LoadEntryPoints(IntPtr library) { Close = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticClose"); EffectSupported = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticEffectSupported"); IsHaptic = FuncLoader.LoadFunctionOrNull(library, "SDL_JoystickIsHaptic"); SDL_HapticNewEffect = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticNewEffect"); Open = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticOpen"); SDL_HapticOpenFromJoystick = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticOpenFromJoystick"); SDL_HapticRumbleInit = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticRumbleInit"); SDL_HapticRumblePlay = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticRumblePlay"); SDL_HapticRumbleSupported = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticRumbleSupported"); SDL_HapticRunEffect = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticRunEffect"); SDL_HapticStopAll = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticStopAll"); SDL_HapticUpdateEffect = FuncLoader.LoadFunctionOrNull(library, "SDL_HapticUpdateEffect"); } } public class Drop { [StructLayout(LayoutKind.Sequential)] public unsafe struct Event { public EventType Type; public uint TimeStamp; public IntPtr File; public uint WindowId; } } } ================================================ FILE: Platforms/Game/.SDL2/SDLGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework { internal class SdlGameWindow : GameWindow, IDisposable { private static Dictionary _instances = new Dictionary(); internal static SdlGameWindow FromHandle(IntPtr handle) { return _instances[handle]; } internal Sdl SDL { get { return Sdl.Current; } } public override bool AllowUserResizing { get { return _isResizable && !_isBorderless; } set { _isResizable = value; Sdl.Version nonResizeableVersion = new Sdl.Version(2, 0, 4); if (SDL.version <= nonResizeableVersion) throw new Exception("SDL " + nonResizeableVersion + " does not support changing resizable parameter of the window after it's already been created, please use a newer version of it."); SDL.WINDOW.SetResizable(_handle, _isResizable); if (!_isBorderless) { } } } public override bool IsBorderless { get { return _isBorderless; } set { _isBorderless = value; if (!_isBorderless) { SDL.WINDOW.SetBordered(_handle, 1); } else { SDL.WINDOW.SetBordered(_handle, 0); } } } public override Rectangle ClientBounds { get { int x = 0, y = 0; SDL.WINDOW.GetPosition(Handle, out x, out y); return new Rectangle(x, y, _width, _height); } } public override DisplayOrientation CurrentOrientation { get { return DisplayOrientation.Default; } } public override IntPtr Handle { get { return _handle; } } public override string ScreenDeviceName { get { return _screenDeviceName; } } public static GameWindow Instance; public uint? Id; public bool IsFullScreen; internal readonly Game _game; private IntPtr _handle; private IntPtr _pIcon; private bool _disposed; private bool _isResizable, _isBorderless; private bool _mouseVisible, _hardwareSwitch; private string _screenDeviceName; private int _width, _height; private bool _wasMoved, _supressMoved; private readonly List _keys; private readonly List _dropList; public SdlGameWindow(Game game) { _game = game; _screenDeviceName = ""; Instance = this; _keys = new List(); ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetKeys(_keys); _dropList = new List(); _width = GraphicsDeviceManager.DefaultBackBufferWidth; _height = GraphicsDeviceManager.DefaultBackBufferHeight; SDL.SetHint("SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS", "0"); SDL.SetHint("SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", "1"); _pIcon = LoadAppIcon(); _handle = SDL.WINDOW.Create("", 0, 0, GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight, Sdl.Window.State.Hidden | Sdl.Window.State.FullscreenDesktop); _instances.Add(this.Handle, this); Title = AssemblyHelper.GetDefaultWindowTitle(); if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = this.Handle; if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = this.Handle; } private IntPtr LoadAppIcon() { Stream stream = null; Assembly entryAssembly = Assembly.GetEntryAssembly(); if (entryAssembly != null) // when running NUnit tests entry assembly can be null { stream = entryAssembly.GetManifestResourceStream(entryAssembly.GetName().Name + ".Icon.bmp"); if (stream == null) stream = entryAssembly.GetManifestResourceStream("Icon.bmp"); } if (stream == null) stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Kni.bmp"); try { if (stream != null) { using (stream) { byte[] data = new byte[stream.Length]; stream.Read(data, 0, data.Length); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); try { IntPtr pRWops = SDL.RwFromMem(data, data.Length); IntPtr pIcon = SDL.LoadBMP_RW(pRWops, 1); return pIcon; } finally { handle.Free(); } } } } catch { } return IntPtr.Zero; } internal void CreateWindow() { Sdl.Window.State initflags = Sdl.Window.State.OpenGL | Sdl.Window.State.Hidden | Sdl.Window.State.InputFocus | Sdl.Window.State.MouseFocus; if (_handle != IntPtr.Zero) { if (Mouse.WindowHandle == _handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == _handle) TouchPanel.WindowHandle = IntPtr.Zero; _instances.Remove(this.Handle); SDL.WINDOW.Destroy(_handle); _handle = IntPtr.Zero; } int winx = Sdl.Window.PosCentered; int winy = Sdl.Window.PosCentered; // if we are on Linux, start on the current screen if (CurrentPlatform.OS == OS.Linux) { winx |= GetMouseDisplay(); winy |= GetMouseDisplay(); } _width = GraphicsDeviceManager.DefaultBackBufferWidth; _height = GraphicsDeviceManager.DefaultBackBufferHeight; _handle = SDL.WINDOW.Create(Title, winx, winy, _width, _height, initflags); _instances.Add(this.Handle, this); Id = SDL.WINDOW.GetWindowId(_handle); if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = _handle; if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = _handle; if (_pIcon != IntPtr.Zero) SDL.WINDOW.SetIcon(_handle, _pIcon); SDL.WINDOW.SetBordered(_handle, _isBorderless ? 0 : 1); SDL.WINDOW.SetResizable(_handle, _isResizable); SetCursorVisible(_mouseVisible); } internal bool SdlRunLoop() { bool isExiting = false; Sdl.Event ev; while (SDL.PollEvent(out ev) == 1) { switch (ev.Type) { case Sdl.EventType.Quit: isExiting = true; break; case Sdl.EventType.JoyDeviceAdded: ((IPlatformJoystick)Joystick.Current).GetStrategy().AddDevice(ev.JoystickDevice.Which); break; case Sdl.EventType.JoyDeviceRemoved: ((IPlatformJoystick)Joystick.Current).GetStrategy().RemoveDevice(ev.JoystickDevice.Which); break; case Sdl.EventType.ControllerDeviceAdded: ((IPlatformGamePad)GamePad.Current).GetStrategy().AddDevice(ev.ControllerDevice.Which); break; case Sdl.EventType.ControllerDeviceRemapped: ((IPlatformGamePad)GamePad.Current).GetStrategy().RemapDevice(ev.ControllerDevice.Which); break; case Sdl.EventType.ControllerDeviceRemoved: ((IPlatformGamePad)GamePad.Current).GetStrategy().RemoveDevice(ev.ControllerDevice.Which); break; case Sdl.EventType.ControllerButtonUp: case Sdl.EventType.ControllerButtonDown: case Sdl.EventType.ControllerAxisMotion: ((IPlatformGamePad)GamePad.Current).GetStrategy().UpdatePacketInfo(ev.ControllerDevice.Which, ev.ControllerDevice.TimeStamp); break; case Sdl.EventType.MouseMotion: unchecked { ((IPlatformMouse)Mouse.Current).GetStrategy().RawX += ev.Motion.Xrel; ((IPlatformMouse)Mouse.Current).GetStrategy().RawY += ev.Motion.Yrel; } break; case Sdl.EventType.MouseWheel: unchecked { const int wheelDelta = 120; ((IPlatformMouse)Mouse.Current).GetStrategy().ScrollY += ev.Wheel.Y * wheelDelta; ((IPlatformMouse)Mouse.Current).GetStrategy().ScrollX += ev.Wheel.X * wheelDelta; } break; case Sdl.EventType.KeyDown: { Keys key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym); if (!_keys.Contains(key)) _keys.Add(key); char character = (char)ev.Key.Keysym.Sym; this.OnKeyDown(key); if (char.IsControl(character)) this.OnTextInput(character, key); break; } case Sdl.EventType.KeyUp: { Keys key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym); _keys.Remove(key); this.OnKeyUp(key); break; } case Sdl.EventType.TextInput: if (this.IsTextInputAttached()) { int len = 0; int utf8character = 0; // using an int to encode multibyte characters longer than 2 bytes byte currentByte = 0; int charByteSize = 0; // UTF8 char length to decode int remainingShift = 0; unsafe { while ((currentByte = Marshal.ReadByte((IntPtr)ev.Text.Text, len)) != 0) { // we're reading the first UTF8 byte, we need to check if it's multibyte if (charByteSize == 0) { if (currentByte < 192) charByteSize = 1; else if (currentByte < 224) charByteSize = 2; else if (currentByte < 240) charByteSize = 3; else charByteSize = 4; utf8character = 0; remainingShift = 4; } // assembling the character utf8character <<= 8; utf8character |= currentByte; charByteSize--; remainingShift--; if (charByteSize == 0) // finished decoding the current character { utf8character <<= remainingShift * 8; // shifting it to full UTF8 scope // SDL returns UTF8-encoded characters while C# char type is UTF16-encoded (and limited to the 0-FFFF range / does not support surrogate pairs) // so we need to convert it to Unicode codepoint and check if it's within the supported range int codepoint = UTF8ToUnicode(utf8character); if (codepoint >= 0 && codepoint < 0xFFFF) { this.OnTextInput((char)codepoint, KeyboardUtil.ToXna(codepoint)); // UTF16 characters beyond 0xFFFF are not supported (and would require a surrogate encoding that is not supported by the char type) } } len++; } } } break; case Sdl.EventType.WindowEvent: // If the ID is not the same as our main window ID // that means that we received an event from the // dummy window, so don't process the event. if (ev.Window.WindowID != this.Id) break; switch (ev.Window.EventID) { case Sdl.Window.EventId.Resized: case Sdl.Window.EventId.SizeChanged: ClientResize(ev.Window.Data1, ev.Window.Data2); break; case Sdl.Window.EventId.FocusGained: base.OnActivated(); break; case Sdl.Window.EventId.FocusLost: base.OnDeactivated(); break; case Sdl.Window.EventId.Moved: if (!_supressMoved) _wasMoved = true; _supressMoved = false; break; case Sdl.Window.EventId.Close: isExiting = true; break; } break; case Sdl.EventType.DropFile: if (ev.Drop.WindowId != this.Id) break; string path = InteropHelpers.Utf8ToString(ev.Drop.File); SDL.SDL_Free(ev.Drop.File); _dropList.Add(path); break; case Sdl.EventType.DropComplete: if (ev.Drop.WindowId != this.Id) break; if (_dropList.Count > 0) { OnFileDrop(new FileDropEventArgs(_dropList.ToArray())); _dropList.Clear(); } break; } } return isExiting; } internal int UTF8ToUnicode(int utf8) { int byte4 = utf8 & 0xFF, byte3 = (utf8 >> 8) & 0xFF, byte2 = (utf8 >> 16) & 0xFF, byte1 = (utf8 >> 24) & 0xFF; if (byte1 < 0x80) return byte1; else if (byte1 < 0xC0) return -1; else if (byte1 < 0xE0 && byte2 >= 0x80 && byte2 < 0xC0) return (byte1 % 0x20) * 0x40 + (byte2 % 0x40); else if (byte1 < 0xF0 && byte2 >= 0x80 && byte2 < 0xC0 && byte3 >= 0x80 && byte3 < 0xC0) return (byte1 % 0x10) * 0x40 * 0x40 + (byte2 % 0x40) * 0x40 + (byte3 % 0x40); else if (byte1 < 0xF8 && byte2 >= 0x80 && byte2 < 0xC0 && byte3 >= 0x80 && byte3 < 0xC0 && byte4 >= 0x80 && byte4 < 0xC0) return (byte1 % 0x8) * 0x40 * 0x40 * 0x40 + (byte2 % 0x40) * 0x40 * 0x40 + (byte3 % 0x40) * 0x40 + (byte4 % 0x40); else return -1; } ~SdlGameWindow() { Dispose(false); } private int GetMouseDisplay() { int x, y; SDL.MOUSE.GetGlobalState(out x, out y); int displayCount = SDL.DISPLAY.GetNumVideoDisplays(); for (int i = 0; i < displayCount; i++) { Sdl.Rectangle rect; SDL.DISPLAY.GetBounds(i, out rect); if (x >= rect.X && x < rect.X + rect.Width && y >= rect.Y && y < rect.Y + rect.Height) { return i; } } return 0; } public void SetCursorVisible(bool visible) { _mouseVisible = visible; SDL.MOUSE.ShowCursor(visible ? 1 : 0); } internal void EndScreenDeviceChange(string screenDeviceName, int clientWidth, int clientHeight, bool willBeFullScreen) { _screenDeviceName = screenDeviceName; Rectangle prevBounds = ClientBounds; int displayIndex = SDL.WINDOW.GetDisplayIndex(Handle); Sdl.Rectangle displayRect; SDL.DISPLAY.GetBounds(displayIndex, out displayRect); GraphicsDeviceManager gdm = ((IPlatformGame)_game).GetStrategy().GraphicsDeviceManager; if (willBeFullScreen != IsFullScreen || _hardwareSwitch != gdm.HardwareModeSwitch) { Sdl.Window.State fullscreenFlag = gdm.HardwareModeSwitch ? Sdl.Window.State.Fullscreen : Sdl.Window.State.FullscreenDesktop; SDL.WINDOW.SetFullscreen(Handle, (willBeFullScreen) ? fullscreenFlag : (Sdl.Window.State)0); _hardwareSwitch = gdm.HardwareModeSwitch; } // If going to exclusive full-screen mode, force the window to minimize on focus loss (Windows only) if (CurrentPlatform.OS == OS.Windows) { SDL.SetHint("SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS", willBeFullScreen && _hardwareSwitch ? "1" : "0"); } if (!willBeFullScreen || gdm.HardwareModeSwitch) { SDL.WINDOW.SetSize(Handle, clientWidth, clientHeight); _width = clientWidth; _height = clientHeight; } else { _width = displayRect.Width; _height = displayRect.Height; } int ignore, minx = 0, miny = 0; SDL.WINDOW.GetBorderSize(_handle, out miny, out minx, out ignore, out ignore); int centerX = Math.Max(prevBounds.X + ((prevBounds.Width - clientWidth) / 2), minx); int centerY = Math.Max(prevBounds.Y + ((prevBounds.Height - clientHeight) / 2), miny); if (IsFullScreen && !willBeFullScreen) { // We need to get the display information again in case // the resolution of it was changed. SDL.DISPLAY.GetBounds(displayIndex, out displayRect); // This centering only occurs when exiting fullscreen // so it should center the window on the current display. centerX = displayRect.X + displayRect.Width / 2 - clientWidth / 2; centerY = displayRect.Y + displayRect.Height / 2 - clientHeight / 2; } // If this window is resizable, there is a bug in SDL 2.0.4 where // after the window gets resized, window position information // becomes wrong (for me it always returned 10 8). Solution is // to not try and set the window position because it will be wrong. Sdl.Version nonResizeableVersion = new Sdl.Version(2, 0, 4); if ((SDL.version > nonResizeableVersion || !AllowUserResizing) && !_wasMoved) SDL.WINDOW.SetPosition(Handle, centerX, centerY); if (IsFullScreen != willBeFullScreen) OnClientSizeChanged(); IsFullScreen = willBeFullScreen; _supressMoved = true; } public void ClientResize(int width, int height) { GraphicsDevice device = _game.GraphicsDevice; // SDL reports many resize events even if the Size didn't change. // Only call the code below if it actually changed. if (device.PresentationParameters.BackBufferWidth != width || device.PresentationParameters.BackBufferHeight != height) { device.PresentationParameters.BackBufferWidth = width; device.PresentationParameters.BackBufferHeight = height; if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)device).Strategy.MainContext).Strategy.IsRenderTargetBound) { device.Viewport = new Viewport(0, 0, width, height); device.ScissorRectangle = new Rectangle(0, 0, width, height); } SDL.WINDOW.GetSize(Handle, out _width, out _height); OnClientSizeChanged(); } } protected override void SetTitle(string title) { SDL.WINDOW.SetTitle(_handle, title); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (_disposed) return; if (Mouse.WindowHandle == this.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == this.Handle) TouchPanel.WindowHandle = IntPtr.Zero; _instances.Remove(this.Handle); SDL.WINDOW.Destroy(_handle); _handle = IntPtr.Zero; if (_pIcon != IntPtr.Zero) SDL.FreeSurface(_pIcon); _disposed = true; } } } ================================================ FILE: Platforms/Game/.UAP/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.ApplicationModel.Core; using Windows.UI.Core; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input; #if UAP using Windows.UI.Xaml; #endif #if WINUI using Microsoft.UI.Xaml; #endif namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { internal static string LaunchParameters; [CLSCompliant(false)] public static ApplicationExecutionState PreviousExecutionState { get; internal set; } private static ConcreteGame _concreteGameInstance = null; internal static ConcreteGame ConcreteGameInstance { get { return ConcreteGame._concreteGameInstance; } } public ConcreteGame(Game game) : base(game) { ConcreteGame._concreteGameInstance = this; UAPGameWindow uapGameWindow = UAPGameWindow.Instance; base.Window = uapGameWindow; uapGameWindow.Game = game; base.SetWindowListeners(); if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = base.Window.Handle; if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = base.Window.Handle; // Register the CoreWindow with the services registry Services.AddService(typeof(CoreWindow), uapGameWindow.CoreWindow); // Setup the launch parameters. // - Parameters can optionally start with a forward slash. // - Keys can be separated from values by a colon or equals sign // - Double quotes can be used to enclose spaces in a key or value. int pos = 0; int paramStart = 0; bool inQuotes = false; var keySeperators = new char[] { ':', '=' }; while (pos <= LaunchParameters.Length) { string arg = string.Empty; if (pos < LaunchParameters.Length) { char c = LaunchParameters[pos]; if (c == '"') inQuotes = !inQuotes; else if ((c == ' ') && !inQuotes) { arg = LaunchParameters.Substring(paramStart, pos - paramStart).Replace("\"", ""); paramStart = pos + 1; } } else { arg = LaunchParameters.Substring(paramStart).Replace("\"", ""); } ++pos; if (string.IsNullOrWhiteSpace(arg)) continue; string key = string.Empty; string value = string.Empty; int keyStart = 0; if (arg.StartsWith("/")) keyStart = 1; if (arg.Length > keyStart) { int keyEnd = arg.IndexOfAny(keySeperators, keyStart); if (keyEnd >= 0) { key = arg.Substring(keyStart, keyEnd - keyStart); int valueStart = keyEnd + 1; if (valueStart < arg.Length) value = arg.Substring(valueStart); } else { key = arg.Substring(keyStart); } Game.LaunchParameters.Add(key, value); } } CoreApplication.Suspending += this.CoreApplication_Suspending; CoreApplication.Resuming += this.CoreApplication_Resuming; } private void CoreApplication_Suspending(object sender, SuspendingEventArgs e) { _enableRunLoop = false; GraphicsDeviceManager gdm = this.GraphicsDeviceManager; { if (gdm.GraphicsDevice != null) ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete().Trim(); } } private void CoreApplication_Resuming(object sender, Object e) { if (!_enableRunLoop) { _enableRunLoop = true; ((UAPGameWindow)Window).CoreWindow.Dispatcher.RunIdleAsync(OnRenderFrame); } } internal void Internal_SetIsVisible(bool isVisible) { base.IsVisible = isVisible; } protected override void Run() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); StartGameLoop(); return; //this.CallEndRun(); //this.DoExiting(); } bool _enableRunLoop = false; private void StartGameLoop() { if (!_enableRunLoop) { _enableRunLoop = true; CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow; coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame); } } private void OnRenderFrame(IdleDispatchedHandlerArgs e) { if (_enableRunLoop) OnRenderFrame(e.IsDispatcherIdle); } private void OnRenderFrame() { if (_enableRunLoop) { CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow; if (coreWindow.Dispatcher.ShouldYield(CoreDispatcherPriority.Idle)) coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame); else OnRenderFrame(true); } } private void OnRenderFrame(bool isQueueEmpty) { ((UAPGameWindow)Window).Tick(); ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = false; // Request next frame CoreWindow coreWindow = ((UAPGameWindow)Window).CoreWindow; if (isQueueEmpty) coreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, OnRenderFrame); else coreWindow.Dispatcher.RunIdleAsync(OnRenderFrame); } public override void TickExiting() { if (!((UAPGameWindow)Window).IsExiting) { ((UAPGameWindow)Window).IsExiting = true; Application.Current.Exit(); } } public override bool IsMouseVisible { get { return base.IsMouseVisible; } set { if (base.IsMouseVisible != value) { base.IsMouseVisible = value; ((UAPGameWindow)Window).SetCursor(Game.IsMouseVisible); } else base.IsMouseVisible = value; } } protected override void Dispose(bool disposing) { // Make sure we dispose the graphics system. var gdm = this.GraphicsDeviceManager; if (gdm != null) gdm.Dispose(); if (Mouse.WindowHandle == Window.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == Window.Handle) TouchPanel.WindowHandle = IntPtr.Zero; ((UAPGameWindow)Window).Dispose(); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Game/.UAP/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.UAP/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; #if UAP using Windows.UI.Xaml.Controls; using NativeDisplayOrientation = Windows.Graphics.Display.DisplayOrientations; using NativeDisplayInformation = Windows.Graphics.Display.DisplayInformation; #endif #if WINUI using Microsoft.UI.Xaml.Controls; using NativeDisplayOrientation = Microsoft.Graphics.Display.DisplayOrientations; using NativeDisplayInformation = Microsoft.Graphics.Display.DisplayInformation; #endif namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public SwapChainPanel SwapChainPanel { get; set; } private DisplayOrientation _uapGameSupportedOrientations; public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; base.PreferredBackBufferWidth = clientBounds.Width; base.PreferredBackBufferHeight = clientBounds.Height; base.IsFullScreen = ((UAPGameWindow)game.Window).AppView.IsFullScreenMode; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { return base.IsFullScreen; } set { base.IsFullScreen = value; } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { base.IsFullScreen = !base.IsFullScreen; ApplyChanges(); } public override void ApplyChanges() { if (this.GraphicsDevice == null) { // TODO: Calling ApplyChanges() before Game Initialize should create the device. //this.CreateDevice(); return; } // We don't want to trigger orientation changes // when no preference is being changed. if (_uapGameSupportedOrientations != this.SupportedOrientations) { _uapGameSupportedOrientations = this.SupportedOrientations; DisplayOrientation supported =this.SupportedOrientations; if (this.SupportedOrientations == DisplayOrientation.Default) { // Make the decision based on the preferred backbuffer dimensions. if (this.PreferredBackBufferWidth > this.PreferredBackBufferHeight) supported = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; else supported = DisplayOrientation.Portrait | DisplayOrientation.PortraitDown; } NativeDisplayInformation.AutoRotationPreferences = FromOrientation(supported); } // UAP PlatformApplyChanges ((UAPGameWindow)base.Game.Window).SetClientSize(base.PreferredBackBufferWidth, base.PreferredBackBufferHeight); // populates a gdi with settings in this gdm and allows users to override them with // PrepareDeviceSettings event this information should be applied to the GraphicsDevice var gdi = this.DoPreparingDeviceSettings(); if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile) { // if the GraphicsProfile changed we need to create a new GraphicsDevice this.GraphicsDevice.Dispose(); this.GraphicsDevice = null; this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); } else { GraphicsDevice.Reset(gdi.PresentationParameters); } } private static NativeDisplayOrientation FromOrientation(DisplayOrientation orientation) { NativeDisplayOrientation result = NativeDisplayOrientation.None; if ((orientation & DisplayOrientation.LandscapeLeft) != 0) result |= NativeDisplayOrientation.Landscape; if ((orientation & DisplayOrientation.LandscapeRight) != 0) result |= NativeDisplayOrientation.LandscapeFlipped; if ((orientation & DisplayOrientation.Portrait) != 0) result |= NativeDisplayOrientation.Portrait; if ((orientation & DisplayOrientation.PortraitDown) != 0) result |= NativeDisplayOrientation.PortraitFlipped; return result; } /// /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to /// allow users to change the settings. Then returns that GraphicsDeviceInformation. /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. /// internal GraphicsDeviceInformation DoPreparingDeviceSettings() { var gdi = new GraphicsDeviceInformation(); gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.GraphicsProfile = GraphicsProfile; PresentationParameters pp = new PresentationParameters(); pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferWidth = this.PreferredBackBufferWidth; pp.BackBufferHeight = this.PreferredBackBufferHeight; pp.IsFullScreen = this.IsFullScreen; pp.HardwareModeSwitch = this.HardwareModeSwitch; pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate; pp.DisplayOrientation = this.Game.Window.CurrentOrientation; pp.DeviceWindowHandle = this.Game.Window.Handle; // always initialize MultiSampleCount to the maximum, if users want to overwrite // this they have to respond to the PreparingDeviceSettingsEvent and modify // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount int maxMultiSampleCount = 0; if (this.PreferMultiSampling) { if (GraphicsDevice != null) { maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat); } else { maxMultiSampleCount = 32; } } pp.MultiSampleCount = maxMultiSampleCount; gdi.PresentationParameters = pp; var args = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(args); if (gdi.PresentationParameters == null || gdi.Adapter == null) throw new NullReferenceException("Members should not be set to null in PreparingDeviceSettingsEventArgs"); return gdi; } public override void CreateDevice() { if (this.GraphicsDevice != null) return; // We don't want to trigger orientation changes // when no preference is being changed. if (_uapGameSupportedOrientations != this.SupportedOrientations) { _uapGameSupportedOrientations = this.SupportedOrientations; DisplayOrientation supported = this.SupportedOrientations; if (supported == DisplayOrientation.Default) { // Make the decision based on the preferred backbuffer dimensions. if (this.PreferredBackBufferWidth > this.PreferredBackBufferHeight) supported = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; else supported = DisplayOrientation.Portrait | DisplayOrientation.PortraitDown; } NativeDisplayInformation.AutoRotationPreferences = FromOrientation(supported); } var gdi = this.DoPreparingDeviceSettings(); this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); } private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs) { TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; } private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args) { PresentationParameters pp = args.PresentationParameters; if (pp.IsFullScreen) { // Enter FullScreen if (((UAPGameWindow)Game.Window).AppView.TryEnterFullScreenMode()) { Windows.UI.ViewManagement.ApplicationView.PreferredLaunchWindowingMode = Windows.UI.ViewManagement.ApplicationViewWindowingMode.FullScreen; } } else { // Exit FullScreen ((UAPGameWindow)Game.Window).AppView.ExitFullScreenMode(); Windows.UI.ViewManagement.ApplicationView.PreferredLaunchWindowingMode = Windows.UI.ViewManagement.ApplicationViewWindowingMode.Auto; } } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { // For a UAP app we need to re-apply the // render target before every draw. // I guess the OS changes it and doesn't restore it? ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)device).Strategy.CurrentContext).Strategy.ToConcrete().UAP_ResetRenderTargets(); } return true; } public override void EndDraw() { //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.UAP/GameFrameworkViewSource.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Windows.ApplicationModel.Core; namespace Microsoft.Xna.Platform { public class GameFrameworkViewSource : IFrameworkViewSource where T : Game, new() { public GameFrameworkViewSource() { } IFrameworkView IFrameworkViewSource.CreateView() { return new UAPFrameworkView(); } } } ================================================ FILE: Platforms/Game/.UAP/InputEvents.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Concurrent; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Windows.Devices.Input; using Windows.System.Threading; using Windows.UI.Core; using Microsoft.Xna.Platform.Input; using Microsoft.Xna.Platform.Input.Touch; #if UAP using Windows.Graphics.Display; using Windows.UI.Input; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; #endif #if WINUI using Microsoft.Graphics.Display; using Microsoft.UI.Input; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Windowing; #endif namespace Microsoft.Xna.Framework { internal class InputEvents { internal struct KeyChar { public char Character; public Keys Key; } private readonly UAPGameWindow _gameWindow; public readonly ConcurrentQueue TextQueue = new ConcurrentQueue(); private KeyChar _lastEnqueuedKeyChar; // To convert from DIPs (device independent pixels) to actual screen resolution pixels. private static float _currentDipFactor; private CoreIndependentInputSource _coreIndependentInputSource; public InputEvents(UAPGameWindow gameWindow, CoreWindow window, UIElement inputElement) { this._gameWindow = gameWindow; // The key events are always tied to the window as those will // only arrive here if some other control hasn't gotten it. window.KeyDown += CoreWindow_KeyDown; window.KeyUp += CoreWindow_KeyUp; window.CharacterReceived += Window_CharacterReceived; window.VisibilityChanged += CoreWindow_VisibilityChanged; window.Activated += CoreWindow_Activated; window.SizeChanged += CoreWindow_SizeChanged; DisplayInformation.GetForCurrentView().DpiChanged += InputEvents_DpiChanged; _currentDipFactor = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; if (inputElement is SwapChainPanel) { // Create a thread to process input events. WorkItemHandler workItemHandler = new WorkItemHandler( (action) => { CoreInputDeviceTypes inputDevices = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Touch | CoreInputDeviceTypes.Pen; // We subscribe only to Pen. Touch & Mouse is still processed from inputElement. // Currently PointerVisualizationSettings don't apply to CreateCoreIndependentInputSource // and ContactFeedback is always visible when we create a coreIndependentInputSource for Touch. // If this bug get fixed we can add the Touch InputDeviceTypes. // Mouse still has a race contition. inputDevices &= ~CoreInputDeviceTypes.Touch; inputDevices &= ~CoreInputDeviceTypes.Mouse; _coreIndependentInputSource = ((SwapChainPanel)inputElement).CreateCoreIndependentInputSource(inputDevices); _coreIndependentInputSource.PointerPressed += CoreWindow_PointerPressed; _coreIndependentInputSource.PointerMoved += CoreWindow_PointerMoved; _coreIndependentInputSource.PointerReleased += CoreWindow_PointerReleased; _coreIndependentInputSource.PointerWheelChanged += CoreWindow_PointerWheelChanged; _coreIndependentInputSource.Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessUntilQuit); }); var inputWorker = ThreadPool.RunAsync(workItemHandler, WorkItemPriority.High, WorkItemOptions.TimeSliced); } if (inputElement != null) { // If we have an input UIElement then we bind input events // to it else we'll get events for overlapping XAML controls. inputElement.PointerPressed += UIElement_PointerPressed; inputElement.PointerMoved += UIElement_PointerMoved; inputElement.PointerReleased += UIElement_PointerReleased; inputElement.PointerCanceled += UIElement_PointerCanceled; inputElement.PointerWheelChanged += UIElement_PointerWheelChanged; } else // (inputElement == null) { // If we only have a CoreWindow then use it for input events. window.PointerPressed += CoreWindow_PointerPressed; window.PointerMoved += CoreWindow_PointerMoved; window.PointerReleased += CoreWindow_PointerReleased; window.PointerWheelChanged += CoreWindow_PointerWheelChanged; } } private void InputEvents_DpiChanged(DisplayInformation sender, object args) { _currentDipFactor = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; } #region UIElement Events private void UIElement_PointerPressed(object sender, PointerRoutedEventArgs args) { //Capture this pointer so we continue getting events even if it is dragged off us ((UIElement)sender).CapturePointer(args.Pointer); var pointerPoint = args.GetCurrentPoint(null); PointerPressed(pointerPoint, sender as UIElement, args.Pointer); args.Handled = true; } private void UIElement_PointerMoved(object sender, PointerRoutedEventArgs args) { var pointerPoint = args.GetCurrentPoint(null); PointerMoved(pointerPoint); args.Handled = true; } private void UIElement_PointerReleased(object sender, PointerRoutedEventArgs args) { ((UIElement)sender).ReleasePointerCapture(args.Pointer); var pointerPoint = args.GetCurrentPoint(null); PointerReleased(pointerPoint, sender as UIElement, args.Pointer); args.Handled = true; } private void UIElement_PointerCanceled(object sender, PointerRoutedEventArgs args) { ((UIElement)sender).ReleasePointerCapture(args.Pointer); var pointerPoint = args.GetCurrentPoint(null); PointerCanceled(pointerPoint, sender as UIElement, args.Pointer); args.Handled = true; } private void UIElement_PointerWheelChanged(object sender, PointerRoutedEventArgs args) { var pointerPoint = args.GetCurrentPoint(null); UpdateMouse(pointerPoint); args.Handled = true; } #endregion // UIElement Events #region CoreWindow Events private void CoreWindow_PointerPressed(object sender, PointerEventArgs args) { PointerPressed(args.CurrentPoint, null, null); args.Handled = true; } private void CoreWindow_PointerMoved(object sender, PointerEventArgs args) { PointerMoved(args.CurrentPoint); args.Handled = true; } private void CoreWindow_PointerReleased(object sender, PointerEventArgs args) { PointerReleased(args.CurrentPoint, null, null); args.Handled = true; } private void CoreWindow_PointerWheelChanged(object sender, PointerEventArgs args) { UpdateMouse(args.CurrentPoint); args.Handled = true; } #endregion // CoreWindow Events private void PointerPressed(PointerPoint pointerPoint, UIElement target, Pointer pointer) { Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor; bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch; if (isTouch) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent((int)pointerPoint.PointerId, pos); if (!isTouch) { // Mouse or stylus event. UpdateMouse(pointerPoint); // Capture future pointer events until a release. if (target != null) target.CapturePointer(pointer); } } private void PointerMoved(PointerPoint pointerPoint) { Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor; bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch; bool touchIsDown = pointerPoint.IsInContact; if (isTouch && touchIsDown) { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent((int)pointerPoint.PointerId, pos); } if (!isTouch) { // Mouse or stylus event. UpdateMouse(pointerPoint); } } private void PointerReleased(PointerPoint pointerPoint, UIElement target, Pointer pointer) { Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor; bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch; if (isTouch) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent((int)pointerPoint.PointerId, pos); if (!isTouch) { // Mouse or stylus event. UpdateMouse(pointerPoint); // Release the captured pointer. if (target != null) target.ReleasePointerCapture(pointer); } } private void PointerCanceled(PointerPoint pointerPoint, UIElement target, Pointer pointer) { Vector2 pos = new Vector2((float)pointerPoint.Position.X, (float)pointerPoint.Position.Y) * _currentDipFactor; bool isTouch = pointerPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch; if (isTouch) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddCanceledEvent((int)pointerPoint.PointerId, pos); if (!isTouch) { // Mouse or stylus event. UpdateMouse(pointerPoint); // Release the captured pointer. if (target != null) target.ReleasePointerCapture(pointer); } } private void UpdateMouse(PointerPoint point) { var x = (int)(point.Position.X * _currentDipFactor); var y = (int)(point.Position.Y * _currentDipFactor); var state = point.Properties; int verticalScrollDelta = 0; int horizontalScrollDelta = 0; if (state.IsHorizontalMouseWheel) horizontalScrollDelta = state.MouseWheelDelta; else verticalScrollDelta = state.MouseWheelDelta; _gameWindow._mouseState = new MouseState(x, y, _gameWindow._mouseState.ScrollWheelValue + verticalScrollDelta, _gameWindow._mouseState.HorizontalScrollWheelValue + horizontalScrollDelta, 0, 0, state.IsLeftButtonPressed ? ButtonState.Pressed : ButtonState.Released, state.IsMiddleButtonPressed ? ButtonState.Pressed : ButtonState.Released, state.IsRightButtonPressed ? ButtonState.Pressed : ButtonState.Released, state.IsXButton1Pressed ? ButtonState.Pressed : ButtonState.Released, state.IsXButton2Pressed ? ButtonState.Pressed : ButtonState.Released); } public void UpdateState() { // Update the keyboard state. ((IPlatformKeyboard)Keyboard.Current).GetStrategy().UpdateState(); } internal static Keys KeyTranslate(Windows.System.VirtualKey inkey, CorePhysicalKeyStatus keyStatus) { switch (inkey) { // WinRT does not distinguish between left/right keys // We have to check for special keys such as control/shift/alt/ etc case Windows.System.VirtualKey.Control: // we can detect right Control by checking the IsExtendedKey value. return (keyStatus.IsExtendedKey) ? Keys.RightControl : Keys.LeftControl; case Windows.System.VirtualKey.Shift: // we can detect right shift by checking the scancode value. // left shift is 0x2A, right shift is 0x36. IsExtendedKey is always false. return (keyStatus.ScanCode == 0x36) ? Keys.RightShift : Keys.LeftShift; // Note that the Alt key is now referred to as Menu. // ALT key doesn't get fired by KeyUp/KeyDown events. // One solution could be to check CoreWindow.GetKeyState(...) on every tick. case Windows.System.VirtualKey.Menu: return Keys.LeftAlt; default: return (Keys)inkey; } } private void CoreWindow_KeyUp(object sender, KeyEventArgs args) { var xnaKey = KeyTranslate(args.VirtualKey, args.KeyStatus); ((IPlatformKeyboard)Keyboard.Current).GetStrategy().ResetKey(xnaKey); } private void CoreWindow_KeyDown(object sender, KeyEventArgs args) { var xnaKey = KeyTranslate(args.VirtualKey, args.KeyStatus); ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetKey(xnaKey); _lastEnqueuedKeyChar = new KeyChar(); _lastEnqueuedKeyChar.Key = xnaKey; } private void Window_CharacterReceived(CoreWindow sender, CharacterReceivedEventArgs args) { _lastEnqueuedKeyChar.Character = (char)args.KeyCode; TextQueue.Enqueue(_lastEnqueuedKeyChar); } private void CoreWindow_SizeChanged(CoreWindow sender, WindowSizeChangedEventArgs args) { // If the window is resized then also // drop any current key states. ((IPlatformKeyboard)Keyboard.Current).GetStrategy().ResetKeys(); // required of input can stop working if we change focus WakeupKeyboardInput(); } private void CoreWindow_Activated(CoreWindow sender, WindowActivatedEventArgs args) { // Forget about the held keys when we lose focus as we don't // receive key events for them while we are in the background if (args.WindowActivationState == CoreWindowActivationState.Deactivated) ((IPlatformKeyboard)Keyboard.Current).GetStrategy().ResetKeys(); // required of input can stop working if we change focus WakeupKeyboardInput(); } private void CoreWindow_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args) { // Forget about the held keys when we disappear as we don't // receive key events for them while we are in the background if (!args.Visible) ((IPlatformKeyboard)Keyboard.Current).GetStrategy().ResetKeys(); // required of input can stop working if we change focus WakeupKeyboardInput(); } private static void WakeupKeyboardInput() { #if UAP Window window = Window.Current; #elif WINUI Window window = App.Window; #endif if (window != null) window.CoreWindow.IsInputEnabled = true; #if UAP CoreWindow coreWindow = CoreWindow.GetForCurrentThread(); coreWindow.IsInputEnabled = true; #elif WINUI AppWindow appWindow = AppWindow.Create(); appWindow.IsInputEnabled = true; #endif } } } ================================================ FILE: Platforms/Game/.UAP/UAPFrameworkView.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Windows.ApplicationModel.Core; using Windows.UI.Core; using Windows.ApplicationModel.Activation; namespace Microsoft.Xna.Platform { class UAPFrameworkView : IFrameworkView where T : Game, new() { private CoreApplicationView _applicationView; private T _game; public UAPFrameworkView() { } void IFrameworkView.Initialize(CoreApplicationView applicationView) { _applicationView = applicationView; _applicationView.Activated += ApplicationView_Activated; } private void ApplicationView_Activated(CoreApplicationView sender, IActivatedEventArgs args) { if (args.Kind == ActivationKind.Launch) { // Save any launch parameters to be parsed by the platform. ConcreteGame.LaunchParameters = ((LaunchActivatedEventArgs)args).Arguments; ConcreteGame.PreviousExecutionState = ((LaunchActivatedEventArgs)args).PreviousExecutionState; // Construct the game. _game = new T(); } else if (args.Kind == ActivationKind.Protocol) { // Save any protocol launch parameters to be parsed by the platform. var protocolArgs = args as ProtocolActivatedEventArgs; ConcreteGame.LaunchParameters = protocolArgs.Uri.AbsoluteUri; ConcreteGame.PreviousExecutionState = protocolArgs.PreviousExecutionState; // Construct the game if it does not exist // Protocol can be used to reactivate a suspended game if (_game == null) { _game = new T(); } } } void IFrameworkView.Load(string entryPoint) { } void IFrameworkView.Run() { // Initialize and run the game. _game.Run(); } void IFrameworkView.SetWindow(CoreWindow window) { // Initialize the singleton window. UAPGameWindow.Instance.Initialize(window, null); } void IFrameworkView.Uninitialize() { // TODO: I have no idea when and if this is // called... as of Win8 build 8250 this seems // like its never called. } } } ================================================ FILE: Platforms/Game/.UAP/UAPGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading.Tasks; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using Windows.UI.Core; using Windows.UI.ViewManagement; using Windows.Phone.UI.Input; using Microsoft.Xna.Platform.Input; #if UAP using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.Graphics.Display; #endif #if WINUI using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.Graphics.Display; using Microsoft.UI.Windowing; #endif namespace Microsoft.Xna.Framework { partial class UAPGameWindow : GameWindow { private static Dictionary _instances = new Dictionary(); internal static UAPGameWindow FromHandle(IntPtr handle) { return _instances[handle]; } private DisplayOrientation _orientation; private CoreWindow _coreWindow; private DisplayInformation _dinfo; private Rectangle _viewBounds; internal MouseState _mouseState; private InputEvents _inputEvents; private bool _backPressed = false; private ApplicationView _appView; #region Internal Properties public ApplicationView AppView { get { return _appView; } } internal CoreWindow CoreWindow { get { return _coreWindow; } } internal Game Game { get; set; } internal bool IsExiting { get; set; } #endregion #region Public Properties public override IntPtr Handle { get { return Marshal.GetIUnknownForObject(_coreWindow); } } public override string ScreenDeviceName { get { return String.Empty; } } // window.Title public override Rectangle ClientBounds { get { return _viewBounds; } } public override bool AllowUserResizing { get { return false; } set { // You cannot resize a Metro window! } } public override DisplayOrientation CurrentOrientation { get { return _orientation; } } private GameStrategy GameStrategy { get { return ConcreteGame.ConcreteGameInstance; } } #endregion static public UAPGameWindow Instance { get; private set; } static UAPGameWindow() { Instance = new UAPGameWindow(); } internal UAPGameWindow() { } internal SwapChainPanel SwapChainPanel { get; private set; } public void Initialize(CoreWindow coreWindow, SwapChainPanel swapChainPanel = null) { _coreWindow = coreWindow; _instances.Add(this.Handle, this); this.SwapChainPanel = swapChainPanel; _inputEvents = new InputEvents(this, _coreWindow, this.SwapChainPanel); _dinfo = DisplayInformation.GetForCurrentView(); _appView = ApplicationView.GetForCurrentView(); _orientation = ToOrientation(_dinfo.CurrentOrientation); _dinfo.OrientationChanged += DisplayProperties_OrientationChanged; _coreWindow.SizeChanged += Window_SizeChanged; _coreWindow.Closed += Window_Closed; _coreWindow.Activated += Window_FocusChanged; _coreWindow.VisibilityChanged += Window_VisibilityChanged; _coreWindow.Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated; if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) { Windows.Phone.UI.Input.HardwareButtons.BackPressed += this.HardwareButtons_BackPressed; } else { SystemNavigationManager.GetForCurrentView().BackRequested += this.BackRequested; } SetViewBounds(_appView.VisibleBounds.Width, _appView.VisibleBounds.Height); SetCursor(false); } void Window_VisibilityChanged(CoreWindow sender, VisibilityChangedEventArgs args) { ((ConcreteGame)this.GameStrategy).Internal_SetIsVisible(args.Visible); } private void Window_FocusChanged(CoreWindow sender, WindowActivatedEventArgs args) { switch (args.WindowActivationState) { case CoreWindowActivationState.Deactivated: base.OnDeactivated(); break; case CoreWindowActivationState.PointerActivated: case CoreWindowActivationState.CodeActivated: base.OnActivated(); break; default: #if DEBUG throw new InvalidOperationException(); #endif break; } } private void Window_Closed(CoreWindow sender, CoreWindowEventArgs args) { Game.SuppressDraw(); ((IPlatformGame)Game).GetStrategy().TickExiting(); } private void SetViewBounds(double width, double height) { int pixelWidth = Math.Max(1, (int)Math.Round(width * _dinfo.RawPixelsPerViewPixel)); int pixelHeight = Math.Max(1, (int)Math.Round(height * _dinfo.RawPixelsPerViewPixel)); _viewBounds = new Rectangle(0, 0, pixelWidth, pixelHeight); } private void Window_SizeChanged(object sender, WindowSizeChangedEventArgs args) { int pixelWidth = Math.Max(1, (int)Math.Round(args.Size.Width * _dinfo.RawPixelsPerViewPixel)); int pixelHeight = Math.Max(1, (int)Math.Round(args.Size.Height * _dinfo.RawPixelsPerViewPixel)); // Set the new client bounds. _viewBounds = new Rectangle(0, 0, pixelWidth, pixelHeight); // Set the default new back buffer size and viewport, but this // can be overloaded by the two events below. GraphicsDeviceManager gdm = ((IPlatformGame)Game).GetStrategy().GraphicsDeviceManager; gdm.IsFullScreen = _appView.IsFullScreenMode; gdm.PreferredBackBufferWidth = _viewBounds.Width; gdm.PreferredBackBufferHeight = _viewBounds.Height; gdm.ApplyChanges(); // Set the new view state which will trigger the // Game.ApplicationViewChanged event and signal // the client size changed event. OnClientSizeChanged(); } private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args) { // NOTE: Dispatcher event is used because KeyDown event doesn't handle Alt key var key = InputEvents.KeyTranslate(args.VirtualKey, args.KeyStatus); switch (args.EventType) { case CoreAcceleratorKeyEventType.KeyDown: case CoreAcceleratorKeyEventType.SystemKeyDown: this.OnKeyDown(key); break; case CoreAcceleratorKeyEventType.KeyUp: case CoreAcceleratorKeyEventType.SystemKeyUp: this.OnKeyUp(key); break; default: break; } } private static DisplayOrientation ToOrientation(DisplayOrientations orientations) { var result = DisplayOrientation.Default; if ((orientations & DisplayOrientations.Landscape) != 0) result |= DisplayOrientation.LandscapeLeft; if ((orientations & DisplayOrientations.LandscapeFlipped) != 0) result |= DisplayOrientation.LandscapeRight; if ((orientations & DisplayOrientations.Portrait) != 0) result |= DisplayOrientation.Portrait; if ((orientations & DisplayOrientations.PortraitFlipped) != 0) result |= DisplayOrientation.PortraitDown; return result; } internal void SetClientSize(int width, int height) { if (_appView.IsFullScreenMode) return; if (_viewBounds.Width == width && _viewBounds.Height == height) return; double rawPixelsPerViewPixel = 1.0d; CoreWindow coreWindow = CoreWindow.GetForCurrentThread(); if (coreWindow != null) { rawPixelsPerViewPixel = _dinfo.RawPixelsPerViewPixel; } else { Task.Run(async () => { await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, () => { rawPixelsPerViewPixel = _dinfo.RawPixelsPerViewPixel; }); }).Wait(); } var viewSize = new Windows.Foundation.Size(width / rawPixelsPerViewPixel, height / rawPixelsPerViewPixel); //_appView.SetPreferredMinSize(viewSize); if (!_appView.TryResizeView(viewSize)) { // TODO: What now? } } private void DisplayProperties_OrientationChanged(DisplayInformation dinfo, object sender) { // Set the new orientation. _orientation = ToOrientation(dinfo.CurrentOrientation); // Call the user callback. OnOrientationChanged(); // If we have a valid client bounds then update the graphics device. if (_viewBounds.Width > 0 && _viewBounds.Height > 0) { GraphicsDeviceManager gdm = ((IPlatformGame)Game).GetStrategy().GraphicsDeviceManager; gdm.ApplyChanges(); } } private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { // We need to manually hide the keyboard input UI when the back button is pressed if (KeyboardInput.IsVisible) KeyboardInput.Cancel(null); else _backPressed = true; e.Handled = true; } private void BackRequested(object sender, BackRequestedEventArgs e) { // Prevent Xbox from suspending the app when the user press 'B' button. e.Handled = true; } private void UpdateBackButton() { ((IPlatformGamePad)GamePad.Current).GetStrategy().Back = _backPressed; _backPressed = false; } protected override void SetTitle(string title) { Debug.WriteLine("WARNING: GameWindow.Title has no effect under UWP."); } internal void SetCursor(bool visible) { if ( _coreWindow == null ) return; var asyncResult = _coreWindow.Dispatcher.RunIdleAsync( (e) => { if (visible) _coreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0); else _coreWindow.PointerCursor = null; }); } internal void Tick() { // Update input _inputEvents.UpdateState(); // Update TextInput if (!_inputEvents.TextQueue.IsEmpty) { InputEvents.KeyChar ch; while (_inputEvents.TextQueue.TryDequeue(out ch)) { this.OnTextInput(ch.Character, ch.Key); } } // Update back button UpdateBackButton(); // Update and render the game. if (Game != null) Game.Tick(); } #region Public Methods public void Dispose() { //window.Dispose(); _instances.Remove(this.Handle); } #endregion } } ================================================ FILE: Platforms/Game/.UAP/XamlGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Windows.UI.Core; using Microsoft.Xna.Framework; #if UAP using Windows.UI.Xaml.Controls; #endif #if WINUI using Microsoft.UI.Xaml.Controls; #endif namespace Microsoft.Xna.Platform { /// /// Static class for initializing a Game object for a XAML application. /// /// A class derived from Game with a public parameterless constructor. [CLSCompliant(false)] public static class XamlGame where T : Game, new() { /// /// Creates your Game class initializing it to work within a XAML application window. /// /// The command line arguments from launch. /// The core window object. /// The XAML SwapChainPanel to which we render the scene and receive input events. /// Returns an instance of T generated with default parameterless T constructor static public T Create(string launchParameters, CoreWindow window, SwapChainPanel swapChainPanel) { if (launchParameters == null) throw new NullReferenceException("The launch parameters cannot be null!"); if (window == null) throw new NullReferenceException("The window cannot be null!"); if (swapChainPanel == null) throw new NullReferenceException("The swap chain panel cannot be null!"); // Save any launch parameters to be parsed by the platform. ConcreteGame.LaunchParameters = launchParameters; // Setup the window class. UAPGameWindow.Instance.Initialize(window, swapChainPanel); // Construct the game. T game = new T(); // Set the swap chain panel on the graphics mananger. GraphicsDeviceManager gdm = ((IPlatformGame)game).GetStrategy().GraphicsDeviceManager; if (gdm == null) throw new NullReferenceException("You must create the GraphicsDeviceManager in the Game constructor!"); // set swapChainPanel ((IPlatformGraphicsDeviceManager)gdm).GetStrategy().SwapChainPanel = swapChainPanel; // Start running the game. game.Run(); // Return the created game object. return game; } } } ================================================ FILE: Platforms/Game/.WindowsDX11/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { //internal static string LaunchParameters; private WinFormsGameWindow _gameWindow; public ConcreteGame(Game game) : base(game) { _gameWindow = new WinFormsGameWindow(this); base.Window = _gameWindow; base.SetWindowListeners(); } protected override void RunGameLoop() { _gameWindow.RunGameLoop(); } public override bool IsMouseVisible { get { return base.IsMouseVisible; } set { if (base.IsMouseVisible != value) { base.IsMouseVisible = value; _gameWindow.MouseVisibleToggled(); } } } public override void TickExiting() { if (_gameWindow != null) _gameWindow.Dispose(); _gameWindow = null; Window = null; } protected override void Dispose(bool disposing) { if (disposing) { if (_gameWindow != null) { _gameWindow.Dispose(); _gameWindow = null; Window = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Game/.WindowsDX11/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.WindowsDX11/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; base.PreferredBackBufferWidth = clientBounds.Width; base.PreferredBackBufferHeight = clientBounds.Height; } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { return base.IsFullScreen; } set { base.IsFullScreen = value; } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; } } public override void ToggleFullScreen() { base.IsFullScreen = !base.IsFullScreen; ApplyChanges(); } public override void ApplyChanges() { if (this.GraphicsDevice == null) { this.CreateDevice(); } // populates a gdi with settings in this gdm and allows users to override them with // PrepareDeviceSettings event this information should be applied to the GraphicsDevice var gdi = this.DoPreparingDeviceSettings(); if (gdi.GraphicsProfile != GraphicsDevice.GraphicsProfile) { // if the GraphicsProfile changed we need to create a new GraphicsDevice this.GraphicsDevice.Dispose(); this.GraphicsDevice = null; this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); } else { GraphicsDevice.Reset(gdi.PresentationParameters); } } /// /// This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to /// allow users to change the settings. Then returns that GraphicsDeviceInformation. /// Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. /// internal GraphicsDeviceInformation DoPreparingDeviceSettings() { var gdi = new GraphicsDeviceInformation(); gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.GraphicsProfile = GraphicsProfile; PresentationParameters pp = new PresentationParameters(); pp.DepthStencilFormat = this.PreferredDepthStencilFormat; pp.BackBufferFormat = this.PreferredBackBufferFormat; pp.BackBufferWidth = this.PreferredBackBufferWidth; pp.BackBufferHeight = this.PreferredBackBufferHeight; pp.IsFullScreen = this.IsFullScreen; pp.HardwareModeSwitch = this.HardwareModeSwitch; pp.PresentationInterval = this.SynchronizeWithVerticalRetrace ? PresentInterval.One : PresentInterval.Immediate; pp.DisplayOrientation = this.Game.Window.CurrentOrientation; pp.DeviceWindowHandle = this.Game.Window.Handle; // always initialize MultiSampleCount to the maximum, if users want to overwrite // this they have to respond to the PreparingDeviceSettingsEvent and modify // args.GraphicsDeviceInformation.PresentationParameters.MultiSampleCount int maxMultiSampleCount = 0; if (this.PreferMultiSampling) { if (GraphicsDevice != null) { maxMultiSampleCount = ((IPlatformGraphicsDevice)GraphicsDevice).Strategy.ToConcrete().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)GraphicsDevice).Strategy.PresentationParameters.BackBufferFormat); } else { maxMultiSampleCount = 32; } } pp.MultiSampleCount = maxMultiSampleCount; gdi.PresentationParameters = pp; var args = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(args); if (gdi.PresentationParameters == null || gdi.Adapter == null) throw new NullReferenceException("Members should not be set to null in PreparingDeviceSettingsEventArgs"); return gdi; } public override void CreateDevice() { if (this.GraphicsDevice != null) return; var gdi = this.DoPreparingDeviceSettings(); this.GraphicsDevice = new GraphicsDevice(gdi.Adapter, gdi.GraphicsProfile, this.PreferHalfPixelOffset, gdi.PresentationParameters); // update the touchpanel display size when the graphicsdevice is reset this.GraphicsDevice.DeviceReset += GraphicsDevice_DeviceReset_UpdateTouchPanel; ((IPlatformGraphicsDevice)this.GraphicsDevice).PresentationChanged += this.GraphicsDevice_PresentationChanged_UpdateGamePlatform; this.OnDeviceCreated(EventArgs.Empty); PresentationParameters pp = this.GraphicsDevice.PresentationParameters; WinFormsGameWindow gameWindow = (WinFormsGameWindow)Game.Window; gameWindow.ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight); if (pp.IsFullScreen) { gameWindow.EnterFullScreen(pp); if (!pp.HardwareModeSwitch) { ConcreteGraphicsDevice cgd = ((IPlatformGraphicsDevice)this.GraphicsDevice).Strategy.ToConcrete(); cgd.Internal_CreateSizeDependentResources(); ((IPlatformGraphicsContext)cgd.MainContext).Strategy.ApplyRenderTargets(null); } } } private void GraphicsDevice_DeviceReset_UpdateTouchPanel(object sender, EventArgs eventArgs) { TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; } private void GraphicsDevice_PresentationChanged_UpdateGamePlatform(object sender, PresentationEventArgs args) { PresentationParameters pp = args.PresentationParameters; ((WinFormsGameWindow)this.Game.Window).OnPresentationChanged(pp); } internal void UpdateBackBufferSize(Rectangle clientBounds) { if (this.GraphicsDevice != null) { if (clientBounds.Width != this.PreferredBackBufferWidth || clientBounds.Height != this.PreferredBackBufferHeight) { // Set the default new back buffer size this.PreferredBackBufferWidth = clientBounds.Width; this.PreferredBackBufferHeight = clientBounds.Height; this.ApplyChanges(); } } } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { //base.EndDraw(); GraphicsDevice device = this.GraphicsDevice; if (device != null) { device.Present(); } } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.WindowsDX11/KeysHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform { internal static class KeysHelper { static HashSet _keyMaps = new HashSet(); static KeysHelper() { Keys[] allKeys = (Keys[])Enum.GetValues(typeof(Keys)); foreach (Keys key in allKeys) _keyMaps.Add((int)key); } /// /// Checks if specified value is valid Key. /// /// Keys base value /// Returns true if value is valid Key, false otherwise public static bool IsKey(int value) { return _keyMaps.Contains(value); } } } ================================================ FILE: Platforms/Game/.WindowsDX11/TimerHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Runtime.InteropServices; using System.Threading; namespace Microsoft.Xna.Platform.Utilities { internal static class TimerHelper { [DllImport("ntdll.dll", SetLastError = true)] private static extern int NtQueryTimerResolution(out uint MinimumResolution, out uint MaximumResolution, out uint CurrentResolution); private static readonly double LowestSleepThreshold; static TimerHelper() { uint min, max, current; NtQueryTimerResolution(out min, out max, out current); LowestSleepThreshold = 1.0 + (max / 10000.0); } /// /// Returns the current timer resolution in milliseconds /// public static double GetCurrentResolution() { uint min, max, current; NtQueryTimerResolution(out min, out max, out current); return current / 10000.0; } /// /// Sleeps as long as possible without exceeding the specified period /// public static void SleepForNoMoreThan(double milliseconds) { // Assumption is that Thread.Sleep(t) will sleep for at least (t), and at most (t + timerResolution) if (milliseconds < LowestSleepThreshold) return; var sleepTime = (int)(milliseconds - GetCurrentResolution()); if (sleepTime > 0) Thread.Sleep(sleepTime); } } } ================================================ FILE: Platforms/Game/.WindowsDX11/WinFormsGameForm.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Framework.Windows { internal static class MessageExtensions { public static int GetPointerId(this Message msg) { return (short)msg.WParam; } public static System.Drawing.Point GetPointerLocation(this Message msg) { var lowword = msg.LParam.ToInt32(); return new System.Drawing.Point() { X = (short)(lowword), Y = (short)(lowword >> 16), }; } } [System.ComponentModel.DesignerCategory("Code")] internal class WinFormsGameForm : Form , IMessageFilter { private readonly WinFormsGameWindow _window; public const int WM_QUIT = 0x0012; public const int WM_ERASEBKGND = 0x0014; public const int WM_KEYDOWN = 0x0100; public const int WM_KEYUP = 0x0101; public const int WM_CHAR = 0x0102; public const int WM_SYSKEYDOWN = 0x0104; public const int WM_SYSKEYUP = 0x0105; public const int WM_UNICHAR = 0x0109; public const int WM_SYSCOMMAND = 0x0112; public const int WM_MOUSEMOVE = 0x0200; public const int WM_MOUSEWHEEL = 0x020A; public const int WM_MOUSEHWHEEL = 0x020E; public const int WM_ENTERSIZEMOVE = 0x0231; public const int WM_EXITSIZEMOVE = 0x0232; public const int WM_DROPFILES = 0x0233; public const int WM_POINTERUPDATE = 0x0245; public const int WM_POINTERDOWN = 0x0246; public const int WM_POINTERUP = 0x0247; public const int WM_TABLET_QUERYSYSTEMGESTURESTA = (0x02C0 + 12); internal bool IsResizing { get; set; } public WinFormsGameForm(WinFormsGameWindow window) { _window = window; Application.AddMessageFilter(this); base.Disposed += WinFormsGameForm_Disposed; } private void WinFormsGameForm_Disposed(object sender, EventArgs e) { base.Disposed -= WinFormsGameForm_Disposed; Application.RemoveMessageFilter(this); } // TNC: handle keyboard messages internally to avoid garbage from EventArgs // we need to handle those early in a IMessageFilter to skip OnPreviewKeyDown(PreviewKeyDownEventArgs) bool IMessageFilter.PreFilterMessage(ref Message m) { if (m.HWnd != this.Handle) return false; switch (m.Msg) { case WM_KEYDOWN: case WM_KEYUP: case WM_CHAR: case WM_UNICHAR: var c = m.WParam.ToInt32(); if (c == 0x5B && c == 0x5C) return false; // let Left/Right Windows Key through if (_window.Platform_IsTextInputAttached()) return false; // let keys through if user subscribed to TextInput if (_window.Platform_IsKeyUpDownAttached()) return false; // let keys through if user subscribed to KeyUp/KeyDown return true; // skip message default: return false; } } [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_ERASEBKGND: return; // skip repaint of the control under the swapchain (PaintEventArgs) // we handle those messages internally, skip WinForms EventArgs to avoid garbage case WM_MOUSEWHEEL: return; case WM_MOUSEHWHEEL: return; case WM_MOUSEMOVE: return; } switch (m.Msg) { case WM_TABLET_QUERYSYSTEMGESTURESTA: { // This disables the windows touch helpers, popups, and // guides that get in the way of touch gameplay. const int flags = 0x00000001 | // TABLET_DISABLE_PRESSANDHOLD 0x00000008 | // TABLET_DISABLE_PENTAPFEEDBACK 0x00000010 | // TABLET_DISABLE_PENBARRELFEEDBACK 0x00000100 | // TABLET_DISABLE_TOUCHUIFORCEON 0x00000200 | // TABLET_DISABLE_TOUCHUIFORCEOFF 0x00008000 | // TABLET_DISABLE_TOUCHSWITCH 0x00010000 | // TABLET_DISABLE_FLICKS 0x00080000 | // TABLET_DISABLE_SMOOTHSCROLLING 0x00100000; // TABLET_DISABLE_FLICKFALLBACKKEYS m.Result = new IntPtr(flags); return; } case WM_KEYDOWN: HandleKeyMessage(ref m); switch (m.WParam.ToInt32()) { case 0x5B: // Left Windows Key case 0x5C: // Right Windows Key if (_window.IsFullScreen && _window.HardwareModeSwitch) this.WindowState = FormWindowState.Minimized; break; } break; case WM_SYSKEYDOWN: HandleKeyMessage(ref m); break; case WM_KEYUP: case WM_SYSKEYUP: HandleKeyMessage(ref m); break; case WM_DROPFILES: HandleDropMessage(ref m); break; case WM_SYSCOMMAND: int wParam = m.WParam.ToInt32(); if (wParam == 0xF060) // SC_CLOSE { bool disableAltF4 = !_window.AllowAltF4; if (!disableAltF4 && m.LParam.ToInt32() == 0 && Focused) { m.Result = IntPtr.Zero; return; } } // Disable the system menu from being toggled by // keyboard input so we can own the ALT key. if (wParam == 0xF100) // SC_KEYMENU { m.Result = IntPtr.Zero; return; } break; case WM_POINTERDOWN: { int id = m.GetPointerId(); var position = m.GetPointerLocation(); position = PointToClient(position); Vector2 vec = new Vector2(position.X, position.Y); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(id, vec); } break; case WM_POINTERUPDATE: { int id = m.GetPointerId(); var position = m.GetPointerLocation(); position = PointToClient(position); Vector2 vec = new Vector2(position.X, position.Y); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(id, vec); } break; case WM_POINTERUP: { int id = m.GetPointerId(); var position = m.GetPointerLocation(); position = PointToClient(position); Vector2 vec = new Vector2(position.X, position.Y); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(id, vec); } break; case WM_ENTERSIZEMOVE: IsResizing = true; break; case WM_EXITSIZEMOVE: IsResizing = false; break; } base.WndProc(ref m); } void HandleKeyMessage(ref Message m) { long virtualKeyCode = m.WParam.ToInt64(); bool extended = (m.LParam.ToInt64() & 0x01000000) != 0; long scancode = (m.LParam.ToInt64() & 0x00ff0000) >> 16; var key = KeyCodeTranslate( (System.Windows.Forms.Keys)virtualKeyCode, extended, scancode); if (Microsoft.Xna.Platform.KeysHelper.IsKey((int)key)) { switch (m.Msg) { case WM_KEYDOWN: case WM_SYSKEYDOWN: _window.Platform_OnKeyDown(key); break; case WM_KEYUP: case WM_SYSKEYUP: _window.Platform_OnKeyUp(key); break; default: break; } } } [DllImport("shell32.dll", CharSet = CharSet.Unicode)] private static extern uint DragQueryFile(IntPtr hDrop, uint iFile, [Out] StringBuilder lpszFile, uint cch); void HandleDropMessage(ref Message m) { IntPtr hdrop = m.WParam; uint count = DragQueryFile(hdrop, uint.MaxValue, null, 0); string[] files = new string[count]; for (uint i = 0; i < count; i++) { uint buffSize = DragQueryFile(hdrop, i, null, int.MaxValue); StringBuilder builder = new StringBuilder((int)buffSize); DragQueryFile(hdrop, i, builder, buffSize); files[i] = builder.ToString(); } _window.Platform_OnFileDrop(new FileDropEventArgs(files)); m.Result = IntPtr.Zero; } private static Microsoft.Xna.Framework.Input.Keys KeyCodeTranslate( System.Windows.Forms.Keys keyCode, bool extended, long scancode) { switch (keyCode) { // WinForms does not distinguish between left/right keys // We have to check for special keys such as control/shift/alt/ etc case System.Windows.Forms.Keys.ControlKey: return extended ? Microsoft.Xna.Framework.Input.Keys.RightControl : Microsoft.Xna.Framework.Input.Keys.LeftControl; case System.Windows.Forms.Keys.ShiftKey: // left shift is 0x2A, right shift is 0x36. IsExtendedKey is always false. return ((scancode & 0x1FF) == 0x36) ? Microsoft.Xna.Framework.Input.Keys.RightShift : Microsoft.Xna.Framework.Input.Keys.LeftShift; // Note that the Alt key is now referred to as Menu. case System.Windows.Forms.Keys.Menu: case System.Windows.Forms.Keys.Alt: return extended ? Microsoft.Xna.Framework.Input.Keys.RightAlt : Microsoft.Xna.Framework.Input.Keys.LeftAlt; default: return (Microsoft.Xna.Framework.Input.Keys)keyCode; } } } } ================================================ FILE: Platforms/Game/.WindowsDX11/WinFormsGameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Framework.Windows; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Utilities; using SysDrawing = System.Drawing; using Keys = Microsoft.Xna.Framework.Input.Keys; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Framework { class WinFormsGameWindow : GameWindow, IDisposable { private static Dictionary _instances = new Dictionary(); internal static WinFormsGameWindow FromHandle(IntPtr handle) { return _instances[handle]; } private IntPtr _handle; private WinFormsGameForm Form; private ConcreteGame _concreteGame; private Game _game; private bool _isResizable; private bool _isBorderless; private bool _isMouseHidden; private bool _isMouseInBounds; private SysDrawing.Point _locationBeforeFullScreen; // flag to indicate that we're switching to/from full screen and should ignore resize events private bool _switchingFullScreen; // true if window position was moved either through code or by dragging/resizing the form private bool _wasMoved; #region Internal Properties #endregion #region Public Properties public override IntPtr Handle { get { return _handle; } } public override string ScreenDeviceName { get { return String.Empty; } } public override Rectangle ClientBounds { get { SysDrawing.Point position = Form.PointToScreen(SysDrawing.Point.Empty); SysDrawing.Size size = Form.ClientSize; return new Rectangle(position.X, position.Y, size.Width, size.Height); } } public override bool AllowUserResizing { get { return _isResizable; } set { if (_isResizable == value) return; _isResizable = value; Form.MaximizeBox = _isResizable; if (!_isBorderless) { Form.FormBorderStyle = (_isResizable) ? FormBorderStyle.Sizable : FormBorderStyle.FixedSingle; } } } public override bool IsBorderless { get { return _isBorderless; } set { if (_isBorderless == value) return; _isBorderless = value; if (!_isBorderless) { Form.FormBorderStyle = (_isResizable) ? FormBorderStyle.Sizable : FormBorderStyle.FixedSingle; } else { Form.FormBorderStyle = FormBorderStyle.None; } } } public override DisplayOrientation CurrentOrientation { get { return DisplayOrientation.Default; } } public bool IsFullScreen { get; private set; } public bool HardwareModeSwitch { get; private set; } #endregion internal WinFormsGameWindow(ConcreteGame concreteGame) { _concreteGame = concreteGame; _game = concreteGame.Game; Form = new WinFormsGameForm(this); _handle = Form.Handle; _instances.Add(this.Handle, this); SysDrawing.Size newClientSize = new SysDrawing.Size(GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight); if (this.Form.ClientSize != newClientSize) this.Form.ClientSize = newClientSize; CenterOnPrimaryMonitor(); SetIcon(); Title = AssemblyHelper.GetDefaultWindowTitle(); Form.MaximizeBox = false; Form.FormBorderStyle = FormBorderStyle.FixedSingle; Form.StartPosition = FormStartPosition.Manual; // Capture mouse events. if (Mouse.WindowHandle == IntPtr.Zero) Mouse.WindowHandle = this.Handle; Form.MouseEnter += OnMouseEnter; Form.MouseLeave += OnMouseLeave; // Capture touch events. if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = this.Handle; // disable Keyboard input until the window is activated. ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetActive(false); Form.Activated += OnActivated; Form.Deactivate += OnDeactivate; Form.ResizeBegin += OnResizeBegin; Form.Resize += OnResize; Form.ResizeEnd += OnResizeEnd; Form.KeyPress += OnKeyPress; } [StructLayout(LayoutKind.Sequential)] internal struct POINTSTRUCT { public int X; public int Y; } [DllImport("shell32.dll", CharSet = CharSet.Auto, BestFitMapping = false)] private static extern IntPtr ExtractIcon(IntPtr hInst, string exeFileName, int iconIndex); [DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)] [return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] internal static extern bool GetCursorPos(out POINTSTRUCT pt); [DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)] internal static extern int MapWindowPoints(HandleRef hWndFrom, HandleRef hWndTo, out POINTSTRUCT pt, int cPoints); [DllImport("shell32.dll")] private static extern void DragAcceptFiles(IntPtr hwnd, bool fAccept); private void SetIcon() { // When running unit tests this can return null. var assembly = Assembly.GetEntryAssembly(); if (assembly == null) return; var handle = ExtractIcon(IntPtr.Zero, assembly.Location, 0); if (handle != IntPtr.Zero) Form.Icon = SysDrawing.Icon.FromHandle(handle); } ~WinFormsGameWindow() { Dispose(false); } private void OnActivated(object sender, EventArgs eventArgs) { base.OnActivated(); ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetActive(true); DragAcceptFiles(Handle, true); //allows drag and dropping } private void OnDeactivate(object sender, EventArgs eventArgs) { // If in exclusive mode full-screen, force it out of exclusive mode and minimize the window if( IsFullScreen && _concreteGame.GraphicsDevice.PresentationParameters.HardwareModeSwitch) { // This is true when the user presses the Windows key while game window has focus if( Form.WindowState == FormWindowState.Minimized) MinimizeFullScreen(); } base.OnDeactivated(); ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetActive(false); } private void OnMouseEnter(object sender, EventArgs e) { _isMouseInBounds = true; if (!_concreteGame.IsMouseVisible && !_isMouseHidden) { _isMouseHidden = true; Cursor.Hide(); } } private void OnMouseLeave(object sender, EventArgs e) { _isMouseInBounds = false; if (_isMouseHidden) { _isMouseHidden = false; Cursor.Show(); } } [DllImport("user32.dll")] private static extern short VkKeyScanEx(char ch, IntPtr dwhkl); private void OnKeyPress(object sender, KeyPressEventArgs e) { var key = (Keys) (VkKeyScanEx(e.KeyChar, InputLanguage.CurrentInputLanguage.Handle) & 0xff); this.OnTextInput(e.KeyChar, key); } private FormWindowState _lastFormState; private void OnResizeBegin(object sender, EventArgs e) { } private void OnResize(object sender, EventArgs eventArgs) { if (_switchingFullScreen || Form.IsResizing) { // Repaint the window while resizing. // gameloop is paused during windows resize. try { GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; if (gdm != null) { if (!((IPlatformGraphicsContext)((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.MainContext).Strategy.IsRenderTargetBound) { ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.Present(); } else { // We cannot present with a RT set on the device. } } } catch (Exception ex) { #if DEBUG throw ex; #endif } return; } // this event can be triggered when moving the window through Windows hotkeys // in that case we should no longer center the window after resize if (_lastFormState == Form.WindowState) _wasMoved = true; if (_concreteGame.Window == this && Form.WindowState != FormWindowState.Minimized) { GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; if (gdm != null) { // we may need to restore full screen when coming back from a minimized window if (_lastFormState == FormWindowState.Minimized) ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete().SetHardwareFullscreen(); ((IPlatformGraphicsDeviceManager)gdm).GetStrategy().UpdateBackBufferSize(this.ClientBounds); } } _lastFormState = Form.WindowState; OnClientSizeChanged(); } private void OnResizeEnd(object sender, EventArgs eventArgs) { _wasMoved = true; if (_concreteGame.Window == this) { // the display that the window is on might have changed, so we need to // check and possibly update the Adapter of the GraphicsDevice GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; if (gdm != null) { ((IPlatformGraphicsDeviceManager)gdm).GetStrategy().UpdateBackBufferSize(this.ClientBounds); if (_concreteGame.GraphicsDevice != null) ((IPlatformGraphicsDevice)gdm.GraphicsDevice).Strategy.ToConcrete().RefreshAdapter(); } } OnClientSizeChanged(); } protected override void SetTitle(string title) { Form.Text = title; } internal void RunGameLoop() { Application.Idle += Application_Idle; Application.Run(Form); Application.Idle -= Application_Idle; // We need to remove the WM_QUIT message in the message // pump as it will keep us from restarting on this // same thread. // // This is critical for some NUnit runners which // typically will run all the tests on the same // process/thread. var msg = new NativeMessage(); do { if (msg.msg == WinFormsGameForm.WM_QUIT) break; Thread.Sleep(100); } while (PeekMessage(out msg, IntPtr.Zero, 0, 1 << 5, 1)); } // Run game loop when the app becomes Idle. private void Application_Idle(object sender, EventArgs e) { NativeMessage nativeMsg = default(NativeMessage); while (true) { _game.Tick(); if (PeekMessage(out nativeMsg, IntPtr.Zero, 0, 0, 0)) break; if (Form == null || Form.IsDisposed) break; } } [StructLayout(LayoutKind.Sequential)] public struct NativeMessage { public IntPtr handle; public int msg; public IntPtr wParam; public IntPtr lParam; public uint time; public System.Drawing.Point p; } internal void ChangeClientSize(int width, int height) { bool prevIsResizing = Form.IsResizing; // make sure we don't see the events from this as a user resize Form.IsResizing = true; SysDrawing.Size newClientSize = new SysDrawing.Size(width, height); if (this.Form.ClientSize != newClientSize) this.Form.ClientSize = newClientSize; // if the window wasn't moved manually and it's resized, it should be centered if (!_wasMoved) CenterOnPrimaryMonitor(); Form.IsResizing = prevIsResizing; } internal void CenterOnPrimaryMonitor() { Form.Location = new System.Drawing.Point( (Screen.PrimaryScreen.WorkingArea.Width - Form.Width ) / 2, (Screen.PrimaryScreen.WorkingArea.Height - Form.Height) / 2); } [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously [DllImport("User32.dll", CharSet = CharSet.Auto)] private static extern bool PeekMessage(out NativeMessage msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags); #region Public Methods public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } void Dispose(bool disposing) { if (Mouse.WindowHandle == this.Handle) Mouse.WindowHandle = IntPtr.Zero; if (TouchPanel.WindowHandle == this.Handle) TouchPanel.WindowHandle = IntPtr.Zero; // re-enable keyboard input. ((IPlatformKeyboard)Keyboard.Current).GetStrategy().SetActive(true); _instances.Remove(this.Handle); _handle = IntPtr.Zero; if (disposing) { if (Form != null) { Form.Dispose(); Form = null; } } _concreteGame = null; _game = null; } public void MouseVisibleToggled() { if (_concreteGame.IsMouseVisible) { if (_isMouseHidden) { Cursor.Show(); _isMouseHidden = false; } } else if (!_isMouseHidden && _isMouseInBounds) { Cursor.Hide(); _isMouseHidden = true; } } internal void OnPresentationChanged(PresentationParameters pp) { var raiseClientSizeChanged = false; if (pp.IsFullScreen && pp.HardwareModeSwitch && IsFullScreen && HardwareModeSwitch) { if(_concreteGame.IsActive) { // stay in hardware full screen, need to call ResizeTargets so the displaymode can be switched ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete().ResizeTargets(); } else { // This needs to be called in case the user presses the Windows key while the focus is on the second monitor, // which (sometimes) causes the window to exit fullscreen mode, but still keeps it visible MinimizeFullScreen(); } } else if (pp.IsFullScreen && (!IsFullScreen || pp.HardwareModeSwitch != HardwareModeSwitch)) { EnterFullScreen(pp); raiseClientSizeChanged = true; } else if (!pp.IsFullScreen && IsFullScreen) { ExitFullScreen(); raiseClientSizeChanged = true; } ChangeClientSize(pp.BackBufferWidth, pp.BackBufferHeight); if (raiseClientSizeChanged) OnClientSizeChanged(); } #endregion internal void EnterFullScreen(PresentationParameters pp) { _switchingFullScreen = true; // store the location of the window so we can restore it later if (!IsFullScreen) _locationBeforeFullScreen = Form.Location; ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete().SetHardwareFullscreen(); if (!pp.HardwareModeSwitch) { // FIXME: setting the WindowState to Maximized when the form is not shown will not update the ClientBounds // this causes the back buffer to be the wrong size when initializing in soft full screen // we show the form to bypass the issue Form.Show(); IsBorderless = true; Form.WindowState = FormWindowState.Maximized; _lastFormState = FormWindowState.Maximized; } IsFullScreen = true; HardwareModeSwitch = pp.HardwareModeSwitch; _switchingFullScreen = false; } [DllImport("user32.dll")] static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, uint flags); private void ExitFullScreen() { _switchingFullScreen = true; ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete().ClearHardwareFullscreen(); IsBorderless = false; Form.WindowState = FormWindowState.Normal; _lastFormState = FormWindowState.Normal; Form.Location = _locationBeforeFullScreen; IsFullScreen = false; // Windows does not always correctly redraw the desktop when exiting soft full screen, so force a redraw if (!HardwareModeSwitch) RedrawWindow(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 1); _switchingFullScreen = false; } private void MinimizeFullScreen() { _switchingFullScreen = true; ((IPlatformGraphicsDevice)_concreteGame.GraphicsDevice).Strategy.ToConcrete().ClearHardwareFullscreen(); IsBorderless = false; Form.WindowState = FormWindowState.Minimized; _lastFormState = FormWindowState.Minimized; Form.Location = _locationBeforeFullScreen; IsFullScreen = false; // Windows does not always correctly redraw the desktop when exiting soft full screen, so force a redraw if (!HardwareModeSwitch) RedrawWindow(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 1); _switchingFullScreen = false; } internal void Platform_OnFileDrop(FileDropEventArgs e) { this.OnFileDrop(e); } internal void Platform_OnKeyDown(Keys key) { this.OnKeyDown(key); } internal void Platform_OnKeyUp(Keys key) { this.OnKeyUp(key); } internal bool Platform_IsTextInputAttached() { return this.IsTextInputAttached(); } internal bool Platform_IsKeyUpDownAttached() { return this.IsKeyUpDownAttached(); } } } ================================================ FILE: Platforms/Game/.iOS/ConcreteGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Foundation; using UIKit; using CoreAnimation; using ObjCRuntime; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform { sealed class ConcreteGame : GameStrategy { private NSObject WillTerminateHolder; private CADisplayLink _displayLink; private iOSGameWindow _gameWindow; public ConcreteGame(Game game) : base(game) { this.Services.AddService(typeof(ConcreteGame), this); string appLocation = ((ITitleContainer)TitleContainer.Current).Location; Directory.SetCurrentDirectory(appLocation); _gameWindow = new iOSGameWindow(this); base.Window = _gameWindow; base.SetWindowListeners(); if (TouchPanel.WindowHandle == IntPtr.Zero) TouchPanel.WindowHandle = base.Window.Handle; _gameWindow.UIWindow.Add(_gameWindow.ViewController.View); _gameWindow.ViewController.InterfaceOrientationChanged += ViewController_InterfaceOrientationChanged; //(SJ) Why is this called here when it's not in any other project //Guide.Initialise(game); } public override TimeSpan TargetElapsedTime { get { return base.TargetElapsedTime; } set { if (base.TargetElapsedTime != value) { base.TargetElapsedTime = value; CreateDisplayLink(); } } } private void CreateDisplayLink() { if (_displayLink != null) _displayLink.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoopMode.Default); _displayLink = UIScreen.MainScreen.CreateDisplayLink(_gameWindow.ViewController.View as iOSGameView, new Selector("doTick")); // FrameInterval represents how many frames must pass before the selector // is called again. We calculate this by dividing our target elapsed time by // the duration of a frame on iOS (Which is 1/60.0f at the time of writing this). _displayLink.FrameInterval = (int)Math.Round(60f * Game.TargetElapsedTime.TotalSeconds); _displayLink.AddToRunLoop(NSRunLoop.Main, NSRunLoopMode.Default); } protected override void Run() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); StartGameLoop(); return; //this.CallEndRun(); //this.DoExiting(); } private void StartGameLoop() { // Show the window _gameWindow.UIWindow.MakeKeyAndVisible(); // In iOS 8+ we need to set the root view controller *after* Window MakeKey // This ensures that the viewController's supported interface orientations // will be respected at launch _gameWindow.UIWindow.RootViewController = _gameWindow.ViewController; _gameWindow.BeginObservingUIApplication(); BeginObservingUIApplicationExit(); _gameWindow.ViewController.View.BecomeFirstResponder(); CreateDisplayLink(); } protected override void Dispose(bool disposing) { if (Window != null) { if (TouchPanel.WindowHandle == Window.Handle) TouchPanel.WindowHandle = IntPtr.Zero; } base.Dispose(disposing); if (disposing) { if (_gameWindow != null) { _gameWindow.Dispose(); } } } internal void iOSTick() { if (!Game.IsActive) return; // FIXME: Remove this call, and the whole Tick method, once // GraphicsDevice is where platform-specific Present // functionality is actually implemented. At that // point, it should be possible to pass Game.Tick // directly to NSTimer.CreateRepeatingTimer. _gameWindow.ViewController.View.MakeCurrent(); Game.Tick(); GraphicsDeviceManager gdm = this.GraphicsDeviceManager; { if (gdm.GraphicsDevice != null) gdm.GraphicsDevice.Present(); } _gameWindow.ViewController.View.Present(); } public override void Exit() { throw new PlatformNotSupportedException("iOS platform does not allow programmatically closing."); } public override void TickExiting() { // iOS games do not "exit" or shut down. throw new PlatformNotSupportedException(); } private void BeginObservingUIApplicationExit() { WillTerminateHolder = NSNotificationCenter.DefaultCenter.AddObserver( UIApplication.WillTerminateNotification, new Action(Application_WillTerminate)); } #region Notification Handling private void Application_WillTerminate(NSNotification notification) { // FIXME: Cleanly end the run loop. if (Game != null) { // TODO MonoGameGame.Terminate(); } } #endregion Notification Handling #region Helper Property private DisplayOrientation CurrentOrientation { get { #if TVOS return DisplayOrientation.LandscapeLeft; #else return OrientationConverter.ToDisplayOrientation(_gameWindow.ViewController.InterfaceOrientation); #endif } } #endregion private void ViewController_InterfaceOrientationChanged(object sender, EventArgs e) { var orientation = CurrentOrientation; // FIXME: The presentation parameters for the GraphicsDevice should // be managed by the GraphicsDevice itself. Not by ConcreteGame. var gdm = (GraphicsDeviceManager)Game.Services.GetService(typeof(IGraphicsDeviceManager)); TouchPanel.DisplayOrientation = orientation; if (gdm != null) { PresentationParameters presentParams = gdm.GraphicsDevice.PresentationParameters; presentParams.BackBufferWidth = gdm.PreferredBackBufferWidth; presentParams.BackBufferHeight = gdm.PreferredBackBufferHeight; presentParams.DisplayOrientation = orientation; // Recalculate our views. _gameWindow.ViewController.View.LayoutSubviews(); gdm.ApplyChanges(); } } } } ================================================ FILE: Platforms/Game/.iOS/ConcreteGameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform { public sealed class ConcreteGameFactory : GameFactory { public override GameStrategy CreateGameStrategy(Game game) { return new ConcreteGame(game); } public override GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game) { return new ConcreteGraphicsDeviceManager(game); } } } ================================================ FILE: Platforms/Game/.iOS/ConcreteGraphicsDeviceManager.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform { internal sealed class ConcreteGraphicsDeviceManager : GraphicsDeviceManagerStrategy { public ConcreteGraphicsDeviceManager(Game game) : base(game) { var clientBounds = base.Game.Window.ClientBounds; // Preferred buffer width/height is used to determine default supported orientations, // so set the default values to match Xna behaviour of landscape only by default. // Note also that it's using the device window dimensions. base.PreferredBackBufferWidth = Math.Max(clientBounds.Width, clientBounds.Height); base.PreferredBackBufferHeight = Math.Min(clientBounds.Height, clientBounds.Width); } public override bool PreferHalfPixelOffset { get { return base.PreferHalfPixelOffset; } set { //TODO: move the check in ApplyChanges if (base.GraphicsDevice != null) throw new InvalidOperationException("Setting PreferHalfPixelOffset is not allowed after the creation of GraphicsDevice."); base.PreferHalfPixelOffset = value; } } public override bool IsFullScreen { get { if (base.GraphicsDevice != null) return base.GraphicsDevice.PresentationParameters.IsFullScreen; return base.IsFullScreen; } set { base.IsFullScreen = value; if (base.GraphicsDevice != null) { base.GraphicsDevice.PresentationParameters.IsFullScreen = value; UIKit.UIApplication.SharedApplication.StatusBarHidden = base.GraphicsDevice.PresentationParameters.IsFullScreen; } } } public override DisplayOrientation SupportedOrientations { get { return base.SupportedOrientations; } set { base.SupportedOrientations = value; if (base.Game.Window != null) ((iOSGameWindow)base.Game.Window).ViewController.SupportedOrientations = value; } } public override void ToggleFullScreen() { this.IsFullScreen = !this.IsFullScreen; //ApplyChanges(); } public override void CreateDevice() { PresentationParameters pp = new PresentationParameters(); pp.DepthStencilFormat = DepthFormat.Depth24; { // Mainscreen.Bounds does not account for the device's orientation. it ALWAYS assumes portrait int width = (int)(UIKit.UIScreen.MainScreen.Bounds.Width * UIKit.UIScreen.MainScreen.Scale); int height = (int)(UIKit.UIScreen.MainScreen.Bounds.Height * UIKit.UIScreen.MainScreen.Scale); // Flip the dimensions if we need to. if (TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeLeft || TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeRight) { width = height; height = (int)(UIKit.UIScreen.MainScreen.Bounds.Width * UIKit.UIScreen.MainScreen.Scale); } pp.BackBufferWidth = width; pp.BackBufferHeight = height; } // force "full screen" as default on iOS pp.IsFullScreen = true; UIKit.UIApplication.SharedApplication.StatusBarHidden = pp.IsFullScreen; GraphicsDeviceInformation gdi = new GraphicsDeviceInformation(); gdi.GraphicsProfile = this.GraphicsProfile; // Microsoft defaults this to Reach. gdi.Adapter = GraphicsAdapter.DefaultAdapter; gdi.PresentationParameters = pp; var pe = new PreparingDeviceSettingsEventArgs(gdi); this.OnPreparingDeviceSettings(pe); pp = gdi.PresentationParameters; this.GraphicsProfile = gdi.GraphicsProfile; this.GraphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile, this.PreferHalfPixelOffset, pp); // ApplyChanges { base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation; bool isLandscape = ((base.Game.Window.CurrentOrientation & (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight)) != 0); int w = PreferredBackBufferWidth; int h = PreferredBackBufferHeight; base.GraphicsDevice.PresentationParameters.BackBufferWidth = isLandscape ? Math.Max(w, h) : Math.Min(w, h); base.GraphicsDevice.PresentationParameters.BackBufferHeight = isLandscape ? Math.Min(w, h) : Math.Max(w, h); } // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event... // we need to get those working. TouchPanel.DisplayWidth = this.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = this.GraphicsDevice.PresentationParameters.BackBufferHeight; TouchPanel.DisplayOrientation = this.GraphicsDevice.PresentationParameters.DisplayOrientation; this.OnDeviceCreated(EventArgs.Empty); ((iOSGameWindow)Game.Window).ViewController.View.LayoutSubviews(); PresentationParameters pp3 = this.GraphicsDevice.PresentationParameters; this.GraphicsDevice.Viewport = new Viewport(0, 0, pp3.BackBufferWidth, pp3.BackBufferHeight); } public override void ApplyChanges() { if (base.GraphicsDevice == null) { // TODO: Calling ApplyChanges() before Game.Initialize() should create the device. System.Diagnostics.Debug.Assert(false); //this.CreateDevice(); return; } base.GraphicsDevice.PresentationParameters.DisplayOrientation = base.Game.Window.CurrentOrientation; bool isLandscape = ((base.Game.Window.CurrentOrientation & (DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight)) != 0); int w = PreferredBackBufferWidth; int h = PreferredBackBufferHeight; base.GraphicsDevice.PresentationParameters.BackBufferWidth = isLandscape ? Math.Max(w, h) : Math.Min(w, h); base.GraphicsDevice.PresentationParameters.BackBufferHeight = isLandscape ? Math.Min(w, h) : Math.Max(w, h); // TODO: In XNA this seems to be done as part of the GraphicsDevice.DeviceReset event... // we need to get those working. TouchPanel.DisplayWidth = base.GraphicsDevice.PresentationParameters.BackBufferWidth; TouchPanel.DisplayHeight = base.GraphicsDevice.PresentationParameters.BackBufferHeight; } #region IGraphicsDeviceManager strategy public override bool BeginDraw() { //return base.BeginDraw(); return true; } public override void EndDraw() { //base.EndDraw(); } #endregion IGraphicsDeviceManager strategy } } ================================================ FILE: Platforms/Game/.iOS/IPlatformBackButton.tvOS.cs ================================================ using System; namespace Microsoft.Xna.Framework { /// /// Allows for platform specific handling of the Back button. /// public interface IPlatformBackButton { /// /// Return true if your game has handled the back button event /// return false if you want the operating system to handle it. /// bool Handled(); } } ================================================ FILE: Platforms/Game/.iOS/OrientationConverter.cs ================================================ #region License /* Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009-2011 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. */ #endregion using System; using UIKit; namespace Microsoft.Xna.Framework { public static class OrientationConverter { [CLSCompliant(false)] public static DisplayOrientation UIDeviceOrientationToDisplayOrientation(UIDeviceOrientation orientation) { switch (orientation) { case UIDeviceOrientation.FaceDown: return DisplayOrientation.Unknown; case UIDeviceOrientation.FaceUp: return DisplayOrientation.Unknown; default: // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! case UIDeviceOrientation.LandscapeLeft: return DisplayOrientation.LandscapeRight; case UIDeviceOrientation.LandscapeRight: return DisplayOrientation.LandscapeLeft; case UIDeviceOrientation.Portrait: return DisplayOrientation.Portrait; case UIDeviceOrientation.PortraitUpsideDown: return DisplayOrientation.PortraitDown; } } [CLSCompliant(false)] public static DisplayOrientation ToDisplayOrientation(UIInterfaceOrientation orientation) { switch (orientation) { default: // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! case UIInterfaceOrientation.LandscapeLeft: return DisplayOrientation.LandscapeRight; case UIInterfaceOrientation.LandscapeRight: return DisplayOrientation.LandscapeLeft; case UIInterfaceOrientation.Portrait: return DisplayOrientation.Portrait; case UIInterfaceOrientation.PortraitUpsideDown: return DisplayOrientation.PortraitDown; } } [CLSCompliant(false)] public static UIInterfaceOrientationMask ToUIInterfaceOrientationMask(DisplayOrientation orientation) { switch (Normalize(orientation)) { case((DisplayOrientation)0): case((DisplayOrientation)3): return UIInterfaceOrientationMask.Landscape; // NOTE: in XNA, Orientation Left is a 90 degree rotation counterclockwise, while on iOS // it is a 90 degree rotation CLOCKWISE. They are BACKWARDS! case((DisplayOrientation)2): return UIInterfaceOrientationMask.LandscapeLeft; case((DisplayOrientation)1): return UIInterfaceOrientationMask.LandscapeRight; case((DisplayOrientation)4): return UIInterfaceOrientationMask.Portrait; case((DisplayOrientation)8): return UIInterfaceOrientationMask.PortraitUpsideDown; case((DisplayOrientation)7): return UIInterfaceOrientationMask.AllButUpsideDown; default: return UIInterfaceOrientationMask.All; } } public static DisplayOrientation Normalize(DisplayOrientation orientation) { var normalized = orientation; // Xna's "default" displayorientation is Landscape Left/Right. if (normalized == DisplayOrientation.Default) { normalized |= DisplayOrientation.LandscapeLeft; normalized |= DisplayOrientation.LandscapeRight; normalized &= ~DisplayOrientation.Default; } return normalized; } } } ================================================ FILE: Platforms/Game/.iOS/iOSGameView.cs ================================================ #region License /* Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009-2012 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. */ #endregion License using System; using System.Drawing; using CoreAnimation; using Foundation; using ObjCRuntime; using OpenGLES; using UIKit; using CoreGraphics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework { [Register("iOSGameView")] partial class iOSGameView : UIView { private readonly ConcreteGame _concreteGame; private int _colorbuffer; private int _depthbuffer; private int _framebuffer; #region Construction/Destruction public iOSGameView(ConcreteGame concreteGame, CGRect frame) : base(frame) { if (concreteGame == null) throw new ArgumentNullException("concreteGame"); _concreteGame = concreteGame; #if !TVOS MultipleTouchEnabled = true; #endif Opaque = true; } protected override void Dispose(bool disposing) { if (disposing) { if (_eaglContext != null) { AssertNotDisposed(); _eaglContext.Dispose(); _eaglContext = null; _glapi = null; } } base.Dispose(disposing); _isDisposed = true; } #endregion Construction/Destruction #region Properties private bool _isDisposed; public bool IsDisposed { get { return _isDisposed; } } #endregion Properties [Export("layerClass")] public static Class GetLayerClass() { return new Class(typeof(CAEAGLLayer)); } public override bool CanBecomeFirstResponder { get { return true; } } private new CAEAGLLayer Layer { get { return base.Layer as CAEAGLLayer; } } //TODO: Move _eaglContext into an iOS-specific GraphicsContext internal EAGLContext _eaglContext; private OGL _glapi; private void CreateGLContext() { AssertNotDisposed(); // RetainedBacking controls if the content of the colorbuffer should be preserved after being displayed // This is the XNA equivalent to set PreserveContent when initializing the GraphicsDevice // (should be false by default for better performance) Layer.DrawableProperties = NSDictionary.FromObjectsAndKeys( new NSObject[] { NSNumber.FromBoolean(false), EAGLColorFormat.RGBA8 }, new NSObject[] { EAGLDrawableProperty.RetainedBacking, EAGLDrawableProperty.ColorFormat }); Layer.ContentsScale = Window.Screen.Scale; //var strVersion = OpenTK.Graphics.ES11.GL.GetString(OpenTK.Graphics.ES11.All.Version); //strVersion = OpenTK.Graphics.ES20.GL.GetString(OpenTK.Graphics.ES20.All.Version); //var version = Version.Parse(strVersion); try { try { _eaglContext = new EAGLContext(EAGLRenderingAPI.OpenGLES3); } catch { // Fall back to GLES 2.0 _eaglContext = new EAGLContext(EAGLRenderingAPI.OpenGLES2); } //new GraphicsContext(null, null, 2, 0, GraphicsContextFlags.Embedded) } catch (Exception ex) { throw new Exception("Device not Supported. GLES 2.0 or above is required!"); } this.MakeCurrent(); OGL_IOS.Initialize(); OGL_IOS.Current.InitExtensions(); _glapi = OGL.Current; } [Export("doTick")] void DoTick() { _concreteGame.iOSTick(); } private void CreateFramebuffer() { this.MakeCurrent(); var GL = OGL.Current; // HACK: GraphicsDevice itself should be calling // glViewport, so we shouldn't need to do it // here and then force the state into // GraphicsDevice. However, that change is a // ways off, yet. int viewportHeight = (int)Math.Round(Layer.Bounds.Size.Height * Layer.ContentsScale); int viewportWidth = (int)Math.Round(Layer.Bounds.Size.Width * Layer.ContentsScale); _framebuffer = _glapi.GenFramebuffer(); _glapi.BindFramebuffer(FramebufferTarget.Framebuffer, _framebuffer); // Create our Depth buffer. Color buffer must be the last one bound GraphicsDeviceManager gdm = _concreteGame.Services.GetService(typeof(IGraphicsDeviceManager)) as GraphicsDeviceManager; if (gdm != null) { DepthFormat preferredDepthFormat = gdm.PreferredDepthStencilFormat; if (preferredDepthFormat != DepthFormat.None) { _depthbuffer = GL.GenRenderbuffer(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _depthbuffer); RenderbufferStorage internalFormat = RenderbufferStorage.DepthComponent16; if (preferredDepthFormat == DepthFormat.Depth24) internalFormat = RenderbufferStorage.DepthComponent24oes; else if (preferredDepthFormat == DepthFormat.Depth24Stencil8) internalFormat = RenderbufferStorage.Depth24Stencil8oes; GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, internalFormat, viewportWidth, viewportHeight); GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, _depthbuffer); if (preferredDepthFormat == DepthFormat.Depth24Stencil8) GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.StencilAttachment, RenderbufferTarget.Renderbuffer, _depthbuffer); } } _colorbuffer = _glapi.GenRenderbuffer(); _glapi.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _colorbuffer); // TODO: EAGLContext.RenderBufferStorage returns false // on all but the first call. Nevertheless, it // works. Still, it would be nice to know why it // claims to have failed. _eaglContext.RenderBufferStorage((uint)RenderbufferTarget.Renderbuffer, Layer); _glapi.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, RenderbufferTarget.Renderbuffer, _colorbuffer); FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (status != FramebufferErrorCode.FramebufferComplete) throw new InvalidOperationException("Framebuffer was not created correctly: " + status); _glapi.Viewport(0, 0, viewportWidth, viewportHeight); _glapi.Scissor(0, 0, viewportWidth, viewportHeight); IGraphicsDeviceService gds = _concreteGame.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (gds != null && gds.GraphicsDevice != null) { PresentationParameters pp = gds.GraphicsDevice.PresentationParameters; int height = viewportHeight; int width = viewportWidth; if (this.NextResponder is iOSGameViewController) { DisplayOrientation displayOrientation = _concreteGame.Game.Window.CurrentOrientation; if (displayOrientation == DisplayOrientation.LandscapeLeft || displayOrientation == DisplayOrientation.LandscapeRight) { height = Math.Min(viewportHeight, viewportWidth); width = Math.Max(viewportHeight, viewportWidth); } else { height = Math.Max(viewportHeight, viewportWidth); width = Math.Min(viewportHeight, viewportWidth); } } pp.BackBufferWidth = width; pp.BackBufferHeight = height; gds.GraphicsDevice.Viewport = new Viewport(0, 0, pp.BackBufferWidth, pp.BackBufferHeight); ((IPlatformGraphicsDevice)gds.GraphicsDevice).Strategy.ToConcrete()._glDefaultFramebuffer = _framebuffer; } } private void DestroyFramebuffer() { AssertNotDisposed(); AssertValidContext(); if (!EAGLContext.SetCurrentContext(_eaglContext)) throw new InvalidOperationException("Unable to change current EAGLContext."); _glapi.DeleteFramebuffer(_framebuffer); _framebuffer = 0; _glapi.DeleteRenderbuffer(_colorbuffer); _colorbuffer = 0; if (_depthbuffer != 0) { _glapi.DeleteRenderbuffer(_depthbuffer); _depthbuffer = 0; } } private static readonly FramebufferAttachment[] attachements = new FramebufferAttachment[] { FramebufferAttachment.DepthAttachment, FramebufferAttachment.StencilAttachment }; // FIXME: This logic belongs in GraphicsDevice.Present, not // here. If it can someday be moved there, then the // normal call to Present in Game.Tick should cover // this. For now, ConcreteGame will call Present // in the Draw/Update loop handler. public void Present() { var GL = OGL.Current; AssertNotDisposed(); AssertValidContext(); this.MakeCurrent(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, this._colorbuffer); GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer, 2, attachements); if (!_eaglContext.PresentRenderBuffer(36161u)) throw new InvalidOperationException("EAGLContext.PresentRenderbuffer failed."); } // FIXME: This functionality belongs in GraphicsDevice. public void MakeCurrent() { AssertNotDisposed(); AssertValidContext(); if (EAGLContext.CurrentContext != _eaglContext) { if (!EAGLContext.SetCurrentContext(_eaglContext)) throw new InvalidOperationException("Unable to change current EAGLContext."); } } public override void LayoutSubviews() { base.LayoutSubviews(); IGraphicsDeviceService gds = _concreteGame.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (gds != null && gds.GraphicsDevice != null) { if (_framebuffer != 0) DestroyFramebuffer(); if (_eaglContext == null) CreateGLContext(); CreateFramebuffer(); } } #region UIWindow Notifications [Export("didMoveToWindow")] public virtual void DidMoveToWindow() { if (Window != null) { if (_eaglContext == null) CreateGLContext(); if (_framebuffer == 0) CreateFramebuffer(); } } #endregion UIWindow Notifications private void AssertNotDisposed() { if (_isDisposed) throw new ObjectDisposedException(GetType().Name); } private void AssertValidContext() { if (_eaglContext == null) throw new InvalidOperationException("_eaglContext must be created for this operation to succeed."); } } } ================================================ FILE: Platforms/Game/.iOS/iOSGameViewController.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using UIKit; using Foundation; using CoreGraphics; using ObjCRuntime; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { class iOSGameViewController : #if TVOS GameController.GCEventViewController #else UIViewController #endif { ConcreteGame _concreteGame; #if TVOS IPlatformBackButton platformBackButton; #endif public iOSGameViewController(ConcreteGame concreteGame) { if (concreteGame == null) throw new ArgumentNullException("concreteGame"); _concreteGame = concreteGame; SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight | DisplayOrientation.Portrait | DisplayOrientation.PortraitDown; } public event EventHandler InterfaceOrientationChanged; public DisplayOrientation SupportedOrientations { get; set; } public override void LoadView() { CGRect frame; if (ParentViewController != null && ParentViewController.View != null) { frame = new CGRect(CGPoint.Empty, ParentViewController.View.Frame.Size); } else { UIScreen screen = UIScreen.MainScreen; #if !TVOS // iOS 7 and older reverses width/height in landscape mode when reporting resolution, // iOS 8+ reports resolution correctly in all cases if (InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || InterfaceOrientation == UIInterfaceOrientation.LandscapeRight) { frame = new CGRect(0, 0, (double)Math.Max(screen.Bounds.Width, screen.Bounds.Height), (double)Math.Min(screen.Bounds.Width, screen.Bounds.Height)); } else { frame = new CGRect(0, 0, screen.Bounds.Width, screen.Bounds.Height); } #else frame = new CGRect(0, 0, screen.Bounds.Width, screen.Bounds.Height); #endif } base.View = new iOSGameView(_concreteGame, frame); // Need to set resize mask to ensure a view resize (which in iOS 8+ corresponds with a rotation) adjusts // the view and underlying CALayer correctly View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; #if TVOS ControllerUserInteractionEnabled = false; #endif } public new iOSGameView View { get { return (iOSGameView)base.View; } } #if !TVOS #region Autorotation for iOS 5 or older public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation) { DisplayOrientation supportedOrientations = OrientationConverter.Normalize(SupportedOrientations); var toOrientation = OrientationConverter.ToDisplayOrientation(toInterfaceOrientation); return (toOrientation & supportedOrientations) == toOrientation; } #endregion #region Autorotation for iOS 6 or newer public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations() { return OrientationConverter.ToUIInterfaceOrientationMask(this.SupportedOrientations); } public override bool ShouldAutorotate() { return true; } #endregion public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation) { base.DidRotate(fromInterfaceOrientation); var handler = InterfaceOrientationChanged; if (handler != null) handler(this, EventArgs.Empty); } #region Hide statusbar for iOS 7 or newer public override bool PrefersStatusBarHidden() { GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; return gdm.IsFullScreen; } #endregion #region iOS 8 or newer public override void ViewWillTransitionToSize(CGSize toSize, IUIViewControllerTransitionCoordinator coordinator) { CGSize oldSize = View.Bounds.Size; if (oldSize != toSize) { UIInterfaceOrientation prevOrientation = InterfaceOrientation; // In iOS 8+ DidRotate is no longer called after a rotation // But we need to notify ConcreteGame to update back buffer so we explicitly call it // We do this within the animateAlongside action, which at the point of calling // will have the new InterfaceOrientation set coordinator.AnimateAlongsideTransition((context) => { DidRotate(prevOrientation); }, (context) => { }); } base.ViewWillTransitionToSize(toSize, coordinator); } #endregion #region iOS 11 or newer /// /// Defer system gestures on all screen edges in full screen mode. /// public override UIRectEdge PreferredScreenEdgesDeferringSystemGestures { get { GraphicsDeviceManager gdm = _concreteGame.GraphicsDeviceManager; return gdm.IsFullScreen ? UIRectEdge.All : base.PreferredScreenEdgesDeferringSystemGestures; } } #endregion #endif #if TVOS public override UIView PreferredFocusedView { get { return this.View; } } public override void PressesBegan(NSSet presses, UIPressesEvent evt) { if (presses.Count == 0) return; foreach (UIPress press in presses) { if (press.Type == UIPressType.Menu) { if (platformBackButton == null) platformBackButton = _concreteGame.Services.GetService(); if (platformBackButton != null) { if (!platformBackButton.Handled()) { ControllerUserInteractionEnabled = true; } else { Microsoft.Xna.Framework.Input.GamePad.MenuPressed = true; } } else { ControllerUserInteractionEnabled = true; } } } if (ControllerUserInteractionEnabled) base.PressesBegan(presses, evt); } public override void PressesEnded(NSSet presses, UIPressesEvent evt) { if (ControllerUserInteractionEnabled) base.PressesEnded(presses, evt); } #endif } } ================================================ FILE: Platforms/Game/.iOS/iOSGameView_Touch.cs ================================================ #region License /* Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009-2012 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. */ #endregion License using System; using System.Collections.Generic; using System.Drawing; using Foundation; using ObjCRuntime; using UIKit; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Framework { partial class iOSGameView { static GestureType EnabledGestures { get { return TouchPanel.EnabledGestures; } } #region Touches public override void TouchesBegan(NSSet touches, UIEvent evt) { base.TouchesBegan(touches, evt); FillTouchCollection(touches); } public override void TouchesEnded(NSSet touches, UIEvent evt) { base.TouchesEnded(touches, evt); FillTouchCollection(touches); } public override void TouchesMoved(NSSet touches, UIEvent evt) { base.TouchesMoved(touches, evt); FillTouchCollection(touches); } public override void TouchesCancelled(NSSet touches, UIEvent evt) { base.TouchesCancelled(touches, evt); FillTouchCollection(touches); } // TODO: Review FillTouchCollection private void FillTouchCollection(NSSet touches) { if ((long)touches.Count == 0) return; var touchesArray = touches.ToArray(); for (int i = 0; i < touchesArray.Length; ++i) { var touch = touchesArray [i]; //Get position touch var location = touch.LocationInView(touch.View); var position = GetOffsetPosition(new Vector2 ((float)location.X, (float)location.Y), true); var id = (int)(long)(IntPtr)touch.Handle; switch (touch.Phase) { case UITouchPhase.Began: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(id, position); break; //case UITouchPhase.Stationary: case UITouchPhase.Moved: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(id, position); break; case UITouchPhase.Ended: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(id, position); break; case UITouchPhase.Cancelled: ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddCanceledEvent(id, position); break; default: break; } } } // TODO: Review GetOffsetPosition, hopefully it can be removed now. public Vector2 GetOffsetPosition(Vector2 position, bool useScale) { if (useScale) return position * (float)Layer.ContentsScale; return position; } #endregion Touches } } ================================================ FILE: Platforms/Game/.iOS/iOSGameWindow.cs ================================================ #region License /* Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009-2012 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. */ #endregion License using System; using System.Collections.Generic; using Microsoft.Xna.Platform; using Foundation; using UIKit; namespace Microsoft.Xna.Framework { class iOSGameWindow : GameWindow, IDisposable { private static Dictionary _instances = new Dictionary(); internal static iOSGameWindow FromHandle(IntPtr windowHandle) { return _instances[windowHandle]; } private iOSGameViewController _viewController; private UIWindow _uiWindow; internal iOSGameViewController ViewController { get { return _viewController; } } internal UIWindow UIWindow { get { return _uiWindow; } } private NSObject DidBecomeActiveHolder; private NSObject WillResignActiveHolder; public iOSGameWindow(ConcreteGame concreteGame) { #if !TVOS UIApplication.SharedApplication.SetStatusBarHidden(true, UIStatusBarAnimation.Fade); #endif // Create a full-screen window _uiWindow = new UIWindow(UIScreen.MainScreen.Bounds); //_uiKitWindow.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions; concreteGame.Services.AddService(typeof(UIWindow), _uiWindow); _viewController = new iOSGameViewController(concreteGame); concreteGame.Services.AddService(typeof(UIViewController), _viewController); _viewController.InterfaceOrientationChanged += HandleInterfaceOrientationChanged; _instances.Add(this.Handle, this); } ~iOSGameWindow() { Dispose(false); } void HandleInterfaceOrientationChanged(object sender, EventArgs e) { OnOrientationChanged(); } #region GameWindow Members public override bool AllowUserResizing { get { return false; } set { /* Ignore */ } } public override Rectangle ClientBounds { get { var bounds = _viewController.View.Bounds; var scale = _viewController.View.ContentScaleFactor; // TODO: Calculate this only when dirty. if (_viewController is iOSGameViewController) { var currentOrientation = CurrentOrientation; int width; int height; if (currentOrientation == DisplayOrientation.LandscapeLeft || currentOrientation == DisplayOrientation.LandscapeRight) { width = (int)Math.Max(bounds.Width, bounds.Height); height = (int)Math.Min(bounds.Width, bounds.Height); } else { width = (int)Math.Min(bounds.Width, bounds.Height); height = (int)Math.Max(bounds.Width, bounds.Height); } width *= (int)scale; height *= (int)scale; return new Rectangle( (int)(bounds.X * scale), (int)(bounds.Y * scale), width, height); } return new Rectangle( (int)(bounds.X * scale), (int)(bounds.Y * scale), (int)(bounds.Width * scale), (int)(bounds.Height * scale)); } } public override DisplayOrientation CurrentOrientation { get { #if TVOS return DisplayOrientation.LandscapeLeft; #else return OrientationConverter.ToDisplayOrientation(_viewController.InterfaceOrientation); #endif } } public override IntPtr Handle { get { // TODO: Verify that View.Handle is a sensible // value to return here. return _viewController.View.Handle; } } public override string ScreenDeviceName { get { var screen = _viewController.View.Window.Screen; if (screen == UIScreen.MainScreen) return "Main Display"; else return "External Display"; } } protected override void SetTitle(string title) { _viewController.Title = title; } #endregion GameWindow Members internal void BeginObservingUIApplication() { DidBecomeActiveHolder = NSNotificationCenter.DefaultCenter.AddObserver( UIApplication.DidBecomeActiveNotification, new Action(Application_DidBecomeActive)); WillResignActiveHolder = NSNotificationCenter.DefaultCenter.AddObserver( UIApplication.WillResignActiveNotification, new Action(Application_WillResignActive)); } #region Notification Handling private void Application_DidBecomeActive(NSNotification notification) { OnActivated(); #if TVOS _viewController.ControllerUserInteractionEnabled = false; #endif //TouchPanel.Reset(); } private void Application_WillResignActive(NSNotification notification) { OnDeactivated(); } #endregion Notification Handling public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { if (_viewController != null) { _viewController.View.RemoveFromSuperview(); _viewController.RemoveFromParentViewController(); _viewController.Dispose(); _viewController = null; } if (_uiWindow != null) { _uiWindow.Dispose(); _uiWindow = null; } } } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas; using nkast.Wasm.Canvas.WebGL; using nkast.Wasm.Dom; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { private DisplayModeCollection _supportedDisplayModes; private DisplayMode _currentDisplayMode; private string _description = string.Empty; public override string Platform_DeviceName { get { throw new NotImplementedException(); } } public override string Platform_Description { get { return _description; } set { _description = value; } } public override int Platform_DeviceId { get { throw new NotImplementedException(); } } public override int Platform_Revision { get { throw new NotImplementedException(); } } public override int Platform_VendorId { get { throw new NotImplementedException(); } } public override int Platform_SubSystemId { get { throw new NotImplementedException(); } } public override IntPtr Platform_MonitorHandle { get { throw new NotImplementedException(); } } public override bool Platform_IsDefaultAdapter { get { return base.Platform_IsDefaultAdapter; } set { base.Platform_IsDefaultAdapter = value; } } public override DisplayModeCollection Platform_SupportedDisplayModes { get { throw new NotImplementedException(); } } public override DisplayMode Platform_CurrentDisplayMode { get { return _currentDisplayMode; } } public override bool Platform_IsWideScreen { // Common non-widescreen modes: 4:3, 5:4, 1:1 // Common widescreen modes: 16:9, 16:10, 2:1 // XNA does not appear to account for rotated displays on the desktop get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); } } public override GraphicsBackend Backend { get { return GraphicsBackend.WebGL; } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { switch (shaderBackend) { case GraphicsBackend.GLES: //case GraphicsBackend.WebGL: return true; default: return false; } } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { switch (shaderProfile) { case ShaderProfileType.OpenGL_Mojo: return true; default: return false; } } internal ConcreteGraphicsAdapter() { _currentDisplayMode = base.CreateDisplayMode(800, 600, SurfaceFormat.Color); } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) return true; switch (graphicsProfile) { case GraphicsProfile.Reach: return true; case GraphicsProfile.HiDef: using (OffscreenCanvas oc = new OffscreenCanvas(1, 1)) { IWebGL2RenderingContext webgl2 = oc.GetContext(); return (webgl2 != null); } case GraphicsProfile.FL10_0: using (OffscreenCanvas oc = new OffscreenCanvas(1, 1)) { IWebGL2RenderingContext webgl2 = oc.GetContext(); if (webgl2 == null) return false; int maxTextureSize = webgl2.GetParameter(WebGL2PNameInteger.MAX_TEXTURE_SIZE); if (maxTextureSize < 8192) return false; return true; } case GraphicsProfile.FL10_1: return false; case GraphicsProfile.FL11_0: return false; case GraphicsProfile.FL11_1: return false; default: throw new InvalidOperationException(); } } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { selectedFormat = format; selectedDepthFormat = depthFormat; selectedMultiSampleCount = multiSampleCount; // fallback for unsupported renderTarget surface formats. if (selectedFormat == SurfaceFormat.Alpha8 || selectedFormat == SurfaceFormat.NormalizedByte2 || selectedFormat == SurfaceFormat.NormalizedByte4 || selectedFormat == SurfaceFormat.Dxt1 || selectedFormat == SurfaceFormat.Dxt3 || selectedFormat == SurfaceFormat.Dxt5 || selectedFormat == SurfaceFormat.Dxt1a || selectedFormat == SurfaceFormat.Dxt1SRgb || selectedFormat == SurfaceFormat.Dxt3SRgb || selectedFormat == SurfaceFormat.Dxt5SRgb) selectedFormat = SurfaceFormat.Color; // fallback for unsupported renderTarget surface formats on Reach profile. if (graphicsProfile == GraphicsProfile.Reach) { if (selectedFormat == SurfaceFormat.HalfSingle || selectedFormat == SurfaceFormat.HalfVector2 || selectedFormat == SurfaceFormat.HalfVector4 || selectedFormat == SurfaceFormat.HdrBlendable || selectedFormat == SurfaceFormat.Rg32 || selectedFormat == SurfaceFormat.Rgba1010102 || selectedFormat == SurfaceFormat.Rgba64 || selectedFormat == SurfaceFormat.Single || selectedFormat == SurfaceFormat.Vector2 || selectedFormat == SurfaceFormat.Vector4) selectedFormat = SurfaceFormat.Color; } return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsAdaptersProvider.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { private ReadOnlyCollection _adapters; public ConcreteGraphicsAdaptersProvider() { List adapterList = CreateAdapterList(); _adapters = new ReadOnlyCollection(adapterList); } private List CreateAdapterList() { List adapterList = new List(1); ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(); GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy); adapterList.Add(adapter); // The first adapter is considered the default. ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true; return adapterList; } public override ReadOnlyCollection Platform_Adapters { get { return _adapters; } } public override GraphicsAdapter Platform_DefaultAdapter { get { return _adapters[0]; } } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsCapabilities.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities { private int _maxDrawBuffers; internal int MaxDrawBuffers { get { return _maxDrawBuffers; } } internal void PlatformInitialize(ConcreteGraphicsContext cgraphicsContext, GraphicsDeviceStrategy deviceStrategy) { IWebGLRenderingContext GL = cgraphicsContext.GL; GraphicsProfile profile = deviceStrategy.GraphicsProfile; _maxTextureSize = 2048; if (profile == GraphicsProfile.HiDef) _maxTextureSize = 4096; if (profile == GraphicsProfile.FL10_0) _maxTextureSize = 8192; if (profile == GraphicsProfile.FL10_1) _maxTextureSize = 8192; if (profile == GraphicsProfile.FL11_0) _maxTextureSize = 16384; if (profile == GraphicsProfile.FL11_1) _maxTextureSize = 16384; SupportsTextureFilterAnisotropic = false; // TODO: check for TEXTURE_MAX_ANISOTROPY_EXT SupportsDepth24 = false; SupportsPackedDepthStencil = false; SupportsDepthNonLinear = false; SupportsTextureMaxLevel = false; // 16bit textures SupportsBgra5551 = false; SupportsBgra4444 = false; SupportsAbgr5551 = true; SupportsAbgr4444 = true; // Texture compression SupportsS3tc = GL.GetExtension("WEBGL_compressed_texture_s3tc"); SupportsDxt1 = GL.GetExtension("WEBGL_compressed_texture_s3tc"); SupportsSRgb = true; SupportsTextureArrays = profile >= GraphicsProfile.HiDef; //SupportsDepthClamp = profile >= GraphicsProfile.HiDef; SupportsFloatTextures = (profile >= GraphicsProfile.HiDef) ? GL.GetExtension("EXT_color_buffer_float") : false; SupportsHalfFloatTextures = profile >= GraphicsProfile.HiDef; SupportsNormalized = profile >= GraphicsProfile.HiDef; _maxTextureSlots = 8; _maxVertexTextureSlots = 0; // fix for bad GL drivers int maxCombinedTextureImageUnits; maxCombinedTextureImageUnits = 8; _maxTextureSlots = Math.Min(_maxTextureSlots, maxCombinedTextureImageUnits); _maxVertexTextureSlots = Math.Min(_maxVertexTextureSlots, maxCombinedTextureImageUnits); // limit texture slots to Reach profile limit until we implement profile detection. _maxTextureSlots = Math.Min(_maxTextureSlots, 16); _maxVertexTextureSlots = Math.Min(_maxTextureSlots, 0); // disable vertex textures until we implement it in WebGL. _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16; SupportsInstancing = profile >= GraphicsProfile.HiDef; //TNC: TODO: detect suport based on feture level SupportsBaseIndexInstancing = false; SupportsSeparateBlendStates = true; MaxTextureAnisotropy = (profile == GraphicsProfile.Reach) ? 2 : 16; if (profile >= GraphicsProfile.HiDef) _maxDrawBuffers = 4; } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsContext.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy { private IWebGLRenderingContext _glContext; private WebGL2DrawBufferAttachmentPoint[] _drawBuffers; // Keeps track of last applied state to avoid redundant OpenGL calls internal BlendState _lastBlendState = new BlendState(); internal bool _lastBlendEnable = false; internal DepthStencilState _lastDepthStencilState = new DepthStencilState(); internal RasterizerState _lastRasterizerState = new RasterizerState(); internal ShaderProgram _shaderProgram = null; private Vector4 _posFixup; internal BufferBindingInfo[] _bufferBindingInfos; private int _activeBufferBindingInfosCount; internal bool[] _newEnabledVertexAttributes; private readonly HashSet _enabledVertexAttributesSet = new HashSet(); private int _lastVertexAttribs; // 0 = dirty, 1 = last set by PlatformApplyVertexBuffers, 2 = last set by PlatformApplyUserVertexData private DepthStencilState _clearDepthStencilState = new DepthStencilState { StencilEnable = true }; // FBO cache, we create 1 FBO per RenderTargetBinding combination internal Dictionary _glFramebuffers = new Dictionary(new RenderTargetBindingArrayComparer()); // FBO cache used to resolve MSAA rendertargets, we create 1 FBO per RenderTargetBinding combination internal Dictionary _glResolveFramebuffers = new Dictionary(new RenderTargetBindingArrayComparer()); internal bool FramebufferRequireFlippedY { get { return (base.RenderTargetCount > 0); } } internal IWebGLRenderingContext GlContext { get { return _glContext; } } internal IWebGLRenderingContext GL { get { return _glContext; } } public override Viewport Viewport { get { return base.Viewport; } set { base.Viewport = value; PlatformApplyViewport(); } } internal ConcreteGraphicsContext(GraphicsContext context, IWebGLRenderingContext glContext) : base(context) { _glContext = glContext; //_glContext = new LogContent(_glContext); base._capabilities = new ConcreteGraphicsCapabilities(); ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize( this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy ); base.Initialize(this.Capabilities); this.PlatformSetup(); } public override void PlatformSetup() { this._newEnabledVertexAttributes = new bool[base.Capabilities.MaxVertexBufferSlots]; this._bufferBindingInfos = new BufferBindingInfo[base.Capabilities.MaxVertexBufferSlots]; for (int i = 0; i < this._bufferBindingInfos.Length; i++) this._bufferBindingInfos[i] = new BufferBindingInfo(null, null, IntPtr.Zero, 0); // Force resetting states ((IPlatformBlendState)base._actualBlendState).GetStrategy().PlatformApplyState(this, true); ((IPlatformDepthStencilState)base._actualDepthStencilState).GetStrategy().PlatformApplyState(this, true); ((IPlatformRasterizerState)base._actualRasterizerState).GetStrategy().PlatformApplyState(this, true); // Initialize draw buffer attachment array this._drawBuffers = new WebGL2DrawBufferAttachmentPoint[((ConcreteGraphicsCapabilities)base.Capabilities).MaxDrawBuffers]; for (int i = 0; i < this._drawBuffers.Length; i++) this._drawBuffers[i] = (WebGL2DrawBufferAttachmentPoint)(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i); } public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { // TODO: We need to figure out how to detect if we have a // depth stencil buffer or not, and clear options relating // to them if not attached. // Unlike with XNA and DirectX... GL.Clear() obeys several // different render states: // // - The color write flags. // - The scissor rectangle. // - The depth/stencil state. // // So overwrite these states with what is needed to perform // the clear correctly and restore it afterwards. // DepthStencilState prevDepthStencilState = this.DepthStencilState; BlendState prevBlendState = this.BlendState; // DepthStencilState.Default has the Stencil Test disabled; // make sure stencil test is enabled before we clear since // some drivers won't clear with stencil test disabled this.DepthStencilState = _clearDepthStencilState; this.BlendState = BlendState.Opaque; PlatformApplyState(); if (_lastRasterizerState.ScissorTestEnable) { GL.Disable(WebGLCapability.SCISSOR_TEST); GL.CheckGLError(); _lastRasterizerState.ScissorTestEnable = false; _rasterizerStateDirty = true; } WebGLBufferBits bb = default(WebGLBufferBits); if ((options & ClearOptions.Target) != 0) { GL.ClearColor(color.X, color.Y, color.Z, color.W); GL.CheckGLError(); bb |= WebGLBufferBits.COLOR; } if ((options & ClearOptions.DepthBuffer) != 0) { GL.ClearDepth(depth); GL.CheckGLError(); bb |= WebGLBufferBits.DEPTH; } if ((options & ClearOptions.Stencil) != 0) { GL.ClearStencil(stencil); GL.CheckGLError(); bb |= WebGLBufferBits.STENCIL; } GL.Clear(bb); GL.CheckGLError(); base.Metrics_AddClearCount(); // Restore the previous render state. DepthStencilState = prevDepthStencilState; BlendState = prevBlendState; } private void PlatformApplyState() { //this.EnsureContextCurrentThread(); { PlatformApplyBlend(); } if (_depthStencilStateDirty) { ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy().PlatformApplyState(this); _depthStencilStateDirty = false; } if (_rasterizerStateDirty) { ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy().PlatformApplyState(this); _rasterizerStateDirty = false; } if (_scissorRectangleDirty) { PlatformApplyScissorRectangle(); _scissorRectangleDirty = false; } } private void PlatformApplyBlend() { if (_blendStateDirty) { ((IPlatformBlendState)_actualBlendState).GetStrategy().PlatformApplyState(this); _blendStateDirty = false; } if (_blendFactorDirty) { GL.BlendColor( this.BlendFactor.R / 255.0f, this.BlendFactor.G / 255.0f, this.BlendFactor.B / 255.0f, this.BlendFactor.A / 255.0f); GL.CheckGLError(); _blendFactorDirty = false; } } private void PlatformApplyScissorRectangle() { if (this.FramebufferRequireFlippedY) { GL.Scissor(_scissorRectangle.X, _scissorRectangle.Y, _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } else if (this.IsRenderTargetBound) { int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height; GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } else { int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight; GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } } internal void PlatformApplyViewport() { if (this.FramebufferRequireFlippedY) { GL.Viewport(_viewport.X, _viewport.Y, _viewport.Width, _viewport.Height); GL.CheckGLError(); // GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } else if (this.IsRenderTargetBound) { int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height; GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height); GL.CheckGLError(); // GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } else { int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight; GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height); GL.CheckGLError(); // GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } GL.DepthRange(_viewport.MinDepth, _viewport.MaxDepth); //GL.CheckGLError(); // GL.LogGLError("GraphicsDevice.Viewport_set() GL.DepthRange"); // In OpenGL we have to re-apply the special "_posFixup" // vertex shader uniform if the viewport changes. _vertexShaderDirty = true; } private void PlatformApplyIndexBuffer() { if (_indexBufferDirty) { GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().GLIndexBuffer); GL.CheckGLError(); _indexBufferDirty = false; } } private void PlatformApplyShaders() { ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); ConcretePixelShader cpixelShader = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete(); if (_vertexShaderDirty || _pixelShaderDirty) { ActivateShaderProgram(cvertexShader, cpixelShader); ApplyPosFixup(_shaderProgram); if (_vertexShaderDirty) { base.Metrics_AddVertexShaderCount(); } if (_pixelShaderDirty) { base.Metrics_AddPixelShaderCount(); } _vertexShaderDirty = false; _pixelShaderDirty = false; } // Apply Constant Buffers PlatformApplyConstantBuffers(cvertexShader, _shaderProgram, ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete()); PlatformApplyConstantBuffers(cpixelShader, _shaderProgram, ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete()); // Apply Shader Texture and Samplers PlatformApplyTexturesAndSamplers(cvertexShader, ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete()); PlatformApplyTexturesAndSamplers(cpixelShader, ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete()); } private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, ShaderProgram shaderProgram, ConcreteConstantBufferCollection cconstantBufferCollection) { uint validMask = cconstantBufferCollection.InternalValid; for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++) { uint mask = ((uint)1) << slot; ConstantBuffer constantBuffer = cconstantBufferCollection[slot]; if (constantBuffer != null && !constantBuffer.IsDisposed) { ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete(); constantBufferStrategy.PlatformApply(this, shaderProgram, slot); } // clear buffer bit validMask &= ~mask; } } private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection) { int texturesCount = ctextureCollection.Length; // Apply Textures for (int slot = 0; ctextureCollection.InternalDirty != 0 && slot < texturesCount; slot++) { uint mask = ((uint)1) << slot; if ((ctextureCollection.InternalDirty & mask) != 0) { Texture texture = ctextureCollection[slot]; if (texture != null) { ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy(); // Clear the previous binding if the target is different from the new one. WebGLTextureTarget prevTarget = ctextureCollection._targets[slot]; if (prevTarget != 0 && prevTarget != ctexture._glTarget) { GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot); GL.CheckGLError(); GL.BindTexture(prevTarget, null); ctextureCollection._targets[slot] = 0; GL.CheckGLError(); } GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot); GL.CheckGLError(); ctextureCollection._targets[slot] = ctexture._glTarget; GL.BindTexture(ctexture._glTarget, ctexture._glTexture); GL.CheckGLError(); this.Metrics_AddTextureCount(); } else // (texture == null) { // Clear the previous binding if the target is different from the new one. WebGLTextureTarget prevTarget = ctextureCollection._targets[slot]; if (prevTarget != 0) { GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot); GL.CheckGLError(); GL.BindTexture(prevTarget, null); ctextureCollection._targets[slot] = 0; GL.CheckGLError(); } } // clear texture bit ctextureCollection.InternalDirty &= ~mask; } } // Check Samplers GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile; if (graphicsProfile == GraphicsProfile.Reach) { for (int i = 0; i < cshader.Samplers.Length; i++) { int textureSlot = cshader.Samplers[i].textureSlot; int samplerSlot = cshader.Samplers[i].samplerSlot; Texture2D texture2D = ctextureCollection[textureSlot] as Texture2D; if (texture2D != null) { if (this.SamplerStates[samplerSlot].AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width) || this.SamplerStates[samplerSlot].AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height)) throw new NotSupportedException("Reach profile support only Clamp mode for non-power of two Textures."); } } } // Apply Samplers for (int slot = 0; slot < texturesCount; slot++) { Texture texture = ctextureCollection[slot]; if (texture != null) { ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy(); SamplerState sampler = csamplerStateCollection.InternalActualSamplers[slot]; if (sampler != null) { if (sampler != ctexture._glLastSamplerState) { // TODO: Avoid doing this redundantly. // Merge the two loops 'Apply Textures' and 'Apply Samplers'. // Use information from 'cshader.Samplers' to find active samplers. GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + slot); GL.CheckGLError(); // NOTE: We don't have to bind the texture here because it is already bound in the loop above. // GL.BindTexture(ctexture._glTarget, texture._glTexture); // GL.CheckGLError(); ConcreteSamplerState csamplerState = ((IPlatformSamplerState)sampler).GetStrategy(); csamplerState.PlatformApplyState(this, ctexture._glTarget, ctexture.LevelCount > 1); ctexture._glLastSamplerState = sampler; } } } } } /// /// Activates the Current Vertex/Pixel shader pair into a program. /// private unsafe void ActivateShaderProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader) { ConcreteGraphicsDevice deviceStrategy = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete(); // Lookup the shader program. ShaderProgram shaderProgram; int shaderProgramHash = (cvertexShader.GetHashCode() ^ cpixelShader.GetHashCode()); if (!deviceStrategy.ProgramCache.TryGetValue(shaderProgramHash, out shaderProgram)) { // the key does not exist so we need to link the programs shaderProgram = CreateProgram(cvertexShader, cpixelShader); deviceStrategy.ProgramCache.Add(shaderProgramHash, shaderProgram); } if (shaderProgram.Program == null) return; // Set the new program if it has changed. if (_shaderProgram != shaderProgram) { GL.UseProgram(shaderProgram.Program); GL.CheckGLError(); _shaderProgram = shaderProgram; } } private void ApplyPosFixup(ShaderProgram shaderProgram) { WebGLUniformLocation posFixupLoc = this.GetUniformLocation(shaderProgram, "posFixup"); if (posFixupLoc == null) return; // Apply vertex shader fix: // The following two lines are appended to the end of vertex shaders // to account for rendering differences between OpenGL and DirectX: // // gl_Position.y = gl_Position.y * posFixup.y; // gl_Position.xy += posFixup.zw * gl_Position.ww; // // (the following paraphrased from wine, wined3d/state.c and wined3d/glsl_shader.c) // // - We need to flip along the y-axis in case of offscreen rendering. // - D3D coordinates refer to pixel centers while GL coordinates refer // to pixel corners. // - D3D has a top-left filling convention. We need to maintain this // even after the y-flip mentioned above. // In order to handle the last two points, we translate by // (63.0 / 128.0) / VPw and (63.0 / 128.0) / VPh. This is equivalent to // translating slightly less than half a pixel. We want the difference to // be large enough that it doesn't get lost due to rounding inside the // driver, but small enough to prevent it from interfering with any // anti-aliasing. // // OpenGL coordinates specify the center of the pixel while d3d coords specify // the corner. The offsets are stored in z and w in posFixup. posFixup.y contains // 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x // contains 1.0 to allow a mad. _posFixup.X = 1.0f; _posFixup.Y = 1.0f; if (!((IPlatformGraphicsContext)this.Context).DeviceStrategy.UseHalfPixelOffset) { _posFixup.Z = 0f; _posFixup.W = 0f; } else { _posFixup.Z = (63.0f/64.0f)/Viewport.Width; _posFixup.W = -(63.0f/64.0f)/Viewport.Height; } //If we have a render target bound (rendering offscreen) if (this.FramebufferRequireFlippedY) { //flip vertically _posFixup.Y = -_posFixup.Y; _posFixup.W = -_posFixup.W; } GL.Uniform4f(posFixupLoc, _posFixup.X, _posFixup.Y, _posFixup.Z, _posFixup.W); GL.CheckGLError(); } private ShaderProgram CreateProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader) { WebGLProgram program = GL.CreateProgram(); GL.CheckGLError(); WebGLShader vertexShaderHandle = cvertexShader.ShaderHandle; GL.AttachShader(program, vertexShaderHandle); GL.CheckGLError(); WebGLShader pixelShaderHandle = cpixelShader.ShaderHandle; GL.AttachShader(program, pixelShaderHandle); GL.CheckGLError(); //vertexShader.BindVertexAttributes(program); GL.LinkProgram(program); GL.CheckGLError(); bool linkStatus; linkStatus = GL.GetProgramParameter(program, WebGLProgramStatus.LINK); if (linkStatus == false) { string log = GL.GetProgramInfoLog(program); //vertexShaderHandle.Dispose(); //pixelShaderHandle.Dispose(); program.Dispose(); throw new InvalidOperationException("Unable to link effect program." + Environment.NewLine + log); } GL.UseProgram(program); GL.CheckGLError(); // Get Vertex AttributeLocations for (int i = 0; i < cvertexShader.Attributes.Length; i++) { int attribloc = GL.GetAttribLocation(program, cvertexShader.Attributes[i].name); GL.CheckGLError(); cvertexShader.Attributes[i].location = attribloc; } // Apply Pixel Sampler TextureUnits // Assign the texture unit index to the sampler uniforms. for (int i = 0; i < cpixelShader.Samplers.Length; i++) { WebGLUniformLocation loc = GL.GetUniformLocation(program, cpixelShader.Samplers[i].GLsamplerName); GL.CheckGLError(); if (loc != null) { GL.Uniform1i(loc, cpixelShader.Samplers[i].textureSlot); GL.CheckGLError(); } } return new ShaderProgram(program); } public WebGLUniformLocation GetUniformLocation(ShaderProgram shaderProgram, string name) { WebGLUniformLocation location; if (shaderProgram._uniformLocationCache.TryGetValue(name, out location)) return location; location = GL.GetUniformLocation(shaderProgram.Program, name); GL.CheckGLError(); shaderProgram._uniformLocationCache[name] = location; return location; } private void PlatformApplyVertexBuffers(int baseVertex) { ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); bool bindingsChanged = false; for (int slot = 0; slot < _vertexBuffers.Count; slot++) { VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot); VertexDeclaration vertexDeclaration = vertexBufferBinding.VertexBuffer.VertexDeclaration; int vertexStride = vertexDeclaration.VertexStride; IntPtr vertexOffset = (IntPtr)(vertexStride * (baseVertex + vertexBufferBinding.VertexOffset)); VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration); if (_lastVertexAttribs != 1 || _bufferBindingInfos[slot].VertexBuffer != vertexBufferBinding.VertexBuffer || _bufferBindingInfos[slot].VertexOffset != vertexOffset || _bufferBindingInfos[slot].InstanceFrequency != vertexBufferBinding.InstanceFrequency || !ReferenceEquals(_bufferBindingInfos[slot].AttributeInfo, vertexAttribInfo) || slot >= _activeBufferBindingInfosCount) { bindingsChanged = true; GL.BindBuffer(WebGLBufferType.ARRAY, ((IPlatformVertexBuffer)vertexBufferBinding.VertexBuffer).Strategy.ToConcrete().GLVertexBuffer); GL.CheckGLError(); for (int e = 0; e < vertexAttribInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e]; GL.VertexAttribPointer(element.AttributeLocation, element.NumberOfElements, element.VertexAttribPointerType, element.Normalized, vertexStride, (vertexOffset + element.Offset).ToInt32()); GL.CheckGLError(); // only set the divisor if instancing is supported if (base.Capabilities.SupportsInstancing) { ((IWebGL2RenderingContext)GL).VertexAttribDivisor(element.AttributeLocation, vertexBufferBinding.InstanceFrequency); GL.CheckGLError(); } else // If instancing is not supported, but InstanceFrequency of the buffer is not zero, throw an exception { if (vertexBufferBinding.InstanceFrequency > 0) throw new PlatformNotSupportedException("Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2."); } } _bufferBindingInfos[slot].VertexBuffer = vertexBufferBinding.VertexBuffer; _bufferBindingInfos[slot].AttributeInfo = vertexAttribInfo; _bufferBindingInfos[slot].VertexOffset = vertexOffset; _bufferBindingInfos[slot].InstanceFrequency = vertexBufferBinding.InstanceFrequency; } } if (bindingsChanged) { for (int eva = 0; eva < _newEnabledVertexAttributes.Length; eva++) _newEnabledVertexAttributes[eva] = false; for (int slot = 0; slot < _vertexBuffers.Count; slot++) { for (int e = 0; e < _bufferBindingInfos[slot].AttributeInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = _bufferBindingInfos[slot].AttributeInfo.Elements[e]; _newEnabledVertexAttributes[element.AttributeLocation] = true; } } _activeBufferBindingInfosCount = _vertexBuffers.Count; } // SetVertexAttributeArray if (bindingsChanged || _lastVertexAttribs != 1) { for (int x = 0; x < _newEnabledVertexAttributes.Length; x++) { if (_newEnabledVertexAttributes[x] == true) { if (_enabledVertexAttributesSet.Add(x)) { GL.EnableVertexAttribArray(x); GL.CheckGLError(); } } else // (_newEnabledVertexAttributes[x] == false) { if (_enabledVertexAttributesSet.Remove(x)) { GL.DisableVertexAttribArray(x); GL.CheckGLError(); } } } } _lastVertexAttribs = 1; } internal void PlatformApplyUserVertexData(VertexDeclaration vertexDeclaration) { ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); int vertexStride = vertexDeclaration.VertexStride; VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration); for (int e = 0; e < vertexAttribInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e]; GL.VertexAttribPointer(element.AttributeLocation, element.NumberOfElements, element.VertexAttribPointerType, element.Normalized, vertexStride, element.Offset); GL.CheckGLError(); if (base.Capabilities.SupportsInstancing) { ((IWebGL2RenderingContext)GL).VertexAttribDivisor(element.AttributeLocation, 0); GL.CheckGLError(); } } // SetVertexAttributeArray { for (int x = 0; x < vertexAttribInfo.EnabledAttributes.Length; x++) { if (vertexAttribInfo.EnabledAttributes[x] == true) { if (_enabledVertexAttributesSet.Add(x)) { GL.EnableVertexAttribArray(x); GL.CheckGLError(); } } else // (vertexAttribInfo.EnabledAttributes[x] == false) { if (_enabledVertexAttributesSet.Remove(x)) { GL.DisableVertexAttribArray(x); GL.CheckGLError(); } } } } _lastVertexAttribs = 2; } private static WebGLPrimitiveType PrimitiveTypeGL(PrimitiveType primitiveType) { switch (primitiveType) { case PrimitiveType.PointList: throw new NotSupportedException(); case PrimitiveType.LineList: return WebGLPrimitiveType.LINES; case PrimitiveType.LineStrip: return WebGLPrimitiveType.LINE_STRIP; case PrimitiveType.TriangleList: return WebGLPrimitiveType.TRIANGLES; case PrimitiveType.TriangleStrip: return WebGLPrimitiveType.TRIANGLE_STRIP; default: throw new ArgumentException(); } } public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount) { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); PlatformApplyVertexBuffers(0); if (vertexStart < 0) vertexStart = 0; GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), vertexStart, vertexCount); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); PlatformApplyVertexBuffers(baseVertex); GL.DrawElements(target, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); PlatformApplyVertexBuffers(baseVertex); if (GL is IWebGL2RenderingContext) { ((IWebGL2RenderingContext)GL).DrawRangeElements(target, minVertexIndex, minVertexIndex + numVertices - 1, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); } else { GL.DrawElements(target, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); } base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { if (!base.Capabilities.SupportsInstancing) throw new PlatformNotSupportedException("Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2."); PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); WebGLDataType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; int indexOffsetInBytes = (startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); PlatformApplyVertexBuffers(baseVertex); ((IWebGL2RenderingContext)GL).DrawElementsInstanced(target, indexElementCount, indexElementType, indexOffsetInBytes, instanceCount); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount); } public override void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // TODO: reimplement without creating new buffers // create and bind vertexBuffer WebGLBuffer vbo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ARRAY, vbo); GL.CheckGLError(); GL.BufferData(WebGLBufferType.ARRAY, (vertexDeclaration.VertexStride * vertexData.Length), (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW); GL.CheckGLError(); // mark the default Vertex buffers for rebinding _vertexBuffersDirty = true; //set vertex data GL.BufferSubData(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, vertexCount); GL.CheckGLError(); // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), 0, vertexCount); GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ARRAY, null); //GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null); //GL.CheckGLError(); vbo.Dispose(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // TODO: reimplement without creating new buffers // create and bind vertexBuffer WebGLBuffer vbo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ARRAY, vbo); GL.CheckGLError(); GL.BufferData(WebGLBufferType.ARRAY, (vertexDeclaration.VertexStride * vertexData.Length), (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW); GL.CheckGLError(); // mark the default Vertex buffers for rebinding _vertexBuffersDirty = true; //set vertex data GL.BufferSubData(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, numVertices); GL.CheckGLError(); // create and bind index buffer WebGLBuffer ibo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ibo); GL.CheckGLError(); GL.BufferData(WebGLBufferType.ELEMENT_ARRAY, (indexData.Length * sizeof(short)), (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW); GL.CheckGLError(); // mark the default index buffer for rebinding _indexBufferDirty = true; // set index buffer GL.BufferSubData(WebGLBufferType.ELEMENT_ARRAY, 0, indexData, indexData.Length); GL.CheckGLError(); // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); int indexOffsetInBytes = (indexOffset * sizeof(short)); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); GL.DrawElements(target, indexElementCount, WebGLDataType.USHORT, indexOffsetInBytes); GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ARRAY, null); //GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null); //GL.CheckGLError(); ibo.Dispose(); vbo.Dispose(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // TODO: reimplement without creating new buffers // create and bind vertexBuffer WebGLBuffer vbo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ARRAY, vbo); GL.CheckGLError(); GL.BufferData(WebGLBufferType.ARRAY, (vertexDeclaration.VertexStride * vertexData.Length), (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW); GL.CheckGLError(); // mark the default Vertex buffers for rebinding _vertexBuffersDirty = true; //set vertex data GL.BufferSubData(WebGLBufferType.ARRAY, 0, vertexData, vertexOffset, numVertices); GL.CheckGLError(); // create and bind index buffer WebGLBuffer ibo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, ibo); GL.CheckGLError(); GL.BufferData(WebGLBufferType.ELEMENT_ARRAY, (indexData.Length * sizeof(int)), (false) ? WebGLBufferUsageHint.DYNAMIC_DRAW : WebGLBufferUsageHint.STATIC_DRAW); GL.CheckGLError(); // mark the default index buffer for rebinding _indexBufferDirty = true; // set index buffer ((IWebGL2RenderingContext)GL).BufferSubData(WebGLBufferType.ELEMENT_ARRAY, 0, indexData, indexData.Length); GL.CheckGLError(); // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); int indexOffsetInBytes = (indexOffset * sizeof(int)); WebGLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); GL.DrawElements(target, indexElementCount, WebGLDataType.UINT, indexOffsetInBytes); GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ARRAY, null); //GL.CheckGLError(); //GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, null); //GL.CheckGLError(); ibo.Dispose(); vbo.Dispose(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void Flush() { GL.Flush(); } public override OcclusionQueryStrategy CreateOcclusionQueryStrategy() { return new ConcreteOcclusionQuery(this); } public override GraphicsDebugStrategy CreateGraphicsDebugStrategy() { return new ConcreteGraphicsDebug(this); } public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity) { return new ConcreteConstantBufferCollection(capacity); } public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity) { return new ConcreteTextureCollection(this, capacity); } public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity) { return new ConcreteSamplerStateCollection(this, capacity); } public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) { return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared); } public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format) { return new ConcreteTexture3D(this, width, height, depth, mipMap, format); } public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format) { return new ConcreteTextureCube(this, size, mipMap, format); } public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount, surfaceType: TextureSurfaceType.RenderTarget); } public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream) { return new ConcreteTexture2D(this, stream); } public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats) { return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats); } public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source) { return new ConcreteBlendState(this, source); } public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source) { return new ConcreteDepthStencilState(this, source); } public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source) { return new ConcreteRasterizerState(this, source); } public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source) { return new ConcreteSamplerState(this, source); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } static readonly WebGLFramebufferAttachmentPoint[] InvalidateFramebufferAttachements = { //WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0, WebGLFramebufferAttachmentPoint.DEPTH_ATTACHMENT, WebGLFramebufferAttachmentPoint.STENCIL_ATTACHMENT, }; protected override void PlatformResolveRenderTargets() { if (!this.IsRenderTargetBound) return; RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0]; IRenderTarget renderTarget = renderTargetBinding.RenderTarget as IRenderTarget; if (renderTarget.MultiSampleCount > 0) { WebGLFramebuffer glResolveFramebuffer = null; if (!_glResolveFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glResolveFramebuffer)) { glResolveFramebuffer = GL.CreateFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glResolveFramebuffer); GL.CheckGLError(); for (int i = 0; i < base.RenderTargetCount; i++) { IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IRenderTarget)base.CurrentRenderTargetBindings[i].RenderTarget).RenderTargetStrategy; WebGLFramebufferAttachmentPoint attachment = WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0 + i; WebGLTextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice); ((IWebGL2RenderingContext)GL).FramebufferTexture2D(WebGL2FramebufferType.DRAW_FRAMEBUFFER, attachment, target, renderTargetGL.GLTexture); GL.CheckGLError(); } _glResolveFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glResolveFramebuffer); } else { ((IWebGL2RenderingContext)GL).BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glResolveFramebuffer); GL.CheckGLError(); } // The only fragment operations which affect the resolve are the pixel ownership test, the scissor test, and dithering. if (_lastRasterizerState.ScissorTestEnable) { GL.Disable(WebGLCapability.SCISSOR_TEST); GL.CheckGLError(); } WebGLFramebuffer glFramebuffer = _glFramebuffers[base.CurrentRenderTargetBindings]; ((IWebGL2RenderingContext)GL).BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, glFramebuffer); GL.CheckGLError(); for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTarget = renderTargetBinding.RenderTarget as IRenderTarget; ((IWebGL2RenderingContext)GL).ReadBuffer(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i); GL.CheckGLError(); ((IWebGL2RenderingContext)GL).DrawBuffer(WebGL2DrawBufferAttachmentPoint.COLOR_ATTACHMENT0 + i); GL.CheckGLError(); ((IWebGL2RenderingContext)GL).BlitFramebuffer( 0, 0, renderTarget.Width, renderTarget.Height, 0, 0, renderTarget.Width, renderTarget.Height, WebGLBufferBits.COLOR, WebGLTexParam.NEAREST); GL.CheckGLError(); if (renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents) { if (i == 0) { ((IWebGL2RenderingContext)GL).InvalidateFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, InvalidateFramebufferAttachements); GL.CheckGLError(); } } } if (_lastRasterizerState.ScissorTestEnable) { GL.Enable(WebGLCapability.SCISSOR_TEST); GL.CheckGLError(); } } for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D; if (renderTarget != null) { ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this); } if (renderTargetBinding.RenderTarget.LevelCount > 1) { IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy(); GL.BindTexture(renderTargetGL.GLTarget, renderTargetGL.GLTexture); GL.CheckGLError(); GL.GenerateMipmap(renderTargetGL.GLTarget); GL.CheckGLError(); } } } protected override void PlatformApplyDefaultRenderTarget() { GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER,((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete()._glDefaultFramebuffer); GL.CheckGLError(); // Reset the raster state because we flip vertices // when rendering offscreen and hence the cull direction. _rasterizerStateDirty = true; // Textures will need to be rebound to render correctly in the new render target. ((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); } protected override IRenderTarget PlatformApplyRenderTargets() { WebGLFramebuffer glFramebuffer = null; if (!_glFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glFramebuffer)) { glFramebuffer = GL.CreateFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer); GL.CheckGLError(); RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0]; IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy(); if (renderTargetGL.GLDepthBuffer != renderTargetGL.GLStencilBuffer) { GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.DEPTH_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); //GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.STENCIL_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLStencilBuffer); //GL.CheckGLError(); } else { GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.DEPTH_STENCIL_ATTACHMENT, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); } for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTargetGL = ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy() as IRenderTargetStrategyGL; WebGLFramebufferAttachmentPoint attachement = (WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0 + i); if (renderTargetGL.GLColorBuffer != null) { GL.FramebufferRenderbuffer(WebGLFramebufferType.FRAMEBUFFER, attachement, WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLColorBuffer); GL.CheckGLError(); } else { WebGLTextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice); GL.FramebufferTexture2D(WebGLFramebufferType.FRAMEBUFFER, attachement, target, renderTargetGL.GLTexture); GL.CheckGLError(); } } CheckFramebufferStatus(); _glFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glFramebuffer); } else { GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer); GL.CheckGLError(); } #if DESKTOPGL //GL.DrawBuffers(base.RenderTargetCount, _drawBuffers); #endif var GL2 = GL as IWebGL2RenderingContext; if (GL2 != null) GL2.DrawBuffers(this.ToConcrete()._drawBuffers, 0, base.RenderTargetCount); // Reset the raster state because we flip vertices // when rendering offscreen and hence the cull direction. _rasterizerStateDirty = true; // Textures will need to be rebound to render correctly in the new render target. ((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); return base.CurrentRenderTargetBindings[0].RenderTarget as IRenderTarget; } internal void PlatformUnbindRenderTarget(IRenderTargetStrategyGL renderTargetStrategy) { var bindingsToDelete = new List(); foreach (RenderTargetBinding[] bindings in _glFramebuffers.Keys) { foreach (RenderTargetBinding renderTargetBinding in bindings) { if (renderTargetBinding.RenderTarget != null && ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy() == renderTargetStrategy) { bindingsToDelete.Add(bindings); break; } } } foreach (RenderTargetBinding[] bindings in bindingsToDelete) { WebGLFramebuffer fbo = null; if (_glFramebuffers.TryGetValue(bindings, out fbo)) { fbo.Dispose(); GL.CheckGLError(); _glFramebuffers.Remove(bindings); } if (_glResolveFramebuffers.TryGetValue(bindings, out fbo)) { fbo.Dispose(); GL.CheckGLError(); _glResolveFramebuffers.Remove(bindings); } } } [Conditional("DEBUG")] public void CheckFramebufferStatus() { WebGLFramebufferStatus status = GL.CheckFramebufferStatus(WebGLFramebufferType.FRAMEBUFFER); switch (status) { case WebGLFramebufferStatus.FRAMEBUFFER_COMPLETE: return; case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: throw new InvalidOperationException("Not all framebuffer attachment points are framebuffer attachment complete."); case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: throw new InvalidOperationException("No images are attached to the framebuffer."); case WebGLFramebufferStatus.FRAMEBUFFER_UNSUPPORTED: throw new InvalidOperationException("The combination of internal formats of the attached images violates an implementation-dependent set of restrictions."); case WebGLFramebufferStatus.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: throw new InvalidOperationException("Not all attached images have the same dimensions."); default: throw new InvalidOperationException("Framebuffer Incomplete."); } } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsDebug.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy { internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { } public override bool TryDequeueMessage(out GraphicsDebugMessage message) { message = null; return false; } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsDevice.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy { private readonly Dictionary _programCache = new Dictionary(); internal Dictionary ProgramCache { get { return _programCache; } } internal WebGLFramebuffer _glDefaultFramebuffer = null; internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } public override void Reset() { PlatformReset(this.PresentationParameters); } public override void Reset(PresentationParameters presentationParameters) { PlatformReset(presentationParameters); } private void PlatformReset(PresentationParameters presentationParameters) { this.PresentationParameters = presentationParameters; ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null); } public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle) { throw new NotImplementedException(); } public override void Present() { base.Present(); } public override void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) { throw new NotImplementedException(); } protected override void PlatformInitialize() { // set actual backbuffer size PresentationParameters.BackBufferWidth = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().GlContext.Canvas.Width; PresentationParameters.BackBufferHeight = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().GlContext.Canvas.Height; } private void ClearProgramCache() { foreach (ShaderProgram shaderProgram in ProgramCache.Values) { shaderProgram.Program.Dispose(); } ProgramCache.Clear(); } internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat) { switch (surfaceFormat) { case SurfaceFormat.Color: case SurfaceFormat.Bgr565: case SurfaceFormat.Bgra4444: case SurfaceFormat.Bgra5551: case SurfaceFormat.Single: case SurfaceFormat.HalfSingle: case SurfaceFormat.Vector2: case SurfaceFormat.HalfVector2: case SurfaceFormat.Vector4: case SurfaceFormat.HalfVector4: // See: PlatformCreateRenderTarget(...) // for the supported surface types. break; default: return 0; } var GL = ((IPlatformGraphicsContext)CurrentContext).Strategy.ToConcrete().GL; int maxMultiSampleCount = 0; if (GL is IWebGL2RenderingContext) maxMultiSampleCount = ((IWebGL2RenderingContext)GL).GetParameter(WebGL2PNameInteger.MAX_SAMPLES); return maxMultiSampleCount; } public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { IntPtr handle = PresentationParameters.DeviceWindowHandle; GameWindow gameWindow = BlazorGameWindow.FromHandle(handle); Canvas canvas = ((BlazorGameWindow)gameWindow)._canvas; ContextAttributes contextAttributes = new ContextAttributes(); contextAttributes.PowerPreference = ContextAttributes.PowerPreferenceType.HighPerformance; contextAttributes.Antialias = (PresentationParameters.MultiSampleCount > 0); switch (PresentationParameters.DepthStencilFormat) { case DepthFormat.None: contextAttributes.Depth = false; contextAttributes.Stencil = false; break; case DepthFormat.Depth16: case DepthFormat.Depth24: contextAttributes.Depth = true; contextAttributes.Stencil = false; break; case DepthFormat.Depth24Stencil8: contextAttributes.Depth = true; contextAttributes.Stencil = true; break; } switch (PresentationParameters.RenderTargetUsage) { case RenderTargetUsage.PreserveContents: contextAttributes.PreserveDrawingBuffer = true; break; case RenderTargetUsage.DiscardContents: contextAttributes.PreserveDrawingBuffer = false; break; case RenderTargetUsage.PlatformContents: break; } IWebGLRenderingContext glContext = null; switch (this.GraphicsProfile) { case GraphicsProfile.Reach: glContext = canvas.GetContext(contextAttributes); break; case GraphicsProfile.HiDef: glContext = canvas.GetContext(contextAttributes); break; case GraphicsProfile.FL10_0: glContext = canvas.GetContext(contextAttributes); break; default: throw new NotSupportedException("GraphicsProfile "+ this.GraphicsProfile); } return new ConcreteGraphicsContext(context, glContext); } public override System.Reflection.Assembly ConcreteAssembly { get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteGraphicsFactory.cs ================================================ // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteGraphicsFactory : GraphicsFactory { public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy() { return new ConcreteGraphicsAdaptersProvider(); } public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters); } public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity) { return new SpriteBatcher(graphicsDevice, capacity); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteOcclusionQuery.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteOcclusionQuery : OcclusionQueryStrategy { public override int PixelCount { get { throw new NotImplementedException(); } } public override bool IsComplete { get { throw new NotImplementedException(); } } internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { } public override void PlatformBegin() { throw new NotImplementedException(); } public override void PlatformEnd() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteRenderTarget2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, TextureSurfaceType surfaceType) : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; if (surfaceType == TextureSurfaceType.RenderTargetSwapChain) { // Texture will be created by the RenderTargetSwapChain. return; } var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared); PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy WebGLRenderbuffer _glColorBuffer; WebGLRenderbuffer _glDepthBuffer; WebGLRenderbuffer _glStencilBuffer; #region IRenderTargetStrategyGL WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { if (arraySlice != 0) throw new NotImplementedException("arraySlice is not implemented for Texture2D"); return _glTarget; } #endregion IRenderTargetStrategyGL private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount, bool shared) { ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, width, height, mipMap, this.Format, preferredDepthFormat, multiSampleCount); } protected override void PlatformGraphicsContextLost() { throw new NotImplementedException(); base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteRenderTarget3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat); // If we don't need a depth buffer then we're done. if (preferredDepthFormat != DepthFormat.None) PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy WebGLRenderbuffer _glColorBuffer; WebGLRenderbuffer _glDepthBuffer; WebGLRenderbuffer _glStencilBuffer; #region IRenderTargetStrategyGL WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { return _glTarget; } #endregion IRenderTargetStrategyGL private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteRenderTargetCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, size, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat); PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy WebGLRenderbuffer _glColorBuffer; WebGLRenderbuffer _glDepthBuffer; WebGLRenderbuffer _glStencilBuffer; #region IRenderTargetStrategyGL WebGLTexture IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } WebGLTextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } WebGLRenderbuffer IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } WebGLTextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_X + arraySlice; } #endregion IRenderTargetStrategyGL private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteSamplerStateCollection.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy { internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } } internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { } public override SamplerState this[int index] { get { return base[index]; } set { base[index] = value; } } public override void Clear() { base.Clear(); } public override void Dirty() { base.Dirty(); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTexture.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy { private readonly GraphicsContextStrategy _contextStrategy; private readonly SurfaceFormat _format; private readonly int _levelCount; internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount) : base(contextStrategy) { this._contextStrategy = contextStrategy; this._format = format; this._levelCount = levelCount; } #region ITextureStrategy public SurfaceFormat Format { get { return _format; } } public int LevelCount { get { return _levelCount; } } #endregion ITextureStrategy internal WebGLTexture _glTexture; internal WebGLTextureTarget _glTarget; internal WebGLInternalFormat _glInternalFormat; internal WebGLFormat _glFormat; internal WebGLTexelType _glType; internal bool _glIsCompressedTexture; internal SamplerState _glLastSamplerState; internal static void ToGLSurfaceFormat(SurfaceFormat format, GraphicsContextStrategy contextStrategy, out WebGLInternalFormat glInternalFormat, out WebGLFormat glFormat, out WebGLTexelType glType, out bool glIsCompressedTexture) { bool supportsS3tc = contextStrategy.Capabilities.SupportsS3tc; //bool isGLES2 = GL.BoundApi == GL.RenderApi.ES && graphicsDevice._glMajorVersion == 2; bool supportsFloat = contextStrategy.Capabilities.SupportsFloatTextures; switch (format) { case SurfaceFormat.Color: glInternalFormat = WebGLInternalFormat.RGBA; glFormat = WebGLFormat.RGBA; glType = WebGLTexelType.UNSIGNED_BYTE; glIsCompressedTexture = false; break; case SurfaceFormat.Bgr565: glInternalFormat = WebGLInternalFormat.RGB; glFormat = WebGLFormat.RGB; glType = WebGLTexelType.UNSIGNED_SHORT_5_6_5; glIsCompressedTexture = false; break; case SurfaceFormat.Bgra4444: glInternalFormat = WebGLInternalFormat.RGBA; glFormat = WebGLFormat.RGBA; glType = WebGLTexelType.UNSIGNED_SHORT_4_4_4_4; glIsCompressedTexture = false; break; case SurfaceFormat.Bgra5551: glInternalFormat = WebGLInternalFormat.RGBA; glFormat = WebGLFormat.RGBA; glType = WebGLTexelType.UNSIGNED_SHORT_5_5_5_1; glIsCompressedTexture = false; break; case SurfaceFormat.Alpha8: glInternalFormat = WebGLInternalFormat.LUMINANCE; glFormat = WebGLFormat.LUMINANCE; glType = WebGLTexelType.UNSIGNED_BYTE; glIsCompressedTexture = false; break; case SurfaceFormat.Dxt1: if (!supportsS3tc) goto default; glInternalFormat = WebGLInternalFormat.COMPRESSED_RGB_S3TC_DXT1_EXT; glFormat = (WebGLFormat)glInternalFormat; glType = WebGLTexelType.UNSIGNED_BYTE; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt3: if (!supportsS3tc) goto default; glInternalFormat = WebGLInternalFormat.COMPRESSED_RGBA_S3TC_DXT3_EXT; glFormat = (WebGLFormat)glInternalFormat; glType = WebGLTexelType.UNSIGNED_BYTE; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt5: if (!supportsS3tc) goto default; glInternalFormat = WebGLInternalFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT; glFormat = (WebGLFormat)glInternalFormat; glType = WebGLTexelType.UNSIGNED_BYTE; glIsCompressedTexture = true; break; // float formats case SurfaceFormat.HalfSingle: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.R16F; glFormat = WebGLFormat.RED; glType = WebGLTexelType.HALF_FLOAT; glIsCompressedTexture = false; break; case SurfaceFormat.Single: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.R32F; glFormat = WebGLFormat.RED; glType = WebGLTexelType.FLOAT; glIsCompressedTexture = false; break; case SurfaceFormat.HalfVector2: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.RG16F; glFormat = WebGLFormat.RG; glType = WebGLTexelType.HALF_FLOAT; glIsCompressedTexture = false; break; case SurfaceFormat.Vector2: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.RG32F; glFormat = WebGLFormat.RG; glType = WebGLTexelType.FLOAT; glIsCompressedTexture = false; break; case SurfaceFormat.HalfVector4: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.RGBA16F; glFormat = WebGLFormat.RGBA; glType = WebGLTexelType.HALF_FLOAT; glIsCompressedTexture = false; break; case SurfaceFormat.Vector4: if (!supportsFloat) goto default; glInternalFormat = WebGLInternalFormat.RGBA32F; glFormat = WebGLFormat.RGBA; glType = WebGLTexelType.FLOAT; glIsCompressedTexture = false; break; default: throw new PlatformNotSupportedException(string.Format("The requested SurfaceFormat `{0}` is not supported.", format)); } } internal static void PlatformCreateRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int multiSampleCount) { //contextStrategy.ToConcrete().EnsureContextCurrentThread(); { var GL = contextStrategy.ToConcrete().GL; if (multiSampleCount > 0) { WebGL2RenderbufferInternalFormat colorInternalFormat = default; switch (preferredFormat) { case SurfaceFormat.Color: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA8; break; case SurfaceFormat.Bgr565: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGB565; break; case SurfaceFormat.Bgra4444: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA4; break; case SurfaceFormat.Bgra5551: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGB5_A1; break; case SurfaceFormat.Single: colorInternalFormat = WebGL2RenderbufferInternalFormat.R32F; break; case SurfaceFormat.HalfSingle: colorInternalFormat = WebGL2RenderbufferInternalFormat.R16F; break; case SurfaceFormat.Vector2: colorInternalFormat = WebGL2RenderbufferInternalFormat.RG32F; break; case SurfaceFormat.HalfVector2: colorInternalFormat = WebGL2RenderbufferInternalFormat.RG16F; break; case SurfaceFormat.Vector4: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA32F; break; case SurfaceFormat.HalfVector4: colorInternalFormat = WebGL2RenderbufferInternalFormat.RGBA16F; break; default: throw new InvalidOperationException("format"); } renderTargetGL.GLColorBuffer = GL.CreateRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLColorBuffer); GL.CheckGLError(); System.Diagnostics.Debug.Assert(GL is IWebGL2RenderingContext); // (GL.RenderbufferStorageMultisample == null) ((IWebGL2RenderingContext)GL).RenderbufferStorageMultisample(WebGLRenderbufferType.RENDERBUFFER, multiSampleCount, colorInternalFormat, width, height); GL.CheckGLError(); } if (preferredDepthFormat != DepthFormat.None) { WebGL2RenderbufferInternalFormat depthInternalFormat2 = default; WebGLRenderbufferInternalFormat depthInternalFormat = default; WebGLRenderbufferInternalFormat stencilInternalFormat = default; switch (preferredDepthFormat) { case DepthFormat.None: break; case DepthFormat.Depth16: depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH_COMPONENT16; depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_COMPONENT16; break; case DepthFormat.Depth24: depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH_COMPONENT24; depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_COMPONENT16; break; case DepthFormat.Depth24Stencil8: depthInternalFormat2 = WebGL2RenderbufferInternalFormat.DEPTH24_STENCIL8; depthInternalFormat = WebGLRenderbufferInternalFormat.DEPTH_STENCIL; break; default: throw new InvalidOperationException("preferredDepthFormat"); } if (depthInternalFormat != 0) { renderTargetGL.GLDepthBuffer = GL.CreateRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(WebGLRenderbufferType.RENDERBUFFER, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); if (multiSampleCount > 0) { System.Diagnostics.Debug.Assert(GL is IWebGL2RenderingContext); // (GL.RenderbufferStorageMultisample == null) ((IWebGL2RenderingContext)GL).RenderbufferStorageMultisample(WebGLRenderbufferType.RENDERBUFFER, multiSampleCount, depthInternalFormat2, width, height); GL.CheckGLError(); } else { if (GL is IWebGL2RenderingContext) { ((IWebGL2RenderingContext)GL).RenderbufferStorage(WebGLRenderbufferType.RENDERBUFFER, depthInternalFormat2, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(WebGLRenderbufferType.RENDERBUFFER, depthInternalFormat, width, height); GL.CheckGLError(); } } if (preferredDepthFormat == DepthFormat.Depth24Stencil8) { renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer; } } } } return; } internal static void PlatformDeleteRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy) { var GL = contextStrategy.ToConcrete().GL; { if (renderTargetGL.GLColorBuffer != null) { renderTargetGL.GLColorBuffer.Dispose(); GL.CheckGLError(); } if (renderTargetGL.GLStencilBuffer != null && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer) { renderTargetGL.GLStencilBuffer.Dispose(); GL.CheckGLError(); } if (renderTargetGL.GLDepthBuffer != null) { renderTargetGL.GLDepthBuffer.Dispose(); GL.CheckGLError(); } contextStrategy.ToConcrete().PlatformUnbindRenderTarget(renderTargetGL); } } protected override void PlatformGraphicsContextLost() { if (_glTexture != null) { _glTexture.Dispose(); } _glTexture = null; _glLastSamplerState = null; base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { if (_glTexture != null) _glTexture.Dispose(); _glTexture = null; _glLastSamplerState = null; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTexture2D.Stream.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; using StbImageSharp; using StbImageWriteSharp; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D { internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream) : base(contextStrategy, SurfaceFormat.Color, 1) { this._arraySize = 1; // Rewind stream if it is at end if (stream.CanSeek && stream.Length == stream.Position) stream.Seek(0, SeekOrigin.Begin); if (stream.CanSeek) { PlatformFromStream_ImageSharp(contextStrategy, stream, out this._width, out this._height); } else { // If stream doesn't provide seek functionality, use MemoryStream instead using (Stream ms = new MemoryStream()) { stream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height); } } } private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha); width = result.Width; height = result.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, result.Data, 0, result.Data.Length); } private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height) { if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048)) throw new NotSupportedException("Reach profile supports a maximum Texture2D size of 2048"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096)) throw new NotSupportedException("HiDef profile supports a maximum Texture2D size of 4096"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_0 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_1 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_0 profile supports a maximum Texture2D size of 16384"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_1 profile supports a maximum Texture2D size of 16384"); } public unsafe void SaveAsPng(Stream stream, int width, int height) { if (stream == null) throw new ArgumentNullException("stream", "'stream' cannot be null"); if (width <= 0) throw new ArgumentOutOfRangeException("width", width, "'width' cannot be less than or equal to zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height", height, "'height' cannot be less than or equal to zero"); Color[] data = TextureHelpers.GetColorData(this); fixed (Color* pData = data) { ImageWriter writer = new ImageWriter(); writer.WritePng(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream); } } public unsafe void SaveAsJpeg(Stream stream, int width, int height) { if (stream == null) throw new ArgumentNullException("stream", "'stream' cannot be null"); if (width <= 0) throw new ArgumentOutOfRangeException("width", width, "'width' cannot be less than or equal to zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height", height, "'height' cannot be less than or equal to zero"); Color[] data = TextureHelpers.GetColorData(this); fixed (Color* pData = data) { ImageWriter writer = new ImageWriter(); writer.WriteJpg(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream, 90); } } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTexture2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy { private readonly int _width; private readonly int _height; private readonly int _arraySize; internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } #region ITexture2DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int ArraySize { get { return _arraySize; } } public Rectangle Bounds { get { return new Rectangle(0, 0, this._width, this._height); } } public IntPtr GetSharedHandle() { throw new NotImplementedException(); } public void SetData(int level, T[] data, int startIndex, int elementCount) where T : struct { { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int w, h; TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h); if (startIndex != 0 && !_glIsCompressedTexture) throw new NotImplementedException("startIndex"); System.Diagnostics.Debug.Assert(_glTexture != null); ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture); GL.CheckGLError(); GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(this.Format.GetSize(), 8)); GL.CheckGLError(); if (_glIsCompressedTexture) { GL.CompressedTexImage2D( WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, data, startIndex, elementCount); GL.CheckGLError(); } else { GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, _glFormat, _glType, data); GL.CheckGLError(); } } } public void SetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; if (startIndex != 0) throw new NotImplementedException("startIndex"); System.Diagnostics.Debug.Assert(_glTexture != null); ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture); GL.CheckGLError(); GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(this.Format.GetSize(), 8)); if (_glIsCompressedTexture) { throw new NotImplementedException(); } else { GL.TexSubImage2D( WebGLTextureTarget.TEXTURE_2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, data); GL.CheckGLError(); } } } public void GetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; // TODO: check for non renderable formats (formats that can't be attached to FBO) WebGLFramebuffer glFramebuffer; glFramebuffer = GL.CreateFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glFramebuffer); GL.CheckGLError(); GL.FramebufferTexture2D(WebGLFramebufferType.FRAMEBUFFER, WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0, WebGLTextureTarget.TEXTURE_2D, _glTexture); GL.CheckGLError(); GL.ReadPixels(checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, data); GL.CheckGLError(); glFramebuffer.Dispose(); } } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { int blockWidth, blockHeight; Format.GetBlockSize(out blockWidth, out blockHeight); int blockWidthMinusOne = blockWidth - 1; int blockHeightMinusOne = blockHeight - 1; // round x and y down to next multiple of block size; width and height up to next multiple of block size int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne; int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne; checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne, #if OPENGL // OpenGL only: The last two mip levels require the width and height to be // passed as 2x2 and 1x1, but there needs to be enough data passed to occupy // a full block. (rect.Width < blockWidth && textureBounds.Width < blockWidth) ? textureBounds.Width : roundedWidth, (rect.Height < blockHeight && textureBounds.Height < blockHeight) ? textureBounds.Height : roundedHeight); #else roundedWidth, roundedHeight); #endif if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp) { return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8; } else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp) { return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8; } else { return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight); } } #endregion ITexture2DStrategy internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { _glTarget = WebGLTextureTarget.TEXTURE_2D; ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture); { var GL = contextStrategy.ToConcrete().GL; System.Diagnostics.Debug.Assert(_glTexture == null); _glTexture = GL.CreateTexture(); GL.CheckGLError(); ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, _glTexture); GL.CheckGLError(); // Set mipMap levels //GL2.TexParameter(WebGLTextureTarget.TEXTURE_2D, WebGL2TexParamName.TEXTURE_BASE_LEVEL, 0); //GL.CheckGLError(); int w = width; int h = height; int level = 0; while (true) { if (_glIsCompressedTexture) { int imageSize = 0; // PVRTC has explicit calculations for imageSize // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt if (format == SurfaceFormat.RgbPvrtc2Bpp || format == SurfaceFormat.RgbaPvrtc2Bpp) { imageSize = (Math.Max(w, 16) * Math.Max(h, 8) * 2 + 7) / 8; } else if (format == SurfaceFormat.RgbPvrtc4Bpp || format == SurfaceFormat.RgbaPvrtc4Bpp) { imageSize = (Math.Max(w, 8) * Math.Max(h, 8) * 4 + 7) / 8; } else { int blockSize = format.GetSize(); int blockWidth, blockHeight; format.GetBlockSize(out blockWidth, out blockHeight); int wBlocks = (w + (blockWidth - 1)) / blockWidth; int hBlocks = (h + (blockHeight - 1)) / blockHeight; imageSize = wBlocks * hBlocks * blockSize; } byte[] data = new byte[imageSize]; // WebGL CompressedTexImage2D requires data. GL.CompressedTexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, data); GL.CheckGLError(); } else { GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, level, _glInternalFormat, w, h, _glFormat, _glType); GL.CheckGLError(); } if ((w == 1 && h == 1) || !mipMap) break; if (w > 1) w = w / 2; if (h > 1) h = h / 2; ++level; } } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTexture3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy { private readonly int _width; private readonly int _height; private readonly int _depth; internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } #region ITexture3DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int Depth { get { return _depth; } } public void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { int width = right - left; int height = bottom - top; int depth = back - front; throw new NotImplementedException(); } public void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { throw new NotImplementedException(); } #endregion ITexture3DStrategy internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTextureCollection.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteTextureCollection : TextureCollectionStrategy { internal WebGLTextureTarget[] _targets; internal uint InternalDirty { get { return base._dirty; } set { base._dirty = value; } } internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { _targets = new WebGLTextureTarget[capacity]; for (int i = 0; i < _targets.Length; i++) _targets[i] = 0; } public override void Clear() { base.Clear(); for (int i = 0; i < _targets.Length; i++) _targets[i] = 0; } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/ConcreteTextureCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy { private readonly int _size; internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } #region ITextureCubeStrategy public int Size { get { return _size; } } public void SetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; if (startIndex != 0 && !_glIsCompressedTexture) throw new NotImplementedException("startIndex"); ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_CUBE_MAP, _glTexture); GL.CheckGLError(); WebGLTextureTarget target = ConcreteTextureCube.GetGLCubeFace(face); if (_glIsCompressedTexture) { throw new NotImplementedException(); } else { GL.TexSubImage2D(target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, data); GL.CheckGLError(); } } } public void GetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { throw new NotImplementedException(); } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { // round x and y down to next multiple of four; width and height up to next multiple of four int roundedWidth = (rect.Width + 3) & ~0x3; int roundedHeight = (rect.Height + 3) & ~0x3; checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3, #if OPENGL // OpenGL only: The last two mip levels require the width and height to be // passed as 2x2 and 1x1, but there needs to be enough data passed to occupy // a 4x4 block. (rect.Width < 4 && textureBounds.Width < 4) ? textureBounds.Width : roundedWidth, (rect.Height < 4 && textureBounds.Height < 4) ? textureBounds.Height : roundedHeight); #else roundedWidth, roundedHeight); #endif return (roundedWidth * roundedHeight * fSize / 16); } #endregion ITextureCubeStrategy internal static WebGLTextureTarget GetGLCubeFace(CubeMapFace face) { switch (face) { case CubeMapFace.PositiveX: return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_X; case CubeMapFace.NegativeX: return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_X; case CubeMapFace.PositiveY: return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_Y; case CubeMapFace.NegativeY: return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_Y; case CubeMapFace.PositiveZ: return WebGLTextureTarget.TEXTURE_CUBE_MAP_POSITIVE_Z; case CubeMapFace.NegativeZ: return WebGLTextureTarget.TEXTURE_CUBE_MAP_NEGATIVE_Z; default: throw new ArgumentException(); } } internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { _glTarget = WebGLTextureTarget.TEXTURE_CUBE_MAP; { var GL = contextStrategy.ToConcrete().GL; _glTexture = GL.CreateTexture(); GL.CheckGLError(); ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_CUBE_MAP, _glTexture); GL.CheckGLError(); ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture ); for (int i = 0; i < 6; i++) { WebGLTextureTarget target = ConcreteTextureCube.GetGLCubeFace((CubeMapFace)i); if (_glIsCompressedTexture) { throw new NotImplementedException(); } else { GL.TexImage2D(target, 0, _glInternalFormat, size, size, _glFormat, _glType); GL.CheckGLError(); } } if (mipMap) { GL.GenerateMipmap(WebGLTextureTarget.TEXTURE_CUBE_MAP); GL.CheckGLError(); } } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/GLExtensions.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { static class GLExtensions { public static WebGLDepthComparisonFunc ToGLComparisonFunction(this CompareFunction compare) { switch (compare) { case CompareFunction.Always: return WebGLDepthComparisonFunc.ALWAYS; case CompareFunction.Equal: return WebGLDepthComparisonFunc.EQUAL; case CompareFunction.Greater: return WebGLDepthComparisonFunc.GREATER; case CompareFunction.GreaterEqual: return WebGLDepthComparisonFunc.GEQUAL; case CompareFunction.Less: return WebGLDepthComparisonFunc.LESS; case CompareFunction.LessEqual: return WebGLDepthComparisonFunc.LEQUAL; case CompareFunction.Never: return WebGLDepthComparisonFunc.NEVER; case CompareFunction.NotEqual: return WebGLDepthComparisonFunc.NOTEQUAL; default: throw new ArgumentOutOfRangeException("compare"); } } internal static int ToGLNumberOfElements(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 1; case VertexElementFormat.Vector2: return 2; case VertexElementFormat.Vector3: return 3; case VertexElementFormat.Vector4: return 4; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 2; case VertexElementFormat.Short4: return 4; case VertexElementFormat.NormalizedShort2: return 2; case VertexElementFormat.NormalizedShort4: return 4; case VertexElementFormat.HalfVector2: return 2; case VertexElementFormat.HalfVector4: return 4; default: throw new ArgumentException(); } } internal static WebGLDataType ToGLVertexAttribPointerType(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return WebGLDataType.FLOAT; case VertexElementFormat.Vector2: return WebGLDataType.FLOAT; case VertexElementFormat.Vector3: return WebGLDataType.FLOAT; case VertexElementFormat.Vector4: return WebGLDataType.FLOAT; case VertexElementFormat.Color: return WebGLDataType.UBYTE; case VertexElementFormat.Byte4: return WebGLDataType.UBYTE; case VertexElementFormat.Short2: return WebGLDataType.SHORT; case VertexElementFormat.Short4: return WebGLDataType.SHORT; case VertexElementFormat.NormalizedShort2: return WebGLDataType.SHORT; case VertexElementFormat.NormalizedShort4: return WebGLDataType.SHORT; default: throw new ArgumentException(); } } internal static bool ToGLVertexAttribNormalized(this VertexElement element) { // TODO: This may or may not be the right behavor. // // For instance the VertexElementFormat.Byte4 format is not supposed // to be normalized, but this line makes it so. // // The question is in MS XNA are types normalized based on usage or // normalized based to their format? // if (element.VertexElementUsage == VertexElementUsage.Color) return true; switch (element.VertexElementFormat) { case VertexElementFormat.NormalizedShort2: case VertexElementFormat.NormalizedShort4: return true; default: return false; } } [Conditional("DEBUG")] internal static void CheckGLError(this IWebGLRenderingContext GL) { WebGLErrorCode error = GL.GetError(); if (error == WebGLErrorCode.NO_ERROR) return; string errorMsg = String.Format("GL_ERROR: {0} ({1:X4})", error, (int)error); Console.WriteLine(errorMsg); throw new InvalidOperationException("GL.GetError() returned " + errorMsg); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/IRenderTargetStrategyGL.cs ================================================ // Copyright (C)2023 Nick Kastellanos using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal interface IRenderTargetStrategyGL { WebGLTexture GLTexture { get; } WebGLTextureTarget GLTarget { get; } WebGLRenderbuffer GLColorBuffer { get; set; } WebGLRenderbuffer GLDepthBuffer { get; set; } WebGLRenderbuffer GLStencilBuffer { get; set; } WebGLTextureTarget GetFramebufferTarget(int arraySlice); } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ConcreteConstantBuffer.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy { private ShaderProgram _shaderProgram = null; private WebGLUniformLocation _location; static ConcreteConstantBuffer _lastConstantBufferApplied = null; public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats) : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats) { } private ConcreteConstantBuffer(ConcreteConstantBuffer source) : base(source) { } public override object Clone() { return new ConcreteConstantBuffer(this); } internal unsafe void PlatformApply(ConcreteGraphicsContext ccontextStrategy, ShaderProgram shaderProgram, int slot) { System.Diagnostics.Debug.Assert(slot == 0); bool isSameShaderProgram = _shaderProgram == shaderProgram; if (!isSameShaderProgram) { // If the program changed then lookup the uniform location again. WebGLUniformLocation location = ccontextStrategy.GetUniformLocation(shaderProgram, Name); if (location == null) return; _shaderProgram = shaderProgram; _location = location; } if (base.Dirty // If the shader program changed then apply the buffer. || !isSameShaderProgram // If the shader program is the same, the effect may still be different and have different values in the buffer || !Object.ReferenceEquals(this, ConcreteConstantBuffer._lastConstantBufferApplied) ) { var GL = ccontextStrategy.GL; fixed (void* bytePtr = this.BufferData) { // TODO: We need to know the type of buffer float/int/bool // and cast this correctly... else it doesn't work as i guess // GL is checking the type of the uniform. System.Diagnostics.Debug.Assert((this.BufferData.Length % 16) == 0); GL.Uniform4fv(_location, this.BufferData); GL.CheckGLError(); } base.Dirty = false; ConcreteConstantBuffer._lastConstantBufferApplied = this; } } public override void PlatformContextLost() { // Force the uniform location to be looked up again _shaderProgram = null; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ConcreteConstantBufferCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy { private uint _valid; internal uint InternalValid { get { return this._valid; } } internal ConcreteConstantBufferCollection(int capacity) : base(capacity) { // hard limit of 32 because of _valid flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _valid = 0; } public override ConstantBuffer this[int index] { get { return base[index]; } set { if (base[index] != value) { uint mask = ((uint)1) << index; base[index] = value; if (value != null) _valid |= mask; else _valid &= ~mask; } } } public override void Clear() { for (int slot = 0; slot < base.Length; slot++) base[slot] = null; _valid = 0; } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ConcretePixelShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcretePixelShader : ConcreteShader { internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { base.CreateShader(contextStrategy, WebGLShaderType.FRAGMENT, shaderVersion, shaderBytecode); } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ConcreteShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Text.RegularExpressions; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteShader : ShaderStrategy { // The shader handle. private WebGLShader _shaderHandle = null; internal WebGLShader ShaderHandle { get { return _shaderHandle; } } internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile; ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile]; if (shaderVersion != default && shaderVersion > maxVersion) { throw new NotSupportedException( $"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'."); } } internal void CreateShader(GraphicsContextStrategy contextStrategy, WebGLShaderType shaderType, ShaderVersion shaderVersion, byte[] shaderBytecode) { { var GL = contextStrategy.ToConcrete().GL; _shaderHandle = GL.CreateShader(shaderType); GL.CheckGLError(); if (shaderVersion == default) // Handle legacy MGFX { if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL && this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef) { string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode); // GLES 3.00 is required for dFdx/dFdy string glsl300esCode = ConvertGLSLToGLSL300es(shaderType, glslCode); GL.ShaderSource(_shaderHandle, glsl300esCode); GL.CheckGLError(); } else { string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode); GL.ShaderSource(_shaderHandle, glslCode); GL.CheckGLError(); } } else // Handle KNIFX { int bytecodeOffset; if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES || this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL) { if (this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef) { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 3, minor: 0, es: true); } else { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 0, es: false); } } else //if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.OpenGL) { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 1, es: false); } int bytecodeLength = BitConverter.ToInt32(shaderBytecode, bytecodeOffset); bytecodeOffset += 4; string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode, bytecodeOffset, bytecodeLength); GL.ShaderSource(_shaderHandle, glslCode); GL.CheckGLError(); } GL.CompileShader(_shaderHandle); GL.CheckGLError(); bool compiled = false; compiled = GL.GetShaderParameter(_shaderHandle, WebGLShaderStatus.COMPILE); GL.CheckGLError(); if (compiled != true) { string log = GL.GetShaderInfoLog(_shaderHandle); _shaderHandle.Dispose(); _shaderHandle = null; throw new InvalidOperationException("Shader Compilation Failed." + Environment.NewLine + log); } } } private int FindShaderByteCode(byte[] shaderBytecode, int major, int minor, bool es) { int pos = 0; short reserved0 = BitConverter.ToInt16(shaderBytecode, pos); pos += 2; if (reserved0 != 0) throw new Exception("Invalid shader bytecode"); short count = BitConverter.ToInt16(shaderBytecode, pos); pos += 2; for (int i = 0; i < count; i++) { int major0 = shaderBytecode[pos]; pos += 1; int minor0 = shaderBytecode[pos]; pos += 1; bool es0 = BitConverter.ToBoolean(shaderBytecode, pos); pos += 1; int bytecodeOffset0 = BitConverter.ToInt32(shaderBytecode, pos); pos += 4; if (major == major0 && minor == minor0 && es == es0) { return bytecodeOffset0; } } throw new InvalidOperationException("GLSL bytecode not found."); } static Regex rgxOES = new Regex( @"^#extension GL_OES_standard_derivatives : enable\n", RegexOptions.Multiline); static Regex rgxPrecision = new Regex( @"precision mediump (float|int);", RegexOptions.Multiline); static Regex rgxAttribute = new Regex( @"^attribute(?=\s)", RegexOptions.Multiline); static Regex rgxVarying = new Regex( @"^varying(?=\s)", RegexOptions.Multiline); static Regex rgxFragColor = new Regex( @"^#define (\w+) gl_FragColor", RegexOptions.Multiline); static Regex rgxFragData = new Regex( @"^#define (\w+) gl_FragData\[(\d+)\]", RegexOptions.Multiline); static Regex rgxTexture = new Regex( @"texture(2D|3D|Cube)(?=\()", RegexOptions.Multiline); private string ConvertGLSLToGLSL300es(WebGLShaderType shaderType, string glslCode) { switch (shaderType) { case WebGLShaderType.VERTEX: { glslCode = rgxVarying.Replace(glslCode, "out"); } break; case WebGLShaderType.FRAGMENT: { glslCode = rgxOES.Replace(glslCode, ""); glslCode = rgxVarying.Replace(glslCode, "in"); glslCode = rgxFragColor.Replace(glslCode, "out vec4 $1;"); glslCode = rgxFragData .Replace(glslCode, "layout(location=$2) out vec4 $1;"); } break; } glslCode = rgxPrecision.Replace(glslCode, "precision highp $1;"); glslCode = rgxAttribute.Replace(glslCode, "in"); glslCode = rgxTexture.Replace(glslCode, "texture"); glslCode = "#version 300 es\n" + glslCode; return glslCode; } protected override void PlatformGraphicsContextLost() { if (_shaderHandle != null) { _shaderHandle.Dispose(); _shaderHandle = null; } base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { if (_shaderHandle != null) { _shaderHandle.Dispose(); _shaderHandle = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ConcreteVertexShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteVertexShader : ConcreteShader { private readonly Dictionary _vertexAttribInfoCache = new Dictionary(); internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { base.CreateShader(contextStrategy, WebGLShaderType.VERTEX, shaderVersion, shaderBytecode); } private int GetAttributeLocation(VertexElementUsage usage, int index) { for (int i = 0; i < Attributes.Length; i++) { if ((Attributes[i].usage == usage) && (Attributes[i].index == index)) return Attributes[i].location; } return -1; } internal VertexDeclarationAttributeInfo GetVertexAttribInfo(ConcreteGraphicsContext concreteGraphicsContext, VertexDeclaration vertexDeclaration) { VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexDeclaration).InternalVertexElements; VertexDeclarationAttributeInfo vertexAttribInfo; if (_vertexAttribInfoCache.TryGetValue(vertexElements, out vertexAttribInfo)) return vertexAttribInfo; int maxVertexBufferSlots = concreteGraphicsContext.Capabilities.MaxVertexBufferSlots; vertexAttribInfo = ConcreteVertexShader.CreateVertexAttribInfo(this, vertexElements, maxVertexBufferSlots); _vertexAttribInfoCache.Add(vertexElements, vertexAttribInfo); return vertexAttribInfo; } private static VertexDeclarationAttributeInfo CreateVertexAttribInfo(ConcreteVertexShader vertexShaderStrategy, VertexElement[] vertexElements, int maxVertexBufferSlots) { // Get the vertex attribute info and cache it VertexDeclarationAttributeInfo attrInfo = new VertexDeclarationAttributeInfo(maxVertexBufferSlots); for (int v = 0; v < vertexElements.Length; v++) { int attributeLocation = vertexShaderStrategy.GetAttributeLocation(vertexElements[v].VertexElementUsage, vertexElements[v].UsageIndex); // XNA appears to ignore usages it can't find a match for, so we will do the same if (attributeLocation < 0) continue; VertexDeclarationAttributeInfoElement vertexAttribInfoElement = new VertexDeclarationAttributeInfoElement(); vertexAttribInfoElement.NumberOfElements = vertexElements[v].VertexElementFormat.ToGLNumberOfElements(); vertexAttribInfoElement.VertexAttribPointerType = vertexElements[v].VertexElementFormat.ToGLVertexAttribPointerType(); vertexAttribInfoElement.Normalized = vertexElements[v].ToGLVertexAttribNormalized(); vertexAttribInfoElement.Offset = vertexElements[v].Offset; vertexAttribInfoElement.AttributeLocation = attributeLocation; attrInfo.Elements.Add(vertexAttribInfoElement); attrInfo.EnabledAttributes[vertexAttribInfoElement.AttributeLocation] = true; } return attrInfo; } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Shader/ShaderProgram.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ShaderProgram { public readonly WebGLProgram Program; internal readonly Dictionary _uniformLocationCache = new Dictionary(); public ShaderProgram(WebGLProgram program) { Program = program; } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/States/ConcreteBlendState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteBlendState : ResourceBlendStateStrategy { internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false) { var GL = context.GL; bool blendEnabled = !(this.ColorSourceBlend == Blend.One && this.ColorDestinationBlend == Blend.Zero && this.AlphaSourceBlend == Blend.One && this.AlphaDestinationBlend == Blend.Zero); if (force || blendEnabled != context._lastBlendEnable) { if (blendEnabled) GL.Enable(WebGLCapability.BLEND); else GL.Disable(WebGLCapability.BLEND); GL.CheckGLError(); context._lastBlendEnable = blendEnabled; } if (!this.IndependentBlendEnable) { if (force || this.ColorBlendFunction != context._lastBlendState.ColorBlendFunction || this.AlphaBlendFunction != context._lastBlendState.AlphaBlendFunction) { GL.BlendEquationSeparate( ToGLBlendEquationMode(this.ColorBlendFunction), ToGLBlendEquationMode(this.AlphaBlendFunction)); GL.CheckGLError(); for (int i = 0; i < 4; i++) { context._lastBlendState[i].ColorBlendFunction = this.ColorBlendFunction; context._lastBlendState[i].AlphaBlendFunction = this.AlphaBlendFunction; } } if (force || this.ColorSourceBlend != context._lastBlendState.ColorSourceBlend || this.ColorDestinationBlend != context._lastBlendState.ColorDestinationBlend || this.AlphaSourceBlend != context._lastBlendState.AlphaSourceBlend || this.AlphaDestinationBlend != context._lastBlendState.AlphaDestinationBlend) { GL.BlendFuncSeparate( ToGLBlendFunc(this.ColorSourceBlend), ToGLBlendFunc(this.ColorDestinationBlend), ToGLBlendFunc(this.AlphaSourceBlend), ToGLBlendFunc(this.AlphaDestinationBlend)); GL.CheckGLError(); for (int i = 0; i < 4; i++) { context._lastBlendState[i].ColorSourceBlend = this.ColorSourceBlend; context._lastBlendState[i].ColorDestinationBlend = this.ColorDestinationBlend; context._lastBlendState[i].AlphaSourceBlend = this.AlphaSourceBlend; context._lastBlendState[i].AlphaDestinationBlend = this.AlphaDestinationBlend; } } } else // _strategy.IndependentBlendEnable == true { throw new NotImplementedException(); } if (force || this.ColorWriteChannels != context._lastBlendState.ColorWriteChannels) { GL.ColorMask( (this.ColorWriteChannels & ColorWriteChannels.Red) != 0, (this.ColorWriteChannels & ColorWriteChannels.Green) != 0, (this.ColorWriteChannels & ColorWriteChannels.Blue) != 0, (this.ColorWriteChannels & ColorWriteChannels.Alpha) != 0); GL.CheckGLError(); context._lastBlendState.ColorWriteChannels = this.ColorWriteChannels; } } private static WebGLEquationFunc ToGLBlendEquationMode(BlendFunction function) { switch (function) { case BlendFunction.Add: return WebGLEquationFunc.ADD; case BlendFunction.ReverseSubtract: return WebGLEquationFunc.REVERSE_SUBTRACT; case BlendFunction.Subtract: return WebGLEquationFunc.SUBTRACT; default: throw new ArgumentException(); } } private static WebGLBlendFunc ToGLBlendFunc(Blend blend) { switch (blend) { case Blend.Zero: return WebGLBlendFunc.ZERO; case Blend.One: return WebGLBlendFunc.ONE; case Blend.BlendFactor: return WebGLBlendFunc.CONSTANT_COLOR; case Blend.DestinationAlpha: return WebGLBlendFunc.DST_ALPHA; case Blend.DestinationColor: return WebGLBlendFunc.DST_COLOR; case Blend.InverseBlendFactor: return WebGLBlendFunc.ONE_MINUS_CONSTANT_COLOR; case Blend.InverseDestinationAlpha: return WebGLBlendFunc.ONE_MINUS_DST_ALPHA; case Blend.InverseDestinationColor: return WebGLBlendFunc.ONE_MINUS_DST_COLOR; case Blend.InverseSourceAlpha: return WebGLBlendFunc.ONE_MINUS_SRC_ALPHA; case Blend.InverseSourceColor: return WebGLBlendFunc.ONE_MINUS_SRC_COLOR; case Blend.SourceAlpha: return WebGLBlendFunc.SRC_ALPHA; case Blend.SourceAlphaSaturation: return WebGLBlendFunc.SRC_ALPHA_SATURATE; case Blend.SourceColor: return WebGLBlendFunc.SRC_COLOR; default: throw new ArgumentOutOfRangeException("blend", "The specified blend function is not implemented."); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/States/ConcreteDepthStencilState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy { internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false) { var GL = context.GL; if (force || this.DepthBufferEnable != context._lastDepthStencilState.DepthBufferEnable) { if (!DepthBufferEnable) { GL.Disable(WebGLCapability.DEPTH_TEST); GL.CheckGLError(); } else { // enable Depth Buffer GL.Enable(WebGLCapability.DEPTH_TEST); GL.CheckGLError(); } context._lastDepthStencilState.DepthBufferEnable = this.DepthBufferEnable; } if (force || this.DepthBufferFunction != context._lastDepthStencilState.DepthBufferFunction) { GL.DepthFunc(DepthBufferFunction.ToGLComparisonFunction()); GL.CheckGLError(); context._lastDepthStencilState.DepthBufferFunction = this.DepthBufferFunction; } if (force || this.DepthBufferWriteEnable != context._lastDepthStencilState.DepthBufferWriteEnable) { GL.DepthMask(DepthBufferWriteEnable); GL.CheckGLError(); context._lastDepthStencilState.DepthBufferWriteEnable = this.DepthBufferWriteEnable; } if (force || this.StencilEnable != context._lastDepthStencilState.StencilEnable) { if (!StencilEnable) { GL.Disable(WebGLCapability.STENCIL_TEST); GL.CheckGLError(); } else { // enable Stencil GL.Enable(WebGLCapability.STENCIL_TEST); GL.CheckGLError(); } context._lastDepthStencilState.StencilEnable = this.StencilEnable; } // set function if (this.TwoSidedStencilMode) { throw new NotImplementedException(); } else { if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFunction != context._lastDepthStencilState.StencilFunction || this.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil || this.StencilMask != context._lastDepthStencilState.StencilMask) { GL.StencilFunc(this.StencilFunction.ToGLComparisonFunction(), ReferenceStencil, StencilMask); GL.CheckGLError(); context._lastDepthStencilState.StencilFunction = this.StencilFunction; context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil; context._lastDepthStencilState.StencilMask = this.StencilMask; } if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFail != context._lastDepthStencilState.StencilFail || this.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail || this.StencilPass != context._lastDepthStencilState.StencilPass) { GL.StencilOp(ToGLStencilOp(StencilFail), ToGLStencilOp(StencilDepthBufferFail), ToGLStencilOp(StencilPass)); GL.CheckGLError(); context._lastDepthStencilState.StencilFail = this.StencilFail; context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail; context._lastDepthStencilState.StencilPass = this.StencilPass; } } context._lastDepthStencilState.TwoSidedStencilMode = this.TwoSidedStencilMode; if (force || this.StencilWriteMask != context._lastDepthStencilState.StencilWriteMask) { GL.StencilMask(this.StencilWriteMask); GL.CheckGLError(); context._lastDepthStencilState.StencilWriteMask = this.StencilWriteMask; } } private static WebGLStencilOpFunc ToGLStencilOp(StencilOperation operation) { switch (operation) { case StencilOperation.Keep: return WebGLStencilOpFunc.KEEP; case StencilOperation.Decrement: return WebGLStencilOpFunc.DECR_WRAP; case StencilOperation.DecrementSaturation: return WebGLStencilOpFunc.DECR; case StencilOperation.IncrementSaturation: return WebGLStencilOpFunc.INCR; case StencilOperation.Increment: return WebGLStencilOpFunc.INCR_WRAP; case StencilOperation.Invert: return WebGLStencilOpFunc.INVERT; case StencilOperation.Replace: return WebGLStencilOpFunc.REPLACE; case StencilOperation.Zero: return WebGLStencilOpFunc.ZERO; default: throw new ArgumentOutOfRangeException("operation"); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/States/ConcreteRasterizerState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy { internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContext context, bool force = false) { var GL = context.GL; if (force) { // Turn off dithering to make sure data returned by Texture.GetData is accurate GL.Disable(WebGLCapability.DITHER); } // When rendering offscreen the faces change order. bool offscreen = context.FramebufferRequireFlippedY; switch (CullMode) { case CullMode.None: GL.Disable(WebGLCapability.CULL_FACE); GL.CheckGLError(); break; case CullMode.CullClockwiseFace: GL.Enable(WebGLCapability.CULL_FACE); GL.CheckGLError(); GL.CullFace(WebGLCullFaceMode.BACK); GL.CheckGLError(); if (offscreen) GL.FrontFace(WebGLWinding.CW); else GL.FrontFace(WebGLWinding.CCW); GL.CheckGLError(); break; case CullMode.CullCounterClockwiseFace: GL.Enable(WebGLCapability.CULL_FACE); GL.CheckGLError(); GL.CullFace(WebGLCullFaceMode.BACK); GL.CheckGLError(); if (offscreen) GL.FrontFace(WebGLWinding.CCW); else GL.FrontFace(WebGLWinding.CW); GL.CheckGLError(); break; default: throw new InvalidOperationException("CullMode"); } if (FillMode == FillMode.WireFrame) throw new PlatformNotSupportedException(); if (force || this.ScissorTestEnable != context._lastRasterizerState.ScissorTestEnable) { if (ScissorTestEnable) GL.Enable(WebGLCapability.SCISSOR_TEST); else GL.Disable(WebGLCapability.SCISSOR_TEST); GL.CheckGLError(); context._lastRasterizerState.ScissorTestEnable = this.ScissorTestEnable; } if (force || this.DepthBias != context._lastRasterizerState.DepthBias || this.SlopeScaleDepthBias != context._lastRasterizerState.SlopeScaleDepthBias) { if (this.DepthBias != 0 || this.SlopeScaleDepthBias != 0) { // from the docs it seems this works the same as for Direct3D // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml // explanation for Direct3D is in https://github.com/MonoGame/MonoGame/issues/4826 DepthFormat activeDepthFormat; if (context.IsRenderTargetBound) activeDepthFormat = ((IRenderTarget)context.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat; else activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat; int depthMul; switch (activeDepthFormat) { case DepthFormat.None: depthMul = 0; break; case DepthFormat.Depth16: depthMul = 1 << 16 - 1; break; case DepthFormat.Depth24: case DepthFormat.Depth24Stencil8: depthMul = 1 << 24 - 1; break; default: throw new ArgumentOutOfRangeException(); } GL.Enable(WebGLCapability.POLYGON_OFFSET_FILL); GL.CheckGLError(); GL.PolygonOffset(this.SlopeScaleDepthBias, this.DepthBias * depthMul); GL.CheckGLError(); } else { GL.Disable(WebGLCapability.POLYGON_OFFSET_FILL); GL.CheckGLError(); } context._lastRasterizerState.DepthBias = this.DepthBias; context._lastRasterizerState.SlopeScaleDepthBias = this.SlopeScaleDepthBias; } if (context.Capabilities.SupportsDepthClamp && (force || this.DepthClipEnable != context._lastRasterizerState.DepthClipEnable)) { throw new PlatformNotSupportedException(); context._lastRasterizerState.DepthClipEnable = this.DepthClipEnable; } // TODO: Implement MultiSampleAntiAlias } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/States/ConcreteSamplerState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteSamplerState : ResourceSamplerStateStrategy { internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContext cgraphicsContext, WebGLTextureTarget target, bool useMipmaps = false) { Debug.Assert(GraphicsDevice == ((IPlatformGraphicsContext)cgraphicsContext.Context).DeviceStrategy.Device, "The state was created for a different device!"); var GL = cgraphicsContext.GL; // texture filtering float textureMaxAnisotropy; WebGLTexParam textureMinFilter; WebGLTexParam textureMaxFilter; switch (Filter) { case TextureFilter.Point: textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_NEAREST : WebGLTexParam.NEAREST); textureMaxFilter = WebGLTexParam.NEAREST; break; case TextureFilter.Linear: textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR); textureMaxFilter = WebGLTexParam.LINEAR; break; case TextureFilter.Anisotropic: textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR); textureMaxFilter = WebGLTexParam.LINEAR; break; case TextureFilter.PointMipLinear: textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_LINEAR : WebGLTexParam.NEAREST); textureMaxFilter = WebGLTexParam.NEAREST; break; case TextureFilter.LinearMipPoint: textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_NEAREST : WebGLTexParam.LINEAR); textureMaxFilter = WebGLTexParam.LINEAR; break; case TextureFilter.MinLinearMagPointMipLinear: textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_LINEAR : WebGLTexParam.LINEAR); textureMaxFilter = WebGLTexParam.NEAREST; break; case TextureFilter.MinLinearMagPointMipPoint: textureMinFilter = (useMipmaps ? WebGLTexParam.LINEAR_MIPMAP_NEAREST : WebGLTexParam.LINEAR); textureMaxFilter = WebGLTexParam.NEAREST; break; case TextureFilter.MinPointMagLinearMipLinear: textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_LINEAR : WebGLTexParam.NEAREST); textureMaxFilter = WebGLTexParam.LINEAR; break; case TextureFilter.MinPointMagLinearMipPoint: textureMinFilter = (useMipmaps ? WebGLTexParam.NEAREST_MIPMAP_NEAREST : WebGLTexParam.NEAREST); textureMaxFilter = WebGLTexParam.LINEAR; break; default: throw new NotSupportedException(); } if (cgraphicsContext.Capabilities.SupportsTextureFilterAnisotropic) { throw new NotImplementedException(); } GL.TexParameter(target, WebGLTexParamName.TEXTURE_MIN_FILTER, textureMinFilter); GL.CheckGLError(); GL.TexParameter(target, WebGLTexParamName.TEXTURE_MAG_FILTER, textureMaxFilter); GL.CheckGLError(); // Set up texture addressing. GL.TexParameter(target, WebGLTexParamName.TEXTURE_WRAP_S, ToGLTextureAddressMode(AddressU)); GL.CheckGLError(); GL.TexParameter(target, WebGLTexParamName.TEXTURE_WRAP_T, ToGLTextureAddressMode(AddressV)); GL.CheckGLError(); // TextureMaxLevel if (cgraphicsContext.Capabilities.SupportsTextureMaxLevel) { int textureMaxLevel = 1000; if (this.MaxMipLevel > 0) textureMaxLevel = this.MaxMipLevel; throw new NotImplementedException(); } } private WebGLTexParam ToGLTextureAddressMode(TextureAddressMode textureAddressMode) { switch (textureAddressMode) { case TextureAddressMode.Clamp: return WebGLTexParam.CLAMP_TO_EDGE; case TextureAddressMode.Wrap: return WebGLTexParam.REPEAT; case TextureAddressMode.Mirror: return WebGLTexParam.MIRRORED_REPEAT; case TextureAddressMode.Border: throw new NotImplementedException(); default: throw new ArgumentException("No support for " + textureAddressMode); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Vertices/ConcreteDynamicIndexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true) { PlatformConstructDynamicIndexBuffer(contextStrategy); } private void PlatformConstructDynamicIndexBuffer(GraphicsContextStrategy contextStrategy) { base.PlatformConstructIndexBuffer(contextStrategy); } #region IDynamicIndexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicIndexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Vertices/ConcreteDynamicVertexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true) { PlatformConstructDynamicVertexBuffer(contextStrategy); } private void PlatformConstructDynamicVertexBuffer(GraphicsContextStrategy contextStrategy) { base.PlatformConstructVertexBuffer(contextStrategy); } #region IDynamicVertexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicVertexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Vertices/ConcreteIndexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : IndexBufferStrategy { private readonly WebGLBufferUsageHint _usageHint; private readonly WebGLDataType _drawElementsType; private WebGLBuffer _ibo; internal WebGLDataType DrawElementsType { get { return _drawElementsType; } } internal WebGLBuffer GLIndexBuffer { get { return _ibo; } } internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage) { Debug.Assert(isDynamic == true); _usageHint= WebGLBufferUsageHint.DYNAMIC_DRAW; switch (indexElementSize) { case IndexElementSize.SixteenBits: this._drawElementsType = WebGLDataType.USHORT; break; case IndexElementSize.ThirtyTwoBits: this._drawElementsType = WebGLDataType.UINT; break; default: throw new InvalidOperationException(); } } internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { _usageHint = WebGLBufferUsageHint.STATIC_DRAW; switch (indexElementSize) { case IndexElementSize.SixteenBits: this._drawElementsType = WebGLDataType.USHORT; break; case IndexElementSize.ThirtyTwoBits: this._drawElementsType = WebGLDataType.UINT; break; default: throw new InvalidOperationException(); } PlatformConstructIndexBuffer(contextStrategy); } internal void PlatformConstructIndexBuffer(GraphicsContextStrategy contextStrategy) { { var GL = contextStrategy.ToConcrete().GL; Debug.Assert(_ibo == null); int sizeInBytes = this.IndexCount * base.ElementSizeInBytes; _ibo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, _ibo); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true; GL.BufferData(WebGLBufferType.ELEMENT_ARRAY, sizeInBytes, _usageHint); GL.CheckGLError(); } } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) { { Debug.Assert(GLIndexBuffer != null); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInByte = sizeof(T); int sizeInBytes = elementSizeInByte * elementCount; int bufferSize = IndexCount * base.ElementSizeInBytes; GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, GLIndexBuffer); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true; if (options == SetDataOptions.Discard) { // By assigning NULL data to the buffer this gives a hint // to the device to discard the previous content. GL.BufferData( WebGLBufferType.ELEMENT_ARRAY, bufferSize, _usageHint); } GL.BufferSubData(WebGLBufferType.ELEMENT_ARRAY, offsetInBytes, data, startIndex, elementCount); GL.CheckGLError(); } } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { { Debug.Assert(GLIndexBuffer != null); // IWebGL2RenderingContext is required. if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("GetData() on BlazorGL require HiDef profile or higher."); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(WebGLBufferType.ELEMENT_ARRAY, GLIndexBuffer); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true; int elementSizeInByte = sizeof(T); ((IWebGL2RenderingContext)GL).GetBufferSubData(WebGLBufferType.ELEMENT_ARRAY, offsetInBytes, data, startIndex, elementCount); GL.CheckGLError(); } } protected override void PlatformGraphicsContextLost() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { if (_ibo != null) { _ibo.Dispose(); _ibo = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Vertices/ConcreteVertexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : VertexBufferStrategy { private readonly WebGLBufferUsageHint _usageHint; internal WebGLBuffer _vbo; internal WebGLBuffer GLVertexBuffer { get { return _vbo; } } internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { Debug.Assert(isDynamic == true); _usageHint = WebGLBufferUsageHint.DYNAMIC_DRAW; } internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { _usageHint = WebGLBufferUsageHint.STATIC_DRAW; PlatformConstructVertexBuffer(contextStrategy); } internal void PlatformConstructVertexBuffer(GraphicsContextStrategy contextStrategy) { { Debug.Assert(_vbo == null); var GL = contextStrategy.ToConcrete().GL; _vbo = GL.CreateBuffer(); GL.CheckGLError(); GL.BindBuffer(WebGLBufferType.ARRAY, _vbo); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; GL.BufferData(WebGLBufferType.ARRAY, (this.VertexDeclaration.VertexStride * this.VertexCount), _usageHint); GL.CheckGLError(); } } public override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) { { Debug.Assert(GLVertexBuffer != null); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(WebGLBufferType.ARRAY, GLVertexBuffer); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; if (options == SetDataOptions.Discard) { // By assigning NULL data to the buffer this gives a hint // to the device to discard the previous content. GL.BufferData( WebGLBufferType.ARRAY, bufferSize, _usageHint); GL.CheckGLError(); } if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0) { // there are no gaps so we can copy in one go GL.BufferSubData(WebGLBufferType.ARRAY, offsetInBytes, data, startIndex, elementCount); GL.CheckGLError(); } else { // else we must copy each element separately int dstOffset = offsetInBytes; for (int i = 0; i < elementCount; i++) { GL.BufferSubData(WebGLBufferType.ARRAY, dstOffset, data, startIndex+i, 1); GL.CheckGLError(); dstOffset += vertexStride; } } } } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { { Debug.Assert(GLVertexBuffer != null); // IWebGL2RenderingContext is required. if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("GetData() on BlazorGL require HiDef profile or higher."); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(WebGLBufferType.ARRAY, GLVertexBuffer); GL.CheckGLError(); ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; int elementSizeInByte = sizeof(T); if (elementSizeInByte == vertexStride || elementSizeInByte % vertexStride == 0) { ((IWebGL2RenderingContext)GL).GetBufferSubData(WebGLBufferType.ARRAY, offsetInBytes, data, startIndex, elementCount); } else { for (int i = 0; i < elementCount; i++) { ((IWebGL2RenderingContext)GL).GetBufferSubData(WebGLBufferType.ARRAY, offsetInBytes + (i*vertexStride), data, startIndex+i, 1); } } } } protected override void PlatformGraphicsContextLost() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { if (_vbo != null) { _vbo.Dispose(); _vbo = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.BlazorGL/Vertices/VertexDeclarationAttributeInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; using nkast.Wasm.Canvas.WebGL; namespace Microsoft.Xna.Platform.Graphics { // Holds information for caching internal class BufferBindingInfo { private WeakReference _vertexBufferStrategyRef = new WeakReference(null); public VertexDeclarationAttributeInfo AttributeInfo; public VertexBuffer VertexBuffer { get { return (VertexBuffer)_vertexBufferStrategyRef.Target; } set { _vertexBufferStrategyRef.Target = value; } } public IntPtr VertexOffset; public int InstanceFrequency; public BufferBindingInfo(VertexDeclarationAttributeInfo attributeInfo, VertexBuffer vertexBuffer, IntPtr vertexOffset, int instanceFrequency) { AttributeInfo = attributeInfo; VertexBuffer = vertexBuffer; VertexOffset = vertexOffset; InstanceFrequency = instanceFrequency; } public override string ToString() { return String.Format("{{VertexBuffer: {0}, VertexOffset: {1}, InstanceFrequency: {2}}}", VertexBuffer, VertexOffset, InstanceFrequency); } } internal class RenderTargetBindingArrayComparer : IEqualityComparer { public bool Equals(RenderTargetBinding[] first, RenderTargetBinding[] second) { if (object.ReferenceEquals(first, second)) return true; if (first == null || second == null) return false; if (first.Length != second.Length) return false; for (int i = 0; i < first.Length; i++) { if ((first[i].RenderTarget != second[i].RenderTarget) || (first[i].ArraySlice != second[i].ArraySlice)) { return false; } } return true; } public int GetHashCode(RenderTargetBinding[] array) { if (array != null) { unchecked { int hash = 17; foreach (RenderTargetBinding item in array) { if (item.RenderTarget != null) hash = hash * 23 + item.RenderTarget.GetHashCode(); hash = hash * 23 + item.ArraySlice.GetHashCode(); } return hash; } } return 0; } } /// /// Vertex attribute information for a particular shader/vertex declaration combination. /// internal class VertexDeclarationAttributeInfo { internal bool[] EnabledAttributes; internal List Elements; internal VertexDeclarationAttributeInfo(int maxVertexAttributes) { EnabledAttributes = new bool[maxVertexAttributes]; Elements = new List(); } } internal class VertexDeclarationAttributeInfoElement { public int AttributeLocation; public int NumberOfElements; public WebGLDataType VertexAttribPointerType; public bool Normalized; public int Offset; } } ================================================ FILE: Platforms/Graphics/.Common/SpriteBatcher.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { /// /// This class handles the queueing of batch items into the GPU by creating the triangle tesselations /// that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be /// batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices /// sent to the GPU). /// internal sealed class SpriteBatcher : SpriteBatcherStrategy { /// /// Initialization size for the batch item list and queue. /// private const int InitialBatchSize = 256; /// /// The maximum number of batch items that can be processed per iteration /// // the upper limit is the range of 16bit indices, (ushort.MaxValue+1)/4 = 16384 vertices per quad. // or (short.MaxValue+1)/4 = 8192 if we are using shorts instead of usigned shorts. private const int MaxBatchSize = 4096; /// /// The list of batch items to process. /// private SpriteBatchItem[] _batchItemList; /// /// Index pointer to the next available SpriteBatchItem in _batchItemList. /// private int _batchItemCount; /// /// The target graphics device. /// private readonly GraphicsDevice _device; /// /// Vertex index array. The values in this array never change. /// private short[] _index; private VertexPositionColorTexture[] _vertexArray; private int _baseQuad; private DynamicVertexBuffer _vertexBuffer; private IndexBuffer _indexBuffer; SetDataOptions _defaultVertexBufferSetDataMode = SetDataOptions.NoOverwrite; public override int BatchItemCount { get { return _batchItemCount; } } public SpriteBatcher(GraphicsDevice device, int capacity = 0) { _device = device; if (capacity <= 0) capacity = InitialBatchSize; else capacity = (capacity + 63) & (~63); // ensure chunks of 64. _batchItemList = new SpriteBatchItem[capacity]; _batchItemCount = 0; for (int i = 0; i < capacity; i++) _batchItemList[i] = new SpriteBatchItem(); EnsureArrayCapacity(capacity); switch (_device.Adapter.Backend) { case GraphicsBackend.OpenGL: case GraphicsBackend.GLES: case GraphicsBackend.WebGL: // NoOverwrite is not implemented in GL. _defaultVertexBufferSetDataMode = SetDataOptions.Discard; break; } } /// /// Reuse a previously allocated SpriteBatchItem from the item pool. /// if there is none available grow the pool and initialize new items. /// /// public override SpriteBatchItem CreateBatchItem() { if (_batchItemCount < _batchItemList.Length) { return _batchItemList[_batchItemCount++]; } else { int oldSize = _batchItemList.Length; int newSize = oldSize + oldSize / 2; // grow by x1.5 newSize = (newSize + 63) & (~63); // grow in chunks of 64. Array.Resize(ref _batchItemList, newSize); for (int i = oldSize; i < newSize; i++) _batchItemList[i] = new SpriteBatchItem(); EnsureArrayCapacity(Math.Min(newSize, MaxBatchSize)); return _batchItemList[_batchItemCount++]; } } /// /// Resize and recreate the missing indices for the index and vertex position color buffers. /// /// private unsafe void EnsureArrayCapacity(int numBatchItems) { int neededCapacity = 6 * numBatchItems; if (_index != null && neededCapacity <= _index.Length) { // Short circuit out of here because we have enough capacity. return; } short[] newIndex = new short[6 * numBatchItems]; int start = 0; if (_index != null) { _index.CopyTo(newIndex, 0); start = _index.Length / 6; } fixed (short* indexFixedPtr = newIndex) { short* indexPtr = indexFixedPtr + (start * 6); for (int i = start; i < numBatchItems; i++, indexPtr += 6) { /* * TL TR * 0----1 0,1,2,3 = index offsets for vertex indices * | /| TL,TR,BL,BR are vertex references in SpriteBatchItem. * | / | * | / | * |/ | * 2----3 * BL BR */ // Triangle 1 *(indexPtr + 0) = (short)(i * 4); *(indexPtr + 1) = (short)(i * 4 + 1); *(indexPtr + 2) = (short)(i * 4 + 2); // Triangle 2 *(indexPtr + 3) = (short)(i * 4 + 1); *(indexPtr + 4) = (short)(i * 4 + 3); *(indexPtr + 5) = (short)(i * 4 + 2); } } _index = newIndex; _vertexArray = new VertexPositionColorTexture[4 * numBatchItems]; if (_vertexBuffer != null) _vertexBuffer.Dispose(); int quadCount = (4 * numBatchItems); quadCount = quadCount * 4; //ensure vertex used 4 times before reset/Discard. _vertexBuffer = new DynamicVertexBuffer(_device, VertexPositionColorTexture.VertexDeclaration, quadCount, BufferUsage.WriteOnly); _baseQuad = 0; if (_indexBuffer != null) _indexBuffer.Dispose(); _indexBuffer = new IndexBuffer(_device, IndexElementSize.SixteenBits, newIndex.Length, BufferUsage.WriteOnly); _indexBuffer.SetData(newIndex); } /// /// Sorts the batch items /// /// The type of depth sorting desired for the rendering. public override void SortBatch(SpriteSortMode sortMode) { switch (sortMode) { case SpriteSortMode.Texture: case SpriteSortMode.FrontToBack: case SpriteSortMode.BackToFront: Array.Sort(_batchItemList, 0, _batchItemCount); break; } } /// /// Groups batch drawing into maximal allowed batch sets that do not /// overflow the 16 bit array indices for vertices. /// /// The custom effect to apply to the drawn geometry public unsafe override void DrawBatch(Effect effect) { if (effect != null && effect.IsDisposed) throw new ObjectDisposedException("effect"); // Determine how many iterations through the drawing code we need to make int batchIndex = 0; int batchCount = _batchItemCount; ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.Metrics_AddSpriteCount(batchCount); // Iterate through the batches, doing short.MaxValue sets of vertices only. while (batchCount > 0) { int spriteCount = 0; Texture2D tex = null; int numBatchesToProcess = batchCount; if (numBatchesToProcess > MaxBatchSize) { numBatchesToProcess = MaxBatchSize; } _device.SetVertexBuffer(_vertexBuffer); _device.Indices = _indexBuffer; // Avoid the array checking overhead by using pointer indexing! fixed (VertexPositionColorTexture* vertexArrayFixedPtr = _vertexArray) { VertexPositionColorTexture* vertexArrayPtr = vertexArrayFixedPtr; SetDataOptions mode = _defaultVertexBufferSetDataMode; if (mode == SetDataOptions.Discard || (_baseQuad + numBatchesToProcess) * 4 > _vertexBuffer.VertexCount) { mode = SetDataOptions.Discard; _baseQuad = 0; } // create batch for (int i = 0; i < numBatchesToProcess; i++, vertexArrayPtr += 4) { SpriteBatchItem item = _batchItemList[batchIndex + i]; // store the SpriteBatchItem data in our vertexArray *(vertexArrayPtr + 0) = item.vertexTL; *(vertexArrayPtr + 1) = item.vertexTR; *(vertexArrayPtr + 2) = item.vertexBL; *(vertexArrayPtr + 3) = item.vertexBR; } int stride = VertexPositionColorTexture.VertexDeclaration.VertexStride; _vertexBuffer.SetData(_baseQuad * 4 * stride, _vertexArray, 0, numBatchesToProcess * 4, stride, mode); } // draw batch for (int i = 0; i < numBatchesToProcess; i++, spriteCount++) { SpriteBatchItem item = _batchItemList[batchIndex++]; // if the texture changed, we need to flush and bind the new texture bool shouldFlush = !ReferenceEquals(item.Texture, tex); if (shouldFlush) { if (spriteCount > 0) FlushVertexArray(_baseQuad, spriteCount, effect, tex); _baseQuad += spriteCount; spriteCount = 0; tex = item.Texture; } // Release the texture. item.Texture = null; } // flush the remaining vertexArray data if (spriteCount > 0) FlushVertexArray(_baseQuad, spriteCount, effect, tex); _baseQuad += spriteCount; // Update our batch count to continue the process of culling down // large batches batchCount -= numBatchesToProcess; } // return items to the pool. _batchItemCount = 0; } /// /// Sends the triangle list to the graphics device. Here is where the actual drawing starts. /// /// The number of sprites to draw. /// The custom effect to apply to the geometry. /// The texture to draw. private void FlushVertexArray(int baseQuad, int spriteCount, Effect effect, Texture texture) { int baseVertex = baseQuad * 4; int minVertexIndex = 0; int numVertices = spriteCount * 4; int startIndex = 0; int primitiveCount = spriteCount * 2; GraphicsContextStrategy contextStrategy = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy; if (effect == null) // If no custom effect is defined, then simply render. { contextStrategy.Textures[0] = texture; // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks. contextStrategy.DrawIndexedPrimitives( PrimitiveType.TriangleList, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } else // If the effect is not null, then apply each pass and render the geometry { EffectPassCollection passes = effect.CurrentTechnique.Passes; foreach (EffectPass pass in passes) { pass.Apply(); // We have to set the texture again on each pass, // because pass.Apply() might have set a texture from the effect. contextStrategy.Textures[0] = texture; // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks. contextStrategy.DrawIndexedPrimitives( PrimitiveType.TriangleList, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } } } #region IDisposable Members private bool _isDisposed = false; protected override void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { _vertexBuffer.Dispose(); _indexBuffer.Dispose(); _vertexBuffer = null; _indexBuffer = null; _batchItemList = null; _vertexArray = null; _index = null; } _isDisposed = true; } } #endregion IDisposable Members } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { private DXGI.Adapter1 _dxAdapter; private DisplayModeCollection _supportedDisplayModes; private DisplayMode _currentDisplayMode; public override DisplayModeCollection Platform_SupportedDisplayModes { get { return _supportedDisplayModes; } } public override DisplayMode Platform_CurrentDisplayMode { get { return _currentDisplayMode; } } public override bool Platform_IsWideScreen { // Seems like XNA treats aspect ratios above 16:10 as wide screen. get { return Platform_CurrentDisplayMode.AspectRatio >= (16.0f / 10.0f); } } public override GraphicsBackend Backend { get { return GraphicsBackend.DirectX11; } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { switch (shaderBackend) { case GraphicsBackend.DirectX11: return true; default: return false; } } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { switch (shaderProfile) { case ShaderProfileType.DirectX_11: return true; default: return false; } } private static readonly Dictionary FormatTranslations = new Dictionary { { DXGI.Format.R8G8B8A8_UNorm, SurfaceFormat.Color }, { DXGI.Format.B8G8R8A8_UNorm, SurfaceFormat.Color }, { DXGI.Format.B5G6R5_UNorm, SurfaceFormat.Bgr565 }, }; internal ConcreteGraphicsAdapter(DXGI.Adapter1 dxAdapter, DXGI.Output dxMonitor) { _dxAdapter = dxAdapter; this.Platform_DeviceName = dxMonitor.Description.DeviceName.TrimEnd(new char[] { '\0' }); this.Platform_Description = dxAdapter.Description1.Description.TrimEnd(new char[] { '\0' }); this.Platform_DeviceId = dxAdapter.Description1.DeviceId; this.Platform_Revision = dxAdapter.Description1.Revision; this.Platform_VendorId = dxAdapter.Description1.VendorId; this.Platform_SubSystemId = dxAdapter.Description1.SubsystemId; this.Platform_MonitorHandle = dxMonitor.Description.MonitorHandle; int desktopWidth = dxMonitor.Description.DesktopBounds.Right - dxMonitor.Description.DesktopBounds.Left; int desktopHeight = dxMonitor.Description.DesktopBounds.Bottom - dxMonitor.Description.DesktopBounds.Top; List modes = new List(); foreach (KeyValuePair formatTranslation in FormatTranslations) { DXGI.ModeDescription[] displayModes; // This can fail on headless machines, so just assume the desktop size // is a valid mode and return that... so at least our unit tests work. try { displayModes = dxMonitor.GetDisplayModeList(formatTranslation.Key, 0); } catch (DX.SharpDXException) { DisplayMode mode = base.CreateDisplayMode(desktopWidth, desktopHeight, SurfaceFormat.Color); modes.Add(mode); _currentDisplayMode = mode; break; } foreach (DXGI.ModeDescription dxModeDesc in displayModes) { DisplayMode mode = base.CreateDisplayMode(dxModeDesc.Width, dxModeDesc.Height, formatTranslation.Value); // Skip duplicate modes with the same width/height/formats. if (modes.Contains(mode)) continue; modes.Add(mode); if (_currentDisplayMode == null) { if (mode.Width == desktopWidth && mode.Height == desktopHeight && mode.Format == SurfaceFormat.Color) _currentDisplayMode = mode; } } } _supportedDisplayModes = base.CreateDisplayModeCollection(modes); if (_currentDisplayMode == null) //(i.e. desktop mode wasn't found in the available modes) { #if DEBUG throw new Exception( "Unable to determine the current display mode. This can indicate that the " + "game is not configured to be HiDPI aware under Windows 10 or later. See " + "https://github.com/MonoGame/MonoGame/issues/5040 for more information."); #endif _currentDisplayMode = base.CreateDisplayMode(desktopWidth, desktopHeight, SurfaceFormat.Color); } return; } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) return true; D3D.FeatureLevel highestSupportedLevel; try { highestSupportedLevel = D3D11.Device.GetSupportedFeatureLevel(_dxAdapter); } catch (DX.SharpDXException ex) { if (ex.ResultCode == DXGI.ResultCode.Unsupported) // No supported feature levels! return false; throw; } switch (graphicsProfile) { case GraphicsProfile.Reach: return (highestSupportedLevel >= D3D.FeatureLevel.Level_9_1); case GraphicsProfile.HiDef: return (highestSupportedLevel >= D3D.FeatureLevel.Level_9_3); case GraphicsProfile.FL10_0: return (highestSupportedLevel >= D3D.FeatureLevel.Level_10_0); case GraphicsProfile.FL10_1: return (highestSupportedLevel >= D3D.FeatureLevel.Level_10_1); case GraphicsProfile.FL11_0: return (highestSupportedLevel >= D3D.FeatureLevel.Level_11_0); case GraphicsProfile.FL11_1: return (highestSupportedLevel >= D3D.FeatureLevel.Level_11_1); default: throw new InvalidOperationException(); } } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { selectedFormat = format; selectedDepthFormat = depthFormat; selectedMultiSampleCount = multiSampleCount; // fallback for unsupported renderTarget surface formats. if (selectedFormat == SurfaceFormat.Alpha8 || selectedFormat == SurfaceFormat.NormalizedByte2 || selectedFormat == SurfaceFormat.NormalizedByte4 || selectedFormat == SurfaceFormat.Dxt1 || selectedFormat == SurfaceFormat.Dxt3 || selectedFormat == SurfaceFormat.Dxt5 || selectedFormat == SurfaceFormat.Dxt1a || selectedFormat == SurfaceFormat.Dxt1SRgb || selectedFormat == SurfaceFormat.Dxt3SRgb || selectedFormat == SurfaceFormat.Dxt5SRgb) selectedFormat = SurfaceFormat.Color; // fallback for unsupported renderTarget surface formats on Reach profile. if (graphicsProfile == GraphicsProfile.Reach) { if (selectedFormat == SurfaceFormat.HalfSingle || selectedFormat == SurfaceFormat.HalfVector2 || selectedFormat == SurfaceFormat.HalfVector4 || selectedFormat == SurfaceFormat.HdrBlendable || selectedFormat == SurfaceFormat.Rg32 || selectedFormat == SurfaceFormat.Rgba1010102 || selectedFormat == SurfaceFormat.Rgba64 || selectedFormat == SurfaceFormat.Single || selectedFormat == SurfaceFormat.Vector2 || selectedFormat == SurfaceFormat.Vector4) selectedFormat = SurfaceFormat.Color; } return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsAdaptersProvider.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D = SharpDX.Direct3D; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { private ReadOnlyCollection _adapters; public ConcreteGraphicsAdaptersProvider() { List adapterList = CreateAdapterList(); _adapters = new ReadOnlyCollection(adapterList); } private List CreateAdapterList() { // NOTE: An adapter is a monitor+device combination, so we expect // at lease one adapter per connected monitor. using (DXGI.Factory1 factory = new DXGI.Factory1()) { int adapterCount = factory.GetAdapterCount(); List adapterList = new List(adapterCount); for (int i = 0; i < adapterCount; i++) { DXGI.Adapter1 dxAdapter = factory.GetAdapter1(i); int monitorCount = dxAdapter.GetOutputCount(); for (int j = 0; j < monitorCount; j++) { DXGI.Output dxMonitor; using (dxMonitor = dxAdapter.GetOutput(j)) { ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(dxAdapter, dxMonitor); GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy); adapterList.Add(adapter); } } } // The first adapter is considered the default. ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true; return adapterList; } } public override ReadOnlyCollection Platform_Adapters { get { return _adapters; } } public override GraphicsAdapter Platform_DefaultAdapter { get { return _adapters[0]; } } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities { internal void PlatformInitialize(ConcreteGraphicsContext cgraphicsContext, GraphicsDeviceStrategy deviceStrategy) { GraphicsProfile profile = deviceStrategy.GraphicsProfile; _maxTextureSize = 2048; if (profile == GraphicsProfile.HiDef) _maxTextureSize = 4096; if (profile == GraphicsProfile.FL10_0) _maxTextureSize = 8192; if (profile == GraphicsProfile.FL10_1) _maxTextureSize = 8192; if (profile == GraphicsProfile.FL11_0) _maxTextureSize = 16384; if (profile == GraphicsProfile.FL11_1) _maxTextureSize = 16384; SupportsTextureFilterAnisotropic = true; SupportsDepth24 = false; SupportsPackedDepthStencil = false; SupportsDepthNonLinear = false; SupportsTextureMaxLevel = false; // 16bit textures SupportsBgra5551 = true; SupportsBgra4444 = true; SupportsAbgr5551 = false; SupportsAbgr4444 = false; // Texture compression SupportsDxt1 = true; SupportsS3tc = true; SupportsSRgb = true; SupportsTextureArrays = profile >= GraphicsProfile.FL10_0; SupportsDepthClamp = profile >= GraphicsProfile.HiDef; _maxTextureSlots = 16; _maxVertexTextureSlots = (profile >= GraphicsProfile.FL10_0) ? 16 : 0; _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16; SupportsFloatTextures = profile >= GraphicsProfile.HiDef; SupportsHalfFloatTextures = profile >= GraphicsProfile.HiDef; SupportsNormalized = profile >= GraphicsProfile.HiDef; SupportsInstancing = true; //TNC: TODO: detect suport based on feture level SupportsBaseIndexInstancing = false; SupportsSeparateBlendStates = true; MaxTextureAnisotropy = (profile == GraphicsProfile.Reach) ? 2 : 16; } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using SharpDX.Mathematics.Interop; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy { private D3D11.DeviceContext _d3dContext; internal int _vertexBufferSlotsUsed; VertexInputLayoutKey _vertexInputLayoutKey = new VertexInputLayoutKey(); private PrimitiveType _lastPrimitiveType = (PrimitiveType)(-1); // The active render targets. internal readonly D3D11.RenderTargetView[] _currentRenderTargets = new D3D11.RenderTargetView[8]; // The active depth view. internal D3D11.DepthStencilView _currentDepthStencilView; private readonly Dictionary _userVertexBuffers = new Dictionary(); private readonly UserIndexBuffer _userIndexBuffer16 = new UserIndexBuffer(IndexElementSize.SixteenBits); private readonly UserIndexBuffer _userIndexBuffer32 = new UserIndexBuffer(IndexElementSize.ThirtyTwoBits); private class UserVertexBuffer { public int Count; public int Offset; public DynamicVertexBuffer Buffer; public int Stride; public UserVertexBuffer(int vertexStride) { this.Count = -1; this.Offset = 0; this.Buffer = null; this.Stride = vertexStride; } } private class UserIndexBuffer { public int Count; public int Offset; public DynamicIndexBuffer Buffer; public readonly IndexElementSize ElementSize; public UserIndexBuffer(IndexElementSize indexElementSize) { this.Count =-1; this.Offset = 0; this.Buffer = null; this.ElementSize = indexElementSize; } } internal D3D11.DeviceContext D3dContext { get { return _d3dContext; } } public override Viewport Viewport { get { return base.Viewport; } set { base.Viewport = value; PlatformApplyViewport(); } } internal ConcreteGraphicsContext(GraphicsContext context, D3D11.DeviceContext d3dContext) : base(context) { _d3dContext = d3dContext; #if WINDOWSDX GraphicsDebug = base.CreateGraphicsDebug(); #endif base._capabilities = new ConcreteGraphicsCapabilities(); ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize( this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy); base.Initialize(this.Capabilities); this.PlatformSetup(); } public override void PlatformSetup() { } public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { // Clear options for depth/stencil buffer if not attached. if (_currentDepthStencilView != null) { if (_currentDepthStencilView.Description.Format != DXGI.Format.D24_UNorm_S8_UInt) options &= ~ClearOptions.Stencil; } else { options &= ~ClearOptions.DepthBuffer; options &= ~ClearOptions.Stencil; } lock (this.SyncHandle) { // Clear the diffuse render buffer. if ((options & ClearOptions.Target) == ClearOptions.Target) { foreach (D3D11.RenderTargetView view in _currentRenderTargets) { if (view != null) this.D3dContext.ClearRenderTargetView(view, color.ToRawColor4()); } } // Clear the depth/stencil render buffer. D3D11.DepthStencilClearFlags flags = 0; if ((options & ClearOptions.DepthBuffer) == ClearOptions.DepthBuffer) flags |= D3D11.DepthStencilClearFlags.Depth; if ((options & ClearOptions.Stencil) == ClearOptions.Stencil) flags |= D3D11.DepthStencilClearFlags.Stencil; if (flags != 0) this.D3dContext.ClearDepthStencilView(_currentDepthStencilView, flags, depth, (byte)stencil); base.Metrics_AddClearCount(); } } private void PlatformApplyState() { Debug.Assert(this.D3dContext != null, "The d3d context is null!"); // NOTE: We make the assumption here that the caller has locked the d3dContext for us to use. { PlatformApplyBlend(); } if (_depthStencilStateDirty) { D3D11.DepthStencilState depthStencilState = ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy().GetDxState(); this.D3dContext.OutputMerger.SetDepthStencilState(depthStencilState, _actualDepthStencilState.ReferenceStencil); _depthStencilStateDirty = false; } if (_rasterizerStateDirty) { D3D11.RasterizerState rasterizerState = ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy().GetDxState(this); this.D3dContext.Rasterizer.State = rasterizerState; _rasterizerStateDirty = false; } if (_scissorRectangleDirty) { PlatformApplyScissorRectangle(); _scissorRectangleDirty = false; } } private void PlatformApplyBlend() { if (_blendStateDirty || _blendFactorDirty) { D3D11.BlendState blendState = ((IPlatformBlendState)_actualBlendState).GetStrategy().GetDxState(); RawColor4 blendFactor = BlendFactor.ToRawColor4(); this.D3dContext.OutputMerger.SetBlendState(blendState, blendFactor); _blendStateDirty = false; _blendFactorDirty = false; } } private void PlatformApplyScissorRectangle() { // NOTE: This code assumes CurrentD3DContext has been locked by the caller. this.D3dContext.Rasterizer.SetScissorRectangle( _scissorRectangle.X, _scissorRectangle.Y, _scissorRectangle.Right, _scissorRectangle.Bottom); _scissorRectangleDirty = false; } internal void PlatformApplyViewport() { lock (this.SyncHandle) { if (this.D3dContext != null) { RawViewportF viewport = _viewport.ToRawViewportF(); this.D3dContext.Rasterizer.SetViewport(viewport); } } } private void PlatformApplyIndexBuffer() { // NOTE: This code assumes CurrentD3DContext has been locked by the caller. if (_indexBufferDirty) { this.D3dContext.InputAssembler.SetIndexBuffer( ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DXIndexBuffer, ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType, 0); _indexBufferDirty = false; } } private void PlatformApplyVertexBuffers() { // NOTE: This code assumes CurrentD3DContext has been locked by the caller. if (_vertexBuffersDirty) { for (int slot = 0; slot < _vertexBuffers.Count; slot++) { VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot); VertexBuffer vertexBuffer = vertexBufferBinding.VertexBuffer; VertexDeclaration vertexDeclaration = vertexBuffer.VertexDeclaration; int vertexStride = vertexDeclaration.VertexStride; int vertexOffsetInBytes = vertexBufferBinding.VertexOffset * vertexStride; this.D3dContext.InputAssembler.SetVertexBuffers( slot, new D3D11.VertexBufferBinding(((IPlatformVertexBuffer)vertexBuffer).Strategy.ToConcrete().DXVertexBuffer, vertexStride, vertexOffsetInBytes)); } // TODO: do we need to reset the previously set slots? //for (int slot = _vertexBuffers.Count; slot < _vertexBufferSlotsUsed; slot++) //{ // this.D3dContext.InputAssembler.SetVertexBuffers(slot, new D3D11.VertexBufferBinding()); //} _vertexBufferSlotsUsed = _vertexBuffers.Count; } } private void PlatformApplyShaders() { // NOTE: This code assumes CurrentD3DContext has been locked by the caller. ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); ConcretePixelShader cpixelShader = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete(); if (_vertexShaderDirty) { this.D3dContext.VertexShader.Set(cvertexShader.DXVertexShader); base.Metrics_AddVertexShaderCount(); } if (_vertexShaderDirty || _vertexBuffersDirty) { _vertexInputLayoutKey.Set(_vertexBuffers.VertexDeclarations, _vertexBuffers.InstanceFrequencies, _vertexBuffers.Count); this.D3dContext.InputAssembler.InputLayout = cvertexShader.InputLayouts.GetOrCreate(_vertexInputLayoutKey, _vertexBuffers); _vertexShaderDirty = false; _vertexBuffersDirty = false; } if (_pixelShaderDirty) { this.D3dContext.PixelShader.Set(cpixelShader.DXPixelShader); _pixelShaderDirty = false; base.Metrics_AddPixelShaderCount(); } // Apply Constant Buffers PlatformApplyConstantBuffers(cvertexShader, this.D3dContext.VertexShader, ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete()); PlatformApplyConstantBuffers(cpixelShader, this.D3dContext.PixelShader, ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete()); // Apply Shader Texture and SamplersSamplers PlatformApplyTexturesAndSamplers(cvertexShader, this.D3dContext.VertexShader, ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete()); PlatformApplyTexturesAndSamplers(cpixelShader, this.D3dContext.PixelShader, ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete()); } private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, D3D11.CommonShaderStage shaderStage, ConcreteConstantBufferCollection cconstantBufferCollection) { // NOTE: We make the assumption here that the caller has // locked the CurrentD3DContext for us to use. uint validMask = cconstantBufferCollection.InternalValid; for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++) { uint mask = ((uint)1) << slot; ConstantBuffer constantBuffer = cconstantBufferCollection[slot]; if (constantBuffer != null && !constantBuffer.IsDisposed) { ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete(); // Update the hardware buffer. if (constantBufferStrategy.Dirty) { this.D3dContext.UpdateSubresource(constantBufferStrategy.BufferData, constantBufferStrategy.DXcbuffer); constantBufferStrategy.Dirty = false; } // Set the buffer to the shader stage. if ((cconstantBufferCollection.InternalDirty & mask) != 0) { shaderStage.SetConstantBuffer(slot, constantBufferStrategy.DXcbuffer); cconstantBufferCollection.InternalDirty &= ~mask; } } // clear buffer bit validMask &= ~mask; } } private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, D3D11.CommonShaderStage dxShaderStage, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection) { // NOTE: We make the assumption here that the caller has locked the d3dContext for us to use. GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile; for (int i = 0; i < cshader.Samplers.Length; i++) { int textureSlot = cshader.Samplers[i].textureSlot; int samplerSlot = cshader.Samplers[i].samplerSlot; // Debug.Assert(samplerSlot != 255); if (samplerSlot == 255) samplerSlot = textureSlot; // Check Samplers if (graphicsProfile == GraphicsProfile.Reach) { Texture texture = ctextureCollection[textureSlot]; SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot]; Texture2D texture2D = texture as Texture2D; if (texture2D != null) { if (samplerState.AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width) || samplerState.AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height)) throw new NotSupportedException("Reach profile support only Clamp mode for non-power of two Textures."); } } // Apply Samplers uint samplerMask = ((uint)1) << samplerSlot; if ((csamplerStateCollection.InternalD3dDirty & samplerMask) != 0) { SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot]; if (samplerState != null) { Debug.Assert(samplerState.GraphicsDevice == ((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, "The state was created for a different device!"); ConcreteSamplerState csamplerState = ((IPlatformSamplerState)samplerState).GetStrategy(); dxShaderStage.SetSampler(samplerSlot, csamplerState.GetDxState()); csamplerStateCollection.InternalD3dDirty &= ~samplerMask; } else { dxShaderStage.SetSampler(samplerSlot, null); csamplerStateCollection.InternalD3dDirty &= ~samplerMask; } } // Apply Textures uint textureMask = ((uint)1) << textureSlot; if ((ctextureCollection.InternalDirty & textureMask) != 0) { Texture texture = ctextureCollection[textureSlot]; if (texture != null && !texture.IsDisposed) { ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy(); dxShaderStage.SetShaderResource(textureSlot, ctexture.GetShaderResourceView()); ctextureCollection.InternalDirty &= ~textureMask; this.Metrics_AddTextureCount(); } else { dxShaderStage.SetShaderResource(textureSlot, null); ctextureCollection.InternalDirty &= ~textureMask; } } } int texturesCount = ctextureCollection.Length; // Clear unused Samplers for (int samplerSlot = 0; csamplerStateCollection.InternalD3dDirty != 0 && samplerSlot < texturesCount; samplerSlot++) { uint samplerMask = ((uint)1) << samplerSlot; if ((csamplerStateCollection.InternalD3dDirty & samplerMask) != 0) { SamplerState samplerState = csamplerStateCollection.InternalActualSamplers[samplerSlot]; if (samplerState == null) { dxShaderStage.SetSampler(samplerSlot, null); csamplerStateCollection.InternalD3dDirty &= ~samplerMask; } } } // Clear unused Textures for (int textureSlot = 0; ctextureCollection.InternalDirty != 0 && textureSlot < texturesCount; textureSlot++) { uint textureMask = ((uint)1) << textureSlot; if ((ctextureCollection.InternalDirty & textureMask) != 0) { Texture texture = ctextureCollection[textureSlot]; if (texture == null || texture.IsDisposed) { dxShaderStage.SetShaderResource(textureSlot, null); ctextureCollection.InternalDirty &= ~textureMask; } } } } private void PlatformApplyPrimitiveType(PrimitiveType primitiveType) { if (_lastPrimitiveType == primitiveType) return; this.D3dContext.InputAssembler.PrimitiveTopology = ConcreteGraphicsContext.ToPrimitiveTopology(primitiveType); _lastPrimitiveType = primitiveType; } private static D3D.PrimitiveTopology ToPrimitiveTopology(PrimitiveType primitiveType) { switch (primitiveType) { case PrimitiveType.LineList: return D3D.PrimitiveTopology.LineList; case PrimitiveType.LineStrip: return D3D.PrimitiveTopology.LineStrip; case PrimitiveType.TriangleList: return D3D.PrimitiveTopology.TriangleList; case PrimitiveType.TriangleStrip: return D3D.PrimitiveTopology.TriangleStrip; case PrimitiveType.PointList: return D3D.PrimitiveTopology.PointList; default: throw new ArgumentException(); } } public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount) { lock (this.SyncHandle) { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyVertexBuffers(); PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); this.D3dContext.Draw(vertexCount, vertexStart); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { lock (this.SyncHandle) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyVertexBuffers(); PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); this.D3dContext.DrawIndexed(indexCount, startIndex, baseVertex); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { lock (this.SyncHandle) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyVertexBuffers(); PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); this.D3dContext.DrawIndexed(indexCount, startIndex, baseVertex); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { lock (this.SyncHandle) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyVertexBuffers(); PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); if (baseInstance > 0) { if (!this.Capabilities.SupportsBaseIndexInstancing) throw new PlatformNotSupportedException("Instanced geometry drawing with base instance not supported."); this.D3dContext.DrawIndexedInstanced(indexCount, instanceCount, startIndex, baseVertex, baseInstance); } else { this.D3dContext.DrawIndexedInstanced(indexCount, instanceCount, startIndex, baseVertex, 0); } base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount); } } private int SetUserVertexBuffer(T[] vertexData, int vertexOffset, int vertexCount, VertexDeclaration vertexDeclaration) where T : struct { UserVertexBuffer userVertexBuffer; if (!_userVertexBuffers.TryGetValue(vertexDeclaration, out userVertexBuffer)) { userVertexBuffer = new UserVertexBuffer(vertexDeclaration.VertexStride); _userVertexBuffers[vertexDeclaration] = userVertexBuffer; } if (userVertexBuffer.Count < vertexCount) { if (userVertexBuffer.Buffer != null) userVertexBuffer.Buffer.Dispose(); int requiredVertexCount = Math.Max(vertexCount, 4 * 256); requiredVertexCount = (requiredVertexCount + 255) & (~255); // grow in chunks of 256. userVertexBuffer.Buffer = new DynamicVertexBuffer(((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, vertexDeclaration, requiredVertexCount, BufferUsage.WriteOnly); userVertexBuffer.Count = userVertexBuffer.Buffer.VertexCount; } int startVertex = userVertexBuffer.Offset; SetDataOptions setDataOptions = SetDataOptions.NoOverwrite; if ((startVertex + vertexCount) >= userVertexBuffer.Count) { setDataOptions = SetDataOptions.Discard; startVertex = 0; } userVertexBuffer.Buffer.SetData(startVertex * userVertexBuffer.Stride, vertexData, vertexOffset, vertexCount, userVertexBuffer.Stride, setDataOptions); userVertexBuffer.Offset = startVertex + vertexCount; SetVertexBuffer(userVertexBuffer.Buffer); return startVertex; } private int SetUserIndexBuffer(UserIndexBuffer userIndexBuffer, T[] indexData, int indexOffset, int indexCount) where T : struct { Debug.Assert(indexCount >= 0); if (userIndexBuffer.Count < indexCount) { if (userIndexBuffer.Buffer != null) userIndexBuffer.Buffer.Dispose(); int requiredIndexCount = Math.Max(indexCount, 6 * 512); requiredIndexCount = (requiredIndexCount + 511) & (~511); // grow in chunks of 512. userIndexBuffer.Buffer = new DynamicIndexBuffer(((IPlatformGraphicsContext)this.Context).DeviceStrategy.Device, userIndexBuffer.ElementSize, requiredIndexCount, BufferUsage.WriteOnly); userIndexBuffer.Count = userIndexBuffer.Buffer.IndexCount; } int startIndex = userIndexBuffer.Offset; SetDataOptions setDataOptions = SetDataOptions.NoOverwrite; if ((startIndex + indexCount) >= userIndexBuffer.Count) { setDataOptions = SetDataOptions.Discard; startIndex = 0; } userIndexBuffer.Buffer.SetData(startIndex * ((IPlatformIndexBuffer)userIndexBuffer.Buffer).Strategy.ElementSizeInBytes, indexData, indexOffset, indexCount, setDataOptions); userIndexBuffer.Offset = startIndex + indexCount; Indices = userIndexBuffer.Buffer; return startIndex; } public override void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) //where T : struct { // TODO: Do not set public VertexBuffers. // Bind directly to d3dContext and set dirty flags. int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, vertexCount, vertexDeclaration); lock (this.SyncHandle) { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); this.D3dContext.Draw(vertexCount, startVertex); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { // TODO: Do not set public VertexBuffers and Indices. // Bind directly to d3dContext and set dirty flags. int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, numVertices, vertexDeclaration); int startIndex = SetUserIndexBuffer(_userIndexBuffer16, indexData, indexOffset, indexCount); lock (this.SyncHandle) { PlatformApplyState(); PlatformApplyIndexBuffer(); // SetUserIndexBuffer() overwrites the indexbuffer PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); this.D3dContext.DrawIndexed(indexCount, startIndex, startVertex); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { // TODO: Do not set public VertexBuffers and Indices. // Bind directly to d3dContext and set dirty flags. int indexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); int startVertex = SetUserVertexBuffer(vertexData, vertexOffset, numVertices, vertexDeclaration); int startIndex = SetUserIndexBuffer(_userIndexBuffer32, indexData, indexOffset, indexCount); lock (this.SyncHandle) { PlatformApplyState(); PlatformApplyIndexBuffer(); // SetUserIndexBuffer() overwrites the indexbuffer PlatformApplyVertexBuffers(); // SetUserVertexBuffer() overwrites the vertexBuffer PlatformApplyShaders(); PlatformApplyPrimitiveType(primitiveType); this.D3dContext.DrawIndexed(indexCount, startIndex, startVertex); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void Flush() { this.D3dContext.Flush(); } public override OcclusionQueryStrategy CreateOcclusionQueryStrategy() { return new ConcreteOcclusionQuery(this); } public override GraphicsDebugStrategy CreateGraphicsDebugStrategy() { return new ConcreteGraphicsDebug(this); } public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity) { return new ConcreteConstantBufferCollection(capacity); } public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity) { return new ConcreteTextureCollection(this, capacity); } public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity) { return new ConcreteSamplerStateCollection(this, capacity); } public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) { return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared); } public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format) { return new ConcreteTexture3D(this, width, height, depth, mipMap, format); } public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format) { return new ConcreteTextureCube(this, size, mipMap, format); } public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount, surfaceType: TextureSurfaceType.RenderTarget); } public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream) { return new ConcreteTexture2D(this, stream); } public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats) { return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats); } public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source) { return new ConcreteBlendState(this, source); } public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source) { return new ConcreteDepthStencilState(this, source); } public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source) { return new ConcreteRasterizerState(this, source); } public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source) { return new ConcreteSamplerState(this, source); } protected override void Dispose(bool disposing) { if (disposing) { if (_userIndexBuffer16.Buffer != null) _userIndexBuffer16.Buffer.Dispose(); _userIndexBuffer16.Buffer = null; if (_userIndexBuffer32.Buffer != null) _userIndexBuffer32.Buffer.Dispose(); _userIndexBuffer32.Buffer = null; foreach (UserVertexBuffer uvb in _userVertexBuffers.Values) { uvb.Buffer.Dispose(); uvb.Buffer = null; } if (_d3dContext != null) _d3dContext.Dispose(); _d3dContext = null; } base.Dispose(disposing); } protected override void PlatformResolveRenderTargets() { for (int i = 0; i < base.RenderTargetCount; i++) { RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[i]; // Resolve MSAA render targets RenderTarget2D renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D; if (renderTarget != null) { ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this); } // Generate mipmaps. if (renderTargetBinding.RenderTarget.LevelCount > 1) { lock (this.SyncHandle) { this.D3dContext.GenerateMips(((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy().GetShaderResourceView()); } } } } protected override void PlatformApplyDefaultRenderTarget() { // Set the default swap chain. Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length); _currentRenderTargets[0] = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete()._renderTargetView; _currentDepthStencilView = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete()._depthStencilView; lock (this.SyncHandle) { this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets); } } protected override IRenderTarget PlatformApplyRenderTargets() { // Clear the current render targets. Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length); _currentDepthStencilView = null; // Make sure none of the new targets are bound // to the device as a texture resource. lock (this.SyncHandle) { ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete().ClearTargets(base.CurrentRenderTargetBindings, this.D3dContext.VertexShader); ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete().ClearTargets(base.CurrentRenderTargetBindings, this.D3dContext.PixelShader); } for (int i = 0; i < base.RenderTargetCount; i++) { RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[i]; IRenderTargetStrategyDX11 targetDX = (IRenderTargetStrategyDX11)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy(); _currentRenderTargets[i] = targetDX.GetRenderTargetView(renderTargetBinding.ArraySlice); } // Use the depth from the first target. IRenderTargetStrategyDX11 renderTargetDX = (IRenderTargetStrategyDX11)((IPlatformTexture)base.CurrentRenderTargetBindings[0].RenderTarget).GetTextureStrategy(); _currentDepthStencilView = renderTargetDX.GetDepthStencilView(base.CurrentRenderTargetBindings[0].ArraySlice); // Set the targets. lock (this.SyncHandle) { this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets); } return (IRenderTarget)base.CurrentRenderTargetBindings[0].RenderTarget; } internal void ClearCurrentRenderTargets() { _currentDepthStencilView = null; Array.Clear(_currentRenderTargets, 0, _currentRenderTargets.Length); Array.Clear(base.CurrentRenderTargetBindings, 0, base.CurrentRenderTargetBindings.Length); base._currentRenderTargetCount = 0; } #if UAP || WINUI internal void UAP_ResetRenderTargets() { PlatformApplyViewport(); lock (this.SyncHandle) this.D3dContext.OutputMerger.SetTargets(_currentDepthStencilView, _currentRenderTargets); ((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.Dirty(); _depthStencilStateDirty = true; _blendStateDirty = true; _indexBufferDirty = true; _vertexBuffersDirty = true; _pixelShaderDirty = true; _vertexShaderDirty = true; _rasterizerStateDirty = true; _scissorRectangleDirty = true; } #endif } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsDebug.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy { private readonly D3D11.InfoQueue _infoQueue; private readonly Queue _cachedMessages; private bool _hasPushedFilters = false; internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { D3D11.DeviceContext d3dContext = contextStrategy.ToConcrete().D3dContext; _infoQueue = d3dContext.QueryInterfaceOrNull(); _cachedMessages = new Queue(); if (_infoQueue != null) { _infoQueue.PushEmptyRetrievalFilter(); _infoQueue.PushEmptyStorageFilter(); _hasPushedFilters = true; } } public override bool TryDequeueMessage(out GraphicsDebugMessage message) { if (_infoQueue == null) { message = null; return false; } if (!_hasPushedFilters) { _infoQueue.PushEmptyRetrievalFilter(); _infoQueue.PushEmptyStorageFilter(); _hasPushedFilters = true; } if (_cachedMessages.Count > 0) { message = _cachedMessages.Dequeue(); return true; } if (_infoQueue.NumStoredMessagesAllowedByRetrievalFilter > 0) { // Grab all current messages and put them in the cached messages queue. for (int i = 0; i < _infoQueue.NumStoredMessagesAllowedByRetrievalFilter; i++) { D3D11.Message dxMessage = _infoQueue.GetMessage(i); GraphicsDebugMessage debugMsg = new GraphicsDebugMessage(); debugMsg.Message = dxMessage.Description; debugMsg.Id = (int)dxMessage.Id; debugMsg.IdName = dxMessage.Id.ToString(); debugMsg.Severity = dxMessage.Severity.ToString(); debugMsg.Category = dxMessage.Category.ToString(); _cachedMessages.Enqueue(debugMsg); } _infoQueue.ClearStoredMessages(); } if (_cachedMessages.Count > 0) { message = _cachedMessages.Dequeue(); return true; } // No messages to grab from DirectX. message = null; return false; } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsDevice.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using DX = SharpDX; using DXGI = SharpDX.DXGI; using D2D = SharpDX.Direct2D1; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; #if UAP || WINUI using System.Runtime.InteropServices; using Windows.Graphics.Display; using Windows.UI.Core; using Windows.UI.Xaml.Controls; using SharpDX.Mathematics.Interop; #endif namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy { // Core Direct3D Objects internal D3D11.Device _d3dDevice; internal D3D11.RenderTargetView _renderTargetView; internal D3D11.DepthStencilView _depthStencilView; #if WINDOWSDX internal DXGI.SwapChain _swapChain; #endif #if UAP || WINUI // The swap chain resources. internal DXGI.SwapChain1 _swapChain; internal D2D.Bitmap1 _bitmapTarget; internal SwapChainPanel _swapChainPanel; // Declare Direct2D Objects internal D2D.Factory1 _d2dFactory; internal D2D.Device _d2dDevice; internal D2D.DeviceContext _d2dContext; // Declare DirectWrite & Windows Imaging Component Objects internal SharpDX.DirectWrite.Factory _dwriteFactory; internal SharpDX.WIC.ImagingFactory2 _wicFactory; // Tearing (disabling V-Sync) support internal bool _isTearingSupported; internal float _dpi; #endif internal D3D11.Device D3DDevice { get { return _d3dDevice; } } internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, false, presentationParameters) { CreateDeviceIndependentResources(); // Windows requires BGRA support out of DX. D3D11.DeviceCreationFlags creationFlags = D3D11.DeviceCreationFlags.BgraSupport; if (presentationParameters.UseDebugLayers) creationFlags |= D3D11.DeviceCreationFlags.Debug; #if DEBUG && (UAP || WINUI) creationFlags |= D3D11.DeviceCreationFlags.Debug; #endif // Pass the preferred feature levels based on the // target profile that may have been set by the user. D3D.FeatureLevel[] featureLevels; List featureLevelsList = new List(); // create device with the highest available profile featureLevelsList.Add(D3D.FeatureLevel.Level_11_1); featureLevelsList.Add(D3D.FeatureLevel.Level_11_0); featureLevelsList.Add(D3D.FeatureLevel.Level_10_1); featureLevelsList.Add(D3D.FeatureLevel.Level_10_0); featureLevelsList.Add(D3D.FeatureLevel.Level_9_3); featureLevelsList.Add(D3D.FeatureLevel.Level_9_2); featureLevelsList.Add(D3D.FeatureLevel.Level_9_1); #if DEBUG featureLevelsList.Clear(); // create device specific to profile if (GraphicsProfile == GraphicsProfile.FL11_1) featureLevelsList.Add(D3D.FeatureLevel.Level_11_1); if (GraphicsProfile == GraphicsProfile.FL11_0) featureLevelsList.Add(D3D.FeatureLevel.Level_11_0); if (GraphicsProfile == GraphicsProfile.FL10_1) featureLevelsList.Add(D3D.FeatureLevel.Level_10_1); if (GraphicsProfile == GraphicsProfile.FL10_0) featureLevelsList.Add(D3D.FeatureLevel.Level_10_0); if (GraphicsProfile == GraphicsProfile.HiDef) featureLevelsList.Add(D3D.FeatureLevel.Level_9_3); if (GraphicsProfile == GraphicsProfile.Reach) featureLevelsList.Add(D3D.FeatureLevel.Level_9_1); #endif featureLevels = featureLevelsList.ToArray(); D3D.DriverType driverType = D3D.DriverType.Hardware; //Default value #if WINDOWSDX switch (presentationParameters.UseDriverType) { case PresentationParameters.DriverType.Reference: driverType = D3D.DriverType.Reference; break; case PresentationParameters.DriverType.FastSoftware: driverType = D3D.DriverType.Warp; break; } #endif #if UAP || WINUI driverType = GraphicsAdapter.UseReferenceDevice ? D3D.DriverType.Reference : D3D.DriverType.Hardware; #endif try { // Create the Direct3D device. using (D3D11.Device defaultDevice = new D3D11.Device(driverType, creationFlags, featureLevels)) { #if WINDOWSDX _d3dDevice = defaultDevice.QueryInterface(); #endif #if UAP || WINUI _d3dDevice = defaultDevice.QueryInterface(); #endif } #if UAP || WINUI // Necessary to enable video playback D3D.DeviceMultithread multithread = _d3dDevice.QueryInterface(); multithread.SetMultithreadProtected(true); #endif } catch (DX.SharpDXException) { // Try again without the debug flag. This allows debug builds to run // on machines that don't have the debug runtime installed. creationFlags &= ~D3D11.DeviceCreationFlags.Debug; using (D3D11.Device defaultDevice = new D3D11.Device(driverType, creationFlags, featureLevels)) { #if WINDOWSDX _d3dDevice = defaultDevice.QueryInterface(); #endif #if UAP || WINUI _d3dDevice = defaultDevice.QueryInterface(); #endif } } #if UAP || WINUI // Create the Direct2D device. using (DXGI.Device dxgiDevice = _d3dDevice.QueryInterface()) _d2dDevice = new D2D.Device(_d2dFactory, dxgiDevice); // Create Direct2D context _d2dContext = new D2D.DeviceContext(_d2dDevice, D2D.DeviceContextOptions.None); this.Dpi = DisplayInformation.GetForCurrentView().LogicalDpi; #endif } public override void Reset() { PlatformReset(this.PresentationParameters); } public override void Reset(PresentationParameters presentationParameters) { PlatformReset(presentationParameters); } private void PlatformReset(PresentationParameters presentationParameters) { this.PresentationParameters = presentationParameters; #if WINDOWSDX if (this.PresentationParameters.IsFullScreen) { int width, height; if (!this.PresentationParameters.HardwareModeSwitch) { DisplayMode displayMode = Adapter.CurrentDisplayMode; width = displayMode.Width; height = displayMode.Height; } else { int preferredWidth = this.PresentationParameters.BackBufferWidth; int preferredHeight = this.PresentationParameters.BackBufferHeight; SurfaceFormat preferredFormat = this.PresentationParameters.BackBufferFormat; GetClosestBackBufferSize(preferredWidth, preferredHeight, preferredFormat, out width, out height); } this.PresentationParameters.BackBufferWidth = width; this.PresentationParameters.BackBufferHeight = height; } #endif if (this.PresentationParameters.DeviceWindowHandle == IntPtr.Zero) throw new ArgumentException("PresentationParameters.DeviceWindowHandle must not be null."); CreateSizeDependentResources(); ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null); } public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle) { throw new NotImplementedException(); } public override void Present() { base.Present(); try { lock (((IPlatformGraphicsContext)_mainContext).Strategy.SyncHandle) { int syncInterval = 0; DXGI.PresentFlags presentFlags = DXGI.PresentFlags.None; #if WINDOWSDX // The first argument instructs DXGI to block n VSyncs before presenting. syncInterval = PresentationParameters.PresentationInterval.ToDXSwapInterval(); #endif #if UAP || WINUI // The first argument instructs DXGI to block until VSync, putting the application // to sleep until the next VSync. This ensures we don't waste any cycles rendering // frames that will never be displayed to the screen. if (_isTearingSupported && PresentationParameters.PresentationInterval == PresentInterval.Immediate) { syncInterval = 0; presentFlags = DXGI.PresentFlags.AllowTearing; } else { syncInterval = 1; } #endif _swapChain.Present(syncInterval, presentFlags); } } catch (DX.SharpDXException ex) { // TODO: How should we deal with a device lost case here? #if UAP || WINUI /* // If the device was removed either by a disconnect or a driver upgrade, we // must completely reinitialize the renderer. if (ex.ResultCode == DXGI.DXGIError.DeviceRemoved || ex.ResultCode == DXGI.DXGIError.DeviceReset) this.Initialize(); else throw; */ #endif } } public unsafe override void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) { // TODO share code with Texture2D.GetData // first set up a staging texture const SurfaceFormat format = SurfaceFormat.Color; //You can't Map the BackBuffer surface, so we copy to another texture using (D3D11.Texture2D backBufferTexture = D3D11.Resource.FromSwapChain(_swapChain, 0)) { D3D11.Texture2DDescription texture2DDesc = backBufferTexture.Description; texture2DDesc.SampleDescription = new DXGI.SampleDescription(1, 0); texture2DDesc.BindFlags = D3D11.BindFlags.None; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read; texture2DDesc.Usage = D3D11.ResourceUsage.Staging; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; using (D3D11.Texture2D stagingTexture = new D3D11.Texture2D(this.D3DDevice, texture2DDesc)) { lock (((IPlatformGraphicsContext)_mainContext).Strategy.SyncHandle) { // Copy the data from the GPU to the staging texture. // if MSAA is enabled we need to first copy to a resource without MSAA if (backBufferTexture.Description.SampleDescription.Count > 1) { texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; using (D3D11.Texture2D noMsTex = new D3D11.Texture2D(this.D3DDevice, texture2DDesc)) { ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.ResolveSubresource(backBufferTexture, 0, noMsTex, 0, texture2DDesc.Format); if (rect.HasValue) { Rectangle r = rect.Value; ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.CopySubresourceRegion(noMsTex, 0, new D3D11.ResourceRegion(r.Left, r.Top, 0, r.Right, r.Bottom, 1), stagingTexture, 0); } else ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.CopyResource(noMsTex, stagingTexture); } } else { if (rect.HasValue) { Rectangle r = rect.Value; ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.CopySubresourceRegion(backBufferTexture, 0, new D3D11.ResourceRegion(r.Left, r.Top, 0, r.Right, r.Bottom, 1), stagingTexture, 0); } else ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.CopyResource(backBufferTexture, stagingTexture); } // Copy the data to the array. DX.DataStream stream = null; DX.DataBox dataBox = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream); try { int elementsInRow, rows; if (rect.HasValue) { elementsInRow = rect.Value.Width; rows = rect.Value.Height; } else { elementsInRow = stagingTexture.Description.Width; rows = stagingTexture.Description.Height; } int elementSize = format.GetSize(); int rowSize = elementSize * elementsInRow; if (rowSize == dataBox.RowPitch) stream.ReadRange(data, startIndex, elementCount); else { // Some drivers may add pitch to rows. // We need to copy each row separately and skip trailing zeroes. stream.Seek(0, SeekOrigin.Begin); int elementSizeInByte = sizeof(T); for (int row = 0; row < rows; row++) { int i; for (i = row * rowSize / elementSizeInByte; i < (row + 1) * rowSize / elementSizeInByte; i++) data[i + startIndex] = stream.Read(); if (i >= elementCount) break; stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current); } } } finally { DX.Utilities.Dispose( ref stream); ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.UnmapSubresource(stagingTexture, 0); } } } } } /// /// Creates resources not tied the active graphics device. /// private void CreateDeviceIndependentResources() { #if UAP || WINUI D2D.DebugLevel debugLevel = D2D.DebugLevel.None; #if DEBUG && (UAP || WINUI) debugLevel |= D2D.DebugLevel.Information; #endif // Allocate new references _d2dFactory = new D2D.Factory1(D2D.FactoryType.SingleThreaded, debugLevel); _dwriteFactory = new SharpDX.DirectWrite.Factory(SharpDX.DirectWrite.FactoryType.Shared); _wicFactory = new SharpDX.WIC.ImagingFactory2(); #endif } protected override void PlatformInitialize() { #if WINDOWSDX if (this.PresentationParameters.IsFullScreen) { int width, height; if (!this.PresentationParameters.HardwareModeSwitch) { DisplayMode displayMode = Adapter.CurrentDisplayMode; width = displayMode.Width; height = displayMode.Height; } else { int preferredWidth = this.PresentationParameters.BackBufferWidth; int preferredHeight = this.PresentationParameters.BackBufferHeight; SurfaceFormat preferredFormat = this.PresentationParameters.BackBufferFormat; GetClosestBackBufferSize(preferredWidth, preferredHeight, preferredFormat, out width, out height); } this.PresentationParameters.BackBufferWidth = width; this.PresentationParameters.BackBufferHeight = height; } #endif CreateSizeDependentResources(); } #if WINDOWSDX private void GetClosestBackBufferSize(int preferredWidth, int preferredHeight, SurfaceFormat preferredFormat, out int width, out int height) { width = preferredWidth; height = preferredHeight; // TODO: we can get a matching DisplayMode from this.Adapter.SupportedDisplayModes DXGI.Output output = null; if (_swapChain != null) { try { output = _swapChain.ContainingOutput; } catch (DX.SharpDXException) { /* ContainingOutput fails on a headless device */ } } else { // get the primary output // TODO: GetAdapter1(0) here is wrong. Get the DXGI.Adapter1 from ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete()._dxAdapter. using (DXGI.Factory1 factory = new DXGI.Factory1()) using (DXGI.Adapter1 adapter = factory.GetAdapter1(0)) output = adapter.Outputs[0]; } if (output != null) { using (output) { DXGI.ModeDescription targetModeDesc = new DXGI.ModeDescription(); targetModeDesc.Scaling = DXGI.DisplayModeScaling.Unspecified; targetModeDesc.Width = preferredWidth; targetModeDesc.Height = preferredHeight; targetModeDesc.Format = preferredFormat.ToDXFormat(); DXGI.ModeDescription closestMode; output.GetClosestMatchingMode(this.D3DDevice, targetModeDesc, out closestMode); width = closestMode.Width; height = closestMode.Height; } } } #endif #if WINDOWSDX internal void SetHardwareFullscreen() { _swapChain.SetFullscreenState(PresentationParameters.IsFullScreen && PresentationParameters.HardwareModeSwitch, null); } internal void ClearHardwareFullscreen() { _swapChain.SetFullscreenState(false, null); } #endif #if WINDOWSDX internal void ResizeTargets() { DXGI.Format format = PresentationParameters.BackBufferFormat.ToDXFormat(); DXGI.ModeDescription modeDesc = new DXGI.ModeDescription(); modeDesc.Format = format; modeDesc.Scaling = DXGI.DisplayModeScaling.Unspecified; modeDesc.Width = PresentationParameters.BackBufferWidth; modeDesc.Height = PresentationParameters.BackBufferHeight; _swapChain.ResizeTarget(ref modeDesc); } #endif #if WINDOWSDX internal void RefreshAdapter() { if (_swapChain == null) return; DXGI.Output output = null; try { output = _swapChain.ContainingOutput; } catch (DX.SharpDXException) { /* ContainingOutput fails on a headless device */ } if (output != null) { using (output) { foreach (GraphicsAdapter adapter in GraphicsAdapter.Adapters) { if (adapter.DeviceName == output.Description.DeviceName) { Adapter = adapter; break; } } } } } #endif #if UAP || WINUI internal void SetMultiSamplingToMaximum(PresentationParameters presentationParameters, out int quality) { quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern; } #endif internal void Internal_CreateSizeDependentResources() { this.CreateSizeDependentResources(); } private void CreateSizeDependentResources() { // Clamp MultiSampleCount int maxMultiSampleCount = GetMaxMultiSampleCount(this.PresentationParameters.BackBufferFormat); PresentationParameters.MultiSampleCount = TextureHelpers.GetClampedMultiSampleCount(PresentationParameters.BackBufferFormat, PresentationParameters.MultiSampleCount, maxMultiSampleCount); ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.OutputMerger.SetTargets((D3D11.DepthStencilView)null, (D3D11.RenderTargetView)null); if (_renderTargetView != null) { _renderTargetView.Dispose(); _renderTargetView = null; } if (_depthStencilView != null) { _depthStencilView.Dispose(); _depthStencilView = null; } #if UAP || WINUI if (_bitmapTarget != null) { _bitmapTarget.Dispose(); _bitmapTarget = null; } _d2dContext.Target = null; #endif // Clear the current render targets. ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().ClearCurrentRenderTargets(); // Make sure all pending rendering commands are flushed. ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().D3dContext.Flush(); // We need presentation parameters to continue here. if (PresentationParameters == null || PresentationParameters.DeviceWindowHandle == IntPtr.Zero) { if (_swapChain != null) { _swapChain.Dispose(); _swapChain = null; } return; } DXGI.Format format = PresentationParameters.BackBufferFormat.ToDXFormat(); DXGI.SampleDescription multisampleDesc = GetSupportedSampleDescription( format, PresentationParameters.MultiSampleCount); DXGI.SwapChainFlags swapChainFlags = DXGI.SwapChainFlags.None; #if WINDOWSDX swapChainFlags = DXGI.SwapChainFlags.AllowModeSwitch; // If the swap chain already exists... update it. if (_swapChain != null // check if multisampling hasn't changed && _swapChain.Description.SampleDescription.Count == multisampleDesc.Count && _swapChain.Description.SampleDescription.Quality == multisampleDesc.Quality ) { _swapChain.ResizeBuffers(2, PresentationParameters.BackBufferWidth, PresentationParameters.BackBufferHeight, format, swapChainFlags); } else // Otherwise, create a new swap chain. { bool wasFullScreen = false; // Dispose of old swap chain if exists if (_swapChain != null) { wasFullScreen = _swapChain.IsFullScreen; // Before releasing a swap chain, first switch to windowed mode _swapChain.SetFullscreenState(false, null); _swapChain.Dispose(); } // SwapChain description DXGI.SwapChainDescription swapChainDesc = new DXGI.SwapChainDescription(); swapChainDesc.ModeDescription.Format = format; swapChainDesc.ModeDescription.Scaling = DXGI.DisplayModeScaling.Unspecified; swapChainDesc.ModeDescription.Width = PresentationParameters.BackBufferWidth; swapChainDesc.ModeDescription.Height = PresentationParameters.BackBufferHeight; swapChainDesc.OutputHandle = PresentationParameters.DeviceWindowHandle; swapChainDesc.IsWindowed = true; swapChainDesc.SampleDescription = multisampleDesc; swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput; swapChainDesc.BufferCount = 2; swapChainDesc.SwapEffect = PresentationParameters.PresentationInterval.ToDXSwapEffect(); swapChainDesc.Flags = swapChainFlags; // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device // First, retrieve the underlying DXGI Device from the D3D Device. // Creates the swap chain using (DXGI.Device1 dxgiDevice = this.D3DDevice.QueryInterface()) using (DXGI.Adapter dxgiAdapter = dxgiDevice.Adapter) using (DXGI.Factory1 dxgiFactory = dxgiAdapter.GetParent()) { _swapChain = new DXGI.SwapChain(dxgiFactory, dxgiDevice, swapChainDesc); RefreshAdapter(); dxgiFactory.MakeWindowAssociation(PresentationParameters.DeviceWindowHandle, DXGI.WindowAssociationFlags.IgnoreAll); // To reduce latency, ensure that DXGI does not queue more than one frame at a time. // Docs: https://msdn.microsoft.com/en-us/library/windows/desktop/ff471334(v=vs.85).aspx dxgiDevice.MaximumFrameLatency = 1; } // Preserve full screen state, after swap chain is re-created if (PresentationParameters.HardwareModeSwitch && wasFullScreen) SetHardwareFullscreen(); } #endif #if UAP || WINUI _isTearingSupported = IsTearingSupported(); if (_isTearingSupported) { swapChainFlags = DXGI.SwapChainFlags.AllowTearing; } // If the swap chain already exists... update it. if (_swapChain != null ) { _swapChain.ResizeBuffers(2, PresentationParameters.BackBufferWidth, PresentationParameters.BackBufferHeight, format, swapChainFlags); } else // Otherwise, create a new swap chain. { // SwapChain description DXGI.SwapChainDescription1 swapChainDesc = new DXGI.SwapChainDescription1(); // Automatic sizing swapChainDesc.Width = PresentationParameters.BackBufferWidth; swapChainDesc.Height = PresentationParameters.BackBufferHeight; swapChainDesc.Format = format; swapChainDesc.Stereo = false; // By default we scale the backbuffer to the window // rectangle to function more like a WP7 game. swapChainDesc.Scaling = DXGI.Scaling.Stretch; swapChainDesc.SampleDescription = multisampleDesc; swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput; swapChainDesc.BufferCount = 2; swapChainDesc.SwapEffect = PresentationParameters.PresentationInterval.ToDXSwapEffect(); swapChainDesc.Flags = swapChainFlags; // Once the desired swap chain description is configured, it must be created on the same adapter as our D3D Device // First, retrieve the underlying DXGI Device from the D3D Device. // Creates the swap chain using (DXGI.Device2 dxgiDevice2 = this.D3DDevice.QueryInterface()) using (DXGI.Adapter dxgiAdapter = dxgiDevice2.Adapter) using (DXGI.Factory2 dxgiFactory2 = dxgiAdapter.GetParent()) { _swapChainPanel = UAPGameWindow.FromHandle(PresentationParameters.DeviceWindowHandle).SwapChainPanel; if (_swapChainPanel != null) { using (DXGI.ISwapChainPanelNative nativePanel = DX.ComObject.As(_swapChainPanel)) { _swapChain = new DXGI.SwapChain1(dxgiFactory2, dxgiDevice2, ref swapChainDesc, null); nativePanel.SwapChain = _swapChain; // update swapChain2.MatrixTransform on SizeChanged of SwapChainPanel // sometimes window.SizeChanged and SwapChainPanel.SizeChanged are not synced _swapChainPanel.SizeChanged += (sender, e) => { try { using (DXGI.SwapChain2 swapChain2 = _swapChain.QueryInterface()) { RawMatrix3x2 inverseScale = new RawMatrix3x2(); inverseScale.M11 = (float)_swapChainPanel.ActualWidth / PresentationParameters.BackBufferWidth; inverseScale.M22 = (float)_swapChainPanel.ActualHeight / PresentationParameters.BackBufferHeight; swapChain2.MatrixTransform = inverseScale; }; } catch (Exception) { } }; } } else // (PresentationParameters.DeviceWindowHandle != IntPtr.Zero) { // Creates a SwapChain from a CoreWindow pointer. CoreWindow coreWindow = Marshal.GetObjectForIUnknown(PresentationParameters.DeviceWindowHandle) as CoreWindow; using (DX.ComObject comWindow = new DX.ComObject(coreWindow)) _swapChain = new DXGI.SwapChain1(dxgiFactory2, dxgiDevice2, comWindow, ref swapChainDesc); } // Ensure that DXGI does not queue more than one frame at a time. This both reduces // latency and ensures that the application will only render after each VSync, minimizing // power consumption. dxgiDevice2.MaximumFrameLatency = 1; } } _swapChain.Rotation = DXGI.DisplayModeRotation.Identity; // Counter act the composition scale of the render target as // we already handle this in the platform window code. if (_swapChainPanel != null) { Windows.Foundation.IAsyncAction asyncResult = _swapChainPanel.Dispatcher.RunIdleAsync((e) => { RawMatrix3x2 inverseScale = new RawMatrix3x2(); inverseScale.M11 = (float)_swapChainPanel.ActualWidth / PresentationParameters.BackBufferWidth; inverseScale.M22 = (float)_swapChainPanel.ActualHeight / PresentationParameters.BackBufferHeight; using (DXGI.SwapChain2 swapChain2 = _swapChain.QueryInterface()) swapChain2.MatrixTransform = inverseScale; }); } #endif // Obtain the backbuffer for this window which will be the final 3D rendertarget. Point targetSize; using (D3D11.Texture2D backBuffer = D3D11.Texture2D.FromSwapChain(_swapChain, 0)) { // Create a view interface on the rendertarget to use on bind. _renderTargetView = new D3D11.RenderTargetView(this.D3DDevice, backBuffer); // Get the rendertarget dimensions for later. D3D11.Texture2DDescription backBufferDesc = backBuffer.Description; targetSize = new Point(backBufferDesc.Width, backBufferDesc.Height); } // Create the depth buffer if we need it. if (PresentationParameters.DepthStencilFormat != DepthFormat.None) { DXGI.Format depthFormat = PresentationParameters.DepthStencilFormat.ToDXFormat(); // Allocate a 2-D surface as the depth/stencil buffer. D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Format = depthFormat; texture2DDesc.ArraySize = 1; texture2DDesc.MipLevels = 1; texture2DDesc.Width = targetSize.X; texture2DDesc.Height = targetSize.Y; texture2DDesc.SampleDescription = multisampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil; using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(this.D3DDevice, texture2DDesc)) { // Create a DepthStencil view on this surface to use on bind. _depthStencilView = new D3D11.DepthStencilView(this.D3DDevice, depthBuffer); } } // Set the current viewport. _mainContext.Viewport = new Viewport { X = 0, Y = 0, Width = targetSize.X, Height = targetSize.Y, MinDepth = 0.0f, MaxDepth = 1.0f }; #if UAP || WINUI // Now we set up the Direct2D render target bitmap linked to the swapchain. // Whenever we render to this bitmap, it will be directly rendered to the // swapchain associated with the window. D2D.BitmapProperties1 bitmapProperties = new D2D.BitmapProperties1( new D2D.PixelFormat(format, D2D.AlphaMode.Premultiplied), _dpi, _dpi, D2D.BitmapOptions.Target | D2D.BitmapOptions.CannotDraw); // Direct2D needs the dxgi version of the backbuffer surface pointer. // Get a D2D surface from the DXGI back buffer to use as the D2D render target. using (DXGI.Surface dxgiBackBuffer = _swapChain.GetBackBuffer(0)) _bitmapTarget = new D2D.Bitmap1(_d2dContext, dxgiBackBuffer, bitmapProperties); // So now we can set the Direct2D render target. _d2dContext.Target = _bitmapTarget; // Set D2D text anti-alias mode to Grayscale to // ensure proper rendering of text on intermediate surfaces. _d2dContext.TextAntialiasMode = D2D.TextAntialiasMode.Grayscale; #endif } internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat) { DXGI.Format format = surfaceFormat.ToDXFormat(); // Find the maximum supported level starting with the game's requested multisampling level // and halving each time until reaching 0 (meaning no multisample support). int qualityLevels = 0; int maxLevel = 32; // The highest possible multisampling level while (maxLevel > 0) { qualityLevels = this.D3DDevice.CheckMultisampleQualityLevels(format, maxLevel); if (qualityLevels > 0) break; maxLevel /= 2; } return maxLevel; } /// /// Get highest multisample quality level for specified format and multisample count. /// Returns 0 if multisampling is not supported for input parameters. /// /// The texture format. /// The number of samples during multisampling. /// /// Higher than zero if multiSampleCount is supported. /// Zero if multiSampleCount is not supported. /// private int GetMultiSamplingQuality(DXGI.Format format, int multiSampleCount) { // The valid range is between zero and one less than the level returned by CheckMultisampleQualityLevels // https://msdn.microsoft.com/en-us/library/windows/desktop/bb173072(v=vs.85).aspx int qualityLevels = this.D3DDevice.CheckMultisampleQualityLevels(format, multiSampleCount) - 1; return Math.Max(qualityLevels, 0); // clamp minimum to 0 } internal DXGI.SampleDescription GetSupportedSampleDescription(DXGI.Format format, int multiSampleCount) { DXGI.SampleDescription multisampleDesc = new DXGI.SampleDescription(1, 0); if (multiSampleCount > 1) { int quality = GetMultiSamplingQuality(format, multiSampleCount); multisampleDesc.Count = multiSampleCount; multisampleDesc.Quality = quality; } return multisampleDesc; } #if UAP || WINUI internal void Trim() { using (DXGI.Device3 dxgiDevice3 = this.D3DDevice.QueryInterface()) dxgiDevice3.Trim(); } internal float Dpi { get { return _dpi; } set { if (_dpi == value) return; _dpi = value; _d2dContext.DotsPerInch = new DX.Size2F(_dpi, _dpi); //if (OnDpiChanged != null) // OnDpiChanged(this); } } internal bool IsTearingSupported() { RawBool allowTearing; using (DXGI.Factory2 dxgiFactory2 = new DXGI.Factory2()) { unsafe { DXGI.Factory5 factory5 = dxgiFactory2.QueryInterface(); try { factory5.CheckFeatureSupport(DXGI.Feature.PresentAllowTearing, new IntPtr(&allowTearing), sizeof(RawBool)); return allowTearing; } catch (DX.SharpDXException ex) { // can't request feature } } } return false; } #endif public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { // Get Direct3D 11.1 context #if WINDOWSDX D3D11.DeviceContext d3dContext = _d3dDevice.ImmediateContext.QueryInterface(); #endif #if UAP || WINUI D3D11.DeviceContext1 d3dContext = _d3dDevice.ImmediateContext.QueryInterface(); #endif return new ConcreteGraphicsContext(context, d3dContext); } public override System.Reflection.Assembly ConcreteAssembly { get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); } } protected override void Dispose(bool disposing) { if (disposing) { // make sure to release full screen or this might cause issues on exit if (_swapChain != null && _swapChain.IsFullScreen) _swapChain.SetFullscreenState(false, null); DX.Utilities.Dispose(ref _renderTargetView); DX.Utilities.Dispose(ref _depthStencilView); DX.Utilities.Dispose(ref _swapChain); #if UAP || WINUI if (_bitmapTarget != null) { _bitmapTarget.Dispose(); _depthStencilView = null; } if (_d2dDevice != null) { _d2dDevice.Dispose(); _d2dDevice = null; } if (_d2dContext != null) { _d2dContext.Target = null; _d2dContext.Dispose(); _d2dContext = null; } if (_d2dFactory != null) { _d2dFactory.Dispose(); _d2dFactory = null; } if (_dwriteFactory != null) { _dwriteFactory.Dispose(); _dwriteFactory = null; } if (_wicFactory != null) { _wicFactory.Dispose(); _wicFactory = null; } #endif DX.Utilities.Dispose(ref _d3dDevice); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteGraphicsFactory.cs ================================================ // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteGraphicsFactory : GraphicsFactory { public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy() { return new ConcreteGraphicsAdaptersProvider(); } public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters); } public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity) { return new SpriteBatcher(graphicsDevice, capacity); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteOcclusionQuery.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteOcclusionQuery : OcclusionQueryStrategy { private bool _inBeginEndPair; // true if Begin was called and End was not yet called. private bool _queryPerformed; // true if Begin+End were called at least once. private bool _isComplete; // true if the result is available in _pixelCount. private int _pixelCount; // The query result. private D3D11.Query _query; public override int PixelCount { get { return _pixelCount; } } public override bool IsComplete { get { if (_isComplete) return true; if (!_queryPerformed || _inBeginEndPair) return false; return PlatformGetResult(); return _isComplete; } } internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { //if (graphicsDevice.D3DDevice.FeatureLevel == D3D.FeatureLevel.Level_9_1) // throw new NotSupportedException("The Reach profile does not support occlusion queries."); D3D11.QueryDescription queryDesc = new D3D11.QueryDescription(); queryDesc.Flags = D3D11.QueryFlags.None; queryDesc.Type = D3D11.QueryType.Occlusion; _query = new D3D11.Query(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, queryDesc); } public override void PlatformBegin() { if (_inBeginEndPair) throw new InvalidOperationException("End() must be called before calling Begin() again."); _inBeginEndPair = true; _isComplete = false; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.Begin(_query); } } public override void PlatformEnd() { if (!_inBeginEndPair) throw new InvalidOperationException("Begin() must be called before calling End()."); _inBeginEndPair = false; _queryPerformed = true; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.End(_query); } } private bool PlatformGetResult() { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; ulong count; _isComplete = d3dContext.GetData(_query, out count); _pixelCount = (int)count; } return _isComplete; } protected override void Dispose(bool disposing) { if (disposing) { _query.Dispose(); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteRenderTarget2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy, IRenderTargetStrategyDX11 { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, TextureSurfaceType surfaceType) : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; if (surfaceType == TextureSurfaceType.RenderTargetSwapChain) { // Texture will be created by the RenderTargetSwapChain. return; } int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared); PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { lock (graphicsContextStrategy.SyncHandle) { D3D11.DeviceContext d3dContext = graphicsContextStrategy.ToConcrete().D3dContext; System.Diagnostics.Debug.Assert(_msTexture != null); d3dContext.ResolveSubresource( _msTexture, 0, this.GetTexture(), 0, this.Format.ToDXFormat()); } } } #endregion IRenderTargetStrategy internal D3D11.RenderTargetView[] _renderTargetViews; internal D3D11.DepthStencilView[] _depthStencilViews; D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice) { return _renderTargetViews[arraySlice]; } D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice) { return _depthStencilViews[0]; } private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Width; texture2DDesc.Height = this.Height; texture2DDesc.MipLevels = this.LevelCount; texture2DDesc.ArraySize = this.ArraySize; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; if (_shared) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared; if (MultiSampleCount == 0 || _shared) texture2DDesc.BindFlags |= D3D11.BindFlags.RenderTarget; if (_mipMap) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps; System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } internal D3D11.Texture2D _msTexture; private DXGI.SampleDescription _msSampleDescription; private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount, bool shared) { D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice; _msSampleDescription = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetSupportedSampleDescription(this.Format.ToDXFormat(), multiSampleCount); _renderTargetViews = new D3D11.RenderTargetView[this.ArraySize]; _depthStencilViews = new D3D11.DepthStencilView[1]; if (multiSampleCount > 1) _msTexture = CreateMSTexture(); CreateRenderTargetView(d3dDevice, width, height); if (DepthStencilFormat != DepthFormat.None) CreateDepthStencilView(d3dDevice, width, height); } private void CreateRenderTargetView(D3D11.Device d3dDevice, int width, int height) { D3D11.Resource viewTex = (MultiSampleCount > 1) ? _msTexture : _texture; System.Diagnostics.Debug.Assert(viewTex != null); // Create a view interface on the rendertarget to use on bind. if (this.ArraySize > 1) { for (int i = 0; i < this.ArraySize; i++) { D3D11.RenderTargetViewDescription renderTargetViewDescription = new D3D11.RenderTargetViewDescription(); if (MultiSampleCount > 1) { renderTargetViewDescription.Dimension = D3D11.RenderTargetViewDimension.Texture2DMultisampledArray; renderTargetViewDescription.Texture2DMSArray.ArraySize = 1; renderTargetViewDescription.Texture2DMSArray.FirstArraySlice = i; } else { renderTargetViewDescription.Dimension = D3D11.RenderTargetViewDimension.Texture2DArray; renderTargetViewDescription.Texture2DArray.ArraySize = 1; renderTargetViewDescription.Texture2DArray.FirstArraySlice = i; renderTargetViewDescription.Texture2DArray.MipSlice = 0; } _renderTargetViews[i] = new D3D11.RenderTargetView(d3dDevice, viewTex, renderTargetViewDescription); } } else { _renderTargetViews[0] = new D3D11.RenderTargetView(d3dDevice, viewTex); } } private void CreateDepthStencilView(D3D11.Device d3dDevice, int width, int height) { // The depth stencil view's multisampling configuration must strictly // match the texture's multisampling configuration. Ignore whatever parameters // were provided and use the texture's configuration so that things are // guarenteed to work. DXGI.SampleDescription multisampleDesc = _msSampleDescription; // Create a descriptor for the depth/stencil buffer. // Allocate a 2-D surface as the depth/stencil buffer. // Create a DepthStencil view on this surface to use on bind. D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Format = DepthStencilFormat.ToDXFormat(); texture2DDesc.ArraySize = 1; texture2DDesc.MipLevels = 1; texture2DDesc.Width = width; texture2DDesc.Height = height; texture2DDesc.SampleDescription = multisampleDesc; texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil; using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, texture2DDesc)) { // Create the view for binding to the device. D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription(); depthStencilViewDesc.Format = DepthStencilFormat.ToDXFormat(); depthStencilViewDesc.Dimension = (MultiSampleCount > 1) ? D3D11.DepthStencilViewDimension.Texture2DMultisampled : D3D11.DepthStencilViewDimension.Texture2D; _depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer, depthStencilViewDesc); } } private D3D11.Texture2D CreateMSTexture() { System.Diagnostics.Debug.Assert(_msTexture == null); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Width; texture2DDesc.Height = this.Height; texture2DDesc.MipLevels = 1; // mip mapping is applied to the resolved texture, not the multisampled texture; texture2DDesc.ArraySize = this.ArraySize; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.RenderTarget; // ~BindFlags.ShaderResource, the multi sampled texture can never be bound directly. texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = _msSampleDescription; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; return new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); } protected override void PlatformGraphicsContextLost() { if (_renderTargetViews != null) { for (int i = 0; i < _renderTargetViews.Length; i++) _renderTargetViews[i].Dispose(); _renderTargetViews = null; } if (_depthStencilViews != null) { for (int i = 0; i < _depthStencilViews.Length; i++) DX.Utilities.Dispose(ref _depthStencilViews[i]); _depthStencilViews = null; } base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { if (_renderTargetViews != null) { for (int i = 0; i < _renderTargetViews.Length; i++) _renderTargetViews[i].Dispose(); _renderTargetViews = null; } if (_depthStencilViews != null) { for (int i = 0; i < _depthStencilViews.Length; i++) DX.Utilities.Dispose(ref _depthStencilViews[i]); _depthStencilViews = null; } DX.Utilities.Dispose(ref _msTexture); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteRenderTarget3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy, IRenderTargetStrategyDX11 { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat); // If we don't need a depth buffer then we're done. if (preferredDepthFormat != DepthFormat.None) PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy internal D3D11.RenderTargetView[] _renderTargetViews; internal D3D11.DepthStencilView[] _depthStencilViews; internal int _currentSlice; D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice) { return _renderTargetViews[arraySlice]; } D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice) { return _depthStencilViews[0]; } private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription(); texture3DDesc.Width = this.Width; texture3DDesc.Height = this.Height; texture3DDesc.Depth = this.Depth; texture3DDesc.MipLevels = this.LevelCount; texture3DDesc.Format = this.Format.ToDXFormat(); texture3DDesc.BindFlags = D3D11.BindFlags.RenderTarget | D3D11.BindFlags.ShaderResource; texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture3DDesc.Usage = D3D11.ResourceUsage.Default; texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; if (_mipMap) { // Note: XNA 4 does not have a method Texture.GenerateMipMaps() // because generation of mipmaps is not supported on the Xbox 360. // TODO: New method Texture.GenerateMipMaps() required. texture3DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps; } System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture3D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture3DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { _renderTargetViews = new D3D11.RenderTargetView[depth]; _depthStencilViews = new D3D11.DepthStencilView[1]; // Setup the multisampling description. DXGI.SampleDescription multisampleDesc = new DXGI.SampleDescription(1, 0); if (multiSampleCount > 1) { multisampleDesc.Count = multiSampleCount; multisampleDesc.Quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern; } D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice; CreateRenderTargetView(d3dDevice, width, height, depth); CreateDepthStencilView(d3dDevice, width, height, depth, preferredDepthFormat, multisampleDesc); } private void CreateRenderTargetView(D3D11.Device d3dDevice, int width, int height, int depth) { D3D11.Resource viewTex = this.GetTexture(); for (int i = 0; i < depth; i++) { D3D11.RenderTargetViewDescription renderTargetViewDesc = new D3D11.RenderTargetViewDescription(); renderTargetViewDesc.Format = this.Format.ToDXFormat(); renderTargetViewDesc.Dimension = D3D11.RenderTargetViewDimension.Texture3D; renderTargetViewDesc.Texture3D.DepthSliceCount = -1; renderTargetViewDesc.Texture3D.FirstDepthSlice = i; renderTargetViewDesc.Texture3D.MipSlice = 0; _renderTargetViews[i] = new D3D11.RenderTargetView(d3dDevice, viewTex, renderTargetViewDesc); } } private void CreateDepthStencilView(D3D11.Device d3dDevice, int width, int height, int depth, DepthFormat preferredDepthFormat, DXGI.SampleDescription multisampleDesc) { // Create a descriptor for the depth/stencil buffer. // Allocate a 2-D surface as the depth/stencil buffer. // Create a DepthStencil view on this surface to use on bind. D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Format = preferredDepthFormat.ToDXFormat(); texture2DDesc.ArraySize = 1; texture2DDesc.MipLevels = 1; texture2DDesc.Width = width; texture2DDesc.Height = height; texture2DDesc.SampleDescription = multisampleDesc; texture2DDesc.BindFlags = D3D11.BindFlags.DepthStencil; using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, texture2DDesc)) { D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription(); depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat(); depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2D; // Create the view for binding to the device. _depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer, depthStencilViewDesc); } } protected override void Dispose(bool disposing) { if (disposing) { if (_renderTargetViews != null) { for (int i = 0; i < _renderTargetViews.Length; i++) DX.Utilities.Dispose(ref _renderTargetViews[i]); _renderTargetViews = null; } if (_depthStencilViews != null) { for (int i = 0; i < _depthStencilViews.Length; i++) DX.Utilities.Dispose(ref _depthStencilViews[i]); _depthStencilViews = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteRenderTargetCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D = SharpDX.Direct3D; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy, IRenderTargetStrategyDX11 { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, size, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat); PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy internal D3D11.RenderTargetView[] _renderTargetViews; internal D3D11.DepthStencilView[] _depthStencilViews; internal D3D11.Resource _depthTarget; D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice) { return _renderTargetViews[arraySlice]; } D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice) { return _depthStencilViews[arraySlice]; } private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Size; texture2DDesc.Height = this.Size; texture2DDesc.MipLevels = this.LevelCount; texture2DDesc.ArraySize = 6; // A texture cube is a 2D texture array with 6 textures. texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.RenderTarget | D3D11.BindFlags.ShaderResource; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube; if (_mipMap) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps; System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { _renderTargetViews = new D3D11.RenderTargetView[6]; _depthStencilViews = new D3D11.DepthStencilView[6]; // Create one render target view per cube map face. for (int i = 0; i < _renderTargetViews.Length; i++) { D3D11.RenderTargetViewDescription renderTargetViewDesc = new D3D11.RenderTargetViewDescription(); renderTargetViewDesc.Dimension = D3D11.RenderTargetViewDimension.Texture2DArray; renderTargetViewDesc.Format = this.Format.ToDXFormat(); renderTargetViewDesc.Texture2DArray.ArraySize = 1; renderTargetViewDesc.Texture2DArray.FirstArraySlice = i; renderTargetViewDesc.Texture2DArray.MipSlice = 0; _renderTargetViews[i] = new D3D11.RenderTargetView( ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, this.GetTexture(), renderTargetViewDesc); } // If we don't need a depth buffer then we're done. if (preferredDepthFormat == DepthFormat.None) return; DXGI.SampleDescription sampleDescription = new DXGI.SampleDescription(1, 0); if (multiSampleCount > 1) { sampleDescription.Count = multiSampleCount; sampleDescription.Quality = (int)D3D11.StandardMultisampleQualityLevels.StandardMultisamplePattern; } D3D11.Texture2DDescription depthStencilDesc = new D3D11.Texture2DDescription(); depthStencilDesc.Format = preferredDepthFormat.ToDXFormat(); depthStencilDesc.ArraySize = 1; depthStencilDesc.MipLevels = 1; depthStencilDesc.Width = this.Size; depthStencilDesc.Height = this.Size; depthStencilDesc.SampleDescription = sampleDescription; depthStencilDesc.BindFlags = D3D11.BindFlags.DepthStencil; if (((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice.FeatureLevel >= D3D.FeatureLevel.Level_10_0) { // for feature Level_10_0 the depth buffer is required to be defined as TextureCube with six slices, // and the depth view is required to be Texture2DArray. depthStencilDesc.ArraySize = 6; depthStencilDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube; _depthTarget = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, depthStencilDesc); for (int i = 0; i < _renderTargetViews.Length; i++) { D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription(); depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat(); depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2DArray; depthStencilViewDesc.Texture2DArray.ArraySize = 1; depthStencilViewDesc.Texture2DArray.FirstArraySlice = i; _depthStencilViews[i] = new D3D11.DepthStencilView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, _depthTarget, depthStencilViewDesc); } } else { // Create one depth target view per cube map face. // feature Level_9_x doesn't support Texture2DArray. for (int i = 0; i < _renderTargetViews.Length; i++) { _depthTarget = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, depthStencilDesc); D3D11.DepthStencilViewDescription depthStencilViewDesc = new D3D11.DepthStencilViewDescription(); depthStencilViewDesc.Format = preferredDepthFormat.ToDXFormat(); depthStencilViewDesc.Dimension = D3D11.DepthStencilViewDimension.Texture2D; _depthStencilViews[i] = new D3D11.DepthStencilView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, _depthTarget, depthStencilViewDesc); } } return; } protected override void Dispose(bool disposing) { if (disposing) { if (_renderTargetViews != null) { for (int i = 0; i < _renderTargetViews.Length; i++) _renderTargetViews[i].Dispose(); _renderTargetViews = null; } if (_depthStencilViews != null) { for (int i = 0; i < _depthStencilViews.Length; i++) if (_depthStencilViews[i] != null) _depthStencilViews[i].Dispose(); _depthStencilViews = null; } DX.Utilities.Dispose(ref _depthTarget); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteRenderTargetSwapChain.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetSwapChain : ConcreteRenderTarget2D, IRenderTargetStrategyDX11 { internal IntPtr _windowHandle; internal PresentInterval _presentInterval; internal DXGI.SwapChain _swapChain; internal D3D11.Texture2D _backBuffer; //internal D3D11.Texture2D _depthBuffer; internal ConcreteRenderTargetSwapChain(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, RenderTargetUsage usage, IntPtr windowHandle, PresentInterval presentInterval, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) :base(contextStrategy, width, height, mipMap, 1, false, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount, TextureSurfaceType.RenderTargetSwapChain) { _windowHandle = windowHandle; _presentInterval = presentInterval; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); _multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); ((ConcreteRenderTarget2D)this)._renderTargetViews = new D3D11.RenderTargetView[1]; ((ConcreteRenderTarget2D)this)._depthStencilViews = new D3D11.DepthStencilView[1]; DXGI.Format dxgiFormat = (preferredSurfaceFormat == SurfaceFormat.Color) ? DXGI.Format.B8G8R8A8_UNorm : preferredSurfaceFormat.ToDXFormat(); DXGI.SampleDescription multisampleDesc = base.GraphicsDeviceStrategy.ToConcrete().GetSupportedSampleDescription(dxgiFormat, MultiSampleCount); D3D11.Device d3dDevice = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice; CreateSwapChainTexture(d3dDevice, width, height, multisampleDesc, dxgiFormat); if (preferredDepthFormat != DepthFormat.None) { DXGI.Format dxgiDepthFormat = preferredDepthFormat.ToDXFormat(); CreateSwapChainDepthBuffer(d3dDevice, width, height, multisampleDesc, dxgiDepthFormat); } } D3D11.RenderTargetView IRenderTargetStrategyDX11.GetRenderTargetView(int arraySlice) { return _renderTargetViews[arraySlice]; } D3D11.DepthStencilView IRenderTargetStrategyDX11.GetDepthStencilView(int arraySlice) { return _depthStencilViews[0]; } private void CreateSwapChainTexture(D3D11.Device d3dDevice, int width, int height, DXGI.SampleDescription multisampleDesc, DXGI.Format dxgiFormat) { DXGI.SwapChainDescription swapChainDesc = new DXGI.SwapChainDescription(); swapChainDesc.ModeDescription.Width = width; swapChainDesc.ModeDescription.Height = height; swapChainDesc.ModeDescription.Format = dxgiFormat; swapChainDesc.ModeDescription.Scaling = DXGI.DisplayModeScaling.Stretched; swapChainDesc.OutputHandle = _windowHandle; swapChainDesc.SampleDescription = multisampleDesc; swapChainDesc.Usage = DXGI.Usage.RenderTargetOutput; swapChainDesc.BufferCount = 2; swapChainDesc.SwapEffect = _presentInterval.ToDXSwapEffect(); swapChainDesc.IsWindowed = true; // First, retrieve the underlying DXGI Device from the D3D Device. // Creates the swap chain using (DXGI.Device1 dxgiDevice = d3dDevice.QueryInterface()) using (DXGI.Adapter dxgiAdapter = dxgiDevice.Adapter) using (DXGI.Factory1 dxgiFactory = dxgiAdapter.GetParent()) { _swapChain = new DXGI.SwapChain(dxgiFactory, dxgiDevice, swapChainDesc); // Obtain the backbuffer for this window which will be the final 3D rendertarget. _backBuffer = D3D11.Resource.FromSwapChain(_swapChain, 0); // Create a view interface on the rendertarget to use on bind. ((ConcreteRenderTarget2D)this)._renderTargetViews[0] = new D3D11.RenderTargetView(d3dDevice, _backBuffer); } } private void CreateSwapChainDepthBuffer(D3D11.Device d3dDevice, int width, int height, DXGI.SampleDescription multisampleDesc, DXGI.Format dxgiDepthFormat) { // Allocate a 2-D surface as the depth/stencil buffer. D3D11.Texture2DDescription textureDescription = new D3D11.Texture2DDescription() { Format = dxgiDepthFormat, ArraySize = 1, MipLevels = 1, Width = width, Height = height, SampleDescription = multisampleDesc, Usage = D3D11.ResourceUsage.Default, BindFlags = D3D11.BindFlags.DepthStencil, }; using (D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice, textureDescription)) { // Create a DepthStencil view on this surface to use on bind. ((ConcreteRenderTarget2D)this)._depthStencilViews[0] = new D3D11.DepthStencilView(d3dDevice, depthBuffer); } } private D3D11.Resource CreateTexture(GraphicsContextStrategy contextStrategy) { if (MultiSampleCount > 1) { DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Width; texture2DDesc.Height = this.Height; texture2DDesc.MipLevels = this.LevelCount; texture2DDesc.ArraySize = this.ArraySize; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; if (_shared) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared; if (MultiSampleCount == 0 || _shared) texture2DDesc.BindFlags |= D3D11.BindFlags.RenderTarget; if (_mipMap) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.GenerateMipMaps; return new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); } else { System.Diagnostics.Debug.Assert(_backBuffer != null); return _backBuffer; } } public void Present() { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; try { _swapChain.Present(_presentInterval.ToDXSwapInterval(), DXGI.PresentFlags.None); } catch (DX.SharpDXException) { } } } public override void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { // Using a multisampled SwapChainRenderTarget as a source Texture is not supported. //base.ResolveSubresource(contextStrategy); } protected override void Dispose(bool disposing) { if (disposing) { //DX.Utilities.Dispose(ref _backBuffer); //DX.Utilities.Dispose(ref _depthBuffer); DX.Utilities.Dispose(ref _swapChain); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteSamplerStateCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy { private uint _d3dDirty; internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } } internal uint InternalD3dDirty { get { return _d3dDirty; } set { _d3dDirty = value; } } internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { } public override SamplerState this[int index] { get { return base[index]; } set { base[index] = value; uint mask = ((uint)1) << index; _d3dDirty |= mask; } } public override void Clear() { base.Clear(); for (int i = 0; i < _actualSamplers.Length; i++) _d3dDirty |= (((uint)1) << i); } public override void Dirty() { base.Dirty(); for (int i = 0; i < _actualSamplers.Length; i++) _d3dDirty |= (((uint)1) << i); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTexture.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy { private readonly GraphicsContextStrategy _contextStrategy; private readonly SurfaceFormat _format; private readonly int _levelCount; internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount) : base(contextStrategy) { this._contextStrategy = contextStrategy; this._format = format; this._levelCount = levelCount; } #region ITextureStrategy public SurfaceFormat Format { get { return _format; } } public int LevelCount { get { return _levelCount; } } #endregion ITextureStrategy internal D3D11.Resource _texture; internal D3D11.ShaderResourceView _resourceView; internal D3D11.Resource GetTexture() { System.Diagnostics.Debug.Assert(_texture != null); return _texture; } internal D3D11.ShaderResourceView GetShaderResourceView() { System.Diagnostics.Debug.Assert(_resourceView != null); return _resourceView; } protected override void PlatformGraphicsContextLost() { DX.Utilities.Dispose(ref _resourceView); DX.Utilities.Dispose(ref _texture); base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _resourceView); DX.Utilities.Dispose(ref _texture); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTexture2D.Stream.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.Utilities.Png; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; using WIC = SharpDX.WIC; #if UAP || WINUI using Windows.Graphics.Imaging; using Windows.Storage.Streams; using System.Threading.Tasks; #endif namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D { internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream) : base(contextStrategy, SurfaceFormat.Color, 1) { this._arraySize = 1; // Rewind stream if it is at end if (stream.CanSeek && stream.Length == stream.Position) stream.Seek(0, SeekOrigin.Begin); if (stream.CanSeek) { PlatformFromStream_DX(contextStrategy, stream, out this._width, out this._height); } else { // If stream doesn't provide seek functionality, use MemoryStream instead using (Stream ms = new MemoryStream()) { stream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height); } } } private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { // The data returned is always four channel BGRA StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha); width = result.Width; height = result.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, result.Data, 0, result.Data.Length); } private static WIC.BitmapSource LoadBitmap_DX(Stream stream, out WIC.BitmapDecoder decoder) { using (WIC.ImagingFactory imgfactory = new WIC.ImagingFactory()) { decoder = new WIC.BitmapDecoder(imgfactory, stream, WIC.DecodeOptions.CacheOnDemand); WIC.FormatConverter fconv = new WIC.FormatConverter(imgfactory); using (WIC.BitmapFrameDecode frame = decoder.GetFrame(0)) { fconv.Initialize( frame, WIC.PixelFormat.Format32bppRGBA, WIC.BitmapDitherType.None, null, 0.0, WIC.BitmapPaletteType.Custom); } return fconv; } } private unsafe void PlatformFromStream_DX(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { // For reference this implementation was ultimately found through this post: // http://stackoverflow.com/questions/9602102/loading-textures-with-sharpdx-in-metro WIC.BitmapDecoder decoder; using (WIC.BitmapSource bmpSource = LoadBitmap_DX(stream, out decoder)) using (decoder) { width = bmpSource.Size.Width; height = bmpSource.Size.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); // TODO: use texture.SetData(...) D3D11.Texture2DDescription texture2DDesc; texture2DDesc.Width = width; texture2DDesc.Height = height; texture2DDesc.ArraySize = 1; texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.Format = DXGI.Format.R8G8B8A8_UNorm; texture2DDesc.MipLevels = 1; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; texture2DDesc.SampleDescription.Count = 1; texture2DDesc.SampleDescription.Quality = 0; using (DX.DataStream dataStream = new DX.DataStream(bmpSource.Size.Height * bmpSource.Size.Width * 4, true, true)) { bmpSource.CopyPixels(bmpSource.Size.Width * 4, dataStream); DX.DataRectangle rect = new DX.DataRectangle(dataStream.DataPointer, bmpSource.Size.Width * 4); _texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc, rect); _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, _texture); } } } private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height) { if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048)) throw new NotSupportedException("Reach profile supports a maximum Texture2D size of 2048"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096)) throw new NotSupportedException("HiDef profile supports a maximum Texture2D size of 4096"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_0 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_1 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_0 profile supports a maximum Texture2D size of 16384"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_1 profile supports a maximum Texture2D size of 16384"); } public void SaveAsPng(Stream stream, int width, int height) { PngWriter pngWriter = new PngWriter(); pngWriter.Write(this, stream); } public void SaveAsJpeg(Stream stream, int width, int height) { #if UAP || WINUI Task result = SaveAsImageAsync_UAP(Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId, stream, width, height); result.Wait(); #else // We assume non-premultiplied pixel format. Guid sourceFormat = WIC.PixelFormat.Format32bppRGBA; int sourceStride = WIC.PixelFormat.GetStride(sourceFormat, this.Width); Color[] pixelData = TextureHelpers.GetColorData(this); GCHandle gCHandle = GCHandle.Alloc(pixelData, GCHandleType.Pinned); try { IntPtr pPixelData = gCHandle.AddrOfPinnedObject(); DX.DataRectangle dataRectangle = new DX.DataRectangle(pPixelData, sourceStride); using (WIC.ImagingFactory factory = new WIC.ImagingFactory()) using (WIC.Bitmap bitmap = new WIC.Bitmap(factory, this.Width, this.Height, sourceFormat, dataRectangle)) using (WIC.BitmapScaler scaler = new WIC.BitmapScaler(factory)) using (WIC.FormatConverter converter = new WIC.FormatConverter(factory)) using (WIC.JpegBitmapEncoder encoder = new WIC.JpegBitmapEncoder(factory, stream)) using (WIC.BitmapFrameEncode frame = new WIC.BitmapFrameEncode(encoder)) { scaler.Initialize(bitmap, width, height, WIC.BitmapInterpolationMode.Linear); // Convert bitmap to BGRA. JpegBitmapEncoder doesn't work with Format32bppRGBA. Guid targetFormat = WIC.PixelFormat.Format32bppBGRA; converter.Initialize(scaler, targetFormat); frame.Initialize(); frame.SetPixelFormat(ref targetFormat); frame.WriteSource(converter); frame.Commit(); encoder.Commit(); } } finally { gCHandle.Free(); } #endif } #if UAP || WINUI private async Task SaveAsImageAsync_UAP(Guid encoderId, Stream stream, int width, int height) { byte[] pixelData = new byte[Width * Height * Format.GetSize()]; GetData(0,0, Bounds, pixelData, 0, pixelData.Length); // TODO: We need to convert from Format to R8G8B8A8! // Create a temporary memory stream for writing the png. InMemoryRandomAccessStream memstream = new InMemoryRandomAccessStream(); // Write the png. BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, memstream); encoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Ignore, (uint)width, (uint)height, 96, 96, pixelData); await encoder.FlushAsync(); // Copy the memory stream into the real output stream. memstream.Seek(0); memstream.AsStreamForRead().CopyTo(stream); } #endif //Converts Pixel Data from BGRA to RGBA private static void ConvertToRGBA(int pixelHeight, int pixelWidth, byte[] pixels) { int offset = 0; for (int row = 0; row < (uint)pixelHeight; row++) { int rowxPixelWidth = row * pixelWidth * 4; for (int col = 0; col < (uint)pixelWidth; col++) { offset = rowxPixelWidth + (col * 4); byte B = pixels[offset]; byte R = pixels[offset + 2]; pixels[offset] = R; pixels[offset + 2] = B; } } } static unsafe D3D11.Texture2D CreateTex2DFromBitmap(WIC.BitmapSource bsource, GraphicsDevice device) { D3D11.Texture2DDescription texture2DDesc; texture2DDesc.Width = bsource.Size.Width; texture2DDesc.Height = bsource.Size.Height; texture2DDesc.ArraySize = 1; texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.Format = DXGI.Format.R8G8B8A8_UNorm; texture2DDesc.MipLevels = 1; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; texture2DDesc.SampleDescription.Count = 1; texture2DDesc.SampleDescription.Quality = 0; using (DX.DataStream s = new DX.DataStream(bsource.Size.Height * bsource.Size.Width * 4, true, true)) { bsource.CopyPixels(bsource.Size.Width * 4, s); // XNA blacks out any pixels with an alpha of zero. /* TNC: Disable XNA behavior. // TNC: We either preserve the original data or premultiply the entire image. byte* data = (byte*)s.DataPointer; for (int i = 0; i < s.Length; i+=4) { if (data[i + 3] == 0) { data[i + 0] = 0; data[i + 1] = 0; data[i + 2] = 0; } } */ DX.DataRectangle rect = new DX.DataRectangle(s.DataPointer, bsource.Size.Width * 4); return new D3D11.Texture2D(((IPlatformGraphicsDevice)device).Strategy.ToConcrete().D3DDevice, texture2DDesc, rect); } } static WIC.ImagingFactory imgfactory; private static WIC.BitmapSource LoadBitmap(Stream stream, out SharpDX.WIC.BitmapDecoder decoder) { if (imgfactory == null) { imgfactory = new WIC.ImagingFactory(); } decoder = new SharpDX.WIC.BitmapDecoder( imgfactory, stream, WIC.DecodeOptions.CacheOnDemand ); WIC.FormatConverter fconv = new WIC.FormatConverter(imgfactory); using (WIC.BitmapFrameDecode frame = decoder.GetFrame(0)) { fconv.Initialize( frame, WIC.PixelFormat.Format32bppRGBA, WIC.BitmapDitherType.None, null, 0.0, WIC.BitmapPaletteType.Custom); } return fconv; } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTexture2D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy { private readonly int _width; private readonly int _height; private readonly int _arraySize; internal readonly bool _mipMap; internal readonly bool _shared; internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; this._mipMap = mipMap; this._shared = shared; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; this._mipMap = mipMap; this._shared = shared; this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } #region ITexture2DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int ArraySize { get { return _arraySize; } } public Rectangle Bounds { get { return new Rectangle(0, 0, this._width, this._height); } } public IntPtr GetSharedHandle() { using (DXGI.Resource resource = GetTexture().QueryInterface()) { return resource.SharedHandle; } } public unsafe void SetData(int level, T[] data, int startIndex, int elementCount) where T : struct { int w, h; TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h); // For DXT compressed formats the width and height must be // a multiple of 4 for the complete mip level to be set. if (this.Format.IsCompressedFormat()) { w = (w + 3) & ~3; h = (h + 3) & ~3; } int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; D3D11.ResourceRegion region = new D3D11.ResourceRegion(); region.Top = 0; region.Front = 0; region.Back = 1; region.Bottom = h; region.Left = 0; region.Right = w; // TODO: We need to deal with threaded contexts here! int arraySlice = 0; int subresourceIndex = arraySlice * this.LevelCount + level; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(this.GetTexture(), subresourceIndex, region, dataPtr, this.Format.GetPitch(w), 0); } } } public unsafe void SetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; D3D11.ResourceRegion region = new D3D11.ResourceRegion(); region.Top = checkedRect.Top; region.Front = 0; region.Back = 1; region.Bottom = checkedRect.Bottom; region.Left = checkedRect.Left; region.Right = checkedRect.Right; // TODO: We need to deal with threaded contexts here! int subresourceIndex = arraySlice * this.LevelCount + level; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(this.GetTexture(), subresourceIndex, region, dataPtr, this.Format.GetPitch(checkedRect.Width), 0); } } } public unsafe void GetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { // Create a temp staging resource for copying the data. // int min = this.Format.IsCompressedFormat() ? 4 : 1; int levelWidth = Math.Max(this.Width >> level, min); int levelHeight = Math.Max(this.Height >> level, min); DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = levelWidth; texture2DDesc.Height = levelHeight; texture2DDesc.MipLevels = 1; texture2DDesc.ArraySize = 1; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.None; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Staging; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; D3D11.Texture2D stagingTexture = new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; int subresourceIndex = arraySlice * this.LevelCount + level; // Copy the data from the GPU to the staging texture. int elementsInRow = checkedRect.Width; int rows = checkedRect.Height; D3D11.ResourceRegion region = new D3D11.ResourceRegion(checkedRect.Left, checkedRect.Top, 0, checkedRect.Right, checkedRect.Bottom, 1); d3dContext.CopySubresourceRegion(this.GetTexture(), subresourceIndex, region, stagingTexture, 0); // Copy the data to the array. DX.DataStream stream = null; DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream); try { int elementSize = this.Format.GetSize(); if (this.Format.IsCompressedFormat()) { // for 4x4 block compression formats an element is one block, so elementsInRow // and number of rows are 1/4 of number of pixels in width and height of the rectangle elementsInRow /= 4; rows /= 4; } int rowSize = elementSize * elementsInRow; if (rowSize == dataBox.RowPitch) stream.ReadRange(data, startIndex, elementCount); else if (level == 0 && arraySlice == 0 && checkedRect.X == 0 && checkedRect.Y == 0 && checkedRect.Width == this.Width && checkedRect.Height == this.Height && startIndex == 0 && elementCount == data.Length) { // TNC: optimized PlatformGetData() that reads multiple elements in a row when texture has rowPitch int elementSize2 = sizeof(T); if (elementSize2 == 1) // byte[] elementsInRow = elementsInRow * elementSize; int currentIndex = 0; for (int row = 0; row < rows; row++) { stream.ReadRange(data, currentIndex, elementsInRow); stream.Seek((dataBox.RowPitch - rowSize), SeekOrigin.Current); currentIndex += elementsInRow; } } else { // Some drivers may add pitch to rows. // We need to copy each row separatly and skip trailing zeros. stream.Seek(0, SeekOrigin.Begin); int elementSizeInByte = sizeof(T); for (int row = 0; row < rows; row++) { int i; int maxElements = (row + 1) * rowSize / elementSizeInByte; for (i = row * rowSize / elementSizeInByte; i < maxElements; i++) data[i + startIndex] = stream.Read(); if (i >= elementCount) break; stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current); } } } finally { DX.Utilities.Dispose( ref stream); d3dContext.UnmapSubresource(stagingTexture, 0); DX.Utilities.Dispose(ref stagingTexture); } } } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { int blockWidth, blockHeight; Format.GetBlockSize(out blockWidth, out blockHeight); int blockWidthMinusOne = blockWidth - 1; int blockHeightMinusOne = blockHeight - 1; // round x and y down to next multiple of block size; width and height up to next multiple of block size int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne; int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne; checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne, roundedWidth, roundedHeight); if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp) { return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8; } else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp) { return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8; } else { return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight); } } #endregion ITexture2DStrategy internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Width; texture2DDesc.Height = this.Height; texture2DDesc.MipLevels = this.LevelCount; texture2DDesc.ArraySize = this.ArraySize; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; if (this._shared) texture2DDesc.OptionFlags |= D3D11.ResourceOptionFlags.Shared; System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTexture3D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy { private readonly int _width; private readonly int _height; private readonly int _depth; internal readonly bool _mipMap; internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; this._mipMap = mipMap; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; this._mipMap = mipMap; this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } #region ITexture3DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int Depth { get { return _depth; } } public unsafe void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { int width = right - left; int height = bottom - top; int depth = back - front; int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; int rowPitch = this.Format.GetPitch(width); int slicePitch = rowPitch * height; // For 3D texture: Size of 2D image. DX.DataBox dataBox = new DX.DataBox(dataPtr, rowPitch, slicePitch); int subresourceIndex = level; D3D11.ResourceRegion region = new D3D11.ResourceRegion(left, top, front, right, bottom, back); lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(dataBox, this.GetTexture(), subresourceIndex, region); } } } public void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { // Create a temp staging resource for copying the data. // D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription(); texture3DDesc.Width = this.Width; texture3DDesc.Height = this.Height; texture3DDesc.Depth = this.Depth; texture3DDesc.MipLevels = 1; texture3DDesc.Format = this.Format.ToDXFormat(); texture3DDesc.BindFlags = D3D11.BindFlags.None; texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read; texture3DDesc.Usage = D3D11.ResourceUsage.Staging; texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; using (D3D11.Texture3D stagingTexture = new D3D11.Texture3D(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, texture3DDesc)) { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; // Copy the data from the GPU to the staging texture. d3dContext.CopySubresourceRegion(this.GetTexture(), level, new D3D11.ResourceRegion(left, top, front, right, bottom, back), stagingTexture, 0); // Copy the data to the array. DX.DataStream stream = null; DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream); try { // Some drivers may add pitch to rows or slices. // We need to copy each row separatly and skip trailing zeros. int currentIndex = startIndex; int elementSize = this.Format.GetSize(); int elementsInRow = right - left; int rowsInSlice = bottom - top; for (int slice = front; slice < back; slice++) { for (int row = top; row < bottom; row++) { stream.ReadRange(data, currentIndex, elementsInRow); stream.Seek(dataBox.RowPitch - (elementSize * elementsInRow), SeekOrigin.Current); currentIndex += elementsInRow; } stream.Seek(dataBox.SlicePitch - (dataBox.RowPitch * rowsInSlice), SeekOrigin.Current); } } finally { DX.Utilities.Dispose(ref stream); d3dContext.UnmapSubresource(stagingTexture, 0); } } } } #endregion ITexture3DStrategy internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { D3D11.Texture3DDescription texture3DDesc = new D3D11.Texture3DDescription(); texture3DDesc.Width = this.Width; texture3DDesc.Height = this.Height; texture3DDesc.Depth = this.Depth; texture3DDesc.MipLevels = this.LevelCount; texture3DDesc.Format = this.Format.ToDXFormat(); texture3DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture3DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture3DDesc.Usage = D3D11.ResourceUsage.Default; texture3DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture3D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture3DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTextureCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteTextureCollection : TextureCollectionStrategy { internal uint InternalDirty { get { return base._dirty; } set { base._dirty = value; } } internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { } public override void Clear() { base.Clear(); } internal void ClearTargets(RenderTargetBinding[] targets, D3D11.CommonShaderStage shaderStage) { // NOTE: We make the assumption here that the caller has // locked the d3dContext for us to use. // Make one pass across all the texture slots. for (int i = 0; i < _textures.Length; i++) { if (_textures[i] == null) continue; for (int k = 0; k < targets.Length; k++) { if (_textures[i] == targets[k].RenderTarget) { uint mask = ((uint)1) << i; // clear texture bit _dirty &= ~mask; _textures[i] = null; shaderStage.SetShaderResource(i, null); break; } } } } } } ================================================ FILE: Platforms/Graphics/.DX11/ConcreteTextureCube.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy { private readonly int _size; internal readonly bool _mipMap; internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; this._mipMap = mipMap; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; this._mipMap = mipMap; this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } #region ITextureCubeStrategy public int Size { get { return _size; } } public unsafe void SetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; DX.DataBox dataBox = new DX.DataBox(dataPtr, this.Format.GetPitch(checkedRect.Width), 0); int subresourceIndex = (int)face * this.LevelCount + level; D3D11.ResourceRegion region = new D3D11.ResourceRegion { Top = checkedRect.Top, Front = 0, Back = 1, Bottom = checkedRect.Bottom, Left = checkedRect.Left, Right = checkedRect.Right }; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(dataBox, this.GetTexture(), subresourceIndex, region); } } } public unsafe void GetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { // Create a temp staging resource for copying the data. // int min = this.Format.IsCompressedFormat() ? 4 : 1; int levelSize = Math.Max(this.Size >> level, min); DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = levelSize; texture2DDesc.Height = levelSize; texture2DDesc.MipLevels = 1; texture2DDesc.ArraySize = 1; texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.BindFlags = D3D11.BindFlags.None; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read; texture2DDesc.Usage = D3D11.ResourceUsage.Staging; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.None; using (D3D11.Texture2D stagingTexture = new D3D11.Texture2D(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, texture2DDesc)) { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; // Copy the data from the GPU to the staging texture. int subresourceIndex = (int)face * this.LevelCount + level; int elementsInRow = checkedRect.Width; int rows = checkedRect.Height; D3D11.ResourceRegion region = new D3D11.ResourceRegion(checkedRect.Left, checkedRect.Top, 0, checkedRect.Right, checkedRect.Bottom, 1); d3dContext.CopySubresourceRegion(this.GetTexture(), subresourceIndex, region, stagingTexture, 0); // Copy the data to the array. DX.DataStream stream = null; DX.DataBox dataBox = d3dContext.MapSubresource(stagingTexture, 0, D3D11.MapMode.Read, D3D11.MapFlags.None, out stream); try { int elementSize = this.Format.GetSize(); if (this.Format.IsCompressedFormat()) { // for 4x4 block compression formats an element is one block, so elementsInRow // and number of rows are 1/4 of number of pixels in width and height of the rectangle elementsInRow /= 4; rows /= 4; } int rowSize = elementSize * elementsInRow; if (rowSize == dataBox.RowPitch) stream.ReadRange(data, startIndex, elementCount); else { // Some drivers may add pitch to rows. // We need to copy each row separatly and skip trailing zeros. stream.Seek(0, SeekOrigin.Begin); int elementSizeInByte = sizeof(T); for (int row = 0; row < rows; row++) { int i; for (i = row * rowSize / elementSizeInByte; i < (row + 1) * rowSize / elementSizeInByte; i++) data[i + startIndex] = stream.Read(); if (i >= elementCount) break; stream.Seek(dataBox.RowPitch - rowSize, SeekOrigin.Current); } } } finally { DX.Utilities.Dispose(ref stream); d3dContext.UnmapSubresource(stagingTexture, 0); } } } } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { // round x and y down to next multiple of four; width and height up to next multiple of four int roundedWidth = (rect.Width + 3) & ~0x3; int roundedHeight = (rect.Height + 3) & ~0x3; checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3, roundedWidth, roundedHeight); return (roundedWidth * roundedHeight * fSize / 16); } #endregion ITextureCubeStrategy internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { DXGI.SampleDescription sampleDesc = new DXGI.SampleDescription(1, 0); D3D11.Texture2DDescription texture2DDesc = new D3D11.Texture2DDescription(); texture2DDesc.Width = this.Size; texture2DDesc.Height = this.Size; texture2DDesc.MipLevels = this.LevelCount; texture2DDesc.ArraySize = 6; // A texture cube is a 2D texture array with 6 textures. texture2DDesc.Format = this.Format.ToDXFormat(); texture2DDesc.BindFlags = D3D11.BindFlags.ShaderResource; texture2DDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; texture2DDesc.SampleDescription = sampleDesc; texture2DDesc.Usage = D3D11.ResourceUsage.Default; texture2DDesc.OptionFlags = D3D11.ResourceOptionFlags.TextureCube; System.Diagnostics.Debug.Assert(_texture == null); D3D11.Resource texture = new D3D11.Texture2D(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture2DDesc); _texture = texture; _resourceView = new D3D11.ShaderResourceView(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().D3DDevice, texture); } } } ================================================ FILE: Platforms/Graphics/.DX11/GraphicsSharpDXExtensions.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Framework.Graphics { static public class GraphicsSharpDXExtensions { /// /// Returns a handle to internal device object. Valid only on DirectX platforms. /// For usage, convert this to SharpDX.Direct3D11.Device. /// public static object GetD3D11Device(this GraphicsDevice device) { D3D11.Device d3dDevice = ((IPlatformGraphicsDevice)device).Strategy.ToConcrete()._d3dDevice; return d3dDevice; } /// /// Returns a handle to internal device object. Valid only on DirectX platforms. /// For usage, convert this to SharpDX.Direct3D11.Resource. /// public static object GetD3D11Resource(this Texture texture) { D3D11.Resource d3dResource = ((IPlatformTexture)texture).GetTextureStrategy().GetTexture(); return d3dResource; } } } ================================================ FILE: Platforms/Graphics/.DX11/IRenderTargetStrategyDX11.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal interface IRenderTargetStrategyDX11 { /// /// Gets the for the specified array slice. /// /// The array slice. /// The . /// /// For texture cubes: The array slice is the index of the cube map face. /// D3D11.RenderTargetView GetRenderTargetView(int arraySlice); /// /// Gets the . /// /// The array slice. /// The . Can be . D3D11.DepthStencilView GetDepthStencilView(int arraySlice); } } ================================================ FILE: Platforms/Graphics/.DX11/Shader/ConcreteConstantBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy { private D3D11.Buffer _cbuffer; internal D3D11.Buffer DXcbuffer { get { return _cbuffer; } } public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats) : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats) { _cbuffer = CreateD3D11Buffer(); } private ConcreteConstantBuffer(ConcreteConstantBuffer source) : base(source) { _cbuffer = CreateD3D11Buffer(); } public override object Clone() { return new ConcreteConstantBuffer(this); } private D3D11.Buffer CreateD3D11Buffer() { // Allocate the hardware constant buffer. D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription(); bufferDesc.Usage = D3D11.ResourceUsage.Default; bufferDesc.BindFlags = D3D11.BindFlags.ConstantBuffer; bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; bufferDesc.SizeInBytes = this.BufferData.Length; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; return new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, bufferDesc); } } public override void PlatformContextLost() { DX.Utilities.Dispose(ref _cbuffer); Dirty = true; } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _cbuffer); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Shader/ConcreteConstantBufferCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy { private uint _valid; private uint _dirty; internal uint InternalValid { get { return this._valid; } } internal uint InternalDirty { get { return this._dirty; } set { this._dirty = value; } } internal ConcreteConstantBufferCollection(int capacity) : base(capacity) { // hard limit of 32 because of _valid flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _valid = 0; } public override ConstantBuffer this[int index] { get { return base[index]; } set { if (base[index] != value) { uint mask = ((uint)1) << index; base[index] = value; if (value != null) _valid |= mask; else _valid &= ~mask; _dirty |= mask; } } } public override void Clear() { for (int slot = 0; slot < base.Length; slot++) base[slot] = null; _valid = 0; } } } ================================================ FILE: Platforms/Graphics/.DX11/Shader/ConcretePixelShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcretePixelShader : ConcreteShader { private D3D11.PixelShader _pixelShader; internal D3D11.PixelShader DXPixelShader { get { return _pixelShader; } } internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { CreatePixelShader(); } protected override void PlatformGraphicsContextLost() { DX.Utilities.Dispose(ref _pixelShader); base.PlatformGraphicsContextLost(); } private void CreatePixelShader() { _pixelShader = new D3D11.PixelShader(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, ShaderBytecode); } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _pixelShader); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Shader/ConcreteShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteShader : ShaderStrategy { private byte[] _shaderBytecode; internal byte[] ShaderBytecode { get { return _shaderBytecode; } } internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile; ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile]; if (shaderVersion != default && shaderVersion > maxVersion) { throw new NotSupportedException( $"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'."); } // We need the bytecode later for allocating the // input layout from the vertex declaration. _shaderBytecode = shaderBytecode; } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Shader/ConcreteVertexShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteVertexShader : ConcreteShader { private D3D11.VertexShader _vertexShader; // Caches the DirectX input layouts for this vertex shader. private InputLayoutCache _inputLayouts; internal InputLayoutCache InputLayouts { get { return _inputLayouts; } } internal D3D11.VertexShader DXVertexShader { get { return _vertexShader; } } internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { CreateVertexShader(); } private void CreateVertexShader() { _vertexShader = new D3D11.VertexShader(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, ShaderBytecode, null); _inputLayouts = new InputLayoutCache(base.GraphicsDeviceStrategy, ShaderBytecode); } protected override void PlatformGraphicsContextLost() { DX.Utilities.Dispose(ref _inputLayouts); DX.Utilities.Dispose(ref _vertexShader); base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _inputLayouts); DX.Utilities.Dispose(ref _vertexShader); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/SharpDXExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using SharpDX.Mathematics.Interop; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { static class SharpDXExtensions { static public int ToDXSwapInterval(this PresentInterval interval) { switch (interval) { case PresentInterval.Immediate: return 0; case PresentInterval.Two: return 2; default: return 1; } } static public DXGI.SwapEffect ToDXSwapEffect(this PresentInterval presentInterval) { DXGI.SwapEffect effect; switch (presentInterval) { case PresentInterval.One: case PresentInterval.Two: #if UAP || WINUI effect = DXGI.SwapEffect.FlipSequential; #else effect = DXGI.SwapEffect.Discard; #endif break; case PresentInterval.Immediate: #if UAP || WINUI effect = DXGI.SwapEffect.FlipSequential; #else effect = DXGI.SwapEffect.Sequential; #endif break; default: #if UAP || WINUI effect = DXGI.SwapEffect.FlipSequential; #else effect = DXGI.SwapEffect.Discard; #endif break; } //if (present.RenderTargetUsage != RenderTargetUsage.PreserveContents && present.MultiSampleCount == 0) //effect = DXGI.SwapEffect.Discard; return effect; } static public string ToDXSemanticName(this VertexElementUsage vertexElementUsage) { switch (vertexElementUsage) { case VertexElementUsage.Position: return "POSITION"; case VertexElementUsage.Color: return "COLOR"; case VertexElementUsage.Normal: return "NORMAL"; case VertexElementUsage.TextureCoordinate: return "TEXCOORD"; case VertexElementUsage.BlendIndices: return "BLENDINDICES"; case VertexElementUsage.BlendWeight: return "BLENDWEIGHT"; case VertexElementUsage.Binormal: return "BINORMAL"; case VertexElementUsage.Tangent: return "TANGENT"; case VertexElementUsage.PointSize: return "PSIZE"; default: throw new NotSupportedException("Unknown vertex element usage!"); } } static public DXGI.Format ToDXFormat(this VertexElementFormat vertexElementFormat) { switch (vertexElementFormat) { case VertexElementFormat.Single: return DXGI.Format.R32_Float; case VertexElementFormat.Vector2: return DXGI.Format.R32G32_Float; case VertexElementFormat.Vector3: return DXGI.Format.R32G32B32_Float; case VertexElementFormat.Vector4: return DXGI.Format.R32G32B32A32_Float; case VertexElementFormat.Color: return DXGI.Format.R8G8B8A8_UNorm; case VertexElementFormat.Byte4: return DXGI.Format.R8G8B8A8_UInt; case VertexElementFormat.Short2: return DXGI.Format.R16G16_SInt; case VertexElementFormat.Short4: return DXGI.Format.R16G16B16A16_SInt; case VertexElementFormat.NormalizedShort2: return DXGI.Format.R16G16_SNorm; case VertexElementFormat.NormalizedShort4: return DXGI.Format.R16G16B16A16_SNorm; case VertexElementFormat.HalfVector2: return DXGI.Format.R16G16_Float; case VertexElementFormat.HalfVector4: return DXGI.Format.R16G16B16A16_Float; default: throw new NotSupportedException("Unknown vertex element format!"); } } static public DXGI.Format ToDXFormat(this DepthFormat format) { switch (format) { case DepthFormat.None: return DXGI.Format.Unknown; case DepthFormat.Depth16: return DXGI.Format.D16_UNorm; case DepthFormat.Depth24: case DepthFormat.Depth24Stencil8: return DXGI.Format.D24_UNorm_S8_UInt; default: return DXGI.Format.Unknown; } } static public DXGI.Format ToDXFormat(this SurfaceFormat format) { switch (format) { case SurfaceFormat.Color: return DXGI.Format.R8G8B8A8_UNorm; case SurfaceFormat.Bgr565: return DXGI.Format.B5G6R5_UNorm; case SurfaceFormat.Bgra5551: return DXGI.Format.B5G5R5A1_UNorm; case SurfaceFormat.Bgra4444: #if UAP || WINUI return DXGI.Format.B4G4R4A4_UNorm; #else return (DXGI.Format)115; #endif case SurfaceFormat.Dxt1: return DXGI.Format.BC1_UNorm; case SurfaceFormat.Dxt3: return DXGI.Format.BC2_UNorm; case SurfaceFormat.Dxt5: return DXGI.Format.BC3_UNorm; case SurfaceFormat.NormalizedByte2: return DXGI.Format.R8G8_SNorm; case SurfaceFormat.NormalizedByte4: return DXGI.Format.R8G8B8A8_SNorm; case SurfaceFormat.Rgba1010102: return DXGI.Format.R10G10B10A2_UNorm; case SurfaceFormat.Rg32: return DXGI.Format.R16G16_UNorm; case SurfaceFormat.Rgba64: return DXGI.Format.R16G16B16A16_UNorm; case SurfaceFormat.Alpha8: return DXGI.Format.A8_UNorm; case SurfaceFormat.Single: return DXGI.Format.R32_Float; case SurfaceFormat.HalfSingle: return DXGI.Format.R16_Float; case SurfaceFormat.HalfVector2: return DXGI.Format.R16G16_Float; case SurfaceFormat.Vector2: return DXGI.Format.R32G32_Float; case SurfaceFormat.Vector4: return DXGI.Format.R32G32B32A32_Float; case SurfaceFormat.HalfVector4: return DXGI.Format.R16G16B16A16_Float; case SurfaceFormat.HdrBlendable: // TODO: This needs to check the graphics device and // return the best hdr blendable format for the device. return DXGI.Format.R16G16B16A16_Float; case SurfaceFormat.Bgr32: return DXGI.Format.B8G8R8X8_UNorm; case SurfaceFormat.Bgra32: return DXGI.Format.B8G8R8A8_UNorm; case SurfaceFormat.ColorSRgb: return DXGI.Format.R8G8B8A8_UNorm_SRgb; case SurfaceFormat.ColorSRgba: return DXGI.Format.R8G8B8A8_UNorm_SRgb; case SurfaceFormat.Bgr32SRgb: return DXGI.Format.B8G8R8X8_UNorm_SRgb; case SurfaceFormat.Bgra32SRgb: return DXGI.Format.B8G8R8A8_UNorm_SRgb; case SurfaceFormat.Dxt1SRgb: return DXGI.Format.BC1_UNorm_SRgb; case SurfaceFormat.Dxt3SRgb: return DXGI.Format.BC2_UNorm_SRgb; case SurfaceFormat.Dxt5SRgb: return DXGI.Format.BC3_UNorm_SRgb; default: return DXGI.Format.R8G8B8A8_UNorm; } } static public int GetPitch(this SurfaceFormat format, int width) { Debug.Assert(width > 0, "The width is negative!"); switch (format) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: return ((width + 3) / 4) * format.GetSize(); default: return width * format.GetSize(); }; } static public D3D11.Comparison ToDXComparisonFunction(this CompareFunction compare) { switch (compare) { case CompareFunction.Always: return D3D11.Comparison.Always; case CompareFunction.Equal: return D3D11.Comparison.Equal; case CompareFunction.Greater: return D3D11.Comparison.Greater; case CompareFunction.GreaterEqual: return D3D11.Comparison.GreaterEqual; case CompareFunction.Less: return D3D11.Comparison.Less; case CompareFunction.LessEqual: return D3D11.Comparison.LessEqual; case CompareFunction.Never: return D3D11.Comparison.Never; case CompareFunction.NotEqual: return D3D11.Comparison.NotEqual; default: throw new ArgumentException("Invalid comparison!"); } } static public RawVector2 ToRawVector2(this Vector2 vec) { return new RawVector2(vec.X, vec.Y); } static public RawVector3 ToRawVector3(this Vector3 vec) { return new RawVector3(vec.X, vec.Y, vec.Z); } static public RawVector4 ToRawVector4(this Vector4 vec) { return new RawVector4(vec.X, vec.Y, vec.Z, vec.W); } static public RawColor4 ToRawColor4(this Vector4 color) { return new RawColor4(color.X, color.Y, color.Z, color.W); } static public RawColor4 ToRawColor4(this Color color) { return new RawColor4(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f, color.A / 255.0f); } static public RawViewportF ToRawViewportF(this Viewport viewport) { return new RawViewportF { X = viewport.X, Y = viewport.Y, Width = viewport.Width, Height = viewport.Height, MinDepth = viewport.MinDepth, MaxDepth = viewport.MaxDepth }; } } } ================================================ FILE: Platforms/Graphics/.DX11/SpriteBatcher.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { /// /// This class handles the queueing of batch items into the GPU by creating the triangle tesselations /// that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be /// batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices /// sent to the GPU). /// internal sealed class SpriteBatcher : SpriteBatcherStrategy { /// /// Initialization size for the batch item list and queue. /// private const int InitialBatchSize = 256; /// /// The maximum number of batch items that can be processed per iteration /// // the upper limit is the range of 16bit indices, (ushort.MaxValue+1)/4 = 16384 vertices per quad. // or (short.MaxValue+1)/4 = 8192 if we are using shorts instead of usigned shorts. private const int MaxBatchSize = 4096; /// /// The list of batch items to process. /// private SpriteBatchItem[] _batchItemList; /// /// Index pointer to the next available SpriteBatchItem in _batchItemList. /// private int _batchItemCount; /// /// The target graphics device. /// private readonly GraphicsDevice _device; /// /// Vertex index array. The values in this array never change. /// private short[] _index; private int _baseQuad; private DynamicVertexBuffer _vertexBuffer; private IndexBuffer _indexBuffer; public override int BatchItemCount { get { return _batchItemCount; } } public SpriteBatcher(GraphicsDevice device, int capacity = 0) { _device = device; _device.DeviceReset += _device_DeviceReset; if (capacity <= 0) capacity = InitialBatchSize; else capacity = (capacity + 63) & (~63); // ensure chunks of 64. _batchItemList = new SpriteBatchItem[capacity]; _batchItemCount = 0; for (int i = 0; i < capacity; i++) _batchItemList[i] = new SpriteBatchItem(); EnsureArrayCapacity(capacity); } void _device_DeviceReset(object sender, EventArgs e) { // recreate index array _index = null; EnsureArrayCapacity(Math.Min(_batchItemList.Length, MaxBatchSize)); } /// /// Reuse a previously allocated SpriteBatchItem from the item pool. /// if there is none available grow the pool and initialize new items. /// /// public override SpriteBatchItem CreateBatchItem() { if (_batchItemCount < _batchItemList.Length) { return _batchItemList[_batchItemCount++]; } else { int oldSize = _batchItemList.Length; int newSize = oldSize + oldSize / 2; // grow by x1.5 newSize = (newSize + 63) & (~63); // grow in chunks of 64. Array.Resize(ref _batchItemList, newSize); for (int i = oldSize; i < newSize; i++) _batchItemList[i] = new SpriteBatchItem(); EnsureArrayCapacity(Math.Min(newSize, MaxBatchSize)); return _batchItemList[_batchItemCount++]; } } /// /// Resize and recreate the missing indices for the index and vertex position color buffers. /// /// private unsafe void EnsureArrayCapacity(int numBatchItems) { int neededCapacity = 6 * numBatchItems; if (_index != null && neededCapacity <= _index.Length) { // Short circuit out of here because we have enough capacity. return; } short[] newIndex = new short[6 * numBatchItems]; int start = 0; if (_index != null) { _index.CopyTo(newIndex, 0); start = _index.Length / 6; } fixed (short* indexFixedPtr = newIndex) { short* indexPtr = indexFixedPtr + (start * 6); for (int i = start; i < numBatchItems; i++, indexPtr += 6) { /* * TL TR * 0----1 0,1,2,3 = index offsets for vertex indices * | /| TL,TR,BL,BR are vertex references in SpriteBatchItem. * | / | * | / | * |/ | * 2----3 * BL BR */ // Triangle 1 *(indexPtr + 0) = (short)(i * 4); *(indexPtr + 1) = (short)(i * 4 + 1); *(indexPtr + 2) = (short)(i * 4 + 2); // Triangle 2 *(indexPtr + 3) = (short)(i * 4 + 1); *(indexPtr + 4) = (short)(i * 4 + 3); *(indexPtr + 5) = (short)(i * 4 + 2); } } _index = newIndex; if (_vertexBuffer != null) _vertexBuffer.Dispose(); int quadCount = (4 * numBatchItems); quadCount = quadCount * 4; //ensure vertex used 4 times before reset/Discard. _vertexBuffer = new DynamicVertexBuffer(_device, VertexPositionColorTexture.VertexDeclaration, quadCount, BufferUsage.WriteOnly); _baseQuad = 0; if (_indexBuffer != null) _indexBuffer.Dispose(); _indexBuffer = new IndexBuffer(_device, IndexElementSize.SixteenBits, newIndex.Length, BufferUsage.WriteOnly); _indexBuffer.SetData(newIndex); } /// /// Sorts the batch items /// /// The type of depth sorting desired for the rendering. public override void SortBatch(SpriteSortMode sortMode) { switch (sortMode) { case SpriteSortMode.Texture: case SpriteSortMode.FrontToBack: case SpriteSortMode.BackToFront: Array.Sort(_batchItemList, 0, _batchItemCount); break; } } /// /// Groups batch drawing into maximal allowed batch sets that do not /// overflow the 16 bit array indices for vertices. /// /// The custom effect to apply to the drawn geometry public unsafe override void DrawBatch(Effect effect) { // Determine how many iterations through the drawing code we need to make int batchIndex = 0; int batchCount = _batchItemCount; ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.Metrics_AddSpriteCount(batchCount); // Iterate through the batches, doing short.MaxValue sets of vertices only. while (batchCount > 0) { int spriteCount = 0; Texture2D tex = null; int numBatchesToProcess = batchCount; if (numBatchesToProcess > MaxBatchSize) { numBatchesToProcess = MaxBatchSize; } _device.SetVertexBuffer(_vertexBuffer); _device.Indices = _indexBuffer; lock (((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy.ToConcrete().D3dContext; //map vertexBaffer D3D11.MapMode mode = D3D11.MapMode.WriteNoOverwrite; if ((_baseQuad + numBatchesToProcess) * 4 > _vertexBuffer.VertexCount) { mode = D3D11.MapMode.WriteDiscard; _baseQuad = 0; } DX.DataBox dataBox = d3dContext.MapSubresource(((IPlatformVertexBuffer)_vertexBuffer).Strategy.ToConcrete().DXVertexBuffer, 0, mode, D3D11.MapFlags.None); try { VertexPositionColorTexture* vertexArrayPtr = (VertexPositionColorTexture*)dataBox.DataPointer.ToPointer(); // create batch vertexArrayPtr += _baseQuad * 4; for (int i = 0; i < numBatchesToProcess; i++, vertexArrayPtr += 4) { SpriteBatchItem item = _batchItemList[batchIndex + i]; // store the SpriteBatchItem data in our vertexArray *(vertexArrayPtr + 0) = item.vertexTL; *(vertexArrayPtr + 1) = item.vertexTR; *(vertexArrayPtr + 2) = item.vertexBL; *(vertexArrayPtr + 3) = item.vertexBR; } } finally { d3dContext.UnmapSubresource(((IPlatformVertexBuffer)_vertexBuffer).Strategy.ToConcrete().DXVertexBuffer, 0); } } // draw batch for (int i = 0; i < numBatchesToProcess; i++, spriteCount++) { SpriteBatchItem item = _batchItemList[batchIndex++]; // if the texture changed, we need to flush and bind the new texture bool shouldFlush = !ReferenceEquals(item.Texture, tex); if (shouldFlush) { if (spriteCount > 0) FlushVertexArray(_baseQuad, spriteCount, effect, tex); _baseQuad += spriteCount; spriteCount = 0; tex = item.Texture; } // Release the texture. item.Texture = null; } // flush the remaining vertexArray data if (spriteCount > 0) FlushVertexArray(_baseQuad, spriteCount, effect, tex); _baseQuad += spriteCount; // Update our batch count to continue the process of culling down // large batches batchCount -= numBatchesToProcess; } // return items to the pool. _batchItemCount = 0; } /// /// Sends the triangle list to the graphics device. Here is where the actual drawing starts. /// /// The number of sprites to draw. /// The custom effect to apply to the geometry. /// The texture to draw. private void FlushVertexArray(int baseQuad, int spriteCount, Effect effect, Texture texture) { int baseVertex = baseQuad * 4; int minVertexIndex = 0; int numVertices = spriteCount * 4; int startIndex = 0; int primitiveCount = spriteCount * 2; GraphicsContextStrategy contextStrategy = ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)_device).Strategy.CurrentContext).Strategy; if (effect == null) // If no custom effect is defined, then simply render. { contextStrategy.Textures[0] = texture; // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks. contextStrategy.DrawIndexedPrimitives( PrimitiveType.TriangleList, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } else // If the effect is not null, then apply each pass and render the geometry { EffectPassCollection passes = effect.CurrentTechnique.Passes; foreach (EffectPass pass in passes) { pass.Apply(); // We have to set the texture again on each pass, // because pass.Apply() might have set a texture from the effect. contextStrategy.Textures[0] = texture; // call GraphicsContextStrategy.DrawIndexedPrimitives() directly, bypassing checks. contextStrategy.DrawIndexedPrimitives( PrimitiveType.TriangleList, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } } } #region IDisposable Members private bool _isDisposed = false; protected override void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { _vertexBuffer.Dispose(); _indexBuffer.Dispose(); _vertexBuffer = null; _indexBuffer = null; } _isDisposed = true; } } #endregion IDisposable Members } } ================================================ FILE: Platforms/Graphics/.DX11/States/ConcreteBlendState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteBlendState : ResourceBlendStateStrategy { private D3D11.BlendState _state; internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy, source) { _state = CreateDXState(base.GraphicsDeviceStrategy); } internal D3D11.BlendState GetDxState() { return _state; } internal D3D11.BlendState CreateDXState(GraphicsDeviceStrategy deviceStrategy) { // Build the description. D3D11.BlendStateDescription blendStateDesc = new D3D11.BlendStateDescription(); ConcreteBlendState.GetDXBlendDescription(this.Targets[0], ref blendStateDesc.RenderTarget[0]); ConcreteBlendState.GetDXBlendDescription(this.Targets[1], ref blendStateDesc.RenderTarget[1]); ConcreteBlendState.GetDXBlendDescription(this.Targets[2], ref blendStateDesc.RenderTarget[2]); ConcreteBlendState.GetDXBlendDescription(this.Targets[3], ref blendStateDesc.RenderTarget[3]); blendStateDesc.IndependentBlendEnable = this.IndependentBlendEnable; // This is a new DX11 feature we should consider // exposing as part of the extended MonoGame API. blendStateDesc.AlphaToCoverageEnable = false; // Create the state. return new D3D11.BlendState(deviceStrategy.ToConcrete().D3DDevice, blendStateDesc); } static private void GetDXBlendDescription(TargetBlendState blendStateTarget, ref D3D11.RenderTargetBlendDescription desc) { // We're blending if we're not in the opaque state. desc.IsBlendEnabled = !(blendStateTarget.ColorSourceBlend == Blend.One && blendStateTarget.ColorDestinationBlend == Blend.Zero && blendStateTarget.AlphaSourceBlend == Blend.One && blendStateTarget.AlphaDestinationBlend == Blend.Zero); desc.BlendOperation = GetDXBlendOperation(blendStateTarget.ColorBlendFunction); desc.SourceBlend = GetDXBlendOption(blendStateTarget.ColorSourceBlend, false); desc.DestinationBlend = GetDXBlendOption(blendStateTarget.ColorDestinationBlend, false); desc.AlphaBlendOperation = GetDXBlendOperation(blendStateTarget.AlphaBlendFunction); desc.SourceAlphaBlend = GetDXBlendOption(blendStateTarget.AlphaSourceBlend, true); desc.DestinationAlphaBlend = GetDXBlendOption(blendStateTarget.AlphaDestinationBlend, true); desc.RenderTargetWriteMask = GetDXColorWriteMaskFlags(blendStateTarget.ColorWriteChannels); } static private D3D11.BlendOperation GetDXBlendOperation(BlendFunction blend) { switch (blend) { case BlendFunction.Add: return D3D11.BlendOperation.Add; case BlendFunction.Max: return D3D11.BlendOperation.Maximum; case BlendFunction.Min: return D3D11.BlendOperation.Minimum; case BlendFunction.ReverseSubtract: return D3D11.BlendOperation.ReverseSubtract; case BlendFunction.Subtract: return D3D11.BlendOperation.Subtract; default: throw new ArgumentException("Invalid blend function!"); } } static private D3D11.BlendOption GetDXBlendOption(Blend blend, bool alpha) { switch (blend) { case Blend.BlendFactor: return D3D11.BlendOption.BlendFactor; case Blend.DestinationAlpha: return D3D11.BlendOption.DestinationAlpha; case Blend.DestinationColor: return alpha ? D3D11.BlendOption.DestinationAlpha : D3D11.BlendOption.DestinationColor; case Blend.InverseBlendFactor: return D3D11.BlendOption.InverseBlendFactor; case Blend.InverseDestinationAlpha: return D3D11.BlendOption.InverseDestinationAlpha; case Blend.InverseDestinationColor: return alpha ? D3D11.BlendOption.InverseDestinationAlpha : D3D11.BlendOption.InverseDestinationColor; case Blend.InverseSourceAlpha: return D3D11.BlendOption.InverseSourceAlpha; case Blend.InverseSourceColor: return alpha ? D3D11.BlendOption.InverseSourceAlpha : D3D11.BlendOption.InverseSourceColor; case Blend.One: return D3D11.BlendOption.One; case Blend.SourceAlpha: return D3D11.BlendOption.SourceAlpha; case Blend.SourceAlphaSaturation: return D3D11.BlendOption.SourceAlphaSaturate; case Blend.SourceColor: return alpha ? D3D11.BlendOption.SourceAlpha : D3D11.BlendOption.SourceColor; case Blend.Zero: return D3D11.BlendOption.Zero; default: throw new ArgumentException("Invalid blend!"); } } static private D3D11.ColorWriteMaskFlags GetDXColorWriteMaskFlags(ColorWriteChannels mask) { return ((mask & ColorWriteChannels.Red) != 0 ? D3D11.ColorWriteMaskFlags.Red : 0) | ((mask & ColorWriteChannels.Green) != 0 ? D3D11.ColorWriteMaskFlags.Green : 0) | ((mask & ColorWriteChannels.Blue) != 0 ? D3D11.ColorWriteMaskFlags.Blue : 0) | ((mask & ColorWriteChannels.Alpha) != 0 ? D3D11.ColorWriteMaskFlags.Alpha : 0); } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } DX.Utilities.Dispose(ref _state); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/States/ConcreteDepthStencilState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy { private D3D11.DepthStencilState _state; internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy, source) { _state = CreateDXState(base.GraphicsDeviceStrategy); } internal D3D11.DepthStencilState GetDxState() { return _state; } internal D3D11.DepthStencilState CreateDXState(GraphicsDeviceStrategy deviceStrategy) { // Build the description. D3D11.DepthStencilStateDescription depthStencilStateDesc = new D3D11.DepthStencilStateDescription(); depthStencilStateDesc.IsDepthEnabled = DepthBufferEnable; depthStencilStateDesc.DepthComparison = DepthBufferFunction.ToDXComparisonFunction(); if (DepthBufferWriteEnable) depthStencilStateDesc.DepthWriteMask = D3D11.DepthWriteMask.All; else depthStencilStateDesc.DepthWriteMask = D3D11.DepthWriteMask.Zero; depthStencilStateDesc.IsStencilEnabled = StencilEnable; depthStencilStateDesc.StencilReadMask = (byte)StencilMask; // TODO: Should this instead grab the upper 8bits? depthStencilStateDesc.StencilWriteMask = (byte)StencilWriteMask; if (TwoSidedStencilMode) { depthStencilStateDesc.BackFace.Comparison = CounterClockwiseStencilFunction.ToDXComparisonFunction(); depthStencilStateDesc.BackFace.DepthFailOperation = ToDXStencilOp(CounterClockwiseStencilDepthBufferFail); depthStencilStateDesc.BackFace.FailOperation = ToDXStencilOp(CounterClockwiseStencilFail); depthStencilStateDesc.BackFace.PassOperation = ToDXStencilOp(CounterClockwiseStencilPass); } else { //use same settings as frontFace depthStencilStateDesc.BackFace.Comparison = StencilFunction.ToDXComparisonFunction(); depthStencilStateDesc.BackFace.DepthFailOperation = ToDXStencilOp(StencilDepthBufferFail); depthStencilStateDesc.BackFace.FailOperation = ToDXStencilOp(StencilFail); depthStencilStateDesc.BackFace.PassOperation = ToDXStencilOp(StencilPass); } depthStencilStateDesc.FrontFace.Comparison = StencilFunction.ToDXComparisonFunction(); depthStencilStateDesc.FrontFace.DepthFailOperation = ToDXStencilOp(StencilDepthBufferFail); depthStencilStateDesc.FrontFace.FailOperation = ToDXStencilOp(StencilFail); depthStencilStateDesc.FrontFace.PassOperation = ToDXStencilOp(StencilPass); // Create the state. return new D3D11.DepthStencilState(deviceStrategy.ToConcrete().D3DDevice, depthStencilStateDesc); } static private D3D11.StencilOperation ToDXStencilOp(StencilOperation operation) { switch (operation) { case StencilOperation.Decrement: return D3D11.StencilOperation.Decrement; case StencilOperation.DecrementSaturation: return D3D11.StencilOperation.DecrementAndClamp; case StencilOperation.Increment: return D3D11.StencilOperation.Increment; case StencilOperation.IncrementSaturation: return D3D11.StencilOperation.IncrementAndClamp; case StencilOperation.Invert: return D3D11.StencilOperation.Invert; case StencilOperation.Keep: return D3D11.StencilOperation.Keep; case StencilOperation.Replace: return D3D11.StencilOperation.Replace; case StencilOperation.Zero: return D3D11.StencilOperation.Zero; default: throw new ArgumentException("Invalid stencil operation!"); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } DX.Utilities.Dispose(ref _state); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/States/ConcreteRasterizerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy { private D3D11.RasterizerState _state; internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy, source) { // discussion and explanation in https://github.com/MonoGame/MonoGame/issues/4826 // TODO: Need fixing. We create the rasterizerStateDesc based on // the DepthFormat of the current rendertarget. When the user set // a new rendertarget the DepthBias will be wrong. DepthFormat activeDepthFormat; if (contextStrategy.IsRenderTargetBound) activeDepthFormat = ((IRenderTarget)contextStrategy.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat; else activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat; _state = CreateDXState(base.GraphicsDeviceStrategy, activeDepthFormat); } internal D3D11.RasterizerState GetDxState(ConcreteGraphicsContext contextStrategy) { DepthFormat activeDepthFormat; if (contextStrategy.IsRenderTargetBound) activeDepthFormat = ((IRenderTarget)contextStrategy.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat; else activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat; return _state; } internal D3D11.RasterizerState CreateDXState(GraphicsDeviceStrategy deviceStrategy, DepthFormat activeDepthFormat) { // Build the description. D3D11.RasterizerStateDescription rasterizerStateDesc = new D3D11.RasterizerStateDescription(); switch (CullMode) { case CullMode.None: rasterizerStateDesc.CullMode = D3D11.CullMode.None; break; case CullMode.CullClockwiseFace: rasterizerStateDesc.CullMode = D3D11.CullMode.Front; break; case CullMode.CullCounterClockwiseFace: rasterizerStateDesc.CullMode = D3D11.CullMode.Back; break; default: throw new InvalidOperationException("CullMode"); } rasterizerStateDesc.IsScissorEnabled = ScissorTestEnable; rasterizerStateDesc.IsMultisampleEnabled = MultiSampleAntiAlias; int depthMul; switch (activeDepthFormat) { case DepthFormat.None: depthMul = 0; break; case DepthFormat.Depth16: depthMul = (1 << 16) - 1; break; case DepthFormat.Depth24: case DepthFormat.Depth24Stencil8: depthMul = (1 << 24) - 1; break; default: throw new ArgumentOutOfRangeException(); } rasterizerStateDesc.DepthBias = (int)(DepthBias * depthMul); rasterizerStateDesc.SlopeScaledDepthBias = SlopeScaleDepthBias; if (FillMode == FillMode.WireFrame) rasterizerStateDesc.FillMode = D3D11.FillMode.Wireframe; else rasterizerStateDesc.FillMode = D3D11.FillMode.Solid; rasterizerStateDesc.IsDepthClipEnabled = DepthClipEnable; // These are new DX11 features we should consider exposing // as part of the extended MonoGame API. rasterizerStateDesc.IsFrontCounterClockwise = false; rasterizerStateDesc.IsAntialiasedLineEnabled = false; // To support feature level 9.1 these must // be set to these exact values. rasterizerStateDesc.DepthBiasClamp = 0.0f; // Create the state. return new D3D11.RasterizerState(deviceStrategy.ToConcrete().D3DDevice, rasterizerStateDesc); } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } DX.Utilities.Dispose(ref _state); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/States/ConcreteSamplerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteSamplerState : ResourceSamplerStateStrategy { private D3D11.SamplerState _state; internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy, source) { _state = CreateDXState(contextStrategy, base.GraphicsDeviceStrategy); } internal D3D11.SamplerState GetDxState() { return _state; } internal D3D11.SamplerState CreateDXState(GraphicsContextStrategy contextStrategy, GraphicsDeviceStrategy deviceStrategy) { // Build the description. D3D11.SamplerStateDescription samplerStateDesc = new D3D11.SamplerStateDescription(); samplerStateDesc.AddressU = ToDXTextureAddressMode(AddressU); samplerStateDesc.AddressV = ToDXTextureAddressMode(AddressV); samplerStateDesc.AddressW = ToDXTextureAddressMode(AddressW); #if UAP || WINUI samplerStateDesc.BorderColor = new SharpDX.Mathematics.Interop.RawColor4( BorderColor.R / 255.0f, BorderColor.G / 255.0f, BorderColor.B / 255.0f, BorderColor.A / 255.0f); #else samplerStateDesc.BorderColor = BorderColor.ToRawColor4(); #endif samplerStateDesc.Filter = ToDXTextureFilter(Filter, FilterMode); samplerStateDesc.MaximumAnisotropy = Math.Min(MaxAnisotropy, contextStrategy.Capabilities.MaxTextureAnisotropy); samplerStateDesc.MipLodBias = MipMapLevelOfDetailBias; samplerStateDesc.ComparisonFunction = ComparisonFunction.ToDXComparisonFunction(); // TODO: How do i do this? samplerStateDesc.MinimumLod = 0.0f; // To support feature level 9.1 these must // be set to these exact values. samplerStateDesc.MaximumLod = float.MaxValue; // Create the state. return new D3D11.SamplerState(deviceStrategy.ToConcrete().D3DDevice, samplerStateDesc); } private static D3D11.Filter ToDXTextureFilter(TextureFilter filter, TextureFilterMode mode) { switch (mode) { case TextureFilterMode.Comparison: switch (filter) { case TextureFilter.Anisotropic: return D3D11.Filter.ComparisonAnisotropic; case TextureFilter.Linear: return D3D11.Filter.ComparisonMinMagMipLinear; case TextureFilter.LinearMipPoint: return D3D11.Filter.ComparisonMinMagLinearMipPoint; case TextureFilter.MinLinearMagPointMipLinear: return D3D11.Filter.ComparisonMinLinearMagPointMipLinear; case TextureFilter.MinLinearMagPointMipPoint: return D3D11.Filter.ComparisonMinLinearMagMipPoint; case TextureFilter.MinPointMagLinearMipLinear: return D3D11.Filter.ComparisonMinPointMagMipLinear; case TextureFilter.MinPointMagLinearMipPoint: return D3D11.Filter.ComparisonMinPointMagLinearMipPoint; case TextureFilter.Point: return D3D11.Filter.ComparisonMinMagMipPoint; case TextureFilter.PointMipLinear: return D3D11.Filter.ComparisonMinMagPointMipLinear; default: throw new ArgumentException("Invalid texture filter!"); } case TextureFilterMode.Default: switch (filter) { case TextureFilter.Anisotropic: return D3D11.Filter.Anisotropic; case TextureFilter.Linear: return D3D11.Filter.MinMagMipLinear; case TextureFilter.LinearMipPoint: return D3D11.Filter.MinMagLinearMipPoint; case TextureFilter.MinLinearMagPointMipLinear: return D3D11.Filter.MinLinearMagPointMipLinear; case TextureFilter.MinLinearMagPointMipPoint: return D3D11.Filter.MinLinearMagMipPoint; case TextureFilter.MinPointMagLinearMipLinear: return D3D11.Filter.MinPointMagMipLinear; case TextureFilter.MinPointMagLinearMipPoint: return D3D11.Filter.MinPointMagLinearMipPoint; case TextureFilter.Point: return D3D11.Filter.MinMagMipPoint; case TextureFilter.PointMipLinear: return D3D11.Filter.MinMagPointMipLinear; default: throw new ArgumentException("Invalid texture filter!"); } default: throw new ArgumentException("Invalid texture filter mode!"); } } private static D3D11.TextureAddressMode ToDXTextureAddressMode(TextureAddressMode mode) { switch (mode) { case TextureAddressMode.Clamp: return D3D11.TextureAddressMode.Clamp; case TextureAddressMode.Mirror: return D3D11.TextureAddressMode.Mirror; case TextureAddressMode.Wrap: return D3D11.TextureAddressMode.Wrap; case TextureAddressMode.Border: return D3D11.TextureAddressMode.Border; default: throw new ArgumentException("Invalid texture address mode!"); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } DX.Utilities.Dispose(ref _state); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/ConcreteDynamicIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true) { PlatformConstructDynamicIndexBuffer(); } private void PlatformConstructDynamicIndexBuffer() { Debug.Assert(_buffer == null); int sizeInBytes = this.IndexCount * base.ElementSizeInBytes; D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription(); bufferDesc.SizeInBytes = sizeInBytes; bufferDesc.Usage = D3D11.ResourceUsage.Dynamic; bufferDesc.BindFlags = D3D11.BindFlags.IndexBuffer; bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Write; bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None; bufferDesc.StructureByteStride = 0;// StructureSizeInBytes _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, bufferDesc); } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) { Debug.Assert(_buffer != null); D3D11.MapMode mode; switch (options) { case SetDataOptions.None: // MapSubresource doesn't work with MapMode.Write on Dynamic buffers. // And the base SetData<>() using UpdateSubresource(...) doesn't seem to set the data. // We have to use Discard. mode = D3D11.MapMode.WriteDiscard; break; case SetDataOptions.Discard: mode = D3D11.MapMode.WriteDiscard; break; case SetDataOptions.NoOverwrite: mode = D3D11.MapMode.WriteNoOverwrite; break; default: throw new InvalidOperationException("options"); } lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; DX.DataBox dataBox = d3dContext.MapSubresource(_buffer, 0, mode, D3D11.MapFlags.None); try { int TsizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * TsizeInBytes; IntPtr dstPtr = dataBox.DataPointer + offsetInBytes; MemCopyHelper.MemoryCopy( dataPtr, dstPtr, elementCount * TsizeInBytes); } } finally { d3dContext.UnmapSubresource(_buffer, 0); } } } public override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { Debug.Assert(_buffer != null); throw new NotImplementedException(); } #region IDynamicIndexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicIndexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/ConcreteDynamicVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true) { PlatformConstructDynamicVertexBuffer(); } private void PlatformConstructDynamicVertexBuffer() { Debug.Assert(_buffer == null); D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription(); bufferDesc.SizeInBytes = this.VertexDeclaration.VertexStride * this.VertexCount; bufferDesc.Usage = D3D11.ResourceUsage.Dynamic; bufferDesc.BindFlags = D3D11.BindFlags.VertexBuffer; bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Write; bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None; bufferDesc.StructureByteStride = 0;// StructureSizeInBytes _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, bufferDesc); } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) { Debug.Assert(_buffer != null); D3D11.MapMode mode; switch (options) { case SetDataOptions.None: // MapSubresource doesn't work with MapMode.Write on Dynamic buffers. // And the base SetData<>() using UpdateSubresource(...) doesn't seem to set the data. // We have to use Discard. mode = D3D11.MapMode.WriteDiscard; break; case SetDataOptions.Discard: mode = D3D11.MapMode.WriteDiscard; break; case SetDataOptions.NoOverwrite: mode = D3D11.MapMode.WriteNoOverwrite; break; default: throw new InvalidOperationException("options"); } lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; DX.DataBox dataBox = d3dContext.MapSubresource(_buffer, 0, mode, D3D11.MapFlags.None); try { fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; IntPtr dstPtr = dataBox.DataPointer + offsetInBytes; if (vertexStride == elementSizeInBytes) { MemCopyHelper.MemoryCopy( dataPtr, dstPtr, elementCount * elementSizeInBytes); } else { for (int i = 0; i < elementCount; i++) MemCopyHelper.MemoryCopy( dataPtr + i * elementSizeInBytes, dstPtr + i * vertexStride, elementSizeInBytes); } } } finally { d3dContext.UnmapSubresource(_buffer, 0); } } } public override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { Debug.Assert(_buffer != null); throw new NotImplementedException(); } #region IDynamicVertexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicVertexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/ConcreteIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : IndexBufferStrategy { private readonly DXGI.Format _drawElementsType; internal D3D11.Buffer _buffer; internal DXGI.Format DrawElementsType { get { return _drawElementsType; } } internal D3D11.Buffer DXIndexBuffer { get { Debug.Assert(_buffer != null); return _buffer; } } internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage) { Debug.Assert(isDynamic == true); switch (indexElementSize) { case IndexElementSize.SixteenBits: _drawElementsType = DXGI.Format.R16_UInt; break; case IndexElementSize.ThirtyTwoBits: _drawElementsType = DXGI.Format.R32_UInt; break; default: throw new InvalidOperationException(); } } internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { switch (indexElementSize) { case IndexElementSize.SixteenBits: _drawElementsType = DXGI.Format.R16_UInt; break; case IndexElementSize.ThirtyTwoBits: _drawElementsType = DXGI.Format.R32_UInt; break; default: throw new InvalidOperationException(); } PlatformConstructIndexBuffer(); } internal void PlatformConstructIndexBuffer() { Debug.Assert(_buffer == null); int sizeInBytes = this.IndexCount * base.ElementSizeInBytes; D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription(); bufferDesc.SizeInBytes = sizeInBytes; bufferDesc.Usage = D3D11.ResourceUsage.Default; bufferDesc.BindFlags = D3D11.BindFlags.IndexBuffer; bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None; bufferDesc.StructureByteStride = 0;// StructureSizeInBytes _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, bufferDesc); } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) { Debug.Assert(_buffer != null); int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; DX.DataBox dataBox = new DX.DataBox(dataPtr, elementCount * elementSizeInBytes, 0); D3D11.ResourceRegion region = new D3D11.ResourceRegion(); region.Top = 0; region.Front = 0; region.Back = 1; region.Bottom = 1; region.Left = offsetInBytes; region.Right = offsetInBytes + (elementCount * elementSizeInBytes); lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(dataBox, _buffer, 0, region); } } } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { Debug.Assert(_buffer != null); // Copy the texture to a staging resource D3D11.BufferDescription stagingDesc = _buffer.Description; stagingDesc.BindFlags = D3D11.BindFlags.None; stagingDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read | D3D11.CpuAccessFlags.Write; stagingDesc.Usage = D3D11.ResourceUsage.Staging; stagingDesc.OptionFlags = D3D11.ResourceOptionFlags.None; using (D3D11.Buffer stagingBuffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, stagingDesc)) { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.CopyResource(_buffer, stagingBuffer); } int TsizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * TsizeInBytes; lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None); try { IntPtr srcPtr = dataBox.DataPointer + offsetInBytes; MemCopyHelper.MemoryCopy( srcPtr, dataPtr, elementCount * TsizeInBytes); } finally { d3dContext.UnmapSubresource(stagingBuffer, 0); } } } } } protected override void PlatformGraphicsContextLost() { DX.Utilities.Dispose(ref _buffer); } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _buffer); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/ConcreteVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Utilities; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : VertexBufferStrategy { internal D3D11.Buffer _buffer; internal D3D11.Buffer DXVertexBuffer { get { Debug.Assert(_buffer != null); return _buffer; } } internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { Debug.Assert(isDynamic == true); } internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { PlatformConstructVertexBuffer(); } internal void PlatformConstructVertexBuffer() { Debug.Assert(_buffer == null); D3D11.BufferDescription bufferDesc = new D3D11.BufferDescription(); bufferDesc.SizeInBytes = this.VertexDeclaration.VertexStride * this.VertexCount; bufferDesc.Usage = D3D11.ResourceUsage.Default; bufferDesc.BindFlags = D3D11.BindFlags.VertexBuffer; bufferDesc.CpuAccessFlags = D3D11.CpuAccessFlags.None; bufferDesc.OptionFlags = D3D11.ResourceOptionFlags.None; bufferDesc.StructureByteStride = 0;// StructureSizeInBytes _buffer = new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, bufferDesc); } internal D3D11.Buffer CreateStagingBuffer() { D3D11.BufferDescription stagingDesc = _buffer.Description; stagingDesc.BindFlags = D3D11.BindFlags.None; stagingDesc.CpuAccessFlags = D3D11.CpuAccessFlags.Read | D3D11.CpuAccessFlags.Write; stagingDesc.Usage = D3D11.ResourceUsage.Staging; stagingDesc.OptionFlags = D3D11.ResourceOptionFlags.None; return new D3D11.Buffer(base.GraphicsDeviceStrategy.ToConcrete().D3DDevice, stagingDesc); } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) { Debug.Assert(_buffer != null); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; if (vertexStride == elementSizeInBytes) { DX.DataBox dataBox = new DX.DataBox(dataPtr, elementCount * elementSizeInBytes, 0); D3D11.ResourceRegion region = new D3D11.ResourceRegion(); region.Top = 0; region.Front = 0; region.Back = 1; region.Bottom = 1; region.Left = offsetInBytes; region.Right = offsetInBytes + (elementCount * elementSizeInBytes); lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.UpdateSubresource(dataBox, _buffer, 0, region); } } else { using (D3D11.Buffer stagingBuffer = CreateStagingBuffer()) lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.CopyResource(_buffer, stagingBuffer); DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None); try { IntPtr dstPtr = dataBox.DataPointer + offsetInBytes; for (int i = 0; i < elementCount; i++) MemCopyHelper.MemoryCopy( dataPtr + i * elementSizeInBytes, dstPtr + i * vertexStride, elementSizeInBytes); } finally { d3dContext.UnmapSubresource(stagingBuffer, 0); } // Copy back from staging resource to real buffer. d3dContext.CopyResource(stagingBuffer, _buffer); } } } } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { Debug.Assert(_buffer != null); int TsizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * TsizeInBytes; using (D3D11.Buffer stagingBuffer = CreateStagingBuffer()) lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { D3D11.DeviceContext d3dContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().D3dContext; d3dContext.CopyResource(_buffer, stagingBuffer); DX.DataBox dataBox = d3dContext.MapSubresource(stagingBuffer, 0, D3D11.MapMode.Read, D3D11.MapFlags.None); try { IntPtr srcPtr = dataBox.DataPointer + offsetInBytes; if (vertexStride == TsizeInBytes) { MemCopyHelper.MemoryCopy( srcPtr, dataPtr, vertexStride * elementCount); } else { for (int i = 0; i < elementCount; i++) MemCopyHelper.MemoryCopy( srcPtr + i * vertexStride, dataPtr + i * TsizeInBytes, TsizeInBytes); } } finally { d3dContext.UnmapSubresource(stagingBuffer, 0); } } } } protected override void PlatformGraphicsContextLost() { DX.Utilities.Dispose(ref _buffer); } protected override void Dispose(bool disposing) { if (disposing) { DX.Utilities.Dispose(ref _buffer); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/InputLayoutCache.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Microsoft.Xna.Platform.Graphics; using DX = SharpDX; using D3D11 = SharpDX.Direct3D11; using DXGI = SharpDX.DXGI; namespace Microsoft.Xna.Framework.Graphics { /// /// Caches DirectX input layouts for the input assembler stage. /// internal class InputLayoutCache : IDisposable { #if DEBUG // Flag to print warning only once per shader. private bool _printWarning = true; #endif private readonly GraphicsDeviceStrategy _graphicsDeviceStrategy; private readonly byte[] _shaderByteCode; private readonly Dictionary _cache; /// /// Initializes a new instance of the class. /// /// The graphics device strategy. /// The byte code of the vertex shader. public InputLayoutCache(GraphicsDeviceStrategy graphicsDeviceStrategy, byte[] shaderByteCode) { Debug.Assert(graphicsDeviceStrategy != null); Debug.Assert(shaderByteCode != null); _graphicsDeviceStrategy = graphicsDeviceStrategy; _shaderByteCode = shaderByteCode; _cache = new Dictionary(); } /// /// Releases all resources used by an instance of the class. /// /// /// This method calls the virtual method, passing in /// , and then suppresses finalization of the instance. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases the unmanaged resources used by an instance of the /// class and optionally releases the managed resources. /// /// /// to release both managed and unmanaged resources; /// to release only unmanaged resources. /// protected virtual void Dispose(bool disposing) { if (disposing) { // Dispose managed resources. foreach (var entry in _cache) entry.Value.Dispose(); _cache.Clear(); } } /// /// Gets or create the DirectX input layout for the specified vertex buffers. /// /// The vertex buffers. /// The DirectX input layout. public D3D11.InputLayout GetOrCreate(VertexInputLayoutKey vertexInputLayoutKey, VertexBufferCollection vertexBuffers) { D3D11.InputLayout inputLayout; if (_cache.TryGetValue(vertexInputLayoutKey, out inputLayout)) return inputLayout; ImmutableVertexInputLayoutKey immutableVertexInputLayout = vertexInputLayoutKey.CreateImmutable(); // Get inputElements D3D11.InputElement[] inputElements; { List list = new List(); for (int i = 0; i < vertexBuffers.Count; i++) { VertexBufferBinding vertexBufferBinding = vertexBuffers.Get(i); VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexBufferBinding.VertexBuffer.VertexDeclaration).InternalVertexElements; for (int v = 0; v < vertexElements.Length; v++) { D3D11.InputElement inputElement = new D3D11.InputElement(); inputElement.SemanticName = vertexElements[v].VertexElementUsage.ToDXSemanticName(); inputElement.SemanticIndex = vertexElements[v].UsageIndex; inputElement.Format = vertexElements[v].VertexElementFormat.ToDXFormat(); inputElement.Slot = i; inputElement.AlignedByteOffset = vertexElements[v].Offset; // Note that instancing is only supported in feature level 9.3 and above. inputElement.Classification = (vertexBufferBinding.InstanceFrequency == 0) ? D3D11.InputClassification.PerVertexData : D3D11.InputClassification.PerInstanceData; inputElement.InstanceDataStepRate = vertexInputLayoutKey.InstanceFrequencies[i]; list.Add(inputElement); } } inputElements = list.ToArray(); // Fix semantics indices. (If there are more vertex declarations with, for example, // POSITION0, the indices are changed to POSITION1/2/3/...) for (int i = 1; i < inputElements.Length; i++) { string semanticName = inputElements[i].SemanticName; int semanticIndex = inputElements[i].SemanticIndex; for (int j = 0; j < i; j++) { if (inputElements[j].SemanticName == semanticName && inputElements[j].SemanticIndex == semanticIndex) { // Semantic index already used. semanticIndex++; } } inputElements[i].SemanticIndex = semanticIndex; } } try { inputLayout = new D3D11.InputLayout(_graphicsDeviceStrategy.ToConcrete().D3DDevice, _shaderByteCode, inputElements); } catch (DX.SharpDXException ex) { if (ex.Descriptor != DX.Result.InvalidArg) throw; // If InputLayout ctor fails with InvalidArg then it's most likely because the // vertex declaration doesn't match the vertex shader. // Shader probably used the semantic "SV_Position" in the vertex shader input. // Background information: // "SV_Position" is a "system-value semantic" which is interpreted by the // rasterizer stage. This means it needs to be used in the vertex shader output // or the pixel shader input. (See // https://msdn.microsoft.com/en-us/library/windows/desktop/bb509647.aspx) // // However, some effects (notably the original XNA stock effects) use // "SV_Position" for the vertex shader input. This is technically allowed, but // rather uncommon and causes problems: // - XNA/MonoGame only has VertexElementUsage.Position, so there is no way to // distinguish between "POSITION" and "SV_Position". // - "SV_Position" cannot be used with any index other than 0, i.e. the DirectX // FX compiler does not accept "SV_Position1", "SV_Position2", ... // This is a problem when using multiple vertex streams, e.g. for blend shape // animations. It makes it impossible to correctly match the vertex // declaration with the vertex shader signature. // // Conclusion: // - MonoGame needs to translate VertexElementUsage.Position to "POSITION". // - MonoGame effects should always use "POSITION" for vertex shader inputs. // Here is a workaround ("hack") for old vertex shaders which haven't been // updated: Rename "POSITION0" to "SV_Position" and try again. bool retry = false; for (int i = 0; i < inputElements.Length; i++) { if (inputElements[i].SemanticIndex == 0 && inputElements[i].SemanticName.Equals("POSITION", StringComparison.OrdinalIgnoreCase)) { inputElements[i].SemanticName = "SV_Position"; retry = true; break; } } if (!retry) throw new InvalidOperationException(GetInvalidArgMessage(inputElements), ex); try { inputLayout = new D3D11.InputLayout(_graphicsDeviceStrategy.ToConcrete().D3DDevice, _shaderByteCode, inputElements); // Workaround succeeded? This means that there is a vertex shader that needs // to be updated. #if DEBUG if (_printWarning) { Debug.WriteLine( "Warning: Vertex shader uses semantic 'SV_Position' for input register. " + "Please update the shader and use the semantic 'POSITION0' instead. The " + "semantic 'SV_Position' should only be used for the vertex shader output or " + "pixel shader input!"); _printWarning = false; } #endif } catch (DX.SharpDXException) { // Workaround failed. throw new InvalidOperationException(GetInvalidArgMessage(inputElements), ex); } } _cache.Add(immutableVertexInputLayout, inputLayout); return inputLayout; } /// /// Gets a more helpful message for the SharpDX invalid arg error. /// /// The input elements. /// The exception message. private static string GetInvalidArgMessage(D3D11.InputElement[] inputElements) { string elements = string.Join(", ", inputElements.Select(x => x.SemanticName + x.SemanticIndex)); return "An error occurred while preparing to draw. " + "This is probably because the current vertex declaration does not include all the elements " + "required by the current vertex shader. The current vertex declaration includes these elements: " + elements + "."; } } } ================================================ FILE: Platforms/Graphics/.DX11/Vertices/VertexInputLayoutKey.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class VertexInputLayoutKey : IEquatable { public int Count { get; protected set; } public VertexDeclaration[] VertexDeclarations { get; protected set; } public int[] InstanceFrequencies { get; protected set; } internal VertexInputLayoutKey() { Count = 0; VertexDeclarations = null; InstanceFrequencies = null; } internal void Set(VertexDeclaration[] vertexDeclarations, int[] instanceFrequencies, int count) { this.VertexDeclarations = vertexDeclarations; this.InstanceFrequencies = instanceFrequencies; this.Count = count; } public override bool Equals(object obj) { return Equals(obj as VertexInputLayoutKey); } public bool Equals(VertexInputLayoutKey other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; if (Count != other.Count) return false; for (int i = 0; i < Count; i++) { Debug.Assert(VertexDeclarations[i] != null); if (!VertexDeclarations[i].Equals(other.VertexDeclarations[i])) return false; } for (int i = 0; i < Count; i++) { if (!InstanceFrequencies[i].Equals(other.InstanceFrequencies[i])) return false; } return true; } public override int GetHashCode() { unchecked { int hashCode = 0; if (Count > 0) { hashCode = VertexDeclarations[0].GetHashCode(); hashCode = (hashCode * 397) ^ InstanceFrequencies[0]; for (int i = 1; i < Count; i++) { hashCode = (hashCode * 397) ^ VertexDeclarations[i].GetHashCode(); hashCode = (hashCode * 397) ^ InstanceFrequencies[i]; } } return hashCode; } } /// /// Create an 'ImmutableVertexInputLayout' that can be used as a key in the 'InputLayoutCache'. /// /// internal ImmutableVertexInputLayoutKey CreateImmutable() { VertexDeclaration[] vertexDeclarations = new VertexDeclaration[this.Count]; int[] instanceFrequencies = new int[this.Count]; Array.Copy(this.VertexDeclarations, vertexDeclarations, vertexDeclarations.Length); Array.Copy(this.InstanceFrequencies, instanceFrequencies, instanceFrequencies.Length); return new ImmutableVertexInputLayoutKey(vertexDeclarations, instanceFrequencies, this.Count); } public static bool operator ==(VertexInputLayoutKey left, VertexInputLayoutKey right) { return Equals(left, right); } public static bool operator !=(VertexInputLayoutKey left, VertexInputLayoutKey right) { return !Equals(left, right); } } internal sealed class ImmutableVertexInputLayoutKey : VertexInputLayoutKey { private readonly int _hashCode; internal ImmutableVertexInputLayoutKey(VertexDeclaration[] vertexDeclarations, int[] instanceFrequencies, int count) { Debug.Assert(vertexDeclarations != null); Debug.Assert(instanceFrequencies != null); Debug.Assert(count >= 0); Debug.Assert(vertexDeclarations.Length == count); Debug.Assert(vertexDeclarations.Length == instanceFrequencies.Length); Count = count; VertexDeclarations = vertexDeclarations; InstanceFrequencies = instanceFrequencies; // Pre-calculate hash code for fast lookup in dictionary. _hashCode = base.GetHashCode(); } public override int GetHashCode() { return _hashCode; } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteGraphicsCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities { /// /// True, if GL_ARB_framebuffer_object is supported; false otherwise. /// internal bool SupportsFramebufferObjectARB { get; private set; } /// /// True, if GL_EXT_framebuffer_object is supported; false otherwise. /// internal bool SupportsFramebufferObjectEXT { get; private set; } /// /// True, if GL_IMG_multisampled_render_to_texture is supported; false otherwise. /// internal bool SupportsFramebufferObjectIMG { get; private set; } internal bool SupportsBaseVertex { get; private set; } internal bool SupportsDrawRangeElements { get; private set; } internal bool SupportsMapBufferRange { get; private set; } private int _maxDrawBuffers; internal int MaxDrawBuffers { get { return _maxDrawBuffers; } } internal void PlatformInitialize(ConcreteGraphicsContextGL cgraphicsContext, GraphicsDeviceStrategy deviceStrategy, GLVersion version) { var GL = cgraphicsContext.GL; GraphicsProfile profile = deviceStrategy.GraphicsProfile; GL.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize); GL.CheckGLError(); SupportsTextureFilterAnisotropic = GL.Extensions.Contains("GL_EXT_texture_filter_anisotropic"); #if GLES SupportsDepth24 = GL.Extensions.Contains("GL_OES_depth24"); SupportsPackedDepthStencil = GL.Extensions.Contains("GL_OES_packed_depth_stencil"); SupportsDepthNonLinear = GL.Extensions.Contains("GL_NV_depth_nonlinear"); SupportsTextureMaxLevel = GL.Extensions.Contains("GL_APPLE_texture_max_level"); #elif DESKTOPGL SupportsDepth24 = true; SupportsPackedDepthStencil = true; SupportsDepthNonLinear = false; SupportsTextureMaxLevel = true; #endif // 16bit textures SupportsBgra5551 = false; SupportsBgra4444 = false; SupportsAbgr5551 = true; SupportsAbgr4444 = true; // Texture compression SupportsS3tc = GL.Extensions.Contains("GL_EXT_texture_compression_s3tc") || GL.Extensions.Contains("GL_OES_texture_compression_S3TC") || GL.Extensions.Contains("GL_EXT_texture_compression_dxt3") || GL.Extensions.Contains("GL_EXT_texture_compression_dxt5"); SupportsDxt1 = SupportsS3tc || GL.Extensions.Contains("GL_EXT_texture_compression_dxt1"); SupportsPvrtc = GL.Extensions.Contains("GL_IMG_texture_compression_pvrtc"); SupportsEtc1 = GL.Extensions.Contains("GL_OES_compressed_ETC1_RGB8_texture"); SupportsAtitc = GL.Extensions.Contains("GL_ATI_texture_compression_atitc") || GL.Extensions.Contains("GL_AMD_compressed_ATC_texture"); if (GL.BoundApi == OGL.RenderApi.ES) { SupportsEtc2 = version >= new GLVersion(3, 0); } // Framebuffer objects #if GLES SupportsFramebufferObjectARB = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(2, 0) || GL.Extensions.Contains("GL_ARB_framebuffer_object")); // always supported on GLES 2.0+ SupportsFramebufferObjectEXT = GL.Extensions.Contains("GL_EXT_framebuffer_object");; SupportsFramebufferObjectIMG = GL.Extensions.Contains("GL_IMG_multisampled_render_to_texture") | GL.Extensions.Contains("GL_APPLE_framebuffer_multisample") | GL.Extensions.Contains("GL_EXT_multisampled_render_to_texture") | GL.Extensions.Contains("GL_NV_framebuffer_multisample"); #elif DESKTOPGL // if we're on GL 3.0+, frame buffer extensions are guaranteed to be present, but extensions may be missing // it is then safe to assume that GL_ARB_framebuffer_object is present so that the standard function are loaded SupportsFramebufferObjectARB = version >= new GLVersion(3, 0) || GL.Extensions.Contains("GL_ARB_framebuffer_object"); SupportsFramebufferObjectEXT = GL.Extensions.Contains("GL_EXT_framebuffer_object"); #endif // Anisotropic filtering int anisotropy = 0; if (SupportsTextureFilterAnisotropic) { GL.GetInteger(GetParamName.MaxTextureMaxAnisotropyExt, out anisotropy); GL.CheckGLError(); } MaxTextureAnisotropy = anisotropy; // sRGB #if GLES SupportsSRgb = GL.Extensions.Contains("GL_EXT_sRGB"); SupportsFloatTextures = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) || GL.Extensions.Contains("GL_EXT_color_buffer_float")); SupportsHalfFloatTextures = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) || GL.Extensions.Contains("GL_EXT_color_buffer_half_float")); SupportsNormalized = GL.BoundApi == OGL.RenderApi.ES && (version >= new GLVersion(3,0) && GL.Extensions.Contains("GL_EXT_texture_norm16")); #elif DESKTOPGL SupportsSRgb = GL.Extensions.Contains("GL_EXT_texture_sRGB") && GL.Extensions.Contains("GL_EXT_framebuffer_sRGB"); SupportsFloatTextures = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains("GL_ARB_texture_float")); SupportsHalfFloatTextures = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains("GL_ARB_half_float_pixel"));; SupportsNormalized = GL.BoundApi == OGL.RenderApi.GL && (version >= new GLVersion(3,0) || GL.Extensions.Contains("GL_EXT_texture_norm16"));; #endif // TODO: Implement OpenGL support for texture arrays // once we can author shaders that use texture arrays. SupportsTextureArrays = false; SupportsDepthClamp = GL.Extensions.Contains("GL_ARB_depth_clamp"); GL.GetInteger(GetParamName.MaxTextureImageUnits, out _maxTextureSlots); GL.CheckGLError(); GL.GetInteger(GetParamName.MaxVertexTextureImageUnits, out _maxVertexTextureSlots); GL.CheckGLError(); // fix for bad GL drivers int maxCombinedTextureImageUnits; GL.GetInteger(GetParamName.MaxCombinedTextureImageUnits, out maxCombinedTextureImageUnits); _maxTextureSlots = Math.Min(_maxTextureSlots, maxCombinedTextureImageUnits); _maxVertexTextureSlots = Math.Min(_maxVertexTextureSlots, maxCombinedTextureImageUnits); // limit texture slots to Reach profile limit until we implement profile detection. _maxTextureSlots = Math.Min(_maxTextureSlots, 16); _maxVertexTextureSlots = Math.Min(_maxTextureSlots, 0); // disable vertex textures until we implement it in WebGL. int maxVertexAttribs; GL.GetInteger(GetParamName.MaxVertexAttribs, out maxVertexAttribs); GL.CheckGLError(); _maxVertexBufferSlots = (profile >= GraphicsProfile.FL10_1) ? 32 : 16; _maxVertexBufferSlots = Math.Min(_maxVertexBufferSlots, maxVertexAttribs); SupportsInstancing = GL.VertexAttribDivisor != null; SupportsBaseIndexInstancing = GL.DrawElementsInstancedBaseInstance != null; #if GLES SupportsSeparateBlendStates = false; #elif DESKTOPGL SupportsSeparateBlendStates = version >= new GLVersion(4,0) || GL.Extensions.Contains("GL_ARB_draw_buffers_blend"); #endif SupportsBaseVertex = version >= new GLVersion(3,2) || GL.Extensions.Contains("GL_ARB_draw_elements_base_vertex"); SupportsDrawRangeElements = (GL.BoundApi == OGL.RenderApi.GL && version >= new GLVersion(2, 0)) || (GL.BoundApi == OGL.RenderApi.ES && version >= new GLVersion(3, 0)); SupportsMapBufferRange = (GL.BoundApi == OGL.RenderApi.GL && version >= new GLVersion(2, 0)) || (GL.BoundApi == OGL.RenderApi.ES && version >= new GLVersion(3, 0)); GL.GetInteger(GetParamName.MaxDrawBuffers, out _maxDrawBuffers); GL.CheckGLError(); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteGraphicsContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; #if ANDROID //FromStream //using Android.Graphics; #endif #if IOS || TVOS //FromStream using UIKit; using CoreGraphics; using Foundation; #endif namespace Microsoft.Xna.Platform.Graphics { internal abstract class ConcreteGraphicsContextGL : GraphicsContextStrategy { private DrawBufferMode[] _drawBuffers; // Keeps track of last applied state to avoid redundant OpenGL calls internal BlendState _lastBlendState = new BlendState(); internal bool _lastBlendEnable = false; internal DepthStencilState _lastDepthStencilState = new DepthStencilState(); internal RasterizerState _lastRasterizerState = new RasterizerState(); internal ShaderProgram _shaderProgram = null; private Vector4 _posFixup; internal BufferBindingInfo[] _bufferBindingInfos; private int _activeBufferBindingInfosCount; internal bool[] _newEnabledVertexAttributes; private readonly HashSet _enabledVertexAttributesSet = new HashSet(); private int _lastVertexAttribs; // 0 = dirty, 1 = last set by PlatformApplyVertexBuffers, 2 = last set by PlatformApplyUserVertexData // Keeps track of last applied state to avoid redundant OpenGL calls private Vector4 _lastClearColor = Vector4.Zero; private float _lastClearDepth = 1.0f; private int _lastClearStencil = 0; private DepthStencilState _clearDepthStencilState = new DepthStencilState { StencilEnable = true }; // FBO cache, we create 1 FBO per RenderTargetBinding combination internal Dictionary _glFramebuffers = new Dictionary(new RenderTargetBindingArrayComparer()); // FBO cache used to resolve MSAA rendertargets, we create 1 FBO per RenderTargetBinding combination internal Dictionary _glResolveFramebuffers = new Dictionary(new RenderTargetBindingArrayComparer()); internal bool _supportsInvalidateFramebuffer; internal bool _supportsBlitFramebuffer; internal bool FramebufferRequireFlippedY { get { return (base.RenderTargetCount > 0 && !(CurrentRenderTargetBindings[0].RenderTarget is RenderTargetSwapChain)); } } internal GLVersion _glVersion; public override Viewport Viewport { get { return base.Viewport; } set { base.Viewport = value; PlatformApplyViewport(); } } internal OGL GL { get { return OGL.Current; } } internal ConcreteGraphicsContextGL(GraphicsContext context) : base(context) { } public override void PlatformSetup() { this._newEnabledVertexAttributes = new bool[base.Capabilities.MaxVertexBufferSlots]; if (!((ConcreteGraphicsCapabilities)base.Capabilities).SupportsFramebufferObjectARB && !((ConcreteGraphicsCapabilities)base.Capabilities).SupportsFramebufferObjectEXT) { throw new PlatformNotSupportedException( "GraphicsDevice requires either ARB_framebuffer_object or EXT_framebuffer_object."); } this._supportsBlitFramebuffer = GL.BlitFramebuffer != null; this._supportsInvalidateFramebuffer = GL.InvalidateFramebuffer != null; this._bufferBindingInfos = new BufferBindingInfo[base.Capabilities.MaxVertexBufferSlots]; for (int i = 0; i < this._bufferBindingInfos.Length; i++) this._bufferBindingInfos[i] = new BufferBindingInfo(null, null, IntPtr.Zero, 0); // Force resetting states ((IPlatformBlendState)base._actualBlendState).GetStrategy().PlatformApplyState((ConcreteGraphicsContextGL)this, true); ((IPlatformDepthStencilState)base._actualDepthStencilState).GetStrategy().PlatformApplyState((ConcreteGraphicsContextGL)this, true); ((IPlatformRasterizerState)base._actualRasterizerState).GetStrategy().PlatformApplyState((ConcreteGraphicsContextGL)this, true); // Initialize draw buffer attachment array this._drawBuffers = new DrawBufferMode[((ConcreteGraphicsCapabilities)base.Capabilities).MaxDrawBuffers]; for (int i = 0; i < this._drawBuffers.Length; i++) this._drawBuffers[i] = (DrawBufferMode)(DrawBufferMode.ColorAttachment0 + i); } protected int ManagedThreadId() { #if NET6_0_OR_GREATER || NETSTANDARD2_0 return Environment.CurrentManagedThreadId; #else return System.Threading.Thread.CurrentThread.ManagedThreadId; #endif } /// /// Throws an exception if the code is not currently running on the current thread. /// /// Thrown if the code is not currently running on the current thread. internal abstract void EnsureContextCurrentThread(); public abstract void BindDisposeContext(); public abstract void UnbindDisposeContext(); /// /// true if the SharedContext is succesfully bound to the thread; /// false if MainContext is allready bound to the current thread. /// /// /// Call immediately after completing all Context operations. /// Nested calls to binding or unbinding methods are not supported. /// public abstract bool BindSharedContext(); public abstract void UnbindSharedContext(); public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { // TODO: We need to figure out how to detect if we have a // depth stencil buffer or not, and clear options relating // to them if not attached. // Unlike with XNA and DirectX... GL.Clear() obeys several // different render states: // // - The color write flags. // - The scissor rectangle. // - The depth/stencil state. // // So overwrite these states with what is needed to perform // the clear correctly and restore it afterwards. // DepthStencilState prevDepthStencilState = this.DepthStencilState; BlendState prevBlendState = this.BlendState; // DepthStencilState.Default has the Stencil Test disabled; // make sure stencil test is enabled before we clear since // some drivers won't clear with stencil test disabled this.DepthStencilState = _clearDepthStencilState; this.BlendState = BlendState.Opaque; PlatformApplyState(); if (_lastRasterizerState.ScissorTestEnable) { GL.Disable(EnableCap.ScissorTest); GL.CheckGLError(); _lastRasterizerState.ScissorTestEnable = false; _rasterizerStateDirty = true; } ClearBufferMask bufferMask = 0; if ((options & ClearOptions.Target) == ClearOptions.Target) { if (color != _lastClearColor) { GL.ClearColor(color.X, color.Y, color.Z, color.W); GL.CheckGLError(); _lastClearColor = color; } bufferMask = bufferMask | ClearBufferMask.ColorBufferBit; } if ((options & ClearOptions.Stencil) == ClearOptions.Stencil) { if (stencil != _lastClearStencil) { GL.ClearStencil(stencil); GL.CheckGLError(); _lastClearStencil = stencil; } bufferMask = bufferMask | ClearBufferMask.StencilBufferBit; } if ((options & ClearOptions.DepthBuffer) == ClearOptions.DepthBuffer) { if (depth != _lastClearDepth) { GL.ClearDepth(depth); GL.CheckGLError(); _lastClearDepth = depth; } bufferMask = bufferMask | ClearBufferMask.DepthBufferBit; } #if IOS || TVOS if (GL.CheckFramebufferStatus(FramebufferTarget.FramebufferExt) == FramebufferErrorCode.FramebufferComplete) { #endif GL.Clear(bufferMask); GL.CheckGLError(); #if IOS || TVOS } #endif base.Metrics_AddClearCount(); // Restore the previous render state. DepthStencilState = prevDepthStencilState; BlendState = prevBlendState; } private void PlatformApplyState() { this.EnsureContextCurrentThread(); { PlatformApplyBlend(); } if (_depthStencilStateDirty) { ((IPlatformDepthStencilState)_actualDepthStencilState).GetStrategy().PlatformApplyState(this); _depthStencilStateDirty = false; } if (_rasterizerStateDirty) { ((IPlatformRasterizerState)_actualRasterizerState).GetStrategy().PlatformApplyState(this); _rasterizerStateDirty = false; } if (_scissorRectangleDirty) { PlatformApplyScissorRectangle(); _scissorRectangleDirty = false; } } private void PlatformApplyBlend() { if (_blendStateDirty) { ((IPlatformBlendState)_actualBlendState).GetStrategy().PlatformApplyState(this); _blendStateDirty = false; } if (_blendFactorDirty) { GL.BlendColor( this.BlendFactor.R/255.0f, this.BlendFactor.G/255.0f, this.BlendFactor.B/255.0f, this.BlendFactor.A/255.0f); GL.CheckGLError(); _blendFactorDirty = false; } } private void PlatformApplyScissorRectangle() { if (this.FramebufferRequireFlippedY) { GL.Scissor(_scissorRectangle.X, _scissorRectangle.Y, _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } else if (this.IsRenderTargetBound) { int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height; GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } else { int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight; GL.Scissor(_scissorRectangle.X, backBufferHeight - (_scissorRectangle.Y + _scissorRectangle.Height), _scissorRectangle.Width, _scissorRectangle.Height); GL.CheckGLError(); } _scissorRectangleDirty = false; } internal void PlatformApplyViewport() { if (this.FramebufferRequireFlippedY) { GL.Viewport(_viewport.X, _viewport.Y, _viewport.Width, _viewport.Height); GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } else if (this.IsRenderTargetBound) { int backBufferHeight = ((IRenderTarget)CurrentRenderTargetBindings[0].RenderTarget).Height; GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height); GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } else { int backBufferHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight; GL.Viewport(_viewport.X, backBufferHeight - (_viewport.Y + _viewport.Height), _viewport.Width, _viewport.Height); GL.LogGLError("GraphicsDevice.Viewport_set() GL.Viewport"); } GL.DepthRange(_viewport.MinDepth, _viewport.MaxDepth); GL.LogGLError("GraphicsDevice.Viewport_set() GL.DepthRange"); // In OpenGL we have to re-apply the special "_posFixup" // vertex shader uniform if the viewport changes. _vertexShaderDirty = true; } private void PlatformApplyIndexBuffer() { if (_indexBufferDirty) { GL.BindBuffer(BufferTarget.ElementArrayBuffer, ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().GLIndexBuffer); GL.CheckGLError(); _indexBufferDirty = false; } } private void PlatformApplyShaders() { ConcreteVertexShader cvertexShader = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); ConcretePixelShader cpixelShader = ((IPlatformShader)this.PixelShader).Strategy.ToConcrete(); if (_vertexShaderDirty || _pixelShaderDirty) { ActivateShaderProgram(cvertexShader, cpixelShader); ApplyPosFixup(_shaderProgram); if (_vertexShaderDirty) { base.Metrics_AddVertexShaderCount(); } if (_pixelShaderDirty) { base.Metrics_AddPixelShaderCount(); } _vertexShaderDirty = false; _pixelShaderDirty = false; } // Apply Constant Buffers PlatformApplyConstantBuffers(cvertexShader, _shaderProgram, ((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.ToConcrete()); PlatformApplyConstantBuffers(cpixelShader, _shaderProgram, ((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.ToConcrete()); // Apply Shader Texture and Samplers PlatformApplyTexturesAndSamplers(cvertexShader, ((IPlatformTextureCollection)this.VertexTextures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.ToConcrete()); PlatformApplyTexturesAndSamplers(cpixelShader, ((IPlatformTextureCollection)this.Textures).Strategy.ToConcrete(), ((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.ToConcrete()); } private void PlatformApplyConstantBuffers(ConcreteShader shaderStrategy, ShaderProgram shaderProgram, ConcreteConstantBufferCollection cconstantBufferCollection) { uint validMask = cconstantBufferCollection.InternalValid; for (int slot = 0; validMask != 0 && slot < cconstantBufferCollection.Length; slot++) { uint mask = ((uint)1) << slot; ConstantBuffer constantBuffer = cconstantBufferCollection[slot]; if (constantBuffer != null && !constantBuffer.IsDisposed) { ConcreteConstantBuffer constantBufferStrategy = ((IPlatformConstantBuffer)constantBuffer).Strategy.ToConcrete(); constantBufferStrategy.PlatformApply(this, shaderProgram, slot); } // clear buffer bit validMask &= ~mask; } } private void PlatformApplyTexturesAndSamplers(ConcreteShader cshader, ConcreteTextureCollection ctextureCollection, ConcreteSamplerStateCollection csamplerStateCollection) { int texturesCount = ctextureCollection.Length; // Apply Textures for (int slot = 0; ctextureCollection.InternalDirty != 0 && slot < texturesCount; slot++) { uint mask = ((uint)1) << slot; if ((ctextureCollection.InternalDirty & mask) != 0) { Texture texture = ctextureCollection[slot]; if (texture != null) { ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy(); // Clear the previous binding if the target is different from the new one. TextureTarget prevTarget = ctextureCollection._targets[slot]; if (prevTarget != 0 && prevTarget != ctexture._glTarget) { GL.ActiveTexture(TextureUnit.Texture0 + slot); GL.CheckGLError(); GL.BindTexture(prevTarget, 0); ctextureCollection._targets[slot] = 0; GL.CheckGLError(); } GL.ActiveTexture(TextureUnit.Texture0 + slot); GL.CheckGLError(); ctextureCollection._targets[slot] = ctexture._glTarget; GL.BindTexture(ctexture._glTarget, ctexture._glTexture); GL.CheckGLError(); this.Metrics_AddTextureCount(); } else // (texture == null) { // Clear the previous binding if the target is different from the new one. TextureTarget prevTarget = ctextureCollection._targets[slot]; if (prevTarget != 0) { GL.ActiveTexture(TextureUnit.Texture0 + slot); GL.CheckGLError(); GL.BindTexture(prevTarget, 0); ctextureCollection._targets[slot] = 0; GL.CheckGLError(); } } // clear texture bit ctextureCollection.InternalDirty &= ~mask; } } // Check Samplers GraphicsProfile graphicsProfile = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.GraphicsProfile; if (graphicsProfile == GraphicsProfile.Reach) { for (int i = 0; i < cshader.Samplers.Length; i++) { int textureSlot = cshader.Samplers[i].textureSlot; int samplerSlot = cshader.Samplers[i].samplerSlot; Texture2D texture2D = ctextureCollection[textureSlot] as Texture2D; if (texture2D != null) { if (this.SamplerStates[samplerSlot].AddressU != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Width) || this.SamplerStates[samplerSlot].AddressV != TextureAddressMode.Clamp && !MathHelper.IsPowerOfTwo(texture2D.Height)) throw new NotSupportedException("Reach profile support only Clamp mode for non-power of two Textures."); } } } // Apply Samplers for (int slot = 0; slot < texturesCount; slot++) { Texture texture = ctextureCollection[slot]; if (texture != null) { ConcreteTexture ctexture = ((IPlatformTexture)texture).GetTextureStrategy(); SamplerState sampler = csamplerStateCollection.InternalActualSamplers[slot]; if (sampler != null) { if (sampler != ctexture._glLastSamplerState) { // TODO: Avoid doing this redundantly. // Merge the two loops 'Apply Textures' and 'Apply Samplers'. // Use information from 'cshader.Samplers' to find active samplers. GL.ActiveTexture(TextureUnit.Texture0 + slot); GL.CheckGLError(); // NOTE: We don't have to bind the texture here because it is already bound in the loop above. // GL.BindTexture(ctexture._glTarget, texture._glTexture); // GL.CheckGLError(); ConcreteSamplerState csamplerState = ((IPlatformSamplerState)sampler).GetStrategy(); csamplerState.PlatformApplyState(this, ctexture._glTarget, ctexture.LevelCount > 1); ctexture._glLastSamplerState = sampler; } } } } } /// /// Activates the Current Vertex/Pixel shader pair into a program. /// private unsafe void ActivateShaderProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader) { ConcreteGraphicsDevice deviceStrategy = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete(); // Lookup the shader program. ShaderProgram shaderProgram; int shaderProgramHash = (cvertexShader.GetHashCode() ^ cpixelShader.GetHashCode()); if (!deviceStrategy.ProgramCache.TryGetValue(shaderProgramHash, out shaderProgram)) { // the key does not exist so we need to link the programs shaderProgram = CreateProgram(cvertexShader, cpixelShader); deviceStrategy.ProgramCache.Add(shaderProgramHash, shaderProgram); } if (shaderProgram.Program == -1) return; // Set the new program if it has changed. if (_shaderProgram != shaderProgram) { GL.UseProgram(shaderProgram.Program); GL.CheckGLError(); _shaderProgram = shaderProgram; } } private void ApplyPosFixup(ShaderProgram shaderProgram) { int posFixupLoc = this.GetUniformLocation(shaderProgram, "posFixup"); if (posFixupLoc == -1) return; // Apply vertex shader fix: // The following two lines are appended to the end of vertex shaders // to account for rendering differences between OpenGL and DirectX: // // gl_Position.y = gl_Position.y * posFixup.y; // gl_Position.xy += posFixup.zw * gl_Position.ww; // // (the following paraphrased from wine, wined3d/state.c and wined3d/glsl_shader.c) // // - We need to flip along the y-axis in case of offscreen rendering. // - D3D coordinates refer to pixel centers while GL coordinates refer // to pixel corners. // - D3D has a top-left filling convention. We need to maintain this // even after the y-flip mentioned above. // In order to handle the last two points, we translate by // (63.0 / 128.0) / VPw and (63.0 / 128.0) / VPh. This is equivalent to // translating slightly less than half a pixel. We want the difference to // be large enough that it doesn't get lost due to rounding inside the // driver, but small enough to prevent it from interfering with any // anti-aliasing. // // OpenGL coordinates specify the center of the pixel while d3d coords specify // the corner. The offsets are stored in z and w in posFixup. posFixup.y contains // 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x // contains 1.0 to allow a mad. _posFixup.X = 1.0f; _posFixup.Y = 1.0f; if (!((IPlatformGraphicsContext)this.Context).DeviceStrategy.UseHalfPixelOffset) { _posFixup.Z = 0f; _posFixup.W = 0f; } else { _posFixup.Z = (63.0f/64.0f)/Viewport.Width; _posFixup.W = -(63.0f/64.0f)/Viewport.Height; } //If we have a render target bound (rendering offscreen) if (this.FramebufferRequireFlippedY) { //flip vertically _posFixup.Y = -_posFixup.Y; _posFixup.W = -_posFixup.W; } GL.Uniform4(posFixupLoc, _posFixup); GL.CheckGLError(); } private ShaderProgram CreateProgram(ConcreteVertexShader cvertexShader, ConcretePixelShader cpixelShader) { int program = GL.CreateProgram(); GL.CheckGLError(); int vertexShaderHandle = cvertexShader.ShaderHandle; GL.AttachShader(program, vertexShaderHandle); GL.CheckGLError(); int pixelShaderHandle = cpixelShader.ShaderHandle; GL.AttachShader(program, pixelShaderHandle); GL.CheckGLError(); //vertexShader.BindVertexAttributes(program); GL.LinkProgram(program); GL.CheckGLError(); int linkStatus; GL.GetProgram(program, GetProgramParameterName.LinkStatus, out linkStatus); GL.LogGLError("VertexShaderCache.Link(), GL.GetProgram"); if (linkStatus == (int)Bool.False) { string log = GL.GetProgramInfoLog(program); GL.DetachShader(program, vertexShaderHandle); GL.DetachShader(program, pixelShaderHandle); if (GL.IsProgram(program)) { GL.DeleteProgram(program); GL.CheckGLError(); } throw new InvalidOperationException("Unable to link effect program." + Environment.NewLine + log); } GL.UseProgram(program); GL.CheckGLError(); // Get Vertex AttributeLocations for (int i = 0; i < cvertexShader.Attributes.Length; i++) { int attribloc = GL.GetAttribLocation(program, cvertexShader.Attributes[i].name); GL.CheckGLError(); cvertexShader.Attributes[i].location = attribloc; } // Apply Pixel Sampler TextureUnits // Assign the texture unit index to the sampler uniforms. for (int i = 0; i < cpixelShader.Samplers.Length; i++) { int loc = GL.GetUniformLocation(program, cpixelShader.Samplers[i].GLsamplerName); GL.CheckGLError(); if (loc != -1) { GL.Uniform1(loc, cpixelShader.Samplers[i].textureSlot); GL.CheckGLError(); } } return new ShaderProgram(program); } internal int GetUniformLocation(ShaderProgram shaderProgram, string name) { int location; if (shaderProgram._uniformLocationCache.TryGetValue(name, out location)) return location; location = GL.GetUniformLocation(shaderProgram.Program, name); GL.CheckGLError(); shaderProgram._uniformLocationCache[name] = location; return location; } private void PlatformApplyVertexBuffers(int baseVertex) { ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); bool bindingsChanged = false; for (int slot = 0; slot < _vertexBuffers.Count; slot++) { VertexBufferBinding vertexBufferBinding = _vertexBuffers.Get(slot); VertexDeclaration vertexDeclaration = vertexBufferBinding.VertexBuffer.VertexDeclaration; int vertexStride = vertexDeclaration.VertexStride; IntPtr vertexOffset = (IntPtr)(vertexStride * (baseVertex + vertexBufferBinding.VertexOffset)); VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration); if (_lastVertexAttribs != 1 || _bufferBindingInfos[slot].VertexBuffer != vertexBufferBinding.VertexBuffer || _bufferBindingInfos[slot].VertexOffset != vertexOffset || _bufferBindingInfos[slot].InstanceFrequency != vertexBufferBinding.InstanceFrequency || !ReferenceEquals(_bufferBindingInfos[slot].AttributeInfo, vertexAttribInfo) || slot >= _activeBufferBindingInfosCount) { bindingsChanged = true; GL.BindBuffer(BufferTarget.ArrayBuffer, ((IPlatformVertexBuffer)vertexBufferBinding.VertexBuffer).Strategy.ToConcrete().GLVertexBuffer); GL.CheckGLError(); for (int e = 0; e < vertexAttribInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e]; GL.VertexAttribPointer(element.AttributeLocation, element.NumberOfElements, element.VertexAttribPointerType, element.Normalized, vertexStride, vertexOffset + element.Offset); GL.CheckGLError(); // only set the divisor if instancing is supported if (base.Capabilities.SupportsInstancing) { GL.VertexAttribDivisor(element.AttributeLocation, vertexBufferBinding.InstanceFrequency); GL.CheckGLError(); } else // If instancing is not supported, but InstanceFrequency of the buffer is not zero, throw an exception { if (vertexBufferBinding.InstanceFrequency > 0) throw new PlatformNotSupportedException("Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2."); } } _bufferBindingInfos[slot].VertexBuffer = vertexBufferBinding.VertexBuffer; _bufferBindingInfos[slot].AttributeInfo = vertexAttribInfo; _bufferBindingInfos[slot].VertexOffset = vertexOffset; _bufferBindingInfos[slot].InstanceFrequency = vertexBufferBinding.InstanceFrequency; } } if (bindingsChanged) { for (int eva = 0; eva < _newEnabledVertexAttributes.Length; eva++) _newEnabledVertexAttributes[eva] = false; for (int slot = 0; slot < _vertexBuffers.Count; slot++) { for (int e = 0; e < _bufferBindingInfos[slot].AttributeInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = _bufferBindingInfos[slot].AttributeInfo.Elements[e]; _newEnabledVertexAttributes[element.AttributeLocation] = true; } } _activeBufferBindingInfosCount = _vertexBuffers.Count; } // SetVertexAttributeArray if (bindingsChanged || _lastVertexAttribs != 1) { for (int x = 0; x < _newEnabledVertexAttributes.Length; x++) { if (_newEnabledVertexAttributes[x] == true) { if (_enabledVertexAttributesSet.Add(x)) { GL.EnableVertexAttribArray(x); GL.CheckGLError(); } } else // (_newEnabledVertexAttributes[x] == false) { if (_enabledVertexAttributesSet.Remove(x)) { GL.DisableVertexAttribArray(x); GL.CheckGLError(); } } } } _lastVertexAttribs = 1; } internal void PlatformApplyUserVertexData(VertexDeclaration vertexDeclaration, IntPtr baseVertex) { ConcreteVertexShader vertexShaderStrategy = ((IPlatformShader)this.VertexShader).Strategy.ToConcrete(); int vertexStride = vertexDeclaration.VertexStride; IntPtr vertexOffset = baseVertex; VertexDeclarationAttributeInfo vertexAttribInfo = vertexShaderStrategy.GetVertexAttribInfo(this, vertexDeclaration); for (int e = 0; e < vertexAttribInfo.Elements.Count; e++) { VertexDeclarationAttributeInfoElement element = vertexAttribInfo.Elements[e]; GL.VertexAttribPointer(element.AttributeLocation, element.NumberOfElements, element.VertexAttribPointerType, element.Normalized, vertexStride, vertexOffset + element.Offset); GL.CheckGLError(); #if DESKTOPGL if (base.Capabilities.SupportsInstancing) { GL.VertexAttribDivisor(element.AttributeLocation, 0); GL.CheckGLError(); } #endif } // SetVertexAttributeArray { for (int x = 0; x < vertexAttribInfo.EnabledAttributes.Length; x++) { if (vertexAttribInfo.EnabledAttributes[x] == true) { if (_enabledVertexAttributesSet.Add(x)) { GL.EnableVertexAttribArray(x); GL.CheckGLError(); } } else // (vertexAttribInfo.EnabledAttributes[x] == false) { if (_enabledVertexAttributesSet.Remove(x)) { GL.DisableVertexAttribArray(x); GL.CheckGLError(); } } } } _lastVertexAttribs = 2; } private static GLPrimitiveType PrimitiveTypeGL(PrimitiveType primitiveType) { switch (primitiveType) { case PrimitiveType.PointList: return GLPrimitiveType.Points; case PrimitiveType.LineList: return GLPrimitiveType.Lines; case PrimitiveType.LineStrip: return GLPrimitiveType.LineStrip; case PrimitiveType.TriangleList: return GLPrimitiveType.Triangles; case PrimitiveType.TriangleStrip: return GLPrimitiveType.TriangleStrip; default: throw new ArgumentException(); } } public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount) { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); PlatformApplyVertexBuffers(0); if (vertexStart < 0) vertexStart = 0; GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), vertexStart, vertexCount); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); if (((ConcreteGraphicsCapabilities)this.Capabilities).SupportsBaseVertex) { PlatformApplyVertexBuffers(0); GL.DrawElementsBaseVertex(target, indexElementCount, indexElementType, indexOffsetInBytes, baseVertex); GL.CheckGLError(); } else { PlatformApplyVertexBuffers(baseVertex); GL.DrawElements(target, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); } base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); if (baseVertex > 0 && ((ConcreteGraphicsCapabilities)this.Capabilities).SupportsBaseVertex) { PlatformApplyVertexBuffers(0); GL.DrawRangeElementsBaseVertex(target, minVertexIndex, minVertexIndex + numVertices - 1, indexElementCount, indexElementType, indexOffsetInBytes, baseVertex); GL.CheckGLError(); } else if (((ConcreteGraphicsCapabilities)this.Capabilities).SupportsDrawRangeElements) { PlatformApplyVertexBuffers(baseVertex); GL.DrawRangeElements(target, minVertexIndex, minVertexIndex + numVertices - 1, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); } else { PlatformApplyVertexBuffers(baseVertex); GL.DrawElements(target, indexElementCount, indexElementType, indexOffsetInBytes); GL.CheckGLError(); } base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { if (!base.Capabilities.SupportsInstancing) throw new PlatformNotSupportedException("Instanced geometry drawing requires at least OpenGL 3.2 or GLES 3.2."); PlatformApplyState(); PlatformApplyIndexBuffer(); PlatformApplyShaders(); DrawElementsType indexElementType = ((IPlatformIndexBuffer)Indices).Strategy.ToConcrete().DrawElementsType; IntPtr indexOffsetInBytes = (IntPtr)(startIndex * ((IPlatformIndexBuffer)Indices).Strategy.ElementSizeInBytes); int indexElementCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); GLPrimitiveType target = ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType); if (baseInstance > 0) { if (!base.Capabilities.SupportsBaseIndexInstancing) throw new PlatformNotSupportedException("Instanced geometry drawing with base instance requires at least OpenGL 4.2."); PlatformApplyVertexBuffers(baseVertex); GL.DrawElementsInstancedBaseInstance(target, indexElementCount, indexElementType, indexOffsetInBytes, instanceCount, baseInstance); } else { PlatformApplyVertexBuffers(baseVertex); GL.DrawElementsInstanced(target, indexElementCount, indexElementType, indexOffsetInBytes, instanceCount); } GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount * instanceCount); } public unsafe override void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // Unbind current VBOs. GL.BindBuffer(BufferTarget.ArrayBuffer, 0); GL.CheckGLError(); _vertexBuffersDirty = true; fixed (T* pVertexData = &vertexData[0]) { IntPtr vertexAddr = (IntPtr)pVertexData; // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration, vertexAddr); //Draw GL.DrawArrays(ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), vertexOffset, vertexCount); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public unsafe override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // Unbind current VBOs. GL.BindBuffer(BufferTarget.ArrayBuffer, 0); GL.CheckGLError(); _vertexBuffersDirty = true; GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0); GL.CheckGLError(); _indexBufferDirty = true; fixed (T* pVertexData = &vertexData[0]) fixed (short* pIndexData = &indexData[0]) { IntPtr vertexAddr = (IntPtr)pVertexData; vertexAddr = vertexAddr + vertexDeclaration.VertexStride * vertexOffset; // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration, vertexAddr); //Draw GL.DrawElements( ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount), DrawElementsType.UnsignedShort, (IntPtr)pIndexData + (indexOffset * sizeof(short))); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public unsafe override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { PlatformApplyState(); //PlatformApplyIndexBuffer(); PlatformApplyShaders(); // Unbind current VBOs. GL.BindBuffer(BufferTarget.ArrayBuffer, 0); GL.CheckGLError(); _vertexBuffersDirty = true; GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0); GL.CheckGLError(); _indexBufferDirty = true; fixed (T* pVertexData = &vertexData[0]) fixed (int* pIndexData = &indexData[0]) { IntPtr vertexAddr = (IntPtr)pVertexData; vertexAddr = vertexAddr + vertexDeclaration.VertexStride * vertexOffset; // Setup the vertex declaration to point at the VB data. PlatformApplyUserVertexData(vertexDeclaration, vertexAddr); //Draw GL.DrawElements( ConcreteGraphicsContext.PrimitiveTypeGL(primitiveType), GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount), DrawElementsType.UnsignedInt, (IntPtr)pIndexData + (indexOffset * sizeof(int))); GL.CheckGLError(); base.Metrics_AddDrawCount(); base.Metrics_AddPrimitiveCount(primitiveCount); } } public override void Flush() { GL.Flush(); } public override OcclusionQueryStrategy CreateOcclusionQueryStrategy() { return new ConcreteOcclusionQuery(this); } public override GraphicsDebugStrategy CreateGraphicsDebugStrategy() { return new ConcreteGraphicsDebug(this); } public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity) { return new ConcreteConstantBufferCollection(capacity); } public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity) { return new ConcreteTextureCollection(this, capacity); } public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity) { return new ConcreteSamplerStateCollection(this, capacity); } public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) { return new ConcreteTexture2D(this, width, height, mipMap, format, arraySize, shared); } public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format) { return new ConcreteTexture3D(this, width, height, depth, mipMap, format); } public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format) { return new ConcreteTextureCube(this, size, mipMap, format); } public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget2D(this, width, height, mipMap, arraySize, shared, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount, surfaceType: TextureSurfaceType.RenderTarget); } public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTarget3D(this, width, height, depth, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { return new ConcreteRenderTargetCube(this, size, mipMap, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount); } public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream) { return new ConcreteTexture2D(this, stream); } public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats) { return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats); } public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source) { return new ConcreteBlendState(this, source); } public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source) { return new ConcreteDepthStencilState(this, source); } public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source) { return new ConcreteRasterizerState(this, source); } public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source) { return new ConcreteSamplerState(this, source); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } static readonly FramebufferAttachment[] InvalidateFramebufferAttachements = { //FramebufferAttachment.ColorAttachment0, FramebufferAttachment.DepthAttachment, FramebufferAttachment.StencilAttachment, }; protected override void PlatformResolveRenderTargets() { if (!this.IsRenderTargetBound) return; RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0]; IRenderTarget renderTarget = renderTargetBinding.RenderTarget as IRenderTarget; if (renderTarget.MultiSampleCount > 0) { int glResolveFramebuffer = 0; if (!_glResolveFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glResolveFramebuffer)) { glResolveFramebuffer = GL.GenFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, glResolveFramebuffer); GL.CheckGLError(); for (int i = 0; i < base.RenderTargetCount; i++) { IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IRenderTarget)base.CurrentRenderTargetBindings[i].RenderTarget).RenderTargetStrategy; FramebufferAttachment attachement = (FramebufferAttachment.ColorAttachment0 + i); TextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice); GL.FramebufferTexture2D(FramebufferTarget.DrawFramebuffer, attachement, target, renderTargetGL.GLTexture, 0); GL.CheckGLError(); } _glResolveFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glResolveFramebuffer); } else { GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, glResolveFramebuffer); GL.CheckGLError(); } // The only fragment operations which affect the resolve are the pixel ownership test, the scissor test, and dithering. if (_lastRasterizerState.ScissorTestEnable) { GL.Disable(EnableCap.ScissorTest); GL.CheckGLError(); } int glFramebuffer = _glFramebuffers[base.CurrentRenderTargetBindings]; GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, glFramebuffer); GL.CheckGLError(); for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTarget = renderTargetBinding.RenderTarget as IRenderTarget; GL.ReadBuffer(ReadBufferMode.ColorAttachment0 + i); GL.CheckGLError(); GL.DrawBuffer(DrawBufferMode.ColorAttachment0 + i); GL.CheckGLError(); Debug.Assert(this._supportsBlitFramebuffer); GL.BlitFramebuffer(0, 0, renderTarget.Width, renderTarget.Height, 0, 0, renderTarget.Width, renderTarget.Height, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest); GL.CheckGLError(); if (renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents && this._supportsInvalidateFramebuffer) { if (i == 0) { Debug.Assert(this._supportsInvalidateFramebuffer); GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer, InvalidateFramebufferAttachements.Length, InvalidateFramebufferAttachements); GL.CheckGLError(); } } } if (_lastRasterizerState.ScissorTestEnable) { GL.Enable(EnableCap.ScissorTest); GL.CheckGLError(); } } for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTarget = renderTargetBinding.RenderTarget as RenderTarget2D; if (renderTarget != null) { ((IRenderTarget)renderTarget).RenderTargetStrategy.ResolveSubresource(this); } if (renderTargetBinding.RenderTarget.LevelCount > 1) { IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy(); GL.BindTexture(renderTargetGL.GLTarget, renderTargetGL.GLTexture); GL.CheckGLError(); GL.GenerateMipmap(renderTargetGL.GLTarget); GL.CheckGLError(); } } } protected override void PlatformApplyDefaultRenderTarget() { GL.BindFramebuffer(FramebufferTarget.Framebuffer,((IPlatformGraphicsContext)this.Context).DeviceStrategy.ToConcrete()._glDefaultFramebuffer); GL.CheckGLError(); // Reset the raster state because we flip vertices // when rendering offscreen and hence the cull direction. _rasterizerStateDirty = true; // Textures will need to be rebound to render correctly in the new render target. ((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); } protected override IRenderTarget PlatformApplyRenderTargets() { int glFramebuffer = 0; if (!_glFramebuffers.TryGetValue(base.CurrentRenderTargetBindings, out glFramebuffer)) { glFramebuffer = GL.GenFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, glFramebuffer); GL.CheckGLError(); RenderTargetBinding renderTargetBinding = base.CurrentRenderTargetBindings[0]; IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy(); GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.StencilAttachment, RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer); GL.CheckGLError(); for (int i = 0; i < base.RenderTargetCount; i++) { renderTargetBinding = base.CurrentRenderTargetBindings[i]; renderTargetGL = ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy() as IRenderTargetStrategyGL; FramebufferAttachment attachement = (FramebufferAttachment.ColorAttachment0 + i); if (renderTargetGL.GLColorBuffer != 0) { GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, attachement, RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer); GL.CheckGLError(); } else { TextureTarget target = renderTargetGL.GetFramebufferTarget(renderTargetBinding.ArraySlice); GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, attachement, target, renderTargetGL.GLTexture, 0); GL.CheckGLError(); } } CheckFramebufferStatus(); _glFramebuffers.Add((RenderTargetBinding[])base.CurrentRenderTargetBindings.Clone(), glFramebuffer); } else { GL.BindFramebuffer(FramebufferTarget.Framebuffer, glFramebuffer); GL.CheckGLError(); } #if DESKTOPGL GL.DrawBuffers(base.RenderTargetCount, this.ToConcrete()._drawBuffers); #endif #if GLES if (GL.DrawBuffers!=null) GL.DrawBuffers(base.RenderTargetCount, this.ToConcrete()._drawBuffers); #endif // Reset the raster state because we flip vertices // when rendering offscreen and hence the cull direction. _rasterizerStateDirty = true; // Textures will need to be rebound to render correctly in the new render target. ((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); return base.CurrentRenderTargetBindings[0].RenderTarget as IRenderTarget; } internal void PlatformUnbindRenderTarget(IRenderTargetStrategyGL renderTargetStrategy) { var bindingsToDelete = new List(); foreach (RenderTargetBinding[] bindings in _glFramebuffers.Keys) { foreach (RenderTargetBinding renderTargetBinding in bindings) { if (renderTargetBinding.RenderTarget != null && ((IPlatformTexture)renderTargetBinding.RenderTarget).GetTextureStrategy() == renderTargetStrategy) { bindingsToDelete.Add(bindings); break; } } } foreach (RenderTargetBinding[] bindings in bindingsToDelete) { int fbo = 0; if (_glFramebuffers.TryGetValue(bindings, out fbo)) { GL.DeleteFramebuffer(fbo); GL.CheckGLError(); _glFramebuffers.Remove(bindings); } if (_glResolveFramebuffers.TryGetValue(bindings, out fbo)) { GL.DeleteFramebuffer(fbo); GL.CheckGLError(); _glResolveFramebuffers.Remove(bindings); } } } [Conditional("DEBUG")] public void CheckFramebufferStatus() { FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); switch (status) { case FramebufferErrorCode.FramebufferComplete: return; case FramebufferErrorCode.FramebufferIncompleteAttachment: throw new InvalidOperationException("Not all framebuffer attachment points are framebuffer attachment complete."); case FramebufferErrorCode.FramebufferIncompleteMissingAttachment: throw new InvalidOperationException("No images are attached to the framebuffer."); case FramebufferErrorCode.FramebufferUnsupported: throw new InvalidOperationException("The combination of internal formats of the attached images violates an implementation-dependent set of restrictions."); case FramebufferErrorCode.FramebufferIncompleteMultisample: throw new InvalidOperationException("Not all attached images have the same number of samples."); default: throw new InvalidOperationException("Framebuffer Incomplete."); } } internal void Cardboard_ResetContext() { // invalidate clearColor _lastClearColor.X = float.MaxValue; _lastClearDepth = float.MaxValue; _lastClearStencil = int.MaxValue; // clear states _depthStencilStateDirty = true; _rasterizerStateDirty = true; // clear states (GL) _lastRasterizerState = new RasterizerState(); _lastDepthStencilState = new DepthStencilState(); _lastBlendState = new BlendState(); _lastBlendEnable = false; //invalidate scissor _scissorRectangleDirty = true; //invalidate vertex and index buffer _lastVertexAttribs = 0; _indexBufferDirty = true; //invalidate shaders _vertexShaderDirty = true; _pixelShaderDirty = true; _shaderProgram = null; //invalidate VertexAttributes _enabledVertexAttributesSet.Clear(); //invalidate textures ((IPlatformTextureCollection)this.Textures).Strategy.Clear(); //_blendStateDirty = true; //_blendFactorDirty = true; //_vertexBuffersDirty = true; //_vertexShader = null; //_pixelShader = null; //((IPlatformConstantBufferCollection)_vertexConstantBuffers).Strategy.Dirty(); //((IPlatformConstantBufferCollection)_pixelConstantBuffers).Strategy.Dirty(); //ConcreteConstantBuffer._lastConstantBufferApplied = null; //((IPlatformTextureCollection)this.Textures).Strategy.Dirty(); //((IPlatformTextureCollection)this.VertexTextures).Strategy.Dirty(); //((IPlatformSamplerStateCollection)this.SamplerStates).Strategy.Dirty(); //((IPlatformSamplerStateCollection)this.VertexSamplerStates).Strategy.Dirty(); } } internal class OpenGLException : Exception { public OpenGLException(string message) : base(message) { } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteGraphicsDebug.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy { internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { } public override bool TryDequeueMessage(out GraphicsDebugMessage message) { message = null; return false; } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteGraphicsDevice.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal abstract class ConcreteGraphicsDeviceGL : GraphicsDeviceStrategy { private readonly Dictionary _programCache = new Dictionary(); internal Dictionary ProgramCache { get { return _programCache; } } internal int _glDefaultFramebuffer = 0; internal ConcreteGraphicsDeviceGL(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } public override void Reset() { PlatformReset(this.PresentationParameters); } public override void Reset(PresentationParameters presentationParameters) { PlatformReset(presentationParameters); } private void PlatformReset(PresentationParameters presentationParameters) { this.PresentationParameters = presentationParameters; #if DESKTOPGL ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().MakeCurrent(this.PresentationParameters.DeviceWindowHandle); int swapInterval = ConcreteGraphicsContext.ToGLSwapInterval(this.PresentationParameters.PresentationInterval); Sdl.Current.OpenGL.SetSwapInterval(swapInterval); #endif ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null); } public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle) { throw new NotImplementedException(); } public unsafe override void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) { bool isSharedContext = ((IPlatformGraphicsContext)this.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().GL; Rectangle srcRect = rect ?? new Rectangle(0, 0, PresentationParameters.BackBufferWidth, PresentationParameters.BackBufferHeight); int fSize = PresentationParameters.BackBufferFormat.GetSize(); int tSize = sizeof(T); int flippedY = PresentationParameters.BackBufferHeight - srcRect.Y - srcRect.Height; fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; GL.ReadPixels(srcRect.X, flippedY, srcRect.Width, srcRect.Height, PixelFormat.Rgba, PixelType.UnsignedByte, dataPtr); // buffer is returned upside down, so we swap the rows around when copying over int rowSize = srcRect.Width * fSize / tSize; T[] row = new T[rowSize]; for (int dy = 0; dy < srcRect.Height / 2; dy++) { int topRow = startIndex + dy * rowSize; int bottomRow = startIndex + (srcRect.Height - dy - 1) * rowSize; // copy the bottom row to buffer Array.Copy(data, bottomRow, row, 0, rowSize); // copy top row to bottom row Array.Copy(data, topRow, data, bottomRow, rowSize); // copy buffer to top row Array.Copy(row, 0, data, topRow, rowSize); elementCount -= rowSize; } } } finally { ((IPlatformGraphicsContext)this.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public override System.Reflection.Assembly ConcreteAssembly { get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); } } protected override void PlatformInitialize() { } private void ClearProgramCache() { var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().GL; foreach (ShaderProgram shaderProgram in ProgramCache.Values) { if (GL.IsProgram(shaderProgram.Program)) { GL.DeleteProgram(shaderProgram.Program); GL.CheckGLError(); } } ProgramCache.Clear(); } internal int GetMaxMultiSampleCount(SurfaceFormat surfaceFormat) { switch (surfaceFormat) { case SurfaceFormat.Color: case SurfaceFormat.Bgr565: case SurfaceFormat.Bgra4444: case SurfaceFormat.Bgra5551: case SurfaceFormat.Single: case SurfaceFormat.HalfSingle: case SurfaceFormat.Vector2: case SurfaceFormat.HalfVector2: case SurfaceFormat.Vector4: case SurfaceFormat.HalfVector4: // See: PlatformCreateRenderTarget(...) // for the supported surface types. break; default: return 0; } var contextStrategy = ((IPlatformGraphicsContext)this.MainContext).Strategy.ToConcrete(); var GL = contextStrategy.GL; if (!contextStrategy._supportsBlitFramebuffer || GL.RenderbufferStorageMultisample == null) return 0; int maxMultiSampleCount = 0; GL.GetInteger(GetPName.MaxSamples, out maxMultiSampleCount); return maxMultiSampleCount; } protected override void Dispose(bool disposing) { if (disposing) { } // Free all the cached shader programs. ClearProgramCache(); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteGraphicsFactory.cs ================================================ // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteGraphicsFactory : GraphicsFactory { public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy() { return new ConcreteGraphicsAdaptersProvider(); } public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters); } public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity) { return new SpriteBatcher(graphicsDevice, capacity); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteOcclusionQuery.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteOcclusionQuery : OcclusionQueryStrategy { private bool _inBeginEndPair; // true if Begin was called and End was not yet called. private bool _queryPerformed; // true if Begin+End were called at least once. private bool _isComplete; // true if the result is available in _pixelCount. private int _pixelCount; // The query result. private int _glQueryId = -1; public override int PixelCount { get { return _pixelCount; } } public override bool IsComplete { get { if (_isComplete) return true; if (!_queryPerformed || _inBeginEndPair) return false; return PlatformGetResult(); return _isComplete; } } internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { var GL = contextStrategy.ToConcrete().GL; _glQueryId = GL.GenQuery(); GL.CheckGLError(); } public override void PlatformBegin() { if (_inBeginEndPair) throw new InvalidOperationException("End() must be called before calling Begin() again."); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; _inBeginEndPair = true; _isComplete = false; GL.BeginQuery(QueryTarget.SamplesPassed, _glQueryId); GL.CheckGLError(); } public override void PlatformEnd() { if (!_inBeginEndPair) throw new InvalidOperationException("Begin() must be called before calling End()."); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; _inBeginEndPair = false; _queryPerformed = true; GL.EndQuery(QueryTarget.SamplesPassed); GL.CheckGLError(); } private bool PlatformGetResult() { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int resultReady = 0; GL.GetQueryObject(_glQueryId, GetQueryObjectParam.QueryResultAvailable, out resultReady); GL.CheckGLError(); if (resultReady == 0) { _pixelCount = 0; _isComplete = false; } else { GL.GetQueryObject(_glQueryId, GetQueryObjectParam.QueryResult, out _pixelCount); GL.CheckGLError(); _isComplete = true; } return _isComplete; } protected override void Dispose(bool disposing) { if (disposing) { } if (_glQueryId > -1) { if (!GraphicsDevice.IsDisposed) { _contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = _contextStrategy.ToConcrete().GL; GL.DeleteQuery(_glQueryId); GL.CheckGLError(); } finally { _contextStrategy.ToConcrete().UnbindDisposeContext(); } } _glQueryId = -1; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteRenderTarget2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, TextureSurfaceType surfaceType) : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; if (surfaceType == TextureSurfaceType.RenderTargetSwapChain) { // Texture will be created by the RenderTargetSwapChain. return; } var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared); PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, shared); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy int _glColorBuffer; int _glDepthBuffer; int _glStencilBuffer; #region IRenderTargetStrategyGL int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } int IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } int IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } int IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { if (arraySlice != 0) throw new NotImplementedException("arraySlice is not implemented for Texture2D"); return _glTarget; } #endregion IRenderTargetStrategyGL private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount, bool shared) { ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, width, height, mipMap, this.Format, preferredDepthFormat, multiSampleCount); } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteRenderTarget3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat); // If we don't need a depth buffer then we're done. if (preferredDepthFormat != DepthFormat.None) PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy int _glColorBuffer; int _glDepthBuffer; int _glStencilBuffer; #region IRenderTargetStrategyGL int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } int IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } int IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } int IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { if (arraySlice != 0) throw new NotImplementedException("arraySlice is not implemented for Texture2D"); return _glTarget; } #endregion IRenderTargetStrategyGL private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteRenderTargetCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy, IRenderTargetStrategyGL { private readonly DepthFormat _depthStencilFormat; internal int _multiSampleCount; private readonly RenderTargetUsage _renderTargetUsage; private bool _isContentLost; internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, size, mipMap, preferredSurfaceFormat, isRenderTarget: true) { this._renderTargetUsage = usage; this._depthStencilFormat = preferredDepthFormat; var GL = contextStrategy.ToConcrete().GL; int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat); PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, _multiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } } public int MultiSampleCount { get { return _multiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } } public bool IsContentLost { get { return _isContentLost; } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { if (this.MultiSampleCount > 1) { } } #endregion IRenderTargetStrategy int _glColorBuffer; int _glDepthBuffer; int _glStencilBuffer; #region IRenderTargetStrategyGL int IRenderTargetStrategyGL.GLTexture { get { return _glTexture; } } TextureTarget IRenderTargetStrategyGL.GLTarget { get { return _glTarget; } } int IRenderTargetStrategyGL.GLColorBuffer { get { return _glColorBuffer; } set { _glColorBuffer = value; } } int IRenderTargetStrategyGL.GLDepthBuffer { get { return _glDepthBuffer; } set { _glDepthBuffer = value; } } int IRenderTargetStrategyGL.GLStencilBuffer { get { return _glStencilBuffer; } set { _glStencilBuffer = value; } } TextureTarget IRenderTargetStrategyGL.GetFramebufferTarget(int arraySlice) { return TextureTarget.TextureCubeMapPositiveX + arraySlice; } #endregion IRenderTargetStrategyGL private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount) { ConcreteTexture.PlatformCreateRenderTarget((IRenderTargetStrategyGL)this, contextStrategy, this.Size, this.Size, mipMap, this.Format, preferredDepthFormat, multiSampleCount); } protected override void Dispose(bool disposing) { if (disposing) { } ConcreteTexture.PlatformDeleteRenderTarget((IRenderTargetStrategyGL)this, ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy); base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteRenderTargetSwapChain.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetSwapChain : ConcreteRenderTarget2D //, { internal IntPtr _glTextureHandle; internal PresentInterval _presentInterval; internal ConcreteRenderTargetSwapChain(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, RenderTargetUsage usage, IntPtr glTextureHandle, PresentInterval presentInterval, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) :base(contextStrategy, width, height, mipMap, 1, false, usage, preferredSurfaceFormat, preferredDepthFormat, preferredMultiSampleCount, TextureSurfaceType.RenderTargetSwapChain) { _glTextureHandle = glTextureHandle; _presentInterval = presentInterval; _glTarget = TextureTarget.Texture2D; ConcreteTexture.ToGLSurfaceFormat(preferredSurfaceFormat, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture); int maxMultiSampleCount = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy.ToConcrete().GetMaxMultiSampleCount(preferredSurfaceFormat); this._multiSampleCount = TextureHelpers.GetClampedMultiSampleCount(this.Format, preferredMultiSampleCount, maxMultiSampleCount); PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, false); PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, _multiSampleCount, false); } private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredSurfaceFormat, object shared) { var GL = contextStrategy.ToConcrete().GL; _glTarget = TextureTarget.Texture2D; _glTexture = _glTextureHandle.ToInt32(); TextureTarget colorTextureTarget = TextureTarget.Texture2D; GL.BindTexture(colorTextureTarget, _glTexture); GL.CheckGLError(); GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge); GL.CheckGLError(); GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); GL.CheckGLError(); GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.CheckGLError(); GL.TexParameteri(colorTextureTarget, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.CheckGLError(); GL.BindTexture(colorTextureTarget, 0); GL.CheckGLError(); } private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int multiSampleCount, object shared) { var GL = contextStrategy.ToConcrete().GL; IRenderTargetStrategyGL renderTargetGL = (IRenderTargetStrategyGL)this; if (multiSampleCount > 1) { RenderbufferStorage colorInternalFormat = RenderbufferStorage.RGBA8; renderTargetGL.GLColorBuffer = GL.GenRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer); GL.CheckGLError(); if (multiSampleCount > 0) { System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null); GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, colorInternalFormat, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, colorInternalFormat, width, height); GL.CheckGLError(); } } if (preferredDepthFormat != DepthFormat.None) { RenderbufferStorage depthInternalFormat = RenderbufferStorage.DepthComponent16; RenderbufferStorage stencilInternalFormat = (RenderbufferStorage)0; switch (preferredDepthFormat) { case DepthFormat.None: break; case DepthFormat.Depth16: depthInternalFormat = RenderbufferStorage.DepthComponent16; break; #if GLES case DepthFormat.Depth24: if (contextStrategy.Capabilities.SupportsDepth24) depthInternalFormat = RenderbufferStorage.DepthComponent24oes; else if (contextStrategy.Capabilities.SupportsDepthNonLinear) depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv; else depthInternalFormat = RenderbufferStorage.DepthComponent16; break; case DepthFormat.Depth24Stencil8: if (contextStrategy.Capabilities.SupportsPackedDepthStencil) depthInternalFormat = RenderbufferStorage.Depth24Stencil8oes; else { if (contextStrategy.Capabilities.SupportsDepth24) depthInternalFormat = RenderbufferStorage.DepthComponent24oes; else if (contextStrategy.Capabilities.SupportsDepthNonLinear) depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv; else depthInternalFormat = RenderbufferStorage.DepthComponent16; stencilInternalFormat = RenderbufferStorage.StencilIndex8; } break; #else case DepthFormat.Depth24: depthInternalFormat = RenderbufferStorage.DepthComponent24; break; case DepthFormat.Depth24Stencil8: depthInternalFormat = RenderbufferStorage.Depth24Stencil8; break; #endif default: throw new InvalidOperationException("preferredDepthFormat"); } if (depthInternalFormat != 0) { // Create depth buffer. renderTargetGL.GLDepthBuffer = GL.GenRenderbuffer(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); if (multiSampleCount > 1) { GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, depthInternalFormat, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, depthInternalFormat, width, height); GL.CheckGLError(); } GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0); GL.CheckGLError(); if (preferredDepthFormat == DepthFormat.Depth24Stencil8) { renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer; if (stencilInternalFormat != 0) { renderTargetGL.GLStencilBuffer = GL.GenRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer); GL.CheckGLError(); if (multiSampleCount > 1) { System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null); GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, stencilInternalFormat, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, stencilInternalFormat, width, height); GL.CheckGLError(); } } } // Create the frame buffer. //uint framebufferId = (uint)GL.GenFramebuffer(); //GL.BindFramebuffer(FramebufferTarget.Framebuffer, (int)framebufferId); //GL.CheckGLError(); //GL.FramebufferRenderbuffer( // FramebufferTarget.Framebuffer, // FramebufferAttachment.DepthAttachment, // RenderbufferTarget.Renderbuffer, // renderTargetGL.GLDepthBuffer); //GL.CheckGLError(); //GL.FramebufferTexture2D( // FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, _glTexture, 0); //GL.CheckGLError(); //FramebufferErrorCode renderFramebufferStatus = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); //GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); //GL.CheckGLError(); //if (renderFramebufferStatus != FramebufferErrorCode.FramebufferComplete) //{ // Console.WriteLine( // "Incomplete frame buffer object: {0}", // "" //GL.FrameBufferStatusString(renderFramebufferStatus) // ); // throw new Exception("Incomplete frame buffer"); //} //GL.DeleteFramebuffer((int)framebufferId); } } } public void Present() { lock (((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.SyncHandle) { throw new NotSupportedException(); } } static readonly FramebufferAttachment[] InvalidateFramebufferAttachements = { FramebufferAttachment.DepthAttachment, }; public override void ResolveSubresource(GraphicsContextStrategy contextStrategy) { var GL = contextStrategy.ToConcrete().GL; // Discard the depth buffer, so the tiler won't need to write it back out to memory. GL.InvalidateFramebuffer(FramebufferTarget.Framebuffer, 1, InvalidateFramebufferAttachements); GL.CheckGLError(); // We now let the resolve happen implicitly. // Using a multisampled SwapChainRenderTarget as a source Texture is not supported. //base.ResolveSubresource(contextStrategy); } protected override void Dispose(bool disposing) { if (disposing) { // ... } var contextStrategy = ((IPlatformGraphicsContext)this.GraphicsDeviceStrategy.MainContext).Strategy; contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = contextStrategy.ToConcrete().GL; IRenderTargetStrategyGL renderTargetGL = ((IRenderTargetStrategyGL)this); if (renderTargetGL.GLStencilBuffer != 0 && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer) { GL.DeleteRenderbuffer(renderTargetGL.GLStencilBuffer); GL.CheckGLError(); } if (renderTargetGL.GLDepthBuffer != 0) { GL.DeleteRenderbuffer(renderTargetGL.GLDepthBuffer); GL.CheckGLError(); } contextStrategy.ToConcrete().PlatformUnbindRenderTarget(renderTargetGL); } finally { contextStrategy.ToConcrete().UnbindDisposeContext(); } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteSamplerStateCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy { internal SamplerState[] InternalActualSamplers { get { return base._actualSamplers; } } internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { } public override SamplerState this[int index] { get { return base[index]; } set { base[index] = value; } } public override void Clear() { base.Clear(); } public override void Dirty() { base.Dirty(); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTexture.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy { private readonly GraphicsContextStrategy _contextStrategy; private readonly SurfaceFormat _format; private readonly int _levelCount; internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount) : base(contextStrategy) { this._contextStrategy = contextStrategy; this._format = format; this._levelCount = levelCount; } #region ITextureStrategy public SurfaceFormat Format { get { return _format; } } public int LevelCount { get { return _levelCount; } } #endregion ITextureStrategy internal int _glTexture = -1; internal TextureTarget _glTarget; internal TextureUnit _glTextureUnit = TextureUnit.Texture0; internal PixelInternalFormat _glInternalFormat; internal PixelFormat _glFormat; internal PixelType _glType; internal bool _glIsCompressedTexture; internal SamplerState _glLastSamplerState; internal static void ToGLSurfaceFormat(SurfaceFormat format, GraphicsContextStrategy contextStrategy, out PixelInternalFormat glInternalFormat, out PixelFormat glFormat, out PixelType glType, out bool glIsCompressedTexture) { var GL = contextStrategy.ToConcrete().GL; bool supportsSRgb = contextStrategy.Capabilities.SupportsSRgb; bool supportsS3tc = contextStrategy.Capabilities.SupportsS3tc; bool supportsPvrtc = contextStrategy.Capabilities.SupportsPvrtc; bool supportsEtc1 = contextStrategy.Capabilities.SupportsEtc1; bool supportsEtc2 = contextStrategy.Capabilities.SupportsEtc2; bool supportsAtitc = contextStrategy.Capabilities.SupportsAtitc; bool supportsFloat = contextStrategy.Capabilities.SupportsFloatTextures; bool supportsHalfFloat = contextStrategy.Capabilities.SupportsHalfFloatTextures; bool supportsNormalized = contextStrategy.Capabilities.SupportsNormalized; bool isGLES2 = GL.BoundApi == OGL.RenderApi.ES && ((ConcreteGraphicsContextGL)contextStrategy)._glVersion.Major == 2; switch (format) { case SurfaceFormat.Color: glInternalFormat = PixelInternalFormat.Rgba; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedByte; glIsCompressedTexture = false; break; case SurfaceFormat.ColorSRgb: if (!supportsSRgb) goto case SurfaceFormat.Color; glInternalFormat = PixelInternalFormat.Srgb; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedByte; glIsCompressedTexture = false; break; case SurfaceFormat.ColorSRgba: if (!supportsSRgb) goto case SurfaceFormat.Color; glInternalFormat = PixelInternalFormat.Srgba; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedByte; glIsCompressedTexture = false; break; case SurfaceFormat.Bgr565: glInternalFormat = PixelInternalFormat.Rgb; glFormat = PixelFormat.Rgb; glType = PixelType.UnsignedShort565; glIsCompressedTexture = false; break; case SurfaceFormat.Bgra4444: #if IOS || TVOS || ANDROID glInternalFormat = PixelInternalFormat.Rgba; #else glInternalFormat = PixelInternalFormat.Rgba4; #endif glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedShort4444; glIsCompressedTexture = false; break; case SurfaceFormat.Bgra5551: glInternalFormat = PixelInternalFormat.Rgba; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedShort5551; glIsCompressedTexture = false; break; case SurfaceFormat.Alpha8: glInternalFormat = PixelInternalFormat.Luminance; glFormat = PixelFormat.Luminance; glType = PixelType.UnsignedByte; glIsCompressedTexture = false; break; case SurfaceFormat.Dxt1: if (!supportsS3tc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbS3tcDxt1Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt1SRgb: if (!supportsSRgb) goto case SurfaceFormat.Dxt1; glInternalFormat = PixelInternalFormat.CompressedSrgbS3tcDxt1Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt1a: if (!supportsS3tc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbaS3tcDxt1Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt3: if (!supportsS3tc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbaS3tcDxt3Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt3SRgb: if (!supportsSRgb) goto case SurfaceFormat.Dxt3; glInternalFormat = PixelInternalFormat.CompressedSrgbAlphaS3tcDxt3Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt5: if (!supportsS3tc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbaS3tcDxt5Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Dxt5SRgb: if (!supportsSRgb) goto case SurfaceFormat.Dxt5; glInternalFormat = PixelInternalFormat.CompressedSrgbAlphaS3tcDxt5Ext; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; #if !IOS && !TVOS && !ANDROID case SurfaceFormat.Rgba1010102: glInternalFormat = PixelInternalFormat.Rgb10A2ui; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedInt1010102; glIsCompressedTexture = false; break; #endif // float formats case SurfaceFormat.HalfSingle: if (!supportsHalfFloat) goto case default; glInternalFormat = PixelInternalFormat.R16f; glFormat = PixelFormat.Red; glType = isGLES2 ? PixelType.HalfFloatOES : PixelType.HalfFloat; glIsCompressedTexture = false; break; case SurfaceFormat.Single: if (!supportsFloat) goto case default; glInternalFormat = PixelInternalFormat.R32f; glFormat = PixelFormat.Red; glType = PixelType.Float; glIsCompressedTexture = false; break; case SurfaceFormat.HalfVector2: if (!supportsHalfFloat) goto case default; glInternalFormat = PixelInternalFormat.Rg16f; glFormat = PixelFormat.Rg; glType = PixelType.HalfFloat; glIsCompressedTexture = false; break; case SurfaceFormat.Vector2: if (!supportsFloat) goto case default; glInternalFormat = PixelInternalFormat.Rg32f; glFormat = PixelFormat.Rg; glType = PixelType.Float; glIsCompressedTexture = false; break; // HdrBlendable implemented as HalfVector4 (see http://blogs.msdn.com/b/shawnhar/archive/2010/07/09/surfaceformat-hdrblendable.aspx) case SurfaceFormat.HdrBlendable: case SurfaceFormat.HalfVector4: if (!supportsHalfFloat) goto case default; glInternalFormat = PixelInternalFormat.Rgba16f; glFormat = PixelFormat.Rgba; glType = PixelType.HalfFloat; glIsCompressedTexture = false; break; case SurfaceFormat.Vector4: if (!supportsFloat) goto case default; glInternalFormat = PixelInternalFormat.Rgba32f; glFormat = PixelFormat.Rgba; glType = PixelType.Float; glIsCompressedTexture = false; break; case SurfaceFormat.NormalizedByte2: glInternalFormat = PixelInternalFormat.Rg8i; glFormat = PixelFormat.Rg; glType = PixelType.Byte; glIsCompressedTexture = false; break; case SurfaceFormat.NormalizedByte4: glInternalFormat = PixelInternalFormat.Rgba8i; glFormat = PixelFormat.Rgba; glType = PixelType.Byte; glIsCompressedTexture = false; break; case SurfaceFormat.Rg32: if (!supportsNormalized) goto case default; glInternalFormat = PixelInternalFormat.Rg16ui; glFormat = PixelFormat.Rg; glType = PixelType.UnsignedShort; glIsCompressedTexture = false; break; case SurfaceFormat.Rgba64: if (!supportsNormalized) goto case default; glInternalFormat = PixelInternalFormat.Rgba16; glFormat = PixelFormat.Rgba; glType = PixelType.UnsignedShort; glIsCompressedTexture = false; break; case SurfaceFormat.RgbaAtcExplicitAlpha: if (!supportsAtitc) goto case default; glInternalFormat = PixelInternalFormat.AtcRgbaExplicitAlphaAmd; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbaAtcInterpolatedAlpha: if (!supportsAtitc) goto case default; glInternalFormat = PixelInternalFormat.AtcRgbaInterpolatedAlphaAmd; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbEtc1: if (!supportsEtc1) goto case default; glInternalFormat = PixelInternalFormat.Etc1; // GL_ETC1_RGB8_OES glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Rgb8Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2Rgb8; // GL_COMPRESSED_RGB8_ETC2 glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Srgb8Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2Srgb8; // GL_COMPRESSED_SRGB8_ETC2 glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Rgb8A1Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2Rgb8A1; // GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Srgb8A1Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2Srgb8A1; // GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.Rgba8Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2Rgba8Eac; // GL_COMPRESSED_RGBA8_ETC2_EAC glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.SRgb8A8Etc2: if (!supportsEtc2) goto case default; glInternalFormat = PixelInternalFormat.Etc2SRgb8A8Eac; // GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbPvrtc2Bpp: if (!supportsPvrtc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbPvrtc2Bppv1Img; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbPvrtc4Bpp: if (!supportsPvrtc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbPvrtc4Bppv1Img; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbaPvrtc2Bpp: if (!supportsPvrtc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbaPvrtc2Bppv1Img; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; case SurfaceFormat.RgbaPvrtc4Bpp: if (!supportsPvrtc) goto case default; glInternalFormat = PixelInternalFormat.CompressedRgbaPvrtc4Bppv1Img; glFormat = (PixelFormat)glInternalFormat; glType = PixelType.UnsignedByte; glIsCompressedTexture = true; break; default: throw new NotSupportedException(string.Format("The requested SurfaceFormat `{0}` is not supported.", format)); } } internal static void PlatformCreateRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int multiSampleCount) { bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { var GL = contextStrategy.ToConcrete().GL; if (multiSampleCount > 0) { RenderbufferStorage colorInternalFormat = default; switch (preferredFormat) { case SurfaceFormat.Color: colorInternalFormat = RenderbufferStorage.RGBA8; break; case SurfaceFormat.Bgr565: colorInternalFormat = RenderbufferStorage.RGB565; break; case SurfaceFormat.Bgra4444: colorInternalFormat = RenderbufferStorage.RGBA4; break; case SurfaceFormat.Bgra5551: colorInternalFormat = RenderbufferStorage.RGB5_A1; break; case SurfaceFormat.Single: colorInternalFormat = RenderbufferStorage.R32F; break; case SurfaceFormat.HalfSingle: colorInternalFormat = RenderbufferStorage.R16F; break; case SurfaceFormat.Vector2: colorInternalFormat = RenderbufferStorage.RG32F; break; case SurfaceFormat.HalfVector2: colorInternalFormat = RenderbufferStorage.RG16F; break; case SurfaceFormat.Vector4: colorInternalFormat = RenderbufferStorage.RGBA32F; break; case SurfaceFormat.HalfVector4: colorInternalFormat = RenderbufferStorage.RGBA16F; break; default: break; } renderTargetGL.GLColorBuffer = GL.GenRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLColorBuffer); GL.CheckGLError(); System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null); GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, colorInternalFormat, width, height); GL.CheckGLError(); } if (preferredDepthFormat != DepthFormat.None) { RenderbufferStorage depthInternalFormat = RenderbufferStorage.DepthComponent16; RenderbufferStorage stencilInternalFormat = (RenderbufferStorage)0; switch (preferredDepthFormat) { case DepthFormat.None: break; case DepthFormat.Depth16: depthInternalFormat = RenderbufferStorage.DepthComponent16; break; #if GLES case DepthFormat.Depth24: if (contextStrategy.Capabilities.SupportsDepth24) depthInternalFormat = RenderbufferStorage.DepthComponent24oes; else if (contextStrategy.Capabilities.SupportsDepthNonLinear) depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv; else depthInternalFormat = RenderbufferStorage.DepthComponent16; break; case DepthFormat.Depth24Stencil8: if (contextStrategy.Capabilities.SupportsPackedDepthStencil) depthInternalFormat = RenderbufferStorage.Depth24Stencil8oes; else { if (contextStrategy.Capabilities.SupportsDepth24) depthInternalFormat = RenderbufferStorage.DepthComponent24oes; else if (contextStrategy.Capabilities.SupportsDepthNonLinear) depthInternalFormat = RenderbufferStorage.DepthComponent16NonlinearNv; else depthInternalFormat = RenderbufferStorage.DepthComponent16; stencilInternalFormat = RenderbufferStorage.StencilIndex8; } break; #else case DepthFormat.Depth24: depthInternalFormat = RenderbufferStorage.DepthComponent24; break; case DepthFormat.Depth24Stencil8: depthInternalFormat = RenderbufferStorage.Depth24Stencil8; break; #endif default: throw new InvalidOperationException("preferredDepthFormat"); } if (depthInternalFormat != 0) { renderTargetGL.GLDepthBuffer = GL.GenRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLDepthBuffer); GL.CheckGLError(); if (multiSampleCount > 0) { GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, depthInternalFormat, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, depthInternalFormat, width, height); GL.CheckGLError(); } if (preferredDepthFormat == DepthFormat.Depth24Stencil8) { renderTargetGL.GLStencilBuffer = renderTargetGL.GLDepthBuffer; if (stencilInternalFormat != 0) { renderTargetGL.GLStencilBuffer = GL.GenRenderbuffer(); GL.CheckGLError(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, renderTargetGL.GLStencilBuffer); GL.CheckGLError(); if (multiSampleCount > 0) { System.Diagnostics.Debug.Assert(GL.RenderbufferStorageMultisample != null); GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, multiSampleCount, stencilInternalFormat, width, height); GL.CheckGLError(); } else { GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, stencilInternalFormat, width, height); GL.CheckGLError(); } } } } } } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } return; } internal static void PlatformDeleteRenderTarget(IRenderTargetStrategyGL renderTargetGL, GraphicsContextStrategy contextStrategy) { contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = contextStrategy.ToConcrete().GL; if (renderTargetGL.GLColorBuffer != 0) { GL.DeleteRenderbuffer(renderTargetGL.GLColorBuffer); GL.CheckGLError(); } if (renderTargetGL.GLStencilBuffer != 0 && renderTargetGL.GLStencilBuffer != renderTargetGL.GLDepthBuffer) { GL.DeleteRenderbuffer(renderTargetGL.GLStencilBuffer); GL.CheckGLError(); } if (renderTargetGL.GLDepthBuffer != 0) { GL.DeleteRenderbuffer(renderTargetGL.GLDepthBuffer); GL.CheckGLError(); } contextStrategy.ToConcrete().PlatformUnbindRenderTarget(renderTargetGL); } finally { contextStrategy.ToConcrete().UnbindDisposeContext(); } } protected override void PlatformGraphicsContextLost() { if (_glTexture > 0) { if (!GraphicsDevice.IsDisposed) { var GL = _contextStrategy.ToConcrete().GL; GL.DeleteTexture(_glTexture); GL.CheckGLError(); } } _glTexture = -1; _glLastSamplerState = null; base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } if (_glTexture > 0) { _contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = _contextStrategy.ToConcrete().GL; GL.DeleteTexture(_glTexture); GL.CheckGLError(); } finally { _contextStrategy.ToConcrete().UnbindDisposeContext(); } } _glTexture = -1; _glLastSamplerState = null; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTexture2D.Stream.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; #if DESKTOPGL using StbImageWriteSharp; #endif #if ANDROID using Android.Graphics; #endif #if IOS || TVOS using UIKit; using CoreGraphics; using Foundation; using Microsoft.Xna.Platform.Graphics.Utilities.Png; #endif namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D { internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream) : base(contextStrategy, SurfaceFormat.Color, 1) { this._arraySize = 1; // Rewind stream if it is at end if (stream.CanSeek && stream.Length == stream.Position) stream.Seek(0, SeekOrigin.Begin); #if DESKTOPGL && (NET40 || NET40_OR_GREATER) PlatformFromStream_DESKTOPGL(contextStrategy, stream, out this._width, out this._height); #elif ANDROID PlatformFromStream_ANDROID(contextStrategy, stream, out this._width, out this._height); #elif IOS || TVOS PlatformFromStream_IOS(contextStrategy, stream, out this._width, out this._height); #else if (stream.CanSeek) { PlatformFromStream_ImageSharp(contextStrategy, stream, out this._width, out this._height); } else { // If stream doesn't provide seek functionality, use MemoryStream instead using (Stream ms = new MemoryStream()) { stream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); PlatformFromStream_ImageSharp(contextStrategy, ms, out this._width, out this._height); } } #endif } private unsafe void PlatformFromStream_ImageSharp(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { // The data returned is always four channel BGRA StbImageSharp.ImageResult result = StbImageSharp.ImageResult.FromStream(stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha); width = result.Width; height = result.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, result.Data, 0, result.Data.Length); } #region DESKTOPGL #if DESKTOPGL && (NET40 || NET40_OR_GREATER) private unsafe void PlatformFromStream_DESKTOPGL(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { System.Drawing.Bitmap image = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromStream(stream); try { if ((image.PixelFormat & System.Drawing.Imaging.PixelFormat.Indexed) != 0) image = new System.Drawing.Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); width = image.Width; height = image.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); byte[] data = new byte[width * height * 4]; System.Drawing.Imaging.BitmapData bitmapData = null; try { bitmapData = image.LockBits(new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); if (bitmapData.Stride != image.Width * 4) throw new NotImplementedException(); Marshal.Copy(bitmapData.Scan0, data, 0, data.Length); } finally { image.UnlockBits(bitmapData); } // Convert from ARGB to ABGR ConvertToABGR_DESKTOPGL(width, height, data); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, data, 0, data.Length); } finally { image.Dispose(); } } private unsafe static void ConvertToABGR_DESKTOPGL(int pixelWidth, int pixelHeight, byte[] data) { int pixelCount = pixelWidth * pixelHeight; fixed (byte* pData = data) { for (int i = 0; i < pixelCount; i++) { byte t = pData[i * 4 + 0]; pData[i * 4 + 0] = pData[i * 4 + 2]; pData[i * 4 + 2] = t; } } } #endif #endregion DESKTOPGL #region ANDROID #if ANDROID private unsafe void PlatformFromStream_ANDROID(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { using (Android.Graphics.Bitmap image = Android.Graphics.BitmapFactory.DecodeStream(stream, null, new Android.Graphics.BitmapFactory.Options { InScaled = false, InDither = false, InJustDecodeBounds = false, InPurgeable = true, InInputShareable = true, InPremultiplied = false, })) { width = image.Width; height = image.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); int[] data = new int[width * height]; if ((width != image.Width) || (height != image.Height)) { using (Android.Graphics.Bitmap imagePadded = Android.Graphics.Bitmap.CreateBitmap(width, height, Android.Graphics.Bitmap.Config.Argb8888)) { Android.Graphics.Canvas canvas = new Android.Graphics.Canvas(imagePadded); canvas.DrawARGB(0, 0, 0, 0); canvas.DrawBitmap(image, 0, 0, null); imagePadded.GetPixels(data, 0, width, 0, 0, width, height); imagePadded.Recycle(); } } else { image.GetPixels(data, 0, width, 0, 0, width, height); } image.Recycle(); // Convert from ARGB to ABGR ConvertToABGR_ANDROID(width, height, data); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, data, 0, data.Length); } } //Converts Pixel Data from ARGB to ABGR private void ConvertToABGR_ANDROID(int pixelWidth, int pixelHeight, int[] pixels) { int pixelCount = pixelWidth * pixelHeight; for (int i = 0; i < pixelCount; i++) { uint pixel = (uint)pixels[i]; pixels[i] = (int)((pixel & 0xFF00FF00) | ((pixel & 0x00FF0000) >> 16) | ((pixel & 0x000000FF) << 16)); } } #endif #endregion ANDROID #region IOS || TVOS #if IOS || TVOS private unsafe void PlatformFromStream_IOS(GraphicsContextStrategy contextStrategy, Stream stream, out int width, out int height) { using (UIImage uiImage = UIImage.LoadFromData(NSData.FromStream(stream))) { CGImage cgImage = uiImage.CGImage; width = (int)cgImage.Width; height = (int)cgImage.Height; ValidateBounds(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy, width, height); byte[] data = new byte[width * height * 4]; CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB(); CGBitmapContext bitmapContext = new CGBitmapContext(data, width, height, 8, width * 4, colorSpace, CGBitmapFlags.Last // CGBitmapFlags.PremultipliedLast ); bitmapContext.DrawImage(new System.Drawing.RectangleF(0, 0, width, height), cgImage); bitmapContext.Dispose(); colorSpace.Dispose(); this.PlatformConstructTexture2D(contextStrategy, width, height, false, SurfaceFormat.Color, false); this.SetData(0, data, 0, data.Length); } } #endif #endregion IOS || TVOS private static unsafe void ValidateBounds(GraphicsDeviceStrategy deviceStrategy, int width, int height) { if (deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048)) throw new NotSupportedException("Reach profile supports a maximum Texture2D size of 2048"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096)) throw new NotSupportedException("HiDef profile supports a maximum Texture2D size of 4096"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_0 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_1 profile supports a maximum Texture2D size of 8192"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_0 profile supports a maximum Texture2D size of 16384"); if (deviceStrategy.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_1 profile supports a maximum Texture2D size of 16384"); } public unsafe void SaveAsPng(Stream stream, int width, int height) { if (stream == null) throw new ArgumentNullException("stream", "'stream' cannot be null"); if (width <= 0) throw new ArgumentOutOfRangeException("width", width, "'width' cannot be less than or equal to zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height", height, "'height' cannot be less than or equal to zero"); #if DESKTOPGL Color[] data = TextureHelpers.GetColorData(this); fixed (Color* pData = data) { ImageWriter writer = new ImageWriter(); writer.WritePng(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream); } #elif ANDROID SaveAsImage(stream, width, height, Bitmap.CompressFormat.Png); #else PngWriter pngWriter = new PngWriter(); pngWriter.Write(this, stream); #endif } public unsafe void SaveAsJpeg(Stream stream, int width, int height) { if (stream == null) throw new ArgumentNullException("stream", "'stream' cannot be null"); if (width <= 0) throw new ArgumentOutOfRangeException("width", width, "'width' cannot be less than or equal to zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height", height, "'height' cannot be less than or equal to zero"); #if DESKTOPGL Color[] data = TextureHelpers.GetColorData(this); fixed (Color* pData = data) { ImageWriter writer = new ImageWriter(); writer.WriteJpg(pData, width, height, StbImageWriteSharp.ColorComponents.RedGreenBlueAlpha, stream, 90); } #elif ANDROID SaveAsImage(stream, width, height, Bitmap.CompressFormat.Jpeg); #else throw new NotImplementedException(); #endif } #if ANDROID private void SaveAsImage(Stream stream, int width, int height, Bitmap.CompressFormat format) { int[] data = new int[width * height]; GetData(0, 0, Bounds, data, 0, data.Length); // internal structure is BGR while bitmap expects RGB for (int i = 0; i < data.Length; i++) { uint pixel = (uint)data[i]; data[i] = (int)((pixel & 0xFF00FF00) | ((pixel & 0x00FF0000) >> 16) | ((pixel & 0x000000FF) << 16)); } using (Bitmap bitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888)) { bitmap.SetPixels(data, 0, width, 0, 0, width, height); bitmap.Compress(format, 100, stream); bitmap.Recycle(); } } #endif } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTexture2D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; using GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy { private readonly int _width; private readonly int _height; private readonly int _arraySize; protected readonly bool _shared; internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; this._shared = shared; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this._width = width; this._height = height; this._arraySize = arraySize; this._shared = shared; this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } #region ITexture2DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int ArraySize { get { return _arraySize; } } public Rectangle Bounds { get { return new Rectangle(0, 0, this._width, this._height); } } public IntPtr GetSharedHandle() { if (this._shared) return new IntPtr(this._glTexture); throw new InvalidOperationException(); } public unsafe void SetData(int level, T[] data, int startIndex, int elementCount) where T : struct { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int w, h; TextureHelpers.GetSizeForLevel(Width, Height, level, out w, out h); int fSize = this.Format.GetSize(); int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; System.Diagnostics.Debug.Assert(_glTexture >= 0); if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.Texture2D, _glTexture); GL.CheckGLError(); GL.PixelStore(PixelStoreParameter.UnpackAlignment, Math.Min(fSize, 8)); if (_glIsCompressedTexture) { GL.CompressedTexImage2D( TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, elementCount * elementSizeInByte, dataPtr); GL.CheckGLError(); } else { GL.TexImage2D( TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, _glFormat, _glType, dataPtr); GL.CheckGLError(); } } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public unsafe void SetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int fSize = this.Format.GetSize(); int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; System.Diagnostics.Debug.Assert(_glTexture >= 0); if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.Texture2D, _glTexture); GL.CheckGLError(); GL.PixelStore(PixelStoreParameter.UnpackAlignment, Math.Min(fSize, 8)); if (_glIsCompressedTexture) { GL.CompressedTexSubImage2D( TextureTarget.Texture2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glInternalFormat, elementCount * elementSizeInByte, dataPtr); GL.CheckGLError(); } else { GL.TexSubImage2D( TextureTarget.Texture2D, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, dataPtr); GL.CheckGLError(); } } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public unsafe void GetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; #if GLES // TODO: check for non renderable formats (formats that can't be attached to FBO) int framebufferId = 0; framebufferId = GL.GenFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebufferId); GL.CheckGLError(); GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, _glTexture, 0); GL.CheckGLError(); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; GL.ReadPixels(checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, dataPtr); GL.CheckGLError(); } GL.DeleteFramebuffer(framebufferId); #else // Note: for compressed format Format.GetSize() returns the size of a 4x4 block int fSize = this.Format.GetSize(); int w = Math.Max(this.Width >> level, 1); int h = Math.Max(this.Height >> level, 1); int TsizeInBytes = sizeof(T); if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.Texture2D, _glTexture); GL.PixelStore(PixelStoreParameter.PackAlignment, Math.Min(TsizeInBytes, 8)); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * TsizeInBytes; if (_glIsCompressedTexture) { w = w / 4; h = h / 4; int bytes = w * h * fSize; IntPtr pTemp = Marshal.AllocHGlobal(bytes); try { GL.GetCompressedTexImage(TextureTarget.Texture2D, level, pTemp); GL.CheckGLError(); IntPtr tempPtr = (IntPtr)pTemp; tempPtr = tempPtr + checkedRect.X / 4 * fSize + checkedRect.Top / 4 * w * fSize; int fWidthSize = w * fSize; int tRectWidthSize = checkedRect.Width / 4 * fSize; int rowCount = checkedRect.Height / 4; for (int r = 0; r < rowCount; r++) { MemCopyHelper.MemoryCopy( tempPtr + r * fWidthSize, dataPtr + r * tRectWidthSize, tRectWidthSize); } } finally { Marshal.FreeHGlobal(pTemp); } } else { if (level == 0 && checkedRect.X == 0 && checkedRect.Y == 0 && checkedRect.Width == this.Width && checkedRect.Height == this.Height && startIndex == 0 && elementCount == data.Length) { GL.GetTexImage(TextureTarget.Texture2D, level, _glFormat, _glType, dataPtr); GL.CheckGLError(); } else { int bytes = w * h * fSize; IntPtr pTemp = Marshal.AllocHGlobal(bytes); try { GL.GetTexImage(TextureTarget.Texture2D, level, _glFormat, _glType, pTemp); GL.CheckGLError(); IntPtr tempPtr = (IntPtr)pTemp; tempPtr = tempPtr + checkedRect.X * fSize + checkedRect.Top * w * fSize; int fWidthSize = w * fSize; int tRectWidthSize = checkedRect.Width * fSize; int rowCount = checkedRect.Height; for (int r = 0; r < rowCount; r++) { MemCopyHelper.MemoryCopy( tempPtr + r * fWidthSize, dataPtr + r * tRectWidthSize, tRectWidthSize); } } finally { Marshal.FreeHGlobal(pTemp); } } } } #endif } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { int blockWidth, blockHeight; Format.GetBlockSize(out blockWidth, out blockHeight); int blockWidthMinusOne = blockWidth - 1; int blockHeightMinusOne = blockHeight - 1; // round x and y down to next multiple of block size; width and height up to next multiple of block size int roundedWidth = (rect.Width + blockWidthMinusOne) & ~blockWidthMinusOne; int roundedHeight = (rect.Height + blockHeightMinusOne) & ~blockHeightMinusOne; // OpenGL only: The last two mip levels require the width and height to be passed // as 2x2 and 1x1, but there needs to be enough data passed to occupy a full block. checkedRect = new Rectangle(rect.X & ~blockWidthMinusOne, rect.Y & ~blockHeightMinusOne, (rect.Width < blockWidth && textureBounds.Width < blockWidth) ? textureBounds.Width : roundedWidth, (rect.Height < blockHeight && textureBounds.Height < blockHeight) ? textureBounds.Height : roundedHeight); if (Format == SurfaceFormat.RgbPvrtc2Bpp || Format == SurfaceFormat.RgbaPvrtc2Bpp) { return (Math.Max(checkedRect.Width, 16) * Math.Max(checkedRect.Height, 8) * 2 + 7) / 8; } else if (Format == SurfaceFormat.RgbPvrtc4Bpp || Format == SurfaceFormat.RgbaPvrtc4Bpp) { return (Math.Max(checkedRect.Width, 8) * Math.Max(checkedRect.Height, 8) * 4 + 7) / 8; } else { return roundedWidth * roundedHeight * fSize / (blockWidth * blockHeight); } } #endregion ITexture2DStrategy internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { _glTarget = TextureTarget.Texture2D; ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture); bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { var GL = contextStrategy.ToConcrete().GL; System.Diagnostics.Debug.Assert(_glTexture < 0); _glTexture = GL.GenTexture(); GL.CheckGLError(); if (!isSharedContext) ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.Texture2D, _glTexture); GL.CheckGLError(); // Set mipMap levels #if !GLES GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0); GL.CheckGLError(); #endif int w = width; int h = height; int level = 0; while (true) { if (_glIsCompressedTexture) { int imageSize = 0; // PVRTC has explicit calculations for imageSize // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt if (format == SurfaceFormat.RgbPvrtc2Bpp || format == SurfaceFormat.RgbaPvrtc2Bpp) { imageSize = (Math.Max(w, 16) * Math.Max(h, 8) * 2 + 7) / 8; } else if (format == SurfaceFormat.RgbPvrtc4Bpp || format == SurfaceFormat.RgbaPvrtc4Bpp) { imageSize = (Math.Max(w, 8) * Math.Max(h, 8) * 4 + 7) / 8; } else { int blockSize = format.GetSize(); int blockWidth, blockHeight; format.GetBlockSize(out blockWidth, out blockHeight); int wBlocks = (w + (blockWidth - 1)) / blockWidth; int hBlocks = (h + (blockHeight - 1)) / blockHeight; imageSize = wBlocks * hBlocks * blockSize; } GL.CompressedTexImage2D(TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, imageSize, IntPtr.Zero); GL.CheckGLError(); } else { GL.TexImage2D(TextureTarget.Texture2D, level, _glInternalFormat, w, h, 0, _glFormat, _glType, IntPtr.Zero); GL.CheckGLError(); } if ((w == 1 && h == 1) || !mipMap) break; if (w > 1) w = w / 2; if (h > 1) h = h / 2; ++level; } } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTexture3D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy { private readonly int _width; private readonly int _height; private readonly int _depth; internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this._width = width; this._height = height; this._depth = depth; this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } #region ITexture3DStrategy public int Width { get { return _width; } } public int Height { get { return _height; } } public int Depth { get { return _depth; } } public unsafe void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { int width = right - left; int height = bottom - top; int depth = back - front; bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInByte = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(_glTarget, _glTexture); GL.CheckGLError(); GL.TexSubImage3D(_glTarget, level, left, top, front, width, height, depth, _glFormat, _glType, dataPtr); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { throw new NotImplementedException(); } #endregion ITexture3DStrategy internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { _glTarget = TextureTarget.Texture3D; bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { var GL = contextStrategy.ToConcrete().GL; _glTexture = GL.GenTexture(); GL.CheckGLError(); if (!isSharedContext) ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(_glTarget, _glTexture); GL.CheckGLError(); ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture); GL.TexImage3D(_glTarget, 0, _glInternalFormat, width, height, depth, 0, _glFormat, _glType, IntPtr.Zero); GL.CheckGLError(); if (mipMap) throw new NotImplementedException("Texture3D does not yet support mipmaps."); } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTextureCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteTextureCollection : TextureCollectionStrategy { internal TextureTarget[] _targets; internal uint InternalDirty { get { return base._dirty; } set { base._dirty = value; } } internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { _targets = new TextureTarget[capacity]; for (int i = 0; i < _targets.Length; i++) _targets[i] = 0; } public override void Clear() { base.Clear(); for (int i = 0; i < _targets.Length; i++) _targets[i] = 0; } } } ================================================ FILE: Platforms/Graphics/.GL/ConcreteTextureCube.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; using GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy { private readonly int _size; internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this._size = size; this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } #region ITextureCubeStrategy public int Size { get { return _size; } } public unsafe void SetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture); GL.CheckGLError(); TextureTarget target = ConcreteTextureCube.GetGLCubeFace(face); if (_glIsCompressedTexture) { GL.CompressedTexSubImage2D( target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glInternalFormat, elementCount * elementSizeInBytes, dataPtr); GL.CheckGLError(); } else { GL.TexSubImage2D( target, level, checkedRect.X, checkedRect.Y, checkedRect.Width, checkedRect.Height, _glFormat, _glType, dataPtr); GL.CheckGLError(); } } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public unsafe void GetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; #if OPENGL && DESKTOPGL TextureTarget target = ConcreteTextureCube.GetGLCubeFace(face); // Note: for compressed format Format.GetSize() returns the size of a 4x4 block int fSize = this.Format.GetSize(); int w = Math.Max(this.Size >> level, 1); int h = Math.Max(this.Size >> level, 1); int TsizeInBytes = sizeof(T); if (!isSharedContext) ((IPlatformTextureCollection)base.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * TsizeInBytes; if (_glIsCompressedTexture) { w = w / 4; h = h / 4; int bytes = w * h * fSize; IntPtr pTemp = Marshal.AllocHGlobal(bytes); try { GL.GetCompressedTexImage(target, level, pTemp); GL.CheckGLError(); IntPtr tempPtr = (IntPtr)pTemp; tempPtr = tempPtr + checkedRect.X / 4 * fSize + checkedRect.Top / 4 * w * fSize; int fWidthSize = w * fSize; int tRectWidthSize = checkedRect.Width / 4 * fSize; int rowCount = checkedRect.Height / 4; for (int r = 0; r < rowCount; r++) { MemCopyHelper.MemoryCopy( tempPtr + r * fWidthSize, dataPtr + r * tRectWidthSize, tRectWidthSize); } } finally { Marshal.FreeHGlobal(pTemp); } } else { if (level == 0 && checkedRect.X == 0 && checkedRect.Y == 0 && checkedRect.Width == this.Size && checkedRect.Height == this.Size && startIndex == 0 && elementCount == data.Length) { GL.GetTexImage(target, level, _glFormat, _glType, dataPtr); GL.CheckGLError(); } else { int bytes = w * h * fSize; IntPtr pTemp = Marshal.AllocHGlobal(bytes); try { GL.GetTexImage(target, level, _glFormat, _glType, pTemp); GL.CheckGLError(); IntPtr tempPtr = (IntPtr)pTemp; tempPtr = tempPtr + checkedRect.X * fSize + checkedRect.Top * w * fSize; int fWidthSize = w * fSize; int tRectWidthSize = checkedRect.Width * fSize; int rowCount = checkedRect.Height; for (int r = 0; r < rowCount; r++) { MemCopyHelper.MemoryCopy( tempPtr + r * fWidthSize, dataPtr + r * tRectWidthSize, tRectWidthSize); } } finally { Marshal.FreeHGlobal(pTemp); } } } } #else throw new NotImplementedException(); #endif } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { // round x and y down to next multiple of four; width and height up to next multiple of four int roundedWidth = (rect.Width + 3) & ~0x3; int roundedHeight = (rect.Height + 3) & ~0x3; // OpenGL only: The last two mip levels require the width and height to be passed // as 2x2 and 1x1, but there needs to be enough data passed to occupy a 4x4 block. checkedRect = new Rectangle(rect.X & ~0x3, rect.Y & ~0x3, (rect.Width < 4 && textureBounds.Width < 4) ? textureBounds.Width : roundedWidth, (rect.Height < 4 && textureBounds.Height < 4) ? textureBounds.Height : roundedHeight); return (roundedWidth * roundedHeight * fSize / 16); } #endregion ITextureCubeStrategy internal static TextureTarget GetGLCubeFace(CubeMapFace face) { switch (face) { case CubeMapFace.PositiveX: return TextureTarget.TextureCubeMapPositiveX; case CubeMapFace.NegativeX: return TextureTarget.TextureCubeMapNegativeX; case CubeMapFace.PositiveY: return TextureTarget.TextureCubeMapPositiveY; case CubeMapFace.NegativeY: return TextureTarget.TextureCubeMapNegativeY; case CubeMapFace.PositiveZ: return TextureTarget.TextureCubeMapPositiveZ; case CubeMapFace.NegativeZ: return TextureTarget.TextureCubeMapNegativeZ; default: throw new ArgumentException(); } } internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { _glTarget = TextureTarget.TextureCubeMap; bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { var GL = contextStrategy.ToConcrete().GL; _glTexture = GL.GenTexture(); GL.CheckGLError(); if (!isSharedContext) ((IPlatformTextureCollection)contextStrategy.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture(TextureTarget.TextureCubeMap, _glTexture); GL.CheckGLError(); ConcreteTexture.ToGLSurfaceFormat(format, contextStrategy, out _glInternalFormat, out _glFormat, out _glType, out _glIsCompressedTexture); for (int i = 0; i < 6; i++) { TextureTarget target = ConcreteTextureCube.GetGLCubeFace((CubeMapFace)i); if (_glIsCompressedTexture) { int imageSize = 0; switch (format) { case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: imageSize = (Math.Max(size, 16) * Math.Max(size, 8) * 2 + 7) / 8; break; case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: imageSize = (Math.Max(size, 8) * Math.Max(size, 8) * 4 + 7) / 8; break; case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1a: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: imageSize = (size + 3) / 4 * ((size + 3) / 4) * format.GetSize(); break; default: throw new NotSupportedException(); } GL.CompressedTexImage2D(target, 0, _glInternalFormat, size, size, 0, imageSize, IntPtr.Zero); GL.CheckGLError(); } else { GL.TexImage2D(target, 0, _glInternalFormat, size, size, 0, _glFormat, _glType, IntPtr.Zero); GL.CheckGLError(); } } if (mipMap) { System.Diagnostics.Debug.Assert(TextureTarget.TextureCubeMap == _glTarget); #if IOS || TVOS || ANDROID GL.GenerateMipmap(TextureTarget.TextureCubeMap); GL.CheckGLError(); #else GL.GenerateMipmap(_glTarget); GL.CheckGLError(); // This updates the mipmaps after a change in the base texture GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.GenerateMipmap, (int)Bool.True); #endif } } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL/GLExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { static class GLExtensions { public static ComparisonFunc ToGLComparisonFunction(this CompareFunction compare) { switch (compare) { case CompareFunction.Always: return ComparisonFunc.Always; case CompareFunction.Equal: return ComparisonFunc.Equal; case CompareFunction.Greater: return ComparisonFunc.Greater; case CompareFunction.GreaterEqual: return ComparisonFunc.Gequal; case CompareFunction.Less: return ComparisonFunc.Less; case CompareFunction.LessEqual: return ComparisonFunc.Lequal; case CompareFunction.Never: return ComparisonFunc.Never; case CompareFunction.NotEqual: return ComparisonFunc.Notequal; default: return ComparisonFunc.Always; } } internal static int ToGLNumberOfElements(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 1; case VertexElementFormat.Vector2: return 2; case VertexElementFormat.Vector3: return 3; case VertexElementFormat.Vector4: return 4; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 2; case VertexElementFormat.Short4: return 4; case VertexElementFormat.NormalizedShort2: return 2; case VertexElementFormat.NormalizedShort4: return 4; case VertexElementFormat.HalfVector2: return 2; case VertexElementFormat.HalfVector4: return 4; default: throw new ArgumentException(); } } internal static VertexAttribPointerType ToGLVertexAttribPointerType(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return VertexAttribPointerType.Float; case VertexElementFormat.Vector2: return VertexAttribPointerType.Float; case VertexElementFormat.Vector3: return VertexAttribPointerType.Float; case VertexElementFormat.Vector4: return VertexAttribPointerType.Float; case VertexElementFormat.Color: return VertexAttribPointerType.UnsignedByte; case VertexElementFormat.Byte4: return VertexAttribPointerType.UnsignedByte; case VertexElementFormat.Short2: return VertexAttribPointerType.Short; case VertexElementFormat.Short4: return VertexAttribPointerType.Short; case VertexElementFormat.NormalizedShort2: return VertexAttribPointerType.Short; // UnsignedShort? case VertexElementFormat.NormalizedShort4: return VertexAttribPointerType.Short; // UnsignedShort? #if DESKTOPGL // HiDef? case VertexElementFormat.HalfVector2: return VertexAttribPointerType.HalfFloat; case VertexElementFormat.HalfVector4: return VertexAttribPointerType.HalfFloat; #endif default: throw new ArgumentException(); } } internal static bool ToGLVertexAttribNormalized(this VertexElement element) { // TODO: This may or may not be the right behavor. // // For instance the VertexElementFormat.Byte4 format is not supposed // to be normalized, but this line makes it so. // // The question is in MS XNA are types normalized based on usage or // normalized based to their format? // if (element.VertexElementUsage == VertexElementUsage.Color) return true; switch (element.VertexElementFormat) { case VertexElementFormat.NormalizedShort2: case VertexElementFormat.NormalizedShort4: return true; default: return false; } } } } ================================================ FILE: Platforms/Graphics/.GL/GLVersion.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Explicit)] internal struct GLVersion { [FieldOffset(0)] public short Major; [FieldOffset(2)] public short Minor; [FieldOffset(0)] public int PackedValue; public GLVersion(short major, short minor) : this() { this.Major = major; this.Minor = minor; } public GLVersion(int major, int minor) : this() { this.Major = (short)major; this.Minor = (short)minor; } public static bool operator <(GLVersion l, GLVersion r) { return l.PackedValue < r.PackedValue; } public static bool operator >(GLVersion l, GLVersion r) { return l.PackedValue > r.PackedValue; } public static bool operator <=(GLVersion l, GLVersion r) { return l.PackedValue <= r.PackedValue; } public static bool operator >=(GLVersion l, GLVersion r) { return l.PackedValue >= r.PackedValue; } public override string ToString() { return String.Format("{0}.{1}", Major, Minor); } } } ================================================ FILE: Platforms/Graphics/.GL/IRenderTargetStrategyGL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal interface IRenderTargetStrategyGL { int GLTexture { get; } TextureTarget GLTarget { get; } int GLColorBuffer { get; set; } int GLDepthBuffer { get; set; } int GLStencilBuffer { get; set; } TextureTarget GetFramebufferTarget(int arraySlice); } } ================================================ FILE: Platforms/Graphics/.GL/OpenGL.Common.cs ================================================ using System; namespace Microsoft.Xna.Platform.Graphics.OpenGL { // Required to allow platforms other than iOS use the same code. // just don't include this on iOS [AttributeUsage(AttributeTargets.Delegate)] internal sealed class MonoNativeFunctionWrapper : Attribute { } } ================================================ FILE: Platforms/Graphics/.GL/OpenGL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Runtime.InteropServices; using System.Text; using System.Runtime.CompilerServices; using System.Collections.Generic; using System.Diagnostics; using Vector2 = Microsoft.Xna.Framework.Vector2; using Vector3 = Microsoft.Xna.Framework.Vector3; using Vector4 = Microsoft.Xna.Framework.Vector4; using Matrix = Microsoft.Xna.Framework.Matrix; #if __IOS__ || __TVOS__ using ObjCRuntime; #endif namespace Microsoft.Xna.Platform.Graphics.OpenGL { internal enum BufferAccess { ReadOnly = 0x88B8, WriteOnly = 0x88B9, ReadWrite = 0x88BA, } public enum BufferRangeAccess { Read = 0x0001, Write = 0x0002, InvalidateRange = 0x0004, InvalidateBuffer = 0x0008, FlushExplicit = 0x0010, Unsynchronized = 0x0020, } internal enum BufferUsageHint { StreamDraw = 0x88E0, StaticDraw = 0x88E4, DynamicDraw = 0x88E8, } internal enum StencilFace { Front = 0x0404, Back = 0x0405, } internal enum ShaderType { VertexShader = 0x8B31, FragmentShader = 0x8B30, } internal enum ShaderParameter { LogLength = 0x8B84, CompileStatus = 0x8B81, SourceLength = 0x8B88, } internal enum GetProgramParameterName { LogLength = 0x8B84, LinkStatus = 0x8B82, } internal enum DrawElementsType { UnsignedShort = 0x1403, UnsignedInt = 0x1405, } internal enum QueryTarget { SamplesPassed = 0x8914, SamplesPassedExt = 0x8C2F, } internal enum GetQueryObjectParam { QueryResultAvailable = 0x8867, QueryResult = 0x8866, } internal enum BlitFramebufferFilter { Nearest = 0x2600, } internal enum ReadBufferMode { ColorAttachment0 = 0x8CE0, } internal enum DrawBufferMode { None = 0x0000, Back = 0x0405, ColorAttachment0 = 0x8CE0, } internal enum FramebufferErrorCode { FramebufferUndefined = 0x8219, FramebufferComplete = 0x8CD5, FramebufferCompleteExt = 0x8CD5, FramebufferIncompleteAttachment = 0x8CD6, FramebufferIncompleteAttachmentExt = 0x8CD6, FramebufferIncompleteMissingAttachment = 0x8CD7, FramebufferIncompleteMissingAttachmentExt = 0x8CD7, FramebufferIncompleteDimensionsExt = 0x8CD9, FramebufferIncompleteFormatsExt = 0x8CDA, FramebufferIncompleteDrawBuffer = 0x8CDB, FramebufferIncompleteDrawBufferExt = 0x8CDB, FramebufferIncompleteReadBuffer = 0x8CDC, FramebufferIncompleteReadBufferExt = 0x8CDC, FramebufferUnsupported = 0x8CDD, FramebufferUnsupportedExt = 0x8CDD, FramebufferIncompleteMultisample = 0x8D56, FramebufferIncompleteLayerTargets = 0x8DA8, FramebufferIncompleteLayerCount = 0x8DA9, } internal enum BufferTarget { ArrayBuffer = 0x8892, ElementArrayBuffer = 0x8893, } internal enum RenderbufferTarget { Renderbuffer = 0x8D41, } internal enum FramebufferTarget { Framebuffer = 0x8D40, FramebufferExt = 0x8D40, ReadFramebuffer = 0x8CA8, DrawFramebuffer = 0x8CA9, } internal enum RenderbufferStorage { DepthComponent16 = 0x81A5, DepthComponent24 = 0x81A6, Depth24Stencil8 = 0x88F0, // GLES Values DepthComponent24oes = 0x81A6, Depth24Stencil8oes = 0x88F0, StencilIndex8 = 0x8D48, DepthComponent16NonlinearNv = 0x8E2C, RGBA8 = 0x8058, RGBA4 = 0x8056, RGB5_A1 = 0x8057, RGB565 = 0x8D62, R32F = 0x822E, RG32F = 0x8230, RGBA32F = 0x8814, R16F = 0x822D, RG16F = 0x822F, RGBA16F = 0x881A, } internal enum EnableCap : int { PointSmooth = 0x0B10, LineSmooth = 0x0B20, CullFace = 0x0B44, Lighting = 0x0B50, ColorMaterial = 0x0B57, Fog = 0x0B60, DepthTest = 0x0B71, StencilTest = 0x0B90, Normalize = 0x0BA1, AlphaTest = 0x0BC0, Dither = 0x0BD0, Blend = 0x0BE2, ColorLogicOp = 0x0BF2, ScissorTest = 0x0C11, Texture2D = 0x0DE1, PolygonOffsetFill = 0x8037, RescaleNormal = 0x803A, VertexArray = 0x8074, NormalArray = 0x8075, ColorArray = 0x8076, TextureCoordArray = 0x8078, Multisample = 0x809D, SampleAlphaToCoverage = 0x809E, SampleAlphaToOne = 0x809F, SampleCoverage = 0x80A0, DebugOutputSynchronous = 0x8242, DepthClamp = 0x864F, DebugOutput = 0x92E0, FramebufferSRGB = 0x8DB9, } internal enum VertexAttribPointerType { Byte = 0x1400, UnsignedByte = 0x1401, Short = 0x1402, UnsignedShort = 0x1403, Float = 0x1406, HalfFloat = 0x140B, } internal enum CullFaceMode { Back = 0x0405, Front = 0x0404, } internal enum FrontFaceDirection { Cw = 0x0900, Ccw = 0x0901, } internal enum MaterialFace { FrontAndBack = 0x0408, } internal enum PolygonMode { Fill = 0x1B02, Line = 0x1B01, } internal enum BlendEquationMode { FuncAdd = 0x8006, Max = 0x8008, // ios MaxExt Min = 0x8007, // ios MinExt FuncReverseSubtract = 0x800B, FuncSubtract = 0x800A, } internal enum BlendingFunc { Zero = 0, SrcColor = 0x0300, OneMinusSrcColor = 0x0301, SrcAlpha = 0x0302, OneMinusSrcAlpha = 0x0303, DstAlpha = 0x0304, OneMinusDstAlpha = 0x0305, DstColor = 0x0306, OneMinusDstColor = 0x0307, SrcAlphaSaturate = 0x0308, ConstantColor = 0x8001, OneMinusConstantColor = 0x8002, ConstantAlpha = 0x8003, OneMinusConstantAlpha = 0x8004, One = 1, } internal enum ComparisonFunc { Never = 0x0200, Less = 0x0201, Equal = 0x0202, Greater = 0x0204, Lequal = 0x0203, // Less | Equal Notequal = 0x0205, // Less | Greater Gequal = 0x0206, // Equal | Greater Always = 0x0207, // Less | Equal | Greater } internal enum GetPName : int { MajorVersion = 0x821B, MinorVersion = 0x821C, ArrayBufferBinding = 0x8894, MaxTextureImageUnits = 0x8872, MaxVertexTextureImageUnits = 0x8B4C, MaxCombinedTextureImageUnits = 0x8B4D, MaxVertexAttribs = 0x8869, MaxTextureSize = 0x0D33, MaxDrawBuffers = 0x8824, TextureBinding2D = 0x8069, MaxTextureMaxAnisotropyExt = 0x84FF, MaxSamples = 0x8D57, MaxElementsVertices = 0x80E8, MaxElementsIndices = 0x80E9, CompressedTextureFormats = 0x86A3, } internal enum StringName { Vendor = 0x1F00, Renderer = 0x1F01, Version = 0x1F02, Extensions = 0x1F03, } internal enum FramebufferAttachment { ColorAttachment0 = 0x8CE0, DepthAttachment = 0x8D00, StencilAttachment = 0x8D20, ColorAttachmentExt = 0x1800, DepthAttachementExt = 0x1801, StencilAttachmentExt = 0x1802, } internal enum GLPrimitiveType { Points = 0x0000, Lines = 0x0001, LineStrip = 0x0003, Triangles = 0x0004, TriangleStrip = 0x0005, } [Flags] internal enum ClearBufferMask { DepthBufferBit = 0x00000100, StencilBufferBit = 0x00000400, ColorBufferBit = 0x00004000, } internal enum ErrorCode { NO_ERROR = 0x0000, INVALID_ENUM = 0x0500, INVALID_VALUE = 0x0501, INVALID_OPERATION = 0x0502, STACK_OVERFLOW = 0x0503, STACK_UNDERFLOW = 0x0504, OUT_OF_MEMORY = 0x0505, INVALID_FRAMEBUFFER_OPERATION = 0x0506, CONTEXT_LOST = 0x0507, //(with OpenGL 4.5 or ARB_KHR_robustness) } internal enum TextureUnit { Texture0 = 0x84C0, } internal enum TextureTarget { Texture1D = 0x0DE0, Texture2D = 0x0DE1, Texture3D = 0x806F, TextureCubeMap = 0x8513, Texture1DArray = 0x8C18, Texture2DArray = 0x8C1A, Texture2DMultisample = 0x9100, Texture2DMultisampleArray = 0x9102, TextureCubeMapPositiveX = 0x8515, TextureCubeMapNegativeX = 0x8516, TextureCubeMapPositiveY = 0x8517, TextureCubeMapNegativeY = 0x8518, TextureCubeMapPositiveZ = 0x8519, TextureCubeMapNegativeZ = 0x851A, } internal enum PixelInternalFormat { Rgb = 0x1907, Rgba = 0x1908, Rgba4 = 0x8056, Luminance = 0x1909, CompressedRgbS3tcDxt1Ext = 0x83F0, CompressedRgbaS3tcDxt1Ext = 0x83F1, CompressedRgbaS3tcDxt3Ext = 0x83F2, CompressedRgbaS3tcDxt5Ext = 0x83F3, CompressedSrgbS3tcDxt1Ext = 0x8C4C, CompressedSrgbAlphaS3tcDxt3Ext = 0x8C4E, CompressedSrgbAlphaS3tcDxt5Ext = 0x8C4F, R32f = 0x822E, Rg16f = 0x822F, Rgba16f = 0x881A, R16f = 0x822D, Rg32f = 0x8230, Rgba32f = 0x8814, Rg8i = 0x8237, Rgba8i = 0x8D8E, Rg16ui = 0x823A, Rgba16ui = 0x8D76, Rgb10A2ui = 0x906F, Rgba16 = 0x805B, // sRGB Srgb = 0x8C40, Srgba = 0x8C43, // PVRTC CompressedRgbPvrtc2Bppv1Img = 0x8C01, CompressedRgbPvrtc4Bppv1Img = 0x8C00, CompressedRgbaPvrtc2Bppv1Img = 0x8C03, CompressedRgbaPvrtc4Bppv1Img = 0x8C02, // ATITC AtcRgbaExplicitAlphaAmd = 0x8C93, AtcRgbaInterpolatedAlphaAmd = 0x87EE, // ETC1 Etc1 = 0x8D64, // ETC2 RGB8A1 Etc2Rgb8 = 0x9274, Etc2Srgb8 = 0x9275, Etc2Rgb8A1 = 0x9276, Etc2Srgb8A1 = 0x9277, Etc2Rgba8Eac = 0x9278, Etc2SRgb8A8Eac = 0x9279, } internal enum PixelFormat { Rgba = 0x1908, Rgb = 0x1907, Luminance = 0x1909, Red = 0x1903, Rg = 0x8227, } internal enum PixelType { UnsignedByte = 0x1401, UnsignedShort565 = 0x8363, UnsignedShort4444 = 0x8033, UnsignedShort5551 = 0x8034, Float = 0x1406, HalfFloat = 0x140B, HalfFloatOES = 0x8D61, Byte = 0x1400, UnsignedShort = 0x1403, UnsignedInt1010102 = 0x8036, } internal enum PixelStoreParameter { UnpackAlignment = 0x0CF5, PackAlignment = 0x0D05, } internal enum StencilOp { Keep = 0x1E00, DecrWrap = 0x8508, Decr = 0x1E03, Incr = 0x1E02, IncrWrap = 0x8507, Invert = 0x150A, Replace = 0x1E01, Zero = 0, } internal enum TextureParameterName { TextureMaxAnisotropyExt = 0x84FE, TextureBaseLevel = 0x813C, TextureMaxLevel = 0x813D, TextureMinFilter = 0x2801, TextureMagFilter = 0x2800, TextureWrapS = 0x2802, TextureWrapT = 0x2803, TextureBorderColor = 0x1004, TextureLodBias = 0x8501, TextureCompareMode = 0x884C, TextureCompareFunc = 0x884D, GenerateMipmap = 0x8191, } internal enum Bool { True = 1, False = 0, } internal enum TextureMinFilter { LinearMipmapNearest = 0x2701, NearestMipmapLinear = 0x2702, LinearMipmapLinear = 0x2703, Linear = 0x2601, NearestMipmapNearest = 0x2700, Nearest = 0x2600, } internal enum TextureMagFilter { Linear = 0x2601, Nearest = 0x2600, } internal enum TextureCompareMode { CompareRefToTexture = 0x884E, None = 0, } internal enum TextureWrapMode { ClampToEdge = 0x812F, Repeat = 0x2901, MirroredRepeat = 0x8370, //GLES ClampToBorder = 0x812D, } internal struct ColorFormat { internal readonly int R; internal readonly int G; internal readonly int B; internal readonly int A; internal ColorFormat(int r, int g, int b, int a) { R = r; G = g; B = b; A = a; } } internal abstract class OGL { internal enum RenderApi { ES = 12448, GL = 12450, } internal RenderApi BoundApi = RenderApi.GL; private const CallingConvention callingConvention = CallingConvention.Winapi; protected static OGL _current; internal static OGL Current { get { return _current; } } protected OGL() { GetNativeLibrary(); LoadEntryPoints(); } protected abstract IntPtr GetNativeLibrary(); protected abstract T LoadFunction(string function); protected abstract T LoadFunctionOrNull(string function); [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void EnableVertexAttribArrayDelegate(int attrib); internal EnableVertexAttribArrayDelegate EnableVertexAttribArray; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DisableVertexAttribArrayDelegate(int attrib); internal DisableVertexAttribArrayDelegate DisableVertexAttribArray; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void MakeCurrentDelegate(IntPtr window); internal MakeCurrentDelegate MakeCurrent; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GetIntegerDelegate(int param, [Out] int* data); internal GetIntegerDelegate GetIntegerv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate IntPtr GetStringDelegate(StringName param); internal GetStringDelegate GetStringInternal; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ClearDepthDelegate(float depth); internal ClearDepthDelegate ClearDepth; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DepthRangedDelegate(double min, double max); internal DepthRangedDelegate DepthRanged; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DepthRangefDelegate(float min, float max); internal DepthRangefDelegate DepthRangef; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ClearDelegate(ClearBufferMask mask); internal ClearDelegate Clear; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ClearColorDelegate(float red, float green, float blue, float alpha); internal ClearColorDelegate ClearColor; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ClearStencilDelegate(int stencil); internal ClearStencilDelegate ClearStencil; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ViewportDelegate(int x, int y, int w, int h); internal ViewportDelegate Viewport; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate ErrorCode GetErrorDelegate(); internal GetErrorDelegate GetError; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FlushDelegate(); internal FlushDelegate Flush; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenTexturesDelegate(int count, int* ptextures); internal GenTexturesDelegate GenTextures; internal unsafe int GenTexture() { int texture; this.GenTextures(1, &texture); return texture; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BindTextureDelegate(TextureTarget target, int id); internal BindTextureDelegate BindTexture; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int EnableDelegate(EnableCap cap); internal EnableDelegate Enable; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int DisableDelegate(EnableCap cap); internal DisableDelegate Disable; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void CullFaceDelegate(CullFaceMode mode); internal CullFaceDelegate CullFace; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FrontFaceDelegate(FrontFaceDirection direction); internal FrontFaceDelegate FrontFace; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void PolygonModeDelegate(MaterialFace face, PolygonMode mode); internal PolygonModeDelegate PolygonMode; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void PolygonOffsetDelegate(float slopeScaleDepthBias, float depthbias); internal PolygonOffsetDelegate PolygonOffset; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void UseProgramDelegate(int program); internal UseProgramDelegate UseProgram; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void Uniform1iDelegate(int location, int value); internal Uniform1iDelegate Uniform1i; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform1fDelegate(int location, float value); internal Uniform1fDelegate Uniform1f; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform1ivDelegate(int location, int count, int* values); internal Uniform1ivDelegate Uniform1iv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform1fvDelegate(int location, int count, float* values); internal Uniform1fvDelegate Uniform1fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform2fvDelegate(int location, int count, Vector2* values); internal Uniform2fvDelegate Uniform2fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform3fvDelegate(int location, int count, Vector3* values); internal Uniform3fvDelegate Uniform3fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void Uniform4fvDelegate(int location, int count, Vector4* values); internal Uniform4fvDelegate Uniform4fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void UniformMatrix2fvDelegate(int location, int count, bool transpose, float* values); internal UniformMatrix2fvDelegate UniformMatrix2fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void UniformMatrix3fvDelegate(int location, int count, bool transpose, float* values); internal UniformMatrix3fvDelegate UniformMatrix3fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void UniformMatrix4fvDelegate(int location, int count, bool transpose, Matrix* values); internal UniformMatrix4fvDelegate UniformMatrix4fv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ScissorDelegate(int x, int y, int width, int height); internal ScissorDelegate Scissor; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ReadPixelsDelegate(int x, int y, int width, int height, PixelFormat format, PixelType type, IntPtr data); internal ReadPixelsDelegate ReadPixels; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BindBufferDelegate(BufferTarget target, int buffer); internal BindBufferDelegate BindBuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawElementsDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset); internal DrawElementsDelegate DrawElements; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawRangeElementsDelegate(GLPrimitiveType primitiveType, int start, int end, int count, DrawElementsType elementType, IntPtr offset); internal DrawRangeElementsDelegate DrawRangeElements; // OpenGL 2.0, GLES 3.0 [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawElementsBaseVertexDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset, int baseVertex); internal DrawElementsBaseVertexDelegate DrawElementsBaseVertex; // OpenGL 3.2, GLES 3.2, or GL_ARB_draw_elements_base_vertex [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawRangeElementsBaseVertexDelegate(GLPrimitiveType primitiveType, int start, int end, int count, DrawElementsType elementType, IntPtr offset, int baseVertex); internal DrawRangeElementsBaseVertexDelegate DrawRangeElementsBaseVertex; // OpenGL 3.2, GLES 3.2, or GL_ARB_draw_elements_base_vertex [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawArraysDelegate(GLPrimitiveType primitiveType, int offset, int count); internal DrawArraysDelegate DrawArrays; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenRenderbuffersDelegate(int count, int* prenderBuffers); internal GenRenderbuffersDelegate GenRenderbuffers; internal unsafe int GenRenderbuffer() { int renderBuffer; this.GenRenderbuffers(1, &renderBuffer); return renderBuffer; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BindRenderbufferDelegate(RenderbufferTarget target, int buffer); internal BindRenderbufferDelegate BindRenderbuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DeleteRenderbuffersDelegate(int count, int* pbuffers); internal DeleteRenderbuffersDelegate DeleteRenderbuffers; internal unsafe void DeleteRenderbuffer(int renderBuffer) { DeleteRenderbuffers(1, &renderBuffer); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void RenderbufferStorageMultisampleDelegate(RenderbufferTarget target, int sampleCount, RenderbufferStorage storage, int width, int height); internal RenderbufferStorageMultisampleDelegate RenderbufferStorageMultisample; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenFramebuffersDelegate(int count, int* pframeBuffers); internal GenFramebuffersDelegate GenFramebuffers; internal unsafe int GenFramebuffer() { int frameBuffer; this.GenFramebuffers(1, &frameBuffer); return frameBuffer; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BindFramebufferDelegate(FramebufferTarget target, int buffer); internal BindFramebufferDelegate BindFramebuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DeleteFramebuffersDelegate(int count, int* pbuffers); internal DeleteFramebuffersDelegate DeleteFramebuffers; internal unsafe void DeleteFramebuffer(int frameBuffer) { DeleteFramebuffers(1, &frameBuffer); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void InvalidateFramebufferDelegate(FramebufferTarget target, int numAttachments, FramebufferAttachment[] attachments); internal InvalidateFramebufferDelegate InvalidateFramebuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FramebufferTexture2DDelegate(FramebufferTarget target, FramebufferAttachment attachement, TextureTarget textureTarget, int texture, int level); internal FramebufferTexture2DDelegate FramebufferTexture2D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FramebufferTexture2DMultiSampleDelegate(FramebufferTarget target, FramebufferAttachment attachement, TextureTarget textureTarget, int texture, int level, int samples); internal FramebufferTexture2DMultiSampleDelegate FramebufferTexture2DMultiSample; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FramebufferRenderbufferDelegate(FramebufferTarget target, FramebufferAttachment attachement, RenderbufferTarget renderBufferTarget, int buffer); internal FramebufferRenderbufferDelegate FramebufferRenderbuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void RenderbufferStorageDelegate(RenderbufferTarget target, RenderbufferStorage storage, int width, int hegiht); internal RenderbufferStorageDelegate RenderbufferStorage; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GenerateMipmapDelegate(TextureTarget target); internal GenerateMipmapDelegate GenerateMipmap; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ReadBufferDelegate(ReadBufferMode buffer); internal ReadBufferDelegate ReadBuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawBufferDelegate(DrawBufferMode buffer); internal DrawBufferDelegate DrawBufferInternal; // OpenGL 2.0, GLES N/A. internal unsafe void DrawBuffer(DrawBufferMode buffer) { DrawBuffersInternal(1, &buffer); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DrawBuffersDelegate(int count, DrawBufferMode* pbuffers); internal DrawBuffersDelegate DrawBuffersInternal; // OpenGL 2.0, GLES 3.0. internal unsafe void DrawBuffers(int count, DrawBufferMode[] buffers) { fixed (DrawBufferMode* pbuffers = buffers) { DrawBuffersInternal(count, pbuffers); } } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlitFramebufferDelegate(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, ClearBufferMask mask, BlitFramebufferFilter filter); internal BlitFramebufferDelegate BlitFramebuffer; // OpenGL 3.0, GLES 3.0. [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate FramebufferErrorCode CheckFramebufferStatusDelegate(FramebufferTarget target); internal CheckFramebufferStatusDelegate CheckFramebufferStatus; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexParameterFloatDelegate(TextureTarget target, TextureParameterName name, float value); internal TexParameterFloatDelegate TexParameterf; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void TexParameterFloatArrayDelegate(TextureTarget target, TextureParameterName name, float* values); internal TexParameterFloatArrayDelegate TexParameterfv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexParameterIntDelegate(TextureTarget target, TextureParameterName name, int value); internal TexParameterIntDelegate TexParameteri; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenQueriesDelegate(int count, int* pqueries); internal GenQueriesDelegate GenQueries; internal unsafe int GenQuery() { int query; this.GenQueries(1, &query); return query; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BeginQueryDelegate(QueryTarget target, int queryId); internal BeginQueryDelegate BeginQuery; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void EndQueryDelegate(QueryTarget target); internal EndQueryDelegate EndQuery; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GetQueryObjectDelegate(int queryId, GetQueryObjectParam getparam, [Out] out int ready); internal GetQueryObjectDelegate GetQueryObject; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DeleteQueriesDelegate(int count, int* pqueries); internal DeleteQueriesDelegate DeleteQueries; internal unsafe void DeleteQuery(int query) { DeleteQueries(1, &query); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ActiveTextureDelegate(TextureUnit textureUnit); internal ActiveTextureDelegate ActiveTexture; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int CreateShaderDelegate(ShaderType type); internal CreateShaderDelegate CreateShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void ShaderSourceDelegate(int shaderId, int count, IntPtr code, int* length); internal ShaderSourceDelegate ShaderSourceInternal; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void CompileShaderDelegate(int shaderId); internal CompileShaderDelegate CompileShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GetShaderDelegate(int shaderId, int parameter, int* value); internal GetShaderDelegate GetShaderiv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GetShaderInfoLogDelegate(int shader, int bufSize, IntPtr length, StringBuilder infoLog); internal GetShaderInfoLogDelegate GetShaderInfoLogInternal; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate bool IsShaderDelegate(int shaderId); internal IsShaderDelegate IsShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DeleteShaderDelegate(int shaderId); internal DeleteShaderDelegate DeleteShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int GetAttribLocationDelegate(int programId, string name); internal GetAttribLocationDelegate GetAttribLocation; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int GetUniformLocationDelegate(int programId, string name); internal GetUniformLocationDelegate GetUniformLocation; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate bool IsProgramDelegate(int programId); internal IsProgramDelegate IsProgram; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DeleteProgramDelegate(int programId); internal DeleteProgramDelegate DeleteProgram; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate int CreateProgramDelegate(); internal CreateProgramDelegate CreateProgram; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void AttachShaderDelegate(int programId, int shaderId); internal AttachShaderDelegate AttachShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void LinkProgramDelegate(int programId); internal LinkProgramDelegate LinkProgram; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GetProgramDelegate(int programId, int name, int* linked); internal GetProgramDelegate GetProgramiv; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GetProgramInfoLogDelegate(int program, int bufSize, IntPtr length, StringBuilder infoLog); internal GetProgramInfoLogDelegate GetProgramInfoLogInternal; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DetachShaderDelegate(int programId, int shaderId); internal DetachShaderDelegate DetachShader; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlendColorDelegate(float r, float g, float b, float a); internal BlendColorDelegate BlendColor; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlendEquationSeparateDelegate(BlendEquationMode colorMode, BlendEquationMode alphaMode); internal BlendEquationSeparateDelegate BlendEquationSeparate; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlendEquationSeparateiDelegate(int buffer, BlendEquationMode colorMode, BlendEquationMode alphaMode); internal BlendEquationSeparateiDelegate BlendEquationSeparatei; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlendFuncSeparateDelegate(BlendingFunc colorSrc, BlendingFunc colorDst, BlendingFunc alphaSrc, BlendingFunc alphaDst); internal BlendFuncSeparateDelegate BlendFuncSeparate; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BlendFuncSeparateiDelegate(int buffer, BlendingFunc colorSrc, BlendingFunc colorDst, BlendingFunc alphaSrc, BlendingFunc alphaDst); internal BlendFuncSeparateiDelegate BlendFuncSeparatei; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void ColorMaskDelegate(bool r, bool g, bool b, bool a); internal ColorMaskDelegate ColorMask; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DepthFuncDelegate(ComparisonFunc function); internal DepthFuncDelegate DepthFunc; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DepthMaskDelegate(bool enabled); internal DepthMaskDelegate DepthMask; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void StencilFuncSeparateDelegate(StencilFace face, ComparisonFunc function, int referenceStencil, int mask); internal StencilFuncSeparateDelegate StencilFuncSeparate; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void StencilOpSeparateDelegate(StencilFace face, StencilOp stencilfail, StencilOp depthFail, StencilOp pass); internal StencilOpSeparateDelegate StencilOpSeparate; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void StencilFuncDelegate(ComparisonFunc function, int referenceStencil, int mask); internal StencilFuncDelegate StencilFunc; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void StencilOpDelegate(StencilOp stencilfail, StencilOp depthFail, StencilOp pass); internal StencilOpDelegate StencilOp; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void StencilMaskDelegate(int mask); internal StencilMaskDelegate StencilMask; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void CompressedTexImage2DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat, int width, int height, int border, int size, IntPtr data); internal CompressedTexImage2DDelegate CompressedTexImage2D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexImage2DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat, int width, int height, int border, PixelFormat format, PixelType pixelType, IntPtr data); internal TexImage2DDelegate TexImage2D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void CompressedTexSubImage2DDelegate(TextureTarget target, int level, int x, int y, int width, int height, PixelInternalFormat format, int size, IntPtr data); internal CompressedTexSubImage2DDelegate CompressedTexSubImage2D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexSubImage2DDelegate(TextureTarget target, int level, int x, int y, int width, int height, PixelFormat format, PixelType pixelType, IntPtr data); internal TexSubImage2DDelegate TexSubImage2D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void PixelStoreDelegate(PixelStoreParameter parameter, int size); internal PixelStoreDelegate PixelStore; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void FinishDelegate(); internal FinishDelegate Finish; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GetTexImageDelegate(TextureTarget target, int level, PixelFormat format, PixelType type, [Out] IntPtr pixels); internal GetTexImageDelegate GetTexImage; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void GetCompressedTexImageDelegate(TextureTarget target, int level, [Out] IntPtr pixels); internal GetCompressedTexImageDelegate GetCompressedTexImage; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexImage3DDelegate(TextureTarget target, int level, PixelInternalFormat internalFormat, int width, int height, int depth, int border, PixelFormat format, PixelType pixelType, IntPtr data); internal TexImage3DDelegate TexImage3D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void TexSubImage3DDelegate(TextureTarget target, int level, int x, int y, int z, int width, int height, int depth, PixelFormat format, PixelType pixelType, IntPtr data); internal TexSubImage3DDelegate TexSubImage3D; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DeleteTexturesDelegate(int count, int* ptextures); internal DeleteTexturesDelegate DeleteTextures; internal unsafe void DeleteTexture(int texture) { DeleteTextures(1, &texture); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenBuffersDelegate(int count, int* pbuffers); internal GenBuffersDelegate GenBuffers; internal unsafe int GenBuffer() { int buffer; this.GenBuffers(1, &buffer); return buffer; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BufferDataDelegate(BufferTarget target, IntPtr size, IntPtr n, BufferUsageHint usage); internal BufferDataDelegate BufferData; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate IntPtr MapBufferDelegate(BufferTarget target, BufferAccess access); internal MapBufferDelegate MapBuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate IntPtr MapBufferRangeDelegate(BufferTarget target, IntPtr offset, IntPtr length, BufferRangeAccess access); internal MapBufferRangeDelegate MapBufferRange; // OpenGL 2.0, GLES 3.0 [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate bool UnmapBufferDelegate(BufferTarget target); internal UnmapBufferDelegate UnmapBuffer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void BufferSubDataDelegate(BufferTarget target, IntPtr offset, IntPtr size, IntPtr data); internal BufferSubDataDelegate BufferSubData; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void DeleteBuffersDelegate(int count, int* pbuffers); internal DeleteBuffersDelegate DeleteBuffers; internal unsafe void DeleteBuffer(int buffer) { DeleteBuffers(1, &buffer); } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void VertexAttribPointerDelegate(int location, int elementCount, VertexAttribPointerType type, bool normalize, int stride, IntPtr data); internal VertexAttribPointerDelegate VertexAttribPointer; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawElementsInstancedDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset, int instanceCount); internal DrawElementsInstancedDelegate DrawElementsInstanced; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawElementsInstancedBaseVertexDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset, int instanceCount, int baseVertex); internal DrawElementsInstancedBaseVertexDelegate DrawElementsInstancedBaseVertex; // OpenGL 3.2, GLES 3.2. [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void DrawElementsInstancedBaseInstanceDelegate(GLPrimitiveType primitiveType, int count, DrawElementsType elementType, IntPtr offset, int instanceCount, int baseInstance); internal DrawElementsInstancedBaseInstanceDelegate DrawElementsInstancedBaseInstance; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal delegate void VertexAttribDivisorDelegate(int location, int frequency); internal VertexAttribDivisorDelegate VertexAttribDivisor; [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void GenVertexArraysDelegate(int count, uint* pVertexArrays); internal GenVertexArraysDelegate GenVertexArrays; // OpenGL 3.0, GLES 3.0. internal unsafe uint GenVertexArray() { uint VertexArray; this.GenVertexArrays(1, &VertexArray); return VertexArray; } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void BindVertexArrayDelegate(uint vertexArray); internal BindVertexArrayDelegate BindVertexArray; // OpenGL 3.0, GLES 3.0. [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void BindAttribLocationDelegate(uint programId, uint index, void* name); internal BindAttribLocationDelegate BindAttribLocationInternal; // OpenGL 2.0, GLES 2.0. internal unsafe void BindAttribLocation(uint programId, uint AttributeLocation, string name) { fixed (void* pData = name) { BindAttribLocationInternal(programId, AttributeLocation, pData); } } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate uint GetUniformBlockIndexDelegate(uint programId, void* name); internal GetUniformBlockIndexDelegate GetUniformBlockIndexInternal; // OpenGL 3.1, GLES 3.0. internal unsafe uint GetUniformBlockIndex(uint programId, string name) { fixed (void* pData = name) { uint index = GetUniformBlockIndexInternal(programId, pData); return index; } } [System.Security.SuppressUnmanagedCodeSecurity()] [UnmanagedFunctionPointer(callingConvention)] [MonoNativeFunctionWrapper] internal unsafe delegate void UniformBlockBindingDelegate(uint programId, uint uniformBlockIndex, uint uniformBlockBinding); internal UniformBlockBindingDelegate UniformBlockBinding; // OpenGL 3.1, GLES 3.0. #if DEBUG [UnmanagedFunctionPointer(CallingConvention.StdCall)] delegate void DebugMessageCallbackProc(int source, int type, int id, int severity, int length, IntPtr message, IntPtr userParam); static DebugMessageCallbackProc DebugProc; [System.Security.SuppressUnmanagedCodeSecurity()] [MonoNativeFunctionWrapper] delegate void DebugMessageCallbackDelegate(DebugMessageCallbackProc callback, IntPtr userParam); static DebugMessageCallbackDelegate DebugMessageCallback; internal delegate void ErrorDelegate(string message); internal static event ErrorDelegate OnError; static void DebugMessageCallbackHandler(int source, int type, int id, int severity, int length, IntPtr message, IntPtr userParam) { string errorMessage = Marshal.PtrToStringAnsi(message); System.Diagnostics.Debug.WriteLine(errorMessage); if (OnError != null) OnError(errorMessage); } #endif internal int SwapInterval { get; set; } private void LoadEntryPoints() { if (Viewport == null) Viewport = LoadFunctionOrNull("glViewport"); if (Scissor == null) Scissor = LoadFunctionOrNull("glScissor"); if (MakeCurrent == null) MakeCurrent = LoadFunctionOrNull("glMakeCurrent"); GetError = LoadFunctionOrNull("glGetError"); TexParameterf = LoadFunctionOrNull("glTexParameterf"); TexParameterfv = LoadFunctionOrNull("glTexParameterfv"); TexParameteri = LoadFunctionOrNull("glTexParameteri"); EnableVertexAttribArray = LoadFunctionOrNull("glEnableVertexAttribArray"); DisableVertexAttribArray = LoadFunctionOrNull("glDisableVertexAttribArray"); GetIntegerv = LoadFunctionOrNull("glGetIntegerv"); GetStringInternal = LoadFunctionOrNull("glGetString"); ClearDepth = LoadFunctionOrNull("glClearDepth"); if (ClearDepth == null) ClearDepth = LoadFunctionOrNull("glClearDepthf"); DepthRanged = LoadFunctionOrNull("glDepthRange"); DepthRangef = LoadFunctionOrNull("glDepthRangef"); Clear = LoadFunctionOrNull("glClear"); ClearColor = LoadFunctionOrNull("glClearColor"); ClearStencil = LoadFunctionOrNull("glClearStencil"); Flush = LoadFunctionOrNull("glFlush"); GenTextures = LoadFunctionOrNull("glGenTextures"); BindTexture = LoadFunctionOrNull("glBindTexture"); Enable = LoadFunctionOrNull("glEnable"); Disable = LoadFunctionOrNull("glDisable"); CullFace = LoadFunctionOrNull("glCullFace"); FrontFace = LoadFunctionOrNull("glFrontFace"); PolygonMode = LoadFunctionOrNull("glPolygonMode"); PolygonOffset = LoadFunctionOrNull("glPolygonOffset"); BindBuffer = LoadFunctionOrNull("glBindBuffer"); ReadBuffer = LoadFunctionOrNull("glReadBuffer"); DrawBufferInternal = LoadFunctionOrNull("glDrawBuffer"); DrawBuffersInternal = LoadFunctionOrNull("glDrawBuffers"); DrawElements = LoadFunctionOrNull("glDrawElements"); DrawArrays = LoadFunctionOrNull("glDrawArrays"); // OpenGL >= 2.0, GLES >= 3.0 DrawRangeElements = LoadFunctionOrNull("glDrawRangeElements"); // OpenGL >= 3.2, GLES >= 3.2 or GL_ARB_draw_elements_base_vertex DrawElementsBaseVertex = LoadFunctionOrNull("glDrawElementsBaseVertex"); DrawRangeElementsBaseVertex = LoadFunctionOrNull("glDrawRangeElementsBaseVertex"); // uniforms OpenGL Version >= 2.0 Uniform1i = LoadFunctionOrNull("glUniform1i"); Uniform1f = LoadFunctionOrNull("glUniform1f"); Uniform1iv = LoadFunctionOrNull("glUniform1iv"); Uniform1fv = LoadFunctionOrNull("glUniform1fv"); Uniform2fv = LoadFunctionOrNull("glUniform2fv"); Uniform3fv = LoadFunctionOrNull("glUniform3fv"); Uniform4fv = LoadFunctionOrNull("glUniform4fv"); UniformMatrix2fv = LoadFunctionOrNull("glUniformMatrix2fv"); UniformMatrix3fv = LoadFunctionOrNull("glUniformMatrix3fv"); UniformMatrix4fv = LoadFunctionOrNull("glUniformMatrix4fv"); ReadPixels = LoadFunctionOrNull("glReadPixels"); // uniforms OpenGL Version >= 2.1 // ... UniformMatrix 2x3,2x4, 3x2, 3x4, 4x2, 4x3 // uniforms OpenGL Version >= 3.0 // ... Uniform 1ui,1uiv,2ui,2uiv,2ui,2uiv,2ui,2uiv // Render Target Support. These might be null if they are not supported GenRenderbuffers = LoadFunctionOrNull("glGenRenderbuffers"); BindRenderbuffer = LoadFunctionOrNull("glBindRenderbuffer"); DeleteRenderbuffers = LoadFunctionOrNull("glDeleteRenderbuffers"); GenFramebuffers = LoadFunctionOrNull("glGenFramebuffers"); BindFramebuffer = LoadFunctionOrNull("glBindFramebuffer"); DeleteFramebuffers = LoadFunctionOrNull("glDeleteFramebuffers"); FramebufferTexture2D = LoadFunctionOrNull("glFramebufferTexture2D"); FramebufferRenderbuffer = LoadFunctionOrNull("glFramebufferRenderbuffer"); RenderbufferStorage = LoadFunctionOrNull("glRenderbufferStorage"); RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisample"); GenerateMipmap = LoadFunctionOrNull("glGenerateMipmap"); BlitFramebuffer = LoadFunctionOrNull("glBlitFramebuffer"); CheckFramebufferStatus = LoadFunctionOrNull("glCheckFramebufferStatus"); GenQueries = LoadFunctionOrNull("glGenQueries"); BeginQuery = LoadFunctionOrNull("glBeginQuery"); EndQuery = LoadFunctionOrNull("glEndQuery"); GetQueryObject = LoadFunctionOrNull("glGetQueryObjectuiv"); if (GetQueryObject == null) GetQueryObject = LoadFunctionOrNull("glGetQueryObjectivARB"); if (GetQueryObject == null) GetQueryObject = LoadFunctionOrNull("glGetQueryObjectiv"); DeleteQueries = LoadFunctionOrNull("glDeleteQueries"); ActiveTexture = LoadFunctionOrNull("glActiveTexture"); CreateShader = LoadFunctionOrNull("glCreateShader"); ShaderSourceInternal = LoadFunctionOrNull("glShaderSource"); CompileShader = LoadFunctionOrNull("glCompileShader"); GetShaderiv = LoadFunctionOrNull("glGetShaderiv"); GetShaderInfoLogInternal = LoadFunctionOrNull("glGetShaderInfoLog"); IsShader = LoadFunctionOrNull("glIsShader"); DeleteShader = LoadFunctionOrNull("glDeleteShader"); GetAttribLocation = LoadFunctionOrNull("glGetAttribLocation"); GetUniformLocation = LoadFunctionOrNull("glGetUniformLocation"); IsProgram = LoadFunctionOrNull("glIsProgram"); DeleteProgram = LoadFunctionOrNull("glDeleteProgram"); CreateProgram = LoadFunctionOrNull("glCreateProgram"); AttachShader = LoadFunctionOrNull("glAttachShader"); UseProgram = LoadFunctionOrNull("glUseProgram"); LinkProgram = LoadFunctionOrNull("glLinkProgram"); GetProgramiv = LoadFunctionOrNull("glGetProgramiv"); GetProgramInfoLogInternal = LoadFunctionOrNull("glGetProgramInfoLog"); DetachShader = LoadFunctionOrNull("glDetachShader"); BlendColor = LoadFunctionOrNull("glBlendColor"); BlendEquationSeparate = LoadFunctionOrNull("glBlendEquationSeparate"); BlendEquationSeparatei = LoadFunctionOrNull("glBlendEquationSeparatei"); BlendFuncSeparate = LoadFunctionOrNull("glBlendFuncSeparate"); BlendFuncSeparatei = LoadFunctionOrNull("glBlendFuncSeparatei"); ColorMask = LoadFunctionOrNull("glColorMask"); DepthFunc = LoadFunctionOrNull("glDepthFunc"); DepthMask = LoadFunctionOrNull("glDepthMask"); StencilFuncSeparate = LoadFunctionOrNull("glStencilFuncSeparate"); StencilOpSeparate = LoadFunctionOrNull("glStencilOpSeparate"); StencilFunc = LoadFunctionOrNull("glStencilFunc"); StencilOp = LoadFunctionOrNull("glStencilOp"); StencilMask = LoadFunctionOrNull("glStencilMask"); CompressedTexImage2D = LoadFunctionOrNull("glCompressedTexImage2D"); TexImage2D = LoadFunctionOrNull("glTexImage2D"); CompressedTexSubImage2D = LoadFunctionOrNull("glCompressedTexSubImage2D"); TexSubImage2D = LoadFunctionOrNull("glTexSubImage2D"); PixelStore = LoadFunctionOrNull("glPixelStorei"); Finish = LoadFunctionOrNull("glFinish"); GetTexImage = LoadFunctionOrNull("glGetTexImage"); GetCompressedTexImage = LoadFunctionOrNull("glGetCompressedTexImage"); TexImage3D = LoadFunctionOrNull("glTexImage3D"); TexSubImage3D = LoadFunctionOrNull("glTexSubImage3D"); DeleteTextures = LoadFunctionOrNull("glDeleteTextures"); GenBuffers = LoadFunctionOrNull("glGenBuffers"); BufferData = LoadFunctionOrNull("glBufferData"); MapBuffer = LoadFunctionOrNull("glMapBuffer"); UnmapBuffer = LoadFunctionOrNull("glUnmapBuffer"); BufferSubData = LoadFunctionOrNull("glBufferSubData"); DeleteBuffers = LoadFunctionOrNull("glDeleteBuffers"); // OpenGL >= 2.0, GLES >= 3.0 MapBufferRange = LoadFunctionOrNull("glMapBufferRange"); VertexAttribPointer = LoadFunctionOrNull("glVertexAttribPointer"); GenVertexArrays = LoadFunctionOrNull("glGenVertexArrays"); BindVertexArray = LoadFunctionOrNull("glBindVertexArray"); BindAttribLocationInternal = LoadFunctionOrNull("glBindAttribLocation"); GetUniformBlockIndexInternal = LoadFunctionOrNull("glGetUniformBlockIndex"); UniformBlockBinding = LoadFunctionOrNull("glUniformBlockBinding"); // Instanced drawing requires GL 3.2 or up, if the either of the following entry points can not be loaded // this will get flagged by setting SupportsInstancing in GraphicsCapabilities to false. try { DrawElementsInstanced = LoadFunctionOrNull("glDrawElementsInstanced"); VertexAttribDivisor = LoadFunctionOrNull("glVertexAttribDivisor"); DrawElementsInstancedBaseInstance = LoadFunctionOrNull("glDrawElementsInstancedBaseInstance"); } catch (EntryPointNotFoundException) { // this will be detected in the initialization of GraphicsCapabilities } #if DEBUG try { DebugMessageCallback = LoadFunctionOrNull("glDebugMessageCallback"); if (DebugMessageCallback != null) { DebugProc = DebugMessageCallbackHandler; DebugMessageCallback(DebugProc, IntPtr.Zero); Enable(EnableCap.DebugOutput); Enable(EnableCap.DebugOutputSynchronous); } } catch (EntryPointNotFoundException) { // Ignore the debug message callback if the entry point can not be found } #endif if (BoundApi == RenderApi.ES) { InvalidateFramebuffer = LoadFunctionOrNull("glDiscardFramebufferEXT"); } } private HashSet _extensions; internal HashSet Extensions { get { return _extensions; } } internal bool ContainsExtension(string extension) { return Extensions.Contains(extension); } [Conditional("DEBUG")] void LogExtensions(string extstring, HashSet extensions) { #if __ANDROID__ Android.Util.Log.Verbose("GL","Supported Extensions"); foreach (string ext in extensions) Android.Util.Log.Verbose("GL", " " + ext); #else System.Diagnostics.Debug.WriteLine("Supported GL Extensions"); System.Diagnostics.Debug.WriteLine(" " + extstring.Replace(" ", "\n ")); #endif } internal void InitExtensions() { if (Extensions != null) throw new InvalidOperationException("Extensions allready initialized."); string extstring = this.GetString(StringName.Extensions); ErrorCode error = this.GetError(); if (error != ErrorCode.NO_ERROR || string.IsNullOrEmpty(extstring)) return; string[] extList = extstring.Split(' '); _extensions = new HashSet(extList); LogExtensions(extstring, _extensions); if (GenRenderbuffers == null && Extensions.Contains("GL_EXT_framebuffer_object")) { GenRenderbuffers = LoadFunctionOrNull("glGenRenderbuffersEXT"); BindRenderbuffer = LoadFunctionOrNull("glBindRenderbufferEXT"); DeleteRenderbuffers = LoadFunctionOrNull("glDeleteRenderbuffersEXT"); GenFramebuffers = LoadFunctionOrNull("glGenFramebuffersEXT"); BindFramebuffer = LoadFunctionOrNull("glBindFramebufferEXT"); DeleteFramebuffers = LoadFunctionOrNull("glDeleteFramebuffersEXT"); FramebufferTexture2D = LoadFunctionOrNull("glFramebufferTexture2DEXT"); FramebufferRenderbuffer = LoadFunctionOrNull("glFramebufferRenderbufferEXT"); RenderbufferStorage = LoadFunctionOrNull("glRenderbufferStorageEXT"); RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisampleEXT"); GenerateMipmap = LoadFunctionOrNull("glGenerateMipmapEXT"); BlitFramebuffer = LoadFunctionOrNull("glBlitFramebufferEXT"); CheckFramebufferStatus = LoadFunctionOrNull("glCheckFramebufferStatusEXT"); } if (RenderbufferStorageMultisample == null) { if (Extensions.Contains("GL_APPLE_framebuffer_multisample")) { RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisampleAPPLE"); BlitFramebuffer = LoadFunctionOrNull("glResolveMultisampleFramebufferAPPLE"); } else if (Extensions.Contains("GL_EXT_multisampled_render_to_texture")) { RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisampleEXT"); FramebufferTexture2DMultiSample = LoadFunctionOrNull("glFramebufferTexture2DMultisampleEXT"); } else if (Extensions.Contains("GL_IMG_multisampled_render_to_texture")) { RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisampleIMG"); FramebufferTexture2DMultiSample = LoadFunctionOrNull("glFramebufferTexture2DMultisampleIMG"); } else if (Extensions.Contains("GL_NV_framebuffer_multisample")) { RenderbufferStorageMultisample = LoadFunctionOrNull("glRenderbufferStorageMultisampleNV"); BlitFramebuffer = LoadFunctionOrNull("glBlitFramebufferNV"); } } if (BlendFuncSeparatei == null && Extensions.Contains("GL_ARB_draw_buffers_blend")) BlendFuncSeparatei = LoadFunctionOrNull("BlendFuncSeparateiARB"); if (BlendEquationSeparatei == null && Extensions.Contains("GL_ARB_draw_buffers_blend")) BlendEquationSeparatei = LoadFunctionOrNull("BlendEquationSeparateiARB"); if (DrawElementsBaseVertex == null && Extensions.Contains("GL_ARB_draw_elements_base_vertex")) DrawElementsBaseVertex = LoadFunctionOrNull("glDrawElementsBaseVertex"); if (DrawRangeElementsBaseVertex == null && Extensions.Contains("GL_ARB_draw_elements_base_vertex")) DrawRangeElementsBaseVertex = LoadFunctionOrNull("glDrawRangeElementsBaseVertex"); } /* Helper Functions */ internal void DepthRange(float min, float max) { if (BoundApi == RenderApi.ES) DepthRangef(min, max); else DepthRanged(min, max); } internal void Uniform1(int location, int value) { Uniform1i(location, value); } internal unsafe void Uniform4(int location, Vector4 value) { Uniform4fv(location, 1, &value); } internal void Uniform1(int location, float value) { Uniform1f(location, value); } internal unsafe void Uniform1(int location, int count, int* value) { Uniform1iv(location, count, value); } internal unsafe void Uniform1(int location, int count, float* value) { Uniform1fv(location, count, value); } internal unsafe void Uniform2(int location, int count, Vector2* value) { Uniform2fv(location, count, value); } internal unsafe void Uniform3(int location, int count, Vector3* value) { Uniform3fv(location, count, value); } internal unsafe void Uniform4(int location, int count, Vector4* value) { Uniform4fv(location, count, value); } internal unsafe void UniformMatrix2x2(int location, int count, bool transpose, float* value) { UniformMatrix2fv(location, count, transpose, value); } internal unsafe void UniformMatrix3x3(int location, int count, bool transpose, float* value) { UniformMatrix3fv(location, count, transpose, value); } internal unsafe void UniformMatrix4x4(int location, int count, bool transpose, Matrix* value) { UniformMatrix4fv(location, count, transpose, value); } internal string GetString(StringName name) { IntPtr pStr = GetStringInternal(name); return Marshal.PtrToStringAnsi(pStr); } internal string GetProgramInfoLog(int programId) { int length = 0; GetProgram(programId, GetProgramParameterName.LogLength, out length); StringBuilder sb = new StringBuilder(length, Math.Max(length, 1)); GetProgramInfoLogInternal(programId, length, IntPtr.Zero, sb); return sb.ToString(); } internal string GetShaderInfoLog(int shaderId) { int length = 0; GetShader(shaderId, ShaderParameter.LogLength, out length); StringBuilder sb = new StringBuilder(length, Math.Max(length, 1)); GetShaderInfoLogInternal(shaderId, length, IntPtr.Zero, sb); return sb.ToString(); } internal void ShaderSource(int shaderId, byte[] shaderBytecode) { ShaderSource(shaderId, shaderBytecode, 0, shaderBytecode.Length); } internal unsafe void ShaderSource(int shaderId, byte[] shaderBytecode, int index, int count) { fixed (void* pData = &shaderBytecode[index]) { void** ppData = &pData; ShaderSourceInternal(shaderId, 1, new IntPtr(&pData), &count); } } internal unsafe void GetShader(int shaderId, ShaderParameter name, out int result) { fixed (int* ptr = &result) { GetShaderiv(shaderId, (int)name, ptr); } } internal unsafe void GetProgram(int programId, GetProgramParameterName name, out int result) { fixed (int* ptr = &result) { GetProgramiv(programId, (int)name, ptr); } } internal unsafe void GetInteger(GetPName name, out int value) { fixed (int* ptr = &value) { GetIntegerv((int)name, ptr); } } internal unsafe void GetInteger(int name, out int value) { fixed (int* ptr = &value) { GetIntegerv(name, ptr); } } internal void TexParameter(TextureTarget target, TextureParameterName name, float value) { TexParameterf(target, name, value); } internal unsafe void TexParameter(TextureTarget target, TextureParameterName name, float[] values) { fixed (float* ptr = &values[0]) { TexParameterfv(target, name, ptr); } } internal void TexParameter(TextureTarget target, TextureParameterName name, int value) { TexParameteri(target, name, value); } [Conditional("DEBUG")] [DebuggerHidden] public void CheckGLError() { ErrorCode error = this.GetError(); if (error == ErrorCode.NO_ERROR) return; string errorMsg = String.Format("GL_ERROR: {0} (0x{1:X4})", error, (int)error); //Console.WriteLine(errorMsg); throw new OpenGLException("GL.GetError() returned " + errorMsg); } [Conditional("DEBUG")] public void LogGLError(string location) { try { this.CheckGLError(); } catch (OpenGLException ex) { #if ANDROID // Todo: Add generic logging interface Android.Util.Log.Debug("KNI", "OpenGLException at " + location + " - " + ex.Message); #else Debug.WriteLine("OpenGLException at " + location + " - " + ex.Message); #endif } } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ConcreteConstantBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy { private ShaderProgram _shaderProgram = null; private int _location; static ConcreteConstantBuffer _lastConstantBufferApplied = null; public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats) : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats) { } private ConcreteConstantBuffer(ConcreteConstantBuffer source) : base(source) { } public override object Clone() { return new ConcreteConstantBuffer(this); } internal unsafe void PlatformApply(ConcreteGraphicsContextGL ccontextStrategy, ShaderProgram shaderProgram, int slot) { System.Diagnostics.Debug.Assert(slot == 0); bool isSameShaderProgram = _shaderProgram == shaderProgram; if (!isSameShaderProgram) { // If the program changed then lookup the uniform location again. int location = ccontextStrategy.GetUniformLocation(shaderProgram, Name); if (location == -1) return; _shaderProgram = shaderProgram; _location = location; } if (base.Dirty // If the shader program changed then apply the buffer. || !isSameShaderProgram // If the shader program is the same, the effect may still be different and have different values in the buffer || !Object.ReferenceEquals(this, ConcreteConstantBuffer._lastConstantBufferApplied) ) { var GL = ccontextStrategy.GL; fixed (void* bytePtr = this.BufferData) { // TODO: We need to know the type of buffer float/int/bool // and cast this correctly... else it doesn't work as i guess // GL is checking the type of the uniform. System.Diagnostics.Debug.Assert((this.BufferData.Length % 16) == 0); GL.Uniform4(_location, this.BufferData.Length >> 4, (Vector4*)bytePtr); GL.CheckGLError(); } base.Dirty = false; ConcreteConstantBuffer._lastConstantBufferApplied = this; } } public override void PlatformContextLost() { // Force the uniform location to be looked up again _shaderProgram = null; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ConcreteConstantBufferCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy { private uint _valid; internal uint InternalValid { get { return this._valid; } } internal ConcreteConstantBufferCollection(int capacity) : base(capacity) { // hard limit of 32 because of _valid flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _valid = 0; } public override ConstantBuffer this[int index] { get { return base[index]; } set { if (base[index] != value) { uint mask = ((uint)1) << index; base[index] = value; if (value != null) _valid |= mask; else _valid &= ~mask; } } } public override void Clear() { for (int slot = 0; slot < base.Length; slot++) base[slot] = null; _valid = 0; } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ConcretePixelShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcretePixelShader : ConcreteShader { internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { base.CreateShader(contextStrategy, ShaderType.FragmentShader, shaderVersion, shaderBytecode); } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ConcreteShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Text.RegularExpressions; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteShader : ShaderStrategy { // The shader handle. private int _shaderHandle = -1; internal int ShaderHandle { get { return _shaderHandle; } } internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { GraphicsProfile graphicsProfile = this.GraphicsDeviceStrategy.GraphicsProfile; ShaderVersion maxVersion = MaxShaderVersions[graphicsProfile]; if (shaderVersion != default && shaderVersion > maxVersion) { throw new NotSupportedException( $"Shader model {shaderVersion} is not supported by the current graphics profile '{graphicsProfile}'."); } } internal void CreateShader(GraphicsContextStrategy contextStrategy, ShaderType shaderType, ShaderVersion shaderVersion, byte[] shaderBytecode) { bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { var GL = contextStrategy.ToConcrete().GL; _shaderHandle = GL.CreateShader(shaderType); GL.CheckGLError(); if (shaderVersion == default) // Handle legacy MGFX { if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES && this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef) { string glslCode = System.Text.Encoding.ASCII.GetString(shaderBytecode); // GLES 3.00 is required for gl_FragData string glsl300esCode = ConvertGLSLToGLSL300es(shaderType, glslCode); shaderBytecode = System.Text.Encoding.ASCII.GetBytes(glsl300esCode); GL.ShaderSource(_shaderHandle, shaderBytecode); GL.CheckGLError(); } else { GL.ShaderSource(_shaderHandle, shaderBytecode); GL.CheckGLError(); } } else // Handle KNIFX { int bytecodeOffset; if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.GLES || this.GraphicsDevice.Adapter.Backend == GraphicsBackend.WebGL) { if (this.GraphicsDevice.GraphicsProfile >= GraphicsProfile.HiDef) { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 3, minor: 0, es: true); } else { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 0, es: false); } } else //if (this.GraphicsDevice.Adapter.Backend == GraphicsBackend.OpenGL) { bytecodeOffset = FindShaderByteCode(shaderBytecode, major: 1, minor: 1, es: false); } int bytecodeLength = BitConverter.ToInt32(shaderBytecode, bytecodeOffset); bytecodeOffset += 4; GL.ShaderSource(_shaderHandle, shaderBytecode, bytecodeOffset, bytecodeLength); GL.CheckGLError(); } GL.CompileShader(_shaderHandle); GL.CheckGLError(); int compiled = 0; GL.GetShader(_shaderHandle, ShaderParameter.CompileStatus, out compiled); GL.CheckGLError(); if (compiled != (int)Bool.True) { string log = GL.GetShaderInfoLog(_shaderHandle); Debug.WriteLine(log); if (!GraphicsDevice.IsDisposed) { if (GL.IsShader(_shaderHandle)) { GL.DeleteShader(_shaderHandle); GL.CheckGLError(); } } _shaderHandle = -1; throw new InvalidOperationException("Shader Compilation Failed." + Environment.NewLine + log); } } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } private int FindShaderByteCode(byte[] shaderBytecode, int major, int minor, bool es) { int pos = 0; short reserved0 = BitConverter.ToInt16(shaderBytecode, pos); pos += 2; if (reserved0 != 0) throw new Exception("Invalid shader bytecode"); short count = BitConverter.ToInt16(shaderBytecode, pos); pos += 2; for (int i = 0; i < count; i++) { int major0 = shaderBytecode[pos]; pos += 1; int minor0 = shaderBytecode[pos]; pos += 1; bool es0 = BitConverter.ToBoolean(shaderBytecode, pos); pos += 1; int bytecodeOffset0 = BitConverter.ToInt32(shaderBytecode, pos); pos += 4; if (major == major0 && minor == minor0 && es == es0) { return bytecodeOffset0; } } throw new InvalidOperationException("GLSL bytecode not found."); } static Regex rgxOES = new Regex( @"^#extension GL_OES_standard_derivatives : enable\n", RegexOptions.Multiline); static Regex rgxPrecision = new Regex( @"precision mediump (float|int);", RegexOptions.Multiline); static Regex rgxAttribute = new Regex( @"^attribute(?=\s)", RegexOptions.Multiline); static Regex rgxVarying = new Regex( @"^varying(?=\s)", RegexOptions.Multiline); static Regex rgxFragColor = new Regex( @"^#define (\w+) gl_FragColor", RegexOptions.Multiline); static Regex rgxFragData = new Regex( @"^#define (\w+) gl_FragData\[(\d+)\]", RegexOptions.Multiline); static Regex rgxTexture = new Regex( @"texture(2D|3D|Cube)(?=\()", RegexOptions.Multiline); private string ConvertGLSLToGLSL300es(ShaderType shaderType, string glslCode) { switch (shaderType) { case ShaderType.VertexShader: { glslCode = rgxVarying.Replace(glslCode, "out"); } break; case ShaderType.FragmentShader: { glslCode = rgxOES.Replace(glslCode, ""); glslCode = rgxVarying.Replace(glslCode, "in"); glslCode = rgxFragColor.Replace(glslCode, "out vec4 $1;"); glslCode = rgxFragData .Replace(glslCode, "layout(location=$2) out vec4 $1;"); } break; } glslCode = rgxPrecision.Replace(glslCode, "precision highp $1;"); glslCode = rgxAttribute.Replace(glslCode, "in"); glslCode = rgxTexture.Replace(glslCode, "texture"); glslCode = "#version 300 es\n" + glslCode; return glslCode; } protected override void PlatformGraphicsContextLost() { var GL = _contextStrategy.ToConcrete().GL; if (_shaderHandle != -1) { if (GL.IsShader(_shaderHandle)) { GL.DeleteShader(_shaderHandle); GL.CheckGLError(); } _shaderHandle = -1; } base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } if (_shaderHandle != -1) { _contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = _contextStrategy.ToConcrete().GL; if (GL.IsShader(_shaderHandle)) { GL.DeleteShader(_shaderHandle); GL.CheckGLError(); } } finally { _contextStrategy.ToConcrete().UnbindDisposeContext(); } } _shaderHandle = -1; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ConcreteVertexShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteVertexShader : ConcreteShader { private readonly Dictionary _vertexAttribInfoCache = new Dictionary(); internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { base.CreateShader(contextStrategy, ShaderType.VertexShader, shaderVersion, shaderBytecode); } private int GetAttributeLocation(VertexElementUsage usage, int index) { for (int i = 0; i < Attributes.Length; i++) { if ((Attributes[i].usage == usage) && (Attributes[i].index == index)) return Attributes[i].location; } return -1; } internal VertexDeclarationAttributeInfo GetVertexAttribInfo(ConcreteGraphicsContextGL concreteGraphicsContextGL, VertexDeclaration vertexDeclaration) { VertexElement[] vertexElements = ((IPlatformVertexDeclaration)vertexDeclaration).InternalVertexElements; VertexDeclarationAttributeInfo vertexAttribInfo; if (_vertexAttribInfoCache.TryGetValue(vertexElements, out vertexAttribInfo)) return vertexAttribInfo; int maxVertexBufferSlots = concreteGraphicsContextGL.Capabilities.MaxVertexBufferSlots; vertexAttribInfo = ConcreteVertexShader.CreateVertexAttribInfo(this, vertexElements, maxVertexBufferSlots); _vertexAttribInfoCache.Add(vertexElements, vertexAttribInfo); return vertexAttribInfo; } private static VertexDeclarationAttributeInfo CreateVertexAttribInfo(ConcreteVertexShader vertexShaderStrategy, VertexElement[] vertexElements, int maxVertexBufferSlots) { // Get the vertex attribute info and cache it VertexDeclarationAttributeInfo attrInfo = new VertexDeclarationAttributeInfo(maxVertexBufferSlots); for (int v = 0; v < vertexElements.Length; v++) { int attributeLocation = vertexShaderStrategy.GetAttributeLocation(vertexElements[v].VertexElementUsage, vertexElements[v].UsageIndex); // XNA appears to ignore usages it can't find a match for, so we will do the same if (attributeLocation < 0) continue; VertexDeclarationAttributeInfoElement vertexAttribInfoElement = new VertexDeclarationAttributeInfoElement(); vertexAttribInfoElement.NumberOfElements = vertexElements[v].VertexElementFormat.ToGLNumberOfElements(); vertexAttribInfoElement.VertexAttribPointerType = vertexElements[v].VertexElementFormat.ToGLVertexAttribPointerType(); vertexAttribInfoElement.Normalized = vertexElements[v].ToGLVertexAttribNormalized(); vertexAttribInfoElement.Offset = vertexElements[v].Offset; vertexAttribInfoElement.AttributeLocation = attributeLocation; attrInfo.Elements.Add(vertexAttribInfoElement); attrInfo.EnabledAttributes[vertexAttribInfoElement.AttributeLocation] = true; } return attrInfo; } protected override void PlatformGraphicsContextLost() { base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Shader/ShaderProgram.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ShaderProgram { public readonly int Program; internal readonly Dictionary _uniformLocationCache = new Dictionary(); public ShaderProgram(int program) { Program = program; } } } ================================================ FILE: Platforms/Graphics/.GL/States/ConcreteBlendState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteBlendState : ResourceBlendStateStrategy { internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false) { var GL = context.GL; bool blendEnabled = !(this.ColorSourceBlend == Blend.One && this.ColorDestinationBlend == Blend.Zero && this.AlphaSourceBlend == Blend.One && this.AlphaDestinationBlend == Blend.Zero); if (force || blendEnabled != context._lastBlendEnable) { if (blendEnabled) GL.Enable(EnableCap.Blend); else GL.Disable(EnableCap.Blend); GL.CheckGLError(); context._lastBlendEnable = blendEnabled; } if (!this.IndependentBlendEnable) { if (force || this.ColorBlendFunction != context._lastBlendState.ColorBlendFunction || this.AlphaBlendFunction != context._lastBlendState.AlphaBlendFunction) { GL.BlendEquationSeparate( ToGLBlendEquationMode(this.ColorBlendFunction), ToGLBlendEquationMode(this.AlphaBlendFunction)); GL.CheckGLError(); for (int i = 0; i < 4; i++) { context._lastBlendState[i].ColorBlendFunction = this.ColorBlendFunction; context._lastBlendState[i].AlphaBlendFunction = this.AlphaBlendFunction; } } if (force || this.ColorSourceBlend != context._lastBlendState.ColorSourceBlend || this.ColorDestinationBlend != context._lastBlendState.ColorDestinationBlend || this.AlphaSourceBlend != context._lastBlendState.AlphaSourceBlend || this.AlphaDestinationBlend != context._lastBlendState.AlphaDestinationBlend) { GL.BlendFuncSeparate( ToGLBlendFunc(this.ColorSourceBlend), ToGLBlendFunc(this.ColorDestinationBlend), ToGLBlendFunc(this.AlphaSourceBlend), ToGLBlendFunc(this.AlphaDestinationBlend)); GL.CheckGLError(); for (int i = 0; i < 4; i++) { context._lastBlendState[i].ColorSourceBlend = this.ColorSourceBlend; context._lastBlendState[i].ColorDestinationBlend = this.ColorDestinationBlend; context._lastBlendState[i].AlphaSourceBlend = this.AlphaSourceBlend; context._lastBlendState[i].AlphaDestinationBlend = this.AlphaDestinationBlend; } } } else // (_strategy.IndependentBlendEnable == true) { for (int i = 0; i < 4; i++) { if (force || this.Targets[i].ColorBlendFunction != context._lastBlendState[i].ColorBlendFunction || this.Targets[i].AlphaBlendFunction != context._lastBlendState[i].AlphaBlendFunction) { GL.BlendEquationSeparatei(i, ToGLBlendEquationMode(this.Targets[i].ColorBlendFunction), ToGLBlendEquationMode(this.Targets[i].AlphaBlendFunction)); GL.CheckGLError(); context._lastBlendState[i].ColorBlendFunction = this.Targets[i].ColorBlendFunction; context._lastBlendState[i].AlphaBlendFunction = this.Targets[i].AlphaBlendFunction; } if (force || this.Targets[i].ColorSourceBlend != context._lastBlendState[i].ColorSourceBlend || this.Targets[i].ColorDestinationBlend != context._lastBlendState[i].ColorDestinationBlend || this.Targets[i].AlphaSourceBlend != context._lastBlendState[i].AlphaSourceBlend || this.Targets[i].AlphaDestinationBlend != context._lastBlendState[i].AlphaDestinationBlend) { GL.BlendFuncSeparatei(i, ToGLBlendFunc(this.Targets[i].ColorSourceBlend), ToGLBlendFunc(this.Targets[i].ColorDestinationBlend), ToGLBlendFunc(this.Targets[i].AlphaSourceBlend), ToGLBlendFunc(this.Targets[i].AlphaDestinationBlend)); GL.CheckGLError(); context._lastBlendState[i].ColorSourceBlend = this.Targets[i].ColorSourceBlend; context._lastBlendState[i].ColorDestinationBlend = this.Targets[i].ColorDestinationBlend; context._lastBlendState[i].AlphaSourceBlend = this.Targets[i].AlphaSourceBlend; context._lastBlendState[i].AlphaDestinationBlend = this.Targets[i].AlphaDestinationBlend; } } } if (force || this.ColorWriteChannels != context._lastBlendState.ColorWriteChannels) { GL.ColorMask( (this.ColorWriteChannels & ColorWriteChannels.Red) != 0, (this.ColorWriteChannels & ColorWriteChannels.Green) != 0, (this.ColorWriteChannels & ColorWriteChannels.Blue) != 0, (this.ColorWriteChannels & ColorWriteChannels.Alpha) != 0); GL.CheckGLError(); context._lastBlendState.ColorWriteChannels = this.ColorWriteChannels; } } private static BlendEquationMode ToGLBlendEquationMode(BlendFunction function) { switch (function) { case BlendFunction.Add: return BlendEquationMode.FuncAdd; case BlendFunction.ReverseSubtract: return BlendEquationMode.FuncReverseSubtract; case BlendFunction.Subtract: return BlendEquationMode.FuncSubtract; #if DESKTOPGL || IOS || TVOS case BlendFunction.Max: return BlendEquationMode.Max; case BlendFunction.Min: return BlendEquationMode.Min; #endif default: throw new ArgumentException(); } } private static BlendingFunc ToGLBlendFunc(Blend blend) { switch (blend) { case Blend.Zero: return BlendingFunc.Zero; case Blend.One: return BlendingFunc.One; case Blend.BlendFactor: return BlendingFunc.ConstantColor; case Blend.DestinationAlpha: return BlendingFunc.DstAlpha; case Blend.DestinationColor: return BlendingFunc.DstColor; case Blend.InverseBlendFactor: return BlendingFunc.OneMinusConstantColor; case Blend.InverseDestinationAlpha: return BlendingFunc.OneMinusDstAlpha; case Blend.InverseDestinationColor: return BlendingFunc.OneMinusDstColor; case Blend.InverseSourceAlpha: return BlendingFunc.OneMinusSrcAlpha; case Blend.InverseSourceColor: return BlendingFunc.OneMinusSrcColor; case Blend.SourceAlpha: return BlendingFunc.SrcAlpha; case Blend.SourceAlphaSaturation: return BlendingFunc.SrcAlphaSaturate; case Blend.SourceColor: return BlendingFunc.SrcColor; default: throw new ArgumentOutOfRangeException("blend", "The specified blend function is not implemented."); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/States/ConcreteDepthStencilState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy { internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false) { var GL = context.GL; if (force || this.DepthBufferEnable != context._lastDepthStencilState.DepthBufferEnable) { if (!DepthBufferEnable) { GL.Disable(EnableCap.DepthTest); GL.CheckGLError(); } else { // enable Depth Buffer GL.Enable(EnableCap.DepthTest); GL.CheckGLError(); } context._lastDepthStencilState.DepthBufferEnable = this.DepthBufferEnable; } if (force || this.DepthBufferFunction != context._lastDepthStencilState.DepthBufferFunction) { GL.DepthFunc(DepthBufferFunction.ToGLComparisonFunction()); GL.CheckGLError(); context._lastDepthStencilState.DepthBufferFunction = this.DepthBufferFunction; } if (force || this.DepthBufferWriteEnable != context._lastDepthStencilState.DepthBufferWriteEnable) { GL.DepthMask(DepthBufferWriteEnable); GL.CheckGLError(); context._lastDepthStencilState.DepthBufferWriteEnable = this.DepthBufferWriteEnable; } if (force || this.StencilEnable != context._lastDepthStencilState.StencilEnable) { if (!StencilEnable) { GL.Disable(EnableCap.StencilTest); GL.CheckGLError(); } else { // enable Stencil GL.Enable(EnableCap.StencilTest); GL.CheckGLError(); } context._lastDepthStencilState.StencilEnable = this.StencilEnable; } // set function if (this.TwoSidedStencilMode) { StencilFace cullFaceModeFront = StencilFace.Front; StencilFace cullFaceModeBack = StencilFace.Back; StencilFace stencilFaceFront = StencilFace.Front; StencilFace stencilFaceBack = StencilFace.Back; if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFunction != context._lastDepthStencilState.StencilFunction || this.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil || this.StencilMask != context._lastDepthStencilState.StencilMask) { GL.StencilFuncSeparate(cullFaceModeFront, this.StencilFunction.ToGLComparisonFunction(), this.ReferenceStencil, this.StencilMask); GL.CheckGLError(); context._lastDepthStencilState.StencilFunction = this.StencilFunction; context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil; context._lastDepthStencilState.StencilMask = this.StencilMask; } if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.CounterClockwiseStencilFunction != context._lastDepthStencilState.CounterClockwiseStencilFunction || this.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil || this.StencilMask != context._lastDepthStencilState.StencilMask) { GL.StencilFuncSeparate(cullFaceModeBack, this.CounterClockwiseStencilFunction.ToGLComparisonFunction(), this.ReferenceStencil, this.StencilMask); GL.CheckGLError(); context._lastDepthStencilState.CounterClockwiseStencilFunction = this.CounterClockwiseStencilFunction; context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil; context._lastDepthStencilState.StencilMask = this.StencilMask; } if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFail != context._lastDepthStencilState.StencilFail || this.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail || this.StencilPass != context._lastDepthStencilState.StencilPass) { GL.StencilOpSeparate(stencilFaceFront, ToGLStencilOp(this.StencilFail), ToGLStencilOp(this.StencilDepthBufferFail), ToGLStencilOp(this.StencilPass)); GL.CheckGLError(); context._lastDepthStencilState.StencilFail = this.StencilFail; context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail; context._lastDepthStencilState.StencilPass = this.StencilPass; } if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.CounterClockwiseStencilFail != context._lastDepthStencilState.CounterClockwiseStencilFail || this.CounterClockwiseStencilDepthBufferFail != context._lastDepthStencilState.CounterClockwiseStencilDepthBufferFail || this.CounterClockwiseStencilPass != context._lastDepthStencilState.CounterClockwiseStencilPass) { GL.StencilOpSeparate(stencilFaceBack, ToGLStencilOp(this.CounterClockwiseStencilFail), ToGLStencilOp(this.CounterClockwiseStencilDepthBufferFail), ToGLStencilOp(this.CounterClockwiseStencilPass)); GL.CheckGLError(); context._lastDepthStencilState.CounterClockwiseStencilFail = this.CounterClockwiseStencilFail; context._lastDepthStencilState.CounterClockwiseStencilDepthBufferFail = this.CounterClockwiseStencilDepthBufferFail; context._lastDepthStencilState.CounterClockwiseStencilPass = this.CounterClockwiseStencilPass; } } else { if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFunction != context._lastDepthStencilState.StencilFunction || this.ReferenceStencil != context._lastDepthStencilState.ReferenceStencil || this.StencilMask != context._lastDepthStencilState.StencilMask) { GL.StencilFunc(this.StencilFunction.ToGLComparisonFunction(), ReferenceStencil, StencilMask); GL.CheckGLError(); context._lastDepthStencilState.StencilFunction = this.StencilFunction; context._lastDepthStencilState.ReferenceStencil = this.ReferenceStencil; context._lastDepthStencilState.StencilMask = this.StencilMask; } if (force || this.TwoSidedStencilMode != context._lastDepthStencilState.TwoSidedStencilMode || this.StencilFail != context._lastDepthStencilState.StencilFail || this.StencilDepthBufferFail != context._lastDepthStencilState.StencilDepthBufferFail || this.StencilPass != context._lastDepthStencilState.StencilPass) { GL.StencilOp(ToGLStencilOp(StencilFail), ToGLStencilOp(StencilDepthBufferFail), ToGLStencilOp(StencilPass)); GL.CheckGLError(); context._lastDepthStencilState.StencilFail = this.StencilFail; context._lastDepthStencilState.StencilDepthBufferFail = this.StencilDepthBufferFail; context._lastDepthStencilState.StencilPass = this.StencilPass; } } context._lastDepthStencilState.TwoSidedStencilMode = this.TwoSidedStencilMode; if (force || this.StencilWriteMask != context._lastDepthStencilState.StencilWriteMask) { GL.StencilMask(this.StencilWriteMask); GL.CheckGLError(); context._lastDepthStencilState.StencilWriteMask = this.StencilWriteMask; } } private static StencilOp ToGLStencilOp(StencilOperation operation) { switch (operation) { case StencilOperation.Keep: return StencilOp.Keep; case StencilOperation.Decrement: return StencilOp.DecrWrap; case StencilOperation.DecrementSaturation: return StencilOp.Decr; case StencilOperation.IncrementSaturation: return StencilOp.Incr; case StencilOperation.Increment: return StencilOp.IncrWrap; case StencilOperation.Invert: return StencilOp.Invert; case StencilOperation.Replace: return StencilOp.Replace; case StencilOperation.Zero: return StencilOp.Zero; default: return StencilOp.Keep; } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/States/ConcreteRasterizerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy { internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContextGL context, bool force = false) { var GL = context.GL; if (force) { // Turn off dithering to make sure data returned by Texture.GetData is accurate GL.Disable(EnableCap.Dither); } // When rendering offscreen the faces change order. bool offscreen = context.FramebufferRequireFlippedY; switch (CullMode) { case CullMode.None: GL.Disable(EnableCap.CullFace); GL.CheckGLError(); break; case CullMode.CullClockwiseFace: GL.Enable(EnableCap.CullFace); GL.CheckGLError(); GL.CullFace(CullFaceMode.Back); GL.CheckGLError(); if (offscreen) GL.FrontFace(FrontFaceDirection.Cw); else GL.FrontFace(FrontFaceDirection.Ccw); GL.CheckGLError(); break; case CullMode.CullCounterClockwiseFace: GL.Enable(EnableCap.CullFace); GL.CheckGLError(); GL.CullFace(CullFaceMode.Back); GL.CheckGLError(); if (offscreen) GL.FrontFace(FrontFaceDirection.Ccw); else GL.FrontFace(FrontFaceDirection.Cw); GL.CheckGLError(); break; default: throw new InvalidOperationException("CullMode"); } #if DESKTOPGL if (FillMode == FillMode.WireFrame) GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); else // FillMode.Solid GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill); #else if (FillMode == FillMode.WireFrame) throw new NotImplementedException(); #endif if (force || this.ScissorTestEnable != context._lastRasterizerState.ScissorTestEnable) { if (ScissorTestEnable) GL.Enable(EnableCap.ScissorTest); else GL.Disable(EnableCap.ScissorTest); GL.CheckGLError(); context._lastRasterizerState.ScissorTestEnable = this.ScissorTestEnable; } if (force || this.DepthBias != context._lastRasterizerState.DepthBias || this.SlopeScaleDepthBias != context._lastRasterizerState.SlopeScaleDepthBias) { if (this.DepthBias != 0 || this.SlopeScaleDepthBias != 0) { // from the docs it seems this works the same as for Direct3D // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml // explanation for Direct3D is in https://github.com/MonoGame/MonoGame/issues/4826 DepthFormat activeDepthFormat; if (context.IsRenderTargetBound) activeDepthFormat = ((IRenderTarget)context.CurrentRenderTargetBindings[0].RenderTarget).DepthStencilFormat; else activeDepthFormat = base.GraphicsDeviceStrategy.PresentationParameters.DepthStencilFormat; int depthMul; switch (activeDepthFormat) { case DepthFormat.None: depthMul = 0; break; case DepthFormat.Depth16: depthMul = 1 << 16 - 1; break; case DepthFormat.Depth24: case DepthFormat.Depth24Stencil8: depthMul = 1 << 24 - 1; break; default: throw new ArgumentOutOfRangeException(); } GL.Enable(EnableCap.PolygonOffsetFill); GL.PolygonOffset(this.SlopeScaleDepthBias, this.DepthBias * depthMul); GL.CheckGLError(); } else { GL.Disable(EnableCap.PolygonOffsetFill); GL.CheckGLError(); } context._lastRasterizerState.DepthBias = this.DepthBias; context._lastRasterizerState.SlopeScaleDepthBias = this.SlopeScaleDepthBias; } if (context.Capabilities.SupportsDepthClamp && (force || this.DepthClipEnable != context._lastRasterizerState.DepthClipEnable)) { if (!DepthClipEnable) GL.Enable(EnableCap.DepthClamp); else GL.Disable(EnableCap.DepthClamp); GL.CheckGLError(); context._lastRasterizerState.DepthClipEnable = this.DepthClipEnable; } // TODO: Implement MultiSampleAntiAlias } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/States/ConcreteSamplerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteSamplerState : ResourceSamplerStateStrategy { private readonly float[] _openGLBorderColor = new float[4]; internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy, source) { } internal void PlatformApplyState(ConcreteGraphicsContextGL cgraphicsContext, TextureTarget target, bool useMipmaps = false) { Debug.Assert(GraphicsDevice == ((IPlatformGraphicsContext)cgraphicsContext.Context).DeviceStrategy.Device, "The state was created for a different device!"); var GL = cgraphicsContext.GL; // texture filtering float textureMaxAnisotropy; TextureMinFilter textureMinFilter = default(TextureMinFilter); TextureMagFilter textureMaxFilter; switch (Filter) { case TextureFilter.Point: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapNearest : TextureMinFilter.Nearest); textureMaxFilter = TextureMagFilter.Nearest; break; case TextureFilter.Linear: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear); textureMaxFilter = TextureMagFilter.Linear; break; case TextureFilter.Anisotropic: textureMaxAnisotropy = MathHelper.Clamp(this.MaxAnisotropy, 1.0f, cgraphicsContext.Capabilities.MaxTextureAnisotropy); textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear); textureMaxFilter = TextureMagFilter.Linear; break; case TextureFilter.PointMipLinear: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapLinear : TextureMinFilter.Nearest); textureMaxFilter = TextureMagFilter.Nearest; break; case TextureFilter.LinearMipPoint: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapNearest : TextureMinFilter.Linear); textureMaxFilter = TextureMagFilter.Linear; break; case TextureFilter.MinLinearMagPointMipLinear: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear); textureMaxFilter = TextureMagFilter.Nearest; break; case TextureFilter.MinLinearMagPointMipPoint: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.LinearMipmapNearest : TextureMinFilter.Linear); textureMaxFilter = TextureMagFilter.Nearest; break; case TextureFilter.MinPointMagLinearMipLinear: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapLinear : TextureMinFilter.Nearest); textureMaxFilter = TextureMagFilter.Linear; break; case TextureFilter.MinPointMagLinearMipPoint: textureMaxAnisotropy = 1.0f; textureMinFilter = (useMipmaps ? TextureMinFilter.NearestMipmapNearest : TextureMinFilter.Nearest); textureMaxFilter = TextureMagFilter.Linear; break; default: throw new NotSupportedException(); } if (cgraphicsContext.Capabilities.SupportsTextureFilterAnisotropic) { GL.TexParameter(target, TextureParameterName.TextureMaxAnisotropyExt, textureMaxAnisotropy); GL.CheckGLError(); } GL.TexParameter(target, TextureParameterName.TextureMinFilter, (int)textureMinFilter); GL.CheckGLError(); GL.TexParameter(target, TextureParameterName.TextureMagFilter, (int)textureMaxFilter); GL.CheckGLError(); // Set up texture addressing. GL.TexParameter(target, TextureParameterName.TextureWrapS, (int)ToGLTextureAddressMode(AddressU)); GL.CheckGLError(); GL.TexParameter(target, TextureParameterName.TextureWrapT, (int)ToGLTextureAddressMode(AddressV)); GL.CheckGLError(); #if !GLES // Border color is not supported by glTexParameter in OpenGL ES 2.0 _openGLBorderColor[0] = BorderColor.R / 255.0f; _openGLBorderColor[1] = BorderColor.G / 255.0f; _openGLBorderColor[2] = BorderColor.B / 255.0f; _openGLBorderColor[3] = BorderColor.A / 255.0f; GL.TexParameter(target, TextureParameterName.TextureBorderColor, _openGLBorderColor); GL.CheckGLError(); // LOD bias is not supported by glTexParameter in OpenGL ES 2.0 GL.TexParameter(target, TextureParameterName.TextureLodBias, MipMapLevelOfDetailBias); GL.CheckGLError(); // Comparison samplers are not supported in OpenGL ES 2.0 (without an extension, anyway) switch (FilterMode) { case TextureFilterMode.Comparison: GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.CompareRefToTexture); GL.CheckGLError(); GL.TexParameter(target, TextureParameterName.TextureCompareFunc, (int)ComparisonFunction.ToGLComparisonFunction()); GL.CheckGLError(); break; case TextureFilterMode.Default: GL.TexParameter(target, TextureParameterName.TextureCompareMode, (int)TextureCompareMode.None); GL.CheckGLError(); break; default: throw new InvalidOperationException("Invalid filter mode!"); } #endif // TextureMaxLevel if (cgraphicsContext.Capabilities.SupportsTextureMaxLevel) { int textureMaxLevel = 1000; if (this.MaxMipLevel > 0) textureMaxLevel = this.MaxMipLevel; GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, textureMaxLevel); GL.CheckGLError(); } } private int ToGLTextureAddressMode(TextureAddressMode textureAddressMode) { switch (textureAddressMode) { case TextureAddressMode.Clamp: return (int)TextureWrapMode.ClampToEdge; case TextureAddressMode.Wrap: return (int)TextureWrapMode.Repeat; case TextureAddressMode.Mirror: return (int)TextureWrapMode.MirroredRepeat; #if !GLES case TextureAddressMode.Border: return (int)TextureWrapMode.ClampToBorder; #endif default: throw new ArgumentException("No support for " + textureAddressMode); } } protected override void PlatformGraphicsContextLost() { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Vertices/ConcreteDynamicIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true) { PlatformConstructDynamicIndexBuffer(contextStrategy); } private void PlatformConstructDynamicIndexBuffer(GraphicsContextStrategy contextStrategy) { base.PlatformConstructIndexBuffer(contextStrategy); } #region IDynamicIndexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicIndexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.GL/Vertices/ConcreteDynamicVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy { private bool _isContentLost; internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true) { PlatformConstructDynamicVertexBuffer(contextStrategy); } private void PlatformConstructDynamicVertexBuffer(GraphicsContextStrategy contextStrategy) { base.PlatformConstructVertexBuffer(contextStrategy); } #region IDynamicVertexBufferStrategy public bool IsContentLost { get { return _isContentLost; } } #endregion IDynamicVertexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.GL/Vertices/ConcreteIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteIndexBufferGL : IndexBufferStrategy { private readonly BufferUsageHint _usageHint; private readonly DrawElementsType _drawElementsType; private int _ibo; internal DrawElementsType DrawElementsType { get { return _drawElementsType; } } internal int GLIndexBuffer { get { return _ibo; } } internal ConcreteIndexBufferGL(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage) { Debug.Assert(isDynamic == true); _usageHint = BufferUsageHint.DynamicDraw; switch (indexElementSize) { case IndexElementSize.SixteenBits: this._drawElementsType = DrawElementsType.UnsignedShort; break; case IndexElementSize.ThirtyTwoBits: this._drawElementsType = DrawElementsType.UnsignedInt; break; default: throw new InvalidOperationException(); } } internal ConcreteIndexBufferGL(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { _usageHint = BufferUsageHint.StaticDraw; switch (indexElementSize) { case IndexElementSize.SixteenBits: this._drawElementsType = DrawElementsType.UnsignedShort; break; case IndexElementSize.ThirtyTwoBits: this._drawElementsType = DrawElementsType.UnsignedInt; break; default: throw new InvalidOperationException(); } PlatformConstructIndexBuffer(contextStrategy); } internal void PlatformConstructIndexBuffer(GraphicsContextStrategy contextStrategy) { bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { Debug.Assert(_ibo == 0); var GL = contextStrategy.ToConcrete().GL; int sizeInBytes = this.IndexCount * base.ElementSizeInBytes; _ibo = GL.GenBuffer(); GL.CheckGLError(); GL.BindBuffer(BufferTarget.ElementArrayBuffer, _ibo); GL.CheckGLError(); if (!isSharedContext) contextStrategy._indexBufferDirty = true; GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)sizeInBytes, IntPtr.Zero, _usageHint); GL.CheckGLError(); } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLIndexBuffer != 0); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInByte = sizeof(T); int sizeInBytes = elementSizeInByte * elementCount; fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInByte; int bufferSize = IndexCount * base.ElementSizeInBytes; GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer); GL.CheckGLError(); if (isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true; if (options == SetDataOptions.Discard) { // By assigning NULL data to the buffer this gives a hint // to the device to discard the previous content. GL.BufferData( BufferTarget.ElementArrayBuffer, (IntPtr)bufferSize, IntPtr.Zero, _usageHint); GL.CheckGLError(); } GL.BufferSubData(BufferTarget.ElementArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)sizeInBytes, dataPtr); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } protected override void PlatformGraphicsContextLost() { _ibo = 0; } protected override void Dispose(bool disposing) { if (disposing) { } if (_ibo != 0) { if (GraphicsDevice != null && !GraphicsDevice.IsDisposed) { _contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = _contextStrategy.ToConcrete().GL; GL.DeleteBuffer(_ibo); GL.CheckGLError(); _ibo = 0; } finally { _contextStrategy.ToConcrete().UnbindDisposeContext(); } } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Vertices/ConcreteVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteVertexBufferGL : VertexBufferStrategy { private readonly BufferUsageHint _usageHint; //private uint _vao; private int _vbo; internal int GLVertexBuffer { get { return _vbo; } } internal ConcreteVertexBufferGL(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { Debug.Assert(isDynamic == true); _usageHint = BufferUsageHint.DynamicDraw; } internal ConcreteVertexBufferGL(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { _usageHint = BufferUsageHint.StaticDraw; PlatformConstructVertexBuffer(contextStrategy); } internal void PlatformConstructVertexBuffer(GraphicsContextStrategy contextStrategy) { bool isSharedContext = contextStrategy.ToConcrete().BindSharedContext(); try { Debug.Assert(_vbo == 0); var GL = contextStrategy.ToConcrete().GL; //this._vao = GLExt.Oes.GenVertexArray(); //GLExt.Oes.BindVertexArray(this._vao); this._vbo = GL.GenBuffer(); GL.CheckGLError(); GL.BindBuffer(BufferTarget.ArrayBuffer, this._vbo); GL.CheckGLError(); if (!isSharedContext) contextStrategy._vertexBuffersDirty = true; GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(this.VertexDeclaration.VertexStride * this.VertexCount), IntPtr.Zero, _usageHint); GL.CheckGLError(); } finally { contextStrategy.ToConcrete().UnbindSharedContext(); } } public unsafe override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLVertexBuffer != 0); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; if (options == SetDataOptions.Discard) { // By assigning NULL data to the buffer this gives a hint // to the device to discard the previous content. GL.BufferData( BufferTarget.ArrayBuffer, (IntPtr)bufferSize, IntPtr.Zero, _usageHint); GL.CheckGLError(); } fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0) { // there are no gaps so we can copy in one go GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)(elementSizeInBytes * elementCount), dataPtr); GL.CheckGLError(); } else { // else we must copy each element separately for (int i = 0; i < elementCount; i++) { GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)offsetInBytes + i*vertexStride, (IntPtr)elementSizeInBytes, dataPtr + i*elementSizeInBytes); GL.CheckGLError(); } } } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } protected override void PlatformGraphicsContextLost() { _vbo = 0; } protected override void Dispose(bool disposing) { if (disposing) { } if (_vbo != 0) { if (GraphicsDevice != null && !GraphicsDevice.IsDisposed) { _contextStrategy.ToConcrete().BindDisposeContext(); try { var GL = _contextStrategy.ToConcrete().GL; GL.DeleteBuffer(_vbo); GL.CheckGLError(); _vbo = 0; } finally { _contextStrategy.ToConcrete().UnbindDisposeContext(); } } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL/Vertices/VertexDeclarationAttributeInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { // Holds information for caching internal class BufferBindingInfo { private WeakReference _vertexBufferStrategyRef = new WeakReference(null); public VertexDeclarationAttributeInfo AttributeInfo; public VertexBuffer VertexBuffer { get { return (VertexBuffer)_vertexBufferStrategyRef.Target; } set { _vertexBufferStrategyRef.Target = value; } } public IntPtr VertexOffset; public int InstanceFrequency; public BufferBindingInfo(VertexDeclarationAttributeInfo attributeInfo, VertexBuffer vertexBuffer, IntPtr vertexOffset, int instanceFrequency) { AttributeInfo = attributeInfo; VertexBuffer = vertexBuffer; VertexOffset = vertexOffset; InstanceFrequency = instanceFrequency; } public override string ToString() { return String.Format("{{VertexBuffer: {0}, VertexOffset: {1}, InstanceFrequency: {2}}}", VertexBuffer, VertexOffset, InstanceFrequency); } } internal class RenderTargetBindingArrayComparer : IEqualityComparer { public bool Equals(RenderTargetBinding[] first, RenderTargetBinding[] second) { if (object.ReferenceEquals(first, second)) return true; if (first == null || second == null) return false; if (first.Length != second.Length) return false; for (int i = 0; i < first.Length; i++) { if ((first[i].RenderTarget != second[i].RenderTarget) || (first[i].ArraySlice != second[i].ArraySlice)) { return false; } } return true; } public int GetHashCode(RenderTargetBinding[] array) { if (array != null) { unchecked { int hash = 17; foreach (RenderTargetBinding item in array) { if (item.RenderTarget != null) hash = hash * 23 + item.RenderTarget.GetHashCode(); hash = hash * 23 + item.ArraySlice.GetHashCode(); } return hash; } } return 0; } } /// /// Vertex attribute information for a particular shader/vertex declaration combination. /// internal class VertexDeclarationAttributeInfo { internal bool[] EnabledAttributes; internal List Elements; internal VertexDeclarationAttributeInfo(int maxVertexAttributes) { EnabledAttributes = new bool[maxVertexAttributes]; Elements = new List(); } } internal class VertexDeclarationAttributeInfoElement { public int AttributeLocation; public int NumberOfElements; public VertexAttribPointerType VertexAttribPointerType; public bool Normalized; public int Offset; } } ================================================ FILE: Platforms/Graphics/.GL.Android/ConcreteGraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName; using Android.Views; using Android.Runtime; using Android.Util; using Javax.Microedition.Khronos.Egl; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { private DisplayModeCollection _supportedDisplayModes; private DisplayMode _currentDisplayMode; private string _description = string.Empty; public override string Platform_DeviceName { get { throw new NotImplementedException(); } } public override string Platform_Description { get { return _description; } set { _description = value; } } public override int Platform_DeviceId { get { throw new NotImplementedException(); } } public override int Platform_Revision { get { throw new NotImplementedException(); } } public override int Platform_VendorId { get { throw new NotImplementedException(); } } public override int Platform_SubSystemId { get { throw new NotImplementedException(); } } public override IntPtr Platform_MonitorHandle { get { return _eglDisplay.Handle; } } public override bool Platform_IsDefaultAdapter { get { return base.Platform_IsDefaultAdapter; } set { base.Platform_IsDefaultAdapter = value; } } public override DisplayModeCollection Platform_SupportedDisplayModes { get { bool displayChanged = false; if (_supportedDisplayModes == null || displayChanged) { var modes = new List(new[] { Platform_CurrentDisplayMode, }); modes.Sort(delegate (DisplayMode a, DisplayMode b) { if (a == b) return 0; if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1; else return 1; }); _supportedDisplayModes = base.CreateDisplayModeCollection(modes); } return _supportedDisplayModes; } } public override DisplayMode Platform_CurrentDisplayMode { get { View view = ((AndroidGameWindow)ConcreteGame.GameConcreteInstance.Window).GameView; _currentDisplayMode = base.CreateDisplayMode(view.Width, view.Height, SurfaceFormat.Color); return _currentDisplayMode; } } public override bool Platform_IsWideScreen { // Common non-widescreen modes: 4:3, 5:4, 1:1 // Common widescreen modes: 16:9, 16:10, 2:1 // XNA does not appear to account for rotated displays on the desktop get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); } } public override GraphicsBackend Backend { get { return GraphicsBackend.GLES; } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { switch (shaderBackend) { case GraphicsBackend.GLES: return true; default: return false; } } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { switch (shaderProfile) { case ShaderProfileType.OpenGL_Mojo: return true; default: return false; } } OGL_DROID _ogl; EGLDisplay _eglDisplay; EGLConfig[] _eglConfigs; GLVersion _eglVersion; int _maxTextureSize; int _maxVertexBufferSlots; int _maxMultiSampleCount; internal OGL_DROID Ogl { get { return _ogl; } } internal EGLDisplay EglDisplay { get { return _eglDisplay; } } internal EGLConfig[] EglConfig { get { return _eglConfigs; } } internal ConcreteGraphicsAdapter() { if (OGL_DROID.Current == null) OGL_DROID.Initialize(); _ogl = (OGL_DROID)OGL.Current; #if CARDBOARD _eglDisplay = _ogl.Egl.EglGetCurrentDisplay(); _ogl.GetInteger(GetParamName.MajorVersion, out int eglMajorVersion); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MinorVersion, out int eglMinorVersion); _ogl.CheckGLError(); _eglVersion = new GLVersion(eglMajorVersion, eglMinorVersion); _ogl.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MaxVertexAttribs, out _maxVertexBufferSlots); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MaxSamples, out _maxMultiSampleCount); #else _eglDisplay = _ogl.Egl.EglGetDisplay(EGL10.EglDefaultDisplay); if (_eglDisplay == EGL10.EglNoDisplay) throw new Exception("Could not get EGL display" + _ogl.GetEglErrorAsString()); int[] version = new int[2]; if (!_ogl.Egl.EglInitialize(_eglDisplay, version)) throw new Exception("Could not initialize EGL display" + _ogl.GetEglErrorAsString()); InitConfigs(); // create a temporary context to query GLES version EGLContext eglContext = null; try { int[] configAttribs = new int[] { EGL11.EglRenderableType, SurfaceConfig.EGL_OPENGL_ES2_BIT, EGL11.EglNone }; EGLConfig config; int[] numConfigs = new int[] { 0 }; EGLConfig[] results = new EGLConfig[1]; _ogl.Egl.EglChooseConfig(EglDisplay, configAttribs, results, 1, numConfigs); config = results[0]; int[] contextAttribs = new int[] { GLESVersion.EglContextClientVersion, 2, EGL10.EglNone }; eglContext = _ogl.Egl.EglCreateContext(EglDisplay, config, EGL10.EglNoContext, contextAttribs); _ogl.CheckGLError(); _ogl.Egl.EglMakeCurrent(EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, eglContext); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MajorVersion, out int eglMajorVersion); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MinorVersion, out int eglMinorVersion); _ogl.CheckGLError(); _eglVersion = new GLVersion(eglMajorVersion, eglMinorVersion); _ogl.GetInteger(GetParamName.MaxTextureSize, out _maxTextureSize); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MaxVertexAttribs, out _maxVertexBufferSlots); _ogl.CheckGLError(); _ogl.GetInteger(GetParamName.MaxSamples, out _maxMultiSampleCount); _ogl.Egl.EglMakeCurrent(EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext); _ogl.CheckGLError(); } finally { if (eglContext != null) _ogl.Egl.EglDestroyContext(this.EglDisplay, eglContext); } #endif } ~ConcreteGraphicsAdapter() { #if CARDBOARD #else if (_eglDisplay != null) { if (!_ogl.Egl.EglTerminate(_eglDisplay)) throw new Exception("Could not terminate EGL connection" + _ogl.GetEglErrorAsString()); } _eglDisplay = null; #endif } private void InitConfigs() { int[] numConfigs = new int[1]; if (!_ogl.Egl.EglGetConfigs(_eglDisplay, null, 0, numConfigs)) throw new Exception("Could not get config count. " + _ogl.GetEglErrorAsString()); _eglConfigs = new EGLConfig[numConfigs[0]]; _ogl.Egl.EglGetConfigs(_eglDisplay, _eglConfigs, numConfigs[0], numConfigs); Log.Verbose("AndroidGameView", "Device Supports"); foreach (EGLConfig eglConfig in _eglConfigs) { Log.Verbose("AndroidGameView", string.Format(" {0}", SurfaceConfig.FromEGLConfig(eglConfig, _ogl.Egl, _eglDisplay))); } } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) return true; switch (graphicsProfile) { case GraphicsProfile.Reach: return true; case GraphicsProfile.HiDef: if (_maxTextureSize >= 4096) return true; return false; case GraphicsProfile.FL10_0: if (_maxTextureSize >= 8192) return true; return false; case GraphicsProfile.FL10_1: if (_maxVertexBufferSlots >= 32) return true; return false; case GraphicsProfile.FL11_0: if (_maxTextureSize >= 16384) return true; return false; case GraphicsProfile.FL11_1: return false; default: throw new InvalidOperationException(); } } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { selectedFormat = format; selectedDepthFormat = depthFormat; selectedMultiSampleCount = multiSampleCount; // fallback for unsupported renderTarget surface formats. if (selectedFormat == SurfaceFormat.Alpha8 || selectedFormat == SurfaceFormat.NormalizedByte2 || selectedFormat == SurfaceFormat.NormalizedByte4 || selectedFormat == SurfaceFormat.Dxt1 || selectedFormat == SurfaceFormat.Dxt3 || selectedFormat == SurfaceFormat.Dxt5 || selectedFormat == SurfaceFormat.Dxt1a || selectedFormat == SurfaceFormat.Dxt1SRgb || selectedFormat == SurfaceFormat.Dxt3SRgb || selectedFormat == SurfaceFormat.Dxt5SRgb) selectedFormat = SurfaceFormat.Color; // fallback for unsupported renderTarget surface formats on Reach profile. if (graphicsProfile == GraphicsProfile.Reach) { if (selectedFormat == SurfaceFormat.HalfSingle || selectedFormat == SurfaceFormat.HalfVector2 || selectedFormat == SurfaceFormat.HalfVector4 || selectedFormat == SurfaceFormat.HdrBlendable || selectedFormat == SurfaceFormat.Rg32 || selectedFormat == SurfaceFormat.Rgba1010102 || selectedFormat == SurfaceFormat.Rgba64 || selectedFormat == SurfaceFormat.Single || selectedFormat == SurfaceFormat.Vector2 || selectedFormat == SurfaceFormat.Vector4) selectedFormat = SurfaceFormat.Color; } return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount); } } } ================================================ FILE: Platforms/Graphics/.GL.Android/ConcreteGraphicsAdaptersProvider.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Android.Views; using Android.Runtime; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { private ReadOnlyCollection _adapters; public ConcreteGraphicsAdaptersProvider() { List adapterList = CreateAdapterList(); _adapters = new ReadOnlyCollection(adapterList); } private List CreateAdapterList() { List adapterList = new List(1); ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(); GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy); adapterList.Add(adapter); // The first adapter is considered the default. ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true; return adapterList; } public override ReadOnlyCollection Platform_Adapters { get { return _adapters; } } public override GraphicsAdapter Platform_DefaultAdapter { get { return _adapters[0]; } } } } ================================================ FILE: Platforms/Graphics/.GL.Android/ConcreteGraphicsContext.Android.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics.OpenGL; using Javax.Microedition.Khronos.Egl; using Android.Runtime; using Log = Android.Util.Log; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL { private int _glContextCurrentThreadId = -1; private GLESVersion _glesVersion; private EGLContext _eglContext; private EGLContext _glDisposeContext; SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1); private EGLContext _glSharedContext; internal GLESVersion GLesVersion { get { return _glesVersion; } } internal EGLContext EglContext { get { return _eglContext; } } internal ConcreteGraphicsContext(GraphicsContext context) : base(context) { var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var cgd = gd.ToConcrete(); var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gd.PresentationParameters.DeviceWindowHandle); // create context ISurfaceView surfaceView = gameWindow.GameView; surfaceView.SurfaceCreated += SurfaceView_SurfaceCreated; surfaceView.SurfaceChanged += SurfaceView_SurfaceChanged; surfaceView.SurfaceDestroyed += SurfaceView_SurfaceDestroyed; cgd.GLChooseConfig(); this.GLCreateContext(); cgd.GLCreateSurface(); if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, cgd.EglSurface, cgd.EglSurface, this.EglContext)) throw new Exception("Could not make EGL current" + GL.GetEglErrorAsString()); _glContextCurrentThreadId = base.ManagedThreadId(); // OGL.InitExtensions() must be called while we have a current gl context. if (OGL_DROID.Current.Extensions == null) OGL_DROID.Current.InitExtensions(); // create _glDisposeContext for Disposing GL objects from GC Finalizer thread. int[] attribs = this.GLesVersion.GetAttributes(); _glDisposeContext = GL.Egl.EglCreateContext(EGL10.EglNoDisplay, cgd.EglConfig, this.EglContext, attribs); if (_glDisposeContext != null && _glDisposeContext != EGL10.EglNoContext) throw new Exception("Could not create _glDisposeContext" + GL.GetEglErrorAsString()); // create _glSharedContext for creating and setting data on buffers and textures from threads. _glSharedContext = GL.Egl.EglCreateContext(EGL10.EglNoDisplay, cgd.EglConfig, this.EglContext, attribs); if (_glSharedContext != null && _glSharedContext != EGL10.EglNoContext) throw new Exception("Could not create _glSharedContext" + GL.GetEglErrorAsString()); // try getting the context version // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string try { string version = GL.GetString(StringName.Version); if (string.IsNullOrEmpty(version)) throw new NoSuitableGraphicsDeviceException("Unable to retrieve OpenGL version"); // for GLES, the GL_VERSION string is formatted as: // OpenGLES if (version.StartsWith("OpenGL ES ")) version = version.Split(' ')[2]; else // if it fails, we assume to be on a 1.1 context version = "1.1"; _glVersion.Major = Convert.ToInt16(version.Substring(0, 1)); _glVersion.Minor = Convert.ToInt16(version.Substring(2, 1)); } catch (FormatException) { // if it fails, we assume to be on a 1.1 context _glVersion = new GLVersion(1,1); } base._capabilities = new ConcreteGraphicsCapabilities(); ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize( this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy, _glVersion); base.Initialize(this.Capabilities); this.PlatformSetup(); } private void GLCreateContext() { var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var cgd = gd.ToConcrete(); var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; #if CARDBOARD // Cardboard: EglSurface and EglContext was created by GLSurfaceView. _eglContext = GL.Egl.EglGetCurrentContext(); if (this.EglContext == EGL10.EglNoContext) _eglContext = null; #else foreach (GLESVersion ver in ((OGL_DROID)OGL.Current).GetSupportedGLESVersions()) { Log.Verbose("ConcreteGraphicsContext", "Creating GLES {0} Context", ver); _eglContext = GL.Egl.EglCreateContext(adapter.EglDisplay, cgd.EglConfig, EGL10.EglNoContext, ver.GetAttributes()); if (this.EglContext == null || this.EglContext == EGL10.EglNoContext) { this._eglContext = null; Log.Verbose("ConcreteGraphicsContext", string.Format("GLES {0} Not Supported. {1}", ver, GL.GetEglErrorAsString())); continue; } _glesVersion = ver; break; } if (this.EglContext == EGL10.EglNoContext) this._eglContext = null; if (this.EglContext == null) throw new Exception("Could not create EGL context" + GL.GetEglErrorAsString()); Log.Verbose("ConcreteGraphicsContext", "Created GLES {0} Context", this.GLesVersion); #endif } internal EGLSurface GLCreatePBufferSurface(EGLConfig config, int[] attribList) { var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; EGLSurface result = GL.Egl.EglCreatePbufferSurface(adapter.EglDisplay, config, attribList); if (result == EGL10.EglNoSurface) result = null; if (result == null) throw new Exception("EglCreatePBufferSurface"); return result; } internal override void EnsureContextCurrentThread() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; throw new InvalidOperationException("Operation not called on main thread."); } public override void BindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, _glDisposeContext)) throw new Exception("Could not Bind DisposeContext" + GL.GetEglErrorAsString()); } public override void UnbindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext)) throw new Exception("Could not Unbind DisposeContext" + GL.GetEglErrorAsString()); } public override bool BindSharedContext() { #if !ENABLE_SHARED_GL_CONTEXT EnsureContextCurrentThread(); #endif if (_glContextCurrentThreadId == base.ManagedThreadId()) return false; var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; _sharedContextLock.Wait(); if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, _glSharedContext)) throw new Exception("Could not Bind SharedContext" + GL.GetEglErrorAsString()); return true; } public override void UnbindSharedContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; var gd = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var adapter = ((IPlatformGraphicsAdapter)gd.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext)) throw new Exception("Could not Unbind SharedContext" + GL.GetEglErrorAsString()); _sharedContextLock.Release(); } private void SurfaceView_SurfaceCreated(object sender, EventArgs e) { ISurfaceView surfaceView = (ISurfaceView)sender; } private void SurfaceView_SurfaceChanged(object sender, EventArgs e) { ISurfaceView surfaceView = (ISurfaceView)sender; GraphicsDeviceStrategy gds = ((IPlatformGraphicsContext)Context).DeviceStrategy; var cgd = gds.ToConcrete(); AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gds.PresentationParameters.DeviceWindowHandle); if (cgd.EglSurface != null) { ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; // unbind Context and Surface if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext)) Log.Verbose("ConcreteGraphicsContext", "Could not unbind EGL surface" + GL.GetEglErrorAsString()); // destroy the old _eglSurface cgd.GlDestroySurface(); } // recreate EglSurface and bind the context to the thread { ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; #if CARDBOARD // Cardboard: EglSurface and EglContext was created by GLSurfaceView. _glContextCurrentThreadId = base.ManagedThreadId(); #else cgd.GLCreateSurface(); if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, cgd.EglSurface, cgd.EglSurface, this.EglContext)) { throw new Exception("Could not make EGL current" + GL.GetEglErrorAsString()); } _glContextCurrentThreadId = base.ManagedThreadId(); #endif // Update BackBuffer bounds int w = gameWindow.GameView.Width; int h = gameWindow.GameView.Height; gds.PresentationParameters.BackBufferWidth = w; gds.PresentationParameters.BackBufferHeight = h; if (!((IPlatformGraphicsContext)gds.MainContext).Strategy.IsRenderTargetBound) { gds.MainContext.Viewport = new Viewport(0, 0, w, h); gds.MainContext.ScissorRectangle = new Rectangle(0, 0, w, h); } } } private void SurfaceView_SurfaceDestroyed(object sender, EventArgs e) { GraphicsDeviceStrategy gds = ((IPlatformGraphicsContext)Context).DeviceStrategy; var cgd = gds.ToConcrete(); if (cgd.EglSurface != null) { var adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; // unbind Context and Surface if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext)) Log.Verbose("ConcreteGraphicsContext", "Could not unbind EGL surface" + GL.GetEglErrorAsString()); // destroy the old _eglSurface cgd.GlDestroySurface(); } } protected override void Dispose(bool disposing) { if (disposing) { ThrowIfDisposed(); } if (_glDisposeContext != null) { //_egl.EglDestroyContext(_eglDisplay, _glDisposeContext); } _glDisposeContext = null; if (_glSharedContext != null) { //_egl.EglDestroyContext(_eglDisplay, _glSharedContext); } _glSharedContext = null; var gds = ((IPlatformGraphicsContext)this.Context).DeviceStrategy; var cgd = gds.ToConcrete(); var adapter = ((IPlatformGraphicsAdapter)gds.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(gds.PresentationParameters.DeviceWindowHandle); ISurfaceView surfaceView = gameWindow.GameView; surfaceView.SurfaceCreated -= SurfaceView_SurfaceCreated; surfaceView.SurfaceChanged -= SurfaceView_SurfaceChanged; surfaceView.SurfaceDestroyed -= SurfaceView_SurfaceDestroyed; if (cgd.EglSurface != null) { if (!GL.Egl.EglMakeCurrent(adapter.EglDisplay, EGL10.EglNoSurface, EGL10.EglNoSurface, EGL10.EglNoContext)) Log.Verbose("ConcreteGraphicsContext", "Could not unbind EGL surface" + GL.GetEglErrorAsString()); cgd.GlDestroySurface(); } if (this.EglContext != null) { if (this.EglContext != null) { if (!GL.Egl.EglDestroyContext(adapter.EglDisplay, this.EglContext)) throw new Exception("Could not destroy EGL context" + GL.GetEglErrorAsString()); } this._eglContext = null; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.Android/ConcreteGraphicsDevice.Android.cs ================================================ // Copyright (C)2023-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Javax.Microedition.Khronos.Egl; using Log = Android.Util.Log; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL { private EGLConfig _eglConfig; private EGLSurface _eglSurface; internal EGLConfig EglConfig { get { return _eglConfig; } } internal EGLSurface EglSurface { get { return _eglSurface; } } internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } internal void GLChooseConfig() { #if CARDBOARD // Cardboard: EglConfig was created by GLSurfaceView. AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(this.PresentationParameters.DeviceWindowHandle); _eglConfig = gameWindow.EglConfig; return; #endif var adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; int depth = 0; int stencil = 0; int sampleBuffers = 0; int samples = 0; switch (this.PresentationParameters.DepthStencilFormat) { case DepthFormat.Depth16: depth = 16; break; case DepthFormat.Depth24: depth = 24; break; case DepthFormat.Depth24Stencil8: depth = 24; stencil = 8; break; case DepthFormat.None: break; } if (this.PresentationParameters.MultiSampleCount > 1) { sampleBuffers = 1; samples = 4; } List surfaceConfigs = new List(); if (depth > 0) { surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = depth, Stencil = stencil, SampleBuffers = sampleBuffers, Samples = samples }); surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = depth, Stencil = stencil }); surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5, Depth = depth, Stencil = stencil }); surfaceConfigs.Add(new SurfaceConfig() { Depth = depth, Stencil = stencil }); if (depth > 16) { surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, Depth = 16 }); surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5, Depth = 16 }); surfaceConfigs.Add(new SurfaceConfig() { Depth = 16 }); } surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8 }); surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5 }); } else { surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8, SampleBuffers = sampleBuffers, Samples = samples }); surfaceConfigs.Add(new SurfaceConfig() { Red = 8, Green = 8, Blue = 8, Alpha = 8 }); surfaceConfigs.Add(new SurfaceConfig() { Red = 5, Green = 6, Blue = 5 }); } surfaceConfigs.Add(new SurfaceConfig() { Red = 4, Green = 4, Blue = 4 }); EGLConfig[] results = new EGLConfig[1]; bool found = false; int[] numConfigs = new int[] { 0 }; foreach (SurfaceConfig surfaceConfig in surfaceConfigs) { Log.Verbose("AndroidGameView", string.Format("Checking Config : {0}", surfaceConfig)); found = GL.Egl.EglChooseConfig(adapter.EglDisplay, surfaceConfig.ToConfigAttribs(), results, 1, numConfigs); Log.Verbose("AndroidGameView", "EglChooseConfig returned {0} and {1}", found, numConfigs[0]); if (!found || numConfigs[0] <= 0) { Log.Verbose("AndroidGameView", "Config not supported"); continue; } Log.Verbose("AndroidGameView", string.Format("Selected Config : {0}", surfaceConfig)); break; } if (!found || numConfigs[0] <= 0) throw new Exception("No valid EGL configs found" + GL.GetEglErrorAsString()); _eglConfig = results[0]; } internal void GLCreateSurface() { ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete(); IntPtr windowHandle = this.PresentationParameters.DeviceWindowHandle; AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(windowHandle); System.Diagnostics.Debug.Assert(this.EglSurface == null); OGL_DROID GL = adapter.Ogl; #if CARDBOARD // Cardboard: EglSurface and EglContext was created by GLSurfaceView. _eglSurface = GL.Egl.EglGetCurrentSurface(EGL10.EglDraw); if (this.EglSurface == EGL10.EglNoSurface) _eglSurface = null; return; #endif _eglSurface = GL.Egl.EglCreateWindowSurface(adapter.EglDisplay, this.EglConfig, (Java.Lang.Object)gameWindow.GameView.Holder, null); if (this.EglSurface == EGL10.EglNoSurface) _eglSurface = null; if (this.EglSurface == null) throw new Exception("Could not create EGL window surface" + GL.GetEglErrorAsString()); } internal void GlDestroySurface() { ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete(); System.Diagnostics.Debug.Assert(this.EglSurface != null); OGL_DROID GL = adapter.Ogl; if (!GL.Egl.EglDestroySurface(adapter.EglDisplay, this.EglSurface)) Log.Verbose("AndroidGameWindow", "Could not destroy EGL surface" + GL.GetEglErrorAsString()); _eglSurface = null; } public override void Present() { base.Present(); var adapter = ((IPlatformGraphicsAdapter)this.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; bool SwapBuffersResult = GL.Egl.EglSwapBuffers(adapter.EglDisplay, this.EglSurface); if (!SwapBuffersResult) { int eglError = GL.Egl.EglGetError(); System.Diagnostics.Debug.WriteLine("SwapBuffers failed." + GL.GetEglErrorAsString()); } } public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { return new ConcreteGraphicsContext(context); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.Android/OpenGL.Android.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Utilities; using Android.Opengl; using Android.Runtime; using Javax.Microedition.Khronos.Egl; namespace Microsoft.Xna.Platform.Graphics.OpenGL { internal sealed class OGL_DROID : OGL { // internal for Android is not used on other platforms // it allows us to use either GLES or Full GL (if the GPU supports it) internal delegate bool BindAPIDelegate(RenderApi api); internal BindAPIDelegate BindAPI; public IntPtr Library; public IntPtr libES1 = FuncLoader.LoadLibrary("libGLESv1_CM.so"); public IntPtr libES2 = FuncLoader.LoadLibrary("libGLESv2.so"); public IntPtr libES3 = FuncLoader.LoadLibrary("libGLESv3.so"); public IntPtr libGL = FuncLoader.LoadLibrary("libGL.so"); private IEGL10 _egl; public IEGL10 Egl { get { return _egl; } } public static void Initialize() { System.Diagnostics.Debug.Assert(OGL._current == null); OGL._current = new OGL_DROID(); } private OGL_DROID() : base() { _egl = Javax.Microedition.Khronos.Egl.EGLContext.EGL.JavaCast(); } protected override IntPtr GetNativeLibrary() { Android.Util.Log.Verbose("GL", "Loading Entry Points"); BindAPI = FuncLoader.LoadFunctionOrNull(libGL, "eglBindAPI"); if (BindAPI != null) { if (BindAPI(RenderApi.GL)) BoundApi = RenderApi.GL; else if (BindAPI(RenderApi.ES)) BoundApi = RenderApi.ES; else BoundApi = RenderApi.ES; } else { BoundApi = RenderApi.ES; } Android.Util.Log.Verbose("GL", "Bound {0}", BoundApi); if (BoundApi == RenderApi.ES) { if (libES3 != IntPtr.Zero) Library = libES3; if (libES2 != IntPtr.Zero) Library = libES2; } else if (BoundApi == RenderApi.GL) { if (libGL != IntPtr.Zero) Library = libGL; } return Library; } protected override T LoadFunction(string function) { return FuncLoader.LoadFunction(Library, function); } protected override T LoadFunctionOrNull(string function) { return FuncLoader.LoadFunctionOrNull(Library, function); } internal IEnumerable GetSupportedGLESVersions() { if (this.libES3 != IntPtr.Zero) { yield return new GLESVersion { Major = 3, Minor = 2 }; yield return new GLESVersion { Major = 3, Minor = 1 }; yield return new GLESVersion { Major = 3, Minor = 0 }; } if (this.libES2 != IntPtr.Zero) { // We pass -1 because when requesting a GLES 2.0 context we // dont provide the Minor version. yield return new GLESVersion { Major = 2, Minor = -1 }; } yield return new GLESVersion(); } internal string GetEglErrorAsString() { int err = _egl.EglGetError(); switch (err) { case EGL10.EglSuccess: return "Success"; case EGL10.EglNotInitialized: return "Not Initialized"; case EGL10.EglBadAccess: return "Bad Access"; case EGL10.EglBadAlloc: return "Bad Allocation"; case EGL10.EglBadAttribute: return "Bad Attribute"; case EGL10.EglBadConfig: return "Bad Config"; case EGL10.EglBadContext: return "Bad Context"; case EGL10.EglBadCurrentSurface: return "Bad Current Surface"; case EGL10.EglBadDisplay: return "Bad Display"; case EGL10.EglBadMatch: return "Bad Match"; case EGL10.EglBadNativePixmap: return "Bad Native Pixmap"; case EGL10.EglBadNativeWindow: return "Bad Native Window"; case EGL10.EglBadParameter: return "Bad Parameter"; case EGL10.EglBadSurface: return "Bad Surface"; default: return "Unknown EGL Error " + err; } } } struct GLESVersion { public const int EglContextClientVersion = 0x3098; public const int EglContextMinorVersion = 0x30FB; public int Major; public int Minor; internal int[] GetAttributes() { int minor = Minor > -1 ? EglContextMinorVersion : EGL10.EglNone; return new int[] { EglContextClientVersion, Major, minor, Minor, EGL10.EglNone }; } public override string ToString() { return string.Format("{0}.{1}", Major, Minor == -1 ? 0 : Minor); } } } ================================================ FILE: Platforms/Graphics/.GL.Android/SurfaceConfig.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Javax.Microedition.Khronos.Egl; namespace Microsoft.Xna.Platform.Graphics { internal struct SurfaceConfig { public const int EGL_OPENGL_ES2_BIT = 0x0004; public int Red; public int Green; public int Blue; public int Alpha; public int Depth; public int Stencil; public int SampleBuffers; public int Samples; public int[] ToConfigAttribs() { List attribs = new List(); if (Red != 0) { attribs.Add(EGL11.EglRedSize); attribs.Add(Red); } if (Green != 0) { attribs.Add(EGL11.EglGreenSize); attribs.Add(Green); } if (Blue != 0) { attribs.Add(EGL11.EglBlueSize); attribs.Add(Blue); } if (Alpha != 0) { attribs.Add(EGL11.EglAlphaSize); attribs.Add(Alpha); } if (Depth != 0) { attribs.Add(EGL11.EglDepthSize); attribs.Add(Depth); } if (Stencil != 0) { attribs.Add(EGL11.EglStencilSize); attribs.Add(Stencil); } if (SampleBuffers != 0) { attribs.Add(EGL11.EglSampleBuffers); attribs.Add(SampleBuffers); } if (Samples != 0) { attribs.Add(EGL11.EglSamples); attribs.Add(Samples); } attribs.Add(EGL11.EglRenderableType); attribs.Add(EGL_OPENGL_ES2_BIT); attribs.Add(EGL11.EglNone); return attribs.ToArray(); } static int[] data = new int[1]; static int GetAttribute(EGLConfig config, IEGL10 egl, EGLDisplay eglDisplay,int attribute) { egl.EglGetConfigAttrib(eglDisplay, config, attribute, data); return data[0]; } public static SurfaceConfig FromEGLConfig(EGLConfig config, IEGL10 egl, EGLDisplay eglDisplay) { lock (data) { return new SurfaceConfig() { Red = GetAttribute(config, egl, eglDisplay, EGL11.EglRedSize), Green = GetAttribute(config, egl, eglDisplay, EGL11.EglGreenSize), Blue = GetAttribute(config, egl, eglDisplay, EGL11.EglBlueSize), Alpha = GetAttribute(config, egl, eglDisplay, EGL11.EglAlphaSize), Depth = GetAttribute(config, egl, eglDisplay, EGL11.EglDepthSize), Stencil = GetAttribute(config, egl, eglDisplay, EGL11.EglStencilSize), SampleBuffers = GetAttribute(config, egl, eglDisplay, EGL11.EglSampleBuffers), Samples = GetAttribute(config, egl, eglDisplay, EGL11.EglSamples) }; } } public override string ToString() { return string.Format("Red:{0} Green:{1} Blue:{2} Alpha:{3} Depth:{4} Stencil:{5} SampleBuffers:{6} Samples:{7}", Red, Green, Blue, Alpha, Depth, Stencil, SampleBuffers, Samples); } } } ================================================ FILE: Platforms/Graphics/.GL.Android/Vertices/ConcreteIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : ConcreteIndexBufferGL { public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic) { } public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLIndexBuffer != 0); // Buffers are write-only on OpenGL ES 1.1 and 2.0. See the GL_OES_mapbuffer extension for more information. // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Index buffers are write-only on OpenGL ES platforms"); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; // there are no gaps so we can copy in one go IntPtr srcPtr = GL.MapBufferRange( BufferTarget.ElementArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)(elementSizeInBytes * elementCount), BufferRangeAccess.Read); if (srcPtr == IntPtr.Zero) throw new InvalidOperationException("glMapBufferRange failed."); MemCopyHelper.MemoryCopy( srcPtr, dataPtr, elementSizeInBytes * elementCount); GL.UnmapBuffer(BufferTarget.ElementArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL.Android/Vertices/ConcreteVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : ConcreteVertexBufferGL { public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic) { } public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLVertexBuffer != 0); // Buffers are write-only on OpenGL ES 1.1 and 2.0. See the GL_OES_mapbuffer extension for more information. // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Vertex buffers are write-only on OpenGL ES platforms"); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; IntPtr srcPtr = GL.MapBufferRange( BufferTarget.ArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)(vertexStride * elementCount), BufferRangeAccess.Read); if (srcPtr == IntPtr.Zero) throw new InvalidOperationException("glMapBufferRange failed."); if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0) { // there are no gaps so we can copy in one go MemCopyHelper.MemoryCopy( srcPtr, dataPtr, vertexStride * elementCount); } else { for (int i = 0; i < elementCount; i++) { MemCopyHelper.MemoryCopy( srcPtr + i * vertexStride, dataPtr + i * elementSizeInBytes, elementSizeInBytes); } } GL.UnmapBuffer(BufferTarget.ArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/ConcreteGraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using GetParamName = Microsoft.Xna.Platform.Graphics.OpenGL.GetPName; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { private Sdl SDL { get { return Sdl.Current; } } private DisplayModeCollection _supportedDisplayModes; private DisplayMode _currentDisplayMode; private string _description = string.Empty; int _displayIndex; public override string Platform_DeviceName { get { throw new NotImplementedException(); } } public override string Platform_Description { get { return _description; } set { } } public override int Platform_DeviceId { get { throw new NotImplementedException(); } } public override int Platform_Revision { get { throw new NotImplementedException(); } } public override int Platform_VendorId { get { throw new NotImplementedException(); } } public override int Platform_SubSystemId { get { throw new NotImplementedException(); } } public override IntPtr Platform_MonitorHandle { get { throw new NotImplementedException(); } } public override bool Platform_IsDefaultAdapter { get { return base.Platform_IsDefaultAdapter; } set { base.Platform_IsDefaultAdapter = value; } } public override DisplayModeCollection Platform_SupportedDisplayModes { get { bool displayChanged = false; var displayIndex = SDL.DISPLAY.GetWindowDisplayIndex(SdlGameWindow.Instance.Handle); displayChanged = displayIndex != _displayIndex; if (_supportedDisplayModes == null || displayChanged) { var modes = new List(new[] { Platform_CurrentDisplayMode, }); _displayIndex = displayIndex; modes.Clear(); var modeCount = SDL.DISPLAY.GetNumDisplayModes(displayIndex); for (int i = 0; i < modeCount; i++) { Sdl.Display.Mode mode; SDL.DISPLAY.GetDisplayMode(displayIndex, i, out mode); // We are only using one format, Color // mode.Format gets the Color format from SDL var displayMode = base.CreateDisplayMode(mode.Width, mode.Height, SurfaceFormat.Color); if (!modes.Contains(displayMode)) modes.Add(displayMode); } modes.Sort(delegate (DisplayMode a, DisplayMode b) { if (a == b) return 0; if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1; else return 1; }); _supportedDisplayModes = base.CreateDisplayModeCollection(modes); } return _supportedDisplayModes; } } public override DisplayMode Platform_CurrentDisplayMode { get { int displayIndex = SDL.DISPLAY.GetWindowDisplayIndex(SdlGameWindow.Instance.Handle); Sdl.Display.Mode mode; SDL.DISPLAY.GetCurrentDisplayMode(displayIndex, out mode); _currentDisplayMode = base.CreateDisplayMode(mode.Width, mode.Height, SurfaceFormat.Color); return _currentDisplayMode; } } public override bool Platform_IsWideScreen { // Common non-widescreen modes: 4:3, 5:4, 1:1 // Common widescreen modes: 16:9, 16:10, 2:1 // XNA does not appear to account for rotated displays on the desktop get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); } } public override GraphicsBackend Backend { get { return GraphicsBackend.OpenGL; } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { switch (shaderBackend) { case GraphicsBackend.OpenGL: return true; default: return false; } } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { switch (shaderProfile) { case ShaderProfileType.OpenGL_Mojo: return true; default: return false; } } private OGL _gl; private string _version; private GLVersion _glVersion; int _capMaxTextureSize; int _capMaxMultiSampleCount; int _capMaxTextureSlots; int _capMaxVertexTextureSlots; int _capMaxVertexAttribs; int _capMaxDrawBuffers; internal OGL GL { get { return _gl; } } internal GLVersion glVersion { get { return _glVersion; } } internal ConcreteGraphicsAdapter() { IntPtr glWindowHandle = IntPtr.Zero; IntPtr glContext = IntPtr.Zero; try { SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMajorVersion, 2); SDL.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextMinorVersion, 0); glWindowHandle = SDL.WINDOW.Create("KnisDefaultAdapterWindow", 0, 0, 0, 0, Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL); glContext = SDL.OpenGL.CreateGLContext(glWindowHandle); try { // OGL.Initialize() must be called while we have a gl context, // because of OGL.LoadEntryPoints() & and OGL.InitExtensions(). OGL_SDL.Initialize(); OGL_SDL.Current.InitExtensions(); _gl = OGL.Current; } catch (EntryPointNotFoundException epnfex) { throw new PlatformNotSupportedException( epnfex.Message + "\n" + "KNI requires OpenGL 3.0 compatible drivers, or either ARB_framebuffer_object or EXT_framebuffer_object extensions."); } // try getting the context version // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string. try { _version = _gl.GetString(StringName.Version); if (string.IsNullOrEmpty(_version)) throw new NoSuitableGraphicsDeviceException("Unable to retrieve OpenGL version"); // for OpenGL, the GL_VERSION string always starts with the version number in the "major.minor" format, // optionally followed by multiple vendor specific characters _glVersion.Major = Convert.ToInt16(_version.Substring(0, 1)); _glVersion.Minor = Convert.ToInt16(_version.Substring(2, 1)); } catch (FormatException) { // if it fails, we assume to be on a 1.1 context _glVersion = new GLVersion(1, 1); } _description = _gl.GetString(StringName.Renderer); // get adapter caps. _gl.GetInteger(GetParamName.MaxTextureSize, out _capMaxTextureSize); _gl.CheckGLError(); _gl.GetInteger(GetParamName.MaxSamples, out _capMaxMultiSampleCount); _gl.CheckGLError(); _gl.GetInteger(GetParamName.MaxTextureImageUnits, out _capMaxTextureSlots); _gl.CheckGLError(); _gl.GetInteger(GetParamName.MaxVertexTextureImageUnits, out _capMaxVertexTextureSlots); _gl.CheckGLError(); _gl.GetInteger(GetParamName.MaxVertexAttribs, out _capMaxVertexAttribs); _gl.CheckGLError(); _gl.GetInteger(GetParamName.MaxDrawBuffers, out _capMaxDrawBuffers); _gl.CheckGLError(); int maxCombinedTextureImageUnits; _gl.GetInteger(GetParamName.MaxCombinedTextureImageUnits, out maxCombinedTextureImageUnits); _gl.CheckGLError(); _capMaxTextureSlots = Math.Min(_capMaxTextureSlots, maxCombinedTextureImageUnits); _capMaxVertexTextureSlots = Math.Min(_capMaxVertexTextureSlots, maxCombinedTextureImageUnits); } finally { if (glContext != IntPtr.Zero) SDL.OpenGL.DeleteContext(glContext); if (glWindowHandle != IntPtr.Zero) SDL.WINDOW.Destroy(glWindowHandle); } } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) return true; switch (graphicsProfile) { case GraphicsProfile.Reach: return true; case GraphicsProfile.HiDef: if (_capMaxTextureSize >= 4096) return true; return false; case GraphicsProfile.FL10_0: if (_capMaxTextureSize >= 8192) return true; return false; case GraphicsProfile.FL10_1: case GraphicsProfile.FL11_0: if (_capMaxTextureSize >= 16384) return true; return false; case GraphicsProfile.FL11_1: return false; default: throw new InvalidOperationException(); } } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { selectedFormat = format; selectedDepthFormat = depthFormat; selectedMultiSampleCount = multiSampleCount; // fallback for unsupported renderTarget surface formats. if (selectedFormat == SurfaceFormat.Alpha8 || selectedFormat == SurfaceFormat.NormalizedByte2 || selectedFormat == SurfaceFormat.NormalizedByte4 || selectedFormat == SurfaceFormat.Dxt1 || selectedFormat == SurfaceFormat.Dxt3 || selectedFormat == SurfaceFormat.Dxt5 || selectedFormat == SurfaceFormat.Dxt1a || selectedFormat == SurfaceFormat.Dxt1SRgb || selectedFormat == SurfaceFormat.Dxt3SRgb || selectedFormat == SurfaceFormat.Dxt5SRgb) selectedFormat = SurfaceFormat.Color; // fallback for unsupported renderTarget surface formats on Reach profile. if (graphicsProfile == GraphicsProfile.Reach) { if (selectedFormat == SurfaceFormat.HalfSingle || selectedFormat == SurfaceFormat.HalfVector2 || selectedFormat == SurfaceFormat.HalfVector4 || selectedFormat == SurfaceFormat.HdrBlendable || selectedFormat == SurfaceFormat.Rg32 || selectedFormat == SurfaceFormat.Rgba1010102 || selectedFormat == SurfaceFormat.Rgba64 || selectedFormat == SurfaceFormat.Single || selectedFormat == SurfaceFormat.Vector2 || selectedFormat == SurfaceFormat.Vector4) selectedFormat = SurfaceFormat.Color; } return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount); } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/ConcreteGraphicsAdaptersProvider.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { private ReadOnlyCollection _adapters; public ConcreteGraphicsAdaptersProvider() { List adapterList = CreateAdapterList(); _adapters = new ReadOnlyCollection(adapterList); } private List CreateAdapterList() { List adapterList = new List(1); ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(); GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy); adapterList.Add(adapter); // The first adapter is considered the default. ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true; return adapterList; } public override ReadOnlyCollection Platform_Adapters { get { return _adapters; } } public override GraphicsAdapter Platform_DefaultAdapter { get { return _adapters[0]; } } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/ConcreteGraphicsContext.SDL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL { private Sdl SDL { get { return Sdl.Current; } } private IntPtr _glContext; private int _glContextCurrentThreadId = -1; private IntPtr _glDisposeContext; private IntPtr _glDisposeContextWindowHandle; SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1); private IntPtr _glSharedContext; private IntPtr _glSharedContextWindowHandle; internal IntPtr GlContext { get { return _glContext; } } internal ConcreteGraphicsContext(GraphicsContext context) : base(context) { _glContext = SDL.OpenGL.CreateGLContext(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle); // create _glDisposeContext for Disposing GL objects from GC Finalizer thread. Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextReleaseBehaviour, (int)Sdl.GL.ContextReleaseBehaviour.None); Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ShareWithCurrentContext, 1); _glDisposeContextWindowHandle = SDL.WINDOW.Create("", 0, 0, 0, 0, Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL); _glDisposeContext = SDL.OpenGL.CreateGLContext(_glDisposeContextWindowHandle); // create _glSharedContext for creating GL objects from working threads. Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextReleaseBehaviour, (int)Sdl.GL.ContextReleaseBehaviour.None); Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ShareWithCurrentContext, 1); _glSharedContextWindowHandle = SDL.WINDOW.Create("", 0, 0, 0, 0, Sdl.Window.State.Hidden | Sdl.Window.State.OpenGL); _glSharedContext = SDL.OpenGL.CreateGLContext(_glSharedContextWindowHandle); MakeCurrent(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle); int swapInterval = ConcreteGraphicsContext.ToGLSwapInterval(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.PresentationInterval); SDL.OpenGL.SetSwapInterval(swapInterval); // get the GL version. _glVersion = ((IPlatformGraphicsAdapter)GraphicsAdapter.DefaultAdapter).Strategy.ToConcrete().glVersion; base._capabilities = new ConcreteGraphicsCapabilities(); ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize( this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy, _glVersion); base.Initialize(this.Capabilities); this.PlatformSetup(); } public void MakeCurrent(IntPtr winHandle) { SDL.OpenGL.MakeCurrent(winHandle, _glContext); _glContextCurrentThreadId = base.ManagedThreadId(); } internal override void EnsureContextCurrentThread() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; throw new InvalidOperationException("Operation not called on main thread."); } public override void BindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; Sdl.Current.OpenGL.MakeCurrent(this._glDisposeContextWindowHandle, this._glDisposeContext); } public override void UnbindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; Sdl.Current.OpenGL.MakeCurrent(IntPtr.Zero, IntPtr.Zero); } public override bool BindSharedContext() { #if !ENABLE_SHARED_GL_CONTEXT EnsureContextCurrentThread(); #endif if (_glContextCurrentThreadId == base.ManagedThreadId()) return false; _sharedContextLock.Wait(); Sdl.Current.OpenGL.MakeCurrent(this._glSharedContextWindowHandle, this._glSharedContext); return true; } public override void UnbindSharedContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; Sdl.Current.OpenGL.MakeCurrent(IntPtr.Zero, IntPtr.Zero); _sharedContextLock.Release(); } /// /// Converts to OpenGL swap interval. /// /// A value according to EXT_swap_control /// The to convert. internal static int ToGLSwapInterval(PresentInterval interval) { // See http://www.opengl.org/registry/specs/EXT/swap_control.txt // and https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt // OpenTK checks for EXT_swap_control_tear: // if supported, a swap interval of -1 enables adaptive vsync; // otherwise -1 is converted to 1 (vsync enabled.) switch (interval) { case PresentInterval.Immediate: return 0; case PresentInterval.One: return 1; case PresentInterval.Two: return 2; case PresentInterval.Default: default: return -1; } } protected override void Dispose(bool disposing) { if (disposing) { ThrowIfDisposed(); } if (_glDisposeContext != IntPtr.Zero) SDL.OpenGL.DeleteContext(_glDisposeContext); _glDisposeContext = IntPtr.Zero; if (_glDisposeContextWindowHandle != IntPtr.Zero) SDL.WINDOW.Destroy(_glDisposeContextWindowHandle); _glDisposeContextWindowHandle = IntPtr.Zero; if (_glSharedContext != IntPtr.Zero) SDL.OpenGL.DeleteContext(_glSharedContext); _glSharedContext = IntPtr.Zero; if (_glSharedContextWindowHandle != IntPtr.Zero) SDL.WINDOW.Destroy(_glSharedContextWindowHandle); _glSharedContextWindowHandle = IntPtr.Zero; if (_glContext != IntPtr.Zero) SDL.OpenGL.DeleteContext(_glContext); _glContext = IntPtr.Zero; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/ConcreteGraphicsDevice.SDL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL { internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } internal void GetModeSwitchedSize(out int width, out int height) { var mode = new Sdl.Display.Mode { Width = PresentationParameters.BackBufferWidth, Height = PresentationParameters.BackBufferHeight, Format = 0, RefreshRate = 0, DriverData = IntPtr.Zero }; Sdl.Display.Mode closest; Sdl.Current.DISPLAY.GetClosestDisplayMode(0, mode, out closest); width = closest.Width; height = closest.Height; } internal void GetDisplayResolution(out int width, out int height) { Sdl.Display.Mode mode; Sdl.Current.DISPLAY.GetCurrentDisplayMode(0, out mode); width = mode.Width; height = mode.Height; } public override void Present() { base.Present(); var GL = ((IPlatformGraphicsContext)_mainContext).Strategy.ToConcrete().GL; Sdl.Current.OpenGL.SwapWindow(this.PresentationParameters.DeviceWindowHandle); GL.CheckGLError(); } public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { #if DEBUG // create debug context, so we get better error messages (glDebugMessageCallback) Sdl.Current.OpenGL.SetAttribute(Sdl.GL.Attribute.ContextFlags, (int)Sdl.GL.ContextFlag.Debug); #endif return new ConcreteGraphicsContext(context); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/OpenGL.SDL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics.OpenGL { internal sealed class OGL_SDL : OGL { public static void Initialize() { System.Diagnostics.Debug.Assert(OGL._current == null); OGL._current = new OGL_SDL(); } private OGL_SDL() : base() { } protected override IntPtr GetNativeLibrary() { BoundApi = RenderApi.GL; return IntPtr.Zero; } protected override T LoadFunction(string function) { IntPtr funcAddress = Sdl.Current.OpenGL.GetProcAddress(function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); throw new EntryPointNotFoundException("Entry point not found for function '" + function + "'."); } protected override T LoadFunctionOrNull(string function) { IntPtr funcAddress = Sdl.Current.OpenGL.GetProcAddress(function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); return default(T); } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/Vertices/ConcreteIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : ConcreteIndexBufferGL { public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic) { } public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLIndexBuffer != 0); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInBytes = sizeof(T); int sizeInBytes = elementCount * elementSizeInBytes; GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._indexBufferDirty = true; IntPtr srcPtr = GL.MapBuffer(BufferTarget.ElementArrayBuffer, BufferAccess.ReadOnly); GL.CheckGLError(); try { srcPtr = srcPtr + offsetInBytes; fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; MemCopyHelper.MemoryCopy( srcPtr, dataPtr, sizeInBytes); } } finally { GL.UnmapBuffer(BufferTarget.ElementArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL.SDL/Vertices/ConcreteVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Graphics.Utilities; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : ConcreteVertexBufferGL { public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic) { } public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLVertexBuffer != 0); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; int elementSizeInBytes = sizeof(T); int sizeInBytes = elementCount * elementSizeInBytes; GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; IntPtr srcPtr = GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadOnly); GL.CheckGLError(); try { srcPtr = srcPtr + offsetInBytes; fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0) { MemCopyHelper.MemoryCopy( srcPtr, dataPtr, sizeInBytes); } else { for (int i = 0; i < elementCount; i++) { MemCopyHelper.MemoryCopy( srcPtr + i * vertexStride, dataPtr + i * elementSizeInBytes, elementSizeInBytes); } } } } finally { GL.UnmapBuffer(BufferTarget.ArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/ConcreteGraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using UIKit; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { private DisplayModeCollection _supportedDisplayModes; private DisplayMode _currentDisplayMode; private string _description = string.Empty; private UIScreen _screen; public override string Platform_DeviceName { get { throw new NotImplementedException(); } } public override string Platform_Description { get { return _description; } set { _description = value; } } public override int Platform_DeviceId { get { throw new NotImplementedException(); } } public override int Platform_Revision { get { throw new NotImplementedException(); } } public override int Platform_VendorId { get { throw new NotImplementedException(); } } public override int Platform_SubSystemId { get { throw new NotImplementedException(); } } public override IntPtr Platform_MonitorHandle { get { throw new NotImplementedException(); } } public override bool Platform_IsDefaultAdapter { get { return base.Platform_IsDefaultAdapter; } set { base.Platform_IsDefaultAdapter = value; } } public override DisplayModeCollection Platform_SupportedDisplayModes { get { bool displayChanged = false; if (_supportedDisplayModes == null || displayChanged) { var modes = new List(new[] { Platform_CurrentDisplayMode, }); modes.Sort(delegate (DisplayMode a, DisplayMode b) { if (a == b) return 0; if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1; else return 1; }); _supportedDisplayModes = base.CreateDisplayModeCollection(modes); } return _supportedDisplayModes; } } public override DisplayMode Platform_CurrentDisplayMode { get { int screenWidth = (int)(_screen.Bounds.Width * _screen.Scale); int screenHeight = (int)(_screen.Bounds.Height * _screen.Scale); _currentDisplayMode = base.CreateDisplayMode(screenWidth, screenHeight, SurfaceFormat.Color); return _currentDisplayMode; } } public override bool Platform_IsWideScreen { // Common non-widescreen modes: 4:3, 5:4, 1:1 // Common widescreen modes: 16:9, 16:10, 2:1 // XNA does not appear to account for rotated displays on the desktop get { return Platform_CurrentDisplayMode.AspectRatio > (4.0f / 3.0f); } } public override GraphicsBackend Backend { get { return GraphicsBackend.GLES; } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { switch (shaderBackend) { case GraphicsBackend.GLES: return true; default: return false; } } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { switch (shaderProfile) { case ShaderProfileType.OpenGL_Mojo: return true; default: return false; } } internal ConcreteGraphicsAdapter(UIScreen mainScreen) { this._screen = mainScreen; } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { if (GraphicsAdapter.UseReferenceDevice) return true; switch (graphicsProfile) { case GraphicsProfile.Reach: return true; case GraphicsProfile.HiDef: return false; case GraphicsProfile.FL10_0: return false; case GraphicsProfile.FL10_1: return false; case GraphicsProfile.FL11_0: return false; case GraphicsProfile.FL11_1: return false; default: throw new InvalidOperationException(); } } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { selectedFormat = format; selectedDepthFormat = depthFormat; selectedMultiSampleCount = multiSampleCount; // fallback for unsupported renderTarget surface formats. if (selectedFormat == SurfaceFormat.Alpha8 || selectedFormat == SurfaceFormat.NormalizedByte2 || selectedFormat == SurfaceFormat.NormalizedByte4 || selectedFormat == SurfaceFormat.Dxt1 || selectedFormat == SurfaceFormat.Dxt3 || selectedFormat == SurfaceFormat.Dxt5 || selectedFormat == SurfaceFormat.Dxt1a || selectedFormat == SurfaceFormat.Dxt1SRgb || selectedFormat == SurfaceFormat.Dxt3SRgb || selectedFormat == SurfaceFormat.Dxt5SRgb) selectedFormat = SurfaceFormat.Color; // fallback for unsupported renderTarget surface formats on Reach profile. if (graphicsProfile == GraphicsProfile.Reach) { if (selectedFormat == SurfaceFormat.HalfSingle || selectedFormat == SurfaceFormat.HalfVector2 || selectedFormat == SurfaceFormat.HalfVector4 || selectedFormat == SurfaceFormat.HdrBlendable || selectedFormat == SurfaceFormat.Rg32 || selectedFormat == SurfaceFormat.Rgba1010102 || selectedFormat == SurfaceFormat.Rgba64 || selectedFormat == SurfaceFormat.Single || selectedFormat == SurfaceFormat.Vector2 || selectedFormat == SurfaceFormat.Vector4) selectedFormat = SurfaceFormat.Color; } return (format == selectedFormat) && (depthFormat == selectedDepthFormat) && (multiSampleCount == selectedMultiSampleCount); } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/ConcreteGraphicsAdaptersProvider.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using UIKit; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { private ReadOnlyCollection _adapters; public ConcreteGraphicsAdaptersProvider() { List adapterList = CreateAdapterList(); _adapters = new ReadOnlyCollection(adapterList); } private List CreateAdapterList() { List adapterList = new List(1); ConcreteGraphicsAdapter adapterStrategy = new ConcreteGraphicsAdapter(UIScreen.MainScreen); GraphicsAdapter adapter = base.CreateGraphicsAdapter(adapterStrategy); adapterList.Add(adapter); // The first adapter is considered the default. ((IPlatformGraphicsAdapter)adapterList[0]).Strategy.Platform_IsDefaultAdapter = true; return adapterList; } public override ReadOnlyCollection Platform_Adapters { get { return _adapters; } } public override GraphicsAdapter Platform_DefaultAdapter { get { return _adapters[0]; } } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/ConcreteGraphicsContext.iOS.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : ConcreteGraphicsContextGL { private int _glContextCurrentThreadId = -1; OpenGLES.EAGLContext _glDisposeContext; SemaphoreSlim _sharedContextLock = new SemaphoreSlim(1, 1); OpenGLES.EAGLContext _glSharedContext; internal ConcreteGraphicsContext(GraphicsContext context) : base(context) { _glContextCurrentThreadId = base.ManagedThreadId(); iOSGameWindow gameWindow = iOSGameWindow.FromHandle(((IPlatformGraphicsContext)context).DeviceStrategy.PresentationParameters.DeviceWindowHandle); iOSGameViewController viewController = gameWindow.ViewController; iOSGameView view = viewController.View; // create _glDisposeContext for Disposing GL objects from GC Finalizer thread. try { _glDisposeContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES3, viewController.View._eaglContext.ShareGroup); } catch { // Fall back to GLES 2.0 _glDisposeContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES2, viewController.View._eaglContext.ShareGroup); } // create _glSharedContext for creating GL objects from working threads. try { _glSharedContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES3, viewController.View._eaglContext.ShareGroup); } catch { // Fall back to GLES 2.0 _glSharedContext = new OpenGLES.EAGLContext(OpenGLES.EAGLRenderingAPI.OpenGLES2, viewController.View._eaglContext.ShareGroup); } // try getting the context version // GL_MAJOR_VERSION and GL_MINOR_VERSION are GL 3.0+ only, so we need to rely on GL_VERSION string try { string version = GL.GetString(StringName.Version); if (string.IsNullOrEmpty(version)) throw new NoSuitableGraphicsDeviceException("Unable to retrieve OpenGL version"); // for GLES, the GL_VERSION string is formatted as: // OpenGLES if (version.StartsWith("OpenGL ES ")) version = version.Split(' ')[2]; else // if it fails, we assume to be on a 1.1 context version = "1.1"; _glVersion.Major = Convert.ToInt16(version.Substring(0, 1)); _glVersion.Minor = Convert.ToInt16(version.Substring(2, 1)); } catch (FormatException) { // if it fails, we assume to be on a 1.1 context _glVersion = new GLVersion(1,1); } base._capabilities = new ConcreteGraphicsCapabilities(); ((ConcreteGraphicsCapabilities)base._capabilities).PlatformInitialize( this, ((IPlatformGraphicsContext)this.Context).DeviceStrategy, _glVersion); base.Initialize(this.Capabilities); this.PlatformSetup(); } internal override void EnsureContextCurrentThread() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; throw new InvalidOperationException("Operation not called on main thread."); } public override void BindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; OpenGLES.EAGLContext.SetCurrentContext(_glDisposeContext); } public override void UnbindDisposeContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; OpenGLES.EAGLContext.SetCurrentContext(null); } public override bool BindSharedContext() { #if !ENABLE_SHARED_GL_CONTEXT EnsureContextCurrentThread(); #endif if (_glContextCurrentThreadId == base.ManagedThreadId()) return false; _sharedContextLock.Wait(); OpenGLES.EAGLContext.SetCurrentContext(_glSharedContext); return true; } public override void UnbindSharedContext() { if (_glContextCurrentThreadId == base.ManagedThreadId()) return; OpenGLES.EAGLContext.SetCurrentContext(null); _sharedContextLock.Release(); } protected override void Dispose(bool disposing) { if (disposing) { ThrowIfDisposed(); if (_glDisposeContext != null) { _glDisposeContext.Dispose(); _glDisposeContext = null; } if (_glSharedContext != null) { _glSharedContext.Dispose(); _glSharedContext = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/ConcreteGraphicsDevice.iOS.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : ConcreteGraphicsDeviceGL { internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } public override void Present() { base.Present(); } public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { return new ConcreteGraphicsContext(context); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/OpenGL.iOS.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Utilities; using OpenGLES; namespace Microsoft.Xna.Platform.Graphics.OpenGL { internal sealed class OGL_IOS : OGL { public IntPtr Library = FuncLoader.LoadLibrary("/System/Library/Frameworks/OpenGLES.framework/OpenGLES"); public static void Initialize() { System.Diagnostics.Debug.Assert(OGL._current == null); OGL._current = new OGL_IOS(); } private OGL_IOS() : base() { } protected override IntPtr GetNativeLibrary() { BoundApi = RenderApi.ES; return IntPtr.Zero; } protected override T LoadFunction(string function) { return FuncLoader.LoadFunction(Library, function); } protected override T LoadFunctionOrNull(string function) { return FuncLoader.LoadFunctionOrNull(Library, function); } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/Vertices/ConcreteIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : ConcreteIndexBufferGL { public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic) { } public ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLIndexBuffer != 0); // Buffers are write-only on OpenGL ES 1.1 and 2.0. See the GL_OES_mapbuffer extension for more information. // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Index buffers are write-only on OpenGL ES platforms"); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(BufferTarget.ElementArrayBuffer, GLIndexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; // there are no gaps so we can copy in one go IntPtr srcPtr = GL.MapBufferRange( BufferTarget.ElementArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)(elementSizeInBytes * elementCount), BufferRangeAccess.Read); if (srcPtr == IntPtr.Zero) throw new InvalidOperationException("glMapBufferRange failed."); MemCopyHelper.MemoryCopy( srcPtr, dataPtr, elementSizeInBytes * elementCount); GL.UnmapBuffer(BufferTarget.ElementArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.GL.iOS/Vertices/ConcreteVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : ConcreteVertexBufferGL { public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic) { } public ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { } public unsafe override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { bool isSharedContext = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().BindSharedContext(); try { Debug.Assert(GLVertexBuffer != 0); // Buffers are write-only on OpenGL ES 1.1 and 2.0. See the GL_OES_mapbuffer extension for more information. // http://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt if (this.GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Vertex buffers are write-only on OpenGL ES platforms"); var GL = ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().GL; GL.BindBuffer(BufferTarget.ArrayBuffer, GLVertexBuffer); GL.CheckGLError(); if (!isSharedContext) ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy._vertexBuffersDirty = true; int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr dataPtr = (IntPtr)pData; dataPtr = dataPtr + startIndex * elementSizeInBytes; IntPtr srcPtr = GL.MapBufferRange( BufferTarget.ArrayBuffer, (IntPtr)offsetInBytes, (IntPtr)(vertexStride * elementCount), BufferRangeAccess.Read); if (srcPtr == IntPtr.Zero) throw new InvalidOperationException("glMapBufferRange failed."); if (elementSizeInBytes == vertexStride || elementSizeInBytes % vertexStride == 0) { // there are no gaps so we can copy in one go MemCopyHelper.MemoryCopy( srcPtr, dataPtr, vertexStride * elementCount); } else { for (int i = 0; i < elementCount; i++) { MemCopyHelper.MemoryCopy( srcPtr + i * vertexStride, dataPtr + i * elementSizeInBytes, elementSizeInBytes); } } GL.UnmapBuffer(BufferTarget.ArrayBuffer); GL.CheckGLError(); } } finally { ((IPlatformGraphicsContext)base.GraphicsDeviceStrategy.CurrentContext).Strategy.ToConcrete().UnbindSharedContext(); } } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsAdapter.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteGraphicsAdapter : GraphicsAdapterStrategy { public override string Platform_DeviceName { get { throw new PlatformNotSupportedException(); } } public override string Platform_Description { get { throw new PlatformNotSupportedException(); } } public override int Platform_DeviceId { get { throw new PlatformNotSupportedException(); } } public override int Platform_Revision { get { throw new PlatformNotSupportedException(); } } public override int Platform_VendorId { get { throw new PlatformNotSupportedException(); } } public override int Platform_SubSystemId { get { throw new PlatformNotSupportedException(); } } public override IntPtr Platform_MonitorHandle { get { throw new PlatformNotSupportedException(); } } public override bool Platform_IsDefaultAdapter { get { throw new PlatformNotSupportedException(); } } public override DisplayModeCollection Platform_SupportedDisplayModes { get { throw new PlatformNotSupportedException(); } } public override DisplayMode Platform_CurrentDisplayMode { get { throw new PlatformNotSupportedException(); } } public override bool Platform_IsWideScreen { get { throw new PlatformNotSupportedException(); } } public override GraphicsBackend Backend { get { throw new PlatformNotSupportedException(); } } public override bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend) { throw new PlatformNotSupportedException(); } public override bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile) { throw new PlatformNotSupportedException(); } internal ConcreteGraphicsAdapter() { } public override bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile) { throw new PlatformNotSupportedException(); } public override bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new PlatformNotSupportedException(); } public override bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsAdaptersProvider.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { class ConcreteGraphicsAdaptersProvider : GraphicsAdaptersProviderStrategy { public ConcreteGraphicsAdaptersProvider() { throw new PlatformNotSupportedException(); return; } public override ReadOnlyCollection Platform_Adapters { get { throw new PlatformNotSupportedException(); } } public override GraphicsAdapter Platform_DefaultAdapter { get { throw new PlatformNotSupportedException(); } } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsCapabilities.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsCapabilities : GraphicsCapabilities { internal void PlatformInitialize(GraphicsDeviceStrategy deviceStrategy) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsContext.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsContext : GraphicsContextStrategy { public override Viewport Viewport { get { return base.Viewport; } set { base.Viewport = value; PlatformApplyViewport(); } } internal ConcreteGraphicsContext(GraphicsContext context) : base(context) { } public override void PlatformSetup() { throw new PlatformNotSupportedException(); } public override void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { throw new PlatformNotSupportedException(); } internal void PlatformApplyViewport() { throw new PlatformNotSupportedException(); } protected override void PlatformResolveRenderTargets() { throw new PlatformNotSupportedException(); } protected override void PlatformApplyDefaultRenderTarget() { throw new PlatformNotSupportedException(); } protected override IRenderTarget PlatformApplyRenderTargets() { throw new PlatformNotSupportedException(); } public override void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount) { throw new PlatformNotSupportedException(); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { throw new PlatformNotSupportedException(); } public override void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { throw new PlatformNotSupportedException(); } public override void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { throw new PlatformNotSupportedException(); } public override void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) //where T : struct { throw new PlatformNotSupportedException(); } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { throw new PlatformNotSupportedException(); } public override void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) //where T : struct { throw new PlatformNotSupportedException(); } public override void Flush() { throw new PlatformNotSupportedException(); } public override OcclusionQueryStrategy CreateOcclusionQueryStrategy() { return new ConcreteOcclusionQuery(this); } public override GraphicsDebugStrategy CreateGraphicsDebugStrategy() { return new ConcreteGraphicsDebug(this); } public override ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity) { return new ConcreteConstantBufferCollection(capacity); } public override TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity) { return new ConcreteTextureCollection(this, capacity); } public override SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity) { return new ConcreteSamplerStateCollection(this, capacity); } public override ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) { throw new NotImplementedException(); } public override ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format) { throw new NotImplementedException(); } public override ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format) { throw new NotImplementedException(); } public override IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { throw new NotImplementedException(); } public override IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { throw new NotImplementedException(); } public override IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { throw new NotImplementedException(); } public override ITexture2DStrategy CreateTexture2DStrategy(Stream stream) { return new ConcreteTexture2D(this, stream); } public override ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcreteVertexShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) { return new ConcretePixelShader(this, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); } public override ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats) { return new ConcreteConstantBuffer(this, name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats); } public override IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage) { return new ConcreteDynamicIndexBuffer(this, indexElementSize, indexCount, usage); } public override VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) { return new ConcreteDynamicVertexBuffer(this, vertexDeclaration, vertexCount, usage); } public override IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source) { return new ConcreteBlendState(this, source); } public override IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source) { return new ConcreteDepthStencilState(this, source); } public override IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy source) { return new ConcreteRasterizerState(this, source); } public override ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source) { return new ConcreteSamplerState(this, source); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsDebug.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDebug : GraphicsDebugStrategy { internal ConcreteGraphicsDebug(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { } public override bool TryDequeueMessage(out GraphicsDebugMessage message) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsDevice.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteGraphicsDevice : GraphicsDeviceStrategy { internal ConcreteGraphicsDevice(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) : base(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters) { } public override void Reset() { throw new PlatformNotSupportedException(); } public override void Reset(PresentationParameters presentationParameters) { throw new PlatformNotSupportedException(); } public override void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle) { throw new PlatformNotSupportedException(); } public override void Present() { throw new PlatformNotSupportedException(); } public override void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) { throw new PlatformNotSupportedException(); } protected override void PlatformInitialize() { throw new PlatformNotSupportedException(); } public override GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context) { return new ConcreteGraphicsContext(context); } public override System.Reflection.Assembly ConcreteAssembly { get { return ReflectionHelpers.GetAssembly(typeof(ConcreteGraphicsDevice)); } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteGraphicsFactory.cs ================================================ // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteGraphicsFactory : GraphicsFactory { public override GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy() { return new ConcreteGraphicsAdaptersProvider(); } public override GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { return new ConcreteGraphicsDevice(device, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters); } public override SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity) { return new SpriteBatcher(graphicsDevice, capacity); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteOcclusionQuery.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteOcclusionQuery : OcclusionQueryStrategy { public override int PixelCount { get { throw new PlatformNotSupportedException(); } } public override bool IsComplete { get { throw new PlatformNotSupportedException(); } } internal ConcreteOcclusionQuery(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { throw new PlatformNotSupportedException(); } public override void PlatformBegin() { throw new PlatformNotSupportedException(); } public override void PlatformEnd() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteRenderTarget2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget2D : ConcreteTexture2D, IRenderTarget2DStrategy, IRenderTargetStrategy { internal int _multiSampleCount; internal ConcreteRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, TextureSurfaceType surfaceType) : base(contextStrategy, width, height, mipMap, preferredSurfaceFormat, arraySize, shared, isRenderTarget: true) { if (surfaceType == TextureSurfaceType.RenderTargetSwapChain) { // Texture will be created by the RenderTargetSwapChain. return; } PlatformConstructTexture2D_rt(contextStrategy, width, height, mipMap, preferredSurfaceFormat, shared); PlatformConstructRenderTarget2D(contextStrategy, width, height, mipMap, preferredDepthFormat, preferredMultiSampleCount, shared); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { throw new PlatformNotSupportedException(); } } public int MultiSampleCount { get { throw new PlatformNotSupportedException(); } } public RenderTargetUsage RenderTargetUsage { get { throw new PlatformNotSupportedException(); } } public bool IsContentLost { get { throw new PlatformNotSupportedException(); } } public virtual void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { throw new PlatformNotSupportedException(); } #endregion IRenderTargetStrategy private void PlatformConstructTexture2D_rt(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { base.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } private void PlatformConstructRenderTarget2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, bool shared) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteRenderTarget3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTarget3D : ConcreteTexture3D, IRenderTarget3DStrategy, IRenderTargetStrategy { internal ConcreteRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat, isRenderTarget: true) { PlatformConstructTexture3D_rt(contextStrategy, width, height, depth, mipMap, preferredSurfaceFormat); // If we don't need a depth buffer then we're done. if (preferredDepthFormat != DepthFormat.None) PlatformConstructRenderTarget3D(contextStrategy, width, height, depth, mipMap, preferredDepthFormat, preferredMultiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { throw new PlatformNotSupportedException(); } } public int MultiSampleCount { get { throw new PlatformNotSupportedException(); } } public RenderTargetUsage RenderTargetUsage { get { throw new PlatformNotSupportedException(); } } public bool IsContentLost { get { throw new PlatformNotSupportedException(); } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { throw new PlatformNotSupportedException(); } #endregion IRenderTargetStrategy private void PlatformConstructTexture3D_rt(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { base.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } private void PlatformConstructRenderTarget3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteRenderTargetCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRenderTargetCube : ConcreteTextureCube, IRenderTargetCubeStrategy, IRenderTargetStrategy { internal ConcreteRenderTargetCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) : base(contextStrategy, size, mipMap, preferredSurfaceFormat, isRenderTarget: true) { PlatformConstructTextureCube_rt(contextStrategy, size, mipMap, preferredSurfaceFormat); PlatformConstructRenderTargetCube(contextStrategy, mipMap, preferredDepthFormat, preferredMultiSampleCount); } #region IRenderTargetStrategy public DepthFormat DepthStencilFormat { get { throw new PlatformNotSupportedException(); } } public int MultiSampleCount { get { throw new PlatformNotSupportedException(); } } public RenderTargetUsage RenderTargetUsage { get { throw new PlatformNotSupportedException(); } } public bool IsContentLost { get { throw new PlatformNotSupportedException(); } } public void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy) { throw new PlatformNotSupportedException(); } #endregion IRenderTargetStrategy private void PlatformConstructTextureCube_rt(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { base.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } private void PlatformConstructRenderTargetCube(GraphicsContextStrategy contextStrategy, bool mipMap, DepthFormat preferredDepthFormat, int preferredMultiSampleCount) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteSamplerStateCollection.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteSamplerStateCollection : SamplerStateCollectionStrategy { internal ConcreteSamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { } public override SamplerState this[int index] { get { return base[index]; } set { throw new PlatformNotSupportedException(); } } public override void Clear() { throw new PlatformNotSupportedException(); } public override void Dirty() { throw new PlatformNotSupportedException(); } internal void PlatformApply() { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTexture.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture : GraphicsResourceStrategy, ITextureStrategy { internal ConcreteTexture(GraphicsContextStrategy contextStrategy, SurfaceFormat format, int levelCount) : base(contextStrategy) { } #region ITextureStrategy public SurfaceFormat Format { get { throw new PlatformNotSupportedException(); } } public int LevelCount { get { throw new PlatformNotSupportedException(); } } #endregion ITextureStrategy protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); base.PlatformGraphicsContextLost(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTexture2D.Stream.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D { internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, Stream stream) : base(contextStrategy, SurfaceFormat.Color, 1) { throw new PlatformNotSupportedException(); } public void SaveAsPng(Stream stream, int width, int height) { throw new PlatformNotSupportedException(); } public void SaveAsJpeg(Stream stream, int width, int height) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTexture2D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal partial class ConcreteTexture2D : ConcreteTexture, ITexture2DStrategy { internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height)) { this.PlatformConstructTexture2D(contextStrategy, width, height, mipMap, format, shared); } #region ITexture2DStrategy public int Width { get { throw new PlatformNotSupportedException(); } } public int Height { get { throw new PlatformNotSupportedException(); } } public int ArraySize { get { throw new PlatformNotSupportedException(); } } public Rectangle Bounds { get { throw new PlatformNotSupportedException(); } } public IntPtr GetSharedHandle() { throw new PlatformNotSupportedException(); } public void SetData(int level, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public void SetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public void GetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { throw new PlatformNotSupportedException(); } #endregion ITexture2DStrategy internal void PlatformConstructTexture2D(GraphicsContextStrategy contextStrategy, int width, int height, bool mipMap, SurfaceFormat format, bool shared) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTexture3D.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTexture3D : ConcreteTexture, ITexture3DStrategy { internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, width, height, depth)) { this.PlatformConstructTexture3D(contextStrategy, width, height, depth, mipMap, format); } #region ITexture3DStrategy public int Width { get { throw new PlatformNotSupportedException(); } } public int Height { get { throw new PlatformNotSupportedException(); } } public int Depth { get { throw new PlatformNotSupportedException(); } } public void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } #endregion ITexture3DStrategy internal void PlatformConstructTexture3D(GraphicsContextStrategy contextStrategy, int width, int height, int depth, bool mipMap, SurfaceFormat format) { throw new NotImplementedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTextureCollection.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteTextureCollection : TextureCollectionStrategy { internal ConcreteTextureCollection(GraphicsContextStrategy contextStrategy, int capacity) : base(contextStrategy, capacity) { throw new PlatformNotSupportedException(); } public override void Clear() { throw new PlatformNotSupportedException(); } internal void PlatformApply() { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/ConcreteTextureCube.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteTextureCube : ConcreteTexture, ITextureCubeStrategy { internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format, bool isRenderTarget) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { System.Diagnostics.Debug.Assert(isRenderTarget); } internal ConcreteTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) : base(contextStrategy, format, TextureHelpers.CalculateMipLevels(mipMap, size)) { this.PlatformConstructTextureCube(contextStrategy, size, mipMap, format); } #region ITextureCubeStrategy public int Size { get { throw new PlatformNotSupportedException(); } } public void SetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public void GetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct { throw new PlatformNotSupportedException(); } public int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect) { throw new PlatformNotSupportedException(); } #endregion ITextureCubeStrategy internal void PlatformConstructTextureCube(GraphicsContextStrategy contextStrategy, int size, bool mipMap, SurfaceFormat format) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Graphics/.Ref/Shader/ConcreteConstantBuffer.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBuffer : ConstantBufferStrategy { public ConcreteConstantBuffer(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats) : base(contextStrategy, name, parameters, offsets, sizeInBytes, integersAsFloats) { throw new PlatformNotSupportedException(); } private ConcreteConstantBuffer(ConcreteConstantBuffer source) : base(source) { throw new PlatformNotSupportedException(); } public override object Clone() { throw new PlatformNotSupportedException(); } internal unsafe void PlatformApply(ConcreteGraphicsContext ccontextStrategy, int slot) { throw new PlatformNotSupportedException(); } public override void PlatformContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/Shader/ConcreteConstantBufferCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal sealed class ConcreteConstantBufferCollection : ConstantBufferCollectionStrategy { private uint _valid; internal uint InternalValid { get { return this._valid; } } internal ConcreteConstantBufferCollection(int capacity) : base(capacity) { // hard limit of 32 because of _valid flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _valid = 0; } public override ConstantBuffer this[int index] { get { return base[index]; } set { if (base[index] != value) { uint mask = ((uint)1) << index; base[index] = value; if (value != null) _valid |= mask; else _valid &= ~mask; } } } public override void Clear() { for (int slot = 0; slot < base.Length; slot++) base[slot] = null; _valid = 0; } } } ================================================ FILE: Platforms/Graphics/.Ref/Shader/ConcretePixelShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcretePixelShader : ConcreteShader { internal ConcretePixelShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/Shader/ConcreteShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public abstract class ConcreteShader : ShaderStrategy { internal ConcreteShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/Shader/ConcreteVertexShader.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConcreteVertexShader : ConcreteShader { internal ConcreteVertexShader(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy, shaderVersion, shaderBytecode, samplers, cBuffers, attributes) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/States/ConcreteBlendState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteBlendState : ResourceBlendStateStrategy { internal ConcreteBlendState(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy, source) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/States/ConcreteDepthStencilState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteDepthStencilState : ResourceDepthStencilStateStrategy { internal ConcreteDepthStencilState(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy, source) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/States/ConcreteRasterizerState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteRasterizerState : ResourceRasterizerStateStrategy { internal ConcreteRasterizerState(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy, source) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/States/ConcreteSamplerState.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ConcreteSamplerState : ResourceSamplerStateStrategy { internal ConcreteSamplerState(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy, source) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/Vertices/ConcreteDynamicIndexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicIndexBuffer : ConcreteIndexBuffer, IDynamicIndexBufferStrategy { internal ConcreteDynamicIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage, isDynamic:true) { throw new PlatformNotSupportedException(); } #region IDynamicIndexBufferStrategy public bool IsContentLost { get { throw new PlatformNotSupportedException(); } } #endregion IDynamicIndexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.Ref/Vertices/ConcreteDynamicVertexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteDynamicVertexBuffer : ConcreteVertexBuffer, IDynamicVertexBufferStrategy { internal ConcreteDynamicVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage, isDynamic:true) { throw new PlatformNotSupportedException(); } #region IDynamicVertexBufferStrategy public bool IsContentLost { get { throw new PlatformNotSupportedException(); } } #endregion IDynamicVertexBufferStrategy } } ================================================ FILE: Platforms/Graphics/.Ref/Vertices/ConcreteIndexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteIndexBuffer : IndexBufferStrategy { internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, indexElementSize, indexCount, usage) { Debug.Assert(isDynamic == true); throw new PlatformNotSupportedException(); } internal ConcreteIndexBuffer(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy, indexElementSize, indexCount, usage) { throw new PlatformNotSupportedException(); } public override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) { throw new PlatformNotSupportedException(); } public override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/.Ref/Vertices/ConcreteVertexBuffer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConcreteVertexBuffer : VertexBufferStrategy { internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage, bool isDynamic) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { Debug.Assert(isDynamic == true); throw new PlatformNotSupportedException(); } internal ConcreteVertexBuffer(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy, vertexDeclaration, vertexCount, usage) { throw new PlatformNotSupportedException(); } public override void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) { throw new PlatformNotSupportedException(); } public override void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) { throw new PlatformNotSupportedException(); } protected override void PlatformGraphicsContextLost() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Graphics/Effect/Shaders/AlphaTestEffect.fx ================================================ //----------------------------------------------------------------------------- // AlphaTestEffect.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" Texture2D Texture : register(t0); sampler TextureSampler : register(s0); cbuffer Parameters : register(b0) { float4 DiffuseColor _vs(c0) _cb(c0); float4 AlphaTest _ps(c0) _cb(c1); float3 FogColor _ps(c1) _cb(c2); float4 FogVector _vs(c5) _cb(c3); float4x4 WorldViewProj _vs(c1) _cb(c0); }; #include "Structures.fxh" #include "Common.fxh" // Vertex shader: basic. VSOutputTxFog VSAlphaTestFog(VSInputTx vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: no fog. VSOutputTx VSAlphaTest(VSInputTx vin) { VSOutputTx vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: vertex color. VSOutputTxFog VSAlphaTestVcFog(VSInputTxVc vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: vertex color, no fog. VSOutputTx VSAlphaTestVc(VSInputTxVc vin) { VSOutputTx vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Pixel shader: less/greater compare function. float4 PSAlphaTestLtGtFog(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: less/greater compare function, no fog. float4 PSAlphaTestLtGt(VSOutputTx pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; clip((color.a < AlphaTest.x) ? AlphaTest.z : AlphaTest.w); return color; } // Pixel shader: equal/notequal compare function. float4 PSAlphaTestEqNeFog(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: equal/notequal compare function, no fog. float4 PSAlphaTestEqNe(VSOutputTx pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; clip((abs(color.a - AlphaTest.x) < AlphaTest.y) ? AlphaTest.z : AlphaTest.w); return color; } // NOTE: The order of the techniques here are // defined to match the indexing in AlphaTestEffect.cs. TECHNIQUE_SM2(AlphaTestEffect_LTGT, VSAlphaTest, PSAlphaTestLtGt); TECHNIQUE_SM2(AlphaTestEffect_LTGT_Fog, VSAlphaTestFog, PSAlphaTestLtGtFog); TECHNIQUE_SM2(AlphaTestEffect_LTGT_VertexColor, VSAlphaTestVc, PSAlphaTestLtGt); TECHNIQUE_SM2(AlphaTestEffect_LTGT_VertexColor_Fog, VSAlphaTestVcFog, PSAlphaTestLtGtFog); TECHNIQUE_SM2(AlphaTestEffect_EQNE, VSAlphaTest, PSAlphaTestEqNe); TECHNIQUE_SM2(AlphaTestEffect_EQNE_Fog, VSAlphaTestFog, PSAlphaTestEqNeFog); TECHNIQUE_SM2(AlphaTestEffect_EQNE_VertexColor, VSAlphaTestVc, PSAlphaTestEqNe); TECHNIQUE_SM2(AlphaTestEffect_EQNE_VertexColor_Fog, VSAlphaTestVcFog, PSAlphaTestEqNeFog); ================================================ FILE: Platforms/Graphics/Effect/Shaders/BasicEffect.fx ================================================ //----------------------------------------------------------------------------- // BasicEffect.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" Texture2D Texture : register(t0); sampler TextureSampler : register(s0); cbuffer Parameters : register(b0) { float4 DiffuseColor _vs(c0) _ps(c1) _cb(c0); float3 EmissiveColor _vs(c1) _ps(c2) _cb(c1); float3 SpecularColor _vs(c2) _ps(c3) _cb(c2); float SpecularPower _vs(c3) _ps(c4) _cb(c2.w); float3 DirLight0Direction _vs(c4) _ps(c5) _cb(c3); float3 DirLight0DiffuseColor _vs(c5) _ps(c6) _cb(c4); float3 DirLight0SpecularColor _vs(c6) _ps(c7) _cb(c5); float3 DirLight1Direction _vs(c7) _ps(c8) _cb(c6); float3 DirLight1DiffuseColor _vs(c8) _ps(c9) _cb(c7); float3 DirLight1SpecularColor _vs(c9) _ps(c10) _cb(c8); float3 DirLight2Direction _vs(c10) _ps(c11) _cb(c9); float3 DirLight2DiffuseColor _vs(c11) _ps(c12) _cb(c10); float3 DirLight2SpecularColor _vs(c12) _ps(c13) _cb(c11); float3 EyePosition _vs(c13) _ps(c14) _cb(c12); float3 FogColor _ps(c0) _cb(c13); float4 FogVector _vs(c14) _cb(c14); float4x4 World _vs(c19) _cb(c15); float3x3 WorldInverseTranspose _vs(c23) _cb(c19); float4x4 WorldViewProj _vs(c15) _cb(c0); }; #include "Structures.fxh" #include "Common.fxh" #include "Lighting.fxh" // Vertex shader: basic. VSOutputFog VSBasicFog(VSInput vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; return vout; } // Vertex shader: no fog. VSOutput VSBasic(VSInput vin) { VSOutput vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; return vout; } // Vertex shader: vertex color. VSOutputFog VSBasicVcFog(VSInputVc vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: vertex color, no fog. VSOutput VSBasicVc(VSInputVc vin) { VSOutput vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: texture. VSOutputTxFog VSBasicTxFog(VSInputTx vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: texture, no fog. VSOutputTx VSBasicTx(VSInputTx vin) { VSOutputTx vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: texture + vertex color. VSOutputTxFog VSBasicTxVcFog(VSInputTxVc vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: texture + vertex color, no fog. VSOutputTx VSBasicTxVc(VSInputTxVc vin) { VSOutputTx vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: vertex lighting. VSOutputFog VSBasicVertexLighting(VSInputNm vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; return vout; } // Vertex shader: vertex lighting + vertex color. VSOutputFog VSBasicVertexLightingVc(VSInputNmVc vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: vertex lighting + texture. VSOutputTxFog VSBasicVertexLightingTx(VSInputNmTx vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: vertex lighting + texture + vertex color. VSOutputTxFog VSBasicVertexLightingTxVc(VSInputNmTxVc vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: one light. VSOutputFog VSBasicOneLight(VSInputNm vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; return vout; } // Vertex shader: one light + vertex color. VSOutputFog VSBasicOneLightVc(VSInputNmVc vin) { VSOutputFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: one light + texture. VSOutputTxFog VSBasicOneLightTx(VSInputNmTx vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: one light + texture + vertex color. VSOutputTxFog VSBasicOneLightTxVc(VSInputNmTxVc vin) { VSOutputTxFog vout; CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: pixel lighting. VSOutputPixelLighting VSBasicPixelLighting(VSInputNm vin) { VSOutputPixelLighting vout; CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); return vout; } // Vertex shader: pixel lighting + vertex color. VSOutputPixelLighting VSBasicPixelLightingVc(VSInputNmVc vin) { VSOutputPixelLighting vout; CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse.rgb = vin.Color.rgb; vout.Diffuse.a = vin.Color.a * DiffuseColor.a; return vout; } // Vertex shader: pixel lighting + texture. VSOutputPixelLightingTx VSBasicPixelLightingTx(VSInputNmTx vin) { VSOutputPixelLightingTx vout; CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: pixel lighting + texture + vertex color. VSOutputPixelLightingTx VSBasicPixelLightingTxVc(VSInputNmTxVc vin) { VSOutputPixelLightingTx vout; CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse.rgb = vin.Color.rgb; vout.Diffuse.a = vin.Color.a * DiffuseColor.a; vout.TexCoord = vin.TexCoord; return vout; } // Pixel shader: basic. float4 PSBasicFog(VSOutputFog pin) : SV_Target0 { float4 color = pin.Diffuse; ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: no fog. float4 PSBasic(VSOutput pin) : SV_Target0 { return pin.Diffuse; } // Pixel shader: texture. float4 PSBasicTxFog(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: texture, no fog. float4 PSBasicTx(VSOutputTx pin) : SV_Target0 { return Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; } // Pixel shader: vertex lighting. float4 PSBasicVertexLightingFog(VSOutputFog pin) : SV_Target0 { float4 color = pin.Diffuse; AddSpecular(color, pin.Specular.rgb); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: vertex lighting, no fog. float4 PSBasicVertexLighting(VSOutputFog pin) : SV_Target0 { float4 color = pin.Diffuse; AddSpecular(color, pin.Specular.rgb); return color; } // Pixel shader: vertex lighting + texture. float4 PSBasicVertexLightingTxFog(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; AddSpecular(color, pin.Specular.rgb); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: vertex lighting + texture, no fog. float4 PSBasicVertexLightingTx(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; AddSpecular(color, pin.Specular.rgb); return color; } // Pixel shader: pixel lighting. float4 PSBasicPixelLighting(VSOutputPixelLighting pin) : SV_Target0 { float4 color = pin.Diffuse; float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz); float3 worldNormal = normalize(pin.NormalWS); ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3); color.rgb *= lightResult.Diffuse; AddSpecular(color, lightResult.Specular); ApplyFog(color, pin.PositionWS.w); return color; } // Pixel shader: pixel lighting + texture. float4 PSBasicPixelLightingTx(VSOutputPixelLightingTx pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz); float3 worldNormal = normalize(pin.NormalWS); ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3); color.rgb *= lightResult.Diffuse; AddSpecular(color, lightResult.Specular); ApplyFog(color, pin.PositionWS.w); return color; } // NOTE: The order of the techniques here are // defined to match the indexing in BasicEffect.cs. TECHNIQUE_SM2( BasicEffect, VSBasic, PSBasic ); TECHNIQUE_SM2( BasicEffect_Fog, VSBasicFog, PSBasicFog ); TECHNIQUE_SM2( BasicEffect_VertexColor, VSBasicVc, PSBasic ); TECHNIQUE_SM2( BasicEffect_VertexColor_Fog, VSBasicVcFog, PSBasicFog ); TECHNIQUE_SM2( BasicEffect_Texture, VSBasicTx, PSBasicTx ); TECHNIQUE_SM2( BasicEffect_Texture_Fog, VSBasicTxFog, PSBasicTxFog ); TECHNIQUE_SM2( BasicEffect_Texture_VertexColor, VSBasicTxVc, PSBasicTx ); TECHNIQUE_SM2( BasicEffect_Texture_VertexColor_Fog, VSBasicTxVcFog, PSBasicTxFog ); TECHNIQUE_SM2( BasicEffect_VertexLighting, VSBasicVertexLighting, PSBasicVertexLighting ); TECHNIQUE_SM2( BasicEffect_VertexLighting_Fog, VSBasicVertexLighting, PSBasicVertexLightingFog ); TECHNIQUE_SM2( BasicEffect_VertexLighting_VertexColor, VSBasicVertexLightingVc, PSBasicVertexLighting ); TECHNIQUE_SM2( BasicEffect_VertexLighting_VertexColor_Fog, VSBasicVertexLightingVc, PSBasicVertexLightingFog ); TECHNIQUE_SM2( BasicEffect_VertexLighting_Texture, VSBasicVertexLightingTx, PSBasicVertexLightingTx ); TECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_Fog, VSBasicVertexLightingTx, PSBasicVertexLightingTxFog ); TECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_VertexColor, VSBasicVertexLightingTxVc, PSBasicVertexLightingTx ); TECHNIQUE_SM2( BasicEffect_VertexLighting_Texture_VertexColor_Fog, VSBasicVertexLightingTxVc, PSBasicVertexLightingTxFog ); TECHNIQUE_SM2( BasicEffect_OneLight, VSBasicOneLight, PSBasicVertexLighting ); TECHNIQUE_SM2( BasicEffect_OneLight_Fog, VSBasicOneLight, PSBasicVertexLightingFog ); TECHNIQUE_SM2( BasicEffect_OneLight_VertexColor, VSBasicOneLightVc, PSBasicVertexLighting ); TECHNIQUE_SM2( BasicEffect_OneLight_VertexColor_Fog, VSBasicOneLightVc, PSBasicVertexLightingFog ); TECHNIQUE_SM2( BasicEffect_OneLight_Texture, VSBasicOneLightTx, PSBasicVertexLightingTx ); TECHNIQUE_SM2( BasicEffect_OneLight_Texture_Fog, VSBasicOneLightTx, PSBasicVertexLightingTxFog ); TECHNIQUE_SM2( BasicEffect_OneLight_Texture_VertexColor, VSBasicOneLightTxVc, PSBasicVertexLightingTx ); TECHNIQUE_SM2( BasicEffect_OneLight_Texture_VertexColor_Fog, VSBasicOneLightTxVc, PSBasicVertexLightingTxFog ); TECHNIQUE_SM2( BasicEffect_PixelLighting, VSBasicPixelLighting, PSBasicPixelLighting ); TECHNIQUE_SM2( BasicEffect_PixelLighting_Fog, VSBasicPixelLighting, PSBasicPixelLighting ); TECHNIQUE_SM2( BasicEffect_PixelLighting_VertexColor, VSBasicPixelLightingVc, PSBasicPixelLighting ); TECHNIQUE_SM2( BasicEffect_PixelLighting_VertexColor_Fog, VSBasicPixelLightingVc, PSBasicPixelLighting ); TECHNIQUE_SM2( BasicEffect_PixelLighting_Texture, VSBasicPixelLightingTx, PSBasicPixelLightingTx ); TECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_Fog, VSBasicPixelLightingTx, PSBasicPixelLightingTx ); TECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_VertexColor, VSBasicPixelLightingTxVc, PSBasicPixelLightingTx ); TECHNIQUE_SM2( BasicEffect_PixelLighting_Texture_VertexColor_Fog, VSBasicPixelLightingTxVc, PSBasicPixelLightingTx ); ================================================ FILE: Platforms/Graphics/Effect/Shaders/BuildShaders.bat ================================================ @echo off setlocal SET KNIFXC="..\..\..\..\Tools\EffectCompiler\bin\Windows\AnyCPU\Release\net8.0\KNIFXC.exe" @for /f %%f IN ('dir /b *.fx') do ( echo %%~nf.fx call %KNIFXC% %%~nf.fx ..\Resources\%%~nf.dx11.fxo /Backend:DirectX11 call %KNIFXC% %%~nf.fx ..\Resources\%%~nf.ogl.fxo /Backend:OpenGL call %KNIFXC% %%~nf.fx ..\Resources\%%~nf.gles.fxo /Backend:GLES ) endlocal pause ================================================ FILE: Platforms/Graphics/Effect/Shaders/Common.fxh ================================================ //----------------------------------------------------------------------------- // Common.fxh // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- float ComputeFogFactor(float4 position) { return saturate(dot(position, FogVector)); } void ApplyFog(inout float4 color, float fogFactor) { color.rgb = lerp(color.rgb, FogColor * color.a, fogFactor); } void AddSpecular(inout float4 color, float3 specular) { color.rgb += specular * color.a; } struct CommonVSOutput { float4 Pos_ps; float4 Diffuse; float3 Specular; float FogFactor; }; CommonVSOutput ComputeCommonVSOutput(float4 position) { CommonVSOutput vout; vout.Pos_ps = mul(position, WorldViewProj); vout.Diffuse = DiffuseColor; vout.Specular = 0; vout.FogFactor = ComputeFogFactor(position); return vout; } #define SetCommonVSOutputParams \ vout.PositionPS = cout.Pos_ps; \ vout.Diffuse = cout.Diffuse; #define SetCommonVSOutputParamsFog \ vout.PositionPS = cout.Pos_ps; \ vout.Diffuse = cout.Diffuse; \ vout.Specular = float4(cout.Specular, cout.FogFactor); ================================================ FILE: Platforms/Graphics/Effect/Shaders/DualTextureEffect.fx ================================================ //----------------------------------------------------------------------------- // DualTextureEffect_Fog.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" Texture2D Texture : register(t0); sampler TextureSampler : register(s0); Texture2D Texture2 : register(t1); sampler Texture2Sampler : register(s1); cbuffer Parameters : register(b0) { float4 DiffuseColor _vs(c0) _cb(c0); float3 FogColor _ps(c0) _cb(c1); float4 FogVector _vs(c5) _cb(c2); float4x4 WorldViewProj _vs(c1) _cb(c0); }; #include "Structures.fxh" #include "Common.fxh" // Vertex shader: basic. VSOutputTx2Fog VSDualTextureFog(VSInputTx2 vin) { VSOutputTx2Fog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.TexCoord2 = vin.TexCoord2; return vout; } // Vertex shader: no fog. VSOutputTx2 VSDualTexture(VSInputTx2 vin) { VSOutputTx2 vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; vout.TexCoord2 = vin.TexCoord2; return vout; } // Vertex shader: vertex color. VSOutputTx2Fog VSDualTextureVcFog(VSInputTx2Vc vin) { VSOutputTx2Fog vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; vout.TexCoord2 = vin.TexCoord2; vout.Diffuse *= vin.Color; return vout; } // Vertex shader: vertex color, no fog. VSOutputTx2 VSDualTextureVc(VSInputTx2Vc vin) { VSOutputTx2 vout; CommonVSOutput cout = ComputeCommonVSOutput(vin.Position); SetCommonVSOutputParams; vout.TexCoord = vin.TexCoord; vout.TexCoord2 = vin.TexCoord2; vout.Diffuse *= vin.Color; return vout; } // Pixel shader: basic. float4 PSDualTextureFog(VSOutputTx2Fog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord); float4 overlay = Texture2.Sample(Texture2Sampler, pin.TexCoord2); color.rgb *= 2; color *= overlay * pin.Diffuse; ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: no fog. float4 PSDualTexture(VSOutputTx2 pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord); float4 overlay = Texture2.Sample(Texture2Sampler, pin.TexCoord2); color.rgb *= 2; color *= overlay * pin.Diffuse; return color; } // NOTE: The order of the techniques here are // defined to match the indexing in DualTextureEffect_Fog.cs. TECHNIQUE_SM2( DualTextureEffect, VSDualTexture, PSDualTexture ); TECHNIQUE_SM2( DualTextureEffect_Fog, VSDualTextureFog, PSDualTextureFog ); TECHNIQUE_SM2( DualTextureEffect_VertexColor, VSDualTextureVc, PSDualTexture ); TECHNIQUE_SM2( DualTextureEffect_VertexColor_Fog, VSDualTextureVcFog, PSDualTextureFog ); ================================================ FILE: Platforms/Graphics/Effect/Shaders/EnvironmentMapEffect.fx ================================================ //----------------------------------------------------------------------------- // EnvironmentMapEffect.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" Texture2D Texture : register(t0); sampler TextureSampler : register(s0); TextureCube EnvironmentMap : register(t1); sampler EnvironmentMapSampler : register(s1); cbuffer Parameters : register(b0) { float3 EnvironmentMapSpecular _ps(c0) _cb(c0); float FresnelFactor _vs(c0) _cb(c0.w); float EnvironmentMapAmount _vs(c1) _cb(c2.w); float4 DiffuseColor _vs(c2) _cb(c1); float3 EmissiveColor _vs(c3) _cb(c2); float3 DirLight0Direction _vs(c4) _cb(c3); float3 DirLight0DiffuseColor _vs(c5) _cb(c4); float3 DirLight1Direction _vs(c6) _cb(c5); float3 DirLight1DiffuseColor _vs(c7) _cb(c6); float3 DirLight2Direction _vs(c8) _cb(c7); float3 DirLight2DiffuseColor _vs(c9) _cb(c8); float3 EyePosition _vs(c10) _cb(c9); float3 FogColor _ps(c1) _cb(c10); float4 FogVector _vs(c11) _cb(c11); float4x4 World _vs(c16) _cb(c12); float3x3 WorldInverseTranspose _vs(c19) _cb(c16); float4x4 WorldViewProj _vs(c12) _cb(c0); }; // We don't use these parameters, but Lighting.fxh won't compile without them. #define SpecularPower 0 #define SpecularColor float3(0, 0, 0) #define DirLight0SpecularColor float3(0, 0, 0) #define DirLight1SpecularColor float3(0, 0, 0) #define DirLight2SpecularColor float3(0, 0, 0) #include "Structures.fxh" #include "Common.fxh" #include "Lighting.fxh" float ComputeFresnelFactor(float3 eyeVector, float3 worldNormal) { float viewAngle = dot(eyeVector, worldNormal); return pow(max(1 - abs(viewAngle), 0), FresnelFactor) * EnvironmentMapAmount; } VSOutputTxEnvMap ComputeEnvMapVSOutput(VSInputNmTx vin, uniform bool useFresnel, uniform int numLights) { VSOutputTxEnvMap vout; float4 pos_ws = mul(vin.Position, World); float3 eyeVector = normalize(EyePosition - pos_ws.xyz); float3 worldNormal = normalize(mul(vin.Normal, WorldInverseTranspose)); ColorPair lightResult = ComputeLights(eyeVector, worldNormal, numLights); vout.PositionPS = mul(vin.Position, WorldViewProj); vout.Diffuse = float4(lightResult.Diffuse, DiffuseColor.a); if (useFresnel) vout.Specular.rgb = ComputeFresnelFactor(eyeVector, worldNormal); else vout.Specular.rgb = EnvironmentMapAmount; vout.Specular.a = ComputeFogFactor(vin.Position); vout.TexCoord = vin.TexCoord; vout.EnvCoord = reflect(-eyeVector, worldNormal); return vout; } // Vertex shader: basic. VSOutputTxEnvMap VSEnvMap(VSInputNmTx vin) { return ComputeEnvMapVSOutput(vin, false, 3); } // Vertex shader: fresnel. VSOutputTxEnvMap VSEnvMapFresnel(VSInputNmTx vin) { return ComputeEnvMapVSOutput(vin, true, 3); } // Vertex shader: one light. VSOutputTxEnvMap VSEnvMapOneLight(VSInputNmTx vin) { return ComputeEnvMapVSOutput(vin, false, 1); } // Vertex shader: one light, fresnel. VSOutputTxEnvMap VSEnvMapOneLightFresnel(VSInputNmTx vin) { return ComputeEnvMapVSOutput(vin, true, 1); } // Pixel shader: basic. float4 PSEnvMapFog(VSOutputTxEnvMap pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a; color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: no fog. float4 PSEnvMap(VSOutputTxEnvMap pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a; color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb); return color; } // Pixel shader: specular. float4 PSEnvMapSpecularFog(VSOutputTxEnvMap pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a; color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb); color.rgb += EnvironmentMapSpecular * envmap.a; ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: specular, no fog. float4 PSEnvMapSpecular(VSOutputTxEnvMap pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float4 envmap = EnvironmentMap.Sample(EnvironmentMapSampler, pin.EnvCoord) * color.a; color.rgb = lerp(color.rgb, envmap.rgb, pin.Specular.rgb); color.rgb += EnvironmentMapSpecular * envmap.a; return color; } // NOTE: The order of the techniques here are // defined to match the indexing in EnvironmentMapEffect.cs. TECHNIQUE_SM2( EnvironmentMapEffect, VSEnvMap, PSEnvMap ); TECHNIQUE_SM2( EnvironmentMapEffect_Fog, VSEnvMap, PSEnvMapFog ); TECHNIQUE_SM2( EnvironmentMapEffect_Fresnel, VSEnvMapFresnel, PSEnvMap ); TECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Fog, VSEnvMapFresnel, PSEnvMapFog ); TECHNIQUE_SM2( EnvironmentMapEffect_Specular, VSEnvMap, PSEnvMapSpecular ); TECHNIQUE_SM2( EnvironmentMapEffect_Specular_Fog, VSEnvMap, PSEnvMapSpecularFog ); TECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Specular, VSEnvMapFresnel, PSEnvMapSpecular ); TECHNIQUE_SM2( EnvironmentMapEffect_Fresnel_Specular_Fog, VSEnvMapFresnel, PSEnvMapSpecularFog ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight, VSEnvMapOneLight, PSEnvMap ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fog, VSEnvMapOneLight, PSEnvMapFog ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel, VSEnvMapOneLightFresnel, PSEnvMap ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Fog, VSEnvMapOneLightFresnel, PSEnvMapFog ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Specular, VSEnvMapOneLight, PSEnvMapSpecular ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Specular_Fog, VSEnvMapOneLight, PSEnvMapSpecularFog ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Specular, VSEnvMapOneLightFresnel, PSEnvMapSpecular ); TECHNIQUE_SM2( EnvironmentMapEffect_OneLight_Fresnel_Specular_Fog, VSEnvMapOneLightFresnel, PSEnvMapSpecularFog ); ================================================ FILE: Platforms/Graphics/Effect/Shaders/Lighting.fxh ================================================ //----------------------------------------------------------------------------- // Lighting.fxh // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- struct ColorPair { float3 Diffuse; float3 Specular; }; ColorPair ComputeLights(float3 eyeVector, float3 worldNormal, uniform int numLights) { float3x3 lightDirections = 0; float3x3 lightDiffuse = 0; float3x3 lightSpecular = 0; float3x3 halfVectors = 0; [unroll] for (int i = 0; i < numLights; i++) { lightDirections[i] = float3x3(DirLight0Direction, DirLight1Direction, DirLight2Direction) [i]; lightDiffuse[i] = float3x3(DirLight0DiffuseColor, DirLight1DiffuseColor, DirLight2DiffuseColor) [i]; lightSpecular[i] = float3x3(DirLight0SpecularColor, DirLight1SpecularColor, DirLight2SpecularColor)[i]; halfVectors[i] = normalize(eyeVector - lightDirections[i]); } float3 dotL = mul(-lightDirections, worldNormal); float3 dotH = mul(halfVectors, worldNormal); float3 zeroL = step(float3(0,0,0), dotL); float3 diffuse = zeroL * dotL; float3 specular = pow(max(dotH, 0) * zeroL, SpecularPower); ColorPair result; result.Diffuse = mul(diffuse, lightDiffuse) * DiffuseColor.rgb + EmissiveColor; result.Specular = mul(specular, lightSpecular) * SpecularColor; return result; } CommonVSOutput ComputeCommonVSOutputWithLighting(float4 position, float3 normal, uniform int numLights) { CommonVSOutput vout; float4 pos_ws = mul(position, World); float3 eyeVector = normalize(EyePosition - pos_ws.xyz); float3 worldNormal = normalize(mul(normal, WorldInverseTranspose)); ColorPair lightResult = ComputeLights(eyeVector, worldNormal, numLights); vout.Pos_ps = mul(position, WorldViewProj); vout.Diffuse = float4(lightResult.Diffuse, DiffuseColor.a); vout.Specular = lightResult.Specular; vout.FogFactor = ComputeFogFactor(position); return vout; } struct CommonVSOutputPixelLighting { float4 Pos_ps; float3 Pos_ws; float3 Normal_ws; float FogFactor; }; CommonVSOutputPixelLighting ComputeCommonVSOutputPixelLighting(float4 position, float3 normal) { CommonVSOutputPixelLighting vout; vout.Pos_ps = mul(position, WorldViewProj); vout.Pos_ws = mul(position, World).xyz; vout.Normal_ws = normalize(mul(normal, WorldInverseTranspose)); vout.FogFactor = ComputeFogFactor(position); return vout; } #define SetCommonVSOutputParamsPixelLightingFog \ vout.PositionPS = cout.Pos_ps; \ vout.PositionWS = float4(cout.Pos_ws, cout.FogFactor); \ vout.NormalWS = cout.Normal_ws; ================================================ FILE: Platforms/Graphics/Effect/Shaders/Macros.fxh ================================================ //----------------------------------------------------------------------------- // Macros.fxh // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #define TECHNIQUE_SM2(name, vsname, psname ) \ technique name { pass { \ VertexShader = compile vs_4_0_level_9_1 vsname(); \ PixelShader = compile ps_4_0_level_9_1 psname(); \ } } #define TECHNIQUE_SM3(name, vsname, psname ) \ technique name { pass { \ VertexShader = compile vs_4_0_level_9_3 vsname(); \ PixelShader = compile ps_4_0_level_9_3 psname(); \ } } #ifdef __KNIFX__ // HLSL Shader Model 4.0 macros (for targeting KNI) #define _vs(r) #define _ps(r) #define _cb(r) #else // HLSL Shader Model 2.0 & 3.0 macros (for targeting XNA) #define _vs(r) : register(vs, r) #define _ps(r) : register(ps, r) #define _cb(r) #endif ================================================ FILE: Platforms/Graphics/Effect/Shaders/Microsoft_Permissive_License.rtf ================================================ {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f36\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} {\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} {\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f51\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f52\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} {\f54\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f55\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f56\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f57\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} {\f58\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f59\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f401\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f402\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} {\f404\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f405\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f408\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f421\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;} {\f422\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f424\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f425\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f426\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);} {\f427\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f428\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f429\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f430\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);} {\f441\fbidi \fswiss\fcharset238\fprq2 Verdana CE;}{\f442\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr;}{\f444\fbidi \fswiss\fcharset161\fprq2 Verdana Greek;}{\f445\fbidi \fswiss\fcharset162\fprq2 Verdana Tur;} {\f448\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic;}{\f449\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} {\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} {\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} {\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} {\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} {\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} {\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} {\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} {\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} {\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; \red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; \red192\green192\blue192;}{\*\defchp }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat \spriority9 heading 1;}{\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink16 \sqformat \spriority9 heading 2;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\f36\fs32\kerning32 \sbasedon10 \slink1 \slocked \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0 \b\i\f36\fs28 \sbasedon10 \slink2 \slocked \spriority9 Heading 2 Char;}{\s17\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0 \f38\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused \styrsid7424395 Balloon Text;}{\*\cs18 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \f38\fs16 \sbasedon10 \slink17 \slocked \ssemihidden \styrsid7424395 Balloon Text Char;}{\*\cs19 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid4538388 annotation reference;}{\s20\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs20\alang1025 \ltrch\fcs0 \f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 \slink21 \ssemihidden \sunhideused \styrsid4538388 annotation text;}{\*\cs21 \additive \rtlch\fcs1 \af1 \ltrch\fcs0 \f1 \sbasedon10 \slink20 \slocked \ssemihidden \styrsid4538388 Comment Text Char;}{\s22\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs20\alang1025 \ltrch\fcs0 \b\f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon20 \snext20 \slink23 \ssemihidden \sunhideused \styrsid4538388 annotation subject;}{\*\cs23 \additive \rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f1 \sbasedon21 \slink22 \slocked \ssemihidden \styrsid4538388 Comment Subject Char;}}{\*\rsidtbl \rsid213160 \rsid284417\rsid417145\rsid481196\rsid551334\rsid723397\rsid786968\rsid1382437\rsid1390003\rsid1521043\rsid1530955\rsid1708989\rsid1783212\rsid1903779\rsid2431884\rsid3165084\rsid3416120\rsid3419781\rsid3754103\rsid3768194\rsid3831520\rsid4538130 \rsid4538388\rsid4552277\rsid4680449\rsid4729674\rsid4865270\rsid4987534\rsid5128131\rsid5186068\rsid5864350\rsid6186044\rsid6311778\rsid6384507\rsid6434687\rsid6561471\rsid6910344\rsid6947552\rsid7033180\rsid7424395\rsid7682010\rsid7690850\rsid7744081 \rsid8151618\rsid8196281\rsid8198206\rsid8342723\rsid8350925\rsid8722561\rsid8852349\rsid8934457\rsid8944153\rsid9573035\rsid9635349\rsid9638545\rsid9724918\rsid10044820\rsid10095979\rsid10228618\rsid10449644\rsid10494075\rsid11166278\rsid11166751 \rsid11285353\rsid11366513\rsid11494815\rsid11932529\rsid12061202\rsid12533699\rsid12536400\rsid12916885\rsid13264736\rsid13322831\rsid13440556\rsid13455614\rsid13597357\rsid13768671\rsid14097590\rsid14157399\rsid14229900\rsid14305025\rsid14314735 \rsid14436896\rsid14565916\rsid14572556\rsid14688892\rsid14752433\rsid14904394\rsid15086147\rsid15749945\rsid15814398\rsid15927751\rsid16071312\rsid16126175\rsid16279402\rsid16391569\rsid16404661\rsid16452939\rsid16537688\rsid16606866\rsid16674896} {\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\title Microsoft Permissive License (Ms-PL)}{\author Jonr}{\operator Dean Johnson}{\creatim\yr2007\mo2\dy23\hr15\min10} {\revtim\yr2007\mo2\dy23\hr15\min10}{\printim\yr2006\mo9\dy28\hr8\min46}{\version2}{\edmins1}{\nofpages1}{\nofwords404}{\nofchars2221}{\*\company Microsoft}{\nofcharsws2620}{\vern32859}{\*\saveprevpict}}{\*\userprops {\propname _NewReviewCycle}\proptype30 {\staticval }}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}{\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\hyphcaps0\horzdoc\dghspace120\dgvspace120 \dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\splytwnine\ftnlytwnine\htmautsp\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot10494075 \newtblstyruls\nogrowautofit\utinl \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}} {\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (} {\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar \s1\ql \li0\ri0\sb180\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075\charrsid14688892 Microsoft}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 Permissive}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid14688892 }{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 License (Ms-PL}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid4552277 )}{\rtlch\fcs1 \af1\afs31 \ltrch\fcs0 \fs31\cf1\kerning36\insrsid10494075 \par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs17 \ltrch\fcs0 \b\f40\fs17\insrsid10494075 \par This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. \par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6910344 \par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid10494075 1. Definitions \par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 The terms \'93reproduce,\'94 \'93reproduction}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7744081 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 \'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334 \'93derivative works,\'94}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7744081\charrsid7744081 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 and \'93distribution\'94 have the same meaning here as under {\*\xmlopen\xmlns2{\factoidname country-region}}{\*\xmlopen\xmlns2{\factoidname place}}U.S.{\*\xmlclose}{\*\xmlclose} copyright law. \par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 A \'93contribution\'94 is the original software}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid4865270 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid11932529 or}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 any additions or changes to the software. \par }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334 A \'93c}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334\charrsid551334 ontributor\'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 is}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400\charrsid551334 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid551334\charrsid551334 any person that }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 distributes its contribution under this license.}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14229900 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid4729674\delrsid4729674 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 \'93Licensed patents \'94 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 are }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 a contributor\rquote s }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 patent claims }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 that }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 read directly on }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3831520 its contribution.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid14229900\charrsid14229900 \par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid5186068 \par }{\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid10494075 2. Grant of Rights \par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 each contributor }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 , prepare derivative works of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid12536400 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 and distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3754103 its contribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 or any derivative works that you create. \par (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid9724918 each contributor }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 grants you a non-exclusive, worldwide, royalty-free license under }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15814398 its }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 licensed patents to make, have made, use, sell, offer for sale, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1390003 import, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 and/or otherwise dispose of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid8944153 its contribution in }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software or derivative works of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid8944153 the contribution in }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software. \par }\pard\plain \ltrpar\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid5186068 \par }{\rtlch\fcs1 \ab\af40\afs23 \ltrch\fcs0 \b\f40\fs23\insrsid10494075 3. Conditions and Limitations \par }\pard\plain \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \f1\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1530955 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 (A) No Trademark License- This license does not grant you rights to use }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1708989 any contributors\rquote }{ \rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 name, logo, or trademarks. \par (B) If you }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid8934457 bring a patent claim against }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10095979 any contributor}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 over patents that you }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6947552 claim }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 are }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6947552 infringe}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 d by}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software, your }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 patent }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 license}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid7682010 from such contributor}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 to the software ends automatically. \par (C) If you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid3165084 any portion of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. \par (D) If you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15749945 any portion of the }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 software in source code form}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid14904394 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 you may do so only under this license}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid14904394 by including }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 a complete copy of this license with your distribution}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 .}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid6384507 I}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 f you distribute }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid15749945 any portion of }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 the software in compiled or object code form}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid16452939 ,}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 you may only do so under a license that complies with this license. \par }\pard \ltrpar\ql \li0\ri0\sl336\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14572556 {\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 (E) The software is licensed \'93as-is.\'94 You bear the risk of using it. }{ \rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid284417 The contributors }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid1783212 the contributors }{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075 exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.}{\rtlch\fcs1 \af40\afs17 \ltrch\fcs0 \f40\fs17\insrsid10494075\charrsid14572556 \par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b 44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc 52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c 070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65 312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8 a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04 98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c 94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471 7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671 9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1 e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5 193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1 17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2 8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6 6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a 668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847 bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e 16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b 5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0 8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2 c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966 0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b 7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb 9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0 088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf 8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26 ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0 28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6 345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93 b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30 254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74 68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24 51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198 720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528 a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000 000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000 002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468 656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000 00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000 00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000} {\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d 617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} {\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8; \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 1;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 2;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 3;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 4; \lsdqformat1 \lsdpriority39 \lsdlocked0 toc 5;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 6;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 7;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 8;\lsdqformat1 \lsdpriority39 \lsdlocked0 toc 9; \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid; \lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4; \lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5; \lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; \lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference; \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography; \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000d070 a7c59f57c701feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} ================================================ FILE: Platforms/Graphics/Effect/Shaders/SkinnedEffect.fx ================================================ //----------------------------------------------------------------------------- // SkinnedEffect.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" #define SKINNED_EFFECT_MAX_BONES 72 Texture2D Texture : register(t0); sampler TextureSampler : register(s0); cbuffer Parameters : register(b0) { float4 DiffuseColor _vs(c0) _ps(c1) _cb(c0); float3 EmissiveColor _vs(c1) _ps(c2) _cb(c1); float3 SpecularColor _vs(c2) _ps(c3) _cb(c2); float SpecularPower _vs(c3) _ps(c4) _cb(c2.w); float3 DirLight0Direction _vs(c4) _ps(c5) _cb(c3); float3 DirLight0DiffuseColor _vs(c5) _ps(c6) _cb(c4); float3 DirLight0SpecularColor _vs(c6) _ps(c7) _cb(c5); float3 DirLight1Direction _vs(c7) _ps(c8) _cb(c6); float3 DirLight1DiffuseColor _vs(c8) _ps(c9) _cb(c7); float3 DirLight1SpecularColor _vs(c9) _ps(c10) _cb(c8); float3 DirLight2Direction _vs(c10) _ps(c11) _cb(c9); float3 DirLight2DiffuseColor _vs(c11) _ps(c12) _cb(c10); float3 DirLight2SpecularColor _vs(c12) _ps(c13) _cb(c11); float3 EyePosition _vs(c13) _ps(c14) _cb(c12); float3 FogColor _ps(c0) _cb(c13); float4 FogVector _vs(c14) _cb(c14); float4x4 World _vs(c19) _cb(c15); float3x3 WorldInverseTranspose _vs(c23) _cb(c19); float4x3 Bones[SKINNED_EFFECT_MAX_BONES] _vs(c26) _cb(c22); float4x4 WorldViewProj _vs(c15) _cb(c0); }; #include "Structures.fxh" #include "Common.fxh" #include "Lighting.fxh" void Skin(inout VSInputNmTxWeights vin, uniform int boneCount) { float4x3 skinning = 0; [unroll] for (int i = 0; i < boneCount; i++) { skinning += Bones[vin.Indices[i]] * vin.Weights[i]; } vin.Position.xyz = mul(vin.Position, skinning); vin.Normal = mul(vin.Normal, (float3x3)skinning); } // Vertex shader: vertex lighting, one bone. VSOutputTxFog VSSkinnedVertexLightingOneBone(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 1); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: vertex lighting, two bones. VSOutputTxFog VSSkinnedVertexLightingTwoBones(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 2); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: vertex lighting, four bones. VSOutputTxFog VSSkinnedVertexLightingFourBones(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 4); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 3); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: one light, one bone. VSOutputTxFog VSSkinnedOneLightOneBone(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 1); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: one light, two bones. VSOutputTxFog VSSkinnedOneLightTwoBones(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 2); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: one light, four bones. VSOutputTxFog VSSkinnedOneLightFourBones(VSInputNmTxWeights vin) { VSOutputTxFog vout; Skin(vin, 4); CommonVSOutput cout = ComputeCommonVSOutputWithLighting(vin.Position, vin.Normal, 1); SetCommonVSOutputParamsFog; vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: pixel lighting, one bone. VSOutputPixelLightingTx VSSkinnedPixelLightingOneBone(VSInputNmTxWeights vin) { VSOutputPixelLightingTx vout; Skin(vin, 1); CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: pixel lighting, two bones. VSOutputPixelLightingTx VSSkinnedPixelLightingTwoBones(VSInputNmTxWeights vin) { VSOutputPixelLightingTx vout; Skin(vin, 2); CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); vout.TexCoord = vin.TexCoord; return vout; } // Vertex shader: pixel lighting, four bones. VSOutputPixelLightingTx VSSkinnedPixelLightingFourBones(VSInputNmTxWeights vin) { VSOutputPixelLightingTx vout; Skin(vin, 4); CommonVSOutputPixelLighting cout = ComputeCommonVSOutputPixelLighting(vin.Position, vin.Normal); SetCommonVSOutputParamsPixelLightingFog; vout.Diffuse = float4(1, 1, 1, DiffuseColor.a); vout.TexCoord = vin.TexCoord; return vout; } // Pixel shader: vertex lighting. float4 PSSkinnedVertexLightingFog(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; AddSpecular(color, pin.Specular.rgb); ApplyFog(color, pin.Specular.w); return color; } // Pixel shader: vertex lighting, no fog. float4 PSSkinnedVertexLighting(VSOutputTxFog pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; AddSpecular(color, pin.Specular.rgb); return color; } // Pixel shader: pixel lighting. float4 PSSkinnedPixelLighting(VSOutputPixelLightingTx pin) : SV_Target0 { float4 color = Texture.Sample(TextureSampler, pin.TexCoord) * pin.Diffuse; float3 eyeVector = normalize(EyePosition - pin.PositionWS.xyz); float3 worldNormal = normalize(pin.NormalWS); ColorPair lightResult = ComputeLights(eyeVector, worldNormal, 3); color.rgb *= lightResult.Diffuse; AddSpecular(color, lightResult.Specular); ApplyFog(color, pin.PositionWS.w); return color; } // NOTE: The order of the techniques here are // defined to match the indexing in SkinnedEffect.cs. TECHNIQUE_SM2( SkinnedEffect_VertexLighting_OneBone, VSSkinnedVertexLightingOneBone, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_VertexLighting_OneBone_Fog, VSSkinnedVertexLightingOneBone, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_VertexLighting_TwoBone, VSSkinnedVertexLightingTwoBones, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_VertexLighting_TwoBone_Fog, VSSkinnedVertexLightingTwoBones, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_VertexLighting_FourBone, VSSkinnedVertexLightingFourBones, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_VertexLighting_FourBone_Fog, VSSkinnedVertexLightingFourBones, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_OneLight_OneBone, VSSkinnedOneLightOneBone, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_OneLight_OneBone_Fog, VSSkinnedOneLightOneBone, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_OneLight_TwoBone, VSSkinnedOneLightTwoBones, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_OneLight_TwoBone_Fog, VSSkinnedOneLightTwoBones, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_OneLight_FourBone, VSSkinnedOneLightFourBones, PSSkinnedVertexLighting ); TECHNIQUE_SM2( SkinnedEffect_OneLight_FourBone_Fog, VSSkinnedOneLightFourBones, PSSkinnedVertexLightingFog ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_OneBone, VSSkinnedPixelLightingOneBone, PSSkinnedPixelLighting ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_OneBone_Fog, VSSkinnedPixelLightingOneBone, PSSkinnedPixelLighting ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_TwoBone, VSSkinnedPixelLightingTwoBones, PSSkinnedPixelLighting ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_TwoBone_Fog, VSSkinnedPixelLightingTwoBones, PSSkinnedPixelLighting ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_FourBone, VSSkinnedPixelLightingFourBones, PSSkinnedPixelLighting ); TECHNIQUE_SM2( SkinnedEffect_PixelLighting_FourBone_Fog, VSSkinnedPixelLightingFourBones, PSSkinnedPixelLighting ); ================================================ FILE: Platforms/Graphics/Effect/Shaders/SpriteEffect.fx ================================================ //----------------------------------------------------------------------------- // SpriteEffect.fx // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #include "Macros.fxh" Texture2D Texture : register(t0); sampler TextureSampler : register(s0); cbuffer Parameters : register(b0) { float4x4 MatrixTransform _vs(c0) _cb(c0); }; struct VSOutputFog { float4 position : SV_Position; float4 color : COLOR0; float2 texCoord : TEXCOORD0; }; VSOutputFog SpriteVertexShader( float4 position : POSITION0, float4 color : COLOR0, float2 texCoord : TEXCOORD0) { VSOutputFog output; output.position = mul(position, MatrixTransform); output.color = color; output.texCoord = texCoord; return output; } float4 SpritePixelShader(VSOutputFog input) : SV_Target0 { return Texture.Sample(TextureSampler, input.texCoord) * input.color; } TECHNIQUE_SM2( SpriteBatch, SpriteVertexShader, SpritePixelShader ); ================================================ FILE: Platforms/Graphics/Effect/Shaders/Structures.fxh ================================================ //----------------------------------------------------------------------------- // Structurs.fxh // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // Vertex shader input structures. struct VSInput { float4 Position : POSITION; }; struct VSInputVc { float4 Position : POSITION; float4 Color : COLOR; }; struct VSInputTx { float4 Position : POSITION; float2 TexCoord : TEXCOORD; }; struct VSInputTxVc { float4 Position : POSITION; float2 TexCoord : TEXCOORD; float4 Color : COLOR; }; struct VSInputNm { float4 Position : POSITION; float3 Normal : NORMAL; }; struct VSInputNmVc { float4 Position : POSITION; float3 Normal : NORMAL; float4 Color : COLOR; }; struct VSInputNmTx { float4 Position : POSITION; float3 Normal : NORMAL; float2 TexCoord : TEXCOORD; }; struct VSInputNmTxVc { float4 Position : POSITION; float3 Normal : NORMAL; float2 TexCoord : TEXCOORD; float4 Color : COLOR; }; struct VSInputTx2 { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; }; struct VSInputTx2Vc { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; float4 Color : COLOR; }; struct VSInputNmTxWeights { float4 Position : POSITION0; float3 Normal : NORMAL0; float2 TexCoord : TEXCOORD0; uint4 Indices : BLENDINDICES0; float4 Weights : BLENDWEIGHT0; }; // Vertex shader output structures. struct VSOutput { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; }; struct VSOutputFog { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float4 Specular : COLOR1; }; struct VSOutputTx { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float2 TexCoord : TEXCOORD0; }; struct VSOutputTxFog { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float4 Specular : COLOR1; float2 TexCoord : TEXCOORD0; }; struct VSOutputPixelLighting { float4 PositionPS : SV_Position; float4 PositionWS : TEXCOORD0; float3 NormalWS : TEXCOORD1; float4 Diffuse : COLOR0; }; struct VSOutputPixelLightingTx { float4 PositionPS : SV_Position; float2 TexCoord : TEXCOORD0; float4 PositionWS : TEXCOORD1; float3 NormalWS : TEXCOORD2; float4 Diffuse : COLOR0; }; struct VSOutputTx2 { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; }; struct VSOutputTx2Fog { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float4 Specular : COLOR1; float2 TexCoord : TEXCOORD0; float2 TexCoord2 : TEXCOORD1; }; struct VSOutputTxEnvMap { float4 PositionPS : SV_Position; float4 Diffuse : COLOR0; float4 Specular : COLOR1; float2 TexCoord : TEXCOORD0; float3 EnvCoord : TEXCOORD1; }; ================================================ FILE: Platforms/Graphics/RenderTargetSwapChain.OpenGL.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { /// /// A RenderTarget used for rendering to a swap chain. /// /// /// This is an extension and not part of stock XNA. /// internal class RenderTargetSwapChain : RenderTarget2D { internal ConcreteRenderTargetSwapChain _strategyRenderTargetSwapChain; public readonly PresentInterval PresentInterval; public RenderTargetSwapChain(GraphicsDevice graphicsDevice, IntPtr glTextureHandle, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, PresentInterval presentInterval) : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), false, 1, true) { SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat); _strategyRenderTargetSwapChain = new ConcreteRenderTargetSwapChain(((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.MainContext).Strategy, width, height, mipMap, usage, glTextureHandle, presentInterval, format, preferredDepthFormat, preferredMultiSampleCount); _strategyRenderTarget2D = _strategyRenderTargetSwapChain; _strategyTexture2D = _strategyRenderTarget2D; _strategyTexture = _strategyTexture2D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D); this.PresentInterval = presentInterval; } /// /// Displays the contents of the active back buffer to the screen. /// public void Present() { _strategyRenderTargetSwapChain.Present(); } } } ================================================ FILE: Platforms/Graphics/SwapChainRenderTarget.DirectX.cs ================================================  // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { /// /// A swap chain used for rendering to a secondary GameWindow. /// /// /// This is an extension and not part of stock XNA. /// It is currently implemented for Windows and DirectX only. /// public class SwapChainRenderTarget : RenderTarget2D { internal ConcreteRenderTargetSwapChain _strategyRenderTargetSwapChain; public readonly PresentInterval PresentInterval; public SwapChainRenderTarget(GraphicsDevice graphicsDevice, IntPtr windowHandle, int width, int height) : this(graphicsDevice, windowHandle, width, height, false, SurfaceFormat.Bgra32, DepthFormat.Depth24, 0, RenderTargetUsage.DiscardContents, PresentInterval.Default) { } public SwapChainRenderTarget(GraphicsDevice graphicsDevice, IntPtr windowHandle, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, PresentInterval presentInterval) : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), false, 1, true) { SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat); _strategyRenderTargetSwapChain = new ConcreteRenderTargetSwapChain(((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.MainContext).Strategy, width, height, mipMap, usage, windowHandle, presentInterval, format, preferredDepthFormat, preferredMultiSampleCount); _strategyRenderTarget2D = _strategyRenderTargetSwapChain; _strategyTexture2D = _strategyRenderTarget2D; _strategyTexture = _strategyTexture2D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D); this.PresentInterval = presentInterval; } // TODO: We need to expose the other Present() overloads // for passing source/dest rectangles. /// /// Displays the contents of the active back buffer to the screen. /// public void Present() { _strategyRenderTargetSwapChain.Present(); } } } ================================================ FILE: Platforms/ILLink.Descriptors.xml ================================================ ================================================ FILE: Platforms/Input/.Android/ConcreteGamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Android.Views; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { const int MaxNumberOfGamePads = 4; // we will support up to 4 local controllers private readonly AndroidGamePadDevice[] _gamepads = new AndroidGamePadDevice[MaxNumberOfGamePads]; // support the back button when we don't have a gamepad connected internal bool Back; // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { return 0.24f; } } public override float RightThumbDeadZone { get { return 0.265f; } } public override int PlatformGetMaxNumberOfGamePads() { return MaxNumberOfGamePads; } public override GamePadCapabilities PlatformGetCapabilities(int index) { AndroidGamePadDevice gamePad = _gamepads[index]; if (gamePad != null) return gamePad.Capabilities; // we need to add the default "no gamepad connected but the user hit back" // behaviour here return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: Buttons.Back, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { AndroidGamePadDevice gamePad = _gamepads[index]; GamePadState state = new GamePadState(); if (gamePad != null && gamePad._isConnected) { // Check if the device was disconnected InputDevice dvc = InputDevice.GetDevice(gamePad._deviceId); if (dvc == null) { Android.Util.Log.Debug("MonoGame", "Detected controller disconnect [" + index + "] "); gamePad._isConnected = false; return state; } GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks(gamePad._leftStick, gamePad._rightStick, leftDeadZoneMode, rightDeadZoneMode); state = base.CreateGamePadState( thumbSticks, new GamePadTriggers(gamePad._leftTrigger, gamePad._rightTrigger), new GamePadButtons(gamePad._buttons), base.CreateGamePadDPad(gamePad._buttons)); } // we need to add the default "no gamepad connected but the user hit back" // behaviour here else { if (index == 0 && Back) { // Consume state state = base.CreateGamePadState(new GamePadThumbSticks(), new GamePadTriggers(), new GamePadButtons(Buttons.Back), new GamePadDPad(), isConnected: false); } else state = new GamePadState(); } return state; } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { AndroidGamePadDevice gamePad = _gamepads[index]; if (gamePad == null) return false; Android.OS.Vibrator vibrator = gamePad._device.Vibrator; if (!vibrator.HasVibrator) return false; vibrator.Vibrate(500); return true; } internal AndroidGamePadDevice GetGamePad(InputDevice device) { if (device == null || (device.Sources & InputSourceType.Gamepad) != InputSourceType.Gamepad) return null; int firstDisconnectedPadId = -1; for (int i = 0; i < _gamepads.Length; i++) { AndroidGamePadDevice pad = _gamepads[i]; if (pad != null && pad._isConnected && pad._deviceId == device.Id) { return pad; } else if (pad != null && !pad._isConnected && pad._descriptor == device.Descriptor) { Android.Util.Log.Debug("MonoGame", "Found previous controller [" + i + "] " + device.Name); pad._deviceId = device.Id; pad._isConnected = true; return pad; } else if (pad == null) { Android.Util.Log.Debug("MonoGame", "Found new controller [" + i + "] " + device.Name); GamePadCapabilities caps = CapabilitiesOfDevice(device); pad = new AndroidGamePadDevice(device, caps); _gamepads[i] = pad; return pad; } else if (!pad._isConnected && firstDisconnectedPadId < 0) { firstDisconnectedPadId = i; } } // If we get here, we failed to find a game pad or an empty slot to create one. // If we're holding onto a disconnected pad, overwrite it with this one if (firstDisconnectedPadId >= 0) { Android.Util.Log.Debug("MonoGame", "Found new controller in place of disconnected controller [" + firstDisconnectedPadId + "] " + device.Name); GamePadCapabilities caps = CapabilitiesOfDevice(device); AndroidGamePadDevice pad = new AndroidGamePadDevice(device, caps); _gamepads[firstDisconnectedPadId] = pad; return pad; } // All pad slots are taken so ignore further devices. return null; } internal bool OnKeyDown(Keycode keyCode, KeyEvent e) { AndroidGamePadDevice gamePad = GetGamePad(e.Device); if (gamePad == null) return false; gamePad.DPadButtons |= e.KeyCode == Keycode.DpadLeft || e.KeyCode == Keycode.DpadUp || e.KeyCode == Keycode.DpadRight || e.KeyCode == Keycode.DpadDown; gamePad._buttons |= ButtonForKeyCode(keyCode); return true; } internal bool OnKeyUp(Keycode keyCode, KeyEvent e) { AndroidGamePadDevice gamePad = GetGamePad(e.Device); if (gamePad == null) return false; gamePad._buttons &= ~ButtonForKeyCode(keyCode); return true; } internal bool OnGenericMotionEvent(MotionEvent e) { AndroidGamePadDevice gamePad = GetGamePad(e.Device); if (gamePad == null) return false; if (e.Action != MotionEventActions.Move) return false; gamePad._leftStick = new Vector2(e.GetAxisValue(Axis.X), -e.GetAxisValue(Axis.Y)); gamePad._rightStick = new Vector2(e.GetAxisValue(Axis.Z), -e.GetAxisValue(Axis.Rz)); gamePad._leftTrigger = e.GetAxisValue(Axis.Ltrigger); gamePad._rightTrigger = e.GetAxisValue(Axis.Rtrigger); if (gamePad._leftTrigger == 0) gamePad._leftTrigger = e.GetAxisValue(Axis.Brake); if (gamePad._rightTrigger == 0) gamePad._rightTrigger = e.GetAxisValue(Axis.Gas); if(!gamePad.DPadButtons) { if(e.GetAxisValue(Axis.HatX) < 0) { gamePad._buttons |= Buttons.DPadLeft; gamePad._buttons &= ~Buttons.DPadRight; } else if(e.GetAxisValue(Axis.HatX) > 0) { gamePad._buttons &= ~Buttons.DPadLeft; gamePad._buttons |= Buttons.DPadRight; } else { gamePad._buttons &= ~Buttons.DPadLeft; gamePad._buttons &= ~Buttons.DPadRight; } if(e.GetAxisValue(Axis.HatY) < 0) { gamePad._buttons |= Buttons.DPadUp; gamePad._buttons &= ~Buttons.DPadDown; } else if(e.GetAxisValue(Axis.HatY) > 0) { gamePad._buttons &= ~Buttons.DPadUp; gamePad._buttons |= Buttons.DPadDown; } else { gamePad._buttons &= ~Buttons.DPadUp; gamePad._buttons &= ~Buttons.DPadDown; } } return true; } private Buttons ButtonForKeyCode(Keycode keyCode) { switch (keyCode) { case Keycode.ButtonA: return Buttons.A; case Keycode.ButtonX: return Buttons.X; case Keycode.ButtonY: return Buttons.Y; case Keycode.ButtonB: return Buttons.B; case Keycode.ButtonL1: return Buttons.LeftShoulder; case Keycode.ButtonL2: return Buttons.LeftTrigger; case Keycode.ButtonR1: return Buttons.RightShoulder; case Keycode.ButtonR2: return Buttons.RightTrigger; case Keycode.ButtonThumbl: return Buttons.LeftStick; case Keycode.ButtonThumbr: return Buttons.RightStick; case Keycode.DpadUp: return Buttons.DPadUp; case Keycode.DpadDown: return Buttons.DPadDown; case Keycode.DpadLeft: return Buttons.DPadLeft; case Keycode.DpadRight: return Buttons.DPadRight; case Keycode.ButtonStart: return Buttons.Start; case Keycode.Back: return Buttons.Back; default: return 0; } } internal void Initialize() { //Iterate and 'connect' any detected gamepads foreach (int deviceId in InputDevice.GetDeviceIds()) { GetGamePad(InputDevice.GetDevice(deviceId)); } } private GamePadCapabilities CapabilitiesOfDevice(InputDevice device) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- isConnected = true; gamePadType = GamePadType.GamePad; hasLeftVibrationMotor = hasRightVibrationMotor = device.Vibrator.HasVibrator; // build out supported inputs from what the gamepad exposes int[] keyMap = new int[16]; keyMap[0] = (int)Keycode.ButtonA; keyMap[1] = (int)Keycode.ButtonB; keyMap[2] = (int)Keycode.ButtonX; keyMap[3] = (int)Keycode.ButtonY; keyMap[4] = (int)Keycode.ButtonThumbl; keyMap[5] = (int)Keycode.ButtonThumbr; keyMap[6] = (int)Keycode.ButtonL1; keyMap[7] = (int)Keycode.ButtonR1; keyMap[8] = (int)Keycode.ButtonL2; keyMap[9] = (int)Keycode.ButtonR2; keyMap[10] = (int)Keycode.DpadDown; keyMap[11] = (int)Keycode.DpadLeft; keyMap[12] = (int)Keycode.DpadRight; keyMap[13] = (int)Keycode.DpadUp; keyMap[14] = (int)Keycode.ButtonStart; keyMap[15] = (int)Keycode.Back; // get a bool[] with indices matching the keyMap bool[] hasMap = new bool[16]; // HasKeys() was defined in Kitkat / API19 / Android 4.4 if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Kitkat) { Keycode[] keyMap2 = new Keycode[keyMap.Length]; for (int i = 0; i < keyMap.Length; i++) keyMap2[i] = (Keycode)keyMap[i]; hasMap = KeyCharacterMap.DeviceHasKeys(keyMap2); } else { hasMap = device.HasKeys(keyMap); } buttons |= hasMap[0] ? Buttons.A : (Buttons)0; buttons |= hasMap[1] ? Buttons.B : (Buttons)0; buttons |= hasMap[2] ? Buttons.X : (Buttons)0; buttons |= hasMap[3] ? Buttons.Y : (Buttons)0; // we only check for the thumb button to see if we have 2 thumbsticks // if ever a controller doesn't support buttons on the thumbsticks, // this will need fixing buttons |= hasMap[4] ? Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight : (Buttons)0; buttons |= hasMap[4] ? Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp : (Buttons)0; buttons |= hasMap[5] ? Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight : (Buttons)0; buttons |= hasMap[5] ? Buttons.RightThumbstickDown | Buttons.RightThumbstickUp : (Buttons)0; buttons |= hasMap[6] ? Buttons.LeftShoulder : (Buttons)0; buttons |= hasMap[7] ? Buttons.RightShoulder : (Buttons)0; buttons |= hasMap[8] ? Buttons.LeftTrigger : (Buttons)0; buttons |= hasMap[9] ? Buttons.RightTrigger : (Buttons)0; buttons |= hasMap[10] ? Buttons.DPadDown : (Buttons)0; buttons |= hasMap[11] ? Buttons.DPadLeft : (Buttons)0; buttons |= hasMap[12] ? Buttons.DPadRight : (Buttons)0; buttons |= hasMap[13] ? Buttons.DPadUp : (Buttons)0; buttons |= hasMap[14] ? Buttons.Start : (Buttons)0; buttons |= hasMap[15] ? Buttons.Back : (Buttons)0; return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } } } ================================================ FILE: Platforms/Input/.Android/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Android.Views; namespace Microsoft.Xna.Platform.Input { internal class AndroidGamePadDevice : GamePadDevice { public InputDevice _device; public int _deviceId; public string _descriptor; public bool _isConnected; public bool DPadButtons; public Buttons _buttons; public float _leftTrigger, _rightTrigger; public Vector2 _leftStick, _rightStick; public AndroidGamePadDevice(InputDevice device, GamePadCapabilities caps) : base() { _device = device; _deviceId = device.Id; _descriptor = device.Descriptor; _isConnected = true; Capabilities = caps; } } } ================================================ FILE: Platforms/Input/.Android/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.Android/ConcreteJoystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { return -1; } } public override JoystickCapabilities PlatformGetCapabilities(int index) { return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { } } } ================================================ FILE: Platforms/Input/.Android/ConcreteKeyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework.Input; using DroidKeycode = Android.Views.Keycode; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private List _keys; private readonly IDictionary _keyMap; public ConcreteKeyboard() { _keys = new List(); _keyMap = LoadKeyMap(); } public override KeyboardState PlatformGetState() { return base.CreateKeyboardState(_keys); } internal bool KeyDown(DroidKeycode keyCode) { Keys key; if (_keyMap.TryGetValue(keyCode, out key) && key != Keys.None) { if (!_keys.Contains(key)) _keys.Add(key); return true; } return false; } internal bool KeyUp(DroidKeycode keyCode) { Keys key; if (_keyMap.TryGetValue(keyCode, out key) && key != Keys.None) { if (_keys.Contains(key)) _keys.Remove(key); return true; } return false; } private IDictionary LoadKeyMap() { // create a map for every Keycode and default it to none so that every possible key is mapped Dictionary maps = Enum.GetValues(typeof(DroidKeycode)) .Cast() .ToDictionary(key => key, key => Keys.None); // then update it with the actual mappings maps[DroidKeycode.DpadLeft] = Keys.Left; maps[DroidKeycode.DpadRight] = Keys.Right; maps[DroidKeycode.DpadUp] = Keys.Up; maps[DroidKeycode.DpadDown] = Keys.Down; maps[DroidKeycode.DpadCenter] = Keys.Enter; maps[DroidKeycode.Num0] = Keys.D0; maps[DroidKeycode.Num1] = Keys.D1; maps[DroidKeycode.Num2] = Keys.D2; maps[DroidKeycode.Num3] = Keys.D3; maps[DroidKeycode.Num4] = Keys.D4; maps[DroidKeycode.Num5] = Keys.D5; maps[DroidKeycode.Num6] = Keys.D6; maps[DroidKeycode.Num7] = Keys.D7; maps[DroidKeycode.Num8] = Keys.D8; maps[DroidKeycode.Num9] = Keys.D9; maps[DroidKeycode.A] = Keys.A; maps[DroidKeycode.B] = Keys.B; maps[DroidKeycode.C] = Keys.C; maps[DroidKeycode.D] = Keys.D; maps[DroidKeycode.E] = Keys.E; maps[DroidKeycode.F] = Keys.F; maps[DroidKeycode.G] = Keys.G; maps[DroidKeycode.H] = Keys.H; maps[DroidKeycode.I] = Keys.I; maps[DroidKeycode.J] = Keys.J; maps[DroidKeycode.K] = Keys.K; maps[DroidKeycode.L] = Keys.L; maps[DroidKeycode.M] = Keys.M; maps[DroidKeycode.N] = Keys.N; maps[DroidKeycode.O] = Keys.O; maps[DroidKeycode.P] = Keys.P; maps[DroidKeycode.Q] = Keys.Q; maps[DroidKeycode.R] = Keys.R; maps[DroidKeycode.S] = Keys.S; maps[DroidKeycode.T] = Keys.T; maps[DroidKeycode.U] = Keys.U; maps[DroidKeycode.V] = Keys.V; maps[DroidKeycode.W] = Keys.W; maps[DroidKeycode.X] = Keys.X; maps[DroidKeycode.Y] = Keys.Y; maps[DroidKeycode.Z] = Keys.Z; maps[DroidKeycode.Space] = Keys.Space; maps[DroidKeycode.Escape] = Keys.Escape; maps[DroidKeycode.Back] = Keys.Back; maps[DroidKeycode.Home] = Keys.Home; maps[DroidKeycode.Enter] = Keys.Enter; maps[DroidKeycode.Period] = Keys.OemPeriod; maps[DroidKeycode.Comma] = Keys.OemComma; maps[DroidKeycode.Menu] = Keys.Help; maps[DroidKeycode.Search] = Keys.BrowserSearch; maps[DroidKeycode.VolumeUp] = Keys.VolumeUp; maps[DroidKeycode.VolumeDown] = Keys.VolumeDown; maps[DroidKeycode.MediaPause] = Keys.Pause; maps[DroidKeycode.MediaPlayPause] = Keys.MediaPlayPause; maps[DroidKeycode.MediaStop] = Keys.MediaStop; maps[DroidKeycode.MediaNext] = Keys.MediaNextTrack; maps[DroidKeycode.MediaPrevious] = Keys.MediaPreviousTrack; maps[DroidKeycode.Mute] = Keys.VolumeMute; maps[DroidKeycode.AltLeft] = Keys.LeftAlt; maps[DroidKeycode.AltRight] = Keys.RightAlt; maps[DroidKeycode.ShiftLeft] = Keys.LeftShift; maps[DroidKeycode.ShiftRight] = Keys.RightShift; maps[DroidKeycode.Tab] = Keys.Tab; maps[DroidKeycode.Del] = Keys.Delete; maps[DroidKeycode.Minus] = Keys.OemMinus; maps[DroidKeycode.LeftBracket] = Keys.OemOpenBrackets; maps[DroidKeycode.RightBracket] = Keys.OemCloseBrackets; maps[DroidKeycode.Backslash] = Keys.OemBackslash; maps[DroidKeycode.Semicolon] = Keys.OemSemicolon; maps[DroidKeycode.PageUp] = Keys.PageUp; maps[DroidKeycode.PageDown] = Keys.PageDown; maps[DroidKeycode.CtrlLeft] = Keys.LeftControl; maps[DroidKeycode.CtrlRight] = Keys.RightControl; maps[DroidKeycode.CapsLock] = Keys.CapsLock; maps[DroidKeycode.ScrollLock] = Keys.Scroll; maps[DroidKeycode.NumLock] = Keys.NumLock; maps[DroidKeycode.Insert] = Keys.Insert; maps[DroidKeycode.F1] = Keys.F1; maps[DroidKeycode.F2] = Keys.F2; maps[DroidKeycode.F3] = Keys.F3; maps[DroidKeycode.F4] = Keys.F4; maps[DroidKeycode.F5] = Keys.F5; maps[DroidKeycode.F6] = Keys.F6; maps[DroidKeycode.F7] = Keys.F7; maps[DroidKeycode.F8] = Keys.F8; maps[DroidKeycode.F9] = Keys.F9; maps[DroidKeycode.F10] = Keys.F10; maps[DroidKeycode.F11] = Keys.F11; maps[DroidKeycode.F12] = Keys.F12; maps[DroidKeycode.NumpadDivide] = Keys.Divide; maps[DroidKeycode.NumpadMultiply] = Keys.Multiply; maps[DroidKeycode.NumpadSubtract] = Keys.Subtract; maps[DroidKeycode.NumpadAdd] = Keys.Add; return maps; } } } ================================================ FILE: Platforms/Input/.Android/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Android.App; using Android.Content; using Android.Widget; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { private TaskCompletionSource tcs; private AlertDialog alert; public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { tcs = new TaskCompletionSource(); AndroidGameWindow.Activity.RunOnUiThread(() => { alert = new AlertDialog.Builder(AndroidGameWindow.Activity).Create(); alert.SetTitle(title); alert.SetMessage(description); EditText input = new EditText(AndroidGameWindow.Activity) { Text = defaultText }; if (defaultText != null) input.SetSelection(defaultText.Length); if (usePasswordMode) input.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationPassword; alert.SetView(input); alert.SetButton((int)DialogButtonType.Positive, "Ok", (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(input.Text); }); alert.SetButton((int)DialogButtonType.Negative, "Cancel", (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(null); }); alert.CancelEvent += (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(null); }; alert.Show(); }); return tcs.Task; } public override void PlatformCancel(string result) { alert.Dismiss(); tcs.SetResult(result); } } } ================================================ FILE: Platforms/Input/.Android/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Xna.Framework; using Android.App; using Android.Content; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { private TaskCompletionSource tcs; private AlertDialog alert; public override Task PlatformShow(string title, string description, List buttons) { tcs = new TaskCompletionSource(); AndroidGameWindow.Activity.RunOnUiThread(() => { alert = new AlertDialog.Builder(AndroidGameWindow.Activity).Create(); alert.SetTitle(title); alert.SetMessage(description); alert.SetButton((int)DialogButtonType.Positive, buttons[0], (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(0); }); if (buttons.Count > 1) { alert.SetButton((int)DialogButtonType.Negative, buttons[1], (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(1); }); } if (buttons.Count > 2) { alert.SetButton((int)DialogButtonType.Neutral, buttons[2], (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(2); }); } alert.CancelEvent += (sender, args) => { if (!tcs.Task.IsCompleted) tcs.SetResult(null); }; alert.Show(); }); return tcs.Task; } public override void PlatformCancel(int? result) { alert.Dismiss(); tcs.SetResult(result); } } } ================================================ FILE: Platforms/Input/.Android/ConcreteMouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Android.Views; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; private Point _pos; private int _scrollX, _scrollY; private int _rawX, _rawY; private ButtonState _leftButton, _rightButton, _middleButton; private ButtonState _xButton1, _xButton2; public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { _wndHandle = windowHandle; } public override bool PlatformIsRawInputAvailable() { return false; } public override MouseState PlatformGetState() { MouseState mouseState = new MouseState( x: _pos.X, y: _pos.Y, scrollWheel: _scrollY, horizontalScrollWheel: _scrollX, rawX: _rawX, rawY: _rawY, leftButton: _leftButton, middleButton: _middleButton, rightButton: _rightButton, xButton1: _xButton1, xButton2: _xButton2 ); return mouseState; } internal bool OnGenericMotionEvent(MotionEvent e) { switch (e.ActionMasked) { case MotionEventActions.HoverMove: { _pos.X = (int)e.GetX(); _pos.Y = (int)e.GetY(); } return true; case MotionEventActions.Scroll: { _pos.X = (int)e.GetX(); _pos.Y = (int)e.GetY(); float vScroll = e.GetAxisValue(Axis.Vscroll); float hScroll = e.GetAxisValue(Axis.Hscroll); _scrollY += (int)vScroll; _scrollX += (int)hScroll; } return true; } return false; } internal bool OnTouchEvent(MotionEvent e) { switch (e.ActionMasked) { case MotionEventActions.Down: case MotionEventActions.Move: case MotionEventActions.Up: { MotionEventButtonState buttonState = e.ButtonState; #if !XAMARIN _leftButton = e.IsButtonPressed(MotionEventButtonState.Primary) ? ButtonState.Pressed : ButtonState.Released; _rightButton = e.IsButtonPressed(MotionEventButtonState.Secondary) ? ButtonState.Pressed : ButtonState.Released; _middleButton = e.IsButtonPressed(MotionEventButtonState.Tertiary) ? ButtonState.Pressed : ButtonState.Released; #endif } return true; } return false; } public override void PlatformSetPosition(int x, int y) { throw new PlatformNotSupportedException(); } public override void PlatformSetCursor(MouseCursor cursor) { #if !XAMARIN if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N) { if (_wndHandle != IntPtr.Zero) { AndroidGameWindow droidWindow = AndroidGameWindow.FromHandle(_wndHandle); View view = droidWindow.GameView; PointerIcon pointerIcon = null; if (cursor != null) { pointerIcon = ((IPlatformMouseCursor)cursor).GetStrategy().PointerIcon; } if (view.PointerIcon != pointerIcon) view.PointerIcon = pointerIcon; } return; } #endif if (cursor != null) throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Android/ConcreteMouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; using Android.Content; using Android.Views; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { #if !XAMARIN PointerIconType _androidCursor; PointerIcon _pointerIcon; internal PointerIcon PointerIcon { get { if (_pointerIcon == null) { if (_cursorType != MouseCursorType.User) { if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N) { Context appContext = Android.App.Application.Context; _pointerIcon = PointerIcon.GetSystemIcon(appContext, _androidCursor); } } else { throw new NotImplementedException(); } } return _pointerIcon; } } #endif public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; this._handle = IntPtr.Zero; #if !XAMARIN _androidCursor = CursorTypeToAndroidCursor(cursorType); #endif } #if !XAMARIN private PointerIconType CursorTypeToAndroidCursor(MouseCursorStrategy.MouseCursorType cursorType) { if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N) { switch (cursorType) { case MouseCursorStrategy.MouseCursorType.Arrow: return PointerIconType.Arrow; case MouseCursorStrategy.MouseCursorType.IBeam: return PointerIconType.Text; case MouseCursorStrategy.MouseCursorType.Wait: return PointerIconType.Wait; case MouseCursorStrategy.MouseCursorType.Crosshair: return PointerIconType.Crosshair; case MouseCursorStrategy.MouseCursorType.WaitArrow: return PointerIconType.Arrow; case MouseCursorStrategy.MouseCursorType.SizeNWSE: return PointerIconType.TopRightDiagonalDoubleArrow; case MouseCursorStrategy.MouseCursorType.SizeNESW: return PointerIconType.TopLeftDiagonalDoubleArrow; case MouseCursorStrategy.MouseCursorType.SizeWE: return PointerIconType.HorizontalDoubleArrow; case MouseCursorStrategy.MouseCursorType.SizeNS: return PointerIconType.VerticalDoubleArrow; case MouseCursorStrategy.MouseCursorType.SizeAll: return PointerIconType.AllScroll; case MouseCursorStrategy.MouseCursorType.No: return PointerIconType.NoDrop; case MouseCursorStrategy.MouseCursorType.Hand: return PointerIconType.Hand; default: throw new InvalidOperationException("cursorType"); } } else { return (PointerIconType)0; } } #endif public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool dispose) { if (dispose) { } base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.Android/Touch/ConcreteTouchPanel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using Android.Content.PM; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = 0; bool isConnected = false; bool hasPressure = false; // http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_TOUCHSCREEN PackageManager pm = AndroidGameWindow.Activity.PackageManager; isConnected = pm.HasSystemFeature(PackageManager.FeatureTouchscreen); if (pm.HasSystemFeature(PackageManager.FeatureTouchscreenMultitouchJazzhand)) maximumTouchCount = 5; else if (pm.HasSystemFeature(PackageManager.FeatureTouchscreenMultitouchDistinct)) maximumTouchCount = 2; else maximumTouchCount = 1; _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = AndroidGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteGamePad.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using nkast.Wasm.Dom; using nkast.Wasm.Input; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { const int MaxNumberOfGamePads = 4; private readonly BlazorGamePadDevice[] _gamepads = new BlazorGamePadDevice[MaxNumberOfGamePads]; // map native indices -> gamepad indices (PlayerIndex) private readonly Dictionary _indicesMap = new Dictionary(); // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { return 0.24f; } } public override float RightThumbDeadZone { get { return 0.265f; } } public ConcreteGamePad() { try { Gamepad[] gamepads = Window.Current.Navigator.GetGamepads(); for (int deviceIndex = 0; deviceIndex < _gamepads.Length && deviceIndex < gamepads.Length; deviceIndex++) { if (_gamepads[deviceIndex] != null) { Gamepad gamepad = gamepads[deviceIndex]; AddDevice(deviceIndex, gamepad); } } Window.Current.OnGamepadConnected += Window_OnGamepadConnected; Window.Current.OnGamepadDisconnected += Window_OnGamepadDisconnected; } catch { } } internal void Window_OnGamepadConnected(object sender, int deviceIndex) { Gamepad[] gamepads = Window.Current.Navigator.GetGamepads(); Gamepad gamepad = gamepads[deviceIndex]; AddDevice(deviceIndex, gamepad); } internal void Window_OnGamepadDisconnected(object sender, int deviceIndex) { RemoveDevice(deviceIndex); } private void AddDevice(int deviceIndex, Gamepad gamepad) { if (gamepad.Mapping == "standard") { if (_indicesMap.ContainsKey(deviceIndex)) return; int index = 0; while (index < MaxNumberOfGamePads && _gamepads[index] != null) index++; if (index >= MaxNumberOfGamePads) return; _gamepads[index] = new BlazorGamePadDevice(deviceIndex); _gamepads[index].Capabilities = CreateCapabilities(gamepad); _indicesMap[deviceIndex] = index; } } private void RemoveDevice(int deviceIndex) { int index = -1; if (_indicesMap.TryGetValue(deviceIndex, out index)) { BlazorGamePadDevice gamepad = _gamepads[index]; _gamepads[index] = null; _indicesMap.Remove(deviceIndex); } } public override int PlatformGetMaxNumberOfGamePads() { return MaxNumberOfGamePads; } public override GamePadCapabilities PlatformGetCapabilities(int index) { BlazorGamePadDevice gamepadDevice = _gamepads[index]; if (gamepadDevice == null) return GetDefaultCapabilities(); return gamepadDevice.Capabilities; } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { BlazorGamePadDevice gamepadDevice = _gamepads[index]; GamePadState state = new GamePadState(); if (gamepadDevice != null) { Gamepad[] gamepads = Window.Current.Navigator.GetGamepads(); Gamepad gamepad = gamepads[gamepadDevice.DeviceIndex]; if (gamepad != null) { state = CreateGamePadState(gamepad, leftDeadZoneMode, rightDeadZoneMode); return state; } } state = base.CreateGamePadState(new GamePadThumbSticks(), new GamePadTriggers(), new GamePadButtons(), new GamePadDPad(), isConnected: false); return state; } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { BlazorGamePadDevice gamepadDevice = _gamepads[index]; if (gamepadDevice != null) { Gamepad[] gamepads = Window.Current.Navigator.GetGamepads(); Gamepad gamepad = gamepads[gamepadDevice.DeviceIndex]; if (gamepad != null) { GamepadHapticActuator va = gamepad.VibrationActuator; if (va != null) { float maxMotor = Math.Max(leftMotor, rightMotor); bool pulseResult = va.Pulse(maxMotor, 500); if (pulseResult) return true; GamepadHapticActuatorParams actuatorParams = new GamepadHapticActuatorParams(); actuatorParams.Duration = 500; actuatorParams.StrongMagnitude = maxMotor; bool playEffectResult = va.PlayEffect("dual-rumble", actuatorParams); return playEffectResult; } } } return false; } private GamePadState CreateGamePadState(Gamepad gamepad, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { GamePadState state; GamepadButton[] gpbuttons = gamepad.Buttons; float[] axes = gamepad.Axes; Vector2 leftStick = new Vector2(axes[0], -axes[1]); Vector2 rightStick = new Vector2(axes[2], -axes[3]); GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks(leftStick, rightStick, leftDeadZoneMode, rightDeadZoneMode); GamePadTriggers triggers = new GamePadTriggers( gpbuttons[6].Value, // LeftTrigger gpbuttons[7].Value // RightTrigger ); Buttons buttons = (Buttons)0; if (gpbuttons[0].Pressed) buttons |= Buttons.A; if (gpbuttons[1].Pressed) buttons |= Buttons.B; if (gpbuttons[2].Pressed) buttons |= Buttons.X; if (gpbuttons[3].Pressed) buttons |= Buttons.Y; if (gpbuttons[4].Pressed) buttons |= Buttons.LeftShoulder; if (gpbuttons[5].Pressed) buttons |= Buttons.RightShoulder; if (gpbuttons[6].Pressed) buttons |= Buttons.LeftTrigger; if (gpbuttons[7].Pressed) buttons |= Buttons.RightTrigger; if (gpbuttons[8].Pressed) buttons |= Buttons.Back; if (gpbuttons[9].Pressed) buttons |= Buttons.Start; if (gpbuttons[10].Pressed) buttons |= Buttons.LeftStick; if (gpbuttons[11].Pressed) buttons |= Buttons.RightStick; if (gpbuttons[16].Pressed) buttons |= Buttons.BigButton; GamePadDPad dPad = new GamePadDPad( (gpbuttons[12].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DPadUp (gpbuttons[13].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DpadDown (gpbuttons[14].Pressed) ? ButtonState.Pressed : ButtonState.Released, // DpadLeft (gpbuttons[15].Pressed) ? ButtonState.Pressed : ButtonState.Released // DpadRight ); int packetNumber = gamepad.Timestamp; state = base.CreateGamePadState(thumbSticks, triggers, new GamePadButtons(buttons), dPad, packetNumber: packetNumber); return state; } private GamePadCapabilities CreateCapabilities(Gamepad gamepad) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected = false; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- { displayName = gamepad.Id; isConnected = true; if (gamepad.Mapping == "standard") gamePadType = GamePadType.GamePad; buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; buttons |= Buttons.LeftTrigger; buttons |= Buttons.RightTrigger; buttons |= Buttons.Back; buttons |= Buttons.Start; buttons |= Buttons.LeftStick; buttons |= Buttons.RightStick; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.BigButton; } return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } private GamePadCapabilities GetDefaultCapabilities() { return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using nkast.Wasm.Input; namespace Microsoft.Xna.Platform.Input { internal class BlazorGamePadDevice : GamePadDevice { public int DeviceIndex { get; private set; } public BlazorGamePadDevice(int deviceIndex) : base() { DeviceIndex = deviceIndex; } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteJoystick.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { return -1; } } public override JoystickCapabilities PlatformGetCapabilities(int index) { return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteKeyboard.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private List _keys; public override KeyboardState PlatformGetState() { return base.CreateKeyboardState(_keys); } internal void SetKeys(List keys) { _keys = keys; } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { throw new NotImplementedException("KeyboardInput is not implemented on this platform."); } public override void PlatformCancel(string result) { throw new NotImplementedException("KeyboardInput is not implemented on this platform."); } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { public override Task PlatformShow(string title, string description, List buttons) { throw new NotImplementedException("MessageBox is not implemented on this platform."); } public override void PlatformCancel(int? result) { throw new NotImplementedException("MessageBox is not implemented on this platform."); } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteMouse.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; private nkast.Wasm.Dom.Window _domWindow; private Point _pos; private int _scrollX, _scrollY; private int _rawX, _rawY; private ButtonState _leftButton, _rightButton, _middleButton; public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { _wndHandle = windowHandle; // Unregister old window if (_domWindow != null) { _pos = default(Point); _scrollX = 0; _scrollY = 0; _leftButton = default(ButtonState); _rightButton = default(ButtonState); _middleButton = default(ButtonState); _domWindow.OnMouseMove -= OnMouseMove; _domWindow.OnMouseDown -= OnMouseDown; _domWindow.OnMouseUp -= OnMouseUp; _domWindow.OnMouseWheel -= OnMouseWheel; } BlazorGameWindow gameWindow = BlazorGameWindow.FromHandle(windowHandle); _domWindow = gameWindow.wasmWindow; _domWindow.OnMouseMove += OnMouseMove; _domWindow.OnMouseDown += OnMouseDown; _domWindow.OnMouseUp += OnMouseUp; _domWindow.OnMouseWheel += OnMouseWheel; } public override bool PlatformIsRawInputAvailable() { return false; } public override MouseState PlatformGetState() { MouseState mouseState = new MouseState( x: _pos.X, y: _pos.Y, scrollWheel: _scrollY, horizontalScrollWheel: _scrollX, rawX: _rawX, rawY: _rawY, leftButton: _leftButton, middleButton: _middleButton, rightButton: _rightButton, xButton1: ButtonState.Released, xButton2: ButtonState.Released ); return mouseState; } public override void PlatformSetPosition(int x, int y) { throw new NotImplementedException(); } public override void PlatformSetCursor(MouseCursor cursor) { BlazorGameWindow gameWindow = BlazorGameWindow.FromHandle(_wndHandle); gameWindow._canvas.Style["cursor"] = ((IPlatformMouseCursor)cursor).GetStrategy().CursorCSSPropertyValue; } private void OnMouseMove(object sender, int x, int y) { _pos.X = x; _pos.Y = y; } private void OnMouseDown(object sender, int x, int y, int buttons) { _pos.X = x; _pos.Y = y; _leftButton = ((buttons & 1) != 0) ? ButtonState.Pressed : ButtonState.Released; _rightButton = ((buttons & 2) != 0) ? ButtonState.Pressed : ButtonState.Released; _middleButton = ((buttons & 4) != 0) ? ButtonState.Pressed : ButtonState.Released; } private void OnMouseUp(object sender, int x, int y, int buttons) { _pos.X = x; _pos.Y = y; _leftButton = ((buttons & 1) != 0) ? ButtonState.Pressed : ButtonState.Released; _rightButton = ((buttons & 2) != 0) ? ButtonState.Pressed : ButtonState.Released; _middleButton = ((buttons & 4) != 0) ? ButtonState.Pressed : ButtonState.Released; } public void OnMouseWheel(object sender, int deltaX, int deltaY, int deltaZ, int deltaMode) { _scrollX -= deltaX; _scrollY -= deltaY; } } } ================================================ FILE: Platforms/Input/.Blazor/ConcreteMouseCursor.cs ================================================ // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { string _cursorCSSPropertyValue; internal string CursorCSSPropertyValue { get { return _cursorCSSPropertyValue; } } public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; this._handle = IntPtr.Zero; _cursorCSSPropertyValue = CursorTypeToCSSPropertyValue(cursorType); } private string CursorTypeToCSSPropertyValue(MouseCursorStrategy.MouseCursorType cursorType) { switch (cursorType) { case MouseCursorStrategy.MouseCursorType.Arrow: return "default"; case MouseCursorStrategy.MouseCursorType.IBeam: return "text"; case MouseCursorStrategy.MouseCursorType.Wait: return "wait"; case MouseCursorStrategy.MouseCursorType.Crosshair: return "crosshair"; case MouseCursorStrategy.MouseCursorType.WaitArrow: return "progress"; case MouseCursorStrategy.MouseCursorType.SizeNWSE: return "nwse-resize"; case MouseCursorStrategy.MouseCursorType.SizeNESW: return "nesw-resize"; case MouseCursorStrategy.MouseCursorType.SizeWE: return "ew-resize"; case MouseCursorStrategy.MouseCursorType.SizeNS: return "ns-resize"; case MouseCursorStrategy.MouseCursorType.SizeAll: return "move"; case MouseCursorStrategy.MouseCursorType.No: return "not-allowed"; case MouseCursorStrategy.MouseCursorType.Hand: return "pointer"; default: throw new InvalidOperationException("cursorType"); } } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool dispose) { if (dispose) { } base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.Blazor/Touch/ConcreteTouchPanel.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using nkast.Wasm.Dom; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = Window.Current.Navigator.MaxTouchPoints; bool isConnected = maximumTouchCount > 0; bool hasPressure = false; _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = BlazorGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } } } ================================================ FILE: Platforms/Input/.Blazor/XR/ConcreteTouchController.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; using nkast.Wasm; namespace Microsoft.Xna.Platform.Input.XR { public sealed class ConcreteTouchController : ITouchControllerInput { private ConcreteXRDevice _xrDevice; unsafe void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport ) { var device = _xrDevice; if (device != null) device.GetCapabilities(controllerType, ref gamePadType, ref displayName, ref identifier, ref isConnected, ref buttons, ref hasLeftVibrationMotor, ref hasRightVibrationMotor, ref hasVoiceSupport); } internal ConcreteTouchController(ConcreteXRDevice xrDevice) { this._xrDevice = xrDevice; } GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType) { var device = _xrDevice; if (device != null) return device.GetGamePadState(controllerType); return new GamePadState(); } bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude) { var device = _xrDevice; if (device != null) return device.SetVibration(controllerType, amplitude); return false; } } } ================================================ FILE: Platforms/Input/.LibOVR/XR/ConcreteTouchControllerStrategy.cs ================================================ // Copyright (C)2022-24 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; using Microsoft.Xna.Platform.XR; using Microsoft.Xna.Platform.XR.LibOVR; using nkast.LibOVR; namespace Microsoft.Xna.Platform.Input.XR.LibOVR { public sealed class ConcreteTouchControllerStrategy : ITouchControllerInput { private ConcreteXRDevice _xrDevice; void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport ) { var session = _xrDevice.Session; if (session == null) { gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = (Buttons)0; hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } OvrControllerType ovrControllerType = (OvrControllerType)controllerType; OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes(); isConnected = ((int)connectedControllerTypes & (int)ovrControllerType) != 0; connectedControllerTypes =(OvrControllerType)((int)connectedControllerTypes & (int)ovrControllerType); if (((int)connectedControllerTypes & (int)OvrControllerType.LTouch) == (int)OvrControllerType.LTouch) { buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight; buttons |= Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp; buttons |= Buttons.LeftTrigger & Buttons.LeftGrip; //buttons |= Buttons.LeftStick; //buttons |= Buttons.Start; } if (((int)connectedControllerTypes & (int)OvrControllerType.RTouch) == (int)OvrControllerType.RTouch) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight; buttons |= Buttons.RightThumbstickDown & Buttons.RightThumbstickUp; buttons |= Buttons.RightTrigger & Buttons.RightGrip; //buttons |= Buttons.RightStick; //buttons |= Buttons.Back; } } Buttons _virtualButtons; internal ConcreteTouchControllerStrategy(ConcreteXRDevice xrDevice) { this._xrDevice = xrDevice; } GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType) { var session = _xrDevice.Session; if (session == null) return new GamePadState(); OvrControllerType ovrControllerType = (OvrControllerType)controllerType; OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes(); var isConnected = ((int)connectedControllerTypes & (int)ovrControllerType) != 0; if (!isConnected) return new GamePadState(); OvrInputState ovrInputState; var ovrResult = session.GetInputState(ovrControllerType, out ovrInputState); GamePadThumbSticks thumbSticks = default(GamePadThumbSticks); GamePadTriggers triggers = default(GamePadTriggers); GamePadTriggers grips = default(GamePadTriggers); Buttons buttons = default(Buttons); Buttons touches = default(Buttons); thumbSticks = new GamePadThumbSticks( leftPosition: new Vector2(ovrInputState.Thumbstick[0].X, ovrInputState.Thumbstick[0].Y), rightPosition: new Vector2(ovrInputState.Thumbstick[1].X, ovrInputState.Thumbstick[1].Y)); triggers = new GamePadTriggers( leftTrigger: ovrInputState.IndexTrigger[0], rightTrigger: ovrInputState.IndexTrigger[1]); grips = new GamePadTriggers( leftTrigger: ovrInputState.HandTrigger[0], rightTrigger: ovrInputState.HandTrigger[1]); // left buttons if (((int)ovrInputState.Buttons & (int)OvrButton.X) != 0) buttons |= Buttons.X; if (((int)ovrInputState.Buttons & (int)OvrButton.Y) != 0) buttons |= Buttons.Y; if (((int)ovrInputState.Buttons & (int)OvrButton.LThumb) != 0) buttons |= Buttons.LeftStick; if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu buttons |= Buttons.Start; // right buttons if (((int)ovrInputState.Buttons & (int)OvrButton.A) != 0) buttons |= Buttons.A; if (((int)ovrInputState.Buttons & (int)OvrButton.B) != 0) buttons |= Buttons.B; if (((int)ovrInputState.Buttons & (int)OvrButton.RThumb) != 0) buttons |= Buttons.RightStick; if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button buttons |= Buttons.Back; float TriggerThresholdOn = 0.6f; float TriggerThresholdOff = 0.7f; float ThumbstickThresholdOn = 0.5f; float ThumbstickThresholdOff = 0.4f; // virtual trigger buttons if (ovrInputState.IndexTrigger[0] > TriggerThresholdOn && (_virtualButtons & Buttons.LeftTrigger) == 0) _virtualButtons |= Buttons.LeftTrigger; else if (ovrInputState.IndexTrigger[0] < TriggerThresholdOff && (_virtualButtons & Buttons.LeftTrigger) != 0) _virtualButtons &= ~Buttons.LeftTrigger; if (ovrInputState.IndexTrigger[1] > TriggerThresholdOn && (_virtualButtons & Buttons.RightTrigger) == 0) _virtualButtons |= Buttons.RightTrigger; else if (ovrInputState.IndexTrigger[1] < TriggerThresholdOff && (_virtualButtons & Buttons.RightTrigger) != 0) _virtualButtons &= ~Buttons.RightTrigger; // virtual grip buttons if (ovrInputState.HandTriggerRaw[0] > TriggerThresholdOn && (_virtualButtons & Buttons.LeftGrip) == 0) _virtualButtons |= Buttons.LeftGrip; else if (ovrInputState.HandTriggerRaw[0] < TriggerThresholdOff && (_virtualButtons & Buttons.LeftGrip) != 0) _virtualButtons &= ~Buttons.LeftGrip; if (ovrInputState.HandTriggerRaw[1] > TriggerThresholdOn && (_virtualButtons & Buttons.RightGrip) == 0) _virtualButtons |= Buttons.RightGrip; else if (ovrInputState.HandTriggerRaw[1] < TriggerThresholdOff && (_virtualButtons & Buttons.RightGrip) != 0) _virtualButtons &= ~Buttons.RightGrip; // virtual thumbstick buttons if (ovrInputState.Thumbstick[0].X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickLeft) == 0) _virtualButtons |= Buttons.LeftThumbstickLeft; else if (ovrInputState.Thumbstick[0].X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickLeft) != 0) _virtualButtons &= ~Buttons.LeftThumbstickLeft; if (ovrInputState.Thumbstick[1].X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickLeft) == 0) _virtualButtons |= Buttons.RightThumbstickLeft; else if (ovrInputState.Thumbstick[1].X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickLeft) != 0) _virtualButtons &= ~Buttons.RightThumbstickLeft; if (ovrInputState.Thumbstick[0].X > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickRight) == 0) _virtualButtons |= Buttons.LeftThumbstickRight; else if (ovrInputState.Thumbstick[0].X < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickRight) != 0) _virtualButtons &= ~Buttons.LeftThumbstickRight; if (ovrInputState.Thumbstick[1].X > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickRight) == 0) _virtualButtons |= Buttons.RightThumbstickRight; else if (ovrInputState.Thumbstick[1].X < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickRight) != 0) _virtualButtons &= ~Buttons.RightThumbstickRight; if (ovrInputState.Thumbstick[0].Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickDown) == 0) _virtualButtons |= Buttons.LeftThumbstickDown; else if (ovrInputState.Thumbstick[0].Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickDown) != 0) _virtualButtons &= ~Buttons.LeftThumbstickDown; if (ovrInputState.Thumbstick[1].Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickDown) == 0) _virtualButtons |= Buttons.RightThumbstickDown; else if (ovrInputState.Thumbstick[1].Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickDown) != 0) _virtualButtons &= ~Buttons.RightThumbstickDown; if (ovrInputState.Thumbstick[0].Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickUp) == 0) _virtualButtons |= Buttons.LeftThumbstickUp; else if (ovrInputState.Thumbstick[0].Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickUp) != 0) _virtualButtons &= ~Buttons.LeftThumbstickUp; if (ovrInputState.Thumbstick[1].Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickUp) == 0) _virtualButtons |= Buttons.RightThumbstickUp; else if (ovrInputState.Thumbstick[1].Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickUp) != 0) _virtualButtons &= ~Buttons.RightThumbstickUp; buttons |= _virtualButtons; // left touches if (((int)ovrInputState.Touches & (int)OvrTouch.A) != 0) touches |= Buttons.A; if (((int)ovrInputState.Touches & (int)OvrTouch.B) != 0) touches |= Buttons.B; if (((int)ovrInputState.Touches & (int)OvrTouch.LThumb) != 0) touches |= Buttons.LeftStick; if (((int)ovrInputState.Touches & (int)OvrTouch.LIndexTrigger) != 0) touches |= Buttons.LeftTrigger; // right touches if (((int)ovrInputState.Touches & (int)OvrTouch.X) != 0) touches |= Buttons.X; if (((int)ovrInputState.Touches & (int)OvrTouch.Y) != 0) touches |= Buttons.Y; if (((int)ovrInputState.Touches & (int)OvrTouch.RThumb) != 0) touches |= Buttons.RightStick; if (((int)ovrInputState.Touches & (int)OvrTouch.RIndexTrigger) != 0) touches |= Buttons.RightTrigger; GamePadState state = new GamePadState( thumbSticks: thumbSticks, triggers: triggers, grips: grips, touchButtons: new GamePadTouchButtons(buttons, touches), dPad: default(GamePadDPad) ); return state; } bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude) { var session = _xrDevice.Session; if (session == null) return false; int result = session.SetControllerVibration((OvrControllerType)controllerType, 0.5f, amplitude); if (result < 0) return false; return true; } } } ================================================ FILE: Platforms/Input/.OpenXR/XR/ConcreteTouchControllerStrategy.cs ================================================ // Copyright (C)2022-24 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; using Microsoft.Xna.Platform.XR; using nkast.LibOXR; using Silk.NET.OpenXR; using XrAction = Silk.NET.OpenXR.Action; namespace Microsoft.Xna.Platform.Input.XR { public sealed class ConcreteTouchControllerStrategy : ITouchControllerInput { private ConcreteXRDevice _xrDevice; unsafe void ITouchControllerInput.GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport ) { var session = _xrDevice.Session; if (session == null) { gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = (Buttons)0; hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } //OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes(); TouchControllerType connectedControllerTypes = default; Result xrResult; ActionPath leftHandPath, rightHandPath; _xrDevice.Instance.StringToPath("/user/hand/left", out leftHandPath); _xrDevice.Instance.StringToPath("/user/hand/right", out rightHandPath); ActionPath oculusTouchProfilePath; _xrDevice.Instance.StringToPath("/interaction_profiles/oculus/touch_controller", out oculusTouchProfilePath); session.GetCurrentInteractionProfile(leftHandPath, out InteractionProfileState leftProfileState); session.GetCurrentInteractionProfile(rightHandPath, out InteractionProfileState rightProfileState); if (leftProfileState.InteractionProfile == oculusTouchProfilePath.Handle) connectedControllerTypes |= TouchControllerType.LTouch; if (rightProfileState.InteractionProfile == oculusTouchProfilePath.Handle) connectedControllerTypes |= TouchControllerType.RTouch; isConnected = ((int)connectedControllerTypes & (int)controllerType) != 0; connectedControllerTypes = (TouchControllerType)((int)connectedControllerTypes & (int)controllerType); if (((int)connectedControllerTypes & (int)TouchControllerType.LTouch) == (int)TouchControllerType.LTouch) { buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight; buttons |= Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp; buttons |= Buttons.LeftTrigger & Buttons.LeftGrip; //buttons |= Buttons.LeftStick; //buttons |= Buttons.Start; } if (((int)connectedControllerTypes & (int)TouchControllerType.RTouch) == (int)TouchControllerType.RTouch) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight; buttons |= Buttons.RightThumbstickDown & Buttons.RightThumbstickUp; buttons |= Buttons.RightTrigger & Buttons.RightGrip; //buttons |= Buttons.RightStick; //buttons |= Buttons.Back; } } Buttons _virtualButtons; internal ConcreteTouchControllerStrategy(ConcreteXRDevice xrDevice) { this._xrDevice = xrDevice; } GamePadState ITouchControllerInput.GetState(TouchControllerType controllerType) { var session = _xrDevice.Session; if (session == null) return new GamePadState(); //OvrControllerType connectedControllerTypes = session.GetConnectedControllerTypes(); TouchControllerType connectedControllerTypes = default; Result xrResult; ActionPath leftHandPath, rightHandPath; _xrDevice.Instance.StringToPath("/user/hand/left", out leftHandPath); _xrDevice.Instance.StringToPath("/user/hand/right", out rightHandPath); ActionPath oculusTouchProfilePath; _xrDevice.Instance.StringToPath("/interaction_profiles/oculus/touch_controller", out oculusTouchProfilePath); session.GetCurrentInteractionProfile(leftHandPath, out InteractionProfileState leftProfileState); session.GetCurrentInteractionProfile(rightHandPath, out InteractionProfileState rightProfileState); if (leftProfileState.InteractionProfile == oculusTouchProfilePath.Handle) connectedControllerTypes |= TouchControllerType.LTouch; if (rightProfileState.InteractionProfile == oculusTouchProfilePath.Handle) connectedControllerTypes |= TouchControllerType.RTouch; var isConnected = ((int)connectedControllerTypes & (int)controllerType) != 0; if (!isConnected) return new GamePadState(); //OvrInputState ovrInputState; //var ovrResult = session.GetInputState(ovrControllerType, out ovrInputState); GamePadThumbSticks thumbSticks = default(GamePadThumbSticks); GamePadTriggers triggers = default(GamePadTriggers); GamePadTriggers grips = default(GamePadTriggers); Buttons buttons = default(Buttons); Buttons touches = default(Buttons); ActionStateVector2f ThumbStickL = session.GetActionStateVector2(_xrDevice._moveOnJoystickActionL); ActionStateVector2f ThumbStickR = session.GetActionStateVector2(_xrDevice._moveOnJoystickActionR); thumbSticks = new GamePadThumbSticks( leftPosition: new Vector2(ThumbStickL.CurrentState.X, ThumbStickL.CurrentState.Y), rightPosition: new Vector2(ThumbStickR.CurrentState.X, ThumbStickR.CurrentState.Y)); ActionStateFloat moveYStateL = session.GetActionStateFloat(_xrDevice._moveOnYActionL); ActionStateFloat moveYStateR = session.GetActionStateFloat(_xrDevice._moveOnYActionR); triggers = new GamePadTriggers( leftTrigger: moveYStateL.CurrentState, rightTrigger: moveYStateR.CurrentState); ActionStateFloat moveXStateL = session.GetActionStateFloat(_xrDevice._moveOnXActionL); ActionStateFloat moveXStateR = session.GetActionStateFloat(_xrDevice._moveOnXActionR); grips = new GamePadTriggers( leftTrigger: moveXStateL.CurrentState, rightTrigger: moveXStateR.CurrentState); //// left buttons ActionStateBoolean _stateButtonX = session.GetActionStateBoolean(_xrDevice._actionButtonX); ActionStateBoolean _stateButtonY = session.GetActionStateBoolean(_xrDevice._actionButtonY); ActionStateBoolean _stateButtonLTS = session.GetActionStateBoolean(_xrDevice._actionButtonLeftThumbstick); if (_stateButtonX.CurrentState != 0) buttons |= Buttons.X; if (_stateButtonY.CurrentState != 0) buttons |= Buttons.Y; if (_stateButtonLTS.CurrentState != 0) buttons |= Buttons.LeftStick; //if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu // buttons |= Buttons.Start; //// right buttons ActionStateBoolean _stateButtonA = session.GetActionStateBoolean(_xrDevice._actionButtonA); ActionStateBoolean _stateButtonB = session.GetActionStateBoolean(_xrDevice._actionButtonB); ActionStateBoolean _stateButtonRTS = session.GetActionStateBoolean(_xrDevice._actionButtonRightThumbstick); if (_stateButtonA.CurrentState!=0) buttons |= Buttons.A; if (_stateButtonB.CurrentState != 0) buttons |= Buttons.B; if (_stateButtonRTS.CurrentState != 0) buttons |= Buttons.RightStick; //if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button // buttons |= Buttons.Back; float TriggerThresholdOn = 0.6f; float TriggerThresholdOff = 0.7f; float ThumbstickThresholdOn = 0.5f; float ThumbstickThresholdOff = 0.4f; //// virtual trigger buttons if (triggers.Left > TriggerThresholdOn && (_virtualButtons & Buttons.LeftTrigger) == 0) _virtualButtons |= Buttons.LeftTrigger; else if (triggers.Left < TriggerThresholdOff && (_virtualButtons & Buttons.LeftTrigger) != 0) _virtualButtons &= ~Buttons.LeftTrigger; if (triggers.Right > TriggerThresholdOn && (_virtualButtons & Buttons.RightTrigger) == 0) _virtualButtons |= Buttons.RightTrigger; else if (triggers.Right < TriggerThresholdOff && (_virtualButtons & Buttons.RightTrigger) != 0) _virtualButtons &= ~Buttons.RightTrigger; //// virtual grip buttons if (grips.Left > TriggerThresholdOn && (_virtualButtons & Buttons.LeftGrip) == 0) _virtualButtons |= Buttons.LeftGrip; else if (grips.Left < TriggerThresholdOff && (_virtualButtons & Buttons.LeftGrip) != 0) _virtualButtons &= ~Buttons.LeftGrip; if (grips.Right > TriggerThresholdOn && (_virtualButtons & Buttons.RightGrip) == 0) _virtualButtons |= Buttons.RightGrip; else if (grips.Right < TriggerThresholdOff && (_virtualButtons & Buttons.RightGrip) != 0) _virtualButtons &= ~Buttons.RightGrip; //// virtual thumbstick buttons if (ThumbStickL.CurrentState.X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickLeft) == 0) _virtualButtons |= Buttons.LeftThumbstickLeft; else if (ThumbStickL.CurrentState.X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickLeft) != 0) _virtualButtons &= ~Buttons.LeftThumbstickLeft; if (ThumbStickR.CurrentState.X < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickLeft) == 0) _virtualButtons |= Buttons.RightThumbstickLeft; else if (ThumbStickR.CurrentState.X > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickLeft) != 0) _virtualButtons &= ~Buttons.RightThumbstickLeft; if (ThumbStickL.CurrentState.X > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickRight) == 0) _virtualButtons |= Buttons.LeftThumbstickRight; else if (ThumbStickL.CurrentState.X < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickRight) != 0) _virtualButtons &= ~Buttons.LeftThumbstickRight; if (ThumbStickR.CurrentState.X > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickRight) == 0) _virtualButtons |= Buttons.RightThumbstickRight; else if (ThumbStickR.CurrentState.X < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickRight) != 0) _virtualButtons &= ~Buttons.RightThumbstickRight; if (ThumbStickL.CurrentState.Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickDown) == 0) _virtualButtons |= Buttons.LeftThumbstickDown; else if (ThumbStickL.CurrentState.Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickDown) != 0) _virtualButtons &= ~Buttons.LeftThumbstickDown; if (ThumbStickR.CurrentState.Y < -ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickDown) == 0) _virtualButtons |= Buttons.RightThumbstickDown; else if (ThumbStickR.CurrentState.Y > -ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickDown) != 0) _virtualButtons &= ~Buttons.RightThumbstickDown; if (ThumbStickL.CurrentState.Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.LeftThumbstickUp) == 0) _virtualButtons |= Buttons.LeftThumbstickUp; else if (ThumbStickL.CurrentState.Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.LeftThumbstickUp) != 0) _virtualButtons &= ~Buttons.LeftThumbstickUp; if (ThumbStickR.CurrentState.Y > ThumbstickThresholdOn && (_virtualButtons & Buttons.RightThumbstickUp) == 0) _virtualButtons |= Buttons.RightThumbstickUp; else if (ThumbStickR.CurrentState.Y < ThumbstickThresholdOff && (_virtualButtons & Buttons.RightThumbstickUp) != 0) _virtualButtons &= ~Buttons.RightThumbstickUp; buttons |= _virtualButtons; //// left touches ActionStateBoolean _stateButtonXtouch = session.GetActionStateBoolean(_xrDevice._actionButtonXtouch); ActionStateBoolean _stateButtonYtouch = session.GetActionStateBoolean(_xrDevice._actionButtonYtouch); ActionStateBoolean _stateButtonLTStouch = session.GetActionStateBoolean(_xrDevice._actionButtonLeftThumbsticktouch); ActionStateFloat _stateTriggerLTouch = session.GetActionStateFloat(_xrDevice._actionTriggerLeftTouch); // BUG: Grip touch doesn't work on native OpenXR. // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021 //ActionStateFloat _stateGripLTouch = session.GetActionStateFloat(_xrDevice._actionGripLeftTouch); if (_stateButtonXtouch.CurrentState != 0) touches |= Buttons.X; if (_stateButtonYtouch.CurrentState != 0) touches |= Buttons.Y; if (_stateButtonLTStouch.CurrentState != 0) touches |= Buttons.LeftStick; //if (((int)ovrInputState.Buttons & (int)OvrButton.Enter) != 0) // Menu // touches |= Buttons.Start; if (_stateTriggerLTouch.CurrentState != 0) touches |= Buttons.LeftTrigger; //if (_stateGripLTouch.CurrentState != 0) // touches |= Buttons.LeftGrip; //// right touches ActionStateBoolean _stateButtonAtouch = session.GetActionStateBoolean(_xrDevice._actionButtonAtouch); ActionStateBoolean _stateButtonBtouch = session.GetActionStateBoolean(_xrDevice._actionButtonBtouch); ActionStateBoolean _stateButtonRTStouch = session.GetActionStateBoolean(_xrDevice._actionButtonRightThumbsticktouch); ActionStateFloat _stateTriggerRTouch = session.GetActionStateFloat(_xrDevice._actionTriggerRightTouch); // BUG: Grip touch doesn't work on native OpenXR. // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021 //ActionStateFloat _stateGripRTouch = session.GetActionStateFloat(_xrDevice._actionGripRightTouch); if (_stateButtonAtouch.CurrentState != 0) touches |= Buttons.A; if (_stateButtonBtouch.CurrentState != 0) touches |= Buttons.B; if (_stateButtonRTStouch.CurrentState != 0) touches |= Buttons.RightStick; //if (((int)ovrInputState.Buttons & (int)OvrButton.Home) != 0) // Oculus button // touches |= Buttons.Back; if (_stateTriggerRTouch.CurrentState != 0) touches |= Buttons.RightTrigger; //if (_stateGripRTouch.CurrentState != 0) // touches |= Buttons.RightGrip; var state = new GamePadState( thumbSticks: thumbSticks, triggers: triggers, grips: grips, touchButtons: new GamePadTouchButtons(buttons, touches), dPad: default(GamePadDPad) ); return state; } const int XR_MIN_HAPTIC_DURATION = -1; private long ToXrTime(double sec) { return (long)(sec * 1000 * 1000 * 1000); //nSec } bool ITouchControllerInput.SetVibration(TouchControllerType controllerType, float amplitude) { var session = _xrDevice.Session; if (session == null) return false; if ((controllerType & TouchControllerType.LTouch) == TouchControllerType.LTouch) { Result xrResult = session.ApplyHapticFeedback( _xrDevice._vibrateLeftFeedback, amplitude: amplitude, frequency: 3000f, duration: ToXrTime(0.5)); if (xrResult != Result.Success) return false; } if ((controllerType & TouchControllerType.RTouch) == TouchControllerType.RTouch) { Result xrResult = session.ApplyHapticFeedback( _xrDevice._vibrateRightFeedback, amplitude: amplitude, frequency: 3000f, duration: ToXrTime(0.5)); if (xrResult != Result.Success) return false; } return true; } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteGamePad.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { throw new PlatformNotSupportedException(); } } public override float RightThumbDeadZone { get { throw new PlatformNotSupportedException(); } } public override int PlatformGetMaxNumberOfGamePads() { throw new PlatformNotSupportedException(); } public override GamePadCapabilities PlatformGetCapabilities(int index) { throw new PlatformNotSupportedException(); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { throw new PlatformNotSupportedException(); } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { internal class ConcreteGamePadDevice : GamePadDevice { public ConcreteGamePadDevice() : base() { } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteJoystick.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { throw new PlatformNotSupportedException(); } } public override JoystickCapabilities PlatformGetCapabilities(int index) { throw new PlatformNotSupportedException(); } public override JoystickState PlatformGetState(int index) { throw new PlatformNotSupportedException(); } public override void PlatformGetState(int index, ref JoystickState joystickState) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteKeyboard.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { public override KeyboardState PlatformGetState() { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { throw new PlatformNotSupportedException(); } public override void PlatformCancel(string result) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { public override Task PlatformShow(string title, string description, List buttons) { throw new PlatformNotSupportedException(); } public override void PlatformCancel(int? result) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteMouse.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { public override IntPtr PlatformGetWindowHandle() { throw new PlatformNotSupportedException(); } public override void PlatformSetWindowHandle(IntPtr windowHandle) { throw new PlatformNotSupportedException(); } public override bool PlatformIsRawInputAvailable() { throw new PlatformNotSupportedException(); } public override MouseState PlatformGetState() { throw new PlatformNotSupportedException(); } public override void PlatformSetPosition(int x, int y) { throw new PlatformNotSupportedException(); } public override void PlatformSetCursor(MouseCursor cursor) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.Ref/ConcreteMouseCursor.cs ================================================ // Copyright (C)2022-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { throw new PlatformNotSupportedException(); } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool dispose) { if (dispose) { } base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.Ref/Touch/ConcreteTouchPanel.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override int DisplayWidth { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override int DisplayHeight { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override DisplayOrientation DisplayOrientation { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override GestureType EnabledGestures { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override bool IsGestureAvailable { get { throw new PlatformNotSupportedException(); } } public override TouchPanelCapabilities GetCapabilities() { throw new PlatformNotSupportedException(); } public override TouchCollection GetState() { throw new PlatformNotSupportedException(); } public override GestureSample ReadGesture() { throw new PlatformNotSupportedException(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { throw new PlatformNotSupportedException(); } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { throw new PlatformNotSupportedException(); } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { throw new PlatformNotSupportedException(); } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteGamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { private Sdl SDL { get { return Sdl.Current; } } // map GamePad indices (PlayerIndex) -> GamePadDevices private readonly Dictionary _gamepads = new Dictionary(); // map Joystick instanceIDs -> gamepad indices (PlayerIndex) private readonly Dictionary _indicesMap = new Dictionary(); // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { return 0.24f; } } public override float RightThumbDeadZone { get { return 0.265f; } } const Sdl.InitFlags SdlSubSystems = Sdl.InitFlags.GameController | Sdl.InitFlags.Haptic ; public ConcreteGamePad() { Sdl.Current.InitSubSystem(SdlSubSystems);; InitDatabase(); InitDevices(); } ~ConcreteGamePad() { foreach (SdlGamePadDevice sdlGamepad in _gamepads.Values) SDL.GAMECONTROLLER.Close(sdlGamepad.Handle); _gamepads.Clear(); _indicesMap.Clear(); Sdl.Current.QuitSubSystem(SdlSubSystems); } public override int PlatformGetMaxNumberOfGamePads() { return 16; } public override GamePadCapabilities PlatformGetCapabilities(int index) { if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad)) return sdlGamepad.Capabilities; return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } private GamePadCapabilities InternalGetCapabilities(IntPtr handle) { GamePadType gamePadType = GamePadType.GamePad; string displayName = SDL.GAMECONTROLLER.GetName(handle); string identifier = SDL.JOYSTICK.GetGUID(SDL.GAMECONTROLLER.GetJoystick(handle)).ToString(); bool isConnected = true; bool hasLeftVibrationMotor = SDL.GAMECONTROLLER.HasRumble(handle) != 0; bool hasRightVibrationMotor = SDL.GAMECONTROLLER.HasRumble(handle) != 0; bool hasVoiceSupport = false; Buttons buttons = (Buttons)0; ParseCapabilities(handle, ref buttons); return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } private void ParseCapabilities(IntPtr gamecontroller, ref Buttons buttons) { IntPtr pStrMappings = IntPtr.Zero; try { pStrMappings = SDL.GAMECONTROLLER.SDL_GameControllerMapping(gamecontroller); if (pStrMappings == IntPtr.Zero) return; string mappings = InteropHelpers.Utf8ToString(pStrMappings); for (int idx = 0; idx < mappings.Length;) { if (MatchKey("a", mappings, ref idx)) buttons |= Buttons.A; else if (MatchKey("b", mappings, ref idx)) buttons |= Buttons.B; else if (MatchKey("x", mappings, ref idx)) buttons |= Buttons.X; else if (MatchKey("y", mappings, ref idx)) buttons |= Buttons.Y; else if (MatchKey("back", mappings, ref idx)) buttons |= Buttons.Back; else if (MatchKey("guide", mappings, ref idx)) buttons |= Buttons.BigButton; else if (MatchKey("start", mappings, ref idx)) buttons |= Buttons.Start; else if (MatchKey("dpleft", mappings, ref idx)) buttons |= Buttons.DPadLeft; else if (MatchKey("dpdown", mappings, ref idx)) buttons |= Buttons.DPadDown; else if (MatchKey("dpright", mappings, ref idx)) buttons |= Buttons.DPadRight; else if (MatchKey("dpup", mappings, ref idx)) buttons |= Buttons.DPadUp; else if (MatchKey("leftshoulder", mappings, ref idx)) buttons |= Buttons.LeftShoulder; else if (MatchKey("lefttrigger", mappings, ref idx)) buttons |= Buttons.LeftTrigger; else if (MatchKey("rightshoulder", mappings, ref idx)) buttons |= Buttons.RightShoulder; else if (MatchKey("righttrigger", mappings, ref idx)) buttons |= Buttons.RightTrigger; else if (MatchKey("leftstick", mappings, ref idx)) buttons |= Buttons.LeftStick; else if (MatchKey("rightstick", mappings, ref idx)) buttons |= Buttons.RightStick; else if (MatchKey("leftx", mappings, ref idx)) buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight; else if (MatchKey("lefty", mappings, ref idx)) buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp; else if (MatchKey("rightx", mappings, ref idx)) buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight; else if (MatchKey("righty", mappings, ref idx)) buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp; if (idx < mappings.Length) { int nidx = mappings.IndexOf(',', idx); if (nidx != -1) { idx = nidx + 1; continue; } } break; } } finally { if (pStrMappings != IntPtr.Zero) SDL.SDL_Free(pStrMappings); } } private bool MatchKey(string match, string input, ref int startIndex) { int nIndex = startIndex; if (!Match(match, input, ref nIndex)) return false; if (!Match(":", input, ref nIndex)) return false; startIndex = nIndex; return true; } private bool Match(string match, string input, ref int startIndex) { if (input.Length - startIndex < match.Length) return false; int matchIndex = input.IndexOf(match, startIndex, match.Length); if (matchIndex != startIndex) return false; startIndex += match.Length; return true; } private float GetFromSdlAxis(int axis) { // SDL Axis ranges from -32768 to 32767, so we need to divide with different numbers depending on if it's positive if (axis < 0) return axis / 32768f; return axis / 32767f; } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad)) { // Y gamepad axis is rotate between SDL and XNA GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks( new Vector2( GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.LeftX)), GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.LeftY)) * -1f ), new Vector2( GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.RightX)), GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.RightY)) * -1f ), leftDeadZoneMode, rightDeadZoneMode ); GamePadTriggers triggers = new GamePadTriggers( GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.TriggerLeft)), GetFromSdlAxis(SDL.GAMECONTROLLER.GetAxis(sdlGamepad.Handle, Sdl.GameController.Axis.TriggerRight)) ); GamePadButtons buttons = new GamePadButtons( ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.A) == 1) ? Buttons.A : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.B) == 1) ? Buttons.B : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Back) == 1) ? Buttons.Back : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Guide) == 1) ? Buttons.BigButton : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.LeftShoulder) == 1) ? Buttons.LeftShoulder : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.RightShoulder) == 1) ? Buttons.RightShoulder : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.LeftStick) == 1) ? Buttons.LeftStick : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.RightStick) == 1) ? Buttons.RightStick : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Start) == 1) ? Buttons.Start : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.X) == 1) ? Buttons.X : 0) | ((SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.Y) == 1) ? Buttons.Y : 0) | ((triggers.Left > 0f) ? Buttons.LeftTrigger : 0) | ((triggers.Right > 0f) ? Buttons.RightTrigger : 0) ); GamePadDPad dPad = new GamePadDPad( (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadUp) == 1) ? ButtonState.Pressed : ButtonState.Released, (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadDown) == 1) ? ButtonState.Pressed : ButtonState.Released, (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadLeft) == 1) ? ButtonState.Pressed : ButtonState.Released, (SDL.GAMECONTROLLER.GetButton(sdlGamepad.Handle, Sdl.GameController.Button.DpadRight) == 1) ? ButtonState.Pressed : ButtonState.Released ); sdlGamepad.State = base.CreateGamePadState(thumbSticks, triggers, buttons, dPad, packetNumber: sdlGamepad.PacketNumber); return sdlGamepad.State; } return new GamePadState(); } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad)) { return SDL.GAMECONTROLLER.Rumble(sdlGamepad.Handle, (ushort)(65535f * leftMotor), (ushort)(65535f * rightMotor), uint.MaxValue) == 0 && SDL.GAMECONTROLLER.RumbleTriggers(sdlGamepad.Handle, (ushort)(65535f * leftTrigger), (ushort)(65535f * rightTrigger), uint.MaxValue) == 0; } return false; } private void InitDatabase() { using (Stream stream = typeof(ConcreteGamePad).Assembly.GetManifestResourceStream("gamecontrollerdb.txt")) { if (stream != null) { try { byte[] data = new byte[stream.Length]; stream.Read(data, 0, data.Length); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); try { IntPtr pRWops = SDL.RwFromMem(data, data.Length); SDL.GAMECONTROLLER.AddMappingFromRw(pRWops, 1); } finally { handle.Free(); } } catch { } } } } private void InitDevices() { int numJoysticks = SDL.JOYSTICK.NumJoysticks(); for (int deviceIndex = 0; deviceIndex < numJoysticks; deviceIndex++) { if (SDL.GAMECONTROLLER.IsGameController(deviceIndex) == 1) AddDevice(deviceIndex); } } internal void AddDevice(int deviceIndex) { IntPtr handle = SDL.GAMECONTROLLER.Open(deviceIndex); IntPtr joystickHandle = SDL.GAMECONTROLLER.GetJoystick(handle); int instanceID = SDL.JOYSTICK.InstanceID(joystickHandle); if (_indicesMap.ContainsKey(instanceID)) return; int index = 0; while (_gamepads.ContainsKey(index)) index++; SdlGamePadDevice sdlGamepad = new SdlGamePadDevice(instanceID, handle); sdlGamepad.Capabilities = InternalGetCapabilities(handle); _gamepads.Add(index, sdlGamepad); _indicesMap[instanceID] = index; } internal void RemapDevice(int instanceID) { } internal void RemoveDevice(int instanceID) { if (_indicesMap.TryGetValue(instanceID, out int index)) { if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad)) { _gamepads.Remove(index); SDL.GAMECONTROLLER.Close(sdlGamepad.Handle); _indicesMap.Remove(instanceID); } } } internal void UpdatePacketInfo(int instanceID, uint packetNumber) { if (_indicesMap.TryGetValue(instanceID, out int index)) { if (_gamepads.TryGetValue(index, out SdlGamePadDevice sdlGamepad)) { sdlGamepad.PacketNumber = (packetNumber < int.MaxValue) ? (int)packetNumber : (int)(packetNumber - (uint)int.MaxValue); } } } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { internal class SdlGamePadDevice : GamePadDevice { public int InstanceID { get; private set; } public IntPtr Handle { get; private set; } internal GamePadState State; public int PacketNumber; public SdlGamePadDevice(int instanceID, IntPtr handle) : base() { this.InstanceID = instanceID; this.Handle = handle; } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteJoystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { private Sdl SDL { get { return Sdl.Current; } } // map Joystick indices (PlayerIndex) -> JoystickDevices private Dictionary _sdlJoysticks = new Dictionary(); // map Joystick instanceIDs -> gamepad indices (PlayerIndex) private readonly Dictionary _indicesMap = new Dictionary(); private int _maxConnectedIndex = -1; public override bool PlatformIsSupported { get { return true; } } public override int PlatformLastConnectedIndex { get { return _maxConnectedIndex; } } const Sdl.InitFlags SdlSubSystems = Sdl.InitFlags.Joystick ; public ConcreteJoystick() { Sdl.Current.InitSubSystem(SdlSubSystems); InitDevices(); } ~ConcreteJoystick() { foreach (SdlJoystickDevice sdlJoystick in _sdlJoysticks.Values) SDL.JOYSTICK.Close(sdlJoystick.Handle); _sdlJoysticks.Clear(); _indicesMap.Clear(); Sdl.Current.QuitSubSystem(SdlSubSystems); } public override JoystickCapabilities PlatformGetCapabilities(int index) { if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick)) return sdlJoystick.Capabilities; return base.CreateJoystickCapabilities(false, string.Empty, string.Empty, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick)) { JoystickCapabilities caps = sdlJoystick.Capabilities; int[] axes = new int[caps.AxisCount]; for (int i = 0; i < axes.Length; i++) axes[i] = SDL.JOYSTICK.GetAxis(sdlJoystick.Handle, i); ButtonState[] buttons = new ButtonState[caps.ButtonCount]; for (int i = 0; i < buttons.Length; i++) buttons[i] = (SDL.JOYSTICK.GetButton(sdlJoystick.Handle, i) == 0) ? ButtonState.Released : ButtonState.Pressed; JoystickHat[] hats = new JoystickHat[caps.HatCount]; for (int i = 0; i < hats.Length; i++) { Sdl.Joystick.Hat hatstate = SDL.JOYSTICK.GetHat(sdlJoystick.Handle, i); Buttons dPadButtons = SDLToXnaDPadButtons(hatstate); hats[i] = base.CreateJoystickHat(dPadButtons); } sdlJoystick.State = base.CreateJoystickState( isConnected: true, axes: axes, buttons: buttons, hats: hats ); return sdlJoystick.State; } return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { bool isConnected = false; int[] axes = joystickState.Axes; ButtonState[] buttons = joystickState.Buttons; JoystickHat[] hats = joystickState.Hats; if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick)) { JoystickCapabilities caps = sdlJoystick.Capabilities; //Resize each array if the length is less than the count returned by the capabilities if (axes.Length < caps.AxisCount) axes = new int[caps.AxisCount]; if (buttons.Length < caps.ButtonCount) buttons = new ButtonState[caps.ButtonCount]; if (hats.Length < caps.HatCount) hats = new JoystickHat[caps.HatCount]; for (int i = 0; i < caps.AxisCount; i++) axes[i] = SDL.JOYSTICK.GetAxis(sdlJoystick.Handle, i); for (int i = 0; i < caps.ButtonCount; i++) buttons[i] = (SDL.JOYSTICK.GetButton(sdlJoystick.Handle, i) == 0) ? ButtonState.Released : ButtonState.Pressed; for (int i = 0; i < caps.HatCount; i++) { Sdl.Joystick.Hat hatstate = SDL.JOYSTICK.GetHat(sdlJoystick.Handle, i); Buttons dPadButtons = SDLToXnaDPadButtons(hatstate); hats[i] = base.CreateJoystickHat(dPadButtons); } isConnected = true; } joystickState = base.CreateJoystickState(isConnected, axes, buttons, hats); } private void InitDevices() { int numJoysticks = SDL.JOYSTICK.NumJoysticks(); for (int deviceIndex = 0; deviceIndex < numJoysticks; deviceIndex++) AddDevice(deviceIndex); } internal void AddDevice(int deviceIndex) { IntPtr handle = SDL.JOYSTICK.Open(deviceIndex); int instanceID = SDL.JOYSTICK.InstanceID(handle); if (_indicesMap.ContainsKey(instanceID)) return; int index = 0; while (_sdlJoysticks.ContainsKey(index)) index++; _maxConnectedIndex = Math.Max(_maxConnectedIndex, index); SdlJoystickDevice sdlJoystick = new SdlJoystickDevice(instanceID, handle); sdlJoystick.Capabilities = base.CreateJoystickCapabilities( isConnected: true, displayName: SDL.JOYSTICK.GetJoystickName(handle), identifier: SDL.JOYSTICK.GetGUID(handle).ToString(), isGamepad: (SDL.GAMECONTROLLER.IsGameController(deviceIndex) == 1), axisCount: SDL.JOYSTICK.NumAxes(handle), buttonCount: SDL.JOYSTICK.NumButtons(handle), hatCount: SDL.JOYSTICK.NumHats(handle) ); _sdlJoysticks.Add(index, sdlJoystick); _indicesMap[instanceID] = index; } internal void RemoveDevice(int instanceID) { if (_indicesMap.TryGetValue(instanceID, out int index)) { if (_sdlJoysticks.TryGetValue(index, out SdlJoystickDevice sdlJoystick)) { SDL.JOYSTICK.Close(sdlJoystick.Handle); _sdlJoysticks.Remove(index); if (_maxConnectedIndex == index) _maxConnectedIndex = CalculateMaxConnectedIndex(); _indicesMap.Remove(instanceID); } } } private int CalculateMaxConnectedIndex() { int maxConnectedIndex = -1; foreach (int index in _sdlJoysticks.Keys) maxConnectedIndex = Math.Max(maxConnectedIndex, index); return maxConnectedIndex; } private Buttons SDLToXnaDPadButtons(Sdl.Joystick.Hat hatstate) { Buttons dPadButtons = (Buttons)0; dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Up)); dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Down) >> 1); dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Left) >> 1); dPadButtons |= (Buttons)((int)(hatstate & Sdl.Joystick.Hat.Right) << 2); return dPadButtons; } } public class SdlJoystickDevice : JoystickDevice { public int InstanceID { get; private set; } public IntPtr Handle { get; private set; } internal JoystickState State; public SdlJoystickDevice(int instanceID, IntPtr handle) : base() { this.InstanceID = instanceID; this.Handle = handle; } } public class JoystickDevice { public JoystickCapabilities Capabilities; public JoystickDevice() { } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteKeyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private Sdl SDL { get { return Sdl.Current; } } private List _keys; public override KeyboardState PlatformGetState() { Sdl.Keyboard.Keymod modifiers = SDL.KEYBOARD.GetModState(); return base.CreateKeyboardState(_keys, (modifiers & Sdl.Keyboard.Keymod.CapsLock) == Sdl.Keyboard.Keymod.CapsLock, (modifiers & Sdl.Keyboard.Keymod.NumLock) == Sdl.Keyboard.Keymod.NumLock); } internal void SetKeys(List keys) { _keys = keys; } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { throw new NotImplementedException("KeyboardInput is not implemented on this platform."); } public override void PlatformCancel(string result) { throw new NotImplementedException("KeyboardInput is not implemented on this platform."); } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { public override Task PlatformShow(string title, string description, List buttons) { throw new NotImplementedException("MessageBox is not implemented on this platform."); } public override void PlatformCancel(int? result) { throw new NotImplementedException("MessageBox is not implemented on this platform."); } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteMouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; private Sdl SDL { get { return Sdl.Current; } } internal int ScrollX; internal int ScrollY; internal int RawX; internal int RawY; public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { _wndHandle = windowHandle; } public override bool PlatformIsRawInputAvailable() { return true; } public override MouseState PlatformGetState() { IntPtr wndHandle = _wndHandle; if (wndHandle != IntPtr.Zero) { SdlGameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle); int winFlags = SDL.WINDOW.GetWindowFlags(wndHandle); Point pos, windowPos; Sdl.Mouse.Button state = SDL.MOUSE.GetGlobalState(out pos.X, out pos.Y); SDL.WINDOW.GetPosition(wndHandle, out windowPos.X, out windowPos.Y); Point clientPos = pos - windowPos; MouseState mouseState = new MouseState( x: clientPos.X, y: clientPos.Y, scrollWheel: ScrollY, horizontalScrollWheel: ScrollX, rawX: RawX, rawY: RawY, leftButton: (state & Sdl.Mouse.Button.Left) != 0 ? ButtonState.Pressed : ButtonState.Released, middleButton: (state & Sdl.Mouse.Button.Middle) != 0 ? ButtonState.Pressed : ButtonState.Released, rightButton: (state & Sdl.Mouse.Button.Right) != 0 ? ButtonState.Pressed : ButtonState.Released, xButton1: (state & Sdl.Mouse.Button.X1Mask) != 0 ? ButtonState.Pressed : ButtonState.Released, xButton2: (state & Sdl.Mouse.Button.X2Mask) != 0 ? ButtonState.Pressed : ButtonState.Released ); return mouseState; } else return new MouseState(); } public override void PlatformSetPosition(int x, int y) { SdlGameWindow gameWindow = SdlGameWindow.FromHandle(_wndHandle); SDL.MOUSE.WarpInWindow(gameWindow.Handle, x, y); } public override void PlatformSetCursor(MouseCursor cursor) { SDL.MOUSE.SetCursor(cursor.Handle); } } } ================================================ FILE: Platforms/Input/.SDL2/ConcreteMouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { private static Sdl SDL { get { return Sdl.Current; } } public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; Sdl.Mouse.SystemCursor cursor = CursorTypeToSDLCursor(cursorType); this._handle = SDL.MOUSE.CreateSystemCursor(cursor); } private Sdl.Mouse.SystemCursor CursorTypeToSDLCursor(MouseCursorStrategy.MouseCursorType cursorType) { switch (cursorType) { case MouseCursorStrategy.MouseCursorType.Arrow: return Sdl.Mouse.SystemCursor.Arrow; case MouseCursorStrategy.MouseCursorType.IBeam: return Sdl.Mouse.SystemCursor.IBeam; case MouseCursorStrategy.MouseCursorType.Wait: return Sdl.Mouse.SystemCursor.Wait; case MouseCursorStrategy.MouseCursorType.Crosshair: return Sdl.Mouse.SystemCursor.Crosshair; case MouseCursorStrategy.MouseCursorType.WaitArrow: return Sdl.Mouse.SystemCursor.WaitArrow; case MouseCursorStrategy.MouseCursorType.SizeNWSE: return Sdl.Mouse.SystemCursor.SizeNWSE; case MouseCursorStrategy.MouseCursorType.SizeNESW: return Sdl.Mouse.SystemCursor.SizeNESW; case MouseCursorStrategy.MouseCursorType.SizeWE: return Sdl.Mouse.SystemCursor.SizeWE; case MouseCursorStrategy.MouseCursorType.SizeNS: return Sdl.Mouse.SystemCursor.SizeNS; case MouseCursorStrategy.MouseCursorType.SizeAll: return Sdl.Mouse.SystemCursor.SizeAll; case MouseCursorStrategy.MouseCursorType.No: return Sdl.Mouse.SystemCursor.No; case MouseCursorStrategy.MouseCursorType.Hand: return Sdl.Mouse.SystemCursor.Hand; default: throw new InvalidOperationException("cursorType"); } } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { IntPtr surface = IntPtr.Zero; try { surface = SDL.CreateRGBSurfaceFrom(data, w, h, 32, w * 4, 0x000000ff, 0x0000FF00, 0x00FF0000, 0xFF000000); if (surface == IntPtr.Zero) throw new InvalidOperationException("Failed to create surface for mouse cursor: " + SDL.GetError()); IntPtr handle = SDL.MOUSE.CreateColorCursor(surface, originx, originy); if (handle == IntPtr.Zero) throw new InvalidOperationException("Failed to set surface for mouse cursor: " + SDL.GetError()); this._cursorType = MouseCursorStrategy.MouseCursorType.User; this._handle = handle; } finally { if (surface != IntPtr.Zero) SDL.FreeSurface(surface); } } protected override void Dispose(bool dispose) { if (dispose) { } if (this.Handle != IntPtr.Zero) SDL.MOUSE.FreeCursor(this.Handle); base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.SDL2/KeyboardUtil.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { internal static class KeyboardUtil { static Dictionary _map; static KeyboardUtil() { _map = new Dictionary(); _map.Add(8, Keys.Back); _map.Add(9, Keys.Tab); _map.Add(13, Keys.Enter); _map.Add(27, Keys.Escape); _map.Add(32, Keys.Space); _map.Add(39, Keys.OemQuotes); _map.Add(43, Keys.Add); _map.Add(44, Keys.OemComma); _map.Add(45, Keys.OemMinus); _map.Add(46, Keys.OemPeriod); _map.Add(47, Keys.OemQuestion); _map.Add(48, Keys.D0); _map.Add(49, Keys.D1); _map.Add(50, Keys.D2); _map.Add(51, Keys.D3); _map.Add(52, Keys.D4); _map.Add(53, Keys.D5); _map.Add(54, Keys.D6); _map.Add(55, Keys.D7); _map.Add(56, Keys.D8); _map.Add(57, Keys.D9); _map.Add(59, Keys.OemSemicolon); _map.Add(60, Keys.OemBackslash); _map.Add(61, Keys.OemPlus); _map.Add(91, Keys.OemOpenBrackets); _map.Add(92, Keys.OemPipe); _map.Add(93, Keys.OemCloseBrackets); _map.Add(96, Keys.OemTilde); _map.Add(97, Keys.A); _map.Add(98, Keys.B); _map.Add(99, Keys.C); _map.Add(100, Keys.D); _map.Add(101, Keys.E); _map.Add(102, Keys.F); _map.Add(103, Keys.G); _map.Add(104, Keys.H); _map.Add(105, Keys.I); _map.Add(106, Keys.J); _map.Add(107, Keys.K); _map.Add(108, Keys.L); _map.Add(109, Keys.M); _map.Add(110, Keys.N); _map.Add(111, Keys.O); _map.Add(112, Keys.P); _map.Add(113, Keys.Q); _map.Add(114, Keys.R); _map.Add(115, Keys.S); _map.Add(116, Keys.T); _map.Add(117, Keys.U); _map.Add(118, Keys.V); _map.Add(119, Keys.W); _map.Add(120, Keys.X); _map.Add(121, Keys.Y); _map.Add(122, Keys.Z); _map.Add(127, Keys.Delete); _map.Add(1073741881, Keys.CapsLock); _map.Add(1073741882, Keys.F1); _map.Add(1073741883, Keys.F2); _map.Add(1073741884, Keys.F3); _map.Add(1073741885, Keys.F4); _map.Add(1073741886, Keys.F5); _map.Add(1073741887, Keys.F6); _map.Add(1073741888, Keys.F7); _map.Add(1073741889, Keys.F8); _map.Add(1073741890, Keys.F9); _map.Add(1073741891, Keys.F10); _map.Add(1073741892, Keys.F11); _map.Add(1073741893, Keys.F12); _map.Add(1073741894, Keys.PrintScreen); _map.Add(1073741895, Keys.Scroll); _map.Add(1073741896, Keys.Pause); _map.Add(1073741897, Keys.Insert); _map.Add(1073741898, Keys.Home); _map.Add(1073741899, Keys.PageUp); _map.Add(1073741901, Keys.End); _map.Add(1073741902, Keys.PageDown); _map.Add(1073741903, Keys.Right); _map.Add(1073741904, Keys.Left); _map.Add(1073741905, Keys.Down); _map.Add(1073741906, Keys.Up); _map.Add(1073741907, Keys.NumLock); _map.Add(1073741908, Keys.Divide); _map.Add(1073741909, Keys.Multiply); _map.Add(1073741910, Keys.Subtract); _map.Add(1073741911, Keys.Add); _map.Add(1073741912, Keys.Enter); _map.Add(1073741913, Keys.NumPad1); _map.Add(1073741914, Keys.NumPad2); _map.Add(1073741915, Keys.NumPad3); _map.Add(1073741916, Keys.NumPad4); _map.Add(1073741917, Keys.NumPad5); _map.Add(1073741918, Keys.NumPad6); _map.Add(1073741919, Keys.NumPad7); _map.Add(1073741920, Keys.NumPad8); _map.Add(1073741921, Keys.NumPad9); _map.Add(1073741922, Keys.NumPad0); _map.Add(1073741923, Keys.Decimal); _map.Add(1073741925, Keys.Apps); _map.Add(1073741928, Keys.F13); _map.Add(1073741929, Keys.F14); _map.Add(1073741930, Keys.F15); _map.Add(1073741931, Keys.F16); _map.Add(1073741932, Keys.F17); _map.Add(1073741933, Keys.F18); _map.Add(1073741934, Keys.F19); _map.Add(1073741935, Keys.F20); _map.Add(1073741936, Keys.F21); _map.Add(1073741937, Keys.F22); _map.Add(1073741938, Keys.F23); _map.Add(1073741939, Keys.F24); _map.Add(1073741951, Keys.VolumeMute); _map.Add(1073741952, Keys.VolumeUp); _map.Add(1073741953, Keys.VolumeDown); _map.Add(1073742040, Keys.OemClear); _map.Add(1073742044, Keys.Decimal); _map.Add(1073742048, Keys.LeftControl); _map.Add(1073742049, Keys.LeftShift); _map.Add(1073742050, Keys.LeftAlt); _map.Add(1073742051, Keys.LeftWindows); _map.Add(1073742052, Keys.RightControl); _map.Add(1073742053, Keys.RightShift); _map.Add(1073742054, Keys.RightAlt); _map.Add(1073742055, Keys.RightWindows); _map.Add(1073742082, Keys.MediaNextTrack); _map.Add(1073742083, Keys.MediaPreviousTrack); _map.Add(1073742084, Keys.MediaStop); _map.Add(1073742085, Keys.MediaPlayPause); _map.Add(1073742086, Keys.VolumeMute); _map.Add(1073742087, Keys.SelectMedia); _map.Add(1073742089, Keys.LaunchMail); _map.Add(1073742092, Keys.BrowserSearch); _map.Add(1073742093, Keys.BrowserHome); _map.Add(1073742094, Keys.BrowserBack); _map.Add(1073742095, Keys.BrowserForward); _map.Add(1073742096, Keys.BrowserStop); _map.Add(1073742097, Keys.BrowserRefresh); _map.Add(1073742098, Keys.BrowserFavorites); _map.Add(1073742106, Keys.Sleep); } public static Keys ToXna(int key) { Keys xnaKey; if (_map.TryGetValue(key, out xnaKey)) return xnaKey; return Keys.None; } } } ================================================ FILE: Platforms/Input/.SDL2/Touch/ConcreteTouchPanel.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = 0; bool isConnected = false; bool hasPressure = false; _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = SdlGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteGamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using WGI = Windows.Gaming.Input; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { // Attempts to mimic SharpDX.XInput.Gamepad which defines the trigger threshold as 30 with a range of 0 to 255. // The trigger here has a range of 0.0 to 1.0. So, 30 / 255 = 0.11765. private const double TriggerThreshold = 0.11765; const int MaxNumberOfGamePads = 16; internal bool Back; private WGIGamePadDevice[] _gamepads; private int _initGamepadsCount; // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { return 0.24f; } } public override float RightThumbDeadZone { get { return 0.265f; } } public ConcreteGamePad() { _gamepads = new WGIGamePadDevice[MaxNumberOfGamePads]; IReadOnlyList gamepadsTmp = WGI.Gamepad.Gamepads; _initGamepadsCount = gamepadsTmp.Count; // workaround UAP bug. first call to 'WGI.Gamepad.Gamepads' returns an empty instance. IReadOnlyList gamepads = WGI.Gamepad.Gamepads; for (int i = 0; i < _gamepads.Length && i < gamepads.Count; i++) { _gamepads[i] = new WGIGamePadDevice(gamepads[i]); _gamepads[i].Capabilities = CreateCapabilities(_gamepads[i]); } WGI.Gamepad.GamepadAdded += WGIGamepad_GamepadAdded; WGI.Gamepad.GamepadRemoved += WGIGamepad_GamepadRemoved; } private void WGIGamepad_GamepadAdded(object sender, WGI.Gamepad device) { for (int i = 0; i < _gamepads.Length; i++) { if (_gamepads[i] == null) { _gamepads[i] = new WGIGamePadDevice(device); _gamepads[i].Capabilities = CreateCapabilities(_gamepads[i]); break; } } } private void WGIGamepad_GamepadRemoved(object sender, WGI.Gamepad device) { for (int i = 0; i < _gamepads.Length; i++) { if (_gamepads[i]._device == device) { _gamepads[i] = null; break; } } } public override int PlatformGetMaxNumberOfGamePads() { return MaxNumberOfGamePads; } private GamePadCapabilities GetDefaultCapabilities() { return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } public override GamePadCapabilities PlatformGetCapabilities(int index) { WGIGamePadDevice gamepadDevice = _gamepads[index]; if (gamepadDevice == null) return GetDefaultCapabilities(); return gamepadDevice.Capabilities; } private GamePadCapabilities CreateCapabilities(WGIGamePadDevice gamepadDevice) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- // we can't check gamepad capabilities for most stuff with Windows.Gaming.Input.Gamepad { isConnected = true; gamePadType = GamePadType.GamePad; buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.Back; buttons |= Buttons.Start; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.DPadUp; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; buttons |= Buttons.LeftStick; buttons |= Buttons.RightStick; buttons |= Buttons.LeftTrigger; buttons |= Buttons.RightTrigger; buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight; buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp; buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight; buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp; hasLeftVibrationMotor = true; hasRightVibrationMotor = true; hasVoiceSupport = (gamepadDevice._device.Headset != null && !string.IsNullOrEmpty(gamepadDevice._device.Headset.CaptureDeviceId)); }; return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } private GamePadState GetDefaultState() { GamePadButtons buttons = new GamePadButtons((Back) ? Buttons.Back : 0); return base.CreateGamePadState(default(GamePadThumbSticks), default(GamePadTriggers), buttons, default(GamePadDPad), isConnected: false); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { WGIGamePadDevice gamepadDevice = _gamepads[index]; if (gamepadDevice == null) { if (index == 0) return GetDefaultState(); // emulate Back button else return new GamePadState(); } WGI.GamepadReading state = gamepadDevice._device.GetCurrentReading(); GamePadThumbSticks sticks = base.CreateGamePadThumbSticks( new Vector2((float)state.LeftThumbstickX, (float)state.LeftThumbstickY), new Vector2((float)state.RightThumbstickX, (float)state.RightThumbstickY), leftDeadZoneMode, rightDeadZoneMode ); GamePadTriggers triggers = new GamePadTriggers( (float)state.LeftTrigger, (float)state.RightTrigger ); Buttons buttonStates = (state.Buttons.HasFlag(WGI.GamepadButtons.A) ? Buttons.A : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.B) ? Buttons.B : 0) | ((state.Buttons.HasFlag(WGI.GamepadButtons.View) || Back) ? Buttons.Back : 0) | 0 | //BigButton is unavailable by Windows.Gaming.Input.Gamepad (state.Buttons.HasFlag(WGI.GamepadButtons.LeftShoulder) ? Buttons.LeftShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.LeftThumbstick) ? Buttons.LeftStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightShoulder) ? Buttons.RightShoulder : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.RightThumbstick) ? Buttons.RightStick : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Menu) ? Buttons.Start : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.X) ? Buttons.X : 0) | (state.Buttons.HasFlag(WGI.GamepadButtons.Y) ? Buttons.Y : 0) | 0; // Check triggers if (triggers.Left > TriggerThreshold) buttonStates |= Buttons.LeftTrigger; if (triggers.Right > TriggerThreshold) buttonStates |= Buttons.RightTrigger; GamePadButtons buttons = new GamePadButtons(buttonStates); GamePadDPad dpad = new GamePadDPad( state.Buttons.HasFlag(WGI.GamepadButtons.DPadUp) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadDown) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadLeft) ? ButtonState.Pressed : ButtonState.Released, state.Buttons.HasFlag(WGI.GamepadButtons.DPadRight) ? ButtonState.Pressed : ButtonState.Released ); return base.CreateGamePadState(sticks, triggers, buttons, dpad, packetNumber: (int)state.Timestamp); } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { WGIGamePadDevice gamepadDevice = _gamepads[index]; if (gamepadDevice == null) return false; WGI.GamepadVibration gamepadVibration = new WGI.GamepadVibration(); gamepadVibration.LeftMotor = leftMotor; gamepadVibration.LeftTrigger = leftTrigger; gamepadVibration.RightMotor = rightMotor; gamepadVibration.RightTrigger = rightTrigger; gamepadDevice._device.Vibration = gamepadVibration; return true; } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using WGI = Windows.Gaming.Input; namespace Microsoft.Xna.Platform.Input { internal class WGIGamePadDevice : GamePadDevice { public WGI.Gamepad _device; public WGIGamePadDevice(WGI.Gamepad device) : base() { _device = device; } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteJoystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { return -1; } } public override JoystickCapabilities PlatformGetCapabilities(int index) { return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteKeyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private KeyboardState _keyboardState; private KeyboardState _nextKeyboardState; public override KeyboardState PlatformGetState() { return _keyboardState; } internal void UpdateState() { _keyboardState = _nextKeyboardState; } internal void SetKey(Keys key) { base.InternalSetKey(ref _nextKeyboardState, key); } internal void ResetKey(Keys key) { base.InternalResetKey(ref _nextKeyboardState, key); } internal void ResetKeys() { base.InternalResetKeys(ref _nextKeyboardState); } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; using Windows.ApplicationModel.Core; using Windows.UI.Core; using Windows.UI.ViewManagement; #if UAP using Windows.System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Animation; #endif #if WINUI using Microsoft.Windows.System; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Media.Animation; #endif namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { private readonly CoreDispatcher _dispatcher; private TaskCompletionSource _tcs; private InputDialog _inputDialog; public ConcreteKeyboardInput() { _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; } public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { _tcs = new TaskCompletionSource(); _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { _inputDialog = new InputDialog(); string result = await _inputDialog.ShowAsync(title, description, defaultText, usePasswordMode); if (!_tcs.Task.IsCompleted) _tcs.SetResult(result); }); return _tcs.Task; } public override void PlatformCancel(string result) { _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => await _inputDialog.CloseAsync()); _tcs.SetResult(result); } } #region Keyboard Input UI [TemplatePart(Name = LayoutRootPanelName, Type = typeof(Panel))] [TemplatePart(Name = ContentBorderName, Type = typeof(Border))] [TemplatePart(Name = InputTextBoxName, Type = typeof(TextBox))] [TemplatePart(Name = TitleTextBlockName, Type = typeof(TextBlock))] [TemplatePart(Name = TextTextBlockName, Type = typeof(TextBlock))] [TemplatePart(Name = ButtonsPanelName, Type = typeof(Panel))] [TemplateVisualState(GroupName = PopupStatesGroupName, Name = OpenPopupStateName)] [TemplateVisualState(GroupName = PopupStatesGroupName, Name = ClosedPopupStateName)] [StyleTypedProperty(Property = "ButtonStyle", StyleTargetType = typeof(ButtonBase))] [StyleTypedProperty(Property = "TitleStyle", StyleTargetType = typeof(TextBlock))] [StyleTypedProperty(Property = "TextStyle", StyleTargetType = typeof(TextBlock))] [StyleTypedProperty(Property = "InputTextStyle", StyleTargetType = typeof(TextBox))] [StyleTypedProperty(Property = "InputPasswordStyle", StyleTargetType = typeof(PasswordBox))] sealed class InputDialog : Control { private const string PopupStatesGroupName = "PopupStates"; private const string OpenPopupStateName = "OpenPopupState"; private const string ClosedPopupStateName = "ClosedPopupState"; private const string LayoutRootPanelName = "LayoutRoot"; private const string ContentBorderName = "ContentBorder"; private const string InputTextBoxName = "InputTextBox"; private const string InputPasswordBoxName = "InputPasswordBox"; private const string TitleTextBlockName = "TitleTextBlock"; private const string TextTextBlockName = "TextTextBlock"; private const string ButtonsPanelName = "ButtonsPanel"; private const string VirtualKeyboardSlideStoryBoardName = "VirtualKeyboardSlideStoryBoard"; private const string VirtualKeyboardAnimationName = "VirtualKeyboardAnimation"; private const string BlackStripeTransformName = "BlackStripeTransform"; private Panel _layoutRoot; private Border _contentBorder; private TextBox _inputTextBox; private PasswordBox _inputPasswordBox; private TextBlock _titleTextBlock; private TextBlock _textTextBlock; private Panel _buttonsPanel; private bool _usePasswordMode; private bool _shown; private TaskCompletionSource _dismissTaskSource; private List _buttons; private Popup _dialogPopup; private Panel _parentPanel; private Panel _temporaryParentPanel; private ContentControl _parentContentControl; private TranslateTransform _blackStripeTransform; private Storyboard _virtualKeyboardSlideStoryboard; private DoubleAnimation _virtualKeyboardSlideAnimation; public static readonly DependencyProperty ButtonStyleProperty = DependencyProperty.Register( "ButtonStyle", typeof(Style), typeof(InputDialog), new PropertyMetadata(null)); public Style ButtonStyle { get { return (Style)GetValue(ButtonStyleProperty); } set { SetValue(ButtonStyleProperty, value); } } public static readonly DependencyProperty InputTextProperty = DependencyProperty.Register( "InputText", typeof(string), typeof(InputDialog), new PropertyMetadata("", OnInputTextChanged)); private string InputText { get { return (string)GetValue(InputTextProperty); } set { SetValue(InputTextProperty, value); } } private static void OnInputTextChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { InputDialog target = (InputDialog)d; string newInputText = target.InputText; target.OnInputTextChanged(newInputText); } private void OnInputTextChanged(string newInputText) { if (_inputTextBox != null) { _inputTextBox.Text = newInputText; } if (_inputPasswordBox != null) { _inputPasswordBox.Password = newInputText; } } public static readonly DependencyProperty BackgroundScreenBrushProperty = DependencyProperty.Register( "BackgroundScreenBrush", typeof(Brush), typeof(InputDialog), new PropertyMetadata(null)); public Brush BackgroundScreenBrush { get { return (Brush)GetValue(BackgroundScreenBrushProperty); } set { SetValue(BackgroundScreenBrushProperty, value); } } public static readonly DependencyProperty BackgroundStripeBrushProperty = DependencyProperty.Register( "BackgroundStripeBrush", typeof(Brush), typeof(InputDialog), new PropertyMetadata(null)); public Brush BackgroundStripeBrush { get { return (Brush)GetValue(BackgroundStripeBrushProperty); } set { SetValue(BackgroundStripeBrushProperty, value); } } public static readonly DependencyProperty TitleStyleProperty = DependencyProperty.Register( "TitleStyle", typeof(Style), typeof(InputDialog), new PropertyMetadata(null)); public Style TitleStyle { get { return (Style)GetValue(TitleStyleProperty); } set { SetValue(TitleStyleProperty, value); } } public static readonly DependencyProperty TextStyleProperty = DependencyProperty.Register( "TextStyle", typeof(Style), typeof(InputDialog), new PropertyMetadata(null, OnTextStyleChanged)); public Style TextStyle { get { return (Style)GetValue(TextStyleProperty); } set { SetValue(TextStyleProperty, value); } } private static void OnTextStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { InputDialog target = (InputDialog)d; Style oldTextStyle = (Style)e.OldValue; Style newTextStyle = target.TextStyle; target.OnTextStyleChanged(oldTextStyle, newTextStyle); } private void OnTextStyleChanged(Style oldTextStyle, Style newTextStyle) { } public static readonly DependencyProperty InputTextStyleProperty = DependencyProperty.Register( "InputTextStyle", typeof(Style), typeof(InputDialog), new PropertyMetadata(null)); public Style InputTextStyle { get { return (Style)GetValue(InputTextStyleProperty); } set { SetValue(InputTextStyleProperty, value); } } public static readonly DependencyProperty InputPasswordStyleProperty = DependencyProperty.Register( "InputPasswordStyle", typeof(Style), typeof(InputDialog), new PropertyMetadata(null)); public Style InputPasswordStyle { get { return (Style)GetValue(InputPasswordStyleProperty); } set { SetValue(InputPasswordStyleProperty, value); } } public static readonly DependencyProperty IsLightDismissEnabledProperty = DependencyProperty.Register( "IsLightDismissEnabled", typeof(bool), typeof(InputDialog), new PropertyMetadata(false)); public bool IsLightDismissEnabled { get { return (bool)GetValue(IsLightDismissEnabledProperty); } set { SetValue(IsLightDismissEnabledProperty, value); } } public static readonly DependencyProperty AwaitsCloseTransitionProperty = DependencyProperty.Register( "AwaitsCloseTransition", typeof(bool), typeof(InputDialog), new PropertyMetadata(true)); public bool AwaitsCloseTransition { get { return (bool)GetValue(AwaitsCloseTransitionProperty); } set { SetValue(AwaitsCloseTransitionProperty, value); } } public static readonly DependencyProperty ButtonsPanelOrientationProperty = DependencyProperty.Register( "ButtonsPanelOrientation", typeof(Orientation), typeof(InputDialog), new PropertyMetadata(Orientation.Horizontal)); public Orientation ButtonsPanelOrientation { get { return (Orientation)GetValue(ButtonsPanelOrientationProperty); } set { SetValue(ButtonsPanelOrientationProperty, value); } } public InputDialog() { DefaultStyleKey = typeof(InputDialog); Visibility = Visibility.Collapsed; } protected override void OnApplyTemplate() { base.OnApplyTemplate(); _layoutRoot = GetTemplateChild(LayoutRootPanelName) as Panel; _contentBorder = GetTemplateChild(ContentBorderName) as Border; _inputTextBox = GetTemplateChild(InputTextBoxName) as TextBox; _inputPasswordBox = GetTemplateChild(InputPasswordBoxName) as PasswordBox; _titleTextBlock = GetTemplateChild(TitleTextBlockName) as TextBlock; _textTextBlock = GetTemplateChild(TextTextBlockName) as TextBlock; _buttonsPanel = GetTemplateChild(ButtonsPanelName) as Panel; _virtualKeyboardSlideStoryboard = GetTemplateChild(VirtualKeyboardSlideStoryBoardName) as Storyboard; _virtualKeyboardSlideAnimation = GetTemplateChild(VirtualKeyboardAnimationName) as DoubleAnimation; _blackStripeTransform = this.GetTemplateChild(BlackStripeTransformName) as TranslateTransform; if (_layoutRoot != null) _layoutRoot.Tapped += OnLayoutRootTapped; if (_inputTextBox != null && _inputPasswordBox != null) { _inputTextBox.Text = InputText; _inputTextBox.IsTextPredictionEnabled = false; _inputTextBox.TextChanged += OnInputTextBoxTextChanged; _inputTextBox.KeyUp += OnInputTextBoxKeyUp; _inputPasswordBox.Password = InputText; _inputPasswordBox.PasswordChanged += OnInputPasswordBoxTextChanged; _inputPasswordBox.KeyUp += OnInputTextBoxKeyUp; if (_usePasswordMode) { _inputTextBox.Visibility = Visibility.Collapsed; _inputTextBox = null; _inputPasswordBox.Visibility = Visibility.Visible; } else { _inputTextBox.Visibility = Visibility.Visible; _inputPasswordBox.Visibility = Visibility.Collapsed; _inputPasswordBox = null; } } if (_contentBorder != null) _contentBorder.Tapped += OnContentBorderTapped; } private void OnGlobalKeyUp(object sender, KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Escape) { DismissDialog(); e.Handled = true; } } private void OnLayoutRootTapped(object sender, TappedRoutedEventArgs e) { _buttons[0].Focus(FocusState.Programmatic); // Hide input panel if (e.OriginalSource == sender && IsLightDismissEnabled) { _dismissTaskSource.TrySetResult(null); e.Handled = true; } } private void OnContentBorderTapped(object sender, TappedRoutedEventArgs e) { if (e.OriginalSource == sender) { _buttons[0].Focus(FocusState.Programmatic); e.Handled = true; } } private void OnInputTextBoxTextChanged(object sender, TextChangedEventArgs e) { InputText = _inputTextBox.Text; } private void OnInputPasswordBoxTextChanged(object sender, RoutedEventArgs e) { InputText = _inputPasswordBox.Password; } public async Task ShowAsync(string title, string text, string defaultText, bool usePasswordMode) { _usePasswordMode = usePasswordMode; if (_shown) { throw new InvalidOperationException("The dialog is already shown."); } Visibility = Visibility.Visible; _shown = true; #if UAP Window window = Window.Current; #elif WINUI Window window = App.Window; #endif window.Content.KeyUp += OnGlobalKeyUp; _dismissTaskSource = new TaskCompletionSource(); _parentPanel = Parent as Panel; _parentContentControl = Parent as ContentControl; if (_parentPanel != null) { _parentPanel.Children.Remove(this); } if (_parentContentControl != null) { _parentContentControl.Content = null; } _dialogPopup = new Popup { Child = this }; if (_parentPanel != null) { _parentPanel.Children.Add(_dialogPopup); _parentPanel.SizeChanged += OnParentSizeChanged; } else if (_parentContentControl != null) { _parentContentControl.Content = _dialogPopup; _parentContentControl.SizeChanged += OnParentSizeChanged; } else { _temporaryParentPanel = GetDescendants(window.Content).OfType().FirstOrDefault(); if (_temporaryParentPanel != null) { _temporaryParentPanel.Children.Add(_dialogPopup); _temporaryParentPanel.SizeChanged += OnParentSizeChanged; } } _dialogPopup.IsOpen = true; await WaitForLayoutUpdateAsync(this); _titleTextBlock.Text = title; _textTextBlock.Text = text; InputText = defaultText; _buttons = new List(); // Button OK Button btnOK = new Button(); if (ButtonStyle != null) btnOK.Style = ButtonStyle; btnOK.Content = "OK"; btnOK.Tag = 0; btnOK.Click += OnButtonClick; btnOK.KeyUp += OnGlobalKeyUp; _buttons.Add(btnOK); _buttonsPanel.Children.Add(btnOK); // Button Cancel Button btnCancel = new Button(); if (ButtonStyle != null) btnCancel.Style = ButtonStyle; btnCancel.Content = "Cancel"; btnCancel.Tag = 1; btnCancel.Click += OnButtonClick; btnCancel.KeyUp += OnGlobalKeyUp; _buttons.Add(btnCancel); _buttonsPanel.Children.Add(btnCancel); #if UAP InputPane inputPane = InputPane.GetForCurrentView(); #elif WINUI InputPane inputPane = InputPaneInterop.GetForWindow(); #endif inputPane.Showing += InputDialog_Showing; inputPane.Hiding += InputDialod_Hiding; if (_inputTextBox != null) _inputTextBox.Focus(FocusState.Programmatic); if (_inputPasswordBox != null) _inputPasswordBox.Focus(FocusState.Programmatic); ResizeLayoutRoot(); // Show dialog await GoToVisualStateAsync(this, _layoutRoot, PopupStatesGroupName, OpenPopupStateName); // Wait for button click string result = await _dismissTaskSource.Task; // Hide dialog if (AwaitsCloseTransition) { await CloseAsync(); } else { #pragma warning disable 4014 CloseAsync(); #pragma warning restore 4014 } inputPane.Showing -= InputDialog_Showing; inputPane.Hiding -= InputDialod_Hiding; window.Content.KeyUp -= OnGlobalKeyUp; return result; } private void InputDialod_Hiding(InputPane sender, InputPaneVisibilityEventArgs args) { TranslateStripeTo(0); } void InputDialog_Showing(Windows.UI.ViewManagement.InputPane sender, Windows.UI.ViewManagement.InputPaneVisibilityEventArgs args) { TranslateStripeTo(args.OccludedRect.Height / -2); } private void TranslateStripeTo(double value) { if (_virtualKeyboardSlideAnimation == null || _virtualKeyboardSlideStoryboard == null) return; _blackStripeTransform.Y = value; //_virtualKeyboardSlideAnimation.To = value; //_virtualKeyboardSlideStoryboard.Begin(); } static async Task WaitForLayoutUpdateAsync(FrameworkElement frameworkElement) { TaskCompletionSource tcs = new TaskCompletionSource(); EventHandler eventHandler = (sender, args) => tcs.SetResult(true); frameworkElement.LayoutUpdated += eventHandler; await tcs.Task; frameworkElement.LayoutUpdated -= eventHandler; } static IEnumerable GetDescendants(DependencyObject start) { Queue queue = new Queue(); Popup popup = start as Popup; if (popup != null) { if (popup.Child != null) { queue.Enqueue(popup.Child); yield return popup.Child; } } else { int count = VisualTreeHelper.GetChildrenCount(start); for (int i = 0; i < count; i++) { DependencyObject child = VisualTreeHelper.GetChild(start, i); queue.Enqueue(child); yield return child; } } while (queue.Count > 0) { DependencyObject parent = queue.Dequeue(); popup = parent as Popup; if (popup != null) { if (popup.Child != null) { queue.Enqueue(popup.Child); yield return popup.Child; } } else { int count = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < count; i++) { DependencyObject child = VisualTreeHelper.GetChild(parent, i); yield return child; queue.Enqueue(child); } } } } private void ResizeLayoutRoot() { FrameworkElement root = _parentPanel ?? _parentContentControl ?? _temporaryParentPanel as FrameworkElement; _layoutRoot.Width = root.ActualWidth; _layoutRoot.Height = root.ActualHeight; } private void OnParentSizeChanged(object sender, SizeChangedEventArgs sizeChangedEventArgs) { ResizeLayoutRoot(); } public async Task CloseAsync() { if (!_shown) { throw new InvalidOperationException("The dialog isn't shown, so it can't be closed."); } await GoToVisualStateAsync(this, _layoutRoot, PopupStatesGroupName, ClosedPopupStateName); _dialogPopup.IsOpen = false; _buttonsPanel.Children.Clear(); foreach (ButtonBase button in _buttons) { button.Click -= OnButtonClick; button.KeyUp -= OnGlobalKeyUp; } _buttons.Clear(); _dialogPopup.Child = null; if (_parentPanel != null) { _parentPanel.Children.Remove(_dialogPopup); _parentPanel.Children.Add(this); _parentPanel.SizeChanged -= OnParentSizeChanged; _parentPanel = null; } if (_parentContentControl != null) { _parentContentControl.Content = this; _parentContentControl.SizeChanged -= OnParentSizeChanged; _parentContentControl = null; } if (_temporaryParentPanel != null) { _temporaryParentPanel.Children.Remove(_dialogPopup); _temporaryParentPanel.SizeChanged -= OnParentSizeChanged; _temporaryParentPanel = null; } _dialogPopup = null; Visibility = Visibility.Collapsed; _shown = false; } private static async Task GoToVisualStateAsync(Control control, FrameworkElement visualStatesHost, string stateGroupName, string stateName) { TaskCompletionSource tcs = new TaskCompletionSource(); Storyboard storyboard = GetStoryboardForVisualState(visualStatesHost, stateGroupName, stateName); if (storyboard != null) { EventHandler eh = null; eh = (s, e) => { storyboard.Completed -= eh; tcs.SetResult(storyboard); }; storyboard.Completed += eh; } VisualStateManager.GoToState(control, stateName, true); if (storyboard == null) { return; } await tcs.Task; } private static Storyboard GetStoryboardForVisualState( FrameworkElement visualStatesHost, string stateGroupName, string stateName) { Storyboard storyboard = null; IList stateGroups = VisualStateManager.GetVisualStateGroups(visualStatesHost); VisualStateGroup stateGroup = null; if (!string.IsNullOrEmpty(stateGroupName)) { stateGroup = stateGroups.FirstOrDefault(g => g.Name == stateGroupName); } VisualState state = null; if (stateGroup != null) { state = stateGroup.States.FirstOrDefault(s => s.Name == stateName); } if (state == null) { foreach (VisualStateGroup group in stateGroups) { state = group.States.FirstOrDefault(s => s.Name == stateName); if (state != null) { break; } } } if (state != null) { storyboard = state.Storyboard; } return storyboard; } private void OnButtonClick(object sender, RoutedEventArgs e) { ButtonBase clickedButton = (ButtonBase)sender; _dismissTaskSource.TrySetResult((int)clickedButton.Tag == 0 ? (_inputTextBox != null ? _inputTextBox.Text : _inputPasswordBox.Password) : null); if (_buttons.Count > 0) { Button button = (Button)_buttons[0]; button.Focus(FocusState.Programmatic); } } private void OnInputTextBoxKeyUp(object sender, KeyRoutedEventArgs e) { if (_inputTextBox != null) InputText = _inputTextBox.Text; if (_inputPasswordBox != null) InputText = _inputPasswordBox.Password; if (e.Key == VirtualKey.Enter) { OnButtonClick(_buttons[0], new RoutedEventArgs()); e.Handled = true; return; } if (e.Key == VirtualKey.Escape) { OnButtonClick(_buttons[1], new RoutedEventArgs()); e.Handled = true; } } private void DismissDialog() { _dismissTaskSource.TrySetResult(null); if (_buttons.Count > 0) { Button button = (Button)_buttons[0]; button.Focus(FocusState.Programmatic); } } } #endregion } ================================================ FILE: Platforms/Input/.UAP/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; using Windows.ApplicationModel.Core; using Windows.Foundation; using Windows.UI.Core; using Windows.UI.Popups; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { private readonly CoreDispatcher _dispatcher; private TaskCompletionSource _tcs; private IAsyncOperation _dialogResult; public ConcreteMessageBox() { _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; } public override Task PlatformShow(string title, string description, List buttons) { // TODO: MessageDialog only supports two buttons if (buttons.Count == 3) throw new NotSupportedException("This platform does not support three buttons"); _tcs = new TaskCompletionSource(); MessageDialog dialog = new MessageDialog(description, title); foreach (string button in buttons) dialog.Commands.Add(new UICommand(button, null, dialog.Commands.Count)); _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { try { // PlatformSetResult will cancel the task, resulting in an exception _dialogResult = dialog.ShowAsync(); IUICommand result = await _dialogResult; if (!_tcs.Task.IsCompleted) _tcs.SetResult(result == null ? null : (int?)result.Id); } catch (TaskCanceledException) { if (!_tcs.Task.IsCompleted) _tcs.SetResult(null); } }); return _tcs.Task; } public override void PlatformCancel(int? result) { // TODO: MessageDialog doesn't hide on Windows Phone 8.1 _tcs.SetResult(result); _dialogResult.Cancel(); } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteMouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { _wndHandle = windowHandle; } public override bool PlatformIsRawInputAvailable() { return false; } public override MouseState PlatformGetState() { IntPtr wndHandle = this._wndHandle; if (wndHandle != IntPtr.Zero) { UAPGameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle); return gameWindow._mouseState; } else return new MouseState(); } public override void PlatformSetPosition(int x, int y) { UAPGameWindow gameWindow = UAPGameWindow.FromHandle(this._wndHandle); MouseState mouseState = gameWindow._mouseState; gameWindow._mouseState = new MouseState( x: x, y: y, scrollWheel: mouseState.ScrollWheelValue, horizontalScrollWheel: mouseState.HorizontalScrollWheelValue, rawX: mouseState.RawX, rawY: mouseState.RawY, leftButton: mouseState.LeftButton, middleButton: mouseState.MiddleButton, rightButton: mouseState.RightButton, xButton1: mouseState.XButton1, xButton2: mouseState.XButton2 ); } public override void PlatformSetCursor(MouseCursor cursor) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.UAP/ConcreteMouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; this._handle = IntPtr.Zero; } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool dispose) { if (dispose) { } base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.UAP/Touch/ConcreteTouchPanel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using WinInput = Windows.Devices.Input; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = 0; bool isConnected = false; bool hasPressure = false; IReadOnlyList pointerDevices = WinInput.PointerDevice.GetPointerDevices(); // Iterate through all pointer devices and find the maximum number of concurrent touches possible foreach (WinInput.PointerDevice pointerDevice in pointerDevices) { maximumTouchCount = Math.Max(maximumTouchCount, (int)pointerDevice.MaxContacts); if (pointerDevice.PointerDeviceType == WinInput.PointerDeviceType.Touch) isConnected = true; } _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = UAPGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteGamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using XInput = SharpDX.XInput; using GPBF = SharpDX.XInput.GamepadButtonFlags; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { const int DeviceNotConnectedHResult = unchecked((int)0x8007048f); const int MaxNumberOfGamePads = 4; internal bool Back; private static readonly XInput.Controller[] _controllers = new[] { new XInput.Controller(XInput.UserIndex.One), new XInput.Controller(XInput.UserIndex.Two), new XInput.Controller(XInput.UserIndex.Three), new XInput.Controller(XInput.UserIndex.Four), }; private readonly bool[] _isConnected = new bool[MaxNumberOfGamePads]; private readonly DateTime[] _lastDisconnectTime = new DateTime[MaxNumberOfGamePads]; private readonly TimeSpan TimeoutTicks = TimeSpan.FromSeconds(1); // XInput Xbox Controller dead zones // Dead zones are slightly different between left and right sticks, this may come from Microsoft usability tests public override float LeftThumbDeadZone { get { return XInput.Gamepad.LeftThumbDeadZone / (float)short.MaxValue; } } public override float RightThumbDeadZone { get { return XInput.Gamepad.RightThumbDeadZone / (float)short.MaxValue; } } public override int PlatformGetMaxNumberOfGamePads() { return MaxNumberOfGamePads; } private GamePadCapabilities GetDefaultCapabilities() { return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } public override GamePadCapabilities PlatformGetCapabilities(int index) { DateTime utcNow = DateTime.UtcNow; // If the device was disconnected then wait for // the timeout to elapsed before we test it again. if (_isConnected[index] == false) { if (_lastDisconnectTime[index] + TimeoutTicks > utcNow) { return GetDefaultCapabilities(); } } // Check to see if the device is connected. bool isControllerConnected = _controllers[index].IsConnected; if (isControllerConnected == false) { // If the device is disconnected retry it after the // timeout period has elapsed to avoid the overhead. _isConnected[index] = false; _lastDisconnectTime[index] = utcNow; return GetDefaultCapabilities(); } else { _isConnected[index] = true; } XInput.Capabilities xCapabilities; try { xCapabilities = _controllers[index].GetCapabilities(XInput.DeviceQueryType.Any); } catch (SharpDX.SharpDXException ex) { if (ex.ResultCode.Code == DeviceNotConnectedHResult) { _isConnected[index] = false; _lastDisconnectTime[index] = utcNow; return GetDefaultCapabilities(); } throw; } //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- gamePadType = XInputToXnaGamePadType(xCapabilities.SubType); XInput.Gamepad xgamepad = xCapabilities.Gamepad; // digital buttons XInput.GamepadButtonFlags xbuttons = xgamepad.Buttons; buttons |= ((xbuttons & GPBF.A) == GPBF.A) ? Buttons.A : (Buttons)0; buttons |= ((xbuttons & GPBF.Back) == GPBF.Back) ? Buttons.Back : (Buttons)0; buttons |= ((xbuttons & GPBF.B) == GPBF.B) ? Buttons.B : (Buttons)0; buttons |= (false) ? Buttons.BigButton : (Buttons)0; // TODO: what IS this? Is it related to GamePadType.BigGamePad? buttons |= ((xbuttons & GPBF.DPadDown) == GPBF.DPadDown) ? Buttons.DPadDown : (Buttons)0; buttons |= ((xbuttons & GPBF.DPadLeft) == GPBF.DPadLeft) ? Buttons.DPadLeft : (Buttons)0; buttons |= ((xbuttons & GPBF.DPadRight) == GPBF.DPadRight) ? Buttons.DPadRight : (Buttons)0; buttons |= ((xbuttons & GPBF.DPadUp) == GPBF.DPadUp) ? Buttons.DPadUp : (Buttons)0; buttons |= ((xbuttons & GPBF.LeftShoulder) == GPBF.LeftShoulder) ? Buttons.LeftShoulder : (Buttons)0; buttons |= ((xbuttons & GPBF.LeftThumb) == GPBF.LeftThumb) ? Buttons.LeftStick : (Buttons)0; buttons |= ((xbuttons & GPBF.RightShoulder) == GPBF.RightShoulder) ? Buttons.RightShoulder : (Buttons)0; buttons |= ((xbuttons & GPBF.RightThumb) == GPBF.RightThumb) ? Buttons.RightStick : (Buttons)0; buttons |= ((xbuttons & GPBF.Start) == GPBF.Start) ? Buttons.Start : (Buttons)0; buttons |= ((xbuttons & GPBF.X) == GPBF.X) ? Buttons.X : (Buttons)0; buttons |= ((xbuttons & GPBF.Y) == GPBF.Y) ? Buttons.Y : (Buttons)0; // analog controls buttons |= (xgamepad.LeftTrigger > 0) ? Buttons.LeftTrigger : (Buttons)0; buttons |= (xgamepad.LeftThumbX != 0) ? Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight : (Buttons)0; buttons |= (xgamepad.LeftThumbY != 0) ? Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp : (Buttons)0; buttons |= (xgamepad.RightTrigger > 0) ? Buttons.RightTrigger : (Buttons)0; buttons |= (xgamepad.RightThumbX != 0) ? Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight : (Buttons)0; buttons |= (xgamepad.RightThumbY != 0) ? Buttons.RightThumbstickDown | Buttons.RightThumbstickUp : (Buttons)0; // vibration #if DIRECTX11_1 bool hasForceFeedback = (xCapabilities.Flags & XInput.CapabilityFlags.FfbSupported) == XInput.CapabilityFlags.FfbSupported; hasLeftVibrationMotor = hasForceFeedback && xCapabilities.Vibration.LeftMotorSpeed > 0; hasRightVibrationMotor = hasForceFeedback && xCapabilities.Vibration.RightMotorSpeed > 0; #else hasLeftVibrationMotor = (xCapabilities.Vibration.LeftMotorSpeed > 0); hasRightVibrationMotor = (xCapabilities.Vibration.RightMotorSpeed > 0); #endif // other isConnected = _controllers[index].IsConnected; hasVoiceSupport = (xCapabilities.Flags & XInput.CapabilityFlags.VoiceSupported) == XInput.CapabilityFlags.VoiceSupported; return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } private GamePadType XInputToXnaGamePadType(XInput.DeviceSubType subType) { switch (subType) { #if DIRECTX11_1 case XInput.DeviceSubType.ArcadePad: Debug.WriteLine("XInput's DeviceSubType.ArcadePad is not supported in XNA"); return GamePadType.Unknown; // TODO: Should this be BigButtonPad? case XInput.DeviceSubType.FlightStick: return GamePadType.FlightStick; case XInput.DeviceSubType.GuitarAlternate: return GamePadType.AlternateGuitar; case XInput.DeviceSubType.GuitarBass: // Note: XNA doesn't distinguish between Guitar and GuitarBass, but // GuitarBass is identical to Guitar in XInput, distinguished only // to help setup for those controllers. return GamePadType.Guitar; case XInput.DeviceSubType.Unknown: return GamePadType.Unknown; #endif case XInput.DeviceSubType.ArcadeStick: return GamePadType.ArcadeStick; case XInput.DeviceSubType.DancePad: return GamePadType.DancePad; case XInput.DeviceSubType.DrumKit: return GamePadType.DrumKit; case XInput.DeviceSubType.Gamepad: return GamePadType.GamePad; case XInput.DeviceSubType.Guitar: return GamePadType.Guitar; case XInput.DeviceSubType.Wheel: return GamePadType.Wheel; default: Debug.WriteLine("unexpected XInput DeviceSubType: {0}", subType.ToString()); return GamePadType.Unknown; } } private GamePadState GetDefaultState() { GamePadButtons buttons = new GamePadButtons((Back) ? Buttons.Back : 0); return base.CreateGamePadState(default(GamePadThumbSticks), default(GamePadTriggers), buttons, default(GamePadDPad), isConnected: false); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { DateTime utcNow = DateTime.UtcNow; // If the device was disconnected then wait for // the timeout to elapsed before we test it again. if (_isConnected[index] == false) { if (_lastDisconnectTime[index] + TimeoutTicks > utcNow) { return GetDefaultState(); } } int packetNumber = 0; // Try to get the controller state. XInput.Gamepad gamepad = new XInput.Gamepad(); try { XInput.State xistate; bool isControllerConnected = _controllers[index].GetState(out xistate); if (isControllerConnected == false) { _isConnected[index] = false; } else { _isConnected[index] = true; } packetNumber = xistate.PacketNumber; gamepad = xistate.Gamepad; } catch (Exception) { } // If the device is disconnected retry it after the // timeout period has elapsed to avoid the overhead. if (_isConnected[index] == false) { _lastDisconnectTime[index] = utcNow; return GetDefaultState(); } GamePadThumbSticks thumbSticks = base.CreateGamePadThumbSticks( leftPosition: new Vector2(gamepad.LeftThumbX, gamepad.LeftThumbY) / (float)short.MaxValue, rightPosition: new Vector2(gamepad.RightThumbX, gamepad.RightThumbY) / (float)short.MaxValue, leftDeadZoneMode: leftDeadZoneMode, rightDeadZoneMode: rightDeadZoneMode); GamePadTriggers triggers = new GamePadTriggers( leftTrigger: gamepad.LeftTrigger / (float)byte.MaxValue, rightTrigger: gamepad.RightTrigger / (float)byte.MaxValue); GamePadDPad dpadState = new GamePadDPad( upValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadUp), downValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadDown), leftValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadLeft), rightValue: ConvertToButtonState(gamepad.Buttons, XInput.GamepadButtonFlags.DPadRight)); GamePadButtons buttons = ConvertToButtons( buttonFlags: gamepad.Buttons, leftTrigger: gamepad.LeftTrigger, rightTrigger: gamepad.RightTrigger); return base.CreateGamePadState( thumbSticks: thumbSticks, triggers: triggers, buttons: buttons, dPad: dpadState, packetNumber: packetNumber); } private ButtonState ConvertToButtonState( XInput.GamepadButtonFlags buttonFlags, XInput.GamepadButtonFlags desiredButton) { return ((buttonFlags & desiredButton) == desiredButton) ? ButtonState.Pressed : ButtonState.Released; } private Buttons AddButtonIfPressed( XInput.GamepadButtonFlags buttonFlags, XInput.GamepadButtonFlags xInputButton, Buttons xnaButton) { ButtonState buttonState = ((buttonFlags & xInputButton) == xInputButton) ? ButtonState.Pressed : ButtonState.Released; return buttonState == ButtonState.Pressed ? xnaButton : 0; } private GamePadButtons ConvertToButtons(XInput.GamepadButtonFlags buttonFlags, byte leftTrigger, byte rightTrigger) { Buttons ret = (Buttons)0; ret |= AddButtonIfPressed(buttonFlags, GPBF.A, Buttons.A); ret |= AddButtonIfPressed(buttonFlags, GPBF.B, Buttons.B); ret |= AddButtonIfPressed(buttonFlags, GPBF.Back, Buttons.Back); ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadDown, Buttons.DPadDown); ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadLeft, Buttons.DPadLeft); ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadRight, Buttons.DPadRight); ret |= AddButtonIfPressed(buttonFlags, GPBF.DPadUp, Buttons.DPadUp); ret |= AddButtonIfPressed(buttonFlags, GPBF.LeftShoulder, Buttons.LeftShoulder); ret |= AddButtonIfPressed(buttonFlags, GPBF.RightShoulder, Buttons.RightShoulder); ret |= AddButtonIfPressed(buttonFlags, GPBF.LeftThumb, Buttons.LeftStick); ret |= AddButtonIfPressed(buttonFlags, GPBF.RightThumb, Buttons.RightStick); ret |= AddButtonIfPressed(buttonFlags, GPBF.Start, Buttons.Start); ret |= AddButtonIfPressed(buttonFlags, GPBF.X, Buttons.X); ret |= AddButtonIfPressed(buttonFlags, GPBF.Y, Buttons.Y); if (leftTrigger >= XInput.Gamepad.TriggerThreshold) ret |= Buttons.LeftTrigger; if (rightTrigger >= XInput.Gamepad.TriggerThreshold) ret |= Buttons.RightTrigger; // Check for the hardware back button. if (Back) ret |= Buttons.Back; return new GamePadButtons(ret); } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { DateTime utcNow = DateTime.UtcNow; if (_isConnected[index] == false) { if (_lastDisconnectTime[index] + TimeoutTicks > utcNow) return false; bool isControllerConnected = _controllers[index].IsConnected; if (isControllerConnected == false) { _lastDisconnectTime[index] = utcNow; return false; } else { _isConnected[index] = true; } } SharpDX.Result result; try { XInput.Vibration vibration = new XInput.Vibration(); vibration.LeftMotorSpeed = (ushort)(leftMotor * ushort.MaxValue); vibration.RightMotorSpeed = (ushort)(rightMotor * ushort.MaxValue); result = _controllers[index].SetVibration(vibration); } catch (SharpDX.SharpDXException ex) { if (ex.ResultCode.Code == DeviceNotConnectedHResult) { _isConnected[index] = false; _lastDisconnectTime[index] = utcNow; return false; } throw; } return result == SharpDX.Result.Ok; } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using XInput = SharpDX.XInput; using GPBF = SharpDX.XInput.GamepadButtonFlags; namespace Microsoft.Xna.Platform.Input { internal class XInputGamePadDevice : GamePadDevice { public XInputGamePadDevice() : base() { } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteJoystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { return -1; } } public override JoystickCapabilities PlatformGetCapabilities(int index) { return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteKeyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private readonly Keys[] DefinedKeyCodes; private readonly byte[] _keyState = new byte[256]; bool _isCapsLocked; bool _isNumLocked; private readonly List _keys = new List(10); private bool _isActive = true; [DllImport("user32.dll")] private static extern bool GetKeyboardState(byte[] lpKeyState); public ConcreteKeyboard() { Array definedKeys = Enum.GetValues(typeof(Keys)); List keyCodes = new List(Math.Min(definedKeys.Length, 255)); foreach (object key in definedKeys) { int keyCode = (int)key; if ((keyCode >= 1) && (keyCode <= 255)) keyCodes.Add((Keys)keyCode); } DefinedKeyCodes = keyCodes.ToArray(); } public override KeyboardState PlatformGetState() { if (_isActive == false) { // return the cleared _keys, if _isActive == false // TODO: should we return false for toggled keys? _isCapsLocked = Console.CapsLock; _isNumLocked = Console.NumberLock; return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked); } bool isKeyStateValid = GetKeyboardState(_keyState); if (isKeyStateValid == false) { // return the previous state of _keys, if GetKeyboardState fails // TODO: should we return the previous state of toggled keys? _isCapsLocked = Console.CapsLock; _isNumLocked = Console.NumberLock; return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked); } // remove released keys _keys.RemoveAll((key) => !IsKeyPressed(key)); // add pressed keys foreach (Keys key in DefinedKeyCodes) { if (!IsKeyPressed(key)) continue; if (!_keys.Contains(key)) _keys.Add(key); } // TODO: should we get toggled keys from IsKeyToggled(...)? _isCapsLocked = Console.CapsLock; _isNumLocked = Console.NumberLock; return base.CreateKeyboardState(_keys, _isCapsLocked, _isNumLocked); } private bool IsKeyPressed(Keys key) { return ((_keyState[(int)key] & 0x80) != 0); } private bool IsKeyToggled(Keys key) { return ((_keyState[(int)key] & 0x01) != 0); } internal void SetActive(bool isActive) { _isActive = isActive; // clear _keys, if _isActive == false if (_isActive == false) _keys.Clear(); } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Drawing; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { private Form _dialog; private TaskCompletionSource _tcs; public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { _tcs = new TaskCompletionSource(); Form parent = Application.OpenForms[0]; parent.Invoke(new MethodInvoker(() => { Form dialog = _dialog = new Form(); dialog.Text = title; dialog.FormBorderStyle = FormBorderStyle.FixedDialog; dialog.MinimizeBox = false; dialog.MaximizeBox = false; dialog.ControlBox = false; dialog.StartPosition = FormStartPosition.CenterParent; Label desc = new Label(); desc.Text = description; desc.Parent = dialog; desc.Top = 25; desc.TextAlign = ContentAlignment.MiddleCenter; desc.AutoSize = true; desc.Margin = new Padding(25, 0, 25, 0); desc.Left = (desc.Parent.ClientSize.Width - desc.Width) / 2; TextBox input = new TextBox(); input.Text = defaultText; input.Parent = dialog; input.Top = desc.Bottom + 15; input.UseSystemPasswordChar = usePasswordMode; input.AutoSize = true; input.Margin = new Padding(25, 0, 25, 0); input.Left = 25; input.Width = input.Parent.ClientSize.Width - 25; input.TabIndex = 0; FlowLayoutPanel bgroup = new FlowLayoutPanel(); bgroup.FlowDirection = FlowDirection.LeftToRight; bgroup.Parent = dialog; bgroup.Top = input.Bottom + 15; bgroup.AutoSize = true; bgroup.Margin = new Padding(15); bgroup.AutoSizeMode = AutoSizeMode.GrowAndShrink; Button acceptButton = new Button(); acceptButton.Text = "&Ok"; acceptButton.DialogResult = DialogResult.OK; acceptButton.Parent = bgroup; acceptButton.TabIndex = 1; dialog.AcceptButton = acceptButton; Button cancelButton = new Button(); cancelButton.Text = "&Cancel"; cancelButton.DialogResult = DialogResult.Cancel; cancelButton.Parent = bgroup; cancelButton.TabIndex = 2; dialog.CancelButton = cancelButton; bgroup.Left = (bgroup.Parent.ClientSize.Width - bgroup.Width) / 2; dialog.AutoSizeMode = AutoSizeMode.GrowAndShrink; dialog.AutoSize = true; DialogResult result = dialog.ShowDialog(parent); _dialog = null; if (_tcs.Task.IsCompleted) return; if (result == DialogResult.OK) _tcs.SetResult(input.Text); else _tcs.SetResult(null); })); return _tcs.Task; } public override void PlatformCancel(string result) { if (_dialog != null) _dialog.Close(); _tcs.SetResult(result); } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Drawing; using System.Threading.Tasks; using System.Windows.Forms; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { private Form _dialog; private TaskCompletionSource _tcs; public override Task PlatformShow(string title, string description, List buttons) { _tcs = new TaskCompletionSource(); Form parent = Application.OpenForms[0]; parent.Invoke(new MethodInvoker(() => { Form dialog = _dialog = new Form(); dialog.Text = title; dialog.FormBorderStyle = FormBorderStyle.FixedDialog; dialog.MinimizeBox = false; dialog.MaximizeBox = false; dialog.ControlBox = false; dialog.StartPosition = FormStartPosition.CenterParent; Label desc = new Label(); desc.Text = description; desc.Parent = dialog; desc.Top = 25; desc.TextAlign = ContentAlignment.MiddleCenter; desc.AutoSize = true; desc.Margin = new Padding(25, 0, 25, 0); desc.Left = (desc.Parent.ClientSize.Width - desc.Width) / 2; FlowLayoutPanel bgroup = new FlowLayoutPanel(); bgroup.FlowDirection = FlowDirection.LeftToRight; bgroup.Parent = dialog; bgroup.Top = desc.Bottom + 25; bgroup.AutoSize = true; bgroup.Margin = new Padding(15); bgroup.AutoSizeMode = AutoSizeMode.GrowAndShrink; for (int i = 0; i < buttons.Count; i++) { string btext = buttons[i]; Button button = new Button(); button.Text = btext; button.DialogResult = (DialogResult)i+1; button.Parent = bgroup; if (i == 0) dialog.AcceptButton = button; } bgroup.Left = (bgroup.Parent.ClientSize.Width - bgroup.Width) / 2; dialog.AutoSizeMode = AutoSizeMode.GrowAndShrink; dialog.AutoSize = true; int result = (int)dialog.ShowDialog(parent); _dialog = null; if (_tcs.Task.IsCompleted) return; _tcs.SetResult(result-1); })); return _tcs.Task; } public override void PlatformCancel(int? result) { if (_dialog != null) _dialog.Close(); _tcs.SetResult(result); } } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteMouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using WinForms = System.Windows.Forms; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; [DllImportAttribute("user32.dll", EntryPoint = "SetCursorPos")] [return: MarshalAsAttribute(UnmanagedType.Bool)] private static extern bool SetCursorPos(int X, int Y); [StructLayout(LayoutKind.Sequential)] internal struct POINTSTRUCT { public int X; public int Y; } [DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)] [return: MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] internal static extern bool GetCursorPos(out POINTSTRUCT pt); [DllImport("user32.dll", ExactSpelling=true, CharSet=CharSet.Auto)] internal static extern int MapWindowPoints(HandleRef hWndFrom, HandleRef hWndTo, out POINTSTRUCT pt, int cPoints); private static WinForms.Control _window; private static MouseInputWnd _mouseInputWnd = new MouseInputWnd(); public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { // Unregister old window if (_mouseInputWnd.Handle != IntPtr.Zero) _mouseInputWnd.ReleaseHandle(); _wndHandle = windowHandle; _window = WinForms.Control.FromHandle(windowHandle); _mouseInputWnd.AssignHandle(windowHandle); } public override bool PlatformIsRawInputAvailable() { return _mouseInputWnd.IsRawInputAvailable; } public override MouseState PlatformGetState() { POINTSTRUCT pos; GetCursorPos(out pos); // map screen position to window position. If no window is set return the screen position. if (_window != null) MapWindowPoints(new HandleRef(null, IntPtr.Zero), new HandleRef(_window, _window.Handle), out pos, 1); Point clientPos = new Point(pos.X, pos.Y); WinForms.MouseButtons buttons = WinForms.Control.MouseButtons; return new MouseState( clientPos.X, clientPos.Y, _mouseInputWnd.ScrollWheelValue, _mouseInputWnd.HorizontalScrollWheelValue, _mouseInputWnd.RawX, _mouseInputWnd.RawY, (buttons & WinForms.MouseButtons.Left) == WinForms.MouseButtons.Left ? ButtonState.Pressed : ButtonState.Released, (buttons & WinForms.MouseButtons.Middle) == WinForms.MouseButtons.Middle ? ButtonState.Pressed : ButtonState.Released, (buttons & WinForms.MouseButtons.Right) == WinForms.MouseButtons.Right ? ButtonState.Pressed : ButtonState.Released, (buttons & WinForms.MouseButtons.XButton1) == WinForms.MouseButtons.XButton1 ? ButtonState.Pressed : ButtonState.Released, (buttons & WinForms.MouseButtons.XButton2) == WinForms.MouseButtons.XButton2 ? ButtonState.Pressed : ButtonState.Released ); } public override void PlatformSetPosition(int x, int y) { System.Drawing.Point pt = new System.Drawing.Point(x, y); // map window position to screen position. If no window is set assume input was in screen position. if (_window != null) pt = _window.PointToScreen(pt); SetCursorPos(pt.X, pt.Y); } public override void PlatformSetCursor(MouseCursor cursor) { if (_window != null) { _window.Cursor = ((IPlatformMouseCursor)cursor).GetStrategy().WinFormsCursor; } } #region Nested class MouseInputWnd /// /// Subclass WindowHandle to read WM_MOUSEHWHEEL messages /// class MouseInputWnd : System.Windows.Forms.NativeWindow { const int WM_MOUSEMOVE = 0x0200; const int WM_LBUTTONDOWN = 0x0201; const int WM_LBUTTONUP = 0x0202; const int WM_RBUTTONDOWN = 0x0204; const int WM_RBUTTONUP = 0x0205; const int WM_MBUTTONDOWN = 0x0207; const int WM_MBUTTONUP = 0x0208; const int WM_MOUSEWHEEL = 0x020A; const int WM_MOUSEHWHEEL = 0x020E; const int WM_INPUT = 0x00FF; public int ScrollWheelValue = 0; public int HorizontalScrollWheelValue = 0; public int RawX = 0; public int RawY = 0; protected override void WndProc(ref WinForms.Message m) { switch (m.Msg) { case WM_MOUSEWHEEL: short delta = (short)(((ulong)m.WParam >> 16) & 0xffff); ScrollWheelValue += delta; break; case WM_MOUSEHWHEEL: short deltaH = (short)(((ulong)m.WParam >> 16) & 0xffff); HorizontalScrollWheelValue += deltaH; break; case WM_INPUT: HandleRawInput(ref m); break; } base.WndProc(ref m); } internal bool IsRawInputAvailable { get; private set; } protected override void OnHandleChange() { base.OnHandleChange(); // Register RawInput if (Handle != IntPtr.Zero) { RAWINPUTDEVICE rid; rid.UsagePage = 0x01; rid.Usage = 0x02; rid.Flags = RIDEV_INPUTSINK; rid.hwndTarget = Handle; bool hr = RegisterRawInputDevices(ref rid, 1, (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICE))); IsRawInputAvailable = hr; } } public override void ReleaseHandle() { // Unregister RawInput RAWINPUTDEVICE rid; rid.UsagePage = 0x01; rid.Usage = 0x02; rid.Flags = RIDEV_REMOVE; rid.hwndTarget = IntPtr.Zero; bool hr = RegisterRawInputDevices(ref rid, 1, (uint)Marshal.SizeOf(typeof(RAWINPUTDEVICE))); IsRawInputAvailable = false; base.ReleaseHandle(); } [StructLayout(LayoutKind.Sequential)] internal struct RAWINPUTDEVICE { internal ushort UsagePage; internal ushort Usage; internal int Flags; internal IntPtr hwndTarget; } [DllImport("user32.dll", SetLastError = true)] static extern bool RegisterRawInputDevices(ref RAWINPUTDEVICE pRawInputDevice, uint numberDevices, uint size); private const int RIDEV_REMOVE = 0x00000001; private const int RIDEV_NOLEGACY = 0x00000030; private const int RIDEV_INPUTSINK = 0x00000100; [StructLayout(LayoutKind.Sequential)] internal struct RAWMOUSE { public ushort Flags; public ushort ButtonFlags; public ushort ButtonData; public uint RawButtons; public int LastX; public int LastY; public uint ExtraInformation; } [StructLayout(LayoutKind.Explicit)] public struct RAWINPUTDATA { [FieldOffset(0)] public RAWMOUSE mouse; //[FieldOffset(0)] //internal Rawkeyboard keyboard; //[FieldOffset(0)] //internal Rawhid hid; } [StructLayout(LayoutKind.Sequential)] public struct RAWINPUTHEADER { public int Type; // Type of raw input (RIM_TYPEHID 2, RIM_TYPEKEYBOARD 1, RIM_TYPEMOUSE 0) public int Size; // Size in bytes of the entire input packet of data. This includes RAWINPUT plus possible extra input reports in the RAWHID variable length array. public IntPtr hDevice; // A handle to the device generating the raw input data. public IntPtr wParam; // RIM_INPUT 0 if input occurred while application was in the foreground else RIM_INPUTSINK 1 if it was not. } [StructLayout(LayoutKind.Sequential)] public struct RAWINPUT { public RAWINPUTHEADER header; // 64 bit header size is 24 32 bit the header size is 16 public RAWINPUTDATA data; // Creating the rest in a struct allows the header size to align correctly for 32 or 64 bit } [DllImport("User32.dll")] internal static extern int GetRawInputData( IntPtr hRawInput, uint command, IntPtr pData, ref uint size, int sizeHeader); private const uint RID_INPUT = 0x10000003; private const uint RID_HEADER = 0x10000005; private const uint RIM_TYPEMOUSE = 0x00; private const uint RIM_TYPEKEYBOARD = 0x01; private const uint RIM_TYPEHID = 0x02; private const uint MOUSE_MOVE_RELATIVE = 0x00; private const uint MOUSE_MOVE_ABSOLUTE = 0x01; private const uint MOUSE_VIRTUAL_DESKTOP = 0x02; private const uint MOUSE_ATTRIBUTES_CHANGED = 0x04; private const uint RI_MOUSE_WHEEL = 0x0400; private unsafe void HandleRawInput(ref WinForms.Message message) { int hr; uint dataSize = 0; hr = GetRawInputData(message.LParam, RID_INPUT, IntPtr.Zero, ref dataSize, sizeof(RAWINPUTHEADER)); // the RAWINPUT struct we pass in as &ri should be the same size as the available data size if (dataSize != sizeof(RAWINPUT)) return; RAWINPUT ri; hr = GetRawInputData(message.LParam, RID_INPUT, new IntPtr(&ri), ref dataSize, sizeof(RAWINPUTHEADER)); if (ri.header.Type == RIM_TYPEMOUSE) { RAWMOUSE* mi = &ri.data.mouse; if ((mi->Flags & MOUSE_MOVE_ABSOLUTE) != 0) { // handle absolute position here } else // MOUSE_MOVE_RELATIVE { unchecked { RawX += mi->LastX; RawY += mi->LastY; } } //if ((mi->ButtonFlags & RI_MOUSE_WHEEL) != 0) //{ // // handle wheel here. // // Wheel delta is in mi->ButtonData //} } return; } } #endregion Nested class MouseInputWnd } } ================================================ FILE: Platforms/Input/.WindowsDX/ConcreteMouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Input; using WinFormsCursor = System.Windows.Forms.Cursor; using WinFormsCursors = System.Windows.Forms.Cursors; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { WinFormsCursor _winFormsCursor; internal WinFormsCursor WinFormsCursor { get { return _winFormsCursor; } } public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; this._handle = IntPtr.Zero; _winFormsCursor = CursorTypeToWinFormsCursor(cursorType); } private WinFormsCursor CursorTypeToWinFormsCursor(MouseCursorStrategy.MouseCursorType cursorType) { switch (cursorType) { case MouseCursorStrategy.MouseCursorType.Arrow: return WinFormsCursors.Arrow; case MouseCursorStrategy.MouseCursorType.IBeam: return WinFormsCursors.IBeam; case MouseCursorStrategy.MouseCursorType.Wait: return WinFormsCursors.WaitCursor; case MouseCursorStrategy.MouseCursorType.Crosshair: return WinFormsCursors.Cross; case MouseCursorStrategy.MouseCursorType.WaitArrow: return WinFormsCursors.AppStarting; case MouseCursorStrategy.MouseCursorType.SizeNWSE: return WinFormsCursors.SizeNWSE; case MouseCursorStrategy.MouseCursorType.SizeNESW: return WinFormsCursors.SizeNESW; case MouseCursorStrategy.MouseCursorType.SizeWE: return WinFormsCursors.SizeWE; case MouseCursorStrategy.MouseCursorType.SizeNS: return WinFormsCursors.SizeNS; case MouseCursorStrategy.MouseCursorType.SizeAll: return WinFormsCursors.SizeAll; case MouseCursorStrategy.MouseCursorType.No: return WinFormsCursors.No; case MouseCursorStrategy.MouseCursorType.Hand: return WinFormsCursors.Hand; default: throw new InvalidOperationException("cursorType"); } } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { // convert ABGR to ARGB for (int i = 0; i < data.Length; i += 4) { byte r = data[i]; data[i + 0] = data[i + 2]; data[i + 2] = r; } GCHandle gcHandle = GCHandle.Alloc(data, GCHandleType.Pinned); try { IntPtr dataPtr = gcHandle.AddrOfPinnedObject(); using (Bitmap bitmap = new Bitmap(w, h, h * 4, PixelFormat.Format32bppArgb, dataPtr)) { IconInfo iconInfo = default(IconInfo); IntPtr hIcon = bitmap.GetHicon(); GetIconInfo(hIcon, out iconInfo); iconInfo.xHotspot = originx; iconInfo.yHotspot = originy; iconInfo.fIcon = false; IntPtr handle = CreateIconIndirect(ref iconInfo); DeleteObject(iconInfo.ColorBitmap); DeleteObject(iconInfo.MaskBitmap); DestroyIcon(hIcon); this._cursorType = MouseCursorStrategy.MouseCursorType.User; this._handle = handle; _winFormsCursor = new WinFormsCursor(handle); } } finally { gcHandle.Free(); } } protected override void Dispose(bool dispose) { if (dispose) { if (_winFormsCursor != null) _winFormsCursor.Dispose(); _winFormsCursor = null; } if (this.Handle != IntPtr.Zero) DestroyIcon(this.Handle); base.Dispose(dispose); } [StructLayout(LayoutKind.Sequential)] private struct IconInfo { public bool fIcon; public int xHotspot; public int yHotspot; public IntPtr MaskBitmap; public IntPtr ColorBitmap; }; [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetIconInfo(IntPtr hIcon, out IconInfo pIconInfo); [DllImport("gdi32.dll")] static extern bool DeleteObject(IntPtr hObject); [DllImport("user32.dll")] static extern IntPtr CreateIconIndirect([In] ref IconInfo iconInfo); [DllImport("user32.dll")] static extern bool DestroyIcon(IntPtr handle); } } ================================================ FILE: Platforms/Input/.WindowsDX/Touch/ConcreteTouchPanel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = GetSystemMetrics(SM_MAXIMUMTOUCHES); bool isConnected = (maximumTouchCount > 0); bool hasPressure = false; _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = WinFormsGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } const int SM_MAXIMUMTOUCHES = 95; [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)] static extern int GetSystemMetrics(int nIndex); } } ================================================ FILE: Platforms/Input/.iOS/ConcreteGamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using GameController; namespace Microsoft.Xna.Platform.Input { // TODO: move GamePadDevice to Framework.Input library public abstract class GamePadDevice { public GamePadCapabilities Capabilities; public GamePadDevice() { } } public sealed class ConcreteGamePad : GamePadStrategy { const int MaxNumberOfGamePads = 4; // Default & SDL Xbox Controller dead zones // Based on the XInput constants public override float LeftThumbDeadZone { get { return 0.24f; } } public override float RightThumbDeadZone { get { return 0.265f; } } public override int PlatformGetMaxNumberOfGamePads() { return MaxNumberOfGamePads; } private GamePadCapabilities GetDefaultCapabilities() { return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } public override GamePadCapabilities PlatformGetCapabilities(int index) { GCControllerPlayerIndex gcindex = (GCControllerPlayerIndex)index; GCController gccontroller = FindGCController(gcindex); if (gccontroller == null) return GetDefaultCapabilities(); return GetCapabilities(gccontroller); } private GamePadCapabilities GetCapabilities(GCController controller) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- //All iOS controllers have these basics isConnected = false; gamePadType = GamePadType.GamePad; if (controller.ExtendedGamepad != null) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.Back; buttons |= Buttons.Start; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; buttons |= Buttons.LeftTrigger; buttons |= Buttons.RightTrigger; buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight; buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp; buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight; buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp; } else if (controller.Gamepad != null) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; } return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { GCControllerPlayerIndex gcindex = (GCControllerPlayerIndex)index; GCController gccontroller = FindGCController(gcindex); if (gccontroller == null) { return base.CreateGamePadState( base.CreateGamePadThumbSticks(Vector2.Zero, Vector2.Zero, leftDeadZoneMode, rightDeadZoneMode), new GamePadTriggers(0, 0), new GamePadButtons((Buttons)0), new GamePadDPad(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released), isConnected: false); } Buttons buttons = 0; bool connected = false; ButtonState Up = ButtonState.Released; ButtonState Down = ButtonState.Released; ButtonState Left = ButtonState.Released; ButtonState Right = ButtonState.Released; Vector2 leftThumbStickPosition = Vector2.Zero; Vector2 rightThumbStickPosition = Vector2.Zero; float leftTriggerValue = 0; float rightTriggerValue = 0; connected = true; if (gccontroller.ExtendedGamepad != null) { if (gccontroller.ExtendedGamepad.ButtonA.IsPressed) buttons |= Buttons.A; if (gccontroller.ExtendedGamepad.ButtonB.IsPressed) buttons |= Buttons.B; if (gccontroller.ExtendedGamepad.ButtonX.IsPressed) buttons |= Buttons.X; if (gccontroller.ExtendedGamepad.ButtonY.IsPressed) buttons |= Buttons.Y; if (gccontroller.ExtendedGamepad.LeftShoulder.IsPressed) buttons |= Buttons.LeftShoulder; if (gccontroller.ExtendedGamepad.RightShoulder.IsPressed) buttons |= Buttons.RightShoulder; if (gccontroller.ExtendedGamepad.LeftTrigger.IsPressed) buttons |= Buttons.LeftTrigger; if (gccontroller.ExtendedGamepad.RightTrigger.IsPressed) buttons |= Buttons.RightTrigger; if (gccontroller.ExtendedGamepad.ButtonMenu.IsPressed) buttons |= Buttons.Start; if (gccontroller.ExtendedGamepad.ButtonOptions != null && gccontroller.ExtendedGamepad.ButtonOptions.IsPressed) buttons |= Buttons.Back; if (gccontroller.ExtendedGamepad.DPad.Up.IsPressed) { Up = ButtonState.Pressed; buttons |= Buttons.DPadUp; } if (gccontroller.ExtendedGamepad.DPad.Down.IsPressed) { Down = ButtonState.Pressed; buttons |= Buttons.DPadDown; } if (gccontroller.ExtendedGamepad.DPad.Left.IsPressed) { Left = ButtonState.Pressed; buttons |= Buttons.DPadLeft; } if (gccontroller.ExtendedGamepad.DPad.Right.IsPressed) { Right = ButtonState.Pressed; buttons |= Buttons.DPadRight; } leftThumbStickPosition.X = gccontroller.ExtendedGamepad.LeftThumbstick.XAxis.Value; leftThumbStickPosition.Y = gccontroller.ExtendedGamepad.LeftThumbstick.YAxis.Value; rightThumbStickPosition.X = gccontroller.ExtendedGamepad.RightThumbstick.XAxis.Value; rightThumbStickPosition.Y = gccontroller.ExtendedGamepad.RightThumbstick.YAxis.Value; leftTriggerValue = gccontroller.ExtendedGamepad.LeftTrigger.Value; rightTriggerValue = gccontroller.ExtendedGamepad.RightTrigger.Value; } else if (gccontroller.Gamepad != null) { if (gccontroller.Gamepad.ButtonA.IsPressed) buttons |= Buttons.A; if (gccontroller.Gamepad.ButtonB.IsPressed) buttons |= Buttons.B; if (gccontroller.Gamepad.ButtonX.IsPressed) buttons |= Buttons.X; if (gccontroller.Gamepad.ButtonY.IsPressed) buttons |= Buttons.Y; if (gccontroller.Gamepad.DPad.Up.IsPressed) { Up = ButtonState.Pressed; buttons |= Buttons.DPadUp; } if (gccontroller.Gamepad.DPad.Down.IsPressed) { Down = ButtonState.Pressed; buttons |= Buttons.DPadDown; } if (gccontroller.Gamepad.DPad.Left.IsPressed) { Left = ButtonState.Pressed; buttons |= Buttons.DPadLeft; } if (gccontroller.Gamepad.DPad.Right.IsPressed) { Right = ButtonState.Pressed; buttons |= Buttons.DPadRight; } } GamePadState state = base.CreateGamePadState( base.CreateGamePadThumbSticks(leftThumbStickPosition, rightThumbStickPosition, leftDeadZoneMode, rightDeadZoneMode), new GamePadTriggers(leftTriggerValue, rightTriggerValue), new GamePadButtons(buttons), new GamePadDPad(Up, Down, Left, Right), isConnected: connected); return state; } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { return false; } private GCController FindGCController(GCControllerPlayerIndex gcindex) { GCController[] controllers = GCController.Controllers; // index is used ? foreach (GCController controller in controllers) { if ((long)controller.PlayerIndex == (long)gcindex) return controller; } // assing index foreach (GCController controller in controllers) { if ((long)controller.PlayerIndex == (long)GCControllerPlayerIndex.Unset) { #if XAMARINIOS controller.PlayerIndex = (System.nint)(long)gcindex; #else controller.PlayerIndex = gcindex; #endif return controller; } } return null; } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteGamePad.tvOS.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using GameController; using UIKit; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteGamePad : GamePadStrategy { internal bool MenuPressed = false; public override int PlatformGetMaxNumberOfGamePads() { return 4; } private bool IndexIsUsed(GCControllerPlayerIndex index) { foreach (var ctrl in GCController.Controllers) if (ctrl.PlayerIndex==(int)index) return true; return false; } private void AssingIndex(GCControllerPlayerIndex index) { if (IndexIsUsed(index)) return; foreach (var controller in GCController.Controllers) { if (controller.PlayerIndex == (int)index) break; if (controller.PlayerIndex == (int)GCControllerPlayerIndex.Unset) { controller.PlayerIndex = (int)index; break; } } } public override GamePadCapabilities PlatformGetCapabilities(int index) { GCControllerPlayerIndex ind = (GCControllerPlayerIndex)index; AssingIndex(ind); foreach (var controller in GCController.Controllers) { if (controller == null) continue; if (controller.PlayerIndex == (int)ind) return GetCapabilities(controller); } return base.CreateGamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } private GamePadCapabilities GetCapabilities(GCController controller) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- //All iOS controllers have these basics isConnected = false; gamePadType = GamePadType.GamePad; if (controller.ExtendedGamepad != null) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; buttons |= Buttons.Back; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; buttons |= Buttons.LeftTrigger; buttons |= Buttons.RightTrigger; buttons |= Buttons.LeftThumbstickLeft | Buttons.LeftThumbstickRight; buttons |= Buttons.LeftThumbstickDown | Buttons.LeftThumbstickUp; buttons |= Buttons.RightThumbstickLeft | Buttons.RightThumbstickRight; buttons |= Buttons.RightThumbstickDown | Buttons.RightThumbstickUp; } else if (controller.Gamepad != null) { buttons |= Buttons.A; buttons |= Buttons.B; buttons |= Buttons.X; buttons |= Buttons.Y; capabilities.HasBackButton = true; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; buttons |= Buttons.LeftShoulder; buttons |= Buttons.RightShoulder; } else if (controller.MicroGamepad != null) { buttons |= Buttons.A; buttons |= Buttons.X; capabilities.HasBackButton = true; buttons |= Buttons.DPadUp; buttons |= Buttons.DPadDown; buttons |= Buttons.DPadLeft; buttons |= Buttons.DPadRight; } return base.CreateGamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } public override GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { GCControllerPlayerIndex ind = (GCControllerPlayerIndex)index; List buttons = new List(); bool connected = false; ButtonState Up = ButtonState.Released; ButtonState Down = ButtonState.Released; ButtonState Left = ButtonState.Released; ButtonState Right = ButtonState.Released; Vector2 leftThumbStickPosition = Vector2.Zero; Vector2 rightThumbStickPosition = Vector2.Zero; float leftTriggerValue = 0; float rightTriggerValue = 0; AssingIndex(ind); foreach (var controller in GCController.Controllers) { if (controller == null) continue; if (controller.PlayerIndex != (int)ind) continue; connected = true; if (MenuPressed) { buttons.Add(Buttons.Back); MenuPressed = false; } if (controller.ExtendedGamepad != null) { if (controller.ExtendedGamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A)) buttons.Add(Buttons.A); if (controller.ExtendedGamepad.ButtonB.IsPressed == true && !buttons.Contains(Buttons.B)) buttons.Add(Buttons.B); if (controller.ExtendedGamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X)) buttons.Add(Buttons.X); if (controller.ExtendedGamepad.ButtonY.IsPressed == true && !buttons.Contains(Buttons.Y)) buttons.Add(Buttons.Y); if (controller.ExtendedGamepad.LeftShoulder.IsPressed == true && !buttons.Contains(Buttons.LeftShoulder)) buttons.Add(Buttons.LeftShoulder); if (controller.ExtendedGamepad.RightShoulder.IsPressed == true && !buttons.Contains(Buttons.RightShoulder)) buttons.Add(Buttons.RightShoulder); Up = controller.ExtendedGamepad.DPad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released; Down = controller.ExtendedGamepad.DPad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released; Left = controller.ExtendedGamepad.DPad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released; Right = controller.ExtendedGamepad.DPad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released; leftThumbStickPosition.X = controller.ExtendedGamepad.LeftThumbstick.XAxis.Value; leftThumbStickPosition.Y = controller.ExtendedGamepad.LeftThumbstick.YAxis.Value; rightThumbStickPosition.X = controller.ExtendedGamepad.RightThumbstick.XAxis.Value; rightThumbStickPosition.Y = controller.ExtendedGamepad.RightThumbstick.YAxis.Value; leftTriggerValue = controller.ExtendedGamepad.LeftTrigger.Value; rightTriggerValue = controller.ExtendedGamepad.RightTrigger.Value; } else if (controller.Gamepad != null) { if (controller.Gamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A)) buttons.Add(Buttons.A); if (controller.Gamepad.ButtonB.IsPressed == true && !buttons.Contains(Buttons.B)) buttons.Add(Buttons.B); if (controller.Gamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X)) buttons.Add(Buttons.X); if (controller.Gamepad.ButtonY.IsPressed == true && !buttons.Contains(Buttons.Y)) buttons.Add(Buttons.Y); Up = controller.Gamepad.DPad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released; Down = controller.Gamepad.DPad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released; Left = controller.Gamepad.DPad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released; Right = controller.Gamepad.DPad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released; } else if (controller.MicroGamepad != null) { if (controller.MicroGamepad.ButtonA.IsPressed == true && !buttons.Contains(Buttons.A)) buttons.Add(Buttons.A); if (controller.MicroGamepad.ButtonX.IsPressed == true && !buttons.Contains(Buttons.X)) buttons.Add(Buttons.X); Up = controller.MicroGamepad.Dpad.Up.IsPressed ? ButtonState.Pressed : ButtonState.Released; Down = controller.MicroGamepad.Dpad.Down.IsPressed ? ButtonState.Pressed : ButtonState.Released; Left = controller.MicroGamepad.Dpad.Left.IsPressed ? ButtonState.Pressed : ButtonState.Released; Right = controller.MicroGamepad.Dpad.Right.IsPressed ? ButtonState.Pressed : ButtonState.Released; } } GamePadState state = new GamePadState( new GamePadThumbSticks(leftThumbStickPosition, rightThumbStickPosition, leftDeadZoneMode, rightDeadZoneMode), new GamePadTriggers(leftTriggerValue, rightTriggerValue), new GamePadButtons(buttons.ToArray()), new GamePadDPad(Up, Down, Left, Right)); state.IsConnected = connected; return state; } public override bool PlatformSetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { return false; } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteGamePadDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using GameController; namespace Microsoft.Xna.Platform.Input { internal class IOSGamePadDevice : GamePadDevice { public IOSGamePadDevice() : base() { } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteInputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteInputFactory : InputFactory { public override GamePadStrategy CreateGamePadStrategy() { return new ConcreteGamePad(); } public override JoystickStrategy CreateJoystickStrategy() { return new ConcreteJoystick(); } public override KeyboardStrategy CreateKeyboardStrategy() { return new ConcreteKeyboard(); } public override MouseStrategy CreateMouseStrategy() { return new ConcreteMouse(); } public override MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType) { return new ConcreteMouseCursor(cursorType); } public override MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy) { return new ConcreteMouseCursor(data, w, h, originx, originy); } public override TouchPanelStrategy CreateTouchPanelStrategy() { return new ConcreteTouchPanel(); } public override KeyboardInputStrategy CreateKeyboardInputStrategy() { return new ConcreteKeyboardInput(); } public override MessageBoxStrategy CreateMessageBoxStrategy() { return new ConcreteMessageBox(); } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteJoystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteJoystick : JoystickStrategy { public override bool PlatformIsSupported { get { return false; } } public override int PlatformLastConnectedIndex { get { return -1; } } public override JoystickCapabilities PlatformGetCapabilities(int index) { return base.CreateJoystickCapabilities(false, string.Empty, null, false, 0, 0, 0); } public override JoystickState PlatformGetState(int index) { return JoystickStrategy.DefaultJoystickState; } public override void PlatformGetState(int index, ref JoystickState joystickState) { } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteKeyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboard : KeyboardStrategy { private List _keys; public override KeyboardState PlatformGetState() { return base.CreateKeyboardState(_keys); } internal void SetKeys(List keys) { _keys = keys; } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteKeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; using UIKit; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteKeyboardInput : KeyboardInputStrategy { private TaskCompletionSource tcs; private UIAlertView alert; public override Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode) { tcs = new TaskCompletionSource(); UIApplication.SharedApplication.InvokeOnMainThread(delegate { alert = new UIAlertView(); alert.Title = title; alert.Message = description; alert.AlertViewStyle = usePasswordMode ? UIAlertViewStyle.SecureTextInput : UIAlertViewStyle.PlainTextInput; alert.AddButton("Cancel"); alert.AddButton("Ok"); UITextField alertTextField = alert.GetTextField(0); alertTextField.KeyboardType = UIKeyboardType.ASCIICapable; alertTextField.AutocorrectionType = UITextAutocorrectionType.No; alertTextField.AutocapitalizationType = UITextAutocapitalizationType.Sentences; alertTextField.Text = defaultText; alert.Dismissed += (sender, e) => { if (!tcs.Task.IsCompleted) tcs.SetResult((int)e.ButtonIndex == 0 ? null : alert.GetTextField(0).Text); }; // UIAlertView's textfield does not show keyboard in iOS8 // http://stackoverflow.com/questions/25563108/uialertviews-textfield-does-not-show-keyboard-in-ios8 if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) alert.Presented += (sender, args) => alertTextField.SelectAll(alert); alert.Show(); }); return tcs.Task; } public override void PlatformCancel(string result) { if (!tcs.Task.IsCompleted) tcs.SetResult(result); UIApplication.SharedApplication.InvokeOnMainThread(delegate { alert.DismissWithClickedButtonIndex(0, true); }); } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteMessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; using UIKit; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMessageBox : MessageBoxStrategy { private TaskCompletionSource tcs; private UIAlertView alert; public override Task PlatformShow(string title, string description, List buttons) { tcs = new TaskCompletionSource(); UIApplication.SharedApplication.InvokeOnMainThread(delegate { alert = new UIAlertView(); alert.Title = title; alert.Message = description; foreach (string button in buttons) alert.AddButton(button); alert.Dismissed += (sender, e) => { if (!tcs.Task.IsCompleted) tcs.SetResult((int)e.ButtonIndex); }; alert.Show(); }); return tcs.Task; } public override void PlatformCancel(int? result) { if (!tcs.Task.IsCompleted) tcs.SetResult(result); UIApplication.SharedApplication.InvokeOnMainThread(delegate { alert.DismissWithClickedButtonIndex(0, true); }); } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteMouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouse : MouseStrategy { private IntPtr _wndHandle = IntPtr.Zero; private Point _pos; private int _scrollX, _scrollY; private int _rawX, _rawY; private ButtonState _leftButton, _rightButton, _middleButton; public override IntPtr PlatformGetWindowHandle() { return _wndHandle; } public override void PlatformSetWindowHandle(IntPtr windowHandle) { _wndHandle = windowHandle; } public override bool PlatformIsRawInputAvailable() { return false; } public override MouseState PlatformGetState() { MouseState mouseState = new MouseState( x: _pos.X, y: _pos.Y, scrollWheel: _scrollY, horizontalScrollWheel: _scrollX, rawX: _rawX, rawY: _rawY, leftButton: _leftButton, middleButton: _middleButton, rightButton: _rightButton, xButton1: ButtonState.Released, xButton2: ButtonState.Released ); return mouseState; } public override void PlatformSetPosition(int x, int y) { _pos.X = x; _pos.Y = y; } public override void PlatformSetCursor(MouseCursor cursor) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Input/.iOS/ConcreteMouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public sealed class ConcreteMouseCursor : MouseCursorStrategy { public ConcreteMouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { this._cursorType = cursorType; this._handle = IntPtr.Zero; } public ConcreteMouseCursor(byte[] data, int w, int h, int originx, int originy) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool dispose) { if (dispose) { } base.Dispose(dispose); } } } ================================================ FILE: Platforms/Input/.iOS/Touch/ConcreteTouchPanel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using UIKit; namespace Microsoft.Xna.Platform.Input.Touch { public sealed class ConcreteTouchPanel : TouchPanelStrategy { public override IntPtr WindowHandle { get { return base.WindowHandle; } set { base.WindowHandle = value; } } public override int DisplayWidth { get { return base.DisplayWidth; } set { base.DisplayWidth = value; } } public override int DisplayHeight { get { return base.DisplayHeight; } set { base.DisplayHeight = value; } } public override DisplayOrientation DisplayOrientation { get { return base.DisplayOrientation; } set { base.DisplayOrientation = value; } } public override GestureType EnabledGestures { get { return base.EnabledGestures; } set { base.EnabledGestures = value; } } public override bool IsGestureAvailable { get { return base.IsGestureAvailable; } } public ConcreteTouchPanel() : base() { // Initialize Capabilities int maximumTouchCount = 0; bool isConnected = false; bool hasPressure = false; // iPhone supports 5, iPad 11 isConnected = true; switch (UIDevice.CurrentDevice.UserInterfaceIdiom) { case UIUserInterfaceIdiom.Phone: maximumTouchCount = 5; break; default: maximumTouchCount = 11; break; } _capabilities = base.CreateTouchPanelCapabilities(maximumTouchCount, isConnected, hasPressure); } public override TouchPanelCapabilities GetCapabilities() { return _capabilities; } public override TouchCollection GetState() { return base.GetState(); } public override GestureSample ReadGesture() { return base.ReadGesture(); } public override void AddPressedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddPressedEvent(nativeTouchId, position, winSize); } } public override void AddMovedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddMovedEvent(nativeTouchId, position, winSize); } } public override void AddReleasedEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } public override void AddCanceledEvent(int nativeTouchId, Vector2 position) { IntPtr wndHandle = this.WindowHandle; if (wndHandle != IntPtr.Zero) { GameWindow gameWindow = iOSGameWindow.FromHandle(wndHandle); Rectangle windowsBounds = gameWindow.ClientBounds; Point winSize = new Point(windowsBounds.Width, windowsBounds.Height); base.AddReleasedEvent(nativeTouchId, position, winSize); } } } } ================================================ FILE: Platforms/Kni.Platform.Android.GL.Xamarin.csproj ================================================  Debug AnyCPU 10.0.0 2.0 {BA9476CF-99BA-4D03-92F2-73D2C5E58883} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Microsoft.Xna.Framework Kni.Platform true CS0067;CS1591;CS1574;CS0419;CS8500 v4.4 Default 512 armeabi-v7a,x86 False Resources\Resource.designer.cs Resource true false full true bin\Android\AnyCPU\Debug obj\Android\AnyCPU\Debug bin\Android\AnyCPU\Debug\Kni.Platform.xml DEBUG;OPENGL;OPENAL;TRACE;ANDROID;XAMARIN;GLES;STBSHARP_INTERNAL prompt 4 false None None true none bin\Android\AnyCPU\Release obj\Android\AnyCPU\Release bin\Android\AnyCPU\Release\Kni.Platform.xml OPENGL;OPENAL;TRACE;ANDROID;XAMARIN;GLES;STBSHARP_INTERNAL prompt 4 false False True {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Utilities\StbImageSharp\AnimatedFrameResult.cs Utilities\StbImageSharp\ColorComponents.cs Utilities\StbImageSharp\CRuntime.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\StbImage.cs Utilities\StbImageSharp\StbImage.Generated.Bmp.cs Utilities\StbImageSharp\StbImage.Generated.Common.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Jpg.cs Utilities\StbImageSharp\StbImage.Generated.Png.cs Utilities\StbImageSharp\StbImage.Generated.Psd.cs Utilities\StbImageSharp\StbImage.Generated.Tga.cs Utilities\StbImageSharp\StbImage.Generated.Zlib.cs Utilities\StbImageWriteSharp\ColorComponents.cs Utilities\StbImageWriteSharp\CRuntime.cs Utilities\StbImageWriteSharp\ImageWriter.cs Utilities\StbImageWriteSharp\MemoryStats.cs Utilities\StbImageWriteSharp\StbImageWrite.cs Utilities\StbImageWriteSharp\StbImageWrite.Generated.cs libs\armeabi-v7a\libopenal.so libs\arm64-v8a\libopenal.so libs\x86\libopenal.so libs\x86_64\libopenal.so Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.Android.GL.csproj ================================================  ..\Artifacts\Platforms\Android True 4.2.9001.0 4.2.9001.0 false false net8.0-android Default True {CF09A088-6F64-4FA3-8FF8-E5B39F8BB0E6} Kni.Platform Microsoft.Xna.Framework ANDROID;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI backend for Android platform (GLES). KNI;monogame;.net core;core;.net standard;standard;android nkast.Kni.Platform.Android.GL ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False libs\armeabi-v7a\libopenal.so libs\arm64-v8a\libopenal.so libs\x86\libopenal.so libs\x86_64\libopenal.so Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.Blazor.GL.csproj ================================================  ..\Artifacts\Platforms\Blazor\ BLAZORGL;STBSHARP_INTERNAL 4.2.9001.0 4.2.9001.0 false false net8.0 Default true Kni.Platform Microsoft.Xna.Framework $(DefineConstants);BLAZORGL;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI backend for WebAssembly platform (WebGL). KNI;monogame;.net core;core;.net standard;standard;Blazor;webassembly nkast.Kni.Platform.Blazor.GL Xna.Framework MonoGame Team, Kastellanos Nikos ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.Cardboard.GL.csproj ================================================  ..\Artifacts\Platforms\Cardboard True 4.2.9001.0 4.2.9001.0 true false false net8.0-android30 21 Default True {BF257928-8B5D-4371-BD03-C18DA71918C3} Kni.Platform Microsoft.Xna.Framework ANDROID;CARDBOARD;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI backend for Cardboard Android. This is an experiment port of Google Cardboard on KNI/XNA framework. Example: GraphicsDevice.Clear(Color.CornflowerBlue); var vrstate = Microsoft.Xna.Framework.Input.Cardboard.Headset.GetState(); var leftEye = vrstate.LeftEye; GraphicsDevice.Viewport = leftEye.Viewport; // draw with leftEye.View, leftEye.Projection. var rightEye = vrstate.RightEye; GraphicsDevice.Viewport = rightEye.Viewport; // draw with rightEye.View, rightEye.Projection. KNI;android nkast.Kni.Platform.Cardboard.GL ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False libs\armeabi-v7a\libopenal.so libs\arm64-v8a\libopenal.so libs\x86\libopenal.so libs\x86_64\libopenal.so Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.Oculus.GL.csproj ================================================  ..\Artifacts\Platforms\Oculus True 4.2.9001.0 4.2.9001.0 true false false net8.0-android32.0 Default True {3472997A-CD26-4D0D-B64A-795F913E6777} Kni.Platform Microsoft.Xna.Framework ANDROID;OCULUS;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419 true KNI backend for Oculus platform (GLES). KNI;monogame;.net core;core;.net standard;standard;android nkast.Kni.Platform.Oculus.GL ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False libs\arm64-v8a\libopenxr_loader.so libs\armeabi-v7a\libopenal.so libs\arm64-v8a\libopenal.so libs\x86\libopenal.so libs\x86_64\libopenal.so Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.Ref.csproj ================================================  ..\Artifacts\Platforms\Ref True 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0 7.3 Kni.Platform Microsoft.Xna.Framework REF true CS0067;CS1591;CS1574;CS0419;CS8500 true Reference KNI backend for libraries. KNI;monogame;.net core;core;.net standard;standard;Reference; nkast.Kni.Platform.Ref Xna.Framework MonoGame Team, Kastellanos Nikos {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Platforms/Kni.Platform.SDL2.GL.csproj ================================================  4.2.9001.0 4.2.9001.0 false False net40;netstandard2.0;net8.0 7.3 {6D75E618-19CA-4C51-9546-F10965FBC0B8} Library true Microsoft.Xna.Framework Kni.Platform true CS0067;CS1591;CS1574;CS0419;CS8500 True true ..\Artifacts\Platforms\DesktopGL\ obj\SdlGL\$(Platform)\$(Configuration)\ $(DefineConstants);OPENGL;OPENAL;DESKTOPGL;SUPPORTS_EFX;STBSHARP_INTERNAL KNI backend for SDL Desktop Platforms (OpenGL) KNI; nkast.Kni.Platform.SDL2.GL Xna.Framework Kastellanos Nikos ILLink.Descriptors.xml true {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4b8d3f73-bbd2-4057-b86b-8b73b957dc0f} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Utilities\StbImageSharp\AnimatedFrameResult.cs Utilities\StbImageSharp\ColorComponents.cs Utilities\StbImageSharp\CRuntime.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\StbImage.cs Utilities\StbImageSharp\StbImage.Generated.Bmp.cs Utilities\StbImageSharp\StbImage.Generated.Common.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Jpg.cs Utilities\StbImageSharp\StbImage.Generated.Png.cs Utilities\StbImageSharp\StbImage.Generated.Psd.cs Utilities\StbImageSharp\StbImage.Generated.Tga.cs Utilities\StbImageSharp\StbImage.Generated.Zlib.cs Utilities\StbImageWriteSharp\ColorComponents.cs Utilities\StbImageWriteSharp\CRuntime.cs Utilities\StbImageWriteSharp\ImageWriter.cs Utilities\StbImageWriteSharp\MemoryStats.cs Utilities\StbImageWriteSharp\StbImageWrite.cs Utilities\StbImageWriteSharp\StbImageWrite.Generated.cs Platform\Utilities\NVorbis\BufferedReadStream.cs Platform\Utilities\NVorbis\DataPacket.cs Platform\Utilities\NVorbis\Huffman.cs Platform\Utilities\NVorbis\IContainerReader.cs Platform\Utilities\NVorbis\IPacketProvider.cs Platform\Utilities\NVorbis\IVorbisStreamStatus.cs Platform\Utilities\NVorbis\Mdct.cs Platform\Utilities\NVorbis\NewStreamEventArgs.cs Platform\Utilities\NVorbis\ParameterChangeEventArgs.cs Platform\Utilities\NVorbis\RingBuffer.cs Platform\Utilities\NVorbis\StreamReadBuffer.cs Platform\Utilities\NVorbis\Utils.cs Platform\Utilities\NVorbis\VorbisCodebook.cs Platform\Utilities\NVorbis\VorbisFloor.cs Platform\Utilities\NVorbis\VorbisMapping.cs Platform\Utilities\NVorbis\VorbisMode.cs Platform\Utilities\NVorbis\VorbisReader.cs Platform\Utilities\NVorbis\VorbisResidue.cs Platform\Utilities\NVorbis\VorbisStreamDecoder.cs Platform\Utilities\NVorbis\VorbisTime.cs Platform\Utilities\NVorbis\Ogg\OggContainerReader.cs Platform\Utilities\NVorbis\Ogg\OggCrc.cs Platform\Utilities\NVorbis\Ogg\OggPacket.cs Platform\Utilities\NVorbis\Ogg\OggPacketReader.cs Platform\Utilities\NVorbis\Ogg\OggPageFlags.cs runtime; build; native; contentfiles; analyzers; buildtransitive all Kni.Platform.dll.config PreserveNewest x86\SDL2.dll PreserveNewest Always runtimes\win-x86\native\SDL2.dll x64\SDL2.dll PreserveNewest Always runtimes\win-x64\native\SDL2.dll x86\soft_oal.dll PreserveNewest Always runtimes\win-x86\native\soft_oal.dll x64\soft_oal.dll PreserveNewest Always runtimes\win-x64\native\soft_oal.dll x64\libSDL2-2.0.so.0 PreserveNewest Always runtimes\linux-x64\native\libSDL2-2.0.so.0 x86\libopenal.so.1 PreserveNewest Always runtimes\linux-x86\native\libopenal.so.1 x64\libopenal.so.1 PreserveNewest Always runtimes\linux-x64\native\libopenal.so.1 libSDL2.dylib PreserveNewest Always runtimes\osx\native\libSDL2.dylib libopenal.1.dylib PreserveNewest Always runtimes\osx\native\libopenal.1.dylib Kni.bmp gamecontrollerdb.txt Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.SDL2.GL.dll.config ================================================ ================================================ FILE: Platforms/Kni.Platform.UAP.DX11.csproj ================================================  Debug AnyCPU 512 {09C41A48-7BF3-4A46-9EB8-CE95B4C27CA9} {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library Microsoft.Xna.Framework Kni.Platform true CS0067;CS1591;CS1574;CS0419;CS8500 UAP 10.0.22621.0 10.0.16299.0 15 win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot Default en-US true false full true bin\WindowsUniversal\AnyCPU\Debug obj\WindowsUniversal\AnyCPU\Debug bin\WindowsUniversal\AnyCPU\Debug\Kni.Platform.xml DEBUG;TRACE;NETFX_CORE;UAP;DIRECTX;DIRECTX11_1;WINDOWS_MEDIA_ENGINE;STBSHARP_INTERNAL prompt 4 false true none bin\WindowsUniversal\AnyCPU\Release obj\WindowsUniversal\AnyCPU\Release bin\WindowsUniversal\AnyCPU\Release\Kni.Platform.xml TRACE;NETFX_CORE;UAP;DIRECTX;DIRECTX11_1;WINDOWS_MEDIA_ENGINE;STBSHARP_INTERNAL prompt 4 false ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.dll ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.Direct2D1.dll ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.Direct3D11.dll ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.DXGI.dll ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.MediaFoundation.dll ..\ThirdParty\Dependencies\SharpDX\4.2.0\uap10.0\SharpDX.XAudio2.dll Windows Mobile Extensions for the UWP {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Utilities\StbImageSharp\AnimatedFrameResult.cs Utilities\StbImageSharp\ColorComponents.cs Utilities\StbImageSharp\CRuntime.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\StbImage.cs Utilities\StbImageSharp\StbImage.Generated.Bmp.cs Utilities\StbImageSharp\StbImage.Generated.Common.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Jpg.cs Utilities\StbImageSharp\StbImage.Generated.Png.cs Utilities\StbImageSharp\StbImage.Generated.Psd.cs Utilities\StbImageSharp\StbImage.Generated.Tga.cs Utilities\StbImageSharp\StbImage.Generated.Zlib.cs Utilities\StbImageWriteSharp\ColorComponents.cs Utilities\StbImageWriteSharp\CRuntime.cs Utilities\StbImageWriteSharp\ImageWriter.cs Utilities\StbImageWriteSharp\MemoryStats.cs Utilities\StbImageWriteSharp\StbImageWrite.cs Utilities\StbImageWriteSharp\StbImageWrite.Generated.cs Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo 6.2.14 14.0 ================================================ FILE: Platforms/Kni.Platform.WinForms.DX11.OculusOVR.csproj ================================================  ..\Artifacts\Platforms\OculusOvrDX11 True 4.2.9001.0 4.2.9001.0 false false net48;net8.0-windows 7.3 Kni.Platform.WindowsDX11.OculusOVR Microsoft.Xna.Framework OVR;DIRECTX11; true CS0067;CS1591;CS1574;CS0419;CS8500 true Ovr Oculus library for the KNI Framework (DirectX 11). KNI;XNA;MonoGame nkast.Kni.Platform.WinForms.DX11.OculusOVR ..\NuGetPackages\Output runtime; build; native; contentfiles; analyzers; buildtransitive all False False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False False ================================================ FILE: Platforms/Kni.Platform.WinForms.DX11.csproj ================================================  4.2.9001.0 4.2.9001.0 false False net40;net48;net8.0-windows true 7.3 {7DE47032-A904-4C29-BD22-2D235E8D91BA} Library Microsoft.Xna.Framework Kni.Platform true CS0067;CS1591;CS1574;CS0419;CS8500 True true ..\Artifacts\Platforms\WindowsDX\ obj\Windows\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX;DIRECTX;WINDOWS_MEDIA_SESSION;STBSHARP_INTERNAL KNI backend for Windows Desktop platform (DirectX11). KNI; nkast.Kni.Platform.WinForms.DX11 Xna.Framework Kastellanos Nikos true {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Utilities\StbImageSharp\AnimatedFrameResult.cs Utilities\StbImageSharp\ColorComponents.cs Utilities\StbImageSharp\CRuntime.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\ImageResult.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\MemoryStats.cs Utilities\StbImageSharp\StbImage.cs Utilities\StbImageSharp\StbImage.Generated.Bmp.cs Utilities\StbImageSharp\StbImage.Generated.Common.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Gif.cs Utilities\StbImageSharp\StbImage.Generated.Jpg.cs Utilities\StbImageSharp\StbImage.Generated.Png.cs Utilities\StbImageSharp\StbImage.Generated.Psd.cs Utilities\StbImageSharp\StbImage.Generated.Tga.cs Utilities\StbImageSharp\StbImage.Generated.Zlib.cs Utilities\StbImageWriteSharp\ColorComponents.cs Utilities\StbImageWriteSharp\CRuntime.cs Utilities\StbImageWriteSharp\ImageWriter.cs Utilities\StbImageWriteSharp\MemoryStats.cs Utilities\StbImageWriteSharp\StbImageWrite.cs Utilities\StbImageWriteSharp\StbImageWrite.Generated.cs runtime; build; native; contentfiles; analyzers; buildtransitive all Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Kni.Platform.iOS.GL.csproj ================================================  ..\Artifacts\Platforms\iOS True 4.2.9001.0 4.2.9001.0 false false net8.0-ios 11.2 Default True {D93291EF-3419-412E-BC56-376BD6A02224} Kni.Platform Microsoft.Xna.Framework IOS;OPENAL;OPENGL;GLES;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI backend for iOS platform (GLES). KNI;monogame;.net core;core;.net standard;standard;ios nkast.Kni.Platform.iOS.GL ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Media/Android/ConcreteAlbum.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; using Android.Graphics; using Android.Provider; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; private Android.Net.Uri _thumbnail; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { return this._thumbnail != null; } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection, Android.Net.Uri thumbnail) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; this._thumbnail = thumbnail; } public override Stream GetAlbumArt() { throw new NotImplementedException(); } public override Stream GetThumbnail() { throw new NotImplementedException(); } [CLSCompliant(false)] public Bitmap Platform_GetAlbumArt(int width = 0, int height = 0) { Bitmap albumArt = MediaStore.Images.Media.GetBitmap(ConcreteMediaLibraryStrategy.Context.ContentResolver, this._thumbnail); if (width == 0 || height == 0) return albumArt; Bitmap scaledAlbumArt = Bitmap.CreateScaledBitmap(albumArt, width, height, true); albumArt.Dispose(); return scaledAlbumArt; } [CLSCompliant(false)] public Bitmap Platform_GetThumbnail() { return this.Platform_GetAlbumArt(220, 220); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Android/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/Android/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework.Media; using Android.Content; using Android.Provider; using Uri = Android.Net.Uri; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { private static AlbumCollection _albumCollection; private static SongCollection _songCollection; private static readonly TimeSpan MinimumSongDuration = TimeSpan.FromSeconds(3); internal static Context Context { get; set; } public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return _albumCollection; } } public override SongCollection Songs { get { return _songCollection; } } public override PlaylistCollection Playlists { get { throw new NotImplementedException(); } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { List songList = new List(); List albumList = new List(); using (Android.Database.ICursor musicCursor = Context.ContentResolver.Query(MediaStore.Audio.Media.ExternalContentUri, null, null, null, null)) { if (musicCursor != null) { Dictionary artists = new Dictionary(); Dictionary albums = new Dictionary(); Dictionary genres = new Dictionary(); // Note: Grabbing album art using MediaStore.Audio.AlbumColumns.AlbumArt and // MediaStore.Audio.AudioColumns.AlbumArt is broken // See: https://code.google.com/p/android/issues/detail?id=1630 // Workaround: http://stackoverflow.com/questions/1954434/cover-art-on-android int albumNameColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Album); int albumArtistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Artist); int albumIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.AlbumId); int genreColumn = musicCursor.GetColumnIndex(MediaStore.Audio.GenresColumns.Name); // Also broken :( int artistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Artist); int titleColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Title); int durationColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Duration); int assetIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Id); if (titleColumn == -1 || durationColumn == -1 || assetIdColumn == -1) { Debug.WriteLine("Missing essential properties from music library. Returning empty library."); _albumCollection = base.CreateAlbumCollection(albumList); _songCollection = base.CreateSongCollection(songList); return; } for (musicCursor.MoveToFirst(); !musicCursor.IsAfterLast; musicCursor.MoveToNext()) try { long durationProperty = musicCursor.GetLong(durationColumn); TimeSpan duration = TimeSpan.FromMilliseconds(durationProperty); // Exclude sound effects if (duration < MinimumSongDuration) continue; string albumNameProperty = (albumNameColumn > -1 ? musicCursor.GetString(albumNameColumn) : null) ?? "Unknown Album"; string albumArtistProperty = (albumArtistColumn > -1 ? musicCursor.GetString(albumArtistColumn) : null) ?? "Unknown Artist"; string genreProperty = (genreColumn > -1 ? musicCursor.GetString(genreColumn) : null) ?? "Unknown Genre"; string artistProperty = (artistColumn > -1 ? musicCursor.GetString(artistColumn) : null) ?? "Unknown Artist"; string titleProperty = musicCursor.GetString(titleColumn); long assetId = musicCursor.GetLong(assetIdColumn); Uri assetUri = ContentUris.WithAppendedId(MediaStore.Audio.Media.ExternalContentUri, assetId); long albumId = albumIdColumn > -1 ? musicCursor.GetInt(albumIdColumn) : -1; Uri albumArtUri = albumId > -1 ? ContentUris.WithAppendedId(Uri.Parse("content://media/external/audio/albumart"), albumId) : null; Artist artist; if (!artists.TryGetValue(artistProperty, out artist)) { artist = new Artist(artistProperty); artists.Add(artist.Name, artist); } Artist albumArtist; if (!artists.TryGetValue(albumArtistProperty, out albumArtist)) { albumArtist = new Artist(albumArtistProperty); artists.Add(albumArtist.Name, albumArtist); } Genre genre; if (!genres.TryGetValue(genreProperty, out genre)) { genre = new Genre(genreProperty); genres.Add(genre.Name, genre); } Album album; if (!albums.TryGetValue(albumNameProperty, out album)) { AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(albumNameProperty, albumArtist, genre, base.CreateSongCollection(new List()), albumArtUri); album = base.CreateAlbum(albumStrategy); albums.Add(album.Name, album); albumList.Add(album); } ConcreteSongStrategy songStrategy = new ConcreteSongStrategy(); songStrategy.Album = album; songStrategy.Artist = artist; songStrategy.Genre = genre; songStrategy.Name = titleProperty; songStrategy.Duration = duration; songStrategy._assetUri = assetUri; Song song = base.CreateSong(songStrategy); song.Album.Songs.Add(song); songList.Add(song); } catch (Exception e) { Debug.WriteLine("MediaLibrary exception: " + e.Message); } } musicCursor.Close(); } _albumCollection = base.CreateAlbumCollection(albumList); _songCollection = base.CreateSongCollection(songList); } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Android/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { private Android.Media.MediaPlayer _androidPlayer; private Song _playingSong; internal ConcreteMediaPlayerStrategy() { this._androidPlayer = new Android.Media.MediaPlayer(); this._androidPlayer.Completion += AndroidPlayer_Completion; } #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; if (base.Queue.ActiveSong != null) SetChannelVolumes(); } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; if (base.Queue.Count > 0) SetChannelVolumes(); } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return true; } } public override TimeSpan PlatformPlayPosition { get { Song activeSong = base.Queue.ActiveSong; if (activeSong == null) return TimeSpan.Zero; if (_playingSong == activeSong && _androidPlayer.IsPlaying) return TimeSpan.FromMilliseconds(_androidPlayer.CurrentPosition); else return TimeSpan.Zero; } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion private void SetChannelVolumes() { float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; _androidPlayer.SetVolume(innerVolume, innerVolume); } } public override void PlatformPlaySong(Song song) { if (base.Queue.ActiveSong != null) { float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; _androidPlayer.SetVolume(innerVolume, innerVolume); // Prepare the player _androidPlayer.Reset(); if (((IPlatformSong)song).Strategy.ToConcrete().AssetUri != null) { _androidPlayer.SetDataSource(Android.App.Application.Context, ((IPlatformSong)song).Strategy.ToConcrete().AssetUri); } else { Android.Content.Res.AssetFileDescriptor afd = Android.App.Application.Context.Assets.OpenFd( ((IPlatformSong)song).Strategy.ToConcrete().StreamSource.OriginalString); if (afd == null) return; _androidPlayer.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length); afd.Close(); } _androidPlayer.Prepare(); _playingSong = song; _androidPlayer.Start(); ((IPlatformSong)song).Strategy.PlayCount++; } } public override void PlatformPause() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { _androidPlayer.Pause(); } } public override void PlatformResume() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { _androidPlayer.Start(); } } public override void PlatformStop() { for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; Song activeSong = base.Queue.ActiveSong; _androidPlayer.Stop(); _playingSong = null; ((IPlatformSong)activeSong).Strategy.PlayCount = 0; } } protected override void PlatformClearQueue() { while (base.Queue.Count > 0) { Song song = base.Queue[0]; _androidPlayer.Stop(); _playingSong = null; ((IPlatformSong)song).Strategy.PlayCount = 0; base.RemoveQueuedSong(song); } _numSongsInQueuePlayed = 0; //base.ClearQueue(); } private void AndroidPlayer_Completion(object sender, EventArgs e) { if (_playingSong != null) { _playingSong = null; base.OnSongFinishedPlaying(); } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Android/ConcreteSong.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { private Uri _streamSource; internal Android.Net.Uri _assetUri; internal Uri StreamSource { get { return _streamSource; } } [CLSCompliant(false)] public Android.Net.Uri AssetUri { get { return this._assetUri; } } internal ConcreteSongStrategy() : base() { } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; } public override Album Album { get { return base.Album; } } public override Artist Artist { get { return base.Artist; } } public override Genre Genre { get { return base.Genre; } } public override TimeSpan Duration { get { return base.Duration; } } public override bool IsProtected { get { return base.IsProtected; } } public override bool IsRated { get { return base.IsRated; } } public override string Filename { get { if (this._assetUri != null) return this.Name; return StreamSource.OriginalString; } } public override string Name { get { return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { return base.Rating; } } public override int TrackNumber { get { return base.TrackNumber; } } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Android/ConcreteVideo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Android/ConcreteVideoPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.OpenGL; using GLPixelFormat = Microsoft.Xna.Platform.Graphics.OpenGL.PixelFormat; using Android.Views; using Android.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { private const int GL_TEXTURE_EXTERNAL_OES = (0x00008D65); private Android.Media.MediaPlayer _player; private SurfaceTexture _surfaceTexture; private Surface _surface; private GraphicsDeviceStrategy _graphicsDeviceStrategy; private int _glVideoSurfaceTexture; private bool _frameAvailable; private byte[] _frameData; private Texture2D _lastFrame; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; _player.Looping = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; throw new NotImplementedException(); } } public override TimeSpan PlayPosition { get { return TimeSpan.FromMilliseconds(_player.CurrentPosition); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; PlatformSetVolume(); } } public override Video Video { get { return base.Video; } protected set { base.Video = value; if (value != null) CreateGLVideoSurfaceTexture(((IPlatformGraphicsDevice)((IPlatformVideo)value).Strategy.GraphicsDevice).Strategy); } } internal ConcreteVideoPlayerStrategy() { _player = new Android.Media.MediaPlayer(); } private void CreateGLVideoSurfaceTexture(GraphicsDeviceStrategy graphicsDeviceStrategy) { if (_graphicsDeviceStrategy != null) { if (_graphicsDeviceStrategy != graphicsDeviceStrategy) throw new InvalidOperationException(); return; } _graphicsDeviceStrategy = graphicsDeviceStrategy; var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete().GL; _glVideoSurfaceTexture = GL.GenTexture(); GL.CheckGLError(); ((IPlatformTextureCollection)_graphicsDeviceStrategy.MainContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(TextureUnit.Texture0 + 0); GL.CheckGLError(); GL.BindTexture((TextureTarget)GL_TEXTURE_EXTERNAL_OES, _glVideoSurfaceTexture); GL.CheckGLError(); GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.CheckGLError(); GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.CheckGLError(); GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge); GL.CheckGLError(); GL.TexParameter((TextureTarget)GL_TEXTURE_EXTERNAL_OES, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); GL.CheckGLError(); _surfaceTexture = new SurfaceTexture(_glVideoSurfaceTexture); _surface = new Surface(_surfaceTexture); _player.SetSurface(_surface); _surfaceTexture.FrameAvailable += _surfaceTexture_FrameAvailable; } public unsafe override Texture2D PlatformGetTexture() { if (_lastFrame != null) { if (_lastFrame.Width != this.Video.Width || _lastFrame.Height != this.Video.Height) { _lastFrame.Dispose(); _lastFrame = null; } } if (_lastFrame == null) _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, this.Video.Width, this.Video.Height, false, SurfaceFormat.Color); var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete().GL; if (_frameAvailable) { _frameAvailable = false; // Calculate the buffer size for RGBA format int frameBufferSize = this.Video.Width * this.Video.Height * 4; // Allocate memory for the frame data if needed if (_frameData == null || _frameData.Length != frameBufferSize) _frameData = new byte[frameBufferSize]; // Update the surface texture _surfaceTexture.UpdateTexImage(); // Create a framebuffer int framebuffer = GL.GenFramebuffer(); GL.CheckGLError(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebuffer); GL.CheckGLError(); // Attach the texture to the framebuffer GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, (TextureTarget)GL_TEXTURE_EXTERNAL_OES, _glVideoSurfaceTexture, 0); GL.CheckGLError(); // Read the pixel data from the framebuffer fixed (byte* pData = &_frameData[0]) { IntPtr dataPtr = (IntPtr)pData; GL.ReadPixels(0, 0, this.Video.Width, this.Video.Height, GLPixelFormat.Rgba, PixelType.UnsignedByte, dataPtr); GL.CheckGLError(); } // Dettach framebuffer GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.CheckGLError(); // cleanup GL.DeleteFramebuffer(framebuffer); GL.CheckGLError(); _lastFrame.SetData(_frameData, 0, frameBufferSize); } return _lastFrame; } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { MediaState state = State; if (state == MediaState.Playing || state == MediaState.Paused) { _player.Stop(); _player.Reset(); } this.Video = video; Android.Content.Res.AssetFileDescriptor afd = Android.App.Application.Context.Assets.OpenFd(((IPlatformVideo)this.Video).Strategy.FileName); if (afd == null) return; _player.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length); afd.Close(); _player.Prepare(); _player.Start(); State = MediaState.Playing; } private void _surfaceTexture_FrameAvailable(object sender, SurfaceTexture.FrameAvailableEventArgs e) { _frameAvailable = true; } public override void PlatformPause() { _player.Pause(); State = MediaState.Paused; } public override void PlatformResume() { _player.Start(); State = MediaState.Playing; } public override void PlatformStop() { _player.Stop(); _player.Reset(); State = MediaState.Stopped; } private void PlatformSetVolume() { float logVolume = (float)Math.Pow(Volume, 2); _player.SetVolume(logVolume, logVolume); } protected override void Dispose(bool disposing) { if (disposing) { if (_lastFrame != null) _lastFrame.Dispose(); _lastFrame = null; if (_player != null) _player.Dispose(); _player = null; if (_surfaceTexture != null) { _surfaceTexture.FrameAvailable -= _surfaceTexture_FrameAvailable; _surfaceTexture.Dispose(); } _surfaceTexture = null; if (_surface != null) _surface.Dispose(); _surface = null; } if (_graphicsDeviceStrategy != null) { var GL = ((IPlatformGraphicsContext)_graphicsDeviceStrategy.MainContext).Strategy.ToConcrete().GL; if (_glVideoSurfaceTexture != 0) { GL.DeleteTexture(_glVideoSurfaceTexture); _glVideoSurfaceTexture = 0; } } _graphicsDeviceStrategy = null; base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteAlbum.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { throw new NotImplementedException(); } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; } public override Stream GetAlbumArt() { throw new NotImplementedException(); } public override Stream GetThumbnail() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return null; } } public override SongCollection Songs { get { return null; } } public override PlaylistCollection Playlists { get { return null; } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; using WasmDom = nkast.Wasm.Dom; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { WasmDom.Audio _webPlayer; private Song _playingSong; bool _isFirstLoop; TimeSpan _prevCurrentTime; internal ConcreteMediaPlayerStrategy() { _webPlayer = new WasmDom.Audio(); _webPlayer.OnEnded += WebPlayer_OnEnded; _webPlayer.OnPlaying += WebPlayer_OnPlaying; _webPlayer.OnTimeUpdate += _webPlayer_OnTimeUpdate; } #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; _webPlayer.Volume = value; } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; _webPlayer.Muted = value; } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; _webPlayer.Loop = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return true; } } public override TimeSpan PlatformPlayPosition { get { return _webPlayer.CurrentTime; } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion public override void PlatformPlaySong(Song song) { if (base.Queue.ActiveSong != null) { _webPlayer.Src = ((IPlatformSong)song).Strategy.ToConcrete().StreamSource.OriginalString; _webPlayer.Load(); _webPlayer.Volume = this.PlatformVolume; _webPlayer.Muted = this.PlatformIsMuted; _webPlayer.Loop = this.PlatformIsRepeating; _playingSong = song; _isFirstLoop = true; _prevCurrentTime = TimeSpan.Zero; _webPlayer.Play(); ((IPlatformSong)song).Strategy.PlayCount++; } } public override void PlatformPause() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { _webPlayer.Pause(); } } public override void PlatformResume() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { _webPlayer.Play(); } } public override void PlatformStop() { for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; Song activeSong = base.Queue.ActiveSong; _webPlayer.Pause(); _webPlayer.Src = ""; _playingSong = null; ((IPlatformSong)activeSong).Strategy.PlayCount = 0; } } private void WebPlayer_OnPlaying(object sender, EventArgs e) { WasmDom.Audio webPlayer = (WasmDom.Audio)sender; if (_isFirstLoop) { // ignore first OnPlaying event. _isFirstLoop = false; return; } // detect looping. if (this.PlatformIsRepeating) { if (this.State == MediaState.Playing) { // ignore OnPlaying event due to streaming pause. if (_prevCurrentTime != TimeSpan.Zero) return; Song activeSong = this.Queue.ActiveSong; ((IPlatformSong)_playingSong).Strategy.PlayCount++; base.OnPlatformMediaStateChanged(); // check if user changed the state during the MediaStateChanged event. if (this.State != MediaState.Playing || this.Queue.ActiveSong != activeSong) { return; } base.OnPlatformActiveSongChanged(); } } } private void WebPlayer_OnEnded(object sender, EventArgs e) { if (_playingSong != null) { _playingSong = null; base.OnSongFinishedPlaying(); } } private void _webPlayer_OnTimeUpdate(object sender, EventArgs e) { WasmDom.Audio webPlayer = (WasmDom.Audio)sender; TimeSpan currentTime = webPlayer.CurrentTime; _prevCurrentTime = currentTime; } protected override void Dispose(bool disposing) { if (disposing) { _webPlayer.OnPlaying -= WebPlayer_OnPlaying; _webPlayer.OnEnded -= WebPlayer_OnEnded; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteSong.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { private Uri _streamSource; internal Uri StreamSource { get { return _streamSource; } } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; } public override Album Album { get { return base.Album; } } public override Artist Artist { get { return base.Artist; } } public override Genre Genre { get { return base.Genre; } } public override TimeSpan Duration { get { return base.Duration; } } public override bool IsProtected { get { return base.IsProtected; } } public override bool IsRated { get { return base.IsRated; } } public override string Filename { get { return StreamSource.OriginalString; } } public override string Name { get { return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { return base.Rating; } } public override int TrackNumber { get { return base.TrackNumber; } } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteVideo.cs ================================================ // Copyright (C)2023 Nick Kastellanos // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Blazor/ConcreteVideoPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using nkast.Wasm.Canvas.WebGL; using WasmDom = nkast.Wasm.Dom; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { private WasmDom.Video _player; private bool _isPlaying = false; private bool _frameAvailable; private Texture2D _lastFrame; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; _player.Loop = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; _player.Muted = value; } } public override TimeSpan PlayPosition { get { return _player.CurrentTime; } } public override float Volume { get { return base.Volume; } set { base.Volume = value; PlatformSetVolume(); } } internal ConcreteVideoPlayerStrategy() { _player = new WasmDom.Video(); _player.OnPlaying += Player_OnPlaying; _player.OnTimeUpdate += Player_OnTimeUpdate; _player.OnEnded += Player_OnEnded; return; } public override Texture2D PlatformGetTexture() { if (_lastFrame != null) { if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height) { _lastFrame.Dispose(); _lastFrame = null; } } if (_lastFrame == null) _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Color); if (_isPlaying && _frameAvailable) { var GL = ((IPlatformGraphicsContext) ((IPlatformGraphicsDevice)((IPlatformVideo)base.Video).Strategy.GraphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete().GL; ConcreteTexture2D texture2D = ((IPlatformTexture)_lastFrame).GetTextureStrategy(); System.Diagnostics.Debug.Assert(texture2D._glTexture != null); ((IPlatformTextureCollection)texture2D.GraphicsDeviceStrategy.CurrentContext.Textures).Strategy.Dirty(0); GL.ActiveTexture(WebGLTextureUnit.TEXTURE0 + 0); GL.CheckGLError(); GL.BindTexture(WebGLTextureTarget.TEXTURE_2D, texture2D._glTexture); GL.CheckGLError(); GL.PixelStore(WebGLPixelParameter.UNPACK_ALIGNMENT, Math.Min(texture2D.Format.GetSize(), 8)); GL.CheckGLError(); GL.TexImage2D(WebGLTextureTarget.TEXTURE_2D, 0, texture2D._glInternalFormat, texture2D._glFormat, texture2D._glType, _player); GL.CheckGLError(); //GL.Finish(); //GL.CheckGLError(); } return _lastFrame; } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { _player.Pause(); _player.Src = ""; _isPlaying = false; _frameAvailable = false; base.Video = video; ConcreteVideoStrategy videoStrategy = ((IPlatformVideo)video).Strategy.ToConcrete(); _player.Src = videoStrategy.FileName; _player.Load(); _player.Play(); State = MediaState.Playing; } public override void PlatformPause() { _player.Pause(); _isPlaying = false; _frameAvailable = false; State = MediaState.Paused; } public override void PlatformResume() { _player.Play(); State = MediaState.Playing; } public override void PlatformStop() { _player.Pause(); _player.Src = ""; _isPlaying = false; _frameAvailable = false; State = MediaState.Stopped; } private void PlatformSetVolume() { _player.Volume = Volume; } private void Player_OnPlaying(object sender, EventArgs e) { _isPlaying = true; } private void Player_OnTimeUpdate(object sender, EventArgs e) { _frameAvailable = true; } private void Player_OnEnded(object sender, EventArgs e) { _isPlaying = false; _frameAvailable = false; State = MediaState.Stopped; } protected override void Dispose(bool disposing) { if (disposing) { _player.OnPlaying -= Player_OnPlaying; _player.OnTimeUpdate -= Player_OnTimeUpdate; _player.OnEnded -= Player_OnEnded; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteAlbum.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { throw new NotImplementedException(); } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; } public override Stream GetAlbumArt() { throw new NotImplementedException(); } public override Stream GetThumbnail() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return null; } } public override SongCollection Songs { get { return null; } } public override PlaylistCollection Playlists { get { return null; } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform.Audio; using NVorbis; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { private DynamicSoundEffectInstance _soundPlayer; private VorbisReader _reader; private float[] _sampleBuffer; private byte[] _dataBuffer; private Dictionary _bufferInfoMap = new Dictionary(); private int _lastMarker = 0; private TimeSpan _consumedBufferDuration = TimeSpan.Zero; internal ConcreteMediaPlayerStrategy() { } #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; if (base.Queue.ActiveSong != null) SetChannelVolumes(); } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; if (base.Queue.Count > 0) SetChannelVolumes(); } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return true; } } public override TimeSpan PlatformPlayPosition { get { Song activeSong = base.Queue.ActiveSong; if (activeSong == null) return TimeSpan.Zero; if (_reader == null) return TimeSpan.Zero; ConcreteSoundEffectInstance soundEffectInstanceStrategy = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy(); int sampleOffset = soundEffectInstanceStrategy.GetSamplePosition(); TimeSpan time = _consumedBufferDuration + _soundPlayer.GetSampleDuration(sampleOffset * _reader.Channels * sizeof(short)); return time; } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion private void SetChannelVolumes() { float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; if (_soundPlayer != null) _soundPlayer.Volume = innerVolume; } public override void PlatformPlaySong(Song song) { if (base.Queue.ActiveSong != null) { float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; if (_soundPlayer != null) _soundPlayer.Volume = innerVolume; this.CreatePlayer(((IPlatformSong)song).Strategy); SoundState state = _soundPlayer.State; switch (state) { case SoundState.Playing: return; case SoundState.Paused: _soundPlayer.Resume(); return; case SoundState.Stopped: _consumedBufferDuration = TimeSpan.Zero; _soundPlayer.Volume = innerVolume; _soundPlayer.Play(); ((IPlatformSong)song).Strategy.PlayCount++; return; } } } public override void PlatformPause() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { if (_soundPlayer != null) _soundPlayer.Pause(); } } public override void PlatformResume() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { if (_soundPlayer != null) _soundPlayer.Resume(); } } public override void PlatformStop() { for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; Song activeSong = base.Queue.ActiveSong; if (_soundPlayer != null) { _soundPlayer.Stop(); this.DestroyPlayer(); } } } protected override void PlatformClearQueue() { while (base.Queue.Count > 0) { Song song = base.Queue[0]; if (_soundPlayer != null) { _soundPlayer.Stop(); this.DestroyPlayer(); } base.RemoveQueuedSong(song); } _numSongsInQueuePlayed = 0; //base.ClearQueue(); } struct BufferInfo { public readonly int SizeInBytes; public readonly TimeSpan Duration; public readonly int Marker; public readonly bool IsLast; public BufferInfo(int sizeInBytes, TimeSpan duration, int marker, bool isLast) { this.SizeInBytes = sizeInBytes; this.Duration = duration; this.Marker = marker; this.IsLast = isLast; } public override string ToString() { return string.Format("{{ Marker: {0}, Size: {1}, Duration: {2} }}", Marker, SizeInBytes, Duration); } } internal unsafe void sfxi_BufferNeeded(object sender, EventArgs e) { DynamicSoundEffectInstance sfxi = (DynamicSoundEffectInstance)sender; // Submit Buffer int count = _reader.ReadSamples(_sampleBuffer, 0, _sampleBuffer.Length); if (count > 0) { fixed (float* pSampleBuffer = _sampleBuffer) fixed (byte* pDataBuffer = _dataBuffer) { ConcreteMediaPlayerStrategy.ConvertFloat32ToInt16(pSampleBuffer, (short*)pDataBuffer, count); } int sizeInBytes = count * sizeof(short); sfxi.SubmitBuffer(_dataBuffer, 0, sizeInBytes); //submit BufferInfo Marker unchecked { _lastMarker = (_lastMarker+1); } ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)sfxi).GetStrategy(); cdsei.SubmitMarker(_lastMarker); bool isLastBuffer = _reader.DecodedPosition == _reader.TotalSamples; BufferInfo bufferInfo = new BufferInfo(sizeInBytes, _soundPlayer.GetSampleDuration(sizeInBytes), _lastMarker, isLastBuffer); _bufferInfoMap.Add(_lastMarker, bufferInfo); } if (this.PlatformIsRepeating && base.Queue.Count == 1) // single song repeat { if (_reader.DecodedPosition == _reader.TotalSamples) { _reader.DecodedPosition = 0; // reset reader } } } private void sfxi_Marker(object sender, int markerId) { BufferInfo currBufferInfo = _bufferInfoMap[markerId]; _bufferInfoMap.Remove(markerId); _consumedBufferDuration += currBufferInfo.Duration; if (currBufferInfo.IsLast) // song finished { if (PlatformIsRepeating && base.Queue.Count == 1) // single song repeat { Song activeSong = this.Queue.ActiveSong; long decodedPosition = _reader.DecodedPosition; VorbisReader reader = _reader; ((IPlatformSong)activeSong).Strategy.PlayCount++; OnPlatformMediaStateChanged(); // check if user changed the state during the MediaStateChanged event. if (this.State != MediaState.Playing || this.Queue.Count != 1 || this.Queue.ActiveSong != activeSong || _reader != reader || decodedPosition != _reader.DecodedPosition) return; _consumedBufferDuration = TimeSpan.Zero; OnPlatformActiveSongChanged(); } else { base.OnSongFinishedPlaying(); } } } internal void CreatePlayer(SongStrategy strategy) { if (_soundPlayer == null) { _reader = new VorbisReader(strategy.Filename); strategy.Duration = _reader.TotalTime; _soundPlayer = new DynamicSoundEffectInstance(_reader.SampleRate, (AudioChannels)_reader.Channels); _soundPlayer.BufferNeeded += this.sfxi_BufferNeeded; ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy(); cdsei.Marker += this.sfxi_Marker; } int samples = (_reader.SampleRate * _reader.Channels) / 2; if (_sampleBuffer == null || _sampleBuffer.Length != samples) { _sampleBuffer = new float[samples]; _dataBuffer = new byte[samples * sizeof(short)]; } } internal void DestroyPlayer() { if (_soundPlayer != null) { ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy(); cdsei.Marker -= this.sfxi_Marker; _soundPlayer.BufferNeeded -= this.sfxi_BufferNeeded; _soundPlayer.Dispose(); } _soundPlayer = null; if (_reader != null) _reader.Dispose(); _reader = null; } static unsafe void ConvertFloat32ToInt16(float* fbuffer, short* outBuffer, int samples) { for (int i = samples - 1; i >= 0; i--) { float val = fbuffer[i]; if (val >= -1f) { if (val <= 1f) outBuffer[i] = (short)(val * short.MaxValue); else outBuffer[i] = short.MaxValue; } else outBuffer[i] = -short.MaxValue; } } protected override void Dispose(bool disposing) { if (disposing) { if (_soundPlayer != null) { ConcreteDynamicSoundEffectInstance cdsei = ((IPlatformSoundEffectInstance)_soundPlayer).GetStrategy(); cdsei.Marker -= this.sfxi_Marker; _soundPlayer.BufferNeeded -= this.sfxi_BufferNeeded; _soundPlayer.Dispose(); } _soundPlayer = null; if (_reader != null) _reader.Dispose(); _reader = null; _sampleBuffer = null; _dataBuffer = null; _bufferInfoMap = null; _lastMarker = 0; _consumedBufferDuration = TimeSpan.Zero; } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteSong.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { private Uri _streamSource; internal Uri StreamSource { get { return _streamSource; } } public override Album Album { get { return null; } } public override Artist Artist { get { return null; } } public override Genre Genre { get { return null; } } public override TimeSpan Duration { get { return base.Duration; } } public override bool IsProtected { get { return base.IsProtected; } } public override bool IsRated { get { return base.IsRated; } } public override string Filename { get { return StreamSource.OriginalString; } } public override string Name { get { return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { return base.Rating; } } public override int TrackNumber { get { return base.TrackNumber; } } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteVideo.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/DesktopGL/ConcreteVideoPlayer.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { private Texture2D _lastFrame; private DynamicSoundEffectInstance _soundPlayer; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; PlatformSetVolume(); } } public override TimeSpan PlayPosition { get { throw new NotImplementedException(); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; PlatformSetVolume(); } } internal ConcreteVideoPlayerStrategy() { } public override Texture2D PlatformGetTexture() { if (_lastFrame != null) { if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height) { _lastFrame.Dispose(); _lastFrame = null; } } if (_lastFrame == null) _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Color); throw new NotImplementedException(); } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { base.Video = video; throw new NotImplementedException(); } public override void PlatformPause() { throw new NotImplementedException(); } public override void PlatformResume() { throw new NotImplementedException(); } public override void PlatformStop() { throw new NotImplementedException(); } private void PlatformSetVolume() { float volume = base.Volume; if (IsMuted) volume = 0.0f; if (_soundPlayer != null) _soundPlayer.Volume = volume; } protected override void Dispose(bool disposing) { if (disposing) { if (_soundPlayer != null) { _soundPlayer.Dispose(); _soundPlayer = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/MacOS/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/MacOS/ConcreteVideo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal VideoPlatformStream _videoPlatformStream; internal TimeSpan CurrentPosition { get { return new TimeSpan(_movie.CurrentTime.Value); } } internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { this._videoPlatformStream = new VideoPlatformStream(this.FileName); } internal VideoPlatformStream GetVideoPlatformStream() { return _videoPlatformStream; } protected override void Dispose(bool disposing) { if (disposing) { if (_videoPlatformStream != null) { _videoPlatformStream.Dispose(); _videoPlatformStream = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/MacOS/ConcreteVideoPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; using Foundation; using AVFoundation; using AppKit; using CoreAnimation; using ObjCRuntime; using RectF = CoreGraphics.CGRect; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { NSSDLWindow nsWindow; AVPlayerLayer layer; NSView view; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; throw new NotImplementedException(); } } public override TimeSpan PlayPosition { get { return base.Video.CurrentPosition; } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (base.Video != null) PlatformSetVolume(); } } internal ConcreteVideoPlayerStrategy() { Sdl.Window.SDL_SysWMinfo sys = new Sdl.Window.SDL_SysWMinfo(); Sdl.Window.GetWindowWMInfo(ConcreteGame.ConcreteGameInstance.Window.Handle, ref sys); nsWindow = new NSSDLWindow(sys.window); } public override Texture2D PlatformGetTexture() { throw new NotImplementedException(); } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { base.Video = video; layer = AVPlayerLayer.FromPlayer(base.Video.Player); view = new NSView(nsWindow.ContentView.Frame); view.WantsLayer = true; view.Layer = layer; layer.Frame = nsWindow.ContentView.Bounds; nsWindow.ContentView.AddSubview(view); NSNotificationCenter.DefaultCenter.AddObserver(AVPlayerItem.DidPlayToEndTimeNotification, notification => { Stop(); if (IsLooped) PlatformPlay(); }); base.Video.Volume = _volume; base.Video.Player.Play(); State = MediaState.Playing; } public override void PlatformPause() { base.Video.Player.Pause(); State = MediaState.Paused; } public override void PlatformResume() { base.Video.Volume = _volume; base.Video.Player.Play(); State = MediaState.Playing; } public override void PlatformStop() { var movieView = base.Video.Player; movieView.Pause(); movieView.Seek(CoreMedia.CMTime.Zero); nsWindow.ContentView.WillRemoveSubview(view); view.RemoveFromSuperview(); view.Dispose(); view = null; layer.Dispose(); layer = null; State = MediaState.Stopped; } private void PlatformSetVolume() { base.Video.Volume = _volume; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } internal class NSSDLWindow : AppKit.NSWindow { public NSSDLWindow(IntPtr handle) : base(handle) { } } internal sealed class VideoPlatformStream : IDisposable { private AVPlayer _player; private AVPlayerItem _movie; internal AVPlayer Player { get { return _player; } } internal float Volume { get { return Player.Volume; } set { // TODO When Xamarain fix the set Volume mMovie.Volume = value; } } internal VideoPlatformStream(string filename) { NSError err = new NSError(); _movie = AVPlayerItem.FromUrl(NSUrl.FromFilename(FileName)); _player = new AVPlayer(_movie); } #region IDisposable ~VideoPlatformStream() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (_player != null) { _player.Dispose(); _player = null; } if (_movie != null) { _movie.Dispose(); _movie = null; } } //base.Dispose(disposing); } #endregion } } ================================================ FILE: Platforms/Media/Ref/ConcreteAlbum.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { public override string Name { get { throw new PlatformNotSupportedException(); } } public override Artist Artist { get { throw new PlatformNotSupportedException(); } } public override Genre Genre { get { throw new PlatformNotSupportedException(); } } public override TimeSpan Duration { get { throw new PlatformNotSupportedException(); } } public override bool HasArt { get { throw new PlatformNotSupportedException(); } } public override SongCollection Songs { get { throw new PlatformNotSupportedException(); } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection) { throw new PlatformNotSupportedException(); } public override Stream GetAlbumArt() { throw new PlatformNotSupportedException(); } public override Stream GetThumbnail() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Ref/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/Ref/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { throw new PlatformNotSupportedException(); } } public override SongCollection Songs { get { throw new PlatformNotSupportedException(); } } public override PlaylistCollection Playlists { get { throw new PlatformNotSupportedException(); } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { throw new PlatformNotSupportedException(); } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Ref/ConcreteMediaPlayer.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { internal ConcreteMediaPlayerStrategy() { throw new PlatformNotSupportedException(); } #region Properties public override float PlatformVolume { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override bool PlatformIsMuted { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override bool PlatformIsRepeating { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override bool PlatformIsShuffled { get { throw new PlatformNotSupportedException(); } set { throw new PlatformNotSupportedException(); } } public override bool PlatformGameHasControl { get { throw new PlatformNotSupportedException(); } } public override TimeSpan PlatformPlayPosition { get { throw new PlatformNotSupportedException(); } } protected override bool PlatformUpdateState(ref MediaState state) { throw new PlatformNotSupportedException(); } #endregion public override void PlatformPlaySong(Song song) { throw new PlatformNotSupportedException(); } public override void PlatformPause() { throw new PlatformNotSupportedException(); } public override void PlatformResume() { throw new PlatformNotSupportedException(); } public override void PlatformStop() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Ref/ConcreteSong.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { internal ConcreteSongStrategy(string name, Uri streamSource) : base() { throw new PlatformNotSupportedException(); } public override Album Album { get { throw new PlatformNotSupportedException(); } } public override Artist Artist { get { throw new PlatformNotSupportedException(); } } public override Genre Genre { get { throw new PlatformNotSupportedException(); } } public override TimeSpan Duration { get { throw new PlatformNotSupportedException(); } } public override bool IsProtected { get { throw new PlatformNotSupportedException(); } } public override bool IsRated { get { throw new PlatformNotSupportedException(); } } public override string Filename { get { throw new PlatformNotSupportedException(); } } public override string Name { get { throw new PlatformNotSupportedException(); } } public override int PlayCount { get { throw new PlatformNotSupportedException(); } } public override int Rating { get { throw new PlatformNotSupportedException(); } } public override int TrackNumber { get { throw new PlatformNotSupportedException(); } } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Ref/ConcreteVideo.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/Ref/ConcreteVideoPlayer.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; throw new PlatformNotSupportedException(); } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; throw new PlatformNotSupportedException(); } } public override TimeSpan PlayPosition { get { throw new PlatformNotSupportedException(); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (base.Video != null) PlatformSetVolume(); } } internal ConcreteVideoPlayerStrategy() { throw new PlatformNotSupportedException(); } public override Texture2D PlatformGetTexture() { throw new PlatformNotSupportedException(); } protected override void PlatformUpdateState(ref MediaState state) { throw new PlatformNotSupportedException(); } public override void PlatformPlay(Video video) { throw new PlatformNotSupportedException(); } public override void PlatformPause() { throw new PlatformNotSupportedException(); } public override void PlatformResume() { throw new PlatformNotSupportedException(); } public override void PlatformStop() { throw new PlatformNotSupportedException(); } private void PlatformSetVolume() { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteAlbum.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; using WinFileProperties = Windows.Storage.FileProperties; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; private WinFileProperties.StorageItemThumbnail _thumbnail; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { return this._thumbnail != null; } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection, WinFileProperties.StorageItemThumbnail thumbnail) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; this._thumbnail = thumbnail; } public override Stream GetAlbumArt() { if (this.HasArt) return this._thumbnail.AsStream(); return null; } public override Stream GetThumbnail() { if (this.HasArt) return this._thumbnail.AsStream(); return null; } protected override void Dispose(bool disposing) { if (disposing) { if (this._thumbnail != null) this._thumbnail.Dispose(); } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/WME/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Windows.Storage; using WinFileProperties = Windows.Storage.FileProperties; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { private static AlbumCollection _albumCollection; private static SongCollection _songCollection; private const string CacheFile = "MediaLibrary.cache"; private static StorageFolder _musicFolder; public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return _albumCollection; } } public override SongCollection Songs { get { return _songCollection; } } public override PlaylistCollection Playlists { get { throw new NotImplementedException(); } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { Task.Run(async () => { if (_musicFolder == null) { try { _musicFolder = KnownFolders.MusicLibrary; } catch (Exception e) { Debug.WriteLine("Failed to access Music Library: " + e.Message); _albumCollection = base.CreateAlbumCollection(new List()); _songCollection = base.CreateSongCollection(new List()); return; } } List files = new List(); await this.GetAllFiles(_musicFolder, files); List songList = new List(); List albumList = new List(); Dictionary artists = new Dictionary(); Dictionary albums = new Dictionary(); Dictionary genres = new Dictionary(); Dictionary cache = new Dictionary(); // Read cache StorageFile cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.OpenIfExists); using (Stream baseStream = await cacheFile.OpenStreamForReadAsync()) using (BinaryReader stream = new BinaryReader(baseStream)) try { for (; baseStream.Position < baseStream.Length;) { MusicProperties entry = MusicProperties.Deserialize(stream); cache.Add(entry.Path, entry); } } catch { } // Write cache cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.ReplaceExisting); using (BinaryWriter stream = new BinaryWriter(await cacheFile.OpenStreamForWriteAsync())) { int prevProgress = 0; for (int i = 0; i < files.Count; i++) { StorageFile file = files[i]; try { MusicProperties properties; if (!(cache.TryGetValue(file.Path, out properties) && properties.TryMatch(file))) properties = new MusicProperties(file); properties.Serialize(stream); if (string.IsNullOrWhiteSpace(properties.Title)) continue; Artist artist; if (!artists.TryGetValue(properties.Artist, out artist)) { artist = new Artist(properties.Artist); artists.Add(artist.Name, artist); } Artist albumArtist; if (!artists.TryGetValue(properties.AlbumArtist, out albumArtist)) { albumArtist = new Artist(properties.AlbumArtist); artists.Add(albumArtist.Name, albumArtist); } Genre genre; if (!genres.TryGetValue(properties.Genre, out genre)) { genre = new Genre(properties.Genre); genres.Add(genre.Name, genre); } Album album; if (!albums.TryGetValue(properties.Album, out album)) { WinFileProperties.StorageItemThumbnail thumbnail = Task.Run(async () => await properties.File.GetThumbnailAsync(WinFileProperties.ThumbnailMode.MusicView, 300, WinFileProperties.ThumbnailOptions.ResizeThumbnail)).Result; AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(properties.Album, albumArtist, genre, base.CreateSongCollection(new List()), thumbnail.Type == WinFileProperties.ThumbnailType.Image ? thumbnail : null); album = base.CreateAlbum(albumStrategy); albums.Add(album.Name, album); albumList.Add(album); } ConcreteSongStrategy songStrategy = new ConcreteSongStrategy(); songStrategy.Album = album; songStrategy.Artist = artist; songStrategy.Genre = genre; songStrategy._musicProperties = properties; Song song = base.CreateSong(songStrategy); song.Album.Songs.Add(song); songList.Add(song); } catch (Exception e) { Debug.WriteLine("MediaLibrary exception: " + e.Message); } int progress = 100 * i / files.Count; if (progress > prevProgress) { prevProgress = progress; if (progressCallback != null) progressCallback.Invoke(progress); } } } if (progressCallback != null) progressCallback.Invoke(100); _albumCollection = base.CreateAlbumCollection(albumList); _songCollection = base.CreateSongCollection(songList); }).Wait(); } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } private async Task GetAllFiles(StorageFolder storageFolder, List musicFiles) { foreach (IStorageItem item in await storageFolder.GetItemsAsync()) if (item is StorageFile) { StorageFile file = item as StorageFile; if (file.ContentType.StartsWith("audio") && !file.ContentType.EndsWith("url")) musicFiles.Add(file); } else { StorageFolder folder = item as StorageFolder; await this.GetAllFiles(folder, musicFiles); } } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Windows.ApplicationModel.Core; using Windows.UI.Core; using Microsoft.Xna.Framework.Media; using SharpDX.Multimedia; using MediaFoundation = SharpDX.MediaFoundation; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { // RAYB: This needs to be turned back into a readonly. private MediaFoundation.MediaEngine _mediaEngineEx; private CoreDispatcher _dispatcher; private enum SessionState { Stopped, Started, Paused } private SessionState _sessionState = SessionState.Stopped; internal ConcreteMediaPlayerStrategy() { MediaFoundation.MediaManager.Startup(true); using (MediaFoundation.MediaEngineClassFactory factory = new MediaFoundation.MediaEngineClassFactory()) using (MediaFoundation.MediaEngineAttributes attributes = new MediaFoundation.MediaEngineAttributes { AudioCategory = AudioStreamCategory.GameMedia }) { MediaFoundation.MediaEngineCreateFlags creationFlags = MediaFoundation.MediaEngineCreateFlags.AudioOnly; MediaFoundation.MediaEngine mediaEngine = new MediaFoundation.MediaEngine(factory, attributes, creationFlags, MediaEngineExOnPlaybackEvent); _mediaEngineEx = mediaEngine.QueryInterface(); } _dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; } private void MediaEngineExOnPlaybackEvent(MediaFoundation.MediaEngineEvent mediaEvent, long param1, int param2) { if (mediaEvent == MediaFoundation.MediaEngineEvent.LoadedData) { if (_sessionState == SessionState.Started) _mediaEngineEx.Play(); } if (mediaEvent == MediaFoundation.MediaEngineEvent.Ended) { _sessionState = SessionState.Stopped; _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => base.OnSongFinishedPlaying()).AsTask(); } } #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; _mediaEngineEx.Volume = value; } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; _mediaEngineEx.Muted = value; } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; _mediaEngineEx.Loop = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return true; } } public override TimeSpan PlatformPlayPosition { get { return TimeSpan.FromSeconds(_mediaEngineEx.CurrentTime); } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion public override void PlatformPlaySong(Song song) { _mediaEngineEx.Source = ((IPlatformSong)song).Strategy.ToConcrete().StreamSource.OriginalString; _mediaEngineEx.Load(); _sessionState = SessionState.Started; //We start playing when we get a LoadedData event in MediaEngineExOnPlaybackEvent } public override void PlatformPause() { if (_sessionState == SessionState.Started) { _sessionState = SessionState.Paused; _mediaEngineEx.Pause(); } } public override void PlatformResume() { if (_sessionState == SessionState.Paused) { _mediaEngineEx.Play(); } } public override void PlatformStop() { if (_sessionState != SessionState.Stopped) { _mediaEngineEx.Source = null; } } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteSong.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Windows.Storage; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { private Uri _streamSource; internal MusicProperties _musicProperties; internal Uri StreamSource { get { return _streamSource; } } [CLSCompliant(false)] public StorageFile StorageFile { get { return this._musicProperties.File; } } internal ConcreteSongStrategy() : base() { } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; } public override Album Album { get { return base.Album; } } public override Artist Artist { get { return base.Artist; } } public override Genre Genre { get { return base.Genre; } } public override TimeSpan Duration { get { if (this._musicProperties != null) return this._musicProperties.Duration; return base.Duration; } } public override bool IsProtected { get { if (this._musicProperties != null) return this._musicProperties.IsProtected; return base.IsProtected; } } public override bool IsRated { get { if (this._musicProperties != null) return this._musicProperties.Rating != 0; return base.IsRated; } } public override string Filename { get { if (this._musicProperties != null) return this._musicProperties.Title; return StreamSource.OriginalString; } } public override string Name { get { if (this._musicProperties != null) return this._musicProperties.Title; return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { if (this._musicProperties != null) return this._musicProperties.Rating; return base.Rating; } } public override int TrackNumber { get { if (this._musicProperties != null) return this._musicProperties.TrackNumber; return base.TrackNumber; } } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteVideo.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/ConcreteVideoPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform.Graphics; using DX = SharpDX; using DXGI = SharpDX.DXGI; using DXRaw = SharpDX.Mathematics.Interop; using MediaFoundation = SharpDX.MediaFoundation; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { MediaFoundation.DXGIDeviceManager _devManager; private MediaFoundation.MediaEngine _mediaEngine; private Texture2D _lastFrame; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; throw new NotImplementedException(); } } public override TimeSpan PlayPosition { get { return TimeSpan.FromSeconds(_mediaEngine.CurrentTime); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (base.Video != null) _mediaEngine.Volume = value; } } internal ConcreteVideoPlayerStrategy() { MediaFoundation.MediaManager.Startup(); _devManager = new MediaFoundation.DXGIDeviceManager(); _devManager.ResetDevice(((IPlatformGraphicsDevice)ConcreteGame.ConcreteGameInstance.GraphicsDevice).Strategy.ToConcrete().D3DDevice); using (MediaFoundation.MediaEngineClassFactory factory = new MediaFoundation.MediaEngineClassFactory()) using (MediaFoundation.MediaEngineAttributes attributes = new MediaFoundation.MediaEngineAttributes { VideoOutputFormat = (int)DXGI.Format.B8G8R8A8_UNorm, DxgiManager = _devManager }) { _mediaEngine = new MediaFoundation.MediaEngine(factory, attributes, MediaFoundation.MediaEngineCreateFlags.None, OnMediaEngineEvent); } } #region IAsyncCallback private void OnMediaEngineEvent(MediaFoundation.MediaEngineEvent mediaEvent, long param1, int param2) { if (!_mediaEngine.HasVideo()) return; switch (mediaEvent) { case MediaFoundation.MediaEngineEvent.Play: break; case MediaFoundation.MediaEngineEvent.Ended: if (IsLooped) { PlatformPlay(base.Video); return; } State = MediaState.Stopped; break; } } #endregion IAsyncCallback public override Texture2D PlatformGetTexture() { if (_lastFrame != null) { if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height) { _lastFrame.Dispose(); _lastFrame = null; } } if (_lastFrame == null) _lastFrame = new RenderTarget2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Bgra32, DepthFormat.None); if (base.State == MediaState.Playing) { long pts; if (_mediaEngine.HasVideo() && _mediaEngine.OnVideoStreamTick(out pts) && _mediaEngine.ReadyState >= 2) { DXRaw.RawRectangle region = new DXRaw.RawRectangle(0, 0, base.Video.Width, base.Video.Height); DX.ComObject dstSurfRef = (DX.ComObject)_lastFrame.GetD3D11Resource(); _mediaEngine.TransferVideoFrame(dstSurfRef, null, region, null); } } return _lastFrame; } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { base.Video = video; string assetsLocationFullPath = ((ITitleContainer)TitleContainer.Current).Location; _mediaEngine.Source = System.IO.Path.Combine(assetsLocationFullPath, ((IPlatformVideo)base.Video).Strategy.FileName); _mediaEngine.Play(); State = MediaState.Playing; } public override void PlatformPause() { _mediaEngine.Pause(); State = MediaState.Paused; } public override void PlatformResume() { _mediaEngine.Play(); State = MediaState.Playing; } public override void PlatformStop() { _mediaEngine.Pause(); _mediaEngine.CurrentTime = 0.0; State = MediaState.Stopped; } private void PlatformSetVolume() { _mediaEngine.Volume = base.Volume; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WME/MusicProperties.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Windows.Storage; namespace Microsoft.Xna.Platform.Media { class MusicProperties { public StorageFile File { get; private set; } public string Path { get; private set; } public DateTimeOffset DateCreated { get; private set; } public string Album { get; private set; } public string AlbumArtist { get; private set; } public string Artist { get; private set; } public TimeSpan Duration { get; private set; } public string Genre { get; private set; } public bool IsProtected { get; private set; } public int Rating { get; private set; } public string Title { get; private set; } public int TrackNumber { get; private set; } private MusicProperties() { } public MusicProperties(StorageFile file) { this.File = file; this.Path = this.File.Path; this.DateCreated = this.File.DateCreated; IDictionary properties = Task.Run(async () => await file.Properties.RetrievePropertiesAsync(new String[] { "System.Music.AlbumTitle", "System.Music.AlbumArtist", "System.Music.Artist", "System.Media.Duration", "System.Music.Genre", "System.DRM.IsProtected", "System.Rating", "System.Title", "System.Music.TrackNumber" })).Result; object property; this.Album = (properties.TryGetValue("System.Music.AlbumTitle", out property) ? (string)property : (string)null) ?? ""; this.Artist = (properties.TryGetValue("System.Music.Artist", out property) ? ((string[])property)[0] : (string)null) ?? "Unknown Artist"; this.AlbumArtist = (properties.TryGetValue("System.Music.AlbumArtist", out property) ? (string)property : (string)null) ?? this.Artist; this.Duration = properties.TryGetValue("System.Media.Duration", out property) ? new TimeSpan((long)(ulong)property) : TimeSpan.Zero; this.Genre = (properties.TryGetValue("System.Music.Genre", out property) ? ((string[])property)[0] : (string)null) ?? ""; this.IsProtected = properties.TryGetValue("System.DRM.IsProtected", out property) ? (bool)property : false; this.Rating = properties.TryGetValue("System.Rating", out property) ? (int)(uint)property : 0; this.Title = (properties.TryGetValue("System.Title", out property) ? (string)property : (string)null) ?? ""; this.TrackNumber = properties.TryGetValue("System.Music.TrackNumber", out property) ? (int)(uint)property : 0; } public bool TryMatch(StorageFile file) { if (file != null && file.Path == this.Path && file.DateCreated == this.DateCreated) { this.File = file; return true; } return false; } public static MusicProperties Deserialize(BinaryReader stream) { MusicProperties instance = new MusicProperties(); instance.Path = stream.ReadString(); instance.DateCreated = new DateTimeOffset(stream.ReadInt64(), new TimeSpan(stream.ReadInt64())); instance.Album = stream.ReadString(); instance.AlbumArtist = stream.ReadString(); instance.Artist = stream.ReadString(); instance.Duration = new TimeSpan(stream.ReadInt64()); instance.Genre = stream.ReadString(); instance.IsProtected = stream.ReadBoolean(); instance.Rating = stream.ReadInt32(); instance.Title = stream.ReadString(); instance.TrackNumber = stream.ReadInt32(); return instance; } public void Serialize(BinaryWriter stream) { stream.Write(this.Path); stream.Write(this.DateCreated.Ticks); stream.Write(this.DateCreated.Offset.Ticks); stream.Write(this.Album); stream.Write(this.AlbumArtist); stream.Write(this.Artist); stream.Write(this.Duration.Ticks); stream.Write(this.Genre); stream.Write(this.IsProtected); stream.Write(this.Rating); stream.Write(this.Title); stream.Write(this.TrackNumber); } } } ================================================ FILE: Platforms/Media/WMS/ConcreteAlbum.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { throw new NotImplementedException(); } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; } public override Stream GetAlbumArt() { throw new NotImplementedException(); } public override Stream GetThumbnail() { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WMS/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource("DummpMediaSource", MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/WMS/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return null; } } public override SongCollection Songs { get { return null; } } public override PlaylistCollection Playlists { get { return null; } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WMS/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Media; using SharpDX.Win32; using DX = SharpDX; using DXRaw = SharpDX.Mathematics.Interop; using MediaFoundation = SharpDX.MediaFoundation; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { private MediaFoundation.MediaSession _session; private MediaFoundation.AudioStreamVolume _volumeController; private readonly object _volumeLock = new object(); private MediaFoundation.PresentationClock _clock; private Song _nextSong; private Song _currentSong; private enum SessionState { Stopped, Stopping, Started, Paused, Ended } private SessionState _sessionState = SessionState.Stopped; private Guid _audioStreamVolumeGuid; private readonly Variant _positionCurrent = new Variant(); private readonly Variant _positionBeginning = new Variant { ElementType = VariantElementType.Long, Value = 0L }; private Callback _callback; internal sealed class Callback : MediaFoundation.AsyncCallbackBase { private readonly ConcreteMediaPlayerStrategy _player; public Callback(ConcreteMediaPlayerStrategy concreteMediaPlayer) { this._player = concreteMediaPlayer; } public override void Invoke(MediaFoundation.AsyncResult asyncResult) { _player.Invoke(asyncResult); } } internal ConcreteMediaPlayerStrategy() { // The GUID is specified in a GuidAttribute attached to the class _audioStreamVolumeGuid = Guid.Parse(((GuidAttribute)typeof(MediaFoundation.AudioStreamVolume).GetCustomAttributes(typeof(GuidAttribute), false)[0]).Value); MediaFoundation.MediaManager.Startup(true); MediaFoundation.MediaFactory.CreateMediaSession(null, out _session); _callback = new Callback(this); _session.BeginGetEvent(_callback, null); _clock = _session.Clock.QueryInterface(); } #region IAsyncCallback internal void Invoke(MediaFoundation.AsyncResult asyncResult) { using (MediaFoundation.MediaEvent mediaEvent = _session.EndGetEvent(asyncResult)) { switch (mediaEvent.TypeInfo) { case MediaFoundation.MediaEventTypes.SessionTopologySet: break; case MediaFoundation.MediaEventTypes.SessionTopologyStatus: if (mediaEvent.Get(MediaFoundation.EventAttributeKeys.TopologyStatus) == MediaFoundation.TopologyStatus.Ready) OnTopologyReady(); break; case MediaFoundation.MediaEventTypes.SessionNotifyPresentationTime: break; case MediaFoundation.MediaEventTypes.SessionStarted: break; case MediaFoundation.MediaEventTypes.SessionEnded: _sessionState = SessionState.Ended; base.OnSongFinishedPlaying(); break; case MediaFoundation.MediaEventTypes.SessionStopped: OnSessionStopped(); break; case MediaFoundation.MediaEventTypes.SessionCapabilitiesChanged: break; case MediaFoundation.MediaEventTypes.EndOfPresentation: break; } IDisposable evValue = mediaEvent.Value.Value as IDisposable; if (evValue != null) evValue.Dispose(); } _session.BeginGetEvent(_callback, null); } #endregion IAsyncCallback #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; SetChannelVolumes(); } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; SetChannelVolumes(); } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return true; } } public override TimeSpan PlatformPlayPosition { get { SessionState sessionState = _sessionState; switch (sessionState) { case SessionState.Started: return TimeSpan.Zero; case SessionState.Paused: return TimeSpan.Zero; case SessionState.Stopping: case SessionState.Stopped: { try { return TimeSpan.FromTicks(_clock.Time); } catch (DX.SharpDXException) { // The presentation clock is most likely not quite ready yet return TimeSpan.Zero; } } case SessionState.Ended: return TimeSpan.Zero; default: throw new InvalidOperationException(); } } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion private void SetChannelVolumes() { lock (_volumeLock) { if (_volumeController == null) return; float volume = base.PlatformIsMuted ? 0f : base.PlatformVolume; for (int i = 0; i < _volumeController.ChannelCount; i++) { _volumeController.SetChannelVolume(i, volume); } } } public override void PlatformPlaySong(Song song) { SessionState sessionState = _sessionState; switch (sessionState) { case SessionState.Started: { if (_currentSong == song) { _sessionState = SessionState.Started; _session.Start(null, _positionBeginning); } else { // The new song will be started after the SessionStopped event is received _nextSong = song; // The session needs to be stopped to reset the play position _sessionState = SessionState.Stopping; _session.Stop(); } } break; case SessionState.Paused: { if (_currentSong == song) { _sessionState = SessionState.Started; _session.Start(null, _positionBeginning); } else { // The new song will be started after the SessionStopped event is received _nextSong = song; // The session needs to be stopped to reset the play position _sessionState = SessionState.Stopping; _session.Stop(); } } break; case SessionState.Stopping: { // The song will be started after the SessionStopped event is received _nextSong = song; } break; case SessionState.Stopped: { if (_currentSong != song) StartNewSong(song); _sessionState = SessionState.Started; _session.Start(null, _positionBeginning); } break; case SessionState.Ended: { if (_currentSong == song) { _sessionState = SessionState.Started; _session.Start(null, _positionBeginning); } else { // The new song will be started after the SessionStopped event is received _nextSong = song; // The session needs to be stopped to reset the play position _sessionState = SessionState.Stopping; // The play position needs to be reset before stopping otherwise the next song may not start playing _session.Start(null, _positionBeginning); _session.Stop(); } } break; default: throw new InvalidOperationException(); } } public override void PlatformPause() { SessionState sessionState = _sessionState; switch (sessionState) { case SessionState.Started: { _sessionState = SessionState.Paused; _session.Pause(); } break; case SessionState.Paused: break; case SessionState.Stopping: break; case SessionState.Stopped: break; case SessionState.Ended: break; default: throw new InvalidOperationException(); } } public override void PlatformResume() { SessionState sessionState = _sessionState; switch (sessionState) { case SessionState.Started: break; case SessionState.Paused: { _sessionState = SessionState.Started; _session.Start(null, _positionCurrent); } break; case SessionState.Stopping: break; case SessionState.Stopped: break; case SessionState.Ended: break; default: throw new InvalidOperationException(); } } public override void PlatformStop() { SessionState sessionState = _sessionState; switch (sessionState) { case SessionState.Started: { _sessionState = SessionState.Stopping; _session.Stop(); } break; case SessionState.Paused: { _sessionState = SessionState.Stopping; _session.Stop(); } break; case SessionState.Stopping: { } break; case SessionState.Stopped: { } break; case SessionState.Ended: { _sessionState = SessionState.Stopping; // The play position needs to be reset before stopping otherwise the next song may not start playing _session.Start(null, _positionBeginning); _session.Stop(); } break; default: throw new InvalidOperationException(); } } private void StartNewSong(Song song) { lock (_volumeLock) { if (_volumeController != null) { _volumeController.Dispose(); _volumeController = null; } } _currentSong = song; MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete().GetMediaPlatformStream(); _session.SetTopology(MediaFoundation.SessionSetTopologyFlags.Immediate, mediaPlatformStream.Topology); // The volume service won't be available until the session topology // is ready, so we now need to wait for the event indicating this } private void OnTopologyReady() { lock (_volumeLock) { IntPtr volumeObjectPtr; MediaFoundation.MediaFactory.GetService(_session, MediaFoundation.MediaServiceKeys.StreamVolume, _audioStreamVolumeGuid, out volumeObjectPtr); _volumeController = DX.CppObject.FromPointer(volumeObjectPtr); } SetChannelVolumes(); } private void OnSessionStopped() { _sessionState = SessionState.Stopped; if (_nextSong != null) { if (_nextSong != _currentSong) StartNewSong(_nextSong); _sessionState = SessionState.Started; _session.Start(null, _positionBeginning); _nextSong = null; } } protected override void Dispose(bool disposing) { if (disposing) { } MediaFoundation.MediaManager.Shutdown(); base.Dispose(disposing); } } internal sealed class MediaPlatformStream : IDisposable { private MediaFoundation.Topology _topology; internal MediaFoundation.Topology Topology { get { return _topology; } } internal MediaPlatformStream(Uri streamSource) { MediaFoundation.MediaManager.Startup(true); this._topology = CreateTopology(streamSource); } private MediaFoundation.Topology CreateTopology(Uri streamSource) { MediaFoundation.Topology topology; MediaFoundation.MediaFactory.CreateTopology(out topology); SharpDX.MediaFoundation.MediaSource mediaSource; { string filename = streamSource.OriginalString; MediaFoundation.SourceResolver resolver = new MediaFoundation.SourceResolver(); DX.ComObject source = (DX.ComObject)resolver.CreateObjectFromURL(filename, MediaFoundation.SourceResolverFlags.MediaSource); mediaSource = source.QueryInterface(); resolver.Dispose(); source.Dispose(); } MediaFoundation.PresentationDescriptor presDesc; mediaSource.CreatePresentationDescriptor(out presDesc); for (int i = 0; i < presDesc.StreamDescriptorCount; i++) { DXRaw.RawBool selected; MediaFoundation.StreamDescriptor desc; presDesc.GetStreamDescriptorByIndex(i, out selected, out desc); if (selected) { MediaFoundation.TopologyNode sourceNode; MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.SourceStreamNode, out sourceNode); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.Source, mediaSource); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.PresentationDescriptor, presDesc); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.StreamDescriptor, desc); MediaFoundation.TopologyNode outputNode; MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.OutputNode, out outputNode); var typeHandler = desc.MediaTypeHandler; Guid majorType = typeHandler.MajorType; if (majorType != MediaFoundation.MediaTypeGuids.Audio) throw new NotSupportedException("The song contains video data!"); MediaFoundation.Activate activate; MediaFoundation.MediaFactory.CreateAudioRendererActivate(out activate); outputNode.Object = activate; topology.AddNode(sourceNode); topology.AddNode(outputNode); sourceNode.ConnectOutput(0, outputNode, 0); sourceNode.Dispose(); outputNode.Dispose(); typeHandler.Dispose(); activate.Dispose(); } desc.Dispose(); } presDesc.Dispose(); mediaSource.Dispose(); return topology; } #region IDisposable ~MediaPlatformStream() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (_topology != null) { _topology.Dispose(); _topology = null; } } MediaFoundation.MediaManager.Shutdown(); //base.Dispose(disposing); } #endregion } } ================================================ FILE: Platforms/Media/WMS/ConcreteSong.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { internal MediaPlatformStream _mediaPlatformStream; private Uri _streamSource; internal Uri StreamSource { get { return _streamSource; } } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; this._mediaPlatformStream = new MediaPlatformStream(this._streamSource); } internal MediaPlatformStream GetMediaPlatformStream() { return _mediaPlatformStream; } public override Album Album { get { return null; } } public override Artist Artist { get { return null; } } public override Genre Genre { get { return null; } } public override TimeSpan Duration { get { return base.Duration; } } public override bool IsProtected { get { return base.IsProtected; } } public override bool IsRated { get { return base.IsRated; } } public override string Filename { get { return StreamSource.OriginalString; } } public override string Name { get { return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { return base.Rating; } } public override int TrackNumber { get { return base.TrackNumber; } } protected override void Dispose(bool disposing) { if (disposing) { if (_mediaPlatformStream != null) { _mediaPlatformStream.Dispose(); _mediaPlatformStream = null; } } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WMS/ConcreteVideo.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal VideoPlatformStream _videoPlatformStream; internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { this._videoPlatformStream = new VideoPlatformStream(this.FileName); } internal VideoPlatformStream GetVideoPlatformStream() { return _videoPlatformStream; } protected override void Dispose(bool disposing) { if (disposing) { if (_videoPlatformStream != null) { _videoPlatformStream.Dispose(); _videoPlatformStream = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/WMS/ConcreteVideoPlayer.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Runtime.InteropServices; using System.Diagnostics; using System.Threading; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using DX = SharpDX; using SharpDX.Win32; using DXRaw = SharpDX.Mathematics.Interop; using MediaFoundation = SharpDX.MediaFoundation; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { private MediaFoundation.MediaSession _session; private MediaFoundation.AudioStreamVolume _volumeController; private MediaFoundation.PresentationClock _clock; private Texture2D _lastFrame; private readonly Variant _positionCurrent = new Variant(); private readonly Variant _positionBeginning = new Variant { ElementType = VariantElementType.Long, Value = 0L }; private Callback _callback; private class Callback : MediaFoundation.AsyncCallbackBase { private ConcreteVideoPlayerStrategy _player; public Callback(ConcreteVideoPlayerStrategy player) { _player = player; } public override void Invoke(MediaFoundation.AsyncResult asyncResult) { _player.Invoke(asyncResult); } } public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; if (_volumeController != null) SetChannelVolumes(); } } public override TimeSpan PlayPosition { get { return TimeSpan.FromTicks(_clock.Time); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (base.Video != null) if (_volumeController != null) SetChannelVolumes(); } } internal ConcreteVideoPlayerStrategy() { MediaFoundation.MediaManager.Startup(true); MediaFoundation.MediaFactory.CreateMediaSession(null, out _session); } #region IAsyncCallback internal void Invoke(MediaFoundation.AsyncResult asyncResult) { using (MediaFoundation.MediaEvent mediaEvent = _session.EndGetEvent(asyncResult)) { switch (mediaEvent.TypeInfo) { case MediaFoundation.MediaEventTypes.SessionTopologySet: break; case MediaFoundation.MediaEventTypes.SessionTopologyStatus: MediaFoundation.TopologyStatus topologyStatus = mediaEvent.Get(MediaFoundation.EventAttributeKeys.TopologyStatus); if (topologyStatus == MediaFoundation.TopologyStatus.Ready) OnTopologyReady(); break; case MediaFoundation.MediaEventTypes.SessionNotifyPresentationTime: break; case MediaFoundation.MediaEventTypes.SessionStarted: break; case MediaFoundation.MediaEventTypes.SessionEnded: if (IsLooped) { _session.Start(null, _positionBeginning); } break; case MediaFoundation.MediaEventTypes.SessionStopped: break; case MediaFoundation.MediaEventTypes.SessionCapabilitiesChanged: break; case MediaFoundation.MediaEventTypes.EndOfPresentation: break; case MediaFoundation.MediaEventTypes.Error: DX.Result status = mediaEvent.Status; break; } IDisposable evValue = mediaEvent.Value.Value as IDisposable; if (evValue != null) evValue.Dispose(); } _session.BeginGetEvent(_callback, null); } #endregion IAsyncCallback public override Texture2D PlatformGetTexture() { if (_lastFrame != null) { if (_lastFrame.Width != base.Video.Width || _lastFrame.Height != base.Video.Height) { _lastFrame.Dispose(); _lastFrame = null; } } if (_lastFrame == null) _lastFrame = new Texture2D(((IPlatformVideo)base.Video).Strategy.GraphicsDevice, base.Video.Width, base.Video.Height, false, SurfaceFormat.Bgr32); VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GetVideoPlatformStream(); byte[] texData = _videoPlatformStream.SampleGrabber.TextureData; if (texData != null) _lastFrame.SetData(texData); return _lastFrame; } protected override void PlatformUpdateState(ref MediaState state) { if (_clock != null) { MediaFoundation.ClockState clockState; _clock.GetState(0, out clockState); switch (clockState) { case MediaFoundation.ClockState.Running: state = MediaState.Playing; return; case MediaFoundation.ClockState.Paused: state = MediaState.Paused; return; } } state = MediaState.Stopped; } public override void PlatformPlay(Video video) { base.Video = video; // Cleanup the last video first. if (State != MediaState.Stopped) { _session.Stop(); _session.ClearTopologies(); _session.Close(); if (_volumeController != null) { _volumeController.Dispose(); _volumeController = null; } _clock.Dispose(); } //create the callback if it hasn't been created yet if (_callback == null) { _callback = new Callback(this); _session.BeginGetEvent(_callback, null); } // Set the new video. VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GetVideoPlatformStream(); _session.SetTopology(MediaFoundation.SessionSetTopologyFlags.Immediate, _videoPlatformStream.Topology); // Get the clock. _clock = _session.Clock.QueryInterface(); // Start playing. _session.Start(null, _positionCurrent); State = MediaState.Playing; // XNA doesn't return until the video is playing const int timeOutMs = 500; Stopwatch timer = Stopwatch.StartNew(); while (State != MediaState.Playing) { Thread.Sleep(0); if (timer.ElapsedMilliseconds > timeOutMs) { timer.Stop(); // attempt to stop to fix any bad state if (base.Video != null) PlatformStop(); throw new InvalidOperationException("cannot start video"); } } timer.Stop(); } public override void PlatformPause() { _session.Pause(); State = MediaState.Paused; } public override void PlatformResume() { _session.Start(null, _positionCurrent); State = MediaState.Playing; } public override void PlatformStop() { _session.ClearTopologies(); _session.Stop(); _session.Close(); if (_volumeController != null) { _volumeController.Dispose(); _volumeController = null; } if (_clock != null) { _clock.Dispose(); } _clock = null; State = MediaState.Stopped; } private void SetChannelVolumes() { if (_volumeController != null && !_volumeController.IsDisposed) { float volume = base.Volume; if (IsMuted) volume = 0.0f; for (int i = 0; i < _volumeController.ChannelCount; i++) { _volumeController.SetChannelVolume(i, volume); } } } private void OnTopologyReady() { if (_session.IsDisposed) return; // HACK: Need SharpDX to fix this. // The GUID is specified in a GuidAttribute attached to the class Type audioStreamVolumeType = typeof(MediaFoundation.AudioStreamVolume); GuidAttribute audioStreamVolumeGuidAttrib = (GuidAttribute)audioStreamVolumeType.GetCustomAttributes(typeof(GuidAttribute), false)[0]; Guid audioStreamVolumeGuid = Guid.Parse(audioStreamVolumeGuidAttrib.Value); // Get the volume interface. IntPtr volumeObjectPtr; MediaFoundation.MediaFactory.GetService(_session, MediaFoundation.MediaServiceKeys.StreamVolume, audioStreamVolumeGuid, out volumeObjectPtr); _volumeController = DX.CppObject.FromPointer(volumeObjectPtr); SetChannelVolumes(); } protected override void Dispose(bool disposing) { if (disposing) { if (_lastFrame != null) _lastFrame.Dispose(); _lastFrame = null; } MediaFoundation.MediaManager.Shutdown(); base.Dispose(disposing); } } internal sealed class VideoPlatformStream : IDisposable { private MediaFoundation.Topology _topology; private VideoSampleGrabber _sampleGrabber; MediaFoundation.MediaType _mediaType; internal MediaFoundation.Topology Topology { get { return _topology; } } internal VideoSampleGrabber SampleGrabber { get { return _sampleGrabber; } } internal VideoPlatformStream(string filename) { MediaFoundation.MediaManager.Startup(true); MediaFoundation.MediaFactory.CreateTopology(out _topology); MediaFoundation.MediaSource mediaSource; { MediaFoundation.SourceResolver resolver = new MediaFoundation.SourceResolver(); MediaFoundation.ObjectType otype; DX.ComObject source = (DX.ComObject)resolver.CreateObjectFromURL(filename, MediaFoundation.SourceResolverFlags.MediaSource, null, out otype); mediaSource = source.QueryInterface(); resolver.Dispose(); source.Dispose(); } MediaFoundation.PresentationDescriptor presDesc; mediaSource.CreatePresentationDescriptor(out presDesc); for (int i = 0; i < presDesc.StreamDescriptorCount; i++) { DXRaw.RawBool selected; MediaFoundation.StreamDescriptor desc; presDesc.GetStreamDescriptorByIndex(i, out selected, out desc); if (selected) { MediaFoundation.TopologyNode sourceNode; MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.SourceStreamNode, out sourceNode); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.Source, mediaSource); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.PresentationDescriptor, presDesc); sourceNode.Set(MediaFoundation.TopologyNodeAttributeKeys.StreamDescriptor, desc); MediaFoundation.TopologyNode outputNode; MediaFoundation.MediaFactory.CreateTopologyNode(MediaFoundation.TopologyType.OutputNode, out outputNode); Guid majorType = desc.MediaTypeHandler.MajorType; if (majorType == MediaFoundation.MediaTypeGuids.Video) { _mediaType = new MediaFoundation.MediaType(); _mediaType.Set(MediaFoundation.MediaTypeAttributeKeys.MajorType, MediaFoundation.MediaTypeGuids.Video); // Specify that we want the data to come in as RGB32. _mediaType.Set(MediaFoundation.MediaTypeAttributeKeys.Subtype, new Guid("00000016-0000-0010-8000-00AA00389B71")); _sampleGrabber = new VideoSampleGrabber(); MediaFoundation.Activate activate = CreateSampleGrabberSinkActivate(_mediaType, _sampleGrabber); outputNode.Object = activate; } if (majorType == MediaFoundation.MediaTypeGuids.Audio) { MediaFoundation.Activate activate; MediaFoundation.MediaFactory.CreateAudioRendererActivate(out activate); outputNode.Object = activate; } _topology.AddNode(sourceNode); _topology.AddNode(outputNode); sourceNode.ConnectOutput(0, outputNode, 0); sourceNode.Dispose(); outputNode.Dispose(); } desc.Dispose(); } presDesc.Dispose(); mediaSource.Dispose(); } [DllImport("mf.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "MFCreateSampleGrabberSinkActivate")] private unsafe static extern int MFCreateSampleGrabberSinkActivate(void* pMediaType, void* pCallback, void* pActivateOut); private unsafe static MediaFoundation.Activate CreateSampleGrabberSinkActivate(MediaFoundation.MediaType mediaType, MediaFoundation.SampleGrabberSinkCallback callback) { MediaFoundation.Activate activate = null; IntPtr activatePtr = IntPtr.Zero; IntPtr callbackPtr = DX.CppObject.ToCallbackPtr(callback); // CreateSampleGrabberSinkActivate(...) was removed in 'Use SharpGenTools.Sdk for Codegen #988' // https://github.com/sharpdx/SharpDX/pull/988 //MediaFoundation.MediaFactory.CreateSampleGrabberSinkActivate(_mediaType, _sampleGrabber, out activate); DX.Result result = MFCreateSampleGrabberSinkActivate( (void*)mediaType.NativePointer, (void*)callbackPtr, &activatePtr); if (activatePtr != IntPtr.Zero) activate = new MediaFoundation.Activate(activatePtr); result.CheckError(); return activate; } #region IDisposable ~VideoPlatformStream() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (_topology != null) { _topology.Dispose(); _topology = null; } if (_sampleGrabber != null) { _sampleGrabber.Dispose(); _sampleGrabber = null; } } MediaFoundation.MediaManager.Shutdown(); //base.Dispose(disposing); } #endregion } } ================================================ FILE: Platforms/Media/WMS/VideoSampleGrabber.cs ================================================ using System; using System.Runtime.InteropServices; using SharpDX.MediaFoundation; using DX = SharpDX; namespace Microsoft.Xna.Platform.Media { internal class VideoSampleGrabber : DX.CallbackBase, SampleGrabberSinkCallback { internal byte[] TextureData { get; private set; } public void OnProcessSample(Guid guidMajorMediaType, int dwSampleFlags, long llSampleTime, long llSampleDuration, IntPtr sampleBufferRef, int dwSampleSize) { if (TextureData == null || TextureData.Length != dwSampleSize) TextureData = new byte[dwSampleSize]; Marshal.Copy(sampleBufferRef, TextureData, 0, dwSampleSize); } public void OnSetPresentationClock(PresentationClock presentationClockRef) { } public void OnShutdown() { } public void OnClockPause(long systemTime) { } public void OnClockRestart(long systemTime) { } public void OnClockSetRate(long systemTime, float flRate) { } public void OnClockStart(long systemTime, long llClockStartOffset) { } public void OnClockStop(long hnsSystemTime) { } } } ================================================ FILE: Platforms/Media/iOS/ConcreteAlbum.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Media; using CoreGraphics; using MediaPlayer; using UIKit; namespace Microsoft.Xna.Platform.Media { internal class ConcreteAlbumStrategy : AlbumStrategy { private string _name; private Artist _artist; private Genre _genre; private SongCollection _songs; private MPMediaItemArtwork _thumbnail; public override string Name { get { return this._name; } } public override Artist Artist { get { return this._artist; } } public override Genre Genre { get { return this._genre; } } public override TimeSpan Duration { get { throw new NotImplementedException(); } } public override bool HasArt { get { // If album art is missing the bounds will be: Infinity, Infinity, 0, 0 return this._thumbnail != null && this._thumbnail.Bounds.Width != 0; } } public override SongCollection Songs { get { return this._songs; } } internal ConcreteAlbumStrategy(string name, Artist artist, Genre genre, SongCollection songCollection, MPMediaItemArtwork thumbnail) { this._name = name; this._artist = artist; this._genre = genre; this._songs = songCollection; this._thumbnail = thumbnail; } public override Stream GetAlbumArt() { throw new NotImplementedException(); } public override Stream GetThumbnail() { throw new NotImplementedException(); } [CLSCompliant(false)] public UIImage Platform_GetAlbumArt(int width = 0, int height = 0) { if (width == 0) width = (int)this._thumbnail.Bounds.Width; if (height == 0) height = (int)this._thumbnail.Bounds.Height; return this._thumbnail.ImageWithSize(new CGSize(width, height)); } [CLSCompliant(false)] public UIImage Platform_GetThumbnail() { return this.Platform_GetAlbumArt(220, 220); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/iOS/ConcreteMediaFactory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using UIKit; namespace Microsoft.Xna.Platform.Media { public sealed class ConcreteMediaFactory : MediaFactory { public override MediaLibraryStrategy CreateMediaLibraryStrategy() { return new ConcreteMediaLibraryStrategy(); } public override MediaLibraryStrategy CreateMediaLibraryStrategy(MediaSource mediaSource) { return new ConcreteMediaLibraryStrategy(mediaSource); } public override MediaPlayerStrategy CreateMediaPlayerStrategy() { return new ConcreteMediaPlayerStrategy(); } public override SongStrategy CreateSongStrategy(string name, Uri streamSource) { return new ConcreteSongStrategy(name, streamSource); } public override VideoPlayerStrategy CreateVideoPlayerStrategy() { return new ConcreteVideoPlayerStrategy(); } public override VideoStrategy CreateVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan timeSpan) { return new ConcreteVideoStrategy(graphicsDevice, fileName, timeSpan); } public override IList GetAvailableMediaSources() { MediaSource[] result = { base.CreateMediaSource(UIDevice.CurrentDevice.SystemName, MediaSourceType.LocalDevice) }; return result; } } } ================================================ FILE: Platforms/Media/iOS/ConcreteMediaLibrary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Media; using Foundation; using MediaPlayer; namespace Microsoft.Xna.Platform.Media { internal class ConcreteMediaLibraryStrategy : MediaLibraryStrategy { private static AlbumCollection _albumCollection; private static SongCollection _songCollection; //private static readonly NSString MPMediaPlaylistPropertyName = new NSString(MPMediaPlaylistProperty.Name); public override MediaSource MediaSource { get { return base.MediaSource; } } public override AlbumCollection Albums { get { return _albumCollection; } } public override SongCollection Songs { get { return _songCollection; } } public override PlaylistCollection Playlists { get { throw new NotImplementedException(); } } //public override ArtistCollection Artists //{ // get { return base.Artists; } //} //public override GenreCollection Genres //{ // get { return base.Genres; } //} internal ConcreteMediaLibraryStrategy() : base() { } internal ConcreteMediaLibraryStrategy(MediaSource mediaSource) : base(mediaSource) { throw new NotSupportedException("Initializing from MediaSource is not supported"); } public override void Load(Action progressCallback = null) { List songList = new List(); List albumList = new List(); foreach (MPMediaItemCollection collection in MPMediaQuery.AlbumsQuery.Collections) { NSObject nsAlbumArtist = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumArtistProperty); NSObject nsAlbumName = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumTitleProperty); NSObject nsAlbumGenre = collection.RepresentativeItem.ValueForProperty(MPMediaItem.GenreProperty); string albumArtist = nsAlbumArtist == null ? "Unknown Artist" : nsAlbumArtist.ToString(); string albumName = nsAlbumName == null ? "Unknown Album" : nsAlbumName.ToString(); string albumGenre = nsAlbumGenre == null ? "Unknown Genre" : nsAlbumGenre.ToString(); MPMediaItemArtwork thumbnail = collection.RepresentativeItem.ValueForProperty(MPMediaItem.ArtworkProperty) as MPMediaItemArtwork; List albumSongs = new List((int)collection.Count); AlbumStrategy albumStrategy = new ConcreteAlbumStrategy(albumName, new Artist(albumArtist), new Genre(albumGenre), base.CreateSongCollection(albumSongs), thumbnail); Album album = base.CreateAlbum(albumStrategy); albumList.Add(album); foreach (MPMediaItem item in collection.Items) { NSObject nsArtist = item.ValueForProperty(MPMediaItem.ArtistProperty); NSObject nsTitle = item.ValueForProperty(MPMediaItem.TitleProperty); NSObject nsGenre = item.ValueForProperty(MPMediaItem.GenreProperty); NSUrl assetUrl = item.ValueForProperty(MPMediaItem.AssetURLProperty) as NSUrl; if (nsTitle == null || assetUrl == null) // The Asset URL check will exclude iTunes match items from the Media Library that are not downloaded, but show up in the music app continue; string artist = nsArtist == null ? "Unknown Artist" : nsArtist.ToString(); string title = nsTitle.ToString(); string genre = nsGenre == null ? "Unknown Genre" : nsGenre.ToString(); TimeSpan duration = TimeSpan.FromSeconds(((NSNumber)item.ValueForProperty(MPMediaItem.PlaybackDurationProperty)).FloatValue); ConcreteSongStrategy songStrategy = new ConcreteSongStrategy(); songStrategy.Album = album; songStrategy.Artist = new Artist(artist); songStrategy.Genre = new Genre(genre); songStrategy.Name = title; songStrategy.Duration = duration; #if TVOS ((ConcreteSongStrategy)songStrategy)._assetUrl = assetUrl; #endif ((ConcreteSongStrategy)songStrategy)._mediaItem = item; Song song = base.CreateSong(songStrategy); albumSongs.Add(song); songList.Add(song); } } _albumCollection = base.CreateAlbumCollection(albumList); _songCollection = base.CreateSongCollection(songList); /*_playLists = new PlaylistCollection(); MPMediaQuery playlists = new MPMediaQuery(); playlists.GroupingType = MPMediaGrouping.Playlist; for (int i = 0; i < playlists.Collections.Length; i++) { MPMediaItemCollection item = playlists.Collections[i]; Playlist list = new Playlist(); list.Name = playlists.Items[i].ValueForProperty(MPMediaPlaylistPropertyName).ToString(); for (int k = 0; k < item.Items.Length; k++) { TimeSpan time = TimeSpan.Parse(item.Items[k].ValueForProperty(MPMediaItem.PlaybackDurationProperty).ToString()); list.Duration += time; } _playLists.Add(list); }*/ } public override void SavePicture(string name, byte[] imageBuffer) { throw new NotImplementedException(); } public override void SavePicture(string name, Stream source) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/iOS/ConcreteMediaPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; using AudioToolbox; using AVFoundation; using CoreMedia; using Foundation; using MediaPlayer; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteMediaPlayerStrategy : MediaPlayerStrategy { internal ConcreteMediaPlayerStrategy() { } #region Properties public override float PlatformVolume { get { return base.PlatformVolume; } set { base.PlatformVolume = value; if (base.Queue.ActiveSong != null) SetChannelVolumes(); } } public override bool PlatformIsMuted { get { return base.PlatformIsMuted; } set { base.PlatformIsMuted = value; if (base.Queue.Count > 0) SetChannelVolumes(); } } public override bool PlatformIsRepeating { get { return base.PlatformIsRepeating; } set { base.PlatformIsRepeating = value; } } public override bool PlatformIsShuffled { get { return base.PlatformIsShuffled; } set { base.PlatformIsShuffled = value; } } public override bool PlatformGameHasControl { get { return !AVAudioSession.SharedInstance().OtherAudioPlaying; } } public override TimeSpan PlatformPlayPosition { get { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete().GetMediaPlatformStream(); AVPlayer player = mediaPlatformStream.Player; return TimeSpan.FromSeconds(player.CurrentTime.Seconds); } return TimeSpan.Zero; } } internal void PlatformSetPlayPosition(TimeSpan value) { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete().GetMediaPlatformStream(); AVPlayer player = mediaPlatformStream.Player; player.Seek(CMTime.FromSeconds(value.TotalSeconds, 1000)); } } protected override bool PlatformUpdateState(ref MediaState state) { return false; } #endregion private void SetChannelVolumes() { float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; MediaPlatformStream mediaPlatformStream = ((IPlatformSong)queuedSong).Strategy.ToConcrete().GetMediaPlatformStream(); if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; if (player.Volume != innerVolume) player.Volume = innerVolume; } } } public override void PlatformPlaySong(Song song) { if (base.Queue.ActiveSong != null) { MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete().GetMediaPlatformStream(); mediaPlatformStream.SetEventHandler(OnSongFinishedPlaying); float innerVolume = base.PlatformIsMuted ? 0.0f : base.PlatformVolume; if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; if (player.Volume != innerVolume) player.Volume = innerVolume; } if (mediaPlatformStream.Player == null) { // MediaLibrary items are lazy loaded if (((IPlatformSong)song).Strategy.ToConcrete().AssetUrl != null) mediaPlatformStream.CreatePlayer(((IPlatformSong)song).Strategy.ToConcrete().AssetUrl); else return; } AVPlayer player2 = mediaPlatformStream.Player; player2.Seek(CMTime.Zero); // Seek to start to ensure playback at the start. player2.Play(); ((IPlatformSong)song).Strategy.PlayCount++; } } public override void PlatformPause() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete().GetMediaPlatformStream(); if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; player.Pause(); } } } public override void PlatformResume() { Song activeSong = base.Queue.ActiveSong; if (activeSong != null) { MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete().GetMediaPlatformStream(); if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; player.Play(); } } } public override void PlatformStop() { for (int i = 0; i < base.Queue.Count; i++) { Song queuedSong = base.Queue[i]; Song activeSong = base.Queue.ActiveSong; MediaPlatformStream mediaPlatformStream = ((IPlatformSong)activeSong).Strategy.ToConcrete().GetMediaPlatformStream(); if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; player.Pause(); ((IPlatformSong)activeSong).Strategy.PlayCount = 0; } } } protected override void PlatformClearQueue() { while (base.Queue.Count > 0) { Song song = base.Queue[0]; MediaPlatformStream mediaPlatformStream = ((IPlatformSong)song).Strategy.ToConcrete().GetMediaPlatformStream(); if (mediaPlatformStream.Player != null) { AVPlayer player = mediaPlatformStream.Player; player.Pause(); ((IPlatformSong)song).Strategy.PlayCount = 0; } base.RemoveQueuedSong(song); } _numSongsInQueuePlayed = 0; //base.ClearQueue(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } internal sealed class MediaPlatformStream : IDisposable { private AVPlayer _player; // TODO: Move _player to MediaPlayer private NSObject _playToEndObserver; private AVPlayerItem _sound; internal AVPlayer Player { get { return _player; } } internal MediaPlatformStream(Uri streamSource) { NSUrl nsUrl = NSUrl.FromFilename(streamSource.OriginalString); this.CreatePlayer(nsUrl); } internal void CreatePlayer(NSUrl url) { _sound = AVPlayerItem.FromUrl(url); _player = AVPlayer.FromPlayerItem(_sound); _playToEndObserver = AVPlayerItem.Notifications.ObserveDidPlayToEndTime(OnFinishedPlaying); } internal delegate void FinishedPlayingHandler(); event FinishedPlayingHandler DonePlaying; private void OnFinishedPlaying(object sender, NSNotificationEventArgs args) { FinishedPlayingHandler handler = DonePlaying; if (handler != null) handler(); } /// /// Set the event handler for "Finished Playing". Done this way to prevent multiple bindings. /// internal void SetEventHandler(FinishedPlayingHandler handler) { if (DonePlaying == null) DonePlaying += handler; } #region IDisposable ~MediaPlatformStream() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (_sound != null) { _playToEndObserver.Dispose(); _sound.Dispose(); _player.Dispose(); } _playToEndObserver = null; _sound = null; _player = null; } //base.Dispose(disposing); } #endregion } } ================================================ FILE: Platforms/Media/iOS/ConcreteSong.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Media; using Foundation; using MediaPlayer; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteSongStrategy : SongStrategy { internal MediaPlatformStream _mediaPlatformStream; private Uri _streamSource; #if !TVOS internal MPMediaItem _mediaItem; #endif internal NSUrl _assetUrl; internal Uri StreamSource { get { return _streamSource; } } [CLSCompliant(false)] public NSUrl AssetUrl { get { return this._assetUrl; } } internal ConcreteSongStrategy() : base() { } internal ConcreteSongStrategy(string name, Uri streamSource) : base() { this.Name = name; this._streamSource = streamSource; this._mediaPlatformStream = new MediaPlatformStream(this._streamSource); } internal MediaPlatformStream GetMediaPlatformStream() { return _mediaPlatformStream; } public override Album Album { get { return base.Album; } } public override Artist Artist { get { return base.Artist; } } public override Genre Genre { get { return base.Genre; } } public override TimeSpan Duration { get { return base.Duration; } } public override bool IsProtected { get { return base.IsProtected; } } public override bool IsRated { get { return base.IsRated; } } public override string Filename { get { if (this.StreamSource == null) return this.Name; return StreamSource.OriginalString; } } public override string Name { get { return base.Name; } } public override int PlayCount { get { return base.PlayCount; } } public override int Rating { get { return base.Rating; } } public override int TrackNumber { get { return base.TrackNumber; } } protected override void Dispose(bool disposing) { if (disposing) { if (_mediaPlatformStream != null) { _mediaPlatformStream.Dispose(); _mediaPlatformStream = null; } } //base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/iOS/ConcreteVideo.cs ================================================ // Copyright (C)2023 Nick Kastellanos // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoStrategy : VideoStrategy { internal VideoPlatformStream _videoPlatformStream; internal ConcreteVideoStrategy(GraphicsDevice graphicsDevice, string fileName, TimeSpan duration) : base(graphicsDevice, fileName, duration) { this._videoPlatformStream = new VideoPlatformStream(this.FileName); } internal VideoPlatformStream GetVideoPlatformStream() { return _videoPlatformStream; } protected override void Dispose(bool disposing) { if (disposing) { if (_videoPlatformStream != null) { _videoPlatformStream.Dispose(); _videoPlatformStream = null; } } base.Dispose(disposing); } } } ================================================ FILE: Platforms/Media/iOS/ConcreteVideoPlayer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Media; using MediaPlayer; using Foundation; using UIKit; namespace Microsoft.Xna.Platform.Media { internal sealed class ConcreteVideoPlayerStrategy : VideoPlayerStrategy { private NSObject _playbackDidFinishObserver; public override MediaState State { get { return base.State; } protected set { base.State = value; } } public override bool IsLooped { get { return base.IsLooped; } set { base.IsLooped = value; } } public override bool IsMuted { get { return base.IsMuted; } set { base.IsMuted = value; throw new NotImplementedException(); } } public override TimeSpan PlayPosition { get { throw new NotImplementedException(); } } public override float Volume { get { return base.Volume; } set { base.Volume = value; if (base.Video != null) PlatformSetVolume(); } } internal ConcreteVideoPlayerStrategy() { } public override Texture2D PlatformGetTexture() { throw new NotImplementedException(); } protected override void PlatformUpdateState(ref MediaState state) { } public override void PlatformPlay(Video video) { base.Video = video; _playbackDidFinishObserver = NSNotificationCenter.DefaultCenter.AddObserver( MPMoviePlayerController.PlaybackDidFinishNotification, OnStop); VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GetVideoPlatformStream(); _videoPlatformStream.MovieView.MoviePlayer.RepeatMode = IsLooped ? MPMovieRepeatMode.One : MPMovieRepeatMode.None; GraphicsDevice graphicsDevice = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GraphicsDevice; iOSGameWindow gameWindow = iOSGameWindow.FromHandle(graphicsDevice.PresentationParameters.DeviceWindowHandle); gameWindow.ViewController.PresentViewController(_videoPlatformStream.MovieView, false, null); _videoPlatformStream.MovieView.MoviePlayer.Play(); State = MediaState.Playing; } public override void PlatformPause() { throw new NotImplementedException(); } public override void PlatformResume() { VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GetVideoPlatformStream(); _videoPlatformStream.MovieView.MoviePlayer.Play(); State = MediaState.Playing; } public override void PlatformStop() { if (_playbackDidFinishObserver != null) { NSNotificationCenter.DefaultCenter.RemoveObserver(_playbackDidFinishObserver); _playbackDidFinishObserver = null; } GraphicsDevice graphicsDevice = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GraphicsDevice; iOSGameWindow gameWindow = iOSGameWindow.FromHandle(graphicsDevice.PresentationParameters.DeviceWindowHandle); VideoPlatformStream _videoPlatformStream = ((IPlatformVideo)base.Video).Strategy.ToConcrete().GetVideoPlatformStream(); _videoPlatformStream.MovieView.MoviePlayer.Stop(); gameWindow.ViewController.DismissViewController(false, null); State = MediaState.Stopped; } private void PlatformSetVolume() { throw new NotImplementedException(); } private void OnStop(NSNotification e) { if (base.Video != null) PlatformStop(); } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } internal sealed class VideoPlatformStream : IDisposable { private MPMoviePlayerViewController _movieView; internal MPMoviePlayerViewController MovieView { get { return _movieView; } } internal VideoPlatformStream(string filename) { NSUrl url = NSUrl.FromFilename(Path.GetFullPath(filename)); _movieView = CreateMovieView(url); } private MPMoviePlayerViewController CreateMovieView(NSUrl url) { MPMoviePlayerViewController movieView = new MPMoviePlayerViewController(url); MovieView.MoviePlayer.ScalingMode = MPMovieScalingMode.AspectFill; MovieView.MoviePlayer.ControlStyle = MPMovieControlStyle.None; MovieView.MoviePlayer.PrepareToPlay(); return movieView; } #region IDisposable ~VideoPlatformStream() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (_movieView != null) { _movieView.Dispose(); _movieView = null; } } //base.Dispose(disposing); } #endregion } } ================================================ FILE: Platforms/MonoGame.Framework.DesktopGL.csproj ================================================ ..\Artifacts\Platforms\DesktopGL True 4.2.9001.0 4.2.9001.0 false netstandard2.0 7.3 Kni.Platform Microsoft.Xna.Framework LINUX;DESKTOPGL;OPENAL;OPENGL;SUPPORTS_EFX;NETSTANDARD;STBSHARP_INTERNAL true CS0067;CS1591;CS1574;CS0419;CS8500 true The MonoGame runtime supporting Windows, Linux and macOS using SDL2 and OpenGL. monogame;.net core;core;.net standard;standard;desktopgl MonoGame.Framework.DesktopGL True runtime; build; native; contentfiles; analyzers; buildtransitive all {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False Kni.bmp gamecontrollerdb.txt x86\soft_oal.dll runtimes\win-x86\native PreserveNewest x86\SDL2.dll runtimes\win-x86\native PreserveNewest x64\soft_oal.dll runtimes\win-x64\native PreserveNewest x64\SDL2.dll runtimes\win-x64\native PreserveNewest x64\libopenal.so.1 runtimes\linux-x64\native PreserveNewest x64\libSDL2-2.0.so.0 runtimes\linux-x64\native PreserveNewest libopenal.1.dylib runtimes\osx\native PreserveNewest libSDL2.dylib runtimes\osx\native PreserveNewest Resources.AlphaTestEffect.fxo Resources.BasicEffect.fxo Resources.DualTextureEffect.fxo Resources.EnvironmentMapEffect.fxo Resources.SkinnedEffect.fxo Resources.SpriteEffect.fxo ================================================ FILE: Platforms/Properties/AssemblyInfo.Android.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI backend for Android platform (GLES)")] // Version information for the assembly which is automatically // set by our automated build process. [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Platforms/Properties/AssemblyInfo.Blazor.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. //[assembly: AssemblyTitle("KNI backend for WebAssembly platform (WebGL)")] ================================================ FILE: Platforms/Properties/AssemblyInfo.DesktopGL.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI backend for SDL Desktop Platforms (OpenGL)")] ================================================ FILE: Platforms/Properties/AssemblyInfo.Ref.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. //[assembly: AssemblyTitle("Reference KNI backend for libraries")] ================================================ FILE: Platforms/Properties/AssemblyInfo.UWP.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI for Universal Windows Platform (DirectX11)")] // Version information for the assembly which is automatically // set by our automated build process. [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Platforms/Properties/AssemblyInfo.Windows.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI backend for Windows Desktop platform (DirectX11)")] ================================================ FILE: Platforms/Properties/AssemblyInfo.cs ================================================ using System; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Resources; // Common information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Kni.Platform")] [assembly: AssemblyCopyright("Copyright ©2009-2022 MonoGame Team, ©2025 Nick Kastellanos")] [assembly: AssemblyCulture("")] // Mark the assembly as CLS compliant so it can be safely used in other .NET languages [assembly: CLSCompliant(true)] // Allow the content pipeline assembly to access // some of our internal helper methods that it needs. //[assembly: InternalsVisibleTo("Xna.Framework.Content.Pipeline")] [assembly: InternalsVisibleTo("Xna.Framework.Net")] //Tests projects need access too [assembly: InternalsVisibleTo("Kni.Tests")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("81119db2-82a6-45fb-a366-63a08437b485")] // This was needed in WinRT releases to inform the system that we // don't need to load any language specific resources. [assembly: NeutralResourcesLanguageAttribute("en-US")] ================================================ FILE: Platforms/Properties/AssemblyInfo.iOS.cs ================================================ using System.Reflection; // Specific platform information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI backend for iOS platform (GLES)")] // Version information for the assembly which is automatically // set by our automated build process. [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Platforms/Resources/Resource.designer.cs ================================================ #pragma warning disable 1591 //------------------------------------------------------------------------------ // // This code was generated by a tool. // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ [assembly: global::Android.Runtime.ResourceDesignerAttribute("Microsoft.Xna.Framework.Resource", IsApplication=false)] namespace Microsoft.Xna.Framework { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.2.120")] public partial class Resource { static Resource() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } public partial class Attribute { static Attribute() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Attribute() { } } } } #pragma warning restore 1591 ================================================ FILE: Platforms/Storage/.Android/ConcreteStorageContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { string saved = ""; string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saved = Path.Combine(root,"SavedGames"); StoragePath = Path.Combine(saved, name); string playerSave = string.Empty; if (playerIndex.HasValue) playerSave = Path.Combine(StoragePath, "Player" + (int)playerIndex.Value); if (!string.IsNullOrEmpty(playerSave)) StoragePath = Path.Combine(StoragePath, "Player" + (int)playerIndex); if (!Directory.Exists(StoragePath)) Directory.CreateDirectory(StoragePath); } public override void CreateDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } } public override Stream CreateFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Create(filePath); } public override void DeleteDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); // Now let's try to delete it Directory.Delete(dirPath); } public override void DeleteFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // Now let's try to delete it File.Delete(filePath); } public override bool DirectoryExists(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); return Directory.Exists(dirPath); } public override bool FileExists(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Exists(filePath); } public override string[] GetDirectoryNames() { return Directory.GetDirectories(StoragePath); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { return Directory.GetFiles(StoragePath); } public override string[] GetFileNames(string searchPattern) { return Directory.GetFiles(StoragePath, searchPattern); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); return File.Open(filePath, fileMode, fileAccess, fileShare); } } } ================================================ FILE: Platforms/Storage/.Android/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using System.Threading.Tasks; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { return new DriveInfo(GetDevicePath).AvailableFreeSpace; } } public override bool IsConnected { get { return new DriveInfo(GetDevicePath).IsReady; } } public override long TotalSpace { get { // Not sure if this should be TotalSize or TotalFreeSize return new DriveInfo(GetDevicePath).TotalSize; } } public override string GetDevicePath { get { // We may not need to store the StorageContainer in the future // when we get DeviceChanged events working. if (StorageContainer == null) { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); } else { return ((IPlatformStorageContainer)StorageContainer).GetStrategy().StoragePath; } } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Open(storageDevice, displayName)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override StorageContainer EndOpenContainer(IAsyncResult result) { try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player); StorageContainer = storageContainer; return storageContainer; } } } ================================================ FILE: Platforms/Storage/.Android/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.Android/ConcreteStorageService.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using System.Threading.Tasks; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(player, sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override StorageDevice EndShowSelector(IAsyncResult result) { try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } } // The MonoTouch AOT cannot deal with nullable types in a delegate // (or at least not the straightforward implementation), so we // define two delegate types. public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount); public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount); public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName); private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(player, sizeInBytes, directoryCount); } private StorageDevice Show(int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(null, sizeInBytes, directoryCount); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.Blazor/ConcreteStorageContainer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { throw new NotImplementedException(); } public override void CreateDirectory(string directory) { throw new NotImplementedException(); } public override Stream CreateFile(string file) { throw new NotImplementedException(); } public override void DeleteDirectory(string directory) { throw new NotImplementedException(); } public override void DeleteFile(string file) { throw new NotImplementedException(); } public override bool DirectoryExists(string directory) { throw new NotImplementedException(); } public override bool FileExists(string file) { throw new NotImplementedException(); } public override string[] GetDirectoryNames() { throw new NotImplementedException(); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { throw new NotImplementedException(); } public override string[] GetFileNames(string searchPattern) { throw new NotImplementedException(); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { throw new NotImplementedException(); } } } ================================================ FILE: Platforms/Storage/.Blazor/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { throw new NotImplementedException(); } } public override bool IsConnected { get { return false; } } public override long TotalSpace { get { throw new NotImplementedException(); } } public override string GetDevicePath { get { throw new NotImplementedException(); } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { throw new NotImplementedException(); } public override StorageContainer EndOpenContainer(IAsyncResult result) { throw new NotImplementedException(); } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { throw new NotImplementedException(); } } } ================================================ FILE: Platforms/Storage/.Blazor/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.Blazor/ConcreteStorageService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { throw new NotImplementedException(); } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { throw new NotImplementedException(); } public override StorageDevice EndShowSelector(IAsyncResult result) { throw new NotImplementedException(); } private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { throw new NotImplementedException(); } private StorageDevice Show(int sizeInBytes, int directoryCount) { throw new NotImplementedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.Ref/ConcreteStorageContainer.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { throw new PlatformNotSupportedException(); } public override void CreateDirectory(string directory) { throw new PlatformNotSupportedException(); } public override Stream CreateFile(string file) { throw new PlatformNotSupportedException(); } public override void DeleteDirectory(string directory) { throw new PlatformNotSupportedException(); } public override void DeleteFile(string file) { throw new PlatformNotSupportedException(); } public override bool DirectoryExists(string directory) { throw new PlatformNotSupportedException(); } public override bool FileExists(string file) { throw new PlatformNotSupportedException(); } public override string[] GetDirectoryNames() { throw new PlatformNotSupportedException(); } public override string[] GetDirectoryNames(string searchPattern) { throw new PlatformNotSupportedException(); } public override string[] GetFileNames() { throw new PlatformNotSupportedException(); } public override string[] GetFileNames(string searchPattern) { throw new PlatformNotSupportedException(); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Storage/.Ref/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { throw new PlatformNotSupportedException(); } } public override bool IsConnected { get { return false; } } public override long TotalSpace { get { throw new PlatformNotSupportedException(); } } public override string GetDevicePath { get { throw new PlatformNotSupportedException(); } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { throw new PlatformNotSupportedException(); } public override StorageContainer EndOpenContainer(IAsyncResult result) { throw new PlatformNotSupportedException(); } public override void DeleteContainer(string titleName) { throw new PlatformNotSupportedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { throw new PlatformNotSupportedException(); } } } ================================================ FILE: Platforms/Storage/.Ref/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.Ref/ConcreteStorageService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { throw new PlatformNotSupportedException(); } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { throw new PlatformNotSupportedException(); } public override StorageDevice EndShowSelector(IAsyncResult result) { throw new PlatformNotSupportedException(); } private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { throw new PlatformNotSupportedException(); } private StorageDevice Show(int sizeInBytes, int directoryCount) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.SDL2/ConcreteStorageContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { string saved = ""; switch (CurrentPlatform.OS) { case OS.Windows: { saved = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saved = Path.Combine(saved, "SavedGames"); } break; case OS.Linux: { saved = Environment.GetEnvironmentVariable("XDG_DATA_HOME"); if (String.IsNullOrEmpty(saved)) { saved = Environment.GetEnvironmentVariable("HOME"); if (!String.IsNullOrEmpty(saved)) saved += "/.local/share"; else saved = "."; } } break; case OS.MacOSX: { saved = Environment.GetEnvironmentVariable("HOME"); if (!String.IsNullOrEmpty(saved)) saved += "/Library/Application Support"; else saved = "."; } break; default: throw new Exception("Unexpected platform."); } StoragePath = Path.Combine(saved, name); string playerSave = string.Empty; if (playerIndex.HasValue) playerSave = Path.Combine(StoragePath, "Player" + (int)playerIndex.Value); if (!string.IsNullOrEmpty(playerSave)) StoragePath = Path.Combine(StoragePath, "Player" + (int)playerIndex); if (!Directory.Exists(StoragePath)) Directory.CreateDirectory(StoragePath); } public override void CreateDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } } public override Stream CreateFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Create(filePath); } public override void DeleteDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); // Now let's try to delete it Directory.Delete(dirPath); } public override void DeleteFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // Now let's try to delete it File.Delete(filePath); } public override bool DirectoryExists(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); return Directory.Exists(dirPath); } public override bool FileExists(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Exists(filePath); } public override string[] GetDirectoryNames() { return Directory.GetDirectories(StoragePath); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { return Directory.GetFiles(StoragePath); } public override string[] GetFileNames(string searchPattern) { return Directory.GetFiles(StoragePath, searchPattern); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); return File.Open(filePath, fileMode, fileAccess, fileShare); } } } ================================================ FILE: Platforms/Storage/.SDL2/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { return new DriveInfo(GetDevicePath).AvailableFreeSpace; } } public override bool IsConnected { get { return new DriveInfo(GetDevicePath).IsReady; } } public override long TotalSpace { get { // Not sure if this should be TotalSize or TotalFreeSize return new DriveInfo(GetDevicePath).TotalSize; } } public override string GetDevicePath { get { // We may not need to store the StorageContainer in the future // when we get DeviceChanged events working. if (StorageContainer == null) { switch (CurrentPlatform.OS) { case OS.Windows: { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); } case OS.Linux: { string osConfigDir = Environment.GetEnvironmentVariable("XDG_DATA_HOME"); if (String.IsNullOrEmpty(osConfigDir)) { osConfigDir = Environment.GetEnvironmentVariable("HOME"); if (!String.IsNullOrEmpty(osConfigDir)) osConfigDir += "/.local/share"; else osConfigDir = "."; } return osConfigDir; } case OS.MacOSX: { string osConfigDir = Environment.GetEnvironmentVariable("HOME"); if (!String.IsNullOrEmpty(osConfigDir)) osConfigDir += "/Library/Application Support"; else osConfigDir = "."; return osConfigDir; } default: throw new Exception("Unexpected platform."); } } else { return ((IPlatformStorageContainer)StorageContainer).GetStrategy().StoragePath; } } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { try { ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open); return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state); } finally { } } public override StorageContainer EndOpenContainer(IAsyncResult result) { StorageContainer returnValue = null; try { #if NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = result as AsyncResult; if (asyncResult != null) { ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous; // Wait for the WaitHandle to become signaled. result.AsyncWaitHandle.WaitOne(); // Call EndInvoke to retrieve the results. if (asyncDelegate != null) returnValue = asyncDelegate.EndInvoke(result); } #else // NET6_0_OR_GREATER throw new NotImplementedException(); #endif } finally { // Close the wait handle. result.AsyncWaitHandle.Dispose(); } return returnValue; } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player); StorageContainer = storageContainer; return storageContainer; } } } ================================================ FILE: Platforms/Storage/.SDL2/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.SDL2/ConcreteStorageService.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show); return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state); } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show); return del.BeginInvoke(sizeInBytes, directoryCount, callback, state); } public override StorageDevice EndShowSelector(IAsyncResult result) { if (!result.IsCompleted) { try { result.AsyncWaitHandle.WaitOne(); } finally { } } #if NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = (AsyncResult)result; object del = asyncResult.AsyncDelegate; #else // NET6_0_OR_GREATER object del; throw new NotImplementedException(); #endif if (del is ShowSelectorAsynchronousShow) return (del as ShowSelectorAsynchronousShow).EndInvoke(result); else if (del is ShowSelectorAsynchronousShow2) return (del as ShowSelectorAsynchronousShow2).EndInvoke(result); else throw new ArgumentException("result"); } // The MonoTouch AOT cannot deal with nullable types in a delegate // (or at least not the straightforward implementation), so we // define two delegate types. public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount); public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount); public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName); private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(player, sizeInBytes, directoryCount); } private StorageDevice Show(int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(null, sizeInBytes, directoryCount); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.UAP/ConcreteStorageContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using System.Linq; using Windows.Storage; using Windows.Storage.Search; namespace Microsoft.Xna.Platform.Storage { // Implementation on Windows // // User storage is in the My Documents folder of the user who is currently logged in, in the SavedGames folder. // A subfolder is created for each game according to the titleName passed to the BeginOpenContainer method. // When no PlayerIndex is specified, content is saved in the AllPlayers folder. When a PlayerIndex is specified, // the content is saved in the Player1, Player2, Player3, or Player4 folder, depending on which PlayerIndex // was passed to BeginShowSelector. internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { string saved = ""; string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saved = Path.Combine(root,"SavedGames"); StoragePath = Path.Combine(saved, name); string playerSave = string.Empty; if (playerIndex.HasValue) playerSave = Path.Combine(StoragePath, "Player" + (int)playerIndex.Value); if (!string.IsNullOrEmpty(playerSave)) StoragePath = Path.Combine(StoragePath, "Player" + (int)playerIndex); StorageFolder folder = ApplicationData.Current.LocalFolder; var task = folder.CreateFolderAsync(StoragePath, CreationCollisionOption.OpenIfExists); task.AsTask().Wait(); } public override void CreateDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); StorageFolder folder = ApplicationData.Current.LocalFolder; var task = folder.CreateFolderAsync(dirPath, CreationCollisionOption.OpenIfExists); task.AsTask().Wait(); } public override Stream CreateFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); StorageFolder folder = ApplicationData.Current.LocalFolder; var awaiter = folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter(); return awaiter.GetResult(); } public override void DeleteDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); // Now let's try to delete it StorageFolder folder = ApplicationData.Current.LocalFolder; var deleteFolder = folder.GetFolderAsync(dirPath).AsTask().GetAwaiter().GetResult(); deleteFolder.DeleteAsync().AsTask().Wait(); } public override void DeleteFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile deleteFile = folder.GetFileAsync(filePath).AsTask().GetAwaiter().GetResult(); deleteFile.DeleteAsync().AsTask().Wait(); } public override bool DirectoryExists(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); StorageFolder folder = ApplicationData.Current.LocalFolder; try { StorageFolder result = folder.GetFolderAsync(dirPath).GetResults(); return result != null; } catch { return false; } } public override bool FileExists(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); StorageFolder folder = ApplicationData.Current.LocalFolder; // GetFile returns an exception if the file doesn't exist, so we catch it here and return the boolean. try { StorageFile existsFile = folder.GetFileAsync(filePath).GetAwaiter().GetResult(); return existsFile != null; } catch { return false; } } public override string[] GetDirectoryNames() { StorageFolder folder = ApplicationData.Current.LocalFolder; IReadOnlyList results = folder.GetFoldersAsync().AsTask().GetAwaiter().GetResult(); return results.Select(e => e.Name).ToArray(); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { StorageFolder folder = ApplicationData.Current.LocalFolder; var results = folder.GetFilesAsync().AsTask().GetAwaiter().GetResult(); return results.Select(e => e.Name).ToArray(); } public override string[] GetFileNames(string searchPattern) { StorageFolder folder = ApplicationData.Current.LocalFolder; QueryOptions options = new QueryOptions( CommonFileQuery.DefaultQuery, new [] { searchPattern } ); StorageFileQueryResult query = folder.CreateFileQueryWithOptions(options); IReadOnlyList files = query.GetFilesAsync().AsTask().GetAwaiter().GetResult(); return files.Select(e => e.Name).ToArray(); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); StorageFolder folder = ApplicationData.Current.LocalFolder; if (fileMode == FileMode.Create || fileMode == FileMode.CreateNew) { return folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter().GetResult(); } else if (fileMode == FileMode.OpenOrCreate) { if (fileAccess == FileAccess.Read && FileExists(file)) return folder.OpenStreamForReadAsync(filePath).GetAwaiter().GetResult(); else { // Not using OpenStreamForReadAsync because the stream position is placed at the end of the file, instead of the beginning StorageFile f = folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult(); return f.OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream(); } } else if (fileMode == FileMode.Truncate) { return folder.OpenStreamForWriteAsync(filePath, CreationCollisionOption.ReplaceExisting).GetAwaiter().GetResult(); } else { //if (fileMode == FileMode.Append) // Not using OpenStreamForReadAsync because the stream position is placed at the end of the file, instead of the beginning folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult().OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream(); StorageFile f = folder.CreateFileAsync(filePath, CreationCollisionOption.OpenIfExists).AsTask().GetAwaiter().GetResult(); return f.OpenAsync(FileAccessMode.ReadWrite).AsTask().GetAwaiter().GetResult().AsStream(); } } } } ================================================ FILE: Platforms/Storage/.UAP/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using Windows.Storage; #if NETFX_CORE using System.Threading.Tasks; #endif namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { return long.MaxValue; } } public override bool IsConnected { get { return true; } } public override long TotalSpace { get { return long.MaxValue; } } public override string GetDevicePath { get { // We may not need to store the StorageContainer in the future // when we get DeviceChanged events working. if (StorageContainer == null) { return ApplicationData.Current.LocalFolder.Path; } else { return ((IPlatformStorageContainer)StorageContainer).GetStrategy().StoragePath; } } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { #if NETFX_CORE TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Open(storageDevice, displayName)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; #else try { ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open); #if (UAP || WINUI) _containerDelegate = AsynchronousOpen; #endif return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state); } finally { } #endif } public override StorageContainer EndOpenContainer(IAsyncResult result) { #if NETFX_CORE try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } #else StorageContainer returnValue = null; try { #if (UAP || WINUI) // AsyncResult does not exist in WinRT ConcreteStorageService.OpenContainerAsynchronous asyncResult = _containerDelegate as ConcreteStorageService.OpenContainerAsynchronous; if (asyncResult != null) { // Wait for the WaitHandle to become signaled. result.AsyncWaitHandle.WaitOne(); // Call EndInvoke to retrieve the results. returnValue = asyncResult.EndInvoke(result); } _containerDelegate = null; #elif NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = result as AsyncResult; if (asyncResult != null) { ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous; // Wait for the WaitHandle to become signaled. result.AsyncWaitHandle.WaitOne(); // Call EndInvoke to retrieve the results. if (asyncDelegate != null) returnValue = asyncDelegate.EndInvoke(result); } #else // NET6_0_OR_GREATER throw new NotImplementedException(); #endif } finally { // Close the wait handle. result.AsyncWaitHandle.Dispose(); } return returnValue; #endif } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player); StorageContainer = storageContainer; return storageContainer; } } } ================================================ FILE: Platforms/Storage/.UAP/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.UAP/ConcreteStorageService.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; #if NETFX_CORE using System.Threading.Tasks; #endif namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { #if (UAP || WINUI) // Dirty trick to avoid the need to get the delegate from the IAsyncResult (can't be done in WinRT) static Delegate _showDelegate; static Delegate _containerDelegate; #endif internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { #if NETFX_CORE TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(player, sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; #else ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show); #if (UAP || WINUI) _showDelegate = del; #endif return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state); #endif } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { #if NETFX_CORE TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; #else ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show); #if (UAP || WINUI) _showDelegate = del; #endif return del.BeginInvoke(sizeInBytes, directoryCount, callback, state); #endif } public override StorageDevice EndShowSelector(IAsyncResult result) { #if NETFX_CORE try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } #else if (!result.IsCompleted) { try { result.AsyncWaitHandle.WaitOne(); } finally { #if !(UAP || WINUI) result.AsyncWaitHandle.Close(); #endif } } #if (UAP || WINUI) var del = _showDelegate; _showDelegate = null; #elif NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = (AsyncResult)result; object del = asyncResult.AsyncDelegate; #else // NET6_0_OR_GREATER object del; throw new NotImplementedException(); #endif if (del is ShowSelectorAsynchronousShow) return (del as ShowSelectorAsynchronousShow).EndInvoke(result); else if (del is ShowSelectorAsynchronousShow2) return (del as ShowSelectorAsynchronousShow2).EndInvoke(result); else throw new ArgumentException("result"); #endif } // The MonoTouch AOT cannot deal with nullable types in a delegate // (or at least not the straightforward implementation), so we // define two delegate types. public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount); public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount); public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName); private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(player, sizeInBytes, directoryCount); } private StorageDevice Show(int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(null, sizeInBytes, directoryCount); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.WindowsDX/ConcreteStorageContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { // Implementation on Windows // // User storage is in the My Documents folder of the user who is currently logged in, in the SavedGames folder. // A subfolder is created for each game according to the titleName passed to the BeginOpenContainer method. // When no PlayerIndex is specified, content is saved in the AllPlayers folder. When a PlayerIndex is specified, // the content is saved in the Player1, Player2, Player3, or Player4 folder, depending on which PlayerIndex // was passed to BeginShowSelector. internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { string saved = ""; string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saved = Path.Combine(root,"SavedGames"); StoragePath = Path.Combine(saved, name); string playerSave = string.Empty; if (playerIndex.HasValue) playerSave = Path.Combine(StoragePath, "Player" + (int)playerIndex.Value); if (!string.IsNullOrEmpty(playerSave)) StoragePath = Path.Combine(StoragePath, "Player" + (int)playerIndex); if (!Directory.Exists(StoragePath)) Directory.CreateDirectory(StoragePath); } public override void CreateDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } } public override Stream CreateFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Create(filePath); } public override void DeleteDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); // Now let's try to delete it Directory.Delete(dirPath); } public override void DeleteFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // Now let's try to delete it File.Delete(filePath); } public override bool DirectoryExists(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); return Directory.Exists(dirPath); } public override bool FileExists(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Exists(filePath); } public override string[] GetDirectoryNames() { return Directory.GetDirectories(StoragePath); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { return Directory.GetFiles(StoragePath); } public override string[] GetFileNames(string searchPattern) { return Directory.GetFiles(StoragePath, searchPattern); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); return File.Open(filePath, fileMode, fileAccess, fileShare); } } } ================================================ FILE: Platforms/Storage/.WindowsDX/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { return new DriveInfo(GetDevicePath).AvailableFreeSpace; } } public override bool IsConnected { get { return new DriveInfo(GetDevicePath).IsReady; } } public override long TotalSpace { get { // Not sure if this should be TotalSize or TotalFreeSize return new DriveInfo(GetDevicePath).TotalSize; } } public override string GetDevicePath { get { // We may not need to store the StorageContainer in the future // when we get DeviceChanged events working. if (StorageContainer == null) { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); } else { return ((IPlatformStorageContainer)StorageContainer).GetStrategy().StoragePath; } } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { try { ConcreteStorageService.OpenContainerAsynchronous AsynchronousOpen = new ConcreteStorageService.OpenContainerAsynchronous(Open); return AsynchronousOpen.BeginInvoke(storageDevice, displayName, callback, state); } finally { } } public override StorageContainer EndOpenContainer(IAsyncResult result) { StorageContainer returnValue = null; try { #if NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = result as AsyncResult; if (asyncResult != null) { ConcreteStorageService.OpenContainerAsynchronous asyncDelegate = asyncResult.AsyncDelegate as ConcreteStorageService.OpenContainerAsynchronous; // Wait for the WaitHandle to become signaled. result.AsyncWaitHandle.WaitOne(); // Call EndInvoke to retrieve the results. if (asyncDelegate != null) returnValue = asyncDelegate.EndInvoke(result); } #else // NET6_0_OR_GREATER throw new NotImplementedException(); #endif } finally { // Close the wait handle. result.AsyncWaitHandle.Dispose(); } return returnValue; } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player); StorageContainer = storageContainer; return storageContainer; } } } ================================================ FILE: Platforms/Storage/.WindowsDX/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.WindowsDX/ConcreteStorageService.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { ShowSelectorAsynchronousShow del = new ShowSelectorAsynchronousShow(Show); return del.BeginInvoke(player, sizeInBytes, directoryCount, callback, state); } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { ShowSelectorAsynchronousShow2 del = new ShowSelectorAsynchronousShow2(Show); return del.BeginInvoke(sizeInBytes, directoryCount, callback, state); } public override StorageDevice EndShowSelector(IAsyncResult result) { if (!result.IsCompleted) { try { result.AsyncWaitHandle.WaitOne(); } finally { } } #if NET4_0_OR_GREATER // Retrieve the delegate. AsyncResult asyncResult = (AsyncResult)result; object del = asyncResult.AsyncDelegate; #else // NET6_0_OR_GREATER object del; throw new NotImplementedException(); #endif if (del is ShowSelectorAsynchronousShow) return (del as ShowSelectorAsynchronousShow).EndInvoke(result); else if (del is ShowSelectorAsynchronousShow2) return (del as ShowSelectorAsynchronousShow2).EndInvoke(result); else throw new ArgumentException("result"); } // The MonoTouch AOT cannot deal with nullable types in a delegate // (or at least not the straightforward implementation), so we // define two delegate types. public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount); public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount); public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName); private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(player, sizeInBytes, directoryCount); } private StorageDevice Show(int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(null, sizeInBytes, directoryCount); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Storage/.iOS/ConcreteStorageContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageContainer : StorageContainerStrategy { public override string DisplayName { get { return base.DisplayName; } } internal ConcreteStorageContainer(string name, PlayerIndex? playerIndex) : base(name) { string saved = ""; string root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); saved = Path.Combine(root,"SavedGames"); StoragePath = Path.Combine(saved, name); string playerSave = string.Empty; if (playerIndex.HasValue) playerSave = Path.Combine(StoragePath, "Player" + (int)playerIndex.Value); if (!string.IsNullOrEmpty(playerSave)) StoragePath = Path.Combine(StoragePath, "Player" + (int)playerIndex); if (!Directory.Exists(StoragePath)) Directory.CreateDirectory(StoragePath); } public override void CreateDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } } public override Stream CreateFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Create(filePath); } public override void DeleteDirectory(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); // Now let's try to delete it Directory.Delete(dirPath); } public override void DeleteFile(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // Now let's try to delete it File.Delete(filePath); } public override bool DirectoryExists(string directory) { // relative so combine with our path string dirPath = Path.Combine(StoragePath, directory); return Directory.Exists(dirPath); } public override bool FileExists(string file) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); // return A new file with read/write access. return File.Exists(filePath); } public override string[] GetDirectoryNames() { return Directory.GetDirectories(StoragePath); } public override string[] GetDirectoryNames(string searchPattern) { throw new NotImplementedException(); } public override string[] GetFileNames() { return Directory.GetFiles(StoragePath); } public override string[] GetFileNames(string searchPattern) { return Directory.GetFiles(StoragePath, searchPattern); } public override Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare) { // relative so combine with our path string filePath = Path.Combine(StoragePath, file); return File.Open(filePath, fileMode, fileAccess, fileShare); } } } ================================================ FILE: Platforms/Storage/.iOS/ConcreteStorageDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using System.Threading.Tasks; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageDevice : StorageDeviceStrategy { public override long FreeSpace { get { return new DriveInfo(GetDevicePath).AvailableFreeSpace; } } public override bool IsConnected { get { return new DriveInfo(GetDevicePath).IsReady; } } public override long TotalSpace { get { // Not sure if this should be TotalSize or TotalFreeSize return new DriveInfo(GetDevicePath).TotalSize; } } public override string GetDevicePath { get { // We may not need to store the StorageContainer in the future // when we get DeviceChanged events working. if (StorageContainer == null) { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); } else { return ((IPlatformStorageContainer)StorageContainer).GetStrategy().StoragePath; } } } internal ConcreteStorageDevice(PlayerIndex? player, int directoryCount) : base(player, directoryCount) { } public override IAsyncResult BeginOpenContainer(StorageDevice storageDevice, string displayName, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Open(storageDevice, displayName)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override StorageContainer EndOpenContainer(IAsyncResult result) { try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } } public override void DeleteContainer(string titleName) { throw new NotImplementedException(); } public override StorageContainer Open(StorageDevice storageDevice, string displayName) { StorageContainer storageContainer = base.CreateStorageContainer(storageDevice, displayName, Player); StorageContainer = storageContainer; return storageContainer; } } } ================================================ FILE: Platforms/Storage/.iOS/ConcreteStorageFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageFactory : StorageFactory { public override StorageContainerStrategy CreateStorageContainerStrategy(string name, PlayerIndex? playerIndex) { return new ConcreteStorageContainer(name, playerIndex); } public override StorageDeviceStrategy CreateStorageDeviceStrategy(PlayerIndex? player, int directoryCount) { return new ConcreteStorageDevice(player, directoryCount); } public override StorageServiceStrategy CreateStorageServiceStrategy() { return new ConcreteStorageService(); } } } ================================================ FILE: Platforms/Storage/.iOS/ConcreteStorageService.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Storage; using System.Threading.Tasks; namespace Microsoft.Xna.Platform.Storage { internal sealed class ConcreteStorageService : StorageServiceStrategy { internal ConcreteStorageService() { } public override IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(player, sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, object state) { TaskCompletionSource tcs = new TaskCompletionSource(state); Task task = Task.Run(() => Show(sizeInBytes, directoryCount)); task.ContinueWith((t) => { // Copy the task result into the returned task. if (t.IsFaulted) tcs.TrySetException(t.Exception.InnerExceptions); else if (t.IsCanceled) tcs.TrySetCanceled(); else tcs.TrySetResult(t.Result); // Invoke the user callback if necessary. if (callback != null) callback(tcs.Task); }); return tcs.Task; } public override StorageDevice EndShowSelector(IAsyncResult result) { try { return ((Task)result).Result; } catch (AggregateException ex) { throw; } } // The MonoTouch AOT cannot deal with nullable types in a delegate // (or at least not the straightforward implementation), so we // define two delegate types. public delegate StorageDevice ShowSelectorAsynchronousShow(PlayerIndex player, int sizeInBytes, int directoryCount); public delegate StorageDevice ShowSelectorAsynchronousShow2(int sizeInBytes, int directoryCount); public delegate StorageContainer OpenContainerAsynchronous(StorageDevice storageDevice, string displayName); private StorageDevice Show(PlayerIndex player, int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(player, sizeInBytes, directoryCount); } private StorageDevice Show(int sizeInBytes, int directoryCount) { return base.CreateStorageDevice(null, sizeInBytes, directoryCount); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/Utilities/.Android/FuncLoader.cs ================================================ using System; using System.IO; using System.Runtime.InteropServices; using Android.App; namespace Microsoft.Xna.Platform.Utilities { internal class FuncLoader { [DllImport("dl")] public static extern IntPtr dlopen(string path, int flags); [DllImport("dl")] public static extern IntPtr dlsym(IntPtr handle, string symbol); private const int RTLD_LAZY = 0x0001; public static IntPtr LoadLibrary(string libname) { // Let the OS search for the library by default. IntPtr lib = dlopen(libname, RTLD_LAZY); if (lib != IntPtr.Zero) { Console.WriteLine("FuncLoader.LoadLibrary {0}", libname); return lib; } // Some Android devices won't search the native library path // for the library, so we have to do it manually here. var nlibpath = Application.Context.ApplicationInfo.NativeLibraryDir; var libpath = Path.Combine(nlibpath, libname); lib = dlopen(libpath, RTLD_LAZY); if (lib != IntPtr.Zero) { Console.WriteLine("FuncLoader.LoadLibrary {0}", libpath); return lib; } Console.WriteLine("FuncLoader.LoadLibrary {0} Not Found!", libname); return IntPtr.Zero; } public static T LoadFunction(IntPtr library, string function) { IntPtr funcAddress = dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); throw new EntryPointNotFoundException("Entry point not found for function '" + function + "'."); } public static T LoadFunctionOrNull(IntPtr library, string function) { IntPtr funcAddress = dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); return default(T); } } } ================================================ FILE: Platforms/Utilities/.SDL2/FuncLoader.cs ================================================ using System; using System.IO; using System.Runtime.InteropServices; namespace Microsoft.Xna.Platform.Utilities { internal class FuncLoader { private class Windows { [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)] public static extern IntPtr LoadLibraryW(string lpszLib); } private class Linux { [DllImport("libdl.so.2")] public static extern IntPtr dlopen(string path, int flags); [DllImport("libdl.so.2")] public static extern IntPtr dlsym(IntPtr handle, string symbol); } private class OSX { [DllImport("/usr/lib/libSystem.dylib")] public static extern IntPtr dlopen(string path, int flags); [DllImport("/usr/lib/libSystem.dylib")] public static extern IntPtr dlsym(IntPtr handle, string symbol); } private const int RTLD_LAZY = 0x0001; public static IntPtr LoadLibraryExt(string libname) { IntPtr ret = IntPtr.Zero; #if NET40 || NET45 || NET40_OR_GREATER string appDirectory = typeof(FuncLoader).Assembly.Location; #else // NETSTANDARD2_0_OR_GREATER || NET6_0_OR_GREATER string appDirectory = AppContext.BaseDirectory; #endif appDirectory = Path.GetDirectoryName(appDirectory); appDirectory = appDirectory ?? "./"; // Try .NET Framework / mono locations if (CurrentPlatform.OS == OS.MacOSX) { ret = LoadLibrary(Path.Combine(appDirectory, libname)); // Look in Frameworks for .app bundles if (ret == IntPtr.Zero) ret = LoadLibrary(Path.Combine(appDirectory, "..", "Frameworks", libname)); } else { if (Environment.Is64BitProcess) ret = LoadLibrary(Path.Combine(appDirectory, "x64", libname)); else ret = LoadLibrary(Path.Combine(appDirectory, "x86", libname)); } // Try .NET Core development locations if (ret == IntPtr.Zero) ret = LoadLibrary(Path.Combine(appDirectory, "runtimes", CurrentPlatform.Rid, "native", libname)); // Try current folder (.NET Core will copy it there after publish) if (ret == IntPtr.Zero) ret = LoadLibrary(Path.Combine(appDirectory, libname)); // Try alternate way of checking current folder // assemblyLocation is null if we are inside macOS app bundle if (ret == IntPtr.Zero) ret = LoadLibrary(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, libname)); // Try loading system library if (ret == IntPtr.Zero) ret = LoadLibrary(libname); // Welp, all failed, PANIC!!! if (ret == IntPtr.Zero) throw new Exception("Failed to load library: " + libname); return ret; } public static IntPtr LoadLibrary(string libname) { if (CurrentPlatform.OS == OS.Windows) return Windows.LoadLibraryW(libname); if (CurrentPlatform.OS == OS.MacOSX) return OSX.dlopen(libname, RTLD_LAZY); return Linux.dlopen(libname, RTLD_LAZY); } public static T LoadFunction(IntPtr library, string function) { IntPtr funcAddress = IntPtr.Zero; if (CurrentPlatform.OS == OS.Windows) funcAddress = Windows.GetProcAddress(library, function); else if (CurrentPlatform.OS == OS.MacOSX) funcAddress = OSX.dlsym(library, function); else funcAddress = Linux.dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); throw new EntryPointNotFoundException("Entry point not found for function '" + function + "'."); } public static T LoadFunctionOrNull(IntPtr library, string function) { IntPtr funcAddress = IntPtr.Zero; if (CurrentPlatform.OS == OS.Windows) funcAddress = Windows.GetProcAddress(library, function); else if (CurrentPlatform.OS == OS.MacOSX) funcAddress = OSX.dlsym(library, function); else funcAddress = Linux.dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); return default(T); } } } ================================================ FILE: Platforms/Utilities/.iOS/FuncLoader.cs ================================================ using System; using System.Runtime.InteropServices; using ObjCRuntime; namespace Microsoft.Xna.Platform.Utilities { internal class FuncLoader { public static IntPtr LoadLibrary(string libname) { return Dlfcn.dlopen(libname, 0); } public static T LoadFunction(IntPtr library, string function) { IntPtr funcAddress = Dlfcn.dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); throw new EntryPointNotFoundException("Entry point not found for function '" + function + "'."); } public static T LoadFunctionOrNull(IntPtr library, string function) { IntPtr funcAddress = Dlfcn.dlsym(library, function); if (funcAddress != IntPtr.Zero) return InteropHelpers.GetDelegateForFunctionPointer(funcAddress); return default(T); } } } ================================================ FILE: Platforms/Utilities/AssemblyHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Reflection; namespace Microsoft.Xna.Platform.Utilities { internal static class AssemblyHelper { public static string GetDefaultWindowTitle() { // When running NUnit tests entry assembly can return null. var entryAssembly = Assembly.GetEntryAssembly(); if (entryAssembly != null) { // Use the Title attribute of the Assembly if possible. try { AssemblyTitleAttribute assemblyTitleAttrib = ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(entryAssembly, typeof(AssemblyTitleAttribute))); if (assemblyTitleAttrib != null) { if (!string.IsNullOrEmpty(assemblyTitleAttrib.Title)) return assemblyTitleAttrib.Title; } } catch { /* Nope, wasn't possible */ } // Otherwise, fallback to the Name of the assembly. return entryAssembly.GetName().Name; } return string.Empty; } } } ================================================ FILE: Platforms/Utilities/CurrentPlatform.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Runtime.InteropServices; using System; namespace Microsoft.Xna.Platform.Utilities { internal enum OS { Windows, Linux, MacOSX, Unknown } internal static class CurrentPlatform { private static bool _init = false; private static OS _os; [DllImport("libc")] static extern int uname(IntPtr buf); private static void Init() { if (_init) return; var pid = Environment.OSVersion.Platform; switch (pid) { case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: _os = OS.Windows; break; case PlatformID.MacOSX: _os = OS.MacOSX; break; case PlatformID.Unix: _os = OS.MacOSX; var buf = IntPtr.Zero; try { buf = Marshal.AllocHGlobal(8192); if (uname(buf) == 0 && Marshal.PtrToStringAnsi(buf) == "Linux") _os = OS.Linux; } catch { } finally { if (buf != IntPtr.Zero) Marshal.FreeHGlobal(buf); } break; default: _os = OS.Unknown; break; } _init = true; } public static OS OS { get { Init(); return _os; } } public static string Rid { get { if (CurrentPlatform.OS == OS.Windows && Environment.Is64BitProcess) return "win-x64"; else if (CurrentPlatform.OS == OS.Windows && !Environment.Is64BitProcess) return "win-x86"; else if (CurrentPlatform.OS == OS.Linux) return "linux-x64"; else if (CurrentPlatform.OS == OS.MacOSX) return "osx"; else return "unknown"; } } } } ================================================ FILE: Platforms/Utilities/InteropHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.InteropServices; using System.Text; namespace Microsoft.Xna.Platform.Utilities { internal static class InteropHelpers { /// /// Convert a pointer to a Utf8 null-terminated string to a .NET System.String /// public static unsafe string Utf8ToString(IntPtr handle) { if (handle == IntPtr.Zero) return string.Empty; var ptr = (byte*) handle; while (*ptr != 0) ptr++; var len = ptr - (byte*) handle; if (len == 0) return string.Empty; var bytes = new byte[len]; Marshal.Copy(handle, bytes, 0, bytes.Length); return Encoding.UTF8.GetString(bytes); } internal static TDelegate GetDelegateForFunctionPointer(IntPtr ptr) { #if NET40 || NET45 || NET40_OR_GREATER return (TDelegate)(object)Marshal.GetDelegateForFunctionPointer(ptr, typeof(TDelegate)); #else return Marshal.GetDelegateForFunctionPointer(ptr); #endif } } } ================================================ FILE: Platforms/Utilities/MemCopyHelper.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Runtime.InteropServices; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Platform.Utilities { internal static class MemCopyHelper { #if WINDOWSDX [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)] static extern void RtlMoveMemory(IntPtr destination, IntPtr source, uint count); #endif public unsafe static void MemoryCopy(T[] data, IntPtr dstPtr, int startIndex, int count) where T : struct { int elementSizeInBytes = sizeof(T); fixed (T* pData = &data[0]) { IntPtr srcPtr = (IntPtr)pData; srcPtr = srcPtr + startIndex * elementSizeInBytes; int sizeInBytes = count * elementSizeInBytes; MemoryCopy(srcPtr, dstPtr, sizeInBytes); } } unsafe public static void MemoryCopy(IntPtr srcPtr, IntPtr dstPtr, int count) { #if NET6_0_OR_GREATER || NETSTANDARD2_0 Buffer.MemoryCopy((void*)srcPtr, (void*)dstPtr, count, count); #else #if WINDOWSDX if (count >= 64) { RtlMoveMemory(dstPtr, srcPtr, (uint)count); return; } #endif byte* dst = (byte*)dstPtr; byte* src = (byte*)srcPtr; int len = count; while (len >= 8) { *((long*)dst) = *((long*)src); dst += 8; src += 8; len -= 8; } while (len >= 4) { *((int*)dst) = *((int*)src); dst += 4; src += 4; len -= 4; } while (len > 0) { *((byte*)dst) = *((byte*)src); dst += 1; src += 1; len -= 1; } #endif } } } ================================================ FILE: Platforms/Utilities/Png/PngCommon.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform.Graphics.Utilities.Png { internal class Palette { private IList _colors; internal Palette() { _colors = new List(); } internal Color this[int index] { get { return _colors[index]; } } internal void AddColor(Color color) { _colors.Add(color); } internal void AddAlphaToColorAtIndex(int colorIndex, byte alpha) { var oldColor = _colors[colorIndex]; _colors[colorIndex] = new Color(oldColor.R, oldColor.G, oldColor.B, alpha); } internal void AddAlphaToColors(IList alphas) { for (int i = 0; i < alphas.Count; i++) { AddAlphaToColorAtIndex(i, alphas[i]); } } } #region Chunks internal class PngChunk { internal PngChunk() { this.Data = new byte[0]; } /// /// Length of Data field /// internal uint Length { get; set; } internal string Type { get; set; } private bool Ancillary { get; set; } private bool Private { get; set; } private bool Reserved { get; set; } private bool SafeToCopy { get; set; } internal byte[] Data { get; set; } /// /// CRC of both Type and Data fields, but not Length field /// internal uint Crc { get; set; } internal virtual void Decode(byte[] chunkBytes) { var chunkBytesList = chunkBytes.ToList(); this.Length = chunkBytesList.GetRange(0, 4).ToArray().ToUInt(); DecodeType(chunkBytesList.GetRange(4, 4).ToArray()); this.Data = chunkBytesList.GetRange(8, (int)this.Length).ToArray(); this.Crc = chunkBytesList.GetRange((int)(8 + this.Length), 4).ToArray().ToUInt(); if (CrcCheck() == false) { throw new Exception("CRC check failed."); } } internal virtual byte[] Encode() { var result = new List(); uint dataLength = (uint)this.Data.Length; uint dataCrc = PngCrc.Calculate(InputToCrcCheck()); result.AddRange(dataLength.ToByteArray()); result.AddRange(GetChunkTypeBytes(this.Type)); result.AddRange(this.Data); result.AddRange(dataCrc.ToByteArray()); return result.ToArray(); } private void DecodeType(byte[] typeBytes) { this.Type = PngChunk.GetChunkTypeString(typeBytes); var bitArray = new BitArray(typeBytes); this.Ancillary = bitArray[4]; this.Private = bitArray[9]; this.Reserved = bitArray[14]; this.SafeToCopy = bitArray[19]; } private bool CrcCheck() { var crcInputBytes = InputToCrcCheck(); return (PngCrc.Calculate(crcInputBytes) == this.Crc); } private byte[] InputToCrcCheck() { byte[] chunkTypeBytes = GetChunkTypeBytes(this.Type); return chunkTypeBytes.Concat(this.Data).ToArray(); } internal static string GetChunkTypeString(byte[] chunkTypeBytes) { return Encoding.UTF8.GetString(chunkTypeBytes, 0, chunkTypeBytes.Length); } private static byte[] GetChunkTypeBytes(string chunkTypeString) { return Encoding.UTF8.GetBytes(chunkTypeString); } } internal class HeaderChunk : PngChunk { private static byte[] pngSignature = new byte[] { 137, 80, 78, 71, 13, 10, 26, 10 }; internal HeaderChunk() { base.Type = "IHDR"; } internal uint Width { get; set; } internal uint Height { get; set; } internal byte BitDepth { get; set; } internal ColorType ColorType { get; set; } internal byte CompressionMethod { get; set; } internal byte FilterMethod { get; set; } internal byte InterlaceMethod { get; set; } internal static byte[] PngSignature { get { return pngSignature; } } internal override void Decode(byte[] chunkBytes) { base.Decode(chunkBytes); var chunkData = base.Data; this.Width = chunkData.Take(4).ToArray().ToUInt(); this.Height = chunkData.Skip(4).Take(4).ToArray().ToUInt(); this.BitDepth = chunkData.Skip(8).First(); this.ColorType = (ColorType)chunkData.Skip(9).First(); this.CompressionMethod = chunkData.Skip(10).First(); this.FilterMethod = chunkData.Skip(11).First(); this.InterlaceMethod = chunkData.Skip(12).First(); if (this.BitDepth < 8) { throw new Exception(String.Format("Bit depth less than 8 bits per sample is unsupported. Image bit depth is {0} bits per sample.", this.BitDepth)); } } internal override byte[] Encode() { var chunkData = new List(); chunkData.AddRange(this.Width.ToByteArray().ToList()); chunkData.AddRange(this.Height.ToByteArray().ToList()); chunkData.Add(this.BitDepth); chunkData.Add((byte)this.ColorType); chunkData.Add(this.CompressionMethod); chunkData.Add(this.FilterMethod); chunkData.Add(this.InterlaceMethod); base.Data = chunkData.ToArray(); return base.Encode(); } } internal class PaletteChunk : PngChunk { internal PaletteChunk() { base.Type = "PLTE"; this.Palette = new Palette(); } internal Palette Palette { get; set; } internal override void Decode(byte[] chunkBytes) { base.Decode(chunkBytes); var chunkData = base.Data; if (chunkData.Length % 3 != 0) { throw new Exception("Malformed palette chunk - length not multiple of 3."); } for (int i = 0; i < chunkData.Length / 3; i++) { byte red = chunkData.Skip(3 * i).Take(1).First(); byte green = chunkData.Skip((3 * i) + 1).Take(1).First(); byte blue = chunkData.Skip((3 * i) + 2).Take(1).First(); this.Palette.AddColor(new Color(red, green, blue)); } } } internal class TransparencyChunk : PngChunk { internal TransparencyChunk() { base.Type = "tRNS"; this.PaletteTransparencies = new List(); } internal IList PaletteTransparencies { get; set; } internal override void Decode(byte[] chunkBytes) { base.Decode(chunkBytes); var chunkData = base.Data; this.PaletteTransparencies = chunkData.ToArray(); } internal override byte[] Encode() { var chunkData = new List(); base.Data = chunkData.ToArray(); return base.Encode(); } } internal class DataChunk : PngChunk { internal DataChunk() { base.Type = "IDAT"; } } internal class EndChunk : PngChunk { internal EndChunk() { base.Type = "IEND"; } } #endregion #region Enumerations internal enum ColorType { Grayscale = 0, Rgb = 2, Palette = 3, GrayscaleWithAlpha = 4, RgbWithAlpha = 6 } internal enum FilterType { None = 0, Sub = 1, Up = 2, Average = 3, Paeth = 4 } #endregion #region Filters internal static class NoneFilter { internal static byte[] Decode(byte[] scanline) { return scanline; } internal static byte[] Encode(byte[] scanline) { var encodedScanline = new byte[scanline.Length + 1]; encodedScanline[0] = (byte)FilterType.None; scanline.CopyTo(encodedScanline, 1); return encodedScanline; } } internal static class SubFilter { internal static byte[] Decode(byte[] scanline, int bytesPerPixel) { byte[] result = new byte[scanline.Length]; for (int x = 1; x < scanline.Length; x++) { byte priorRawByte = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel]; result[x] = (byte)((scanline[x] + priorRawByte) % 256); } return result; } internal static byte[] Encode(byte[] scanline, int bytesPerPixel) { var encodedScanline = new byte[scanline.Length + 1]; encodedScanline[0] = (byte)FilterType.Sub; for (int x = 0; x < scanline.Length; x++) { byte priorRawByte = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel]; encodedScanline[x + 1] = (byte)((scanline[x] - priorRawByte) % 256); } return encodedScanline; } } internal static class UpFilter { internal static byte[] Decode(byte[] scanline, byte[] previousScanline) { byte[] result = new byte[scanline.Length]; for (int x = 1; x < scanline.Length; x++) { byte above = previousScanline[x]; result[x] = (byte)((scanline[x] + above) % 256); } return result; } internal static byte[] Encode(byte[] scanline, byte[] previousScanline) { var encodedScanline = new byte[scanline.Length + 1]; encodedScanline[0] = (byte)FilterType.Up; for (int x = 0; x < scanline.Length; x++) { byte above = previousScanline[x]; encodedScanline[x + 1] = (byte)((scanline[x] - above) % 256); } return encodedScanline; } } internal static class AverageFilter { internal static byte[] Decode(byte[] scanline, byte[] previousScanline, int bytesPerPixel) { byte[] result = new byte[scanline.Length]; for (int x = 1; x < scanline.Length; x++) { byte left = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel]; byte above = previousScanline[x]; result[x] = (byte)((scanline[x] + Average(left, above)) % 256); } return result; } internal static byte[] Encode(byte[] scanline, byte[] previousScanline, int bytesPerPixel) { var encodedScanline = new byte[scanline.Length + 1]; encodedScanline[0] = (byte)FilterType.Average; for (int x = 0; x < scanline.Length; x++) { byte left = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel]; byte above = previousScanline[x]; encodedScanline[x + 1] = (byte)((scanline[x] - Average(left, above)) % 256); } return encodedScanline; } private static int Average(byte left, byte above) { return Convert.ToInt32(Math.Floor((left + above) / 2.0)); } } internal static class PaethFilter { internal static byte[] Decode(byte[] scanline, byte[] previousScanline, int bytesPerPixel) { byte[] result = new byte[scanline.Length]; for (int x = 1; x < scanline.Length; x++) { byte left = (x - bytesPerPixel < 1) ? (byte)0 : result[x - bytesPerPixel]; byte above = previousScanline[x]; byte upperLeft = (x - bytesPerPixel < 1) ? (byte)0 : previousScanline[x - bytesPerPixel]; result[x] = (byte)((scanline[x] + PaethPredictor(left, above, upperLeft)) % 256); } return result; } internal static byte[] Encode(byte[] scanline, byte[] previousScanline, int bytesPerPixel) { var encodedScanline = new byte[scanline.Length + 1]; encodedScanline[0] = (byte)FilterType.Paeth; for (int x = 0; x < scanline.Length; x++) { byte left = (x - bytesPerPixel < 0) ? (byte)0 : scanline[x - bytesPerPixel]; byte above = previousScanline[x]; byte upperLeft = (x - bytesPerPixel < 0) ? (byte)0 : previousScanline[x - bytesPerPixel]; encodedScanline[x + 1] = (byte)((scanline[x] - PaethPredictor(left, above, upperLeft)) % 256); } return encodedScanline; } private static int PaethPredictor(int a, int b, int c) { int p = a + b - c; int pa = Math.Abs(p - a); int pb = Math.Abs(p - b); int pc = Math.Abs(p - c); if ((pa <= pb) && (pa <= pc)) { return a; } else { if (pb <= pc) { return b; } else { return c; } } } } #endregion internal static class PngCrc { // table of CRCs of all 8-bit messages private static uint[] crcTable = null; static PngCrc() { BuildCrcTable(); } /// /// Build CRC lookup table for performance (once-off) /// private static void BuildCrcTable() { crcTable = new uint[256]; uint c, n, k; for (n = 0; n < 256; n++) { c = n; for (k = 0; k < 8; k++) { if ((c & 1) > 0) { c = 0xedb88320 ^ (c >> 1); } else { c = c >> 1; } } crcTable[n] = c; } } internal static uint Calculate(byte[] bytes) { uint c = 0xffffffff; int n; if (crcTable == null) { BuildCrcTable(); } for (n = 0; n < bytes.Length; n++) { c = crcTable[(c ^ bytes[n]) & 0xff] ^ (c >> 8); } return c ^ 0xffffffff; } } internal static class Extensions { internal static uint ToUInt(this byte[] bytes) { byte[] input; if (BitConverter.IsLittleEndian) { input = ReverseByteArray(bytes); } else { input = bytes; } return BitConverter.ToUInt32(input, 0); } internal static byte[] ToByteArray(this uint integer) { byte[] output = BitConverter.GetBytes(integer); if (BitConverter.IsLittleEndian) { return ReverseByteArray(output); } else { return output; } } private static byte[] ReverseByteArray(byte[] byteArray) { byte[] reversed = new byte[byteArray.Length]; for (int i = 0; i < byteArray.Length; i++) reversed[byteArray.Length-1 -i] = byteArray[i]; return reversed; } } } ================================================ FILE: Platforms/Utilities/Png/PngReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Utilities.Deflate; namespace Microsoft.Xna.Platform.Graphics.Utilities.Png { public class PngReader { private int _width; private int _height; private int _bitsPerSample; private int _bytesPerSample; private int _bytesPerPixel; private int _bytesPerScanline; private IList _chunks; private IList _dataChunks; private ColorType _colorType; private Palette _palette; private Texture2D _texture; private Color[] _data; public PngReader() { _chunks = new List(); _dataChunks = new List(); } public Texture2D Read(Stream inputStream, GraphicsDevice graphicsDevice) { if (IsPngImage(inputStream) == false) { throw new Exception("File does not have PNG signature."); } inputStream.Position = 8; while (inputStream.Position != inputStream.Length) { byte[] chunkDataLengthBytes = new byte[4]; inputStream.Read(chunkDataLengthBytes, 0, 4); uint chunkDataLength = chunkDataLengthBytes.ToUInt(); inputStream.Position -= 4; byte[] chunkBytes = new byte[12 + chunkDataLength]; inputStream.Read(chunkBytes, 0, (int)(12 + chunkDataLength)); ProcessChunk(chunkBytes); } UnpackDataChunks(); _texture = new Texture2D(graphicsDevice, _width, _height, false, SurfaceFormat.Color); _texture.SetData(_data); return _texture; } public static bool IsPngImage(Stream stream) { stream.Position = 0; byte[] signature = new byte[8]; stream.Read(signature, 0, 8); bool result = signature.SequenceEqual(HeaderChunk.PngSignature); stream.Position = 0; return result; } private void ProcessChunk(byte[] chunkBytes) { string chunkType = PngChunk.GetChunkTypeString(chunkBytes.Skip(4).Take(4).ToArray()); switch (chunkType) { case "IHDR": var headerChunk = new HeaderChunk(); headerChunk.Decode(chunkBytes); _width = (int)headerChunk.Width; _height = (int)headerChunk.Height; _bitsPerSample = (int)headerChunk.BitDepth; _colorType = headerChunk.ColorType; _chunks.Add(headerChunk); break; case "PLTE": var paletteChunk = new PaletteChunk(); paletteChunk.Decode(chunkBytes); _palette = paletteChunk.Palette; _chunks.Add(paletteChunk); break; case "tRNS": var transparencyChunk = new TransparencyChunk(); transparencyChunk.Decode(chunkBytes); _palette.AddAlphaToColors(transparencyChunk.PaletteTransparencies); break; case "IDAT": var dataChunk = new DataChunk(); dataChunk.Decode(chunkBytes); _dataChunks.Add(dataChunk); break; default: break; } } private void UnpackDataChunks() { var dataByteList = new List(); foreach (var dataChunk in _dataChunks) { if (dataChunk.Type == "IDAT") { dataByteList.AddRange(dataChunk.Data); } } var compressedStream = new MemoryStream(dataByteList.ToArray()); var decompressedStream = new MemoryStream(); try { using (var deflateStream = new ZlibStream(compressedStream, CompressionMode.Decompress)) { deflateStream.CopyTo(decompressedStream); } } catch (Exception exception) { throw new Exception("An error occurred during DEFLATE decompression.", exception); } var decompressedBytes = decompressedStream.ToArray(); var pixelData = DeserializePixelData(decompressedBytes); DecodePixelData(pixelData); } private byte[][] DeserializePixelData(byte[] pixelData) { _bytesPerPixel = CalculateBytesPerPixel(); _bytesPerSample = _bitsPerSample / 8; _bytesPerScanline = (_bytesPerPixel * _width) + 1; int scanlineCount = pixelData.Length / _bytesPerScanline; if (pixelData.Length % _bytesPerScanline != 0) { throw new Exception("Malformed pixel data - total length of pixel data not multiple of ((bytesPerPixel * width) + 1)"); } var result = new byte[scanlineCount][]; for (int y = 0; y < scanlineCount; y++) { result[y] = new byte[_bytesPerScanline]; for (int x = 0; x < _bytesPerScanline; x++) { result[y][x] = pixelData[y * _bytesPerScanline + x]; } } return result; } private void DecodePixelData(byte[][] pixelData) { _data = new Color[_width * _height]; byte[] previousScanline = new byte[_bytesPerScanline]; for (int y = 0; y < _height; y++) { var scanline = pixelData[y]; FilterType filterType = (FilterType)scanline[0]; byte[] defilteredScanline; switch (filterType) { case FilterType.None: defilteredScanline = NoneFilter.Decode(scanline); break; case FilterType.Sub: defilteredScanline = SubFilter.Decode(scanline, _bytesPerPixel); break; case FilterType.Up: defilteredScanline = UpFilter.Decode(scanline, previousScanline); break; case FilterType.Average: defilteredScanline = AverageFilter.Decode(scanline, previousScanline, _bytesPerPixel); break; case FilterType.Paeth: defilteredScanline = PaethFilter.Decode(scanline, previousScanline, _bytesPerPixel); break; default: throw new Exception("Unknown filter type."); } previousScanline = defilteredScanline; ProcessDefilteredScanline(defilteredScanline, y); } } private void ProcessDefilteredScanline(byte[] defilteredScanline, int y) { switch (_colorType) { case ColorType.Grayscale: for (int x = 0; x < _width; x++) { int offset = 1 + (x * _bytesPerPixel); byte intensity = defilteredScanline[offset]; _data[(y * _width) + x] = new Color(intensity, intensity, intensity); } break; case ColorType.GrayscaleWithAlpha: for (int x = 0; x < _width; x++) { int offset = 1 + (x * _bytesPerPixel); byte intensity = defilteredScanline[offset]; byte alpha = defilteredScanline[offset + _bytesPerSample]; _data[(y * _width) + x] = new Color(intensity, intensity, intensity, alpha); } break; case ColorType.Palette: for (int x = 0; x < _width; x++) { var pixelColor = _palette[defilteredScanline[x + 1]]; _data[(y * _width) + x] = pixelColor; } break; case ColorType.Rgb: for (int x = 0; x < _width; x++) { int offset = 1 + (x * _bytesPerPixel); int red = defilteredScanline[offset]; int green = defilteredScanline[offset + _bytesPerSample]; int blue = defilteredScanline[offset + 2 * _bytesPerSample]; _data[(y * _width) + x] = new Color(red, green, blue); } break; case ColorType.RgbWithAlpha: for (int x = 0; x < _width; x++) { int offset = 1 + (x * _bytesPerPixel); int red = defilteredScanline[offset]; int green = defilteredScanline[offset + _bytesPerSample]; int blue = defilteredScanline[offset + 2 * _bytesPerSample]; int alpha = defilteredScanline[offset + 3 * _bytesPerSample]; _data[(y * _width) + x] = new Color(red, green, blue, alpha); } break; default: break; } } private int CalculateBytesPerPixel() { switch (_colorType) { case ColorType.Grayscale: return _bitsPerSample / 8; case ColorType.GrayscaleWithAlpha: return (2 * _bitsPerSample) / 8; case ColorType.Palette: return _bitsPerSample / 8; case ColorType.Rgb: return (3 * _bitsPerSample) / 8; case ColorType.RgbWithAlpha: return (4 * _bitsPerSample) / 8; default: throw new Exception("Unknown color type."); } } } } ================================================ FILE: Platforms/Utilities/Png/PngWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Utilities.Deflate; namespace Microsoft.Xna.Platform.Graphics.Utilities.Png { public class PngWriter { private const int _bitsPerSample = 8; private ColorType _colorType; private Color[] _colorData; private int _width; private int _height; public PngWriter() { _colorType = ColorType.RgbWithAlpha; } public void Write(ITexture2DStrategy texture2D, Stream outputStream) { _width = texture2D.Width; _height = texture2D.Height; _colorData = TextureHelpers.GetColorData(texture2D); // write PNG signature outputStream.Write(HeaderChunk.PngSignature, 0, HeaderChunk.PngSignature.Length); // write header chunk var headerChunk = new HeaderChunk(); headerChunk.Width = (uint)texture2D.Width; headerChunk.Height = (uint)texture2D.Height; headerChunk.BitDepth = 8; headerChunk.ColorType = _colorType; headerChunk.CompressionMethod = 0; headerChunk.FilterMethod = 0; headerChunk.InterlaceMethod = 0; var headerChunkBytes = headerChunk.Encode(); outputStream.Write(headerChunkBytes, 0, headerChunkBytes.Length); // write data chunks var encodedPixelData = EncodePixelData(); var compressedPixelData = new MemoryStream(); try { using (var deflateStream = new ZlibStream(new MemoryStream(encodedPixelData), CompressionMode.Compress)) { deflateStream.CopyTo(compressedPixelData); } } catch (Exception exception) { throw new Exception("An error occurred during DEFLATE compression.", exception); } var dataChunk = new DataChunk(); dataChunk.Data = compressedPixelData.ToArray(); var dataChunkBytes = dataChunk.Encode(); outputStream.Write(dataChunkBytes, 0, dataChunkBytes.Length); // write end chunk var endChunk = new EndChunk(); var endChunkBytes = endChunk.Encode(); outputStream.Write(endChunkBytes, 0, endChunkBytes.Length); } private byte[] EncodePixelData() { List filteredScanlines = new List(); int bytesPerPixel = CalculateBytesPerPixel(); byte[] previousScanline = new byte[_width * bytesPerPixel]; for (int y = 0; y < _height; y++) { var rawScanline = GetRawScanline(y); var filteredScanline = GetOptimalFilteredScanline(rawScanline, previousScanline, bytesPerPixel); filteredScanlines.Add(filteredScanline); previousScanline = rawScanline; } List result = new List(); foreach (var encodedScanline in filteredScanlines) { result.AddRange(encodedScanline); } return result.ToArray(); } /// /// Applies all PNG filters to the given scanline and returns the filtered scanline that is deemed /// to be most compressible, using lowest total variation as proxy for compressibility. /// /// /// /// /// private byte[] GetOptimalFilteredScanline(byte[] rawScanline, byte[] previousScanline, int bytesPerPixel) { var candidates = new List>(); var sub = SubFilter.Encode(rawScanline, bytesPerPixel); candidates.Add(new Tuple(sub, CalculateTotalVariation(sub))); var up = UpFilter.Encode(rawScanline, previousScanline); candidates.Add(new Tuple(up, CalculateTotalVariation(up))); var average = AverageFilter.Encode(rawScanline, previousScanline, bytesPerPixel); candidates.Add(new Tuple(average, CalculateTotalVariation(average))); var paeth = PaethFilter.Encode(rawScanline, previousScanline, bytesPerPixel); candidates.Add(new Tuple(paeth, CalculateTotalVariation(paeth))); int lowestTotalVariation = Int32.MaxValue; int lowestTotalVariationIndex = 0; for (int i = 0; i < candidates.Count; i++) { if (candidates[i].Item2 < lowestTotalVariation) { lowestTotalVariationIndex = i; lowestTotalVariation = candidates[i].Item2; } } return candidates[lowestTotalVariationIndex].Item1; } /// /// Calculates the total variation of given byte array. Total variation is the sum of the absolute values of /// neighbour differences. /// /// /// private int CalculateTotalVariation(byte[] input) { int totalVariation = 0; for (int i = 1; i < input.Length; i++) { totalVariation += Math.Abs(input[i] - input[i - 1]); } return totalVariation; } private byte[] GetRawScanline(int y) { var rawScanline = new byte[4 * _width]; for (int x = 0; x < _width; x++) { var color = _colorData[(y * _width) + x]; rawScanline[4 * x] = color.R; rawScanline[(4 * x) + 1] = color.G; rawScanline[(4 * x) + 2] = color.B; rawScanline[(4 * x) + 3] = color.A; } return rawScanline; } private int CalculateBytesPerPixel() { switch (_colorType) { case ColorType.Grayscale: return _bitsPerSample / 8; case ColorType.GrayscaleWithAlpha: return (2 * _bitsPerSample) / 8; case ColorType.Palette: return _bitsPerSample / 8; case ColorType.Rgb: return (3 * _bitsPerSample) / 8; case ColorType.RgbWithAlpha: return (4 * _bitsPerSample) / 8; default: return -1; } } } } ================================================ FILE: Platforms/Utilities/Png/ZLibStream.cs ================================================ // ZlibStream.cs // ------------------------------------------------------------------ // // Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. // All rights reserved. // // This code module is part of DotNetZip, a zipfile class library. // // ------------------------------------------------------------------ // // This code is licensed under the Microsoft Public License. // See the file License.txt for the license details. // More info on: http://dotnetzip.codeplex.com // // ------------------------------------------------------------------ // // last saved (in emacs): // Time-stamp: <2011-July-31 14:53:33> // // ------------------------------------------------------------------ // // This module defines the ZlibStream class, which is similar in idea to // the System.IO.Compression.DeflateStream and // System.IO.Compression.GZipStream classes in the .NET BCL. // // ------------------------------------------------------------------ // The following notice applies to jzlib: // ----------------------------------------------------------------------------- // Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the distribution. // 3. The names of the authors may not be used to endorse or promote products // derived from this software without specific prior written permission. // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, // INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ----------------------------------------------------------------------------- // jzlib is based on zlib-1.1.3. // The following notice applies to zlib: // ----------------------------------------------------------------------------- // Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler // The ZLIB software is provided 'as-is', without any express or implied // warranty. In no event will the authors be held liable for any damages // arising from the use of this software. // Permission is granted to anyone to use this software for any purpose, // including commercial applications, and to alter it and redistribute it // freely, subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software // in a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not be // misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. // Jean-loup Gailly jloup@gzip.org // Mark Adler madler@alumni.caltech.edu //------------------------------------------------------------------------------ using System; using System.Collections.Generic; using System.IO; using System.Text; namespace Microsoft.Xna.Platform.Utilities.Deflate { /// /// Represents a Zlib stream for compression or decompression. /// /// /// /// /// The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any /// stream. /// /// /// Using this stream, applications can compress or decompress data via /// stream Read() and Write() operations. Either compression or /// decompression can occur through either reading or writing. The compression /// format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed /// Data Format Specification version 3.3". This implementation of ZLIB always uses /// DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE /// Compressed Data Format Specification version 1.3.") /// /// /// The ZLIB format allows for varying compression methods, window sizes, and dictionaries. /// This implementation always uses the DEFLATE compression method, a preset dictionary, /// and 15 window bits by default. /// /// /// /// This class is similar to DeflateStream, except that it adds the /// RFC1950 header and trailer bytes to a compressed stream when compressing, or expects /// the RFC1950 header and trailer bytes when decompressing. It is also similar to the /// . /// /// /// internal class ZlibStream : Stream { internal ZlibBaseStream _baseStream; bool _disposed; /// /// Create a ZlibStream using the specified CompressionMode. /// /// /// /// /// When mode is CompressionMode.Compress, the ZlibStream /// will use the default compression level. The "captive" stream will be /// closed when the ZlibStream is closed. /// /// /// /// /// /// This example uses a ZlibStream to compress a file, and writes the /// compressed data to another file. /// /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) /// { /// using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// } /// /// /// Using input As Stream = File.OpenRead(fileToCompress) /// Using raw As FileStream = File.Create(fileToCompress & ".zlib") /// Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// End Using /// /// /// /// The stream which will be read or written. /// Indicates whether the ZlibStream will compress or decompress. public ZlibStream(System.IO.Stream stream, CompressionMode mode) : this(stream, mode, CompressionLevel.Default, false) { } /// /// Create a ZlibStream using the specified CompressionMode and /// the specified CompressionLevel. /// /// /// /// /// /// When mode is CompressionMode.Decompress, the level parameter is ignored. /// The "captive" stream will be closed when the ZlibStream is closed. /// /// /// /// /// /// This example uses a ZlibStream to compress data from a file, and writes the /// compressed data to another file. /// /// /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) /// { /// using (Stream compressor = new ZlibStream(raw, /// CompressionMode.Compress, /// CompressionLevel.BestCompression)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// } /// /// /// /// Using input As Stream = File.OpenRead(fileToCompress) /// Using raw As FileStream = File.Create(fileToCompress & ".zlib") /// Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// End Using /// /// /// /// The stream to be read or written while deflating or inflating. /// Indicates whether the ZlibStream will compress or decompress. /// A tuning knob to trade speed for effectiveness. public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level) : this(stream, mode, level, false) { } /// /// Create a ZlibStream using the specified CompressionMode, and /// explicitly specify whether the captive stream should be left open after /// Deflation or Inflation. /// /// /// /// /// /// When mode is CompressionMode.Compress, the ZlibStream will use /// the default compression level. /// /// /// /// This constructor allows the application to request that the captive stream /// remain open after the deflation or inflation occurs. By default, after /// Close() is called on the stream, the captive stream is also /// closed. In some cases this is not desired, for example if the stream is a /// that will be re-read after /// compression. Specify true for the parameter to leave the stream /// open. /// /// /// /// See the other overloads of this constructor for example code. /// /// /// /// /// The stream which will be read or written. This is called the /// "captive" stream in other places in this documentation. /// Indicates whether the ZlibStream will compress or decompress. /// true if the application would like the stream to remain /// open after inflation/deflation. public ZlibStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen) : this(stream, mode, CompressionLevel.Default, leaveOpen) { } /// /// Create a ZlibStream using the specified CompressionMode /// and the specified CompressionLevel, and explicitly specify /// whether the stream should be left open after Deflation or Inflation. /// /// /// /// /// /// This constructor allows the application to request that the captive /// stream remain open after the deflation or inflation occurs. By /// default, after Close() is called on the stream, the captive /// stream is also closed. In some cases this is not desired, for example /// if the stream is a that will be /// re-read after compression. Specify true for the parameter to leave the stream open. /// /// /// /// When mode is CompressionMode.Decompress, the level parameter is /// ignored. /// /// /// /// /// /// /// This example shows how to use a ZlibStream to compress the data from a file, /// and store the result into another file. The filestream remains open to allow /// additional data to be written to it. /// /// /// using (var output = System.IO.File.Create(fileToCompress + ".zlib")) /// { /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// // can write additional data to the output stream here /// } /// /// /// Using output As FileStream = File.Create(fileToCompress & ".zlib") /// Using input As Stream = File.OpenRead(fileToCompress) /// Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// ' can write additional data to the output stream here. /// End Using /// /// /// /// The stream which will be read or written. /// /// Indicates whether the ZlibStream will compress or decompress. /// /// /// true if the application would like the stream to remain open after /// inflation/deflation. /// /// /// /// A tuning knob to trade speed for effectiveness. This parameter is /// effective only when mode is CompressionMode.Compress. /// public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) { _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, leaveOpen); } #region Zlib properties /// /// This property sets the flush behavior on the stream. /// Sorry, though, not sure exactly how to describe all the various settings. /// virtual public FlushType FlushMode { get { return (this._baseStream._flushMode); } set { if (_disposed) throw new ObjectDisposedException("ZlibStream"); this._baseStream._flushMode = value; } } /// /// The size of the working buffer for the compression codec. /// /// /// /// /// The working buffer is used for all stream operations. The default size is /// 1024 bytes. The minimum size is 128 bytes. You may get better performance /// with a larger buffer. Then again, you might not. You would have to test /// it. /// /// /// /// Set this before the first call to Read() or Write() on the /// stream. If you try to set it afterwards, it will throw. /// /// public int BufferSize { get { return this._baseStream._bufferSize; } set { if (_disposed) throw new ObjectDisposedException("ZlibStream"); if (this._baseStream._workingBuffer != null) throw new ZlibException("The working buffer is already set."); if (value < ZlibConstants.WorkingBufferSizeMin) throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); this._baseStream._bufferSize = value; } } /// Returns the total number of bytes input so far. virtual public long TotalIn { get { return this._baseStream._z.TotalBytesIn; } } /// Returns the total number of bytes output so far. virtual public long TotalOut { get { return this._baseStream._z.TotalBytesOut; } } #endregion #region System.IO.Stream methods /// /// Dispose the stream. /// /// /// /// This may or may not result in a Close() call on the captive /// stream. See the constructors that have a leaveOpen parameter /// for more information. /// /// /// This method may be invoked in two distinct scenarios. If disposing /// == true, the method has been called directly or indirectly by a /// user's code, for example via the public Dispose() method. In this /// case, both managed and unmanaged resources can be referenced and /// disposed. If disposing == false, the method has been called by the /// runtime from inside the object finalizer and this method should not /// reference other objects; in that case only unmanaged resources must /// be referenced or disposed. /// /// /// /// indicates whether the Dispose method was invoked by user code. /// protected override void Dispose(bool disposing) { try { if (!_disposed) { if (disposing && (this._baseStream != null)) this._baseStream.Dispose(); _disposed = true; } } finally { base.Dispose(disposing); } } /// /// Indicates whether the stream can be read. /// /// /// The return value depends on whether the captive stream supports reading. /// public override bool CanRead { get { if (_disposed) throw new ObjectDisposedException("ZlibStream"); return _baseStream._stream.CanRead; } } /// /// Indicates whether the stream supports Seek operations. /// /// /// Always returns false. /// public override bool CanSeek { get { return false; } } /// /// Indicates whether the stream can be written. /// /// /// The return value depends on whether the captive stream supports writing. /// public override bool CanWrite { get { if (_disposed) throw new ObjectDisposedException("ZlibStream"); return _baseStream._stream.CanWrite; } } /// /// Flush the stream. /// public override void Flush() { if (_disposed) throw new ObjectDisposedException("ZlibStream"); _baseStream.Flush(); } /// /// Reading this property always throws a . /// public override long Length { get { throw new NotSupportedException(); } } /// /// The position of the stream pointer. /// /// /// /// Setting this property always throws a . Reading will return the total bytes /// written out, if used in writing, or the total bytes read in, if used in /// reading. The count may refer to compressed bytes or uncompressed bytes, /// depending on how you've used the stream. /// public override long Position { get { if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Writer) return this._baseStream._z.TotalBytesOut; if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Reader) return this._baseStream._z.TotalBytesIn; return 0; } set { throw new NotSupportedException(); } } /// /// Read data from the stream. /// /// /// /// /// /// If you wish to use the ZlibStream to compress data while reading, /// you can create a ZlibStream with CompressionMode.Compress, /// providing an uncompressed data stream. Then call Read() on that /// ZlibStream, and the data read will be compressed. If you wish to /// use the ZlibStream to decompress data while reading, you can create /// a ZlibStream with CompressionMode.Decompress, providing a /// readable compressed data stream. Then call Read() on that /// ZlibStream, and the data will be decompressed as it is read. /// /// /// /// A ZlibStream can be used for Read() or Write(), but /// not both. /// /// /// /// /// /// The buffer into which the read data should be placed. /// /// /// the offset within that data array to put the first byte read. /// /// the number of bytes to read. /// /// the number of bytes read public override int Read(byte[] buffer, int offset, int count) { if (_disposed) throw new ObjectDisposedException("ZlibStream"); return _baseStream.Read(buffer, offset, count); } /// /// Calling this method always throws a . /// /// /// The offset to seek to.... /// IF THIS METHOD ACTUALLY DID ANYTHING. /// /// /// The reference specifying how to apply the offset.... IF /// THIS METHOD ACTUALLY DID ANYTHING. /// /// /// nothing. This method always throws. public override long Seek(long offset, System.IO.SeekOrigin origin) { throw new NotSupportedException(); } /// /// Calling this method always throws a . /// /// /// The new value for the stream length.... IF /// THIS METHOD ACTUALLY DID ANYTHING. /// public override void SetLength(long value) { throw new NotSupportedException(); } /// /// Write data to the stream. /// /// /// /// /// /// If you wish to use the ZlibStream to compress data while writing, /// you can create a ZlibStream with CompressionMode.Compress, /// and a writable output stream. Then call Write() on that /// ZlibStream, providing uncompressed data as input. The data sent to /// the output stream will be the compressed form of the data written. If you /// wish to use the ZlibStream to decompress data while writing, you /// can create a ZlibStream with CompressionMode.Decompress, and a /// writable output stream. Then call Write() on that stream, /// providing previously compressed data. The data sent to the output stream /// will be the decompressed form of the data written. /// /// /// /// A ZlibStream can be used for Read() or Write(), but not both. /// /// /// The buffer holding data to write to the stream. /// the offset within that data array to find the first byte to write. /// the number of bytes to write. public override void Write(byte[] buffer, int offset, int count) { if (_disposed) throw new ObjectDisposedException("ZlibStream"); _baseStream.Write(buffer, offset, count); } #endregion /// /// Compress a string into a byte array using ZLIB. /// /// /// /// Uncompress it with . /// /// /// /// /// /// /// /// A string to compress. The string will first be encoded /// using UTF8, then compressed. /// /// /// The string in compressed form public static byte[] CompressString(String s) { using (var ms = new MemoryStream()) { Stream compressor = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); ZlibBaseStream.CompressString(s, compressor); return ms.ToArray(); } } /// /// Compress a byte array into a new byte array using ZLIB. /// /// /// /// Uncompress it with . /// /// /// /// /// /// /// A buffer to compress. /// /// /// The data in compressed form public static byte[] CompressBuffer(byte[] b) { using (var ms = new MemoryStream()) { Stream compressor = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); ZlibBaseStream.CompressBuffer(b, compressor); return ms.ToArray(); } } /// /// Uncompress a ZLIB-compressed byte array into a single string. /// /// /// /// /// /// /// A buffer containing ZLIB-compressed data. /// /// /// The uncompressed string public static String UncompressString(byte[] compressed) { using (var input = new MemoryStream(compressed)) { Stream decompressor = new ZlibStream(input, CompressionMode.Decompress); return ZlibBaseStream.UncompressString(compressed, decompressor); } } /// /// Uncompress a ZLIB-compressed byte array into a byte array. /// /// /// /// /// /// /// A buffer containing ZLIB-compressed data. /// /// /// The data in uncompressed form public static byte[] UncompressBuffer(byte[] compressed) { using (var input = new MemoryStream(compressed)) { Stream decompressor = new ZlibStream(input, CompressionMode.Decompress); return ZlibBaseStream.UncompressBuffer(compressed, decompressor); } } } /// /// A bunch of constants used in the Zlib interface. /// internal static class ZlibConstants { /// /// The maximum number of window bits for the Deflate algorithm. /// internal const int WindowBitsMax = 15; // 32K LZ77 window /// /// The default number of window bits for the Deflate algorithm. /// internal const int WindowBitsDefault = WindowBitsMax; /// /// indicates everything is A-OK /// internal const int Z_OK = 0; /// /// Indicates that the last operation reached the end of the stream. /// internal const int Z_STREAM_END = 1; /// /// The operation ended in need of a dictionary. /// internal const int Z_NEED_DICT = 2; /// /// There was an error with the stream - not enough data, not open and readable, etc. /// internal const int Z_STREAM_ERROR = -2; /// /// There was an error with the data - not enough data, bad data, etc. /// internal const int Z_DATA_ERROR = -3; /// /// There was an error with the working buffer. /// internal const int Z_BUF_ERROR = -5; /// /// The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. /// #if NETCF internal const int WorkingBufferSizeDefault = 8192; #else internal const int WorkingBufferSizeDefault = 16384; #endif /// /// The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. /// internal const int WorkingBufferSizeMin = 1024; } /// /// Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). /// /// /// /// This class compresses and decompresses data according to the Deflate algorithm /// and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. /// sealed internal class ZlibCodec { /// /// The buffer from which data is taken. /// internal byte[] InputBuffer; /// /// An index into the InputBuffer array, indicating where to start reading. /// internal int NextIn; /// /// The number of bytes available in the InputBuffer, starting at NextIn. /// /// /// Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. /// The class will update this number as calls to Inflate/Deflate are made. /// internal int AvailableBytesIn; /// /// Total number of bytes read so far, through all calls to Inflate()/Deflate(). /// internal long TotalBytesIn; /// /// Buffer to store output data. /// internal byte[] OutputBuffer; /// /// An index into the OutputBuffer array, indicating where to start writing. /// internal int NextOut; /// /// The number of bytes available in the OutputBuffer, starting at NextOut. /// /// /// Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. /// The class will update this number as calls to Inflate/Deflate are made. /// internal int AvailableBytesOut; /// /// Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). /// internal long TotalBytesOut; /// /// used for diagnostics, when something goes wrong! /// internal System.String Message; internal DeflateManager dstate; internal InflateManager istate; internal uint _Adler32; /// /// The compression level to use in this codec. Useful only in compression mode. /// internal CompressionLevel CompressLevel = CompressionLevel.Default; /// /// The number of Window Bits to use. /// /// /// This gauges the size of the sliding window, and hence the /// compression effectiveness as well as memory consumption. It's best to just leave this /// setting alone if you don't know what it is. The maximum value is 15 bits, which implies /// a 32k window. /// internal int WindowBits = ZlibConstants.WindowBitsDefault; /// /// The compression strategy to use. /// /// /// This is only effective in compression. The theory offered by ZLIB is that different /// strategies could potentially produce significant differences in compression behavior /// for different data sets. Unfortunately I don't have any good recommendations for how /// to set it differently. When I tested changing the strategy I got minimally different /// compression performance. It's best to leave this property alone if you don't have a /// good feel for it. Or, you may want to produce a test harness that runs through the /// different strategy options and evaluates them on different file types. If you do that, /// let me know your results. /// internal CompressionStrategy Strategy = CompressionStrategy.Default; /// /// The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. /// internal int Adler32 { get { return (int)_Adler32; } } /// /// Create a ZlibCodec. /// /// /// If you use this default constructor, you will later have to explicitly call /// InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress /// or decompress. /// internal ZlibCodec() { } /// /// Create a ZlibCodec that either compresses or decompresses. /// /// /// Indicates whether the codec should compress (deflate) or decompress (inflate). /// internal ZlibCodec(CompressionMode mode) { if (mode == CompressionMode.Compress) { int rc = InitializeDeflate(); if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for deflate."); } else if (mode == CompressionMode.Decompress) { int rc = InitializeInflate(); if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for inflate."); } else throw new ZlibException("Invalid ZlibStreamFlavor."); } /// /// Initialize the inflation state. /// /// /// It is not necessary to call this before using the ZlibCodec to inflate data; /// It is implicitly called when you call the constructor. /// /// Z_OK if everything goes well. internal int InitializeInflate() { return InitializeInflate(this.WindowBits); } /// /// Initialize the inflation state with an explicit flag to /// govern the handling of RFC1950 header bytes. /// /// /// /// By default, the ZLIB header defined in RFC 1950 is expected. If /// you want to read a zlib stream you should specify true for /// expectRfc1950Header. If you have a deflate stream, you will want to specify /// false. It is only necessary to invoke this initializer explicitly if you /// want to specify false. /// /// /// whether to expect an RFC1950 header byte /// pair when reading the stream of data to be inflated. /// /// Z_OK if everything goes well. internal int InitializeInflate(bool expectRfc1950Header) { return InitializeInflate(this.WindowBits, expectRfc1950Header); } /// /// Initialize the ZlibCodec for inflation, with the specified number of window bits. /// /// The number of window bits to use. If you need to ask what that is, /// then you shouldn't be calling this initializer. /// Z_OK if all goes well. internal int InitializeInflate(int windowBits) { this.WindowBits = windowBits; return InitializeInflate(windowBits, true); } /// /// Initialize the inflation state with an explicit flag to govern the handling of /// RFC1950 header bytes. /// /// /// /// If you want to read a zlib stream you should specify true for /// expectRfc1950Header. In this case, the library will expect to find a ZLIB /// header, as defined in RFC /// 1950, in the compressed stream. If you will be reading a DEFLATE or /// GZIP stream, which does not have such a header, you will want to specify /// false. /// /// /// whether to expect an RFC1950 header byte pair when reading /// the stream of data to be inflated. /// The number of window bits to use. If you need to ask what that is, /// then you shouldn't be calling this initializer. /// Z_OK if everything goes well. internal int InitializeInflate(int windowBits, bool expectRfc1950Header) { this.WindowBits = windowBits; if (dstate != null) throw new ZlibException("You may not call InitializeInflate() after calling InitializeDeflate()."); istate = new InflateManager(expectRfc1950Header); return istate.Initialize(this, windowBits); } /// /// Inflate the data in the InputBuffer, placing the result in the OutputBuffer. /// /// /// You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and /// AvailableBytesOut before calling this method. /// /// /// /// private void InflateBuffer() /// { /// int bufferSize = 1024; /// byte[] buffer = new byte[bufferSize]; /// ZlibCodec decompressor = new ZlibCodec(); /// /// Console.WriteLine("\n============================================"); /// Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); /// MemoryStream ms = new MemoryStream(DecompressedBytes); /// /// int rc = decompressor.InitializeInflate(); /// /// decompressor.InputBuffer = CompressedBytes; /// decompressor.NextIn = 0; /// decompressor.AvailableBytesIn = CompressedBytes.Length; /// /// decompressor.OutputBuffer = buffer; /// /// // pass 1: inflate /// do /// { /// decompressor.NextOut = 0; /// decompressor.AvailableBytesOut = buffer.Length; /// rc = decompressor.Inflate(FlushType.None); /// /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) /// throw new Exception("inflating: " + decompressor.Message); /// /// ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); /// } /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); /// /// // pass 2: finish and flush /// do /// { /// decompressor.NextOut = 0; /// decompressor.AvailableBytesOut = buffer.Length; /// rc = decompressor.Inflate(FlushType.Finish); /// /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) /// throw new Exception("inflating: " + decompressor.Message); /// /// if (buffer.Length - decompressor.AvailableBytesOut > 0) /// ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); /// } /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); /// /// decompressor.EndInflate(); /// } /// /// /// /// The flush to use when inflating. /// Z_OK if everything goes well. internal int Inflate(FlushType flush) { if (istate == null) throw new ZlibException("No Inflate State!"); return istate.Inflate(flush); } /// /// Ends an inflation session. /// /// /// Call this after successively calling Inflate(). This will cause all buffers to be flushed. /// After calling this you cannot call Inflate() without a intervening call to one of the /// InitializeInflate() overloads. /// /// Z_OK if everything goes well. internal int EndInflate() { if (istate == null) throw new ZlibException("No Inflate State!"); int ret = istate.End(); istate = null; return ret; } /// /// I don't know what this does! /// /// Z_OK if everything goes well. internal int SyncInflate() { if (istate == null) throw new ZlibException("No Inflate State!"); return istate.Sync(); } /// /// Initialize the ZlibCodec for deflation operation. /// /// /// The codec will use the MAX window bits and the default level of compression. /// /// /// /// int bufferSize = 40000; /// byte[] CompressedBytes = new byte[bufferSize]; /// byte[] DecompressedBytes = new byte[bufferSize]; /// /// ZlibCodec compressor = new ZlibCodec(); /// /// compressor.InitializeDeflate(CompressionLevel.Default); /// /// compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); /// compressor.NextIn = 0; /// compressor.AvailableBytesIn = compressor.InputBuffer.Length; /// /// compressor.OutputBuffer = CompressedBytes; /// compressor.NextOut = 0; /// compressor.AvailableBytesOut = CompressedBytes.Length; /// /// while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) /// { /// compressor.Deflate(FlushType.None); /// } /// /// while (true) /// { /// int rc= compressor.Deflate(FlushType.Finish); /// if (rc == ZlibConstants.Z_STREAM_END) break; /// } /// /// compressor.EndDeflate(); /// /// /// /// Z_OK if all goes well. You generally don't need to check the return code. internal int InitializeDeflate() { return _InternalInitializeDeflate(true); } /// /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. /// /// /// The codec will use the maximum window bits (15) and the specified /// CompressionLevel. It will emit a ZLIB stream as it compresses. /// /// The compression level for the codec. /// Z_OK if all goes well. internal int InitializeDeflate(CompressionLevel level) { this.CompressLevel = level; return _InternalInitializeDeflate(true); } /// /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, /// and the explicit flag governing whether to emit an RFC1950 header byte pair. /// /// /// The codec will use the maximum window bits (15) and the specified CompressionLevel. /// If you want to generate a zlib stream, you should specify true for /// wantRfc1950Header. In this case, the library will emit a ZLIB /// header, as defined in RFC /// 1950, in the compressed stream. /// /// The compression level for the codec. /// whether to emit an initial RFC1950 byte pair in the compressed stream. /// Z_OK if all goes well. internal int InitializeDeflate(CompressionLevel level, bool wantRfc1950Header) { this.CompressLevel = level; return _InternalInitializeDeflate(wantRfc1950Header); } /// /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, /// and the specified number of window bits. /// /// /// The codec will use the specified number of window bits and the specified CompressionLevel. /// /// The compression level for the codec. /// the number of window bits to use. If you don't know what this means, don't use this method. /// Z_OK if all goes well. internal int InitializeDeflate(CompressionLevel level, int bits) { this.CompressLevel = level; this.WindowBits = bits; return _InternalInitializeDeflate(true); } /// /// Initialize the ZlibCodec for deflation operation, using the specified /// CompressionLevel, the specified number of window bits, and the explicit flag /// governing whether to emit an RFC1950 header byte pair. /// /// /// The compression level for the codec. /// whether to emit an initial RFC1950 byte pair in the compressed stream. /// the number of window bits to use. If you don't know what this means, don't use this method. /// Z_OK if all goes well. internal int InitializeDeflate(CompressionLevel level, int bits, bool wantRfc1950Header) { this.CompressLevel = level; this.WindowBits = bits; return _InternalInitializeDeflate(wantRfc1950Header); } private int _InternalInitializeDeflate(bool wantRfc1950Header) { if (istate != null) throw new ZlibException("You may not call InitializeDeflate() after calling InitializeInflate()."); dstate = new DeflateManager(); dstate.WantRfc1950HeaderBytes = wantRfc1950Header; return dstate.Initialize(this, this.CompressLevel, this.WindowBits, this.Strategy); } /// /// Deflate one batch of data. /// /// /// You must have set InputBuffer and OutputBuffer before calling this method. /// /// /// /// private void DeflateBuffer(CompressionLevel level) /// { /// int bufferSize = 1024; /// byte[] buffer = new byte[bufferSize]; /// ZlibCodec compressor = new ZlibCodec(); /// /// Console.WriteLine("\n============================================"); /// Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); /// MemoryStream ms = new MemoryStream(); /// /// int rc = compressor.InitializeDeflate(level); /// /// compressor.InputBuffer = UncompressedBytes; /// compressor.NextIn = 0; /// compressor.AvailableBytesIn = UncompressedBytes.Length; /// /// compressor.OutputBuffer = buffer; /// /// // pass 1: deflate /// do /// { /// compressor.NextOut = 0; /// compressor.AvailableBytesOut = buffer.Length; /// rc = compressor.Deflate(FlushType.None); /// /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) /// throw new Exception("deflating: " + compressor.Message); /// /// ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); /// } /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); /// /// // pass 2: finish and flush /// do /// { /// compressor.NextOut = 0; /// compressor.AvailableBytesOut = buffer.Length; /// rc = compressor.Deflate(FlushType.Finish); /// /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) /// throw new Exception("deflating: " + compressor.Message); /// /// if (buffer.Length - compressor.AvailableBytesOut > 0) /// ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); /// } /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); /// /// compressor.EndDeflate(); /// /// ms.Seek(0, SeekOrigin.Begin); /// CompressedBytes = new byte[compressor.TotalBytesOut]; /// ms.Read(CompressedBytes, 0, CompressedBytes.Length); /// } /// /// /// whether to flush all data as you deflate. Generally you will want to /// use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to /// flush everything. /// /// Z_OK if all goes well. internal int Deflate(FlushType flush) { if (dstate == null) throw new ZlibException("No Deflate State!"); return dstate.Deflate(flush); } /// /// End a deflation session. /// /// /// Call this after making a series of one or more calls to Deflate(). All buffers are flushed. /// /// Z_OK if all goes well. internal int EndDeflate() { if (dstate == null) throw new ZlibException("No Deflate State!"); // TODO: dinoch Tue, 03 Nov 2009 15:39 (test this) //int ret = dstate.End(); dstate = null; return ZlibConstants.Z_OK; //ret; } /// /// Reset a codec for another deflation session. /// /// /// Call this to reset the deflation state. For example if a thread is deflating /// non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first /// block and before the next Deflate(None) of the second block. /// /// Z_OK if all goes well. internal void ResetDeflate() { if (dstate == null) throw new ZlibException("No Deflate State!"); dstate.Reset(); } /// /// Set the CompressionStrategy and CompressionLevel for a deflation session. /// /// the level of compression to use. /// the strategy to use for compression. /// Z_OK if all goes well. internal int SetDeflateParams(CompressionLevel level, CompressionStrategy strategy) { if (dstate == null) throw new ZlibException("No Deflate State!"); return dstate.SetParams(level, strategy); } /// /// Set the dictionary to be used for either Inflation or Deflation. /// /// The dictionary bytes to use. /// Z_OK if all goes well. internal int SetDictionary(byte[] dictionary) { if (istate != null) return istate.SetDictionary(dictionary); if (dstate != null) return dstate.SetDictionary(dictionary); throw new ZlibException("No Inflate or Deflate state!"); } // Flush as much pending output as possible. All deflate() output goes // through this function so some applications may wish to modify it // to avoid allocating a large strm->next_out buffer and copying into it. // (See also read_buf()). internal void flush_pending() { int len = dstate.pendingCount; if (len > AvailableBytesOut) len = AvailableBytesOut; if (len == 0) return; if (dstate.pending.Length <= dstate.nextPending || OutputBuffer.Length <= NextOut || dstate.pending.Length < (dstate.nextPending + len) || OutputBuffer.Length < (NextOut + len)) { throw new ZlibException(String.Format("Invalid State. (pending.Length={0}, pendingCount={1})", dstate.pending.Length, dstate.pendingCount)); } Array.Copy(dstate.pending, dstate.nextPending, OutputBuffer, NextOut, len); NextOut += len; dstate.nextPending += len; TotalBytesOut += len; AvailableBytesOut -= len; dstate.pendingCount -= len; if (dstate.pendingCount == 0) { dstate.nextPending = 0; } } // Read a new buffer from the current input stream, update the adler32 // and total number of bytes read. All deflate() input goes through // this function so some applications may wish to modify it to avoid // allocating a large strm->next_in buffer and copying from it. // (See also flush_pending()). internal int read_buf(byte[] buf, int start, int size) { int len = AvailableBytesIn; if (len > size) len = size; if (len == 0) return 0; AvailableBytesIn -= len; if (dstate.WantRfc1950HeaderBytes) { _Adler32 = Adler.Adler32(_Adler32, InputBuffer, NextIn, len); } Array.Copy(InputBuffer, NextIn, buf, start, len); NextIn += len; TotalBytesIn += len; return len; } } internal enum ZlibStreamFlavor { ZLIB = 1950, DEFLATE = 1951, GZIP = 1952 } internal class ZlibBaseStream : System.IO.Stream { protected internal ZlibCodec _z = null; // deferred init... new ZlibCodec(); protected internal StreamMode _streamMode = StreamMode.Undefined; protected internal FlushType _flushMode; protected internal ZlibStreamFlavor _flavor; protected internal CompressionMode _compressionMode; protected internal CompressionLevel _level; protected internal bool _leaveOpen; protected internal byte[] _workingBuffer; protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault; protected internal byte[] _buf1 = new byte[1]; protected internal System.IO.Stream _stream; protected internal CompressionStrategy Strategy = CompressionStrategy.Default; // workitem 7159 CRC32 crc; protected internal string _GzipFileName; protected internal string _GzipComment; protected internal DateTime _GzipMtime; protected internal int _gzipHeaderByteCount; internal int Crc32 { get { if (crc == null) return 0; return crc.Crc32Result; } } internal ZlibBaseStream(System.IO.Stream stream, CompressionMode compressionMode, CompressionLevel level, ZlibStreamFlavor flavor, bool leaveOpen) : base() { this._flushMode = FlushType.None; //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT]; this._stream = stream; this._leaveOpen = leaveOpen; this._compressionMode = compressionMode; this._flavor = flavor; this._level = level; // workitem 7159 if (flavor == ZlibStreamFlavor.GZIP) { this.crc = new CRC32(); } } protected internal bool _wantCompress { get { return (this._compressionMode == CompressionMode.Compress); } } private ZlibCodec z { get { if (_z == null) { bool wantRfc1950Header = (this._flavor == ZlibStreamFlavor.ZLIB); _z = new ZlibCodec(); if (this._compressionMode == CompressionMode.Decompress) { _z.InitializeInflate(wantRfc1950Header); } else { _z.Strategy = Strategy; _z.InitializeDeflate(this._level, wantRfc1950Header); } } return _z; } } private byte[] workingBuffer { get { if (_workingBuffer == null) _workingBuffer = new byte[_bufferSize]; return _workingBuffer; } } public override void Write(System.Byte[] buffer, int offset, int count) { // workitem 7159 // calculate the CRC on the unccompressed data (before writing) if (crc != null) crc.SlurpBlock(buffer, offset, count); if (_streamMode == StreamMode.Undefined) _streamMode = StreamMode.Writer; else if (_streamMode != StreamMode.Writer) throw new ZlibException("Cannot Write after Reading."); if (count == 0) return; // first reference of z property will initialize the private var _z z.InputBuffer = buffer; _z.NextIn = offset; _z.AvailableBytesIn = count; bool done = false; do { _z.OutputBuffer = workingBuffer; _z.NextOut = 0; _z.AvailableBytesOut = _workingBuffer.Length; int rc = (_wantCompress) ? _z.Deflate(_flushMode) : _z.Inflate(_flushMode); if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) throw new ZlibException((_wantCompress ? "de" : "in") + "flating: " + _z.Message); //if (_workingBuffer.Length - _z.AvailableBytesOut > 0) _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; // If GZIP and de-compress, we're done when 8 bytes remain. if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); } while (!done); } private void finish() { if (_z == null) return; if (_streamMode == StreamMode.Writer) { bool done = false; do { _z.OutputBuffer = workingBuffer; _z.NextOut = 0; _z.AvailableBytesOut = _workingBuffer.Length; int rc = (_wantCompress) ? _z.Deflate(FlushType.Finish) : _z.Inflate(FlushType.Finish); if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) { string verb = (_wantCompress ? "de" : "in") + "flating"; if (_z.Message == null) throw new ZlibException(String.Format("{0}: (rc = {1})", verb, rc)); else throw new ZlibException(verb + ": " + _z.Message); } if (_workingBuffer.Length - _z.AvailableBytesOut > 0) { _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); } done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; // If GZIP and de-compress, we're done when 8 bytes remain. if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); } while (!done); Flush(); // workitem 7159 if (_flavor == ZlibStreamFlavor.GZIP) { if (_wantCompress) { // Emit the GZIP trailer: CRC32 and size mod 2^32 int c1 = crc.Crc32Result; _stream.Write(BitConverter.GetBytes(c1), 0, 4); int c2 = (Int32)(crc.TotalBytesRead & 0x00000000FFFFFFFF); _stream.Write(BitConverter.GetBytes(c2), 0, 4); } else { throw new ZlibException("Writing with decompression is not supported."); } } } // workitem 7159 else if (_streamMode == StreamMode.Reader) { if (_flavor == ZlibStreamFlavor.GZIP) { if (!_wantCompress) { // workitem 8501: handle edge case (decompress empty stream) if (_z.TotalBytesOut == 0L) return; // Read and potentially verify the GZIP trailer: // CRC32 and size mod 2^32 byte[] trailer = new byte[8]; // workitems 8679 & 12554 if (_z.AvailableBytesIn < 8) { // Make sure we have read to the end of the stream Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, _z.AvailableBytesIn); int bytesNeeded = 8 - _z.AvailableBytesIn; int bytesRead = _stream.Read(trailer, _z.AvailableBytesIn, bytesNeeded); if (bytesNeeded != bytesRead) { throw new ZlibException(String.Format("Missing or incomplete GZIP trailer. Expected 8 bytes, got {0}.", _z.AvailableBytesIn + bytesRead)); } } else { Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, trailer.Length); } Int32 crc32_expected = BitConverter.ToInt32(trailer, 0); Int32 crc32_actual = crc.Crc32Result; Int32 isize_expected = BitConverter.ToInt32(trailer, 4); Int32 isize_actual = (Int32)(_z.TotalBytesOut & 0x00000000FFFFFFFF); if (crc32_actual != crc32_expected) throw new ZlibException(String.Format("Bad CRC32 in GZIP trailer. (actual({0:X8})!=expected({1:X8}))", crc32_actual, crc32_expected)); if (isize_actual != isize_expected) throw new ZlibException(String.Format("Bad size in GZIP trailer. (actual({0})!=expected({1}))", isize_actual, isize_expected)); } else { throw new ZlibException("Reading with compression is not supported."); } } } } private void end() { if (z == null) return; if (_wantCompress) { _z.EndDeflate(); } else { _z.EndInflate(); } _z = null; } public override void Flush() { _stream.Flush(); } public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin) { throw new NotImplementedException(); //_outStream.Seek(offset, origin); } public override void SetLength(System.Int64 value) { _stream.SetLength(value); } #if NOT internal int Read() { if (Read(_buf1, 0, 1) == 0) return 0; // calculate CRC after reading if (crc!=null) crc.SlurpBlock(_buf1,0,1); return (_buf1[0] & 0xFF); } #endif private bool nomoreinput = false; private string ReadZeroTerminatedString() { var list = new System.Collections.Generic.List(); bool done = false; do { // workitem 7740 int n = _stream.Read(_buf1, 0, 1); if (n != 1) throw new ZlibException("Unexpected EOF reading GZIP header."); else { if (_buf1[0] == 0) done = true; else list.Add(_buf1[0]); } } while (!done); byte[] a = list.ToArray(); return GZipStream.iso8859dash1.GetString(a, 0, a.Length); } private int _ReadAndValidateGzipHeader() { int totalBytesRead = 0; // read the header on the first read byte[] header = new byte[10]; int n = _stream.Read(header, 0, header.Length); // workitem 8501: handle edge case (decompress empty stream) if (n == 0) return 0; if (n != 10) throw new ZlibException("Not a valid GZIP stream."); if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8) throw new ZlibException("Bad GZIP header."); Int32 timet = BitConverter.ToInt32(header, 4); _GzipMtime = GZipStream._unixEpoch.AddSeconds(timet); totalBytesRead += n; if ((header[3] & 0x04) == 0x04) { // read and discard extra field n = _stream.Read(header, 0, 2); // 2-byte length field totalBytesRead += n; Int16 extraLength = (Int16)(header[0] + header[1] * 256); byte[] extra = new byte[extraLength]; n = _stream.Read(extra, 0, extra.Length); if (n != extraLength) throw new ZlibException("Unexpected end-of-file reading GZIP header."); totalBytesRead += n; } if ((header[3] & 0x08) == 0x08) _GzipFileName = ReadZeroTerminatedString(); if ((header[3] & 0x10) == 0x010) _GzipComment = ReadZeroTerminatedString(); if ((header[3] & 0x02) == 0x02) Read(_buf1, 0, 1); // CRC16, ignore return totalBytesRead; } public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count) { // According to MS documentation, any implementation of the IO.Stream.Read function must: // (a) throw an exception if offset & count reference an invalid part of the buffer, // or if count < 0, or if buffer is null // (b) return 0 only upon EOF, or if count = 0 // (c) if not EOF, then return at least 1 byte, up to bytes if (_streamMode == StreamMode.Undefined) { if (!this._stream.CanRead) throw new ZlibException("The stream is not readable."); // for the first read, set up some controls. _streamMode = StreamMode.Reader; // (The first reference to _z goes through the private accessor which // may initialize it.) z.AvailableBytesIn = 0; if (_flavor == ZlibStreamFlavor.GZIP) { _gzipHeaderByteCount = _ReadAndValidateGzipHeader(); // workitem 8501: handle edge case (decompress empty stream) if (_gzipHeaderByteCount == 0) return 0; } } if (_streamMode != StreamMode.Reader) throw new ZlibException("Cannot Read after Writing."); if (count == 0) return 0; if (nomoreinput && _wantCompress) return 0; // workitem 8557 if (buffer == null) throw new ArgumentNullException("buffer"); if (count < 0) throw new ArgumentOutOfRangeException("count"); if (offset < buffer.GetLowerBound(0)) throw new ArgumentOutOfRangeException("offset"); if ((offset + count) > buffer.GetLength(0)) throw new ArgumentOutOfRangeException("count"); int rc = 0; // set up the output of the deflate/inflate codec: _z.OutputBuffer = buffer; _z.NextOut = offset; _z.AvailableBytesOut = count; // This is necessary in case _workingBuffer has been resized. (new byte[]) // (The first reference to _workingBuffer goes through the private accessor which // may initialize it.) _z.InputBuffer = workingBuffer; do { // need data in _workingBuffer in order to deflate/inflate. Here, we check if we have any. if ((_z.AvailableBytesIn == 0) && (!nomoreinput)) { // No data available, so try to Read data from the captive stream. _z.NextIn = 0; _z.AvailableBytesIn = _stream.Read(_workingBuffer, 0, _workingBuffer.Length); if (_z.AvailableBytesIn == 0) nomoreinput = true; } // we have data in InputBuffer; now compress or decompress as appropriate rc = (_wantCompress) ? _z.Deflate(_flushMode) : _z.Inflate(_flushMode); if (nomoreinput && (rc == ZlibConstants.Z_BUF_ERROR)) return 0; if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) throw new ZlibException(String.Format("{0}flating: rc={1} msg={2}", (_wantCompress ? "de" : "in"), rc, _z.Message)); if ((nomoreinput || rc == ZlibConstants.Z_STREAM_END) && (_z.AvailableBytesOut == count)) break; // nothing more to read } //while (_z.AvailableBytesOut == count && rc == ZlibConstants.Z_OK); while (_z.AvailableBytesOut > 0 && !nomoreinput && rc == ZlibConstants.Z_OK); // workitem 8557 // is there more room in output? if (_z.AvailableBytesOut > 0) { if (rc == ZlibConstants.Z_OK && _z.AvailableBytesIn == 0) { // deferred } // are we completely done reading? if (nomoreinput) { // and in compression? if (_wantCompress) { // no more input data available; therefore we flush to // try to complete the read rc = _z.Deflate(FlushType.Finish); if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) throw new ZlibException(String.Format("Deflating: rc={0} msg={1}", rc, _z.Message)); } } } rc = (count - _z.AvailableBytesOut); // calculate CRC after reading if (crc != null) crc.SlurpBlock(buffer, offset, rc); return rc; } public override System.Boolean CanRead { get { return this._stream.CanRead; } } public override System.Boolean CanSeek { get { return this._stream.CanSeek; } } public override System.Boolean CanWrite { get { return this._stream.CanWrite; } } public override System.Int64 Length { get { return _stream.Length; } } public override long Position { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } internal enum StreamMode { Writer, Reader, Undefined, } internal static void CompressString(String s, Stream compressor) { byte[] uncompressed = System.Text.Encoding.UTF8.GetBytes(s); using (compressor) { compressor.Write(uncompressed, 0, uncompressed.Length); } } internal static void CompressBuffer(byte[] b, Stream compressor) { // workitem 8460 using (compressor) { compressor.Write(b, 0, b.Length); } } internal static String UncompressString(byte[] compressed, Stream decompressor) { // workitem 8460 byte[] working = new byte[1024]; var encoding = System.Text.Encoding.UTF8; using (var output = new MemoryStream()) { using (decompressor) { int n; while ((n = decompressor.Read(working, 0, working.Length)) != 0) { output.Write(working, 0, n); } } // reset to allow read from start output.Seek(0, SeekOrigin.Begin); var sr = new StreamReader(output, encoding); return sr.ReadToEnd(); } } internal static byte[] UncompressBuffer(byte[] compressed, Stream decompressor) { // workitem 8460 byte[] working = new byte[1024]; using (var output = new MemoryStream()) { using (decompressor) { int n; while ((n = decompressor.Read(working, 0, working.Length)) != 0) { output.Write(working, 0, n); } } return output.ToArray(); } } } /// /// Describes how to flush the current deflate operation. /// /// /// The different FlushType values are useful when using a Deflate in a streaming application. /// internal enum FlushType { /// No flush at all. None = 0, /// Closes the current block, but doesn't flush it to /// the output. Used internally only in hypothetical /// scenarios. This was supposed to be removed by Zlib, but it is /// still in use in some edge cases. /// Partial, /// /// Use this during compression to specify that all pending output should be /// flushed to the output buffer and the output should be aligned on a byte /// boundary. You might use this in a streaming communication scenario, so that /// the decompressor can get all input data available so far. When using this /// with a ZlibCodec, AvailableBytesIn will be zero after the call if /// enough output space has been provided before the call. Flushing will /// degrade compression and so it should be used only when necessary. /// Sync, /// /// Use this during compression to specify that all output should be flushed, as /// with FlushType.Sync, but also, the compression state should be reset /// so that decompression can restart from this point if previous compressed /// data has been damaged or if random access is desired. Using /// FlushType.Full too often can significantly degrade the compression. /// Full, /// Signals the end of the compression/decompression stream. Finish, } /// /// The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. /// public enum CompressionLevel { /// /// None means that the data will be simply stored, with no change at all. /// If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None /// cannot be opened with the default zip reader. Use a different CompressionLevel. /// None = 0, /// /// Same as None. /// Level0 = 0, /// /// The fastest but least effective compression. /// BestSpeed = 1, /// /// A synonym for BestSpeed. /// Level1 = 1, /// /// A little slower, but better, than level 1. /// Level2 = 2, /// /// A little slower, but better, than level 2. /// Level3 = 3, /// /// A little slower, but better, than level 3. /// Level4 = 4, /// /// A little slower than level 4, but with better compression. /// Level5 = 5, /// /// The default compression level, with a good balance of speed and compression efficiency. /// Default = 6, /// /// A synonym for Default. /// Level6 = 6, /// /// Pretty good compression! /// Level7 = 7, /// /// Better compression than Level7! /// Level8 = 8, /// /// The "best" compression, where best means greatest reduction in size of the input data stream. /// This is also the slowest compression. /// BestCompression = 9, /// /// A synonym for BestCompression. /// Level9 = 9, } /// /// Describes options for how the compression algorithm is executed. Different strategies /// work better on different sorts of data. The strategy parameter can affect the compression /// ratio and the speed of compression but not the correctness of the compresssion. /// internal enum CompressionStrategy { /// /// The default strategy is probably the best for normal data. /// Default = 0, /// /// The Filtered strategy is intended to be used most effectively with data produced by a /// filter or predictor. By this definition, filtered data consists mostly of small /// values with a somewhat random distribution. In this case, the compression algorithm /// is tuned to compress them better. The effect of Filtered is to force more Huffman /// coding and less string matching; it is a half-step between Default and HuffmanOnly. /// Filtered = 1, /// /// Using HuffmanOnly will force the compressor to do Huffman encoding only, with no /// string matching. /// HuffmanOnly = 2, } /// /// An enum to specify the direction of transcoding - whether to compress or decompress. /// internal enum CompressionMode { /// /// Used to specify that the stream should compress the data. /// Compress = 0, /// /// Used to specify that the stream should decompress the data. /// Decompress = 1, } /// /// A general purpose exception class for exceptions in the Zlib library. /// internal class ZlibException : System.Exception { /// /// The ZlibException class captures exception information generated /// by the Zlib library. /// internal ZlibException() : base() { } /// /// This ctor collects a message attached to the exception. /// /// the message for the exception. internal ZlibException(System.String s) : base(s) { } } internal class SharedUtils { /// /// Performs an unsigned bitwise right shift with the specified number /// /// Number to operate on /// Ammount of bits to shift /// The resulting number from the shift operation internal static int URShift(int number, int bits) { return (int)((uint)number >> bits); } #if NOT /// /// Performs an unsigned bitwise right shift with the specified number /// /// Number to operate on /// Ammount of bits to shift /// The resulting number from the shift operation internal static long URShift(long number, int bits) { return (long) ((UInt64)number >> bits); } #endif /// /// Reads a number of characters from the current source TextReader and writes /// the data to the target array at the specified index. /// /// /// The source TextReader to read from /// Contains the array of characteres read from the source TextReader. /// The starting index of the target array. /// The maximum number of characters to read from the source TextReader. /// /// /// The number of characters read. The number will be less than or equal to /// count depending on the data available in the source TextReader. Returns -1 /// if the end of the stream is reached. /// internal static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count) { // Returns 0 bytes if not enough space in target if (target.Length == 0) return 0; char[] charArray = new char[target.Length]; int bytesRead = sourceTextReader.Read(charArray, start, count); // Returns -1 if EOF if (bytesRead == 0) return -1; for (int index = start; index < start + bytesRead; index++) target[index] = (byte)charArray[index]; return bytesRead; } internal static byte[] ToByteArray(System.String sourceString) { return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString); } internal static char[] ToCharArray(byte[] byteArray) { return System.Text.UTF8Encoding.UTF8.GetChars(byteArray); } } internal static class InternalConstants { internal static readonly int MAX_BITS = 15; internal static readonly int BL_CODES = 19; internal static readonly int D_CODES = 30; internal static readonly int LITERALS = 256; internal static readonly int LENGTH_CODES = 29; internal static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); // Bit length codes must not exceed MAX_BL_BITS bits internal static readonly int MAX_BL_BITS = 7; // repeat previous bit length 3-6 times (2 bits of repeat count) internal static readonly int REP_3_6 = 16; // repeat a zero length 3-10 times (3 bits of repeat count) internal static readonly int REPZ_3_10 = 17; // repeat a zero length 11-138 times (7 bits of repeat count) internal static readonly int REPZ_11_138 = 18; } internal sealed class StaticTree { internal static readonly short[] lengthAndLiteralsTreeCodes = new short[] { 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, 2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, 10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8, 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, 30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8, 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, 5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8, 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, 43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9, 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, 23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, 15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9, 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, 8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8 }; internal static readonly short[] distTreeCodes = new short[] { 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, 1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 }; internal static readonly StaticTree Literals; internal static readonly StaticTree Distances; internal static readonly StaticTree BitLengths; internal short[] treeCodes; // static tree or null internal int[] extraBits; // extra bits for each code or null internal int extraBase; // base index for extra_bits internal int elems; // max number of elements in the tree internal int maxLength; // max bit length for the codes private StaticTree(short[] treeCodes, int[] extraBits, int extraBase, int elems, int maxLength) { this.treeCodes = treeCodes; this.extraBits = extraBits; this.extraBase = extraBase; this.elems = elems; this.maxLength = maxLength; } static StaticTree() { Literals = new StaticTree(lengthAndLiteralsTreeCodes, Tree.ExtraLengthBits, InternalConstants.LITERALS + 1, InternalConstants.L_CODES, InternalConstants.MAX_BITS); Distances = new StaticTree(distTreeCodes, Tree.ExtraDistanceBits, 0, InternalConstants.D_CODES, InternalConstants.MAX_BITS); BitLengths = new StaticTree(null, Tree.extra_blbits, 0, InternalConstants.BL_CODES, InternalConstants.MAX_BL_BITS); } } /// /// Computes an Adler-32 checksum. /// /// /// The Adler checksum is similar to a CRC checksum, but faster to compute, though less /// reliable. It is used in producing RFC1950 compressed streams. The Adler checksum /// is a required part of the "ZLIB" standard. Applications will almost never need to /// use this class directly. /// /// /// internal sealed class Adler { // largest prime smaller than 65536 private static readonly uint BASE = 65521; // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 private static readonly int NMAX = 5552; #pragma warning disable 3001 #pragma warning disable 3002 /// /// Calculates the Adler32 checksum. /// /// /// /// This is used within ZLIB. You probably don't need to use this directly. /// /// /// /// To compute an Adler32 checksum on a byte array: /// /// var adler = Adler.Adler32(0, null, 0, 0); /// adler = Adler.Adler32(adler, buffer, index, length); /// /// internal static uint Adler32(uint adler, byte[] buf, int index, int len) { if (buf == null) return 1; uint s1 = (uint)(adler & 0xffff); uint s2 = (uint)((adler >> 16) & 0xffff); while (len > 0) { int k = len < NMAX ? len : NMAX; len -= k; while (k >= 16) { //s1 += (buf[index++] & 0xff); s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; s1 += buf[index++]; s2 += s1; k -= 16; } if (k != 0) { do { s1 += buf[index++]; s2 += s1; } while (--k != 0); } s1 %= BASE; s2 %= BASE; } return (uint)((s2 << 16) | s1); } #pragma warning restore 3001 #pragma warning restore 3002 } sealed class Tree { private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); // extra bits for each length code internal static readonly int[] ExtraLengthBits = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; // extra bits for each distance code internal static readonly int[] ExtraDistanceBits = new int[] { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; // extra bits for each bit length code internal static readonly int[] extra_blbits = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 }; internal static readonly sbyte[] bl_order = new sbyte[] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; // The lengths of the bit length codes are sent in order of decreasing // probability, to avoid transmitting the lengths for unused bit // length codes. internal const int Buf_size = 8 * 2; // see definition of array dist_code below //internal const int DIST_CODE_LEN = 512; private static readonly sbyte[] _dist_code = new sbyte[] { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; internal static readonly sbyte[] LengthCode = new sbyte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 }; internal static readonly int[] LengthBase = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 }; internal static readonly int[] DistanceBase = new int[] { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 }; /// /// Map from a distance to a distance code. /// /// /// No side effects. _dist_code[256] and _dist_code[257] are never used. /// internal static int DistanceCode(int dist) { return (dist < 256) ? _dist_code[dist] : _dist_code[256 + SharedUtils.URShift(dist, 7)]; } internal short[] dyn_tree; // the dynamic tree internal int max_code; // largest code with non zero frequency internal StaticTree staticTree; // the corresponding static tree // Compute the optimal bit lengths for a tree and update the total bit length // for the current block. // IN assertion: the fields freq and dad are set, heap[heap_max] and // above are the tree nodes sorted by increasing frequency. // OUT assertions: the field len is set to the optimal bit length, the // array bl_count contains the frequencies for each bit length. // The length opt_len is updated; static_len is also updated if stree is // not null. internal void gen_bitlen(DeflateManager s) { short[] tree = dyn_tree; short[] stree = staticTree.treeCodes; int[] extra = staticTree.extraBits; int base_Renamed = staticTree.extraBase; int max_length = staticTree.maxLength; int h; // heap index int n, m; // iterate over the tree elements int bits; // bit length int xbits; // extra bits short f; // frequency int overflow = 0; // number of elements with bit length too large for (bits = 0; bits <= InternalConstants.MAX_BITS; bits++) s.bl_count[bits] = 0; // In a first pass, compute the optimal bit lengths (which may // overflow in the case of the bit length tree). tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { n = s.heap[h]; bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; if (bits > max_length) { bits = max_length; overflow++; } tree[n * 2 + 1] = (short)bits; // We overwrite tree[n*2+1] which is no longer needed if (n > max_code) continue; // not a leaf node s.bl_count[bits]++; xbits = 0; if (n >= base_Renamed) xbits = extra[n - base_Renamed]; f = tree[n * 2]; s.opt_len += f * (bits + xbits); if (stree != null) s.static_len += f * (stree[n * 2 + 1] + xbits); } if (overflow == 0) return; // This happens for example on obj2 and pic of the Calgary corpus // Find the first bit length which could increase: do { bits = max_length - 1; while (s.bl_count[bits] == 0) bits--; s.bl_count[bits]--; // move one leaf down the tree s.bl_count[bits + 1] = (short)(s.bl_count[bits + 1] + 2); // move one overflow item as its brother s.bl_count[max_length]--; // The brother of the overflow item also moves one step up, // but this does not affect bl_count[max_length] overflow -= 2; } while (overflow > 0); for (bits = max_length; bits != 0; bits--) { n = s.bl_count[bits]; while (n != 0) { m = s.heap[--h]; if (m > max_code) continue; if (tree[m * 2 + 1] != bits) { s.opt_len = (int)(s.opt_len + ((long)bits - (long)tree[m * 2 + 1]) * (long)tree[m * 2]); tree[m * 2 + 1] = (short)bits; } n--; } } } // Construct one Huffman tree and assigns the code bit strings and lengths. // Update the total bit length for the current block. // IN assertion: the field freq is set for all tree elements. // OUT assertions: the fields len and code are set to the optimal bit length // and corresponding code. The length opt_len is updated; static_len is // also updated if stree is not null. The field max_code is set. internal void build_tree(DeflateManager s) { short[] tree = dyn_tree; short[] stree = staticTree.treeCodes; int elems = staticTree.elems; int n, m; // iterate over heap elements int max_code = -1; // largest code with non zero frequency int node; // new node being created // Construct the initial heap, with least frequent element in // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. // heap[0] is not used. s.heap_len = 0; s.heap_max = HEAP_SIZE; for (n = 0; n < elems; n++) { if (tree[n * 2] != 0) { s.heap[++s.heap_len] = max_code = n; s.depth[n] = 0; } else { tree[n * 2 + 1] = 0; } } // The pkzip format requires that at least one distance code exists, // and that at least one bit should be sent even if there is only one // possible code. So to avoid special checks later on we force at least // two codes of non zero frequency. while (s.heap_len < 2) { node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); tree[node * 2] = 1; s.depth[node] = 0; s.opt_len--; if (stree != null) s.static_len -= stree[node * 2 + 1]; // node is 0 or 1 so it does not have extra bits } this.max_code = max_code; // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, // establish sub-heaps of increasing lengths: for (n = s.heap_len / 2; n >= 1; n--) s.pqdownheap(tree, n); // Construct the Huffman tree by repeatedly combining the least two // frequent nodes. node = elems; // next internal node of the tree do { // n = node of least frequency n = s.heap[1]; s.heap[1] = s.heap[s.heap_len--]; s.pqdownheap(tree, 1); m = s.heap[1]; // m = node of next least frequency s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency s.heap[--s.heap_max] = m; // Create a new node father of n and m tree[node * 2] = unchecked((short)(tree[n * 2] + tree[m * 2])); s.depth[node] = (sbyte)(System.Math.Max((byte)s.depth[n], (byte)s.depth[m]) + 1); tree[n * 2 + 1] = tree[m * 2 + 1] = (short)node; // and insert the new node in the heap s.heap[1] = node++; s.pqdownheap(tree, 1); } while (s.heap_len >= 2); s.heap[--s.heap_max] = s.heap[1]; // At this point, the fields freq and dad are set. We can now // generate the bit lengths. gen_bitlen(s); // The field len is now set, we can generate the bit codes gen_codes(tree, max_code, s.bl_count); } // Generate the codes for a given tree and bit counts (which need not be // optimal). // IN assertion: the array bl_count contains the bit length statistics for // the given tree and the field len is set for all tree elements. // OUT assertion: the field code is set for all tree elements of non // zero code length. internal static void gen_codes(short[] tree, int max_code, short[] bl_count) { short[] next_code = new short[InternalConstants.MAX_BITS + 1]; // next code value for each bit length short code = 0; // running code value int bits; // bit index int n; // code index // The distribution counts are first used to generate the code values // without bit reversal. for (bits = 1; bits <= InternalConstants.MAX_BITS; bits++) unchecked { next_code[bits] = code = (short)((code + bl_count[bits - 1]) << 1); } // Check that the bit counts in bl_count are consistent. The last code // must be all ones. //Assert (code + bl_count[MAX_BITS]-1 == (1<>= 1; //SharedUtils.URShift(code, 1); res <<= 1; } while (--len > 0); return res >> 1; } } sealed class InfTree { private const int MANY = 1440; private const int Z_OK = 0; private const int Z_STREAM_END = 1; private const int Z_NEED_DICT = 2; private const int Z_ERRNO = -1; private const int Z_STREAM_ERROR = -2; private const int Z_DATA_ERROR = -3; private const int Z_MEM_ERROR = -4; private const int Z_BUF_ERROR = -5; private const int Z_VERSION_ERROR = -6; internal const int fixed_bl = 9; internal const int fixed_bd = 5; //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_tl'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255}; //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_td'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] fixed_td = new int[] { 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 }; // Tables for deflate from PKZIP's appnote.txt. //UPGRADE_NOTE: Final was removed from the declaration of 'cplens'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] cplens = new int[] { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 }; // see note #13 above about 258 //UPGRADE_NOTE: Final was removed from the declaration of 'cplext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] cplext = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 }; //UPGRADE_NOTE: Final was removed from the declaration of 'cpdist'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] cpdist = new int[] { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; //UPGRADE_NOTE: Final was removed from the declaration of 'cpdext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" internal static readonly int[] cpdext = new int[] { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; // If BMAX needs to be larger than 16, then h and x[] should be uLong. internal const int BMAX = 15; // maximum bit length of any code internal int[] hn = null; // hufts used in space internal int[] v = null; // work area for huft_build internal int[] c = null; // bit length count table internal int[] r = null; // table entry for structure assignment internal int[] u = null; // table stack internal int[] x = null; // bit offsets, then code stack private int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v) { // Given a list of code lengths and a maximum table size, make a set of // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR // if the given code set is incomplete (the tables are still built in this // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of // lengths), or Z_MEM_ERROR if not enough memory. int a; // counter for codes of length k int f; // i repeats in table every f entries int g; // maximum code length int h; // table level int i; // counter, current code int j; // counter int k; // number of bits in current code int l; // bits per table (returned in m) int mask; // (1 << w) - 1, to avoid cc -O bug on HP int p; // pointer into c[], b[], or v[] int q; // points to current table int w; // bits before this table == (l * h) int xp; // pointer into x int y; // number of dummy codes added int z; // number of entries in current table // Generate counts for each bit length p = 0; i = n; do { c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX } while (i != 0); if (c[0] == n) { // null input--all zero length codes t[0] = -1; m[0] = 0; return Z_OK; } // Find minimum and maximum length, bound *m by those l = m[0]; for (j = 1; j <= BMAX; j++) if (c[j] != 0) break; k = j; // minimum code length if (l < j) { l = j; } for (i = BMAX; i != 0; i--) { if (c[i] != 0) break; } g = i; // maximum code length if (l > i) { l = i; } m[0] = l; // Adjust last length count to fill out codes, if needed for (y = 1 << j; j < i; j++, y <<= 1) { if ((y -= c[j]) < 0) { return Z_DATA_ERROR; } } if ((y -= c[i]) < 0) { return Z_DATA_ERROR; } c[i] += y; // Generate starting offsets into the value table for each length x[1] = j = 0; p = 1; xp = 2; while (--i != 0) { // note that i == g from above x[xp] = (j += c[p]); xp++; p++; } // Make a table of values in order of bit lengths i = 0; p = 0; do { if ((j = b[bindex + p]) != 0) { v[x[j]++] = i; } p++; } while (++i < n); n = x[g]; // set n to length of v // Generate the Huffman codes and for each, make the table entries x[0] = i = 0; // first Huffman code is zero p = 0; // grab values in bit order h = -1; // no tables yet--level -1 w = -l; // bits decoded == (l * h) u[0] = 0; // just to keep compilers happy q = 0; // ditto z = 0; // ditto // go through the bit lengths (k already is bits in shortest code) for (; k <= g; k++) { a = c[k]; while (a-- != 0) { // here i is the Huffman code of length k bits for value *p // make tables up to required level while (k > w + l) { h++; w += l; // previous table always l bits // compute minimum size table less than or equal to l bits z = g - w; z = (z > l) ? l : z; // table size upper limit if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table // too few codes for k-w bit table f -= (a + 1); // deduct codes from patterns left xp = k; if (j < z) { while (++j < z) { // try smaller tables up to z bits if ((f <<= 1) <= c[++xp]) break; // enough codes to use up j bits f -= c[xp]; // else deduct codes from patterns } } } z = 1 << j; // table entries for j-bit table // allocate new table if (hn[0] + z > MANY) { // (note: doesn't matter for fixed) return Z_DATA_ERROR; // overflow of MANY } u[h] = q = hn[0]; // DEBUG hn[0] += z; // connect to last table, if there is one if (h != 0) { x[h] = i; // save pattern for backing up r[0] = (sbyte)j; // bits in this table r[1] = (sbyte)l; // bits to dump before this table j = SharedUtils.URShift(i, (w - l)); r[2] = (int)(q - u[h - 1] - j); // offset to this table Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table } else { t[0] = q; // first table is returned result } } // set up table entry in r r[1] = (sbyte)(k - w); if (p >= n) { r[0] = 128 + 64; // out of values--invalid code } else if (v[p] < s) { r[0] = (sbyte)(v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block r[2] = v[p++]; // simple code is just the value } else { r[0] = (sbyte)(e[v[p] - s] + 16 + 64); // non-simple--look up in lists r[2] = d[v[p++] - s]; } // fill code-like entries with r f = 1 << (k - w); for (j = SharedUtils.URShift(i, w); j < z; j += f) { Array.Copy(r, 0, hp, (q + j) * 3, 3); } // backwards increment the k-bit code i for (j = 1 << (k - 1); (i & j) != 0; j = SharedUtils.URShift(j, 1)) { i ^= j; } i ^= j; // backup over finished tables mask = (1 << w) - 1; // needed on HP, cc -O bug while ((i & mask) != x[h]) { h--; // don't need to update q w -= l; mask = (1 << w) - 1; } } } // Return Z_BUF_ERROR if we were given an incomplete table return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; } internal int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZlibCodec z) { int result; initWorkArea(19); hn[0] = 0; result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v); if (result == Z_DATA_ERROR) { z.Message = "oversubscribed dynamic bit lengths tree"; } else if (result == Z_BUF_ERROR || bb[0] == 0) { z.Message = "incomplete dynamic bit lengths tree"; result = Z_DATA_ERROR; } return result; } internal int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZlibCodec z) { int result; // build literal/length tree initWorkArea(288); hn[0] = 0; result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v); if (result != Z_OK || bl[0] == 0) { if (result == Z_DATA_ERROR) { z.Message = "oversubscribed literal/length tree"; } else if (result != Z_MEM_ERROR) { z.Message = "incomplete literal/length tree"; result = Z_DATA_ERROR; } return result; } // build distance tree initWorkArea(288); result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v); if (result != Z_OK || (bd[0] == 0 && nl > 257)) { if (result == Z_DATA_ERROR) { z.Message = "oversubscribed distance tree"; } else if (result == Z_BUF_ERROR) { z.Message = "incomplete distance tree"; result = Z_DATA_ERROR; } else if (result != Z_MEM_ERROR) { z.Message = "empty distance tree with lengths"; result = Z_DATA_ERROR; } return result; } return Z_OK; } internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZlibCodec z) { bl[0] = fixed_bl; bd[0] = fixed_bd; tl[0] = fixed_tl; td[0] = fixed_td; return Z_OK; } private void initWorkArea(int vsize) { if (hn == null) { hn = new int[1]; v = new int[vsize]; c = new int[BMAX + 1]; r = new int[3]; u = new int[BMAX]; x = new int[BMAX + 1]; } else { if (v.Length < vsize) { v = new int[vsize]; } Array.Clear(v, 0, vsize); Array.Clear(c, 0, BMAX + 1); r[0] = 0; r[1] = 0; r[2] = 0; // for(int i=0; i> 1) { case 0: // stored b >>= 3; k -= (3); t = k & 7; // go to byte boundary b >>= t; k -= t; mode = InflateBlockMode.LENS; // get length of stored block break; case 1: // fixed int[] bl = new int[1]; int[] bd = new int[1]; int[][] tl = new int[1][]; int[][] td = new int[1][]; InfTree.inflate_trees_fixed(bl, bd, tl, td, _codec); codes.Init(bl[0], bd[0], tl[0], 0, td[0], 0); b >>= 3; k -= 3; mode = InflateBlockMode.CODES; break; case 2: // dynamic b >>= 3; k -= 3; mode = InflateBlockMode.TABLE; break; case 3: // illegal b >>= 3; k -= 3; mode = InflateBlockMode.BAD; _codec.Message = "invalid block type"; r = ZlibConstants.Z_DATA_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } break; case InflateBlockMode.LENS: while (k < (32)) { if (n != 0) { r = ZlibConstants.Z_OK; } else { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } ; n--; b |= (_codec.InputBuffer[p++] & 0xff) << k; k += 8; } if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) { mode = InflateBlockMode.BAD; _codec.Message = "invalid stored block lengths"; r = ZlibConstants.Z_DATA_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } left = (b & 0xffff); b = k = 0; // dump bits mode = left != 0 ? InflateBlockMode.STORED : (last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE); break; case InflateBlockMode.STORED: if (n == 0) { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } if (m == 0) { if (q == end && readAt != 0) { q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); } if (m == 0) { writeAt = q; r = Flush(r); q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); if (q == end && readAt != 0) { q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); } if (m == 0) { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } } } r = ZlibConstants.Z_OK; t = left; if (t > n) t = n; if (t > m) t = m; Array.Copy(_codec.InputBuffer, p, window, q, t); p += t; n -= t; q += t; m -= t; if ((left -= t) != 0) break; mode = last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE; break; case InflateBlockMode.TABLE: while (k < (14)) { if (n != 0) { r = ZlibConstants.Z_OK; } else { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } n--; b |= (_codec.InputBuffer[p++] & 0xff) << k; k += 8; } table = t = (b & 0x3fff); if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) { mode = InflateBlockMode.BAD; _codec.Message = "too many length or distance symbols"; r = ZlibConstants.Z_DATA_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); if (blens == null || blens.Length < t) { blens = new int[t]; } else { Array.Clear(blens, 0, t); // for (int i = 0; i < t; i++) // { // blens[i] = 0; // } } b >>= 14; k -= 14; index = 0; mode = InflateBlockMode.BTREE; goto case InflateBlockMode.BTREE; case InflateBlockMode.BTREE: while (index < 4 + (table >> 10)) { while (k < (3)) { if (n != 0) { r = ZlibConstants.Z_OK; } else { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } n--; b |= (_codec.InputBuffer[p++] & 0xff) << k; k += 8; } blens[border[index++]] = b & 7; b >>= 3; k -= 3; } while (index < 19) { blens[border[index++]] = 0; } bb[0] = 7; t = inftree.inflate_trees_bits(blens, bb, tb, hufts, _codec); if (t != ZlibConstants.Z_OK) { r = t; if (r == ZlibConstants.Z_DATA_ERROR) { blens = null; mode = InflateBlockMode.BAD; } bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } index = 0; mode = InflateBlockMode.DTREE; goto case InflateBlockMode.DTREE; case InflateBlockMode.DTREE: while (true) { t = table; if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) { break; } int i, j, c; t = bb[0]; while (k < t) { if (n != 0) { r = ZlibConstants.Z_OK; } else { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } n--; b |= (_codec.InputBuffer[p++] & 0xff) << k; k += 8; } t = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 1]; c = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 2]; if (c < 16) { b >>= t; k -= t; blens[index++] = c; } else { // c == 16..18 i = c == 18 ? 7 : c - 14; j = c == 18 ? 11 : 3; while (k < (t + i)) { if (n != 0) { r = ZlibConstants.Z_OK; } else { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } n--; b |= (_codec.InputBuffer[p++] & 0xff) << k; k += 8; } b >>= t; k -= t; j += (b & InternalInflateConstants.InflateMask[i]); b >>= i; k -= i; i = index; t = table; if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) { blens = null; mode = InflateBlockMode.BAD; _codec.Message = "invalid bit length repeat"; r = ZlibConstants.Z_DATA_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } c = (c == 16) ? blens[i - 1] : 0; do { blens[i++] = c; } while (--j != 0); index = i; } } tb[0] = -1; { int[] bl = new int[] { 9 }; // must be <= 9 for lookahead assumptions int[] bd = new int[] { 6 }; // must be <= 9 for lookahead assumptions int[] tl = new int[1]; int[] td = new int[1]; t = table; t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, _codec); if (t != ZlibConstants.Z_OK) { if (t == ZlibConstants.Z_DATA_ERROR) { blens = null; mode = InflateBlockMode.BAD; } r = t; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } codes.Init(bl[0], bd[0], hufts, tl[0], hufts, td[0]); } mode = InflateBlockMode.CODES; goto case InflateBlockMode.CODES; case InflateBlockMode.CODES: bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; r = codes.Process(this, r); if (r != ZlibConstants.Z_STREAM_END) { return Flush(r); } r = ZlibConstants.Z_OK; p = _codec.NextIn; n = _codec.AvailableBytesIn; b = bitb; k = bitk; q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); if (last == 0) { mode = InflateBlockMode.TYPE; break; } mode = InflateBlockMode.DRY; goto case InflateBlockMode.DRY; case InflateBlockMode.DRY: writeAt = q; r = Flush(r); q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); if (readAt != writeAt) { bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } mode = InflateBlockMode.DONE; goto case InflateBlockMode.DONE; case InflateBlockMode.DONE: r = ZlibConstants.Z_STREAM_END; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); case InflateBlockMode.BAD: r = ZlibConstants.Z_DATA_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); default: r = ZlibConstants.Z_STREAM_ERROR; bitb = b; bitk = k; _codec.AvailableBytesIn = n; _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; writeAt = q; return Flush(r); } } } internal void Free() { Reset(); window = null; hufts = null; } internal void SetDictionary(byte[] d, int start, int n) { Array.Copy(d, start, window, 0, n); readAt = writeAt = n; } // Returns true if inflate is currently at the end of a block generated // by Z_SYNC_FLUSH or Z_FULL_FLUSH. internal int SyncPoint() { return mode == InflateBlockMode.LENS ? 1 : 0; } // copy as much as possible from the sliding window to the output area internal int Flush(int r) { int nBytes; for (int pass = 0; pass < 2; pass++) { if (pass == 0) { // compute number of bytes to copy as far as end of window nBytes = (int)((readAt <= writeAt ? writeAt : end) - readAt); } else { // compute bytes to copy nBytes = writeAt - readAt; } // workitem 8870 if (nBytes == 0) { if (r == ZlibConstants.Z_BUF_ERROR) r = ZlibConstants.Z_OK; return r; } if (nBytes > _codec.AvailableBytesOut) nBytes = _codec.AvailableBytesOut; if (nBytes != 0 && r == ZlibConstants.Z_BUF_ERROR) r = ZlibConstants.Z_OK; // update counters _codec.AvailableBytesOut -= nBytes; _codec.TotalBytesOut += nBytes; // update check information if (checkfn != null) _codec._Adler32 = check = Adler.Adler32(check, window, readAt, nBytes); // copy as far as end of window Array.Copy(window, readAt, _codec.OutputBuffer, _codec.NextOut, nBytes); _codec.NextOut += nBytes; readAt += nBytes; // see if more to copy at beginning of window if (readAt == end && pass == 0) { // wrap pointers readAt = 0; if (writeAt == end) writeAt = 0; } else pass++; } // done return r; } } internal static class InternalInflateConstants { // And'ing with mask[n] masks the lower n bits internal static readonly int[] InflateMask = new int[] { 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff }; } sealed class InflateCodes { // waiting for "i:"=input, // "o:"=output, // "x:"=nothing private const int START = 0; // x: set up for LEN private const int LEN = 1; // i: get length/literal/eob next private const int LENEXT = 2; // i: getting length extra (have base) private const int DIST = 3; // i: get distance next private const int DISTEXT = 4; // i: getting distance extra private const int COPY = 5; // o: copying bytes in window, waiting for space private const int LIT = 6; // o: got literal, waiting for output space private const int WASH = 7; // o: got eob, possibly still output waiting private const int END = 8; // x: got eob and all data flushed private const int BADCODE = 9; // x: got error internal int mode; // current inflate_codes mode // mode dependent information internal int len; internal int[] tree; // pointer into tree internal int tree_index = 0; internal int need; // bits needed internal int lit; // if EXT or COPY, where and how much internal int bitsToGet; // bits to get for extra internal int dist; // distance back to copy from internal byte lbits; // ltree bits decoded per branch internal byte dbits; // dtree bits decoder per branch internal int[] ltree; // literal/length/eob tree internal int ltree_index; // literal/length/eob tree internal int[] dtree; // distance tree internal int dtree_index; // distance tree internal InflateCodes() { } internal void Init(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index) { mode = START; lbits = (byte)bl; dbits = (byte)bd; ltree = tl; ltree_index = tl_index; dtree = td; dtree_index = td_index; tree = null; } internal int Process(InflateBlocks blocks, int r) { int j; // temporary storage int tindex; // temporary pointer int e; // extra bits or operation int b = 0; // bit buffer int k = 0; // bits in bit buffer int p = 0; // input data pointer int n; // bytes available there int q; // output window write pointer int m; // bytes to end of window or read pointer int f; // pointer to copy strings from ZlibCodec z = blocks._codec; // copy input/output information to locals (UPDATE macro restores) p = z.NextIn; n = z.AvailableBytesIn; b = blocks.bitb; k = blocks.bitk; q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; // process input and output based on current state while (true) { switch (mode) { // waiting for "i:"=input, "o:"=output, "x:"=nothing case START: // x: set up for LEN if (m >= 258 && n >= 10) { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; r = InflateFast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, blocks, z); p = z.NextIn; n = z.AvailableBytesIn; b = blocks.bitb; k = blocks.bitk; q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; if (r != ZlibConstants.Z_OK) { mode = (r == ZlibConstants.Z_STREAM_END) ? WASH : BADCODE; break; } } need = lbits; tree = ltree; tree_index = ltree_index; mode = LEN; goto case LEN; case LEN: // i: get length/literal/eob next j = need; while (k < j) { if (n != 0) r = ZlibConstants.Z_OK; else { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; b >>= (tree[tindex + 1]); k -= (tree[tindex + 1]); e = tree[tindex]; if (e == 0) { // literal lit = tree[tindex + 2]; mode = LIT; break; } if ((e & 16) != 0) { // length bitsToGet = e & 15; len = tree[tindex + 2]; mode = LENEXT; break; } if ((e & 64) == 0) { // next table need = e; tree_index = tindex / 3 + tree[tindex + 2]; break; } if ((e & 32) != 0) { // end of block mode = WASH; break; } mode = BADCODE; // invalid code z.Message = "invalid literal/length code"; r = ZlibConstants.Z_DATA_ERROR; blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); case LENEXT: // i: getting length extra (have base) j = bitsToGet; while (k < j) { if (n != 0) r = ZlibConstants.Z_OK; else { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } len += (b & InternalInflateConstants.InflateMask[j]); b >>= j; k -= j; need = dbits; tree = dtree; tree_index = dtree_index; mode = DIST; goto case DIST; case DIST: // i: get distance next j = need; while (k < j) { if (n != 0) r = ZlibConstants.Z_OK; else { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; b >>= tree[tindex + 1]; k -= tree[tindex + 1]; e = (tree[tindex]); if ((e & 0x10) != 0) { // distance bitsToGet = e & 15; dist = tree[tindex + 2]; mode = DISTEXT; break; } if ((e & 64) == 0) { // next table need = e; tree_index = tindex / 3 + tree[tindex + 2]; break; } mode = BADCODE; // invalid code z.Message = "invalid distance code"; r = ZlibConstants.Z_DATA_ERROR; blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); case DISTEXT: // i: getting distance extra j = bitsToGet; while (k < j) { if (n != 0) r = ZlibConstants.Z_OK; else { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } dist += (b & InternalInflateConstants.InflateMask[j]); b >>= j; k -= j; mode = COPY; goto case COPY; case COPY: // o: copying bytes in window, waiting for space f = q - dist; while (f < 0) { // modulo window size-"while" instead f += blocks.end; // of "if" handles invalid distances } while (len != 0) { if (m == 0) { if (q == blocks.end && blocks.readAt != 0) { q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; } if (m == 0) { blocks.writeAt = q; r = blocks.Flush(r); q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; if (q == blocks.end && blocks.readAt != 0) { q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; } if (m == 0) { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } } } blocks.window[q++] = blocks.window[f++]; m--; if (f == blocks.end) f = 0; len--; } mode = START; break; case LIT: // o: got literal, waiting for output space if (m == 0) { if (q == blocks.end && blocks.readAt != 0) { q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; } if (m == 0) { blocks.writeAt = q; r = blocks.Flush(r); q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; if (q == blocks.end && blocks.readAt != 0) { q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; } if (m == 0) { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } } } r = ZlibConstants.Z_OK; blocks.window[q++] = (byte)lit; m--; mode = START; break; case WASH: // o: got eob, possibly more output if (k > 7) { // return unused byte, if any k -= 8; n++; p--; // can always return one } blocks.writeAt = q; r = blocks.Flush(r); q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; if (blocks.readAt != blocks.writeAt) { blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } mode = END; goto case END; case END: r = ZlibConstants.Z_STREAM_END; blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); case BADCODE: // x: got error r = ZlibConstants.Z_DATA_ERROR; blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); default: r = ZlibConstants.Z_STREAM_ERROR; blocks.bitb = b; blocks.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; blocks.writeAt = q; return blocks.Flush(r); } } } // Called with number of bytes left to write in window at least 258 // (the maximum string length) and number of input bytes available // at least ten. The ten bytes are six bytes for the longest length/ // distance pair plus four bytes for overloading the bit buffer. internal int InflateFast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InflateBlocks s, ZlibCodec z) { int t; // temporary pointer int[] tp; // temporary pointer int tp_index; // temporary pointer int e; // extra bits or operation int b; // bit buffer int k; // bits in bit buffer int p; // input data pointer int n; // bytes available there int q; // output window write pointer int m; // bytes to end of window or read pointer int ml; // mask for literal/length tree int md; // mask for distance tree int c; // bytes to copy int d; // distance back to copy from int r; // copy source pointer int tp_index_t_3; // (tp_index+t)*3 // load input, output, bit values p = z.NextIn; n = z.AvailableBytesIn; b = s.bitb; k = s.bitk; q = s.writeAt; m = q < s.readAt ? s.readAt - q - 1 : s.end - q; // initialize masks ml = InternalInflateConstants.InflateMask[bl]; md = InternalInflateConstants.InflateMask[bd]; // do until not enough input or output space for fast loop do { // assume called with m >= 258 && n >= 10 // get literal/length code while (k < (20)) { // max bits for literal/length code n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } t = b & ml; tp = tl; tp_index = tl_index; tp_index_t_3 = (tp_index + t) * 3; if ((e = tp[tp_index_t_3]) == 0) { b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); s.window[q++] = (byte)tp[tp_index_t_3 + 2]; m--; continue; } do { b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); if ((e & 16) != 0) { e &= 15; c = tp[tp_index_t_3 + 2] + ((int)b & InternalInflateConstants.InflateMask[e]); b >>= e; k -= e; // decode distance base of block to copy while (k < 15) { // max bits for distance code n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } t = b & md; tp = td; tp_index = td_index; tp_index_t_3 = (tp_index + t) * 3; e = tp[tp_index_t_3]; do { b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); if ((e & 16) != 0) { // get extra bits to add to distance base e &= 15; while (k < e) { // get extra bits (up to 13) n--; b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; } d = tp[tp_index_t_3 + 2] + (b & InternalInflateConstants.InflateMask[e]); b >>= e; k -= e; // do the copy m -= c; if (q >= d) { // offset before dest // just copy r = q - d; if (q - r > 0 && 2 > (q - r)) { s.window[q++] = s.window[r++]; // minimum count is three, s.window[q++] = s.window[r++]; // so unroll loop a little c -= 2; } else { Array.Copy(s.window, r, s.window, q, 2); q += 2; r += 2; c -= 2; } } else { // else offset after destination r = q - d; do { r += s.end; // force pointer in window } while (r < 0); // covers invalid distances e = s.end - r; if (c > e) { // if source crosses, c -= e; // wrapped copy if (q - r > 0 && e > (q - r)) { do { s.window[q++] = s.window[r++]; } while (--e != 0); } else { Array.Copy(s.window, r, s.window, q, e); q += e; r += e; e = 0; } r = 0; // copy rest from start of window } } // copy all or what's left if (q - r > 0 && c > (q - r)) { do { s.window[q++] = s.window[r++]; } while (--c != 0); } else { Array.Copy(s.window, r, s.window, q, c); q += c; r += c; c = 0; } break; } else if ((e & 64) == 0) { t += tp[tp_index_t_3 + 2]; t += (b & InternalInflateConstants.InflateMask[e]); tp_index_t_3 = (tp_index + t) * 3; e = tp[tp_index_t_3]; } else { z.Message = "invalid distance code"; c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); s.bitb = b; s.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; s.writeAt = q; return ZlibConstants.Z_DATA_ERROR; } } while (true); break; } if ((e & 64) == 0) { t += tp[tp_index_t_3 + 2]; t += (b & InternalInflateConstants.InflateMask[e]); tp_index_t_3 = (tp_index + t) * 3; if ((e = tp[tp_index_t_3]) == 0) { b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); s.window[q++] = (byte)tp[tp_index_t_3 + 2]; m--; break; } } else if ((e & 32) != 0) { c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); s.bitb = b; s.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; s.writeAt = q; return ZlibConstants.Z_STREAM_END; } else { z.Message = "invalid literal/length code"; c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); s.bitb = b; s.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; s.writeAt = q; return ZlibConstants.Z_DATA_ERROR; } } while (true); } while (m >= 258 && n >= 10); // not enough input or output--restore pointers and return c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); s.bitb = b; s.bitk = k; z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; s.writeAt = q; return ZlibConstants.Z_OK; } } internal sealed class InflateManager { // preset dictionary flag in zlib header private const int PRESET_DICT = 0x20; private const int Z_DEFLATED = 8; private enum InflateManagerMode { METHOD = 0, // waiting for method byte FLAG = 1, // waiting for flag byte DICT4 = 2, // four dictionary check bytes to go DICT3 = 3, // three dictionary check bytes to go DICT2 = 4, // two dictionary check bytes to go DICT1 = 5, // one dictionary check byte to go DICT0 = 6, // waiting for inflateSetDictionary BLOCKS = 7, // decompressing blocks CHECK4 = 8, // four check bytes to go CHECK3 = 9, // three check bytes to go CHECK2 = 10, // two check bytes to go CHECK1 = 11, // one check byte to go DONE = 12, // finished check, done BAD = 13, // got an error--stay here } private InflateManagerMode mode; // current inflate mode internal ZlibCodec _codec; // pointer back to this zlib stream // mode dependent information internal int method; // if FLAGS, method byte // if CHECK, check values to compare internal uint computedCheck; // computed check value internal uint expectedCheck; // stream check value // if BAD, inflateSync's marker bytes count internal int marker; // mode independent information //internal int nowrap; // flag for no wrapper private bool _handleRfc1950HeaderBytes = true; internal bool HandleRfc1950HeaderBytes { get { return _handleRfc1950HeaderBytes; } set { _handleRfc1950HeaderBytes = value; } } internal int wbits; // log2(window size) (8..15, defaults to 15) internal InflateBlocks blocks; // current inflate_blocks state internal InflateManager() { } internal InflateManager(bool expectRfc1950HeaderBytes) { _handleRfc1950HeaderBytes = expectRfc1950HeaderBytes; } internal int Reset() { _codec.TotalBytesIn = _codec.TotalBytesOut = 0; _codec.Message = null; mode = HandleRfc1950HeaderBytes ? InflateManagerMode.METHOD : InflateManagerMode.BLOCKS; blocks.Reset(); return ZlibConstants.Z_OK; } internal int End() { if (blocks != null) blocks.Free(); blocks = null; return ZlibConstants.Z_OK; } internal int Initialize(ZlibCodec codec, int w) { _codec = codec; _codec.Message = null; blocks = null; // handle undocumented nowrap option (no zlib header or check) //nowrap = 0; //if (w < 0) //{ // w = - w; // nowrap = 1; //} // set window size if (w < 8 || w > 15) { End(); throw new ZlibException("Bad window size."); //return ZlibConstants.Z_STREAM_ERROR; } wbits = w; blocks = new InflateBlocks(codec, HandleRfc1950HeaderBytes ? this : null, 1 << w); // reset state Reset(); return ZlibConstants.Z_OK; } internal int Inflate(FlushType flush) { int b; if (_codec.InputBuffer == null) throw new ZlibException("InputBuffer is null. "); // int f = (flush == FlushType.Finish) // ? ZlibConstants.Z_BUF_ERROR // : ZlibConstants.Z_OK; // workitem 8870 int f = ZlibConstants.Z_OK; int r = ZlibConstants.Z_BUF_ERROR; while (true) { switch (mode) { case InflateManagerMode.METHOD: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; if (((method = _codec.InputBuffer[_codec.NextIn++]) & 0xf) != Z_DEFLATED) { mode = InflateManagerMode.BAD; _codec.Message = String.Format("unknown compression method (0x{0:X2})", method); marker = 5; // can't try inflateSync break; } if ((method >> 4) + 8 > wbits) { mode = InflateManagerMode.BAD; _codec.Message = String.Format("invalid window size ({0})", (method >> 4) + 8); marker = 5; // can't try inflateSync break; } mode = InflateManagerMode.FLAG; break; case InflateManagerMode.FLAG: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; b = (_codec.InputBuffer[_codec.NextIn++]) & 0xff; if ((((method << 8) + b) % 31) != 0) { mode = InflateManagerMode.BAD; _codec.Message = "incorrect header check"; marker = 5; // can't try inflateSync break; } mode = ((b & PRESET_DICT) == 0) ? InflateManagerMode.BLOCKS : InflateManagerMode.DICT4; break; case InflateManagerMode.DICT4: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); mode = InflateManagerMode.DICT3; break; case InflateManagerMode.DICT3: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); mode = InflateManagerMode.DICT2; break; case InflateManagerMode.DICT2: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); mode = InflateManagerMode.DICT1; break; case InflateManagerMode.DICT1: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); _codec._Adler32 = expectedCheck; mode = InflateManagerMode.DICT0; return ZlibConstants.Z_NEED_DICT; case InflateManagerMode.DICT0: mode = InflateManagerMode.BAD; _codec.Message = "need dictionary"; marker = 0; // can try inflateSync return ZlibConstants.Z_STREAM_ERROR; case InflateManagerMode.BLOCKS: r = blocks.Process(r); if (r == ZlibConstants.Z_DATA_ERROR) { mode = InflateManagerMode.BAD; marker = 0; // can try inflateSync break; } if (r == ZlibConstants.Z_OK) r = f; if (r != ZlibConstants.Z_STREAM_END) return r; r = f; computedCheck = blocks.Reset(); if (!HandleRfc1950HeaderBytes) { mode = InflateManagerMode.DONE; return ZlibConstants.Z_STREAM_END; } mode = InflateManagerMode.CHECK4; break; case InflateManagerMode.CHECK4: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); mode = InflateManagerMode.CHECK3; break; case InflateManagerMode.CHECK3: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); mode = InflateManagerMode.CHECK2; break; case InflateManagerMode.CHECK2: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); mode = InflateManagerMode.CHECK1; break; case InflateManagerMode.CHECK1: if (_codec.AvailableBytesIn == 0) return r; r = f; _codec.AvailableBytesIn--; _codec.TotalBytesIn++; expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); if (computedCheck != expectedCheck) { mode = InflateManagerMode.BAD; _codec.Message = "incorrect data check"; marker = 5; // can't try inflateSync break; } mode = InflateManagerMode.DONE; return ZlibConstants.Z_STREAM_END; case InflateManagerMode.DONE: return ZlibConstants.Z_STREAM_END; case InflateManagerMode.BAD: throw new ZlibException(String.Format("Bad state ({0})", _codec.Message)); default: throw new ZlibException("Stream error."); } } } internal int SetDictionary(byte[] dictionary) { int index = 0; int length = dictionary.Length; if (mode != InflateManagerMode.DICT0) throw new ZlibException("Stream error."); if (Adler.Adler32(1, dictionary, 0, dictionary.Length) != _codec._Adler32) { return ZlibConstants.Z_DATA_ERROR; } _codec._Adler32 = Adler.Adler32(0, null, 0, 0); if (length >= (1 << wbits)) { length = (1 << wbits) - 1; index = dictionary.Length - length; } blocks.SetDictionary(dictionary, index, length); mode = InflateManagerMode.BLOCKS; return ZlibConstants.Z_OK; } private static readonly byte[] mark = new byte[] { 0, 0, 0xff, 0xff }; internal int Sync() { int n; // number of bytes to look at int p; // pointer to bytes int m; // number of marker bytes found in a row long r, w; // temporaries to save total_in and total_out // set up if (mode != InflateManagerMode.BAD) { mode = InflateManagerMode.BAD; marker = 0; } if ((n = _codec.AvailableBytesIn) == 0) return ZlibConstants.Z_BUF_ERROR; p = _codec.NextIn; m = marker; // search while (n != 0 && m < 4) { if (_codec.InputBuffer[p] == mark[m]) { m++; } else if (_codec.InputBuffer[p] != 0) { m = 0; } else { m = 4 - m; } p++; n--; } // restore _codec.TotalBytesIn += p - _codec.NextIn; _codec.NextIn = p; _codec.AvailableBytesIn = n; marker = m; // return no joy or set up to restart on a new block if (m != 4) { return ZlibConstants.Z_DATA_ERROR; } r = _codec.TotalBytesIn; w = _codec.TotalBytesOut; Reset(); _codec.TotalBytesIn = r; _codec.TotalBytesOut = w; mode = InflateManagerMode.BLOCKS; return ZlibConstants.Z_OK; } // Returns true if inflate is currently at the end of a block generated // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH // but removes the length bytes of the resulting empty stored block. When // decompressing, PPP checks that at the end of input packet, inflate is // waiting for these length bytes. internal int SyncPoint(ZlibCodec z) { return blocks.SyncPoint(); } } /// /// A class for compressing and decompressing GZIP streams. /// /// /// /// /// The GZipStream is a Decorator on a /// . It adds GZIP compression or decompression to any /// stream. /// /// /// /// Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the /// Ionic.Zlib.GZipStream can compress while writing, or decompress while /// reading, but not vice versa. The compression method used is GZIP, which is /// documented in IETF RFC /// 1952, "GZIP file format specification version 4.3". /// /// /// A GZipStream can be used to decompress data (through Read()) or /// to compress data (through Write()), but not both. /// /// /// /// If you wish to use the GZipStream to compress data, you must wrap it /// around a write-able stream. As you call Write() on the GZipStream, the /// data will be compressed into the GZIP format. If you want to decompress data, /// you must wrap the GZipStream around a readable stream that contains an /// IETF RFC 1952-compliant stream. The data will be decompressed as you call /// Read() on the GZipStream. /// /// /// /// Though the GZIP format allows data from multiple files to be concatenated /// together, this stream handles only a single segment of GZIP format, typically /// representing a single file. /// /// /// /// internal class GZipStream : Stream { // GZip format // source: http://tools.ietf.org/html/rfc1952 // // header id: 2 bytes 1F 8B // compress method 1 byte 8= DEFLATE (none other supported) // flag 1 byte bitfield (See below) // mtime 4 bytes time_t (seconds since jan 1, 1970 UTC of the file. // xflg 1 byte 2 = max compress used , 4 = max speed (can be ignored) // OS 1 byte OS for originating archive. set to 0xFF in compression. // extra field length 2 bytes optional - only if FEXTRA is set. // extra field varies // filename varies optional - if FNAME is set. zero terminated. ISO-8859-1. // file comment varies optional - if FCOMMENT is set. zero terminated. ISO-8859-1. // crc16 1 byte optional - present only if FHCRC bit is set // compressed data varies // CRC32 4 bytes // isize 4 bytes data size modulo 2^32 // // FLG (FLaGs) // bit 0 FTEXT - indicates file is ASCII text (can be safely ignored) // bit 1 FHCRC - there is a CRC16 for the header immediately following the header // bit 2 FEXTRA - extra fields are present // bit 3 FNAME - the zero-terminated filename is present. encoding; ISO-8859-1. // bit 4 FCOMMENT - a zero-terminated file comment is present. encoding: ISO-8859-1 // bit 5 reserved // bit 6 reserved // bit 7 reserved // // On consumption: // Extra field is a bunch of nonsense and can be safely ignored. // Header CRC and OS, likewise. // // on generation: // all optional fields get 0, except for the OS, which gets 255. // /// /// The comment on the GZIP stream. /// /// /// /// /// The GZIP format allows for each file to optionally have an associated /// comment stored with the file. The comment is encoded with the ISO-8859-1 /// code page. To include a comment in a GZIP stream you create, set this /// property before calling Write() for the first time on the /// GZipStream. /// /// /// /// When using GZipStream to decompress, you can retrieve this property /// after the first call to Read(). If no comment has been set in the /// GZIP bytestream, the Comment property will return null /// (Nothing in VB). /// /// internal String Comment { get { return _Comment; } set { if (_disposed) throw new ObjectDisposedException("GZipStream"); _Comment = value; } } /// /// The FileName for the GZIP stream. /// /// /// /// /// /// The GZIP format optionally allows each file to have an associated /// filename. When compressing data (through Write()), set this /// FileName before calling Write() the first time on the GZipStream. /// The actual filename is encoded into the GZIP bytestream with the /// ISO-8859-1 code page, according to RFC 1952. It is the application's /// responsibility to insure that the FileName can be encoded and decoded /// correctly with this code page. /// /// /// /// When decompressing (through Read()), you can retrieve this value /// any time after the first Read(). In the case where there was no filename /// encoded into the GZIP bytestream, the property will return null (Nothing /// in VB). /// /// internal String FileName { get { return _FileName; } set { if (_disposed) throw new ObjectDisposedException("GZipStream"); _FileName = value; if (_FileName == null) return; if (_FileName.IndexOf("/") != -1) { _FileName = _FileName.Replace("/", "\\"); } if (_FileName.EndsWith("\\")) throw new Exception("Illegal filename"); if (_FileName.IndexOf("\\") != -1) { // trim any leading path _FileName = Path.GetFileName(_FileName); } } } /// /// The last modified time for the GZIP stream. /// /// /// /// GZIP allows the storage of a last modified time with each GZIP entry. /// When compressing data, you can set this before the first call to /// Write(). When decompressing, you can retrieve this value any time /// after the first call to Read(). /// internal DateTime? LastModified; /// /// The CRC on the GZIP stream. /// /// /// This is used for internal error checking. You probably don't need to look at this property. /// internal int Crc32 { get { return _Crc32; } } private int _headerByteCount; internal ZlibBaseStream _baseStream; bool _disposed; bool _firstReadDone; string _FileName; string _Comment; int _Crc32; /// /// Create a GZipStream using the specified CompressionMode. /// /// /// /// /// When mode is CompressionMode.Compress, the GZipStream will use the /// default compression level. /// /// /// /// As noted in the class documentation, the CompressionMode (Compress /// or Decompress) also establishes the "direction" of the stream. A /// GZipStream with CompressionMode.Compress works only through /// Write(). A GZipStream with /// CompressionMode.Decompress works only through Read(). /// /// /// /// /// /// This example shows how to use a GZipStream to compress data. /// /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (var raw = System.IO.File.Create(outputFile)) /// { /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// } /// /// /// Dim outputFile As String = (fileToCompress & ".compressed") /// Using input As Stream = File.OpenRead(fileToCompress) /// Using raw As FileStream = File.Create(outputFile) /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// End Using /// /// /// /// /// This example shows how to use a GZipStream to uncompress a file. /// /// private void GunZipFile(string filename) /// { /// if (!filename.EndsWith(".gz)) /// throw new ArgumentException("filename"); /// var DecompressedFile = filename.Substring(0,filename.Length-3); /// byte[] working = new byte[WORKING_BUFFER_SIZE]; /// int n= 1; /// using (System.IO.Stream input = System.IO.File.OpenRead(filename)) /// { /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) /// { /// using (var output = System.IO.File.Create(DecompressedFile)) /// { /// while (n !=0) /// { /// n= decompressor.Read(working, 0, working.Length); /// if (n > 0) /// { /// output.Write(working, 0, n); /// } /// } /// } /// } /// } /// } /// /// /// /// Private Sub GunZipFile(ByVal filename as String) /// If Not (filename.EndsWith(".gz)) Then /// Throw New ArgumentException("filename") /// End If /// Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) /// Dim working(WORKING_BUFFER_SIZE) as Byte /// Dim n As Integer = 1 /// Using input As Stream = File.OpenRead(filename) /// Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) /// Using output As Stream = File.Create(UncompressedFile) /// Do /// n= decompressor.Read(working, 0, working.Length) /// If n > 0 Then /// output.Write(working, 0, n) /// End IF /// Loop While (n > 0) /// End Using /// End Using /// End Using /// End Sub /// /// /// /// The stream which will be read or written. /// Indicates whether the GZipStream will compress or decompress. internal GZipStream(Stream stream, CompressionMode mode) : this(stream, mode, CompressionLevel.Default, false) { } /// /// Create a GZipStream using the specified CompressionMode and /// the specified CompressionLevel. /// /// /// /// /// The CompressionMode (Compress or Decompress) also establishes the /// "direction" of the stream. A GZipStream with /// CompressionMode.Compress works only through Write(). A /// GZipStream with CompressionMode.Decompress works only /// through Read(). /// /// /// /// /// /// /// This example shows how to use a GZipStream to compress a file into a .gz file. /// /// /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (var raw = System.IO.File.Create(fileToCompress + ".gz")) /// { /// using (Stream compressor = new GZipStream(raw, /// CompressionMode.Compress, /// CompressionLevel.BestCompression)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// } /// /// /// /// Using input As Stream = File.OpenRead(fileToCompress) /// Using raw As FileStream = File.Create(fileToCompress & ".gz") /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// End Using /// /// /// The stream to be read or written while deflating or inflating. /// Indicates whether the GZipStream will compress or decompress. /// A tuning knob to trade speed for effectiveness. internal GZipStream(Stream stream, CompressionMode mode, CompressionLevel level) : this(stream, mode, level, false) { } /// /// Create a GZipStream using the specified CompressionMode, and /// explicitly specify whether the stream should be left open after Deflation /// or Inflation. /// /// /// /// /// This constructor allows the application to request that the captive stream /// remain open after the deflation or inflation occurs. By default, after /// Close() is called on the stream, the captive stream is also /// closed. In some cases this is not desired, for example if the stream is a /// memory stream that will be re-read after compressed data has been written /// to it. Specify true for the parameter to leave /// the stream open. /// /// /// /// The (Compress or Decompress) also /// establishes the "direction" of the stream. A GZipStream with /// CompressionMode.Compress works only through Write(). A GZipStream /// with CompressionMode.Decompress works only through Read(). /// /// /// /// The GZipStream will use the default compression level. If you want /// to specify the compression level, see . /// /// /// /// See the other overloads of this constructor for example code. /// /// /// /// /// /// The stream which will be read or written. This is called the "captive" /// stream in other places in this documentation. /// /// /// Indicates whether the GZipStream will compress or decompress. /// /// /// /// true if the application would like the base stream to remain open after /// inflation/deflation. /// internal GZipStream(Stream stream, CompressionMode mode, bool leaveOpen) : this(stream, mode, CompressionLevel.Default, leaveOpen) { } /// /// Create a GZipStream using the specified CompressionMode and the /// specified CompressionLevel, and explicitly specify whether the /// stream should be left open after Deflation or Inflation. /// /// /// /// /// /// This constructor allows the application to request that the captive stream /// remain open after the deflation or inflation occurs. By default, after /// Close() is called on the stream, the captive stream is also /// closed. In some cases this is not desired, for example if the stream is a /// memory stream that will be re-read after compressed data has been written /// to it. Specify true for the parameter to /// leave the stream open. /// /// /// /// As noted in the class documentation, the CompressionMode (Compress /// or Decompress) also establishes the "direction" of the stream. A /// GZipStream with CompressionMode.Compress works only through /// Write(). A GZipStream with CompressionMode.Decompress works only /// through Read(). /// /// /// /// /// /// This example shows how to use a GZipStream to compress data. /// /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) /// { /// using (var raw = System.IO.File.Create(outputFile)) /// { /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) /// { /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; /// int n; /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) /// { /// compressor.Write(buffer, 0, n); /// } /// } /// } /// } /// /// /// Dim outputFile As String = (fileToCompress & ".compressed") /// Using input As Stream = File.OpenRead(fileToCompress) /// Using raw As FileStream = File.Create(outputFile) /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) /// Dim buffer As Byte() = New Byte(4096) {} /// Dim n As Integer = -1 /// Do While (n <> 0) /// If (n > 0) Then /// compressor.Write(buffer, 0, n) /// End If /// n = input.Read(buffer, 0, buffer.Length) /// Loop /// End Using /// End Using /// End Using /// /// /// The stream which will be read or written. /// Indicates whether the GZipStream will compress or decompress. /// true if the application would like the stream to remain open after inflation/deflation. /// A tuning knob to trade speed for effectiveness. internal GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) { _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen); } #region Zlib properties /// /// This property sets the flush behavior on the stream. /// virtual internal FlushType FlushMode { get { return (this._baseStream._flushMode); } set { if (_disposed) throw new ObjectDisposedException("GZipStream"); this._baseStream._flushMode = value; } } /// /// The size of the working buffer for the compression codec. /// /// /// /// /// The working buffer is used for all stream operations. The default size is /// 1024 bytes. The minimum size is 128 bytes. You may get better performance /// with a larger buffer. Then again, you might not. You would have to test /// it. /// /// /// /// Set this before the first call to Read() or Write() on the /// stream. If you try to set it afterwards, it will throw. /// /// internal int BufferSize { get { return this._baseStream._bufferSize; } set { if (_disposed) throw new ObjectDisposedException("GZipStream"); if (this._baseStream._workingBuffer != null) throw new ZlibException("The working buffer is already set."); if (value < ZlibConstants.WorkingBufferSizeMin) throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); this._baseStream._bufferSize = value; } } /// Returns the total number of bytes input so far. virtual internal long TotalIn { get { return this._baseStream._z.TotalBytesIn; } } /// Returns the total number of bytes output so far. virtual internal long TotalOut { get { return this._baseStream._z.TotalBytesOut; } } #endregion #region Stream methods /// /// Dispose the stream. /// /// /// /// This may or may not result in a Close() call on the captive /// stream. See the constructors that have a leaveOpen parameter /// for more information. /// /// /// This method may be invoked in two distinct scenarios. If disposing /// == true, the method has been called directly or indirectly by a /// user's code, for example via the internal Dispose() method. In this /// case, both managed and unmanaged resources can be referenced and /// disposed. If disposing == false, the method has been called by the /// runtime from inside the object finalizer and this method should not /// reference other objects; in that case only unmanaged resources must /// be referenced or disposed. /// /// /// /// indicates whether the Dispose method was invoked by user code. /// protected override void Dispose(bool disposing) { try { if (!_disposed) { if (disposing && (this._baseStream != null)) { this._baseStream.Dispose(); this._Crc32 = _baseStream.Crc32; } _disposed = true; } } finally { base.Dispose(disposing); } } /// /// Indicates whether the stream can be read. /// /// /// The return value depends on whether the captive stream supports reading. /// public override bool CanRead { get { if (_disposed) throw new ObjectDisposedException("GZipStream"); return _baseStream._stream.CanRead; } } /// /// Indicates whether the stream supports Seek operations. /// /// /// Always returns false. /// public override bool CanSeek { get { return false; } } /// /// Indicates whether the stream can be written. /// /// /// The return value depends on whether the captive stream supports writing. /// public override bool CanWrite { get { if (_disposed) throw new ObjectDisposedException("GZipStream"); return _baseStream._stream.CanWrite; } } /// /// Flush the stream. /// public override void Flush() { if (_disposed) throw new ObjectDisposedException("GZipStream"); _baseStream.Flush(); } /// /// Reading this property always throws a . /// public override long Length { get { throw new NotImplementedException(); } } /// /// The position of the stream pointer. /// /// /// /// Setting this property always throws a . Reading will return the total bytes /// written out, if used in writing, or the total bytes read in, if used in /// reading. The count may refer to compressed bytes or uncompressed bytes, /// depending on how you've used the stream. /// public override long Position { get { if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Writer) return this._baseStream._z.TotalBytesOut + _headerByteCount; if (this._baseStream._streamMode == ZlibBaseStream.StreamMode.Reader) return this._baseStream._z.TotalBytesIn + this._baseStream._gzipHeaderByteCount; return 0; } set { throw new NotImplementedException(); } } /// /// Read and decompress data from the source stream. /// /// /// /// With a GZipStream, decompression is done through reading. /// /// /// /// /// byte[] working = new byte[WORKING_BUFFER_SIZE]; /// using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) /// { /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) /// { /// using (var output = System.IO.File.Create(_DecompressedFile)) /// { /// int n; /// while ((n= decompressor.Read(working, 0, working.Length)) !=0) /// { /// output.Write(working, 0, n); /// } /// } /// } /// } /// /// /// The buffer into which the decompressed data should be placed. /// the offset within that data array to put the first byte read. /// the number of bytes to read. /// the number of bytes actually read public override int Read(byte[] buffer, int offset, int count) { if (_disposed) throw new ObjectDisposedException("GZipStream"); int n = _baseStream.Read(buffer, offset, count); // Console.WriteLine("GZipStream::Read(buffer, off({0}), c({1}) = {2}", offset, count, n); // Console.WriteLine( Util.FormatByteArray(buffer, offset, n) ); if (!_firstReadDone) { _firstReadDone = true; FileName = _baseStream._GzipFileName; Comment = _baseStream._GzipComment; } return n; } /// /// Calling this method always throws a . /// /// irrelevant; it will always throw! /// irrelevant; it will always throw! /// irrelevant! public override long Seek(long offset, SeekOrigin origin) { throw new NotImplementedException(); } /// /// Calling this method always throws a . /// /// irrelevant; this method will always throw! public override void SetLength(long value) { throw new NotImplementedException(); } /// /// Write data to the stream. /// /// /// /// /// If you wish to use the GZipStream to compress data while writing, /// you can create a GZipStream with CompressionMode.Compress, and a /// writable output stream. Then call Write() on that GZipStream, /// providing uncompressed data as input. The data sent to the output stream /// will be the compressed form of the data written. /// /// /// /// A GZipStream can be used for Read() or Write(), but not /// both. Writing implies compression. Reading implies decompression. /// /// /// /// The buffer holding data to write to the stream. /// the offset within that data array to find the first byte to write. /// the number of bytes to write. public override void Write(byte[] buffer, int offset, int count) { if (_disposed) throw new ObjectDisposedException("GZipStream"); if (_baseStream._streamMode == ZlibBaseStream.StreamMode.Undefined) { //Console.WriteLine("GZipStream: First write"); if (_baseStream._wantCompress) { // first write in compression, therefore, emit the GZIP header _headerByteCount = EmitHeader(); } else { throw new InvalidOperationException(); } } _baseStream.Write(buffer, offset, count); } #endregion internal static readonly System.DateTime _unixEpoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); internal static readonly System.Text.Encoding iso8859dash1 = new Iso88591Encoding(); private int EmitHeader() { byte[] commentBytes = (Comment == null) ? null : iso8859dash1.GetBytes(Comment); byte[] filenameBytes = (FileName == null) ? null : iso8859dash1.GetBytes(FileName); int cbLength = (Comment == null) ? 0 : commentBytes.Length + 1; int fnLength = (FileName == null) ? 0 : filenameBytes.Length + 1; int bufferLength = 10 + cbLength + fnLength; byte[] header = new byte[bufferLength]; int i = 0; // ID header[i++] = 0x1F; header[i++] = 0x8B; // compression method header[i++] = 8; byte flag = 0; if (Comment != null) flag ^= 0x10; if (FileName != null) flag ^= 0x8; // flag header[i++] = flag; // mtime if (!LastModified.HasValue) LastModified = DateTime.Now; System.TimeSpan delta = LastModified.Value - _unixEpoch; Int32 timet = (Int32)delta.TotalSeconds; Array.Copy(BitConverter.GetBytes(timet), 0, header, i, 4); i += 4; // xflg header[i++] = 0; // this field is totally useless // OS header[i++] = 0xFF; // 0xFF == unspecified // extra field length - only if FEXTRA is set, which it is not. //header[i++]= 0; //header[i++]= 0; // filename if (fnLength != 0) { Array.Copy(filenameBytes, 0, header, i, fnLength - 1); i += fnLength - 1; header[i++] = 0; // terminate } // comment if (cbLength != 0) { Array.Copy(commentBytes, 0, header, i, cbLength - 1); i += cbLength - 1; header[i++] = 0; // terminate } _baseStream._stream.Write(header, 0, header.Length); return header.Length; // bytes written } /// /// Compress a string into a byte array using GZip. /// /// /// /// Uncompress it with . /// /// /// /// /// /// /// A string to compress. The string will first be encoded /// using UTF8, then compressed. /// /// /// The string in compressed form internal static byte[] CompressString(String s) { using (var ms = new MemoryStream()) { System.IO.Stream compressor = new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); ZlibBaseStream.CompressString(s, compressor); return ms.ToArray(); } } /// /// Compress a byte array into a new byte array using GZip. /// /// /// /// Uncompress it with . /// /// /// /// /// /// /// A buffer to compress. /// /// /// The data in compressed form internal static byte[] CompressBuffer(byte[] b) { using (var ms = new MemoryStream()) { System.IO.Stream compressor = new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); ZlibBaseStream.CompressBuffer(b, compressor); return ms.ToArray(); } } /// /// Uncompress a GZip'ed byte array into a single string. /// /// /// /// /// /// /// A buffer containing GZIP-compressed data. /// /// /// The uncompressed string internal static String UncompressString(byte[] compressed) { using (var input = new MemoryStream(compressed)) { Stream decompressor = new GZipStream(input, CompressionMode.Decompress); return ZlibBaseStream.UncompressString(compressed, decompressor); } } /// /// Uncompress a GZip'ed byte array into a byte array. /// /// /// /// /// /// /// A buffer containing data that has been compressed with GZip. /// /// /// The data in uncompressed form internal static byte[] UncompressBuffer(byte[] compressed) { using (var input = new System.IO.MemoryStream(compressed)) { System.IO.Stream decompressor = new GZipStream(input, CompressionMode.Decompress); return ZlibBaseStream.UncompressBuffer(compressed, decompressor); } } } internal enum BlockState { NeedMore = 0, // block not completed, need more input or more output BlockDone, // block flush performed FinishStarted, // finish started, need only more output at next deflate FinishDone // finish done, accept no more input or output } internal enum DeflateFlavor { Store, Fast, Slow } internal sealed class DeflateManager { private static readonly int MEM_LEVEL_MAX = 9; private static readonly int MEM_LEVEL_DEFAULT = 8; internal delegate BlockState CompressFunc(FlushType flush); internal class Config { // Use a faster search when the previous match is longer than this internal int GoodLength; // reduce lazy search above this match length // Attempt to find a better match only when the current match is // strictly smaller than this value. This mechanism is used only for // compression levels >= 4. For levels 1,2,3: MaxLazy is actually // MaxInsertLength. (See DeflateFast) internal int MaxLazy; // do not perform lazy search above this match length internal int NiceLength; // quit search above this match length // To speed up deflation, hash chains are never searched beyond this // length. A higher limit improves compression ratio but degrades the speed. internal int MaxChainLength; internal DeflateFlavor Flavor; private Config(int goodLength, int maxLazy, int niceLength, int maxChainLength, DeflateFlavor flavor) { this.GoodLength = goodLength; this.MaxLazy = maxLazy; this.NiceLength = niceLength; this.MaxChainLength = maxChainLength; this.Flavor = flavor; } internal static Config Lookup(CompressionLevel level) { return Table[(int)level]; } static Config() { Table = new Config[] { new Config(0, 0, 0, 0, DeflateFlavor.Store), new Config(4, 4, 8, 4, DeflateFlavor.Fast), new Config(4, 5, 16, 8, DeflateFlavor.Fast), new Config(4, 6, 32, 32, DeflateFlavor.Fast), new Config(4, 4, 16, 16, DeflateFlavor.Slow), new Config(8, 16, 32, 32, DeflateFlavor.Slow), new Config(8, 16, 128, 128, DeflateFlavor.Slow), new Config(8, 32, 128, 256, DeflateFlavor.Slow), new Config(32, 128, 258, 1024, DeflateFlavor.Slow), new Config(32, 258, 258, 4096, DeflateFlavor.Slow), }; } private static readonly Config[] Table; } private CompressFunc DeflateFunction; private static readonly System.String[] _ErrorMessage = new System.String[] { "need dictionary", "stream end", "", "file error", "stream error", "data error", "insufficient memory", "buffer error", "incompatible version", "" }; // preset dictionary flag in zlib header private static readonly int PRESET_DICT = 0x20; private static readonly int INIT_STATE = 42; private static readonly int BUSY_STATE = 113; private static readonly int FINISH_STATE = 666; // The deflate compression method private static readonly int Z_DEFLATED = 8; private static readonly int STORED_BLOCK = 0; private static readonly int STATIC_TREES = 1; private static readonly int DYN_TREES = 2; // The three kinds of block type private static readonly int Z_BINARY = 0; private static readonly int Z_ASCII = 1; private static readonly int Z_UNKNOWN = 2; private static readonly int Buf_size = 8 * 2; private static readonly int MIN_MATCH = 3; private static readonly int MAX_MATCH = 258; private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); private static readonly int END_BLOCK = 256; internal ZlibCodec _codec; // the zlib encoder/decoder internal int status; // as the name implies internal byte[] pending; // output still pending - waiting to be compressed internal int nextPending; // index of next pending byte to output to the stream internal int pendingCount; // number of bytes in the pending buffer internal sbyte data_type; // UNKNOWN, BINARY or ASCII internal int last_flush; // value of flush param for previous deflate call internal int w_size; // LZ77 window size (32K by default) internal int w_bits; // log2(w_size) (8..16) internal int w_mask; // w_size - 1 //internal byte[] dictionary; internal byte[] window; // Sliding window. Input bytes are read into the second half of the window, // and move to the first half later to keep a dictionary of at least wSize // bytes. With this organization, matches are limited to a distance of // wSize-MAX_MATCH bytes, but this ensures that IO is always // performed with a length multiple of the block size. // // To do: use the user input buffer as sliding window. internal int window_size; // Actual size of window: 2*wSize, except when the user input buffer // is directly used as sliding window. internal short[] prev; // Link to older string with same hash index. To limit the size of this // array to 64K, this link is maintained only for the last 32K strings. // An index in this array is thus a window index modulo 32K. internal short[] head; // Heads of the hash chains or NIL. internal int ins_h; // hash index of string to be inserted internal int hash_size; // number of elements in hash table internal int hash_bits; // log2(hash_size) internal int hash_mask; // hash_size-1 // Number of bits by which ins_h must be shifted at each input // step. It must be such that after MIN_MATCH steps, the oldest // byte no longer takes part in the hash key, that is: // hash_shift * MIN_MATCH >= hash_bits internal int hash_shift; // Window position at the beginning of the current output block. Gets // negative when the window is moved backwards. internal int block_start; Config config; internal int match_length; // length of best match internal int prev_match; // previous match internal int match_available; // set if previous match exists internal int strstart; // start of string to insert into.....???? internal int match_start; // start of matching string internal int lookahead; // number of valid bytes ahead in window // Length of the best match at previous step. Matches not greater than this // are discarded. This is used in the lazy match evaluation. internal int prev_length; // Insert new strings in the hash table only if the match length is not // greater than this length. This saves time but degrades compression. // max_insert_length is used only for compression levels <= 3. internal CompressionLevel compressionLevel; // compression level (1..9) internal CompressionStrategy compressionStrategy; // favor or force Huffman coding internal short[] dyn_ltree; // literal and length tree internal short[] dyn_dtree; // distance tree internal short[] bl_tree; // Huffman tree for bit lengths internal Tree treeLiterals = new Tree(); // desc for literal tree internal Tree treeDistances = new Tree(); // desc for distance tree internal Tree treeBitLengths = new Tree(); // desc for bit length tree // number of codes at each bit length for an optimal tree internal short[] bl_count = new short[InternalConstants.MAX_BITS + 1]; // heap used to build the Huffman trees internal int[] heap = new int[2 * InternalConstants.L_CODES + 1]; internal int heap_len; // number of elements in the heap internal int heap_max; // element of largest frequency // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. // The same heap array is used to build all trees. // Depth of each subtree used as tie breaker for trees of equal frequency internal sbyte[] depth = new sbyte[2 * InternalConstants.L_CODES + 1]; internal int _lengthOffset; // index for literals or lengths // Size of match buffer for literals/lengths. There are 4 reasons for // limiting lit_bufsize to 64K: // - frequencies can be kept in 16 bit counters // - if compression is not successful for the first block, all input // data is still in the window so we can still emit a stored block even // when input comes from standard input. (This can also be done for // all blocks if lit_bufsize is not greater than 32K.) // - if compression is not successful for a file smaller than 64K, we can // even emit a stored file instead of a stored block (saving 5 bytes). // This is applicable only for zip (not gzip or zlib). // - creating new Huffman trees less frequently may not provide fast // adaptation to changes in the input data statistics. (Take for // example a binary file with poorly compressible code followed by // a highly compressible string table.) Smaller buffer sizes give // fast adaptation but have of course the overhead of transmitting // trees more frequently. internal int lit_bufsize; internal int last_lit; // running index in l_buf // Buffer for distances. To simplify the code, d_buf and l_buf have // the same number of elements. To use different lengths, an extra flag // array would be necessary. internal int _distanceOffset; // index into pending; points to distance data?? internal int opt_len; // bit length of current block with optimal trees internal int static_len; // bit length of current block with static trees internal int matches; // number of string matches in current block internal int last_eob_len; // bit length of EOB code for last block // Output buffer. bits are inserted starting at the bottom (least // significant bits). internal short bi_buf; // Number of valid bits in bi_buf. All bits above the last valid bit // are always zero. internal int bi_valid; internal DeflateManager() { dyn_ltree = new short[HEAP_SIZE * 2]; dyn_dtree = new short[(2 * InternalConstants.D_CODES + 1) * 2]; // distance tree bl_tree = new short[(2 * InternalConstants.BL_CODES + 1) * 2]; // Huffman tree for bit lengths } // lm_init private void _InitializeLazyMatch() { window_size = 2 * w_size; // clear the hash - workitem 9063 Array.Clear(head, 0, hash_size); //for (int i = 0; i < hash_size; i++) head[i] = 0; config = Config.Lookup(compressionLevel); SetDeflater(); strstart = 0; block_start = 0; lookahead = 0; match_length = prev_length = MIN_MATCH - 1; match_available = 0; ins_h = 0; } // Initialize the tree data structures for a new zlib stream. private void _InitializeTreeData() { treeLiterals.dyn_tree = dyn_ltree; treeLiterals.staticTree = StaticTree.Literals; treeDistances.dyn_tree = dyn_dtree; treeDistances.staticTree = StaticTree.Distances; treeBitLengths.dyn_tree = bl_tree; treeBitLengths.staticTree = StaticTree.BitLengths; bi_buf = 0; bi_valid = 0; last_eob_len = 8; // enough lookahead for inflate // Initialize the first block of the first file: _InitializeBlocks(); } internal void _InitializeBlocks() { // Initialize the trees. for (int i = 0; i < InternalConstants.L_CODES; i++) dyn_ltree[i * 2] = 0; for (int i = 0; i < InternalConstants.D_CODES; i++) dyn_dtree[i * 2] = 0; for (int i = 0; i < InternalConstants.BL_CODES; i++) bl_tree[i * 2] = 0; dyn_ltree[END_BLOCK * 2] = 1; opt_len = static_len = 0; last_lit = matches = 0; } // Restore the heap property by moving down the tree starting at node k, // exchanging a node with the smallest of its two sons if necessary, stopping // when the heap property is re-established (each father smaller than its // two sons). internal void pqdownheap(short[] tree, int k) { int v = heap[k]; int j = k << 1; // left son of k while (j <= heap_len) { // Set j to the smallest of the two sons: if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth)) { j++; } // Exit if v is smaller than both sons if (_IsSmaller(tree, v, heap[j], depth)) break; // Exchange v with the smallest son heap[k] = heap[j]; k = j; // And continue down the tree, setting j to the left son of k j <<= 1; } heap[k] = v; } internal static bool _IsSmaller(short[] tree, int n, int m, sbyte[] depth) { short tn2 = tree[n * 2]; short tm2 = tree[m * 2]; return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m])); } // Scan a literal or distance tree to determine the frequencies of the codes // in the bit length tree. internal void scan_tree(short[] tree, int max_code) { int n; // iterates over all tree elements int prevlen = -1; // last emitted length int curlen; // length of current code int nextlen = (int)tree[0 * 2 + 1]; // length of next code int count = 0; // repeat count of the current code int max_count = 7; // max repeat count int min_count = 4; // min repeat count if (nextlen == 0) { max_count = 138; min_count = 3; } tree[(max_code + 1) * 2 + 1] = (short)0x7fff; // guard //?? for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = (int)tree[(n + 1) * 2 + 1]; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { bl_tree[curlen * 2] = (short)(bl_tree[curlen * 2] + count); } else if (curlen != 0) { if (curlen != prevlen) bl_tree[curlen * 2]++; bl_tree[InternalConstants.REP_3_6 * 2]++; } else if (count <= 10) { bl_tree[InternalConstants.REPZ_3_10 * 2]++; } else { bl_tree[InternalConstants.REPZ_11_138 * 2]++; } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138; min_count = 3; } else if (curlen == nextlen) { max_count = 6; min_count = 3; } else { max_count = 7; min_count = 4; } } } // Construct the Huffman tree for the bit lengths and return the index in // bl_order of the last bit length code to send. internal int build_bl_tree() { int max_blindex; // index of last bit length code of non zero freq // Determine the bit length frequencies for literal and distance trees scan_tree(dyn_ltree, treeLiterals.max_code); scan_tree(dyn_dtree, treeDistances.max_code); // Build the bit length tree: treeBitLengths.build_tree(this); // opt_len now includes the length of the tree representations, except // the lengths of the bit lengths codes and the 5+5+4 bits for the counts. // Determine the number of bit length codes to send. The pkzip format // requires that at least 4 bit length codes be sent. (appnote.txt says // 3 but the actual value used is 4.) for (max_blindex = InternalConstants.BL_CODES - 1; max_blindex >= 3; max_blindex--) { if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] != 0) break; } // Update opt_len to include the bit length tree and counts opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; return max_blindex; } // Send the header for a block using dynamic Huffman trees: the counts, the // lengths of the bit length codes, the literal tree and the distance tree. // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. internal void send_all_trees(int lcodes, int dcodes, int blcodes) { int rank; // index in bl_order send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt send_bits(dcodes - 1, 5); send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt for (rank = 0; rank < blcodes; rank++) { send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3); } send_tree(dyn_ltree, lcodes - 1); // literal tree send_tree(dyn_dtree, dcodes - 1); // distance tree } // Send a literal or distance tree in compressed form, using the codes in // bl_tree. internal void send_tree(short[] tree, int max_code) { int n; // iterates over all tree elements int prevlen = -1; // last emitted length int curlen; // length of current code int nextlen = tree[0 * 2 + 1]; // length of next code int count = 0; // repeat count of the current code int max_count = 7; // max repeat count int min_count = 4; // min repeat count if (nextlen == 0) { max_count = 138; min_count = 3; } for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1]; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { do { send_code(curlen, bl_tree); } while (--count != 0); } else if (curlen != 0) { if (curlen != prevlen) { send_code(curlen, bl_tree); count--; } send_code(InternalConstants.REP_3_6, bl_tree); send_bits(count - 3, 2); } else if (count <= 10) { send_code(InternalConstants.REPZ_3_10, bl_tree); send_bits(count - 3, 3); } else { send_code(InternalConstants.REPZ_11_138, bl_tree); send_bits(count - 11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138; min_count = 3; } else if (curlen == nextlen) { max_count = 6; min_count = 3; } else { max_count = 7; min_count = 4; } } } // Output a block of bytes on the stream. // IN assertion: there is enough room in pending_buf. private void put_bytes(byte[] p, int start, int len) { Array.Copy(p, start, pending, pendingCount, len); pendingCount += len; } #if NOTNEEDED private void put_byte(byte c) { pending[pendingCount++] = c; } internal void put_short(int b) { unchecked { pending[pendingCount++] = (byte)b; pending[pendingCount++] = (byte)(b >> 8); } } internal void putShortMSB(int b) { unchecked { pending[pendingCount++] = (byte)(b >> 8); pending[pendingCount++] = (byte)b; } } #endif internal void send_code(int c, short[] tree) { int c2 = c * 2; send_bits((tree[c2] & 0xffff), (tree[c2 + 1] & 0xffff)); } internal void send_bits(int value, int length) { int len = length; unchecked { if (bi_valid > (int)Buf_size - len) { //int val = value; // bi_buf |= (val << bi_valid); bi_buf |= (short)((value << bi_valid) & 0xffff); //put_short(bi_buf); pending[pendingCount++] = (byte)bi_buf; pending[pendingCount++] = (byte)(bi_buf >> 8); bi_buf = (short)((uint)value >> (Buf_size - bi_valid)); bi_valid += len - Buf_size; } else { // bi_buf |= (value) << bi_valid; bi_buf |= (short)((value << bi_valid) & 0xffff); bi_valid += len; } } } // Send one empty static block to give enough lookahead for inflate. // This takes 10 bits, of which 7 may remain in the bit buffer. // The current inflate code requires 9 bits of lookahead. If the // last two codes for the previous block (real code plus EOB) were coded // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode // the last real code. In this case we send two empty static blocks instead // of one. (There are no problems if the previous block is stored or fixed.) // To simplify the code, we assume the worst case of last real code encoded // on one bit only. internal void _tr_align() { send_bits(STATIC_TREES << 1, 3); send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); bi_flush(); // Of the 10 bits for the empty block, we have already sent // (10 - bi_valid) bits. The lookahead for the last real code (before // the EOB of the previous block) was thus at least one plus the length // of the EOB plus what we have just sent of the empty static block. if (1 + last_eob_len + 10 - bi_valid < 9) { send_bits(STATIC_TREES << 1, 3); send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); bi_flush(); } last_eob_len = 7; } // Save the match info and tally the frequency counts. Return true if // the current block must be flushed. internal bool _tr_tally(int dist, int lc) { pending[_distanceOffset + last_lit * 2] = unchecked((byte)((uint)dist >> 8)); pending[_distanceOffset + last_lit * 2 + 1] = unchecked((byte)dist); pending[_lengthOffset + last_lit] = unchecked((byte)lc); last_lit++; if (dist == 0) { // lc is the unmatched char dyn_ltree[lc * 2]++; } else { matches++; // Here, lc is the match length - MIN_MATCH dist--; // dist = match distance - 1 dyn_ltree[(Tree.LengthCode[lc] + InternalConstants.LITERALS + 1) * 2]++; dyn_dtree[Tree.DistanceCode(dist) * 2]++; } if ((last_lit & 0x1fff) == 0 && (int)compressionLevel > 2) { // Compute an upper bound for the compressed length int out_length = last_lit << 3; int in_length = strstart - block_start; int dcode; for (dcode = 0; dcode < InternalConstants.D_CODES; dcode++) { out_length = (int)(out_length + (int)dyn_dtree[dcode * 2] * (5L + Tree.ExtraDistanceBits[dcode])); } out_length >>= 3; if ((matches < (last_lit / 2)) && out_length < in_length / 2) return true; } return (last_lit == lit_bufsize - 1) || (last_lit == lit_bufsize); // dinoch - wraparound? // We avoid equality with lit_bufsize because of wraparound at 64K // on 16 bit machines and because stored blocks are restricted to // 64K-1 bytes. } // Send the block data compressed using the given Huffman trees internal void send_compressed_block(short[] ltree, short[] dtree) { int distance; // distance of matched string int lc; // match length or unmatched char (if dist == 0) int lx = 0; // running index in l_buf int code; // the code to send int extra; // number of extra bits to send if (last_lit != 0) { do { int ix = _distanceOffset + lx * 2; distance = ((pending[ix] << 8) & 0xff00) | (pending[ix + 1] & 0xff); lc = (pending[_lengthOffset + lx]) & 0xff; lx++; if (distance == 0) { send_code(lc, ltree); // send a literal byte } else { // literal or match pair // Here, lc is the match length - MIN_MATCH code = Tree.LengthCode[lc]; // send the length code send_code(code + InternalConstants.LITERALS + 1, ltree); extra = Tree.ExtraLengthBits[code]; if (extra != 0) { // send the extra length bits lc -= Tree.LengthBase[code]; send_bits(lc, extra); } distance--; // dist is now the match distance - 1 code = Tree.DistanceCode(distance); // send the distance code send_code(code, dtree); extra = Tree.ExtraDistanceBits[code]; if (extra != 0) { // send the extra distance bits distance -= Tree.DistanceBase[code]; send_bits(distance, extra); } } // Check that the overlay between pending and d_buf+l_buf is ok: } while (lx < last_lit); } send_code(END_BLOCK, ltree); last_eob_len = ltree[END_BLOCK * 2 + 1]; } // Set the data type to ASCII or BINARY, using a crude approximation: // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. // IN assertion: the fields freq of dyn_ltree are set and the total of all // frequencies does not exceed 64K (to fit in an int on 16 bit machines). internal void set_data_type() { int n = 0; int ascii_freq = 0; int bin_freq = 0; while (n < 7) { bin_freq += dyn_ltree[n * 2]; n++; } while (n < 128) { ascii_freq += dyn_ltree[n * 2]; n++; } while (n < InternalConstants.LITERALS) { bin_freq += dyn_ltree[n * 2]; n++; } data_type = (sbyte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); } // Flush the bit buffer, keeping at most 7 bits in it. internal void bi_flush() { if (bi_valid == 16) { pending[pendingCount++] = (byte)bi_buf; pending[pendingCount++] = (byte)(bi_buf >> 8); bi_buf = 0; bi_valid = 0; } else if (bi_valid >= 8) { //put_byte((byte)bi_buf); pending[pendingCount++] = (byte)bi_buf; bi_buf >>= 8; bi_valid -= 8; } } // Flush the bit buffer and align the output on a byte boundary internal void bi_windup() { if (bi_valid > 8) { pending[pendingCount++] = (byte)bi_buf; pending[pendingCount++] = (byte)(bi_buf >> 8); } else if (bi_valid > 0) { //put_byte((byte)bi_buf); pending[pendingCount++] = (byte)bi_buf; } bi_buf = 0; bi_valid = 0; } // Copy a stored block, storing first the length and its // one's complement if requested. internal void copy_block(int buf, int len, bool header) { bi_windup(); // align on byte boundary last_eob_len = 8; // enough lookahead for inflate if (header) unchecked { //put_short((short)len); pending[pendingCount++] = (byte)len; pending[pendingCount++] = (byte)(len >> 8); //put_short((short)~len); pending[pendingCount++] = (byte)~len; pending[pendingCount++] = (byte)(~len >> 8); } put_bytes(window, buf, len); } internal void flush_block_only(bool eof) { _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof); block_start = strstart; _codec.flush_pending(); } // Copy without compression as much as possible from the input stream, return // the current block state. // This function does not insert new strings in the dictionary since // uncompressible data is probably not useful. This function is used // only for the level=0 compression option. // NOTE: this function should be optimized to avoid extra copying from // window to pending_buf. internal BlockState DeflateNone(FlushType flush) { // Stored blocks are limited to 0xffff bytes, pending is limited // to pending_buf_size, and each stored block has a 5 byte header: int max_block_size = 0xffff; int max_start; if (max_block_size > pending.Length - 5) { max_block_size = pending.Length - 5; } // Copy as much as possible from input to output: while (true) { // Fill the window as much as possible: if (lookahead <= 1) { _fillWindow(); if (lookahead == 0 && flush == FlushType.None) return BlockState.NeedMore; if (lookahead == 0) break; // flush the current block } strstart += lookahead; lookahead = 0; // Emit a stored block if pending will be full: max_start = block_start + max_block_size; if (strstart == 0 || strstart >= max_start) { // strstart == 0 is possible when wraparound on 16-bit machine lookahead = (int)(strstart - max_start); strstart = (int)max_start; flush_block_only(false); if (_codec.AvailableBytesOut == 0) return BlockState.NeedMore; } // Flush if we may have to slide, otherwise block_start may become // negative and the data will be gone: if (strstart - block_start >= w_size - MIN_LOOKAHEAD) { flush_block_only(false); if (_codec.AvailableBytesOut == 0) return BlockState.NeedMore; } } flush_block_only(flush == FlushType.Finish); if (_codec.AvailableBytesOut == 0) return (flush == FlushType.Finish) ? BlockState.FinishStarted : BlockState.NeedMore; return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; } // Send a stored block internal void _tr_stored_block(int buf, int stored_len, bool eof) { send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type copy_block(buf, stored_len, true); // with header } // Determine the best encoding for the current block: dynamic trees, static // trees or store, and output the encoded block to the zip file. internal void _tr_flush_block(int buf, int stored_len, bool eof) { int opt_lenb, static_lenb; // opt_len and static_len in bytes int max_blindex = 0; // index of last bit length code of non zero freq // Build the Huffman trees unless a stored block is forced if (compressionLevel > 0) { // Check if the file is ascii or binary if (data_type == Z_UNKNOWN) set_data_type(); // Construct the literal and distance trees treeLiterals.build_tree(this); treeDistances.build_tree(this); // At this point, opt_len and static_len are the total bit lengths of // the compressed block data, excluding the tree representations. // Build the bit length tree for the above two trees, and get the index // in bl_order of the last bit length code to send. max_blindex = build_bl_tree(); // Determine the best encoding. Compute first the block length in bytes opt_lenb = (opt_len + 3 + 7) >> 3; static_lenb = (static_len + 3 + 7) >> 3; if (static_lenb <= opt_lenb) opt_lenb = static_lenb; } else { opt_lenb = static_lenb = stored_len + 5; // force a stored block } if (stored_len + 4 <= opt_lenb && buf != -1) { // 4: two words for the lengths // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. // Otherwise we can't have processed more than WSIZE input bytes since // the last block flush, because compression would have been // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to // transform a block into a stored block. _tr_stored_block(buf, stored_len, eof); } else if (static_lenb == opt_lenb) { send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3); send_compressed_block(StaticTree.lengthAndLiteralsTreeCodes, StaticTree.distTreeCodes); } else { send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3); send_all_trees(treeLiterals.max_code + 1, treeDistances.max_code + 1, max_blindex + 1); send_compressed_block(dyn_ltree, dyn_dtree); } // The above check is made mod 2^32, for files larger than 512 MB // and uLong implemented on 32 bits. _InitializeBlocks(); if (eof) { bi_windup(); } } // Fill the window when the lookahead becomes insufficient. // Updates strstart and lookahead. // // IN assertion: lookahead < MIN_LOOKAHEAD // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD // At least one byte has been read, or avail_in == 0; reads are // performed for at least two bytes (required for the zip translate_eol // option -- not supported here). private void _fillWindow() { int n, m; int p; int more; // Amount of free space at the end of the window. do { more = (window_size - lookahead - strstart); // Deal with !@#$% 64K limit: if (more == 0 && strstart == 0 && lookahead == 0) { more = w_size; } else if (more == -1) { // Very unlikely, but possible on 16 bit machine if strstart == 0 // and lookahead == 1 (input done one byte at time) more--; // If the window is almost full and there is insufficient lookahead, // move the upper half to the lower one to make room in the upper half. } else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) { Array.Copy(window, w_size, window, 0, w_size); match_start -= w_size; strstart -= w_size; // we now have strstart >= MAX_DIST block_start -= w_size; // Slide the hash table (could be avoided with 32 bit values // at the expense of memory usage). We slide even when level == 0 // to keep the hash table consistent if we switch back to level > 0 // later. (Using level 0 permanently is not an optimal usage of // zlib, so we don't care about this pathological case.) n = hash_size; p = n; do { m = (head[--p] & 0xffff); head[p] = (short)((m >= w_size) ? (m - w_size) : 0); } while (--n != 0); n = w_size; p = n; do { m = (prev[--p] & 0xffff); prev[p] = (short)((m >= w_size) ? (m - w_size) : 0); // If n is not on any hash chain, prev[n] is garbage but // its value will never be used. } while (--n != 0); more += w_size; } if (_codec.AvailableBytesIn == 0) return; // If there was no sliding: // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && // more == window_size - lookahead - strstart // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) // => more >= window_size - 2*WSIZE + 2 // In the BIG_MEM or MMAP case (not yet supported), // window_size == input_size + MIN_LOOKAHEAD && // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. // Otherwise, window_size == 2*WSIZE so more >= 2. // If there was sliding, more >= WSIZE. So in all cases, more >= 2. n = _codec.read_buf(window, strstart + lookahead, more); lookahead += n; // Initialize the hash value now that we have some input: if (lookahead >= MIN_MATCH) { ins_h = window[strstart] & 0xff; ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; } // If the whole input has less than MIN_MATCH bytes, ins_h is garbage, // but this is not important since only literal bytes will be emitted. } while (lookahead < MIN_LOOKAHEAD && _codec.AvailableBytesIn != 0); } // Compress as much as possible from the input stream, return the current // block state. // This function does not perform lazy evaluation of matches and inserts // new strings in the dictionary only for unmatched strings or for short // matches. It is used only for the fast compression options. internal BlockState DeflateFast(FlushType flush) { // short hash_head = 0; // head of the hash chain int hash_head = 0; // head of the hash chain bool bflush; // set if current block must be flushed while (true) { // Make sure that we always have enough lookahead, except // at the end of the input file. We need MAX_MATCH bytes // for the next match, plus MIN_MATCH bytes to insert the // string following the next match. if (lookahead < MIN_LOOKAHEAD) { _fillWindow(); if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) { return BlockState.NeedMore; } if (lookahead == 0) break; // flush the current block } // Insert the string window[strstart .. strstart+2] in the // dictionary, and set hash_head to the head of the hash chain: if (lookahead >= MIN_MATCH) { ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h]; hash_head = (head[ins_h] & 0xffff); prev[strstart & w_mask] = head[ins_h]; head[ins_h] = unchecked((short)strstart); } // Find the longest match, discarding those <= prev_length. // At this point we have always match_length < MIN_MATCH if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { // To simplify the code, we prevent matches with the string // of window index 0 (in particular we have to avoid a match // of the string with itself at the start of the input file). if (compressionStrategy != CompressionStrategy.HuffmanOnly) { match_length = longest_match(hash_head); } // longest_match() sets match_start } if (match_length >= MIN_MATCH) { // check_match(strstart, match_start, match_length); bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); lookahead -= match_length; // Insert new strings in the hash table only if the match length // is not too large. This saves time but degrades compression. if (match_length <= config.MaxLazy && lookahead >= MIN_MATCH) { match_length--; // string at strstart already in hash table do { strstart++; ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h]; hash_head = (head[ins_h] & 0xffff); prev[strstart & w_mask] = head[ins_h]; head[ins_h] = unchecked((short)strstart); // strstart never exceeds WSIZE-MAX_MATCH, so there are // always MIN_MATCH bytes ahead. } while (--match_length != 0); strstart++; } else { strstart += match_length; match_length = 0; ins_h = window[strstart] & 0xff; ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; // If lookahead < MIN_MATCH, ins_h is garbage, but it does not // matter since it will be recomputed at next deflate call. } } else { // No match, output a literal byte bflush = _tr_tally(0, window[strstart] & 0xff); lookahead--; strstart++; } if (bflush) { flush_block_only(false); if (_codec.AvailableBytesOut == 0) return BlockState.NeedMore; } } flush_block_only(flush == FlushType.Finish); if (_codec.AvailableBytesOut == 0) { if (flush == FlushType.Finish) return BlockState.FinishStarted; else return BlockState.NeedMore; } return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; } // Same as above, but achieves better compression. We use a lazy // evaluation for matches: a match is finally adopted only if there is // no better match at the next window position. internal BlockState DeflateSlow(FlushType flush) { // short hash_head = 0; // head of hash chain int hash_head = 0; // head of hash chain bool bflush; // set if current block must be flushed // Process the input block. while (true) { // Make sure that we always have enough lookahead, except // at the end of the input file. We need MAX_MATCH bytes // for the next match, plus MIN_MATCH bytes to insert the // string following the next match. if (lookahead < MIN_LOOKAHEAD) { _fillWindow(); if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) return BlockState.NeedMore; if (lookahead == 0) break; // flush the current block } // Insert the string window[strstart .. strstart+2] in the // dictionary, and set hash_head to the head of the hash chain: if (lookahead >= MIN_MATCH) { ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; // prev[strstart&w_mask]=hash_head=head[ins_h]; hash_head = (head[ins_h] & 0xffff); prev[strstart & w_mask] = head[ins_h]; head[ins_h] = unchecked((short)strstart); } // Find the longest match, discarding those <= prev_length. prev_length = match_length; prev_match = match_start; match_length = MIN_MATCH - 1; if (hash_head != 0 && prev_length < config.MaxLazy && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { // To simplify the code, we prevent matches with the string // of window index 0 (in particular we have to avoid a match // of the string with itself at the start of the input file). if (compressionStrategy != CompressionStrategy.HuffmanOnly) { match_length = longest_match(hash_head); } // longest_match() sets match_start if (match_length <= 5 && (compressionStrategy == CompressionStrategy.Filtered || (match_length == MIN_MATCH && strstart - match_start > 4096))) { // If prev_match is also MIN_MATCH, match_start is garbage // but we will ignore the current match anyway. match_length = MIN_MATCH - 1; } } // If there was a match at the previous step and the current // match is not better, output the previous match: if (prev_length >= MIN_MATCH && match_length <= prev_length) { int max_insert = strstart + lookahead - MIN_MATCH; // Do not insert strings in hash table beyond this. // check_match(strstart-1, prev_match, prev_length); bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); // Insert in hash table all strings up to the end of the match. // strstart-1 and strstart are already inserted. If there is not // enough lookahead, the last two strings are not inserted in // the hash table. lookahead -= (prev_length - 1); prev_length -= 2; do { if (++strstart <= max_insert) { ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; //prev[strstart&w_mask]=hash_head=head[ins_h]; hash_head = (head[ins_h] & 0xffff); prev[strstart & w_mask] = head[ins_h]; head[ins_h] = unchecked((short)strstart); } } while (--prev_length != 0); match_available = 0; match_length = MIN_MATCH - 1; strstart++; if (bflush) { flush_block_only(false); if (_codec.AvailableBytesOut == 0) return BlockState.NeedMore; } } else if (match_available != 0) { // If there was no match at the previous position, output a // single literal. If there was a match but the current match // is longer, truncate the previous match to a single literal. bflush = _tr_tally(0, window[strstart - 1] & 0xff); if (bflush) { flush_block_only(false); } strstart++; lookahead--; if (_codec.AvailableBytesOut == 0) return BlockState.NeedMore; } else { // There is no previous match to compare with, wait for // the next step to decide. match_available = 1; strstart++; lookahead--; } } if (match_available != 0) { bflush = _tr_tally(0, window[strstart - 1] & 0xff); match_available = 0; } flush_block_only(flush == FlushType.Finish); if (_codec.AvailableBytesOut == 0) { if (flush == FlushType.Finish) return BlockState.FinishStarted; else return BlockState.NeedMore; } return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; } internal int longest_match(int cur_match) { int chain_length = config.MaxChainLength; // max hash chain length int scan = strstart; // current string int match; // matched string int len; // length of current match int best_len = prev_length; // best match length so far int limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0; int niceLength = config.NiceLength; // Stop when cur_match becomes <= limit. To simplify the code, // we prevent matches with the string of window index 0. int wmask = w_mask; int strend = strstart + MAX_MATCH; byte scan_end1 = window[scan + best_len - 1]; byte scan_end = window[scan + best_len]; // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. // It is easy to get rid of this optimization if necessary. // Do not waste too much time if we already have a good match: if (prev_length >= config.GoodLength) { chain_length >>= 2; } // Do not look for matches beyond the end of the input. This is necessary // to make deflate deterministic. if (niceLength > lookahead) niceLength = lookahead; do { match = cur_match; // Skip to next match if the match length cannot increase // or if the match length is less than 2: if (window[match + best_len] != scan_end || window[match + best_len - 1] != scan_end1 || window[match] != window[scan] || window[++match] != window[scan + 1]) continue; // The check at best_len-1 can be removed because it will be made // again later. (This heuristic is not always a win.) // It is not necessary to compare scan[2] and match[2] since they // are always equal when the other bytes match, given that // the hash keys are equal and that HASH_BITS >= 8. scan += 2; match++; // We check for insufficient lookahead only every 8th comparison; // the 256th check will be made at strstart+258. do { } while (window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && scan < strend); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; if (len > best_len) { match_start = cur_match; best_len = len; if (len >= niceLength) break; scan_end1 = window[scan + best_len - 1]; scan_end = window[scan + best_len]; } } while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0); if (best_len <= lookahead) return best_len; return lookahead; } private bool Rfc1950BytesEmitted = false; private bool _WantRfc1950HeaderBytes = true; internal bool WantRfc1950HeaderBytes { get { return _WantRfc1950HeaderBytes; } set { _WantRfc1950HeaderBytes = value; } } internal int Initialize(ZlibCodec codec, CompressionLevel level) { return Initialize(codec, level, ZlibConstants.WindowBitsMax); } internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits) { return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, CompressionStrategy.Default); } internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits, CompressionStrategy compressionStrategy) { return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, compressionStrategy); } internal int Initialize(ZlibCodec codec, CompressionLevel level, int windowBits, int memLevel, CompressionStrategy strategy) { _codec = codec; _codec.Message = null; // validation if (windowBits < 9 || windowBits > 15) throw new ZlibException("windowBits must be in the range 9..15."); if (memLevel < 1 || memLevel > MEM_LEVEL_MAX) throw new ZlibException(String.Format("memLevel must be in the range 1.. {0}", MEM_LEVEL_MAX)); _codec.dstate = this; w_bits = windowBits; w_size = 1 << w_bits; w_mask = w_size - 1; hash_bits = memLevel + 7; hash_size = 1 << hash_bits; hash_mask = hash_size - 1; hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH); window = new byte[w_size * 2]; prev = new short[w_size]; head = new short[hash_size]; // for memLevel==8, this will be 16384, 16k lit_bufsize = 1 << (memLevel + 6); // Use a single array as the buffer for data pending compression, // the output distance codes, and the output length codes (aka tree). // orig comment: This works just fine since the average // output size for (length,distance) codes is <= 24 bits. pending = new byte[lit_bufsize * 4]; _distanceOffset = lit_bufsize; _lengthOffset = (1 + 2) * lit_bufsize; // So, for memLevel 8, the length of the pending buffer is 65536. 64k. // The first 16k are pending bytes. // The middle slice, of 32k, is used for distance codes. // The final 16k are length codes. this.compressionLevel = level; this.compressionStrategy = strategy; Reset(); return ZlibConstants.Z_OK; } internal void Reset() { _codec.TotalBytesIn = _codec.TotalBytesOut = 0; _codec.Message = null; //strm.data_type = Z_UNKNOWN; pendingCount = 0; nextPending = 0; Rfc1950BytesEmitted = false; status = (WantRfc1950HeaderBytes) ? INIT_STATE : BUSY_STATE; _codec._Adler32 = Adler.Adler32(0, null, 0, 0); last_flush = (int)FlushType.None; _InitializeTreeData(); _InitializeLazyMatch(); } internal int End() { if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) { return ZlibConstants.Z_STREAM_ERROR; } // Deallocate in reverse order of allocations: pending = null; head = null; prev = null; window = null; // free // dstate=null; return status == BUSY_STATE ? ZlibConstants.Z_DATA_ERROR : ZlibConstants.Z_OK; } private void SetDeflater() { switch (config.Flavor) { case DeflateFlavor.Store: DeflateFunction = DeflateNone; break; case DeflateFlavor.Fast: DeflateFunction = DeflateFast; break; case DeflateFlavor.Slow: DeflateFunction = DeflateSlow; break; } } internal int SetParams(CompressionLevel level, CompressionStrategy strategy) { int result = ZlibConstants.Z_OK; if (compressionLevel != level) { Config newConfig = Config.Lookup(level); // change in the deflate flavor (Fast vs slow vs none)? if (newConfig.Flavor != config.Flavor && _codec.TotalBytesIn != 0) { // Flush the last buffer: result = _codec.Deflate(FlushType.Partial); } compressionLevel = level; config = newConfig; SetDeflater(); } // no need to flush with change in strategy? Really? compressionStrategy = strategy; return result; } internal int SetDictionary(byte[] dictionary) { if (dictionary == null || status != INIT_STATE) throw new ZlibException("Stream error."); int length = dictionary.Length; int index = 0; _codec._Adler32 = Adler.Adler32(_codec._Adler32, dictionary, 0, dictionary.Length); if (length < MIN_MATCH) return ZlibConstants.Z_OK; if (length > w_size - MIN_LOOKAHEAD) { length = w_size - MIN_LOOKAHEAD; index = dictionary.Length - length; // use the tail of the dictionary } Array.Copy(dictionary, index, window, 0, length); strstart = length; block_start = length; // Insert all strings in the hash table (except for the last two bytes). // s->lookahead stays null, so s->ins_h will be recomputed at the next // call of fill_window. ins_h = window[0] & 0xff; ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; for (int n = 0; n <= length - MIN_MATCH; n++) { ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; prev[n & w_mask] = head[ins_h]; head[ins_h] = (short)n; } return ZlibConstants.Z_OK; } internal int Deflate(FlushType flush) { int old_flush; if (_codec.OutputBuffer == null || (_codec.InputBuffer == null && _codec.AvailableBytesIn != 0) || (status == FINISH_STATE && flush != FlushType.Finish)) { _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_STREAM_ERROR)]; throw new ZlibException(String.Format("Something is fishy. [{0}]", _codec.Message)); } if (_codec.AvailableBytesOut == 0) { _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; throw new ZlibException("OutputBuffer is full (AvailableBytesOut == 0)"); } old_flush = last_flush; last_flush = (int)flush; // Write the zlib (rfc1950) header bytes if (status == INIT_STATE) { int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; int level_flags = (((int)compressionLevel - 1) & 0xff) >> 1; if (level_flags > 3) level_flags = 3; header |= (level_flags << 6); if (strstart != 0) header |= PRESET_DICT; header += 31 - (header % 31); status = BUSY_STATE; //putShortMSB(header); unchecked { pending[pendingCount++] = (byte)(header >> 8); pending[pendingCount++] = (byte)header; } // Save the adler32 of the preset dictionary: if (strstart != 0) { pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); } _codec._Adler32 = Adler.Adler32(0, null, 0, 0); } // Flush as much pending output as possible if (pendingCount != 0) { _codec.flush_pending(); if (_codec.AvailableBytesOut == 0) { //System.out.println(" avail_out==0"); // Since avail_out is 0, deflate will be called again with // more output space, but possibly with both pending and // avail_in equal to zero. There won't be anything to do, // but this is not an error situation so make sure we // return OK instead of BUF_ERROR at next call of deflate: last_flush = -1; return ZlibConstants.Z_OK; } // Make sure there is something to do and avoid duplicate consecutive // flushes. For repeated and useless calls with Z_FINISH, we keep // returning Z_STREAM_END instead of Z_BUFF_ERROR. } else if (_codec.AvailableBytesIn == 0 && (int)flush <= old_flush && flush != FlushType.Finish) { // workitem 8557 // // Not sure why this needs to be an error. pendingCount == 0, which // means there's nothing to deflate. And the caller has not asked // for a FlushType.Finish, but... that seems very non-fatal. We // can just say "OK" and do nothing. // _codec.Message = z_errmsg[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; // throw new ZlibException("AvailableBytesIn == 0 && flush<=old_flush && flush != FlushType.Finish"); return ZlibConstants.Z_OK; } // User must not provide more input after the first FINISH: if (status == FINISH_STATE && _codec.AvailableBytesIn != 0) { _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; throw new ZlibException("status == FINISH_STATE && _codec.AvailableBytesIn != 0"); } // Start a new block or continue the current one. if (_codec.AvailableBytesIn != 0 || lookahead != 0 || (flush != FlushType.None && status != FINISH_STATE)) { BlockState bstate = DeflateFunction(flush); if (bstate == BlockState.FinishStarted || bstate == BlockState.FinishDone) { status = FINISH_STATE; } if (bstate == BlockState.NeedMore || bstate == BlockState.FinishStarted) { if (_codec.AvailableBytesOut == 0) { last_flush = -1; // avoid BUF_ERROR next call, see above } return ZlibConstants.Z_OK; // If flush != Z_NO_FLUSH && avail_out == 0, the next call // of deflate should use the same flush parameter to make sure // that the flush is complete. So we don't have to output an // empty block here, this will be done at next call. This also // ensures that for a very small output buffer, we emit at most // one empty block. } if (bstate == BlockState.BlockDone) { if (flush == FlushType.Partial) { _tr_align(); } else { // FlushType.Full or FlushType.Sync _tr_stored_block(0, 0, false); // For a full flush, this empty block will be recognized // as a special marker by inflate_sync(). if (flush == FlushType.Full) { // clear hash (forget the history) for (int i = 0; i < hash_size; i++) head[i] = 0; } } _codec.flush_pending(); if (_codec.AvailableBytesOut == 0) { last_flush = -1; // avoid BUF_ERROR at next call, see above return ZlibConstants.Z_OK; } } } if (flush != FlushType.Finish) return ZlibConstants.Z_OK; if (!WantRfc1950HeaderBytes || Rfc1950BytesEmitted) return ZlibConstants.Z_STREAM_END; // Write the zlib trailer (adler32) pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); //putShortMSB((int)(SharedUtils.URShift(_codec._Adler32, 16))); //putShortMSB((int)(_codec._Adler32 & 0xffff)); _codec.flush_pending(); // If avail_out is zero, the application will call deflate again // to flush the rest. Rfc1950BytesEmitted = true; // write the trailer only once! return pendingCount != 0 ? ZlibConstants.Z_OK : ZlibConstants.Z_STREAM_END; } } /// /// Computes a CRC-32. The CRC-32 algorithm is parameterized - you /// can set the polynomial and enable or disable bit /// reversal. This can be used for GZIP, BZip2, or ZIP. /// /// /// This type is used internally by DotNetZip; it is generally not used /// directly by applications wishing to create, read, or manipulate zip /// archive files. /// internal class CRC32 { /// /// Indicates the total number of bytes applied to the CRC. /// internal Int64 TotalBytesRead { get { return _TotalBytesRead; } } /// /// Indicates the current CRC for all blocks slurped in. /// internal Int32 Crc32Result { get { return unchecked((Int32)(~_register)); } } /// /// Returns the CRC32 for the specified stream. /// /// The stream over which to calculate the CRC32 /// the CRC32 calculation internal Int32 GetCrc32(System.IO.Stream input) { return GetCrc32AndCopy(input, null); } /// /// Returns the CRC32 for the specified stream, and writes the input into the /// output stream. /// /// The stream over which to calculate the CRC32 /// The stream into which to deflate the input /// the CRC32 calculation internal Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output) { if (input == null) throw new Exception("The input stream must not be null."); unchecked { byte[] buffer = new byte[BUFFER_SIZE]; int readSize = BUFFER_SIZE; _TotalBytesRead = 0; int count = input.Read(buffer, 0, readSize); if (output != null) output.Write(buffer, 0, count); _TotalBytesRead += count; while (count > 0) { SlurpBlock(buffer, 0, count); count = input.Read(buffer, 0, readSize); if (output != null) output.Write(buffer, 0, count); _TotalBytesRead += count; } return (Int32)(~_register); } } /// /// Get the CRC32 for the given (word,byte) combo. This is a /// computation defined by PKzip for PKZIP 2.0 (weak) encryption. /// /// The word to start with. /// The byte to combine it with. /// The CRC-ized result. internal Int32 ComputeCrc32(Int32 W, byte B) { return _InternalComputeCrc32((UInt32)W, B); } internal Int32 _InternalComputeCrc32(UInt32 W, byte B) { return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8)); } /// /// Update the value for the running CRC32 using the given block of bytes. /// This is useful when using the CRC32() class in a Stream. /// /// block of bytes to slurp /// starting point in the block /// how many bytes within the block to slurp internal void SlurpBlock(byte[] block, int offset, int count) { if (block == null) throw new Exception("The data buffer must not be null."); // bzip algorithm for (int i = 0; i < count; i++) { int x = offset + i; byte b = block[x]; if (this.reverseBits) { UInt32 temp = (_register >> 24) ^ b; _register = (_register << 8) ^ crc32Table[temp]; } else { UInt32 temp = (_register & 0x000000FF) ^ b; _register = (_register >> 8) ^ crc32Table[temp]; } } _TotalBytesRead += count; } /// /// Process one byte in the CRC. /// /// the byte to include into the CRC . internal void UpdateCRC(byte b) { if (this.reverseBits) { UInt32 temp = (_register >> 24) ^ b; _register = (_register << 8) ^ crc32Table[temp]; } else { UInt32 temp = (_register & 0x000000FF) ^ b; _register = (_register >> 8) ^ crc32Table[temp]; } } /// /// Process a run of N identical bytes into the CRC. /// /// /// /// This method serves as an optimization for updating the CRC when a /// run of identical bytes is found. Rather than passing in a buffer of /// length n, containing all identical bytes b, this method accepts the /// byte value and the length of the (virtual) buffer - the length of /// the run. /// /// /// the byte to include into the CRC. /// the number of times that byte should be repeated. internal void UpdateCRC(byte b, int n) { while (n-- > 0) { if (this.reverseBits) { uint temp = (_register >> 24) ^ b; _register = (_register << 8) ^ crc32Table[(temp >= 0) ? temp : (temp + 256)]; } else { UInt32 temp = (_register & 0x000000FF) ^ b; _register = (_register >> 8) ^ crc32Table[(temp >= 0) ? temp : (temp + 256)]; } } } private static uint ReverseBits(uint data) { unchecked { uint ret = data; ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555; ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333; ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F; ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24); return ret; } } private static byte ReverseBits(byte data) { unchecked { uint u = (uint)data * 0x00020202; uint m = 0x01044010; uint s = u & m; uint t = (u << 2) & (m << 1); return (byte)((0x01001001 * (s + t)) >> 24); } } private void GenerateLookupTable() { crc32Table = new UInt32[256]; unchecked { UInt32 dwCrc; byte i = 0; do { dwCrc = i; for (byte j = 8; j > 0; j--) { if ((dwCrc & 1) == 1) { dwCrc = (dwCrc >> 1) ^ dwPolynomial; } else { dwCrc >>= 1; } } if (reverseBits) { crc32Table[ReverseBits(i)] = ReverseBits(dwCrc); } else { crc32Table[i] = dwCrc; } i++; } while (i != 0); } #if VERBOSE Console.WriteLine(); Console.WriteLine("private static readonly UInt32[] crc32Table = {"); for (int i = 0; i < crc32Table.Length; i+=4) { Console.Write(" "); for (int j=0; j < 4; j++) { Console.Write(" 0x{0:X8}U,", crc32Table[i+j]); } Console.WriteLine(); } Console.WriteLine("};"); Console.WriteLine(); #endif } private uint gf2_matrix_times(uint[] matrix, uint vec) { uint sum = 0; int i = 0; while (vec != 0) { if ((vec & 0x01) == 0x01) sum ^= matrix[i]; vec >>= 1; i++; } return sum; } private void gf2_matrix_square(uint[] square, uint[] mat) { for (int i = 0; i < 32; i++) square[i] = gf2_matrix_times(mat, mat[i]); } /// /// Combines the given CRC32 value with the current running total. /// /// /// This is useful when using a divide-and-conquer approach to /// calculating a CRC. Multiple threads can each calculate a /// CRC32 on a segment of the data, and then combine the /// individual CRC32 values at the end. /// /// the crc value to be combined with this one /// the length of data the CRC value was calculated on internal void Combine(int crc, int length) { uint[] even = new uint[32]; // even-power-of-two zeros operator uint[] odd = new uint[32]; // odd-power-of-two zeros operator if (length == 0) return; uint crc1 = ~_register; uint crc2 = (uint)crc; // put operator for one zero bit in odd odd[0] = this.dwPolynomial; // the CRC-32 polynomial uint row = 1; for (int i = 1; i < 32; i++) { odd[i] = row; row <<= 1; } // put operator for two zero bits in even gf2_matrix_square(even, odd); // put operator for four zero bits in odd gf2_matrix_square(odd, even); uint len2 = (uint)length; // apply len2 zeros to crc1 (first square will put the operator for one // zero byte, eight zero bits, in even) do { // apply zeros operator for this bit of len2 gf2_matrix_square(even, odd); if ((len2 & 1) == 1) crc1 = gf2_matrix_times(even, crc1); len2 >>= 1; if (len2 == 0) break; // another iteration of the loop with odd and even swapped gf2_matrix_square(odd, even); if ((len2 & 1) == 1) crc1 = gf2_matrix_times(odd, crc1); len2 >>= 1; } while (len2 != 0); crc1 ^= crc2; _register = ~crc1; //return (int) crc1; return; } /// /// Create an instance of the CRC32 class using the default settings: no /// bit reversal, and a polynomial of 0xEDB88320. /// internal CRC32() : this(false) { } /// /// Create an instance of the CRC32 class, specifying whether to reverse /// data bits or not. /// /// /// specify true if the instance should reverse data bits. /// /// /// /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you /// want a CRC32 with compatibility with BZip2, you should pass true /// here. In the CRC-32 used by GZIP and PKZIP, the bits are not /// reversed; Therefore if you want a CRC32 with compatibility with /// those, you should pass false. /// /// internal CRC32(bool reverseBits) : this(unchecked((int)0xEDB88320), reverseBits) { } /// /// Create an instance of the CRC32 class, specifying the polynomial and /// whether to reverse data bits or not. /// /// /// The polynomial to use for the CRC, expressed in the reversed (LSB) /// format: the highest ordered bit in the polynomial value is the /// coefficient of the 0th power; the second-highest order bit is the /// coefficient of the 1 power, and so on. Expressed this way, the /// polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. /// /// /// specify true if the instance should reverse data bits. /// /// /// /// /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you /// want a CRC32 with compatibility with BZip2, you should pass true /// here for the reverseBits parameter. In the CRC-32 used by /// GZIP and PKZIP, the bits are not reversed; Therefore if you want a /// CRC32 with compatibility with those, you should pass false for the /// reverseBits parameter. /// /// internal CRC32(int polynomial, bool reverseBits) { this.reverseBits = reverseBits; this.dwPolynomial = (uint)polynomial; this.GenerateLookupTable(); } /// /// Reset the CRC-32 class - clear the CRC "remainder register." /// /// /// /// Use this when employing a single instance of this class to compute /// multiple, distinct CRCs on multiple, distinct data blocks. /// /// internal void Reset() { _register = 0xFFFFFFFFU; } // private member vars private UInt32 dwPolynomial; private Int64 _TotalBytesRead; private bool reverseBits; private UInt32[] crc32Table; private const int BUFFER_SIZE = 8192; private UInt32 _register = 0xFFFFFFFFU; } /// /// A Stream that calculates a CRC32 (a checksum) on all bytes read, /// or on all bytes written. /// /// /// /// /// This class can be used to verify the CRC of a ZipEntry when /// reading from a stream, or to calculate a CRC when writing to a /// stream. The stream should be used to either read, or write, but /// not both. If you intermix reads and writes, the results are not /// defined. /// /// /// /// This class is intended primarily for use internally by the /// DotNetZip library. /// /// internal class CrcCalculatorStream : System.IO.Stream, System.IDisposable { private static readonly Int64 UnsetLengthLimit = -99; internal System.IO.Stream _innerStream; private CRC32 _Crc32; private Int64 _lengthLimit = -99; private bool _leaveOpen; /// /// The default constructor. /// /// /// /// Instances returned from this constructor will leave the underlying /// stream open upon Close(). The stream uses the default CRC32 /// algorithm, which implies a polynomial of 0xEDB88320. /// /// /// The underlying stream internal CrcCalculatorStream(System.IO.Stream stream) : this(true, CrcCalculatorStream.UnsetLengthLimit, stream, null) { } /// /// The constructor allows the caller to specify how to handle the /// underlying stream at close. /// /// /// /// The stream uses the default CRC32 algorithm, which implies a /// polynomial of 0xEDB88320. /// /// /// The underlying stream /// true to leave the underlying stream /// open upon close of the CrcCalculatorStream; false otherwise. internal CrcCalculatorStream(System.IO.Stream stream, bool leaveOpen) : this(leaveOpen, CrcCalculatorStream.UnsetLengthLimit, stream, null) { } /// /// A constructor allowing the specification of the length of the stream /// to read. /// /// /// /// The stream uses the default CRC32 algorithm, which implies a /// polynomial of 0xEDB88320. /// /// /// Instances returned from this constructor will leave the underlying /// stream open upon Close(). /// /// /// The underlying stream /// The length of the stream to slurp internal CrcCalculatorStream(System.IO.Stream stream, Int64 length) : this(true, length, stream, null) { if (length < 0) throw new ArgumentException("length"); } /// /// A constructor allowing the specification of the length of the stream /// to read, as well as whether to keep the underlying stream open upon /// Close(). /// /// /// /// The stream uses the default CRC32 algorithm, which implies a /// polynomial of 0xEDB88320. /// /// /// The underlying stream /// The length of the stream to slurp /// true to leave the underlying stream /// open upon close of the CrcCalculatorStream; false otherwise. internal CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen) : this(leaveOpen, length, stream, null) { if (length < 0) throw new ArgumentException("length"); } /// /// A constructor allowing the specification of the length of the stream /// to read, as well as whether to keep the underlying stream open upon /// Close(), and the CRC32 instance to use. /// /// /// /// The stream uses the specified CRC32 instance, which allows the /// application to specify how the CRC gets calculated. /// /// /// The underlying stream /// The length of the stream to slurp /// true to leave the underlying stream /// open upon close of the CrcCalculatorStream; false otherwise. /// the CRC32 instance to use to calculate the CRC32 internal CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen, CRC32 crc32) : this(leaveOpen, length, stream, crc32) { if (length < 0) throw new ArgumentException("length"); } // This ctor is private - no validation is done here. This is to allow the use // of a (specific) negative value for the _lengthLimit, to indicate that there // is no length set. So we validate the length limit in those ctors that use an // explicit param, otherwise we don't validate, because it could be our special // value. private CrcCalculatorStream (bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32) : base() { _innerStream = stream; _Crc32 = crc32 ?? new CRC32(); _lengthLimit = length; _leaveOpen = leaveOpen; } /// /// Gets the total number of bytes run through the CRC32 calculator. /// /// /// /// This is either the total number of bytes read, or the total number of /// bytes written, depending on the direction of this stream. /// internal Int64 TotalBytesSlurped { get { return _Crc32.TotalBytesRead; } } /// /// Provides the current CRC for all blocks slurped in. /// /// /// /// The running total of the CRC is kept as data is written or read /// through the stream. read this property after all reads or writes to /// get an accurate CRC for the entire stream. /// /// internal Int32 Crc { get { return _Crc32.Crc32Result; } } /// /// Indicates whether the underlying stream will be left open when the /// CrcCalculatorStream is Closed. /// /// /// /// Set this at any point before calling . /// /// internal bool LeaveOpen { get { return _leaveOpen; } set { _leaveOpen = value; } } /// /// Read from the stream /// /// the buffer to read /// the offset at which to start /// the number of bytes to read /// the number of bytes actually read public override int Read(byte[] buffer, int offset, int count) { int bytesToRead = count; // Need to limit the # of bytes returned, if the stream is intended to have // a definite length. This is especially useful when returning a stream for // the uncompressed data directly to the application. The app won't // necessarily read only the UncompressedSize number of bytes. For example // wrapping the stream returned from OpenReader() into a StreadReader() and // calling ReadToEnd() on it, We can "over-read" the zip data and get a // corrupt string. The length limits that, prevents that problem. if (_lengthLimit != CrcCalculatorStream.UnsetLengthLimit) { if (_Crc32.TotalBytesRead >= _lengthLimit) return 0; // EOF Int64 bytesRemaining = _lengthLimit - _Crc32.TotalBytesRead; if (bytesRemaining < count) bytesToRead = (int)bytesRemaining; } int n = _innerStream.Read(buffer, offset, bytesToRead); if (n > 0) _Crc32.SlurpBlock(buffer, offset, n); return n; } /// /// Write to the stream. /// /// the buffer from which to write /// the offset at which to start writing /// the number of bytes to write public override void Write(byte[] buffer, int offset, int count) { if (count > 0) _Crc32.SlurpBlock(buffer, offset, count); _innerStream.Write(buffer, offset, count); } /// /// Indicates whether the stream supports reading. /// public override bool CanRead { get { return _innerStream.CanRead; } } /// /// Indicates whether the stream supports seeking. /// /// /// /// Always returns false. /// /// public override bool CanSeek { get { return false; } } /// /// Indicates whether the stream supports writing. /// public override bool CanWrite { get { return _innerStream.CanWrite; } } /// /// Flush the stream. /// public override void Flush() { _innerStream.Flush(); } /// /// Returns the length of the underlying stream. /// public override long Length { get { if (_lengthLimit == CrcCalculatorStream.UnsetLengthLimit) return _innerStream.Length; else return _lengthLimit; } } /// /// The getter for this property returns the total bytes read. /// If you use the setter, it will throw /// . /// public override long Position { get { return _Crc32.TotalBytesRead; } set { throw new NotSupportedException(); } } /// /// Seeking is not supported on this stream. This method always throws /// /// /// N/A /// N/A /// N/A public override long Seek(long offset, System.IO.SeekOrigin origin) { throw new NotSupportedException(); } /// /// This method always throws /// /// /// N/A public override void SetLength(long value) { throw new NotSupportedException(); } void IDisposable.Dispose() { base.Dispose(); } } /// /// A custom encoding class that provides encoding capabilities for the /// 'Western European (ISO)' encoding under Silverlight.
/// This class was generated by a tool. For more information, visit /// http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator ///
internal class Iso88591Encoding : Encoding { /// /// Gets the name registered with the /// Internet Assigned Numbers Authority (IANA) for the current encoding. /// /// /// The IANA name for the current . /// public override string WebName { get { return "iso-8859-1"; } } private char? fallbackCharacter; /// /// A character that can be set in order to make the encoding class /// more fault tolerant. If this property is set, the encoding class will /// use this property instead of throwing an exception if an unsupported /// byte value is being passed for decoding. /// public char? FallbackCharacter { get { return fallbackCharacter; } set { fallbackCharacter = value; if (value.HasValue && !charToByte.ContainsKey(value.Value)) { string msg = "Cannot use the character [{0}] (int value {1}) as fallback value " + "- the fallback character itself is not supported by the encoding."; msg = String.Format(msg, value.Value, (int)value.Value); throw new EncoderFallbackException(msg); } FallbackByte = value.HasValue ? charToByte[value.Value] : (byte?)null; } } /// /// A byte value that corresponds to the . /// It is used in encoding scenarios in case an unsupported character is /// being passed for encoding. /// public byte? FallbackByte { get; private set; } public Iso88591Encoding() { FallbackCharacter = '?'; } /// /// Encodes a set of characters from the specified character array into the specified byte array. /// /// /// The actual number of bytes written into . /// /// The character array containing the set of characters to encode. /// The index of the first character to encode. /// The number of characters to encode. /// The byte array to contain the resulting sequence of bytes. /// The index at which to start writing the resulting sequence of bytes. /// public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) { return FallbackByte.HasValue ? GetBytesWithFallBack(chars, charIndex, charCount, bytes, byteIndex) : GetBytesWithoutFallback(chars, charIndex, charCount, bytes, byteIndex); } private int GetBytesWithFallBack(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) { for (int i = 0; i < charCount; i++) { var character = chars[i + charIndex]; byte byteValue; bool status = charToByte.TryGetValue(character, out byteValue); bytes[byteIndex + i] = status ? byteValue : FallbackByte.Value; } return charCount; } private int GetBytesWithoutFallback(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex) { for (int i = 0; i < charCount; i++) { var character = chars[i + charIndex]; byte byteValue; bool status = charToByte.TryGetValue(character, out byteValue); if (!status) { //throw exception string msg = "The encoding [{0}] cannot encode the character [{1}] (int value {2}). Set the FallbackCharacter property in order to suppress this exception and encode a default character instead."; msg = String.Format(msg, WebName, character, (int)character); throw new EncoderFallbackException(msg); } bytes[byteIndex + i] = byteValue; } return charCount; } /// /// Decodes a sequence of bytes from the specified byte array into the specified character array. /// /// /// The actual number of characters written into . /// /// The byte array containing the sequence of bytes to decode. /// The index of the first byte to decode. /// The number of bytes to decode. /// The character array to contain the resulting set of characters. /// The index at which to start writing the resulting set of characters. /// public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) { return FallbackCharacter.HasValue ? GetCharsWithFallback(bytes, byteIndex, byteCount, chars, charIndex) : GetCharsWithoutFallback(bytes, byteIndex, byteCount, chars, charIndex); } private int GetCharsWithFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) { for (int i = 0; i < byteCount; i++) { byte lookupIndex = bytes[i + byteIndex]; //if the byte value is not in our lookup array, fall back to default character char result = lookupIndex >= byteToChar.Length ? FallbackCharacter.Value : byteToChar[lookupIndex]; chars[charIndex + i] = result; } return byteCount; } private int GetCharsWithoutFallback(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex) { for (int i = 0; i < byteCount; i++) { byte lookupIndex = bytes[i + byteIndex]; if (lookupIndex >= byteToChar.Length) { //throw exception string msg = "The encoding [{0}] cannot decode byte value [{1}]. Set the FallbackCharacter property in order to suppress this exception and decode the value as a default character instead."; msg = String.Format(msg, WebName, lookupIndex); throw new EncoderFallbackException(msg); } chars[charIndex + i] = byteToChar[lookupIndex]; } return byteCount; } /// /// Calculates the number of bytes produced by encoding a set of characters /// from the specified character array. /// /// /// The number of bytes produced by encoding the specified characters. This class /// always returns the value of . /// public override int GetByteCount(char[] chars, int index, int count) { return count; } /// /// Calculates the number of characters produced by decoding a sequence /// of bytes from the specified byte array. /// /// /// The number of characters produced by decoding the specified sequence of bytes. This class /// always returns the value of . /// public override int GetCharCount(byte[] bytes, int index, int count) { return count; } /// /// Calculates the maximum number of bytes produced by encoding the specified number of characters. /// /// /// The maximum number of bytes produced by encoding the specified number of characters. This /// class always returns the value of . /// /// The number of characters to encode. /// public override int GetMaxByteCount(int charCount) { return charCount; } /// /// Calculates the maximum number of characters produced by decoding the specified number of bytes. /// /// /// The maximum number of characters produced by decoding the specified number of bytes. This class /// always returns the value of . /// /// The number of bytes to decode. public override int GetMaxCharCount(int byteCount) { return byteCount; } /// /// Gets the number of characters that are supported by this encoding. /// This property returns a maximum value of 256, as the encoding class /// only supports single byte encodings (1 byte == 256 possible values). /// public static int CharacterCount { get { return byteToChar.Length; } } #region Character Table /// /// This table contains characters in an array. The index within the /// array corresponds to the encoding's mapping of bytes to characters /// (e.g. if a byte value of 5 is used to encode the character 'x', this /// character will be stored at the array index 5. /// private static char[] byteToChar = new char[] { (char)0 /* byte 0 */ , (char)1 /* byte 1 */ , (char)2 /* byte 2 */ , (char)3 /* byte 3 */ , (char)4 /* byte 4 */ , (char)5 /* byte 5 */ , (char)6 /* byte 6 */ , (char)7 /* byte 7 */ , (char)8 /* byte 8 */ , (char)9 /* byte 9 */ , (char)10 /* byte 10 */ , (char)11 /* byte 11 */ , (char)12 /* byte 12 */ , (char)13 /* byte 13 */ , (char)14 /* byte 14 */ , (char)15 /* byte 15 */ , (char)16 /* byte 16 */ , (char)17 /* byte 17 */ , (char)18 /* byte 18 */ , (char)19 /* byte 19 */ , (char)20 /* byte 20 */ , (char)21 /* byte 21 */ , (char)22 /* byte 22 */ , (char)23 /* byte 23 */ , (char)24 /* byte 24 */ , (char)25 /* byte 25 */ , (char)26 /* byte 26 */ , (char)27 /* byte 27 */ , (char)28 /* byte 28 */ , (char)29 /* byte 29 */ , (char)30 /* byte 30 */ , (char)31 /* byte 31 */ , (char)32 /* byte 32 */ , (char)33 /* byte 33 */ , (char)34 /* byte 34 */ , (char)35 /* byte 35 */ , (char)36 /* byte 36 */ , (char)37 /* byte 37 */ , (char)38 /* byte 38 */ , (char)39 /* byte 39 */ , (char)40 /* byte 40 */ , (char)41 /* byte 41 */ , (char)42 /* byte 42 */ , (char)43 /* byte 43 */ , (char)44 /* byte 44 */ , (char)45 /* byte 45 */ , (char)46 /* byte 46 */ , (char)47 /* byte 47 */ , (char)48 /* byte 48 */ , (char)49 /* byte 49 */ , (char)50 /* byte 50 */ , (char)51 /* byte 51 */ , (char)52 /* byte 52 */ , (char)53 /* byte 53 */ , (char)54 /* byte 54 */ , (char)55 /* byte 55 */ , (char)56 /* byte 56 */ , (char)57 /* byte 57 */ , (char)58 /* byte 58 */ , (char)59 /* byte 59 */ , (char)60 /* byte 60 */ , (char)61 /* byte 61 */ , (char)62 /* byte 62 */ , (char)63 /* byte 63 */ , (char)64 /* byte 64 */ , (char)65 /* byte 65 */ , (char)66 /* byte 66 */ , (char)67 /* byte 67 */ , (char)68 /* byte 68 */ , (char)69 /* byte 69 */ , (char)70 /* byte 70 */ , (char)71 /* byte 71 */ , (char)72 /* byte 72 */ , (char)73 /* byte 73 */ , (char)74 /* byte 74 */ , (char)75 /* byte 75 */ , (char)76 /* byte 76 */ , (char)77 /* byte 77 */ , (char)78 /* byte 78 */ , (char)79 /* byte 79 */ , (char)80 /* byte 80 */ , (char)81 /* byte 81 */ , (char)82 /* byte 82 */ , (char)83 /* byte 83 */ , (char)84 /* byte 84 */ , (char)85 /* byte 85 */ , (char)86 /* byte 86 */ , (char)87 /* byte 87 */ , (char)88 /* byte 88 */ , (char)89 /* byte 89 */ , (char)90 /* byte 90 */ , (char)91 /* byte 91 */ , (char)92 /* byte 92 */ , (char)93 /* byte 93 */ , (char)94 /* byte 94 */ , (char)95 /* byte 95 */ , (char)96 /* byte 96 */ , (char)97 /* byte 97 */ , (char)98 /* byte 98 */ , (char)99 /* byte 99 */ , (char)100 /* byte 100 */ , (char)101 /* byte 101 */ , (char)102 /* byte 102 */ , (char)103 /* byte 103 */ , (char)104 /* byte 104 */ , (char)105 /* byte 105 */ , (char)106 /* byte 106 */ , (char)107 /* byte 107 */ , (char)108 /* byte 108 */ , (char)109 /* byte 109 */ , (char)110 /* byte 110 */ , (char)111 /* byte 111 */ , (char)112 /* byte 112 */ , (char)113 /* byte 113 */ , (char)114 /* byte 114 */ , (char)115 /* byte 115 */ , (char)116 /* byte 116 */ , (char)117 /* byte 117 */ , (char)118 /* byte 118 */ , (char)119 /* byte 119 */ , (char)120 /* byte 120 */ , (char)121 /* byte 121 */ , (char)122 /* byte 122 */ , (char)123 /* byte 123 */ , (char)124 /* byte 124 */ , (char)125 /* byte 125 */ , (char)126 /* byte 126 */ , (char)127 /* byte 127 */ , (char)128 /* byte 128 */ , (char)129 /* byte 129 */ , (char)130 /* byte 130 */ , (char)131 /* byte 131 */ , (char)132 /* byte 132 */ , (char)133 /* byte 133 */ , (char)134 /* byte 134 */ , (char)135 /* byte 135 */ , (char)136 /* byte 136 */ , (char)137 /* byte 137 */ , (char)138 /* byte 138 */ , (char)139 /* byte 139 */ , (char)140 /* byte 140 */ , (char)141 /* byte 141 */ , (char)142 /* byte 142 */ , (char)143 /* byte 143 */ , (char)144 /* byte 144 */ , (char)145 /* byte 145 */ , (char)146 /* byte 146 */ , (char)147 /* byte 147 */ , (char)148 /* byte 148 */ , (char)149 /* byte 149 */ , (char)150 /* byte 150 */ , (char)151 /* byte 151 */ , (char)152 /* byte 152 */ , (char)153 /* byte 153 */ , (char)154 /* byte 154 */ , (char)155 /* byte 155 */ , (char)156 /* byte 156 */ , (char)157 /* byte 157 */ , (char)158 /* byte 158 */ , (char)159 /* byte 159 */ , (char)160 /* byte 160 */ , (char)161 /* byte 161 */ , (char)162 /* byte 162 */ , (char)163 /* byte 163 */ , (char)164 /* byte 164 */ , (char)165 /* byte 165 */ , (char)166 /* byte 166 */ , (char)167 /* byte 167 */ , (char)168 /* byte 168 */ , (char)169 /* byte 169 */ , (char)170 /* byte 170 */ , (char)171 /* byte 171 */ , (char)172 /* byte 172 */ , (char)173 /* byte 173 */ , (char)174 /* byte 174 */ , (char)175 /* byte 175 */ , (char)176 /* byte 176 */ , (char)177 /* byte 177 */ , (char)178 /* byte 178 */ , (char)179 /* byte 179 */ , (char)180 /* byte 180 */ , (char)181 /* byte 181 */ , (char)182 /* byte 182 */ , (char)183 /* byte 183 */ , (char)184 /* byte 184 */ , (char)185 /* byte 185 */ , (char)186 /* byte 186 */ , (char)187 /* byte 187 */ , (char)188 /* byte 188 */ , (char)189 /* byte 189 */ , (char)190 /* byte 190 */ , (char)191 /* byte 191 */ , (char)192 /* byte 192 */ , (char)193 /* byte 193 */ , (char)194 /* byte 194 */ , (char)195 /* byte 195 */ , (char)196 /* byte 196 */ , (char)197 /* byte 197 */ , (char)198 /* byte 198 */ , (char)199 /* byte 199 */ , (char)200 /* byte 200 */ , (char)201 /* byte 201 */ , (char)202 /* byte 202 */ , (char)203 /* byte 203 */ , (char)204 /* byte 204 */ , (char)205 /* byte 205 */ , (char)206 /* byte 206 */ , (char)207 /* byte 207 */ , (char)208 /* byte 208 */ , (char)209 /* byte 209 */ , (char)210 /* byte 210 */ , (char)211 /* byte 211 */ , (char)212 /* byte 212 */ , (char)213 /* byte 213 */ , (char)214 /* byte 214 */ , (char)215 /* byte 215 */ , (char)216 /* byte 216 */ , (char)217 /* byte 217 */ , (char)218 /* byte 218 */ , (char)219 /* byte 219 */ , (char)220 /* byte 220 */ , (char)221 /* byte 221 */ , (char)222 /* byte 222 */ , (char)223 /* byte 223 */ , (char)224 /* byte 224 */ , (char)225 /* byte 225 */ , (char)226 /* byte 226 */ , (char)227 /* byte 227 */ , (char)228 /* byte 228 */ , (char)229 /* byte 229 */ , (char)230 /* byte 230 */ , (char)231 /* byte 231 */ , (char)232 /* byte 232 */ , (char)233 /* byte 233 */ , (char)234 /* byte 234 */ , (char)235 /* byte 235 */ , (char)236 /* byte 236 */ , (char)237 /* byte 237 */ , (char)238 /* byte 238 */ , (char)239 /* byte 239 */ , (char)240 /* byte 240 */ , (char)241 /* byte 241 */ , (char)242 /* byte 242 */ , (char)243 /* byte 243 */ , (char)244 /* byte 244 */ , (char)245 /* byte 245 */ , (char)246 /* byte 246 */ , (char)247 /* byte 247 */ , (char)248 /* byte 248 */ , (char)249 /* byte 249 */ , (char)250 /* byte 250 */ , (char)251 /* byte 251 */ , (char)252 /* byte 252 */ , (char)253 /* byte 253 */ , (char)254 /* byte 254 */ , (char)255 /* byte 255 */ }; #endregion #region Byte Lookup Dictionary /// /// This dictionary is used to resolve byte values for a given character. /// private static Dictionary charToByte = new Dictionary { { (char)0, 0 }, { (char)1, 1 }, { (char)2, 2 }, { (char)3, 3 }, { (char)4, 4 }, { (char)5, 5 }, { (char)6, 6 }, { (char)7, 7 }, { (char)8, 8 }, { (char)9, 9 }, { (char)10, 10 }, { (char)11, 11 }, { (char)12, 12 }, { (char)13, 13 }, { (char)14, 14 }, { (char)15, 15 }, { (char)16, 16 }, { (char)17, 17 }, { (char)18, 18 }, { (char)19, 19 }, { (char)20, 20 }, { (char)21, 21 }, { (char)22, 22 }, { (char)23, 23 }, { (char)24, 24 }, { (char)25, 25 }, { (char)26, 26 }, { (char)27, 27 }, { (char)28, 28 }, { (char)29, 29 }, { (char)30, 30 }, { (char)31, 31 }, { (char)32, 32 }, { (char)33, 33 }, { (char)34, 34 }, { (char)35, 35 }, { (char)36, 36 }, { (char)37, 37 }, { (char)38, 38 }, { (char)39, 39 }, { (char)40, 40 }, { (char)41, 41 }, { (char)42, 42 }, { (char)43, 43 }, { (char)44, 44 }, { (char)45, 45 }, { (char)46, 46 }, { (char)47, 47 }, { (char)48, 48 }, { (char)49, 49 }, { (char)50, 50 }, { (char)51, 51 }, { (char)52, 52 }, { (char)53, 53 }, { (char)54, 54 }, { (char)55, 55 }, { (char)56, 56 }, { (char)57, 57 }, { (char)58, 58 }, { (char)59, 59 }, { (char)60, 60 }, { (char)61, 61 }, { (char)62, 62 }, { (char)63, 63 }, { (char)64, 64 }, { (char)65, 65 }, { (char)66, 66 }, { (char)67, 67 }, { (char)68, 68 }, { (char)69, 69 }, { (char)70, 70 }, { (char)71, 71 }, { (char)72, 72 }, { (char)73, 73 }, { (char)74, 74 }, { (char)75, 75 }, { (char)76, 76 }, { (char)77, 77 }, { (char)78, 78 }, { (char)79, 79 }, { (char)80, 80 }, { (char)81, 81 }, { (char)82, 82 }, { (char)83, 83 }, { (char)84, 84 }, { (char)85, 85 }, { (char)86, 86 }, { (char)87, 87 }, { (char)88, 88 }, { (char)89, 89 }, { (char)90, 90 }, { (char)91, 91 }, { (char)92, 92 }, { (char)93, 93 }, { (char)94, 94 }, { (char)95, 95 }, { (char)96, 96 }, { (char)97, 97 }, { (char)98, 98 }, { (char)99, 99 }, { (char)100, 100 }, { (char)101, 101 }, { (char)102, 102 }, { (char)103, 103 }, { (char)104, 104 }, { (char)105, 105 }, { (char)106, 106 }, { (char)107, 107 }, { (char)108, 108 }, { (char)109, 109 }, { (char)110, 110 }, { (char)111, 111 }, { (char)112, 112 }, { (char)113, 113 }, { (char)114, 114 }, { (char)115, 115 }, { (char)116, 116 }, { (char)117, 117 }, { (char)118, 118 }, { (char)119, 119 }, { (char)120, 120 }, { (char)121, 121 }, { (char)122, 122 }, { (char)123, 123 }, { (char)124, 124 }, { (char)125, 125 }, { (char)126, 126 }, { (char)127, 127 }, { (char)128, 128 }, { (char)129, 129 }, { (char)130, 130 }, { (char)131, 131 }, { (char)132, 132 }, { (char)133, 133 }, { (char)134, 134 }, { (char)135, 135 }, { (char)136, 136 }, { (char)137, 137 }, { (char)138, 138 }, { (char)139, 139 }, { (char)140, 140 }, { (char)141, 141 }, { (char)142, 142 }, { (char)143, 143 }, { (char)144, 144 }, { (char)145, 145 }, { (char)146, 146 }, { (char)147, 147 }, { (char)148, 148 }, { (char)149, 149 }, { (char)150, 150 }, { (char)151, 151 }, { (char)152, 152 }, { (char)153, 153 }, { (char)154, 154 }, { (char)155, 155 }, { (char)156, 156 }, { (char)157, 157 }, { (char)158, 158 }, { (char)159, 159 }, { (char)160, 160 }, { (char)161, 161 }, { (char)162, 162 }, { (char)163, 163 }, { (char)164, 164 }, { (char)165, 165 }, { (char)166, 166 }, { (char)167, 167 }, { (char)168, 168 }, { (char)169, 169 }, { (char)170, 170 }, { (char)171, 171 }, { (char)172, 172 }, { (char)173, 173 }, { (char)174, 174 }, { (char)175, 175 }, { (char)176, 176 }, { (char)177, 177 }, { (char)178, 178 }, { (char)179, 179 }, { (char)180, 180 }, { (char)181, 181 }, { (char)182, 182 }, { (char)183, 183 }, { (char)184, 184 }, { (char)185, 185 }, { (char)186, 186 }, { (char)187, 187 }, { (char)188, 188 }, { (char)189, 189 }, { (char)190, 190 }, { (char)191, 191 }, { (char)192, 192 }, { (char)193, 193 }, { (char)194, 194 }, { (char)195, 195 }, { (char)196, 196 }, { (char)197, 197 }, { (char)198, 198 }, { (char)199, 199 }, { (char)200, 200 }, { (char)201, 201 }, { (char)202, 202 }, { (char)203, 203 }, { (char)204, 204 }, { (char)205, 205 }, { (char)206, 206 }, { (char)207, 207 }, { (char)208, 208 }, { (char)209, 209 }, { (char)210, 210 }, { (char)211, 211 }, { (char)212, 212 }, { (char)213, 213 }, { (char)214, 214 }, { (char)215, 215 }, { (char)216, 216 }, { (char)217, 217 }, { (char)218, 218 }, { (char)219, 219 }, { (char)220, 220 }, { (char)221, 221 }, { (char)222, 222 }, { (char)223, 223 }, { (char)224, 224 }, { (char)225, 225 }, { (char)226, 226 }, { (char)227, 227 }, { (char)228, 228 }, { (char)229, 229 }, { (char)230, 230 }, { (char)231, 231 }, { (char)232, 232 }, { (char)233, 233 }, { (char)234, 234 }, { (char)235, 235 }, { (char)236, 236 }, { (char)237, 237 }, { (char)238, 238 }, { (char)239, 239 }, { (char)240, 240 }, { (char)241, 241 }, { (char)242, 242 }, { (char)243, 243 }, { (char)244, 244 }, { (char)245, 245 }, { (char)246, 246 }, { (char)247, 247 }, { (char)248, 248 }, { (char)249, 249 }, { (char)250, 250 }, { (char)251, 251 }, { (char)252, 252 }, { (char)253, 253 }, { (char)254, 254 }, { (char)255, 255 } }; #endregion } } ================================================ FILE: Platforms/XR/.Android/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; bool _isTrackFloorLevelEnabled = false; HandsState _handsState; HeadsetState _headsetState; public override bool IsVRSupported { get { return false; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return XRDeviceState.Disabled; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._graphics = graphics; } public override int BeginSessionAsync(XRSessionMode sessionMode) { return -1; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.None; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { return null; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: case XREye.Left: case XREye.Right: throw new NotImplementedException(); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { Debug.Assert(null == rt); return; } public override int EndFrame() { return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { controllerType = (TouchControllerType)0; gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = default(Buttons); hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } internal GamePadState GetGamePadState(TouchControllerType controllerType) { return default(GamePadState); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.Android/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.BlazorGL/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; using nkast.Wasm.Canvas.WebGL; using nkast.Wasm.Dom; using nkast.Wasm.Input; using nkast.Wasm.XR; using WebXREye = nkast.Wasm.XR.XREye; using SysNumerics = System.Numerics; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { Game _game; IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; XRDeviceState _deviceState; bool _isTrackFloorLevelEnabled = false; private bool? _isVRSupported; private bool? _isARSupported; XRSystem _xr; XRSession _xrsession; XRReferenceSpace _localSpace; XRReferenceSpace _localFloorSpace; Task _createLocalFloorSpaceTask; XRWebGLLayer _glLayer; int _xrAnimationHandle; bool _xrInAnimationFrame; HandsState _handsState; public override bool IsVRSupported { get { return _isVRSupported.GetValueOrDefault(); } } public override bool IsARSupported { get { return _isARSupported.GetValueOrDefault(); } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return _deviceState; } } public override bool IsTrackFloorLevelEnabled { get { return (_isTrackFloorLevelEnabled && _localFloorSpace != null); } } public ConcreteXRDevice(string applicationName, Game game) { if (game == null) throw new ArgumentNullException("game"); IGraphicsDeviceService graphics = game.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._game = game; this._graphics = graphics; this._xr = XRSystem.FromNavigator(Window.Current.Navigator); if (this._xr == null) { _deviceState = XRDeviceState.Disabled; return; } this._deviceState = XRDeviceState.InitializingDevice; InitXRDeviceAsync(); } private async void InitXRDeviceAsync() { this._isVRSupported = await _xr.IsSessionSupportedAsync(ModeToString(XRSessionMode.VR)); this._isARSupported = await _xr.IsSessionSupportedAsync(ModeToString(XRSessionMode.AR)); this._deviceState = XRDeviceState.Disabled; } public ConcreteXRDevice(string applicationName, IServiceProvider services) { throw new PlatformNotSupportedException("WebXR requires a Game reference."); } public override int BeginSessionAsync(XRSessionMode sessionMode) { if (this.DeviceState != XRDeviceState.Disabled && this.DeviceState != XRDeviceState.NoPermissions) { return -1; } switch (sessionMode) { case XRSessionMode.VR: if (_isVRSupported == false) return -1; //throw new NotSupportedException("VR"); _deviceState = XRDeviceState.InitializingSession; InitXRSessionAsync(XRSessionMode.VR); break; case XRSessionMode.AR: if (_isARSupported == false) return -1; //throw new NotSupportedException("AR"); _deviceState = XRDeviceState.InitializingSession; InitXRSessionAsync(XRSessionMode.AR); break; default: throw new InvalidOperationException(); } return 0; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { if (_currentXRFrame != null) { using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace)) { if (viewerPose != null) { foreach (XRView xrView in viewerPose.Views) { XREye viewEye = (XREye)xrView.Eye; yield return viewEye; } yield break; } } } yield return XREye.None; } RenderTarget2D[] _rt = new RenderTarget2D[2]; public override RenderTarget2D GetEyeRenderTarget(XREye eye) { RenderTarget2D rt; int w = 0, h = 0; XRWebGLLayer glLayer = _currentRenderState.BaseLayer; using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace)) { if (viewerPose != null) { foreach (XRView xrView in viewerPose.Views) { if (eye == (XREye)xrView.Eye) { XRViewport xrViewport = glLayer.GetViewport(xrView); w = xrViewport.Width; h = xrViewport.Height; } } } } if (w == 0) return null; int eyeIndex = (int)eye - 1; if (eyeIndex == -1) eyeIndex = 0; if (_rt[eyeIndex] != null && (_rt[eyeIndex].Width != w || _rt[eyeIndex].Height != h) ) { _rt[eyeIndex].Dispose(); _rt[eyeIndex] = null; } if (_rt[eyeIndex] == null) { _rt[eyeIndex] = new RenderTarget2D(_graphics.GraphicsDevice, w, h, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, RenderTargetUsage.PreserveContents); } return _rt[eyeIndex]; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: return CreateProjection(_lproj, znear, zfar); case XREye.Left: return CreateProjection(_lproj, znear, zfar); case XREye.Right: return CreateProjection(_rproj, znear, zfar); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { int eyeIndex = (int)eye - 1; if (eyeIndex == -1) eyeIndex = 0; Debug.Assert(_rt[eyeIndex] == rt); return; } public override int EndFrame() { var graphicsDevice = _graphics.GraphicsDevice; var GL = (IWebGL2RenderingContext)((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete().GL; XRWebGLLayer glLayer = _currentRenderState.BaseLayer; using (XRViewerPose viewerPose = _currentXRFrame.GetViewerPose(_localSpace)) { if (viewerPose != null) { WebGLFramebuffer glFramebuffer = glLayer.Framebuffer; WebGLFramebuffer glDefaultFramebuffer = ((IPlatformGraphicsDevice)graphicsDevice).Strategy.ToConcrete()._glDefaultFramebuffer; foreach (XRView xrView in viewerPose.Views) { WebXREye viewEye = xrView.Eye; int eye = (int)viewEye - 1; if (eye == -1) eye = 0; XRViewport xrViewport = glLayer.GetViewport(xrView); if (xrViewport.Width == 0) return 0; if (_rt[eye] == null) return 0; ConcreteTexture concreteTexture = ((IPlatformTexture)_rt[eye]).GetTextureStrategy(); // copy rendertarget to glFramebuffer using (WebGLFramebuffer sourceFramebuffer = GL.CreateFramebuffer()) { //unbind glDefaultFramebuffer GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, null); //GL.CheckGLError(); if (glFramebuffer != null) { // bind DrawFramebuffer GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glFramebuffer); //GL.CheckGLError(); } else { // bind DrawFramebuffer GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, glDefaultFramebuffer); //GL.CheckGLError(); } GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, sourceFramebuffer); //GL.CheckGLError(); GL.FramebufferTexture2D( WebGL2FramebufferType.READ_FRAMEBUFFER, WebGLFramebufferAttachmentPoint.COLOR_ATTACHMENT0, WebGLTextureTarget.TEXTURE_2D, concreteTexture._glTexture); //GL.CheckGLError(); //CheckFramebufferStatus(WebGL2FramebufferType.DRAW_FRAMEBUFFER); //CheckFramebufferStatus(WebGL2FramebufferType.READ_FRAMEBUFFER); // copy and y-flip GL.BlitFramebuffer(0, 0, _rt[eye].Width, _rt[eye].Height, xrViewport.X, xrViewport.Y + xrViewport.Height, xrViewport.X + xrViewport.Width, xrViewport.Y, WebGLBufferBits.COLOR, WebGLTexParam.NEAREST); //GL.CheckGLError(); //GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, sourceFramebuffer); GL.BindFramebuffer(WebGL2FramebufferType.READ_FRAMEBUFFER, null); //GL.CheckGLError(); // unbind DrawFramebuffer GL.BindFramebuffer(WebGL2FramebufferType.DRAW_FRAMEBUFFER, null); //GL.CheckGLError(); //rebind glDefaultFramebuffer GL.BindFramebuffer(WebGLFramebufferType.FRAMEBUFFER, glDefaultFramebuffer); //GL.CheckGLError(); //CheckFramebufferStatus(WebGL2FramebufferType.DRAW_FRAMEBUFFER); } } } } return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { _xrsession.End(); } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { _isTrackFloorLevelEnabled = enable; if (_localFloorSpace == null) { // create _localFloorSpace if (_createLocalFloorSpaceTask == null) { try { _createLocalFloorSpaceTask = _currentXRSession.RequestReferenceSpaceAsync("local-floor"); _createLocalFloorSpaceTask.ContinueWith((t) => { if (_createLocalFloorSpaceTask.IsCompletedSuccessfully) { _localFloorSpace = _createLocalFloorSpaceTask.Result; } _createLocalFloorSpaceTask = null; }); } catch { /* local-floor not supported */ _createLocalFloorSpaceTask = null; } } } } else { _isTrackFloorLevelEnabled = enable; } } private string ModeToString(XRSessionMode mode) { switch (mode) { case XRSessionMode.VR: return "immersive-vr"; case XRSessionMode.AR: return "immersive-ar"; default: throw new ArgumentException("mode"); } throw new NotImplementedException(); } private async void InitXRSessionAsync(XRSessionMode mode) { try { var graphicsDevice = _graphics.GraphicsDevice; var GL = (IWebGL2RenderingContext) ((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete().GL; XRSessionOptions sessionOptions = default; sessionOptions.RequiredFeatures |= XRSessionFeatures.Local; sessionOptions.OptionalFeatures |= XRSessionFeatures.LocalFloor; _xrsession = await _xr.RequestSessionAsync(ModeToString(mode), sessionOptions); _xrsession.Ended += _xrsession_Ended; _xrsession.InputSourcesChanged += _xrsession_InputSourcesChanged; await GL.MakeXRCompatibleAsync(); _localSpace = await _xrsession.RequestReferenceSpaceAsync("local"); XRWebGLLayerOptions glLayerOptions = new XRWebGLLayerOptions(); glLayerOptions.Antialias = false; //glLayerOptions.Depth = true; //glLayerOptions.IgnoreDepthValues = false; _glLayer = new XRWebGLLayer(_xrsession, GL, glLayerOptions); RenderStateAttributes attribs = new RenderStateAttributes(); attribs.BaseLayer = _glLayer; _xrsession.UpdateRenderState(attribs); TouchController.DeviceHandle = new ConcreteTouchController(this); _sessionMode = mode; _deviceState = XRDeviceState.Enabled; ((IPlatformGame)_game).GetStrategy()._suppressTick = true; _xrAnimationHandle = _xrsession.RequestAnimationFrame(this.AnimationFrameCallback); } catch (UnauthorizedAccessException ex) { Console.WriteLine("InitXRSessionAsync failed with UnauthorizedAccessException. " + ex.Message); _deviceState = XRDeviceState.NoPermissions; } catch (Exception ex) { Console.WriteLine("InitXRSessionAsync failed. " + ex.Message); _deviceState = XRDeviceState.Disabled; //throw; } } private void _xrsession_Ended(object sender, EventArgs e) { XRSession xrSession = (XRSession)sender; Debug.Assert(xrSession == _xrsession); Console.WriteLine("_xrsession_Ended"); _xrsession.CancelAnimationFrame(_xrAnimationHandle); ((IPlatformGame)_game).GetStrategy()._suppressTick = false; _deviceState = XRDeviceState.Disabled; TouchController.DeviceHandle = null; _xrsession = null; _localSpace = null; _glLayer = null; } private void _xrsession_InputSourcesChanged(object sender, InputSourcesChangedEventArgs e) { Console.WriteLine("_xrsession_InputSourcesChanged"); } XRFrame _currentXRFrame; XRSession _currentXRSession; XRRenderState _currentRenderState; private HeadsetState _headsetState; private Matrix _lproj; private Matrix _rproj; private void AnimationFrameCallback(TimeSpan time, XRFrame frame) { //Console.WriteLine("AnimationFrameCallback " + time.TotalSeconds.ToString()); try { _currentXRFrame = frame; _currentXRSession = _currentXRFrame.Session; _currentRenderState = _currentXRSession.RenderState; XRReferenceSpace referenceSpace = _localSpace; if (_isTrackFloorLevelEnabled == true && _localFloorSpace != null) referenceSpace = _localFloorSpace; // save Gamepad state _lbuttons = null; _laxes = null; _rbuttons = null; _raxes = null; foreach (XRInputSource inputSource in _xrsession.InputSources) { XRHandedness hand = inputSource.Handedness; Gamepad gamepad = inputSource.Gamepad; if (gamepad != null) { switch (hand) { case XRHandedness.Left: { _lbuttons = gamepad.Buttons; _laxes = gamepad.Axes; } break; case XRHandedness.Right: { _rbuttons = gamepad.Buttons; _raxes = gamepad.Axes; } break; } } XRRigidTransform gripPose = default; XRRigidTransform pointerPose = default; Vector4 pointerLinearVelocity = default; XRSpace gripSpace = inputSource.GripSpace; if (gripSpace != null) { using (XRPose grip = _currentXRFrame.GetPose(gripSpace, referenceSpace)) { if (grip != null) { gripPose = grip.Transform; } } } XRSpace pointerSpace = inputSource.TargetRaySpace; if (pointerSpace != null) { using (XRPose pointer = _currentXRFrame.GetPose(pointerSpace, referenceSpace)) { if (pointer != null) { pointerPose = pointer.Transform; pointerLinearVelocity = (Vector4)pointer.LinearVelocity.GetValueOrDefault(); } } } switch (hand) { case XRHandedness.Left: { _handsState.LGripPose = gripPose.ToPose3(); _handsState.LHandPose = pointerPose.ToPose3(); _handsState.LHandLinearVelocity = new Vector3(pointerLinearVelocity.X, pointerLinearVelocity.Y, pointerLinearVelocity.Z); } break; case XRHandedness.Right: { _handsState.RGripPose = gripPose.ToPose3(); _handsState.RHandPose = pointerPose.ToPose3(); _handsState.RHandLinearVelocity = new Vector3(pointerLinearVelocity.X, pointerLinearVelocity.Y, pointerLinearVelocity.Z); } break; } } using (XRViewerPose xrViewerPose = _currentXRFrame.GetViewerPose(referenceSpace)) { if (xrViewerPose != null) { bool emulatedPosition = xrViewerPose.EmulatedPosition; SysNumerics.Vector4? angularVelocity = xrViewerPose.AngularVelocity; SysNumerics.Vector4? linearVelocity = xrViewerPose.LinearVelocity; XRRigidTransform viewerPose = xrViewerPose.Transform; XRWebGLLayer glLayer = _currentRenderState.BaseLayer; float? depthNear = _currentRenderState.DepthNear; float? depthFar = _currentRenderState.DepthFar; int w = glLayer.FramebufferWidth; int h = glLayer.FramebufferHeight; bool ign = glLayer.IgnoreDepthValues; bool antialias = glLayer.Antialias; foreach (XRView xrView in xrViewerPose.Views) { WebXREye eye = xrView.Eye; XRViewport xrViewport = glLayer.GetViewport(xrView); float aspect = (float)xrViewport.Width / (float)xrViewport.Height; XRRigidTransform viewPose = xrView.Transform; _headsetState.HeadPose = viewerPose.ToPose3(); switch (eye) { case WebXREye.None: { _lproj = (Matrix)xrView.ProjectionMatrix; _headsetState.HeadPose = viewPose.ToPose3(); } break; case WebXREye.Left: { _lproj = (Matrix)xrView.ProjectionMatrix; _headsetState.LEyePose = viewPose.ToPose3(); } break; case WebXREye.Right: { _rproj = (Matrix)xrView.ProjectionMatrix; _headsetState.REyePose = viewPose.ToPose3(); } break; } xrView.Dispose(); } _xrInAnimationFrame = true; try { ((IPlatformGame)_game).GetStrategy()._suppressTick = false; _game.Tick(); } catch (Exception ex) { Console.WriteLine("XR AnimationFrameCallback: exception: "+ex.Message); Console.WriteLine(ex.StackTrace); throw; } finally { ((IPlatformGame)_game).GetStrategy()._suppressTick = true; _xrInAnimationFrame = false; } } } } finally { _currentXRFrame = null; _currentXRSession = null; _currentRenderState = null; // Request next frame _xrAnimationHandle = _xrsession.RequestAnimationFrame(this.AnimationFrameCallback); } } [Conditional("DEBUG")] public void CheckFramebufferStatus(WebGL2FramebufferType framebuffer) { var graphicsDevice = _graphics.GraphicsDevice; var GL = (IWebGL2RenderingContext)((IPlatformGraphicsContext)((IPlatformGraphicsDevice)graphicsDevice).Strategy.CurrentContext).Strategy.ToConcrete().GL; WebGL2FramebufferStatus status = GL.CheckFramebufferStatus(framebuffer); switch (status) { case WebGL2FramebufferStatus.FRAMEBUFFER_COMPLETE: return; case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: throw new InvalidOperationException("Not all framebuffer attachment points are framebuffer attachment complete."); case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: throw new InvalidOperationException("No images are attached to the framebuffer."); case WebGL2FramebufferStatus.FRAMEBUFFER_UNSUPPORTED: throw new InvalidOperationException("The combination of internal formats of the attached images violates an implementation-dependent set of restrictions."); case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: throw new InvalidOperationException("Not all attached images have the same dimensions."); case WebGL2FramebufferStatus.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: throw new InvalidOperationException("The values of RENDERBUFFER_SAMPLES are different among attached renderbuffers, or are non-zero if the attached images are a mix of renderbuffers and textures."); default: throw new InvalidOperationException("Framebuffer Incomplete."); } } private Matrix CreateProjection(Matrix xrproj, float nearZ, float farZ) { // extract FOV from the xrView.ProjectionMatrix float tanAngleLeft = (1 + xrproj.M31) / xrproj.M11; float tanAngleRight = (1 - xrproj.M31) / xrproj.M11; float tanAngleBottom = (1 + xrproj.M32) / xrproj.M22; float tanAngleTop = (1 - xrproj.M32) / xrproj.M22; // create projection with nearZ/farZ GraphicsBackend graphicsBackend = _graphics.GraphicsDevice.Adapter.Backend; if (farZ == float.PositiveInfinity) return CreateInfiniteProjection(graphicsBackend, tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, nearZ); else return CreateProjection(graphicsBackend, tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, nearZ, farZ); } static unsafe Matrix CreateProjection(GraphicsBackend graphicsBackend, float tanAngleLeft, float tanAngleRight, float tanAngleBottom, float tanAngleTop, float nearZ, float farZ) { float tanAngleWidth = tanAngleLeft + tanAngleRight; float tanAngleHeight = tanAngleBottom + tanAngleTop; // Set offsetZ to zero for a [ 0,+1] Z clip space (D3D / Metal / Vulkan). // Set offsetZ to nearZ for a [-1,+1] Z clip space (OpenGL / GLES / WebGL). //float offsetZ = (graphicsBackend == GraphicsBackend.OpenGL || graphicsBackend == GraphicsBackend.GLES || graphicsBackend == GraphicsBackend.WebGL) // ? nearZ // : 0; const float offsetZ = 0; Matrix result; // normal projection result.M11 = (2f) / tanAngleWidth; result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f) / tanAngleHeight; result.M21 = result.M23 = result.M24 = 0; result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth; result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight; result.M33 = (float)((farZ + (double)offsetZ) / ((double)nearZ - farZ)); result.M34 = -1; result.M43 = (float)((farZ * ((double)nearZ + offsetZ)) / ((double)nearZ - farZ)); result.M41 = result.M42 = result.M44 = 0; return result; } static unsafe Matrix CreateInfiniteProjection(GraphicsBackend graphicsBackend, float tanAngleLeft, float tanAngleRight, float tanAngleBottom, float tanAngleTop, float nearZ) { float tanAngleWidth = tanAngleLeft + tanAngleRight; float tanAngleHeight = tanAngleBottom + tanAngleTop; // Set offsetZ to zero for a [ 0,+1] Z clip space (D3D / Metal / Vulkan). // Set offsetZ to nearZ for a [-1,+1] Z clip space (OpenGL / GLES / WebGL). //float offsetZ = (graphicsBackend == GraphicsBackend.OpenGL || graphicsBackend == GraphicsBackend.GLES || graphicsBackend == GraphicsBackend.WebGL) // ? nearZ // : 0; const float offsetZ = 0; Matrix result; // place the far plane at infinity result.M11 = 2.0f / tanAngleWidth; result.M12 = 0.0f; result.M13 = 0.0f; result.M14 = 0.0f; result.M21 = 0.0f; result.M22 = 2.0f / tanAngleHeight; result.M23 = 0.0f; result.M24 = 0.0f; result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth; result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight; result.M33 = -1.0f; result.M34 = -1.0f; result.M41 = 0.0f; result.M42 = 0.0f; result.M43 = -(nearZ + offsetZ); result.M44 = 0.0f; return result; } private GamePadState _gamePadState; GamepadButton[] _lbuttons; float[] _laxes; GamepadButton[] _rbuttons; float[] _raxes; internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { gamePadType = GamePadType.GamePad; if (controllerType == TouchControllerType.LTouch) { if (_lbuttons != null) { isConnected = true; //// left buttons if (_lbuttons != null && _lbuttons.Length > 4) buttons |= Buttons.X; if (_lbuttons != null && _lbuttons.Length > 5) buttons |= Buttons.Y; if (_lbuttons != null && _lbuttons.Length > 3) buttons |= Buttons.LeftStick; if (_lbuttons != null && _lbuttons.Length > 0) buttons |= Buttons.LeftTrigger; if (_lbuttons != null && _lbuttons.Length > 1) buttons |= Buttons.LeftGrip; } } if (controllerType == TouchControllerType.RTouch) { if (_rbuttons != null) { isConnected = true; //// right buttons if (_rbuttons != null && _rbuttons.Length > 4) buttons |= Buttons.A; if (_rbuttons != null && _rbuttons.Length > 5) buttons |= Buttons.B; if (_rbuttons != null && _rbuttons.Length > 3) buttons |= Buttons.RightStick; if (_rbuttons != null && _rbuttons.Length > 0) buttons |= Buttons.RightTrigger; if (_rbuttons != null && _rbuttons.Length > 1) buttons |= Buttons.RightGrip; } } if (controllerType == TouchControllerType.Touch) { if (_lbuttons != null && _rbuttons != null) { isConnected = true; //// left buttons if (_lbuttons != null && _lbuttons.Length > 4) buttons |= Buttons.X; if (_lbuttons != null && _lbuttons.Length > 5) buttons |= Buttons.Y; if (_lbuttons != null && _lbuttons.Length > 3) buttons |= Buttons.LeftStick; if (_lbuttons != null && _lbuttons.Length > 0) buttons |= Buttons.LeftTrigger; if (_lbuttons != null && _lbuttons.Length > 1) buttons |= Buttons.LeftGrip; //// right buttons if (_rbuttons != null && _rbuttons.Length > 4) buttons |= Buttons.A; if (_rbuttons != null && _rbuttons.Length > 5) buttons |= Buttons.B; if (_rbuttons != null && _rbuttons.Length > 3) buttons |= Buttons.RightStick; if (_rbuttons != null && _rbuttons.Length > 0) buttons |= Buttons.RightTrigger; if (_rbuttons != null && _rbuttons.Length > 1) buttons |= Buttons.RightGrip; } } foreach (XRInputSource inputSource in _xrsession.InputSources) { XRHandedness hand = inputSource.Handedness; Gamepad gamepad = inputSource.Gamepad; if (gamepad != null) { switch (hand) { case XRHandedness.Left: { if (controllerType == TouchControllerType.LTouch || controllerType == TouchControllerType.Touch) { if (gamepad.VibrationActuator != null) hasLeftVibrationMotor = true; } } break; case XRHandedness.Right: { if (controllerType == TouchControllerType.RTouch || controllerType == TouchControllerType.Touch) { if (gamepad.VibrationActuator != null) hasRightVibrationMotor = true; } } break; } } } } internal GamePadState GetGamePadState(TouchControllerType controllerType) { Vector2 leftStick = default; Vector2 rightStick = default; if (_laxes != null && _laxes.Length >= 4) leftStick = new Vector2(_laxes[2], -_laxes[3]); if (_raxes != null && _raxes.Length >= 4) rightStick = new Vector2(_raxes[2], -_raxes[3]); GamePadThumbSticks thumbSticks = new GamePadThumbSticks( leftStick, rightStick); float leftTrigger = 0; float rightTrigger = 0; if (_lbuttons != null && _lbuttons.Length > 0) leftTrigger = _lbuttons[0].Value; if (_rbuttons != null && _rbuttons.Length > 0) rightTrigger = _rbuttons[0].Value; GamePadTriggers triggers = new GamePadTriggers( leftTrigger, // LeftTrigger rightTrigger // RightTrigger ); GamePadTriggers grips = default(GamePadTriggers); Buttons buttons = default(Buttons); Buttons touches = default(Buttons); float leftGrip = 0; float rightGrip = 0; if (_lbuttons != null && _lbuttons.Length > 1) leftGrip = _lbuttons[1].Value; if (_rbuttons != null && _rbuttons.Length > 1) rightGrip = _rbuttons[1].Value; grips = new GamePadTriggers( leftTrigger: leftGrip, rightTrigger: rightGrip); //// left buttons if (_lbuttons != null && _lbuttons.Length > 4 && _lbuttons[4].Pressed) buttons |= Buttons.X; if (_lbuttons != null && _lbuttons.Length > 5 && _lbuttons[5].Pressed) buttons |= Buttons.Y; if (_lbuttons != null && _lbuttons.Length > 3 && _lbuttons[3].Pressed) buttons |= Buttons.LeftStick; if (_lbuttons != null && _lbuttons.Length > 0 && _lbuttons[0].Pressed) buttons |= Buttons.LeftTrigger; if (_lbuttons != null && _lbuttons.Length > 1 && _lbuttons[1].Pressed) buttons |= Buttons.LeftGrip; //// right buttons if (_rbuttons != null && _rbuttons.Length > 4 && _rbuttons[4].Pressed) buttons |= Buttons.A; if (_rbuttons != null && _rbuttons.Length > 5 && _rbuttons[5].Pressed) buttons |= Buttons.B; if (_rbuttons != null && _rbuttons.Length > 3 && _rbuttons[3].Pressed) buttons |= Buttons.RightStick; if (_rbuttons != null && _rbuttons.Length > 0 && _rbuttons[0].Pressed) buttons |= Buttons.RightTrigger; if (_rbuttons != null && _rbuttons.Length > 1 && _rbuttons[1].Pressed) buttons |= Buttons.RightGrip; float TriggerThresholdOn = 0.6f; float TriggerThresholdOff = 0.7f; float ThumbstickThresholdOn = 0.5f; float ThumbstickThresholdOff = 0.4f; //// virtual trigger buttons //buttons |= _virtualButtons; // left touches if (_lbuttons != null && _lbuttons.Length > 4 && _lbuttons[4].Touched) touches |= Buttons.X; if (_lbuttons != null && _lbuttons.Length > 5 && _lbuttons[5].Touched) touches |= Buttons.Y; if (_lbuttons != null && _lbuttons.Length > 3 && _lbuttons[3].Touched) touches |= Buttons.LeftStick; if (_lbuttons != null && _lbuttons.Length > 0 && _lbuttons[0].Touched) touches |= Buttons.LeftTrigger; if (_lbuttons != null && _lbuttons.Length > 1 && _lbuttons[1].Touched) touches |= Buttons.LeftGrip; // right touches if (_rbuttons != null && _rbuttons.Length > 4 && _rbuttons[4].Touched) touches |= Buttons.A; if (_rbuttons != null && _rbuttons.Length > 5 && _rbuttons[5].Touched) touches |= Buttons.B; if (_rbuttons != null && _rbuttons.Length > 3 && _rbuttons[3].Touched) touches |= Buttons.RightStick; if (_rbuttons != null && _rbuttons.Length > 0 && _rbuttons[0].Touched) touches |= Buttons.RightTrigger; if (_rbuttons != null && _rbuttons.Length > 1 && _rbuttons[1].Touched) touches |= Buttons.RightGrip; _gamePadState = new GamePadState( thumbSticks: thumbSticks, triggers: triggers, grips: grips, touchButtons: new GamePadTouchButtons(buttons, touches), dPad: default(GamePadDPad) ); return _gamePadState; } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; foreach (XRInputSource inputSource in _xrsession.InputSources) { XRHandedness hand = inputSource.Handedness; Gamepad gamepad = inputSource.Gamepad; if (gamepad != null) { switch (hand) { case XRHandedness.Left: { if (controllerType == TouchControllerType.LTouch || controllerType == TouchControllerType.Touch) { if (gamepad.VibrationActuator != null) result |= gamepad.VibrationActuator.Pulse(amplitude, 400); } } break; case XRHandedness.Right: { if (controllerType == TouchControllerType.RTouch || controllerType == TouchControllerType.Touch) { if (gamepad.VibrationActuator != null) result |= gamepad.VibrationActuator.Pulse(amplitude, 400); } } break; } } } return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } internal static class OvrExtensions { public static Pose3 ToPose3(this XRRigidTransform ovrPosef) { return new Pose3( (Quaternion)ovrPosef.Orientation, new Vector3(ovrPosef.Position.X, ovrPosef.Position.Y, ovrPosef.Position.Z) ); } } } ================================================ FILE: Platforms/XR/.BlazorGL/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.CardboardLegacy/CardboardHeadsetState.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.XR { internal struct CardboardHeadsetState { public CardboardEyeState LeftEye; public CardboardEyeState RightEye; } internal struct CardboardEyeState { public Matrix View; public Matrix Projection; public Viewport Viewport; } } ================================================ FILE: Platforms/XR/.CardboardLegacy/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { Game _game; IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; XRDeviceState _deviceState; bool _isTrackFloorLevelEnabled = false; GameWindow _gameWindow; public override bool IsVRSupported { get { return true; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return _deviceState; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) { if (game == null) throw new ArgumentNullException("game"); IGraphicsDeviceService graphics = game.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._game = game; this._graphics = graphics; this._deviceState = XRDeviceState.Disabled; } public ConcreteXRDevice(string applicationName, IServiceProvider services) { throw new PlatformNotSupportedException("Cardboard requires a Game reference."); } public override int BeginSessionAsync(XRSessionMode sessionMode) { if (sessionMode != XRSessionMode.VR) throw new ArgumentException("mode"); this._sessionMode = sessionMode; _gameWindow = _game.Window; _deviceState = XRDeviceState.Enabled; return 0; } CardboardHeadsetState _headsetState; public override int BeginFrame() { var window = _gameWindow as AndroidGameWindow; window.UpdateHeadsetState(out _headsetState); return 0; } public override HeadsetState GetHeadsetState() { HeadsetState headsetState = default; if (_headsetState.LeftEye.View == default(Matrix)) return default(HeadsetState); //TODO: get HeadPose from VrRendererOnDrawFrame(VRCardboard.HeadTransform headTransform, ...) headsetState.HeadPose = Pose3.Identity; Matrix LEyeTransform = Matrix.Invert(_headsetState.LeftEye.View); Matrix REyeTransform = Matrix.Invert(_headsetState.RightEye.View); Pose3 LEyePose = default; Pose3 REyePose = default; LEyeTransform.Decompose(out _, out LEyePose.Orientation, out LEyePose.Translation); REyeTransform.Decompose(out _, out REyePose.Orientation, out REyePose.Translation); headsetState.LEyePose = LEyePose; headsetState.REyePose = REyePose; return headsetState; } public override IEnumerable GetEyes() { yield return XREye.Left; yield return XREye.Right; } RenderTarget2D[] _rt = new RenderTarget2D[2]; public override RenderTarget2D GetEyeRenderTarget(XREye xreye) { int eye = (int)xreye - 1; Viewport vp = default; switch (xreye) { case XREye.Left: vp = _headsetState.LeftEye.Viewport; break; case XREye.Right: vp = _headsetState.RightEye.Viewport; break; } int w = vp.Width; int h = vp.Height; var gd = _graphics.GraphicsDevice; if (_rt[eye] != null && (_rt[eye].Width != w || _rt[eye].Height != h) ) { _rt[eye].Dispose(); _rt[eye] = null; } if (_rt[eye] == null) { _rt[eye] = new RenderTarget2D(_graphics.GraphicsDevice, w, h, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, RenderTargetUsage.PreserveContents); } return _rt[eye]; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { Matrix proj; switch (eye) { case XREye.None: throw new NotImplementedException(); case XREye.Left: proj = _headsetState.LeftEye.Projection; break; case XREye.Right: proj = _headsetState.RightEye.Projection; break; default: throw new InvalidOperationException(); } // extract FOV from the proj Matrix float tanAngleLeft = (1 + proj.M31) / proj.M11; float tanAngleRight = (1 - proj.M31) / proj.M11; float tanAngleBottom = (1 + proj.M32) / proj.M22; float tanAngleTop = (1 - proj.M32) / proj.M22; //TODO: Get FOV from VRCardboard.EyeParams and create projection with znear/zfar //proj = CreateProjection(tanAngleLeft, tanAngleRight, tanAngleBottom, tanAngleTop, znear, zfar); return proj; } public override void CommitRenderTarget(XREye xreye, RenderTarget2D rt) { int eye = (int)xreye - 1; Debug.Assert(_rt[eye] == rt); } SpriteBatch _sb; public override int EndFrame() { var gd = _graphics.GraphicsDevice; if (_sb == null) _sb = new SpriteBatch(_graphics.GraphicsDevice); Viewport vp = default; _sb.Begin(); vp = _headsetState.LeftEye.Viewport; _sb.Draw(_rt[0], new Rectangle(vp.X, vp.Y, vp.Width, vp.Height), Color.White); vp = _headsetState.RightEye.Viewport; _sb.Draw(_rt[1], new Rectangle(vp.X, vp.Y, vp.Width, vp.Height), Color.White); _sb.End(); return 0; } public override HandsState GetHandsState() { return default(HandsState); } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } static unsafe Matrix CreateProjection( float tanAngleLeft, float tanAngleRight, float tanAngleBottom, float tanAngleTop, float nearZ, float farZ) { float tanAngleWidth = tanAngleLeft + tanAngleRight; float tanAngleHeight = tanAngleBottom + tanAngleTop; Matrix result; result.M11 = (2f) / tanAngleWidth; result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f) / tanAngleHeight; result.M21 = result.M23 = result.M24 = 0; result.M31 = -(tanAngleRight - tanAngleLeft) / tanAngleWidth; result.M32 = -(tanAngleTop - tanAngleBottom) / tanAngleHeight; result.M33 = (float)((farZ) / ((double)nearZ - farZ)); result.M34 = -1; result.M43 = (float)((farZ * ((double)nearZ)) / ((double)nearZ - farZ)); result.M41 = result.M42 = result.M44 = 0; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.CardboardLegacy/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.CardboardLegacy/GoogleCardboard/Additions/AboutAdditions.txt ================================================ Additions allow you to add arbitrary C# to the generated classes before they are compiled. This can be helpful for providing convenience methods or adding pure C# classes. == Adding Methods to Generated Classes == Let's say the library being bound has a Rectangle class with a constructor that takes an x and y position, and a width and length size. It will look like this: public partial class Rectangle { public Rectangle (int x, int y, int width, int height) { // JNI bindings } } Imagine we want to add a constructor to this class that takes a Point and Size structure instead of 4 ints. We can add a new file called Rectangle.cs with a partial class containing our new method: public partial class Rectangle { public Rectangle (Point location, Size size) : this (location.X, location.Y, size.Width, size.Height) { } } At compile time, the additions class will be added to the generated class and the final assembly will a Rectangle class with both constructors. == Adding C# Classes == Another thing that can be done is adding fully C# managed classes to the generated library. In the above example, let's assume that there isn't a Point class available in Java or our library. The one we create doesn't need to interact with Java, so we'll create it like a normal class in C#. By adding a Point.cs file with this class, it will end up in the binding library: public class Point { public int X { get; set; } public int Y { get; set; } } ================================================ FILE: Platforms/XR/.CardboardLegacy/GoogleCardboard/GoogleCardboard.csproj ================================================  false net8.0-android30 21 true ================================================ FILE: Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/EnumFields.xml ================================================  ================================================ FILE: Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/EnumMethods.xml ================================================  ================================================ FILE: Platforms/XR/.CardboardLegacy/GoogleCardboard/Transforms/Metadata.xml ================================================  Com.Google.Vrtoolkit.Cardboard Com.Google.Vrtoolkit.Cardboard.Sensors ================================================ FILE: Platforms/XR/.LibOVR/ConcreteOvrSwapChainData.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.XR; using Microsoft.Xna.Platform.XR; using Microsoft.Xna.Platform.XR.LibOVR; using nkast.LibOVR; using D3D11 = SharpDX.Direct3D11; namespace Microsoft.Xna.Framework.Graphics { // Concrete SharpDX.Direct3D11 internal sealed class ConcreteOvrSwapChainData : ConcreteXRDevice.OvrSwapChainDataBase { public readonly static Guid IID_IUnknown = new Guid(0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); public readonly static Guid IID_ID3D11DeviceChild = new Guid(0x1841e5c8, 0x16b0, 0x489b, 0xbc, 0xc8, 0x44, 0xcf, 0xb0, 0xd5, 0xde, 0xae); public readonly static Guid IID_ID3D11Resource = new Guid(0xdc8e63f3, 0xd12b, 0x4952, 0xb4, 0x7b, 0x5e, 0x45, 0x02, 0x6a, 0x86, 0x2d); public readonly static Guid IID_ID3D11Texture2D = new Guid(0x6f15aaf2, 0xd208, 0x4e89, 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c); private OvrTextureSwapChain _swapChain; public D3D11.Texture2D[] _buckBuffers; private RenderTarget2D _renderTarget; internal override OvrTextureSwapChain SwapChain { get { return _swapChain; } } internal static int CreateSwapChain( GraphicsDevice graphicsDevice, OvrSession ovrSession, int w, int h, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, out ConcreteXRDevice.OvrSwapChainDataBase outSwapChainData) { int ovrResult = 0; outSwapChainData = null; ConcreteOvrSwapChainData swapChainData = new ConcreteOvrSwapChainData(); OvrTextureSwapChainDesc desc = default(OvrTextureSwapChainDesc); desc.Type = OvrTextureType.Texture2D; desc.Format = OvrTextureFormat.R8G8B8A8_UNORM_SRGB; //desc.Format = OVR_FORMAT_R8G8B8A8_UNORM; desc.ArraySize = 1; desc.Width = w; desc.Height = h; desc.MipLevels = 1; desc.SampleCount = 1; desc.SampleCount = 1; desc.StaticImage = OvrBool.False; desc.MiscFlags = OvrTextureMiscFlags.None; desc.BindFlags = OvrTextureBindFlags.DX_RenderTarget; OvrTextureSwapChain swapChain; D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device(); ovrResult = ovrSession.CreateTextureSwapChainDX(d3dDevice.NativePointer, desc, out swapChain); if (ovrResult < 0) return ovrResult; swapChainData._swapChain = swapChain; // create backBuffers int texSwapChainCount; ovrResult = swapChain.GetTextureSwapChainLength(out texSwapChainCount); swapChainData._renderTarget = new RenderTarget2D( graphicsDevice, w, h, false, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, RenderTargetUsage.DiscardContents); swapChainData._buckBuffers = new D3D11.Texture2D[texSwapChainCount]; for (int i = 0; i < texSwapChainCount; i++) { IntPtr pDxTexture3D; ovrResult = swapChain.GetTextureSwapChainBufferDX(i, IID_ID3D11Texture2D, out pDxTexture3D); swapChainData._buckBuffers[i] = new D3D11.Texture2D(pDxTexture3D); } outSwapChainData = swapChainData; return 0; } internal override RenderTarget2D GetRenderTarget(int index) { return _renderTarget; } internal override int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt) { int ovrResult; ovrResult = SwapChain.GetCurrentIndex(out int index); if (ovrResult < 0) return ovrResult; D3D11.Texture2D dstResource = _buckBuffers[index]; D3D11.Resource srcResource = (D3D11.Resource)rt.GetD3D11Resource(); D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device(); D3D11.DeviceContext d3dContext = d3dDevice.ImmediateContext; d3dContext.CopyResource(srcResource, dstResource); return 0; } } } ================================================ FILE: Platforms/XR/.LibOVR/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; using Microsoft.Xna.Platform.Input.XR; using nkast.LibOVR; namespace Microsoft.Xna.Platform.XR.LibOVR { internal class ConcreteXRDevice : XRDeviceStrategy { //Game _game; IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; XRDeviceState _deviceState; OvrClient _ovrClient; OvrSession _ovrSession; long _frameIndex = 0; private HeadsetState _headsetState; private HandsState _handsState; internal OvrSession Session { get { return _ovrSession; } } OvrPosef[] _hmdToEyePose = new OvrPosef[2]; OvrLayerEyeFov _layer; OvrStatusBits _statusFlags; OvrSwapChainDataBase[] _swapChainData = new OvrSwapChainDataBase[2]; public override bool IsVRSupported { get { return true; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return _deviceState; } } public override bool IsTrackFloorLevelEnabled { get { return _ovrSession.GetTrackingOriginType() == OvrTrackingOrigin.FloorLevel; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); //this._game = game; this._graphics = graphics; _graphics = graphics; _graphics.DeviceResetting += GraphicsDeviceResetting; _graphics.DeviceReset += GraphicsDeviceReset; _graphics.DeviceDisposing += GraphicsDeviceDisposing; this._deviceState = XRDeviceState.Disabled; } public override int BeginSessionAsync(XRSessionMode sessionMode) { if (sessionMode != XRSessionMode.VR) throw new ArgumentException("mode"); this._sessionMode = sessionMode; GraphicsDevice graphicsDevice = _graphics.GraphicsDevice; if (graphicsDevice == null) { throw new ArgumentNullException("graphics.GraphicsDevice"); //_graphics.DeviceCreated += GraphicsDeviceCreated; } else { return Initialize(graphicsDevice); } } public unsafe override int BeginFrame() { //_frameIndex++; // next frame bool notVisible; int ovrResult = 0; try { ovrResult = _ovrSession.WaitToBeginFrame(_frameIndex); notVisible = (ovrResult == 1000); ovrResult = _ovrSession.BeginFrame(_frameIndex); } catch (OvrException ovre) { switch (ovre.OvrResult) { case -6000: OnDisplayLost(); return ovre.OvrResult; case -1015: // InvalidOperation throw; default: throw; } } double time = _ovrSession.GetPredictedDisplayTime(_frameIndex); OvrTrackingState trackingState = _ovrSession.GetTrackingState(time, OvrBool.True); OvrPosef* eyePoses = stackalloc OvrPosef[2]; double sensorSampleTime; fixed (OvrPosef* phmdToEyePose = _hmdToEyePose) { _ovrSession.ovr_GetEyePoses(_frameIndex, OvrBool.True, phmdToEyePose, eyePoses, out sensorSampleTime); } //layer.SensorSampleTime = sensorSampleTime; _layer.RenderPose[0] = eyePoses[0]; _layer.RenderPose[1] = eyePoses[1]; _statusFlags = trackingState.StatusFlags; _headsetState.HeadPose = trackingState.HeadPose.ThePose.ToPose3(); _headsetState.LEyePose = eyePoses[0].ToPose3(); _headsetState.REyePose = eyePoses[1].ToPose3(); _handsState.LHandPose = trackingState.HandPoses[0].ThePose.ToPose3(); _handsState.RHandPose = trackingState.HandPoses[1].ThePose.ToPose3(); return ovrResult; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.Left; yield return XREye.Right; yield return XREye.None; // the default backbuffer on the Desktop app. } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { if (eye == XREye.None) { return null; } int eyeIndex = (int)eye - 1; int ovrResult = _swapChainData[eyeIndex].SwapChain.GetCurrentIndex(out int index); return _swapChainData[eyeIndex].GetRenderTarget(index); } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { if (eye == XREye.None) { Viewport vp = _graphics.GraphicsDevice.Viewport; return Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(60), vp.AspectRatio, znear, zfar); } int eyeIndex = (int)eye - 1; OvrFovPort fov = _layer.Fov[eyeIndex]; Matrix proj; //OvrMatrix4f orvProj = OvrMatrix4f.CreateProjection(fov, znear, zfar, OvrProjectionModifier.None); //Matrix proj1 = orvProj.ToTransposedMatrix(); //Matrix proj2 = Matrix.CreatePerspectiveOffCenter(-fov.LeftTan * znear, fov.RightTan * znear, -fov.DownTan * znear, fov.UpTan * znear, znear, zfar); CreatePerspectiveFieldOfView(fov.LeftTan, fov.RightTan, fov.DownTan, fov.UpTan, znear, zfar, out proj); return proj; } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { if (eye == XREye.None) { if (rt != null) throw new InvalidOperationException(); return; } int ovrResult = 0; int eyeIndex = (int)eye - 1; // SubmitRenderTarget ovrResult = _swapChainData[eyeIndex].SubmitRenderTarget(_graphics.GraphicsDevice, rt); // commit ovrResult = _swapChainData[eyeIndex].SwapChain.Commit(); return; } public unsafe override int EndFrame() { int ovrResult = 0; OvrLayerHeader** layerPtrList = stackalloc OvrLayerHeader*[1]; fixed (OvrLayerHeader* pLayerHeader = &_layer.Header) { layerPtrList[0] = pLayerHeader; try { ovrResult = _ovrSession.EndFrame(_frameIndex, IntPtr.Zero, layerPtrList, 1); } catch (OvrException ovre) { switch (ovre.OvrResult) { case -6000: OnDisplayLost(); return ovre.OvrResult; default: throw; } } return ovrResult; } } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { throw new NotImplementedException(); } public override void TrackFloorLevelAsync(bool enable) { _ovrSession.SetTrackingOriginType(enable ? OvrTrackingOrigin.FloorLevel : OvrTrackingOrigin.EyeLevel); } private void GraphicsDeviceCreated(object sender, EventArgs e) { } private void GraphicsDeviceResetting(object sender, EventArgs e) { } private void GraphicsDeviceReset(object sender, EventArgs e) { } private void GraphicsDeviceDisposing(object sender, EventArgs e) { this.Dispose(); } private int Initialize(GraphicsDevice graphicsDevice) { // check supported feature level switch (graphicsDevice.Adapter.Backend) { case GraphicsBackend.DirectX11: if (graphicsDevice.GraphicsProfile < GraphicsProfile.FL11_0) throw new InvalidOperationException("GraphicsProfile must be FL11_0 or higher."); break; } int ovrResult = 0; OvrDetectResult detectResults = OvrClient.Detect(0); if (detectResults.IsServiceRunning != OvrBool.True || detectResults.IsHMDConnected != OvrBool.True) return -1; if (_ovrClient == null) { ovrResult = OvrClient.TryInitialize(out _ovrClient); if ((ovrResult) < 0) return ovrResult; } ovrResult = _ovrClient.TryCreateSession(out _ovrSession); if ((ovrResult) < 0) return ovrResult; CreateDefaultLayer(graphicsDevice, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, 1, out _layer); TouchController.DeviceHandle = new Input.XR.LibOVR.ConcreteTouchControllerStrategy(this); this._deviceState = XRDeviceState.Enabled; return 0; } private int CreateDefaultLayer(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, int pixelsPerDisplayPixel, out OvrLayerEyeFov layer) { int ovrResult = 0; OvrHmdDesc HmdDesc = _ovrSession.GetHmdDesc(); // create layer layer = default(OvrLayerEyeFov); layer.Header.Type = OvrLayerType.EyeFov; layer.Header.Flags = 0; for (int eye = 0; eye < 2; eye++) { OvrFovPort fov = HmdDesc.DefaultEyeFov[eye]; OvrSizei texRes = _ovrSession.GetFovTextureSize((OvrEyeType)eye, fov, pixelsPerDisplayPixel); layer.Viewport[eye] = new OvrRecti(0, 0, texRes.W, texRes.H); ovrResult = ConcreteOvrSwapChainData.CreateSwapChain( graphicsDevice, _ovrSession, texRes.W, texRes.H, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, out _swapChainData[eye]); layer.ColorTexture[eye] = _swapChainData[eye].SwapChain.NativePtr; OvrEyeRenderDesc renderDesc = _ovrSession.GetRenderDesc((OvrEyeType)eye, fov); layer.Fov[eye] = renderDesc.Fov; _hmdToEyePose[eye] = renderDesc.HmdToEyePose; } return 0; } private unsafe void OnDisplayLost() { OvrGraphicsLuid prevGraphicsLuid = _ovrSession.GraphicsLuid; // destroy session _ovrSession.Dispose(); _ovrSession = null; _ovrClient.Dispose(); _ovrClient = null; _deviceState = XRDeviceState.Disabled; } private static void CreatePerspectiveFieldOfView(float leftTan, float rightTan, float bottomTan, float topTan, float nearPlaneDistance, float farPlaneDistance, out Matrix result) { if (nearPlaneDistance <= 0f) { throw new ArgumentException("nearPlaneDistance <= 0"); } if (farPlaneDistance <= 0f) { throw new ArgumentException("farPlaneDistance <= 0"); } if (nearPlaneDistance >= farPlaneDistance) { throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); } result.M11 = (2f) / (leftTan + rightTan); result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f) / (topTan + bottomTan); result.M21 = result.M23 = result.M24 = 0; result.M31 = (rightTan - leftTan) / (leftTan + rightTan); result.M32 = (topTan - bottomTan) / (bottomTan + topTan); result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); result.M34 = -1; result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance); result.M41 = result.M42 = result.M44 = 0; } protected override void Dispose(bool disposing) { if (disposing) { if (_ovrSession != null) _ovrSession.Dispose(); if (_ovrClient != null) _ovrClient.Dispose(); } _ovrSession = null; _ovrClient = null; } internal abstract class OvrSwapChainDataBase { internal abstract OvrTextureSwapChain SwapChain { get; } internal abstract RenderTarget2D GetRenderTarget(int index); internal abstract int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt); } } internal static class OvrExtensions { public static Matrix ToMatrix(this OvrMatrix4f ovrMatrix4f) { return new Matrix( ovrMatrix4f.M11, ovrMatrix4f.M12, ovrMatrix4f.M13, ovrMatrix4f.M14, ovrMatrix4f.M21, ovrMatrix4f.M22, ovrMatrix4f.M23, ovrMatrix4f.M24, ovrMatrix4f.M31, ovrMatrix4f.M32, ovrMatrix4f.M33, ovrMatrix4f.M34, ovrMatrix4f.M41, ovrMatrix4f.M42, ovrMatrix4f.M43, ovrMatrix4f.M44 ); } public static Matrix ToTransposedMatrix(this OvrMatrix4f ovrMatrix4f) { return new Matrix( ovrMatrix4f.M11, ovrMatrix4f.M21, ovrMatrix4f.M31, ovrMatrix4f.M41, ovrMatrix4f.M12, ovrMatrix4f.M22, ovrMatrix4f.M32, ovrMatrix4f.M42, ovrMatrix4f.M13, ovrMatrix4f.M23, ovrMatrix4f.M33, ovrMatrix4f.M43, ovrMatrix4f.M14, ovrMatrix4f.M24, ovrMatrix4f.M34, ovrMatrix4f.M44 ); } public static Quaternion ToQuaternion(this OvrQuatf ovrQuatf) { return new Quaternion(ovrQuatf.X, ovrQuatf.Y, ovrQuatf.Z, ovrQuatf.W); } public static Vector3 ToVector3(this OvrVector3f ovrVector3f) { return new Vector3(ovrVector3f.X, ovrVector3f.Y, ovrVector3f.Z); } public static Pose3 ToPose3(this OvrPosef ovrPosef) { return new Pose3( ovrPosef.Orientation.ToQuaternion(), ovrPosef.Position.ToVector3() ); } } } ================================================ FILE: Platforms/XR/.LibOVR/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR.LibOVR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.Oculus/ConcreteOxrSwapChainData.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.XR; using Microsoft.Xna.Platform.XR; using Silk.NET.OpenXR; namespace Microsoft.Xna.Platform.Graphics { // Concrete SharpDX.Direct3D11 internal sealed class ConcreteOxrSwapChainData : ConcreteXRDevice.OxrSwapChainDataBase { //private OvrTextureSwapChain _swapChain; //public D3D11.Texture2D[] _buckBuffers; private RenderTarget2D _renderTarget; //internal override OvrTextureSwapChain SwapChain { get { return _swapChain; } } internal override RenderTarget2D GetRenderTarget(int eye) { return _renderTarget; } //internal static int CreateSwapChain( // GraphicsDevice graphicsDevice, OvrSession ovrSession, // int w, int h, // SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, // out OvrDevice.OvrSwapChainDataBase outSwapChainData) //{ // int ovrResult = 0; // outSwapChainData = null; // ConcreteOvrSwapChainData swapChainData = new ConcreteOvrSwapChainData(); // OvrTextureSwapChainDesc desc = default(OvrTextureSwapChainDesc); // desc.Type = OvrTextureType.Texture2D; // desc.Format = OvrTextureFormat.R8G8B8A8_UNORM_SRGB; // //desc.Format = OVR_FORMAT_R8G8B8A8_UNORM; // desc.ArraySize = 1; // desc.Width = w; // desc.Height = h; // desc.MipLevels = 1; // desc.SampleCount = 1; // desc.SampleCount = 1; // desc.StaticImage = OvrBool.False; // desc.MiscFlags = OvrTextureMiscFlags.None; // desc.BindFlags = OvrTextureBindFlags.DX_RenderTarget; // OvrTextureSwapChain swapChain; // D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device(); // ovrResult = ovrSession.CreateTextureSwapChainDX(d3dDevice.NativePointer, desc, out swapChain); // if (ovrResult < 0) // return ovrResult; // swapChainData._swapChain = swapChain; // // create backBuffers // int texSwapChainCount; // ovrResult = swapChain.GetTextureSwapChainLength(out texSwapChainCount); // swapChainData._renderTarget = new RenderTarget2D( // graphicsDevice, w, h, false, // preferredFormat, preferredDepthFormat, preferredMultiSampleCount, // RenderTargetUsage.DiscardContents); // swapChainData._buckBuffers = new D3D11.Texture2D[texSwapChainCount]; // for (int i = 0; i < texSwapChainCount; i++) // { // IntPtr pDxTexture3D; // ovrResult = swapChain.GetTextureSwapChainBufferDX(i, IID_ID3D11Texture2D, out pDxTexture3D); // swapChainData._buckBuffers[i] = new D3D11.Texture2D(pDxTexture3D); // } // outSwapChainData = swapChainData; // return 0; //} internal override int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt) { int ovrResult; int index = 0; //ovrResult = SwapChain.GetCurrentIndex(out index); //if (ovrResult < 0) // return ovrResult; //D3D11.Texture2D dstResource = _buckBuffers[index]; //D3D11.Resource srcResource = (D3D11.Resource)rt.GetD3D11Resource(); // //D3D11.Device d3dDevice = (D3D11.Device)graphicsDevice.GetD3D11Device(); //D3D11.DeviceContext d3dContext = d3dDevice.ImmediateContext; // //d3dContext.CopyResource(srcResource, dstResource); return 0; } } } ================================================ FILE: Platforms/XR/.Oculus/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Framework.XR; using nkast.LibOXR; using Silk.NET.Core; using Silk.NET.OpenXR; using SilkXR = Silk.NET.OpenXR.XR; using XrAction = Silk.NET.OpenXR.Action; //using OpenGL = Microsoft.Xna.Platform.Graphics.OpenGL; namespace Microsoft.Xna.Platform.XR { public interface IOculusDeviceStrategy { SessionState SessionState { get; } } internal class ConcreteXRDevice : XRDeviceStrategy , IOculusDeviceStrategy { const string _engineName = "KNI Engine"; private string _applicationName; private IServiceProvider _services; private IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; XRDeviceState _deviceState; bool _isTrackFloorLevelEnabled = false; OxrAPI _xrAPI; IList _extensions; OxrInstance _oxrInstance; OxrSession _oxrSession; int _CpuLevel; int _GpuLevel; float[] _SupportedDisplayRefreshRates; uint _RequestedDisplayRefreshRateIndex; uint _NumSupportedDisplayRefreshRates; xrGetDisplayRefreshRateFB _pfnxrGetDisplayRefreshRateFB; xrRequestDisplayRefreshRateFB _pfnxrRequestDisplayRefreshRateFB; OxrSpace _HeadSpace; OxrSpace _LocalSpace; OxrSpace _LocalFloorSpace; OxrSpace _FakeStageSpace; OxrSpace _StageSpace; bool _isLocalFloorSupported; bool _isStageSupported; OxrSpace _CurrentStageSpace; OxrPassthroughFB _passthroughFB; OxrPassthroughLayerFB _passthroughLayerFB; bool _useSimpleProfile; OxrActionSet _runningActionSet; public XrAction _actionButtonA; public XrAction _actionButtonB; public XrAction _actionButtonRightThumbstick; public XrAction _actionButtonX; public XrAction _actionButtonY; public XrAction _actionButtonLeftThumbstick; public XrAction _actionButtonAtouch; public XrAction _actionButtonBtouch; public XrAction _actionButtonRightThumbsticktouch; public XrAction _actionButtonXtouch; public XrAction _actionButtonYtouch; public XrAction _actionButtonLeftThumbsticktouch; public XrAction _moveOnXActionL; public XrAction _moveOnXActionR; public XrAction _moveOnYActionL; public XrAction _moveOnYActionR; public XrAction _moveOnJoystickActionL; public XrAction _moveOnJoystickActionR; public XrAction _actionTriggerLeftTouch; public XrAction _actionTriggerRightTouch; // BUG: Grip touch doesn't work on native OpenXR. // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021 //public XrAction _actionGripLeftTouch; //public XrAction _actionGripRightTouch; public XrAction _vibrateLeftFeedback; public XrAction _vibrateRightFeedback; XrAction _aimPoseAction; XrAction _gripPoseAction; ActionPath _leftHandPath; ActionPath _rightHandPath; OxrSpace _leftControllerAimSpace; OxrSpace _rightControllerAimSpace; OxrSpace _leftControllerGripSpace; OxrSpace _rightControllerGripSpace; const int FRAMEBUFFER_SRGB = 0x8DB9; const long SRGB8_ALPHA8 = (long)Graphics.OpenGL.PixelInternalFormat.Srgba; long _frameIndex = 0; private HeadsetState _headsetState; private HandsState _handsState; OxrSwapChainDataBase[] _swapChainData = new OxrSwapChainDataBase[2]; Posef _xfLocalFromHead; Posef _xfLocalFloorFromHead; Posef _xfStageFromHead; Posef _xfStageFromLocal; View[] _projections = new View[ovrMaxNumEyes]; Pose3[] _viewTransform = new Pose3[ovrMaxNumEyes]; FrameState _frameState; ovrRenderer _Renderer = new ovrRenderer(); ovrCompositorLayer_Union[] _Layers = new ovrCompositorLayer_Union[ovrMaxLayerCount]; internal OxrSession Session { get { return _oxrSession; } } public OxrInstance Instance { get { return _oxrInstance; } } //OvrPosef[] _hmdToEyePose = new OvrPosef[2]; //OvrLayerEyeFov _layer; //OvrStatusBits _statusFlags; public override bool IsVRSupported { get { return true; } } public override bool IsARSupported { get { if (_extensions.Contains(nameof(OxrExtensions.XR_FB_passthrough))) return true; return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return _deviceState; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public unsafe ConcreteXRDevice(string applicationName, IServiceProvider services) { this._applicationName = applicationName; this._services = services; _graphics = _services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (_graphics == null) throw new ArgumentNullException("IGraphicsDeviceService not found in services."); _graphics.DeviceResetting += GraphicsDeviceResetting; _graphics.DeviceReset += GraphicsDeviceReset; _graphics.DeviceDisposing += GraphicsDeviceDisposing; Android.App.Activity activity = _services.GetService(typeof(Android.App.Activity)) as Android.App.Activity; if (activity == null) throw new InvalidOperationException("Activity not found in services."); LoaderInitInfoAndroidKHR loaderInitInfo = new LoaderInitInfoAndroidKHR( applicationVM: (void*)Java.Interop.JniRuntime.CurrentRuntime.InvocationPointer, applicationContext: (void*)Android.Runtime.JNIEnv.ToJniHandle(activity) ); Result xrResult; xrResult = OxrAPI.InitializeLoader((LoaderInitInfoBaseHeaderKHR*)(&loaderInitInfo), out _xrAPI); if (xrResult != Result.Success) { Console.WriteLine($"Failed to initialize OpenXR Loader: {xrResult}"); this._deviceState = XRDeviceState.NoPermissions; } else Console.WriteLine("OpenXR Loader initialized successfully."); // Log available layers. { IList layers = _xrAPI.GetLayers(); foreach (string layerName in layers) { Console.WriteLine("Found layer {0}", layerName); } } // Log available extensions. _extensions = _xrAPI.GetExtensions(); for (int i = 0; i < _extensions.Count; i++) { string extensionName = _extensions[i]; Console.WriteLine("Extension {0} = {1}", i, extensionName); } this._deviceState = XRDeviceState.Disabled; } public override int BeginSessionAsync(XRSessionMode sessionMode) { if (sessionMode == XRSessionMode.AR) { if (!this.IsARSupported) throw new ArgumentException("mode"); } _sessionMode = sessionMode; GraphicsDevice graphicsDevice = _graphics.GraphicsDevice; if (graphicsDevice == null) { throw new ArgumentNullException("graphics.GraphicsDevice"); //_graphics.DeviceCreated += GraphicsDeviceCreated; } int result = Initialize(graphicsDevice); if (result == 0) { ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += ovrApp_HandleXrEvents; } return result; } bool stageBoundsDirty = true; public unsafe override int BeginFrame() { ovrApp_HandleXrEvents(); bool notVisible; if (_SessionActive == false) { //return -1; } Result xrResult; if (_leftControllerAimSpace == null) { _leftControllerAimSpace = _oxrSession.CreateActionSpace(_aimPoseAction, _leftHandPath); } if (_rightControllerAimSpace == null) { _rightControllerAimSpace = _oxrSession.CreateActionSpace(_aimPoseAction, _rightHandPath); } if (_leftControllerGripSpace == null) { _leftControllerGripSpace = _oxrSession.CreateActionSpace(_gripPoseAction, _leftHandPath); } if (_rightControllerGripSpace == null) { _rightControllerGripSpace = _oxrSession.CreateActionSpace(_gripPoseAction, _rightHandPath); } // Create the scene if not yet created. // The scene is created here to be able to show a loading icon. if (!ovrScene_IsCreated(ref _Scene)) { ovrScene_Create(ref _Scene); } if (stageBoundsDirty) { UpdateStageBounds(); stageBoundsDirty = false; } // NOTE: OpenXR does not use the concept of frame indices. Instead, // XrWaitFrame returns the predicted display time. //return 0; xrResult = _oxrSession.WaitFrame(out FrameWaitInfo waitFrameInfo, out _frameState); Debug.Assert(xrResult == Result.Success, "WaitFrame"); // Get the HMD pose, predicted for the middle of the time period during which // the new eye images will be displayed. The number of frames predicted ahead // depends on the pipeline depth of the engine and the synthesis rate. // The better the prediction, the less black will be pulled in at the edges. xrResult = _oxrSession.BeginFrame(out FrameBeginInfo beginFrameDesc); Debug.Assert(xrResult == Result.Success, "WaitFrame"); long time = _frameState.PredictedDisplayTime; //double time = _ovrSession.GetPredictedDisplayTime(_frameIndex); xrResult = _oxrInstance.LocateSpace( _HeadSpace, _LocalSpace, _frameState.PredictedDisplayTime, out _xfLocalFromHead, out SpaceLocationFlags localLocationFlags); Debug.Assert(xrResult == Result.Success, "LocateSpace"); if (_LocalFloorSpace != null) { xrResult = _oxrInstance.LocateSpace( _HeadSpace, _LocalFloorSpace, _frameState.PredictedDisplayTime, out _xfLocalFloorFromHead, out SpaceLocationFlags localFloorLocationFlags); Debug.Assert(xrResult == Result.Success, "LocateSpace"); } xrResult = _oxrInstance.LocateSpace( _HeadSpace, _CurrentStageSpace, _frameState.PredictedDisplayTime, out _xfStageFromHead, out SpaceLocationFlags stageLocationFlags); Debug.Assert(xrResult == Result.Success, "LocateSpace"); xrResult = _oxrInstance.LocateSpace( _LocalSpace, _CurrentStageSpace, _frameState.PredictedDisplayTime, out _xfStageFromLocal, out SpaceLocationFlags stage2LocationFlags); Debug.Assert(xrResult == Result.Success, "LocateSpace"); uint projectionCapacityInput = ovrMaxNumEyes; uint projectionCountOutput = projectionCapacityInput; xrResult = _oxrSession.LocateView( _viewportConfig.ViewConfigurationType, _frameState.PredictedDisplayTime, _HeadSpace, out ViewState viewState, projectionCapacityInput, out projectionCountOutput, _projections); Debug.Assert(xrResult == Result.Success, "xrLocateView"); Pose3 HeadPose = (_isTrackFloorLevelEnabled) ? _xfLocalFloorFromHead.ToPose3() : _xfLocalFromHead.ToPose3(); _headsetState.HeadPose = HeadPose; for (int eye = 0; eye < ovrMaxNumEyes; eye++) { Pose3 xfHeadFromEye = _projections[eye].Pose.ToPose3(); Pose3 xfStageFromEye = xfHeadFromEye * HeadPose; _viewTransform[eye] = xfStageFromEye; switch (eye) { case 0: _headsetState.LEyePose = _viewTransform[eye]; break; case 1: _headsetState.REyePose = _viewTransform[eye]; break; } } // update input information XrAction[] controller = new XrAction[] {_aimPoseAction, _gripPoseAction, _aimPoseAction, _gripPoseAction}; ActionPath[] subactionPath = new ActionPath[] { _leftHandPath, _leftHandPath, _rightHandPath, _rightHandPath }; OxrSpace[] controllerSpace = new OxrSpace[] { _leftControllerAimSpace, _leftControllerGripSpace, _rightControllerAimSpace, _rightControllerGripSpace, }; for (int i = 0; i < 4; i++) { // ActionPoseIsActive xrResult = _oxrSession.GetActionStatePose(controller[i], subactionPath[i], out ActionStatePose state); Debug.Assert(xrResult == Result.Success, "GetActionStatePose"); if (state.IsActive != 0) { //Console.WriteLine("Controller {0} is active." + i); LocVel lv = GetSpaceLocVel(controllerSpace[i], _frameState.PredictedDisplayTime); _Scene.TrackedController[i].Active = (lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0; _Scene.TrackedController[i].Pose = lv.Pose; _Scene.TrackedController[i].LinearVelocity = lv.LinearVelocity; if (i == 0) { if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0) { _handsState.LHandPose = _Scene.TrackedController[i].Pose; _handsState.LHandLinearVelocity = _Scene.TrackedController[i].LinearVelocity; } else { _handsState.LHandPose = Pose3.Identity; _handsState.LHandLinearVelocity = Vector3.Zero; } } if (i == 1) { if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0) { _handsState.LGripPose = _Scene.TrackedController[i].Pose; } else { _handsState.LGripPose = Pose3.Identity; } } if (i == 2) { if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0) { _handsState.RHandPose = _Scene.TrackedController[i].Pose; _handsState.RHandLinearVelocity = _Scene.TrackedController[i].LinearVelocity; } else { _handsState.RHandPose = Pose3.Identity; _handsState.RHandLinearVelocity = Vector3.Zero; } } if (i == 3) { if ((lv.LocationFlags & SpaceLocationFlags.PositionValidBit) != 0) { _handsState.RGripPose = _Scene.TrackedController[i].Pose; } else { _handsState.RGripPose = Pose3.Identity; } } float dt = 0.01f; // use 0.2f for testing velocity vectors { _Scene.TrackedController[i].Pose.Translation += lv.LinearVelocity * dt; } } else { //Console.WriteLine("Controller {0} is inactive."+i); _Scene.TrackedController[i].Clear(); } } // OpenXR input { // sync action data xrResult = _oxrSession.SyncActions(_runningActionSet, 0); if (xrResult != Result.SessionNotFocused) Debug.Assert(xrResult == Result.Success, "SyncActions"); // query input action states ActionStateGetInfo getInfo = new ActionStateGetInfo(StructureType.ActionStateGetInfo); getInfo.SubactionPath = 0; ActionStateBoolean thumbstickLClickState = _oxrSession.GetActionStateBoolean(_actionButtonLeftThumbstick); ActionStateBoolean thumbstickRClickState = _oxrSession.GetActionStateBoolean(_actionButtonRightThumbstick); // Update app logic based on input if ((thumbstickLClickState.ChangedSinceLastSync != 0 && thumbstickLClickState.CurrentState != 0) || (thumbstickRClickState.ChangedSinceLastSync != 0 && thumbstickRClickState.CurrentState != 0) ) { float currentRefreshRate = 0.0f; xrResult = _pfnxrGetDisplayRefreshRateFB(_oxrSession.Session, ¤tRefreshRate); Debug.Assert(xrResult == Result.Success, "_pfnxrGetDisplayRefreshRateFB"); Console.WriteLine("Current Display Refresh Rate: {0}", currentRefreshRate); int requestedRateIndex = (int) (_RequestedDisplayRefreshRateIndex++ % _NumSupportedDisplayRefreshRates); float requestRefreshRate = _SupportedDisplayRefreshRates[requestedRateIndex]; Console.WriteLine("Requesting Display Refresh Rate: {0}", requestRefreshRate); xrResult = _pfnxrRequestDisplayRefreshRateFB(_oxrSession.Session, requestRefreshRate); Debug.Assert(xrResult == Result.Success, "_pfnxrRequestDisplayRefreshRateFB"); } // The KHR simple profile doesn't have these actions, so the getters will fail // and flood the log with errors. if (_useSimpleProfile == false) { ActionStateFloat moveXStateL = _oxrSession.GetActionStateFloat(_moveOnXActionL); ActionStateFloat moveXStateR = _oxrSession.GetActionStateFloat(_moveOnXActionR); ActionStateFloat moveYStateL = _oxrSession.GetActionStateFloat(_moveOnYActionL); ActionStateFloat moveYStateR = _oxrSession.GetActionStateFloat(_moveOnYActionR); if (moveXStateL.ChangedSinceLastSync != 0) { //appQuadPositionX = moveYStateL.CurrentState; Console.WriteLine("L Grip " + moveXStateL.CurrentState); } if (moveYStateR.ChangedSinceLastSync != 0) { //appQuadPositionX = moveXStateR.CurrentState; Console.WriteLine("R Grip " + moveXStateR.CurrentState); } if (moveYStateL.ChangedSinceLastSync != 0) { //appQuadPositionY = moveYStateL.CurrentState; Console.WriteLine("L Trigger " + moveYStateL.CurrentState); } if (moveYStateR.ChangedSinceLastSync != 0) { //appQuadPositionY = moveYStateR.CurrentState; Console.WriteLine("R Trigger " + moveYStateR.CurrentState); } ActionStateVector2f moveJoystickStateL = _oxrSession.GetActionStateVector2(_moveOnJoystickActionL); if (moveJoystickStateL.ChangedSinceLastSync!=0) { //appCylPositionX = moveJoystickStateL.currentState.x; //appCylPositionY = moveJoystickStateL.currentState.y; //Console.WriteLine("L ThumpStick " + moveJoystickStateL.CurrentState.X + " , " + moveJoystickStateL.CurrentState.Y); } ActionStateVector2f moveJoystickStateR = _oxrSession.GetActionStateVector2(_moveOnJoystickActionR); if (moveJoystickStateR.ChangedSinceLastSync != 0) { //appCylPositionX = moveJoystickStateR.currentState.x; //appCylPositionY = moveJoystickStateR.currentState.y; //Console.WriteLine("R ThumpStick "+ moveJoystickStateR.CurrentState.X +" , "+ moveJoystickStateR.CurrentState.Y); } } } return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.Left; yield return XREye.Right; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { int eyeIndex = (int)eye - 1; RenderTarget2D rt = _Renderer.FrameBuffer[eyeIndex].RenderTarget; return rt; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { int eyeIndex = (int)eye - 1; GraphicsBackend graphicsBackend = _graphics.GraphicsDevice.Adapter.Backend; Fovf fov = _projections[eyeIndex].Fov; float tanLeft = (float)Math.Tan(fov.AngleLeft); float tanRight = (float)Math.Tan(fov.AngleRight); float tanDown = (float)Math.Tan(fov.AngleDown); float tanUp = (float)Math.Tan(fov.AngleUp); Matrix proj = XrMatrixf_CreateProjection(graphicsBackend, tanLeft, tanRight, tanUp, tanDown, znear, zfar); return proj; } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { int eyeIndex = (int)eye - 1; GraphicsDevice device = this._graphics.GraphicsDevice; device.SetRenderTarget(null); ovrRenderer_RenderFrame_Acquire(ref _Renderer.FrameBuffer[eyeIndex]); uint textureIndex = _Renderer.FrameBuffer[eyeIndex].TextureSwapChainIndex; uint txSC = _Renderer.FrameBuffer[eyeIndex].ColorSwapChainImage[textureIndex].Image; //ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete(); //var GL = adapter.Ogl; // bind DrawFramebuffer Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, _Renderer.FrameBuffer[eyeIndex].FrameBuffers[textureIndex]); //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, _Renderer.FrameBuffer[eyeIndex].FrameBuffers[textureIndex]); //GL.CheckGLError(); // fix oversaturation Android.Opengl.GLES30.GlDisable(FRAMEBUFFER_SRGB); // copy rendertarget to texture { int[] sourceFramebuffer = new int[1]; Android.Opengl.GLES30.GlGenFramebuffers(sourceFramebuffer.Length, sourceFramebuffer, 0); //int sourceFramebuffer = GL.GenFramebuffer(); //GL.CheckGLError(); Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlReadFramebuffer, sourceFramebuffer[0]); //GL.BindFramebuffer(OpenGL.FramebufferTarget.ReadFramebuffer, sourceFramebuffer); //GL.CheckGLError(); Android.Opengl.GLES30.GlFramebufferTexture2D( Android.Opengl.GLES30.GlReadFramebuffer, Android.Opengl.GLES30.GlColorAttachment0, Android.Opengl.GLES30.GlTexture2d, (int)rt.GetSharedHandle(), 0); //GL.FramebufferTexture2D( // OpenGL.FramebufferTarget.ReadFramebuffer, // OpenGL.FramebufferAttachment.ColorAttachment0, // OpenGL.TextureTarget.Texture2D, (int)rt.GetSharedHandle(), 0 //); //GL.CheckGLError(); // copy and y-flip Android.Opengl.GLES30.GlBlitFramebuffer(0, 0, rt.Width, rt.Height, 0, _Renderer.FrameBuffer[eyeIndex].Height - 1, _Renderer.FrameBuffer[eyeIndex].Width, 0, Android.Opengl.GLES30.GlColorBufferBit, Android.Opengl.GLES30.GlNearest); //GL.BlitFramebuffer(0, 0, rt.Width, rt.Height, // 0, _Renderer.FrameBuffer[eyeIndex].Height - 1, _Renderer.FrameBuffer[eyeIndex].Width, 0, // OpenGL.ClearBufferMask.ColorBufferBit, OpenGL.BlitFramebufferFilter.Nearest); //GL.CheckGLError(); Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlReadFramebuffer, sourceFramebuffer[0]); //GL.BindFramebuffer(OpenGL.FramebufferTarget.ReadFramebuffer, 0); //GL.CheckGLError(); Android.Opengl.GLES30.GlDeleteFramebuffers(sourceFramebuffer.Length, sourceFramebuffer, 0); //GL.DeleteFramebuffer(sourceFramebuffer); //GL.CheckGLError(); } ovrRenderer_RenderFrame_Release(ref _Renderer, eyeIndex); // unbind DrawFramebuffer Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, 0); //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, 0); //GL.CheckGLError(); } public unsafe override int EndFrame() { Result xrResult; OxrSpace currentSpace = (_isTrackFloorLevelEnabled) ? _LocalFloorSpace : _LocalSpace; // Set-up the compositor layers for this frame. // NOTE: Multiple independent layers are allowed, but they need to be added // in a depth consistent order. uint LayerCount = 0; _Layers = new ovrCompositorLayer_Union[ovrMaxLayerCount]; if (this.SessionMode == XRSessionMode.AR) { CompositionLayerPassthroughFB passthroughLayer = default; passthroughLayer.Type = StructureType.CompositionLayerPassthroughFB; passthroughLayer.LayerHandle = _passthroughLayerFB.PassthroughLayerFB; passthroughLayer.Space = default; passthroughLayer.Flags = CompositionLayerFlags.BlendTextureSourceAlphaBit; _Layers[LayerCount++].PassthroughFB = passthroughLayer; } CompositionLayerProjectionView[] projection_layer_elements = new CompositionLayerProjectionView[] { new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView), new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView), }; { fixed (CompositionLayerProjectionView* pprojection_layer_elements = projection_layer_elements) { CompositionLayerProjection projection_layer = new CompositionLayerProjection(StructureType.CompositionLayerProjection); projection_layer.LayerFlags = CompositionLayerFlags.BlendTextureSourceAlphaBit; projection_layer.LayerFlags |= CompositionLayerFlags.CorrectChromaticAberrationBit; projection_layer.Space = currentSpace.Space; projection_layer.ViewCount = ovrMaxNumEyes; projection_layer.Views = pprojection_layer_elements; for (int eye = 0; eye < ovrMaxNumEyes; eye++) { projection_layer_elements[eye] = new CompositionLayerProjectionView(StructureType.CompositionLayerProjectionView); projection_layer_elements[eye].Pose = _viewTransform[eye].ToPosef(); projection_layer_elements[eye].Fov = _projections[eye].Fov; projection_layer_elements[eye].SubImage = new SwapchainSubImage(); projection_layer_elements[eye].SubImage.Swapchain = _Renderer.FrameBuffer[eye].ColorSwapChain.Swapchain; projection_layer_elements[eye].SubImage.ImageRect.Offset.X = 0; projection_layer_elements[eye].SubImage.ImageRect.Offset.Y = 0; projection_layer_elements[eye].SubImage.ImageRect.Extent.Width = (int)_Renderer.FrameBuffer[eye].ColorSwapChain.Width; projection_layer_elements[eye].SubImage.ImageRect.Extent.Height = (int)_Renderer.FrameBuffer[eye].ColorSwapChain.Height; projection_layer_elements[eye].SubImage.ImageArrayIndex = 0; } _Layers[LayerCount++].Projection = projection_layer; } } // Build the cylinder layer if (false) { float appCylPositionX = 0.0f; float appCylPositionY = 0.0f; CompositionLayerCylinderKHR cylinder_layer = new CompositionLayerCylinderKHR(StructureType.CompositionLayerCylinderKhr); cylinder_layer.LayerFlags = CompositionLayerFlags.BlendTextureSourceAlphaBit; cylinder_layer.Space = _LocalSpace.Space; cylinder_layer.EyeVisibility = EyeVisibility.Both; cylinder_layer.SubImage = new SwapchainSubImage(); cylinder_layer.SubImage.Swapchain = _Scene.CylinderSwapChain.Swapchain; cylinder_layer.SubImage.ImageRect.Offset.X = 0; cylinder_layer.SubImage.ImageRect.Offset.Y = 0; cylinder_layer.SubImage.ImageRect.Extent.Width = (int)_Scene.CylinderSwapChain.Width; cylinder_layer.SubImage.ImageRect.Extent.Height = (int) _Scene.CylinderSwapChain.Height; cylinder_layer.SubImage.ImageArrayIndex = 0; Vector3f axis = new Vector3f(0.0f, 1.0f, 0.0f); Vector3f pos = new Vector3f(appCylPositionX, appCylPositionY, 0.0f); cylinder_layer.Pose.Orientation = XrQuaternionf_CreateFromAxisAngle(axis, -45.0f * (float)(Math.PI / 180.0f)); cylinder_layer.Pose.Position = pos; cylinder_layer.Radius = 2.0f; cylinder_layer.CentralAngle = (float)(Math.PI / 4.0); cylinder_layer.AspectRatio = 2.0f; _Layers[LayerCount++].Cylinder = cylinder_layer; } // Compose the layers for this frame. CompositionLayerBaseHeader*[] layers = new CompositionLayerBaseHeader*[ovrMaxLayerCount]; fixed (ovrCompositorLayer_Union* p_Layers = _Layers) for (int i = 0; i < LayerCount; i++) { layers[i] = &p_Layers[i].BaseHeader; } // end frame fixed (CompositionLayerBaseHeader** players = layers) { FrameEndInfo endFrameInfo = new FrameEndInfo(StructureType.FrameEndInfo); endFrameInfo.DisplayTime = _frameState.PredictedDisplayTime; endFrameInfo.EnvironmentBlendMode = EnvironmentBlendMode.Opaque; endFrameInfo.LayerCount = LayerCount; endFrameInfo.Layers = (CompositionLayerBaseHeader**)players; xrResult = _oxrSession.EndFrame(ref endFrameInfo); Debug.Assert(xrResult == Result.Success, "EndFrame"); } return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { throw new PlatformNotSupportedException(); } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { if (!_isLocalFloorSupported) throw new NotImplementedException(); } _isTrackFloorLevelEnabled = enable; } private void GraphicsDeviceCreated(object sender, EventArgs e) { } private void GraphicsDeviceResetting(object sender, EventArgs e) { } private void GraphicsDeviceReset(object sender, EventArgs e) { } private void GraphicsDeviceDisposing(object sender, EventArgs e) { this.Dispose(); } private unsafe int Initialize(GraphicsDevice graphicsDevice) { // check supported feature level switch (graphicsDevice.Adapter.Backend) { case GraphicsBackend.DirectX11: case GraphicsBackend.DirectX12: //if (graphicsDevice.GraphicsProfile < GraphicsProfile.FL10_0) // throw new InvalidOperationException("GraphicsProfile must be FL10_0 or higher."); break; case GraphicsBackend.OpenGL: case GraphicsBackend.GLES: if (graphicsDevice.GraphicsProfile < GraphicsProfile.HiDef) throw new InvalidOperationException("GraphicsProfile must be HiDef or higher."); break; } Result xrResult; // Check that the extensions required are present. List requiredExtensionNames = new List(); requiredExtensionNames.Add(nameof(OxrExtensions.XR_EXT_local_floor)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_opengl_es_enable)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_EXT_performance_settings)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_android_thread_settings)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_cube)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_cylinder)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_KHR_composition_layer_equirect2)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_display_refresh_rate)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_color_space)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_swapchain_update_state)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_swapchain_update_state_opengl_es)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_foveation)); requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_foveation_configuration)); if (this.SessionMode == XRSessionMode.AR) requiredExtensionNames.Add(nameof(OxrExtensions.XR_FB_passthrough)); // Check the list of required extensions against what is supported by the runtime. uint numRequiredExtensions = (uint)requiredExtensionNames.Count; for (int i = 0; i < numRequiredExtensions; i++) { if (_extensions.Contains(requiredExtensionNames[i])) { Console.WriteLine("Found required extension {0}", requiredExtensionNames[i]); } else { Console.WriteLine("Failed to find required extension {0}", requiredExtensionNames[i]); //throw new Exception(); } } // Create the OpenXR instance. xrResult = _xrAPI.CreateInstance(_applicationName, _engineName, requiredExtensionNames, out _oxrInstance); if (xrResult != Result.Success) { Console.WriteLine("Failed to create XR instance: {0}.", xrResult); return (int)xrResult; } Console.WriteLine("OpenXR Instance initialized successfully. {0}.", _oxrInstance.Instance.Handle); Console.WriteLine("Runtime: {0}.", _oxrInstance.RuntimeName); Console.WriteLine("Version: {0}.", _oxrInstance.RuntimeVersion); if (xrResult == Result.ErrorFormFactorUnavailable) { Console.WriteLine("Failed to get system; the specified form factor is not available. Is your headset connected?"); return (int)xrResult; } if (xrResult != Result.Success) { Console.WriteLine("xrGetSystem failed, error {0}", xrResult); return (int)xrResult; } Console.WriteLine("systemId. {0}.", _oxrInstance.SystemId); SystemColorSpacePropertiesFB colorSpacePropertiesFB = new SystemColorSpacePropertiesFB(StructureType.SystemColorSpacePropertiesFB); xrResult = _oxrInstance.GetSystemProperties(&colorSpacePropertiesFB, out SystemProperties systemProperties); Debug.Assert(xrResult == Result.Success, "GetSystemProperties"); string systemName = Encoding.ASCII.GetString(systemProperties.SystemName, (int)SilkXR.MaxSystemNameSize); systemName = systemName.TrimEnd('\0'); Console.WriteLine("System Properties: Name={0} VendorId={1}", systemName, systemProperties.VendorId); Console.WriteLine("System Graphics Properties: MaxWidth={0} MaxHeight={1} MaxLayers={2}", systemProperties.GraphicsProperties.MaxSwapchainImageWidth, systemProperties.GraphicsProperties.MaxSwapchainImageHeight, systemProperties.GraphicsProperties.MaxLayerCount); Console.WriteLine("System Tracking Properties: OrientationTracking={0} PositionTracking={1}", systemProperties.TrackingProperties.OrientationTracking != 0 ? "True" : "False", systemProperties.TrackingProperties.PositionTracking != 0 ? "True" : "False"); Console.WriteLine("System Color Space Properties: colorspace={0}", colorSpacePropertiesFB.ColorSpace); Debug.Assert(ovrMaxLayerCount <= systemProperties.GraphicsProperties.MaxLayerCount); // Get the graphics requirements. xrResult = _oxrInstance.GetInstanceProcAddr("xrGetOpenGLESGraphicsRequirementsKHR", out xrGetOpenGLESGraphicsRequirementsKHRDelegate Fun_xrGetOpenGLESGraphicsRequirementsKHR); Debug.Assert(xrResult == Result.Success, "GetInstanceProcAddr"); GraphicsRequirementsOpenGLESKHR graphicsRequirements = new GraphicsRequirementsOpenGLESKHR(StructureType.GraphicsRequirementsOpenglESKhr); xrResult = Fun_xrGetOpenGLESGraphicsRequirementsKHR(_oxrInstance.Instance, _oxrInstance.SystemId, &graphicsRequirements); Debug.Assert(xrResult == Result.Success, "Fun_xrGetOpenGLESGraphicsRequirementsKHR"); OxrVersion minApiVersionSupported = new OxrVersion(graphicsRequirements.MinApiVersionSupported); OxrVersion maxApiVersionSupported = new OxrVersion(graphicsRequirements.MaxApiVersionSupported); Console.WriteLine("GLES MinApiVersionSupported {0}, MaxApiVersionSupported {1} ", minApiVersionSupported, maxApiVersionSupported); /* var adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete(); var GL = adapter.Ogl; // Check the graphics requirements. int eglMajor = 0; int eglMinor = 0; GL.GetInteger(OpenGL.GetPName.MajorVersion, out eglMajor); GL.CheckGLError(); GL.GetInteger(OpenGL.GetPName.MinorVersion, out eglMinor); GL.CheckGLError(); OxrVersion eglVersion = new OxrVersion((short)eglMajor, (short)eglMinor, 0); if (eglVersion.Packed < minApiVersionSupported.Packed || eglVersion.Packed > maxApiVersionSupported.Packed) { Console.WriteLine("GLES version {0} not supported", eglVersion); return (int)xrResult; } */ _CpuLevel = CPU_LEVEL; _GpuLevel = GPU_LEVEL; Android.Opengl.EGLDisplay display = Android.Opengl.EGL14.EglGetCurrentDisplay(); Android.Opengl.EGLContext context = Android.Opengl.EGL14.EglGetCurrentContext(); int[] currentConfig = new int[1]; Android.Opengl.EGL14.EglQueryContext(display, context, Android.Opengl.EGL14.EglConfigId, currentConfig, 0); int eglConfig = currentConfig[0]; // Create the OpenXR Session. GraphicsBindingOpenGLESAndroidKHR graphicsBindingAndroidGLES = new GraphicsBindingOpenGLESAndroidKHR(StructureType.GraphicsBindingOpenglESAndroidKhr); graphicsBindingAndroidGLES.Display = display.Handle; graphicsBindingAndroidGLES.Context = context.Handle; graphicsBindingAndroidGLES.Config = eglConfig; //AndroidGameWindow gameWindow = AndroidGameWindow.FromHandle(_graphics.GraphicsDevice.PresentationParameters.DeviceWindowHandle); //graphicsBindingAndroidGLES.Display = _graphics.GraphicsDevice.Adapter.MonitorHandle; //graphicsBindingAndroidGLES.Context = gameWindow.EglContext.Handle; //graphicsBindingAndroidGLES.Config = gameWindow.EglConfig.Handle; xrResult = _oxrInstance.CreateSession(&graphicsBindingAndroidGLES, out _oxrSession); if (xrResult != Result.Success) { Console.WriteLine("Failed to create XR session: {0}.", xrResult); return (int)xrResult; } Console.WriteLine("XR session created successfully."); // App only supports the primary stereo view config. const ViewConfigurationType supportedViewConfigType = ViewConfigurationType.PrimaryStereo; // Enumerate the viewport configurations. xrResult = _oxrInstance.EnumerateViewConfiguration(out ViewConfigurationType[] viewportConfigurationTypes); Console.WriteLine("Available Viewport Configuration Types: {0}", viewportConfigurationTypes.Length); ViewConfigurationView[] ViewConfigurationView = new ViewConfigurationView[ovrMaxNumEyes]; for (uint i = 0; i < viewportConfigurationTypes.Length; i++) { ViewConfigurationType viewportConfigType = viewportConfigurationTypes[i]; Console.WriteLine( "Viewport configuration type {0} : {1}", viewportConfigType, viewportConfigType == supportedViewConfigType ? "Selected" : ""); xrResult = _oxrInstance.GetViewConfigurationProperties(viewportConfigType, out _viewportConfig); Debug.Assert(xrResult == Result.Success, "GetViewConfigurationProperties"); Console.WriteLine( "FovMutable={0} ConfigurationType {0}", _viewportConfig.FovMutable != 0 ? "true" : "false", _viewportConfig.ViewConfigurationType); xrResult = _oxrInstance.EnumerateViewConfigurationView(viewportConfigType, out ViewConfigurationView[] elements); if (elements.Length > 0) { // Log the view config info for each view type for debugging purposes. for (uint e = 0; e < elements.Length; e++) { ViewConfigurationView element = elements[e]; Console.WriteLine( "Viewport [{0}]: Recommended Width={1} Height={2} SampleCount={3}", e, element.RecommendedImageRectWidth, element.RecommendedImageRectHeight, element.RecommendedSwapchainSampleCount); Console.WriteLine( "Viewport [{0}]: Max Width={1} Height={2} SampleCount={3}", e, element.MaxImageRectWidth, element.MaxImageRectHeight, element.MaxSwapchainSampleCount); } // Cache the view config properties for the selected config type. if (viewportConfigType == supportedViewConfigType) { Debug.Assert(elements.Length == ovrMaxNumEyes); for (uint e = 0; e < elements.Length; e++) { ViewConfigurationView[e] = elements[e]; } } } else { Console.WriteLine("Empty viewport configuration type: {0}", elements.Length); } } // Get the viewport configuration info for the chosen viewport configuration type. xrResult = _oxrInstance.GetViewConfigurationProperties(supportedViewConfigType, out ViewConfigurationProperties ViewportConfig); Debug.Assert(xrResult == Result.Success, "GetViewConfigurationProperties"); // Enumerate the supported color space options for the system. { xrResult = _oxrInstance.GetInstanceProcAddr("xrEnumerateColorSpacesFB", out xrEnumerateColorSpacesFB Fun_xrEnumerateColorSpacesFB); Debug.Assert(xrResult == Result.Success, "xrGetInstanceProcAddr"); uint colorSpaceCountOutput = 0; xrResult = Fun_xrEnumerateColorSpacesFB(_oxrSession.Session, 0, &colorSpaceCountOutput, null); Debug.Assert(xrResult == Result.Success, "Fun_xrEnumerateColorSpacesFB"); ColorSpaceFB[] colorSpaces = new ColorSpaceFB[colorSpaceCountOutput]; fixed (ColorSpaceFB* pcolorSpaces = colorSpaces) xrResult = Fun_xrEnumerateColorSpacesFB(_oxrSession.Session, colorSpaceCountOutput, &colorSpaceCountOutput, pcolorSpaces); Debug.Assert(xrResult == Result.Success, "Fun_xrEnumerateColorSpacesFB"); Console.WriteLine("Supported ColorSpaces:"); for (uint i = 0; i < colorSpaceCountOutput; i++) { Console.WriteLine("{0}:{1}", i, colorSpaces[i]); } ColorSpaceFB requestColorSpace = ColorSpaceFB.AdobeRgbFB; xrResult = _oxrInstance.GetInstanceProcAddr("xrSetColorSpaceFB", out xrSetColorSpaceFB Fun_xrSetColorSpaceFB); Debug.Assert(xrResult == Result.Success, "xrGetInstanceProcAddr"); xrResult = Fun_xrSetColorSpaceFB(_oxrSession.Session, requestColorSpace); Debug.Assert(xrResult == Result.Success, "Fun_xrEnumerateColorSpacesFB"); } // Get the supported display refresh rates for the system. { _oxrInstance.GetInstanceProcAddr("xrEnumerateDisplayRefreshRatesFB", out xrEnumerateDisplayRefreshRatesFB pfnxrEnumerateDisplayRefreshRatesFB); _NumSupportedDisplayRefreshRates = 0; xrResult = pfnxrEnumerateDisplayRefreshRatesFB(_oxrSession.Session, 0, ref _NumSupportedDisplayRefreshRates, null); Debug.Assert(xrResult == Result.Success, "pfnxrEnumerateDisplayRefreshRatesFB"); _SupportedDisplayRefreshRates = new float[_NumSupportedDisplayRefreshRates]; fixed (float* pSupportedDisplayRefreshRates = _SupportedDisplayRefreshRates) xrResult = pfnxrEnumerateDisplayRefreshRatesFB(_oxrSession.Session, _NumSupportedDisplayRefreshRates, ref _NumSupportedDisplayRefreshRates, pSupportedDisplayRefreshRates); Debug.Assert(xrResult == Result.Success, "pfnxrEnumerateDisplayRefreshRatesFB"); Console.WriteLine("Supported Refresh Rates:"); for (uint i = 0; i < _NumSupportedDisplayRefreshRates; i++) { Console.WriteLine("{0}:{1}", i, _SupportedDisplayRefreshRates[i]); } _oxrInstance.GetInstanceProcAddr("xrGetDisplayRefreshRateFB", out _pfnxrGetDisplayRefreshRateFB); float currentDisplayRefreshRate = 0.0f; xrResult = _pfnxrGetDisplayRefreshRateFB(_oxrSession.Session, ¤tDisplayRefreshRate); Debug.Assert(xrResult == Result.Success, "pfnxrGetDisplayRefreshRateFB"); Console.WriteLine("Current System Display Refresh Rate: {0}", currentDisplayRefreshRate); _oxrInstance.GetInstanceProcAddr("xrRequestDisplayRefreshRateFB", out _pfnxrRequestDisplayRefreshRateFB); // Test requesting the system default. xrResult = _pfnxrRequestDisplayRefreshRateFB(_oxrSession.Session, 0.0f); Debug.Assert(xrResult == Result.Success, "pfnRequestDisplayRefreshRate"); Console.WriteLine("Requesting system default display refresh rate"); } xrResult = _oxrSession.EnumerateReferenceSpaces(out ReferenceSpaceType[] referenceSpaces); Debug.Assert(xrResult == Result.Success, "EnumerateReferenceSpaces"); for (uint i = 0; i < referenceSpaces.Length; i++) { if (referenceSpaces[i] == ReferenceSpaceType.LocalFloor) _isLocalFloorSupported = true; if (referenceSpaces[i] == ReferenceSpaceType.Stage) _isStageSupported = true; } // Create a space to the first path xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.View, XrPosef_CreateIdentity(), out _HeadSpace); Debug.Assert(xrResult == Result.Success, "CreateReferenceSpace"); xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Local, XrPosef_CreateIdentity(), out _LocalSpace); Debug.Assert(xrResult == Result.Success, "CreateReferenceSpace"); if (_isLocalFloorSupported) { xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.LocalFloor, XrPosef_CreateIdentity(), out _LocalFloorSpace); Debug.Assert(xrResult == Result.Success, "CreateReferenceSpace"); Console.WriteLine("Created local floor space"); } // Create a default stage space to use if SPACE_TYPE_STAGE is not // supported, or calls to xrGetReferenceSpaceBoundsRect fail. { Posef poseInReferenceSpace = XrPosef_CreateIdentity(); poseInReferenceSpace.Position.Y = -1.6750f; xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Local, poseInReferenceSpace, out _FakeStageSpace); Debug.Assert(xrResult == Result.Success, "CreateReferenceSpace"); Console.WriteLine("Created fake stage space from local space with offset"); _CurrentStageSpace = _FakeStageSpace; } if (_isStageSupported) { xrResult = _oxrSession.CreateReferenceSpace(ReferenceSpaceType.Stage, XrPosef_CreateIdentity(), out _StageSpace); Debug.Assert(xrResult == Result.Success, "CreateReferenceSpace"); Console.WriteLine("Created stage space"); _CurrentStageSpace = _StageSpace; } for (int eye = 0; eye < ovrMaxNumEyes; eye++) { _projections[eye].Type = StructureType.View; } // setup passthrough if (this.SessionMode == XRSessionMode.AR) { _passthroughFB = _oxrSession.CreatePassthroughFB(default(PassthroughFlagsFB), _oxrInstance); _passthroughLayerFB = _oxrSession.CreatePassthroughLayerFB(_passthroughFB, PassthroughLayerPurposeFB.ReconstructionFB, default(PassthroughFlagsFB), _oxrInstance); xrResult = _passthroughFB.Start(); xrResult = _passthroughLayerFB.Resume(); } // Actions _runningActionSet = _oxrInstance.CreateActionSet(1, "running_action_set", "Action Set used on main loop"); _actionButtonX = _runningActionSet.CreateAction(ActionType.BooleanInput, "x_button", "Button X", 0, null); _actionButtonY = _runningActionSet.CreateAction(ActionType.BooleanInput, "y_button", "Button Y", 0, null); _actionButtonLeftThumbstick = _runningActionSet.CreateAction(ActionType.BooleanInput, "left_thumbstick_click", "Button LeftThumbstick", 0, null); _actionButtonA = _runningActionSet.CreateAction(ActionType.BooleanInput, "a_button", "Button A", 0, null); _actionButtonB = _runningActionSet.CreateAction(ActionType.BooleanInput, "b_button", "Button B", 0, null); _actionButtonRightThumbstick = _runningActionSet.CreateAction(ActionType.BooleanInput, "right_thumbstick_click", "Button RightThumbstick", 0, null); _actionButtonXtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "x_touch", "Touch X", 0, null); _actionButtonYtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "y_touch", "Touch Y", 0, null); _actionButtonLeftThumbsticktouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "left_thumbstick_touch", "Touch LeftThumbstick", 0, null); _actionButtonAtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "a_touch", "Touch A", 0, null); _actionButtonBtouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "b_touch", "Touch B", 0, null); _actionButtonRightThumbsticktouch = _runningActionSet.CreateAction(ActionType.BooleanInput, "right_thumbstick_touch", "Touch RightThumbstick", 0, null); /* Right Hand: right_menu_click left_menu_click Select Button (Often associated with the A or X buttons, depending on the controller): right_select_click or right_a_click left_select_click or left_x_click Trigger Button: right_trigger_click left_trigger_click Grip Button (Squeeze): right_grip_click or right_squeeze_click left_grip_click or left_squeeze_click */ _moveOnXActionL = _runningActionSet.CreateAction( ActionType.FloatInput, "left_move_on_x", "Move on Left X", 0, null); _moveOnXActionR = _runningActionSet.CreateAction( ActionType.FloatInput, "right_move_on_x", "Move on Right X", 0, null); _moveOnYActionL = _runningActionSet.CreateAction( ActionType.FloatInput, "left_move_on_y", "Move on Left Y", 0, null); _moveOnYActionR = _runningActionSet.CreateAction( ActionType.FloatInput, "right_move_on_y", "Move on Right Y", 0, null); _actionTriggerLeftTouch = _runningActionSet.CreateAction( ActionType.FloatInput, "left_trigger_touch", "Left Trigger Touch", 0, null); _actionTriggerRightTouch = _runningActionSet.CreateAction( ActionType.FloatInput, "right_trigger_touch", "Right Trigger Touch", 0, null); //_actionGripLeftTouch = _runningActionSet.CreateAction( // ActionType.FloatInput, "left_squeeze_touch", "Left Squeeze Touch", 0, null); //_actionGripRightTouch = _runningActionSet.CreateAction( // ActionType.FloatInput, "right_squeeze_touch", "Right Squeeze Touch", 0, null); _moveOnJoystickActionL = _runningActionSet.CreateAction( ActionType.Vector2fInput, "left_move_on_joy", "Move on Left Joy", 0, null); _moveOnJoystickActionR = _runningActionSet.CreateAction( ActionType.Vector2fInput, "right_move_on_joy", "Move on Right Joy", 0, null); _vibrateLeftFeedback = _runningActionSet.CreateAction( ActionType.VibrationOutput, "vibrate_left_feedback", "Vibrate Left Controller Feedback", 0, null); _vibrateRightFeedback = _runningActionSet.CreateAction( ActionType.VibrationOutput, "vibrate_right_feedback", "Vibrate Right Controller Feedback", 0, null); xrResult = _oxrInstance.StringToPath("/user/hand/left", out _leftHandPath); Debug.Assert(xrResult == Result.Success, "StringToPath"); xrResult = _oxrInstance.StringToPath("/user/hand/right", out _rightHandPath); Debug.Assert(xrResult == Result.Success, "StringToPath"); ActionPath[] handSubactionPaths = new ActionPath[] { _leftHandPath, _rightHandPath }; _aimPoseAction = _runningActionSet.CreateAction( ActionType.PoseInput, "aim_pose", null, 2, handSubactionPaths); _gripPoseAction = _runningActionSet.CreateAction( ActionType.PoseInput, "grip_pose", null, 2, handSubactionPaths); ActionPath interactionProfilePath = default; ActionPath interactionProfilePathTouch = default; ActionPath interactionProfilePathKHRSimple = default; xrResult = _oxrInstance.StringToPath("/interaction_profiles/oculus/touch_controller", out interactionProfilePathTouch); Debug.Assert(xrResult == Result.Success, "StringToPath"); xrResult = _oxrInstance.StringToPath("/interaction_profiles/khr/simple_controller", out interactionProfilePathKHRSimple); Debug.Assert(xrResult == Result.Success, "StringToPath"); // Toggle this to force simple as a first choice, otherwise use it as a last resort _useSimpleProfile = false; /// true; if (_useSimpleProfile) { Console.WriteLine("xrSuggestInteractionProfileBindings found bindings for Khronos SIMPLE controller"); interactionProfilePath = interactionProfilePathKHRSimple; } else { // Query Set OxrActionSet queryActionSet = _oxrInstance.CreateActionSet(1, "query_action_set", "Action Set used to query device caps"); XrAction dummyAction = queryActionSet.CreateAction( ActionType.BooleanInput, "dummy_action", "Dummy Action", 0, null); // Map bindings ActionSuggestedBinding[] bindings = new ActionSuggestedBinding[1]; bindings[0] = _oxrInstance.ActionSuggestedBinding(dummyAction, "/user/hand/right/input/system/click"); // Try all Result suggestTouchResult = _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePathTouch, bindings); Debug.Assert(suggestTouchResult == Result.Success, "StringToPath"); if (Result.Success == suggestTouchResult) { Console.WriteLine("xrSuggestInteractionProfileBindings found bindings for QUEST controller"); interactionProfilePath = interactionProfilePathTouch; } if (interactionProfilePath.Handle == 0) { // Simple as a fallback bindings[0] = _oxrInstance.ActionSuggestedBinding(dummyAction, "/user/hand/right/input/select/click"); Result suggestKHRSimpleResult = _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePathKHRSimple, bindings); Debug.Assert(suggestKHRSimpleResult == Result.Success, "xrSuggestInteractionProfileBindings"); if (Result.Success == suggestKHRSimpleResult) { Console.WriteLine( "xrSuggestInteractionProfileBindings found bindings for Khronos SIMPLE controller"); interactionProfilePath = interactionProfilePathKHRSimple; } else { Console.WriteLine("xrSuggestInteractionProfileBindings did NOT find any bindings."); Debug.Assert(false); } } } // Action creation { // Map bindings ActionSuggestedBinding[] bindings = null; if (interactionProfilePath == interactionProfilePathTouch) { bindings = new ActionSuggestedBinding[] { _oxrInstance.ActionSuggestedBinding(_actionButtonX, "/user/hand/left/input/x/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonY, "/user/hand/left/input/y/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonLeftThumbstick, "/user/hand/left/input/thumbstick/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonA, "/user/hand/right/input/a/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonB, "/user/hand/right/input/b/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonRightThumbstick, "/user/hand/right/input/thumbstick/click"), _oxrInstance.ActionSuggestedBinding(_actionButtonXtouch, "/user/hand/left/input/x/touch"), _oxrInstance.ActionSuggestedBinding(_actionButtonYtouch, "/user/hand/left/input/y/touch"), _oxrInstance.ActionSuggestedBinding(_actionButtonLeftThumbsticktouch, "/user/hand/left/input/thumbstick/touch"), _oxrInstance.ActionSuggestedBinding(_actionButtonAtouch, "/user/hand/right/input/a/touch"), _oxrInstance.ActionSuggestedBinding(_actionButtonBtouch, "/user/hand/right/input/b/touch"), _oxrInstance.ActionSuggestedBinding(_actionButtonRightThumbsticktouch, "/user/hand/right/input/thumbstick/touch"), _oxrInstance.ActionSuggestedBinding(_moveOnYActionL, "/user/hand/left/input/trigger/value"), _oxrInstance.ActionSuggestedBinding(_moveOnYActionR, "/user/hand/right/input/trigger/value"), _oxrInstance.ActionSuggestedBinding(_moveOnXActionL, "/user/hand/left/input/squeeze/value"), _oxrInstance.ActionSuggestedBinding(_moveOnXActionR, "/user/hand/right/input/squeeze/value"), _oxrInstance.ActionSuggestedBinding(_actionTriggerLeftTouch, "/user/hand/left/input/trigger/touch"), _oxrInstance.ActionSuggestedBinding(_actionTriggerRightTouch, "/user/hand/right/input/trigger/touch"), // BUG: Grip touch doesn't work on native OpenXR. // https://communityforums.atmeta.com/t5/OpenXR-Development/unable-to-get-grip-button-input-on-quest-1-getting-path/td-p/833021 //_oxrInstance.ActionSuggestedBinding(_actionGripLeftTouch, "/user/hand/left/input/squeeze/touch"), //_oxrInstance.ActionSuggestedBinding(_actionGripRightTouch, "/user/hand/right/input/squeeze/touch"), _oxrInstance.ActionSuggestedBinding(_moveOnJoystickActionL, "/user/hand/left/input/thumbstick"), _oxrInstance.ActionSuggestedBinding(_moveOnJoystickActionR, "/user/hand/right/input/thumbstick"), _oxrInstance.ActionSuggestedBinding(_vibrateLeftFeedback, "/user/hand/left/output/haptic"), _oxrInstance.ActionSuggestedBinding(_vibrateRightFeedback, "/user/hand/right/output/haptic"), _oxrInstance.ActionSuggestedBinding(_aimPoseAction, "/user/hand/left/input/aim/pose"), _oxrInstance.ActionSuggestedBinding(_aimPoseAction, "/user/hand/right/input/aim/pose"), _oxrInstance.ActionSuggestedBinding(_gripPoseAction, "/user/hand/left/input/grip/pose"), _oxrInstance.ActionSuggestedBinding(_gripPoseAction, "/user/hand/right/input/grip/pose"), }; } if (interactionProfilePath == interactionProfilePathKHRSimple) { bindings = new ActionSuggestedBinding[] { _oxrInstance.ActionSuggestedBinding(_vibrateLeftFeedback, "/user/hand/left/output/haptic"), _oxrInstance.ActionSuggestedBinding(_vibrateRightFeedback, "/user/hand/right/output/haptic"), _oxrInstance.ActionSuggestedBinding(_aimPoseAction, "/user/hand/left/input/aim/pose"), _oxrInstance.ActionSuggestedBinding(_aimPoseAction, "/user/hand/right/input/aim/pose"), _oxrInstance.ActionSuggestedBinding(_gripPoseAction, "/user/hand/left/input/grip/pose"), _oxrInstance.ActionSuggestedBinding(_gripPoseAction, "/user/hand/right/input/grip/pose"), }; } xrResult = _oxrInstance.SuggestInteractionProfileBinding(interactionProfilePath, bindings); Debug.Assert(xrResult == Result.Success, "SuggestInteractionProfileBinding"); // Attach to session xrResult = _oxrSession.AttachSessionActionSets(_runningActionSet); Debug.Assert(xrResult == Result.Success, "AttachSessionActionSets"); // Enumerate actions XrAction[] actionsToEnumerate = { _actionButtonX, _actionButtonY, _actionButtonRightThumbstick, _actionButtonA, _actionButtonB, _actionButtonLeftThumbstick, _actionButtonXtouch, _actionButtonYtouch, _actionButtonRightThumbsticktouch, _actionButtonAtouch, _actionButtonBtouch, _actionButtonLeftThumbsticktouch, _moveOnXActionL, _moveOnXActionR, _moveOnYActionL, _moveOnYActionR, _actionTriggerLeftTouch, _actionTriggerRightTouch, //_actionGripLeftTouch, //_actionGripRightTouch, _moveOnJoystickActionL, _moveOnJoystickActionR, _vibrateLeftFeedback, _vibrateRightFeedback, _aimPoseAction, _gripPoseAction, }; for (int i = 0; i < actionsToEnumerate.Length; i++) { ulong[] actionPathsBuffer = _oxrSession.EnumerateBoundSourcesForAction(actionsToEnumerate[i]); Console.WriteLine( "xrEnumerateBoundSourcesForAction action={0} count={1}", actionsToEnumerate[i].Handle, actionPathsBuffer.Length); for (uint a = 0; a < actionPathsBuffer.Length; a++) { InputSourceLocalizedNameGetInfo nameGetInfo = new InputSourceLocalizedNameGetInfo(StructureType.InputSourceLocalizedNameGetInfo); nameGetInfo.SourcePath = actionPathsBuffer[a]; nameGetInfo.WhichComponents = InputSourceLocalizedNameFlags.UserPathBit | InputSourceLocalizedNameFlags.InteractionProfileBit | InputSourceLocalizedNameFlags.ComponentBit; uint stringCount = 0; xrResult = _oxrInstance.OXRAPI.Api.GetInputSourceLocalizedName(_oxrSession.Session, &nameGetInfo, 0, &stringCount, (byte*)null); Debug.Assert(xrResult == Result.Success, "GetInputSourceLocalizedName"); char[] stringBuffer = new char[stringCount]; string localizedName; fixed (void* pstringBuffer = stringBuffer) { xrResult = _oxrInstance.OXRAPI.Api.GetInputSourceLocalizedName(_oxrSession.Session, &nameGetInfo, stringCount, &stringCount, (byte*)pstringBuffer); Debug.Assert(xrResult == Result.Success, "GetInputSourceLocalizedName"); localizedName = Encoding.ASCII.GetString((byte*)pstringBuffer, (int)stringCount); Console.Write("Bound source: " + localizedName); } string strpathStr; byte[] pathStr = new byte[stringCount]; fixed (byte* ppathStr = pathStr) { uint strLen = 0; xrResult = _oxrInstance.OXRAPI.Api.PathToString( _oxrInstance.Instance, actionPathsBuffer[a], stringCount, &strLen, ppathStr); strpathStr = Encoding.ASCII.GetString((byte*)ppathStr, (int)strLen); } Console.Write( " -> path = {0} `{1}` -> `{2}`", actionPathsBuffer[a], strpathStr, localizedName //stringBuffer ); } } // Create the frame buffers. for (int eye = 0; eye < ovrMaxNumEyes; eye++) { ovrFramebuffer_Create( ref _Renderer.FrameBuffer[eye], SurfaceFormat.ColorSRgba, //SRGB8_ALPHA8 (int)ViewConfigurationView[0].RecommendedImageRectWidth, (int)ViewConfigurationView[0].RecommendedImageRectHeight, NUM_MULTI_SAMPLES ); } ovrRenderer_SetFoveation( ref _Renderer, FoveationLevelFB.HighFB, 0, FoveationDynamicFB.DisabledFB ); //CreateDefaultLayer(graphicsDevice, // SurfaceFormat.Color, // DepthFormat.Depth24Stencil8, // 4, 1, // out _layer); TouchController.DeviceHandle = new ConcreteTouchControllerStrategy(this); this._deviceState = XRDeviceState.Enabled; return 0; } } private unsafe bool ovrFramebuffer_Create( ref ovrFramebuffer frameBuffer, SurfaceFormat colorFormat, int width, int height, int multisamples) { Result xrResult; frameBuffer.Width = width; frameBuffer.Height = height; frameBuffer.Multisamples = multisamples; // Get the number of supported formats. xrResult = _oxrSession.EnumerateSwapchainFormats(out long[] supportedFormats); Debug.Assert(xrResult == Result.Success, "EnumerateSwapchainFormats"); Array.Sort(supportedFormats); long requestedGLFormat = SRGB8_ALPHA8; // Verify the requested format is supported. long selectedFormat = 0; for (uint i = 0; i < supportedFormats.Length; i++) { if (supportedFormats[i] == requestedGLFormat) { selectedFormat = supportedFormats[i]; break; } } Debug.Assert(selectedFormat != 0, "requestedGLFormat not supported."); if (selectedFormat == 0) { Console.WriteLine("Format not supported"); } SwapchainCreateInfo swapChainCreateInfo = new SwapchainCreateInfo(StructureType.SwapchainCreateInfo); swapChainCreateInfo.UsageFlags = SwapchainUsageFlags.SampledBit | SwapchainUsageFlags.ColorAttachmentBit; swapChainCreateInfo.Format = selectedFormat; swapChainCreateInfo.SampleCount = 1; swapChainCreateInfo.Width = (uint)width; swapChainCreateInfo.Height = (uint)height; swapChainCreateInfo.FaceCount = 1; swapChainCreateInfo.ArraySize = 1; swapChainCreateInfo.MipCount = 1; // Enable Foveation on this swapchain SwapchainCreateInfoFoveationFB swapChainFoveationCreateInfo = new SwapchainCreateInfoFoveationFB(StructureType.SwapchainCreateInfoFoveationFB); swapChainCreateInfo.Next = &swapChainFoveationCreateInfo; // Create the swapchain. xrResult = _oxrSession.CreateSwapchain(ref swapChainCreateInfo, out frameBuffer.ColorSwapChain); Debug.Assert(xrResult == Result.Success, "CreateSwapchain"); // Get the number of swapchain images. frameBuffer.TextureSwapChainLength = frameBuffer.ColorSwapChain.GetImagesCount(); // Allocate the swapchain images array. SwapchainImageOpenGLESKHR[] colorSwapChainImage = new SwapchainImageOpenGLESKHR[frameBuffer.TextureSwapChainLength]; frameBuffer.ColorSwapChainImage = colorSwapChainImage; // Populate the swapchain image array. for (uint i = 0; i < frameBuffer.TextureSwapChainLength; i++) { colorSwapChainImage[i].Type = StructureType.SwapchainImageOpenglESKhr; colorSwapChainImage[i].Next = null; } fixed (SwapchainImageOpenGLESKHR* pcolorSwapChainImage = colorSwapChainImage) { xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages( frameBuffer.ColorSwapChain.Swapchain, frameBuffer.TextureSwapChainLength, ref frameBuffer.TextureSwapChainLength, (SwapchainImageBaseHeader*)pcolorSwapChainImage); Debug.Assert(xrResult == Result.Success, "EnumerateSwapchainImages"); } frameBuffer.RenderTarget = new RenderTarget2D(_graphics.GraphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 4, RenderTargetUsage.DiscardContents, true ); frameBuffer.FrameBuffers = new int[frameBuffer.TextureSwapChainLength]; Android.Opengl.GLES30.GlGenFramebuffers((int)frameBuffer.TextureSwapChainLength, frameBuffer.FrameBuffers, 0); //ConcreteGraphicsAdapter adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete(); //var GL = adapter.Ogl; for (uint i = 0; i < frameBuffer.TextureSwapChainLength; i++) { // Create the color buffer texture. uint colorTexture = frameBuffer.ColorSwapChainImage[i].Image; // create DrawFramebuffer //frameBuffer.FrameBuffers[i] = GL.GenFramebuffer(); //GL.CheckGLError(); Android.Opengl.GLES30.GlBindFramebuffer(Android.Opengl.GLES30.GlDrawFramebuffer, frameBuffer.FrameBuffers[i]); //GL.BindFramebuffer(OpenGL.FramebufferTarget.DrawFramebuffer, frameBuffer.FrameBuffers[i]); //GL.CheckGLError(); Android.Opengl.GLES30.GlFramebufferTexture2D( Android.Opengl.GLES30.GlDrawFramebuffer, Android.Opengl.GLES30.GlColorAttachment0, Android.Opengl.GLES30.GlTexture2d, (int)colorTexture, 0); //GL.FramebufferTexture2D( // OpenGL.FramebufferTarget.DrawFramebuffer, // OpenGL.FramebufferAttachment.ColorAttachment0, // OpenGL.TextureTarget.Texture2D, (int)colorTexture, 0); //GL.CheckGLError(); } return true; } public unsafe delegate Result xrGetOpenGLESGraphicsRequirementsKHRDelegate(Instance xrInstance, ulong systemId, GraphicsRequirementsOpenGLESKHR* graphicsRequirements); public unsafe delegate Result xrEnumerateColorSpacesFB(Session xrSession, uint count, uint* outcount, ColorSpaceFB* colorSpaces); public unsafe delegate Result xrSetColorSpaceFB(Session xrSession, ColorSpaceFB colorSpace); public unsafe delegate Result xrEnumerateDisplayRefreshRatesFB(Session xrSession, uint count, ref uint outcount, float* displayRefreshRates); public unsafe delegate Result xrGetDisplayRefreshRateFB(Session xrSession, float* displayRefreshRate); public unsafe delegate Result xrRequestDisplayRefreshRateFB(Session xrSession, float displayRefreshRate); public unsafe delegate Result xrPerfSettingsSetPerformanceLevelEXT(Session xrSession, PerfSettingsDomainEXT perfDomain, PerfSettingsLevelEXT perfLevel); const int ovrMaxLayerCount = 16; const int ovrMaxNumEyes = 2; const int CPU_LEVEL = 2; const int GPU_LEVEL = 3; const int NUM_MULTI_SAMPLES = 4; public struct ovrRenderer { public ovrFramebuffer[] FrameBuffer = new ovrFramebuffer[ovrMaxNumEyes]; public ovrRenderer() { } } private long ToXrTime(double sec) { return (long)(sec * 1000 * 1000 * 1000); //nSec } private unsafe LocVel GetSpaceLocVel(OxrSpace space, long time) { Result xrResult; OxrSpace currentSpace = (_isTrackFloorLevelEnabled) ? _LocalFloorSpace : _LocalSpace; SpaceVelocity velocity = new SpaceVelocity(StructureType.SpaceVelocity); xrResult = _oxrInstance.LocateSpace(space, currentSpace, time, &velocity, out Posef pose, out SpaceLocationFlags locationFlags); Debug.Assert(xrResult == Result.Success, "LocateSpace"); LocVel lv = new LocVel(); lv.LocationFlags = locationFlags; lv.Pose = pose.ToPose3(); lv.VelocityFlags = velocity.VelocityFlags; lv.LinearVelocity = velocity.LinearVelocity.ToVector3(); lv.AngularVelocity = velocity.AngularVelocity.ToVector3(); return lv; } public static void CreatePerspectiveFieldOfView(float leftTan, float rightTan, float bottomTan, float topTan, float nearPlaneDistance, float farPlaneDistance, out Matrix result) { if (nearPlaneDistance <= 0f) { throw new ArgumentException("nearPlaneDistance <= 0"); } if (farPlaneDistance <= 0f) { throw new ArgumentException("farPlaneDistance <= 0"); } if (nearPlaneDistance >= farPlaneDistance) { throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); } result.M11 = (2f) / (leftTan + rightTan); result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f) / (topTan + bottomTan); result.M21 = result.M23 = result.M24 = 0; result.M31 = (rightTan - leftTan) / (leftTan + rightTan); result.M32 = (topTan - bottomTan) / (bottomTan + topTan); result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); result.M34 = -1; result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance); result.M41 = result.M42 = result.M44 = 0; } public struct LocVel { public SpaceLocationFlags LocationFlags; public Pose3 Pose; public SpaceVelocityFlags VelocityFlags; public Vector3 LinearVelocity; public Vector3 AngularVelocity; } // https://github.com/KhronosGroup/OpenXR-SDK/blob/main/src/common/xr_linear.h static unsafe Vector3f XrVector3f_Set(float value) { Vector3f result; result.X = value; result.Y = value; result.Z = value; return result; } static unsafe Vector3f XrVector3f_Add(Vector3f a, Vector3f b) { Vector3f result; result.X = a.X + b.X; result.Y = a.Y + b.Y; result.Z = a.Z + b.Z; return result; } static unsafe Vector3f XrVector3f_Scale(Vector3f a, float scaleFactor) { Vector3f result; result.X = a.X * scaleFactor; result.Y = a.Y * scaleFactor; result.Z = a.Z * scaleFactor; return result; } static unsafe float XrRcpSqrt(float x) { float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 ) float rcp = (x >= SMALLEST_NON_DENORMAL) ? 1.0f / (float)Math.Sqrt(x) : 1.0f; return rcp; } static unsafe Quaternionf XrQuaternionf_CreateIdentity() { Quaternionf result; result.X = 0.0f; result.Y = 0.0f; result.Z = 0.0f; result.W = 1.0f; return result; } static unsafe Quaternionf XrQuaternionf_CreateFromAxisAngle(Vector3f axis, float angleInRadians) { Quaternionf result; float s = (float)Math.Sin(angleInRadians / 2.0f); float lengthRcp = XrRcpSqrt(axis.X * axis.X + axis.Y * axis.Y + axis.Z * axis.Z); result.X = s * axis.X * lengthRcp; result.Y = s * axis.Y * lengthRcp; result.Z = s * axis.Z * lengthRcp; result.W = (float)Math.Cos(angleInRadians / 2.0f); return result; } static unsafe Quaternionf XrQuaternionf_Multiply(Quaternionf a, Quaternionf b) { Quaternionf result; result.X = (b.W * a.X) + (b.X * a.W) + (b.Y * a.Z) - (b.Z * a.Y); result.Y = (b.W * a.Y) - (b.X * a.Z) + (b.Y * a.W) + (b.Z * a.X); result.Z = (b.W * a.Z) + (b.X * a.Y) - (b.Y * a.X) + (b.Z * a.W); result.W = (b.W * a.W) - (b.X * a.X) - (b.Y * a.Y) - (b.Z * a.Z); return result; } static unsafe Quaternionf XrQuaternionf_Invert(Quaternionf q) { Quaternionf result; result.X = -q.X; result.Y = -q.Y; result.Z = -q.Z; result.W = q.W; return result; } static unsafe Vector3f XrQuaternionf_RotateVector3f(Quaternionf a, Vector3f v) { Quaternionf q = new Quaternionf(v.X, v.Y, v.Z, 0.0f); Quaternionf aq = XrQuaternionf_Multiply(q, a); Quaternionf aInv = XrQuaternionf_Invert(a); Quaternionf aqaInv = XrQuaternionf_Multiply(aInv, aq); Vector3f result; result.X = aqaInv.X; result.Y = aqaInv.Y; result.Z = aqaInv.Z; return result; } static unsafe Vector3f XrQuaternionf_RotateVector3f_Opt(Quaternionf q, Vector3f vec) { Vector4f qvec; qvec.X = +(q.W * vec.X) -(q.Z * vec.Y) +(q.Y * vec.Z); qvec.Y = +(q.Z * vec.X) +(q.W * vec.Y) -(q.X * vec.Z); qvec.Z = -(q.Y * vec.X) +(q.X * vec.Y) +(q.W * vec.Z); qvec.W = -(q.X * vec.X) -(q.Y * vec.Y) -(q.Z * vec.Z); Vector3f result; result.X = +(qvec.X * q.W) -(qvec.Y * q.Z) +(qvec.Z * q.Y) -(qvec.W * q.X); result.Y = +(qvec.X * q.Z) +(qvec.Y * q.W) -(qvec.Z * q.X) -(qvec.W * q.Y); result.Z = -(qvec.X * q.Y) +(qvec.Y * q.X) +(qvec.Z * q.W) -(qvec.W * q.Z); return result; } static unsafe Posef XrPosef_CreateIdentity() { Posef result; result.Orientation = XrQuaternionf_CreateIdentity(); result.Position = XrVector3f_Set(0); return result; } static unsafe Vector3f XrPosef_TransformVector3f(Posef a, Vector3f v) { Vector3f result; Vector3f r0 = XrQuaternionf_RotateVector3f_Opt(a.Orientation, v); result = XrVector3f_Add(r0, a.Position); return result; } static unsafe Posef XrPosef_Multiply(Posef a, Posef b) { Posef result; result.Orientation = XrQuaternionf_Multiply(b.Orientation, a.Orientation); result.Position = XrPosef_TransformVector3f(a, b.Position); return result; } static unsafe Posef XrPosef_Invert(Posef a) { Posef result; result.Orientation = XrQuaternionf_Invert(a.Orientation); Vector3f aPosNeg = XrVector3f_Scale(a.Position, -1.0f); result.Position = XrQuaternionf_RotateVector3f_Opt(result.Orientation, aPosNeg); return result; } // Creates a projection matrix based on the specified FOV. static unsafe Matrix XrMatrixf_CreateProjectionFov(GraphicsBackend graphicsApi, Fovf fov, float nearZ, float farZ) { float tanLeft = (float)Math.Tan(fov.AngleLeft); float tanRight = (float)Math.Tan(fov.AngleRight); float tanDown = (float)Math.Tan(fov.AngleDown); float tanUp = (float)Math.Tan(fov.AngleUp); Matrix result; result = XrMatrixf_CreateProjection(graphicsApi, tanLeft, tanRight, tanUp, tanDown, nearZ, farZ); return result; } // Creates a projection matrix based on the specified dimensions. // The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API. // The far plane is placed at infinity if farZ <= nearZ. // An infinite projection matrix is preferred for rasterization because, except for // things *right* up against the near plane, it always provides better precision: // "Tightening the Precision of Perspective Rendering" // Paul Upchurch, Mathieu Desbrun // Journal of Graphics Tools, Volume 16, Issue 1, 2012 static unsafe Matrix XrMatrixf_CreateProjection(GraphicsBackend graphicsApi, float tanAngleLeft, float tanAngleRight, float tanAngleUp, float tanAngleDown, float nearZ, float farZ) { float tanAngleWidth = tanAngleRight - tanAngleLeft; // Set to tanAngleDown - tanAngleUp for a clip space with positive Y down (Vulkan). // Set to tanAngleUp - tanAngleDown for a clip space with positive Y up (OpenGL / D3D / Metal). float tanAngleHeight = graphicsApi == GraphicsBackend.Vulkan ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown); // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES). // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal). float offsetZ = (graphicsApi == GraphicsBackend.OpenGL || graphicsApi == GraphicsBackend.GLES) ? nearZ : 0; if (farZ <= nearZ) { Matrix result; // place the far plane at infinity result.M11 = 2.0f / tanAngleWidth; result.M12 = 0.0f; result.M13 = 0.0f; result.M14 = 0.0f; result.M21 = 0.0f; result.M22 = 2.0f / tanAngleHeight; result.M23 = 0.0f; result.M24 = 0.0f; result.M31 = (tanAngleRight + tanAngleLeft) / tanAngleWidth; result.M32 = (tanAngleUp + tanAngleDown) / tanAngleHeight; result.M33 = -1.0f; result.M34 = -1.0f; result.M41 = 0.0f; result.M42 = 0.0f; result.M43 = -(nearZ + offsetZ); result.M44 = 0.0f; return result; } else { Matrix result; // normal projection result.M11 = (2f) / tanAngleWidth; result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f) / tanAngleHeight; result.M21 = result.M23 = result.M24 = 0; result.M31 = (tanAngleRight + tanAngleLeft) / tanAngleWidth; result.M32 = (tanAngleUp + tanAngleDown) / tanAngleHeight; result.M33 = (farZ + offsetZ) / (nearZ-farZ); result.M34 = -1; result.M43 = (farZ * (nearZ + offsetZ)) / (nearZ-farZ); result.M41 = result.M42 = result.M44 = 0; return result; } } private unsafe void ovrRenderer_RenderFrame_Acquire(ref ovrFramebuffer frameBuffer) { Result xrResult; // Acquire the swapchain image xrResult = frameBuffer.ColorSwapChain.AcquireSwapchainImage(ref frameBuffer.TextureSwapChainIndex); Debug.Assert(xrResult == Result.Success, "AcquireSwapchainImage"); SwapchainImageWaitInfo waitInfo = new SwapchainImageWaitInfo(StructureType.SwapchainImageWaitInfo); waitInfo.Timeout = 1000000000; /* timeout in nanoseconds */ xrResult = frameBuffer.ColorSwapChain.WaitSwapchainImage(ref waitInfo); int i = 0; while (xrResult == Result.TimeoutExpired) { xrResult = frameBuffer.ColorSwapChain.WaitSwapchainImage(ref waitInfo); i++; Console.WriteLine( " Retry xrWaitSwapchainImage {0} times due to XR_TIMEOUT_EXPIRED (duration {0} seconds)", i, waitInfo.Timeout * (1E-9)); } } private unsafe void ovrRenderer_RenderFrame_Release(ref ovrRenderer renderer, int eye) { fixed (ovrFramebuffer* frameBuffer = &renderer.FrameBuffer[eye]) { Result xrResult; xrResult = frameBuffer->ColorSwapChain.ReleaseSwapchainImage(); } } private void UpdateStageBounds() { Extent2Df stageBounds = default; Result xrResult; xrResult = _oxrSession.GetReferenceSpaceBoundsRect(ReferenceSpaceType.Stage, out stageBounds); if (xrResult != Result.Success) { Console.WriteLine("Stage bounds query failed: using small defaults"); stageBounds.Width = 1.0f; stageBounds.Height = 1.0f; _CurrentStageSpace = _FakeStageSpace; } Console.WriteLine("Stage bounds: width = {0}, depth {1}", stageBounds.Width, stageBounds.Height); float halfWidth = stageBounds.Width * 0.5f; float halfDepth = stageBounds.Height * 0.5f; //ovrGeometry_Destroy(&pappState->Scene.GroundPlane); //ovrGeometry_DestroyVAO(&pappState->Scene.GroundPlane); //ovrGeometry_CreateStagePlane( // &pappState->Scene.GroundPlane, -halfWidth, -halfDepth, halfWidth, halfDepth); //ovrGeometry_CreateVAO(&pappState->Scene.GroundPlane); } public struct ovrTrackedController { public bool Active; public Pose3 Pose; internal Vector3 LinearVelocity; internal void Clear() { this.Active = false; this.Pose = Pose3.Identity; this.LinearVelocity = Vector3.Zero; } } public struct ovrScene { public bool CreatedScene; public ovrTrackedController[] TrackedController = new ovrTrackedController[4]; // left aim, left grip, right aim, right grip public OxrSwapChain CylinderSwapChain; public SwapchainImageOpenGLESKHR[] CylinderSwapChainImage; //internal RenderTargetSwapChain CylinderSwapRenderTarget; public ovrScene() { } } internal abstract class OxrSwapChainDataBase { //internal abstract OvrTextureSwapChain SwapChain { get; } internal abstract RenderTarget2D GetRenderTarget(int eye); internal abstract int SubmitRenderTarget(GraphicsDevice graphicsDevice, RenderTarget2D rt); } ovrScene _Scene = new ovrScene(); private unsafe bool ovrScene_IsCreated(ref ovrScene scene) { return scene.CreatedScene; } private unsafe void ovrScene_Create(ref ovrScene scene) { // Simple ground plane and box geometry. { } // Simple cubemap loaded from ktx file on the sdcard. NOTE: Currently only // handles texture2d or cubemap types. // CubeMapSwapChain { } // Simple checkerboard pattern. // EquirectSwapChain { } // Simple checkerboard pattern. // CylinderSwapChain { } // Simple checkerboard pattern. // QuadSwapChain if (false) { Result xrResult; int CYLINDER_WIDTH = 512; int CYLINDER_HEIGHT = 128; SwapchainCreateInfo swapChainCreateInfo = new SwapchainCreateInfo(StructureType.SwapchainCreateInfo); swapChainCreateInfo.CreateFlags = SwapchainCreateFlags.StaticImageBit; swapChainCreateInfo.UsageFlags = SwapchainUsageFlags.SampledBit | SwapchainUsageFlags.ColorAttachmentBit; swapChainCreateInfo.Format = SRGB8_ALPHA8; swapChainCreateInfo.SampleCount = 1; swapChainCreateInfo.Width = (uint)CYLINDER_WIDTH; swapChainCreateInfo.Height = (uint)CYLINDER_HEIGHT; swapChainCreateInfo.FaceCount = 1; swapChainCreateInfo.ArraySize = 1; swapChainCreateInfo.MipCount = 1; // Create the swapchain. xrResult = _oxrSession.CreateSwapchain(ref swapChainCreateInfo, out scene.CylinderSwapChain); Debug.Assert(xrResult == Result.Success, "CreateSwapchain"); // Get the number of swapchain images. uint length; xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages(scene.CylinderSwapChain.Swapchain, 0, &length, null); Debug.Assert(xrResult == Result.Success, "EnumerateSwapchainImages"); SwapchainImageOpenGLESKHR[] cylinderSwapChainImage = new SwapchainImageOpenGLESKHR[length]; scene.CylinderSwapChainImage = cylinderSwapChainImage; for (uint i = 0; i < length; i++) { scene.CylinderSwapChainImage[i].Type = StructureType.SwapchainImageOpenglESKhr; scene.CylinderSwapChainImage[i].Next = null; } fixed (SwapchainImageOpenGLESKHR* pcylinderSwapChainImage = cylinderSwapChainImage) { xrResult = _oxrInstance.OXRAPI.Api.EnumerateSwapchainImages( scene.CylinderSwapChain.Swapchain, length, &length, (SwapchainImageBaseHeader*)pcylinderSwapChainImage); Debug.Assert(xrResult == Result.Success, "EnumerateSwapchainImages"); } uint[] data = new uint[CYLINDER_WIDTH * CYLINDER_HEIGHT]; fixed (uint* texData = data) { for (int y = 0; y < CYLINDER_HEIGHT; y++) { for (int x = 0; x < CYLINDER_WIDTH; x++) { texData[y * CYLINDER_WIDTH + x] = ((x ^ y) & 64)!=0 ? 0xFF6464F0 : 0xFFF06464; } } for (int y = 0; y < CYLINDER_HEIGHT; y++) { int g = (int)(255.0f * (y / (CYLINDER_HEIGHT - 1.0f))); texData[y * CYLINDER_WIDTH] = (uint)(0xff000000 | (g << 8)); } for (int x = 0; x < CYLINDER_WIDTH; x++) { int r = (int)(255.0f * (x / (CYLINDER_WIDTH - 1.0f))); texData[x] = (uint)(0xff000000 | r); } int texId = (int)scene.CylinderSwapChainImage[0].Image; //scene.CylinderSwapRenderTarget = new RenderTargetSwapChain(_graphics.GraphicsDevice, // new IntPtr(texId), // CYLINDER_WIDTH, // CYLINDER_HEIGHT, // false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents, // PresentInterval.Default // ); //scene.CylinderSwapRenderTarget.SetData(0, // new Rectangle(0,0, CYLINDER_WIDTH, CYLINDER_HEIGHT), // data, 0, data.Length); //var adapter = ((IPlatformGraphicsAdapter)_graphics.GraphicsDevice.Adapter).Strategy.ToConcrete(); //var GL = adapter.Ogl; //GL.BindTexture(OpenGL.TextureTarget.Texture2D, texId); //GL.CheckGLError(); //GL.TexSubImage2D( // OpenGL.TextureTarget.Texture2D, // 0, // 0, // 0, // CYLINDER_WIDTH, // CYLINDER_HEIGHT, // OpenGL.PixelFormat.Rgba, // OpenGL.PixelType.UnsignedByte, // new IntPtr(texData)); //GL.CheckGLError(); //GL.TexParameteri(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureWrapS, (int)OpenGL.TextureWrapMode.ClampToBorder); //GL.CheckGLError(); //GL.TexParameteri(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureWrapT, (int)OpenGL.TextureWrapMode.ClampToBorder); //GL.CheckGLError(); //float[] borderColor = { 0.0f, 0.0f, 0.0f, 0.0f }; //fixed(float* pborderColor = borderColor) //GL.TexParameterfv(OpenGL.TextureTarget.Texture2D, OpenGL.TextureParameterName.TextureBorderColor, pborderColor); //GL.CheckGLError(); //GL.BindTexture(OpenGL.TextureTarget.Texture2D, 0); //GL.CheckGLError(); } // free(texData); uint index = 0; xrResult = scene.CylinderSwapChain.AcquireSwapchainImage(ref index); Debug.Assert(xrResult == Result.Success, "AcquireSwapchainImage"); SwapchainImageWaitInfo waitInfo = new SwapchainImageWaitInfo(StructureType.SwapchainImageWaitInfo); xrResult = scene.CylinderSwapChain.WaitSwapchainImage(ref waitInfo); Debug.Assert(xrResult == Result.Success, "WaitSwapchainImage"); xrResult = scene.CylinderSwapChain.ReleaseSwapchainImage(); Debug.Assert(xrResult == Result.Success, "ReleaseSwapchainImage"); } scene.CreatedScene = true; return; } private unsafe void ovrApp_HandleXrEvents() { Result xrResult; EventDataBuffer eventDataBuffer = new EventDataBuffer(StructureType.EventDataBuffer); // Poll for events for (; ; ) { EventDataBaseHeader* baseEventHeader = (EventDataBaseHeader*)(&eventDataBuffer); baseEventHeader->Type = StructureType.EventDataBuffer; baseEventHeader->Next = null; Result r; r = _oxrInstance.PollEvent(ref eventDataBuffer); if (r != Result.Success) break; switch (baseEventHeader->Type) { case StructureType.EventDataEventsLost: Console.WriteLine("xrPollEvent: received XR_TYPE_EVENT_DATA_EVENTS_LOST event"); break; case StructureType.EventDataInstanceLossPending: { EventDataInstanceLossPending* instance_loss_pending_event = (EventDataInstanceLossPending*)(baseEventHeader); Console.WriteLine( "xrPollEvent: received XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING event: time {0}", instance_loss_pending_event->LossTime // FromXrTime(instance_loss_pending_event->LossTime) ); } break; case StructureType.EventDataInteractionProfileChanged: Console.WriteLine("xrPollEvent: received XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED event"); break; case StructureType.EventDataPerfSettingsExt: { EventDataPerfSettingsEXT* perf_settings_event = (EventDataPerfSettingsEXT*)(baseEventHeader); Console.WriteLine( "xrPollEvent: received XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT event: type {0} subdomain {1} : level {2} -> level {3}", perf_settings_event->Type, perf_settings_event->SubDomain, perf_settings_event->FromLevel, perf_settings_event->ToLevel); } break; case StructureType.EventDataDisplayRefreshRateChangedFB: { EventDataDisplayRefreshRateChangedFB* refresh_rate_changed_event = (EventDataDisplayRefreshRateChangedFB*)(baseEventHeader); Console.WriteLine( "xrPollEvent: received XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB event: fromRate {0} -> toRate {1}", refresh_rate_changed_event->FromDisplayRefreshRate, refresh_rate_changed_event->ToDisplayRefreshRate); } break; case StructureType.EventDataReferenceSpaceChangePending: { EventDataReferenceSpaceChangePending* ref_space_change_event = (EventDataReferenceSpaceChangePending*)(baseEventHeader); Console.WriteLine( "xrPollEvent: received XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING event: changed space: {0} for session {1} at time {2}", ref_space_change_event->ReferenceSpaceType, ref_space_change_event->Session.Handle, ref_space_change_event->ChangeTime //FromXrTime(ref_space_change_event->ChangeTime) ); } break; case StructureType.EventDataSessionStateChanged: { EventDataSessionStateChanged* session_state_changed_event = (EventDataSessionStateChanged*)(baseEventHeader); Console.WriteLine( "xrPollEvent: received XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: {0} for session {1} at time {2}", session_state_changed_event->State, session_state_changed_event->Session.Handle, session_state_changed_event->Time //FromXrTime(session_state_changed_event->Time) ); this._sessionState = session_state_changed_event->State; switch (session_state_changed_event->State) { case SessionState.Idle: break; case SessionState.Focused: _Focused = true; break; case SessionState.Visible: _Focused = false; break; case SessionState.Ready: ovrApp_HandleSessionStateChangesReady(session_state_changed_event->State); break; case SessionState.Stopping: ovrApp_HandleSessionStateChangesStopping(session_state_changed_event->State); break; case SessionState.Synchronized: break; case SessionState.LossPending: break; case SessionState.Exiting: break; default: Console.WriteLine("Unknown State: {0}.", session_state_changed_event->State); break; } } break; default: Console.WriteLine("xrPollEvent: Unknown event {0}." , baseEventHeader->Type); break; } } } ViewConfigurationProperties _viewportConfig; private bool _Resumed; private bool _Focused; private bool _SessionActive; SessionState _sessionState; SessionState IOculusDeviceStrategy.SessionState { get { return _sessionState; } } private unsafe void ovrApp_HandleSessionStateChangesReady(SessionState state) { //Debug.Assert(_Resumed); Debug.Assert(_SessionActive == false); Result xrResult; xrResult = _oxrSession.BeginSession(_viewportConfig.ViewConfigurationType); Debug.Assert(xrResult == Result.Success, "BeginSession"); _SessionActive = (xrResult == Result.Success); // Set session state once we have entered VR mode and have a valid session object. if (_SessionActive) { PerfSettingsLevelEXT cpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt; switch (_CpuLevel) { case 0: cpuPerfLevel = PerfSettingsLevelEXT.PowerSavingsExt; break; case 1: cpuPerfLevel = PerfSettingsLevelEXT.SustainedLowExt; break; case 2: cpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt; break; case 3: cpuPerfLevel = PerfSettingsLevelEXT.BoostExt; break; default: Console.WriteLine("Invalid CPU level {0}", _CpuLevel); break; } PerfSettingsLevelEXT gpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt; switch (_GpuLevel) { case 0: gpuPerfLevel = PerfSettingsLevelEXT.PowerSavingsExt; break; case 1: gpuPerfLevel = PerfSettingsLevelEXT.SustainedLowExt; break; case 2: gpuPerfLevel = PerfSettingsLevelEXT.SustainedHighExt; break; case 3: gpuPerfLevel = PerfSettingsLevelEXT.BoostExt; break; default: Console.WriteLine("Invalid GPU level {0}", _GpuLevel); break; } xrResult = _oxrInstance.GetInstanceProcAddr( "xrPerfSettingsSetPerformanceLevelEXT", out xrPerfSettingsSetPerformanceLevelEXT pfnPerfSettingsSetPerformanceLevelEXT); Debug.Assert(xrResult == Result.Success, "xrPerfSettingsSetPerformanceLevelEXT"); xrResult = pfnPerfSettingsSetPerformanceLevelEXT( _oxrSession.Session, PerfSettingsDomainEXT.CpuExt, cpuPerfLevel); Debug.Assert(xrResult == Result.Success, "pfnPerfSettingsSetPerformanceLevelEXT"); xrResult = pfnPerfSettingsSetPerformanceLevelEXT( _oxrSession.Session, PerfSettingsDomainEXT.GpuExt, gpuPerfLevel); Debug.Assert(xrResult == Result.Success, "pfnPerfSettingsSetPerformanceLevelEXT"); } } private void ovrApp_HandleSessionStateChangesStopping(SessionState state) { Debug.Assert(_Resumed == false); Debug.Assert(_SessionActive); Result xrResult; xrResult = _oxrSession.EndSession(); Debug.Assert(xrResult == Result.Success, "EndSession"); _SessionActive = false; } private unsafe void OnDisplayLost() { //OvrGraphicsLuid prevGraphicsLuid = _ovrSession.GraphicsLuid; // destroy session //_ovrSession.Dispose(); //_ovrSession = null; //_ovrClient.Dispose(); //_ovrClient = null; _deviceState = XRDeviceState.Disabled; } unsafe public struct ovrFramebuffer { public int Width; public int Height; public int Multisamples; public uint TextureSwapChainLength; public uint TextureSwapChainIndex; public OxrSwapChain ColorSwapChain; public SwapchainImageOpenGLESKHR[] ColorSwapChainImage; public RenderTarget2D RenderTarget; internal int[] FrameBuffers; } [StructLayout(LayoutKind.Explicit)] public struct ovrCompositorLayer_Union { [FieldOffset(0)] public CompositionLayerBaseHeader BaseHeader; [FieldOffset(0)] public CompositionLayerProjection Projection; [FieldOffset(0)] public CompositionLayerQuad Quad; [FieldOffset(0)] public CompositionLayerCylinderKHR Cylinder; [FieldOffset(0)] public CompositionLayerCubeKHR Cube; [FieldOffset(0)] public CompositionLayerEquirect2KHR Equirect2; [FieldOffset(0)] public CompositionLayerPassthroughFB PassthroughFB; } public unsafe delegate Result xrCreateFoveationProfileFBDelegate(Session session, FoveationProfileCreateInfoFB* profileCreateInfo, FoveationProfileFB* foveationProfile); public unsafe delegate Result xrDestroyFoveationProfileFBDelegate(FoveationProfileFB* foveationProfile); public unsafe delegate Result xrUpdateSwapchainFBDelegate(Swapchain ColorSwapChainHandle, SwapchainStateBaseHeaderFB* foveationUpdateState); private unsafe bool ovrRenderer_SetFoveation( ref ovrRenderer renderer, FoveationLevelFB level, float verticalOffset, FoveationDynamicFB dynamic ) { Result xrResult; xrResult = _oxrInstance.GetInstanceProcAddr("xrCreateFoveationProfileFB", out xrCreateFoveationProfileFBDelegate Fun_pfnCreateFoveationProfileFB); Debug.Assert(xrResult == Result.Success, "GetInstanceProcAddr"); xrResult = _oxrInstance.GetInstanceProcAddr("xrDestroyFoveationProfileFB", out xrDestroyFoveationProfileFBDelegate Fun_pfnDestroyFoveationProfileFB); Debug.Assert(xrResult == Result.Success, "GetInstanceProcAddr"); PfnVoidFunction pfnUpdateSwapchainFB; xrResult = _oxrInstance.GetInstanceProcAddr("xrUpdateSwapchainFB", out xrUpdateSwapchainFBDelegate Fun_pfnUpdateSwapchainFB); Debug.Assert(xrResult == Result.Success, "GetInstanceProcAddr"); for (int eye = 0; eye < ovrMaxNumEyes; eye++) { FoveationLevelProfileCreateInfoFB levelProfileCreateInfo = new FoveationLevelProfileCreateInfoFB(StructureType.FoveationLevelProfileCreateInfoFB); levelProfileCreateInfo.Level = level; levelProfileCreateInfo.VerticalOffset = verticalOffset; levelProfileCreateInfo.Dynamic = dynamic; FoveationProfileCreateInfoFB profileCreateInfo = new FoveationProfileCreateInfoFB(StructureType.FoveationProfileCreateInfoFB); profileCreateInfo.Next = &levelProfileCreateInfo; FoveationProfileFB foveationProfile = default; xrResult = Fun_pfnCreateFoveationProfileFB(_oxrSession.Session, &profileCreateInfo, &foveationProfile); Debug.Assert(xrResult == Result.Success, "Fun_pfnCreateFoveationProfileFB"); SwapchainStateFoveationFB foveationUpdateState = new SwapchainStateFoveationFB(StructureType.SwapchainStateFoveationFB); foveationUpdateState.Profile = foveationProfile; xrResult = Fun_pfnUpdateSwapchainFB( renderer.FrameBuffer[eye].ColorSwapChain.Swapchain, (SwapchainStateBaseHeaderFB*)&foveationUpdateState); Debug.Assert(xrResult == Result.Success, "Fun_pfnUpdateSwapchainFB"); //xrResult = Fun_pfnDestroyFoveationProfileFB(&foveationProfile); //Debug.Assert(xrResult == Result.Success, "Fun_pfnDestroyFoveationProfileFB"); } return false; } private int CreateDefaultLayer(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, int pixelsPerDisplayPixel //, //out OvrLayerEyeFov layer ) { int ovrResult = 0; //OvrHmdDesc HmdDesc = _ovrSession.GetHmdDesc(); // create layer //layer = default(OvrLayerEyeFov); //layer.Header.Type = OvrLayerType.EyeFov; //layer.Header.Flags = 0; for (int eye = 0; eye < 2; eye++) { //OvrFovPort fov = HmdDesc.DefaultEyeFov[eye]; //OvrSizei texRes = _ovrSession.GetFovTextureSize((OvrEyeType)eye, fov, pixelsPerDisplayPixel); //layer.Viewport[eye] = new OvrRecti(0, 0, texRes.W, texRes.H); //ovrResult = ConcreteOvrSwapChainData.CreateSwapChain( // graphicsDevice, _ovrSession, // texRes.W, texRes.H, // preferredFormat, preferredDepthFormat, preferredMultiSampleCount, // out _swapChainData[eye]); //layer.ColorTexture[eye] = _swapChainData[eye].SwapChain.NativePtr; //OvrEyeRenderDesc renderDesc = _ovrSession.GetRenderDesc((OvrEyeType)eye, fov); //layer.Fov[eye] = renderDesc.Fov; //_hmdToEyePose[eye] = renderDesc.HmdToEyePose; } return 0; } protected override void Dispose(bool disposing) { if (disposing) { if (_passthroughFB != null) _passthroughFB.Dispose(); if (_passthroughLayerFB != null) _passthroughLayerFB.Dispose(); if (_HeadSpace != null) _HeadSpace.Dispose(); if (_LocalSpace != null) _LocalSpace.Dispose(); if (_LocalFloorSpace != null) _LocalFloorSpace.Dispose(); if (_FakeStageSpace != null) _FakeStageSpace.Dispose(); if (_StageSpace != null) _StageSpace.Dispose(); if (_leftControllerAimSpace != null) _leftControllerAimSpace.Dispose(); if (_rightControllerAimSpace != null) _rightControllerAimSpace.Dispose(); if (_leftControllerGripSpace != null) _leftControllerGripSpace.Dispose(); if (_rightControllerGripSpace != null) _rightControllerGripSpace.Dispose(); } _passthroughFB = null; _passthroughLayerFB = null; _HeadSpace = null; _LocalSpace = null; _LocalFloorSpace = null; _FakeStageSpace = null; _StageSpace = null; _CurrentStageSpace = null; _leftControllerAimSpace = null; _rightControllerAimSpace = null; _leftControllerGripSpace = null; _rightControllerGripSpace = null; } } internal static class OpenXRExtensions { public static Vector3 ToVector3(this Vector3f value) { return new Vector3(value.X, value.Y, value.Z); } public static Quaternion ToQuaternion(this Quaternionf value) { return new Quaternion(value.X, value.Y, value.Z, value.W); } public static Pose3 ToPose3(this Posef value) { return new Pose3( value.Orientation.ToQuaternion(), value.Position.ToVector3() ); } public static Vector3f ToVector3f(this Vector3 value) { return new Vector3f(value.X, value.Y, value.Z); } public static Quaternionf ToQuaternionf(this Quaternion value) { return new Quaternionf(value.X, value.Y, value.Z, value.W); } public static Posef ToPosef(this Pose3 value) { return new Posef( value.Orientation.ToQuaternionf(), value.Translation.ToVector3f() ); } } } ================================================ FILE: Platforms/XR/.Oculus/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.Ref/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { public override bool IsVRSupported { get { throw new PlatformNotSupportedException(); } } public override bool IsARSupported { get { throw new PlatformNotSupportedException(); } } public override XRSessionMode SessionMode { get { throw new PlatformNotSupportedException(); } } public override XRDeviceState DeviceState { get { throw new PlatformNotSupportedException(); } } public override bool IsTrackFloorLevelEnabled { get { throw new PlatformNotSupportedException(); } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { throw new PlatformNotSupportedException(); } public override int BeginSessionAsync(XRSessionMode sessionMode) { throw new PlatformNotSupportedException(); } public override int BeginFrame() { throw new PlatformNotSupportedException(); } public override HeadsetState GetHeadsetState() { throw new PlatformNotSupportedException(); } public override IEnumerable GetEyes() { throw new PlatformNotSupportedException(); } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { throw new PlatformNotSupportedException(); } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { throw new PlatformNotSupportedException(); } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { throw new PlatformNotSupportedException(); } public override int EndFrame() { throw new PlatformNotSupportedException(); } public override HandsState GetHandsState() { throw new PlatformNotSupportedException(); } public override void EndSessionAsync() { throw new PlatformNotSupportedException(); } public override void TrackFloorLevelAsync(bool enable) { throw new PlatformNotSupportedException(); } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { throw new PlatformNotSupportedException(); } internal GamePadState GetGamePadState(TouchControllerType controllerType) { throw new PlatformNotSupportedException(); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { throw new PlatformNotSupportedException(); } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.Ref/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.SDL2/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; bool _isTrackFloorLevelEnabled = false; HandsState _handsState; HeadsetState _headsetState; public override bool IsVRSupported { get { return false; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return XRDeviceState.Disabled; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._graphics = graphics; } public override int BeginSessionAsync(XRSessionMode sessionMode) { return -1; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.None; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { return null; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: case XREye.Left: case XREye.Right: throw new NotImplementedException(); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { Debug.Assert(null == rt); return; } public override int EndFrame() { return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { controllerType = (TouchControllerType)0; gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = default(Buttons); hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } internal GamePadState GetGamePadState(TouchControllerType controllerType) { return default(GamePadState); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.SDL2/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.UAP/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; bool _isTrackFloorLevelEnabled = false; HandsState _handsState; HeadsetState _headsetState; public override bool IsVRSupported { get { return false; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return XRDeviceState.Disabled; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._graphics = graphics; } public override int BeginSessionAsync(XRSessionMode sessionMode) { return -1; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.None; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { return null; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: case XREye.Left: case XREye.Right: throw new NotImplementedException(); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { Debug.Assert(null == rt); return; } public override int EndFrame() { return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { controllerType = (TouchControllerType)0; gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = default(Buttons); hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } internal GamePadState GetGamePadState(TouchControllerType controllerType) { return default(GamePadState); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.UAP/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.WindowsDX/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; bool _isTrackFloorLevelEnabled = false; HandsState _handsState; HeadsetState _headsetState; public override bool IsVRSupported { get { return false; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return XRDeviceState.Disabled; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._graphics = graphics; } public override int BeginSessionAsync(XRSessionMode sessionMode) { return -1; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.None; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { return null; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: case XREye.Left: case XREye.Right: throw new NotImplementedException(); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { Debug.Assert(null == rt); return; } public override int EndFrame() { return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { controllerType = (TouchControllerType)0; gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = default(Buttons); hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } internal GamePadState GetGamePadState(TouchControllerType controllerType) { return default(GamePadState); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.WindowsDX/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/XR/.iOS/ConcreteXRDevice.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Input.XR; using Microsoft.Xna.Platform.XR; namespace Microsoft.Xna.Framework.XR { internal class ConcreteXRDevice : XRDeviceStrategy { IGraphicsDeviceService _graphics; XRSessionMode _sessionMode; bool _isTrackFloorLevelEnabled = false; HandsState _handsState; HeadsetState _headsetState; public override bool IsVRSupported { get { return false; } } public override bool IsARSupported { get { return false; } } public override XRSessionMode SessionMode { get { return _sessionMode; } } public override XRDeviceState DeviceState { get { return XRDeviceState.Disabled; } } public override bool IsTrackFloorLevelEnabled { get { return _isTrackFloorLevelEnabled; } } public ConcreteXRDevice(string applicationName, Game game) : this(applicationName, game.Services) { } public ConcreteXRDevice(string applicationName, IServiceProvider services) { IGraphicsDeviceService graphics = services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphics == null) throw new ArgumentNullException("graphics"); this._graphics = graphics; } public override int BeginSessionAsync(XRSessionMode sessionMode) { return -1; } public override int BeginFrame() { return 0; } public override HeadsetState GetHeadsetState() { return _headsetState; } public override IEnumerable GetEyes() { yield return XREye.None; } public override RenderTarget2D GetEyeRenderTarget(XREye eye) { return null; } public override Matrix CreateProjection(XREye eye, float znear, float zfar) { switch (eye) { case XREye.None: case XREye.Left: case XREye.Right: throw new NotImplementedException(); default: throw new ArgumentException("Eye"); } } public override void CommitRenderTarget(XREye eye, RenderTarget2D rt) { Debug.Assert(null == rt); return; } public override int EndFrame() { return 0; } public override HandsState GetHandsState() { return _handsState; } public override void EndSessionAsync() { } public override void TrackFloorLevelAsync(bool enable) { if (enable == true) { throw new NotImplementedException(); } else { _isTrackFloorLevelEnabled = enable; } } internal void GetCapabilities(TouchControllerType controllerType, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport) { controllerType = (TouchControllerType)0; gamePadType = GamePadType.Unknown; displayName = String.Empty; identifier = String.Empty; isConnected = false; buttons = default(Buttons); hasLeftVibrationMotor = false; hasRightVibrationMotor = false; hasVoiceSupport = false; } internal GamePadState GetGamePadState(TouchControllerType controllerType) { return default(GamePadState); } internal bool SetVibration(TouchControllerType controllerType, float amplitude) { bool result = false; return result; } protected override void Dispose(bool disposing) { if (disposing) { } } } } ================================================ FILE: Platforms/XR/.iOS/ConcreteXRFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.XR; namespace Microsoft.Xna.Platform.XR { public sealed class ConcreteXRFactory : XRFactory { public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, IServiceProvider services) { return new ConcreteXRDevice(applicationName, services); } public override XRDeviceStrategy CreateXRDeviceStrategy(string applicationName, Game game) { return new ConcreteXRDevice(applicationName, game); } } } ================================================ FILE: Platforms/build/.Android/nkast.Kni.Platform.Android.GL.targets ================================================ Android Android ================================================ FILE: Platforms/build/.SDL2/MonoGame.Framework.DesktopGL.targets ================================================ DesktopGL DesktopGL ================================================ FILE: Platforms/build/.SDL2/nkast.Kni.Platform.SDL2.GL.targets ================================================ DesktopGL DesktopGL ================================================ FILE: Platforms/build/.UAP/nkast.Kni.Platform.UAP.DX11.targets ================================================ WindowsStoreApp WindowsStoreApp ================================================ FILE: Platforms/build/.WindowsDX/nkast.Kni.Platform.WinForms.DX11.targets ================================================ Windows Windows ================================================ FILE: Platforms/build/.iOS/nkast.Kni.Platform.iOS.GL.targets ================================================ iOS iOS ================================================ FILE: README.md ================================================ # Kni Kni is a simple and powerful .NET framework for creating games for desktop PCs, Mobile devices, Virtual Reality headsets and the Web, using [dotnet](https://dotnet.microsoft.com/) framework & the C# programming language. It is an open-source re-implementation of the discontinued [Microsoft's XNA Framework](https://en.wikipedia.org/wiki/Microsoft_XNA). Kni is a derivative of [MonoGame & XNA Touch](https://github.com/MonoGame/MonoGame). [![Join the chat at Discord](https://img.shields.io/discord/1350735302011912192?logo=discord&label=KNI&link=https%3A%2F%2Fdiscord.gg%2FaTe3W2J4YF)](https://discord.gg/aTe3W2J4YF) * [Build Status](#build-status) * [Supported Platforms](#supported-platforms) * [Support and Contributions](#support-and-contributions) * [Source Code](#source-code) * [Helpful Links](#helpful-links) * [License](#license) ## Supported Platforms We support a growing list of platforms across the desktop, mobile, and VR/AR space. If there is a platform we don't support, please [make a request](https://github.com/MonoGame/MonoGame/issues) or [come help us](CONTRIBUTING.md) add it. * Windows 8.1 and up (OpenGL & DirectX11) * Windows Store Apps (UAP) * Oculus VR (OvrPC/DirectX11/meta link) * Oculus VR/AR (native/OpenGL) * Linux (OpenGL) * macOS 10.15 and up (OpenGL) * Android 6.0 and up (OpenGL) * iPhone/iPad 10.0 and up (OpenGL) * Web Browsers & WebXR (WebGL) ## Support and Contributions If you think you have found a bug or have a feature request, use our [issue tracker](https://github.com/kniengine/kni/issues). Before opening a new issue, please search to see if your problem has already been reported. Try to be as detailed as possible in your issue reports. If you need help using Kni or have other questions we suggest you post on our [discussions forums](https://github.com/kniEngine/kni/discussions). Please do not use the GitHub issue tracker for personal support requests. If you are interested in contributing fixes or features to Kni, please read our [contributors guide](CONTRIBUTING.md) first. ## Source Code The full source code is available here from GitHub: * Clone the source: `git clone https://github.com/kniengine/kni.git` * Set up the submodules: `git submodule update --init` * Open the solution for your target platform to build the game framework. * Open the Tools solution for your development platform to build the pipeline and content tools. For the prerequisites for building from source, please look at the [Requirements](REQUIREMENTS.md) file. A high level breakdown of the components of the framework: * The core framework libraries are located in [src](src). * The base content pipeline library is located in [src/Xna.Framework.Content.Pipeline](src/Xna.Framework.Content.Pipeline). * The Design converters are located in [src/Xna.Framework.Design](src/Xna.Framework.Design). * The platform backend implementations are found in [Platforms](Platforms). * Project templates are in [Templates](Templates). * See [Tests](Tests) for the framework unit tests. * See [Tools/Tests](Tools/MonoGame.Tools.Tests) for the content pipeline and other tool tests. * [mgcb](Tools/MonoGame.Content.Builder) is the command line tool for content processing. * [KNIFXC](Tools/EffectCompiler) is the command line effect compiler tool. * The [pipeline-editor](Tools/Content.Pipeline.Editor.WinForms) tool is a GUI frontend for content processing. ## Helpful Links * Our [issue tracker](https://github.com/kniengine/kni/issues) is on GitHub. * Use [discussions forums](https://github.com/kniEngine/kni/discussions) for support questions. * You can join the [Discord server](https://discord.gg/aTe3W2J4YF) and chat live with the core developers and other users. * Download release and development tools [Releases](https://github.com/kniEngine/kni/releases). * The [XNAGameStudio](https://github.com/kniEngine/XNAGameStudio) repo, contain XNA samples ported to KNI. * The [MonoGame documentation](http://www.monogame.net/documentation/). * Join the [MonoGame Discord server](https://discord.gg/monogame) and the [FNA Discord server](https://discord.gg/fna-xna) and chat live with other users from the community. * If you require modern shader features, check out the [MonoGame Compute Fork](https://github.com/cpt-max/MonoGame). ## License The Kni project is under the [Microsoft Public License](https://opensource.org/licenses/MS-PL) except for a few portions of the code. See the [LICENSE.txt](LICENSE.txt) file for more details. Third-party libraries used by KNI are under their own licenses. Please refer to those libraries for details on the license they use. ## Sponsors ❤️ While KNI is free and open-source, maintaining and expanding the framework requires ongoing effort and resources. We rely on the support of our community to continue delivering top-notch updates, features, and support. By [becoming a Sponsor](https://github.com/sponsors/nkast), you can directly contribute to the growth and sustainability of the KNI Game Framework. User avatar: Mitchel DisveldUser avatar: User avatar: ================================================ FILE: REQUIREMENTS.md ================================================ Depending on the [platform](Documentation/articles/platforms.md) that you are targeting, MonoGame has different sets of requirements. For desktop platforms ==================== MonoGame requires a .NET 6 SDK installation. You can either install it [independently](https://dotnet.microsoft.com/download/dotnet), or by selecting the .NET workload when installing Visual Studio 2022 (version 17.0 and up required). If you are targeting WindowsDX, you are also going to need [the DirectX June 2010 runtime](https://www.microsoft.com/en-us/download/details.aspx?id=8109) for audio and gamepads to work properly. When it comes to IDE, [Visual Studio 2022](https://visualstudio.microsoft.com/vs/), [Visual Studio Code](https://code.visualstudio.com/), and [Visual Studio 2022 for Mac](https://visualstudio.microsoft.com/vs/mac/preview/) are supported (alternatively, you can work directly from the CLI with your code editor of choice). [JetBrains Rider](https://www.jetbrains.com/rider/) should work but isn't officially supported. Desktop development is possible from any operating system supporting the above mentioned software. For UWP platforms ==================== MonoGame requires the latest Windows 10 SDK. You can install it by selecting the Universal App workload when installing Visual Studio 2022. Building and publishing for UWP is only supported with Visual Studio 2022. UWP development is not possible from macOS or Linux. For mobile platforms ==================== MonoGame requires either Xamarin.iOS or Xamarin.Android depending on the target. In Visual Studio 2022 you can install both by selecting the "Mobile development with .NET" workload. In Visual Studio 2022 for Mac you can install the iOS and Android workload separately. Only Visual Studio 2022 or Visual Studio 2022 for Mac are supported in those contexts. Mobile development is not possible from Linux. ================================================ FILE: Templates/Directory.Build.props ================================================ ================================================ FILE: Templates/MonoGame.Templates.CSharp/MonoGame.Templates.CSharp.csproj ================================================ ..\..\Artifacts\MonoGame.Templates.CSharp Template MonoGame project templates This package contains a set of C# templates written for the MonoGame framework. MonoGame.Templates.CSharp netstandard2.0 true false content NU5128 runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Mobile", "Android" ], "name": "MonoGame Android Application", "groupIdentity": "MonoGame.Application.Android", "identity": "MonoGame.Application.Android.CSharp", "shortName": "mgandroid", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for Android using OpenGL." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Activity1.cs ================================================ using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; using Microsoft.Xna.Framework; namespace MGNamespace { [Activity( Label = "@string/app_name", MainLauncher = true, Icon = "@drawable/icon", AlwaysRetainTaskState = true, LaunchMode = LaunchMode.SingleInstance, ScreenOrientation = ScreenOrientation.FullSensor, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize )] public class Activity1 : AndroidGameActivity { private Game1 _game; private View _view; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); _game = new Game1(); _view = _game.Services.GetService(typeof(View)) as View; SetContentView(_view); _game.Run(); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/AndroidManifest.xml ================================================  ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Android /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/MGNamespace.csproj ================================================ net8.0-android 23 Exe com.companyname.MGNamespace 1 1.0 ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.Android.CSharp/Resources/Values/Strings.xml ================================================ MGNamespace ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Desktop", "Windows", "Linux", "macOS" ], "name": "MonoGame Cross-Platform Desktop Application", "groupIdentity": "MonoGame.Application.DesktopGL", "identity": "MonoGame.Application.DesktopGL.CSharp", "shortName": "mgdesktopgl", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for Windows, Linux and macOS using OpenGL." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/MGNamespace.csproj ================================================ WinExe net8.0 Major false false app.manifest Icon.ico ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/Program.cs ================================================  using var game = new MGNamespace.Game1(); game.Run(); ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.DesktopGL.CSharp/app.manifest ================================================  true/pm permonitorv2,permonitor ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Desktop", "Windows", "Xbox", "UWP", "CoreApplication" ], "name": "MonoGame Windows Universal CoreApp Application", "groupIdentity": "MonoGame.Application.UWP.CoreApp", "identity": "MonoGame.Application.UWP.CoreApp.CSharp", "shortName": "mguwpcore", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for Windows Universal using DirectX and setup as a CoreApplication." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace { public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/MGNamespace.csproj ================================================  Debug x86 AppContainerExe Properties MGNamespace MGNamespace UAP 10.0.22621.0 10.0.16299.0 14 true 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true Designer 14.0 6.2.13 ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Package.appxmanifest ================================================  MGNamespace MGNamespace Assets\StoreLogo.png ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Program.cs ================================================ using System; namespace MGNamespace { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// static void Main() { var factory = new MonoGame.Framework.GameFrameworkViewSource(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MGNamespace")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("MGNamespace")] [assembly: AssemblyProduct("MGNamespace")] [assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.CoreApp.CSharp/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Desktop", "Windows", "Xbox", "UWP", "XAML" ], "name": "MonoGame Windows Universal XAML Application", "groupIdentity": "MonoGame.Application.UWP.XAML", "identity": "MonoGame.Application.UWP.XAML.CSharp", "shortName": "mguwpxaml", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for Windows Universal using DirectX and setup in a XAML page." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/App.xaml ================================================  ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/App.xaml.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; namespace MGNamespace { /// /// Provides application-specific behavior to supplement the default Application class. /// sealed partial class App : Application { /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } /// /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(GamePage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } } /// /// Invoked when Navigation to a certain page fails /// /// The Frame which failed navigation /// Details about the navigation failure void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } /// /// Invoked when application execution is being suspended. Application state is saved /// without knowing whether the application will be terminated or resumed with the contents /// of memory still intact. /// /// The source of the suspend request. /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace { public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/GamePage.xaml ================================================  ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/GamePage.xaml.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; namespace MGNamespace { public sealed partial class GamePage : Page { readonly Game1 _game; public GamePage() { this.InitializeComponent(); // Create the game. var launchArguments = string.Empty; _game = MonoGame.Framework.XamlGame.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/MGNamespace.csproj ================================================  Debug x86 AppContainerExe Properties MGNamespace MGNamespace en-US UAP 10.0.22621.0 10.0.16299.0 14 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\WindowsUniversal\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\WindowsUniversal\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference App.xaml GamePage.xaml Designer MSBuild:Compile Designer MSBuild:Compile Designer 6.2.13 14.0 ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Package.appxmanifest ================================================  MGNamespace User Assets\StoreLogo.png ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MGNamespace")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MGNamespace")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.UWP.XAML.CSharp/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Desktop", "Windows", "Linux", "macOS" ], "name": "MonoGame Windows Desktop Application", "groupIdentity": "MonoGame.Application.WindowsDX", "identity": "MonoGame.Application.WindowsDX.CSharp", "shortName": "mgwindowsdx", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for Windows using DirectX." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/MGNamespace.csproj ================================================ WinExe net8.0-windows Major false false true app.manifest Icon.ico ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/Program.cs ================================================  using var game = new MGNamespace.Game1(); game.Run(); ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.WindowsDX.CSharp/app.manifest ================================================  true/pm permonitorv2,permonitor ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Mobile", "iOS" ], "name": "MonoGame iOS Application", "groupIdentity": "MonoGame.Application.iOS", "identity": "MonoGame.Application.iOS.CSharp", "shortName": "mgios", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game project for iOS compatible with iPhone and iPad devices." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:iOS /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Entitlements.plist ================================================  ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Info.plist ================================================ CFBundleDisplayName MGNamespace CFBundleIconFiles GameThumbnail.png CFBundleIdentifier project.MonoGame.MGNamespace MinimumOSVersion 11.0 UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight CFBundleName MGNamespace UIRequiresFullScreen UIStatusBarHidden UILaunchStoryboardName LaunchScreen UIDeviceFamily 1 2 ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/LaunchScreen.storyboard ================================================  ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/MGNamespace.csproj ================================================ net8.0-ios Exe 11.2 iPhone Developer ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Application.iOS.CSharp/Program.cs ================================================ using System; using Foundation; using UIKit; namespace MGNamespace { [Register("AppDelegate")] class Program : UIApplicationDelegate { private static Game1 game; internal static void RunGame() { game = new Game1(); game.Run(); } /// /// The main entry point for the application. /// static void Main(string[] args) { UIApplication.Main(args, null, typeof(Program)); } public override void FinishedLaunching(UIApplication app) { RunGame(); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/.config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "dotnet-mgcb": { "version": "3.8.1.1-develop", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { "version": "3.8.1.1-develop", "commands": [ "mgcb-editor-mac" ] } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Library" ], "name": "MonoGame Game Library", "groupIdentity": "MonoGame.Library", "identity": "MonoGame.Library.CSharp", "shortName": "mglib", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame game library project that can be used to share game code between platforms." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace; public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.CSharp/MGNamespace.csproj ================================================ net8.0 All ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Extensions" ], "name": "MonoGame Content Pipeline Extension", "groupIdentity": "MonoGame.Library.Pipeline", "identity": "MonoGame.Library.Pipeline.Extension.CSharp", "shortName": "mgpipeline", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.csproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame content pipeline extension library project." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/Importer1.cs ================================================ using Microsoft.Xna.Framework.Content.Pipeline; using TImport = System.String; namespace MGNamespace; [ContentImporter(".txt", DisplayName = "Importer1", DefaultProcessor = "Processor1")] public class Importer1 : ContentImporter { public override TImport Import(string filename, ContentImporterContext context) { return default(TImport); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/MGNamespace.csproj ================================================ net8.0 All All ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Pipeline.Extension.CSharp/Processor1.cs ================================================ using Microsoft.Xna.Framework.Content.Pipeline; using TInput = System.String; using TOutput = System.String; namespace MGNamespace; [ContentProcessor(DisplayName = "Processor1")] class Processor1 : ContentProcessor { public override TOutput Process(TInput input, ContentProcessorContext context) { return default(TOutput); } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/.template.config/template.json ================================================ { "author": "MonoGame Team", "classifications": [ "MonoGame", "Games", "Library" ], "name": "MonoGame Shared Library Project", "groupIdentity": "MonoGame.Library.Shared", "identity": "MonoGame.Library.Shared.CSharp", "shortName": "mgshared", "tags": { "language": "C#", "type": "project" }, "primaryOutputs": [ { "path": "MGNamespace.shproj" } ], "sourceName": "MGNamespace", "preferNameDirectory": "true", "description": "A MonoGame shared library project that can be use to share code and content across all targets." } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/Game1.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace MGNamespace { public class Game1 : Game { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; public Game1() { _graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/MGNamespace.projitems ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true 6efba8a9-a407-4029-bdd0-651d22a87386 MGNamespace ================================================ FILE: Templates/MonoGame.Templates.CSharp/content/MonoGame.Library.Shared.CSharp/MGNamespace.shproj ================================================  a0cdbd0e-3a41-42b7-9425-a838bc2c7383 ================================================ FILE: Templates/MonoGame.Templates.VSExtension/MonoGame.Templates.VSExtension.csproj ================================================  17.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) Debug AnyCPU 2.0 {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {9EBC26EB-8412-4723-B715-1F5BCCECD77A} Library Properties MonoGame.Templates.VSExtension MonoGame.Templates.VSExtension v4.8 win true true true false false true true Program $(DevEnvDir)devenv.exe /rootsuffix Exp true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true ..\..\Artifacts\MonoGame.Templates.VSExtension\ TRACE prompt 4 Designer true <_TemplatePackage Include="..\..\Artifacts\NuGet\MonoGame.Templates.CSharp.*.nupkg" /> ProjectTemplates\ ================================================ FILE: Templates/MonoGame.Templates.VSExtension/MonoGameTemplatesVSExtensionPackage.cs ================================================ using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; using Task = System.Threading.Tasks.Task; namespace MonoGame.Templates.VSExtension { /// /// This is the class that implements the package exposed by this assembly. /// /// /// /// The minimum requirement for a class to be considered a valid package for Visual Studio /// is to implement the IVsPackage interface and register itself with the shell. /// This package uses the helper classes defined inside the Managed Package Framework (MPF) /// to do it: it derives from the Package class that provides the implementation of the /// IVsPackage interface and uses the registration attributes defined in the framework to /// register itself and its components with the shell. These attributes tell the pkgdef creation /// utility what data to put into .pkgdef file. /// /// /// To get loaded into VS, the package must be referred by <Asset Type="Microsoft.VisualStudio.VsPackage" ...> in .vsixmanifest file. /// /// [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)] [Guid(MonoGameTemplatesVSExtensionPackage.PackageGuidString)] [ProvideEditorExtension(typeof(EditorFactory), ".mgcb", int.MaxValue, DefaultName = "MGCB Editor")] public sealed class MonoGameTemplatesVSExtensionPackage : AsyncPackage { /// /// MonoGameTemplatesPackage GUID string. /// public const string PackageGuidString = "618bc6bc-7a4c-4c3f-8b0f-d4479c8e8690"; #region Package Members /// /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// /// A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down. /// A provider for progress updates. /// A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method. protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) { RegisterEditorFactory(new EditorFactory()); // When initialized asynchronously, the current thread may be a background thread at this point. // Do any initialization that requires the UI thread after switching to the UI thread. await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); } #endregion } [Guid(EditorFactory.GUID)] public class EditorFactory : IVsEditorFactory { public const string GUID = "3ec6cbd1-65bd-4b26-a758-3b207d048872"; public int CreateEditorInstance(uint grfCreateDoc, string pszMkDocument, string pszPhysicalView, IVsHierarchy pvHier, uint itemid, IntPtr punkDocDataExisting, out IntPtr ppunkDocView, out IntPtr ppunkDocData, out string pbstrEditorCaption, out Guid pguidCmdUI, out int pgrfCDW) { ppunkDocView = IntPtr.Zero; ppunkDocData = IntPtr.Zero; pguidCmdUI = new Guid(GUID); pgrfCDW = 0; pbstrEditorCaption = null; // open MGCB editor here var process = new Process(); process.StartInfo.FileName = "dotnet.exe"; process.StartInfo.Arguments = $"mgcb-editor \"{pszMkDocument}\""; process.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(pszMkDocument); process.StartInfo.CreateNoWindow = true; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); // this while loop freezes Visual Studio /* while (!process.StandardOutput.EndOfStream) { string str = process.StandardOutput.ReadLine(); System.Diagnostics.Debug.WriteLine(str); } */ return VSConstants.S_OK; } public int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp) { return VSConstants.S_OK; } public int Close() { return VSConstants.S_OK; } public int MapLogicalView(ref Guid rguidLogicalView, out string pbstrPhysicalView) { pbstrPhysicalView = null; return VSConstants.S_OK; } } } ================================================ FILE: Templates/MonoGame.Templates.VSExtension/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MonoGame.Templates.VSExtension")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MonoGame.Templates.VSExtension")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/MonoGame.Templates.VSExtension/Templates.pkgdef ================================================ [$RootKey$\TemplateEngine\Templates\MonoGame.Templates.VSExtension\3.8.1.1] "InstalledPath"="$PackageFolder$\ProjectTemplates" ================================================ FILE: Templates/MonoGame.Templates.VSExtension/source.extension.vsixmanifest ================================================ MonoGame Framework C# project templates This extension contains the C# project templates for using the MonoGame Framework .NET,C#,Game development,Templates,Games,Gamedev,Project,Mono,MonoGame amd64 ================================================ FILE: Templates/VisualStudio2022/ItemTemplates/DrawableGameComponent/DrawableGameComponent.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace $rootnamespace$ { internal class $safeitemname$ : DrawableGameComponent { public $safeitemname$(Game game) : base(game) { } /// Initializes the component. Used to load non-graphical resources. public override void Initialize() { base.Initialize(); } /// Load graphical resources needed by this component. protected override void LoadContent() { } /// Unload graphical resources needed by this component. protected override void UnloadContent() { } /// Update the component. /// GameTime of the Game. public override void Update(GameTime gameTime) { } /// Draw this component. /// The time elapsed since the last call to Draw. public override void Draw(GameTime gameTime) { } } } ================================================ FILE: Templates/VisualStudio2022/ItemTemplates/DrawableGameComponent/DrawableGameComponent.vstemplate ================================================ DrawableGameComponent.cs DrawableGameComponent item (KNI) DrawableGameComponent for KNI CSharp 40010 TemplateIcon.png DrawableGameComponent.cs ================================================ FILE: Templates/VisualStudio2022/ItemTemplates/GameComponent/GameComponent.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace $rootnamespace$ { internal class $safeitemname$ : GameComponent { public $safeitemname$(Game game) : base(game) { } /// Initializes the component. Used to load non-graphical resources. public override void Initialize() { base.Initialize(); } /// Update the component. /// GameTime of the Game. public override void Update(GameTime gameTime) { } } } ================================================ FILE: Templates/VisualStudio2022/ItemTemplates/GameComponent/GameComponent.vstemplate ================================================ GameComponent.cs GameComponent item (KNI) GameComponent for KNI CSharp 40020 TemplateIcon.png GameComponent.cs ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $safeprojectname$ { [Activity(Label = "$projectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize , ScreenOrientation = ScreenOrientation.FullSensor )] public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new $safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/AndroidManifest.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Application.csproj ================================================  false net8.0-android $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$safeprojectname$ 1 1.0 .m4a True ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Android /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Game.vstemplate ================================================ KNI Android Project (.net8) A KNI game project for Android. CSharp KNI csharp android games KNI mobile 1 43201 true Game true Enabled true TemplateIcon.png true Directory.Build.props AndroidManifest.xml Activity.cs Game.cs Content.mgcb AboutAssets.txt AboutResources.txt Icon.png Splash.png Resource.Designer.cs Strings.xml Styles.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Resource.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace $safeprojectname$ { public partial class Resource { public partial class Attribute { private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; private Style() { } } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Values/Strings.xml ================================================ $safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Android.NetCore/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/App.razor ================================================  Not found

Sorry, there's nothing at this address.

================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Application.csproj ================================================ false net8.0 disable disable $safeprojectname$ $safeprojectname$ $(DefineConstants);BLAZORGL BlazorGL false ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:BlazorGL /config: /profile:Reach /compress:True #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Game.vstemplate ================================================ KNI Web browser Platform Project (.net8) A KNI game project for Blazor webassembly using WebGL. CSharp KNI csharp web games KNI web 1 43300 true Game true Enabled true TemplateIcon.png true _Imports.razor App.razor Directory.Build.props Game.cs MainLayout.razor MainLayout.razor.css Program.cs Content.mgcb Index.razor Index.razor.cs launchSettings.json app.css bootstrap.min.css bootstrap.min.css.map decode.min.js streamProcessor.js micProcessor.js favicon.ico kni.png index.html ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/MainLayout.razor.css ================================================ .page { position: relative; display: flex; flex-direction: column; } main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row ::deep .btn-link { white-space: nowrap; margin-left: 1.5rem; text-decoration: none; } .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { text-decoration: underline; } .top-row ::deep a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row ::deep a, .top-row ::deep .btn-link { margin-left: 0; } } @media (min-width: 641px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .top-row.auth ::deep a:first-child { flex: 1; text-align: right; width: 0; } .top-row, article { padding-left: 2rem !important; padding-right: 1.5rem !important; } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Pages/Index.razor ================================================ @page "/" @page "/index.html" @inject IJSRuntime JsRuntime @using nkast.Wasm.Canvas $projectname$
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Pages/Index.razor.cs ================================================ using System; using Microsoft.JSInterop; using Microsoft.Xna.Framework; namespace $safeprojectname$.Pages { public partial class Index { Game _game; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { JsRuntime.InvokeAsync("initRenderJS", DotNetObjectReference.Create(this)); } } [JSInvokable] public void TickDotNet() { // init game if (_game == null) { _game = new $safeprojectname$Game(); _game.Run(); } // run gameloop _game.Tick(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Program.cs ================================================ using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; namespace $safeprojectname$ { internal class Program { private static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddScoped(sp => new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:56897", "sslPort": 0 } }, "profiles": { "$safeprojectname$": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5259", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using nkast.Wasm.Canvas @using $safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/Content/Content.txt ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/css/app.css ================================================  html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } h1:focus { outline: none; } a, .btn-link { color: #0077cc; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } .blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; } .blazor-error-boundary::after { content: "An error has occurred." } #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; /* Disable text highlighting and magnifying glass on iPhone/webkit */ -webkit-user-select: none; } #canvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/index.html ================================================  $projectname$
Made with
Kni
loading . . .   
An unhandled error has occurred. Reload x
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/decode.js ================================================ /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @typedef {!Object} Options * @property {?Int8Array} customDictionary */ let Options; /** * Private scope / static initializer for decoder. * * @return {function(!Int8Array, ?Options=):!Int8Array} */ let makeBrotliDecode = () => { /* GENERATED CODE BEGIN */ /** @type {!Int32Array} */ const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); /** @type {!Int32Array} */ const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); /** @type {!Int32Array} */ const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); /** @type {!Int32Array} */ const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); /** @type {!Int32Array} */ const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); /** @type {!Int16Array} */ const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); /** @type {!Int16Array} */ const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); /** @type {!Int16Array} */ const CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { let /** @type {number} */ result = -1; let /** @type {number} */ step = 16; while (step > 0) { if ((i >>> step) !== 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw new Error("maxDistance is too small"); } const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4; const /** @type {number} */ ndistbits = log2floor(offset) - 1; const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24); const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (let /** @type {number} */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) { let /** @type {number} */ rangeIdx = cmdCode >>> 6; let /** @type {number} */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode]; const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); const /** @type {number} */ index = cmdCode * 4; cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { const /** @type {number} */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 0) { return 16; } let /** @type {number} */ n = readFewBits(s, 3); if (n !== 0) { return 17 + n; } n = readFewBits(s, 3); if (n !== 0) { if (n === 1) { if (largeWindowEnabled === 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) === 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @return {void} */ function enableEagerOutput(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isEager = 1; } /** * @param {!State} s * @return {void} */ function enableLargeWindow(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isLargeWindow = 1; } /** * @param {!State} s * @param {!Int8Array} data * @return {void} */ function attachDictionaryChunk(s, data) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } if (s.cdNumChunks === 0) { s.cdChunks = new Array(16); s.cdChunkOffsets = new Int32Array(16); s.cdBlockBits = -1; } if (s.cdNumChunks === 15) { throw new Error("Too many dictionary chunks"); } s.cdChunks[s.cdNumChunks] = data; s.cdNumChunks++; s.cdTotalSize += data.length; s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState !== 0) { throw new Error("State MUST be uninitialized"); } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState === 0) { throw new Error("State MUST be initialized"); } if (s.runningState === 11) { return; } s.runningState = 11; if (s.input !== null) { s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) !== 0) { const /** @type {number} */ n = readFewBits(s, 3); if (n === 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) { return; } const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles === 7) { s.isMetadata = 1; if (readFewBits(s, 1) !== 0) { throw new Error("Corrupted reserved bit"); } const /** @type {number} */ sizeBytes = readFewBits(s, 2); if (sizeBytes === 0) { return; } for (let /** @type {number} */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 8); if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 8); } } else { for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 4); if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd === 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { let /** @type {number} */ offset = tableGroup[tableIdx]; const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; const /** @type {number} */ bits = tableGroup[offset] >> 16; const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; const /** @type {number} */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s); const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { const /** @type {number} */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { const /** @type {!Int32Array} */ mtf = new Int32Array(256); for (let /** @type {number} */ i = 0; i < 256; i++) { mtf[i] = i; } for (let /** @type {number} */ i = 0; i < vLen; i++) { const /** @type {number} */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index !== 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { let /** @type {number} */ symbol = 0; let /** @type {number} */ prevCodeLen = 8; let /** @type {number} */ repeat = 0; let /** @type {number} */ repeatCodeLen = 0; let /** @type {number} */ space = 32768; const /** @type {!Int32Array} */ table = new Int32Array(33); const /** @type {number} */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; const /** @type {number} */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen !== 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { const /** @type {number} */ extraBits = codeLen - 14; let /** @type {number} */ newLen = 0; if (codeLen === 16) { newLen = prevCodeLen; } if (repeatCodeLen !== newLen) { repeat = 0; repeatCodeLen = newLen; } const /** @type {number} */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; const /** @type {number} */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw new Error("symbol + repeatDelta > numSymbols"); } for (let /** @type {number} */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen !== 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space !== 0) { throw new Error("Unused space"); } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (let /** @type {number} */ i = 0; i < length - 1; ++i) { for (let /** @type {number} */ j = i + 1; j < length; ++j) { if (symbols[i] === symbols[j]) { throw new Error("Duplicate simple Huffman code symbol"); } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ symbols = new Int32Array(4); const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1); const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1; for (let /** @type {number} */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw new Error("Can't readHuffmanCode"); } symbols[i] = symbol; } checkDupes(symbols, numSymbols); let /** @type {number} */ histogramId = numSymbols; if (numSymbols === 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; default: break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18); let /** @type {number} */ space = 32; let /** @type {number} */ numCodes = 0; for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) { const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v !== 0) { space -= (32 >> v); numCodes++; } } if (space !== 0 && numCodes !== 1) { throw new Error("Corrupted Huffman code histogram"); } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip === 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees === 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ useRleForZeros = readFewBits(s, 1); let /** @type {number} */ maxRunLengthPrefix = 0; if (useRleForZeros !== 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix; const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1); const /** @type {number} */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (let /** @type {number} */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(table, tableIdx, s); if (code === 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ reps = (1 << code) + readFewBits(s, code); while (reps !== 0) { if (i >= contextMapSize) { throw new Error("Corrupted context map"); } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { const /** @type {!Int32Array} */ ringBuffers = s.rings; const /** @type {number} */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType === 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType === 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); const /** @type {number} */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; const /** @type {number} */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { let /** @type {number} */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { const /** @type {number} */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37; const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length !== 0) { newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd !== 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) { return; } if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata !== 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata !== 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { let /** @type {number} */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; const /** @type {number} */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits; const /** @type {!Int32Array} */ distOffset = s.distOffset; const /** @type {number} */ npostfix = s.distancePostfixBits; const /** @type {number} */ ndirect = s.numDirectDistanceCodes; const /** @type {number} */ postfix = 1 << npostfix; let /** @type {number} */ bits = 1; let /** @type {number} */ half = 0; let /** @type {number} */ i = 16; for (let /** @type {number} */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (let /** @type {number} */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) { const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] !== j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow === 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength); copyRawBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos === s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite !== 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize); let /** @type {number} */ next = n; for (let /** @type {number} */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { let /** @type {number} */ result = s.ringBufferSize; if (s.isEager !== 0) { result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @param {number} fence * @return {void} */ function doUseDictionary(s, fence) { if (s.distance > 0x7FFFFFFC) { throw new Error("Invalid backward reference"); } const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize; if (address < 0) { initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength); s.runningState = 14; } else { const /** @type {!ByteBuffer} */ dictionaryData = data; const /** @type {number} */ wordLength = s.copyLength; if (wordLength > 31) { throw new Error("Invalid backward reference"); } const /** @type {number} */ shift = sizeBits[wordLength]; if (shift === 0) { throw new Error("Invalid backward reference"); } let /** @type {number} */ offset = offsets[wordLength]; const /** @type {number} */ mask = (1 << shift) - 1; const /** @type {number} */ wordIdx = address & mask; const /** @type {number} */ transformIdx = address >>> shift; offset += wordIdx * wordLength; const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS; if (transformIdx >= transforms.numTransforms) { throw new Error("Invalid backward reference"); } const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; return; } s.runningState = 4; } } /** * @param {!State} s * @return {void} */ function initializeCompoundDictionary(s) { s.cdBlockMap = new Int8Array(256); let /** @type {number} */ blockBits = 8; while (((s.cdTotalSize - 1) >>> blockBits) !== 0) { blockBits++; } blockBits -= 8; s.cdBlockBits = blockBits; let /** @type {number} */ cursor = 0; let /** @type {number} */ index = 0; while (cursor < s.cdTotalSize) { while (s.cdChunkOffsets[index + 1] < cursor) { index++; } s.cdBlockMap[cursor >>> blockBits] = index; cursor += 1 << blockBits; } } /** * @param {!State} s * @param {number} address * @param {number} length * @return {void} */ function initializeCompoundDictionaryCopy(s, address, length) { if (s.cdBlockBits === -1) { initializeCompoundDictionary(s); } let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits]; while (address >= s.cdChunkOffsets[index + 1]) { index++; } if (s.cdTotalSize > address + length) { throw new Error("Invalid backward reference"); } s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; s.metaBlockLength -= length; s.cdBrIndex = index; s.cdBrOffset = address - s.cdChunkOffsets[index]; s.cdBrLength = length; s.cdBrCopied = 0; } /** * @param {!State} s * @param {number} fence * @return {number} */ function copyFromCompoundDictionary(s, fence) { let /** @type {number} */ pos = s.pos; const /** @type {number} */ origPos = pos; while (s.cdBrLength !== s.cdBrCopied) { const /** @type {number} */ space = fence - pos; const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex]; const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset; let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied; if (length > remChunkLength) { length = remChunkLength; } if (length > space) { length = space; } s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos); pos += length; s.cdBrOffset += length; s.cdBrCopied += length; if (length === remChunkLength) { s.cdBrIndex++; s.cdBrOffset = 0; } if (pos >= fence) { break; } } return pos - origPos; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState === 0) { throw new Error("Can't decompress until initialized"); } if (s.runningState === 11) { throw new Error("Can't decompress after close"); } if (s.runningState === 1) { const /** @type {number} */ windowBits = decodeWindowBits(s); if (windowBits === -1) { throw new Error("Invalid 'windowBits' code"); } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } let /** @type {number} */ fence = calculateFence(s); let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1; let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; while (s.runningState !== 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength === 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext !== 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState !== 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } let /** @type {number} */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength === 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw new Error("Negative distance"); } } else { const /** @type {number} */ extraBits = s.distExtraBits[distanceCode]; let /** @type {number} */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw new Error("Invalid backward reference"); } s.j = 0; s.runningState = 8; case 8: let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask; let /** @type {number} */ dst = s.pos; const /** @type {number} */ copyLength = s.copyLength - s.j; const /** @type {number} */ srcEnd = src + copyLength; const /** @type {number} */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (let /** @type {number} */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState === 8) { s.runningState = 4; } continue; case 9: doUseDictionary(s, fence); continue; case 14: s.pos += copyFromCompoundDictionary(s, fence); if (s.pos >= fence) { s.nextRunningState = 14; s.runningState = 12; return; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) === 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw new Error("Unexpected state " + valueOf(s.runningState)); } } if (s.runningState === 10) { if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } /** @type {!Transforms} */ const RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {string} prefixSuffixSrc * @param {string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { const /** @type {number} */ n = prefixSuffixSrc.length; let /** @type {number} */ index = 1; let /** @type {number} */ j = 0; for (let /** @type {number} */ i = 0; i < n; ++i) { const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i); if (c === 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (let /** @type {number} */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { let /** @type {number} */ offset = dstOffset; const /** @type {!Int32Array} */ triplets = transforms.triplets; const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage; const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads; const /** @type {number} */ transformOffset = 3 * transformIndex; const /** @type {number} */ prefixIdx = triplets[transformOffset]; const /** @type {number} */ transformType = triplets[transformOffset + 1]; const /** @type {number} */ suffixIdx = triplets[transformOffset + 2]; let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx]; const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx]; const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; let /** @type {number} */ omitFirst = transformType - 11; let /** @type {number} */ omitLast = transformType; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix !== prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; let /** @type {number} */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType === 10 || transformType === 11) { let /** @type {number} */ uppercaseOffset = offset - len; if (transformType === 10) { len = 1; } while (len > 0) { const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType === 21 || transformType === 22) { let /** @type {number} */ shiftOffset = offset - len; const /** @type {number} */ param = transforms.params[transformIndex]; let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { let /** @type {number} */ step = 1; const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) { } else if (c0 < 0xE0) { if (len >= 2) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; const /** @type {number} */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType === 21) { len = 0; } } } while (suffix !== suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { let /** @type {number} */ step = 1 << (len - 1); while ((key & step) !== 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { let /** @type {number} */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { const /** @type {number} */ tableOffset = tableGroup[tableIdx]; let /** @type {number} */ key; const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize); const /** @type {!Int32Array} */ count = new Int32Array(16); const /** @type {!Int32Array} */ offset = new Int32Array(16); let /** @type {number} */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (let /** @type {number} */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] !== 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } let /** @type {number} */ tableBits = rootBits; let /** @type {number} */ tableSize = 1 << tableBits; let /** @type {number} */ totalSize = tableSize; if (offset[15] === 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } const /** @type {number} */ mask = totalSize - 1; let /** @type {number} */ low = -1; let /** @type {number} */ currentOffset = tableOffset; for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) !== low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached !== 0) { if (halfAvailable(s) >= -2) { return; } throw new Error("No more input"); } const /** @type {number} */ readOffset = s.halfOffset << 1; let /** @type {number} */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer; const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached === 0) { return; } const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw new Error("Read after end"); } if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) { throw new Error("Unused bytes after end"); } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { const /** @type {number} */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset === 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { const /** @type {number} */ padding = (32 - s.bitOffset) & 7; if (padding !== 0) { const /** @type {number} */ paddingBits = readFewBits(s, padding); if (paddingBits !== 0) { throw new Error("Corrupted padding bits"); } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { let /** @type {number} */ limit = 2048; if (s.endOfStreamReached !== 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyRawBytes(s, data, offset, length) { if ((s.bitOffset & 7) !== 0) { throw new Error("Unaligned copyBytes"); } while ((s.bitOffset !== 32) && (length !== 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length === 0) { return; } const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { const /** @type {number} */ readOffset = s.halfOffset << 1; const /** @type {number} */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length === 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length !== 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { const /** @type {number} */ len = readInput(s.input, data, offset, length); if (len === -1) { throw new Error("Unexpected end of input"); } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer; const /** @type {number} */ halfLen = byteLen >> 1; const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer; for (let /** @type {number} */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } /** @type {!Int32Array} */ const LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {string} map * @param {string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (let /** @type {number} */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (let /** @type {number} */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } let /** @type {number} */ offset = 1280; for (let /** @type {number} */ k = 0; k < 19; ++k) { const /** @type {number} */ value = k & 3; const /** @type {number} */ rep = rle.charCodeAt(k) - 32; for (let /** @type {number} */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (let /** @type {number} */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {number} */ this.accumulator64 = 0; /** @type {number} */ this.runningState = 0; /** @type {number} */ this.nextRunningState = 0; /** @type {number} */ this.accumulator32 = 0; /** @type {number} */ this.bitOffset = 0; /** @type {number} */ this.halfOffset = 0; /** @type {number} */ this.tailBytes = 0; /** @type {number} */ this.endOfStreamReached = 0; /** @type {number} */ this.metaBlockLength = 0; /** @type {number} */ this.inputEnd = 0; /** @type {number} */ this.isUncompressed = 0; /** @type {number} */ this.isMetadata = 0; /** @type {number} */ this.literalBlockLength = 0; /** @type {number} */ this.numLiteralBlockTypes = 0; /** @type {number} */ this.commandBlockLength = 0; /** @type {number} */ this.numCommandBlockTypes = 0; /** @type {number} */ this.distanceBlockLength = 0; /** @type {number} */ this.numDistanceBlockTypes = 0; /** @type {number} */ this.pos = 0; /** @type {number} */ this.maxDistance = 0; /** @type {number} */ this.distRbIdx = 0; /** @type {number} */ this.trivialLiteralContext = 0; /** @type {number} */ this.literalTreeIdx = 0; /** @type {number} */ this.commandTreeIdx = 0; /** @type {number} */ this.j = 0; /** @type {number} */ this.insertLength = 0; /** @type {number} */ this.contextMapSlice = 0; /** @type {number} */ this.distContextMapSlice = 0; /** @type {number} */ this.contextLookupOffset1 = 0; /** @type {number} */ this.contextLookupOffset2 = 0; /** @type {number} */ this.distanceCode = 0; /** @type {number} */ this.numDirectDistanceCodes = 0; /** @type {number} */ this.distancePostfixBits = 0; /** @type {number} */ this.distance = 0; /** @type {number} */ this.copyLength = 0; /** @type {number} */ this.maxBackwardDistance = 0; /** @type {number} */ this.maxRingBufferSize = 0; /** @type {number} */ this.ringBufferSize = 0; /** @type {number} */ this.expectedTotalSize = 0; /** @type {number} */ this.outputOffset = 0; /** @type {number} */ this.outputLength = 0; /** @type {number} */ this.outputUsed = 0; /** @type {number} */ this.ringBufferBytesWritten = 0; /** @type {number} */ this.ringBufferBytesReady = 0; /** @type {number} */ this.isEager = 0; /** @type {number} */ this.isLargeWindow = 0; /** @type {number} */ this.cdNumChunks = 0; /** @type {number} */ this.cdTotalSize = 0; /** @type {number} */ this.cdBrIndex = 0; /** @type {number} */ this.cdBrOffset = 0; /** @type {number} */ this.cdBrLength = 0; /** @type {number} */ this.cdBrCopied = 0; /** @type {!Array} */ this.cdChunks = new Array(0); /** @type {!Int32Array} */ this.cdChunkOffsets = new Int32Array(0); /** @type {number} */ this.cdBlockBits = 0; /** @type {!Int8Array} */ this.cdBlockMap = new Int8Array(0); /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** @type {!ByteBuffer} */ let data = new Int8Array(0); /** @type {!Int32Array} */ const offsets = new Int32Array(32); /** @type {!Int32Array} */ const sizeBits = new Int32Array(32); /** * @param {!Int8Array} newData * @param {!Int32Array} newSizeBits * @return {void} */ function setData(newData, newSizeBits) { if (newSizeBits.length > 31) { throw new Error("sizeBits length must be at most " + valueOf(31)); } for (let /** @type {number} */ i = 0; i < 4; ++i) { if (newSizeBits[i] !== 0) { throw new Error("first " + valueOf(4) + " must be 0"); } } const /** @type {!Int32Array} */ dictionaryOffsets = offsets; const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits; dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0); let /** @type {number} */ pos = 0; const /** @type {number} */ limit = newData.length; for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) { dictionaryOffsets[i] = pos; const /** @type {number} */ bits = dictionarySizeBits[i]; if (bits !== 0) { if (bits >= 31) { throw new Error("newSizeBits values must be less than 31"); } pos += i << bits; if (pos <= 0 || pos > limit) { throw new Error("newSizeBits is inconsistent: overflow"); } } } for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) { dictionaryOffsets[i] = pos; } if (pos !== limit) { throw new Error("newSizeBits is inconsistent: underflow"); } data = newData; } /** * @param {!Int8Array} dictionary * @param {string} data0 * @param {string} data1 * @param {string} skipFlip * @param {!Int32Array} sizeBits * @param {string} sizeBitsData * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) { const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1); if (dict.length !== dictionary.length) { throw new Error("Corrupted brotli dictionary"); } let /** @type {number} */ offset = 0; const /** @type {number} */ n = skipFlip.length; for (let /** @type {number} */ i = 0; i < n; i += 2) { const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36; const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36; for (let /** @type {number} */ j = 0; j < skip; ++j) { dict[offset] ^= 3; offset++; } for (let /** @type {number} */ j = 0; j < flip; ++j) { dict[offset] ^= 236; offset++; } } for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) { sizeBits[i] = sizeBitsData.charCodeAt(i) - 65; } dictionary.set(dict); } { const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784); const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25); unpackDictionaryData(dictionaryData, "wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sksolpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7F\"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\x0Bwbmhzbqgaltoavpk965YIbub03s{\t\x7F~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0E\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7F.\t\"331*mgltX2^8X^8\tOld#pbow\x0E\t\n\nabmdwqjnabwk*x\x0E\t33s{\t~*8hl9\0effpbg=\x0Ep9,,#X^8wloosovd+*x\tx\x0E\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0E\t~\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0E\tabmgprvfvf>#x~8;3s{8`hjmdx\x0E\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7F\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\x0E\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0E\t?\"pwffo#zlv#k1=\x0E\telqn#ifpvp233&#nfmv-\x0E\t\n\x0E\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0E\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7F\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7F\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0Evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\x0BBl\bQ\x7F\x0BUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\x0BBM\x0B|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7Fm\x04kF\t[]\bPm\bTv\nsI\x0Bpg\t[I\bQp\x04mx\x0B_W\n^M\npe\x0BQ}\x0BGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\x0BGL\x0BxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\x0BwT\ti_\bTg\x04QQ\n|p\x0BXN\bQS\x0BxD\x04QC\bWZ\tpD\x0BVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\x0BQ}\x0BWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\x0BEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\x0Bxs\nXW\twR\x0Bek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\x0B_W\x0BWs\x0BsI\x05m\x7F\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\x0B@@\bTl\bPv\t}t\x04Sw\x04M`\x0BnU\tkW\x0Bed\nqo\x0BxY\tA|\bTz\x0By`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7Fm\tav\tBN\x0Bb\\\tpD\bTf\nY[\tJn\bQy\t[^\x0BWc\x0Byu\x04Dl\x04CJ\x0BWj\x0BHR\t`V\x0BuW\tQy\np@\x0BGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7FR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\x0BQB\x0BWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7F\tea\tdj\x0B]W\nb~\x04M`\twL\bTV\bVH\nt\x7F\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\x0BK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\x0BHR\bPv\x0BLx\x0BEZ\bT\x7F\bTv\tiD\x05oD\x05MU\x0BwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\x0BxY\x04h}\nzk\bWZ\t\x7Fm\x0Be`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\x0BDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\x0BwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\x0BxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\x0BRb\twQ\n]Q\x04QJ\bWg\x0BWa\bQj\ntC\bVH\nYm\x0Bxs\bVK\nel\bWI\x0BxY\x04Cq\ntR\x0BHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\x0Bxs\x0B_W\td{\x0BQ}\tcg\tTz\tA|\tCj\x0BLm\x05N}\x05m\x7F\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\x0BQ}\bTf\x05ka\x04Jm\x0B@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\x0Bb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\x0BbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7Fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\x0BKC\tdj\tI_\bVV\ny\\\x0BLm\x05xl\txB\tkV\x0Bb\\\x0BJW\x0BVS\tVx\x0BxD\td{\x04MD\bTa\t|`\x0BPz\x04R}\x0BWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\x0BWh\x0BWk\nxS\x0BAz\x0BwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7F\x0Bpg\td\\\x0BoA\x05{D\ti_\x05xB\bT\x7F\t`V\x05qr\tTT\x04g]\x04CA\x0BuR\tVJ\tT`\npw\x0BRb\tI_\nCx\x04Ro\x0BsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\x0B^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\x0B|j\nqo\x05u|\tQ]\x0Bek\x05\x7FZ\x04M`\x04St\npe\tdj\bVG\x0BeE\t\x7Fm\x0BWc\x04|I\n[W\tfL\bT\x7F\tBZ\x04Su\x0BKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\x0BBl\bWg\x04XD\x05kc\x0Bx[\bVV\tQ]\t\x7Fa\tPy\x0BxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\x0Bx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\x0BK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7F\x05Nt\x0BDg\tVc\bTl\x04d@\npo\t\x7FM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\x0BF{\tcO\tfD\nlm\x0BfZ\nlm\x0BeU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7F\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\x0BxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\x0BDg\x0Bx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\x0B_W\nLk\x05Nt\tyj\tfM\x04R\x7F\tiI\bTl\x0BwX\tsV\x0BMl\nyu\tAJ\bVj\x04KO\tWV\x0BA}\x0BW\x7F\nrp\tiD\x0B|o\x05lv\x0BsI\x04BM\td~\tCU\bVb\x04eV\npC\x0BwT\tj`\tc}\x0Bxs\x0Bps\x0Bvh\tWV\x0BGg\x0BAe\x0BVK\x0B]W\trg\x0BWc\x05F`\tBr\x0Bb\\\tdZ\bQp\nqI\x04kF\nLk\x0BAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\x0B@@\bTe\ti_\n_D\twL\nAH\x0BiK\x0Bek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\x0BVK\npl\x04S}\x0BWP\t|d\x04MD\x0BHV\bT\x7F\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\x0B^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7Fm\x04uQ\x0BhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\x0BxD\t\x7Fm\bTp\x04IS\nc|\tkV\x05i~\tV{\x0BhZ\t|b\bWt\n@R\x0BoA\x0BnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\x0BQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\x0Bpg\x0Bpg\x0BWc\tiT\tbs\twL\tU_\tc\\\t|h\x0BKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\x0Bed\bTW\bSB\nxU\tcn\bTb\ne\x7F\ta\\\tSG\bU|\npV\nN\\\x04Kn\x0BnU\tAt\tpD\x0B^R\x0BIr\x04b[\tR{\tdE\x0BxD\x0BWK\x0BWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7Fa\bQp\x05Ob\nLP\bTl\x04Y[\x0BK}\tAJ\bQ\x7F\x04n^\x0BsA\bSM\nqM\bWZ\n^W\x0Bz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\x0Bxs\x04mx\x0Bws\tcC\ntC\tyc\x05M`\x0BW\x7F\nrh\bQp\x0BxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\x0Bpg\tcn\tfL\x0Bvh\x04Cq\bTl\x0BnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\x0BKW\tfD\nea\x04oQ\tj_\tBv\x04nM\x0BID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\x0BxD\x04|I\x05xl\nfy\x04Ce\x0BwB\nLk\x0Bd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\x0BeE\tjp\nq}\tiD\x05qN\x0B^R\t\x7Fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\x0BHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\x0B]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\x0Bxs\x04BN\x05ti\x04lm\tTd\t]y\x0BHV\tSo\x0B|j\x04XX\tA|\x0BZ^\x0BGu\bTW\x05M`\x04kF\x0BhZ\x0BVK\tdG\x0BBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7F\tPl\bWO\x0BLm\tdL\x05uH\x04Cm\tdT\x04fn\x0BwB\x05ka\x0BnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\x0BAx\tHE\bTg\bSq\x05vp\x0Bb\\\bWO\nOl\nsI\nfy\x0BID\t\\c\n{Z\n^~\npe\nAO\tTT\x0Bxv\x04k_\bWO\x0B|j\x0BwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\x0BJc\x0Bed\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\x0Bxs\n`e\x0BiK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\x0BWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7F\tHE\tp\\\tfF\tfw\bVV\bW@\tak\x0BVK\x05ls\tVJ\bVV\x0BeE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7F\tPl\t]y\x0BwT\x05{p\x04MD\x0Bb\\\tQ]\x04Kj\tJn\nAH\x0BRb\tBU\tHK\t\\c\nfI\x05m\x7F\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\x0BGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\x0BuW\tiI\bWI\nqI\x0B|j\x04BV\bVg\bWZ\x04kF\x0Bx]\bTA\tab\tfr\ti@\tJd\tJd\x0Bps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\x0Bw}\x0BqO\ti[\bQ\x7F\bTz\x0BVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\x0BWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\x0BAx\nMd\tBr\x05ui\x0BxY\bSM\x0BWc\x0B|j\x0Bxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\x0BeU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7F\x0BhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\x0BGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\x0Bb\\\tpV\ncc\x04S\\\tct\t`z\bPL\x0BWs\nA`\neg\bSq\x05uE\x04CR\x0BDg\t`W\x0Bz{\x0BWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\x0BRb\bTQ\npl\x05Gt\x0BuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\x0BDg\x0Bed\tq{\x04VG\bQ\x7F\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\x0BB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\x0BwT\bSM\x05MY\x05qN\tdj\x05~s\x0BQ}\x05MY\x0BMB\tBv\twR\bRg\x0BQ}\tql\x0BKC\nrm\x05xu\x04CC\x0BwB\x0Bvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\x0B{i\nC~\tBL\x0BeE\x05uH\bVj\x04Ey\x04Gz\x0BzR\x0B{i\tcf\n{Z\n]n\x04XA\x0BGu\x0BnU\thS\x0BGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7F\tc\\\x0BmO\x0BWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\x0BwT\npV\ndt\x0ByI\tVx\tQ\x7F\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\x0BwB\t}t\t[I\tCP\x04kX\x0BFm\x0BhZ\x05m\x7F\ti[\np@\x0BQ}\x0BW\x7F\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\x0BRb\tio\tPy\x04Y[\nxU\tct\x0B@@\tww\bPv\x04BM\x04FF\ntb\x05v|\x0BKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7F\x0B_W\tTJ\nqI\t|a\tA{\x0BuP\x04MD\tPl\nxR\tfL\x0Bws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\x0BW\x7F\nqs\x05lv\bSM\x04Zi\x0BVK\x05ia\x0BQB\tQ\x7F\n{Z\bPt\x0BKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\x0BDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\x0BeU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\x0BWc\tqv\n`m\tU^\x05oD\nd|\x0BGg\tdE\x0Bwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\x0BxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\x0Bps\ntC\x0BpP\x0Bqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\x0Bxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\x0B@J\t|d\x05uh\bWZ\x0BeU\x0BnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\x0BNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\x0BAx\np@\nzk\x0BRb\x05Os\x0BWS\x04e^\x0BD_\tBv\x0BWd\bVb\x0Bxs\x0BeE\bRw\n]n\n|p\x0Bg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\x0Bps\npe\x05u|\x0BGr\bVe\tCU\x04]M\x04XU\x0BxD\bTa\tIQ\x0BWq\tCU\tam\tdj\bSo\x04Sw\x0BnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\x0BnU\nzU\t|}\tiD\nz\\\bSM\x0BxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\x0BFm\x0BLX\x05vc\x0Bql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\x0BRb\tyj\tsb\x0BWs\bTl\tkV\x0Bed\ne\x7F\x05lL\x0BxN\t\x7Fm\nJn\tjY\x0BxD\bVb\bSq\x0Byu\twL\x0BXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\x0B|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\x0BEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\x0BbE\tBZ\x0BRH\bP{\tjp\n\\}\ta_\tcC\t|a\x0BD]\tBZ\ti[\tfD\x0BxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\x0BLx\x0BM@\bWZ\x04Kn\x0Bpg\nTi\nIv\n|r\x0B@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\x0BxD\n]s\x04gc\x0Bps\tBr\bTW\x0BBM\x05tZ\nBY\x04DW\tjf\x0BSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\x0Bgl\nig\bUs\x04BT\x0BbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\x0BID\x0B|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0E\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0E\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0E\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0E\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0E\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0E\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7F\x7F#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsksbo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-iptfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0E\t?\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0E\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7F\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0E\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0E\t\x0E\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0E\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\"..#fmgojfp#jm$^*8\x0E\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0E\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0E\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0E\t\x0E\t\x0E\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbmgjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0E\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0E\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0E\t\x0E\t?\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0E\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\"..#fmg?,psbm=??aq#,=\x0E\t\\slsvsp\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0E\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\"..#wjwof!=?,irvfqz-?,elqn=\t+\x0BBl\bQ\x7F*+\x0BUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0E\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0E\t?\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0E\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0E\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0E\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\x0BBl\bQ\x7F\tA{\x0BUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\x0BB{\npV\x0B@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\x0BQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\x0Bed\x0BHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\x0BLm\tKx\t}t\bPv\ny\\\naB\tV\x7F\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\x0Bxs\x04Zf\nqI\x04Zf\x0BBM\x0B|j\t}t\bSM\nmC\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0E\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0E\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0E\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0E\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0E\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0E\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0E\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw", "fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7Fwkvna\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0E\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0E\t?kfbg=\x0E\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0E\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0E\t?,kfbg=\x0E\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0E\t\n?,gju=\x0E\t\x0E\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0E\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0E\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0E\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0E\t?kfbg=\x0E\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0E\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0E\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\"Xfmgje^..=\x0E\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\"Xfmgje^..=\x0E\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0E\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0E\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0E\t?,p`qjsw=\x0E\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0E\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0E\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0E\t\x0E\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7F#?b#kqfe>!?\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0E\t?,p`qjsw=\x0E\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0E\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0E\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\x0BBl\bQ\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0E\t?,p`qjsw=\x0E\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7Fwkvna\x7Fofew\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0E\t?-ip!=?,p`qjsw=\x0E\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\"y\"W\"W\"[\"Q\"U\"V\"@=i=l<^<\\=n=m!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7Fqjdkw\x7Fwkvna\x7F-ip!=?,p`qjsw=\x0E\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0E\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0E\t?,gju=\x0E\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0E\t?,gju=\x0E\t\x0E\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0E\t?,kwno=\x0E\"y\"W\"W\"[\"Q\"U\"V\"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7Fwkvna\x7Fqjdkw\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0E\t?,kwno=\x0E\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\"GL@WZSF#kwno=\x0E\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0E\t?,gju=\x0E\t\x0E\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0E\t?,algz=\x0E\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0E\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0E\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0E\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0E\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0E\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0E\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?\"GL@WZSF#kwno=\t?\"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\x0BUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=&*&'&^&\x88\u0178\u0C3E&\u01AD&\u0192&)&^&%&'&\x82&P&1&\xB1&3&]&m&u&E&t&C&\xCF&V&V&/&>&6&\u0F76\u177Co&p&@&E&M&P&x&@&F&e&\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025E*\u03EA\u21F3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0D2E&\u0503&\u0316*&*8&%&%&&&%,)&\x9A&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053C\x84(,(<&,&\u03DA&\u18C7&-&,(%&(&%&(\u013B0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xC6-\u0360\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072C\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1E78\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\u0F9C\u19D3&8(>&/&/&\u077B')'\u1065')'%@/&0&%\u043E\u09C0*&*@&C\u053D\u05D4\u0274\u05EB4\u0DD7\u071A\u04D16\u0D84&/\u0178\u0303Z&*%\u0246\u03FF&\u0134&1\xA8\u04B4\u0174", dictionarySizeBits, "AAAAKKLLKKKKKJJIHHIHHGGFF"); setData(dictionaryData, dictionarySizeBits); } /** * @constructor * @param {!Int8Array} data * @struct */ function InputStream(data) { /** @type {!Int8Array} */ this.data = new Int8Array(0); /** @type {number} */ this.offset = 0; this.data = data; } /** * @param {number} x * @return {string} */ function valueOf(x) { return x.toString(); } /** * @param {?InputStream} src * @param {!Int8Array} dst * @param {number} offset * @param {number} length * @return {number} */ function readInput(src, dst, offset, length) { if (src === null) { return -1; } let /** @type {number} */ end = Math.min(src.offset + length, src.data.length); let /** @type {number} */ bytesRead = end - src.offset; dst.set(src.data.subarray(src.offset, end), offset); src.offset += bytesRead; return bytesRead; } /** * @param {string} src * @return {!Int8Array} */ function toUsAsciiBytes(src) { let /** @type {number} */ n = src.length; let /** @type {!Int8Array} */ result = new Int8Array(n); for (let /** @type {number} */ i = 0; i < n; ++i) { result[i] = src.charCodeAt(i); } return result; } /* GENERATED CODE END */ /** @typedef {!Int8Array} */ let ByteBuffer; /** * @param {!Int8Array} bytes * @param {?Options=} options * @return {!Int8Array} */ function decode(bytes, options) { let /** @type {!State} */ s = new State(); initState(s, new InputStream(bytes)); if (options) { let customDictionary = /** @type {?Int8Array} */ (options["customDictionary"]); if (customDictionary) attachDictionaryChunk(s, customDictionary); } let /** @type {number} */ totalOutput = 0; let /** @type {!Array} */ chunks = []; while (true) { let /** @type {!Int8Array} */ chunk = new Int8Array(16384); chunks.push(chunk); s.output = chunk; s.outputOffset = 0; s.outputLength = 16384; s.outputUsed = 0; decompress(s); totalOutput += s.outputUsed; if (s.outputUsed < 16384) break; } close(s); let /** @type {!Int8Array} */ result = new Int8Array(totalOutput); let /** @type {number} */ offset = 0; for (let /** @type {number} */ i = 0; i < chunks.length; ++i) { let /** @type {!Int8Array} */ chunk = chunks[i]; let /** @type {number} */ end = Math.min(totalOutput, offset + 16384); let /** @type {number} */ len = end - offset; if (len < 16384) { result.set(chunk.subarray(0, len), offset); } else { result.set(chunk, offset); } offset += len; } return result; } return decode; }; /** * @type {function(!Int8Array, ?Options=):!Int8Array} */ export let BrotliDecode = makeBrotliDecode(); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/micProcessor.js ================================================ // micProcessor.js class MicProcessor extends AudioWorkletProcessor { constructor() { super(); // global variables for testing var sampleRate = globalThis.sampleRate; var currentFrame = globalThis.currentFrame; var currentTime = globalThis.currentTime; var currentRenderQuantum = globalThis.currentRenderQuantum; this.SampleRate = sampleRate; this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms this.Buffer = new Float32Array(this.TargetSamples); this.BufferIndex = 0; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { //this.port.postMessage(data); // echo back test } if (data instanceof Uint8Array) { } }; } process(inputs, outputs, parameters) { var inChannel0 = inputs[0][0]; if (!inChannel0) return true; let srcIndex = 0; var srcLen = inChannel0.length; while (srcIndex < srcLen) { var remaining = this.TargetSamples - this.BufferIndex; var copyCount = Math.min(remaining, srcLen - srcIndex); this.Buffer.set( inChannel0.subarray(srcIndex, srcIndex + copyCount), this.BufferIndex); this.BufferIndex += copyCount; srcIndex += copyCount; if (this.BufferIndex >= this.TargetSamples) { this.SendBuffer(); this.BufferIndex = 0; } } return true; } SendBuffer() { // convert to 16-6bit PCM var int16 = new Int16Array(this.TargetSamples); for (var i = 0; i < this.TargetSamples; i++) { int16[i] = this.Buffer[i] * 32767; } var byteArray = new Uint8Array(int16.buffer); this.port.postMessage(byteArray, [byteArray.buffer]); } } registerProcessor('mic-processor', MicProcessor); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/BlazorGL.NetCore/wwwroot/js/streamProcessor.js ================================================ // streamProcessor.js class StreamProcessor extends AudioWorkletProcessor { constructor() { super(); this.queue = []; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { if (data === 2) { this.queue = []; } } if (data instanceof Uint8Array) { const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2); buffer.offset = 0; this.queue.push(buffer); } }; } process(inputs, outputs, parameters) { const output = outputs[0]; const channelCount = output.length; const sampleCount = output[0].length; let written = 0; while (written < sampleCount && this.queue.length > 0) { const buffer = this.queue[0]; const offset = buffer.offset; const available = buffer.length - offset; const needed = sampleCount - written; const copyCount = Math.min(available, needed); for (let i = 0; i < copyCount; i++) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; let value = (buffer[offset+i] / 32767); channel[written+i] = value; } } written += copyCount; buffer.offset += copyCount; if (buffer.offset >= buffer.length) { this.queue.shift(); this.port.postMessage(1); } } // Fill remaining samples with silence if (written < sampleCount) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; for (let i = written; i < sampleCount; i++) { let value = 0; channel[i] = value; } } } return true; } } registerProcessor("stream-processor", StreamProcessor); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentImporter.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using Microsoft.Xna.Framework.Content.Pipeline; using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to import a file from disk into the specified type, TImport. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentImporter attribute to specify the correct file /// extension, display name, and default processor for this importer. /// [ContentImporter(".xyz", DisplayName = "XYZ Importer", DefaultProcessor = "ContentProcessor1")] public class ContentImporter1 : ContentImporter { public override TInput Import(string filename, ContentImporterContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentPipelineExtension.csproj ================================================  Debug AnyCPU 8.0.30703 2.0 {$guid1$} Library Properties $safeprojectname$ $safeprojectname$ v4.8 512 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 All All All All All All All ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentPipelineExtension.vstemplate ================================================ KNI Content Pipeline Extension Project (.NET Framework) A KNI project for creating a custom content importer and processor CSharp KNI csharp windows linux macos games KNI library extension 1 43200 true KniContentPipelineExtension true Enabled true TemplateIcon.png ContentImporter.cs ContentProcessor.cs AssemblyInfo.cs ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/ContentProcessor.cs ================================================ using System; using Microsoft.Xna.Framework.Content.Pipeline; // TODO: replace these with the processor input and output types. using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to apply custom processing to content data, converting an object of /// type TInput to TOutput. The input and output types may be the same if /// the processor wishes to alter data without changing its type. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentProcessor attribute to specify the correct /// display name for this processor. /// [ContentProcessor(DisplayName = "$safeprojectname$.ContentProcessor1")] public class ContentProcessor1 : ContentProcessor { public override TOutput Process(TInput input, ContentProcessorContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetFramework/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid2$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentImporter.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using Microsoft.Xna.Framework.Content.Pipeline; using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to import a file from disk into the specified type, TImport. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentImporter attribute to specify the correct file /// extension, display name, and default processor for this importer. /// [ContentImporter(".xyz", DisplayName = "XYZ Importer", DefaultProcessor = "ContentProcessor1")] public class ContentImporter1 : ContentImporter { public override TInput Import(string filename, ContentImporterContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentPipelineExtension.csproj ================================================  false {$guid1$} Library Properties $safeprojectname$ $safeprojectname$ v4.8 bin\$(Platform)\$(Configuration)\ $(DefineConstants); All All All All All All All ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentPipelineExtension.vstemplate ================================================ KNI Content Pipeline Extension Project (.NetStandard) A KNI project for creating a custom content importer and processor CSharp KNI csharp windows linux macos games KNI library extension 1 43201 true KniContentPipelineExtension true Enabled true TemplateIcon.png Directory.Build.props ContentImporter.cs ContentProcessor.cs ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/ContentProcessor.cs ================================================ using System; using Microsoft.Xna.Framework.Content.Pipeline; // TODO: replace these with the processor input and output types. using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to apply custom processing to content data, converting an object of /// type TInput to TOutput. The input and output types may be the same if /// the processor wishes to alter data without changing its type. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentProcessor attribute to specify the correct /// display name for this processor. /// [ContentProcessor(DisplayName = "$safeprojectname$.ContentProcessor1")] public class ContentProcessor1 : ContentProcessor { public override TOutput Process(TInput input, ContentProcessorContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/ContentPipelineExtension.NetStandard/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Application.csproj ================================================ false net8.0 Major $guid1$ WinExe True True Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);DESKTOPGL DesktopGL Icon.ico app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Game.vstemplate ================================================ KNI Cross Platform Desktop Project (.net8) A KNI game project for Windows, Mac and Linux using OpenGL. CSharp KNI csharp windows linux macos games KNI desktop 1 43301 true Game true Enabled true TemplateIcon.png true Directory.Build.props Game.cs Icon.ico Icon.bmp Program.cs app.manifest Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetCore/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Application.csproj ================================================ Debug AnyCPU 8.0.30703 2.0 $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 DesktopGL v4.8 true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;DESKTOPGL full AnyCPU prompt false 4 bin\$(Platform)\$(Configuration)\ TRACE;DESKTOPGL true pdbonly AnyCPU prompt false 4 Icon.ico app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Game.vstemplate ================================================ KNI Cross Platform Desktop Project (.NET Framework) A KNI game project for Windows, Mac and Linux using OpenGL. CSharp KNI csharp windows linux macos games KNI desktop 1 43300 true Game true Enabled true TemplateIcon.png true Game.cs Icon.ico Icon.bmp Program.cs app.manifest AssemblyInfo.cs Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid2$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/DesktopGL.NetFramework/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $ext_safeprojectname$ { [Activity(Label = "$ext_safeprojectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize , ScreenOrientation = ScreenOrientation.FullSensor )] public class $ext_safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new $ext_safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/AndroidManifest.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Application.csproj ================================================ false net8.0-android $guid2$ Exe True partial $ext_safeprojectname$ $ext_safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$ext_safeprojectname$ 1 1.0 .m4a True Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Game.vstemplate ================================================ KNI Android Project (.net8) A KNI game project for Android. CSharp 1 43200 true Game true Enabled true true false true Directory.Build.props AndroidManifest.xml Activity.cs AboutAssets.txt AboutResources.txt Icon.png Splash.png Resource.Designer.cs Strings.xml Styles.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Resource.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace $ext_safeprojectname$ { public partial class Resource { public partial class Attribute { private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; private Style() { } } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Values/Strings.xml ================================================ $ext_safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Android/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/App.razor ================================================  Not found

Sorry, there's nothing at this address.

================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Application.csproj ================================================ false net8.0 disable disable {$guid7$} $ext_safeprojectname$ $ext_safeprojectname$ $(DefineConstants);BLAZORGL BlazorGL false Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:BlazorGL /config: /profile:Reach /compress:True #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Game.vstemplate ================================================ KNI Web browser Platform Project (.net8) A KNI game project for Blazor webassembly using WebGL. CSharp 1 43300 true Game true Enabled true true false true _Imports.razor App.razor Directory.Build.props MainLayout.razor MainLayout.razor.css Program.cs Index.razor Index.razor.cs launchSettings.json app.css bootstrap.min.css bootstrap.min.css.map decode.min.js streamProcessor.js micProcessor.js favicon.ico kni.png index.html ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/MainLayout.razor.css ================================================ .page { position: relative; display: flex; flex-direction: column; } main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row ::deep .btn-link { white-space: nowrap; margin-left: 1.5rem; text-decoration: none; } .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { text-decoration: underline; } .top-row ::deep a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row ::deep a, .top-row ::deep .btn-link { margin-left: 0; } } @media (min-width: 641px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .top-row.auth ::deep a:first-child { flex: 1; text-align: right; width: 0; } .top-row, article { padding-left: 2rem !important; padding-right: 1.5rem !important; } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Pages/Index.razor ================================================ @page "/" @page "/index.html" @inject IJSRuntime JsRuntime @using nkast.Wasm.Canvas $ext_safeprojectname$
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Pages/Index.razor.cs ================================================ using System; using Microsoft.JSInterop; using Microsoft.Xna.Framework; namespace $ext_safeprojectname$.Pages { public partial class Index { Game _game; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { JsRuntime.InvokeAsync("initRenderJS", DotNetObjectReference.Create(this)); } } [JSInvokable] public void TickDotNet() { // init game if (_game == null) { _game = new $ext_safeprojectname$Game(); _game.Run(); } // run gameloop _game.Tick(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Program.cs ================================================ using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; namespace $ext_safeprojectname$ { internal class Program { private static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddScoped(sp => new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:56897", "sslPort": 0 } }, "profiles": { "$ext_safeprojectname$": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5259", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using nkast.Wasm.Canvas @using $ext_safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/Content/Content.txt ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/css/app.css ================================================  html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } h1:focus { outline: none; } a, .btn-link { color: #0077cc; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } .blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; } .blazor-error-boundary::after { content: "An error has occurred." } #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; /* Disable text highlighting and magnifying glass on iPhone/webkit */ -webkit-user-select: none; } #canvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/index.html ================================================  $ext_safeprojectname$
Made with
Kni
loading . . .   
An unhandled error has occurred. Reload x
================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/decode.js ================================================ /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @typedef {!Object} Options * @property {?Int8Array} customDictionary */ let Options; /** * Private scope / static initializer for decoder. * * @return {function(!Int8Array, ?Options=):!Int8Array} */ let makeBrotliDecode = () => { /* GENERATED CODE BEGIN */ /** @type {!Int32Array} */ const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); /** @type {!Int32Array} */ const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); /** @type {!Int32Array} */ const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); /** @type {!Int32Array} */ const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); /** @type {!Int32Array} */ const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); /** @type {!Int16Array} */ const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); /** @type {!Int16Array} */ const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); /** @type {!Int16Array} */ const CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { let /** @type {number} */ result = -1; let /** @type {number} */ step = 16; while (step > 0) { if ((i >>> step) !== 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw new Error("maxDistance is too small"); } const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4; const /** @type {number} */ ndistbits = log2floor(offset) - 1; const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24); const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (let /** @type {number} */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) { let /** @type {number} */ rangeIdx = cmdCode >>> 6; let /** @type {number} */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode]; const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); const /** @type {number} */ index = cmdCode * 4; cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { const /** @type {number} */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 0) { return 16; } let /** @type {number} */ n = readFewBits(s, 3); if (n !== 0) { return 17 + n; } n = readFewBits(s, 3); if (n !== 0) { if (n === 1) { if (largeWindowEnabled === 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) === 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @return {void} */ function enableEagerOutput(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isEager = 1; } /** * @param {!State} s * @return {void} */ function enableLargeWindow(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isLargeWindow = 1; } /** * @param {!State} s * @param {!Int8Array} data * @return {void} */ function attachDictionaryChunk(s, data) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } if (s.cdNumChunks === 0) { s.cdChunks = new Array(16); s.cdChunkOffsets = new Int32Array(16); s.cdBlockBits = -1; } if (s.cdNumChunks === 15) { throw new Error("Too many dictionary chunks"); } s.cdChunks[s.cdNumChunks] = data; s.cdNumChunks++; s.cdTotalSize += data.length; s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState !== 0) { throw new Error("State MUST be uninitialized"); } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState === 0) { throw new Error("State MUST be initialized"); } if (s.runningState === 11) { return; } s.runningState = 11; if (s.input !== null) { s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) !== 0) { const /** @type {number} */ n = readFewBits(s, 3); if (n === 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) { return; } const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles === 7) { s.isMetadata = 1; if (readFewBits(s, 1) !== 0) { throw new Error("Corrupted reserved bit"); } const /** @type {number} */ sizeBytes = readFewBits(s, 2); if (sizeBytes === 0) { return; } for (let /** @type {number} */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 8); if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 8); } } else { for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 4); if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd === 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { let /** @type {number} */ offset = tableGroup[tableIdx]; const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; const /** @type {number} */ bits = tableGroup[offset] >> 16; const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; const /** @type {number} */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s); const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { const /** @type {number} */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { const /** @type {!Int32Array} */ mtf = new Int32Array(256); for (let /** @type {number} */ i = 0; i < 256; i++) { mtf[i] = i; } for (let /** @type {number} */ i = 0; i < vLen; i++) { const /** @type {number} */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index !== 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { let /** @type {number} */ symbol = 0; let /** @type {number} */ prevCodeLen = 8; let /** @type {number} */ repeat = 0; let /** @type {number} */ repeatCodeLen = 0; let /** @type {number} */ space = 32768; const /** @type {!Int32Array} */ table = new Int32Array(33); const /** @type {number} */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; const /** @type {number} */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen !== 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { const /** @type {number} */ extraBits = codeLen - 14; let /** @type {number} */ newLen = 0; if (codeLen === 16) { newLen = prevCodeLen; } if (repeatCodeLen !== newLen) { repeat = 0; repeatCodeLen = newLen; } const /** @type {number} */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; const /** @type {number} */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw new Error("symbol + repeatDelta > numSymbols"); } for (let /** @type {number} */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen !== 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space !== 0) { throw new Error("Unused space"); } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (let /** @type {number} */ i = 0; i < length - 1; ++i) { for (let /** @type {number} */ j = i + 1; j < length; ++j) { if (symbols[i] === symbols[j]) { throw new Error("Duplicate simple Huffman code symbol"); } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ symbols = new Int32Array(4); const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1); const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1; for (let /** @type {number} */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw new Error("Can't readHuffmanCode"); } symbols[i] = symbol; } checkDupes(symbols, numSymbols); let /** @type {number} */ histogramId = numSymbols; if (numSymbols === 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; default: break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18); let /** @type {number} */ space = 32; let /** @type {number} */ numCodes = 0; for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) { const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v !== 0) { space -= (32 >> v); numCodes++; } } if (space !== 0 && numCodes !== 1) { throw new Error("Corrupted Huffman code histogram"); } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip === 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees === 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ useRleForZeros = readFewBits(s, 1); let /** @type {number} */ maxRunLengthPrefix = 0; if (useRleForZeros !== 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix; const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1); const /** @type {number} */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (let /** @type {number} */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(table, tableIdx, s); if (code === 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ reps = (1 << code) + readFewBits(s, code); while (reps !== 0) { if (i >= contextMapSize) { throw new Error("Corrupted context map"); } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { const /** @type {!Int32Array} */ ringBuffers = s.rings; const /** @type {number} */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType === 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType === 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); const /** @type {number} */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; const /** @type {number} */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { let /** @type {number} */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { const /** @type {number} */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37; const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length !== 0) { newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd !== 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) { return; } if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata !== 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata !== 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { let /** @type {number} */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; const /** @type {number} */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits; const /** @type {!Int32Array} */ distOffset = s.distOffset; const /** @type {number} */ npostfix = s.distancePostfixBits; const /** @type {number} */ ndirect = s.numDirectDistanceCodes; const /** @type {number} */ postfix = 1 << npostfix; let /** @type {number} */ bits = 1; let /** @type {number} */ half = 0; let /** @type {number} */ i = 16; for (let /** @type {number} */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (let /** @type {number} */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) { const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] !== j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow === 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength); copyRawBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos === s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite !== 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize); let /** @type {number} */ next = n; for (let /** @type {number} */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { let /** @type {number} */ result = s.ringBufferSize; if (s.isEager !== 0) { result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @param {number} fence * @return {void} */ function doUseDictionary(s, fence) { if (s.distance > 0x7FFFFFFC) { throw new Error("Invalid backward reference"); } const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize; if (address < 0) { initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength); s.runningState = 14; } else { const /** @type {!ByteBuffer} */ dictionaryData = data; const /** @type {number} */ wordLength = s.copyLength; if (wordLength > 31) { throw new Error("Invalid backward reference"); } const /** @type {number} */ shift = sizeBits[wordLength]; if (shift === 0) { throw new Error("Invalid backward reference"); } let /** @type {number} */ offset = offsets[wordLength]; const /** @type {number} */ mask = (1 << shift) - 1; const /** @type {number} */ wordIdx = address & mask; const /** @type {number} */ transformIdx = address >>> shift; offset += wordIdx * wordLength; const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS; if (transformIdx >= transforms.numTransforms) { throw new Error("Invalid backward reference"); } const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; return; } s.runningState = 4; } } /** * @param {!State} s * @return {void} */ function initializeCompoundDictionary(s) { s.cdBlockMap = new Int8Array(256); let /** @type {number} */ blockBits = 8; while (((s.cdTotalSize - 1) >>> blockBits) !== 0) { blockBits++; } blockBits -= 8; s.cdBlockBits = blockBits; let /** @type {number} */ cursor = 0; let /** @type {number} */ index = 0; while (cursor < s.cdTotalSize) { while (s.cdChunkOffsets[index + 1] < cursor) { index++; } s.cdBlockMap[cursor >>> blockBits] = index; cursor += 1 << blockBits; } } /** * @param {!State} s * @param {number} address * @param {number} length * @return {void} */ function initializeCompoundDictionaryCopy(s, address, length) { if (s.cdBlockBits === -1) { initializeCompoundDictionary(s); } let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits]; while (address >= s.cdChunkOffsets[index + 1]) { index++; } if (s.cdTotalSize > address + length) { throw new Error("Invalid backward reference"); } s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; s.metaBlockLength -= length; s.cdBrIndex = index; s.cdBrOffset = address - s.cdChunkOffsets[index]; s.cdBrLength = length; s.cdBrCopied = 0; } /** * @param {!State} s * @param {number} fence * @return {number} */ function copyFromCompoundDictionary(s, fence) { let /** @type {number} */ pos = s.pos; const /** @type {number} */ origPos = pos; while (s.cdBrLength !== s.cdBrCopied) { const /** @type {number} */ space = fence - pos; const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex]; const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset; let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied; if (length > remChunkLength) { length = remChunkLength; } if (length > space) { length = space; } s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos); pos += length; s.cdBrOffset += length; s.cdBrCopied += length; if (length === remChunkLength) { s.cdBrIndex++; s.cdBrOffset = 0; } if (pos >= fence) { break; } } return pos - origPos; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState === 0) { throw new Error("Can't decompress until initialized"); } if (s.runningState === 11) { throw new Error("Can't decompress after close"); } if (s.runningState === 1) { const /** @type {number} */ windowBits = decodeWindowBits(s); if (windowBits === -1) { throw new Error("Invalid 'windowBits' code"); } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } let /** @type {number} */ fence = calculateFence(s); let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1; let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; while (s.runningState !== 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength === 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext !== 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState !== 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } let /** @type {number} */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength === 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw new Error("Negative distance"); } } else { const /** @type {number} */ extraBits = s.distExtraBits[distanceCode]; let /** @type {number} */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw new Error("Invalid backward reference"); } s.j = 0; s.runningState = 8; case 8: let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask; let /** @type {number} */ dst = s.pos; const /** @type {number} */ copyLength = s.copyLength - s.j; const /** @type {number} */ srcEnd = src + copyLength; const /** @type {number} */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (let /** @type {number} */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState === 8) { s.runningState = 4; } continue; case 9: doUseDictionary(s, fence); continue; case 14: s.pos += copyFromCompoundDictionary(s, fence); if (s.pos >= fence) { s.nextRunningState = 14; s.runningState = 12; return; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) === 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw new Error("Unexpected state " + valueOf(s.runningState)); } } if (s.runningState === 10) { if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } /** @type {!Transforms} */ const RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {string} prefixSuffixSrc * @param {string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { const /** @type {number} */ n = prefixSuffixSrc.length; let /** @type {number} */ index = 1; let /** @type {number} */ j = 0; for (let /** @type {number} */ i = 0; i < n; ++i) { const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i); if (c === 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (let /** @type {number} */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { let /** @type {number} */ offset = dstOffset; const /** @type {!Int32Array} */ triplets = transforms.triplets; const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage; const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads; const /** @type {number} */ transformOffset = 3 * transformIndex; const /** @type {number} */ prefixIdx = triplets[transformOffset]; const /** @type {number} */ transformType = triplets[transformOffset + 1]; const /** @type {number} */ suffixIdx = triplets[transformOffset + 2]; let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx]; const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx]; const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; let /** @type {number} */ omitFirst = transformType - 11; let /** @type {number} */ omitLast = transformType; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix !== prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; let /** @type {number} */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType === 10 || transformType === 11) { let /** @type {number} */ uppercaseOffset = offset - len; if (transformType === 10) { len = 1; } while (len > 0) { const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType === 21 || transformType === 22) { let /** @type {number} */ shiftOffset = offset - len; const /** @type {number} */ param = transforms.params[transformIndex]; let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { let /** @type {number} */ step = 1; const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) { } else if (c0 < 0xE0) { if (len >= 2) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; const /** @type {number} */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType === 21) { len = 0; } } } while (suffix !== suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { let /** @type {number} */ step = 1 << (len - 1); while ((key & step) !== 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { let /** @type {number} */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { const /** @type {number} */ tableOffset = tableGroup[tableIdx]; let /** @type {number} */ key; const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize); const /** @type {!Int32Array} */ count = new Int32Array(16); const /** @type {!Int32Array} */ offset = new Int32Array(16); let /** @type {number} */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (let /** @type {number} */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] !== 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } let /** @type {number} */ tableBits = rootBits; let /** @type {number} */ tableSize = 1 << tableBits; let /** @type {number} */ totalSize = tableSize; if (offset[15] === 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } const /** @type {number} */ mask = totalSize - 1; let /** @type {number} */ low = -1; let /** @type {number} */ currentOffset = tableOffset; for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) !== low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached !== 0) { if (halfAvailable(s) >= -2) { return; } throw new Error("No more input"); } const /** @type {number} */ readOffset = s.halfOffset << 1; let /** @type {number} */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer; const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached === 0) { return; } const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw new Error("Read after end"); } if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) { throw new Error("Unused bytes after end"); } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { const /** @type {number} */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset === 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { const /** @type {number} */ padding = (32 - s.bitOffset) & 7; if (padding !== 0) { const /** @type {number} */ paddingBits = readFewBits(s, padding); if (paddingBits !== 0) { throw new Error("Corrupted padding bits"); } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { let /** @type {number} */ limit = 2048; if (s.endOfStreamReached !== 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyRawBytes(s, data, offset, length) { if ((s.bitOffset & 7) !== 0) { throw new Error("Unaligned copyBytes"); } while ((s.bitOffset !== 32) && (length !== 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length === 0) { return; } const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { const /** @type {number} */ readOffset = s.halfOffset << 1; const /** @type {number} */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length === 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length !== 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { const /** @type {number} */ len = readInput(s.input, data, offset, length); if (len === -1) { throw new Error("Unexpected end of input"); } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer; const /** @type {number} */ halfLen = byteLen >> 1; const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer; for (let /** @type {number} */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } /** @type {!Int32Array} */ const LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {string} map * @param {string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (let /** @type {number} */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (let /** @type {number} */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } let /** @type {number} */ offset = 1280; for (let /** @type {number} */ k = 0; k < 19; ++k) { const /** @type {number} */ value = k & 3; const /** @type {number} */ rep = rle.charCodeAt(k) - 32; for (let /** @type {number} */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (let /** @type {number} */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {number} */ this.accumulator64 = 0; /** @type {number} */ this.runningState = 0; /** @type {number} */ this.nextRunningState = 0; /** @type {number} */ this.accumulator32 = 0; /** @type {number} */ this.bitOffset = 0; /** @type {number} */ this.halfOffset = 0; /** @type {number} */ this.tailBytes = 0; /** @type {number} */ this.endOfStreamReached = 0; /** @type {number} */ this.metaBlockLength = 0; /** @type {number} */ this.inputEnd = 0; /** @type {number} */ this.isUncompressed = 0; /** @type {number} */ this.isMetadata = 0; /** @type {number} */ this.literalBlockLength = 0; /** @type {number} */ this.numLiteralBlockTypes = 0; /** @type {number} */ this.commandBlockLength = 0; /** @type {number} */ this.numCommandBlockTypes = 0; /** @type {number} */ this.distanceBlockLength = 0; /** @type {number} */ this.numDistanceBlockTypes = 0; /** @type {number} */ this.pos = 0; /** @type {number} */ this.maxDistance = 0; /** @type {number} */ this.distRbIdx = 0; /** @type {number} */ this.trivialLiteralContext = 0; /** @type {number} */ this.literalTreeIdx = 0; /** @type {number} */ this.commandTreeIdx = 0; /** @type {number} */ this.j = 0; /** @type {number} */ this.insertLength = 0; /** @type {number} */ this.contextMapSlice = 0; /** @type {number} */ this.distContextMapSlice = 0; /** @type {number} */ this.contextLookupOffset1 = 0; /** @type {number} */ this.contextLookupOffset2 = 0; /** @type {number} */ this.distanceCode = 0; /** @type {number} */ this.numDirectDistanceCodes = 0; /** @type {number} */ this.distancePostfixBits = 0; /** @type {number} */ this.distance = 0; /** @type {number} */ this.copyLength = 0; /** @type {number} */ this.maxBackwardDistance = 0; /** @type {number} */ this.maxRingBufferSize = 0; /** @type {number} */ this.ringBufferSize = 0; /** @type {number} */ this.expectedTotalSize = 0; /** @type {number} */ this.outputOffset = 0; /** @type {number} */ this.outputLength = 0; /** @type {number} */ this.outputUsed = 0; /** @type {number} */ this.ringBufferBytesWritten = 0; /** @type {number} */ this.ringBufferBytesReady = 0; /** @type {number} */ this.isEager = 0; /** @type {number} */ this.isLargeWindow = 0; /** @type {number} */ this.cdNumChunks = 0; /** @type {number} */ this.cdTotalSize = 0; /** @type {number} */ this.cdBrIndex = 0; /** @type {number} */ this.cdBrOffset = 0; /** @type {number} */ this.cdBrLength = 0; /** @type {number} */ this.cdBrCopied = 0; /** @type {!Array} */ this.cdChunks = new Array(0); /** @type {!Int32Array} */ this.cdChunkOffsets = new Int32Array(0); /** @type {number} */ this.cdBlockBits = 0; /** @type {!Int8Array} */ this.cdBlockMap = new Int8Array(0); /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** @type {!ByteBuffer} */ let data = new Int8Array(0); /** @type {!Int32Array} */ const offsets = new Int32Array(32); /** @type {!Int32Array} */ const sizeBits = new Int32Array(32); /** * @param {!Int8Array} newData * @param {!Int32Array} newSizeBits * @return {void} */ function setData(newData, newSizeBits) { if (newSizeBits.length > 31) { throw new Error("sizeBits length must be at most " + valueOf(31)); } for (let /** @type {number} */ i = 0; i < 4; ++i) { if (newSizeBits[i] !== 0) { throw new Error("first " + valueOf(4) + " must be 0"); } } const /** @type {!Int32Array} */ dictionaryOffsets = offsets; const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits; dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0); let /** @type {number} */ pos = 0; const /** @type {number} */ limit = newData.length; for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) { dictionaryOffsets[i] = pos; const /** @type {number} */ bits = dictionarySizeBits[i]; if (bits !== 0) { if (bits >= 31) { throw new Error("newSizeBits values must be less than 31"); } pos += i << bits; if (pos <= 0 || pos > limit) { throw new Error("newSizeBits is inconsistent: overflow"); } } } for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) { dictionaryOffsets[i] = pos; } if (pos !== limit) { throw new Error("newSizeBits is inconsistent: underflow"); } data = newData; } /** * @param {!Int8Array} dictionary * @param {string} data0 * @param {string} data1 * @param {string} skipFlip * @param {!Int32Array} sizeBits * @param {string} sizeBitsData * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) { const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1); if (dict.length !== dictionary.length) { throw new Error("Corrupted brotli dictionary"); } let /** @type {number} */ offset = 0; const /** @type {number} */ n = skipFlip.length; for (let /** @type {number} */ i = 0; i < n; i += 2) { const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36; const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36; for (let /** @type {number} */ j = 0; j < skip; ++j) { dict[offset] ^= 3; offset++; } for (let /** @type {number} */ j = 0; j < flip; ++j) { dict[offset] ^= 236; offset++; } } for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) { sizeBits[i] = sizeBitsData.charCodeAt(i) - 65; } dictionary.set(dict); } { const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784); const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25); unpackDictionaryData(dictionaryData, "wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sksolpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7F\"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\x0Bwbmhzbqgaltoavpk965YIbub03s{\t\x7F~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0E\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7F.\t\"331*mgltX2^8X^8\tOld#pbow\x0E\t\n\nabmdwqjnabwk*x\x0E\t33s{\t~*8hl9\0effpbg=\x0Ep9,,#X^8wloosovd+*x\tx\x0E\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0E\t~\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0E\tabmgprvfvf>#x~8;3s{8`hjmdx\x0E\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7F\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\x0E\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0E\t?\"pwffo#zlv#k1=\x0E\telqn#ifpvp233&#nfmv-\x0E\t\n\x0E\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0E\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7F\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7F\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0Evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\x0BBl\bQ\x7F\x0BUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\x0BBM\x0B|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7Fm\x04kF\t[]\bPm\bTv\nsI\x0Bpg\t[I\bQp\x04mx\x0B_W\n^M\npe\x0BQ}\x0BGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\x0BGL\x0BxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\x0BwT\ti_\bTg\x04QQ\n|p\x0BXN\bQS\x0BxD\x04QC\bWZ\tpD\x0BVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\x0BQ}\x0BWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\x0BEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\x0Bxs\nXW\twR\x0Bek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\x0B_W\x0BWs\x0BsI\x05m\x7F\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\x0B@@\bTl\bPv\t}t\x04Sw\x04M`\x0BnU\tkW\x0Bed\nqo\x0BxY\tA|\bTz\x0By`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7Fm\tav\tBN\x0Bb\\\tpD\bTf\nY[\tJn\bQy\t[^\x0BWc\x0Byu\x04Dl\x04CJ\x0BWj\x0BHR\t`V\x0BuW\tQy\np@\x0BGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7FR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\x0BQB\x0BWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7F\tea\tdj\x0B]W\nb~\x04M`\twL\bTV\bVH\nt\x7F\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\x0BK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\x0BHR\bPv\x0BLx\x0BEZ\bT\x7F\bTv\tiD\x05oD\x05MU\x0BwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\x0BxY\x04h}\nzk\bWZ\t\x7Fm\x0Be`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\x0BDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\x0BwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\x0BxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\x0BRb\twQ\n]Q\x04QJ\bWg\x0BWa\bQj\ntC\bVH\nYm\x0Bxs\bVK\nel\bWI\x0BxY\x04Cq\ntR\x0BHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\x0Bxs\x0B_W\td{\x0BQ}\tcg\tTz\tA|\tCj\x0BLm\x05N}\x05m\x7F\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\x0BQ}\bTf\x05ka\x04Jm\x0B@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\x0Bb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\x0BbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7Fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\x0BKC\tdj\tI_\bVV\ny\\\x0BLm\x05xl\txB\tkV\x0Bb\\\x0BJW\x0BVS\tVx\x0BxD\td{\x04MD\bTa\t|`\x0BPz\x04R}\x0BWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\x0BWh\x0BWk\nxS\x0BAz\x0BwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7F\x0Bpg\td\\\x0BoA\x05{D\ti_\x05xB\bT\x7F\t`V\x05qr\tTT\x04g]\x04CA\x0BuR\tVJ\tT`\npw\x0BRb\tI_\nCx\x04Ro\x0BsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\x0B^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\x0B|j\nqo\x05u|\tQ]\x0Bek\x05\x7FZ\x04M`\x04St\npe\tdj\bVG\x0BeE\t\x7Fm\x0BWc\x04|I\n[W\tfL\bT\x7F\tBZ\x04Su\x0BKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\x0BBl\bWg\x04XD\x05kc\x0Bx[\bVV\tQ]\t\x7Fa\tPy\x0BxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\x0Bx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\x0BK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7F\x05Nt\x0BDg\tVc\bTl\x04d@\npo\t\x7FM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\x0BF{\tcO\tfD\nlm\x0BfZ\nlm\x0BeU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7F\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\x0BxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\x0BDg\x0Bx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\x0B_W\nLk\x05Nt\tyj\tfM\x04R\x7F\tiI\bTl\x0BwX\tsV\x0BMl\nyu\tAJ\bVj\x04KO\tWV\x0BA}\x0BW\x7F\nrp\tiD\x0B|o\x05lv\x0BsI\x04BM\td~\tCU\bVb\x04eV\npC\x0BwT\tj`\tc}\x0Bxs\x0Bps\x0Bvh\tWV\x0BGg\x0BAe\x0BVK\x0B]W\trg\x0BWc\x05F`\tBr\x0Bb\\\tdZ\bQp\nqI\x04kF\nLk\x0BAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\x0B@@\bTe\ti_\n_D\twL\nAH\x0BiK\x0Bek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\x0BVK\npl\x04S}\x0BWP\t|d\x04MD\x0BHV\bT\x7F\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\x0B^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7Fm\x04uQ\x0BhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\x0BxD\t\x7Fm\bTp\x04IS\nc|\tkV\x05i~\tV{\x0BhZ\t|b\bWt\n@R\x0BoA\x0BnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\x0BQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\x0Bpg\x0Bpg\x0BWc\tiT\tbs\twL\tU_\tc\\\t|h\x0BKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\x0Bed\bTW\bSB\nxU\tcn\bTb\ne\x7F\ta\\\tSG\bU|\npV\nN\\\x04Kn\x0BnU\tAt\tpD\x0B^R\x0BIr\x04b[\tR{\tdE\x0BxD\x0BWK\x0BWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7Fa\bQp\x05Ob\nLP\bTl\x04Y[\x0BK}\tAJ\bQ\x7F\x04n^\x0BsA\bSM\nqM\bWZ\n^W\x0Bz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\x0Bxs\x04mx\x0Bws\tcC\ntC\tyc\x05M`\x0BW\x7F\nrh\bQp\x0BxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\x0Bpg\tcn\tfL\x0Bvh\x04Cq\bTl\x0BnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\x0BKW\tfD\nea\x04oQ\tj_\tBv\x04nM\x0BID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\x0BxD\x04|I\x05xl\nfy\x04Ce\x0BwB\nLk\x0Bd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\x0BeE\tjp\nq}\tiD\x05qN\x0B^R\t\x7Fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\x0BHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\x0B]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\x0Bxs\x04BN\x05ti\x04lm\tTd\t]y\x0BHV\tSo\x0B|j\x04XX\tA|\x0BZ^\x0BGu\bTW\x05M`\x04kF\x0BhZ\x0BVK\tdG\x0BBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7F\tPl\bWO\x0BLm\tdL\x05uH\x04Cm\tdT\x04fn\x0BwB\x05ka\x0BnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\x0BAx\tHE\bTg\bSq\x05vp\x0Bb\\\bWO\nOl\nsI\nfy\x0BID\t\\c\n{Z\n^~\npe\nAO\tTT\x0Bxv\x04k_\bWO\x0B|j\x0BwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\x0BJc\x0Bed\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\x0Bxs\n`e\x0BiK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\x0BWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7F\tHE\tp\\\tfF\tfw\bVV\bW@\tak\x0BVK\x05ls\tVJ\bVV\x0BeE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7F\tPl\t]y\x0BwT\x05{p\x04MD\x0Bb\\\tQ]\x04Kj\tJn\nAH\x0BRb\tBU\tHK\t\\c\nfI\x05m\x7F\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\x0BGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\x0BuW\tiI\bWI\nqI\x0B|j\x04BV\bVg\bWZ\x04kF\x0Bx]\bTA\tab\tfr\ti@\tJd\tJd\x0Bps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\x0Bw}\x0BqO\ti[\bQ\x7F\bTz\x0BVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\x0BWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\x0BAx\nMd\tBr\x05ui\x0BxY\bSM\x0BWc\x0B|j\x0Bxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\x0BeU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7F\x0BhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\x0BGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\x0Bb\\\tpV\ncc\x04S\\\tct\t`z\bPL\x0BWs\nA`\neg\bSq\x05uE\x04CR\x0BDg\t`W\x0Bz{\x0BWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\x0BRb\bTQ\npl\x05Gt\x0BuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\x0BDg\x0Bed\tq{\x04VG\bQ\x7F\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\x0BB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\x0BwT\bSM\x05MY\x05qN\tdj\x05~s\x0BQ}\x05MY\x0BMB\tBv\twR\bRg\x0BQ}\tql\x0BKC\nrm\x05xu\x04CC\x0BwB\x0Bvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\x0B{i\nC~\tBL\x0BeE\x05uH\bVj\x04Ey\x04Gz\x0BzR\x0B{i\tcf\n{Z\n]n\x04XA\x0BGu\x0BnU\thS\x0BGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7F\tc\\\x0BmO\x0BWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\x0BwT\npV\ndt\x0ByI\tVx\tQ\x7F\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\x0BwB\t}t\t[I\tCP\x04kX\x0BFm\x0BhZ\x05m\x7F\ti[\np@\x0BQ}\x0BW\x7F\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\x0BRb\tio\tPy\x04Y[\nxU\tct\x0B@@\tww\bPv\x04BM\x04FF\ntb\x05v|\x0BKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7F\x0B_W\tTJ\nqI\t|a\tA{\x0BuP\x04MD\tPl\nxR\tfL\x0Bws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\x0BW\x7F\nqs\x05lv\bSM\x04Zi\x0BVK\x05ia\x0BQB\tQ\x7F\n{Z\bPt\x0BKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\x0BDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\x0BeU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\x0BWc\tqv\n`m\tU^\x05oD\nd|\x0BGg\tdE\x0Bwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\x0BxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\x0Bps\ntC\x0BpP\x0Bqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\x0Bxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\x0B@J\t|d\x05uh\bWZ\x0BeU\x0BnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\x0BNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\x0BAx\np@\nzk\x0BRb\x05Os\x0BWS\x04e^\x0BD_\tBv\x0BWd\bVb\x0Bxs\x0BeE\bRw\n]n\n|p\x0Bg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\x0Bps\npe\x05u|\x0BGr\bVe\tCU\x04]M\x04XU\x0BxD\bTa\tIQ\x0BWq\tCU\tam\tdj\bSo\x04Sw\x0BnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\x0BnU\nzU\t|}\tiD\nz\\\bSM\x0BxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\x0BFm\x0BLX\x05vc\x0Bql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\x0BRb\tyj\tsb\x0BWs\bTl\tkV\x0Bed\ne\x7F\x05lL\x0BxN\t\x7Fm\nJn\tjY\x0BxD\bVb\bSq\x0Byu\twL\x0BXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\x0B|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\x0BEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\x0BbE\tBZ\x0BRH\bP{\tjp\n\\}\ta_\tcC\t|a\x0BD]\tBZ\ti[\tfD\x0BxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\x0BLx\x0BM@\bWZ\x04Kn\x0Bpg\nTi\nIv\n|r\x0B@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\x0BxD\n]s\x04gc\x0Bps\tBr\bTW\x0BBM\x05tZ\nBY\x04DW\tjf\x0BSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\x0Bgl\nig\bUs\x04BT\x0BbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\x0BID\x0B|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0E\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0E\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0E\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0E\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0E\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0E\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7F\x7F#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsksbo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-iptfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0E\t?\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0E\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7F\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0E\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0E\t\x0E\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0E\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\"..#fmgojfp#jm$^*8\x0E\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0E\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0E\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0E\t\x0E\t\x0E\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbmgjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0E\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0E\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0E\t\x0E\t?\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0E\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\"..#fmg?,psbm=??aq#,=\x0E\t\\slsvsp\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0E\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\"..#wjwof!=?,irvfqz-?,elqn=\t+\x0BBl\bQ\x7F*+\x0BUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0E\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0E\t?\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0E\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0E\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0E\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\x0BBl\bQ\x7F\tA{\x0BUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\x0BB{\npV\x0B@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\x0BQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\x0Bed\x0BHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\x0BLm\tKx\t}t\bPv\ny\\\naB\tV\x7F\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\x0Bxs\x04Zf\nqI\x04Zf\x0BBM\x0B|j\t}t\bSM\nmC\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0E\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0E\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0E\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0E\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0E\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0E\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0E\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw", "fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7Fwkvna\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0E\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0E\t?kfbg=\x0E\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0E\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0E\t?,kfbg=\x0E\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0E\t\n?,gju=\x0E\t\x0E\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0E\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0E\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0E\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0E\t?kfbg=\x0E\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0E\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0E\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\"Xfmgje^..=\x0E\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\"Xfmgje^..=\x0E\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0E\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0E\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0E\t?,p`qjsw=\x0E\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0E\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0E\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0E\t\x0E\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7F#?b#kqfe>!?\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0E\t?,p`qjsw=\x0E\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0E\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0E\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\x0BBl\bQ\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0E\t?,p`qjsw=\x0E\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7Fwkvna\x7Fofew\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0E\t?-ip!=?,p`qjsw=\x0E\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\"y\"W\"W\"[\"Q\"U\"V\"@=i=l<^<\\=n=m!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7Fqjdkw\x7Fwkvna\x7F-ip!=?,p`qjsw=\x0E\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0E\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0E\t?,gju=\x0E\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0E\t?,gju=\x0E\t\x0E\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0E\t?,kwno=\x0E\"y\"W\"W\"[\"Q\"U\"V\"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7Fwkvna\x7Fqjdkw\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0E\t?,kwno=\x0E\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\"GL@WZSF#kwno=\x0E\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0E\t?,gju=\x0E\t\x0E\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0E\t?,algz=\x0E\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0E\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0E\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0E\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0E\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0E\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0E\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?\"GL@WZSF#kwno=\t?\"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\x0BUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=&*&'&^&\x88\u0178\u0C3E&\u01AD&\u0192&)&^&%&'&\x82&P&1&\xB1&3&]&m&u&E&t&C&\xCF&V&V&/&>&6&\u0F76\u177Co&p&@&E&M&P&x&@&F&e&\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025E*\u03EA\u21F3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0D2E&\u0503&\u0316*&*8&%&%&&&%,)&\x9A&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053C\x84(,(<&,&\u03DA&\u18C7&-&,(%&(&%&(\u013B0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xC6-\u0360\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072C\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1E78\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\u0F9C\u19D3&8(>&/&/&\u077B')'\u1065')'%@/&0&%\u043E\u09C0*&*@&C\u053D\u05D4\u0274\u05EB4\u0DD7\u071A\u04D16\u0D84&/\u0178\u0303Z&*%\u0246\u03FF&\u0134&1\xA8\u04B4\u0174", dictionarySizeBits, "AAAAKKLLKKKKKJJIHHIHHGGFF"); setData(dictionaryData, dictionarySizeBits); } /** * @constructor * @param {!Int8Array} data * @struct */ function InputStream(data) { /** @type {!Int8Array} */ this.data = new Int8Array(0); /** @type {number} */ this.offset = 0; this.data = data; } /** * @param {number} x * @return {string} */ function valueOf(x) { return x.toString(); } /** * @param {?InputStream} src * @param {!Int8Array} dst * @param {number} offset * @param {number} length * @return {number} */ function readInput(src, dst, offset, length) { if (src === null) { return -1; } let /** @type {number} */ end = Math.min(src.offset + length, src.data.length); let /** @type {number} */ bytesRead = end - src.offset; dst.set(src.data.subarray(src.offset, end), offset); src.offset += bytesRead; return bytesRead; } /** * @param {string} src * @return {!Int8Array} */ function toUsAsciiBytes(src) { let /** @type {number} */ n = src.length; let /** @type {!Int8Array} */ result = new Int8Array(n); for (let /** @type {number} */ i = 0; i < n; ++i) { result[i] = src.charCodeAt(i); } return result; } /* GENERATED CODE END */ /** @typedef {!Int8Array} */ let ByteBuffer; /** * @param {!Int8Array} bytes * @param {?Options=} options * @return {!Int8Array} */ function decode(bytes, options) { let /** @type {!State} */ s = new State(); initState(s, new InputStream(bytes)); if (options) { let customDictionary = /** @type {?Int8Array} */ (options["customDictionary"]); if (customDictionary) attachDictionaryChunk(s, customDictionary); } let /** @type {number} */ totalOutput = 0; let /** @type {!Array} */ chunks = []; while (true) { let /** @type {!Int8Array} */ chunk = new Int8Array(16384); chunks.push(chunk); s.output = chunk; s.outputOffset = 0; s.outputLength = 16384; s.outputUsed = 0; decompress(s); totalOutput += s.outputUsed; if (s.outputUsed < 16384) break; } close(s); let /** @type {!Int8Array} */ result = new Int8Array(totalOutput); let /** @type {number} */ offset = 0; for (let /** @type {number} */ i = 0; i < chunks.length; ++i) { let /** @type {!Int8Array} */ chunk = chunks[i]; let /** @type {number} */ end = Math.min(totalOutput, offset + 16384); let /** @type {number} */ len = end - offset; if (len < 16384) { result.set(chunk.subarray(0, len), offset); } else { result.set(chunk, offset); } offset += len; } return result; } return decode; }; /** * @type {function(!Int8Array, ?Options=):!Int8Array} */ export let BrotliDecode = makeBrotliDecode(); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/micProcessor.js ================================================ // micProcessor.js class MicProcessor extends AudioWorkletProcessor { constructor() { super(); // global variables for testing var sampleRate = globalThis.sampleRate; var currentFrame = globalThis.currentFrame; var currentTime = globalThis.currentTime; var currentRenderQuantum = globalThis.currentRenderQuantum; this.SampleRate = sampleRate; this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms this.Buffer = new Float32Array(this.TargetSamples); this.BufferIndex = 0; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { //this.port.postMessage(data); // echo back test } if (data instanceof Uint8Array) { } }; } process(inputs, outputs, parameters) { var inChannel0 = inputs[0][0]; if (!inChannel0) return true; let srcIndex = 0; var srcLen = inChannel0.length; while (srcIndex < srcLen) { var remaining = this.TargetSamples - this.BufferIndex; var copyCount = Math.min(remaining, srcLen - srcIndex); this.Buffer.set( inChannel0.subarray(srcIndex, srcIndex + copyCount), this.BufferIndex); this.BufferIndex += copyCount; srcIndex += copyCount; if (this.BufferIndex >= this.TargetSamples) { this.SendBuffer(); this.BufferIndex = 0; } } return true; } SendBuffer() { // convert to 16-6bit PCM var int16 = new Int16Array(this.TargetSamples); for (var i = 0; i < this.TargetSamples; i++) { int16[i] = this.Buffer[i] * 32767; } var byteArray = new Uint8Array(int16.buffer); this.port.postMessage(byteArray, [byteArray.buffer]); } } registerProcessor('mic-processor', MicProcessor); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/BlazorGL/wwwroot/js/streamProcessor.js ================================================ // streamProcessor.js class StreamProcessor extends AudioWorkletProcessor { constructor() { super(); this.queue = []; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { if (data === 2) { this.queue = []; } } if (data instanceof Uint8Array) { const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2); buffer.offset = 0; this.queue.push(buffer); } }; } process(inputs, outputs, parameters) { const output = outputs[0]; const channelCount = output.length; const sampleCount = output[0].length; let written = 0; while (written < sampleCount && this.queue.length > 0) { const buffer = this.queue[0]; const offset = buffer.offset; const available = buffer.length - offset; const needed = sampleCount - written; const copyCount = Math.min(available, needed); for (let i = 0; i < copyCount; i++) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; let value = (buffer[offset+i] / 32767); channel[written+i] = value; } } written += copyCount; buffer.offset += copyCount; if (buffer.offset >= buffer.length) { this.queue.shift(); this.port.postMessage(1); } } // Fill remaining samples with silence if (written < sampleCount) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; for (let i = written; i < sampleCount; i++) { let value = 0; channel[i] = value; } } } return true; } } registerProcessor("stream-processor", StreamProcessor); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Application.csproj ================================================ false net8.0 Major $guid4$ WinExe True True Properties $ext_safeprojectname$ $ext_safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);DESKTOPGL DesktopGL Icon.ico app.manifest Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Game.vstemplate ================================================ KNI Cross Platform Desktop Project (.net8) A KNI game project for Windows, Mac and Linux using OpenGL. CSharp 1 43300 true Game true Enabled true true false true Directory.Build.props Icon.ico Icon.bmp Program.cs app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $ext_safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $ext_safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/DesktopGL/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/GameMultiplatform.vstemplate ================================================ KNI Multiplatform Project (.net8) A KNI project for multiple platforms with shared content. Kni.CS.MultiplatformGame.Net8 VC-Managed CSharp KNI csharp android windows linux macos games KNI desktop mobile web 43101 true Game TemplateIcon.png true Enabled true 2 false true Directory.Build.props Shared\Shared.vstemplate Android\Game.vstemplate WindowsDX\Game.vstemplate DesktopGL\Game.vstemplate BlazorGL\Game.vstemplate ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $ext_safeprojectname$ { /// /// This is the main type for your game. /// public class $ext_safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $ext_safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; #if (ANDROID || iOS) graphics.IsFullScreen = true; #endif } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/Shared.vstemplate ================================================ $ext_safeprojectname$ CSharp Windows true Enabled App true false true SharedProject.projitems Game.cs Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/SharedProject.projitems ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true $guid1$ $ext_safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/Shared/SharedProject.shproj ================================================ $guid1$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Application.csproj ================================================ false net8.0-windows Major true $guid3$ WinExe Properties $ext_safeprojectname$ $ext_safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX Windows Icon.ico app.manifest Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Game.vstemplate ================================================ KNI Windows Project (.net8) A KNI game project for the Windows desktop using DirectX. CSharp 1 43100 true Game true Enabled true true false true Directory.Build.props Icon.ico Program.cs app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $ext_safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package. //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory()); using (Game game = new $ext_safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetCore/WindowsDX/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Application.csproj ================================================ Debug AnyCPU 8.0.30703 2.0 $guid4$ WinExe Properties $ext_safeprojectname$ $ext_safeprojectname$ 512 DesktopGL v4.8 true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;DESKTOPGL full AnyCPU prompt 4 false bin\$(Platform)\$(Configuration)\ TRACE;DESKTOPGL true pdbonly AnyCPU prompt 4 false Icon.ico app.manifest Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Game.vstemplate ================================================ KNI Cross Platform Desktop Project A KNI game project for Windows, Mac and Linux using OpenGL. CSharp 1 43300 true Game true Enabled true true false true Icon.ico Icon.bmp Program.cs app.manifest AssemblyInfo.cs ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $ext_safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $ext_safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$ext_safeprojectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid4$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/DesktopGL/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/GameMultiplatform.vstemplate ================================================ KNI Multiplatform Project (.NET Framework) A KNI project for multiple platforms with shared content. Kni.CS.MultiplatformGame VC-Managed CSharp KNI csharp windows linux games KNI desktop uwp 43100 true Game TemplateIcon.png true Enabled true 2 false true Shared\Shared.vstemplate WindowsDX\Game.vstemplate DesktopGL\Game.vstemplate UWPCore\Game.vstemplate UWPXaml\Game.vstemplate ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $ext_safeprojectname$ { /// /// This is the main type for your game. /// public class $ext_safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $ext_safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; #if (ANDROID || iOS) graphics.IsFullScreen = true; #endif } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/Shared.vstemplate ================================================ $ext_safeprojectname$ CSharp Windows true Enabled App true false true SharedProject.projitems Game.cs Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/SharedProject.projitems ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true $guid1$ $ext_safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/Shared/SharedProject.shproj ================================================ $guid1$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Application.csproj ================================================ Debug x86 {$guid7$} AppContainerExe Properties $ext_safeprojectname$ $ext_safeprojectname$ $currentuiculturename$ UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference Designer Content\$ext_safeprojectname$Content.mgcb 6.2.14 14.0 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Game.vstemplate ================================================ KNI Windows 10 Universal (Core) Project (.uap10) A KNI game project for Windows 10 UWP using the Core Application framework. Kni.CS.WinRT.UAPCoreGame WinRT-Native-UAP CSharp 43160 true Game true Enabled true 1 Windows 6.1.0 true false true Program.cs Package.appxmanifest Application_TemporaryKey.pfx LockScreenLogo.scale-200.png SplashScreen.scale-200.png Square44x44Logo.scale-200.png Square44x44Logo.targetsize-24_altform-unplated.png Square150x150Logo.scale-200.png StoreLogo.png Wide310x150Logo.scale-200.png AssemblyInfo.cs Default.rd.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Package.appxmanifest ================================================  $ext_safeprojectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Program.cs ================================================ using System; namespace $ext_safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// static void Main() { var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$ext_safeprojectname$Game>(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyProduct("$ext_safeprojectname$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPCore/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/App.xaml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/App.xaml.cs ================================================ using System; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace $ext_safeprojectname$ { /// /// Provides application-specific behavior to supplement the default Application class. /// sealed partial class App : Application { static string deviceFamily; /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += OnSuspending; //API check to ensure the "RequiresPointerMode" property exists, ensuring project is running on build 14393 or later if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Application", "RequiresPointerMode")) { //If running on the Xbox, disable the default on screen pointer if (IsXbox()) { Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested; } } } /// /// Detection code in Windows 10 to identify the platform it is being run on /// This function returns true if the project is running on an XboxOne /// public static bool IsXbox() { if (deviceFamily == null) deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; return deviceFamily == "Windows.Xbox"; } /// /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { // By default we want to fill the entire core window. ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow); #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } } /// /// Invoked when Navigation to a certain page fails /// /// The Frame which failed navigation /// Details about the navigation failure void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } /// /// Invoked when application execution is being suspended. Application state is saved /// without knowing whether the application will be terminated or resumed with the contents /// of memory still intact. /// /// The source of the suspend request. /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Application.csproj ================================================ Debug x86 {$guid5$} AppContainerExe Properties $ext_safeprojectname$ $ext_safeprojectname$ $currentuiculturename$ UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference App.xaml MainPage.xaml Designer Content\$ext_safeprojectname$Content.mgcb MSBuild:Compile Designer MSBuild:Compile Designer 6.2.14 14.0 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Game.vstemplate ================================================ KNI Windows 10 Universal (XAML) Project (.uap10) A KNI game project for Windows 10 UWP using XAML controls. Kni.CS.WinRT.UAPXamlGame WinRT-Native-UAP CSharp 43160 true Game true Enabled true 1 Windows 6.1.0 true false true App.xaml App.xaml.cs MainPage.xaml MainPage.xaml.cs Package.appxmanifest Application_TemporaryKey.pfx LockScreenLogo.scale-200.png SplashScreen.scale-200.png Square44x44Logo.scale-200.png Square44x44Logo.targetsize-24_altform-unplated.png Square150x150Logo.scale-200.png StoreLogo.png Wide310x150Logo.scale-200.png AssemblyInfo.cs Default.rd.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/MainPage.xaml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/MainPage.xaml.cs ================================================ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace $ext_safeprojectname$ { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { readonly $ext_safeprojectname$Game _game; public MainPage() { this.InitializeComponent(); // Create the game. string launchArguments = String.Empty; _game = Microsoft.Xna.Platform.XamlGame<$ext_safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Package.appxmanifest ================================================  $ext_safeprojectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyProduct("$ext_safeprojectname$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/UWPXaml/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Application.csproj ================================================ Debug x86 8.0.30703 2.0 $guid3$ WinExe Properties $ext_safeprojectname$ $ext_safeprojectname$ 512 Windows v4.8 true full AnyCPU false bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;WINDOWSDX prompt 4 false bin\$(Platform)\$(Configuration)\ TRACE;WINDOWSDX true pdbonly AnyCPU prompt 4 false Icon.ico app.manifest Content\$ext_safeprojectname$Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Game.vstemplate ================================================ KNI WindowsDX Project A KNI game project for the Windows desktop using DirectX. CSharp 1 43100 true Game true Enabled true true false true Icon.ico Program.cs app.manifest AssemblyInfo.cs ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $ext_safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $ext_safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$ext_safeprojectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid3$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Multiplatform.NetFramework/WindowsDX/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $safeprojectname$ { [Activity(Label = "$projectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize | ConfigChanges.Density | ConfigChanges.LayoutDirection | ConfigChanges.FontScale , ScreenOrientation = ScreenOrientation.Landscape , ExcludeFromRecents = true , Exported = true )] [IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { "org.khronos.openxr.intent.category.IMMERSIVE_HMD", "com.oculus.intent.category.VR", "android.intent.category.LAUNCHER" } )] public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new $safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/AndroidManifest.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Application.csproj ================================================  false net8.0-android 32.0 $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$safeprojectname$ 1 1.0 .m4a True ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Android /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; XRDevice xrDevice; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; // OXR requires at least feature level 9.3. graphics.GraphicsProfile = GraphicsProfile.HiDef; // Syncronize to the headset refresh rate. graphics.SynchronizeWithVerticalRetrace = true; IsFixedTimeStep = false; // 72Hz Frame rate for oculus. TargetElapsedTime = TimeSpan.FromTicks(138888); // We don't care is the main window is Focuses or not // because we render on the XR rendertargets. InactiveSleepTime = TimeSpan.FromSeconds(0); xrDevice = new XRDevice("$safeprojectname$", this.Services); } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); xrDevice.BeginSessionAsync(XRSessionMode.VR); xrDevice.TrackFloorLevelAsync(true); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); GamePadState touchControllerState = TouchController.GetState(TouchControllerType.Touch); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { float aspect = GraphicsDevice.Viewport.AspectRatio; Matrix view = Matrix.CreateLookAt(Vector3.Zero, Vector3.Forward, Vector3.Up); Matrix projection = Matrix.CreatePerspectiveFieldOfView(1, aspect, 0.05f, 1000); if (xrDevice.DeviceState == XRDeviceState.Enabled) { // Draw on XR headset. xrDevice.BeginFrame(); try { HeadsetState headsetState = xrDevice.GetHeadsetState(); // Draw each eye on a rendertarget. foreach (XREye eye in xrDevice.GetEyes()) { RenderTarget2D rt = xrDevice.GetEyeRenderTarget(eye); GraphicsDevice.SetRenderTarget(rt); // Get XR view and projection. view = headsetState.GetEyeView(eye); projection = xrDevice.CreateProjection(eye, 0.05f, 1000); // TODO: Add your drawing code here if (xrDevice.SessionMode == XRSessionMode.AR) GraphicsDevice.Clear(Color.Transparent); else GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); // Resolve eye rendertarget. GraphicsDevice.SetRenderTarget(null); // Submit eye rendertarget. xrDevice.CommitRenderTarget(eye, rt); } } finally { // Submit XR frame. int result = xrDevice.EndFrame(); } return; } // Draw on the backbuffer. GraphicsDevice.SetRenderTarget(null); // TODO: Add your drawing code here GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Game.vstemplate ================================================ KNI Oculus Project (.net8) A KNI game project for Oculus. CSharp KNI csharp Oculus games KNI XR 1 43201 true Game true Enabled true TemplateIcon.png true Directory.Build.props AndroidManifest.xml Activity.cs Game.cs Content.mgcb AboutAssets.txt AboutResources.txt Icon.png Splash.png Resource.Designer.cs Strings.xml Styles.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Resource.Designer.cs ================================================ #pragma warning disable 1591 //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ [assembly: global::Android.Runtime.ResourceDesignerAttribute("$safeprojectname$.Resource", IsApplication=true)] namespace $safeprojectname$ { [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] public partial class Resource { static Resource() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } public static void UpdateIdValues() { } public partial class Attribute { static Attribute() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; static Drawable() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; static String() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; static Style() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Style() { } } } } #pragma warning restore 1591 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Values/Strings.xml ================================================ $safeprojectname$ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/Oculus.NetCore/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Application.csproj ================================================ Debug x86 {$guid1$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ $currentuiculturename$ UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference Designer 6.2.14 14.0 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Game.vstemplate ================================================ KNI Windows 10 Universal (Core) Project (.uap10) A KNI game project for Windows 10 UWP using the Core Application framework. TemplateIcon.png Kni.CS.WinRT.UAPCoreGame WinRT-Native-UAP CSharp KNI csharp windows xbox games KNI uwp desktop console 43160 true Game true Enabled true 1 Windows 6.1.0 true Program.cs Game.cs Package.appxmanifest Application_TemporaryKey.pfx Content.mgcb LockScreenLogo.scale-200.png SplashScreen.scale-200.png Square44x44Logo.scale-200.png Square44x44Logo.targetsize-24_altform-unplated.png Square150x150Logo.scale-200.png StoreLogo.png Wide310x150Logo.scale-200.png AssemblyInfo.cs Default.rd.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Package.appxmanifest ================================================  $projectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Program.cs ================================================ using System; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// static void Main() { var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$safeprojectname$Game>(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPCore.UAP/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/App.xaml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/App.xaml.cs ================================================ using System; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace $safeprojectname$ { /// /// Provides application-specific behavior to supplement the default Application class. /// sealed partial class App : Application { static string deviceFamily; /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += OnSuspending; //API check to ensure the "RequiresPointerMode" property exists, ensuring project is running on build 14393 or later if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Application", "RequiresPointerMode")) { //If running on the Xbox, disable the default on screen pointer if (IsXbox()) { Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested; } } } /// /// Detection code in Windows 10 to identify the platform it is being run on /// This function returns true if the project is running on an XboxOne /// public static bool IsXbox() { if (deviceFamily == null) deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; return deviceFamily == "Windows.Xbox"; } /// /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { // By default we want to fill the entire core window. ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow); #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } } /// /// Invoked when Navigation to a certain page fails /// /// The Frame which failed navigation /// Details about the navigation failure void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } /// /// Invoked when application execution is being suspended. Application state is saved /// without knowing whether the application will be terminated or resumed with the contents /// of memory still intact. /// /// The source of the suspend request. /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Application.csproj ================================================ Debug x86 {$guid1$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ $currentuiculturename$ UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference App.xaml MainPage.xaml Designer MSBuild:Compile Designer MSBuild:Compile Designer 6.2.14 14.0 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Game.vstemplate ================================================ KNI Windows 10 Universal (XAML) Project (.uap10) A KNI game project for Windows 10 UWP using XAML controls. TemplateIcon.png Kni.CS.WinRT.UAPXamlGame WinRT-Native-UAP CSharp KNI csharp windows xbox games KNI uwp desktop console 43160 true Game true Enabled true 1 Windows 6.1.0 true App.xaml App.xaml.cs MainPage.xaml MainPage.xaml.cs Game.cs Package.appxmanifest Application_TemporaryKey.pfx Content.mgcb LockScreenLogo.scale-200.png SplashScreen.scale-200.png Square44x44Logo.scale-200.png Square44x44Logo.targetsize-24_altform-unplated.png Square150x150Logo.scale-200.png StoreLogo.png Wide310x150Logo.scale-200.png AssemblyInfo.cs Default.rd.xml ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/MainPage.xaml ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/MainPage.xaml.cs ================================================ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace $safeprojectname$ { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { readonly $safeprojectname$Game _game; public MainPage() { this.InitializeComponent(); // Create the game. string launchArguments = String.Empty; _game = Microsoft.Xna.Platform.XamlGame<$safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Package.appxmanifest ================================================  $projectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/UWPXaml.UAP/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Application.csproj ================================================ false net8.0-windows Major true $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX Windows Icon.ico app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Game.vstemplate ================================================ KNI Windows Project (.net8) A KNI game project for the Windows desktop using DirectX. CSharp KNI csharp windows games KNI desktop 1 43101 true Game true Enabled true TemplateIcon.png true Directory.Build.props Game.cs Icon.ico Program.cs app.manifest Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package. //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory()); using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetCore/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Application.csproj ================================================ Debug x86 8.0.30703 2.0 $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 Windows v4.8 AnyCPU true full false bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;WINDOWSDX prompt 4 false AnyCPU pdbonly true bin\$(Platform)\$(Configuration)\ TRACE;WINDOWSDX prompt 4 false Icon.ico app.manifest ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Game.vstemplate ================================================ KNI Windows Project (.NET Framework) A KNI game project for the Windows desktop using DirectX. CSharp KNI csharp windows games KNI desktop 1 43100 true Game true Enabled true TemplateIcon.png Game.cs Icon.ico Program.cs app.manifest AssemblyInfo.cs Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("$registeredorganization$")] [assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid2$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/WindowsDX.NetFramework/app.manifest ================================================  true/pm ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Application.csproj ================================================ false net8.0-ios 11.2 $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration) $(DefineConstants);iOS iOS iPhone Developer ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:iOS /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Directory.Build.props ================================================ ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Entitlements.plist ================================================  ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Game.vstemplate ================================================ KNI iOS Project (.net8) A KNI game project for iOS. CSharp KNI csharp ios games KNI mobile 1 43301 true Game true Enabled true TemplateIcon.png true Directory.Build.props Program.cs Game.cs Default.png Entitlements.plist GameThumbnail.png Info.plist Content.mgcb ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Info.plist ================================================ CFBundleDisplayName $safeprojectname$ CFBundleIconFiles GameThumbnail.png CFBundleIdentifier project.Company.$safeprojectname$ MinimumOSVersion 11.2 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight CFBundleName $safeprojectname$ UIRequiresFullScreen UIStatusBarHidden UILaunchStoryboardName LaunchScreen UIDeviceFamily 1 2 ================================================ FILE: Templates/VisualStudio2022/ProjectTemplates/iOS.NetCore/Program.cs ================================================ using System; using Foundation; using UIKit; namespace $safeprojectname$ { [Register("AppDelegate")] internal class Program : UIApplicationDelegate { private static $safeprojectname$Game game; internal static void RunGame() { game = new $safeprojectname$Game(); game.Run(); } /// /// The main entry point for the application. /// static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } public override void FinishedLaunching(UIApplication app) { RunGame(); } } } ================================================ FILE: Templates/VisualStudio2022/default.build ================================================ Default Ion Automated Build script ================================================ FILE: Templates/default.build ================================================ Default Ion Automated Build script ================================================ FILE: Templates/dotnetTemplates/Install.bat ================================================ dotnet new install .\ ================================================ FILE: Templates/dotnetTemplates/README.md ================================================ # KNI .NET Templates (`nkast.Kni.Templates`) This package provides KNI project templates for `dotnet new`. ## Install ```bash dotnet new install nkast.Kni.Templates ``` ## Uninstall ```bash dotnet new uninstall nkast.Kni.Templates ``` ## List installed templates ```bash dotnet new list kni ``` ## Usage After installation, create a project from one of the installed KNI templates: ```bash dotnet new -n ProjectName ``` ## Available templates ### Project templates | Short name | Template | Platform | Graphics backend | Audio backend | |---|---|---|---|---| | `kni-android-gl` | KNI Android Game Project | Android | GL ES | OpenAL | | `kni-blazor-gl` | KNI Web Game Project (.net8) | Blazor WebAssembly | WebGL | WebAudio | | `kni-ios-gl` | KNI iOS Game Project | iOS | GL ES | OpenAL | | `kni-oculus-gl` | KNI Oculus Game Project | Oculus | OpenGL | OpenAL | | `kni-sdl2-gl` | KNI Cross Platform Desktop Game Project (.net8) | SDL2 (Windows/Linux/macOS) | OpenGL | OpenAL | | `kni-sdl2-gl-netframework` | KNI Cross Platform Desktop Game Project (.NET Framework) | SDL2 (Windows/Linux/macOS) | OpenGL | OpenAL | | `kni-winforms-dx11` | KNI Windows Game Project (.net8) | WinForms | DirectX11 | XAudio | | `kni-winforms-dx11-netframework` | KNI Windows Game Project (.NET Framework) | WinForms | DirectX11 | XAudio | | `kni-uap-core-dx11-netframework` | KNI Windows 10 Universal (Core) Game Project (.uap10) | UWP Core | DirectX11 | XAudio | | `kni-uap-xaml-dx11-netframework` | KNI Windows 10 Universal (XAML) Game Project (.uap10) | UWP XAML | DirectX11 | XAudio | | `kni-multiplatform` | KNI Multiplatform Game Project (.net8) | Android/Blazor/SDL2/WinForms | GLES/WebGL/OpenGL/DirectX11 | OpenAL/WebAudio/XAudio | | `kni-multiplatform-netframework` | KNI Multiplatform Game Project (.NET Framework) | SDL2/WinForms/UWP | DirectX11/OpenGL | XAudio/OpenAL | | `kni-ContentPipelineExtension` | KNI Content Pipeline Extension Project (.NetStandard) | - | - | - | ### Item templates | Short name | Template | |---|---| | `KniDrawableGameComponent` | KNI DrawableGameComponent Item | | `KniGameComponent` | KNI GameComponent Item | ## What is included This package includes templates for KNI game projects and related project setups available under the `Templates/dotnetTemplates/content` folder. ## Links - Repository: https://github.com/kniEngine/kni - Issues: https://github.com/kniEngine/kni/issues - Discussions: https://github.com/kniEngine/kni/discussions ================================================ FILE: Templates/dotnetTemplates/Uninstall.bat ================================================ dotnet new uninstall .\ ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$.csproj ================================================  false net8.0-android $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$safeprojectname$ 1 1.0 .m4a True ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid1$}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $safeprojectname$ { [Activity(Label = "$projectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize , ScreenOrientation = ScreenOrientation.FullSensor )] public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new $safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Android", "mobile" ], "identity": "nkast.Kni.Android.GL.Project.CSharp", "name": "KNI Android Game Project", "shortName": "kni-android-gl", "description": "A KNI game project for Android.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/AndroidManifest.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Android /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Resource.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace $safeprojectname$ { public partial class Resource { public partial class Attribute { private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; private Style() { } } } } ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Values/Strings.xml ================================================ $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Android.NetCore.CSharp/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$.csproj ================================================ false net8.0 disable disable $safeprojectname$ $safeprojectname$ $(DefineConstants);BLAZORGL BlazorGL false ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/Game.vstemplate ================================================ KNI Web browser Platform Project (.net8) A KNI game project for Blazor webassembly using WebGL. CSharp KNI csharp web games KNI web 1 43300 true Game true Enabled true TemplateIcon.png true _Imports.razor App.razor Directory.Build.props Game.cs MainLayout.razor MainLayout.razor.css Program.cs Content.mgcb Index.razor Index.razor.cs launchSettings.json app.css bootstrap.min.css bootstrap.min.css.map decode.min.js streamProcessor.js micProcessor.js favicon.ico kni.png index.html ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Web" ], "identity": "nkast.Kni.Blazor.GL.Project.CSharp", "name": "KNI Web Game Project (.net8)", "shortName": "kni-blazor-gl", "description": "A KNI game project for Blazor webassembly using WebGL.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/App.razor ================================================  Not found

Sorry, there's nothing at this address.

================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:BlazorGL /config: /profile:Reach /compress:True #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/MainLayout.razor.css ================================================ .page { position: relative; display: flex; flex-direction: column; } main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row ::deep .btn-link { white-space: nowrap; margin-left: 1.5rem; text-decoration: none; } .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { text-decoration: underline; } .top-row ::deep a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row ::deep a, .top-row ::deep .btn-link { margin-left: 0; } } @media (min-width: 641px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .top-row.auth ::deep a:first-child { flex: 1; text-align: right; width: 0; } .top-row, article { padding-left: 2rem !important; padding-right: 1.5rem !important; } } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Pages/Index.razor ================================================ @page "/" @page "/index.html" @inject IJSRuntime JsRuntime @using nkast.Wasm.Canvas $projectname$
================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Pages/Index.razor.cs ================================================ using System; using Microsoft.JSInterop; using Microsoft.Xna.Framework; namespace $safeprojectname$.Pages { public partial class Index { Game _game; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { JsRuntime.InvokeAsync("initRenderJS", DotNetObjectReference.Create(this)); } } [JSInvokable] public void TickDotNet() { // init game if (_game == null) { _game = new $safeprojectname$Game(); _game.Run(); } // run gameloop _game.Tick(); } } } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Program.cs ================================================ using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; namespace $safeprojectname$ { internal class Program { private static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddScoped(sp => new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); } } } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:56897", "sslPort": 0 } }, "profiles": { "$safeprojectname$": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5259", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using nkast.Wasm.Canvas @using $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/Content/.gitignore ================================================ ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/css/app.css ================================================  html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } h1:focus { outline: none; } a, .btn-link { color: #0077cc; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } .blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; } .blazor-error-boundary::after { content: "An error has occurred." } #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; /* Disable text highlighting and magnifying glass on iPhone/webkit */ -webkit-user-select: none; } #canvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; } ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/index.html ================================================  $projectname$
Made with
Kni
loading . . .   
An unhandled error has occurred. Reload x
================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/decode.js ================================================ /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @typedef {!Object} Options * @property {?Int8Array} customDictionary */ let Options; /** * Private scope / static initializer for decoder. * * @return {function(!Int8Array, ?Options=):!Int8Array} */ let makeBrotliDecode = () => { /* GENERATED CODE BEGIN */ /** @type {!Int32Array} */ const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); /** @type {!Int32Array} */ const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); /** @type {!Int32Array} */ const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); /** @type {!Int32Array} */ const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); /** @type {!Int32Array} */ const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); /** @type {!Int16Array} */ const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); /** @type {!Int16Array} */ const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); /** @type {!Int16Array} */ const CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { let /** @type {number} */ result = -1; let /** @type {number} */ step = 16; while (step > 0) { if ((i >>> step) !== 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw new Error("maxDistance is too small"); } const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4; const /** @type {number} */ ndistbits = log2floor(offset) - 1; const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24); const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (let /** @type {number} */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) { let /** @type {number} */ rangeIdx = cmdCode >>> 6; let /** @type {number} */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode]; const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); const /** @type {number} */ index = cmdCode * 4; cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { const /** @type {number} */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 0) { return 16; } let /** @type {number} */ n = readFewBits(s, 3); if (n !== 0) { return 17 + n; } n = readFewBits(s, 3); if (n !== 0) { if (n === 1) { if (largeWindowEnabled === 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) === 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @return {void} */ function enableEagerOutput(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isEager = 1; } /** * @param {!State} s * @return {void} */ function enableLargeWindow(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isLargeWindow = 1; } /** * @param {!State} s * @param {!Int8Array} data * @return {void} */ function attachDictionaryChunk(s, data) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } if (s.cdNumChunks === 0) { s.cdChunks = new Array(16); s.cdChunkOffsets = new Int32Array(16); s.cdBlockBits = -1; } if (s.cdNumChunks === 15) { throw new Error("Too many dictionary chunks"); } s.cdChunks[s.cdNumChunks] = data; s.cdNumChunks++; s.cdTotalSize += data.length; s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState !== 0) { throw new Error("State MUST be uninitialized"); } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState === 0) { throw new Error("State MUST be initialized"); } if (s.runningState === 11) { return; } s.runningState = 11; if (s.input !== null) { s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) !== 0) { const /** @type {number} */ n = readFewBits(s, 3); if (n === 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) { return; } const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles === 7) { s.isMetadata = 1; if (readFewBits(s, 1) !== 0) { throw new Error("Corrupted reserved bit"); } const /** @type {number} */ sizeBytes = readFewBits(s, 2); if (sizeBytes === 0) { return; } for (let /** @type {number} */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 8); if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 8); } } else { for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 4); if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd === 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { let /** @type {number} */ offset = tableGroup[tableIdx]; const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; const /** @type {number} */ bits = tableGroup[offset] >> 16; const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; const /** @type {number} */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s); const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { const /** @type {number} */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { const /** @type {!Int32Array} */ mtf = new Int32Array(256); for (let /** @type {number} */ i = 0; i < 256; i++) { mtf[i] = i; } for (let /** @type {number} */ i = 0; i < vLen; i++) { const /** @type {number} */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index !== 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { let /** @type {number} */ symbol = 0; let /** @type {number} */ prevCodeLen = 8; let /** @type {number} */ repeat = 0; let /** @type {number} */ repeatCodeLen = 0; let /** @type {number} */ space = 32768; const /** @type {!Int32Array} */ table = new Int32Array(33); const /** @type {number} */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; const /** @type {number} */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen !== 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { const /** @type {number} */ extraBits = codeLen - 14; let /** @type {number} */ newLen = 0; if (codeLen === 16) { newLen = prevCodeLen; } if (repeatCodeLen !== newLen) { repeat = 0; repeatCodeLen = newLen; } const /** @type {number} */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; const /** @type {number} */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw new Error("symbol + repeatDelta > numSymbols"); } for (let /** @type {number} */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen !== 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space !== 0) { throw new Error("Unused space"); } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (let /** @type {number} */ i = 0; i < length - 1; ++i) { for (let /** @type {number} */ j = i + 1; j < length; ++j) { if (symbols[i] === symbols[j]) { throw new Error("Duplicate simple Huffman code symbol"); } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ symbols = new Int32Array(4); const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1); const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1; for (let /** @type {number} */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw new Error("Can't readHuffmanCode"); } symbols[i] = symbol; } checkDupes(symbols, numSymbols); let /** @type {number} */ histogramId = numSymbols; if (numSymbols === 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; default: break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18); let /** @type {number} */ space = 32; let /** @type {number} */ numCodes = 0; for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) { const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v !== 0) { space -= (32 >> v); numCodes++; } } if (space !== 0 && numCodes !== 1) { throw new Error("Corrupted Huffman code histogram"); } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip === 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees === 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ useRleForZeros = readFewBits(s, 1); let /** @type {number} */ maxRunLengthPrefix = 0; if (useRleForZeros !== 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix; const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1); const /** @type {number} */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (let /** @type {number} */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(table, tableIdx, s); if (code === 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ reps = (1 << code) + readFewBits(s, code); while (reps !== 0) { if (i >= contextMapSize) { throw new Error("Corrupted context map"); } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { const /** @type {!Int32Array} */ ringBuffers = s.rings; const /** @type {number} */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType === 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType === 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); const /** @type {number} */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; const /** @type {number} */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { let /** @type {number} */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { const /** @type {number} */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37; const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length !== 0) { newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd !== 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) { return; } if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata !== 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata !== 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { let /** @type {number} */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; const /** @type {number} */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits; const /** @type {!Int32Array} */ distOffset = s.distOffset; const /** @type {number} */ npostfix = s.distancePostfixBits; const /** @type {number} */ ndirect = s.numDirectDistanceCodes; const /** @type {number} */ postfix = 1 << npostfix; let /** @type {number} */ bits = 1; let /** @type {number} */ half = 0; let /** @type {number} */ i = 16; for (let /** @type {number} */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (let /** @type {number} */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) { const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] !== j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow === 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength); copyRawBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos === s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite !== 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize); let /** @type {number} */ next = n; for (let /** @type {number} */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { let /** @type {number} */ result = s.ringBufferSize; if (s.isEager !== 0) { result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @param {number} fence * @return {void} */ function doUseDictionary(s, fence) { if (s.distance > 0x7FFFFFFC) { throw new Error("Invalid backward reference"); } const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize; if (address < 0) { initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength); s.runningState = 14; } else { const /** @type {!ByteBuffer} */ dictionaryData = data; const /** @type {number} */ wordLength = s.copyLength; if (wordLength > 31) { throw new Error("Invalid backward reference"); } const /** @type {number} */ shift = sizeBits[wordLength]; if (shift === 0) { throw new Error("Invalid backward reference"); } let /** @type {number} */ offset = offsets[wordLength]; const /** @type {number} */ mask = (1 << shift) - 1; const /** @type {number} */ wordIdx = address & mask; const /** @type {number} */ transformIdx = address >>> shift; offset += wordIdx * wordLength; const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS; if (transformIdx >= transforms.numTransforms) { throw new Error("Invalid backward reference"); } const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; return; } s.runningState = 4; } } /** * @param {!State} s * @return {void} */ function initializeCompoundDictionary(s) { s.cdBlockMap = new Int8Array(256); let /** @type {number} */ blockBits = 8; while (((s.cdTotalSize - 1) >>> blockBits) !== 0) { blockBits++; } blockBits -= 8; s.cdBlockBits = blockBits; let /** @type {number} */ cursor = 0; let /** @type {number} */ index = 0; while (cursor < s.cdTotalSize) { while (s.cdChunkOffsets[index + 1] < cursor) { index++; } s.cdBlockMap[cursor >>> blockBits] = index; cursor += 1 << blockBits; } } /** * @param {!State} s * @param {number} address * @param {number} length * @return {void} */ function initializeCompoundDictionaryCopy(s, address, length) { if (s.cdBlockBits === -1) { initializeCompoundDictionary(s); } let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits]; while (address >= s.cdChunkOffsets[index + 1]) { index++; } if (s.cdTotalSize > address + length) { throw new Error("Invalid backward reference"); } s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; s.metaBlockLength -= length; s.cdBrIndex = index; s.cdBrOffset = address - s.cdChunkOffsets[index]; s.cdBrLength = length; s.cdBrCopied = 0; } /** * @param {!State} s * @param {number} fence * @return {number} */ function copyFromCompoundDictionary(s, fence) { let /** @type {number} */ pos = s.pos; const /** @type {number} */ origPos = pos; while (s.cdBrLength !== s.cdBrCopied) { const /** @type {number} */ space = fence - pos; const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex]; const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset; let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied; if (length > remChunkLength) { length = remChunkLength; } if (length > space) { length = space; } s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos); pos += length; s.cdBrOffset += length; s.cdBrCopied += length; if (length === remChunkLength) { s.cdBrIndex++; s.cdBrOffset = 0; } if (pos >= fence) { break; } } return pos - origPos; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState === 0) { throw new Error("Can't decompress until initialized"); } if (s.runningState === 11) { throw new Error("Can't decompress after close"); } if (s.runningState === 1) { const /** @type {number} */ windowBits = decodeWindowBits(s); if (windowBits === -1) { throw new Error("Invalid 'windowBits' code"); } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } let /** @type {number} */ fence = calculateFence(s); let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1; let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; while (s.runningState !== 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength === 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext !== 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState !== 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } let /** @type {number} */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength === 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw new Error("Negative distance"); } } else { const /** @type {number} */ extraBits = s.distExtraBits[distanceCode]; let /** @type {number} */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw new Error("Invalid backward reference"); } s.j = 0; s.runningState = 8; case 8: let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask; let /** @type {number} */ dst = s.pos; const /** @type {number} */ copyLength = s.copyLength - s.j; const /** @type {number} */ srcEnd = src + copyLength; const /** @type {number} */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (let /** @type {number} */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState === 8) { s.runningState = 4; } continue; case 9: doUseDictionary(s, fence); continue; case 14: s.pos += copyFromCompoundDictionary(s, fence); if (s.pos >= fence) { s.nextRunningState = 14; s.runningState = 12; return; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) === 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw new Error("Unexpected state " + valueOf(s.runningState)); } } if (s.runningState === 10) { if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } /** @type {!Transforms} */ const RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {string} prefixSuffixSrc * @param {string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { const /** @type {number} */ n = prefixSuffixSrc.length; let /** @type {number} */ index = 1; let /** @type {number} */ j = 0; for (let /** @type {number} */ i = 0; i < n; ++i) { const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i); if (c === 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (let /** @type {number} */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { let /** @type {number} */ offset = dstOffset; const /** @type {!Int32Array} */ triplets = transforms.triplets; const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage; const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads; const /** @type {number} */ transformOffset = 3 * transformIndex; const /** @type {number} */ prefixIdx = triplets[transformOffset]; const /** @type {number} */ transformType = triplets[transformOffset + 1]; const /** @type {number} */ suffixIdx = triplets[transformOffset + 2]; let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx]; const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx]; const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; let /** @type {number} */ omitFirst = transformType - 11; let /** @type {number} */ omitLast = transformType; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix !== prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; let /** @type {number} */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType === 10 || transformType === 11) { let /** @type {number} */ uppercaseOffset = offset - len; if (transformType === 10) { len = 1; } while (len > 0) { const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType === 21 || transformType === 22) { let /** @type {number} */ shiftOffset = offset - len; const /** @type {number} */ param = transforms.params[transformIndex]; let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { let /** @type {number} */ step = 1; const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) { } else if (c0 < 0xE0) { if (len >= 2) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; const /** @type {number} */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType === 21) { len = 0; } } } while (suffix !== suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { let /** @type {number} */ step = 1 << (len - 1); while ((key & step) !== 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { let /** @type {number} */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { const /** @type {number} */ tableOffset = tableGroup[tableIdx]; let /** @type {number} */ key; const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize); const /** @type {!Int32Array} */ count = new Int32Array(16); const /** @type {!Int32Array} */ offset = new Int32Array(16); let /** @type {number} */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (let /** @type {number} */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] !== 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } let /** @type {number} */ tableBits = rootBits; let /** @type {number} */ tableSize = 1 << tableBits; let /** @type {number} */ totalSize = tableSize; if (offset[15] === 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } const /** @type {number} */ mask = totalSize - 1; let /** @type {number} */ low = -1; let /** @type {number} */ currentOffset = tableOffset; for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) !== low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached !== 0) { if (halfAvailable(s) >= -2) { return; } throw new Error("No more input"); } const /** @type {number} */ readOffset = s.halfOffset << 1; let /** @type {number} */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer; const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached === 0) { return; } const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw new Error("Read after end"); } if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) { throw new Error("Unused bytes after end"); } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { const /** @type {number} */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset === 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { const /** @type {number} */ padding = (32 - s.bitOffset) & 7; if (padding !== 0) { const /** @type {number} */ paddingBits = readFewBits(s, padding); if (paddingBits !== 0) { throw new Error("Corrupted padding bits"); } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { let /** @type {number} */ limit = 2048; if (s.endOfStreamReached !== 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyRawBytes(s, data, offset, length) { if ((s.bitOffset & 7) !== 0) { throw new Error("Unaligned copyBytes"); } while ((s.bitOffset !== 32) && (length !== 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length === 0) { return; } const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { const /** @type {number} */ readOffset = s.halfOffset << 1; const /** @type {number} */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length === 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length !== 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { const /** @type {number} */ len = readInput(s.input, data, offset, length); if (len === -1) { throw new Error("Unexpected end of input"); } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer; const /** @type {number} */ halfLen = byteLen >> 1; const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer; for (let /** @type {number} */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } /** @type {!Int32Array} */ const LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {string} map * @param {string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (let /** @type {number} */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (let /** @type {number} */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } let /** @type {number} */ offset = 1280; for (let /** @type {number} */ k = 0; k < 19; ++k) { const /** @type {number} */ value = k & 3; const /** @type {number} */ rep = rle.charCodeAt(k) - 32; for (let /** @type {number} */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (let /** @type {number} */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {number} */ this.accumulator64 = 0; /** @type {number} */ this.runningState = 0; /** @type {number} */ this.nextRunningState = 0; /** @type {number} */ this.accumulator32 = 0; /** @type {number} */ this.bitOffset = 0; /** @type {number} */ this.halfOffset = 0; /** @type {number} */ this.tailBytes = 0; /** @type {number} */ this.endOfStreamReached = 0; /** @type {number} */ this.metaBlockLength = 0; /** @type {number} */ this.inputEnd = 0; /** @type {number} */ this.isUncompressed = 0; /** @type {number} */ this.isMetadata = 0; /** @type {number} */ this.literalBlockLength = 0; /** @type {number} */ this.numLiteralBlockTypes = 0; /** @type {number} */ this.commandBlockLength = 0; /** @type {number} */ this.numCommandBlockTypes = 0; /** @type {number} */ this.distanceBlockLength = 0; /** @type {number} */ this.numDistanceBlockTypes = 0; /** @type {number} */ this.pos = 0; /** @type {number} */ this.maxDistance = 0; /** @type {number} */ this.distRbIdx = 0; /** @type {number} */ this.trivialLiteralContext = 0; /** @type {number} */ this.literalTreeIdx = 0; /** @type {number} */ this.commandTreeIdx = 0; /** @type {number} */ this.j = 0; /** @type {number} */ this.insertLength = 0; /** @type {number} */ this.contextMapSlice = 0; /** @type {number} */ this.distContextMapSlice = 0; /** @type {number} */ this.contextLookupOffset1 = 0; /** @type {number} */ this.contextLookupOffset2 = 0; /** @type {number} */ this.distanceCode = 0; /** @type {number} */ this.numDirectDistanceCodes = 0; /** @type {number} */ this.distancePostfixBits = 0; /** @type {number} */ this.distance = 0; /** @type {number} */ this.copyLength = 0; /** @type {number} */ this.maxBackwardDistance = 0; /** @type {number} */ this.maxRingBufferSize = 0; /** @type {number} */ this.ringBufferSize = 0; /** @type {number} */ this.expectedTotalSize = 0; /** @type {number} */ this.outputOffset = 0; /** @type {number} */ this.outputLength = 0; /** @type {number} */ this.outputUsed = 0; /** @type {number} */ this.ringBufferBytesWritten = 0; /** @type {number} */ this.ringBufferBytesReady = 0; /** @type {number} */ this.isEager = 0; /** @type {number} */ this.isLargeWindow = 0; /** @type {number} */ this.cdNumChunks = 0; /** @type {number} */ this.cdTotalSize = 0; /** @type {number} */ this.cdBrIndex = 0; /** @type {number} */ this.cdBrOffset = 0; /** @type {number} */ this.cdBrLength = 0; /** @type {number} */ this.cdBrCopied = 0; /** @type {!Array} */ this.cdChunks = new Array(0); /** @type {!Int32Array} */ this.cdChunkOffsets = new Int32Array(0); /** @type {number} */ this.cdBlockBits = 0; /** @type {!Int8Array} */ this.cdBlockMap = new Int8Array(0); /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** @type {!ByteBuffer} */ let data = new Int8Array(0); /** @type {!Int32Array} */ const offsets = new Int32Array(32); /** @type {!Int32Array} */ const sizeBits = new Int32Array(32); /** * @param {!Int8Array} newData * @param {!Int32Array} newSizeBits * @return {void} */ function setData(newData, newSizeBits) { if (newSizeBits.length > 31) { throw new Error("sizeBits length must be at most " + valueOf(31)); } for (let /** @type {number} */ i = 0; i < 4; ++i) { if (newSizeBits[i] !== 0) { throw new Error("first " + valueOf(4) + " must be 0"); } } const /** @type {!Int32Array} */ dictionaryOffsets = offsets; const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits; dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0); let /** @type {number} */ pos = 0; const /** @type {number} */ limit = newData.length; for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) { dictionaryOffsets[i] = pos; const /** @type {number} */ bits = dictionarySizeBits[i]; if (bits !== 0) { if (bits >= 31) { throw new Error("newSizeBits values must be less than 31"); } pos += i << bits; if (pos <= 0 || pos > limit) { throw new Error("newSizeBits is inconsistent: overflow"); } } } for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) { dictionaryOffsets[i] = pos; } if (pos !== limit) { throw new Error("newSizeBits is inconsistent: underflow"); } data = newData; } /** * @param {!Int8Array} dictionary * @param {string} data0 * @param {string} data1 * @param {string} skipFlip * @param {!Int32Array} sizeBits * @param {string} sizeBitsData * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) { const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1); if (dict.length !== dictionary.length) { throw new Error("Corrupted brotli dictionary"); } let /** @type {number} */ offset = 0; const /** @type {number} */ n = skipFlip.length; for (let /** @type {number} */ i = 0; i < n; i += 2) { const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36; const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36; for (let /** @type {number} */ j = 0; j < skip; ++j) { dict[offset] ^= 3; offset++; } for (let /** @type {number} */ j = 0; j < flip; ++j) { dict[offset] ^= 236; offset++; } } for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) { sizeBits[i] = sizeBitsData.charCodeAt(i) - 65; } dictionary.set(dict); } { const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784); const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25); unpackDictionaryData(dictionaryData, "wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sksolpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7F\"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\x0Bwbmhzbqgaltoavpk965YIbub03s{\t\x7F~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0E\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7F.\t\"331*mgltX2^8X^8\tOld#pbow\x0E\t\n\nabmdwqjnabwk*x\x0E\t33s{\t~*8hl9\0effpbg=\x0Ep9,,#X^8wloosovd+*x\tx\x0E\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0E\t~\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0E\tabmgprvfvf>#x~8;3s{8`hjmdx\x0E\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7F\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\x0E\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0E\t?\"pwffo#zlv#k1=\x0E\telqn#ifpvp233&#nfmv-\x0E\t\n\x0E\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0E\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7F\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7F\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0Evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\x0BBl\bQ\x7F\x0BUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\x0BBM\x0B|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7Fm\x04kF\t[]\bPm\bTv\nsI\x0Bpg\t[I\bQp\x04mx\x0B_W\n^M\npe\x0BQ}\x0BGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\x0BGL\x0BxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\x0BwT\ti_\bTg\x04QQ\n|p\x0BXN\bQS\x0BxD\x04QC\bWZ\tpD\x0BVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\x0BQ}\x0BWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\x0BEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\x0Bxs\nXW\twR\x0Bek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\x0B_W\x0BWs\x0BsI\x05m\x7F\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\x0B@@\bTl\bPv\t}t\x04Sw\x04M`\x0BnU\tkW\x0Bed\nqo\x0BxY\tA|\bTz\x0By`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7Fm\tav\tBN\x0Bb\\\tpD\bTf\nY[\tJn\bQy\t[^\x0BWc\x0Byu\x04Dl\x04CJ\x0BWj\x0BHR\t`V\x0BuW\tQy\np@\x0BGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7FR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\x0BQB\x0BWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7F\tea\tdj\x0B]W\nb~\x04M`\twL\bTV\bVH\nt\x7F\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\x0BK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\x0BHR\bPv\x0BLx\x0BEZ\bT\x7F\bTv\tiD\x05oD\x05MU\x0BwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\x0BxY\x04h}\nzk\bWZ\t\x7Fm\x0Be`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\x0BDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\x0BwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\x0BxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\x0BRb\twQ\n]Q\x04QJ\bWg\x0BWa\bQj\ntC\bVH\nYm\x0Bxs\bVK\nel\bWI\x0BxY\x04Cq\ntR\x0BHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\x0Bxs\x0B_W\td{\x0BQ}\tcg\tTz\tA|\tCj\x0BLm\x05N}\x05m\x7F\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\x0BQ}\bTf\x05ka\x04Jm\x0B@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\x0Bb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\x0BbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7Fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\x0BKC\tdj\tI_\bVV\ny\\\x0BLm\x05xl\txB\tkV\x0Bb\\\x0BJW\x0BVS\tVx\x0BxD\td{\x04MD\bTa\t|`\x0BPz\x04R}\x0BWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\x0BWh\x0BWk\nxS\x0BAz\x0BwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7F\x0Bpg\td\\\x0BoA\x05{D\ti_\x05xB\bT\x7F\t`V\x05qr\tTT\x04g]\x04CA\x0BuR\tVJ\tT`\npw\x0BRb\tI_\nCx\x04Ro\x0BsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\x0B^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\x0B|j\nqo\x05u|\tQ]\x0Bek\x05\x7FZ\x04M`\x04St\npe\tdj\bVG\x0BeE\t\x7Fm\x0BWc\x04|I\n[W\tfL\bT\x7F\tBZ\x04Su\x0BKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\x0BBl\bWg\x04XD\x05kc\x0Bx[\bVV\tQ]\t\x7Fa\tPy\x0BxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\x0Bx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\x0BK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7F\x05Nt\x0BDg\tVc\bTl\x04d@\npo\t\x7FM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\x0BF{\tcO\tfD\nlm\x0BfZ\nlm\x0BeU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7F\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\x0BxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\x0BDg\x0Bx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\x0B_W\nLk\x05Nt\tyj\tfM\x04R\x7F\tiI\bTl\x0BwX\tsV\x0BMl\nyu\tAJ\bVj\x04KO\tWV\x0BA}\x0BW\x7F\nrp\tiD\x0B|o\x05lv\x0BsI\x04BM\td~\tCU\bVb\x04eV\npC\x0BwT\tj`\tc}\x0Bxs\x0Bps\x0Bvh\tWV\x0BGg\x0BAe\x0BVK\x0B]W\trg\x0BWc\x05F`\tBr\x0Bb\\\tdZ\bQp\nqI\x04kF\nLk\x0BAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\x0B@@\bTe\ti_\n_D\twL\nAH\x0BiK\x0Bek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\x0BVK\npl\x04S}\x0BWP\t|d\x04MD\x0BHV\bT\x7F\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\x0B^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7Fm\x04uQ\x0BhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\x0BxD\t\x7Fm\bTp\x04IS\nc|\tkV\x05i~\tV{\x0BhZ\t|b\bWt\n@R\x0BoA\x0BnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\x0BQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\x0Bpg\x0Bpg\x0BWc\tiT\tbs\twL\tU_\tc\\\t|h\x0BKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\x0Bed\bTW\bSB\nxU\tcn\bTb\ne\x7F\ta\\\tSG\bU|\npV\nN\\\x04Kn\x0BnU\tAt\tpD\x0B^R\x0BIr\x04b[\tR{\tdE\x0BxD\x0BWK\x0BWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7Fa\bQp\x05Ob\nLP\bTl\x04Y[\x0BK}\tAJ\bQ\x7F\x04n^\x0BsA\bSM\nqM\bWZ\n^W\x0Bz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\x0Bxs\x04mx\x0Bws\tcC\ntC\tyc\x05M`\x0BW\x7F\nrh\bQp\x0BxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\x0Bpg\tcn\tfL\x0Bvh\x04Cq\bTl\x0BnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\x0BKW\tfD\nea\x04oQ\tj_\tBv\x04nM\x0BID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\x0BxD\x04|I\x05xl\nfy\x04Ce\x0BwB\nLk\x0Bd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\x0BeE\tjp\nq}\tiD\x05qN\x0B^R\t\x7Fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\x0BHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\x0B]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\x0Bxs\x04BN\x05ti\x04lm\tTd\t]y\x0BHV\tSo\x0B|j\x04XX\tA|\x0BZ^\x0BGu\bTW\x05M`\x04kF\x0BhZ\x0BVK\tdG\x0BBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7F\tPl\bWO\x0BLm\tdL\x05uH\x04Cm\tdT\x04fn\x0BwB\x05ka\x0BnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\x0BAx\tHE\bTg\bSq\x05vp\x0Bb\\\bWO\nOl\nsI\nfy\x0BID\t\\c\n{Z\n^~\npe\nAO\tTT\x0Bxv\x04k_\bWO\x0B|j\x0BwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\x0BJc\x0Bed\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\x0Bxs\n`e\x0BiK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\x0BWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7F\tHE\tp\\\tfF\tfw\bVV\bW@\tak\x0BVK\x05ls\tVJ\bVV\x0BeE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7F\tPl\t]y\x0BwT\x05{p\x04MD\x0Bb\\\tQ]\x04Kj\tJn\nAH\x0BRb\tBU\tHK\t\\c\nfI\x05m\x7F\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\x0BGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\x0BuW\tiI\bWI\nqI\x0B|j\x04BV\bVg\bWZ\x04kF\x0Bx]\bTA\tab\tfr\ti@\tJd\tJd\x0Bps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\x0Bw}\x0BqO\ti[\bQ\x7F\bTz\x0BVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\x0BWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\x0BAx\nMd\tBr\x05ui\x0BxY\bSM\x0BWc\x0B|j\x0Bxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\x0BeU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7F\x0BhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\x0BGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\x0Bb\\\tpV\ncc\x04S\\\tct\t`z\bPL\x0BWs\nA`\neg\bSq\x05uE\x04CR\x0BDg\t`W\x0Bz{\x0BWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\x0BRb\bTQ\npl\x05Gt\x0BuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\x0BDg\x0Bed\tq{\x04VG\bQ\x7F\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\x0BB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\x0BwT\bSM\x05MY\x05qN\tdj\x05~s\x0BQ}\x05MY\x0BMB\tBv\twR\bRg\x0BQ}\tql\x0BKC\nrm\x05xu\x04CC\x0BwB\x0Bvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\x0B{i\nC~\tBL\x0BeE\x05uH\bVj\x04Ey\x04Gz\x0BzR\x0B{i\tcf\n{Z\n]n\x04XA\x0BGu\x0BnU\thS\x0BGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7F\tc\\\x0BmO\x0BWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\x0BwT\npV\ndt\x0ByI\tVx\tQ\x7F\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\x0BwB\t}t\t[I\tCP\x04kX\x0BFm\x0BhZ\x05m\x7F\ti[\np@\x0BQ}\x0BW\x7F\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\x0BRb\tio\tPy\x04Y[\nxU\tct\x0B@@\tww\bPv\x04BM\x04FF\ntb\x05v|\x0BKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7F\x0B_W\tTJ\nqI\t|a\tA{\x0BuP\x04MD\tPl\nxR\tfL\x0Bws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\x0BW\x7F\nqs\x05lv\bSM\x04Zi\x0BVK\x05ia\x0BQB\tQ\x7F\n{Z\bPt\x0BKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\x0BDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\x0BeU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\x0BWc\tqv\n`m\tU^\x05oD\nd|\x0BGg\tdE\x0Bwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\x0BxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\x0Bps\ntC\x0BpP\x0Bqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\x0Bxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\x0B@J\t|d\x05uh\bWZ\x0BeU\x0BnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\x0BNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\x0BAx\np@\nzk\x0BRb\x05Os\x0BWS\x04e^\x0BD_\tBv\x0BWd\bVb\x0Bxs\x0BeE\bRw\n]n\n|p\x0Bg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\x0Bps\npe\x05u|\x0BGr\bVe\tCU\x04]M\x04XU\x0BxD\bTa\tIQ\x0BWq\tCU\tam\tdj\bSo\x04Sw\x0BnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\x0BnU\nzU\t|}\tiD\nz\\\bSM\x0BxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\x0BFm\x0BLX\x05vc\x0Bql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\x0BRb\tyj\tsb\x0BWs\bTl\tkV\x0Bed\ne\x7F\x05lL\x0BxN\t\x7Fm\nJn\tjY\x0BxD\bVb\bSq\x0Byu\twL\x0BXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\x0B|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\x0BEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\x0BbE\tBZ\x0BRH\bP{\tjp\n\\}\ta_\tcC\t|a\x0BD]\tBZ\ti[\tfD\x0BxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\x0BLx\x0BM@\bWZ\x04Kn\x0Bpg\nTi\nIv\n|r\x0B@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\x0BxD\n]s\x04gc\x0Bps\tBr\bTW\x0BBM\x05tZ\nBY\x04DW\tjf\x0BSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\x0Bgl\nig\bUs\x04BT\x0BbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\x0BID\x0B|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0E\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0E\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0E\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0E\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0E\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0E\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7F\x7F#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsksbo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-iptfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0E\t?\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0E\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7F\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0E\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0E\t\x0E\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0E\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\"..#fmgojfp#jm$^*8\x0E\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0E\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0E\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0E\t\x0E\t\x0E\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbmgjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0E\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0E\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0E\t\x0E\t?\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0E\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\"..#fmg?,psbm=??aq#,=\x0E\t\\slsvsp\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0E\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\"..#wjwof!=?,irvfqz-?,elqn=\t+\x0BBl\bQ\x7F*+\x0BUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0E\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0E\t?\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0E\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0E\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0E\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\x0BBl\bQ\x7F\tA{\x0BUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\x0BB{\npV\x0B@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\x0BQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\x0Bed\x0BHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\x0BLm\tKx\t}t\bPv\ny\\\naB\tV\x7F\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\x0Bxs\x04Zf\nqI\x04Zf\x0BBM\x0B|j\t}t\bSM\nmC\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0E\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0E\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0E\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0E\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0E\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0E\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0E\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw", "fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7Fwkvna\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0E\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0E\t?kfbg=\x0E\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0E\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0E\t?,kfbg=\x0E\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0E\t\n?,gju=\x0E\t\x0E\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0E\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0E\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0E\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0E\t?kfbg=\x0E\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0E\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0E\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\"Xfmgje^..=\x0E\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\"Xfmgje^..=\x0E\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0E\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0E\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0E\t?,p`qjsw=\x0E\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0E\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0E\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0E\t\x0E\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7F#?b#kqfe>!?\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0E\t?,p`qjsw=\x0E\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0E\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0E\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\x0BBl\bQ\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0E\t?,p`qjsw=\x0E\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7Fwkvna\x7Fofew\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0E\t?-ip!=?,p`qjsw=\x0E\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\"y\"W\"W\"[\"Q\"U\"V\"@=i=l<^<\\=n=m!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7Fqjdkw\x7Fwkvna\x7F-ip!=?,p`qjsw=\x0E\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0E\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0E\t?,gju=\x0E\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0E\t?,gju=\x0E\t\x0E\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0E\t?,kwno=\x0E\"y\"W\"W\"[\"Q\"U\"V\"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7Fwkvna\x7Fqjdkw\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0E\t?,kwno=\x0E\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\"GL@WZSF#kwno=\x0E\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0E\t?,gju=\x0E\t\x0E\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0E\t?,algz=\x0E\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0E\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0E\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0E\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0E\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0E\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0E\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?\"GL@WZSF#kwno=\t?\"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\x0BUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=&*&'&^&\x88\u0178\u0C3E&\u01AD&\u0192&)&^&%&'&\x82&P&1&\xB1&3&]&m&u&E&t&C&\xCF&V&V&/&>&6&\u0F76\u177Co&p&@&E&M&P&x&@&F&e&\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025E*\u03EA\u21F3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0D2E&\u0503&\u0316*&*8&%&%&&&%,)&\x9A&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053C\x84(,(<&,&\u03DA&\u18C7&-&,(%&(&%&(\u013B0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xC6-\u0360\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072C\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1E78\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\u0F9C\u19D3&8(>&/&/&\u077B')'\u1065')'%@/&0&%\u043E\u09C0*&*@&C\u053D\u05D4\u0274\u05EB4\u0DD7\u071A\u04D16\u0D84&/\u0178\u0303Z&*%\u0246\u03FF&\u0134&1\xA8\u04B4\u0174", dictionarySizeBits, "AAAAKKLLKKKKKJJIHHIHHGGFF"); setData(dictionaryData, dictionarySizeBits); } /** * @constructor * @param {!Int8Array} data * @struct */ function InputStream(data) { /** @type {!Int8Array} */ this.data = new Int8Array(0); /** @type {number} */ this.offset = 0; this.data = data; } /** * @param {number} x * @return {string} */ function valueOf(x) { return x.toString(); } /** * @param {?InputStream} src * @param {!Int8Array} dst * @param {number} offset * @param {number} length * @return {number} */ function readInput(src, dst, offset, length) { if (src === null) { return -1; } let /** @type {number} */ end = Math.min(src.offset + length, src.data.length); let /** @type {number} */ bytesRead = end - src.offset; dst.set(src.data.subarray(src.offset, end), offset); src.offset += bytesRead; return bytesRead; } /** * @param {string} src * @return {!Int8Array} */ function toUsAsciiBytes(src) { let /** @type {number} */ n = src.length; let /** @type {!Int8Array} */ result = new Int8Array(n); for (let /** @type {number} */ i = 0; i < n; ++i) { result[i] = src.charCodeAt(i); } return result; } /* GENERATED CODE END */ /** @typedef {!Int8Array} */ let ByteBuffer; /** * @param {!Int8Array} bytes * @param {?Options=} options * @return {!Int8Array} */ function decode(bytes, options) { let /** @type {!State} */ s = new State(); initState(s, new InputStream(bytes)); if (options) { let customDictionary = /** @type {?Int8Array} */ (options["customDictionary"]); if (customDictionary) attachDictionaryChunk(s, customDictionary); } let /** @type {number} */ totalOutput = 0; let /** @type {!Array} */ chunks = []; while (true) { let /** @type {!Int8Array} */ chunk = new Int8Array(16384); chunks.push(chunk); s.output = chunk; s.outputOffset = 0; s.outputLength = 16384; s.outputUsed = 0; decompress(s); totalOutput += s.outputUsed; if (s.outputUsed < 16384) break; } close(s); let /** @type {!Int8Array} */ result = new Int8Array(totalOutput); let /** @type {number} */ offset = 0; for (let /** @type {number} */ i = 0; i < chunks.length; ++i) { let /** @type {!Int8Array} */ chunk = chunks[i]; let /** @type {number} */ end = Math.min(totalOutput, offset + 16384); let /** @type {number} */ len = end - offset; if (len < 16384) { result.set(chunk.subarray(0, len), offset); } else { result.set(chunk, offset); } offset += len; } return result; } return decode; }; /** * @type {function(!Int8Array, ?Options=):!Int8Array} */ export let BrotliDecode = makeBrotliDecode(); ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/micProcessor.js ================================================ // micProcessor.js class MicProcessor extends AudioWorkletProcessor { constructor() { super(); // global variables for testing var sampleRate = globalThis.sampleRate; var currentFrame = globalThis.currentFrame; var currentTime = globalThis.currentTime; var currentRenderQuantum = globalThis.currentRenderQuantum; this.SampleRate = sampleRate; this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms this.Buffer = new Float32Array(this.TargetSamples); this.BufferIndex = 0; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { //this.port.postMessage(data); // echo back test } if (data instanceof Uint8Array) { } }; } process(inputs, outputs, parameters) { var inChannel0 = inputs[0][0]; if (!inChannel0) return true; let srcIndex = 0; var srcLen = inChannel0.length; while (srcIndex < srcLen) { var remaining = this.TargetSamples - this.BufferIndex; var copyCount = Math.min(remaining, srcLen - srcIndex); this.Buffer.set( inChannel0.subarray(srcIndex, srcIndex + copyCount), this.BufferIndex); this.BufferIndex += copyCount; srcIndex += copyCount; if (this.BufferIndex >= this.TargetSamples) { this.SendBuffer(); this.BufferIndex = 0; } } return true; } SendBuffer() { // convert to 16-6bit PCM var int16 = new Int16Array(this.TargetSamples); for (var i = 0; i < this.TargetSamples; i++) { int16[i] = this.Buffer[i] * 32767; } var byteArray = new Uint8Array(int16.buffer); this.port.postMessage(byteArray, [byteArray.buffer]); } } registerProcessor('mic-processor', MicProcessor); ================================================ FILE: Templates/dotnetTemplates/content/BlazorGL.NetCore.CSharp/wwwroot/js/streamProcessor.js ================================================ // streamProcessor.js class StreamProcessor extends AudioWorkletProcessor { constructor() { super(); this.queue = []; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { if (data === 2) { this.queue = []; } } if (data instanceof Uint8Array) { const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2); buffer.offset = 0; this.queue.push(buffer); } }; } process(inputs, outputs, parameters) { const output = outputs[0]; const channelCount = output.length; const sampleCount = output[0].length; let written = 0; while (written < sampleCount && this.queue.length > 0) { const buffer = this.queue[0]; const offset = buffer.offset; const available = buffer.length - offset; const needed = sampleCount - written; const copyCount = Math.min(available, needed); for (let i = 0; i < copyCount; i++) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; let value = (buffer[offset+i] / 32767); channel[written+i] = value; } } written += copyCount; buffer.offset += copyCount; if (buffer.offset >= buffer.length) { this.queue.shift(); this.port.postMessage(1); } } // Fill remaining samples with silence if (written < sampleCount) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; for (let i = written; i < sampleCount; i++) { let value = 0; channel[i] = value; } } } return true; } } registerProcessor("stream-processor", StreamProcessor); ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/$projectname$.csproj ================================================  false netstandard2.0 {$guid1$} Library Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants); ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Common", "Console" ], "identity": "nkast.Kni.ContentPipelineExtension.CSharp", "name": "KNI Content Pipeline Extension Project (.NetStandard)", "shortName": "kni-ContentPipelineExtension", "sourceName": "KniContentPipelineExtension", "tags": { "language": "C#", "type": "project" }, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/ContentImporter1.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using Microsoft.Xna.Framework.Content.Pipeline; using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to import a file from disk into the specified type, TImport. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentImporter attribute to specify the correct file /// extension, display name, and default processor for this importer. /// [ContentImporter(".xyz", DisplayName = "XYZ Importer", DefaultProcessor = "ContentProcessor1")] public class ContentImporter1 : ContentImporter { public override TInput Import(string filename, ContentImporterContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/ContentProcessor1.cs ================================================ using System; using Microsoft.Xna.Framework.Content.Pipeline; // TODO: replace these with the processor input and output types. using TInput = System.String; using TOutput = System.String; namespace $safeprojectname$ { /// /// This class will be instantiated by the XNA Framework Content Pipeline /// to apply custom processing to content data, converting an object of /// type TInput to TOutput. The input and output types may be the same if /// the processor wishes to alter data without changing its type. /// /// This should be part of a Content Pipeline Extension Library project. /// /// TODO: change the ContentProcessor attribute to specify the correct /// display name for this processor. /// [ContentProcessor(DisplayName = "$safeprojectname$.ContentProcessor1")] public class ContentProcessor1 : ContentProcessor { public override TOutput Process(TInput input, ContentProcessorContext context) { // TODO: process the input object, and return the modified data. throw new NotImplementedException(); } } } ================================================ FILE: Templates/dotnetTemplates/content/ContentPipelineExtension.NetStandard.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", "defaultItemExtension": "cs", "itemHierarchyPaths": [ "Code" ] } ================================================ FILE: Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "Common", "Code" ], "identity": "nkast.Kni.DrawableGameComponent.CSharp", "name": "KNI DrawableGameComponent Item", "shortName": "KniDrawableGameComponent", "tags": { "language": "C#", "type": "item" }, "symbols": { "ClassName":{ "type": "parameter", "description": "The name of the code file and class.", "datatype": "text", "replaces": "DrawableGameComponent1", "fileRename": "DrawableGameComponent1", "defaultValue": "DrawableGameComponent1" } }, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/DrawableGameComponent.CSharp/DrawableGameComponent1.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace KniGameComponent { internal class DrawableGameComponent1 : DrawableGameComponent { public $DrawableGameComponent1(Game game) : base(game) { } /// Initializes the component. Used to load non-graphical resources. public override void Initialize() { base.Initialize(); } /// Load graphical resources needed by this component. protected override void LoadContent() { } /// Unload graphical resources needed by this component. protected override void UnloadContent() { } /// Update the component. /// GameTime of the Game. public override void Update(GameTime gameTime) { } /// Draw this component. /// The time elapsed since the last call to Draw. public override void Draw(GameTime gameTime) { } } } ================================================ FILE: Templates/dotnetTemplates/content/GameComponent.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", "defaultItemExtension": "cs", "itemHierarchyPaths": [ "Code" ] } ================================================ FILE: Templates/dotnetTemplates/content/GameComponent.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "Common", "Code" ], "identity": "nkast.Kni.GameComponent.CSharp", "name": "KNI GameComponent Item", "shortName": "KniGameComponent", "tags": { "language": "C#", "type": "item" }, "symbols": { "ClassName":{ "type": "parameter", "description": "The name of the code file and class.", "datatype": "text", "replaces": "GameComponent1", "fileRename": "GameComponent1", "defaultValue": "GameComponent1" } }, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/GameComponent.CSharp/GameComponent1.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace KniGameComponent { internal class GameComponent1 : GameComponent { public GameComponent1(Game game) : base(game) { } /// Initializes the component. Used to load non-graphical resources. public override void Initialize() { base.Initialize(); } /// Update the component. /// GameTime of the Game. public override void Update(GameTime gameTime) { } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/$projectname$.Android.GL.csproj ================================================ false net8.0-android $guid2$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$safeprojectname$ 1 1.0 .m4a True Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/$projectname$Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $safeprojectname$ { [Activity(Label = "$projectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize , ScreenOrientation = ScreenOrientation.FullSensor )] public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new Platform$safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/AndroidManifest.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here base.graphics.IsFullScreen = true; } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Resource.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace $safeprojectname$ { public partial class Resource { public partial class Attribute { private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; private Style() { } } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Values/Strings.xml ================================================ $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Android.GL/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/$projectname$.Blazor.GL.csproj ================================================ false net8.0 disable disable {$guid7$} $safeprojectname$ $safeprojectname$ $(DefineConstants);BLAZORGL BlazorGL false Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/App.razor ================================================  Not found

Sorry, there's nothing at this address.

================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/MainLayout.razor ================================================ @inherits LayoutComponentBase
@Body
================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/MainLayout.razor.css ================================================ .page { position: relative; display: flex; flex-direction: column; } main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row ::deep .btn-link { white-space: nowrap; margin-left: 1.5rem; text-decoration: none; } .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { text-decoration: underline; } .top-row ::deep a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 640.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row ::deep a, .top-row ::deep .btn-link { margin-left: 0; } } @media (min-width: 641px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .top-row.auth ::deep a:first-child { flex: 1; text-align: right; width: 0; } .top-row, article { padding-left: 2rem !important; padding-right: 1.5rem !important; } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Pages/Index.razor ================================================ @page "/" @page "/index.html" @inject IJSRuntime JsRuntime @using nkast.Wasm.Canvas $projectname$
================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Pages/Index.razor.cs ================================================ using System; using Microsoft.JSInterop; using Microsoft.Xna.Framework; namespace $safeprojectname$.Pages { public partial class Index { Game _game; protected override void OnAfterRender(bool firstRender) { base.OnAfterRender(firstRender); if (firstRender) { JsRuntime.InvokeAsync("initRenderJS", DotNetObjectReference.Create(this)); } } [JSInvokable] public void TickDotNet() { // init game if (_game == null) { _game = new Platform$safeprojectname$Game(); _game.Run(); } // run gameloop _game.Tick(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Program.cs ================================================ using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; namespace $safeprojectname$ { internal class Program { private static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddScoped(sp => new HttpClient() { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/Properties/launchSettings.json ================================================ { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:56897", "sslPort": 0 } }, "profiles": { "$safeprojectname$": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5259", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/_Imports.razor ================================================ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using nkast.Wasm.Canvas @using $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/Content/.gitignore ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/css/app.css ================================================  html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } h1:focus { outline: none; } a, .btn-link { color: #0077cc; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } .blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; } .blazor-error-boundary::after { content: "An error has occurred." } #theCanvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; /* Disable text highlighting and magnifying glass on iPhone/webkit */ -webkit-user-select: none; } #canvas { position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/index.html ================================================  $projectname$
Made with
Kni
loading . . .   
An unhandled error has occurred. Reload x
================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/decode.js ================================================ /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @typedef {!Object} Options * @property {?Int8Array} customDictionary */ let Options; /** * Private scope / static initializer for decoder. * * @return {function(!Int8Array, ?Options=):!Int8Array} */ let makeBrotliDecode = () => { /* GENERATED CODE BEGIN */ /** @type {!Int32Array} */ const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); /** @type {!Int32Array} */ const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); /** @type {!Int32Array} */ const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); /** @type {!Int32Array} */ const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); /** @type {!Int32Array} */ const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); /** @type {!Int32Array} */ const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); /** @type {!Int16Array} */ const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); /** @type {!Int16Array} */ const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); /** @type {!Int16Array} */ const CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { let /** @type {number} */ result = -1; let /** @type {number} */ step = 16; while (step > 0) { if ((i >>> step) !== 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw new Error("maxDistance is too small"); } const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4; const /** @type {number} */ ndistbits = log2floor(offset) - 1; const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { const /** @type {!Int16Array} */ insertLengthOffsets = new Int16Array(24); const /** @type {!Int16Array} */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (let /** @type {number} */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) { let /** @type {number} */ rangeIdx = cmdCode >>> 6; let /** @type {number} */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } const /** @type {number} */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); const /** @type {number} */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode]; const /** @type {number} */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); const /** @type {number} */ index = cmdCode * 4; cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { const /** @type {number} */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 0) { return 16; } let /** @type {number} */ n = readFewBits(s, 3); if (n !== 0) { return 17 + n; } n = readFewBits(s, 3); if (n !== 0) { if (n === 1) { if (largeWindowEnabled === 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) === 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @return {void} */ function enableEagerOutput(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isEager = 1; } /** * @param {!State} s * @return {void} */ function enableLargeWindow(s) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } s.isLargeWindow = 1; } /** * @param {!State} s * @param {!Int8Array} data * @return {void} */ function attachDictionaryChunk(s, data) { if (s.runningState !== 1) { throw new Error("State MUST be freshly initialized"); } if (s.cdNumChunks === 0) { s.cdChunks = new Array(16); s.cdChunkOffsets = new Int32Array(16); s.cdBlockBits = -1; } if (s.cdNumChunks === 15) { throw new Error("Too many dictionary chunks"); } s.cdChunks[s.cdNumChunks] = data; s.cdNumChunks++; s.cdTotalSize += data.length; s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState !== 0) { throw new Error("State MUST be uninitialized"); } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; const /** @type {number} */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 120); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState === 0) { throw new Error("State MUST be initialized"); } if (s.runningState === 11) { return; } s.runningState = 11; if (s.input !== null) { s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) !== 0) { const /** @type {number} */ n = readFewBits(s, 3); if (n === 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) { return; } const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles === 7) { s.isMetadata = 1; if (readFewBits(s, 1) !== 0) { throw new Error("Corrupted reserved bit"); } const /** @type {number} */ sizeBytes = readFewBits(s, 2); if (sizeBytes === 0) { return; } for (let /** @type {number} */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 8); if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 8); } } else { for (let /** @type {number} */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ bits = readFewBits(s, 4); if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) { throw new Error("Exuberant nibble"); } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd === 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { let /** @type {number} */ offset = tableGroup[tableIdx]; const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; const /** @type {number} */ bits = tableGroup[offset] >> 16; const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; const /** @type {number} */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s); const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { const /** @type {number} */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { const /** @type {!Int32Array} */ mtf = new Int32Array(256); for (let /** @type {number} */ i = 0; i < 256; i++) { mtf[i] = i; } for (let /** @type {number} */ i = 0; i < vLen; i++) { const /** @type {number} */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index !== 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { let /** @type {number} */ symbol = 0; let /** @type {number} */ prevCodeLen = 8; let /** @type {number} */ repeat = 0; let /** @type {number} */ repeatCodeLen = 0; let /** @type {number} */ space = 32768; const /** @type {!Int32Array} */ table = new Int32Array(33); const /** @type {number} */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; const /** @type {number} */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen !== 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { const /** @type {number} */ extraBits = codeLen - 14; let /** @type {number} */ newLen = 0; if (codeLen === 16) { newLen = prevCodeLen; } if (repeatCodeLen !== newLen) { repeat = 0; repeatCodeLen = newLen; } const /** @type {number} */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; const /** @type {number} */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw new Error("symbol + repeatDelta > numSymbols"); } for (let /** @type {number} */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen !== 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space !== 0) { throw new Error("Unused space"); } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (let /** @type {number} */ i = 0; i < length - 1; ++i) { for (let /** @type {number} */ j = i + 1; j < length; ++j) { if (symbols[i] === symbols[j]) { throw new Error("Duplicate simple Huffman code symbol"); } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ symbols = new Int32Array(4); const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1); const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1; for (let /** @type {number} */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw new Error("Can't readHuffmanCode"); } symbols[i] = symbol; } checkDupes(symbols, numSymbols); let /** @type {number} */ histogramId = numSymbols; if (numSymbols === 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; default: break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit); const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18); let /** @type {number} */ space = 32; let /** @type {number} */ numCodes = 0; for (let /** @type {number} */ i = skip; i < 18 && space > 0; i++) { const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v !== 0) { space -= (32 >> v); numCodes++; } } if (space !== 0 && numCodes !== 1) { throw new Error("Corrupted Huffman code histogram"); } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip === 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees === 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ useRleForZeros = readFewBits(s, 1); let /** @type {number} */ maxRunLengthPrefix = 0; if (useRleForZeros !== 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix; const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1); const /** @type {number} */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (let /** @type {number} */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ code = readSymbol(table, tableIdx, s); if (code === 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ reps = (1 << code) + readFewBits(s, code); while (reps !== 0) { if (i >= contextMapSize) { throw new Error("Corrupted context map"); } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) === 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { const /** @type {!Int32Array} */ ringBuffers = s.rings; const /** @type {number} */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType === 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType === 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); const /** @type {number} */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; const /** @type {number} */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { let /** @type {number} */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { const /** @type {number} */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37; const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length !== 0) { newBuffer.set(s.ringBuffer.subarray(0, s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd !== 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) { return; } if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata !== 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata !== 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { let /** @type {number} */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; const /** @type {number} */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits; const /** @type {!Int32Array} */ distOffset = s.distOffset; const /** @type {number} */ npostfix = s.distancePostfixBits; const /** @type {number} */ ndirect = s.numDirectDistanceCodes; const /** @type {number} */ postfix = 1 << npostfix; let /** @type {number} */ bits = 1; let /** @type {number} */ half = 0; let /** @type {number} */ i = 16; for (let /** @type {number} */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (let /** @type {number} */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (let /** @type {number} */ i = 0; i < s.numLiteralBlockTypes; ) { const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); const /** @type {number} */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (let /** @type {number} */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] !== j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); const /** @type {number} */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow === 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength); copyRawBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos === s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite !== 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; const /** @type {!Int32Array} */ group = new Int32Array(n + n * maxTableSize); let /** @type {number} */ next = n; for (let /** @type {number} */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { let /** @type {number} */ result = s.ringBufferSize; if (s.isEager !== 0) { result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @param {number} fence * @return {void} */ function doUseDictionary(s, fence) { if (s.distance > 0x7FFFFFFC) { throw new Error("Invalid backward reference"); } const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize; if (address < 0) { initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength); s.runningState = 14; } else { const /** @type {!ByteBuffer} */ dictionaryData = data; const /** @type {number} */ wordLength = s.copyLength; if (wordLength > 31) { throw new Error("Invalid backward reference"); } const /** @type {number} */ shift = sizeBits[wordLength]; if (shift === 0) { throw new Error("Invalid backward reference"); } let /** @type {number} */ offset = offsets[wordLength]; const /** @type {number} */ mask = (1 << shift) - 1; const /** @type {number} */ wordIdx = address & mask; const /** @type {number} */ transformIdx = address >>> shift; offset += wordIdx * wordLength; const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS; if (transformIdx >= transforms.numTransforms) { throw new Error("Invalid backward reference"); } const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; return; } s.runningState = 4; } } /** * @param {!State} s * @return {void} */ function initializeCompoundDictionary(s) { s.cdBlockMap = new Int8Array(256); let /** @type {number} */ blockBits = 8; while (((s.cdTotalSize - 1) >>> blockBits) !== 0) { blockBits++; } blockBits -= 8; s.cdBlockBits = blockBits; let /** @type {number} */ cursor = 0; let /** @type {number} */ index = 0; while (cursor < s.cdTotalSize) { while (s.cdChunkOffsets[index + 1] < cursor) { index++; } s.cdBlockMap[cursor >>> blockBits] = index; cursor += 1 << blockBits; } } /** * @param {!State} s * @param {number} address * @param {number} length * @return {void} */ function initializeCompoundDictionaryCopy(s, address, length) { if (s.cdBlockBits === -1) { initializeCompoundDictionary(s); } let /** @type {number} */ index = s.cdBlockMap[address >>> s.cdBlockBits]; while (address >= s.cdChunkOffsets[index + 1]) { index++; } if (s.cdTotalSize > address + length) { throw new Error("Invalid backward reference"); } s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; s.metaBlockLength -= length; s.cdBrIndex = index; s.cdBrOffset = address - s.cdChunkOffsets[index]; s.cdBrLength = length; s.cdBrCopied = 0; } /** * @param {!State} s * @param {number} fence * @return {number} */ function copyFromCompoundDictionary(s, fence) { let /** @type {number} */ pos = s.pos; const /** @type {number} */ origPos = pos; while (s.cdBrLength !== s.cdBrCopied) { const /** @type {number} */ space = fence - pos; const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex]; const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset; let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied; if (length > remChunkLength) { length = remChunkLength; } if (length > space) { length = space; } s.ringBuffer.set(s.cdChunks[s.cdBrIndex].slice(s.cdBrOffset, s.cdBrOffset + length), pos); pos += length; s.cdBrOffset += length; s.cdBrCopied += length; if (length === remChunkLength) { s.cdBrIndex++; s.cdBrOffset = 0; } if (pos >= fence) { break; } } return pos - origPos; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState === 0) { throw new Error("Can't decompress until initialized"); } if (s.runningState === 11) { throw new Error("Can't decompress after close"); } if (s.runningState === 1) { const /** @type {number} */ windowBits = decodeWindowBits(s); if (windowBits === -1) { throw new Error("Invalid 'windowBits' code"); } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } let /** @type {number} */ fence = calculateFence(s); let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1; let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer; while (s.runningState !== 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength === 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext !== 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength === 0) { decodeLiteralBlockSwitch(s); } const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState !== 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } let /** @type {number} */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength === 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw new Error("Negative distance"); } } else { const /** @type {number} */ extraBits = s.distExtraBits[distanceCode]; let /** @type {number} */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw new Error("Invalid backward reference"); } s.j = 0; s.runningState = 8; case 8: let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask; let /** @type {number} */ dst = s.pos; const /** @type {number} */ copyLength = s.copyLength - s.j; const /** @type {number} */ srcEnd = src + copyLength; const /** @type {number} */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (let /** @type {number} */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState === 8) { s.runningState = 4; } continue; case 9: doUseDictionary(s, fence); continue; case 14: s.pos += copyFromCompoundDictionary(s, fence); if (s.pos >= fence) { s.nextRunningState = 14; s.runningState = 12; return; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) === 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw new Error("Unexpected state " + valueOf(s.runningState)); } } if (s.runningState === 10) { if (s.metaBlockLength < 0) { throw new Error("Invalid metablock length"); } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } /** @type {!Transforms} */ const RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {string} prefixSuffixSrc * @param {string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { const /** @type {number} */ n = prefixSuffixSrc.length; let /** @type {number} */ index = 1; let /** @type {number} */ j = 0; for (let /** @type {number} */ i = 0; i < n; ++i) { const /** @type {number} */ c = prefixSuffixSrc.charCodeAt(i); if (c === 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (let /** @type {number} */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { let /** @type {number} */ offset = dstOffset; const /** @type {!Int32Array} */ triplets = transforms.triplets; const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage; const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads; const /** @type {number} */ transformOffset = 3 * transformIndex; const /** @type {number} */ prefixIdx = triplets[transformOffset]; const /** @type {number} */ transformType = triplets[transformOffset + 1]; const /** @type {number} */ suffixIdx = triplets[transformOffset + 2]; let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx]; const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx]; const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; let /** @type {number} */ omitFirst = transformType - 11; let /** @type {number} */ omitLast = transformType; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix !== prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; let /** @type {number} */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType === 10 || transformType === 11) { let /** @type {number} */ uppercaseOffset = offset - len; if (transformType === 10) { len = 1; } while (len > 0) { const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType === 21 || transformType === 22) { let /** @type {number} */ shiftOffset = offset - len; const /** @type {number} */ param = transforms.params[transformIndex]; let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { let /** @type {number} */ step = 1; const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) { } else if (c0 < 0xE0) { if (len >= 2) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { const /** @type {number} */ c1 = dst[shiftOffset + 1]; const /** @type {number} */ c2 = dst[shiftOffset + 2]; const /** @type {number} */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType === 21) { len = 0; } } } while (suffix !== suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { let /** @type {number} */ step = 1 << (len - 1); while ((key & step) !== 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { let /** @type {number} */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { const /** @type {number} */ tableOffset = tableGroup[tableIdx]; let /** @type {number} */ key; const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize); const /** @type {!Int32Array} */ count = new Int32Array(16); const /** @type {!Int32Array} */ offset = new Int32Array(16); let /** @type {number} */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (let /** @type {number} */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] !== 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } let /** @type {number} */ tableBits = rootBits; let /** @type {number} */ tableSize = 1 << tableBits; let /** @type {number} */ totalSize = tableSize; if (offset[15] === 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (let /** @type {number} */ len = 1, /** @type {number} */ step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } const /** @type {number} */ mask = totalSize - 1; let /** @type {number} */ low = -1; let /** @type {number} */ currentOffset = tableOffset; for (let /** @type {number} */ len = rootBits + 1, /** @type {number} */ step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) !== low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached !== 0) { if (halfAvailable(s) >= -2) { return; } throw new Error("No more input"); } const /** @type {number} */ readOffset = s.halfOffset << 1; let /** @type {number} */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer; const /** @type {number} */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached === 0) { return; } const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw new Error("Read after end"); } if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) { throw new Error("Unused bytes after end"); } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { const /** @type {number} */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { const /** @type {number} */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset === 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { const /** @type {number} */ padding = (32 - s.bitOffset) & 7; if (padding !== 0) { const /** @type {number} */ paddingBits = readFewBits(s, padding); if (paddingBits !== 0) { throw new Error("Corrupted padding bits"); } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { let /** @type {number} */ limit = 2048; if (s.endOfStreamReached !== 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyRawBytes(s, data, offset, length) { if ((s.bitOffset & 7) !== 0) { throw new Error("Unaligned copyBytes"); } while ((s.bitOffset !== 32) && (length !== 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length === 0) { return; } const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { const /** @type {number} */ readOffset = s.halfOffset << 1; const /** @type {number} */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length === 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length !== 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { const /** @type {number} */ len = readInput(s.input, data, offset, length); if (len === -1) { throw new Error("Unexpected end of input"); } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer; const /** @type {number} */ halfLen = byteLen >> 1; const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer; for (let /** @type {number} */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } /** @type {!Int32Array} */ const LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {string} map * @param {string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (let /** @type {number} */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (let /** @type {number} */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } let /** @type {number} */ offset = 1280; for (let /** @type {number} */ k = 0; k < 19; ++k) { const /** @type {number} */ value = k & 3; const /** @type {number} */ rep = rle.charCodeAt(k) - 32; for (let /** @type {number} */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (let /** @type {number} */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (let /** @type {number} */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {number} */ this.accumulator64 = 0; /** @type {number} */ this.runningState = 0; /** @type {number} */ this.nextRunningState = 0; /** @type {number} */ this.accumulator32 = 0; /** @type {number} */ this.bitOffset = 0; /** @type {number} */ this.halfOffset = 0; /** @type {number} */ this.tailBytes = 0; /** @type {number} */ this.endOfStreamReached = 0; /** @type {number} */ this.metaBlockLength = 0; /** @type {number} */ this.inputEnd = 0; /** @type {number} */ this.isUncompressed = 0; /** @type {number} */ this.isMetadata = 0; /** @type {number} */ this.literalBlockLength = 0; /** @type {number} */ this.numLiteralBlockTypes = 0; /** @type {number} */ this.commandBlockLength = 0; /** @type {number} */ this.numCommandBlockTypes = 0; /** @type {number} */ this.distanceBlockLength = 0; /** @type {number} */ this.numDistanceBlockTypes = 0; /** @type {number} */ this.pos = 0; /** @type {number} */ this.maxDistance = 0; /** @type {number} */ this.distRbIdx = 0; /** @type {number} */ this.trivialLiteralContext = 0; /** @type {number} */ this.literalTreeIdx = 0; /** @type {number} */ this.commandTreeIdx = 0; /** @type {number} */ this.j = 0; /** @type {number} */ this.insertLength = 0; /** @type {number} */ this.contextMapSlice = 0; /** @type {number} */ this.distContextMapSlice = 0; /** @type {number} */ this.contextLookupOffset1 = 0; /** @type {number} */ this.contextLookupOffset2 = 0; /** @type {number} */ this.distanceCode = 0; /** @type {number} */ this.numDirectDistanceCodes = 0; /** @type {number} */ this.distancePostfixBits = 0; /** @type {number} */ this.distance = 0; /** @type {number} */ this.copyLength = 0; /** @type {number} */ this.maxBackwardDistance = 0; /** @type {number} */ this.maxRingBufferSize = 0; /** @type {number} */ this.ringBufferSize = 0; /** @type {number} */ this.expectedTotalSize = 0; /** @type {number} */ this.outputOffset = 0; /** @type {number} */ this.outputLength = 0; /** @type {number} */ this.outputUsed = 0; /** @type {number} */ this.ringBufferBytesWritten = 0; /** @type {number} */ this.ringBufferBytesReady = 0; /** @type {number} */ this.isEager = 0; /** @type {number} */ this.isLargeWindow = 0; /** @type {number} */ this.cdNumChunks = 0; /** @type {number} */ this.cdTotalSize = 0; /** @type {number} */ this.cdBrIndex = 0; /** @type {number} */ this.cdBrOffset = 0; /** @type {number} */ this.cdBrLength = 0; /** @type {number} */ this.cdBrCopied = 0; /** @type {!Array} */ this.cdChunks = new Array(0); /** @type {!Int32Array} */ this.cdChunkOffsets = new Int32Array(0); /** @type {number} */ this.cdBlockBits = 0; /** @type {!Int8Array} */ this.cdBlockMap = new Int8Array(0); /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** @type {!ByteBuffer} */ let data = new Int8Array(0); /** @type {!Int32Array} */ const offsets = new Int32Array(32); /** @type {!Int32Array} */ const sizeBits = new Int32Array(32); /** * @param {!Int8Array} newData * @param {!Int32Array} newSizeBits * @return {void} */ function setData(newData, newSizeBits) { if (newSizeBits.length > 31) { throw new Error("sizeBits length must be at most " + valueOf(31)); } for (let /** @type {number} */ i = 0; i < 4; ++i) { if (newSizeBits[i] !== 0) { throw new Error("first " + valueOf(4) + " must be 0"); } } const /** @type {!Int32Array} */ dictionaryOffsets = offsets; const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits; dictionarySizeBits.set(newSizeBits.subarray(0, newSizeBits.length), 0); let /** @type {number} */ pos = 0; const /** @type {number} */ limit = newData.length; for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) { dictionaryOffsets[i] = pos; const /** @type {number} */ bits = dictionarySizeBits[i]; if (bits !== 0) { if (bits >= 31) { throw new Error("newSizeBits values must be less than 31"); } pos += i << bits; if (pos <= 0 || pos > limit) { throw new Error("newSizeBits is inconsistent: overflow"); } } } for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) { dictionaryOffsets[i] = pos; } if (pos !== limit) { throw new Error("newSizeBits is inconsistent: underflow"); } data = newData; } /** * @param {!Int8Array} dictionary * @param {string} data0 * @param {string} data1 * @param {string} skipFlip * @param {!Int32Array} sizeBits * @param {string} sizeBitsData * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) { const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1); if (dict.length !== dictionary.length) { throw new Error("Corrupted brotli dictionary"); } let /** @type {number} */ offset = 0; const /** @type {number} */ n = skipFlip.length; for (let /** @type {number} */ i = 0; i < n; i += 2) { const /** @type {number} */ skip = skipFlip.charCodeAt(i) - 36; const /** @type {number} */ flip = skipFlip.charCodeAt(i + 1) - 36; for (let /** @type {number} */ j = 0; j < skip; ++j) { dict[offset] ^= 3; offset++; } for (let /** @type {number} */ j = 0; j < flip; ++j) { dict[offset] ^= 236; offset++; } } for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) { sizeBits[i] = sizeBitsData.charCodeAt(i) - 65; } dictionary.set(dict); } { const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784); const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25); unpackDictionaryData(dictionaryData, "wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sksolpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7F\"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\x0Bwbmhzbqgaltoavpk965YIbub03s{\t\x7F~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0E\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7F.\t\"331*mgltX2^8X^8\tOld#pbow\x0E\t\n\nabmdwqjnabwk*x\x0E\t33s{\t~*8hl9\0effpbg=\x0Ep9,,#X^8wloosovd+*x\tx\x0E\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0E\t~\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0E\tabmgprvfvf>#x~8;3s{8`hjmdx\x0E\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7F\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\x0E\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0E\t?\"pwffo#zlv#k1=\x0E\telqn#ifpvp233&#nfmv-\x0E\t\n\x0E\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0E\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7F\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7F\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0Evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\x0BBl\bQ\x7F\x0BUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\x0BBM\x0B|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7Fm\x04kF\t[]\bPm\bTv\nsI\x0Bpg\t[I\bQp\x04mx\x0B_W\n^M\npe\x0BQ}\x0BGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\x0BGL\x0BxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\x0BwT\ti_\bTg\x04QQ\n|p\x0BXN\bQS\x0BxD\x04QC\bWZ\tpD\x0BVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\x0BQ}\x0BWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\x0BEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\x0Bxs\nXW\twR\x0Bek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\x0B_W\x0BWs\x0BsI\x05m\x7F\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\x0B@@\bTl\bPv\t}t\x04Sw\x04M`\x0BnU\tkW\x0Bed\nqo\x0BxY\tA|\bTz\x0By`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7Fm\tav\tBN\x0Bb\\\tpD\bTf\nY[\tJn\bQy\t[^\x0BWc\x0Byu\x04Dl\x04CJ\x0BWj\x0BHR\t`V\x0BuW\tQy\np@\x0BGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7FR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\x0BQB\x0BWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7F\tea\tdj\x0B]W\nb~\x04M`\twL\bTV\bVH\nt\x7F\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\x0BK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\x0BHR\bPv\x0BLx\x0BEZ\bT\x7F\bTv\tiD\x05oD\x05MU\x0BwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\x0BxY\x04h}\nzk\bWZ\t\x7Fm\x0Be`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\x0BDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\x0BwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\x0BxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\x0BRb\twQ\n]Q\x04QJ\bWg\x0BWa\bQj\ntC\bVH\nYm\x0Bxs\bVK\nel\bWI\x0BxY\x04Cq\ntR\x0BHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\x0Bxs\x0B_W\td{\x0BQ}\tcg\tTz\tA|\tCj\x0BLm\x05N}\x05m\x7F\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\x0BQ}\bTf\x05ka\x04Jm\x0B@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\x0Bb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\x0BbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7Fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\x0BKC\tdj\tI_\bVV\ny\\\x0BLm\x05xl\txB\tkV\x0Bb\\\x0BJW\x0BVS\tVx\x0BxD\td{\x04MD\bTa\t|`\x0BPz\x04R}\x0BWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\x0BWh\x0BWk\nxS\x0BAz\x0BwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7F\x0Bpg\td\\\x0BoA\x05{D\ti_\x05xB\bT\x7F\t`V\x05qr\tTT\x04g]\x04CA\x0BuR\tVJ\tT`\npw\x0BRb\tI_\nCx\x04Ro\x0BsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\x0B^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\x0B|j\nqo\x05u|\tQ]\x0Bek\x05\x7FZ\x04M`\x04St\npe\tdj\bVG\x0BeE\t\x7Fm\x0BWc\x04|I\n[W\tfL\bT\x7F\tBZ\x04Su\x0BKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\x0BBl\bWg\x04XD\x05kc\x0Bx[\bVV\tQ]\t\x7Fa\tPy\x0BxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\x0Bx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\x0BK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7F\x05Nt\x0BDg\tVc\bTl\x04d@\npo\t\x7FM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\x0BF{\tcO\tfD\nlm\x0BfZ\nlm\x0BeU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7F\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\x0BxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\x0BDg\x0Bx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\x0B_W\nLk\x05Nt\tyj\tfM\x04R\x7F\tiI\bTl\x0BwX\tsV\x0BMl\nyu\tAJ\bVj\x04KO\tWV\x0BA}\x0BW\x7F\nrp\tiD\x0B|o\x05lv\x0BsI\x04BM\td~\tCU\bVb\x04eV\npC\x0BwT\tj`\tc}\x0Bxs\x0Bps\x0Bvh\tWV\x0BGg\x0BAe\x0BVK\x0B]W\trg\x0BWc\x05F`\tBr\x0Bb\\\tdZ\bQp\nqI\x04kF\nLk\x0BAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\x0B@@\bTe\ti_\n_D\twL\nAH\x0BiK\x0Bek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\x0BVK\npl\x04S}\x0BWP\t|d\x04MD\x0BHV\bT\x7F\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\x0B^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7Fm\x04uQ\x0BhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\x0BxD\t\x7Fm\bTp\x04IS\nc|\tkV\x05i~\tV{\x0BhZ\t|b\bWt\n@R\x0BoA\x0BnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\x0BQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\x0Bpg\x0Bpg\x0BWc\tiT\tbs\twL\tU_\tc\\\t|h\x0BKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\x0Bed\bTW\bSB\nxU\tcn\bTb\ne\x7F\ta\\\tSG\bU|\npV\nN\\\x04Kn\x0BnU\tAt\tpD\x0B^R\x0BIr\x04b[\tR{\tdE\x0BxD\x0BWK\x0BWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7Fa\bQp\x05Ob\nLP\bTl\x04Y[\x0BK}\tAJ\bQ\x7F\x04n^\x0BsA\bSM\nqM\bWZ\n^W\x0Bz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\x0Bxs\x04mx\x0Bws\tcC\ntC\tyc\x05M`\x0BW\x7F\nrh\bQp\x0BxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\x0Bpg\tcn\tfL\x0Bvh\x04Cq\bTl\x0BnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\x0BKW\tfD\nea\x04oQ\tj_\tBv\x04nM\x0BID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\x0BxD\x04|I\x05xl\nfy\x04Ce\x0BwB\nLk\x0Bd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\x0BeE\tjp\nq}\tiD\x05qN\x0B^R\t\x7Fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\x0BHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\x0B]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\x0Bxs\x04BN\x05ti\x04lm\tTd\t]y\x0BHV\tSo\x0B|j\x04XX\tA|\x0BZ^\x0BGu\bTW\x05M`\x04kF\x0BhZ\x0BVK\tdG\x0BBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7F\tPl\bWO\x0BLm\tdL\x05uH\x04Cm\tdT\x04fn\x0BwB\x05ka\x0BnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\x0BAx\tHE\bTg\bSq\x05vp\x0Bb\\\bWO\nOl\nsI\nfy\x0BID\t\\c\n{Z\n^~\npe\nAO\tTT\x0Bxv\x04k_\bWO\x0B|j\x0BwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\x0BJc\x0Bed\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\x0Bxs\n`e\x0BiK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\x0BWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7F\tHE\tp\\\tfF\tfw\bVV\bW@\tak\x0BVK\x05ls\tVJ\bVV\x0BeE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7F\tPl\t]y\x0BwT\x05{p\x04MD\x0Bb\\\tQ]\x04Kj\tJn\nAH\x0BRb\tBU\tHK\t\\c\nfI\x05m\x7F\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\x0BGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\x0BuW\tiI\bWI\nqI\x0B|j\x04BV\bVg\bWZ\x04kF\x0Bx]\bTA\tab\tfr\ti@\tJd\tJd\x0Bps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\x0Bw}\x0BqO\ti[\bQ\x7F\bTz\x0BVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\x0BWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\x0BAx\nMd\tBr\x05ui\x0BxY\bSM\x0BWc\x0B|j\x0Bxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\x0BeU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7F\x0BhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\x0BGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\x0Bb\\\tpV\ncc\x04S\\\tct\t`z\bPL\x0BWs\nA`\neg\bSq\x05uE\x04CR\x0BDg\t`W\x0Bz{\x0BWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\x0BRb\bTQ\npl\x05Gt\x0BuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\x0BDg\x0Bed\tq{\x04VG\bQ\x7F\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\x0BB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\x0BwT\bSM\x05MY\x05qN\tdj\x05~s\x0BQ}\x05MY\x0BMB\tBv\twR\bRg\x0BQ}\tql\x0BKC\nrm\x05xu\x04CC\x0BwB\x0Bvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\x0B{i\nC~\tBL\x0BeE\x05uH\bVj\x04Ey\x04Gz\x0BzR\x0B{i\tcf\n{Z\n]n\x04XA\x0BGu\x0BnU\thS\x0BGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7F\tc\\\x0BmO\x0BWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\x0BwT\npV\ndt\x0ByI\tVx\tQ\x7F\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\x0BwB\t}t\t[I\tCP\x04kX\x0BFm\x0BhZ\x05m\x7F\ti[\np@\x0BQ}\x0BW\x7F\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\x0BRb\tio\tPy\x04Y[\nxU\tct\x0B@@\tww\bPv\x04BM\x04FF\ntb\x05v|\x0BKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7F\x0B_W\tTJ\nqI\t|a\tA{\x0BuP\x04MD\tPl\nxR\tfL\x0Bws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\x0BW\x7F\nqs\x05lv\bSM\x04Zi\x0BVK\x05ia\x0BQB\tQ\x7F\n{Z\bPt\x0BKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\x0BDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\x0BeU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\x0BWc\tqv\n`m\tU^\x05oD\nd|\x0BGg\tdE\x0Bwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\x0BxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\x0Bps\ntC\x0BpP\x0Bqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\x0Bxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\x0B@J\t|d\x05uh\bWZ\x0BeU\x0BnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\x0BNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\x0BAx\np@\nzk\x0BRb\x05Os\x0BWS\x04e^\x0BD_\tBv\x0BWd\bVb\x0Bxs\x0BeE\bRw\n]n\n|p\x0Bg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\x0Bps\npe\x05u|\x0BGr\bVe\tCU\x04]M\x04XU\x0BxD\bTa\tIQ\x0BWq\tCU\tam\tdj\bSo\x04Sw\x0BnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\x0BnU\nzU\t|}\tiD\nz\\\bSM\x0BxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\x0BFm\x0BLX\x05vc\x0Bql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\x0BRb\tyj\tsb\x0BWs\bTl\tkV\x0Bed\ne\x7F\x05lL\x0BxN\t\x7Fm\nJn\tjY\x0BxD\bVb\bSq\x0Byu\twL\x0BXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\x0B|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\x0BEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\x0BbE\tBZ\x0BRH\bP{\tjp\n\\}\ta_\tcC\t|a\x0BD]\tBZ\ti[\tfD\x0BxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\x0BLx\x0BM@\bWZ\x04Kn\x0Bpg\nTi\nIv\n|r\x0B@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\x0BxD\n]s\x04gc\x0Bps\tBr\bTW\x0BBM\x05tZ\nBY\x04DW\tjf\x0BSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\x0Bgl\nig\bUs\x04BT\x0BbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\x0BID\x0B|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0E\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0E\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0E\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0E\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0E\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0E\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7F\x7F#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsksbo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-iptfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0E\t?\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0E\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7F\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0E\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0E\t\x0E\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0E\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\"..#fmgojfp#jm$^*8\x0E\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0E\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0E\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0E\t\x0E\t\x0E\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbmgjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0E\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0E\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0E\t\x0E\t?\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0E\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\"..#fmg?,psbm=??aq#,=\x0E\t\\slsvsp\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0E\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\"..#wjwof!=?,irvfqz-?,elqn=\t+\x0BBl\bQ\x7F*+\x0BUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0E\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0E\t?\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0E\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0E\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0E\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\x0BBl\bQ\x7F\tA{\x0BUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\x0BB{\npV\x0B@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\x0BQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\x0Bed\x0BHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\x0BLm\tKx\t}t\bPv\ny\\\naB\tV\x7F\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\x0Bxs\x04Zf\nqI\x04Zf\x0BBM\x0B|j\t}t\bSM\nmC\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0E\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0E\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0E\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0E\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0E\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0E\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0E\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw", "fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7Fwkvna\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0E\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0E\t?kfbg=\x0E\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0E\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0E\t?,kfbg=\x0E\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0E\t\n?,gju=\x0E\t\x0E\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0E\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0E\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0E\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0E\t?kfbg=\x0E\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0E\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0E\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\"Xfmgje^..=\x0E\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\"Xfmgje^..=\x0E\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0E\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0E\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0E\t?,p`qjsw=\x0E\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0E\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0E\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0E\t\x0E\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7F#?b#kqfe>!?\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0E\t?,p`qjsw=\x0E\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0E\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0E\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\x0BBl\bQ\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0E\t?,p`qjsw=\x0E\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7Fwkvna\x7Fofew\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0E\t?-ip!=?,p`qjsw=\x0E\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\"y\"W\"W\"[\"Q\"U\"V\"@=i=l<^<\\=n=m!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7Fqjdkw\x7Fwkvna\x7F-ip!=?,p`qjsw=\x0E\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0E\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0E\t?,gju=\x0E\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0E\t?,gju=\x0E\t\x0E\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0E\t?,kwno=\x0E\"y\"W\"W\"[\"Q\"U\"V\"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7Fwkvna\x7Fqjdkw\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0E\t?,kwno=\x0E\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\"GL@WZSF#kwno=\x0E\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0E\t?,gju=\x0E\t\x0E\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0E\t?,algz=\x0E\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0E\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0E\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0E\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0E\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0E\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0E\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?\"GL@WZSF#kwno=\t?\"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\x0BUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=&*&'&^&\x88\u0178\u0C3E&\u01AD&\u0192&)&^&%&'&\x82&P&1&\xB1&3&]&m&u&E&t&C&\xCF&V&V&/&>&6&\u0F76\u177Co&p&@&E&M&P&x&@&F&e&\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025E*\u03EA\u21F3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0D2E&\u0503&\u0316*&*8&%&%&&&%,)&\x9A&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053C\x84(,(<&,&\u03DA&\u18C7&-&,(%&(&%&(\u013B0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xC6-\u0360\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072C\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1E78\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\u0F9C\u19D3&8(>&/&/&\u077B')'\u1065')'%@/&0&%\u043E\u09C0*&*@&C\u053D\u05D4\u0274\u05EB4\u0DD7\u071A\u04D16\u0D84&/\u0178\u0303Z&*%\u0246\u03FF&\u0134&1\xA8\u04B4\u0174", dictionarySizeBits, "AAAAKKLLKKKKKJJIHHIHHGGFF"); setData(dictionaryData, dictionarySizeBits); } /** * @constructor * @param {!Int8Array} data * @struct */ function InputStream(data) { /** @type {!Int8Array} */ this.data = new Int8Array(0); /** @type {number} */ this.offset = 0; this.data = data; } /** * @param {number} x * @return {string} */ function valueOf(x) { return x.toString(); } /** * @param {?InputStream} src * @param {!Int8Array} dst * @param {number} offset * @param {number} length * @return {number} */ function readInput(src, dst, offset, length) { if (src === null) { return -1; } let /** @type {number} */ end = Math.min(src.offset + length, src.data.length); let /** @type {number} */ bytesRead = end - src.offset; dst.set(src.data.subarray(src.offset, end), offset); src.offset += bytesRead; return bytesRead; } /** * @param {string} src * @return {!Int8Array} */ function toUsAsciiBytes(src) { let /** @type {number} */ n = src.length; let /** @type {!Int8Array} */ result = new Int8Array(n); for (let /** @type {number} */ i = 0; i < n; ++i) { result[i] = src.charCodeAt(i); } return result; } /* GENERATED CODE END */ /** @typedef {!Int8Array} */ let ByteBuffer; /** * @param {!Int8Array} bytes * @param {?Options=} options * @return {!Int8Array} */ function decode(bytes, options) { let /** @type {!State} */ s = new State(); initState(s, new InputStream(bytes)); if (options) { let customDictionary = /** @type {?Int8Array} */ (options["customDictionary"]); if (customDictionary) attachDictionaryChunk(s, customDictionary); } let /** @type {number} */ totalOutput = 0; let /** @type {!Array} */ chunks = []; while (true) { let /** @type {!Int8Array} */ chunk = new Int8Array(16384); chunks.push(chunk); s.output = chunk; s.outputOffset = 0; s.outputLength = 16384; s.outputUsed = 0; decompress(s); totalOutput += s.outputUsed; if (s.outputUsed < 16384) break; } close(s); let /** @type {!Int8Array} */ result = new Int8Array(totalOutput); let /** @type {number} */ offset = 0; for (let /** @type {number} */ i = 0; i < chunks.length; ++i) { let /** @type {!Int8Array} */ chunk = chunks[i]; let /** @type {number} */ end = Math.min(totalOutput, offset + 16384); let /** @type {number} */ len = end - offset; if (len < 16384) { result.set(chunk.subarray(0, len), offset); } else { result.set(chunk, offset); } offset += len; } return result; } return decode; }; /** * @type {function(!Int8Array, ?Options=):!Int8Array} */ export let BrotliDecode = makeBrotliDecode(); ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/micProcessor.js ================================================ // micProcessor.js class MicProcessor extends AudioWorkletProcessor { constructor() { super(); // global variables for testing var sampleRate = globalThis.sampleRate; var currentFrame = globalThis.currentFrame; var currentTime = globalThis.currentTime; var currentRenderQuantum = globalThis.currentRenderQuantum; this.SampleRate = sampleRate; this.TargetSamples = Math.floor(this.SampleRate * 0.1); // 100ms this.Buffer = new Float32Array(this.TargetSamples); this.BufferIndex = 0; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { //this.port.postMessage(data); // echo back test } if (data instanceof Uint8Array) { } }; } process(inputs, outputs, parameters) { var inChannel0 = inputs[0][0]; if (!inChannel0) return true; let srcIndex = 0; var srcLen = inChannel0.length; while (srcIndex < srcLen) { var remaining = this.TargetSamples - this.BufferIndex; var copyCount = Math.min(remaining, srcLen - srcIndex); this.Buffer.set( inChannel0.subarray(srcIndex, srcIndex + copyCount), this.BufferIndex); this.BufferIndex += copyCount; srcIndex += copyCount; if (this.BufferIndex >= this.TargetSamples) { this.SendBuffer(); this.BufferIndex = 0; } } return true; } SendBuffer() { // convert to 16-6bit PCM var int16 = new Int16Array(this.TargetSamples); for (var i = 0; i < this.TargetSamples; i++) { int16[i] = this.Buffer[i] * 32767; } var byteArray = new Uint8Array(int16.buffer); this.port.postMessage(byteArray, [byteArray.buffer]); } } registerProcessor('mic-processor', MicProcessor); ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Blazor.GL/wwwroot/js/streamProcessor.js ================================================ // streamProcessor.js class StreamProcessor extends AudioWorkletProcessor { constructor() { super(); this.queue = []; this.port.onmessage = (event) => { var data = event.data; if (typeof data === 'number') { if (data === 2) { this.queue = []; } } if (data instanceof Uint8Array) { const buffer = new Int16Array(data.buffer, data.byteOffset, data.length / 2); buffer.offset = 0; this.queue.push(buffer); } }; } process(inputs, outputs, parameters) { const output = outputs[0]; const channelCount = output.length; const sampleCount = output[0].length; let written = 0; while (written < sampleCount && this.queue.length > 0) { const buffer = this.queue[0]; const offset = buffer.offset; const available = buffer.length - offset; const needed = sampleCount - written; const copyCount = Math.min(available, needed); for (let i = 0; i < copyCount; i++) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; let value = (buffer[offset+i] / 32767); channel[written+i] = value; } } written += copyCount; buffer.offset += copyCount; if (buffer.offset >= buffer.length) { this.queue.shift(); this.port.postMessage(1); } } // Fill remaining samples with silence if (written < sampleCount) { for (let c = 0; c < channelCount; c++) { const channel = output[c]; for (let i = written; i < sampleCount; i++) { let value = 0; channel[i] = value; } } } return true; } } registerProcessor("stream-processor", StreamProcessor); ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/$projectname$.SDL2.GL.csproj ================================================ false net8.0 Major $guid4$ WinExe True True Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);DESKTOPGL DesktopGL Icon.ico app.manifest Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new Platform$safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.SDL2.GL/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$.Shared.projitems ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true $guid1$ $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$.Shared.shproj ================================================ $guid1$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.Shared/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { protected GraphicsDeviceManager graphics; protected SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; if (TitleContainer.Platform == TitlePlatform.iOS) graphics.IsFullScreen = true; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/$projectname$.WinForms.DX11.csproj ================================================ false net8.0-windows Major true $guid3$ WinExe Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX Windows Icon.ico app.manifest Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package. //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory()); using (Game game = new Platform$safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.WinForms.DX11/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36930.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "$projectname$.Platforms", "$projectname$.Platforms", "{$fldguid$}" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "$projectname$.Shared", "$projectname$.Shared\$projectname$.Shared.shproj", "{$guid1$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.Android.GL", "$projectname$.Android.GL\$projectname$.Android.GL.csproj", "{$guid2$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.WinForms.DX11", "$projectname$.WinForms.DX11\$projectname$.WinForms.DX11.csproj", "{$guid3$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.SDL2.GL", "$projectname$.SDL2.GL\$projectname$.SDL2.GL.csproj", "{$guid4$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.Blazor.GL", "$projectname$.Blazor.GL\$projectname$.Blazor.GL.csproj", "{$guid7$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid2$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid2$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid2$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {$guid2$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid2$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid2$}.Release|Any CPU.Deploy.0 = Release|Any CPU {$guid3$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid3$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid3$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid3$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid4$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid4$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid4$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid4$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid7$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid7$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid7$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid7$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {$guid2$} = {$fldguid$} {$guid3$} = {$fldguid$} {$guid4$} = {$fldguid$} {$guid7$} = {$fldguid$} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection GlobalSection(SharedMSBuildProjectFiles) = preSolution $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid2$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid7$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid1$}*SharedItemsImports = 13 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid4$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid3$}*SharedItemsImports = 5 EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/$projectname$Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Android", "windows", "linux", "macos", "desktop", "mobile", "web" ], "identity": "nkast.Kni.Multiplatform.Project.CSharp", "name": "KNI Multiplatform Game Project (.net8)", "shortName": "kni-multiplatform", "description": "A KNI game project for multiple platforms with shared content.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "Android.GL/$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "fldguid": { "type": "generated", "generator": "guid", "replaces": "$fldguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid2": { "type": "generated", "generator": "guid", "replaces": "$guid2$" }, "guid3": { "type": "generated", "generator": "guid", "replaces": "$guid3$" }, "guid4": { "type": "generated", "generator": "guid", "replaces": "$guid4$" }, "guid7": { "type": "generated", "generator": "guid", "replaces": "$guid7$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/$projectname$.SDL2.GL.csproj ================================================ Debug AnyCPU 8.0.30703 2.0 $guid4$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 DesktopGL v4.8 true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;DESKTOPGL full AnyCPU prompt 4 false bin\$(Platform)\$(Configuration)\ TRACE;DESKTOPGL true pdbonly AnyCPU prompt 4 false Icon.ico app.manifest Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new Platform$safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$.SDL2.GL")] [assembly: AssemblyProduct("$safeprojectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid4$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.SDL2.GL/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$.Shared.projitems ================================================ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) true $guid1$ $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$.Shared.shproj ================================================ $guid1$ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.Shared/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { protected GraphicsDeviceManager graphics; protected SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/$projectname$.UWPCore.csproj ================================================ Debug x86 {$guid5$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ en-US UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference Designer Content\$projectname$Content.mgcb 6.2.14 14.0 ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Package.appxmanifest ================================================  $safeprojectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Program.cs ================================================ using System; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// static void Main() { var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$.UWPCore")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("$safeprojectname$")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPCore/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/$projectname$.UWPXaml.csproj ================================================ Debug x86 {$guid7$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ en-US UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference App.xaml MainPage.xaml Designer Content\$projectname$Content.mgcb MSBuild:Compile Designer MSBuild:Compile Designer 6.2.14 14.0 ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/App.xaml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/App.xaml.cs ================================================ using System; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace $safeprojectname$ { /// /// Provides application-specific behavior to supplement the default Application class. /// sealed partial class App : Application { static string deviceFamily; /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += OnSuspending; //API check to ensure the "RequiresPointerMode" property exists, ensuring project is running on build 14393 or later if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Application", "RequiresPointerMode")) { //If running on the Xbox, disable the default on screen pointer if (IsXbox()) { Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested; } } } /// /// Detection code in Windows 10 to identify the platform it is being run on /// This function returns true if the project is running on an XboxOne /// public static bool IsXbox() { if (deviceFamily == null) deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; return deviceFamily == "Windows.Xbox"; } /// /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { // By default we want to fill the entire core window. ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow); //-:cnd:noEmit #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif //+:cnd:noEmit Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } } /// /// Invoked when Navigation to a certain page fails /// /// The Frame which failed navigation /// Details about the navigation failure void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } /// /// Invoked when application execution is being suspended. Application state is saved /// without knowing whether the application will be terminated or resumed with the contents /// of memory still intact. /// /// The source of the suspend request. /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/MainPage.xaml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/MainPage.xaml.cs ================================================ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace $safeprojectname$ { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { readonly $safeprojectname$Game _game; public MainPage() { this.InitializeComponent(); // Create the game. string launchArguments = String.Empty; _game = Microsoft.Xna.Platform.XamlGame.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Package.appxmanifest ================================================  $safeprojectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$.UWPXaml")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("$safeprojectname$")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.UWPXaml/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/$projectname$.WinForms.DX11.csproj ================================================ Debug x86 8.0.30703 2.0 $guid3$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 Windows v4.8 true full AnyCPU false bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;WINDOWSDX prompt 4 false bin\$(Platform)\$(Configuration)\ TRACE;WINDOWSDX true pdbonly AnyCPU prompt 4 false Icon.ico app.manifest Content\$projectname$Content.mgcb ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Platform$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// public class Platform$safeprojectname$Game : $safeprojectname$Game { public Platform$safeprojectname$Game() : base() { // TODO: Add platform specific initialization logic here } /// protected override void Initialize() { base.Initialize(); } /// protected override void LoadContent() { base.LoadContent(); } /// protected override void UnloadContent() { base.UnloadContent(); } /// protected override void Update(GameTime gameTime) { base.Update(gameTime); } /// protected override void Draw(GameTime gameTime) { base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new Platform$safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$.WinForms.DX11")] [assembly: AssemblyProduct("$safeprojectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid3$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.WinForms.DX11/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36930.0 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "$projectname$.Platforms", "$projectname$.Platforms", "{$fldguid$}" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "$projectname$.Shared", "$projectname$.Shared\$projectname$.Shared.shproj", "{$guid1$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.WinForms.DX11", "$projectname$.WinForms.DX11\$projectname$.WinForms.DX11.csproj", "{$guid3$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.SDL2.GL", "$projectname$.SDL2.GL\$projectname$.SDL2.GL.csproj", "{$guid4$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.UWPCore", "$projectname$.UWPCore\$projectname$.UWPCore.csproj", "{$guid5$}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$.UWPXaml", "$projectname$.UWPXaml\$projectname$.UWPXaml.csproj", "{$guid7$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid3$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid3$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid3$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid3$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid4$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid4$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid4$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid4$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid5$}.Debug|Any CPU.ActiveCfg = Debug|x64 {$guid5$}.Debug|Any CPU.Build.0 = Debug|x64 {$guid5$}.Debug|Any CPU.Deploy.0 = Debug|x64 {$guid5$}.Release|Any CPU.ActiveCfg = Release|x64 {$guid5$}.Release|Any CPU.Build.0 = Release|x64 {$guid5$}.Release|Any CPU.Deploy.0 = Release|x64 {$guid7$}.Debug|Any CPU.ActiveCfg = Debug|x64 {$guid7$}.Debug|Any CPU.Build.0 = Debug|x64 {$guid7$}.Debug|Any CPU.Deploy.0 = Debug|x64 {$guid7$}.Release|Any CPU.ActiveCfg = Release|x64 {$guid7$}.Release|Any CPU.Build.0 = Release|x64 {$guid7$}.Release|Any CPU.Deploy.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {$guid3$} = {$fldguid$} {$guid4$} = {$fldguid$} {$guid5$} = {$fldguid$} {$guid7$} = {$fldguid$} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection GlobalSection(SharedMSBuildProjectFiles) = preSolution $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid3$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid4$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid5$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid7$}*SharedItemsImports = 5 $projectname$\$projectname$.Shared\$projectname$.Shared.projitems*{$guid1$}*SharedItemsImports = 13 EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/$projectname$Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/Multiplatform.NetFramework.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "windows", "linux", "macos", "desktop", "xbox", "uwp" ], "identity": "nkast.Kni.Multiplatform.netFramework.Project.CSharp", "name": "KNI Multiplatform Game Project (.NET Framework)", "shortName": "kni-multiplatform-netframework", "description": "A KNI game project for multiple platforms with shared content.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "WinForms.DX11/$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "fldguid": { "type": "generated", "generator": "guid", "replaces": "$fldguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid3": { "type": "generated", "generator": "guid", "replaces": "$guid3$" }, "guid4": { "type": "generated", "generator": "guid", "replaces": "$guid4$" }, "guid5": { "type": "generated", "generator": "guid", "replaces": "$guid5$" }, "guid6": { "type": "generated", "generator": "guid", "replaces": "$guid6$" }, "guid7": { "type": "generated", "generator": "guid", "replaces": "$guid7$" }, "guid8": { "type": "generated", "generator": "guid", "replaces": "$guid8$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$.csproj ================================================  false net8.0-android 32.0 $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);ANDROID Android com.companyname.$safeprojectname$ 1 1.0 .m4a True ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU {$guid1$}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$Activity.cs ================================================ using Microsoft.Xna.Framework; using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; namespace $safeprojectname$ { [Activity(Label = "$projectname$" , MainLauncher = true , Icon = "@drawable/icon" , Theme = "@style/Theme.Splash" , AlwaysRetainTaskState = true , LaunchMode = LaunchMode.SingleInstance , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.SmallestScreenSize | ConfigChanges.Density | ConfigChanges.LayoutDirection | ConfigChanges.FontScale , ScreenOrientation = ScreenOrientation.Landscape , ExcludeFromRecents = true , Exported = true )] [IntentFilter(new[] { Android.Content.Intent.ActionMain }, Categories = new[] { "org.khronos.openxr.intent.category.IMMERSIVE_HMD", "com.oculus.intent.category.VR", "android.intent.category.LAUNCHER" } )] public class $safeprojectname$Activity : Microsoft.Xna.Framework.AndroidGameActivity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Game game = new $safeprojectname$Game(); SetContentView((View)game.Services.GetService(typeof(View))); game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Framework.XR; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; XRDevice xrDevice; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; // OXR requires at least feature level 9.3. graphics.GraphicsProfile = GraphicsProfile.HiDef; // Syncronize to the headset refresh rate. graphics.SynchronizeWithVerticalRetrace = true; IsFixedTimeStep = false; // 72Hz Frame rate for oculus. TargetElapsedTime = TimeSpan.FromTicks(138888); // We don't care is the main window is Focuses or not // because we render on the XR rendertargets. InactiveSleepTime = TimeSpan.FromSeconds(0); xrDevice = new XRDevice("$safeprojectname$", this.Services); } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); xrDevice.BeginSessionAsync(XRSessionMode.VR); xrDevice.TrackFloorLevelAsync(true); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); GamePadState touchControllerState = TouchController.GetState(TouchControllerType.Touch); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { float aspect = GraphicsDevice.Viewport.AspectRatio; Matrix view = Matrix.CreateLookAt(Vector3.Zero, Vector3.Forward, Vector3.Up); Matrix projection = Matrix.CreatePerspectiveFieldOfView(1, aspect, 0.05f, 1000); if (xrDevice.DeviceState == XRDeviceState.Enabled) { // Draw on XR headset. xrDevice.BeginFrame(); try { HeadsetState headsetState = xrDevice.GetHeadsetState(); // Draw each eye on a rendertarget. foreach (XREye eye in xrDevice.GetEyes()) { RenderTarget2D rt = xrDevice.GetEyeRenderTarget(eye); GraphicsDevice.SetRenderTarget(rt); // Get XR view and projection. view = headsetState.GetEyeView(eye); projection = xrDevice.CreateProjection(eye, 0.05f, 1000); // TODO: Add your drawing code here if (xrDevice.SessionMode == XRSessionMode.AR) GraphicsDevice.Clear(Color.Transparent); else GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); // Resolve eye rendertarget. GraphicsDevice.SetRenderTarget(null); // Submit eye rendertarget. xrDevice.CommitRenderTarget(eye, rt); } } finally { // Submit XR frame. int result = xrDevice.EndFrame(); } return; } // Draw on the backbuffer. GraphicsDevice.SetRenderTarget(null); // TODO: Add your drawing code here GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/Game.vstemplate ================================================ KNI Oculus Project (.net8) A KNI game project for Oculus. CSharp KNI csharp Oculus games KNI XR 1 43201 true Game true Enabled true TemplateIcon.png true Directory.Build.props AndroidManifest.xml Activity.cs Game.cs Content.mgcb AboutAssets.txt AboutResources.txt Icon.png Splash.png Resource.Designer.cs Strings.xml Styles.xml ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Oculus", "XR" ], "identity": "nkast.Kni.Oculus.GL.Project.CSharp", "name": "KNI Oculus Game Project", "shortName": "kni-oculus-gl", "description": "A KNI game project for Oculus.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/AndroidManifest.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Assets/AboutAssets.txt ================================================ Any raw assets you want to be deployed with your application can be placed in this directory (and child directories) and given a Build Action of "AndroidAsset". These files will be deployed with your package and will be accessible using Android's AssetManager, like this: public class ReadAsset : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); InputStream input = Assets.Open ("my_asset.txt"); } } Additionally, some Android functions will automatically load asset files: Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Android /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/AboutResources.txt ================================================ Images, layout descriptions, binary blobs and string dictionaries can be included in your application as resource files. Various Android APIs are designed to operate on the resource IDs instead of dealing with images, strings or binary blobs directly. For example, a sample Android app that contains a user interface layout (Main.xml), an internationalization string table (Strings.xml) and some icons (drawable/Icon.png) would keep its resources in the "Resources" directory of the application: Resources/ Drawable/ Icon.png Layout/ Main.axml Values/ Strings.xml In order to get the build system to recognize Android resources, the build action should be set to "AndroidResource". The native Android APIs do not operate directly with filenames, but instead operate on resource IDs. When you compile an Android application that uses resources, the build system will package the resources for distribution and generate a class called "Resource" that contains the tokens for each one of the resources included. For example, for the above Resources layout, this is what the Resource class would expose: public class Resource { public class Drawable { public const int Icon = 0x123; } public class Layout { public const int Main = 0x456; } public class String { public const int FirstString = 0xabc; public const int SecondString = 0xbcd; } } You would then use Resource.Drawable.Icon to reference the Drawable/Icon.png file, or Resource.Layout.Main to reference the Layout/Main.axml file, or Resource.String.FirstString to reference the first string in the dictionary file Values/Strings.xml. ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Resource.Designer.cs ================================================ #pragma warning disable 1591 //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ [assembly: global::Android.Runtime.ResourceDesignerAttribute("$safeprojectname$.Resource", IsApplication=true)] namespace $safeprojectname$ { [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] public partial class Resource { static Resource() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } public static void UpdateIdValues() { } public partial class Attribute { static Attribute() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Attribute() { } } public partial class Drawable { // aapt resource value: 0x7f020000 public const int Icon = 2130837504; // aapt resource value: 0x7f020001 public const int Splash = 2130837505; static Drawable() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Drawable() { } } public partial class String { // aapt resource value: 0x7f030001 public const int ApplicationName = 2130903041; // aapt resource value: 0x7f030000 public const int Hello = 2130903040; static String() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private String() { } } public partial class Style { // aapt resource value: 0x7f040000 public const int Theme_Splash = 2130968576; static Style() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); } private Style() { } } } } #pragma warning restore 1591 ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Values/Strings.xml ================================================ $safeprojectname$ ================================================ FILE: Templates/dotnetTemplates/content/Oculus.NetCore.CSharp/Resources/Values/Styles.xml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$.csproj ================================================ false net8.0 Major $guid1$ WinExe True True Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);DESKTOPGL DesktopGL Icon.ico app.manifest ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "OpenGL", "Windows", "Linux", "macOS" ], "identity": "nkast.Kni.SDL2.GL.Project.CSharp", "name": "KNI Cross Platform Desktop Game Project (.net8)", "shortName": "kni-sdl2-gl", "description": "A KNI game project for Windows, Mac and Linux using OpenGL.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetCore.CSharp/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$.csproj ================================================ Debug AnyCPU 8.0.30703 2.0 $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 DesktopGL v4.8 true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;DESKTOPGL full AnyCPU prompt false 4 bin\$(Platform)\$(Configuration)\ TRACE;DESKTOPGL true pdbonly AnyCPU prompt false 4 Icon.ico app.manifest ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "OpenGL", "Windows", "Linux", "macOS" ], "identity": "nkast.Kni.SDL2.GL.netFramework.Project.CSharp", "name": "KNI Cross Platform Desktop Game Project (.NET Framework)", "shortName": "kni-sdl2-gl-netframework", "description": "A KNI game project for Windows, Mac and Linux using OpenGL.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid2": { "type": "generated", "generator": "guid", "replaces": "$guid2$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid2$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/dotnetTemplates/content/SDL2.GL.NetFramework.CSharp/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$.csproj ================================================ Debug x86 {$guid1$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ en-US UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference Designer 6.2.14 14.0 ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|x64 {$guid1$}.Debug|Any CPU.Build.0 = Debug|x64 {$guid1$}.Debug|Any CPU.Deploy.0 = Debug|x64 {$guid1$}.Release|Any CPU.ActiveCfg = Release|x64 {$guid1$}.Release|Any CPU.Build.0 = Release|x64 {$guid1$}.Release|Any CPU.Deploy.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "Windows", "xbox", "uwp" ], "identity": "nkast.Kni.UAP.Core.DX11.Project.CSharp", "name": "KNI Windows 10 Universal (Core) Game Project (.uap10)", "shortName": "kni-uap-core-dx11-netframework", "description": "A KNI game project for Windows 10 UWP using the Core Application framework.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid9": { "type": "generated", "generator": "guid", "replaces": "$guid9$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Package.appxmanifest ================================================  $projectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Program.cs ================================================ using System; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// static void Main() { var factory = new Microsoft.Xna.Platform.GameFrameworkViewSource<$safeprojectname$Game>(); Windows.ApplicationModel.Core.CoreApplication.Run(factory); } } } ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/dotnetTemplates/content/UWPCore.UAP.CSharp/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$.csproj ================================================ Debug x86 {$guid1$} AppContainerExe Properties $safeprojectname$ $safeprojectname$ en-US UAP 10.0.22621.0 10.0.16299.0 15 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true WindowsStoreApp true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full ARM false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly ARM false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x64 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x64 false prompt true true true bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;NETFX_CORE;UAP ;2008 full x86 false prompt true bin\$(Platform)\$(Configuration)\ TRACE;NETFX_CORE;UAP true ;2008 pdbonly x86 false prompt true true PackageReference App.xaml MainPage.xaml Designer MSBuild:Compile Designer MSBuild:Compile Designer 6.2.14 14.0 ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|x64 {$guid1$}.Debug|Any CPU.Build.0 = Debug|x64 {$guid1$}.Debug|Any CPU.Deploy.0 = Debug|x64 {$guid1$}.Release|Any CPU.ActiveCfg = Release|x64 {$guid1$}.Release|Any CPU.Build.0 = Release|x64 {$guid1$}.Release|Any CPU.Deploy.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "Windows", "xbox", "uwp" ], "identity": "nkast.Kni.UAP.Xaml.DX11.Project.CSharp", "name": "KNI Windows 10 Universal (XAML) Game Project (.uap10)", "shortName": "kni-uap-xaml-dx11-netframework", "description": "A KNI game project for Windows 10 UWP using XAML controls.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid9": { "type": "generated", "generator": "guid", "replaces": "$guid9$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/App.xaml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/App.xaml.cs ================================================ using System; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace $safeprojectname$ { /// /// Provides application-specific behavior to supplement the default Application class. /// sealed partial class App : Application { static string deviceFamily; /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += OnSuspending; //API check to ensure the "RequiresPointerMode" property exists, ensuring project is running on build 14393 or later if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Application", "RequiresPointerMode")) { //If running on the Xbox, disable the default on screen pointer if (IsXbox()) { Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested; } } } /// /// Detection code in Windows 10 to identify the platform it is being run on /// This function returns true if the project is running on an XboxOne /// public static bool IsXbox() { if (deviceFamily == null) deviceFamily = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily; return deviceFamily == "Windows.Xbox"; } /// /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { // By default we want to fill the entire core window. ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow); //-:cnd:noEmit #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif //+:cnd:noEmit Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (e.PrelaunchActivated == false) { if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } } /// /// Invoked when Navigation to a certain page fails /// /// The Frame which failed navigation /// Details about the navigation failure void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } /// /// Invoked when application execution is being suspended. Application state is saved /// without knowing whether the application will be terminated or resumed with the contents /// of memory still intact. /// /// The source of the suspend request. /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity deferral.Complete(); } } } ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:WindowsStoreApp /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/MainPage.xaml ================================================  ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/MainPage.xaml.cs ================================================ using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace $safeprojectname$ { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { readonly $safeprojectname$Game _game; public MainPage() { this.InitializeComponent(); // Create the game. string launchArguments = String.Empty; _game = Microsoft.Xna.Platform.XamlGame<$safeprojectname$Game>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel); } } } ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Package.appxmanifest ================================================  $projectname$ publisherDisplayName Assets\StoreLogo.png ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: ComVisible(false)] ================================================ FILE: Templates/dotnetTemplates/content/UWPXaml.UAP.CSharp/Properties/Default.rd.xml ================================================ ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$.csproj ================================================ false net8.0-windows Major true $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX Windows Icon.ico app.manifest ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "Windows" ], "identity": "nkast.Kni.WinForms.DX11.Project.CSharp", "name": "KNI Windows Game Project (.net8)", "shortName": "kni-winforms-dx11", "description": "A KNI game project for the Windows desktop using DirectX 11.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { // Uncomment this line to enable VR with the nkast.Kni.Platform.WinForms.DX11.OculusOVR package. //Microsoft.Xna.Platform.XR.XRFactory.RegisterXRFactory(new Microsoft.Xna.Platform.XR.LibOVR.ConcreteXRFactory()); using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetCore.CSharp/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$.csproj ================================================ Debug x86 8.0.30703 2.0 $guid1$ WinExe Properties $safeprojectname$ $safeprojectname$ 512 Windows v4.8 AnyCPU true full false bin\$(Platform)\$(Configuration)\ DEBUG;TRACE;WINDOWSDX prompt 4 false AnyCPU pdbonly true bin\$(Platform)\$(Configuration)\ TRACE;WINDOWSDX prompt 4 false Icon.ico app.manifest ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "Desktop", "Windows" ], "identity": "nkast.Kni.WinForms.DX11.netFramework.Project.CSharp", "name": "KNI Windows Game Project (.NET Framework)", "shortName": "kni-winforms-dx11-netframework", "description": "A KNI game project for the Windows desktop using DirectX 11.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "guid2": { "type": "generated", "generator": "guid", "replaces": "$guid2$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Program.cs ================================================ using System; using Microsoft.Xna.Framework; namespace $safeprojectname$ { /// /// The main class. /// public static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { using (Game game = new $safeprojectname$Game()) game.Run(); } } } ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("$projectname$")] [assembly: AssemblyProduct("$projectname$")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("$guid2$")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Templates/dotnetTemplates/content/WinForms.DX11.NetFramework.CSharp/app.manifest ================================================  true/pm ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$.csproj ================================================ false net8.0-ios 11.2 $guid1$ Exe True partial $safeprojectname$ $safeprojectname$ bin\$(Platform)\$(Configuration) $(DefineConstants);iOS iOS iPhone Developer ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.14.36811.4 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$projectname$", "$projectname$.csproj", "{$guid1$}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {$guid1$}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {$guid1$}.Debug|Any CPU.Build.0 = Debug|Any CPU {$guid1$}.Release|Any CPU.ActiveCfg = Release|Any CPU {$guid1$}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {$slnguid$} EndGlobalSection EndGlobal ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/$projectname$Game.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.Touch; namespace $safeprojectname$ { /// /// This is the main type for your game. /// public class $safeprojectname$Game : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public $safeprojectname$Game() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.IsFullScreen = true; graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; } /// /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: Use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); GamePadState gamePadState = GamePad.GetState(PlayerIndex.One); if (keyboardState.IsKeyDown(Keys.Escape) || keyboardState.IsKeyDown(Keys.Back) || gamePadState.Buttons.Back == ButtonState.Pressed) { try { Exit(); } catch (PlatformNotSupportedException) { /* ignore */ } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } } } ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/.template.config/ide.host.json ================================================ { "$schema": " https://json.schemastore.org/ide.host", "icon": "TemplateIcon.png", } ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/.template.config/template.json ================================================ { "$schema": "http://json.schemastore.org/template", "author": "KNI Engine", "classifications": [ "KNI", "Games", "iOS", "mobile" ], "identity": "nkast.Kni.iOS.GL.Project.CSharp", "name": "KNI iOS Game Project", "shortName": "kni-ios-gl", "description": "A KNI game project for iOS.", "tags": { "language": "C#", "type": "project" }, "sourceName": "$projectname$", "primaryOutputs": [ { "path": "$projectname$.csproj" } ], "symbols": { "slnguid": { "type": "generated", "generator": "guid", "replaces": "$slnguid$" }, "guid1": { "type": "generated", "generator": "guid", "replaces": "$guid1$" }, "filesafeprojectname": { "type": "derived", "valueSource": "name", "replaces": "$safeprojectname$", "valueTransform": "safe_name" } }, "preferNameDirectory": true, "icon": "TemplateIcon.png" } ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Content/$projectname$Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:iOS /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Directory.Build.props ================================================ ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Entitlements.plist ================================================  ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Info.plist ================================================ CFBundleDisplayName $safeprojectname$ CFBundleIconFiles GameThumbnail.png CFBundleIdentifier project.Company.$safeprojectname$ MinimumOSVersion 11.2 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight CFBundleName $safeprojectname$ UIRequiresFullScreen UIStatusBarHidden UILaunchStoryboardName LaunchScreen UIDeviceFamily 1 2 ================================================ FILE: Templates/dotnetTemplates/content/iOS.NetCore.CSharp/Program.cs ================================================ using System; using Foundation; using UIKit; namespace $safeprojectname$ { [Register("AppDelegate")] internal class Program : UIApplicationDelegate { private static $safeprojectname$Game game; internal static void RunGame() { game = new $safeprojectname$Game(); game.Run(); } /// /// The main entry point for the application. /// static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } public override void FinishedLaunching(UIApplication app) { RunGame(); } } } ================================================ FILE: Templates/dotnetTemplates/installPackage.bat ================================================ dotnet new install .\bin\Release\nkast.Kni.Templates.4.2.9001.nupkg ================================================ FILE: Templates/dotnetTemplates/nkast.Kni.Templates.csproj ================================================  nkast.Kni.Templates 4.2.9001-preview.2 KNI Templates KNI Engine .NET templates for creating KNI game projects. KNI;KniEngine;game-development;gamedev; https://github.com/kniEngine/kni/ Template net8.0 true false content $(NoWarn);NU5128 true README.md false ================================================ FILE: Templates/dotnetTemplates/pack.bat ================================================ dotnet pack ================================================ FILE: Templates/dotnetTemplates/uninstallPackage.bat ================================================ dotnet new uninstall nkast.Kni.Templates ================================================ FILE: Tests/Assets/Audio/Tests.xap ================================================ Signature = XACT3; Version = 18; Content Version = 46; Release = February 2010; Options { Verbose Report = 0; Generate C/C++ Headers = 1; } Global Settings { Xbox File = Xbox\Tests.xgs; Windows File = Win\Tests.xgs; Header File = D:\Projects\MonoGame\Test\Assets\Audio\Tests.h; Exclude Category Names = 0; Exclude Variable Names = 0; Last Modified Low = 2235367809; Last Modified High = 30530715; Category { Name = Global; Public = 1; Background Music = 0; Volume = 0; Category Entry { } Instance Limit { Max Instances = 255; Behavior = 0; Crossfade { Fade In = 0; Fade Out = 0; Crossfade Type = 0; } } } Category { Name = Default; Public = 1; Background Music = 0; Volume = 0; Category Entry { Name = Global; } Instance Limit { Max Instances = 255; Behavior = 0; Crossfade { Fade In = 0; Fade Out = 0; Crossfade Type = 0; } } } Category { Name = Music; Public = 1; Background Music = 1; Volume = 0; Category Entry { Name = Global; } Instance Limit { Max Instances = 255; Behavior = 0; Crossfade { Fade In = 0; Fade Out = 0; Crossfade Type = 0; } } } Category { Name = The End; Public = 1; Background Music = 0; Volume = 0; Category Entry { Name = Global; } Instance Limit { Max Instances = 255; Behavior = 0; Crossfade { Fade In = 0; Fade Out = 0; Crossfade Type = 0; } } } Category { Name = Subcat; Public = 1; Background Music = 0; Volume = 0; Category Entry { Name = The End; } Instance Limit { Max Instances = 255; Behavior = 0; Crossfade { Fade In = 0; Fade Out = 0; Crossfade Type = 0; } } } Variable { Name = OrientationAngle; Public = 1; Global = 0; Internal = 0; External = 0; Monitored = 1; Reserved = 1; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 0.000000; Min = -180.000000; Max = 180.000000; } Variable { Name = DopplerPitchScalar; Public = 1; Global = 0; Internal = 0; External = 0; Monitored = 1; Reserved = 1; Read Only = 0; Time = 0; Value = 1.000000; Initial Value = 1.000000; Min = 0.000000; Max = 4.000000; } Variable { Name = SpeedOfSound; Public = 1; Global = 1; Internal = 0; External = 0; Monitored = 1; Reserved = 1; Read Only = 0; Time = 0; Value = 343.500000; Initial Value = 343.500000; Min = 0.000000; Max = 1000000.000000; } Variable { Name = ReleaseTime; Public = 1; Global = 0; Internal = 1; External = 1; Monitored = 1; Reserved = 1; Read Only = 1; Time = 1; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 15000.000000; } Variable { Name = AttackTime; Public = 1; Global = 0; Internal = 1; External = 1; Monitored = 1; Reserved = 1; Read Only = 1; Time = 1; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 15000.000000; } Variable { Name = NumCueInstances; Public = 1; Global = 0; Internal = 1; External = 1; Monitored = 1; Reserved = 1; Read Only = 1; Time = 0; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 1024.000000; } Variable { Name = Distance; Public = 1; Global = 0; Internal = 0; External = 0; Monitored = 1; Reserved = 1; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 1000000.000000; } Variable { Name = Global Public; Public = 1; Global = 1; Internal = 0; External = 0; Monitored = 1; Reserved = 0; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 12.340000; Min = 0.000000; Max = 100.000000; } Variable { Name = Global Private; Public = 0; Global = 1; Internal = 0; External = 0; Monitored = 1; Reserved = 0; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 100.000000; } Variable { Name = Cue Private; Public = 0; Global = 0; Internal = 0; External = 0; Monitored = 1; Reserved = 0; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 0.000000; Min = 0.000000; Max = 100.000000; } Variable { Name = Cue Public; Public = 1; Global = 0; Internal = 0; External = 0; Monitored = 1; Reserved = 0; Read Only = 0; Time = 0; Value = 0.000000; Initial Value = 45.669998; Min = 0.000000; Max = 100.000000; } Compression Preset { Name = Adpcm; Xbox Format Tag = 0; PC Format Tag = 2; Samples Per Block = 128; } } Wave Bank { Name = Tests; Xbox File = Xbox\Tests.xwb; Windows File = Win\Tests.xwb; Xbox Bank Path Edited = 0; Windows Bank Path Edited = 0; Seek Tables = 1; Compression Preset Name = ; Xbox Bank Last Modified Low = 0; Xbox Bank Last Modified High = 0; PC Bank Last Modified Low = 2235437834; PC Bank Last Modified High = 30530715; Bank Last Revised Low = 1968512440; Bank Last Revised High = 30530715; Wave { Name = blast_mono; File = blast_mono.wav; Build Settings Last Modified Low = 1875978603; Build Settings Last Modified High = 30526869; Cache { Format Tag = 0; Channels = 1; Sampling Rate = 44100; Bits Per Sample = 1; Play Region Offset = 44; Play Region Length = 631940; Loop Region Offset = 0; Loop Region Length = 0; File Type = 1; Last Modified Low = 2255033196; Last Modified High = 30529426; } } Wave { Name = rock_loop_stereo; File = rock_loop_stereo.wav; Build Settings Last Modified Low = 1901270084; Build Settings Last Modified High = 30526869; Cache { Format Tag = 0; Channels = 2; Sampling Rate = 44100; Bits Per Sample = 1; Play Region Offset = 44; Play Region Length = 1400616; Loop Region Offset = 0; Loop Region Length = 0; File Type = 1; Last Modified Low = 2255273154; Last Modified High = 30529426; } } Wave { Name = bark_mono_44hz_16bit; File = bark_mono_44hz_16bit.wav; Build Settings Last Modified Low = 724851642; Build Settings Last Modified High = 30530715; Compression Preset Name = Adpcm; Cache { Format Tag = 0; Channels = 1; Sampling Rate = 44100; Bits Per Sample = 1; Play Region Offset = 44; Play Region Length = 142154; Loop Region Offset = 0; Loop Region Length = 0; File Type = 1; Last Modified Low = 4285451975; Last Modified High = 30530714; } } } Sound Bank { Name = Tests; Xbox File = Xbox\Tests.xsb; Windows File = Win\Tests.xsb; Xbox Bank Path Edited = 0; Windows Bank Path Edited = 0; Bank Last Modified Low = 2236507872; Bank Last Modified High = 30530715; Header Last Modified High = 0; Header Last Modified Low = 0; Sound { Name = blast_mono; Volume = -1200; Pitch = 0; Priority = 0; Category Entry { Name = Default; } Track { Volume = 0; Use Filter = 0; Play Wave Event { Break Loop = 0; Use Speaker Position = 0; Use Center Speaker = 1; New Speaker Position On Loop = 1; Speaker Position Angle = 0.000000; Speaker Position Arc = 0.000000; Event Header { Timestamp = 0; Relative = 0; Random Recurrence = 0; Random Offset = 0; } Wave Entry { Bank Name = Tests; Bank Index = 0; Entry Name = blast_mono; Entry Index = 0; Weight = 255; Weight Min = 0; } } } } Sound { Name = rock_loop_stereo; Volume = -1200; Pitch = 0; Priority = 0; Category Entry { Name = Default; } Track { Volume = 0; Use Filter = 0; Play Wave Event { Loop Count = 255; Break Loop = 0; Use Speaker Position = 0; Use Center Speaker = 1; New Speaker Position On Loop = 1; Speaker Position Angle = 0.000000; Speaker Position Arc = 0.000000; Event Header { Timestamp = 0; Relative = 0; Random Recurrence = 0; Random Offset = 0; } Wave Entry { Bank Name = Tests; Bank Index = 0; Entry Name = rock_loop_stereo; Entry Index = 1; Weight = 255; Weight Min = 0; } } } } Sound { Name = bark_mono; Volume = -1200; Pitch = 0; Priority = 0; Category Entry { Name = Default; } Track { Volume = 0; Use Filter = 0; Play Wave Event { Break Loop = 0; Use Speaker Position = 0; Use Center Speaker = 1; New Speaker Position On Loop = 1; Speaker Position Angle = 0.000000; Speaker Position Arc = 0.000000; Event Header { Timestamp = 0; Relative = 0; Random Recurrence = 0; Random Offset = 0; } Wave Entry { Bank Name = Tests; Bank Index = 0; Entry Name = bark_mono_44hz_16bit; Entry Index = 2; Weight = 255; Weight Min = 0; } } } } Cue { Name = blast_mono; Variation { Variation Type = 3; Variation Table Type = 1; New Variation on Loop = 0; } Sound Entry { Name = blast_mono; Index = 0; Weight Min = 0; Weight Max = 255; } } Cue { Name = rock_loop_stereo; Variation { Variation Type = 3; Variation Table Type = 1; New Variation on Loop = 0; } Sound Entry { Name = rock_loop_stereo; Index = 1; Weight Min = 0; Weight Max = 255; } } Cue { Name = bark_mono; Variation { Variation Type = 3; Variation Table Type = 1; New Variation on Loop = 0; } Sound Entry { Name = bark_mono; Index = 2; Weight Min = 0; Weight Max = 255; } } } ================================================ FILE: Tests/Assets/Effects/Bevels.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); color -= tex2D(s0, coords - 0.002) * 2.5f; color += tex2D(s0, coords + 0.002) * 2.5f; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/BlackOut.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); color.rgb = 0; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/ColorFlip.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); color.rgb = color.bgr; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/ComputeShader.fx ================================================ // code from @cpt-max Compute fork. // https://github.com/cpt-max/MonoGame/commit/eebfda5246bed106618c17eca416aae548547c04 struct Input { float2 pos; }; struct Output { int collisions; }; StructuredBuffer Inputs; RWStructuredBuffer Outputs; int ObjectCount; float ObjectSize; [numthreads(10, 1, 1)] void CS(uint3 localID : SV_GroupThreadID, uint3 dispatchID : SV_GroupID, uint localIndex : SV_GroupIndex, uint3 globalID : SV_DispatchThreadID) { float2 pos = Inputs[globalID.x].pos; int collisions = 0; for (int i = 0; i < ObjectCount; i++) { if ((uint) i == globalID.x) continue; float2 posOther = Inputs[i].pos; float dist = distance(pos, posOther); if (dist < ObjectSize) collisions++; } Outputs[globalID.x].collisions = collisions; } technique Tech0 { pass Pass0 { ComputeShader = compile cs_5_0 CS(); } } ================================================ FILE: Tests/Assets/Effects/CustomSpriteBatchEffect.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. Texture2D SourceTexture; Texture2D OtherTexture; sampler2D SourceSampler = sampler_state { Texture = (SourceTexture); }; sampler2D OtherSampler = sampler_state { Texture = (OtherTexture); }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(SourceSampler, uv) + tex2D(OtherSampler, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/CustomSpriteBatchEffectComparisonSampler.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. Texture2D SourceTexture; SamplerComparisonState SourceSampler; struct VSOutput { float4 position : SV_Position; float4 color : COLOR0; float2 uv : TEXCOORD0; }; float4 PS_Main(VSOutput input) : COLOR0 { float comparisonResult = SourceTexture.SampleCmpLevelZero(SourceSampler, input.uv, 0.5f); return float4(comparisonResult, 0, 0, 1); } technique { pass { PixelShader = compile ps_3_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/DeferredBasicEffect.fx ================================================ float4x4 World; float4x4 View; float4x4 Projection; float specularIntensity = 0.8f; float specularPower = 0.5f; texture2D Diffuse : register(t0); sampler DiffuseSampler : register(s0) = sampler_state { Texture = (Diffuse); MAGFILTER = LINEAR; MINFILTER = LINEAR; MIPFILTER = LINEAR; AddressU = Wrap; AddressV = Wrap; }; texture2D SpecularMap : register(t1); sampler SpecularMapSampler : register(s1) = sampler_state { Texture = (SpecularMap); MagFilter = LINEAR; MinFilter = LINEAR; Mipfilter = LINEAR; AddressU = Wrap; AddressV = Wrap; }; texture2D NormalMap : register(t2); sampler NormalMapSampler : register(s2) = sampler_state { Texture = (NormalMap); MagFilter = LINEAR; MinFilter = LINEAR; Mipfilter = LINEAR; AddressU = Wrap; AddressV = Wrap; }; struct VertexShaderInput { float4 Position : POSITION0; float3 Normal : NORMAL0; float2 TexCoord : TEXCOORD0; float3 Binormal : BINORMAL0; float3 Tangent : TANGENT0; }; struct VertexShaderOutput { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; float2 Depth : TEXCOORD1; float3x3 tangentToWorld : TEXCOORD2; }; VertexShaderOutput VertexShaderFunction(VertexShaderInput input) { VertexShaderOutput output; float4 worldPosition = mul(float4(input.Position.xyz,1), World); float4 viewPosition = mul(worldPosition, View); output.Position = mul(viewPosition, Projection); output.TexCoord = input.TexCoord; output.Depth.x = output.Position.z; output.Depth.y = output.Position.w; // calculate tangent space to world space matrix using the world space tangent, // binormal, and normal as basis vectors output.tangentToWorld[0] = mul(input.Tangent, World); output.tangentToWorld[1] = mul(input.Binormal, World); output.tangentToWorld[2] = mul(input.Normal, World); return output; } struct PixelShaderOutput { half4 Color : COLOR0; half4 Normal : COLOR1; half4 Depth : COLOR2; }; PixelShaderOutput PixelShaderFunction(VertexShaderOutput input) { PixelShaderOutput output; output.Color = tex2D(DiffuseSampler, input.TexCoord); float4 specularAttributes = tex2D(SpecularMapSampler, input.TexCoord); //specular Intensity output.Color.a = specularAttributes.r; // read the normal from the normal map float3 normalFromMap = tex2D(NormalMapSampler, input.TexCoord); //tranform to [-1,1] normalFromMap = 2.0f * normalFromMap - 1.0f; normalFromMap = float3(0,0,1); //if we don't have a normalMap do this! //transform into world space normalFromMap = mul(normalFromMap, input.tangentToWorld); //normalize the result normalFromMap = normalize(normalFromMap); //output the normal, in [0,1] space output.Normal.rgb = 0.5f * (normalFromMap + 1.0f); //specular Power output.Normal.a = specularAttributes.a; output.Depth = input.Depth.x / input.Depth.y; return output; } technique Standard { pass { VertexShader = compile vs_2_0 VertexShaderFunction (); PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/DefinesTest.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. float4 VS_Main(float4 position : POSITION0) : SV_Position0 { return float4(1, 2, 3, 4); } float4 PS_Main(float4 position : SV_Position) : COLOR0 { return 1; } technique { pass { VertexShader = compile vs_2_0 VS_Main(); PixelShader = compile ps_2_0 PS_Main(); } } #if defined(INVALID_SYNTAX) Foo; #endif #if MACRO_DEFINE_TEST != 3 Bar; #endif ================================================ FILE: Tests/Assets/Effects/DirectX.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:DirectX /intermediateDir:obj /platform:Windows /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# #begin ParserTest.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:ParserTest.fx #begin Bevels.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Bevels.fx #begin BlackOut.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:BlackOut.fx #begin ColorFlip.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:ColorFlip.fx #begin Grayscale.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Grayscale.fx #begin HighContrast.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:HighContrast.fx #begin Invert.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Invert.fx #begin NoEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NoEffect.fx #begin RainbowH.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:RainbowH.fx #begin Instancing.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Instancing.fx #begin VertexTextureEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:VertexTextureEffect.fx #begin CustomSpriteBatchEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:CustomSpriteBatchEffect.fx #begin CustomSpriteBatchEffectComparisonSampler.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /processorParam:Defines= /build:CustomSpriteBatchEffectComparisonSampler.fx #begin TextureArrayEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:TextureArrayEffect.fx #begin OldSyntax_s0s1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_s0s1.fx #begin OldSyntax_x.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_x.fx #begin OldSyntax_t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_t0t1.fx #begin OldSyntax_s0s1t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_s0s1t0t1.fx #begin NewSyntax_t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NewSyntax_t0t1.fx #begin OldSyntax_t1t0.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_t1t0.fx #begin NewSyntax_s0s1t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NewSyntax_s0s1t0t1.fx #begin DeferredBasicEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:DeferredBasicEffect.fx ================================================ FILE: Tests/Assets/Effects/Grayscale.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); color.rgb = color.r; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/HighContrast.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); if (color.r > .65) color.r = 1; else if (color.r < .35) color.r = 0; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/Instancing.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. float4x4 View; float4x4 Projection; struct VSInput { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; }; struct VSOutput { float2 TexCoord : TEXCOORD0; float4 Position : SV_Position; }; struct PSInput { float2 TexCoord : TEXCOORD0; }; VSOutput VS(VSInput input, float4x4 worldTransposed : BLENDWEIGHT) { VSOutput output = (VSOutput)0; float4x4 world = transpose(worldTransposed); float4 positionWorld = mul(input.Position, world); float4 positionView = mul(positionWorld, View); output.Position = mul(positionView, Projection); output.TexCoord = input.TexCoord; return output; } float4 PS(PSInput input) : COLOR0 { return float4(input.TexCoord.xy, 0, 1); } technique { pass { VertexShader = compile vs_3_0 VS(); PixelShader = compile ps_3_0 PS(); } } ================================================ FILE: Tests/Assets/Effects/Invert.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); if (!any(color)) return color; color.rgb = 1 - color.rgb; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/NewSyntax_s0s1t0t1.fx ================================================ Texture2D Texture0; Texture2D Texture1; sampler Sampler0 = sampler_state { MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; }; sampler Sampler1 = sampler_state { MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; AddressU = CLAMP; AddressV = CLAMP; }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return Texture0.Sample(Sampler0, uv) * Texture1.Sample(Sampler1, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/NewSyntax_t0t1.fx ================================================ Texture2D Texture0; Texture2D Texture1; sampler Sampler0 = sampler_state { }; sampler Sampler1 = sampler_state { }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return Texture0.Sample(Sampler0, uv) * Texture1.Sample(Sampler1, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/NoEffect.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/OldSyntax_s0s1.fx ================================================ sampler2D Sampler0 = sampler_state { MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; }; sampler2D Sampler1 = sampler_state { MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; AddressU = CLAMP; AddressV = CLAMP; }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(Sampler0, uv) * tex2D(Sampler1, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OldSyntax_s0s1t0t1.fx ================================================ Texture2D Texture0; Texture2D Texture1; sampler2D Sampler0 = sampler_state { Texture = (Texture0); MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; }; sampler2D Sampler1 = sampler_state { Texture = (Texture1); MAGFILTER = POINT; MINFILTER = POINT; MIPFILTER = POINT; AddressU = CLAMP; AddressV = CLAMP; }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(Sampler0, uv) * tex2D(Sampler1, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OldSyntax_t0t1.fx ================================================ Texture2D Texture0; Texture2D Texture1; sampler2D Sampler0 = sampler_state { Texture = (Texture0); }; sampler2D Sampler1 = sampler_state { Texture = (Texture1); }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(Sampler0, uv) + tex2D(Sampler1, uv) * 0.5; } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OldSyntax_t1t0.fx ================================================ Texture2D Texture0; Texture2D Texture1; sampler2D Sampler0 = sampler_state { Texture = (Texture0); }; sampler2D Sampler1 = sampler_state { Texture = (Texture1); }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(Sampler1, uv) * 0.5 + tex2D(Sampler0, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OldSyntax_x.fx ================================================ sampler2D Sampler0 = sampler_state { }; sampler2D Sampler1 = sampler_state { }; float4 PS_Main(float2 uv : TEXCOORD0) : COLOR0 { return tex2D(Sampler0, uv) * tex2D(Sampler1, uv); } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OpenGL.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:OpenGL /intermediateDir:obj /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# #begin Bevels.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Bevels.fx #begin BlackOut.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:BlackOut.fx #begin ColorFlip.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:ColorFlip.fx #begin CustomSpriteBatchEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:CustomSpriteBatchEffect.fx #begin Grayscale.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Grayscale.fx #begin HighContrast.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:HighContrast.fx #begin Invert.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:Invert.fx #begin NoEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NoEffect.fx #begin RainbowH.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:RainbowH.fx #begin OldSyntax_s0s1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_s0s1.fx #begin OldSyntax_x.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_x.fx #begin OldSyntax_t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_t0t1.fx #begin OldSyntax_s0s1t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_s0s1t0t1.fx #begin NewSyntax_t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NewSyntax_t0t1.fx #begin OldSyntax_t1t0.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:OldSyntax_t1t0.fx #begin NewSyntax_s0s1t0t1.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:NewSyntax_s0s1t0t1.fx #begin DeferredBasicEffect.fx /importer:EffectImporter /processor:EffectProcessor /processorParam:DebugMode=Auto /build:DeferredBasicEffect.fx ================================================ FILE: Tests/Assets/Effects/OptimizedMatrix.fx ================================================ float4x4 ColorMatrix = { 11, 21, 31, 41, 12, 22, 32, 42, 13, 23, 33, 43, 14, 24, 34, 44 }; float4 PS_Main(float4 inPosition : SV_Position, float4 inColor : COLOR0 ) : COLOR0 { float4 color = inColor; color.r = color.r * ColorMatrix._11; color.g = color.g * ColorMatrix._12; color.b = color.b * ColorMatrix._13; //color.a = color.a * ColorMatrix._14; return color; } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/OptimizedMatrixArray.fx ================================================ float4x4 ColorsMatrix[2] = { { 11, 21, 31, 41, 12, 22, 32, 42, 13, 23, 33, 43, 14, 24, 34, 44 }, { 111, 121, 131, 141, 112, 122, 132, 142, 113, 123, 133, 143, 114, 124, 134, 144 } }; float4 PS_Main(float4 inPosition : SV_Position, float4 inColor : COLOR0 ) : COLOR0 { float4 color = inColor; for (int i = 0; i < 2; ++i) { color.r = color.r * ColorsMatrix[i]._11; color.g = color.g * ColorsMatrix[i]._12; color.b = color.b * ColorsMatrix[i]._13; //color.a = color.a * ColorsMatrix[i]._14; } return color; } technique { pass { PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/ParserTest.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. uniform float TestFloat; uniform float2 TestFloat2; uniform float3 TestFloat3; uniform float4 TestFloat4; sampler2D TestSampler2D = sampler_state { MipFilter = Linear; MagFilter = Linear; MipFilter = None; BorderColor = 0xFF00FF; }; sampler2D TestSampler2D_2 = sampler_state { BorderColor = 0xFF00FFFF; }; float4 VS_Main(float4 position : POSITION0) : SV_Position0 { return float4(1, 2, 3, 4); } float4 PS_Main(float4 position : SV_Position) : COLOR0 { return 1; } technique Technique1 { pass Pass0 { CullMode = NonE; CullMode = Ccw; CullMode = cw; CullMode = cW; ColorWriteEnable = true; ColorWriteEnable = false; ColorWriteEnable = All; ColorWriteEnable = None; ColorWriteEnable = Red|Green; ColorWriteEnable = Red|Green|Blue; ColorWriteEnable = Red|Green|Blue|Alpha; ZEnable = false; ZEnable = true; ZWriteEnable = FALSE; ZWriteEnable = TRUE; VertexShader = compile vs_2_0 VS_Main(); PixelShader = compile ps_2_0 PS_Main(); } } technique { pass { VertexShader = compile vs_2_0 VS_Main(); PixelShader = compile ps_2_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/PreprocessorInclude.fxh ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. #if __KNIFX__ #define PS_PROFILE ps_4_0_level_9_1 #define VS_PROFILE vs_4_0_level_9_1 #else #define PS_PROFILE ps_2_0 #define VS_PROFILE vs_2_0 #endif int a; // Something on final line ================================================ FILE: Tests/Assets/Effects/PreprocessorTest.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. #include "PreprocessorInclude.fxh" #define TEST 1 /* This is a C style comment. */ #if foo(TEST) // TODO: This should trigger a warning at position 13:4, but it's currently reported at 9:4. #endif #if TEST == 0 int Foo; #elif TEST == 1 int Bar; #else int Baz; #endif #if defined(TEST2) FOO #elif defined(TEST3) BAR #endif float4 VS_Main(float4 position : POSITION0) : SV_Position0 { return float4(1, 2, 3, 4); } float4 PS_Main(float4 position : SV_Position) : COLOR0 { return 1; } technique { pass { VertexShader = compile VS_PROFILE VS_Main(); PixelShader = compile PS_PROFILE PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/README.txt ================================================ For XNA effects can be compiled using the .csproj in this folder. Simply build the csproj using MSBuild to compile the effects using XNA's content importer and processor. To add an effect, just copy-paste an existing entry and replace the effect path and name. For DirectX and OpenGL use the pipeline tool to build the effects. ================================================ FILE: Tests/Assets/Effects/RainbowH.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. sampler s0; float4 red = float4(1,0,0,1); float4 orange = float4(1,.5,0,1); float4 yellow = float4(1,1,0,1); float4 green = float4(0,1,0,1); float4 blue = float4(0,0,1,1); float4 indigo = float4(.3,0,.8,1); float4 violet = float4(1,.8,1,1); float step = 1.0/7; float4 PixelShaderFunction( float4 inPosition : SV_Position, float4 inColor : COLOR0, float2 coords : TEXCOORD0 ) : COLOR0 { float4 color = tex2D(s0, coords); if (!any(color)) return color; if (coords.x < (step * 1)) color = red; else if (coords.x < (step * 2)) color = orange; else if (coords.x < (step * 3)) color = yellow; else if (coords.x < (step * 4)) color = green; else if (coords.x < (step * 5)) color = blue; else if (coords.x < (step * 6)) color = indigo; else color = violet; return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } } ================================================ FILE: Tests/Assets/Effects/TextureArrayEffect.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. matrix WorldViewProj; Texture2DArray Texture : register(t0); SamplerState TextureSampler : register(s0); struct VSOutput { float4 PositionPS : SV_Position; float2 TexCoord : TEXCOORD0; }; struct PSInput { float4 PositionSS : SV_Position; float2 TexCoord : TEXCOORD0; }; VSOutput VS_Main(uint VertexID : SV_VertexID) { VSOutput output; output.TexCoord = float2((VertexID << 1) & 2, VertexID & 2); output.PositionPS = float4(output.TexCoord * float2(2.0, -2.0) + float2(-1.0, 1.0), 0.0f, 1.0f); return output; } float4 PS_Main(PSInput input) : COLOR0 { return Texture.Sample(TextureSampler, float3(input.TexCoord, (uint) input.PositionSS.x % 4)); } technique { pass { VertexShader = compile vs_4_0 VS_Main(); PixelShader = compile ps_4_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/VertexTextureEffect.fx ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. matrix WorldViewProj; float HeightMapSize; Texture2D HeightMapTexture; sampler2D HeightMapSampler = sampler_state { Texture = (HeightMapTexture); MinFilter = POINT; MagFilter = POINT; MipFilter = NONE; }; struct VSOutput { float4 PositionPS : SV_Position; float4 Color : COLOR0; }; VSOutput VS_Main(float2 xy : POSITION) { float height = tex2Dlod(HeightMapSampler, float4((xy + float2(0.5, 0.5)) / HeightMapSize, 0, 0)).r; float3 worldPosition = float3(xy.x, height, xy.y); VSOutput output; output.PositionPS = mul(float4(worldPosition, 1), WorldViewProj); output.Color = float4(xy.x / HeightMapSize, xy.y / HeightMapSize, 0, 1); return output; } float4 PS_Main(VSOutput input) : COLOR0 { return input.Color; } #define VS_PROFILE vs_3_0 #define PS_PROFILE ps_3_0 technique { pass { VertexShader = compile vs_3_0 VS_Main(); PixelShader = compile ps_3_0 PS_Main(); } } ================================================ FILE: Tests/Assets/Effects/XNA.csproj ================================================ C:\Program Files (x86)\MSBuild\Microsoft\XNA Game Studio\v4.0 v4.0 v4.0 Windows HiDef . Bevels EffectImporter EffectProcessor ColorFlip EffectImporter EffectProcessor HighContrast EffectImporter EffectProcessor NoEffect EffectImporter EffectProcessor OldSyntax_s0s1 EffectImporter EffectProcessor OldSyntax_t0t1 EffectImporter EffectProcessor OldSyntax_t1t0 EffectImporter EffectProcessor OldSyntax_s0s1t0t1 EffectImporter EffectProcessor OldSyntax_x EffectImporter EffectProcessor DeferredBasicEffect EffectImporter EffectProcessor BlackOut EffectImporter EffectProcessor Grayscale EffectImporter EffectProcessor Invert EffectImporter EffectProcessor RainbowH EffectImporter EffectProcessor CustomSpriteBatchEffect EffectImporter EffectProcessor Instancing EffectImporter EffectProcessor ================================================ FILE: Tests/Assets/Effects/XNA.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XNA", "XNA.csproj", "{9AF192DD-E63A-48C6-9E1B-6BED51EDD830}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9AF192DD-E63A-48C6-9E1B-6BED51EDD830}.Debug|x86.ActiveCfg = Debug|x86 {9AF192DD-E63A-48C6-9E1B-6BED51EDD830}.Debug|x86.Build.0 = Debug|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Tests/Assets/Fonts/JingJing.spritefont ================================================  Jing Jing 20 0 true ~ ================================================ FILE: Tests/Assets/Fonts/Lindsey.spritefont ================================================  Lindsey 24 4 true ~ ================================================ FILE: Tests/Assets/Fonts/Localized.spritefont ================================================  Arial 10 2 true Assets\Fonts\Strings.resx ================================================ FILE: Tests/Assets/Fonts/Motorwerk.spritefont ================================================  Motorwerk 26 0 true ~ ================================================ FILE: Tests/Assets/Fonts/QuartzMS.spritefont ================================================  Quartz MS 22 1 true ~ ================================================ FILE: Tests/Assets/Fonts/SegoeKeycaps.spritefont ================================================  Segoe Keycaps 10 2 true ~ ================================================ FILE: Tests/Assets/Fonts/Strings.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 blazing KNI! ================================================ FILE: Tests/Assets/Models/Dude/dude.fbx ================================================ ; FBX 6.1.0 project file ; Copyright (C) 1997-2006 Autodesk Inc. and/or its licensors. ; All rights reserved. ; ---------------------------------------------------- FBXHeaderExtension: { FBXHeaderVersion: 1003 FBXVersion: 6100 CreationTimeStamp: { Version: 1000 Year: 2007 Month: 2 Day: 6 Hour: 10 Minute: 56 Second: 19 Millisecond: 829 } Creator: "FBX SDK/FBX Plugins build 20061115" OtherFlags: { FlagPLE: 0 } } CreationTime: "2007-02-06 10:56:19:829" Creator: "FBX SDK/FBX Plugins build 20061115" ; Object definitions ;------------------------------------------------------------------ Definitions: { Version: 100 Count: 163 ObjectType: "Model" { Count: 67 } ObjectType: "Geometry" { Count: 1 } ObjectType: "Material" { Count: 5 } ObjectType: "Texture" { Count: 15 } ObjectType: "Video" { Count: 15 } ObjectType: "Deformer" { Count: 59 } ObjectType: "Pose" { Count: 1 } ObjectType: "GlobalSettings" { Count: 1 } } ; Object properties ;------------------------------------------------------------------ Objects: { Model: "Model::Camera_Switcher", "CameraSwitcher" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,0,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Camera Index", "Integer", "A+",100 } MultiLayer: 0 MultiTake: 1 Hidden: "True" Shading: W Culling: "CullingOff" Version: 101 Name: "Model::Camera Switcher" CameraId: 0 CameraName: 100 CameraIndexName: } Model: "Model::Root", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-89.9999999904458 Property: "PreferedAngleY", "double", "",-89.9999237060538 Property: "PreferedAngleZ", "double", "",-2.38855595932071e-009 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0.0375633835792542,37.4609870910645,2.230548620224 Property: "Lcl Rotation", "Lcl Rotation", "A+",-90,-89.9999237060547,-2.38855601963905e-009 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Pelvis", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-89.9999182889514 Property: "PreferedAngleY", "double", "",-90 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-0.77721095085144,1.13318836688995,0.656980156898499 Property: "Lcl Rotation", "Lcl Rotation", "A+",39.7229881286621,-93.1371078491211,42.0879821777344 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Spine", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-0.00023030408276738 Property: "PreferedAngleY", "double", "",-8.60479869898838e-005 Property: "PreferedAngleZ", "double", "",-5.4382885776673 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",3.78600597381592,-0.00359981134533882,5.10731069880421e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-0.00023030408192426,-8.60479849507101e-005,-5.43828868865967 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Spine1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.29875981134163e-006 Property: "PreferedAngleY", "double", "",1.85383892660238e-005 Property: "PreferedAngleZ", "double", "",-5.82215760016407 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.54331636428833,-0.00359953427687287,-1.3350340566376e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.96879076957703,-0.549681961536407,-5.84038019180298 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Spine2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.3371636415931e-006 Property: "PreferedAngleY", "double", "",-1.36830001373602e-005 Property: "PreferedAngleZ", "double", "",5.69767308131356 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.54404973983765,-0.00359953194856644,6.19496276499376e-008 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.77687907218933,1.67002356052399,5.42585277557373 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Spine3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",3.99052131175995 Property: "PreferedAngleY", "double", "",-1.53253420069814 Property: "PreferedAngleZ", "double", "",1.57506291940808 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.5439600944519,-0.00439895549789071,2.22052122467176e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.87556838989258,1.50368475914001,3.25706577301025 Property: "Lcl Scaling", "Lcl Scaling", "A+",1.00000011920929,1.00000011920929,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Neck", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.42603327943234e-005 Property: "PreferedAngleY", "double", "",-6.31973890607551e-005 Property: "PreferedAngleZ", "double", "",23.7369222277942 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",5.53625154495239,-0.00288246641866863,5.17475982064752e-008 Property: "Lcl Rotation", "Lcl Rotation", "A+",-6.63933753967285,1.94592773914337,28.7092266082764 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::Head", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.80670942133362e-006 Property: "PreferedAngleY", "double", "",2.70945409552123e-005 Property: "PreferedAngleZ", "double", "",-11.0992757151363 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",3.95389556884766,1.09085840449552e-006,9.73389049363504e-008 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.423987865448,-0.918177843093872,-18.9311122894287 Property: "Lcl Scaling", "Lcl Scaling", "A+",1.00000011920929,1.00000011920929,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_eye_joint1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",90.0000000000006,-87.3750626410931,-90.0000000000003 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.22069501876831,1.4060525894165,1.39484596252441 Property: "Lcl Rotation", "Lcl Rotation", "A+",3.26757836341858,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_eye_joint", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",90.0000000000006,-87.3750626410931,-90.0000000000003 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.29626369476318,1.33319282531738,-1.0660924911499 Property: "Lcl Rotation", "Lcl Rotation", "A+",3.26757836341858,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_eyeBall_joint2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-3.26721592629767 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.48259973526001,3.2479395866394,1.27459120750427 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.07939505577087,0,0.00536951329559088 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_eyeBall_joint", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",2.2266900494759 Property: "PreferedAngleY", "double", "",0.205056910357676 Property: "PreferedAngleZ", "double", "",0.964814224310023 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.57700967788696,3.10706281661987,-1.20767879486084 Property: "Lcl Rotation", "Lcl Rotation", "A+",0.292065471410751,0.0640802830457687,0.30150443315506 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Clavicle", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-0.000872600236291507 Property: "PreferedAngleY", "double", "",-80.3013114262034 Property: "PreferedAngleZ", "double", "",156.218311991058 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-0.307961851358414,-0.770594537258148,1.2232973575592 Property: "Lcl Rotation", "Lcl Rotation", "A+",-0.000872600241564214,-80.3013076782227,156.218307495117 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_UpperArm", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.39497982725312 Property: "PreferedAngleY", "double", "",36.3728195804967 Property: "PreferedAngleZ", "double", "",-4.78353474107178 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",6.71029043197632,0.844819128513336,0.0320546366274357 Property: "Lcl Rotation", "Lcl Rotation", "A+",9.80766296386719,60.3215827941895,41.7058372497559 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Forearm", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-3.76045443581529e-007 Property: "PreferedAngleY", "double", "",-3.86569406254761e-006 Property: "PreferedAngleZ", "double", "",-11.4591582981105 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",13.1421842575073,-1.00144292858317e-009,-3.49096410445782e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",33.6098442077637,17.2327537536621,-13.2919816970825 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Hand", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-74.7089589483892 Property: "PreferedAngleY", "double", "",10.2784385710031 Property: "PreferedAngleZ", "double", "",2.78414734150109 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",10.8255519866943,5.22714969974913e-007,9.90214175544679e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",-82.1016998291016,2.46786618232727,3.1264545917511 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Thumb1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",128.393568534218 Property: "PreferedAngleY", "double", "",47.8535790896764 Property: "PreferedAngleZ", "double", "",34.2815344649445 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.62510848045349,0.626630425453186,-1.67875993251801 Property: "Lcl Rotation", "Lcl Rotation", "A+",119.229835510254,30.9591827392578,19.9485893249512 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Thumb2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",2.8803815967782e-006 Property: "PreferedAngleY", "double", "",8.18135633512738e-007 Property: "PreferedAngleZ", "double", "",7.98321386697265 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.1404322385788,2.85936584987212e-006,-1.81425923528877e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.84072734757501e-006,-3.12636920796194e-008,17.8534507751465 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Thumb3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-6.67931703646524e-006 Property: "PreferedAngleY", "double", "",-4.97463347454225e-006 Property: "PreferedAngleZ", "double", "",-1.12265664696339 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.38246870040894,-7.17560169505305e-007,3.67166808246111e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-7.58698934077984e-006,-3.2017899229686e-006,8.96595764160156 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1.00000011920929 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Index1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",11.7792021726967 Property: "PreferedAngleY", "double", "",4.75915906885796 Property: "PreferedAngleZ", "double", "",1.51887475710425 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.34874391555786,0.0162533205002546,-1.56133377552032 Property: "Lcl Rotation", "Lcl Rotation", "A+",12.0142822265625,1.66459441184998,3.92592287063599 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Index2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.0101348006507e-006 Property: "PreferedAngleY", "double", "",-3.20933633655466e-006 Property: "PreferedAngleZ", "double", "",10.2647182459575 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.47369563579559,9.02053685081228e-008,5.82350480726745e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",7.5388690845557e-008,-3.20740196002589e-006,15.1926651000977 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Index3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-7.97497089828841e-007 Property: "PreferedAngleY", "double", "",7.67177259619785e-007 Property: "PreferedAngleZ", "double", "",-6.41338018883955e-008 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.06284534931183,1.39810509836025e-007,2.21882010009722e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-7.97497079929599e-007,7.67177255056595e-007,-6.41338004925274e-008 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Middle1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.09189139401105 Property: "PreferedAngleY", "double", "",-5.64785295314554 Property: "PreferedAngleZ", "double", "",-1.21502703506741 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.35998678207397,-0.000294537370791659,-0.366859555244446 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.96983647346497,1.10134339332581,14.2388792037964 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Middle2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.61159378098832e-006 Property: "PreferedAngleY", "double", "",4.23584160161545e-006 Property: "PreferedAngleZ", "double", "",5.06606087060092 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.52912437915802,7.80884704454365e-007,-3.64346448122888e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",7.24273192531655e-008,4.3645964069583e-006,16.150936126709 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Middle3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",3.09046105578622e-006 Property: "PreferedAngleY", "double", "",-2.70938072856318e-006 Property: "PreferedAngleZ", "double", "",3.80611905636409 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.52912795543671,7.2803447892511e-007,6.76120862408425e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",3.09046095026133e-006,-2.7093806238554e-006,3.80611896514893 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Ring1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-8.32501905474155 Property: "PreferedAngleY", "double", "",-15.1597389826992 Property: "PreferedAngleZ", "double", "",0.496591029077497 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.29501485824585,-0.0947425812482834,0.806466221809387 Property: "Lcl Rotation", "Lcl Rotation", "A+",-8.98741436004639,-1.27314984798431,19.2985076904297 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Ring2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",2.17552682211658e-006 Property: "PreferedAngleY", "double", "",1.24628739924695e-006 Property: "PreferedAngleZ", "double", "",12.8944029645258 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.40333545207977,1.16687704121432e-006,-2.30216258501059e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.20680271922902e-006,-3.11167731581463e-008,25.5660648345947 Property: "Lcl Scaling", "Lcl Scaling", "A+",1.00000011920929,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Ring3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",6.3264375956501e-007 Property: "PreferedAngleY", "double", "",-2.06977911624494e-007 Property: "PreferedAngleZ", "double", "",-5.6513995325555e-007 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.38826143741608,2.13072965493666e-007,-2.23952710598496e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,9.02113819122314 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Pinky1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-22.2106470375889 Property: "PreferedAngleY", "double", "",-21.9198516462821 Property: "PreferedAngleZ", "double", "",10.231888820637 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",3.97267842292786,0.223487868905067,1.74283754825592 Property: "Lcl Rotation", "Lcl Rotation", "A+",-20.6544322967529,-0.819446563720703,22.4568309783936 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Pinky2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",8.45328125392068e-008 Property: "PreferedAngleY", "double", "",3.2706221696275e-007 Property: "PreferedAngleZ", "double", "",6.57202492051798e-007 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.13179302215576,-2.16195689972665e-006,-4.03594668796359e-008 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Pinky3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-2.659446426981e-006 Property: "PreferedAngleY", "double", "",2.5977229425773e-006 Property: "PreferedAngleZ", "double", "",3.8703228612241 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0.858954668045044,6.74906289077626e-007,5.44045349215594e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",-2.65944640887028e-006,2.59772286881343e-006,3.87032294273376 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Clavicle", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-0.000867775408281365 Property: "PreferedAngleY", "double", "",80.301183832827 Property: "PreferedAngleZ", "double", "",156.216597244916 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-0.307961821556091,-0.770587801933289,-1.22330164909363 Property: "Lcl Rotation", "Lcl Rotation", "A+",-0.000867775408551097,80.3011856079102,156.216598510742 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_UpperArm", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.39497769642051 Property: "PreferedAngleY", "double", "",-36.3728176590539 Property: "PreferedAngleZ", "double", "",-4.78354389051472 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",6.88650560379028,-1.05879163742065,0.188849896192551 Property: "Lcl Rotation", "Lcl Rotation", "A+",42.592903137207,-47.3313064575195,-50.2629508972168 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1.00000011920929,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Forearm", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-6.59389332229243e-007 Property: "PreferedAngleY", "double", "",5.71812264881479e-006 Property: "PreferedAngleZ", "double", "",-11.4591561379041 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",13.1421842575073,9.03095610738092e-007,3.16086266138882e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-31.568567276001,-28.5609245300293,-47.7509155273438 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,0.99999988079071,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Hand", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",74.7089619068957 Property: "PreferedAngleY", "double", "",-10.2784422770857 Property: "PreferedAngleZ", "double", "",2.78414911050139 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",10.8255529403687,4.45484261035745e-007,-7.54761458665598e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",71.1884765625,10.1721467971802,-14.7731218338013 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Thumb1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-128.393572194366 Property: "PreferedAngleY", "double", "",-47.853581034479 Property: "PreferedAngleZ", "double", "",34.2815348083318 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.62510800361633,0.626631021499634,1.67876040935516 Property: "Lcl Rotation", "Lcl Rotation", "A+",-129.154998779297,-42.0322799682617,34.3628196716309 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Thumb2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",3.88347917343395e-006 Property: "PreferedAngleY", "double", "",-1.97078280763548e-006 Property: "PreferedAngleZ", "double", "",7.98321879290525 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.14043200016022,-1.38291397888679e-006,7.55724443024519e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",2.74146850642865e-006,-3.38374729835778e-006,32.0624504089355 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Thumb3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-7.46143268686555e-006 Property: "PreferedAngleY", "double", "",2.29402027731357e-006 Property: "PreferedAngleZ", "double", "",-1.12266273488597 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.38246870040894,3.77754112435014e-008,-3.12997121909575e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-7.38412791179144e-006,2.46886565946625e-006,2.01478266716003 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Index1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-11.7792032350658 Property: "PreferedAngleY", "double", "",-4.75915740397456 Property: "PreferedAngleZ", "double", "",1.51887260858435 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.34874391555786,0.0162522289901972,1.56133341789246 Property: "Lcl Rotation", "Lcl Rotation", "A+",-11.8456792831421,-2.26736164093018,0.35604390501976 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Index2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",3.27682771579138e-006 Property: "PreferedAngleY", "double", "",2.52179167280701e-006 Property: "PreferedAngleZ", "double", "",10.2647245704775 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.47369468212128,-3.31795149577374e-006,3.01659298429513e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",3.5970981571154e-006,2.03909712581662e-006,18.2982807159424 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Index3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",5.68755212474489e-006 Property: "PreferedAngleY", "double", "",2.55623109709803e-006 Property: "PreferedAngleZ", "double", "",1.61946557729347e-006 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.0628467798233,-7.71003385580116e-008,-3.79914951054161e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",6.12122676102445e-006,1.18875880161795e-006,13.211012840271 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Middle1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-1.09189337444105 Property: "PreferedAngleY", "double", "",5.64785242253659 Property: "PreferedAngleZ", "double", "",-1.21502939388877 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.35998678207397,-0.000293526856694371,0.366859257221222 Property: "Lcl Rotation", "Lcl Rotation", "A+",-1.12324810028076,-1.13205850124359,1.1130610704422 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Middle2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",3.91460541234184e-006 Property: "PreferedAngleY", "double", "",-2.17455420940842e-006 Property: "PreferedAngleZ", "double", "",5.06606374698867 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.52912306785584,-3.33934121954371e-006,2.41871944695049e-009 Property: "Lcl Rotation", "Lcl Rotation", "A+",3.29875911120325e-006,-3.02836747323454e-006,18.566930770874 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Middle3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-4.89582237110179e-006 Property: "PreferedAngleY", "double", "",-2.26155480670848e-006 Property: "PreferedAngleZ", "double", "",3.80612416233277 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.529128074646,-1.97209737962112e-006,-3.19399333648107e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",-5.25195036971127e-006,-6.89941970222208e-008,3.59999227523804 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Ring1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",8.32501542851292 Property: "PreferedAngleY", "double", "",15.1597406151334 Property: "PreferedAngleZ", "double", "",0.496593364447639 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4.29501342773438,-0.0947411805391312,-0.806465566158295 Property: "Lcl Rotation", "Lcl Rotation", "A+",9.92037773132324,6.50482177734375,12.5329875946045 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Ring2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",4.74502253458847e-007 Property: "PreferedAngleY", "double", "",-1.57078862698148e-006 Property: "PreferedAngleZ", "double", "",12.8944025426958 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.40333533287048,3.56238683707488e-006,8.68510085183516e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",-8.52487929137169e-008,-1.5643117876607e-006,27.2881908416748 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Ring3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.74365380799692e-006 Property: "PreferedAngleY", "double", "",4.92222297413111e-007 Property: "PreferedAngleZ", "double", "",-1.86127542097727e-006 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.38826143741608,-2.60250772043946e-007,1.2035725660553e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.73695445937483e-006,-8.55293436075044e-009,13.044979095459 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Pinky1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",22.2106452758657 Property: "PreferedAngleY", "double", "",21.9198533236593 Property: "PreferedAngleZ", "double", "",10.2318915977067 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",3.97267866134644,0.223486974835396,-1.74283790588379 Property: "Lcl Rotation", "Lcl Rotation", "A+",24.3684997558594,5.07718563079834,23.8567218780518 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Pinky2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.3099773394975e-006 Property: "PreferedAngleY", "double", "",-1.5017060650038e-007 Property: "PreferedAngleZ", "double", "",3.9733668460521e-006 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",1.13179266452789,-4.5721540118393e-006,-2.5465004682701e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.28670376398077e-006,2.94697493075091e-008,21.8681793212891 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Pinky3", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",4.46392401207693e-007 Property: "PreferedAngleY", "double", "",1.49685980438668e-008 Property: "PreferedAngleZ", "double", "",3.87032088256291 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0.858952879905701,-2.68376516032731e-006,3.09315595359294e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,5.75897359848022 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Thigh1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",169.508247139113 Property: "PreferedAngleY", "double", "",-12.1801615973901 Property: "PreferedAngleZ", "double", "",-178.43746737346 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-3.76930594444275,-0.355237752199173,3.4951446056366 Property: "Lcl Rotation", "Lcl Rotation", "A+",-14.2042036056519,-164.144622802734,-29.484790802002 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Knee2", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",6.26299260320172e-007 Property: "PreferedAngleY", "double", "",-6.93163629204283e-006 Property: "PreferedAngleZ", "double", "",-19.1493676500597 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",18.257194519043,-6.12689859735838e-007,1.20223648991669e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",9.30474472045898,-0.54519647359848,-24.0315208435059 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Ankle1", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",-2.97471392034351 Property: "PreferedAngleY", "double", "",-11.0525243817621 Property: "PreferedAngleZ", "double", "",9.40468519858122 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",15.4280042648315,-1.32429221366692e-007,3.40772317031224e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",-4.13260126113892,-1.2486013174057,7.7121057510376 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,0.999999940395355,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::L_Ball", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",5.08524009745423e-006 Property: "PreferedAngleY", "double", "",-3.36317562607059e-006 Property: "PreferedAngleZ", "double", "",104.594670846427 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",5.25022077560425,6.27384853363037,-7.13063798229996e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",5.08523999087629e-006,-3.36317566507205e-006,104.594673156738 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1.00000011920929,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Thigh", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",10.4914172002596 Property: "PreferedAngleY", "double", "",167.819835977802 Property: "PreferedAngleZ", "double", "",1.56246131877261 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-3.76930618286133,-0.355218410491943,-3.49514603614807 Property: "Lcl Rotation", "Lcl Rotation", "A+",8.09784317016602,184.387466430664,0.917054355144501 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Knee", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",1.31859940773703e-007 Property: "PreferedAngleY", "double", "",-1.18581000243473e-006 Property: "PreferedAngleZ", "double", "",-19.1493656223787 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",18.257194519043,-1.20693221106194e-006,-1.28146643874061e-006 Property: "Lcl Rotation", "Lcl Rotation", "A+",-1.3035603761673,-4.911376953125,-31.2710037231445 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Ankle", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",2.97472568209434 Property: "PreferedAngleY", "double", "",11.0525220726222 Property: "PreferedAngleZ", "double", "",9.40468503315529 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",15.4280042648315,1.89655921190024e-007,5.16880504619621e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",4.14072751998901,1.20476734638214,25.1047039031982 Property: "Lcl Scaling", "Lcl Scaling", "A+",0.999999940395355,0.999999940395355,0.999999940395355 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::R_Ball", "LimbNode" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",2.16954839938349e-006 Property: "PreferedAngleY", "double", "",9.48114901020568e-008 Property: "PreferedAngleZ", "double", "",104.594670599531 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",5.25022077560425,6.27385330200195,-4.15015392718487e-007 Property: "Lcl Rotation", "Lcl Rotation", "A+",1.04748585272318e-006,-3.46426012876044e-011,104.594665527344 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1.00000011920929,1 Property: "Visibility", "Visibility", "A+",1 Property: "liw", "Bool", "A+U",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Size", "double", "",100 Property: "LimbLength", "double", "",1 } MultiLayer: 0 MultiTake: 1 Shading: Y Culling: "CullingOff" TypeFlags: "Skeleton" } Model: "Model::him", "Mesh" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",1 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",1 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",0,0,0 Property: "ScalingMax", "Vector3D", "",0,0,0 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",1 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,0,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",1 Property: "Color", "Color", "A",0.8,0.8,0.8 } MultiLayer: 0 MultiTake: 1 Shading: T Culling: "CullingOff" Vertices: 0.623793363571167,65.1128845214844,5.13387632369995,0.0422774255275726,64.9956970214844,5.01735305786133,-0.0264466553926468 ,64.9082183837891,5.00032997131348,-0.179756164550781,64.7790222167969,4.91852188110352,0.325537592172623,65.1139144897461 ,5.11669683456421,0.466457337141037,65.1115264892578,5.12619018554688,-0.251792371273041,64.6404418945313,4.83475875854492 ,1.17611312866211,64.9081497192383,4.99786615371704,1.229975938797,64.8112030029297,4.97873592376709,1.35875833034515 ,64.6602325439453,4.89207983016968,0.917911291122437,65.0681762695313,5.1065149307251,0.781586170196533,65.1051177978516 ,5.03205871582031,1.09732794761658,65.0128784179688,5.03322553634644,0.137362271547318,65.0869979858398,5.04972410202026 ,0.0620876252651215,64.8320541381836,4.96379709243774,0.140958309173584,64.8800735473633,4.98378229141235,-0.0571245849132538 ,64.7189102172852,4.92748022079468,0.228947132825851,64.8898010253906,5.00581216812134,0.316976398229599,64.8996047973633 ,5.02985382080078,0.452559441328049,64.906867980957,5.01395797729492,0.600856900215149,64.8984298706055,5.04465341567993 ,1.12346565723419,64.7505950927734,4.94624662399292,1.05264699459076,64.8100967407227,4.96849727630615,0.966790914535522 ,64.8332214355469,4.99361562728882,0.880976319313049,64.8564453125,5.02073812484741,0.747775435447693,64.8827056884766 ,5.01342105865479,0.0452732741832733,64.6292190551758,4.89672803878784,0.122229993343353,64.6522216796875,4.91772842407227 ,0.209659367799759,64.6546325683594,4.94005537033081,0.297129482030869,64.6571273803711,4.9643931388855,0.432055622339249 ,64.6558151245117,4.94884538650513,0.58029317855835,64.6465911865234,4.97957277297974,1.10663449764252,64.5475311279297 ,4.87918663024902,1.03390467166901,64.5820541381836,4.9024510383606,1.40576934814453,64.512451171875,4.80627107620239 ,0.947489738464355,64.5978851318359,4.92786550521851,0.861116051673889,64.6138000488281,4.9552845954895,0.727327466011047 ,64.6323776245117,4.94827938079834,1.01195073127747,64.3154525756836,4.82282686233521,1.45188724994659,64.3472137451172 ,4.66289949417114,0.925535917282104,64.3312759399414,4.84824132919312,0.839162230491638,64.3471908569336,4.87565994262695 ,0.705373644828796,64.3657684326172,4.86865520477295,-0.177379310131073,64.5866241455078,4.86361455917358,0.0233194231987 ,64.3626098632813,4.81710386276245,0.100276112556458,64.385612487793,4.83810424804688,-0.327593684196472,64.4846115112305 ,4.69348287582397,0.187705457210541,64.3880233764648,4.86043071746826,0.275175601243973,64.3905181884766,4.88476848602295 ,0.410101801156998,64.3892059326172,4.86922121047974,0.558339357376099,64.3799819946289,4.89994859695435,1.08468067646027 ,64.2809219360352,4.79956245422363,1.06065464019775,70.8534545898438,4.76268863677979,1.13732481002808,72.418815612793 ,2.19126605987549,1.13400912284851,72.1023101806641,3.42027258872986,1.12417089939117,71.8792266845703,3.85004806518555 ,0.62932276725769,65.1465225219727,5.30447387695313,0.625903844833374,65.0976638793945,5.32506656646729,0.615944027900696 ,64.9603424072266,5.36244630813599,0.610984563827515,64.8877182006836,5.40017414093018,0.630598306655884,65.1751098632813 ,5.25026416778564,0.629361748695374,65.1725463867188,5.18983459472656,0.512664914131165,63.6718902587891,5.14163732528687 ,0.529050230979919,63.8910675048828,5.11033630371094,0.541939496994019,64.0722885131836,5.04615640640259,0.43946561217308 ,62.9340286254883,4.19746780395508,0.485344499349594,63.3730735778809,4.89445734024048,0.462659686803818,63.1349334716797 ,4.64441919326782,0.555222749710083,64.2537155151367,5.00397300720215,0.880172610282898,68.3598251342773,5.46416473388672 ,0.858006715774536,68.0974426269531,5.35318899154663,0.849440932273865,67.9892425537109,5.34090089797974,0.904710054397583 ,68.6925506591797,5.39708185195923,0.709403038024902,66.0338897705078,5.97735166549683,0.705547690391541,65.9931945800781 ,5.93586921691895,0.743143796920776,66.4381942749023,6.1241774559021,0.753129124641418,66.5676574707031,6.12357091903687 ,0.760891556739807,66.6766815185547,6.08543300628662,0.733507633209229,66.3163452148438,6.11094665527344,0.689875245094299 ,65.8638381958008,5.60512256622314,0.624589085578918,65.1533660888672,4.99830102920532,0.62416410446167,65.1353530883789 ,5.05449390411377,0.624347448348999,65.1218795776367,5.12571716308594,0.638351678848267,65.2610092163086,5.3154878616333 ,0.634988903999329,65.2251205444336,5.28104448318481,0.631260514259338,65.1875839233398,5.23275852203369,0.798808693885803 ,67.2536087036133,5.69974708557129,0.791501402854919,67.1474075317383,5.75169134140015,0.781278014183044,66.9964904785156 ,5.83483648300171,0.590098738670349,64.6425552368164,5.28635549545288,0.601859569549561,64.7733993530273,5.38283586502075 ,0.571767449378967,64.4464263916016,5.10084295272827,0.664491891860962,65.6135482788086,5.25263929367065,0.646058797836304 ,65.3668518066406,5.2884316444397,0.308831185102463,61.5862121582031,2.65170550346375,0.278255134820938,61.2063217163086 ,2.57932591438293,0.24938228726387,60.845588684082,2.51997470855713,0.433875113725662,62.9745635986328,3.69008111953735 ,0.444906324148178,63.2859725952148,2.93291902542114,0.433557480573654,63.1402702331543,2.927166223526,0.810639500617981 ,67.4434204101563,5.53539562225342,0.770475149154663,66.8228073120117,5.98658132553101,0.680776953697205,65.8014297485352 ,5.35610294342041,0.67123281955719,65.692626953125,5.28961133956909,1.0142970085144,70.1763305664063,5.10739469528198 ,0.984624624252319,69.7768020629883,5.1758246421814,0.445801049470901,63.2715072631836,3.04997110366821,0.438935846090317 ,63.0870819091797,3.47903776168823,0.373842626810074,62.3733596801758,2.89807319641113,0.341937512159348,61.9855003356934 ,2.78416061401367,0.400814205408096,62.7189445495605,2.91482043266296,1.0299117565155,70.3926239013672,5.04423379898071 ,0.634009838104248,65.2811813354492,4.97222805023193,0.627241492271423,65.1924057006836,4.97727298736572,0.44109907746315 ,63.1557693481445,3.29633045196533,0.626932263374329,65.1415252685547,5.18783950805664,0.71958339214325,66.147705078125 ,6.05837154388428,0.449921995401382,63.0109786987305,4.46015787124634,0.432886034250259,62.927562713623,3.8436872959137 ,0.433378845453262,62.9117012023926,3.9436240196228,0.837226748466492,67.8408203125,5.29701995849609,0.823479652404785 ,67.6511611938477,5.34922075271606,0.174876749515533,59.8354759216309,2.7228786945343,0.192694664001465,60.1533355712891 ,2.33161687850952,0.155011057853699,59.5214004516602,2.97793006896973,1.0879967212677,71.2529602050781,4.55878782272339 ,1.11250460147858,71.6562576293945,4.17292976379395,0.887781143188477,68.4619064331055,5.44826936721802,-2.06441426277161 ,63.4675140380859,-2.31350040435791,-1.87283957004547,63.8040542602539,-2.42601108551025,-2.28081321716309,63.8607978820801 ,-1.77618479728699,-2.41751766204834,63.5461616516113,-1.80403280258179,-1.77159559726715,64.1679763793945,-2.40934991836548 ,-2.17487287521362,64.1741485595703,-1.71712112426758,-2.34561896324158,64.0813293457031,-1.03868758678436,-2.43121266365051 ,63.8074989318848,-1.12634778022766,-2.62995195388794,63.5505790710449,-1.26813459396362,-2.32942581176758,63.1775054931641 ,-2.33953905105591,-2.68021106719971,63.3241882324219,-1.86289167404175,-2.83212876319885,63.293758392334,-1.41155290603638 ,0.339464277029037,63.2583236694336,-3.07789540290833,-0.0916713774204254,63.7588081359863,-2.953280210495,-0.233077645301819 ,63.389591217041,-2.97743105888367,-0.396398603916168,63.0210418701172,-2.96684408187866,0.161560475826263,62.8935432434082 ,-3.11426734924316,-1.12091016769409,63.6399192810059,-2.79150557518005,-1.32885909080505,63.2648010253906,-2.76139807701111 ,-0.939272999763489,64.0175476074219,-2.7674343585968,0.308333724737167,62.861701965332,-3.10737586021423,-2.79351949691772 ,60.0759315490723,2.50330710411072,-3.11513829231262,60.3012847900391,2.13080883026123,-1.4380030632019,66.2845840454102 ,-1.5249457359314,-1.68420386314392,65.8793869018555,-1.51027750968933,-1.19783592224121,65.8847274780273,-1.72575259208679 ,-0.887153267860413,66.2650299072266,-1.72689175605774,-1.93221962451935,65.4429626464844,-1.45040309429169,-1.56653869152069 ,65.4700698852539,-1.8891019821167,-0.951906085014343,65.4582290649414,-2.19403076171875,-0.684996604919434,65.8686676025391 ,-2.06346368789673,-0.501625418663025,66.2598571777344,-1.95176911354065,-0.157869458198547,65.8251113891602,-2.2592875957489 ,0.00298556685447693,66.1865081787109,-2.01925182342529,-0.445116281509399,65.395263671875,-2.4208869934082,0.129518032073975 ,65.4026107788086,-2.51539325714111,0.24567648768425,65.8147354125977,-2.35661506652832,0.578288197517395,66.160285949707 ,-2.21924948692322,-0.0176074653863907,64.1389007568359,-2.8841404914856,0.430291742086411,64.3759689331055,-2.81420874595642 ,0.00262081623077393,64.4665832519531,-2.74427199363709,-2.74265122413635,63.011302947998,-0.449708819389343,-2.96583390235901 ,62.7592010498047,-0.600131273269653,-2.93298935890198,63.1129875183105,-0.97790539264679,-2.72992539405823,63.3584899902344 ,-0.826003909111023,-2.22467613220215,63.7582168579102,-0.313466429710388,-2.49392008781433,63.3240051269531,-0.347863137722015 ,-2.49500870704651,63.6343879699707,-0.709853410720825,-2.28075981140137,63.9004173278809,-0.64413845539093,-2.03079032897949 ,66.0994262695313,-0.543434143066406,-2.02758860588074,65.6578598022461,-0.326893508434296,-1.99442374706268,65.7801361083984 ,-0.957743167877197,-1.86024069786072,66.2031021118164,-1.13348805904388,-2.09660172462463,65.1525650024414,-0.313202559947968 ,-2.14117383956909,65.3427810668945,-0.786990880966187,-1.98699486255646,66.6393585205078,-0.585755109786987,-1.73072242736816 ,66.7498626708984,-1.14894211292267,-1.34470677375793,66.7577743530273,-1.53486847877502,-1.89628708362579,69.1311111450195 ,2.62288928031921,0.461941629648209,71.0155410766602,4.6341404914856,0.769903659820557,70.9342880249023,4.7560338973999 ,0.393971890211105,71.3228454589844,4.3484320640564,0.694467186927795,71.2877655029297,4.4684100151062,-0.172988802194595 ,71.1251373291016,4.25246858596802,0.152568727731705,71.0860900878906,4.45920085906982,-0.184596970677376,71.4623413085938 ,3.89338612556458,0.116147547960281,71.3699722290039,4.17397785186768,0.357630580663681,71.639892578125,3.95606780052185 ,0.0574007332324982,71.5874862670898,3.90052580833435,-1.18433821201324,71.1008758544922,3.03325295448303,-1.36386454105377 ,70.8319702148438,2.79870414733887,-1.13077282905579,70.9053573608398,3.3064124584198,-1.276251912117,70.6632461547852 ,3.12109637260437,-1.31896269321442,70.2930374145508,3.04443264007568,-1.53664886951447,70.4180374145508,2.49737644195557 ,-0.924969553947449,71.0770645141602,3.52221941947937,-0.963448882102966,71.315803527832,3.27536654472351,-0.7299964427948 ,71.4047164916992,3.49164271354675,-0.738705515861511,71.1481018066406,3.73645663261414,-1.66465246677399,69.2676544189453 ,3.08997631072998,0.684095621109009,71.6607284545898,4.06998348236084,-2.09345149993896,68.400390625,1.93266224861145 ,-2.09846615791321,69.1359786987305,1.85471093654633,-1.77208375930786,68.6125183105469,2.84838652610779,-0.425840139389038 ,67.4173126220703,-2.12641859054565,-0.444946348667145,66.9872665405273,-2.04204487800598,0.0742237567901611,66.9431304931641 ,-2.1808226108551,0.0994564592838287,67.3768844604492,-2.27369236946106,-0.465237021446228,66.660774230957,-1.98393750190735 ,0.0518084764480591,66.6103744506836,-2.13401126861572,0.606598854064941,66.5368499755859,-2.26371574401855,0.63420832157135 ,66.8952255249023,-2.26730966567993,0.665441274642944,67.3235931396484,-2.37448167800903,-2.18526387214661,68.4904861450195 ,1.25674867630005,-2.20559358596802,69.1680679321289,1.06190967559814,-1.86733984947205,70.4976425170898,0.793606281280518 ,-1.86910903453827,70.4748077392578,0.210348963737488,-1.65718531608582,71.1225891113281,0.216397732496262,-1.72112834453583 ,71.1484146118164,0.786884486675262,-1.71093416213989,70.4660339355469,-0.419810354709625,-1.55366683006287,71.0983810424805 ,-0.377163052558899,-1.2832944393158,71.517448425293,-0.310984015464783,-1.39519059658051,71.5979537963867,0.232911288738251 ,-1.44035971164703,71.6525344848633,0.801234483718872,-1.27187788486481,71.34326171875,2.61364054679871,-1.01177322864532 ,71.6174545288086,2.77098083496094,-1.38939499855042,71.5504455566406,1.75797700881958,-1.08889937400818,71.8652496337891 ,1.81313228607178,-0.74492084980011,72.0827941894531,1.89287924766541,-0.679477095603943,71.8006057739258,3.0528781414032 ,-0.384253442287445,71.6459732055664,3.53229069709778,-0.736573576927185,71.5655136108398,3.30104160308838,-1.20245289802551 ,71.2317047119141,2.86649751663208,-0.984832644462585,71.4752960205078,3.08777546882629,-1.61843776702881,71.0413589477539 ,1.70116806030273,-1.44768965244293,70.9303665161133,2.50166463851929,-1.33164775371552,71.0731735229492,2.69956064224243 ,-1.78161239624023,70.4285507202148,1.67380654811859,-1.65697824954987,69.7183303833008,2.4452691078186,-1.93330693244934 ,69.7481460571289,1.73944473266602,-2.04953861236572,69.7643280029297,0.870465576648712,-2.0847156047821,69.6122741699219 ,0.240052491426468,-2.21328973770142,68.8860549926758,0.352373659610748,-2.15788102149963,69.0321273803711,-0.0473507642745972 ,-2.01036024093628,68.7924041748047,-0.596657037734985,-1.86665296554565,69.6412582397461,-0.480478763580322,-1.08253812789917 ,70.3630447387695,-1.48609256744385,-1.4549126625061,70.4271240234375,-1.00956308841705,-1.58159184455872,69.6048049926758 ,-1.11043727397919,-1.19795942306519,69.5328140258789,-1.60922169685364,-1.65997362136841,68.7545547485352,-1.16319763660431 ,-1.27194666862488,68.6893005371094,-1.65528035163879,0.884846210479736,70.1233215332031,-2.18640089035034,0.329216808080673 ,70.1774215698242,-2.13138198852539,0.246300905942917,69.3600082397461,-2.32711124420166,0.818426251411438,69.3075408935547 ,-2.38610339164734,-0.190193891525269,70.240478515625,-1.9975426197052,-0.287689328193665,69.4182357788086,-2.17903733253479 ,-0.364626199007034,68.5993804931641,-2.25770878791809,0.175294786691666,68.5530624389648,-2.41484355926514,0.754991292953491 ,68.5060806274414,-2.47641658782959,0.411148875951767,70.8600692749023,-1.84431052207947,-0.0863446593284607,70.9077682495117 ,-1.72282290458679,0.94322395324707,70.8149337768555,-1.89682793617249,0.993964195251465,71.3831176757813,-1.49712753295898 ,0.487515836954117,71.4137268066406,-1.4516818523407,0.0114119648933411,71.4324493408203,-1.35220336914063,0.171863883733749 ,72.4325866699219,0.866378843784332,0.166664987802505,72.3487548828125,0.250142991542816,0.631345391273499,72.4095993041992 ,0.257073789834976,0.644669651985168,72.5073013305664,0.888128995895386,0.144611001014709,72.1218948364258,-0.340507626533508 ,0.603707551956177,72.1698837280273,-0.353997588157654,1.07387113571167,72.1656646728516,-0.363423585891724,1.10328590869904 ,72.4085540771484,0.256878972053528,1.12456631660461,72.5422897338867,0.894255757331848,-0.0688050091266632,71.7613525390625 ,3.57035827636719,-0.198761284351349,71.9391479492188,3.1220076084137,0.246166497468948,72.0193099975586,3.20735216140747 ,0.300596982240677,71.8274002075195,3.6315336227417,0.618768572807312,72.3814544677734,2.14557886123657,0.189862847328186 ,72.3270111083984,2.08805894851685,0.656815767288208,72.0691986083984,3.30047488212585,-1.24922847747803,67.0721435546875 ,-1.47265577316284,-1.64732575416565,67.085205078125,-1.07984530925751,-1.28425788879395,67.4800109863281,-1.55364918708801 ,-1.65446174144745,67.5020599365234,-1.08178448677063,-2.00189471244812,67.5220642089844,-0.539918541908264,-2.03291440010071 ,67.0123901367188,-0.627920508384705,-0.739609897136688,72.1798858642578,0.821248114109039,-1.10824263095856,71.9677429199219 ,0.809981882572174,-1.07681393623352,71.8874206542969,0.241177350282669,-0.721254944801331,72.0790863037109,0.241950035095215 ,-1.02308547496796,71.7721328735352,-0.268278181552887,-0.707126379013062,71.9153366088867,-0.297060012817383,0.666726231575012 ,71.8662490844727,3.73314380645752,-1.42754173278809,69.7128295898438,2.99285793304443,-0.794471621513367,71.4553451538086 ,-1.0209869146347,-1.09145736694336,71.4641647338867,-0.734061598777771,-1.28578495979309,71.0498123168945,-0.884373784065247 ,-0.933363318443298,71.0004043579102,-1.28397178649902,-0.954343557357788,71.6858749389648,-0.602074861526489,-0.709899842739105 ,71.7383422851563,-0.715290188789368,0.0906289517879486,71.8268127441406,-0.883029103279114,0.553733825683594,71.8441314697266 ,-0.939245700836182,1.03747177124023,71.8286056518555,-0.967041611671448,-0.291723728179932,72.2477798461914,2.00242471694946 ,-0.301306486129761,72.3543243408203,0.842659592628479,-0.295482009649277,72.2357177734375,0.245020747184753,-0.305113077163696 ,72.0344848632813,-0.321331322193146,-0.346078991889954,71.7884368896484,-0.808658123016357,-0.421383619308472,71.4455490112305 ,-1.21783924102783,-0.657468199729919,70.3004379272461,-1.796630859375,-0.534033060073853,70.9538116455078,-1.54974794387817 ,-0.76512598991394,69.4727096557617,-1.95073318481445,-0.843601584434509,68.6411819458008,-2.01231694221497,-0.889499425888062 ,67.033317565918,-1.82536506652832,-0.884638786315918,67.4514007568359,-1.89685273170471,-0.879774689674377,66.7174377441406 ,-1.74827265739441,-0.40679395198822,67.9422988891602,-2.22397255897522,0.129094123840332,67.9017868041992,-2.3778989315033 ,0.705568194389343,67.8573837280273,-2.43779754638672,-1.29681801795959,68.0120544433594,-1.62619566917419,-0.879484057426453 ,67.9764556884766,-1.98163914680481,-1.66664028167725,68.0569229125977,-1.13294267654419,-1.94688200950623,68.1262588500977 ,-0.687186002731323,-2.22190642356873,68.6718826293945,0.0814464390277863,-2.18926191329956,68.394660949707,-0.173482000827789 ,-2.06173467636108,66.306396484375,0.270789951086044,-2.03981709480286,65.7306137084961,0.327027827501297,-2.06686520576477 ,67.1133804321289,0.350221276283264,-2.01718997955322,66.6979598999023,0.292773723602295,-0.620941758155823,62.5681838989258 ,-3.13921141624451,-1.52735507488251,62.8993644714355,-2.7649040222168,-0.0263519883155823,62.3843193054199,-3.27164506912231 ,0.266734391450882,62.367244720459,-3.30643272399902,-1.37798225879669,68.0458755493164,4.30455589294434,-1.23890924453735 ,67.8901596069336,4.39161729812622,-1.43552124500275,68.0907287597656,4.22251605987549,-1.28076350688934,67.986457824707 ,4.39524173736572,0.377546519041061,66.1876831054688,5.38781976699829,0.33715084195137,66.2498168945313,5.33403825759888 ,0.493069380521774,66.3186111450195,5.56546497344971,0.470149666070938,66.2436141967773,5.58433151245117,0.451400071382523 ,66.16796875,5.62085103988647,0.535398364067078,66.2377853393555,5.81744813919067,0.593458414077759,66.2331314086914 ,5.81274890899658,0.445247083902359,66.1955871582031,5.84110355377197,0.493781477212906,66.1784286499023,5.84145402908325 ,0.0803782045841217,66.1922836303711,5.48261594772339,0.106357663869858,66.206787109375,5.45738172531128,0.0774464905261993 ,66.1107559204102,5.32893705368042,0.0359638035297394,66.0874252319336,5.3862099647522,0.274233907461166,66.2866439819336 ,5.69237518310547,0.244374066591263,66.2979049682617,5.6972279548645,0.32149413228035,66.1605453491211,5.30414915084839 ,0.156754016876221,66.2658386230469,5.50283670425415,0.133003234863281,66.2512588500977,5.53825330734253,0.545724391937256 ,66.2574234008789,5.68059349060059,0.555025815963745,66.2231369018555,5.74878978729248,0.565698027610779,66.312385559082 ,5.67399978637695,0.387897282838821,66.275505065918,5.78750658035278,0.0725316107273102,68.0971984863281,4.81859064102173 ,0.186211168766022,67.9832305908203,4.79445362091064,0.0166653990745544,68.0633850097656,4.81086206436157,0.267844706773758 ,67.927001953125,4.79169082641602,0.178097784519196,67.8924331665039,4.82363080978394,0.105673998594284,67.9410552978516 ,4.81362056732178,-0.0145852118730545,68.1976623535156,4.87628984451294,-0.0746597349643707,68.1509475708008,4.83993434906006 ,-0.173541575670242,68.2407302856445,4.87500667572021,-0.127273947000504,68.3139801025391,4.9223108291626,-0.300742149353027 ,68.2938079833984,4.91189670562744,-0.443478852510452,68.3190078735352,4.9248104095459,-0.432409286499023,68.3772811889648 ,4.93697929382324,-0.277704924345016,68.3658905029297,4.93379592895508,0.210827171802521,67.8577880859375,4.80922031402588 ,0.16913914680481,67.867546081543,4.71750736236572,0.158061116933823,67.8893356323242,4.74556255340576,0.203786790370941 ,67.8361282348633,4.79896926879883,-1.1378835439682,67.9149475097656,4.43347692489624,0.0872756242752075,67.9351577758789 ,4.71599531173706,-0.00252395868301392,68.0402450561523,4.70042610168457,-0.0927540212869644,68.1412048339844,4.73561239242554 ,-0.0440879017114639,68.0379867553711,4.56870937347412,-1.09579980373383,67.8964080810547,4.44191598892212,-0.501146733760834 ,67.7124328613281,4.86643886566162,-0.306639730930328,67.7238540649414,4.85340309143066,-0.131456553936005,67.8459854125977 ,4.80462980270386,-0.219726994633675,67.845085144043,4.84498119354248,-0.0507929772138596,67.7854232788086,4.78806924819946 ,-0.183810830116272,67.7487487792969,4.83533430099487,-0.294530749320984,67.8366775512695,4.8951997756958,-0.000747025012969971 ,67.6982879638672,4.80181217193604,0.0821308493614197,67.8313140869141,4.79887533187866,0.170370429754257,67.7679824829102 ,4.79952669143677,0.257696539163589,67.78662109375,4.7972469329834,0.139520168304443,67.8359069824219,4.80803346633911 ,0.313444048166275,67.7976684570313,4.79915237426758,-0.940548300743103,67.803108215332,4.6640248298645,-1.05381369590759 ,67.7698516845703,4.51773548126221,-0.00845268368721008,67.8782958984375,4.77604341506958,0.0435402989387512,67.8875503540039 ,4.78089952468872,0.089642345905304,67.8812484741211,4.75279998779297,-0.296882510185242,67.5243301391602,4.80978488922119 ,-0.518619477748871,67.4850387573242,4.78477621078491,-0.707731544971466,67.7342910766602,4.82214641571045,-1.04207479953766 ,67.6393814086914,4.56365013122559,-0.153744623064995,67.6036682128906,4.81377696990967,0.103864789009094,67.4183578491211 ,4.80526781082153,-0.0238534063100815,67.3293762207031,4.79401826858521,-0.214757233858109,67.2739562988281,4.78187656402588 ,-0.880071043968201,67.9217834472656,4.74224853515625,-0.680235683917999,67.8459320068359,4.87497568130493,-0.492535322904587 ,67.8295288085938,4.89924955368042,0.221289843320847,67.7520599365234,4.79656267166138,0.282921820878983,67.7299575805664 ,4.8082160949707,-1.01416158676147,67.8835830688477,4.59305000305176,-1.03361797332764,67.9288711547852,4.50020408630371 ,-0.98690927028656,67.9790649414063,4.58982563018799,-0.954205393791199,67.9623489379883,4.6548285484314,-0.367387235164642 ,64.9672012329102,4.65457773208618,-0.376518785953522,64.9429931640625,4.59082984924316,-0.364164084196091,64.9272155761719 ,4.62442445755005,-0.387651979923248,64.9273834228516,4.52254867553711,-0.372781217098236,64.9137496948242,4.57795190811157 ,-0.325812309980392,64.9677581787109,4.66768264770508,-0.2934929728508,65.0070037841797,4.77406311035156,0.0896200835704803 ,65.1711578369141,5.16201257705688,0.0752068161964417,65.1293258666992,5.18869733810425,0.306521564722061,65.1608276367188 ,5.26091337203979,0.303164333105087,65.1222839355469,5.29255628585815,-0.403771758079529,64.9382934570313,4.73152828216553 ,-0.426909625530243,64.9066925048828,4.77113580703735,-0.482801020145416,64.9239120483398,4.67571449279785,-0.315706521272659 ,64.9495010375977,4.91079902648926,-0.352145075798035,64.8978958129883,4.89442443847656,-0.430014610290527,64.8176879882813 ,4.84076070785522,-0.612703680992126,64.8882446289063,4.68541955947876,0.140789210796356,65.1614990234375,5.06094169616699 ,0.117839068174362,65.1946105957031,5.10699844360352,0.0427363812923431,65.1752243041992,5.04936122894287,0.0711185038089752 ,65.1374664306641,5.01369571685791,-0.0689185112714767,65.1361846923828,5.03231048583984,-0.0299543887376785,65.1474304199219 ,4.98878335952759,-0.0116341114044189,65.0947113037109,4.97372961044312,-0.0863916128873825,65.1224822998047,4.91171884536743 ,-0.127361476421356,65.0179977416992,5.08845901489258,-0.254649817943573,65.0161056518555,4.95347929000854,-0.0846455544233322 ,65.1145553588867,5.05634784698486,0.277950078248978,64.9772415161133,5.3225359916687,0.228391140699387,64.8919067382813 ,5.34354543685913,0.0256715714931488,65.0050430297852,5.23427677154541,0.318023234605789,65.1712036132813,5.14985322952271 ,0.311097830533981,65.187873840332,5.2046685218811,0.455786734819412,65.1104125976563,5.31833410263062,0.458984225988388 ,65.1497344970703,5.28762722015381,-0.198425605893135,65.0952301025391,4.92032051086426,-0.166533440351486,65.0903778076172 ,4.88122797012329,0.442113250494003,64.9704818725586,5.35210371017456,0.426556438207626,64.891227722168,5.38417100906372 ,0.460857778787613,65.1714782714844,5.23062992095947,0.463440865278244,65.1675262451172,5.17260313034058,-0.0820308774709702 ,65.0459442138672,4.89202976226807,-0.136149242520332,65.0765151977539,4.83672428131104,-0.138348579406738,64.9979934692383 ,4.81805753707886,0.0212104022502899,63.1957321166992,4.60476016998291,0.014591783285141,63.4088325500488,4.82474660873413 ,0.0333658158779144,63.6850280761719,5.05261611938477,0.247710734605789,63.6851692199707,5.11107349395752,0.271986216306686 ,63.8935699462891,5.08359003067017,0.0659575760364532,63.8828468322754,5.03491592407227,0.112435579299927,64.0491027832031 ,4.98340797424316,0.306000739336014,64.0654220581055,5.02008056640625,-0.0462554842233658,64.1683197021484,4.87989664077759 ,0.19654643535614,64.2306365966797,4.95268440246582,0.0293864905834198,63.0530662536621,4.33955764770508,0.224212020635605 ,62.9917640686035,4.25159072875977,-0.765367031097412,63.3923377990723,3.83371591567993,-0.651477217674255,63.2802734375 ,3.78344511985779,-0.495274901390076,63.1926078796387,3.74888515472412,-0.151985064148903,63.9648361206055,4.85739088058472 ,-0.913377046585083,63.5252494812012,3.9269597530365,-1.02425754070282,63.6739387512207,3.92811274528503,-0.826150894165039 ,63.6318016052246,4.27187967300415,-0.730976521968842,63.445384979248,4.18613243103027,-0.600782513618469,63.3088493347168 ,4.06153249740601,0.226796835660934,63.3959312438965,4.87644529342651,0.219289809465408,63.1641044616699,4.63506507873535 ,-0.241868630051613,63.5709114074707,4.81857585906982,-0.229720890522003,63.7968864440918,4.90630340576172,0.355975478887558 ,64.2465591430664,4.98120021820068,0.790874361991882,68.2815475463867,5.40977621078491,0.601127862930298,68.0573806762695 ,5.25249767303467,0.596381306648254,68.1045684814453,5.25249910354614,0.711288332939148,68.1173934936523,5.32674694061279 ,0.709404587745667,68.0025939941406,5.31436395645142,0.730903506278992,68.6883010864258,5.42940425872803,0.527809977531433 ,68.0526580810547,5.16016721725464,0.48125085234642,68.0487747192383,5.05965137481689,0.497682601213455,68.1295394897461 ,5.09887170791626,0.553024291992188,66.0458145141602,5.9037504196167,0.543367385864258,66.0735397338867,5.94976902008057 ,0.608531594276428,66.0497436523438,5.96904802322388,0.615544080734253,66.0097961425781,5.92822217941284,0.311814934015274 ,66.6080169677734,5.82792091369629,0.303657621145248,66.5355834960938,5.84635210037231,0.303891092538834,66.4423294067383 ,5.8451623916626,0.534069180488586,65.900146484375,5.59989976882935,0.445289999246597,66.0324401855469,5.63547468185425 ,0.19013500213623,65.9237213134766,5.27445840835571,0.248411864042282,66.0125198364258,5.31187200546265,0.355401009321213 ,66.0270233154297,5.45005798339844,0.36849918961525,65.9021224975586,5.36541795730591,0.468226164579391,66.4609451293945 ,6.06767511367798,0.398465186357498,66.4604797363281,5.99520444869995,0.403927952051163,66.5763702392578,6.01220273971558 ,0.481254249811172,66.5852890014648,6.07205533981323,0.423365563154221,66.67236328125,5.97987413406372,0.501110553741455 ,66.6854095458984,6.03886842727661,-0.108507618308067,66.4573135375977,5.36215257644653,-0.00540593266487122,66.5347900390625 ,5.43890762329102,0.0397471785545349,66.5337600708008,5.20846939086914,0.106978118419647,66.6758041381836,5.37109851837158 ,-0.0288374274969101,66.4802627563477,5.17677354812622,-0.13063670694828,66.3856201171875,5.25176382064819,-0.131238698959351 ,66.3111114501953,5.16853904724121,-0.0889036506414413,66.4072723388672,5.15994358062744,-0.0695089995861053,66.2565612792969 ,5.09908008575439,-0.0347457826137543,66.4038543701172,5.13775730133057,-0.111543387174606,66.0502624511719,5.29291200637817 ,-0.0859223157167435,66.0216064453125,5.22113990783691,-0.140995234251022,66.1301803588867,5.16212177276611,-0.176501885056496 ,66.1772994995117,5.22717523574829,-0.0662545412778854,66.0122299194336,5.10803079605103,-0.0630548298358917,66.1422271728516 ,5.06855535507202,-0.111702397465706,66.0850524902344,5.345139503479,-0.0245998352766037,66.0480041503906,5.36004734039307 ,-0.0117437839508057,66.0069274902344,5.31585597991943,-0.0957345366477966,66.1489410400391,5.40095901489258,-0.0271564722061157 ,66.0927505493164,5.40800809860229,0.048024594783783,66.0424957275391,5.34305477142334,0.0678019225597382,66.0012054443359 ,5.29897117614746,-0.0270158648490906,66.2692489624023,5.50255537033081,0.0342166125774384,66.2017593383789,5.49587297439575 ,0.136669307947159,66.0409698486328,5.27193641662598,0.589970827102661,66.4517822265625,6.10982465744019,0.602482318878174 ,66.5799026489258,6.1108193397522,0.617652654647827,66.6855926513672,6.07464265823364,0.471429198980331,66.3372344970703 ,6.05087423324585,0.586342811584473,66.3283615112305,6.09568166732788,-0.170357286930084,66.2484970092773,5.29768991470337 ,-0.142111584544182,66.2994613647461,5.37951040267944,0.0933360159397125,66.2600784301758,5.55985736846924,0.0511030554771423 ,66.3218994140625,5.56224727630615,0.482154756784439,66.1159133911133,5.88775968551636,0.0899962484836578,66.5365219116211 ,5.51782989501953,0.0510095059871674,66.4304580688477,5.54727172851563,-0.040442943572998,66.3938293457031,5.48892450332642 ,0.604585409164429,65.8763122558594,5.60510492324829,0.315579742193222,66.3502731323242,5.83340358734131,0.344145625829697 ,66.2855911254883,5.81716537475586,0.427275151014328,66.0847091674805,5.59603023529053,0.216442435979843,66.3406295776367 ,5.69978904724121,0.212495654821396,66.3996963500977,5.69720506668091,-1.5725245475769,68.1800994873047,3.91071939468384 ,-1.50637865066528,68.1347732543945,4.07610607147217,0.656096935272217,68.4091491699219,5.44423151016235,0.637661695480347 ,68.2986373901367,5.434485912323,0.499500125646591,68.3267974853516,5.51218271255493,0.512825489044189,68.4433288574219 ,5.55519723892212,0.508580207824707,65.8326110839844,5.39012861251831,0.402165621519089,66.3396530151367,5.9828839302063 ,-1.81354486942291,64.5644378662109,2.97059988975525,-1.93136477470398,64.6418838500977,2.75137257575989,-1.95731270313263 ,64.8901138305664,2.83552479743958,-1.84961891174316,64.7845611572266,3.09832501411438,-2.01690983772278,64.6968231201172 ,2.52522659301758,-2.04829406738281,64.9380722045898,2.62030720710754,-2.02419638633728,65.1593399047852,2.70687079429626 ,-1.95266103744507,65.0892105102539,2.95585203170776,-1.81269764900208,65.0109481811523,3.18123745918274,-1.02156329154968 ,67.5455551147461,4.57637357711792,-0.764275670051575,67.4825820922852,4.73440980911255,-0.896280884742737,67.224853515625 ,4.66984891891479,-1.14410126209259,67.3386840820313,4.51541137695313,-0.55177116394043,67.267936706543,4.77729320526123 ,-1.1068480014801,67.7565994262695,4.48404884338379,-1.05273461341858,67.6993713378906,4.53898859024048,-0.111181184649467 ,65.4405899047852,5.10773086547852,-0.0561369508504868,65.3391342163086,5.14034557342529,0.125633955001831,65.4179916381836 ,5.23909091949463,0.113990187644959,65.3392562866211,5.24592781066895,0.111880213022232,65.2643585205078,5.20026922225952 ,-0.0477806478738785,65.2671127319336,5.10454702377319,0.174226105213165,65.2245025634766,4.97604894638062,0.157422542572021 ,65.2043838500977,5.00838422775269,0.0547326505184174,65.2380447387695,4.87922716140747,0.0697361826896667,65.1666259765625 ,4.91322135925293,0.0213787853717804,65.1525268554688,4.98430442810059,0.138899087905884,65.1861419677734,5.06382036209106 ,0.328762203454971,65.3688430786133,5.31849336624146,0.315944105386734,65.3194351196289,5.2904839515686,0.303560465574265 ,65.2702255249023,5.22354459762573,0.390564888715744,65.2960891723633,5.28231906890869,0.320711404085159,65.20703125 ,5.02729845046997,0.312472552061081,65.1896743774414,5.06831502914429,0.299265295267105,65.1769027709961,5.12665605545044 ,-0.210386320948601,65.280632019043,5.01384258270264,-0.183789789676666,65.1958465576172,4.99877452850342,0.523830056190491 ,65.1652374267578,5.00263690948486,0.525573372840881,65.1469955444336,5.05865240097046,0.525611877441406,65.1278686523438 ,5.12980985641479,-0.0135367214679718,65.2102432250977,4.81425046920776,-0.119428813457489,65.1035995483398,4.7038140296936 ,-0.0122914016246796,65.141471862793,4.82254409790039,-0.136682495474815,65.0725326538086,4.72591781616211,-0.164990901947021 ,65.0656280517578,4.78104448318481,-0.0685207843780518,65.1274337768555,4.88056612014771,0.534092545509338,65.2353057861328 ,5.28844594955444,0.529576301574707,65.1784286499023,5.25725317001343,0.536379456520081,65.2778472900391,5.3163046836853 ,-0.781278729438782,64.9023666381836,4.58818006515503,-0.683728218078613,65.082633972168,4.68330574035645,-0.550516605377197 ,65.0189590454102,4.68632316589355,-0.566328406333923,65.2899017333984,4.78666210174561,-0.518296241760254,65.1661224365234 ,4.75740098953247,-0.464072287082672,65.0068054199219,4.69205713272095,0.294271200895309,65.2052536010742,5.18574190139771 ,0.371871501207352,65.1948089599609,5.19161796569824,0.375409930944443,65.1688232421875,5.13242673873901,0.379584163427353 ,65.2474670410156,5.23729133605957,-0.277781784534454,65.0891571044922,4.89954948425293,-0.320617944002151,65.1713562011719 ,4.89474630355835,0.379270881414413,65.1757278442383,5.07146787643433,0.381683140993118,65.1935119628906,5.02361011505127 ,0.0217822194099426,67.9152297973633,4.67433166503906,-0.0366468280553818,67.9465713500977,4.53814792633057,-0.209568098187447 ,67.9163360595703,4.72592782974243,-0.185183897614479,67.8871536254883,4.76847219467163,-0.11489549279213,67.9430084228516 ,4.64322090148926,-0.07878278195858,67.9076614379883,4.70778560638428,-0.486432611942291,67.8622817993164,4.85848760604858 ,-0.479252845048904,67.8834075927734,4.80050659179688,-0.31166011095047,67.8833236694336,4.79053115844727,-0.302128821611404 ,67.8629302978516,4.8461799621582,-0.0699242502450943,67.9439544677734,4.58363962173462,-0.0321404486894608,67.9271011352539 ,4.68475675582886,-0.84839916229248,67.9442901611328,4.72416257858276,-0.817674279212952,67.9537811279297,4.68964529037476 ,-0.642622470855713,67.8963775634766,4.78840732574463,-0.66112619638443,67.8770141601563,4.84315013885498,-0.976640462875366 ,67.9922256469727,4.56396627426147,-0.922485947608948,67.9768447875977,4.64150190353394,-0.944518089294434,67.9910888671875 ,4.53432559967041,-0.890174746513367,67.9810943603516,4.61109304428101,-2.61214447021484,68.4235382080078,0.626309394836426 ,-2.61460733413696,68.2048645019531,0.565218269824982,-2.60449290275574,67.9082107543945,0.529542624950409,-2.41717648506165 ,67.9139709472656,0.834124386310577,-2.41839075088501,68.1474990844727,0.901697635650635,-2.40960621833801,68.3388442993164 ,0.98421710729599,-2.03543877601624,67.8588485717773,2.5323314666748,-1.99847674369812,68.0756683349609,2.65659737586975 ,-2.12697720527649,67.8789138793945,2.17562532424927,-2.1407904624939,68.0801773071289,2.15506458282471,-2.15716886520386 ,68.2771759033203,1.95663928985596,-1.9116598367691,68.2668304443359,2.82119727134705,-0.399414658546448,66.313850402832 ,4.90973949432373,-0.46922767162323,66.1981811523438,4.83644199371338,-0.541793346405029,66.0904388427734,4.79319524765015 ,-0.690685033798218,66.273811340332,4.80406522750854,-0.668297290802002,66.404541015625,4.84742307662964,-0.557000637054443 ,66.4967193603516,4.87973260879517,-1.25525510311127,64.6040115356445,3.93202066421509,-1.28677356243134,64.9492340087891 ,4.04414558410645,-0.452210426330566,66.988639831543,4.77221202850342,-0.407773971557617,66.8490829467773,4.83213043212891 ,-0.669095873832703,66.7760162353516,4.68708944320679,-0.744894623756409,66.9653625488281,4.75742101669312,-0.116209656000137 ,66.1586456298828,5.00018882751465,-0.166509792208672,66.2036666870117,4.95744848251343,-0.0504381358623505,66.3249435424805 ,5.04221248626709,-0.155897364020348,66.0759048461914,4.94396877288818,-0.219209671020508,66.0934219360352,4.89901351928711 ,-0.269795179367065,66.1559677124023,4.75622940063477,-0.206839874386787,66.2887268066406,4.83997058868408,-0.0960048139095306 ,66.4099960327148,4.98053693771362,-0.189794600009918,66.5924453735352,4.98823595046997,-0.292384445667267,66.4564895629883 ,4.94714450836182,-1.09283316135406,66.6220779418945,4.31481504440308,-1.11839640140533,66.4353790283203,4.1522331237793 ,-1.34252917766571,66.4763870239258,3.97234845161438,-1.34927034378052,66.656120300293,4.13074445724487,-1.31199634075165 ,65.4082412719727,3.95422267913818,-1.28974056243896,65.5870590209961,4.02625274658203,-1.25334906578064,65.7742919921875 ,4.101806640625,-1.00320780277252,66.3806610107422,4.33500385284424,-0.939937949180603,66.6072235107422,4.44677925109863 ,-1.02820551395416,65.3601608276367,4.4644570350647,-0.967733502388,65.5154876708984,4.53393268585205,-1.18165278434753 ,65.3615188598633,4.31486988067627,-1.10994076728821,65.5396423339844,4.38164329528809,-1.05721974372864,65.7129745483398 ,4.48102855682373,-0.89256489276886,65.6604461669922,4.60488033294678,-0.806287407875061,65.7862396240234,4.6733775138855 ,-0.966511964797974,65.8407745361328,4.56615924835205,-0.0335729718208313,66.6911773681641,5.04780769348145,0.0759113132953644 ,66.7483749389648,5.1440544128418,0.0238386392593384,66.4921112060547,5.08664512634277,-0.0408133268356323,66.8121566772461 ,5.04976224899292,0.081950843334198,66.860221862793,5.14150333404541,-0.171659141778946,66.7482986450195,4.98865556716919 ,-0.170493364334106,66.8839721679688,4.97727346420288,-0.0232710093259811,66.9545211791992,5.03047323226929,0.135811060667038 ,67.0183563232422,5.14650106430054,-0.0391866117715836,66.4145812988281,5.1172890663147,-1.37148487567902,65.4394378662109 ,3.73456621170044,-1.35712015628815,65.6117324829102,3.79800224304199,-1.32312762737274,65.7973327636719,3.86948752403259 ,0.0183311402797699,67.0959701538086,4.96626901626587,0.142358392477036,67.2082595825195,5.07538461685181,-0.140984281897545 ,67.0089492797852,4.90126895904541,0.185467749834061,67.3298034667969,4.99041795730591,-0.746942579746246,65.6734161376953 ,4.62390184402466,-0.359695255756378,66.0493392944336,4.73637294769287,-0.428380846977234,65.9834823608398,4.74483966827393 ,-1.16383278369904,64.5658493041992,4.12072086334229,-1.15625607967377,64.9629516601563,4.25756406784058,-1.20151329040527 ,65.9678268432617,4.16606521606445,-0.694171845912933,66.6185607910156,4.68004035949707,-0.820064544677734,66.4109878540039 ,4.66304492950439,-0.887491345405579,66.7378692626953,4.55708074569702,-0.371411561965942,66.5277709960938,4.95121288299561 ,-0.405768245458603,66.7212524414063,4.91648244857788,-0.558909773826599,66.6490173339844,4.81410980224609,-0.917269349098206 ,66.2333068847656,4.6307692527771,-1.25942957401276,66.0038757324219,3.94744896888733,-1.39873218536377,65.0957946777344 ,3.61290645599365,-1.39295423030853,64.7964248657227,3.55453634262085,-1.35852468013763,64.7153930664063,3.68139219284058 ,-1.3772064447403,65.0264739990234,3.76843571662903,-2.07197546958923,64.6383666992188,0.931430459022522,-2.08498668670654 ,65.0384979248047,0.906979918479919,-2.06042790412903,65.3805236816406,0.877483546733856,-2.05097699165344,65.1512985229492 ,1.2759302854538,-2.06015038490295,64.8550186157227,1.30809426307678,-2.02402448654175,64.4673690795898,1.37764811515808 ,-0.317405670881271,64.1438674926758,4.73388910293579,-0.199191853404045,64.3656463623047,4.92192602157593,0.0584587752819061 ,64.4125900268555,5.01743650436401,0.323728114366531,65.7889404296875,5.27015924453735,0.27680429816246,65.713134765625 ,5.23587036132813,0.100094795227051,65.8025588989258,5.14045476913452,0.16403341293335,65.8722991943359,5.20320177078247 ,0.672230005264282,68.5570983886719,5.43079471588135,-1.4498655796051,65.2241744995117,3.42291474342346,-1.47264587879181 ,64.8126754760742,3.36299705505371,-1.70768797397614,65.3423156738281,3.26869869232178,0.445904701948166,66.7886428833008 ,5.8851146697998,0.457289844751358,66.9578247070313,5.61104488372803,0.546737313270569,66.986572265625,5.79516410827637 ,0.524746656417847,66.8179473876953,5.94628763198853,0.32802876830101,66.7540588378906,5.70246267318726,0.559999704360962 ,67.1466827392578,5.70663118362427,0.664358973503113,67.1507263183594,5.74432706832886,0.65339183807373,67.0009765625 ,5.82805252075195,0.566108703613281,67.267822265625,5.64640045166016,0.671553015708923,67.2614898681641,5.68974256515503 ,-0.050879642367363,68.516845703125,5.41659116744995,0.0356159210205078,68.4701309204102,5.42639017105103,-0.0643284767866135 ,68.6498718261719,5.38900327682495,0.0299199819564819,68.5855102539063,5.41929721832275,-0.1483254134655,70.409065246582 ,4.80879259109497,-0.281782209873199,70.0384140014648,4.80547046661377,-0.274167895317078,70.3873748779297,4.66984558105469 ,-0.255148202180862,69.788200378418,4.88298845291138,-0.396128743886948,69.6997528076172,4.846275806427,-0.454765975475311 ,70.0203094482422,4.78745889663696,-0.442509591579437,70.3879318237305,4.53379154205322,-0.835795640945435,63.4386901855469 ,3.51720428466797,-0.953054666519165,63.552604675293,3.55810213088989,-0.67583042383194,63.3441200256348,3.49282073974609 ,0.406194537878037,64.6415786743164,5.26836204528809,0.415552586317062,64.7716598510742,5.37029790878296,0.213078200817108 ,64.6159896850586,5.18863344192505,0.240144103765488,64.7654647827148,5.33822298049927,-2.11256265640259,66.0385513305664 ,0.873668432235718,-1.94346523284912,64.8523025512695,0.400435388088226,-2.05047631263733,65.3201141357422,0.366720616817474 ,-1.57476997375488,64.3679351806641,1.78875243663788,-1.07562649250031,63.6925163269043,3.55823540687561,-1.17126393318176 ,63.8498039245605,3.55429005622864,-0.390977293252945,70.8356475830078,4.3555736541748,-0.744130969047546,70.8145904541016 ,4.00300979614258,-2.03400230407715,65.742919921875,1.28652930259705,-1.8791264295578,66.3266220092773,2.87983322143555 ,-2.03246521949768,66.411979675293,2.61124539375305,-1.82173979282379,66.2470703125,3.17122912406921,-1.86850535869598 ,66.0474166870117,3.08610796928406,-1.98421514034271,66.1042938232422,2.81830239295959,-2.08096957206726,66.1626129150391 ,2.53493142127991,-1.84771418571472,67.1879348754883,2.95442819595337,-1.80135297775269,67.0301895141602,3.23959875106812 ,-1.76515674591064,66.785041809082,3.07056713104248,-1.87070560455322,66.8938522338867,2.78359508514404,-1.70357024669647 ,66.9201354980469,3.48094010353088,-1.69575119018555,66.6819305419922,3.3398289680481,-0.139177143573761,68.8369216918945 ,5.33272504806519,-0.0133581459522247,68.7448959350586,5.38222455978394,-0.509039878845215,63.362361907959,3.27057361602783 ,-0.262469559907913,63.2758140563965,3.27482867240906,-0.699285864830017,63.4942016601563,3.1197497844696,-0.683854222297668 ,63.4490356445313,3.25789666175842,-0.0951341688632965,65.6181488037109,5.05984973907471,-0.0582968145608902,65.8303070068359 ,5.02478265762329,0.124396234750748,65.5714721679688,5.22218894958496,-0.760870814323425,69.1461181640625,4.90825128555298 ,-0.785614848136902,69.2844390869141,4.80389881134033,-0.508977234363556,69.2027816772461,5.00977611541748,-1.54019856452942 ,63.1496925354004,1.83554863929749,-1.44083988666534,62.6188354492188,1.92539572715759,-1.33062088489532,62.0820846557617 ,2.01348876953125,-1.80600261688232,62.2738304138184,1.6899915933609,-1.88436985015869,62.8275032043457,1.60266172885895 ,-1.94922614097595,63.3644943237305,1.52231955528259,-0.0513340383768082,65.9179153442383,5.04434442520142,-0.19064649939537 ,65.8681106567383,4.94524908065796,-0.183843195438385,65.9644622802734,4.94034814834595,-0.808202028274536,68.6531295776367 ,5.0890908241272,-0.595443367958069,68.5742263793945,5.154221534729,-0.396508872509003,68.4809265136719,5.19436264038086 ,-1.70305275917053,64.4079360961914,2.08354473114014,-1.74098002910614,64.472038269043,1.84414160251617,-1.74135506153107 ,64.3974456787109,2.35125732421875,-1.59747552871704,64.2888259887695,2.34509325027466,-1.48897337913513,68.5760726928711 ,4.09610462188721,-1.40559566020966,68.6938400268555,4.24785947799683,-1.45287621021271,68.5857849121094,4.25322437286377 ,-1.34823858737946,68.7632751464844,4.3747091293335,-1.37033426761627,68.5849533081055,4.42276239395142,-2.09475660324097 ,65.2050933837891,2.49065113067627,-2.16352653503418,65.2407379150391,2.2720046043396,-2.13584589958191,65.6896286010742 ,2.43884897232056,-2.04241967201233,65.6157836914063,2.68238019943237,-1.98007988929749,65.5083999633789,2.85055589675903 ,-1.95554280281067,65.7304077148438,2.97573184967041,-2.04487562179565,65.7516098022461,2.72064995765686,-2.03574252128601 ,65.9118804931641,2.75876307487488,-1.91338920593262,65.8771209716797,3.0145218372345,-2.13501143455505,65.9259414672852 ,2.47491431236267,-1.25092124938965,64.1620712280273,3.57095456123352,-1.56101667881012,64.4123153686523,3.2118501663208 ,-1.47741937637329,64.2375869750977,3.20888209342957,-1.61829733848572,64.3333435058594,3.0396671295166,-1.41418766975403 ,64.1123580932617,3.13771891593933,-1.62954115867615,64.3046188354492,2.78890919685364,-0.808276295661926,69.8435897827148 ,4.60829305648804,-0.824947237968445,70.0887680053711,4.56946516036987,-0.813838243484497,70.4376373291016,4.31216812133789 ,-0.600288033485413,64.1812286376953,4.45011425018311,-0.505940973758698,63.940616607666,4.6615161895752,-0.783298969268799 ,64.0240707397461,4.29003620147705,-0.921410918235779,63.9113693237305,4.18760967254639,-0.941422820091248,64.3103332519531 ,4.20115423202515,-0.759661674499512,64.3785247802734,4.38072729110718,0.147928476333618,66.7239532470703,5.34744739532471 ,0.174289703369141,66.8014602661133,5.31767988204956,0.670596718788147,70.221435546875,5.0761866569519,0.670153975486755 ,69.8623809814453,5.15234136581421,0.674422025680542,69.5756072998047,5.2115650177002,0.440570801496506,69.6572647094727 ,5.20759725570679,0.42556032538414,69.9269866943359,5.12856292724609,0.430853515863419,70.2512741088867,5.03137493133545 ,-0.90849757194519,62.6430702209473,2.36282968521118,-0.947414755821228,63.0990028381348,2.35613656044006,-0.329749047756195 ,62.8400077819824,2.7103910446167,-0.315626204013824,62.4643325805664,2.68951559066772,0.263793796300888,64.4568786621094 ,5.05091381072998,0.403211146593094,64.4612045288086,5.07767200469971,-1.39945721626282,64.1531295776367,2.29242897033691 ,-0.207591384649277,70.7967300415039,4.52281379699707,0.0430980920791626,70.7885131835938,4.67768573760986,-0.101195529103279 ,64.6073379516602,5.09178304672241,-0.0652517527341843,64.7951049804688,5.23603582382202,-1.10083091259003,63.8160858154297 ,3.92026376724243,-1.13330459594727,63.9689064025879,3.88364458084106,-0.88843297958374,63.7760963439941,4.24809598922729 ,0.0729179680347443,65.9188919067383,5.20343208312988,0.0801597237586975,65.8802871704102,5.14752531051636,0.0183428525924683 ,65.8659210205078,5.08235120773315,0.0127083361148834,65.9394607543945,5.16200304031372,-1.93992030620575,67.2547225952148 ,2.58971214294434,-1.95857298374176,67.5483322143555,2.71937894821167,-1.93557977676392,67.5112228393555,3.04516434669495 ,-2.03416466712952,67.3294143676758,2.27365493774414,-2.02730870246887,67.6041946411133,2.41377878189087,-1.9924556016922 ,67.8220825195313,2.85915374755859,-1.96827554702759,67.7863311767578,3.1956627368927,-0.350411772727966,65.6730117797852 ,4.88298177719116,-0.356381922960281,65.5427932739258,4.86791706085205,-0.243584454059601,65.6547775268555,4.94647455215454 ,-0.254453182220459,65.4844512939453,4.99992895126343,-0.363168507814407,65.4404754638672,4.91674470901489,-0.272338837385178 ,63.1153030395508,3.72361707687378,-0.0289112478494644,63.0413627624512,3.70450663566589,-0.670747756958008,61.767951965332 ,2.3687744140625,-0.804776668548584,62.2013702392578,2.36921405792236,-0.259763211011887,62.0463714599609,2.62303972244263 ,-0.177231281995773,61.6228904724121,2.54752326011658,-1.9927704334259,66.9824752807617,2.5082311630249,-2.05750274658203 ,67.0365829467773,2.24574327468872,-0.17700007557869,69.483772277832,5.03800296783447,-0.298267304897308,69.5041885375977 ,4.97279596328735,-0.928951978683472,64.6156616210938,4.38640880584717,-0.891277432441711,64.9078826904297,4.47258186340332 ,-0.779518723487854,68.4324493408203,4.99159145355225,-1.02257990837097,68.3955917358398,4.80787563323975,0.34947481751442 ,68.0630874633789,4.85545587539673,0.423168927431107,68.0462036132813,4.90282201766968,0.342937141656876,70.5613250732422 ,4.89104413986206,0.147651463747025,70.5392761230469,4.86807298660278,-1.2157906293869,63.8193016052246,3.07285928726196 ,-1.10651934146881,63.7029571533203,3.07594728469849,-1.2298492193222,63.8758430480957,2.68809795379639,-1.44278490543365 ,64.0540924072266,2.70295476913452,-1.05901253223419,69.2478637695313,4.56301927566528,0.474990516901016,67.7075805664063 ,5.08277940750122,0.364992707967758,67.7215957641602,4.92603778839111,-1.09955096244812,70.7294235229492,3.56823682785034 ,-0.959166765213013,70.7751235961914,3.73905348777771,-0.93732762336731,70.4110260009766,4.03635215759277,-1.04437601566315 ,70.397331237793,3.90019869804382,-1.09157884120941,70.2968444824219,3.71844005584717,-0.315446317195892,63.432933807373 ,2.81047368049622,-0.31975319981575,63.3010559082031,2.76526927947998,-0.650783777236938,63.4768257141113,2.6024923324585 ,-0.637265503406525,63.5470428466797,2.6762809753418,-0.927510976791382,63.6720161437988,2.41135168075562,-0.933242917060852 ,63.7730255126953,2.48379826545715,-2.02392649650574,66.1573867797852,1.58263778686523,-2.07431602478027,66.1202239990234 ,1.66325640678406,-2.05163955688477,65.893913269043,1.64001560211182,-1.99583303928375,65.9085083007813,1.55370533466339 ,-2.12772655487061,66.1783981323242,1.76517724990845,-2.0209858417511,65.6275253295898,1.60138118267059,-1.98261296749115 ,65.6147766113281,1.51146507263184,-1.5341135263443,64.1635208129883,2.74776482582092,-1.312180519104,63.9692573547363 ,3.08655452728271,-1.15575242042542,69.7564849853516,4.01516532897949,-1.1415137052536,69.8439407348633,4.19292688369751 ,-1.14436554908752,69.5396728515625,4.26946496963501,-1.18450546264648,69.4577713012695,4.09269237518311,-1.07104623317719 ,69.8846588134766,4.34977245330811,-1.0616762638092,69.5953521728516,4.4445161819458,-1.24094617366791,69.2243041992188 ,4.1032886505127,-2.03621077537537,66.3975296020508,0.914780795574188,-2.04223775863647,66.7845764160156,0.975087583065033 ,-2.09031414985657,66.5847930908203,1.37293410301209,-2.02425837516785,66.1338958740234,1.3306941986084,-0.78000795841217 ,66.1221771240234,4.73541688919067,-0.623443305492401,65.9943084716797,4.75739336013794,-1.57149791717529,68.5909423828125 ,3.5501401424408,-1.6832492351532,68.5774765014648,3.2073016166687,-1.4975346326828,68.9557037353516,3.64432191848755 ,0.340592056512833,68.1518402099609,5.09618616104126,0.235334187746048,68.158561706543,5.09759378433228,0.41490575671196 ,68.1203460693359,4.91284275054932,0.264055222272873,68.1476898193359,4.90246868133545,0.128037631511688,68.2148361206055 ,4.91389608383179,0.0906608700752258,68.243896484375,5.10406923294067,0.314071863889694,67.8479843139648,4.79379749298096 ,0.562735438346863,67.48779296875,5.44729280471802,0.538991689682007,65.3839263916016,5.28918361663818,0.577238440513611 ,65.6157073974609,5.26028776168823,-1.06519198417664,64.5729827880859,4.26825094223022,-0.474201023578644,65.2277221679688 ,4.79333591461182,-0.499527037143707,65.3600311279297,4.80795907974243,0.416984349489212,65.6513366699219,5.29502534866333 ,0.347670465707779,65.46923828125,5.29197025299072,-1.80286026000977,64.601318359375,1.68279564380646,-1.7073689699173 ,64.5272598266602,1.6213926076889,-1.80837976932526,64.6741714477539,1.50764513015747,-1.8718740940094,64.7724533081055 ,1.58767604827881,-0.815224170684814,63.6127471923828,2.81109523773193,-2.26979184150696,68.4025268554688,1.87078094482422 ,-2.2208297252655,68.2557067871094,1.97225749492645,-2.37703514099121,68.6007461547852,1.66589772701263,-2.26262497901917 ,68.4405975341797,1.81961536407471,-1.03683507442474,64.9424285888672,4.38036823272705,-0.540904700756073,61.3368988037109 ,2.35497760772705,-0.41677650809288,60.9281539916992,2.3291540145874,-0.325470447540283,63.4140090942383,2.96501040458679 ,-0.594686388969421,63.5077323913574,2.89057016372681,-0.981541395187378,63.6064987182617,3.27650785446167,-1.10026836395264 ,63.7169075012207,3.26976680755615,0.526109218597412,68.14697265625,5.26719665527344,0.568230986595154,68.1727981567383 ,5.35188436508179,0.386983662843704,68.1658706665039,5.28233337402344,0.448243707418442,68.1876449584961,5.35850811004639 ,-0.532591819763184,65.5348815917969,4.79324674606323,-0.523976564407349,65.6869888305664,4.78611993789673,0.00548842549324036 ,60.8566741943359,2.45223522186279,-0.0831018388271332,61.2306098937988,2.49952602386475,0.0188752114772797,68.3327026367188 ,5.30487537384033,-0.0704790055751801,68.363037109375,5.28680944442749,-2.15657114982605,67.4172897338867,2.03161334991455 ,-2.16407775878906,67.4641799926758,1.9778904914856,-2.15711736679077,67.6560134887695,2.05931353569031,-2.13285875320435 ,67.6450576782227,2.12807035446167,-2.17298078536987,67.6296005249023,1.98325932025909,-2.14432954788208,67.4562301635742 ,1.92806100845337,-2.16967344284058,67.8814086914063,2.09683799743652,-2.21320962905884,67.8581390380859,2.04574823379517 ,-2.18964791297913,68.0818328857422,2.05832767486572,-1.10682272911072,68.3520812988281,4.70458507537842,-1.15601515769959 ,68.3128433227539,4.61932134628296,0.207888931035995,68.7812576293945,5.28072357177734,0.263615399599075,68.5072784423828 ,5.41212558746338,0.464819699525833,68.8843994140625,5.4324893951416,0.398692756891251,68.7625350952148,5.45540761947632 ,-1.25822556018829,70.451057434082,3.21246004104614,0.339573413133621,67.0314331054688,5.40791082382202,0.345676153898239 ,67.1595001220703,5.31332588195801,0.257675498723984,66.9607238769531,5.37208271026611,0.27671816945076,67.0952606201172 ,5.29533100128174,-0.346919864416122,64.5955657958984,4.886794090271,-0.269924342632294,64.8229598999023,5.07238912582397 ,0.471486002206802,69.3630905151367,5.26161623001099,-1.0702668428421,68.2463302612305,4.70731925964355,-1.12266719341278 ,68.2153015136719,4.63162517547607,-0.994616150856018,68.2830963134766,4.80261564254761,-1.21383774280548,70.1628952026367 ,3.43133807182312,-1.29199075698853,70.0936126708984,3.19760370254517,-1.54211235046387,66.7447891235352,3.85741925239563 ,-1.62783098220825,66.8216247558594,3.68867087364197,-1.64418721199036,67.0815963745117,3.87778115272522,-1.56714427471161 ,66.9721908569336,4.04104709625244,-1.7402982711792,67.1906433105469,3.70685386657715,-1.69936990737915,67.5307006835938 ,4.00219488143921,-1.67731153964996,67.329833984375,4.1088399887085,-1.59077250957489,67.2291412353516,4.29393005371094 ,-1.95055508613586,65.1543350219727,1.46215105056763,-1.56346881389618,69.2975921630859,3.26897525787354,-1.4090815782547 ,69.4477081298828,3.40556597709656,-1.74627792835236,64.440071105957,1.54838252067566,-0.734020113945007,68.327018737793 ,4.86467933654785,-0.588288068771362,68.3583221435547,4.91467189788818,-0.612378001213074,68.3541793823242,5.02480363845825 ,-0.440865159034729,68.3609390258789,5.06021976470947,-0.777303099632263,68.3321228027344,4.97459363937378,-0.592226624488831 ,68.4283676147461,5.0551962852478,-0.553448915481567,64.6106491088867,4.63129711151123,-2.06321501731873,64.8149185180664 ,2.1156005859375,-1.96014213562012,64.6624221801758,2.01800656318665,-2.00579595565796,64.7556381225586,1.88240575790405 ,-2.09146332740784,64.8734741210938,1.97533786296844,-2.03775382041931,64.8883743286133,1.79650235176086,-2.08510828018188 ,64.9430160522461,1.88319373130798,-0.757157921791077,64.6142654418945,4.48394203186035,-0.614307522773743,68.9632034301758 ,5.11051034927368,-0.794221878051758,68.9102096557617,5.09240007400513,-0.80116593837738,69.030632019043,5.000319480896 ,-0.522611021995544,68.8117065429688,5.20736932754517,-0.591552793979645,68.7441177368164,5.20382118225098,0.17551189661026 ,69.9622344970703,5.07451820373535,0.165461927652359,70.2903289794922,4.94730806350708,0.194429904222488,69.6949996948242 ,5.19657707214355,-2.11258745193481,66.1687545776367,1.8726019859314,-2.16341876983643,65.9415130615234,1.83260381221771 ,-2.11326837539673,66.3250961303711,1.86445963382721,-2.12052845954895,66.2355880737305,2.01137447357178,-2.17510890960693 ,65.9578628540039,1.98067176342011,-2.17870330810547,65.7067718505859,1.92334616184235,-2.15139293670654,65.689697265625 ,1.78150403499603,-0.486087083816528,64.3405914306641,4.7109055519104,-2.1408896446228,66.2031402587891,2.26762771606445 ,-2.19596338272095,65.9495010375977,2.19994449615479,-2.20460176467896,65.7087783813477,2.1474175453186,-1.99888551235199 ,63.9207420349121,1.44241523742676,-1.61844539642334,63.6698875427246,1.73408043384552,-2.11890387535095,63.9976463317871 ,-0.342489182949066,-2.13630628585815,64.3602828979492,-0.346500098705292,-2.03976392745972,63.9575653076172,0.41189306974411 ,-2.06836891174316,63.4655876159668,0.399017214775085,-2.16437578201294,62.9744300842285,0.377947419881821,-2.14121961593628 ,65.2657470703125,1.87458062171936,-2.0932993888855,65.2478637695313,1.74254786968231,-1.51281440258026,64.6265411376953 ,3.29674959182739,-2.05109286308289,64.7572555541992,2.30762910842896,-1.933061003685,64.5889587402344,2.20823669433594 ,-1.90012407302856,64.5380249023438,2.43933463096619,-1.31578600406647,66.8648910522461,4.27143526077271,-1.30149531364441 ,67.0518417358398,4.42273664474487,-1.10101783275604,68.8673095703125,4.8091459274292,-1.07546055316925,69.011474609375 ,4.71746587753296,-1.42160642147064,65.5252685546875,3.52144980430603,-1.40683698654175,65.6822128295898,3.57834124565125 ,-1.58224856853485,65.6108703613281,3.29807591438293,-1.57773494720459,65.7677688598633,3.37011218070984,-1.54902422428131 ,65.9346160888672,3.42232990264893,-1.39247977733612,65.8589630126953,3.64873790740967,0.682592511177063,67.4627838134766 ,5.50372314453125,-0.0231511294841766,67.9797210693359,4.53457832336426,0.0689001083374023,67.9140777587891,4.6100025177002 ,-1.12562048435211,70.0753631591797,3.87472653388977,-1.07722532749176,70.1355972290039,4.04010963439941,-1.01903128623962 ,70.1703643798828,4.19287395477295,-2.32464599609375,68.0832672119141,2.01199150085449,-1.20537066459656,69.1091156005859 ,4.41851234436035,-1.26697885990143,69.1107482910156,4.23781585693359,-2.11697959899902,64.9762344360352,2.40753579139709 ,-2.1550624370575,65.013916015625,2.20364284515381,-1.74699115753174,64.4294586181641,2.85393071174622,-1.83707749843597 ,64.4808044433594,2.65622782707214,-1.74542367458344,64.3839721679688,2.58440184593201,0.461882144212723,65.7179183959961 ,5.31436204910278,-1.21816754341125,68.5262603759766,4.68819999694824,-1.1211758852005,68.6093826293945,4.88013124465942 ,-1.2851630449295,68.4350738525391,4.530442237854,0.635958552360535,66.828239440918,5.97853088378906,-1.26056778430939 ,68.8390579223633,4.57395887374878,-1.2935973405838,68.7086868286133,4.65042591094971,0.37334069609642,68.1957473754883 ,5.35311079025269,0.246664017438889,68.2045364379883,5.33756542205811,0.584861993789673,65.7197570800781,5.3216290473938 ,0.519932627677917,65.7092132568359,5.32898473739624,-0.447787255048752,63.2590141296387,3.48250794410706,-0.178221330046654 ,63.1808700561523,3.47902083396912,-1.355189204216,68.3519134521484,4.40949535369873,-0.941252827644348,67.045654296875 ,4.67198657989502,-1.01300930976868,66.9293823242188,4.6082558631897,0.459396570920944,65.6318435668945,5.29486227035522 ,0.576122164726257,65.8132858276367,5.38352203369141,-1.74535763263702,68.283805847168,3.39701509475708,-1.67534267902374 ,68.249870300293,3.62321925163269,-1.66290307044983,68.0045700073242,3.77771782875061,-1.77787244319916,68.0544128417969 ,3.52214884757996,-1.83792591094971,68.1034927368164,3.3171329498291,-2.01141786575317,62.4788932800293,1.08764457702637 ,-2.03550362586975,63.0831871032715,1.03389322757721,-2.08057498931885,63.6488494873047,0.996630012989044,-0.727405667304993 ,63.7856407165527,4.48693656921387,0.403872281312943,65.4369735717773,5.29749917984009,0.212884962558746,66.9366912841797 ,5.31471633911133,-2.08154916763306,64.1719741821289,0.963233709335327,-1.63406300544739,61.1202850341797,1.91978907585144 ,-1.71581184864044,61.6675415039063,1.79084861278534,-1.21979427337646,61.5442085266113,2.10970258712769,-1.11507868766785 ,61.0497703552246,2.22066450119019,0.397110790014267,65.3379211425781,5.3165454864502,0.150394052267075,69.1584396362305 ,5.24437236785889,0.25466313958168,68.3417129516602,5.44970941543579,0.385993629693985,68.3356323242188,5.45527410507202 ,-1.99925017356873,64.411994934082,0.410330653190613,-1.75443303585052,65.9802856445313,3.32582831382751,-1.78535091876984 ,65.8136138916016,3.24826383590698,-1.83421552181244,65.6668930053711,3.21271967887878,-1.54078459739685,67.6767730712891 ,4.0923023223877,-1.53024888038635,67.7846069335938,4.08631801605225,-1.48656177520752,67.670166015625,4.18855333328247 ,-0.0336967706680298,68.2866058349609,5.11544227600098,-0.163565188646317,68.3031311035156,5.08582973480225,-0.0391643792390823 ,68.3049163818359,5.13495540618896,-1.37579870223999,67.9069976806641,4.26235771179199,-1.52683842182159,67.8808059692383 ,4.10175180435181,-1.481609582901,67.9332046508789,4.13464260101318,-1.81708836555481,67.308219909668,3.50301480293274 ,-1.89029633998871,67.4270095825195,3.34287810325623,-1.76982736587524,67.7455520629883,3.71983504295349,-1.77171719074249 ,67.5614318847656,3.75459861755371,-2.19584512710571,67.2965621948242,1.77712988853455,-2.24088382720947,67.2952575683594 ,1.7981219291687,-2.2440721988678,67.1937026977539,1.73284959793091,-2.19305682182312,67.1954498291016,1.71282660961151 ,-2.2493724822998,67.2783508300781,1.84175550937653,-2.2523455619812,67.1691207885742,1.77946817874908,-2.23360681533813 ,67.0472564697266,1.73493158817291,-2.22762441635132,67.0837478637695,1.69295918941498,-2.17817640304565,67.0792694091797 ,1.67337989807129,-2.20355939865112,66.9430236816406,1.71033716201782,-2.20649123191834,66.9891357421875,1.68191468715668 ,-2.15764904022217,66.8303604125977,1.69480717182159,-2.16480088233948,66.9624557495117,1.67032980918884,-2.06757593154907 ,66.5061492919922,2.32285475730896,-2.10238003730774,66.5130615234375,2.10629987716675,-2.09369444847107,66.5944900512695 ,1.94952178001404,-1.70596849918365,66.1777954101563,3.40870594978333,-1.55709671974182,66.1401290893555,3.50885915756226 ,-0.797003388404846,65.1296768188477,4.57803392410278,-0.741232514381409,65.3470916748047,4.63011360168457,-1.89674711227417 ,65.4108810424805,3.107266664505,-1.34887731075287,66.069221496582,3.7221884727478,-2.14270448684692,64.8188018798828 ,-0.334672451019287,-0.930856823921204,65.1602783203125,4.46657943725586,-0.869108200073242,65.3729095458984,4.52292776107788 ,-2.12190103530884,65.0732574462891,1.88043594360352,-2.15592980384827,65.0524444580078,2.02393579483032,-2.18910598754883 ,65.2617797851563,2.05802536010742,0.512521862983704,68.5822525024414,5.50223302841187,-1.98135113716125,65.1861190795898 ,1.54213905334473,-1.6288822889328,66.6003341674805,3.56421518325806,-1.55428493022919,66.532600402832,3.74061942100525 ,-2.1121072769165,66.5616455078125,1.80101943016052,-2.10204029083252,66.4258270263672,1.90585076808929,-2.13509225845337 ,66.374397277832,1.7990757226944,-2.35635566711426,67.3067321777344,0.812714219093323,-2.39229607582092,67.6440200805664 ,0.794500529766083,-2.57374215126038,67.5606384277344,0.517772197723389,-2.5351095199585,67.119384765625,0.561946094036102 ,-1.21843302249908,68.1966247558594,4.51577281951904,-1.88325524330139,67.767219543457,3.43066549301147,-1.81970810890198 ,67.9292221069336,3.48891401290894,-1.75683486461639,67.9004592895508,3.69498109817505,-1.8772451877594,67.9753952026367 ,3.26425886154175,-1.53521847724915,68.5107879638672,3.81524801254272,-1.3711564540863,68.828971862793,3.95661473274231 ,-1.41476547718048,68.9009323120117,3.81379532814026,-1.80806887149811,68.30419921875,3.1439528465271,-1.87774705886841 ,68.1662673950195,3.07762551307678,-2.6015841960907,68.5840148925781,0.712429046630859,-2.52507567405701,68.69482421875 ,0.882501721382141,-2.48019790649414,68.5404968261719,0.898567080497742,0.500611424446106,68.1400527954102,5.193274974823 ,0.348428159952164,68.1519470214844,5.17658805847168,-2.0661473274231,65.0544357299805,1.75413143634796,-1.92961394786835 ,64.9724426269531,1.54710781574249,-1.90213859081268,64.9244155883789,1.46848058700562,-2.34519624710083,67.8858871459961 ,1.96922051906586,-2.38531565666199,68.0801696777344,1.97755885124207,-2.28863024711609,67.8838806152344,2.00988554954529 ,-2.44026684761047,68.2774887084961,1.92449355125427,-2.37290835380554,68.284049987793,1.94873142242432,-2.10232996940613 ,66.960578918457,1.67264628410339,-2.07494330406189,66.904296875,1.65739774703979,-2.05417490005493,66.9678649902344 ,1.66187787055969,-2.04683780670166,67.0705718994141,1.67697703838348,-2.11067008972168,66.8728408813477,1.66792440414429 ,-2.75847244262695,67.9617462158203,0.94255542755127,-2.73985648155212,67.7981796264648,0.92533802986145,-2.75659584999084 ,68.088752746582,0.982750296592712,-2.79887843132019,68.0288391113281,1.05075478553772,-2.77713751792908,67.9088439941406 ,0.994415462017059,-2.75649619102478,67.7685165405273,0.977071523666382,-2.35955667495728,67.7633590698242,1.34055125713348 ,-2.25957608222961,67.6356582641602,1.41453206539154,-2.37699103355408,67.6495971679688,1.24427485466003,-2.45081090927124 ,67.7506256103516,1.17347347736359,-2.36532330513,66.464485168457,1.54881620407104,-2.35082054138184,66.3426284790039 ,1.57185876369476,-2.27199625968933,66.5775146484375,1.62538266181946,-2.1869649887085,66.3295822143555,1.72240126132965 ,-2.29197859764099,66.1882400512695,1.61246955394745,-2.4648904800415,66.2750930786133,1.26518499851227,-2.49455857276917 ,66.4529876708984,1.30809855461121,-2.48511815071106,66.6359558105469,1.3474086523056,-2.27331113815308,67.9336547851563 ,1.74671864509583,-2.29868316650391,67.9050064086914,1.65444278717041,-2.34973835945129,67.957633972168,1.62568306922913 ,-2.36209845542908,68.0078201293945,1.64591896533966,-2.33179688453674,67.892692565918,1.55466496944427,-2.40474534034729 ,67.9688491821289,1.53484129905701,-2.4497275352478,68.0374603271484,1.53600335121155,-2.13426208496094,66.7055740356445 ,1.7371917963028,-2.18047690391541,66.6938400268555,1.68803453445435,-2.11631941795349,66.7367782592773,1.77710032463074 ,-2.17466807365417,66.7814331054688,1.65517473220825,-2.17853713035584,66.5098495483398,1.71980178356171,-2.24601554870605 ,66.6240310668945,1.63700735569,-2.23596453666687,66.7149353027344,1.61178421974182,-2.08406949043274,66.2603149414063 ,1.58167397975922,-2.12804293632507,66.2284851074219,1.63206398487091,-2.15880513191223,66.2021179199219,1.48221611976624 ,-2.20739459991455,66.1964111328125,1.55108535289764,-2.1796190738678,66.2102890014648,1.69114816188812,-2.51349091529846 ,68.4639205932617,1.8059241771698,-2.43427896499634,68.4770355224609,1.82119417190552,-2.59442925453186,68.6118392944336 ,1.63751804828644,-2.50176239013672,68.6313934326172,1.64476716518402,-2.73913168907166,68.7284088134766,1.22234892845154 ,-2.62747955322266,68.7517471313477,1.21627235412598,-2.47974514961243,68.7250289916992,1.15428924560547,-2.73278260231018 ,68.6157150268555,0.694849789142609,-2.74724912643433,68.4496536254883,0.59031093120575,-2.70658230781555,68.7177963256836 ,0.83696711063385,-2.81796073913574,68.6995697021484,0.851444661617279,-2.8422474861145,68.60498046875,0.71686464548111 ,-2.85389399528503,68.4456481933594,0.619735836982727,-2.82498502731323,67.9058685302734,0.533349275588989,-2.72819066047668 ,67.9063491821289,0.496379375457764,-2.7461109161377,68.2178268432617,0.52613776922226,-2.84833526611328,68.2153625488281 ,0.559641242027283,-2.59032201766968,66.4807510375977,0.928826689720154,-2.50743699073792,66.4137268066406,0.886127471923828 ,-2.57565426826477,66.6966857910156,0.700164079666138,-2.65918207168579,66.7431793212891,0.74626624584198,-2.42311024665833 ,66.4989776611328,0.856422662734985,-2.48622512817383,66.7392807006836,0.686086356639862,-2.63933992385864,67.0922927856445 ,0.552085697650909,-2.72536826133728,67.115592956543,0.598837077617645,-2.29795503616333,66.2649078369141,1.18770742416382 ,-2.3826699256897,66.2012023925781,1.22903323173523,-2.16459393501282,66.6759796142578,1.23249101638794,-2.24789547920227 ,66.8142013549805,1.06252408027649,-2.40808701515198,68.0817337036133,1.90571987628937,-2.46647810935974,68.26220703125 ,1.85624074935913,-2.36823225021362,67.9038314819336,1.90009796619415,-2.36028814315796,67.9237442016602,1.82882857322693 ,-2.3948814868927,68.0829315185547,1.82897078990936,-2.44945406913757,68.2431030273438,1.78114855289459,-2.54854297637939 ,68.42822265625,1.74963080883026,-2.6382532119751,68.5577239990234,1.59853911399841,-2.52954077720642,68.3862228393555 ,1.68799185752869,-2.62005686759949,68.4959335327148,1.55760312080383,-2.19158935546875,67.5043563842773,1.83474671840668 ,-2.2549786567688,67.5419082641602,1.82864689826965,-2.26400327682495,67.695068359375,1.94132459163666,-2.20915555953979 ,67.6728439331055,1.95828580856323,-2.30236792564392,67.5678024291992,1.79972159862518,-2.31646919250488,67.7085952758789 ,1.90358877182007,-2.34178495407104,67.745491027832,1.84141647815704,-2.3300633430481,67.6228179931641,1.74513912200928 ,-2.33315491676331,67.6771469116211,1.68879354000092,-2.34013700485229,67.7836227416992,1.77808821201324,-2.17727994918823 ,67.4078979492188,1.65498471260071,-2.1150004863739,67.3318939208984,1.61912786960602,-2.25076627731323,67.3621215820313 ,1.53202605247498,-2.26577138900757,67.4494552612305,1.69418442249298,-2.28935408592224,67.4065933227539,1.55708074569702 ,-2.3228223323822,67.4442901611328,1.53922665119171,-2.30612254142761,67.4830856323242,1.6766813993454,-2.34880518913269 ,67.5227890014648,1.49410128593445,-2.33438611030579,67.5519332885742,1.62673580646515,-2.35062432289124,67.5983047485352 ,1.4495689868927,-2.33806562423706,67.6189117431641,1.57298302650452,-2.07442927360535,67.3096008300781,1.71361863613129 ,-2.0579662322998,67.1960144042969,1.64540350437164,-2.10641956329346,67.2131118774414,1.55172228813171,-2.07167983055115 ,67.2885665893555,1.79033148288727,-2.05283141136169,67.1832122802734,1.72549331188202,-2.24906277656555,67.233528137207 ,1.46235346794128,-2.37582874298096,67.4185333251953,1.25283980369568,-2.39941954612732,67.5392837524414,1.22935318946838 ,-2.05542635917664,66.9686737060547,1.61104881763458,-2.07500028610229,66.8846893310547,1.63040161132813,-2.10767555236816 ,66.8996429443359,1.57998013496399,-2.08964848518372,66.9766006469727,1.54973709583282,-2.12712836265564,66.8336639404297 ,1.64053738117218,-2.16737270355225,66.848876953125,1.591912150383,-2.82919478416443,68.3537750244141,0.74912703037262 ,-2.82582116127014,68.1682891845703,0.711574137210846,-2.86528205871582,68.1946105957031,0.634979069232941,-2.870121717453 ,68.4046325683594,0.683867454528809,-2.8079206943512,67.9082412719727,0.69920939207077,-2.84394145011902,67.9072952270508 ,0.615303337574005,-2.7978687286377,68.5528030395508,0.910629868507385,-2.81523394584656,68.4792175292969,0.811958968639374 ,-2.85784006118774,68.5469284057617,0.763306260108948,-2.83717560768127,68.6300964355469,0.879186511039734,-2.68762493133545 ,68.2952194213867,0.798494935035706,-2.6736946105957,68.4139099121094,0.8592609167099,-2.65705442428589,68.4872665405273 ,0.95888340473175,-2.67805957794189,68.1334381103516,0.766467034816742,-2.65559458732605,67.9030075073242,0.76434600353241 ,-2.73749089241028,68.2249603271484,1.0578727722168,-2.69270253181458,68.3444595336914,1.16103792190552,-2.71204996109009 ,68.2930679321289,1.21945893764496,-2.77048492431641,68.175422668457,1.13487410545349,-2.63352560997009,67.5799560546875 ,1.02114772796631,-2.67514133453369,67.7353134155273,1.02102887630463,-2.57827067375183,67.3931198120117,1.05846285820007 ,-2.64737629890442,67.3829498291016,1.01509618759155,-2.7053394317627,67.5997467041016,0.976101994514465,-2.68225765228271 ,68.2328872680664,1.24680197238922,-2.45428347587585,67.5438613891602,1.13627517223358,-2.43049907684326,67.4107666015625 ,1.15062642097473,-2.47426509857178,67.6697387695313,1.13195335865021,-2.67037224769592,67.9171600341797,1.083904504776 ,-2.65577864646912,68.0389175415039,1.26876902580261,-2.57660245895386,67.9674682617188,1.26852560043335,-2.29113817214966 ,67.7997055053711,1.58391487598419,-2.31978893280029,67.7765121459961,1.46570944786072,-2.27869296073914,67.8374938964844 ,1.65944612026215,-2.26554083824158,67.7095642089844,1.63142323493958,-2.2527186870575,67.6555862426758,1.52753853797913 ,-2.26989126205444,67.8075942993164,1.70676386356354,-2.30208992958069,68.2076568603516,1.70677042007446,-2.28334522247314 ,68.0717086791992,1.74444186687469,-2.39567375183105,68.4204559326172,1.54522335529327,-2.3316535949707,68.3273010253906 ,1.6405383348465,-2.62854361534119,68.5050277709961,1.2722384929657,-2.76896858215332,68.5801391601563,1.22542345523834 ,-2.7824718952179,68.6579818725586,1.22165441513062,-2.6289496421814,66.6553268432617,0.996821522712708,-2.56351447105408 ,66.5315704345703,1.15648031234741,-2.52996206283569,66.344856262207,1.09837055206299,-2.62781405448914,66.8359298706055 ,1.06403136253357,-2.55787539482117,66.7241516113281,1.21213781833649,-2.69484448432922,66.8672332763672,0.824295282363892 ,-2.68732142448425,66.9964828491211,0.903414249420166,-2.75447058677673,67.180046081543,0.6838738322258,-2.73578643798828 ,67.2482757568359,0.771346628665924,-2.60194778442383,67.2986831665039,0.862867832183838,-2.57602429389954,67.0869674682617 ,0.987282276153564,-2.53736877441406,66.9584503173828,1.13130593299866,-2.40219926834106,66.7655639648438,1.39116287231445 ,-2.49304604530334,66.9413528442383,1.30590271949768,-2.31333184242249,66.832275390625,1.52665853500366,-2.34573650360107 ,68.098030090332,1.64575755596161,-2.55503010749817,68.0456085205078,1.40283942222595,-2.533766746521,68.2806854248047 ,1.38818860054016,-2.57358312606812,68.3652420043945,1.36234879493713,-2.39148902893066,68.3013381958008,1.52705693244934 ,-2.59726929664612,67.2168426513672,1.11286020278931,-2.60383558273315,67.1575469970703,1.05543875694275,-2.64444184303284 ,67.3427810668945,0.951573252677917,-2.54468846321106,67.0989074707031,1.23312520980835,-2.55772280693054,67.0329055786133 ,1.18720102310181,-2.47545433044434,66.8608551025391,1.26244115829468,-2.48018312454224,67.0151901245117,1.34009265899658 ,-2.49003434181213,67.9725036621094,1.40447103977203,-2.24871706962585,66.9028015136719,1.52435684204102,-2.17792510986328 ,66.9602737426758,1.51861321926117,-2.36117172241211,67.2902297973633,1.26231455802917,-2.40379786491394,67.3136672973633 ,1.18727135658264,-2.31025338172913,67.2599411010742,1.36735677719116,-2.31600856781006,67.3657836914063,1.38705325126648 ,-2.69393849372864,67.5986022949219,0.917282581329346,-2.62711954116821,67.6268463134766,0.791336178779602,-2.77453708648682 ,67.6083908081055,0.709925651550293,-2.80314612388611,67.5798187255859,0.621610939502716,-2.77983713150024,67.5536193847656 ,0.535829544067383,-2.68887400627136,67.546272277832,0.493257313966751,-2.15245199203491,67.48681640625,1.88970601558685 ,-2.61377906799316,68.4213485717773,1.28537845611572,-2.33221817016602,68.2851104736328,1.61027157306671,-2.52214312553406 ,67.2510299682617,1.14891350269318,-2.46499300003052,67.1464996337891,1.25916314125061,-2.4064736366272,67.0748901367188 ,1.35577189922333,-2.68517780303955,67.8506240844727,1.03942346572876,-2.09176898002625,67.2419281005859,2.0933837890625 ,-2.09170913696289,67.0456008911133,2.05867290496826,0.675862431526184,70.4403457641602,5.01316404342651,-2.48955917358398 ,67.7451782226563,1.12540864944458,-2.20359206199646,67.1085662841797,1.84291386604309,-2.19012713432312,66.9737243652344 ,1.79033398628235,-2.20991563796997,67.2426681518555,1.89791309833527,-2.09453439712524,66.6815643310547,1.84149312973022 ,-2.17911314964294,66.9004058837891,1.75177586078644,0.0687145888805389,65.3117828369141,4.87543821334839,0.18367612361908 ,65.2635955810547,4.96013975143433,0.192545831203461,65.3534393310547,4.95118999481201,0.0785710513591766,65.417350769043 ,4.88140153884888,0.336994379758835,65.3211212158203,4.9930853843689,0.327651888132095,65.2403335571289,5.00603055953979 ,0.534512162208557,65.2889404296875,4.97892236709595,0.526553988456726,65.2026748657227,4.98258638381958,-0.109990268945694 ,65.3372421264648,4.74806261062622,-0.00115635991096497,65.3187561035156,4.83178281784058,-0.054225817322731,65.5103607177734 ,4.83793926239014,-0.185681968927383,65.6051254272461,4.77223634719849,0.395980924367905,65.3078460693359,4.99508666992188 ,0.386684328317642,65.2271118164063,5.00326728820801,-0.205163270235062,64.9350357055664,4.734947681427,-0.203319564461708 ,65.0073699951172,4.75313425064087,-0.276345819234848,64.9634017944336,4.62664127349854,-0.323267042636871,64.8058090209961 ,4.59223985671997,-0.327579498291016,64.9277038574219,4.58566236495972,-0.50356388092041,65.0628128051758,4.19650650024414 ,-0.491817593574524,64.9390640258789,4.35416173934937,-0.443149298429489,64.9613342285156,4.3975830078125,-0.36993744969368 ,65.0640411376953,4.43474769592285,-0.364744365215302,64.9534912109375,4.50175857543945,-0.268373221158981,65.0690689086914 ,4.54617214202881,-0.576209306716919,64.7099075317383,4.22456932067871,-0.603554666042328,64.4508361816406,4.17889499664307 ,-0.479074120521545,64.1535491943359,4.31969261169434,-0.429672032594681,64.7676544189453,4.46571350097656,-0.998232007026672 ,65.2647399902344,2.62271499633789,-0.781265616416931,65.1804504394531,3.44368028640747,-0.752240419387817,65.5978240966797 ,3.42348694801331,-0.92962121963501,65.7276992797852,2.60776495933533,-0.58737176656723,65.4784240722656,4.08026075363159 ,-0.583475053310394,65.915657043457,4.0708703994751,-0.707480788230896,66.0363235473633,3.40916109085083,-0.830390572547913 ,66.1534271240234,2.60511755943298,-0.741786599159241,64.3012237548828,3.70394229888916,-0.827998399734497,64.4452972412109 ,3.46786713600159,-0.947544813156128,64.2723922729492,2.87818431854248,-0.822114109992981,65.5357513427734,4.56504726409912 ,-1.08950412273407,65.1832885742188,4.39228105545044,-1.21951842308044,65.1810684204102,4.22904491424561,-1.33032810688019 ,65.2273254394531,3.87632966041565,-1.38224756717682,65.2686386108398,3.67232608795166,-1.64987790584564,65.4768676757813 ,3.2867226600647,-1.43295180797577,65.376823425293,3.47241187095642,-1.85966444015503,65.5411682128906,3.15919160842896 ,-1.96488916873932,65.6133270263672,2.94387912750244,-0.973559021949768,68.2446670532227,4.70256948471069,-1.02049541473389 ,68.1897964477539,4.61681318283081,-1.06434941291809,68.1228103637695,4.53617668151855,-0.590007543563843,68.3077087402344 ,4.90223217010498,-0.72842800617218,68.2762680053711,4.84922885894775,-0.940981149673462,68.1581344604492,4.69737195968628 ,-0.995903253555298,68.117546081543,4.6331353187561,-1.03320860862732,68.069221496582,4.57753133773804,-1.09829914569855 ,68.0365753173828,4.47835111618042,-1.05841517448425,68.0265045166016,4.52373600006104,0.249237090349197,68.0983352661133 ,4.85169363021851,0.127800285816193,68.1846084594727,4.86725997924805,-2.44647169113159,66.2694778442383,1.05975723266602 ,-2.36160278320313,66.3522186279297,1.02327644824982,0.233039170503616,66.6890335083008,5.58757209777832,0.248356133699417 ,66.8787384033203,5.41538524627686,0.469486087560654,67.1167907714844,5.5086350440979,0.47046759724617,67.2418670654297 ,5.4121208190918,-1.22514951229095,67.2148361206055,4.48621845245361,-1.42725384235382,67.3811721801758,4.3224048614502 ,-1.33798241615295,67.4984664916992,4.35396575927734,-0.214410543441772,63.382080078125,4.57266569137573,-0.176733359694481 ,63.2210464477539,4.41520738601685,-1.18296527862549,67.8958969116211,4.41951560974121,-1.20839166641235,67.9621887207031 ,4.43898963928223,-0.409916251897812,68.4089508056641,5.10556697845459,-0.237362772226334,67.8769073486328,4.81267929077148 ,-0.255254685878754,67.897575378418,4.76290845870972,-1.02679443359375,67.9520568847656,4.46889686584473,-0.992527961730957 ,67.9447250366211,4.44149971008301,-1.00401294231415,67.9494171142578,4.40595436096191,-1.00196027755737,67.9380111694336 ,4.41646957397461,-1.04129183292389,67.9330291748047,4.43989944458008,-1.0483146905899,67.9335632324219,4.4260139465332 ,-1.06923139095306,67.9194717407227,4.45858764648438,-1.04573953151703,67.9483795166016,4.43263816833496,-1.0139251947403 ,68.0074691772461,4.50251865386963,-0.990009665489197,68.0527420043945,4.55499219894409,-0.947413086891174,68.0283889770508 ,4.5327730178833,-0.973318338394165,68.0027770996094,4.48081588745117,-0.956710577011108,68.104850769043,4.60656881332397 ,-0.907191634178162,68.1515960693359,4.66468477249146,-0.873238205909729,68.1471939086914,4.63191032409668,-0.917339205741882 ,68.0944900512695,4.57990694046021,-0.708987832069397,68.2673873901367,4.80131673812866,-0.689555525779724,68.2583999633789 ,4.75340509414673,-0.581971883773804,68.2942047119141,4.84593439102173,-0.447553277015686,68.3020629882813,4.86063146591187 ,-0.451622754335403,68.2851867675781,4.79645013809204,-0.573941111564636,68.2806396484375,4.78963708877563,-0.31475442647934 ,68.281120300293,4.83769607543945,-0.329124331474304,68.2647171020508,4.76704216003418,-0.193136766552925,68.2300796508789 ,4.79123258590698,-0.213612675666809,68.2171020507813,4.71035766601563,-0.112608820199966,68.1355895996094,4.6355185508728 ,-0.186013326048851,68.3514709472656,5.14183807373047,-0.18675434589386,68.4225311279297,5.23559284210205,-0.451187640428543 ,69.5371398925781,4.87085676193237,-1.18403208255768,67.5705947875977,4.4710865020752,-1.29267728328705,67.6782913208008 ,4.37641668319702,-1.38265776634216,67.6513671875,4.30017375946045,-1.4575617313385,67.609748840332,4.21382236480713 ,-1.39131927490234,67.705680847168,4.29635667800903,-1.29264390468597,67.7282791137695,4.37633895874023,-1.15236067771912 ,68.1383743286133,4.55469751358032,-1.13733613491058,67.862419128418,4.44054317474365,-1.11288726329803,67.8705215454102 ,4.4455680847168,-1.07821583747864,67.8209838867188,4.48720645904541,-1.09485197067261,67.8670425415039,4.45601940155029 ,-1.1000372171402,67.8218536376953,4.47205066680908,-1.22510802745819,67.8049926757813,4.39712762832642,-1.29998290538788 ,67.8019409179688,4.34031867980957,-0.259932279586792,65.0047607421875,4.60047054290771,-0.262750178575516,64.9955215454102 ,4.55957126617432,-0.244600981473923,65.0229721069336,4.71917581558228,-0.255681931972504,65.6577682495117,4.72834491729736 ,-0.179298251867294,65.3393096923828,4.6863489151001,-0.341047585010529,65.7184677124023,4.63478422164917,-0.267672032117844 ,65.3511581420898,4.59057331085205,-0.180459335446358,65.0894927978516,4.63350772857666,-0.457273423671722,65.7878799438477 ,4.44790649414063,-0.384857714176178,65.3761215209961,4.44260740280151,0.525668621063232,65.1329040527344,5.20273685455322 ,0.120540618896484,65.202507019043,5.13624382019043,-0.026151716709137,65.1853408813477,5.05632019042969,-0.124853268265724 ,65.1389312744141,4.94539880752563,-0.324009239673615,64.983528137207,4.84973907470703,-0.28112405538559,65.0180969238281 ,4.90463590621948,-0.242152556777,65.0598373413086,4.86043071746826,-0.213738337159157,65.0627899169922,4.83013391494751 ,-0.192905440926552,65.0304260253906,4.79355049133301,-0.191578432917595,64.9678497314453,4.7730507850647,-0.359162360429764 ,64.3923187255859,4.60463619232178,-0.376596063375473,64.8579635620117,4.55342674255371,-0.407346963882446,64.8546981811523 ,4.53383636474609,-0.5311678647995,64.8800201416016,4.31810760498047,-0.480386972427368,64.8527069091797,4.4069972038269 ,-0.707698166370392,64.8196716308594,3.99317455291748,-0.408344089984894,64.8723983764648,4.52740621566772,-0.209093883633614 ,65.0713348388672,4.83990383148193,0.216405957937241,66.4818344116211,5.68653631210327,0.236346572637558,66.556770324707 ,5.66543197631836,0.460717171430588,66.1719589233398,5.94584178924561,0.446475178003311,66.1731948852539,5.89363384246826 ,0.502419114112854,66.169075012207,6.01105356216431,0.594793558120728,66.1596145629883,6.04629945755005,-0.100737050175667 ,63.1172065734863,4.34412145614624,-0.500222563743591,63.2063865661621,3.99288964271545,-0.364104866981506,63.1175727844238 ,3.94540190696716,-0.141184508800507,63.0437088012695,3.90080761909485,0.0887111127376556,62.9745178222656,3.8652503490448 ,0.211537271738052,63.0444030761719,4.45856428146362,0.0237708687782288,63.0873718261719,4.4538459777832,-1.42223107814789 ,64.5043640136719,3.36612296104431,-1.38911879062653,64.3296508789063,3.35790133476257,-1.20891559123993,63.8583641052246 ,3.27533435821533,-1.28675091266632,64.0161285400391,3.29017400741577,-0.686650097370148,63.6125526428223,4.48471069335938 ,-0.600071787834167,63.4264526367188,4.32255554199219,-0.497820943593979,63.2878799438477,4.18092155456543,-0.407934963703156 ,63.1828956604004,4.10707521438599,-0.263942271471024,63.0995025634766,4.05776023864746,-0.026168629527092,63.0137100219727 ,4.01293087005615,0.200198352336884,62.9460601806641,3.96981835365295,-1.22186529636383,63.9980354309082,3.55282139778137 ,-1.34261906147003,64.1619567871094,3.33094644546509,-0.316497594118118,65.9085998535156,4.86637306213379,0.124538689851761 ,65.9196166992188,5.23827791213989,0.124102115631104,65.908805847168,5.19611930847168,-0.736087679862976,65.537353515625 ,4.63726377487183,-0.185255855321884,64.904670715332,5.07743406295776,-0.0432551503181458,64.882209777832,5.23776292800903 ,-0.257672071456909,65.0048141479492,4.55685949325562,-0.859925270080566,64.7443389892578,3.3762354850769,-1.01947462558746 ,64.7168502807617,2.64527273178101,-1.64008462429047,64.293586730957,2.55414342880249,0.23989400267601,68.1633071899414 ,5.17229270935059,0.0469035506248474,68.2709426879883,5.16547060012817,0.131891995668411,66.6772384643555,5.44688415527344 ,0.439351290464401,67.8868865966797,4.88458061218262,0.181970685720444,67.4981689453125,4.82476377487183,0.352258652448654 ,67.3958129882813,5.17973613739014,0.298032134771347,67.2773361206055,5.20969247817993,-0.398242056369781,68.650390625 ,5.26332569122314,-0.806961536407471,68.8160171508789,5.12768363952637,-1.12555575370789,68.7801895141602,4.8606653213501 ,-1.26904928684235,68.6233596801758,4.6575722694397,-1.32087528705597,68.4356689453125,4.48058128356934,0.723448395729065 ,67.8533172607422,5.28542041778564,0.634040713310242,67.8667144775391,5.23758697509766,0.533391118049622,67.8840103149414 ,5.0360255241394,0.425834208726883,67.9190979003906,4.88724946975708,0.256425350904465,67.8387145996094,4.80163764953613 ,0.577364087104797,67.875862121582,5.14433765411377,-1.19939863681793,67.7417373657227,4.43186807632446,-1.30322372913361 ,67.6050643920898,4.37825393676758,-1.37182521820068,67.6045379638672,4.31879234313965,-1.42154228687286,67.5515365600586 ,4.27276706695557,-1.18892192840576,67.6365585327148,4.45693063735962,-1.2075526714325,67.6961288452148,4.42678356170654 ,0.0146072804927826,68.2122268676758,4.87960386276245,0.367377370595932,66.2688446044922,5.80207395553589,0.444115966558456 ,66.1817398071289,5.86155652999878,0.470569044351578,66.1363906860352,5.86054944992065,0.456080108880997,66.0712661743164 ,5.70314168930054,0.00119155645370483,65.9672470092773,5.24612140655518,0.0713672339916229,65.955696105957,5.25750255584717 ,0.105267703533173,66.0630264282227,5.28856992721558,0.207570225000381,66.2081146240234,5.21952438354492,0.196638345718384 ,66.1596984863281,5.1656756401062,0.251285821199417,66.159553527832,5.21587753295898,-1.52112138271332,67.4812774658203 ,4.2046365737915,-1.54435980319977,67.5658187866211,4.10998916625977,-1.40774393081665,67.797233581543,4.23939990997314 ,-1.69101858139038,67.6965103149414,3.9439685344696,-1.65526449680328,67.7714920043945,3.87997126579285,-1.92212677001953 ,68.0300598144531,2.96836996078491,-1.94505167007446,67.5534439086914,3.29091906547546,-1.6261522769928,67.8814544677734 ,3.90463185310364,-1.59110057353973,67.9744415283203,3.92852735519409,0.287541657686234,67.9501724243164,4.80866003036499 ,0.601750493049622,67.6797180175781,5.29253816604614,0.700850963592529,67.6643142700195,5.33945846557617,0.533695816993713 ,67.6939697265625,5.19175720214844,0.256553322076797,67.4606246948242,4.98889303207397,0.363055914640427,67.4773635864258 ,5.13336992263794,0.422433763742447,67.4761352539063,5.19667863845825,0.447697192430496,67.4347915649414,5.25947570800781 ,-0.234858900308609,68.7217788696289,5.30162906646729,-0.380013138055801,68.9322204589844,5.23441600799561,-0.19159409403801 ,68.5782623291016,5.33443927764893,0.611650705337524,69.025032043457,5.25725412368774,-0.0934067666530609,69.0297393798828 ,5.23564195632935,-0.236638098955154,69.0935440063477,5.12780380249023,0.242130964994431,69.4098815917969,5.304123878479 ,-0.791982531547546,69.6056900024414,4.68712282180786,0.67888879776001,69.3228073120117,5.25025939941406,-0.503783106803894 ,65.9258346557617,4.74787187576294,-0.290703296661377,66.0148468017578,4.86166954040527,-0.236907988786697,65.411262512207 ,5.0018482208252,-0.355312466621399,65.3383560180664,4.9142689704895,-1.17474091053009,68.0606689453125,4.50648593902588 ,-1.24219930171967,68.1220626831055,4.46310710906982,-1.37572658061981,68.2389984130859,4.36748313903809,-1.3957325220108 ,68.2586822509766,4.32999277114868,-1.38216733932495,68.4170150756836,4.36642837524414,-1.42205548286438,68.2507705688477 ,4.26028251647949,-1.41753029823303,68.4400863647461,4.31222629547119,-1.4866498708725,68.27197265625,4.11681365966797 ,-1.46908164024353,68.4764251708984,4.19546127319336,0.0572300851345062,69.4563446044922,5.22767162322998,-0.0102332234382629 ,69.7210998535156,5.15357160568237,-0.0220333337783813,70.0018997192383,5.02607250213623,-0.0343590080738068,70.2648239135742 ,4.93354511260986,0.344821780920029,69.0631103515625,5.3681001663208,-1.34608554840088,69.3578491210938,3.73755097389221 ,-1.37849032878876,69.7391204833984,3.18851804733276,-1.31606471538544,69.7685699462891,3.37895488739014,-1.25033664703369 ,69.8133697509766,3.59308171272278,-1.21369969844818,69.6207275390625,3.85165095329285,0.423030167818069,68.4400939941406 ,5.4689826965332,0.194957137107849,68.0033798217773,4.80440950393677,0.122356653213501,68.0959701538086,4.81445550918579 ,-0.838517904281616,66.8712310791016,4.67926502227783,-1.06327414512634,66.7840118408203,4.47974014282227,-2.60383653640747 ,62.1017799377441,0.254392862319946,-2.33156847953796,62.5004920959473,0.327738046646118,-2.05626964569092,61.8457069396973 ,1.17941951751709,-2.1639678478241,61.142276763916,1.32716286182404,-0.771766066551209,60.0984153747559,2.80394649505615 ,-0.939229965209961,60.3516654968262,2.50065851211548,-0.310370951890945,60.2703285217285,2.32014560699463,-1.56072759628296 ,60.1842727661133,2.62462735176086,-0.949292778968811,59.9602317810059,2.90389752388,-2.92457056045532,60.5393753051758 ,1.63607156276703,-2.75430107116699,61.2119789123535,0.789340019226074,-2.44197249412537,60.5091209411621,1.91451597213745 ,-1.59654784202576,60.4476547241211,2.28525972366333,-2.58778691291809,60.2590637207031,2.32570648193359,-2.91699957847595 ,61.8118133544922,0.140143811702728,-2.03705453872681,64.9678649902344,-1.31896328926086,-1.87585914134979,64.9871215820313 ,-1.8019540309906,-2.11881303787231,64.5967330932617,-1.20581030845642,-1.94959533214569,64.6411895751953,-1.80150365829468 ,-1.43170213699341,64.6117782592773,-2.23662328720093,-1.24593210220337,64.9559478759766,-2.24559617042542,-0.540337324142456 ,64.896110534668,-2.54498171806335,-0.671869218349457,64.5543212890625,-2.60237717628479,0.0126664638519287,64.8239212036133 ,-2.72488737106323,0.5079665184021,65.3369598388672,-2.61204290390015,0.546129822731018,65.7667388916016,-2.32232403755188 ,-2.20329976081848,64.9069519042969,-0.739322066307068,-2.18769431114197,64.462272644043,-0.677212119102478,0.463694781064987 ,64.7991104125977,-2.77165102958679,-2.27892565727234,64.3324508666992,-1.07254493236542,-2.0687301158905,64.4105453491211 ,-1.73562741279602,-1.58865058422089,64.3944396972656,-2.31272482872009,-0.803160071372986,64.3040618896484,-2.61304879188538 ,-2.17260718345642,64.1474533081055,-0.634068369865417,-2.23544073104858,68.3914413452148,1.6720415353775,-2.17444276809692 ,68.3635177612305,1.75480437278748,-2.36962985992432,68.4567031860352,1.23169255256653,-2.25269293785095,68.4188461303711 ,1.27125549316406,-2.42794322967529,68.6118011474609,1.21498787403107,-2.1344735622406,68.3156204223633,0.896306276321411 ,-2.11035704612732,68.1960906982422,0.642302989959717,-2.10437488555908,67.963981628418,0.454863429069519,-2.25228142738342 ,68.4410018920898,1.77542805671692,-2.1859073638916,68.3270263671875,1.83723652362823,-2.30826497077942,68.5220718383789 ,1.64130914211273,-2.2535080909729,68.2871856689453,0.984555840492249,-2.12622618675232,68.102180480957,0.832027614116669 ,-2.11575055122375,67.8841934204102,0.746406614780426,-2.07402586936951,67.2652893066406,0.737824559211731,-2.09191298484802 ,67.5917205810547,0.344757199287415,-2.14096450805664,67.9786911010742,-0.321571588516235,-2.25128054618835,68.1278533935547 ,0.880027770996094,-2.2435462474823,67.8972549438477,0.804336190223694,-2.21857976913452,67.6182479858398,0.770642638206482 ,-2.09578418731689,67.5765914916992,0.710018455982208,-2.18941140174866,67.295768737793,0.797770977020264,-2.33974528312683 ,67.0231170654297,0.866563677787781,-2.13609290122986,66.8364105224609,1.03708910942078,-2.11306619644165,66.7260665893555 ,1.1648668050766,-3.31807923316956,61.4019966125488,0.0489473938941956,-3.42274594306946,60.5364532470703,1.49111914634705 ,-3.62020564079285,60.3799934387207,2.00422358512878,0.210002303123474,61.6859016418457,-3.54641151428223,-0.353588879108429 ,61.750129699707,-3.50249814987183,-1.02169609069824,62.0449752807617,-3.41312146186829,-1.83803629875183,62.3993988037109 ,-2.93643712997437,-2.82967305183411,63.0794563293457,-2.32267451286316,-3.1057333946228,63.1476707458496,-1.548499584198 ,-3.29211664199829,62.7537803649902,-0.629818201065063,-1.75604820251465,67.4462509155273,3.88761067390442,0.336564511060715 ,66.9118804931641,5.50027084350586,-0.711230635643005,65.6814422607422,4.64888429641724,-0.645659685134888,65.7985458374023 ,4.70442295074463,-0.430258810520172,64.9535446166992,4.65565013885498,-0.261302918195724,65.0195770263672,4.75829744338989 ,0.369330316781998,63.6228065490723,-2.97760391235352,0.400962799787521,64.0273132324219,-2.9543445110321,-0.137128278613091 ,68.2986831665039,4.91825723648071,2.77166199684143,63.0941047668457,-2.39661741256714,2.63027358055115,63.4563598632813 ,-2.50340533256531,3.06407999992371,63.4481048583984,-1.86804676055908,3.14984703063965,63.1162910461426,-1.89971852302551 ,2.58670663833618,63.8314628601074,-2.48425579071045,3.00956273078918,63.7738456726074,-1.80622553825378,3.18711543083191 ,63.6541328430176,-1.13377809524536,3.22662782669067,63.3706436157227,-1.22358846664429,3.37862420082092,63.0866508483887 ,-1.37140333652496,2.98798322677612,62.7669372558594,-2.4309287071228,3.37319898605347,62.8567924499512,-1.96693086624146 ,3.53397512435913,62.8022232055664,-1.52096652984619,0.846301555633545,63.6863899230957,-2.96940112113953,0.928462862968445 ,63.2999114990234,-2.99739456176758,1.03355467319489,62.9106292724609,-2.99142003059387,0.457932859659195,62.870662689209 ,-3.11936116218567,1.85002052783966,63.4105224609375,-2.84256649017334,1.99884569644928,63.0078659057617,-2.81859064102173 ,1.72941708564758,63.8114891052246,-2.8133008480072,3.13575959205627,59.6181221008301,2.40139698982239,3.4752357006073 ,59.792423248291,2.01754117012024,2.61229562759399,65.9718399047852,-1.594557762146,2.79375314712524,65.5336303710938 ,-1.58723974227905,2.30689334869385,65.6141204833984,-1.78598785400391,2.0583975315094,66.03759765625,-1.77751684188843 ,2.97375583648682,65.0641708374023,-1.53472137451172,2.6017963886261,65.1482315063477,-1.96074271202087,1.98257291316986 ,65.2316513061523,-2.24446511268616,1.78643119335175,65.677848815918,-2.10593962669373,1.66918849945068,66.0922393798828 ,-1.98907852172852,1.25248622894287,65.7162246704102,-2.283527135849,1.15729212760925,66.0973815917969,-2.03909087181091 ,1.46467399597168,65.2478103637695,-2.45371031761169,0.895084381103516,65.3434982299805,-2.52855086326599,0.849041104316711 ,65.7681503295898,-2.36698508262634,0.833850264549255,64.0731582641602,-2.89877438545227,0.868939161300659,64.3996887207031 ,-2.75916123390198,3.43512058258057,62.534309387207,-0.555885553359985,3.61170029640198,62.251335144043,-0.713178634643555 ,3.62065267562866,62.6069641113281,-1.09054219722748,3.46297883987427,62.8803291320801,-0.932440757751465,3.04286408424377 ,63.3514938354492,-0.403999030590057,3.24094867706299,62.8811912536621,-0.446427464485168,3.27729225158691,63.1887054443359 ,-0.809061408042908,3.10877823829651,63.4842834472656,-0.736767888069153,3.20282506942749,65.6953277587891,-0.633383631706238 ,3.13929629325867,65.258918762207,-0.415696263313293,3.10375952720642,65.3865051269531,-1.04536521434784,3.03015112876892 ,65.8255081176758,-1.21753859519959,3.13037347793579,64.7489776611328,-0.403037965297699,3.18739819526672,64.9313507080078 ,-0.878572702407837,3.24098968505859,66.2357025146484,-0.675608038902283,2.9856231212616,66.3857040405273,-1.23000144958496 ,2.59243869781494,66.4537811279297,-1.60253596305847,3.43516945838928,68.4953765869141,2.93542647361755,3.64341020584106 ,68.7033767700195,2.52767944335938,1.67240488529205,70.9220733642578,4.61333656311035,1.35996758937836,70.8887329101563 ,4.74589204788208,1.77693021297455,71.216064453125,4.3246636390686,1.47888708114624,71.2272033691406,4.45492839813232 ,2.30322051048279,70.9339447021484,4.20990991592407,1.98278081417084,70.9447708129883,4.42774534225464,2.35416674613953 ,71.2663192749023,3.84975266456604,2.05257272720337,71.2204666137695,4.14069652557373,1.84807145595551,71.5248184204102 ,3.93045210838318,2.13462781906128,71.4271011352539,3.86482501029968,3.25662088394165,70.7579803466797,2.95692658424377 ,3.38463449478149,70.4653244018555,2.71709227561951,3.18304753303528,70.5722732543945,3.23227119445801,3.28323173522949 ,70.3111953735352,3.04273319244385,3.26597952842712,69.9390258789063,2.96563172340393,3.48145318031311,70.0305786132813 ,2.41113090515137,3.01352572441101,70.7729568481445,3.45452928543091,3.07973289489746,71.0036239624023,3.20587682723999 ,2.87021660804749,71.1267395019531,3.42976593971252,2.84779906272888,70.8711776733398,3.67481565475464,3.45156717300415 ,68.8726272583008,3.00204420089722,1.53275537490845,71.5952072143555,4.05539703369141,3.70240545272827,67.952880859375 ,1.83304941654205,3.81758189201355,68.67919921875,1.75303256511688,3.44886875152588,68.2093963623047,2.75865435600281 ,1.76600730419159,67.2480773925781,-2.16408967971802,1.72176253795624,66.8199768066406,-2.07928395271301,1.19753456115723 ,66.8563919067383,-2.20012879371643,1.23600828647614,67.2891235351563,-2.29322600364685,1.69368076324463,66.4940795898438 ,-2.02104258537292,1.17020428180695,66.5240249633789,-2.15323305130005,3.78381276130676,68.0296020507813,1.1541588306427 ,3.90121912956238,68.6965560913086,0.956952571868896,3.76204657554626,70.0629730224609,0.696854710578918,3.74036574363709 ,70.0416870117188,0.113939613103867,3.63069581985474,70.7143020629883,0.125515431165695,3.7172954082489,70.7285079956055 ,0.693414866924286,3.56128549575806,70.058952331543,-0.510423541069031,3.50447249412537,70.7078247070313,-0.464096665382385 ,3.30403637886047,71.1632614135742,-0.389826118946075,3.44547486305237,71.2241973876953,0.149715274572372,3.51787281036377 ,71.2697067260742,0.716017782688141,3.36593508720398,70.9851684570313,2.53393077850342,3.15651845932007,71.2956085205078 ,2.69934105873108,3.48455619812012,71.1741180419922,1.67420899868011,3.23799276351929,71.5311584472656,1.73876643180847 ,2.93440222740173,71.7987060546875,1.82964313030243,2.86609172821045,71.5268402099609,2.99194097518921,2.56718611717224 ,71.4180908203125,3.48156476020813,2.8948769569397,71.2851181030273,3.23862838745117,3.28889083862305,70.8849182128906 ,2.78930521011353,3.1189181804657,71.1584320068359,3.01724481582642,3.63068342208862,70.6360549926758,1.61095190048218 ,3.47237133979797,70.5504837036133,2.41710424423218,3.38644814491272,70.7088851928711,2.6184709072113,3.69685077667236 ,70.0055541992188,1.57964885234833,3.49112677574158,69.3208389282227,2.35678911209106,3.74448370933533,69.3097534179688 ,1.64186108112335,3.83206868171692,69.3102035522461,0.769378960132599,3.82193875312805,69.1562118530273,0.138535410165787 ,3.87746357917786,68.6364898681641,0.55125892162323,3.84130167961121,68.4185638427734,0.248314082622528,3.79534506797791 ,68.5724639892578,-0.149668216705322,3.59410548210144,68.3596725463867,-0.692980408668518,3.58642220497131,69.22021484375 ,-0.574200391769409,2.88847541809082,70.0564346313477,-1.5543417930603,3.28233027458191,70.0613479614258,-1.09098148345947 ,3.27779316902161,69.229606628418,-1.19395482540131,2.87084484100342,69.2186584472656,-1.67915177345276,3.22291541099548 ,68.3775405883789,-1.24711942672729,2.81288981437683,68.3739013671875,-1.72548604011536,1.44374704360962,70.0913619995117 ,-2.15053725242615,1.39350318908691,69.2714309692383,-2.34682774543762,1.97094690799713,70.0736083984375,-2.03468585014343 ,1.93484580516815,69.2466201782227,-2.21723556518555,1.8824747800827,68.4258804321289,-2.29632949829102,1.33679258823395 ,68.46337890625,-2.43480634689331,1.47740232944489,70.7777404785156,-1.86263632774353,1.98017990589142,70.7482147216797 ,-1.75833988189697,1.50036382675171,71.3355255126953,-1.46908926963806,1.97681868076324,71.2807006835938,-1.38598275184631 ,2.04763340950012,72.2877502441406,0.834140300750732,2.01885151863098,72.2057418823242,0.218309640884399,1.56952464580536 ,72.337158203125,0.24094945192337,1.5929172039032,72.4340896606445,0.87183153629303,1.98563992977142,71.9797439575195 ,-0.372149109840393,1.53915750980377,72.0976638793945,-0.370075106620789,2.27466726303101,71.5804061889648,3.53008103370667 ,2.41497802734375,71.7373428344727,3.0770857334137,1.99079954624176,71.8846054077148,3.17736721038818,1.92208516597748 ,71.7022018432617,3.60366559028625,1.64213752746582,72.3024368286133,2.12799048423767,2.05538964271545,72.182975769043 ,2.05599641799927,1.59609460830688,71.9966735839844,3.28433179855347,2.54851698875427,66.7789077758789,-1.53792715072632 ,2.95708656311035,66.7296829223633,-1.15898084640503,2.64293694496155,67.1767807006836,-1.62114572525024,3.02803945541382 ,67.140510559082,-1.16226232051849,3.39273285865784,67.1055374145508,-0.632635354995728,3.34214329719543,66.5973663330078 ,-0.720301151275635,2.90744972229004,71.8982849121094,0.758566498756409,3.2385573387146,71.6321182250977,0.735273957252502 ,3.17576289176941,71.5590744018555,0.16808870434761,2.85406494140625,71.8030242919922,0.18050143122673,3.08760619163513 ,71.4547348022461,-0.33892822265625,2.79656958580017,71.6448059082031,-0.357277631759644,1.56994235515594,71.796516418457 ,3.7176206111908,3.28240466117859,69.3491592407227,2.9119086265564,2.78750729560852,71.1787643432617,-1.08255004882813 ,3.09195494651794,71.1411590576172,-0.805961489677429,3.21514344215393,70.7022857666016,-0.961730718612671,2.84587121009827 ,70.7086029052734,-1.34892511367798,2.99508047103882,71.3809432983398,-0.669953227043152,2.75786018371582,71.4705963134766 ,-0.774890303611755,1.97513401508331,71.6813049316406,-0.915417790412903,1.51852643489838,71.7696380615234,-0.955827593803406 ,2.51590299606323,72.031005859375,1.95417010784149,2.50209856033325,72.1378707885742,0.794477701187134,2.45773005485535 ,72.0231399536133,0.197701543569565,2.41701221466064,71.8243026733398,-0.368116199970245,2.40306186676025,71.5761642456055 ,-0.855907320976257,2.41083145141602,71.2268676757813,-1.26651608943939,2.44847583770752,70.0606231689453,-1.85001230239868 ,2.43527793884277,70.7245407104492,-1.60078120231628,2.42250514030457,69.2265930175781,-2.00551891326904,2.37029147148132 ,68.3930358886719,-2.06755375862122,2.1752552986145,66.7966842651367,-1.87803864479065,2.23217368125916,67.2107467651367 ,-1.95042085647583,2.11980867385864,66.4858322143555,-1.79982614517212,1.82443225383759,67.7700271606445,-2.26232051849365 ,1.28373324871063,67.8126373291016,-2.39774370193481,2.7345130443573,67.7007904052734,-1.69548153877258,2.30476355552673 ,67.7305908203125,-2.03636646270752,3.1234712600708,67.6870727539063,-1.21527004241943,3.42609477043152,67.7113952636719 ,-0.779530763626099,3.80768942832947,68.2063293457031,-0.0221836566925049,3.72419857978821,67.9380645751953,-0.275116086006165 ,3.29296040534973,65.8929443359375,0.178759336471558,3.18487477302551,65.3272018432617,0.237231612205505,3.42458319664001 ,66.6893692016602,0.255840361118317,3.30981183052063,66.2866516113281,0.201219111680985,1.17992103099823,62.429141998291 ,-3.17016243934631,2.13867163658142,62.6163024902344,-2.8279116153717,0.559984564781189,62.3390464782715,-3.28172254562378 ,3.02245187759399,67.7061004638672,4.22892618179321,2.86418676376343,67.5733489990234,4.32109785079956,3.08335709571838 ,67.7418212890625,4.144850730896,2.92042183876038,67.6620712280273,4.32303619384766,1.04059529304504,66.1364822387695 ,5.37642431259155,1.08818566799164,66.1918182373047,5.32113075256348,0.952670454978943,66.2831268310547,5.55756616592407 ,0.964439511299133,66.2054443359375,5.57583618164063,0.972594499588013,66.1277236938477,5.61189317703247,0.907071590423584 ,66.2090911865234,5.81105995178223,0.848858714103699,66.2134170532227,5.80835962295532,0.990434408187866,66.1534957885742 ,5.83173322677612,0.939881920814514,66.1439819335938,5.8337869644165,1.33801198005676,66.0951766967773,5.4610013961792 ,1.31371986865997,66.1135635375977,5.4366307258606,1.32314586639404,66.0145721435547,5.3075270652771,1.36248826980591 ,65.984992980957,5.36341142654419,1.16821324825287,66.2176132202148,5.67701053619385,1.19959616661072,66.2241516113281 ,5.68081045150757,1.08892726898193,66.1012878417969,5.29095935821533,1.27456474304199,66.1795272827148,5.48362493515015 ,1.2969925403595,66.1613845825195,5.51824808120728,0.895212769508362,66.2304382324219,5.67458629608154,0.883696556091309 ,66.2878265380859,5.66853427886963,1.05750358104706,66.2238006591797,5.77599811553955,1.61541330814362,67.9780654907227 ,4.79207324981689,1.48483347892761,67.8829650878906,4.77213430404663,1.66513204574585,67.9361038208008,4.78252983093262 ,1.39549088478088,67.8399353027344,4.77230978012085,1.47990763187408,67.7919158935547,4.80125713348389,1.55855202674866 ,67.8288879394531,4.788649559021,1.7188355922699,68.0638198852539,4.84649801254272,1.76975238323212,68.0085372924805 ,4.80823421478271,1.88238084316254,68.0819931030273,4.83967161178589,1.84954607486725,68.1613540649414,4.88833522796631 ,2.01740455627441,68.1148223876953,4.87205505371094,2.16267466545105,68.1177825927734,4.88001871109009,2.16110157966614 ,68.1770324707031,4.89240455627441,2.0064640045166,68.1895217895508,4.89453840255737,1.44177711009979,67.7627487182617 ,4.78806447982788,1.45658624172211,67.7608642578125,4.72944355010986,1.49655413627625,67.7859954833984,4.72255802154541 ,1.44505512714386,67.7402877807617,4.77763557434082,1.50603425502777,67.7715835571289,4.66046762466431,2.81941747665405 ,67.6532592773438,4.37944507598877,2.80845141410828,67.7050094604492,4.4054799079895,2.76364207267761,67.6946411132813 ,4.37451553344727,2.76965069770813,67.6132354736328,4.3663182258606,1.57247996330261,67.8204727172852,4.69046926498413 ,1.67675852775574,67.9105834960938,4.67156410217285,1.78256213665009,67.9964065551758,4.70338153839111,1.71295940876007 ,67.9023132324219,4.53851175308228,2.72553372383118,67.6013565063477,4.37623929977417,2.71776938438416,67.6938323974609 ,4.41837549209595,2.12454390525818,67.5096969604492,4.82131147384644,1.93376386165619,67.5508728027344,4.81489753723145 ,1.80381166934967,67.7050094604492,4.75677299499512,1.75186026096344,67.6921310424805,4.78685522079468,1.86624801158905 ,67.6840209960938,4.80912971496582,1.68831598758698,67.6511459350586,4.75817966461182,1.81566560268402,67.594367980957 ,4.80096960067749,1.94054734706879,67.6641006469727,4.85678577423096,1.6259890794754,67.5726852416992,4.77385330200195 ,1.56445646286011,67.7168655395508,4.77339839935303,1.46761655807495,67.6678161621094,4.77723121643066,1.38416063785553 ,67.6996536254883,4.77788639068604,1.50879895687103,67.7301864624023,4.78449964523315,1.33086597919464,67.719108581543 ,4.78166580200195,2.56548237800598,67.5324020385742,4.60376691818237,2.66723799705505,67.4825439453125,4.453782081604 ,1.63220357894897,67.7453384399414,4.76484489440918,1.57864618301392,67.7543640136719,4.77227354049683,1.68848466873169 ,67.7535629272461,4.72987937927246,1.64251971244812,67.7787399291992,4.73566055297852,1.58031296730042,67.7742691040039 ,4.69857931137085,1.54594111442566,67.7606811523438,4.75637054443359,1.89201819896698,67.3553237915039,4.77216386795044 ,2.10411429405212,67.2825393676758,4.7396993637085,2.33040165901184,67.4997177124023,4.76993036270142,2.63719081878662 ,67.3552932739258,4.50041532516479,1.76297199726105,67.4556732177734,4.78083467483521,1.47983765602112,67.3121185302734 ,4.78161907196045,1.59192776679993,67.2046203613281,4.76624822616577,1.77153718471527,67.1205902099609,4.74773836135864 ,2.52664160728455,67.6587448120117,4.68369770050049,2.32218456268311,67.6141052246094,4.82337379455566,2.13513088226318 ,67.6266403198242,4.85408782958984,1.41478621959686,67.6599044799805,4.77605009078979,1.35092687606812,67.6474914550781 ,4.78986024856567,2.64810514450073,67.6008148193359,4.53010749816895,2.67109847068787,67.642822265625,4.43653106689453 ,2.63573479652405,67.699348449707,4.52756357192993,2.60309267044067,67.6876831054688,4.59368944168091,1.56230914592743 ,64.7970581054688,4.62223815917969,1.57280242443085,64.7770004272461,4.55793142318726,1.53890252113342,64.7756271362305 ,4.5918984413147,1.5733095407486,64.7759780883789,4.48884582519531,1.55842363834381,64.7646331787109,4.54476022720337 ,1.52267169952393,64.8155517578125,4.6362829208374,1.50113117694855,64.8684310913086,4.74321937561035,1.16122794151306 ,65.0884170532227,5.14359521865845,1.16995275020599,65.044792175293,5.16988229751587,0.948817014694214,65.1112442016602 ,5.24987411499023,0.9472975730896,65.0725479125977,5.28148555755615,1.59930920600891,64.80029296875,4.69645118713379 ,1.617396235466,64.7488555908203,4.73600006103516,1.67197442054749,64.7575378417969,4.63868093490601,1.54642188549042 ,64.7513046264648,4.86179351806641,1.6091810464859,64.6602401733398,4.80571365356445,1.79511940479279,64.7023315429688 ,4.64403676986694,1.10575973987579,65.0869903564453,5.04435682296753,1.13507974147797,65.1160659790039,5.089515209198 ,1.20430386066437,65.0855331420898,5.02939796447754,1.16926229000092,65.0526809692383,4.99482154846191,1.30799674987793 ,65.0298690795898,5.00864553451538,1.26975691318512,65.0470809936523,4.96644496917725,1.24305903911591,64.9978332519531 ,4.95216512680054,1.31903052330017,65.0139694213867,4.88756418228149,1.34949314594269,64.9039611816406,5.06307601928711 ,1.4702981710434,64.882926940918,4.92383337020874,1.32103002071381,65.0060195922852,5.0321888923645,0.950963616371155 ,64.9252700805664,5.31096935272217,0.987527966499329,64.8332901000977,5.33049821853638,1.20135700702667,64.9142684936523 ,5.21407079696655,0.935256481170654,65.1235504150391,5.13924503326416,0.946526408195496,65.1388092041016,5.19374752044678 ,0.79563307762146,65.0841751098633,5.31249284744263,0.797460436820984,65.1235961914063,5.28180932998657,1.42578208446503 ,64.9698181152344,4.89240550994873,1.39220714569092,64.9700241088867,4.85443782806396,0.792876124382019,64.9543151855469 ,5.34882354736328,0.793111681938171,64.8629302978516,5.37787103652954,0.797000050544739,65.1455230712891,5.22485256195068 ,0.791859984397888,65.1421661376953,5.16695880889893,1.30230617523193,64.9390640258789,4.86823749542236,1.35855317115784 ,64.9611053466797,4.81103515625,1.34803688526154,64.8832244873047,4.79251050949097,0.90659487247467,63.1273765563965 ,4.58954286575317,0.953348994255066,63.336353302002,4.80861186981201,0.984978079795837,63.6115493774414,5.0362606048584 ,0.775317549705505,63.6444320678711,5.10200548171997,0.782387137413025,63.8541603088379,5.0748176574707,0.982545137405396 ,63.8120765686035,5.01916217803955,0.960399866104126,63.9836273193359,4.968834400177,0.77299952507019,64.0293655395508 ,5.01205444335938,1.13187718391418,64.0773544311523,4.85964822769165,0.904144406318665,64.1760025024414,4.94052267074585 ,0.867566585540771,62.9883422851563,4.32515239715576,0.662752270698547,62.9579086303711,4.24405288696289,1.68722319602966 ,63.2029724121094,3.79156351089478,1.55583417415619,63.1098403930664,3.74550795555115,1.38694024085999,63.0472755432129 ,3.71653580665588,1.20429515838623,63.8601112365723,4.8340802192688,1.8569747209549,63.3113479614258,3.87934565544128 ,1.98933351039886,63.4412536621094,3.87631845474243,1.79896724224091,63.4291114807129,4.22676181793213,1.67343926429749 ,63.2597351074219,4.14480829238892,1.51965522766113,63.1451263427734,4.02508878707886,0.743568658828735,63.356029510498 ,4.86756324768066,0.707159996032715,63.1264381408691,4.62668037414551,1.23128128051758,63.4571571350098,4.79325723648071 ,1.25696194171906,63.6821022033691,4.8807520866394,0.750115871429443,64.2161331176758,4.97442626953125,0.95448911190033 ,68.2689056396484,5.40696430206299,1.10210275650024,68.0186996459961,5.24388742446899,1.11403250694275,68.0646057128906 ,5.24360227584839,1.00505876541138,68.0947189331055,5.32169723510742,0.988877415657043,67.9810104370117,5.30956077575684 ,1.07680690288544,68.6615905761719,5.42346000671387,1.17063009738922,68.0030288696289,5.14911937713623,1.21258020401001 ,67.992301940918,5.04708242416382,1.21008718013763,68.0745315551758,5.08662796020508,0.863151907920837,66.0218658447266 ,5.8984203338623,0.878515362739563,66.0476531982422,5.94400930404663,0.811168670654297,66.0340957641602,5.96556520462036 ,0.796718120574951,65.9958038330078,5.92510843276978,1.18504989147186,66.5405960083008,5.81291246414185,1.18261909484863 ,66.4677200317383,5.83124494552612,1.16803658008575,66.3756103515625,5.83031034469604,0.849136829376221,65.8758163452148 ,5.59448528289795,0.958329796791077,65.9928283691406,5.62665700912476,1.18129503726959,65.8471908569336,5.25742292404175 ,1.13864850997925,65.9437789916992,5.29657173156738,1.03993558883667,65.9741668701172,5.43829298019409,1.00494194030762 ,65.8529815673828,5.35447978973389,1.01620256900787,66.4186325073242,6.05825710296631,1.08254957199097,66.4076614379883 ,5.98344707489014,1.09551954269409,66.5229644775391,6.00031614303589,1.0225692987442,66.5434951782227,6.06275177001953 ,1.08995115756989,66.6208877563477,5.96841812133789,1.01719057559967,66.6455612182617,6.02999830245972,1.56110656261444 ,66.3283996582031,5.33345746994019,1.47379839420319,66.4205780029297,5.41348457336426,1.42117702960968,66.4270935058594 ,5.18472719192505,1.3821359872818,66.5773391723633,5.34918260574341,1.47961628437042,66.3637924194336,5.15084791183472 ,1.56818747520447,66.2544479370117,5.2225661277771,1.55450403690338,66.1809539794922,5.13956642150879,1.52715849876404 ,66.2824859619141,5.13216829299927,1.4827972650528,66.1366958618164,5.07240104675293,1.47239136695862,66.2874755859375 ,5.11185455322266,1.49927139282227,65.9258880615234,5.26522731781006,1.46711909770966,65.9016876220703,5.19444799423218 ,1.53615379333496,66.0006866455078,5.13329648971558,1.58067262172699,66.0416259765625,5.1969747543335,1.44239354133606 ,65.8957443237305,5.08210182189941,1.45783531665802,66.0247955322266,5.04241561889648,1.506551861763,65.9601058959961 ,5.31732654571533,1.41535568237305,65.9368209838867,5.33529901504517,1.39484643936157,65.898323059082,5.29168033599854 ,1.50249338150024,66.0255355834961,5.37349081039429,1.42638659477234,65.9805221557617,5.38302612304688,1.34220838546753 ,65.9425659179688,5.32081174850464,1.31483519077301,65.904914855957,5.27753877639771,1.45656311511993,66.1546936035156 ,5.47705745697021,1.38550686836243,66.0974273681641,5.47264814376831,1.25200283527374,65.9548492431641,5.25276708602905 ,0.896006941795349,66.4281616210938,6.10456466674805,0.90334677696228,66.5566787719727,6.10564804077148,0.903348088264465 ,66.6635284423828,6.06973218917847,0.993480682373047,66.2969284057617,6.0419020652771,0.880164980888367,66.3056716918945 ,6.09063196182251,1.58793973922729,66.1127395629883,5.2674708366394,1.57066059112549,66.1672134399414,5.35007286071777 ,1.33825790882111,66.163948059082,5.53846120834351,1.38953459262848,66.2185516357422,5.53924417495728,0.943351864814758 ,66.0803070068359,5.87983322143555,1.38254451751709,66.4367218017578,5.49561500549316,1.40577471256256,66.3258514404297 ,5.52398777008057,1.48847639560699,66.2757797241211,5.46264743804932,0.776017904281616,65.8630752563477,5.60215854644775 ,1.1419643163681,66.2864685058594,5.81920003890991,1.10327231884003,66.2269744873047,5.80411815643311,0.982795000076294 ,66.0418167114258,5.58648300170898,1.23382449150085,66.262077331543,5.68230390548706,1.24669885635376,66.3198471069336 ,5.67943048477173,3.22172045707703,67.809928894043,3.82832098007202,3.15530824661255,67.8338470458984,4.00156021118164 ,3.15509080886841,67.7748489379883,3.99598979949951,3.07769012451172,67.8231201171875,4.18973302841187,1.10835039615631 ,68.3742294311523,5.43645858764648,1.10926449298859,68.2622299194336,5.42638063430786,1.25268363952637,68.2686462402344 ,5.49923801422119,1.25887644290924,68.3857269287109,5.54237508773804,0.856779098510742,65.8057250976563,5.38414430618286 ,1.05993151664734,66.2888641357422,5.97157907485962,2.87275648117065,64.2026062011719,2.89005708694458,2.99350666999817 ,64.2616271972656,2.66672921180725,3.06010127067566,64.5027084350586,2.74929118156433,2.94652581214905,64.4142456054688 ,3.01589393615723,3.07869410514832,64.3033828735352,2.43764901161194,3.14995956420898,64.5367050170898,2.53096532821655 ,3.16307401657104,64.7588119506836,2.61771774291992,3.09017300605774,64.6998519897461,2.86918115615845,2.94763731956482 ,64.6433868408203,3.09942221641541,2.60297060012817,67.2657012939453,4.51407909393311,2.34461688995361,67.2425384521484 ,4.6809778213501,2.4332230091095,66.9677734375,4.61262559890747,2.69015502929688,67.0426330566406,4.44951248168945 ,2.10328006744385,67.0629348754883,4.73166131973267,2.73677968978882,67.3821334838867,4.40822982788086,2.71642827987671 ,67.4613952636719,4.41833877563477,2.65608310699463,67.4130172729492,4.47524547576904,1.39902520179749,65.3239822387695 ,5.08177518844604,1.33020997047424,65.2320861816406,5.11651849746704,1.16617429256439,65.337646484375,5.22120761871338 ,1.16582405567169,65.2580413818359,5.22784996032715,1.15485346317291,65.1838226318359,5.18234348297119,1.30968177318573 ,65.1623001098633,5.08121681213379,1.07950747013092,65.1546020507813,4.96049022674561,1.09411942958832,65.1320648193359 ,4.99228525161743,1.19628489017487,65.1498947143555,4.8596076965332,1.17167019844055,65.08154296875,4.89428281784058 ,1.21968996524811,65.0599975585938,4.96370887756348,1.11150693893433,65.1110458374023,5.0471043586731,0.960742354393005 ,65.3200454711914,5.3076319694519,0.964861273765564,65.2693252563477,5.27933168411255,0.967252373695374,65.2189712524414 ,5.2121376991272,0.887307524681091,65.2577362060547,5.27378177642822,0.933913707733154,65.1596832275391,5.01675939559937 ,0.940787792205811,65.1411590576172,5.05751657485962,0.953863739967346,65.1263656616211,5.11540555953979,1.46924197673798 ,65.1509399414063,4.98497533798218,1.42944991588593,65.0712814331055,4.97104835510254,0.726064443588257,65.1496200561523 ,4.99916076660156,0.723457217216492,65.1317138671875,5.055251121521,0.722915172576904,65.1126403808594,5.12641906738281 ,1.25722050666809,65.1121215820313,4.79240989685059,1.34165704250336,64.9907913208008,4.67870283126831,1.24571990966797 ,65.0443420410156,4.80092239379883,1.35468363761902,64.9573822021484,4.70028591156006,1.38346302509308,64.9460678100586 ,4.75443172454834,1.30107736587524,65.0216827392578,4.85702705383301,0.736445665359497,65.2196731567383,5.28496837615967 ,0.731112122535706,65.1628646850586,5.25378942489624,0.741668343544006,65.2620010375977,5.3127760887146,1.96044337749481 ,64.690673828125,4.54105854034424,1.89501965045929,64.8835220336914,4.63898515701294,1.75379693508148,64.8410415649414 ,4.64671897888184,1.81441962718964,65.1060791015625,4.74574422836304,1.74698913097382,64.9912109375,4.71846771240234 ,1.66675806045532,64.8422775268555,4.65543508529663,0.965164661407471,65.153450012207,5.1742115020752,0.887127876281738 ,65.155029296875,5.18276166915894,0.877623200416565,65.1300506591797,5.12379503250122,0.889152407646179,65.2081298828125 ,5.22853326797485,1.50251054763794,64.9516983032227,4.86895179748535,1.5572634935379,65.0263519287109,4.86247158050537 ,0.872787117958069,65.1376190185547,5.06298589706421,0.871499061584473,65.1556854248047,5.01519203186035,1.63267862796783 ,67.7908554077148,4.64664506912231,1.69053792953491,67.8132095336914,4.50846290588379,1.86208045482636,67.7431945800781 ,4.69083738327026,1.83597791194916,67.7311019897461,4.73373460769653,1.76971423625946,67.7824783325195,4.61141586303711 ,1.73197448253632,67.7678527832031,4.67666387557983,2.13273811340332,67.6600494384766,4.81347227096558,2.12690806388855 ,67.6821746826172,4.75571489334106,1.96110379695892,67.7085876464844,4.75144004821777,1.95040476322174,67.6890106201172 ,4.80746603012085,1.72490096092224,67.7901763916016,4.55446481704712,1.68810820579529,67.7942810058594,4.65519142150879 ,2.49819946289063,67.6858901977539,4.66664505004883,2.4681339263916,67.7000732421875,4.63317203521729,2.28982353210449 ,67.6699523925781,4.73800802230835,2.30699634552002,67.6478424072266,4.79213714599609,2.62672972679138,67.713996887207 ,4.50203514099121,2.57353758811951,67.7069091796875,4.58141613006592,2.5938196182251,67.7178802490234,4.47351264953613 ,2.54124069213867,67.7161407470703,4.55211734771729,4.17357540130615,67.8996047973633,0.509683907032013,4.1403603553772 ,67.6832962036133,0.449121415615082,4.08362770080566,67.3917999267578,0.414594709873199,3.90992999076843,67.4254379272461 ,0.725381076335907,3.94927668571472,67.6558380126953,0.792257249355316,3.97278380393982,67.8460464477539,0.8745236992836 ,3.58249139785767,67.4250793457031,2.43577671051025,3.66378712654114,67.4318084716797,2.07610011100769,3.74723982810974 ,67.8212814331055,1.85516107082367,3.53273034095764,67.8464584350586,2.72762513160706,1.81092512607574,66.1431884765625 ,4.87175035476685,1.85961425304413,66.0183639526367,4.79641628265381,1.91326582431793,65.90087890625,4.75100040435791 ,2.08881855010986,66.059196472168,4.75629425048828,2.08825278282166,66.1917037963867,4.80004692077637,1.99359023571014 ,66.2997894287109,4.83589601516724,2.36032509803772,64.3248443603516,3.86987996101379,2.44826078414917,64.6608505249023 ,3.97995185852051,1.96192157268524,66.8022384643555,4.73072004318237,1.8986679315567,66.6709976196289,4.79249000549316 ,2.14057230949402,66.5590744018555,4.63880014419556,2.24688816070557,66.7343597412109,4.70600175857544,1.51051247119904 ,66.0330352783203,4.97222995758057,1.56563603878021,66.0699157714844,4.92767810821533,1.4725159406662,66.2073516845703 ,5.01603746414185,1.53508925437927,65.9453430175781,4.91490650177002,1.59876596927643,65.9530487060547,4.86776781082153 ,1.6534435749054,66.0074615478516,4.72317504882813,1.61450529098511,66.1480941772461,4.80866765975952,1.52846145629883 ,66.2845687866211,4.95261716842651,1.64934742450714,66.4504470825195,4.95662689208984,1.72839331626892,66.3004608154297 ,4.91241359710693,2.52269864082336,66.3429107666016,4.25267505645752,2.51373910903931,66.1549377441406,4.08980846405029 ,2.73523330688477,66.1615371704102,3.90226435661316,2.77488350868225,66.3376922607422,4.05986309051514,2.54053902626038 ,65.1107788085938,3.88801002502441,2.54846215248108,65.2907028198242,3.96028590202332,2.5438380241394,65.4811019897461 ,4.03654479980469,2.39782929420471,66.1180648803711,4.27655076980591,2.37393355369568,66.3513565063477,4.38982439041138 ,2.27032828330994,65.1054763793945,4.40776538848877,2.23681831359863,65.2680511474609,4.47885704040527,2.41696572303772 ,65.0836639404297,4.25302076339722,2.37576246261597,65.2705078125,4.32173538208008,2.35369086265564,65.4496002197266 ,4.42240571975708,2.18725490570068,65.4226531982422,4.55194759368896,2.123694896698,65.5600128173828,4.6230206489563 ,2.28663229942322,65.5895919799805,4.51024770736694,1.51225531101227,66.5718231201172,5.021240234375,1.4161981344223 ,66.644889831543,5.12101936340332,1.42633509635925,66.3838272094727,5.06254053115845,1.53803825378418,66.6902465820313 ,5.0226263999939,1.42731106281281,66.7563400268555,5.11838150024414,1.65536999702454,66.6072387695313,4.95725440979004 ,1.67465090751648,66.7415084838867,4.94556093215942,1.54190278053284,66.8336715698242,5.00357246398926,1.39855873584747 ,66.9208526611328,5.12479829788208,1.47772538661957,66.2974624633789,5.09121799468994,2.59657120704651,65.133056640625 ,3.66636753082275,2.6109926700592,65.3053436279297,3.72980260848999,2.60834908485413,65.493782043457,3.801917552948 ,1.52033245563507,66.9799957275391,4.94045448303223,1.41880643367767,67.1096954345703,5.0534462928772,1.66209173202515 ,66.8697357177734,4.87027931213379,1.3919837474823,67.2366409301758,4.96968173980713,2.00205206871033,65.6056671142578 ,4.64997816085815,2.04608273506165,65.457763671875,4.57589817047119,2.27062916755676,64.3006744384766,4.06169319152832 ,2.32876181602478,64.6938705444336,4.19766807556152,2.52454304695129,65.6801376342773,4.10202598571777,2.1409318447113 ,66.399658203125,4.63131332397461,2.23282361030579,66.1752700805664,4.6105751991272,2.34595704078674,66.4882125854492 ,4.50150775909424,1.81751644611359,66.3587646484375,4.91359186172485,1.87995064258575,66.5447616577148,4.87719774246216 ,2.01660585403442,66.4501571655273,4.7698450088501,2.30044889450073,65.9848556518555,4.57546710968018,2.57980298995972 ,65.7074432373047,3.88146424293518,2.5665864944458,64.7896194458008,3.54475498199463,2.51294469833374,64.4948425292969 ,3.4874062538147,2.47084093093872,64.4197158813477,3.61557745933533,2.54000449180603,64.7240219116211,3.70111060142517 ,3.06965947151184,64.2413635253906,0.843061864376068,3.14307951927185,64.6348190307617,0.817125797271729,3.17030668258667 ,64.9766464233398,0.787583470344543,3.13940739631653,64.7505416870117,1.18672370910645,3.10409641265869,64.4562759399414 ,1.21933686733246,3.01130676269531,64.0785903930664,1.29110634326935,1.39091527462006,64.0119705200195,4.70452880859375 ,1.31462967395782,64.2487564086914,4.89590787887573,1.07064962387085,64.3344345092773,5.00004005432129,1.02853214740753 ,65.7345199584961,5.25804567337036,1.06206750869751,65.6524963378906,5.22237396240234,1.24704384803772,65.713996887207 ,5.1207423210144,1.19674646854401,65.7925643920898,5.18545246124268,1.11466372013092,68.5229339599609,5.42319107055664 ,2.63029646873474,64.9091415405273,3.35278916358948,2.58759641647339,64.4991760253906,3.2932140827179,2.89777517318726 ,64.9867172241211,3.18954491615295,1.0823005437851,66.739501953125,5.87417697906494,1.08765780925751,66.9091491699219 ,5.60021114349365,1.01002395153046,66.950798034668,5.78720188140869,1.01102554798126,66.7803955078125,5.93792963027954 ,1.1871634721756,66.6877212524414,5.68769645690918,1.01847362518311,67.1112899780273,5.6987509727478,0.917320609092712 ,67.1311950683594,5.73997926712036,0.90803050994873,66.9813232421875,5.82367610931396,1.02897262573242,67.2320785522461 ,5.63844585418701,0.925348520278931,67.2418899536133,5.68538045883179,1.82211816310883,68.3722305297852,5.38440036773682 ,1.72986388206482,68.3393173217773,5.39727163314819,1.85487186908722,68.5016860961914,5.35601806640625,1.75295293331146 ,68.4524688720703,5.38968372344971,2.18797636032104,70.2286682128906,4.76863861083984,2.26277923583984,69.8419494628906 ,4.76173734664917,2.30417919158936,70.1883010864258,4.6255316734314,2.20072603225708,69.5985870361328,4.84077930450439 ,2.32512545585632,69.4896392822266,4.79950618743896,2.43021702766418,69.7975463867188,4.73787498474121,2.46586561203003 ,70.1633682250977,4.48380565643311,1.7530769109726,63.2388000488281,3.47270965576172,1.88775670528412,63.3332633972168 ,3.50927734375,1.57975447177887,63.1699600219727,3.45405411720276,0.770951867103577,64.613410949707,5.26209306716919 ,0.785154342651367,64.7431182861328,5.36394596099854,0.955015659332275,64.5587005615234,5.17588186264038,0.956335425376892 ,64.7101593017578,5.32591438293457,3.32264757156372,65.618896484375,0.780253946781158,2.9574408531189,64.4738998413086 ,0.316204011440277,3.13376069068909,64.9198226928711,0.27761971950531,2.56642246246338,64.0481872558594,1.71757841110229 ,2.03027939796448,63.4526977539063,3.50485467910767,2.14873170852661,63.5934638977051,3.497230052948,2.46903705596924 ,70.7225952148438,4.26248502731323,2.84281134605408,70.6446990966797,3.84263586997986,3.21379804611206,65.3377227783203 ,1.1963357925415,3.20485281944275,65.93408203125,2.79245543479919,3.36020851135254,65.9955978393555,2.51856184005737 ,3.14592552185059,65.8635025024414,3.08585023880005,3.15856194496155,65.6592636108398,2.99970817565918,3.27241349220276 ,65.6984176635742,2.72795724868774,3.36723446846008,65.7419509887695,2.44129371643066,3.30855917930603,66.7898025512695 ,2.86580801010132,3.24830770492554,66.6402893066406,3.15281105041504,3.16916584968567,66.4040451049805,2.98576140403748 ,3.28029775619507,66.4961318969727,2.69506525993347,3.14309644699097,66.5459136962891,3.3976411819458,3.09399890899658 ,66.3121109008789,3.25750803947449,1.95557272434235,68.6751861572266,5.29672241210938,1.81888711452484,68.6034317016602 ,5.35073375701904,1.41024601459503,63.2141647338867,3.23758721351624,1.15360486507416,63.1664695739746,3.25049090385437 ,1.5957545042038,63.2730178833008,3.21871757507324,1.40879082679749,65.5020294189453,5.03400230407715,1.4037721157074 ,65.717414855957,4.9996542930603,1.19037282466888,65.4891662597656,5.20386838912964,2.60248494148254,68.8864212036133 ,4.85044574737549,2.64458465576172,69.0195922851563,4.74494361877441,2.36588907241821,68.9808120727539,4.96036577224731 ,2.346923828125,62.8495674133301,1.76874101161957,2.17040228843689,62.3400039672852,1.86332964897156,1.98219120502472 ,61.8262977600098,1.95655155181885,2.47003626823425,61.9436645507813,1.61649990081787,2.62941479682922,62.4789848327637 ,1.5250837802887,2.77312874794006,62.999870300293,1.44115698337555,1.41100990772247,65.8050079345703,5.01921081542969 ,1.53756165504456,65.7346725463867,4.91554641723633,1.54546129703522,65.830940246582,4.91062641143799,2.57974934577942 ,68.3915405273438,5.03086280822754,2.35975360870361,68.3460540771484,5.10343074798584,2.15034532546997,68.2842788696289 ,5.15059041976929,2.70931816101074,64.0672454833984,2.00770950317383,2.74843382835388,64.1253967285156,1.76698267459869 ,2.80714631080627,64.0711135864258,2.29739952087402,2.70221138000488,64.0294647216797,2.25056958198547,2.59571003913879 ,63.9650650024414,2.27302551269531,3.20630860328674,68.2135391235352,4.01540756225586,3.14722442626953,68.3423080444336 ,4.16961050033569,3.1775176525116,68.2282562255859,4.17364263534546,3.08311438560486,68.6121978759766,4.19453144073486 ,3.10557079315186,68.4193954467773,4.29816150665283,3.10166668891907,68.2396621704102,4.34590244293213,3.23239278793335 ,64.7937698364258,2.39909362792969,3.29830861091614,64.8190155029297,2.1781325340271,3.34556007385254,65.2663955688477 ,2.34464025497437,3.25028228759766,65.2071228027344,2.59141540527344,3.17798399925232,65.1101379394531,2.7619047164917 ,3.19209694862366,65.3329467773438,2.88725996017456,3.2748589515686,65.3408660888672,2.6292200088501,3.29173731803894 ,65.5005340576172,2.66720008850098,3.17430877685547,65.4842987060547,2.92708039283752,3.38223314285278,65.4999389648438 ,2.38008999824524,2.27588939666748,63.889762878418,3.51033973693848,2.60826468467712,64.0904006958008,3.14019298553467 ,2.49879050254822,63.9305763244629,3.14054346084595,2.41469717025757,63.8167266845703,3.07191205024719,2.6449613571167 ,63.9745788574219,2.7154438495636,2.74609088897705,69.5691452026367,4.54720497131348,2.79885339736938,69.8089599609375 ,4.50718355178833,2.83263349533081,70.1560897827148,4.24949645996094,1.66631972789764,64.006217956543,4.41115856170654 ,1.54344177246094,63.7823791503906,4.62629365921021,1.81746780872345,63.8232612609863,4.24533700942993,1.9330667257309 ,63.6909599304199,4.13855075836182,2.01452040672302,64.0820999145508,4.15035057067871,1.85161864757538,64.1769027709961 ,4.33584785461426,1.34827721118927,66.6312789916992,5.32681751251221,1.33312034606934,66.7119827270508,5.29776334762573 ,1.35957944393158,70.1682434082031,5.06434488296509,1.30751574039459,69.8131713867188,5.14138650894165,1.26131451129913 ,69.5302886962891,5.20147800445557,1.50465273857117,69.5750961303711,5.18930959701538,1.55817043781281,69.8395385742188 ,5.10909700393677,1.59938907623291,70.1610488891602,5.01129102706909,1.66334295272827,62.4444999694824,2.31862783432007 ,1.77151620388031,62.8890686035156,2.30940628051758,1.13388705253601,62.7269973754883,2.68523573875427,1.06157386302948 ,62.3579978942871,2.6658456325531,0.875809192657471,64.4096298217773,5.04039573669434,0.73970353603363,64.4352264404297 ,5.07188892364502,2.37753105163574,63.8615036010742,2.22751426696777,2.0526864528656,70.6333465576172,4.64314699172974 ,1.26074552536011,64.5021820068359,5.06837511062622,1.25899064540863,64.6928482055664,5.21327638626099,2.08650135993958 ,63.5699844360352,3.86548352241516,2.14077305793762,63.7161102294922,3.82737326622009,1.88180673122406,63.562198638916 ,4.20048427581787,1.29388749599457,65.8246231079102,5.18244791030884,1.27890062332153,65.787727355957,5.12692308425903 ,1.33551824092865,65.7642211914063,5.05971336364746,1.35508978366852,65.8358154296875,5.13893175125122,3.39741015434265 ,66.8426208496094,2.49798011779785,3.46531867980957,67.1295471191406,2.62615919113159,3.44804573059082,67.0955429077148 ,2.95263624191284,3.49114727973938,66.9027862548828,2.17869186401367,3.53133225440979,67.1750030517578,2.31824254989624 ,3.54556512832642,67.3944778442383,2.76397252082825,3.52769446372986,67.3619766235352,3.10120415687561,1.66327261924744 ,65.5175399780273,4.84837293624878,1.6486691236496,65.3879776000977,4.83345651626587,1.55714344978333,65.515739440918 ,4.91552543640137,1.54356360435486,65.3456115722656,4.96902656555176,1.64133775234222,65.2857055664063,4.88229322433472 ,1.15404975414276,63.0051612854004,3.69910192489624,0.901649951934814,62.9695129394531,3.68851327896118,1.29445350170136 ,61.6162147521973,2.3349986076355,1.49334478378296,62.0239295959473,2.32971668243408,0.939993143081665,61.9537353515625 ,2.60241937637329,0.790918231010437,61.5481300354004,2.5308837890625,3.40503931045532,66.5657043457031,2.41545963287354 ,3.4683039188385,66.6099319458008,2.1507716178894,2.08212614059448,69.3093414306641,4.99917554855347,2.20279026031494 ,69.3110733032227,4.92981052398682,2.05538940429688,64.3852386474609,4.33511734008789,2.02214121818542,64.6891555786133 ,4.49180173873901,2.51422572135925,68.1781311035156,4.93498277664185,2.74233198165894,68.1048965454102,4.74316835403442 ,1.33793914318085,67.9867706298828,4.83846712112427,1.26418793201447,67.9812622070313,4.88836717605591,1.72899913787842 ,70.4542999267578,4.86722230911255,1.88850796222687,70.4923553466797,4.80114221572876,1.91768753528595,70.4026031494141 ,4.83765125274658,2.48615074157715,70.5057220458984,4.35005807876587,2.77934885025024,70.4354629516602,4.04117774963379 ,2.17157745361328,63.5577545166016,3.01464104652405,2.0459156036377,63.459545135498,3.02176666259766,2.18099522590637 ,63.6124877929688,2.62947630882263,2.41914415359497,63.7559013366699,2.63658022880554,2.90074110031128,68.9421310424805 ,4.49496364593506,1.16719198226929,67.6541290283203,5.07088279724121,1.27261769771576,67.6515121459961,4.91043853759766 ,3.13415884971619,70.4025344848633,3.49547290802002,3.00836896896362,70.4687805175781,3.67086410522461,2.91557312011719 ,70.3788909912109,3.87965750694275,2.94108152389526,70.1115646362305,3.96969389915466,3.04004549980164,70.0819702148438 ,3.83000016212463,3.06503176689148,69.9759063720703,3.64700102806091,1.21417355537415,63.3148307800293,2.784184217453 ,1.19664418697357,63.1839752197266,2.73920702934265,1.54497134685516,63.3072853088379,2.56475400924683,1.544917345047 ,63.3785438537598,2.63877606391907,1.8416827917099,63.4582023620605,2.36375784873962,1.86531913280487,63.556941986084 ,2.4356997013092,3.27756834030151,65.7480545043945,1.49152147769928,3.32438254356384,65.7033843994141,1.57046961784363 ,3.2664635181427,65.4832916259766,1.54861390590668,3.21064281463623,65.5065155029297,1.46422207355499,3.38953733444214 ,65.7523956298828,1.67035269737244,3.1939902305603,65.2248687744141,1.5117518901825,3.15106582641602,65.218391418457 ,1.42323327064514,2.96880340576172,70.7074890136719,3.58743643760681,2.52766156196594,63.849910736084,2.67795538902283 ,2.29024934768677,63.691104888916,3.02464008331299,3.0556173324585,69.4313125610352,3.94278478622437,3.06104874610901 ,69.5194473266602,4.12069797515869,3.01978588104248,69.218147277832,4.19789600372314,3.04081892967224,69.1315231323242 ,4.02007246017456,3.00306487083435,69.5700912475586,4.27975177764893,2.95265007019043,69.285400390625,4.37552213668823 ,3.06109118461609,68.8921356201172,4.02935028076172,3.30373907089233,65.985221862793,0.823003649711609,3.37114906311035 ,66.3666000366211,0.88204824924469,3.40155816078186,66.1607513427734,1.27854585647583,3.2656843662262,65.7254486083984 ,1.23977637290955,2.15141582489014,65.8958358764648,4.68503475189209,1.97792518138886,65.7934494018555,4.71268367767334 ,3.27143931388855,68.2170104980469,3.46690511703491,3.36802220344543,68.1874542236328,3.12048625946045,3.40568804740906 ,68.5598831176758,3.17628622055054,3.36138033866882,68.5961532592773,3.37867641448975,3.28634023666382,68.7167587280273 ,3.6459379196167,1.36855494976044,68.0724639892578,5.07851886749268,1.47358274459839,68.0629501342773,5.07631206512451 ,1.28406882286072,68.0532379150391,4.89790439605713,1.43688583374023,68.0571365356445,4.88231134414673,1.58190584182739 ,68.1025772094727,4.88890886306763,1.62977468967438,68.1250610351563,5.0776162147522,1.33778488636017,67.7689437866211 ,4.77620267868042,1.05926036834717,67.4494552612305,5.43875932693481,0.754440307617188,65.3672866821289,5.28548049926758 ,0.751253128051758,65.6022720336914,5.25729703903198,2.17934894561768,64.3224639892578,4.21248769760132,1.71412336826324 ,65.0587615966797,4.75572490692139,1.75993835926056,65.1855773925781,4.76912593841553,0.916168451309204,65.6128005981445 ,5.28644561767578,0.956570863723755,65.4222259521484,5.28150510787964,2.82387208938599,64.2440795898438,1.60327672958374 ,2.71610569953918,64.1857147216797,1.54536700248718,2.8345205783844,64.3156814575195,1.42784821987152,2.91504144668579 ,64.4028472900391,1.50540399551392,1.73535168170929,63.4158134460449,2.767258644104,3.87476706504822,67.928092956543 ,1.76517486572266,3.80734848976135,67.7902603149414,1.86865186691284,4.00409650802612,68.1080474853516,1.55622589588165 ,3.87178349494934,67.9669494628906,1.71418404579163,2.21187043190002,64.6915817260742,4.3245325088501,1.09960293769836 ,61.2102317810059,2.32678270339966,0.913408160209656,60.8254432678223,2.30629253387451,1.22644782066345,63.2941818237305 ,2.93833780288696,1.50415539741516,63.3456764221191,2.85449743270874,1.91454017162323,63.3828811645508,3.22673344612122 ,2.04850459098816,63.4737892150879,3.21564912796021,1.19043982028961,68.0956802368164,5.25577878952026,1.15569794178009 ,68.12744140625,5.34178733825684,1.33125197887421,68.0929641723633,5.26610374450684,1.27669787406921,68.1236801147461 ,5.34426927566528,1.81892287731171,65.3533172607422,4.75283145904541,1.83351361751556,65.5049514770508,4.74560260772705 ,0.489630132913589,60.8192939758301,2.44391441345215,0.636119484901428,61.1750755310059,2.48716497421265,1.72115516662598 ,68.2012634277344,5.27561855316162,1.81343591213226,68.2175674438477,5.25443077087402,3.61724925041199,66.9714813232422 ,1.93237948417664,3.63002371788025,67.0168075561523,1.87830793857574,3.65537023544312,67.2072143554688,1.95941495895386 ,3.6320812702179,67.1999359130859,2.02898907661438,3.66461253166199,67.1989288330078,1.90811610221863,3.60759997367859 ,67.0121231079102,1.8292031288147,3.66415858268738,67.1588439941406,1.85774981975555,3.70364260673523,67.4279174804688 ,1.99589407444,3.74132084846497,67.3983764648438,1.94340825080872,3.75281167030334,67.6230087280273,1.95619535446167 ,2.81532144546509,68.0492401123047,4.63717555999756,2.85496854782104,68.0031509399414,4.55038499832153,1.60250473022461 ,68.6735763549805,5.25675439834595,1.5099128484726,68.4110488891602,5.39070510864258,1.36978161334991,68.8145217895508 ,5.41693639755249,1.41716694831848,68.6838989257813,5.43790340423584,3.23023343086243,70.1785354614258,3.18463897705078 ,1.2082679271698,66.9643630981445,5.39298105239868,1.21866321563721,67.0920944213867,5.29832220077515,1.27707099914551 ,66.8820114135742,5.35456275939941,1.27629065513611,67.0180816650391,5.278151512146,1.4946049451828,64.4533767700195 ,4.85514402389526,1.45980274677277,64.6893997192383,5.04266023635864,1.43082308769226,69.2890243530273,5.24512767791748 ,2.76308536529541,67.9503479003906,4.64143562316895,2.80748581886292,67.9118423461914,4.56407785415649,2.69727182388306 ,67.9980316162109,4.73916387557983,2.77209401130676,67.8514709472656,4.54306507110596,3.1554057598114,69.8255310058594 ,3.3562445640564,3.21396946907043,69.7456893920898,3.1201605796814,2.96959733963013,66.3964309692383,3.77987670898438 ,3.06027674674988,66.4596405029297,3.60809707641602,3.12278532981873,66.7135238647461,3.79585146903992,3.035489320755 ,66.616813659668,3.96194195747375,3.22859811782837,66.8069839477539,3.62145400047302,3.25045347213745,67.1485061645508 ,3.91712236404419,3.20148730278015,66.953125,4.02498865127563,3.10689544677734,66.8664321899414,4.21319150924683,3.04706168174744 ,64.7684555053711,1.37625753879547,3.36234951019287,68.9172592163086,3.1843159198761,3.23758554458618,69.0889282226563 ,3.32570433616638,2.73865675926209,64.0937805175781,1.47130036354065,2.44877791404724,68.0812683105469,4.80997705459595 ,2.31137037277222,68.1344299316406,4.86483573913574,2.33828735351563,68.1263580322266,4.97409057617188,2.17115354537964 ,68.1592559814453,5.01532745361328,2.49606013298035,68.0793762207031,4.9183349609375,2.33080887794495,68.2026672363281 ,5.00495862960815,1.6921523809433,64.4372634887695,4.59270191192627,3.12855386734009,64.4140548706055,2.02637028694153 ,3.00002670288086,64.2794342041016,1.9327564239502,3.05478620529175,64.3649063110352,1.79543006420136,3.16064596176147 ,64.4679489135742,1.88507044315338,3.10378193855286,64.4913864135742,1.70813536643982,3.16189479827881,64.5378875732422 ,1.79301404953003,1.88884961605072,64.4099655151367,4.4384651184082,2.43658375740051,68.7276382446289,5.05807542800903 ,2.60550928115845,68.6477127075195,5.03396940231323,2.62770128250122,68.7658843994141,4.94138765335083,2.4056396484375 ,68.6070098876953,5.12689208984375,2.38367676734924,68.5143890380859,5.15268611907959,2.24653244018555,68.5764846801758 ,5.18992710113525,1.80867230892181,69.8361434936523,5.04644918441772,1.86460244655609,70.1591415405273,4.91810512542725 ,1.75314748287201,69.5746459960938,5.16978740692139,3.37677645683289,65.7449111938477,1.77825689315796,3.39073538780212 ,65.5126647949219,1.73714506626129,3.40116405487061,65.8993225097656,1.76968371868134,3.39961576461792,65.8093719482422 ,1.91650032997131,3.40984797477722,65.5266418457031,1.88468360900879,3.37290668487549,65.2781295776367,1.82793116569519 ,3.33846926689148,65.2658081054688,1.68715047836304,1.58690357208252,64.180534362793,4.67527723312378,3.42349815368652 ,65.7735061645508,2.17199325561523,3.43665051460266,65.5146026611328,2.10313749313354,3.40644407272339,65.2755355834961 ,2.05098104476929,2.90480470657349,63.5421180725098,1.35813617706299,2.5005624294281,63.3518524169922,1.66328740119934 ,2.97416019439697,63.6044006347656,-0.43002325296402,3.04686117172241,63.9600830078125,-0.435582518577576,2.91562366485596 ,63.574951171875,0.32672530412674,2.86793184280396,63.0844421386719,0.314177632331848,2.88664984703064,62.5844268798828 ,0.291136026382446,3.26654148101807,64.8482055664063,1.78163802623749,3.21196222305298,64.8382339477539,1.65136682987213 ,2.5964367389679,64.3092498779297,3.22612452507019,3.11429333686829,64.3584213256836,2.21885251998901,2.96850609779358 ,64.2104949951172,2.12399363517761,2.93605613708496,64.1646041870117,2.3562159538269,2.7786602973938,66.5487518310547 ,4.20106410980225,2.79840517044067,66.7352828979492,4.35227203369141,2.8922290802002,68.5589828491211,4.74051427841187 ,2.88598251342773,68.7056045532227,4.64938116073608,2.65196180343628,65.2107467651367,3.4514377117157,2.66340517997742 ,65.3679428100586,3.5083863735199,2.81611132621765,65.2712554931641,3.22248196601868,2.83819365501404,65.4268035888672 ,3.29421615600586,2.83722853660584,65.595947265625,3.34694361686707,2.67875480651855,65.5446090698242,3.5787661075592 ,0.938983798027039,67.442985534668,5.49931669235229,1.68217599391937,67.8480529785156,4.50526905059814,1.58377194404602 ,67.7971115112305,4.58396673202515,3.06999850273132,69.7514114379883,3.80261707305908,3.03709864616394,69.8179168701172 ,3.96939754486084,2.99018239974976,69.8608093261719,4.12396812438965,3.88476777076721,67.6038284301758,1.9052711725235 ,3.01904988288879,68.7829437255859,4.34590721130371,3.07396841049194,68.7755737304688,4.16320896148682,3.2163782119751 ,64.5644302368164,2.31587195396423,3.25280594825745,64.5963668823242,2.11069822311401,2.78232908248901,64.0797348022461 ,2.77608585357666,2.87242197990417,64.1171722412109,2.57528614997864,2.76459431648254,64.0357437133789,2.5068883895874 ,0.882707834243774,65.685432434082,5.30712938308716,2.95145273208618,68.2043228149414,4.61653709411621,2.87497973442078 ,68.3008270263672,4.81145000457764,2.99823188781738,68.1043395996094,4.45682430267334,0.903877377510071,66.8075485229492 ,5.97392654418945,3.03742647171021,68.507209777832,4.50008964538574,3.052649974823,68.3731079101563,4.57572746276855 ,1.35172784328461,68.1202011108398,5.33629560470581,1.47764658927917,68.1094818115234,5.31640863418579,0.76178765296936 ,65.7061004638672,5.31858825683594,0.824543237686157,65.6856994628906,5.32374954223633,1.34113502502441,63.1208915710449 ,3.45176196098328,1.06281006336212,63.0850524902344,3.45769143104553,3.0163848400116,68.0236511230469,4.37825489044189 ,3.0504937171936,68.0117492675781,4.33377456665039,2.45020818710327,66.7837905883789,4.61369800567627,2.50105261802673 ,66.6580581665039,4.54786014556885,0.871286630630493,65.6000442504883,5.2877836227417,0.786885976791382,65.7970123291016 ,5.37989950180054,3.39077138900757,67.8872375488281,3.30874085426331,3.32414698600769,67.8638610839844,3.53729343414307 ,3.27949452400208,67.6229629516602,3.69277310371399,3.39195346832275,67.6552505493164,3.43329548835754,3.45178842544556 ,67.695068359375,3.22621893882751,2.68379044532776,62.1163673400879,1.00694859027863,2.79847860336304,62.7099494934082 ,0.950812101364136,2.92852449417114,63.2620849609375,0.910539209842682,1.73240518569946,63.5957183837891,4.44465970993042 ,0.896305441856384,65.3989562988281,5.28903579711914,1.31565749645233,66.8515472412109,5.29576349258423,3.00862669944763 ,63.7789497375488,0.875749468803406,2.13105821609497,60.8295783996582,1.85507833957672,2.29136896133423,61.3581352233887 ,1.72197782993317,1.79348528385162,61.3115463256836,2.0579137802124,1.61798405647278,60.8387413024902,2.17369174957275 ,0.888431429862976,65.2999801635742,5.30810165405273,1.71592605113983,69.0375595092773,5.2174654006958,1.49462974071503 ,68.2459716796875,5.42839813232422,1.36418902873993,68.2601013183594,5.4384617805481,2.94529867172241,64.0302200317383 ,0.325349271297455,3.04379439353943,65.6097946166992,3.24336194992065,3.04610061645508,65.4405670166016,3.16522622108459 ,3.07062745094299,65.2881851196289,3.12842082977295,3.11933541297913,67.3169555664063,4.01220989227295,3.1252748966217 ,67.4251403808594,4.00630378723145,3.06806111335754,67.3184967041016,4.11027336120605,1.75952875614166,68.1481475830078 ,5.08462238311768,1.88930642604828,68.1446228027344,5.05054712295532,1.76840484142303,68.1653518676758,5.10388898849487 ,2.99754190444946,67.5693283081055,4.18719387054443,3.12188291549683,67.479606628418,4.05562591552734,3.10169529914856 ,67.5793075561523,4.05587005615234,3.31551313400269,66.9119186401367,3.41480135917664,3.40057134628296,67.0184936523438 ,3.25194454193115,3.3433620929718,67.3507537841797,3.63195514678955,3.30712413787842,67.1692810058594,3.66730928421021 ,3.62881422042847,66.8468246459961,1.67702209949493,3.67381048202515,66.8385696411133,1.69646668434143,3.65914416313171 ,66.7378997802734,1.63139164447784,3.60834813117981,66.7475128173828,1.61311852931976,3.68108868598938,66.820442199707 ,1.7398294210434,3.66513466835022,66.7122192382813,1.6777651309967,3.57989692687988,66.4964752197266,1.61093735694885 ,3.58889770507813,66.5416641235352,1.58230996131897,3.51673626899719,66.3922271728516,1.59728240966797,3.54323554039001 ,66.521728515625,1.57222628593445,3.39948201179504,66.0840225219727,2.22889304161072,3.4275176525116,66.0860824584961 ,2.01125836372375,3.42608070373535,66.1682968139648,1.85465395450592,3.02907490730286,65.8121948242188,3.32732510566711 ,2.87969517707825,65.7975540161133,3.43260478973389,1.95452749729156,64.9040222167969,4.5913233757019,1.9281359910965 ,65.1237182617188,4.64037895202637,3.08949017524719,65.0258865356445,3.021568775177,2.67047142982483,65.7588806152344 ,3.65310835838318,3.12394952774048,64.4121551513672,-0.425189852714539,2.14358901977539,64.9229049682617,4.41373920440674 ,2.11716294288635,65.1423263549805,4.47160339355469,3.21812272071838,64.6609420776367,1.7886575460434,3.25343632698059 ,64.6347808837891,1.93096566200256,3.31948947906494,64.8364486694336,1.96334993839264,1.27868580818176,68.5230865478516 ,5.48906517028809,3.08508467674255,64.7949295043945,1.45506238937378,3.02310347557068,66.2411422729492,3.48426175117493 ,2.94506549835205,66.185188293457,3.66328954696655,3.43415141105652,66.1334075927734,1.70569670200348,3.40694761276245 ,66.0004730224609,1.81116831302643,3.42804837226868,65.9448547363281,1.70346283912659,3.75594592094421,66.8347854614258 ,0.707662761211395,3.84257817268372,67.1626129150391,0.687342405319214,3.99951863288879,67.0531005859375,0.404798299074173 ,3.89515900611877,66.6228866577148,0.451429814100266,2.89523768424988,67.8790054321289,4.44507217407227,2.87735891342163 ,67.9539031982422,4.47966957092285,3.44882583618164,67.3555145263672,3.33902382850647,3.23236560821533,68.1426696777344 ,3.73330855369568,3.12400317192078,68.4818954467773,3.87935709953308,3.17323422431946,68.5466842651367,3.73494172096252 ,3.17530918121338,68.6816024780273,3.91267061233521,3.11129069328308,68.6374282836914,4.03024244308472,3.44718813896179 ,67.8984298706055,3.05363130569458,3.49256610870361,67.7516098022461,2.98532676696777,4.19071578979492,68.0595779418945 ,0.595690429210663,4.13797330856323,68.1803588867188,0.767984509468079,4.07051801681519,68.0346984863281,0.785980641841888 ,1.21203315258026,68.0851211547852,5.18104791641235,1.36357915401459,68.0735702514648,5.15914058685303,3.15585994720459 ,64.651237487793,1.66438138484955,3.00136947631836,64.5917129516602,1.46235930919647,2.96417832374573,64.5486755371094 ,1.38484394550323,1.9572046995163,65.494743347168,4.64888525009155,3.87331128120422,67.4057464599609,1.86234366893768 ,3.94303107261658,67.5915451049805,1.86879432201386,4.02576684951782,67.7782363891602,1.8133624792099,3.96108222007751 ,67.7949905395508,1.83986985683441,3.44512820243835,66.4780807495117,1.56252491474152,3.43452668190002,66.544075012207 ,1.56754410266876,4.16763210296631,67.3066482543945,0.752300679683685,4.20861339569092,67.4810333251953,0.767211616039276 ,4.22824621200562,67.6161880493164,0.803533613681793,4.31191396713257,67.4798049926758,0.92854231595993,4.27010297775269 ,67.3647155761719,0.873295187950134,4.22759103775024,67.2292633056641,0.857036769390106,3.96591925621033,67.3817825317383 ,1.17504632472992,3.84721398353577,67.2841262817383,1.23387622833252,3.73140645027161,67.1730880737305,1.3115656375885 ,3.84368395805359,67.1692886352539,1.13736081123352,3.9296715259552,67.2579803466797,1.06381285190582,4.02764272689819 ,67.3290405273438,1.01120853424072,3.62845778465271,65.8809585571289,1.46909356117249,3.58848738670349,66.1250152587891 ,1.52465927600861,3.46977925300598,65.8928146362305,1.62517940998077,3.54804134368896,65.7373275756836,1.51209759712219 ,3.69628596305847,65.9059600830078,1.3513650894165,3.72170567512512,66.0722503662109,1.36401319503784,3.63475179672241 ,65.7507247924805,1.33598518371582,3.80204892158508,67.4645614624023,1.6423020362854,3.81955742835999,67.4326095581055 ,1.54928922653198,3.89767050743103,67.5244903564453,1.53833293914795,3.84696125984192,67.4156188964844,1.44847130775452 ,3.98500466346741,67.5406188964844,1.42541027069092,3.5180983543396,66.2538375854492,1.59009373188019,3.46437072753906 ,66.3058853149414,1.68118560314178,3.52468132972717,66.3413772583008,1.55722069740295,3.48903250694275,66.0722503662109 ,1.62239384651184,3.5735285282135,66.2663726806641,1.51193714141846,3.35272622108459,65.8405303955078,1.48823237419128 ,3.39298939704895,65.8021926879883,1.53717470169067,3.41420316696167,65.7718048095703,1.38643348217011,3.46366572380066 ,65.758544921875,1.45361733436584,3.44315075874329,65.7761459350586,1.59451007843018,4.12264156341553,67.9515380859375 ,1.69186997413635,4.04694747924805,67.9766082763672,1.70980203151703,4.21951961517334,68.0857162475586,1.5204074382782 ,4.13125371932983,68.1192398071289,1.530766248703,4.36612987518311,68.1797943115234,1.10023164749146,4.25924062728882 ,68.2200164794922,1.09791100025177,4.1071252822876,68.2164459228516,1.04108142852783,4.32454586029053,68.07080078125 ,0.573556303977966,4.3097767829895,67.9047622680664,0.469022572040558,4.31919193267822,68.1753234863281,0.716215848922729 ,4.42688226699829,68.1401824951172,0.726928353309631,4.43175458908081,68.043342590332,0.591847240924835,4.41548633575439 ,67.8843612670898,0.494797825813293,4.30114936828613,67.3556518554688,0.410873055458069,4.20437002182007,67.3710784912109 ,0.377230167388916,4.27088451385498,67.6760330200195,0.405537307262421,4.37260341644287,67.6578216552734,0.435535669326782 ,3.8642098903656,65.9823837280273,0.817893385887146,3.77061247825623,65.9289932250977,0.778227150440216,3.87505173683167 ,66.1986083984375,0.589296579360962,3.96625018119812,66.2316131591797,0.632395684719086,3.69940090179443,66.0262451171875 ,0.751195728778839,3.79279160499573,66.2544708251953,0.578169524669647,3.9935986995697,66.5801467895508,0.438086152076721 ,4.08373022079468,66.5898590087891,0.481809765100479,3.54882621765137,65.7025451660156,1.30097436904907,3.47937512397766 ,65.772590637207,1.25227952003479,3.581782579422,66.3640899658203,0.962329745292664,3.96330523490906,67.5897827148438 ,1.79621553421021,4.04697608947754,67.7592926025391,1.7442946434021,3.89645266532898,67.4201278686523,1.79242742061615 ,3.8892285823822,67.4412078857422,1.7214183807373,3.94782614707947,67.5932006835938,1.7199592590332,4.02466678619385 ,67.7432250976563,1.66987860202789,4.1498556137085,67.9110260009766,1.63450610637665,4.2531623840332,68.0256195068359 ,1.48009717464447,4.12253856658936,67.8726043701172,1.5736631155014,4.22431135177612,67.9674606323242,1.43996977806091 ,3.6584689617157,67.0526580810547,1.73420250415802,3.70589375495911,67.2161331176758,1.85662436485291,3.77640986442566 ,67.0984420776367,1.69524645805359,3.81549096107483,67.2351303100586,1.79819941520691,3.84403109550476,67.2678833007813 ,1.73510146141052,3.81034016609192,67.1487045288086,1.63960492610931,3.81980538368225,67.2020645141602,1.58304333686829 ,3.8460910320282,67.3059692382813,1.67176628112793,3.62339448928833,66.9600143432617,1.55528903007507,3.54900121688843 ,66.8945693969727,1.52178120613098,3.6070408821106,66.8924865722656,1.46785020828247,3.68474149703979,66.9038314819336 ,1.43001317977905,3.76875758171082,66.9739532470703,1.43453121185303,3.76291394233704,67.0144805908203,1.57237350940704 ,3.80492234230042,67.0476531982422,1.38833773136139,3.79968523979187,67.0783081054688,1.52131009101868,3.81678700447083 ,67.1221084594727,1.34357035160065,3.81176257133484,67.1440734863281,1.46728658676147,3.50874066352844,66.8785171508789 ,1.61766111850739,3.4727201461792,66.7689819335938,1.55034828186035,3.51999497413635,66.7786865234375,1.45502161979675 ,3.5054178237915,66.8579483032227,1.6944785118103,3.46841979026794,66.7569046020508,1.63060021400452,3.58814311027527 ,66.776741027832,1.40819585323334,3.807368516922,66.9411163330078,1.14656984806061,3.84839510917664,67.056884765625 ,1.12197256088257,3.43414974212646,66.544807434082,1.51670002937317,3.44125318527222,66.4587707519531,1.53559422492981 ,3.47409510612488,66.4686737060547,1.48404669761658,3.4670684337616,66.5475540161133,1.45423448085785,4.38141489028931 ,67.7970275878906,0.625199139118195,4.34833574295044,67.6143646240234,0.588272631168365,4.38872814178467,67.6345138549805 ,0.510305225849152,4.42740917205811,67.841178894043,0.558445572853088,4.2903265953064,67.3601684570313,0.577212631702423 ,4.32288837432861,67.3539276123047,0.49212783575058,4.38653898239136,67.9980850219727,0.787152171134949,4.38902473449707 ,67.9229583740234,0.688140153884888,4.43982934951782,67.9834518432617,0.637882053852081,4.43614435195923,68.0685043334961 ,0.75418084859848,4.23430633544922,67.7607574462891,0.679528534412384,4.24083995819092,67.8800277709961,0.740421533584595 ,4.23906660079956,67.9548034667969,0.840360522270203,4.19893836975098,67.6024551391602,0.648272752761841,4.14131736755371 ,67.3782043457031,0.647528231143951,4.23399543762207,67.748893737793,0.875052452087402,4.23211860656738,67.8589401245117 ,0.968259572982788,4.27247667312622,67.753776550293,1.0994166135788,4.31989812850952,67.6349105834961,0.991671323776245 ,4.02612638473511,67.1929244995117,0.955600678920746,3.97565674781799,67.0437240600586,0.957537412643433,3.90903830528259 ,66.8881912231445,0.988696575164795,4.06195783615112,66.8649139404297,0.899783492088318,4.15113639831543,67.0703430175781 ,0.85826051235199,4.23475360870361,67.6988067626953,1.12792015075684,4.17958831787109,67.5111541748047,1.15129017829895 ,3.79353785514832,67.3299026489258,1.47933793067932,3.81423401832581,67.3028945922852,1.36028480529785,3.78962540626526 ,67.3689498901367,1.5551506280899,3.90460419654846,67.3995056152344,1.31119799613953,3.75604748725891,67.24462890625 ,1.52793085575104,3.7315526008606,67.1935272216797,1.42468738555908,3.77796149253845,67.3406295776367,1.60282015800476 ,3.87115454673767,67.7310028076172,1.6006715297699,3.8330671787262,67.5994567871094,1.63931965827942,3.99071335792542 ,67.9273452758789,1.4354612827301,3.91644883155823,67.8448715209961,1.53315281867981,4.22433996200562,67.9758987426758 ,1.1544588804245,4.37294626235962,68.028694152832,1.10267627239227,4.39809846878052,68.1035537719727,1.09824275970459 ,4.42650461196899,68.103515625,0.912913143634796,4.40633726119995,68.1802520751953,0.900287568569183,4.38934421539307 ,68.0283737182617,0.932290434837341,3.93147158622742,66.1487808227539,0.884068429470062,3.85331177711487,66.0361099243164 ,1.0461950302124,3.78953862190247,65.8569183349609,0.989757895469666,3.96036219596863,66.3272476196289,0.950800895690918 ,3.87919926643372,66.2271347045898,1.10150444507599,4.0231728553772,66.348518371582,0.708833396434784,4.03828191757202 ,66.4771881103516,0.78782194852829,4.12526702880859,66.6488571166992,0.565632522106171,4.12027359008789,66.7189025878906 ,0.653512239456177,3.99896168708801,66.7890167236328,0.74941873550415,3.94511961936951,66.5834579467773,0.875204086303711 ,3.89214205741882,66.4620132446289,1.02080261707306,3.65220642089844,66.1826477050781,1.42512059211731,3.6650333404541 ,66.3706741333008,1.42390918731689,3.8919985294342,67.7197341918945,1.52481913566589,4.08569812774658,67.5328598022461 ,1.28870582580566,4.10027456283569,67.7684555053711,1.27417016029358,4.15168952941895,67.8459701538086,1.24676203727722 ,3.9676787853241,67.8103256225586,1.41776275634766,3.99032139778137,66.7081985473633,0.999640047550201,3.92440438270569 ,66.5994186401367,1.12194168567657,3.82049965858459,66.3747329711914,1.15423321723938,3.85150742530823,66.5263061523438 ,1.23127043247223,3.55067896842957,66.5179595947266,1.42015624046326,3.77352738380432,66.8165588378906,1.15687823295593 ,3.78132176399231,66.7271575927734,1.16200530529022,3.8440535068512,66.7906646728516,1.06329357624054,3.72218108177185 ,66.7941589355469,1.26367807388306,3.72475647926331,66.6822204589844,1.25772345066071,3.7447817325592,66.8978118896484 ,1.28288722038269,4.10149478912354,67.1040878295898,0.743085324764252,4.07173776626587,67.109619140625,0.676203727722168 ,4.21170806884766,67.068962097168,0.589853882789612,4.23256063461304,67.0365829467773,0.500688910484314,4.2025899887085 ,67.0144882202148,0.415823400020599,4.11017560958862,67.0213012695313,0.376402735710144,3.61900401115417,67.0411911010742 ,1.7905125617981,4.22887229919434,67.9261016845703,1.06965661048889,3.90949845314026,67.8031692504883,1.50299596786499 ,4.04360151290894,67.2837524414063,0.968169152736664,3.52845144271851,66.807975769043,1.99678945541382,3.49707794189453 ,66.6140747070313,1.96261894702911,1.38582074642181,70.3855285644531,5.0009617805481,3.60986256599426,66.6596984863281 ,1.74299871921539,3.63856530189514,66.7910919189453,1.79739606380463,3.55062937736511,66.4580001831055,1.65329933166504 ,1.19366502761841,65.2249298095703,4.85610389709473,1.0756311416626,65.1947250366211,4.9448094367981,1.08035385608673 ,65.2848892211914,4.93593168258667,1.20033538341522,65.3307418823242,4.86212158203125,0.934173107147217,65.275016784668 ,4.98282194137573,0.931443929672241,65.1937103271484,4.99565315246582,0.733690142631531,65.273567199707,4.97549915313721 ,0.728435397148132,65.1870880126953,4.97911643981934,1.36970221996307,65.2229843139648,4.72263145446777,1.26224589347839 ,65.2212066650391,4.81006860733032,1.34426963329315,65.4023818969727,4.81390333175659,1.48638927936554,65.4760208129883 ,4.74349927902222,0.87395191192627,65.2709426879883,4.98687171936035,0.871021270751953,65.1897125244141,4.9949426651001 ,1.40152037143707,64.8109817504883,4.70733404159546,1.41142177581787,64.882698059082,4.72538137435913,1.47247123718262 ,64.828369140625,4.59658479690552,1.47469854354858,64.7096939086914,4.5597128868103,1.49344825744629,64.6655349731445 ,4.56101655960083,1.51618897914886,64.7853393554688,4.55397367477417,1.69742560386658,64.8928680419922,4.15867900848389 ,1.67222082614899,64.7719802856445,4.31696891784668,1.6290580034256,64.8013305664063,4.36196804046631,1.57378756999969 ,64.9139556884766,4.40134048461914,1.55398416519165,64.8053512573242,4.46878147125244,1.47806465625763,64.9342193603516 ,4.51615619659424,1.71596801280975,64.5329208374023,4.18517351150513,1.70165550708771,64.2728500366211,4.13927602767944 ,1.59862303733826,64.0150375366211,4.11862373352051,1.58835256099701,64.6118316650391,4.4310302734375,2.16316890716553 ,65.0206298828125,2.56838035583496,1.96401083469391,64.9684829711914,3.39649748802185,1.9987086057663,65.3854217529297 ,3.37620663642883,2.16594982147217,65.4886856079102,2.55456161499023,1.84000194072723,65.2910003662109,4.03854179382324 ,1.90293252468109,65.7236785888672,4.02813720703125,2.0213098526001,65.8256301879883,3.36226153373718,2.13319611549377 ,65.9246063232422,2.55418252944946,1.79898393154144,64.1050491333008,3.66027426719666,1.79431402683258,63.91064453125 ,3.43513488769531,1.89816915988922,64.2348022460938,3.42101287841797,1.96954953670502,64.0471496582031,2.82804870605469 ,2.09718370437622,65.3103561401367,4.51487350463867,2.30125498771667,64.9214782714844,4.33400440216064,2.42373561859131 ,64.8997650146484,4.166428565979,2.52821660041809,64.9293899536133,3.81001329421997,2.57886266708374,64.9627914428711 ,3.6042468547821,2.8619487285614,65.1285095214844,3.20917820930481,2.63870978355408,65.0624465942383,3.40243268013 ,3.07463717460632,65.1601791381836,3.07438635826111,3.18227171897888,65.2159042358398,2.85541558265686,2.66716241836548 ,67.9635620117188,4.63999700546265,2.70216584205627,67.9023666381836,4.55283260345459,2.73243880271912,67.8296508789063 ,4.47092199325562,2.30487561225891,68.0841827392578,4.85247802734375,2.43493890762329,68.0320129394531,4.79486036300659 ,2.62153291702271,67.8830718994141,4.63614368438721,2.66734838485718,67.8346939086914,4.57017517089844,2.69487380981445 ,67.781364440918,4.51345729827881,2.75075697898865,67.7393798828125,4.41219806671143,2.71137380599976,67.7354278564453 ,4.45894527435303,1.4422105550766,68.006217956543,4.83119010925293,1.57590889930725,68.0727996826172,4.84237146377563 ,4.24951314926147,67.9796752929688,0.988760828971863,4.14486789703369,68.2400207519531,0.891078293323517,4.29771661758423 ,68.2195129394531,0.894079685211182,3.69419884681702,65.7953414916992,0.954218089580536,3.62183690071106,65.8902282714844 ,0.920439660549164,1.26706755161285,66.6091918945313,5.56980037689209,1.27517330646515,66.7994613647461,5.39773750305176 ,1.09651041030884,67.0683746337891,5.49785852432251,1.11143863201141,67.1923751831055,5.40110492706299,2.7501916885376 ,66.9078903198242,4.41789484024048,2.96971368789673,67.0416793823242,4.24683427810669,2.90063047409058,67.1711959838867 ,4.28111696243286,2.85137224197388,67.1216125488281,4.30856609344482,1.16678643226624,63.2754364013672,4.54892730712891 ,1.09948623180389,63.1225090026855,4.3932728767395,3.52014875411987,66.5681915283203,1.41023874282837,2.81077241897583 ,67.5875396728516,4.35087585449219,2.84671950340271,67.6490783691406,4.36929512023926,2.91685771942139,67.739143371582 ,4.34629249572754,2.14950728416443,68.2113342285156,5.06157875061035,1.88744533061981,67.7128448486328,4.7761607170105 ,1.90658605098724,67.7306594848633,4.72575330734253,2.66684770584106,67.666862487793,4.40541458129883,2.63094758987427 ,67.6649475097656,4.37922382354736,2.64179491996765,67.6679153442383,4.34329414367676,2.63837647438049,67.6569290161133 ,4.35390377044678,2.67725443840027,67.6459045410156,4.37598991394043,2.68379712104797,67.645393371582,4.36187076568604 ,2.70340514183044,67.6281814575195,4.39374732971191,2.68375492095947,67.6604156494141,4.36853933334351,2.63108110427856 ,67.6936798095703,4.37489652633667,2.67721843719482,67.6891937255859,4.39469718933105,2.66379165649414,67.723503112793 ,4.43931007385254,2.64891314506531,67.7717742919922,4.49245023727417,2.60378289222717,67.7730255126953,4.47100353240967 ,2.62222838401794,67.7251586914063,4.41901969909668,2.62578678131104,67.8282318115234,4.544997215271,2.58604288101196 ,67.8818740844727,4.60464668273926,2.55071640014648,67.8828201293945,4.57306337356567,2.58477163314819,67.8289108276367 ,4.51952791213989,2.41274118423462,68.0263519287109,4.7476634979248,2.39053511619568,68.0205841064453,4.70046854019165 ,2.29294395446777,68.0722198486328,4.79652309417725,2.16190576553345,68.1005783081055,4.81578254699707,2.16114211082459 ,68.0834503173828,4.75154447555542,2.28100919723511,68.0602035522461,4.74056959152222,2.02676129341125,68.1003265380859 ,4.79745244979858,2.03602194786072,68.0820999145508,4.72639274597168,1.89723575115204,68.0686798095703,4.75530529022217 ,1.91270339488983,68.0529327392578,4.67381286621094,1.79788935184479,67.9880752563477,4.60268306732178,1.92080700397491 ,68.1887969970703,5.105628490448,1.93564641475677,68.258659362793,5.19911479949951,2.35538291931152,69.3204345703125 ,4.8226203918457,2.7937285900116,67.7508544921875,4.45168733596802,2.88425230979919,67.3557815551758,4.30462741851807 ,2.96637773513794,67.3155670166016,4.22542715072632,3.03101301193237,67.2631759643555,4.13667774200439,2.98313593864441 ,67.367919921875,4.22117328643799,2.8918879032135,67.4051818847656,4.30441951751709,2.82269477844238,67.8825607299805 ,4.52608156204224,2.82237696647644,67.8314743041992,4.48638391494751,2.84394216537476,67.7091445922852,4.39417934417725 ,2.76129055023193,67.5614013671875,4.37353801727295,2.81881189346313,67.542121887207,4.35720634460449,2.89298915863037 ,67.5231018066406,4.31164932250977,2.74356412887573,67.5781784057617,4.37403583526611,2.7083146572113,67.5445709228516 ,4.41160869598389,2.72057390213013,67.5724487304688,4.39044380187988,2.73355674743652,67.5681076049805,4.3847131729126 ,2.72890734672546,67.5457611083984,4.39651870727539,2.78715944290161,67.4943618774414,4.36204719543457,2.83767509460449 ,67.4912948608398,4.32730150222778,2.90921020507813,67.4769439697266,4.26797485351563,1.46171438694,64.871826171875 ,4.57088136672974,1.46168184280396,64.8623657226563,4.52993297576904,1.45342350006104,64.8918609619141,4.68999195098877 ,1.56209766864777,65.5174102783203,4.69710302352905,1.4363579750061,65.2145614624023,4.6585807800293,1.65252137184143 ,65.5645446777344,4.60052061080933,1.52217984199524,65.2129592895508,4.55981159210205,1.39736211299896,64.9676742553711 ,4.60638952255249,1.77157056331635,65.6157836914063,4.40959930419922,1.63668429851532,65.2200317382813,4.40786361694336 ,0.726122140884399,65.1174240112305,5.19929122924805,1.13462257385254,65.1242065429688,5.11881446838379,1.27412569522858 ,65.0849456787109,5.03397226333618,1.36068820953369,65.0242233276367,4.91986703872681,1.5302517414093,64.8403625488281 ,4.81787014007568,1.49507963657379,64.8809509277344,4.87410831451416,1.46148920059204,64.9282989501953,4.8311505317688 ,1.43284630775452,64.9356536865234,4.80183410644531,1.40760779380798,64.9272537231445,4.76524639129639,1.39444208145142 ,64.8453903198242,4.74579191207886,1.5011979341507,64.1316986083984,4.44672012329102,1.55279195308685,64.7089920043945 ,4.52026653289795,1.58199083805084,64.7010955810547,4.49964618682861,1.70078897476196,64.7076950073242,4.27974700927734 ,1.64948379993439,64.6882553100586,4.37039136886597,1.85476243495941,64.6218185424805,3.94913387298584,1.58547294139862 ,64.7184600830078,4.49313879013062,1.42990434169769,64.9447860717773,4.81173467636108,1.25507736206055,66.4016342163086 ,5.6686840057373,1.24616432189941,66.4787979125977,5.64807605743408,0.97510838508606,66.1322402954102,5.9370002746582 ,0.987578868865967,66.1314163208008,5.88433408737183,0.935709834098816,66.1356201171875,6.00360631942749,0.844236493110657 ,66.1403579711914,6.04201221466064,1.00607120990753,63.0317497253418,4.32509899139404,1.40227580070496,63.0594825744629 ,3.96019172668457,1.25259900093079,62.9927406311035,3.91761565208435,1.01959240436554,62.9540824890137,3.88085770606995 ,0.780723452568054,62.9210891723633,3.85335659980774,0.690417647361755,63.0074348449707,4.45033359527588,0.882281303405762 ,63.0210838317871,4.43909072875977,2.49059963226318,64.2022399902344,3.29887342453003,2.43080735206604,64.0347061157227 ,3.29224872589111,2.17769908905029,63.5968742370605,3.21712899208069,2.27928495407104,63.7407913208008,3.22888469696045 ,1.66551721096039,63.4309310913086,4.4442834854126,1.5459178686142,63.2607612609863,4.28567314147949,1.41883444786072 ,63.139892578125,4.14798021316528,1.31143248081207,63.0501441955566,4.07752418518066,1.15474736690521,62.9899597167969 ,4.0333776473999,0.905233979225159,62.9417953491211,3.99692273139954,0.669827342033386,62.909797668457,3.96174693107605 ,2.22140121459961,63.7321739196777,3.49364185333252,2.35822939872742,63.8762016296387,3.26734066009521,1.66536605358124 ,65.7555770874023,4.83231115341187,1.24421012401581,65.8331680297852,5.21903419494629,1.2415417432785,65.8225250244141 ,5.17691421508789,1.94282019138336,65.3339538574219,4.64607572555542,1.38889932632446,64.7831268310547,5.05037975311279 ,1.25069510936737,64.7823028564453,5.21552419662476,1.45800125598907,64.8723449707031,4.52737236022949,1.97246038913727 ,64.5256500244141,3.32755517959595,2.10083770751953,64.4759292602539,2.59164428710938,2.70098495483398,63.9992523193359 ,2.42093873023987,1.47236037254334,68.0681533813477,5.15111064910889,1.67923533916473,68.144905090332,5.13741636276245 ,1.36034119129181,66.582389831543,5.42577075958252,1.22313511371613,67.8263702392578,4.87110996246338,1.41561686992645 ,67.4029159545898,4.80356073379517,1.24386429786682,67.3269653320313,5.16441249847412,1.28025853633881,67.2014999389648 ,5.19281053543091,2.18041920661926,68.451286315918,5.21900701522827,2.60483956336975,68.5525817871094,5.06904554367065 ,2.90485191345215,68.4689865112305,4.79139518737793,3.01555633544922,68.2925415039063,4.58393335342407,3.03188824653625 ,68.0995864868164,4.40577125549316,3.07575488090515,68.1117324829102,4.32803773880005,3.11300373077393,68.1376419067383 ,4.27170753479004,0.951111435890198,67.8357391357422,5.28150749206543,1.03982937335968,67.8353805541992,5.23061275482178 ,1.1349960565567,67.8375625610352,5.02568531036377,1.24151837825775,67.8561248779297,4.87322998046875,1.39355981349945 ,67.7509155273438,4.78209352493286,1.0940203666687,67.8359756469727,5.13545799255371,2.80376482009888,67.4326477050781 ,4.36306619644165,2.88349223136902,67.2817993164063,4.30629730224609,2.94912886619568,67.2709045410156,4.24452877044678 ,2.98852252960205,67.2110366821289,4.19697189331055,2.77813315391541,67.3302536010742,4.38874912261963,2.80464458465576 ,67.3863372802734,4.357825756073,2.70970630645752,67.5081481933594,4.41629791259766,2.68796753883362,67.5142364501953 ,4.43299722671509,1.6923543214798,68.0826873779297,4.85076808929443,1.07724368572235,66.2140274047852,5.78987312316895 ,0.990124940872192,66.1395797729492,5.85217237472534,0.957006216049194,66.0988311767578,5.85218954086304,0.955944538116455 ,66.0326766967773,5.69455099105835,1.37360000610352,65.8612747192383,5.2225341796875,1.30291390419006,65.8606109619141 ,5.23633575439453,1.28696703910828,65.9717864990234,5.26826047897339,1.2058436870575,66.1310348510742,5.20236778259277 ,1.2073700428009,66.081657409668,5.14830446243286,1.15509605407715,66.0897750854492,5.2003436088562,3.07375311851501 ,67.1264953613281,4.12566518783569,3.10644316673279,67.2067260742188,4.03005695343018,3.01146101951599,67.4560241699219 ,4.16344738006592,3.26566362380981,67.3137969970703,3.85877799987793,3.23967552185059,67.3935546875,3.79584240913391 ,3.00219583511353,67.4986190795898,4.20324993133545,3.23345947265625,67.4361953735352,3.82250928878784,3.47227358818054 ,67.1351623535156,3.1978120803833,3.20911312103271,67.6038055419922,3.84602642059326,1.38017463684082,67.8658065795898 ,4.78988122940063,1.04489850997925,67.6455078125,5.28492164611816,0.946268200874329,67.6453552246094,5.33524036407471 ,1.11085093021393,67.6494064331055,5.18183755874634,1.3418071269989,67.3768310546875,4.97024059295654,1.24413287639618 ,67.4093322753906,5.11822652816772,1.18746721744537,67.4170608520508,5.1835298538208,1.15831828117371,67.3799209594727 ,5.24726247787476,2.03133249282837,68.5468063354492,5.26267957687378,2.20468068122864,68.7326507568359,5.18999338150024 ,1.96770107746124,68.4115371704102,5.29732751846313,1.24037265777588,68.9764862060547,5.24644804000854,1.93664562702179 ,68.8729934692383,5.20075178146362,2.08420419692993,68.9143524169922,5.08791589736938,1.66595792770386,69.2999420166016 ,5.27965211868286,2.69618439674377,69.3363647460938,4.62717247009277,1.21942925453186,69.2810668945313,5.24096918106079 ,2.30219793319702,70.5151748657227,4.51481103897095,1.65603744983673,65.8645401000977,4.82821130752563,1.5150705575943 ,65.2759857177734,4.97173738479614,1.61782228946686,65.1860046386719,4.88035678863525,2.83090734481812,67.7513885498047 ,4.43764114379883,2.90546679496765,67.8018112182617,4.39182186126709,3.05201172828674,67.8971252441406,4.29138422012329 ,3.07350969314575,67.9136047363281,4.25318050384521,3.08565521240234,68.0720443725586,4.28964042663574,3.09590840339661 ,67.9019241333008,4.18263244628906,3.12226796150208,68.0895614624023,4.23420143127441,3.15805292129517,67.9133453369141 ,4.03698539733887,1.85307800769806,69.3176803588867,5.19680690765381,1.95780122280121,69.5691375732422,5.11974716186523 ,2.00819277763367,69.8451461791992,4.99117994308472,2.05755305290222,70.1033020019531,4.89759159088135,1.51351356506348 ,68.9728775024414,5.34801340103149,3.17292428016663,69.0089263916016,3.65988326072693,3.24468231201172,69.3821563720703 ,3.10906028747559,3.19405722618103,69.4203338623047,3.30144023895264,3.1433367729187,69.4741287231445,3.5175678730011 ,3.16293168067932,68.8886337280273,3.85672426223755,3.23307037353516,68.7058258056641,3.79092526435852,1.34411311149597 ,68.3689804077148,5.45315217971802,1.47962760925293,67.904182434082,4.78232955932617,1.56587851047516,67.9845123291016 ,4.78964614868164,2.32223176956177,66.6271820068359,4.62494134902954,2.52399301528931,66.5070343017578,4.41808605194092 ,3.18077445030212,68.1741943359375,4.13968563079834,3.18250513076782,61.6550064086914,0.15494367480278,2.97731566429138 ,62.090576171875,0.236494928598404,2.63404870033264,61.4835586547852,1.09880757331848,2.63750290870667,60.7715454101563 ,1.24464046955109,1.15286767482758,59.9498062133789,2.77086806297302,1.34675312042236,60.1751556396484,2.46136975288391 ,0.707067012786865,60.1917724609375,2.30265927314758,1.93906819820404,59.9140472412109,2.56447672843933,1.31039726734161 ,59.7857666015625,2.86505627632141,3.30667567253113,60.0582466125488,1.52897572517395,3.21281981468201,60.7512435913086 ,0.686783790588379,2.83494830131531,60.101676940918,1.82382214069366,2.0032696723938,60.1697044372559,2.2233898639679 ,2.95462036132813,59.8311195373535,2.23044967651367,3.44337105751038,61.3207168579102,0.0308288335800171,3.00886535644531 ,64.578254699707,-1.40568685531616,2.83613109588623,64.6232986450195,-1.88293862342834,3.03651714324951,64.1986770629883 ,-1.29441452026367,2.85587859153748,64.2701568603516,-1.88409495353699,2.3250470161438,64.3217086791992,-2.30119037628174 ,2.19409990310669,64.6903381347656,-2.30471992492676,1.47786962985992,64.7402801513672,-2.5796685218811,1.55335366725922 ,64.3825149536133,-2.64062190055847,0.9145188331604,64.7542877197266,-2.74038743972778,3.18349647521973,64.4910278320313 ,-0.831904411315918,3.10196471214294,64.0538482666016,-0.768124938011169,3.15863394737244,63.9126052856445,-1.1659996509552 ,2.94038534164429,64.0237808227539,-1.82171845436096,2.44409084320068,64.0830612182617,-2.38203501701355,1.64424133300781 ,64.1150970458984,-2.65511178970337,3.04022526741028,63.7449569702148,-0.723660707473755,3.83235144615173,67.9229354858398 ,1.56775510311127,3.77065491676331,67.9044799804688,1.65262651443481,3.95984673500061,67.9680023193359,1.12290859222412 ,3.83990359306335,67.9484176635742,1.16654276847839,4.05559206008911,68.0735244750977,0.94489711523056,4.04066514968872 ,68.1123504638672,1.10381245613098,3.96631550788879,67.9070129394531,0.998717308044434,3.69450688362122,67.8655624389648 ,0.79612410068512,3.64366936683655,67.7518081665039,0.54340922832489,3.59573769569397,67.5238571166992,0.356896281242371 ,3.86012148857117,67.9690551757813,1.670374751091,3.77919220924377,67.8664474487305,1.73471486568451,3.92326807975769 ,68.0409240722656,1.53420841693878,3.83544135093689,67.9114608764648,0.998802065849304,3.76413035392761,67.9968872070313 ,0.952667593955994,3.810711145401,67.8189544677734,0.880330681800842,3.65141010284424,67.6560745239258,0.732728004455566 ,3.60468745231628,67.442512512207,0.648090064525604,3.46820783615112,66.8373565673828,0.642570853233337,3.52254128456116 ,67.1582183837891,0.248262137174606,3.60760736465454,67.5348358154297,-0.420371651649475,3.78048825263977,67.6621246337891 ,0.776360392570496,3.73487710952759,67.4356536865234,0.701585710048676,3.66625213623047,67.1638641357422,0.669500708580017 ,3.53652048110962,67.141716003418,0.613216578960419,3.58888530731201,66.8496170043945,0.698460042476654,3.69785666465759 ,66.5569381713867,0.76279604434967,3.47390913963318,66.4032516479492,0.940670549869537,3.77345776557922,60.8544502258301 ,-0.0729393362998962,3.79325795173645,59.9792976379395,1.36709403991699,3.981778383255,59.7930335998535,1.87356519699097 ,0.777940273284912,61.6627578735352,-3.52194452285767,1.48603999614716,61.8513412475586,-3.45622205734253,2.36290335655212 ,62.0750350952148,-3.00863814353943,3.46754050254822,62.5932464599609,-2.43091034889221,3.77708125114441,62.6162300109863 ,-1.66679668426514,3.93208146095276,62.1959915161133,-0.753983974456787,3.28955364227295,67.0566711425781,3.80089235305786 ,1.19604671001434,66.8455123901367,5.48549938201904,1.62394678592682,64.794921875,4.62034463882446,1.47073328495026 ,64.8858413696289,4.72852897644043,1.85679113864899,68.1447296142578,4.88398790359497,1.74986064434052,65.9342269897461 ,4.76275300979614,1.80883491039276,65.8382873535156,4.73427295684814,1.89601337909698,65.7000503540039,4.67515993118286 ,1.7078458070755,68.1302337646484,4.88863897323608,1.68416428565979,68.1078338623047,4.86055564880371,0.00038185715675354 ,68.2644119262695,4.91810369491577,0.00735509395599365,68.2456970214844,4.89325475692749,2.08362030982971,63.940242767334 ,4.07634019851685,2.23859047889709,63.9939613342285,3.83288836479187,2.36071610450745,64.0901718139648,3.55181813240051 ,-1.03999102115631,64.1953964233398,4.12683153152466,-1.18111038208008,64.2263336181641,3.89086365699768,-1.30252110958099 ,64.3730163574219,3.61477756500244,-1.02499151229858,65.8723907470703,4.46659708023071,2.35556626319885,65.6158218383789 ,4.39196586608887,0.873621225357056,68.2819519042969,5.43281412124634,-2.36207580566406,66.7793350219727,1.48702847957611 ,-1.83337068557739,67.5775299072266,3.52100348472595,-1.13330495357513,67.8164596557617,4.45990085601807,3.02833318710327 ,67.7973480224609,4.23777866363525,0.964009761810303,69.5016860961914,5.21233224868774,0.943135738372803,69.2242813110352 ,5.24404191970825,0.703629970550537,68.9851608276367,5.32800006866455,0.921748876571655,68.9331893920898,5.30737543106079 ,1.14702486991882,68.9563522338867,5.31911516189575,-1.53307449817657,69.9197540283203,-1.07180321216583,0.652912974357605 ,65.5594787597656,4.85395431518555,0.656846284866333,65.6249160766602,4.75969839096069,0.658797264099121,65.6604156494141 ,4.71234512329102,0.661505103111267,65.7168884277344,4.6145977973938,0.665562868118286,65.8118057250977,4.4242901802063 ,0.674360871315002,66.0109024047852,4.04174327850342,0.671546220779419,66.1222076416016,3.37795090675354,0.651402831077576 ,66.0390167236328,2.57964992523193,0.60585629940033,65.5844116210938,1.97188603878021,0.570160269737244,65.118896484375 ,1.98627030849457,0.526925444602966,64.5698013305664,1.93749856948853,0.511002540588379,64.1597747802734,2.85311627388 ,0.493809551000595,64.1792678833008,3.5948166847229,0.525675535202026,64.0711288452148,4.17445087432861,0.541215419769287 ,64.1743774414063,4.63787937164307,0.250819176435471,65.5190734863281,4.86307859420776,0.228494554758072,65.5870208740234 ,4.76983070373535,0.196436315774918,65.6303787231445,4.72285842895508,0.15733814239502,65.6800079345703,4.62622213363647 ,0.099937379360199,65.7448501586914,4.43832969665527,0.0486626923084259,66.0053558349609,4.05459928512573,-0.0147473067045212 ,66.1213455200195,3.39184832572937,-0.0894939303398132,66.0962219238281,2.59238362312317,-0.161882400512695,65.6560592651367 ,2.28982543945313,-0.214036017656326,65.1918106079102,2.30449271202087,-0.246274381875992,64.6433258056641,2.29138565063477 ,-0.218271285295486,64.2160797119141,2.86565065383911,-0.174487501382828,64.2654724121094,3.5662088394165,-0.042945459485054 ,64.1155548095703,4.20135974884033,0.0312285125255585,64.2037506103516,4.64215660095215,1.04420983791351,65.4587783813477 ,4.85055589675903,1.07440137863159,65.5217056274414,4.7552924156189,1.11115729808807,65.5597534179688,4.70713710784912 ,1.15413916110992,65.6030502319336,4.60909032821655,1.21435952186584,65.6588134765625,4.41917610168457,1.29186642169952 ,65.9093704223633,4.03323268890381,1.34964776039124,66.015998840332,3.36839866638184,1.39229929447174,65.9818115234375 ,2.56691646575928,1.3859030008316,65.5365524291992,2.26322388648987,1.36666464805603,65.0697708129883,2.27732515335083 ,1.3138815164566,64.5228652954102,2.26457142829895,1.24027609825134,64.1034622192383,2.84058260917664,1.16210687160492 ,64.0930633544922,3.62342405319214,1.10009157657623,64.0964889526367,4.17122077941895,1.0526248216629,64.1909713745117 ,4.50982093811035,1.89644730091095,67.7359085083008,4.67418622970581,1.81632149219513,67.7875213623047,4.61641120910645 ,2.12802863121033,67.6517791748047,4.72160243988037,1.98360979557037,67.7028198242188,4.71778392791748,1.77853500843048 ,67.8334732055664,4.57319593429565,1.75040686130524,67.8640594482422,4.5403995513916,2.42679309844971,67.6176147460938 ,4.63404083251953,2.54108619689941,67.6052627563477,4.51983451843262,2.48956918716431,67.6133270263672,4.57629919052124 ,1.74333274364471,67.8989181518555,4.53774070739746,1.93537843227386,67.7207946777344,4.6994047164917,2.57160806655884 ,67.5975723266602,4.45073556900024,2.5858838558197,67.6601409912109,4.42239618301392,2.58265948295593,67.6481552124023 ,4.43020439147949,2.57664966583252,67.6871948242188,4.4448299407959,2.55325865745544,67.770622253418,4.51302242279053 ,2.56909608840942,67.7202301025391,4.47619247436523,2.50709199905396,67.8812103271484,4.58537578582764,2.53704166412354 ,67.8295440673828,4.54725313186646,2.36653184890747,68.0211791992188,4.67595386505127,2.16523623466492,68.0977172851563 ,4.71221017837524,2.27045369148254,68.0672378540039,4.70446872711182,2.05515193939209,68.1021881103516,4.69430780410767 ,1.94643938541412,68.0781097412109,4.65700387954712,1.84540617465973,68.0238876342773,4.60649824142456,2.27108001708984 ,67.6280059814453,4.70892524719238,1.98273718357086,67.7163162231445,4.56902360916138,1.9115127325058,67.7589797973633 ,4.53995370864868,2.13523030281067,67.6635894775391,4.58285903930664,2.03138518333435,67.6998062133789,4.58159112930298 ,1.87199437618256,67.7949829101563,4.52198696136475,1.8542720079422,67.8257751464844,4.5079026222229,2.36474823951721 ,67.6484298706055,4.5119104385376,2.31572771072388,67.6422805786133,4.5551061630249,1.86171853542328,67.868896484375 ,4.5054759979248,2.41878652572632,67.6660537719727,4.43914270401001,2.44726538658142,67.6855010986328,4.43181991577148 ,2.46289682388306,67.7375793457031,4.46374797821045,2.44555950164795,67.7956695556641,4.49104022979736,2.45723295211792 ,67.7605285644531,4.47634077072144,2.4117910861969,67.8728866577148,4.51987743377686,2.43361759185791,67.8368377685547 ,4.50457382202148,2.31002712249756,67.9707336425781,4.55646896362305,2.16502261161804,68.0245590209961,4.57177495956421 ,2.24073529243469,68.0030136108398,4.56828546524048,2.08600091934204,68.0280380249023,4.56502389907837,2.00812268257141 ,68.0116424560547,4.55059480667114,1.93588101863861,67.9740905761719,4.53102397918701,2.23815989494324,67.6467971801758 ,4.57702589035034,-0.212368905544281,67.8996810913086,4.63779544830322,-0.485981106758118,67.8154220581055,4.7144570350647 ,-0.314577341079712,67.8651428222656,4.70246028900146,-0.0699974000453949,67.9629440307617,4.49406051635742,-0.0349433273077011 ,67.9887771606445,4.4476261138916,-0.826956033706665,67.8586120605469,4.60484981536865,-0.956437468528748,67.8552551269531 ,4.4510293006897,-0.900565505027771,67.865234375,4.52698564529419,-0.0208806097507477,68.0293426513672,4.44375610351563 ,-0.258073717355728,67.8792419433594,4.67536354064941,-0.998348236083984,67.8886108398438,4.3549690246582,-1.00609660148621 ,67.9421310424805,4.31744146347046,-1.00461220741272,67.9233016967773,4.3282585144043,-0.949204087257385,68.0249328613281 ,4.44410514831543,-0.976211071014404,67.9849166870117,4.39273262023926,-0.874837517738342,68.1462326049805,4.54314088821411 ,-0.919130444526672,68.0910263061523,4.49123859405518,-0.689786434173584,68.2753372192383,4.66390991210938,-0.450264871120453 ,68.3228759765625,4.70611143112183,-0.573601424694061,68.3050308227539,4.69983911514282,-0.326902955770493,68.3137054443359 ,4.67624616622925,-0.210561603307724,68.2769317626953,4.61912107467651,-0.10955773293972,68.1954116821289,4.54428195953369 ,-0.650413751602173,67.8144989013672,4.70292139053345,-0.229091107845306,67.9318695068359,4.42529535293579,-0.494329631328583 ,67.8742752075195,4.40578269958496,-0.360107153654099,67.9088897705078,4.41941356658936,-0.122926339507103,67.9665222167969 ,4.44002151489258,-0.759347319602966,67.912353515625,4.40942287445068,-0.858121633529663,67.9182205200195,4.40049695968628 ,-0.81566846370697,67.9212646484375,4.40700912475586,-0.126330554485321,68.0354919433594,4.45229911804199,-0.893098115921021 ,67.9021987915039,4.38819122314453,-0.896688580513,67.9520492553711,4.40433549880981,-0.87952196598053,67.9892578125 ,4.42123937606812,-0.852579474449158,68.0385284423828,4.44430255889893,-0.796185731887817,68.1190872192383,4.48092985153198 ,-0.829913258552551,68.0828094482422,4.46386814117432,-0.65356719493866,68.2033767700195,4.52140235900879,-0.466939032077789 ,68.2333831787109,4.5374698638916,-0.563301205635071,68.2218780517578,4.53163146972656,-0.369929194450378,68.2275085449219 ,4.53461980819702,-0.277927368879318,68.2034759521484,4.52329397201538,-0.197574734687805,68.1487274169922,4.49941539764404 ,-0.622779250144959,67.8752670288086,4.40379571914673,-0.141183137893677,67.9313125610352,4.56592798233032,-0.105590149760246 ,67.9471282958984,4.52999401092529,-0.317027002573013,43.3981781005859,-4.17614793777466,-0.834381639957428,43.4859733581543 ,-4.23113298416138,-1.51100981235504,44.4054069519043,-4.25199365615845,-1.4732049703598,44.902889251709,-4.17614889144897 ,-0.0162359997630119,43.5158843994141,-4.1427001953125,-1.28199899196625,45.1632194519043,-4.1427001953125,0.158467993140221 ,43.6501235961914,-4.15208005905151,-1.10729598999023,45.2974548339844,-4.15208101272583,0.628645002841949,43.7916564941406 ,-4.30703783035278,0.32362699508667,43.5572891235352,-4.30703687667847,-1.15446102619171,45.4809532165527,-4.3070387840271 ,-0.849443018436432,45.7153167724609,-4.3070387840271,0.727638006210327,44.0849380493164,-4.165198802948,0.563943028450012 ,43.9616775512695,-4.165198802948,-0.701821029186249,45.6090087890625,-4.16520023345947,-0.538125991821289,45.7322692871094 ,-4.165198802948,1.17372703552246,44.2080078125,-4.30703783035278,0.886372923851013,43.9871635437012,-4.30703783035278 ,-0.591714978218079,45.910831451416,-4.30703783035278,-0.304394006729126,46.1316452026367,-4.30703783035278,1.43661201000214 ,44.6284790039063,-4.19403791427612,1.11930799484253,44.3859214782715,-4.165198802948,-0.146456003189087,46.0332565307617 ,-4.16520023345947,0.170848995447159,46.2758102416992,-4.19403791427612,1.68137609958649,44.8160705566406,-3.78847002983093 ,1.56688797473907,44.7282600402832,-4.0851788520813,0.301124006509781,46.3755912780762,-4.0851788520813,0.415612012147903 ,46.4634017944336,-3.78847002983093,-1.59946060180664,44.3374443054199,-3.79821419715881,-0.914093196392059,43.419677734375 ,-3.78314900398254,-0.0272600017488003,43.5074119567871,-3.7880527973175,-1.29302394390106,45.1547470092773,-3.7880527973175 ,0.181598216295242,43.6708488464355,-3.79498100280762,-1.07914197444916,45.3190879821777,-3.79843235015869,-0.701821029186249 ,45.6090126037598,-3.81037211418152,0.563943028450012,43.9616775512695,-3.81037211418152,0.727638006210327,44.0849342346191 ,-3.81037211418152,-0.538125991821289,45.7322692871094,-3.81037211418152,-0.148130998015404,46.0319519042969,-3.81037211418152 ,1.11763298511505,44.3846168518066,-3.81037211418152,1.26549303531647,44.4971542358398,-3.82166981697083,-0.000269999989541247 ,46.1444854736328,-3.82167100906372,1.30914115905762,44.5305786132813,-3.86609816551209,0.0433779992163181,46.1779098510742 ,-3.8660991191864,-0.367087990045547,43.3597106933594,-3.78918409347534,0.378194004297256,43.486270904541,-3.92864799499512 ,0.683211982250214,43.7206382751465,-3.92864799499512,0.94093906879425,43.9161491394043,-3.92864799499512,1.228276014328 ,44.1369781494141,-3.92864799499512,0.443740993738174,43.4009666442871,-3.79230833053589,0.748758971691132,43.6353302001953 ,-3.79230904579163,1.2905980348587,44.0491600036621,-3.79230833053589,1.00648701190948,43.8308448791504,-3.79230833053589 ,1.37339198589325,44.5797996520996,-3.80079698562622,0.107629001140594,46.2271347045898,-3.80079770088196,-0.358994990587235 ,46.20263671875,-3.92864799499512,-0.646282017230988,45.9818458557129,-3.92864799499512,-0.904009938240051,45.7863349914551 ,-3.92864799499512,-1.20902800559998,45.5519676208496,-3.92864799499512,-1.52326595783234,44.8644218444824,-3.78918409347534 ,-0.427762001752853,46.2854347229004,-3.79230833053589,-0.711830019950867,46.0671539306641,-3.79230904579163,-0.969556987285614 ,45.8716430664063,-3.79230833053589,-1.27457499504089,45.6372756958008,-3.79230904579163,-13.6780347824097,1.56476700305939 ,-0.962452054023743,-13.5355319976807,2.28442907333374,-0.326824009418488,-13.7296142578125,1.90572786331177,0.0347840003669262 ,-13.8451042175293,1.28352797031403,-0.534878015518188,-13.2113485336304,3.41421222686768,0.780472993850708,-13.4375886917114 ,2.95067405700684,1.12730300426483,-12.3108987808228,4.26939582824707,1.75078189373016,-12.5499305725098,3.72543716430664 ,2.15108489990234,-10.9267930984497,4.62305116653442,2.39914608001709,-11.0607147216797,4.0776162147522,2.87612700462341 ,-13.7357864379883,1.83517897129059,0.0675569996237755,-13.4553098678589,2.88778805732727,1.16740500926971,-13.4221811294556 ,2.62378597259521,1.13361215591431,-13.659797668457,1.58253502845764,0.0165539998561144,-12.5724210739136,3.66829299926758 ,2.19642400741577,-12.595648765564,3.34137725830078,2.16981601715088,-11.067608833313,3.99253296852112,2.89867806434631 ,-11.0777006149292,3.67775297164917,2.90849208831787,-13.8719444274902,1.31002199649811,0.425152987241745,-13.8813171386719 ,0.922089993953705,-0.131953999400139,-13.7507238388062,1.20414614677429,-0.352847993373871,-13.7218284606934,2.18296194076538 ,1.73859214782715,-12.8380451202393,2.85210108757019,2.91106700897217,-11.2669439315796,3.18960094451904,3.69444298744202 ,-13.8856010437012,1.00176298618317,-0.627758979797363,-13.7876510620117,0.865270912647247,-1.45944786071777,-13.8358287811279 ,1.2590719461441,-0.456277012825012,-7.71573686599731,2.20191693305969,1.16589915752411,-7.56110048294067,1.46297514438629 ,0.62024998664856,-7.64086675643921,1.2053279876709,1.01679396629334,-7.77079105377197,1.89633202552795,1.61284804344177 ,-8.34208297729492,3.50494909286499,2.02134108543396,-8.44800853729248,3.08205199241638,2.58425903320313,-9.51651096343994 ,3.81002974510193,2.96585988998413,-9.35363388061523,4.35058403015137,2.47706699371338,-7.82847023010254,1.84765613079071 ,1.64134502410889,-7.96436500549316,1.67664396762848,1.67775213718414,-8.53395843505859,2.79537510871887,2.64249300956726 ,-8.46099376678467,3.02799868583679,2.64509105682373,-9.57126045227051,3.48190593719482,3.04697799682617,-9.54757595062256 ,3.76337790489197,3.0204439163208,-7.85036659240723,0.923666000366211,1.44919002056122,-7.84358215332031,1.19052505493164 ,1.1865119934082,-7.67029094696045,0.892737984657288,0.995962023735046,-7.72204780578613,0.665284991264343,1.10715901851654 ,-7.96370410919189,1.32437098026276,2.04898595809937,-8.62763500213623,2.38745093345642,3.37738871574402,-9.67886352539063 ,2.98630094528198,3.90722489356995,-7.50302839279175,0.0706660002470016,0.16516999900341,-7.65504312515259,0.57694798707962 ,1.02590584754944,-7.63006162643433,0.858869016170502,0.922900974750519,-7.45552921295166,0.293835997581482,-0.0636129975318909 ,-7.47746133804321,0.77325302362442,0.103377990424633,-7.6795711517334,1.16882801055908,1.05913496017456,-13.8515253067017 ,1.04447174072266,-0.519836008548737,-13.9187040328979,0.749768018722534,-0.385737001895905,-13.9613208770752,0.689105987548828 ,-0.524842023849487,-14.1618280410767,0.693732023239136,0.904721021652222,-14.2566156387329,0.201043993234634,1.2078560590744 ,-14.2272043228149,-0.0554590001702309,0.292737007141113,-14.1005353927612,0.453911006450653,0.102949999272823,-14.0750226974487 ,1.22226297855377,2.3223569393158,-14.1696844100952,0.757678985595703,2.74612402915955,-13.1613607406616,1.81473004817963 ,3.52351808547974,-13.3137845993042,1.41021299362183,4.07391881942749,-11.5029983520508,2.21419310569763,4.46008491516113 ,-11.6761035919189,1.73573398590088,5.00057792663574,-14.1197128295898,0.75049501657486,0.84908801317215,-13.9271574020386 ,0.81058794260025,0.591765999794006,-13.8647260665894,1.32616198062897,2.01072406768799,-13.9969501495361,1.2639479637146 ,2.23578906059265,-13.0012092590332,1.92415702342987,3.13362169265747,-13.0971918106079,1.85302400588989,3.45393371582031 ,-11.3908538818359,2.33619499206543,4.02878093719482,-11.4788293838501,2.24708294868469,4.36365699768066,-14.0445289611816 ,0.489760965108871,-0.225505992770195,-14.1171455383301,-0.207783997058868,-0.640401005744934,-14.0550327301025,0.529439985752106 ,0.105508998036385,-13.9215707778931,0.662356019020081,0.12636099755764,-7.83413791656494,-0.0283060017973185,1.913419008255 ,-8.06515884399414,0.286482006311417,2.91064691543579,-7.95277881622314,0.834507048130035,2.67236089706421,-7.780601978302 ,0.469280004501343,1.68146514892578,-8.78317642211914,1.03417301177979,4.53717422485352,-8.70439052581787,1.56782102584839 ,4.13548183441162,-9.94776630401611,1.60068798065186,5.2044620513916,-9.77998733520508,2.07577204704285,4.66377878189087 ,-7.95914030075073,0.885506987571716,2.59952688217163,-8.74676513671875,1.62127304077148,4.04322910308838,-8.78474044799805 ,1.72587299346924,3.80446791648865,-8.04425525665283,0.948602974414825,2.30370092391968,-9.76146507263184,2.11520910263062 ,4.5624737739563,-9.8388090133667,2.19951796531677,4.26146602630615,-7.76102113723755,0.52852201461792,1.38592100143433 ,-7.91985082626343,0.685284018516541,1.6529289484024,-7.53962087631226,-0.179324001073837,0.333211004734039,-7.71288299560547 ,0.445039004087448,1.31922614574432,-7.65219831466675,-0.232834994792938,0.904438018798828,-7.80965709686279,0.549328029155731 ,1.63786089420319,-13.9975500106812,0.58357697725296,-0.134222000837326,-14.0162773132324,-0.11387600004673,-1.19407498836517 ,-13.9406709671021,0.152143001556396,-1.3564670085907,-13.8613548278809,0.385596007108688,-1.58571898937225,-13.3260583877563 ,1.52340304851532,-0.926805019378662,-13.6498346328735,0.799180924892426,-0.197821021080017,-13.6360759735107,1.163419008255 ,0.459197998046875,-13.214916229248,2.19469499588013,-0.354411989450455,-13.3867931365967,1.8975909948349,1.65856885910034 ,-12.879186630249,3.26200866699219,0.666939973831177,-12.6128787994385,2.55630111694336,2.73621797561646,-12.0652027130127 ,4.01996278762817,1.44470298290253,-11.2527093887329,2.92929005622864,3.43369626998901,-10.8725614547729,4.34354496002197 ,2.04087495803833,-13.4099502563477,0.802688002586365,-1.48420095443726,-13.4805784225464,0.323792994022369,-1.59506595134735 ,-8.03701400756836,0.645461976528168,1.01014995574951,-7.90348291397095,1.52642500400543,0.427454024553299,-8.08730697631836 ,2.19412302970886,0.955696940422058,-8.23932838439941,1.26469194889069,1.94163298606873,-8.62477397918701,3.40587210655212 ,1.72736203670502,-8.85360431671143,2.13062691688538,3.05519890785217,-9.42286491394043,4.11251783370972,2.11699104309082 ,-9.80203533172607,2.76634788513184,3.57874298095703,-7.79784631729126,0.794174075126648,-0.103330008685589,-7.82158517837524 ,0.364942997694016,-0.290657997131348,-13.8217973709106,-0.170460999011993,0.398487001657486,-13.8654460906982,0.0600179992616177 ,1.26387298107147,-13.8260746002197,0.517706990242004,2.71623492240906,-13.1112518310547,1.06115102767944,3.8931291103363 ,-11.643946647644,1.41572594642639,4.7784481048584,-13.7150077819824,-0.346439003944397,-0.612541973590851,-13.6095657348633 ,-0.241651996970177,-1.15343594551086,-8.24737453460693,-0.15752400457859,1.85458099842072,-8.44620132446289,0.104812011122704 ,2.83339309692383,-9.08258628845215,0.769033014774323,4.3923487663269,-10.0709543228149,1.28220784664154,4.95027685165405 ,-8.06989288330078,-0.31148499250412,0.740787029266357,-7.96294832229614,-0.289009004831314,0.219812005758286,-13.4217224121094 ,2.3107750415802,-0.375806987285614,-13.5710763931274,1.59470999240875,-1.01851904392242,-13.103946685791,3.42879104614258 ,0.713451981544495,-12.2277145385742,4.27713680267334,1.65429794788361,-10.9000606536865,4.61849594116211,2.28014898300171 ,-13.5571355819702,-0.0426359996199608,-1.52019703388214,-13.7583179473877,0.376628011465073,-1.67076504230499,-13.8444566726685 ,-0.00786899961531162,-1.59044694900513,-13.687385559082,0.836558997631073,-1.54808294773102,-7.63128089904785,1.51451098918915 ,0.516359984874725,-7.79104614257813,2.23954701423645,1.06171703338623,-8.39723968505859,3.52309203147888,1.89859700202942 ,-9.36298179626465,4.34764623641968,2.35511302947998,-7.54345893859863,0.770093977451324,-0.0295189991593361,-7.52011299133301 ,0.315405994653702,-0.201513007283211,-7.88312101364136,-0.0476690009236336,-0.189381003379822,-7.54605770111084,-0.0761459991335869 ,-0.107980996370316,-14.1586351394653,-0.138848006725311,0.337846010923386,-14.1826257705688,0.10935901850462,1.25752902030945 ,-14.1024370193481,0.650152027606964,2.78769397735596,-13.2866096496582,1.29429996013641,4.09255599975586,-11.6883716583252 ,1.60427713394165,5.0113639831543,-13.9429140090942,-0.219302996993065,-1.2073849439621,-14.0385818481445,-0.306542009115219 ,-0.675978004932404,-8.16566753387451,0.194731995463371,2.91308689117432,-7.9301438331604,-0.113416999578476,1.92874503135681 ,-8.86132144927979,0.920903027057648,4.54089879989624,-10.0087671279907,1.47676694393158,5.21392393112183,-7.72993421554565 ,-0.324436992406845,0.821264028549194,-7.6232590675354,-0.286345988512039,0.279785007238388,-13.9344873428345,0.0526309981942177 ,-1.52636194229126,-7.47345447540283,-0.0321439988911152,-0.00272500002756715,13.6780347824097,1.56476700305939,-0.962452054023743 ,13.5355319976807,2.28442907333374,-0.326824009418488,13.7296142578125,1.90572786331177,0.0347840003669262,13.8451042175293 ,1.28352797031403,-0.534878015518188,13.2113485336304,3.41421222686768,0.780472993850708,13.4375886917114,2.95067405700684 ,1.12730300426483,12.3108987808228,4.26939582824707,1.75078189373016,12.5499305725098,3.72543716430664,2.15108489990234 ,10.9267930984497,4.62305116653442,2.39914608001709,11.0607147216797,4.0776162147522,2.87612700462341,13.7357864379883 ,1.83517897129059,0.0675569996237755,13.4553098678589,2.88778805732727,1.16740500926971,13.4221811294556,2.62378597259521 ,1.13361215591431,13.659797668457,1.58253502845764,0.0165539998561144,12.5724210739136,3.66829299926758,2.19642400741577 ,12.595648765564,3.34137725830078,2.16981601715088,11.067608833313,3.99253296852112,2.89867806434631,11.0777006149292 ,3.67775297164917,2.90849208831787,13.8719444274902,1.31002199649811,0.425152987241745,13.8813171386719,0.922089993953705 ,-0.131953999400139,13.7507238388062,1.20414614677429,-0.352847993373871,13.7218284606934,2.18296194076538,1.73859214782715 ,12.8380451202393,2.85210108757019,2.91106700897217,11.2669439315796,3.18960094451904,3.69444298744202,13.8856010437012 ,1.00176298618317,-0.627758979797363,13.7876510620117,0.865270912647247,-1.45944786071777,13.8358287811279,1.2590719461441 ,-0.456277012825012,7.71573686599731,2.20191693305969,1.16589915752411,7.56110048294067,1.46297514438629,0.62024998664856 ,7.64086675643921,1.2053279876709,1.01679396629334,7.77079105377197,1.89633202552795,1.61284804344177,8.34208297729492 ,3.50494909286499,2.02134108543396,8.44800853729248,3.08205199241638,2.58425903320313,9.51651096343994,3.81002974510193 ,2.96585988998413,9.35363388061523,4.35058403015137,2.47706699371338,7.82847023010254,1.84765613079071,1.64134502410889 ,7.96436500549316,1.67664396762848,1.67775213718414,8.53395843505859,2.79537510871887,2.64249300956726,8.46099376678467 ,3.02799868583679,2.64509105682373,9.57126045227051,3.48190593719482,3.04697799682617,9.54757595062256,3.76337790489197 ,3.0204439163208,7.85036659240723,0.923666000366211,1.44919002056122,7.84358215332031,1.19052505493164,1.1865119934082 ,7.67029094696045,0.892737984657288,0.995962023735046,7.72204780578613,0.665284991264343,1.10715901851654,7.96370410919189 ,1.32437098026276,2.04898595809937,8.62763500213623,2.38745093345642,3.37738871574402,9.67886352539063,2.98630094528198 ,3.90722489356995,7.50302839279175,0.0706660002470016,0.16516999900341,7.65504312515259,0.57694798707962,1.02590584754944 ,7.63006162643433,0.858869016170502,0.922900974750519,7.45552921295166,0.293835997581482,-0.0636129975318909,7.47746133804321 ,0.77325302362442,0.103377990424633,7.6795711517334,1.16882801055908,1.05913496017456,13.8515253067017,1.04447174072266 ,-0.519836008548737,13.9187040328979,0.749768018722534,-0.385737001895905,13.9613208770752,0.689105987548828,-0.524842023849487 ,14.1618280410767,0.693732023239136,0.904721021652222,14.2566156387329,0.201043993234634,1.2078560590744,14.2272043228149 ,-0.0554590001702309,0.292737007141113,14.1005353927612,0.453911006450653,0.102949999272823,14.0750226974487,1.22226297855377 ,2.3223569393158,14.1696844100952,0.757678985595703,2.74612402915955,13.1613607406616,1.81473004817963,3.52351808547974 ,13.3137845993042,1.41021299362183,4.07391881942749,11.5029983520508,2.21419310569763,4.46008491516113,11.6761035919189 ,1.73573398590088,5.00057792663574,14.1197128295898,0.75049501657486,0.84908801317215,13.9271574020386,0.81058794260025 ,0.591765999794006,13.8647260665894,1.32616198062897,2.01072406768799,13.9969501495361,1.2639479637146,2.23578906059265 ,13.0012092590332,1.92415702342987,3.13362169265747,13.0971918106079,1.85302400588989,3.45393371582031,11.3908538818359 ,2.33619499206543,4.02878093719482,11.4788293838501,2.24708294868469,4.36365699768066,14.0445289611816,0.489760965108871 ,-0.225505992770195,14.1171455383301,-0.207783997058868,-0.640401005744934,14.0550327301025,0.529439985752106,0.105508998036385 ,13.9215707778931,0.662356019020081,0.12636099755764,7.83413791656494,-0.0283060017973185,1.913419008255,8.06515884399414 ,0.286482006311417,2.91064691543579,7.95277881622314,0.834507048130035,2.67236089706421,7.780601978302,0.469280004501343 ,1.68146514892578,8.78317642211914,1.03417301177979,4.53717422485352,8.70439052581787,1.56782102584839,4.13548183441162 ,9.94776630401611,1.60068798065186,5.2044620513916,9.77998733520508,2.07577204704285,4.66377878189087,7.95914030075073 ,0.885506987571716,2.59952688217163,8.74676513671875,1.62127304077148,4.04322910308838,8.78474044799805,1.72587299346924 ,3.80446791648865,8.04425525665283,0.948602974414825,2.30370092391968,9.76146507263184,2.11520910263062,4.5624737739563 ,9.8388090133667,2.19951796531677,4.26146602630615,7.76102113723755,0.52852201461792,1.38592100143433,7.91985082626343 ,0.685284018516541,1.6529289484024,7.53962087631226,-0.179324001073837,0.333211004734039,7.71288299560547,0.445039004087448 ,1.31922614574432,7.65219831466675,-0.232834994792938,0.904438018798828,7.80965709686279,0.549328029155731,1.63786089420319 ,13.9975500106812,0.58357697725296,-0.134222000837326,14.0162773132324,-0.11387600004673,-1.19407498836517,13.9406709671021 ,0.152143001556396,-1.3564670085907,13.8613548278809,0.385596007108688,-1.58571898937225,13.3260583877563,1.52340304851532 ,-0.926805019378662,13.6498346328735,0.799180924892426,-0.197821021080017,13.6360759735107,1.163419008255,0.459197998046875 ,13.214916229248,2.19469499588013,-0.354411989450455,13.3867931365967,1.8975909948349,1.65856885910034,12.879186630249 ,3.26200866699219,0.666939973831177,12.6128787994385,2.55630111694336,2.73621797561646,12.0652027130127,4.01996278762817 ,1.44470298290253,11.2527093887329,2.92929005622864,3.43369626998901,10.8725614547729,4.34354496002197,2.04087495803833 ,13.4099502563477,0.802688002586365,-1.48420095443726,13.4805784225464,0.323792994022369,-1.59506595134735,8.03701400756836 ,0.645461976528168,1.01014995574951,7.90348291397095,1.52642500400543,0.427454024553299,8.08730697631836,2.19412302970886 ,0.955696940422058,8.23932838439941,1.26469194889069,1.94163298606873,8.62477397918701,3.40587210655212,1.72736203670502 ,8.85360431671143,2.13062691688538,3.05519890785217,9.42286491394043,4.11251783370972,2.11699104309082,9.80203533172607 ,2.76634788513184,3.57874298095703,7.79784631729126,0.794174075126648,-0.103330008685589,7.82158517837524,0.364942997694016 ,-0.290657997131348,13.8217973709106,-0.170460999011993,0.398487001657486,13.8654460906982,0.0600179992616177,1.26387298107147 ,13.8260746002197,0.517706990242004,2.71623492240906,13.1112518310547,1.06115102767944,3.8931291103363,11.643946647644 ,1.41572594642639,4.7784481048584,13.7150077819824,-0.346439003944397,-0.612541973590851,13.6095657348633,-0.241651996970177 ,-1.15343594551086,8.24737453460693,-0.15752400457859,1.85458099842072,8.44620132446289,0.104812011122704,2.83339309692383 ,9.08258628845215,0.769033014774323,4.3923487663269,10.0709543228149,1.28220784664154,4.95027685165405,8.06989288330078 ,-0.31148499250412,0.740787029266357,7.96294832229614,-0.289009004831314,0.219812005758286,13.4217224121094,2.3107750415802 ,-0.375806987285614,13.5710763931274,1.59470999240875,-1.01851904392242,13.103946685791,3.42879104614258,0.713451981544495 ,12.2277145385742,4.27713680267334,1.65429794788361,10.9000606536865,4.61849594116211,2.28014898300171,13.5571355819702 ,-0.0426359996199608,-1.52019703388214,13.7583179473877,0.376628011465073,-1.67076504230499,13.8444566726685,-0.00786899961531162 ,-1.59044694900513,13.687385559082,0.836558997631073,-1.54808294773102,7.63128089904785,1.51451098918915,0.516359984874725 ,7.79104614257813,2.23954701423645,1.06171703338623,8.39723968505859,3.52309203147888,1.89859700202942,9.36298179626465 ,4.34764623641968,2.35511302947998,7.54345893859863,0.770093977451324,-0.0295189991593361,7.52011299133301,0.315405994653702 ,-0.201513007283211,7.88312101364136,-0.0476690009236336,-0.189381003379822,7.54605770111084,-0.0761459991335869,-0.107980996370316 ,14.1586351394653,-0.138848006725311,0.337846010923386,14.1826257705688,0.10935901850462,1.25752902030945,14.1024370193481 ,0.650152027606964,2.78769397735596,13.2866096496582,1.29429996013641,4.09255599975586,11.6883716583252,1.60427713394165 ,5.0113639831543,13.9429140090942,-0.219302996993065,-1.2073849439621,14.0385818481445,-0.306542009115219,-0.675978004932404 ,8.16566753387451,0.194731995463371,2.91308689117432,7.9301438331604,-0.113416999578476,1.92874503135681,8.86132144927979 ,0.920903027057648,4.54089879989624,10.0087671279907,1.47676694393158,5.21392393112183,7.72993421554565,-0.324436992406845 ,0.821264028549194,7.6232590675354,-0.286345988512039,0.279785007238388,13.9344873428345,0.0526309981942177,-1.52636194229126 ,7.47345447540283,-0.0321439988911152,-0.00272500002756715,10.7124395370483,57.0556602478027,-6.04039001464844,11.3695554733276 ,57.217170715332,-5.78218126296997,11.4667978286743,56.4108619689941,-5.70864200592041,10.7735166549683,56.329948425293 ,-6.00628137588501,12.6069326400757,57.5657844543457,-4.83701992034912,12.6863536834717,56.5795631408691,-4.74567937850952 ,13.3836278915405,57.7985610961914,-3.45969557762146,13.4556169509888,56.6929550170898,-3.40973043441772,13.5839586257935 ,57.8815231323242,-1.86121022701263,13.6550102233887,56.7342262268066,-1.84742498397827,12.3341121673584,57.7085723876953 ,-4.77183103561401,11.0727882385254,57.3072090148926,-5.68556499481201,13.0607481002808,57.9960670471191,-3.43343567848206 ,13.2453107833862,58.0991554260254,-1.88054573535919,10.4601907730103,57.1115608215332,-6.06003665924072,10.0851039886475 ,57.3179016113281,-6.09067630767822,10.4496412277222,57.3653335571289,-5.84987211227417,10.676438331604,57.221809387207 ,-5.81656265258789,11.0296907424927,57.836612701416,-5.64854335784912,11.9441976547241,58.6488418579102,-4.79833269119263 ,12.582670211792,59.116268157959,-3.46573519706726,12.736496925354,59.2816390991211,-1.91715252399445,10.4555358886719 ,58.6530647277832,-5.65306329727173,11.2547769546509,59.5086250305176,-4.84232950210571,11.7785902023315,60.1175575256348 ,-3.51702165603638,11.8950414657593,60.3289756774902,-1.96966993808746,9.57929134368896,56.9524612426758,-6.27373933792114 ,9.19234466552734,57.3395614624023,-6.29679536819458,9.7266731262207,57.8835411071777,-6.21597003936768,10.1856927871704 ,57.5712623596191,-6.24911499023438,9.97100353240967,56.2237091064453,-6.13345384597778,9.34849166870117,56.7671585083008 ,-6.17100095748901,10.2850532531738,58.4537925720215,-6.10226821899414,10.7824363708496,57.8354225158691,-6.08034324645996 ,8.88277912139893,58.869197845459,-6.15048742294312,8.15592193603516,58.9244689941406,-6.1637921333313,8.21378612518311 ,59.6352043151855,-5.90438842773438,9.02373790740967,59.5423164367676,-5.92333841323853,8.31526947021484,60.9121170043945 ,-5.008704662323,9.30575180053711,60.8378715515137,-5.03566408157349,8.3420991897583,61.7613945007324,-3.71743059158325 ,9.44917964935303,61.6983299255371,-3.69644641876221,8.28723239898682,62.0546913146973,-2.17042446136475,9.43372058868408 ,61.9951782226563,-2.1109459400177,9.44623279571533,60.5709953308105,-4.94560480117798,9.10982704162598,59.2528686523438 ,-5.80368280410767,9.64699649810791,61.3797302246094,-3.63885402679443,9.65449810028076,61.658317565918,-2.09661841392517 ,9.19142436981201,58.6108055114746,-5.92598390579224,9.15252304077148,58.2418937683105,-6.14308214187622,8.9415225982666 ,58.6167831420898,-6.15146541595459,9.03530979156494,58.8484725952148,-5.91531658172607,10.3890905380249,60.1902389526367 ,-4.89191007614136,9.66245079040527,59.1945419311523,-5.73063850402832,10.7704238891602,60.9125442504883,-3.57478475570679 ,10.8405637741089,61.1608543395996,-2.03123736381531,8.80425930023193,57.7260208129883,-6.3200306892395,9.25882434844971 ,58.3663139343262,-6.24290418624878,8.73712539672852,57.6652565002441,-6.2053050994873,8.21891403198242,57.6878395080566 ,-6.23664903640747,8.06321239471436,58.1146774291992,-6.24825286865234,9.66301536560059,58.9449691772461,-6.14769983291626 ,9.12459373474121,57.2783203125,-6.17943382263184,9.51206493377686,56.8916168212891,-6.1587438583374,9.03224182128906 ,57.1845245361328,-6.18972444534302,8.61232662200928,57.4968490600586,-6.2152943611145,10.9453954696655,57.8632202148438 ,-5.74091577529907,10.350643157959,57.4555130004883,-5.97056674957275,10.3734855651855,58.5632514953613,-5.76876640319824 ,9.6894416809082,59.1076164245605,-5.81734275817871,9.28597164154053,58.5109214782715,-6.03513240814209,10.2982120513916 ,57.1268005371094,2.01532077789307,10.3618040084839,56.4006576538086,2.00044465065002,11.08203125,56.4769401550293 ,1.77409958839417,10.9784908294678,57.2843399047852,1.82306373119354,12.3940715789795,56.6297569274902,0.938472449779511 ,12.3065929412842,57.617374420166,1.00379812717438,13.2963943481445,56.7202949523926,-0.313323259353638,13.220666885376 ,57.826545715332,-0.290488749742508,12.0420293807983,57.7587356567383,0.908468961715698,10.6932783126831,57.3723831176758 ,1.69494712352753,12.9023599624634,58.0232734680176,-0.353199779987335,10.056619644165,57.4328308105469,1.79342937469482 ,9.66926383972168,57.3893241882324,1.99637413024902,10.0453290939331,57.1828155517578,2.00800490379334,10.2855052947998 ,57.2889518737793,1.78608930110931,11.6523027420044,58.6989669799805,0.878273189067841,10.6546821594238,57.9010162353516 ,1.64438211917877,12.4245052337646,59.1434364318848,-0.389839947223663,10.9627838134766,59.5587730407715,0.836178302764893 ,10.0838317871094,58.7168960571289,1.57561039924622,11.6203145980835,60.1447372436523,-0.438937902450562,9.14701271057129 ,57.0266990661621,2.13300395011902,9.7873067855835,57.4932861328125,2.10201096534729,9.30038547515869,57.9567565917969 ,2.07426238059998,8.76009178161621,57.4137916564941,2.10942983627319,9.09187984466553,56.9637870788574,2.01281023025513 ,9.12253379821777,56.4475059509277,2.02332544326782,9.55038642883301,56.2959442138672,2.04649186134338,9.86799907684326 ,58.5254211425781,2.00840091705322,10.3644466400146,57.9072036743164,2.04850101470947,8.46854972839355,58.9403343200684 ,1.90522265434265,8.63267230987549,59.6094818115234,1.68190681934357,7.82902050018311,59.7012825012207,1.57835364341736 ,7.74421215057373,58.995174407959,1.84293389320374,9.00541400909424,60.8894577026367,0.805153012275696,8.02298831939697 ,60.9623184204102,0.675447344779968,9.28621673583984,61.7263221740723,-0.527239799499512,8.18287944793701,61.7887420654297 ,-0.621023893356323,9.15414905548096,60.621166229248,0.734693169593811,8.73031616210938,59.318042755127,1.57682824134827 ,9.48860740661621,61.4069328308105,-0.558619141578674,8.52665519714355,58.6880378723145,1.91666579246521,8.73706245422363 ,58.3132476806641,1.93657350540161,8.79835987091064,58.6783180236816,1.71814370155334,8.64437675476074,58.9156112670898 ,1.68733644485474,9.28746700286865,59.2589454650879,1.56188571453094,10.0971956253052,60.2403717041016,0.784696280956268 ,10.6122608184814,60.9397087097168,-0.498890727758408,8.37201976776123,57.8002471923828,2.08593034744263,8.83267974853516 ,58.4394950866699,2.04456353187561,8.31695175170898,57.7374114990234,1.96601176261902,7.79827928543091,57.7600860595703 ,1.94363927841187,7.64259576797485,58.1869201660156,1.93169260025024,9.24502658843994,59.0167579650879,1.98113739490509 ,8.92779922485352,56.8394050598145,2.01041603088379,8.70467948913574,57.3504486083984,1.98683440685272,8.61167430877686 ,57.256763458252,1.98925125598907,8.19163417816162,57.5690956115723,1.96611356735229,9.94584655761719,57.525032043457 ,1.90172684192657,10.5613842010498,57.9291648864746,1.72713911533356,9.99026870727539,58.6290702819824,1.68385112285614 ,9.30534172058105,59.1735763549805,1.65241873264313,8.88112354278564,58.5804481506348,1.83815741539001,10.6770095825195 ,56.2945251464844,-5.6465892791748,11.2824172973633,56.3772201538086,-5.38556575775146,11.1279258728027,57.0764274597168 ,-5.44551849365234,10.5325889587402,56.9753379821777,-5.668053150177,12.4072904586792,56.5365180969238,-4.50114870071411 ,12.2783660888672,57.4414901733398,-4.57866668701172,13.107325553894,56.6325569152832,-3.28944134712219,12.956844329834 ,57.6888580322266,-3.33421206474304,13.288010597229,56.6680717468262,-1.86571216583252,13.1303119659424,57.7768707275391 ,-1.88361310958862,11.0010108947754,59.2677192687988,-4.5934591293335,9.69742584228516,57.7487487792969,-5.73776483535767 ,11.4663410186768,59.8099174499512,-3.39544725418091,11.5693311691284,59.9995307922363,-1.98350858688354,9.28171920776367 ,56.7352981567383,-5.80496978759766,9.47168254852295,56.3339920043945,-5.79171323776245,9.90828132629395,56.1729278564453 ,-5.76813793182373,8.86398029327393,59.3201179504395,-5.58211421966553,8.1619234085083,59.4702033996582,-5.57333850860596 ,8.09944534301758,58.8493728637695,-5.80169248580933,8.80362987518311,58.6593933105469,-5.7381386756897,9.16833877563477 ,60.5241088867188,-4.76580858230591,8.25944137573242,60.6478080749512,-4.75074100494385,8.2769718170166,61.420337677002 ,-3.58010292053223,9.33507061004639,61.2787055969238,-3.55214762687683,8.22487926483154,61.6865692138672,-2.1703794002533 ,9.33380794525146,61.5399169921875,-2.11206364631653,8.55876350402832,57.4518356323242,-5.84847402572632,8.15613555908203 ,57.6380157470703,-5.87087488174438,7.99083137512207,58.0734748840332,-5.88351821899414,10.7725353240967,57.1374664306641 ,1.46592569351196,10.9317245483398,56.4374504089355,1.43446028232574,10.3026676177979,56.3588180541992,1.63343214988709 ,10.107006072998,57.0631408691406,1.5913724899292,12.0061445236206,57.4882507324219,0.715340316295624,12.1415195465088 ,56.5821571350098,0.667407095432281,12.9622240066528,56.6574783325195,-0.467617064714432,12.8089008331299,57.7142639160156 ,-0.457129806280136,9.50034141540527,58.1038665771484,1.45586562156677,10.7501258850098,59.2968711853027,0.63189959526062 ,11.3219013214111,59.834716796875,-0.586458146572113,8.89888954162598,56.8010444641113,1.64008665084839,9.08884716033936 ,56.3997383117676,1.65345370769501,9.52541637420654,56.2386856079102,1.67762064933777,7.7251033782959,58.9136619567871 ,1.47833013534546,7.81123399734497,59.5304336547852,1.24668753147125,8.50855350494385,59.381160736084,1.33006381988525 ,8.40606021881104,58.7755432128906,1.52266371250153,7.99366998672485,60.6934432983398,0.417815059423447,8.8961181640625 ,60.5708656311035,0.528197646141052,8.13187026977539,61.445255279541,-0.758278369903564,9.18712902069092,61.3041152954102 ,-0.675066649913788,8.17593479156494,57.517578125,1.59658348560333,7.7733006477356,57.7037582397461,1.57428932189941 ,7.60796737670898,58.1392364501953,1.5622410774231,10.763858795166,56.2821884155273,-5.95393514633179,11.4453239440918 ,56.3634719848633,-5.66015243530273,12.6503982543945,56.5307769775391,-4.70776414871216,13.4095573425293,56.6416015625 ,-3.391108751297,13.6064786911011,56.6820526123047,-1.84945964813232,9.93995380401611,56.1746597290039,-6.08649778366089 ,9.49487972259521,56.3378257751465,-6.11084508895874,8.1636962890625,59.6161727905273,-5.85762119293213,8.10515403747559 ,58.9174652099609,-6.11392068862915,8.26453495025635,60.8779907226563,-4.97167921066284,8.29004001617432,61.715991973877 ,-3.69916963577271,8.23561573028564,62.0055694580078,-2.1726450920105,8.01162910461426,58.0859870910645,-6.20253276824951 ,8.17909812927246,57.642017364502,-6.19002056121826,8.96710681915283,57.1409759521484,-5.82494354248047,8.99288368225098 ,57.1476135253906,-6.14383411407471,9.30475997924805,56.736442565918,-6.12413787841797,8.5791015625,57.455696105957 ,-6.1678032875061,11.065601348877,56.4286880493164,1.72450625896454,10.3575248718262,56.3519821166992,1.9482342004776 ,12.3621492385864,56.5802879333496,0.897935330867767,13.2524452209473,56.668586730957,-0.335663348436356,9.52427101135254 ,56.2460517883301,1.99746978282928,9.07919597625732,56.4092216491699,1.97316372394562,7.6988205909729,58.9872550964355 ,1.78824877738953,7.7839732170105,59.6813888549805,1.52703857421875,7.9762864112854,60.9274864196777,0.634021580219269 ,8.13292789459229,61.742977142334,-0.643724203109741,7.59594821929932,58.1573753356934,1.88143527507782,7.76341438293457 ,57.7134094238281,1.89398753643036,8.58425617218018,57.2067337036133,1.62053740024567,8.88907718658447,56.8078346252441 ,1.95986318588257,8.57719612121582,57.2189979553223,1.94022345542908,8.16341876983643,57.5270957946777,1.91619777679443 ,9.54316806793213,56.3752670288086,-6.15696382522583,9.10171604156494,58.2966079711914,2.16415286064148,9.0726432800293 ,58.4523010253906,2.27199339866638,7.67046976089478,57.2544784545898,2.45488667488098,7.76439476013184,57.1340179443359 ,2.34261202812195,7.50693845748901,56.9871940612793,2.48459267616272,7.63928031921387,56.9295234680176,2.3653404712677 ,7.49976921081543,56.674201965332,2.51717662811279,7.63379526138306,56.6900596618652,2.3902690410614,7.65088319778442 ,56.3993949890137,2.54390692710876,7.74941062927246,56.4798049926758,2.41072201728821,7.91978979110718,56.236400604248 ,2.55762553215027,7.9551477432251,56.355094909668,2.4212167263031,8.23443508148193,56.228874206543,2.55465221405029 ,8.19587802886963,56.3493423461914,2.41894102096558,8.5105094909668,56.378849029541,2.53578400611877,8.40709781646729 ,56.4640884399414,2.40450549125671,9.80013942718506,57.6939811706543,2.34205198287964,9.65831279754639,57.7164344787598 ,2.21775436401367,9.80730724334717,58.006965637207,2.30946803092957,9.66379642486572,57.9558944702148,2.1928231716156 ,9.65619373321533,58.2817726135254,2.28273773193359,9.54818153381348,58.1661415100098,2.17237114906311,9.38728809356689 ,58.4447746276855,2.26901984214783,9.34244537353516,58.2908554077148,2.16187739372253,9.04439544677734,58.5109443664551 ,2.0685338973999,7.60246086120605,57.2915229797363,2.25414371490479,7.41537761688232,56.9857330322266,2.28812718391418 ,7.40717649459839,56.6276779174805,2.32540369033813,7.58005428314209,56.3132934570313,2.35598564147949,7.8876895904541 ,56.1268119812012,2.37167835235596,8.24765110015869,56.1182098388672,2.36827683448792,8.56348419189453,56.2897834777832 ,2.34669184684753,9.87666797637939,57.6434135437012,2.1486828327179,9.88486957550049,58.0014686584473,2.11140513420105 ,9.711989402771,58.315860748291,2.08082342147827,9.40435600280762,58.5023384094238,2.06513118743896,7.89354467391968 ,57.5541725158691,2.19163465499878,7.53492975234985,57.3593597412109,2.21614170074463,7.32250690460205,57.012149810791 ,2.25473022460938,7.31319618225098,56.6055946350098,2.2970564365387,7.50949048995972,56.2486190795898,2.33177995681763 ,7.85879421234131,56.0368804931641,2.34959721565247,8.26751136779785,56.0271224975586,2.34573411941528,8.62612819671631 ,56.2219314575195,2.32122707366943,8.83854961395264,56.5691299438477,2.28263998031616,8.84786224365234,56.9756927490234 ,2.24031329154968,8.65156650543213,57.3326644897461,2.20558881759644,8.3022632598877,57.5444030761719,2.18777060508728 ,7.89016580581665,57.4804611206055,1.55401968955994,7.53544425964355,57.2877616882324,1.57826209068298,7.32532835006714 ,56.9443244934082,1.61643016338348,7.31611824035645,56.5421905517578,1.65829622745514,7.51028060913086,56.1890907287598 ,1.69264352321625,7.85579109191895,55.9796562194824,1.71026754379272,8.26007080078125,55.9699859619141,1.70644688606262 ,8.61478996276855,56.1626892089844,1.68220448493958,8.82490634918213,56.5061225891113,1.64403653144836,8.83411598205566 ,56.9082641601563,1.60216987133026,8.63995456695557,57.2613563537598,1.56782293319702,8.29444313049316,57.4707984924316 ,1.55019891262054,8.08557796478271,56.8008575439453,2.39255380630493,9.37066745758057,58.0004348754883,2.19909453392029 ,7.95090341567993,57.4940376281738,2.41830825805664,8.03185844421387,57.3665313720703,2.30692052841187,8.34259605407715 ,57.040771484375,2.35386204719543,8.65734004974365,56.7145500183105,2.36715579032898,8.76843547821045,56.6418800354004 ,2.49703741073608,8.46897029876709,58.0325546264648,2.13008427619934,8.51177406311035,57.9731674194336,2.34515070915222 ,8.56678771972656,57.8315696716309,2.23553681373596,8.8566312789917,57.5205993652344,2.27647852897644,9.1578254699707 ,57.2154922485352,2.29245519638062,9.28428745269775,57.1679306030273,2.41954469680786,9.35760879516602,57.106273651123 ,2.21566128730774,9.41757202148438,58.2211647033691,-6.37134647369385,8.07729625701904,57.0513572692871,-6.45569038391113 ,7.98838758468628,57.1577568054199,-6.58496856689453,9.39362621307373,58.3627853393555,-6.49816751480103,7.95128870010376 ,56.8461570739746,-6.45800352096558,7.82368993759155,56.8895606994629,-6.58799409866333,7.94460821151733,56.6054725646973 ,-6.45401096343994,7.81495904922485,56.5749664306641,-6.58277559280396,8.05904579162598,56.3937911987305,-6.44478559494019 ,7.96453428268433,56.2982864379883,-6.57071495056152,8.26393795013428,56.267822265625,-6.43279695510864,8.23233413696289 ,56.1336479187012,-6.55504512786865,8.50438404083252,56.261344909668,-6.42125701904297,8.54660892486572,56.125171661377 ,-6.53996276855469,8.71595478057861,56.3760681152344,-6.41325855255127,8.82314300537109,56.2751235961914,-6.52950954437256 ,9.97066688537598,57.636344909668,-6.33459901809692,10.1165437698364,57.5984039306641,-6.45013761520386,9.97734546661377 ,57.8770370483398,-6.33859014511108,10.1252737045288,57.9129905700684,-6.45535469055176,9.86290836334229,58.0887222290039 ,-6.34781646728516,9.97570037841797,58.1896705627441,-6.46741533279419,9.6580171585083,58.2146797180176,-6.35980606079102 ,9.7078971862793,58.3543128967285,-6.48308515548706,7.91374015808105,57.219108581543,-6.39272308349609,9.35880374908447 ,58.445743560791,-6.30441761016846,7.72532224655151,56.9122772216797,-6.3961820602417,7.71533393859863,56.5523872375488 ,-6.39021348953247,7.88645076751709,56.2358589172363,-6.37641716003418,8.19282341003418,56.0475082397461,-6.35848951339722 ,8.55235767364502,56.0378112792969,-6.34123420715332,8.86871910095215,56.2093658447266,-6.32927560806274,10.1858406066895 ,57.5712661743164,-6.24947023391724,10.1958293914795,57.9311676025391,-6.25543737411499,10.0247116088867,58.2476959228516 ,-6.26923513412476,9.71834087371826,58.4360466003418,-6.28716278076172,8.20472621917725,57.4861259460449,-6.35204792022705 ,7.84551382064819,57.2913436889648,-6.36562538146973,7.63157510757446,56.9429512023926,-6.36955308914185,7.62023305892944 ,56.534309387207,-6.36277627944946,7.814528465271,56.1749076843262,-6.34711170196533,8.16239833831787,55.9610481262207 ,-6.3267560005188,8.57063388824463,55.9500350952148,-6.30716323852539,8.92984580993652,56.1448211669922,-6.29358530044556 ,9.14378356933594,56.4932136535645,-6.28965759277344,9.15512657165527,56.90185546875,-6.29643392562866,8.96083068847656 ,57.2612571716309,-6.31209850311279,8.61295986175537,57.4751167297363,-6.33245468139648,7.82315683364868,57.2974548339844 ,-5.72415924072266,8.17846775054932,57.490119934082,-5.71072673797607,7.61154174804688,56.9528427124023,-5.72804355621338 ,7.60032320022583,56.548641204834,-5.72134017944336,7.79250907897949,56.1931419372559,-5.70584535598755,8.13660049438477 ,55.9816055297852,-5.68571043014526,8.54040145874023,55.9707107543945,-5.66633129119873,8.89571189880371,56.1633796691895 ,-5.65289926528931,9.10732746124268,56.5079917907715,-5.64901494979858,9.11854648590088,56.9122009277344,-5.65571737289429 ,8.92636108398438,57.2676963806152,-5.6712121963501,8.58226871490479,57.4792327880859,-5.69134712219238,8.39713573455811 ,56.7132110595703,-6.45354127883911,8.35801219940186,56.7312316894531,-5.65404605865479,9.10042572021484,56.5588111877441 ,-6.51249361038208,9.00266551971436,56.6640510559082,-6.39528465270996,8.68764209747314,56.9858283996582,-6.43258762359619 ,8.39200592041016,57.326042175293,-6.43588542938232,8.31364345550537,57.4366760253906,-6.5648775100708,9.71927833557129 ,57.9539375305176,-6.35817623138428,9.53972148895264,58.2807655334473,-6.29448080062866,9.78838539123535,58.0285758972168 ,-6.27875709533691,9.99997234344482,57.7374534606934,-6.26315259933472,9.20345973968506,57.4698867797852,-6.39538192749023 ,9.48666667938232,57.1501922607422,-6.36494207382202,9.60848426818848,57.07861328125,-6.48131608963013,9.66481113433838 ,57.0322380065918,-6.26956367492676,9.57754898071289,57.319652557373,-6.27979326248169,9.37460803985596,57.6449127197266 ,-6.2954273223877,9.076340675354,57.8779449462891,-6.31346797943115,8.78176498413086,57.9659423828125,-6.32823324203491 ,8.85363483428955,57.899730682373,-6.53152275085449,8.90478801727295,57.7736015319824,-6.40361595153809,8.62180233001709 ,57.0199012756348,-6.05530881881714,8.20690155029297,57.2244300842285,-6.10898733139038,8.17655849456787,57.2355613708496 ,-5.83204317092896,8.59145927429199,57.0310325622559,-5.77836561203003,7.79200172424316,57.4289627075195,-6.16266393661499 ,7.76165914535522,57.4400939941406,-5.88572072982788,7.49404430389404,57.5786743164063,-6.40941333770752,7.46370267868042 ,57.5898094177246,-6.13247013092041,7.16427659988403,57.7414360046387,-6.46620416641235,7.13393402099609,57.7525672912598 ,-6.18926095962524,6.54581737518311,58.0482940673828,-6.54360771179199,6.51547479629517,58.0594291687012,-6.26666355133057 ,6.10629081726074,57.9500389099121,-6.57935810089111,6.07594680786133,57.9611740112305,-6.30241441726685,6.51593399047852 ,57.963924407959,-6.63410091400146,6.2043285369873,57.902961730957,-6.66317367553711,7.13439416885376,57.6570701599121 ,-6.55669927597046,7.46416234970093,57.494312286377,-6.49990797042847,7.76211929321289,57.344596862793,-6.25315952301025 ,8.1770191192627,57.1400680541992,-6.19948053359985,8.5919189453125,56.9355392456055,-6.14580249786377,7.687584400177 ,56.2433242797852,-5.8429012298584,7.2726845741272,56.4478530883789,-5.89657926559448,6.97472810745239,56.5975685119629 ,-6.1433277130127,6.64495849609375,56.760326385498,-6.200119972229,6.02649831771851,57.0671882629395,-6.27752161026001 ,5.82846117019653,57.4524879455566,-6.31333494186401,5.85880327224731,57.4413528442383,-6.59027910232544,5.95684099197388 ,57.3942832946777,-6.67409420013428,6.10631132125854,57.1332359313965,-6.64275789260864,6.72477197647095,56.8263854980469 ,-6.56535577774048,7.05454254150391,56.6636238098145,-6.50856494903564,7.35249805450439,56.5139007568359,-6.26181602478027 ,7.7673978805542,56.3093719482422,-6.20813894271851,6.05684041976929,57.0560569763184,-6.55446577072144,6.67530250549316 ,56.749195098877,-6.47706317901611,7.00507020950317,56.5864448547363,-6.42027235031128,7.30302715301514,56.4367218017578 ,-6.17352294921875,7.7179274559021,56.2321929931641,-6.11984539031982,-3.61213994026184,63.0742874145508,0.9124436378479 ,-3.35697841644287,62.0683555603027,1.8799649477005,-3.08504390716553,62.3842697143555,2.03850078582764,-3.30717325210571 ,63.3338012695313,1.14116930961609,-2.58666610717773,62.4479675292969,1.94942438602448,-2.8619236946106,63.388801574707 ,1.0897604227066,-2.32412028312683,62.3157958984375,1.72282636165619,-2.54204511642456,63.1886177062988,0.857616245746613 ,-2.59025049209595,61.6884994506836,1.16627395153046,-2.85399842262268,62.5235786437988,0.263086229562759,-3.17207551002502 ,61.7568206787109,1.39954209327698,-3.43519830703735,62.611499786377,0.514534771442413,-3.63598537445068,63.2521781921387 ,0.69645893573761,-3.32681488990784,63.5149726867676,0.927509665489197,-3.29148149490356,64.2173690795898,-0.109086737036705 ,-3.62270712852478,63.9034881591797,-0.306464165449142,-2.8858904838562,63.5703086853027,0.875525891780853,-2.83971810340881 ,64.1814880371094,-0.0564945302903652,-2.55843424797058,63.3702926635742,0.642616629600525,-2.50405740737915,63.9123001098633 ,-0.123237006366253,-2.8638768196106,62.6970977783203,0.108471132814884,-2.77562379837036,63.1545944213867,-0.604941248893738 ,-3.46092629432678,62.7867164611816,0.294167369604111,-3.43210530281067,63.3568954467773,-0.579706788063049,-3.256014585495 ,64.5693740844727,-1.60241901874542,-3.58352303504944,64.0412521362305,-0.546477496623993,-3.24679207801819,64.355598449707 ,-0.348915934562683,-2.92236948013306,64.8243789672852,-1.32648360729218,-2.79290914535522,64.3191986083984,-0.297434836626053 ,-2.51000738143921,64.7322540283203,-1.14120411872864,-2.45186758041382,64.0473709106445,-0.362849801778793,-2.19106101989746 ,64.3612518310547,-1.09568011760712,-2.70859456062317,63.2933158874512,-0.840461909770966,-2.43458151817322,63.6225776672363 ,-1.45423483848572,-3.38490152359009,63.4919891357422,-0.821362257003784,-3.0491464138031,63.9436988830566,-1.78154337406158 ,-2.57595777511597,64.9778366088867,-2.6725537776947,-3.1440896987915,64.6701354980469,-1.83323156833649,-2.81245827674866 ,64.9234924316406,-1.55989825725555,-2.3226158618927,65.2118072509766,-2.34885287284851,-2.39819836616516,64.8362884521484 ,-1.37234389781952,-1.97928023338318,65.0992202758789,-2.01913595199585,-2.0773754119873,64.4590759277344,-1.32713222503662 ,-1.72631311416626,64.6864547729492,-1.87331461906433,-2.31362891197205,63.7234535217285,-1.68494808673859,-1.92199409008026 ,63.942066192627,-2.33426547050476,-2.93078923225403,64.038932800293,-2.01300573348999,-2.42004132270813,64.294548034668 ,-2.75134778022766,-2.39229536056519,65.0288314819336,-2.85661482810974,-2.14243960380554,65.269775390625,-2.53773021697998 ,-1.26141941547394,65.4044723510742,-3.14796590805054,-1.37994861602783,65.1316375732422,-3.55027008056641,-1.79749488830566 ,65.1639251708984,-2.20590353012085,-1.05894148349762,65.2965240478516,-2.71703100204468,-1.54621398448944,64.7531356811523 ,-2.05670237541199,-0.918171525001526,64.8731536865234,-2.47819972038269,-1.73880863189697,63.9987030029297,-2.52019095420837 ,-1.05267798900604,64.1080093383789,-2.95110249519348,-2.23095893859863,64.3469390869141,-2.93175864219666,-1.30283260345459 ,64.4658584594727,-3.51517343521118,-1.14292597770691,65.1440811157227,-3.65478587150574,-1.02547371387482,65.4231796264648 ,-3.2559015750885,0.13047032058239,65.4414825439453,-3.54996991157532,0.0952271744608879,65.1560363769531,-3.93723583221436 ,-0.822809159755707,65.3192520141602,-2.82474994659424,0.159597724676132,65.3439025878906,-3.07465958595276,-0.683079063892365 ,64.8978118896484,-2.58284640312195,0.165363445878029,64.9232025146484,-2.7937171459198,-0.813165485858917,64.1283264160156 ,-3.05124926567078,0.108703263103962,64.14697265625,-3.26859927177429,-1.06255924701691,64.4810638427734,-3.61365294456482 ,0.0793721079826355,64.4871368408203,-3.85984587669373,-2.75332641601563,61.2146377563477,2.80682158470154,-3.02745985984802 ,62.1653861999512,2.20834875106812,-3.29413962364197,61.8534240722656,2.05397295951843,-2.98762607574463,60.9160995483398 ,2.68516731262207,-2.5285222530365,62.2322120666504,2.12074708938599,-2.30419564247131,61.3310317993164,2.74024105072021 ,-2.26474595069885,62.1056976318359,1.90227031707764,-2.0128014087677,61.2975273132324,2.49436450004578,-2.51925134658813 ,61.4904861450195,1.42052376270294,-2.23242950439453,60.658992767334,2.08475351333618,-2.83238387107849,60.6267929077148 ,2.28150844573975,-3.10810112953186,61.546142578125,1.58604788780212,-1.99876511096954,60.0553932189941,2.86955976486206 ,-2.24390172958374,61.076831817627,2.8048152923584,-2.69164276123047,60.940975189209,2.86721706390381,-2.63764548301697 ,59.9638633728027,2.75425934791565,-2.76606631278992,60.4017868041992,2.44312739372253,-2.16079878807068,60.4579582214355 ,2.27013802528381,-1.13655304908752,65.2722549438477,-3.20241522789001,-1.22373235225677,65.0585403442383,-3.51007008552551 ,-0.974662899971008,65.1921691894531,-2.87555885314941,-0.859975397586823,64.8638610839844,-2.68954801559448,-0.959364235401154 ,64.2740859985352,-3.04318070411682,-1.15380275249481,64.5525436401367,-3.47173738479614,-3.31022834777832,63.2359428405762 ,0.919619858264923,-3.53940153121948,63.0512771606445,0.743501126766205,-2.97155117988586,63.2838172912598,0.874339401721954 ,-2.72124218940735,63.1311111450195,0.687183558940887,-2.96068978309631,62.6333312988281,0.285006642341614,-3.40652298927307 ,62.6991806030273,0.436503946781158,-3.4934549331665,63.9235954284668,-0.430678248405457,-3.23643088340759,64.1706924438477 ,-0.287341684103012,-2.87822294235229,64.1393966674805,-0.254750579595566,-2.61495733261108,63.9441452026367,-0.299727559089661 ,-2.81512451171875,63.3578414916992,-0.668448567390442,-3.34042429924011,63.5154266357422,-0.633352518081665,-3.10319185256958 ,64.5544204711914,-1.68715798854828,-2.838214635849,64.7433624267578,-1.48133432865143,-2.51200199127197,64.6696395874023 ,-1.33998775482178,-2.25697326660156,64.3717269897461,-1.3023225069046,-2.43367147445679,63.8228034973145,-1.54456543922424 ,-2.92679381370544,64.0788040161133,-1.82429134845734,-2.22023415565491,65.1060409545898,-2.46578550338745,-2.41531682014465 ,64.9314041137695,-2.70062112808228,-1.94377982616425,65.021842956543,-2.21043109893799,-1.7426495552063,64.6985168457031 ,-2.09731411933899,-1.89084160327911,64.1259384155273,-2.44964075088501,-2.28149557113647,64.4059677124023,-2.76189875602722 ,-3.04034876823425,62.1378059387207,1.9870936870575,-3.23064041137695,61.8979263305664,1.89186644554138,-2.63217568397522 ,62.1806526184082,1.90964543819427,-2.44575428962708,62.0799980163574,1.75566875934601,-2.62495112419128,61.6172981262207 ,1.41981995105743,-3.0793662071228,61.6779861450195,1.53219282627106,-2.69351363182068,61.0704765319824,2.73514080047607 ,-2.83499526977539,60.821403503418,2.6821186542511,-2.32376790046692,61.1692924499512,2.68417191505432,-2.09564399719238 ,61.1407737731934,2.50819373130798,-2.24191975593567,60.6346855163574,2.28552436828613,-2.71739792823792,60.6012229919434 ,2.43733906745911,-2.911208152771,60.6353797912598,2.75616860389709,-1.96656572818756,61.0282936096191,2.59466052055359 ,4.28434991836548,62.8252143859863,0.3774034678936,4.02987480163574,63.1023750305176,0.644034564495087,3.87156915664673 ,62.1648445129395,1.56714284420013,4.09929990768433,61.8331680297852,1.37475287914276,3.58609437942505,63.185417175293 ,0.652862966060638,3.37072014808655,62.2600593566895,1.54577028751373,3.22592759132385,63.0066833496094,0.466796100139618 ,3.07226300239563,62.145580291748,1.35718357563019,3.4125759601593,62.3259162902832,-0.161517307162285,3.22108316421509 ,61.505199432373,0.772515833377838,4.02672004699707,62.3761367797852,0.0089394748210907,3.83216571807861,61.5358924865723 ,0.924957275390625,4.28998422622681,63.0021743774414,0.159421265125275,4.18255949020386,63.6572914123535,-0.835323393344879 ,3.9013032913208,63.9904899597168,-0.596446633338928,4.03187084197998,63.2828521728516,0.428909122943878,3.45939421653748 ,63.9827995300293,-0.483302682638168,3.5923113822937,63.3659706115723,0.436583310365677,3.10158205032349,63.7354850769043 ,-0.503058195114136,3.22455739974976,63.1878814697266,0.250778764486313,3.25768327713013,62.9642868041992,-1.01373946666718 ,3.41239428520203,62.4991264343262,-0.316789388656616,3.92296314239502,63.1248970031738,-1.07806241512299,4.03345727920532 ,62.5503234863281,-0.213627681136131,3.68707180023193,64.3503799438477,-2.07286024093628,3.41031622886658,64.624626159668 ,-1.75556659698486,3.83346271514893,64.1322708129883,-0.828650236129761,4.12010908126831,63.7982597351074,-1.06845033168793 ,3.02172446250916,64.5577697753906,-1.51601755619049,3.3892765045166,64.1241989135742,-0.716319501399994,2.68918180465698 ,64.2073211669922,-1.42635130882263,3.02615571022034,63.874584197998,-0.734024167060852,2.83533811569214,63.4563522338867 ,-1.8113089799881,3.16836261749268,63.1079406738281,-1.23866653442383,3.41911268234253,63.7396774291992,-2.2198121547699 ,3.85219359397888,63.2637176513672,-1.31172442436218,2.89598488807678,64.8052444458008,-3.04331517219543,2.7037570476532 ,65.0532608032227,-2.68942427635193,3.27638959884644,64.7314376831055,-1.97245848178864,3.5516083240509,64.4589385986328 ,-2.28691077232361,2.40160512924194,64.9610366821289,-2.31597256660461,2.88653588294983,64.6695938110352,-1.73042178153992 ,2.14520502090454,64.564338684082,-2.13563776016235,2.55170559883118,64.3130645751953,-1.64078557491302,2.22989583015442 ,63.811107635498,-2.61558604240417,2.69096708297729,63.5655975341797,-2.02404379844666,2.688316822052,64.1334228515625 ,-3.09747505187988,3.27685332298279,63.8431282043457,-2.43361616134644,2.69275808334351,64.8684387207031,-3.20116209983826 ,1.60463094711304,65.0374984741211,-3.75249838829041,1.55874860286713,65.3155136108398,-3.33905458450317,2.50376582145691 ,65.1232223510742,-2.85254383087158,1.40982067584991,65.2186508178711,-2.88430953025818,2.20072984695435,65.0378112792969 ,-2.47681260108948,1.27623987197876,64.8039398193359,-2.62688946723938,1.94657623767853,64.6429672241211,-2.29336524009705 ,1.29752290248871,64.0338745117188,-3.11034798622131,2.02724313735962,63.8799133300781,-2.7753689289093,1.4913341999054 ,64.3777236938477,-3.70449876785278,2.48030972480774,64.1983337402344,-3.25097990036011,1.35693752765656,65.0652313232422 ,-3.8241708278656,1.31205260753632,65.3494491577148,-3.41428828239441,1.16322147846222,65.2566070556641,-2.95932054519653 ,1.03120362758636,64.8437347412109,-2.69900345802307,1.04845011234283,64.0696029663086,-3.17738890647888,1.24141275882721 ,64.4083938598633,-3.76976609230042,3.57369923591614,61.0150680541992,2.37812209129334,3.77027344703674,60.702938079834 ,2.22727346420288,4.0471248626709,61.6218643188477,1.5565527677536,3.82378196716309,61.9492835998535,1.74413049221039 ,3.3227744102478,62.0476493835449,1.72428119182587,3.12788796424866,61.1596908569336,2.37217926979065,3.02454996109009 ,61.9388618469238,1.54388356208801,2.80449461936951,61.1455764770508,2.16795825958252,3.1727123260498,61.3109474182129 ,1.03485369682312,2.92642593383789,60.4962692260742,1.73520374298096,3.54420852661133,60.4256591796875,1.84945070743561 ,3.78081870079041,61.3288497924805,1.11927652359009,2.76325130462646,59.9051856994629,2.54690003395081,3.37375426292419 ,59.7742500305176,2.34694623947144,3.50367212295532,60.7455596923828,2.44744181632996,3.06101846694946,60.9095001220703 ,2.44536972045898,2.86796164512634,60.2993392944336,1.92940402030945,3.48629307746887,60.2045707702637,2.01948738098145 ,1.45098149776459,64.9741744995117,-3.69130253791809,1.41963732242584,65.1916275024414,-3.37561774253845,1.29856872558594 ,65.1204681396484,-3.02958917617798,1.18962597846985,64.7992172241211,-2.82842588424683,1.20325589179993,64.2058715820313 ,-3.18971633911133,1.35525119304657,64.4734039306641,-3.64174580574036,4.18821001052856,62.8075332641602,0.219903469085693 ,3.99690103530884,63.0054588317871,0.424512445926666,3.6588876247406,63.0746803283691,0.425081789493561,3.37655878067017 ,62.9387741088867,0.274015486240387,3.52792119979858,62.4286651611328,-0.154641181230545,3.99334812164307,62.4657745361328 ,-0.0648872926831245,4.03926610946655,63.6859970092773,-0.941070854663849,3.81991457939148,63.9481201171875,-0.765456974506378 ,3.46811485290527,63.9392204284668,-0.684758543968201,3.18946385383606,63.761058807373,-0.693017423152924,3.30093741416931 ,63.1649284362793,-1.08285391330719,3.83501696586609,63.2890968322754,-1.11953735351563,3.5235903263092,64.3453979492188 ,-2.1361677646637,3.30114650726318,64.5497131347656,-1.89731824398041,2.99297952651978,64.4960021972656,-1.7129887342453 ,2.7271716594696,64.2145156860352,-1.64003252983093,2.83482527732849,63.656623840332,-1.90154302120209,3.3008348941803 ,63.8823738098145,-2.24625611305237,2.73043322563171,64.7690963745117,-3.04928207397461,2.58011960983276,64.9546203613281 ,-2.79104351997375,2.33586597442627,64.886848449707,-2.500408411026,2.13193011283875,64.576301574707,-2.35984539985657 ,2.19507622718811,63.9970550537109,-2.72649145126343,2.55687785148621,64.2533493041992,-3.0897331237793,3.80498099327087 ,61.9218826293945,1.52327609062195,3.96527743339539,61.6709518432617,1.40429544448853,3.39359378814697,61.9905891418457 ,1.50135791301727,3.18217921257019,61.9024810791016,1.37433695793152,3.28509950637817,61.4308815002441,1.01937413215637 ,3.7534167766571,61.4624671936035,1.06922543048859,3.49584770202637,60.8752517700195,2.31576895713806,3.61298704147339 ,60.6180191040039,2.24522376060486,3.12953925132751,60.9972839355469,2.31467223167419,2.87844681739807,60.9838790893555 ,2.17116379737854,2.96134185791016,60.4705619812012,1.93296670913696,3.44989609718323,60.4066925048828,2.01946258544922 ,3.68666195869446,60.4272689819336,2.30911779403687,2.7553985118866,60.8793525695801,2.27471375465393,7.27801418304443 ,38.8856239318848,2.99167585372925,7.27827167510986,38.9228096008301,2.99137020111084,7.23183059692383,38.9346237182617 ,2.94782590866089,7.23140668869019,38.8737411499023,2.948326587677,7.29706525802612,38.9548759460449,2.99014902114868 ,7.26260185241699,38.9871253967285,2.9458270072937,7.32935428619385,38.9732360839844,2.9883394241333,7.31547117233276 ,39.0171813964844,2.94286394119263,7.36649465560913,38.972957611084,2.98642635345459,7.37627649307251,39.0167350769043 ,2.93973159790039,7.39852857589722,38.9541320800781,2.98492193222046,7.42872381210327,38.9859046936035,2.93726921081543 ,7.41687250137329,38.9217910766602,2.98422956466675,7.45876121520996,38.9329528808594,2.93613576889038,7.41661548614502 ,38.8846054077148,2.98453521728516,7.45833969116211,38.8720664978027,2.93663644790649,7.39782238006592,38.8525352478027 ,2.98575687408447,7.42757081985474,38.8195648193359,2.93863534927368,7.36553049087524,38.8341789245605,2.9875659942627 ,7.37470006942749,38.7895088195801,2.94159841537476,7.32839202880859,38.8344497680664,2.98947954177856,7.31389379501343 ,38.7899589538574,2.94473075866699,7.29635715484619,38.8532829284668,2.9909839630127,7.26144552230835,38.8207893371582 ,2.94719362258911,7.18508529663086,38.9275054931641,2.0414457321167,7.18466186523438,38.8666191101074,2.04194688796997 ,7.21585369110107,38.9800071716309,2.0394458770752,7.26872682571411,39.0100593566895,2.03648328781128,7.3295316696167 ,39.0096130371094,2.0333514213562,7.38197994232178,38.9787864685059,2.03088855743408,7.41201877593994,38.9258308410645 ,2.02975559234619,7.41159391403198,38.8649444580078,2.03025579452515,7.38082551956177,38.812442779541,2.03225469589233 ,7.32795286178589,38.7823905944824,2.03521823883057,7.26714944839478,38.7828369140625,2.0383505821228,7.21470022201538 ,38.8136672973633,2.04081296920776,7.22681045532227,38.9149703979492,1.99354636669159,7.22654962539673,38.8777847290039 ,1.99385249614716,7.24560308456421,38.9470405578613,1.9923255443573,7.27789306640625,38.9653968811035,1.99051570892334 ,7.31503295898438,38.9651222229004,1.9886029958725,7.34706735610962,38.9462890625,1.98709845542908,7.36541128158569 ,38.9139518737793,1.98640644550323,7.36515426635742,38.8767623901367,1.98671197891235,7.346360206604,38.8446960449219 ,1.98793375492096,7.31406831741333,38.8263397216797,1.9897426366806,7.276930809021,38.8266143798828,1.99165594577789 ,7.24489736557007,38.8454437255859,1.99316024780273,7.34744358062744,38.9037055969238,2.98795223236084,7.29598045349121 ,38.895866394043,1.99012982845306,-9.78334426879883,33.6398735046387,4.95875310897827,-9.77644729614258,33.6859130859375 ,4.96339130401611,-9.73664379119873,33.7019157409668,4.89703321456909,-9.74793434143066,33.6265411376953,4.88943862915039 ,-9.76406002044678,33.7222595214844,4.98891019821167,-9.7163610458374,33.7614250183105,4.93881559371948,-9.74949932098389 ,33.7391777038574,5.02847194671631,-9.69252109527588,33.7891273498535,5.00358915328979,-9.73666667938232,33.7321357727051 ,5.07147693634033,-9.67151069641113,33.7775955200195,5.07400035858154,-9.72900199890137,33.7030143737793,5.1064019203186 ,-9.65896129608154,33.7299194335938,5.13118028640747,-9.72855758666992,33.6596221923828,5.12388706207275,-9.65823459625244 ,33.6588745117188,5.15980815887451,-9.73545360565186,33.613582611084,5.11924982070923,-9.66952514648438,33.58349609375 ,5.1522159576416,-9.74784278869629,33.5772361755371,5.09372901916504,-9.6898078918457,33.523983001709,5.11043310165405 ,-9.76240253448486,33.5603179931641,5.0541672706604,-9.71364879608154,33.4962844848633,5.04565811157227,-9.77523517608643 ,33.5673599243164,5.01116228103638,-9.73465728759766,33.5078163146973,4.97524881362915,-9.7829008102417,33.5964813232422 ,4.97623777389526,-9.74720764160156,33.555492401123,4.91806745529175,-8.68862438201904,33.5623207092285,4.5660605430603 ,-8.69991493225098,33.486946105957,4.55846548080444,-8.6683406829834,33.6218338012695,4.60784196853638,-8.64450073242188 ,33.6495361328125,4.67261600494385,-8.62349128723145,33.6380043029785,4.74302673339844,-8.61094093322754,33.5903282165527 ,4.80020713806152,-8.61021518707275,33.5192794799805,4.82883739471436,-8.62150573730469,33.443904876709,4.8212423324585 ,-8.6417875289917,33.384391784668,4.77945995330811,-8.66562843322754,33.3566932678223,4.71468496322632,-8.68663787841797 ,33.3682250976563,4.6442756652832,-8.69918727874756,33.415901184082,4.58709478378296,-8.62269496917725,33.5322341918945 ,4.59902667999268,-8.6295919418335,33.486198425293,4.59438753128052,-8.61030673980713,33.5685844421387,4.62454605102539 ,-8.59574604034424,33.5855026245117,4.66410827636719,-8.58291435241699,33.5784606933594,4.70711278915405,-8.57524967193604 ,33.5493392944336,4.74203681945801,-8.57480525970459,33.5059471130371,4.75952243804932,-8.58170127868652,33.4599075317383 ,4.75488424301147,-8.59408950805664,33.4235610961914,4.72936534881592,-8.60865020751953,33.4066429138184,4.68980169296265 ,-8.62148189544678,33.4136848449707,4.64679718017578,-8.62914752960205,33.4428062438965,4.61187362670898,-9.75595092773438 ,33.6497459411621,5.04131889343262,-8.60219860076904,33.4960746765137,4.67695474624634,-9.74101448059082,35.714599609375 ,3.85751342773438,-9.86602973937988,35.7726554870605,3.47347187995911,-9.97085666656494,35.6495018005371,3.47345089912415 ,-9.870774269104,35.5752906799316,3.83032155036926,-9.68454742431641,35.8668441772461,3.81067728996277,-9.79458618164063 ,35.8733024597168,3.47374320030212,-9.52666187286377,35.9182891845703,4.02155208587646,-9.62035369873047,35.9681434631348 ,3.76721882820129,-9.54553604125977,35.8229598999023,4.08965349197388,-9.4582986831665,35.9390258789063,4.01036548614502 ,-9.5352258682251,36.0346794128418,3.7266902923584,-9.4575366973877,35.8144416809082,4.11982440948486,-9.5669527053833 ,35.6657867431641,4.17208671569824,-9.62007713317871,35.4551315307617,4.32985925674438,-9.50944805145264,35.4093933105469 ,4.42615509033203,-9.46608638763428,35.6384925842285,4.23215818405151,-9.78408527374268,35.5054550170898,3.9941668510437 ,-9.63376522064209,36.0123100280762,3.45799255371094,-9.72309112548828,35.9531021118164,3.46987771987915,-9.35143184661865 ,35.9486656188965,3.99241375923157,-8.98878192901611,35.9121856689453,3.88087320327759,-9.06758308410645,36.0587348937988 ,3.56467628479004,-9.41837596893311,36.0752944946289,3.68297219276428,-9.3454122543335,35.8030281066895,4.13016843795776 ,-8.97745895385742,35.7535247802734,4.02928638458252,-9.35027408599854,35.6183891296387,4.25739240646362,-8.97404384613037 ,35.5641059875488,4.16093111038208,-9.37691307067871,35.3826560974121,4.46194314956665,-8.96559906005859,35.3266754150391 ,4.36308479309082,-9.16642284393311,36.040111541748,3.34176683425903,-9.50882720947266,36.0511817932129,3.43420505523682 ,-8.51512336730957,35.82080078125,3.67910408973694,-8.62055587768555,35.9603652954102,3.40104579925537,-8.49166774749756 ,35.6696319580078,3.80719947814941,-8.47049617767334,35.4844856262207,3.93344354629517,-8.40306663513184,35.2210350036621 ,4.14138460159302,-8.73949146270752,35.9448280334473,3.21085333824158,-10.2052211761475,33.757396697998,4.50592947006226 ,-9.97318077087402,34.9937400817871,4.2854528427124,-10.1497535705566,35.0821075439453,3.97291660308838,-10.4171237945557 ,33.715633392334,4.16602897644043,-10.0163803100586,33.7997207641602,4.9263710975647,-9.80999088287354,34.9454536437988 ,4.70469665527344,-9.86767196655273,33.8091239929199,5.06170845031738,-9.67784786224365,34.9037628173828,4.83877611160278 ,-9.66173553466797,33.803092956543,5.10906410217285,-9.48658180236816,34.878044128418,4.87704467773438,-9.1462287902832 ,33.7655029296875,5.0027813911438,-8.97988986968994,34.8264312744141,4.76251649856567,-8.54841613769531,33.7106056213379 ,4.77185153961182,-8.3776159286499,34.7554130554199,4.5395975112915,-9.95896339416504,35.483642578125,3.87343168258667 ,-9.84402561187744,35.3857116699219,4.11188650131226,-10.0861339569092,35.5603713989258,3.4769971370697,-9.69511127471924 ,35.3164482116699,4.50688219070435,-9.57850933074951,35.2590255737305,4.63353776931763,-9.41642093658447,35.2251739501953 ,4.67538499832153,-8.95109081268311,35.1678276062012,4.5689754486084,-8.36990261077881,35.0727005004883,4.36221933364868 ,-8.25675678253174,34.9143447875977,4.01728248596191,-8.8719654083252,33.5756645202637,3.51776742935181,-8.56477737426758 ,35.4037742614746,3.1792995929718,-8.38611030578613,35.3297424316406,3.55534768104553,-8.21022415161133,34.9344329833984 ,4.36779880523682,-8.22092342376709,34.7294998168945,4.4049391746521,-8.21338939666748,34.7530708312988,4.25973176956177 ,-8.21366500854492,34.9857864379883,4.27177286148071,-8.35896968841553,34.9792594909668,4.4604549407959,-8.40291786193848 ,35.7454528808594,3.54616498947144,-8.50260543823242,35.858699798584,3.32037091255188,-8.37730026245117,35.6140022277832 ,3.64707708358765,-8.41612148284912,35.5419960021973,3.4203827381134,-8.47990322113037,35.6955146789551,3.2742965221405 ,-8.34787940979004,35.4510459899902,3.76454997062683,-8.31959056854248,35.2991485595703,3.85887670516968,-8.59974193572998 ,35.8291664123535,3.16135144233704,-8.54978466033936,35.6963768005371,3.14328336715698,-8.39429187774658,33.6788864135742 ,4.62394094467163,-8.42716217041016,33.648307800293,4.40201473236084,-9.89840602874756,35.2682952880859,4.19409036636353 ,-10.0428628921509,35.3748893737793,3.91542863845825,-10.1934928894043,35.4644393920898,3.47839403152466,-10.3314628601074 ,35.1783294677734,3.44022393226624,-9.74534225463867,35.2012710571289,4.60747194290161,-9.62170696258545,35.1468811035156 ,4.74077701568604,-9.44297790527344,35.1148834228516,4.78078842163086,-8.95193004608154,35.0592346191406,4.66892528533936 ,-8.269118309021,35.1063690185547,4.06393909454346,-9.38967800140381,35.7668380737305,3.82832741737366,-9.42735767364502 ,35.4890785217285,4.0159912109375,-9.74074840545654,35.5043563842773,3.45244264602661,-9.52049541473389,35.7991027832031 ,3.45902061462402,-9.08410167694092,35.7472190856934,3.73782849311829,-9.07610988616943,35.4251823425293,3.9787495136261 ,-9.41947460174561,35.8356666564941,3.45036768913269,-9.18242740631104,35.8244323730469,3.40057396888733,-8.65144538879395 ,35.6751365661621,3.54329299926758,-8.60013294219971,35.4023666381836,3.74025058746338,-8.77639675140381,35.7341575622559 ,3.28729295730591,-9.52271366119385,35.0278701782227,4.49346399307251,-9.93948078155518,35.3462600708008,3.43713688850403 ,-9.04946708679199,34.9420700073242,4.46935939788818,-8.44690418243408,34.8676719665527,4.28323364257813,-8.76131248474121 ,35.4674453735352,3.30297207832336,-8.88348388671875,34.560848236084,3.4589376449585,-8.76171779632568,35.6798629760742 ,3.27803158760071,-10.0887289047241,33.6657524108887,4.40896081924438,-10.1630764007568,33.6840438842773,4.47010660171509 ,-10.3646583557129,33.6449432373047,4.14517593383789,-10.2802152633667,33.633186340332,4.11683940887451,-10.6405515670776 ,33.5438613891602,3.26456880569458,-10.4338436126709,33.516487121582,3.20561170578003,-10.4148750305176,33.5800399780273 ,3.67706537246704,-10.5326728820801,33.5909233093262,3.69249868392944,-9.90896511077881,33.709846496582,4.81917142868042 ,-9.97772789001465,33.7272644042969,4.88665962219238,-9.79854488372803,33.7178726196289,4.92589521408081,-9.84343433380127 ,33.7358093261719,5.00927448272705,-9.64190673828125,33.7133178710938,4.95843362808228,-9.6579065322876,33.7306976318359 ,5.05241680145264,-9.21004486083984,33.6847229003906,4.86349678039551,-9.17902374267578,33.6972389221191,4.95234203338623 ,-8.68776798248291,33.6452522277832,4.68041706085205,-8.61485767364502,33.6486396789551,4.73948431015015,-10.0402870178223 ,35.0881271362305,3.38248467445374,-10.6457843780518,33.6627044677734,3.13593530654907,-10.4437322616577,33.634449005127 ,3.07819509506226,-10.5912199020386,33.6596031188965,3.71049070358276,-10.6880941390991,33.6161956787109,3.30864119529724 ,-8.47219657897949,33.6223754882813,4.61491537094116,-8.46827793121338,33.6228790283203,4.40820407867432,-10.6944246292114 ,33.7458763122559,3.16912603378296,-0.122992999851704,43.4906578063965,6.96594190597534,-0.126481994986534,42.5673217773438 ,6.96594142913818,-0.126481994986534,42.5673217773438,6.38594198226929,-0.122992999851704,43.4906578063965,6.38594198226929 ,0.597185015678406,42.4653396606445,6.96594190597534,0.612924516201019,42.4631614685059,6.38594770431519,0.729595005512238 ,41.8761787414551,6.96593952178955,0.729551017284393,41.8645477294922,6.38594102859497,0.731296002864838,42.3263778686523 ,6.38594198226929,0.731275975704193,42.3209381103516,6.96594142913818,0.597548007965088,41.7322731018066,6.96594142913818 ,-0.129894003272057,41.6643905639648,6.96594190597534,-0.129894003272057,41.6643905639648,6.38594102859497,0.609617590904236 ,41.7334442138672,6.38594722747803,-0.133908003568649,40.6020469665527,6.96594142913818,-0.13390801846981,40.6020545959473 ,6.3859429359436,-0.234284996986389,40.5024223327637,6.96594190597534,-0.234284996986389,40.5024223327637,6.38594102859497 ,-0.261011004447937,41.7705078125,7.05283880233765,-0.265424996614456,40.6400299072266,7.05284023284912,0.462424010038376 ,41.8389549255371,7.05283880233765,0.60971999168396,42.2453231811523,7.05284023284912,0.608789026737213,41.9991340637207 ,7.05283832550049,-0.258341014385223,42.4770355224609,7.05283880233765,0.452903985977173,42.3955726623535,7.05283880233765 ,-0.254509001970291,43.4910354614258,7.05283880233765,-0.222614005208015,43.5910339355469,6.38594198226929,-0.222614005208015 ,43.5910339355469,6.96594142913818,-0.720449984073639,40.5042610168457,6.96594142913818,-0.720449984073639,40.5042610168457 ,6.38594198226929,-0.744120001792908,40.6419563293457,7.05283880233765,-2.12365031242371,39.5727958679199,6.96594142913818 ,-2.1295530796051,39.5666122436523,6.38594198226929,-2.12485098838806,39.7394599914551,7.05283880233765,-2.7805540561676 ,41.780948638916,7.05283880233765,-2.77405595779419,43.5006904602051,7.0528416633606,-2.77367949485779,43.6007080078125 ,6.96594858169556,-2.773677110672,43.6006736755371,6.38594198226929,-2.22244691848755,39.5865783691406,6.96594190597534 ,-3.35621309280396,41.3325271606445,6.96594142913818,-3.34770727157593,41.3433380126953,6.38594198226929,-2.21525001525879 ,39.5751762390137,6.38594198226929,-2.22836995124817,39.7522430419922,7.05283880233765,-3.29831385612488,41.4371223449707 ,7.05284023284912,-3.34866428375244,41.512393951416,6.96594190597534,-3.34866428375244,41.512393951416,6.38594198226929 ,-2.88055300712585,41.8218193054199,6.96594190597534,-2.87405395507813,43.5010528564453,6.96594190597534,-2.87405395507813 ,43.5010528564453,6.38594341278076,-2.88055300712585,41.8218193054199,6.38594198226929,-22.4020500183105,48.1817207336426 ,1.54338073730469,-21.9378795623779,47.5264930725098,0.964988231658936,-24.7054176330566,45.0436820983887,3.28460216522217 ,-24.3645610809326,44.4632720947266,2.86222863197327,-24.1518211364746,45.5265579223633,4.87630271911621,-24.5619010925293 ,45.4206123352051,4.05836725234985,-22.384069442749,48.530200958252,2.35600328445435,-22.1372318267822,48.7162055969238 ,3.37709856033325,-21.8083248138428,43.6105880737305,5.06077337265015,-19.1979789733887,46.1232490539551,4.08673620223999 ,-22.164608001709,44.1487350463867,5.74446392059326,-19.3826751708984,46.7098121643066,4.98189163208008,-21.5868129730225 ,48.536376953125,4.22997140884399,-23.6013107299805,45.3508186340332,5.63922548294067,-23.1435661315918,45.1739349365234 ,6.00655937194824,-20.9026660919189,48.1520385742188,4.80538845062256,-23.7835960388184,43.9319152832031,2.81814455986023 ,-21.0593452453613,46.5162734985352,0.742828786373138,-19.3185253143311,45.769229888916,3.21123647689819,-22.5982704162598 ,43.4730453491211,3.63622760772705,-19.7424182891846,45.6002197265625,1.78484308719635,-22.1106472015381,43.5050811767578 ,4.48459529876709,-23.2739486694336,43.5893974304199,2.90428400039673,-20.3708744049072,45.9203720092773,1.06325078010559 ,-22.7010631561279,44.7575988769531,6.06966114044189,-20.2916965484619,47.6790084838867,5.20238351821899,-21.4682216644287 ,48.5379943847656,4.07685518264771,-21.7997226715088,48.6303443908691,3.49851107597351,-22.1923599243164,48.2021217346191 ,1.5099401473999,-21.9199409484863,47.7049674987793,0.963749051094055,-19.2681007385254,46.0355033874512,3.33348369598389 ,-19.3146953582764,46.3306922912598,3.93647480010986,-23.4840717315674,45.0589866638184,5.87233924865723,-22.8347396850586 ,44.6621704101563,6.08595991134644,-24.4846878051758,44.5031890869141,3.10009932518005,-24.6617679595947,44.782642364502 ,3.41746973991394,-23.3162288665771,43.638298034668,3.18752980232239,-23.7745971679688,43.8534393310547,2.93733525276184 ,-20.3229217529297,46.124324798584,0.996055424213409,-19.7163581848145,45.8205032348633,1.76762294769287,-24.60475730896 ,45.2035064697266,3.98160099983215,-24.0964794158936,45.3257904052734,4.83113479614258,-24.1667976379395,44.1854057312012 ,2.91812348365784,-22.1245307922363,43.8912582397461,5.55091381072998,-22.0114917755127,43.6447410583496,5.10274362564087 ,-23.6671695709229,45.305061340332,5.63549709320068,-22.1414070129395,48.3773384094238,1.94118678569794,-22.1155433654785 ,48.4054985046387,2.18899011611938,-20.8544502258301,48.1285552978516,4.59779596328735,-22.8147830963135,43.5122756958008 ,3.69179534912109,-24.6724586486816,45.0163688659668,3.85816407203674,-22.255407333374,43.5268859863281,4.54903697967529 ,-19.7616958618164,47.168327331543,4.8857307434082,-20.1421985626221,47.6117973327637,5.04017925262451,-22.4245796203613 ,44.2923469543457,5.93594074249268,-19.41969871521,46.6725616455078,4.51129245758057,-19.3608703613281,45.8563117980957 ,2.67447733879089,-20.7665348052979,46.4529418945313,0.719281196594238,-21.1806507110596,46.8724899291992,0.734371244907379 ,-22.0227737426758,48.5846862792969,2.84799718856812,-21.5573883056641,47.3186416625977,0.904423534870148,-19.3374500274658 ,45.7312431335449,1.88695085048676,-19.5699977874756,45.7080688476563,1.2679615020752,-20.1725769042969,46.0857086181641 ,0.725336492061615,-20.6738948822021,46.4570732116699,0.412560313940048,-21.1447601318359,46.9291381835938,0.417648464441299 ,-21.5717449188232,47.4324417114258,0.604677438735962,-22.0146598815918,47.9422149658203,0.768847227096558,-22.2993946075439 ,48.4316864013672,1.26660573482513,-22.2835540771484,48.7297515869141,2.02767109870911,-22.1839542388916,48.9587860107422 ,2.82406663894653,-21.8414707183838,48.9177017211914,3.55330300331116,-21.4668483734131,48.8133392333984,4.20687675476074 ,-21.0063438415527,48.5632362365723,4.71491765975952,-20.5050296783447,48.1918716430664,5.02769327163696,-19.9782161712646 ,47.7596397399902,5.25458002090454,-19.5416946411133,47.2631225585938,5.10708808898926,-19.1298408508301,46.6791572570801 ,4.68784427642822,-18.939790725708,46.2231750488281,4.04214715957642,-18.9805450439453,45.9853324890137,3.3668098449707 ,-19.0853824615479,45.7828369140625,2.6220817565918,-18.1600589752197,46.6569938659668,1.37307822704315,-18.426139831543 ,46.6431617736816,0.695582926273346,-19.0699462890625,47.0431938171387,0.107480309903622,-19.6161346435547,47.4477996826172 ,-0.233294531702995,-20.1226425170898,47.9667549133301,-0.200760871171951,-20.5982398986816,48.5077171325684,-0.040066946297884 ,-21.0171203613281,49.0453948974609,0.249932289123535,-21.2495079040527,49.4981117248535,0.785253524780273,-21.3609409332275 ,49.9169731140137,1.53120338916779,-21.2518730163574,50.1637191772461,2.39346218109131,-20.8882293701172,50.1286926269531 ,3.18859696388245,-20.480073928833,50.0149917602539,3.90067601203918,-19.978343963623,49.7425003051758,4.45419454574585 ,-19.4052658081055,49.3570365905762,4.90646600723267,-18.8617305755615,48.8644409179688,5.02746105194092,-18.3861312866211 ,48.3234825134277,4.86676645278931,-17.9452476501465,47.6973037719727,4.41543531417847,-17.7366161346436,47.2030220031738 ,3.72183990478516,-17.7712059020996,46.9338340759277,2.98540925979614,-17.8854274749756,46.713207244873,2.17401576042175 ,-18.1495018005371,46.9325866699219,1.49883544445038,-17.9191188812256,47.0114860534668,2.24770545959473,-17.8125629425049 ,47.2173118591309,3.00464653968811,-17.7659759521484,47.3819618225098,3.36750364303589,-18.0165863037109,47.9198875427246 ,4.21446561813354,-18.3593807220459,48.4160575866699,4.58793210983276,-18.7763690948486,48.9096298217773,4.77557802200317 ,-19.2775058746338,49.3733863830566,4.68725728988647,-20.2334575653076,49.9592819213867,3.79440307617188,-20.6715030670166 ,50.0821533203125,3.03220653533936,-20.9079055786133,50.0307273864746,2.31216287612915,-20.9988117218018,49.7934913635254 ,1.50833106040955,-20.8822746276855,49.4387969970703,0.836857914924622,-20.654182434082,49.0165824890137,0.539040386676788 ,-20.2702236175537,48.5287246704102,0.225860998034477,-20.011625289917,48.1967315673828,0.169654786586761,-19.7482299804688 ,47.9482192993164,-0.0239475779235363,-18.9396018981934,47.2326812744141,0.31434291601181,-18.4715461730957,46.9784736633301 ,0.830715239048004,-21.0599403381348,50.2913818359375,3.28496885299683,-20.6517868041992,50.1776809692383,3.99704837799072 ,-21.423583984375,50.3264122009277,2.48983407020569,-21.5326519012451,50.079662322998,1.62757539749146,-22.4552669525146 ,48.8924407958984,2.12404298782349,-22.3556652069092,49.1214752197266,2.92043828964233,-22.0131816864014,49.080394744873 ,3.6496753692627,-21.6385593414307,48.9760284423828,4.3032488822937,-21.1780529022217,48.7259254455566,4.81128883361816 ,-20.1500568389893,49.9051895141602,4.55056667327881,-19.8145771026611,46.1965484619141,0.465458303689957,-19.2947864532471 ,46.6395530700684,0.164982780814171,-19.851354598999,46.3646507263184,0.545339286327362,-19.3213081359863,46.8249206542969 ,0.248330503702164,-18.4488430023193,46.8108177185059,0.76314902305603,-19.6774959564209,45.7687377929688,1.3232489824295 ,-18.8787593841553,45.8631553649902,3.38570284843445,-18.9835968017578,45.6606597900391,2.64097476005554,-17.7836418151855 ,46.5910263061523,2.1929087638855,-17.6694202423096,46.811653137207,3.00430226325989,-17.6151103973389,46.9004898071289 ,2.97250294685364,-17.7293338775635,46.6798629760742,2.16110944747925,-17.6784820556641,46.8914909362793,2.22928833961487 ,-17.5719261169434,47.0973129272461,2.98622941970825,-19.0120277404785,45.8349990844727,3.41211867332459,-19.1168651580811 ,45.6325035095215,2.66739082336426,-19.2995853424072,45.8851699829102,3.37879276275635,-19.3923530578613,45.7059783935547 ,2.71978616714478,-23.6020965576172,42.4886283874512,4.21740007400513,-24.0390434265137,42.5906944274902,3.76165699958801 ,-24.4657897949219,42.7697563171387,3.48394298553467,-24.9110813140869,43.0958671569824,3.48783564567566,-25.2296810150146 ,43.3942337036133,3.6277711391449,-25.4390163421631,43.6843681335449,3.91812968254089,-25.6448230743408,44.0140953063965 ,4.5360369682312,-25.4211101531982,44.173267364502,5.21521854400635,-25.0152473449707,44.1889839172363,5.87159967422485 ,-24.5331020355225,44.0858268737793,6.39444398880005,-24.2935276031494,43.9908142089844,6.32334661483765,-23.6125564575195 ,43.6142311096191,6.57493114471436,-23.1792774200439,43.2090682983398,6.38589477539063,-22.8766670227051,42.7984848022461 ,5.98477125167847,-22.8129253387451,42.4254875183105,5.29610729217529,-22.7085399627686,43.4084663391113,3.62266159057617 ,-23.2508773803711,43.5571594238281,3.10341167449951,-23.7290058135986,43.7791404724121,2.83729338645935,-24.2031059265137 ,44.1235504150391,2.83552932739258,-24.5413093566895,44.4444618225098,2.9929051399231,-24.7613124847412,44.7580223083496 ,3.31627941131592,-24.8992767333984,45.2632522583008,3.92786908149719,-24.6648254394531,45.4869651794434,4.45191526412964 ,-24.0667724609375,45.5779266357422,5.56209564208984,-23.6824283599854,45.3489074707031,5.97707366943359,-23.4934158325195 ,45.0926094055176,5.96880340576172,-22.7836380004883,44.6977272033691,6.22604417800903,-22.3307552337646,44.27001953125 ,6.01956701278687,-22.0103874206543,43.8350105285645,5.59420156478882,-21.9547653198242,43.440372467041,4.84743356704712 ,-23.7006778717041,42.5842094421387,4.29594802856445,-22.9873161315918,42.6391448974609,5.46495914459229,-23.060697555542 ,42.8498802185059,5.78238868713379,-23.2499942779541,43.226188659668,6.30128717422485,-23.6414680480957,43.5781860351563 ,6.44240856170654,-24.5210266113281,43.9476547241211,6.11971950531006,-24.898904800415,44.0220222473145,5.69627857208252 ,-25.2336368560791,44.0161056518555,5.16977643966675,-25.3931694030762,43.8623733520508,4.60062789916992,-25.4039688110352 ,43.7053184509277,4.01024484634399,-25.2397403717041,43.4337997436523,3.71354222297668,-24.8973350524902,43.1546020507813 ,3.67040634155273,-24.4386367797852,42.8376426696777,3.65668988227844,-24.0960559844971,42.6828956604004,3.8564293384552 ,-24.7833137512207,45.0106201171875,3.81515216827393,-25.447660446167,43.914134979248,4.38937330245972,-24.2597980499268 ,43.9135971069336,6.20571947097778,-25.4134788513184,43.8154411315918,4.35810327529907,-24.985466003418,44.268180847168 ,5.78709697723389,-24.8653507232666,44.1018943786621,5.61898374557495,-25.3341484069824,44.2546806335449,5.22318649291992 ,-25.1503314971924,44.096851348877,5.17074155807495,-24.1012134552002,45.5726890563965,5.49815893173218,-24.6343822479248 ,45.4915962219238,4.50843048095703,-25.2383289337158,44.3627853393555,5.23182153701782,-24.6551876068115,45.3935508728027 ,4.63619089126587,-24.9477596282959,44.3740348815918,5.70174646377563,-24.210880279541,45.461124420166,5.46096467971802 ,-25.0922203063965,44.3756713867188,5.19212770462036,-24.5868301391602,45.2690048217773,4.67591428756714,-24.840389251709 ,44.3854217529297,5.59939527511597,-24.2017631530762,45.327564239502,5.39071893692017,-21.8714790344238,43.4021072387695 ,4.89463138580322,-22.733699798584,42.3764038085938,5.31425333023071,-21.9884815216064,43.612491607666,5.1719913482666 ,-22.8765773773193,42.6221656799316,5.60099172592163,-21.8782711029053,43.5508041381836,5.19777011871338,-22.7452659606934 ,42.5296897888184,5.6197304725647,-23.5394515991211,43.6381874084473,6.61610221862793,-23.1375846862793,43.2624015808105 ,6.44077062606812,-22.3505821228027,44.2464332580566,6.10100269317627,-22.7706279754639,44.6431274414063,6.29250907897949 ,-22.7341136932373,44.7321548461914,6.18907356262207,-22.3140659332275,44.3354606628418,5.99756574630737,-22.3951377868652 ,44.3589134216309,5.93493366241455,-22.7750091552734,44.7120819091797,6.09634160995483,-23.6365718841553,43.5489616394043 ,6.58618783950806,-23.2347049713135,43.1731758117676,6.41085624694824,-23.6633892059326,43.5155258178711,6.46327352523804 ,-23.3002948760986,43.1890449523926,6.3323826789856,-23.2172451019287,42.6339797973633,5.04120302200317,-22.6529445648193 ,42.6419715881348,4.88354730606079,-22.7472667694092,42.721263885498,4.90590715408325,-22.4277858734131,43.1294479370117 ,4.67683029174805,-22.3620510101318,43.0246162414551,4.65405035018921,-22.1816253662109,43.4426612854004,4.50388669967651 ,-24.0265216827393,42.5450248718262,3.7071475982666,-24.4532699584961,42.7240867614746,3.42943382263184,-23.7164859771729 ,43.733470916748,2.78278398513794,-23.2383575439453,43.5114898681641,3.04890275001526,-23.2117614746094,43.6130676269531 ,3.0797917842865,-23.6898899078369,43.8350486755371,2.81367349624634,-23.735481262207,43.9093475341797,2.91371536254883 ,-23.2771129608154,43.694206237793,3.16390991210938,-24.0792198181152,42.5373382568359,3.78909802436829,-24.5059661865234 ,42.7164001464844,3.51138377189636,-24.13623046875,42.6295394897461,3.88387060165405,-24.4788150787354,42.7842864990234 ,3.68413090705872,-22.1667804718018,43.211009979248,5.33818578720093,-22.1515426635742,43.0689430236816,5.03093194961548 ,-22.385612487793,42.9532775878906,5.44468927383423,-22.3880958557129,42.7875366210938,5.14605522155762,-22.2405643463135 ,43.1241111755371,5.37409496307373,-22.1619033813477,43.16552734375,5.23982000350952,-22.1553688049316,43.1046142578125 ,5.10808849334717,-22.2210655212402,42.9862403869629,5.06476593017578,-22.3165550231934,42.8726425170898,5.11123847961426 ,-22.3873310089111,42.8386306762695,5.23811817169189,-22.3864707946777,42.8959579467773,5.34140396118164,-22.3239517211914 ,43.0259017944336,5.41468000411987,-22.3121013641357,42.9663772583008,5.27273082733154,-22.3124008178711,42.9463119506836 ,5.23658084869385,-22.2876300811768,42.9582099914551,5.19217300415039,-22.254207611084,42.997974395752,5.17590713500977 ,-22.2312145233154,43.0394058227539,5.19106960296631,-22.2335014343262,43.0607223510742,5.23717641830444,-22.2610340118408 ,43.0462265014648,5.28417253494263,-22.2902202606201,43.0118560791016,5.29837703704834,-22.2552661895752,42.9270706176758 ,5.29389572143555,-22.2555656433105,42.9070053100586,5.25774621963501,-22.2307929992676,42.9189071655273,5.21333789825439 ,-22.1973705291748,42.958667755127,5.19707250595093,-22.1743774414063,43.0000991821289,5.21223497390747,-22.1766662597656 ,43.0214157104492,5.25834131240845,-22.2041969299316,43.0069198608398,5.30533790588379,-22.2333831787109,42.9725532531738 ,5.3195424079895,-22.2273292541504,42.9329032897949,5.28440809249878,-22.2275142669678,42.9205322265625,5.26211595535278 ,-22.2122364044189,42.9278678894043,5.23473072052002,-22.1916275024414,42.9523849487305,5.22470045089722,-22.1774463653564 ,42.9779396057129,5.23405075073242,-22.178861618042,42.991081237793,5.26248359680176,-22.1958351135254,42.9821434020996 ,5.29146432876587,-22.2138366699219,42.9609489440918,5.30022382736206,-22.3022117614746,43.4858360290527,5.72577333450317 ,-22.6179618835449,43.9109115600586,6.1435604095459,-22.5559597015381,43.1822204589844,5.84017658233643,-22.868013381958 ,43.598258972168,6.25151443481445,-23.1094093322754,42.983512878418,6.14117527008057,0.0135970851406455,49.8888130187988 ,5.46461820602417,-0.0439089983701706,46.9334030151367,5.46729421615601,-0.181864738464355,56.3130836486816,-4.71527814865112 ,-0.172646686434746,57.6230239868164,-4.51124048233032,0.0305423717945814,61.7640762329102,-3.31285810470581,-0.0491822399199009 ,60.4813423156738,-3.89235258102417,-0.0625703707337379,51.1098365783691,-4.30081701278687,-0.0205972474068403,49.2944297790527 ,-3.22874736785889,-0.176884800195694,54.6524085998535,-4.77034664154053,1.17273511932581e-005,52.8985023498535,5.39261341094971 ,0.137227490544319,54.0256233215332,5.28923416137695,-0.136817902326584,52.6190414428711,-4.49335432052612,0.184443131089211 ,54.9490509033203,5.17759370803833,0.241316020488739,56.303783416748,4.55678033828735,-7.75623239065986e-017,44.6220588684082 ,5.95007181167603,-7.75623239065986e-017,44.1932983398438,-2.4703152179718,0.052837498486042,51.2362060546875,5.59731817245483 ,0.335718125104904,59.506462097168,2.47581624984741,0.318446129560471,58.4727668762207,3.11742997169495,-5.00296115875244 ,57.2223930358887,-5.05353212356567,-3.89901828765869,57.3001937866211,-4.94295692443848,-3.80570006370544,58.7004356384277 ,-5.00134325027466,-5.01546001434326,58.6748123168945,-4.51018762588501,-2.33792757987976,49.2690544128418,5.31126832962036 ,-3.19219017028809,46.8397331237793,5.11824417114258,-4.16545343399048,46.8441047668457,5.14115715026855,-4.33468294143677 ,48.3736190795898,4.74083423614502,-0.508937001228333,46.9681167602539,5.79316377639771,-0.459551274776459,49.8549499511719 ,5.72826194763184,-4.9380989074707,44.0710144042969,-0.0603329986333847,-5.70313310623169,45.5682716369629,-0.12718839943409 ,-6.18036985397339,45.2744522094727,1.05097448825836,-5.83846712112427,44.3852729797363,1.56467497348785,-5.37826013565063 ,46.895393371582,-1.29639673233032,-7.40615081787109,51.1274833679199,-0.183409884572029,-6.76184320449829,49.4113388061523 ,-0.870985507965088,-6.24649906158447,49.6185493469238,-1.80992066860199,-7.16691017150879,51.5537223815918,-1.74251294136047 ,-4.96109008789063,46.449836730957,4.62802600860596,-5.02808284759521,47.667839050293,4.1308741569519,-5.50866508483887 ,49.6626396179199,4.08968114852905,-4.43541669845581,49.9843826293945,4.87894105911255,-5.99175930023193,47.1326713562012 ,0.551007688045502,-6.54927587509155,49.1226081848145,-0.0480374731123447,-6.34458684921265,48.3535385131836,1.34890067577362 ,-6.20943117141724,46.6569442749023,1.74234962463379,-5.83220386505127,49.9621200561523,-2.57093405723572,-6.44042301177979 ,51.9786491394043,-3.23154377937317,-4.97103071212769,50.3766403198242,-3.72068238258362,-2.57297945022583,50.9226188659668 ,-4.10634851455688,-3.04856324195862,52.3631401062012,-4.5895528793335,-5.39983701705933,52.1313934326172,-4.45549535751343 ,-4.20102405548096,43.5664901733398,5.19080018997192,-5.09468984603882,43.6128387451172,4.61228513717651,-5.75057411193848 ,44.0617218017578,3.85488200187683,-6.00133609771729,46.3558654785156,3.68154311180115,-6.32964134216309,44.886531829834 ,2.16583490371704,-4.61951017379761,59.6811981201172,0.797900199890137,-5.18459749221802,60.2807922363281,0.704080522060394 ,-4.56298160552979,60.2502746582031,0.991760969161987,-4.66016292572021,59.2584419250488,1.81895363330841,-5.68881893157959 ,59.1940536499023,1.79819095134735,-5.18220567703247,60.3577499389648,0.0792717710137367,-4.42179536819458,60.3886947631836 ,0.423252910375595,-6.16989278793335,61.7052993774414,-2.4096360206604,-4.9240550994873,62.3232688903809,-2.90676879882813 ,-5.13821315765381,62.3888282775879,-1.62733566761017,-6.35365962982178,61.7394332885742,-1.29647183418274,-3.29271292686462 ,63.0202407836914,-1.85308480262756,-3.05310773849487,62.9706840515137,-2.64070582389832,-2.5487334728241,58.6095314025879 ,3.81683444976807,-2.42541718482971,55.9129295349121,5.45159578323364,-3.72787094116211,55.709228515625,5.43201351165771 ,-4.43703937530518,58.3423347473145,3.65203523635864,-4.73564958572388,60.7290840148926,-3.89975166320801,-3.89599299430847 ,60.6723747253418,-4.30670547485352,-4.26608657836914,47.8940963745117,-2.71014308929443,-2.33043313026428,48.7191696166992 ,-3.23936223983765,-2.05022978782654,57.4430694580078,-5.1027364730835,-1.96963977813721,55.880916595459,-5.11452007293701 ,-2.16026568412781,58.8478927612305,-4.83823204040527,-0.645922422409058,58.7460327148438,3.64485883712769,-0.68452650308609 ,56.2766342163086,5.19728088378906,-2.88014340400696,60.6445121765137,-4.31239032745361,-0.918300688266754,49.2085800170898 ,-3.41392731666565,-1.5696405172348,51.1897010803223,-4.15839719772339,-2.58754658699036,59.5622673034668,2.69001436233521 ,-4.594557762146,59.1206893920898,2.84920859336853,-1.72525858879089,54.378116607666,-4.8572883605957,-0.665218472480774 ,52.951229095459,5.54827356338501,-0.759148120880127,53.6747779846191,5.45814752578735,-5.81344699859619,47.5758666992188 ,3.06518507003784,-6.35021162033081,49.6599311828613,1.88136398792267,-6.05563068389893,58.0019264221191,3.26532244682312 ,-6.29915761947632,58.448902130127,2.8508608341217,-5.25224447250366,55.6491203308105,4.969970703125,-4.55231380462646 ,61.0196113586426,-0.239496752619743,-5.43997573852539,60.8021011352539,-0.191684767603874,-6.04992532730103,61.4153099060059 ,-0.325486749410629,-5.06683301925659,61.9652404785156,-0.78337424993515,-2.01689052581787,52.3396987915039,-4.56934595108032 ,-4.11964130401611,55.5003929138184,-5.05728578567505,-0.133614599704742,59.0669021606445,-4.4751033782959,-6.16877794265747 ,60.5145454406738,0.550737738609314,-5.96397542953491,60.5219535827637,-0.148668453097343,-6.5405535697937,60.81005859375 ,-0.272704929113388,-5.74670171737671,59.9476547241211,1.13532936573029,-6.77210903167725,60.3752555847168,1.38928270339966 ,-6.52460813522339,58.5361785888672,2.17649149894714,-6.68791389465332,58.7010536193848,2.22907447814941,-6.27624559402466 ,59.3210983276367,1.79491090774536,-7.46848487854004,59.7941474914551,2.08688426017761,-7.75415468215942,59.1501045227051 ,2.26238036155701,-7.81153011322021,61.3239059448242,-0.382952928543091,-7.29381418228149,61.1288414001465,-0.944032788276672 ,-7.46071624755859,60.8121109008789,1.02310824394226,-6.85135412216187,61.2363624572754,-0.92545074224472,-6.8177695274353 ,60.8522338867188,0.5522101521492,-6.40969181060791,55.401611328125,3.81819677352905,-6.88170289993286,57.552074432373 ,2.49769401550293,-6.20172452926636,53.3832397460938,2.31489658355713,-6.36324214935303,51.7953987121582,2.1042845249176 ,-7.04831647872925,52.6200332641602,0.252361595630646,-7.28402996063232,53.6452026367188,0.16018034517765,-0.694299697875977 ,54.651237487793,5.72144031524658,-3.57418870925903,54.2588043212891,5.43804931640625,-3.32706022262573,53.3785057067871 ,5.03736639022827,-4.77684831619263,53.3375396728516,4.4062705039978,-5.07331657409668,54.2058448791504,4.84667634963989 ,-2.14672422409058,53.4957542419434,5.21924448013306,-2.29173636436462,54.3981246948242,5.64961671829224,-5.99193096160889 ,54.214729309082,4.02423715591431,-6.32433986663818,54.4655952453613,3.40305590629578,-6.84397315979004,55.3699760437012 ,2.83058953285217,-5.94443607330322,51.708423614502,4.05636835098267,-2.04570722579956,52.4807548522949,5.54989433288574 ,-6.27668046951294,54.5082397460938,2.19852471351624,-6.68165445327759,55.0434265136719,2.18652367591858,-5.65278625488281 ,53.3934936523438,3.7850239276886,-4.87148952484131,51.864917755127,4.85457754135132,-3.16624927520752,52.145923614502 ,5.3819727897644,-2.62237215042114,50.6626281738281,5.40696811676025,-8.41484260559082,60.4155578613281,1.57534170150757 ,-8.83414459228516,61.0870361328125,0.103286720812321,-0.429187029600143,44.5688095092773,5.94135522842407,-3.39157700538635 ,43.7743873596191,5.51495599746704,-6.54397678375244,60.8124046325684,-3.20612573623657,-6.18393325805664,60.7584075927734 ,-3.15727949142456,-6.73055362701416,61.3397254943848,-1.89037048816681,-7.12801933288574,61.1413993835449,-2.07482528686523 ,-3.82461071014404,54.202262878418,-4.79300689697266,-7.56537818908691,61.2854270935059,-1.97838175296783,-3.41479253768921 ,62.6111488342285,-0.930265963077545,-7.66061592102051,60.9895057678223,-2.96556806564331,-7.23512315750122,60.0191764831543 ,-3.89410877227783,-6.22283267974854,59.731559753418,-4.06070184707642,-4.73881864547729,59.5047225952148,-4.55289316177368 ,-7.84283971786499,54.1470756530762,-2.38503170013428,-6.86101531982422,54.433349609375,-3.65812921524048,-7.79491281509399 ,53.7588539123535,-0.228861659765244,-2.26250076293945,44.192440032959,-2.14107060432434,-5.80761480331421,55.130687713623 ,-4.84916019439697,-5.7725682258606,54.2856330871582,-4.57562637329102,-7.54521226882935,56.7853012084961,-4.26201248168945 ,-7.75341081619263,55.0225067138672,-3.3477029800415,-7.28053140640259,55.2495574951172,-4.16975021362305,-6.94179582595825 ,57.1727485656738,-4.17385244369507,-3.07096242904663,44.1793899536133,-1.37161779403687,-0.431658685207367,51.0969543457031 ,5.59628582000732,-6.80107975006104,50.7735061645508,0.0954368412494659,-7.76311159133911,54.0241966247559,-0.301495224237442 ,-7.44548082351685,54.1859931945801,0.0743789598345757,-6.75493192672729,54.6499519348145,1.31245946884155,-7.18617343902588 ,58.267749786377,2.41894459724426,-6.98509931564331,58.0105361938477,2.40028405189514,-5.56892108917236,43.7037506103516 ,3.96434211730957,-9.09653759002686,61.2269897460938,-1.50791823863983,-7.51727819442749,57.9505767822266,-4.34716653823853 ,-6.89555788040161,58.792911529541,-4.38299942016602,-7.62991142272949,58.7892837524414,-4.1893367767334,-0.478152990341187 ,43.5242080688477,5.80299520492554,-3.50020909309387,43.5624122619629,5.78555011749268,-8.60066223144531,60.8792953491211 ,-2.64818215370178,-8.10863590240479,59.867431640625,-3.61165523529053,-7.92280101776123,54.623119354248,-2.55926966667175 ,-7.9593391418457,55.3963432312012,-2.68657779693604,-8.18213939666748,55.0373420715332,-2.67853426933289,-8.11448860168457 ,55.3380355834961,-3.37380743026733,-8.08938598632813,55.7524185180664,-3.29892182350159,-7.93057060241699,54.3846206665039 ,-0.261126399040222,-7.75561332702637,55.1170883178711,-1.67782986164093,-7.59425258636475,54.67236328125,-0.427858233451843 ,-6.79058885574341,55.7474899291992,1.87186169624329,-7.11697340011597,56.5882987976074,2.24229073524475,-7.24335622787476 ,55.9228935241699,2.49578619003296,-7.12432050704956,55.3387107849121,2.03639507293701,-7.1244478225708,54.9274826049805 ,0.763150691986084,-7.26573514938354,54.6200256347656,0.920579612255096,-7.5579628944397,54.5143737792969,0.165195435285568 ,-7.27818441390991,54.7909660339355,-0.0486234277486801,-7.35125160217285,57.4009628295898,2.53132128715515,-7.41011142730713 ,57.6769714355469,2.50238084793091,-8.53023815155029,59.0593490600586,2.27440071105957,-9.06899929046631,59.9608154296875 ,1.7973073720932,-8.88298988342285,60.295108795166,1.89493358135223,-8.21960163116455,59.1651039123535,2.56374311447144 ,-7.46124601364136,57.5798568725586,2.30548739433289,-7.6955394744873,57.913932800293,2.32873606681824,-7.51820802688599 ,57.9574584960938,2.49965953826904,-9.46251106262207,60.6362113952637,0.4064701795578,-9.31418800354004,61.0124816894531 ,0.382610023021698,-6.8989520072937,55.382080078125,1.36610519886017,-7.92569446563721,56.9639663696289,-4.34455442428589 ,-7.51057100296021,57.2705192565918,-4.31482410430908,-7.89591503143311,57.3142204284668,-4.40296173095703,-7.37515687942505 ,57.2835006713867,2.34248971939087,-7.30052852630615,56.7208023071289,2.55324769020081,-9.63988018035889,60.9473609924316 ,-1.19915819168091,-9.46856594085693,61.3043594360352,-1.2989444732666,-9.27958202362061,60.755500793457,-2.4731273651123 ,-9.07314586639404,61.0160331726074,-2.67641758918762,-7.95075511932373,57.947681427002,-4.51332521438599,-8.13483333587646 ,58.8517189025879,-4.33059501647949,-8.73000431060791,59.7835388183594,-3.44021344184875,-8.48867511749268,59.9324913024902 ,-3.72010040283203,-8.34878540039063,58.7928733825684,-4.02249336242676,-8.22158813476563,58.0632476806641,-4.18288135528564 ,-8.01778411865234,57.130428314209,-3.94697332382202,-8.05079460144043,57.4037895202637,-4.01655721664429,-5.67244100570679 ,44.0079154968262,1.06051099300385,-5.80713796615601,43.9371109008789,1.50510704517365,-7.45419216156006,56.1586456298828 ,-1.29048562049866,-8.28530311584473,56.6873512268066,-2.61842083930969,-8.6239013671875,57.5741500854492,-3.51662087440491 ,-7.06550312042236,56.9819793701172,0.424003332853317,-6.98706388473511,56.4588165283203,1.49204194545746,-7.16970539093018 ,55.3181915283203,-0.13018873333931,-7.15138053894043,55.2580871582031,0.648422956466675,-8.14474773406982,57.25341796875 ,1.78825891017914,-8.47859382629395,57.2579498291016,1.99721741676331,-9.05362892150879,58.1805534362793,2.35215330123901 ,-9.83308410644531,57.4026870727539,2.20573568344116,-9.64915084838867,59.5587844848633,1.99272048473358,-10.1421051025391 ,60.1832733154297,0.716989398002625,-9.10313892364502,56.9268455505371,1.638108253479,-10.6574897766113,56.644100189209 ,1.67002630233765,-7.56710195541382,57.1711387634277,1.84745657444,-8.48157787322998,55.0172271728516,-0.216014891862869 ,-7.0231614112854,56.4469947814941,-0.28096815943718,-7.16446113586426,56.3610076904297,-0.615244030952454,-8.39256477355957 ,54.9758796691895,-0.616515576839447,-8.50124835968018,55.7217483520508,1.73240280151367,-9.41024780273438,56.5547943115234 ,2.06916451454163,-7.88820028305054,56.8479080200195,1.19110143184662,-9.09678936004639,56.8670043945313,-3.44182705879211 ,-8.34248447418213,56.1166343688965,-2.58545112609863,-8.21704578399658,55.0028915405273,1.15598487854004,-9.90963077545166 ,55.8720932006836,-3.56037259101868,-9.06782722473145,54.9145317077637,-2.63912296295166,-8.62874794006348,54.9908294677734 ,-1.18219780921936,-7.649001121521,55.1071319580078,-0.538050770759583,-10.340726852417,58.6142463684082,1.99010813236237 ,-10.8593845367432,59.2226715087891,0.763373553752899,-11.012113571167,57.6644592285156,1.87140822410584,-11.2696666717529 ,59.1985969543457,-1.52713632583618,-10.6699409484863,59.8837432861328,-1.89451503753662,-10.8999452590942,59.7691764831543 ,-0.652961134910584,-11.4934072494507,58.7517471313477,-0.260973364114761,-9.99734973907471,60.7780532836914,-1.08868741989136 ,-10.6349620819092,58.9184379577637,-2.31953024864197,-9.99201107025146,59.2885208129883,-2.83282876014709,-9.1008825302124 ,59.7472343444824,-3.3547728061676,-9.48565769195557,60.6213226318359,-2.42824769020081,-9.63987922668457,58.4990463256836 ,-3.35429525375366,-10.0067596435547,58.0339851379395,-3.24089646339417,-8.68969440460205,58.21142578125,-3.91057538986206 ,-11.4933223724365,58.2437973022461,0.7555051445961,-14.079628944397,51.5313491821289,-1.75432026386261,-15.3577547073364 ,50.4500312805176,-1.08153355121613,-14.7907867431641,50.5980491638184,-0.796776831150055,-13.3921184539795,51.4282913208008 ,-0.533235013484955,-11.9978437423706,52.0623245239258,-0.24705570936203,-10.251615524292,53.4479827880859,0.0441180802881718 ,-10.1969766616821,53.3028335571289,-0.340612351894379,-11.9713344573975,51.9814376831055,-0.58304238319397,-13.6772937774658 ,51.6746406555176,1.87144458293915,-12.632607460022,52.1185760498047,2.51966714859009,-12.5650129318237,51.5652618408203 ,1.17271864414215,-13.7069854736328,51.3117408752441,1.151162981987,-11.374698638916,52.2686195373535,1.14971232414246 ,-11.4781999588013,52.9149055480957,2.49313879013062,-9.74384593963623,54.5315742492676,2.21795177459717,-13.9736175537109 ,52.368595123291,2.47570753097534,-13.1968288421631,52.962287902832,3.10246396064758,-14.8301277160645,52.6071395874023 ,2.11761546134949,-14.2657508850098,52.8922119140625,2.13393473625183,-14.4684648513794,52.1536636352539,2.14125990867615 ,-14.8657751083374,51.7047424316406,2.20066118240356,-14.8201179504395,53.070125579834,2.05547261238098,-14.1463689804077 ,53.445671081543,2.12267684936523,-15.0371074676514,52.2935600280762,-2.07219195365906,-16.2619514465332,51.1877555847168 ,-1.39485847949982,-15.8765563964844,50.9944725036621,-1.46031129360199,-14.5988140106201,51.8026733398438,-2.22906160354614 ,-17.1141986846924,50.1530723571777,-0.656818032264709,-16.1127605438232,49.9333915710449,-0.649384915828705,-15.7860059738159 ,49.9094886779785,-0.118252269923687,-14.3615608215332,51.0999221801758,1.76429009437561,-15.3237085342407,50.4653549194336 ,1.89021146297455,-18.9265270233154,52.0916786193848,2.08394813537598,-18.2440147399902,52.6426467895508,1.4875899553299 ,-17.8324413299561,52.9939117431641,2.0628867149353,-18.2371978759766,52.0618019104004,3.29557943344116,-15.5986242294312 ,49.897388458252,0.180025562644005,-16.1771202087402,48.9824981689453,0.648494422435761,-15.8943605422974,49.4016189575195 ,1.68389463424683,-15.0275983810425,50.1505317687988,1.01311051845551,-16.5464572906494,51.6605796813965,3.32884478569031 ,-15.4696502685547,50.710880279541,2.66894578933716,-17.7275943756104,51.8120422363281,3.08908557891846,-16.9035873413086 ,53.2870559692383,2.3514256477356,-15.8416471481323,52.9759292602539,2.68076205253601,-19.8595390319824,50.9323654174805 ,3.22305417060852,-18.8802871704102,50.6448135375977,4.20212316513062,-18.1262359619141,49.6349830627441,4.5990252494812 ,-20.3983383178711,50.4655838012695,1.90877258777618,-20.2319946289063,50.4357147216797,1.16225552558899,-20.1870269775391 ,50.027660369873,0.646689832210541,-19.9135608673096,49.7892875671387,0.368544578552246,-18.6255340576172,47.3748207092285 ,0.111035406589508,-17.3023681640625,48.6882209777832,-0.212918892502785,-18.8274440765381,48.9921684265137,-0.369614362716675 ,-11.2789144515991,52.7401924133301,-2.49145722389221,-12.936861038208,52.1631240844727,-2.09757351875305,-12.2275257110596 ,52.1928596496582,-0.912774920463562,-10.5374174118042,53.401309967041,-0.792993426322937,-16.3899230957031,48.9935150146484 ,0.133493438363075,-16.6946067810059,49.0124168395996,-0.605560779571533,-17.0542774200439,48.5133399963379,0.351435780525208 ,-18.2206153869629,47.0674438476563,0.796007394790649,-12.8616600036621,54.1305847167969,2.49924993515015,-12.0359754562378 ,53.8261222839355,2.99227213859558,-13.5405406951904,53.2507095336914,2.46743822097778,-10.4204120635986,55.5134124755859 ,2.56823205947876,-12.3428859710693,53.5515251159668,-3.40832281112671,-13.5257186889648,52.5651512145996,-2.6235671043396 ,-18.2112407684326,49.9638214111328,-0.76670640707016,-18.4898586273193,49.53125,-0.511448681354523,-17.11106300354 ,50.5295639038086,-0.92558091878891,-13.3685293197632,53.7153778076172,-2.68515563011169,-12.1484384536743,56.8107490539551 ,0.557642042636871,-12.1036748886108,56.5559844970703,0.99444192647934,-13.0235824584961,55.6834754943848,1.18073070049286 ,-13.4592247009277,55.5429267883301,0.952362835407257,-14.877911567688,54.3908309936523,1.14372169971466,-14.8840246200562 ,53.8452568054199,1.51513016223907,-14.330548286438,50.7510681152344,-0.0111402757465839,-16.7873268127441,48.4305381774902 ,1.50344741344452,-16.7642364501953,48.5701866149902,1.02926099300385,-16.5800800323486,48.3761558532715,1.93620872497559 ,-18.0195808410645,47.1744804382324,1.6593029499054,-11.1290073394775,57.0205192565918,-3.73677539825439,-11.8914222717285 ,58.0101776123047,-2.49101114273071,-12.6511726379395,57.3129272460938,-2.62014579772949,-12.0716953277588,56.2566299438477 ,-3.62442135810852,-14.2039346694946,55.8782081604004,-1.99054050445557,-14.2394742965698,54.8764915466309,-1.69854950904846 ,-13.3633728027344,54.7506828308105,-2.51998615264893,-12.8050441741943,55.4120407104492,-3.20260739326477,-15.5451545715332 ,54.3909187316895,-0.944691777229309,-15.6051340103149,53.6398811340332,-1.19103765487671,-18.6171264648438,50.7980270385742 ,-0.42991316318512,-18.7923183441162,50.4993553161621,-0.173323720693588,-18.8255710601807,49.7969970703125,-0.24158239364624 ,-15.4429044723511,52.9892845153809,-1.97211527824402,-17.1787643432617,52.7444152832031,-0.410667061805725,-17.0103073120117 ,52.2682647705078,-0.746182978153229,-14.5044660568237,55.9602584838867,-0.556629240512848,-15.4355049133301,54.7218017578125 ,0.240091517567635,-18.9051361083984,49.2556838989258,-0.212960779666901,-11.3375291824341,56.0898933410645,2.17179417610168 ,-11.0171632766724,54.711296081543,-3.56722521781921,-10.0315380096436,53.8144073486328,-2.67064666748047,-9.3803129196167 ,53.8204650878906,1.42993497848511,-9.84768962860107,53.8808174133301,-0.888922214508057,-9.65566444396973,53.9683685302734 ,-0.00864173006266356,-9.65421772003174,53.7139053344727,-0.368462741374969,-11.5770902633667,58.701343536377,-1.27429091930389 ,-11.7678966522217,58.0280494689941,-0.0459968149662018,-10.9296398162842,58.6693992614746,-2.24099469184875,-11.9043874740601 ,56.7409973144531,0.94693797826767,-11.4768314361572,56.4381294250488,1.56433737277985,-11.6599178314209,56.2103996276855 ,1.59167802333832,-11.4014825820923,56.7989845275879,1.64399898052216,-11.7768106460571,57.2847061157227,0.964253008365631 ,-11.8873796463013,57.0615272521973,0.340082973241806,-12.1598997116089,58.4843826293945,-1.42520177364349,-12.9499549865723 ,57.8103370666504,-1.27406144142151,-11.8083772659302,57.8043518066406,-0.143025532364845,-12.4767713546753,57.3775024414063 ,0.146502330899239,-13.7413520812988,55.7738189697266,0.647366166114807,-13.3479604721069,54.4060974121094,2.3595118522644 ,-16.6586666107178,51.6323089599609,-1.1572380065918,-12.2062034606934,55.6152458190918,1.59468448162079,-16.2585430145264 ,53.7987480163574,1.81818199157715,-15.4065914154053,53.470832824707,2.19790458679199,-16.9875087738037,53.5469665527344 ,0.917690515518188,-18.654182434082,51.5154151916504,0.383005619049072,-19.3796482086182,51.2564315795898,0.973189532756805 ,-19.3383960723877,50.9063301086426,0.826740324497223,-18.549898147583,51.0804443359375,0.245433732867241,-16.8411140441895 ,48.938648223877,3.71082305908203,-17.8749370574951,49.8132171630859,4.56413221359253,-16.6467800140381,48.3975677490234 ,2.77507829666138,-13.2260084152222,51.3968048095703,0.032488327473402,-20.513069152832,50.4961700439453,2.56306648254395 ,-19.5767478942871,49.4250297546387,-0.103127479553223,-19.1159076690674,50.2191734313965,-0.157384023070335,-19.263822555542 ,50.430233001709,0.27906745672226,-19.3878326416016,50.5774154663086,0.466669023036957,-19.7247257232666,49.628490447998 ,0.250612646341324,-19.1858215332031,50.315013885498,0.205716267228127,-17.4128494262695,53.1083679199219,1.88863396644592 ,-17.6651172637939,51.6837005615234,-0.421823114156723,-17.3898468017578,51.0755653381348,-0.691629111766815,-8.74059391021729 ,58.7906532287598,-3.90513944625854,-3.631098985672,59.8498306274414,1.73694729804993,-3.33879423141479,60.3737182617188 ,1.17213428020477,-3.50298547744751,60.2044410705566,1.69284284114838,-0.836800396442413,62.0290718078613,-3.44790577888489 ,-2.63942551612854,59.934383392334,2.14702224731445,-3.34576869010925,61.2543296813965,-0.264682769775391,-0.774065554141998 ,59.8994979858398,2.45401930809021,-2.98916459083557,60.147777557373,1.79330563545227,-10.2027149200439,53.1423873901367 ,1.3846652507782,-10.5530920028687,53.7772369384766,2.34635376930237,-11.2281942367554,54.6697654724121,2.78025221824646 ,-11.9775266647339,55.267162322998,2.30929613113403,-6.1092848777771,44.5726852416992,2.80859422683716,-6.12484836578369 ,46.5345611572266,2.53054237365723,-6.09523248672485,47.9618530273438,2.03063750267029,-6.58994388580322,50.2920265197754 ,0.863238930702209,-6.74691867828369,52.2777366638184,0.972675979137421,-6.81625986099243,53.5835075378418,1.24111199378967 ,-5.93246269226074,53.3926849365234,3.18568468093872,-6.16047334671021,51.7383117675781,3.05703854560852,-5.93553829193115 ,49.6501426696777,2.96717262268066,-4.85589504241943,45.5259628295898,-0.946087539196014,-3.58722996711731,45.8115081787109 ,-1.97504353523254,-2.34073543548584,46.1230392456055,-2.12600135803223,-0.0774050205945969,46.1967735290527,-2.60712957382202 ,5.56892108917236,43.7037506103516,3.96434211730957,4.48863840103149,56.9230079650879,-5.69664287567139,3.43093514442444 ,57.0666656494141,-5.43046188354492,3.40443229675293,58.473014831543,-5.48987340927124,4.66533231735229,58.3694610595703 ,-5.16612005233765,2.36688876152039,49.2839813232422,5.31314182281494,3.19219017028809,46.8397331237793,5.11824417114258 ,4.16545295715332,46.8440971374512,5.14115619659424,4.33468341827393,48.3736190795898,4.74083375930786,0.508937060832977 ,46.9681167602539,5.79316377639771,0.502217352390289,49.8629951477051,5.73104858398438,5.70313215255737,45.5682716369629 ,-0.127191007137299,6.14905118942261,45.2268676757813,0.909955978393555,5.83846712112427,44.3852729797363,1.56467497348785 ,5.37825775146484,46.895393371582,-1.29640114307404,4.25761890411377,44.1189155578613,-0.763117015361786,7.27880954742432 ,50.8724212646484,-0.798126339912415,6.68353366851807,49.3247604370117,-1.0536345243454,6.16005086898804,49.5483131408691 ,-1.94401621818542,6.86691427230835,51.265064239502,-2.45111012458801,4.96109008789063,46.449836730957,4.62802600860596 ,5.02808284759521,47.667839050293,4.1308741569519,5.53708267211914,49.6380195617676,4.03002834320068,4.46608209609985 ,49.9669990539551,4.83955383300781,5.94960832595825,47.0691604614258,0.362407803535461,6.48950576782227,49.0330696105957 ,-0.268296957015991,6.3097038269043,48.253059387207,1.12767565250397,6.20942878723145,46.6569290161133,1.74234902858734 ,5.76492261886597,49.9179992675781,-2.65865802764893,6.17157793045044,51.7974472045898,-3.6365602016449,4.89619207382202 ,50.3520011901855,-3.80600094795227,2.45370006561279,50.8995170593262,-4.16592597961426,2.78574156761169,52.2776679992676 ,-4.72317218780518,5.22372245788574,52.0617218017578,-4.64406442642212,5.75057411193848,44.0617218017578,3.85488200187683 ,6.00133609771729,46.3558654785156,3.68154311180115,6.32964134216309,44.886531829834,2.16583490371704,5.0522313117981 ,59.3761291503906,0.142580911517143,5.63601207733154,59.9394836425781,-0.0290815383195877,5.05815505981445,59.9468002319336 ,0.339870452880859,5.20350742340088,58.9473190307617,1.15062999725342,6.21389818191528,58.8186149597168,0.991709470748901 ,5.55427598953247,60.0190963745117,-0.648190140724182,4.85060977935791,60.0962257385254,-0.205008938908577,6.28012418746948 ,61.3125953674316,-3.25320029258728,5.01990127563477,62.0096130371094,-3.58053207397461,5.4082088470459,62.0561714172363 ,-2.34191989898682,6.61399984359741,61.3304023742676,-2.17510962486267,3.59240055084229,62.8030700683594,-2.31959319114685 ,3.24620890617371,62.7719917297363,-3.06752300262451,3.27989220619202,58.4411926269531,3.45477151870728,2.94624018669128 ,55.8268890380859,5.22996759414673,4.4201488494873,55.4504318237305,4.97116231918335,5.11019134521484,58.0659942626953 ,3.06510710716248,4.59976577758789,60.4346237182617,-4.53228282928467,3.71103858947754,60.432430267334,-4.82212781906128 ,4.24048233032227,47.8875045776367,-2.74390602111816,2.2951455116272,48.7120323181152,-3.25419235229492,1.602987408638 ,57.3326644897461,-5.33708143234253,1.54593241214752,55.7688674926758,-5.29807567596436,1.80850923061371,58.7227096557617 ,-5.10714054107666,1.35066735744476,58.688549041748,3.52788400650024,1.20924663543701,56.2557487487793,5.11581087112427 ,2.70396065711975,60.468376159668,-4.69074726104736,0.87622195482254,49.2063636779785,-3.42336797714233,1.4183566570282 ,51.2010498046875,-4.23545169830322,3.29036021232605,59.3768653869629,2.29175066947937,5.26882553100586,58.8095779418945 ,2.18090462684631,1.35060226917267,54.3036766052246,-4.98019742965698,0.850216865539551,52.9374542236328,5.52145624160767 ,1.05006265640259,53.6734428405762,5.41406202316284,5.81344699859619,47.5758666992188,3.06518483161926,6.34982872009277 ,49.6443710327148,1.84685409069061,6.69955635070801,57.5995979309082,2.40108251571655,6.91256666183472,58.0321769714355 ,1.95568668842316,5.89234447479248,55.3229560852051,4.32070875167847,4.9299464225769,60.7205200195313,-0.881977498531342 ,5.80054426193237,60.4475479125977,-0.953298270702362,6.42415618896484,61.0218505859375,-1.17068159580231,5.42477989196777 ,61.6343116760254,-1.49424481391907,1.71520781517029,52.2933311462402,-4.67891263961792,3.61277961730957,55.2839317321777 ,-5.49603891372681,6.60325908660889,60.111686706543,-0.314645409584045,6.30694484710693,60.1349029541016,-0.980097889900208 ,6.87847661972046,60.386791229248,-1.18192577362061,6.22908735275269,59.5699081420898,0.323896825313568,7.30415058135986 ,59.9312591552734,0.435530573129654,7.05011034011841,58.1080017089844,1.25672173500061,7.22903156280518,58.2620811462402 ,1.2861168384552,6.80232667922974,58.9085731506348,0.908758163452148,8.05034351348877,59.3046455383301,1.03538930416107 ,8.31608581542969,58.6432113647461,1.17352378368378,8.15271186828613,60.8203582763672,-1.46462738513947,7.55289936065674 ,60.6605415344238,-1.94998788833618,7.96316814422607,60.3256072998047,-0.0219536330550909,7.12460422515869,60.7955284118652 ,-1.8724068403244,7.26642370223999,60.4079856872559,-0.402079552412033,6.96106004714966,54.9798698425293,2.91225099563599 ,7.3847861289978,57.1020774841309,1.53105282783508,6.33556509017944,53.1691551208496,2.24800658226013,6.38739442825317 ,51.7313346862793,1.9785293340683,6.99435949325562,52.3350715637207,-0.392119348049164,7.24284791946411,53.2762145996094 ,-0.646061599254608,1.09672713279724,54.6509094238281,5.66392612457275,3.91681504249573,54.1869354248047,5.21350336074829 ,3.56772255897522,53.3176498413086,4.87186765670776,4.99570178985596,53.2408180236816,4.15648555755615,5.41516971588135 ,54.0682334899902,4.48723363876343,2.40486001968384,53.4610290527344,5.10914897918701,2.67556929588318,54.3597373962402 ,5.49190044403076,6.34653997421265,53.9616470336914,3.4741063117981,6.76198863983154,54.0528297424316,2.51639223098755 ,7.25544500350952,54.9252510070801,1.87526834011078,6.03137254714966,51.6402435302734,3.89728951454163,2.19503688812256 ,52.4480400085449,5.4863452911377,6.55881500244141,54.1315307617188,1.74270081520081,6.97313547134399,54.627758026123 ,1.31097435951233,5.82921028137207,53.250675201416,3.49645662307739,5.00494384765625,51.803596496582,4.69906425476074 ,3.32392287254334,52.107292175293,5.27886629104614,2.70612764358521,50.6459274291992,5.35879135131836,8.95623588562012 ,59.8676338195801,0.398345559835434,9.21463108062744,60.5177345275879,-1.11962747573853,0.429187029600143,44.5688095092773 ,5.94135522842407,3.39157700538635,43.7743873596191,5.51495599746704,6.48670291900635,60.4013862609863,-4.08903360366821 ,6.13385438919067,60.3698768615723,-3.99188446998596,6.88159799575806,60.9103698730469,-2.81267642974854,7.23734951019287 ,60.6882858276367,-3.04816651344299,3.2792387008667,54.0415382385254,-5.19849443435669,7.69188165664673,60.8041801452637 ,-3.01215386390686,3.81181836128235,62.3832054138184,-1.41991281509399,7.63446426391602,60.5070648193359,-4.00190258026123 ,7.02769565582275,59.5692939758301,-4.86050128936768,5.98615837097168,59.3464622497559,-4.88793516159058,4.43807315826416 ,59.2152633666992,-5.17468309402466,7.48376131057739,53.6780166625977,-3.37918519973755,6.3647928237915,54.0280265808105 ,-4.5154709815979,7.6963939666748,53.3148078918457,-1.19267594814301,4.89050340652466,47.2557334899902,-1.76517140865326 ,2.20206737518311,44.176586151123,-2.11065602302551,5.20034837722778,54.7842864990234,-5.57468938827515,5.18321180343628 ,53.9617309570313,-5.2604660987854,7.08188724517822,56.3239288330078,-5.25308752059937,7.30654048919678,54.5502128601074 ,-4.35706996917725,6.73623943328857,54.8074378967285,-5.11946773529053,6.52136135101318,56.7480926513672,-5.08606290817261 ,0.548441827297211,51.1162757873535,5.59805917739868,6.73783445358276,50.6204032897949,-0.270794987678528,7.66648387908936 ,53.5671539306641,-1.28985047340393,7.40937566757202,53.744556427002,-0.876519441604614,6.90980339050293,54.2402229309082 ,0.442960977554321,7.72015905380249,57.7975692749023,1.40894997119904,7.5026683807373,57.5535583496094,1.41864967346191 ,9.26576328277588,60.6478004455566,-2.75207567214966,7.11589050292969,57.489013671875,-5.33865261077881,6.54909181594849 ,58.3688354492188,-5.29395627975464,7.30115747451782,58.3183250427246,-5.20100736618042,3.58825278282166,44.1539001464844 ,-1.20879817008972,0.478152990341187,43.5242080688477,5.80299520492554,8.5999231338501,60.3367500305176,-3.81362628936768 ,7.92004871368408,59.3618507385254,-4.69769620895386,7.58691596984863,54.1857376098633,-3.51837372779846,7.62936019897461 ,54.9134559631348,-3.71389770507813,7.84505176544189,54.5696830749512,-3.6901912689209,7.6837592124939,54.8446426391602 ,-4.42535209655762,7.68500471115112,55.2548599243164,-4.36773157119751,7.85799980163574,53.9139366149902,-1.27666687965393 ,7.55024337768555,54.6720161437988,-2.64854741096497,7.51451921463013,54.1958045959473,-1.45155954360962,7.09713840484619 ,55.3094367980957,0.930883824825287,7.52256345748901,56.1265335083008,1.25037324428558,7.63995981216431,55.4534378051758 ,1.48735105991364,7.42369079589844,54.8798332214355,1.05067873001099,7.22643661499023,54.4748229980469,-0.209205031394959 ,7.36536359786987,54.1761131286621,-0.0283166989684105,7.55160713195801,54.0616989135742,-0.807652056217194,7.26050710678101 ,54.3323860168457,-1.03370535373688,7.84417057037354,56.9216651916504,1.50173914432526,7.91579103469849,57.1935577392578 ,1.46395790576935,9.0794734954834,58.5038986206055,1.08123564720154,9.6045093536377,59.3718109130859,0.532063603401184 ,9.45469379425049,59.7166938781738,0.652444005012512,8.81791400909424,58.6277008056641,1.40934801101685,7.93373203277588 ,57.0942649841309,1.26238405704498,8.18951320648193,57.4128837585449,1.25242710113525,8.03991603851318,57.4667205810547 ,1.44550204277039,9.84859180450439,60.0270957946777,-0.901974380016327,9.72230529785156,60.4120292663574,-0.907228112220764 ,7.11321926116943,54.9401054382324,0.416695415973663,7.46061944961548,56.4794769287109,-5.38321113586426,7.07095384597778 ,56.8105850219727,-5.30281114578247,7.44288110733032,56.8303985595703,-5.44225835800171,7.83499431610107,56.8037376403809 ,1.31190943717957,7.75429630279541,56.2459411621094,1.5331916809082,9.8271369934082,60.3333282470703,-2.51816701889038 ,9.66667366027832,60.7007904052734,-2.59547328948975,9.28712558746338,60.169864654541,-3.73113465309143,9.07193183898926 ,60.4436950683594,-3.90585684776306,7.52197933197021,57.4596366882324,-5.56169700622559,7.78535032272339,58.3495597839355 ,-5.40928411483765,8.55235385894775,59.238410949707,-4.61119842529297,8.28533267974854,59.4034004211426,-4.85664129257202 ,8.03475379943848,58.2761001586914,-5.13257741928101,7.84158325195313,57.5565795898438,-5.27125883102417,7.61331510543823 ,56.6373863220215,-5.00607490539551,7.65373134613037,56.9084320068359,-5.08063411712646,5.80713796615601,43.9371109008789 ,1.50510704517365,7.3530068397522,55.691593170166,-2.29376339912415,8.03426742553711,56.1774253845215,-3.71008014678955 ,8.29852867126465,57.0403785705566,-4.66321849822998,7.24841451644897,56.5388069152832,-0.523982167243958,7.28487110137939 ,56.0086479187012,0.525032520294189,7.17531681060791,54.8657188415527,-1.1021511554718,7.25835037231445,54.8035736083984 ,-0.32792392373085,8.51945972442627,56.7277908325195,0.659157574176788,8.87804126739502,56.7104835510254,0.821199893951416 ,9.55239772796631,57.593677520752,1.09148192405701,10.2546634674072,56.7690773010254,0.844668745994568,10.179328918457 ,58.933349609375,0.649220526218414,10.5340662002563,59.5311012268066,-0.683946847915649,9.42648220062256,56.3423805236816 ,0.382613807916641,10.9501304626465,55.9625473022461,0.205978751182556,7.95104789733887,56.6816635131836,0.796007633209229 ,8.44216823577881,54.4834175109863,-1.36270153522491,7.08089637756348,56.0021209716797,-1.23660385608673,7.17018461227417 ,55.9088592529297,-1.5865033864975,8.29757881164551,54.4494361877441,-1.74737429618835,8.76838493347168,55.1770248413086 ,0.562280178070068,9.76492881774902,55.9499664306641,0.769929647445679,8.15985107421875,56.3417167663574,0.103748373687267 ,8.7318811416626,56.3046493530273,-4.64982652664185,8.0565242767334,55.6012763977051,-3.69083595275879,8.36456489562988 ,54.4798698425293,0.0324799977242947,9.45730209350586,55.2612190246582,-4.87259960174561,8.68892574310303,54.3544425964355 ,-3.84225082397461,8.45584487915039,54.4519424438477,-2.33978295326233,7.58108425140381,54.6267395019531,-1.56997954845428 ,10.803614616394,57.9473037719727,0.557450473308563,11.1893653869629,58.5272026062012,-0.730563282966614,11.3919620513916 ,56.9577827453613,0.353395909070969,11.2849111557007,58.487174987793,-3.05534601211548,10.6853227615356,59.2101516723633 ,-3.341463804245,11.0728950500488,59.0761032104492,-2.14175462722778,11.6487598419189,58.0217895507813,-1.82899582386017 ,10.1849002838135,60.1414604187012,-2.45615744590759,10.5328998565674,58.2507591247559,-3.75378155708313,9.85113716125488 ,58.6626205444336,-4.17732286453247,8.92834758758545,59.1785507202148,-4.57636260986328,9.48854160308838,60.0228309631348 ,-3.71386504173279,9.38311672210693,57.8990173339844,-4.64321899414063,9.73202896118164,57.411376953125,-4.57831954956055 ,8.3504810333252,57.673942565918,-5.06515073776245,11.753791809082,57.5105323791504,-0.819628119468689,13.5520429611206 ,50.6597862243652,-3.62653398513794,14.8387975692749,49.4975662231445,-3.12753367424011,14.3257875442505,49.6796455383301 ,-2.76960182189941,13.0302572250366,50.5948715209961,-2.32351136207581,11.7298135757446,51.3138999938965,-1.85474872589111 ,10.1291513442993,52.8051300048828,-1.33680272102356,10.0141677856445,52.6653289794922,-1.71004021167755,11.653247833252 ,51.2362632751465,-2.18375134468079,13.6517715454102,50.8126182556152,0.0197342503815889,12.7338953018188,51.3184585571289 ,0.80093240737915,12.4508266448975,50.7762031555176,-0.522256553173065,13.5613031387329,50.4516372680664,-0.696429312229156 ,11.3147611618042,51.5529403686523,-0.387636542320251,11.6386957168579,52.1857452392578,0.926828563213348,9.98794555664063 ,53.9091873168945,0.881002962589264,14.0697689056396,51.4840431213379,0.575597643852234,13.4233169555664,52.122631072998 ,1.29878723621368,14.883472442627,51.6699066162109,0.104338467121124,14.3454475402832,51.9897499084473,0.195351988077164 ,14.5005655288696,51.2399139404297,0.178431913256645,14.8733034133911,50.7667045593262,0.185657918453217,14.8942441940308 ,52.1328659057617,0.0421440452337265,14.2605962753296,52.5496520996094,0.197932198643684,14.5038642883301,51.3617706298828 ,-4.07377243041992,15.737006187439,50.1784324645996,-3.56298232078552,15.3349475860596,50.0099906921387,-3.57508039474487 ,14.0185060501099,50.9000205993652,-4.1680588722229,16.6143341064453,49.0891990661621,-2.94213104248047,15.6112413406372 ,48.932746887207,-2.79887890815735,15.3581924438477,48.9271278381348,-2.22846102714539,14.2779426574707,50.1965675354004 ,-0.176210388541222,15.2065629959106,49.5023574829102,-0.178400054574013,18.8974895477295,50.898624420166,-0.478858798742294 ,18.1767578125,51.4938545227051,-0.980138778686523,17.8693199157715,51.8677978515625,-0.356124639511108,18.3772220611572 ,50.9069023132324,0.814730048179626,15.2123289108276,48.9255409240723,-1.90760374069214,15.7901344299316,47.974178314209 ,-1.51748132705688,15.6763391494751,48.4058074951172,-0.455212146043777,14.7757940292358,49.2104644775391,-1.00625038146973 ,16.6845760345459,50.6124000549316,1.07724034786224,15.471227645874,49.734935760498,0.572513163089752,17.8297843933105 ,50.6904792785645,0.679857194423676,17.0080585479736,52.2174072265625,0.0537054538726807,15.982780456543,51.9721145629883 ,0.524463653564453,19.9009113311768,49.6782341003418,0.529042065143585,19.0464401245117,49.4485168457031,1.63235700130463 ,19.8845977783203,47.4652900695801,2.17451047897339,18.2908992767334,48.4863052368164,2.13154292106628,19.1496639251709 ,46.7251663208008,2.3065185546875,20.3633670806885,48.2683410644531,1.22568118572235,20.227331161499,49.1841583251953 ,-0.843863546848297,21.2155895233154,48.3137245178223,-0.224301800131798,21.1416397094727,48.1011810302734,-1.18668389320374 ,19.9603595733643,49.1679573059082,-1.56102073192596,20.4522113800049,47.2690353393555,1.70770359039307,20.674388885498 ,47.2088775634766,1.5593044757843,20.6281108856201,48.3302116394043,0.792369723320007,21.6778507232666,47.1973571777344 ,0.721642732620239,21.0242614746094,48.3415603637695,0.267527908086777,20.9462394714355,48.3692169189453,0.526706457138062 ,21.4729061126709,47.2075042724609,1.10189342498779,21.5099945068359,46.11474609375,-1.94946956634521,20.4426021575928 ,47.4525527954102,-2.20505023002625,20.9361572265625,47.7230949401855,-1.9036910533905,22.1175422668457,46.4725112915039 ,-1.48421800136566,19.5445919036865,44.3666687011719,0.688282608985901,19.5302467346191,44.692985534668,1.52009499073029 ,17.8531379699707,46.0471343994141,1.05797076225281,17.7322750091553,45.8862266540527,0.195022255182266,20.5843486785889 ,45.6073188781738,2.28768253326416,20.9611434936523,45.4621658325195,2.34939908981323,22.9492454528809,44.9821395874023 ,1.39771020412445,22.6773262023926,44.8726272583008,1.98021054267883,22.6979026794434,44.490119934082,-1.13779997825623 ,23.2042541503906,44.9444885253906,-0.658016979694366,19.9612426757813,44.5874671936035,-1.609126329422,20.6078147888184 ,45.28662109375,-2.0672402381897,21.3356609344482,44.4521217346191,-1.30426454544067,21.6464214324951,43.5439834594727 ,-0.783927083015442,19.5299625396729,44.2604904174805,-0.854487121105194,20.8051986694336,43.4793281555176,-0.203381508588791 ,20.7594833374023,43.5421180725098,0.38550791144371,19.4293518066406,44.3882141113281,-0.0389625653624535,20.6675872802734 ,43.4807777404785,1.03413915634155,20.6311225891113,43.5597991943359,1.6413449048996,21.0593681335449,44.0559005737305 ,2.13398694992065,20.1234664916992,45.3325843811035,2.12659621238709,23.3103694915771,42.2877006530762,3.15818119049072 ,23.8232288360596,42.6492958068848,3.02135586738586,22.3560600280762,44.6905479431152,2.43583106994629,21.6826972961426 ,44.3796463012695,2.56239581108093,23.9890842437744,42.8250274658203,2.72608661651611,24.3131427764893,43.0077095031738 ,2.03234481811523,24.4801712036133,42.9811019897461,0.232601284980774,24.1847267150879,42.6429634094238,-0.0108417542651296 ,22.0007915496826,43.8926124572754,-0.990081965923309,23.3663368225098,42.3684387207031,-0.0917138755321503,22.9723930358887 ,42.1976127624512,-0.0821428894996643,22.3297519683838,42.1772079467773,0.570432305335999,22.2577972412109,42.2479438781738 ,1.11369383335114,22.3680763244629,42.0717086791992,2.5445351600647,22.6504745483398,42.0502853393555,2.88002109527588 ,21.2856063842773,44.1733818054199,2.28947234153748,19.8208160400391,48.7657203674316,-2.06408476829529,19.4979515075684 ,48.5461578369141,-2.30182480812073,18.0380630493164,46.2183685302734,-2.37314629554749,19.1660690307617,46.720775604248 ,-2.66062784194946,16.7683372497559,47.6135559082031,-2.52141618728638,18.2744197845459,47.821891784668,-2.88349103927612 ,23.1817455291748,42.2414321899414,3.10395359992981,23.5672283172607,41.5250053405762,3.27665758132935,23.7341976165771 ,41.6387405395508,3.36136937141418,24.3066692352295,41.2696952819824,0.388287603855133,24.0551853179932,41.0985374450684 ,0.514059066772461,23.5084838867188,40.8745460510254,1.19112884998322,23.3923263549805,40.9361343383789,1.66240167617798 ,23.0847988128662,41.0231781005859,2.68329548835754,23.1890926361084,41.2674446105957,3.08469200134277,24.8623371124268 ,42.1539611816406,2.3654510974884,24.3057193756104,41.9787712097168,3.14068388938904,24.0696849822998,41.8692207336426 ,3.21461319923401,10.7589426040649,52.0450668334961,-3.98465609550476,12.4153480529785,51.3634567260742,-3.81533980369568 ,11.8754205703735,51.4325981140137,-2.54589605331421,10.2960405349731,52.7441749572754,-2.20458698272705,15.9318618774414 ,47.9740142822266,-2.05650401115417,16.1347522735596,47.9769058227539,-2.82994937896729,16.5880832672119,47.4521827697754 ,-1.92803871631622,17.7106666564941,45.9340896606445,-1.63855528831482,23.7912216186523,40.9780197143555,0.784069895744324 ,22.7547168731689,42.299747467041,0.201494812965393,13.0838747024536,53.3122024536133,0.741282343864441,12.3147010803223 ,53.0580444335938,1.34236586093903,13.695728302002,52.3916130065918,0.622015416622162,10.765793800354,54.8451499938965 ,1.13273775577545,11.7384357452393,52.7919425964355,-5.03997898101807,12.9520015716553,51.7299842834473,-4.41759347915649 ,17.6725082397461,48.8319664001465,-3.19804859161377,17.9552898406982,48.3816871643066,-2.98082900047302,16.5986347198486 ,49.4662818908691,-3.20961785316467,12.8604173660278,52.8880577087402,-4.46232604980469,12.285062789917,56.0400619506836 ,-1.09787619113922,12.2836780548096,55.786750793457,-0.657949447631836,13.1637325286865,54.8574714660645,-0.593619048595428 ,13.5549449920654,54.6908378601074,-0.878011286258698,14.9113826751709,53.4512100219727,-0.874684035778046,14.9332523345947 ,52.9047508239746,-0.505171656608582,13.9861345291138,49.8578948974609,-1.92976760864258,16.4741477966309,47.3813934326172 ,-0.750219583511353,16.3961734771729,47.5242347717285,-1.21755838394165,16.3241100311279,47.3382835388184,-0.29325008392334 ,17.6349182128906,46.0498580932617,-0.756506145000458,10.711404800415,56.3316230773926,-5.2165961265564,11.6953134536743 ,57.2661972045898,-4.08915567398071,12.385479927063,56.5232162475586,-4.31653118133545,11.6108388900757,55.5096321105957 ,-5.22905683517456,13.9158315658569,54.9912452697754,-3.89582562446594,13.9274816513062,53.9880409240723,-3.60703206062317 ,12.9425249099731,53.9209365844727,-4.30237054824829,12.3398990631104,54.6189117431641,-4.90633010864258,15.2897844314575 ,53.4183158874512,-3.03394627571106,15.2687854766846,52.6660461425781,-3.28293323516846,18.1716041564941,49.6376266479492 ,-2.92257332801819,18.360689163208,49.327465057373,-2.69066572189331,18.3403129577637,48.6247024536133,-2.75979685783386 ,14.9622840881348,52.0302391052246,-4.03225135803223,16.8739185333252,51.6703147888184,-2.71794319152832,16.6322479248047 ,51.207103729248,-3.02567052841187,14.4114046096802,55.0481872558594,-2.51585531234741,15.3617715835571,53.7503852844238 ,-1.84661114215851,22.0626430511475,47.1380500793457,0.312653362751007,23.082405090332,45.2025375366211,1.05454277992249 ,23.2344989776611,45.1784515380859,0.212265536189079,22.2545776367188,46.898063659668,-0.650525093078613,24.5121994018555 ,43.0798530578613,1.89935684204102,24.700626373291,43.029182434082,1.0951064825058,22.3342418670654,44.1472129821777 ,-0.985363841056824,23.7739334106445,42.4582595825195,0.0253795459866524,25.094820022583,42.0181274414063,0.63675594329834 ,24.8828163146973,41.7729644775391,0.360459506511688,18.3888912200928,48.079345703125,-2.7398579120636,19.6137313842773 ,46.7993927001953,-2.47372817993164,11.6554641723633,55.3646430969238,0.613879203796387,10.4787845611572,54.0332679748535 ,-5.02370643615723,9.56866645812988,53.1961708068848,-3.99867963790894,9.47764873504639,53.225643157959,0.15219347178936 ,9.63113117218018,53.2664108276367,-2.20873069763184,9.56535720825195,53.3620910644531,-1.31098282337189,9.49947357177734 ,53.1097564697266,-1.66624176502228,11.5917978286743,57.9705467224121,-2.84412407875061,11.9037704467773,57.2813911437988 ,-1.64989614486694,10.819263458252,57.9833908081055,-3.71461486816406,12.0918092727661,55.9841041564941,-0.678950130939484 ,11.7332038879395,55.7060317993164,-0.00828365050256252,11.9036540985107,55.4671478271484,-0.00489721540361643,11.692066192627 ,56.0705604553223,0.0792707055807114,12.0020923614502,56.5346641540527,-0.646912157535553,12.0133199691772,56.3076477050781 ,-1.27933478355408,12.1341848373413,57.7180938720703,-3.07127356529236,12.8935451507568,56.995174407959,-3.0251157283783 ,11.9166917800903,57.0560073852539,-1.75054311752319,12.5898990631104,56.586841583252,-1.55191695690155,13.8073215484619 ,54.9048728942871,-1.21922385692596,13.5632257461548,53.557258605957,0.536115407943726,16.1892242431641,50.5962142944336 ,-3.3828821182251,12.4069385528564,54.8388900756836,-0.0730054900050163,16.3304214477539,52.7708168029785,-0.389918386936188 ,15.5185346603394,52.4953842163086,0.102539211511612,16.9141445159912,52.4776306152344,-1.37935245037079,18.3628005981445 ,50.3478164672852,-2.12511992454529,19.1434917449951,50.0413246154785,-1.63698732852936,19.0610008239746,49.695125579834 ,-1.77505218982697,18.2138481140137,49.9208297729492,-2.24553346633911,16.8566780090332,47.8757438659668,1.42759299278259 ,18.0488719940186,48.6800994873047,2.13007593154907,16.5044593811035,47.3519020080566,0.528880298137665,12.9402542114258 ,50.571460723877,-1.74043500423431,22.1152286529541,41.9466590881348,2.25192022323608,20.4308776855469,49.204704284668 ,-0.211134687066078,22.0665168762207,46.7259864807129,-0.941627204418182,21.0119819641113,47.8783187866211,-1.3603481054306 ,23.1058826446533,44.9971618652344,-0.0795651748776436,24.6004333496094,42.9618148803711,0.871560215950012,25.3450222015381 ,42.1090126037598,1.43619477748871,25.2234687805176,42.0636825561523,1.21761846542358,19.0784664154053,48.2057571411133 ,-2.72225308418274,19.8962860107422,47.0656585693359,-2.43542766571045,20.9766960144043,45.5458106994629,-1.92559599876404 ,24.6982593536377,40.952953338623,0.358907043933868,24.1927070617676,40.5977745056152,0.382595211267471,25.3028049468994 ,39.9894943237305,0.288388758897781,24.8059501647949,39.6957168579102,0.346591711044312,25.1876049041748,41.3445816040039 ,0.634206295013428,25.3709888458252,41.4191017150879,0.950496912002563,25.8578147888184,40.4478416442871,0.830263614654541 ,25.7993278503418,40.3204307556152,0.513917446136475,25.7801952362061,38.3923225402832,0.405306428670883,26.1005973815918 ,38.6033821105957,0.414937376976013,25.4721603393555,38.2417297363281,0.933774352073669,26.3225708007813,37.9900283813477 ,0.540673732757568,26.0681343078613,37.7213554382324,1.00822830200195,26.9082546234131,38.2915687561035,0.749213039875031 ,26.5941677093506,38.8570823669434,0.646034121513367,24.4965305328369,39.4820251464844,0.818610429763794,26.4576644897461 ,37.7728614807129,0.577100872993469,27.0060615539551,38.1100616455078,0.721827626228333,26.7886180877686,37.0538597106934 ,0.865942239761353,26.3225383758545,37.6534957885742,1.00922620296478,26.8767929077148,37.1728324890137,0.468527495861053 ,27.3362140655518,37.5333251953125,0.568650424480438,26.9089126586914,36.9463882446289,0.83524751663208,27.2755012512207 ,36.5016174316406,0.330541372299194,27.1422691345215,36.4382171630859,0.698461651802063,27.4169120788574,37.3746147155762 ,0.559433698654175,27.6172657012939,36.7529067993164,0.433391004800797,27.6500587463379,35.8810615539551,0.272548139095306 ,27.4733486175537,35.7689361572266,0.551467180252075,27.1704921722412,36.2463798522949,0.662050426006317,27.6621761322021 ,36.5758056640625,0.369325369596481,27.8887329101563,36.0022964477539,0.326096922159195,27.7101459503174,35.7865028381348 ,0.795266091823578,27.417350769043,36.4184913635254,1.01918590068817,27.7454051971436,36.5266799926758,0.829174995422363 ,27.9386329650879,35.9596900939941,0.679637730121613,27.4934635162354,37.3412284851074,0.980259478092194,27.0495414733887 ,37.0782127380371,1.16021084785461,27.7116069793701,36.7087478637695,0.851239860057831,26.650333404541,37.6419792175293 ,1.37471866607666,27.4007320404053,37.5071411132813,1.03993594646454,27.0318088531494,38.0435752868652,1.17184197902679 ,26.4400997161865,37.4421005249023,2.04593300819397,26.6612987518311,37.5791244506836,1.56387555599213,27.5257396697998 ,36.7985382080078,1.59476542472839,27.252779006958,36.6252250671387,2.00045323371887,27.1135292053223,38.1128196716309 ,1.73599755764008,27.8796730041504,37.1851119995117,1.79905617237091,27.3627796173096,36.5155220031738,2.01364994049072 ,27.9746055603027,35.7752990722656,1.58363437652588,27.7661838531494,35.6817970275879,1.94547843933105,28.3251419067383 ,36.1039810180664,1.7449312210083,27.9955158233643,36.9921951293945,1.80444490909576,28.4029026031494,34.9839820861816 ,1.58109271526337,28.1856861114502,34.848575592041,1.88748633861542,27.7915382385254,35.4960746765137,1.9382655620575 ,28.4168186187744,35.9179153442383,1.75137233734131,28.6992263793945,35.1313018798828,1.7256453037262,28.3781414031982 ,34.8804969787598,2.25901389122009,27.9310855865479,35.6697311401367,2.39866852760315,28.6852798461914,35.0521774291992 ,2.21204161643982,28.3788299560547,35.8418731689453,2.34064173698425,28.2824611663818,36.0258941650391,2.37827920913696 ,27.9731998443604,36.9341583251953,2.44280982017517,27.471607208252,36.6702003479004,2.49169683456421,26.5937404632568 ,37.5661163330078,2.55073118209839,27.8806591033936,37.1366653442383,2.46509552001953,27.0677833557129,38.1636085510254 ,2.43924880027771,26.1258983612061,37.3881416320801,3.04604911804199,26.5572929382324,37.5719413757324,2.62185740470886 ,27.3054351806641,36.6506423950195,2.89670968055725,26.9249095916748,36.5646018981934,3.28057646751404,26.9879112243652 ,38.1367683410645,2.92280745506287,27.6747379302979,37.1117057800293,3.17924690246582,27.7615966796875,36.9150314331055 ,3.23563146591187,28.2383708953857,35.9730453491211,3.32715606689453,27.871862411499,35.6653060913086,3.07638382911682 ,27.5263328552246,35.4128036499023,3.39707732200623,28.3017101287842,34.8627967834473,3.21868848800659,27.9842147827148 ,34.7188110351563,3.48127365112305,28.3142108917236,35.7948036193848,3.34757208824158,28.5679912567139,34.9831886291504 ,3.40694642066956,28.1073131561279,34.7972373962402,3.87777209281921,27.6106281280518,35.5863075256348,3.86808156967163 ,28.4313812255859,34.9209785461426,3.87717008590698,28.1370372772217,35.7406539916992,3.9042637348175,27.0665016174316 ,36.4050979614258,3.31043982505798,27.510648727417,35.5919876098633,3.40624260902405,27.0221843719482,36.6047554016113 ,3.79309582710266,27.5394611358643,36.8876075744629,3.83840227127075,28.0492992401123,35.9131050109863,3.90735578536987 ,26.6743221282959,38.1594886779785,3.67190909385681,26.1993770599365,37.6065101623535,3.60492968559265,27.4188442230225 ,37.0833053588867,3.8506007194519,26.3732204437256,38.1710357666016,3.81811428070068,26.1211948394775,37.6256675720215 ,3.729327917099,26.3689670562744,38.1229438781738,4.14238786697388,26.0806045532227,37.6261596679688,3.831378698349 ,25.6204929351807,37.5335235595703,4.13789939880371,26.5901908874512,36.8493919372559,4.29961729049683,26.0924530029297 ,36.7544097900391,4.50640773773193,26.8835201263428,37.3182640075684,4.58951425552368,26.2052230834961,36.6018562316895 ,4.58425235748291,27.0373764038086,36.1325798034668,4.5937819480896,26.5271606445313,36.0083427429199,4.82670307159424 ,27.3855781555176,35.2786750793457,4.88182163238525,27.0250186920166,35.1469802856445,5.07152080535889,26.6071300506592 ,35.8096046447754,4.84630966186523,27.3304958343506,36.2740478515625,4.92522811889648,27.5788135528564,35.4574508666992 ,5.12497615814209,27.0628986358643,35.2529602050781,5.45621109008789,26.5958919525146,36.0889739990234,5.29514455795288 ,27.0041675567627,36.2450065612793,5.42881679534912,27.3649311065674,35.4346160888672,5.50301694869995,26.1548156738281 ,36.876579284668,5.06085157394409,25.5146293640137,37.8111763000488,4.68628072738647,26.5431079864502,37.3230209350586 ,5.13250923156738,25.9985046386719,38.1869125366211,4.74417495727539,25.8601264953613,38.4725189208984,4.65872764587402 ,25.379301071167,38.041332244873,4.60675239562988,24.8795471191406,38.6019477844238,4.33086013793945,24.8324947357178 ,38.3304977416992,4.05487537384033,25.2847557067871,37.7632865905762,4.32127714157104,24.2327289581299,39.4822654724121 ,4.69844198226929,24.5814819335938,39.0382881164551,4.36362171173096,24.5726547241211,39.3343391418457,4.62598991394043 ,24.3039608001709,39.6546897888184,4.67785024642944,24.988748550415,38.6693725585938,4.54520559310913,23.3804588317871 ,38.7108688354492,4.23522806167603,24.0566806793213,38.8694267272949,4.58743762969971,23.7426376342773,38.347526550293 ,5.05098819732666,23.1989231109619,38.1966209411621,4.90307235717773,23.9056186676025,38.6819915771484,5.32080602645874 ,23.1362209320068,37.7694129943848,5.23940420150757,23.7630577087402,38.2689514160156,5.09673023223877,23.7901935577393 ,37.8711585998535,5.49010467529297,23.9807529449463,38.3736877441406,5.77518558502197,23.5361366271973,37.5237312316895 ,6.10112524032593,23.0678863525391,37.4616851806641,5.86668682098389,23.7495536804199,37.8985443115234,6.32710599899292 ,23.2475433349609,37.5488967895508,6.44766569137573,22.8217315673828,37.5743827819824,6.23360919952393,23.3994960784912 ,37.9742126464844,6.59987640380859,23.0917453765869,38.1686515808105,6.06353569030762,22.8577537536621,37.8568840026855 ,5.88337469100952,23.012113571167,37.7846069335938,6.54836654663086,23.4866733551025,38.3189849853516,6.24945592880249 ,23.0492630004883,38.7583618164063,5.61055421829224,22.8870544433594,38.4511108398438,5.23353481292725,23.5309505462646 ,38.9028968811035,5.63903284072876,23.0816688537598,38.9113273620605,5.43069744110107,22.903959274292,38.6048736572266 ,5.06207942962646,23.5692825317383,39.0464859008789,5.50390243530273,23.1787662506104,39.5135841369629,4.73982095718384 ,22.9653015136719,39.0761489868164,4.45135879516602,23.7099552154541,39.643383026123,4.94727754592896,23.1316452026367 ,39.6058540344238,4.39698171615601,23.2359008789063,39.7697334289551,4.56437253952026,23.8059616088867,39.9706344604492 ,4.65126800537109,22.8236141204834,40.5319900512695,3.22857236862183,23.2926731109619,40.7458877563477,3.48519134521484 ,23.3760948181152,41.0617523193359,3.17902445793152,23.8505458831787,41.1859550476074,3.43207764625549,23.7036972045898 ,41.0978317260742,3.33670973777771,23.6273307800293,40.8063163757324,3.54599738121033,23.8023815155029,40.8397178649902 ,3.72936797142029,23.864990234375,40.3513641357422,0.763435900211334,26.0925273895264,37.3577766418457,2.46653962135315 ,25.1522541046143,38.3267784118652,2.33084297180176,24.2588024139404,41.0395889282227,3.48043417930603,24.0651969909668 ,40.6324920654297,3.8392653465271,25.5185146331787,41.4591979980469,1.35679078102112,25.653772354126,41.5190391540527 ,1.6309654712677,25.9954280853271,40.7029228210449,1.54055678844452,25.8710231781006,40.5874977111816,1.27703082561493 ,26.0212421417236,40.74462890625,2.01458048820496,27.0484008789063,38.6537818908691,2.09933829307556,26.9103240966797 ,38.5200996398926,1.7544903755188,25.8416957855225,40.7435646057129,1.77245020866394,26.9660968780518,38.5935897827148 ,1.06645917892456,26.9331588745117,38.5272674560547,1.37321221828461,27.0709819793701,38.1172180175781,0.946545481681824 ,26.7614231109619,38.6556396484375,0.834723055362701,26.2733211517334,38.2470092773438,4.53884506225586,26.247579574585 ,38.6773948669434,4.36139822006226,25.8889560699463,38.9593696594238,4.29162311553955,26.644458770752,37.085147857666 ,5.1886773109436,26.9800910949707,37.083366394043,4.67532682418823,26.9348583221436,36.4211692810059,5.37596225738525 ,27.2591381072998,36.4549560546875,4.88776636123657,26.5561027526855,38.6125755310059,3.46944952011108,26.9216537475586 ,38.2097854614258,3.33311867713928,26.8688983917236,38.6367416381836,3.23217034339905,26.8833427429199,38.5423469543457 ,2.40460467338562,25.8038959503174,40.8302612304688,2.23062658309937,27.186222076416,38.2038040161133,2.10988116264343 ,26.2264060974121,38.6139297485352,3.97575259208679,24.5834217071533,41.3079147338867,3.27626419067383,24.8852310180664 ,40.5095405578613,3.75876450538635,25.4011859893799,40.703010559082,3.19607472419739,25.1859474182129,41.5070991516113 ,2.65838599205017,25.6491737365723,40.8988571166992,2.67949414253235,25.6597290039063,40.8177680969238,3.02372980117798 ,25.122709274292,42.1687240600586,2.20631384849548,25.4116878509521,41.62255859375,2.47316360473633,18.6652545928955 ,49.0274696350098,-2.71728754043579,18.8835830688477,49.226978302002,-2.30565118789673,19.0407295227051,49.365291595459 ,-2.1370997428894,19.2852344512939,48.3980293273926,-2.39254927635193,18.7893352508545,49.1171913146973,-2.36733150482178 ,19.810115814209,48.9623527526855,-1.67176043987274,23.0315437316895,40.908805847168,2.42655611038208,17.4380874633789 ,52.009090423584,-0.472728759050369,18.2713642120361,46.4929962158203,1.71778869628906,18.4343547821045,46.4846496582031 ,1.90123617649078,25.4729385375977,41.5712852478027,2.26492691040039,25.2154121398926,42.1438407897949,1.88524603843689 ,25.9024715423584,40.8810386657715,2.52124524116516,25.5942573547363,41.5684204101563,2.04436349868774,25.6221370697021 ,41.5452880859375,1.8506965637207,26.7846965789795,38.5711326599121,2.87396049499512,24.2903747558594,39.2600364685059 ,2.27982521057129,23.56321144104,40.0693969726563,1.32033908367157,25.473295211792,39.0388641357422,4.46131086349487 ,24.5607967376709,39.9796295166016,4.38208770751953,24.531322479248,42.9018974304199,0.635185480117798,25.1442775726318 ,41.987964630127,0.959975838661194,17.2868213653564,50.5812377929688,-2.79002928733826,16.9400997161865,49.9927215576172 ,-3.01769161224365,22.0741806030273,42.0393333435059,1.58685779571533,23.2135009765625,40.9123229980469,2.01415634155273 ,22.84716796875,40.2443580627441,2.65073156356812,8.43788433074951,58.2488059997559,-5.06908559799194,22.8853321075439 ,39.2420883178711,4.04786348342896,20.1032047271729,47.3067436218262,-2.26983070373535,27.8083629608154,35.7866897583008 ,0.489041179418564,26.5843887329102,37.6299057006836,1.49316310882568,26.2961502075195,37.4816856384277,1.81986856460571 ,26.9315319061279,38.103832244873,1.47392988204956,28.5599994659424,34.891429901123,1.93208718299866,25.8117942810059 ,37.4354019165039,3.28776264190674,26.7924709320068,38.083984375,2.64168548583984,28.3647136688232,34.7375602722168 ,3.58996033668518,25.9461326599121,37.5993270874023,3.64939475059509,25.5401210784912,37.5742073059082,3.82962965965271 ,27.3658351898193,35.2051162719727,5.2496919631958,23.554235458374,38.9353561401367,3.55190014839172,24.2575073242188 ,39.0156440734863,3.84028148651123,23.1536922454834,39.5488891601563,2.57533121109009,4.21192502975464,59.6024436950684 ,1.20553481578827,3.87961935997009,60.1460342407227,0.683042943477631,4.10153722763062,59.9645767211914,1.17759025096893 ,0.886674761772156,61.9747085571289,-3.56468176841736,3.29183435440063,59.7472953796387,1.7451434135437,3.74813604354858 ,61.0305709838867,-0.745337963104248,1.48638010025024,59.8282012939453,2.30086016654968,3.60340857505798,59.9398307800293 ,1.34661877155304,10.2422742843628,52.4975051879883,-0.000607038440648466,10.7581825256348,53.1050300598145,0.902385234832764 ,11.5402479171753,53.9515991210938,1.23755180835724,12.2552671432495,54.5028038024902,0.66737699508667,2.27535820007324 ,45.8665199279785,-2.50945448875427,3.42833256721497,45.5274429321289,-1.78932905197144,4.05796194076538,45.2589874267578 ,-1.40885472297668,4.60915374755859,44.9898719787598,-0.930403530597687,5.24233913421631,44.666446685791,-0.0869212374091148 ,-4.25761461257935,44.1189155578613,-0.763114631175995,-6.03212308883667,43.845027923584,2.36041808128357,-5.83559989929199 ,43.7850875854492,3.04091644287109,-5.30527019500732,44.0394668579102,0.50008898973465,3.50020909309387,43.5624122619629 ,5.78555011749268,5.09468984603882,43.6128387451172,4.61228513717651,4.20102405548096,43.5664901733398,5.19080018997192 ,4.9380989074707,44.0710144042969,-0.0603329986333847,6.03212308883667,43.845027923584,2.36041808128357,5.67244100570679 ,44.0079154968262,1.06051099300385,5.30527019500732,44.0394668579102,0.50008898973465,5.31654071807861,43.6553688049316 ,4.30916976928711,-7.75623239065986e-017,43.5387115478516,5.84340620040894,-5.27845695614815e-005,33.3007431030273 ,2.05420589447021,-8.22455185698345e-005,33.2863311767578,1.1840980052948,-3.33971934196597e-006,33.5464897155762 ,2.91496634483337,-0.0216123331338167,34.086296081543,4.46552181243896,-0.0209378246217966,36.0812835693359,5.91989803314209 ,0.0214357674121857,40.9322090148926,5.86233282089233,0.000330000009853393,43.5154304504395,6.32375717163086,0.0163603387773037 ,42.6093482971191,6.2076268196106,-7.75623239065986e-017,44.1866607666016,-2.73809719085693,-7.75623239065986e-017 ,43.0882110595703,-2.73308086395264,-7.75623239065986e-017,41.1124305725098,-3.11592626571655,-7.75623239065986e-017 ,38.7960510253906,-3.92060899734497,-7.75623239065986e-017,37.1677017211914,-4.09805393218994,-7.75623239065986e-017 ,35.5332374572754,-3.72692203521729,-7.75623239065986e-017,34.4388084411621,-2.60908508300781,-7.75623239065986e-017 ,33.9057998657227,-1.05233216285706,-7.75623239065986e-017,40.3612594604492,-3.36505818367004,-7.75623239065986e-017 ,40.9668617248535,-2.97700309753418,-0.021883649751544,34.9344253540039,5.3594274520874,0.0219422280788422,38.3137702941895 ,5.65279293060303,-2.06331396412907e-010,33.4434928894043,0.294710874557495,-7.75623239065986e-017,37.981876373291 ,-4.00933170318604,-7.75623239065986e-017,39.5786552429199,-3.6428337097168,0.016111932694912,36.9298248291016,5.72457551956177 ,-7.75623239065986e-017,36.350471496582,-3.91248798370361,0.814909756183624,33.3780937194824,2.90381836891174,0.932765364646912 ,33.2268142700195,2.00603055953979,1.22708594799042,33.3489303588867,2.8274359703064,2.75687050819397,36.3014907836914 ,5.40374183654785,3.5030312538147,36.7397232055664,5.33827209472656,1.25800061225891,34.1628379821777,4.3538761138916 ,2.02382874488831,34.1971549987793,4.5708212852478,3.47264003753662,40.8046646118164,5.64674711227417,4.18744277954102 ,40.976692199707,5.10877799987793,5.14671087265015,41.2881736755371,4.74443769454956,1.62547600269318,40.8144302368164 ,6.03513288497925,5.77770185470581,43.7241973876953,4.21209239959717,5.29317903518677,43.5865287780762,4.95701169967651 ,5.08752679824829,42.6901473999023,5.04328632354736,4.34233283996582,43.5406455993652,5.61575651168823,4.17514419555664 ,42.6370620727539,5.60567569732666,3.46193909645081,42.6481056213379,5.76057195663452,3.47859120368958,43.5532836914063 ,5.99722957611084,3.43521809577942,42.6959381103516,5.98223733901978,1.42388653755188,36.1319541931152,5.72585105895996 ,3.40727496147156,40.9113006591797,5.82985496520996,1.57330799102783,42.6485214233398,6.22713947296143,1.58111011981964 ,43.5325012207031,6.25356292724609,5.83585691452026,39.4078598022461,4.92551565170288,7.0226731300354,39.7226982116699 ,1.82336485385895,6.7251763343811,40.6819534301758,1.25125098228455,5.85274076461792,38.5889129638672,-1.75322699546814 ,5.36832094192505,36.3024063110352,-3.52680969238281,5.2288670539856,34.9626655578613,-3.10190200805664,4.03269290924072 ,35.0155754089355,-3.88902568817139,3.9318573474884,36.8120727539063,-4.35974216461182,6.22724580764771,36.1577568054199 ,-1.94789063930511,5.26579904556274,39.0528678894043,-3.06897306442261,5.97235774993896,33.2114219665527,-2.53228330612183 ,4.39906072616577,32.8998641967773,-3.10125088691711,1.36317300796509,33.4801025390625,-1.84129047393799,1.09546613693237 ,34.4467086791992,-2.68856716156006,2.17296242713928,33.0436477661133,-2.6845920085907,0.895317554473877,33.7961120605469 ,-1.49867248535156,2.15257096290588,35.343318939209,-3.91910099983215,3.68432450294495,39.1226043701172,-3.77887201309204 ,4.3945517539978,36.7878608703613,5.68821334838867,6.84634876251221,39.6859741210938,3.44338226318359,6.85820627212524 ,38.0219192504883,4.15880107879639,5.12256383895874,44.0850296020508,-0.662708640098572,5.07416200637817,43.1190338134766 ,-1.0839581489563,3.94724798202515,43.0901641845703,-1.78187119960785,4.41386079788208,44.1070861816406,-1.39090013504028 ,5.10807847976685,37.1020164489746,5.3708872795105,3.92581939697266,35.0171241760254,5.48070430755615,4.79267168045044 ,35.4377059936523,5.29423522949219,0.795329332351685,33.1274223327637,1.13712930679321,0.989203810691834,32.4371757507324 ,0.0683181583881378,3.06665587425232,32.5945091247559,4.35868883132935,1.45700669288635,40.4501914978027,-3.34169721603394 ,1.73029398918152,41.279899597168,-2.65792369842529,6.56671047210693,36.2014427185059,-1.10563158988953,5.91551494598389 ,41.8584251403809,0.232219994068146,6.44283723831177,41.8459777832031,1.37607705593109,6.03975009918213,40.6554222106934 ,-0.198134005069733,6.39490938186646,38.2275466918945,-0.677325069904327,6.91662931442261,39.7310752868652,2.6323184967041 ,1.83349096775055,37.0975799560547,-4.27652215957642,1.56641674041748,38.9513626098633,-3.91081118583679,3.50512456893921 ,40.6196136474609,-3.00334811210632,4.33383369445801,34.2510070800781,5.19123935699463,7.39133644104004,37.5306282043457 ,1.03786599636078,6.60190296173096,37.1033821105957,4.54294300079346,6.40375185012817,37.7048988342285,4.72016429901123 ,5.96765041351318,37.515453338623,5.11439895629883,5.89599943161011,36.2985420227051,5.10671806335449,7.37723875045776 ,38.6811370849609,3.11948132514954,5.88621282577515,44.0235214233398,0.907807588577271,5.91183280944824,43.0774421691895 ,0.39118629693985,6.32332801818848,43.0385551452637,1.20373177528381,6.07704210281372,43.9742317199707,1.41692113876343 ,6.26329946517944,43.8762435913086,2.40513157844543,6.55381441116333,42.9839019775391,2.05214643478394,6.02948570251465 ,42.7914657592773,3.67581176757813,2.12726092338562,43.1003265380859,-2.51028513908386,2.32953906059265,44.1899299621582 ,-2.3960747718811,6.52310943603516,41.8832359313965,1.90106904506683,5.01420450210571,40.7571983337402,-2.03109741210938 ,3.62999892234802,41.6226119995117,-2.09058308601379,5.07654714584351,41.8539772033691,-1.2768919467926,1.74856305122375 ,41.446159362793,-2.7613410949707,6.6666374206543,41.9713020324707,1.90715312957764,6.58360290527344,41.9356079101563 ,1.37447500228882,5.17393112182617,41.9912605285645,-1.28132402896881,3.6604700088501,41.7834548950195,-2.16389107704163 ,6.04397821426392,41.9637260437012,0.200174003839493,7.44213581085205,36.6004333496094,1.16769206523895,7.92302513122559 ,32.6457328796387,-0.528758764266968,6.8061203956604,39.5952911376953,1.30259311199188,4.5844669342041,37.8577919006348 ,5.41912412643433,5.30243349075317,38.3342590332031,5.31651830673218,7.53545331954956,34.2902183532715,-0.67992115020752 ,7.87608909606934,36.6887588500977,1.07710671424866,4.71270799636841,34.922981262207,5.38027715682983,3.87385606765747 ,33.8004875183105,5.0019474029541,3.42617630958557,33.1789436340332,4.64112043380737,7.63047361373901,37.6648254394531 ,1.16357791423798,7.10544157028198,32.4796295166016,-1.40169179439545,6.13836097717285,32.2281188964844,-2.17795896530151 ,4.79551649093628,31.888032913208,-2.52016830444336,2.77830147743225,31.6644554138184,-2.11853051185608,1.35830628871918 ,31.4676284790039,-0.379713386297226,1.24095845222473,31.4523525238037,0.875401377677917,1.28563523292542,31.4966773986816 ,1.93234145641327,1.7512218952179,31.7267608642578,2.83344197273254,7.01957130432129,38.2649040222168,3.67450428009033 ,3.44437503814697,34.0655136108398,4.96053028106689,2.73415112495422,33.0613288879395,4.6151008605957,2.04167532920837 ,32.9766311645508,4.17566061019897,1.34300255775452,32.4887313842773,2.8340015411377,0.986135005950928,32.4462547302246 ,2.02241730690002,1.01812207698822,32.2924423217773,1.13504540920258,2.62103891372681,32.0797386169434,3.92770099639893 ,6.25751686096191,42.8987197875977,3.04582142829895,6.04216051101685,43.8070030212402,3.22801208496094,3.08791637420654 ,38.6117668151855,5.49701166152954,1.54153025150299,38.4154205322266,5.78113460540771,1.47424268722534,36.9438629150391 ,5.92009258270264,2.93614816665649,37.1169738769531,5.52249622344971,3.87624454498291,37.4765739440918,5.41282415390015 ,1.34507369995117,35.0776443481445,5.1326584815979,2.54694414138794,35.6014175415039,5.09529161453247,1.67743611335754 ,38.09423828125,-4.09251165390015,3.87088441848755,38.1073760986328,-4.12555122375488,5.3170599937439,37.6776351928711 ,-3.29789161682129,6.11478328704834,37.1026458740234,-1.88399529457092,6.49657773971558,36.9398536682129,-0.926609635353088 ,5.82635879516602,39.6921195983887,-1.53293943405151,5.03867244720459,39.8959846496582,-2.59106040000916,3.54611992835999 ,39.9083786010742,-3.3810977935791,1.41777455806732,39.6628646850586,-3.62027859687805,5.54055452346802,40.7690849304199 ,-1.08194398880005,5.49603080749512,41.856201171875,-0.522336006164551,5.60895442962646,41.9774932861328,-0.54057502746582 ,5.49299716949463,43.0982360839844,-0.212771996855736,5.50438833236694,44.0542755126953,0.256163358688354,1.99303114414215 ,36.2204513549805,-4.09781169891357,3.98227500915527,35.9138259887695,-4.1243839263916,5.28660011291504,35.5719833374023 ,-3.34177470207214,7.44574117660522,35.3674850463867,-0.307296603918076,3.89755582809448,38.8450965881348,5.16094303131104 ,4.99822235107422,39.3205108642578,5.13173723220825,6.45847272872925,41.8677444458008,2.8785502910614,6.1457724571228 ,41.7619590759277,3.46116876602173,0.765930593013763,33.2394866943359,0.199775099754334,6.97464942932129,33.6411361694336 ,-1.5275069475174,3.34150075912476,35.9524040222168,5.1044602394104,2.66343665122986,34.5371398925781,4.79501628875732 ,6.34700489044189,39.5354843139648,4.11105871200562,5.79346656799316,41.582836151123,3.95337581634521,5.71175098419189 ,42.7628898620605,4.28730201721191,5.51993751525879,43.6509590148926,4.6083869934082,-0.815094530582428,33.3783988952637 ,2.90374517440796,-0.933338344097137,33.2275924682617,2.00579643249512,-1.2274729013443,33.3488845825195,2.82644486427307 ,-2.75376105308533,36.3082656860352,5.42266178131104,-1.25820052623749,34.1625328063965,4.3541407585144,-2.02781987190247 ,34.1995391845703,4.5605411529541,-3.47264003753662,40.8046646118164,5.64674711227417,-5.45668506622314,41.3959541320801 ,4.4593939781189,-4.58708095550537,41.1039962768555,4.92208909988403,-1.62547600269318,40.8144302368164,6.03513288497925 ,-5.4484691619873,42.7392082214355,4.79399728775024,-5.77770185470581,43.7241973876953,4.21209239959717,-5.29317903518677 ,43.5865287780762,4.95701169967651,-3.46193599700928,42.6480674743652,5.76056671142578,-3.47859120368958,43.5532836914063 ,5.99722957611084,-3.43521809577942,42.6959381103516,5.98223733901978,-1.42269885540009,36.1321029663086,5.72401666641235 ,-3.40727496147156,40.9113006591797,5.82985496520996,-1.57330799102783,42.6485214233398,6.22713947296143,-1.58111011981964 ,43.5325012207031,6.25356292724609,-3.66835045814514,36.4985618591309,5.38381719589233,-5.79204177856445,39.4113311767578 ,4.94667863845825,-7.0226731300354,39.7226982116699,1.82336485385895,-6.7251763343811,40.6819534301758,1.25125098228455 ,-5.85274076461792,38.419017791748,-1.75322699546814,-5.78756046295166,40.3183822631836,-1.30541849136353,-5.36832094192505 ,36.3024063110352,-3.52680969238281,-5.2288670539856,34.9626655578613,-3.10190200805664,-4.03269290924072,35.0155754089355 ,-3.88902568817139,-3.9318573474884,36.8120727539063,-4.35974216461182,-6.22724771499634,36.1577682495117,-1.94789123535156 ,-5.26579904556274,39.0528678894043,-3.06897306442261,-5.97415399551392,33.3147354125977,-2.52801775932312,-4.40103721618652 ,32.9904479980469,-3.09865427017212,-1.3545548915863,33.4727592468262,-1.85239458084106,-1.09546613693237,34.4467086791992 ,-2.68856716156006,-2.12230801582336,34.2555770874023,-2.91455101966858,-2.18139433860779,33.1093902587891,-2.68757343292236 ,-0.895317554473877,33.7961120605469,-1.49867248535156,-2.15257096290588,35.343318939209,-3.91910099983215,-6.99374008178711 ,38.9632263183594,1.23011684417725,-7.25476980209351,39.1672859191895,1.80217695236206,-3.68432450294495,39.1226043701172 ,-3.77887201309204,-7.03208589553833,38.9501571655273,3.54810166358948,-6.8550271987915,39.6846504211426,3.43728446960449 ,-6.85820627212524,38.0219192504883,4.15880107879639,-5.12256383895874,44.0850296020508,-0.662708640098572,-5.07416200637817 ,43.1190338134766,-1.0839581489563,-3.9472484588623,43.0901641845703,-1.7818706035614,-4.41386079788208,44.1070861816406 ,-1.39090013504028,-5.10153818130493,37.1012496948242,5.36786413192749,-4.79267168045044,35.4377059936523,5.29423522949219 ,-0.803963482379913,33.1355094909668,1.13691902160645,-0.989203810691834,32.4371757507324,0.0683181583881378,-3.37483978271484 ,34.7629356384277,5.09840297698975,-1.45700669288635,40.4501914978027,-3.34169721603394,-1.73029398918152,41.279899597168 ,-2.65792369842529,-6.56719064712524,36.2016067504883,-1.10578656196594,-5.91551494598389,41.8584251403809,0.232219994068146 ,-6.44283723831177,41.8459777832031,1.37607705593109,-6.03975009918213,40.6554222106934,-0.198134005069733,-6.20767879486084 ,39.6629943847656,-0.267598986625671,-7.23072290420532,39.1555252075195,2.58811020851135,-6.91986083984375,39.7321853637695 ,2.6331958770752,-1.83349096775055,37.0975799560547,-4.27652215957642,-1.56641674041748,38.9513626098633,-3.91081118583679 ,-3.50512456893921,40.6196136474609,-3.00334811210632,-6.30732154846191,31.5682735443115,-2.05524492263794,-7.18444347381592 ,31.8184814453125,-1.26540243625641,-4.33383369445801,34.2510070800781,5.19123935699463,-7.39133644104004,37.5306282043457 ,1.03786599636078,-6.60190296173096,37.1033821105957,4.54294300079346,-5.96765041351318,37.515453338623,5.11439895629883 ,-5.89599943161011,36.2985420227051,5.10671806335449,-7.37121391296387,37.4857940673828,1.52764689922333,-7.52424764633179 ,38.2782287597656,2.63499093055725,-5.88621282577515,44.0235214233398,0.64057981967926,-5.91183280944824,43.0774421691895 ,0.123958557844162,-6.32332801818848,43.0385551452637,1.20373177528381,-6.07704210281372,43.9742317199707,1.41692113876343 ,-6.26329946517944,43.8762435913086,2.40513157844543,-6.55381441116333,42.9839019775391,2.05214643478394,-6.02948570251465 ,42.7914657592773,3.67581176757813,-2.13525223731995,43.1005859375,-2.50097489356995,-2.32953906059265,44.1899299621582 ,-2.3960747718811,-6.52310943603516,41.8832359313965,1.90106904506683,-5.01420545578003,40.7571983337402,-2.03109574317932 ,-3.63676381111145,41.6236991882324,-2.08075261116028,-5.07654762268066,41.8539772033691,-1.27689123153687,-1.74856305122375 ,41.446159362793,-2.7613410949707,-6.6666374206543,41.9713020324707,1.90715312957764,-6.58360290527344,41.9356079101563 ,1.37447500228882,-5.17393159866333,41.9912605285645,-1.28132331371307,-3.66729927062988,41.7845306396484,-2.15401744842529 ,-6.04397821426392,41.9637260437012,0.200174003839493,-6.13817310333252,35.4240798950195,-2.05124926567078,-6.8061203956604 ,39.5952911376953,1.30259311199188,-3.89585041999817,37.3545570373535,5.36638212203979,-5.27055740356445,38.3294830322266 ,5.32894420623779,-5.80193281173706,38.5906982421875,5.0371413230896,-6.67177486419678,38.838623046875,4.1148796081543 ,-7.2227783203125,37.7002792358398,3.50522708892822,-4.71270799636841,34.922981262207,5.38027715682983,-3.87385606765747 ,33.8004875183105,5.0019474029541,-3.42617630958557,33.1789436340332,4.73271560668945,-7.10551691055298,32.4807167053223 ,-1.39546012878418,-6.13810777664185,32.2308578491211,-2.16028618812561,-4.80070447921753,31.8894596099854,-2.51312136650085 ,-2.77957320213318,31.6670188903809,-2.11773061752319,-1.35933804512024,31.468542098999,-0.381132036447525,-1.24095845222473 ,31.4523525238037,0.513632297515869,-1.28563523292542,31.4966773986816,1.93234145641327,-1.7512218952179,31.7267608642578 ,2.83344197273254,-7.01010322570801,38.2587280273438,3.45386791229248,-2.21827101707459,32.9870643615723,4.24474334716797 ,-1.34323954582214,32.4883155822754,2.83370661735535,-0.986135005950928,32.4462547302246,2.02241730690002,-1.01812207698822 ,32.2924423217773,1.3158106803894,-2.62103891372681,32.0797386169434,3.92770099639893,-6.25751686096191,42.8987197875977 ,3.04582142829895,-6.04216051101685,43.8070030212402,3.22801208496094,-3.0857834815979,38.6119651794434,5.49794054031372 ,-1.54153025150299,38.4154205322266,5.78113460540771,-1.47438716888428,36.9435920715332,5.92864465713501,-2.93922257423401 ,37.1136054992676,5.5228476524353,-1.34475648403168,35.0796165466309,5.12902164459229,-2.53913545608521,35.605598449707 ,5.09833669662476,-1.67743504047394,38.0942153930664,-4.0925087928772,-3.87088441848755,38.1073760986328,-4.12555122375488 ,-5.3170599937439,37.6776351928711,-3.29789161682129,-6.11478328704834,37.1026458740234,-1.88399529457092,-6.49664258956909 ,36.9398765563965,-0.926629424095154,-6.36891555786133,38.7568817138672,-0.362202167510986,-5.82635879516602,39.3835487365723 ,-1.53293943405151,-5.03867244720459,39.8959846496582,-2.59106040000916,-3.54611992835999,39.9083786010742,-3.3810977935791 ,-1.41777455806732,39.6628646850586,-3.62027859687805,-5.54055452346802,40.7690849304199,-1.08194398880005,-5.49603080749512 ,41.856201171875,-0.522336006164551,-5.60895442962646,41.9774932861328,-0.54057502746582,-5.49299716949463,43.0982360839844 ,-0.479999780654907,-5.50438833236694,44.0542755126953,-0.0110644111409783,-1.99303114414215,36.2204513549805,-4.09781169891357 ,-3.98227500915527,35.9138259887695,-4.1243839263916,-5.28660011291504,35.5719833374023,-3.34177470207214,-4.4788703918457 ,39.1287841796875,5.13459396362305,-6.45847272872925,41.784423828125,2.8785502910614,-6.1457724571228,41.6194610595703 ,3.46116876602173,-4.63133525848389,42.6636047363281,5.32448053359985,-4.75305843353271,43.5604667663574,5.33120679855347 ,-7.44574117660522,35.3674850463867,-0.307296603918076,-0.765930593013763,33.2394866943359,0.199775099754334,-6.56689834594727 ,35.3885688781738,-1.30802595615387,-6.95459890365601,33.9223136901855,-1.50603950023651,-7.33988666534424,37.5106315612793 ,2.67807340621948,-6.3889856338501,37.875617980957,-0.605510652065277,-7.2694787979126,37.9696998596191,1.09678852558136 ,-7.34313821792603,38.1378936767578,1.5938401222229,2.54588627815247,31.5141983032227,3.90785717964172,7.35676193237305 ,36.611213684082,0.0735180079936981,1.76136982440948,30.7708950042725,-0.30973556637764,1.99895298480988,31.0155296325684 ,3.09628009796143,4.97575998306274,31.3360900878906,-2.19620847702026,6.30475044250488,31.5676937103271,-2.05935525894165 ,1.4699159860611,30.8071784973145,2.04358291625977,3.12279558181763,30.9744472503662,-1.80761325359344,7.18444299697876 ,31.8184814453125,-1.26540327072144,7.60904788970947,38.0021514892578,1.4394623041153,6.92367172241211,37.4992141723633 ,4.23017835617065,7.33489608764648,38.8762969970703,2.96697282791138,8.05961799621582,32.2336196899414,-0.364079624414444 ,7.2227783203125,37.7002792358398,3.50522708892822,7.99379205703735,36.6208305358887,1.01282215118408,7.57951307296753 ,37.86865234375,1.19116532802582,7.60626697540283,38.0132713317871,3.52246165275574,2.92987728118896,32.3107681274414 ,4.24027919769287,-2.54588627815247,31.5141983032227,3.90785717964172,-7.35676193237305,36.611213684082,0.0735180079936981 ,-1.76136982440948,30.7708950042725,-0.30973556637764,-1.99895298480988,31.0155296325684,3.09628009796143,-4.97575998306274 ,31.3360900878906,-2.19620823860168,-1.4699159860611,30.8071784973145,2.04358291625977,-3.12279558181763,30.9744472503662 ,-1.80761325359344,-6.92367172241211,37.4992141723633,4.23017835617065,-7.92302513122559,32.6457328796387,-0.429989874362946 ,-7.53545331954956,34.2902183532715,-0.679921090602875,-8.05961799621582,32.2336196899414,-0.364079624414444,-2.92987728118896 ,32.3107681274414,4.24027919769287,6.71319198608398,40.9277381896973,1.88174486160278,6.6584153175354,40.9530601501465 ,2.80434918403625,6.40892744064331,40.8210372924805,3.42478704452515,6.16580247879028,40.730842590332,4.11610317230225 ,5.24478960037231,40.4570274353027,5.07763576507568,4.09946584701538,40.003002166748,5.10969161987305,3.26685166358948 ,39.7574501037598,5.55594730377197,1.59205174446106,39.6368942260742,5.92203807830811,0.0218058526515961,39.6724739074707 ,5.78261089324951,-1.59205174446106,39.6368942260742,5.92203807830811,-3.26731586456299,39.7573318481445,5.55723333358765 ,-4.62337350845337,40.2267990112305,5.05230140686035,-5.74155473709106,40.6005477905273,4.75555038452148,-6.41632032394409 ,40.8238906860352,3.43074584007263,-6.66259670257568,40.9543685913086,2.805419921875,-6.71319198608398,40.9277381896973 ,1.88174486160278,6.96116399765015,37.8924865722656,0.236995846033096,6.53837490081787,39.545482635498,0.625087022781372 ,6.49494075775146,40.6730422973633,0.764400660991669,6.71600389480591,35.0457725524902,-1.27530515193939,5.8884334564209 ,35.0911750793457,-2.19964599609375,6.23003673553467,39.5202827453613,-0.280717462301254,-4.23733997344971,33.8883094787598 ,-3.31580758094788,-5.55170154571533,34.1430282592773,-2.73199439048767,-6.73952388763428,34.6517181396484,-1.38723611831665 ,2.27997398376465,34.040943145752,-3.00337839126587,4.2042031288147,34.010986328125,-3.35272359848022,5.61063671112061 ,33.969596862793,-2.70036911964417,6.52647972106934,41.9636688232422,2.90919852256775,6.23724269866943,41.8537979125977 ,3.54334712028503,5.89144325256348,41.6963653564453,4.04102087020874,5.23887634277344,41.4213523864746,4.82535839080811 ,4.29452753067017,41.1218376159668,5.21275663375854,3.47159290313721,40.9850463867188,5.65788459777832,-6.54996919631958 ,41.8910331726074,2.9947304725647,-6.23255920410156,41.7566947937012,3.59965658187866,-5.5538182258606,41.5054779052734 ,4.59554147720337,-4.69729375839233,41.2445487976074,5.07512426376343,-3.47165608406067,40.9741363525391,5.65721082687378 ,-23.6263427734375,43.013599395752,6.47430896759033,-23.7729072570801,43.1372222900391,6.58026456832886,-24.7628192901611 ,42.8174591064453,3.71304368972778,-24.5079193115234,42.6303253173828,3.80450463294983,-23.8901023864746,42.3696022033691 ,4.40267133712769,-23.2607154846191,42.4850196838379,5.82348585128784,-23.2944355010986,42.733642578125,6.23423337936401 ,-24.9903984069824,43.7264289855957,5.74327707290649,-24.3464870452881,43.513370513916,6.43716669082642,-24.1099834442139 ,43.3889198303223,6.47907829284668,-24.2180614471436,42.4923400878906,4.03699064254761,-25.4617786407471,43.6127967834473 ,4.0622730255127,-25.304744720459,43.3559913635254,3.76097178459167,-25.5957698822021,43.7158012390137,4.88774299621582 ,-25.5078639984131,43.6638641357422,4.65497446060181,-25.1738891601563,42.5260353088379,3.73804807662964,-24.6930446624756 ,42.1397438049316,3.69490194320679,-25.8416652679443,41.6027069091797,3.753737449646,-25.3609161376953,41.2780914306641 ,3.74570178985596,-25.5961322784424,42.946418762207,4.07511329650879,-25.7301807403564,43.0309448242188,4.41291189193726 ,-26.2887325286865,42.0926628112793,4.36350917816162,-26.2815189361572,41.9631805419922,4.04271125793457,-26.3981914520264 ,40.0381469726563,3.94070935249329,-26.700496673584,40.2688484191895,3.99253249168396,-26.031810760498,39.866283416748 ,4.42348146438599,-26.9415378570557,39.6701011657715,4.1496410369873,-26.6437759399414,39.3840065002441,4.57978057861328 ,-27.4736957550049,40.0068969726563,4.43392086029053,-27.1415252685547,40.5520286560059,4.28695392608643,-25.0047302246094 ,41.0434036254883,4.17262172698975,-27.0838451385498,39.4616813659668,4.20486354827881,-27.5854930877686,39.8320007324219 ,4.42073726654053,-27.4173030853271,38.7636375427246,4.53872299194336,-26.8994770050049,39.3322372436523,4.61534118652344 ,-27.5505905151367,38.8895950317383,4.15631341934204,-27.9687995910645,39.2777709960938,4.31590127944946,-27.5471420288086 ,38.6640548706055,4.52497625350952,-28.0055732727051,38.2453079223633,4.07616996765137,-27.8282165527344,38.1721115112305 ,4.42304611206055,-28.0598011016846,39.1244735717773,4.31831836700439,-28.3139152526855,38.5171012878418,4.22306823730469 ,-28.4227142333984,37.6497230529785,4.07181930541992,-28.217414855957,37.5255508422852,4.32485485076904,-27.8730697631836 ,37.9825782775879,4.39158630371094,-28.3780708312988,38.3434410095215,4.16639280319214,-28.6439151763916,37.7854652404785 ,4.15652751922607,-28.4176254272461,37.5569000244141,4.59826374053955,-28.0582599639893,38.1683197021484,4.77799558639526 ,-28.4014892578125,38.297679901123,4.63346862792969,-28.6482925415039,37.744571685791,4.51374578475952,-28.0808868408203 ,39.0941696166992,4.7457594871521,-27.6341457366943,38.8030586242676,4.86536312103271,-28.3536701202393,38.4771766662598 ,4.65000343322754,-27.1750984191895,39.3397560119629,5.02171897888184,-27.9707336425781,39.2536811828613,4.79168939590454 ,-27.5544815063477,39.7653503417969,4.87039470672607,-26.8892860412598,39.1242294311523,5.65932321548462,-27.1643943786621 ,39.2769088745117,5.21089363098145,-28.0640392303467,38.5519676208496,5.3613109588623,-27.7503108978271,38.3601455688477 ,5.72724676132202,-27.5549240112305,39.8371887207031,5.44011735916138,-28.3622589111328,38.9591102600098,5.60978889465332 ,-27.8641948699951,38.2575073242188,5.75561332702637,-28.5736103057861,37.5589599609375,5.41511964797974,-28.3246059417725 ,37.4510269165039,5.74597024917603,-28.8778953552246,37.9082946777344,5.62078475952148,-28.4881896972656,38.7738189697266 ,5.63155937194824,-29.0471324920654,36.796085357666,5.47368192672729,-28.7995357513428,36.6460189819336,5.74858140945435 ,-28.3623027801514,37.2672958374023,5.74302959442139,-28.9793586730957,37.7283210754395,5.64031219482422,-29.3114433288574 ,36.9610900878906,5.65622091293335,-28.9377841949463,36.6883697509766,6.14251613616943,-28.4273624420166,37.4474029541016 ,6.21729612350464,-29.2370700836182,36.8791809082031,6.13663291931152,-28.8671531677246,37.6475410461426,6.21940517425537 ,-28.7552375793457,37.8249931335449,6.24292993545532,-28.3837375640869,38.711784362793,6.26133489608765,-27.8976879119873 ,38.416675567627,6.24330282211304,-26.9654140472412,39.2554931640625,6.17968940734863,-28.276517868042,38.9079895019531 ,6.27008581161499,-27.4117317199707,39.8820152282715,6.13056707382202,-26.4471855163574,39.0464172363281,6.60819530487061 ,-26.9194221496582,39.2587203979492,6.24522972106934,-27.6800098419189,38.385009765625,6.62230777740479,-27.2573795318604 ,38.2736320495605,6.9517560005188,-27.26926612854,39.8481636047363,6.59906101226807,-27.9782104492188,38.8671264648438 ,6.95007228851318,-28.0688438415527,38.6760520935059,7.01848316192627,-28.5870819091797,37.7654495239258,7.17742586135864 ,-28.2777462005615,37.4363899230957,6.88086128234863,-27.9086799621582,37.1613502502441,7.15313673019409,-28.7339859008789 ,36.6618309020996,7.08320379257202,-28.3936653137207,36.4971008300781,7.30121755599976,-28.6705112457275,37.592227935791 ,7.20863342285156,-28.9643859863281,36.7978897094727,7.30511474609375,-28.4570426940918,36.5814056396484,7.71035099029541 ,-27.9176807403564,37.3377952575684,7.63046169281006,-28.7698287963867,36.7252349853516,7.75289964675903,-28.4236831665039 ,37.5247077941895,7.73659610748291,-27.4033813476563,38.1232032775879,7.00110530853271,-27.8806934356689,37.3391571044922 ,7.15934276580811,-27.2819881439209,38.3176307678223,7.47253370285034,-27.7696685791016,38.6321830749512,7.5859317779541 ,-28.3256855010986,37.6912994384766,7.72710371017456,-26.8567867279053,39.8479804992676,7.2989673614502,-26.4308338165283 ,39.2665863037109,7.17094659805298,-27.6364707946777,38.8198776245117,7.58093309402466,-26.5386028289795,39.8399963378906 ,7.40321207046509,-26.3355560302734,39.2802734375,7.28359174728394,-26.4937152862549,39.7903518676758,7.72415590286255 ,-26.2816333770752,39.2777862548828,7.37923860549927,-25.7911376953125,39.1551628112793,7.62134981155396,-26.7711887359619 ,38.5325317382813,7.91517496109009,-26.2570724487305,38.405632019043,8.05340671539307,-26.9927787780762,39.0176429748535 ,8.23996162414551,-26.3676681518555,38.260124206543,8.14638519287109,-27.2187328338623,37.843936920166,8.26996326446533 ,-26.6905918121338,37.6869506835938,8.43252944946289,-27.5778198242188,37.0123481750488,8.60592555999756,-27.2039623260498 ,36.8574829101563,8.74586391448975,-26.7794971466064,37.493537902832,8.46357822418213,-27.455057144165,38.0021095275879 ,8.637282371521,-27.7249240875244,37.2018547058105,8.87214088439941,-27.182933807373,36.963996887207,9.13169574737549 ,-26.6903743743896,37.7697410583496,8.90561294555664,-27.0663108825684,37.950511932373,9.09242057800293,-27.4639053344727 ,37.1640396118164,9.21800422668457,-26.2363605499268,38.5291175842285,8.61067199707031,-25.5951328277588,39.4232940673828 ,8.14927768707275,-26.5826759338379,38.9987297058105,8.73210430145264,-26.0422592163086,39.8283958435059,8.27025318145752 ,-25.8990154266357,40.1051177978516,8.16572380065918,-25.4575862884521,39.6448440551758,8.05125999450684,-24.9653930664063 ,40.1741714477539,7.70815801620483,-24.9730854034424,39.9014778137207,7.42950582504272,-25.4200038909912,39.3626289367676 ,7.75683259963989,-24.2210006713867,41.0106048583984,7.98147630691528,-24.6388511657715,40.5908088684082,7.69859838485718 ,-24.576192855835,40.8846054077148,7.95612287521362,-24.2833976745605,41.1872444152832,7.96993923187256,-25.0402679443359 ,40.2473983764648,7.93497562408447,-23.489013671875,40.1892395019531,7.41091966629028,-24.1003112792969,40.3884086608887 ,7.85036611557007,-23.76003074646,39.8458709716797,8.26958274841309,-23.2517566680908,39.6617813110352,8.05038833618164 ,-23.8638591766357,40.1887512207031,8.5574779510498,-23.1712284088135,39.2300567626953,8.37701511383057,-23.7789897918701 ,39.7685356140137,8.3179931640625,-23.7777690887451,39.3715591430664,8.7131233215332,-23.8962688446045,39.8838386535645 ,9.01914501190186,-23.4659900665283,39.0062866210938,9.28580474853516,-23.0384254455566,38.9159851074219,8.99066925048828 ,-23.623067855835,39.3927841186523,9.53688907623291,-23.1323223114014,39.0118255615234,9.59018325805664,-22.7384910583496 ,39.0114517211914,9.32059097290039,-23.2353954315186,39.445182800293,9.75967407226563,-22.9911422729492,39.6222114562988 ,9.18593120574951,-22.8035850524902,39.2971458435059,8.97720813751221,-22.871150970459,39.2318687438965,9.65723705291748 ,-23.3471965789795,39.7962341308594,9.4227352142334,-22.9731788635254,40.2100143432617,8.72885417938232,-22.8828563690186 ,39.8947982788086,8.33472442626953,-23.4366111755371,40.3843574523926,8.82137107849121,-23.0198669433594,40.3654747009277 ,8.55435657501221,-22.9130306243896,40.0500450134277,8.16645908355713,-23.4837207794189,40.530647277832,8.69202995300293 ,-23.1712074279785,40.9755668640137,7.88031339645386,-23.0264263153076,40.5268325805664,7.56757783889771,-23.6603927612305 ,41.1375503540039,8.156907081604,-23.1650218963623,41.0661544799805,7.53386211395264,-23.235279083252,41.2355422973633 ,7.71307706832886,-23.774694442749,41.4714393615723,7.87514686584473,-22.9597644805908,41.9761009216309,6.33067464828491 ,-23.3756122589111,42.2179107666016,6.64725112915039,-23.4795513153076,42.5396881103516,6.35377931594849,-23.9068374633789 ,42.6923294067383,6.66793060302734,-23.7800006866455,42.5955772399902,6.5540189743042,-23.6945686340332,42.2989540100098 ,6.75234365463257,-23.8408679962158,42.3424911499023,6.9574875831604,-24.3331031799316,41.8716430664063,4.02914953231812 ,-26.4941844940186,39.0164794921875,6.02960872650146,-25.5218563079834,39.9251556396484,5.76432228088379,-24.3132247924805 ,42.571662902832,6.771484375,-24.0989532470703,42.1516990661621,7.10267925262451,-25.8187999725342,43.0784912109375 ,4.83520603179932,-25.9118518829346,43.1455383300781,5.12484979629517,-26.3130931854248,42.3528518676758,5.08477687835693 ,-26.2328262329102,42.2309722900391,4.80738353729248,-26.2721271514893,42.3940773010254,5.55777406692505,-27.4076194763184 ,40.3714485168457,5.78906440734863,-27.3259334564209,40.2308349609375,5.42932653427124,-26.127269744873,42.3827819824219 ,5.2936635017395,-27.4691963195801,40.310604095459,4.7547812461853,-27.3994464874268,40.2410430908203,5.05457639694214 ,-27.6189594268799,39.8422622680664,4.65212154388428,-27.294132232666,40.3606758117676,4.49731540679932,-26.3379230499268 ,39.9064865112305,8.10357666015625,-26.3093795776367,40.3351631164551,7.92245149612427,-25.9464550018311,40.5943756103516 ,7.80378723144531,-26.6902542114258,38.767448425293,8.80242824554443,-27.0914497375488,38.7889060974121,8.33900260925293 ,-26.9938430786133,38.1222038269043,9.0299596786499,-27.3781890869141,38.1783409118652,8.58977794647217,-26.7387390136719 ,40.2936134338379,7.08049869537354,-27.1438694000244,39.9151344299316,6.99638652801514,-27.078519821167,40.3383636474609 ,6.88743591308594,-27.2102470397949,40.2485847473145,6.06977415084839,-26.0227088928223,42.4649887084961,5.74219417572021 ,-27.5707168579102,39.9309616088867,5.81999683380127,-26.3443927764893,40.2721290588379,7.53774356842041,-24.6449184417725 ,42.8606872558594,6.61178350448608,-24.9284400939941,42.0807762145996,7.13394355773926,-25.5023517608643,42.3086242675781 ,6.64509868621826,-25.3115196228027,43.0999031066895,6.07989645004272,-25.8049125671387,42.5218391418457,6.16582107543945 ,-25.7740497589111,42.4401054382324,6.50868082046509,-25.2683982849121,43.7581748962402,5.62061786651611,-25.55246925354 ,43.2300834655762,5.92629480361938,-23.2498245239258,42.3686256408691,5.56239986419678,-25.6443176269531,43.1836395263672 ,5.72843170166016,-25.404899597168,43.7405166625977,5.31508016586304,-26.0778408050537,42.5206146240234,6.04322719573975 ,-25.7941913604736,43.1893310546875,5.52624320983887,-25.8493099212646,43.1688117980957,5.33820009231567,-27.0476417541504 ,40.2691268920898,6.52142858505249,-24.6178779602051,40.8027114868164,5.59365653991699,-23.9773197174072,41.5689315795898 ,4.54149913787842,-25.5075569152832,40.646915435791,7.91557359695435,-24.5568523406982,41.5289115905762,7.71010732650757 ,-25.4690227508545,43.5844230651855,4.3893346786499,-23.4851150512695,42.3853034973145,5.17827129364014,-23.0789699554443 ,41.6929740905762,5.76250648498535,-22.9913101196289,40.6891403198242,7.15628480911255,-28.5560054779053,37.5645484924316 ,4.30806970596313,-27.0946807861328,39.3230667114258,5.13024616241455,-26.7749156951904,39.1556663513184,5.41575574874878 ,-27.4108295440674,39.8179130554199,5.15595531463623,-29.1609916687012,36.7120780944824,5.84303522109985,-26.1010341644287 ,39.0728492736816,6.80517244338989,-27.1171913146973,39.7844200134277,6.29439306259155,-28.754114151001,36.5392189025879 ,7.46010780334473,-26.174861907959,39.2433433532715,7.18090915679932,-25.7506484985352,39.1920318603516,7.30489063262939 ,-27.5133361816406,36.9361305236816,8.96808910369873,-23.738862991333,40.4270858764648,6.7562952041626,-24.3904209136963 ,40.5501098632813,7.136474609375,-23.4358806610107,41.0184288024902,5.73205804824829,-25.4248676300049,43.9473648071289 ,4.77484750747681,-25.4191493988037,43.8811645507813,4.5657262802124,-24.9597187042236,43.013126373291,3.73045754432678 ,-10.3164577484131,31.3168678283691,5.01786422729492,-10.4693489074707,31.2689456939697,4.63314199447632,-10.5240421295166 ,31.170467376709,4.48853874206543,-10.660719871521,31.3138275146484,3.91740942001343,-10.77490234375,31.469934463501 ,3.34196209907532,-10.6482152938843,31.5425624847412,2.44958591461182,-10.7324857711792,30.8154754638672,2.55173945426941 ,-10.7644014358521,31.6591262817383,3.23164176940918,-10.2808208465576,30.2793865203857,5.12975692749023,-10.6183176040649 ,30.2281265258789,4.64286136627197,-10.7760057449341,30.1664028167725,4.10758399963379,-10.9403457641602,30.1010570526123 ,3.54219555854797,-10.7129125595093,30.5542430877686,2.78098440170288,-10.5687103271484,27.5677471160889,5.52671241760254 ,-10.8588371276855,27.1532573699951,5.07090520858765,-11.0879936218262,26.626407623291,4.60105657577515,-11.1306085586548 ,26.04709815979,4.08966159820557,-11.0336875915527,25.9920654296875,3.46891665458679,-10.1512355804443,31.335147857666 ,5.21716260910034,-10.1344223022461,30.2982311248779,5.32907390594482,-10.4207248687744,27.5892753601074,5.72850036621094 ,-10.5767116546631,26.8494491577148,5.02568817138672,-10.4960432052612,27.2717418670654,5.53186178207397,-10.8061676025391 ,26.3513717651367,4.55436325073242,-10.9394845962524,25.787410736084,4.06502723693848,-10.9920883178711,25.724142074585 ,3.48293972015381,-11.0105819702148,25.9963417053223,3.22727370262146,-10.8338022232056,29.7751216888428,2.6583685874939 ,-10.8335161209106,29.8614139556885,2.92862701416016,-10.7086763381958,30.6338901519775,2.42993354797363,-10.7769727706909 ,30.848165512085,2.06661295890808,-10.7256050109863,31.4149341583252,1.97352004051209,-10.5714511871338,32.3552322387695 ,2.34100723266602,-10.6839933395386,31.7842426300049,1.91300749778748,-9.78507804870605,31.3338642120361,5.21721887588501 ,-9.87252616882324,30.2970352172852,5.36267328262329,-10.1591758728027,27.5860157012939,5.76210689544678,-10.4396133422852 ,27.3521747589111,5.68618774414063,-10.1944417953491,27.2868728637695,5.69989347457886,-10.2716274261475,27.1709403991699 ,5.48325634002686,-10.3740825653076,26.7456321716309,4.97552013397217,-10.6062746047974,26.249885559082,4.5052752494812 ,-10.6482419967651,25.6966972351074,3.98919558525085,-10.8514442443848,25.6230316162109,3.45295071601868,-11.0032596588135 ,25.8384418487549,3.3116455078125,-10.8768291473389,25.7538566589355,3.20788168907166,-10.8864469528198,25.9693126678467 ,3.08493828773499,-10.7101306915283,29.7232685089111,2.51960349082947,-10.6073989868164,30.6013603210449,2.29236936569214 ,-10.6865501403809,30.8208541870117,1.92806482315063,-10.635461807251,31.3915271759033,1.83091568946838,-10.5932502746582 ,31.7602348327637,1.76836478710175,-9.30952262878418,27.6096858978271,5.51130199432373,-9.36321449279785,27.1908302307129 ,5.43078088760376,-9.49075031280518,27.0709991455078,5.24157238006592,-10.0877647399902,26.1372394561768,4.31180095672607 ,-10.194766998291,25.6682167053223,3.90583229064941,-10.329719543457,25.5889053344727,3.29478788375854,-10.3173160552979 ,25.7066307067871,3.03983330726624,-10.3007287979126,25.9241466522217,2.91840529441834,-9.58683490753174,30.544189453125 ,2.06859755516052,-9.49680805206299,30.7271423339844,1.58154821395874,-9.35418319702148,31.3025550842285,1.47600340843201 ,-9.26891422271729,31.6173439025879,1.4452668428421,-10.1851902008057,32.705379486084,4.81975841522217,-10.3326625823975 ,32.658447265625,4.44952201843262,-10.5901002883911,32.6262359619141,4.10170269012451,-10.6844825744629,32.5894355773926 ,3.782958984375,-10.7659769058228,31.854585647583,3.87953209877014,-10.6804103851318,31.72825050354,4.22633266448975 ,-10.767786026001,32.5557403564453,3.49398136138916,-10.8224496841431,31.9832763671875,3.56911110877991,-10.6785020828247 ,32.4997863769531,3.11047172546387,-10.0196094512939,32.7230186462402,5.0197606086731,-9.6869421005249,32.7223472595215 ,5.02937936782837,-10.0704555511475,33.6436462402344,4.67708396911621,-10.2198791503906,33.6019630432129,4.2960090637207 ,-10.4739217758179,33.5704498291016,3.95791888237,-10.5781259536743,33.525318145752,3.62588310241699,-10.6515369415283 ,33.4999389648438,3.3558030128479,-9.90494632720947,33.6611785888672,4.87709617614746,-9.5853099822998,33.6472320556641 ,4.89282941818237,-9.81949043273926,29.6289615631104,2.35337352752686,-10.4194192886353,32.6480674743652,4.33592128753662 ,-10.5391340255737,31.3583889007568,4.50618028640747,-10.6981973648071,31.5539741516113,3.89310121536255,-10.811616897583 ,31.6938400268555,3.3666524887085,-10.7361822128296,32.5229110717773,3.25604343414307,-10.6453189849854,33.4683799743652 ,3.12315583229065,-10.3043689727783,33.5925903320313,4.19207048416138,-10.6319732666016,33.4152908325195,3.01470398902893 ,-10.3322820663452,32.3530235290527,2.34796810150146,-10.4097709655762,31.530782699585,2.44121956825256,-10.4909515380859 ,31.4116535186768,2.01891303062439,-10.4493608474731,31.7783679962158,1.95387315750122,-9.30763244628906,31.3428630828857 ,1.69849765300751,-9.27701187133789,31.7112808227539,1.63962948322296,-10.4460687637329,32.5039863586426,3.1677417755127 ,-10.5314064025879,31.6679840087891,3.2867476940155,-10.0142679214478,33.5728530883789,4.17846965789795,-9.86453628540039 ,33.6150016784668,4.55991649627686,-9.97907161712646,32.6791954040527,4.70206594467163,-10.2583742141724,32.6154098510742 ,4.15401935577393,-10.3493843078613,33.5028266906738,3.56188273429871,-10.2622365951538,33.5427513122559,3.85136222839355 ,-10.4926147460938,32.5556602478027,3.59924221038818,-9.80005741119385,33.6264266967773,4.66476440429688,-9.81684875488281 ,32.6917915344238,4.80013179779053,-8.66097354888916,32.6172485351563,4.52869319915771,-9.61614990234375,33.617748260498 ,4.65667963027954,-8.78214836120605,33.6332511901855,4.21878576278687,-10.4077816009521,33.4588775634766,3.14650082588196 ,-10.4150419235229,33.4819145202637,3.32972025871277,-10.50719165802,32.5252380371094,3.34993386268616,-10.3950653076172 ,33.4113655090332,3.04695606231689,-10.6592054367065,32.8283767700195,2.68546414375305,-10.4200668334961,32.8382186889648 ,2.69870090484619,-10.1139011383057,33.5614242553711,4.05157613754272,-9.27635383605957,28.1130962371826,5.45821094512939 ,-8.77882862091064,32.6230430603027,4.73766326904297,-8.70695400238037,33.5800857543945,4.55812740325928,-8.99448394775391 ,31.0272312164307,5.08935070037842,-9.15069961547852,29.4090843200684,5.3089280128479,-8.69561290740967,32.595043182373 ,4.38728666305542,-9.04243087768555,32.6055297851563,3.77995300292969,-9.26224613189697,32.6090660095215,3.21469688415527 ,-9.35247230529785,32.4662780761719,2.86970043182373,-9.35247230529785,31.6366233825684,2.86970067024231,-9.52705860137939 ,31.4878177642822,2.16713285446167,-4.29888534545898,21.2389469146729,2.84800100326538,-3.93148970603943,21.6375637054443 ,2.01565790176392,-2.89970541000366,24.9143161773682,2.17081499099731,-2.62015056610107,26.2532806396484,2.3701069355011 ,-4.41971921920776,21.6550331115723,4.03259515762329,-8.20820713043213,24.2063522338867,5.04386711120605,-8.81881809234619 ,23.5065650939941,4.60944509506226,-9.62073135375977,24.0104999542236,1.51200270652771,-9.83751201629639,22.8306541442871 ,2.4107723236084,-9.29598808288574,23.2301254272461,4.08172798156738,-2.31491231918335,29.7624473571777,3.23570966720581 ,-2.28898024559021,28.4519901275635,2.82041788101196,-9.44373893737793,26.8204231262207,1.29200780391693,-9.5324125289917 ,25.5558605194092,1.46676802635193,-3.17484617233276,23.3372783660889,2.0396089553833,-7.73149299621582,25.2387638092041 ,5.56792831420898,-6.34912157058716,24.9886512756348,5.79081058502197,-6.1414589881897,23.8302707672119,5.62265491485596 ,-8.50175857543945,30.9236011505127,0.143369674682617,-8.91572570800781,29.3362884521484,0.629053473472595,-9.6224308013916 ,23.0851593017578,1.67339825630188,-9.57697582244873,22.9747257232666,3.24728608131409,-3.43016672134399,22.3351707458496 ,1.91197001934052,-5.56419515609741,22.756872177124,5.25122785568237,-4.97053909301758,22.3994827270508,4.87527322769165 ,-10.183985710144,24.0114269256592,1.48732244968414,-10.3995380401611,23.0030460357666,2.38215231895447,-10.1714305877686 ,23.2381954193115,1.69905114173889,-10.0658826828003,24.2001304626465,3.24561882019043,-10.1078948974609,23.1566581726074 ,3.35979390144348,-9.73544216156006,24.5126132965088,4.35015201568604,-9.77918720245361,23.3942604064941,4.31036186218262 ,-9.15197277069092,24.8433399200439,5.12198305130005,-9.17974853515625,23.6991958618164,5.01077795028687,-8.81389045715332 ,25.4027652740479,5.52354097366333,-8.11821174621582,25.076171875,6.03452777862549,-8.62082099914551,24.2555313110352 ,5.50145721435547,-4.94333648681641,24.0129108428955,6.1410551071167,-5.44337701797485,22.7728080749512,5.75631809234619 ,-6.00277996063232,23.6588459014893,6.15437316894531,-5.51579332351685,24.4081516265869,6.2461986541748,-4.21660566329956 ,23.4138717651367,5.43742179870605,-4.60753440856934,22.092170715332,5.30762243270874,-3.64753818511963,22.7981567382813 ,4.36176633834839,-3.97580409049988,21.4336051940918,4.30237817764282,-3.93899321556091,21.0546340942383,3.03482794761658 ,-3.00800609588623,22.134693145752,2.17809700965881,-3.47336459159851,21.4021892547607,2.19615602493286,-10.2548227310181 ,25.4462604522705,2.23816800117493,-10.0921211242676,25.3244571685791,1.40582799911499,-10.1016530990601,25.5772495269775 ,4.32744646072388,-9.49295043945313,25.6799545288086,5.24583053588867,-8.74037933349609,26.1106243133545,5.74385833740234 ,-7.91368246078491,26.0554676055908,6.26549863815308,-4.82580804824829,24.7727489471436,6.31932830810547,-3.97736215591431 ,24.154411315918,5.67784929275513,-3.38183975219727,23.6130828857422,4.72761106491089,-2.68674302101135,23.211181640625 ,2.26280474662781,-9.40937805175781,29.5380821228027,0.473168909549713,-9.00727462768555,31.0707683563232,0.0614502280950546 ,-9.27804946899414,31.2962856292725,1.37091720104218,-9.69148540496826,29.6239604949951,1.64869022369385,-8.30988502502441 ,32.8178291320801,5.27076625823975,-8.49545383453369,30.7285480499268,5.71441602706909,-7.65233707427979,30.4246578216553 ,6.46737289428711,-7.61286640167236,32.386043548584,6.16658735275269,-4.8137845993042,30.9995460510254,6.55148696899414 ,-5.17962551116943,29.5996227264404,6.77977800369263,-4.09050512313843,30.391019821167,6.23229169845581,-2.47493076324463 ,29.0429763793945,4.76166772842407,-2.26273012161255,28.844123840332,4.130455493927,-1.83292031288147,28.6096267700195 ,3.26814723014832,-8.04264640808105,34.5006980895996,-0.720708727836609,-7.95204257965088,35.5625,4.51369094848633 ,-7.40072584152222,35.2431945800781,5.5053391456604,-4.30788898468018,32.4267234802246,6.14424514770508,-3.70565128326416 ,31.6386547088623,5.78515100479126,-2.07473802566528,29.742862701416,4.24215078353882,-1.89405024051666,29.2105312347412 ,3.50888156890869,-7.91234683990479,36.6562614440918,0.0448120012879372,-7.69625759124756,37.7195739746094,3.7429211139679 ,-7.29021406173706,37.5362548828125,4.64640092849731,-6.16034173965454,36.3572311401367,5.5187726020813,-4.74860525131226 ,34.8689727783203,5.76224040985107,-3.77248501777649,33.7298736572266,5.60572528839111,-3.26117038726807,32.9967346191406 ,5.2520923614502,-6.08498001098633,25.5943832397461,6.55991077423096,-6.18661165237427,24.7244873046875,6.31633234024048 ,-10.0716009140015,24.0060024261475,1.4139244556427,-10.0697593688965,23.165225982666,1.6226841211319,-10.3156270980835 ,22.8844871520996,2.36132836341858,-10.029746055603,23.0400581359863,3.33455991744995,-9.70546817779541,23.283145904541 ,4.26745891571045,-9.1259241104126,23.5924777984619,4.93032312393188,-8.48777198791504,24.2007484436035,5.37533950805664 ,-7.91638708114624,25.1751689910889,5.94517946243286,-6.03314876556396,23.5322189331055,5.99998188018799,-5.52076005935669 ,22.6739807128906,5.62737798690796,-4.69226598739624,22.0745868682861,5.19560813903809,-4.09655714035034,21.4006404876709 ,4.22978782653809,-4.06289386749268,21.0164031982422,3.00006198883057,-3.60996341705322,21.3400974273682,2.08173608779907 ,-9.97756958007813,25.3492584228516,1.34460115432739,-3.06863784790039,22.1662006378174,2.02713704109192,-2.74755239486694 ,23.2384338378906,2.15618586540222,-8.82112979888916,31.0097255706787,-0.0560440123081207,-1.86797857284546,28.614429473877 ,3.1319215297699,-7.94068431854248,34.379695892334,-0.816163599491119,-1.89337337017059,29.1634712219238,3.36262130737305 ,-7.79942846298218,36.6775054931641,-0.0194739997386932,-7.60380077362061,37.7963676452637,3.67964386940002,-7.22692108154297 ,37.5835647583008,4.55090570449829,-6.1025857925415,36.4501762390137,5.41515636444092,-4.72125434875488,34.9616813659668 ,5.66096448898315,-3.76971030235291,33.8117027282715,5.53015184402466,-3.28945708274841,33.111946105957,5.19547367095947 ,-2.06053113937378,30.4330711364746,3.89472961425781,-2.10025668144226,30.606517791748,3.93692255020142,-6.30683612823486 ,24.863639831543,6.18582439422607,-6.11436796188354,23.6850185394287,6.04688310623169,-7.78097343444824,26.0277538299561 ,6.21321439743042,-9.29177093505859,29.477855682373,0.412787765264511,-2.07259583473206,30.3804836273193,4.01975345611572 ,-6.21463012695313,25.6692790985107,6.46301651000977,-7.55111742019653,30.3920917510986,6.39775085449219,-7.45050239562988 ,32.3329658508301,6.15083980560303,-7.27913808822632,35.1760787963867,5.55547094345093,-6.99305248260498,37.2315101623535 ,4.84737014770508,-6.91676378250122,37.2658882141113,4.76304244995117,-2.28811597824097,26.3853244781494,2.56221866607666 ,-2.23476219177246,26.3820266723633,2.68446254730225,-2.61036849021912,26.5165481567383,3.75161123275757,-2.90822100639343 ,26.7460823059082,4.73223924636841,-3.56000971794128,27.1050662994385,5.75402736663818,-4.27271509170532,27.3566989898682 ,6.4875373840332,-5.66520214080811,27.6100559234619,6.7059268951416,-5.7662296295166,27.5774803161621,6.57018709182739 ,-7.6766791343689,27.9425983428955,6.35362434387207,-7.80297374725342,27.9894924163818,6.4398775100708,-8.66915988922119 ,28.0921421051025,5.84028482437134,-9.87279415130615,26.798620223999,1.15454745292664,-9.99865055084229,26.792085647583 ,1.22897827625275,-10.1591415405273,26.8642349243164,2.07426524162292,-2.20996499061584,29.9731330871582,4.60764837265015 ,-2.10399508476257,30.5140609741211,4.07979536056519,-5.30119848251343,29.6463642120361,6.68332195281982,-4.92222452163696 ,31.0695972442627,6.47152519226074,-4.48160314559937,32.5191307067871,6.0656886100769,-4.14768695831299,34.1093292236328 ,5.51155948638916,-4.15120220184326,34.2035255432129,5.43701601028442,-1.98364222049713,27.8785266876221,2.93078923225403 ,-1.94235408306122,27.87815284729,3.06318759918213,-2.36977767944336,28.0997009277344,3.98143076896667,-2.63067173957825 ,28.2976512908936,4.7458701133728,-4.41857099533081,29.2386493682861,6.59666156768799,-7.56398439407349,30.5628261566162 ,6.71118402481079,-7.49685859680176,32.181510925293,6.48458242416382,-7.468101978302,32.5037994384766,6.4351601600647 ,-7.3045482635498,35.2156181335449,5.87828588485718,-6.73865842819214,32.2596702575684,6.63548994064331,-6.20531892776489 ,36.3156089782715,5.84047269821167,-7.05880689620972,37.1785850524902,5.21333408355713,-4.72433471679688,34.8476142883301 ,6.0802116394043,-6.41811656951904,34.4748916625977,6.24666404724121,-7.55984258651733,30.338529586792,6.73191165924072 ,-7.69254875183105,27.9261207580566,6.6812539100647,-7.82909297943115,26.0347461700439,6.52567291259766,-6.32481861114502 ,25.6593074798584,6.7205548286438,-7.95692873001099,25.1614246368408,6.27644300460815,-6.40386581420898,24.8511695861816 ,6.50110149383545,-5.83545446395874,27.5759601593018,6.88720178604126,-5.36732721328735,29.6078033447266,7.00625324249268 ,-4.96170663833618,31.019079208374,6.80995941162109,-5.2938666343689,29.7915210723877,6.99704647064209,-4.8523211479187 ,31.2468891143799,6.76324796676636,-4.41397762298584,32.6190986633301,6.37181329727173,-5.5450701713562,31.6847229003906 ,6.82576894760132,-5.13066625595093,33.2722244262695,6.48147821426392,-4.08279800415039,34.1065979003906,5.84938621520996 ,-8.26431655883789,35.4175186157227,0.438631266355515,-8.11979484558105,35.6021957397461,4.41319370269775,-8.47711849212646 ,32.8561134338379,5.23995113372803,-8.70630931854248,30.8051433563232,5.64721870422363,-8.90147686004639,28.0989265441895 ,5.80129289627075,-8.94633674621582,26.8793144226074,5.76223707199097,-8.9966287612915,26.0767917633057,5.69587278366089 ,-8.94582271575928,25.184455871582,5.4431848526001,-9.03204917907715,25.4176197052002,5.50921106338501,-9.29705619812012 ,25.0721836090088,5.14672422409058,-9.88245296478271,24.7685241699219,4.34585094451904,-10.1949939727783,24.4736366271973 ,3.25530242919922,-10.2092380523682,24.4950656890869,2.25282216072083,-10.2866735458374,24.5622482299805,2.40504479408264 ,-10.3208980560303,25.4584903717041,2.32878184318542,-10.2282390594482,26.8746757507324,2.19782257080078,-9.76998329162598 ,29.6250152587891,1.78370225429535,-8.92996597290039,33.1470336914063,1.12682414054871,-8.41434097290039,35.5315437316895 ,0.57951408624649,-8.01955699920654,36.6328430175781,0.68460077047348,-10.1855125427246,24.3762168884277,2.39254546165466 ,-4.88428688049316,27.5448017120361,6.62644290924072,-5.35536670684814,25.2809295654297,6.34503364562988,-2.41899251937866 ,31.5349407196045,4.39026832580566,-2.42222929000854,31.4518260955811,4.50084161758423,-2.70244908332825,30.6618022918701 ,5.13954162597656,-3.01469254493713,29.4937610626221,5.50692224502563,-3.18643069267273,28.6368103027344,5.63183641433716 ,-2.88213300704956,32.440502166748,4.80782842636108,-2.88537335395813,32.3740043640137,4.91404724121094,-3.25417995452881 ,31.2281646728516,5.60531949996948,-3.57900738716125,29.9968357086182,6.06741666793823,-3.84910750389099,29.0165786743164 ,6.32851791381836,-3.78587698936462,22.6147346496582,4.40958499908447,-4.40473413467407,23.2173252105713,5.3618688583374 ,-5.05243253707886,23.7748394012451,5.98046350479126,-5.15192556381226,23.9108238220215,6.03752183914185,-5.09901189804077 ,24.0283966064453,6.06259202957153,-4.98978471755981,24.8948726654053,6.22997379302979,-4.42884540557861,27.3927001953125 ,6.41243886947632,-3.99426865577698,29.0578422546387,6.27595472335815,-3.70775318145752,30.0652732849121,5.9921236038208 ,-3.36599230766296,31.2928047180176,5.52768707275391,-3.21600556373596,23.382287979126,3.66167640686035,-3.13256430625916 ,23.4489612579346,3.96262264251709,-2.60371732711792,26.5579433441162,3.99766564369202,-2.36950469017029,28.1366233825684 ,4.2071647644043,-2.27195620536804,28.888053894043,4.36787366867065,-2.10059666633606,29.8359222412109,4.44796895980835 ,-3.65240097045898,22.6352996826172,4.09371852874756,-3.45793771743774,22.3002586364746,3.45713114738464,-5.93335342407227 ,23.5488815307617,6.10497140884399,-3.43184065818787,31.3598518371582,5.57760047912598,-3.32914447784424,31.375696182251 ,5.48063993453979,-3.22046899795532,31.3329010009766,5.47011470794678,-2.69772386550903,30.7720069885254,4.98422145843506 ,-2.19492959976196,30.0498847961426,4.42499971389771,-8.23526859283447,35.5774803161621,4.07809209823608,-7.92610263824463 ,36.6413269042969,3.91050696372986,-8.87887573242188,32.999683380127,1.01147544384003,-8.57392024993896,32.4365539550781 ,-0.315257996320724,-8.39839649200439,32.313835144043,-0.395357549190521,-7.97919321060181,35.5220642089844,-0.356160432100296 ,-7.86904096603394,35.527904510498,-0.407945513725281,-1.97695231437683,29.7982711791992,3.62867569923401,-1.983323097229 ,29.7955074310303,3.76431751251221,-7.58679962158203,37.4158172607422,1.93770897388458,-7.68300867080688,37.3115768432617 ,1.93738102912903,-8.13943958282471,36.6269798278809,1.88212752342224,-8.5756254196167,35.5532608032227,1.8499995470047 ,-7.59529972076416,37.4961585998535,2.80867648124695,-7.67323303222656,37.3749008178711,2.84015107154846,-8.04368209838867 ,36.6341552734375,2.89631700515747,-8.44843769073486,35.5653686523438,2.96404600143433,-7.65189218521118,37.476619720459 ,0.7927166223526,-7.81682682037354,37.3234367370605,0.713629484176636,-7.95430898666382,36.6380043029785,0.543556153774261 ,-9.06007099151611,33.3199729919434,2.17655181884766,-8.49046039581299,34.5470542907715,4.30356645584106,-8.2700252532959 ,34.4476547241211,4.76078844070435,-8.10432147979736,34.3945121765137,4.835862159729,-10.2321319580078,26.9309692382813 ,2.76746225357056,-9.23867607116699,32.4755554199219,2.36720180511475,-9.01028919219971,33.5867919921875,3.4520092010498 ,-10.8878717422485,26.9042167663574,2.97664642333984,-11.0122699737549,26.9303855895996,3.1198832988739,-11.033429145813 ,26.9423446655273,3.3592324256897,-11.1435317993164,27.0207023620605,3.98125410079956,-11.048360824585,27.2650470733643 ,4.51753187179565,-10.8523368835449,27.507209777832,5.0268440246582,-10.5490579605103,27.7487545013428,5.500075340271 ,-10.4028263092041,27.7594146728516,5.7024450302124,-10.1423120498657,27.7449855804443,5.73791122436523,-6.21765995025635 ,31.8104839324951,6.43567132949829,-6.20972585678101,31.6967830657959,6.77317142486572,-6.41693687438965,30.1916389465332 ,6.91217041015625,-6.4039478302002,30.032678604126,6.60236120223999,-6.44509267807007,29.9831085205078,6.92495393753052 ,-6.80701875686646,27.7775402069092,6.78988933563232,-7.08851909637451,25.8666687011719,6.62717199325562,-7.16845560073853 ,25.0319118499756,6.39875030517578,-7.1069540977478,25.0596961975098,6.07496929168701,-7.04650259017944,25.1148319244385 ,5.67837047576904,-10.8846216201782,19.2333583831787,2.99382495880127,-10.8735446929932,18.8200950622559,3.42978501319885 ,-10.8541011810303,18.3279361724854,2.93692708015442,-10.8832063674927,18.8148536682129,2.53401899337769,-10.5200786590576 ,17.9692115783691,4.34590482711792,-10.4846277236938,17.3935279846191,3.72583603858948,-9.73058032989502,17.2792644500732 ,5.04154920578003,-8.62687110900879,16.9248275756836,5.41275405883789,-10.3979377746582,18.2120380401611,4.33148908615112 ,-10.7226848602295,19.0455799102783,3.37352299690247,-9.62259387969971,17.5917854309082,5.03659582138062,-8.54744338989258 ,17.1974773406982,5.40801620483398,-10.830249786377,19.4356498718262,2.91760802268982,-10.7492761611938,19.799617767334 ,2.88753604888916,-10.7113447189331,19.2958393096924,3.12222003936768,-10.6793050765991,19.3370323181152,3.71836709976196 ,-10.3031015396118,18.9596462249756,4.79261493682861,-9.37976932525635,18.4917240142822,5.57988595962524,-8.29885768890381 ,18.1507701873779,5.97931909561157,-10.5200023651123,20.1408176422119,4.01744413375854,-10.1408576965332,19.8712902069092 ,5.0645899772644,-9.1905345916748,19.5542163848877,5.89608812332153,-8.09999942779541,19.2621593475342,6.31005191802979 ,-10.6673736572266,20.3554096221924,2.97603225708008,-10.6598329544067,19.6969032287598,2.0004780292511,-10.7596883773804 ,19.3268871307373,2.08992290496826,-10.4535999298096,21.4124336242676,3.39937400817871,-10.2665662765503,21.9323348999023 ,3.11421298980713,-10.0877733230591,22.2021808624268,3.65796494483948,-10.3209276199341,21.613899230957,3.94974088668823 ,-9.45490837097168,22.599365234375,4.69469785690308,-9.74240303039551,21.900821685791,5.07761812210083,-8.51956844329834 ,22.74631690979,5.46489000320435,-8.80372142791748,21.9650821685791,5.91362905502319,-7.38228607177734,22.6113510131836 ,5.85867595672607,-7.64917707443237,21.797420501709,6.33266592025757,-9.71762371063232,21.6514225006104,4.97159385681152 ,-10.2602586746216,21.3834095001221,3.80861616134644,-8.81839847564697,21.6574687957764,5.79326295852661,-7.70153617858887 ,21.4740352630615,6.20392799377441,-10.3768091201782,21.0263004302979,3.39235901832581,-10.5269012451172,20.9093341827393 ,3.0945188999176,-10.4725208282471,21.2443161010742,3.25417709350586,-10.3247337341309,21.2503776550293,3.48597979545593 ,-9.9367561340332,20.8117370605469,5.13730812072754,-10.357063293457,20.9667377471924,4.0233039855957,-9.07955837249756 ,20.6500606536865,5.98157691955566,-7.97893238067627,20.4087715148926,6.39955759048462,-10.3478708267212,21.2740516662598 ,2.29400300979614,-10.3102588653564,21.5990142822266,2.51279091835022,-10.6137924194336,20.0307559967041,2.17805695533752 ,-10.5380973815918,20.4603633880615,2.3185830116272,-10.4403657913208,20.9075145721436,2.34123802185059,-10.5755195617676 ,19.6662559509277,3.11494088172913,-4.94140100479126,17.8739280700684,4.00129222869873,-4.97612380981445,17.4636917114258 ,3.53536009788513,-5.33359622955322,17.0651969909668,3.87273693084717,-5.26266002655029,17.5366821289063,4.38091611862183 ,-6.29105854034424,16.4343070983887,4.43670701980591,-6.21092700958252,16.9835529327393,5.07637119293213,-7.39537382125854 ,16.3496284484863,4.7204909324646,-7.39244985580444,16.7444496154785,5.43789577484131,-6.20721101760864,17.2534675598145 ,5.04187917709351,-5.27760076522827,17.8000946044922,4.29654598236084,-7.3501033782959,17.071985244751,5.42181491851807 ,-5.03394889831543,18.2387256622314,4.07053804397583,-4.78293418884277,18.4348983764648,3.89891910552979,-4.87793016433716 ,18.0741367340088,3.92661571502686,-5.10237407684326,18.0128650665283,4.07302713394165,-6.11509895324707,18.0017032623291 ,5.50254487991333,-5.29883909225464,18.1063289642334,4.63043785095215,-7.23719167709351,17.9726581573486,5.96456384658813 ,-5.95145320892334,18.9130210876465,5.77475690841675,-5.18693590164185,18.920955657959,4.92147922515869,-7.04634428024292 ,19.0347785949707,6.28103971481323,-4.6217041015625,18.9564056396484,4.13157510757446,-4.62470102310181,18.3164520263672 ,3.02352404594421,-4.7248101234436,17.9464931488037,3.11292791366577,-4.51037693023682,20.0530071258545,4.40684223175049 ,-4.71004295349121,20.3304882049561,4.90087223052979,-4.56726694107056,20.9394416809082,4.59377288818359,-4.35948419570923 ,20.5811710357666,4.11555480957031,-5.43325090408325,20.9151668548584,5.8080849647522,-5.26133918762207,21.6401462554932 ,5.40557098388672,-6.46559047698975,21.430269241333,6.30997800827026,-6.23515176773071,22.2238006591797,5.85213756561279 ,-5.52689790725708,20.6928539276123,5.68198585510254,-4.81517601013184,20.1379241943359,4.73164081573486,-6.54590797424316 ,21.1376686096191,6.1784839630127,-4.5201358795166,19.8827934265137,4.26319885253906,-4.56601285934448,19.5458679199219 ,4.10498094558716,-4.73723888397217,19.736328125,4.3483510017395,-4.71576499938965,19.9674053192139,4.4367880821228 ,-4.97689390182495,19.7361011505127,4.93532705307007,-5.74875497817993,19.8537902832031,5.84723806381226,-6.81026935577393 ,20.1309928894043,6.36625528335571,-4.31273984909058,19.8936004638672,3.31704807281494,-4.27538108825684,20.218620300293 ,3.53579592704773,-4.57782793045044,18.6501159667969,3.20124411582947,-4.50393390655518,19.0801334381104,3.34146690368652 ,-4.40440893173218,19.5268745422363,3.36442470550537,-10.8431606292725,18.7861003875732,2.44014716148376,-10.8136606216431 ,18.3081283569336,2.83754062652588,-10.4479379653931,17.3849391937256,3.61761784553528,-10.7177801132202,19.3129863739014 ,1.98497116565704,-10.6137723922729,19.7006969451904,1.89566814899445,-10.0405826568604,22.2164440155029,3.56492018699646 ,-10.2168340682983,21.952543258667,3.02945613861084,-9.41473770141602,22.6083793640137,4.58975505828857,-8.49272918701172 ,22.7543716430664,5.34907007217407,-7.37042284011841,22.621467590332,5.80231285095215,-10.2635154724121,21.6095638275146 ,2.41238903999329,-10.303807258606,21.2677593231201,2.18731999397278,-10.4946060180664,20.4584579467773,2.21803116798401 ,-10.568359375,20.0347576141357,2.07991313934326,-10.3974113464355,20.8989925384521,2.24075198173523,-5.01321506500244 ,17.4525814056396,3.42841100692749,-6.31224870681763,16.4389591217041,4.31868124008179,-7.50874900817871,16.3715438842773 ,4.59366989135742,-4.75371122360229,17.9487895965576,2.99597120285034,-4.64967203140259,18.3364906311035,2.90667319297791 ,-4.38688993453979,20.619026184082,4.01771926879883,-4.5924391746521,20.9702587127686,4.48846530914307,-5.2790470123291 ,21.6623973846436,5.2908182144165,-6.23852682113647,22.2387561798096,5.73119115829468,-4.29944610595703,20.2453670501709 ,3.42338895797729,-4.3397068977356,19.9035568237305,3.19832611083984,-4.6042652130127,18.6705570220947,3.09091997146606 ,-4.53046989440918,19.0942478179932,3.22904109954834,-4.43331813812256,19.5347919464111,3.25175809860229,-7.14405488967896 ,23.9239101409912,5.65244483947754,-7.72733306884766,24.1056079864502,5.47485208511353,-6.49145746231079,23.8214664459229 ,5.74526596069336,-6.57458209991455,23.7810745239258,5.88676261901855,-7.17207098007202,23.8744888305664,5.79700756072998 ,-6.33581447601318,22.3091201782227,5.86684417724609,-7.37212753295898,22.6595153808594,5.87273836135864,-8.39966011047363 ,22.7811946868896,5.51699161529541,-7.70609426498413,24.041223526001,5.63918304443359,-10.4553146362305,20.3231563568115 ,3.23345708847046,-4.8855938911438,18.9875259399414,4.20944452285767,-12.9825353622437,10.6990766525269,0.844066858291626 ,-9.8389253616333,9.49735069274902,3.17830562591553,-11.0604057312012,9.69466495513916,2.83606219291687,-12.2783145904541 ,10.1694393157959,2.32021045684814,-11.1309700012207,17.2452526092529,2.54634737968445,-6.70162296295166,9.45798778533936 ,2.01733946800232,-6.35541391372681,13.8766040802002,2.74241423606873,-10.977728843689,15.8941841125488,3.68716859817505 ,-10.7990818023682,16.9118976593018,3.76513743400574,-10.4266233444214,17.058614730835,3.71678614616394,-6.86694240570068 ,15.0654487609863,4.30618381500244,-6.77264976501465,16.0406074523926,4.2553129196167,-6.98142719268799,16.3520584106445 ,4.27755880355835,-7.20883512496948,14.8501043319702,4.19879293441772,-7.98394060134888,14.8931560516357,4.27120780944824 ,-7.44306898117065,13.9275770187378,4.12924718856812,-8.74346828460693,12.9331617355347,3.70751571655273,-9.87979412078857 ,12.9458312988281,3.54778790473938,-9.63815402984619,11.1837491989136,3.82065033912659,-10.0478620529175,13.1829557418823 ,3.4830207824707,-9.99559593200684,15.3371992111206,3.90790176391602,-10.7288208007813,15.5589847564697,3.66854119300842 ,-10.4732303619385,16.7847728729248,4.27841186523438,-10.7414121627808,16.6679668426514,3.98403811454773,-10.7801752090454 ,16.2029762268066,4.13446187973022,-10.5451440811157,16.0811061859131,4.50478982925415,-10.8121566772461,15.845027923584 ,3.79723620414734,-10.5918312072754,15.5369853973389,3.99283981323242,-9.8531322479248,16.5995903015137,4.68393802642822 ,-10.0126037597656,15.9286870956421,4.81835794448853,-9.79456615447998,16.833423614502,4.26952695846558,-10.0595607757568 ,15.3670091629028,4.39897203445435,-9.90972423553467,15.9085750579834,4.89311122894287,-9.76378726959229,16.6339874267578 ,4.74866676330566,-9.63790130615234,16.8885154724121,4.3174467086792,-10.073974609375,13.2618465423584,3.8615391254425 ,-10.0949974060059,13.3742513656616,4.06807279586792,-9.93121242523193,13.1100921630859,3.85573220252991,-9.93566513061523 ,13.3040990829468,4.16085386276245,-8.04547023773193,16.2815895080566,5.02835702896118,-7.9120717048645,16.4583759307861 ,4.65794610977173,-8.78007221221924,13.1069211959839,4.28314590454102,-8.10359859466553,15.5371837615967,5.12908601760864 ,-8.78834533691406,12.9926528930664,4.06723880767822,-7.94412708282471,16.2080841064453,4.99466705322266,-8.15055847167969 ,14.9756393432617,4.70975494384766,-7.21701669692993,16.1169757843018,4.808424949646,-6.93839693069458,15.8880319595337 ,4.60305595397949,-7.13570690155029,15.0910511016846,4.39565181732178,-7.50561809539795,14.9041223526001,4.49521207809448 ,-7.49339818954468,15.455249786377,5.00152015686035,-7.12892198562622,15.4541702270508,4.72877597808838,-11.960880279541 ,8.69771385192871,-0.577697277069092,-11.5644798278809,8.31119823455811,0.719232320785522,-9.98414611816406,7.77302694320679 ,2.08830571174622,-7.71604347229004,7.88915014266968,0.612167298793793,-7.12976217269897,8.13741683959961,-0.166500449180603 ,-5.55260038375854,13.8195657730103,2.01810598373413,-8.30417728424072,14.0667724609375,4.03354072570801,-8.42895317077637 ,14.1100664138794,4.42929649353027,-8.49184799194336,14.1423807144165,4.64357471466064,-9.92403411865234,14.4718418121338 ,4.48916864395142,-10.0594902038574,14.4750490188599,4.39139747619629,-10.0653839111328,14.5165367126465,4.18185234069824 ,-10.0170516967773,14.4528198242188,3.73347544670105,-10.6282987594604,14.4023456573486,3.52199649810791,-11.1519660949707 ,14.6864976882935,3.16790533065796,-6.0496187210083,16.210147857666,3.62929964065552,-5.52847290039063,16.432502746582 ,2.72674059867859,-5.1138014793396,16.7278308868408,1.33719766139984,-4.04904317855835,20.0559196472168,2.61531281471252 ,-2.9605450630188,24.8765544891357,1.97136247158051,-8.53282833099365,25.5782012939453,-0.167569786310196,-7.2937650680542 ,25.4874401092529,-1.2387101650238,-6.69637012481689,20.8182544708252,-0.437250256538391,-6.78883934020996,19.5983657836914 ,-0.931529581546783,-7.79493093490601,21.0932102203369,-0.550122499465942,-8.24923992156982,19.919095993042,-0.793532073497772 ,-9.85042095184326,21.1344356536865,1.4140750169754,-6.34611320495605,30.1234512329102,-2.03741860389709,-3.00656962394714 ,29.5073680877686,-1.64515149593353,-7.61297512054443,30.4295654296875,-1.03620731830597,-6.9022479057312,23.9386539459229 ,-0.779977381229401,-7.73476505279541,24.0522499084473,-0.513817012310028,-8.55404090881348,24.098482131958,-0.00429400010034442 ,-6.07827711105347,23.7995223999023,-0.819948017597198,-9.09116077423096,24.1179275512695,0.669364988803864,-8.82097244262695 ,21.1544666290283,-0.0337934046983719,-10.2090940475464,19.7163257598877,1.54994201660156,-4.55348634719849,20.4048652648926 ,0.333448827266693,-3.93064165115356,20.2453536987305,1.51111578941345,-9.47872734069824,19.8350925445557,-0.205843016505241 ,-4.6202917098999,19.166784286499,0.233948364853859,-4.28858947753906,18.9484272003174,1.52898347377777,-11.0581102371216 ,15.5564050674438,-2.05969452857971,-9.50326728820801,15.4665489196777,-3.09563803672791,-7.92887163162231,15.1350746154785 ,-3.01180362701416,-11.6202058792114,11.8649482727051,-3.26003575325012,-11.0205383300781,9.33058452606201,-3.03233504295349 ,-9.53904724121094,9.11799430847168,-3.27702498435974,-11.9436025619507,10.5540609359741,-3.18816900253296,-10.7425470352173 ,18.7471675872803,1.2680721282959,-8.49007797241211,11.4475383758545,-3.97062849998474,-5.36550998687744,17.0619297027588 ,3.7610821723938,-5.16892051696777,17.7754745483398,0.453923910856247,-5.31424140930176,17.0466690063477,0.200038015842438 ,-7.15298080444336,18.741907119751,-1.61566770076752,-7.37722444534302,17.8142032623291,-2.12625551223755,-9.97894859313965 ,18.9974765777588,-0.436901986598969,-10.341685295105,18.2764854431152,-0.9609055519104,-8.89304828643799,18.1247253417969 ,-2.02328205108643,-8.64704895019531,19.093147277832,-1.49808049201965,-13.1437149047852,9.83644771575928,-0.0898819267749786 ,-7.65170097351074,8.7472505569458,-2.73987889289856,-8.46947383880615,10.3621530532837,-4.15896272659302,-8.62954139709473 ,8.94725894927979,-3.22196006774902,-12.451057434082,9.42442798614502,1.84179270267487,-11.1691188812256,9.07114124298096 ,2.62692499160767,-9.90255355834961,8.8194408416748,2.72341012954712,-7.16649913787842,8.72556114196777,1.34422612190247 ,-5.3003306388855,17.4527645111084,2.83650398254395,-3.26730012893677,23.4545974731445,1.46349477767944,-8.75578308105469 ,16.6359462738037,4.55581665039063,-9.19984149932861,23.223331451416,0.919034540653229,-8.06709289550781,23.1356105804443 ,-0.251145720481873,-7.29653930664063,23.1012573242188,-0.328930914402008,-6.29547739028931,23.0096740722656,-0.55564147233963 ,-4.18616390228271,22.5705108642578,0.401069700717926,-3.58845591545105,22.4750595092773,1.47205495834351,-5.47275114059448 ,14.6036062240601,-0.850140690803528,-6.11708164215088,10.841118812561,-1.87295246124268,-6.24943923950195,9.87539100646973 ,-2.08078861236572,-7.33695316314697,8.59652614593506,-1.79107713699341,-5.08327388763428,17.59348487854,1.47210896015167 ,-4.16270542144775,20.8470230102539,2.31506681442261,-3.93086719512939,21.1655197143555,1.51504921913147,-4.44866847991943 ,21.3714351654053,0.426523655653,-6.53822183609009,21.7981338500977,-0.452313303947449,-7.59814071655273,22.0085067749023 ,-0.446690887212753,-8.50289535522461,22.029935836792,-0.0925770252943039,-9.50238704681396,22.0265922546387,1.2452974319458 ,-9.9237585067749,22.0253047943115,1.93845045566559,-10.0915231704712,22.1119232177734,2.2798593044281,-4.96741628646851 ,14.2409353256226,0.383612722158432,-5.56505680084229,10.3705987930298,-0.355221420526505,-5.70119285583496,9.17764377593994 ,-0.628493666648865,-12.0434112548828,15.1893663406372,1.87365484237671,-13.1068925857544,11.2270574569702,-0.273940622806549 ,-13.0960330963135,10.077766418457,-0.766599833965302,-11.8764390945435,9.0099458694458,-1.23530924320221,-11.2157173156738 ,17.9049034118652,1.06689035892487,-12.2845411300659,15.3625402450562,0.230948716402054,-8.41444396972656,9.42227172851563 ,2.86235332489014,-8.31547164916992,8.57957553863525,2.64106416702271,-8.73727798461914,7.74562072753906,1.61132657527924 ,-4.36162328720093,19.290943145752,2.58747148513794,-4.14960670471191,19.6016788482666,1.52699172496796,-4.56807804107666 ,19.7895317077637,0.255820155143738,-6.74493312835693,20.2061576843262,-0.660114347934723,-8.02211284637451,20.5025787353516 ,-0.674666404724121,-9.1498498916626,20.4374542236328,-0.119818203151226,-10.0297594070435,20.4253807067871,1.48200845718384 ,-4.66221380233765,18.1281929016113,2.47184419631958,-8.2876443862915,11.0393209457397,3.44339275360107,-6.68867588043213 ,11.1985206604004,2.32214212417603,-5.47720193862915,11.5189723968506,-0.246140405535698,-5.84426736831665,11.9166507720947 ,-1.67456555366516,-8.32313919067383,12.6680364608765,-3.58693480491638,-9.90711784362793,12.8571147918701,-3.5450963973999 ,-11.3485116958618,13.0391597747803,-2.74964785575867,-12.8485689163208,12.8292036056519,-0.356148988008499,-12.7300281524658 ,12.3465728759766,1.19345235824585,-11.7639751434326,11.9589366912842,2.69383668899536,-10.679515838623,11.5935859680176 ,3.43924808502197,-8.73316478729248,13.1642179489136,4.12282800674438,-9.32520866394043,12.4223680496216,3.61370396614075 ,-8.1046724319458,12.4125928878784,3.56111311912537,-8.73285865783691,13.2765378952026,4.34218788146973,-9.93310737609863 ,13.5609140396118,4.23305797576904,-10.0881977081299,13.585015296936,4.12997817993164,-10.072416305542,13.4894390106201 ,3.91964173316956,-4.44678640365601,18.7491111755371,2.5683581829071,-1.67838835716248,30.9184226989746,3.30307817459106 ,-1.89689028263092,29.7673435211182,3.16651940345764,-1.48467254638672,30.6766414642334,-0.48382967710495,-1.7151745557785 ,29.5061206817627,-0.388914227485657,-6.41028499603271,31.5402603149414,-2.31122922897339,-6.5544581413269,30.2641086578369 ,-2.10232305526733,-3.24189710617065,29.6542873382568,-1.98031175136566,-3.03120398521423,30.9302921295166,-2.10327386856079 ,-7.3973708152771,31.8299655914307,-1.48837494850159,-4.9675407409668,29.930456161499,-2.2727963924408,-4.79024934768677 ,31.2233638763428,-2.47925400733948,-9.770339012146,25.5654220581055,1.26073324680328,-9.85008811950684,24.02073097229 ,1.29150104522705,-9.17105197906494,25.6180114746094,0.238064646720886,-2.88398265838623,23.4223175048828,1.98747265338898 ,-2.61478137969971,24.807092666626,2.1091001033783,-2.56298756599426,24.7260589599609,1.49513530731201,-5.90561532974243 ,25.2055416107178,-1.69911050796509,-7.58888959884644,25.4344844818115,-1.33208465576172,-7.79577255249023,23.9981422424316 ,-0.78133100271225,-6.14341640472412,23.8105087280273,-1.14786982536316,-8.66501331329346,25.5624618530273,-0.423734158277512 ,-8.7342700958252,24.0813789367676,-0.242949396371841,-9.33136463165283,24.1186485290527,0.482575416564941,-8.29786491394043 ,32.2326049804688,-0.562160134315491,-8.68968200683594,30.9222812652588,-0.11330646276474,-7.68600034713745,30.5278968811035 ,-1.28661370277405,-2.92589402198792,23.4454593658447,1.46366250514984,-9.41505527496338,25.5495491027832,1.24658966064453 ,-4.78476047515869,29.7980289459229,-1.9929701089859,-5.70963573455811,25.2698745727539,-1.25907444953918,-4.05296611785889 ,24.9229850769043,-1.07812261581421,-1.94002258777618,29.5671463012695,2.09152460098267,-1.39111661911011,29.5243148803711 ,1.60391390323639,-1.16515398025513,30.6779403686523,1.79934179782867,-1.99050807952881,29.5482559204102,0.0322921723127365 ,-3.18263959884644,24.8409614562988,0.259835541248322,-3.07358360290527,24.7372646331787,-0.0272905211895704,-3.43370652198792 ,23.3883876800537,-0.0178845003247261,-3.67771339416504,23.4529304504395,0.146148890256882,-7.45057773590088,25.4977970123291 ,-1.47797501087189,-8.73250484466553,25.5885562896729,-0.433179765939713,-3.90392780303955,24.9208126068115,-1.19340264797211 ,-2.86472368240356,24.7657909393311,-0.011822797358036,-1.67441141605377,29.4105987548828,0.0618886798620224,-1.62392604351044 ,29.4356174468994,2.00085210800171,-1.67769014835358,29.4277153015137,-0.223505362868309,-2.7168333530426,29.4735317230225 ,-1.74457061290741,-6.49990940093994,30.0751152038574,-2.27876472473145,-7.80963659286499,30.3906288146973,-1.30389845371246 ,-6.38909339904785,30.0582504272461,-2.29767990112305,-4.85936498641968,29.7197151184082,-2.37516093254089,-4.67512845993042 ,29.6648483276367,-2.31193327903748,-2.94767832756042,29.4246482849121,-1.96411395072937,-7.28996992111206,25.404899597168 ,-1.47658205032349,-5.74078607559204,25.2103366851807,-1.61829805374146,-2.64102792739868,24.8287105560303,1.95682787895203 ,-2.86312246322632,24.7931175231934,0.245301082730293,-8.79531478881836,30.7474327087402,-0.181498900055885,-9.689621925354 ,25.6373138427734,1.0596616268158,-8.80739498138428,25.5922794342041,-0.354497760534287,-7.88753986358643,30.4436473846436 ,-1.22313511371613,-4.01765489578247,24.8804779052734,-1.40720963478088,-5.62358236312866,25.1768970489502,-1.58816146850586 ,-7.27921152114868,7.94315719604492,1.11295449733734,-8.45061302185059,7.78688621520996,2.35225319862366,-9.98027992248535 ,7.93115139007568,2.6541576385498,-11.047269821167,8.17732429504395,2.32532548904419,-12.2088813781738,8.54818725585938 ,1.43931353092194,-12.7967157363892,8.97920799255371,-0.303374022245407,-12.7254018783569,9.27799606323242,-1.02359855175018 ,-11.641375541687,9.70815277099609,-3.30064821243286,-8.47558498382568,9.39766216278076,-3.92700147628784,-6.57959508895874 ,8.94561100006104,-2.03293538093567,-6.16128015518188,8.42148208618164,-0.628806829452515,-5.90454864501953,11.2130336761475 ,1.26543307304382,-5.86439990997314,9.76661205291748,1.05129361152649,-6.4172043800354,8.82000827789307,0.554828345775604 ,-6.70876121520996,8.10266876220703,0.363239943981171,-11.5861968994141,9.22538471221924,-2.12491774559021,-12.200852394104 ,9.57963943481445,-2.46441507339478,-12.4662971496582,10.3750247955322,-2.37286257743835,-12.2984609603882,11.5450801849365 ,-1.93835651874542,-12.0142498016357,12.9365711212158,-1.61892592906952,-11.8456659317017,15.5341367721558,-1.05990767478943 ,-10.8601474761963,18.0437698364258,0.00694957328960299,-10.4829511642456,18.8434734344482,0.322913497686386,-9.9399585723877 ,19.8044834136963,0.532618045806885,-9.69186401367188,20.4600238800049,0.586481034755707,-9.4355001449585,21.1805152893066 ,0.577586591243744,-9.07950115203857,22.0507411956787,0.495223522186279,-8.69851875305176,23.1948986053467,0.245849296450615 ,-10.6943483352661,7.97740316390991,1.57557725906372,-13.0784387588501,3.61403799057007,-0.387950003147125,-12.8692493438721 ,4.23402261734009,-1.01961994171143,-13.2165336608887,2.53907871246338,-1.87767601013184,-13.5263395309448,2.08693170547485 ,-1.34906196594238,-12.6889476776123,3.79180359840393,-3.03223824501038,-12.6107130050659,5.16541290283203,-1.5162969827652 ,-7.36189794540405,2.22572088241577,-0.511403024196625,-7.24243593215942,1.49262166023254,-1.1971937417984,-7.38548421859741 ,2.73870873451233,-0.895566046237946,-10.3434047698975,5.47505474090576,1.90369594097137,-9.15979862213135,5.06887292861938 ,1.77098703384399,-10.1975927352905,6.29252099990845,1.84975600242615,-12.2415580749512,5.60246610641479,0.202421009540558 ,-12.090048789978,5.80620241165161,-0.00566900009289384,-12.0125188827515,5.61300611495972,-2.9149649143219,-12.4945268630981 ,5.89366149902344,-1.5122481584549,-12.288122177124,8.53469848632813,-0.661285996437073,-10.0408840179443,7.49992418289185 ,2.37230896949768,-10.8403167724609,7.73344993591309,1.77250003814697,-11.8306217193604,8.09218406677246,0.793708145618439 ,-12.4908933639526,4.76606798171997,0.651835978031158,-11.4628305435181,5.29583501815796,1.38202595710754,-11.2533559799194 ,6.22149276733398,1.20992994308472,-7.73828792572021,4.31135606765747,-0.0834570005536079,-7.36683702468872,5.3244800567627 ,-0.599408984184265,-7.6968674659729,5.50474500656128,0.0933770015835762,-8.26981353759766,3.98673677444458,1.2019350528717 ,-7.79680776596069,2.94683361053467,0.581601023674011,-7.7964768409729,3.48446178436279,0.153815001249313,-7.51640558242798 ,2.0345447063446,0.0756840035319328,-7.43048810958862,0.782142877578735,-0.238389015197754,-7.2607421875,0.956801772117615 ,-0.765235006809235,-6.80239152908325,7.91194725036621,-0.18758200109005,-7.47235488891602,7.62311172485352,0.697570025920868 ,-7.10959148406982,5.24039697647095,-1.22375595569611,-7.15163803100586,2.74867963790894,-1.48444199562073,-13.5382461547852 ,1.32446682453156,-2.14271998405457,-13.7687711715698,1.20945179462433,-1.80898201465607,-13.7865257263184,0.619542837142944 ,-1.92636489868164,-13.8336715698242,0.692019820213318,-1.84797203540802,-13.275411605835,1.67556774616241,-2.74921131134033 ,-7.40010452270508,0.384649813175201,-0.667990982532501,-7.50181102752686,0.383126795291901,-0.246661990880966,-7.4935622215271 ,0.295691817998886,-0.348820000886917,-12.5759296417236,3.31683683395386,-0.301581025123596,-13.0212831497192,1.85254681110382 ,-1.13734900951386,-12.1232957839966,3.64946269989014,-2.99026703834534,-9.45137023925781,4.73715019226074,1.26457500457764 ,-10.3113994598389,5.03661108016968,1.32882297039032,-11.0880308151245,4.88765811920166,1.00634694099426,-8.09423446655273 ,1.9600578546524,-0.0253519993275404,-7.59573745727539,2.73560667037964,-1.80734515190125,-7.79568910598755,1.32014381885529 ,-1.33666396141052,-8.01313209533691,0.81684684753418,-0.335142999887466,-13.0765466690063,0.547282814979553,-1.87284886837006 ,-13.2974462509155,1.06627893447876,-1.44371700286865,-13.384578704834,0.557447791099548,-1.44182395935059,-13.3176727294922 ,0.441362798213959,-1.55895602703094,-12.6973543167114,1.59488666057587,-2.65003705024719,-7.99213790893555,0.389781802892685 ,-0.759375989437103,-8.08319854736328,0.458545804023743,-0.323071002960205,-8.32713985443115,2.78943872451782,0.408313006162643 ,-11.4524984359741,5.48662090301514,-2.54562592506409,-11.9944133758545,4.41262006759644,0.512112021446228,-8.72068881988525 ,3.83208870887756,0.878419995307922,-7.89028644561768,4.91850280761719,-1.55553901195526,-8.07210922241211,0.331777811050415 ,-0.469390988349915,-13.578953742981,0.723118782043457,-2.18435406684875,-7.49672365188599,7.75520133972168,0.68902975320816 ,-6.83512830734253,8.03997993469238,-0.185473844408989,-7.51865577697754,7.76859617233276,0.681343555450439,-7.49779415130615 ,7.75494289398193,0.689776122570038,-10.035210609436,7.63272142410278,2.3439085483551,-10.8281936645508,7.86738109588623 ,1.75704264640808,-11.800537109375,8.24606800079346,0.791858673095703,-12.2553968429565,8.65648651123047,-0.652927100658417 ,-11.0982122421265,8.02239799499512,-3.42560195922852,-9.46175289154053,7.83151817321777,-3.76968502998352,-9.53649520874023 ,9.05328750610352,-3.69054698944092,-11.2665252685547,9.25102138519287,-3.36247611045837,-7.74278497695923,7.43448352813721 ,-2.94955992698669,-7.38186693191528,8.56259822845459,-3.01850891113281,-9.60508728027344,6.65043973922729,-3.84368181228638 ,-11.0673961639404,6.79414558410645,-3.49132299423218,-10.9090061187744,5.57353115081787,-3.57667922973633,-9.63772296905518 ,5.45862197875977,-3.88288307189941,-8.27865886688232,4.78107595443726,-0.436830013990402,-8.41143703460693,5.26224374771118 ,-3.16524219512939,-8.09701728820801,6.30043649673462,-3.07590699195862,-8.33622741699219,4.25156307220459,-0.654892027378082 ,-8.56227493286133,4.79242277145386,-0.544656991958618,-8.30243015289307,5.03695392608643,-2.40793538093567,-7.96504688262939 ,4.61126375198364,-2.47431945800781,-10.6739253997803,5.43777275085449,-3.33545923233032,-9.72132396697998,5.32747507095337 ,-3.48603796958923,-8.81702327728271,5.16764783859253,-2.94468188285828,-12.6551265716553,-1.1994891166687,-3.36292910575867 ,-12.6812009811401,-1.81898605823517,-3.45780301094055,-12.3639993667603,-1.8203901052475,-4.15120506286621,-12.3217802047729 ,-0.63344419002533,-4.16046380996704,-12.2639923095703,-0.401669174432755,8.50428581237793,-12.5707387924194,0.20113180577755 ,8.32594203948975,-10.8718614578247,0.0163587927818298,8.17275428771973,-10.9237976074219,-0.546308159828186,8.32784652709961 ,-14.7877540588379,-1.05375719070435,2.97234511375427,-14.9249362945557,-0.975921213626862,3.67831110954285,-14.9135770797729 ,-1.4562371969223,3.6388852596283,-14.836766242981,-1.48871624469757,3.06584906578064,-14.3331708908081,-1.00264811515808 ,1.14896094799042,-14.330602645874,-1.48213016986847,1.29319405555725,-13.8479719161987,-1.26087915897369,0.0456670001149178 ,-13.8695812225342,-0.733412146568298,0.03099500015378,-13.1961078643799,-0.682488203048706,-1.74533605575562,-13.2561845779419 ,-0.267994195222855,-1.52676200866699,-11.4108591079712,-0.704488158226013,-1.43015098571777,-12.3429641723633,-1.29646420478821 ,0.430689007043839,-11.3169937133789,-0.633855223655701,-5.43679094314575,-11.3333263397217,0.324207812547684,-5.34990787506104 ,-12.2897281646729,0.29148280620575,-4.15824413299561,-8.32677936553955,0.285849809646606,-4.91607284545898,-8.31762981414795 ,-0.635810136795044,-4.98647403717041,-7.6367335319519,-0.634946227073669,-3.36898493766785,-7.64520740509033,0.290466815233231 ,-3.37043809890747,-8.45136737823486,-0.397370189428329,-0.0700289979577065,-8.27342128753662,-0.602357149124146,-0.857776939868927 ,-8.65068626403809,-1.2792421579361,1.60765111446381,-8.70820045471191,-0.889460206031799,1.7451479434967,-8.64849853515625 ,-1.00339412689209,3.05018901824951,-8.62150001525879,-1.4825621843338,3.14198398590088,-9.57847595214844,-0.684286117553711 ,7.05243635177612,-9.74707221984863,-1.13764321804047,7.29845905303955,-9.13314819335938,-0.710844159126282,4.47330093383789 ,-8.91466617584229,-0.682887196540833,2.9658670425415,-8.77879047393799,-0.749664187431335,3.01093411445618,-8.95795822143555 ,-0.772237181663513,4.49947786331177,-8.83813381195068,-1.01499819755554,2.99324297904968,-8.99276161193848,-1.04494822025299 ,4.47025680541992,-9.83040523529053,-0.401700139045715,6.98186683654785,-9.82599067687988,-0.687571167945862,6.98602962493896 ,-10.9493865966797,-0.0893782079219818,7.89767122268677,-10.8741941452026,0.094377800822258,7.85318899154663,-10.0532426834106 ,-0.354868203401566,6.91146230697632,-10.897255897522,0.103166803717613,7.72143602371216,-14.7188110351563,-0.979119181632996 ,3.75472784042358,-14.6068019866943,-1.05330717563629,3.03254795074463,-14.5829191207886,-0.793511152267456,3.01690411567688 ,-14.697904586792,-0.660182237625122,3.76196217536926,-13.7142362594604,-0.10202220082283,7.11313772201538,-14.6809797286987 ,-0.7016361951828,5.42782211303711,-14.631495475769,-0.364508181810379,5.4440450668335,-13.6660346984863,0.0949728041887283 ,7.06012010574341,-14.3699359893799,-0.789545178413391,3.0537269115448,-14.5029563903809,-0.657171249389648,3.8249819278717 ,-14.4187536239624,-0.348812192678452,5.51281881332397,-13.6329202651978,0.0565158165991306,6.87230396270752,-14.1662549972534 ,-0.738821148872375,1.21650302410126,-14.1754846572876,-1.00521314144135,1.21228504180908,-13.6872749328613,-0.738984107971191 ,0.0732659995555878,-13.7096109390259,-0.471031188964844,0.033585999161005,-14.035943031311,-0.733028173446655,1.27240085601807 ,-13.4088859558105,-0.425395220518112,0.0608309991657734,-13.2755498886108,-0.115318208932877,-1.12270414829254,-13.0557823181152 ,-0.0804621875286102,-1.07290995121002,-13.068621635437,-0.272237211465836,-1.50460398197174,-12.1045236587524,0.593280792236328 ,-4.14091396331787,-12.1193447113037,0.299488812685013,-4.08871221542358,-11.7931108474731,0.634377837181091,-4.0986008644104 ,-11.2735862731934,0.719097793102264,-5.15583181381226,-11.0836772918701,0.714048802852631,-4.91463613510132,-11.2509965896606 ,0.347086817026138,-5.14843416213989,-9.70920753479004,0.712418794631958,-4.88926315307617,-9.66789436340332,0.723107814788818 ,-5.11510419845581,-8.42803859710693,0.688478827476501,-4.66739702224731,-8.63442325592041,0.710941791534424,-4.48368692398071 ,-9.70443153381348,0.322440803050995,-5.12207412719727,-8.41786479949951,0.301627814769745,-4.63700103759766,-8.54096221923828 ,1.32825684547424,-4.59067678451538,-8.0074405670166,1.22241985797882,-3.54224491119385,-8.04832363128662,3.33798861503601 ,-3.17081809043884,-8.67496490478516,3.68233776092529,-4.08474493026733,-7.8871545791626,0.281323790550232,-3.40791130065918 ,-7.85482978820801,0.642930805683136,-3.39109182357788,-8.13710689544678,0.850011765956879,-0.800619006156921,-8.28289604187012 ,2.25278782844543,-0.764258027076721,-8.43003940582275,-0.157711207866669,-0.858825087547302,-8.32692623138428,0.194879800081253 ,-0.860629975795746,-8.52881240844727,1.08460581302643,1.5599889755249,-8.53865146636963,1.25685679912567,0.95725691318512 ,-8.5357666015625,1.04977083206177,0.68256801366806,-8.56322479248047,0.566658794879913,1.55015695095062,-8.61183166503906 ,-0.425197243690491,-0.065311998128891,-8.89294719696045,-0.911311149597168,1.74111795425415,-8.79252433776855,-0.633555173873901 ,1.78056597709656,-8.5108757019043,-0.101994186639786,0.000698000018019229,-12.351466178894,0.262531816959381,7.76197957992554 ,-12.4312696456909,0.319948792457581,7.95019292831421,-12.4569158554077,0.0845468044281006,8.01053619384766,-13.8941841125488 ,0.467521786689758,3.5477340221405,-14.2799406051636,0.0541978180408478,3.53433966636658,-14.2880802154541,0.228603810071945 ,3.23221206665039,-13.9849233627319,0.619996786117554,3.28688502311707,-13.6181030273438,0.60854184627533,6.72478246688843 ,-14.4104146957397,0.390134811401367,5.51559019088745,-14.0933837890625,0.810905814170837,5.57533311843872,-13.5700387954712 ,0.956074774265289,6.39302587509155,-13.8625802993774,0.872631728649139,1.93436586856842,-13.1583271026611,1.43147194385529 ,2.3733389377594,-13.2172756195068,0.964958786964417,2.69189310073853,-13.7842702865601,0.587464809417725,2.18322610855103 ,-12.4318504333496,2.01933884620667,2.85682392120361,-12.5068588256836,1.38099682331085,3.19997715950012,-10.8144855499268 ,1.08549284934998,7.2902398109436,-12.2734613418579,1.22508585453033,7.33208894729614,-12.0701723098755,1.55995881557465 ,6.43063402175903,-10.6623516082764,1.37352383136749,6.64068698883057,-10.2347812652588,1.02646374702454,6.79868507385254 ,-9.9075870513916,0.466396808624268,6.90527582168579,-10.8436546325684,0.709422826766968,7.58692121505737,-9.14296531677246 ,0.764719843864441,4.57133388519287,-8.77550888061523,0.210297808051109,4.60690784454346,-9.33541011810303,1.13661181926727 ,5.08978414535522,-9.58052635192871,1.00581681728363,4.8911828994751,-9.13905906677246,1.31009376049042,4.46836519241333 ,-8.60823631286621,2.43657970428467,1.41375398635864,-9.29010486602783,2.85858273506165,1.81270503997803,-9.71137714385986 ,1.92487692832947,4.1512770652771,-10.0960521697998,3.6826000213623,1.92870700359344,-10.3535137176514,2.31923270225525 ,3.88383197784424,-11.0846672058105,3.66235661506653,1.6281658411026,-11.884204864502,3.3869047164917,1.2024530172348 ,-11.4515314102173,2.37581968307495,3.49674892425537,-12.5265493392944,2.84761667251587,0.686360001564026,-9.78671073913574 ,1.51062774658203,5.43640899658203,-10.3746118545532,1.4129958152771,4.93102598190308,-11.4895238876343,1.64424395561218 ,3.8477509021759,-12.6008195877075,2.62157368659973,-1.41014099121094,-12.6772747039795,2.34999775886536,-1.6421799659729 ,-11.6258430480957,3.59273362159729,-3.56614398956299,-11.6031827926636,3.99701476097107,-3.46526503562927,-12.4911642074585 ,2.62973380088806,-1.39286494255066,-11.5037336349487,4.0191216468811,-3.41252398490906,-11.6477117538452,4.7365288734436 ,-2.9123420715332,-10.6752662658691,5.05888700485229,-3.54006409645081,-10.7329788208008,4.73007202148438,-4.00870704650879 ,-10.6857452392578,4.2472767829895,-3.93189001083374,-9.69830322265625,4.9626088142395,-3.85036325454712,-8.79135131835938 ,4.77585315704346,-3.6133337020874,-9.78085136413574,4.31696367263794,-4.04107522964478,-8.89351463317871,4.26686573028564 ,-3.65700674057007,-8.9768648147583,4.52922391891479,-3.72932100296021,-9.71503639221191,4.64414882659912,-4.14905595779419 ,-8.40865230560303,3.99431371688843,-2.67772603034973,-8.20167064666748,4.30993890762329,-2.70235347747803,-8.29178237915039 ,3.96888780593872,-2.69999694824219,-8.25935554504395,3.6027410030365,-2.96513390541077,-8.38647270202637,2.6651337146759 ,-0.669996023178101,-10.858624458313,3.8950297832489,-4.24050617218018,-10.7416467666626,4.23215389251709,-4.03672790527344 ,-8.85915946960449,4.25843381881714,-3.7103579044342,-8.82767200469971,3.88678979873657,-3.7574679851532,-12.3203287124634 ,0.834373831748962,7.62035703659058,-9.93011093139648,3.94925880432129,-4.2280740737915,-9.87972068786621,4.26634979248047 ,-4.15164184570313,-12.9109563827515,2.17576670646667,-0.0332330018281937,-14.0064544677734,0.482846796512604,4.31903982162476 ,-14.3811511993408,0.0602388046681881,4.10731220245361,-13.4566841125488,0.878975749015808,4.61020994186401,-13.403115272522 ,1.2346738576889,5.79850912094116,-11.8692226409912,1.38857781887054,5.39097785949707,-10.4531908035278,1.27224385738373 ,5.82744979858398,-9.69781684875488,0.861148834228516,6.06470108032227,-9.44259929656982,0.973586857318878,5.75430202484131 ,-9.40438365936279,-0.639721155166626,5.52785587310791,-9.22590160369873,-0.697531223297119,5.58653020858765,-9.23768520355225 ,-0.931419134140015,5.58402299880981,-9.00774478912354,-0.931771218776703,5.6596360206604,-9.0374927520752,-1.4571191072464 ,5.59735012054443,-9.46249103546143,-1.257688164711,6.91396951675415,-13.292179107666,-1.68793714046478,5.62558317184448 ,-13.1693201065063,-1.85254228115082,4.26037883758545,-8.5069637298584,2.64702773094177,-0.68382602930069,-9.65490818023682 ,0.303108811378479,-5.39795684814453,-9.64590740203857,-0.636101245880127,-5.46976900100708,-13.3323211669922,0.870737791061401 ,0.106257990002632,-13.1983003616333,1.25750684738159,0.129934996366501,-14.1630382537842,0.0562498010694981,1.75165700912476 ,-11.8925170898438,1.22653579711914,-4.12294006347656,-11.7359161376953,3.29843640327454,-3.70321798324585,-12.968563079834 ,0.846431851387024,-1.85224604606628,-11.1305932998657,1.33086395263672,-5.03836584091187,-10.9273080825806,3.65749144554138 ,-4.48123788833618,-9.87257671356201,1.327556848526,-5.05620718002319,-9.91583061218262,3.76873588562012,-4.53192090988159 ,-8.98668956756592,-0.574045181274414,1.79792904853821,-8.65672206878662,-0.0279552042484283,-0.0313559994101524,-8.17943000793457 ,0.660911798477173,-3.50347018241882,-8.47450065612793,0.253890812397003,-0.846231997013092,-14.9321527481079,-0.684710144996643 ,5.33120679855347,-14.0031642913818,-0.023091197013855,7.31090211868286,-8.79455852508545,-1.03195118904114,4.34719085693359 ,-8.28165912628174,-0.135623186826706,-0.846274018287659,-9.4740161895752,0.293323814868927,6.17530202865601,-13.4723253250122 ,0.37716081738472,0.10164900124073,-8.48273468017578,0.658774793148041,0.337684005498886,-10.9609279632568,-1.51077425479889 ,7.06002187728882,-10.3187446594238,1.55065274238586,4.2269082069397,-9.59263896942139,3.9511775970459,-4.19415378570557 ,-9.63356876373291,4.28190660476685,-4.09221982955933,-13.0830707550049,1.09166383743286,4.85074090957642,-9.5009822845459 ,3.79010367393494,-4.45402717590332,-9.49314403533936,1.32746577262878,-4.98887491226196,-9.63443660736084,-1.82345807552338 ,-5.55305099487305,-9.14707946777344,-1.8240339756012,-5.37717390060425,-9.14474105834961,-1.13805913925171,-5.32897996902466 ,-10.1296558380127,-1.30436015129089,1.09980797767639,-9.15706825256348,-0.688938140869141,-1.10642194747925,-9.71644687652588 ,-0.692696213722229,-1.20543694496155,-11.7091445922852,-1.29876112937927,0.632021009922028,-10.6817436218262,-0.69933021068573 ,-1.29824805259705,-7.84287738800049,-1.89942610263824,-2.52330207824707,-8.77875328063965,-1.89924108982086,-2.67817401885986 ,-9.01303195953369,-1.89940023422241,-1.40217304229736,-8.07610702514648,-1.89954710006714,-1.25296998023987,-10.542236328125 ,-1.89899623394012,-2.25901699066162,-10.6337862014771,-1.89908516407013,-1.68281614780426,-9.75798606872559,-1.89925706386566 ,-1.52582097053528,-9.58230209350586,-1.8990843296051,-2.78612995147705,-8.86343860626221,-1.17721211910248,-2.69335007667542 ,-7.78657960891724,-1.1398001909256,-2.53283405303955,-9.17301654815674,-1.17705416679382,-3.33671307563782,-9.17317295074463 ,-1.82107496261597,-3.33675527572632,-10.0160961151123,-1.82078611850739,-4.27497577667236,-10.0307245254517,-1.17681121826172 ,-4.27237892150879,-8.3118782043457,-1.82325625419617,-5.07190084457397,-7.62548351287842,-1.82155406475067,-3.3740599155426 ,-8.46506309509277,-1.13791620731354,-5.08362579345703,-8.46026515960693,-1.82274115085602,-5.12706708908081,-11.4767608642578 ,-1.1769061088562,-3.52011871337891,-10.9006538391113,-1.23844015598297,-2.66865038871765,-11.4770784378052,-1.82114708423615 ,-3.52008390426636,-9.84247589111328,-1.1772221326828,-3.25193810462952,-9.96317100524902,-1.8214031457901,-3.27331566810608 ,-10.9190912246704,-1.82132935523987,-2.74039530754089,-10.428861618042,-1.1769951581955,-4.06018114089966,-10.4610366821289 ,-1.82123816013336,-4.06565284729004,-9.48378562927246,-1.17734205722809,-2.86669707298279,-10.6097259521484,-1.23897421360016 ,-2.20649099349976,-12.8990774154663,-1.20657515525818,-2.6168200969696,-13.1171998977661,-1.82286524772644,-2.07190489768982 ,-11.3591508865356,-1.82394111156464,-1.71986413002014,-11.2742357254028,-1.23886716365814,-2.35520100593567,-11.2741947174072 ,-1.82093739509583,-2.35528588294983,-11.9274044036865,-1.17659318447113,-3.287513256073,-11.9275131225586,-1.82061421871185 ,-3.28761601448059,-12.8821115493774,-1.82100307941437,-2.7364559173584,-11.2960643768311,-1.82078015804291,-5.52506399154663 ,-10.5416698455811,-1.17897522449493,-4.52999687194824,-10.5710735321045,-1.82089614868164,-4.57293176651001,-11.9882869720459 ,-1.82064211368561,-3.82067108154297,-11.9701585769653,-1.17954611778259,-3.78295111656189,-13.7229709625244,-1.85246515274048 ,4.07452917098999,-13.9891834259033,-1.68774104118347,5.40032720565796,-13.3896598815918,-1.89254415035248,2.17091298103333 ,-13.7069931030273,-1.89270734786987,3.45311307907104,-11.6803979873657,-1.17183661460876,6.71803712844849,-10.9550170898438 ,-1.17081785202026,6.93465709686279,-10.0661144256592,-1.52309918403625,3.26630568504334,-10.6154489517212,-1.52297914028168 ,3.08849000930786,-10.1624965667725,-1.52329015731812,4.62233781814575,-10.7236423492432,-1.30241513252258,6.45850467681885 ,-10.2997093200684,-1.48579919338226,5.18572616577148,-10.8345613479614,-1.48584806919098,5.01272392272949,-11.3562002182007 ,-1.30212819576263,6.27257680892944,-10.0881805419922,-1.51421213150024,2.65602207183838,-10.8880701065063,-1.30171120166779 ,0.885369002819061,-13.4678926467896,-1.15898716449738,6.16615104675293,-13.9943208694458,-1.15951919555664,5.99605989456177 ,-13.3655796051025,-1.30129718780518,5.60819101333618,-13.8941955566406,-1.30118119716644,5.4372501373291,-13.5430736541748 ,-1.52252817153931,3.4598650932312,-12.7836818695068,-1.5225031375885,2.36680197715759,-13.270396232605,-1.52238821983337 ,2.19731903076172,-12.9867782592773,-1.51305818557739,1.67463314533234,-10.7792692184448,-1.52316725254059,4.49874496459961 ,-13.0751523971558,-1.52264511585236,3.7069079875946,-13.1476764678955,-1.49484920501709,4.1362509727478,-10.7174825668335 ,-1.52064311504364,2.52428197860718,-12.4709463119507,-1.5205591917038,1.93447399139404,-13.6438522338867,-1.49474310874939 ,3.9940299987793,-12.8745965957642,-0.650946140289307,8.4034481048584,-13.9453248977661,-0.722079157829285,7.74784088134766 ,-13.9156303405762,-0.485151201486588,7.62993192672729,-12.8607053756714,-0.398309201002121,8.34536361694336,-13.4607906341553 ,-1.44669365882874,6.27358388900757,-11.708643913269,-1.46391832828522,6.78241014480591,-10.7793197631836,-1.82315039634705 ,4.49869823455811,-13.0701332092285,-1.82262897491455,3.70686101913452,-12.7837543487549,-1.82248628139496,2.36675405502319 ,-10.6154985427856,-1.82296216487885,3.08844399452209,-10.7160301208496,-1.82060623168945,2.52090001106262,-12.4723234176636 ,-1.8205281496048,1.93119895458221,-11.8795261383057,-1.81423282623291,1.03212344646454,-10.8229579925537,-1.80831921100616 ,1.30289947986603,-11.3640203475952,-1.61824405193329,6.26081991195679,-10.8520259857178,-1.78294909000397,5.05374383926392 ,-9.80314826965332,-1.43848013877869,7.41763782501221,-10.9754028320313,-0.861802220344543,8.42994117736816,-12.2961120605469 ,-0.648356199264526,8.61242866516113,-8.65401077270508,-1.82298004627228,3.72613310813904,-8.86539459228516,-1.82339334487915 ,5.04450702667236,-8.8872184753418,-1.48762512207031,5.0599570274353,-8.66806697845459,-1.48891818523407,3.69247674942017 ,-10.1625461578369,-1.82327306270599,4.62229013442993,-10.0661649703979,-1.82308197021484,3.26626110076904,-10.0813932418823 ,-1.82114517688751,2.65210604667664,-10.0750875473022,-1.81434404850006,1.47501397132874,-8.62293529510498,-1.80442404747009 ,2.03740906715393,-8.63533592224121,-1.81966722011566,3.12709999084473,-9.42062568664551,-1.61854815483093,6.85899353027344 ,-9.02965927124023,-1.78175115585327,5.64660120010376,-10.7314548492432,-1.61851632595062,6.44674682617188,-10.3171739578247 ,-1.78289532661438,5.22674703598022,-14.3864679336548,-0.906111121177673,7.10352420806885,-14.9273662567139,-1.45178020000458 ,5.79180288314819,-14.9044742584229,-1.14286315441132,5.70820713043213,-14.3360147476196,-0.648855209350586,7.0174560546875 ,-14.0326690673828,-1.44597220420837,6.05647897720337,-15.0419406890869,-1.61634719371796,5.06266784667969,-14.8922185897827 ,-1.7823361158371,3.67723703384399,-15.0164432525635,-1.25586915016174,5.13094186782837,-14.8399982452393,-1.82216322422028 ,3.04614806175232,-14.5743312835693,-1.8219473361969,1.77490186691284,-14.5593872070313,-1.48710322380066,1.7604968547821 ,-13.992299079895,-1.81486225128174,0.45016798377037,-14.2750339508057,-1.8190780878067,1.25383996963501,-12.6187791824341 ,-1.81137526035309,0.900829017162323,-13.035008430481,-1.82034909725189,1.6709531545639,-14.0747489929199,0.169742807745934 ,2.96360206604004,-14.34694480896,-0.806760251522064,2.41914296150208,-14.0129976272583,0.0151758203282952,1.98685896396637 ,-13.2320461273193,0.995352864265442,3.41252398490906,-13.8183240890503,0.575311779975891,3.10841703414917,-11.7101907730103 ,1.42806780338287,4.60914897918701,-12.8916282653809,1.14636778831482,4.1383581161499,-11.7699680328369,1.73828685283661 ,4.85970020294189,-9.52198696136475,1.08574879169464,4.41844892501831,-13.3160743713379,0.899752855300903,3.86537027359009 ,-13.3713436126709,1.15496385097504,4.15981292724609,-13.8948783874512,0.679575800895691,3.84310698509216,-12.9768419265747 ,1.39769685268402,4.42352294921875,-9.23659324645996,0.350918799638748,5.31175899505615,-9.15367317199707,0.277039796113968 ,5.81538581848145,-9.48372840881348,0.930315792560577,5.38133716583252,-14.5383815765381,-0.811367094516754,2.29166293144226 ,-14.5298585891724,-1.02179610729218,2.27179598808289,-14.6525802612305,-1.08479416370392,2.15895390510559,-13.2846403121948 ,1.05016481876373,3.67264294624329,-13.2940397262573,0.677316784858704,-0.52591997385025,-13.2968921661377,1.02870881557465 ,-0.218290001153946,-13.3114624023438,1.28549885749817,0.0937940031290054,-9.78981685638428,3.95010662078857,-4.1819109916687 ,-9.70335102081299,1.32425081729889,-4.92063999176025,-9.75296592712402,3.74058198928833,-4.40943193435669,-13.1841850280762 ,0.992721796035767,-0.190662994980812,-8.36301803588867,0.635875821113586,0.348857998847961,-8.41664695739746,1.24883985519409 ,0.968972980976105,-8.41362190246582,1.04680180549622,0.699701011180878,-7.68235921859741,-1.1401481628418,-3.09662795066834 ,-7.67167282104492,-1.82158994674683,-3.12445998191834,-13.410304069519,0.684789776802063,-0.563890993595123,-8.49754047393799 ,8.82586765289307,-3.57137799263,-8.56192398071289,7.63300037384033,-3.55192399024963,-8.88008213043213,6.491539478302 ,-3.68741536140442,-8.98423480987549,5.36043310165405,-3.71636414527893,-9.18995761871338,5.24069166183472,-3.38439154624939 ,-9.29192543029785,4.87892913818359,-3.74415731430054,-9.34595108032227,4.58668661117554,-3.93918871879578,-9.5681037902832 ,4.3049521446228,-3.94899106025696,-12.3848676681519,6.678795337677,-1.08676695823669,-12.0569562911987,6.41276931762695 ,0.186367496848106,-10.1192378997803,6.89622259140015,2.11103248596191,-7.58461141586304,6.56392812728882,0.395473510026932 ,-7.08461380004883,6.61821365356445,-0.39349552989006,-11.2925672531128,9.14094638824463,-3.39495158195496,-9.52544784545898 ,8.93857860565186,-3.73352289199829,-8.47273540496826,8.70798873901367,-3.6010115146637,-7.35740089416504,8.44426250457764 ,-3.02813529968262,-11.0158061981201,7.09106349945068,1.53347992897034,-11.9018383026123,7.38752317428589,0.497046887874603 ,-12.3512144088745,7.81623363494873,-0.921400249004364,-12.3507328033447,4.70240497589111,-2.97360157966614,-8.2618465423584 ,4.38370370864868,-1.30719125270844,-8.53772068023682,4.85830402374268,-1.03485834598541,-8.34664154052734,4.26936388015747 ,-1.26588129997253,-8.46986484527588,3.1554388999939,-1.43624365329742,-8.34628105163574,3.21852278709412,-1.53164660930634 ,-8.2733736038208,2.7988555431366,-1.6545318365097,-8.17590713500977,2.74774932861328,-1.86189317703247,-8.07227325439453 ,1.03621578216553,-2.17143201828003,-8.3486795425415,0.427448570728302,-1.97930431365967,-8.09087753295898,0.418905317783356 ,-2.12586092948914,-8.15859699249268,0.0618062913417816,-2.13336801528931,-7.8818793296814,0.132020547986031,-2.43179988861084 ,-7.8618049621582,-0.623425841331482,-2.48126220703125,-7.97514820098877,2.84113550186157,-0.698743879795074,-7.91939783096313 ,1.88133490085602,-0.698509812355042,-7.37556505203247,4.11418771743774,-0.738027811050415,-7.12800025939941,4.14944124221802 ,-1.3378928899765,-7.79018020629883,4.17661905288696,-1.64111828804016,-6.94105863571167,8.39327621459961,-1.99834716320038 ,-6.91890287399292,8.2821159362793,-2.00474405288696,-7.22366333007813,7.12326192855835,-1.87451314926147,-7.480544090271 ,5.81974315643311,-2.27981424331665,-7.95554208755493,5.07282066345215,-2.32199144363403,-12.2233734130859,8.90837287902832 ,-1.41941320896149,-12.2676200866699,8.78210067749023,-1.39806830883026,-12.2785034179688,7.96867084503174,-1.64899885654449 ,-12.2156171798706,6.74982690811157,-1.95364665985107,-12.2535228729248,5.75333404541016,-2.21360635757446,-12.4807224273682 ,4.93390893936157,-2.24494934082031,-12.7721185684204,3.99579477310181,-2.10383653640747,-8.63093948364258,7.60015678405762 ,1.80671334266663,-8.62113475799561,7.46664953231812,1.82989954948425,-8.63788414001465,6.70167589187622,1.52909469604492 ,-8.69423484802246,5.93398475646973,1.25737953186035,-8.65503120422363,4.89050817489624,1.31877195835114,-8.62190437316895 ,4.41484546661377,1.42706036567688,-9.01820659637451,4.20061016082764,1.03565382957459,-11.8353872299194,6.78268384933472 ,-2.71999740600586,-11.9059467315674,8.04110717773438,-2.52659678459167,-11.954478263855,9.0095157623291,-2.44830703735352 ,-11.9236574172974,9.11659240722656,-2.40354752540588,13.0784387588501,3.61403799057007,-0.387950003147125,12.8692493438721 ,4.23402261734009,-1.01961994171143,13.2165336608887,2.53907871246338,-1.87767601013184,13.5263395309448,2.08693170547485 ,-1.34906196594238,12.6889476776123,3.79180359840393,-3.03223824501038,12.6107130050659,5.16541290283203,-1.5162969827652 ,7.36189794540405,2.22572088241577,-0.511403024196625,7.24243593215942,1.49262166023254,-1.1971937417984,7.38548421859741 ,2.73870873451233,-0.895566046237946,10.3434047698975,5.47505474090576,1.90369594097137,9.15979862213135,5.06887292861938 ,1.77098703384399,10.1975927352905,6.29252099990845,1.84975600242615,12.2415580749512,5.60246610641479,0.202421009540558 ,12.090048789978,5.80620241165161,-0.00566900009289384,12.0125188827515,5.61300611495972,-2.9149649143219,12.4945268630981 ,5.89366149902344,-1.5122481584549,12.288122177124,8.53469848632813,-0.661285996437073,10.0408840179443,7.49992418289185 ,2.37230896949768,10.8403167724609,7.73344993591309,1.77250003814697,11.8306217193604,8.09218406677246,0.793708145618439 ,12.4908933639526,4.76606798171997,0.651835978031158,11.4628305435181,5.29583501815796,1.38202595710754,11.2533559799194 ,6.22149276733398,1.20992994308472,7.73828792572021,4.31135606765747,-0.0834570005536079,7.36683702468872,5.3244800567627 ,-0.599408984184265,7.6968674659729,5.50474500656128,0.0933770015835762,8.26981353759766,3.98673677444458,1.2019350528717 ,7.79680776596069,2.94683361053467,0.581601023674011,7.7964768409729,3.48446178436279,0.153815001249313,7.51640558242798 ,2.0345447063446,0.0756840035319328,7.43048810958862,0.782142877578735,-0.238389015197754,7.2607421875,0.956801772117615 ,-0.765235006809235,6.80239152908325,7.91194725036621,-0.18758200109005,7.47235488891602,7.62311172485352,0.697570025920868 ,7.10959148406982,5.24039697647095,-1.22375595569611,7.15163803100586,2.74867963790894,-1.48444199562073,13.5382461547852 ,1.32446682453156,-2.14271998405457,13.7687711715698,1.20945179462433,-1.80898201465607,13.7865257263184,0.619542837142944 ,-1.92636489868164,13.8336715698242,0.692019820213318,-1.84797203540802,13.275411605835,1.67556774616241,-2.74921131134033 ,7.40010452270508,0.384649813175201,-0.667990982532501,7.50181102752686,0.383126795291901,-0.246661990880966,7.4935622215271 ,0.295691817998886,-0.348820000886917,12.5759296417236,3.31683683395386,-0.301581025123596,13.0212831497192,1.85254681110382 ,-1.13734900951386,12.1232957839966,3.64946269989014,-2.99026703834534,9.45137023925781,4.73715019226074,1.26457500457764 ,10.3113994598389,5.03661108016968,1.32882297039032,11.0880308151245,4.88765811920166,1.00634694099426,8.09423446655273 ,1.9600578546524,-0.0253519993275404,7.59573745727539,2.73560667037964,-1.80734515190125,7.79568910598755,1.32014381885529 ,-1.33666396141052,8.01313209533691,0.81684684753418,-0.335142999887466,13.0765466690063,0.547282814979553,-1.87284886837006 ,13.2974462509155,1.06627893447876,-1.44371700286865,13.384578704834,0.557447791099548,-1.44182395935059,13.3176727294922 ,0.441362798213959,-1.55895602703094,12.6973543167114,1.59488666057587,-2.65003705024719,7.99213790893555,0.389781802892685 ,-0.759375989437103,8.08319854736328,0.458545804023743,-0.323071002960205,8.32713985443115,2.78943872451782,0.408313006162643 ,11.4524984359741,5.48662090301514,-2.54562592506409,11.9944133758545,4.41262006759644,0.512112021446228,8.72068881988525 ,3.83208870887756,0.878419995307922,7.89028644561768,4.91850280761719,-1.55553901195526,8.07210922241211,0.331777811050415 ,-0.469390988349915,13.578953742981,0.723118782043457,-2.18435406684875,10.6943483352661,7.97740316390991,1.57557725906372 ,7.49672365188599,7.75520133972168,0.68902975320816,6.83512830734253,8.03997993469238,-0.185473844408989,7.51865577697754 ,7.76859617233276,0.681343555450439,7.49779415130615,7.75494289398193,0.689776122570038,10.035210609436,7.63272142410278 ,2.3439085483551,10.8281936645508,7.86738109588623,1.75704264640808,11.800537109375,8.24606800079346,0.791858673095703 ,12.2553968429565,8.65648651123047,-0.652927100658417,11.0982122421265,8.02239799499512,-3.42560195922852,9.46175289154053 ,7.83151817321777,-3.76968502998352,9.53649520874023,9.05328750610352,-3.69054698944092,11.2665252685547,9.25102138519287 ,-3.36247611045837,7.74278497695923,7.43448352813721,-2.94955992698669,7.38186693191528,8.56259822845459,-3.01850891113281 ,9.60508728027344,6.65043973922729,-3.84368181228638,11.0673961639404,6.79414558410645,-3.49132299423218,10.9090061187744 ,5.57353115081787,-3.57667922973633,9.63772296905518,5.45862197875977,-3.88288307189941,8.27865886688232,4.78107595443726 ,-0.436830013990402,8.41143703460693,5.26224374771118,-3.16524219512939,8.09701728820801,6.30043649673462,-3.07590699195862 ,8.33622741699219,4.25156307220459,-0.654892027378082,8.56227493286133,4.79242277145386,-0.544656991958618,8.30243015289307 ,5.03695392608643,-2.40793538093567,7.96504688262939,4.61126375198364,-2.47431945800781,10.6739253997803,5.43777275085449 ,-3.33545923233032,9.72132396697998,5.32747507095337,-3.48603796958923,8.81702327728271,5.16764783859253,-2.94468188285828 ,12.6551265716553,-1.1994891166687,-3.36292910575867,12.6812009811401,-1.81898605823517,-3.45780301094055,12.3639993667603 ,-1.8203901052475,-4.15120506286621,12.3217802047729,-0.63344419002533,-4.16046380996704,12.2639923095703,-0.401669174432755 ,8.50428581237793,12.5707387924194,0.20113180577755,8.32594203948975,10.8718614578247,0.0163587927818298,8.17275428771973 ,10.9237976074219,-0.546308159828186,8.32784652709961,14.7877540588379,-1.05375719070435,2.97234511375427,14.9249362945557 ,-0.975921213626862,3.67831110954285,14.9135770797729,-1.4562371969223,3.6388852596283,14.836766242981,-1.48871624469757 ,3.06584906578064,14.3331708908081,-1.00264811515808,1.14896094799042,14.330602645874,-1.48213016986847,1.29319405555725 ,13.8479719161987,-1.26087915897369,0.0456670001149178,13.8695812225342,-0.733412146568298,0.03099500015378,13.1961078643799 ,-0.682488203048706,-1.74533605575562,13.2561845779419,-0.267994195222855,-1.52676200866699,11.4108591079712,-0.704488158226013 ,-1.43015098571777,12.3429641723633,-1.29646420478821,0.430689007043839,11.3169937133789,-0.633855223655701,-5.43679094314575 ,11.3333263397217,0.324207812547684,-5.34990787506104,12.2897281646729,0.29148280620575,-4.15824413299561,8.32677936553955 ,0.285849809646606,-4.91607284545898,8.31762981414795,-0.635810136795044,-4.98647403717041,7.6367335319519,-0.634946227073669 ,-3.36898493766785,7.64520740509033,0.290466815233231,-3.37043809890747,8.45136737823486,-0.397370189428329,-0.0700289979577065 ,8.27342128753662,-0.602357149124146,-0.857776939868927,8.65068626403809,-1.2792421579361,1.60765111446381,8.70820045471191 ,-0.889460206031799,1.7451479434967,8.64849853515625,-1.00339412689209,3.05018901824951,8.62150001525879,-1.4825621843338 ,3.14198398590088,9.57847595214844,-0.684286117553711,7.05243635177612,9.74707221984863,-1.13764321804047,7.29845905303955 ,9.13314819335938,-0.710844159126282,4.47330093383789,8.91466617584229,-0.682887196540833,2.9658670425415,8.77879047393799 ,-0.749664187431335,3.01093411445618,8.95795822143555,-0.772237181663513,4.49947786331177,8.83813381195068,-1.01499819755554 ,2.99324297904968,8.99276161193848,-1.04494822025299,4.47025680541992,9.83040523529053,-0.401700139045715,6.98186683654785 ,9.82599067687988,-0.687571167945862,6.98602962493896,10.9493865966797,-0.0893782079219818,7.89767122268677,10.8741941452026 ,0.094377800822258,7.85318899154663,10.0532426834106,-0.354868203401566,6.91146230697632,10.897255897522,0.103166803717613 ,7.72143602371216,14.7188110351563,-0.979119181632996,3.75472784042358,14.6068019866943,-1.05330717563629,3.03254795074463 ,14.5829191207886,-0.793511152267456,3.01690411567688,14.697904586792,-0.660182237625122,3.76196217536926,13.7142362594604 ,-0.10202220082283,7.11313772201538,14.6809797286987,-0.7016361951828,5.42782211303711,14.631495475769,-0.364508181810379 ,5.4440450668335,13.6660346984863,0.0949728041887283,7.06012010574341,14.3699359893799,-0.789545178413391,3.0537269115448 ,14.5029563903809,-0.657171249389648,3.8249819278717,14.4187536239624,-0.348812192678452,5.51281881332397,13.6329202651978 ,0.0565158165991306,6.87230396270752,14.1662549972534,-0.738821148872375,1.21650302410126,14.1754846572876,-1.00521314144135 ,1.21228504180908,13.6872749328613,-0.738984107971191,0.0732659995555878,13.7096109390259,-0.471031188964844,0.033585999161005 ,14.035943031311,-0.733028173446655,1.27240085601807,13.4088859558105,-0.425395220518112,0.0608309991657734,13.2755498886108 ,-0.115318208932877,-1.12270414829254,13.0557823181152,-0.0804621875286102,-1.07290995121002,13.068621635437,-0.272237211465836 ,-1.50460398197174,12.1045236587524,0.593280792236328,-4.14091396331787,12.1193447113037,0.299488812685013,-4.08871221542358 ,11.7931108474731,0.634377837181091,-4.0986008644104,11.2735862731934,0.719097793102264,-5.15583181381226,11.0836772918701 ,0.714048802852631,-4.91463613510132,11.2509965896606,0.347086817026138,-5.14843416213989,9.70920753479004,0.712418794631958 ,-4.88926315307617,9.66789436340332,0.723107814788818,-5.11510419845581,8.42803859710693,0.688478827476501,-4.66739702224731 ,8.63442325592041,0.710941791534424,-4.48368692398071,9.70443153381348,0.322440803050995,-5.12207412719727,8.41786479949951 ,0.301627814769745,-4.63700103759766,8.54096221923828,1.32825684547424,-4.59067678451538,8.0074405670166,1.22241985797882 ,-3.54224491119385,8.04832363128662,3.33798861503601,-3.17081809043884,8.67496490478516,3.68233776092529,-4.08474493026733 ,7.8871545791626,0.281323790550232,-3.40791130065918,7.85482978820801,0.642930805683136,-3.39109182357788,8.13710689544678 ,0.850011765956879,-0.800619006156921,8.28289604187012,2.25278782844543,-0.764258027076721,8.43003940582275,-0.157711207866669 ,-0.858825087547302,8.32692623138428,0.194879800081253,-0.860629975795746,8.52881240844727,1.08460581302643,1.5599889755249 ,8.53865146636963,1.25685679912567,0.95725691318512,8.5357666015625,1.04977083206177,0.68256801366806,8.56322479248047 ,0.566658794879913,1.55015695095062,8.61183166503906,-0.425197243690491,-0.065311998128891,8.89294719696045,-0.911311149597168 ,1.74111795425415,8.79252433776855,-0.633555173873901,1.78056597709656,8.5108757019043,-0.101994186639786,0.000698000018019229 ,12.351466178894,0.262531816959381,7.76197957992554,12.4312696456909,0.319948792457581,7.95019292831421,12.4569158554077 ,0.0845468044281006,8.01053619384766,13.8941841125488,0.467521786689758,3.5477340221405,14.2799406051636,0.0541978180408478 ,3.53433966636658,14.2880802154541,0.228603810071945,3.23221206665039,13.9849233627319,0.619996786117554,3.28688502311707 ,13.6181030273438,0.60854184627533,6.72478246688843,14.4104146957397,0.390134811401367,5.51559019088745,14.0933837890625 ,0.810905814170837,5.57533311843872,13.5700387954712,0.956074774265289,6.39302587509155,13.8625802993774,0.872631728649139 ,1.93436586856842,13.1583271026611,1.43147194385529,2.3733389377594,13.2172756195068,0.964958786964417,2.69189310073853 ,13.7842702865601,0.587464809417725,2.18322610855103,12.4318504333496,2.01933884620667,2.85682392120361,12.5068588256836 ,1.38099682331085,3.19997715950012,10.8144855499268,1.08549284934998,7.2902398109436,12.2734613418579,1.22508585453033 ,7.33208894729614,12.0701723098755,1.55995881557465,6.43063402175903,10.6623516082764,1.37352383136749,6.64068698883057 ,10.2347812652588,1.02646374702454,6.79868507385254,9.9075870513916,0.466396808624268,6.90527582168579,10.8436546325684 ,0.709422826766968,7.58692121505737,9.14296531677246,0.764719843864441,4.57133388519287,8.77550888061523,0.210297808051109 ,4.60690784454346,9.33541011810303,1.13661181926727,5.08978414535522,9.58052635192871,1.00581681728363,4.8911828994751 ,9.13905906677246,1.31009376049042,4.46836519241333,8.60823631286621,2.43657970428467,1.41375398635864,9.29010486602783 ,2.85858273506165,1.81270503997803,9.71137714385986,1.92487692832947,4.1512770652771,10.0960521697998,3.6826000213623 ,1.92870700359344,10.3535137176514,2.31923270225525,3.88383197784424,11.0846672058105,3.66235661506653,1.6281658411026 ,11.884204864502,3.3869047164917,1.2024530172348,11.4515314102173,2.37581968307495,3.49674892425537,12.5265493392944 ,2.84761667251587,0.686360001564026,9.78671073913574,1.51062774658203,5.43640899658203,10.3746118545532,1.4129958152771 ,4.93102598190308,11.4895238876343,1.64424395561218,3.8477509021759,12.6008195877075,2.62157368659973,-1.41014099121094 ,12.6772747039795,2.34999775886536,-1.6421799659729,11.6258430480957,3.59273362159729,-3.56614398956299,11.6031827926636 ,3.99701476097107,-3.46526503562927,12.4911642074585,2.62973380088806,-1.39286494255066,11.5037336349487,4.0191216468811 ,-3.41252398490906,11.6477117538452,4.7365288734436,-2.9123420715332,10.6752662658691,5.05888700485229,-3.54006409645081 ,10.7329788208008,4.73007202148438,-4.00870704650879,10.6857452392578,4.2472767829895,-3.93189001083374,9.69830322265625 ,4.9626088142395,-3.85036325454712,8.79135131835938,4.77585315704346,-3.6133337020874,9.78085136413574,4.31696367263794 ,-4.04107522964478,8.89351463317871,4.26686573028564,-3.65700674057007,8.9768648147583,4.52922391891479,-3.72932100296021 ,9.71503639221191,4.64414882659912,-4.14905595779419,8.40865230560303,3.99431371688843,-2.67772603034973,8.20167064666748 ,4.30993890762329,-2.70235347747803,8.29178237915039,3.96888780593872,-2.69999694824219,8.25935554504395,3.6027410030365 ,-2.96513390541077,8.38647270202637,2.6651337146759,-0.669996023178101,10.858624458313,3.8950297832489,-4.24050617218018 ,10.7416467666626,4.23215389251709,-4.03672790527344,8.85915946960449,4.25843381881714,-3.7103579044342,8.82767200469971 ,3.88678979873657,-3.7574679851532,12.3203287124634,0.834373831748962,7.62035703659058,9.93011093139648,3.94925880432129 ,-4.2280740737915,9.87972068786621,4.26634979248047,-4.15164184570313,12.9109563827515,2.17576670646667,-0.0332330018281937 ,14.0064544677734,0.482846796512604,4.31903982162476,14.3811511993408,0.0602388046681881,4.10731220245361,13.4566841125488 ,0.878975749015808,4.61020994186401,13.403115272522,1.2346738576889,5.79850912094116,11.8692226409912,1.38857781887054 ,5.39097785949707,10.4531908035278,1.27224385738373,5.82744979858398,9.69781684875488,0.861148834228516,6.06470108032227 ,9.44259929656982,0.973586857318878,5.75430202484131,9.40438365936279,-0.639721155166626,5.52785587310791,9.22590160369873 ,-0.697531223297119,5.58653020858765,9.23768520355225,-0.931419134140015,5.58402299880981,9.00774478912354,-0.931771218776703 ,5.6596360206604,9.0374927520752,-1.4571191072464,5.59735012054443,9.46249103546143,-1.257688164711,6.91396951675415 ,13.292179107666,-1.68793714046478,5.62558317184448,13.1693201065063,-1.85254228115082,4.26037883758545,8.5069637298584 ,2.64702773094177,-0.68382602930069,9.65490818023682,0.303108811378479,-5.39795684814453,9.64590740203857,-0.636101245880127 ,-5.46976900100708,13.3323211669922,0.870737791061401,0.106257990002632,13.1983003616333,1.25750684738159,0.129934996366501 ,14.1630382537842,0.0562498010694981,1.75165700912476,11.8925170898438,1.22653579711914,-4.12294006347656,11.7359161376953 ,3.29843640327454,-3.70321798324585,12.968563079834,0.846431851387024,-1.85224604606628,11.1305932998657,1.33086395263672 ,-5.03836584091187,10.9273080825806,3.65749144554138,-4.48123788833618,9.87257671356201,1.327556848526,-5.05620718002319 ,9.91583061218262,3.76873588562012,-4.53192090988159,8.98668956756592,-0.574045181274414,1.79792904853821,8.65672206878662 ,-0.0279552042484283,-0.0313559994101524,8.17943000793457,0.660911798477173,-3.50347018241882,8.47450065612793,0.253890812397003 ,-0.846231997013092,14.9321527481079,-0.684710144996643,5.33120679855347,14.0031642913818,-0.023091197013855,7.31090211868286 ,8.79455852508545,-1.03195118904114,4.34719085693359,8.28165912628174,-0.135623186826706,-0.846274018287659,9.4740161895752 ,0.293323814868927,6.17530202865601,13.4723253250122,0.37716081738472,0.10164900124073,8.48273468017578,0.658774793148041 ,0.337684005498886,10.9609279632568,-1.51077425479889,7.06002187728882,10.3187446594238,1.55065274238586,4.2269082069397 ,9.59263896942139,3.9511775970459,-4.19415378570557,9.63356876373291,4.28190660476685,-4.09221982955933,13.0830707550049 ,1.09166383743286,4.85074090957642,9.5009822845459,3.79010367393494,-4.45402717590332,9.49314403533936,1.32746577262878 ,-4.98887491226196,9.63443660736084,-1.82345807552338,-5.55305099487305,9.14707946777344,-1.8240339756012,-5.37717390060425 ,9.14474105834961,-1.13805913925171,-5.32897996902466,10.1296558380127,-1.30436015129089,1.09980797767639,9.15706825256348 ,-0.688938140869141,-1.10642194747925,9.71644687652588,-0.692696213722229,-1.20543694496155,11.7091445922852,-1.29876112937927 ,0.632021009922028,10.6817436218262,-0.69933021068573,-1.29824805259705,7.84287738800049,-1.89942610263824,-2.52330207824707 ,8.77875328063965,-1.89924108982086,-2.67817401885986,9.01303195953369,-1.89940023422241,-1.40217304229736,8.07610702514648 ,-1.89954710006714,-1.25296998023987,10.542236328125,-1.89899623394012,-2.25901699066162,10.6337862014771,-1.89908516407013 ,-1.68281614780426,9.75798606872559,-1.89925706386566,-1.52582097053528,9.58230209350586,-1.8990843296051,-2.78612995147705 ,8.86343860626221,-1.17721211910248,-2.69335007667542,7.78657960891724,-1.1398001909256,-2.53283405303955,9.17301654815674 ,-1.17705416679382,-3.33671307563782,9.17317295074463,-1.82107496261597,-3.33675527572632,10.0160961151123,-1.82078611850739 ,-4.27497577667236,10.0307245254517,-1.17681121826172,-4.27237892150879,8.3118782043457,-1.82325625419617,-5.07190084457397 ,7.62548351287842,-1.82155406475067,-3.3740599155426,8.46506309509277,-1.13791620731354,-5.08362579345703,8.46026515960693 ,-1.82274115085602,-5.12706708908081,11.4767608642578,-1.1769061088562,-3.52011871337891,10.9006538391113,-1.23844015598297 ,-2.66865038871765,11.4770784378052,-1.82114708423615,-3.52008390426636,9.84247589111328,-1.1772221326828,-3.25193810462952 ,9.96317100524902,-1.8214031457901,-3.27331566810608,10.9190912246704,-1.82132935523987,-2.74039530754089,10.428861618042 ,-1.1769951581955,-4.06018114089966,10.4610366821289,-1.82123816013336,-4.06565284729004,9.48378562927246,-1.17734205722809 ,-2.86669707298279,10.6097259521484,-1.23897421360016,-2.20649099349976,12.8990774154663,-1.20657515525818,-2.6168200969696 ,13.1171998977661,-1.82286524772644,-2.07190489768982,11.3591508865356,-1.82394111156464,-1.71986413002014,11.2742357254028 ,-1.23886716365814,-2.35520100593567,11.2741947174072,-1.82093739509583,-2.35528588294983,11.9274044036865,-1.17659318447113 ,-3.287513256073,11.9275131225586,-1.82061421871185,-3.28761601448059,12.8821115493774,-1.82100307941437,-2.7364559173584 ,11.2960643768311,-1.82078015804291,-5.52506399154663,10.5416698455811,-1.17897522449493,-4.52999687194824,10.5710735321045 ,-1.82089614868164,-4.57293176651001,11.9882869720459,-1.82064211368561,-3.82067108154297,11.9701585769653,-1.17954611778259 ,-3.78295111656189,13.7229709625244,-1.85246515274048,4.07452917098999,13.9891834259033,-1.68774104118347,5.40032720565796 ,13.3896598815918,-1.89254415035248,2.17091298103333,13.7069931030273,-1.89270734786987,3.45311307907104,11.6803979873657 ,-1.17183661460876,6.71803712844849,10.9550170898438,-1.17081785202026,6.93465709686279,10.0661144256592,-1.52309918403625 ,3.26630568504334,10.6154489517212,-1.52297914028168,3.08849000930786,10.1624965667725,-1.52329015731812,4.62233781814575 ,10.7236423492432,-1.30241513252258,6.45850467681885,10.2997093200684,-1.48579919338226,5.18572616577148,10.8345613479614 ,-1.48584806919098,5.01272392272949,11.3562002182007,-1.30212819576263,6.27257680892944,10.0881805419922,-1.51421213150024 ,2.65602207183838,10.8880701065063,-1.30171120166779,0.885369002819061,13.4678926467896,-1.15898716449738,6.16615104675293 ,13.9943208694458,-1.15951919555664,5.99605989456177,13.3655796051025,-1.30129718780518,5.60819101333618,13.8941955566406 ,-1.30118119716644,5.4372501373291,13.5430736541748,-1.52252817153931,3.4598650932312,12.7836818695068,-1.5225031375885 ,2.36680197715759,13.270396232605,-1.52238821983337,2.19731903076172,12.9867782592773,-1.51305818557739,1.67463314533234 ,10.7792692184448,-1.52316725254059,4.49874496459961,13.0751523971558,-1.52264511585236,3.7069079875946,13.1476764678955 ,-1.49484920501709,4.1362509727478,10.7174825668335,-1.52064311504364,2.52428197860718,12.4709463119507,-1.5205591917038 ,1.93447399139404,13.6438522338867,-1.49474310874939,3.9940299987793,12.8745965957642,-0.650946140289307,8.4034481048584 ,13.9453248977661,-0.722079157829285,7.74784088134766,13.9156303405762,-0.485151201486588,7.62993192672729,12.8607053756714 ,-0.398309201002121,8.34536361694336,13.4607906341553,-1.44669365882874,6.27358388900757,11.708643913269,-1.46391832828522 ,6.78241014480591,10.7793197631836,-1.82315039634705,4.49869823455811,13.0701332092285,-1.82262897491455,3.70686101913452 ,12.7837543487549,-1.82248628139496,2.36675405502319,10.6154985427856,-1.82296216487885,3.08844399452209,10.7160301208496 ,-1.82060623168945,2.52090001106262,12.4723234176636,-1.8205281496048,1.93119895458221,11.8795261383057,-1.81423282623291 ,1.03212344646454,10.8229579925537,-1.80831921100616,1.30289947986603,11.3640203475952,-1.61824405193329,6.26081991195679 ,10.8520259857178,-1.78294909000397,5.05374383926392,9.80314826965332,-1.43848013877869,7.41763782501221,10.9754028320313 ,-0.861802220344543,8.42994117736816,12.2961120605469,-0.648356199264526,8.61242866516113,8.65401077270508,-1.82298004627228 ,3.72613310813904,8.86539459228516,-1.82339334487915,5.04450702667236,8.8872184753418,-1.48762512207031,5.0599570274353 ,8.66806697845459,-1.48891818523407,3.69247674942017,10.1625461578369,-1.82327306270599,4.62229013442993,10.0661649703979 ,-1.82308197021484,3.26626110076904,10.0813932418823,-1.82114517688751,2.65210604667664,10.0750875473022,-1.81434404850006 ,1.47501397132874,8.62293529510498,-1.80442404747009,2.03740906715393,8.63533592224121,-1.81966722011566,3.12709999084473 ,9.42062568664551,-1.61854815483093,6.85899353027344,9.02965927124023,-1.78175115585327,5.64660120010376,10.7314548492432 ,-1.61851632595062,6.44674682617188,10.3171739578247,-1.78289532661438,5.22674703598022,14.3864679336548,-0.906111121177673 ,7.10352420806885,14.9273662567139,-1.45178020000458,5.79180288314819,14.9044742584229,-1.14286315441132,5.70820713043213 ,14.3360147476196,-0.648855209350586,7.0174560546875,14.0326690673828,-1.44597220420837,6.05647897720337,15.0419406890869 ,-1.61634719371796,5.06266784667969,14.8922185897827,-1.7823361158371,3.67723703384399,15.0164432525635,-1.25586915016174 ,5.13094186782837,14.8399982452393,-1.82216322422028,3.04614806175232,14.5743312835693,-1.8219473361969,1.77490186691284 ,14.5593872070313,-1.48710322380066,1.7604968547821,13.992299079895,-1.81486225128174,0.45016798377037,14.2750339508057 ,-1.8190780878067,1.25383996963501,12.6187791824341,-1.81137526035309,0.900829017162323,13.035008430481,-1.82034909725189 ,1.6709531545639,14.0747489929199,0.169742807745934,2.96360206604004,14.34694480896,-0.806760251522064,2.41914296150208 ,14.0129976272583,0.0151758203282952,1.98685896396637,13.2320461273193,0.995352864265442,3.41252398490906,13.8183240890503 ,0.575311779975891,3.10841703414917,11.7101907730103,1.42806780338287,4.60914897918701,12.8916282653809,1.14636778831482 ,4.1383581161499,11.7699680328369,1.73828685283661,4.85970020294189,9.52198696136475,1.08574879169464,4.41844892501831 ,13.3160743713379,0.899752855300903,3.86537027359009,13.3713436126709,1.15496385097504,4.15981292724609,13.8948783874512 ,0.679575800895691,3.84310698509216,12.9768419265747,1.39769685268402,4.42352294921875,9.23659324645996,0.350918799638748 ,5.31175899505615,9.15367317199707,0.277039796113968,5.81538581848145,9.48372840881348,0.930315792560577,5.38133716583252 ,14.5383815765381,-0.811367094516754,2.29166293144226,14.5298585891724,-1.02179610729218,2.27179598808289,14.6525802612305 ,-1.08479416370392,2.15895390510559,13.2846403121948,1.05016481876373,3.67264294624329,13.2940397262573,0.677316784858704 ,-0.52591997385025,13.2968921661377,1.02870881557465,-0.218290001153946,13.3114624023438,1.28549885749817,0.0937940031290054 ,9.78981685638428,3.95010662078857,-4.1819109916687,9.70335102081299,1.32425081729889,-4.92063999176025,9.75296592712402 ,3.74058198928833,-4.40943193435669,13.1841850280762,0.992721796035767,-0.190662994980812,8.36301803588867,0.635875821113586 ,0.348857998847961,8.41664695739746,1.24883985519409,0.968972980976105,8.41362190246582,1.04680180549622,0.699701011180878 ,7.68235921859741,-1.1401481628418,-3.09662795066834,7.67167282104492,-1.82158994674683,-3.12445998191834,13.410304069519 ,0.684789776802063,-0.563890993595123,8.49754047393799,8.82586765289307,-3.57137799263,8.56192398071289,7.63300037384033 ,-3.55192399024963,8.88008213043213,6.491539478302,-3.68741536140442,8.98423480987549,5.36043310165405,-3.71636414527893 ,9.18995761871338,5.24069166183472,-3.38439154624939,9.29192543029785,4.87892913818359,-3.74415731430054,9.34595108032227 ,4.58668661117554,-3.93918871879578,9.5681037902832,4.3049521446228,-3.94899106025696,12.3848676681519,6.678795337677 ,-1.08676695823669,12.0569562911987,6.41276931762695,0.186367496848106,10.1192378997803,6.89622259140015,2.11103248596191 ,7.58461141586304,6.56392812728882,0.395473510026932,7.08461380004883,6.61821365356445,-0.39349552989006,11.2925672531128 ,9.14094638824463,-3.39495158195496,9.52544784545898,8.93857860565186,-3.73352289199829,8.47273540496826,8.70798873901367 ,-3.6010115146637,7.35740089416504,8.44426250457764,-3.02813529968262,11.0158061981201,7.09106349945068,1.53347992897034 ,11.9018383026123,7.38752317428589,0.497046887874603,12.3512144088745,7.81623363494873,-0.921400249004364,12.3507328033447 ,4.70240497589111,-2.97360157966614,8.2618465423584,4.38370370864868,-1.30719125270844,8.53772068023682,4.85830402374268 ,-1.03485834598541,8.34664154052734,4.26936388015747,-1.26588129997253,8.46986484527588,3.1554388999939,-1.43624365329742 ,8.34628105163574,3.21852278709412,-1.53164660930634,8.2733736038208,2.7988555431366,-1.6545318365097,8.17590713500977 ,2.74774932861328,-1.86189317703247,8.07227325439453,1.03621578216553,-2.17143201828003,8.3486795425415,0.427448570728302 ,-1.97930431365967,8.09087753295898,0.418905317783356,-2.12586092948914,8.15859699249268,0.0618062913417816,-2.13336801528931 ,7.8818793296814,0.132020547986031,-2.43179988861084,7.8618049621582,-0.623425841331482,-2.48126220703125,7.97514820098877 ,2.84113550186157,-0.698743879795074,7.91939783096313,1.88133490085602,-0.698509812355042,7.37556505203247,4.11418771743774 ,-0.738027811050415,7.12800025939941,4.14944124221802,-1.3378928899765,7.79018020629883,4.17661905288696,-1.64111828804016 ,6.94105863571167,8.39327621459961,-1.99834716320038,6.91890287399292,8.2821159362793,-2.00474405288696,7.22366333007813 ,7.12326192855835,-1.87451314926147,7.480544090271,5.81974315643311,-2.27981424331665,7.95554208755493,5.07282066345215 ,-2.32199144363403,12.2233734130859,8.90837287902832,-1.41941320896149,12.2676200866699,8.78210067749023,-1.39806830883026 ,12.2785034179688,7.96867084503174,-1.64899885654449,12.2156171798706,6.74982690811157,-1.95364665985107,12.2535228729248 ,5.75333404541016,-2.21360635757446,12.4807224273682,4.93390893936157,-2.24494934082031,12.7721185684204,3.99579477310181 ,-2.10383653640747,8.63093948364258,7.60015678405762,1.80671334266663,8.62113475799561,7.46664953231812,1.82989954948425 ,8.63788414001465,6.70167589187622,1.52909469604492,8.69423484802246,5.93398475646973,1.25737953186035,8.65503120422363 ,4.89050817489624,1.31877195835114,8.62190437316895,4.41484546661377,1.42706036567688,9.01820659637451,4.20061016082764 ,1.03565382957459,11.8353872299194,6.78268384933472,-2.71999740600586,11.9059467315674,8.04110717773438,-2.52659678459167 ,11.954478263855,9.0095157623291,-2.44830703735352,11.9236574172974,9.11659240722656,-2.40354752540588,11.960880279541 ,8.69771385192871,-0.577697277069092,11.5644798278809,8.31119823455811,0.719232320785522,9.98414611816406,7.77302694320679 ,2.08830571174622,7.71604347229004,7.88915014266968,0.612167298793793,7.12976217269897,8.13741683959961,-0.166500449180603 ,11.0205383300781,9.33058452606201,-3.03233504295349,9.53904724121094,9.11799430847168,-3.27702498435974,7.65170097351074 ,8.7472505569458,-2.73987889289856,8.62954139709473,8.94725894927979,-3.22196006774902,7.33695316314697,8.59652614593506 ,-1.79107713699341,11.8764390945435,9.0099458694458,-1.23530924320221,8.73727798461914,7.74562072753906,1.61132657527924 ,11.5861968994141,9.22538471221924,-2.12491774559021,10.8846216201782,19.2333583831787,2.99382495880127,10.8735446929932 ,18.8200950622559,3.42978501319885,10.8541011810303,18.3279361724854,2.93692708015442,10.8832063674927,18.8148536682129 ,2.53401899337769,10.5200786590576,17.9692115783691,4.34590482711792,10.4846277236938,17.3935279846191,3.72583603858948 ,9.73058032989502,17.2792644500732,5.04154920578003,8.62687110900879,16.9248275756836,5.41275405883789,10.3979377746582 ,18.2120380401611,4.33148908615112,10.7226848602295,19.0455799102783,3.37352299690247,9.62259387969971,17.5917854309082 ,5.03659582138062,8.54744338989258,17.1974773406982,5.40801620483398,10.830249786377,19.4356498718262,2.91760802268982 ,10.7492761611938,19.799617767334,2.88753604888916,10.7113447189331,19.2958393096924,3.12222003936768,10.6793050765991 ,19.3370323181152,3.71836709976196,10.3031015396118,18.9596462249756,4.79261493682861,9.37976932525635,18.4917240142822 ,5.57988595962524,8.29885768890381,18.1507701873779,5.97931909561157,10.5200023651123,20.1408176422119,4.01744413375854 ,10.1408576965332,19.8712902069092,5.0645899772644,9.1905345916748,19.5542163848877,5.89608812332153,8.09999942779541 ,19.2621593475342,6.31005191802979,10.6673736572266,20.3554096221924,2.97603225708008,10.6598329544067,19.6969032287598 ,2.0004780292511,10.7596883773804,19.3268871307373,2.08992290496826,10.4535999298096,21.4124336242676,3.39937400817871 ,10.2665662765503,21.9323348999023,3.11421298980713,10.0877733230591,22.2021808624268,3.65796494483948,10.3209276199341 ,21.613899230957,3.94974088668823,9.45490837097168,22.599365234375,4.69469785690308,9.74240303039551,21.900821685791 ,5.07761812210083,8.51956844329834,22.74631690979,5.46489000320435,8.80372142791748,21.9650821685791,5.91362905502319 ,7.38228607177734,22.6113510131836,5.85867595672607,7.64917707443237,21.797420501709,6.33266592025757,9.71762371063232 ,21.6514225006104,4.97159385681152,10.2602586746216,21.3834095001221,3.80861616134644,8.81839847564697,21.6574687957764 ,5.79326295852661,7.70153617858887,21.4740352630615,6.20392799377441,10.3768091201782,21.0263004302979,3.39235901832581 ,10.5269012451172,20.9093341827393,3.0945188999176,10.4725208282471,21.2443161010742,3.25417709350586,10.3247337341309 ,21.2503776550293,3.48597979545593,9.9367561340332,20.8117370605469,5.13730812072754,10.357063293457,20.9667377471924 ,4.0233039855957,9.07955837249756,20.6500606536865,5.98157691955566,7.97893238067627,20.4087715148926,6.39955759048462 ,10.3478708267212,21.2740516662598,2.29400300979614,10.3102588653564,21.5990142822266,2.51279091835022,10.6137924194336 ,20.0307559967041,2.17805695533752,10.5380973815918,20.4603633880615,2.3185830116272,10.4403657913208,20.9075145721436 ,2.34123802185059,10.5755195617676,19.6662559509277,3.11494088172913,4.94140291213989,17.8739356994629,4.00129413604736 ,4.97612380981445,17.4636917114258,3.53536009788513,5.33359622955322,17.0651969909668,3.87273693084717,5.26266002655029 ,17.5366821289063,4.38091611862183,6.29105854034424,16.4343070983887,4.43670701980591,6.21092700958252,16.9835529327393 ,5.07637119293213,7.39537382125854,16.3496284484863,4.7204909324646,7.39244985580444,16.7444496154785,5.43789577484131 ,6.20721101760864,17.2534675598145,5.04187917709351,5.27760076522827,17.8000946044922,4.29654598236084,7.3501033782959 ,17.071985244751,5.42181491851807,5.03394889831543,18.2387256622314,4.07053804397583,4.78293418884277,18.4348983764648 ,3.89891910552979,4.87793016433716,18.0741367340088,3.92661571502686,5.10237407684326,18.0128650665283,4.07302713394165 ,6.11509895324707,18.0017032623291,5.50254487991333,5.29883909225464,18.1063289642334,4.63043785095215,7.23719167709351 ,17.9726581573486,5.96456384658813,5.95145320892334,18.9130210876465,5.77475690841675,5.18693590164185,18.920955657959 ,4.92147922515869,7.04634428024292,19.0347785949707,6.28103971481323,4.6217041015625,18.9564056396484,4.13157510757446 ,4.62470102310181,18.3164520263672,3.02352404594421,4.7248101234436,17.9464931488037,3.11292791366577,4.51037693023682 ,20.0530071258545,4.40684223175049,4.71004295349121,20.3304882049561,4.90087223052979,4.56726694107056,20.9394416809082 ,4.59377288818359,4.35948419570923,20.5811710357666,4.11555480957031,5.43325090408325,20.9151668548584,5.8080849647522 ,5.26133918762207,21.6401462554932,5.40557098388672,6.46559047698975,21.430269241333,6.30997800827026,6.23514795303345 ,22.2237873077393,5.85213422775269,5.52689790725708,20.6928539276123,5.68198585510254,4.81517601013184,20.1379241943359 ,4.73164081573486,6.54590797424316,21.1376686096191,6.1784839630127,4.5201358795166,19.8827934265137,4.26319885253906 ,4.56601285934448,19.5458679199219,4.10498094558716,4.73723888397217,19.736328125,4.3483510017395,4.71576499938965 ,19.9674053192139,4.4367880821228,4.97689390182495,19.7361011505127,4.93532705307007,5.74875497817993,19.8537902832031 ,5.84723806381226,6.81026935577393,20.1309928894043,6.36625528335571,4.31273984909058,19.8936004638672,3.31704807281494 ,4.27538108825684,20.218620300293,3.53579592704773,4.57782793045044,18.6501159667969,3.20124411582947,4.50393390655518 ,19.0801334381104,3.34146690368652,4.40440893173218,19.5268745422363,3.36442470550537,10.8431606292725,18.7861003875732 ,2.44014716148376,10.8136548995972,18.3081188201904,2.8375391960144,10.4479379653931,17.3849391937256,3.61761784553528 ,10.7177801132202,19.3129863739014,1.98497116565704,10.6137723922729,19.7006969451904,1.89566814899445,10.0405826568604 ,22.2164440155029,3.56492018699646,10.2168340682983,21.952543258667,3.02945613861084,9.41473770141602,22.6083793640137 ,4.58975505828857,8.49272918701172,22.7543716430664,5.34907007217407,7.37042284011841,22.621467590332,5.80231285095215 ,10.2635154724121,21.6095638275146,2.41238903999329,10.303807258606,21.2677593231201,2.18731999397278,10.4946060180664 ,20.4584579467773,2.21803116798401,10.568359375,20.0347576141357,2.07991313934326,10.3974113464355,20.8989925384521 ,2.24075198173523,5.01321506500244,17.4525814056396,3.42841100692749,6.31224870681763,16.4389591217041,4.31868124008179 ,7.50874900817871,16.3715438842773,4.59366989135742,4.75371122360229,17.9487895965576,2.99597120285034,4.64967203140259 ,18.3364906311035,2.90667319297791,4.38688993453979,20.619026184082,4.01771926879883,4.5924391746521,20.9702587127686 ,4.48846530914307,5.2790470123291,21.6623973846436,5.2908182144165,6.23852682113647,22.2387561798096,5.73119115829468 ,4.29944610595703,20.2453670501709,3.42338895797729,4.3397068977356,19.9035568237305,3.19832611083984,4.60426807403564 ,18.6705703735352,3.09092211723328,4.53046989440918,19.0942478179932,3.22904109954834,4.43331813812256,19.5347919464111 ,3.25175809860229,6.38370084762573,22.9831581115723,5.70846033096313,7.14405488967896,23.9239101409912,5.65244483947754 ,7.72733306884766,24.1056079864502,5.47485208511353,6.49145746231079,23.8214664459229,5.74526596069336,6.57458209991455 ,23.7810745239258,5.88676261901855,7.17207098007202,23.8744888305664,5.79700756072998,6.33581447601318,22.3091201782227 ,5.86684417724609,7.37212753295898,22.6595153808594,5.87273836135864,8.39966011047363,22.7811946868896,5.51699161529541 ,7.70609426498413,24.041223526001,5.63918304443359,10.4553146362305,20.3231563568115,3.23345708847046,4.8855938911438 ,18.9875259399414,4.20944452285767,12.9825353622437,10.6990766525269,0.844066858291626,9.8389253616333,9.49735069274902 ,3.17830562591553,11.5044794082642,12.9690208435059,2.80792570114136,10.7127485275269,12.5645351409912,3.36476016044617 ,11.0604057312012,9.69466495513916,2.83606219291687,12.2644348144531,10.1694393157959,2.32021045684814,11.1309700012207 ,17.2452526092529,2.54634737968445,6.70162296295166,9.45798778533936,2.01733946800232,6.35549068450928,13.8766345977783 ,2.74235939979553,5.24501037597656,15.4749479293823,2.42005228996277,6.03702163696289,15.1854915618896,3.31086182594299 ,6.57275533676147,12.4051599502563,2.47686791419983,10.977728843689,15.8941841125488,3.68716859817505,10.7990818023682 ,16.9118976593018,3.76513743400574,10.4266233444214,17.058614730835,3.71678614616394,4.87146949768066,15.9931001663208 ,1.07368099689484,6.86694240570068,15.0654487609863,4.30618381500244,6.77264976501465,16.0406074523926,4.2553129196167 ,6.98142719268799,16.3520584106445,4.27755880355835,7.20883512496948,14.8501043319702,4.19879293441772,7.98394060134888 ,14.8931560516357,4.27120780944824,7.44306898117065,13.9275770187378,4.12924718856812,8.74346828460693,12.9331617355347 ,3.70751571655273,9.87979412078857,12.9458312988281,3.54778790473938,9.6381721496582,11.1837501525879,3.82064890861511 ,10.0478620529175,13.1829557418823,3.4830207824707,9.99559593200684,15.3371992111206,3.90790176391602,10.7288208007813 ,15.5589847564697,3.66854119300842,6.74331283569336,16.3392333984375,4.03310918807983,10.4732303619385,16.7847728729248 ,4.27841186523438,10.7414121627808,16.6679668426514,3.98403811454773,10.7801752090454,16.2029762268066,4.13446187973022 ,10.5451440811157,16.0811061859131,4.50478982925415,10.8121566772461,15.845027923584,3.79723620414734,10.5918312072754 ,15.5369853973389,3.99283981323242,9.8531322479248,16.5995903015137,4.68393802642822,10.0126037597656,15.9286870956421 ,4.81835794448853,9.79456615447998,16.833423614502,4.26952695846558,10.0595607757568,15.3670091629028,4.39897203445435 ,9.90972423553467,15.9085750579834,4.89311122894287,9.76378726959229,16.6339874267578,4.74866676330566,9.63790130615234 ,16.8885154724121,4.3174467086792,10.073974609375,13.2618465423584,3.8615391254425,10.0949974060059,13.3742513656616 ,4.06807279586792,9.93121242523193,13.1100921630859,3.85573220252991,9.93567180633545,13.3041086196899,4.1608567237854 ,8.04547023773193,16.2815895080566,5.02835702896118,7.9120717048645,16.4583759307861,4.65794610977173,8.78007221221924 ,13.1069211959839,4.28314590454102,8.10359859466553,15.5371837615967,5.12908601760864,8.78834533691406,12.9926528930664 ,4.06723880767822,7.94412708282471,16.2080841064453,4.99466705322266,8.15055847167969,14.9756393432617,4.70975494384766 ,7.21701669692993,16.1169757843018,4.808424949646,6.93839693069458,15.8880319595337,4.60305595397949,7.13570690155029 ,15.0910511016846,4.39565181732178,7.50561809539795,14.9041223526001,4.49521207809448,7.49339818954468,15.455249786377 ,5.00152015686035,7.12892198562622,15.4541702270508,4.72877597808838,5.54436635971069,13.8168067932129,2.02238321304321 ,8.30417728424072,14.0667724609375,4.03354072570801,8.42895317077637,14.1100664138794,4.42929649353027,8.49184799194336 ,14.1423807144165,4.64357471466064,9.92403411865234,14.4718418121338,4.48916864395142,10.0594902038574,14.4750490188599 ,4.39139747619629,10.0653839111328,14.5165367126465,4.18185234069824,10.0170516967773,14.4528198242188,3.73347544670105 ,10.6282987594604,14.4023456573486,3.52199649810791,11.1519660949707,14.6864976882935,3.16790533065796,6.04845094680786 ,16.2096138000488,3.63020849227905,5.52223777770996,16.4311771392822,2.7282702922821,5.10262775421143,16.7274036407471 ,1.33499121665955,4.29888534545898,21.2389469146729,2.84800100326538,3.93148970603943,21.6375637054443,2.01565790176392 ,2.9605450630188,24.8765544891357,1.97136247158051,2.89970541000366,24.9143161773682,2.17081499099731,2.62015056610107 ,26.2532806396484,2.3701069355011,4.41971921920776,21.6550331115723,4.03259515762329,8.53282833099365,25.5782012939453 ,-0.167569786310196,7.2937650680542,25.4874401092529,-1.2387101650238,6.69556617736816,20.8177394866943,-0.44059631228447 ,6.78883934020996,19.5983657836914,-0.931529581546783,8.20820713043213,24.2063522338867,5.04386711120605,8.81881809234619 ,23.5065650939941,4.60944509506226,4.55811882019043,23.5142288208008,-0.732890009880066,7.79413414001465,21.0973491668701 ,-0.54935747385025,8.24923992156982,19.919095993042,-0.793531358242035,9.85042095184326,21.1344356536865,1.4140750169754 ,9.62073135375977,24.0104999542236,1.51200270652771,9.83751201629639,22.8306541442871,2.4107723236084,9.29598808288574 ,23.2301254272461,4.08172798156738,2.31491231918335,29.7624473571777,3.23570966720581,6.26165246963501,30.276439666748 ,-2.03741860389709,2.92210912704468,29.6239356994629,-1.64515149593353,7.52851438522339,30.5461311340332,-1.03620731830597 ,2.28898024559021,28.4519901275635,2.82041788101196,9.5324125289917,25.5558605194092,1.46676802635193,7.73476505279541 ,24.0522499084473,-0.513817012310028,3.17484617233276,23.3372783660889,2.0396089553833,8.55404090881348,24.098482131958 ,-0.00429400010034442,6.07827711105347,23.7995223999023,-0.819948017597198,9.09116077423096,24.1179275512695,0.669364988803864 ,10.2090940475464,19.7163257598877,1.54994201660156,4.54618835449219,20.4038715362549,0.327896654605865,3.909832239151 ,20.236291885376,1.51313841342926,4.62226486206055,19.1657886505127,0.235345333814621,4.29495668411255,18.9505310058594 ,1.53156208992004,7.73149299621582,25.2387638092041,5.56792831420898,6.34912157058716,24.9886512756348,5.79081058502197 ,6.1414589881897,23.8302707672119,5.62265491485596,9.50326728820801,15.4665489196777,-3.09563803672791,7.92887163162231 ,15.1350746154785,-3.01180362701416,9.81278514862061,13.9111709594727,-3.44924473762512,9.84451770782471,11.6013212203979 ,-3.94717597961426,9.64504241943359,10.5313568115234,-4.39961624145508,10.7425470352173,18.7471675872803,1.2680721282959 ,8.20433902740479,13.5760927200317,-3.37232685089111,8.49007797241211,11.4475383758545,-3.97062849998474,5.36550998687744 ,17.0619297027588,3.7610821723938,5.17229700088501,17.7759780883789,0.455138176679611,5.34495162963867,17.0478000640869 ,0.207327455282211,7.15298080444336,18.741907119751,-1.61566770076752,7.37722444534302,17.8142032623291,-2.12625551223755 ,8.89304828643799,18.1247253417969,-2.02328205108643,8.64704895019531,19.093147277832,-1.49808049201965,13.1437149047852 ,9.83644771575928,0.425810605287552,6.79427766799927,10.1194458007813,-3.59274291992188,8.46947383880615,10.3621530532837 ,-4.15896272659302,7.37660598754883,38.6802215576172,1.84768354892731,7.32925224304199,38.8696250915527,2.05189299583435 ,8.50175857543945,30.9236011505127,0.143369674682617,9.24204730987549,28.3038425445557,0.935694634914398,12.451057434082 ,9.42442798614502,1.84179270267487,11.1691188812256,9.07114124298096,2.62692499160767,9.90255355834961,8.8194408416748 ,2.72341012954712,7.16649913787842,8.72556114196777,1.34422612190247,5.30278015136719,17.4545993804932,2.83680200576782 ,3.26730012893677,23.4545974731445,1.46349477767944,8.75579071044922,16.6359596252441,4.55582046508789,9.6224308013916 ,23.0851593017578,1.67339825630188,9.57697582244873,22.9747257232666,3.24728608131409,9.19984149932861,23.223331451416 ,0.919034540653229,8.06709289550781,23.1356105804443,-0.251145720481873,6.29547739028931,23.0096740722656,-0.55564147233963 ,4.18616390228271,22.5705108642578,0.401069700717926,3.58845591545105,22.4750595092773,1.47205495834351,3.43016672134399 ,22.3351707458496,1.91197001934052,5.4775652885437,14.6034002304077,-0.848178505897522,5.46263837814331,12.9252481460571 ,-1.43349719047546,6.11545467376709,10.8410673141479,-1.87363421916962,6.24943923950195,9.87539100646973,-2.08078861236572 ,5.08252668380737,17.5950775146484,1.47334945201874,5.56419515609741,22.756872177124,5.25122785568237,4.97053909301758 ,22.3994827270508,4.87527322769165,3.88732552528381,21.1598033905029,1.50911855697632,4.44807863235474,21.3713245391846 ,0.426176756620407,6.54054069519043,21.7982597351074,-0.450584977865219,8.50001525878906,22.0293464660645,-0.0887655019760132 ,9.50238704681396,22.0265922546387,1.2452974319458,9.9237585067749,22.0253047943115,1.93845045566559,10.0915231704712 ,22.1119232177734,2.2798593044281,4.97010898590088,14.2412166595459,0.382829368114471,5.13274669647217,12.6117677688599 ,-0.0833398848772049,5.56505680084229,10.3705987930298,-0.355221420526505,5.70119285583496,9.17764377593994,-0.628493666648865 ,5.30814981460571,16.3194942474365,-0.1225531026721,7.52781343460083,17.0894050598145,-2.39299297332764,9.06356906890869 ,17.390739440918,-2.41181421279907,12.0434112548828,15.1893663406372,1.87365484237671,12.5517129898071,13.4664974212646 ,1.38936769962311,13.1068925857544,11.2270574569702,-0.273940622806549,13.0960330963135,10.077766418457,-0.766599833965302 ,11.6978235244751,16.5182456970215,2.36682105064392,11.2157173156738,17.9049034118652,1.06689035892487,11.7930545806885 ,16.9751167297363,0.794650077819824,12.2942228317261,15.3654108047485,0.229736045002937,12.6215677261353,13.7141962051392 ,-0.279336333274841,8.41444396972656,9.42227172851563,2.86235332489014,8.31547164916992,8.57957553863525,2.64106416702271 ,4.13291549682617,19.6004199981689,1.52886092662811,4.56665515899658,19.7877254486084,0.25340074300766,6.74493312835693 ,20.2061576843262,-0.660114347934723,8.02215194702148,20.5025272369385,-0.674675583839417,10.0297594070435,20.4253807067871 ,1.48200845718384,4.66221380233765,18.1281929016113,2.47184419631958,8.28762149810791,11.0393047332764,3.44345617294312 ,6.68867588043213,11.1985206604004,2.32214212417603,5.4771900177002,11.5190696716309,-0.246227294206619,5.85303068161011 ,11.9172916412354,-1.67039966583252,8.32313919067383,12.6680364608765,-3.58693480491638,9.90711784362793,12.8571147918701 ,-3.5450963973999,12.8485689163208,12.8292036056519,-0.356148988008499,12.7300281524658,12.3465728759766,1.19345235824585 ,11.7639751434326,11.9589366912842,2.69383668899536,10.6790237426758,11.5936756134033,3.43812823295593,8.73316478729248 ,13.1642179489136,4.12282800674438,9.32520294189453,12.4223604202271,3.61370158195496,8.1046724319458,12.4125928878784 ,3.56111311912537,8.73285865783691,13.2765378952026,4.34218788146973,9.93310737609863,13.5609140396118,4.23305797576904 ,10.0881977081299,13.585015296936,4.12997817993164,10.072416305542,13.4894390106201,3.91964173316956,1.67838835716248 ,30.9184226989746,3.30307817459106,1.89689028263092,29.7673435211182,3.16651940345764,1.48467254638672,30.6766414642334 ,-0.48382967710495,1.7151745557785,29.5061206817627,-0.388914227485657,6.41028499603271,31.5402603149414,-2.31122946739197 ,6.5544581413269,30.2641086578369,-2.10232305526733,3.24189710617065,29.6542873382568,-1.98031175136566,3.03120398521423 ,30.9302921295166,-2.10327386856079,7.3973708152771,31.8299655914307,-1.48837518692017,4.9675407409668,29.930456161499 ,-2.2727963924408,4.79024934768677,31.2233638763428,-2.47925400733948,9.770339012146,25.5654220581055,1.26073324680328 ,9.85008811950684,24.02073097229,1.29150104522705,2.88398265838623,23.4223175048828,1.98747265338898,2.61478137969971 ,24.807092666626,2.1091001033783,2.56298756599426,24.7260589599609,1.49513530731201,4.08464431762695,24.8278770446777 ,-1.19701743125916,4.46618032455444,23.4818077087402,-1.05908119678497,5.79780006408691,25.2055416107178,-1.48177099227905 ,7.58888959884644,25.4344844818115,-1.33208465576172,7.79577255249023,23.9981422424316,-0.78133100271225,6.17394542694092 ,23.8105087280273,-1.08923745155334,8.74819564819336,25.5624618530273,-0.352819919586182,8.8174524307251,24.0813789367676 ,-0.17203514277935,8.29786491394043,32.2326049804688,-0.562160134315491,8.68968200683594,30.9222812652588,-0.11330646276474 ,7.68600034713745,30.5278968811035,-1.28661370277405,2.92589497566223,23.4454669952393,1.463662981987,10.183985710144 ,24.0114269256592,1.48732244968414,10.3995380401611,23.0030460357666,2.38215231895447,10.1714305877686,23.2381954193115 ,1.69905114173889,10.0658826828003,24.2001304626465,3.24561882019043,10.1078948974609,23.1566581726074,3.35979390144348 ,9.73544216156006,24.5126132965088,4.35015201568604,9.77918720245361,23.3942604064941,4.31036186218262,9.15197277069092 ,24.8433399200439,5.12198305130005,9.17974853515625,23.6991958618164,5.01077795028687,8.81389045715332,25.4027652740479 ,5.52354097366333,8.11821174621582,25.076171875,6.03452777862549,8.62082099914551,24.2555313110352,5.50145721435547 ,4.94333648681641,24.0129108428955,6.1410551071167,5.44337701797485,22.7728080749512,5.75631809234619,6.00277996063232 ,23.6588459014893,6.15437316894531,5.51579332351685,24.4081516265869,6.2461986541748,4.21660566329956,23.4138717651367 ,5.43742179870605,4.60753440856934,22.092170715332,5.30762243270874,3.64753818511963,22.7981567382813,4.36176633834839 ,3.97580409049988,21.4336051940918,4.30237817764282,3.93899321556091,21.0546340942383,3.03482794761658,3.00800609588623 ,22.134693145752,2.17809700965881,3.47336459159851,21.4021892547607,2.19615602493286,10.2548227310181,25.4462604522705 ,2.23816800117493,10.0921211242676,25.3244571685791,1.40582799911499,10.3297166824341,25.5889053344727,3.29478859901428 ,10.1016530990601,25.8635997772217,4.32744646072388,9.49295043945313,25.9888610839844,5.24583053588867,8.74037933349609 ,26.1106243133545,5.74385833740234,7.91368246078491,26.0554676055908,6.26549863815308,4.82580804824829,24.7727489471436 ,6.31932830810547,3.97736215591431,24.154411315918,5.67784929275513,3.38183975219727,23.6130828857422,4.72761106491089 ,2.68674302101135,23.211181640625,2.26280474662781,10.0458040237427,28.1991653442383,1.91037487983704,9.79188060760498 ,28.2899017333984,0.875848591327667,10.1743211746216,28.1533126831055,3.07424855232239,10.0320882797241,28.1667823791504 ,4.24908638000488,8.97226333618164,31.0707683563232,-0.0124146156013012,9.27804946899414,31.2962856292725,1.37091720104218 ,8.99170207977295,33.3099365234375,1.86456072330475,9.47235774993896,31.3706016540527,2.61665606498718,8.30988502502441 ,32.8178291320801,5.27076625823975,8.49545383453369,30.7285480499268,5.71441602706909,9.12849426269531,31.0272274017334 ,5.08935260772705,8.80402851104736,33.1465034484863,4.67227029800415,7.65233707427979,30.4246578216553,6.46737289428711 ,7.61286640167236,32.386043548584,6.16658735275269,4.8137845993042,30.9995460510254,6.55148696899414,5.17962551116943 ,29.5996227264404,6.77977800369263,4.09050512313843,30.391019821167,6.23229169845581,2.47493076324463,29.0429763793945 ,4.76166772842407,2.26273012161255,28.844123840332,4.130455493927,1.83292031288147,28.6096267700195,3.26814723014832 ,8.04264640808105,34.5006980895996,-0.720708727836609,7.95204257965088,35.5625,4.51369094848633,7.40072584152222,35.2431945800781 ,5.5053391456604,4.30788898468018,32.4267234802246,6.14424514770508,3.70565128326416,31.6386547088623,5.78515100479126 ,2.07473659515381,29.7428436279297,4.24214792251587,1.89405024051666,29.2105312347412,3.50888156890869,7.91234683990479 ,36.6562614440918,0.0448120012879372,7.69625759124756,37.7195739746094,3.7429211139679,7.29021406173706,37.5362548828125 ,4.64640092849731,6.16034173965454,36.3572311401367,5.5187726020813,4.74860525131226,34.8689727783203,5.76224040985107 ,3.77248501777649,33.7298736572266,5.60572528839111,3.26117038726807,32.9967346191406,5.2520923614502,6.08498001098633 ,25.5943832397461,6.55991077423096,6.18661165237427,24.7244873046875,6.31633234024048,9.40803623199463,31.2745361328125 ,3.8881824016571,9.07090282440186,33.3454704284668,3.53791260719299,10.0716009140015,24.0060024261475,1.4139244556427 ,10.0697593688965,23.165225982666,1.6226841211319,10.3156270980835,22.8844871520996,2.36132836341858,10.029746055603 ,23.0400581359863,3.33455991744995,9.70546817779541,23.283145904541,4.26745891571045,9.1259241104126,23.5924777984619 ,4.93032312393188,8.48777198791504,24.2007484436035,5.37533950805664,7.91638708114624,25.1751689910889,5.94517946243286 ,6.03314876556396,23.5322189331055,5.99998188018799,5.52076005935669,22.6739807128906,5.62737798690796,4.69226598739624 ,22.0745868682861,5.19560813903809,4.09655714035034,21.4006404876709,4.22978782653809,4.06289386749268,21.0164031982422 ,3.00006198883057,3.60996341705322,21.3400974273682,2.08173608779907,9.97756958007813,25.3492584228516,1.34460115432739 ,3.06863784790039,22.1662006378174,2.02713704109192,9.65499496459961,28.2802486419678,0.782940268516541,2.74755239486694 ,23.2384338378906,2.15618586540222,8.82112979888916,31.0097255706787,-0.0560440123081207,1.86797857284546,28.614429473877 ,3.1319215297699,7.94068431854248,34.379695892334,-0.816163599491119,1.89337337017059,29.1634712219238,3.36262130737305 ,7.79942846298218,36.6775054931641,-0.0194739997386932,7.60380077362061,37.7963676452637,3.67964386940002,7.22692108154297 ,37.5835647583008,4.55090570449829,6.1025857925415,36.3641624450684,5.41515636444092,4.72125434875488,34.9616813659668 ,5.66096448898315,3.76971030235291,33.8117027282715,5.53015184402466,3.28945708274841,33.111946105957,5.19547367095947 ,2.10025668144226,30.606517791748,3.93692255020142,6.30683612823486,24.863639831543,6.18582439422607,6.11436796188354 ,23.6850185394287,6.04688310623169,7.78097343444824,26.0277538299561,6.21321439743042,6.21463012695313,25.6692790985107 ,6.46301651000977,7.55111742019653,30.3920917510986,6.39775085449219,7.45050239562988,32.3329658508301,6.15083980560303 ,7.27913808822632,35.1760787963867,5.55547094345093,6.99305248260498,37.2315101623535,4.84737014770508,6.91676378250122 ,37.2658882141113,4.76304244995117,2.28811478614807,26.3853092193604,2.56221723556519,2.23476266860962,26.3820323944092 ,2.68446326255798,2.61036849021912,26.5165481567383,3.75161123275757,2.90822100639343,26.7460823059082,4.73223924636841 ,3.56000971794128,27.1050662994385,5.75402736663818,4.27271509170532,27.3566989898682,6.4875373840332,5.66520214080811 ,27.6100559234619,6.7059268951416,5.7662296295166,27.5774803161621,6.57018709182739,7.6766791343689,27.9425983428955 ,6.35362434387207,7.80297374725342,27.9894924163818,6.4398775100708,8.66915988922119,28.0921421051025,5.84028482437134 ,9.47067070007324,28.122034072876,5.24188470840454,2.20996499061584,29.9731330871582,4.56600332260132,2.10399508476257 ,30.5140609741211,4.07979536056519,5.30119848251343,29.6463642120361,6.68332195281982,4.92222452163696,31.0695972442627 ,6.47152519226074,4.48160314559937,32.5191307067871,6.0656886100769,4.14768695831299,34.1093292236328,5.51155948638916 ,4.15120220184326,34.2035255432129,5.43701601028442,1.98364222049713,27.8785266876221,2.93078923225403,1.94235408306122 ,27.87815284729,3.06318759918213,2.36977767944336,28.0997009277344,3.98143076896667,2.63067173957825,28.2976512908936 ,4.7458701133728,4.41857099533081,29.2386493682861,6.59666156768799,7.56398439407349,30.5628261566162,6.71118402481079 ,7.49685859680176,32.181510925293,6.48458242416382,7.468101978302,32.5037994384766,6.4351601600647,7.3045482635498 ,35.2156181335449,5.87828588485718,6.73865842819214,32.2596702575684,6.63548994064331,6.20531892776489,36.3156089782715 ,5.84047269821167,7.05880689620972,37.1785850524902,5.21333408355713,4.72433471679688,34.8476142883301,6.0802116394043 ,6.41811656951904,34.4748916625977,6.24666404724121,7.55984258651733,30.338529586792,6.73191165924072,7.69254875183105 ,27.9261207580566,6.6812539100647,7.82909297943115,26.0347461700439,6.52567291259766,6.32481861114502,25.6593074798584 ,6.7205548286438,7.95692873001099,25.1614246368408,6.27644300460815,6.40386581420898,24.8511695861816,6.50110149383545 ,5.83545446395874,27.5759601593018,6.88720178604126,5.36732721328735,29.6078033447266,7.00625324249268,4.96170663833618 ,31.019079208374,6.80995941162109,5.2938666343689,29.7915210723877,6.99704647064209,4.8523211479187,31.2468891143799 ,6.76324796676636,4.41397762298584,32.6190986633301,6.37181329727173,5.5450701713562,31.6847229003906,6.82576894760132 ,5.13066625595093,33.2722244262695,6.48147821426392,4.08279800415039,34.1065979003906,5.84938621520996,8.26431655883789 ,35.4175186157227,0.438631266355515,8.11979484558105,35.6021957397461,4.41319370269775,8.47711849212646,32.8561134338379 ,5.23995113372803,8.70630931854248,30.8051433563232,5.64721870422363,8.90147686004639,28.0989265441895,5.80129289627075 ,8.9966287612915,26.0767917633057,5.69587278366089,8.94582271575928,25.184455871582,5.4431848526001,9.03204917907715 ,25.4176197052002,5.50921106338501,9.29705619812012,25.0721836090088,5.14672422409058,9.88245296478271,24.7685241699219 ,4.34585094451904,10.1949939727783,24.4736366271973,3.25530242919922,10.2092380523682,24.4950656890869,2.25282216072083 ,10.2866735458374,24.5622482299805,2.40504479408264,10.3209056854248,25.4585094451904,2.32878351211548,10.1164855957031 ,28.1952266693115,2.0103747844696,9.35418319702148,31.3025550842285,1.47600424289703,8.92996597290039,33.1470336914063 ,1.12682414054871,8.36096000671387,35.5315437316895,0.640533804893494,7.96617650985718,36.6328430175781,0.68460077047348 ,10.1855125427246,24.3762168884277,2.39254546165466,4.88428688049316,27.5448017120361,6.62644290924072,5.35536670684814 ,25.2809295654297,6.34503364562988,2.41899251937866,31.5349407196045,4.39026832580566,2.42222929000854,31.4518260955811 ,4.50084161758423,2.73904395103455,30.6618022918701,5.13954162597656,3.01469254493713,29.4937610626221,5.50692224502563 ,3.18643069267273,28.6368103027344,5.63183641433716,2.88213300704956,32.440502166748,4.80782842636108,2.88537335395813 ,32.3740043640137,4.91404724121094,3.25417995452881,31.2281646728516,5.60531949996948,3.57900738716125,29.9968357086182 ,6.06741666793823,3.84910750389099,29.0165786743164,6.32851791381836,3.78587698936462,22.6147346496582,4.40958499908447 ,4.40473413467407,23.2173252105713,5.3618688583374,5.05243253707886,23.7748394012451,5.98046350479126,5.15192556381226 ,23.9108238220215,6.03752183914185,5.09901189804077,24.0283966064453,6.06259202957153,4.98978471755981,24.8948726654053 ,6.22997379302979,4.42884540557861,27.3927001953125,6.41243886947632,3.99426865577698,29.0578422546387,6.27595472335815 ,3.70775318145752,30.0652732849121,5.9921236038208,3.36599230766296,31.2928047180176,5.52768707275391,3.21600556373596 ,23.382287979126,3.66167640686035,3.13256430625916,23.4489612579346,3.96262264251709,2.60371732711792,26.5579433441162 ,3.99766564369202,2.36950469017029,28.1366233825684,4.2071647644043,2.27195620536804,28.888053894043,4.36787366867065 ,2.10059666633606,29.8359222412109,4.44796895980835,3.65240097045898,22.6352996826172,4.09371852874756,3.45793771743774 ,22.3002586364746,3.45713114738464,5.93335342407227,23.5488815307617,6.10497140884399,8.28321838378906,35.4727020263672 ,4.0598840713501,8.21437072753906,35.5108833312988,3.94676041603088,8.23526859283447,35.5774803161621,4.07809209823608 ,8.98128318786621,33.3073310852051,1.50170826911926,8.80344772338867,33.7087898254395,1.31972646713257,8.37926006317139 ,35.5428810119629,0.895102500915527,9.05762958526611,33.3395156860352,3.25746941566467,8.79792022705078,33.7233619689941 ,3.65049529075623,8.32604217529297,35.6871376037598,0.887703597545624,8.37180233001709,35.6292266845703,1.01363062858582 ,7.92610263824463,36.6413269042969,3.91050696372986,9.65692615509033,34.4289665222168,3.45484137535095,9.65652179718018 ,34.4304313659668,1.51501369476318,9.64732360839844,36.1605224609375,1.23773038387299,9.6471118927002,36.1608505249023 ,3.73834991455078,8.90835475921631,36.0127983093262,4.05285596847534,8.04823875427246,38.801326751709,3.066978931427 ,8.04919147491455,38.7976417541504,1.90342044830322,8.91025924682617,36.0060348510742,0.912298798561096,8.98512554168701 ,35.85498046875,0.943507790565491,9.66490745544434,35.9975662231445,1.24367785453796,9.66507625579834,35.9963912963867 ,3.73160123825073,8.98733711242676,35.8529968261719,4.02006530761719,8.58648204803467,38.6790885925293,1.94465684890747 ,8.5863561630249,38.6800575256348,3.02977108955383,8.05947399139404,38.9483451843262,2.96082544326782,8.3496265411377 ,37.876407623291,1.19929134845734,9.70539474487305,34.3412780761719,3.23126864433289,9.09271430969238,37.9376640319824 ,3.39191293716431,9.04487419128418,37.9428787231445,3.58865451812744,9.60724449157715,34.5523490905762,3.56974840164185 ,9.73832893371582,35.9771957397461,3.46515989303589,9.29694271087646,36.0857925415039,3.90996932983398,8.72676181793213 ,38.6951217651367,2.94520330429077,8.65796184539795,38.7216682434082,2.94792580604553,8.65403747558594,38.6301765441895 ,3.03623008728027,8.65191173553467,37.937370300293,1.26801216602325,8.31970977783203,38.7574996948242,1.91880691051483 ,8.65421104431152,38.628044128418,1.93424451351166,9.04490661621094,37.9410629272461,1.38660764694214,9.34207344055176 ,35.9353485107422,3.8918993473053,9.34069728851318,35.9380073547363,1.07297730445862,8.72695350646973,38.6949348449707 ,2.0697033405304,8.65809059143066,38.7215995788574,2.0669732093811,8.05986881256104,38.9483337402344,2.05407619476318 ,9.70482158660889,34.3420333862305,1.77387404441834,9.73829746246338,35.9785690307617,1.59816265106201,9.09149074554443 ,37.9406356811523,1.67303395271301,8.87478923797607,35.9269828796387,1.03641319274902,9.2094841003418,35.9949035644531 ,1.16528415679932,9.29795265197754,36.0840759277344,1.05569672584534,9.5132417678833,36.056079864502,1.33062779903412 ,9.62839031219482,36.0285873413086,1.6688996553421,9.74010372161865,36.1250686645508,1.59929883480072,9.6286153793335 ,36.0278968811035,3.39043879508972,9.74026870727539,36.1246604919434,3.46993517875671,9.51327228546143,36.0559005737305 ,3.64421725273132,9.20956325531006,35.9938201904297,3.79994034767151,8.87504005432129,35.9276924133301,3.92794609069824 ,8.37112808227539,38.8416557312012,2.06099200248718,8.37003135681152,38.8421287536621,2.9540810585022,8.31944561004639 ,38.7596626281738,3.05168437957764,8.65036487579346,37.9585037231445,3.69329905509949,8.33966159820557,37.9150276184082 ,3.76029419898987,9.63536262512207,34.6465492248535,3.56787443161011,9.71852207183838,34.5815124511719,3.4976921081543 ,9.76471328735352,34.5473899841309,3.26735043525696,9.76347923278809,34.56298828125,1.74737155437469,9.71766757965088 ,34.592529296875,1.47125852108002,9.63161945343018,34.6595687866211,1.3942711353302,9.60330772399902,34.5609931945801 ,1.39289259910584,8.2984733581543,38.0600166320801,1.24847328662872,8.60289287567139,38.0795478820801,1.30549657344818 ,8.97101306915283,38.050895690918,1.3974621295929,9.00732898712158,38.0661354064941,1.67648065090179,9.00812816619873 ,38.0641098022461,3.38718843460083,8.97093868255615,38.052806854248,3.57767224311829,8.60173034667969,38.0949897766113 ,3.65988159179688,8.29121208190918,38.0429191589355,3.71564388275146,8.25728702545166,38.1638870239258,1.49070048332214 ,8.52094841003418,38.2038345336914,1.5344785451889,8.83392238616943,38.2279777526855,1.6033970117569,8.87556648254395 ,38.2440948486328,1.82842564582825,8.875901222229,38.2435035705566,3.21620106697083,8.83407974243164,38.2287864685059 ,3.36956572532654,8.52165985107422,38.2090759277344,3.43147039413452,8.25486278533936,38.1729011535645,3.47432494163513 ,8.57520580291748,36.9442749023438,1.05579495429993,8.92019557952881,37.056266784668,1.16185414791107,9.29137802124023 ,37.1757545471191,1.31216907501221,9.36106109619141,37.1578140258789,1.63616633415222,9.36175537109375,37.1561241149902 ,3.4309241771698,9.29125690460205,37.1768264770508,3.66350221633911,8.91891670227051,37.1471099853516,3.80163431167603 ,8.56927108764648,37.0888748168945,3.90657520294189,8.83453559875488,33.546947479248,1.04526650905609,8.76492404937744 ,33.456356048584,0.906054317951202,8.39243221282959,33.0780563354492,-0.461591124534607,8.27371215820313,32.9051399230957 ,-0.532841503620148,8.87887573242188,32.999683380127,1.01147544384003,8.57392024993896,32.4365539550781,-0.315257996320724 ,8.42005634307861,32.313835144043,-0.395357549190521,8.54056930541992,34.598030090332,3.85518980026245,9.29729080200195 ,35.2026748657227,3.79490661621094,9.48871803283691,35.2909469604492,3.72988700866699,9.69179916381836,35.2889518737793 ,3.61464691162109,9.75152111053467,35.2622909545898,3.36625528335571,9.75088977813721,35.2707824707031,1.672767162323 ,9.69128799438477,35.2950477600098,1.35746812820435,9.48615837097168,35.2987899780273,1.23362421989441,9.29421615600586 ,35.2079849243164,1.16820025444031,8.59135437011719,34.6258354187012,1.10741424560547,8.59774780273438,34.5392456054688 ,0.842900216579437,8.51461982727051,34.4369354248047,0.672342777252197,8.21594047546387,33.7888870239258,-0.589591026306152 ,8.08582305908203,33.6414337158203,-0.667325794696808,7.97919321060181,35.5220642089844,-0.356160432100296,7.86904096603394 ,35.527904510498,-0.407945513725281,9.41505527496338,25.5495491027832,1.24658966064453,4.65747976303101,29.993688583374 ,-1.9929701089859,5.70963573455811,25.2698745727539,-1.25907444953918,4.05296611785889,24.9229850769043,-1.07812261581421 ,1.94002258777618,29.5671463012695,2.09152460098267,1.39111661911011,29.5243148803711,1.60391390323639,1.16515398025513 ,30.6779403686523,1.79934179782867,1.99050807952881,29.5482559204102,0.0322921723127365,3.18263959884644,24.8409614562988 ,0.259835541248322,3.07358360290527,24.7372646331787,-0.0272905211895704,3.43370652198792,23.3883876800537,-0.0178845003247261 ,3.67771339416504,23.4529304504395,0.146148890256882,7.49344301223755,25.4977970123291,-1.50432002544403,8.73250484466553 ,25.5885562896729,-0.433179765939713,3.90392780303955,24.9208126068115,-1.19340264797211,2.86472368240356,24.7657909393311 ,-0.011822797358036,1.67441141605377,29.4105987548828,0.0618886798620224,1.62392604351044,29.4356174468994,2.00085210800171 ,1.67769014835358,29.4277153015137,-0.223505362868309,2.7168333530426,29.4735317230225,-1.74457061290741,6.45831537246704 ,30.1916770935059,-2.30510973930359,7.7251763343811,30.5071926116943,-1.30389845371246,6.30463266372681,30.1748123168945 ,-2.29767990112305,4.73208427429199,29.9153747558594,-2.37516093254089,4.5478458404541,29.8604946136475,-2.31193232536316 ,2.86321783065796,29.5412120819092,-1.96411395072937,7.28996992111206,25.404899597168,-1.47658205032349,5.74078845977783 ,25.2103481292725,-1.61829876899719,2.64102792739868,24.8287105560303,1.95682787895203,2.86312246322632,24.7931175231934 ,0.245301082730293,8.77632522583008,30.8639965057373,-0.043558195233345,9.689621925354,25.6373138427734,1.0596616268158 ,8.80739498138428,25.5922794342041,-0.354497760534287,7.8030800819397,30.560209274292,-1.22313511371613,4.01765489578247 ,24.8804779052734,-1.40720963478088,5.62358236312866,25.1768970489502,-1.58816146850586,1.97695231437683,29.7982711791992 ,3.62867569923401,1.983323097229,29.7955074310303,3.76431751251221,7.27921152114868,7.94315719604492,1.11295449733734 ,8.45061302185059,7.78688621520996,2.35225319862366,9.98027992248535,7.93115139007568,2.6541576385498,11.047269821167 ,8.17732429504395,2.32532548904419,12.2088813781738,8.54818725585938,1.43931353092194,12.7967157363892,8.97920799255371 ,-0.303374022245407,12.7254018783569,9.27799606323242,-1.02359855175018,9.60103511810303,9.58114910125732,-4.08662033081055 ,8.47558498382568,9.39766216278076,-3.92700147628784,7.04356861114502,9.15869903564453,-3.36116600036621,6.57959508895874 ,8.94561100006104,-2.03293538093567,6.16128015518188,8.42148208618164,-0.628806829452515,5.64768552780151,12.3261880874634 ,1.44831931591034,5.9045262336731,11.2130880355835,1.26543354988098,5.8640022277832,9.76654434204102,1.05148673057556 ,6.4172043800354,8.82000827789307,0.554828345775604,6.70876121520996,8.10266876220703,0.363239943981171,12.200852394104 ,9.57963943481445,-2.46441507339478,12.4662971496582,10.3750247955322,-2.37286257743835,12.2984609603882,11.5450801849365 ,-1.93835651874542,12.0142498016357,12.9365711212158,-1.61892592906952,11.9773483276367,13.8030195236206,-1.4678817987442 ,11.8417062759399,15.5326137542725,-1.05799794197083,11.2553758621216,17.1266117095947,-0.394293993711472,10.8601474761963 ,18.0437698364258,0.00694957328960299,10.4829511642456,18.8434734344482,0.322913497686386,9.9399585723877,19.8044834136963 ,0.532618045806885,9.69186401367188,20.4600238800049,0.586481034755707,9.4355001449585,21.1805152893066,0.577586591243744 ,9.07950115203857,22.0507411956787,0.495223522186279,8.69851875305176,23.1948986053467,0.245849296450615,6.16310691833496 ,31.7836303710938,6.44500494003296,7.04650259017944,25.1148319244385,5.67837047576904,7.1069540977478,25.0596961975098 ,6.07496929168701,7.16845560073853,25.0319118499756,6.39875030517578,7.08851909637451,25.8666687011719,6.62717199325562 ,6.80701875686646,27.7775402069092,6.78988933563232,6.44509267807007,29.9831085205078,6.92495393753052,6.4039478302002 ,30.032678604126,6.60236120223999,6.41693687438965,30.1916389465332,6.91217041015625,6.20972585678101,31.6967830657959 ,6.77317142486572,-6.54231739044189,12.6112308502197,2.51405692100525,-5.62890911102295,12.6281480789185,1.56339108943939 ,-5.08411502838135,13.020073890686,0.0338337942957878,-5.60205984115601,13.3931608200073,-1.27092814445496,-8.1321964263916 ,13.9843788146973,-3.27790832519531,-9.74130058288574,14.2703952789307,-3.36757755279541,-11.2661638259888,14.2782869338989 ,-2.45767784118652,-11.9547777175903,14.0997133255005,-1.39795982837677,-12.5701141357422,13.9658508300781,-0.201430022716522 ,-12.4840297698975,13.6959028244019,1.45385241508484,-11.4584693908691,13.1931886672974,2.85491061210632,-10.697582244873 ,12.8946161270142,3.39300060272217,-6.09357261657715,14.955735206604,3.21051430702209,-5.30345153808594,15.0847148895264 ,2.32294702529907,-4.65844058990479,15.4953756332397,0.879150092601776,-5.3569164276123,15.7576780319214,-0.361837923526764 ,-7.63014793395996,16.5907344818115,-2.55088973045349,-9.18150901794434,16.8746166229248,-2.59523558616638,-10.7870645523071 ,16.9461994171143,-1.46924579143524,-11.3884553909302,16.7632884979248,-0.545281529426575,-11.8917779922485,16.6512069702148 ,0.681422531604767,-11.7337970733643,16.379919052124,2.31548643112183,-4.29751968383789,24.8999042510986,-1.23498022556305 ,-4.68551063537598,23.5386791229248,-1.07134437561035,-4.90844106674194,23.582426071167,-0.784929275512695,-5.06855154037476 ,22.799654006958,-0.584399402141571,-5.32814025878906,21.655574798584,-0.376716136932373,-5.36390161514282,20.6551761627197 ,-0.347969770431519,-5.5555419921875,20.0228042602539,-0.38139283657074,-5.59836912155151,19.3803081512451,-0.498663604259491 ,-5.93225002288818,18.2411861419678,-0.859450995922089,-6.02198886871338,17.4772243499756,-1.10206782817841,-6.18644666671753 ,16.2123355865479,-1.70700764656067,-6.38514518737793,14.8989009857178,-2.24836111068726,-6.56212663650513,13.678539276123 ,-2.60871553421021,-6.80606079101563,12.2707643508911,-2.95792460441589,-7.0539927482605,11.1793432235718,-3.29677653312683 ,-7.20544815063477,10.1790170669556,-3.73171949386597,-7.26315689086914,9.19534206390381,-3.44793200492859,-10.0475654602051 ,11.6314668655396,-4.09846067428589,-10.0540437698364,10.5353965759277,-4.18405389785767,-9.9586124420166,9.60340690612793 ,-3.94887590408325,11.2027616500854,9.68085098266602,-3.46960878372192,11.4367513656616,10.549054145813,-3.45530366897583 ,11.2972002029419,11.8169927597046,-3.32886862754822,11.1392621994019,13.012734413147,-2.86512422561646,11.1196727752686 ,13.9444828033447,-2.67804932594299,10.8612976074219,15.5450296401978,-2.19082450866699,10.4322099685669,17.3136310577393 ,-1.5093207359314,10.1309051513672,18.2544040679932,-1.11548435688019,9.73401069641113,19.0150680541992,-0.632054448127747 ,9.29386520385742,19.8477249145508,-0.29420593380928,9.02189445495605,20.4448375701904,-0.182775765657425,8.72895908355713 ,21.1493473052979,-0.079991951584816,7.38872718811035,21.8982887268066,-0.293966174125671,7.18128442764282,23.0726432800293 ,-0.403393626213074,4.94621467590332,22.7787132263184,-0.587266862392426,5.13886499404907,21.6332550048828,-0.364601194858551 ,5.25503253936768,20.6421451568604,-0.341791093349457,5.42467212677002,20.0016403198242,-0.356989920139313,5.51656103134155 ,19.3624057769775,-0.464608579874039,5.83164167404175,18.1995677947998,-0.796680629253387,5.99487543106079,17.471996307373 ,-1.08526873588562,6.09748268127441,16.7805137634277,-1.46871149539948,6.26286697387695,14.8802556991577,-2.18778109550476 ,6.45515012741089,13.1925020217896,-2.67920064926147,6.63633728027344,12.2249088287354,-2.88158559799194,6.9144926071167 ,11.1545562744141,-3.08205604553223,2.08748078346252,44.8266448974609,-3.61138391494751,1.88030695915222,44.8266448974609 ,-3.81855821609497,1.73669397830963,45.5486373901367,-3.81855821609497,1.92809784412384,45.6279182434082,-3.61138391494751 ,1.3277200460434,46.1607093811035,-3.81855821609497,1.47421503067017,46.307201385498,-3.61138391494751,0.715646982192993 ,46.5696830749512,-3.81855893135071,0.794929981231689,46.7610855102539,-3.61138391494751,-0.00634199986234307,46.7132949829102 ,-3.81855893135071,-0.00634199986234307,46.920467376709,-3.61138391494751,-0.728331029415131,46.5696830749512,-3.81855893135071 ,-0.807613015174866,46.7610855102539,-3.61138391494751,-1.34040415287018,46.1607093811035,-3.81855821609497,-1.48689794540405 ,46.307201385498,-3.61138391494751,-1.74937784671783,45.5486335754395,-3.81855893135071,-1.94078195095062,45.6279182434082 ,-3.61138391494751,-1.89299011230469,44.8266448974609,-3.81855893135071,-2.10016393661499,44.8266448974609,-3.61138391494751 ,-1.74937784671783,44.1046562194824,-3.81855821609497,-1.94078195095062,44.0253753662109,-3.61138391494751,-1.34040415287018 ,43.4925842285156,-3.81855821609497,-1.48689794540405,43.3460884094238,-3.61138510704041,-0.728331029415131,43.083610534668 ,-3.81855821609497,-0.807613015174866,42.8922080993652,-3.61138391494751,-0.00634100008755922,42.939998626709,-3.81855821609497 ,-0.00634100008755922,42.7328224182129,-3.61138272285461,0.715647995471954,43.083610534668,-3.81855821609497,0.794929981231689 ,42.8922080993652,-3.61138391494751,1.32772099971771,43.4925842285156,-3.81855821609497,1.47421503067017,43.3460922241211 ,-3.61138391494751,1.73669505119324,44.1046562194824,-3.81855821609497,1.92809915542603,44.0253753662109,-3.61138391494751 ,-0.0702939033508301,46.9095268249512,-2.83078742027283,-0.00634199986234307,44.8266448974609,-3.81855893135071,-0.00774500099942088 ,48.5321197509766,-4.27275657653809,-2.79399394989014,48.5291366577148,-4.25684595108032,-1.97193670272827,49.2199897766113 ,-4.70548629760742,-0.0079365773126483,49.2231712341309,-4.72618436813354,-3.93324613571167,48.1487579345703,-3.40063524246216 ,-2.86614584922791,49.3610649108887,-4.13264656066895,-2.95772695541382,48.5543785095215,-4.20622110366821,-3.24585890769959 ,47.8829612731934,-3.85739922523499,-3.16376090049744,46.6581039428711,-3.27878475189209,-3.93707990646362,48.0531578063965 ,-3.37293791770935,-3.2502818107605,47.7346115112305,-3.79583311080933,-2.82787704467773,46.7353248596191,-3.73126482963562 ,-3.13004899024963,46.5379753112793,-3.27038884162903,-2.78846979141235,46.5956077575684,-3.71025991439819,-2.77864789962769 ,44.5108299255371,-3.70978999137878,-3.10399317741394,44.4963989257813,-3.17587113380432,-0.00774674257263541,42.1210021972656 ,-3.3051495552063,-1.71360194683075,42.1770324707031,-3.16398596763611,-1.34515404701233,42.3104934692383,-3.69572424888611 ,-0.00774500146508217,42.3095550537109,-3.69797968864441,-2.17577815055847,49.2368698120117,-4.64067125320435,-1.4881579875946 ,50.2866439819336,-4.61767959594727,-1.25603806972504,49.8282089233398,-4.99077701568604,-1.59205400943756,46.349178314209 ,-3.77787971496582,-2.68635511398315,46.6700057983398,-3.77787971496582,-2.76875805854797,46.9001617431641,-3.77554607391357 ,-0.831133008003235,46.8742370605469,-3.77787899971008,-2.67803001403809,44.5424156188965,-3.77787899971008,-2.01448392868042 ,45.6905746459961,-3.77787899971008,-2.18441390991211,44.7907295227051,-3.77787899971008,-0.00948680471628904,50.4008445739746 ,-4.60829496383667,-0.00942133273929358,49.8690757751465,-5.05734491348267,-1.13300633430481,49.8691291809082,-5.00537014007568 ,-2.76524996757507,43.1158752441406,-3.17091298103333,-2.48791909217834,43.2134246826172,-3.70322799682617,-1.46523594856262 ,42.3661613464355,-3.70073199272156,-1.15198469161987,49.7354354858398,-5.01462888717651,-0.00865909457206726,49.7371101379395 ,-5.06615304946899,-0.00774500006809831,42.4267349243164,-3.77787899971008,-1.36082100868225,42.4239044189453,-3.77787899971008 ,-0.82917308807373,42.7932014465332,-3.77787899971008,-0.00774500006809831,42.6284027099609,-3.77787899971008,-0.00774500006809831 ,47.0389404296875,-3.80383110046387,-1.53621804714203,43.2656326293945,-3.77787899971008,-2.01435494422913,43.9812316894531 ,-3.77787899971008,-0.00774500006809831,47.7899284362793,-3.90835189819336,-2.88847088813782,48.390251159668,-4.16416501998901 ,-3.15139889717102,47.7899284362793,-3.85440111160278,-2.3965790271759,43.2774925231934,-3.77787899971008,-2.85712099075317 ,47.7899284362793,-3.90835189819336,-0.00774500006809831,44.4963836669922,-2.88441801071167,-0.00774500379338861,43.1158981323242 ,-2.87946343421936,1.95598769187927,49.219898223877,-4.70561122894287,2.7785050868988,48.5291366577148,-4.25684595108032 ,3.93082571029663,48.1475028991699,-3.40081644058228,3.23036909103394,47.8829612731934,-3.85739922523499,2.94223666191101 ,48.5543785095215,-4.20622110366821,2.85060954093933,49.3610458374023,-4.13265657424927,3.15620064735413,46.6549911499023 ,-3.27752184867859,2.81238603591919,46.7353248596191,-3.73126459121704,3.23479199409485,47.7346115112305,-3.79583311080933 ,3.92158389091492,48.0531539916992,-3.37293839454651,2.76315808296204,44.5108299255371,-3.70978999137878,2.77297902107239 ,46.5956077575684,-3.71025967597961,3.13004899024963,46.537971496582,-3.27039289474487,3.08850169181824,44.4963836669922 ,-3.17586994171143,1.32966256141663,42.3104934692383,-3.69572329521179,1.66867196559906,42.1703910827637,-3.14673805236816 ,2.16000866889954,49.2367668151855,-4.64066600799561,1.23720574378967,49.8278503417969,-4.99131345748901,1.46432018280029 ,50.2877388000488,-4.62241172790527,1.57656502723694,46.349178314209,-3.77787971496582,0.815643012523651,46.8742370605469 ,-3.77787899971008,2.75326800346375,46.9001617431641,-3.77554607391357,2.67086505889893,46.6700057983398,-3.77787971496582 ,1.99899387359619,45.6905746459961,-3.77787899971008,2.66253995895386,44.5424156188965,-3.77787899971008,2.16892409324646 ,44.7907295227051,-3.77787899971008,1.11472451686859,49.868824005127,-5.00572633743286,2.74976110458374,43.1158752441406 ,-3.17091298103333,2.47242999076843,43.2134246826172,-3.70322799682617,1.44974386692047,42.3661613464355,-3.70073080062866 ,1.13459324836731,49.7351531982422,-5.01477098464966,0.813682913780212,42.7932014465332,-3.77787899971008,1.34533095359802 ,42.4239044189453,-3.77787899971008,1.52072787284851,43.2656326293945,-3.77787899971008,1.99886500835419,43.9812316894531 ,-3.77787899971008,2.87298202514648,48.390251159668,-4.16416501998901,3.13590908050537,47.7899284362793,-3.85440111160278 ,2.38108801841736,43.2774925231934,-3.77787899971008,2.84163093566895,47.7899284362793,-3.90835189819336,-4.58376359939575 ,63.043212890625,-0.74325555562973,-4.32382106781006,63.199146270752,-2.11853528022766,-5.61950731277466,62.6101608276367 ,-2.02238321304321,-5.5639181137085,62.6561889648438,-0.627221822738647,-3.81792235374451,61.6314811706543,1.93067765235901 ,-4.23066997528076,62.7958450317383,0.643227458000183,-4.50719594955444,62.3577041625977,0.684112071990967,-4.24381637573242 ,61.2449722290039,1.89936196804047,-4.83367252349854,60.567813873291,3.36426424980164,-4.02966737747192,60.8557052612305 ,3.31201100349426,-4.2675518989563,61.3561515808105,2.65948343276978,-5.05083751678467,61.1046981811523,2.70250844955444 ,-4.2227029800415,59.0873870849609,4.58839559555054,-3.1375093460083,59.3523139953613,4.54741859436035,-2.95601749420166 ,59.3083114624023,4.45222663879395,-1.78824007511139,59.4734725952148,4.38385057449341,-2.04711675643921,60.3847465515137 ,3.65144824981689,-3.29090762138367,60.1977424621582,3.68307900428772,0.571158766746521,60.8396873474121,5.0963306427002 ,-0.839762628078461,60.8675537109375,5.13892889022827,-0.867940545082092,59.7659683227539,5.27337598800659,0.544704496860504 ,59.7316017150879,5.23783779144287,-6.39116334915161,62.2082328796387,-0.568828225135803,-6.51852989196777,62.1134452819824 ,-1.99753320217133,-5.04658603668213,61.0131149291992,1.97637069225311,-5.38415002822876,62.0700721740723,0.693856477737427 ,-6.20381593704224,61.7258529663086,0.790133476257324,-5.95493364334106,60.6742477416992,2.05090570449829,-6.10866117477417 ,59.5777435302734,2.72402358055115,-5.58027458190918,59.5957260131836,2.72076964378357,-6.3722677230835,60.6542625427246 ,2.03971314430237,-2.61364102363586,58.3588180541992,5.07920122146606,-1.34503436088562,58.123950958252,5.24714374542236 ,-0.906973481178284,58.397289276123,5.45396566390991,0.50952011346817,58.3454170227051,5.40429639816284,-5.79731750488281 ,61.9858093261719,-3.4841206073761,-6.64396810531616,61.690299987793,-3.41667151451111,-6.98294544219971,60.5666580200195 ,1.96027648448944,-7.32416105270386,61.496711730957,0.851831436157227,-7.35325860977173,61.2873115539551,0.723838567733765 ,-6.97983884811401,60.3939323425293,1.76361238956451,-0.967165589332581,57.3445663452148,5.59643316268921,0.468669772148132 ,57.2876739501953,5.54235649108887,-7.52687740325928,56.2300033569336,3.33295869827271,-7.61058712005615,55.2209396362305 ,2.84668350219727,-7.5824499130249,55.3210792541504,3.7516176700592,-7.54807090759277,56.2279281616211,3.62562227249146 ,-7.93686151504517,58.7858695983887,-4.79697370529175,-8.15877056121826,58.8994178771973,-4.62168502807617,-8.16490364074707 ,58.9746856689453,-4.9071307182312,-7.90763759613037,58.8739242553711,-4.98211908340454,-7.96249437332153,53.4727363586426 ,1.87367284297943,-7.73882818222046,53.5761909484863,1.88744831085205,-8.21688365936279,53.0939102172852,0.0579092763364315 ,-8.36908531188965,53.0343475341797,0.124661922454834,-6.6935658454895,53.8076362609863,4.69332361221313,-7.47776079177856 ,55.1806678771973,3.96003985404968,-7.20041465759277,53.4745635986328,4.326331615448,-6.71329784393311,52.4803886413574 ,4.68359184265137,-6.11323595046997,55.6096496582031,-5.85344552993774,-5.36878347396851,53.065486907959,-5.65250778198242 ,-6.28663635253906,53.3525581359863,-5.50807046890259,-7.25142240524292,55.2232780456543,-5.57690858840942,-6.5656213760376 ,52.5676918029785,-4.90726852416992,-6.05972480773926,51.4805221557617,-4.63228845596313,-6.8934383392334,51.4382705688477 ,-4.08465576171875,-7.4780101776123,53.3036689758301,-4.63438510894775,-8.09913444519043,52.0839996337891,-1.7106853723526 ,-7.95109605789185,52.5316047668457,-3.3199098110199,-7.54325914382935,51.3055038452148,-3.03992581367493,-7.89064073562622 ,51.2711715698242,-1.57859110832214,-7.34243583679199,53.1391639709473,2.97148561477661,-7.72463750839233,52.8233032226563 ,1.86843764781952,-7.47193384170532,51.8114624023438,1.93101298809052,-6.97390651702881,52.0725975036621,3.13220763206482 ,-2.20823454856873,55.570972442627,6.08277320861816,-3.19988632202148,53.8476066589355,6.19407176971436,-1.59189522266388 ,52.2857933044434,6.59298801422119,0.0742019414901733,53.7155609130859,6.43243837356567,4.71617744857156e-010,52.2723007202148 ,6.92303466796875,-1.00653862953186,51.9871368408203,6.87207269668579,-4.69440269470215,51.794303894043,-5.06654739379883 ,-4.19027042388916,51.1079444885254,-4.80165195465088,-5.59660387039185,50.505672454834,-4.25932693481445,-6.42431688308716 ,50.2381935119629,-3.64198398590088,-7.11456871032715,50.1765480041504,-2.64489150047302,-7.54669952392578,50.2063140869141 ,-1.27075219154358,-7.87716817855835,51.4646224975586,0.311745405197144,-7.48381662368774,50.4245948791504,0.464674741029739 ,-7.13096857070923,50.6294746398926,2.01429176330566,-6.53003597259521,50.9027862548828,3.39372110366821,-6.73277521133423 ,52.2691230773926,4.57926988601685,-6.16375160217285,51.0633430480957,5.00885963439941,-3.75121450424194,50.402400970459 ,-4.5294942855835,-5.08280038833618,49.6628837585449,-3.84394526481628,-5.94112730026245,49.2127494812012,-3.15987420082092 ,-6.69155025482178,49.0641174316406,-2.19040656089783,-7.06008195877075,48.9655342102051,-0.943751931190491,-7.02285242080688 ,49.0458526611328,0.573255360126495,-6.71472215652466,49.3308906555176,2.09821772575378,-2.58982849121094,51.0738563537598 ,6.59774255752563,-3.55670809745789,49.7771186828613,6.5001277923584,-3.00732898712158,49.3212928771973,6.79382085800171 ,-2.01268601417542,50.7967338562012,6.85560035705566,-4.8608660697937,49.268138885498,-3.67571473121643,-5.84528207778931 ,48.3474311828613,-2.86911988258362,-6.37699604034424,48.1191711425781,-1.8216849565506,-6.74047231674194,48.0109062194824 ,-0.690343976020813,-6.82137680053711,47.9547233581543,0.649387001991272,-6.5790491104126,47.9910316467285,2.10321021080017 ,-6.25911617279053,49.4032783508301,3.64200615882874,-6.25825023651123,47.9997749328613,3.76795077323914,-6.06466388702393 ,49.4190444946289,4.19036960601807,-5.70988321304321,48.0457077026367,4.83566284179688,-5.44931507110596,49.5626525878906 ,5.51248121261597,-4.90697479248047,48.1723861694336,5.99959182739258,-6.3240818977356,46.956859588623,-1.68728196620941 ,-6.63816499710083,46.9563941955566,-0.538152992725372,-6.8033881187439,46.9570236206055,0.677780985832214,-6.67517471313477 ,46.9568824768066,2.0741720199585,-6.44183683395386,46.9564170837402,3.87416791915894,-5.754075050354,46.9542045593262 ,5.31309509277344,-4.68217277526855,46.987190246582,6.47571611404419,-6.23779010772705,46.8432464599609,-1.71466600894928 ,-5.16316509246826,46.4165267944336,-2.17705106735229,-6.20514297485352,46.4165267944336,-0.0732529982924461,-6.5817289352417 ,46.8283920288086,-0.480120033025742,-6.74122285842896,46.8339805603027,0.608999013900757,-6.32486486434937,46.4132232666016 ,2.05160284042358,-6.63257074356079,46.8119354248047,2.06915593147278,-6.11156702041626,46.4165267944336,3.76738452911377 ,-6.40335369110107,46.8159255981445,3.87055206298828,-5.7106761932373,46.8290824890137,5.30438184738159,-5.2943868637085 ,46.4165267944336,5.02039861679077,-5.7909722328186,52.3580474853516,5.50828695297241,-6.10384559631348,51.189281463623 ,5.15083789825439,-4.62400197982788,50.9104385375977,6.0946216583252,-5.3449330329895,49.7196502685547,5.73267936706543 ,-6.56144762039185,55.3431663513184,4.69130802154541,-7.36446571350098,56.6810684204102,3.84224009513855,-5.36580228805542 ,53.7305793762207,5.65301322937012,-3.89188385009766,52.3838729858398,6.17686653137207,-4.51043176651001,48.5544776916504 ,6.20510101318359,-5.98190259933472,56.9579467773438,4.80389547348022,-6.68937587738037,58.2481575012207,3.90044522285461 ,-4.60328149795532,55.290901184082,5.6990442276001,-4.99980068206787,57.5341339111328,4.98933744430542,-3.26686596870422 ,57.0321769714355,5.57355833053589,-3.75316452980042,58.0651702880859,5.14952659606934,-5.31166410446167,58.3614234924316 ,4.52154731750488,-6.15540170669556,58.9271240234375,3.77175760269165,-7.20317459106445,61.9830055236816,-1.89761126041412 ,-7.35737085342407,61.5284652709961,-3.30922079086304,-6.54331970214844,59.2050437927246,2.63021373748779,-6.27166366577148 ,58.902774810791,2.84936618804932,-6.29670572280884,58.9856071472168,2.92897891998291,-6.54550552368164,59.3159370422363 ,2.77967119216919,-1.39726603031158,60.5229339599609,3.58534479141235,-1.57510507106781,60.4082717895508,2.89312291145325 ,-2.00851607322693,60.4639854431152,3.49718189239502,-1.71285247802734,60.5445404052734,3.71867203712463,-1.78574860095978 ,60.459228515625,3.82921481132507,-1.48285102844238,59.5390167236328,4.49514532089233,-1.19663047790527,58.3662300109863 ,5.17178916931152,-3.87157917022705,47.958366394043,6.67540788650513,-0.636969029903412,60.8942604064941,4.83841991424561 ,-0.79024863243103,60.962833404541,5.07085466384888,0.457402557134628,60.361930847168,3.63983082771301,-1.26206767559052 ,60.3948707580566,3.71665692329407,-0.516775727272034,60.7121925354004,4.86698389053345,0.545945823192596,60.6655578613281 ,4.80527925491333,-1.90578651428223,50.7142028808594,6.84204292297363,-1.50750613212585,50.2555236816406,6.44407510757446 ,-0.874659955501556,51.203067779541,6.49364566802979,-0.924962282180786,51.8707618713379,6.86492204666138,-2.91349101066589 ,49.2260665893555,6.78605461120605,-3.75853896141052,47.8829345703125,6.66740846633911,-3.25709509849548,47.6898155212402 ,6.37078380584717,-2.45923495292664,48.8440284729004,6.41991806030273,-4.50668096542358,46.8707466125488,6.50796604156494 ,-4.11206912994385,46.4815940856934,6.28245401382446,-7.5585765838623,59.0654640197754,-5.5283989906311,-7.46995878219604 ,60.3856201171875,-4.44866323471069,-6.76721334457397,60.624568939209,-4.52078628540039,-6.14805173873901,58.5227699279785 ,-5.91488933563232,-8.05864524841309,60.3752021789551,-3.9132387638092,-8.06969451904297,60.5055313110352,-4.10362768173218 ,-0.00834100041538477,51.369815826416,6.50502157211304,1.2595011700256e-009,52.1202964782715,6.91541719436646,-5.90425300598145 ,46.973030090332,-2.72414398193359,-8.31435585021973,53.2308464050293,-2.7188241481781,-8.39944076538086,53.1169281005859 ,-2.95668482780457,-8.44471454620361,52.7640647888184,-1.54682695865631,-8.36096572875977,52.8903388977051,-1.48194587230682 ,-7.62678861618042,61.6284866333008,-0.48501443862915,-7.60568618774414,61.9373779296875,-0.485954850912094,-8.07814884185791 ,52.3394584655762,0.190092623233795,0.550290882587433,60.8882865905762,4.76571989059448,-1.7434366941452,50.909969329834 ,-5.18805742263794,-2.33943367004395,51.3982582092285,-5.23224210739136,-1.76871800422668,51.3153953552246,-5.25926828384399 ,-1.69533109664917,50.9382476806641,-5.19738101959229,-4.09396886825562,56.196460723877,-6.40887975692749,-3.05688333511353 ,52.6637115478516,-5.79943561553955,-4.14210891723633,52.8269729614258,-5.78603363037109,-5.18700265884399,55.8667755126953 ,-6.07534456253052,-5.05381393432617,60.7147941589355,-4.91381597518921,-5.34420251846313,58.4481544494629,-6.16356611251831 ,-5.99727916717529,60.7204170227051,-4.61755514144897,-4.70381879806519,62.4490394592285,-3.59227013587952,-1.3623218536377 ,64.8544158935547,-4.02434396743774,-2.69535136222839,64.7236633300781,-3.15585780143738,-2.63330173492432,64.7342224121094 ,-3.04266667366028,-1.30076444149017,64.8649139404297,-3.91433906555176,-2.93277454376221,64.6463317871094,-3.40469479560852 ,-1.52712595462799,64.7705841064453,-4.34073972702026,-1.74185812473297,63.4781951904297,-4.48097562789917,-3.31157374382019 ,63.4204177856445,-3.58641505241394,-7.94449377059937,61.180793762207,-3.00423622131348,-7.80348062515259,61.544132232666 ,-1.70561361312866,-7.8006796836853,61.8012619018555,-1.78784132003784,-7.95154476165771,61.3721466064453,-3.14195728302002 ,0.214391976594925,55.7572250366211,6.01338577270508,-3.25250649452209,49.7038879394531,-4.46880578994751,-4.53439283370972 ,48.4554710388184,-3.65794110298157,-4.01119709014893,48.0481262207031,-3.33346700668335,-7.51859521865845,58.8452682495117 ,-5.10757112503052,-6.20120143890381,58.3351211547852,-5.41772556304932,-6.19232892990112,57.6690216064453,-5.42325019836426 ,-7.71127843856812,56.8944816589355,-5.13498258590698,-6.16023826599121,57.5443153381348,-5.9100923538208,-5.33519744873047 ,57.9585075378418,-6.16003465652466,-1.66215860843658,50.8016624450684,-5.12652063369751,-4.62410402297974,48.569221496582 ,-3.68546104431152,-3.34473991394043,49.8112754821777,-4.51330900192261,-4.8910608291626,52.1097564697266,-5.17195892333984 ,-2.69803500175476,51.9790115356445,-5.39096403121948,-3.83595895767212,52.0539054870605,-5.2710337638855,-3.91096091270447 ,63.7480812072754,-0.699044585227966,-3.8998658657074,62.8821792602539,0.582818329334259,-3.79263281822205,62.8982276916504 ,0.564997851848602,-3.80441069602966,63.750545501709,-0.67096471786499,-3.5259120464325,61.7640151977539,1.78173208236694 ,-3.43862271308899,61.7851028442383,1.7415474653244,-3.04325079917908,60.1873435974121,2.77890586853027,-2.90677165985107 ,60.2012214660645,2.76055693626404,-5.70347547531128,60.2030410766602,3.3857159614563,-5.14836645126343,58.5717124938965 ,4.55252075195313,-5.91897249221802,60.7943534851074,2.75335693359375,-3.71688389778137,60.1887817382813,2.95689511299133 ,-3.28231477737427,60.2721557617188,3.00297999382019,-7.00085020065308,62.0723876953125,-0.526914358139038,-6.71971225738525 ,61.6056213378906,0.844036161899567,-5.56729745864868,59.691104888916,3.52987718582153,-5.71301651000977,59.4423065185547 ,3.64712882041931,-3.57847571372986,60.3826675415039,3.64219069480896,-3.41484713554382,60.31640625,3.62375426292419 ,-3.43720960617065,64.3827590942383,-2.05497550964355,-3.33806347846985,64.373649597168,-2.02164340019226,-7.5117359161377 ,56.8763389587402,-5.5517840385437,-7.51681709289551,55.0600738525391,-5.11080932617188,-8.18808746337891,56.4836807250977 ,-4.69205474853516,-8.17397975921631,56.5143508911133,-4.92143249511719,-8.42611789703369,56.3473014831543,-4.90101623535156 ,-8.42153263092041,56.3091087341309,-4.70873975753784,-4.25242900848389,63.668643951416,-0.809715628623962,-3.75736117362976 ,64.2761764526367,-2.15908741950989,-1.82880520820618,62.7808952331543,-4.68377876281738,-3.51832127571106,62.9156723022461 ,-3.66607904434204,-0.0918186083436012,61.6059226989746,-5.04513835906982,0.089295506477356,64.9278793334961,-3.91856741905212 ,-1.20361995697021,64.9284820556641,-3.66630864143372,-1.78249406814575,61.6841812133789,-4.69612216949463,-2.43641114234924 ,64.776237487793,-2.89365482330322,-3.68809533119202,61.2370948791504,-3.70195460319519,-3.11960220336914,64.4344711303711 ,-1.89050722122192,-4.29324579238892,61.4706230163574,-2.09579682350159,-4.03043651580811,60.6889381408691,-5.23682403564453 ,-3.69434881210327,62.3061599731445,-4.30991125106812,-1.99904704093933,61.890754699707,-5.26441860198975,-2.32371950149536 ,60.5881652832031,-6.12655019760132,-4.32064247131348,58.4800796508789,-6.37245512008667,-2.7642867565155,58.7345886230469 ,-7.30046129226685,-2.64850378036499,56.3666534423828,-6.92448711395264,-4.32152223587036,58.2924957275391,-6.41741704940796 ,-2.77837133407593,58.5525093078613,-7.33459043502808,-1.8128000497818,52.6286926269531,-5.84308671951294,-1.77487003803253 ,51.920768737793,-5.47106218338013,0.0356562063097954,64.7234802246094,-4.61506748199463,-1.38461744785309,64.9285125732422 ,-4.06673717498779,0.0609728880226612,64.8952407836914,-4.32138061523438,-2.71697616577148,64.7673110961914,-3.17705631256104 ,-3.46257162094116,64.443473815918,-2.06530833244324,-3.94199109077454,62.983268737793,0.581296861171722,-3.94407916069031 ,63.8352203369141,-0.665212631225586,-3.57530069351196,61.8030242919922,1.82063889503479,-3.06104803085327,60.3160057067871 ,2.79525184631348,-3.7186131477356,63.8903579711914,-0.602997303009033,-3.56484341621399,63.8104438781738,-0.593017041683197 ,-3.23749470710754,64.4939117431641,-1.95676457881927,-3.70114326477051,63.0644645690918,0.599607229232788,-3.36165261268616 ,61.9484100341797,1.65959894657135,-3.19595909118652,61.9603424072266,1.56978213787079,-3.56866765022278,63.0705299377441 ,0.546214044094086,-2.75167322158813,60.3334846496582,2.76962637901306,-2.56414723396301,60.1364898681641,2.75010204315186 ,0.0847144201397896,64.9677810668945,-4.00475406646729,-1.25541496276855,64.9892730712891,-3.77600860595703,-2.51733064651489 ,64.8335800170898,-2.96126484870911,0.0734657272696495,64.8587341308594,-4.12000608444214,-4.24810981750488,61.576530456543 ,-0.733366727828979,-3.94838953018188,61.1668014526367,0.518226802349091,-3.37294268608093,60.2822761535645,1.5179226398468 ,-2.91200637817383,59.3908653259277,2.5849940776825,-6.82584142684937,60.637638092041,2.02972936630249,-6.59677457809448 ,60.6480178833008,2.03354120254517,-6.9548020362854,61.5892181396484,0.870841264724731,-7.18994903564453,61.5924530029297 ,0.911215424537659,-7.22396469116211,62.0687561035156,-0.500075042247772,-7.47647523880005,62.0667533874512,-0.490093559026718 ,-7.61475467681885,61.5042686462402,-3.26833868026733,-7.74038124084473,60.527774810791,-4.30577659606934,-7.99301433563232 ,60.5206069946289,-4.27950382232666,-7.87079572677612,61.5232963562012,-3.24266457557678,-7.81935739517212,58.9824333190918 ,-5.09903573989868,-8.0924129486084,59.000919342041,-5.0706901550293,-7.83214282989502,58.866828918457,-5.02819395065308 ,-8.1098804473877,56.5675201416016,-4.97241449356079,-8.10898971557617,56.3552360534668,-5.11795043945313,-8.26838397979736 ,56.3286285400391,-5.13145208358765,-8.23261260986328,53.706787109375,-4.17268705368042,-8.0557107925415,53.6533622741699 ,-4.25916910171509,-8.14530372619629,52.7733764648438,-3.29093050956726,-8.30707454681396,52.8478546142578,-3.19642877578735 ,-8.27628803253174,52.3263549804688,-1.67589509487152,-8.42832279205322,52.4776878356934,-1.63117837905884,-8.18632793426514 ,52.5547828674316,0.146052852272987,-8.37635612487793,52.7546501159668,0.149770796298981,-7.51249170303345,53.3124504089355 ,2.78690814971924,-7.64465665817261,53.5720977783203,2.76785397529602,-7.95363235473633,53.2975158691406,1.8700042963028 ,-7.80556631088257,53.0341033935547,1.87100756168365,-6.48617029190063,59.484561920166,2.74641704559326,-6.29842090606689 ,59.5460929870605,2.73247408866882,-7.69457101821899,61.9715614318848,-1.835329413414,-8.43411827087402,55.0426902770996 ,-4.61854219436646,-8.34623622894287,55.1561393737793,-4.43017435073853,-7.64096307754517,60.1501045227051,-3.87785243988037 ,-7.49625825881958,61.0798950195313,-2.9828155040741,-7.35370254516602,61.4221534729004,-1.73613929748535,-7.17622709274292 ,61.5010375976563,-0.51791113615036,-6.91523408889771,61.202823638916,0.605588138103485,-6.57774353027344,60.3290176391602 ,1.66084718704224,-6.35670948028564,59.2731742858887,2.49360775947571,-7.50422096252441,53.8342018127441,2.74940204620361 ,-7.2566556930542,53.8614730834961,2.78290176391602,-7.49353122711182,53.6159477233887,1.90764617919922,-7.94503307342529 ,53.1864814758301,0.0282176788896322,-7.9549708366394,52.8700256347656,-1.50859487056732,-7.96328639984131,53.1706809997559 ,-2.78903388977051,-8.31184387207031,54.0695686340332,-3.66722226142883,-7.92632246017456,54.0190582275391,-3.66191935539246 ,-7.70141124725342,58.7751426696777,-4.54647636413574,-6.27638864517212,59.5400161743164,2.53925251960754,-6.50607967376709 ,60.5526657104492,1.92643594741821,-8.07038593292236,52.2434234619141,-1.69248294830322,-7.96759462356567,52.7209930419922 ,-3.31808614730835,-7.61819267272949,60.4214286804199,-4.24296760559082,-7.4810209274292,61.4227981567383,-3.22135496139526 ,-7.79561758041382,53.6034355163574,-4.36914300918579,-7.85904312133789,53.6684265136719,-4.26431846618652,-7.98485136032104 ,52.4866142272949,0.106641910970211,-7.42254686355591,53.2007141113281,2.78653001785278,-7.6494402885437,52.9461784362793 ,1.86628890037537,-7.57653474807739,58.8754005432129,-5.12168979644775,-7.72405338287354,58.9478569030762,-5.06216478347778 ,-7.11246538162231,61.9350814819336,-0.519005000591278,-7.32182884216309,61.8542060852051,-1.85933899879456,-6.84792947769165 ,61.4917144775391,0.795687735080719,-7.43170070648193,61.9802703857422,-1.8671942949295,-7.86005878448486,56.6191177368164 ,-5.02617025375366,-7.60842800140381,58.8298263549805,-5.02760219573975,-8.06415367126465,54.8332481384277,-4.83862638473511 ,-7.88765335083008,54.8009834289551,-4.77773761749268,-6.18232488632202,59.4378967285156,2.77493143081665,-7.85013294219971 ,56.4070434570313,-5.10472011566162,-7.81204700469971,54.7497901916504,-4.8719916343689,-7.95052146911621,56.4441223144531 ,-5.01730966567993,-8.27874279022217,54.9120445251465,-4.80373048782349,-8.25146007537842,56.3314056396484,-4.55567598342896 ,-7.93210744857788,54.9821128845215,-4.23069047927856,-7.95408296585083,56.4088516235352,-4.54346561431885,-7.97020149230957 ,56.5552177429199,-4.67629384994507,-7.72650098800659,58.7269325256348,-4.77987480163574,-7.64762830734253,53.7170715332031 ,2.75160121917725,-7.28203105926514,53.4123115539551,4.17407703399658,-4.18460321426392,46.4165229797363,6.23691034317017 ,-4.5854868888855,46.8244400024414,6.45518922805786,-8.3947172164917,53.9242362976074,-3.91152191162109,-7.25358581542969 ,53.5158271789551,2.94256782531738,-3.30491423606873,60.279857635498,3.50280833244324,-2.20571994781494,60.4498519897461 ,3.47556161880493,-5.74956703186035,59.5254211425781,3.4650239944458,-5.77024984359741,59.4889335632324,2.80213236808777 ,-5.85364294052124,46.8418388366699,-2.67328810691834,-6.75361680984497,58.3276672363281,3.71880674362183,-7.33256578445435 ,57.0262031555176,3.78657269477844,-6.23516368865967,58.9689674377441,3.59735703468323,-7.36459541320801,57.0623016357422 ,3.44520807266235,-7.56687450408936,56.1604690551758,2.89003968238831,-3.955890417099,56.2655372619629,2.80547332763672 ,-3.54599189758301,54.1063079833984,2.12714576721191,-6.78145313262939,58.3291358947754,3.44112706184387,-6.25753211975098 ,58.9583015441895,3.36031484603882,0.56591659784317,60.9374847412109,4.97343397140503,-3.91471815109253,60.7840843200684 ,-4.01472616195679,-4.06285715103149,59.9045066833496,-4.85574150085449,-4.18883037567139,53.0629119873047,-2.34154367446899 ,-4.15138673782349,53.1954498291016,-3.86174035072327,-4.19567823410034,53.9706230163574,-4.67239284515381,-4.24513530731201 ,54.9201240539551,-5.19692230224609,-4.33705139160156,56.3626861572266,-5.52872800827026,-4.16411161422729,58.473560333252 ,-5.76605749130249,-4.11923313140869,61.3103981018066,-2.24004507064819,-0.0120536936447024,63.4881744384766,-4.744140625 ,-0.0509749911725521,62.7385063171387,-4.96958208084106,-0.121715128421783,61.8404769897461,-5.5955662727356,-0.219929397106171 ,60.4644813537598,-6.40453100204468,-0.35008579492569,58.7120552062988,-7.50968503952026,-0.349118828773499,58.5352592468262 ,-7.54023218154907,-0.364377319812775,56.3196563720703,-7.08939933776855,-0.00144085090141743,52.6201858520508,-5.85287761688232 ,-1.02361262577233e-007,51.9188804626465,-5.5001220703125,-3.83015230909223e-006,51.363037109375,-5.26660108566284 ,-6.7137269070372e-005,50.9873809814453,-5.21520471572876,0.450963288545609,60.508602142334,3.4765157699585,0.404867559671402 ,60.425853729248,2.83471751213074,0.0632549822330475,64.8636856079102,-4.27300882339478,-0.000179281443706714,50.8601722717285 ,-5.14019870758057,-3.47588324546814,61.0890274047852,0.217192783951759,-3.13839221000671,60.2152214050293,1.27245187759399 ,-3.94175624847412,61.3892822265625,-1.02181816101074,-2.91735887527466,59.1593780517578,2.10521245002747,-2.83891701698303 ,58.7850646972656,2.45940685272217,-3.85023283958435,57.039306640625,3.17870736122131,-3.35745644569397,58.208324432373 ,3.05376410484314,5.02010917663574,62.7402877807617,-1.39398121833801,5.98073148727417,62.2920417785645,-1.40944695472717 ,5.84480476379395,62.2485504150391,-2.79916501045227,4.58750486373901,62.9180603027344,-2.72233581542969,4.53454971313477 ,61.3680229187012,1.36474180221558,4.92724514007568,60.9556922912598,1.27796185016632,5.0937385559082,62.0548629760742 ,0.0335866399109364,4.84226131439209,62.5096626281738,0.0284772422164679,5.66547679901123,60.236644744873,2.65287804603577 ,5.82473182678223,60.7616577148438,1.96561753749847,5.06012487411499,61.0619354248047,2.02747178077698,4.88142251968384 ,60.5746269226074,2.7082257270813,4.07134485244751,59.1249313354492,4.05896949768066,5.13338470458984,58.7922744750977 ,3.95445871353149,3.87628078460693,59.0928039550781,3.98929190635681,4.1595983505249,59.9627342224121,3.17825675010681 ,2.93709421157837,60.2275314331055,3.31373262405396,2.72253322601318,59.331241607666,4.07821607589722,1.9496830701828 ,59.6775894165039,5.08236646652222,1.97389197349548,60.7787818908691,4.94828033447266,6.77855348587036,61.7928314208984 ,-1.46116161346436,6.70602655410767,61.6963119506836,-2.89358234405518,5.71692848205566,60.6736068725586,1.24707210063934 ,6.60397052764893,60.2781143188477,1.19995760917664,6.74615859985352,61.3173828125,-0.0873100385069847,5.94421911239624 ,61.7127494812012,-0.0737143903970718,6.7779107093811,59.1712684631348,1.85087597370148,7.01390647888184,60.2320327758789 ,1.13271343708038,6.25608396530151,59.2223815917969,1.91877949237823,3.5621395111084,58.1640663146973,4.66100358963013 ,2.31515717506409,58.0082550048828,4.99951696395874,1.9252108335495,58.3083686828613,5.2624683380127,6.61228370666504 ,61.2721672058105,-4.31486797332764,5.78448820114136,61.620491027832,-4.26886224746704,7.6016001701355,60.1066246032715 ,0.972079873085022,7.56118869781494,59.9352760314941,0.778364241123199,7.84638595581055,60.8078804016113,-0.306033760309219 ,7.84799766540527,61.0181465148926,-0.17617954313755,1.84402525424957,57.2621192932129,5.42611074447632,7.84366416931152 ,56.018798828125,2.73109889030457,7.86818790435791,56.0672607421875,3.04531097412109,7.81051063537598,55.2174682617188 ,3.32655167579651,7.76036882400513,55.0956077575684,2.4961199760437,7.52259826660156,58.2982444763184,-5.84445095062256 ,7.47733116149902,58.3895835876465,-6.01985549926758,7.74510812759399,58.4728469848633,-5.98513507843018,7.77278757095337 ,58.396900177002,-5.70114850997925,8.0009765625,53.3985481262207,1.69253599643707,8.34988784790039,52.8600234985352 ,-0.242909118533134,8.18604564666748,52.8621520996094,-0.427325069904327,7.79039335250854,53.4825401306152,1.65745162963867 ,6.76972055435181,53.78125,4.58681106567383,6.74381017684937,52.4613380432129,4.63611125946045,7.25243473052979,53.4489440917969 ,4.23940467834473,7.68194818496704,55.0910224914551,3.6018500328064,5.40927171707153,55.2473602294922,-6.6052680015564 ,6.67838954925537,54.8764305114746,-6.32514047622681,6.1772665977478,53.3371505737305,-5.64527893066406,5.27864599227905 ,53.0355377197266,-5.73614311218262,6.51485586166382,52.558177947998,-4.9832935333252,7.3298282623291,53.212947845459 ,-4.86323070526123,6.85315132141113,51.4256782531738,-4.15692138671875,6.02868127822876,51.4665603637695,-4.66744089126587 ,8.04285430908203,51.997142791748,-1.87290894985199,7.8516902923584,51.2169647216797,-1.67703640460968,7.4989013671875 ,51.2678337097168,-3.12093544006348,7.84028339385986,52.4213790893555,-3.53092503547668,7.39905166625977,53.0712471008301 ,2.81852841377258,6.99802494049072,52.0388793945313,3.06340503692627,7.4852933883667,51.7712135314941,1.84239041805267 ,7.74805688858032,52.7701301574707,1.74453580379486,2.49818396568298,55.5261459350586,5.98455810546875,1.59213578701019 ,52.2858848571777,6.59295415878296,3.31338953971863,53.8208084106445,6.13590621948242,1.00655484199524,51.987133026123 ,6.87206411361694,4.69296979904175,51.7932968139648,-5.0672492980957,5.59105348587036,50.501651763916,-4.26247692108154 ,4.19015407562256,51.1079292297363,-4.80176305770874,6.42200231552124,50.2364692687988,-3.64404988288879,7.53672075271606 ,50.1936721801758,-1.29669344425201,7.11090564727783,50.1742286682129,-2.65364718437195,7.1360936164856,50.606201171875 ,1.96596682071686,7.47889614105225,50.4056777954102,0.423853397369385,7.86668872833252,51.4170875549316,0.213643938302994 ,6.53962087631226,50.8843116760254,3.36214828491211,6.75999784469604,52.2459869384766,4.53328800201416,6.17791032791138 ,51.0448303222656,4.98255777359009,5.08084535598755,49.6625213623047,-3.84669017791748,3.74644875526428,50.4024467468262 ,-4.53450059890747,5.94028806686401,49.2121620178223,-3.16044616699219,7.05950546264648,48.9649200439453,-0.944683134555817 ,6.69013833999634,49.0631523132324,-2.19327402114868,6.71513605117798,49.3276290893555,2.09133768081665,7.02219152450562 ,49.0446014404297,0.570955514907837,2.5901517868042,51.0738487243652,6.59761619567871,2.01463341712952,50.7975616455078 ,6.85545969009399,3.00734329223633,49.3213005065918,6.79381513595581,3.55670809745789,49.7771186828613,6.50012254714966 ,5.84528207778931,48.3474311828613,-2.86912393569946,4.86086177825928,49.2681350708008,-3.67572164535522,6.74047231674194 ,48.0109100341797,-0.690348029136658,6.37699508666992,48.1191711425781,-1.82168889045715,6.5790491104126,47.9910316467285 ,2.10320591926575,6.82137680053711,47.9547271728516,0.649383008480072,6.2605767250061,49.3998908996582,3.63599109649658 ,6.25825023651123,47.9997749328613,3.76794600486755,6.0664758682251,49.4155921936035,4.18459320068359,5.70988321304321 ,48.045711517334,4.83565807342529,5.45038986206055,49.5616111755371,5.51070880889893,4.90697479248047,48.1723861694336 ,5.999587059021,6.63816022872925,46.9563903808594,-0.53816032409668,6.3240818977356,46.956859588623,-1.68728601932526 ,6.67517042160034,46.9568786621094,2.07415676116943,6.80337762832642,46.9570121765137,0.677764475345612,6.44183683395386 ,46.9564170837402,3.87416291236877,5.754075050354,46.9542045593262,5.3130898475647,4.68217277526855,46.987190246582 ,6.47571086883545,6.23777198791504,46.8432350158691,-1.71467792987823,6.5817289352417,46.8283920288086,-0.480123966932297 ,6.20514297485352,46.4165267944336,-0.0732569992542267,5.16316509246826,46.4165267944336,-2.17705488204956,6.74122285842896 ,46.8339805603027,0.608995020389557,6.63257074356079,46.8119354248047,2.06915068626404,6.32486486434937,46.4132232666016 ,2.051598072052,6.40335369110107,46.8159294128418,3.8705472946167,6.11156702041626,46.4165267944336,3.76737928390503 ,5.7106761932373,46.8290863037109,5.30437707901001,5.29440116882324,46.4165306091309,5.02038335800171,5.82818698883057 ,52.3400382995605,5.46586132049561,6.11576223373413,51.1763458251953,5.13107061386108,4.62575817108154,50.9086380004883 ,6.09249019622803,5.34580421447754,49.7185516357422,5.73114681243896,6.88634872436523,55.2414398193359,4.26491832733154 ,7.81537961959839,56.4428901672363,3.10454225540161,5.42916774749756,53.7004776000977,5.59347772598267,3.90357780456543 ,52.3780746459961,6.16836404800415,4.51044845581055,48.5544815063477,6.20508909225464,6.60144710540771,56.7064781188965 ,4.13254833221436,7.42722702026367,57.8029670715332,2.94404196739197,4.89352321624756,55.1826019287109,5.48351907730103 ,5.78202342987061,57.2390213012695,4.32452249526978,4.67166042327881,57.801399230957,4.58475971221924,4.01073789596558 ,56.894344329834,5.16899347305298,6.15560865402222,57.9998016357422,3.74463558197021,6.92412900924683,58.5149536132813 ,2.88590669631958,7.38834810256958,61.5227546691895,-2.88627982139587,7.32209014892578,61.0654411315918,-4.30384731292725 ,7.17171764373779,58.7724380493164,1.70093142986298,7.20097732543945,58.8823394775391,1.84825837612152,6.95743131637573 ,58.6734466552734,2.02751755714417,6.91365003585815,58.4868774414063,1.95597612857819,2.29422402381897,60.406494140625 ,3.33521890640259,2.62562608718872,60.4076957702637,3.42470979690552,2.8831045627594,60.3096923828125,3.16574025154114 ,2.35357308387756,60.2916717529297,2.62549471855164,2.43926358222961,59.4155426025391,4.22939109802246,2.70725798606873 ,60.3175086975098,3.5247802734375,2.17027854919434,58.2606430053711,4.94453430175781,3.87157917022705,47.958366394043 ,6.67540216445923,1.73453235626221,60.8194580078125,4.67773103713989,1.92173361778259,60.8772926330566,4.8870964050293 ,1.60810160636902,60.6451683044434,4.7230052947998,2.17018938064575,60.2866172790527,3.4840943813324,1.90597474575043 ,50.7140579223633,6.8419189453125,0.925008773803711,51.8707427978516,6.86490345001221,0.874659955501556,51.203067779541 ,6.4936408996582,1.50750613212585,50.2555236816406,6.44406890869141,2.91349101066589,49.2260704040527,6.78604793548584 ,2.45935893058777,48.8440933227539,6.41992044448853,3.25709509849548,47.6898155212402,6.37077903747559,3.75853896141052 ,47.8829345703125,6.66740322113037,4.11207056045532,46.4815940856934,6.2824501991272,4.50787830352783,46.8712158203125 ,6.50769376754761,7.06748962402344,58.6041259765625,-6.51940870285034,5.58650636672974,58.1526374816895,-6.70998191833496 ,6.5185112953186,60.2055053710938,-5.42098045349121,7.20817947387695,59.9226379394531,-5.44320011138916,7.85527229309082 ,60.0032234191895,-5.18264484405518,7.86182594299316,59.8730316162109,-4.99195289611816,5.90363550186157,46.9726486206055 ,-2.72434210777283,8.0023193359375,52.8689422607422,-3.46774172782898,8.18311977386475,52.5618095397949,-2.12080335617065 ,8.31355285644531,52.5244979858398,-2.01270055770874,8.17157459259033,52.8635215759277,-3.48772740364075,7.97537708282471 ,61.1363525390625,-1.54216086864471,7.97375965118408,61.4459686279297,-1.54156196117401,8.06719875335693,52.2686042785645 ,0.0422511026263237,1.74116504192352,50.9104499816895,-5.18946409225464,1.69455194473267,50.938419342041,-5.19785785675049 ,1.76796686649323,51.315559387207,-5.25972318649292,2.33868432044983,51.3983879089355,-5.23276329040527,3.34593772888184 ,55.9631690979004,-6.91077470779419,4.4542236328125,55.5674438476563,-6.72269487380981,4.11547374725342,52.8102531433105 ,-5.79912376403809,3.04623699188232,52.662525177002,-5.80529499053955,4.7768440246582,60.404712677002,-5.57990789413452 ,5.75010442733765,60.3498764038086,-5.41351699829102,4.75339508056641,58.1296501159668,-6.84774398803711,4.71762418746948 ,62.1518669128418,-4.2306342124939,1.50592255592346,64.7639465332031,-4.21869039535522,1.46053183078766,64.7778167724609 ,-4.10143899917603,2.88753223419189,64.5600814819336,-3.41674184799194,2.93297648429871,64.5461273193359,-3.53721570968628 ,3.12937784194946,64.4551162719727,-3.81544661521912,3.40257287025452,63.2086334228516,-4.04134321212769,1.73337090015411 ,63.3685760498047,-4.71644878387451,1.62099945545197,64.6712875366211,-4.55404853820801,7.92197704315186,60.6803283691406 ,-4.07929086685181,7.9223952293396,60.8714447021484,-4.21751689910889,7.98260641098022,61.3034210205078,-2.85725903511047 ,7.9803261756897,61.0462760925293,-2.775066614151,3.25250363349915,49.7038879394531,-4.46881198883057,4.53436708450317 ,48.4554595947266,-3.65795111656189,4.00473260879517,48.0447540283203,-3.33397936820984,5.85138654708862,46.840446472168 ,-2.67395663261414,7.07243394851685,58.3854103088379,-6.09397554397583,7.17485189437866,56.4456405639648,-6.08475971221924 ,5.64443731307983,57.2957077026367,-6.22380256652832,5.69429159164429,57.9599113464355,-6.22372102737427,5.54111957550049 ,57.1751289367676,-6.69997549057007,4.7143702507019,57.6415023803711,-6.84087228775024,1.65925490856171,50.8022842407227 ,-5.12830448150635,4.62409734725952,48.5692176818848,-3.68546772003174,3.3447380065918,49.8112754821777,-4.51331520080566 ,4.89040231704712,52.1094703674316,-5.17248201370239,3.83429098129272,52.0528259277344,-5.27164268493652,2.69767594337463 ,51.9788131713867,-5.39102792739868,4.40495777130127,63.4857749938965,-1.2625036239624,4.30352926254272,63.4948043823242 ,-1.22033095359802,4.4049711227417,62.6396560668945,0.00955635961145163,4.5124077796936,62.6168365478516,0.012831655330956 ,4.14361429214478,61.5459403991699,1.22779977321625,4.23402643203735,61.5192489624023,1.25594413280487,3.65562963485718 ,59.9942283630371,2.31590938568115,3.79219460487366,59.971736907959,2.31575870513916,6.50562334060669,59.8179397583008 ,2.55847120285034,6.01156568527222,58.2197151184082,3.79637217521667,6.67060565948486,60.3972473144531,1.90033161640167 ,4.06411933898926,60.0404319763184,2.50520944595337,4.48241949081421,59.9301567077637,2.40133738517761,7.37859296798706 ,61.6188278198242,-1.50121402740479,7.25604486465454,61.1647911071777,-0.102911353111267,6.50256204605103,59.056999206543 ,2.81944441795349,6.35826969146729,59.3149490356445,2.721843957901,4.45006227493286,60.1294288635254,3.09820365905762 ,4.2816104888916,60.0736389160156,3.10226726531982,3.69943690299988,64.1516723632813,-2.49848079681396,3.79356122016907 ,64.1546859741211,-2.54490923881531,6.93305683135986,56.4514427185059,-6.45735263824463,7.1187219619751,54.7801704406738 ,-5.70982217788696,7.65068674087524,55.986930847168,-5.7503662109375,7.90676307678223,55.8224563598633,-5.73489713668823 ,7.90906000137329,55.8690299987793,-5.89676713943481,7.6163010597229,56.0209197998047,-5.96489715576172,4.72273540496826 ,63.3855476379395,-1.41784250736237,4.089439868927,64.0286712646484,-2.69076085090637,1.74827790260315,62.6680641174316 ,-4.92615270614624,3.56462407112122,62.6922607421875,-4.14599704742432,1.63201665878296,61.5764808654785,-4.92748069763184 ,1.40187895298004,64.8462982177734,-3.8428521156311,3.62237238883972,61.0065078735352,-4.19728803634644,2.7155454158783 ,64.6137237548828,-3.24273586273193,3.50488996505737,64.2255172729492,-2.33936190605164,4.45189476013184,61.1947822570801 ,-2.68833804130554,3.71968483924866,60.4444808959961,-5.7619457244873,1.90570795536041,60.4547576904297,-6.41312456130981 ,1.78253972530365,61.7714767456055,-5.52064943313599,3.61369633674622,62.0756454467773,-4.80508089065552,3.71505951881409 ,58.2266159057617,-6.91692638397217,2.06690287590027,58.582202911377,-7.62780857086182,1.87300276756287,56.233268737793 ,-7.22203969955444,2.06480956077576,58.3997421264648,-7.66275072097778,3.69810247421265,58.0395393371582,-6.9608006477356 ,1.80736494064331,52.627140045166,-5.84420299530029,1.77482128143311,51.9207649230957,-5.47108364105225,1.52690613269806 ,64.8366775512695,-4.26401567459106,2.95424270629883,64.5884246826172,-3.56131982803345,3.82105803489685,64.2137298583984 ,-2.55882334709167,4.44773387908936,63.5705223083496,-1.23381400108337,4.56020164489746,62.7150917053223,0.00521660875529051 ,4.29055643081665,61.5549163818359,1.28767418861389,3.820068359375,60.0989570617676,2.32900953292847,4.23661613464355 ,63.6394309997559,-1.14201641082764,3.61627316474915,64.2777328491211,-2.4211540222168,4.08088636398315,63.5692825317383 ,-1.11106669902802,4.32959079742432,62.8111572265625,0.0554711557924747,4.19177198410034,62.8257484436035,0.0203920770436525 ,3.89149308204651,61.7367897033691,1.08955907821655,4.06670093536377,61.7141036987305,1.15627789497375,3.31134176254272 ,59.9511604309082,2.35199689865112,3.51177382469177,60.1359214782715,2.34523463249207,1.44212925434113,64.9041900634766 ,-3.95878839492798,2.79005265235901,64.6661758422852,-3.32087755203247,4.59750556945801,61.2975196838379,-1.33271491527557 ,4.44407510757446,60.9020805358887,-0.050418708473444,3.9542498588562,60.0511589050293,1.02145600318909,3.58570837974548 ,59.1861000061035,2.14514493942261,7.46005249023438,60.1870269775391,1.06176793575287,7.72928524017334,61.1218643188477 ,-0.099658414721489,7.4911060333252,61.1335639953613,-0.107961818575859,7.23469543457031,60.211742401123,1.09636998176575 ,7.6026177406311,61.6010932922363,-1.50467109680176,7.85354232788086,61.5832023620605,-1.52880024909973,7.58060598373413 ,61.024974822998,-4.29792022705078,7.83845376968384,61.0277900695801,-4.30706691741943,7.75668811798096,60.0238265991211 ,-5.34664630889893,7.5037727355957,60.0469360351563,-5.33866596221924,7.37802457809448,58.5030746459961,-6.12875556945801 ,7.65302801132202,58.5042724609375,-6.13754463195801,7.5514497756958,56.0784530639648,-6.00459623336792,7.39580821990967 ,58.3873252868652,-6.05571556091309,7.56811094284058,55.8945083618164,-6.07503032684326,7.72437191009521,55.8604278564453 ,-6.10517883300781,7.94746828079224,53.4626121520996,-4.68562650680542,8.12087535858154,52.6563034057617,-3.59320259094238 ,7.98409414291382,52.6108474731445,-3.61697459220886,7.79246187210083,53.4315605163574,-4.71312999725342,8.32955551147461 ,52.3089904785156,-1.95941710472107,8.19500160217285,52.1938438415527,-1.93116629123688,8.35969161987305,52.6222801208496 ,-0.128375396132469,8.17062091827393,52.446907043457,-0.0797580704092979,7.54251289367676,53.2749137878418,2.70170998573303 ,7.8333420753479,52.9743881225586,1.73005509376526,7.98573923110962,53.232494354248,1.71330320835114,7.67541980743408 ,53.5338287353516,2.68187379837036,7.14839839935303,59.0544967651367,1.82258713245392,6.9647159576416,59.127742767334 ,1.83381080627441,7.88196182250977,61.4802398681641,-2.89073824882507,7.88646030426025,54.7431411743164,-5.30194425582886 ,8.00986385345459,54.6648483276367,-5.39890146255493,7.4752779006958,60.6076583862305,-3.99723291397095,7.43943119049072 ,59.6744346618652,-4.89964628219604,7.51739263534546,61.0375709533691,-1.51349818706512,7.52377939224243,60.9528846740723 ,-2.7441828250885,7.14563941955566,59.8961524963379,0.73099958896637,7.39199209213257,60.7515411376953,-0.363818407058716 ,6.97304630279541,58.852725982666,1.59043073654175,7.54417419433594,53.7861213684082,2.64293193817139,7.55737066268921 ,53.504020690918,1.63623857498169,7.32090377807617,53.7854270935059,2.61769080162048,7.75661754608154,52.5243797302246 ,-2.16908431053162,7.91260290145874,52.9445953369141,-0.47870346903801,7.62479257583618,52.7934036254883,-3.5379102230072 ,7.93610763549805,53.7130928039551,-4.43796062469482,7.46001863479614,53.6113471984863,-4.54856824874878,7.32284927368164 ,58.3012428283691,-5.56446504592896,6.91650867462158,59.1238822937012,1.64534842967987,7.12459278106689,60.1227226257324 ,1.00286984443665,7.82696485519409,52.5805435180664,-3.59217143058777,8.0003719329834,52.1331100463867,-1.9022125005722 ,7.38473224639893,59.9482002258301,-5.25951147079468,7.44957780838013,60.9518547058105,-4.23299884796143,7.60987138748169 ,53.4526710510254,-4.67666912078857,7.62339115142822,53.471435546875,-4.66339111328125,7.97040414810181,52.3984222412109 ,-0.0770895406603813,7.6742148399353,52.8929214477539,1.74059414863586,7.45490074157715,53.1620025634766,2.69405269622803 ,7.28658056259155,58.4743881225586,-6.07923126220703,7.12813520431519,58.4115791320801,-6.11802101135254,7.48142004013062 ,61.4747543334961,-1.50783348083496,7.50276231765747,61.386604309082,-2.86380004882813,7.36917638778687,61.0432739257813 ,-0.167612627148628,7.61826324462891,61.505558013916,-2.88692474365234,7.29809474945068,56.1448822021484,-6.0284366607666 ,7.17253828048706,58.3644065856934,-6.02467107772827,7.49792051315308,54.4862670898438,-5.41966819763184,7.64897298812866 ,54.4940605163574,-5.52677631378174,6.84884357452393,59.0268630981445,1.89198553562164,7.32031297683716,55.9670791625977 ,-6.02316665649414,7.46523427963257,54.4825439453125,-5.43019723892212,7.42112350463867,55.9880981445313,-5.96717405319214 ,7.85625123977661,54.5564002990723,-5.53066444396973,7.71944952011108,55.8298721313477,-5.62672662734985,7.40257692337036 ,54.5230598449707,-5.19606494903564,7.45128011703491,55.952320098877,-5.53696393966675,7.31318140029907,58.2525405883789 ,-5.79890871047974,7.67960977554321,53.6778106689453,2.66356253623962,7.33716917037964,53.3778991699219,4.07644844055176 ,4.58557033538818,46.8244705200195,6.45516347885132,4.18643522262573,46.4173583984375,6.2367730140686,8.0888032913208 ,53.643497467041,-4.51548433303833,7.30244922637939,53.4554786682129,2.81885719299316,4.15430736541748,60.0445747375488 ,2.99739599227905,3.07431745529175,60.2833061218262,3.11780214309692,6.51938056945801,59.1384315490723,2.63372302055359 ,6.42166137695313,59.0671195983887,1.94542253017426,7.88250541687012,56.670524597168,2.90646123886108,7.47096586227417 ,57.8794250488281,2.75547099113464,6.98250722885132,58.5520515441895,2.70177412033081,7.87610721588135,56.7039985656738 ,2.56541967391968,3.62003445625305,54.0705528259277,2.01497745513916,4.35950183868408,56.0360908508301,2.3617308139801 ,7.8411693572998,55.9505004882813,2.3005964756012,7.45279407501221,57.8907775878906,2.48846650123596,6.97201442718506 ,58.5410118103027,2.4639265537262,3.77591037750244,60.54150390625,-4.53581762313843,3.75388956069946,59.6579475402832 ,-5.38537883758545,3.87403392791748,53.0283088684082,-4.10121250152588,4.05640459060669,52.9318008422852,-2.49800205230713 ,3.67261528968811,53.7791290283203,-5.10175609588623,3.76318836212158,56.1157188415527,-6.03812885284424,3.62933421134949 ,54.6652641296387,-5.69135808944702,3.64157605171204,58.2273483276367,-6.29494380950928,4.25032615661621,61.0464019775391 ,-2.80713868141174,3.93137216567993,60.8553848266602,-0.284698814153671,3.68501901626587,59.9999961853027,0.810119271278381 ,4.24393701553345,61.1310844421387,-1.57645356655121,3.51242613792419,58.9565696716309,1.66955041885376,3.45302963256836 ,58.5907211303711,2.03509664535522,4.39278316497803,56.8092651367188,2.67253184318542,3.99217295646667,57.9946212768555 ,2.56758642196655,-1.9451812505722,48.5540313720703,7.05008602142334,-2.88036394119263,47.2062530517578,6.9493350982666 ,2.00000022232416e-006,47.285816192627,7.22094917297363,3.21344077747199e-006,48.5572471618652,7.20578908920288,-3.66780614852905 ,46.4437103271484,6.73270893096924,-2.98246002197266,47.3362045288086,6.8494701385498,-3.29654788970947,45.2115325927734 ,6.20724058151245,-2.97479510307312,45.3718414306641,6.77764701843262,-3.66930103302002,46.3445625305176,6.72885417938232 ,-4.11189603805542,46.3690757751465,6.27710723876953,-2.94320297241211,43.8507385253906,6.76719856262207,-2.94428610801697 ,45.2708053588867,6.77928829193115,-3.26226568222046,45.0992164611816,6.20986461639404,-3.16876101493835,43.85009765625 ,6.33915233612061,-0.557020604610443,50.877254486084,6.89918661117554,3.89344168070238e-005,50.9400787353516,6.95981454849243 ,-2.1163113117218,48.5933418273926,6.94620084762573,-1.17099833488464,49.9643783569336,6.95489454269409,-2.84906697273254 ,45.4440536499023,6.8901515007019,1.99999999495049e-006,45.4150581359863,7.22095012664795,-0.468086004257202,50.7088088989258 ,7.01618194580078,-1.0025759935379,49.9190406799316,7.05751132965088,1.99999999495049e-006,49.9196815490723,7.15778112411499 ,1.99999999495049e-006,50.7577705383301,7.07369613647461,-2.73341989517212,43.9191513061523,6.89355516433716,-2.80263996124268 ,45.261646270752,6.89093923568726,-2.79571104049683,43.9527893066406,6.89077138900757,-2.77869391441345,43.9286155700684 ,6.8909330368042,0.837190985679626,47.2849349975586,7.16878604888916,2.88017201423645,47.1976318359375,6.94976615905762 ,1.94533896446228,48.554027557373,7.05293798446655,0.838710308074951,48.5568695068359,7.1693868637085,2.98243093490601 ,47.3361625671387,6.84954833984375,3.54886031150818,46.446361541748,6.74474096298218,3.28606700897217,45.1828422546387 ,6.17913007736206,4.11189746856689,46.3690757751465,6.27710056304932,3.55020809173584,46.3415832519531,6.74072933197021 ,2.97079205513,45.372314453125,6.77908515930176,3.25704121589661,45.0800476074219,6.18504095077515,2.94356989860535 ,45.2685203552246,6.78080987930298,2.93479108810425,42.5988655090332,6.77791547775269,3.24675297737122,42.5850105285645 ,6.18504190444946,0.0936160013079643,40.4183006286621,6.31432294845581,1.80426895618439,40.7649269104004,6.17281484603882 ,1.56931388378143,40.8476257324219,6.78117704391479,0.0940760001540184,40.5215911865234,6.84962701797485,0.55705201625824 ,50.8772354125977,6.8991756439209,2.11631488800049,48.5933418273926,6.94620180130005,1.17104506492615,49.9643478393555 ,6.95486879348755,2.8494119644165,45.4549102783203,6.89148092269897,0.837190985679626,45.4196968078613,7.16878700256348 ,2.78077006340027,42.5592460632324,6.89321994781494,2.80284094810486,45.2339134216309,6.89408779144287,0.944576621055603 ,42.5303039550781,7.15080547332764,0.956659018993378,41.7727088928223,7.09940958023071,0.527495980262756,50.6699638366699 ,7.01148223876953,0.616011023521423,49.9191474914551,7.07405233383179,2.90801191329956,41.7502784729004,6.18008518218994 ,2.64309000968933,41.8141670227051,6.76414060592651,2.52337694168091,41.9013900756836,6.89366817474365,0.922152042388916 ,41.6571197509766,7.09069061279297,1.45313203334808,40.9517402648926,6.92551517486572,0.837190985679626,43.927433013916 ,7.16878604888916,0.813260972499847,42.7279319763184,7.16479253768921,0.15913499891758,40.6518440246582,6.99034643173218 ,0.794148981571198,41.5362701416016,7.07269096374512,0.0887290015816689,41.374153137207,7.05423450469971,0.0941329970955849 ,40.6955986022949,6.99861001968384,-3.13838791847229,42.6130409240723,6.32387399673462,-3.26221466064453,44.0694198608398 ,6.23347902297974,-3.24675226211548,42.5850143432617,6.18504285812378,-0.0795200020074844,40.4146957397461,6.32123184204102 ,-1.88202798366547,40.7029190063477,6.31644296646118,-1.95030295848846,40.6417236328125,6.1728138923645,0.00137399998493493 ,40.3522758483887,6.19228601455688,-2.90801095962524,41.6718215942383,6.18008518218994,-2.80467009544373,41.7286109924316 ,6.31891775131226,-0.0565429963171482,41.5774726867676,6.41380262374878,0.183767005801201,42.8373527526855,6.46496486663818 ,0.766995012760162,41.7014617919922,6.38969039916992,0.779220998287201,42.5201301574707,6.412926197052,-2.65576696395874 ,43.816291809082,6.35690927505493,-2.28221297264099,44.7476234436035,6.38247966766357,0.492428988218308,43.7169036865234 ,6.50650691986084,-2.34957098960876,44.7631492614746,6.80527067184448,-2.63184905052185,43.9335823059082,6.77300977706909 ,-2.75362801551819,43.8020896911621,6.76373910903931,-2.85343503952026,43.7929992675781,6.7601056098938,-3.08508396148682 ,43.7641830444336,6.34934329986572,0.0073039997369051,40.5181350708008,6.33164548873901,0.00711399968713522,40.6192741394043 ,6.86009168624878,0.0021959999576211,41.4194297790527,6.92533683776855,0.0886150002479553,41.5416145324707,6.93843269348145 ,0.752610981464386,41.6465682983398,6.96640920639038,0.839954078197479,41.7378120422363,6.97836208343506,0.829775989055634 ,42.4621353149414,7.02978610992432,0.308362007141113,42.9499549865723,7.01195287704468,0.592455983161926,43.6637420654297 ,7.0512809753418,0.548740029335022,43.797119140625,7.05331707000732,-2.22960901260376,44.834888458252,6.81731414794922 ,1.00222396850586,49.9190101623535,7.05242395401001,0.712882995605469,43.7436065673828,7.17660188674927,0.436836034059525 ,42.993408203125,7.14151620864868,0.44938200712204,42.8950881958008,7.1425633430481,0.760550975799561,42.5867233276367 ,7.03366994857788,0.349283695220947,42.8066101074219,7.01089096069336,-2.27854204177856,44.9713134765625,6.93464040756226 ,-2.4537980556488,44.838996887207,6.9288330078125,-2.66944789886475,43.828182220459,6.77966976165771,-3.48061609268188 ,46.3870391845703,6.85841941833496,3.36415982246399,46.3881607055664,6.86008977890015,0.129004999995232,41.4312324523926 ,7.06026840209961,0.650452017784119,43.8818321228027,7.17853546142578,0.00137400033418089,44.501277923584,6.19228839874268 ,-3.24675226211548,44.4756126403809,6.1850438117981,3.24675393104553,44.4756088256836,6.18504190444946,4.35723781585693 ,44.9269981384277,-3.06430101394653,4.20686101913452,44.5086288452148,-2.60326099395752,3.16264009475708,45.398624420166 ,-3.16831994056702,3.57114100456238,45.5947380065918,-3.45228695869446,5.55237007141113,43.980396270752,-2.19991302490234 ,6.67470979690552,43.9787368774414,-0.224023014307022,6.31194019317627,43.7362670898438,-0.0468970015645027,5.23977899551392 ,43.736270904541,-1.9288409948349,6.90005779266357,43.9754829406738,1.66610896587372,6.53845596313477,43.736270904541 ,1.6933468580246,6.47570991516113,43.9787483215332,3.77523016929626,6.11093282699585,43.736270904541,3.6173369884491 ,5.71423721313477,43.9800720214844,5.26094388961792,5.39516019821167,43.736270904541,5.00863409042358,4.5068302154541 ,43.0173568725586,6.71068477630615,3.8624849319458,44.0270805358887,6.72748899459839,3.86133074760437,43.2510986328125 ,6.73151302337646,4.1599760055542,43.0165672302246,6.75368595123291,4.41140079498291,45.0878067016602,-3.13809490203857 ,3.70397090911865,45.7253112792969,-3.48307609558105,3.6730170249939,46.5381202697754,-3.50487089157104,6.74866199493408 ,44.1178932189941,-0.262822985649109,5.61278676986694,44.1258735656738,-2.25409603118896,6.97845458984375,44.1179275512695 ,1.66033387184143,6.54842185974121,44.1179313659668,3.80660700798035,5.77661085128784,44.1179275512695,5.30757999420166 ,5.09513711929321,44.1158256530762,6.08221197128296,4.96704292297363,46.6533241271973,-2.9723949432373,4.23939514160156 ,47.4797668457031,-3.46190404891968,5.6166729927063,46.0167655944824,-2.27231693267822,6.7576265335083,46.0249862670898 ,-0.307812005281448,6.98658800125122,46.0249862670898,1.64253485202789,6.54742813110352,46.023365020752,3.82207179069519 ,5.7770791053772,46.0249862670898,5.30545997619629,4.52522087097168,45.9979934692383,6.61583089828491,5.02412891387939 ,46.6864738464355,-2.82322406768799,4.2154974937439,47.717903137207,-3.42620491981506,6.68231153488159,46.1601257324219 ,-0.273110002279282,5.52933979034424,46.1710929870605,-2.25459098815918,6.90578651428223,46.1637344360352,1.66331815719604 ,6.4721794128418,46.1696243286133,3.81302690505981,5.71073007583618,46.1610069274902,5.26226902008057,5.20670795440674 ,43.9803771972656,5.83740520477295,5.0913519859314,43.7362670898438,5.42968511581421,4.50698804855347,44.0270805358887 ,6.71417999267578,3.87607789039612,44.9406585693359,6.71766185760498,4.46607112884521,46.162181854248,6.55947113037109 ,3.26401996612549,44.0270805358887,6.30392122268677,3.26221466064453,43.1915435791016,6.26908779144287,3.69603180885315 ,43.2056159973145,6.66914415359497,3.70050883293152,44.0270805358887,6.67167663574219,3.69871997833252,44.9089088439941 ,6.65976047515869,3.73038101196289,45.0226974487305,6.6564416885376,4.39459419250488,46.1120834350586,6.60449552536011 ,4.1795129776001,42.9080085754395,6.08973979949951,4.4638237953186,42.9240798950195,6.62885093688965,4.05561113357544 ,42.9231109619141,6.67985582351685,3.63112378120422,42.9080848693848,6.22523784637451,4.89740705490112,43.4067001342773 ,5.70116996765137,5.05598783493042,43.6971015930176,6.0030779838562,4.99314498901367,43.2068557739258,6.0667781829834 ,4.90012121200562,43.1914596557617,5.69916915893555,3.52447295188904,45.694995880127,-3.47522020339966,3.12204694747925 ,45.4987182617188,-3.1952600479126,3.47449827194214,46.5611686706543,-3.49852108955383,4.12536478042603,47.728214263916 ,-3.46878504753113,3.50353479385376,46.6779747009277,-3.49861788749695,4.75802898406982,42.9235229492188,6.33804559707642 ,4.64909791946411,42.9079895019531,5.87496423721313,5.02522420883179,43.937801361084,6.16055011749268,4.76127290725708 ,43.0176582336426,6.45881605148315,4.95539808273315,43.2558250427246,6.22033405303955,6.31194019317627,46.048698425293 ,-0.0468959994614124,5.23977899551392,46.048698425293,-1.9288409948349,6.53845596313477,46.048698425293,1.69334900379181 ,6.11093282699585,46.048698425293,3.6173369884491,5.39516019821167,46.048698425293,5.00863313674927,4.20467329025269 ,46.8199806213379,-2.60328888893127,5.0913519859314,46.048698425293,5.42968320846558,4.64909791946411,45.2204208374023 ,5.87496185302734,3.63112378120422,45.220516204834,6.22523498535156,4.90012121200562,45.5038909912109,5.69916582107544 ,3.63112378120422,44.0643005371094,6.22523641586304,4.64909791946411,44.0360984802246,5.87496280670166,4.18724584579468 ,44.0952682495117,6.05039691925049,4.17664241790771,45.2204666137695,6.0375280380249,-4.35723781585693,44.9269981384277 ,-3.06429600715637,-3.57114100456238,45.5947341918945,-3.45228290557861,-3.16264033317566,45.3986282348633,-3.16831612586975 ,-4.20686149597168,44.5086250305176,-2.60325527191162,-5.55237007141113,43.980396270752,-2.1999089717865,-5.23977899551392 ,43.736270904541,-1.92883586883545,-6.31194114685059,43.7362670898438,-0.0468919984996319,-6.67470979690552,43.9787368774414 ,-0.224019005894661,-6.90005731582642,43.9754791259766,1.66611385345459,-6.53845596313477,43.7362670898438,1.69335186481476 ,-6.47570991516113,43.9787483215332,3.77523493766785,-6.11093282699585,43.736270904541,3.61734175682068,-5.71423721313477 ,43.9800682067871,5.26094913482666,-5.39516019821167,43.736270904541,5.00863885879517,-3.86133074760437,43.2510986328125 ,6.73151588439941,-3.8624849319458,44.0270805358887,6.72749376296997,-4.5068302154541,43.0173568725586,6.71069049835205 ,-4.1599760055542,43.0165634155273,6.75369119644165,-3.6730170249939,46.5381202697754,-3.50486707687378,-3.70397090911865 ,45.7253112792969,-3.48307180404663,-4.41140079498291,45.0878067016602,-3.13809108734131,-5.61278676986694,44.1258735656738 ,-2.25409197807312,-6.74866199493408,44.1178932189941,-0.262818992137909,-6.97845458984375,44.1179275512695,1.66033899784088 ,-6.54842185974121,44.1179275512695,3.80661201477051,-5.77661085128784,44.1179275512695,5.30758476257324,-5.09513711929321 ,44.1158256530762,6.08221578598022,-4.96704292297363,46.6533241271973,-2.97239089012146,-4.23939514160156,47.4797630310059 ,-3.46189999580383,-5.6166729927063,46.0167655944824,-2.27231311798096,-6.7576265335083,46.0249824523926,-0.307808011770248 ,-6.98658990859985,46.0249977111816,1.64253950119019,-6.5467529296875,46.0249862670898,3.82645010948181,-5.7770791053772 ,46.0249862670898,5.30546522140503,-4.52522087097168,45.997989654541,6.61583709716797,-4.21549797058105,47.717903137207 ,-3.42620134353638,-5.02412891387939,46.6864738464355,-2.82322001457214,-5.52933979034424,46.1710929870605,-2.25458693504334 ,-6.68231153488159,46.1601219177246,-0.273106008768082,-6.90578651428223,46.1637344360352,1.66332304477692,-6.4721794128418 ,46.1696243286133,3.81303095817566,-5.71073007583618,46.1610069274902,5.26227378845215,-5.0913519859314,43.7362670898438 ,5.42968893051147,-5.20670700073242,43.9803771972656,5.83740901947021,-4.50698804855347,44.0270805358887,6.71418523788452 ,-3.87607789039612,44.9406547546387,6.71766710281372,-4.46607112884521,46.162181854248,6.55947637557983,-3.70050883293152 ,44.0270805358887,6.67168140411377,-3.69603180885315,43.2056159973145,6.66914796829224,-3.26221466064453,43.1915435791016 ,6.26909208297729,-3.69871997833252,44.9089088439941,6.65976428985596,-4.39459419250488,46.1120834350586,6.60450220108032 ,-3.73038101196289,45.0226974487305,6.65644645690918,-4.1795129776001,42.9080085754395,6.08974409103394,-3.63112378120422 ,42.9080848693848,6.22524213790894,-4.05561113357544,42.9231109619141,6.67986106872559,-4.4638237953186,42.9240798950195 ,6.62885522842407,-4.89740705490112,43.4067001342773,5.70117378234863,-4.90012121200562,43.1914596557617,5.69917297363281 ,-4.99314498901367,43.2068557739258,6.06678199768066,-5.05598783493042,43.6970977783203,6.00308179855347,-3.52447295188904 ,45.6949920654297,-3.47521591186523,-3.47449827194214,46.5611686706543,-3.49851703643799,-3.12204694747925,45.4987144470215 ,-3.19525599479675,-3.50353479385376,46.6779747009277,-3.49861311912537,-4.12536478042603,47.728214263916,-3.46878027915955 ,-4.75802898406982,42.9235229492188,6.338050365448,-4.64909791946411,42.9079895019531,5.87496900558472,-4.76127290725708 ,43.0176582336426,6.45881986618042,-5.02522420883179,43.937801361084,6.16055393218994,-4.95539808273315,43.2558250427246 ,6.22033786773682,-6.31194114685059,46.048698425293,-0.0468919984996319,-5.23977947235107,46.048698425293,-1.92883563041687 ,-6.53845596313477,46.0486946105957,1.69335401058197,-6.11093282699585,46.048698425293,3.61734104156494,-5.39516019821167 ,46.048698425293,5.00863790512085,-4.21931791305542,46.8235893249512,-2.58396697044373,-5.0913519859314,46.048698425293 ,5.42968797683716,-4.64909791946411,45.2204170227051,5.87496709823608,-3.63112378120422,45.220516204834,6.2252402305603 ,-4.90012121200562,45.5038909912109,5.69917106628418,-3.26221466064453,45.2414894104004,6.18593168258667,2.03844881057739 ,68.1314392089844,4.71636962890625,2.05418825149536,68.0794219970703,4.76884031295776,2.12670016288757,68.0813217163086 ,4.76280927658081,2.13114523887634,68.1338043212891,4.70866203308105,2.19507813453674,68.0568237304688,4.75808525085449 ,2.25008773803711,68.0092468261719,4.75530862808228,2.28430032730103,67.9450073242188,4.75485610961914,2.29309630393982 ,67.8727798461914,4.75678539276123,2.27528381347656,67.8023223876953,4.76083755493164,2.32086563110352,67.7770233154297 ,4.70616626739502,2.23327350616455,67.7431411743164,4.76646614074707,2.26711440086365,67.701416015625,4.71336317062378 ,2.17273592948914,67.7032470703125,4.77291059494019,2.10184621810913,67.6880340576172,4.77929925918579,2.03018355369568 ,67.6995162963867,4.78476858139038,2.00745582580566,67.6458053588867,4.73675870895386,1.96742045879364,67.7361755371094 ,4.78858423233032,1.92725241184235,67.6927185058594,4.74163007736206,1.92203557491302,67.7930603027344,4.79022836685181 ,1.86928141117096,67.7654724121094,4.74372434616089,1.90016043186188,67.8624725341797,4.78947591781616,1.84137117862701 ,67.8542327880859,4.74275922775269,1.90474617481232,67.9350509643555,4.78643226623535,1.847292304039,67.9470062255859 ,4.73886489868164,1.93517506122589,68.0009918212891,4.7815089225769,1.88624346256256,68.0312652587891,4.73256587982178 ,1.98733770847321,68.0513763427734,4.77536773681641,1.95296609401703,68.0956497192383,4.72471523284912,2.07810592651367 ,67.9858093261719,4.81110239028931,2.11499071121216,67.9867706298828,4.80803298950195,2.14977192878723,67.9743194580078 ,4.80562925338745,2.17775440216064,67.9501266479492,4.80421733856201,2.19515538215637,67.9174423217773,4.80398750305176 ,2.19962882995605,67.8806915283203,4.80496883392334,2.19057011604309,67.8448638916016,4.80702972412109,2.16919946670532 ,67.8147659301758,4.80989170074463,2.1384072303772,67.7944564819336,4.81317090988159,2.1023485660553,67.7867279052734 ,4.81642007827759,2.06589555740356,67.7925643920898,4.81920480728149,2.03397178649902,67.8112258911133,4.82114267349243 ,2.01088571548462,67.8401565551758,4.82197904586792,1.99975907802582,67.8754653930664,4.82159662246704,2.00209093093872 ,67.9123840332031,4.82005023956299,2.01756978034973,67.945930480957,4.81754398345947,2.04410243034363,67.9715576171875 ,4.81442022323608,2.26357483863831,68.1887893676758,4.60977554321289,2.14037084579468,68.2330932617188,4.61827802658081 ,2.21853685379028,68.1024398803711,4.70262718200684,2.36262941360474,68.1028823852539,4.60478496551514,2.28882169723511 ,68.0415725708008,4.69908380508423,2.42415642738342,67.9870071411133,4.60398387908936,2.33250641822815,67.9594192504883 ,4.69850826263428,2.43984627723694,67.8567886352539,4.60747480392456,2.34369158744812,67.8670883178711,4.70098161697388 ,2.40758061408997,67.7298278808594,4.61479139328003,2.33171582221985,67.6232604980469,4.62494516372681,2.22249889373779 ,67.5514907836914,4.63656139373779,2.18969225883484,67.6504592895508,4.72160148620605,2.0946786403656,67.5241928100586 ,4.6480770111084,2.09906029701233,67.6310577392578,4.72976684570313,1.96552002429962,67.5450668334961,4.65792894363403 ,1.85246551036835,67.6113052368164,4.66479301452637,1.77078425884247,67.7139358520508,4.66774082183838,1.73150682449341 ,67.8391189575195,4.66637134552002,1.73993837833405,67.9699325561523,4.66087293624878,1.79494035243988,68.0887222290039 ,4.6519889831543,1.88908398151398,68.1794357299805,4.64091300964355,2.00965571403503,68.2298355102539,4.62914705276489 ,2.29062795639038,68.2429504394531,4.53268909454346,2.14468884468079,68.2954483032227,4.54275846481323,2.40796232223511 ,68.1412124633789,4.52677392959595,2.48084354400635,68.0039367675781,4.52582359313965,2.49942827224731,67.8496780395508 ,4.52996158599854,2.46120810508728,67.6992874145508,4.53862953186035,2.37134337425232,67.5730590820313,4.55065488815308 ,2.24197125434875,67.488037109375,4.56441736221313,2.0905647277832,67.4557037353516,4.57805633544922,1.93757116794586 ,67.4804458618164,4.5897274017334,1.80365431308746,67.5588989257813,4.59785890579224,1.70689928531647,67.6804809570313 ,4.60134840011597,1.66037392616272,67.8287658691406,4.59972667694092,1.67036104202271,67.9837188720703,4.59321308135986 ,1.7355135679245,68.1244354248047,4.58268737792969,1.84703052043915,68.2318878173828,4.56956911087036,1.98985159397125 ,68.2915802001953,4.55563402175903,2.30957412719727,68.2843017578125,4.44576740264893,2.1458683013916,68.3431777954102 ,4.45706796646118,2.44119143486023,68.170166015625,4.43913745880127,2.52294492721558,68.0161819458008,4.43807029724121 ,2.54379224777222,67.8431625366211,4.44271183013916,2.50091958045959,67.6744613647461,4.45243501663208,2.40011501312256 ,67.5328598022461,4.4659252166748,2.25499439239502,67.4374923706055,4.48136138916016,2.08515572547913,67.4012222290039 ,4.49665832519531,1.91353785991669,67.4289703369141,4.50975227355957,1.76331794261932,67.516975402832,4.51887226104736 ,1.65478467941284,67.6533584594727,4.52278709411621,1.60259556770325,67.8196868896484,4.52097129821777,1.61379909515381 ,67.9935073852539,4.51366329193115,1.68688297271729,68.1513519287109,4.50185585021973,1.81197583675385,68.2718963623047 ,4.48714160919189,1.97218191623688,68.3388442993164,4.47150850296021,2.32086038589478,68.3233871459961,4.25451898574829 ,2.13876128196716,68.3888778686523,4.26708793640137,2.46726417541504,68.1964263916016,4.24714183807373,2.55820322036743 ,68.0251541137695,4.24595880508423,2.58139300346375,67.8326797485352,4.25111961364746,2.53370261192322,67.64501953125 ,4.26193523406982,2.4215726852417,67.4875183105469,4.27694129943848,2.26014852523804,67.3814315795898,4.29411125183105 ,2.07122921943665,67.3410949707031,4.31112957000732,1.88032972812653,67.3719635009766,4.32569408416748,1.71323370933533 ,67.4698486328125,4.33583784103394,1.59250628948212,67.6215515136719,4.34019422531128,1.53445327281952,67.8065719604492 ,4.33817100524902,1.54691541194916,67.9999160766602,4.33004283905029,1.62820971012115,68.1754989624023,4.31690883636475 ,1.7673567533493,68.3095779418945,4.30053997039795,1.94556367397308,68.3840560913086,4.28315162658691,2.10303449630737 ,67.8890228271484,4.85801267623901,-0.401673823595047,68.2626037597656,4.81145429611206,-0.333675175905228,68.2515182495117 ,4.80779314041138,-0.492083430290222,68.2955322265625,4.76572847366333,-0.469050973653793,68.2483596801758,4.81560564041138 ,-0.565762519836426,68.2473220825195,4.7709493637085,-0.526709139347076,68.210693359375,4.81968927383423,-0.566860020160675 ,68.1547012329102,4.82315301895142,-0.584085166454315,68.0879287719727,4.82552909851074,-0.6286860704422,68.0027618408203 ,4.7796425819397,-0.576050519943237,68.019416809082,4.82649564743042,-0.587471961975098,67.9247817993164,4.77890682220459 ,-0.54384970664978,67.9583969116211,4.82592344284058,-0.520929932594299,67.8669509887695,4.7763032913208,-0.491825878620148 ,67.9131240844727,4.82388973236084,-0.438049018383026,67.8370819091797,4.77218246459961,-0.427004039287567,67.8897171020508 ,4.82066822052002,-0.350022345781326,67.8391876220703,4.76710271835327,-0.358147501945496,67.8913116455078,4.81669425964355 ,-0.268739879131317,67.8729934692383,4.76174640655518,-0.29454579949379,67.917724609375,4.81250524520874,-0.205177009105682 ,67.9339447021484,4.75684022903442,-0.244792744517326,67.9653625488281,4.80866718292236,-0.167918771505356,68.0137939453125 ,4.75304555892944,-0.215609461069107,68.0278167724609,4.80569553375244,-0.210934340953827,68.0966186523438,4.80399560928345 ,-0.231399670243263,68.1625137329102,4.80379486083984,-0.243023544549942,68.2550659179688,4.75231981277466,-0.274243175983429 ,68.2165756225586,4.80512046813965,-0.397167980670929,68.1712265014648,4.85259628295898,-0.362578332424164,68.1655883789063 ,4.85073518753052,-0.431439906358719,68.1639862060547,4.85470724105835,-0.460768967866898,68.1448211669922,4.85678434371948 ,-0.481190860271454,68.1163482666016,4.85854816436768,-0.489952266216278,68.0823822021484,4.85975456237793,-0.485866904258728 ,68.0475311279297,4.8602466583252,-0.469486117362976,68.016487121582,4.85995531082153,-0.443025648593903,67.9934463500977 ,4.85892200469971,-0.410052180290222,67.981559753418,4.85728168487549,-0.375026494264603,67.9823760986328,4.85526323318481 ,-0.342675715684891,67.9958038330078,4.85312986373901,-0.317367970943451,68.0200347900391,4.85117816925049,-0.302523404359818 ,68.0517959594727,4.8496675491333,-0.30014505982399,68.086799621582,4.84880304336548,-0.310555160045624,68.1203155517578 ,4.84870004653931,-0.332347273826599,68.147819519043,4.84937334060669,-0.405963122844696,68.3137969970703,4.76042127609253 ,-0.413887143135071,68.4289398193359,4.67132329940796,-0.541986584663391,68.4016723632813,4.67922115325928,-0.65154641866684 ,68.3299026489258,4.68698501586914,-0.617045938968658,68.1757125854492,4.77537441253662,-0.727770805358887,68.2233047485352 ,4.69356727600098,-0.639008700847626,68.0903472900391,4.77840995788574,-0.760363519191742,68.0962982177734,4.69807577133179 ,-0.744924187660217,67.9660186767578,4.69990539550781,-0.68353796005249,67.8500595092773,4.69880676269531,-0.584494113922119 ,67.7640991210938,4.69492959976196,-0.461170017719269,67.7197189331055,4.68879699707031,-0.330221712589264,67.7229461669922 ,4.68123626708984,-0.209333449602127,67.773323059082,4.67326974868774,-0.114833027124405,67.8640441894531,4.66597318649292 ,-0.0594805926084518,67.9828796386719,4.66033124923706,-0.161998301744461,68.1017684936523,4.7508749961853,-0.0507552772760391 ,68.1137466430664,4.65710687637329,-0.188213258981705,68.1859817504883,4.7506217956543,-0.0898344367742538,68.2389984130859 ,4.65673589706421,-0.171438992023468,68.3417053222656,4.65926599502563,-0.319029599428177,68.2996673583984,4.75573968887329 ,-0.284548223018646,68.4080123901367,4.66435813903809,-0.419725298881531,68.4932861328125,4.59760236740112,-0.571463823318481 ,68.4609832763672,4.60695934295654,-0.70124226808548,68.3759689331055,4.61615180969238,-0.791532039642334,68.2497024536133 ,4.62395000457764,-0.830140590667725,68.099250793457,4.62929105758667,-0.811852097511292,67.9449310302734,4.63145875930786 ,-0.739137053489685,67.8075790405273,4.63015794754028,-0.621815919876099,67.7057495117188,4.62556457519531,-0.475735068321228 ,67.653190612793,4.6183009147644,-0.32062166929245,67.6569976806641,4.60934495925903,-0.17742520570755,67.716667175293 ,4.59990930557251,-0.0654841512441635,67.8241500854492,4.59126472473145,8.11517238616943e-005,67.9648971557617,4.58458089828491 ,0.0104170143604279,68.1199264526367,4.58076286315918,-0.0358732938766479,68.2682876586914,4.58032131195068,-0.132537245750427 ,68.3899536132813,4.58331823348999,-0.266519635915756,68.4684753417969,4.58935165405273,-0.425818026065826,68.5429992675781 ,4.51325798034668,-0.596028089523315,68.5067749023438,4.5237512588501,-0.741604566574097,68.4114074707031,4.53406715393066 ,-0.842885971069336,68.2697677612305,4.54281139373779,-0.886193156242371,68.1010131835938,4.54880475997925,-0.865679383277893 ,67.9279022216797,4.55123567581177,-0.784112572669983,67.7738265991211,4.54977703094482,-0.652509689331055,67.6595993041992 ,4.54462480545044,-0.488645672798157,67.6006393432617,4.53647327423096,-0.314649075269699,67.6049194335938,4.52642869949341 ,-0.154019773006439,67.6718597412109,4.51584339141846,-0.0284524857997894,67.7924118041992,4.50614738464355,0.045093297958374 ,67.9502868652344,4.49865293502808,0.0566878318786621,68.1241989135742,4.49436807632446,0.00476294755935669,68.2906188964844 ,4.49387311935425,-0.103666737675667,68.4271087646484,4.49723625183105,-0.253960758447647,68.5151901245117,4.50400161743164 ,-0.437931269407272,68.5923614501953,4.32444953918457,-0.627265989780426,68.5520629882813,4.33612251281738,-0.789196729660034 ,68.4459838867188,4.3475980758667,-0.901857972145081,68.2884292602539,4.35732746124268,-0.950031757354736,68.1007080078125 ,4.36399078369141,-0.92721152305603,67.9081573486328,4.36669635772705,-0.836480498313904,67.7367706298828,4.36507177352905 ,-0.690092802047729,67.6097183227539,4.35933971405029,-0.507818579673767,67.5441284179688,4.3502779006958,-0.314273238182068 ,67.5488815307617,4.33910369873047,-0.135598540306091,67.6233520507813,4.32732772827148,0.00407609343528748,67.757438659668 ,4.31654453277588,0.085885614156723,67.9330596923828,4.30820465087891,0.0987821817398071,68.1265029907227,4.30343818664551 ,0.0410231649875641,68.3116149902344,4.3028883934021,-0.0795898139476776,68.4634323120117,4.3066291809082,-0.246766522526741 ,68.5614242553711,4.31415462493896,-0.391969442367554,68.0767288208008,4.9009370803833 PolygonVertexIndex: 2,1,15,-15,3,2,14,-17,1,13,17,-16,4,5,19,-19,5,0,20,-20,6,3,16,-44,7,8,21,-23,21,8,9,-35,12,7,22,-24,11,10,24,-26 ,0,11,25,-21,10,12,23,-25,13,4,18,-18,14,15,27,-27,16,14,-27,15,17,28,-28,18,19,30,-30,19,20,31,-31,22,21,32,-34,21 ,34,-33,23,22,33,-36,25,24,36,-38,20,25,37,-32,24,23,35,-37,17,18,29,-29,26,27,45,-45,43,26,44,-47,27,28,47,-46,29 ,30,49,-49,30,31,50,-50,33,32,51,-39,32,34,39,-52,35,33,38,-41,37,36,41,-43,31,37,42,-51,36,35,40,-42,28,29,48,-48 ,128,131,130,-130,132,129,130,-134,134,133,130,-136,136,135,130,-132,138,137,1797,1798,-140,128,137,138,-132,136,131 ,138,-140,141,1806,140,-143,143,146,145,-143,141,142,145,-148,132,147,145,-130,128,129,145,-147,140,148,-145,151,154 ,153,-153,155,152,153,-157,157,156,153,-159,159,158,153,-155,159,161,160,-159,157,158,160,-163,163,162,160,-165,165 ,164,160,-162,166,168,167,-1808,169,172,171,-171,171,139,1798,1799,-171,136,139,171,-173,173,176,175,-175,169,174 ,175,-173,136,172,175,-136,134,135,175,-177,177,180,179,-179,181,178,179,-183,155,182,179,-153,151,152,179,-181,180 ,177,183,-185,180,184,185,-152,190,189,187,-189,190,188,52,-126,194,193,191,-193,194,192,187,-190,196,194,189,-196 ,193,194,-197,200,199,197,-199,200,198,202,-202,204,197,199,-204,204,203,206,-206,208,195,189,-191,208,190,125,-127 ,211,186,210,-210,212,215,214,-214,216,213,214,-218,218,217,214,-220,220,219,214,-216,222,221,209,-211,223,226,225 ,-225,227,224,225,-229,229,228,225,-231,231,230,225,-227,235,234,232,-234,235,233,237,-237,238,239,205,-194,237,239 ,-239,197,204,241,-241,232,240,241,-234,237,233,241,-240,205,239,241,-205,232,234,242,-244,242,245,202,-244,246,247 ,210,-187,202,245,247,-247,226,223,245,-243,226,242,234,-232,223,224,249,-249,249,251,250,222,-249,252,251,249,-254 ,227,253,249,-225,247,248,222,-211,245,223,248,-248,254,257,256,3506,-256,227,255,3506,256,-254,252,253,256,-259,259 ,258,256,-258,260,263,262,-262,264,261,262,-266,266,265,262,-268,268,267,262,-264,264,270,269,-262,260,261,269,-272 ,272,271,269,-274,274,273,269,-271,275,278,277,-277,279,276,277,-281,281,280,277,-283,283,282,277,-279,193,196,284 ,-239,237,238,284,-286,286,285,284,-288,195,287,284,-197,288,53,283,-279,288,278,275,-290,290,54,53,-289,290,288,289 ,-287,185,184,292,-292,293,291,292,-295,295,294,292,-297,183,296,292,-185,297,300,299,-299,231,298,299,-231,229,230 ,299,-302,302,301,299,-301,298,231,234,-236,298,235,236,-298,195,208,303,-288,286,287,303,-291,54,290,303,-56,126 ,55,303,-209,246,186,207,-305,246,304,201,-203,202,198,244,-244,232,244,-241,197,240,244,-199,193,205,206,-192,305 ,308,307,-307,229,306,307,-229,227,228,307,-256,254,255,307,-309,302,310,309,-302,229,301,309,-307,305,306,309,-311 ,279,280,312,-312,274,311,312,-274,272,273,312,-314,281,313,312,-281,285,286,289,-315,285,314,236,-238,314,289,275 ,-316,314,315,297,-237,279,317,316,-277,275,276,316,-316,297,315,316,-301,302,300,316,-318,279,311,318,-318,302,317 ,318,-311,305,310,318,-320,274,319,318,-312,254,308,321,-321,264,320,321,-271,274,270,321,-320,305,319,321,-309,264 ,265,322,-321,254,320,322,-258,259,257,322,-324,266,323,322,-266,293,325,324,-292,185,291,324,-327,216,326,324,-214 ,212,213,324,-326,266,267,328,-328,212,327,328,-216,220,215,328,-330,268,329,328,-268,259,323,331,-331,293,330,331 ,-326,212,325,331,-328,266,327,331,-324,293,294,332,-331,259,330,332,-259,252,258,332,-334,295,333,332,-295,250,251 ,-335,335,334,251,-253,336,183,177,-338,339,338,295,-297,183,336,339,-297,154,151,185,-327,154,326,216,-160,161,159 ,216,-218,161,217,218,-166,340,1795,1796,-342,143,340,341,-147,128,146,341,-138,341,1796,1797,-138,144,342,340,-144 ,342,1794,1795,-341,148,343,342,-145,343,1793,1794,-343,348,351,350,-350,356,355,353,-355,360,359,358,-358,349,363 ,-349,365,364,361,-363,357,358,364,-366,366,352,-368,352,366,-352,350,351,366,-369,369,353,-356,375,374,373,-372,376 ,1666,379,-1809,380,383,382,-382,379,383,-1809,374,386,385,-385,385,387,-385,372,390,389,-376,372,377,391,-391,374 ,375,389,-387,389,1112,385,-387,392,1111,1112,389,-391,399,397,400,-396,398,401,403,-403,405,404,406,-388,402,405 ,410,-410,387,411,410,-406,407,415,590,591,-415,399,416,401,-399,395,412,416,-400,416,418,417,-402,419,418,416,-413 ,407,414,421,-421,395,400,422,-395,402,409,396,-399,404,403,-424,404,423,424,-407,423,403,401,417,-1647,425,428,427 ,-427,407,420,428,-426,432,430,431,-434,434,433,431,-436,439,438,436,-438,431,1804,-441,443,441,-445,441,1592,-441 ,441,442,446,445,-445,447,450,449,-449,449,452,451,436,-449,453,449,-451,453,454,452,-450,437,436,451,-458,439,437 ,460,-459,462,448,436,-439,447,448,462,-462,56,464,463,-58,438,439,463,-465,465,457,451,-467,456,455,457,-466,460 ,437,457,-456,459,468,467,-459,439,458,467,-464,463,467,58,-58,59,58,467,-469,56,60,469,-465,438,464,469,-463,461 ,462,469,-471,61,470,469,-61,454,453,-472,454,472,466,451,-453,473,472,454,-472,62,63,478,-478,476,477,478,-480,480 ,479,478,-482,64,481,478,-64,487,486,789,-789,488,487,788,-791,490,493,492,-492,494,493,490,-487,474,496,495,-476 ,476,475,495,-478,62,477,495,-67,67,66,495,-497,476,479,498,-498,498,479,480,-490,481,499,483,-481,68,499,481,-65 ,501,504,503,-503,500,503,70,-3497,71,70,503,-505,505,72,3504,-3504,505,763,127,-73,509,512,511,-511,74,73,511,-513 ,519,520,348,-364,521,520,519,-519,522,525,524,-524,523,524,514,-516,514,524,526,-514,527,526,524,-526,531,530,528 ,-530,533,528,530,-533,535,536,-535,536,535,-538,530,537,535,-533,538,541,540,-540,540,536,543,-543,540,542,-540,538 ,546,545,-545,547,544,545,-549,360,548,545,-550,550,549,545,-547,552,548,360,-358,547,548,552,-552,553,550,518,-520 ,75,76,555,-555,522,554,555,-526,527,525,555,-557,77,556,555,-77,522,557,558,-555,75,554,558,-79,534,541,559,-534 ,528,533,559,-561,547,560,559,-545,538,544,559,-542,357,365,561,-553,551,552,561,-563,529,566,565,-565,551,562,565 ,-567,560,547,551,-567,348,520,570,352,-352,570,520,521,-518,515,572,571,-569,568,571,362,-570,365,362,571,-562,561 ,571,572,-563,578,577,576,-576,516,517,521,-580,568,580,523,-516,522,523,580,-558,567,512,509,-517,74,512,567,-80 ,516,509,563,-518,581,584,583,-583,585,582,583,-587,587,586,583,-589,589,588,583,-585,593,592,591,-591,419,412,413 ,-595,600,599,597,-599,606,605,603,-605,606,604,608,-608,610,609,599,-601,610,600,601,-612,604,603,613,-615,604,614 ,615,-609,598,616,617,-603,80,81,619,-619,82,620,619,-82,623,626,625,-625,83,629,627,-85,85,84,627,-629,633,631,632 ,-635,634,632,635,-985,615,638,637,-637,611,636,637,-640,638,642,619,-621,619,642,643,-619,613,643,642,-615,615,614 ,642,-639,385,411,-388,649,648,646,-648,649,647,396,-410,650,653,652,-652,422,400,653,-651,648,649,655,-655,645,654 ,655,-645,411,644,655,-411,409,410,655,-650,656,659,658,-658,420,421,659,-657,427,428,661,-661,662,660,661,-664,657 ,663,661,-657,420,656,661,-429,665,668,667,-667,669,668,665,-665,673,672,670,-672,673,671,675,-675,677,680,679,-679 ,681,680,677,-677,687,686,685,-685,536,690,689,-689,691,688,689,-693,695,694,689,-691,697,676,693,-695,700,699,698 ,-702,710,709,707,-709,710,708,712,-712,714,711,712,-714,716,719,718,-716,696,715,718,-721,721,720,718,-723,723,722 ,718,-720,536,537,724,-691,695,690,724,-718,530,717,724,-538,703,726,725,-703,727,726,703,-705,723,729,728,-723,721 ,722,728,-731,713,712,732,1802,-1804,736,683,682,-736,708,707,1203,-1498,680,738,739,-680,696,741,-698,741,696,720 ,-743,743,738,680,-682,703,702,709,-711,703,710,711,-705,737,745,727,-705,699,745,737,-706,749,746,747,-749,749,748 ,682,-684,751,754,753,-753,755,754,751,-751,758,757,756,-483,759,762,761,-761,521,518,762,-760,763,575,69,-128,766 ,589,765,-765,527,770,767,-527,769,774,773,-773,775,772,773,-777,86,776,773,-88,88,87,773,-775,779,777,778,-781,785 ,784,782,-787,787,786,782,-784,89,90,792,-792,793,791,792,-795,459,794,792,-469,59,468,792,-91,795,336,337,-753,797 ,751,752,-338,750,751,797,-797,191,206,802,-802,752,753,803,-796,807,806,804,-809,809,808,804,-806,810,813,812,-812 ,814,811,812,-816,815,812,804,-807,804,812,813,-806,779,780,817,-817,822,824,761,-824,829,832,831,-831,833,832,829 ,-829,823,834,836,-836,691,836,834,-543,840,843,-843,798,840,-842,848,847,845,-847,849,852,851,-851,853,852,849,-588 ,854,857,856,-856,851,855,856,-859,809,858,856,-809,807,808,856,-858,860,862,-862,861,862,864,-864,866,786,787,-868 ,785,786,866,-866,868,870,869,-757,871,870,872,-3492,873,872,870,-869,531,874,875,716,-531,877,880,879,-879,881,880 ,877,-877,885,884,883,-883,791,793,886,-888,791,887,91,-90,889,191,-802,892,891,793,-795,892,794,459,-1638,893,895 ,871,-895,491,492,895,-894,896,899,898,-898,898,823,-762,898,761,-898,823,898,-835,542,834,898,-900,810,902,901,-901 ,903,900,901,-905,670,904,901,-906,906,905,901,-903,908,910,909,-908,912,488,790,-1136,913,912,1135,-1137,915,916 ,885,-883,917,916,915,-915,903,919,918,-901,810,900,918,-814,630,923,-923,801,802,867,-788,822,823,835,-910,931,930 ,933,-933,939,938,-941,941,940,938,-938,942,945,944,-944,944,946,883,884,-944,947,946,944,-946,948,951,950,-950,954 ,953,950,-952,938,203,199,-938,203,938,802,-207,838,837,924,-1060,955,956,863,-865,933,930,956,-956,957,960,959,-959 ,961,958,959,-963,964,967,966,-966,795,803,967,-965,969,678,679,-969,969,968,714,-714,976,975,973,-975,976,974,978 ,-978,979,373,-375,982,981,93,-93,983,735,3491,-873,633,634,984,-986,824,987,986,-761,798,841,988,-990,990,989,988 ,-992,927,507,508,-976,674,996,993,-995,736,735,983,-998,818,1001,1000,-820,820,992,1001,818,-822,1001,945,942,-1001 ,992,947,945,-1002,789,1003,1002,-789,930,931,1002,-1004,1007,1006,1004,-1006,1007,1005,576,-578,95,1011,1010,-97 ,917,1011,95,-95,894,871,3491,-3493,1013,1012,778,-778,1014,1017,1016,-1016,1018,1019,-1017,1016,1019,-1016,1021,1018 ,1016,-1021,672,1020,1016,-1018,780,1026,1025,-818,201,1029,-201,629,83,93,-982,599,609,987,-825,891,892,1035,-1035 ,503,1005,1004,-503,797,178,181,-797,337,177,178,-798,1038,1037,1023,-1025,1023,1037,1039,-926,597,599,824,-823,1029 ,201,1041,-1041,1029,1040,941,-938,499,887,886,-484,91,887,499,-69,744,968,679,-740,1042,1045,1044,-1044,814,1043 ,1044,-1047,1047,1800,-1049,1049,1048,1044,-1046,748,747,1619,-3494,954,803,753,-1051,755,1053,-991,1057,1056,1055 ,-383,1055,1056,1058,-1055,107,97,913,-1137,1034,1035,445,-1061,1061,1064,1063,-1063,841,1062,1063,-989,988,1063,1065 ,-992,1066,1065,1063,-1065,1060,445,446,-1068,339,964,965,-339,1068,825,-1071,536,688,-544,543,688,691,-543,1076,1078 ,952,-1078,950,1077,952,-950,1079,1076,1077,-1081,1081,1080,1077,-1083,1082,1077,950,-954,756,757,1083,-869,884,110 ,99,-944,98,942,943,-100,1079,1080,1085,-1085,809,1084,1085,-859,851,858,1085,-1087,1081,1086,1085,-1081,1011,998 ,999,-1011,917,914,998,-1012,975,508,-974,500,576,1005,-504,69,575,576,500,-3497,682,748,3493,-3493,735,682,3492,-3492 ,755,1087,1088,-1054,833,828,1088,-1088,1089,1092,1091,-1091,1093,1092,1089,-174,1081,1082,1095,-1095,714,968,744 ,-3495,705,744,739,-707,1096,584,581,-861,765,589,584,-1097,793,891,757,-759,1061,1062,1098,-1098,585,1097,1098,-1100 ,842,1099,1098,-841,840,1098,1062,-842,932,933,843,-889,1045,1042,701,-1101,1045,1100,1101,-1050,1070,1103,1102,-1070 ,1103,1070,825,826,-935,1107,1106,1104,-1106,1107,1105,1109,-1109,1110,100,121,-1689,1112,1111,645,-645,385,1112,644 ,-412,957,958,1114,-1114,941,1113,1114,-941,939,940,1114,-1116,961,1115,1114,-959,674,1022,-674,1022,674,-995,672 ,673,1022,-1021,959,1117,934,-963,963,1118,1117,959,-961,883,1088,828,-883,909,910,597,-823,1058,924,925,-1040,585 ,586,1119,-1098,1061,1097,1119,-1121,850,1120,1119,-850,587,849,1119,-587,581,582,1122,-1122,864,1121,1122,-1124,842 ,1123,1122,-1100,585,1099,1122,-583,1124,759,760,-987,579,521,759,-1125,951,967,803,-955,951,948,966,-968,1023,925 ,1126,-1126,873,1060,-1068,922,983,-873,1100,701,698,-1731,1023,1125,1127,-1025,527,556,1128,-771,77,101,1128,-557 ,1118,847,1129,-1118,1117,1129,1103,-935,1102,1103,1129,-1131,848,1130,1129,-848,1133,982,92,-104,1136,1135,818,-820 ,818,1135,790,-822,924,837,1126,-926,894,3492,3493,-860,1134,1140,982,-1134,986,1140,1134,-1125,579,1124,1134,-1142 ,102,1141,1134,-1134,915,829,830,-915,882,828,829,-916,798,947,-889,1143,1145,1144,-574,1146,1145,1143,-1143,1148 ,832,833,-1150,831,832,1148,-1148,871,1150,869,-871,793,758,-887,1151,1140,986,-988,875,719,-717,723,719,875,-1153 ,1087,1153,1149,-834,755,750,1153,-1088,946,947,798,-1054,883,946,1053,-1089,886,758,482,-484,1155,1156,830,-832,1157 ,1156,1155,-1155,1151,987,609,-1159,1151,1158,629,-982,938,939,867,-803,1028,1720,1159,-1026,1083,757,891,-1035,778 ,1160,1026,-781,1012,1132,1160,-779,877,105,104,-877,3501,105,877,-879,1153,1162,1091,-1150,750,796,1162,-1154,807 ,857,1164,-1164,1108,1163,1164,-1108,1106,1107,1164,-1166,854,1165,1164,-858,1047,1678,1166,-1681,1166,1168,-1168 ,1167,1681,1680,-1167,1166,1678,1567,-1169,866,1115,961,-866,867,939,1115,-867,1172,1174,-1174,814,1046,1175,-812 ,810,811,1175,-1177,1177,3498,-1179,922,872,873,-1068,1179,1182,1181,-1181,1183,1180,1181,-1185,1185,1184,1181,-1187 ,1187,1186,1181,-1183,1185,1186,1189,-1189,1190,1188,1189,-1192,1187,1191,1189,-1187,809,805,1192,-1085,1079,1084 ,1192,-1194,919,1193,1192,-919,918,1192,805,-814,1108,1196,1195,-1164,807,1163,1195,-807,1197,923,630,-632,1197,631 ,633,-1199,932,888,947,-993,588,1199,853,-588,589,766,1199,-589,1200,745,699,-701,745,1200,1109,-728,1201,1090,1091 ,-1163,922,923,997,-984,1202,997,923,-1198,1202,1197,1198,-1204,1066,1064,1205,-1205,1094,1204,1205,-1207,850,1206 ,1205,-1121,1061,1120,1205,-1065,1207,763,505,-1028,1207,578,575,-764,953,1208,1095,-1083,954,1050,1208,-954,98,106 ,1000,-943,814,815,1209,-1044,1042,1043,1209,-1211,1210,1209,1195,-1197,1195,1209,815,-807,998,1156,1157,-1000,914 ,830,1156,-999,1092,1148,1149,-1092,1147,1148,1092,-1094,916,109,108,-886,917,94,109,-917,1206,1086,1081,-1095,850 ,851,1086,-1207,885,108,110,-885,1211,1213,1078,-1213,1079,1212,1078,-1077,952,1078,-1214,1215,1216,666,-668,1217 ,1216,1215,-1215,1177,1221,1220,-1220,906,1219,1220,-1223,1146,1222,1220,-1146,1144,1145,1220,-1222,845,844,-847,970 ,1223,1224,-1226,1226,971,211,-676,970,971,1226,-1143,675,1227,-1227,1226,1227,1146,-1143,1143,1223,970,-1143,573 ,844,1223,-1144,1229,1230,-1229,1230,669,664,-1229,1232,973,508,-1232,1232,1231,1004,-1007,506,1231,508,-508,502,1004 ,1231,506,-502,1066,1204,1233,-1066,1094,1095,1233,-1205,1233,1234,991,-1066,990,991,1234,-1236,1050,1235,1234,-1209 ,1095,1208,1234,-1234,1236,1238,1116,-1238,1239,1237,1116,-1241,994,1240,1116,-1023,1116,1238,1021,-1023,1241,1244 ,1243,-1243,1245,1190,1241,-1243,1241,1191,1187,-1245,1241,1190,-1192,1249,1248,1246,-1251,1251,1250,1246,-1248,1252 ,1255,1254,-1254,1257,1262,1261,-1261,1263,1262,1257,-1257,1264,1267,1266,-1266,1268,1265,1266,-1270,1270,1269,1266 ,-1268,1271,1273,1190,-1273,1272,1190,-1275,1211,1271,1272,-1276,1258,1275,1272,-1277,1277,1276,1272,-1275,948,949 ,1279,-1279,1280,1278,1279,-1282,1260,1281,1279,-1283,952,1282,1279,-950,1260,1282,1259,-1258,1259,1275,1258,-1257 ,1211,1275,1259,-1214,952,1213,1259,-1283,1239,1240,1284,-1284,1285,1283,1284,-1287,995,1286,1284,993,-997,993,1284 ,1240,-995,1288,1287,1285,-1287,1288,1286,995,-1290,664,1291,1290,-1229,1229,1228,1290,-1293,1293,1292,1290,-1295 ,1295,1294,1290,-1292,1296,1299,1298,-1298,666,1297,1298,-666,664,665,1298,-1292,1295,1291,1298,-1300,1300,1303,1302 ,-1302,1304,1301,1302,-1306,1217,1305,1302,-1307,1307,1306,1302,-1304,1305,1217,1214,-1788,1304,1305,-1788,1281,1309 ,1308,-1281,1260,1261,1309,-1282,966,1280,1308,-1311,1239,1313,1312,-1238,1236,1237,1312,-1315,1315,1314,1312,-1317 ,1317,1316,1312,-1314,1285,1319,1318,-1284,1239,1283,1318,-1314,1317,1313,1318,-1321,1321,1320,1318,-1320,1322,1325 ,1324,-1324,1326,1323,1324,-1328,1236,1327,1324,-1239,1021,1238,1324,-1326,1236,1314,1328,-1328,1326,1327,1328,-1330 ,1330,1329,1328,-1332,1315,1331,1328,-1315,1332,1333,-1323,1332,1334,-1334,1335,1336,1334,-1333,1337,1336,1335,-1339 ,1326,1338,1335,-1324,1322,1323,1335,-1333,1337,1338,1340,-1340,1341,1339,1340,-1343,1330,1342,1340,-1330,1326,1329 ,1340,-1339,1333,1345,1344,-1344,1346,1343,1344,-1348,1348,1345,1333,-1335,1350,1339,1341,-1255,1337,1339,1350,-1350 ,1344,1351,1243,1244,-1348,1242,1243,1351,-1353,1353,1352,1351,-1355,1345,1354,1351,-1345,1190,1245,1355,-1275,1277 ,1274,1355,-1357,1353,1356,1355,-1353,1242,1352,1355,-1246,1357,1360,1359,-1359,1361,1358,1359,-1363,1296,1362,1359 ,-1300,1295,1299,1359,-1361,1363,1366,1365,-1365,1357,1364,1365,-1361,1295,1360,1365,-1295,1293,1294,1365,-1367,1364 ,1357,1367,-1369,1364,1368,1369,-1364,1370,1358,1361,-1372,1367,1357,1358,-1371,1372,1375,1374,-1374,1249,1375,1372 ,-1249,1372,1368,1367,-1249,1369,1368,1372,-1374,1379,1378,1376,-1381,1251,1380,1376,-1378,1374,1375,-1382,1383,1382 ,1376,-1379,1376,1382,1384,-1378,1254,1384,1382,-1351,1349,1350,1382,-1384,1385,1387,1386,-1250,1387,1385,1255,-1253 ,1388,1390,1268,-1390,1389,1253,1392,-1392,1389,1391,-1389,1253,1389,-1253,1392,1253,1341,-1343,1392,1342,1330,-1392 ,1393,1391,1330,-1332,1393,1331,1315,-1265,1264,1265,1390,-1394,1391,1393,1390,-1389,1268,1390,-1266,1316,1317,1394 ,-1396,1316,1395,1264,-1316,1320,1321,1396,-1398,1320,1397,1394,-1318,1398,1396,1321,-1400,1400,1366,1363,-1400,1293 ,1366,1400,-1288,1319,1285,1287,-1401,1319,1400,1399,-1322,1300,1403,1402,-1402,1404,1401,1402,-1406,1263,1405,1402 ,-1263,1261,1262,1402,-1404,1404,1407,1406,-1402,1300,1401,1406,-1304,1307,1303,1406,-1409,1409,1408,1406,-1408,1407 ,1411,1410,-1410,1412,1411,1407,-1405,1258,1276,1277,3497,-1414,1413,1263,1256,-1259,1416,1264,1395,-1395,1264,1416 ,-1268,1417,1418,1381,-1387,1374,1381,1418,-1420,1396,1419,1418,-1421,1270,1420,1418,-1418,1379,1423,1422,-1422,1424 ,1421,1422,-1426,1412,1425,1422,-1412,1410,1411,1422,-1424,1412,1426,1414,-1426,1424,1425,1414,-1428,1414,1426,1413 ,-3498,1270,1417,1428,-1270,1268,1269,1428,-1390,1387,1428,-1387,1386,1428,-1418,1277,1356,1429,-1416,1353,1430,1429 ,-1357,1349,1383,1432,-1432,1349,1431,1433,-1435,1334,1434,1433,-1349,1379,1380,1435,-1424,1251,1247,1435,-1381,1246 ,1370,1371,-1248,1248,1367,1370,-1247,1436,1435,1247,-1372,1435,1436,1410,-1424,1436,1437,1409,-1411,1371,1361,1437 ,-1437,1296,1439,1438,-1363,1361,1362,1438,-1438,1409,1437,1438,-1409,1307,1408,1438,-1440,1307,1439,1440,-1307,1217 ,1306,1440,-1217,666,1216,1440,-1298,1296,1297,1440,-1440,1015,1180,1183,-1015,1179,1180,1015,-1020,1347,1244,1187 ,-1183,1347,1182,1179,-1347,1343,1441,1322,-1334,1019,1441,1343,-1347,1442,1396,-1399,1396,1442,-1420,1374,1419,1442 ,-1374,1394,1397,1443,-1417,1416,1443,1420,1270,-1268,1396,1420,1443,-1398,1249,1386,-1376,1375,1386,-1382,1383,1378 ,1444,-1433,1432,1444,1445,-1432,1424,1445,1444,-1422,1379,1421,1444,-1379,1429,1446,1427,-1416,1424,1427,1446,-1446 ,1431,1445,1446,-1434,1430,1348,1433,1446,-1430,1251,1377,1447,-1251,1249,1250,1447,-1386,1278,966,-949,1278,1280 ,-967,903,1448,1449,-920,1322,1441,1018,-1326,1021,1325,-1019,1019,1018,-1442,111,1450,876,-105,1253,1254,-1342,1377 ,1384,1451,-1448,1447,1451,1255,-1386,1254,1255,1451,-1385,1334,1336,1337,-1435,1434,1337,-1350,1185,1453,1452,-1185 ,1183,1184,1452,-1455,1454,1452,1449,-1449,1449,1452,1453,1455,-1195,1211,1455,1273,-1272,1455,1453,1456,-1274,1273 ,1456,1188,-1191,1185,1188,1456,-1454,1014,1183,-1455,1014,1454,-1449,1458,603,605,-1458,1458,1457,1460,-1460,1458 ,1459,1461,-1463,1458,1462,613,-604,112,113,1464,-1464,80,618,1464,-114,1466,621,622,-1466,1466,1465,1468,-1468,1464 ,1470,1469,-1464,1461,1469,1470,-1463,613,1462,1470,-644,618,643,1470,-1465,450,447,13,-2,450,1,2,-454,447,461,4,-14 ,1471,1473,-1473,1474,1473,-1472,434,1472,1473,-1476,1473,1474,-1476,5,470,61,-1,4,461,470,-6,471,453,2,-4,471,3,6 ,-474,1476,1479,1478,-1478,432,1477,1478,-1481,1481,1480,1478,-1480,1482,1485,1484,-1484,1484,1485,-1475,1486,1489 ,1488,-1488,1476,1487,1488,-1491,1491,1490,1488,-1493,1493,1492,1488,-1490,1484,1494,-1484,1482,1483,1494,-1496,1496 ,1495,-1495,1498,1202,1203,-708,1202,1498,736,-998,1499,683,736,-1499,1499,1498,707,-710,1499,709,702,-1501,1499,1500 ,749,-684,1500,1501,746,-750,702,725,1501,-1501,1503,1104,1106,-1503,1503,1502,766,-765,766,1502,1504,-1200,853,1199 ,1504,-1506,854,1505,1504,-1166,1106,1165,1504,-1503,852,1505,854,-856,851,852,-856,1037,1507,1506,-1040,1054,1058 ,1039,-1507,1055,1509,381,-383,1510,1509,1055,-1055,1054,1506,1511,-1511,1512,1511,1506,-1508,1512,1507,1508,-1514 ,1515,1513,1508,-1515,1515,1514,388,-394,1398,1399,1363,-1370,1369,1373,1442,-1399,1288,1289,1229,-1293,1288,1292 ,1293,-1288,1029,937,199,-201,114,819,1000,-107,819,114,107,-1137,1405,1426,1412,-1405,1263,1413,1426,-1406,1261,1403 ,1518,-1310,1308,1309,1518,-1520,1304,1519,1518,-1302,1300,1301,1518,-1404,674,675,211,-210,1346,1179,-1020,1017,904 ,670,-673,903,904,1017,1014,-1449,1521,1520,771,-1802,768,1522,1030,-1802,1030,1522,1523,-1032,775,1523,1522,-773 ,769,772,1522,-769,1524,1101,1139,-1139,1524,1138,592,-594,490,799,789,-487,491,800,799,-491,476,497,1527,-476,475 ,1527,1528,-475,869,489,482,-757,1430,1354,1345,-1349,1353,1354,-1431,1530,347,345,-1530,1530,1529,-389,838,1059,1531 ,-840,1059,924,1058,-1057,396,647,1532,-398,400,397,1532,-654,652,653,1532,-1534,646,1533,1532,-648,1534,660,662,-1536 ,426,427,660,-1535,1536,1538,-1538,1538,1536,-1540,1535,1537,1538,-1535,426,1534,1538,-1541,393,1540,1538,-1540,1536 ,1541,-1540,1541,393,-1540,1541,1542,1515,-394,1513,1515,1542,-1544,1544,1543,1542,-1546,1536,1545,1542,-1542,1513 ,1543,1546,-1513,1511,1512,1546,-1548,1548,1547,1546,-1550,1544,1549,1546,-1544,1550,1510,1511,-1548,1550,1547,1548 ,-1552,1510,1550,1552,-1510,381,1509,1552,-1554,1554,1553,1552,-1556,1551,1555,1552,-1551,1554,1557,1556,-1554,381 ,1553,1556,-381,378,380,1556,-1559,1559,1558,1556,-1558,1559,1560,391,-1559,378,1558,391,-378,392,390,391,-1561,1057 ,382,383,379,-1171,1531,1057,1170,-1562,1531,1561,1562,-840,785,1563,-922,1565,1569,1568,-1567,1566,1568,1168,-1568 ,1572,388,-1572,1572,393,-389,393,1574,426,-1541,426,1574,-1574,1571,1575,-1573,393,1572,-1575,1573,1574,1572,-1576 ,1577,1576,1529,-346,432,1579,1578,-431,429,430,1578,-1581,625,1580,1578,-625,622,1578,-1580,1578,622,-625,1468,1465 ,1582,-1582,1583,1581,1582,-1585,1481,1584,1582,-1586,622,1585,1582,-1466,1583,1584,1587,-1587,1587,1479,1476,-1491 ,1481,1479,1587,-1585,641,635,1804,429,-641,446,442,635,-633,85,628,1588,-116,82,115,1588,-621,638,620,1588,-638,637 ,1588,628,-640,609,610,612,-1159,629,1158,612,-628,627,612,639,-629,1589,608,615,-637,1589,636,611,-602,1590,607,608 ,-1590,1590,1589,601,-603,1591,626,607,-1591,443,456,1593,-1593,1593,1594,435,-1593,1805,435,1594,-1596,466,1595,1594 ,-466,456,465,1594,-1594,1805,1595,1596,-1473,1471,1472,1596,-1598,473,1597,1596,-473,466,472,1596,-1596,1474,1471 ,1598,-1485,1474,1485,1599,-1476,434,1475,1599,-1601,1482,1600,1599,-1486,432,1602,1601,-1478,1601,1482,1603,-1477 ,1601,1476,-1478,1482,1601,-1603,434,1600,1604,-434,432,433,1604,-1603,1482,1602,1604,-1601,46,1598,1471,-1598,46 ,1597,473,-7,431,440,1592,-436,625,1605,-1581,1580,1605,640,-430,868,1083,-874,873,1083,1034,-1061,767,771,513,-527 ,562,572,1606,-566,565,1606,1607,-565,513,1607,1606,-515,514,1606,572,-516,771,1520,1607,-514,1609,1608,580,568,-570 ,580,1608,1610,-558,510,1610,-1609,510,1608,1609,563,-510,557,1610,1611,-559,558,1611,116,-79,116,1611,511,-74,511 ,1611,1610,-511,1613,487,488,-1615,494,486,487,-1614,1615,912,913,-1617,1614,488,912,-1616,474,1618,1617,-497,67,496 ,1617,-118,65,117,1617,-486,484,485,1617,-1619,1612,1618,474,-1529,484,1618,-1613,913,97,118,-1617,860,1620,1619,-1097 ,1622,1621,799,-801,799,1621,1003,-790,930,1003,1621,-957,863,956,1621,-1623,1150,871,-896,869,1150,498,-490,498,1150 ,1623,-498,492,1623,1150,-896,497,1623,1624,-1528,1527,1624,1625,-1529,494,1625,1624,-494,492,493,1624,-1624,1528 ,1625,1626,-1613,1612,1626,1627,-485,1614,1627,1626,-1614,494,1613,1626,-1626,484,1627,1628,-486,485,1628,1629,-66 ,1616,1629,1628,-1616,1614,1615,1628,-1628,65,1629,-120,1616,118,119,-1630,894,859,1630,-894,893,1630,800,-492,859 ,1620,1631,-1631,1630,1631,1622,-801,863,1622,1631,-862,860,861,1631,-1621,747,746,764,-766,1501,1503,764,-747,1104 ,1503,1501,-726,726,1105,1104,-726,727,1109,1105,-727,1196,1108,1109,-1201,1210,1196,1200,-701,1210,700,701,-1043 ,1619,747,765,-1097,859,3493,1619,-1621,1605,625,626,-1592,1605,1591,617,-641,641,640,617,-617,907,909,835,-1633,567 ,516,579,-1142,567,1141,102,-80,761,824,-761,896,897,1634,-1634,518,1633,1634,-763,761,762,1634,-898,1635,1497,1203 ,-1199,1635,1008,1009,-1803,1198,633,985,1008,-1636,630,922,1067,-447,1636,444,445,-1036,1637,460,455,-1637,1637,1636 ,1035,-893,606,607,626,-624,606,623,621,-606,1457,605,621,-1467,1457,1466,1467,-1461,622,1579,1638,-1586,1481,1585 ,1638,-1481,432,1480,1638,-1580,1476,1603,1639,-1488,1486,1487,1639,-1641,1496,1640,1639,-1496,1482,1495,1639,-1604 ,1169,3486,977,-979,366,354,-369,367,356,354,-367,931,820,821,-1003,1002,821,790,-789,1235,1050,753,-755,1235,754 ,755,-991,864,1641,-956,955,1641,843,-934,840,798,888,-844,864,862,-1122,862,860,581,-1122,864,1123,-1642,843,1641 ,1123,-843,973,1232,1642,-975,1132,1642,1232,1006,-1132,1012,1643,1642,-1133,978,1643,1171,-1170,1013,1171,1643,-1013 ,1644,531,529,-565,1644,564,1607,-1521,1033,1152,-1033,1656,1657,1645,936,-936,71,504,1654,-121,504,501,1655,-1655 ,506,507,1656,-1660,501,506,1659,-1656,875,874,1644,1520,-1522,874,531,-1645,423,1646,-425,1648,729,723,-1034,731 ,729,1648,-1648,1071,1072,-1650,1649,1072,838,-840,838,1072,1650,-838,1651,1126,837,-1651,1651,1650,1069,-1103,1102 ,1130,1652,-1652,1126,1651,1652,-1126,1125,1652,1653,-1128,848,1653,1652,-1131,1654,1655,1687,-1689,927,1657,1656 ,-508,1658,406,-980,387,1658,-385,979,374,384,-1659,1659,1656,935,-1690,413,412,395,-395,1576,1577,1569,-1661,1565 ,1566,1662,-1662,1526,1661,1662,-1664,1567,1663,1662,-1567,1526,1564,1664,-1662,1565,1661,1664,-1666,595,1660,-1666 ,1665,1660,1569,-1566,1575,1571,-3500,408,1573,1575,-596,3499,1571,1529,-1577,407,596,-416,1573,425,-427,408,407,425 ,-1574,1564,1526,593,-591,1524,593,1526,-1526,926,927,-976,1517,3487,1666,-1729,361,1667,569,-363,1667,1668,1609,-570 ,563,1609,1668,-1670,356,1668,-356,1668,356,-1670,369,355,1668,-1668,517,1670,352,-571,367,352,1670,-357,896,1672 ,1671,-900,542,899,1671,-540,538,539,1671,-547,550,546,1671,-1673,550,553,1673,-550,360,549,1673,-360,896,1633,-1673 ,518,550,1672,-1634,353,369,368,-355,358,1674,349,-365,358,359,-1675,1673,1675,1674,-360,349,1674,1675,-1677,553,1676 ,1675,-1674,349,1676,-364,553,519,363,-1677,356,1670,-1670,1669,1670,517,-564,1567,1678,1677,-1664,1526,1663,1677 ,-1526,1049,1525,1677,-1049,1047,1048,1677,-1679,1679,1167,1168,-1569,1679,1568,1569,-1578,1680,1177,1178,-1048,1177 ,1680,-1682,1679,1577,345,-1173,1167,1679,1172,-1174,906,1222,1682,-906,670,905,1682,-672,675,671,1682,-1228,1146 ,1227,1682,-1223,906,902,1683,-1220,1177,1219,1683,-3499,810,1176,1683,-903,1167,1173,1684,-1682,1681,1684,1221,-1178 ,1144,1221,1684,-1686,1174,1685,1684,-1174,574,1685,1174,-347,1144,1685,574,-574,1172,344,346,-1175,1686,373,1645 ,-1658,1645,373,-980,1645,979,406,424,-937,926,1686,1657,-928,1110,1688,1687,-981,1654,1688,121,-121,1689,935,1691 ,-1693,935,936,1690,-1692,1033,1031,-1649,776,86,100,-1111,776,1110,980,-776,1691,1690,731,-1648,1647,1693,1692,-1692 ,1689,1692,1693,980,-1688,1523,775,980,-1694,1031,1523,1693,1647,-1649,1646,417,731,-1691,424,1646,1690,-937,728,729 ,731,417,-419,728,418,419,-731,816,1695,1694,-780,825,1068,1695,827,-827,1694,1695,1068,-1072,777,1696,1562,-1014 ,779,1694,1696,-778,1027,1720,-1029,920,1698,1159,-1717,1159,1698,817,-1026,817,1698,1699,-817,921,1699,1698,-921 ,816,1699,827,-1696,1563,827,1699,-922,1075,1700,1036,-880,962,1701,865,-962,826,1701,962,-935,1701,1563,785,-866 ,1563,1701,826,-828,878,1702,3502,-3502,1702,3503,3504,-3503,781,889,-784,787,783,889,-802,1450,187,192,-929,881,876 ,1450,-929,188,187,-1451,52,188,1450,-112,1649,1696,1694,-1072,839,1562,1696,-1650,1561,1171,1013,-1563,1171,1561 ,1170,-1170,1803,1703,969,-714,734,678,969,-1704,1009,1703,1803,-1803,836,1704,1632,-836,1008,908,907,-1010,985,911 ,908,-1009,1009,907,1632,734,-1704,1704,733,734,-1633,693,733,1704,-693,597,1705,616,-599,616,1705,1706,-642,641,1706 ,984,-636,984,1706,911,-986,1514,1707,1530,-389,1530,1707,1708,-348,1570,1218,1708,-1708,1708,1218,1137,-1710,1137 ,1711,1710,-1710,344,1709,1710,1712,-347,1713,1712,1710,-1712,346,1712,1714,-575,574,1714,-574,1714,1715,844,-574 ,1713,1715,1714,-1713,1508,1038,-1571,1570,1038,1024,-1219,1218,1024,1127,-1138,1075,1717,1716,-1701,784,1717,1718 ,-783,782,1718,1719,781,-784,1719,1718,1073,-1075,1073,1718,1717,-1076,1073,880,881,-1075,1075,879,880,-1074,878,879 ,1036,-1703,1159,1720,1700,-1717,1700,1720,1697,-1037,1036,1697,3503,-1703,1697,505,-3504,929,1074,881,-929,1719,1074 ,929,-782,781,929,890,-890,970,1052,1051,-972,971,1051,207,-212,972,1721,1052,-971,201,304,1722,-1042,1040,1041,1722 ,-1724,1052,1723,1722,-1052,207,1051,1722,-305,1040,1723,-1725,1052,1721,1724,-1724,957,1725,-961,963,960,1725,-1722 ,970,1225,-973,1113,941,1040,-1725,1725,1724,-1722,1028,1726,1207,-1028,1161,1726,1026,-1161,1007,577,1161,-1132,1006 ,1007,-1132,1207,1726,-579,963,1721,972,-1226,1118,1224,845,-848,1224,1118,963,-1226,373,1686,1727,-372,370,371,1727 ,-1729,1516,976,977,-1518,926,975,976,-1517,1517,977,3486,-3488,1516,1727,1686,-927,1517,1728,1727,-1517,741,681,676 ,-698,743,681,741,-743,743,742,685,-687,684,685,721,-731,592,687,684,-595,594,413,591,-593,413,394,414,-592,394,422 ,421,-415,659,421,422,-651,659,650,651,-659,1729,687,1138,-1140,1138,687,-593,686,687,-1730,1100,1730,1139,-1102,698 ,706,740,-1731,1730,740,1729,-1140,1653,1711,1137,-1128,848,1713,1711,-1654,844,1715,-847,1211,1212,1194,-1456,1079 ,1193,1194,-1213,1734,1733,1732,-1732,1737,1736,-1736,1735,122,123,-1738,1731,1732,174,-170,1738,1739,-1736,1740,1741 ,1790,-1792,1740,1742,1734,-1742,1734,1743,-1155,1738,1743,1742,-1745,1744,149,1739,-1739,999,1157,1736,-1738,1736 ,1157,1154,-1744,1733,1155,831,-1148,1734,1154,1155,-1734,1735,1739,124,-123,1735,1736,1743,-1739,1734,1742,-1744 ,1745,1790,-1742,1734,1731,1745,-1742,1745,170,1799,-1791,1010,999,1737,-124,1010,123,-97,155,156,1747,-1747,1748 ,1746,1747,-1750,1750,1749,1747,-1752,157,1751,1747,-157,157,162,1752,-1752,1750,1751,1752,-1754,168,1753,1752,-1755 ,163,1754,1752,-163,1755,163,164,-1757,165,1756,-165,181,182,1757,-1202,1090,1201,1757,-1759,1748,1758,1757,-1747 ,155,1746,1757,-183,168,1754,1759,-168,1759,1754,163,-1756,1748,1749,1761,-1761,134,1760,1761,-134,132,133,1761,-1763 ,1750,1762,1761,-1750,1750,1753,1763,-1763,132,1762,1763,-148,141,147,1763,-167,168,166,1763,-1754,1090,1758,1764 ,-1090,173,1089,1764,-177,134,176,1764,-1761,1748,1760,1764,-1759,1768,1767,1765,-1767,1768,1766,209,-222,1767,669 ,1230,-1770,1771,1770,250,-335,1771,334,335,-1773,674,1774,1773,-997,995,996,1773,-1776,1765,1775,1773,-1775,1769 ,1289,995,-1776,1769,1775,1765,-1768,1766,1774,674,-210,1765,1774,-1767,1768,1776,669,-1768,1770,1776,1768,-222,222 ,250,1770,-222,1770,1771,-1778,1778,1777,1771,-1773,1779,338,-966,1780,1781,295,-339,335,1781,1780,-1773,295,1781 ,-334,335,252,333,-1782,1770,1777,1782,-1777,669,1776,1782,-669,667,668,1782,-1784,1778,1783,1782,-1778,1778,1785 ,1784,-1784,667,1783,1784,-1216,1214,1215,1784,-1787,1779,1786,1784,-1786,1308,1519,1311,-1311,1304,1787,1311,-1520 ,1785,1778,1772,-1781,1785,1780,338,-1780,1788,1786,1779,-966,1787,1214,1786,1788,-1312,1789,965,-967,1789,966,-1311 ,965,1789,-1789,1311,1788,1789,-1311,211,207,-187,1791,1792,150,-1741,730,419,594,-685,696,697,694,-696,742,720,721 ,-686,3494,711,-715,1033,723,-1153,796,181,1201,-1163,174,1732,1093,-174,1732,1733,1147,-1094,1745,1731,169,-171,1524 ,1525,1049,-1102,1800,1046,1044,-1049,1178,1175,1046,-1801,1047,1178,-1801,1161,1160,1132,-1132,920,1716,1717,-785 ,785,921,920,-785,1069,1650,1072,-1072,1069,1071,1068,-1071,1059,1056,1057,-1532,535,534,533,-533,528,560,566,-530 ,1030,1032,1521,-1802,1030,1031,1033,-1033,1152,875,1521,-1033,768,1801,771,-768,769,768,767,-771,774,769,770,-1129 ,88,774,1128,-102,1449,1194,1193,-920,689,694,693,-693,732,1497,1635,-1803,708,1497,732,-713,734,733,677,-679,677 ,733,693,-677,696,695,717,-716,715,717,530,-717,440,1804,442,-442,635,442,-1805,600,598,602,-602,1591,1590,602,-618 ,611,639,612,-611,982,1140,1151,-982,102,1133,-104,1706,1705,910,-912,1705,597,-911,1637,459,458,-461,456,443,444 ,1636,-456,699,705,706,-699,738,686,1729,-741,706,739,738,-741,852,853,-1506,376,370,1728,-1667,372,375,371,-371,376 ,377,372,-371,1659,1689,1687,-1656,1658,387,-407,540,541,534,-537,350,361,364,-350,368,369,1667,361,-351,1726,1028 ,1025,-1027,482,489,480,-484,434,435,-1806,434,1805,-1473,339,336,795,-965,166,1807,1806,-142,144,143,142,-141,150 ,149,-1745,1740,150,1744,-1743,376,1808,378,-378,378,1808,383,-381,1508,1507,1037,-1039,1769,1230,1229,-1290,1491 ,1586,1587,-1491,623,624,622,-622,1809,1810,1811,-1813,1813,1814,1811,-1811,1815,1816,1811,-1815,1817,1812,1811,-1817 ,1809,1812,1819,-1819,1817,1820,1819,-1813,1819,1820,3474,3473,-1819,1821,1822,140,-1807,1823,1822,1825,-1827,1821 ,1827,1825,-1823,1813,1810,1825,-1828,1809,1826,1825,-1811,140,1824,-149,1828,1829,-3422,1830,1831,1832,-1834,1834 ,1835,1832,-1832,1836,1837,1832,-1836,1838,1833,1832,-1838,1838,1837,1839,-1841,1836,1841,1839,-1838,1842,1843,1839 ,-1842,165,1840,1839,-1844,1844,1807,167,-1846,1846,1847,1848,-1850,1848,1847,3475,3474,-1821,1817,1849,1848,-1821 ,1850,1851,1852,-1854,1846,1849,1852,-1852,1817,1816,1852,-1850,1815,1853,1852,-1817,1854,1855,1856,-1858,1858,1859 ,1856,-1856,1834,1831,1856,-1860,1830,1857,1856,-1832,1861,1860,1854,-1858,1861,1857,1830,-1863,1863,1864,-1886,1866 ,1865,1867,-1869,1866,1868,125,-53,1870,1869,1871,-1873,1870,1872,1867,-1866,1874,1873,1867,-1873,1871,1874,-1873 ,1876,1875,1877,-1879,1876,1878,1879,-1881,1881,1877,1875,-1883,1881,1882,1883,-1885,1868,1867,1873,-1887,1868,1886 ,126,-126,1887,1888,1864,-1890,1890,1891,1892,-1894,1894,1895,1892,-1892,218,219,1892,-1896,220,1893,1892,-220,1888 ,1887,1896,-1898,1898,1899,1900,-1902,1902,1903,1900,-1900,1904,1905,1900,-1904,1906,1901,1900,-1906,1908,1907,1909 ,-1911,1908,1910,1911,-1913,1913,1871,1883,-1915,1912,1913,-1915,1875,1915,1916,-1883,1907,1908,1916,-1916,1912,1914 ,1916,-1909,1883,1882,1916,-1915,1917,1909,1907,-1919,1918,1907,-1920,1917,1918,1880,-1921,1920,1880,1921,-1923,1921 ,1864,1888,-1923,1917,1920,1898,-1902,1917,1901,1906,-1910,1898,1923,1924,-1900,1897,1925,1924,-1924,1926,1927,1924 ,-1926,1928,1929,1924,-1928,1902,1899,1924,-1930,1898,1920,1922,-1924,1922,1888,1897,-1924,1930,1931,1932,-1934,1902 ,1929,1932,-1932,1928,1934,1932,-1930,1935,1933,1932,-1935,260,1936,1937,-264,1938,1939,1937,-1937,1940,1941,1937 ,-1940,268,263,1937,-1942,1938,1936,1942,-1944,260,271,1942,-1937,272,1944,1942,-272,1945,1943,1942,-1945,1946,1947 ,1948,-1950,1950,1951,1948,-1948,281,282,1948,-1952,283,1949,1948,-283,1871,1913,1952,-1875,1912,1953,1952,-1914,1954 ,1955,1952,-1954,1873,1874,1952,-1956,1949,283,53,-1957,1949,1956,1957,-1947,1956,53,54,-1959,1956,1958,1954,-1958 ,1862,1959,1960,-1862,1961,1962,1960,-1960,1963,1964,1960,-1963,1860,1861,1960,-1965,1965,1966,1967,-1969,1906,1905 ,1967,-1967,1904,1969,1967,-1906,1970,1968,1967,-1970,1910,1909,1906,-1967,1910,1966,1965,-1912,1873,1955,1971,-1887 ,1954,1958,1971,-1956,54,55,1971,-1959,126,1886,1971,-56,1972,1885,1864,-1922,1972,1921,1880,-1880,1880,1918,1919 ,-1877,1907,1915,-1920,1875,1876,1919,-1916,1883,1871,1869,-1885,1973,1974,1975,-1977,1904,1903,1975,-1975,1902,1931 ,1975,-1904,1930,1976,1975,-1932,1970,1969,1977,-1979,1904,1974,1977,-1970,1973,1978,1977,-1975,1950,1979,1980,-1952 ,1945,1944,1980,-1980,272,313,1980,-1945,281,1951,1980,-314,1981,1957,1954,-1954,1981,1953,1912,-1912,1982,1946,1957 ,-1982,1982,1981,1911,-1966,1950,1947,1983,-1985,1946,1982,1983,-1948,1965,1968,1983,-1983,1970,1984,1983,-1969,1950 ,1984,1985,-1980,1970,1978,1985,-1985,1973,1986,1985,-1979,1945,1979,1985,-1987,1930,1987,1988,-1977,1938,1943,1988 ,-1988,1945,1986,1988,-1944,1973,1976,1988,-1987,1938,1987,1989,-1940,1930,1933,1989,-1988,1935,1990,1989,-1934,1940 ,1939,1989,-1991,1961,1959,1991,-1993,1862,1993,1991,-1960,1894,1891,1991,-1994,1890,1992,1991,-1892,1940,1994,1995 ,-1942,1890,1893,1995,-1995,220,329,1995,-1894,268,1941,1995,-330,1935,1996,1997,-1991,1961,1992,1997,-1997,1890,1994 ,1997,-1993,1940,1990,1997,-1995,1961,1996,1998,-1963,1935,1934,1998,-1997,1928,1999,1998,-1935,1963,1962,1998,-2000 ,1928,1927,2000,-2002,1926,2000,-1928,2003,1854,1860,-2003,2002,1860,1964,-2006,1993,1862,1830,-1834,1993,1833,1838 ,-1895,1895,1894,1838,-1841,1895,1840,165,-219,2006,2007,3472,-3472,1823,1826,2007,-2007,1809,1818,2007,-1827,2007 ,1818,3473,-3473,1824,1823,2006,-2009,2008,2006,3471,-3471,148,1824,2008,-344,343,2008,3470,-1794,2009,2012,2010,-2855 ,2011,2009,2854,-2857,2013,2016,2017,2242,-2193,2013,2014,2015,-2017,2018,2019,2032,-2034,2020,2018,-2034,2021,2019 ,2018,-2021,2022,2023,2024,-2026,2024,2023,-3351,2026,2027,2241,-3344,2027,2026,2029,-2031,2028,2013,2192,-2192,2014 ,2013,-2029,2023,2029,2014,-3351,2022,2030,2029,-2024,2031,2019,-2022,2017,2016,-2032,2015,2032,2031,-2017,2031,2032 ,-2020,2034,2035,2039,-2037,2035,2037,2038,-2040,2041,2040,2034,-2037,2041,2042,3480,-2041,2040,3480,2043,-3343,3480 ,2042,2044,-2048,2044,2045,2046,-2048,2043,3480,-2048,2038,2048,2049,-2051,2049,2051,-2085,2049,2048,-2052,2052,2049 ,2084,-2084,2050,2049,-2053,2054,2055,2056,-2054,2036,2039,2057,-2059,2036,2058,2059,-2042,2038,2050,2057,-2040,2057 ,2050,2052,-2794,2060,2058,2057,2793,-2793,2061,2056,2055,-2063,2063,2064,2085,-2087,2067,2065,-2067,2067,2069,2064 ,-2071,2074,2073,2072,-2076,2074,2075,2051,-2077,2077,2088,-2272,2078,2077,2271,-2271,2072,2079,2080,-2076,2081,2082 ,2080,-2080,2083,2084,2080,-2083,2051,2075,2080,-2085,2077,2087,2265,2264,-2089,2069,2068,2071,-2090,2064,2069,2089 ,-2086,2085,2089,2091,-2093,2089,2071,2090,-2092,2093,2094,2087,-2078,2070,2064,2063,-2096,2068,2066,2079,-2073,2065 ,2081,2079,-2067,2074,2076,2097,-2097,2073,2074,-2097,2096,2097,-3319,2093,2077,2098,-2102,2098,2099,2100,-2102,2102 ,2103,2104,2113,-3479,2105,2106,2104,-2104,2107,2108,2104,-2107,2104,2108,3264,-2114,2110,2109,2111,-2113,2110,2112 ,2130,-2133,2116,2114,3264,3265,-2129,2114,2116,2117,2118,-2116,2119,2120,2121,-2123,2121,2120,2109,2123,-2125,2125 ,2122,-2122,2125,2121,2124,-2127,2116,2128,2127,-3309,2127,2128,2137,-2130,2127,2129,2110,-2133,2129,2123,2109,-2111 ,3309,2132,2130,-2132,2133,2134,2120,-2120,2134,2111,2109,-2121,56,57,2135,-2137,2135,57,58,-2140,2130,2112,2135,-2140 ,2111,2136,2135,-2113,2137,2138,2123,-2130,3308,2127,2132,-3310,2131,2130,2139,-2141,59,2140,2139,-59,56,2136,2141 ,-61,2111,2134,2141,-2137,2133,2142,2141,-2135,61,60,2141,-2143,2126,2143,-2126,2126,2124,2123,2138,-2145,2145,2143 ,2126,-2145,2147,2146,3190,-3190,2148,2147,3189,-2170,62,2149,2150,-64,2148,2151,2150,-2150,2152,2153,2150,-2152,64 ,63,2150,-2154,2154,2155,2152,-2162,2157,65,3301,-3301,2156,2157,3300,-3300,2462,2460,2159,-2161,2159,2460,2461,-2159 ,2158,2162,2165,-2167,2162,2163,2164,-2166,2146,2147,2167,-2169,2148,2149,2167,-2148,62,66,2167,-2150,67,2168,2167 ,-67,2148,2169,2170,-2152,2170,2161,2152,-2152,68,64,2153,-2172,2153,2152,2155,-2172,69,3496,2172,2250,-2250,2172 ,2175,2683,-2251,2173,2174,2175,-2177,2175,2174,2682,-2684,71,2176,2175,-71,2174,2173,2178,2910,-2683,2178,2179,2180 ,-2911,2181,2182,2183,-2185,2183,2182,3282,-3284,116,73,2183,-3284,74,2184,2183,-74,2185,2186,3278,-3280,2186,2185 ,2198,-2197,2187,2186,2196,-2196,2186,2187,2244,-3279,2188,2189,2235,-2182,2190,2191,2192,-2194,2194,2195,2196,-2198 ,2199,2197,2196,-2199,2201,2238,2232,-2201,2203,2201,2200,-2203,2204,2202,2200,-2206,2207,2204,2205,-2207,2207,2206 ,-2209,2208,2209,-2208,2202,2204,2207,-2210,2210,2211,2212,-2214,2212,2214,2215,-2209,2212,2211,-2215,2210,2216,2217 ,-2219,2219,2220,2217,-2217,2025,2221,2217,-2221,2222,2218,2217,-2222,2223,2224,2220,-2220,2224,2022,2025,-2221,2191 ,2225,3352,-2029,2191,2190,2222,-2226,75,2226,2227,-77,2194,2197,2227,-2227,2199,2228,2227,-2198,77,76,2227,-2229 ,2229,2230,3283,-3283,2194,2226,2230,-2230,75,78,2230,-2227,2230,78,116,-3284,2206,2205,2231,-2214,2200,2232,2231 ,-2206,2219,2216,2231,-2233,2210,2213,2231,-2217,2233,2234,2244,-2244,2027,2030,2233,-2244,2022,2224,2233,-2031,2223 ,2234,2233,-2225,2182,3280,-3283,2182,2181,2235,3281,-3281,2201,2236,2237,-2239,2237,2236,3279,-3279,2234,2237,3278 ,-2245,2223,2238,2237,-2235,74,79,2239,-2185,2239,2188,2181,-2185,2238,2223,2219,-2233,2240,2241,2027,-2244,2187,2240 ,2243,-2245,2240,2187,2195,-2255,2241,2240,2254,3280,-3282,2192,2242,2189,-2194,2245,2246,-2248,2247,2246,2248,-2012 ,2249,2250,2251,-2253,2683,2685,2251,-2251,2253,2193,2189,-2189,2254,2229,3282,-3281,2194,2229,2254,-2196,2255,2256 ,2257,-2259,2259,2260,2257,-2257,2261,2262,2257,-2261,2263,2258,2257,-2263,2264,2265,2266,-2268,2085,2092,2268,-2087 ,2269,2270,-2272,2269,2271,2088,-3339,2273,2272,2274,-2276,2273,2275,2276,-2278,2291,2273,2277,-2293,2279,2278,2280 ,-2282,2279,2281,2282,-2284,2275,2274,2284,-2286,2275,2285,2286,-2277,2289,2288,2278,-2280,2289,2279,2283,-2291,2272 ,2273,2291,-3382,80,2293,2294,-82,2294,2293,2318,-2318,2295,2294,2317,-2314,82,81,2294,-2296,2299,2298,2296,-2298 ,2299,2300,2301,-2299,2302,2303,2314,-2288,2304,2302,2287,-2841,83,84,2302,-2305,85,2303,2302,-85,2118,2305,2306,-2308 ,2308,2309,2307,-2307,2290,2311,2312,-2314,2286,2314,2312,-2312,2312,2314,2303,-3261,2295,2313,2312,-3261,2316,2315 ,2102,3478,-2311,2288,2289,2317,-2319,2290,2313,2317,-2290,2052,2083,2319,-2794,2322,2321,2323,-2325,2322,2324,2081 ,-2066,2070,2095,2325,-2329,2325,2326,2327,-2329,2323,2329,2330,-2325,2320,2319,2330,-2330,2083,2082,2330,-2320,2081 ,2324,2330,-2083,2094,2093,2331,-2335,2331,2332,2333,-2335,2100,2335,2336,-2102,2337,2338,2336,-2336,2332,2331,2336 ,-2339,2093,2101,2336,-2332,2339,2340,2343,-2345,2340,2341,2342,-2344,2346,2347,2348,-2346,2349,2350,2353,-2355,2350 ,2351,2352,-2354,2420,2421,2356,-2356,2092,2403,2357,-2269,2357,2358,2359,-2361,2208,2361,2362,-2364,2364,2365,2362 ,-2362,2368,2363,2362,-2368,2369,2368,2367,-2371,2370,2367,2366,-2350,2372,2371,2379,-2379,2372,2378,2409,-2418,2373 ,2372,2417,-2880,2372,2373,2374,-2372,2376,2375,2398,-2400,2377,2376,2399,-2401,2383,2376,2377,-2385,2378,2379,2411 ,-2417,2381,2380,2382,-2384,2381,2383,2384,-2386,2386,2385,2384,-2388,2386,2387,2644,-2646,2369,2388,2390,-2369,2388 ,2389,2202,-2391,2389,2388,2391,-2393,2369,2393,2391,-2389,2394,2395,2391,-2394,2396,2392,2391,-2396,2208,2363,2397 ,-2210,2368,2390,2397,-2364,2202,2209,2397,-2391,2399,2398,2785,-2787,2790,2400,2399,-2787,2396,2395,2401,-2403,2394 ,2403,2401,-2396,2091,2401,2403,-2093,2386,2405,2406,-2386,3482,2351,2350,-3482,3481,2350,2349,-2367,2407,2355,2356 ,-2409,2409,2377,2400,-2418,2381,2385,2406,-3156,2381,3155,2882,-2381,2411,2379,2412,-2411,2369,2370,-2414,2413,2370 ,2349,-2355,2369,2413,2414,-2394,2393,2414,2358,-2395,2415,2354,2353,-2411,3495,2409,2378,-2417,2383,2382,2375,-2377 ,2879,2417,2400,-2791,2420,2419,2418,-2422,2418,2419,2437,-2437,2422,2423,2426,-2428,2423,2424,2425,-2427,2154,2428 ,2429,-2431,2190,2193,2431,-2435,2431,2432,2433,-2435,72,127,2435,-2178,2436,2437,2263,-2439,2439,2198,2185,-2444 ,3477,2440,2439,-2444,2442,2439,2440,-2442,2199,2198,2439,-2443,2443,2185,3279,-3182,2441,2444,2445,-2447,2447,2448 ,2445,-2445,86,87,2445,-2449,88,2446,2445,-88,2449,2450,2690,-2692,2451,2452,2450,-2450,2450,2452,2705,-2843,2690 ,2450,2842,-2814,2454,2455,2453,3394,-3394,2456,2454,3393,-3393,2457,2458,2454,-2457,2459,2455,2454,-2459,2680,2460 ,2462,-2493,2461,2460,2680,-2682,89,2463,2464,-91,2465,2466,2464,-2464,2131,2140,2464,-2467,59,90,2464,-2141,2424 ,2003,2002,-2468,2468,2469,2423,-2423,2469,2003,2424,-2424,2471,2461,2681,-3294,2472,2471,3293,-3295,1884,1869,2473 ,-2475,2425,2424,2467,-2476,2476,2477,2485,-2485,2478,2476,2484,-2488,2479,2480,2476,-2479,2481,2477,2476,-2481,2482 ,2483,2484,-2486,2486,2487,2484,-2484,2451,2488,2489,-2453,2489,2488,3375,-3375,2841,2704,2489,-3375,2452,2489,2704 ,-2706,2490,2491,2678,-2680,2492,2490,2679,-2671,2490,2492,2462,-2817,2491,2490,2816,-2818,2494,2433,2495,-2494,2498 ,2497,3377,-3230,2499,2500,2503,-2505,2500,2501,2502,-2504,2214,2505,2507,-2365,2505,2494,2506,-2508,2509,2508,3322 ,-2753,2510,2509,2752,-3322,2511,2512,2742,-2780,2513,2514,2511,2779,-2781,2470,2511,2515,-2561,2511,2514,-2516,2470 ,2512,-2512,2517,2518,2516,2900,-2902,2519,2520,2517,2901,-2905,2521,2518,2517,-2521,2261,2522,2525,-2527,2522,2523 ,2524,-2526,2527,2528,2529,-2531,2524,2531,2529,-2529,2481,2480,2529,-2532,2479,2530,2529,-2481,2533,2534,2802,-2256 ,2534,2535,2536,-2803,2537,2538,2458,-2458,2538,2539,2459,-2459,2428,2541,2542,-2541,2544,3488,2407,-2662,2540,2542 ,2544,-2546,2389,2547,2546,2203,-2203,2548,2549,2552,-2554,2549,2550,2551,-2553,2554,2555,2556,-2558,2619,2618,2556 ,2555,-2622,2559,2558,2465,-2464,2559,2463,89,-92,2470,2560,-2623,2473,1869,-2562,2466,2465,2562,-2564,2466,2563,3309 ,-2132,2164,2163,2564,-2567,2564,2565,2543,-2567,2567,2568,2569,-2571,2569,2433,-2495,2569,2568,-2434,2494,2505,-2570 ,2214,2570,2569,-2506,2482,2571,2572,-2574,2574,2575,2572,-2572,2345,2576,2572,-2576,2577,2573,2572,-2577,2579,2578 ,2580,-2582,2579,2581,-2583,2173,3329,3333,-2179,2178,3333,3330,-2180,2584,2817,2816,-2584,2583,2816,2462,-2161,2585 ,2586,2587,-2589,2586,2554,2557,-2588,2574,2571,2589,-2591,2482,2485,2589,-2572,2589,2485,2477,-2872,2590,2589,2871 ,-2873,2591,2456,3392,-3392,2592,2591,3374,-3376,2594,2593,2661,-2676,2718,2596,2595,-2739,2508,2595,2596,-2808,2597 ,2598,3331,-3363,3109,2599,1870,-1866,2601,2600,2599,2553,-2756,2599,2600,2561,1869,-1871,2474,2473,2602,-2604,2602 ,2459,2539,-2604,2494,2493,2580,-2507,3328,3364,3363,-3330,3328,120,121,-3365,2607,2604,2605,-2607,2497,2608,2638 ,-3378,2608,2497,2496,2750,-2785,2610,2609,3367,-3367,2474,2613,-2613,2614,2615,2612,-2614,2616,2611,2612,-2616,2617 ,2618,2619,-2621,2622,2620,2619,-2622,2623,2624,2625,-2627,2625,2624,2627,-2759,2628,2625,2758,-2764,2629,2626,2625 ,-2629,2630,2612,2611,1877,-1882,2630,1884,-2475,2630,1881,-1885,2474,2612,-2631,2739,2595,2508,-2510,2604,2607,2631 ,-2633,2631,2536,2535,-2633,2633,2634,2635,-2637,2637,2638,2635,-2635,2635,2638,2608,-2799,2639,2636,2635,2798,-2800 ,2475,2467,2640,-2644,2640,2641,2642,-2644,2644,2352,2351,-2646,2646,2647,2648,-2650,2647,1889,1863,-2649,2646,2649 ,-2651,2652,2651,2653,-2655,2652,2654,2655,-2657,2038,2037,-2658,3365,3363,2658,3369,-3369,3365,3368,3367,-2610,2822 ,2660,2659,-2834,2659,2660,92,-94,2662,2663,2582,-3383,2662,3382,2316,-2311,2309,2662,2310,-2308,2308,2663,2662,-2310 ,2432,2664,2665,-2496,2512,2666,2743,-2743,2470,2667,2666,-2513,2668,2669,2666,-2668,2666,2669,2745,-2744,2180,2179 ,2598,-2654,2555,2554,2499,-2770,2621,2555,2769,-2734,2606,2670,2622,-2561,2586,2585,2501,-2501,2554,2586,2500,-2500 ,2671,2672,2919,-2958,2673,2674,2671,2957,-2960,2347,2672,2671,-2675,2407,2408,2675,-2662,2676,2677,2839,-2839,2585 ,2676,2838,-2502,2622,2670,2679,-2621,2679,2678,2617,-2621,2605,2670,-2607,2604,2681,2680,-2606,2683,2682,2684,-2686 ,2579,2686,2687,-2579,2663,2686,2579,-2583,2686,2663,2308,2877,-3308,2687,2686,3307,-2916,94,95,2689,-2589,95,96,2688 ,-2690,2407,3488,3489,-2356,2690,2813,3314,-3316,2691,2690,3315,-2854,2692,2693,2694,-2696,2697,2696,2694,-2694,2699 ,2700,-2702,2346,2695,2694,-2700,3333,3329,3363,-3366,2702,2596,2718,-2717,2703,2702,2716,-2718,2702,2703,2808,-2807 ,2706,3395,-3374,2705,2704,2707,-3403,1878,2708,-1880,2840,2833,2659,-2305,2659,93,83,-2305,2495,2665,2284,-2275,2709 ,2710,3184,-3184,2563,2562,2713,-2715,1854,2003,2469,-1856,2469,2468,1858,-1856,3376,2715,3373,-3396,2551,2715,3376 ,-2757,2716,2718,3164,-3166,2719,2717,2716,3165,-3167,2493,2495,2274,-2273,2176,3328,3329,-2174,71,120,3328,-2177 ,2708,2720,2721,-1880,2611,2616,2720,-2709,91,68,2171,-2560,2171,2155,2558,-2560,2722,2723,2724,-2726,2486,2726,2724 ,-2724,2727,2728,-3477,2729,2725,2724,-2729,3490,2420,2355,-3490,2425,2475,2629,-2731,2731,2732,2649,-2649,1863,1885 ,2731,-2649,2733,2427,-2669,2427,2733,2769,-2769,2735,2734,2738,-2737,2046,2735,2736,-2738,2736,2738,2595,-2740,2736 ,2739,3195,-2738,2817,2584,97,-108,2714,2713,2740,-2118,2741,2742,2743,-2745,2746,2744,2743,-2746,2117,2740,2747,-2119 ,2005,2004,2641,-2641,2005,2640,2467,-2003,2748,2750,-2497,2753,2751,-2749,2551,2756,2754,-2553,2754,2756,3392,-3394 ,2755,2754,3393,-3395,2208,2215,-2362,2361,2215,2214,-2365,2757,2758,2627,-2760,2760,2761,2758,-2758,2762,2763,2758 ,-2762,2429,2428,2540,-2765,98,99,2618,-2618,2760,2765,2766,-2762,2481,2531,2766,-2766,2524,2767,2766,-2532,2762,2761 ,2766,-2768,2585,2588,2689,-2677,2689,2688,2677,-2677,2180,2653,-2652,2499,2504,2768,-2770,1850,2770,2773,-2775,2770 ,2771,2772,-2774,2775,2776,2763,-2763,2628,2763,2776,-2888,2263,2437,2777,-2259,2777,2533,2255,-2259,2562,2465,2430 ,-2430,2741,2778,2779,-2743,2259,2780,2779,-2779,2607,2606,2560,-2516,2781,2374,2722,-2726,2781,2725,2729,-2783,2750 ,2749,2783,-2785,2786,2785,2787,-2789,2786,2788,2789,-2791,2791,3364,121,-101,2791,2658,3363,-3365,2633,2794,2795 ,-2635,2616,2615,2795,-2795,2614,2796,2795,-2616,2637,2634,2795,-2797,2701,2347,2346,-2700,2701,2672,-2348,2701,2700 ,-2798,2672,2701,2797,-2920,2798,2608,2784,-2811,2519,2799,2798,2810,-2521,2580,2493,2272,-2582,3164,2718,2738,-2735 ,2259,2778,2800,-2261,2741,2801,2800,-2779,2523,2522,2800,-2802,2261,2260,2800,-2523,2255,2802,2803,-2257,2536,2804 ,2803,-2803,2513,2780,2803,-2805,2259,2256,2803,-2781,2193,2253,2805,-2432,2805,2664,2432,-2432,2643,2626,2629,-2476 ,2643,2642,2623,-2627,2702,2806,2807,-2597,2747,2740,-2546,2544,2661,-2594,2781,2782,2821,-3407,2781,3406,2371,-2375 ,2806,2808,3325,-3325,2807,2806,3324,-3324,2199,2442,2809,-2229,2809,2442,2441,-2447,88,101,2809,-2447,77,2228,2809 ,-102,2783,2811,2810,-2785,2521,2520,2810,-2812,2843,2812,2813,-2843,2813,2812,2684,2911,-3315,2814,103,92,-2661,2815 ,2814,2660,-2823,3322,2508,2807,-3324,2818,2819,3387,-3327,2819,2818,2898,-2898,2821,2820,2360,-3406,2820,2821,2782 ,-3186,2664,2805,2815,-2823,2253,2823,2815,-2806,102,2814,2815,-2824,2824,2825,2827,-2829,2825,2245,2826,-2828,2829 ,2830,2503,-2503,2830,2831,2504,-2504,2543,2542,2541,-2833,2465,2558,-2431,2822,2833,2665,-2665,2547,2389,-2393,2834 ,2547,2392,-2397,2422,2427,2768,-2836,2768,2504,2831,-2836,2836,2837,2838,-2840,2837,2502,2501,-2839,2840,2284,2665 ,-2834,2614,2613,2603,-2540,2474,2603,-2614,2841,3374,2591,-3392,2429,2764,2713,-2563,2550,2549,105,-3502,2549,2548 ,104,-106,2468,2422,2835,-2845,2835,2831,2772,-2845,2479,2845,2846,-2531,2789,2788,2846,-2846,2787,2847,2846,-2789 ,2527,2530,2846,-2848,2727,3356,2848,-3355,2848,2849,-2851,2849,2848,3356,-3358,2848,2850,3233,-3355,2614,2539,2538 ,-2797,2538,2537,2637,-2797,2852,2851,3484,-2044,2853,2851,2852,-3228,3358,2854,2010,-3242,2855,2856,2854,-3359,2486 ,2483,2857,-2727,2482,2858,2857,-2484,2859,2860,2857,-2859,2545,2544,2593,-2748,2861,2862,2863,-2865,2865,2866,2863 ,-2863,2863,2866,2867,-2869,2864,2863,2868,-2871,2869,2870,2868,-2868,2481,2765,2871,-2478,2760,2872,2871,-2766,2874 ,2478,2487,-2889,2875,2874,2888,-2890,2789,2845,2874,-2876,2479,2478,2874,-2846,2305,2594,2876,-2307,2876,2594,2675 ,-2882,2308,2306,2876,-2878,2438,2263,2262,-2879,2262,2261,2526,-2879,1858,2468,2844,-2881,2844,2772,2771,-2881,2876 ,2881,2882,-2878,2746,2883,2884,-2745,2775,2885,2884,-2884,2523,2801,2884,-2886,2741,2744,2884,-2802,2435,2886,2706 ,-2178,2435,2249,2252,-2887,2730,2629,2628,-2888,98,2617,2678,-107,2486,2723,2888,-2488,2722,2889,2888,-2724,114,106 ,2678,-2492,114,2491,2817,-108,2774,2773,2830,-2830,2773,2772,2831,-2831,94,2588,2587,-110,2587,2557,108,-110,2852 ,2043,2047,2046,-2738,2524,2523,2885,-2768,2885,2775,2762,-2768,108,2557,2556,-111,2556,2618,99,-111,2890,2891,2759 ,-2893,2760,2757,2759,-2892,2627,2892,-2760,2893,2894,2895,-2897,2894,2342,2341,-2896,2897,2898,3236,-3238,2859,2899 ,2827,-2827,2899,2577,2828,-2828,2646,2902,2901,-2901,2903,2904,2901,-2903,2824,2905,2647,-2647,2905,2348,1889,-2648 ,2348,2905,-2907,2906,2905,2824,-2829,2245,2825,2900,-2517,2825,2824,2646,-2901,2909,2907,2339,-2345,2908,2907,-2910 ,2910,2180,2651,-2912,2910,2911,2684,-2683,2746,2745,2912,-2884,2912,2745,2669,-2914,2887,2776,2912,-2914,2775,2883 ,2912,-2777,2668,2914,2913,-2670,2730,2887,2913,-2915,2915,2406,-2406,3483,2405,2386,-2646,2687,2915,2405,-3484,2916 ,2917,2797,-2701,2918,2919,2797,-2918,2864,2870,2920,2921,-3017,2869,2920,-2871,2922,2923,2926,-2928,2923,2924,2925 ,-2927,2928,2929,2932,-2934,2929,2930,2931,-2933,2939,2934,-2939,2934,2936,-2938,2937,2940,2938,-2935,2938,2940,3069 ,-3069,2939,2938,3068,-3072,2941,2942,-2944,2943,2942,2944,-2946,2946,2869,-2948,2946,2948,-2870,2946,2950,-2949,2623 ,2951,2952,-2625,2953,2954,2952,-2952,2937,2955,2952,-2955,2627,2624,2952,-2956,2937,2936,-2956,2935,2949,-2937,2890 ,2892,2936,-2950,2627,2955,2936,-2893,2918,2956,2957,-2920,2958,2959,2957,-2957,2959,2958,2960,-2962,2959,2961,2962 ,-2674,2339,2907,2963,-2965,2908,2965,2963,-2908,2966,2967,2963,-2966,2968,2964,2963,-2968,2969,2970,2971,-2973,2341 ,2340,2971,-2971,2339,2964,2971,-2341,2968,2972,2971,-2965,2973,2974,2975,-2977,2977,2978,2975,-2975,2896,2979,2975 ,-2979,2980,2976,2975,-2980,2978,3465,2893,-2897,2937,2954,2981,-2941,2953,2982,2981,-2955,2981,2982,3180,-3180,2940 ,2981,3179,-3070,2642,2982,-2954,2642,2983,3180,-2983,2918,2917,2984,-2986,2916,2986,2984,-2918,2987,2988,2984,-2987 ,2989,2985,2984,-2989,2958,2956,2990,-2992,2918,2985,2990,-2957,2989,2992,2990,-2986,2993,2991,2990,-2993,2995,2994 ,2996,-2998,2995,2997,2916,-2701,2916,2997,2998,-2987,2996,2999,2998,-2998,3000,3001,2998,-3000,2987,2986,2998,-3002 ,3002,2994,-3004,3002,3003,3004,-3006,3002,3005,3006,-3008,3002,3007,2996,-2995,3006,3008,3009,-3008,3010,3011,3009 ,-3009,3000,2999,3009,-3012,2996,3007,3009,-3000,3003,3012,3013,-3015,3015,3016,3013,-3013,3013,3016,2921,-3021,3014 ,3013,3020,-3024,3017,3014,3023,-3192,3017,3191,3090,3095,-3095,3005,3004,3017,3094,-3097,3003,3014,3017,-3005,3018 ,3019,3008,-3007,3019,2931,3010,-3009,2920,3021,3020,-2922,3022,3023,3020,-3022,2920,2869,2948,-3022,2948,2950,3022 ,-3022,3024,3025,3026,-3028,3028,3029,3026,-3026,2969,2972,3026,-3030,2968,3027,3026,-2973,3030,3031,3032,-3034,3024 ,3027,3032,-3032,2968,2967,3032,-3028,2966,3033,3032,-2968,3035,3034,3024,-3032,3035,3031,3030,-3037,3024,3034,3037 ,-3026,3037,3038,3028,-3026,2925,2924,3039,-3043,3040,3041,3042,-3040,3040,3039,3035,-3037,3039,2924,3034,-3036,3043 ,3044,3047,-2928,3044,3045,3046,-3048,3042,3048,3049,-2926,3041,3048,-3043,3045,3044,3019,-3019,3044,3043,2931,-3020 ,2928,2933,2925,-3050,3050,2944,-3053,3051,3055,2930,-2930,2928,3053,3051,-2930,3011,3010,2930,-3056,3011,3055,3054 ,-3001,3001,3000,3054,-3057,3001,3056,2941,-2988,2941,3056,3052,-2943,3054,3050,3052,-3057,2944,2942,-3053,3058,3057 ,2989,-2989,3058,2988,2987,-2942,3060,3059,2993,-2993,3060,2992,2989,-3058,3062,2993,3059,-3062,2960,3063,3064,-3066 ,3062,3066,3064,-3064,3030,3033,3064,-3067,2966,3065,3064,-3034,3063,2960,2958,-2992,3063,2991,2993,-3063,2973,3067 ,3068,-3070,3070,3071,3068,-3068,3070,3067,3072,-3074,2973,2976,3072,-3068,2980,3074,3072,-2977,3075,3073,3072,-3075 ,3070,3073,3077,-3079,3073,3075,3076,-3078,3089,3080,3079,-3089,3079,2939,3071,-3089,3079,2935,-2940,2943,2945,3085 ,3105,-3082,3058,2941,2943,3081,-3058,2945,3082,3083,-3086,3082,3049,3048,-3084,3041,3084,3083,-3049,3059,3085,3083 ,-3085,3046,3086,3077,-3077,3086,3087,3078,-3078,3088,3078,3087,-3090,3082,2945,2944,-3054,2928,3049,3082,-3054,3022 ,2950,3080,-3091,3090,3080,3089,-3096,3045,3018,3091,-3094,3092,3093,-3092,3092,3091,3094,-3096,3018,3096,3094,-3092 ,3047,3046,3076,-3098,3047,3097,2922,-2928,3034,2924,2923,-3038,2923,2922,3038,-3038,3098,3038,2922,-3098,3076,3098 ,-3098,3028,3038,3098,-3100,3098,3076,3075,-3100,2969,3029,3100,-3102,3028,3099,3100,-3030,3075,3074,3100,-3100,2980 ,3101,3100,-3075,2980,2979,3102,-3102,2896,2895,3102,-2980,2341,2970,3102,-2896,2969,3101,3102,-2971,2697,2693,2862 ,-2862,2693,2692,2865,-2863,2864,3016,3015,-2862,3015,3012,3103,-2698,3012,3003,2994,-3104,3061,3059,3084,-3105,3057 ,3081,3105,-3061,3059,3060,3105,-3086,3046,3045,3093,-3087,3093,3092,3087,-3087,3089,3087,3092,-3096,3043,2927,2926 ,-3107,2926,2925,2933,-3107,2951,2623,-2643,2951,2642,-2954,2574,2590,3108,-3108,3108,2590,2872,-2874,2994,2995,2698 ,-3104,2700,2696,2698,-2996,52,111,3109,-1867,111,104,2548,-3110,2930,3010,-2932,2931,3043,3106,-2933,2933,2932,-3107 ,3005,3096,-3007,3006,3096,-3019,2574,2692,2695,-2576,2692,3107,-3112,2867,2866,3110,-3113,2865,3111,3110,-2867,2890 ,2947,2873,-2892,2947,2869,2867,-3113,2947,3112,3110,3108,-2874,2692,3111,-2866,3113,2280,2278,-3115,3113,3114,3115 ,-3117,3118,3117,3115,-3115,3118,3114,2278,-2289,112,3119,3120,-114,3120,3119,3125,-3127,2318,2293,3120,-3127,80,113 ,3120,-2294,3121,2297,2296,-3123,3121,3122,3123,-3125,3117,3118,3126,-3126,2288,2318,3126,-3119,7,12,2119,-2123,7 ,2122,2125,-9,2133,2119,12,-11,3127,3128,-3130,3130,3127,3129,-3132,2107,3132,3129,-3129,3129,3132,-3132,2133,10,11 ,-2143,11,0,61,-2143,9,8,2125,-2144,9,2143,2145,-35,3133,3134,3135,-3137,2105,3137,3135,-3135,3138,3136,3135,-3138 ,3139,3140,3141,-3143,3142,3141,-3132,3143,3144,3145,-3147,3133,3147,3145,-3145,3148,3149,3145,-3148,3150,3146,3145 ,-3150,3141,3140,3151,-3153,3139,3153,3151,-3141,3154,3152,3151,-3154,2881,2675,2408,-3157,2881,3156,2380,-2883,3156 ,2408,2356,-3158,3156,3157,2382,-2381,3157,2356,2421,-3159,3157,3158,2375,-2383,3158,2421,2418,-3160,2398,2375,3158 ,-3160,3159,2418,2436,-3162,2398,3159,3161,-2786,3160,2787,2785,-3162,3160,3161,2436,-2439,2438,2878,3162,-3161,2526 ,3163,3162,-2879,2527,2847,3162,-3164,2787,3160,3162,-2848,2525,2528,2527,-3164,2524,2528,-2526,2734,2735,3167,-3169 ,2735,2046,2045,-3168,3164,2734,3168,-3170,3165,3164,3169,-3171,3165,3170,3171,-3167,3172,3166,3171,-3174,3172,3173 ,2062,-2056,3174,2597,3362,-3404,3175,3174,3403,-3405,3174,3175,2655,-2655,3176,3036,3030,-3067,3176,3066,3062,-3062 ,3040,3036,3176,-3105,3061,3104,-3177,2908,3177,3178,-2966,2962,2961,3178,-3178,2960,3065,3178,-2962,2966,2965,3178 ,-3066,3071,3070,3078,-3089,2977,2974,3179,-3181,2973,3069,3179,-2975,2348,2347,1887,-1890,2697,2861,-3016,2346,2345 ,2575,-2696,3182,3181,3316,2546,-2548,2443,3181,3182,-3478,2447,2444,3183,-3185,2441,2440,3183,-2445,2820,2266,-2361 ,3186,3187,-3189,2012,2009,3500,-3195,2009,2011,2248,-3501,2169,3189,3296,-3296,3189,3190,3297,-3297,2532,2565,2564 ,-3303,2564,2163,2472,-3303,2472,2163,2162,-2472,2162,2158,2461,-2472,2170,2169,3295,-2833,2541,2161,2170,-2833,2161 ,2541,2428,-2155,3022,3090,3191,-3024,3192,2010,2012,-3194,3192,3193,2053,-2057,3193,2012,3194,-3239,2656,2851,2853 ,-3316,2065,2067,3196,-2323,2070,2328,3196,-2068,2327,3197,3196,-2329,2321,2322,3196,-3198,2100,2099,3198,-2336,3198 ,3199,2337,-2336,3200,3201,-3203,3202,3203,-3201,3199,3198,3202,-3202,2099,3204,3202,-3199,2061,3203,3202,-3205,3200 ,3203,-3206,3206,3200,-3206,3205,2061,2062,-3208,3205,3203,-2062,3205,3207,-3207,2062,3173,3208,-3208,3171,3209,3208 ,-3174,3210,3211,3208,-3210,3206,3207,3208,-3212,3171,3170,3212,-3210,3169,3213,3212,-3171,3214,3215,3212,-3214,3210 ,3209,3212,-3216,3213,3169,3168,-3217,3213,3216,3217,-3215,3168,3167,3218,-3217,2045,3219,3218,-3168,3220,3221,3218 ,-3220,3217,3216,3218,-3222,3220,3219,3222,-3224,2045,2044,3222,-3220,2042,3224,3222,-2045,3225,3223,3222,-3225,3225 ,3224,2059,-3227,2042,2041,2059,-3225,2060,3226,2059,-2059,3227,2852,2737,-3196,2510,3228,3227,-3196,3228,2691,2853 ,-3228,2449,2691,3228,-3373,2498,3229,2592,-3376,2457,2592,-3230,2055,2054,3230,-3173,3230,2719,3166,-3173,3338,2088 ,2264,3188,3187,-3336,3231,3232,3234,-3236,3232,3233,2850,-3235,2719,3237,-3237,3193,3238,2054,-2054,3239,3240,3192 ,-2057,3240,3241,2010,-3193,3242,3239,-2057,3242,2056,-2062,3243,3244,-2100,2061,3204,2099,-3245,3239,3242,3245,-3247 ,2061,3244,3245,-3243,3243,3246,3245,-3245,3247,3248,3240,-3240,3248,3249,3241,-3241,2105,2103,3250,-3252,2102,3252 ,3250,-2104,2300,2299,3250,-3253,2297,3251,-3251,3250,2299,-2298,3124,3253,3254,-3122,3255,3256,3254,-3254,3138,3257 ,3254,-3257,2297,3121,3254,-3258,3255,3258,3259,-3257,3259,3147,3133,-3137,3138,3256,3259,-3137,2118,2307,2310,-2116 ,85,115,3260,-2304,82,2295,3260,-116,2284,2840,2287,-2286,2311,2290,2283,-3262,2311,3261,2276,-2287,3261,2283,2282 ,-3263,3261,3262,2277,-2277,3262,2282,2301,-3264,3262,3263,2292,-2278,3265,3264,2108,-3267,2137,2128,3265,-3267,3479 ,3267,3266,-2109,2138,2137,3266,-3268,3479,3128,3268,-3268,3127,3269,3268,-3129,2145,2144,3268,-3270,2138,3267,3268 ,-2145,3130,3131,3141,-3271,3127,39,-3270,3131,3132,3271,-3143,2107,3272,3271,-3133,3139,3142,3271,-3273,2105,3134 ,3273,-3275,3273,3133,3275,-3140,3273,3134,-3134,3139,3274,-3274,2107,2106,3276,-3273,2105,3274,3276,-2107,3139,3272 ,3276,-3275,3269,39,34,-2146,2300,3252,-3278,3277,3252,2102,-2316,2764,2540,-2546,2764,2545,2740,-2714,3181,3279,2236 ,-3317,3190,3284,3298,-3298,3284,2156,3299,-3299,2158,2166,3285,-2160,3285,3286,2160,-2160,2160,3286,3287,-2584,3287 ,3288,2584,-2584,3284,3190,2146,-3291,2156,3284,-3291,2146,2168,3289,-3291,67,117,3289,-2169,65,2157,3289,-118,2156 ,3290,3289,-2158,97,2584,3288,-119,2533,2777,3291,-3293,3291,2777,2437,-2420,3490,3291,2419,-2421,2604,2632,3293,-2682 ,2535,3294,3293,-2633,2832,2566,-2544,2164,2566,2832,-3296,2166,2165,3296,-3298,2164,3295,3296,-2166,3286,3285,3298 ,-3300,2166,3297,3298,-3286,3288,3287,3300,-3302,3286,3299,3300,-3288,118,3288,3301,-120,65,119,-3302,3302,2472,3294 ,-3304,3292,2532,3302,-3304,2535,2534,3303,-3295,2533,3292,3303,-2535,2879,2790,2789,-2876,2373,2879,2875,-2890,2373 ,2889,2722,-2375,3263,2301,2300,-3278,3263,3277,2315,-2293,2291,2292,2315,-2317,2291,2316,3382,-3382,3304,2506,2580 ,-2579,2823,2253,2188,-2240,2823,2239,79,-103,2495,2433,-2433,2567,3305,3306,-2569,2190,2434,3306,-3306,2433,2568 ,3306,-2435,3307,2877,2882,-3156,2406,2915,3307,-3156,2593,2305,2118,-2748,2116,3308,2714,-2118,3308,3309,2563,-2715 ,2298,2301,2282,-2282,2298,2281,2280,-2297,3122,2296,2280,-3114,3122,3113,3116,-3124,2297,3257,3310,-3252,3138,3137 ,3310,-3258,2105,3251,3310,-3138,3133,3144,3311,-3276,3143,3312,3311,-3145,3154,3153,3311,-3313,3139,3275,3311,-3154 ,2043,3485,-3343,2426,2425,2730,-2915,2426,2914,2668,-2428,2536,2631,3313,-2805,2631,2607,2515,-3314,3313,2514,2513 ,-2805,2651,2652,3314,-2912,3314,2652,2656,-3316,2236,2201,2203,-3317,2396,2712,-2835,2712,2711,-2835,3330,2609,2610 ,3317,-3332,2598,2179,3330,-3332,2546,3316,-2204,2073,2096,3318,2090,-2072,3319,3320,2402,-2405,3320,2712,2396,-2403 ,2753,3321,2752,-2752,3322,3323,2783,-2750,2783,3323,3324,-2812,2521,2811,3324,-3326,2521,3325,3326,-3328,2818,3326 ,3325,-2809,3332,2657,-2077,2038,2657,3332,-2049,3332,2076,-2052,2051,2048,-3333,3334,3235,3249,-3249,3334,3248,3247 ,-2271,3231,3335,3336,-3233,3187,3337,3336,-3336,3233,3232,3336,-3338,3339,2269,3338,-3232,3338,3335,-3232,2270,2269 ,3339,-3335,3339,3231,3235,-3335,3340,2270,3239,-3247,2270,3340,-2079,3243,3341,3340,-3247,3340,3341,-2079,2270,3247 ,-3240,2077,2078,3341,-2099,3341,3243,2099,-2099,3188,2264,-2268,3186,3188,2267,-3186,3186,3185,2782,-2730,2247,2011 ,2856,-3362,2245,2247,3361,-2827,2597,2653,-2599,3175,3404,3342,-3486,3343,2241,3281,-3345,2020,2033,3343,-3345,2235 ,3345,3344,-3282,2021,2020,-3345,3344,3345,-2022,2031,2021,3346,-2018,2189,2242,2017,-3347,2567,2570,3347,-3349,2214 ,2211,3347,-2571,2210,2218,3347,-2212,2222,3348,3347,-2219,2222,2221,3349,-2226,2025,2024,3349,-2222,3349,2024,3350 ,-3352,2225,3349,3351,-3353,2222,2190,3305,-3349,2567,3348,-3306,2032,2015,2026,3343,-2034,2015,2014,2029,-2027,2014 ,3352,3351,-3351,2014,2028,-3353,3346,2021,-3346,3345,2235,2189,-3347,3233,3337,3353,-3355,3187,3186,3353,-3338,2729 ,2728,3353,-3187,2727,3354,3353,-2729,3234,2850,2849,-3356,3234,3355,3249,-3236,3356,2727,2860,-2860,2859,3357,-3357 ,3359,2855,2849,-3358,2859,3359,-3358,3241,3249,3355,-3359,3355,2849,2855,-3359,2828,2577,2576,-2907,2576,2345,2348 ,-2907,2577,2899,3360,-2574,2859,2858,3360,-2900,2482,2573,3360,-2859,2855,3359,3361,-2857,3359,2859,2826,-3362,3331 ,3317,2037,-3363,2037,3317,-2658,2657,3317,2610,2097,-2077,3333,3365,2609,-3331,3184,2710,3320,3319,-3370,2712,3320 ,-2711,2791,100,86,-2449,2791,2448,2447,-2659,3366,3367,3319,-2405,3319,3367,3368,-3370,3369,2658,2447,-3185,2610 ,3366,3318,-2098,3366,2404,2090,-3319,2091,2090,2404,2402,-2402,2488,3371,2498,-3376,2488,2451,3370,-3372,2753,2748 ,3371,-3371,3370,2451,2449,-3373,2706,3373,-2178,2841,3391,3376,-3396,2756,3376,3391,-3393,2638,2637,2537,-3378,3377 ,2537,2457,-3230,2473,2561,3379,-2603,2453,2455,-3380,2453,3379,2600,-2602,2459,2602,3379,-2456,3228,2510,3321,-3373 ,3321,2753,3370,-3373,3483,2645,2351,-3483,2365,2364,2507,-3381,2507,2506,3304,-3381,3381,3382,2582,-2582,2054,3238 ,3383,-3231,3383,3238,3194,-3385,2897,3237,3383,-3385,2719,3230,3383,-3238,3385,3500,2248,3388,-3387,3384,3385,2819 ,-2898,2819,3385,3386,-3388,3389,3387,3386,-3389,2248,2246,3390,-3389,3390,2245,-2517,3390,2246,-2246,3390,2516,-3408 ,3389,3388,-3391,3389,3390,-3408,2719,3236,-2718,2703,2717,3236,-2899,2898,2818,2808,-2704,2553,2552,2754,-2756,2551 ,2550,3378,-2716,3373,2715,3378,-3506,2755,3394,2453,-2602,2650,2649,2732,-3397,1879,2721,3397,-1973,2720,3398,3397 ,-2722,2732,2731,3397,-3399,1885,1972,3397,-2732,3396,2732,3398,-3400,2720,3399,-3399,3400,3396,2633,-2637,2639,3400 ,-2637,3400,2639,2903,-3402,2646,2650,3401,-2903,2903,2902,-3402,2720,2616,2794,-3400,3399,2794,2633,-3397,2707,2706 ,2886,-3403,2251,2685,2812,-2844,2684,2812,-2686,2886,2252,-3403,2904,2903,2639,-2800,2519,2904,-2800,2037,2035,3403 ,-3363,2034,3404,3403,-2036,2653,2597,3174,-2655,3485,2043,-3485,2414,2413,2354,-2416,2414,2415,2359,-2359,2403,2394 ,2358,-2358,2266,2268,2357,-2361,2086,2268,2266,-2266,2063,2086,2265,-2088,2095,2063,2087,-2095,2325,2095,2094,-2335 ,2325,2334,2333,-2327,2359,3405,-2361,2379,2371,3406,-2413,3406,2821,3405,-2413,2518,2521,3327,-3408,2516,2518,-3408 ,3387,3389,3327,-3327,3327,3389,-3408,2733,2668,2667,-2471,2760,2891,2873,-2873,3408,3409,3410,-3412,3409,2774,2829 ,-3411,3410,2829,2502,-2838,3412,3413,-3415,122,3412,3414,-124,1846,1851,3409,-3409,3409,1851,1850,-2775,3412,3416 ,-3416,3418,3417,3468,-3468,3418,3411,3419,-3418,2836,3420,-3412,3420,3415,3421,-3420,3421,3415,3416,-1829,3417,3419 ,3421,-1830,3469,3468,3417,-1830,3414,3413,2839,-2678,2839,3413,3420,-2837,2836,3411,3410,-2838,3416,3412,122,-125 ,3415,3420,3413,-3413,3419,3411,-3421,3408,3411,3418,-3423,3422,3418,-3468,1847,1846,3408,-3423,1847,3422,3467,-3476 ,123,3414,2677,-2689,123,2688,-97,1834,3423,3424,-1836,3425,3426,3424,-3424,3427,3428,3424,-3427,1836,1835,3424,-3429 ,1836,3428,3429,-1842,3427,3430,3429,-3429,1845,3431,3429,-3431,1842,1841,3429,-3432,1755,1756,1843,-1843,165,1843 ,-1757,1858,2880,3432,-1860,2771,3433,3432,-2881,3425,3423,3432,-3434,1834,1859,3432,-3424,1845,167,1759,-3432,1759 ,1755,1842,-3432,3425,3434,3435,-3427,1815,1814,3435,-3435,1813,3436,3435,-1815,3427,3426,3435,-3437,3427,3436,3437 ,-3431,1813,1827,3437,-3437,1821,1844,3437,-1828,1845,3430,3437,-1845,2771,2770,3438,-3434,1850,1853,3438,-2771,1815 ,3434,3438,-1854,3425,3433,3438,-3435,3440,3439,3441,-3443,3440,3442,1896,-1888,2962,3177,3443,-3445,3441,3444,3443 ,-3446,3443,2909,2344,-3446,2000,1926,3446,-3448,2000,3447,3448,-2002,2347,2674,3449,-3451,2673,3451,3449,-2675,3439 ,3450,3449,-3452,3451,2673,2962,-3445,3451,3444,3441,-3440,3440,1887,2347,-3451,3439,3440,-3451,1896,3442,3452,-3454 ,3441,3445,3452,-3443,2344,3454,3452,-3446,3446,3453,3452,-3455,1925,1897,1896,-3454,3448,3447,3455,-3457,3446,3455 ,-3448,2641,2004,-3458,3458,2004,1963,-3460,1928,2001,3459,-2000,1963,1999,-3460,3446,3454,3460,-3456,2344,2343,3460 ,-3455,2342,3461,3460,-2344,3456,3455,3460,-3462,3456,3461,3462,-3464,2342,2894,3462,-3462,2893,3464,3462,-2895,3457 ,3463,3462,-3465,2977,3180,2983,-3466,3458,3448,3456,-3464,3458,3463,3457,-2005,3465,2983,3466,3464,-2894,3466,2641 ,3457,-3465,2642,2641,-3467,2642,3466,-2984,1863,1889,-1865,2353,2352,2411,-2411,2384,2377,2409,-3496,2834,2711,3182 ,-2548,2005,1964,1963,-2005,3476,2728,2724,-2727,2860,3476,2726,-2858,2727,3476,-2861,2843,2842,2705,-3403,3395,2707 ,2704,-2842,2457,2456,2591,-2593,2749,2751,2752,-3323,2749,2750,2748,-2752,2739,2509,2510,-3196,2496,2497,2498,3371 ,-2749,2709,3477,3182,-2712,3477,2709,3183,-2441,2709,2711,2712,-2711,2416,2411,2352,-2645,2362,2365,2366,-2368,2113 ,2114,2115,-3479,2310,3478,-2116,2286,2285,2287,-2315,102,103,-2815,3381,2581,-2273,2410,2359,-2416,2525,3163,-2527 ,2040,3342,3404,-2035,2212,2208,2206,-2214,2558,2155,2154,-2431,2107,3479,-2109,2107,3128,-3480,1844,1821,1806,-1808 ,1824,140,1822,-1824,2435,127,69,-2250,2793,2319,2320,-2793,2977,3465,-2979,1925,3453,3446,-1927,2001,3448,3458,-3460 ,3443,3177,2908,-2910,3111,3107,3108,-3111,3148,3147,3259,-3259,1161,577,578,-1727,2843,3402,2252,-2252,2650,3396 ,3400,-3402,405,402,403,-405,2072,2073,2071,-2069,2708,1878,1877,-2612,692,1704,836,-692,2366,2365,-3381,910,908,-912 ,443,1592,-442,3264,2114,-2114,2935,3079,3080,-2951,3040,3104,3084,-3042,2946,2947,2890,-2950,2946,2949,2935,-2951 ,2944,3050,3051,-3054,3054,3055,3051,-3051,3380,3481,-2367,3304,3482,3481,-3381,2687,3483,3482,3304,-2579,738,743 ,-687,2412,3405,2359,-2411,1866,3109,-1866,3484,2851,2656,-2656,3175,3485,3484,-2656,1170,379,3486,-1170,3487,3486 ,-380,379,1666,-3488,1642,1643,978,-975,889,890,-192,2553,2599,3109,-2549,1113,1724,1725,-958,890,929,928,192,-192 ,505,1697,-1028,345,347,344,-1173,1708,1709,344,-348,846,1715,1713,-849,232,243,-245,1389,1428,1387,-1253,2700,2699 ,2694,-2697,3488,2544,2542,-2544,3489,3488,2543,-2566,2532,3490,3489,-2566,3292,3291,3490,-2533,3494,744,705,-738 ,704,711,3494,-738,2387,3495,2416,-2645,2384,3495,-2388,2172,3496,70,-2176,2698,2696,2697,-3104,2692,2574,-3108,1415 ,1427,1414,-3498,415,1564,-591,1508,1570,1707,-1515,1529,1571,-389,2067,2066,2068,-2070,399,398,396,-398,408,596,-408 ,3498,1683,-1177,1178,3498,1176,-1176,1664,1564,415,-597,596,408,-596,596,595,1665,-1665,595,3499,1576,-1661,1575 ,3499,-596,2593,2594,-2306,630,446,632,-632,1027,1697,-1721,2706,2707,-3396,3384,3194,3500,-3386,845,1224,1223,-845 ,2820,3185,2267,-2267,1020,1022,-1022,2550,3501,3502,-3379,3378,3502,3504,-3506,3505,3504,72,-2178,3373,3505,-2178 ,2600,3379,-2562,3148,3542,3543,-3150,3549,3550,3141,-3153,3548,3549,3152,-3155,3270,3551,51,-40,3141,3550,3551,-3271 ,3149,3543,3544,-3151,3255,3540,3541,-3259,3258,3541,3542,-3149,3124,3538,3539,-3254,3253,3539,3540,-3256,1460,1467 ,3522,1461,-1460,3123,3537,3538,-3125,3146,3150,3544,-3546,3143,3546,3547,-3313,3312,3547,3548,-3155,3146,3545,3546 ,-3144,3507,3522,3523,-3509,3509,3508,3523,-3525,3510,3509,3524,-3526,3511,3510,3525,-3527,3512,3511,3526,-3528,3513 ,3512,3527,-3529,3514,3513,3528,-3530,3515,3514,3529,-3531,3516,3515,3530,-3532,3517,3516,3531,-3533,3518,3517,3532 ,-3534,3533,3534,3519,-3519,3534,3535,3520,-3520,3521,3520,3535,-3537,50,3521,3536,44,45,47,48,-50,112,3507,3537,3117 ,3125,-3120,3522,1467,1468,-3524,3524,3523,1468,-1582,3525,3524,1581,-1584,3526,3525,1583,-1587,3527,3526,1586,-1492 ,3528,3527,1491,-1493,3529,3528,1492,-1494,3530,3529,1493,-1490,3531,3530,1489,-1487,3532,3531,1486,-1641,3533,3532 ,1640,-1497,1496,1494,3534,-3534,1494,1484,3535,-3535,44,3536,1598,-47,1461,3522,3507,112,1463,-1470,3537,3507,3508 ,-3539,3539,3538,3508,-3510,3540,3539,3509,-3511,3541,3540,3510,-3512,3542,3541,3511,-3513,3543,3542,3512,-3514,3544 ,3543,3513,-3515,3545,3544,3514,-3516,3546,3545,3515,-3517,3547,3546,3516,-3518,3548,3547,3517,-3519,3518,3519,3549 ,-3549,3519,3520,3550,-3550,3551,3550,3520,-3522,51,3551,3521,50,42,41,40,-39,3117,3537,3123,3116,-3116,429,1804,431 ,-431,3127,3130,3270,-40,43,46,-7,1484,1598,3536,-3536,16,26,-44,2323,2321,3552,-3554,2327,2326,3554,-3556,2329,2323 ,3553,-3557,2792,2320,3556,-3558,2338,2337,3559,-3561,2332,2338,3560,-3559,2060,2792,3557,-3562,3197,2327,3555,-3563 ,2321,3197,3562,-3553,2337,3199,3563,-3560,3201,3200,3564,-3566,3199,3201,3565,-3564,3564,3200,3206,-3567,3211,3210 ,3567,-3569,3206,3211,3568,-3567,3215,3214,3569,-3571,3210,3215,3570,-3568,3214,3217,3571,-3570,3221,3220,3572,-3574 ,3217,3221,3573,-3572,3220,3223,3574,-3573,3223,3225,3575,-3575,3225,3226,3576,-3576,3576,3226,2060,-3562,2326,2333 ,3577,-3555,3577,2333,2332,-3559,3553,3552,3578,-3580,3555,3554,3580,-3582,3556,3553,3579,-3583,3557,3556,3582,-3584 ,3560,3559,-3585,3561,3557,3583,-3587,3562,3555,3581,-3579,3552,3562,-3579,3559,3563,3587,-3585,3565,3564,-3589,3563 ,3565,3588,-3588,3589,3588,3564,-3567,3568,3567,3590,-3592,3566,3568,3591,-3590,3570,3569,3592,-3594,3567,3570,3593 ,-3591,3569,3571,3594,-3593,3573,3572,3595,-3597,3571,3573,3596,-3595,3572,3574,3597,-3596,3574,3575,3598,-3598,3575 ,3576,3599,-3599,3586,3599,3576,-3562,3554,3577,3600,-3581,3585,3600,3577,-3559,3582,3579,3586,-3584,3584,3585,3558 ,-3561,3647,654,645,-3605,651,652,3603,-3603,645,1111,3605,-3605,3606,657,658,-3625,662,663,3608,-3608,663,657,3606 ,-3609,1111,392,3609,-3606,3609,392,1560,-3624,652,1533,3610,-3604,1533,646,3601,-3611,1535,662,3607,-3612,1536,1537 ,3613,-3613,1537,1535,3611,-3614,1544,1545,3615,-3615,1548,1549,3617,-3617,1549,1544,3614,-3618,1551,1548,3616,-3619 ,1554,1555,3620,-3620,1555,1551,3618,-3621,1557,1554,3619,-3622,1559,1557,3621,-3623,1560,1559,3622,-3624,658,651 ,3602,-3625,3628,3646,-3648,3602,3603,3627,-3627,3604,3605,-3629,3629,3606,3624,-3646,3607,3608,3631,-3631,3608,3606 ,3629,-3632,3605,3609,3632,-3629,3632,3609,3623,-3645,3610,3627,-3604,3611,3607,3630,-3634,3612,3613,-3635,3613,3611 ,3633,-3635,3614,3615,3635,-3637,3635,3615,3612,-3635,3616,3617,3638,-3638,3617,3614,3636,-3639,3618,3616,3637,-3640 ,3619,3620,3641,-3641,3620,3618,3639,-3642,3621,3619,3640,-3643,3622,3621,3642,-3644,3623,3622,3643,-3645,3624,3602 ,3626,-3646,3625,3627,-3611,3625,3610,-3602,3625,3601,3646,-3629,3601,646,648,-3647,3646,648,654,-3648,3628,3647,-3605 ,2320,2329,-3557,2621,2733,2470,-2623,1053,798,989,-991,1536,3612,3615,-1546,931,932,992,-821,2934,2935,-2937,2935 ,2934,-2940,3497,1277,-1416,1259,1256,-1258,3313,2515,-2515,2605,2680,-2493,2605,2492,-2671,3648,3649,3650,-3652,3652 ,3648,3651,-3654,3654,3652,3653,-3656,3656,3657,3658,-3660,3660,3661,3662,-3664,3664,3665,3666,-3668,3668,3669,3670 ,-3672,3672,3673,3674,-3676,3677,3649,3648,-3693,3692,3648,3652,-3679,3680,3678,3652,-3655,3693,3657,3656,-3695,3683 ,3661,3660,-3685,3695,3665,3664,-3697,3690,3688,3669,-3669,3697,3693,3694,-3699,3699,3700,3695,-3697,3691,3671,3670 ,-3690,3703,3667,3666,-3705,3685,3663,3662,-3683,3705,3659,3658,-3707,3681,3655,3653,-3680,3707,3679,3653,-3652,3676 ,3707,3651,-3651,3708,3703,3704,-3710,3710,3705,3706,-3712,3676,3650,3649,-3678,3657,3654,3655,-3659,3706,3658,3655 ,-3682,3693,3680,3654,-3658,3694,3656,3661,-3684,3705,3682,3662,-3660,3659,3662,3661,-3657,3665,3660,3663,-3667,3704 ,3666,3663,-3686,3695,3684,3660,-3666,3696,3664,3669,-3688,3703,3686,3670,-3668,3667,3670,3669,-3665,3673,3668,3671 ,-3675,3674,3671,3691,-3703,3673,3701,3690,-3669,3669,3688,-3688,3673,3672,-3702,3675,3674,-3703,3670,3686,-3690,3681 ,3711,-3707,3680,3693,-3698,3683,3698,-3695,3682,3705,-3711,3685,3709,-3705,3684,3695,-3701,3687,3699,-3697,3686,3703 ,-3709,3712,3715,3714,-3714,3713,3714,3717,-3717,3716,3717,3719,-3719,3718,3719,3721,-3721,3722,3725,3724,-3724,3723 ,3724,3727,-3727,3726,3727,3729,-3729,3725,3732,3731,-3731,3730,3733,3724,-3726,3733,3734,3727,-3725,3734,3735,3729 ,-3728,3736,3715,3712,-3738,3738,3732,3725,-3723,3739,3742,3741,-3741,3743,3744,3742,-3740,3743,3746,3745,-3745,3720 ,3721,3745,-3747,3747,3750,3749,-3749,3750,3752,3751,-3750,3752,3728,3729,-3752,3753,3756,3755,-3755,3749,3758,3757 ,-3749,3751,3759,3758,-3750,3729,3735,3759,-3752,3760,3763,3762,-3762,3762,3764,3740,-3742,3765,3747,3748,-3755,3748 ,3757,3753,-3755,3738,3722,3714,-3716,3723,3717,3714,-3723,3726,3719,3717,-3724,3728,3721,3719,-3727,3715,3736,3766 ,-3739,3736,3768,3767,-3767,3765,3741,3742,-3748,3747,3742,3744,-3751,3750,3744,3745,-3753,3752,3745,3721,-3729,3741 ,3765,3755,-3763,3762,3755,3756,-3762,3769,3772,3771,-3771,3770,3774,3773,-3770,3774,3776,3775,-3774,3776,3778,3777 ,-3776,3779,3782,3781,-3781,3782,3784,3783,-3782,3784,3786,3785,-3784,3781,3733,3730,-3781,3783,3734,3733,-3782,3785 ,3735,3734,-3784,3787,3788,3771,-3773,3789,3779,3780,-3791,3791,3794,3793,-3793,3792,3793,3796,-3796,3795,3796,3798 ,-3798,3797,3798,3777,-3779,3799,3802,3801,-3801,3800,3801,3804,-3804,3804,3785,3786,-3804,3805,3756,3753,-3807,3802 ,3757,3758,-3802,3801,3758,3759,-3805,3759,3735,3785,-3805,3761,3808,3807,-3761,3808,3794,3791,-3810,3810,3806,3802 ,-3800,3806,3753,3757,-3803,3772,3769,3779,-3790,3769,3773,3782,-3780,3773,3775,3784,-3783,3775,3777,3786,-3785,3772 ,3789,3811,-3788,3787,3811,3767,-3769,3799,3793,3794,-3811,3800,3796,3793,-3800,3803,3798,3796,-3801,3777,3798,3803 ,-3787,3805,3810,3794,-3809,3756,3805,3808,-3762,3787,3768,3813,-3813,3736,3814,3813,-3769,3815,3818,3817,-3817,3819 ,3817,3818,-3821,3821,3819,3820,-3823,3823,3821,3822,-3825,3816,3826,3825,-3816,3827,3830,3829,-3829,3831,3829,3830 ,-3833,3833,3831,3832,-3835,3824,3833,3834,-3824,3835,3836,3827,-3829,3817,3838,3837,-3817,3819,3839,3838,-3818,3821 ,3840,3839,-3820,3841,3840,3821,-3824,3842,3843,3816,-3838,3844,3845,3830,-3828,3832,3830,3845,-3847,3834,3832,3846 ,-3848,3834,3847,3841,-3824,3827,3849,3848,-3845,3815,3851,3850,-3819,3820,3818,3850,-3853,3822,3820,3852,-3854,3824 ,3822,3853,-3855,3855,3857,3856,-3827,3825,3858,3851,-3816,3829,3860,3859,-3829,3831,3861,3860,-3830,3833,3862,3861 ,-3832,3824,3854,3862,-3834,3828,3859,3863,-3836,3836,3835,3863,-3865,3836,3864,3866,-3866,3837,3838,3868,-3868,3839 ,3869,3868,-3839,3840,3870,3869,-3840,3841,3871,3870,-3841,3855,3843,3872,-3858,3842,3837,3867,-3874,3845,3844,3875 ,-3875,3846,3845,3874,-3877,3847,3846,3876,-3878,3847,3877,3871,-3842,3844,3848,3878,-3876,3848,3849,3879,-3879,3849 ,3865,3866,-3880,3826,3856,3858,-3826,3843,3842,3873,-3873,3851,3712,3713,-3851,3713,3716,3852,-3851,3852,3716,3718 ,-3854,3718,3720,3854,-3854,3857,3880,3814,-3857,3737,3712,3851,-3859,3860,3739,3740,-3860,3861,3743,3739,-3861,3862 ,3746,3743,-3862,3854,3720,3746,-3863,3859,3740,3764,-3864,3863,3764,3763,-3865,3763,3881,3866,-3865,3770,3771,3867 ,-3869,3774,3770,3868,-3870,3776,3774,3869,-3871,3871,3778,3776,-3871,3812,3880,3857,-3873,3867,3771,3788,-3874,3875 ,3791,3792,-3875,3792,3795,3876,-3875,3876,3795,3797,-3878,3877,3797,3778,-3872,3809,3791,3875,-3879,3807,3809,3878 ,-3880,3866,3881,3807,-3880,3814,3737,3858,-3857,3873,3788,3812,-3873,3730,3731,3790,-3781,3731,3732,3766,-3768,3811 ,3790,3731,-3768,3813,3814,-3881,3765,3754,-3756,3762,3763,-3765,3760,3881,-3764,3813,3880,-3813,3810,3805,-3807,3808 ,3809,-3808,3760,3807,-3882,3814,3736,-3738,3787,3812,-3789,3827,3836,-3866,3865,3849,-3828,3843,3855,-3817,3816,3855 ,-3827,3738,3766,-3733,3790,3811,-3790,3882,3883,3884,-3886,3883,3886,3887,-3885,3886,3888,3889,-3888,3888,3890,3891 ,-3890,3892,3893,3894,-3896,3893,3896,3897,-3895,3896,3898,3899,-3898,3895,3900,3901,-3903,3900,3895,3894,-3904,3903 ,3894,3897,-3905,3904,3897,3899,-3906,3906,3907,3882,-3886,3908,3892,3895,-3903,3909,3910,3911,-3913,3913,3909,3912 ,-3915,3913,3914,3915,-3917,3890,3916,3915,-3892,3917,3918,3919,-3921,3920,3919,3921,-3923,3922,3921,3899,-3899,3923 ,3924,3925,-3927,3919,3918,3927,-3929,3921,3919,3928,-3930,3899,3921,3929,-3906,3930,3931,3932,-3934,3932,3911,3910 ,-3935,3935,3924,3918,-3918,3918,3924,3923,-3928,3908,3885,3884,-3893,3893,3892,3884,-3888,3896,3893,3887,-3890,3898 ,3896,3889,-3892,3885,3908,3936,-3907,3906,3936,3937,-3939,3935,3917,3912,-3912,3917,3920,3914,-3913,3920,3922,3915 ,-3915,3922,3898,3891,-3916,3911,3932,3925,-3936,3932,3931,3926,-3926,3939,3940,3941,-3943,3940,3939,3943,-3945,3944 ,3943,3945,-3947,3946,3945,3947,-3949,3949,3950,3951,-3953,3952,3951,3953,-3955,3954,3953,3955,-3957,3951,3950,3900 ,-3904,3953,3951,3903,-3905,3955,3953,3904,-3906,3957,3942,3941,-3959,3959,3960,3950,-3950,3961,3962,3963,-3965,3962 ,3965,3966,-3964,3965,3967,3968,-3967,3967,3948,3947,-3969,3969,3970,3971,-3973,3970,3973,3974,-3972,3974,3973,3956 ,-3956,3975,3976,3923,-3927,3972,3971,3928,-3928,3971,3974,3929,-3929,3929,3974,3955,-3906,3931,3930,3977,-3979,3978 ,3979,3961,-3965,3980,3969,3972,-3977,3976,3972,3927,-3924,3942,3959,3949,-3940,3939,3949,3952,-3944,3943,3952,3954 ,-3946,3945,3954,3956,-3948,3942,3957,3981,-3960,3957,3938,3937,-3982,3969,3980,3964,-3964,3970,3969,3963,-3967,3973 ,3970,3966,-3969,3947,3956,3973,-3969,3975,3978,3964,-3981,3926,3931,3978,-3976,3957,3982,3983,-3939,3906,3938,3983 ,-3985,3985,3986,3987,-3989,3989,3990,3988,-3988,3991,3992,3990,-3990,3993,3994,3992,-3992,3986,3985,3995,-3997,3997 ,3998,3999,-4001,4001,4002,4000,-4000,4003,4004,4002,-4002,3994,3993,4004,-4004,4005,3998,3997,-4007,3987,3986,4007 ,-4009,3989,3987,4008,-4010,3991,3989,4009,-4011,4011,3993,3991,-4011,4012,4007,3986,-4014,4014,3997,4000,-4016,4002 ,4016,4015,-4001,4004,4017,4016,-4003,4004,3993,4011,-4018,3997,4014,4018,-4020,3985,3988,4020,-4022,3990,4022,4020 ,-3989,3992,4023,4022,-3991,3994,4024,4023,-3993,4025,3996,4026,-4028,3995,3985,4021,-4029,3999,3998,4029,-4031,4001 ,3999,4030,-4032,4003,4001,4031,-4033,3994,4003,4032,-4025,3998,4005,4033,-4030,4006,4034,4033,-4006,4006,4035,4036 ,-4035,4007,4037,4038,-4009,4009,4008,4038,-4040,4010,4009,4039,-4041,4011,4010,4040,-4042,4025,4027,4042,-4014,4012 ,4043,4037,-4008,4015,4044,4045,-4015,4016,4046,4044,-4016,4017,4047,4046,-4017,4017,4011,4041,-4048,4014,4045,4048 ,-4019,4018,4048,4049,-4020,4019,4049,4036,-4036,3996,3995,4028,-4027,4013,4042,4043,-4013,4021,4020,3883,-3883,3883 ,4020,4022,-3887,4022,4023,3888,-3887,3888,4023,4024,-3891,4027,4026,3984,-4051,3907,4028,4021,-3883,4030,4029,3910 ,-3910,4031,4030,3909,-3914,4032,4031,3913,-3917,4024,4032,3916,-3891,4029,4033,3934,-3911,4033,4034,3933,-3935,3933 ,4034,4036,-4052,3940,4038,4037,-3942,3944,4039,4038,-3941,3946,4040,4039,-3945,4041,4040,3946,-3949,3982,4042,4027 ,-4051,4037,4043,3958,-3942,4045,4044,3962,-3962,3962,4044,4046,-3966,4046,4047,3967,-3966,4047,4041,3948,-3968,3979 ,4048,4045,-3962,3977,4049,4048,-3980,4036,4049,3977,-4052,3984,4026,4028,-3908,4043,4042,3982,-3959,3900,3950,3960 ,-3902,3901,3937,3936,-3903,3981,3937,3901,-3961,3983,4050,-3985,3935,3925,-3925,3932,3934,-3934,3930,3933,-4052,3983 ,3982,-4051,3980,3976,-3976,3978,3977,-3980,3930,4051,-3978,3984,3907,-3907,3957,3958,-3983,3997,4035,-4007,4035,3997 ,-4020,4013,3986,-4026,3986,3996,-4026,3908,3902,-3937,3960,3959,-3982,4052,4053,4054,-4056,4053,4056,4057,-4055,4056 ,4058,4059,-4058,4058,4060,4061,-4060,4062,4056,4053,-4064,4064,4058,4056,-4063,4065,4060,4058,-4065,4066,4067,4068 ,-4070,4070,4071,4062,-4064,4071,4072,4064,-4063,4072,4073,4065,-4065,4074,4075,4071,-4071,4075,4076,4072,-4072,4076 ,4077,4073,-4073,4082,4083,4067,-4067,4055,4082,4066,-4053,4063,4053,4052,-4070,4068,4070,4063,-4070,4081,4080,4084 ,-4086,4086,4087,4088,-4090,4090,4091,4089,-4089,4092,4093,4091,-4091,4094,4095,4093,-4093,4096,4097,4089,-4092,4098 ,4096,4091,-4094,4099,4098,4093,-4096,4100,4101,4102,-4104,4096,4104,4105,-4098,4098,4106,4104,-4097,4099,4107,4106 ,-4099,4104,4075,4074,-4106,4106,4076,4075,-4105,4107,4077,4076,-4107,4108,4109,4080,-4080,4110,4111,4102,-4102,4102 ,4112,4087,-4087,4097,4103,4086,-4090,4097,4105,4100,-4104,4084,4080,4109,-4114,4114,4115,4083,-4117,4114,4116,4117 ,-4111,4085,4118,4119,-4082,4085,4084,4120,-4119,4113,4121,4120,-4085,4113,4109,4122,-4122,4108,4110,4101,-4110,4108 ,4079,4114,-4111,4078,4081,4067,-4116,4118,4070,4068,-4120,4074,4070,4118,-4121,4100,4105,4121,-4123,4121,4105,4074 ,-4121,4123,4124,4125,-4127,4127,4128,4126,-4126,4129,4130,4128,-4128,4061,4060,4130,-4130,4131,4132,4126,-4129,4133 ,4131,4128,-4131,4065,4133,4130,-4061,4134,4135,4136,-4138,4131,4138,4139,-4133,4133,4140,4138,-4132,4065,4073,4140 ,-4134,4138,4141,4142,-4140,4140,4143,4141,-4139,4073,4077,4143,-4141,4144,4145,4146,-4148,4136,4135,4148,-4150,4124 ,4123,4136,-4151,4132,4137,4123,-4127,4132,4139,4134,-4138,4151,4146,4145,-4153,4153,4154,4155,-4157,4154,4157,4158 ,-4156,4157,4159,4160,-4159,4159,4095,4094,-4161,4161,4157,4154,-4163,4163,4159,4157,-4162,4099,4095,4159,-4164,4164 ,4165,4166,-4168,4168,4169,4161,-4163,4169,4170,4163,-4162,4170,4107,4099,-4164,4142,4141,4169,-4169,4141,4143,4170 ,-4170,4143,4077,4107,-4171,4171,4147,4146,-4173,4173,4165,4164,-4175,4164,4153,4156,-4176,4162,4154,4153,-4168,4166 ,4168,4162,-4168,4172,4146,4151,-4177,4177,4148,4178,-4180,4180,4179,4178,-4174,4152,4145,4181,-4183,4183,4151,4152 ,-4183,4176,4151,4183,-4185,4185,4172,4176,-4185,4165,4173,4171,-4173,4178,4147,4171,-4174,4148,4144,4147,-4179,4144 ,4148,4135,-4146,4134,4139,4182,-4182,4142,4183,4182,-4140,4166,4185,4184,-4169,4142,4168,4184,-4184,4186,4187,4188 ,-4190,4187,4190,4191,-4189,4191,4190,4192,-4194,4193,4192,4194,-4196,4188,4191,4196,-4198,4191,4193,4198,-4197,4193 ,4195,4199,-4199,4189,4197,4200,-4202,4189,4201,4202,-4187,4203,4204,4205,-4207,4204,4203,4207,-4209,4209,4208,4207 ,-4211,4211,4209,4210,-4213,4203,4197,4196,-4208,4207,4196,4198,-4211,4210,4198,4199,-4213,4213,4197,4206,-4215,4215 ,4214,4206,-4206,4216,4217,4218,-4220,4217,4216,4220,-4222,4222,4221,4220,-4224,4194,4222,4223,-4196,4216,4224,4225 ,-4221,4220,4225,4226,-4224,4223,4226,4199,-4196,4227,4224,4219,-4229,4229,4228,4219,-4219,4230,4231,4232,-4234,4231 ,4234,4235,-4233,4235,4234,4236,-4238,4237,4236,4211,-4213,4232,4235,4225,-4225,4225,4235,4237,-4227,4237,4212,4199 ,-4227,4238,4239,4233,-4225,4240,4230,4233,-4240,4187,4186,4241,-4243,4190,4187,4242,-4244,4192,4190,4243,-4245,4194 ,4192,4244,-4246,4186,4202,4246,-4242,4202,4201,4247,-4247,4205,4204,4248,-4250,4208,4250,4248,-4205,4208,4209,4251 ,-4251,4209,4211,4252,-4252,4205,4249,4253,-4216,4215,4253,4254,-4215,4200,4255,4256,-4258,4200,4257,4247,-4202,4255 ,4213,4258,-4257,4213,4214,4254,-4259,4218,4217,4259,-4261,4221,4261,4259,-4218,4221,4222,4262,-4262,4222,4194,4245 ,-4263,4218,4260,4263,-4230,4229,4263,4264,-4229,4231,4230,4265,-4267,4234,4231,4266,-4268,4236,4234,4267,-4269,4211 ,4236,4268,-4253,4230,4240,4269,-4266,4240,4239,4270,-4270,4271,4227,4272,-4274,4227,4228,4264,-4273,4238,4271,4273 ,-4275,4238,4274,4270,-4240,4054,4242,4241,-4056,4057,4243,4242,-4055,4059,4244,4243,-4058,4061,4245,4244,-4060,4241 ,4246,4082,-4056,4246,4247,4275,-4083,4087,4249,4248,-4089,4088,4248,4250,-4091,4090,4250,4251,-4093,4092,4251,4252 ,-4095,4112,4253,4249,-4088,4111,4254,4253,-4113,4083,4257,4256,-4117,4275,4247,4257,-4084,4256,4258,4117,-4117,4258 ,4254,4111,-4118,4124,4260,4259,-4126,4125,4259,4261,-4128,4127,4261,4262,-4130,4129,4262,4245,-4062,4150,4263,4260 ,-4125,4149,4264,4263,-4151,4155,4266,4265,-4157,4158,4267,4266,-4156,4160,4268,4267,-4159,4094,4252,4268,-4161,4265 ,4269,4175,-4157,4269,4270,4174,-4176,4273,4272,4177,-4180,4272,4264,4149,-4178,4180,4274,4273,-4180,4174,4270,4274 ,-4181,4052,4066,-4070,4082,4275,-4084,4115,4067,-4084,4086,4103,-4103,4102,4111,-4113,4111,4110,-4118,4109,4101,-4123 ,4067,4081,-4120,4067,4119,-4069,4122,4101,-4101,4123,4137,-4137,4136,4149,-4151,4153,4164,-4168,4164,4175,-4175,4148 ,4177,-4150,4174,4180,-4174,4172,4185,-4166,4135,4181,-4146,4135,4134,-4182,4185,4166,-4166,4188,4197,-4190,4197,4203 ,-4207,4197,4255,-4201,4255,4197,-4214,4224,4216,-4220,4232,4224,-4234,4224,4227,-4272,4271,4238,-4225,4276,4277,4344 ,-4346,4279,4278,4280,-4282,4281,4280,4282,-4284,4283,4282,4284,-4286,4285,4284,4286,-4288,4287,4286,4288,-4290,4289 ,4288,4290,-4292,4347,4348,4292,-4294,4293,4292,4294,-4296,4295,4294,4296,-4298,4297,4296,4298,-4300,4299,4298,4277 ,-4277,4277,4300,4343,-4345,4278,4301,4302,-4281,4280,4302,4303,-4283,4282,4303,4304,-4285,4284,4304,4305,-4287,4286 ,4305,4306,-4289,4288,4306,4307,-4291,4348,4349,4308,-4293,4292,4308,4309,-4295,4294,4309,4310,-4297,4296,4310,4311 ,-4299,4298,4311,4300,-4278,4301,4313,4314,-4303,4302,4314,4315,-4304,4303,4315,4316,-4305,4304,4316,4317,-4306,4305 ,4317,4318,-4307,4306,4318,4319,-4308,4307,4319,-4321,4312,4324,4325,-4314,4313,4325,4326,-4315,4314,4326,4327,-4316 ,4315,4327,4328,-4317,4316,4328,4329,-4318,4317,4329,4330,-4319,4318,4330,4331,-4320,4319,4331,4332,-4321,4320,4332 ,4333,-4322,4321,4333,4334,-4323,4322,4334,4335,-4324,4323,4335,4324,-4313,4336,4279,-4282,4336,4281,-4284,4336,4283 ,-4286,4336,4285,-4288,4336,4287,-4290,4336,4289,-4292,4346,4347,4293,-4338,4346,4337,4276,-4346,4337,4293,4295,-4298 ,4276,4337,4297,-4300,4312,4313,-4302,4338,4312,4301,-4279,4339,4338,4278,-4280,4336,4340,4339,-4280,4336,4291,4341 ,-4341,4291,4290,4342,-4342,4290,4307,4320,-4343,4344,4343,4312,-4339,4345,4344,4338,-4340,4340,4346,4345,-4340,4340 ,4341,4347,-4347,4341,4342,4348,-4348,4342,4320,4349,-4349,4430,4415,4416,-4430,4351,4354,4355,-4353,4354,4356,4357 ,-4356,4356,4358,4359,-4358,4358,4360,4361,-4360,4360,4362,4363,-4362,4362,4364,4365,-4364,4413,4422,4423,-4413,4366 ,4368,4369,-4368,4368,4370,4371,-4370,4370,4372,4373,-4372,4372,4350,4353,-4374,4428,4429,4416,-4387,4352,4355,4376 ,-4375,4355,4357,4377,-4377,4357,4359,4378,-4378,4359,4361,4379,-4379,4361,4363,4380,-4380,4363,4365,4381,-4381,4394 ,4412,4423,-4425,4367,4369,4383,-4383,4369,4371,4384,-4384,4371,4373,4385,-4385,4373,4353,4375,-4386,4374,4376,4388 ,-4388,4376,4377,4389,-4389,4377,4378,4390,-4390,4378,4379,4391,-4391,4379,4380,4392,-4392,4380,4381,4393,-4393,4381 ,4394,-4394,4382,4383,-4421,4383,4384,4419,-4421,4384,4385,4418,-4420,4385,4375,-4419,4386,4387,4398,-4400,4387,4388 ,4400,-4399,4388,4389,4401,-4401,4389,4390,4402,-4402,4390,4391,4403,-4403,4391,4392,4404,-4404,4392,4393,4405,-4405 ,4393,4394,4406,-4406,4394,4395,4407,-4407,4395,4396,4408,-4408,4396,4397,4409,-4409,4397,4386,4399,-4410,4410,4354 ,-4352,4410,4356,-4355,4410,4358,-4357,4410,4360,-4359,4410,4362,-4361,4410,4364,-4363,4368,4366,4417,-4371,4372,4370 ,4417,-4351,4399,4398,-4412,4398,4400,-4412,4400,4401,-4412,4401,4402,-4412,4402,4403,-4412,4403,4404,-4412,4404,4405 ,-4412,4405,4406,-4412,4406,4407,-4412,4407,4408,-4412,4408,4409,-4412,4409,4399,-4412,4386,4374,-4388,4381,4365,4412 ,-4395,4364,4413,4412,-4366,4414,4413,4364,-4411,4415,4414,4410,-4352,4416,4415,4351,-4353,4386,4416,4352,-4375,4421 ,4422,4413,-4415,4430,4421,4414,-4416,4427,4428,4386,-4398,4426,4427,4397,-4397,4425,4426,4396,-4396,4424,4425,4395 ,-4395,4417,4366,4422,-4422,4423,4422,4366,-4368,4424,4423,4367,-4383,4382,4420,4425,-4425,4420,4419,4426,-4426,4419 ,4418,4427,-4427,4418,4375,4428,-4428,4375,4353,4429,-4429,4350,4430,4429,-4354,4350,4417,4421,-4431,4431,4432,4433 ,-4435,4432,4435,4436,-4434,4435,4437,4438,-4437,4437,4439,4440,-4439,4439,4441,4442,-4441,4442,4441,4443,-4445,4441 ,4445,4446,-4444,4441,4439,4447,-4446,4439,4437,4448,-4448,4437,4435,4449,-4449,4435,4432,4450,-4450,4432,4431,4451 ,-4451,4444,4443,4458,-4458,4443,4446,4459,-4459,4446,4445,4460,-4460,4445,4447,4461,-4461,4447,4448,4462,-4462,4448 ,4449,4463,-4463,4449,4450,4464,-4464,4457,4458,4465,-4457,4459,4460,4465,-4459,4460,4461,4466,-4466,4461,4462,4467 ,-4467,4462,4463,4468,-4468,4463,4464,4469,-4469,4465,4466,4455,-4457,4466,4467,4454,-4456,4467,4468,4453,-4455,4468 ,4469,4452,-4454,4470,4471,4472,-4474,4472,4474,4475,-4474,4474,4476,4477,-4476,4477,4476,4478,-4480,4479,4478,4480 ,-4482,4481,4480,4471,-4471,4482,4483,4484,-4486,4484,4483,4486,-4488,4487,4486,4488,-4490,4488,4490,4491,-4490,4490 ,4492,4493,-4492,4492,4482,4485,-4494,4494,4495,4496,-4498,4497,4496,4498,-4500,4498,4500,4501,-4500,4500,4502,4503 ,-4502,4502,4504,4505,-4504,4504,4495,4494,-4506,4506,4507,4508,-4510,4508,4510,4511,-4510,4510,4512,4513,-4512,4512 ,4514,4515,-4514,4515,4514,4516,-4518,4516,4507,4506,-4518,4518,4519,4520,-4522,4520,4519,4522,-4524,4523,4522,4524 ,-4526,4524,4526,4527,-4526,4526,4528,4529,-4528,4528,4518,4521,-4530,4530,4531,4532,-4534,4532,4531,4534,-4536,4535 ,4534,4536,-4538,4536,4538,4539,-4538,4538,4540,4541,-4540,4540,4530,4533,-4542,4542,4543,4544,-4546,4546,4543,4542 ,-4548,4548,4546,4547,-4550,4550,4548,4549,-4552,4552,4553,4550,-4552,4545,4544,4553,-4553,4554,4555,4556,-4558,4557 ,4558,4559,-4555,4521,4520,4560,-4562,4520,4523,4562,-4561,4523,4525,4563,-4563,4525,4527,4564,-4564,4564,4527,4529 ,-4566,4529,4521,4561,-4566,4560,4531,4530,-4562,4562,4534,4531,-4561,4563,4536,4534,-4563,4538,4536,4563,-4565,4540 ,4538,4564,-4566,4561,4530,4540,-4566,4470,4473,4566,-4568,4473,4475,4568,-4567,4568,4475,4477,-4570,4569,4477,4479 ,-4571,4570,4479,4481,-4572,4481,4470,4567,-4572,4572,4485,4484,-4574,4566,4483,4482,-4568,4484,4487,4574,-4574,4568 ,4486,4483,-4567,4487,4489,4575,-4575,4569,4488,4486,-4569,4489,4491,4576,-4576,4490,4488,4569,-4571,4576,4491,4493 ,-4578,4492,4490,4570,-4572,4493,4485,4572,-4578,4567,4482,4492,-4572,4578,4494,4497,-4580,4573,4496,4495,-4573,4497 ,4499,4580,-4580,4574,4498,4496,-4574,4499,4501,4581,-4581,4575,4500,4498,-4575,4501,4503,4582,-4582,4502,4500,4575 ,-4577,4582,4503,4505,-4584,4504,4502,4576,-4578,4505,4494,4578,-4584,4495,4504,4577,-4573,4506,4509,4584,-4586,4579 ,4508,4507,-4579,4509,4511,4586,-4585,4580,4510,4508,-4580,4511,4513,4587,-4587,4581,4512,4510,-4581,4587,4513,4515 ,-4589,4514,4512,4581,-4583,4588,4515,4517,-4590,4516,4514,4582,-4584,4517,4506,4585,-4590,4507,4516,4583,-4579,4584 ,4519,4518,-4586,4586,4522,4519,-4585,4587,4524,4522,-4587,4526,4524,4587,-4589,4528,4526,4588,-4590,4518,4528,4589 ,-4586,4590,4472,4471,-4592,4592,4474,4472,-4591,4476,4474,4592,-4594,4478,4476,4593,-4595,4480,4478,4594,-4596,4591 ,4471,4480,-4596,4596,4542,4545,-4598,4544,4543,4590,-4592,4598,4547,4542,-4597,4543,4546,4592,-4591,4599,4549,4547 ,-4599,4546,4548,4593,-4593,4551,4549,4599,-4601,4593,4548,4550,-4595,4552,4551,4600,-4602,4594,4550,4553,-4596,4597 ,4545,4552,-4602,4553,4544,4591,-4596,4597,4602,4556,-4597,4556,4555,4598,-4597,4555,4603,4599,-4599,4603,4559,4600 ,-4600,4600,4559,4558,-4602,4601,4558,4602,-4598,4604,4605,4606,-4608,4606,4605,4608,-4610,4609,4608,4610,-4612,4610 ,4612,4613,-4612,4612,4614,4615,-4614,4614,4604,4607,-4616,4616,4617,4618,-4620,4618,4620,4621,-4620,4620,4622,4623 ,-4622,4623,4622,4624,-4626,4625,4624,4626,-4628,4627,4626,4617,-4617,4628,4629,4630,-4632,4629,4632,4633,-4631,4633 ,4632,4634,-4636,4635,4634,4636,-4638,4637,4636,4638,-4640,4639,4638,4628,-4632,4640,4641,4642,-4644,4642,4641,4644 ,-4646,4645,4644,4646,-4648,4647,4646,4648,-4650,4648,4650,4651,-4650,4651,4650,4640,-4644,4652,4653,4654,-4656,4654 ,4656,4657,-4656,4656,4658,4659,-4658,4659,4658,4660,-4662,4661,4660,4662,-4664,4663,4662,4653,-4653,4664,4533,4532 ,-4666,4532,4535,4666,-4666,4535,4537,4667,-4667,4667,4537,4539,-4669,4668,4539,4541,-4670,4669,4541,4533,-4665,4670 ,4671,4672,-4674,4674,4675,4670,-4674,4676,4677,4675,-4675,4678,4679,4677,-4677,4680,4679,4678,-4682,4671,4680,4681 ,-4673,4682,4683,4684,-4686,4683,4682,4686,-4688,4653,4688,4689,-4655,4654,4689,4690,-4657,4656,4690,4691,-4659,4658 ,4691,4692,-4661,4692,4693,4662,-4661,4662,4693,4688,-4654,4689,4688,4664,-4666,4690,4689,4665,-4667,4691,4690,4666 ,-4668,4668,4692,4691,-4668,4669,4693,4692,-4669,4688,4693,4669,-4665,4604,4694,4695,-4606,4605,4695,4696,-4609,4696 ,4697,4610,-4609,4697,4698,4612,-4611,4698,4699,4614,-4613,4614,4699,4694,-4605,4700,4701,4618,-4618,4695,4694,4616 ,-4620,4618,4701,4702,-4621,4696,4695,4619,-4622,4620,4702,4703,-4623,4697,4696,4621,-4624,4622,4703,4704,-4625,4625 ,4698,4697,-4624,4704,4705,4626,-4625,4627,4699,4698,-4626,4626,4705,4700,-4618,4694,4699,4627,-4617,4706,4707,4629 ,-4629,4701,4700,4631,-4631,4629,4707,4708,-4633,4702,4701,4630,-4634,4632,4708,4709,-4635,4703,4702,4633,-4636,4634 ,4709,4710,-4637,4637,4704,4703,-4636,4710,4711,4638,-4637,4639,4705,4704,-4638,4638,4711,4706,-4629,4631,4700,4705 ,-4640,4640,4712,4713,-4642,4707,4706,4643,-4643,4641,4713,4714,-4645,4708,4707,4642,-4646,4644,4714,4715,-4647,4709 ,4708,4645,-4648,4715,4716,4648,-4647,4649,4710,4709,-4648,4716,4717,4650,-4649,4651,4711,4710,-4650,4650,4717,4712 ,-4641,4643,4706,4711,-4652,4713,4712,4652,-4656,4714,4713,4655,-4658,4715,4714,4657,-4660,4661,4716,4715,-4660,4663 ,4717,4716,-4662,4652,4712,4717,-4664,4718,4719,4607,-4607,4720,4718,4606,-4610,4611,4721,4720,-4610,4613,4722,4721 ,-4612,4615,4723,4722,-4614,4719,4723,4615,-4608,4724,4725,4671,-4671,4672,4719,4718,-4674,4726,4724,4670,-4676,4673 ,4718,4720,-4675,4727,4726,4675,-4678,4674,4720,4721,-4677,4679,4728,4727,-4678,4721,4722,4678,-4677,4680,4729,4728 ,-4680,4722,4723,4681,-4679,4725,4729,4680,-4672,4681,4723,4719,-4673,4725,4724,4684,-4731,4684,4724,4726,-4686,4685 ,4726,4727,-4732,4731,4727,4728,-4687,4728,4729,4687,-4687,4729,4725,4730,-4688,4602,4557,-4557,4555,4554,-4604,4603 ,4554,-4560,4558,4557,-4603,4730,4684,-4684,4685,4731,-4683,4731,4686,-4683,4687,4730,-4684,4732,4733,4734,-4736,4733 ,4736,4737,-4735,4736,4738,4739,-4738,4738,4740,4741,-4740,4740,4742,4743,-4742,4742,4744,4745,-4744,4744,4746,4747 ,-4746,4746,4748,4749,-4748,4748,4750,4751,-4750,4750,4752,4753,-4752,4752,4754,4755,-4754,4754,4732,4735,-4756,4735 ,4734,4756,-4758,4734,4737,4758,-4757,4737,4739,4759,-4759,4739,4741,4760,-4760,4741,4743,4761,-4761,4743,4745,4762 ,-4762,4745,4747,4763,-4763,4747,4749,4764,-4764,4749,4751,4765,-4765,4751,4753,4766,-4766,4753,4755,4767,-4767,4755 ,4735,4757,-4768,4757,4756,4768,-4770,4756,4758,4770,-4769,4758,4759,4771,-4771,4759,4760,4772,-4772,4760,4761,4773 ,-4773,4761,4762,4774,-4774,4762,4763,4775,-4775,4763,4764,4776,-4776,4764,4765,4777,-4777,4765,4766,4778,-4778,4766 ,4767,4779,-4779,4767,4757,4769,-4780,4780,4733,-4733,4780,4736,-4734,4780,4738,-4737,4780,4740,-4739,4780,4742,-4741 ,4780,4744,-4743,4780,4746,-4745,4780,4748,-4747,4780,4750,-4749,4780,4752,-4751,4780,4754,-4753,4780,4732,-4755,4769 ,4768,-4782,4768,4770,-4782,4770,4771,-4782,4771,4772,-4782,4772,4773,-4782,4773,4774,-4782,4774,4775,-4782,4775,4776 ,-4782,4776,4777,-4782,4777,4778,-4782,4778,4779,-4782,4779,4769,-4782,4782,4783,4784,-4786,4783,4786,4787,-4785,4786 ,4788,4789,-4788,4788,4790,4791,-4790,4790,4792,4793,-4792,4792,4794,4795,-4794,4794,4796,4797,-4796,4796,4798,4799 ,-4798,4798,4800,4801,-4800,4800,4802,4803,-4802,4802,4804,4805,-4804,4804,4782,4785,-4806,4785,4784,4806,-4808,4784 ,4787,4808,-4807,4787,4789,4809,-4809,4789,4791,4810,-4810,4791,4793,4811,-4811,4793,4795,4812,-4812,4795,4797,4813 ,-4813,4797,4799,4814,-4814,4799,4801,4815,-4815,4801,4803,4816,-4816,4803,4805,4817,-4817,4805,4785,4807,-4818,4807 ,4806,4818,-4820,4806,4808,4820,-4819,4808,4809,4821,-4821,4809,4810,4822,-4822,4810,4811,4823,-4823,4811,4812,4824 ,-4824,4812,4813,4825,-4825,4813,4814,4826,-4826,4814,4815,4827,-4827,4815,4816,4828,-4828,4816,4817,4829,-4829,4817 ,4807,4819,-4830,4830,4783,-4783,4830,4786,-4784,4830,4788,-4787,4830,4790,-4789,4830,4792,-4791,4830,4794,-4793,4830 ,4796,-4795,4830,4798,-4797,4830,4800,-4799,4830,4802,-4801,4830,4804,-4803,4830,4782,-4805,4819,4818,-4832,4818,4820 ,-4832,4820,4821,-4832,4821,4822,-4832,4822,4823,-4832,4823,4824,-4832,4824,4825,-4832,4825,4826,-4832,4826,4827,-4832 ,4827,4828,-4832,4828,4829,-4832,4829,4819,-4832,4832,4833,4834,-4836,4832,4836,4837,-4834,4838,4839,4836,-4841,4838 ,4841,4842,-4840,4838,4840,4843,-4842,4844,4845,4846,-4848,4844,4832,4848,-4846,4844,4840,4836,-4833,4844,4847,4843 ,-4841,4839,4842,4849,-4851,4839,4850,4837,-4837,4851,4852,4853,-4855,4851,4855,4856,-4853,4851,4841,4843,-4856,4851 ,4854,4842,-4842,4857,4858,4856,-4856,4857,4859,4860,-4859,4857,4847,4846,-4860,4857,4855,4843,-4848,4854,4853,4861 ,-4863,4854,4862,4849,-4843,4852,4863,4864,-4854,4852,4856,4865,-4864,4858,4866,4865,-4857,4858,4860,4867,-4867,4853 ,4864,4868,-4862,4869,4870,4871,-4873,4873,4874,4870,-4870,4873,4875,4876,-4875,4877,4878,4876,-4876,4877,4879,4880 ,-4879,4879,4881,4882,-4881,4848,4835,4883,-4885,4835,4834,4885,-4884,4845,4886,4887,-4847,4845,4848,4884,-4887,4859 ,4888,4889,-4861,4859,4846,4887,-4889,4860,4889,4890,-4868,4891,4892,4893,-4895,4895,4896,4897,-4899,4895,4899,4882 ,-4897,4895,4898,4890,-4900,4900,4901,4864,-4864,4900,4902,4903,-4905,4900,4863,4865,-4903,4905,4902,4865,-4867,4905 ,4894,4903,-4903,4905,4866,4867,-4907,4901,4907,4868,-4865,4901,4904,4908,-4908,4909,4896,4882,-4882,4909,4910,4897 ,-4897,4911,4912,4871,-4871,4911,4884,4883,-4913,4912,4913,4914,-4872,4912,4883,4885,-4914,4915,4916,4887,-4887,4915 ,4874,4876,-4917,4915,4911,4870,-4875,4915,4886,4884,-4912,4917,4918,4889,-4889,4917,4878,4880,-4919,4917,4916,4876 ,-4879,4917,4888,4887,-4917,4918,4899,4890,-4890,4918,4880,4882,-4900,4919,4898,4897,-4892,4919,4867,4890,-4899,4920 ,4921,4922,-4924,4920,4924,4925,-4922,4920,4926,4927,-4925,4924,4928,4929,-4926,4924,4927,4930,-4929,4921,4931,4932 ,-4923,4921,4925,4933,-4932,4925,4929,4934,-4934,4934,4929,4935,-4937,4928,4937,4935,-4930,4833,4837,4923,-4923,4862 ,4926,4923,-4850,4862,4861,4927,-4927,4861,4868,4930,-4928,4938,4939,4940,-4942,4942,4943,4944,-4946,4944,4941,4940 ,-4946,4946,4947,4939,-4939,4946,4948,4949,-4948,4950,4951,4949,-4949,4950,4952,4953,-4952,4952,4954,4955,-4954,4834 ,4922,4932,-4886,4892,4936,4935,-4894,4893,4935,4937,-4909,4907,4908,4937,-4931,4913,4932,4956,-4915,4957,4958,4943 ,-4943,4869,4872,4940,-4940,4959,4945,4940,-4873,4959,4960,4942,-4946,4873,4947,4949,-4876,4873,4869,4939,-4948,4877 ,4951,4953,-4880,4877,4875,4949,-4952,4879,4953,4955,-4882,4961,4962,4910,-4910,4961,4909,4881,-4956,4963,4957,4942 ,-4961,4959,4872,4871,-4915,4963,4960,4959,-4915,4963,4914,4956,-4958,4897,4910,-4892,4910,4892,-4892,4893,4904,-4904 ,4893,4903,-4895,4908,4904,-4894,4867,4919,-4907,4894,4906,-4892,4891,4906,-4920,4904,4901,-4901,4906,4894,-4906,4923 ,4926,-4921,4930,4937,-4929,4922,4834,-4834,4923,4837,-4851,4923,4850,-4850,4957,4956,-4959,4930,4868,-4908,4885,4932 ,-4914,4835,4848,-4833,4943,4958,4956,4932,4931,4948,4946,4938,4941,-4945,4954,4934,4936,-4893,4950,4948,4931,4933 ,4934,4954,-4953,4964,4965,4966,-4968,4968,4969,4966,-4966,4970,4971,4972,-4974,4974,4975,4976,-4978,4975,4978,4979 ,-4977,4978,4980,4981,-4980,4975,4982,4983,-4979,4984,4982,4975,-4975,4973,4985,4986,-4971,4965,4987,4988,-4969,4989 ,4987,4965,-4965,4967,4990,4991,-4965,4980,4992,4993,-4982,4983,4994,4992,-4981,4988,4987,4982,-4985,4992,4995,4996 ,-4994,4997,4995,4992,-4995,4998,4997,4994,-4983,4987,4999,4998,-4983,5000,4999,4989,-4992,4990,5001,5000,-4992,5002 ,5003,5004,-5006,5006,5007,5003,-5003,5008,5009,5004,-5004,5010,5008,5007,-4999,4999,5011,5010,-4999,5001,5012,5011 ,-5001,5013,5009,5008,-5011,5012,5013,5010,-5012,4968,4973,4972,-4970,4970,4974,4977,-4972,4974,4970,4986,-4985,4968 ,4988,4985,-4974,4995,5002,5005,-4997,4997,5006,5002,-4996,5007,5006,4997,-4999,4986,4985,4988,-4985,4978,4983,-4981 ,4964,4991,-4990,4983,4982,-4995,4987,4989,-5000,5003,5007,-5009,4999,5000,-5012,5017,5016,5014,-5016,5020,5019,5018 ,-5022,5024,5022,5023,-5026,5018,5027,5026,-5022,5027,5028,5029,-5027,5030,5017,5015,-5032,5032,5035,5033,-5035,5022 ,5035,5032,-5024,5033,5036,5037,-5035,5030,5031,5037,-5037,5014,5016,5019,-5021,5024,5025,5039,-5039,5026,5040,5041 ,-5022,5042,5043,5015,-5015,5044,5045,5023,-5033,5046,5047,5038,-5029,5048,5049,5016,-5018,5050,5051,5030,-5037,5052 ,5053,5034,-5038,5054,5055,5018,-5020,5030,5051,5056,5048,-5018,5057,5058,5022,-5025,5027,5018,5055,-5060,5020,5061 ,5060,5042,-5015,5062,5040,5026,-5030,5059,5046,5028,-5028,5033,5063,5050,-5037,5016,5049,5064,5054,-5020,5035,5065 ,5063,-5034,5058,5065,5035,-5023,5039,5025,5066,-5068,5024,5068,-5058,5023,5045,5069,-5026,5032,5034,5053,5070,-5045 ,5071,5052,5037,-5032,5072,5071,-5032,5073,5061,-5021,5029,5039,5067,-5063,5038,5039,5029,-5029,5038,5047,5068,-5025 ,5025,5069,-5067,5041,5073,5020,-5022,5074,5072,5031,-5016,5043,5074,-5016,5075,5076,5096,-5096,5076,5144,5145,-5097 ,5077,5078,5098,5097,5147,-5147,5078,5079,5099,-5099,5079,5080,5100,-5100,5080,5081,5101,-5101,5081,5082,5102,-5102 ,5082,5083,5103,-5103,5139,5136,5137,-5139,5087,5088,5108,-5108,5088,5089,5109,-5109,5089,5090,5110,-5110,5090,5091 ,5111,-5111,5091,5092,5112,-5112,5112,5092,5093,-5114,5150,5151,5152,-5154,5094,5075,5095,-5115,5095,5096,-5149,5147 ,5148,5096,-5146,5097,5098,5131,-5133,5098,5099,5130,-5132,5099,5100,5129,-5131,5100,5101,5128,-5130,5101,5102,5127 ,-5129,5102,5103,5126,-5128,5103,5104,5125,-5127,5104,5105,5124,-5126,5105,5106,5123,-5125,5122,5123,5106,5107,-5109 ,5108,5109,5121,-5123,5109,5110,5120,-5122,5110,5111,5119,-5121,5111,5112,5118,-5120,5112,5113,5117,-5119,5154,5155 ,5156,-5158,5114,5095,5115,-5117,5075,5094,5070,-5054,5159,5158,5160,-5162,5093,5092,5045,-5045,5092,5091,5069,-5046 ,5091,5090,5066,-5070,5090,5089,5067,-5067,5089,5088,5062,-5068,5088,5087,-5063,5087,5086,5040,-5063,5086,5085,5041 ,-5041,5085,5084,5073,-5042,5084,5083,5061,-5074,5083,5082,5042,-5062,5082,5081,5043,-5043,5081,5080,5074,-5044,5080 ,5079,5072,-5075,5079,5078,5071,-5073,5078,5077,5052,-5072,5077,5149,5053,-5053,5149,5075,-5054,5106,5105,5134,-5136 ,5105,5104,5136,-5135,5104,5103,5137,-5137,5103,5083,5138,-5138,5083,5084,5139,-5139,5084,5085,5140,-5140,5085,5086 ,5141,-5141,5086,5087,5142,-5142,5087,5107,5143,-5143,5107,5106,5135,-5144,5135,5141,5142,-5144,5140,5134,5136,-5140 ,5135,5134,5140,-5142,5149,5146,5144,-5077,5146,5147,5145,-5145,5148,5097,5132,-5134,5095,5148,5133,-5116,5076,5075 ,-5150,5077,5146,-5150,5097,5148,-5148,5158,5150,-5094,5094,5114,5152,-5152,5113,5093,5150,-5154,5153,5154,-5114,5114 ,5116,5156,-5156,5116,5117,5157,-5157,5117,5113,5154,-5158,5093,5044,5160,-5159,5044,5070,5161,-5161,5070,5094,5159 ,-5162,5094,5151,-5160,5159,5151,5150,-5159,5152,5155,5154,-5154,5114,5155,-5153,5162,5163,5178,-5178,5248,5249,5250 ,-5252,5164,5165,5180,-5180,5165,5166,5181,-5181,5166,5167,5182,-5182,5207,5168,5183,-5207,5168,5169,5184,-5184,5169 ,5212,5215,-5185,5170,5171,5186,-5186,5187,5172,5173,-5189,5230,5231,5232,-5234,5174,5175,5298,-5300,5243,5244,5245 ,-5247,5245,5177,-5248,5177,5178,5050,-5064,5252,5253,5254,-5256,5179,5180,5056,-5052,5180,5181,5048,-5057,5181,5182 ,5049,-5049,5054,5064,5206,-5184,5183,5184,5055,-5055,5055,5184,5215,5214,-5186,5185,5186,5059,-5056,5186,5187,-5060 ,5234,5235,5236,-5238,5189,5190,5057,-5069,5226,5228,5224,-5192,5176,5242,5192,-5163,5176,5227,5193,-5243,5175,5174 ,5195,5300,-5195,5239,5238,5240,-5242,5208,5172,-5198,5171,5170,5198,-5198,5170,5210,5211,-5199,5169,5168,5200,-5200 ,5200,5168,5207,-5210,5167,5166,5202,-5202,5166,5165,5203,-5203,5165,5164,5204,-5204,5257,5256,5258,-5260,5163,5162 ,5192,-5206,5058,5057,-5227,5167,5207,5206,-5183,5209,5207,5167,-5202,5187,5186,5171,-5173,5197,5172,-5172,5059,5187 ,-5047,5206,5064,5049,-5183,5047,5046,5187,-5189,5172,5208,5196,-5174,5210,5212,5213,-5212,5212,5169,5199,-5214,5214 ,5210,5170,-5186,5221,5220,5222,-5224,5215,5212,5216,-5218,5212,5210,5218,-5217,5210,5214,5219,-5219,5214,5215,5217 ,-5220,5217,5216,5220,-5222,5216,5218,5222,-5221,5218,5219,5223,-5223,5219,5217,5221,-5224,5260,5265,5266,5261,5224 ,-5229,5190,5228,5226,-5058,5175,5229,5262,-5299,5227,5229,5175,-5195,5238,5230,-5174,5174,5299,5297,5189,5232,-5232 ,5188,5173,5230,-5234,5233,5234,-5189,5189,5068,5236,-5236,5068,5047,5237,-5237,5047,5188,5234,-5238,5173,5196,5240 ,-5239,5196,5195,5241,-5241,5195,5174,5239,-5242,5174,5231,-5240,5232,5235,5234,-5234,5189,5235,-5233,5239,5231,5230 ,-5239,5227,5194,-5194,5225,5176,5244,-5244,5191,5224,5246,-5246,5224,5261,-5247,5191,5245,-5248,5065,5058,5226,5191 ,-5248,5227,5176,5225,-5230,5164,5249,-5258,5164,5179,5250,-5250,5178,5163,5248,-5252,5251,5252,-5179,5179,5051,5254 ,-5254,5051,5050,5255,-5255,5050,5178,5252,-5256,5163,5205,5258,-5257,5205,5204,5259,-5259,5204,5164,5257,-5260,5257 ,5249,5248,-5257,5256,5248,-5164,5179,5253,-5251,5250,5253,5252,-5252,5264,5265,-5261,5229,5225,5263,5269,5270,-5263 ,5266,5267,-5262,5269,5263,-5269,5262,5270,-5272,5288,5289,5290,5291,5292,5293,5294,-5296,5270,5269,5273,-5273,5269 ,5268,5274,-5274,5268,5267,5275,-5275,5267,5266,5276,-5276,5266,5265,5277,-5277,5265,5264,5278,-5278,5279,5278,5264 ,-5272,5271,5270,5272,-5280,5272,5273,5281,-5281,5273,5274,5282,-5282,5274,5275,5283,-5283,5275,5276,5284,-5284,5276 ,5277,5285,-5285,5277,5278,5286,-5286,5278,5279,5287,-5287,5279,5272,5280,-5288,5280,5281,5289,-5289,5281,5282,5290 ,-5290,5282,5283,5291,-5291,5283,5284,5292,-5292,5284,5285,5293,-5293,5285,5286,5294,-5294,5286,5287,5295,-5295,5287 ,5280,5288,-5296,5246,5261,5267,5268,5263,-5244,5243,5263,-5226,5296,5260,5228,-5191,5297,5296,5190,-5190,5298,5262 ,5271,5264,5260,-5297,5299,5298,5296,-5298,5063,5065,5247,-5178,5244,5176,-5163,5244,5162,5177,-5246,5320,5323,5322 ,-5322,5324,5327,5326,-5326,5301,5329,5328,-5303,5330,5333,5332,-5332,5335,5338,5337,-5337,5326,5327,5340,-5340,5327 ,5342,5341,-5341,5343,5346,5345,-5345,5347,5337,5338,-5349,5349,5352,5351,-5351,5339,5354,5353,-5327,5355,5354,5339 ,-5357,5346,5343,5332,-5358,5358,5362,5361,-5728,5359,5360,5364,-5364,5365,5368,5367,-5367,5360,5729,5728,-5365,5371 ,5374,5373,-5373,5360,5358,5727,-5730,5366,5370,5376,-5376,5349,5350,5378,-5378,5303,5380,5379,-5305,5381,5379,5321 ,-5323,5372,5383,5382,-5372,5730,5305,5306,-5385,5385,5386,5307,-5309,5731,5361,5388,-5388,5380,5303,5309,-5390,5310 ,5311,5391,-5391,5741,5345,5346,-5741,5392,5340,5341,-5748,5356,5339,5340,-5393,5388,5395,5394,-5375,5374,5394,5396 ,-5374,5728,5732,5397,-5365,5363,5364,5397,-5399,5398,5397,5400,-5400,5384,5376,5370,-5731,5389,5309,5312,-5402,5401 ,5312,5307,-5387,5321,5379,5380,-5403,5381,5403,5304,-5380,5363,5405,5404,-5360,5399,5406,5405,-5399,5409,5362,5411 ,-5411,5412,5413,5410,-5412,5415,5418,5406,-5418,5406,5418,5404,-5406,5408,5404,5418,-5417,5359,5404,5408,-5408,5419 ,5396,5394,-5421,5744,5424,5423,-5744,5311,5313,5425,-5392,5426,5429,5428,-5428,5391,5425,5431,-5431,5313,5314,5383 ,-5426,5425,5383,5372,-5432,5427,5430,5431,-5427,5419,5434,5433,-5433,5747,5341,5435,-5747,5390,5391,5430,-5437,5437 ,5433,5434,-5439,5431,5372,5373,-5427,5440,5342,5442,-5442,5440,5435,5341,-5343,5407,5411,5362,-5359,5412,5408,5416 ,-5444,5411,5407,5408,-5413,5444,5443,5416,-5415,5740,5346,5357,-5740,5388,5374,5371,-5388,5315,5302,5328,-5446,5353 ,5446,5325,-5327,5447,5450,5449,-5449,5342,5327,5324,-5443,5451,5402,5380,-5390,5361,5409,5395,-5389,5452,5414,5415 ,-5451,5417,5406,5399,-5369,5366,5375,5448,-5366,5449,5450,5415,-5418,5368,5399,5400,-5368,5439,5428,5429,-5433,5429 ,5426,5373,-5397,5432,5429,5396,-5420,5454,5447,5456,-5456,5322,5376,5384,-5382,5457,5375,5376,-5323,5458,5459,5348 ,-5339,5338,5335,5460,-5459,5337,5334,-5337,5449,5417,5368,-5366,5461,5750,5751,-5317,5451,5463,5462,-5403,5464,5467 ,5466,-5466,5461,5468,5749,-5751,5350,5351,5401,-5387,5386,5385,5378,-5351,5320,5462,5466,-5468,5462,5463,5459,-5467 ,5347,5348,5352,-5350,5348,5459,5463,-5353,5451,5351,5352,-5464,5442,5469,5390,-5437,5328,5329,5324,-5326,5446,5445 ,5328,-5326,5301,5317,5469,-5330,5329,5469,5442,-5325,5423,5460,5335,-5471,5428,5439,5435,-5441,5440,5441,5427,-5429 ,5436,5430,5427,-5442,5745,5746,5435,-5440,5471,5460,5424,-5473,5470,5335,5336,-5345,5344,5336,5334,-5344,5423,5470 ,5742,-5744,5473,5472,5424,-5745,5470,5344,5345,-5743,5474,5475,5409,-5411,5475,5420,5395,-5410,6502,6503,5739,-5358 ,5400,5397,5732,-5454,5367,5400,5453,-5370,5366,5367,5369,-5371,5318,5733,5382,-5320,5382,5733,5387,-5372,5414,5452 ,5477,-5445,5478,5480,5479,-5468,5479,5455,5456,-5324,6513,5315,5445,-5482,5481,5445,5446,-5483,5454,5455,5484,-5484 ,5455,5479,5480,-5485,5458,5460,5471,-5486,5486,5489,5488,-5488,5490,5492,5491,-5488,5493,5496,5495,-5495,5497,5500 ,5499,-5499,5420,5475,5502,-5502,5503,5506,5505,-5505,5502,5509,5508,-5508,5510,5504,5505,-5512,5498,5496,5512,-5498 ,5492,5490,5499,-5501,5465,5485,5487,-5489,5464,5465,5488,-5514,5514,5464,5513,-5516,5472,5499,5490,-5472,5516,5494 ,5517,-5502,5508,5509,5506,-5504,5475,5474,5509,-5503,5518,5510,5511,-5520,5520,5518,5519,-5522,5478,5514,5515,-5523 ,5480,5478,5522,-5524,5524,5520,5521,-5526,5526,5524,5525,-5524,5507,5516,5501,-5503,5443,5505,5506,-5414,5443,5444 ,5511,-5506,5509,5474,5413,-5507,5444,5477,5519,-5512,5477,5483,5521,-5520,5527,5526,5523,-5523,5483,5484,5525,-5522 ,5484,5480,5523,-5526,5419,5420,5501,-5518,5419,5517,5495,-5435,5434,5495,5496,-5439,5473,5438,5496,-5499,5485,5471 ,5490,-5488,5513,5488,5489,-5529,5528,5529,5515,-5514,5529,5527,5522,-5516,5333,6502,5357,-5333,5323,5456,5457,-5323 ,5456,5447,5448,-5458,5317,5310,5390,-5470,5314,5319,5382,-5384,5532,5533,5486,-5492,5533,5534,5489,-5487,5512,5493 ,5536,-5536,5500,5497,5538,-5538,5539,5507,5508,-5541,5541,5542,5540,-5509,5504,5510,5544,-5544,5542,5546,5545,-5541 ,5547,5535,5536,-5495,5548,5551,5550,-5550,5552,5554,5545,-5554,5555,5534,5533,-5557,5554,5552,5557,-5536,5556,5559 ,5558,-5556,5556,5532,5560,-5560,5549,5535,5557,-5549,5549,5537,5538,-5536,5500,5537,5561,-5493,5550,5561,5537,-5550 ,5551,5560,5532,-5551,5543,5544,5563,-5563,5543,5562,5541,-5504,5542,5541,5562,-5565,5565,5568,5567,-5567,5510,5518 ,5569,-5545,5566,5571,5570,-5566,5571,5566,5573,-5573,5574,5576,5534,-5576,5562,5563,5577,-5565,5578,5581,5580,-5580 ,5582,5585,5584,-5584,5586,5589,5588,-5588,5735,5684,5592,-5737,5593,5586,5587,-5595,5595,5598,5597,-5597,5599,5595 ,5596,-5601,5601,5604,5603,-5603,5603,5579,5606,-5606,5607,5606,5579,-5581,5598,5609,5608,-5598,5610,5613,5612,-5612 ,5614,5617,5616,-5616,5618,5619,5598,-5596,5618,5622,5621,-5621,5623,5624,5613,-5611,5122,5121,5625,-5625,5123,5122 ,5624,-5624,5626,5627,5126,-5126,5628,5629,5128,-5128,5132,5131,-5631,5630,5131,5632,-5632,5633,5636,5635,-5635,5637 ,5639,5631,-5639,5630,5631,5639,-5641,5132,5630,5640,-5134,5637,5638,5606,-5608,5641,5643,5594,-5643,5737,5736,5592 ,-5645,5590,5591,5587,-5589,5591,5642,5594,-5588,5634,5635,5581,-5579,5634,5646,5645,-5634,5647,5649,5605,-5649,5646 ,5604,5601,-5651,5651,5654,5653,-5653,5655,5656,5653,-5655,5617,5614,5657,-5590,5658,5659,5615,-5617,5660,5116,5661 ,-5659,5133,5640,5661,-5116,5662,5665,5664,-5664,5666,5669,5668,-5668,5667,5671,5670,-5667,5578,5579,5603,-5605,5647 ,5674,5673,-5673,5675,5668,5650,-5602,5671,5677,5676,-5671,5670,5679,5678,-5667,5680,5632,5131,-5131,5648,5638,5631 ,-5633,5646,5634,5578,-5605,5737,5644,5681,-5739,5559,5683,5682,-5559,5592,5684,5557,-5553,5685,5683,5559,-5561,5557 ,5684,5686,-5549,5553,5644,5592,-5553,5686,5687,5551,-5549,5558,5682,5665,-5663,5688,5689,5568,-5566,5565,5570,5690 ,-5689,5652,5693,5692,-5692,5564,5577,5695,-5695,5691,5696,5651,-5653,5694,5695,5691,-5693,5570,5574,5575,-5691,5575 ,5662,5663,-5691,5555,5558,5662,-5576,5564,5694,5546,-5543,5644,5553,5546,-5682,5663,5664,5698,-5698,5518,5520,5573 ,-5570,5520,5524,5572,-5574,5699,5697,5698,-5701,5700,5698,5678,-5702,5701,5678,5679,-5656,5600,5702,5656,-5600,5667 ,5668,5675,-5672,5703,5675,5601,-5603,5645,5650,5668,-5670,5702,5600,5643,-5642,5702,5641,5704,-5654,5705,5706,5656 ,-5656,5670,5676,5707,-5680,5708,5711,5710,-5710,5596,5597,5593,-5644,5597,5608,5586,-5594,5618,5713,5712,-5620,5714 ,5609,5619,-5713,5689,5695,5577,-5569,5568,5577,5563,-5568,5705,5621,5622,-5707,5583,5686,5684,-5736,5582,5590,5588 ,-5716,5715,5588,5589,-5658,5130,5129,5717,-5681,5687,5685,5560,-5552,5585,5635,5636,-5585,5585,5715,5581,-5636,5674 ,5680,5717,-5719,5629,5628,5720,-5720,5721,5722,5718,-5718,5116,5115,-5662,5705,5707,5723,-5622,5118,5714,5712,-5120 ,5708,5709,5610,-5612,5716,5623,5610,-5710,5620,5723,5612,-5614,5713,5620,5613,-5626,5119,5713,5625,-5121,5627,5628 ,5127,-5127,5722,5721,5629,-5720,5677,5671,5675,-5704,5724,5711,5676,-5678,5724,5677,5703,-5726,5649,5725,5703,-5603 ,5649,5602,5603,-5606,5696,5691,5695,-5690,5569,5573,5566,-5568,5544,5569,5567,-5564,5706,5622,5595,-5600,5640,5639 ,5659,-5662,5574,5571,5572,-5727,5524,5526,5726,-5573,5714,5118,5117,-5661,5714,5660,5616,-5610,5704,5738,5681,-5694 ,5652,5653,5704,-5694,5698,5664,5666,-5679,5669,5666,5664,-5666,5682,5645,5669,-5666,5633,5645,5682,-5684,5636,5633 ,5683,-5686,5584,5636,5685,-5688,5583,5584,5687,-5687,5688,5690,5663,-5698,5721,5717,5129,5128,-5630,5639,5637,5615 ,-5660,5637,5607,5614,-5616,5580,5657,5614,-5608,5581,5715,5657,-5581,5700,5651,5696,-5700,5701,5654,5651,-5701,5507 ,5539,5547,-5517,5576,5726,5526,-5528,5534,5576,5527,-5530,5330,6504,5530,-5334,5333,5530,-5532,5333,5531,-6503,5394 ,5395,-5421,5361,5731,-5728,5361,5362,-5410,5337,5347,5377,-5335,5359,5407,5358,-5361,5306,5403,5381,-5385,5405,5363 ,-5399,5436,5441,-5443,5343,5331,-5333,5416,5418,5415,-5415,5448,5375,-5458,5459,5458,-5486,5466,5459,-5466,5460,5423 ,-5425,5452,5450,5447,-5455,5448,5449,-5366,5385,5308,-5752,5459,5485,-5466,5464,5514,-5468,5320,5321,5402,-5463,5401 ,5351,5451,-5390,5433,5745,5439,-5433,5421,5437,5473,-5745,5345,5741,5393,-5743,5343,5334,-5332,5387,5733,-5732,5467 ,5479,5323,-5321,5514,5478,-5468,5476,5354,-5356,5353,5482,-5447,5443,5413,-5413,5413,5474,-5411,5454,5483,5477,-5453 ,5438,5473,-5438,5491,5486,-5488,5493,5512,-5497,5494,5495,-5518,5498,5499,-5473,5472,5473,-5499,5561,5532,-5492,5550 ,5532,-5562,5561,5491,-5493,5493,5494,-5537,5538,5512,-5536,5543,5503,-5505,5540,5545,-5540,5497,5512,-5539,5533,5532 ,-5557,5553,5545,-5547,5547,5539,5545,-5555,5494,5516,-5548,5508,5503,-5542,5681,5692,-5694,5646,5650,-5646,5617,5609 ,-5617,5619,5609,-5599,5648,5632,-5681,5120,5625,-5122,5643,5593,-5595,5585,5582,-5716,5707,5611,-5613,5660,5658,-5617 ,5711,5672,-5674,5673,5718,-5712,5707,5708,-5612,5720,5711,-5720,5605,5606,-5639,5716,5709,-5711,5546,5694,-5693,5555 ,5575,-5535,5692,5681,-5547,5576,5574,-5727,5707,5655,-5680,5702,5653,-5657,5643,5600,-5597,5722,5711,-5719,5125,5124 ,5716,-5627,5608,5589,-5587,5624,5625,-5614,5707,5705,-5656,5608,5609,-5618,5626,5716,-5711,5627,5626,-5711,5716,5124 ,5123,-5624,5674,5648,-5681,5673,5674,-5719,5627,5710,5720,-5629,5620,5621,-5724,5713,5618,-5621,5712,5713,-5120,5707 ,5711,-5709,5707,5612,-5724,5647,5725,-5650,5711,5724,-5673,5647,5648,-5675,5710,5711,-5721,5711,5722,-5720,5647,5672 ,-5726,5672,5724,-5726,5676,5711,-5708,5688,5699,-5690,5661,5659,-5659,5656,5706,-5600,5618,5595,-5623,5571,5574,-5571 ,5589,5608,-5618,5605,5638,-5649,5697,5699,-5689,5689,5699,-5697,5701,5655,-5655,5535,5547,-5555,5528,5489,-5535,5529 ,5528,-5535,5731,5734,5729,-5728,5583,5735,5590,-5583,5736,5591,5590,-5736,5642,5591,5736,-5738,5642,5737,5738,-5642 ,5704,5641,-5739,5355,5739,6503,-5477,5356,5740,5739,-5356,5392,5741,5740,-5357,5393,5741,5392,-5748,5743,5742,5393 ,-5423,5421,5744,5743,-5423,5437,5421,5745,-5434,5421,5422,5746,-5746,5393,5747,5746,-5423,5334,5748,-5332,5748,5334 ,5377,-5750,5750,5749,5377,-5379,5750,5378,5385,-5752,5753,5754,5755,-5757,5757,5758,5759,-5761,5301,5302,5761,-5763 ,6508,6500,5765,6510,-6512,6499,6500,6508,-5768,5768,5769,5770,-5772,5759,5772,5773,-5761,5760,5773,5774,-5776,5776 ,5777,5778,-5780,5780,5781,5771,-5771,5782,5783,5784,-5786,5772,5759,6507,-6507,5786,5787,5772,-6507,5779,5788,5764 ,-5777,5790,5791,5789,-5838,5789,6484,5792,-5794,5790,5794,5795,-5792,5796,5797,5798,-5800,5791,5795,6485,-6487,5802 ,5803,5804,-5806,5791,6486,6484,-5790,5797,5806,5807,-5802,5782,5808,5809,-5784,5303,5304,5810,-5812,5812,5755,5754 ,-5811,5803,5802,5813,-5815,5305,6487,5815,-5307,5816,5308,5307,-5818,6488,5818,5819,-5793,5811,5820,5309,-5304,5310 ,5821,5822,-5312,5823,5787,5779,-5779,5823,5824,5774,-5774,5787,5823,5773,-5773,5819,5805,5825,-5827,5805,5804,5827 ,-5826,6485,5795,5828,-6490,5794,5829,5828,-5796,5829,5830,5831,-5829,5815,6487,5801,-5808,5820,5832,5312,-5310,5832 ,5817,5307,-5313,5754,5833,5811,-5811,5812,5810,5304,-5404,5794,5790,5834,-5836,5830,5829,5835,-5837,5790,5837,5838 ,-5835,5839,5840,5841,-5794,5842,5841,5840,-5844,5846,5844,5845,-5849,5845,5847,5836,-5849,5836,5835,5834,-5849,5838 ,5846,5848,-5835,5849,5850,5825,-5828,5851,5852,5853,-5855,5311,5822,5855,-5314,5856,5857,5858,-5860,5822,5860,5861 ,-5856,5313,5855,5814,-5315,5855,5861,5803,-5815,5857,5856,5861,-5861,5849,5862,5863,-5865,5824,5852,5865,-5775,5821 ,5866,5860,-5823,5867,5868,5864,-5864,5861,5856,5804,-5804,5863,5862,5869,-5868,5870,5871,5872,-5776,5870,5775,5774 ,-5866,5837,5789,5793,-5842,5842,5873,5846,-5839,5841,5842,5838,-5838,5874,5844,5846,-5874,5787,5786,5788,-5780,5819 ,5818,5802,-5806,5315,5875,5761,-5303,6507,5759,5758,-5877,5877,5878,5879,-5881,5816,5751,-5309,5775,5872,5757,-5761 ,5881,5820,5811,-5834,5792,5819,5826,-5840,5882,5880,5845,-5845,5847,5799,5830,-5837,5797,5796,5878,-5807,5879,5847 ,5845,-5881,5799,5798,5831,-5831,5869,5862,5859,-5859,5859,5827,5804,-5857,5862,5849,5827,-5860,5884,5885,5886,-5878 ,5755,5812,5815,-5808,5887,5755,5807,-5807,5888,5771,5781,-5890,5771,5888,5890,-5769,5770,5769,5766,-5892,5879,5796 ,5799,-5848,5815,5812,5403,-5307,5881,5833,5893,-5895,5895,5896,5897,-5899,6497,5892,-6497,5783,5817,5832,-5785,5817 ,5783,5809,-5817,5753,5898,5897,-5894,5893,5897,5889,-5895,5780,5782,5785,-5782,5780,5891,5808,-5783,5781,5785,5894 ,-5890,5881,5894,5785,-5785,5872,5866,5821,-5900,5761,5758,5757,-5763,5876,5758,5761,-5876,5301,5762,5899,-5318,5762 ,5757,5872,-5900,5853,5900,5768,-5891,5858,5870,5865,-5870,5870,5858,5857,-5872,5866,5871,5857,-5861,5851,5869,5865 ,-5853,5901,5902,5854,-5891,5900,5777,5769,-5769,5777,5776,5766,-5770,5853,5852,5824,-5901,5903,5851,5854,-5903,5900 ,5824,5778,-5778,5904,5840,5839,-5906,5905,5839,5826,-5851,6509,5788,5786,-5753,5831,5883,6489,-5829,5798,5800,5883 ,-5832,5797,5801,5800,-5799,5318,5319,5813,-6491,5813,5802,5818,-6491,5844,5874,5906,-5883,5884,5882,5906,-5913,5907 ,5898,5908,-5910,5908,5756,5886,-5886,6498,6499,5767,-5911,6513,5911,5875,-5316,5911,6505,5876,-5876,5884,5912,5913 ,-5886,5885,5913,5909,-5909,5888,5914,5901,-5891,5915,5916,5917,-5919,5919,5916,5920,-5922,5922,5923,5924,-5926,5926 ,5927,5928,-5930,5850,5930,5931,-5906,5932,5933,5934,-5936,5931,5936,5937,-5939,5939,5940,5934,-5934,5927,5926,5941 ,-5926,5921,5929,5928,-5920,5896,5917,5916,-5915,5895,5942,5917,-5897,5943,5944,5942,-5896,5902,5901,5919,-5929,5945 ,5930,5946,-5924,5937,5932,5935,-5939,5905,5931,5938,-5905,5947,5948,5940,-5940,5949,5950,5948,-5948,5907,5951,5944 ,-5944,5909,5952,5951,-5908,5953,5954,5950,-5950,5955,5952,5954,-5954,5936,5931,5930,-5946,5873,5843,5935,-5935,5873 ,5934,5940,-5875,5938,5935,5843,-5905,5874,5940,5948,-5907,5906,5948,5950,-5913,5956,5951,5952,-5956,5912,5950,5954 ,-5914,5913,5954,5952,-5910,5849,5946,5930,-5851,5849,5864,5924,-5947,5864,5868,5925,-5925,5903,5927,5925,-5869,5914 ,5916,5919,-5902,5942,5957,5918,-5918,5957,5942,5944,-5959,5958,5944,5951,-5957,5765,5764,5788,-6510,5756,5755,5887 ,-5887,5886,5887,5878,-5878,5317,5899,5821,-5311,5314,5814,5813,-5320,5960,5920,5915,-5962,5961,5915,5918,-5963,5941 ,5963,5964,-5923,5929,5965,5966,-5927,5967,5968,5937,-5937,5969,5937,5968,-5971,5933,5971,5972,-5940,5970,5968,5973 ,-5975,5975,5923,5964,-5964,5976,5977,5978,-5980,5980,5981,5973,-5983,5983,5984,5961,-5963,5982,5963,5985,-5981,5984 ,5983,5986,-5988,5984,5987,5988,-5961,5977,5976,5985,-5964,5977,5963,5966,-5966,5929,5921,5989,-5966,5978,5977,5965 ,-5990,5979,5978,5960,-5989,5971,5990,5991,-5973,5971,5932,5969,-5991,5970,5992,5990,-5970,5993,5994,5995,-5997,5939 ,5972,5997,-5948,5994,5993,5998,-6000,5999,6000,6001,-5995,6002,6003,5962,-6005,5990,5992,6005,-5992,6006,6007,6008 ,-6010,6010,6011,6012,-6014,6014,6015,6016,-6018,6492,6493,6020,-6193,6021,6022,6015,-6015,6023,6024,6025,-6027,6027 ,6028,6024,-6024,6029,6030,6031,-6033,6031,6033,6034,-6008,6035,6008,6007,-6035,6026,6025,6036,-6038,6038,6039,6040 ,-6042,6042,6043,6044,-6046,6046,6023,6026,-6048,6046,6048,6049,-6051,6051,6038,6041,-6053,6053,6052,6054,-6056,6056 ,6051,6052,-6054,6057,6058,6059,-6061,6056,6061,6062,-6064,6064,6065,6066,-6068,6068,6069,6070,-6072,6072,6073,6074 ,-6076,6076,6077,6062,-6062,6078,6064,6067,-6080,6080,6068,6071,-6082,6082,6083,6084,-6086,6086,6087,6088,-6090,6090 ,6091,6073,-6073,6092,6093,6073,-6092,6094,6095,6096,-6098,6098,6099,6078,-6080,6080,6081,6100,-6102,6085,6102,6103 ,-6105,6105,6106,6088,-6088,6107,6108,6109,-6093,6110,6070,6069,-6112,6082,6112,6113,-6084,6112,6114,6115,-6114,6094 ,6116,6117,-6119,6103,6119,6120,-6105,6106,6105,6121,-6123,6108,6107,6123,-6125,6125,6099,6098,-6127,6127,6095,6094 ,-6119,6128,6129,6130,-6132,6132,6133,6114,-6135,6112,6135,6134,-6115,6082,6086,6135,-6113,6087,6086,6082,-6086,6104 ,6120,6136,-6138,6132,6035,6034,-6134,6138,6139,6022,-6141,6494,6141,6020,-6494,6018,6016,6015,-6020,6019,6015,6022 ,-6140,6055,6093,6076,-6054,6129,6006,6009,-6131,6129,6128,6142,-6144,6144,6145,6033,-6147,6143,6147,6029,-6033,6148 ,6149,6150,-6152,6152,6151,6150,-6154,6045,6017,6154,-6043,6155,6044,6043,-6157,6157,6155,6158,-6076,6086,6089,6158 ,-6136,6159,6160,6161,-6163,6163,6164,6165,-6167,6164,6163,6167,-6169,6006,6032,6031,-6008,6144,6169,6170,-6172,6172 ,6029,6147,-6166,6168,6167,6173,-6175,6167,6163,6175,-6177,6177,6178,6179,-6181,6181,6182,6179,-6179,6103,6102,6183 ,-6185,6101,6100,6185,-6187,6187,6188,6113,-6116,6145,6115,6114,-6134,6143,6032,6006,-6130,6494,6495,6189,-6142,5987 ,5986,6190,-6192,6020,5980,5985,-6193,6193,5988,5987,-6192,5985,5976,6194,-6193,5981,5980,6020,-6142,6194,5976,5979 ,-6196,5986,6159,6162,-6191,6196,5993,5996,-6198,5993,6196,6198,-5999,6149,6199,6200,-6202,5992,6202,6203,-6006,6199 ,6149,6148,-6205,6202,6200,6199,-6204,5998,6198,6003,-6003,6003,6198,6160,-6160,5983,6003,6159,-5987,5992,5970,5974 ,-6203,6141,6189,5974,-5982,6160,6205,6206,-6162,5947,5997,6001,-5950,5949,6001,6000,-5954,6207,6208,6206,-6206,6208 ,6209,6175,-6207,6209,6152,6176,-6176,6028,6027,6153,-6211,6164,6168,6172,-6166,6211,6030,6029,-6173,6142,6166,6165 ,-6148,6210,6138,6140,-6029,6210,6150,6212,-6139,6213,6152,6153,-6215,6167,6176,6215,-6174,6216,6217,6218,-6220,6024 ,6140,6021,-6026,6025,6021,6014,-6037,6046,6047,6220,-6222,6222,6220,6047,-6038,6197,5996,6005,-6204,5996,5995,5991 ,-6006,6213,6214,6050,-6050,6011,6492,6192,-6195,6010,6223,6016,-6019,6223,6154,6017,-6017,6077,6076,6092,-6110,6224 ,6107,6092,-6092,6058,6057,6225,-6066,6058,6065,6064,-6178,6064,6078,6178,-6178,6181,6178,6078,-6100,6059,6180,6226 ,-6228,6228,6226,6180,-6180,6179,6182,6229,-6229,6182,6230,6231,-6230,6067,6066,6063,-6063,6096,6079,6067,-6063,6096 ,6095,6098,-6080,6095,6127,6126,-6099,6188,6187,6232,-6234,6234,6068,6080,-6184,6184,6183,6080,-6102,6184,6101,6186 ,-6120,6120,6119,6235,-6237,6235,6237,6238,-6237,6239,6240,6241,-6243,6243,6238,6237,-6245,6245,6243,6246,-6248,6248 ,6246,6244,-6250,6238,6243,6245,-6251,6251,6246,6248,-6253,6253,6254,6251,-6256,6251,6252,6256,-6256,6257,6255,6258 ,-6260,6258,6255,6260,-6262,6258,6262,6263,-6265,6265,6266,6262,-6259,6264,6263,6267,-6269,6269,6268,6267,-6271,6271 ,6272,6268,-6274,6274,6254,6253,-6273,6275,6276,6274,-6273,6277,6278,6279,-6281,6278,6281,6282,-6280,6283,6279,6284 ,-6286,6286,6284,6279,-6288,6288,6289,6290,-6285,6288,6284,6291,-6293,6290,6289,6293,-6295,6293,6295,6296,-6295,6297 ,6298,6299,-6295,6280,6299,6300,-6278,6300,6299,6301,-6303,6303,6304,6305,-6307,6304,6307,6308,-6306,6309,6310,6311 ,-6306,6312,6311,6313,-6315,6313,6311,6315,-6317,6317,6318,6312,-6315,6317,6319,6320,-6319,6321,6322,6318,-6324,6324 ,6323,6318,-6326,6326,6327,6323,-6329,6327,6326,6329,-6331,6329,6331,6332,-6331,6333,6332,6334,-6336,6332,6331,6336 ,-6335,6337,6334,6338,-6340,6340,6341,6342,-6339,6340,6338,6343,-6345,6345,6346,6342,-6342,6347,6346,6345,-6349,6335 ,6349,6350,-6334,6350,6349,6351,-6353,6352,6353,6354,-6351,6354,6355,6356,-6358,6358,6359,6360,-6362,6359,6355,6362 ,-6361,6363,6364,6365,-6367,6367,6365,6364,-6359,6368,6366,6369,-6371,6369,6367,6371,-6371,6372,6373,6368,-6371,6370 ,6371,6374,-6373,6375,6376,6373,-6373,6374,6377,6375,-6373,6378,6379,6376,-6381,6378,6380,6377,-6382,6382,6383,6379 ,-6379,6378,6381,6384,-6383,6385,6386,6383,-6383,6385,6382,6384,-6388,6388,6389,6386,-6386,6387,6390,6388,-6386,6391 ,6389,6388,-6393,6390,6393,6392,-6389,6394,6395,6396,-6124,6397,6398,6399,-6401,6397,6118,6117,-6399,6379,6383,6366 ,-6369,6368,6373,6376,-6380,6386,6389,6363,-6367,6401,6236,6238,-6251,6247,6402,6403,-6246,6371,6367,6384,-6382,6381 ,6377,6374,-6372,6367,6358,6390,-6388,6393,6390,6358,-6362,6404,6397,6400,-6406,6397,6404,6127,-6119,6406,6231,6230 ,-6408,6406,6407,6408,-6410,6410,6411,6412,-6414,6414,6415,6276,-6417,6414,6416,6248,-6418,6353,6418,6419,-6421,6351 ,6421,6422,-6337,6423,6347,6343,-6425,6347,6348,6344,-6344,6425,6326,6426,-6428,6428,6411,6410,-6430,6328,6324,6309 ,-6309,6325,6310,6309,-6325,6325,6320,6315,-6311,6320,6319,6316,-6316,6430,6281,6412,-6412,6430,6411,6428,-6303,6287 ,6282,6301,-6299,6296,6291,6286,-6298,6292,6291,6296,-6296,6271,6260,6256,-6276,6261,6260,6271,-6274,6269,6265,6261 ,-6274,6419,6418,6331,-6432,6242,6237,6235,-6240,6244,6237,6242,-6250,6432,6433,6434,-6436,6435,6125,6126,-6433,6436 ,6437,6419,-6432,6181,6099,6125,-6439,6439,6438,6125,-6436,6435,6434,6437,-6440,6437,6434,6420,-6420,6195,5979,5988 ,-6194,6013,6012,6131,-6131,6013,6130,6009,-6224,6171,6440,6232,-6188,6111,6441,6442,-6111,6443,6232,6440,-6445,6445 ,6060,6059,-6228,6058,6177,6180,-6060,6107,6224,6446,-6124,6089,6088,6090,-6073,6075,6158,6089,-6073,6137,6136,6121 ,-6106,6085,6137,6105,-6088,6084,6234,6183,-6103,6213,6049,6447,-6216,6074,6448,6220,-6223,6216,6039,6038,-6218,6225 ,6217,6038,-6052,6063,6225,6051,-6057,6048,6041,6040,-6448,6221,6054,6041,-6049,6448,6449,6054,-6222,6450,6451,6438 ,-6440,6439,6437,6436,-6451,6450,6452,6429,-6454,6452,6436,6425,-6428,6453,6410,6413,-6455,6408,6413,6415,-6415,6407 ,6454,6413,-6409,6454,6407,6230,-6452,6414,6417,6409,-6409,6452,6427,6455,-6430,6426,6307,6455,-6428,6403,6456,6250 ,-6246,6457,6401,6250,-6457,6136,6120,6236,-6402,6353,6458,6362,-6355,6360,6362,6458,-6460,6400,6392,6393,-6406,6445 ,6110,6442,-6219,6227,6070,6110,-6446,6226,6071,6070,-6228,6081,6071,6226,-6229,6228,6460,6100,-6082,6460,6461,6185 ,-6101,6239,6185,6461,-6241,6229,6231,6461,-6461,6240,6461,6231,-6407,6240,6406,6409,-6242,6409,6417,6249,-6242,6444 ,6441,6111,-6444,6174,6211,6172,-6169,6462,6174,6173,-6220,6462,6463,6211,-6175,6146,6030,6211,-6464,6146,6033,6031 ,-6031,6204,6197,6203,-6200,5997,5995,5994,-6002,5972,5991,5995,-5998,6090,6088,6106,-6465,6464,6106,6122,-6466,6121 ,6466,6465,-6123,6090,6464,6224,-6092,6224,6464,6465,-6447,6214,6027,6023,-6051,6135,6158,6156,-6135,6093,6055,6449 ,-6074,6002,6467,6000,-6000,5953,6000,6467,-5956,6222,6157,6075,-6075,6222,6037,6044,-6158,6083,6113,6188,-6235,6212 ,6201,6189,-6496,6149,6201,6212,-6151,6206,6175,6163,-6162,6166,6162,6161,-6164,6190,6162,6166,-6143,6128,6191,6190 ,-6143,6131,6193,6191,-6129,6012,6195,6193,-6132,6011,6194,6195,-6013,6196,6205,6160,-6199,6268,6272,6257,-6260,6283 ,6285,6294,-6300,6311,6322,6321,-6306,6323,6327,6303,-6307,6424,6338,6334,-6423,6337,6339,6346,-6350,6346,6423,6421 ,-6350,6421,6423,6424,-6423,6287,6298,6297,-6287,6265,6269,6270,-6267,6392,6400,6399,-6392,6124,6117,6116,-6109,6396 ,6398,6117,-6125,6399,6398,6396,-6396,6391,6395,6394,-6469,6459,6433,6405,-6394,6432,6126,6127,-6405,6096,6062,6077 ,-6098,6111,6069,6469,-6444,6068,6234,6469,-6070,6469,6233,6232,-6444,6109,6108,6116,-6098,6134,6156,6043,-6133,6132 ,6043,6042,-6036,6008,6035,6042,-6155,6009,6008,6154,-6224,6208,6207,6204,-6149,6209,6208,6148,-6152,5936,5945,5975 ,-5968,6004,5956,5955,-6468,5962,5958,5956,-6005,5765,5959,-6511,5765,6509,-5960,5825,5850,-5827,5792,6484,-6489,5792 ,5839,-5794,5891,5780,-5771,5835,5829,-5795,5866,5872,-5872,5776,5764,-5764,5878,5887,-5807,5889,5914,-5889,5897,5896 ,-5890,5890,5854,-5854,5878,5796,-5880,5889,5896,-5915,5753,5893,5833,-5755,5898,5753,5756,-5909,5895,5898,-5944,5832 ,5820,5881,-5785,5869,5851,-5868,5867,5851,-5904,5778,5824,-5824,5776,5763,-5767,5818,6488,-6491,5943,5898,-5908,5752 ,5786,6506,-6513,6507,5876,-6506,5873,5842,-5844,5843,5840,-5905,5868,5867,-5904,5920,5916,-5916,5922,5925,-5942,5923 ,5946,-5925,5927,5902,-5929,5902,5927,-5904,5989,5920,-5961,5978,5989,-5961,5989,5921,-5921,5922,5964,-5924,5966,5963 ,-5942,5971,5933,-5933,5968,5967,-5974,5975,5982,5973,-5968,5926,5966,-5942,5961,5984,-5961,5981,5974,-5974,5923,5975 ,-5946,5937,5969,-5933,6189,6201,-6201,6143,6142,-6148,6045,6044,-6038,6047,6026,-6038,6145,6187,-6116,6449,6055,-6055 ,6184,6119,-6104,6137,6085,-6105,6140,6022,-6022,6013,6223,-6011,6215,6040,-6040,6076,6093,-6093,6157,6044,-6156,6219 ,6170,-6170,6170,6219,-6441,6215,6039,-6217,6442,6441,-6220,6083,6234,-6085,6033,6133,-6035,6225,6218,-6218,5974,6200 ,-6203,5983,5962,-6004,6200,5974,-6190,6004,6467,-6003,6215,6176,-6153,6210,6153,-6151,6140,6024,-6029,6444,6440,-6220 ,6225,6066,-6066,6036,6014,-6018,6052,6041,-6055,6215,6152,-6214,6036,6045,-6038,6057,6218,-6226,6060,6218,-6058,6225 ,6063,-6067,6171,6187,-6146,6234,6188,-6234,6239,6119,-6187,6239,6186,-6186,6246,6243,-6245,6251,6254,-6248,6247,6246 ,-6252,6257,6253,-6256,6255,6256,-6261,6261,6265,-6259,6262,6470,-6264,6266,6470,-6263,6470,6267,-6264,6270,6267,-6471 ,6266,6270,-6471,6264,6268,-6260,6268,6269,-6274,6272,6253,-6258,6271,6275,-6273,6276,6471,-6275,6277,6472,-6472,6471 ,6278,-6278,6473,6412,-6282,6281,6278,-6472,6472,6247,-6255,6254,6274,-6472,6473,6415,-6413,6283,6280,-6280,6279,6282 ,-6288,6284,6286,-6292,6290,6285,-6285,6288,6474,-6290,6292,6474,-6289,6474,6293,-6290,6295,6293,-6475,6474,6292,-6296 ,6294,6285,-6291,6296,6297,-6295,6280,6283,-6300,6298,6301,-6300,6303,6475,-6403,6402,6277,-6304,6476,6302,-6429,6302 ,6476,-6301,6304,6300,-6477,6307,6304,-6477,6455,6476,-6429,6303,6277,-6305,6304,6277,-6301,6321,6306,-6306,6305,6308 ,-6310,6311,6310,-6316,6312,6322,-6312,6313,6477,-6315,6316,6477,-6314,6477,6317,-6315,6319,6317,-6478,6477,6316,-6320 ,6318,6322,-6313,6320,6325,-6319,6306,6321,-6324,6328,6323,-6325,6327,6478,-6304,6478,6479,-6476,6475,6303,-6479,6478 ,6333,-6480,6333,6357,-6480,6478,6332,-6334,6337,6335,-6335,6422,6334,-6337,6338,6424,-6344,6342,6339,-6339,6340,6480 ,-6342,6344,6480,-6341,6480,6345,-6342,6348,6345,-6481,6480,6344,-6349,6346,6339,-6343,6347,6423,-6347,6349,6335,-6338 ,6421,6351,-6350,6357,6333,-6351,6350,6354,-6358,6356,6479,-6358,6362,6355,-6355,6363,6481,-6483,6482,6364,-6364,6358 ,6364,-6360,6359,6364,-6483,6482,6356,-6356,6355,6359,-6483,6365,6369,-6367,6367,6369,-6366,6375,6380,-6377,6377,6380 ,-6376,6394,6123,-6467,6396,6124,-6124,6383,6386,-6367,6468,6481,-6364,6363,6389,-6469,6483,6481,-6469,6468,6466,-6484 ,6466,6123,-6447,6121,6457,-6467,6457,6483,-6467,6401,6457,-6122,6483,6457,-6457,6456,6481,-6484,6481,6456,-6483,6472 ,6402,-6248,6479,6356,-6404,6403,6475,-6480,6403,6402,-6476,6402,6472,-6278,6356,6482,-6457,6456,6403,-6357,6367,6387 ,-6385,6241,6249,-6243,6417,6248,-6250,6418,6353,-6353,6353,6420,-6459,6458,6433,-6460,6252,6248,-6417,6331,6418,-6337 ,6351,6418,-6353,6331,6329,-6432,6329,6326,-6426,6433,6420,-6435,6426,6328,-6309,6328,6426,-6327,6420,6433,-6459,6256 ,6252,-6417,6282,6281,-6431,6430,6301,-6283,6301,6430,-6303,6472,6254,-6472,6308,6307,-6427,6351,6336,-6419,6181,6451 ,-6183,6454,6451,-6454,6453,6429,-6411,6136,6401,-6122,6170,6440,-6172,6445,6218,-6061,6085,6084,-6103,6048,6447,-6050 ,6221,6048,-6047,6220,6448,-6222,6215,6216,-6220,6215,6447,-6041,6453,6451,-6451,6429,6455,-6429,6182,6451,-6231,6181 ,6438,-6452,6450,6436,-6453,6425,6436,-6432,6329,6425,-6432,6307,6476,-6456,6415,6413,-6413,6473,6276,-6416,6275,6416 ,-6277,6256,6416,-6276,6471,6473,-6282,6276,6473,-6472,6330,6332,-6479,6327,6330,-6479,6235,6119,-6240,6468,6394,-6467 ,6361,6360,-6460,6393,6361,-6460,6144,6146,-6464,6219,6169,-6463,6144,6171,-6146,6218,6442,-6220,6460,6228,-6230,6219 ,6441,-6445,6074,6073,-6449,6448,6073,-6450,6144,6463,-6170,6169,6463,-6463,6173,6215,-6220,6196,6197,-6208,6466,6446 ,-6466,6158,6155,-6157,6153,6027,-6215,6046,6050,-6024,5999,5998,-6003,6017,6045,-6037,6033,6145,-6134,6205,6196,-6208 ,6259,6258,-6265,6391,6399,-6396,6389,6391,-6469,6404,6405,-6434,6433,6432,-6405,6094,6097,-6117,6077,6109,-6098,6234 ,6233,-6470,6197,6204,-6208,6209,6151,-6153,6056,6053,-6062,6061,6053,-6077,5963,5982,-5976,5957,5962,-5919,5958,5962 ,-5958,6488,6484,6486,-6492,6011,6010,6018,-6493,6493,6492,6018,-6020,6139,6494,6493,-6020,6139,6138,6495,-6495,6212 ,6495,-6139,5316,5751,6496,-5893,6497,6496,5809,-5809,5891,6498,6497,-5809,5891,5766,6499,-6499,5766,5763,6500,-6500 ,5765,6500,5763,-5765,5660,5117,-5117,6515,6590,6540,-6515,6539,6516,6514,-6541,6540,6541,-6540,6659,6684,6889,-6891 ,6544,6517,6516,-6540,6545,6544,6539,-6542,6546,6547,6916,-6918,6693,6548,6888,-6888,6661,6662,6659,-6661,6915,6548 ,6693,-6915,6521,6519,6549,-6561,6548,6547,6889,-6889,6916,6547,6548,-6916,6552,6694,6695,-6552,6553,6554,6552,-6552 ,6505,6556,6557,-6556,6695,6512,6506,-6552,6532,6664,6558,-6519,6537,6661,6660,-6534,6891,6892,6533,-6661,6559,6549 ,-6547,6559,6546,-6918,6505,6555,6554,-6554,6560,6561,6520,-6522,6559,6557,6560,-6550,6561,6560,6557,-6557,6556,6505 ,5911,-6562,6671,6905,6599,-6566,6682,6567,6568,-6682,6566,6668,6669,-6571,6601,6526,6535,-6667,6680,6538,6526,-6602 ,6572,6573,6910,-6912,6576,6574,-6910,6577,6529,6528,-6576,6648,6656,6652,-6654,6648,6653,6654,-6648,6635,6631,6641 ,-6690,6632,6563,6863,-6606,6568,6578,6680,-6682,6910,6573,6576,-6910,6668,6566,6569,-6668,6582,6692,6562,-6608,6583 ,6584,6585,-6587,6587,6580,6588,-6590,6632,6605,6900,-6902,6576,6573,6643,-6645,6647,6654,6655,-6647,6591,6655,6590 ,-6689,6592,6651,6652,6656,-6872,6574,6576,6644,6645,-6592,6855,6900,6605,-6631,6570,6904,6682,-6567,6902,6597,-6565 ,6610,6865,6600,6581,-6650,6588,6580,6690,-6692,6577,6574,6591,-6689,6686,6687,6886,-6886,6569,6601,6666,-6668,6622 ,6603,6593,-6595,6618,6619,6586,-6586,6572,6642,6643,-6574,6642,6572,6689,-6642,6589,6588,-6605,6606,6607,6608,-6610 ,6608,6587,6589,-6610,6864,6582,6607,-6607,6679,6611,6612,-6679,6613,6612,6611,-6615,6614,6615,6616,-6614,6658,6550 ,6617,-6658,6618,6523,6522,-6620,6619,6522,5316,-5893,6586,6619,5892,-5911,5767,6508,6583,-6587,6510,6611,6679,-6512 ,6614,6611,6510,-5960,6509,6615,6614,-5960,5752,6550,6658,6615,-6510,6563,6600,6865,-6864,6884,6885,6600,-6564,6564 ,6884,6563,-6633,6623,6621,6603,-6623,6628,6624,6618,-6586,6624,6524,6523,-6619,6625,6626,6613,-6617,6627,6628,6585 ,-6585,6612,6629,6677,-6679,6626,6629,6612,-6614,6594,6531,6524,-6625,6622,6594,6624,-6629,6627,6623,6622,-6629,6629 ,6596,6676,-6678,6626,6597,6596,-6630,6625,6620,6597,-6627,6621,6672,6673,-6604,6593,6603,6673,-6675,6593,6674,6536 ,-6531,6570,6669,6670,-6596,6620,6686,6885,-6885,6625,6912,6686,-6621,6507,6505,-6554,5911,6513,6520,-6562,6688,6534 ,6529,-6578,6562,6634,6587,-6609,6562,6608,-6608,6649,6582,6864,-6868,6609,6589,-6638,6676,6596,6598,-6676,6630,6605 ,6640,6868,-6637,6664,6665,6542,-6559,6593,6530,6531,-6595,6564,6632,6901,-6903,6634,6633,6580,-6588,6631,6866,6862 ,-6642,6862,6859,6642,-6642,6642,6859,6858,-6644,6643,6858,6861,-6645,6644,6861,6856,-6646,6646,6860,-6648,6648,6647 ,6860,-6858,6640,6605,6863,-6870,6637,6589,-6605,6604,6588,6650,-6639,6650,6588,6691,-6652,6652,6545,6541,-6654,6541 ,6540,6654,-6654,6590,6655,6654,-6541,6639,6651,-6593,6650,6651,6639,-6639,6610,6649,6867,-6871,6857,6854,6656,-6649 ,6871,6656,-6855,6615,6658,6657,-6617,6891,6660,6659,-6891,6518,6558,6661,-6538,6558,6542,6662,-6662,6663,6662,6542 ,-6544,6664,6532,6517,-6545,6665,6664,6544,-6546,6666,6535,6525,-6603,6666,6602,6579,-6668,6571,6668,6667,-6580,6668 ,6571,6565,-6670,6670,6669,6565,-6600,6571,6672,6671,-6566,6672,6571,6579,-6674,6673,6579,6602,-6675,6674,6602,6525 ,-6537,6888,6889,6684,-6686,6887,6888,6685,-6563,6885,6886,6581,-6601,6621,6675,6671,-6673,6677,6676,6623,-6628,6677 ,6627,6584,-6679,6583,6679,6678,-6585,6511,6679,6583,-6509,6623,6676,6675,-6622,6680,6601,6569,-6682,6566,6682,6681 ,-6570,6578,6527,6538,-6681,6684,6659,6662,-6664,6684,6663,6633,-6686,6562,6685,6633,-6635,6687,6686,6912,-6914,6515 ,6534,6688,-6591,6855,6683,6903,-6596,6543,6542,6665,-6691,6690,6665,6545,-6692,6652,6651,6691,-6546,6633,6663,-6544 ,6581,6692,6582,-6650,6581,6886,6887,-6693,6687,6693,6887,-6887,6693,6687,6913,-6915,6550,6695,6694,-6618,6550,5752 ,6512,-6696,5482,6709,6711,-6711,6713,6702,-6706,6844,6709,5482,-6846,6713,6711,6709,6922,-6703,6817,6841,6793,-6821 ,6894,6895,6841,-6818,6895,6896,6717,-6842,6713,6705,6714,-6712,6715,6710,6711,-6715,6710,6715,5481,-5483,6829,6828 ,6757,-6722,6736,6737,6718,-6793,6808,6807,6812,-6812,6729,6733,6804,-6804,6735,6724,6839,-6839,6757,6828,6736,-6793 ,6736,6828,6851,-6853,6766,6827,6753,-6874,6739,6740,6759,-6759,6841,6717,6794,-6794,6759,6740,6897,-6899,6760,6823 ,6535,-6527,6760,6725,6824,-6824,6853,6737,6736,-6853,6879,6767,-6742,6837,6836,6773,-6773,6774,6775,6772,-6774,6775 ,6774,6777,-6777,6816,6815,6778,-6708,6779,6780,6522,-6524,6780,6779,6744,-6746,6522,6780,5461,-5317,6780,6745,6501 ,5468,-5462,5530,6504,6837,-6773,6775,5531,5530,-6773,6502,5531,6775,-6777,6503,6502,6776,-6817,6778,6815,6918,-6920 ,6785,6779,6523,-6525,6752,6785,6524,-6532,6783,6789,6785,-6753,6790,6835,6834,-6755,6786,6787,6755,-6782,6777,6774 ,6787,-6787,6773,6836,6835,-6791,6744,6779,6785,-6790,6751,6832,6831,-6763,6735,6838,6538,-6528,6726,6753,6827,-6827 ,6724,6735,-6733,6721,6757,6756,-6834,6898,6899,6718,-6760,6759,6718,6737,-6759,5481,6715,6520,-6514,6709,6844,6921 ,-6923,6717,6795,-6795,6809,6797,6879,-6742,6769,6798,-6748,6786,6781,6842,-6919,6815,6777,6786,-6919,6731,6734,6730 ,-6733,6793,6794,6746,-6717,6795,6768,6746,-6795,6768,6795,6796,-6742,6739,6809,6741,-6797,6849,6801,6880,-6882,6801 ,6764,6882,-6881,6803,6804,6878,-6877,6806,6874,-6806,6808,6875,6877,-6808,6808,6811,6810,-6815,6771,6809,6739,-6759 ,6798,6765,-6748,6750,6747,-6766,6810,6811,6698,-6702,6698,6811,6812,-6698,6748,6697,6812,-6814,6800,6883,6814,-6811 ,6872,6875,6808,-6815,6883,6872,-6815,6776,6777,6815,-6817,6893,6894,6817,-6819,6819,6818,6817,-6821,6821,6712,6699 ,-6823,6701,6698,6696,-6701,6696,6697,6514,-6517,6521,6520,6715,-6715,6521,6714,6705,-6520,6537,6533,6818,-6820,6532 ,6518,6712,-6822,6700,6696,6516,-6518,6705,6702,6894,-6894,6519,6705,6893,-6893,6893,6818,6533,-6893,6712,6518,6537 ,-6820,6699,6712,6819,-6821,6535,6823,6761,-6526,6823,6824,6738,-6762,6720,6826,6827,-6852,6720,6851,6828,-6830,6831 ,6832,6761,-6739,6721,6833,-6783,6835,6788,6784,-6835,6835,6836,6743,-6789,6742,6743,6836,-6838,6504,5330,6742,-6838 ,6838,6760,6526,-6539,6838,6839,6725,-6761,6848,6908,-6847,6803,6876,6763,-6803,6729,6803,6802,-6729,6907,6723,6724 ,-6907,6839,6724,6723,-6841,6725,6839,6840,-6723,6824,6725,6722,-6826,6738,6824,6825,-6728,6831,6738,6727,-6831,6762 ,6831,6830,-6783,6789,6783,6784,-6789,6788,6743,6744,-6790,6745,6744,6743,-6743,5330,6501,6745,-6743,6700,6517,6532 ,-6822,6701,6700,6821,-6823,6920,6921,6844,-6707,6706,6844,6845,-6709,5353,5354,6708,-6846,6719,6899,6781,-6756,6833 ,6756,6754,-6835,6782,6833,6834,-6785,6784,6783,6762,-6783,6783,6752,6751,-6763,6751,6752,6531,-6531,6753,6726,6791 ,-6849,6846,6873,6753,-6849,6749,6847,6748,-6814,6804,6805,6874,-6879,6730,6749,6805,6804,-6734,6847,6749,6730,-6735 ,6751,6530,6536,-6833,6832,6536,6525,-6762,6735,6527,6528,-6732,6734,6731,6528,-6530,6847,6734,6529,-6535,6515,6748 ,6847,-6535,6515,6514,6697,-6749,6829,6721,6782,-6831,6720,6829,6830,-6728,6826,6720,6727,-6826,6726,6826,6825,-6723 ,6791,6726,6722,-6841,6791,6840,-6724,6801,6849,6728,-6803,6763,6764,6801,-6803,6848,6791,6723,6907,-6909,6750,6716 ,6746,-6748,6769,6747,6746,-6769,6822,6699,6793,-6717,6701,6822,6716,-6751,6701,6750,6799,6800,-6811,6820,6793,-6700 ,6739,6796,-6741,6896,6897,6740,-6718,6920,6706,6778,-6920,6707,6778,6706,-6709,5354,5476,6707,-6709,6756,6757,6792 ,-6720,6754,6756,6719,-6756,6790,6754,6755,-6788,6787,6774,6773,-6791,6758,6737,6853,-6772,6771,6850,6797,-6810,6770 ,6853,6852,-6767,6771,6853,6770,-6851,6852,6851,6827,-6767,6807,6806,6813,-6813,6546,6890,6889,-6548,6549,6891,6890 ,-6547,6519,6892,6891,-6550,6702,6704,6895,-6895,6704,6703,6896,-6896,6703,6843,6897,-6897,6842,6898,6897,-6844,6842 ,6781,6899,-6899,6750,6765,-6800,6646,6655,6591,-6646,6806,6805,6749,-6814,6597,6620,6884,-6565,6719,6792,6718,-6900 ,6670,6855,-6596,6900,6599,6905,-6902,6598,6596,6597,-6903,6900,6855,6670,-6600,6697,6696,-6699,6633,6543,6690,-6581 ,6887,6562,-6693,6768,6741,6767,-6770,6740,6796,6795,-6718,6595,6903,6904,-6571,6732,6730,-6734,6724,6732,-6907,6735 ,6731,-6733,6578,6575,6528,-6528,6689,6903,6683,-6636,6572,6911,6904,6903,-6690,6904,6567,-6683,6598,6905,6671,-6676 ,6901,6905,6598,-6903,6906,6732,6733,-6730,6728,6907,6906,-6730,6908,6907,6728,-6850,6846,6908,6849,-6882,6909,6574 ,6577,-6576,6568,6910,6909,-6579,6909,6575,-6579,6911,6910,6568,-6568,6904,6911,-6568,6657,6912,6625,-6617,6617,6913 ,6912,-6658,6694,6914,6913,-6618,6552,6915,6914,-6695,6554,6916,6915,-6553,6555,6917,6916,-6555,6559,6917,6555,-6558 ,6919,6918,6842,-6844,6703,6920,6919,-6844,6703,6704,6921,-6921,6922,6921,6704,-6703,6926,6939,6938,-6926,6938,6939 ,6941,-6941,6942,6945,6944,-6944,6946,6947,6940,-6942,6948,6950,6949,-6947,6951,6952,6947,-6950,6941,6953,6948,-6947 ,6954,6955,6951,-6950,6956,6958,6954,-6958,6954,6958,6959,-6956,6960,6962,6961,-6959,6961,6964,6963,-6959,6961,6967 ,6966,-6966,6968,6961,6965,-6970,6967,6971,6970,-6967,6972,6973,6970,-6972,6974,6976,6971,-6976,6977,6975,6956,-6958 ,6978,6975,6977,-6980,6980,6983,6982,-6982,6981,6982,6985,-6985,6986,6988,6987,-6983,6989,6990,6982,-6988,6991,6987 ,6993,-6993,6991,6995,6994,-6988,6993,6997,6996,-6993,6996,6997,6999,-6999,7000,6997,7002,-7002,6983,6980,7003,-7003 ,7003,7005,7004,-7003,7006,7009,7008,-7008,7007,7008,7011,-7011,7012,7008,7014,-7014,7015,7017,7016,-7015,7016,7019 ,7018,-7015,7020,7017,7015,-7022,7020,7021,7023,-7023,7024,7026,7021,-7026,7027,7028,7021,-7027,7029,7031,7026,-7031 ,7030,7033,7032,-7030,7032,7033,7035,-7035,7036,7038,7037,-7036,7035,7037,7039,-7035,7040,7042,7041,-7038,7043,7041 ,7045,-7045,7043,7047,7046,-7042,7048,7044,7045,-7050,7050,7051,7048,-7050,7038,7036,7053,-7053,7053,7055,7054,-7053 ,7055,7053,7057,-7057,7057,7060,7059,-7059,7061,7064,7063,-7063,7062,7063,7065,-7059,7066,7069,7068,-7068,7070,7061 ,7067,-7069,7071,7073,7072,-7070,7072,7073,7074,-7071,7075,7073,7071,-7077,7073,7075,7077,-7075,7078,7075,7076,-7080 ,7077,7075,7078,-7081,7081,7083,7079,-7083,7081,7084,7080,-7084,7085,7081,7082,-7087,7081,7085,7087,-7085,7088,7085 ,7086,-7090,7088,7090,7087,-7086,7091,7088,7089,-7093,7090,7088,7091,-7094,7094,7095,7091,-7093,7093,7091,7095,-7097 ,7097,6928,7099,-7099,7100,7103,7102,-7102,7100,7101,6923,-6925,7082,7071,7069,-7087,7071,7082,7079,-7077,7089,7069 ,7066,-7093,7104,6953,6941,-6940,6950,6948,7106,-7106,7074,7084,7087,-7071,7084,7074,7077,-7081,7070,7090,7093,-7062 ,7096,7064,7061,-7094,7107,7108,7103,-7101,7100,6924,6932,-7108,7109,7110,6936,-6938,7109,7112,7111,-7111,7113,7116 ,7115,-7115,7117,7119,6979,-7119,7117,7120,6951,-7120,7056,7123,7122,-7122,7054,7039,7125,-7125,7126,7127,7046,-7051 ,7050,7046,7047,-7052,7128,7130,7129,-7030,7131,7132,7113,-7115,7031,7011,7012,-7028,7028,7027,7012,-7014,7028,7013 ,7018,-7024,7023,7018,7019,-7023,7133,7114,7115,-6985,7133,7005,7131,-7115,6990,7001,7004,-6986,6999,7000,6989,-6995 ,6995,6998,6999,-6995,6974,6978,6959,-6964,6964,6976,6974,-6964,6972,6976,6964,-6969,7122,7134,7034,-7122,6945,6942 ,6938,-6941,6947,6952,6945,-6941,7135,7138,7137,-7137,7138,7135,6931,-6931,7139,7134,7122,-7141,7142,7138,6930,-7142 ,7138,7142,7140,-7138,7140,7122,7123,-7138,7144,7142,7141,-7146,7142,7144,7139,-7141,7144,7147,7132,-7147,7146,7130 ,7128,-7140,7147,7148,7116,-7114,7111,7117,7118,-7117,7110,7111,7116,-7149,7148,7145,6936,-7111,7117,7111,7112,-7121 ,7146,7132,7149,-7131,7129,7130,7149,-7011,7106,6948,6953,-7151,7151,7150,6953,-7105,6933,7104,6939,-6927,7056,7057 ,7065,-7153,7063,7153,7152,-7066,7103,7108,7096,-7096,6942,6943,7154,-6935,6943,7109,6937,-7155,6943,6944,7112,-7110 ,7112,6944,6952,-7121,6927,7155,-7157,6971,6962,6960,-6976,6986,7002,6997,-6989,7014,7008,7024,-7026,7026,7009,7006 ,-7031,7127,7125,7037,-7042,7040,7052,7049,-7043,7049,7052,7124,-7127,7124,7125,7127,-7127,6990,6989,7000,-7002,6968 ,6969,6973,-6973,7095,7094,7102,-7104,7099,6929,6923,-7102,7102,7098,7099,-7102,7094,7157,7097,-7099,7153,7096,7108 ,-7137,7135,7107,6932,-6932,6942,6934,-6936,6949,6947,-6947,6954,6950,-6958,6950,6954,-6950,6960,6958,-6957,6958,6963 ,-6960,6964,6961,-6969,6965,6966,-7159,6969,6965,-7159,7158,6966,-6971,6973,7158,-6971,6969,7158,-6974,6967,6962,-6972 ,6971,6976,-6973,6975,6960,-6957,6974,6975,-6979,6979,6977,-7160,6980,7159,-7161,7159,6980,-6982,7161,6984,-7116,6984 ,7159,-6982,7160,6957,-6951,6957,7159,-6978,7161,7115,-7119,6986,6982,-6984,6982,6990,-6986,6987,6994,-6990,6993,6987 ,-6989,6991,6992,-7163,6995,6991,-7163,7162,6992,-6997,6998,7162,-6997,7162,6998,-6996,6997,6993,-6989,6999,6997,-7001 ,6983,7002,-6987,7001,7002,-7005,7006,7105,-7164,7105,7006,-6981,7164,7131,-7006,7005,7003,-7165,7007,7164,-7004,7010 ,7164,-7008,7149,7131,-7165,7006,7007,-6981,7007,7003,-6981,7024,7008,-7010,7008,7012,-7012,7014,7018,-7014,7015,7014 ,-7026,7016,7017,-7166,7019,7016,-7166,7165,7017,-7021,7022,7165,-7021,7165,7022,-7020,7021,7015,-7026,7023,7021,-7029 ,7009,7026,-7025,7031,7027,-7027,7030,7006,-7167,7166,7163,-7168,7163,7166,-7007,7166,7167,-7037,7036,7167,-7061,7166 ,7036,-7036,7040,7037,-7039,7125,7039,-7038,7041,7046,-7128,7045,7041,-7043,7043,7044,-7169,7047,7043,-7169,7168,7044 ,-7049,7051,7168,-7049,7168,7051,-7048,7049,7045,-7043,7050,7049,-7127,7052,7040,-7039,7124,7052,-7055,7060,7053,-7037 ,7053,7060,-7058,7059,7060,-7168,7065,7057,-7059,7066,7170,-7170,7170,7066,-7068,7061,7062,-7068,7062,7170,-7068,7170 ,7058,-7060,7058,7170,-7063,7068,7069,-7073,7070,7068,-7073,7078,7079,-7084,7080,7078,-7084,7097,7156,-6929,7099,6928 ,-6930,7086,7069,-7090,7157,7066,-7170,7066,7157,-7093,7171,7157,-7170,7157,7171,-7157,7156,7143,-6929,6927,7156,-7152 ,7151,7156,-7172,7104,6927,-7152,7171,7150,-7152,7150,7171,-7170,7169,7170,-7151,7160,6950,-7106,7167,7106,-7060,7106 ,7167,-7164,7106,7163,-7106,7105,6980,-7161,7059,7150,-7171,7150,7059,-7107,7070,7087,-7091,6944,6945,-6953,7120,6952 ,-6952,7121,7055,-7057,7056,7152,-7124,7152,7153,-7137,6955,7119,-6952,7034,7039,-7122,7054,7055,-7122,7034,7134,-7033 ,7032,7128,-7030,7136,7137,-7124,7129,7011,-7032,7031,7029,-7130,7123,7152,-7137,6959,7119,-6956,6985,7133,-6985,7133 ,6985,-7005,7004,7005,-7134,7160,7159,-6958,7011,7129,-7011,7054,7121,-7040,7148,7147,-7146,7147,7113,-7133,6933,6927 ,-7105,7147,7144,-7146,7132,7131,-7150,7144,7146,-7140,7128,7134,-7140,7032,7134,-7129,7010,7149,-7165,7118,7115,-7117 ,7161,7118,-6980,6978,6979,-7120,6959,6978,-7120,7159,6984,-7162,6979,7159,-7162,7033,7166,-7036,7030,7166,-7034,7174 ,6938,6942,-6936,7157,7156,-7098,7064,7153,-7064,7096,7153,-7065,7156,7155,-7144,6962,6967,-6962,7094,7098,-7103,7092 ,7157,-7095,7107,7136,-7109,7136,7107,-7136,5213,7141,6930,5198,-5212,5197,6931,-5209,5196,5208,6931,-6933,6923,5195 ,5196,-6925,5194,5300,6929,-6929,6928,7143,5193,-5195,7143,7155,5242,-5194,7155,6927,5192,-5243,5258,5205,5192,6927 ,-6934,5202,5203,7174,-6936,6935,6934,5201,-5203,5209,5201,6934,-7155,5199,7172,6936,-7146,5213,5199,7145,-7142,7172 ,7173,6937,-6937,7173,5209,7154,-6938,5196,6932,-6925,6930,6931,5197,-5199,6923,6929,5300,-5196,5259,5258,6933,-6927 ,6925,5204,5259,-6927,6925,6938,-7175,6925,7174,5203,-5205,6553,6551,6506,-6508,5482,5353,-6846,5476,6503,6816,-6708 ,5347,5349,-5378,6501,5330,5331,-5749,6501,5748,5749,-5469,5751,5816,5809,-6497,6586,5910,-5768,5892,6497,6498,-5911 ,7177,7184,7183,7175,-7177,7177,7178,7185,-7185,7178,7179,7186,-7186,7180,7181,7179,-7183,7181,7187,7186,-7180,7572 ,7573,7183,-7185,7571,7572,7184,-7186,7570,7571,7185,-7187,7569,7570,7186,-7204,7193,7175,7183,-7195,7183,7573,7574 ,-7195,7188,7189,7196,-7198,7196,7189,7190,-7199,7190,7191,7199,-7199,7191,7192,7200,-7200,7568,7569,7203,-7203,7202 ,7203,7187,-7205,7205,7181,7180,-7207,7206,7180,7207,-7209,7209,7193,7194,-7211,7194,7574,7575,-7211,7211,7195,7212 ,-7214,7213,7212,7197,-7215,7197,7196,7215,-7215,7215,7196,7198,-7217,7198,7199,7217,-7217,7217,7199,7200,-7219,7200 ,7219,7220,-7219,7220,7219,7201,-7222,7567,7568,7202,-7223,7222,7202,7204,-7224,7224,7205,7206,-7226,7225,7206,7208 ,-7227,7209,7296,7294,-7250,7227,7211,7213,-7229,7213,7214,7229,-7229,7215,7229,-7215,7230,7216,7217,-7232,7231,7217 ,7218,-7233,7233,7220,7221,-7235,7221,7567,7564,-7235,7222,7223,7235,-7258,7236,7224,7225,-7238,7237,7225,7226,-7239 ,7175,7239,7240,-7177,7241,7242,7243,-7245,7242,7245,7246,-7244,7247,7207,7180,-7183,7193,7248,7239,-7176,7209,7249 ,7248,-7194,7239,7250,7251,-7241,7241,7252,7253,-7243,7242,7253,7254,-7246,7248,7255,7250,-7240,7249,7256,7255,-7249 ,7204,7181,-7206,7223,7204,7205,-7225,7258,7241,7244,-7260,7260,7259,7244,-7244,7260,7243,7246,-7262,7262,7261,7246 ,-7246,7245,7254,7263,-7263,7258,7264,7252,-7242,7258,7259,7176,-7241,7259,7260,7178,-7178,7260,7261,7179,-7179,7261 ,7262,7247,-7183,7264,7258,7240,-7252,7262,7263,7265,-7248,7266,7267,7268,-7270,7270,7271,7269,-7269,7267,7266,7272 ,-7274,7274,7275,7276,-7278,7278,7279,7277,-7281,7275,7281,7282,-7277,7283,7282,7284,-7286,7286,7287,7280,-7289,7289 ,7286,7288,-7273,7207,7266,7269,-7209,7250,7275,7274,-7252,7252,7279,7278,-7254,7253,7278,7287,-7255,7290,7291,7266 ,-7208,7265,7289,7291,-7291,7255,7281,7275,-7251,7256,7284,7281,-7256,7295,7285,7284,-7257,7264,7292,7279,-7253,7254 ,7287,7286,-7264,7251,7274,7292,-7265,7263,7286,7289,-7266,7256,7249,7294,-7296,7233,7232,7218,-7221,7224,7236,7235 ,-7224,7226,7271,-7239,7187,7203,-7187,7188,7212,-7196,7188,7197,-7213,7192,7219,-7201,7192,7201,-7220,7247,7290,-7208 ,7176,7259,-7178,7179,7261,-7183,7287,7278,-7281,7291,7289,-7273,7281,7284,-7283,7279,7292,-7278,7274,7277,-7293,7208 ,7269,-7227,7290,7247,-7266,7291,7272,-7267,7271,7226,-7270,7204,7187,-7182,7297,7296,7209,-7211,7293,7297,7210,-7576 ,7282,7283,7298,-7277,7276,7298,7299,-7278,7277,7299,7300,-7281,7288,7280,7300,7301,-7273,7272,7301,7302,-7274,7273 ,7302,7303,-7268,7267,7303,7270,-7269,7495,7329,7331,7330,-7504,7341,7520,7519,-7519,7517,7516,7347,-7346,7532,7347 ,-7517,7232,7494,7493,7354,-7232,7354,7493,7492,-7356,7505,7390,7391,-7345,7359,7358,7341,-7346,7360,7359,7345,-7348 ,7526,7527,7347,-7533,7498,7497,7233,-7235,7257,7499,7498,-7565,7376,7543,7542,-7484,7449,7371,7370,-7451,7524,7523 ,7515,-7515,7529,7456,7374,-7531,7456,7455,7375,-7375,7467,7462,7461,-7464,7481,7467,7463,-7481,7379,7451,7450,-7371 ,7513,7525,7524,-7515,7531,7530,7374,-7382,7382,7381,7374,-7376,7537,7536,7525,-7514,7355,7489,7488,-7230,7370,7372 ,7380,-7380,7371,7458,7372,-7371,7311,7324,7393,-7393,7312,7325,7395,-7395,7313,7396,7395,-7326,7313,7310,7397,-7397 ,7319,7399,7398,-7310,7327,7401,7400,-7322,7328,7402,7401,-7328,7308,7403,7402,-7329,7308,7304,7404,-7404,7326,7407 ,7405,-7306,7311,7392,7406,-7318,7318,7408,7407,-7327,7317,7406,7444,-7317,7315,7410,-7455,7315,7314,7412,-7411,6873 ,6846,7546,-7414,6797,7414,7415,-6880,6767,7432,7416,-6770,6769,7416,7417,-6799,6799,6765,7453,-7419,6799,7418,7419 ,-6801,7310,7309,7398,-7398,7321,7423,7422,-7321,7331,7329,7392,-7394,7395,7333,7330,-7395,7396,7335,7333,-7396,7397 ,7337,7335,-7397,7339,7340,7398,-7400,7343,7423,7400,-7535,7346,7342,7401,-7403,7348,7346,7402,-7404,7349,7348,7403 ,-7405,7407,7350,7351,-7406,7392,7329,7353,-7407,7357,7339,7399,-7425,7361,7350,7407,-7409,7406,7353,7445,-7445,7362 ,7425,7444,-7446,7544,7543,7376,-7412,7410,7375,7455,-7455,7412,7382,7375,-7411,7545,7383,7413,-7547,7384,7385,7415 ,-7415,7431,7386,7416,-7433,7386,7387,7417,-7417,7452,7388,7418,-7454,7388,7389,7419,-7419,7420,7426,7548,-7548,7426 ,7420,7421,-7449,7442,7441,7428,-7369,7398,7340,7337,-7398,7440,7439,7371,-7450,7427,7390,7439,-7441,7422,7391,7390 ,-7428,7423,7343,7391,-7423,7499,7257,7235,-7237,7409,7425,7362,-7364,7323,7425,7409,-7323,7448,7539,7381,-7427,7434 ,7433,7454,-7456,7471,7474,7581,-7583,7355,7492,7491,-7490,7344,7391,-7344,7400,7423,-7322,7381,7382,7548,-7427,7368 ,7428,7429,-7370,7430,7378,7369,-7430,7385,7431,7432,-7416,6879,7415,7432,-6768,7306,7307,7433,7408,-7319,7433,7434 ,7361,-7409,7361,7434,7435,-7527,7435,7528,7527,-7527,7360,7436,7437,-7360,7359,7437,7438,-7359,7504,7439,7390,-7506 ,7441,7442,7357,-7425,7444,7425,7323,-7317,7394,7330,7331,-7394,7324,7312,7394,-7394,7404,7304,7305,-7406,7351,7349 ,7404,-7406,7447,7508,7509,-7374,7581,7474,7475,-7581,7578,7477,7476,-7578,7479,7481,7480,-7479,7387,7452,7453,-7418 ,6765,6798,7417,-7454,7307,7315,7454,-7434,7434,7455,7456,-7436,7435,7456,7529,-7529,7438,7515,7523,-7523,7458,7371 ,7439,-7505,7428,7459,7460,-7430,7460,7577,7576,-7430,7578,7579,7449,-7478,7463,7461,7429,-7577,7429,7461,7462,-7431 ,7480,7576,7450,-7479,7431,7465,7464,-7387,7386,7464,7466,-7388,7468,7428,7441,-7470,7471,7427,7440,-7475,7399,7472 ,7470,-7425,7427,7471,7473,-7423,7422,7473,7583,-7585,7469,7441,7424,-7471,7474,7440,7449,-7476,7580,7475,7449,-7580 ,7476,7450,7576,-7578,7450,7476,7477,-7450,7451,7479,7478,-7451,7387,7466,7482,-7453,7473,7471,7582,-7584,7320,7422 ,7584,-7586,7377,7484,7562,-7564,7366,7485,7486,-7368,7367,7486,7487,-7444,7356,7443,7487,7488,-7490,7490,7338,-7492 ,7492,7336,7490,-7492,7493,7334,7336,-7493,7494,7332,7334,-7494,7495,7503,-7497,7497,7352,7495,-7497,7498,7446,7352 ,-7498,7498,7499,7365,-7447,7365,7499,7236,7237,-7365,7542,7500,7501,-7484,7483,7559,7383,-7546,7503,7332,7494,-7497 ,7338,7356,7489,-7492,7358,7438,7522,-7522,7358,7521,7520,-7342,7448,7421,7506,-7508,7447,7539,7538,-7509,7457,7373 ,7509,-7511,7457,7510,7437,-7437,7507,7506,7511,-7513,7508,7538,7537,-7514,7509,7508,7513,-7515,7515,7510,7509,-7515 ,7437,7510,7515,-7439,7536,7535,-7526,7527,7528,7436,-7361,7528,7529,7457,-7437,7457,7529,7530,-7374,7447,7373,7530 ,-7532,7539,7447,-7532,7527,7360,-7348,7526,7532,-7534,7533,7532,7516,7348,-7350,7369,7378,7377,7563,-7367,7368,7369 ,7366,-7368,7357,7442,7443,-7357,7339,7357,7356,-7339,7340,7339,7338,-7491,7337,7340,7490,-7337,7335,7337,7336,-7335 ,7333,7335,7334,-7333,7330,7333,7332,-7504,7483,7501,7502,-7560,7365,7364,7363,-7363,7446,7365,7362,-7446,7352,7446 ,7445,-7354,7495,7352,7353,-7330,7350,7361,7526,-7534,7349,7351,7350,-7534,7517,7346,7348,-7517,7342,7346,7517,-7519 ,7342,7534,7400,-7402,7534,7342,7518,-7520,7344,7343,7534,-7520,7344,7519,-7521,7505,7344,7520,-7522,7504,7505,7521 ,-7523,7458,7504,7522,-7524,7372,7458,7523,-7525,7535,7380,7372,7524,-7526,7419,7389,7512,-7512,6883,6800,7419,-7512 ,7539,7448,7507,-7539,7539,7531,-7382,7540,7561,7562,-7485,7384,7541,7484,-7378,7384,7377,7378,-7386,7431,7385,7378 ,-7431,7465,7431,7430,-7463,7464,7465,7462,-7468,7466,7464,7467,-7482,7482,7466,7481,-7480,7452,7482,7479,-7452,7388 ,7452,7451,-7380,7389,7388,7379,-7381,7389,7380,7535,7536,-7513,7512,7536,-7538,7538,7507,7512,-7538,7484,7541,-7541 ,6881,6880,6882,7544,-7412,7542,7364,7237,7238,-7501,7363,7364,7542,-7544,7409,7363,7543,-7545,6882,7322,7409,-7545 ,7459,7428,7579,-7579,7511,7506,6872,-6884,7376,7545,7546,-7412,6846,6881,7411,-7547,7442,7368,7367,-7444,7548,7382 ,7412,-7548,7314,7547,-7413,7414,7553,7554,-7385,6797,6850,7553,-7415,7541,7384,7554,-7556,7540,7541,7555,-7557,7561 ,7540,7556,7566,-7286,7550,7549,7557,-7559,7502,7551,7550,-7559,7560,7552,7501,-7501,7549,6770,6766,-7558,7554,7553 ,7549,-7551,7555,7554,7550,-7552,7556,7555,7551,-7553,6766,6873,7413,-7558,7413,7383,7558,-7558,7558,7383,-7560,7502 ,7501,7552,-7552,7556,7552,7560,-7567,7271,7565,7560,-7501,7485,7562,7561,7295,-7295,7563,7562,7485,-7367,7231,7354 ,-7231,7229,7230,7354,-7356,7487,7293,-7228,7564,7498,-7235,7488,7228,-7230,7488,7487,7227,-7229,7232,7233,7497,7496 ,-7495,7487,7486,7296,7297,-7294,7303,7565,7271,-7271,7303,7302,7301,-7566,7561,7285,-7296,7283,7285,7566,7299,-7299 ,7566,7560,7565,-7300,7485,7294,7296,-7487,7565,7301,7300,-7300,7257,7564,7567,-7223,7221,7201,7568,-7568,7201,7192 ,7569,-7569,7570,7569,7192,-7192,7571,7570,7191,-7191,7189,7572,7571,-7191,7188,7573,7572,-7190,7574,7573,7188,-7196 ,7575,7574,7195,-7212,7227,7293,7575,-7212,7271,7500,-7239,7230,7229,7215,-7217,7576,7480,-7464,7459,7578,7577,-7461 ,7468,7580,7579,-7429,7469,7581,7580,-7469,7470,7582,7581,-7470,7472,7583,7582,-7471,7399,7584,7583,-7473,7319,7585 ,7584,-7400,7517,7345,7341,-7519,7549,7553,-6851,7549,6850,-6771,7586,7589,7588,-7588,7587,7588,7591,-7591,7590,7591 ,7761,-7593,7594,7595,7587,-7591,7596,7594,7590,-7593,7597,7596,7592,-7594,7600,7639,7599,-7599,7601,7595,7594,-7603 ,7602,7594,7596,-7604,7603,7596,7597,-7605,7605,7601,7602,-7607,7606,7602,7603,-7608,7607,7603,7604,-7609,7599,7636 ,7610,-7599,7589,7586,7598,-7612,7595,7600,7586,-7588,7601,7639,7600,-7596,7612,7615,7614,-7614,7616,7614,7615,-7618 ,7618,7616,7617,-7620,7620,7618,7619,-7622,7622,7617,7615,-7624,7624,7619,7617,-7623,7625,7621,7619,-7625,7626,7629 ,7628,-7628,7622,7623,7631,-7631,7624,7622,7630,-7633,7625,7624,7632,-7634,7630,7631,7605,-7607,7632,7630,7606,-7608 ,7633,7632,7607,-7609,7634,7638,7627,-7629,7628,7612,7613,-7636,7623,7615,7612,-7630,7623,7629,7626,-7632,7626,7627 ,7609,-7726,7599,7609,7637,-7637,7637,7609,7627,-7639,7609,7599,7639,-7726,7640,7643,7642,-7642,7644,7642,7643,-7646 ,7646,7644,7645,-7648,7648,7645,7643,-7650,7650,7647,7645,-7649,7597,7593,7647,-7651,7651,7654,7653,-7653,7648,7649 ,7656,-7656,7650,7648,7655,-7658,7597,7650,7657,-7605,7655,7656,7659,-7659,7657,7655,7658,-7661,7604,7657,7660,-7609 ,7662,7684,7652,-7654,7641,7663,7653,-7641,7649,7643,7640,-7655,7649,7654,7651,-7657,7664,7667,7666,-7666,7668,7669 ,7671,-7671,7670,7671,7620,-7622,7672,7673,7665,-7669,7674,7672,7668,-7671,7625,7674,7670,-7622,7675,7678,7677,-7677 ,7679,7673,7672,-7681,7680,7672,7674,-7682,7681,7674,7625,-7634,7659,7679,7680,-7659,7658,7680,7681,-7661,7660,7681 ,7633,-7609,7676,7686,7682,-7676,7675,7683,7667,-7665,7673,7678,7664,-7666,7677,7678,7673,-7680,7685,7661,7652,-7685 ,7676,7661,7685,-7687,7588,7589,7687,-7689,7591,7588,7688,-7690,7687,7589,7611,-7691,7690,7611,7610,-7692,7613,7614 ,7692,-7694,7614,7616,7694,-7693,7616,7618,7695,-7695,7618,7620,7696,-7696,7635,7613,7693,-7698,7634,7635,7697,-7699 ,7636,7637,7699,-7701,7610,7636,7700,-7692,7699,7637,7638,-7702,7701,7638,7634,-7699,7641,7642,7830,-7703,7642,7644 ,7703,-7831,7644,7646,7704,-7704,7663,7641,7702,-7706,7662,7663,7705,-7707,7666,7667,7707,-7709,7669,7666,7708,-7710 ,7671,7669,7709,-7711,7620,7671,7710,-7697,7707,7667,7683,-7712,7711,7683,7682,-7713,7714,7685,7684,-7714,7713,7684 ,7662,-7707,7686,7685,7714,-7716,7682,7686,7715,-7713,7586,7600,-7599,7598,7610,-7612,7612,7628,-7630,7628,7635,-7635 ,7640,7653,-7655,7653,7663,-7663,7664,7678,-7676,7675,7682,-7684,7723,7722,7720,-7725,7716,7720,7719,-7719,7719,7721 ,7710,-7719,7710,7721,7722,-7697,7696,7722,7723,-7696,7723,7724,7717,-7696,7717,7724,7720,-7717,7720,7722,7721,-7720 ,7725,7605,7631,-7627,7639,7601,7605,-7726,7661,7726,7651,-7653,7726,7659,7656,-7652,7677,7679,7659,-7727,7661,7676 ,7677,-7727,7665,7666,7669,-7669,9871,9872,7795,-7795,7890,7879,7732,-7892,7793,7792,7748,-7735,7900,7729,7728,-7746 ,7736,7731,-7736,7796,7795,9872,-9874,7749,7750,7751,-7753,7736,7735,7750,-7750,7753,7734,7748,-7755,7751,7753,7754 ,-7753,7755,7749,7752,-7757,7757,7736,7749,-7756,7754,7748,7747,-7759,7752,7754,7758,-7757,7755,7756,7759,-7761,7790 ,7758,7747,-7792,7789,7756,7758,-7791,7764,7762,7746,-7745,7765,7763,7762,-7765,7849,7766,-7768,7759,7788,7787,-7770 ,7764,7744,7743,-7771,7765,7764,7770,-7769,7766,7760,7759,7769,-7772,7704,7767,7766,-7772,7786,7785,7741,-7773,7787 ,7786,7772,-7770,7739,7773,7774,-7739,7775,7776,7740,-7738,7773,7777,7778,-7775,7778,7777,7776,-7776,7775,7737,7738 ,-7775,7759,7756,7789,-7789,7771,7769,7777,-7774,7776,7772,7741,-7741,7777,7769,7772,-7777,7753,7750,7735,-7735,7730 ,7729,7900,-7900,7745,7728,7879,-7891,7742,7740,7741,-7786,7792,7791,7747,-7749,7891,7732,7985,-7985,9860,7784,7733 ,-9860,7742,7903,9859,-7734,9880,7731,7877,-9880,7753,7751,-7751,7774,7778,-7776,7977,7843,7839,-7979,7976,7844,7843 ,-7978,7844,7976,7975,-7846,7845,7975,7974,-7881,7880,7974,7973,-7847,7782,7783,7987,-7974,7743,7903,7742,-7786,7901 ,7770,7743,7785,-7787,7904,7901,7786,-7788,7788,7905,7904,-7788,7789,7906,7905,-7789,7906,7789,7790,-7908,7746,7762 ,7907,7790,-7792,9870,7746,7791,-7793,7793,9869,9870,-7793,7793,7873,9868,-9870,7878,9867,9868,-7874,7908,7820,7883 ,-7883,7948,7848,7855,-7855,9887,9888,7802,-7886,7310,7694,7695,7717,-7310,7848,7318,7326,-7856,7812,9883,9884,-7854 ,7818,7996,7997,-7888,7802,7804,7886,-7886,7698,7868,7867,-7806,7868,7698,7697,-7870,7325,7312,7693,-7693,7911,7943 ,7942,-7913,7915,7916,7911,-7913,7913,7919,7918,-7915,7915,7918,7919,-7917,7914,7935,7917,-7914,7315,7307,7306,7798 ,7941,-7315,7322,7937,7317,7316,-7324,7920,7922,7932,-7922,7809,7852,7851,-7811,9883,7948,7854,-9885,7936,7925,7924 ,-7924,7851,8000,7811,-7811,7866,7865,7803,-7815,7814,7998,7999,-7867,7867,7999,7998,-7806,7887,7886,7804,-7819,7712 ,7715,7714,7882,-7798,7862,7861,7797,-7818,7883,7820,7819,-7885,9885,9886,7801,-7865,7815,7700,-7889,7815,7996,7995 ,-7829,7925,7936,7947,-7947,7946,7947,9882,-9882,9881,9882,7929,-7927,7926,7929,7928,-7928,7931,7930,7927,-7929,7930 ,7931,7932,-7923,7585,7716,7718,-7321,6872,7506,7909,-6876,7896,7895,9898,-7825,9899,9900,7980,-7828,7897,7992,7991 ,-7875,7828,7995,7994,-7878,7824,7991,7992,-7897,7895,7894,7829,-9899,7889,7705,7847,-7861,7689,7688,7731,-7737,7738 ,7703,-7740,9890,7834,7833,-9890,7835,7838,7837,-7837,7836,7994,7995,-7836,7838,7833,7834,-7838,9863,7823,9892,-9894 ,7821,7822,9864,-9866,9865,9866,7993,-7822,7823,9863,9864,-7823,7829,7894,9894,-9896,7990,7989,7979,-7876,7980,7989 ,7990,-7828,7981,7841,9896,-9898,7995,7996,7818,-7836,7835,7818,7804,-7839,7838,7804,7802,-7834,7833,7802,9888,-9890 ,7827,7990,7991,-7825,7824,9898,9899,-7828,9896,7841,7829,-9896,7871,7872,7858,-7858,7690,7691,7815,-7829,7933,7917 ,7935,-7935,7310,7313,-7695,7717,7319,-7310,7718,7710,7327,-7322,7718,7321,-7321,7853,7852,7809,-7813,7865,7864,7801 ,-7804,9899,7841,7981,-9901,7839,7843,7730,-7728,7844,7729,7730,-7844,7729,7844,7845,-7729,7728,7845,7880,-7880,7879 ,7880,7846,-7733,7846,7986,7985,-7733,7796,7860,7847,-7796,7795,7847,7830,-7795,7703,7704,-7740,7862,7817,7816,-7864 ,7761,7760,-7850,7760,7766,-7850,7311,7813,7850,-7325,7694,7313,7325,-7693,7687,7828,7877,7731,-7689,7592,7761,7849 ,-7594,7593,7849,7767,7646,-7648,7773,7739,7704,-7772,7689,7736,7757,7761,-7592,7697,7693,-7870,7850,7867,7868,-7325 ,7866,7999,8000,-7852,7865,7866,7851,-7853,7864,7865,7852,-7854,9884,9885,7864,-7854,7862,7863,7854,-7856,7305,7855 ,-7327,7892,7871,7857,-7894,7856,7870,9861,-9863,7831,7832,9890,-9890,7819,7831,9889,-9889,7884,7819,9888,-9888,7856 ,9862,9893,-9893,7893,7857,9895,-9895,7831,7819,7820,-7861,7796,7832,7831,-7861,7711,7712,7797,-7862,7711,7861,7305 ,-7305,7308,7707,-7305,7708,7707,-7309,7328,7709,7708,-7309,7869,7324,-7869,7693,7312,7324,-7870,7982,7858,7872,-7984 ,7832,7796,9873,-9875,7832,9874,9891,-9891,7834,9890,9891,-9876,7837,7834,9875,-9877,7836,7837,9876,-9878,7994,7836 ,9877,-9879,7875,7839,7727,-7875,7979,7978,7839,-7876,7730,7899,7898,-7728,9880,7734,7735,-7732,7874,7727,7898,-7898 ,7882,7883,7817,-7798,7817,7883,7884,-7817,9886,7816,7884,-9888,9886,9887,7885,-7802,7886,7803,7801,-7886,7814,7803 ,7886,-7888,7887,7997,7998,-7815,7714,7713,7908,-7883,7701,7805,-7889,7705,7889,-7707,7891,7984,9860,-9860,7898,7899 ,9869,-9869,7768,7770,-7902,7744,7902,-7744,7768,7901,-7905,7904,7905,7765,-7769,7906,7763,7765,-7906,7763,7906,7907 ,-7763,7702,7830,-7848,7706,7889,7908,-7714,7705,7702,-7848,7701,7698,-7806,7699,7701,-7889,7700,7699,-7889,7815,7691 ,-7701,7755,7760,7761,-7758,7767,7704,-7647,7912,7942,7941,-7945,7911,7916,6878,-6875,6876,7919,7913,-6764,7914,7918 ,7938,-7807,7943,6877,6875,-7910,7916,7919,6876,-6879,7808,7935,7914,-7807,7917,6764,6763,-7914,7915,7807,7938,-7919 ,7915,7912,7944,-7808,7317,7920,7921,-7312,7311,7921,7932,-7814,7848,7936,7923,-7319,7318,7923,7924,-7307,7306,7924 ,7925,-7799,7947,7936,7848,-7949,9882,7947,7948,-9884,7929,9882,9883,-7813,7800,7939,7926,-7928,7929,7809,7810,-7929 ,7927,7930,7799,-7801,7810,7811,7931,-7929,7922,7920,7317,7937,7799,-7931,7813,7932,7931,-7812,6882,7933,7934,-7323 ,7934,7935,7808,-7323,7933,6882,6764,-7918,7925,7946,7945,-7799,7421,7420,7547,7910,-7910,7319,7717,7716,-7586,7850 ,7813,7811,-8001,7999,7867,7850,-8001,7888,7805,7998,-7998,7815,7888,7997,-7997,9879,7877,7994,-9879,9867,7878,7993 ,-9867,7990,7875,7874,-7992,9881,7926,7939,-7941,7910,7314,7941,-7943,7943,7909,7910,-7943,7940,7945,7946,-9882,7799 ,7950,7949,-7801,7940,7951,7952,-7946,7953,7944,7941,-7955,7955,7956,7807,-7945,7957,7958,7808,-7807,7959,7806,7938 ,-7961,7961,7938,7807,-7963,7800,7963,7964,-7940,7954,7941,7798,-7966,7965,7798,7945,-7967,7322,7967,7968,-7938,7937 ,7968,7969,-7800,7808,7970,7967,-7323,7939,7972,7971,-7941,7314,7910,-7548,7506,7421,-7910,7968,7967,7970,-7970,7969 ,7970,7808,-7800,7799,7808,7958,-7951,7950,7958,7957,-7950,7949,7957,7806,-7801,7800,7806,7959,-7964,7963,7959,7960 ,-7965,7964,7960,7938,-7940,7939,7938,7961,-7973,7972,7961,7962,-7972,7971,7962,7807,-7941,7940,7807,7956,-7952,7951 ,7956,7955,-7953,7952,7955,7944,-7946,7945,7944,7953,-7967,7966,7953,7954,-7966,7973,7974,7881,-7783,7974,7975,7781 ,-7882,7976,8001,7781,-7976,8001,7976,7977,-7781,7779,7780,7977,-7979,7876,7779,7978,-7980,7979,7989,7988,-7877,7825 ,7988,7989,-7981,7980,9900,7826,-7826,7981,7842,7826,-9901,7842,7981,9897,-7841,7973,7987,7986,-7847,7870,7784,9860 ,-9862,7985,7871,7892,-7985,7986,7872,7871,-7986,7983,7872,7986,-7988,7902,7903,-7744,7745,7890,7903,-7903,7828,7687 ,-7691,7860,7820,7908,-7890,7305,7862,-7856,8002,8003,8004,-8006,8007,8003,8014,-8016,8016,8492,8521,-8521,7781,8074 ,8523,-7882,8075,8001,7780,-8077,8022,8014,8003,-8003,8023,8024,8014,-8023,8074,7781,8001,-8076,8024,8023,8011,-8014 ,8018,8021,8076,-8078,8482,8489,8024,-8014,8015,8481,8480,-8018,8519,8530,8016,-8521,8526,8525,8482,-8014,8031,8032 ,8033,-8009,8509,8508,8010,-8038,8483,8525,8526,-8028,8038,8039,8005,-8005,8039,8038,8040,-8042,8004,8006,8042,-8039 ,8043,8032,8044,-8046,8010,8508,8025,-8031,8029,8031,8008,-8031,8047,8046,8002,-8006,8050,8049,8012,-8012,8016,8064 ,8243,-8493,8009,8054,8053,-8038,8046,8065,8022,-8003,8065,8051,8023,-8023,8051,8050,8011,-8024,8049,8529,8528,-8013 ,8066,8063,8029,-8029,8052,8055,8032,-8032,8053,8510,8509,-8038,8057,8047,8005,-8040,8056,8059,8040,-8070,8058,8057 ,8039,-8042,8060,8056,8069,-8043,8048,8060,8042,-8007,8055,8062,8044,-8033,8068,8061,8043,-8046,8063,8052,8031,-8030 ,8059,8058,8041,-8041,8062,8068,8045,-8045,8070,8035,8034,-8072,8004,8522,-8007,8526,8013,8011,8012,-8528,8009,8037 ,-8011,8024,8481,8015,-8015,7782,7881,8523,8073,-8073,8027,8526,8527,-8026,8015,8017,-8008,8069,8040,-8039,8042,8069 ,-8039,8033,8032,-8044,8009,8033,-8044,8009,8043,8061,-8055,8026,8484,8483,-8028,8072,8070,8071,7783,-7783,8073,8035 ,8070,-8073,8073,8523,8524,-8036,8074,8019,8524,-8524,8075,8020,8019,-8075,8020,8075,8076,-8022,8077,8076,7780,-7780 ,8081,8080,8486,-8486,8485,8532,8533,-8082,8078,8079,8084,-8086,8472,8083,8488,-8488,8090,8474,8473,-8083,8085,8530 ,8531,-8079,8036,8514,-8514,8085,8084,8087,-8087,8474,8090,8089,-8476,8086,8016,8530,-8086,8514,8036,8067,-8516,8493 ,8094,8093,-8495,8080,8081,7825,-7827,7783,8071,8511,-7860,7840,8083,8472,-7843,8016,8086,8095,-8065,8095,8086,8087 ,-8097,8475,8089,8097,-8477,8515,8067,8494,-8094,8098,8101,8100,-8100,8396,8391,8392,-8396,8102,8105,8104,-8104,8399 ,8400,8397,-8399,8106,8109,8108,-8108,8403,8404,8401,-8403,8110,8113,8112,-8112,8113,8115,8114,-8113,8117,8112,8114 ,-8117,8118,8101,8120,-8120,8121,8124,8123,-8123,8125,8128,8127,-8127,8129,8130,8127,-8129,8104,8105,8132,-8132,8133 ,8136,8135,-8135,8135,8136,8138,-8138,8139,8142,8141,-8141,8143,8144,8142,-8140,8145,8148,8147,-8147,8149,8152,8151 ,-8151,8153,8147,8148,-8155,8155,8151,8152,-8157,8157,8160,8159,-8159,8161,8162,8160,-8158,8162,8164,8163,-8161,8163 ,8165,8159,-8161,8166,8167,8165,-8164,8164,8168,8166,-8164,8169,8166,8168,-8171,8171,8167,8166,-8170,8172,8175,8174 ,-8174,8173,8174,8177,-8177,8181,8180,8179,-8179,8174,8183,8182,-8178,8499,8185,8184,-8501,8503,8502,8187,-8187,8188 ,8191,8190,-8190,8192,8195,8194,-8194,8194,8135,8137,-8194,8196,8156,8152,-8198,8198,8197,8152,-8150,8199,8202,8201 ,-8201,8203,8206,8205,-8205,8207,8210,8209,-8209,8208,8209,8212,-8212,8213,8216,8215,-8215,8217,8213,8219,-8219,8220 ,8223,8222,-8222,8224,8221,8188,-8226,8226,8227,8224,-8226,8529,8049,8228,-8227,8226,8228,8229,-8228,8230,8050,-8052 ,8230,8231,8211,-8233,8211,8231,8233,-8209,8223,8235,8234,-8223,8236,8232,8211,-8213,8237,8240,8239,-8239,8046,8243 ,8242,-8242,8245,8243,8064,8095,-8245,8246,8242,8243,-8246,8476,8097,8248,-8478,8479,8478,8251,-8251,8251,8254,8253 ,-8251,8097,8093,8094,-8249,8497,8257,8185,-8499,8258,8239,8240,-8260,8260,8255,8256,-8262,8219,8213,8214,-8263,8259 ,8264,8263,-8259,8265,8207,8208,-8234,8151,8155,8154,-8149,8266,8267,8204,-8206,8205,8269,8268,-8267,8216,8271,8270 ,-8216,8272,8273,8234,-8272,8274,8143,8139,-8276,8275,8139,8140,-8277,8277,8131,8279,-8279,8281,8406,8405,-8281,8150 ,8151,8148,-8146,8066,8225,8282,-8092,8282,8496,8495,-8092,8119,8283,8284,-8119,8285,8287,8207,-8287,8288,8290,8238 ,-8290,8291,8288,8289,-8293,8292,8294,8293,-8292,8194,8295,8134,-8136,8296,8295,8194,-8196,8501,8298,8187,-8503,8175 ,8297,8183,-8175,8120,8115,8165,-8168,8159,8165,8115,-8114,8158,8159,8113,-8111,8146,8106,8107,-8146,8145,8107,8299 ,-8151,8150,8299,8300,-8150,8149,8300,8103,-8199,8140,8141,8104,-8132,8276,8140,8131,-8278,8137,8138,8301,-8130,8137 ,8129,8128,-8194,8192,8193,8128,-8126,8302,8504,8503,-8187,8177,8182,8124,-8122,8176,8177,8121,-8284,8119,8120,8167 ,-8172,8143,8274,8303,-8219,8144,8143,8218,-8220,8196,8144,8219,-8263,8156,8203,8204,-8156,8155,8204,8267,-8155,8161 ,8287,8304,-8163,8168,8164,8290,-8289,8170,8168,8288,-8292,8291,8293,8172,-8171,8178,8179,8297,-8176,8501,8500,8184 ,-8299,8296,8305,8191,-8296,8134,8295,8191,-8222,8411,8414,8415,-8411,8417,8418,8419,-8417,8170,8172,8173,-8170,8169 ,8173,8176,-8172,8196,8197,8142,-8145,8197,8198,8141,-8143,8206,8214,8215,-8270,8228,8230,8232,-8230,8236,8307,8229 ,-8233,8244,8247,8252,-8246,8245,8252,8249,-8247,8203,8262,8214,-8207,8308,8309,8260,-8262,8270,8310,8269,-8216,8420 ,8422,8423,-8422,8311,8181,8178,-8313,8103,8104,8141,-8199,8171,8176,8283,-8120,8196,8262,8203,-8157,8172,8312,8178 ,-8176,8284,8315,8314,-8314,8319,8117,8116,-8321,8321,8324,8323,-8323,8341,8346,8343,-8345,8325,8328,8327,-8327,8359 ,8357,8313,-8315,8330,8321,8322,-8330,8329,8322,8323,-8318,8324,8126,8317,-8324,8126,8324,8321,-8331,8338,8333,8334 ,-8338,8331,8334,8333,-8333,8469,8331,8332,-8471,8122,8123,8336,-8336,8335,8338,8337,-8123,8341,8344,8340,-8340,8342 ,8340,8344,-8344,8345,8342,8343,-8347,8339,8345,8346,-8342,8328,8347,8318,-8328,8325,8348,8347,-8329,8326,8320,8348 ,-8326,8327,8318,8320,-8327,8349,8356,8350,-8115,8116,8114,8350,-8352,8352,8116,8351,-8354,8354,8352,8353,-8356,8349 ,8354,8355,-8357,8118,8284,8313,-8358,8357,8100,8101,-8119,8329,8331,8469,-8331,8329,8347,8342,8345,8334,-8332,8342 ,8347,8348,-8341,8340,8348,-8353,8334,8345,-8359,8353,8351,8350,-8357,8359,8314,8315,-8359,8358,8361,8360,-8360,8359 ,8360,8100,-8358,8339,8354,8361,8358,-8346,8361,8098,8099,-8361,8361,8354,8349,-8099,8363,8429,8430,-8363,8365,8432 ,8433,-8365,8438,8436,8435,-8438,8367,8102,8394,-8367,8370,8385,8369,-8369,8371,8374,8373,-8373,8375,8388,8376,-8317 ,8377,8393,8427,-8379,8386,8387,8390,-8382,8319,8389,8384,-8118,8368,8375,8130,-8414,8385,8373,8387,-8387,8369,8382 ,8389,-8389,8367,8371,8279,-8133,8377,8378,-8380,8109,8381,8390,-8109,8384,8383,8434,-8112,8373,8385,-8371,8370,8372 ,-8374,8378,8426,8431,-8381,8391,8394,8393,-8393,8377,8395,8392,-8394,8395,8377,8366,-8397,8366,8394,8391,-8397,8385 ,8386,8398,-8398,8399,8398,8386,-8383,8369,8400,8399,-8383,8369,8385,8397,-8401,8388,8389,8402,-8402,8403,8402,8389 ,-8320,8376,8404,8403,-8320,8376,8388,8401,-8405,8281,8280,8379,-8388,8406,8281,8387,-8374,8405,8406,8373,-8375,8405 ,8374,8379,-8281,8407,8132,8105,-8409,8105,8102,8409,-8409,8367,8306,8409,-8103,8407,8306,8367,-8133,8410,8413,8412 ,-8412,8412,8370,8414,-8412,8370,8368,8415,-8415,8410,8415,8368,-8414,8416,8419,8130,-8376,8316,8417,8416,-8376,8316 ,8127,8418,-8418,8418,8127,8130,-8420,8420,8421,8278,-8280,8371,8422,8420,-8280,8422,8371,8372,-8424,8421,8423,8372 ,-8279,8424,8427,8426,-8426,8426,8378,8428,-8426,8378,8427,8424,-8429,8429,8431,8108,-8431,8362,8430,8108,-8391,8363 ,8380,8431,-8430,8109,8434,8433,-8433,8364,8433,8434,-8384,8381,8365,8364,-8384,8432,8365,8381,-8110,8435,8436,8111 ,-8113,8117,8437,8435,-8113,8437,8117,8384,-8439,8436,8438,8384,-8112,8318,8317,8316,-8377,8126,8127,8316,-8318,8413 ,8130,8129,-8302,8394,8103,8300,-8394,8427,8300,8299,-8427,8431,8299,8107,-8109,8439,8440,8153,-8202,8210,8207,8287 ,-8442,8209,8210,8443,-8443,8236,8212,8445,-8445,8235,8444,8446,-8235,8224,8447,8220,-8222,8307,8447,8227,-8230,8235 ,8223,8447,-8308,8444,8235,8307,-8237,8448,8199,8450,-8450,8445,8448,8449,-8452,8444,8445,8451,-8447,8452,8454,8273 ,-8454,8452,8221,8222,-8455,8133,8274,8275,-8137,8276,8138,8136,-8276,8277,8301,8138,-8277,8218,8303,8272,-8218,8133 ,8134,8221,-8453,8273,8272,8303,-8454,8271,8216,8217,-8273,8271,8234,8446,-8271,8270,8446,8451,-8311,8451,8449,8268 ,-8311,8274,8133,8453,-8304,8266,8268,8449,-8451,8267,8266,8450,-8201,8154,8267,8200,-8154,8147,8153,8440,-8456,8146 ,8147,8455,-8457,8457,8456,8158,-8111,8109,8106,8457,-8435,8455,8440,8161,-8158,8455,8157,8158,-8457,8456,8457,8106 ,-8147,8434,8457,8110,-8112,8439,8443,8210,-8442,8442,8445,8212,-8210,8458,8202,8199,-8449,8442,8443,8202,-8459,8439 ,8201,8202,-8444,8440,8439,8441,-8162,8301,8277,8412,-8414,8162,8304,8459,-8165,8460,8461,8237,-8239,8240,8237,8241 ,-8243,8259,8240,8242,-8247,8246,8249,8264,-8260,8264,8249,8462,-8264,8294,8464,8463,-8294,8465,8286,8461,-8461,8237 ,8461,8286,-8242,8186,8192,8125,-8303,8195,8192,8186,-8188,8298,8296,8195,-8188,8296,8298,8184,-8467,8467,8468,8185 ,-8258,8189,8282,8225,-8189,8309,8479,8250,-8261,8250,8253,8255,-8261,8497,8496,8282,-8258,8257,8282,8189,-8468,8468 ,8467,8189,-8191,8312,8463,8464,-8312,8464,8462,8308,-8312,8332,8333,8338,8335,8336,-8471,8356,8355,-8354,8099,8100 ,-8361,8408,8409,8306,-8408,8424,8425,-8429,8362,8390,8380,-8364,8098,8349,8114,-8102,8122,8337,8315,-8285,8505,8126 ,-8331,8336,8123,8469,-8471,8120,8101,8114,-8116,8284,8283,8121,-8123,8468,8190,8305,-8467,8185,8468,8466,-8185,8261 ,8256,8180,-8182,8308,8261,8181,-8312,8462,8249,8309,-8309,8263,8462,8464,-8295,8258,8263,8294,-8293,8292,8289,8239 ,-8259,8460,8238,8290,-8472,8459,8465,8460,-8472,8459,8304,8285,-8466,8505,8504,8302,-8127,8477,8248,8251,-8479,8248 ,8094,8254,-8252,8095,8096,8247,-8245,8533,7988,7825,-8082,8206,8269,-8206,8213,8217,-8217,8427,8393,-8301,8221,8191 ,-8189,8233,8231,-8066,8233,8065,-8047,8286,8207,-8266,8268,8269,-8311,8431,8426,-8300,8285,8286,-8466,8471,8290,-8165 ,8103,8394,-8103,8277,8278,-8413,8131,8132,-8280,8458,8448,-8446,8447,8224,-8228,8220,8447,-8224,8287,8161,-8442,8200 ,8450,-8200,8452,8453,-8134,8273,8454,-8235,8454,8222,-8235,8200,8201,-8154,8442,8458,-8446,8286,8265,-8242,8463,8172 ,-8294,8164,8459,-8472,8126,8302,-8126,8305,8296,-8467,8172,8463,-8313,8185,8499,-8499,8239,8289,-8239,8285,8304,-8288 ,8190,8191,-8306,8091,8495,-8494,7842,8472,8080,-7827,8080,8472,8487,-8487,8079,8473,8474,-8085,8084,8474,8475,-8088 ,8087,8475,8476,-8097,8096,8476,8477,-8248,8247,8477,8478,-8253,8249,8252,8478,-8480,8309,8249,-8480,8491,8490,8021 ,-8019,8489,8020,8021,-8491,8482,8019,8020,-8490,8482,8525,8524,-8020,8035,8524,8525,-8484,8484,8034,8035,-8484,8484 ,8513,8512,-8035,8078,8531,8532,-8486,8485,8486,8079,-8079,8487,8473,8079,-8487,8488,8082,8473,-8488,8481,8490,8491 ,-8481,8489,8490,8481,-8025,8006,8522,8521,-8493,8492,8243,8048,-8007,8265,8233,8046,-8242,8051,8065,8231,-8231,8049 ,8050,-8229,8091,8493,8494,-8093,8495,8254,8094,-8494,8496,8253,8254,-8496,8255,8253,8496,-8498,8255,8497,8498,-8257 ,8499,8180,8256,-8499,8180,8499,8500,-8180,8297,8179,8500,-8502,8297,8501,8502,-8184,8182,8183,8502,-8504,8504,8124 ,8182,-8504,8123,8124,8504,-8506,8123,8505,8330,-8470,8054,8507,8506,-8054,8053,8506,8088,-8511,8055,8061,8068,-8063 ,8055,8052,8507,8054,-8062,8066,8506,8507,8052,-8064,8067,8088,8092,-8495,8506,8066,-8089,8092,8066,-8092,8060,8047 ,8057,-8057,8057,8058,8059,-8057,8047,8060,8048,8243,-8047,8066,8092,-8089,8025,8508,8026,-8028,8036,8026,8508,-8510 ,8509,8510,8067,-8037,8088,8067,-8511,8028,8029,-8031,8030,8008,-8011,8025,8527,8528,8028,-8031,8012,8528,-8528,8071 ,8034,8512,-8512,8511,8083,7840,-7860,8083,8511,8512,-8489,8488,8512,8513,-8083,8082,8513,8514,-8091,8090,8514,8515 ,-8090,8089,8515,8093,-8098,8077,7779,7876,-8517,8077,8516,8517,-8019,8518,8491,8018,-8518,8519,8480,8491,-8519,8520 ,8017,8480,-8520,8521,8007,8017,-8521,8522,8003,8007,-8522,8004,8003,-8523,8528,8529,8066,-8029,8226,8225,8066,-8530 ,7876,7988,8533,-8517,8517,8516,8533,-8533,8531,8518,8517,-8533,8519,8518,8531,-8531,8484,8026,8036,-8514,8379,8374 ,8366,-8378,8370,8412,8278,-8373,8009,8010,8008,-8034,8354,8339,8340,-8353,8390,8387,8379,-8381,8380,8379,-8379,8374 ,8371,8367,-8367,8388,8375,8368,-8370,8382,8383,8384,-8390,8382,8386,8381,-8384,8318,8376,8319,-8321,8116,8352,8348 ,-8321,8329,8317,8318,-8348,8334,8358,8315,-8338,8230,8228,-8051,7545,7376,-7484,7558,7559,-7503,8534,8537,8536,-8536 ,8539,8547,8546,-8536,8548,9053,9054,-9026,9069,9078,9056,-8608,8608,8609,9068,-8603,8554,8534,8535,-8547,8555,8554 ,8546,-8557,8607,8608,8602,-9070,8556,8545,8543,-8556,8550,8610,8609,-8554,9015,8545,8556,-9023,8547,8549,9013,-9015 ,9052,9053,8548,-9064,9059,8545,9015,-9059,8563,8540,8565,-8565,9042,8569,8542,-9042,9016,8559,9059,-9059,8570,8536 ,8537,-8572,8571,8573,8572,-8571,8536,8570,8574,-8539,8575,8577,8576,-8565,8542,8562,8557,-9042,8561,8562,8540,-8564 ,8579,8537,8534,-8579,8582,8543,8544,-8582,8548,9025,8776,-8597,8541,8569,8585,-8587,8578,8534,8554,-8598,8597,8554 ,8555,-8584,8583,8555,8543,-8583,8581,8544,9061,-9063,8598,8560,8561,-8596,8584,8563,8564,-8588,8585,8569,9042,-9044 ,8589,8571,8537,-8580,8588,8601,8572,-8592,8590,8573,8571,-8590,8592,8574,8601,-8589,8580,8538,8574,-8593,8587,8564 ,8576,-8595,8600,8577,8575,-8594,8595,8561,8563,-8585,8591,8572,8573,-8591,8594,8576,8577,-8601,8603,8604,8566,-8568 ,8536,8538,-9056,9059,9060,8544,8543,-8546,8541,8542,-8570,8556,8546,8547,-9015,9070,8605,8606,9056,-9079,8559,8557 ,9060,-9060,8547,8539,-8550,8601,8570,-8573,8574,8570,-8602,8565,8575,-8565,8541,8575,-8566,8541,8586,8593,-8576,8558 ,8559,9016,-9018,8605,9070,9071,8604,-8604,8606,8605,8603,-8568,8606,8567,9057,-9057,8607,9056,9057,-8552,8608,8607 ,8551,-8553,8552,8553,8609,-8609,8610,9067,9068,-8610,8614,9018,9019,-8614,9018,8614,9066,-9066,8611,8618,8617,-8613 ,9005,9020,9021,-8617,8623,8615,9006,-9008,8618,8611,9064,-9064,8568,9046,-9048,8618,8619,8620,-8618,9007,9008,8622 ,-8624,8619,8618,9063,-8549,9047,9048,8599,-8569,9026,9027,8626,-8628,8613,9073,9072,-8615,9074,9075,9005,-8617,8548 ,8596,8628,-8620,8628,8629,8620,-8620,9008,9009,8630,-8623,9048,8626,9027,-8600,8631,8632,8633,-8635,8929,8928,8925 ,-8925,8635,8636,8637,-8639,8932,8931,8930,-8934,8639,8640,8641,-8643,8936,8935,8934,-8938,8643,8644,8645,-8647,8646 ,8645,8647,-8649,8650,8649,8647,-8646,8651,8652,8653,-8635,8654,8655,8656,-8658,8658,8659,8660,-8662,8662,8661,8660 ,-8664,8637,8664,8665,-8639,8666,8667,8668,-8670,8668,8670,8671,-8670,8672,8673,8674,-8676,8676,8672,8675,-8678,8678 ,8679,8680,-8682,8682,8683,8684,-8686,8686,8687,8681,-8681,8688,8689,8685,-8685,8690,8691,8692,-8694,8694,8690,8693 ,-8696,8695,8693,8696,-8698,8696,8693,8692,-8699,8699,8696,8698,-8701,8697,8696,8699,-8702,8702,8703,8701,-8700,8704 ,8702,8699,-8701,8705,8706,8707,-8709,8706,8709,8710,-8708,8714,8711,8712,-8714,8707,8710,8715,-8717,9032,9033,8717 ,-8719,9036,8719,8720,-9036,8721,8722,8723,-8725,8725,8726,8727,-8729,8727,8726,8670,-8669,8729,8730,8685,-8690,8731 ,8682,8685,-8731,8732,8733,8734,-8736,8736,8737,8738,-8740,8740,8741,8742,-8744,8741,8744,8745,-8743,8746,8747,8748 ,-8750,8750,8751,8752,-8747,8753,8754,8755,-8757,8757,8758,8721,-8755,8759,8758,8757,-8761,9062,8759,8761,-8582,8759 ,8760,8762,-8762,8763,8583,-8583,8763,8765,8744,-8765,8744,8741,8766,-8765,8756,8755,8767,-8769,8769,8745,8744,-8766 ,8770,8771,8772,-8774,8578,8774,8775,-8777,8778,8777,8628,8596,-8777,8779,8778,8776,-8776,9009,9010,8781,-8631,9012 ,8783,8784,-9012,8784,8783,8786,-8788,8630,8781,8627,-8627,9030,9031,8718,-8791,8791,8792,8773,-8773,8793,8794,8789 ,-8789,8752,8795,8747,-8747,8792,8791,8796,-8798,8798,8766,8741,-8741,8684,8681,8687,-8689,8799,8738,8737,-8801,8738 ,8799,8801,-8803,8749,8748,8803,-8805,8805,8804,8767,-8807,8807,8808,8672,-8677,8808,8809,8673,-8673,8810,8811,8812 ,-8665,8814,8813,8938,-8940,8683,8678,8681,-8685,8598,8624,8815,-8759,8815,8624,9028,-9030,8652,8651,8817,-8817,8818 ,8819,8740,-8821,8821,8822,8771,-8824,8824,8825,8822,-8822,8825,8824,8826,-8828,8727,8668,8667,-8829,8829,8728,8727 ,-8829,9034,9035,8720,-8832,8708,8707,8716,-8831,8653,8700,8698,-8649,8692,8646,8648,-8699,8691,8643,8646,-8693,8679 ,8678,8640,-8640,8678,8683,8832,-8641,8683,8682,8833,-8833,8682,8731,8636,-8834,8673,8664,8637,-8675,8809,8810,8664 ,-8674,8670,8662,8834,-8672,8670,8726,8661,-8663,8725,8658,8661,-8727,8835,8719,9036,-9038,8710,8654,8657,-8716,8709 ,8816,8654,-8711,8652,8704,8700,-8654,8676,8751,8836,-8808,8677,8752,8751,-8677,8729,8795,8752,-8678,8689,8688,8737 ,-8737,8688,8687,8800,-8738,8694,8695,8837,-8821,8701,8821,8823,-8698,8703,8824,8821,-8702,8824,8703,8705,-8827,8711 ,8708,8830,-8713,9034,8831,8717,-9034,8829,8828,8724,-8839,8667,8754,8724,-8829,8944,8943,8948,-8948,8950,8949,8952 ,-8952,8703,8702,8706,-8706,8702,8704,8709,-8707,8729,8677,8675,-8731,8730,8675,8674,-8732,8739,8802,8748,-8748,8761 ,8762,8765,-8764,8769,8765,8762,-8841,8777,8778,8785,-8781,8778,8779,8782,-8786,8736,8739,8747,-8796,8841,8794,8793 ,-8843,8803,8748,8802,-8844,8953,8954,8956,-8956,8844,8845,8711,-8715,8636,8731,8674,-8638,8704,8652,8816,-8710,8729 ,8689,8736,-8796,8705,8708,8711,-8846,8817,8846,8847,-8849,8852,8853,8649,-8651,8854,8855,8856,-8858,8874,8877,8876 ,-8880,8858,8859,8860,-8862,8892,8847,8846,-8891,8863,8862,8855,-8855,8862,8850,8856,-8856,8857,8856,8850,-8660,8659 ,8863,8854,-8858,8871,8870,8867,-8867,8864,8865,8866,-8868,9002,9003,8865,-8865,8655,8868,8869,-8657,8868,8655,8870 ,-8872,8874,8872,8873,-8878,8875,8876,8877,-8874,8878,8879,8876,-8876,8872,8874,8879,-8879,8861,8860,8851,-8881,8858 ,8861,8880,-8882,8859,8858,8881,-8854,8860,8859,8853,-8852,8882,8647,8883,-8890,8649,8884,8883,-8648,8885,8886,8884 ,-8650,8887,8888,8886,-8886,8882,8889,8888,-8888,8651,8890,8846,-8818,8890,8651,8634,-8634,8862,8863,9002,-8865,8862 ,8864,8867,8878,8875,-8881,8875,8873,8881,-8881,8873,8885,-8882,8867,8891,-8879,8886,8889,8883,-8885,8892,8891,8848 ,-8848,8891,8892,8893,-8895,8892,8890,8633,-8894,8872,8878,8891,8894,-8888,8894,8893,8632,-8632,8894,8631,8882,-8888 ,8896,8895,8963,-8963,8898,8897,8966,-8966,8971,8970,8968,-8970,8900,8899,8927,-8636,8903,8901,8902,-8919,8904,8905 ,8906,-8908,8908,8849,8909,-8922,8910,8911,8960,-8927,8919,8914,8923,-8921,8852,8650,8917,-8923,8901,8946,8663,-8909 ,8918,8919,8920,-8907,8902,8921,8922,-8916,8900,8665,8812,-8905,8910,8912,-8912,8642,8641,8923,-8915,8917,8644,8967 ,-8917,8906,8903,-8919,8903,8906,-8906,8911,8913,8964,-8960,8924,8925,8926,-8928,8910,8926,8925,-8929,8928,8929,8899 ,-8911,8899,8929,8924,-8928,8918,8930,8931,-8920,8932,8915,8919,-8932,8902,8915,8932,-8934,8902,8933,8930,-8919,8921 ,8934,8935,-8923,8936,8852,8922,-8936,8909,8852,8936,-8938,8909,8937,8934,-8922,8814,8920,8912,-8814,8939,8906,8920 ,-8815,8938,8907,8906,-8940,8938,8813,8912,-8908,8940,8941,8638,-8666,8638,8941,8942,-8636,8900,8635,8942,-8840,8940 ,8665,8900,-8840,8943,8944,8945,-8947,8945,8944,8947,-8904,8903,8947,8948,-8902,8943,8946,8901,-8949,8949,8908,8663 ,-8953,8849,8908,8949,-8951,8849,8950,8951,-8661,8951,8952,8663,-8661,8953,8812,8811,-8955,8904,8812,8953,-8956,8955 ,8956,8905,-8905,8954,8811,8905,-8957,8957,8958,8959,-8961,8959,8958,8961,-8912,8911,8961,8957,-8961,8962,8963,8641 ,-8965,8895,8923,8641,-8964,8896,8962,8964,-8914,8642,8965,8966,-8968,8897,8916,8967,-8967,8914,8916,8897,-8899,8965 ,8642,8914,-8899,8968,8645,8644,-8970,8650,8645,8968,-8971,8970,8971,8917,-8651,8969,8644,8917,-8972,8851,8909,8849 ,-8851,8659,8850,8849,-8661,8946,8834,8662,-8664,8927,8926,8833,-8637,8960,8959,8832,-8834,8964,8641,8640,-8833,8972 ,8734,8686,-8974,8743,8974,8820,-8741,8742,8975,8976,-8744,8769,8977,8978,-8746,8768,8767,8979,-8978,8757,8754,8753 ,-8981,8840,8762,8760,-8981,8768,8840,8980,-8757,8977,8769,8840,-8769,8981,8982,8983,-8733,8978,8984,8982,-8982,8977 ,8979,8984,-8979,8985,8986,8806,-8988,8985,8987,8755,-8755,8666,8669,8808,-8808,8809,8808,8669,-8672,8810,8809,8671 ,-8835,8751,8750,8805,-8837,8666,8985,8754,-8668,8806,8986,8836,-8806,8804,8805,8750,-8750,8804,8803,8979,-8768,8803 ,8843,8984,-8980,8984,8843,8801,-8983,8807,8836,8986,-8667,8799,8983,8982,-8802,8800,8733,8983,-8800,8687,8686,8733 ,-8801,8680,8988,8973,-8687,8679,8989,8988,-8681,8990,8643,8691,-8990,8642,8967,8990,-8640,8988,8690,8694,-8974,8988 ,8989,8691,-8691,8989,8679,8639,-8991,8967,8644,8643,-8991,8972,8974,8743,-8977,8975,8742,8745,-8979,8991,8981,8732 ,-8736,8975,8991,8735,-8977,8972,8976,8735,-8735,8973,8694,8974,-8973,8834,8946,8945,-8811,8695,8697,8992,-8838,8993 ,8771,8770,-8995,8773,8775,8774,-8771,8792,8779,8775,-8774,8779,8792,8797,-8783,8797,8796,8995,-8783,8827,8826,8996 ,-8998,8998,8993,8994,-8820,8770,8774,8819,-8995,8719,8835,8658,-8726,8728,8720,8719,-8726,8831,8720,8728,-8830,8829 ,8999,8717,-8832,9000,8790,8718,-9002,8722,8721,8758,-8816,8842,8793,8783,-9013,8783,8793,8788,-8787,9030,8790,8815 ,-9030,8790,9000,8722,-8816,9001,8723,8722,-9001,8845,8844,8997,-8997,8997,8844,8841,-8996,8865,9003,8869,8868,8871 ,-8867,8889,8886,-8889,8632,8893,-8634,8941,8940,8839,-8943,8957,8961,-8959,8895,8896,8913,-8924,8631,8634,8647,-8883 ,8655,8817,8848,-8871,9038,8863,-8660,8869,9003,9002,-8657,8653,8648,8647,-8635,8817,8655,8654,-8817,9001,8999,8838 ,-8724,8718,8717,8999,-9002,8794,8714,8713,-8790,8841,8844,8714,-8795,8995,8841,8842,-8783,8796,8827,8997,-8996,8791 ,8825,8827,-8797,8825,8791,8772,-8823,8993,9004,8823,-8772,8992,9004,8993,-8999,8992,8998,8818,-8838,9038,8659,8835 ,-9038,9010,9011,8784,-8782,8781,8784,8787,-8628,8628,8777,8780,-8630,9066,8614,9072,-9080,8739,8738,-8803,8746,8749 ,-8751,8960,8833,-8927,8754,8721,-8725,8766,8597,-8765,8766,8578,-8598,8819,8798,-8741,8801,8843,-8803,8964,8832,-8960 ,8818,8998,-8820,9004,8697,-8824,8636,8635,-8928,8810,8945,-8812,8664,8812,-8666,8991,8978,-8982,8980,8760,-8758,8753 ,8756,-8981,8820,8974,-8695,8733,8732,-8984,8985,8666,-8987,8806,8767,-8988,8987,8767,-8756,8733,8686,-8735,8975,8978 ,-8992,8819,8774,-8799,8996,8826,-8706,8697,9004,-8993,8659,8658,-8836,8838,8999,-8830,8705,8845,-8997,8718,9031,-9033 ,8772,8771,-8823,8818,8820,-8838,8723,8838,-8725,8624,9026,-9029,9075,9073,8613,-9006,8613,9019,9020,-9006,8612,8617 ,9007,-9007,8617,8620,9008,-9008,8620,8629,9009,-9009,8629,8780,9010,-9010,8780,8785,9011,-9011,8782,9012,9011,-8786 ,8842,9012,-8783,9024,8550,8553,-9024,9022,9023,8553,-8553,9015,9022,8552,-8552,9015,8551,9057,-9059,8567,9016,9058 ,-9058,9017,9016,8567,-8567,9017,8566,9045,-9047,8611,9018,9065,-9065,9018,8611,8612,-9020,9020,9019,8612,-9007,9021 ,9020,9006,-8616,9014,9013,9024,-9024,9022,8556,9014,-9024,8538,9025,9054,-9056,9025,8538,8580,-8777,8798,8774,8578 ,-8767,8583,8763,8764,-8598,8581,8761,-8583,8624,8625,9027,-9027,9028,9026,8627,-8788,9029,9028,8787,-8787,8788,9030 ,9029,-8787,8788,8789,9031,-9031,9032,9031,8789,-8714,8713,8712,9033,-9033,8830,9034,9033,-8713,8830,8716,9035,-9035 ,8715,9036,9035,-8717,9037,9036,8715,-8658,8656,9038,9037,-8658,8656,9002,8863,-9039,8586,8585,9039,-9041,8585,9043 ,8621,-9040,8587,8594,8600,-8594,8587,8593,8586,9040,-8585,8598,8595,8584,9040,-9040,8599,9027,8625,-8622,9039,8621 ,-8599,8625,8624,-8599,8592,8588,8589,-8580,8589,8588,8591,-8591,8579,8578,8776,8580,-8593,8598,8621,-8626,8557,8559 ,8558,-9042,8568,9042,9041,-8559,9042,8568,8599,-9044,8621,9043,-8600,8560,8562,-8562,8562,8542,-8541,8557,8562,8560 ,9061,-9061,8544,9060,-9062,8604,9044,9045,-8567,9044,9076,9074,-8617,8616,9021,9045,-9045,9021,8615,9046,-9046,8615 ,8623,9047,-9047,8623,8622,9048,-9048,8622,8630,8626,-9049,8610,9049,9077,-9068,8610,8550,9050,-9050,9051,9050,8550 ,-9025,9052,9051,9024,-9014,9053,9052,9013,-8550,9054,9053,8549,-8540,9055,9054,8539,-8536,8536,9055,-8536,9061,8560 ,8598,-9063,8759,9062,8598,-8759,9077,9049,9066,-9080,9050,9065,9066,-9050,9064,9065,9050,-9052,9052,9063,9064,-9052 ,9017,9046,8568,-8559,8912,8910,8899,-8908,8903,8905,8811,-8946,8541,8565,8540,-8543,8887,8885,8873,-8873,8923,8913 ,8912,-8921,8913,8911,-8913,8907,8899,8900,-8905,8921,8902,8901,-8909,8915,8922,8917,-8917,8915,8916,8914,-8920,8851 ,8853,8852,-8910,8649,8853,8881,-8886,8862,8880,8851,-8851,8867,8870,8848,-8892,8763,8582,-8762,9080,9081,9082,-9084 ,9081,9084,9085,-9083,9084,9086,9263,-9086,9088,9084,9081,-9090,9090,9086,9084,-9089,9091,9087,9086,-9091,9094,9092 ,9093,-9134,9095,9096,9088,-9090,9096,9097,9090,-9089,9097,9098,9091,-9091,9099,9100,9096,-9096,9100,9101,9097,-9097 ,9101,9102,9098,-9098,9093,9092,9104,-9131,9083,9105,9092,-9081,9089,9081,9080,-9095,9095,9089,9094,-9134,9106,9107 ,9108,-9110,9110,9111,9109,-9109,9112,9113,9111,-9111,9114,9115,9113,-9113,9116,9117,9109,-9112,9118,9116,9111,-9114 ,9119,9118,9113,-9116,9120,9121,9122,-9124,9116,9124,9125,-9118,9118,9126,9124,-9117,9119,9127,9126,-9119,9124,9100 ,9099,-9126,9126,9101,9100,-9125,9127,9102,9101,-9127,9128,9122,9121,-9133,9122,9129,9107,-9107,9117,9123,9106,-9110 ,9117,9125,9120,-9124,9120,9220,9103,-9122,9093,9130,9131,-9104,9131,9132,9121,-9104,9103,9220,9133,-9094,9134,9135 ,9136,-9138,9138,9139,9137,-9137,9140,9141,9139,-9139,9142,9143,9137,-9140,9144,9142,9139,-9142,9091,9144,9141,-9088 ,9145,9146,9147,-9149,9142,9149,9150,-9144,9144,9151,9149,-9143,9091,9098,9151,-9145,9149,9152,9153,-9151,9151,9154 ,9152,-9150,9098,9102,9154,-9152,9156,9147,9146,-9179,9135,9134,9147,-9158,9143,9148,9134,-9138,9143,9150,9145,-9149 ,9158,9159,9160,-9162,9162,9164,9165,-9164,9164,9115,9114,-9166,9166,9162,9159,-9168,9168,9164,9162,-9167,9119,9115 ,9164,-9169,9169,9170,9171,-9173,9173,9174,9166,-9168,9174,9175,9168,-9167,9175,9127,9119,-9169,9153,9152,9174,-9174 ,9152,9154,9175,-9175,9154,9102,9127,-9176,9170,9169,9176,-9181,9169,9158,9161,-9178,9167,9159,9158,-9173,9171,9173 ,9167,-9173,9179,9178,9146,-9156,9170,9180,9179,-9156,9082,9182,9181,-9084,9085,9183,9182,-9083,9181,9184,9105,-9084 ,9184,9185,9104,-9106,9107,9187,9186,-9109,9108,9186,9188,-9111,9110,9188,9189,-9113,9112,9189,9190,-9115,9129,9191 ,9187,-9108,9128,9192,9191,-9130,9130,9194,9193,-9132,9104,9185,9194,-9131,9193,9195,9132,-9132,9195,9192,9128,-9133 ,9135,9196,9340,-9137,9136,9340,9197,-9139,9138,9197,9198,-9141,9157,9199,9196,-9136,9156,9200,9199,-9158,9160,9202 ,9201,-9162,9163,9203,9202,-9161,9165,9204,9203,-9164,9114,9190,9204,-9166,9201,9205,9177,-9162,9205,9206,9176,-9178 ,9208,9207,9178,-9180,9207,9200,9156,-9179,9180,9209,9208,-9180,9176,9206,9209,-9181,9080,9092,-9095,9092,9105,-9105 ,9106,9123,-9123,9122,9128,-9130,9134,9148,-9148,9147,9156,-9158,9158,9169,-9173,9169,9177,-9177,9218,9219,9215,-9218 ,9211,9213,9214,-9216,9214,9213,9210,9204,-9217,9204,9190,9217,-9217,9190,9189,9218,-9218,9218,9189,9212,-9220,9212 ,9211,9215,-9220,9215,9214,9216,-9218,9220,9120,9125,-9100,9133,9220,9099,-9096,9155,9146,9145,-9222,9221,9145,9150 ,-9154,9171,9221,9153,-9174,9155,9221,9171,-9171,9159,9162,9163,-9161,9232,9231,9281,-9231,9407,9408,9229,-9400,9290 ,9234,9249,-9290,9239,9240,-9251,9416,9246,9223,-9227,9292,9231,9232,-9292,9241,9238,9232,9230,-9244,9236,9235,-9229 ,9293,9237,9231,-9293,9251,9254,9253,-9253,9236,9251,9252,-9236,9255,9256,9249,-9235,9253,9254,9256,-9256,9257,9258 ,9254,-9252,9259,9257,9251,-9237,9256,9260,9248,-9250,9254,9258,9260,-9257,9257,9262,9261,-9259,9287,9288,9248,-9261 ,9286,9287,9260,-9259,9266,9245,9247,-9265,9267,9266,9264,-9266,9360,9269,-9269,9261,9271,9284,-9286,9266,9272,9244 ,-9246,9267,9270,9272,-9267,9268,9273,9271,9261,-9263,9198,9273,9268,-9270,9283,9274,9242,-9283,9284,9271,9274,-9284 ,9240,9239,9276,-9276,9277,9238,9241,-9279,9275,9276,9280,-9280,9280,9277,9278,-9280,9277,9276,9239,-9239,9261,9285 ,9286,-9259,9273,9275,9279,-9272,9278,9241,9242,-9275,9279,9278,9274,-9272,9255,9234,9235,-9253,9227,9415,9416,-9227 ,9246,9407,9399,-9224,9250,9291,9232,9238,-9240,9225,9418,9246,-9417,9243,9282,9242,-9242,9289,9249,9248,-9289,9231 ,9237,9383,-9282,9408,9831,9832,-9230,9830,9233,9230,-9282,9243,9230,9233,-9420,9395,9228,9394,-9397,9255,9252,-9254 ,9276,9277,-9281,9822,9823,9347,-9355,9821,9822,9354,-9356,9355,9356,9820,-9822,9356,9400,9819,-9821,9400,9357,9818 ,-9820,9070,9818,9834,-9072,9244,9282,9243,-9420,9417,9283,9282,9244,-9273,9420,9284,9283,-9418,9285,9284,9420,-9422 ,9286,9285,9421,-9423,9422,9423,9287,-9287,9247,9288,9287,9423,-9265,9225,9289,9288,-9248,9290,9289,9225,-9225,9290 ,9224,9391,-9391,9397,9390,9391,-9399,9203,9204,9374,-9376,9376,9295,-9368,9208,9401,9328,-9208,9791,9366,9367,-9360 ,9203,9375,9299,-9203,9402,9918,9919,-9328,9305,9189,-9189,9359,9367,9368,-9321,9306,9915,9366,-9792,9303,9403,9404 ,-9309,9192,9309,9380,-9382,9381,9382,-9192,9362,9186,9187,-9312,9426,9427,9785,-9787,9430,9427,9426,-9432,9428,9429 ,9433,-9435,9430,9431,9434,-9434,9429,9428,9432,-9451,9317,9313,9784,9296,9297,-9299,9352,9353,9318,-9781,9914,9319 ,-9365,9451,9437,9438,-9440,9364,9319,9321,-9849,9917,9325,9377,-9917,9380,9309,9846,-9848,9910,9911,9845,-9845,9401 ,9402,9327,-9329,9324,9405,-9195,9324,9337,9843,-9845,9439,9789,9790,-9452,9789,9440,9441,-9791,9442,9445,9441,-9441 ,9442,9443,9444,-9446,9447,9444,9443,-9447,9436,9447,9446,-9436,9850,9330,9213,-9212,9374,9210,9213,-9332,6854,6857 ,9424,-9634,9906,9907,9841,-9841,9387,9922,9923,-9370,9903,9904,9838,-9838,9901,9902,9836,-9836,9413,9392,9837,-9839 ,9337,9395,9842,-9844,9332,9333,9388,-9390,9411,9412,9335,-9340,9406,9373,9358,-9200,9183,9236,9228,-9183,9340,9291 ,9250,-9198,9920,9921,9342,-9342,9908,9909,9843,-9843,9346,9345,9344,-9344,9369,9923,9924,-9371,9906,9840,9839,-9906 ,9333,9332,9334,-9339,9410,9925,9926,-9372,9836,9393,9824,-9836,9826,9827,9348,-9350,9910,9844,9843,-9910,9346,9343 ,9303,-9309,9327,9919,9920,-9342,9903,9837,9836,-9903,9336,9349,9339,-9336,9385,9371,9372,-9387,9184,9337,9324,-9186 ,9448,9449,9450,-9433,9305,9188,-9313,9212,9304,-9330,9213,9330,-9332,9846,9912,9379,-9848,9825,9826,9349,-9337,9347 ,9222,9227,-9355,9355,9354,9227,-9227,9226,9223,9356,-9356,9223,9399,9400,-9357,9399,9229,9357,-9401,9357,9229,9832 ,-9834,9293,9292,9358,-9374,9292,9291,9340,-9359,9197,9250,9240,-9199,9376,9377,9325,-9327,9263,9360,-9263,9262,9360 ,-9269,9310,9361,9363,-9324,9188,9186,9362,-9313,9181,9182,9228,9395,-9338,9086,9087,9360,-9264,9087,9141,9140,9269 ,-9361,9275,9273,9198,-9241,9183,9085,9263,9259,-9237,9191,9382,-9188,9363,9361,9381,-9381,9379,9364,9848,-9848,9364 ,9379,9913,-9915,9377,9366,9915,-9917,9376,9367,9366,-9378,9295,9368,-9368,9409,9410,9371,-9386,9369,9370,9384,-9384 ,9348,9372,9371,-9927,9372,9348,9827,-9829,9341,9373,9328,-9328,9293,9373,9341,-9343,9294,9205,-9202,9206,9205,9376 ,-9327,9382,9381,-9362,9187,9382,9361,-9312,9369,9383,9237,-9388,9828,9829,9386,-9373,9237,9293,9342,-9388,9342,9921 ,9922,-9388,9389,9388,9344,-9346,9908,9842,9841,-9908,9234,9394,9228,-9236,9393,9392,9222,-9348,9824,9393,9347,-9824 ,9227,9222,9414,-9416,9290,9390,9394,-9235,9394,9390,9397,-9397,9392,9413,9414,-9223,9206,9326,9401,9208,-9210,9326 ,9325,9402,-9402,9917,9918,9402,-9326,9404,9403,9302,-9308,9845,9911,9912,-9847,9195,9405,-9310,9199,9200,-9407,9233 ,9408,9407,-9420,9830,9831,9408,-9234,9384,9370,9410,-9410,9370,9924,9925,-9411,9338,9334,9412,-9412,9838,9904,9905 ,-9840,9398,9413,9838,-9840,9413,9398,9391,-9415,9414,9391,9224,-9416,9416,9415,9224,-9226,9270,9417,-9273,9245,9418 ,9225,-9248,9245,9244,-9419,9270,9420,-9418,9420,9270,9267,-9422,9422,9421,9267,-9266,9265,9264,9423,-9423,9196,9358 ,-9341,9199,9358,-9197,9195,9309,-9193,9193,9405,-9196,9194,9405,-9194,9324,9194,-9186,9257,9259,9263,-9263,9269,9140 ,-9199,9427,9787,9784,-9786,9426,6856,6861,-9432,6858,6859,9428,-9435,9429,9314,9781,-9434,9786,9424,6857,-6861,9431 ,6861,6858,-9435,9316,9314,9429,-9451,9432,9428,6859,-6863,9430,9433,9781,-9316,9430,9315,9787,-9428,9318,9310,9436 ,-9436,9436,9310,9323,9321,-9448,9359,9320,9437,-9452,9320,9297,9438,-9438,9297,9296,9439,-9439,9790,9791,9359,-9452 ,9441,9306,9791,-9791,9442,9440,9783,-9783,9441,9445,9322,-9307,9301,9443,9442,-9783,9445,9444,9319,-9323,9443,9301 ,9300,-9447,9319,9444,9447,-9322,9446,9300,9780,9318,-9436,6866,9352,9449,-9449,9449,9352,9316,-9451,9448,9432,6862 ,-6867,9439,9296,9788,-9790,9630,9455,9456,-9454,9455,9457,9458,-9457,9457,9459,9460,-9459,9617,9461,9462,-9464,9464 ,9645,9646,-9648,9644,9645,9464,-9469,9659,9643,-9471,9452,9476,9475,-9623,9477,9621,9623,-9625,9477,9478,9620,-9622 ,9478,9479,9619,-9621,9461,9480,9481,-9463,9632,9467,9521,-9521,9483,9468,9464,-9483,9484,9470,9468,-9484,9653,9659 ,9470,-9655,9476,9487,9486,-9476,9488,9477,9624,-9626,9478,9477,9488,-9490,9479,9478,9489,-9575,9480,9573,9572,-9482 ,9631,9632,9520,-9570,9483,9482,9568,-9568,9484,9483,9567,-9567,9487,9490,9491,-9487,9493,9488,9625,-9627,9496,9574 ,9489,-9523,9586,9631,9569,-9502,9584,9565,9655,-9657,9564,9565,9584,-9584,9627,9665,9492,9493,-9627,9613,9614,9496 ,-9498,9587,9588,9858,-9858,9857,9858,9604,-9606,9577,9578,9500,-9502,9651,9641,9642,-9651,9656,9657,9504,-9585,9584 ,9504,9505,-9584,9612,9662,-9665,9494,9507,9508,-9500,9595,9591,9589,-9591,9609,9608,9591,-9596,9509,9500,9578,-9580 ,9640,9641,9651,-9653,9658,9511,9504,-9658,9512,9505,9504,-9512,9514,9515,9508,-9508,9595,9590,9593,-9593,9609,9595 ,9592,-9595,9509,9579,9580,-9519,9510,9509,9518,-9520,9640,9652,-9640,9615,9616,9479,-9575,9614,9615,9574,-9497,9500 ,9509,9510,-9503,9501,9500,9502,-9587,9522,9523,9497,-9497,9497,9669,9764,-9663,9493,9668,9523,-9523,9489,9488,9493 ,-9523,9597,9596,9855,-9855,9854,9855,9603,-9603,9577,9501,9569,-9571,9585,9566,9567,-9638,9310,9524,9525,-9362,9311 ,9526,9527,-9363,9312,9362,9527,-9529,9312,9528,9529,-9306,9329,9304,9530,-9532,9374,9331,9532,-9534,9375,9374,9533 ,-9535,9299,9375,9534,-9536,9299,9535,9536,-9295,9368,9295,9537,-9540,9310,9318,9538,-9525,9320,9368,9539,-9542,9538 ,9318,9353,-9541,9297,9320,9541,9563,-9299,9317,9298,9563,-9583,9317,9582,-9544,9317,9543,9545,-9314,9546,6855,6630 ,-6637,6867,6864,9548,-9548,6606,6609,9549,-9563,6609,6637,9550,-9550,6638,9551,9581,-6605,6638,6639,9552,-9552,6592 ,9638,9552,-6640,9553,9424,9425,-9817,9305,9529,9530,-9305,9331,9330,9554,-9556,9454,9525,9524,-9453,9527,9526,9453 ,-9457,9528,9527,9456,-9459,9529,9528,9458,-9461,9462,9531,9530,-9464,9466,9661,9532,-9556,9469,9534,9533,-9466,9471 ,9535,9534,-9470,9472,9536,9535,-9472,9539,9537,9474,-9474,9524,9538,9476,-9453,9481,9556,9531,-9463,9485,9541,9539 ,-9474,9476,9538,9540,-9488,9556,9481,9572,-9572,9563,9541,9485,-9565,9487,9540,9542,-9491,9759,9762,9763,-9761,9543 ,9582,9583,-9506,9776,9777,9544,-9507,9545,9543,9505,-9513,9778,9779,9546,-9514,9514,9547,9548,-9516,9561,9562,9549 ,-9517,9516,9549,9550,-9518,9580,9581,9551,-9519,9518,9551,9552,-9520,9638,9639,9519,-9553,9553,9816,9817,-9577,9530 ,9529,9460,-9464,9554,9557,9520,-9522,9555,9554,9521,-9467,9353,9352,9542,-9541,9495,9494,9499,-9499,9600,9598,9853 ,-9853,9329,9531,9851,-9851,9479,9616,9618,-9620,9467,9466,-9522,9532,9331,-9556,9573,9495,9498,-9573,9572,9498,9558 ,-9572,9498,9499,9559,-9559,9560,9559,9499,-9509,9560,9508,9515,-9562,9515,9548,9562,-9562,6864,6606,9562,-9549,9570 ,9569,9520,-9558,9853,9854,9602,-9600,9598,9597,9854,-9854,9526,9525,9454,-9454,9361,9525,9526,-9312,9536,9537,9295 ,-9295,9474,9537,9536,-9473,9575,9503,9636,-9636,9607,9606,9608,-9610,9607,9609,9594,-9611,9517,9550,9581,-9581,6604 ,9581,9550,-6638,9564,9583,9582,-9564,9558,9559,9588,-9588,9588,9559,9849,-9859,9604,9858,9849,-9579,9559,9560,9590 ,-9590,9591,9849,9559,-9590,9590,9560,9561,-9594,9561,9516,9592,-9594,9516,9517,9594,-9593,9596,9558,9856,-9856,9855 ,9856,9577,-9604,9597,9571,9558,-9597,9598,9556,9571,-9598,9531,9556,9598,-9601,9531,9600,9852,-9852,9557,9554,9601 ,-9600,9602,9570,9557,-9600,9602,9603,9577,-9571,9578,9577,9605,-9605,9857,9605,9577,-9857,9579,9578,9606,-9608,9608 ,9606,9578,-9850,9579,9607,9610,-9581,9517,9580,9610,-9595,9852,9853,9599,-9602,9851,9852,9601,-9555,9850,9851,9554 ,-9331,9777,6635,-9545,9611,9775,9776,-9507,9507,9612,9672,-9515,9507,9494,9613,-9613,9494,9495,9614,-9614,9573,9615 ,9614,-9496,9573,9480,9616,-9616,9617,9618,-9462,9619,9618,9617,-9460,9620,9619,9459,-9458,9621,9620,9457,-9456,9622 ,9623,-9631,9624,9623,9622,-9476,9624,9475,9486,-9626,9625,9486,9491,-9627,9627,9761,9758,-9758,9775,9611,9628,-9775 ,9778,9611,-9507,6636,9629,9513,-9547,9630,9623,9621,-9456,9461,9618,9616,-9481,9459,9617,9463,-9461,9642,9568,9649 ,-9651,9568,9482,9648,-9650,9482,9464,9647,-9649,9485,9653,9565,-9565,9576,9634,9633,-9554,9575,9635,9634,-9577,9585 ,9637,9636,-9504,9634,9639,9638,-9634,9635,9640,9639,-9635,9636,9641,9640,-9636,9642,9641,9636,-9638,9637,9567,9568 ,-9643,9469,9644,9643,-9472,9645,9644,9469,-9466,9646,9661,9466,-9468,9647,9646,-9468,9648,9647,9467,-9633,9649,9648 ,9632,-9632,9650,9649,9631,-9587,9651,9650,9586,-9503,9652,9651,9502,-9511,9519,9639,9652,-9511,9654,9484,9566,-9656 ,9655,9566,9585,-9657,9585,9503,9657,-9657,9575,9658,9657,-9504,9511,9576,9817,-9513,9654,9470,-9485,9653,9660,-9660 ,9660,9472,9471,9643,-9660,9629,9628,-9612,9758,9761,9762,-9760,9452,9622,9630,9453,-9455,9565,9653,9654,-9656,9473 ,9660,9653,-9486,9472,9660,9473,-9475,9646,9645,9465,-9662,9465,9533,9532,-9662,9628,9667,9773,-9775,9667,9670,-9672 ,6636,6868,-9630,9493,9492,-9669,9612,9613,9497,-9663,9523,9669,-9498,6868,9670,9667,9628,-9630,6865,6610,9678,-9688 ,9688,6640,6869,-9734,9753,9754,9676,-9718,9705,9696,9695,-9705,9772,9681,9703,-9772,9700,9685,9705,-9705,9713,9682 ,9703,-9712,9718,9683,9693,-9717,9694,9677,9720,-9720,9663,9720,9677,-9665,9699,9679,9706,-9722,9706,9687,9722,-9722 ,9750,9712,9680,-9750,9702,9766,9767,-9684,9693,9768,9769,-9709,9707,9674,9730,-9730,9730,9674,9732,-9732,9672,9664 ,9677,-9757,6865,9687,9706,-9352,9749,9680,9670,-6869,9689,9668,9492,-9708,9689,9673,9523,-9669,9752,9753,9717,-9716 ,9773,9667,9681,-9773,9669,9523,9673,-9693,9662,9764,9765,-9685,9694,9676,9754,-9756,9694,9755,9756,-9678,9696,9686 ,9697,-9696,9690,9737,9738,-9692,9736,9737,9690,-9710,9688,9733,9734,-9699,9698,9734,9735,-9702,9750,9751,9675,-9713 ,9703,9682,9770,-9772,9701,9735,9736,-9710,9706,9679,9350,-9352,9492,9665,9674,-9708,9770,9682,9708,-9770,9671,9670 ,9680,-9711,9671,9710,9681,-9668,9703,9681,9710,-9712,9710,9680,9712,-9712,9712,9675,9713,-9712,9708,9682,9713,-9715 ,9713,9675,9715,-9715,9714,9716,9693,-9709,9715,9717,9716,-9715,9717,9676,9718,-9717,9720,9684,9702,-9720,9702,9683 ,9718,-9720,9718,9676,9694,-9720,9663,9662,9684,-9721,9705,9685,9699,-9722,9687,9678,9723,-9723,9723,9686,9696,-9723 ,9721,9722,9696,-9706,9752,9715,9675,-9752,9724,9691,9738,-9740,9739,9740,9725,-9725,9514,9725,9740,-9548,9684,9765 ,9766,-9703,9692,9673,9727,-9727,9683,9767,9768,-9694,9727,9673,9689,-9729,9728,9689,9707,-9730,9732,9674,9665,-9667 ,9733,6869,6863,-9742,9734,9733,9741,-9743,9735,9734,9742,-9744,9736,9735,9743,-9745,9744,9745,9737,-9737,9738,9737 ,9745,-9747,9739,9738,9746,-9748,9747,9748,9740,-9740,9547,9740,9748,-6871,6863,9350,9679,-9742,9742,9741,9679,-9700 ,9743,9742,9699,9685,-9701,9744,9743,9700,-9705,9704,9695,9745,-9745,9746,9745,9695,-9698,9747,9746,9697,9686,-9724 ,9723,9678,9748,-9748,9748,9678,6610,-6871,9688,9749,6868,-6641,9698,9750,9749,-9689,9698,9701,9751,-9751,9709,9752 ,9751,-9702,9709,9690,9753,-9753,9690,9691,9754,-9754,9755,9754,9691,-9725,9756,9755,9724,-9726,9514,9672,9756,-9726 ,9612,9664,-9673,9627,9757,9666,-9666,6631,9760,9763,-6867,9761,9627,9626,-9492,9491,9490,9762,-9762,9542,9763,9762 ,-9491,6866,9763,9542,-9353,9764,9669,9692,-9766,9766,9765,9692,-9727,9767,9766,9726,-9728,9768,9767,9727,-9729,9769 ,9768,9728,-9730,9730,9770,9769,-9730,9771,9770,9730,-9732,9732,9772,9771,-9732,9666,9773,9772,-9733,9774,9773,9666 ,-9758,9758,9775,9774,-9758,9775,9758,9759,-9777,9759,9760,9777,-9777,6870,6867,-9548,9329,9850,9211,-9213,9299,9294 ,9201,-9203,9638,6871,6854,-9634,9506,9544,9779,-9779,6683,9779,9544,-6636,9363,9848,9321,-9324,9847,9848,9363,-9381 ,9405,9845,9846,-9310,9324,9844,9845,-9406,9396,9841,9842,-9396,9840,9841,9396,-9398,9398,9839,9840,-9398,9836,9837 ,9392,-9394,9425,9785,9784,-9314,9786,9785,9425,-9425,9789,9788,9783,-9441,9300,9301,9792,-9794,9783,9788,9795,-9795 ,9796,9797,9784,-9788,9798,9787,9315,-9800,9800,9314,9316,-9802,9802,9803,9781,-9315,9804,9805,9315,-9782,9301,9782 ,9807,-9807,9797,9808,9296,-9785,9808,9809,9788,-9297,9352,9780,9811,-9811,9780,9300,9812,-9812,9316,9352,9810,-9814 ,9782,9783,9814,-9816,9313,9816,-9426,9817,9816,9545,-9513,9313,9545,-9817,9633,9424,-9554,9811,9812,9813,-9811,9812 ,9300,9316,-9814,9300,9793,9801,-9317,9793,9792,9800,-9802,9792,9301,9314,-9801,9301,9806,9802,-9315,9806,9807,9803 ,-9803,9807,9782,9781,-9804,9782,9815,9804,-9782,9815,9814,9805,-9805,9814,9783,9315,-9806,9783,9794,9799,-9316,9794 ,9795,9798,-9800,9795,9788,9787,-9799,9788,9809,9796,-9788,9809,9808,9797,-9797,9818,9070,9078,-9820,9819,9078,9069 ,-9821,9821,9820,9069,-8603,8602,9068,9822,-9822,9067,9823,9822,-9069,9077,9824,9823,-9068,9824,9077,9079,-9836,9072 ,9901,9835,-9080,9073,9075,9826,-9826,9075,9074,9827,-9827,9827,9074,9076,-9829,9818,9357,9833,-9835,9383,9384,9830 ,-9282,9831,9830,9384,-9410,9832,9831,9409,-9386,9833,9832,9385,-9387,9829,9834,9833,-9387,9829,9071,-9835,9849,9591 ,-9609,9587,9857,9856,-9559,9418,9244,-9420,9246,9418,9419,-9408,9337,9184,-9182,9328,9373,9406,9200,-9208,9629,9611 ,-9514,9644,9468,9470,-9644,9638,6592,-6872,9658,9575,-9577,9658,9576,-9512,9294,9295,9376,-9206,9374,9204,-9211,9305 ,9304,9212,-9190,9381,9191,-9193,6646,6645,-6857,6646,6856,-6861,9786,6860,6856,-9427,6806,6877,-6875,6806,6807,-6878 ,7911,6874,6877,-7944,7783,7983,-7988,7859,7982,7983,-7784,9076,9829,-9829,9076,9071,-9830,9044,8604,9071,-9077,9778 ,9513,-9612,6631,9777,-9761,6631,6635,-9778,6683,6855,9546,-9780,9662,9663,-9665,7891,9859,7903,-7891,7892,9861,9860 ,-7985,7893,9862,9861,-7893,9862,7893,9894,-9894,9863,9893,9894,-7895,7895,9864,9863,-7895,9865,9864,7895,-7897,7992 ,9866,9865,-7897,7897,9867,9866,-7993,7898,9868,9867,-7898,7900,9870,9869,-7900,7746,9870,7902,-7745,7902,9870,7900 ,-7746,7740,7742,7733,-9872,9872,9871,7733,-7785,9873,9872,7784,-7871,7856,9874,9873,-7871,9874,7856,9892,-9892,9892 ,7823,9875,-9892,7822,9876,9875,-7824,9877,9876,7822,-7822,7821,7993,9878,-9878,7993,7878,9879,-9879,9880,9879,7878 ,-7874,7793,7734,9880,-7874,7737,9871,7794,-7739,7737,7740,-9872,7794,7830,7703,-7739,7863,9885,9884,-7855,9886,9885 ,7863,-7817,7858,9896,9895,-7858,7982,9897,9896,-7859,7840,9897,7982,-7860,7929,7812,-7810,9899,9898,7829,-7842,9901 ,9072,9073,-9826,9336,9902,9901,-9826,9903,9902,9336,-9336,9904,9903,9335,-9413,9905,9904,9412,-9335,9906,9905,9334 ,-9333,9907,9906,9332,-9390,9908,9907,9389,-9346,9909,9908,9345,-9347,9910,9909,9346,-9309,9911,9910,9308,-9405,9912 ,9911,9404,-9308,9913,9379,9912,-9308,9378,9913,9307,-9303,9914,9913,9378,-9366,9322,9319,-9915,9322,9914,-9366,7327 ,7710,7709,-7329,7711,7304,-7708,7305,7861,-7863,9322,9365,9915,-9307,9916,9915,9365,-9379,9917,9916,9378,-9303,9918 ,9917,9302,-9404,9919,9918,9403,-9304,9343,9920,9919,-9304,9921,9920,9343,-9345,9922,9921,9344,-9389,9923,9922,9388 ,-9334,9338,9924,9923,-9334,9925,9924,9338,-9412,9339,9926,9925,-9412,9348,9926,9339,-9350,5882,5884,5877,-5881,9927 ,9928,9929,-9931,9930,9929,9931,-9933,9932,9931,9933,-9935,9934,9933,9935,-9937,9936,9935,9937,-9939,9938,9937,9939 ,-9941,9940,9939,9941,-9943,9942,9941,9943,-9945,9944,9943,9945,-9947,9946,9945,9947,-9949,9948,9947,9949,-9951,9950 ,9949,9951,-9953,9952,9951,9953,-9955,9954,9953,9955,-9957,9956,9955,9957,-9959,9958,9957,9928,-9928,9960,9929,-9929 ,9960,9931,-9930,9960,9933,-9932,9960,9935,-9934,9960,9937,-9936,9960,9939,-9938,9960,9941,-9940,9960,9943,-9942,9960 ,9945,-9944,9960,9947,-9946,9960,9949,-9948,9960,9951,-9950,9960,9953,-9952,9960,9955,-9954,9960,9957,-9956,9960,9928 ,-9958,9961,9962,9963,-9965,9965,9966,9967,-9969,9969,9970,9971,-9973,9973,9974,9975,-9977,9977,9978,9979,-9981,9981 ,9966,9982,-9984,9984,9985,9986,-9988,9988,9985,9989,-9991,9991,9992,9993,-9983,9994,9976,9975,-9996,9995,9996,9978 ,-9995,9997,9998,9964,-9964,9999,10000,10001,-10003,9944,9990,9989,-9943,9942,9989,9984,-9941,9940,9984,9987,-9939 ,9987,10003,9936,-9939,9952,10002,10001,-9951,9950,10001,10004,-9949,9948,10004,10005,-9947,9946,10005,9990,-9945 ,10007,9962,9961,10006,-10011,9972,9986,9985,-9975,9970,9965,9968,-9972,9969,9972,9974,-9974,10007,10008,9968,-9968 ,9971,10008,9986,-9973,9981,9963,9962,-9968,9975,9988,10009,-9996,9996,9995,10009,-10001,9983,9997,9963,-9982,9998 ,9997,9993,-9993,9974,9985,9988,-9976,9979,10000,9999,-9981,10004,10001,10000,-10010,9988,9990,10005,-10010,10006 ,10003,9986,-10011,10011,9959,9973,-9977,10011,9976,9994,-10013,10012,9994,9978,-9978,10013,10014,9961,-9965,10015 ,10016,10017,-10019,10019,10020,10021,-10023,10023,10024,10025,-10027,10027,10028,9977,-9981,10029,10030,10031,-10019 ,10032,10033,10034,-10036,10036,10035,10037,-10039,9991,10031,10039,-9993,10040,10041,10023,-10027,10028,10042,10041 ,-10041,10043,10013,9964,-9999,10044,10045,9999,-10003,9927,9930,10036,-10039,9930,9932,10032,-10037,9932,9934,10033 ,-10033,9936,10003,10033,-9935,9952,9954,10044,-10003,9954,9956,10046,-10045,9956,9958,10047,-10047,9958,9927,10038 ,-10048,10006,9961,10014,10048,-10052,10035,10034,10020,-10025,10022,10021,10016,-10016,10024,10020,10019,-10026,10016 ,10049,10048,-10018,10021,10020,10034,-10050,10029,10017,10014,-10014,10023,10041,10050,-10038,10050,10041,10042,-10046 ,10030,10029,10013,-10044,10039,10043,9998,-9993,10024,10023,10037,-10036,10027,9980,9999,-10046,10045,10044,10046 ,-10051,10037,10050,10047,-10039,10034,10003,10006,-10052,10011,10026,10025,-9960,10040,10026,10011,-10013,10028,10040 ,10012,-9978,10008,10010,-9987,9981,9967,-9967,10008,10007,-10011,9971,9968,-10009,9962,10007,-9968,9983,9993,-9998 ,10000,9979,-9997,9982,9993,-9984,9978,9996,-9980,9989,9985,-9985,10004,10009,-10006,9987,9986,-10004,10049,10034 ,-10052,10029,10018,-10018,10049,10051,-10049,10021,10049,-10017,10014,10017,-10049,10030,10043,-10040,10045,10042 ,-10028,10031,10030,-10040,10027,10042,-10029,10036,10032,-10036,10046,10047,-10051,10033,10003,-10035,10052,10053 ,10054,-10056,10056,10057,10058,-10060,10060,10061,10062,-10064,10061,10060,10064,-10066,10066,10067,10068,-10070 ,10070,10071,10072,-10074,10074,10055,10054,-10076,10076,10077,10078,-10080,10080,10081,10079,-10083,10083,10084,10067 ,-10067,10073,10072,10085,-10087,10075,10054,10087,-10089,10089,10090,10091,-10093,10086,10085,10093,-10095,10095 ,10096,10097,-10099,10099,10100,10101,-10103,10103,10104,10105,-10107,10107,10108,10109,-10111,10111,10112,10113,-10115 ,10115,10116,10117,-10119,10119,10120,10121,-10123,10123,10124,10125,-10127,10127,10128,10129,-10131,10131,10130,10129 ,-10133,10133,10134,10135,-10117,10117,10116,10135,-10137,10122,10121,10137,-10139,10125,10139,10140,-10142,10126 ,10125,10141,-10143,10143,10126,10142,-10145,10134,10145,10146,-10136,10136,10135,10146,-10148,10138,10137,10148,-10150 ,10141,10140,10150,-10152,10152,10153,10154,-10156,10147,10146,10156,-10158,10149,10148,10158,-10160,10150,10160,10161 ,-10152,10162,10151,10161,-10164,10164,10162,10163,-10166,10166,10164,10165,-10168,10159,10158,10168,-10170,10160 ,10170,10171,-10162,10163,10161,10171,-10173,10165,10163,10172,-10174,10167,10165,10173,-10175,10175,10176,10177,-10179 ,10179,10177,10180,-10182,10181,10180,10182,-10184,10184,10183,10182,-10186,10186,10107,10110,-10188,10188,10186,10187 ,-10190,10190,10191,10108,-10108,10192,10190,10107,-10187,10193,10192,10186,-10189,10153,10188,10189,-10195,10195 ,10196,10191,-10191,10128,10197,10192,-10194,10190,10192,10197,-10196,10152,10193,10188,-10154,10129,10128,10193,-10153 ,10198,10197,10199,-10201,10127,10199,10197,-10129,10201,10202,10196,-10196,10203,10075,10088,-10205,10205,10206,10207 ,-10209,10209,10210,10211,-10213,10071,10213,10214,-10073,10072,10214,10215,-10086,10155,10132,10129,-10153,10216 ,10194,10167,-10175,10217,10209,10212,-10219,10219,10220,10221,-10223,10223,10224,10225,-10227,10227,10228,10229,-10231 ,10228,10231,10232,-10230,10233,10234,10235,-10237,10100,10237,10238,-10102,10226,10225,10239,-10241,10136,10137,10121 ,-10118,10147,10148,10137,-10137,10157,10158,10148,-10148,10241,10168,10158,-10158,10242,10243,10244,-10246,10246 ,10091,10090,-10248,10105,10245,10244,-10107,10248,10119,10122,-10140,10138,10140,10139,-10123,10149,10150,10140,-10139 ,10159,10160,10150,-10150,10169,10170,10160,-10160,10221,10217,10249,-10223,10220,10209,10217,-10222,10250,10251,10252 ,-10254,10254,10255,10256,-10258,10258,10259,10236,-10261,10258,10260,10087,-10262,10262,10263,10264,-10266,10266 ,10267,10268,-10270,10270,10271,10272,-10274,10065,10064,10200,-10084,10274,10093,10127,-10131,10275,9966,9965,-10277 ,10277,10176,10276,-9966,10278,10279,10280,-10282,10282,10283,10257,-10112,10112,10111,10257,-10257,9982,9966,10275 ,-10285,10157,10156,10285,-10242,10156,10145,10286,-10286,10286,10145,10251,-10251,10115,10113,10112,-10288,10255 ,10288,10289,-10257,10290,10291,10292,-10294,10291,10294,10295,-10293,10295,10294,10296,-10298,10298,10299,10064,-10061 ,10063,10300,10298,-10061,10056,10059,10301,-10303,10303,10074,10075,-10204,10082,10079,10078,-10305,10093,10084,10199 ,-10128,10200,10064,10299,-10199,10199,10084,10083,-10201,10299,10305,10306,-10202,10307,10066,10069,-10309,10067 ,10214,10213,-10069,10215,10214,10067,-10085,10264,10263,10309,-10311,10311,10282,10111,-10115,10281,10311,10114,-10313 ,10313,10314,10315,-10317,10283,10282,10236,-10260,10279,10236,10282,-10281,10280,10282,10311,-10282,10279,10278,10233 ,-10237,10052,10058,10057,-10318,10059,10058,10077,-10077,10269,10053,10318,-10267,10319,10320,10269,-10269,10321 ,10322,10323,-10325,10324,10323,10325,-10327,10327,10328,10326,-10326,10329,10330,10331,-10333,10333,10329,10332,-10335 ,10335,10254,10336,-10338,10255,10254,10335,-10339,10251,10288,10339,-10253,10259,10258,10329,-10334,10336,10283,10259 ,-10334,10254,10257,10283,-10337,10340,10267,10341,-10343,10343,10341,10267,-10267,10344,10343,10266,-10319,10317 ,10057,10345,-10347,10057,10056,10347,-10346,10056,10302,10348,-10348,10349,10350,10327,-10352,10352,10353,10354,-10356 ,10354,10353,10356,-10358,10358,10359,10323,-10323,10359,10360,10325,-10324,10360,10351,10327,-10326,10293,10292,10352 ,-10350,10264,10310,10351,-10361,10265,10264,10360,-10360,10361,10265,10359,-10359,10262,10341,10343,-10264,10263 ,10343,10344,-10310,10291,10290,10346,-10346,10290,10309,10344,-10347,10291,10345,10347,-10295,10294,10347,10348,-10297 ,10297,10296,10348,-10357,10295,10297,10356,-10354,10292,10295,10353,-10353,10350,10362,10328,-10328,10363,10355,10354 ,-10365,10364,10354,10357,-10366,10366,10367,10368,-10370,10370,10371,10369,-10369,10372,10373,10374,-10376,10376 ,10377,10374,-10374,10102,10378,10379,-10315,10380,10381,10314,-10380,10382,10383,10384,-10386,10385,10384,10386,-10388 ,10387,10386,10388,-10390,10390,10391,10392,-10394,10394,10395,10367,-10367,10089,10366,10369,-10091,10090,10369,10371 ,-10248,10273,10272,10396,-10376,10101,10238,10374,-10378,10315,10397,10398,-10317,10243,10385,10387,-10245,10244 ,10387,10389,-10107,10106,10389,10392,-10104,10237,10399,10400,-10271,10246,10271,10401,-10403,10092,10091,10403,-10405 ,10205,10092,10404,-10406,10406,10407,10408,-10105,10245,10105,10409,-10411,10242,10245,10410,-10412,10412,10242,10411 ,-10414,10100,10414,10399,-10238,10415,10080,10082,-10417,10120,10119,10417,-10419,10419,10420,10204,-10235,10421 ,10120,10418,-10423,10119,10248,10423,-10418,10124,10123,10424,-10426,10234,10426,10427,-10420,10428,10303,10203,-10430 ,10416,10082,10304,-10431,10430,10368,10367,-10417,10428,10370,10368,-10431,10420,10372,10431,-10430,10376,10373,10419 ,-10428,10432,10379,10378,-10434,10383,10434,10435,-10423,10386,10384,10418,-10418,10423,10388,10386,-10418,10393 ,10388,10423,-10426,10395,10436,10080,-10416,10102,10377,10376,-10379,10433,10378,10427,-10427,10437,10281,10312,-10439 ,10435,10439,10437,-10439,10380,10439,10435,-10435,10440,10381,10380,-10435,10441,10316,10398,-10443,10443,10444,10313 ,-10442,10099,10102,10314,-10314,10444,10445,10099,-10314,10058,10052,10055,-10078,10077,10055,10074,-10079,10271 ,10246,10247,-10273,10309,10290,10293,-10311,10074,10303,10304,-10079,10053,10052,10317,-10319,10318,10317,10346,-10345 ,10310,10293,10349,-10352,10247,10371,10396,-10273,10091,10246,10402,-10404,10303,10428,10430,-10305,10088,10087,10260 ,-10236,10104,10103,10446,-10407,10096,10123,10447,-10098,10447,10123,10126,-10144,10144,10142,10164,-10167,10204 ,10088,10235,-10235,10185,10448,10449,-10185,10261,10087,10054,-10054,10237,10270,10273,-10239,10330,10320,10319,-10332 ,10258,10261,10330,-10330,10372,10375,10396,-10432,10393,10392,10389,-10389,10238,10273,10375,-10375,10103,10392,10391 ,-10447,10271,10270,10400,-10402,10104,10408,10409,-10106,10203,10204,10420,-10430,10124,10425,10423,-10249,10373 ,10372,10420,-10420,10390,10393,10425,-10425,10125,10124,10248,-10140,10312,10115,10118,-10439,10120,10421,10117,-10122 ,10412,10450,10243,-10243,10113,10115,10312,-10115,10256,10289,10287,-10113,10288,10255,10338,-10340,10434,10383,10382 ,-10441,10450,10382,10385,-10244,10412,10413,10442,-10399,10438,10421,10422,-10436,10383,10422,10418,-10385,10289 ,10288,10134,-10134,10134,10288,10251,-10146,10362,10350,10355,-10364,10350,10349,10352,-10356,10370,10428,10429,-10432 ,10371,10370,10431,-10397,10287,10133,10116,-10116,10455,10081,10080,-10437,10092,10205,10208,-10090,10436,10395,10394 ,-10208,10089,10208,10394,-10367,10367,10395,10415,-10417,10224,10223,10227,-10231,10151,10162,10142,-10142,10390 ,10424,10123,-10452,10452,10453,10348,-10303,10062,10059,10076,-10064,10063,10076,10079,-10301,10300,10079,10081,-10299 ,10062,10061,10301,-10060,10454,10305,10081,-10456,10302,10301,10308,-10453,10210,10356,10453,-10212,10175,10168,10241 ,-10457,10179,10170,10169,-10179,10172,10171,10181,-10184,10173,10172,10183,-10185,10174,10173,10184,-10450,10132 ,10155,10223,-10227,10223,10155,10154,-10228,10227,10154,10216,-10229,10216,10174,10231,-10229,10131,10132,10226,-10241 ,10181,10171,10170,-10180,10275,10286,10250,-10285,10241,10285,10276,-10457,10285,10286,10275,-10277,10178,10169,10168 ,-10176,10196,10457,10458,-10192,10098,10108,10191,-10459,10108,10097,10447,-10110,10143,10144,10187,-10111,10166 ,10167,10194,-10190,10110,10109,10447,-10144,10189,10187,10144,-10167,10202,10459,10457,-10197,10306,10454,10459,-10203 ,10095,10098,10458,-10461,10096,10461,10462,-10464,10457,10464,10460,-10459,10459,10465,10464,-10458,10454,10455,10465 ,-10460,10070,10466,10218,-10072,10069,10068,10453,-10453,10218,10212,10213,-10072,10212,10211,10068,-10214,10467 ,10400,10399,-10469,10411,10410,10469,-10471,10413,10411,10470,-10472,10443,10442,10472,-10474,10468,10399,10414,-10475 ,10445,10444,10473,-10475,10475,10401,10400,-10468,10442,10413,10471,-10473,10337,10336,10333,-10335,10466,10249,10217 ,-10219,10267,10340,10476,-10269,10268,10476,10477,-10320,10331,10478,10479,-10333,10332,10479,10480,-10335,10481 ,10482,10335,-10338,10482,10483,10338,-10336,10484,10485,10252,-10340,10485,10486,10253,-10253,10209,10487,10488,-10211 ,10220,10219,10487,-10210,10265,10361,10489,-10263,10490,9991,9982,-10285,10262,10489,10342,-10342,10477,10478,10331 ,-10320,10483,10484,10339,-10339,10486,10490,10284,-10254,10480,10481,10337,-10335,10153,10194,10216,-10155,10448 ,10232,10231,-10450,10433,10278,10281,-10433,10491,10492,10404,-10404,10493,10491,10403,-10403,10492,10494,10405,-10405 ,10494,10495,10206,-10406,10496,10460,10464,-10498,10207,10464,-10466,10462,10095,10460,-10497,10493,10402,10401,-10476 ,10463,10469,10409,-10409,10398,10397,10450,-10413,10450,10397,10440,-10383,10315,10381,10440,-10398,10498,10499,10500 ,-10502,10502,10503,10504,-10506,10506,10507,10508,-10510,10509,10510,10511,-10507,10512,10513,10514,-10516,10070 ,10073,10516,-10518,10518,10519,10500,-10500,10520,10521,10522,-10524,10524,10525,10521,-10527,10527,10512,10515,-10529 ,10073,10086,10529,-10517,10519,10530,10531,-10501,10532,10533,10534,-10536,10086,10094,10536,-10530,10537,10538,10539 ,-10541,10541,10542,10543,-10545,10545,10546,10547,-10549,10549,10550,10551,-10553,10553,10554,10555,-10557,10557 ,10558,10559,-10561,10561,10562,10563,-10565,10565,10566,10567,-10569,10569,10130,10570,-10572,10131,10572,10570,-10131 ,10573,10560,10574,-10576,10559,10576,10574,-10561,10562,10577,10578,-10564,10567,10579,10580,-10582,10566,10582,10579 ,-10568,10583,10584,10582,-10567,10575,10574,10585,-10587,10576,10587,10585,-10575,10577,10588,10589,-10579,10579 ,10590,10591,-10581,10592,10593,10594,-10596,10587,10596,10597,-10586,10588,10598,10599,-10590,10591,10590,10600,-10602 ,10602,10603,10600,-10591,10604,10605,10603,-10603,10606,10607,10605,-10605,10598,10608,10609,-10600,10601,10600,10610 ,-10612,10603,10612,10610,-10601,10605,10613,10612,-10604,10607,10614,10613,-10606,10615,10616,10617,-10619,10619 ,10620,10621,-10618,10620,10622,10623,-10622,10624,10625,10623,-10623,10626,10627,10550,-10550,10628,10629,10627,-10627 ,10630,10549,10552,-10632,10632,10626,10549,-10631,10633,10628,10626,-10633,10595,10634,10629,-10629,10635,10630,10631 ,-10637,10571,10633,10632,-10638,10630,10635,10637,-10633,10592,10595,10628,-10634,10570,10592,10633,-10572,10638 ,10639,10640,-10638,10569,10571,10637,-10641,10641,10635,10636,-10643,10643,10644,10530,-10520,10645,10646,10647,-10649 ,10649,10650,10651,-10653,10517,10516,10653,-10655,10516,10529,10655,-10654,10593,10592,10570,-10573,10656,10614,10607 ,-10635,10657,10658,10650,-10650,10219,10222,10659,-10661,10661,10662,10663,-10665,10665,10666,10667,-10669,10668 ,10667,10669,-10671,10671,10672,10673,-10675,10544,10543,10675,-10677,10662,10240,10239,-10664,10576,10559,10563,-10579 ,10587,10576,10578,-10590,10596,10587,10589,-10600,10677,10596,10599,-10610,10678,10679,10680,-10682,10682,10683,10535 ,-10535,10547,10546,10680,-10680,10684,10581,10562,-10562,10577,10562,10581,-10581,10588,10577,10580,-10592,10598 ,10588,10591,-10602,10608,10598,10601,-10612,10659,10222,10249,-10658,10660,10659,10657,-10650,10685,10686,10687,-10689 ,10689,10690,10691,-10693,10693,10694,10672,-10696,10693,10696,10531,-10695,10697,10698,10699,-10701,10701,10702,10703 ,-10705,10705,10706,10707,-10709,10510,10527,10639,-10512,10274,10130,10569,-10537,10709,10710,10015,-10019,10618 ,10711,10710,-10713,10713,10714,10715,-10717,10717,10553,10690,-10719,10556,10691,10690,-10554,10031,10719,10709,-10019 ,10596,10677,10720,-10598,10597,10720,10721,-10587,10721,10685,10688,-10587,10557,10722,10556,-10556,10692,10691,10723 ,-10725,10725,10726,10727,-10729,10728,10727,10729,-10731,10729,10731,10732,-10731,10733,10506,10511,-10735,10507 ,10506,10733,-10736,10502,10736,10737,-10504,10738,10643,10519,-10519,10525,10739,10522,-10522,10536,10569,10640,-10529 ,10639,10638,10734,-10512,10640,10639,10527,-10529,10734,10641,10740,-10742,10513,10512,10742,-10744,10515,10514,10654 ,-10654,10655,10528,10515,-10654,10699,10744,10745,-10701,10746,10554,10553,-10718,10714,10747,10554,-10747,10748 ,10749,10750,-10752,10718,10695,10672,-10718,10716,10715,10717,-10673,10715,10714,10746,-10718,10716,10672,10671,-10714 ,10498,10752,10505,-10505,10503,10520,10523,-10505,10702,10701,10753,-10502,10754,10703,10702,-10756,10321,10756,10757 ,-10323,10756,10758,10759,-10758,10760,10759,10758,-10762,10762,10763,10764,-10766,10766,10767,10763,-10763,10768 ,10769,10770,-10690,10692,10771,10768,-10690,10688,10687,10772,-10725,10695,10766,10762,-10694,10770,10766,10695,-10719 ,10689,10770,10718,-10691,10340,10342,10773,-10705,10774,10701,10704,-10774,10775,10753,10701,-10775,10752,10776,10777 ,-10506,10505,10777,10778,-10503,10502,10778,10779,-10737,10780,10781,10760,-10783,10783,10784,10785,-10787,10785 ,10787,10788,-10787,10358,10322,10757,-10790,10789,10757,10759,-10791,10790,10759,10760,-10782,10726,10780,10783,-10728 ,10699,10790,10781,-10745,10698,10789,10790,-10700,10361,10358,10789,-10699,10697,10700,10774,-10774,10700,10745,10775 ,-10775,10725,10776,10775,-10746,10776,10725,10728,-10778,10728,10730,10778,-10778,10730,10732,10779,-10779,10731 ,10788,10779,-10733,10729,10786,10788,-10732,10727,10783,10786,-10730,10782,10760,10761,-10792,10792,10793,10785,-10785 ,10793,10794,10787,-10786,10795,10796,10797,-10799,10799,10797,10796,-10801,10801,10802,10803,-10805,10805,10804,10803 ,-10807,10542,10751,10807,-10809,10809,10807,10751,-10811,10811,10812,10813,-10815,10812,10815,10816,-10814,10815 ,10817,10818,-10817,10819,10820,10821,-10823,10823,10795,10798,-10825,10532,10535,10796,-10796,10535,10683,10800,-10797 ,10706,10802,10825,-10708,10543,10806,10803,-10676,10750,10749,10826,-10828,10681,10680,10815,-10813,10680,10546,10817 ,-10816,10546,10545,10821,-10818,10676,10705,10828,-10830,10682,10830,10831,-10709,10533,10832,10833,-10535,10645 ,10834,10832,-10534,10835,10548,10836,-10838,10679,10838,10839,-10548,10678,10840,10838,-10680,10841,10842,10840,-10679 ,10544,10676,10829,-10844,10844,10845,10525,-10525,10564,10846,10847,-10562,10848,10674,10644,-10850,10850,10851,10846 ,-10565,10561,10847,10852,-10685,10568,10853,10854,-10566,10674,10848,10855,-10857,10857,10858,10643,-10739,10845 ,10859,10739,-10526,10859,10845,10798,-10798,10857,10859,10797,-10800,10849,10858,10860,-10802,10805,10855,10848,-10805 ,10861,10862,10808,-10808,10814,10851,10863,-10865,10816,10847,10846,-10814,10852,10847,10816,-10819,10820,10853,10852 ,-10819,10824,10844,10524,-10866,10542,10808,10805,-10807,10862,10856,10855,-10809,10866,10867,10747,-10715,10863 ,10867,10866,-10869,10809,10864,10863,-10869,10869,10864,10809,-10811,10870,10871,10826,-10750,10541,10748,10751,-10543 ,10504,10523,10499,-10499,10523,10522,10518,-10500,10708,10707,10683,-10683,10745,10744,10726,-10726,10518,10522,10739 ,-10739,10501,10753,10752,-10499,10753,10775,10776,-10753,10744,10781,10780,-10727,10683,10707,10825,-10801,10534 ,10833,10830,-10683,10738,10739,10859,-10858,10530,10673,10694,-10532,10548,10835,10874,-10546,10540,10539,10875,-10566 ,10875,10583,10566,-10566,10584,10606,10604,-10583,10644,10674,10673,-10531,10625,10624,10876,-10878,10696,10501,10500 ,-10532,10676,10675,10706,-10706,10765,10764,10754,-10756,10693,10762,10765,-10697,10801,10860,10825,-10803,10820 ,10818,10817,-10822,10675,10803,10802,-10707,10545,10874,10822,-10822,10708,10831,10828,-10706,10548,10547,10839,-10837 ,10643,10858,10849,-10645,10568,10684,10852,-10854,10804,10848,10849,-10802,10819,10854,10853,-10821,10567,10581,10684 ,-10569,10747,10867,10558,-10558,10559,10850,10564,-10564,10841,10678,10681,-10879,10555,10554,10747,-10558,10691 ,10556,10722,-10724,10724,10772,10771,-10693,10864,10869,10811,-10815,10878,10681,10812,-10812,10841,10826,10871,-10843 ,10867,10863,10851,-10851,10814,10813,10846,-10852,10723,10573,10575,-10725,10575,10586,10688,-10725,10791,10792,10784 ,-10783,10782,10784,10783,-10781,10799,10860,10858,-10858,10800,10825,10860,-10800,10722,10557,10560,-10574,10647 ,10865,-10884,10533,10532,10646,-10646,10865,10647,10823,-10825,10532,10795,10823,-10647,10798,10845,10844,-10825 ,10664,10666,10665,-10662,10590,10579,10582,-10603,10819,10879,10565,-10855,10880,10736,10779,-10882,10508,10507,10520 ,-10504,10507,10735,10521,-10521,10735,10733,10526,-10522,10508,10503,10737,-10510,10882,10883,10526,-10742,10743 ,10737,10736,-10881,10652,10651,10881,-10789,10615,10712,10677,-10610,10619,10616,10608,-10612,10612,10622,10620,-10611 ,10613,10624,10622,-10613,10614,10876,10624,-10614,10572,10662,10661,-10594,10661,10665,10594,-10594,10665,10668,10656 ,-10595,10656,10668,10670,-10615,10131,10240,10662,-10573,10620,10619,10611,-10611,10709,10719,10685,-10722,10677 ,10712,10710,-10721,10720,10710,10709,-10722,10616,10615,10609,-10609,10636,10631,10884,-10886,10631,10552,10538,-10885 ,10552,10551,10875,-10540,10583,10550,10627,-10585,10606,10629,10634,-10608,10550,10583,10875,-10552,10629,10606,10584 ,-10628,10642,10636,10885,-10887,10740,10642,10886,-10883,10537,10887,10884,-10539,10540,10888,10889,-10891,10885 ,10884,10887,-10892,10886,10885,10891,-10893,10882,10886,10892,-10884,10070,10517,10658,-10467,10513,10880,10881,-10515 ,10658,10517,10654,-10651,10650,10654,10514,-10652,10893,10894,10829,-10829,10840,10895,10896,-10839,10842,10897,10895 ,-10841,10872,10898,10899,-10872,10894,10900,10843,-10830,10901,10893,10828,-10832,10871,10899,10897,-10843,10769 ,10767,10766,-10771,10466,10658,10657,-10250,10704,10703,10476,-10341,10703,10754,10477,-10477,10764,10763,10479,-10479 ,10763,10767,10480,-10480,10481,10769,10768,-10483,10482,10768,10771,-10484,10484,10772,10687,-10486,10485,10687,10686 ,-10487,10649,10652,10488,-10488,10660,10649,10487,-10220,10698,10697,10489,-10362,10490,10719,10031,-9992,10697,10773 ,10342,-10490,10477,10754,10764,-10479,10483,10771,10772,-10485,10486,10686,10719,-10491,10480,10767,10769,-10482 ,10595,10594,10656,-10635,10877,10876,10670,-10670,10862,10861,10714,-10714,10902,10833,10832,-10904,10904,10830,10833 ,-10903,10903,10832,10834,-10906,10905,10834,10648,-10907,10907,10908,10891,-10888,10648,10891,10908,-10907,10889 ,10907,10887,-10538,10904,10901,10831,-10831,10888,10836,10839,-10897,10826,10841,10878,-10828,10878,10811,10869,-10828 ,10750,10827,10869,-10811,10306,10202,-10202,10260,10236,-10236,10093,10274,-10095,10162,10164,-10143,10156,10146 ,-10146,10215,10093,-10086,10438,10118,-10422,10179,10178,-10178,10276,10176,-10457,10234,10233,-10427,10133,10287 ,-10290,10201,10195,-10199,10198,10195,-10198,10305,10299,-10299,10065,10307,-10062,10083,10066,-10066,10065,10066 ,-10308,10299,10201,-10199,10215,10084,-10094,10281,10437,-10433,10053,10269,-10321,10443,10441,-10443,10414,10099 ,-10446,10314,10381,-10316,10394,10208,-10208,10441,10313,-10317,10414,10100,-10100,10439,10432,-10438,10379,10439 ,-10381,10427,10378,-10377,10377,10102,-10102,10379,10432,-10440,10320,10330,-10262,10118,10117,-10422,10405,10206 ,-10206,10390,10451,-10392,10406,10451,-10408,10446,10451,-10407,10096,10463,-10124,10391,10451,-10447,10053,10320 ,-10262,10175,10456,-10177,10356,10348,-10454,10081,10305,-10299,10307,10301,-10062,10307,10308,-10302,10250,10253 ,-10285,10306,10305,-10455,10097,10108,-10099,10095,10461,-10097,10069,10452,-10309,10068,10211,-10454,10278,10433 ,-10427,10278,10426,-10234,10445,10474,-10415,10443,10473,-10445,10174,10449,-10232,10461,10095,-10463,10408,10407 ,-10464,10451,10123,-10464,10410,10409,-10470,10407,10451,-10464,10740,10641,-10643,10694,10673,-10673,10536,10094 ,-10275,10602,10582,-10605,10597,10586,-10586,10655,10529,-10537,10867,10850,-10559,10619,10617,-10617,10710,10711 ,-10016,10674,10856,-10672,10573,10723,-10723,10641,10638,-10636,10638,10637,-10636,10741,10733,-10735,10510,10509 ,-10743,10527,10510,-10513,10510,10742,-10513,10734,10638,-10642,10655,10536,-10529,10714,10861,-10867,10501,10755 ,-10703,10872,10871,-10871,10843,10873,-10542,10751,10750,-10811,10823,10647,-10647,10870,10749,-10749,10843,10541 ,-10545,10868,10866,-10862,10807,10809,-10869,10855,10805,-10809,10806,10543,-10543,10807,10868,-10862,10755,10696 ,-10766,10558,10850,-10560,10834,10645,-10649,10819,10822,-10880,10835,10837,-10880,10874,10835,-10880,10540,10565 ,-10889,10822,10874,-10880,10501,10696,-10756,10615,10618,-10713,10883,10892,-10648,10788,10881,-10780,10526,10733 ,-10742,10742,10509,-10738,10742,10737,-10744,10685,10719,-10687,10740,10882,-10742,10539,10538,-10553,10537,10540 ,-10891,10513,10743,-10881,10514,10881,-10652,10713,10856,-10863,10713,10671,-10857,10873,10843,-10901,10614,10670 ,-10877,10890,10889,-10538,10836,10888,-10838,10879,10888,-10566,10838,10896,-10840,10837,10888,-10880,10909,10910 ,10911,-10913,10913,10914,10229,-10233,10915,10916,10917,-10919,10919,10920,10921,-10923,10923,10924,10239,-10226 ,10925,10926,10224,-10231,10925,10230,10229,-10915,10911,10910,10927,-10929,10929,10930,10931,-10933,10224,10926,10923 ,-10226,10930,10909,10912,-10932,10933,10934,10935,-10937,10937,10938,10939,-10941,10667,10941,10942,-10670,10943 ,10944,10945,-10947,10947,10948,10949,-10951,10951,10952,10953,-10955,10239,10924,10955,-10664,10956,10666,10664,-10958 ,10667,10666,10956,-10942,10958,10938,10937,-10960,10960,10961,10962,-10964,10964,10932,10931,-10966,10955,10957,10664 ,-10664,10965,10931,10912,-10941,10966,10950,10949,-10968,10968,10960,10969,-10971,10967,10953,10952,-10967,10962 ,10958,10971,-10973,10973,10974,10975,-10977,10977,10922,10978,-10980,10980,10981,10982,-10984,10984,10985,10977,-10980 ,10981,10986,10977,-10986,10982,10981,10985,-10985,10987,10986,10988,-10990,10986,10987,10990,-10978,10991,10990,10987 ,-10993,10991,10993,10994,-10991,10990,10995,10996,-10998,10986,10998,10999,-11001,10988,10986,11001,-11003,10989 ,10988,11003,-11005,10992,10987,11005,-11007,10992,11007,11008,-10992,10937,10940,10912,-10912,10959,10937,10911,-10929 ,11009,10965,10940,-10940,10972,11010,11011,-11013,10974,10973,10970,-10970,10989,11013,11014,-10988,11015,10927,10934 ,-11017,11005,11014,11012,-11012,10998,10951,10954,-11000,10997,10996,10919,-10923,10927,10916,10920,-10935,10948 ,10946,10958,-10962,11017,10994,10933,-10996,11018,10910,10914,-10914,10916,10927,11018,-10918,10929,10932,10924,-10924 ,10910,10909,10925,-10915,10909,10930,10926,-10926,10926,10930,10929,-10924,10941,10938,11019,-10943,11019,10958,10946 ,-10946,10924,10932,10964,-10956,10956,10939,10938,-10942,10960,10968,10967,-10950,10953,10967,10968,-10971,10957 ,11009,10939,-10957,11004,11003,10963,-10963,10964,11009,10957,-10956,11002,11001,11020,-10975,11006,11005,11011,-11011 ,11008,11007,11021,-11016,10994,10993,11016,-10934,10961,10960,10949,-10949,10976,10975,11000,-11000,10920,10919,10935 ,-10935,10995,10933,10936,-10997,11012,11014,11013,-10973,10970,10973,10954,-10954,11015,11016,10993,-11009,11013 ,11004,10962,-10973,11010,11021,11007,-11007,11020,11001,11000,-10976,10999,10954,10973,-10977,11002,10974,10969,-11004 ,10935,10919,10996,-10937,10959,10928,11021,-10972,10913,10232,10918,-10918,10920,10916,10915,-10922,10669,10942,10945 ,-10945,10943,10946,10948,-10948,10986,10981,10980,-10999,11022,10983,10982,-11024,11022,11024,10952,-10984,10232 ,10448,-10919,11018,10927,-10911,10928,10927,-11016,11016,10934,-10934,11019,10938,-10959,10963,10969,-10961,10961 ,10958,-10963,11020,10975,-10975,11021,10928,-11016,10997,10922,-10978,10965,11009,-10965,10971,11010,-10973,10971 ,10958,-10960,10951,10983,-10953,10921,10978,-10923,11010,10971,-11022,11008,10993,-10992,11000,11001,-10987,11002 ,11003,-10989,11006,11007,-10993,11004,11013,-10990,10963,11003,-10970,10990,11017,-10996,10994,11017,-10991,11005 ,10987,-11015,10977,10990,-10998,11018,10913,-10918,11019,10945,-10943,10951,10998,-10981,10951,10980,-10984,10950 ,10966,-11025,10966,10952,-11025,10984,10979,-11024,10982,10984,-11024,11025,11026,11027,-11029,11029,11030,11031 ,-11033,11033,11034,11031,-11031,11035,11036,11034,-11034,11037,11038,11036,-11036,11039,11040,11041,-11043,11043 ,11044,11053,-11053,11046,11047,11054,-11056,11048,11046,11055,-11057,11049,11048,11056,-11058,11050,11049,11057,-11059 ,11051,11050,11058,-11060,10711,10618,11060,-11062,10617,11062,11063,-10619,10617,10621,11064,-11063,10621,10623,11065 ,-11065,10623,10625,11066,-11066,11037,11067,11068,-11039,11070,11040,11069,-11060,10625,10877,11071,-11067,11072 ,11073,11074,-11076,11072,11075,11076,-10948,10944,10943,11077,-11079,11079,11080,11081,-11083,11083,11084,11085,-11087 ,11054,11047,11043,-11053,11029,11032,11026,-11026,11087,11088,10025,-11090,10022,11090,11091,-10020,11092,11080,11079 ,-11094,11094,11069,11095,-11097,11069,11051,-11060,11068,11067,11084,-11084,11074,11073,11082,-11082,11085,11092 ,11093,-11087,11043,11025,11028,-11045,11047,11046,11030,-11030,11048,11033,11030,-11047,11048,11049,11035,-11034 ,11049,11050,11037,-11036,11050,11051,11067,-11038,11087,11089,11045,-11045,11091,11090,11053,-11046,11060,11052,11053 ,-11062,11062,11055,11054,-11064,11062,11064,11056,-11056,11064,11065,11057,-11057,11065,11066,11058,-11058,11066 ,11071,11059,-11059,11075,11074,11041,-11041,11076,11075,11040,-11071,11059,11078,11077,-11071,11080,11039,11042,-11082 ,11084,11094,11096,-11086,11047,11029,11025,-11044,11063,11054,11052,-11061,11080,11092,11095,-11040,11041,11074,11081 ,-11043,11096,11095,11092,-11086,11067,11051,11094,-11085,11071,10877,10944,-11079,10947,11076,11077,-10944,11088 ,11087,11028,-11028,11090,10022,10711,-11062,10019,11091,11089,-10026,11097,11098,11032,-11032,11099,11097,11031,-11035 ,11100,11099,11034,-11037,11101,11100,11036,-11039,11098,11102,11026,-11033,11102,10025,11027,-11027,11103,11101,11038 ,-11069,11108,11093,11079,-11110,11108,11083,11086,-11094,11106,11103,11068,-11084,11107,11082,11073,-11073,11069 ,11040,-11040,10618,11063,-11061,11039,11095,-11070,11094,11051,-11070,11071,11078,-11060,11070,11077,-11077,10022 ,10015,-10712,11087,11044,-11029,11091,11045,-11090,11061,11053,-11091,11027,10025,-11089,11053,11044,-11046,10947 ,11105,11107,-11073,11104,11108,11109,-11111,11104,11106,11083,-11109,11107,11109,11079,-11083,11105,11110,11109,-11108 ,11105,10947,-10944,11111,11112,11113,-11115,11115,11116,11117,-11119,11119,11118,11117,-11121,11121,11119,11120,-11123 ,11123,11121,11122,-11125,11125,11126,11127,-11129,11129,11131,-11139,11132,11133,11141,-11141,11133,11134,11142,-11142 ,11134,11135,11143,-11143,11135,11136,11144,-11144,11136,11137,11145,-11145,11138,11139,-11130,10277,11146,11147,-10177 ,10177,10176,11148,-11150,10177,11149,11150,-10181,10180,11150,11151,-10183,10182,11151,11152,-10186,11123,11124,11153 ,-11155,11155,11126,11156,-11146,10185,11152,11157,-10449,10978,11158,11159,-11161,10978,10921,11161,-11159,10918 ,11162,11163,-10916,11164,11165,11166,-11168,11168,11169,11170,-11172,11138,11131,11132,-11141,11115,11111,11114,-11117 ,11172,11173,9973,-11175,9970,9969,11175,-11177,11177,11178,11164,-11168,11179,11155,11180,-11182,11145,11137,-11156 ,11153,11168,11171,-11155,11159,11166,11165,-11161,11170,11169,11178,-11178,11131,11130,11112,-11112,11132,11115,11118 ,-11134,11134,11133,11118,-11120,11134,11119,11121,-11136,11135,11121,11123,-11137,11136,11123,11154,-11138,11172 ,11130,11129,-11174,11175,11129,11139,-11177,11147,11146,11139,-11139,11149,11148,11140,-11142,11149,11141,11142,-11151 ,11150,11142,11143,-11152,11151,11143,11144,-11153,11152,11144,11145,-11158,11158,11126,11125,-11160,11161,11156,11126 ,-11159,11145,11156,11163,-11163,11167,11166,11128,-11128,11171,11170,11181,-11181,11132,11131,11111,-11116,11148 ,11147,11138,-11141,11167,11127,11179,-11178,11125,11128,11166,-11160,11181,11170,11177,-11180,11154,11171,11180,-11138 ,11157,11162,10918,-10449,10921,10915,11163,-11162,11174,11113,11112,-11173,11176,11146,10277,-9971,9969,9973,11173 ,-11176,11182,11117,11116,-11184,11184,11120,11117,-11183,11185,11122,11120,-11185,11186,11124,11122,-11186,11183 ,11116,11114,-11188,11187,11114,11113,-9974,11188,11153,11124,-11187,11189,11190,11164,-11179,11189,11178,11169,-11192 ,11191,11168,11153,-11189,11190,11192,10978,11160,-11166,11155,11127,-11127,10176,11147,-11149,11127,11155,-11180 ,11180,11155,-11138,11157,11145,-11163,11156,11161,-11164,9970,10277,-9966,11172,11112,-11131,11175,11173,-11130,11146 ,11176,-11140,11165,11164,-11191,11169,11168,-11192,11113,11174,-9974,11131,11129,-11131,10883,10865,10524,-10527 ,10648,10647,-10892,10207,10455,-10437,10455,10207,-10466,10206,10464,-10208,10495,10497,10464,-10207,10891,10647 ,-10893,11193,11194,11195,-11197,11196,11195,11197,-11241,11240,11197,11198,-11243,11242,11198,11199,-11245,11244 ,11199,11200,-11247,11246,11200,11201,-11203,11202,11201,11203,-11205,11204,11203,11205,-11251,11250,11205,11206,-11253 ,11252,11206,11207,-11209,11208,11207,11209,-11211,11210,11209,11211,-11213,11212,11211,11213,-11215,11214,11213,11215 ,-11217,11216,11215,11217,-11219,11218,11217,11219,-11221,11220,11219,11194,-11194,11194,11221,11222,-11196,11195 ,11222,11223,-11198,11197,11223,11224,-11199,11198,11224,11225,-11200,11199,11225,11226,-11201,11200,11226,11227,-11202 ,11201,11227,11228,-11204,11203,11228,11229,-11206,11205,11229,11230,-11207,11206,11230,11231,-11208,11207,11231,11232 ,-11210,11209,11232,11233,-11212,11211,11233,11234,-11214,11213,11234,11235,-11216,11215,11235,11236,-11218,11217 ,11236,11237,-11220,11219,11237,11221,-11195,11238,11239,11196,-11241,11241,11238,11240,-11243,11243,11241,11242,-11245 ,11245,11243,11244,-11247,11247,11245,11246,-11203,11248,11247,11202,-11205,11249,11248,11204,-11251,11251,11249,11250 ,-11253,11253,11251,11252,-11209,11254,11253,11208,-11211,11255,11254,11210,-11213,11256,11255,11212,-11215,11257 ,11256,11214,-11217,11258,11257,11216,-11219,11259,11258,11218,-11221,11260,11259,11220,-11194,11239,11260,11193,-11197 ,11261,11262,11239,-11239,11263,11261,11238,-11242,11264,11263,11241,-11244,11265,11264,11243,-11246,11266,11265,11245 ,-11248,11267,11266,11247,-11249,11268,11267,11248,-11250,11269,11268,11249,-11252,11270,11269,11251,-11254,11271 ,11270,11253,-11255,11272,11271,11254,-11256,11273,11272,11255,-11257,11274,11273,11256,-11258,11275,11274,11257,-11259 ,11276,11275,11258,-11260,11277,11276,11259,-11261,11262,11277,11260,-11240,11278,11279,11262,-11262,11280,11278,11261 ,-11264,11281,11280,11263,-11265,11282,11281,11264,-11266,11283,11282,11265,-11267,11284,11283,11266,-11268,11285 ,11284,11267,-11269,11286,11285,11268,-11270,11287,11286,11269,-11271,11288,11287,11270,-11272,11289,11288,11271,-11273 ,11290,11289,11272,-11274,11291,11290,11273,-11275,11292,11291,11274,-11276,11293,11292,11275,-11277,11294,11293,11276 ,-11278,11279,11294,11277,-11263,11279,11278,11295,-11297,11278,11280,11297,-11296,11280,11281,11298,-11298,11281 ,11282,11299,-11299,11282,11283,11300,-11300,11283,11284,11301,-11301,11284,11285,11302,-11302,11285,11286,11303,-11303 ,11286,11287,11304,-11304,11287,11288,11305,-11305,11288,11289,11306,-11306,11289,11290,11307,-11307,11290,11291,11308 ,-11308,11291,11292,11309,-11309,11292,11293,11310,-11310,11293,11294,11311,-11311,11294,11279,11296,-11312,11312 ,11222,-11222,11312,11223,-11223,11312,11224,-11224,11312,11225,-11225,11312,11226,-11226,11312,11227,-11227,11312 ,11228,-11228,11312,11229,-11229,11312,11230,-11230,11312,11231,-11231,11312,11232,-11232,11312,11233,-11233,11312 ,11234,-11234,11312,11235,-11235,11312,11236,-11236,11312,11237,-11237,11312,11221,-11238,11358,11313,11314,-11380 ,11315,11316,11313,-11359,11317,11318,11316,-11316,11362,11319,11318,-11318,11364,11320,11319,-11363,11321,11322,11320 ,-11365,11323,11324,11322,-11322,11325,11326,11324,-11324,11327,11328,11326,-11326,11329,11330,11328,-11328,11331 ,11332,11330,-11330,11333,11334,11332,-11332,11335,11336,11334,-11334,11374,11337,11336,-11336,11376,11338,11337,-11375 ,11339,11340,11338,-11377,11379,11314,11340,-11340,11313,11341,11342,-11315,11316,11343,11341,-11314,11318,11344,11343 ,-11317,11319,11345,11344,-11319,11320,11346,11345,-11320,11322,11347,11346,-11321,11324,11348,11347,-11323,11326 ,11349,11348,-11325,11328,11350,11349,-11327,11330,11351,11350,-11329,11332,11352,11351,-11331,11334,11353,11352,-11333 ,11336,11354,11353,-11335,11337,11355,11354,-11337,11338,11356,11355,-11338,11340,11357,11356,-11339,11314,11342,11357 ,-11341,11315,11358,11359,-11361,11317,11315,11360,-11362,11362,11317,11361,-11364,11364,11362,11363,-11366,11321 ,11364,11365,-11367,11323,11321,11366,-11368,11325,11323,11367,-11369,11327,11325,11368,-11370,11329,11327,11369,-11371 ,11331,11329,11370,-11372,11333,11331,11371,-11373,11335,11333,11372,-11374,11374,11335,11373,-11376,11376,11374,11375 ,-11378,11339,11376,11377,-11379,11379,11339,11378,-11381,11358,11379,11380,-11360,11360,11359,11381,-11383,11361 ,11360,11382,-11384,11363,11361,11383,-11385,11365,11363,11384,-11386,11366,11365,11385,-11387,11367,11366,11386,-11388 ,11368,11367,11387,-11389,11369,11368,11388,-11390,11370,11369,11389,-11391,11371,11370,11390,-11392,11372,11371,11391 ,-11393,11373,11372,11392,-11394,11375,11373,11393,-11395,11377,11375,11394,-11396,11378,11377,11395,-11397,11380 ,11378,11396,-11398,11359,11380,11397,-11382,11382,11381,11398,-11400,11383,11382,11399,-11401,11384,11383,11400,-11402 ,11385,11384,11401,-11403,11386,11385,11402,-11404,11387,11386,11403,-11405,11388,11387,11404,-11406,11389,11388,11405 ,-11407,11390,11389,11406,-11408,11391,11390,11407,-11409,11392,11391,11408,-11410,11393,11392,11409,-11411,11394 ,11393,11410,-11412,11395,11394,11411,-11413,11396,11395,11412,-11414,11397,11396,11413,-11415,11381,11397,11414,-11399 ,11399,11398,11415,-11417,11400,11399,11416,-11418,11401,11400,11417,-11419,11402,11401,11418,-11420,11403,11402,11419 ,-11421,11404,11403,11420,-11422,11405,11404,11421,-11423,11406,11405,11422,-11424,11407,11406,11423,-11425,11408 ,11407,11424,-11426,11409,11408,11425,-11427,11410,11409,11426,-11428,11411,11410,11427,-11429,11412,11411,11428,-11430 ,11413,11412,11429,-11431,11414,11413,11430,-11432,11398,11414,11431,-11416,11342,11341,-11433,11341,11343,-11433 ,11343,11344,-11433,11344,11345,-11433,11345,11346,-11433,11346,11347,-11433,11347,11348,-11433,11348,11349,-11433 ,11349,11350,-11433,11350,11351,-11433,11351,11352,-11433,11352,11353,-11433,11353,11354,-11433,11354,11355,-11433 ,11355,11356,-11433,11356,11357,-11433,11357,11342,-11433 Edges: 0,4,16,20,23,24,29,32,36,40,44,48,3,1,2,7,6,9,10,15,13,14,17,18,25,27,26,35,34,37,39,38,42,30,46,50,55,53,54,60,61 ,66,64,65,68,69,72,74,73,76,81,80,83,85,84,88,92,96,99,104,107,111,121,123,129,128,131,133,140,8,12,105,22,102,31 ,101,100,108,144,113,112,116,115,136,120,119,124,132,293,545,603,604,1099,1126,1128,1132,1147,1160,1175,1203,1204 ,1223,2486,1232,1242,4963,1248,1333,1348,1356,1441,1502,1509,1517,1518,1812,1813,1829,1844,1997,2179,2252,2249,2338 ,2450,2581,2709,2731,2867,2870,3067,4406,2377,3104,3108,2444,3120,4088,4166,4173,4225,4408,4763,4958,4991,4992,5008 ,5096,5187,5369,5744,6285,6332,6357,6739,4762,1791,149,148,147,146,153,152,150,157,156,154,161,158,162,169,167,174 ,166,178,873,182,181,180,179,186,185,189,187,194,197,196,195,6887,201,200,199,198,205,204,202,209,208,206,213,210 ,216,215,214,221,225,224,222,229,226,6449,176,231,230,237,236,235,234,238,246,250,249,248,247,253,251,257,262,266 ,265,264,263,270,269,267,273,271,278,282,281,280,284,285,6092,290,289,287,288,294,292,298,297,295,296,302,300,306 ,303,305,309,313,312,310,311,317,315,316,321,320,318,325,323,324,609,329,326,333,337,336,335,334,341,340,339,338,345 ,344,342,349,348,346,353,350,357,355,354,361,360,359,358,365,364,362,369,368,366,373,370,377,376,374,375,381,379,380 ,385,383,382,384,388,386,392,391,390,395,393,399,406,407,620,618,411,409,410,420,416,414,413,418,424,422,427,432,431 ,430,436,434,433,435,441,440,438,442,446,458,457,455,454,462,459,467,466,471,468,475,474,473,472,479,478,476,483,482 ,480,487,484,490,489,488,495,494,499,498,496,503,500,507,506,505,504,511,510,508,515,514,512,519,516,522,521,527,526 ,531,530,528,532,539,536,543,542,547,544,551,550,555,554,553,559,558,556,563,562,560,564,571,570,569,568,574,572,579 ,578,583,580,587,590,594,593,598,602,611,610,613,617,621,629,634,633,632,631,637,635,641,646,649,648,647,653,658,662 ,661,660,665,663,670,669,671,678,677,680,686,685,688,693,692,691,697,701,706,709,708,713,718,717,719,726,725,724,729 ,727,733,741,740,745,750,749,751,757,756,755,762,761,765,763,770,774,773,772,777,775,782,781,783,790,789,788,793,791 ,797,805,804,809,814,813,815,825,821,820,822,826,829,828,830,831,835,841,844,849,852,857,860,858,864,871,870,879,878 ,5719,4507,13860,889,887,886,888,914,892,921,891,893,890,896,897,895,894,903,904,1255,899,898,902,901,906,908,911 ,910,909,913,918,917,5282,919,6172,925,924,922,923,947,6829,948,6837,4648,6895,4633,933,931,930,932,934,940,939,938 ,937,941,942,4512,946,945,950,954,964,4382,4381,5461,1013,965,4524,993,1016,968,966,967,969,970,1018,973,977,976,974 ,975,5510,980,979,978,982,981,1467,989,988,985,991,995,1005,999,998,1000,1002,1009,1008,1007,1012,1011,972,1015,1020 ,1019,1023,1022,1037,1033,1031,1030,1032,1035,4708,1039,1041,1040,1038,1045,1044,1042,1049,1048,1046,1047,1058,1059 ,6773,1055,1054,1053,1057,1062,1060,1061,1067,1066,1065,1064,1071,1069,1068,1070,1075,1073,1077,1076,1109,1108,4807 ,1083,1082,1087,1119,1086,1085,1094,1095,1091,1088,1098,1097,1096,1101,1103,1111,1107,1104,1106,1115,1118,1117,1116 ,1122,1125,1131,1134,1133,1138,1143,1142,1144,1150,1149,1152,1151,1159,1156,1195,1196,1163,1162,1161,1167,1166,1164 ,1171,1170,1168,1172,1218,2828,4996,4995,1176,1177,1180,4496,1214,1190,1191,1187,1185,1184,1186,1188,1194,1193,1192 ,1198,1202,1207,1210,1211,1215,1209,1217,1216,1220,1227,1226,1225,1224,1228,1229,1235,1236,3210,3206,2202,1247,1246 ,1245,1244,1249,1251,1271,1267,1266,1422,1258,1259,1253,1252,1256,1263,1262,1261,1260,1265,1270,1269,1275,1272,1276 ,1277,1279,1283,1282,1280,1286,1292,1360,1289,1288,1284,1290,1297,1296,1295,1294,1301,1300,1299,1298,1303,1357,1308 ,1307,1306,1305,1312,1311,1309,1316,1315,1313,1320,1317,1327,1328,1324,1321,1332,1329,1330,1336,1335,1334,1339,1337 ,1344,1343,1345,1350,1351,1349,1355,1359,1358,1364,1363,1367,1365,1379,1374,1375,1380,1443,1384,1383,1382,1381,1386 ,1388,1440,1437,1392,1409,1408,1405,4939,1394,1395,1401,1400,1404,1403,1402,1407,1412,1416,5716,5713,1420,1421,2245 ,1419,1418,1425,1424,1432,1426,1427,1434,1436,1444,1449,1448,1447,1446,1453,1452,1450,1457,1456,1454,1461,1458,1465 ,987,1463,1462,1469,1468,5505,1473,1472,1470,1471,1487,4801,1477,1476,1474,1475,1481,1479,1480,1485,1482,1483,4776 ,1488,1493,1492,1491,1495,1496,1498,1499,1500,1505,1504,1503,1541,1507,1506,4175,5238,4720,1513,1512,1510,1511,1520 ,1515,1516,1514,1521,2993,1523,5220,1525,1524,1522,1527,1533,1532,1531,1530,1537,1536,1534,4773,4754,4753,1539,1538 ,1544,1543,1548,1546,1581,1580,1558,1560,1559,1557,1564,1562,1572,1567,1568,1566,1565,1570,1576,1575,1574,1579,1577 ,1583,1596,1591,1592,1590,1589,1594,1600,1599,1598,1604,1603,1601,1607,1605,1619,1620,1616,1614,1613,1615,1617,1624 ,1623,1621,1622,1628,1626,1627,1635,1636,1632,1630,1629,1631,1633,1723,1768,5802,6214,1640,1639,1637,1638,1644,1643 ,1642,1641,1648,5954,1645,1655,1650,1652,1649,1656,1653,1654,1736,1659,1658,1657,3014,1660,1746,1704,1708,1707,6250 ,1760,1664,1663,1661,1662,1668,1666,1667,1672,1671,1669,2165,1677,1676,1697,6766,1696,1675,1674,1673,1680,1679,1684 ,1683,1739,1688,1685,1691,1690,1695,1703,1702,1701,1705,1711,1710,1709,1716,1715,5397,1718,5922,5951,6757,5948,1725 ,1724,1722,1756,1759,1727,2521,1730,1735,1734,1740,6205,6209,1744,6207,2342,1751,1748,1754,1753,1762,1763,1764,1761 ,1766,1775,1776,1772,1770,1769,1771,1773,1780,1779,1778,1777,1788,1784,1782,1781,1783,1786,1240,1789,1790,1796,1795 ,1794,1793,1799,1798,4470,1797,4911,1804,1803,1802,1801,1808,1807,1805,1811,1809,1816,2261,1818,1820,1819,1817,1827 ,5882,1822,1824,1823,1821,1828,1825,1179,1178,1183,1182,2739,1832,1831,1830,1836,1835,1833,1839,1837,1845,1848,1847 ,1855,1856,1852,1849,4484,4480,5018,1860,1859,1858,1863,1862,1871,1884,1866,1868,1867,1865,1872,1869,1876,1875,1874 ,1873,1880,1879,1877,1882,1887,1892,1891,1890,2216,2221,2220,2736,1893,1896,1895,1894,2569,5848,1903,1904,1900,1898 ,1897,1899,1901,1911,1912,1908,1905,1907,1906,1909,2131,2130,5407,4515,1917,1915,1913,1914,1918,1916,1921,3159,2713 ,1920,1922,1919,1929,1930,1926,1924,1923,1925,1927,1934,1933,1932,1931,1938,1937,1935,1941,1939,1946,2748,1949,1948 ,1947,1953,1951,1952,1960,1961,1957,1954,1956,1962,1965,1964,1963,1966,1967,1973,1970,1974,1975,1976,1985,1986,1982 ,1980,1979,1981,1983,1989,1990,2108,1988,1987,1994,1993,1992,1996,2775,2001,6084,13841,2005,2003,2002,2017,2013,2011 ,2010,2012,2015,2021,2020,2019,2018,2024,2022,2026,2029,2034,2038,2037,2036,2035,2042,2041,2039,2046,2045,2043,2050 ,2047,2054,2053,5939,6800,2055,2059,2069,2070,2066,2064,2063,2067,2073,2072,2071,2077,5843,4668,2081,2080,2079,2636 ,5522,5894,6077,2085,2083,2089,2088,2090,2091,2092,2571,2570,5751,5364,2099,2127,2096,2095,2094,2100,2097,2104,2103 ,2102,2101,2106,2105,2113,2110,2117,2116,2115,2114,2425,2438,2119,2121,2118,2124,2141,2137,2135,2134,2139,2145,2144 ,2143,2142,2149,2148,2146,2620,2626,2157,2153,2151,2150,2152,2155,2161,2160,2158,2163,3169,3166,6097,2169,2168,2166 ,2167,2173,2171,2172,5278,2176,2174,2177,2180,2178,2181,2184,1969,2187,1529,2188,2192,2191,2190,2189,2194,2196,2195 ,2200,2199,2197,2204,2203,2201,2226,2774,3002,2207,3362,2206,2208,2205,2212,2211,2472,2468,2217,2214,2213,2215,2218 ,2222,2224,2232,2231,2230,2235,2237,2241,2240,2238,2239,2243,5209,5936,5214,2253,2247,2246,2248,2250,2259,2258,2265 ,2264,2263,2262,2268,2267,2266,2270,2274,3250,2616,2272,2279,2276,2318,2314,2313,2281,2280,5827,2853,2285,2284,2290 ,2294,2292,4462,5360,5754,2298,2297,2296,2299,2301,2303,2305,5854,5855,2312,2311,2317,2316,6015,2322,2326,2325,2324 ,2328,2330,2331,2339,2346,2345,2344,2343,2350,2349,2347,2353,2355,2357,2354,2361,2364,2362,2365,6091,6087,2367,2366 ,2368,2376,2371,2372,2370,2369,2375,2374,4520,2635,2378,2384,2383,2382,2388,2387,2386,2385,2391,2389,2395,2394,2400 ,2397,2404,2403,2407,2566,2410,2409,5815,5401,6041,6049,6046,6042,2413,2422,2421,2420,2419,2423,2430,2429,2427,2434 ,2433,2431,2441,2440,2445,2447,2454,2453,2452,2457,2455,2462,2461,2463,2467,2469,2476,2490,2502,2495,2497,2496,2500 ,2509,2510,2506,2504,2503,2505,2507,2513,2514,2512,2519,2530,2526,2523,2525,2532,2534,2538,2537,2536,2542,2541,2539 ,2545,2543,2552,2554,2553,2558,2557,2556,2560,2561,2564,2563,2565,2575,2574,2572,2573,2579,2577,2578,2580,5741,2585 ,961,956,960,957,2595,2594,2593,2598,2596,2603,2602,2604,2609,2608,2613,3246,2619,2618,2623,2622,2629,2627,2638,2641 ,2640,2646,2645,2649,2647,2658,2657,2656,2662,2661,2659,2665,2663,2678,2674,2671,2679,2684,2691,2693,2694,2696,2690 ,2689,2688,2703,2702,2707,2706,2710,2715,2714,2718,2724,2723,2725,6148,5337,5336,2764,2729,2752,2058,2057,2062,2061 ,2734,2742,5984,6212,6239,4473,4472,2749,2799,2755,2753,2760,2759,2761,2765,2767,2773,2782,2783,2779,2777,2776,2778 ,2780,2790,2791,2787,2784,2786,2793,2792,2797,2845,2802,2809,2808,2803,2811,2810,2815,2836,2837,2833,2831,2830,2834 ,2841,2840,2843,2847,2851,2857,2858,2863,2866,2868,2875,2874,2876,2879,2885,2884,2883,2888,2886,2893,2892,2894,2904 ,2903,2902,2913,2915,5916,5280,5344,5660,5665,2922,2921,2926,2925,2931,2930,2934,6673,13951,5653,2938,2942,2941,2940 ,2939,2946,2945,2943,2950,2949,2947,2954,2951,2958,2957,2956,2962,2961,2959,2963,2969,2968,2974,2973,2977,6274,2989 ,3082,2984,2985,2983,2994,2991,2998,2997,3004,3003,3008,3011,3016,3017,3022,3019,6401,3024,3030,3027,3034,3033,3038 ,3037,3036,3042,3041,3039,3045,3043,3051,3053,3055,3054,3060,3059,3064,3068,3073,3072,3078,3077,3080,3087,3089,2380 ,3102,3095,3103,3105,4656,3111,2443,3126,3125,3124,3123,3127,3133,3140,3141,3137,3135,3134,3138,5979,3145,3144,3143 ,3142,3149,3148,3146,3152,3150,3157,3185,3162,6161,3164,3163,3161,3171,3172,3168,3165,3167,3174,3173,3177,3180,3184 ,3193,3190,3191,3188,3198,3197,3195,3202,3200,3203,3214,3213,3217,3221,3220,3227,3226,3230,3228,1721,5210,3239,3238 ,3237,3236,3243,3242,3240,3244,3249,3255,3254,3253,3252,3259,3257,3256,3260,3262,3273,3268,3270,3269,3267,3274,3271 ,3695,3278,3276,3275,3277,3285,3340,3282,3286,3280,3279,3281,3283,3290,3289,3288,3287,3294,3293,3291,3298,3295,3302 ,3301,3300,3299,3305,3304,3309,3308,3306,3313,3312,3310,3317,3314,3321,3320,3319,3325,3324,3322,3329,3328,3326,3330 ,3335,3338,3344,3353,3352,3351,3357,3356,3354,3360,3358,3370,3367,3368,3374,3373,3377,3376,3375,3382,3381,3386,3385 ,3383,3390,3387,3394,3393,3392,3391,3397,3395,3401,3406,3410,3409,3408,3407,3414,3413,3411,3418,3417,3415,3422,3419 ,3431,3430,3432,3435,3441,6588,3438,3444,3443,3442,3449,3448,3453,3452,3450,3457,3454,3460,3459,3458,3464,3469,3468 ,3473,3470,3477,3476,3475,3474,3481,3480,3478,3484,3482,3489,3492,3491,3497,3496,3501,3500,3498,3502,3508,3507,3506 ,3510,3509,3515,3513,3512,3519,3518,3516,3522,3520,3531,3530,3529,3535,3534,3532,3538,3536,3547,3546,3545,3544,3551 ,3550,3548,3567,3552,4052,3555,3562,3563,3559,3556,3558,3565,3564,3572,3571,3576,3575,3573,3577,3583,3582,3588,3587 ,3591,3589,3600,3599,3598,3597,3604,3603,3601,3607,3605,3612,3616,3615,3614,3613,3619,3617,3623,3628,3632,3631,3630 ,3634,3635,3644,3640,3637,3639,3651,3660,3647,3646,3645,3649,3653,3655,3667,3675,3662,3664,3663,3661,3668,3665,3670 ,3671,3673,3672,3678,3677,3682,3680,3687,3693,3691,3689,3688,3690,3699,3698,3697,3696,3703,3702,3701,3700,3705,3708 ,3713,3711,3716,3721,3718,3725,3724,3728,3727,3740,3739,3738,3742,3748,3747,3746,3750,3756,3755,3753,3763,3764,3760 ,3757,3759,3768,3776,3775,3774,3773,3780,3779,3777,3783,3781,3788,3791,3790,3789,3795,3800,3799,3804,3801,3812,3806 ,3805,3807,3809,3872,3817,3890,3818,3827,3825,3822,3844,3832,3831,3830,3829,3836,3835,3840,3839,3837,3841,3848,3847 ,3846,3845,3852,3851,3849,3855,3853,3860,3863,3862,3861,3868,3867,4042,3870,3875,3874,3879,3882,3889,3888,3892,3891 ,3898,3897,3896,3900,3902,3901,3905,3903,3909,3908,3912,3915,3917,3926,3923,3928,3932,3931,3936,3941,3940,3939,3945 ,3949,3954,3957,3956,3961,3965,3978,3971,3973,3982,3985,3994,3988,3987,3991,3997,3995,3999,4003,4007,4006,4010,4019 ,4026,4025,4030,4029,4034,4032,4041,4040,4046,4050,4059,4058,4063,4065,4072,4149,4073,4071,4077,4076,4086,4085,4094 ,4093,4097,4106,4113,4112,4111,4118,4117,4120,4125,4129,4128,4134,4133,4137,4146,4153,4152,4150,4156,4157,4155,4159 ,4161,4160,4163,4169,4168,4167,4184,4171,4177,4176,4174,4180,4181,4179,4183,4182,4188,4186,4192,4201,4199,4204,4207 ,4212,4211,4210,4215,4213,4219,4218,4216,4221,4223,4234,4237,4242,4241,4240,4239,4246,4245,4243,4250,4247,4254,4253 ,4252,4251,4256,4257,4261,4260,4259,4258,4265,4264,4262,4269,4268,4266,4273,4270,4275,4274,4280,4279,4283,4281,6748 ,1729,1728,4287,4284,4289,4295,4292,4299,4305,4303,4302,4309,4308,4313,4319,4318,4316,4323,4321,4326,4325,4331,4330 ,4334,4332,4343,4348,4347,4349,4372,4354,4362,4356,4355,4359,4364,4365,4370,4367,4374,4373,4378,4377,4375,4380,6183 ,986,4386,4394,4392,4403,4411,4421,4420,4426,4425,4429,4427,4438,4442,4451,5357,4452,4456,4455,4461,4460,4465,4463 ,4474,4471,4478,5635,5520,4488,4492,4483,4479,4489,4493,4495,4499,4509,4508,4506,4511,2133,2132,4658,4523,4522,4527 ,4532,4531,4533,4544,4539,4540,4537,4547,4546,4545,4550,4549,4553,4551,4558,4557,4562,4559,4564,4563,4566,4570,4569 ,4576,4575,4580,4579,4577,4581,4587,4586,4592,4591,4596,4595,4593,4597,4604,4601,4607,4608,4611,4610,4616,4615,4620 ,4619,4617,4621,4627,4626,4625,4631,4636,4635,4640,4637,4643,4642,4641,949,4652,4657,4661,4660,5819,4663,4667,4666 ,5478,13928,4672,2911,4676,4674,4671,4669,4670,4703,4678,4679,4677,4680,4688,4689,4684,4683,4691,4690,4694,4699,4700 ,4701,4706,4705,4704,4711,4710,4714,4712,4718,4716,4725,4724,4723,4729,4728,4726,4733,4732,4730,4734,4741,4740,4739 ,6910,4742,4750,1528,4756,4761,4760,4765,4769,4784,4777,4781,4790,4787,4794,4798,4795,4802,4806,4803,4804,5170,4810 ,4809,4808,4813,4812,4811,6871,4817,4821,4819,4829,4828,4834,4833,4837,4835,4845,4844,4849,4848,4854,4853,4855,4861 ,4860,4859,4866,4865,4864,4863,4872,4875,4874,4879,4888,4885,4892,4898,4897,4901,4905,4912,4917,4916,4921,4920,4925 ,4923,4932,4936,4935,4942,4941,4946,4944,4949,4954,4953,4957,4961,5003,5006,4975,4971,4968,4970,4983,4979,4976,4978 ,4986,4985,4984,4990,4994,4999,5000,5009,5013,5012,5011,5109,5016,5015,5020,5025,5030,5033,5035,5040,5039,5042,5048 ,5047,5052,5051,5056,5054,5064,5063,5068,5067,5072,5070,5080,5079,5084,5083,5088,5086,5095,5103,5102,5106,5111,5110 ,5114,5119,5126,5128,5136,5129,5137,5148,5152,2359,5168,5171,5176,5180,5179,5184,5195,5194,5193,5198,5196,5207,5204 ,5208,5221,5227,5224,5228,5225,2009,5236,5239,5244,5247,5251,5250,5255,5263,5262,5268,5267,5271,5269,13832,5284,5281 ,5290,5288,5299,5305,5304,5308,5323,5331,5330,5333,5339,5338,5343,5353,5350,5395,5358,5359,5363,5383,5391,1028,1029 ,5399,5400,5396,5393,5440,5403,5402,5405,5410,5409,5417,5415,5412,5419,5422,5421,5426,5430,5429,5432,5368,5367,5437 ,5372,5371,5362,5375,5446,5445,5444,5447,5448,5376,5377,994,990,5465,5464,5463,5486,5469,5468,5467,5473,5472,5470 ,5474,5485,5479,5480,5487,5498,5499,13967,5496,5504,5507,5515,5521,5524,927,5530,5529,5550,5534,5533,5540,5539,5542 ,5541,5545,5557,5552,5551,5561,5560,5559,5565,5569,5574,5577,5576,5581,5584,5595,5594,5599,5602,5601,5608,5607,5609 ,5614,5621,5629,5628,2910,5633,5637,2898,2899,5646,5643,5650,2900,2906,2905,2901,5651,5657,5668,5667,5672,5676,5712 ,5684,5683,5691,5696,5695,5699,5705,5704,5706,5710,5725,5722,5723,5728,5734,5740,5438,2583,5439,2582,5456,5777,5755 ,5760,5763,5752,5747,5768,5766,5748,5770,5769,5749,5775,5781,5790,5788,5799,5732,5805,5804,5806,5810,5816,5809,5818 ,5817,5822,6065,6071,5829,5828,5833,5838,5837,5840,5845,5853,5852,5857,5856,5860,5864,1239,5872,5881,5880,5889,5887 ,4664,5902,5910,5925,5918,5919,5926,5931,5930,5938,5934,5944,5947,5956,6799,5960,5961,5968,5964,5972,5971,5982,5977 ,5976,5980,5986,5985,5989,5988,5987,5994,5993,5999,5996,6002,6001,6005,6008,6007,6016,6020,6024,5830,6030,6027,6028 ,6026,6032,6031,6036,6035,6040,6047,6057,6060,2850,6074,6080,6095,6088,6086,6100,6099,6105,6104,6108,6106,6116,6115 ,6118,6126,6127,6122,6121,6129,6134,6154,6149,6147,6159,6160,6169,6170,6175,6174,5528,6176,6178,6188,6196,6203,6211 ,6215,6217,6221,6225,6231,6234,6237,6245,2699,2700,6247,6251,6252,6255,6258,6262,2821,4126,6270,4127,6279,6280,6289 ,6278,6277,6283,6282,6281,6284,6286,6291,6292,6293,6294,6295,6301,6299,6300,6303,6305,6304,6306,6307,6309,6308,6321 ,6311,6315,6317,6322,6331,6343,6348,6355,6362,6361,6360,6366,6365,6363,6370,6369,6367,6371,6377,6376,6382,6381,6386 ,6385,6383,6387,6394,6393,6395,6391,6400,6399,6405,6404,6408,6406,6416,6421,6415,6425,6424,6423,6428,6426,6433,6432 ,6434,6440,6439,6444,6448,6456,6455,6460,6464,6473,6472,6470,6471,6477,6475,6502,6481,6478,6485,6482,6489,6492,6491 ,6490,6497,6496,6501,6498,6505,6510,6524,6518,6517,6521,6535,6531,6530,6532,6536,6538,6545,6542,6540,6539,6543,6548 ,6556,6555,6560,6565,6564,6566,6572,6571,6570,6576,6581,6580,6585,6582,6587,6591,3425,6597,6609,6605,6602,6613,6611 ,6616,6618,6350,6297,6627,6628,883,875,855,867,164,6296,6341,241,240,165,163,856,854,874,882,1681,1741,1757,2518,220 ,6654,6325,6345,833,2352,6676,6669,6236,2351,6064,2282,2862,2852,6143,6145,2859,6139,5831,6687,6695,2411,4516,5811 ,4514,1278,6713,4454,4458,4457,6712,5386,4453,6727,6731,6735,1732,1731,2975,1647,1719,5211,1720,6638,1977,1052,4752 ,1051,4751,1501,1489,2732,2750,2632,2052,5955,2008,2522,6821,4340,6179,926,5527,944,6836,5380,5365,5457,1285,5596 ,6852,5591,5361,6138,2333,4818,4815,4830,2405,6880,175,177,232,233,1241,2478,5661,2923,6298,6310,6889,6629,928,929 ,935,1554,2587,3426,3440,3429,6483,6488,6480,3189,4122,4745,2288,6797,5901,5098,5758,332,6918,6919,6920,6921,6922 ,6923,6925,6926,6927,6929,6930,6933,6936,6935,6937,6938,6939,6947,7648,6951,6952,6953,6954,6955,6956,6960,6962,6963 ,6967,6968,6970,6973,6974,6975,6976,6977,6978,6980,6981,6982,6984,6985,6988,6990,6991,6992,6993,6997,6998,7000,7001 ,7004,13394,7007,7008,7009,7010,7011,7012,7017,7018,7022,7023,7024,7025,7027,7029,7031,7034,7038,7039,7040,7041,7042 ,7043,7045,7047,7049,7050,7055,7054,7057,7060,7061,7062,7066,7065,7067,7068,7070,7072,7074,7073,7075,7076,7078,7080 ,7082,7081,7084,7085,7089,7088,7090,7091,7094,7093,7095,7096,7098,7099,7102,7101,7103,7064,7063,7106,7107,7109,7112 ,7113,7114,7115,7116,7117,7118,7119,7120,7121,7123,7125,7127,7128,7133,7134,7135,7136,7137,7138,7139,7140,7141,7143 ,7144,7145,7147,7148,7151,7153,7152,7154,7155,7158,7157,7159,7161,7160,7162,7163,7164,7166,7167,7168,7169,7172,7174 ,7176,7183,7186,7188,7189,7192,7191,7193,7195,7198,7200,7196,7197,7203,7205,7208,7210,7211,7212,7214,7215,7217,7218 ,7219,7221,7222,7223,7225,7229,7232,7238,7239,7240,7241,7243,7245,7246,7247,7250,7253,7254,7255,7256,7258,7259,7261 ,7262,7263,7265,7269,7271,7272,7273,7275,7278,7279,7282,7285,7286,7287,7288,7289,7290,7291,7293,7295,7297,7298,7303 ,7304,7306,7307,7310,7311,7313,7317,537,7320,7321,7324,7323,7328,7329,7332,7331,7334,7335,7336,7338,7339,7341,7342 ,7343,7345,7349,7350,7351,7352,7353,7355,7357,7358,7359,7362,7365,7369,7372,7375,7376,7379,7383,7390,7393,7397,7400 ,7403,7411,7413,7414,7415,7416,7418,7420,7422,7425,7430,7431,7432,7434,7437,7441,7442,7443,7446,7448,7450,7457,7460 ,7464,7465,7468,7472,7474,7475,7476,7478,7482,7485,7490,7491,7494,7497,7498,7504,7505,7506,7507,7510,7512,7514,7522 ,7523,7526,7529,7530,7536,7538,7539,7540,7541,7542,7546,7548,7549,7553,7554,7555,7558,7560,7562,7569,7570,7571,7574 ,7576,7578,7586,7587,7590,7593,7594,7600,7605,7602,7604,7603,7611,7608,7610,13504,9849,7615,7619,7622,7627,7632,7637 ,7639,7641,7650,7651,7658,7664,7668,7665,11808,7678,7677,7679,7672,7673,7681,7685,7688,7691,7692,7693,7695,7694,7699 ,7707,7713,7704,7705,7706,7714,7718,7727,7726,7728,7729,7682,7684,7687,7735,7738,7740,7739,7741,7736,7737,7743,7744 ,7746,7748,7747,7756,7760,7759,7761,7757,7765,7766,7767,7768,7769,7770,7774,7776,7782,7786,7783,7784,7785,7788,7789 ,7792,7796,7803,7808,7810,7811,7812,7817,7816,7859,7819,7883,7821,7820,7822,7860,7823,7825,7826,7829,7828,7830,7834 ,7838,7839,7840,7842,7843,7845,7778,7847,7849,7771,7815,7814,7854,7855,7831,7861,7865,7873,7868,7870,7869,7875,7876 ,7878,7881,7882,7884,7887,7886,7892,7894,7897,7893,7899,7902,7906,7905,7907,7903,7904,7909,7910,7914,7915,7917,7918 ,7919,7921,7927,7926,7928,7929,7931,13652,7943,13654,7934,7924,7941,7940,7942,7944,7945,7946,7947,7950,7949,7951,7952 ,7953,7955,7958,7959,7938,7961,7965,7967,7972,7969,7932,7978,7933,7980,7984,7981,7983,7989,7990,7991,7997,8000,8005 ,8004,7966,7971,7999,8014,8015,7995,7994,8016,8021,8022,8025,8028,8029,8035,8036,8037,8042,8043,8044,8047,8049,8048 ,8052,8056,8057,8058,8060,8061,8063,8064,8065,8067,8071,8074,8072,8073,8080,8076,8091,8087,8086,8075,8092,8097,8096 ,8098,8093,8095,8094,8101,8102,8103,8105,8109,8112,8055,8117,8120,8118,8130,8126,8127,8141,8142,8143,8144,8137,8151 ,8149,14013,8885,8154,8159,8158,8162,8163,8164,8165,8171,8174,8178,8183,8186,8194,8195,8198,7710,7676,7709,8201,8200 ,8202,8188,8204,8205,8185,8189,8184,8206,8209,8216,8217,8214,8218,8220,8221,8225,8222,8224,8229,8230,8228,8235,8236 ,8237,8238,8239,8240,8241,8242,8243,8245,8314,8247,8248,8249,8250,8251,8252,8254,8255,8256,8258,8259,8262,8263,8267 ,8264,8266,8271,8276,8277,8279,8280,8281,8284,8286,8287,8288,8294,8295,8300,8302,8304,8312,8313,8212,8316,8320,8322 ,8327,8332,8336,8339,8196,8351,8352,8353,8210,8356,8359,8363,8368,8371,8211,8379,7700,8383,7674,7675,8398,8397,8382 ,8329,8191,8334,8330,8328,8400,8401,8402,8404,8406,8405,8135,8408,8139,8410,8409,8415,8418,8419,8390,8389,8197,8369 ,8427,8428,8429,8430,8431,8432,8434,8435,8436,8438,8439,8442,7856,8444,8445,8446,8448,8449,8451,7836,8453,7832,8459 ,8458,8460,8461,8464,8463,8466,8471,8470,8472,8473,8476,8475,8477,8479,8480,8481,8484,12117,8487,8486,8489,8492,8493 ,8468,8469,8498,8499,8500,8503,8506,8513,8516,8514,8515,8517,8519,8518,8520,8522,8526,8531,8533,8534,8539,8540,8538 ,8542,8543,8545,9530,8546,8547,8548,8549,8550,8551,8553,8523,8509,8563,8562,8505,8508,8504,8568,8570,8576,8599,8579 ,8581,8582,8580,8584,8586,8588,8591,8593,8589,8592,8590,8595,8596,8597,8600,8602,8604,8612,8615,8617,8613,8616,8614 ,8619,8620,8621,8623,8624,8626,8628,8630,8635,8640,8639,8641,8636,8638,8637,8646,8643,8644,8645,8647,8652,8651,8653 ,8648,8650,8649,8658,8657,8661,8664,8663,8665,8666,8667,8668,8669,8670,8671,13649,8674,8684,8677,8675,8678,8679,8686 ,8682,8687,8688,8695,8701,8700,8703,8704,8707,8716,8690,8692,8720,8719,8721,8722,8725,8714,8726,8727,8729,8730,8735 ,8740,8739,8741,8737,8744,8745,8746,8747,8748,8751,8752,8755,8758,8760,8761,8764,8705,8706,8709,8710,8780,8781,8782 ,8783,8784,8659,12546,8791,8792,8803,8805,8806,8807,8840,8824,8825,8831,8832,8836,8835,8838,13141,8717,8713,8847,8711 ,8809,8693,8856,8855,8854,8655,8656,8862,8867,8866,8868,8863,8865,8864,8870,8871,8872,8873,8875,8879,8878,8880,8876 ,8877,8884,8136,10447,8860,8887,8888,8889,8890,8894,8895,8901,8898,8900,8905,8893,8910,8911,8912,8913,8914,8915,8917 ,8919,8921,8922,8926,8930,8931,8933,8942,8943,8947,8951,8952,8954,8955,8958,8085,8089,8090,8084,8967,8968,8969,8971 ,8972,8974,8976,8978,8986,8983,8985,8987,8991,8988,8990,8999,8995,9004,9005,9006,9009,9010,9011,9012,9015,9019,9020 ,9022,9023,9026,9027,9028,9013,9030,9031,9017,9034,9014,9018,9035,9036,9037,9051,9055,8961,9070,9068,9067,9069,9383 ,9075,9080,9079,9081,9076,9078,9077,9083,9088,9087,9089,9084,9086,9085,9091,9099,9103,9104,9108,9109,9113,9115,9118 ,9119,9123,9124,9128,9131,9132,9137,9136,9138,9133,9135,9134,9140,9141,9142,9143,9144,9145,9147,9149,9151,9152,12355 ,9156,9161,9160,9164,9169,9168,9165,9167,9175,9172,9173,9174,13885,9181,10211,9183,9182,9186,9185,9184,9189,9194,9193 ,9195,9190,9192,9191,9197,9198,9204,9200,9199,9207,9206,9209,9213,9111,9215,9218,9219,9221,9222,9223,9229,9233,9232 ,9234,9230,9231,9236,9237,9238,9239,9240,9242,9244,9247,9249,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265 ,9268,9270,9269,9274,9275,9291,9287,9292,9296,9298,9293,9295,9294,9301,9302,9303,9305,9320,11984,12430,10395,9329 ,9336,9346,9345,9344,9350,9355,9358,9360,9356,9357,9363,9364,9375,9377,9374,9378,9387,12529,9399,9391,9392,9393,9394 ,9395,9397,9398,9401,9402,9201,9404,9405,9202,9205,9406,9409,9410,9411,9412,9413,9415,9418,9422,9425,9428,9426,9430 ,9431,9433,9443,9332,9445,9448,9450,9446,9447,9452,9453,9454,9455,9456,9457,9459,9379,9464,9470,9473,9475,9471,9474 ,9472,9477,9479,8733,8734,8732,9481,9486,9485,9487,9482,9484,9483,9490,9491,9493,9492,9494,9495,9498,9497,9499,13821 ,9501,9502,9513,9517,9519,9179,9178,9520,9528,9532,9536,9537,9538,9539,9540,9544,9545,9548,9549,9551,9553,9559,9557 ,9558,9568,9569,9580,9584,9585,9589,9592,9594,9326,9601,9598,9597,9052,9053,9054,9058,9057,9610,9607,8959,8965,8966 ,9618,9616,9621,8147,9622,8411,8412,9624,9625,9628,9646,9647,9642,9644,9643,13889,8927,8928,8929,9661,9662,9663,9664 ,9666,11375,9668,9674,9670,9671,11374,9672,9675,9680,9684,9689,9049,8935,13100,9700,9704,9713,9711,9714,9715,12524 ,12860,9719,9720,9721,8146,8138,9727,9724,9734,9731,9683,9686,9687,9328,9682,9742,9750,9759,9760,9761,9764,9766,9769 ,13647,9775,9776,9777,9778,9779,9780,9782,9783,9788,9786,9789,9790,9797,9795,9796,9803,9798,9808,9807,9806,9814,9813 ,9817,9816,9819,9820,9815,9330,9827,9824,9830,9834,9835,9836,9837,9542,9839,9840,9541,9100,9554,9841,9844,9846,9847 ,9850,9981,9384,9859,9861,12554,9860,9862,9871,9347,9737,9864,9876,9882,9416,9884,9885,9417,9886,9887,9889,9890,9420 ,9893,9421,9896,9897,9899,9901,9902,9903,9904,9907,9909,9910,9911,9917,9923,9920,9928,9930,9812,9566,9811,9562,9933 ,9938,9937,9939,9934,9936,9935,9941,9942,9947,9944,8718,9950,9953,9951,9159,9958,9960,9961,9962,9101,9965,9106,9968 ,9102,9107,9571,9110,9972,9974,9973,9976,9979,9980,9982,9983,9385,9386,9986,8773,9987,9988,9991,9990,8778,9996,9997 ,13707,7806,7802,7807,7801,10001,10002,10003,10006,10008,10009,10010,10016,10017,10021,10025,10026,9462,9463,10035 ,9467,9468,9563,9561,9331,10049,10050,10052,10053,10057,10059,9158,10065,10066,10068,10069,9162,10073,10075,10081 ,10084,10082,10093,10088,10102,10101,10105,9325,10107,9691,10097,9334,9690,10115,10123,10124,10129,10131,10034,10038 ,10033,10138,10139,10145,10146,10151,10191,10158,10159,9286,9061,9284,9065,9062,9066,9335,10172,10167,11753,10175 ,11774,10162,10184,10186,10187,10188,10194,9573,9575,9216,10195,10199,10201,10196,10200,10198,10197,10203,10208,10207 ,10204,10206,10213,10214,10216,9514,9515,10219,10225,10224,10228,10235,10231,10232,10237,10241,9603,10238,10240,9599 ,10245,9702,8529,10250,10252,10261,8937,10149,8940,10269,10265,10277,10278,10274,10275,10280,10281,10282,10285,10287 ,10288,10289,10295,10300,10301,10302,10316,10313,11818,10319,10323,7666,10331,7670,10336,10337,10339,10340,10343,10344 ,10346,12788,10349,10351,10352,10353,10354,10355,10356,10358,10360,10361,10362,10367,10365,10370,10366,10372,9310 ,10375,9314,9311,11368,10379,10383,10388,10390,10396,10397,10405,9634,10413,10409,10410,8698,8697,8775,8853,10421 ,10417,10418,9327,10401,10402,10425,10424,10427,10428,10429,10431,10432,10434,10436,10438,10445,10449,10443,10444 ,9948,10454,10457,10460,10381,10463,10385,10382,10386,9600,9832,10476,10478,10488,10485,10322,10498,10506,10512,10513 ,10514,10515,10519,10520,10523,10527,10529,10524,10526,10525,10174,10173,10532,10535,10540,10539,10536,10538,9120 ,9121,9122,10543,10544,10546,10547,9126,10550,9127,10551,10556,10555,10552,10554,10560,10561,10565,10567,10569,10575 ,10578,10577,10580,8160,10583,10584,10152,8156,8155,10590,10591,10598,10595,10596,10605,10606,10600,10612,10615,9640 ,10624,10625,10628,10029,10631,9581,10627,10634,10637,10633,10640,10645,10644,10646,10641,10643,10642,10648,10653 ,10652,10654,10649,10651,10650,14733,10711,10661,10660,10657,10658,11170,10662,10663,10674,10675,10676,10679,10678 ,10680,10681,10682,10684,10685,10715,13783,11417,10709,10688,13775,10690,10691,10692,10694,10695,10697,10698,10699 ,10701,10705,10707,10710,10713,10720,10721,9582,10724,9587,10727,9583,9588,10729,10730,10731,10734,10733,10737,10738 ,10739,10740,10741,10744,10745,10747,10748,10751,10752,10753,10754,10755,10757,10759,10761,10764,10768,10769,10770 ,10771,10772,10773,10775,10776,10777,10779,10780,10783,10789,10790,10792,10793,10797,10807,10808,10804,10806,10812 ,10813,10814,10815,10816,10819,10820,10822,10823,10826,10828,10829,10830,10832,10835,10836,10839,10842,10844,10843 ,10845,10846,10848,10850,10852,10853,10855,10856,10859,10860,10862,10866,10867,10868,10869,10871,10872,10873,10876 ,10877,10875,10879,10882,10883,10884,10886,10887,10889,10891,10893,10898,10899,10900,10901,10902,10903,10905,10635 ,10914,10924,10932,10937,10936,10933,10935,10908,10909,10940,10941,10944,10912,10947,10913,10953,10950,10956,10957 ,10958,10959,10960,10961,10963,10965,10967,10968,10972,10973,10974,10975,10977,10979,10981,10984,10989,10988,10991 ,10994,10995,10997,11001,11000,10998,11005,11008,11011,11009,11006,11007,11017,11013,11015,11020,11025,11024,11026 ,11021,11023,11022,11028,11032,11040,11036,11038,11044,11030,11046,13789,11048,11049,11055,11212,11063,11051,11078 ,11053,11054,11059,11061,11064,11068,11069,11072,11071,11075,11076,11086,11085,11088,11092,11094,11093,11096,11100 ,11104,11101,11103,11105,11106,11107,11108,11109,11110,11112,11114,11116,11117,11124,11129,11130,10668,11132,11133 ,10672,11136,10669,10673,10667,11138,11139,11140,11142,11145,11146,11149,11152,11158,11159,11154,11156,11155,11169 ,11161,11219,11165,11176,11180,11182,11029,11186,11188,11183,11190,11191,11194,11184,11197,11173,11198,11203,11202 ,11199,11201,11206,11208,11164,11163,11213,11220,11221,11227,11230,11228,11232,11229,11234,10921,11236,11237,10926 ,10922,10927,10920,11243,11244,11246,11254,11251,11257,11260,11261,11270,11266,11267,11273,11274,11275,11277,11281 ,11284,11289,11290,11293,11297,11309,11305,11307,10636,11314,11322,11317,11319,11318,11327,11692,11175,11330,11174 ,11341,11338,11224,11354,11350,11351,11358,11364,11406,11363,11365,11371,11372,11384,11379,11391,11397,11410,11413 ,11414,11427,11424,11411,11412,11408,11433,11435,11436,11438,11440,11439,11441,11444,11442,11448,11449,11450,11451 ,11458,11465,11467,11468,11470,11472,11471,11454,11455,11456,11474,11476,11460,11482,11484,11487,11492,11493,11494 ,11495,11496,11498,11499,11500,11501,11503,11505,11509,11518,11521,11523,11524,11525,11526,11527,11528,11530,11531 ,11534,11535,11536,11537,11538,11540,11541,11542,11543,11544,11545,11546,11547,11549,11550,11551,11553,11554,11557 ,11559,11560,11561,11562,11563,11566,11569,8817,8813,8814,8816,11573,11575,11572,11580,11581,11583,11588,11589,11591 ,11596,11597,11601,11610,11608,11613,11604,11617,11619,11620,11622,11623,11627,11629,11634,9740,9739,9746,9745,10047 ,11647,11642,11644,11643,11651,11652,11655,11656,11659,11658,11661,11663,11664,11666,11668,11669,7857,11681,11684 ,11688,11691,11696,11697,11698,11701,11703,11705,10470,11167,10799,10802,10798,11717,11719,11725,11404,11739,11735 ,8909,9717,11749,9716,11745,11747,10181,10182,12654,12659,11756,11755,11757,11764,8054,8050,11779,11784,8051,11794 ,10917,10919,10916,11806,11809,11811,11813,11761,11816,9440,11971,11823,11824,11827,11830,11831,11837,11839,11842 ,11840,11843,11846,11847,11848,11849,11850,11853,11855,11856,11857,11860,11863,11865,11866,11867,11869,11870,11872 ,11873,11878,11881,11882,11884,11885,11888,11889,11891,11895,11897,11898,11900,11901,11904,11905,11907,11911,11914 ,11915,11917,11918,11921,11922,11924,11925,11928,11929,11931,11935,11937,11938,11939,11941,11944,11945,11948,11951 ,11953,11954,11955,7793,11960,10495,10325,11967,11969,11972,11978,9074,11981,11986,11988,11991,11989,11997,12001,10308 ,12005,12007,12002,12004,12003,12009,10533,12011,10534,11817,12013,12016,10329,12020,12017,12019,12024,12026,12029 ,12030,12031,12036,12032,12038,12039,12040,12042,12045,12049,12054,12053,12050,12052,12058,12059,12060,12061,12062 ,12066,12068,12069,12071,12075,12076,12077,12079,12080,12082,12083,12084,12086,12090,12091,12092,12093,13731,12098 ,8566,9527,12105,12108,8556,8561,8557,8524,8528,8525,12121,12122,12124,12129,12130,12132,12136,12137,12138,12140,7936 ,7937,7923,12145,12146,13687,12152,12150,12158,12160,12161,12163,12164,12168,12170,12177,12178,12183,12184,12186,12187 ,12193,12195,12196,12197,12198,12199,12200,12201,12205,12209,12210,12213,14035,12180,12225,12226,12230,12233,8892 ,8358,8192,8180,8179,8181,8908,8393,8349,8395,8298,8344,8343,8167,8348,8296,8168,8173,8169,12242,12246,12251,12255 ,12254,12252,12259,12263,12262,12260,12274,12275,12268,12278,12282,12272,12269,12291,12294,12295,12296,8998,9001,9002 ,8997,12306,12309,12313,11793,11769,11792,12319,11767,11768,11771,11772,12321,12323,12243,12244,8083,12248,12329,12331 ,8079,8082,8077,8078,12337,12339,12346,11776,11777,11780,12354,12358,12353,12360,8859,8861,11605,8772,8774,12370,12374 ,12300,12382,12385,12390,12398,12395,12402,12410,12411,12412,12415,12417,12425,9635,9639,9636,7962,7963,12435,7976 ,8011,9225,12445,12448,12453,12456,12459,12460,12463,12471,12472,12474,12475,12479,12481,12486,7722,7724,8962,12492 ,12498,12499,12503,12510,10153,9654,9655,9656,9659,12519,12240,11736,12521,12522,12525,11737,12541,7900,12544,12548 ,12545,12547,12552,9097,9094,9098,9092,9093,12559,10121,10166,12557,10120,12562,10117,10116,12567,10170,12569,12571 ,12570,9370,9751,9369,9276,12527,12530,9337,9282,12576,12577,12578,12585,12581,9281,9278,7813,7862,12590,12589,12592 ,12595,12596,12597,12598,12599,12601,12602,11999,12608,8457,8456,12609,12611,12612,12000,12618,12625,12624,12629,7837 ,12627,12631,12632,12636,7833,12643,12651,12655,7671,12668,7753,7701,7702,12680,12677,12678,12683,12684,12682,12689 ,12691,12694,12695,12700,12702,12703,12704,12706,12710,12713,12718,12719,12722,12735,7716,7697,7698,12727,12728,12749 ,12731,8272,8273,12758,12764,12765,10309,12768,12772,10299,10298,12781,12782,12784,10297,10305,10306,10296,12790,12791 ,10330,10334,12795,12794,12797,12798,12803,12811,12818,12819,12822,12666,12830,12662,12663,12838,12839,9338,9339,12842 ,9679,9504,9367,9993,9366,9368,9372,9511,9503,12854,12864,12867,9390,9388,9389,12870,12872,9509,9506,12856,9507,9505 ,12857,12886,12882,8787,12846,12899,12900,12894,12895,12903,12905,11979,12909,12911,9046,9321,9042,9040,9041,9323 ,11983,9730,9736,12923,9380,9072,9073,13036,12930,12934,12935,12931,9341,9343,11968,12946,10326,12962,12958,13762 ,9626,9521,8496,12967,9525,12393,9522,9523,12969,12970,12977,12974,12975,12979,12989,12990,12988,12995,10168,12986 ,12987,12997,13000,13002,13003,13005,13007,13016,13021,13026,12575,10259,8950,9318,12914,9868,8946,8949,8944,8945 ,9870,9874,9865,13037,9733,12916,9348,12939,13049,9799,9801,13052,13053,13055,13056,13060,13062,13071,13069,13070 ,13075,13074,13077,13078,13082,13086,13087,13083,13112,9698,13105,13107,13084,13117,11671,13122,13125,11675,11676 ,11678,11680,11672,8829,13139,8660,13148,13155,13159,13163,13167,13170,10178,10176,13172,10111,10109,10108,8820,13177 ,13181,13185,13186,13012,10169,13191,13019,9567,11418,11419,11369,13205,13206,13208,13207,13217,13218,13219,13220 ,13222,13225,13227,13234,13232,13233,13235,13240,13239,13241,13245,13243,13244,13247,13246,13248,13249,13267,13263 ,13265,13216,13277,13287,13295,13303,13307,13308,13309,13311,13312,13314,13315,13316,13318,13322,13324,13325,13327 ,13328,13331,13332,13334,13338,13340,13342,13347,13348,13350,13351,13355,13357,13364,13370,13371,13372,13375,13377 ,13378,13379,13385,13387,13388,13391,13395,13403,13404,13407,13411,13419,13418,13420,13421,13423,13425,13429,13430 ,13436,13433,13440,13441,13443,13447,13448,13449,13450,13451,13454,13457,13461,13469,13474,13475,13476,13478,13481 ,13482,13485,13488,13492,13497,13494,13496,13495,13502,13501,13550,13503,13505,13506,13508,13509,13515,13516,13519 ,13522,13523,13529,13531,13532,13533,13535,13538,13539,13542,13545,13548,10785,13553,13559,13563,13560,13569,13237 ,13258,13261,7662,7654,7634,7646,6944,7015,13238,13291,7014,13298,6943,6945,7633,7635,7655,8754,8841,8694,13906,6994 ,13209,13211,13288,7614,9784,13596,13595,10177,9785,9693,9044,8941,13607,9043,9696,10147,8936,13102,9319,9316,13615 ,9857,9095,9071,9826,8213,13585,11742,13632,8897,13635,13577,8822,9315,8672,10613,8793,10623,13799,13796,8685,8681 ,8736,7911,7913,7912,8565,8465,8483,10155,9512,10042,9271,8497,7979,8689,8821,11637,11673,7754,12672,7790,9277,8227 ,7715,12741,7683,12531,9697,9772,12151,12154,12159,9852,6950,6948,7005,8883,8134,10327,13236,13252,6972,6971,13257 ,7752,7749,7758,9741,7772,7779,8577,10784,13549,13439,13444,13427,13432,13428,13434,10574,11407,12095,6142,13606,13050 ,6094,971,7824,9699,5953,12959,2051,9272,1056,7935,11162,11326,10683,10687,11047,11050,7667,7185,8797,8802,8795,8798 ,10619,12955,10616,6818,13669,5897,11380,10321,10320,12674,13135,12487,13827,5277,5525,6186,5526,9660,5346,5342,11821 ,1999,9340,5890,2122,13094,6135,6083,13857,9694,6011,5718,5991,6267,408,3881,3648,9669,9177,9176,9651,9650,13890,9793 ,12301,2182,1968,2257,2256,2747,2489,2360,13901,2517,6643,8842,8845,13583,1230,1231,8133,9665,11402,13927,3816,5517 ,6017,5501,7818,12543,7872,5484,13946,2932,5688,2933,13959,5488,13962,5494,5503,5495,9324,8541,4758,5825,9692,13013 ,11760,12984,11759,3158,4476,11752,2275,5874,2873,10267,5878,5873,14004,5876,6068,1237,1238,13041,14008,13042,12937 ,456,14182,14031,14027,14204,14178,14020,14170,14044,14162,14052,14061,14032,14190,14194,14186,14150,14087,14088,14224 ,14089,14096,14093,14232,14097,14104,14101,14240,14105,14244,14109,14248,14113,14252,14117,14256,14121,14128,14125 ,14130,14131,14266,14135,14140,14137,14141,14149,14085,14157,14086,14092,14091,14166,14095,14100,14099,14174,14103 ,14108,14107,14112,14111,14116,14115,14120,14119,14124,14123,14198,14127,14200,14129,14134,14133,14139,14143,14062 ,14065,14219,14066,14054,14053,14228,14057,14046,14045,14236,14049,14022,14021,14042,14041,14072,14071,14073,14082 ,14075,14074,14260,14078,14262,14028,14025,14024,14272,14037,14033,14151,1050,12179,14208,58,14305,14307,14306,14309 ,14311,14310,14317,14314,14319,14318,14327,14407,14321,14323,14322,14326,14331,14330,14399,14335,14334,14338,14341 ,14342,14345,14347,14346,14350,14354,14355,14357,14359,14358,14362,14365,14367,14366,14370,14373,14374,14377,14379 ,14378,14382,14385,14386,14389,14390,14393,14394,14401,14402,14409,14411,14410,14413,14415,14414,14419,14418,14423 ,14422,14509,14425,14426,14430,14429,14434,14433,14439,14440,14443,14444,14447,14449,14452,14454,14456,14455,14459 ,14462,14464,14463,14467,14470,14471,14474,14476,14475,14479,14482,14483,14486,14487,14490,14491,14493,14498,14499 ,14501,14506,14504,14550,14520,14518,14519,14515,14700,14522,14523,14525,14532,14530,14531,14535,14538,14539,14546 ,14547,14551,14556,14555,14560,14558,14559,14563,14654,14568,14566,14567,14572,14570,14571,14575,14580,14579,14584 ,14582,14583,14587,14592,14591,14596,14595,14543,14599,14544,14527,14603,14528,14698,14611,14609,14610,14614,14702 ,14613,14615,14622,14620,14621,14625,14628,14629,14693,14641,14640,14644,14643,14647,14656,14652,14650,14651,14660 ,14658,14659,14663,14668,14667,14672,14670,14671,14675,14680,14679,14684,14683,14633,14687,14634,14617,14691,14618 ,14635,14695,14606,14605,14705,14516,14513,14607,14315,13200,2820,9376,2093,10659,10656,3815,3341,3336,9157,12505 ,5316,14750,9613,14754,14755,14756,14757,14758,14760,14761,14762,14764,14765,14766,14767,14768,14769,14770,14771,14772 ,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14861,14794,14841,14805,14833,14923 ,14932,14810,14825,14786,14788,14789,14792,14793,14797,14798,14800,14801,14802,14804,14806,14808,14809,14811,14813 ,14814,14816,14817,14818,14819,14821,14926,14930,14822,14824,14826,14828,14829,14830,14832,14834,14836,14837,14838 ,14840,14842,14845,14846,14849,14850,14852,14853,14854,14856,14857,14862,14864,14869,14870,14875,14877,14878,14880 ,14886,14888,14893,14894,14899,14900,14901,14902,14903,14904,14910,14912,14916,14917,14919,14918,14934,14939,14940 ,14945,14946,14951,14952,14957,14961,14960,14959,14958,14965,14964,14963,14969,14968,14967,14973,14972,14971,14977 ,14976,14975,14974,14981,14980,14979,14985,14984,14983,14989,14988,14987,14986,14991,14990,14995,14994,14999,14998 ,15005,15004,15002,15009,15006,15013,15012,15011,15010,15017,15015,15014,15020,15019,15018,15025,15023,15029,15028 ,15027,15026,15032,15031,15030,15036,15034,15041,15040,15039,15038,15044,15043,15042,15047,15046,15051,15057,15056 ,15055,15054,15061,15059,15058,15065,15064,15062,15067,15073,15071,15074,15078,15082,15088,15087,15092,15091,15090 ,15096,15094,15100,15104,15112,15111,15116,15121,15120,15119,15118,15124,15123,15122,15128,15127,15126,15132,15131 ,15130,15137,15136,15135,15134,15140,15139,15138,15144,15143,15142,15148,15146,15150,15154,15161,15159,15158,15165 ,15164,15162,15169,15168,15167,15166,15173,15172,15171,15177,15176,15175,15181,15179,15185,15184,15183,15182,15189 ,15188,15187,15192,15190,15197,15196,15194,15200,15198,15204,15212,15211,15210,15217,15216,15214,15221,15219,15218 ,15229,15227,15231,15235,15239,15244,15243,15249,15247,15252,15250,15254,15258,15269,15266,15277,15276,15275,15279 ,15278,15285,15284,15283,15282,15289,15288,15286,15293,15292,15290,15297,15296,15294,15300,15299,15298,15305,15304 ,15303,15302,15309,15308,15306,15313,15312,15310,15316,15314,15321,15319,15318,15324,15323,15322,15327,15326,15331 ,15330,15337,15334,15341,15339,15338,15345,15343,15342,15349,15348,15353,15352,15355,15360,15359,15358,15364,15363 ,15362,15369,15368,15373,15372,15377,15376,15381,15380,15379,15378,15383,15382,15388,15387,15386,15391,15390,15395 ,15394,15399,15404,15403,15409,15408,15413,15412,15411,15417,15416,15415,15419,15418,15423,15422,15427,15426,15432 ,15431,15430,15437,15436,15441,15440,15439,15445,15444,15449,15448,15451,15456,15455,15460,15459,15464,15462,15467 ,15472,15476,15474,15479,15484,15487,15492,15491,15490,15497,15500,15498,15502,15506,15516,15520,15519,15523,15522 ,15529,15527,15533,15537,15538,15545,15542,15548,15552,15550,15555,15560,15569,15573,15570,15575,15578,15583,15587 ,15593,15591,15594,15600,15607,15630,15635,15646,15647,15648,15649,15650,15651,15652,15654,15655,15656,15658,15659 ,15660,15662,15663,15664,15665,15666,15667,15668,15670,15671,15672,15674,15675,15676,15677,15680,15681,15684,15685 ,15688,15689,15690,15691,15693,15694,15697,15698,15699,15700,15701,15702,15704,15705,15707,15708,15709,15710,15712 ,15714,15715,15716,15717,15719,15720,15721,15723,15725,15726,15727,15728,15729,15731,15732,15733,15736,15737,15740 ,15742,15743,15744,15745,15746,15748,15749,15750,15751,15753,15756,15758,15760,15765,15769,15773,15775,15776,15779 ,15780,15781,15783,15785,15787,15791,15799,15800,15803,15806,15807,15808,15809,15811,15812,15813,15815,15816,15817 ,15819,15820,15821,15822,15823,15824,15825,15827,15828,15829,15831,15832,15833,15835,15837,15841,15845,15846,15848 ,15849,15850,15851,15853,15854,15855,15856,15857,15858,15859,15860,15862,15863,15864,15866,15868,15870,15871,15872 ,15873,15874,15875,15876,15879,15881,15882,15883,15885,15887,15889,15891,15899,15900,15901,15902,15903,15905,15906 ,15908,15909,15914,15916,15920,15924,15928,15931,15932,15934,15936,15939,15941,15945,15949,15954,15957,15962,15963 ,15964,15968,15969,15970,15971,15972,15973,15974,15975,15977,15978,15979,15981,15982,15983,15985,15987,15988,15989 ,15990,15991,15992,15993,15994,15995,15997,15998,15999,16001,16003,16005,16006,16008,16009,16011,16012,16013,16016 ,16017,16020,16021,16022,16025,16026,16028,16029,16030,16032,16033,16034,16035,16038,16039,16044,16047,16048,16049 ,16051,16052,16053,16054,16055,16058,16059,16062,16063,16066,16067,16068,16069,16072,16073,16075,16076,16077,16080 ,16081,16084,16085,16088,16091,16092,16094,16095,16098,16099,16100,16102,16103,16104,16108,16109,16112,16113,16116 ,16117,16119,16120,16121,16122,16123,16126,16127,16128,16130,16131,16134,16135,16140,16143,16144,16147,16148,16151 ,16153,16156,16159,16163,16165,16168,16171,16176,16179,16180,16181,16182,16187,16189,16193,16197,16203,16207,16208 ,16212,16213,16214,16216,16218,16222,16229,16230,16233,16235,16239,16241,16244,16247,16254,16258,16261,16264,16269 ,16272,16276,16278,16280,16285,16286,16297,16316,16323,16334,16335,16336,16337,16338,16339,16340,16342,16343,16344 ,16346,16347,16348,16350,16352,16353,16354,16357,16358,16361,16362,16363,16364,16365,16366,16367,16369,16370,16371 ,16374,16375,16378,16379,16381,16382,16383,16386,16387,16468,16406,16522,16390,16391,16393,16394,16396,16400,16401 ,16402,16407,16408,16409,16410,16411,16412,16413,16414,16415,16417,16418,16419,16421,16422,16423,16425,16426,16427 ,16429,16430,16433,16434,16437,16438,16439,16440,16441,16442,16443,16444,16446,16447,16450,16451,16454,16456,16458 ,16462,16466,16467,16469,16470,16471,16473,16474,16475,16477,16478,16479,16483,16488,16489,16490,16491,16492,16493 ,16495,16496,16497,16498,16499,16500,16503,16504,16506,16507,16511,16512,16514,16516,16519,16525,16523,16524,16526 ,16528,16533,16535,16537,16542,16543,16544,16545,16546,16547,16549,16550,16551,16553,16555,16557,16558,16559,16561 ,16562,16565,16566,16570,16571,16572,16573,16574,16575,16576,16578,16579,16583,16586,16587,16588,16590,16591,16595 ,16598,16599,16600,16601,16603,16604,16605,16607,16608,16609,16610,16611,16615,16618,16620,16621,16622,16623,16624 ,16625,16626,16627,16628,16630,16631,16632,16634,16636,16638,16640,16641,16642,16645,16649,16650,16651,16652,16653 ,16654,16655,16657,16658,16659,16662,16667,16669,16671,16678,16680,16681,16682,16684,16685,16686,16688,16689,16692 ,16693,16694,16700,16701,16702,16703,16704,16705,16706,16708,16709,16711,16712,16713,16714,16717,16720,16721,16722 ,16725,16727,16729,16730,16734,16740,16743,16745,16746,16750,16752,16758,16759,16760,16761,16762,16763,16764,16767 ,16768,16769,16771,16772,16773,16775,16776,16777,16779,16780,16783,16784,16786,16787,16788,16789,16791,16792,16794 ,16795,16796,16797,16799,16800,16801,16802,16804,16805,16806,16808,16809,16810,16812,16816,16820,16822,16823,16824 ,16825,16826,16829,16830,16831,16832,16833,16835,16836,16837,16838,16840,16841,16842,16844,16846,16847,16848,16851 ,16852,16855,16858,16859,16860,16861,16862,16865,16866,16867,16868,16869,16870,16871,16872,16875,16876,16877,16879 ,16881,16883,16885,16888,16894,16895,16896,16897,16898,16901,16903,16904,16905,16908,16909,16912,16913,16916,16917 ,16919,16920,16923,16924,16927,16928,16929,16930,16931,16935,16936,16939,16940,16943,16944,16947,16948,16950,16951 ,16952,16953,16955,16958,16959,16960,16964,16967,16968,16969,16970,16971,16975,16976,16980,16983,16984,16987,16988 ,16991,16992,16993,16996,16997,17000,17001,17004,17007,17008,17011,17012,17014,17015,17016,17017,17020,17022,17024 ,17025,17027,17030,17032,17034,17038,17042,17047,17051,17052,17054,17056,17060,17064,17068,17070,17074,17077,17078 ,17080,17085,17087,17092,17094,17096,17100,17104,17110,17114,17117,17118,17120,17122,17126,17135,17139,17140,17143 ,17145,17148,17150,17157,17177,17181,17207,17209,17224,17238,17242,17243,17246,17457,17247,17248,17249,17251,17252 ,17253,17255,17256,17257,17259,17260,17261,17263,17264,17265,17267,17268,17269,17467,17272,17273,17275,17276,17277 ,17279,17280,17281,17283,17284,17285,17287,17289,17290,17291,17294,17295,17296,17299,17300,17303,17304,17307,17308 ,17311,17312,17315,17316,17320,17323,17324,17327,17328,17331,17332,17335,17368,17338,17339,17340,17343,17344,17347 ,17348,17351,17352,17355,17356,17359,17360,17363,17400,17404,17408,17412,17365,17366,17367,17370,17371,17374,17375 ,17378,17379,17382,17383,17386,17387,17390,17391,17394,17395,17398,17399,17402,17403,17406,17407,17410,17413,17415 ,17418,17421,17424,17427,17430,17442,17434,17433,17436,17364,17449,17453,17450,17481,17454,17458,17459,17463,17464 ,17491,17468,17495,17472,17475,17477,17292,17245,17244,17482,17438,17487,17431,17271,17270,17319,17318,17828,17505 ,17767,17543,17502,17503,17504,17506,17507,17508,17510,17511,17512,17514,17515,17516,17518,17519,17520,17522,17523 ,17524,17752,17533,17803,17530,17531,17532,17534,17535,17536,17538,17539,17540,17542,17544,17553,17591,17551,17552 ,17555,17556,17559,17560,17563,17564,17567,17568,17571,17572,17581,17579,17580,17583,17584,17587,17588,17592,17549 ,17597,17635,17595,17596,17599,17600,17603,17604,17607,17608,17611,17612,17615,17616,17807,17619,17622,17667,17625 ,17671,17629,17675,17679,17636,17637,17638,17640,17641,17644,17645,17648,17649,17652,17653,17656,17657,17660,17661 ,17664,17665,17668,17669,17672,17673,17676,17677,17681,17685,17683,17686,17689,17692,17695,17698,17759,17710,17711 ,17713,17716,17719,17722,17725,17728,17731,17734,17737,17740,17618,17745,17749,17574,17526,17529,17775,17756,17763 ,17760,17500,17499,17548,17703,17702,17707,17817,17633,17813,17630,17809,17626,17623,17799,17797,17772,17528,17527 ,17577,17576,17791,17792,17787,17788,17783,17784,17821,17780,17825,17546,17498,17501,17776,17836,17837,17838,17839 ,17840,17841,17842,17844,17845,17846,17848,17849,17850,17852,17853,17854,17857,17858,17859,17860,17861,17862,17865 ,17866,17869,17870,17873,17874,17877,17878,17881,17882,17950,17946,17942,17938,17887,17915,17885,17886,17889,17890 ,17893,17894,17897,17898,17901,17902,17905,17906,17909,17910,17913,17914,17917,17921,17922,17925,17926,17929,17930 ,17933,17934,17937,17941,17945,17949,17952,17953,17954,17955,17956,17957,17958,17960,17961,17962,17965,17966,17967 ,17969,17970,17971,17973,17975,17976,17977,17978,17979,17981,17982,17983,17985,17986,17987,17988,17989,17990,17992 ,17993,17994,17996,17998,18000,18001,18002,18003,18005,18006,18007,18008,18009,18010,18012,18013,18014,18016,18017 ,18018,18020,18022,18024,18025,18026,18027,18028,18029,18030,18032,18033,18034,18036,18037,18038,18041,18042,18043 ,18044,18046,18048,18049,18050,18051,18053,18054,18055,18057,18058,18059,18060,18061,18062,18064,18065,18066,18068 ,18070,18072,18073,18074,18075,18077,18078,18079,18081,18082,18083,18084,18085,18086,18088,18089,18090,18092,18094 ,18096,18097,18098,18099,18100,18102,18103,18104,18106,18107,18108,18110,18111,18112,18113,18115,18117,18119,18120 ,18121,18122,18123,18124,18125,18126,18129,18130,18131,18133,18134,18137,18138,18141,18142,18146,18147,18150,18152 ,18154,18156,18160,18167,18171,18177,18178,18179,18181,18182,18186,18187,18190,18191,18194,18195,18198,18200,18202 ,18203,18204,18206,18209,18210,18212,18217,18218,18220,18225,18226,18231,18234,18235,18239,18242,18248,18250,18251 ,18252,18254,18257,18258,18260,18265,18266,18268,18273,18274,18279,18282,18283,18287,18290,18297,18298,18299,18300 ,18302,18305,18306,18308,18313,18314,18316,18322,18323,18327,18330,18331,18335,18338,18344,18346,18348,18352,18359 ,18363,18368,18370,18371,18372,18375,18378,18379,18382,18383,18386,18387,18391,18392,18394,18395,18397,18399,18400 ,18403,18405,18408,18411,18413,18418,18419,18422,18426,18427,18430,18435,18440,18441,18442,18445,18448,18449,18452 ,18453,18458,18461,18464,18465,18466,18467,18469,18470,18471,18473,18474,18475,18476,18477,18478,18480,18481,18482 ,18484,18486,18488,18489,18490,18491,18492,18493,18494,18496,18497,18498,18501,18502,18503,18505,18506,18507,18509 ,18511,18512,18513,18514,18515,18516,18517,18518,18521,18522,18523,18525,18526,18527,18529,18530,18531,18533,18535 ,18536,18537,18538,18539,18541,18542,18543,18545,18546,18547,18549,18550,18551,18552,18553,18554,18557,18559,18560 ,18561,18562,18563,18564,18565,18566,18568,18569,18570,18573,18574,18575,18577,18578,18579,18581,18583,18584,18586 ,18587,18589,18590,18593,18594,18598,18599,18602,18603,18607,18608,18609,18610,18611,18612,18613,18615,18616,18617 ,18619,18620,18621,18623,18624,18626,18627,18628,18630,18632,18633,18634,18635,18637,18638,18639,18640,18641,18642 ,18645,18646,18649,18650,18653,18654,18656,18657,18661,18665,18667,18671,18675,18676,18680,18688,18689,18690,18693 ,18694,18696,18697,18700,18701,18704,18705,18709,18712,18713,18715,18717,18719,18721,18722,18727,18729,18730,18735 ,18737,18738,18740,18744,18745,18748,18753,18760,18761,18763,18765,18767,18769,18770,18775,18777,18778,18783,18785 ,18786,18788,18792,18793,18796,18801,18808,18809,18810,18813,18815,18817,18818,18823,18825,18826,18831,18832,18833 ,18836,18840,18841,18844,18849,18857,18859,18863,18867,18868,18872,18880,18881,18883,18884,18887,18888,18889,18892 ,18893,18896,18897,18900,18904,18905,18907,18908,18910,18912,18915,18918,18920,18923,18926,18928,18929,18933,18936 ,18937,18941,18944,18953,18954,18955,18958,18962,18963,18966,18967,18969,18974,18976,18980,18990,18992,19000,19001 ,19002,19003,19004,19005,19006,19008,19009,19010,19012,19013,19014,19016,19017,19018,19020,19021,19022,19024,19025 ,19026,19028,19029,19030,19032,19033,19034,19036,19037,19038,19040,19041,19042,19044,19046,19049,19050,19051,19053 ,19054,19057,19058,19061,19062,19065,19066,19069,19070,19073,19074,19077,19078,19081,19082,19085,19086,19089,19090 ,19094,19097,19098,19099,19101,19102,19105,19106,19109,19110,19113,19114,19117,19118,19121,19122,19125,19126,19129 ,19130,19133,19134,19137,19138,19142,19144,19146,19147,19150,19153,19156,19159,19162,19165,19168,19171,19174,19181 ,19182,19184,19187,19190,19193,19196,19199,19202,19205,19208,19211,19216,19217,19218,19219,19220,19221,19222,19224 ,19225,19226,19228,19229,19230,19232,19233,19234,19236,19237,19238,19240,19241,19242,19244,19245,19246,19248,19249 ,19250,19252,19253,19254,19256,19257,19258,19260,19262,19265,19266,19267,19269,19270,19273,19274,19277,19278,19281 ,19282,19285,19286,19289,19290,19293,19294,19297,19298,19301,19302,19305,19306,19310,19313,19314,19315,19317,19318 ,19321,19322,19325,19326,19329,19330,19333,19334,19337,19338,19341,19342,19345,19346,19349,19350,19353,19354,19358 ,19360,19362,19363,19366,19369,19372,19375,19378,19381,19384,19387,19390,19397,19398,19400,19403,19406,19409,19412 ,19415,19418,19421,19424,19427,19432,19433,19434,19435,19436,19437,19438,19440,19441,19442,19443,19444,19445,19446 ,19449,19450,19452,19453,19454,19455,19456,19457,19458,19460,19465,19469,19470,19471,19473,19476,19477,19478,19479 ,19480,19481,19482,19484,19486,19489,19492,19493,19495,19496,19497,19498,19500,19502,19509,19510,19511,19513,19516 ,19517,19518,19521,19522,19524,19525,19529,19530,19533,19534,19536,19537,19538,19539,19540,19541,19543,19544,19545 ,19546,19548,19549,19551,19552,19553,19554,19556,19557,19558,19560,19561,19562,19563,19565,19566,19568,19569,19570 ,19574,19576,19577,19578,19582,19585,19586,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19601 ,19602,19604,19605,19607,19608,19609,19610,19611,19614,19616,19619,19620,19621,19626,19627,19628,19629,19632,19633 ,19634,19636,19639,19640,19641,19644,19645,19647,19648,19650,19652,19653,19654,19658,19660,19661,19663,19664,19666 ,19668,19676,19677,19679,19680,19682,19684,19692,19700,19702,19703,19704,19708,19709,19710,19711,19712,19713,19714 ,19716,19717,19718,19720,19721,19722,19725,19726,19728,19729,19730,19733,19734,19737,19738,19741,19742,19743,19744 ,19745,19749,19751,19752,19753,19754,19757,19761,19764,19765,19766,19767,19768,19769,19770,19771,19772,19774,19776 ,19777,19779,19780,19781,19782,19784,19785,19787,19788,19789,19790,19792,19793,19794,19796,19798,19800,19802,19806 ,19807,19810,19811,19812,19813,19814,19816,19817,19819,19821,19823,19824,19827,19828,19829,19832,19834,19840,19842 ,19850,19852,19853,19855,19859,19860,19863,19867,19871,19874,19877,19879,19882,19884,19892,19894,19895,19917,19922 ,19937,19946,19943,19954,19955,19956,19957,19958,19959,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970 ,19971,19972,19974,19975,19976,19978,19979,19980,19982,19985,19986,19987,19988,19990,19991,19992,19994,19997,19998 ,19999,20000,20002,20003,20004,20006,20007,20009,20011,20013,20014,20015,20016,20018,20021,20022,20024,20025,20026 ,20027,20030,20031,20032,20033,20034,20035,20038,20039,20040,20041,20042,20043,20045,20046,20047,20049,20050,20051 ,20052,20053,20054,20055,20058,20059,20060,20062,20065,20066,20070,20072,20074,20076,20080,20083,20086,20088,20090 ,20122,20123,20121,20120,20127,20126,20125,20124,20130,20129,20128,20131,20134,20133,20132,20138,20137,20136,20140 ,20143,20142,20145,20144,20147,20146,20150,20148,20153,20154,20152,20159,20157,20161,20163,20167,20166,20165,20169 ,20168,20170,20172,20175,20173,20176,20179,20177,20180,20183,20182,20181,20184,20187,20185,20188,20191,20189,20192 ,20195,20193,20196,20199,20197,20201,20202,20205,20208,20206,20211,20212,20215,20214,20213,20218,20221,20222,20227 ,20226,20231,20232,20236,20235,20239,20245,20244,20246,20248,20247,20251,20252,20257,20256,20259,20262,20263,20265 ,20266,20268,20271,20269,20278,20282,20284,20288,20291,20292,20295,20303,20309,20313,20317,20321,20325,20484,20480 ,20476,20472,20333,20337,20341,20345,20349,20354,20361,20297,20305,20311,20315,20319,20323,20327,20396,20400,20404 ,20410,20335,20339,20343,20347,20351,20356,20363,20298,20296,20304,20310,20314,20318,20322,20326,20336,20334,20338 ,20342,20350,20364,20438,20366,20375,20373,20377,20381,20385,20389,20393,20397,20401,20405,20412,20414,20418,20422 ,20426,20430,20440,20444,20442,20452,20450,20454,20458,20462,20466,20470,20473,20477,20481,20485,20489,20490,20493 ,20497,20501,20505,20509,20513,20439,20614,20431,20427,20423,20419,20415,20408,20406,20402,20398,20394,20390,20386 ,20382,20378,20374,20581,20585,20520,20522,20521,20524,20525,20528,20330,20532,20331,20536,20332,20540,20541,20544 ,20545,20548,20549,20552,20553,20557,20559,20563,20300,20299,20301,20306,20308,20572,20307,20371,20582,20579,20367 ,20574,20512,20516,20571,20368,20597,20602,20357,20600,20358,20606,20359,20360,20608,20613,20433,20611,20434,20615 ,20435,20436,20598,20631,20445,20623,20446,20627,20447,20448,20635,20596,20607,20641,20355,20346,20329,20648,20656 ,20660,20664,20814,20672,20676,20680,20824,20685,20692,20902,20758,20650,20658,20662,20666,20816,20674,20678,20682 ,20740,20687,20747,20898,20980,20651,20649,20659,20657,20661,20665,20669,20673,20683,20681,20686,20695,20693,20706 ,20704,20714,20712,20716,20720,20726,20728,20735,20737,20839,20750,20748,20757,20756,20767,20760,20764,20766,20842 ,20942,20778,20841,20776,20777,20786,20781,20784,20785,20794,20790,20792,20793,20796,20797,20800,20801,20810,21020 ,20809,20813,20670,20668,20671,20684,20773,20741,20724,20830,20774,20821,20772,20789,20779,20846,20780,20844,20850 ,20845,20734,20852,20733,20677,20861,20863,20862,20865,20866,20869,20870,20874,20877,20879,20856,20881,20857,20885 ,20858,20859,20753,20967,20895,20812,20909,20752,20751,20988,20897,20906,20911,20918,20688,20916,20689,20922,20690 ,20691,20924,20929,20743,20927,20744,20931,20745,20746,20912,20947,20768,20939,20769,20943,20770,20771,20910,20923 ,20953,20951,20965,20761,20755,20970,20968,20696,20974,20697,20972,20698,20699,20702,20754,20759,20998,20990,20652 ,20994,20653,21000,20654,20655,21002,21007,20707,21005,20708,21009,20709,20710,21019,20992,20803,21017,20804,21021 ,20805,20806,20991,21030,21036,21001,21044,21052,20892,20903,21046,21049,20893,21042,20894,21076,21051,21055,21047 ,21056,21048,21059,21058,21071,21069,21070,21073,21074,21077,21078,21081,21082,21085,21086,21089,21090,21095,21092 ,21098,21103,21101,21102,21105,21106,21109,21110,21113,21114,21117,21118,21121,21122,21125,21126,21130,21135,21133 ,21060,21137,21061,21141,21062,21145,21063,21149,21064,21153,21065,21157,21066,21067,20976,21168,21176,21173,20915 ,21177,21186,20904,20914,20694,21094,20701,20765,20985,21197,20700,21213,21289,21299,21304,21311,21314,21355,21359 ,21410,21422,21486,21625,21704,21721,21913,21917,21205,21204,21203,21202,21209,21208,21207,21206,21212,21211,21210 ,21217,21216,21215,21214,22717,21221,21220,21219,21218,21225,21224,21223,21228,21227,21226,21233,21232,21231,21230 ,21237,21236,21234,21241,21240,21239,21238,21244,21243,21242,21249,21248,21246,21253,21252,21251,21258,21274,21256 ,21255,21254,21261,21260,21259,21265,21264,21263,21262,21699,21266,21273,21272,21271,21270,21281,21280,21279,21278 ,21285,21284,21283,21288,21287,21286,21293,21291,21290,21296,21295,21294,21301,21300,21298,21305,21303,21302,21309 ,21308,21307,21313,21312,21317,21316,21315,21329,23016,21318,23027,21322,21333,21332,21331,21330,21336,21335,21340 ,21345,21344,21349,21348,21347,21352,21350,21357,21356,21361,21365,21364,21367,21366,21372,21371,21370,21376,21375 ,21374,21401,21400,21381,21380,21379,21378,21385,21383,21382,21511,21476,21389,21388,21387,21386,21391,21397,21396 ,21394,21405,21404,21402,23035,23031,21407,21406,21412,21411,21417,21416,21415,21414,21421,21420,21419,21424,21423 ,21428,21432,21430,21437,21436,21435,21434,23030,23041,21439,21445,21444,21449,21448,21446,21452,21533,21457,21456 ,21455,21454,21458,21465,21462,21469,21468,21466,21477,21474,21484,21489,21488,21491,21490,21497,21496,21495,21494 ,21572,21500,21505,21502,21507,21506,21513,21512,21510,21517,21516,21520,21519,21525,21528,21695,21532,21530,21537 ,21545,21544,21543,21542,21548,21546,21553,21550,21557,21555,21554,21560,21559,21563,21568,21590,23058,21575,21574 ,21573,21580,21579,21578,21577,23053,21581,21588,21586,21596,21594,21593,21599,21598,21604,21602,22645,21607,21609 ,21616,21614,21613,21620,21618,21621,21627,21626,21636,21635,21633,21640,21638,21642,21648,23037,21656,21655,21654 ,21653,21660,21659,21663,22714,21669,21680,21678,21677,21682,21681,21688,22731,23014,21692,21696,21703,21701,21711 ,21710,21716,21715,21714,21713,21720,21719,21717,21724,21723,21728,21727,21732,21731,21730,21735,21740,21739,21744 ,21743,21742,21741,21748,21747,21746,21745,21752,21751,21750,21749,21756,21755,21754,21753,21760,21759,21758,21764 ,21763,21762,21761,21768,21767,21766,21765,21772,21771,21769,21775,21774,21773,21780,21778,21784,21782,21781,21788 ,21787,21792,21791,21789,21795,21793,21800,21799,21798,21797,21804,21802,21806,21812,21811,21809,21816,21815,21813 ,21820,21819,21817,21824,21823,21828,21827,21825,21832,21831,21829,21833,21840,21839,21837,21842,21846,21850,21854 ,21853,21860,21857,21862,21872,21875,21874,21879,21884,21881,21892,21891,21894,21893,21897,21901,21906,21911,22624 ,21924,21923,21922,21921,21926,21925,21932,21931,21930,21929,21936,21935,21934,21940,21939,21937,21944,21942,21941 ,21948,21947,21946,21951,21950,21949,21956,21955,21953,21960,21959,21958,21957,21964,21963,21962,21961,21968,21967 ,21965,21972,21971,21970,21975,21974,21973,21979,21978,21977,21983,21981,21987,21985,21991,21990,21993,21999,21997 ,22004,22003,22002,22008,22007,22006,22012,22011,22016,22015,22014,22013,22019,22018,22023,22022,22021,22028,22027 ,22026,22032,22031,22030,22029,22035,22034,22040,22039,22038,22037,22044,22043,22042,22041,22048,22047,22046,22045 ,22152,22997,22056,22055,22053,22060,22059,22058,22057,22064,22063,22061,22068,22067,22066,22065,22072,22071,22070 ,22069,22076,22073,22079,22078,22077,22084,22083,22082,22081,22088,22087,22086,22085,22092,22090,22089,22096,22095 ,22094,22093,22100,22098,22097,22103,22102,22112,22109,22116,22113,22118,22123,22122,22121,22127,22126,22125,22124 ,22131,22130,22129,22128,22135,22134,22143,22141,22147,22146,22145,22144,23004,22150,22156,22155,22153,22163,22161 ,22166,22165,22164,22171,22170,22169,22168,22175,22174,22172,22179,22178,22177,22176,22183,22181,22180,22187,22186 ,22185,22191,22189,22188,22195,22194,22193,22197,22203,22202,22201,22200,22207,22206,22205,22204,22210,22209,22208 ,22215,22219,22218,22217,22216,22223,22221,22220,22226,22225,22224,22230,22229,22228,22235,22232,22239,22236,23007 ,22245,22250,22249,22248,22255,22253,22050,22259,22256,22262,22261,22264,22269,22268,22275,22273,22279,22277,22276 ,22282,22281,22287,22286,22285,22284,22291,22290,22289,22293,22292,22299,22297,22302,22300,22306,22304,22311,22313 ,22318,22317,22323,22322,22321,22326,22325,22329,22335,22334,22332,22339,22338,22337,22343,22342,22346,22345,22344 ,22350,22355,22352,22359,22356,22363,22361,22367,22366,22365,22371,22369,22368,22374,22373,22379,22378,22377,22376 ,22383,22382,22381,22385,22390,22389,22388,22395,22393,22392,22398,22396,22402,22406,22404,22412,22415,22414,22419 ,22877,22422,22421,22424,22430,22428,22433,22432,22439,22438,22436,22443,22442,22441,22447,22445,22444,22453,22452 ,22451,22455,22462,22460,22466,22463,22470,22468,22467,22474,22473,22471,22475,22479,22908,22486,22484,22490,22494 ,22492,22491,22498,22497,22502,22499,22510,22514,22522,22520,22525,22524,22530,22529,22527,22532,22538,22541,22540 ,22546,22545,22552,22558,22559,22566,22570,22574,22408,22049,22582,22589,22593,22596,22606,22604,22608,22614,22613 ,22619,22616,22623,22688,22626,22630,22651,22661,22673,22675,22694,22708,22709,22729,22732,22759,22765,22763,22775 ,22782,22796,22803,22809,22817,22829,22827,22835,22833,22837,22836,22839,22843,22842,22847,22850,22853,22863,22872 ,22876,22879,22890,22893,22896,22901,22920,22926,22930,22942,22951,22950,22985,22638,21257,21276,21267,21268,21338 ,22720,21306,21339,21691,21702,21706,22990,22989,22994,22411,22051,22052,22151,22148,22246,22247,22543,21480,21686 ,21320,21481,23020,21321,22713,21666,21675,21408,21667,22711,21409,21672,21652,22704,21440,21649,21324,21441,21325 ,22625,23048,21582,23054,21569,21583,21571,21570,23012,23049,25519,23110,23063,23064,23065,23066,23067,23068,23069 ,23070,23072,23073,23074,25463,23794,23083,23084,23085,23086,23087,23088,23089,23090,23093,23094,23095,23096,23097 ,23098,23099,23100,23101,23103,23104,23105,23106,23107,23111,23112,23113,23115,23116,23117,23118,23120,23121,23125 ,23126,23127,23128,23129,23130,23132,23133,23134,23135,23583,23139,23140,23141,23142,23143,23148,23149,23150,23151 ,23152,23153,23154,23157,23158,23159,23160,23162,23163,23165,23166,23167,23169,23170,23172,23174,23175,23176,23177 ,23178,23180,23181,23184,23185,23186,23188,23189,23191,23192,23193,23195,23200,23201,23202,23203,23205,23206,23209 ,23212,23213,23216,23217,23218,23221,23223,23224,23225,23228,23232,23233,23239,23241,23242,23243,23245,23246,23247 ,23123,23249,23252,23253,23254,23255,23256,23258,23259,23261,23260,23264,23265,23266,23262,23270,23272,23263,23250 ,23276,23277,23279,23280,23281,23282,23283,23285,23286,23288,23289,23290,23291,23292,23293,23294,23297,23298,23301 ,23305,23307,23308,23309,23310,23311,23312,23313,23314,23316,23317,23320,23321,23323,23325,23329,23330,23332,23333 ,23334,23335,23339,23122,23343,23344,23345,23347,23352,23355,23357,23361,23364,23365,23370,23372,23373,23374,23375 ,23380,23383,23386,23389,23390,23391,23392,23394,23395,23396,23400,23401,23403,23408,23579,23412,23414,23415,23423 ,23424,23425,23426,23428,23430,23431,23434,23435,23437,23438,23440,23441,23444,23445,23446,23447,23472,26338,23456 ,23457,23458,23459,23460,23461,23462,26340,23466,23468,23474,23476,23477,23479,23480,23482,23484,23486,23487,23491 ,23497,23498,23500,23501,23502,23504,23509,23511,23512,23518,23519,23521,23522,23524,23528,23530,23534,23538,23539 ,23540,23541,23542,23543,23547,23552,23554,23557,23559,23562,23564,23565,23568,23569,23570,23572,23573,23574,23578 ,23587,23589,23595,23596,23602,23603,23604,23605,23606,23607,23609,26341,23614,23615,23618,23619,23601,23623,23624 ,23627,23630,23631,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649 ,23650,23651,23652,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23665,23667,23668,23669,23670,23672 ,23674,23676,23677,23678,23679,23682,23683,23685,23687,23689,23690,23691,23692,23693,23694,23696,23700,23702,23703 ,23705,23706,23707,23709,23710,23711,23713,23714,23715,23718,23719,23721,23722,23723,23725,23729,23730,23731,23733 ,23736,23740,23744,23748,23600,23750,23753,23756,23762,23767,23768,23771,23774,23777,23782,23783,23788,23789,23793 ,23797,23800,23803,25439,23814,23815,23816,23817,23820,23821,23822,23823,23824,23825,23826,23827,23828,23830,23831 ,23833,23834,23836,23837,23838,23839,23840,23843,23844,23845,23846,23847,23849,23850,23851,23852,23853,23854,23855 ,23856,23857,23858,23859,23861,23862,23863,23864,23867,23868,23869,23871,23872,23873,23875,23877,23879,23881,23883 ,23884,23889,23891,23893,23894,23895,23896,23898,23899,23900,23902,23903,23906,23907,23908,23909,23911,23912,23915 ,23916,23917,23918,23919,23920,23922,23923,23924,23925,23927,23928,23930,23931,23932,23933,23934,23935,23936,23937 ,23938,23939,23940,23941,24149,26321,23946,23947,23949,23950,23951,23952,23953,23954,23955,23957,23958,23959,23960 ,23961,23962,23963,23964,23965,23966,23969,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982 ,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,24001,24002,24003,24004,24005 ,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24025 ,24026,24028,24029,24030,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24045,24046,24047 ,24049,24050,24051,24052,24053,24054,24055,24057,24059,24060,24061,24062,24063,24064,24065,24066,24067,24069,24070 ,24071,24072,24073,24074,24076,24077,24078,24079,24080,24082,24083,24084,24086,24087,24088,24089,24090,24091,24092 ,24095,24096,24097,24099,24100,24101,24102,24104,24105,24106,24109,24110,24111,24112,24113,24114,24115,24116,24117 ,24118,24119,24122,24123,24129,24131,24132,24133,24134,24136,24138,24139,24140,24141,26322,24143,24153,24146,24148 ,24154,24155,24156,24158,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24173,24174,24175,24176,24177 ,24178,24180,24181,24182,24183,24184,24186,24188,24189,24190,24191,24192,24193,24195,24196,24198,24199,24200,24201 ,24202,24203,24204,24205,24207,24208,24209,24210,24214,24215,24216,24217,24218,24220,24221,24223,24224,24225,24227 ,24228,24229,24230,24231,24232,24233,24234,24235,24237,24239,24240,24241,24243,24244,24245,24246,24247,24249,24250 ,24253,26327,24260,24263,24264,24265,24266,24268,23944,24270,24273,24275,24276,24281,24284,24285,24286,24288,24290 ,24292,24293,24295,24296,24298,24299,24300,24301,24302,24303,24304,24308,24309,24310,24312,24315,24317,24319,24321 ,24322,24328,24331,24332,24334,24335,24336,24339,24340,24344,24346,24347,24349,24350,24351,24352,24354,24355,24359 ,24360,24361,24363,24366,24369,24370,24373,24374,24376,24378,24379,24380,24382,24384,24385,24387,24388,24390,24391 ,24392,24393,24394,24395,24396,24400,24403,24404,24405,24406,24408,24409,24411,24413,24415,24419,24421,24429,24426 ,24427,24430,24435,24437,24438,24441,24443,24444,24445,24448,24449,24451,24457,24458,24459,24460,24461,24462,24465 ,24467,24468,24470,24471,24472,24475,24477,24478,24481,24483,24487,24491,24492,24493,24494,24496,24497,24501,24504 ,24505,24507,24508,24509,24510,24511,24512,24514,24515,24516,24517,24518,24520,24521,24522,24523,24524,24525,24526 ,24527,24528,24529,24532,24533,24534,24536,24537,24538,24539,24540,24541,24543,24544,24546,24547,24548,24549,24551 ,24552,24553,24554,24555,24556,24557,24558,24559,24561,24563,24564,24565,24566,24568,24569,24570,24571,24572,24573 ,24574,24576,24577,24578,24579,24581,24582,24583,24584,24585,24586,24587,24588,24590,24591,24592,24593,24594,24596 ,24597,24598,24599,24600,24601,24603,24604,24605,24607,24608,24609,24610,24611,24612,24614,24615,24616,24617,24618 ,24619,24620,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24634,24635,24636,24637,24638,24639,24640 ,24641,24643,24644,24645,24646,24647,24649,24650,24651,24652,24654,24655,24656,24657,24658,24660,24661,24662,24663 ,24664,24665,24667,24668,24669,24670,24671,24672,24674,24675,24676,24677,24679,24680,24682,24683,24684,24685,24686 ,24687,24688,24689,24691,24692,24693,24694,24695,24697,24698,24700,24701,24702,24703,24704,24707,24708,24709,24710 ,24711,24712,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24726,24727,24728,24729,24730,24732 ,24733,24734,24735,24736,24737,24738,24739,24740,24742,24743,24745,24747,24748,24750,24751,24753,24754,24755,24758 ,24759,24760,24761,24763,24764,24765,24766,24767,24769,24771,24772,24774,24775,24777,24780,24781,24782,24783,24785 ,24786,24787,24790,24792,24793,24794,24795,24798,24799,24800,24801,24802,24803,24804,24805,24806,24808,24811,24813 ,24819,24821,24822,24825,24826,24827,24828,24831,24833,24839,24841,24845,24846,24848,24849,24851,24854,24856,24857 ,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24871,24872,24873,24874,24875,24876,24877,24878 ,24879,24880,24881,24882,24883,24884,24885,24887,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901 ,24902,24906,24907,24908,24911,24914,24915,24917,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24933 ,24934,24935,24936,24937,24941,24942,24943,24945,24947,24948,24949,24950,24952,24956,24958,24959,24960,24961,24962 ,24964,24966,24967,24969,24972,24973,24974,24977,24979,24980,24983,24989,24991,24993,24996,24997,24998,24999,25001 ,25002,25003,25004,25006,25008,25009,25010,25013,25019,25020,25023,25025,25031,25033,25034,25038,25041,25043,25044 ,25045,25046,25047,25049,25050,25052,25054,25057,25058,25062,25064,25065,25066,25067,25069,25070,25071,25073,25074 ,25075,25077,25080,25082,25083,25084,25085,25086,25087,25089,25090,25092,25093,25094,25095,25097,25098,25104,25105 ,25107,25111,25112,25114,25115,25118,25119,25122,25125,25129,25130,25131,25132,25136,25137,25138,25140,25142,25144 ,25145,25146,25150,25157,25158,25159,25162,25163,25166,25168,25171,25173,25177,25180,25183,25184,25186,25188,25190 ,25194,25196,25197,25198,25199,25202,25205,25210,25214,25224,25225,25228,25229,25230,25231,25235,25240,25242,25244 ,25247,25248,25251,25252,25254,25255,25257,25260,25262,25267,25268,25272,25273,25274,25275,25284,25286,25293,25294 ,25298,25302,24425,23945,25310,25315,25317,25319,25321,25322,25324,25327,25329,25330,25332,25333,25335,25336,25337 ,25338,25339,25340,25352,25356,25358,25360,25362,25365,25369,25370,25372,25373,25374,25375,25377,25381,25384,25387 ,25388,25391,25394,25400,25401,25404,25408,25413,25419,25421,25425,25427,25428,25430,25433,25434,25522,25438,25464 ,25468,25472,25492,25499,25503,25541,25547,25549,25561,25566,25568,25589,25595,25599,25617,25619,25626,25628,25630 ,25631,25634,25636,25637,25641,25644,25647,25661,25670,25671,25676,25683,25686,25689,25697,25700,25701,25703,25711 ,25712,25716,25725,25726,25728,25731,25736,25742,25752,25753,25755,25756,25757,25758,25761,25763,25766,25767,25769 ,25772,25773,25774,25776,25785,25788,25789,25791,25794,25799,25815,25816,25817,25818,25819,25821,25823,25825,25827 ,25829,25832,25833,25835,25837,25842,25851,25854,25855,25857,25860,25865,25881,25882,25884,25885,25886,25890,25891 ,25893,25894,25896,25899,25908,25911,25912,25914,25917,25922,25940,25944,25950,25951,25952,25953,25957,25961,25962 ,25964,25968,25974,25981,25982,25989,25991,25993,25995,25997,25998,25999,26003,26004,26005,26007,26012,26015,26016 ,26020,26022,26026,26027,26028,26039,26054,26056,26058,26063,26065,26067,26071,26075,26076,26079,26081,26090,26093 ,26094,26109,26110,26113,26141,26162,26172,26175,26181,26189,26201,26207,26209,26224,26230,26239,26240,26276,26296 ,26304,25448,23124,23145,23138,23137,23211,23168,25511,23179,23210,23575,23588,23592,26312,26313,26316,24422,23943 ,23942,24142,24145,24259,24258,25277,25508,23464,26334,23465,23613,26342,26346,23610,26350,23080,23076,22477,22457 ,22537,22198,22138,22119,22114,22110,22108,22104,21685,22632,22629,25518,23109,23371,23079,23082,23075,23612,26336 ,25442,23078,23077,22192,26363,26430,26365,26646,26482,26715,27616,26766,26946,26801,26905,27012,26748,26368,26902 ,26903,26378,26382,26383,26387,27921,26403,27051,26414,26418,26415,27929,26384,26419,26420,26421,26669,26425,26764 ,26907,26893,26369,26379,26798,26439,26441,26400,26364,26446,26449,26402,26401,26453,26454,26460,26463,26651,26508 ,26468,26568,26471,26521,26926,26476,26473,26486,26507,26489,26856,26878,26859,26512,26522,26923,26809,27035,26528 ,26530,26531,26532,26534,26535,26517,26541,26549,26361,26560,26561,26596,26491,27019,26731,26752,26957,26575,26774 ,26582,26679,26915,26595,26693,26829,26821,26837,26825,26816,26838,26877,26612,26511,26537,26613,26614,26617,26510 ,26621,26527,26574,26972,26626,26627,26629,26631,26632,26633,26634,26635,26671,26638,26639,26643,26598,26599,26759 ,26601,26648,26656,26654,26657,26664,26665,27053,26674,26571,26735,26594,26689,26698,26706,26707,26690,26691,26717 ,26597,26721,26722,26726,26727,26730,26734,26699,26701,26705,26484,26745,26917,26687,26738,26590,27905,26938,26960 ,26467,26753,26817,26822,26826,26830,26564,26550,26776,27026,26780,26495,26797,26685,27002,26773,26808,26526,26813 ,26786,26871,26849,26794,26504,26505,26602,26609,26543,26542,27792,26547,26503,26795,26792,26577,26783,26576,26785 ,26611,26847,26853,26854,26553,26499,26498,26502,26501,26546,26545,26848,26552,26866,26497,26496,26556,26886,26637 ,26640,26440,26429,26375,27754,26392,26438,26393,26394,26431,26897,26391,26999,26900,26428,26427,26796,26480,26918 ,26592,26920,26523,26475,26931,26751,26466,26932,26933,26740,26942,26744,26789,26961,26965,26967,26728,26970,26708 ,26625,26628,26659,26790,26513,26986,26514,26469,26472,27857,26603,26485,26470,26739,26702,26529,26372,26371,26951 ,26950,26954,26754,26586,27043,27011,26416,26757,26788,26686,27016,26585,26551,26360,26559,26914,26479,26494,26925 ,26474,26607,27018,26506,27022,26911,26533,26615,26579,27023,26581,26580,26852,27001,26525,26524,27041,26397,26411 ,26413,26412,26423,26572,26710,26422,26448,26770,27356,27390,27351,27417,27072,27084,27770,27766,27552,27062,27061 ,27060,27711,27555,27941,27431,27064,27065,27063,27409,27415,27066,27094,27088,27070,27089,27303,27091,27096,27188 ,27105,27451,27101,27504,27495,27116,27444,27508,27642,27493,27878,27299,27844,27602,27115,27256,27337,27350,27368 ,27355,27104,27103,27111,27148,27131,27467,27527,27180,27302,27346,27360,27357,27147,27129,27717,27563,27259,27128 ,27134,27133,27132,27140,27301,27297,27142,27438,27437,27442,27246,27365,27331,27344,27126,27678,27832,27287,27305 ,27741,27151,27157,27311,27155,27342,27470,27160,27159,27165,27163,27162,27169,27168,27167,27205,27172,27171,27175 ,27174,27179,27181,27183,27187,27472,27194,27195,27202,27229,27559,27523,27569,27220,27227,27234,27525,27242,27238 ,27223,27725,27211,27215,27222,27219,27460,27226,27225,27228,27230,27232,27465,27617,27475,27243,27494,27520,27455 ,27457,27251,27657,27583,27289,27264,27268,27488,27327,27325,27329,27130,27591,27304,27369,27284,27282,27343,27296 ,27386,27122,27106,27716,27076,27680,27136,27137,27278,27279,27310,27309,27315,27553,27318,27689,27787,27320,27492 ,27114,27489,27112,27113,27599,27594,27330,27750,27107,27339,27281,27312,27286,27352,27364,27110,27336,27108,27109 ,27751,27359,27735,27338,27292,27173,27170,27385,27391,27389,27393,27271,27399,27402,27395,27078,27379,27378,27405 ,27380,27407,27435,27383,27384,27411,27545,27387,27143,27144,27441,27149,27512,27254,27646,27446,27253,27100,27102 ,27099,27516,27245,27517,27453,27244,27260,27261,27120,27461,27459,27224,27464,27236,27161,27158,27192,27118,27480 ,27117,27500,27487,27501,27505,27509,27513,27521,27533,27541,27080,27075,27085,27290,27940,27781,27774,27548,27946 ,27069,27561,27565,27571,27575,27654,27584,27590,27627,27598,27606,27214,27218,27581,27609,27146,27248,27250,27622 ,27626,27458,27638,27650,27661,27662,27485,27585,27659,27483,27316,27671,27673,27682,27686,27688,27077,27700,27703 ,27709,27721,27059,27068,27534,27734,27124,27447,27125,27740,27154,27732,27127,26362,26376,26895,26436,26399,26451 ,26450,27177,26642,26641,26694,26913,26478,26477,26993,26992,26493,26492,26749,26714,26434,26433,26769,26747,26481 ,26883,26868,26565,40223,26833,26814,26845,26616,26624,26619,26841,26509,26676,26782,26876,26573,26812,26875,26793 ,26842,26555,27361,27586,40230,27332,27596,27326,27333,27285,27738,27317,27322,27319,27321,27362,27890,27744,26681 ,26589,26678,26587,26588,26390,27040,26388,26389,26404,26405,26374,26373,27758,26891,27423,26435,27419,27422,27082 ,27376,27767,27079,27771,27083,27775,27698,27778,27141,27263,27262,27348,26548,27593,26682,27558,27808,26562,26539 ,26538,27815,26806,26570,27805,26367,27392,27034,26955,27156,27696,26566,27298,27257,27618,27851,27855,27017,27839 ,26567,27864,27867,26465,27810,27496,27846,27879,27497,27886,27669,27484,27897,26490,27895,26519,27894,26488,26487 ,27860,26695,27909,26758,27913,27010,27917,27049,26395,26398,27925,26410,26386,26385,26444,27208,27291,27210,27209 ,27549,27705,27275,27546,27073,27276,29107,28255,29081,27956,29146,28860,29084,29069,28411,28298,28484,28581,28303 ,28578,29039,27955,27954,27953,27960,27959,27958,27964,27963,27962,27961,27968,27966,27965,27972,27971,27970,27969 ,27976,27975,27974,27973,27978,27977,27984,27982,27981,27988,27987,27986,27985,27991,27990,27996,27995,27994,27993 ,27999,27998,27997,28004,28003,28002,28001,28008,28007,28005,28011,28010,28009,28016,28014,28013,28020,28019,28018 ,28017,28024,28022,28021,28028,28027,28025,28032,28031,28030,28029,28036,28035,28034,28040,28039,28038,28037,28044 ,28042,28041,28048,28047,28046,28045,28051,28050,28049,28055,28054,28053,28060,28059,28058,28064,28063,28062,28061 ,28068,28067,28066,28071,28070,28069,28076,28075,28074,28073,28080,28079,28078,28084,28083,28082,28081,28088,28087 ,28086,28085,28091,28090,28089,28096,28095,28093,28100,28099,28098,28104,28103,28102,28101,28108,28106,28105,28112 ,28111,28110,28109,28115,28114,28113,28120,28119,28118,28124,28123,28122,28121,28127,28126,28132,28131,28130,28129 ,28136,28135,28134,28133,28139,28138,28137,28144,28143,28141,28148,28146,28145,28152,28151,28150,28155,28154,28153 ,28160,28159,28158,28164,28163,28162,28161,28168,28167,28166,28165,28172,28171,28170,28176,28175,28174,28173,28180 ,28178,28177,28184,28183,28182,28181,28188,28187,28186,28192,28191,28189,28195,28194,28200,28199,28197,28204,28203 ,28208,28207,28206,28205,28211,28210,28209,28216,28215,28213,28219,28218,28224,28223,28221,28226,28225,28232,28231 ,28229,28236,28235,28240,28238,28237,28244,28243,28248,28247,28246,28245,28252,28251,28250,28249,28256,28254,28259 ,28257,28267,28265,28272,28269,28276,28275,28274,28279,28277,28287,28285,28289,28296,28294,28293,28299,28304,28302 ,28301,28307,28306,28305,28312,28311,28310,28309,28316,28315,28314,28313,28319,28318,28317,28324,28323,28322,28321 ,28328,28327,28326,28325,28332,28331,28330,28329,28335,28340,28339,28338,28337,28344,28342,28341,28348,28347,28346 ,28345,28352,28356,28355,28354,28359,28364,28363,28361,28366,28365,28372,28371,28370,28369,28376,28375,28374,28373 ,28377,28384,28383,28382,28381,28385,28392,28391,28389,28395,28394,28393,28400,28398,28402,28408,28407,28406,28405 ,28412,28410,28416,28415,28413,28419,29067,28420,28417,28423,28422,28427,28878,28991,28432,28431,28429,28434,28440 ,28439,28438,28437,28444,28443,28441,28448,28446,28445,28452,28451,28449,28456,28458,28457,28463,28467,28466,28472 ,28471,28476,28475,28480,28477,28481,28488,28487,28486,28490,28489,28496,28494,28499,28500,28498,28503,28501,28506 ,28511,28510,29092,28513,28515,28514,29050,28518,28516,28522,28520,28527,28525,28530,28528,28535,28533,28532,28538 ,28537,28536,28543,28542,28541,28553,28557,28561,28563,28560,28564,28571,28569,28568,28575,28574,28572,28576,28582 ,28587,28586,28594,28603,28602,28606,28609,28610,28616,28630,28629,28633,28632,28631,28636,28639,28637,28640,28645 ,28643,28646,28651,28650,28654,28663,28666,28665,28669,28672,28673,28693,28692,28691,28696,28695,28699,28697,28701 ,28705,28703,28706,28711,28709,28713,28720,28729,28732,28731,28735,28738,28739,28759,28758,28762,28761,28760,28768 ,28767,28771,28770,28774,28777,28786,28789,28788,28792,28795,28796,28814,28822,28828,28827,28826,28831,28833,28835 ,28840,28838,28846,28852,28857,28856,28867,28865,28869,28873,28871,28876,28875,28877,28882,28881,28885,28886,28889 ,28894,28896,28900,28902,28901,28906,28913,28928,28932,28936,28937,28941,28945,28947,28949,28954,28957,28955,28964 ,28967,28972,28986,29003,29017,29020,29026,29030,29043,29061,29073,29086,29088,29096,29109,29117,29116,29119,29124 ,29125,29128,29115,29078,29072,29079,29103,29153,29105,29036,29147,27557,27206,21562,22644,29175,22689,23376,23463 ,26652,29194,29196,29200,29201,29204,29205,29206,29207,29193,29191,29192,29197,29198,29202,29208,29209,30767,29236 ,29241,29244,29248,29228,29230,29231,29574,30774,29237,29238,29239,29242,29243,29245,29246,29249,29250,29581,29254 ,29257,29258,29259,29260,29262,29263,29265,29266,29267,29268,29270,29271,29276,30778,29277,29278,29279,29281,29282 ,29283,29285,29286,29290,29291,29293,29294,29298,29299,29300,29301,29302,29305,29306,29307,29310,29314,29315,29316 ,29318,29319,29322,29323,29623,29328,29330,29331,29333,29334,29339,29341,29342,29345,29346,29347,29349,29350,29356 ,29357,29359,29361,29362,29365,29366,29367,29368,29369,29371,29372,29373,29374,29375,29376,29377,29379,29382,29383 ,29384,29327,29388,29391,29392,29393,29395,29396,29397,29400,29401,29403,29404,29407,29408,29413,29417,29215,29219 ,29223,29227,29255,29311,29358,29418,29420,29421,29422,29425,29428,29429,29430,29433,29435,29436,29438,29439,29443 ,29445,29447,29449,29451,29455,29457,29461,29463,29464,29466,29467,29468,29469,29470,29471,29473,29475,29476,29477 ,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29490,29491,29492,29493,29494,29495,29496,29497 ,29498,29500,29501,29502,29504,29506,29508,29510,29512,29515,29516,29518,29519,29521,29522,29523,29525,29526,29530 ,29531,29534,29538,29539,29544,29547,29627,29326,29556,29537,29325,30693,29558,29563,29566,29567,29195,29226,29572 ,29578,29584,29598,29603,29609,29411,29324,29626,29632,29633,29636,29637,29640,29641,29645,29646,29649,29650,29653 ,29654,29657,30088,30042,29852,29769,29773,30119,29820,30046,29816,29999,30077,29812,29788,29792,29859,29824,29781 ,30083,29780,29808,29796,29800,30573,29662,29661,30404,29865,30256,30400,29869,30252,30396,29873,30388,29876,29668 ,30445,30018,29884,29691,29670,29888,29671,29892,29897,30091,30263,29901,30424,29676,30262,29678,29684,29683,30291 ,30384,29904,29690,29692,29689,29696,29693,30345,29908,29913,29994,30278,30272,30271,30059,30568,30234,30233,30029 ,30028,30145,30148,29714,29713,30352,29722,29727,29726,30230,30031,30030,29740,29762,30476,29752,29747,29749,30585 ,30284,30503,29936,30034,29944,30111,29763,29952,30095,30243,29761,29685,29686,29687,29772,29771,29770,29776,29775 ,29774,29778,29777,29783,29782,29787,29786,29785,29791,29790,29789,29794,29793,29798,29797,29803,29802,29801,29807 ,29811,29810,29805,29813,29998,29821,30559,29923,29826,29825,29831,29830,29832,29834,29833,29838,29837,29842,29841 ,29847,29846,29850,29849,30599,30304,29854,29858,29857,29856,29863,29861,29866,29864,29868,29872,29879,29877,29885 ,29887,29891,29895,29806,29898,29896,29902,29907,29906,29911,29814,30074,29916,29995,29924,29922,29928,29933,29939 ,29937,29941,29945,29949,29953,30023,29956,29963,29969,29979,29976,29983,29980,29985,29880,29965,29961,29992,30002 ,30380,30248,29881,29967,29966,30027,30033,29940,30511,30036,29943,30005,30043,30048,30004,30052,30318,30055,30061 ,30060,30065,30064,30134,29973,29972,30072,29964,29917,30238,30237,29996,30082,30090,29818,29819,29919,29914,30267 ,30420,30266,29760,30239,29759,29977,30044,30357,30098,30307,29962,29975,29715,29716,29737,29738,29948,30531,30113 ,29951,29822,29823,30007,29926,30125,29725,30311,29721,30314,29766,29765,30139,30141,30140,30143,30152,29731,30157 ,29730,29735,29732,30165,29729,30163,30515,30164,30169,29733,30168,30171,30173,30174,30181,30194,30011,30175,30179 ,30180,30185,30184,30177,30009,30008,30197,30100,30101,30203,30149,30104,30103,30161,30211,30110,30109,29736,30107 ,30217,30527,30216,30188,30190,30226,30281,30227,30231,30228,30711,30232,30236,30241,29757,29758,30244,30014,30246 ,30247,30013,30251,29682,30255,29677,30289,30261,30265,29707,29701,29705,29706,30277,29991,30634,30410,30287,29664 ,30260,30245,29663,30067,30138,30070,29688,30320,30306,30305,30491,30097,30096,30331,30313,30316,30484,30322,30321 ,30326,30330,29744,29718,29719,30131,30369,29669,30444,30443,29667,30456,29665,29666,30298,30300,30467,30297,30471 ,30133,29720,29717,29741,29742,29754,29673,30054,29697,30343,30056,30347,30129,29723,29724,29748,29745,29698,30365 ,29700,29675,30373,30376,30382,30392,30414,30416,29660,29712,30053,30432,30366,30371,30437,29883,30452,29882,30459 ,30463,30475,30340,30482,30543,30339,29756,29753,30309,30324,30000,30308,30360,30001,30499,30553,30500,30506,30519 ,30523,30535,30539,30547,30501,30560,30279,29710,30572,29920,30557,30280,29711,29709,30488,29932,30587,29935,29829 ,29959,29957,29958,30601,30604,30629,30636,30644,30625,30648,30630,30652,30651,30642,30609,30606,30605,30615,30614 ,30619,30618,30658,30626,30639,30628,30627,30632,30411,30283,30655,30633,30673,30496,30676,30497,30375,30229,29679 ,30686,30688,30692,29704,29353,29708,30563,30698,30694,29702,30728,30715,30672,30733,30678,30624,30622,30623,30670 ,30680,30721,29351,29352,30748,29308,30752,29252,30758,29224,30762,29220,30763,29216,29213,29212,29234,29233,29274 ,29273,29630,29336,30582,29845,29836,30160,30154,30159,30105,30580,30106,30578,30147,30797,30202,30801,30102,30805 ,30010,30809,30221,30813,30189,30817,30225,30144,29672,30827,30637,30834,30833,30832,30831,30838,30837,30836,30842 ,30841,30840,30853,30846,30844,30843,30850,30847,30854,30851,30857,30858,30862,30861,30859,30866,30865,30870,30869 ,30874,30873,30871,30878,30877,30882,30881,30885,30890,30889,30888,30892,30891,30902,30901,30900,30899,30906,30905 ,30903,30910,30909,30907,30914,30913,30911,30918,30917,30915,30922,30919,30926,30923,30930,30929,30928,30927,30934 ,30933,30932,30938,30937,30942,30941,30946,30944,30950,30954,30958,30956,30962,30961,30959,30966,30965,30969,30883 ,30977,30982,30972,30976,30975,30895,30855,30973,30990,30989,30988,30987,30994,30993,30991,30998,30997,30995,31008 ,31002,31001,30999,31006,31003,31010,31014,31013,31012,31011,31018,31017,31016,31022,31021,31025,31030,31029,31028 ,31034,31033,31037,31040,31042,31045,31044,31043,31050,31049,31053,31058,31057,31056,31055,31069,31059,31211,31062 ,31061,31060,31066,31064,31070,31068,31067,31074,31071,31075,31082,31081,31080,31079,31086,31085,31083,31090,31089 ,31094,31097,31095,31101,31109,31114,31112,31111,31116,31115,31122,31126,31129,31107,31127,31123,31133,31137,31142 ,31146,31149,31153,31157,31161,31165,31169,31173,31177,31182,31186,31189,31193,31197,31201,31205,31209,31213,31217 ,31221,31226,31230,31234,31238,31241,31245,31134,31132,31138,31141,31145,31144,31150,31148,31152,31156,31160,31166 ,31170,31167,31174,31172,30884,31181,30955,31190,31188,31192,31196,31202,31206,31203,31210,31208,31214,31218,31225 ,31229,31228,31233,31231,31039,31242,31108,30856,31293,31281,31298,31278,31277,31275,31276,31280,31279,31285,31284 ,31289,31271,31292,31274,31273,31272,31303,30974,30985,31124,31312,31322,31315,31311,31912,31344,31478,31903,31336 ,31505,32158,31476,31347,31349,31455,31441,31468,31431,32166,31379,31341,31444,31414,31400,31345,31348,31904,31354 ,31355,31356,31357,31359,31361,31362,31364,31365,31366,31368,31370,31372,31373,31374,31377,31380,31381,31384,31387 ,31388,31389,31941,31566,31399,32176,31403,31398,31401,31402,31405,31409,31421,31407,31408,31420,32171,31412,31415 ,31416,31419,31425,31424,31426,31429,31432,31433,31436,31438,31439,31440,31442,31443,31445,31446,31447,31448,31451 ,31453,31457,31463,31465,31466,31474,32554,32514,32521,32512,31536,31342,31920,31499,31332,31486,31489,31548,31430 ,31411,31434,31410,31553,31394,31460,31390,31397,31392,31393,31573,31490,31339,31578,31334,31333,31350,32058,32049 ,31702,31653,32295,32131,31595,31601,31896,32133,31615,31622,31598,31628,31878,31658,31992,31668,31892,32310,31948 ,31947,31684,32150,31870,32366,31692,32118,31748,31886,31603,32092,32084,31806,40299,31760,32099,31820,31775,31785 ,31780,32016,32040,31790,31789,31796,31794,31793,31507,31955,31803,31801,31831,31518,32526,31898,31834,31708,31621 ,31705,32140,31847,31843,40348,31862,31856,31905,31880,32123,31610,31833,31516,31906,31521,31526,31527,31531,31534 ,31535,31922,31931,31928,31932,31935,31787,31590,31591,31938,31943,31406,31942,31983,31783,31962,31975,32062,31630 ,31949,31988,32339,31666,31667,31996,31890,31609,32002,32004,31592,31605,31824,32019,32015,31868,31867,32069,31517 ,32522,32039,32038,31926,32057,31704,31706,31703,31939,31940,31713,40383,31683,31894,31685,31682,31981,31619,31620 ,32047,32051,31625,31626,31979,32012,31353,32558,31866,31865,32071,32076,31506,31585,32097,32100,32532,31827,31768 ,31769,31508,32357,31483,31916,32508,31530,31701,31587,31588,31709,31710,31596,32027,31616,31617,31614,31694,31717 ,31700,32199,32188,31778,32020,31839,31721,31335,31485,31337,31338,32008,31497,32010,32011,40291,32035,31774,31757 ,31754,31765,32107,32115,31481,32106,31343,31480,31346,31574,31579,31582,40292,32013,31502,31543,31544,32165,32576 ,32574,31552,31549,32173,31554,31557,31558,31563,31564,31569,31540,32186,31589,31586,32146,32153,31779,32149,32151 ,31716,31715,31966,31752,32368,32330,32220,31634,32223,31639,32228,31642,31633,32232,32218,31635,32241,32237,31647 ,31649,31643,32221,31645,31640,32245,31636,32253,32255,31665,31664,31662,32263,32261,31677,32267,31676,32271,31675 ,31733,32288,31737,32291,31736,31732,32294,31739,32298,31738,31741,31745,32259,31663,31743,32311,32313,31876,31873 ,31875,31648,31723,31674,31756,31809,31795,31696,31669,31735,32227,31641,34652,32125,32251,31638,32240,31680,31688 ,31613,31611,31799,31772,31770,32304,31657,32317,32246,32226,32285,32472,32286,32284,32376,32484,31655,31654,32371 ,32214,31631,31632,32229,32215,32216,32325,32496,31725,32324,31727,31724,31670,32276,31593,32382,32380,32452,32384 ,32386,32388,32390,32391,32395,32393,32392,32399,32397,32396,32400,32402,32403,32404,32406,32407,32468,32492,32408 ,32410,32409,32414,32418,32500,32420,32422,32421,32426,32428,32429,32434,32480,32432,32476,32433,32425,32381,32385 ,32419,32329,32331,31751,32488,32464,32460,32456,32448,32444,32415,31539,32507,31533,32511,31529,31520,31525,32520 ,31523,32525,31519,32529,32101,31826,32537,31759,32542,31836,40242,32072,32569,31498,32560,31495,31496,32562,31923 ,31538,32551,31537,32534,31829,32531,31828,31825,31764,31854,31762,31763,31815,40300,40357,31797,31720,31767,31718 ,31719,32347,31612,31686,32142,31690,31687,31678,31986,31679,31746,31340,32570,32167,31872,31781,32005,32515,32540 ,32543,32549,32587,32588,32589,32590,32768,32777,34636,32685,32642,32621,32593,32594,32592,32595,32792,34690,32626 ,32828,32831,32838,32607,32610,32611,32614,32832,32620,32622,32628,34447,32630,34449,32634,32648,32813,32790,32709 ,32713,32678,32673,32643,32644,32645,32646,32819,34466,34621,32649,32650,32654,32655,32656,32658,32660,32661,32662 ,32663,32664,32665,32667,32668,32669,32670,32677,32675,32679,32683,32703,32692,32715,32731,32755,32727,32723,32739 ,32743,32808,32751,32687,32691,32695,32699,32707,32711,32719,32735,32747,32759,32680,32682,32686,32684,32742,32693 ,32694,32696,32700,32714,32712,32718,32716,32883,32726,32729,32730,32728,32734,32737,32738,32744,32748,32750,32805 ,32764,32796,32802,32605,32599,32786,32816,32763,32765,32766,32814,32785,32784,32827,32618,32624,32606,32603,34479 ,32843,32846,34419,34486,32855,32853,32873,32871,34591,34425,32875,32859,32878,32867,34520,34519,32887,32886,33245 ,32904,32908,32911,34429,34592,32921,32920,32919,32918,32929,32928,32927,32926,32937,32936,32935,32934,32945,32944 ,32943,32942,32948,32947,32946,32953,32954,32957,32955,32961,32959,32958,32965,32964,32963,32962,32969,32967,32966 ,32973,32972,32971,32977,32976,32975,32974,32981,32980,32979,32985,32984,32983,32982,32989,32987,32986,32993,32992 ,32991,32990,32997,32996,32995,32994,33001,33000,32998,33005,33004,33002,33009,33008,33007,33006,33013,33011,33010 ,33016,33015,33014,33019,33018,33025,33023,33022,33027,33026,33030,33033,33034,33037,33041,33040,33039,33038,33045 ,33044,33043,33047,33046,33049,33051,33050,34543,33055,33054,34556,33060,33059,33065,33064,33063,33062,33069,33068 ,33067,33066,33072,33070,33077,33076,33074,33081,33078,33085,33084,33083,33082,33089,33088,33087,33086,33093,33092 ,33091,33090,33097,33096,33095,33101,33100,33099,33098,33105,33104,33103,33102,33109,33108,33107,33106,33113,33112 ,33111,33110,33117,33115,33114,33120,33119,33124,33123,33129,34319,33132,33131,33130,33135,33134,33139,33138,33137 ,33144,33141,33148,33147,33146,33145,33152,33151,33150,33149,33156,33158,33161,34299,34433,33163,34442,33168,33167 ,33443,33171,33170,33187,34535,33179,33178,33185,33182,33186,33189,33193,33192,33195,33194,33201,33198,33205,33203 ,33209,33207,33206,33212,33211,33210,33216,33215,33214,33221,33220,33219,33218,33225,33224,33222,33229,33228,33233 ,33232,33231,33230,33236,33237,33241,33244,33243,33242,33248,34525,33250,33251,33257,33256,33255,33254,33261,33260 ,33259,33258,33265,33262,33267,33266,33271,33270,33277,33274,33283,33279,33278,33282,33289,33287,33286,33293,33297 ,33300,33298,33304,33303,33308,33307,33312,33311,33317,33315,33321,33325,33324,33323,33328,33333,33337,33339,34557 ,33341,33345,33344,33349,33353,33352,33351,33357,33361,33358,33364,33362,33368,33372,33371,33370,33377,33375,33381 ,33383,33387,33389,33392,33396,33395,33394,33401,33400,33801,33419,33423,33429,33428,33426,33430,33432,33435,33434 ,33438,33157,33439,33446,33453,33451,33450,33455,33454,33465,33464,33462,33478,33485,33484,33483,33482,33913,33912 ,33489,33567,33493,33492,33491,33490,33501,33500,33499,33498,33513,33521,33529,33528,33523,33526,33537,33535,33540 ,33525,33538,33544,33545,33549,33496,33553,33563,33571,33577,33576,33581,33585,33589,33574,33597,33598,33602,33550 ,33617,33614,33546,33586,33607,33638,33609,33629,33632,33631,33630,33645,33639,33620,33653,33654,33657,33658,33666 ,33669,33670,33674,33673,33672,33671,33678,33677,33682,34216,34751,34764,33891,33486,33689,33698,33683,33701,33720 ,33667,33696,33675,33708,33687,32923,33730,33729,33728,32925,33738,33747,32932,33745,33751,33752,33763,32940,33761 ,33767,33771,33768,33779,33787,33783,33235,33795,33794,33792,33798,33797,33405,33810,33809,33808,33813,33403,33817 ,33827,33828,33407,33825,33833,33843,33841,33461,33459,33850,33844,33859,33858,33857,33856,33861,33652,33870,33869 ,33868,33883,33656,33881,33880,33887,33899,33897,33660,33662,33906,33900,33923,33693,33926,33924,33930,33928,33932 ,33939,33938,33937,33936,33943,33942,33947,33946,33945,33951,33950,33949,33954,33953,33952,33957,33956,33961,33960 ,33967,33965,33975,33974,33973,33972,33979,33978,33976,33982,33987,33986,33985,33984,33990,33988,33994,33992,33996 ,34000,34006,34005,34011,34014,34017,34022,34026,34030,34029,34033,34039,34043,34042,34046,34051,34050,34055,34054 ,34059,34057,34056,34062,34061,34067,34065,33716,34083,34080,34084,34091,34088,34095,34093,34102,34105,34110,34109 ,34115,34113,34112,34119,34117,34123,34125,34130,34129,34134,34133,34132,34139,34137,34136,34142,34146,34144,34151 ,34152,34159,34158,34163,34161,34160,34164,34170,34259,34173,34178,34182,34187,34190,34188,34194,34193,34192,32952 ,32950,33832,33509,33604,33643,33649,33508,33512,33514,33506,33515,34200,33524,33522,33530,33533,33532,33497,33495 ,33554,33494,33560,33558,33562,33566,33559,33625,33575,33580,33584,33582,33588,33590,33592,33635,33502,33628,33505 ,34224,33681,33680,33679,33665,33664,33663,33712,33715,33717,33692,33694,33854,34343,33706,33705,33704,33726,33725 ,32922,32924,33737,32931,33668,32933,33750,33699,32930,32939,33676,32941,33777,33234,33778,33789,33804,33800,33404 ,33402,33812,33408,33406,33458,33460,33866,33724,33862,33651,33876,33655,33888,33710,33659,34221,34226,34231,34227 ,34245,34244,34243,34253,34251,34265,34269,34271,34277,34276,34281,34278,34284,34283,34288,32688,34291,34295,32891 ,32862,32903,32852,32854,34320,34379,34326,34338,34350,34367,34381,32938,33409,33661,34412,32900,32861,32858,34421 ,32860,32876,32877,32912,32913,33164,33165,34437,34293,33169,33166,34168,32633,32631,32632,34454,32640,34465,32810 ,32811,34477,34720,32844,34482,34417,32856,32857,34450,32627,34490,34453,34492,34446,34682,32778,32591,34501,34694 ,34503,32689,34323,33128,34515,34410,32888,32889,34521,34409,33246,33247,34532,34176,33180,33181,34537,34397,33056 ,33057,34548,33390,34551,33281,33061,33058,33334,33335,34564,34286,34229,34571,34569,34570,34574,34582,34577,32915 ,34586,34598,34603,34601,34596,34618,32672,34624,32647,34626,32720,34575,34634,32674,32789,32612,32895,32896,34650 ,34472,34648,34470,34471,34664,32868,32884,32885,32917,32625,32623,34677,34680,34679,34721,34685,34686,34689,32598 ,32638,32596,32597,34698,34499,32767,32600,32601,32825,32824,32651,34459,32653,32639,32773,32774,34640,34639,34706 ,32708,33121,34676,33503,33252,33416,33412,33384,33268,33196,33444,33440,32909,32872,32851,32845,33536,32960,33052 ,33048,33188,33172,33176,33174,34668,34660,34656,32849,32863,33153,33184,33264,33032,32956,32635,32636,32865,32864 ,32847,34475,34715,32848,32869,33732,33709,33691,33721,33703,32803,33618,33685,33875,33684,33727,34734,33714,33688 ,33702,33700,33686,33695,33915,33488,33543,33606,33621,32842,32893,32898,32897,34302,33126,30675,30286,30663,34800 ,34799,34798,34797,34978,34985,36842,34894,34849,34830,34802,34801,34803,34808,35002,36899,34833,35039,35044,35045 ,34820,34817,34824,34821,35043,34831,34829,34839,36654,34837,36652,34841,34859,35020,34997,34918,34922,34885,34882 ,34856,34855,34854,34853,35032,36675,36830,34858,34857,34861,34868,34867,34865,34871,34870,34869,34876,34875,34874 ,34880,34879,34878,34877,34886,34888,34892,34896,34916,34903,34928,34944,34968,34940,34936,34952,34956,35017,34964 ,34900,34904,34908,34912,34920,34924,34932,34948,34960,34972,34891,34889,34893,34895,34949,34902,34901,34907,34911 ,34921,34923,34925,34927,35094,34933,34938,34937,34939,34941,34946,34945,34955,34959,34957,35013,34975,35004,35010 ,34814,34812,34827,34992,35026,34976,34974,34973,35028,34993,34994,35040,34825,34835,34813,34816,36686,35056,35053 ,36617,36628,36695,35068,35062,35080,35082,36800,36630,35086,35072,35091,35079,36723,36724,35098,35099,35448,35109 ,35113,35118,36634,36799,35124,35125,35126,35127,35132,35133,35134,35135,35140,35141,35142,35143,35148,35149,35150 ,35151,35153,35154,35155,35156,35163,35160,35162,35164,35166,35167,35168,35169,35170,35171,35172,35174,35175,35176 ,35177,35178,35180,35181,35182,35183,35184,35185,35186,35188,35189,35190,35191,35192,35194,35195,35196,35197,35198 ,35199,35200,35201,35202,35203,35204,35205,35207,35208,35209,35211,35212,35213,35214,35215,35216,35218,35219,35221 ,35222,35223,35226,35227,35228,35230,35231,35234,35235,35239,35236,35243,35240,35244,35245,35246,35247,35248,35249 ,35250,35254,35255,35252,35258,35259,36748,35262,35263,36759,35265,35266,35268,35269,35270,35271,35272,35273,35274 ,35275,35277,35279,35280,35281,35283,35284,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298 ,35299,35300,35301,35302,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318 ,35319,35320,35322,35323,35325,35326,35329,35330,35338,36525,35335,35336,35337,35340,35341,35344,35345,35346,35347 ,35350,35351,35352,35353,35354,35355,35356,35357,35358,35360,35367,35364,36506,36638,35370,36645,35373,35374,35650 ,35378,35379,35394,36740,35386,35387,35388,35391,35395,35392,35396,35397,35402,35403,35404,35407,35408,35410,35412 ,35414,35415,35417,35418,35419,35421,35422,35423,35424,35425,35426,35427,35428,35429,35431,35432,35433,35436,35437 ,35438,35439,35441,35440,35444,35449,35450,35451,35453,36734,35459,35458,35460,35461,35462,35463,35464,35465,35466 ,35467,35468,35471,35474,35475,35478,35479,35480,35483,35490,35486,35487,35491,35492,35494,35495,35496,35500,35505 ,35507,35509,35510,35513,35514,35517,35518,35520,35522,35524,35528,35529,35530,35533,35536,35540,35546,36766,35544 ,35548,35549,35552,35556,35557,35558,35560,35564,35567,35569,35571,35573,35577,35578,35579,35580,35582,35584,35590 ,35594,35592,35597,35601,35602,35603,35604,35605,36008,35626,35630,35632,35633,35635,35639,35637,35642,35643,35647 ,35359,35646,35655,35656,35658,35659,35662,35663,35668,35669,35671,35687,35688,35689,35690,35691,36120,36121,35692 ,35774,35696,35697,35698,35699,35704,35705,35706,35707,35716,35724,35732,35733,35730,35735,35740,35742,35745,35728 ,35747,35749,35748,35752,35701,35756,35770,35778,35780,35781,35784,35788,35792,35783,35800,35807,35811,35759,35823 ,35819,35755,35795,35816,35848,35814,35832,35837,35838,35839,35850,35847,35826,35858,35857,35862,35861,35869,35874 ,35873,35877,35878,35879,35880,35881,35882,35885,36423,36956,36973,36094,35695,35894,35901,35892,35906,35924,35876 ,35903,35884,35914,35896,35130,35935,35936,35937,35128,35943,35950,35137,35952,35954,35961,35966,35145,35968,35970 ,35974,35977,35982,35990,35986,35442,35998,35999,36001,36003,36004,35608,36015,36016,36017,36020,35610,36024,36030 ,36037,35614,36032,36040,36046,36048,35664,35666,36055,36053,36062,36063,36064,36065,36068,35859,36075,36076,36077 ,36086,35863,36088,36089,36090,36102,36104,35867,35865,36111,36109,36126,35898,36131,36133,36135,36137,36141,36142 ,36143,36144,36145,36146,36147,36150,36151,36152,36154,36155,36156,36159,36160,36161,36164,36165,36168,36169,36170 ,36172,36178,36179,36180,36181,36182,36183,36185,36187,36190,36191,36192,36193,36195,36197,36199,36201,36205,36209 ,36211,36212,36214,36219,36224,36227,36231,36235,36236,36240,36242,36246,36247,36251,36254,36255,36258,36259,36262 ,36264,36265,36267,36268,36270,36272,35921,36286,36289,36293,36294,36297,36298,36300,36307,36312,36315,36316,36318 ,36320,36321,36322,36324,36326,36332,36335,36336,36339,36340,36341,36342,36344,36345,36347,36351,36353,36354,36361 ,36362,36363,36366,36368,36369,36373,36375,36466,36380,36383,36387,36390,36395,36397,36399,36400,36401,35157,35159 ,36041,35712,35809,35852,35854,35713,35717,35723,35715,35722,36403,35729,35731,35739,35736,35737,35700,35702,35763 ,35703,35765,35767,35771,35775,35766,35828,35782,35785,35789,35791,35793,35799,35797,35842,35711,35833,35708,36431 ,35886,35887,35888,35870,35871,35872,35917,35922,35920,35899,35897,36059,36549,35909,35910,35911,35931,35932,35131 ,35129,35944,35138,35875,35136,35955,35908,35139,35146,35883,35144,35984,35443,35983,35996,36013,36009,35609,35611 ,36021,35613,35615,35667,35665,36071,35933,36067,35860,36085,35864,36097,35919,35868,36426,36429,36438,36435,36448 ,36449,36450,36456,36458,36468,36472,36478,36480,36481,36484,36487,36489,36490,36493,34899,36498,36502,35102,35069 ,35110,35063,35061,36524,36585,36530,36542,36554,36573,36589,35147,35612,35866,36619,35105,35070,35065,36626,35071 ,35085,35084,35117,35116,35369,35368,36642,36496,35372,35375,36377,34842,34844,34843,36663,34851,36668,35023,35022 ,36680,36923,35055,36691,36622,35067,35066,36659,34840,36699,36656,36697,36655,36891,34991,34804,36704,36903,36710 ,34898,36527,35332,36721,36614,35097,35096,36730,36615,35455,35454,36735,36385,35385,35384,36746,36603,35261,35260 ,36751,35599,36756,35484,35264,35267,35543,35542,36767,36495,36433,36776,36778,36777,36781,36790,36786,35122,36796 ,36806,36808,36810,36802,36825,34883,36827,34860,36833,34931,36780,36838,34881,34998,34823,36852,35104,36856,36859 ,36677,36853,36679,36678,36869,35078,35093,35092,35120,34834,34836,36880,36885,36886,36930,36888,36895,36892,34805 ,34845,34807,34806,36907,36706,34979,34811,34810,35034,35035,34864,36666,34862,34852,34981,34980,36846,36847,36913 ,34919,35324,36881,35710,35457,35621,35617,35589,35473,35401,35649,35645,35112,35081,35064,35054,35101,35741,35165 ,35257,35253,35393,35377,35381,35383,36873,36865,36861,35058,35076,35363,35389,35469,35237,35161,34848,34847,35074 ,35075,35060,36682,36920,35059,35077,35941,35913,35900,35929,35912,35015,35822,35890,36078,35891,35930,36941,35923 ,35895,35905,35907,35889,35904,36118,35693,35750,35817,35825,35050,35049,36882,34815,34809,35025,34996,36510,35100 ,35107,36857,36922,36511,35334,36997,36998,36999,37000,37001,37002,37003,37005,37006,37007,37018,37009,37011,37012 ,37013,37016,37017,37020,37022,37021,37025,37026,37028,37029,37030,37033,37034,37037,37038,37040,37041,37042,37045 ,37046,37050,37053,37054,37055,37059,37060,37065,37066,37067,37068,37069,37070,37072,37073,37074,37076,37077,37078 ,37080,37081,37082,37084,37085,37088,37089,37092,37093,37094,37095,37096,37097,37098,37099,37101,37102,37105,37106 ,37109,37111,37113,37117,37121,37123,37125,37126,37128,37129,37130,37134,37052,37142,37145,37139,37143,37144,37064 ,37024,37138,37153,37154,37155,37156,37157,37158,37160,37161,37162,37164,37175,37165,37166,37168,37169,37172,37173 ,37177,37178,37179,37180,37181,37182,37183,37185,37186,37190,37193,37194,37195,37197,37198,37202,37207,37205,37210 ,37211,37212,37213,37214,37218,37221,37222,37223,37224,37234,37228,37380,37225,37226,37227,37229,37231,37233,37235 ,37236,37237,37240,37244,37245,37246,37247,37248,37249,37250,37252,37253,37254,37257,37262,37264,37266,37274,37277 ,37279,37280,37283,37284,37285,37289,37294,37276,37296,37292,37298,37302,37305,37309,37314,37318,37322,37326,37330 ,37334,37338,37342,37345,37349,37354,37358,37362,37366,37370,37374,37378,37382,37386,37389,37393,37397,37401,37406 ,37410,37297,37299,37301,37306,37310,37311,37313,37315,37319,37323,37327,37329,37333,37336,37337,37339,37051,37346 ,37124,37353,37355,37359,37363,37365,37369,37372,37373,37375,37377,37381,37390,37394,37395,37398,37400,37208,37405 ,37275,37023,37459,37447,37462,37446,37441,37442,37444,37443,37448,37449,37451,37452,37455,37440,37460,37437,37438 ,37439,37473,37137,37150,37291,37480,37486,37485,37481,38065,37673,37515,37660,38058,38310,37504,37498,37524,37691 ,37690,38276,37654,37528,37526,37635,37510,37646,37611,38319,37765,37559,37512,37507,37521,37511,37594,37578,37514 ,37768,37527,37517,37771,38057,37536,37535,37534,37533,37539,37537,37544,37542,37541,37548,37546,37552,37550,37549 ,37556,37553,37558,37557,37562,37567,37566,37565,38098,37760,37579,38336,37583,37580,37577,37584,37581,37591,37604 ,37586,37585,37596,38326,37588,37593,37592,37597,37600,37601,37608,37605,37610,37609,37614,37620,37619,37618,37624 ,37623,37621,37628,37627,37626,37631,37629,37633,37643,37641,37648,37656,37522,37684,40107,37506,38073,37500,37499 ,37530,37501,37525,37674,37736,37612,37589,37616,37590,37748,37576,37638,37572,37573,37570,37569,37762,37681,37509 ,37773,37519,37665,37520,37532,37529,39046,37850,37851,38452,38263,40505,38042,38837,38441,38264,38265,37815,37816 ,37803,38102,37825,37826,38040,37852,37855,37858,38419,38412,38104,38105,40457,38271,38033,38437,37873,38250,37916 ,37921,37806,37807,37952,40521,40429,37956,40131,38226,37951,37993,37957,37958,37963,37960,37973,38182,37974,37981 ,40513,37979,40445,37698,38114,37980,37982,38164,37709,38004,38023,38005,37882,39743,39514,39585,37817,38189,38012 ,38014,37954,38024,38026,37994,38056,37853,37854,38406,38043,38044,38255,37922,38046,40475,37847,38006,37711,38063 ,37714,37717,37716,37720,37725,37724,38079,38086,38081,37967,38090,37969,37792,37791,38094,38041,38096,37587,38097 ,38195,38137,38108,37965,38116,38130,38192,37823,38103,38140,39919,40468,37859,40487,38148,37784,37790,38156,37805 ,40530,37985,38207,37986,38027,38285,38028,38174,37710,38175,38176,38083,37780,37794,38183,37781,37919,38095,37869 ,38092,40465,37870,40462,38139,37819,37818,38187,37795,37821,37820,38134,38166,37683,40155,38287,38029,38030,38202 ,37934,38199,38214,37931,38216,37953,40437,37699,37774,38228,38225,38000,38306,38238,38221,37948,37947,37700,37701 ,39942,38243,37776,38300,37663,38069,37721,37786,37785,37800,37880,37812,37797,37814,37813,40453,37884,38350,37962 ,38018,37887,37505,37661,37503,37502,38162,37686,37998,38159,38295,37995,38293,37955,40425,37943,38234,38246,37657 ,38235,37516,37658,37513,37769,37772,37777,37992,38165,37697,37732,37740,38316,37671,37670,38278,37696,37741,37744 ,38331,37747,37752,37751,37754,37753,37757,37735,38341,37787,38274,37961,38272,38270,37885,37886,38121,38464,37924 ,39954,38831,38370,37827,38375,37838,38378,37835,37828,38382,38372,37834,38397,38393,37846,37844,37842,38377,37840 ,37837,38401,37833,38409,38407,37914,37913,38416,38418,37860,38420,37861,38424,37862,37895,38431,37896,37902,37900 ,38443,37903,38448,37904,37899,38453,37909,38413,37910,37907,37911,38467,38465,38035,38038,38036,37845,37893,37863 ,39038,38845,38482,38484,38486,38488,38490,38494,38496,39408,38990,39326,38869,38502,38505,38873,38536,38877,38880 ,39051,38509,38507,38511,39228,38515,38516,38519,38520,38523,38525,38533,38531,38534,38535,38538,39351,38893,39231 ,38553,38554,38561,38559,38568,38575,38576,38577,38591,38574,39238,39833,38601,38582,38974,39196,38606,38607,38996 ,38976,39005,38618,38619,39342,39360,38626,38629,38630,39186,38635,38709,38637,38638,38636,39011,38647,38696,39346 ,38659,38656,38662,39247,39249,38664,38663,39014,38941,38678,39067,38682,38679,38681,39055,39204,38732,38697,38530 ,38529,38528,38702,38703,38586,38711,38713,38734,38735,38736,38738,38739,38740,38744,38745,38747,38748,38751,38752 ,38753,38755,38756,38757,38760,38761,38764,38765,38767,38768,38769,38771,38775,38776,38773,38784,38785,38781,38971 ,38797,39181,38919,38799,38800,38802,38927,38809,38807,38808,38811,38812,38815,38816,38818,38819,38823,38824,40023 ,39282,38835,38839,38840,38841,38842,38844,38847,38849,38853,38857,38858,38860,38868,38866,38870,38874,38772,38879 ,38881,38883,38886,38887,38890,38780,38896,38908,38917,38920,38925,38928,38930,38932,38936,38940,38944,38948,39369 ,38960,38963,38962,38965,38968,38865,38585,39212,39175,37915,38864,38998,39001,39002,39081,39006,39008,38937,39017 ,38934,38793,38789,38904,38905,38595,38730,38592,38570,38573,38569,39265,38589,38728,38901,38900,38583,38579,38907 ,38560,38558,39199,38557,39036,39044,38543,38545,38547,39027,38565,38788,39363,39052,38957,38729,39113,38617,38616 ,38650,38649,38677,39065,38942,38796,38794,38598,38915,38597,39291,38594,38733,38700,38590,39079,39077,38608,38609 ,39091,38640,39089,38641,38644,38639,39101,38642,39098,38669,39105,38646,38670,38673,39108,38718,39116,38725,39120 ,39135,39031,39030,39127,38978,39133,39134,39171,39136,39032,39114,38724,38723,39087,39145,38614,38615,39153,39155 ,39056,39057,38643,39059,39162,38674,39062,39242,39187,39192,39193,38605,38604,38689,38690,38687,38686,38492,38987 ,39207,39213,38988,39217,38521,39221,38517,38512,39222,38514,38513,38550,38549,39235,38581,38599,38603,39414,39240 ,39382,38480,39224,39223,39208,38495,38566,38587,39330,38563,38527,39294,37926,39280,39281,39285,39053,39054,39307 ,39289,39292,38950,39296,38685,39300,38651,38622,38621,39264,39312,39313,38500,38497,38499,38498,39269,39274,39270 ,39266,38620,38623,38654,38653,38506,39276,38542,39353,39354,39357,38593,38625,38624,38655,38658,38541,39375,38539 ,38504,38977,38524,38493,38489,38485,38481,38483,39384,38544,38508,38510,39277,39398,39374,39377,39314,39319,38862 ,38863,39320,39323,39334,39338,38951,38827,39287,39431,39647,38634,39478,39507,38600,39705,39876,39420,39425,38710 ,38707,38706,39434,39419,39418,39189,38666,39015,38668,39063,38676,38684,39440,39584,39688,39499,39612,39573,39448 ,39449,39471,39656,39509,39479,39441,39745,39588,39472,39597,39455,39532,39456,39592,39467,39498,39494,39459,39460 ,39552,39451,39576,39541,39477,39483,39442,39443,39523,39524,39519,39558,39537,39538,39468,39543,39551,39767,39452 ,39553,39555,39652,39755,39566,39750,39570,39636,39464,39454,39462,39480,39513,39522,39521,39582,39759,39453,39561 ,39516,39600,39598,39488,39463,39465,39605,39609,39466,39620,39618,39617,39621,39529,39632,39469,39623,39628,39470 ,39635,39473,39637,39641,39474,39475,39481,39654,39482,39659,39484,39657,39661,39485,39450,39790,39530,39781,39487 ,39676,39546,39671,39772,39677,39679,39855,39491,39690,39689,39495,39698,39697,39500,39501,39497,39702,39502,39504 ,39505,39457,39506,39706,39445,39446,39565,39564,39569,39568,39562,39580,39724,39559,39557,39556,39674,39673,39736 ,39675,39681,39742,39710,39709,39714,39713,39718,39717,39722,39721,39761,39723,39730,39729,39734,39733,39774,39735 ,39489,39518,39785,39490,39572,39571,39793,39670,39798,39527,39802,39447,39808,39545,39812,39548,39510,39188,39883 ,39821,39884,39239,39890,39388,38912,38913,39831,39237,38910,39386,39836,38911,39826,38708,39846,39540,39851,39684 ,39493,39492,39859,39692,39863,39496,39864,39594,39871,39577,39872,39458,39415,39534,39243,39416,39183,39244,38921 ,39184,39893,38918,38185,39907,38929,39912,38926,40414,38449,37905,38379,37836,38167,37868,38403,37831,38390,37865 ,38050,37879,37938,38460,37856,38469,38400,38380,38446,40061,38438,38440,39960,40073,37848,37849,39951,38368,37830 ,37829,38385,38436,38367,38366,38477,40085,37891,38478,37897,37892,37811,38427,37789,39964,39966,40041,39970,39968 ,39974,39972,39971,39975,39977,39978,39979,39981,39982,39986,39984,39983,39990,39988,39987,40057,40081,39994,39992 ,39993,39996,40000,40089,40006,40004,40005,40008,40014,40013,40016,40069,40018,40065,40017,40009,39965,39969,39999 ,38833,38832,38956,38955,38830,40019,37925,40077,40053,40049,40045,40037,40033,39995,37728,40098,37726,40102,37722 ,37715,37718,40109,37712,40112,37708,40116,38232,38001,38055,40129,38052,40133,38003,40138,38173,38201,40160,38820 ,38813,39824,39248,38805,39542,38633,38632,39422,39741,39915,40145,37693,40151,38280,37688,37687,40159,38078,37729 ,40142,37730,37942,40122,37999,37941,37944,38020,37946,37937,38303,38299,37930,37988,39935,37929,37978,38218,37888 ,37949,37890,37889,39927,37878,38269,37875,37874,37867,38142,37866,39086,39159,39092,38985,38983,38984,38981,39130 ,38979,38980,38721,39028,38719,38720,39109,39110,38611,39151,38613,38610,37918,39082,37508,40176,38324,38031,37959 ,37783,40249,40190,38503,38826,40201,39367,37782,37779,37801,37822,40221,26832,27328,40229,40239,40246,40164,39245 ,39180,40259,31500,31503,32156,31501,40276,32556,40280,32014,31805,32029,31810,31818,31812,31811,31814,31813,40304 ,32359,32162,31583,32160,31580,40312,31575,31570,40317,40326,40327,40331,31331,40335,31352,40336,32075,40345,32078 ,32088,32087,40355,32091,32096,32095,40361,32355,40367,31509,32109,40374,40372,31786,31729,32367,31731,31728,31607 ,32280,31672,31608,31714,31997,31712,31711,31597,32128,32023,31594,31791,31851,32017,31792,32083,32079,32031,40342 ,31808,31807,31822,40286,32033,31823,40391,31864,40395,31835,32548,32289,31776,31755,31761,31858,31900,31758,32539 ,40413,40124,37940,37939,40421,38022,37936,37935,37989,38297,40433,37990,37928,37927,40441,38220,37976,37975,40449 ,38010,37877,37876,38048,38267,38049,38145,40461,40469,38146,37857,40472,31884,32053,32052,32584,37809,37808,40493 ,38150,40497,37871,40501,38258,37799,37798,40506,38016,37972,37971,40517,38210,37933,37932,40522,37984,40529,38289 ,37997,37996,38170,22683,23598,40542,40543,40544,40545,40547,40548,40549,40551,40552,40553,40555,40556,40557,40559 ,40560,40561,40563,40564,40565,40567,40568,40569,40571,40572,40573,40575,40576,40577,40579,40580,40581,40583,40584 ,40585,40587,40588,40589,40591,40592,40593,40595,40596,40597,40599,40600,40601,40603,40605,40606,40608,40609,40612 ,40615,40618,40621,40624,40627,40630,40633,40636,40639,40642,40645,40648,40654,40655,40656,40657,40658,40659,40660 ,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679 ,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40692,40693,40694,40695,40696,40698,40699,40701 ,40702,40703,40704,40705,40706,40708,40711,40712,40716,40718,40719,40722,40724,40727,40728,40731,40732,40735,40738 ,40740,40743,40745,40746,40747,40749,40754,40755,40756,40758,40759,40760,40763,40765,40766,40767,40768,40769,40773 ,40774,40775,40780,40782,40787,40789,40794,40797,40799,40800,40801,40741,40803,40804,40806,40809,40810,40814,40815 ,40816,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40834,40835,40836 ,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40851,40852,40854,40855,40856,40858 ,40859,40862,40863,40864,40866,40868,40870,40872,40873,40876,40880,40884,40888,40889,40892,40893,40897,40901,40905 ,40906,40907,40909,40911,40914,40916,40917,40918,40922,40923,40924,40925,40927,40929,40930,40931,40934,40935,40939 ,40940,40951,40954,40957,40960,40903,40963,40964,40966,40971,40976,40742,40991,40995,41014,40902,41029,41031,41048 ,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41061,41062,41063,41064,41065,41066,41067,41068 ,41069,41070,41071,41072,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41087,41089,41090 ,41091,41093,41094,41095,41096,41097,41098,41099,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111 ,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130 ,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41142,41143,41144,41145,41146,41147,41150,41151,41153 ,41154,41155,41156,41157,41158,41159,41162,41163,41164,41166,41167,41168,41169,41170,41174,41175,41177,41178,41179 ,41181,41182,41183,41184,41185,41186,41187,41189,41190,41191,41193,41194,41195,41196,41197,41198,41200,41202,41203 ,41204,41206,41207,41208,41210,41211,41213,41214,41215,41216,41217,41218,41222,41223,41226,41227,41230,41231,41232 ,41233,41234,41235,41236,41237,41238,41239,41241,41242,41243,41244,41246,41247,41248,41250,41251,41252,41254,41255 ,41256,41257,41259,41260,41263,41264,41267,41268,41270,41271,41272,41273,41275,41276,41277,41279,41282,41284,41291 ,41292,41293,41294,41295,41296,41300,41301,41303,41304,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315 ,41316,41317,41318,41321,41322,41324,41328,41329,41331,41332,41334,41335,41336,41337,41338,41339,41340,41341,41342 ,41343,41344,41345,41346,41347,41348,41349,41350,41352,41353,41354,41355,41356,41357,41358,41361,41362,41363,41364 ,41366,41368,41372,41376,41379,41380,41381,41382,41383,41384,41386,41387,41388,41390,41392,41394,41395,41396,41400 ,41404,41408,41412,41413,41414,41416,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41433 ,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41449,41450,41451,41452,41453 ,41455,41456,41458,41459,41460,41461,41463,41464,41465,41466,41467,41468,41469,41470,41471,41475,41478,41479,41481 ,41482,41484,41485,41486,41489,41491,41492,41494,41495,41496,41497,41498,41500,41501,41502,41503,41504,41505,41506 ,41509,41510,41511,41512,41513,41515,41516,41517,41521,41522,41523,41524,41527,41530,41531,41532,41533,41538,41544 ,41545,41546,41547,41548,41550,41551,41552,41554,41559,41561,41562,41563,41564,41567,41568,41570,41571,41572,41573 ,41574,41575,41577,41579,41580,41582,41589,41592,41594,41595,41597,41599,41600,41601,41602,41604,41605,41607,41608 ,41609,41610,41611,41613,41614,41615,41616,41617,41619,41620,41621,41622,41623,41624,41626,41627,41628,41629,41630 ,41631,41634,41635,41636,41637,41638,41641,41643,41644,41647,41652,41653,41654,41655,41656,41659,41660,41663,41665 ,41666,41667,41669,41670,41673,41674,41676,41677,41678,41679,41680,41681,41682,41683,41685,41686,41687,41688,41689 ,41691,41692,41693,41696,41701,41702,41703,41705,41707,41711,41712,41715,41716,41718,41722,41725,41727,41728,41730 ,41734,41738,41742,41743,41747,41752,41753,41756,41758,41759,41762,41763,41764,41765,41766,41767,41768,41769,41771 ,41772,41773,41774,41775,41776,41777,41779,41780,41781,41782,41783,41784,41785,41787,41788,41789,41790,41791,41793 ,41794,41795,41797,41798,41799,41800,41801,41802,41803,41804,41805,41807,41808,41810,41814,41817,41818,41819,41821 ,41823,41824,41825,41826,41828,41830,41834,41837,41838,41840,41841,41842,41843,41844,41845,41846,41847,41849,41850 ,41851,41852,41854,41855,41856,41857,41858,41859,41861,41862,41863,41866,41867,41868,41870,41871,41872,41873,41876 ,41878,41879,41881,41882,41883,41884,41885,41886,41887,41888,41890,41891,41893,41894,41897,41898,41899,41900,41901 ,41902,41904,41906,41907,41910,41911,41912,41914,41916,41919,41920,41921,41922,41923,41925,41927,41928,41930,41931 ,41932,41933,41934,41935,41937,41939,41940,41944,41946,41947,41948,41949,41951,41952,41954,41957,41959,41960,41962 ,41963,41964,41965,41967,41968,41971,41972,41975,41976,41978,41979,41980,41981,41982,41983,41987,41988,41989,41994 ,41998,42002,42006,42009,42014,42025,42030,42038,42039,42041,42042,42044,42045,42046,42051,42053,42055,42060,42061 ,42062,42067,42070,42072,42074,42077,42082,42094,42098,42101,42111,42119,42124,42126,42129,42132,42133,42141,42146 ,42150,42152,42157,42159,42160,42169,42171,42177,42179,42187,42192,45641,42207,42202,42206,42209,42217,42219,42221 ,42226,42227,42228,42229,42231,42232,42234,42238,42242,42245,42248,42249,42196,42251,42253,42254,42256,42257,42258 ,42260,42262,42263,42264,42266,42267,42269,42271,42275,42279,42281,42283,42286,42289,42290,42293,42299,42304,42306 ,42309,42310,42320,42321,42322,42324,42327,42328,42330,42333,42335,42339,42348,42349,42352,42353,42355,42358,42359 ,42360,42361,42362,42363,42364,42365,42368,42369,42373,42376,42377,42378,42381,42383,42385,42389,42392,42394,42395 ,42397,42398,42399,42402,42403,42404,42405,42406,42407,42410,42411,42413,42414,42415,42416,42419,42422,42427,42428 ,42433,42434,42437,42438,42440,42441,42442,42445,42446,42448,42449,42451,42452,42453,42456,42457,42459,42460,42461 ,42464,42465,42466,42469,42473,42474,42476,42479,42481,42484,42488,42492,42494,42496,42504,42506,42508,42510,42512 ,42513,42515,42516,42519,42520,42521,42524,42525,42526,42528,42530,42531,45650,42535,42538,42542,42543,42544,42546 ,42548,42552,42555,42559,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42575 ,42576,42577,42578,42580,42581,42582,42583,42584,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42597 ,42598,42600,42601,42603,42604,42605,42607,42608,42609,42610,42612,42613,42615,42616,42617,42618,42619,42620,42621 ,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640 ,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42655,42656,42657,42658,42659,42660,42663 ,42664,42665,42667,42668,42669,42670,42671,42672,42675,42676,42678,42680,42681,42682,42683,42684,42687,42688,42689 ,42691,42692,42693,42695,42696,42697,42698,42699,42700,42701,42703,42704,42705,42708,42709,42710,42711,42712,42714 ,42715,42716,42718,42719,42720,42722,42723,42724,42725,42728,42729,42730,42731,42732,42735,42736,42739,42740,42743 ,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42755,42756,42758,42759,42760,42762,42763,42764,42766 ,42767,42769,42770,42771,42774,42775,42778,42779,42780,42782,42783,42785,42786,42787,42789,42790,42792,42798,42799 ,42803,42804,42805,42806,42810,42811,42813,42814,42815,42816,42818,42819,42820,42821,42822,42823,42824,42825,42826 ,42828,42829,42830,42832,42833,42838,42839,42841,42842,42843,42844,42846,42848,42849,42850,42851,42852,42853,42854 ,42855,42856,42857,42858,42860,42861,42862,42863,42864,42865,42866,42868,42869,42870,42871,42873,42876,42878,42882 ,42886,42887,42890,42891,42892,42893,42894,42895,42896,42898,42900,42902,42903,42904,42906,42910,42914,42918,42922 ,42925,42926,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42947 ,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42965,42966,42967,42968,42970 ,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42987,42988,42992,42993,42996,42997 ,42998,42999,43001,43003,43004,43006,43008,43009,43010,43011,43012,43013,43014,43016,43017,43018,43019,43020,43021 ,43023,43025,43026,43029,43030,43031,43032,43033,43035,43038,43039,43040,43045,43046,43048,43055,43056,43057,43058 ,43060,43061,43062,43064,43066,43067,43071,43072,43073,43075,43078,43079,43080,43082,43083,43084,43085,43086,43087 ,43089,43092,43094,43101,43103,43104,43106,43107,43109,43112,43113,43114,43115,43117,43118,43119,43120,43121,43123 ,43124,43125,43127,43129,43130,43131,43132,43133,43134,43135,43136,43138,43139,43140,43141,43142,43143,43144,43148 ,43149,43150,43151,43153,43155,43158,43164,43165,43166,43167,43170,43171,43174,43175,43176,43177,43180,43181,43184 ,43185,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43201,43202,43205,43206,43210,43211,43212 ,43213,43215,43217,43219,43226,43228,43230,43232,43235,43236,43238,43241,43244,43248,43251,43252,43255,43265,43266 ,43267,43268,43270,43271,43272,43275,43276,43277,43278,43279,43281,43282,43283,43284,43285,43286,43287,43289,43290 ,43291,43292,43293,43294,43295,43297,43298,43299,43300,43301,43302,43303,43304,43305,43307,43308,43309,43311,43312 ,43313,43314,43315,43317,43318,43320,43322,43324,43327,43328,43329,43331,43333,43336,43337,43338,43340,43342,43344 ,43348,43349,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43363,43364,43366,43367,43368,43369 ,43370,43371,43372,43373,43375,43376,43379,43380,43382,43385,43386,43387,43388,43390,43391,43392,43393,43395,43396 ,43397,43398,43399,43400,43402,43404,43405,43407,43408,43409,43412,43413,43414,43415,43416,43418,43419,43420,43424 ,43426,43427,43430,43431,43432,43433,43434,43435,43437,43439,43440,43442,43443,43444,43445,43446,43447,43449,43454 ,43455,43456,43458,43459,43461,43462,43464,43466,43467,43469,43471,43472,43474,43475,43477,43478,43479,43482,43483 ,43486,43487,43488,43490,44309,44321,43491,44311,43496,43500,43504,43508,43513,43516,43529,43532,43539,43540,43544 ,43545,43548,43549,43550,43551,43555,43557,43564,43565,43566,43567,43572,43576,43578,43581,43584,43596,43600,43605 ,43611,43619,43628,43630,43631,43637,43638,43645,43648,43652,43658,43659,43661,43666,43671,43673,43679,43681,43687 ,43698,43699,43703,43707,43712,43718,43720,43724,43726,43727,43730,43732,43733,43735,43737,43739,43743,43748,43750 ,43751,43752,43753,43754,43757,43759,43760,43761,43762,43763,43765,43766,43767,43769,43770,43772,43774,43778,43782 ,43784,43787,43791,43792,43796,43807,43809,43812,43823,43824,43825,43827,43828,43831,43833,43834,43836,43838,43852 ,43853,43854,43856,43857,43858,43859,43862,43863,43864,43865,43868,43869,43872,43873,43876,43879,43880,43882,43884 ,43888,43892,43894,43895,43897,43898,43899,43900,43902,43903,43906,43907,43908,43909,43910,43911,44411,43914,43917 ,43919,43922,43931,43935,43939,43941,43943,43946,43948,43952,43954,43956,43960,43963,43965,43971,43974,43991,44003 ,44005,44007,44009,44010,44012,44013,44014,44017,44020,44021,44023,44024,44025,44026,44027,44029,44032,44034,44037 ,44038,44042,44044,44045,44048,44052,44057,44065,44073,44077,44083,44086,44092,44093,44099,44100,44101,44104,44116 ,44120,44124,44126,44139,44142,44156,44164,44166,44167,44169,44173,44190,44205,44216,44233,44237,44261,44263,44269 ,44272,44277,44278,44283,44287,44288,44290,44302,44304,44310,44312,44327,44330,44340,44350,44353,44354,44357,44359 ,44381,44396,44403,44419,44421,44430,44431,44432,44433,44434,44435,44437,44438,44439,44440,44441,44442,44443,44444 ,44445,44446,44447,44449,44450,44451,44453,44457,44459,44460,44461,44462,44463,44464,44465,44467,44470,44472,44474 ,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44486,44487,44488,44489,44490,44491,44492,44493,44494 ,44495,44496,44497,44499,44500,44502,44504,44505,44508,44510,44512,44513,44514,44515,44516,44517,44518,44520,44521 ,44522,44528,44529,44530,44532,44533,44534,44535,44536,44537,44538,44540,44542,44543,44544,44545,44546,44547,44548 ,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44561,44562,44563,44565,44569,44570,44571,44572 ,44573,44575,44576,44578,44580,44581,44582,44583,44584,44586,44587,44588,44589,44590,44591,44592,44593,44595,44596 ,44597,44599,44600,44601,44603,44604,44605,44606,44607,44608,44613,44617,44618,44621,44622,44623,44624,44625,44627 ,44629,44630,44631,44632,44634,44635,44636,44637,44638,44639,44641,44642,44644,44647,44649,44650,44651,44652,44654 ,44655,44656,44657,44658,44659,44660,44661,44662,44663,44665,44667,44668,44671,44673,44675,44679,44686,44687,44688 ,44690,44693,44696,44698,44703,44705,44709,44710,44715,44717,44718,44723,44724,44725,44729,44731,44732,44733,44735 ,44736,44743,44745,44747,44752,44756,44759,44764,44766,44770,44772,44775,44777,44784,44785,44791,44792,44793,44795 ,44797,44800,44803,44805,44809,44812,44814,44816,44817,44818,44819,44820,44823,44830,44837,44851,44855,44861,44864 ,44888,44908,44913,44914,44919,44920,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44935,44936,44937 ,44939,44940,44941,44943,44944,44945,44946,44947,44948,45089,44952,44953,44956,44960,44964,44968,44951,45093,44950 ,44954,44955,44959,44958,44962,44963,44966,44967,44970,44971,44973,44974,44975,44976,44977,44978,44981,44982,44985 ,44986,44989,44990,44992,44993,44994,44996,44997,45001,45002,45004,45005,45006,45007,45009,45010,45011,45013,45014 ,45015,45016,45017,45018,45019,45020,45021,45022,45023,45025,45027,45029,45031,45032,45033,45034,45035,45036,45037 ,45038,45040,45042,45043,45044,45045,45046,45047,45048,45052,45054,45056,45058,45059,45061,45063,45065,45068,45070 ,45071,45076,45080,45084,45088,45090,45092,45094,45095,45097,45099,45101,45104,45108,45112,45116,45120,45122,45126 ,45127,45129,44999,45131,45133,45135,45137,45146,45148,45149,45160,45164,45166,45168,45172,45174,45176,45178,45180 ,45183,45184,45186,45187,45190,45191,45194,45195,45198,45199,45200,45203,45204,45207,45210,45267,45279,45271,45219 ,45222,45285,45229,44998,44949,45011,45223,45226,45211,45275,45215,45214,45213,45270,45269,45264,45263,45286,45287 ,45288,45289,45290,45291,45292,45293,45294,45296,45297,45298,45300,45301,45302,45304,45305,45306,45307,45308,45309 ,45452,45427,45311,45313,45317,45321,45325,45329,45330,45333,45334,45316,45314,45315,45319,45318,45322,45323,45326 ,45327,45331,45336,45337,45338,45341,45342,45343,45345,45346,45349,45350,45353,45354,45357,45358,45359,45360,45361 ,45365,45366,45368,45369,45370,45371,45373,45374,45376,45377,45378,45380,45381,45382,45383,45384,45385,45386,45387 ,45389,45391,45392,45394,45396,45397,45398,45399,45401,45402,45403,45404,45405,45407,45408,45409,45410,45411,45413 ,45415,45417,45419,45421,45424,45426,45428,45430,45431,45433,45438,45441,45445,45449,45451,45453,45455,45457,45460 ,45462,45464,45466,45469,45473,45477,45481,45483,45485,45487,45362,45492,45494,45496,45498,45500,45502,45507,45512 ,45513,45525,45527,45533,45535,45537,45539,45541,45545,45547,45549,45550,45551,45554,45555,45558,45559,45562,45565 ,45566,45569,45570,45571,45574,45575,45576,45578,45581,45582,45583,45586,45587,45588,45591,45592,45363,45312,45310 ,43701,43700,44371,42199,42534,42532,45647,44030,45639,45657,45658,45659,45660,45662,45663,45666,45667,45670,45671 ,45674,45675,45678,45679,45680,45682,45683,45684,45686,45687,45690,45691,45694,45695,45696,45698,45699,45700,45702 ,45703,45704,45706,45707,45708,45710,45711,45712,45714,45715,45716,45718,45719,45720,45722,45724,45725,45726,45727 ,45730,45731,45734,45735,45738,45739,45742,45743,45746,45747,45750,45751,45754,45755,45758,45759,45762,45763,45766 ,45767,45770,45771,45774,45775,45778,45779,45782,45783,45786,45787,45790,45793,45794,45664,45796,45797,45668,45800 ,45801,45672,45804,45805,45676,45808,45809,45812,45813,45816,45817,45688,45820,45821,45692,45824,45825,45828,45829 ,45832,45833,45836,45837,45840,45841,45844,45845,45848,45849,45852,45853,45856,45857,45861,45862,45864,45865,45868 ,45869,45872,45873,45876,45877,45880,45881,45884,45885,45888,45889,45892,45893,45896,45897,45900,45901,45904,45905 ,45908,45909,45912,45913,45916,45917,45920,45921,45924,45925,45929,45930,45932,45933,45936,45937,45940,45941,45944 ,45945,45948,45949,45952,45953,45956,45957,45960,45961,45964,45965,45968,45969,45972,45973,45976,45977,45980,45981 ,45984,45985,45988,45989,45992,45993,45999,46000,45998,46003,46002,46007,46006,46011,46010,46015,46014,46019,46018 ,46023,46022,46027,46026,46031,46030,46035,46034,46039,46038,46043,46042,46047,46046,46051,46050,46055,46054,46059 ,46058,46063,46065,46067,46068,46071,46074,46077,46080,46083,46086,46089,46092,46095,46098,46101,46104,46107,46110 ,46116,46117,46118,46120,46121,46123,46124,46125,46127,46128,46129,46132,46133,46136,46137,46139,46140,46141,46143 ,46144,46145,46147,46148,46149,46151,46152,46153,46155,46156,46157,46159,46160,46161,46163,46164,46165,46167,46168 ,46169,46171,46172,46173,46176,46177,46179,46181,46184,46185,46186,46188,46189,46192,46193,46196,46197,46200,46201 ,46204,46205,46208,46209,46212,46213,46216,46217,46220,46221,46224,46225,46228,46229,46232,46233,46236,46237,46240 ,46241,46244,46245,46249,46253,46254,46255,46258,46259,46131,46262,46263,46135,46266,46267,46270,46271,46274,46275 ,46278,46279,46282,46283,46286,46287,46290,46291,46294,46295,46298,46299,46302,46303,46175,46306,46307,46310,46311 ,46183,46314,46315,46119,46318,46321,46322,46323,46326,46327,46330,46331,46334,46335,46338,46339,46342,46343,46346 ,46347,46350,46351,46354,46355,46358,46359,46362,46363,46366,46367,46370,46371,46374,46375,46378,46379,46382,46383 ,46386,46389,46390,46391,46394,46395,46398,46399,46402,46403,46406,46407,46410,46411,46414,46415,46418,46419,46422 ,46423,46426,46427,46430,46431,46434,46435,46438,46439,46442,46443,46446,46447,46450,46451,46454,46457,46458,46459 ,46462,46463,46466,46467,46470,46471,46474,46475,46478,46479,46482,46483,46486,46487,46490,46491,46494,46495,46498 ,46499,46502,46503,46506,46507,46510,46511,46514,46515,46518,46519,46522,46525,46526,46528,46531,46534,46537,46540 ,46543,46546,46549,46552,46555,46558,46561,46564,46567,46570 GeometryVersion: 124 LayerElementNormal: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "Direct" Normals: 0.329279124736786,0.0702807679772377,-0.941613435745239,0.256420314311981,0.112910509109497,-0.959947824478149 ,0.103707693517208,0.287299185991287,-0.952210009098053,0.0421824865043163,0.312842935323715,-0.948867738246918 ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.329279124736786,0.0702807679772377,-0.941613435745239 ,0.0421824865043163,0.312842935323715,-0.948867738246918,0.120905123651028,0.330013185739517,-0.936201512813568 ,0.256420314311981,0.112910509109497,-0.959947824478149,0.298426777124405,0.233343333005905,-0.925468742847443 ,0.208192959427834,0.283492356538773,-0.936102449893951,0.103707693517208,0.287299185991287,-0.952210009098053 ,0.171656653285027,0.421078413724899,-0.890632927417755,0.0610933229327202,0.52752286195755,-0.847341299057007 ,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0890781953930855,0.32302126288414,-0.942190170288086 ,0.0610933229327202,0.52752286195755,-0.847341299057007,-0.0717302039265633,0.599237322807312,-0.797351539134979 ,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0474854707717896,0.340129047632217,-0.939179122447968 ,0.74884694814682,0.0258232615888119,-0.662239730358124,0.574346244335175,0.00941364839673042,-0.81855833530426 ,0.120905123651028,0.330013185739517,-0.936201512813568,0.317967116832733,0.377013236284256,-0.869918346405029 ,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.334298700094223,0.1620884090662,-0.92842435836792 ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.0895265564322472,0.301672667264938,-0.94919890165329 ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.334298700094223,0.1620884090662,-0.92842435836792 ,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.563491344451904,0.231473565101624,-0.793030619621277 ,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.268979072570801,0.152991950511932,-0.950917303562164 ,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.191734448075294,0.31677782535553,-0.928918600082397 ,0.0384715124964714,0.615228533744812,-0.787409543991089,0.00547882029786706,0.479039758443832,-0.877776086330414 ,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0330984629690647,0.245714232325554,-0.968777060508728 ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0384715124964714,0.615228533744812,-0.787409543991089 ,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0542660467326641,0.303808957338333,-0.951186299324036 ,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.289194285869598,0.281266182661057,-0.915016949176788 ,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0109683563932776,0.278000682592392,-0.96051824092865 ,0.298426777124405,0.233343333005905,-0.925468742847443,0.171656653285027,0.421078413724899,-0.890632927417755 ,0.0890781953930855,0.32302126288414,-0.942190170288086,0.208192959427834,0.283492356538773,-0.936102449893951 ,0.0421824865043163,0.312842935323715,-0.948867738246918,0.103707693517208,0.287299185991287,-0.952210009098053 ,0.188222825527191,0.266046136617661,-0.945405542850494,0.130089670419693,0.341309607028961,-0.930905163288116 ,0.120905123651028,0.330013185739517,-0.936201512813568,0.0421824865043163,0.312842935323715,-0.948867738246918 ,0.130089670419693,0.341309607028961,-0.930905163288116,0.103707693517208,0.287299185991287,-0.952210009098053 ,0.208192959427834,0.283492356538773,-0.936102449893951,0.236986353993416,0.25183042883873,-0.938306391239166 ,0.188222825527191,0.266046136617661,-0.945405542850494,0.0890781953930855,0.32302126288414,-0.942190170288086 ,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0502305738627911,0.265573531389236,-0.962781190872192 ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0474854707717896,0.340129047632217,-0.939179122447968 ,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0191163346171379,0.267036914825439,-0.963496685028076 ,0.0502305738627911,0.265573531389236,-0.962781190872192,-0.0895265564322472,0.301672667264938,-0.94919890165329 ,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.186463221907616,0.337504178285599,-0.922671318054199 ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.0625077188014984,0.356366664171219,-0.932253003120422 ,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.186463221907616,0.337504178285599,-0.922671318054199 ,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0895265564322472,0.301672667264938,-0.94919890165329 ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.22543403506279,0.28757056593895,-0.930850505828857 ,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0109683563932776,0.278000682592392,-0.96051824092865 ,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0415995456278324,0.272834479808807,-0.961161196231842 ,-0.0542660467326641,0.303808957338333,-0.951186299324036,-0.0330984629690647,0.245714232325554,-0.968777060508728 ,-0.0415995456278324,0.272834479808807,-0.961161196231842,0.0191163346171379,0.267036914825439,-0.963496685028076 ,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.191734448075294,0.31677782535553,-0.928918600082397 ,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0734905749559402,0.278112560510635,-0.957733035087585 ,0.208192959427834,0.283492356538773,-0.936102449893951,0.0890781953930855,0.32302126288414,-0.942190170288086 ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.236986353993416,0.25183042883873,-0.938306391239166 ,0.130089670419693,0.341309607028961,-0.930905163288116,0.188222825527191,0.266046136617661,-0.945405542850494 ,0.163174018263817,0.444838464260101,-0.880620777606964,0.243700608611107,0.544483065605164,-0.802588403224945 ,0.317967116832733,0.377013236284256,-0.869918346405029,0.130089670419693,0.341309607028961,-0.930905163288116 ,0.243700608611107,0.544483065605164,-0.802588403224945,0.735658526420593,0.230637982487679,-0.636877298355103 ,0.188222825527191,0.266046136617661,-0.945405542850494,0.236986353993416,0.25183042883873,-0.938306391239166 ,0.189078122377396,0.441867411136627,-0.87692791223526,0.163174018263817,0.444838464260101,-0.880620777606964 ,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0502305738627911,0.265573531389236,-0.962781190872192 ,0.057487852871418,0.456679046154022,-0.88777220249176,0.0718594193458557,0.455831170082092,-0.88716071844101 ,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0191163346171379,0.267036914825439,-0.963496685028076 ,0.017586937174201,0.584774792194366,-0.811005055904388,0.057487852871418,0.456679046154022,-0.88777220249176 ,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.186463221907616,0.337504178285599,-0.922671318054199 ,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.147772952914238,0.520121157169342,-0.84121173620224 ,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.563491344451904,0.231473565101624,-0.793030619621277 ,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.164236485958099,0.647006809711456,-0.744586169719696 ,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.173782542347908,0.294062882661819,-0.939854621887207 ,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.175480470061302,0.520782589912415,-0.835459232330322 ,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0734905749559402,0.278112560510635,-0.957733035087585 ,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.0419603176414967,0.516997694969177,-0.854957699775696 ,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0415995456278324,0.272834479808807,-0.961161196231842 ,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.017586937174201,0.584774792194366,-0.811005055904388 ,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.22543403506279,0.28757056593895,-0.930850505828857 ,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0663426592946053,0.518996477127075,-0.85219794511795 ,0.236986353993416,0.25183042883873,-0.938306391239166,0.0688691660761833,0.267364770174026,-0.961131155490875 ,0.0718594193458557,0.455831170082092,-0.88716071844101,0.189078122377396,0.441867411136627,-0.87692791223526 ,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.716141760349274,0.576233267784119,-0.393822461366653 ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.630987823009491,0.234253495931625,-0.739580750465393 ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.630987823009491,0.234253495931625,-0.739580750465393 ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.854649007320404,0.375557482242584,-0.358513176441193 ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.854649007320404,0.375557482242584,-0.358513176441193 ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.87062680721283,0.491043627262115,-0.0297505091875792 ,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.87062680721283,0.491043627262115,-0.0297505091875792 ,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.716141760349274,0.576233267784119,-0.393822461366653 ,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.408612459897995,0.622275412082672,-0.667689442634583 ,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.449203163385391,0.892682015895844,0.0365421921014786 ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.568679571151733,0.357779324054718,-0.740673661231995 ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.539133667945862,0.764685809612274,-0.352973729372025 ,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.776123344898224,0.626794755458832,-0.0689988508820534 ,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025 ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.119406081736088,0.202409043908119,-0.97199422121048 ,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.00773082999512553,0.120841763913631,-0.992641687393188 ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.178532913327217,0.211587846279144,-0.960914433002472 ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.304371774196625,0.115475252270699,-0.945528030395508 ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.119406081736088,0.202409043908119,-0.97199422121048 ,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.304371774196625,0.115475252270699,-0.945528030395508 ,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.562859117984772,0.4129618704319,-0.715997278690338 ,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.304371774196625,0.115475252270699,-0.945528030395508 ,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.568679571151733,0.357779324054718,-0.740673661231995 ,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.304371774196625,0.115475252270699,-0.945528030395508 ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.00773082999512553,0.120841763913631,-0.992641687393188 ,-0.000760512368287891,0.207898333668709,-0.978150188922882,-0.0685182884335518,0.227593377232552,-0.971342623233795 ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.437141418457031,0.161669790744781,-0.88474303483963 ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.679870665073395,0.332279711961746,-0.653732419013977 ,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.679870665073395,0.332279711961746,-0.653732419013977 ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.588195145130157,0.405691057443619,-0.699600756168365 ,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.588195145130157,0.405691057443619,-0.699600756168365 ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.335503816604614,0.489175528287888,-0.805074214935303 ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.335503816604614,0.489175528287888,-0.805074214935303 ,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.437141418457031,0.161669790744781,-0.88474303483963 ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061 ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.335503816604614,0.489175528287888,-0.805074214935303 ,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.335503816604614,0.489175528287888,-0.805074214935303 ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.257477760314941,0.382379919290543,-0.887406766414642 ,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.257477760314941,0.382379919290543,-0.887406766414642 ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.0627769380807877,0.434968650341034,-0.898254573345184 ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0627769380807877,0.434968650341034,-0.898254573345184 ,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.239463403820992,0.198724672198296,-0.950350344181061 ,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045 ,0.00121181993745267,0.232196122407913,-0.9726682305336,0.002942921128124,0.253444164991379,-0.967345535755157 ,-0.749469220638275,0.428192466497421,0.504922866821289,-0.803582847118378,0.542061448097229,0.245812878012657 ,-0.710639357566834,0.646875619888306,0.27666512131691,-0.617127954959869,0.561533391475677,0.551210701465607 ,-0.710639357566834,0.646875619888306,0.27666512131691,-0.60595041513443,0.795228064060211,-0.020889300853014 ,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.448102563619614,0.672870218753815,0.588599801063538 ,-0.617127954959869,0.561533391475677,0.551210701465607,-0.776123344898224,0.626794755458832,-0.0689988508820534 ,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.710639357566834,0.646875619888306,0.27666512131691 ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.844134092330933,0.36929926276207,0.388658910989761 ,-0.856849551200867,0.411835759878159,0.310161501169205,-0.817325711250305,0.505672991275787,0.276176601648331 ,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289 ,-0.767612516880035,0.418656378984451,0.485281258821487,-0.817325711250305,0.505672991275787,0.276176601648331 ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.776123344898224,0.626794755458832,-0.0689988508820534 ,-0.803582847118378,0.542061448097229,0.245812878012657,-0.817325711250305,0.505672991275787,0.276176601648331 ,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.931051731109619,0.363819122314453,0.027898857370019 ,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.817325711250305,0.505672991275787,0.276176601648331 ,-0.856849551200867,0.411835759878159,0.310161501169205,-0.989189743995667,0.0587216019630432,-0.134370610117912 ,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.941607177257538,0.224361434578896,-0.25107353925705 ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955 ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.941607177257538,0.224361434578896,-0.25107353925705 ,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.837151050567627,0.303785771131516,-0.454854130744934 ,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.941607177257538,0.224361434578896,-0.25107353925705 ,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.574827253818512,0.158569574356079,-0.80276358127594 ,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.941607177257538,0.224361434578896,-0.25107353925705 ,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.879830181598663,0.149797275662422,-0.451065003871918 ,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.970083713531494,0.0539310723543167,-0.236704483628273 ,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.879830181598663,0.149797275662422,-0.451065003871918 ,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.586808562278748,0.13275733590126,-0.798768520355225 ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.142651379108429,0.65512877702713,0.741927802562714 ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.229512825608253,0.568260371685028,0.790192425251007 ,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.142651379108429,0.65512877702713,0.741927802562714 ,-0.0943122506141663,0.53818953037262,0.837530434131622,0.0543623231351376,0.513473629951477,0.85638165473938 ,0.0616534538567066,0.625403761863709,0.777861833572388,-0.325974881649017,0.679336845874786,0.657451033592224 ,-0.429686725139618,0.66762501001358,0.607985317707062,-0.428986668586731,0.611180424690247,0.665153324604034 ,-0.279750615358353,0.610641419887543,0.74084860086441,-0.325974881649017,0.679336845874786,0.657451033592224 ,-0.279750615358353,0.610641419887543,0.74084860086441,-0.229512825608253,0.568260371685028,0.790192425251007 ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.309171378612518,0.749882876873016,0.584883511066437 ,-0.325974881649017,0.679336845874786,0.657451033592224,-0.241419494152069,0.682447910308838,0.689914107322693 ,-0.237944751977921,0.77955037355423,0.579382002353668,-0.429686725139618,0.66762501001358,0.607985317707062 ,-0.325974881649017,0.679336845874786,0.657451033592224,-0.309171378612518,0.749882876873016,0.584883511066437 ,-0.928196668624878,0.146431341767311,0.342065423727036,-0.85773640871048,0.318832546472549,0.403279215097427 ,-0.856573581695557,0.327088385820389,0.399117648601532,-0.91119110584259,0.208402961492538,0.355385720729828 ,-0.928196668624878,0.146431341767311,0.342065423727036,-0.91119110584259,0.208402961492538,0.355385720729828 ,-0.930396974086761,0.1596420109272,0.329963505268097,-0.939980566501617,0.104119330644608,0.324954867362976 ,-0.759151995182037,0.445082813501358,0.474962621927261,-0.856573581695557,0.327088385820389,0.399117648601532 ,-0.85773640871048,0.318832546472549,0.403279215097427,-0.76142829656601,0.432304978370667,0.483052164316177 ,-0.759151995182037,0.445082813501358,0.474962621927261,-0.76142829656601,0.432304978370667,0.483052164316177 ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.6037238240242,0.569068074226379,0.558282196521759 ,-0.183231085538864,0.776099979877472,0.603402972221375,-0.237944751977921,0.77955037355423,0.579382002353668 ,-0.241419494152069,0.682447910308838,0.689914107322693,-0.142651379108429,0.65512877702713,0.741927802562714 ,-0.183231085538864,0.776099979877472,0.603402972221375,-0.142651379108429,0.65512877702713,0.741927802562714 ,0.0616534538567066,0.625403761863709,0.777861833572388,0.0704773217439651,0.772313952445984,0.631319284439087 ,-0.933935105800629,0.157070308923721,0.321082711219788,-0.914615273475647,0.203247100114822,0.349527567625046 ,-0.961739301681519,0.162645190954208,0.22046323120594,-0.907475471496582,0.340031713247299,0.246711865067482 ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.221233636140823,-0.176490515470505,-0.959117710590363 ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.370549231767654,-0.159934684634209,-0.91493946313858 ,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.370549231767654,-0.159934684634209,-0.91493946313858 ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.246918469667435,-0.124969840049744,-0.96094423532486 ,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.246918469667435,-0.124969840049744,-0.96094423532486 ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.028486518189311,-0.148915618658066,-0.988439500331879 ,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.028486518189311,-0.148915618658066,-0.988439500331879 ,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.221233636140823,-0.176490515470505,-0.959117710590363 ,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.927974164485931,0.372219532728195,-0.0177929922938347 ,-0.907475471496582,0.340031713247299,0.246711865067482,-0.961739301681519,0.162645190954208,0.22046323120594 ,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.932697832584381,0.36027005314827,0.0167412776499987 ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.958630919456482,0.250774264335632,-0.134681105613709 ,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.958630919456482,0.250774264335632,-0.134681105613709 ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.85549122095108,0.405467689037323,-0.32207253575325 ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.85549122095108,0.405467689037323,-0.32207253575325 ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.766045868396759,0.61859118938446,-0.174696043133736 ,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.766045868396759,0.61859118938446,-0.174696043133736 ,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.932697832584381,0.36027005314827,0.0167412776499987 ,-0.646523416042328,0.744809150695801,0.165126398205757,-0.824783802032471,0.538173019886017,0.173497721552849 ,-0.855047225952148,0.419915407896042,0.304245471954346,-0.702866315841675,0.640832006931305,0.30872842669487 ,-0.646523416042328,0.744809150695801,0.165126398205757,-0.702866315841675,0.640832006931305,0.30872842669487 ,-0.49023100733757,0.783868074417114,0.381083190441132,-0.458671659231186,0.872726500034332,0.167238742113113 ,-0.429586619138718,0.728146016597748,0.53409618139267,-0.583837151527405,0.631729662418365,0.509952783584595 ,-0.6037238240242,0.569068074226379,0.558282196521759,-0.429686725139618,0.66762501001358,0.607985317707062,-0.49023100733757 ,0.783868074417114,0.381083190441132,-0.583837151527405,0.631729662418365,0.509952783584595,-0.429586619138718 ,0.728146016597748,0.53409618139267,-0.856573581695557,0.327088385820389,0.399117648601532,-0.759151995182037 ,0.445082813501358,0.474962621927261,-0.74214094877243,0.521113991737366,0.421505630016327,-0.849531948566437 ,0.369736075401306,0.376285374164581,-0.855047225952148,0.419915407896042,0.304245471954346,-0.849531948566437 ,0.369736075401306,0.376285374164581,-0.74214094877243,0.521113991737366,0.421505630016327,-0.702866315841675 ,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.702866315841675 ,0.640832006931305,0.30872842669487,-0.74214094877243,0.521113991737366,0.421505630016327,-0.583837151527405 ,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.583837151527405 ,0.631729662418365,0.509952783584595,-0.74214094877243,0.521113991737366,0.421505630016327,-0.759151995182037 ,0.445082813501358,0.474962621927261,-0.855047225952148,0.419915407896042,0.304245471954346,-0.824783802032471 ,0.538173019886017,0.173497721552849,-0.932598233222961,0.310681849718094,0.183677315711975,-0.922844409942627 ,0.263350307941437,0.281078040599823,-0.932598233222961,0.310681849718094,0.183677315711975,-0.953923344612122 ,0.216998100280762,0.207224562764168,-0.930396974086761,0.1596420109272,0.329963505268097,-0.922844409942627 ,0.263350307941437,0.281078040599823,-0.896636784076691,0.291213989257813,0.333521902561188,-0.936677098274231 ,0.272290170192719,0.220213681459427,-0.961739301681519,0.162645190954208,0.22046323120594,-0.914615273475647 ,0.203247100114822,0.349527567625046,-0.930396974086761,0.1596420109272,0.329963505268097,-0.953923344612122 ,0.216998100280762,0.207224562764168,-0.936677098274231,0.272290170192719,0.220213681459427,-0.896636784076691 ,0.291213989257813,0.333521902561188,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.968225657939911 ,0.246022939682007,0.0448530614376068,-0.953923344612122,0.216998100280762,0.207224562764168,-0.932598233222961 ,0.310681849718094,0.183677315711975,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.932598233222961 ,0.310681849718094,0.183677315711975,-0.824783802032471,0.538173019886017,0.173497721552849,-0.800187706947327 ,0.59970623254776,-0.00721557484939694,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.958630919456482 ,0.250774264335632,-0.134681105613709,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969021558761597 ,0.241314724087715,0.0525775291025639,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969310760498047 ,0.16829377412796,-0.179203346371651,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.993082284927368 ,0.103076130151749,0.0562400594353676,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.908903479576111 ,0.0964279100298882,-0.405704379081726,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.963100135326386 ,0.220396235585213,-0.154478579759598,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.912788510322571 ,0.242469280958176,-0.328672856092453,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.963100135326386 ,0.220396235585213,-0.154478579759598,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.936677098274231 ,0.272290170192719,0.220213681459427,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.993082284927368 ,0.103076130151749,0.0562400594353676,-0.961739301681519,0.162645190954208,0.22046323120594,-0.953923344612122 ,0.216998100280762,0.207224562764168,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.969021558761597 ,0.241314724087715,0.0525775291025639,-0.936677098274231,0.272290170192719,0.220213681459427,-0.641130149364471 ,0.283854395151138,-0.713006854057312,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.83020544052124 ,0.164738476276398,-0.532559931278229,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.811532735824585 ,0.254749119281769,-0.525849342346191,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.811532735824585 ,0.254749119281769,-0.525849342346191,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.83020544052124 ,0.164738476276398,-0.532559931278229,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.908903479576111 ,0.0964279100298882,-0.405704379081726,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.83020544052124 ,0.164738476276398,-0.532559931278229,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.713846147060394 ,0.0502549819648266,-0.698496997356415,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.83020544052124 ,0.164738476276398,-0.532559931278229,-0.688417077064514,0.155676782131195,-0.708411395549774,0.00778961461037397 ,0.31232625246048,-0.949942946434021,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.164242103695869 ,0.181451722979546,-0.969587445259094,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.275409698486328 ,0.318414241075516,-0.907062232494354,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.164242103695869 ,0.181451722979546,-0.969587445259094,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.35973909497261 ,0.0476123131811619,-0.931837379932404,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.164242103695869 ,0.181451722979546,-0.969587445259094,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.0150691494345665 ,0.027319710701704,-0.999513149261475,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.164242103695869 ,0.181451722979546,-0.969587445259094,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.275409698486328 ,0.318414241075516,-0.907062232494354,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.1039934232831 ,0.492859244346619,-0.863872170448303,-0.135065674781799,0.320166707038879,-0.937683582305908,0.00778961461037397 ,0.31232625246048,-0.949942946434021,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.1039934232831 ,0.492859244346619,-0.863872170448303,0.0223272144794464,0.483893781900406,-0.874841868877411,0.0394280813634396 ,0.674713432788849,-0.737025916576386,0.0223272144794464,0.483893781900406,-0.874841868877411,-0.1039934232831 ,0.492859244346619,-0.863872170448303,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.163053512573242 ,0.683581054210663,-0.711428463459015,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.1039934232831 ,0.492859244346619,-0.863872170448303,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.164138689637184 ,0.985963463783264,-0.0305693503469229,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.0709519162774086 ,0.962512910366058,-0.261791497468948,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.147578522562981 ,0.903031170368195,-0.403429329395294,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.0709519162774086 ,0.962512910366058,-0.261791497468948,-0.0524508766829968,0.905246913433075,-0.421636074781418,0.0622152015566826 ,0.901260554790497,-0.428787440061569,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0709519162774086 ,0.962512910366058,-0.261791497468948,0.0692925006151199,0.95879065990448,-0.27553403377533,0.0761537179350853 ,0.996121823787689,-0.044066745787859,0.0692925006151199,0.95879065990448,-0.27553403377533,-0.0709519162774086 ,0.962512910366058,-0.261791497468948,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.429686725139618 ,0.66762501001358,0.607985317707062,-0.309171378612518,0.749882876873016,0.584883511066437,-0.291583627462387 ,0.822390556335449,0.488521039485931,-0.429586619138718,0.728146016597748,0.53409618139267,-0.49023100733757 ,0.783868074417114,0.381083190441132,-0.429586619138718,0.728146016597748,0.53409618139267,-0.291583627462387 ,0.822390556335449,0.488521039485931,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149 ,0.915316820144653,0.346608310937881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.291583627462387 ,0.822390556335449,0.488521039485931,-0.227190643548965,0.852716088294983,0.470382422208786,-0.237944751977921 ,0.77955037355423,0.579382002353668,-0.227190643548965,0.852716088294983,0.470382422208786,-0.291583627462387 ,0.822390556335449,0.488521039485931,-0.309171378612518,0.749882876873016,0.584883511066437,-0.126044631004334 ,0.975940346717834,0.177913352847099,0.0787876397371292,0.981232225894928,0.175999522209167,0.0761537179350853 ,0.996121823787689,-0.044066745787859,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.126044631004334 ,0.975940346717834,0.177913352847099,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.164138689637184 ,0.985963463783264,-0.0305693503469229,-0.175430566072464,0.967789888381958,0.180573478341103,-0.160089418292046 ,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,0.0787876397371292 ,0.981232225894928,0.175999522209167,-0.126044631004334,0.975940346717834,0.177913352847099,-0.160089418292046 ,0.924165964126587,0.346826493740082,-0.126044631004334,0.975940346717834,0.177913352847099,-0.175430566072464 ,0.967789888381958,0.180573478341103,-0.205079987645149,0.915316820144653,0.346608310937881,-0.586808562278748 ,0.13275733590126,-0.798768520355225,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.778471529483795 ,0.0903224870562553,-0.621147274971008,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.718725085258484 ,-0.116646125912666,-0.685440003871918,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.778471529483795 ,0.0903224870562553,-0.621147274971008,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.933456838130951 ,-0.0391703061759472,-0.356544464826584,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.778471529483795 ,0.0903224870562553,-0.621147274971008,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494 ,0.0539310723543167,-0.236704483628273,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.778471529483795 ,0.0903224870562553,-0.621147274971008,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.433570116758347 ,0.900149524211884,-0.041807197034359,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.566805422306061 ,0.799840569496155,-0.197450518608093,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327 ,0.59970623254776,-0.00721557484939694,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.566805422306061 ,0.799840569496155,-0.197450518608093,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.727810025215149 ,0.613442480564117,-0.306563049554825,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.566805422306061 ,0.799840569496155,-0.197450518608093,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.348707258701324 ,0.879463195800781,-0.323956280946732,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.566805422306061 ,0.799840569496155,-0.197450518608093,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.604111194610596 ,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.824783802032471 ,0.538173019886017,0.173497721552849,-0.646523416042328,0.744809150695801,0.165126398205757,-0.604111194610596 ,0.796454071998596,-0.0266573838889599,-0.646523416042328,0.744809150695801,0.165126398205757,-0.458671659231186 ,0.872726500034332,0.167238742113113,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.237944751977921 ,0.77955037355423,0.579382002353668,-0.183231085538864,0.776099979877472,0.603402972221375,-0.184141546487808 ,0.85766065120697,0.480114668607712,-0.227190643548965,0.852716088294983,0.470382422208786,-0.205079987645149 ,0.915316820144653,0.346608310937881,-0.227190643548965,0.852716088294983,0.470382422208786,-0.184141546487808 ,0.85766065120697,0.480114668607712,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619 ,0.932616472244263,0.352324455976486,-0.160089418292046,0.924165964126587,0.346826493740082,-0.184141546487808 ,0.85766065120697,0.480114668607712,0.0752492547035217,0.86371123790741,0.498337715864182,0.0704773217439651 ,0.772313952445984,0.631319284439087,0.0752492547035217,0.86371123790741,0.498337715864182,-0.184141546487808 ,0.85766065120697,0.480114668607712,-0.183231085538864,0.776099979877472,0.603402972221375,-0.896636784076691 ,0.291213989257813,0.333521902561188,-0.914615273475647,0.203247100114822,0.349527567625046,-0.90123462677002 ,0.253379285335541,0.351532429456711,-0.893953561782837,0.312333762645721,0.321394920349121,-0.896636784076691 ,0.291213989257813,0.333521902561188,-0.893953561782837,0.312333762645721,0.321394920349121,-0.939980566501617 ,0.104119330644608,0.324954867362976,-0.930396974086761,0.1596420109272,0.329963505268097,-0.930396974086761 ,0.1596420109272,0.329963505268097,-0.91119110584259,0.208402961492538,0.355385720729828,-0.897303998470306,0.274592310190201 ,0.345607608556747,-0.922844409942627,0.263350307941437,0.281078040599823,-0.855047225952148,0.419915407896042 ,0.304245471954346,-0.897303998470306,0.274592310190201,0.345607608556747,-0.849531948566437,0.369736075401306 ,0.376285374164581,-0.856573581695557,0.327088385820389,0.399117648601532,-0.849531948566437,0.369736075401306 ,0.376285374164581,-0.897303998470306,0.274592310190201,0.345607608556747,-0.91119110584259,0.208402961492538 ,0.355385720729828,-0.429686725139618,0.66762501001358,0.607985317707062,-0.6037238240242,0.569068074226379,0.558282196521759 ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.428986668586731,0.611180424690247,0.665153324604034 ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.555550515651703,0.455664992332459,-0.695509195327759 ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.622987747192383,0.608749032020569,-0.491234064102173 ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.622987747192383,0.608749032020569,-0.491234064102173 ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.85549122095108,0.405467689037323,-0.32207253575325 ,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.85549122095108,0.405467689037323,-0.32207253575325 ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.811532735824585,0.254749119281769,-0.525849342346191 ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.811532735824585,0.254749119281769,-0.525849342346191 ,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.555550515651703,0.455664992332459,-0.695509195327759 ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.350460797548294,0.80544102191925,-0.477956026792526 ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.539688348770142,0.787357926368713,-0.297999978065491 ,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.539688348770142,0.787357926368713,-0.297999978065491 ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.622987747192383,0.608749032020569,-0.491234064102173 ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.622987747192383,0.608749032020569,-0.491234064102173 ,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.350460797548294,0.80544102191925,-0.477956026792526 ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.0524508766829968,0.905246913433075,-0.421636074781418 ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.136522889137268,0.827674627304077,-0.544349312782288 ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.136522889137268,0.827674627304077,-0.544349312782288 ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0733590647578239,0.681655049324036,-0.727986812591553 ,0.0394280813634396,0.674713432788849,-0.737025916576386,-0.0733590647578239,0.681655049324036,-0.727986812591553 ,-0.0537863597273827,0.825741946697235,-0.561477720737457,0.0535563454031944,0.82038402557373,-0.569299399852753 ,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0535563454031944,0.82038402557373,-0.569299399852753 ,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0524508766829968,0.905246913433075,-0.421636074781418 ,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881 ,-0.175430566072464,0.967789888381958,0.180573478341103,-0.275193452835083,0.944830358028412,0.177662998437881 ,-0.280090749263763,0.893176853656769,0.351829946041107,-0.275193452835083,0.944830358028412,0.177662998437881 ,-0.458671659231186,0.872726500034332,0.167238742113113,-0.49023100733757,0.783868074417114,0.381083190441132 ,-0.275193452835083,0.944830358028412,0.177662998437881,-0.175430566072464,0.967789888381958,0.180573478341103 ,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.272943913936615,0.961116194725037,-0.0419191792607307 ,-0.275193452835083,0.944830358028412,0.177662998437881,-0.272943913936615,0.961116194725037,-0.0419191792607307 ,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.458671659231186,0.872726500034332,0.167238742113113 ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.236552119255066,0.898081064224243,-0.370801120996475 ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.163341224193573,0.954490721225739,-0.249533846974373 ,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.163341224193573,0.954490721225739,-0.249533846974373 ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.272943913936615,0.961116194725037,-0.0419191792607307 ,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.272943913936615,0.961116194725037,-0.0419191792607307 ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.395432621240616,0.890730679035187,-0.224124699831009 ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.395432621240616,0.890730679035187,-0.224124699831009 ,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.236552119255066,0.898081064224243,-0.370801120996475 ,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.136522889137268,0.827674627304077,-0.544349312782288 ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.236552119255066,0.898081064224243,-0.370801120996475 ,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.236552119255066,0.898081064224243,-0.370801120996475 ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.350460797548294,0.80544102191925,-0.477956026792526 ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.350460797548294,0.80544102191925,-0.477956026792526 ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.271187722682953,0.674484729766846,-0.686678647994995 ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.271187722682953,0.674484729766846,-0.686678647994995 ,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.136522889137268,0.827674627304077,-0.544349312782288 ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.555550515651703,0.455664992332459,-0.695509195327759 ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.443566411733627,0.305741757154465,-0.84247899055481 ,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.443566411733627,0.305741757154465,-0.84247899055481 ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.217446804046631,0.495308041572571,-0.841062903404236 ,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.217446804046631,0.495308041572571,-0.841062903404236 ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.271187722682953,0.674484729766846,-0.686678647994995 ,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.271187722682953,0.674484729766846,-0.686678647994995 ,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.555550515651703,0.455664992332459,-0.695509195327759 ,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.325825273990631,0.178449675440788,-0.928436100482941 ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.443566411733627,0.305741757154465,-0.84247899055481 ,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.443566411733627,0.305741757154465,-0.84247899055481 ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.688417077064514,0.155676782131195,-0.708411395549774 ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.688417077064514,0.155676782131195,-0.708411395549774 ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.542270302772522,0.0508554428815842,-0.838663637638092 ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.542270302772522,0.0508554428815842,-0.838663637638092 ,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.325825273990631,0.178449675440788,-0.928436100482941 ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.562148034572601,-0.142533272504807,-0.814661800861359 ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.676815629005432,0.0292502902448177,-0.735571205615997 ,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.676815629005432,0.0292502902448177,-0.735571205615997 ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.481821954250336,-0.034151516854763,-0.875603377819061 ,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.481821954250336,-0.034151516854763,-0.875603377819061 ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.370549231767654,-0.159934684634209,-0.91493946313858 ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.370549231767654,-0.159934684634209,-0.91493946313858 ,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.562148034572601,-0.142533272504807,-0.814661800861359 ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.186824142932892,0.0393546596169472,-0.981604754924774 ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.37091401219368,-0.0905782580375671,-0.924239337444305 ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.37091401219368,-0.0905782580375671,-0.924239337444305 ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.221233636140823,-0.176490515470505,-0.959117710590363 ,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.221233636140823,-0.176490515470505,-0.959117710590363 ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.0252742562443018,-0.106068439781666,-0.994037568569183 ,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.0252742562443018,-0.106068439781666,-0.994037568569183 ,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.186824142932892,0.0393546596169472,-0.981604754924774 ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.542270302772522,0.0508554428815842,-0.838663637638092 ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.725374639034271,-0.054319828748703,-0.68620765209198 ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.725374639034271,-0.054319828748703,-0.68620765209198 ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.562148034572601,-0.142533272504807,-0.814661800861359 ,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.562148034572601,-0.142533272504807,-0.814661800861359 ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.37091401219368,-0.0905782580375671,-0.924239337444305 ,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.37091401219368,-0.0905782580375671,-0.924239337444305 ,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.542270302772522,0.0508554428815842,-0.838663637638092 ,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.800398170948029,-0.0439908429980278,-0.597852528095245 ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.725374639034271,-0.054319828748703,-0.68620765209198 ,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.725374639034271,-0.054319828748703,-0.68620765209198 ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.826241433620453,0.061872124671936,-0.559907972812653 ,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.826241433620453,0.061872124671936,-0.559907972812653 ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.86995929479599,-0.0271206852048635,-0.492377251386642 ,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.86995929479599,-0.0271206852048635,-0.492377251386642 ,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.800398170948029,-0.0439908429980278,-0.597852528095245 ,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.969310760498047,0.16829377412796,-0.179203346371651 ,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128 ,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.969310760498047,0.16829377412796,-0.179203346371651 ,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.998881757259369,0.0267399735748768,-0.0389897488057613 ,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.989189743995667,0.0587216019630432,-0.134370610117912 ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999627530574799,0.0187976788729429,-0.0197845976799726 ,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.933456838130951,-0.0391703061759472,-0.356544464826584 ,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273 ,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.999627530574799,0.0187976788729429,-0.0197845976799726 ,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.437141418457031,0.161669790744781,-0.88474303483963 ,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.586808562278748,0.13275733590126,-0.798768520355225 ,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.437141418457031,0.161669790744781,-0.88474303483963 ,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502 ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061 ,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.372676461935043,-0.122319355607033,-0.919864237308502 ,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.239463403820992,0.198724672198296,-0.950350344181061 ,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691 ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.13601079583168,0.398971199989319,-0.906820297241211 ,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.211731195449829,0.50760555267334,-0.835168540477753 ,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.178532913327217,0.211587846279144,-0.960914433002472 ,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.255872219800949,0.412295579910278,-0.874380767345428 ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.568679571151733,0.357779324054718,-0.740673661231995 ,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.255872219800949,0.412295579910278,-0.874380767345428 ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.255872219800949,0.412295579910278,-0.874380767345428 ,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.322734087705612,0.735918641090393,-0.5952028632164 ,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.0685182884335518,0.227593377232552,-0.971342623233795 ,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.13601079583168,0.398971199989319,-0.906820297241211 ,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.0516404360532761,0.365945398807526,-0.929202437400818 ,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.109456099569798,0.459850668907166,-0.881224572658539 ,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.000760512368287891,0.207898333668709,-0.978150188922882 ,0.0102010685950518,0.341328680515289,-0.939888656139374,-0.0516404360532761,0.365945398807526,-0.929202437400818 ,-0.0685182884335518,0.227593377232552,-0.971342623233795,0.0102010685950518,0.341328680515289,-0.939888656139374 ,0.010585374198854,0.345912545919418,-0.938207030296326,-0.0301786828786135,0.377186805009842,-0.925645351409912 ,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.861315131187439,0.181052923202515,0.474716812372208 ,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568 ,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.811837613582611,0.121092565357685,-0.571188449859619 ,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.0667830258607864,-0.603913366794586,-0.794247210025787 ,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.485446602106094,-0.599754393100739,0.636110246181488 ,0.775241792201996,-0.45661398768425,0.436467438936234,0.615995168685913,-0.740946054458618,0.267486304044724 ,0.43514209985733,-0.748737931251526,0.500042855739594,-0.575954735279083,-0.540566444396973,0.613240599632263 ,-0.743858754634857,0.1927819699049,0.639929115772247,-0.861315131187439,0.181052923202515,0.474716812372208 ,0.151796370744705,-0.893162906169891,0.423341274261475,0.315651625394821,-0.933804154396057,0.168445229530334 ,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.358404159545898,-0.845226526260376,0.396407097578049 ,0.43514209985733,-0.748737931251526,0.500042855739594,0.615995168685913,-0.740946054458618,0.267486304044724 ,0.315651625394821,-0.933804154396057,0.168445229530334,0.151796370744705,-0.893162906169891,0.423341274261475 ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.864985883235931,0.37462642788887,0.333847969770432 ,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432 ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.83081316947937,0.301315695047379,0.467929810285568 ,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.83081316947937,0.301315695047379,0.467929810285568 ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.816609680652618,-0.561123669147491,0.135236501693726 ,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.0667830258607864,-0.603913366794586,-0.794247210025787 ,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.393669724464417,-0.396909922361374,0.829148173332214 ,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.187731966376305,-0.0942238569259644,0.977690398693085 ,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.00827599223703146,-0.428946763277054,0.903291881084442 ,0.033345639705658,-0.401991754770279,0.915035903453827,-0.139739543199539,-0.751490116119385,0.644775569438934 ,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.129767522215843,-0.742323935031891,0.657354950904846 ,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0722988545894623,-0.821142494678497,0.566125333309174 ,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.139739543199539,-0.751490116119385,0.644775569438934 ,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0295225456357002,-0.382050126791,0.923669934272766 ,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.626258373260498,-0.747960209846497,0.21990005671978 ,-0.758384525775909,0.243889003992081,0.604459345340729,-0.468296974897385,-0.39009964466095,0.792792677879334 ,-0.758384525775909,0.243889003992081,0.604459345340729,-0.100514478981495,0.314375013113022,0.943962454795837 ,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.426155984401703,-0.544485569000244,0.722444832324982 ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.685877442359924,-0.687307178974152,0.239125445485115 ,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.426155984401703,-0.544485569000244,0.722444832324982 ,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.632458329200745,-0.745043694972992,0.211911231279373 ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.20097516477108,-0.349854558706284,0.914992213249207 ,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.685877442359924,-0.687307178974152,0.239125445485115 ,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.685877442359924,-0.687307178974152,0.239125445485115 ,-0.660850763320923,0.309517800807953,0.683721423149109,-0.758384525775909,0.243889003992081,0.604459345340729 ,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.887657046318054,-0.456045299768448,0.063934437930584 ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.660850763320923,0.309517800807953,0.683721423149109 ,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.726677179336548,-0.644755423069,0.237130090594292 ,0.255169302225113,-0.0558453612029552,0.965282320976257,0.330043107271194,0.436470597982407,0.83699756860733 ,0.185406669974327,0.360577255487442,0.914116144180298,0.134034633636475,-0.240539237856865,0.961340487003326 ,0.133207947015762,0.0763719230890274,0.988141179084778,0.0240508019924164,0.026220079511404,0.999366819858551 ,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0475814715027809,0.0593862198293209,0.997100412845612 ,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0073667336255312,-0.00580848380923271,0.999956011772156 ,-0.144208893179893,0.115719296038151,0.982757806777954,-0.100514478981495,0.314375013113022,0.943962454795837 ,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752 ,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271 ,-0.100514478981495,0.314375013113022,0.943962454795837,0.24859219789505,0.926495909690857,0.282501816749573 ,0.0432916954159737,0.796547591686249,0.603023827075958,0.0266619008034468,0.262281715869904,0.964622974395752 ,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.629961490631104,0.0401515737175941,0.775587737560272 ,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.395585596561432,-0.109408371150494,0.911889135837555 ,-0.401081025600433,-0.243629589676857,0.883050739765167,0.255169302225113,-0.0558453612029552,0.965282320976257 ,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0240508019924164,0.026220079511404,0.999366819858551 ,0.133207947015762,0.0763719230890274,0.988141179084778,0.134034633636475,-0.240539237856865,0.961340487003326 ,0.0174392946064472,-0.157727032899857,0.987328767776489,0.0791192501783371,-0.0643641576170921,0.994785130023956 ,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956 ,-0.271942734718323,0.215774357318878,0.93781054019928,-0.402321964502335,0.279689967632294,0.871728479862213 ,0.0240508019924164,0.026220079511404,0.999366819858551,-0.158640176057816,0.0965946391224861,0.982600033283234 ,-0.271942734718323,0.215774357318878,0.93781054019928,0.0791192501783371,-0.0643641576170921,0.994785130023956 ,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.725494682788849,-0.035611480474472,0.687305808067322 ,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.284841567277908,0.292440235614777,0.912876784801483 ,-0.498006135225296,0.389301002025604,0.77487713098526,0.134034633636475,-0.240539237856865,0.961340487003326 ,0.185406669974327,0.360577255487442,0.914116144180298,-0.0424226783216,0.296286582946777,0.954156458377838,-0.0849227532744408 ,-0.304428428411484,0.948742032051086,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.069992259144783 ,0.555320203304291,0.828686058521271,0.187445163726807,0.511297464370728,0.838712811470032,0.133207947015762 ,0.0763719230890274,0.988141179084778,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0241487547755241 ,-0.0255803689360619,0.999381065368652,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0073667336255312 ,-0.00580848380923271,0.999956011772156,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.466067016124725 ,0.290591061115265,0.835666418075562,-0.144208893179893,0.115719296038151,0.982757806777954,-0.0658838152885437 ,0.0649923235177994,0.995708465576172,-0.0241487547755241,-0.0255803689360619,0.999381065368652,0.0240508019924164 ,0.026220079511404,0.999366819858551,-0.402321964502335,0.279689967632294,0.871728479862213,-0.474541217088699 ,0.29422801733017,0.829602658748627,-0.847861528396606,0.113259613513947,0.517979800701141,-0.602232098579407 ,0.563644886016846,0.565350294113159,-0.702935457229614,0.63435697555542,0.321672111749649,-0.807841360569,0.43371844291687 ,0.399099737405777,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.498006135225296,0.389301002025604 ,0.77487713098526,-0.602232098579407,0.563644886016846,0.565350294113159,-0.847861528396606,0.113259613513947 ,0.517979800701141,0.792737483978271,-0.494514644145966,-0.356402337551117,0.759971797466278,-0.612702488899231 ,0.216883733868599,0.336174368858337,0.935995519161224,0.104399025440216,0.879603147506714,0.140207409858704 ,-0.454576879739761,-0.134053289890289,0.873388648033142,-0.468211501836777,0.879603147506714,0.140207409858704 ,-0.454576879739761,0.336174368858337,0.935995519161224,0.104399025440216,-0.551566660404205,0.823827803134918 ,-0.13069823384285,-0.225193619728088,0.461788326501846,0.85792738199234,-0.13601952791214,0.794801294803619 ,0.591430127620697,-0.350341945886612,0.815486073493958,0.460698395967484,-0.450388491153717,0.534071862697601 ,0.715484082698822,0.336174368858337,0.935995519161224,0.104399025440216,0.279289931058884,0.161584615707397 ,0.94651335477829,-0.328838348388672,0.935817182064056,0.126931354403496,-0.761701762676239,0.421244710683823 ,0.492304056882858,-0.630214631557465,0.655408442020416,0.416256308555603,-0.673884630203247,0.467902958393097 ,0.571792244911194,-0.630214631557465,0.655408442020416,0.416256308555603,-0.702385485172272,0.688902199268341 ,0.179076477885246,-0.328838348388672,0.935817182064056,0.126931354403496,-0.630214631557465,0.655408442020416 ,0.416256308555603,-0.124414332211018,0.380547553300858,0.91635400056839,-0.422783136367798,-0.0330428369343281 ,0.905628323554993,-0.713547646999359,0.198780298233032,0.671815574169159,-0.673884630203247,0.467902958393097 ,0.571792244911194,0.327664911746979,0.551296949386597,-0.767272710800171,0.30904021859169,0.371187627315521 ,-0.875621974468231,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0351283065974712,0.990967154502869 ,-0.12942211329937,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0348765477538109,0.952687978744507 ,-0.301942437887192,-0.394997388124466,0.90861302614212,0.135644435882568,-0.350341945886612,0.815486073493958 ,0.460698395967484,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.532891869544983,0.203911662101746 ,-0.821246802806854,0.120067529380322,0.82549375295639,-0.55149233341217,0.30904021859169,0.371187627315521,-0.875621974468231 ,0.532891869544983,0.203911662101746,-0.821246802806854,0.516829967498779,0.529717087745667,-0.67252254486084 ,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.120067529380322,0.82549375295639,-0.55149233341217 ,-0.450388491153717,0.534071862697601,0.715484082698822,-0.350341945886612,0.815486073493958,0.460698395967484 ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.548773884773254,0.701416075229645,0.454821705818176 ,-0.225193619728088,0.461788326501846,0.85792738199234,-0.450388491153717,0.534071862697601,0.715484082698822 ,-0.484222084283829,0.366713851690292,0.794386506080627,-0.245125457644463,0.30829644203186,0.919166386127472 ,0.0420866049826145,0.997517287731171,0.0564619302749634,-0.0351283065974712,0.990967154502869,-0.12942211329937 ,-0.350341945886612,0.815486073493958,0.460698395967484,-0.13601952791214,0.794801294803619,0.591430127620697 ,0.327664911746979,0.551296949386597,-0.767272710800171,-0.0351283065974712,0.990967154502869,-0.12942211329937 ,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709 ,0.0685662999749184,0.738678991794586,0.670561015605927,-0.0397870242595673,0.770527541637421,0.636163771152496 ,-0.0782447457313538,0.412172168493271,0.907739996910095,0.0410983338952065,0.381287395954132,0.923542559146881 ,-0.13601952791214,0.794801294803619,0.591430127620697,-0.225193619728088,0.461788326501846,0.85792738199234 ,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0397870242595673,0.770527541637421,0.636163771152496 ,-0.523407638072968,0.841484844684601,0.133969098329544,-0.548773884773254,0.701416075229645,0.454821705818176 ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.262664377689362,0.933591663837433,-0.243749871850014 ,-0.728943645954132,0.505101680755615,0.462075144052505,-0.655175447463989,0.41560024023056,0.630889534950256 ,-0.548773884773254,0.701416075229645,0.454821705818176,-0.523407638072968,0.841484844684601,0.133969098329544 ,-0.484222084283829,0.366713851690292,0.794386506080627,-0.450388491153717,0.534071862697601,0.715484082698822 ,-0.548773884773254,0.701416075229645,0.454821705818176,-0.655175447463989,0.41560024023056,0.630889534950256 ,-0.261222988367081,0.14337170124054,0.954571664333344,-0.12591940164566,0.150871932506561,0.980500876903534 ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.245125457644463,0.30829644203186,0.919166386127472 ,-0.225193619728088,0.461788326501846,0.85792738199234,-0.245125457644463,0.30829644203186,0.919166386127472 ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.0782447457313538,0.412172168493271,0.907739996910095 ,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.101943291723728,0.319687753915787,0.942022979259491 ,0.0325647220015526,0.328354388475418,0.943993091583252,0.0410983338952065,0.381287395954132,0.923542559146881 ,0.0226862858980894,0.138102903962135,0.990158021450043,0.0325647220015526,0.328354388475418,0.943993091583252 ,-0.101943291723728,0.319687753915787,0.942022979259491,-0.12591940164566,0.150871932506561,0.980500876903534 ,0.0685662999749184,0.738678991794586,0.670561015605927,0.078812912106514,0.980074644088745,0.182324379682541 ,0.0115500893443823,0.988494396209717,0.150815844535828,-0.0397870242595673,0.770527541637421,0.636163771152496 ,-0.13601952791214,0.794801294803619,0.591430127620697,-0.0397870242595673,0.770527541637421,0.636163771152496 ,0.0115500893443823,0.988494396209717,0.150815844535828,0.0420866049826145,0.997517287731171,0.0564619302749634 ,0.201275274157524,0.759530663490295,-0.618547856807709,0.0420866049826145,0.997517287731171,0.0564619302749634 ,0.0115500893443823,0.988494396209717,0.150815844535828,0.0605678260326386,0.873000860214233,-0.483943223953247 ,0.0339763574302197,0.937289535999298,-0.346891850233078,0.0605678260326386,0.873000860214233,-0.483943223953247 ,0.0115500893443823,0.988494396209717,0.150815844535828,0.078812912106514,0.980074644088745,0.182324379682541 ,0.516829967498779,0.529717087745667,-0.67252254486084,0.532891869544983,0.203911662101746,-0.821246802806854 ,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.516829967498779,0.529717087745667,-0.67252254486084 ,0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014 ,-0.394997388124466,0.90861302614212,0.135644435882568,-0.0348765477538109,0.952687978744507,-0.301942437887192 ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.26505383849144,0.683794975280762,-0.679831504821777 ,0.516829967498779,0.529717087745667,-0.67252254486084,0.784418284893036,-0.0482183061540127,-0.61835503578186 ,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.0352616421878338,0.240770235657692,0.969941377639771 ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.185788631439209,-0.25801420211792,0.948109328746796 ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.185788631439209,-0.25801420211792,0.948109328746796 ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.375643879175186,0.212974905967712,0.901960849761963 ,-0.330226361751556,0.315774649381638,0.889514982700348,-0.375643879175186,0.212974905967712,0.901960849761963 ,-0.1695187240839,0.251378893852234,0.952928125858307,-0.159210100769997,0.301312178373337,0.940139949321747 ,0.0384946875274181,0.285418510437012,0.957629561424255,-0.159210100769997,0.301312178373337,0.940139949321747 ,-0.1695187240839,0.251378893852234,0.952928125858307,0.0352616421878338,0.240770235657692,0.969941377639771 ,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.663377344608307,-0.740112125873566,0.110292978584766 ,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.603027641773224,-0.78847599029541,-0.121091783046722 ,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.594583511352539,-0.803299486637115,0.0343575030565262 ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.428953319787979,-0.860944986343384,-0.273446142673492 ,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.641941249370575,-0.68879646062851,0.336854338645935 ,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.84095025062561,-0.471284002065659,0.265883654356003 ,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.641941249370575,-0.68879646062851,0.336854338645935 ,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.663377344608307,-0.740112125873566,0.110292978584766 ,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.162915915250778,-0.763080775737762,0.625432789325714 ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.35957869887352,-0.654971122741699,0.66461718082428 ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.35957869887352,-0.654971122741699,0.66461718082428 ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.185788631439209,-0.25801420211792,0.948109328746796 ,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.185788631439209,-0.25801420211792,0.948109328746796 ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.0397491529583931,-0.678164541721344,0.733834326267242 ,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0397491529583931,-0.678164541721344,0.733834326267242 ,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.162915915250778,-0.763080775737762,0.625432789325714 ,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.375643879175186,0.212974905967712,0.901960849761963 ,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.525489568710327,-0.438258349895477,0.729239583015442 ,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.375643879175186,0.212974905967712,0.901960849761963 ,-0.330226361751556,0.315774649381638,0.889514982700348,-0.490771174430847,0.254273563623428,0.833359837532043 ,-0.159210100769997,0.301312178373337,0.940139949321747,-0.15314356982708,-0.075783796608448,0.985293805599213 ,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.330226361751556,0.315774649381638,0.889514982700348 ,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.15314356982708,-0.075783796608448,0.985293805599213 ,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255 ,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.360249727964401,-0.149908572435379,0.920732080936432 ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.523851454257965,-0.504004776477814,0.686701416969299 ,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.261337131261826,-0.401412606239319,0.877821683883667 ,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.0108760436996818,-0.349400758743286,0.936910271644592 ,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.00295650074258447,-0.253587752580643,0.967307865619659 ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.360249727964401,-0.149908572435379,0.920732080936432 ,0.0744598954916,0.293609887361526,0.953020930290222,0.0348379723727703,0.239972576498985,0.970154345035553,0.0381993055343628 ,0.285694986581802,0.957558989524841,-0.109741598367691,0.221520185470581,0.968961119651794,0.0744598954916,0.293609887361526 ,0.953020930290222,0.205764874815941,0.144822359085083,0.967826068401337,0.026632534340024,0.124120466411114 ,0.991909682750702,0.0348379723727703,0.239972576498985,0.970154345035553,-0.6155686378479,-0.697471797466278 ,0.366890132427216,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.305121690034866,-0.661639988422394 ,0.684933066368103,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.055518988519907,-0.839309513568878 ,0.540811538696289,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394 ,0.684933066368103,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.531166195869446,0.151813089847565 ,0.833555817604065,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.861315131187439,0.181052923202515 ,0.474716812372208,-0.743858754634857,0.1927819699049,0.639929115772247,-0.616519212722778,-0.455342262983322 ,0.642314195632935,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.531166195869446,0.151813089847565 ,0.833555817604065,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.522818684577942,-0.0568677671253681 ,0.850544929504395,-0.481455624103546,0.182786270976067,0.857198715209961,-0.760103762149811,0.153783366084099 ,0.631342172622681,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.775605142116547,-0.0662227943539619 ,0.627734959125519,-0.760103762149811,0.153783366084099,0.631342172622681,-0.872271299362183,0.143087893724442 ,0.467620134353638,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.872271299362183,0.143087893724442 ,0.467620134353638,-0.760103762149811,0.153783366084099,0.631342172622681,-0.719690024852753,0.419174522161484 ,0.553479015827179,-0.849210619926453,0.33398848772049,0.409014731645584,-0.44353261590004,0.469896525144577 ,0.763201177120209,-0.719690024852753,0.419174522161484,0.553479015827179,-0.760103762149811,0.153783366084099 ,0.631342172622681,-0.481455624103546,0.182786270976067,0.857198715209961,-0.762500584125519,0.610563993453979 ,0.214019775390625,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.840847790241241,0.534673869609833 ,0.0842547118663788,-0.72613924741745,0.535442233085632,0.431304275989532,-0.884765982627869,0.444219619035721 ,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.81624835729599,0.569451749324799 ,-0.0972798392176628,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.522650301456451,0.406982094049454 ,-0.749134302139282,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.841533124446869,0.268320113420486 ,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.522650301456451,0.406982094049454 ,-0.749134302139282,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.81624835729599,0.569451749324799 ,-0.0972798392176628,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.522650301456451,0.406982094049454 ,-0.749134302139282,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.729740858078003,-0.632296204566956 ,0.260153472423553,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.880486667156219,-0.258835464715958 ,-0.397174298763275,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.880486667156219,-0.258835464715958 ,-0.397174298763275,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.979476630687714,-0.044322844594717 ,0.196624115109444,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.880486667156219,-0.258835464715958 ,-0.397174298763275,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.737712860107422,-0.674677968025208 ,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.233076319098473,-0.804329991340637 ,0.546560764312744,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.710427701473236,-0.480556935071945 ,0.514157176017761,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.710427701473236,-0.480556935071945 ,0.514157176017761,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.151400625705719,-0.629788994789124 ,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,-0.151400625705719,-0.629788994789124 ,0.761868536472321,-0.162659510970116,-0.713988304138184,0.681001126766205,0.439482539892197,-0.499404758214951 ,0.74662572145462,0.0642944201827049,-0.547998011112213,0.834004998207092,0.439482539892197,-0.499404758214951 ,0.74662572145462,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.233076319098473,-0.804329991340637 ,0.546560764312744,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.151400625705719,-0.629788994789124 ,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,0.43514209985733,-0.748737931251526 ,0.500042855739594,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.151400625705719,-0.629788994789124 ,0.761868536472321,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248 ,0.800636351108551,-0.00470763072371483,0.279436647891998,0.960152566432953,0.0642944201827049,-0.547998011112213 ,0.834004998207092,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.531166195869446,0.151813089847565 ,0.833555817604065,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.0296379756182432,0.164347007870674 ,0.985957264900208,-0.186078935861588,0.178288474678993,0.966223537921906,-0.217106208205223,-0.0510895028710365 ,0.974810123443604,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.217106208205223,-0.0510895028710365 ,0.974810123443604,-0.186078935861588,0.178288474678993,0.966223537921906,-0.481455624103546,0.182786270976067 ,0.857198715209961,-0.44353261590004,0.469896525144577,0.763201177120209,-0.481455624103546,0.182786270976067 ,0.857198715209961,-0.186078935861588,0.178288474678993,0.966223537921906,-0.155023440718651,0.460458368062973 ,0.874039947986603,0.0497331917285919,0.445011228322983,0.894142985343933,-0.155023440718651,0.460458368062973 ,0.874039947986603,-0.186078935861588,0.178288474678993,0.966223537921906,0.0296379756182432,0.164347007870674 ,0.985957264900208,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.556434690952301,-0.213731065392494 ,0.802931845188141,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.217106208205223,-0.0510895028710365 ,0.974810123443604,0.0126708010211587,-0.0581304989755154,0.99822860956192,-0.217106208205223,-0.0510895028710365 ,0.974810123443604,-0.239064574241638,-0.198313489556313,0.950536668300629,0.000908877176698297,-0.206076413393021 ,0.97853547334671,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.976188123226166,-0.133096665143967 ,-0.171295195817947,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.884765982627869,0.444219619035721 ,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.884765982627869,0.444219619035721 ,-0.140918776392937,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.881412923336029,0.0769286975264549 ,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.881412923336029,0.0769286975264549 ,0.466039925813675,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.710427701473236,-0.480556935071945 ,0.514157176017761,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.710427701473236,-0.480556935071945 ,0.514157176017761,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.976188123226166,-0.133096665143967 ,-0.171295195817947,0.43514209985733,-0.748737931251526,0.500042855739594,0.151796370744705,-0.893162906169891 ,0.423341274261475,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.156405076384544,-0.596952438354492 ,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.156405076384544,-0.596952438354492 ,0.786883294582367,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.586622297763824,-0.114799492061138 ,0.801682829856873,-0.72613924741745,0.535442233085632,0.431304275989532,-0.690247058868408,0.178245946764946 ,0.701275527477264,-0.639836966991425,0.246874988079071,0.727778375148773,-0.659900903701782,0.452796697616577 ,0.59958815574646,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.586622297763824,-0.114799492061138 ,0.801682829856873,-0.639836966991425,0.246874988079071,0.727778375148773,-0.690247058868408,0.178245946764946 ,0.701275527477264,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351 ,0.681072294712067,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.690247058868408,0.178245946764946 ,0.701275527477264,-0.861315131187439,0.181052923202515,0.474716812372208,-0.844563007354736,0.0171194858849049 ,0.535182416439056,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.864985883235931,0.37462642788887 ,0.333847969770432,-0.83081316947937,0.301315695047379,0.467929810285568,-0.936657905578613,0.0257524941116571 ,0.349297523498535,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.616519212722778,-0.455342262983322 ,0.642314195632935,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.847315430641174,-0.0547459907829762 ,0.528260707855225,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.647243857383728,-0.405161768198013 ,0.645692884922028,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.80817985534668,-0.287789851427078 ,0.51383101940155,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.358404159545898,-0.845226526260376 ,0.396407097578049,-0.692233920097351,-0.67291522026062,0.260762959718704,0.151796370744705,-0.893162906169891 ,0.423341274261475,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.647243857383728,-0.405161768198013 ,0.645692884922028,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.34064969420433,-0.564744412899017 ,0.751679182052612,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.754464566707611,-0.0490087866783142 ,0.654508471488953,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.069260835647583,0.0269219465553761 ,0.997235238552094,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.14743447303772,-0.460478246212006 ,0.875341594219208,0.244968578219414,-0.0767860040068626,0.966485559940338,-0.523460209369659,-0.770274937152863 ,0.36423334479332,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.616519212722778,-0.455342262983322 ,0.642314195632935,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.80817985534668,-0.287789851427078 ,0.51383101940155,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.775605142116547,-0.0662227943539619 ,0.627734959125519,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.522818684577942,-0.0568677671253681 ,0.850544929504395,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.789951264858246,-0.250378400087357 ,0.559721052646637,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.248584538698196,-0.9084592461586 ,0.33601713180542,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.6155686378479,-0.697471797466278 ,0.366890132427216,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.055518988519907,-0.839309513568878 ,0.540811538696289,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.248584538698196,-0.9084592461586 ,0.33601713180542,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.523460209369659,-0.770274937152863 ,0.36423334479332,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.85713666677475,-0.480864852666855 ,0.184623166918755,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.80333799123764,-0.434850186109543 ,0.406882554292679,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.923407673835754,-0.172809228301048 ,0.342717438936234,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.892671883106232,-0.425682097673416 ,0.14809350669384,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.923407673835754,-0.172809228301048 ,0.342717438936234,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.951001286506653,-0.02836849167943 ,0.307882815599442,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.923407673835754,-0.172809228301048 ,0.342717438936234,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.706978023052216,-0.108872137963772 ,0.698805391788483,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.923407673835754,-0.172809228301048 ,0.342717438936234,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.530206859111786,0.100595757365227 ,0.841879546642303,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.395585596561432,-0.109408371150494 ,0.911889135837555,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.158640176057816,0.0965946391224861 ,0.982600033283234,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.126811400055885,-0.181621968746185 ,0.975157618522644,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.377197057008743,-0.298063486814499 ,0.876858353614807,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.56518691778183,0.0673309490084648 ,0.822210609912872,-0.53056800365448,-0.207617223262787,0.821822762489319,0.579925835132599,-0.717766225337982 ,-0.3853540122509,0.645713806152344,-0.220039650797844,-0.731188178062439,0.392777740955353,-0.563973963260651 ,-0.726401448249817,0.293798208236694,-0.882029175758362,-0.368384540081024,0.579925835132599,-0.717766225337982 ,-0.3853540122509,0.293798208236694,-0.882029175758362,-0.368384540081024,0.0681579038500786,-0.994212329387665 ,0.0830442756414413,0.161769852042198,-0.974958479404449,0.152598813176155,-0.218783125281334,-0.517780601978302 ,0.827065408229828,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.401645928621292,0.0858200713992119 ,0.911765038967133,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.218783125281334,-0.517780601978302 ,0.827065408229828,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.28600937128067,-0.592511594295502 ,0.753079414367676,-0.188662573695183,-0.633236289024353,0.750611901283264,0.293798208236694,-0.882029175758362 ,-0.368384540081024,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0193124283105135,-0.74210524559021 ,-0.670005083084106,-0.0615345053374767,-0.946400821208954,-0.317078918218613,0.293798208236694,-0.882029175758362 ,-0.368384540081024,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972 ,0.0704923868179321,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.53056800365448,-0.207617223262787 ,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.329664051532745,-0.557146191596985 ,0.762174308300018,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.070097453892231,-0.765305280685425 ,-0.639839172363281,-0.0787644907832146,-0.96135801076889,-0.263793289661407,-0.169070288538933,-0.950376808643341 ,-0.261149764060974,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0773185193538666,-0.996781229972839 ,-0.0211918447166681,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341 ,-0.261149764060974,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.65024209022522,-0.683634519577026 ,-0.331404685974121,0.24199965596199,-0.948591530323029,0.203986048698425,0.340434432029724,-0.915098071098328 ,0.216101616621017,0.626364231109619,-0.75530606508255,-0.192822501063347,0.00068405584897846,-0.208776980638504 ,0.977963030338287,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.125227466225624,-0.596286714076996 ,0.792944073677063,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.0406640991568565,-0.687796175479889 ,0.724763989448547,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.125227466225624,-0.596286714076996 ,0.792944073677063,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.447912156581879,-0.140877023339272 ,0.882909059524536,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.17153462767601,-0.247131928801537 ,0.953677952289581,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.194900542497635,-0.331308722496033 ,0.923172950744629,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.135216936469078,-0.381399750709534 ,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.0973072052001953,-0.992754817008972 ,0.0704923868179321,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.269127756357193,-0.79069060087204 ,0.549889624118805,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353 ,0.750611901283264,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.269127756357193,-0.79069060087204 ,0.549889624118805,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.215691208839417,-0.974491059780121 ,0.062003456056118,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.169070288538933,-0.950376808643341 ,-0.261149764060974,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341 ,-0.261149764060974,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.208596497774124,-0.74006187915802 ,-0.639371454715729,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0193124283105135,-0.74210524559021 ,-0.670005083084106,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.197991296648979,-0.942176342010498 ,-0.270376026630402,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972 ,0.0704923868179321,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.197991296648979,-0.942176342010498 ,-0.270376026630402,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.758384525775909,0.243889003992081 ,0.604459345340729,0.24859219789505,0.926495909690857,0.282501816749573,-0.100514478981495,0.314375013113022 ,0.943962454795837,0.00664448039606214,0.89234858751297,0.451297968626022,-0.109012864530087,0.977998495101929 ,0.177862659096718,-0.183847695589066,0.966428518295288,0.179488003253937,0.12853179872036,0.854913532733917 ,0.502595722675323,0.00664448039606214,0.89234858751297,0.451297968626022,0.12853179872036,0.854913532733917 ,0.502595722675323,0.187445163726807,0.511297464370728,0.838712811470032,-0.069992259144783,0.555320203304291 ,0.828686058521271,0.0171615201979876,0.876817524433136,0.480516880750656,0.046251967549324,0.890573501586914 ,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.004028111230582,0.993554711341858 ,-0.113281942903996,-0.0424226783216,0.296286582946777,0.954156458377838,0.185406669974327,0.360577255487442 ,0.914116144180298,0.046251967549324,0.890573501586914,0.452481597661972,0.0171615201979876,0.876817524433136 ,0.480516880750656,-0.109012864530087,0.977998495101929,0.177862659096718,0.00664448039606214,0.89234858751297 ,0.451297968626022,0.080908939242363,0.956137537956238,0.281522214412689,0.00727432640269399,0.986923277378082 ,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,0.00727432640269399,0.986923277378082 ,0.161026418209076,0.080908939242363,0.956137537956238,0.281522214412689,0.171542316675186,0.957118153572083 ,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,0.171542316675186,0.957118153572083,0.233448192477226 ,0.080908939242363,0.956137537956238,0.281522214412689,0.0432916954159737,0.796547591686249,0.603023827075958 ,-0.069992259144783,0.555320203304291,0.828686058521271,0.0432916954159737,0.796547591686249,0.603023827075958 ,0.080908939242363,0.956137537956238,0.281522214412689,0.00664448039606214,0.89234858751297,0.451297968626022 ,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.00044033964513801,0.857838094234467,0.51391988992691 ,0.225808262825012,0.957561135292053,-0.179129242897034,0.438933074474335,0.880430459976196,-0.179387643933296 ,-0.498006135225296,0.389301002025604,0.77487713098526,-0.284841567277908,0.292440235614777,0.912876784801483 ,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.0443753078579903,0.882909715175629,0.467441201210022 ,-0.702935457229614,0.63435697555542,0.321672111749649,-0.602232098579407,0.563644886016846,0.565350294113159 ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.323215007781982,0.943282067775726,0.0758355185389519 ,0.477838784456253,0.792661190032959,-0.378626853227615,-0.323215007781982,0.943282067775726,0.0758355185389519 ,-0.0831757560372353,0.939581155776978,0.33206781744957,0.510045230388641,0.828637421131134,-0.230681270360947 ,0.438933074474335,0.880430459976196,-0.179387643933296,0.510045230388641,0.828637421131134,-0.230681270360947 ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.0443753078579903,0.882909715175629,0.467441201210022 ,-0.498006135225296,0.389301002025604,0.77487713098526,-0.0443753078579903,0.882909715175629,0.467441201210022 ,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.602232098579407,0.563644886016846,0.565350294113159 ,0.618943631649017,0.169027715921402,-0.767032206058502,0.486043959856033,0.298038214445114,-0.821543991565704 ,0.426036864519119,0.191680565476418,-0.884166955947876,0.590149700641632,0.106324933469296,-0.800261437892914 ,0.699705183506012,0.427644014358521,-0.572305202484131,0.486043959856033,0.298038214445114,-0.821543991565704 ,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631 ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.933428227901459,-0.0520526021718979,0.354968011379242 ,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.961905956268311,0.126988083124161,0.242096945643425 ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.961905956268311,0.126988083124161,0.242096945643425 ,-0.92311555147171,0.291509866714478,0.250758200883865,-0.482406258583069,0.640618324279785,0.597404718399048 ,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.514883160591125,0.0328956842422485,0.856628954410553 ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.0580175220966339,-0.274829417467117,0.959740996360779 ,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.514883160591125,0.0328956842422485,0.856628954410553 ,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0252015665173531,-0.364970922470093,0.930677771568298 ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.483639568090439,-0.0787182152271271,0.871720254421234 ,-0.438263714313507,0.241573825478554,0.865775406360626,-0.281328231096268,0.118911549448967,0.952215552330017 ,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.899924099445343,0.231058403849602,0.369795471429825 ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.79594624042511,-0.000148868231917731,0.605367302894592 ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.79594624042511,-0.000148868231917731,0.605367302894592 ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.739963114261627,0.167704880237579,0.651405930519104 ,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.525420844554901,-0.165615484118462,0.834568381309509 ,-0.8117955327034,0.118040002882481,0.571886837482452,-0.899924099445343,0.231058403849602,0.369795471429825 ,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.0252015665173531,-0.364970922470093,0.930677771568298 ,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.525420844554901,-0.165615484118462,0.834568381309509 ,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.788007020950317,-0.198835611343384,0.582674324512482 ,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.683742940425873,-0.428563714027405,0.59061723947525 ,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.845083713531494,-0.00238247727975249,0.534628748893738 ,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.463877707719803,-0.190486788749695,0.865177571773529 ,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.463877707719803,-0.190486788749695,0.865177571773529 ,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.784394800662994,0.0327747240662575,0.61939537525177 ,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.784394800662994,0.0327747240662575,0.61939537525177 ,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.337558269500732,-0.222729057073593,0.914574325084686 ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.755013465881348,0.127179101109505,0.64325749874115 ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.611043751239777,-0.00789655186235905,0.791557371616364 ,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.611043751239777,-0.00789655186235905,0.791557371616364 ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.383932620286942,0.132088497281075,0.913864493370056 ,-0.462802797555923,0.335958212614059,0.820332646369934,-0.383932620286942,0.132088497281075,0.913864493370056 ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.585166156291962,0.298548936843872,0.753955662250519 ,-0.736577808856964,0.297644317150116,0.607339262962341,-0.585166156291962,0.298548936843872,0.753955662250519 ,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.755013465881348,0.127179101109505,0.64325749874115 ,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.700355410575867,0.465162545442581,-0.541411221027374 ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.899924099445343,0.231058403849602,0.369795471429825 ,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.899924099445343,0.231058403849602,0.369795471429825 ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.849758863449097,0.226472169160843,0.476046502590179 ,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.849758863449097,0.226472169160843,0.476046502590179 ,-0.926096200942993,0.356152534484863,0.124503806233406,-0.700355410575867,0.465162545442581,-0.541411221027374 ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.964182317256927,0.0220649186521769,0.264321088790894 ,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.949614703655243,0.0149662410840392,0.313062191009521 ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.964182317256927,0.0220649186521769,0.264321088790894 ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.917545735836029,0.0924613624811172,0.386730790138245 ,-0.736577808856964,0.297644317150116,0.607339262962341,-0.701379120349884,0.42103236913681,0.575151324272156 ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.585166156291962,0.298548936843872,0.753955662250519 ,-0.462802797555923,0.335958212614059,0.820332646369934,-0.585166156291962,0.298548936843872,0.753955662250519 ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.389257401227951,0.367899239063263,0.844469547271729 ,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.405952632427216,-0.25302666425705,0.878168523311615 ,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.490864455699921,-0.0663091167807579,0.868708908557892 ,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.76784873008728,-0.171090081334114,0.617362499237061 ,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.905689835548401,-0.202472388744354,0.372465878725052 ,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.463877707719803,-0.190486788749695,0.865177571773529 ,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.491244077682495,-0.115444600582123,0.863337576389313 ,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.514883160591125,0.0328956842422485,0.856628954410553 ,-0.670063674449921,0.104801684617996,0.734868168830872,-0.739276468753815,0.150933310389519,0.656269311904907 ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.305669218301773,-0.129191845655441,0.943332314491272 ,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.105134896934032,-0.328432708978653,0.938657879829407 ,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.305669218301773,-0.129191845655441,0.943332314491272 ,-0.383932620286942,0.132088497281075,0.913864493370056,-0.447645485401154,0.239924728870392,0.861423015594482 ,-0.611212015151978,0.257414042949677,0.74843692779541,-0.670063674449921,0.104801684617996,0.734868168830872 ,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.444255501031876,0.0529395937919617,0.894334673881531 ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.949614703655243,0.0149662410840392,0.313062191009521 ,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.813479363918304,-0.00906945671886206,0.581523001194 ,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.813479363918304,-0.00906945671886206,0.581523001194 ,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.917545735836029,0.0924613624811172,0.386730790138245 ,-0.895226001739502,0.157463803887367,0.416863977909088,-0.905333578586578,0.0703608244657516,0.418832272291183 ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.917545735836029,0.0924613624811172,0.386730790138245 ,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.905333578586578,0.0703608244657516,0.418832272291183 ,-0.895226001739502,0.157463803887367,0.416863977909088,-0.866631507873535,0.0684041753411293,0.49423748254776 ,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.971317529678345,-0.00673383427783847,0.237690657377243 ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.953642725944519,-0.152424976229668,0.259484380483627 ,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.953642725944519,-0.152424976229668,0.259484380483627 ,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.902801036834717,-0.117826566100121,0.413602739572525 ,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.913087010383606,-0.000645391584839672,0.407764256000519 ,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.999939262866974,0.00285967090167105,0.0106404405087233 ,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.913087010383606,-0.000645391584839672,0.407764256000519 ,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998331546783447,-0.0358092784881592,-0.0452967919409275 ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.442632555961609,-0.414916336536407,0.794934511184692 ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.354619354009628,-0.125306099653244,0.926576197147369 ,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.510507762432098,-0.444001197814941,0.736372709274292 ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.384387612342834,0.0363270901143551,0.922456741333008 ,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.403418689966202,-0.482175469398499,0.777663290500641 ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.456958532333374,-0.310317039489746,0.833601951599121 ,0.205764874815941,0.144822359085083,0.967826068401337,0.244968578219414,-0.0767860040068626,0.966485559940338 ,0.00927210599184036,-0.101372048258781,0.99480539560318,0.026632534340024,0.124120466411114,0.991909682750702 ,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.706978023052216,-0.108872137963772,0.698805391788483 ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.804705798625946,-0.0350312180817127,0.5926393866539 ,-0.44353261590004,0.469896525144577,0.763201177120209,-0.487235128879547,0.602307498455048,0.632319211959839 ,-0.709937155246735,0.54696124792099,0.443646997213364,-0.719690024852753,0.419174522161484,0.553479015827179 ,-0.594367325305939,0.527927815914154,0.606646299362183,-0.16526772081852,0.578359544277191,0.798865914344788 ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.654083967208862,0.394615858793259,0.64533132314682 ,-0.636985540390015,0.443951308727264,0.630203664302826,-0.654083967208862,0.394615858793259,0.64533132314682 ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.162020102143288,0.560337007045746,0.812263488769531 ,0.0571579374372959,0.555576980113983,0.829498171806335,-0.162020102143288,0.560337007045746,0.812263488769531 ,-0.179719179868698,0.465985059738159,0.866348028182983,0.0507387444376946,0.459851264953613,0.886545181274414 ,0.0581676289439201,0.571192860603333,0.818752288818359,0.0507387444376946,0.459851264953613,0.886545181274414 ,-0.179719179868698,0.465985059738159,0.866348028182983,-0.16526772081852,0.578359544277191,0.798865914344788 ,-0.298522680997849,0.122926026582718,0.946453094482422,-0.410987347364426,-0.221517965197563,0.884318470954895 ,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.0186418443918228,0.221836999058723,0.974905550479889 ,-0.409960985183716,0.234984055161476,0.881314098834991,-0.506407201290131,0.224265813827515,0.832620322704315 ,-0.49151623249054,0.284042507410049,0.823244571685791,-0.37480103969574,0.327312290668488,0.867404639720917 ,-0.469541937112808,0.464283794164658,0.750979959964752,-0.37480103969574,0.327312290668488,0.867404639720917 ,-0.49151623249054,0.284042507410049,0.823244571685791,-0.593105614185333,0.348213493824005,0.725929081439972 ,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0135245211422443,-0.380902349948883,0.924516320228577 ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.125742971897125,-0.662957012653351,0.738022148609161 ,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.125742971897125,-0.662957012653351,0.738022148609161 ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.253225147724152,-0.35441780090332,0.900147259235382 ,-0.261222988367081,0.14337170124054,0.954571664333344,-0.253225147724152,-0.35441780090332,0.900147259235382 ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.12591940164566,0.150871932506561,0.980500876903534 ,0.0226862858980894,0.138102903962135,0.990158021450043,-0.12591940164566,0.150871932506561,0.980500876903534 ,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.0135245211422443,-0.380902349948883,0.924516320228577 ,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.998881757259369,0.0267399735748768,-0.0389897488057613 ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999939262866974,0.00285967090167105,0.0106404405087233 ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.99934709072113,-0.0248590148985386,-0.0262197498232126 ,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998964846134186,-0.000229320270591415,-0.0454886071383953 ,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.99934709072113,-0.0248590148985386,-0.0262197498232126 ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.999919414520264,0.000697914510965347,-0.012677663937211 ,-0.428986668586731,0.611180424690247,0.665153324604034,-0.637912154197693,0.524314641952515,0.564058721065521 ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.542732357978821,0.501746475696564,0.673566699028015 ,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.959170579910278,-0.0044404505752027,0.282793402671814 ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.998166382312775,0.0398845337331295,0.0455306805670261 ,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.926191806793213,0.116400174796581,0.35863596200943 ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.910374224185944,0.148485288023949,0.3862264752388 ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.910374224185944,0.148485288023949,0.3862264752388 ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926795780658722,0.133818626403809,0.3509162068367 ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.948452949523926,0.0132069662213326,0.316642642021179 ,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.956733524799347,-0.225288674235344,0.18413570523262 ,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.956733524799347,-0.225288674235344,0.18413570523262 ,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.958112895488739,-0.0412571057677269,0.28340345621109 ,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958088934421539,-0.033353928476572,0.284522652626038 ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926191806793213,0.116400174796581,0.35863596200943 ,-0.914867162704468,0.153272107243538,0.373531401157379,-0.958088934421539,-0.033353928476572,0.284522652626038 ,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.926795780658722,0.133818626403809,0.3509162068367 ,-0.298522680997849,0.122926026582718,0.946453094482422,-0.0186418443918228,0.221836999058723,0.974905550479889 ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.235767140984535,0.346122115850449,0.908082246780396 ,-0.529072642326355,0.217875778675079,0.820129454135895,-0.392426759004593,0.205112621188164,0.896621465682983 ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.563694715499878,0.0446579419076443,0.824775099754334 ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.823809504508972,-0.013852178119123,0.566697418689728 ,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.519543766975403,-0.00114526739344001,0.854443073272705 ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.823809504508972,-0.013852178119123,0.566697418689728 ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.615767419338226,0.0138289360329509,0.787806570529938 ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.680799663066864,-0.208428665995598,0.702188968658447 ,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.530328452587128,0.10359351336956,0.841439306735992 ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.620847463607788,0.0176430195569992,0.783732831478119 ,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503 ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.635643780231476,-0.760042726993561,-0.135248005390167 ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.740522086620331,-0.668854534626007,0.065273717045784 ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.650723218917847,-0.735029816627502,-0.190500557422638 ,-0.918760776519775,0.045384906232357,0.392197400331497,-0.921404659748077,0.300344526767731,0.246589884161949 ,-0.912839949131012,0.366738528013229,0.179516360163689,-0.938549876213074,0.168846443295479,0.301023334264755 ,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.947903215885162,-0.069373294711113,0.310912847518921 ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.978283286094666,-0.0603795535862446,0.198282822966576 ,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.947903215885162,-0.069373294711113,0.310912847518921 ,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442 ,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.894654810428619,0.0708979144692421,0.441096633672714 ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.941187500953674,-0.0369091406464577,0.335862815380096 ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.941187500953674,-0.0369091406464577,0.335862815380096 ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.958259165287018,0.0577557012438774,0.280006498098373 ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.958259165287018,0.0577557012438774,0.280006498098373 ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.910374224185944,0.148485288023949,0.3862264752388 ,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.910374224185944,0.148485288023949,0.3862264752388 ,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.894654810428619,0.0708979144692421,0.441096633672714 ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.768178582191467,-0.575125515460968,0.281304657459259 ,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.774548470973969,-0.470689743757248,0.422523230314255 ,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.734221398830414,-0.668789088726044,0.116790995001793 ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.629563450813293,0.348871290683746,0.694218039512634 ,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752 ,-0.639506042003632,0.483837932348251,0.597438633441925,-0.409960985183716,0.234984055161476,0.881314098834991 ,-0.37480103969574,0.327312290668488,0.867404639720917,-0.629563450813293,0.348871290683746,0.694218039512634 ,-0.590761244297028,0.21027672290802,0.778963983058929,-0.694061398506165,-0.1789870262146,0.697310864925385 ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.626672208309174,0.255842447280884,0.736088693141937 ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.77647191286087,0.0245032440871,0.629675269126892 ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.573286294937134,-0.272017657756805,0.772883713245392 ,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.653488278388977,-0.259704351425171,0.710989952087402 ,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.669090986251831,0.108672223985195,0.735192239284515 ,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.762500584125519,0.610563993453979,0.214019775390625 ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.859274387359619,0.29542076587677,0.417581170797348 ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.81624835729599,0.569451749324799,-0.0972798392176628 ,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0867536216974258,0.288804531097412,0.953449428081512 ,0.0307731032371521,0.261024415493011,0.964841604232788,0.0340906009078026,0.177746370434761,0.983485698699951 ,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0867536216974258,0.288804531097412,0.953449428081512 ,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0915354415774345,0.261345416307449,0.960895359516144 ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.397862493991852,-0.0639909207820892,0.915210664272308 ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.572961747646332,-0.0624557621777058,0.817198932170868 ,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714 ,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.136693820357323,-0.553743422031403,0.821390867233276 ,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.136693820357323,-0.553743422031403,0.821390867233276 ,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.0377323105931282,-0.656355738639832,0.753507435321808 ,-0.52777773141861,0.480110883712769,0.700674116611481,-0.428986668586731,0.611180424690247,0.665153324604034 ,-0.542732357978821,0.501746475696564,0.673566699028015,-0.493602007627487,-0.18142081797123,0.850554823875427 ,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.162437900900841,-0.62639182806015,0.762395679950714 ,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.493602007627487,-0.18142081797123,0.850554823875427 ,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.261222988367081,0.14337170124054,0.954571664333344 ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.903494656085968,-0.23456384241581,0.358715981245041 ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.77647191286087,0.0245032440871,0.629675269126892 ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.84095025062561,-0.471284002065659,0.265883654356003 ,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.834424376487732,-0.133758425712585,0.534644365310669 ,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.331932127475739,-0.817436873912811,0.470763176679611 ,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.635058343410492,-0.333720952272415,0.696657180786133 ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.635058343410492,-0.333720952272415,0.696657180786133 ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.55286180973053,-0.0385416857898235,0.832381188869476 ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.55286180973053,-0.0385416857898235,0.832381188869476 ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.563694715499878,0.0446579419076443,0.824775099754334 ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.680799663066864,-0.208428665995598,0.702188968658447 ,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.680799663066864,-0.208428665995598,0.702188968658447 ,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.569225609302521,-0.734513640403748,0.369421064853668 ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.979163587093353,-0.176672399044037,0.100127547979355 ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.968327283859253,-0.0703691765666008,0.239563062787056 ,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.968327283859253,-0.0703691765666008,0.239563062787056 ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.957215070724487,-0.128876686096191,0.259094893932343 ,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.957215070724487,-0.128876686096191,0.259094893932343 ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.989297807216644,0.0386401489377022,0.140700981020927 ,-0.978964686393738,0.106371738016605,0.174106821417809,-0.989297807216644,0.0386401489377022,0.140700981020927 ,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.979163587093353,-0.176672399044037,0.100127547979355 ,-0.578717350959778,0.160483196377754,0.799582004547119,-0.619005084037781,0.113047316670418,0.777208507061005 ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.522611916065216,0.119792513549328,0.844112873077393 ,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.430616140365601,-0.892966866493225,-0.131072074174881 ,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.319887846708298,-0.889229834079742,-0.327019929885864 ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.317538052797318,-0.919425249099731,-0.232006043195724 ,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.212649196386337,-0.901985108852386,-0.375770092010498 ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.3644839823246,-0.202188208699226,0.908994674682617 ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.572961747646332,-0.0624557621777058,0.817198932170868 ,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.3644839823246,-0.202188208699226,0.908994674682617 ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.438927531242371,-0.110836811363697,0.891660153865814 ,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.978295981884003,0.0417908765375614,0.202954426407814 ,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.968327283859253,-0.0703691765666008,0.239563062787056 ,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.968327283859253,-0.0703691765666008,0.239563062787056 ,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.948452949523926,0.0132069662213326,0.316642642021179 ,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.656185150146484,-0.0951608046889305,0.748575627803802 ,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.542732357978821,0.501746475696564,0.673566699028015 ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.639506042003632,0.483837932348251,0.597438633441925 ,-0.469541937112808,0.464283794164658,0.750979959964752,-0.529072642326355,0.217875778675079,0.820129454135895 ,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.530328452587128,0.10359351336956,0.841439306735992 ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.580071687698364,-0.808331191539764,-0.100586168467999 ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.713391602039337,-0.697049975395203,-0.0720673725008965 ,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.788669764995575,0.415443122386932,0.453218460083008 ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.867791414260864,0.325389176607132,0.375579476356506 ,-0.937809467315674,0.204933196306229,0.280206710100174,-0.867791414260864,0.325389176607132,0.375579476356506 ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.891881763935089,0.246565267443657,0.379147052764893 ,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.56955087184906,-0.768941879272461,0.290413826704025 ,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.389989584684372,-0.185713946819305,0.901897132396698 ,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.711766242980957,-0.226245254278183,0.664982616901398 ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.397862493991852,-0.0639909207820892,0.915210664272308 ,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.680589377880096,-0.727077186107636,0.0903155356645584 ,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.599500894546509,-0.321622788906097,0.73291027545929 ,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.83446329832077,-0.267112225294113,-0.481998056173325 ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.858656167984009,-0.00651147030293942,-0.512510657310486 ,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.995428025722504,-0.0233537666499615,-0.0926159843802452 ,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.858656167984009,-0.00651147030293942,-0.512510657310486 ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.793161690235138,0.389079302549362,0.468520849943161 ,-0.76142829656601,0.432304978370667,0.483052164316177,-0.85773640871048,0.318832546472549,0.403279215097427 ,-0.891881763935089,0.246565267443657,0.379147052764893,-0.76142829656601,0.432304978370667,0.483052164316177 ,-0.793161690235138,0.389079302549362,0.468520849943161,-0.664581894874573,0.481633543968201,0.571279287338257 ,-0.637912154197693,0.524314641952515,0.564058721065521,-0.367648780345917,-0.406335473060608,0.83649617433548 ,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.43374091386795,-0.328518569469452,0.839013934135437 ,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.787305235862732,-0.612785577774048,0.0681484714150429 ,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549 ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713391602039337,-0.697049975395203,-0.0720673725008965 ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.798864305019379,-0.578265428543091,0.165604829788208 ,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.974589943885803,0.150285556912422,0.166098326444626 ,-0.958487570285797,0.190219804644585,0.212409943342209,-0.940992951393127,0.168072536587715,0.293741136789322 ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.8270303606987,0.233872473239899,0.511198997497559 ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.940992951393127,0.168072536587715,0.293741136789322 ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.999442994594574,0.0280166734009981,0.0181336086243391 ,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.367999702692032,-0.664126336574554,-0.650778293609619 ,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.998166382312775,0.0398845337331295,0.0455306805670261 ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.997315526008606,-0.0355834849178791,0.0639960467815399 ,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.196050360798836,-0.216366931796074,0.956425428390503 ,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.489574462175369,-0.0383142903447151,0.871119320392609 ,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.196050360798836,-0.216366931796074,0.956425428390503 ,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.66099351644516,-0.00236556818708777,0.750387847423553 ,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.313734799623489,-0.862539172172546,0.396984457969666 ,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.118598200380802,-0.990273535251617,0.0727519541978836 ,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.313734799623489,-0.862539172172546,0.396984457969666 ,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.419383674860001,-0.901702642440796,0.105117149651051 ,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.159300580620766,0.0403820462524891,0.98640388250351 ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.20097516477108,-0.349854558706284,0.914992213249207 ,0.138299137353897,-0.216322302818298,0.966477155685425,0.0996207222342491,0.155612200498581,0.982782065868378 ,0.0314028672873974,0.188204348087311,0.981627702713013,0.0031939682085067,-0.177682086825371,0.984082758426666 ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.791147410869598,-0.230280995368958,0.566618502140045 ,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.573286294937134,-0.272017657756805,0.772883713245392 ,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.194900542497635,-0.331308722496033,0.923172950744629 ,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.500701189041138,-0.0503258183598518,0.864156007766724 ,-0.392426759004593,0.205112621188164,0.896621465682983,-0.129117503762245,0.13854855298996,0.981902718544006 ,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.384387612342834,0.0363270901143551,0.922456741333008 ,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.650723218917847,-0.735029816627502,-0.190500557422638 ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.846795618534088,-0.531082570552826,0.0298077315092087 ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.846795618534088,-0.531082570552826,0.0298077315092087 ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.843913793563843,-0.430510014295578,-0.320110350847244 ,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.910155653953552,-0.193675979971886,0.366205275058746 ,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.482243537902832,-0.699907302856445,0.526849985122681 ,-0.482406258583069,0.640618324279785,0.597404718399048,0.517754137516022,0.73391991853714,0.439650118350983 ,0.0937898680567741,0.660230219364166,0.745184183120728,0.00488457176834345,0.505567967891693,0.862772941589355 ,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.791147410869598,-0.230280995368958,0.566618502140045 ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.640290141105652,-0.147163778543472,0.753904044628143 ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.354942172765732,-0.909834563732147,-0.214981570839882 ,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.208732545375824,-0.912394225597382,-0.352090239524841 ,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.450285315513611,-0.862574934959412,-0.230667769908905 ,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.32945853471756,-0.893185019493103,-0.306068062782288 ,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.354942172765732,-0.909834563732147,-0.214981570839882 ,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.381353855133057,-0.796372532844543,0.469425201416016 ,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.450285315513611,-0.862574934959412,-0.230667769908905 ,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.56955087184906,-0.768941879272461,0.290413826704025 ,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.716389060020447,-0.69769012928009,0.00390529190190136 ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.59330803155899,-0.795282304286957,-0.124545678496361 ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.748992025852203,-0.659226596355438,0.0665672123432159 ,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.59330803155899,-0.795282304286957,-0.124545678496361 ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.104054369032383,-0.821656465530396,0.560404658317566 ,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.298621833324432,-0.860875487327576,0.411968946456909 ,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.104054369032383,-0.821656465530396,0.560404658317566 ,-0.0633096471428871,-0.774920701980591,0.62887978553772,0.14743447303772,-0.460478246212006,0.875341594219208 ,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.00247630476951599,-0.186591759324074,0.982434391975403 ,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.250480443239212,-0.173854321241379,0.952383458614349 ,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.313990563154221,-0.19352200627327,0.929494023323059 ,-0.284990429878235,-0.166815251111984,0.943903148174286,0.00247630476951599,-0.186591759324074,0.982434391975403 ,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.904991507530212,-0.153763204813004,0.396670162677765 ,-0.77647191286087,0.0245032440871,0.629675269126892,-0.739293396472931,-0.211158558726311,0.639419496059418 ,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.450571924448013,-0.714681327342987,0.534991204738617 ,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.245075523853302,-0.238657772541046,0.939670383930206 ,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.927466154098511,-0.0275595653802156,0.372889995574951 ,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.973323583602905,-0.0783669799566269,0.215637981891632 ,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.884575426578522,-0.272238790988922,0.378698289394379 ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.973323583602905,-0.0783669799566269,0.215637981891632 ,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.933359444141388,0.180034801363945,-0.310527950525284 ,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.671594560146332,-0.181319773197174,0.718389809131622 ,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.973323583602905,-0.0783669799566269,0.215637981891632 ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.933428227901459,-0.0520526021718979,0.354968011379242 ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.973323583602905,-0.0783669799566269,0.215637981891632 ,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.0186418443918228,0.221836999058723,0.974905550479889 ,-0.110501579940319,0.212603434920311,0.970870316028595,-0.215113177895546,0.235299572348595,0.947818756103516 ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.939980566501617,0.104119330644608,0.324954867362976 ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.928196668624878,0.146431341767311,0.342065423727036 ,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.00068405584897846,-0.208776980638504,0.977963030338287 ,0.0314028672873974,0.188204348087311,0.981627702713013,0.0996207222342491,0.155612200498581,0.982782065868378 ,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.169794172048569,-0.0642365738749504,0.983383774757385 ,-0.129117503762245,0.13854855298996,0.981902718544006,-0.392426759004593,0.205112621188164,0.896621465682983 ,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.493602007627487,-0.18142081797123,0.850554823875427 ,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.695913255214691,-0.212267383933067,0.686037361621857 ,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.0633096471428871,-0.774920701980591,0.62887978553772 ,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.523851454257965,-0.504004776477814,0.686701416969299 ,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.997379958629608,0.0722400844097137,-0.00381774920970201 ,-0.982630908489227,0.117604449391365,0.143546640872955,-0.999919414520264,0.000697914510965347,-0.012677663937211 ,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.989189743995667,0.0587216019630432,-0.134370610117912 ,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.998352527618408,-0.0341868922114372,-0.0460811778903008 ,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.455979406833649,-0.609841763973236,0.648209691047668 ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.741787433624268,-0.27885103225708,0.609912693500519 ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.455979406833649,-0.609841763973236,0.648209691047668 ,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.619028568267822,-0.321996480226517,0.716325223445892 ,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.401645928621292,0.0858200713992119,0.911765038967133 ,-0.392426759004593,0.205112621188164,0.896621465682983,-0.529072642326355,0.217875778675079,0.820129454135895 ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.939980566501617,0.104119330644608,0.324954867362976 ,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075 ,-0.942853271961212,0.10562913864851,0.316022574901581,-0.945931136608124,0.172555223107338,0.274661630392075 ,-0.937809467315674,0.204933196306229,0.280206710100174,-0.891881763935089,0.246565267443657,0.379147052764893 ,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.136693820357323,-0.553743422031403,0.821390867233276 ,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.231002777814865,-0.0802000537514687,0.969642043113709 ,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.136693820357323,-0.553743422031403,0.821390867233276 ,-0.15314356982708,-0.075783796608448,0.985293805599213,0.00911593530327082,-0.103348582983017,0.994603395462036 ,-0.787644863128662,0.107126019895077,0.606745064258575,-0.525317013263702,-0.0670165792107582,0.848263382911682 ,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.739276468753815,0.150933310389519,0.656269311904907 ,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.826374292373657,-0.387590408325195,0.408508449792862 ,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.929982125759125,-0.229528427124023,0.287140995264053 ,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.929982125759125,-0.229528427124023,0.287140995264053 ,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.941886365413666,-0.24503418803215,0.229800596833229 ,-0.841734766960144,0.21214547753334,0.496464431285858,-0.95811140537262,-0.0200627520680428,0.285692185163498 ,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.749491930007935,-0.0978431180119514,0.654743134975433 ,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.918955624103546,-0.301046788692474,0.254737854003906 ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.953642725944519,-0.152424976229668,0.259484380483627 ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.865981459617615,-0.173945933580399,0.468848556280136 ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.995428025722504,-0.0233537666499615,-0.0926159843802452 ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.959170579910278,-0.0044404505752027,0.282793402671814 ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.808385133743286,0.0124147878959775,0.588523030281067 ,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.873597860336304,-0.23740328848362,0.424813508987427 ,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0848771035671234,-0.827450573444366,0.55508691072464 ,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0722988545894623,-0.821142494678497,0.566125333309174 ,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0848771035671234,-0.827450573444366,0.55508691072464 ,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.149853184819222,-0.761297464370728,0.63084876537323 ,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.0777209997177124,-0.922415435314178,-0.378297746181488 ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.212649196386337,-0.901985108852386,-0.375770092010498 ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.72460925579071,0.0771455466747284,0.684828460216522 ,-0.713547646999359,0.198780298233032,0.671815574169159,-0.696582138538361,-0.198639899492264,0.689431309700012 ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.905104517936707,-0.391508787870407,-0.165851414203644 ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.779531359672546,-0.612799942493439,-0.129641994833946 ,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.779531359672546,-0.612799942493439,-0.129641994833946 ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.739374160766602,-0.61436802148819,-0.275459170341492 ,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.81877064704895,-0.518556773662567,-0.246401205658913 ,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.843913793563843,-0.430510014295578,-0.320110350847244 ,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.855788469314575,-0.355743646621704,-0.375596284866333 ,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.905104517936707,-0.391508787870407,-0.165851414203644 ,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.713547646999359,0.198780298233032,0.671815574169159 ,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.547281503677368,-0.332838475704193,0.767920255661011 ,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.999442994594574,0.0280166734009981,0.0181336086243391 ,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.997032284736633,-0.0711089670658112,-0.0294978637248278 ,-0.296029925346375,0.469678968191147,0.831725895404816,-0.406924575567245,0.55693382024765,0.724042177200317 ,-0.431310623884201,0.54215931892395,0.721134126186371,-0.934884548187256,0.137223497033119,-0.327353954315186 ,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.979476630687714,-0.044322844594717,0.196624115109444 ,-0.979476630687714,-0.044322844594717,0.196624115109444,-0.79594624042511,-0.000148868231917731,0.605367302894592 ,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.912571549415588,-0.364975243806839,0.184407845139503 ,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.985770165920258,0.0388064943253994,0.163558095693588 ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.96815037727356,0.0736105665564537,-0.239304021000862 ,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.96815037727356,0.0736105665564537,-0.239304021000862 ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.794985055923462,-0.313673406839371,-0.519237637519836 ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.99179345369339,0.127844139933586,-0.0012682982487604 ,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.986240923404694,0.124055705964565,-0.109266042709351 ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.986240923404694,0.124055705964565,-0.109266042709351 ,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.927130460739136,-0.0191504992544651,-0.374249011278152 ,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.96815037727356,0.0736105665564537,-0.239304021000862 ,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.876246690750122,-0.00972981471568346,-0.481764525175095 ,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.442632555961609,-0.414916336536407,0.794934511184692 ,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.694061398506165,-0.1789870262146,0.697310864925385 ,-0.397862493991852,-0.0639909207820892,0.915210664272308,0.0111285699531436,-0.0777815505862236,0.9969083070755 ,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.389989584684372,-0.185713946819305,0.901897132396698 ,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.381353855133057,-0.796372532844543,0.469425201416016 ,-0.389989584684372,-0.185713946819305,0.901897132396698,0.00655650394037366,-0.135652124881744,0.990734815597534 ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.986240923404694,0.124055705964565,-0.109266042709351 ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.979892313480377,0.170224979519844,0.104088805615902 ,-0.939631521701813,0.153399094939232,0.305877894163132,-0.979892313480377,0.170224979519844,0.104088805615902 ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.958259165287018,0.0577557012438774,0.280006498098373 ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.958259165287018,0.0577557012438774,0.280006498098373 ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.999477684497833,-0.0109285833314061,0.0304120387881994 ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.999477684497833,-0.0109285833314061,0.0304120387881994 ,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.986240923404694,0.124055705964565,-0.109266042709351 ,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.335694938898087,-0.0845088064670563,0.938172280788422 ,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.250480443239212,-0.173854321241379,0.952383458614349 ,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.438927531242371,-0.110836811363697,0.891660153865814 ,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.284990429878235,-0.166815251111984,0.943903148174286 ,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.669449508190155,-0.697340130805969,0.256035417318344 ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.0928481444716454,-0.394505769014359,0.914190590381622 ,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0633096471428871,-0.774920701980591,0.62887978553772 ,-0.261337131261826,-0.401412606239319,0.877821683883667,0.00927210599184036,-0.101372048258781,0.99480539560318 ,0.244968578219414,-0.0767860040068626,0.966485559940338,0.14743447303772,-0.460478246212006,0.875341594219208 ,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.0108760436996818,-0.349400758743286,0.936910271644592 ,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.953642725944519,-0.152424976229668,0.259484380483627 ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.899289608001709,-0.225166246294975,0.374937802553177 ,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.905689835548401,-0.202472388744354,0.372465878725052 ,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.739293396472931,-0.211158558726311,0.639419496059418 ,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.842230319976807,0.0367605164647102,0.53786313533783 ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.702881813049316,-0.068748727440834,0.707976579666138 ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.615767419338226,0.0138289360329509,0.787806570529938 ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.842230319976807,0.0367605164647102,0.53786313533783 ,-0.960240244865417,0.158970504999161,0.229493051767349,-0.985882997512817,0.0816566720604897,0.146174341440201 ,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.989446640014648,-0.00150133995339274,0.144889995455742 ,-0.910772800445557,0.214318007230759,0.352931588888168,-0.985882997512817,0.0816566720604897,0.146174341440201 ,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761 ,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.927130460739136,-0.0191504992544651,-0.374249011278152 ,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.961785852909088,-0.0866831690073013,-0.259719133377075 ,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.525317013263702,-0.0670165792107582,0.848263382911682 ,-0.787644863128662,0.107126019895077,0.606745064258575,-0.82659912109375,0.121020883321762,0.549625158309937 ,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.787644863128662,0.107126019895077,0.606745064258575 ,-0.739276468753815,0.150933310389519,0.656269311904907,-0.749392926692963,-0.121673375368118,0.650850057601929 ,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.785154461860657,-0.227399781346321,0.576039791107178 ,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.740851521492004,-0.347129315137863,0.575013279914856 ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.706978023052216,-0.108872137963772,0.698805391788483 ,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.704794883728027,-0.197958365082741,0.681231737136841 ,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.42670676112175,-0.452820241451263,0.782863438129425 ,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.166397944092751,-0.507038652896881,0.845708906650543 ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.779531359672546,-0.612799942493439,-0.129641994833946 ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.897795557975769,-0.43993416428566,0.0205198600888252 ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.897795557975769,-0.43993416428566,0.0205198600888252 ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.749754548072815,-0.661690354347229,-0.00583517225459218 ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.749754548072815,-0.661690354347229,-0.00583517225459218 ,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.618224084377289,-0.776368081569672,-0.122684694826603 ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.758769392967224,-0.645694494247437,-0.085717998445034 ,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638 ,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.713391602039337,-0.697049975395203,-0.0720673725008965 ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.571418464183807,-0.794688820838928,-0.204818531870842 ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.852678954601288,-0.302188754081726,0.426169604063034 ,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.665225088596344,-0.442761093378067,0.601197302341461 ,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.665225088596344,-0.442761093378067,0.601197302341461 ,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.749491930007935,-0.0978431180119514,0.654743134975433 ,-0.431310623884201,0.54215931892395,0.721134126186371,-0.704075336456299,0.454022943973541,0.546022951602936 ,-0.715115904808044,0.391270339488983,0.57923811674118,-0.451172351837158,0.441036701202393,0.775841593742371 ,-0.704075336456299,0.454022943973541,0.546022951602936,-0.431310623884201,0.54215931892395,0.721134126186371 ,-0.406924575567245,0.55693382024765,0.724042177200317,-0.530960738658905,0.402330845594406,0.74579530954361 ,-0.737271249294281,0.345291316509247,0.580693602561951,-0.658462405204773,-0.192036494612694,0.727701365947723 ,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.897873997688293,-0.0343663021922112,0.438909232616425 ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.658462405204773,-0.192036494612694,0.727701365947723 ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.888188779354095,-0.0342079848051071,0.45820364356041 ,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.137671425938606,0.655901074409485,0.742186188697815 ,0.0635503008961678,0.655404150485992,0.752600014209747,0.0513622872531414,0.468802571296692,0.881808400154114 ,-0.185234054923058,0.48134982585907,0.856732606887817,-0.660850763320923,0.309517800807953,0.683721423149109 ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.106629706919193,0.951739728450775,0.287787467241287 ,0.171542316675186,0.957118153572083,0.233448192477226,-0.758384525775909,0.243889003992081,0.604459345340729 ,-0.660850763320923,0.309517800807953,0.683721423149109,0.171542316675186,0.957118153572083,0.233448192477226 ,0.24859219789505,0.926495909690857,0.282501816749573,-0.974589943885803,0.150285556912422,0.166098326444626 ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.924049556255341,0.299373358488083,0.237714126706123 ,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174 ,-0.960206747055054,0.212085798382759,0.18172125518322,-0.924049556255341,0.299373358488083,0.237714126706123 ,-0.867791414260864,0.325389176607132,0.375579476356506,-0.788669764995575,0.415443122386932,0.453218460083008 ,-0.867791414260864,0.325389176607132,0.375579476356506,-0.924049556255341,0.299373358488083,0.237714126706123 ,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559 ,-0.824751377105713,0.366082817316055,0.431008726358414,-0.924049556255341,0.299373358488083,0.237714126706123 ,-0.957204222679138,0.181513637304306,0.225416928529739,-0.482406258583069,0.640618324279785,0.597404718399048 ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.922386527061462,0.136373192071915,0.361393809318542 ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.482406258583069,0.640618324279785,0.597404718399048 ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.933428227901459,-0.0520526021718979,0.354968011379242 ,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616 ,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.940992951393127,0.168072536587715,0.293741136789322 ,-0.88217681646347,0.30687540769577,0.357199609279633,-0.737271249294281,0.345291316509247,0.580693602561951 ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.929433286190033,0.240452021360397,0.27988663315773 ,-0.938261330127716,0.284641981124878,0.196582421660423,-0.88217681646347,0.30687540769577,0.357199609279633 ,-0.940992951393127,0.168072536587715,0.293741136789322,-0.958487570285797,0.190219804644585,0.212409943342209 ,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.623834013938904,0.0451370552182198,0.78025233745575 ,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.572961747646332,-0.0624557621777058,0.817198932170868 ,-0.552518010139465,0.180195555090904,0.813789546489716,-0.619005084037781,0.113047316670418,0.777208507061005 ,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.529072642326355,0.217875778675079,0.820129454135895 ,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.43374091386795,-0.328518569469452,0.839013934135437 ,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.35664427280426,-0.676209807395935,0.64462798833847 ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.949234426021576,-0.150814101099968,0.27606001496315 ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.897795557975769,-0.43993416428566,0.0205198600888252 ,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.897795557975769,-0.43993416428566,0.0205198600888252 ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.971085906028748,-0.227177411317825,0.0733662322163582 ,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.971085906028748,-0.227177411317825,0.0733662322163582 ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.954627275466919,-0.0333360694348812,0.295931607484818 ,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.954627275466919,-0.0333360694348812,0.295931607484818 ,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.949234426021576,-0.150814101099968,0.27606001496315 ,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.871014952659607,-0.424263268709183,0.247656226158142 ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.73885315656662,-0.641847014427185,0.205252081155777 ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.73885315656662,-0.641847014427185,0.205252081155777 ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.664591491222382,-0.746946513652802,0.01972521468997 ,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.664591491222382,-0.746946513652802,0.01972521468997 ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.749754548072815,-0.661690354347229,-0.00583517225459218 ,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.749754548072815,-0.661690354347229,-0.00583517225459218 ,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.871014952659607,-0.424263268709183,0.247656226158142 ,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.456958532333374,-0.310317039489746,0.833601951599121 ,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.230118215084076,-0.0391505397856236,0.972374856472015 ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.616519212722778,-0.455342262983322,0.642314195632935 ,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.29495570063591,-0.303489834070206,0.906032621860504 ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.997315526008606,-0.0355834849178791,0.0639960467815399 ,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.995428025722504,-0.0233537666499615,-0.0926159843802452 ,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.83446329832077,-0.267112225294113,-0.481998056173325 ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.997315526008606,-0.0355834849178791,0.0639960467815399 ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.619028568267822,-0.321996480226517,0.716325223445892 ,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.767993330955505,-0.301860928535461,0.564859509468079 ,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.696582138538361,-0.198639899492264,0.689431309700012 ,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.571020781993866,-0.291943371295929,0.767270684242249 ,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.573286294937134,-0.272017657756805,0.772883713245392 ,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.683742940425873,-0.428563714027405,0.59061723947525 ,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.559306979179382,-0.466573625802994,0.685189545154572 ,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.767993330955505,-0.301860928535461,0.564859509468079 ,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.741787433624268,-0.27885103225708,0.609912693500519 ,-0.44353261590004,0.469896525144577,0.763201177120209,-0.155023440718651,0.460458368062973,0.874039947986603 ,-0.148301675915718,0.617360651493073,0.772575199604034,-0.487235128879547,0.602307498455048,0.632319211959839 ,0.0497331917285919,0.445011228322983,0.894142985343933,0.0604556538164616,0.606487095355988,0.792791604995728 ,-0.148301675915718,0.617360651493073,0.772575199604034,-0.155023440718651,0.460458368062973,0.874039947986603 ,-0.938261330127716,0.284641981124878,0.196582421660423,-0.921404659748077,0.300344526767731,0.246589884161949 ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.88217681646347,0.30687540769577,0.357199609279633 ,-0.88217681646347,0.30687540769577,0.357199609279633,-0.854642570018768,0.365032374858856,0.369239091873169 ,-0.704075336456299,0.454022943973541,0.546022951602936,-0.737271249294281,0.345291316509247,0.580693602561951 ,-0.715115904808044,0.391270339488983,0.57923811674118,-0.704075336456299,0.454022943973541,0.546022951602936 ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.878912448883057,0.190948858857155,0.437094360589981 ,-0.918760776519775,0.045384906232357,0.392197400331497,-0.878912448883057,0.190948858857155,0.437094360589981 ,-0.854642570018768,0.365032374858856,0.369239091873169,-0.921404659748077,0.300344526767731,0.246589884161949 ,0.152057304978371,-0.511582612991333,0.845672428607941,0.138299137353897,-0.216322302818298,0.966477155685425 ,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.0233143605291843,-0.495335191488266,0.868389010429382 ,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.319887846708298,-0.889229834079742,-0.327019929885864 ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.208732545375824,-0.912394225597382,-0.352090239524841 ,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.319887846708298,-0.889229834079742,-0.327019929885864 ,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.423251867294312,-0.8652303814888,-0.268764227628708 ,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.460973918437958,-0.302575647830963,0.834236800670624 ,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.619028568267822,-0.321996480226517,0.716325223445892 ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.899289608001709,-0.225166246294975,0.374937802553177 ,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.928220152854919,-0.224693849682808,0.296513050794601 ,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.028565090149641,-0.175006538629532,0.984152793884277 ,0.138299137353897,-0.216322302818298,0.966477155685425,0.152057304978371,-0.511582612991333,0.845672428607941 ,-0.230118215084076,-0.0391505397856236,0.972374856472015,0.028565090149641,-0.175006538629532,0.984152793884277 ,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.29495570063591,-0.303489834070206,0.906032621860504 ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.29495570063591,-0.303489834070206,0.906032621860504 ,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.0971510037779808,-0.777255237102509,0.621639728546143 ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0971510037779808,-0.777255237102509,0.621639728546143 ,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.152057304978371,-0.511582612991333,0.845672428607941 ,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.58394068479538,-0.0111314477398992,0.811720013618469 ,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.438927531242371,-0.110836811363697,0.891660153865814 ,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.615767419338226,0.0138289360329509,0.787806570529938 ,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.525046348571777,-0.114187583327293,0.843378603458405 ,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.680589377880096,-0.727077186107636,0.0903155356645584 ,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.913328051567078,0.257958859205246,0.315101653337479 ,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099 ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.927535772323608,0.260400146245956,0.26808425784111 ,-0.898379147052765,0.257861793041229,0.355558961629868,-0.913328051567078,0.257958859205246,0.315101653337479 ,-0.899272859096527,0.337114810943604,0.278679043054581,-0.986233770847321,-0.0181744769215584,0.164355054497719 ,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.838127374649048,0.00188649771735072,0.545471370220184 ,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.783675134181976,0.0171119719743729,0.620935142040253 ,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.986233770847321,-0.0181744769215584,0.164355054497719 ,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.77647191286087,0.0245032440871,0.629675269126892 ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.626672208309174,0.255842447280884,0.736088693141937 ,-0.669090986251831,0.108672223985195,0.735192239284515,-0.162437900900841,-0.62639182806015,0.762395679950714 ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.10322830080986,-0.541345357894897,0.834439396858215 ,0.0824021622538567,0.119332544505596,0.98942893743515,0.028565090149641,-0.175006538629532,0.984152793884277 ,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.129117503762245,0.13854855298996,0.981902718544006 ,-0.859274387359619,0.29542076587677,0.417581170797348,-0.755013465881348,0.127179101109505,0.64325749874115 ,-0.847808718681335,0.127517849206924,0.514742314815521,-0.736577808856964,0.297644317150116,0.607339262962341 ,-0.755013465881348,0.127179101109505,0.64325749874115,-0.859274387359619,0.29542076587677,0.417581170797348 ,-0.808332681655884,0.323168575763702,0.49209788441658,-0.842230319976807,0.0367605164647102,0.53786313533783 ,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996842920780182,-0.019830010831356,0.0768825337290764 ,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.808385133743286,0.0124147878959775,0.588523030281067 ,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999627947807312,0.018455671146512,0.020082326605916 ,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.711766242980957,-0.226245254278183,0.664982616901398 ,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.740522086620331,-0.668854534626007,0.065273717045784 ,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.603729546070099,-0.032661035656929,0.796519875526428 ,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.702881813049316,-0.068748727440834,0.707976579666138 ,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.10322830080986,-0.541345357894897,0.834439396858215 ,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.354619354009628,-0.125306099653244,0.926576197147369 ,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.708063185214996,0.0871675312519073,0.700748383998871 ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.519543766975403,-0.00114526739344001,0.854443073272705 ,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.256247758865356,0.183180019259453,0.94909542798996 ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.708063185214996,0.0871675312519073,0.700748383998871 ,-0.599762678146362,0.237867310643196,0.764005124568939,0.0824021622538567,0.119332544505596,0.98942893743515 ,-0.129117503762245,0.13854855298996,0.981902718544006,-0.169794172048569,-0.0642365738749504,0.983383774757385 ,-0.0553458705544472,-0.183565944433212,0.981448113918304,0.0824021622538567,0.119332544505596,0.98942893743515 ,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474 ,0.0996207222342491,0.155612200498581,0.982782065868378,-0.793161690235138,0.389079302549362,0.468520849943161 ,-0.788669764995575,0.415443122386932,0.453218460083008,-0.639506042003632,0.483837932348251,0.597438633441925 ,-0.664581894874573,0.481633543968201,0.571279287338257,-0.38422480225563,0.137366592884064,0.912963151931763 ,-0.113911136984825,0.222564980387688,0.968240201473236,-0.365421146154404,0.118911430239677,0.923215806484222 ,-0.215113177895546,0.235299572348595,0.947818756103516,-0.684878885746002,-0.277860194444656,0.673598289489746 ,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.42670676112175,-0.452820241451263,0.782863438129425 ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.245075523853302,-0.238657772541046,0.939670383930206 ,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.110501579940319,0.212603434920311,0.970870316028595 ,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.434661060571671,-0.742193758487701,0.5101158618927 ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.180914804339409,-0.246753722429276,0.952041208744049 ,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.027668621391058,0.211265400052071,0.977037012577057 ,0.0304032936692238,0.174695551395416,0.984152972698212,0.0344220362603664,0.22930283844471,0.972746253013611 ,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0284836571663618,0.148866042494774,0.988447070121765 ,0.0304032936692238,0.174695551395416,0.984152972698212,-0.027668621391058,0.211265400052071,0.977037012577057 ,0.0340906009078026,0.177746370434761,0.983485698699951,-0.999627947807312,0.018455671146512,0.020082326605916 ,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.998881995677948,0.0170586127787828,0.0440875962376595 ,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998331546783447,-0.0358092784881592,-0.0452967919409275 ,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.996856987476349,0.0654792115092278,0.0445937626063824 ,-0.999627947807312,0.018455671146512,0.020082326605916,-0.905668199062347,0.0821359232068062,0.415955275297165 ,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.708954691886902,-0.0861286148428917,0.69997501373291 ,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.665728688240051,-0.201705411076546,0.718415081501007 ,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.708954691886902,-0.0861286148428917,0.69997501373291 ,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185 ,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.708954691886902,-0.0861286148428917,0.69997501373291 ,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.912092506885529,0.0284031052142382,0.408999383449554 ,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.708954691886902,-0.0861286148428917,0.69997501373291 ,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.841734766960144,0.21214547753334,0.496464431285858 ,-0.721355617046356,0.238694369792938,0.650131583213806,-0.772696316242218,0.194377049803734,0.604282975196838 ,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838 ,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.807132244110107,0.16207791864872,0.567686796188354 ,-0.807132244110107,0.16207791864872,0.567686796188354,-0.800202667713165,0.314497977495193,0.510653257369995 ,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838 ,-0.772696316242218,0.194377049803734,0.604282975196838,-0.721355617046356,0.238694369792938,0.650131583213806 ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.80397242307663,0.0757209435105324,0.589825987815857 ,-0.629563450813293,0.348871290683746,0.694218039512634,-0.824751377105713,0.366082817316055,0.431008726358414 ,-0.8270303606987,0.233872473239899,0.511198997497559,-0.590761244297028,0.21027672290802,0.778963983058929,-0.639506042003632 ,0.483837932348251,0.597438633441925,-0.788669764995575,0.415443122386932,0.453218460083008,-0.824751377105713 ,0.366082817316055,0.431008726358414,-0.629563450813293,0.348871290683746,0.694218039512634,-0.74636310338974 ,-0.0243592355400324,0.665093064308167,-0.830214977264404,0.100066982209682,0.548388242721558,-0.809095621109009 ,0.140354558825493,0.570670545101166,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.941886365413666 ,-0.24503418803215,0.229800596833229,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.956733524799347 ,-0.225288674235344,0.18413570523262,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.956733524799347 ,-0.225288674235344,0.18413570523262,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.95017421245575 ,-0.209271758794785,0.231028690934181,-0.903163015842438,0.185778304934502,0.387017965316772,-0.933361113071442 ,-0.067049466073513,0.35262069106102,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.571020781993866 ,-0.291943371295929,0.767270684242249,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.653488278388977 ,-0.259704351425171,0.710989952087402,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.157021999359131 ,0.633807837963104,-0.757384777069092,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.773173451423645 ,0.234929323196411,-0.589076459407806,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129 ,0.0112352445721626,0.268945276737213,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.773173451423645 ,0.234929323196411,-0.589076459407806,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.974529683589935 ,-0.218805104494095,0.0491550303995609,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.773173451423645 ,0.234929323196411,-0.589076459407806,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.142514750361443 ,0.172804057598114,-0.974591374397278,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.773173451423645 ,0.234929323196411,-0.589076459407806,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.974529683589935 ,-0.218805104494095,0.0491550303995609,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.687806069850922 ,-0.158765524625778,-0.708319365978241,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117 ,0.0105791445821524,-0.416983097791672,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.687806069850922 ,-0.158765524625778,-0.708319365978241,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443 ,0.172804057598114,-0.974591374397278,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.687806069850922 ,-0.158765524625778,-0.708319365978241,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.939631521701813 ,0.153399094939232,0.305877894163132,-0.926795780658722,0.133818626403809,0.3509162068367,-0.97424703836441,0.120223365724087 ,0.190758988261223,-0.979892313480377,0.170224979519844,0.104088805615902,-0.989431083202362,0.138839796185493 ,-0.0418281517922878,-0.979892313480377,0.170224979519844,0.104088805615902,-0.97424703836441,0.120223365724087 ,0.190758988261223,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614 ,0.202954426407814,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.97424703836441,0.120223365724087 ,0.190758988261223,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.959095060825348,0.0579339526593685 ,0.277092695236206,-0.97424703836441,0.120223365724087,0.190758988261223,-0.926795780658722,0.133818626403809 ,0.3509162068367,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.665728688240051,-0.201705411076546 ,0.718415081501007,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928 ,0.573162972927094,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.905668199062347,0.0821359232068062 ,0.415955275297165,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.813457071781158,-0.0988521501421928 ,0.573162972927094,-0.926191806793213,0.116400174796581,0.35863596200943,-0.655879259109497,-0.0266539473086596 ,0.754395127296448,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.576066911220551,-0.146876826882362 ,0.804098308086395,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.655879259109497,-0.0266539473086596 ,0.754395127296448,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.447912156581879,-0.140877023339272 ,0.882909059524536,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.563221275806427,-0.79902458190918 ,-0.210574418306351,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.680589377880096,-0.727077186107636 ,0.0903155356645584,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.905433773994446,-0.0582202337682247 ,0.420476019382477,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678 ,0.316103518009186,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.706978023052216,-0.108872137963772 ,0.698805391788483,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.838247179985046,-0.0138563737273216 ,0.54511433839798,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.827720582485199,-0.146306499838829 ,0.541731595993042,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.788007020950317,-0.198835611343384 ,0.582674324512482,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.905333578586578,0.0703608244657516 ,0.418832272291183,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.888188779354095,-0.0342079848051071 ,0.45820364356041,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.980100452899933,0.0712500065565109 ,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.998881995677948,0.0170586127787828 ,0.0440875962376595,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.571020781993866,-0.291943371295929 ,0.767270684242249,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.640290141105652,-0.147163778543472 ,0.753904044628143,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.55826473236084,-0.110289022326469 ,0.822299718856812,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.656185150146484,-0.0951608046889305 ,0.748575627803802,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.55826473236084,-0.110289022326469 ,0.822299718856812,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.640060782432556,0.00115585804451257 ,0.768323421478271,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.905678987503052,-0.296837091445923 ,-0.302709937095642,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.968295395374298,-0.216806933283806 ,-0.124091781675816,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.961785852909088,-0.0866831690073013 ,-0.259719133377075,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.968295395374298,-0.216806933283806 ,-0.124091781675816,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.978283286094666,-0.0603795535862446 ,0.198282822966576,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.968295395374298,-0.216806933283806 ,-0.124091781675816,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.890801727771759,-0.452551037073135 ,-0.0408632569015026,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.968295395374298,-0.216806933283806 ,-0.124091781675816,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.0374716036021709,0.192808955907822 ,0.98052054643631,0.205764874815941,0.144822359085083,0.967826068401337,0.0744598954916,0.293609887361526,0.953020930290222 ,0.139874473214149,0.332423865795136,0.932700097560883,-0.0374716036021709,0.192808955907822,0.98052054643631 ,-0.069260835647583,0.0269219465553761,0.997235238552094,0.244968578219414,-0.0767860040068626,0.966485559940338 ,0.205764874815941,0.144822359085083,0.967826068401337,-0.876246690750122,-0.00972981471568346,-0.481764525175095 ,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076 ,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.995428025722504,-0.0233537666499615,-0.0926159843802452 ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.906999528408051,-0.118946090340614,-0.403984785079956 ,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.0528050363063812,-0.813004612922668,0.579857885837555 ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.217122808098793,-0.945177376270294,-0.243920937180519 ,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.941334009170532,-0.241035461425781,0.236203595995903 ,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.910947680473328,-0.114077113568783,0.396435052156448 ,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.852678954601288,-0.302188754081726,0.426169604063034 ,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.910947680473328,-0.114077113568783,0.396435052156448 ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.814229547977448,-0.268942922353745,0.514490008354187 ,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.813457071781158,-0.0988521501421928,0.573162972927094 ,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094 ,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.958112895488739,-0.0412571057677269,0.28340345621109 ,-0.926191806793213,0.116400174796581,0.35863596200943,-0.335694938898087,-0.0845088064670563,0.938172280788422 ,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.256247758865356,0.183180019259453,0.94909542798996 ,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.438927531242371,-0.110836811363697,0.891660153865814 ,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.42945921421051,0.0406228676438332,0.902172148227692 ,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.985882997512817,0.0816566720604897,0.146174341440201 ,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.996842920780182,-0.019830010831356,0.0768825337290764 ,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.946490168571472,0.0598345808684826,0.317137449979782 ,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.985882997512817,0.0816566720604897,0.146174341440201 ,-0.910772800445557,0.214318007230759,0.352931588888168,-0.3644839823246,-0.202188208699226,0.908994674682617 ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.00449910387396812,-0.161412835121155,0.986876726150513 ,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.313990563154221,-0.19352200627327,0.929494023323059 ,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.00386956869624555,-0.264760941267014,0.964306354522705 ,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.99614292383194,-0.0721546709537506,-0.0499294139444828 ,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335 ,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.978283286094666,-0.0603795535862446,0.198282822966576 ,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.999477684497833,-0.0109285833314061,0.0304120387881994 ,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.394418269395828,-0.115748293697834,0.911612093448639 ,0.00449910387396812,-0.161412835121155,0.986876726150513,0.0111285699531436,-0.0777815505862236,0.9969083070755 ,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.917095720767975,0.0718847438693047,0.392132639884949 ,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.985770165920258,0.0388064943253994,0.163558095693588 ,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.989431083202362,0.138839796185493,-0.0418281517922878 ,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.985770165920258,0.0388064943253994,0.163558095693588 ,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.979986965656281,-0.191784739494324,0.0533309541642666 ,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.905546963214874,-0.0230849031358957,0.423617511987686 ,0.409033417701721,0.056328222155571,-0.910779237747192,0.555061399936676,0.0270265471190214,-0.831370174884796 ,0.590149700641632,0.106324933469296,-0.800261437892914,0.426036864519119,0.191680565476418,-0.884166955947876 ,0.52705591917038,-0.123320385813713,-0.840835392475128,0.555061399936676,0.0270265471190214,-0.831370174884796 ,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113 ,-0.903163015842438,0.185778304934502,0.387017965316772,-0.864785015583038,0.227262705564499,0.447770565748215 ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.945830225944519,0.0969298705458641,0.309854567050934 ,-0.978964686393738,0.106371738016605,0.174106821417809,-0.945830225944519,0.0969298705458641,0.309854567050934 ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.93869537115097,0.246357470750809,0.241161808371544 ,-0.927535772323608,0.260400146245956,0.26808425784111,-0.93869537115097,0.246357470750809,0.241161808371544 ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.898379147052765,0.257861793041229,0.355558961629868 ,-0.873595476150513,0.228950142860413,0.429433107376099,-0.898379147052765,0.257861793041229,0.355558961629868 ,-0.907959640026093,0.246083408594131,0.339193552732468,-0.864785015583038,0.227262705564499,0.447770565748215 ,-0.912839949131012,0.366738528013229,0.179516360163689,-0.951293051242828,0.220237165689468,0.215724766254425 ,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917084217071533,0.247074887156487,0.312906622886658 ,-0.922440767288208,0.315537393093109,0.222573891282082,-0.930616736412048,0.324010014533997,0.170205876231194 ,-0.920456767082214,0.196246728301048,0.338003754615784,-0.90205317735672,0.348495870828629,0.25465789437294 ,-0.913878262042999,0.245342120528221,0.323471456766129,-0.933935105800629,0.157070308923721,0.321082711219788 ,-0.92311555147171,0.291509866714478,0.250758200883865,-0.917084217071533,0.247074887156487,0.312906622886658 ,-0.913878262042999,0.245342120528221,0.323471456766129,-0.90205317735672,0.348495870828629,0.25465789437294 ,-0.899272859096527,0.337114810943604,0.278679043054581,-0.92311555147171,0.291509866714478,0.250758200883865 ,-0.935693740844727,0.265559196472168,0.232283264398575,-0.90205317735672,0.348495870828629,0.25465789437294 ,-0.90205317735672,0.348495870828629,0.25465789437294,-0.935693740844727,0.265559196472168,0.232283264398575 ,-0.927535772323608,0.260400146245956,0.26808425784111,-0.899272859096527,0.337114810943604,0.278679043054581 ,-0.913328051567078,0.257958859205246,0.315101653337479,-0.922440767288208,0.315537393093109,0.222573891282082 ,-0.917084217071533,0.247074887156487,0.312906622886658,-0.899272859096527,0.337114810943604,0.278679043054581 ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.951293051242828,0.220237165689468,0.215724766254425 ,-0.922440767288208,0.315537393093109,0.222573891282082,-0.913328051567078,0.257958859205246,0.315101653337479 ,0.636519849300385,0.647450149059296,-0.419107168912888,0.904918491840363,0.223670721054077,-0.362068980932236 ,0.611642181873322,0.428768634796143,-0.664869368076324,0.904918491840363,0.223670721054077,-0.362068980932236 ,0.699705183506012,0.427644014358521,-0.572305202484131,0.622634530067444,0.273028820753098,-0.733335912227631 ,0.611642181873322,0.428768634796143,-0.664869368076324,-0.111326843500137,-0.985514283180237,0.127937391400337 ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.669449508190155,-0.697340130805969,0.256035417318344 ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.111326843500137,-0.985514283180237,0.127937391400337 ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.298621833324432,-0.860875487327576,0.411968946456909 ,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.837247967720032,-0.308187961578369,0.451703399419785 ,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.669449508190155,-0.697340130805969,0.256035417318344 ,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.523851454257965,-0.504004776477814,0.686701416969299 ,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.536415159702301,-0.78416246175766,0.312006503343582 ,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.64180713891983,-0.25287389755249,0.723973989486694 ,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.933533489704132,-0.188960582017899,-0.304645866155624 ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.855788469314575,-0.355743646621704,-0.375596284866333 ,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.908703505992889,-0.107983402907848,-0.403233885765076 ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.933533489704132,-0.188960582017899,-0.304645866155624 ,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.899797379970551,-0.265796363353729,-0.346001297235489 ,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.855788469314575,-0.355743646621704,-0.375596284866333 ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.843913793563843,-0.430510014295578,-0.320110350847244 ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.947893738746643,-0.165305480360985,0.272344529628754 ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.947893738746643,-0.165305480360985,0.272344529628754 ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.906999528408051,-0.118946090340614,-0.403984785079956 ,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.906999528408051,-0.118946090340614,-0.403984785079956 ,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.88613361120224,-0.217736631631851,-0.40909406542778 ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.493933469057083,-0.226954907178879,0.839357614517212 ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.764369487762451,-0.100322350859642,0.636926054954529 ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.764369487762451,-0.100322350859642,0.636926054954529 ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.233382239937782,0.37978932261467,0.8951495885849 ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.233382239937782,0.37978932261467,0.8951495885849 ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.559565424919128,0.213157281279564,0.80090606212616 ,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.493933469057083,-0.226954907178879,0.839357614517212 ,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.559565424919128,0.213157281279564,0.80090606212616 ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.367316663265228,0.168655470013618,-0.914676904678345 ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.673958420753479,0.316827058792114,-0.66738349199295 ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.908852636814117,0.0105791445821524,-0.416983097791672 ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.673958420753479,0.316827058792114,-0.66738349199295 ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.234179049730301,-0.104612432420254,-0.966548681259155 ,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.367316663265228,0.168655470013618,-0.914676904678345 ,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.908852636814117,0.0105791445821524,-0.416983097791672 ,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.943636775016785,-0.199052885174751,0.264438152313232 ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.91798335313797,-0.00180715974420309,-0.396614909172058 ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.926066279411316,-0.206412896513939,0.315903395414352 ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.91798335313797,-0.00180715974420309,-0.396614909172058 ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.766225039958954,-0.486649185419083,0.419609010219574 ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.847999572753906,0.148594439029694,0.50874000787735 ,-0.933067381381989,0.178451672196388,0.312314331531525,-0.789937257766724,-0.089169554412365,0.606669545173645 ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398 ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.838507175445557,0.0982540920376778,0.535958766937256 ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.789937257766724,-0.089169554412365,0.606669545173645 ,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.991512477397919,-0.0911088734865189,0.09274772554636 ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.767987847328186,-0.497150540351868,0.403777122497559 ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.831832468509674,-0.413072049617767,0.370710402727127 ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.767987847328186,-0.497150540351868,0.403777122497559 ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.789167404174805,-0.177452862262726,0.587984025478363 ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.767987847328186,-0.497150540351868,0.403777122497559 ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.851623713970184,0.0635921731591225,0.520281732082367 ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.908852636814117,0.0105791445821524,-0.416983097791672 ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.812781035900116,0.145446926355362,0.564120769500732 ,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.869927883148193,0.417829841375351,0.261999487876892 ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.851623713970184,0.0635921731591225,0.520281732082367 ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.741121232509613,0.0951398462057114,0.664595901966095 ,-0.725173890590668,0.124969810247421,0.677130281925201,-0.741121232509613,0.0951398462057114,0.664595901966095 ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.737713038921356,0.159859821200371,0.655914902687073 ,-0.686445116996765,0.270512044429779,0.674993574619293,-0.737713038921356,0.159859821200371,0.655914902687073 ,-0.812781035900116,0.145446926355362,0.564120769500732,-0.869927883148193,0.417829841375351,0.261999487876892 ,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.794985055923462,-0.313673406839371,-0.519237637519836 ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.00275634881108999,-0.768494009971619,-0.639851033687592 ,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.00275634881108999,-0.768494009971619,-0.639851033687592 ,-0.189235538244247,-0.947714388370514,-0.256957918405533,0.163463488221169,-0.986320674419403,-0.0212411060929298 ,-0.531938970088959,-0.742404460906982,0.407279402017593,0.163463488221169,-0.986320674419403,-0.0212411060929298 ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.63937246799469,-0.666334867477417,0.383667439222336 ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.63937246799469,-0.666334867477417,0.383667439222336 ,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.794985055923462,-0.313673406839371,-0.519237637519836 ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.63937246799469,-0.666334867477417,0.383667439222336 ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.789937257766724,-0.089169554412365,0.606669545173645 ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.741121232509613,0.0951398462057114,0.664595901966095 ,-0.725173890590668,0.124969810247421,0.677130281925201,-0.755824446678162,0.0775531530380249,0.650165319442749 ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.741121232509613,0.0951398462057114,0.664595901966095 ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.905546963214874,-0.0230849031358957,0.423617511987686 ,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.905546963214874,-0.0230849031358957,0.423617511987686 ,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.63937246799469,-0.666334867477417,0.383667439222336 ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.233382239937782,0.37978932261467,0.8951495885849 ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.616599321365356,0.328253507614136,0.715580105781555 ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.616599321365356,0.328253507614136,0.715580105781555 ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.0140273822471499,0.873466432094574,0.486682236194611 ,0.545511066913605,0.803328096866608,0.238917589187622,-0.0140273822471499,0.873466432094574,0.486682236194611 ,-0.0990706533193588,0.626940011978149,0.772742688655853,0.0937898680567741,0.660230219364166,0.745184183120728 ,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728 ,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.233382239937782,0.37978932261467,0.8951495885849 ,0.00488457176834345,0.505567967891693,0.862772941589355,-0.00293335225433111,0.995907425880432,0.0903318226337433 ,-0.58504182100296,0.777154207229614,0.23185633122921,-0.570039451122284,0.607050001621246,0.553665339946747 ,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.00293335225433111,0.995907425880432,0.0903318226337433 ,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622 ,0.61859929561615,0.783204674720764,-0.0626528933644295,0.622634530067444,0.273028820753098,-0.733335912227631 ,0.0131716737523675,0.392405301332474,-0.919698059558868,0.0255556665360928,0.675508499145508,-0.736909151077271 ,0.611642181873322,0.428768634796143,-0.664869368076324,0.636519849300385,0.647450149059296,-0.419107168912888 ,0.611642181873322,0.428768634796143,-0.664869368076324,0.0255556665360928,0.675508499145508,-0.736909151077271 ,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898 ,0.00320792081765831,0.937661468982697,-0.347535103559494,0.0255556665360928,0.675508499145508,-0.736909151077271 ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.730222046375275,0.28398671746254,-0.621391415596008 ,-0.714973926544189,0.530257403850555,-0.455674588680267,0.0255556665360928,0.675508499145508,-0.736909151077271 ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.754495441913605,-0.0462081357836723,-0.654676616191864 ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.0128433015197515,0.17829929292202,-0.983892500400543 ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,0.590149700641632,0.106324933469296,-0.800261437892914 ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.0128433015197515,0.17829929292202,-0.983892500400543 ,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631 ,0.618943631649017,0.169027715921402,-0.767032206058502,-0.0128433015197515,0.17829929292202,-0.983892500400543 ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.730222046375275,0.28398671746254,-0.621391415596008 ,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.0128433015197515,0.17829929292202,-0.983892500400543 ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.875853359699249,-0.451781928539276,-0.169629007577896 ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.258316278457642,-0.4798983335495,-0.83843320608139 ,-0.236963242292404,-0.687786102294922,-0.686147749423981,0.614885807037354,-0.39096936583519,-0.684878408908844 ,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.258316278457642,-0.4798983335495,-0.83843320608139 ,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128 ,0.5450439453125,-0.288073390722275,-0.787363231182098,-0.258316278457642,-0.4798983335495,-0.83843320608139 ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.808649599552155,-0.254309177398682,-0.530483365058899 ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.258316278457642,-0.4798983335495,-0.83843320608139 ,-0.849323332309723,-0.375679105520248,-0.37083026766777,0.5450439453125,-0.288073390722275,-0.787363231182098 ,0.52705591917038,-0.123320385813713,-0.840835392475128,0.482761442661285,-0.152583673596382,-0.862357020378113 ,0.725502192974091,-0.203444570302963,-0.657462477684021,0.614885807037354,-0.39096936583519,-0.684878408908844 ,0.5450439453125,-0.288073390722275,-0.787363231182098,0.725502192974091,-0.203444570302963,-0.657462477684021 ,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.093654952943325,-0.971795976161957,-0.216428592801094 ,0.652852118015289,-0.584342896938324,-0.482003599405289,0.675393164157867,-0.663666367530823,-0.321544677019119 ,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.783477485179901,-0.59309047460556,0.185490429401398 ,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.163463488221169,-0.986320674419403,-0.0212411060929298 ,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.675393164157867,-0.663666367530823,-0.321544677019119 ,0.652852118015289,-0.584342896938324,-0.482003599405289,0.496177941560745,-0.590101897716522,-0.636857271194458 ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.943170547485352,-0.286243259906769,0.168802037835121 ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.764369487762451,-0.100322350859642,0.636926054954529 ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.764369487762451,-0.100322350859642,0.636926054954529 ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.978256165981293,-0.198640391230583,0.0596392676234245 ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.978256165981293,-0.198640391230583,0.0596392676234245 ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.824822843074799,-0.272803068161011,-0.495222896337509 ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.824822843074799,-0.272803068161011,-0.495222896337509 ,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.943170547485352,-0.286243259906769,0.168802037835121 ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.921134054660797,-0.0515539050102234,0.385816305875778 ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.616599321365356,0.328253507614136,0.715580105781555 ,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.616599321365356,0.328253507614136,0.715580105781555 ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.943170547485352,-0.286243259906769,0.168802037835121 ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.943170547485352,-0.286243259906769,0.168802037835121 ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.695510506629944,-0.654881238937378,-0.295627743005753 ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.695510506629944,-0.654881238937378,-0.295627743005753 ,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.921134054660797,-0.0515539050102234,0.385816305875778 ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.627654612064362,-0.419570088386536,0.655751943588257 ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.51134991645813,-0.634139060974121,0.579990446567535 ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.51134991645813,-0.634139060974121,0.579990446567535 ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.803909718990326,-0.356574565172195,0.476008087396622 ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.803909718990326,-0.356574565172195,0.476008087396622 ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.493933469057083,-0.226954907178879,0.839357614517212 ,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.493933469057083,-0.226954907178879,0.839357614517212 ,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.627654612064362,-0.419570088386536,0.655751943588257 ,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.978256165981293,-0.198640391230583,0.0596392676234245 ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.803909718990326,-0.356574565172195,0.476008087396622 ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.803909718990326,-0.356574565172195,0.476008087396622 ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.982640624046326,-0.149156004190445,0.110317416489124 ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.982640624046326,-0.149156004190445,0.110317416489124 ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.917778551578522,0.114838451147079,-0.380124539136887 ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.917778551578522,0.114838451147079,-0.380124539136887 ,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.978256165981293,-0.198640391230583,0.0596392676234245 ,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.693302690982819,-0.558895230293274,0.454936742782593 ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.464571386575699,-0.763281106948853,0.448971480131149 ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.693302690982819,-0.558895230293274,0.454936742782593 ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.61400443315506,-0.715833127498627,0.332537919282913 ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.464571386575699,-0.763281106948853,0.448971480131149 ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.61400443315506,-0.715833127498627,0.332537919282913 ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.848238348960876,-0.444671392440796,0.287678778171539 ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.848238348960876,-0.444671392440796,0.287678778171539 ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.51134991645813,-0.634139060974121,0.579990446567535 ,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.51134991645813,-0.634139060974121,0.579990446567535 ,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.464571386575699,-0.763281106948853,0.448971480131149 ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.848238348960876,-0.444671392440796,0.287678778171539 ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.984983623027802,-0.0637645348906517,0.160440966486931 ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.984983623027802,-0.0637645348906517,0.160440966486931 ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.87463504076004,0.473409682512283,-0.104387812316418 ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.87463504076004,0.473409682512283,-0.104387812316418 ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.982640624046326,-0.149156004190445,0.110317416489124 ,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.982640624046326,-0.149156004190445,0.110317416489124 ,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.848238348960876,-0.444671392440796,0.287678778171539 ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.735289394855499,-0.208703994750977,0.644819438457489 ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.919459879398346,-0.367317616939545,0.14025442302227 ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227 ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.704632818698883,0.278547644615173,-0.652613043785095 ,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.735289394855499,-0.208703994750977,0.644819438457489 ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.631199538707733,-0.586718201637268,0.507295668125153 ,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.984983623027802,-0.0637645348906517,0.160440966486931 ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.847999572753906,0.148594439029694,0.50874000787735 ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.984983623027802,-0.0637645348906517,0.160440966486931 ,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759 ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.951689600944519,0.131448090076447,0.277503579854965 ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.367316663265228,0.168655470013618,-0.914676904678345 ,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.673958420753479,0.316827058792114,-0.66738349199295 ,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.951689600944519,0.131448090076447,0.277503579854965 ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.501976847648621,0.497314512729645,0.707599818706512 ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.951689600944519,0.131448090076447,0.277503579854965 ,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489 ,-0.664353311061859,0.186838954687119,0.723689079284668,-0.951689600944519,0.131448090076447,0.277503579854965 ,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.908852636814117,0.0105791445821524,-0.416983097791672 ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.738919854164124,0.67080682516098,0.0633690059185028 ,-0.869927883148193,0.417829841375351,0.261999487876892,-0.686445116996765,0.270512044429779,0.674993574619293 ,-0.869927883148193,0.417829841375351,0.261999487876892,-0.738919854164124,0.67080682516098,0.0633690059185028 ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.501976847648621,0.497314512729645,0.707599818706512 ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.738919854164124,0.67080682516098,0.0633690059185028 ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.673958420753479,0.316827058792114,-0.66738349199295 ,-0.827955782413483,0.533315181732178,0.173390194773674,-0.738919854164124,0.67080682516098,0.0633690059185028 ,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.683650732040405,-0.221590802073479,0.695355415344238 ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.992319107055664,-0.0605176463723183,0.10789081454277 ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446 ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.992319107055664,-0.0605176463723183,0.10789081454277 ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.754495441913605,-0.0462081357836723,-0.654676616191864 ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.992319107055664,-0.0605176463723183,0.10789081454277 ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.730222046375275,0.28398671746254,-0.621391415596008 ,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.992319107055664,-0.0605176463723183,0.10789081454277 ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.75563508272171,-0.5704665184021,0.321844130754471 ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.982984185218811,-0.0105124665424228,0.18338917195797 ,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238 ,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.982984185218811,-0.0105124665424228,0.18338917195797 ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.730222046375275,0.28398671746254,-0.621391415596008 ,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.982984185218811,-0.0105124665424228,0.18338917195797 ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.664545059204102,0.734579563140869,-0.137013539671898 ,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.982984185218811,-0.0105124665424228,0.18338917195797 ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.708874583244324,-0.389509916305542,0.588029623031616 ,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.904232740402222,-0.100814543664455,0.414969354867935 ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.708874583244324,-0.389509916305542,0.588029623031616 ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.910853445529938,-0.30947008728981,0.273082852363586 ,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.926703691482544,-0.0945243984460831,0.363710582256317 ,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446 ,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.904232740402222,-0.100814543664455,0.414969354867935 ,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.685857892036438,-0.122487917542458,0.717353284358978 ,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946361243724823,0.305759787559509,-0.104457549750805 ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.858525216579437,0.180895999073982,0.479803144931793 ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.943636775016785,-0.199052885174751,0.264438152313232 ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.946361243724823,0.305759787559509,-0.104457549750805 ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.946361243724823,0.305759787559509,-0.104457549750805 ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.904232740402222,-0.100814543664455,0.414969354867935 ,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.910853445529938,-0.30947008728981,0.273082852363586 ,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.946361243724823,0.305759787559509,-0.104457549750805 ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.86247330904007,-0.0210732948035002,0.505663633346558 ,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543 ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.926066279411316,-0.206412896513939,0.315903395414352 ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.534013271331787,-0.0607958026230335,0.843287467956543 ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.858525216579437,0.180895999073982,0.479803144931793 ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.74452930688858,-0.0343341082334518,0.666706323623657 ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.701859831809998,-0.0527861975133419,0.710356533527374 ,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.526414215564728,0.148685231804848,0.837126493453979 ,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.701859831809998,-0.0527861975133419,0.710356533527374 ,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.517660737037659,-0.138916581869125,0.844233095645905 ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.656521320343018,-0.0877665653824806,0.74918407201767 ,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.927756071090698,-0.0379538796842098,0.371252179145813 ,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.927756071090698,-0.0379538796842098,0.371252179145813 ,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.723646342754364,0.0320940800011158,0.689424395561218 ,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.658224046230316,-0.61687958240509,0.431509733200073 ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.943636775016785,-0.199052885174751,0.264438152313232 ,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.618174970149994,-0.523447036743164,0.586398243904114 ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.766225039958954,-0.486649185419083,0.419609010219574 ,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.942062139511108,-0.21296301484108,0.259163379669189 ,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.855356216430664,-0.409418344497681,0.317399442195892 ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.933067381381989,0.178451672196388,0.312314331531525 ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.990018784999847,0.103214055299759,-0.095966711640358 ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.990018784999847,0.103214055299759,-0.095966711640358 ,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.933067381381989,0.178451672196388,0.312314331531525 ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.766225039958954,-0.486649185419083,0.419609010219574 ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.933067381381989,0.178451672196388,0.312314331531525 ,-0.796527564525604,0.591128647327423,0.126928299665451,-0.87463504076004,0.473409682512283,-0.104387812316418 ,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.87463504076004,0.473409682512283,-0.104387812316418 ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.990018784999847,0.103214055299759,-0.095966711640358 ,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358 ,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.917778551578522,0.114838451147079,-0.380124539136887 ,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.917778551578522,0.114838451147079,-0.380124539136887 ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.991512477397919,-0.0911088734865189,0.09274772554636 ,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.8672034740448,-0.366803020238876,0.336769551038742 ,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.965933620929718,0.0850775167346001,-0.244405627250671 ,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671 ,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.950445771217346,-0.194348081946373,0.24265544116497 ,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.942062139511108,-0.21296301484108,0.259163379669189 ,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.824822843074799,-0.272803068161011,-0.495222896337509 ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.931157529354095,-0.304730832576752,-0.200211733579636 ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.824822843074799,-0.272803068161011,-0.495222896337509 ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.991512477397919,-0.0911088734865189,0.09274772554636 ,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.695510506629944,-0.654881238937378,-0.295627743005753 ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.821155369281769,-0.380202680826187,0.425616890192032 ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.695510506629944,-0.654881238937378,-0.295627743005753 ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.931157529354095,-0.304730832576752,-0.200211733579636 ,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.816001713275909,-0.500939309597015,0.288445889949799 ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.707302629947662,-0.706726789474487,-0.0161320772022009 ,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.960481464862823,0.0760035738348961,0.267766177654266 ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.75563508272171,-0.5704665184021,0.321844130754471 ,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.664545059204102,0.734579563140869,-0.137013539671898 ,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.960481464862823,0.0760035738348961,0.267766177654266 ,-0.58504182100296,0.777154207229614,0.23185633122921,-0.921134054660797,-0.0515539050102234,0.385816305875778 ,-0.570039451122284,0.607050001621246,0.553665339946747,-0.58504182100296,0.777154207229614,0.23185633122921 ,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.921134054660797,-0.0515539050102234,0.385816305875778 ,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.743763327598572,-0.65217137336731,0.14658996462822 ,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.875853359699249,-0.451781928539276,-0.169629007577896 ,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.939273297786713,-0.163695856928825,0.301611185073853 ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.889755249023438,0.104038514196873,0.444422751665115 ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.939273297786713,-0.163695856928825,0.301611185073853 ,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.838507175445557,0.0982540920376778,0.535958766937256 ,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.939273297786713,-0.163695856928825,0.301611185073853 ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398 ,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.939273297786713,-0.163695856928825,0.301611185073853 ,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.889755249023438,0.104038514196873,0.444422751665115 ,-0.880822539329529,0.116122722625732,0.458984851837158,-0.981129169464111,-0.164403110742569,0.101770125329494 ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.875853359699249,-0.451781928539276,-0.169629007577896 ,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.981129169464111,-0.164403110742569,0.101770125329494 ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.808649599552155,-0.254309177398682,-0.530483365058899 ,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.981129169464111,-0.164403110742569,0.101770125329494 ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.832877278327942,0.0686137080192566,0.549188137054443 ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.981129169464111,-0.164403110742569,0.101770125329494 ,-0.880822539329529,0.116122722625732,0.458984851837158,-0.880822539329529,0.116122722625732,0.458984851837158 ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435 ,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.93205326795578,-0.0207287091761827,0.361727833747864 ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.880822539329529,0.116122722625732,0.458984851837158 ,-0.889755249023438,0.104038514196873,0.444422751665115,-0.725173890590668,0.124969810247421,0.677130281925201 ,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293 ,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.823492228984833,0.0713645666837692,0.56282114982605 ,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.838507175445557,0.0982540920376778,0.535958766937256 ,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.725173890590668,0.124969810247421,0.677130281925201 ,-0.824534773826599,0.090426079928875,0.558538734912872,-0.991512477397919,-0.0911088734865189,0.09274772554636 ,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.931157529354095,-0.304730832576752,-0.200211733579636 ,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.824534773826599,0.090426079928875,0.558538734912872 ,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.749832689762115,-0.240478411316872,0.616377413272858 ,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.74452930688858,-0.0343341082334518,0.666706323623657 ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.858525216579437,0.180895999073982,0.479803144931793 ,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.7187859416008,0.00215784600004554,0.695228099822998 ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.821155369281769,-0.380202680826187,0.425616890192032 ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.7187859416008,0.00215784600004554,0.695228099822998 ,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363 ,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.7187859416008,0.00215784600004554,0.695228099822998 ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.86247330904007,-0.0210732948035002,0.505663633346558 ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.974564790725708,-0.215875864028931,0.0601753368973732 ,-0.828934848308563,0.145112335681915,0.540193796157837,-0.788419961929321,0.211842447519302,0.577509045600891 ,-0.828934848308563,0.145112335681915,0.540193796157837,-0.974564790725708,-0.215875864028931,0.0601753368973732 ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.93205326795578,-0.0207287091761827,0.361727833747864 ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.974564790725708,-0.215875864028931,0.0601753368973732 ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435 ,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.974564790725708,-0.215875864028931,0.0601753368973732 ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.93205326795578,-0.0207287091761827,0.361727833747864 ,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.890684902667999,-0.186281442642212,0.414704352617264 ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.788419961929321,0.211842447519302,0.577509045600891 ,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.890684902667999,-0.186281442642212,0.414704352617264 ,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264 ,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.823492228984833,0.0713645666837692,0.56282114982605 ,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.789167404174805,-0.177452862262726,0.587984025478363 ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.680772840976715,-0.570546209812164,0.459374964237213 ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.831832468509674,-0.413072049617767,0.370710402727127 ,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.680772840976715,-0.570546209812164,0.459374964237213 ,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.658224046230316,-0.61687958240509,0.431509733200073 ,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.743188083171844,-0.353264600038528,0.568221390247345 ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.680772840976715,-0.570546209812164,0.459374964237213 ,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.686445116996765,0.270512044429779,0.674993574619293 ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.440651565790176,0.368113547563553,0.818729877471924 ,-0.596545398235321,0.216776832938194,0.772749245166779,-0.501976847648621,0.497314512729645,0.707599818706512 ,-0.438916772603989,0.289704263210297,0.850543081760406,-0.440651565790176,0.368113547563553,0.818729877471924 ,-0.492774546146393,0.528099179267883,0.691581189632416,-0.916797280311584,-0.182094678282738,0.355421304702759 ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.683301508426666,0.245855435729027,0.687498509883881 ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.916797280311584,-0.182094678282738,0.355421304702759 ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.809293568134308,0.0818510949611664,0.581673681735992 ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.631199538707733,-0.586718201637268,0.507295668125153 ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.809293568134308,0.0818510949611664,0.581673681735992 ,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.86247330904007,-0.0210732948035002,0.505663633346558 ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.922550320625305,-0.205608487129211,-0.326536417007446 ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.926066279411316,-0.206412896513939,0.315903395414352 ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.922550320625305,-0.205608487129211,-0.326536417007446 ,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.91798335313797,-0.00180715974420309,-0.396614909172058 ,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946118652820587,-0.0995350033044815,0.308143347501755 ,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946746110916138,0.159301742911339,-0.279812008142471 ,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.926703691482544,-0.0945243984460831,0.363710582256317 ,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.957550466060638,-0.078297920525074,0.277428478002548 ,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.897575080394745,-0.134165227413177,-0.419950813055038 ,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.922550320625305,-0.205608487129211,-0.326536417007446 ,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.959409058094025,-0.0255993846803904,0.280854016542435 ,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.957550466060638,-0.078297920525074,0.277428478002548 ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443 ,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.946118652820587,-0.0995350033044815,0.308143347501755 ,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.767573416233063,-0.0105870105326176,0.640873551368713 ,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.754495441913605,-0.0462081357836723,-0.654676616191864 ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.991874754428864,-0.114014439284801,0.0564371794462204 ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.712439298629761,-0.0633224174380302,0.698870837688446 ,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.991874754428864,-0.114014439284801,0.0564371794462204 ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443 ,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.991874754428864,-0.114014439284801,0.0564371794462204 ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.808649599552155,-0.254309177398682,-0.530483365058899 ,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.991874754428864,-0.114014439284801,0.0564371794462204 ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.808649599552155,-0.254309177398682,-0.530483365058899 ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.120517827570438,-0.0717617943882942,-0.990113973617554 ,-0.203820779919624,-0.25819143652916,-0.944348573684692,0.52705591917038,-0.123320385813713,-0.840835392475128 ,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.120517827570438,-0.0717617943882942,-0.990113973617554 ,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914 ,0.555061399936676,0.0270265471190214,-0.831370174884796,-0.120517827570438,-0.0717617943882942,-0.990113973617554 ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.754495441913605,-0.0462081357836723,-0.654676616191864 ,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.120517827570438,-0.0717617943882942,-0.990113973617554 ,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.93372631072998,0.331273853778839,-0.13569375872612 ,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213 ,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.157021999359131,0.633807837963104,-0.757384777069092 ,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.93372631072998,0.331273853778839,-0.13569375872612 ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.704632818698883,0.278547644615173,-0.652613043785095 ,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.142514750361443,0.172804057598114,-0.974591374397278 ,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.704632818698883,0.278547644615173,-0.652613043785095 ,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.157021999359131,0.633807837963104,-0.757384777069092 ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227 ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.61547714471817,-0.64069652557373,0.45901620388031 ,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.933359444141388,0.180034801363945,-0.310527950525284 ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.919459879398346,-0.367317616939545,0.14025442302227 ,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.841246128082275,0.241770818829536,0.483582258224487 ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.816001713275909,-0.500939309597015,0.288445889949799 ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.841246128082275,0.241770818829536,0.483582258224487 ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.858525216579437,0.180895999073982,0.479803144931793 ,-0.75360506772995,0.135660916566849,0.643176138401031,-0.841246128082275,0.241770818829536,0.483582258224487 ,-0.924713611602783,0.349783033132553,0.150188326835632,-0.931157529354095,-0.304730832576752,-0.200211733579636 ,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.869901895523071,0.0250669438391924,0.492587447166443 ,-0.824534773826599,0.090426079928875,0.558538734912872,-0.824534773826599,0.090426079928875,0.558538734912872 ,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.77546626329422,0.00887077674269676,0.631326675415039 ,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.799961805343628,-0.159910082817078,0.578350961208344 ,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.77546626329422,0.00887077674269676,0.631326675415039 ,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.854056000709534,-0.505750417709351,-0.121675431728363 ,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.743188083171844,-0.353264600038528,0.568221390247345 ,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.934483289718628,0.0995288342237473,0.341811418533325 ,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.74452930688858,-0.0343341082334518,0.666706323623657 ,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.526414215564728,0.148685231804848,0.837126493453979 ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.683301508426666,0.245855435729027,0.687498509883881 ,-0.683301508426666,0.245855435729027,0.687498509883881,-0.535982131958008,0.386546611785889,0.750536382198334 ,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474 ,-0.788419961929321,0.211842447519302,0.577509045600891,-0.588370680809021,0.464889794588089,0.661587059497833 ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.828934848308563,0.145112335681915,0.540193796157837 ,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.828934848308563,0.145112335681915,0.540193796157837 ,-0.535982131958008,0.386546611785889,0.750536382198334,-0.526414215564728,0.148685231804848,0.837126493453979 ,-0.440651565790176,0.368113547563553,0.818729877471924,-0.571967780590057,0.37627837061882,0.728880941867828 ,-0.700570464134216,0.212181925773621,0.681307435035706,-0.596545398235321,0.216776832938194,0.772749245166779 ,-0.788419961929321,0.211842447519302,0.577509045600891,-0.700570464134216,0.212181925773621,0.681307435035706 ,-0.571967780590057,0.37627837061882,0.728880941867828,-0.588370680809021,0.464889794588089,0.661587059497833 ,-0.809978306293488,0.193161576986313,0.55373615026474,-0.588370680809021,0.464889794588089,0.661587059497833 ,-0.571967780590057,0.37627837061882,0.728880941867828,-0.809293568134308,0.0818510949611664,0.581673681735992 ,-0.438916772603989,0.289704263210297,0.850543081760406,-0.649019360542297,-0.107299908995628,0.753167033195496 ,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.571967780590057,0.37627837061882,0.728880941867828 ,-0.440651565790176,0.368113547563553,0.818729877471924,-0.926066279411316,-0.206412896513939,0.315903395414352 ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.545637309551239,-0.291577398777008,0.785660624504089 ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.943636775016785,-0.199052885174751,0.264438152313232 ,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.545637309551239,-0.291577398777008,0.785660624504089 ,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.00275634881108999,-0.768494009971619,-0.639851033687592 ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.83446329832077,-0.267112225294113,-0.481998056173325 ,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119 ,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.958686172962189,-0.0430715903639793,0.281186193227768 ,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434 ,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.61547714471817,-0.64069652557373,0.45901620388031 ,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.884575426578522,-0.272238790988922,0.378698289394379 ,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.671594560146332,-0.181319773197174,0.718389809131622 ,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.884575426578522,-0.272238790988922,0.378698289394379 ,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.884575426578522,-0.272238790988922,0.378698289394379 ,-0.899577915668488,-0.399587064981461,0.176322862505913,0.045425571501255,0.382962375879288,0.922646403312683 ,-0.125368878245354,0.424985140562058,0.896476626396179,-0.0915354415774345,0.261345416307449,0.960895359516144 ,0.0344220362603664,0.22930283844471,0.972746253013611,-0.933067381381989,0.178451672196388,0.312314331531525 ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.796527564525604,0.591128647327423,0.126928299665451 ,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.656521320343018,-0.0877665653824806,0.74918407201767 ,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.545637309551239,-0.291577398777008,0.785660624504089 ,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.62365597486496,-0.228648245334625,0.747511327266693 ,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.618174970149994,-0.523447036743164,0.586398243904114 ,-0.847999572753906,0.148594439029694,0.50874000787735,-0.723476529121399,-0.368679702281952,0.583658277988434 ,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.656521320343018,-0.0877665653824806,0.74918407201767 ,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.61400443315506,-0.715833127498627,0.332537919282913 ,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.869600474834442,-0.362856715917587,0.334858238697052 ,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.868073582649231,-0.440582573413849,0.22876900434494 ,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.974529683589935,-0.218805104494095,0.0491550303995609 ,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.895342886447906,-0.199058875441551,0.398417770862579 ,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.963089942932129,0.0112352445721626,0.268945276737213 ,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.895342886447906,-0.199058875441551,0.398417770862579 ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.859187364578247,-0.159860625863075,0.486046999692917 ,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.960677444934845,-0.0662661194801331,0.269643515348434 ,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434 ,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.926139116287231,-0.258693248033524,0.274488925933838 ,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.993900120258331,-0.00187443883623928,0.110267803072929 ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.968760967254639,-0.0961536914110184,0.228597268462181 ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.851623713970184,0.0635921731591225,0.520281732082367 ,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.926139116287231,-0.258693248033524,0.274488925933838 ,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.93942403793335,-0.154625937342644,0.305897533893585 ,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.929889261722565,-0.324548780918121,0.173130333423615 ,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672 ,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.935810804367065,-0.306237637996674,-0.174575582146645 ,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.926139116287231,-0.258693248033524,0.274488925933838 ,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.963089942932129,0.0112352445721626,0.268945276737213 ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.927466154098511,-0.0275595653802156,0.372889995574951 ,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.910594463348389,-0.0996595025062561,0.401105612516403 ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.392777740955353,-0.563973963260651,-0.726401448249817 ,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748 ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.5412717461586,-0.0628231391310692,-0.838497579097748 ,0.387454837560654,-0.142215475440025,-0.910853147506714,0.323159694671631,-0.226072624325752,-0.918944478034973 ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.323159694671631,-0.226072624325752,-0.918944478034973 ,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.07368503510952,-0.326217710971832,-0.942418456077576 ,0.401222288608551,-0.244348540902138,-0.882787883281708,0.07368503510952,-0.326217710971832,-0.942418456077576 ,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.392777740955353,-0.563973963260651,-0.726401448249817 ,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0370321683585644,-0.265117049217224,-0.96350485086441 ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0825362652540207,-0.192694559693336,-0.977781474590302 ,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.175090745091438,-0.752051889896393,-0.635422050952911 ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0370321683585644,-0.265117049217224,-0.96350485086441 ,0.576868414878845,0.0959631279110909,-0.811180531978607,0.699126958847046,-0.0890455171465874,-0.709431052207947 ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.646651268005371,0.172121793031693,-0.743112564086914 ,0.576868414878845,0.0959631279110909,-0.811180531978607,0.646651268005371,0.172121793031693,-0.743112564086914 ,0.364371746778488,-0.284274369478226,-0.886803984642029,0.329197883605957,-0.229186490178108,-0.916025280952454 ,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.139740735292435,-0.294080168008804,-0.945510149002075 ,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.0825362652540207,-0.192694559693336,-0.977781474590302 ,0.0849056839942932,-0.303190618753433,-0.949139893054962,-0.0723719522356987,-0.219757899641991,-0.972866296768188 ,-0.139740735292435,-0.294080168008804,-0.945510149002075,0.07368503510952,-0.326217710971832,-0.942418456077576 ,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.07368503510952,-0.326217710971832,-0.942418456077576 ,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.208596497774124,-0.74006187915802,-0.639371454715729 ,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.208596497774124,-0.74006187915802,-0.639371454715729 ,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.1309574842453,-0.264535874128342,-0.955442786216736 ,0.30904021859169,0.371187627315521,-0.875621974468231,0.327664911746979,0.551296949386597,-0.767272710800171 ,0.298426777124405,0.233343333005905,-0.925468742847443,0.256420314311981,0.112910509109497,-0.959947824478149 ,0.30904021859169,0.371187627315521,-0.875621974468231,0.256420314311981,0.112910509109497,-0.959947824478149 ,0.329279124736786,0.0702807679772377,-0.941613435745239,0.532891869544983,0.203911662101746,-0.821246802806854 ,0.327664911746979,0.551296949386597,-0.767272710800171,0.201275274157524,0.759530663490295,-0.618547856807709 ,0.171656653285027,0.421078413724899,-0.890632927417755,0.298426777124405,0.233343333005905,-0.925468742847443 ,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.66732919216156,0.285801827907562,-0.687742054462433 ,0.461978673934937,0.681396842002869,-0.567691802978516,0.765603542327881,-0.000731433392502368,-0.643312335014343 ,0.66732919216156,0.285801827907562,-0.687742054462433,0.913814067840576,-0.0522273704409599,-0.402760744094849 ,-0.134053289890289,0.873388648033142,-0.468211501836777,0.461978673934937,0.681396842002869,-0.567691802978516 ,0.66732919216156,0.285801827907562,-0.687742054462433,0.260891646146774,0.576647460460663,-0.774217784404755 ,0.66732919216156,0.285801827907562,-0.687742054462433,0.765603542327881,-0.000731433392502368,-0.643312335014343 ,0.260891646146774,0.576647460460663,-0.774217784404755,0.0610933229327202,0.52752286195755,-0.847341299057007 ,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078 ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.171656653285027,0.421078413724899,-0.890632927417755 ,0.201275274157524,0.759530663490295,-0.618547856807709,0.0605678260326386,0.873000860214233,-0.483943223953247 ,0.0610933229327202,0.52752286195755,-0.847341299057007,0.784418284893036,-0.0482183061540127,-0.61835503578186 ,0.532891869544983,0.203911662101746,-0.821246802806854,0.329279124736786,0.0702807679772377,-0.941613435745239 ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.784418284893036,-0.0482183061540127,-0.61835503578186 ,0.574346244335175,0.00941364839673042,-0.81855833530426,0.74884694814682,0.0258232615888119,-0.662239730358124 ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.894509136676788,-0.20981177687645,-0.394756108522415 ,0.8075070977211,-0.171400144696236,-0.564406096935272,0.704347848892212,-0.492557406425476,-0.511156857013702 ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.792737483978271,-0.494514644145966,-0.356402337551117 ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.704347848892212,-0.492557406425476,-0.511156857013702 ,0.648240566253662,-0.463475733995438,-0.604131102561951,0.713780462741852,-0.04316745698452,-0.699037969112396 ,0.648240566253662,-0.463475733995438,-0.604131102561951,0.704347848892212,-0.492557406425476,-0.511156857013702 ,0.8075070977211,-0.171400144696236,-0.564406096935272,0.886527955532074,0.0429748557507992,-0.460674852132797 ,0.75768917798996,0.1346725076437,-0.638569056987762,0.769487977027893,0.440927565097809,-0.462029308080673,0.910501658916473 ,0.0911831632256508,-0.403326570987701,0.769487977027893,0.440927565097809,-0.462029308080673,0.75768917798996 ,0.1346725076437,-0.638569056987762,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.890664577484131 ,-0.0774205401539803,0.448020815849304,0.849142253398895,-0.224129945039749,0.478250175714493,0.966342151165009 ,-0.0820774585008621,-0.243815749883652,0.955755293369293,-0.11410153657198,-0.27113202214241,0.894509136676788 ,-0.20981177687645,-0.394756108522415,0.955755293369293,-0.11410153657198,-0.27113202214241,0.966342151165009 ,-0.0820774585008621,-0.243815749883652,0.936679661273956,0.0184381268918514,-0.349701732397079,0.673712253570557 ,-0.610602140426636,-0.416265428066254,0.936679661273956,0.0184381268918514,-0.349701732397079,0.966342151165009 ,-0.0820774585008621,-0.243815749883652,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755 ,-0.752050638198853,0.325740456581116,0.670762062072754,-0.708589673042297,-0.219041094183922,0.966342151165009 ,-0.0820774585008621,-0.243815749883652,0.849142253398895,-0.224129945039749,0.478250175714493,0.769487977027893 ,0.440927565097809,-0.462029308080673,0.771759808063507,0.606137216091156,-0.19231353700161,0.910501658916473 ,0.0911831632256508,-0.403326570987701,0.886527955532074,0.0429748557507992,-0.460674852132797,0.910501658916473 ,0.0911831632256508,-0.403326570987701,0.771759808063507,0.606137216091156,-0.19231353700161,0.959632039070129 ,0.0862699821591377,-0.267701029777527,0.76104062795639,0.645680010318756,0.0625654682517052,0.959632039070129 ,0.0862699821591377,-0.267701029777527,0.771759808063507,0.606137216091156,-0.19231353700161,-0.643834948539734 ,-0.15254844725132,0.74980366230011,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.491244077682495 ,-0.115444600582123,0.863337576389313,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.55826473236084 ,-0.110289022326469,0.822299718856812,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.76784873008728 ,-0.171090081334114,0.617362499237061,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.877796113491058 ,-0.0535202585160732,0.476035296916962,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.76784873008728 ,-0.171090081334114,0.617362499237061,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.877796113491058 ,-0.0535202585160732,0.476035296916962,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.539783835411072 ,-0.133467569947243,0.831155717372894,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.877796113491058 ,-0.0535202585160732,0.476035296916962,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.949614703655243 ,0.0149662410840392,0.313062191009521,-0.960874974727631,0.022131310775876,0.276096969842911,-0.877796113491058 ,-0.0535202585160732,0.476035296916962,-0.960874974727631,0.022131310775876,0.276096969842911,-0.968861937522888 ,-0.0327458865940571,0.245426714420319,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.960874974727631 ,0.022131310775876,0.276096969842911,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.971317529678345 ,-0.00673383427783847,0.237690657377243,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.949614703655243 ,0.0149662410840392,0.313062191009521,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.970579981803894 ,0.0114585794508457,0.240506216883659,-0.960874974727631,0.022131310775876,0.276096969842911,-0.853425025939941 ,0.00471344357356429,0.521194279193878,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.621041119098663 ,-0.108981177210808,0.776164293289185,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.853425025939941 ,0.00471344357356429,0.521194279193878,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.622180342674255 ,-0.0406685136258602,0.781816959381104,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.622180342674255 ,-0.0406685136258602,0.781816959381104,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.749224066734314 ,-0.0310621540993452,0.661587834358215,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408 ,-0.0349823534488678,0.316103518009186,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.749224066734314 ,-0.0310621540993452,0.661587834358215,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529 ,0.0284031052142382,0.408999383449554,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.749224066734314 ,-0.0310621540993452,0.661587834358215,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.621041119098663 ,-0.108981177210808,0.776164293289185,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.749224066734314 ,-0.0310621540993452,0.661587834358215,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.947903215885162 ,-0.069373294711113,0.310912847518921,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529 ,0.0284031052142382,0.408999383449554,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082 ,-0.0503960475325584,0.274981826543808,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.941187500953674 ,-0.0369091406464577,0.335862815380096,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.482923626899719 ,-0.587090194225311,0.649699866771698,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.35664427280426 ,-0.676209807395935,0.64462798833847,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.194612219929695 ,-0.744307279586792,0.638852655887604,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.324567019939423 ,-0.694126486778259,0.642529904842377,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0717575997114182 ,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0722988545894623 ,-0.821142494678497,0.566125333309174,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.0717575997114182 ,-0.708433508872986,0.702120244503021,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.149853184819222 ,-0.761297464370728,0.63084876537323,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.324567019939423 ,-0.694126486778259,0.642529904842377,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.106017202138901 ,-0.707463800907135,0.698752701282501,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564 ,-0.676506876945496,0.697809040546417,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.482923626899719 ,-0.587090194225311,0.649699866771698,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.482923626899719 ,-0.587090194225311,0.649699866771698,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.450729221105576 ,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.450729221105576 ,-0.524441123008728,0.722360491752625,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.365384161472321 ,-0.375545680522919,0.851739346981049,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.365384161472321 ,-0.375545680522919,0.851739346981049,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472 ,0.0976898819208145,0.950974881649017,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.743763327598572 ,-0.65217137336731,0.14658996462822,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.910853445529938,-0.30947008728981 ,0.273082852363586,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.924713611602783,0.349783033132553 ,0.150188326835632,-0.841246128082275,0.241770818829536,0.483582258224487,-0.816001713275909,-0.500939309597015 ,0.288445889949799,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.61859929561615,0.783204674720764 ,-0.0626528933644295,0.636519849300385,0.647450149059296,-0.419107168912888,0.00320792081765831,0.937661468982697 ,-0.347535103559494,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.00320792081765831,0.937661468982697 ,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.58504182100296,0.777154207229614 ,0.23185633122921,-0.942853271961212,0.10562913864851,0.316022574901581,-0.891881763935089,0.246565267443657 ,0.379147052764893,-0.85773640871048,0.318832546472549,0.403279215097427,-0.928196668624878,0.146431341767311 ,0.342065423727036,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.208732545375824,-0.912394225597382 ,-0.352090239524841,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.0787478685379028,-0.96028345823288 ,-0.26768359541893,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.0776756703853607,-0.921032607555389 ,-0.381661415100098,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.212649196386337,-0.901985108852386 ,-0.375770092010498,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.890300929546356,-0.0326753221452236 ,0.454198867082596,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.889755249023438,0.104038514196873 ,0.444422751665115,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.823492228984833,0.0713645666837692 ,0.56282114982605,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.866600096225739,0.0923771783709526 ,0.490378141403198,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.866523861885071,-0.498106122016907 ,0.0320423804223537,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.093654952943325,-0.971795976161957 ,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,-0.093654952943325,-0.971795976161957 ,-0.216428592801094,-0.184745773673058,-0.862863302230835,-0.470463544130325,0.664769351482391,-0.462521582841873 ,-0.586647689342499,0.614885807037354,-0.39096936583519,-0.684878408908844,0.664769351482391,-0.462521582841873 ,-0.586647689342499,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.236963242292404,-0.687786102294922 ,-0.686147749423981,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.236963242292404,-0.687786102294922 ,-0.686147749423981,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.866523861885071,-0.498106122016907 ,0.0320423804223537,-0.482406258583069,0.640618324279785,0.597404718399048,-0.92311555147171,0.291509866714478 ,0.250758200883865,-0.933935105800629,0.157070308923721,0.321082711219788,-0.907475471496582,0.340031713247299 ,0.246711865067482,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.157021999359131,0.633807837963104 ,-0.757384777069092,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.941332995891571,-0.0885210856795311 ,0.325662672519684,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685 ,0.225403621792793,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.958686172962189,-0.0430715903639793 ,0.281186193227768,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.941332995891571,-0.0885210856795311 ,0.325662672519684,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.910594463348389,-0.0996595025062561 ,0.401105612516403,-0.773442804813385,0.436002254486084,0.460096001625061,-0.784657657146454,0.439340144395828 ,0.437370121479034,-0.776160657405853,0.480935424566269,0.407769232988358,-0.7086301445961,0.50186014175415,0.495963364839554 ,-0.764328002929688,0.478488236665726,0.432263433933258,-0.809970021247864,0.357101410627365,0.46521732211113 ,-0.684539437294006,0.44213280081749,0.57958984375,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006 ,0.44213280081749,0.57958984375,-0.809970021247864,0.357101410627365,0.46521732211113,-0.803570151329041,0.341960042715073 ,0.487173795700073,-0.649461984634399,0.424084842205048,0.631150722503662,-0.636985540390015,0.443951308727264 ,0.630203664302826,-0.803570151329041,0.341960042715073,0.487173795700073,-0.809970021247864,0.357101410627365 ,0.46521732211113,-0.654083967208862,0.394615858793259,0.64533132314682,-0.594367325305939,0.527927815914154 ,0.606646299362183,-0.654083967208862,0.394615858793259,0.64533132314682,-0.809970021247864,0.357101410627365 ,0.46521732211113,-0.764328002929688,0.478488236665726,0.432263433933258,-0.51600193977356,0.0798369869589806 ,0.852858781814575,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.538346290588379,-0.311954945325851 ,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.51600193977356,0.0798369869589806 ,0.852858781814575,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.365840524435043,0.0561637468636036 ,0.928981363773346,-0.530206859111786,0.100595757365227,0.841879546642303,-0.734584510326386,-0.658318638801575 ,0.16432324051857,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.716389060020447,-0.69769012928009 ,0.00390529190190136,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.84095025062561,-0.471284002065659 ,0.265883654356003,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935 ,0.0566220432519913,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.378661543130875,-0.325545430183411 ,0.866392314434052,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.477150738239288,-0.679907381534576 ,0.556824207305908,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.35957869887352,-0.654971122741699 ,0.66461718082428,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.521853566169739,-0.69189864397049 ,0.498944044113159,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.626672208309174,0.255842447280884 ,0.736088693141937,-0.490771174430847,0.254273563623428,0.833359837532043,-0.354619354009628,-0.125306099653244 ,0.926576197147369,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.438916772603989,0.289704263210297 ,0.850543081760406,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977 ,0.644819438457489,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.501976847648621,0.497314512729645 ,0.707599818706512,-0.664353311061859,0.186838954687119,0.723689079284668,-0.438916772603989,0.289704263210297 ,0.850543081760406,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.633282124996185,-0.25443509221077 ,0.730901181697845,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.419774144887924,-0.091299757361412 ,0.903024911880493,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.419774144887924,-0.091299757361412 ,0.903024911880493,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.367648780345917,-0.406335473060608 ,0.83649617433548,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.284212023019791,-0.62719339132309 ,0.725156545639038,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.309603661298752,-0.439581990242004 ,0.843156754970551,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.194612219929695,-0.744307279586792 ,0.638852655887604,-0.0848771035671234,-0.827450573444366,0.55508691072464,0.187445163726807,0.511297464370728 ,0.838712811470032,0.12853179872036,0.854913532733917,0.502595722675323,0.133057877421379,0.867883086204529,0.478617310523987 ,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.330043107271194 ,0.436470597982407,0.83699756860733,0.133057877421379,0.867883086204529,0.478617310523987,0.046251967549324,0.890573501586914 ,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,0.046251967549324,0.890573501586914 ,0.452481597661972,0.133057877421379,0.867883086204529,0.478617310523987,-0.201113522052765,0.971361815929413 ,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.201113522052765,0.971361815929413 ,0.126529023051262,0.133057877421379,0.867883086204529,0.478617310523987,0.12853179872036,0.854913532733917,0.502595722675323 ,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.323215007781982,0.943282067775726,0.0758355185389519 ,0.477838784456253,0.792661190032959,-0.378626853227615,0.466618627309799,0.783142864704132,-0.41104057431221 ,-0.807841360569,0.43371844291687,0.399099737405777,-0.702935457229614,0.63435697555542,0.321672111749649,-0.323215007781982 ,0.943282067775726,0.0758355185389519,-0.488124132156372,0.865501821041107,-0.112434260547161,0.772461295127869 ,-0.0374295972287655,0.633957862854004,-0.30469673871994,0.941659867763519,0.142956644296646,0.727005004882813 ,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,0.772461295127869 ,-0.0374295972287655,0.633957862854004,0.125634163618088,0.492520093917847,0.861185252666473,0.466618627309799 ,0.783142864704132,-0.41104057431221,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994 ,0.941659867763519,0.142956644296646,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.807841360569 ,0.43371844291687,0.399099737405777,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.30469673871994 ,0.941659867763519,0.142956644296646,-0.6800137758255,0.685604989528656,0.2598597407341,-0.293433964252472,0.0976898819208145 ,0.950974881649017,-0.6800137758255,0.685604989528656,0.2598597407341,-0.30469673871994,0.941659867763519,0.142956644296646 ,0.125634163618088,0.492520093917847,0.861185252666473,0.772461295127869,-0.0374295972287655,0.633957862854004 ,0.450095027685165,-0.592146694660187,0.668413639068604,0.125634163618088,0.492520093917847,0.861185252666473 ,0.450095027685165,-0.592146694660187,0.668413639068604,-0.293433964252472,0.0976898819208145,0.950974881649017 ,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604 ,0.180472254753113,-0.782866299152374,0.595441102981567,-0.292413383722305,-0.535299479961395,0.792432248592377 ,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.450729221105576,-0.524441123008728,0.722360491752625 ,-0.292413383722305,-0.535299479961395,0.792432248592377,0.180472254753113,-0.782866299152374,0.595441102981567 ,0.066693402826786,-0.763606250286102,0.642228543758392,0.520344138145447,-0.759189605712891,0.390989869832993 ,0.066693402826786,-0.763606250286102,0.642228543758392,0.180472254753113,-0.782866299152374,0.595441102981567 ,0.493583381175995,-0.804481565952301,0.330431401729584,0.772461295127869,-0.0374295972287655,0.633957862854004 ,0.493583381175995,-0.804481565952301,0.330431401729584,0.180472254753113,-0.782866299152374,0.595441102981567 ,0.450095027685165,-0.592146694660187,0.668413639068604,-0.450729221105576,-0.524441123008728,0.722360491752625 ,0.066693402826786,-0.763606250286102,0.642228543758392,0.169332280755043,-0.786144733428955,0.594393014907837 ,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417 ,-0.38851073384285,-0.590570747852325,0.707308709621429,0.169332280755043,-0.786144733428955,0.594393014907837 ,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083 ,0.246509581804276,-0.871231377124786,0.424486666917801,0.169332280755043,-0.786144733428955,0.594393014907837 ,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993 ,0.593186497688293,-0.723713397979736,0.352659493684769,0.169332280755043,-0.786144733428955,0.594393014907837 ,0.066693402826786,-0.763606250286102,0.642228543758392,0.201723903417587,-0.93417751789093,0.294312417507172 ,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.235374078154564,-0.676506876945496,0.697809040546417 ,0.246509581804276,-0.871231377124786,0.424486666917801,0.201723903417587,-0.93417751789093,0.294312417507172 ,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083 ,0.331354945898056,-0.940484642982483,0.0754489675164223,-0.106017202138901,-0.707463800907135,0.698752701282501 ,0.201723903417587,-0.93417751789093,0.294312417507172,0.0746458247303963,-0.967216193675995,0.242736130952835 ,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656 ,-0.0717575997114182,-0.708433508872986,0.702120244503021,0.0746458247303963,-0.967216193675995,0.242736130952835 ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0488644652068615,-0.996573328971863,-0.0667372941970825 ,-0.044459342956543,-0.969122648239136,0.242537945508957,0.0746458247303963,-0.967216193675995,0.242736130952835 ,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223 ,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.0746458247303963,-0.967216193675995,0.242736130952835 ,0.201723903417587,-0.93417751789093,0.294312417507172,-0.0488644652068615,-0.996573328971863,-0.0667372941970825 ,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.209884941577911,-0.949742674827576,0.232243597507477 ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0594102963805199,-0.704399049282074,0.707313537597656 ,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.209884941577911,-0.949742674827576,0.232243597507477 ,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.30313828587532,-0.739410519599915,0.601148247718811 ,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.209884941577911,-0.949742674827576,0.232243597507477 ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.558743357658386,-0.822392702102661,-0.10712693631649 ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.209884941577911,-0.949742674827576,0.232243597507477 ,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.558743357658386,-0.822392702102661,-0.10712693631649 ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.632458329200745,-0.745043694972992,0.211911231279373 ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.30313828587532,-0.739410519599915,0.601148247718811 ,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.632458329200745,-0.745043694972992,0.211911231279373 ,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.887657046318054,-0.456045299768448,0.063934437930584 ,-0.726677179336548,-0.644755423069,0.237130090594292,-0.632458329200745,-0.745043694972992,0.211911231279373 ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.170729905366898,-0.910779476165771,0.375941574573517 ,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0656469166278839,-0.584858000278473,0.808474898338318 ,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.24947227537632,-0.924226999282837,0.289081335067749 ,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.170729905366898,-0.910779476165771,0.375941574573517 ,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.29602313041687,-0.765856146812439,0.57081925868988 ,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.29602313041687,-0.765856146812439,0.57081925868988 ,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.352154672145844,-0.530555903911591,0.771036624908447 ,-0.409960985183716,0.234984055161476,0.881314098834991,-0.419355839490891,0.314480572938919,0.851611793041229 ,-0.427875101566315,0.308164179325104,0.849680960178375,-0.59487509727478,0.0656027272343636,0.801136672496796 ,-0.595763564109802,0.13890865445137,0.791056394577026,-0.708662629127502,0.112244434654713,0.696561932563782 ,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.703076124191284,0.0390988439321518,0.710038900375366 ,-0.708662629127502,0.112244434654713,0.696561932563782,-0.80397242307663,0.0757209435105324,0.589825987815857 ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.31306853890419,0.294974654912949,0.902761340141296 ,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.35642284154892,0.221263155341148,0.907747387886047 ,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017 ,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017 ,-0.589879870414734,0.320975691080093,0.740956366062164,-0.807841360569,0.43371844291687,0.399099737405777,-0.6800137758255 ,0.685604989528656,0.2598597407341,-0.807841360569,0.43371844291687,0.399099737405777,-0.589879870414734,0.320975691080093 ,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.35642284154892,0.221263155341148 ,0.907747387886047,-0.419887959957123,0.29813814163208,0.857209324836731,-0.31306853890419,0.294974654912949 ,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.31306853890419,0.294974654912949 ,0.902761340141296,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361 ,0.674202144145966,-0.589879870414734,0.320975691080093,0.740956366062164,-0.31306853890419,0.294974654912949 ,0.902761340141296,-0.419887959957123,0.29813814163208,0.857209324836731,-0.615555763244629,0.148695304989815 ,0.773938477039337,-0.53751266002655,0.1327995210886,0.832733154296875,-0.419774144887924,-0.091299757361412 ,0.903024911880493,-0.617874979972839,-0.144242078065872,0.772932589054108,0.792737483978271,-0.494514644145966 ,-0.356402337551117,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565 ,0.0429561100900173,0.759971797466278,-0.612702488899231,0.216883733868599,0.243047595024109,-0.82210099697113 ,0.514857113361359,0.759971797466278,-0.612702488899231,0.216883733868599,0.50261402130127,-0.863443076610565 ,0.0429561100900173,0.314814835786819,-0.921267867088318,0.228379368782043,0.340434432029724,-0.915098071098328 ,0.216101616621017,0.314814835786819,-0.921267867088318,0.228379368782043,0.50261402130127,-0.863443076610565 ,0.0429561100900173,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085 ,-0.534954726696014,0.50261402130127,-0.863443076610565,0.0429561100900173,0.630495369434357,-0.750089466571808 ,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.773029983043671,-0.340951681137085 ,-0.534954726696014,0.626364231109619,-0.75530606508255,-0.192822501063347,0.364371746778488,-0.284274369478226 ,-0.886803984642029,0.646651268005371,0.172121793031693,-0.743112564086914,0.706785917282104,0.185755431652069 ,-0.682604253292084,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027 ,-0.686818599700928,0.428298622369766,-0.365026712417603,-0.826629161834717,0.706785917282104,0.185755431652069 ,-0.682604253292084,0.770183801651001,0.157961666584015,-0.617952287197113,0.713780462741852,-0.04316745698452 ,-0.699037969112396,0.770183801651001,0.157961666584015,-0.617952287197113,0.706785917282104,0.185755431652069 ,-0.682604253292084,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.773029983043671,-0.340951681137085 ,-0.534954726696014,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.706785917282104,0.185755431652069 ,-0.682604253292084,0.646651268005371,0.172121793031693,-0.743112564086914,0.521451473236084,-0.506328523159027 ,-0.686818599700928,0.770183801651001,0.157961666584015,-0.617952287197113,0.853590905666351,0.0963327810168266 ,-0.511959493160248,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266 ,-0.511959493160248,0.8075070977211,-0.171400144696236,-0.564406096935272,0.894509136676788,-0.20981177687645 ,-0.394756108522415,0.936679661273956,0.0184381268918514,-0.349701732397079,0.713780462741852,-0.04316745698452 ,-0.699037969112396,0.8075070977211,-0.171400144696236,-0.564406096935272,0.853590905666351,0.0963327810168266 ,-0.511959493160248,0.770183801651001,0.157961666584015,-0.617952287197113,-0.545112073421478,-0.349918723106384 ,0.761846244335175,-0.135216936469078,-0.381399750709534,0.914467394351959,0.279289931058884,0.161584615707397 ,0.94651335477829,0.243047595024109,-0.82210099697113,0.514857113361359,-0.188230976462364,-0.722290992736816 ,0.66548091173172,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.124414332211018,0.380547553300858 ,0.91635400056839,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.17153462767601,-0.247131928801537 ,0.953677952289581,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0895515978336334,-0.660540342330933 ,0.745430707931519,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0613121353089809,-0.89322817325592 ,0.445403426885605,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0613121353089809,-0.89322817325592 ,0.445403426885605,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.15943743288517,-0.987180471420288 ,-0.00737930601462722,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.15943743288517,-0.987180471420288 ,-0.00737930601462722,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.269127756357193,-0.79069060087204 ,0.549889624118805,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.119434364140034,-0.879600763320923 ,0.460475742816925,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.280322819948196,-0.610130190849304 ,0.741053521633148,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.218783125281334,-0.517780601978302 ,0.827065408229828,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.0553458705544472,-0.183565944433212 ,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.0553458705544472,-0.183565944433212 ,0.981448113918304,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.125227466225624,-0.596286714076996 ,0.792944073677063,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.23735885322094,-0.585129797458649 ,0.775424957275391,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.0895515978336334,-0.660540342330933 ,0.745430707931519,-0.166856274008751,-0.820909261703491,0.546138286590576,0.0681579038500786,-0.994212329387665 ,0.0830442756414413,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.161499664187431,-0.785857558250427 ,0.596947073936462,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.161499664187431,-0.785857558250427 ,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.28600937128067,-0.592511594295502 ,0.753079414367676,-0.174236983060837,-0.833520114421844,0.524295389652252,0.161769852042198,-0.974958479404449 ,0.152598813176155,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.166856274008751,-0.820909261703491 ,0.546138286590576,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.166856274008751,-0.820909261703491 ,0.546138286590576,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.406814515590668,-0.530913829803467 ,0.743392527103424,0.0128951743245125,-0.862936913967133,0.505147039890289,0.24199965596199,-0.948591530323029 ,0.203986048698425,0.161769852042198,-0.974958479404449,0.152598813176155,-0.174236983060837,-0.833520114421844 ,0.524295389652252,-0.761701762676239,0.421244710683823,0.492304056882858,-0.728943645954132,0.505101680755615 ,0.462075144052505,-0.741443395614624,0.635278224945068,0.216063171625137,-0.702385485172272,0.688902199268341 ,0.179076477885246,-0.741443395614624,0.635278224945068,0.216063171625137,-0.543530166149139,0.835534155368805 ,-0.0803593844175339,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.702385485172272,0.688902199268341 ,0.179076477885246,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.551566660404205,0.823827803134918 ,-0.13069823384285,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.169851988554001,0.888530313968658 ,-0.426220804452896,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.169851988554001,0.888530313968658 ,-0.426220804452896,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.523407638072968,0.841484844684601 ,0.133969098329544,-0.728943645954132,0.505101680755615,0.462075144052505,-0.523407638072968,0.841484844684601 ,0.133969098329544,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.741443395614624,0.635278224945068 ,0.216063171625137,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.169851988554001,0.888530313968658 ,-0.426220804452896,0.444303005933762,0.584981560707092,-0.678521454334259,0.461978673934937,0.681396842002869 ,-0.567691802978516,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.461978673934937,0.681396842002869 ,-0.567691802978516,0.444303005933762,0.584981560707092,-0.678521454334259,0.892134130001068,-0.0444634817540646 ,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.892134130001068,-0.0444634817540646 ,-0.449577271938324,0.444303005933762,0.584981560707092,-0.678521454334259,0.26505383849144,0.683794975280762 ,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,0.26505383849144,0.683794975280762 ,-0.679831504821777,0.444303005933762,0.584981560707092,-0.678521454334259,-0.169851988554001,0.888530313968658 ,-0.426220804452896,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.913814067840576,-0.0522273704409599 ,-0.402760744094849,0.778522193431854,0.369191855192184,-0.507543742656708,0.769487977027893,0.440927565097809 ,-0.462029308080673,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.75768917798996,0.1346725076437 ,-0.638569056987762,0.452028423547745,0.457834273576736,-0.765544295310974,0.260891646146774,0.576647460460663 ,-0.774217784404755,-0.134053289890289,0.873388648033142,-0.468211501836777,0.260891646146774,0.576647460460663 ,-0.774217784404755,0.452028423547745,0.457834273576736,-0.765544295310974,0.717603802680969,0.25128972530365 ,-0.649536907672882,0.886527955532074,0.0429748557507992,-0.460674852132797,0.717603802680969,0.25128972530365 ,-0.649536907672882,0.452028423547745,0.457834273576736,-0.765544295310974,0.75768917798996,0.1346725076437,-0.638569056987762 ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.864245176315308,-0.12554919719696,-0.487152576446533 ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.777899026870728,-0.433716207742691,-0.454712390899658 ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.886527955532074,0.0429748557507992,-0.460674852132797 ,0.928043901920319,-0.117735534906387,-0.3533735871315,0.894509136676788,-0.20981177687645,-0.394756108522415 ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.894509136676788,-0.20981177687645,-0.394756108522415 ,0.777899026870728,-0.433716207742691,-0.454712390899658,0.886527955532074,0.0429748557507992,-0.460674852132797 ,0.869438171386719,-0.191056177020073,-0.455603748559952,0.864245176315308,-0.12554919719696,-0.487152576446533 ,-0.134053289890289,0.873388648033142,-0.468211501836777,0.717603802680969,0.25128972530365,-0.649536907672882 ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.879603147506714,0.140207409858704,-0.454576879739761 ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.879603147506714,0.140207409858704,-0.454576879739761 ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.864245176315308,-0.12554919719696,-0.487152576446533 ,0.886527955532074,0.0429748557507992,-0.460674852132797,0.864245176315308,-0.12554919719696,-0.487152576446533 ,0.883733749389648,-0.197778105735779,-0.424144357442856,0.717603802680969,0.25128972530365,-0.649536907672882 ,0.735658526420593,0.230637982487679,-0.636877298355103,0.778522193431854,0.369191855192184,-0.507543742656708 ,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.892134130001068,-0.0444634817540646,-0.449577271938324 ,0.735658526420593,0.230637982487679,-0.636877298355103,0.892134130001068,-0.0444634817540646,-0.449577271938324 ,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.74884694814682,0.0258232615888119,-0.662239730358124 ,0.336174368858337,0.935995519161224,0.104399025440216,-0.328838348388672,0.935817182064056,0.126931354403496 ,-0.702385485172272,0.688902199268341,0.179076477885246,-0.551566660404205,0.823827803134918,-0.13069823384285 ,0.340434432029724,-0.915098071098328,0.216101616621017,0.196581169962883,-0.892622411251068,0.405685991048813 ,0.314814835786819,-0.921267867088318,0.228379368782043,0.314814835786819,-0.921267867088318,0.228379368782043 ,0.196581169962883,-0.892622411251068,0.405685991048813,-0.188230976462364,-0.722290992736816,0.66548091173172 ,0.243047595024109,-0.82210099697113,0.514857113361359,-0.694061398506165,-0.1789870262146,0.697310864925385 ,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.653488278388977,-0.259704351425171,0.710989952087402 ,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.684878885746002,-0.277860194444656,0.673598289489746 ,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.696582138538361,-0.198639899492264,0.689431309700012 ,-0.709937155246735,0.54696124792099,0.443646997213364,-0.776160657405853,0.480935424566269,0.407769232988358 ,-0.849210619926453,0.33398848772049,0.409014731645584,-0.719690024852753,0.419174522161484,0.553479015827179 ,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.754464566707611,-0.0490087866783142,0.654508471488953 ,-0.794279515743256,0.210044533014297,0.570088922977448,-0.639836966991425,0.246874988079071,0.727778375148773 ,-0.639836966991425,0.246874988079071,0.727778375148773,-0.794279515743256,0.210044533014297,0.570088922977448 ,-0.794037878513336,0.353904455900192,0.49422213435173,-0.659900903701782,0.452796697616577,0.59958815574646 ,-0.849210619926453,0.33398848772049,0.409014731645584,-0.794037878513336,0.353904455900192,0.49422213435173 ,-0.794279515743256,0.210044533014297,0.570088922977448,-0.872271299362183,0.143087893724442,0.467620134353638 ,-0.872271299362183,0.143087893724442,0.467620134353638,-0.794279515743256,0.210044533014297,0.570088922977448 ,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.847315430641174,-0.0547459907829762,0.528260707855225 ,-0.776160657405853,0.480935424566269,0.407769232988358,-0.784657657146454,0.439340144395828,0.437370121479034 ,-0.794037878513336,0.353904455900192,0.49422213435173,-0.849210619926453,0.33398848772049,0.409014731645584 ,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.759531497955322,-0.491919815540314,0.425589978694916 ,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.80817985534668,-0.287789851427078,0.51383101940155 ,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.789951264858246,-0.250378400087357,0.559721052646637 ,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.565922915935516,-0.460098385810852,0.684135019779205 ,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.596664726734161,-0.639922559261322,0.484241992235184 ,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.759531497955322,-0.491919815540314,0.425589978694916 ,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.759531497955322,-0.491919815540314,0.425589978694916 ,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.85713666677475,-0.480864852666855,0.184623166918755 ,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.556434690952301,-0.213731065392494,0.802931845188141 ,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.256741940975189,-0.440148830413818,0.860437452793121 ,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.239064574241638,-0.198313489556313,0.950536668300629 ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.0191204845905304,-0.446781009435654,0.894439041614532 ,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532 ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.305121690034866,-0.661639988422394,0.684933066368103 ,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103 ,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.565922915935516,-0.460098385810852,0.684135019779205 ,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.547457277774811,-0.812714397907257,0.199463784694672 ,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.430616140365601,-0.892966866493225,-0.131072074174881 ,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.58669912815094,-0.765324294567108,0.264693915843964 ,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.594583511352539,-0.803299486637115,0.0343575030565262 ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.309475094079971,-0.95003479719162,-0.0407320484519005 ,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.218511044979095,-0.922666072845459,-0.317710936069489 ,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.406780004501343,-0.911690473556519,0.0578830800950527 ,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.317538052797318,-0.919425249099731,-0.232006043195724 ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.391194581985474,-0.718477785587311,0.57511430978775 ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.1754040569067,-0.893526375293732,0.413332790136337 ,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.0491818785667419,-0.776791214942932,0.627834796905518 ,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.1754040569067,-0.893526375293732,0.413332790136337 ,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.0727874711155891,-0.98180228471756,0.1754030585289 ,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.1754040569067,-0.893526375293732,0.413332790136337 ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.329490900039673,-0.914458751678467,0.234948962926865 ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.1754040569067,-0.893526375293732,0.413332790136337 ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096 ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.391194581985474,-0.718477785587311,0.57511430978775 ,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.329490900039673,-0.914458751678467,0.234948962926865 ,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096 ,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.0777209997177124,-0.922415435314178,-0.378297746181488 ,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.2219308167696,-0.96528422832489,-0.137742727994919 ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.820191740989685,-0.246563538908958,0.51622861623764 ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.704794883728027,-0.197958365082741,0.681231737136841 ,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.819603979587555,-0.56017941236496,0.120201125741005 ,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.883318901062012,-0.449568182229996,0.132801294326782 ,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.819603979587555,-0.56017941236496,0.120201125741005 ,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.716389060020447,-0.69769012928009,0.00390529190190136 ,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.748079419136047,-0.662436008453369,0.0394426696002483 ,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798864305019379,-0.578265428543091,0.165604829788208 ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.798864305019379,-0.578265428543091,0.165604829788208 ,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.847638964653015,-0.474602103233337,0.23719410598278 ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.77647191286087,0.0245032440871,0.629675269126892 ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.626672208309174,0.255842447280884,0.736088693141937 ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.563944399356842,0.0872281566262245,0.821192979812622 ,-0.490771174430847,0.254273563623428,0.833359837532043,-0.563944399356842,0.0872281566262245,0.821192979812622 ,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.660281181335449,-0.462338596582413,0.591837644577026 ,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.771885097026825,-0.442620873451233,0.456377178430557 ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.737583756446838,0.0348345339298248,0.674356520175934 ,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.525489568710327,-0.438258349895477,0.729239583015442 ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525664925575256,-0.713997602462769,0.462475687265396 ,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.477150738239288,-0.679907381534576,0.556824207305908 ,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.515831410884857,-0.748138308525085,0.417381137609482 ,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.58669912815094,-0.765324294567108,0.264693915843964 ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.525664925575256,-0.713997602462769,0.462475687265396 ,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557 ,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.525664925575256,-0.713997602462769,0.462475687265396 ,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.521853566169739,-0.69189864397049,0.498944044113159 ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.487741857767105,-0.807749330997467,0.331132739782333 ,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.476766884326935,-0.797545433044434,0.369614124298096 ,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.363402187824249,-0.911391258239746,0.193144634366035 ,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.406780004501343,-0.911690473556519,0.0578830800950527 ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.487741857767105,-0.807749330997467,0.331132739782333 ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.58669912815094,-0.765324294567108,0.264693915843964 ,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.487741857767105,-0.807749330997467,0.331132739782333 ,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.329490900039673,-0.914458751678467,0.234948962926865 ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.274860739707947,-0.954389214515686,0.116588413715363 ,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.218423113226891,-0.952777028083801,0.210967406630516 ,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.201314941048622,-0.978592693805695,0.0427633114159107 ,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.2219308167696,-0.96528422832489,-0.137742727994919 ,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.274860739707947,-0.954389214515686,0.116588413715363 ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.406780004501343,-0.911690473556519,0.0578830800950527 ,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.274860739707947,-0.954389214515686,0.116588413715363 ,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.0727874711155891,-0.98180228471756,0.1754030585289 ,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0773368552327156,-0.996767818927765,-0.0217481888830662 ,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.0788524150848389,-0.974068284034729,-0.212069168686867 ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.201314941048622,-0.978592693805695,0.0427633114159107 ,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.928220152854919,-0.224693849682808,0.296513050794601 ,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.903494656085968,-0.23456384241581,0.358715981245041 ,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.926413714885712,-0.295776426792145,0.232967585325241 ,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.84095025062561,-0.471284002065659,0.265883654356003 ,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.820191740989685,-0.246563538908958,0.51622861623764 ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.926413714885712,-0.295776426792145,0.232967585325241 ,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.838545143604279,-0.366839319467545,0.402828723192215 ,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.883318901062012,-0.449568182229996,0.132801294326782 ,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.847638964653015,-0.474602103233337,0.23719410598278 ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.774548470973969,-0.470689743757248,0.422523230314255 ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.774548470973969,-0.470689743757248,0.422523230314255 ,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.820191740989685,-0.246563538908958,0.51622861623764 ,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.971317529678345,-0.00673383427783847,0.237690657377243 ,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.755345046520233,-0.113645695149899,0.645397901535034 ,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.853425025939941,0.00471344357356429,0.521194279193878 ,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.971317529678345,-0.00673383427783847,0.237690657377243 ,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.853425025939941,0.00471344357356429,0.521194279193878 ,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.969451248645782,-0.00855130515992641,0.245134904980659 ,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.908266186714172,-0.0645692199468613,0.413380444049835 ,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.969451248645782,-0.00855130515992641,0.245134904980659 ,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.888188779354095,-0.0342079848051071,0.45820364356041 ,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.964182317256927,0.0220649186521769,0.264321088790894 ,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.665728688240051,-0.201705411076546,0.718415081501007 ,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.827720582485199,-0.146306499838829,0.541731595993042 ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.717062890529633,-0.251050710678101,0.650226414203644 ,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.727153897285461,-0.354736089706421,0.58771550655365 ,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.727153897285461,-0.354736089706421,0.58771550655365 ,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.852678954601288,-0.302188754081726,0.426169604063034 ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.943083763122559,-0.101111672818661,0.316811382770538 ,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.704794883728027,-0.197958365082741,0.681231737136841 ,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.931119084358215,-0.21125616133213,0.297301381826401 ,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.820191740989685,-0.246563538908958,0.51622861623764 ,0.196581169962883,-0.892622411251068,0.405685991048813,0.340434432029724,-0.915098071098328,0.216101616621017 ,0.24199965596199,-0.948591530323029,0.203986048698425,0.0128951743245125,-0.862936913967133,0.505147039890289 ,0.196581169962883,-0.892622411251068,0.405685991048813,0.0128951743245125,-0.862936913967133,0.505147039890289 ,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188230976462364,-0.722290992736816,0.66548091173172 ,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.188230976462364,-0.722290992736816,0.66548091173172 ,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.566845297813416,-0.21562035381794,0.795106470584869 ,-0.522611916065216,0.119792513549328,0.844112873077393,-0.552518010139465,0.180195555090904,0.813789546489716 ,-0.530328452587128,0.10359351336956,0.841439306735992,-0.543807446956635,0.220993861556053,0.809589505195618 ,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.523460209369659,-0.770274937152863,0.36423334479332 ,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.0971510037779808,-0.777255237102509,0.621639728546143 ,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0971510037779808,-0.777255237102509,0.621639728546143 ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0675294324755669,-0.945460379123688,0.318660378456116 ,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.392426759004593,0.205112621188164,0.896621465682983 ,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.331932127475739,-0.817436873912811,0.470763176679611 ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.390473067760468,-0.682946801185608,0.617344677448273 ,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.403418689966202,-0.482175469398499,0.777663290500641 ,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.390473067760468,-0.682946801185608,0.617344677448273 ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.55286180973053,-0.0385416857898235,0.832381188869476 ,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.390473067760468,-0.682946801185608,0.617344677448273 ,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.617321014404297,0.0253577381372452,0.78630256652832 ,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.491244077682495,-0.115444600582123,0.863337576389313 ,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.617321014404297,0.0253577381372452,0.78630256652832 ,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847 ,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.640060782432556,0.00115585804451257,0.768323421478271 ,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.500701189041138,-0.0503258183598518,0.864156007766724 ,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.617321014404297,0.0253577381372452,0.78630256652832 ,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.571020781993866,-0.291943371295929,0.767270684242249 ,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.422783136367798,-0.0330428369343281,0.905628323554993 ,-0.671048521995544,0.370010554790497,0.642484307289124,-0.673884630203247,0.467902958393097,0.571792244911194 ,-0.713547646999359,0.198780298233032,0.671815574169159,-0.72460925579071,0.0771455466747284,0.684828460216522 ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.484222084283829,0.366713851690292,0.794386506080627 ,-0.655175447463989,0.41560024023056,0.630889534950256,-0.671048521995544,0.370010554790497,0.642484307289124 ,-0.498029559850693,0.248690649867058,0.830734312534332,-0.671048521995544,0.370010554790497,0.642484307289124 ,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.493602007627487,-0.18142081797123,0.850554823875427 ,0.579925835132599,-0.717766225337982,-0.3853540122509,0.161769852042198,-0.974958479404449,0.152598813176155 ,0.24199965596199,-0.948591530323029,0.203986048698425,0.65024209022522,-0.683634519577026,-0.331404685974121 ,0.579925835132599,-0.717766225337982,-0.3853540122509,0.65024209022522,-0.683634519577026,-0.331404685974121 ,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.645713806152344,-0.220039650797844,-0.731188178062439 ,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.645713806152344,-0.220039650797844,-0.731188178062439 ,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.576868414878845,0.0959631279110909,-0.811180531978607 ,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.576868414878845,0.0959631279110909,-0.811180531978607 ,0.329197883605957,-0.229186490178108,-0.916025280952454,0.387454837560654,-0.142215475440025,-0.910853147506714 ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.630495369434357,-0.750089466571808,-0.199602961540222 ,0.681055247783661,-0.346231341362,-0.645203530788422,0.708586275577545,-0.00218898337334394,-0.705620765686035 ,0.713780462741852,-0.04316745698452,-0.699037969112396,0.708586275577545,-0.00218898337334394,-0.705620765686035 ,0.681055247783661,-0.346231341362,-0.645203530788422,0.648240566253662,-0.463475733995438,-0.604131102561951 ,0.792737483978271,-0.494514644145966,-0.356402337551117,0.648240566253662,-0.463475733995438,-0.604131102561951 ,0.681055247783661,-0.346231341362,-0.645203530788422,0.630495369434357,-0.750089466571808,-0.199602961540222 ,0.894509136676788,-0.20981177687645,-0.394756108522415,0.928043901920319,-0.117735534906387,-0.3533735871315 ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.955755293369293,-0.11410153657198,-0.27113202214241 ,0.890664577484131,-0.0774205401539803,0.448020815849304,0.955755293369293,-0.11410153657198,-0.27113202214241 ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.888973355293274,0.214637205004692,0.404545694589615 ,0.76104062795639,0.645680010318756,0.0625654682517052,0.888973355293274,0.214637205004692,0.404545694589615 ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.959632039070129,0.0862699821591377,-0.267701029777527 ,0.886527955532074,0.0429748557507992,-0.460674852132797,0.959632039070129,0.0862699821591377,-0.267701029777527 ,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.928043901920319,-0.117735534906387,-0.3533735871315 ,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.304556578397751,-0.909958362579346,0.281462401151657 ,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.419383674860001,-0.901702642440796,0.105117149651051 ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.890724420547485,-0.0131717119365931,-0.454352855682373 ,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.735505998134613,0.630867898464203,0.247055947780609 ,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.890724420547485,-0.0131717119365931,-0.454352855682373 ,-0.753281593322754,0.510852336883545,0.414242386817932,-0.580071687698364,-0.808331191539764,-0.100586168467999 ,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.423251867294312,-0.8652303814888,-0.268764227628708 ,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.59330803155899,-0.795282304286957,-0.124545678496361 ,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.428953319787979,-0.860944986343384,-0.273446142673492 ,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.947893738746643,-0.165305480360985,0.272344529628754 ,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.959170579910278,-0.0044404505752027,0.282793402671814 ,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.947893738746643,-0.165305480360985,0.272344529628754 ,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.808385133743286,0.0124147878959775,0.588523030281067 ,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.734221398830414,-0.668789088726044,0.116790995001793 ,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.787305235862732,-0.612785577774048,0.0681484714150429 ,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.713214337825775,-0.70085734128952,-0.0111503517255187 ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713391602039337,-0.697049975395203,-0.0720673725008965 ,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.740522086620331,-0.668854534626007,0.065273717045784 ,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.635643780231476,-0.760042726993561,-0.135248005390167 ,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.768178582191467,-0.575125515460968,0.281304657459259 ,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.768178582191467,-0.575125515460968,0.281304657459259 ,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.80333799123764,-0.434850186109543,0.406882554292679 ,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793 ,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.713214337825775,-0.70085734128952,-0.0111503517255187 ,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713214337825775,-0.70085734128952,-0.0111503517255187 ,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391 ,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.111326843500137,-0.985514283180237,0.127937391400337 ,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.303882002830505,-0.951589345932007,0.046188946813345 ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.310964792966843,-0.937908291816711,0.153716951608658 ,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.11665827780962,-0.95351368188858,0.277853488922119 ,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.434661060571671,-0.742193758487701,0.5101158618927 ,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.310964792966843,-0.937908291816711,0.153716951608658 ,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.419383674860001,-0.901702642440796,0.105117149651051 ,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.347470790147781,-0.852081894874573,0.391433894634247 ,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.450571924448013,-0.714681327342987,0.534991204738617 ,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.436592847108841,-0.8724405169487,0.219622910022736 ,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.722620606422424,0.556017577648163,0.410687148571014 ,-0.762500584125519,0.610563993453979,0.214019775390625,-0.72613924741745,0.535442233085632,0.431304275989532 ,-0.659900903701782,0.452796697616577,0.59958815574646,-0.722620606422424,0.556017577648163,0.410687148571014 ,-0.659900903701782,0.452796697616577,0.59958815574646,-0.794037878513336,0.353904455900192,0.49422213435173 ,-0.784657657146454,0.439340144395828,0.437370121479034,-0.704894602298737,0.389235317707062,0.592975080013275 ,-0.808332681655884,0.323168575763702,0.49209788441658,-0.746036350727081,0.393973112106323,0.536856591701508 ,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.709384381771088,-0.0485099703073502,0.703150451183319 ,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.742441892623901,0.401161223649979,0.53651624917984 ,-0.766035974025726,0.399132251739502,0.503867447376251,0.00262317061424255,-0.184787794947624,0.982774972915649 ,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.299746423959732,0.0442999862134457,0.952989816665649 ,0.017973817884922,0.0102047342807055,0.999786376953125,-0.360249727964401,-0.149908572435379,0.920732080936432 ,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.664805889129639,0.056874256581068,0.74484795331955 ,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.837247967720032,-0.308187961578369,0.451703399419785 ,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.882139265537262,0.0501233264803886,0.468313992023468 ,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.64180713891983,-0.25287389755249,0.723973989486694 ,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.865811467170715,0.0343829169869423,0.499187588691711 ,-0.664805889129639,0.056874256581068,0.74484795331955,-0.859274387359619,0.29542076587677,0.417581170797348 ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.722620606422424,0.556017577648163,0.410687148571014 ,-0.784657657146454,0.439340144395828,0.437370121479034,-0.773442804813385,0.436002254486084,0.460096001625061 ,-0.805146157741547,0.523773431777954,0.278210490942001,-0.762500584125519,0.610563993453979,0.214019775390625 ,-0.722620606422424,0.556017577648163,0.410687148571014,-0.0658838152885437,0.0649923235177994,0.995708465576172 ,-0.474541217088699,0.29422801733017,0.829602658748627,-0.466067016124725,0.290591061115265,0.835666418075562 ,-0.674032330513,0.408573538064957,0.615425109863281,-0.701379120349884,0.42103236913681,0.575151324272156,-0.736577808856964 ,0.297644317150116,0.607339262962341,-0.704894602298737,0.389235317707062,0.592975080013275,-0.709671497344971 ,0.473905295133591,0.521325349807739,-0.701379120349884,0.42103236913681,0.575151324272156,-0.674032330513,0.408573538064957 ,0.615425109863281,-0.700818002223969,0.442935287952423,0.559162259101868,-0.265877991914749,0.261434108018875 ,0.927879869937897,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.317165046930313,-0.11580903083086 ,0.941272854804993,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.314933896064758,-0.0157290305942297 ,0.948983252048492,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.352154672145844,-0.530555903911591 ,0.771036624908447,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.314933896064758,-0.0157290305942297 ,0.948983252048492,-0.489892512559891,0.122311964631081,0.863159954547882,-0.460973918437958,-0.302575647830963 ,0.834236800670624,-0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672 ,0.701005280017853,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.489892512559891,0.122311964631081 ,0.863159954547882,-0.736584484577179,0.13217331469059,0.66330498456955,-0.489892512559891,0.122311964631081 ,0.863159954547882,-0.451172351837158,0.441036701202393,0.775841593742371,-0.715115904808044,0.391270339488983 ,0.57923811674118,-0.715115904808044,0.391270339488983,0.57923811674118,-0.878912448883057,0.190948858857155 ,0.437094360589981,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.736584484577179,0.13217331469059 ,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.736584484577179,0.13217331469059 ,0.66330498456955,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.767993330955505,-0.301860928535461 ,0.564859509468079,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.847993731498718,-0.0830313712358475 ,0.523461937904358,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.785227119922638,-0.253755480051041 ,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.857923269271851,-0.161368548870087 ,0.487778455018997,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.878912448883057,0.190948858857155 ,0.437094360589981,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.664805889129639,0.056874256581068 ,0.74484795331955,-0.575338959693909,0.442981451749802,0.687570035457611,-0.185234054923058,0.48134982585907 ,0.856732606887817,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.709384381771088,-0.0485099703073502 ,0.703150451183319,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.910155653953552,-0.193675979971886 ,0.366205275058746,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.144208893179893,0.115719296038151 ,0.982757806777954,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.100514478981495,0.314375013113022 ,0.943962454795837,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.468296974897385,-0.39009964466095 ,0.792792677879334,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.20097516477108,-0.349854558706284 ,0.914992213249207,-0.468296974897385,-0.39009964466095,0.792792677879334,0.0440349131822586,-0.167181059718132 ,0.984942317008972,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.882139265537262,0.0501233264803886 ,0.468313992023468,-0.766035974025726,0.399132251739502,0.503867447376251,-0.782657444477081,0.380464553833008 ,0.4926398396492,-0.126811400055885,-0.181621968746185,0.975157618522644,0.0174392946064472,-0.157727032899857 ,0.987328767776489,0.134034633636475,-0.240539237856865,0.961340487003326,-0.0849227532744408,-0.304428428411484 ,0.948742032051086,-0.53751266002655,0.1327995210886,0.832733154296875,-0.615555763244629,0.148695304989815,0.773938477039337 ,-0.595763564109802,0.13890865445137,0.791056394577026,-0.527163207530975,0.108157083392143,0.842852890491486 ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.703076124191284,0.0390988439321518,0.710038900375366 ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.626051127910614,0.0937396511435509,0.774127185344696 ,-0.606947243213654,0.110988683998585,0.786953926086426,-0.626051127910614,0.0937396511435509,0.774127185344696 ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.708724558353424,0.18108169734478,0.681849598884583 ,-0.774853527545929,0.101396143436432,0.62395578622818,-0.708724558353424,0.18108169734478,0.681849598884583 ,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.703076124191284,0.0390988439321518,0.710038900375366 ,-0.606947243213654,0.110988683998585,0.786953926086426,-0.578490018844604,0.0704870000481606,0.812638223171234 ,-0.582078754901886,0.152128055691719,0.798774898052216,-0.626051127910614,0.0937396511435509,0.774127185344696 ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.626051127910614,0.0937396511435509,0.774127185344696 ,-0.582078754901886,0.152128055691719,0.798774898052216,-0.538357496261597,0.0919485241174698,0.837685286998749 ,-0.518675327301025,0.170822575688362,0.837732374668121,-0.527163207530975,0.108157083392143,0.842852890491486 ,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.538357496261597,0.0919485241174698,0.837685286998749 ,-0.527163207530975,0.108157083392143,0.842852890491486,-0.595763564109802,0.13890865445137,0.791056394577026 ,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.419887959957123,0.29813814163208,0.857209324836731 ,-0.35642284154892,0.221263155341148,0.907747387886047,-0.447176039218903,0.207748264074326,0.869985222816467 ,-0.692487776279449,0.122583940625191,0.71093875169754,-0.711035132408142,0.199701055884361,0.674202144145966 ,-0.419887959957123,0.29813814163208,0.857209324836731,-0.518675327301025,0.170822575688362,0.837732374668121 ,-0.447176039218903,0.207748264074326,0.869985222816467,-0.35642284154892,0.221263155341148,0.907747387886047 ,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.53751266002655,0.1327995210886,0.832733154296875 ,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.667788088321686,0.180951654911041,0.722021877765656 ,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.711035132408142,0.199701055884361,0.674202144145966 ,-0.847861528396606,0.113259613513947,0.517979800701141,-0.807841360569,0.43371844291687,0.399099737405777,-0.692487776279449 ,0.122583940625191,0.71093875169754,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.847861528396606 ,0.113259613513947,0.517979800701141,-0.711035132408142,0.199701055884361,0.674202144145966,-0.578490018844604 ,0.0704870000481606,0.812638223171234,-0.606947243213654,0.110988683998585,0.786953926086426,-0.530206859111786 ,0.100595757365227,0.841879546642303,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.51600193977356 ,0.0798369869589806,0.852858781814575,-0.530206859111786,0.100595757365227,0.841879546642303,-0.606947243213654 ,0.110988683998585,0.786953926086426,-0.573864758014679,0.230327397584915,0.785893499851227,-0.381201595067978 ,-0.312435179948807,0.870097458362579,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.482243537902832 ,-0.699907302856445,0.526849985122681,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.157473087310791 ,-0.645219802856445,0.747591853141785,0.033345639705658,-0.401991754770279,0.915035903453827,-0.0569505728781223 ,-0.381698995828629,0.922530472278595,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.366043508052826 ,-0.907773017883301,-0.204842254519463,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.358404159545898 ,-0.845226526260376,0.396407097578049,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.561927437782288 ,-0.650319397449493,-0.511196792125702,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.692233920097351 ,-0.67291522026062,0.260762959718704,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.800594985485077 ,-0.588442921638489,0.113060474395752,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.954180955886841 ,-0.122847504913807,-0.272850096225739,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.561927437782288 ,-0.650319397449493,-0.511196792125702,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288 ,-0.650319397449493,-0.511196792125702,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.954180955886841 ,-0.122847504913807,-0.272850096225739,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.180075973272324 ,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.366043508052826 ,-0.907773017883301,-0.204842254519463,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.963837623596191 ,0.235864251852036,0.124036490917206,-0.864985883235931,0.37462642788887,0.333847969770432,-0.936657905578613 ,0.0257524941116571,0.349297523498535,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931 ,0.37462642788887,0.333847969770432,-0.963837623596191,0.235864251852036,0.124036490917206,-0.811837613582611 ,0.121092565357685,-0.571188449859619,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.267043441534042 ,-0.793497562408447,0.546854078769684,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.569225609302521 ,-0.734513640403748,0.369421064853668,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.569225609302521 ,-0.734513640403748,0.369421064853668,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.737712860107422 ,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.737712860107422 ,-0.674677968025208,0.0242776274681091,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.233076319098473 ,-0.804329991340637,0.546560764312744,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.233076319098473 ,-0.804329991340637,0.546560764312744,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.267043441534042 ,-0.793497562408447,0.546854078769684,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.00470763072371483 ,0.279436647891998,0.960152566432953,0.630376875400543,-0.0280195455998182,0.77578341960907,0.439482539892197 ,-0.499404758214951,0.74662572145462,0.485446602106094,-0.599754393100739,0.636110246181488,0.439482539892197 ,-0.499404758214951,0.74662572145462,0.630376875400543,-0.0280195455998182,0.77578341960907,0.775241792201996 ,-0.45661398768425,0.436467438936234,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.29678151011467 ,-0.786470353603363,0.541650354862213,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.403418689966202 ,-0.482175469398499,0.777663290500641,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.267043441534042 ,-0.793497562408447,0.546854078769684,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.0667830258607864 ,-0.603913366794586,-0.794247210025787,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.816609680652618 ,-0.561123669147491,0.135236501693726,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.615995168685913 ,-0.740946054458618,0.267486304044724,0.408733516931534,-0.739542424678802,0.534802675247192,-0.575954735279083 ,-0.540566444396973,0.613240599632263,0.315651625394821,-0.933804154396057,0.168445229530334,0.615995168685913 ,-0.740946054458618,0.267486304044724,0.775241792201996,-0.45661398768425,0.436467438936234,0.408733516931534 ,-0.739542424678802,0.534802675247192,0.630376875400543,-0.0280195455998182,0.77578341960907,0.103311404585838 ,-0.0802608132362366,0.991405546665192,0.408733516931534,-0.739542424678802,0.534802675247192,0.775241792201996 ,-0.45661398768425,0.436467438936234,-0.575954735279083,-0.540566444396973,0.613240599632263,0.408733516931534 ,-0.739542424678802,0.534802675247192,0.103311404585838,-0.0802608132362366,0.991405546665192,-0.54303914308548 ,0.178987935185432,0.820409536361694,-0.00470763072371483,0.279436647891998,0.960152566432953,-0.54303914308548 ,0.178987935185432,0.820409536361694,0.103311404585838,-0.0802608132362366,0.991405546665192,0.630376875400543 ,-0.0280195455998182,0.77578341960907,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.54303914308548 ,0.178987935185432,0.820409536361694,-0.743858754634857,0.1927819699049,0.639929115772247,-0.00470763072371483 ,0.279436647891998,0.960152566432953,-0.531166195869446,0.151813089847565,0.833555817604065,-0.743858754634857 ,0.1927819699049,0.639929115772247,-0.54303914308548,0.178987935185432,0.820409536361694,-0.811837613582611,0.121092565357685 ,-0.571188449859619,-0.963837623596191,0.235864251852036,0.124036490917206,-0.954180955886841,-0.122847504913807 ,-0.272850096225739,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.963837623596191,0.235864251852036 ,0.124036490917206,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.85713666677475,-0.480864852666855 ,0.184623166918755,-0.774853527545929,0.101396143436432,0.62395578622818,-0.721355617046356,0.238694369792938 ,0.650131583213806,-0.668299674987793,0.334984093904495,0.664199709892273,-0.708724558353424,0.18108169734478 ,0.681849598884583,-0.606947243213654,0.110988683998585,0.786953926086426,-0.708724558353424,0.18108169734478 ,0.681849598884583,-0.668299674987793,0.334984093904495,0.664199709892273,-0.573864758014679,0.230327397584915 ,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.573864758014679,0.230327397584915 ,0.785893499851227,-0.668299674987793,0.334984093904495,0.664199709892273,-0.87983900308609,0.0556478500366211 ,0.47200283408165,-0.841734766960144,0.21214547753334,0.496464431285858,-0.87983900308609,0.0556478500366211 ,0.47200283408165,-0.668299674987793,0.334984093904495,0.664199709892273,-0.721355617046356,0.238694369792938 ,0.650131583213806,-0.721025288105011,0.149201020598412,0.676654696464539,-0.807132244110107,0.16207791864872 ,0.567686796188354,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.708662629127502,0.112244434654713 ,0.696561932563782,-0.721025288105011,0.149201020598412,0.676654696464539,-0.708662629127502,0.112244434654713 ,0.696561932563782,-0.595763564109802,0.13890865445137,0.791056394577026,-0.615555763244629,0.148695304989815 ,0.773938477039337,-0.77285635471344,0.360512226819992,0.522229790687561,-0.903163015842438,0.185778304934502 ,0.387017965316772,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.841734766960144,0.21214547753334 ,0.496464431285858,-0.903163015842438,0.185778304934502,0.387017965316772,-0.77285635471344,0.360512226819992 ,0.522229790687561,-0.800202667713165,0.314497977495193,0.510653257369995,-0.721025288105011,0.149201020598412 ,0.676654696464539,-0.615555763244629,0.148695304989815,0.773938477039337,-0.617874979972839,-0.144242078065872 ,0.772932589054108,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.807132244110107,0.16207791864872 ,0.567686796188354,-0.721025288105011,0.149201020598412,0.676654696464539,-0.74636310338974,-0.0243592355400324 ,0.665093064308167,-0.809095621109009,0.140354558825493,0.570670545101166,-0.978964686393738,0.106371738016605 ,0.174106821417809,-0.93869537115097,0.246357470750809,0.241161808371544,-0.959026336669922,0.206695169210434 ,0.193766981363297,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.973734021186829,-0.0321761183440685 ,0.225403621792793,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.959026336669922,0.206695169210434 ,0.193766981363297,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478 ,0.250758200883865,-0.961905956268311,0.126988083124161,0.242096945643425,-0.959026336669922,0.206695169210434 ,0.193766981363297,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956 ,0.26808425784111,-0.935693740844727,0.265559196472168,0.232283264398575,-0.959026336669922,0.206695169210434 ,0.193766981363297,-0.93869537115097,0.246357470750809,0.241161808371544,-0.978964686393738,0.106371738016605 ,0.174106821417809,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.951185405254364,-0.150061026215553 ,0.2696812748909,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.903163015842438,0.185778304934502 ,0.387017965316772,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.951185405254364,-0.150061026215553 ,0.2696812748909,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.9692302942276,-0.185824662446976,0.161436811089516 ,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.951185405254364,-0.150061026215553,0.2696812748909 ,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.807132244110107,0.16207791864872,0.567686796188354 ,-0.809095621109009,0.140354558825493,0.570670545101166,-0.845765233039856,0.182700246572495,0.501300096511841 ,-0.800202667713165,0.314497977495193,0.510653257369995,-0.800202667713165,0.314497977495193,0.510653257369995 ,-0.845765233039856,0.182700246572495,0.501300096511841,-0.864785015583038,0.227262705564499,0.447770565748215 ,-0.903163015842438,0.185778304934502,0.387017965316772,-0.873595476150513,0.228950142860413,0.429433107376099 ,-0.864785015583038,0.227262705564499,0.447770565748215,-0.845765233039856,0.182700246572495,0.501300096511841 ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558 ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.845765233039856,0.182700246572495,0.501300096511841 ,-0.809095621109009,0.140354558825493,0.570670545101166,-0.906570792198181,0.0384938083589077,0.42029470205307 ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558 ,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.873595476150513,0.228950142860413,0.429433107376099 ,-0.868421196937561,0.174519643187523,0.46409860253334,-0.906570792198181,0.0384938083589077,0.42029470205307 ,-0.927467882633209,0.10914921015501,0.357616752386093,-0.74636310338974,-0.0243592355400324,0.665093064308167 ,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.874930620193481,-0.0546998046338558,0.481148958206177 ,-0.830214977264404,0.100066982209682,0.548388242721558,-0.374559938907623,-0.262731373310089,0.889200270175934 ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.666117191314697,0.0638493075966835,0.743109107017517 ,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517 ,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.159300580620766,0.0403820462524891,0.98640388250351 ,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.159300580620766,0.0403820462524891,0.98640388250351 ,-0.144208893179893,0.115719296038151,0.982757806777954,-0.466067016124725,0.290591061115265,0.835666418075562 ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.381201595067978,-0.312435179948807,0.870097458362579 ,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.709384381771088,-0.0485099703073502,0.703150451183319 ,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.137671425938606,0.655901074409485,0.742186188697815 ,-0.185234054923058,0.48134982585907,0.856732606887817,-0.575338959693909,0.442981451749802,0.687570035457611 ,-0.570384085178375,0.537651479244232,0.62096118927002,-0.299746423959732,0.0442999862134457,0.952989816665649 ,-0.185234054923058,0.48134982585907,0.856732606887817,0.0513622872531414,0.468802571296692,0.881808400154114 ,0.017973817884922,0.0102047342807055,0.999786376953125,-0.782657444477081,0.380464553833008,0.4926398396492 ,-0.766035974025726,0.399132251739502,0.503867447376251,-0.71884548664093,0.434318542480469,0.542796969413757 ,-0.724688529968262,0.437472999095917,0.532394528388977,-0.766035974025726,0.399132251739502,0.503867447376251 ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.745189905166626,0.433578848838806,0.506657063961029 ,-0.71884548664093,0.434318542480469,0.542796969413757,-0.704894602298737,0.389235317707062,0.592975080013275 ,-0.649461984634399,0.424084842205048,0.631150722503662,-0.674032330513,0.408573538064957,0.615425109863281,-0.162020102143288 ,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,0.0635503008961678 ,0.655404150485992,0.752600014209747,-0.137671425938606,0.655901074409485,0.742186188697815,-0.162020102143288 ,0.560337007045746,0.812263488769531,-0.137671425938606,0.655901074409485,0.742186188697815,-0.570384085178375 ,0.537651479244232,0.62096118927002,-0.636985540390015,0.443951308727264,0.630203664302826,-0.71884548664093 ,0.434318542480469,0.542796969413757,-0.745189905166626,0.433578848838806,0.506657063961029,-0.709671497344971 ,0.473905295133591,0.521325349807739,-0.700818002223969,0.442935287952423,0.559162259101868,-0.700818002223969 ,0.442935287952423,0.559162259101868,-0.75682544708252,0.389968425035477,0.524537801742554,-0.724688529968262 ,0.437472999095917,0.532394528388977,-0.71884548664093,0.434318542480469,0.542796969413757,-0.782657444477081 ,0.380464553833008,0.4926398396492,-0.724688529968262,0.437472999095917,0.532394528388977,-0.75682544708252,0.389968425035477 ,0.524537801742554,-0.570384085178375,0.537651479244232,0.62096118927002,-0.575338959693909,0.442981451749802 ,0.687570035457611,-0.803570151329041,0.341960042715073,0.487173795700073,-0.636985540390015,0.443951308727264 ,0.630203664302826,-0.570384085178375,0.537651479244232,0.62096118927002,-0.75682544708252,0.389968425035477 ,0.524537801742554,-0.649461984634399,0.424084842205048,0.631150722503662,-0.803570151329041,0.341960042715073 ,0.487173795700073,-0.75682544708252,0.389968425035477,0.524537801742554,-0.700818002223969,0.442935287952423 ,0.559162259101868,-0.674032330513,0.408573538064957,0.615425109863281,-0.474541217088699,0.29422801733017,0.829602658748627 ,-0.402321964502335,0.279689967632294,0.871728479862213,-0.709671497344971,0.473905295133591,0.521325349807739 ,-0.745189905166626,0.433578848838806,0.506657063961029,-0.466067016124725,0.290591061115265,0.835666418075562 ,-0.474541217088699,0.29422801733017,0.829602658748627,-0.745189905166626,0.433578848838806,0.506657063961029 ,-0.742441892623901,0.401161223649979,0.53651624917984,-0.566419124603271,0.446817666292191,0.692476272583008 ,-0.701379120349884,0.42103236913681,0.575151324272156,-0.709671497344971,0.473905295133591,0.521325349807739 ,-0.402321964502335,0.279689967632294,0.871728479862213,-0.271942734718323,0.215774357318878,0.93781054019928 ,-0.566419124603271,0.446817666292191,0.692476272583008,-0.271942734718323,0.215774357318878,0.93781054019928 ,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.389257401227951,0.367899239063263,0.844469547271729 ,-0.235767140984535,0.346122115850449,0.908082246780396,-0.313661307096481,0.354362040758133,0.88093364238739 ,-0.362064868211746,0.124421969056129,0.923811793327332,-0.298522680997849,0.122926026582718,0.946453094482422 ,-0.406924575567245,0.55693382024765,0.724042177200317,-0.296029925346375,0.469678968191147,0.831725895404816 ,-0.313661307096481,0.354362040758133,0.88093364238739,-0.319937378168106,0.457704126834869,0.829546272754669 ,-0.530960738658905,0.402330845594406,0.74579530954361,-0.362064868211746,0.124421969056129,0.923811793327332 ,-0.313661307096481,0.354362040758133,0.88093364238739,-0.296029925346375,0.469678968191147,0.831725895404816 ,-0.265877991914749,0.261434108018875,0.927879869937897,-0.410987347364426,-0.221517965197563,0.884318470954895 ,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.422395497560501,-0.639552056789398,0.642304599285126 ,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.298522680997849,0.122926026582718,0.946453094482422 ,-0.362064868211746,0.124421969056129,0.923811793327332,-0.435046851634979,-0.178151845932007,0.882607579231262 ,-0.410987347364426,-0.221517965197563,0.884318470954895,0.139874473214149,0.332423865795136,0.932700097560883 ,-0.113911136984825,0.222564980387688,0.968240201473236,-0.38422480225563,0.137366592884064,0.912963151931763 ,-0.496900916099548,0.22183683514595,0.838974297046661,-0.259019255638123,0.306849449872971,0.915834307670593 ,-0.365421146154404,0.118911430239677,0.923215806484222,-0.459187179803848,0.12899711728096,0.878923714160919 ,-0.365421146154404,0.118911430239677,0.923215806484222,-0.259019255638123,0.306849449872971,0.915834307670593 ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.215113177895546,0.235299572348595,0.947818756103516 ,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.259019255638123,0.306849449872971,0.915834307670593 ,-0.284513026475906,0.431574016809464,0.856035172939301,-0.235767140984535,0.346122115850449,0.908082246780396 ,-0.427875101566315,0.308164179325104,0.849680960178375,-0.284513026475906,0.431574016809464,0.856035172939301 ,-0.259019255638123,0.306849449872971,0.915834307670593,-0.496900916099548,0.22183683514595,0.838974297046661 ,-0.235767140984535,0.346122115850449,0.908082246780396,-0.284513026475906,0.431574016809464,0.856035172939301 ,-0.319937378168106,0.457704126834869,0.829546272754669,-0.313661307096481,0.354362040758133,0.88093364238739 ,-0.419355839490891,0.314480572938919,0.851611793041229,-0.319937378168106,0.457704126834869,0.829546272754669 ,-0.284513026475906,0.431574016809464,0.856035172939301,-0.427875101566315,0.308164179325104,0.849680960178375 ,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.0748888924717903,0.185519590973854,0.979782700538635 ,0.0812274590134621,0.180781692266464,0.980163276195526,0.0307731032371521,0.261024415493011,0.964841604232788 ,-0.786397933959961,0.197700291872025,0.58522891998291,-0.548411548137665,0.270011872053146,0.791415393352509 ,-0.590761244297028,0.21027672290802,0.778963983058929,-0.8270303606987,0.233872473239899,0.511198997497559,-0.530960738658905 ,0.402330845594406,0.74579530954361,-0.548411548137665,0.270011872053146,0.791415393352509,-0.786397933959961 ,0.197700291872025,0.58522891998291,-0.737271249294281,0.345291316509247,0.580693602561951,-0.548411548137665 ,0.270011872053146,0.791415393352509,-0.419355839490891,0.314480572938919,0.851611793041229,-0.409960985183716 ,0.234984055161476,0.881314098834991,-0.590761244297028,0.21027672290802,0.778963983058929,-0.419355839490891 ,0.314480572938919,0.851611793041229,-0.548411548137665,0.270011872053146,0.791415393352509,-0.530960738658905 ,0.402330845594406,0.74579530954361,-0.319937378168106,0.457704126834869,0.829546272754669,0.0340906009078026 ,0.177746370434761,0.983485698699951,0.0145859681069851,0.146671071648598,0.989077806472778,0.0307504720985889 ,0.178748592734337,0.983414113521576,0.0284836571663618,0.148866042494774,0.988447070121765,0.0145859681069851 ,0.146671071648598,0.989077806472778,-0.109741598367691,0.221520185470581,0.968961119651794,0.0381993055343628 ,0.285694986581802,0.957558989524841,0.0307504720985889,0.178748592734337,0.983414113521576,-0.521145462989807 ,0.365769624710083,0.771116077899933,-0.52777773141861,0.480110883712769,0.700674116611481,-0.593105614185333 ,0.348213493824005,0.725929081439972,-0.469541937112808,0.464283794164658,0.750979959964752,-0.593105614185333 ,0.348213493824005,0.725929081439972,-0.52777773141861,0.480110883712769,0.700674116611481,-0.542732357978821 ,0.501746475696564,0.673566699028015,-0.125368878245354,0.424985140562058,0.896476626396179,-0.229512825608253 ,0.568260371685028,0.790192425251007,-0.279750615358353,0.610641419887543,0.74084860086441,-0.20940063893795 ,0.453145354986191,0.866493284702301,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0915354415774345 ,0.261345416307449,0.960895359516144,-0.125368878245354,0.424985140562058,0.896476626396179,-0.20940063893795 ,0.453145354986191,0.866493284702301,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.229512825608253 ,0.568260371685028,0.790192425251007,-0.125368878245354,0.424985140562058,0.896476626396179,0.0543623231351376 ,0.513473629951477,0.85638165473938,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.125368878245354 ,0.424985140562058,0.896476626396179,0.045425571501255,0.382962375879288,0.922646403312683,-0.317165046930313 ,-0.11580903083086,0.941272854804993,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.362064868211746 ,0.124421969056129,0.923811793327332,-0.265877991914749,0.261434108018875,0.927879869937897,-0.352154672145844 ,-0.530555903911591,0.771036624908447,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.435046851634979 ,-0.178151845932007,0.882607579231262,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.29602313041687 ,-0.765856146812439,0.57081925868988,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.450571924448013 ,-0.714681327342987,0.534991204738617,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.347470790147781 ,-0.852081894874573,0.391433894634247,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.24947227537632 ,-0.924226999282837,0.289081335067749,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.271065413951874 ,-0.201962277293205,0.941134810447693,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.196050360798836 ,-0.216366931796074,0.956425428390503,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.251964539289474 ,0.00403303280472755,0.967728078365326,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.196050360798836 ,-0.216366931796074,0.956425428390503,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.511095225811005 ,0.0877900868654251,0.855028986930847,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.271065413951874 ,-0.201962277293205,0.941134810447693,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.620847463607788 ,0.0176430195569992,0.783732831478119,-0.628194212913513,0.287138849496841,0.723134398460388,-0.543807446956635 ,0.220993861556053,0.809589505195618,-0.530328452587128,0.10359351336956,0.841439306735992,-0.544984936714172 ,0.0565603822469711,0.836535930633545,-0.578717350959778,0.160483196377754,0.799582004547119,-0.522611916065216 ,0.119792513549328,0.844112873077393,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.500701189041138 ,-0.0503258183598518,0.864156007766724,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.578717350959778 ,0.160483196377754,0.799582004547119,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005 ,0.0877900868654251,0.855028986930847,-0.522611916065216,0.119792513549328,0.844112873077393,-0.543807446956635 ,0.220993861556053,0.809589505195618,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.281761676073074 ,-0.0540490485727787,0.957960903644562,-0.628194212913513,0.287138849496841,0.723134398460388,-0.308251351118088 ,0.00680266646668315,0.951280653476715,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.543807446956635 ,0.220993861556053,0.809589505195618,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.308251351118088 ,0.00680266646668315,0.951280653476715,-0.628194212913513,0.287138849496841,0.723134398460388,-0.739963114261627 ,0.167704880237579,0.651405930519104,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.604022920131683 ,-0.106749713420868,0.789785325527191,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.53056800365448 ,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.604022920131683 ,-0.106749713420868,0.789785325527191,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.545112073421478 ,-0.349918723106384,0.761846244335175,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.59464293718338 ,-0.168359830975533,0.786164581775665,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.135216936469078 ,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.59464293718338 ,-0.168359830975533,0.786164581775665,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.500701189041138 ,-0.0503258183598518,0.864156007766724,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.323468834161758 ,-0.409916341304779,0.85284024477005,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.252474844455719 ,-0.0950261279940605,0.962926030158997,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.323468834161758 ,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.633282124996185 ,-0.25443509221077,0.730901181697845,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.704939186573029 ,-0.235216736793518,0.669129133224487,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.323468834161758 ,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.704939186573029 ,-0.235216736793518,0.669129133224487,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.800495445728302 ,-0.125636011362076,0.586022734642029,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.873239040374756 ,-0.0713295936584473,0.482043266296387,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.800495445728302 ,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.800495445728302 ,-0.125636011362076,0.586022734642029,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.902154207229614 ,-0.0625928491353989,0.42684879899025,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.896919310092926 ,-0.0747082084417343,0.435837626457214,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.886639893054962 ,-0.0635407567024231,0.458074539899826,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.874930620193481 ,-0.0546998046338558,0.481148958206177,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.924965918064117 ,-0.0129916705191135,0.379827976226807,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.906570792198181 ,0.0384938083589077,0.42029470205307,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.927467882633209 ,0.10914921015501,0.357616752386093,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.939677178859711 ,-0.021852383390069,0.341363847255707,-0.951293051242828,0.220237165689468,0.215724766254425,-0.927467882633209 ,0.10914921015501,0.357616752386093,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.939677178859711 ,-0.021852383390069,0.341363847255707,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.902154207229614 ,-0.0625928491353989,0.42684879899025,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.446160137653351 ,-0.556800782680511,0.700652599334717,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.352613061666489 ,-0.495931386947632,0.793546497821808,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.741787433624268 ,-0.27885103225708,0.609912693500519,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.704939186573029 ,-0.235216736793518,0.669129133224487,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.785227119922638 ,-0.253755480051041,0.564824342727661,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.0850988999009132 ,0.32578244805336,0.941607117652893,-0.444485455751419,0.263989001512527,0.856003820896149,-0.459187179803848 ,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.506407201290131 ,0.224265813827515,0.832620322704315,-0.444485455751419,0.263989001512527,0.856003820896149,-0.409337908029556 ,0.315496683120728,0.856098294258118,-0.49151623249054,0.284042507410049,0.823244571685791,-0.49151623249054 ,0.284042507410049,0.823244571685791,-0.409337908029556,0.315496683120728,0.856098294258118,-0.352872759103775 ,0.327800124883652,0.87637197971344,-0.521145462989807,0.365769624710083,0.771116077899933,-0.593105614185333 ,0.348213493824005,0.725929081439972,-0.352872759103775,0.327800124883652,0.87637197971344,-0.409337908029556 ,0.315496683120728,0.856098294258118,-0.137076109647751,0.352542161941528,0.925701975822449,-0.197477996349335 ,0.340727478265762,0.919188320636749,-0.137076109647751,0.352542161941528,0.925701975822449,-0.409337908029556 ,0.315496683120728,0.856098294258118,-0.444485455751419,0.263989001512527,0.856003820896149,-0.0850988999009132 ,0.32578244805336,0.941607117652893,-0.137076109647751,0.352542161941528,0.925701975822449,-0.0867536216974258 ,0.288804531097412,0.953449428081512,-0.16978645324707,0.304286330938339,0.937327265739441,-0.197477996349335 ,0.340727478265762,0.919188320636749,-0.0850988999009132,0.32578244805336,0.941607117652893,0.0307731032371521 ,0.261024415493011,0.964841604232788,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.137076109647751 ,0.352542161941528,0.925701975822449,0.0340906009078026,0.177746370434761,0.983485698699951,0.0307731032371521 ,0.261024415493011,0.964841604232788,0.0812274590134621,0.180781692266464,0.980163276195526,0.0145859681069851 ,0.146671071648598,0.989077806472778,-0.365421146154404,0.118911430239677,0.923215806484222,-0.113911136984825 ,0.222564980387688,0.968240201473236,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.459187179803848 ,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.113911136984825 ,0.222564980387688,0.968240201473236,0.0879488736391068,0.341627478599548,0.935711324214935,0.0812274590134621 ,0.180781692266464,0.980163276195526,0.0812274590134621,0.180781692266464,0.980163276195526,0.0879488736391068 ,0.341627478599548,0.935711324214935,-0.109741598367691,0.221520185470581,0.968961119651794,0.0145859681069851 ,0.146671071648598,0.989077806472778,0.0879488736391068,0.341627478599548,0.935711324214935,0.0744598954916,0.293609887361526 ,0.953020930290222,-0.109741598367691,0.221520185470581,0.968961119651794,-0.273772716522217,0.454653739929199 ,0.847548484802246,-0.197477996349335,0.340727478265762,0.919188320636749,-0.16978645324707,0.304286330938339 ,0.937327265739441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.352872759103775,0.327800124883652 ,0.87637197971344,-0.197477996349335,0.340727478265762,0.919188320636749,-0.273772716522217,0.454653739929199 ,0.847548484802246,-0.521145462989807,0.365769624710083,0.771116077899933,-0.521145462989807,0.365769624710083 ,0.771116077899933,-0.273772716522217,0.454653739929199,0.847548484802246,-0.346435993909836,0.570491790771484 ,0.744661808013916,-0.52777773141861,0.480110883712769,0.700674116611481,-0.917084217071533,0.247074887156487 ,0.312906622886658,-0.915071547031403,0.269603192806244,0.299930244684219,-0.893653392791748,0.274633705615997 ,0.354908317327499,-0.913878262042999,0.245342120528221,0.323471456766129,-0.913878262042999,0.245342120528221 ,0.323471456766129,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541 ,0.351532429456711,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92679888010025,0.171274200081825 ,0.334228843450546,-0.919987142086029,0.260143458843231,0.293170690536499,-0.915071547031403,0.269603192806244 ,0.299930244684219,-0.917084217071533,0.247074887156487,0.312906622886658,-0.939980566501617,0.104119330644608 ,0.324954867362976,-0.893953561782837,0.312333762645721,0.321394920349121,-0.903283476829529,0.306006491184235 ,0.30073082447052,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338 ,0.274661630392075,-0.946860730648041,0.157310754060745,0.280549645423889,-0.903283476829529,0.306006491184235 ,0.30073082447052,-0.921472430229187,0.268827170133591,0.280393421649933,-0.915071547031403,0.269603192806244 ,0.299930244684219,-0.921472430229187,0.268827170133591,0.280393421649933,-0.903283476829529,0.306006491184235 ,0.30073082447052,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541 ,0.351532429456711,-0.893653392791748,0.274633705615997,0.354908317327499,-0.903283476829529,0.306006491184235 ,0.30073082447052,-0.893953561782837,0.312333762645721,0.321394920349121,-0.945931136608124,0.172555223107338 ,0.274661630392075,-0.921472430229187,0.268827170133591,0.280393421649933,-0.934037208557129,0.242426365613937 ,0.262305021286011,-0.915071547031403,0.269603192806244,0.299930244684219,-0.919987142086029,0.260143458843231 ,0.293170690536499,-0.934037208557129,0.242426365613937,0.262305021286011,-0.921472430229187,0.268827170133591 ,0.280393421649933,-0.974589943885803,0.150285556912422,0.166098326444626,-0.931853711605072,0.224255800247192 ,0.285233229398727,-0.958487570285797,0.190219804644585,0.212409943342209,-0.929433286190033,0.240452021360397 ,0.27988663315773,-0.958487570285797,0.190219804644585,0.212409943342209,-0.931853711605072,0.224255800247192 ,0.285233229398727,-0.919987142086029,0.260143458843231,0.293170690536499,-0.917084217071533,0.247074887156487 ,0.312906622886658,-0.920456767082214,0.196246728301048,0.338003754615784,-0.92679888010025,0.171274200081825 ,0.334228843450546,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229 ,0.280206710100174,-0.945931136608124,0.172555223107338,0.274661630392075,-0.934037208557129,0.242426365613937 ,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.934037208557129,0.242426365613937 ,0.262305021286011,-0.919987142086029,0.260143458843231,0.293170690536499,-0.38422480225563,0.137366592884064 ,0.912963151931763,-0.451660662889481,0.11085283011198,0.88527637720108,-0.0374716036021709,0.192808955907822 ,0.98052054643631,0.139874473214149,0.332423865795136,0.932700097560883,-0.311408758163452,-0.316491156816483 ,0.896023392677307,-0.451660662889481,0.11085283011198,0.88527637720108,-0.110501579940319,0.212603434920311 ,0.970870316028595,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.104054369032383,-0.821656465530396 ,0.560404658317566,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.311408758163452,-0.316491156816483 ,0.896023392677307,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.11665827780962,-0.95351368188858 ,0.277853488922119,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.173821628093719,-0.808952331542969 ,0.561588943004608,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.451660662889481,0.11085283011198 ,0.88527637720108,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.929433286190033,0.240452021360397 ,0.27988663315773,-0.919987142086029,0.260143458843231,0.293170690536499,-0.92679888010025,0.171274200081825 ,0.334228843450546,-0.920456767082214,0.196246728301048,0.338003754615784,-0.938261330127716,0.284641981124878 ,0.196582421660423,-0.930616736412048,0.324010014533997,0.170205876231194,-0.912839949131012,0.366738528013229 ,0.179516360163689,-0.921404659748077,0.300344526767731,0.246589884161949,-0.930616736412048,0.324010014533997 ,0.170205876231194,-0.938261330127716,0.284641981124878,0.196582421660423,-0.929433286190033,0.240452021360397 ,0.27988663315773,-0.920456767082214,0.196246728301048,0.338003754615784,-0.187731966376305,-0.0942238569259644 ,0.977690398693085,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.1817886531353,-0.326981544494629 ,0.927381277084351,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949 ,0.960674405097961,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.1817886531353,-0.326981544494629 ,0.927381277084351,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.251352518796921,-0.520119905471802 ,0.816270291805267,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.382226258516312,-0.867592990398407 ,0.31809663772583,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.381201595067978,-0.312435179948807 ,0.870097458362579,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.313734799623489,-0.862539172172546 ,0.396984457969666,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.237282007932663,-0.615076303482056 ,0.751916527748108,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.304556578397751,-0.909958362579346 ,0.281462401151657,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.251352518796921,-0.520119905471802 ,0.816270291805267,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.374559938907623,-0.262731373310089 ,0.889200270175934,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.237282007932663,-0.615076303482056 ,0.751916527748108,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.1817886531353,-0.326981544494629 ,0.927381277084351,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.296231538057327,-0.0182613059878349 ,0.95494157075882,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.0252015665173531,-0.364970922470093 ,0.930677771568298,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.611212015151978,0.257414042949677 ,0.74843692779541,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.296231538057327,-0.0182613059878349 ,0.95494157075882,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677 ,0.74843692779541,-0.447645485401154,0.239924728870392,0.861423015594482,-0.438263714313507,0.241573825478554 ,0.865775406360626,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.281328231096268,0.118911549448967 ,0.952215552330017,-0.438263714313507,0.241573825478554,0.865775406360626,-0.462802797555923,0.335958212614059 ,0.820332646369934,-0.389257401227951,0.367899239063263,0.844469547271729,-0.365840524435043,0.0561637468636036 ,0.928981363773346,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.281328231096268,0.118911549448967 ,0.952215552330017,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.176067680120468,0.0148913562297821 ,0.984265387058258,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.395585596561432,-0.109408371150494 ,0.911889135837555,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.126811400055885,-0.181621968746185 ,0.975157618522644,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.401081025600433,-0.243629589676857 ,0.883050739765167,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.0849227532744408,-0.304428428411484 ,0.948742032051086,-0.0424226783216,0.296286582946777,0.954156458377838,-0.284841567277908,0.292440235614777 ,0.912876784801483,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.00044033964513801,0.857838094234467 ,0.51391988992691,-0.284841567277908,0.292440235614777,0.912876784801483,-0.0424226783216,0.296286582946777,0.954156458377838 ,0.0171615201979876,0.876817524433136,0.480516880750656,-0.00044033964513801,0.857838094234467,0.51391988992691 ,0.0171615201979876,0.876817524433136,0.480516880750656,-0.004028111230582,0.993554711341858,-0.113281942903996 ,0.225808262825012,0.957561135292053,-0.179129242897034,-0.417269796133041,-0.358331203460693,0.835155487060547 ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.473101943731308,-0.0187131706625223,0.88080894947052 ,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052 ,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.365840524435043,0.0561637468636036,0.928981363773346 ,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.316211640834808,-0.127585977315903,0.94007021188736 ,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.665225088596344,-0.442761093378067,0.601197302341461 ,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.538346290588379,-0.311954945325851,0.782858490943909 ,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.623706221580505,-0.429783433675766,0.652898728847504 ,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.554198384284973,-0.301848381757736,0.775726556777954 ,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.559306979179382,-0.466573625802994,0.685189545154572 ,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.417269796133041,-0.358331203460693,0.835155487060547 ,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.857923269271851,-0.161368548870087,0.487778455018997 ,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.797025501728058,-0.136790543794632,0.588250517845154 ,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497 ,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.873239040374756,-0.0713295936584473,0.482043266296387 ,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.951293051242828,0.220237165689468,0.215724766254425 ,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.938549876213074,0.168846443295479,0.301023334264755 ,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.994882166385651,0.0616574659943581,0.0800485610961914 ,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.968760967254639,-0.0961536914110184,0.228597268462181 ,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994474828243256,0.0728728324174881,0.0755601078271866 ,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994882166385651,0.0616574659943581,0.0800485610961914 ,-0.6051185131073,0.474284201860428,0.639441967010498,-0.854055345058441,0.17005829513073,0.4915991127491,-0.800284266471863 ,0.299557894468308,0.519432485103607,-0.694730341434479,0.390507906675339,0.604030907154083,0.116292431950569 ,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,0.103844970464706 ,0.731326162815094,0.674075841903687,0.103844970464706,0.731326162815094,0.674075841903687,0.0662719309329987 ,0.700039923191071,0.711021840572357,0.0294170621782541,0.161411821842194,0.986448585987091,0.116292431950569 ,0.478548794984818,0.870325863361359,-0.694730341434479,0.390507906675339,0.604030907154083,-0.800284266471863 ,0.299557894468308,0.519432485103607,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275 ,0.428192466497421,0.504922866821289,-0.11088390648365,0.737395942211151,0.666297197341919,-0.012057981453836 ,0.63969749212265,0.76853221654892,0.103844970464706,0.731326162815094,0.674075841903687,-0.204512879252434,0.857547581195831 ,0.472002804279327,-0.476352840662003,0.646627724170685,0.595785677433014,-0.452526926994324,0.608857274055481 ,0.651546001434326,-0.156580075621605,0.884556114673615,0.439366787672043,-0.204512879252434,0.857547581195831 ,0.472002804279327,-0.219483211636543,0.80230712890625,0.55509489774704,-0.6051185131073,0.474284201860428,0.639441967010498 ,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498 ,-0.314458668231964,0.629549622535706,0.710480868816376,-0.599762678146362,0.237867310643196,0.764005124568939 ,-0.11088390648365,0.737395942211151,0.666297197341919,-0.314458668231964,0.629549622535706,0.710480868816376 ,-0.219483211636543,0.80230712890625,0.55509489774704,-0.142908409237862,0.800538897514343,0.581991970539093 ,-0.142908409237862,0.800538897514343,0.581991970539093,-0.147507503628731,0.729519248008728,0.667864620685577 ,-0.012057981453836,0.63969749212265,0.76853221654892,-0.11088390648365,0.737395942211151,0.666297197341919,-0.164747953414917 ,-0.0155069231987,0.986213803291321,-0.256247758865356,0.183180019259453,0.94909542798996,-0.0183928888291121 ,0.5789715051651,0.815140306949615,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121 ,0.5789715051651,0.815140306949615,-0.256247758865356,0.183180019259453,0.94909542798996,-0.599762678146362,0.237867310643196 ,0.764005124568939,-0.314458668231964,0.629549622535706,0.710480868816376,-0.854055345058441,0.17005829513073 ,0.4915991127491,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.783675134181976,0.0171119719743729 ,0.620935142040253,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.6051185131073,0.474284201860428 ,0.639441967010498,-0.599762678146362,0.237867310643196,0.764005124568939,-0.708063185214996,0.0871675312519073 ,0.700748383998871,-0.854055345058441,0.17005829513073,0.4915991127491,0.103844970464706,0.731326162815094,0.674075841903687 ,-0.012057981453836,0.63969749212265,0.76853221654892,0.0579896494746208,0.56835275888443,0.820738911628723,0.0662719309329987 ,0.700039923191071,0.711021840572357,0.103844970464706,0.731326162815094,0.674075841903687,-0.0183928888291121 ,0.5789715051651,0.815140306949615,-0.314458668231964,0.629549622535706,0.710480868816376,-0.11088390648365,0.737395942211151 ,0.666297197341919,-0.6051185131073,0.474284201860428,0.639441967010498,-0.219483211636543,0.80230712890625,0.55509489774704 ,-0.314458668231964,0.629549622535706,0.710480868816376,-0.58455902338028,0.465762704610825,0.664346158504486 ,-0.452526926994324,0.608857274055481,0.651546001434326,-0.476352840662003,0.646627724170685,0.595785677433014 ,-0.6051185131073,0.474284201860428,0.639441967010498,-0.694730341434479,0.390507906675339,0.604030907154083 ,-0.58455902338028,0.465762704610825,0.664346158504486,-0.476352840662003,0.646627724170685,0.595785677433014 ,-0.58455902338028,0.465762704610825,0.664346158504486,-0.617127954959869,0.561533391475677,0.551210701465607 ,-0.448102563619614,0.672870218753815,0.588599801063538,-0.452526926994324,0.608857274055481,0.651546001434326 ,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.164747953414917,-0.0155069231987,0.986213803291321 ,0.116292431950569,0.478548794984818,0.870325863361359,0.0294170621782541,0.161411821842194,0.986448585987091 ,-0.250480443239212,-0.173854321241379,0.952383458614349,0.0294170621782541,0.161411821842194,0.986448585987091 ,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.837151050567627,0.303785771131516,-0.454854130744934 ,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.750347912311554,0.23514324426651,-0.617807149887085 ,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.962794303894043,0.225805953145027,-0.148454576730728 ,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.750347912311554,0.23514324426651,-0.617807149887085 ,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257 ,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.750347912311554,0.23514324426651,-0.617807149887085 ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.387834370136261,0.406677484512329,-0.827162563800812 ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.750347912311554,0.23514324426651,-0.617807149887085 ,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812 ,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.296208798885345,0.254752188920975,-0.920522511005402 ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.49577060341835,0.312520623207092,-0.810272991657257 ,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.296208798885345,0.254752188920975,-0.920522511005402 ,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.1575877815485,0.232581928372383,-0.959724843502045 ,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.296208798885345,0.254752188920975,-0.920522511005402 ,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648 ,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.296208798885345,0.254752188920975,-0.920522511005402 ,-0.257477760314941,0.382379919290543,-0.887406766414642,0.0148119395598769,0.396181702613831,-0.918052673339844 ,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.0627769380807877,0.434968650341034,-0.898254573345184 ,0.012098491191864,0.36400181055069,-0.931319653987885,0.000681107048876584,0.225692093372345,-0.974198460578918 ,0.012098491191864,0.36400181055069,-0.931319653987885,-0.0627769380807877,0.434968650341034,-0.898254573345184 ,-0.982630908489227,0.117604449391365,0.143546640872955,-0.973341524600983,0.209714606404305,-0.0928762331604958 ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.980100452899933,0.0712500065565109,0.185274243354797 ,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.980100452899933,0.0712500065565109,0.185274243354797 ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.996125161647797,0.0665269121527672,0.0575226061046124 ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.996125161647797,0.0665269121527672,0.0575226061046124 ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.939923703670502,0.145416438579559,-0.308864831924438 ,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.939923703670502,0.145416438579559,-0.308864831924438 ,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.973341524600983,0.209714606404305,-0.0928762331604958 ,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.172267556190491,0.224487066268921,-0.959129512310028 ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.00121181993745267,0.232196122407913,-0.9726682305336 ,-0.00138723512645811,0.200112879276276,-0.979771912097931,-0.172267556190491,0.224487066268921,-0.959129512310028 ,-0.127526223659515,0.388497859239578,-0.912582278251648,0.0148119395598769,0.396181702613831,-0.918052673339844 ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.80251806974411,0.311771512031555,-0.508687853813171 ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.940674006938934,0.339310526847839,0.000872477365192026 ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.940674006938934,0.339310526847839,0.000872477365192026 ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.854649007320404,0.375557482242584,-0.358513176441193 ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.854649007320404,0.375557482242584,-0.358513176441193 ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.496117979288101,0.475835919380188,-0.726255536079407 ,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.496117979288101,0.475835919380188,-0.726255536079407 ,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.80251806974411,0.311771512031555,-0.508687853813171 ,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.293546974658966,0.266818583011627,-0.917953193187714 ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.496117979288101,0.475835919380188,-0.726255536079407 ,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.496117979288101,0.475835919380188,-0.726255536079407 ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.242920428514481,0.314263701438904,-0.917729794979095 ,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.242920428514481,0.314263701438904,-0.917729794979095 ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.127602562308311,0.294543892145157,-0.947080492973328 ,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.127602562308311,0.294543892145157,-0.947080492973328 ,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.293546974658966,0.266818583011627,-0.917953193187714 ,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.996125161647797,0.0665269121527672,0.0575226061046124 ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.960240244865417,0.158970504999161,0.229493051767349 ,-0.844134092330933,0.36929926276207,0.388658910989761,-0.960240244865417,0.158970504999161,0.229493051767349 ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.856849551200867,0.411835759878159,0.310161501169205 ,-0.931051731109619,0.363819122314453,0.027898857370019,-0.856849551200867,0.411835759878159,0.310161501169205 ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.940674006938934,0.339310526847839,0.000872477365192026 ,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.940674006938934,0.339310526847839,0.000872477365192026 ,-0.939561665058136,0.24427318572998,0.239905118942261,-0.996125161647797,0.0665269121527672,0.0575226061046124 ,-0.195909768342972,0.965728640556335,-0.170257449150085,0.695661246776581,0.682053446769714,-0.225518316030502 ,0.590233266353607,0.805784702301025,0.0483287125825882,-0.363503694534302,0.891945838928223,0.26888245344162 ,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.363503694534302,0.891945838928223,0.26888245344162 ,-0.907475471496582,0.340031713247299,0.246711865067482,-0.927974164485931,0.372219532728195,-0.0177929922938347 ,0.695661246776581,0.682053446769714,-0.225518316030502,0.699705183506012,0.427644014358521,-0.572305202484131 ,0.904918491840363,0.223670721054077,-0.362068980932236,0.912925958633423,0.3648841381073,-0.182827115058899 ,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.937249541282654,0.196521490812302,-0.28799757361412 ,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.997999429702759,-0.00234658480621874,-0.0631792545318604 ,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997999429702759,-0.00234658480621874,-0.0631792545318604 ,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997772693634033,-0.0664616152644157,0.00569661194458604 ,-0.482406258583069,0.640618324279785,0.597404718399048,0.300904870033264,0.919037222862244,0.254611104726791 ,0.821504950523376,0.569011390209198,0.0368196852505207,0.517754137516022,0.73391991853714,0.439650118350983 ,0.545511066913605,0.803328096866608,0.238917589187622,0.517754137516022,0.73391991853714,0.439650118350983,0.821504950523376 ,0.569011390209198,0.0368196852505207,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607 ,0.805784702301025,0.0483287125825882,0.855710446834564,0.513507485389709,-0.0637943744659424,0.821504950523376 ,0.569011390209198,0.0368196852505207,0.300904870033264,0.919037222862244,0.254611104726791,0.912925958633423 ,0.3648841381073,-0.182827115058899,0.61859929561615,0.783204674720764,-0.0626528933644295,0.545511066913605 ,0.803328096866608,0.238917589187622,0.855710446834564,0.513507485389709,-0.0637943744659424,0.912925958633423 ,0.3648841381073,-0.182827115058899,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607 ,0.805784702301025,0.0483287125825882,0.695661246776581,0.682053446769714,-0.225518316030502,-0.363503694534302 ,0.891945838928223,0.26888245344162,0.300904870033264,0.919037222862244,0.254611104726791,-0.482406258583069 ,0.640618324279785,0.597404718399048,-0.907475471496582,0.340031713247299,0.246711865067482,0.590233266353607 ,0.805784702301025,0.0483287125825882,0.300904870033264,0.919037222862244,0.254611104726791,-0.363503694534302 ,0.891945838928223,0.26888245344162,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.189944684505463 ,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,0.695661246776581 ,0.682053446769714,-0.225518316030502,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.189944684505463 ,0.677020668983459,-0.711030244827271,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.927974164485931 ,0.372219532728195,-0.0177929922938347,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.999242901802063 ,0.033017348498106,-0.020579107105732,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.927974164485931 ,0.372219532728195,-0.0177929922938347,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.99766343832016 ,-0.0678676217794418,-0.00785017758607864,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331 ,0.102228388190269,-0.564742267131805,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.99766343832016 ,-0.0678676217794418,-0.00785017758607864,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.872599542140961 ,-0.185326799750328,-0.451911568641663,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.878421425819397 ,-0.363578677177429,-0.310139209032059,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.966982245445251 ,-0.0721902102231979,-0.24440510571003,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.997032284736633 ,-0.0711089670658112,-0.0294978637248278,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.966982245445251 ,-0.0721902102231979,-0.24440510571003,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997772693634033 ,-0.0664616152644157,0.00569661194458604,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.966982245445251 ,-0.0721902102231979,-0.24440510571003,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.987662672996521 ,-0.0305646266788244,-0.153584524989128,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.86995929479599 ,-0.0271206852048635,-0.492377251386642,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.937249541282654 ,0.196521490812302,-0.28799757361412,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.21810856461525 ,0.364344894886017,-0.905362606048584,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012 ,0.427644014358521,-0.572305202484131,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.21810856461525 ,0.364344894886017,-0.905362606048584,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119 ,0.191680565476418,-0.884166955947876,0.486043959856033,0.298038214445114,-0.821543991565704,-0.21810856461525 ,0.364344894886017,-0.905362606048584,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.818911194801331 ,0.102228388190269,-0.564742267131805,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.21810856461525 ,0.364344894886017,-0.905362606048584,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331 ,0.102228388190269,-0.564742267131805,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.292363196611404 ,0.000483309850096703,-0.956307232379913,-0.250867486000061,0.201503813266754,-0.946816623210907,0.426036864519119 ,0.191680565476418,-0.884166955947876,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.292363196611404 ,0.000483309850096703,-0.956307232379913,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285 ,-0.152583673596382,-0.862357020378113,0.409033417701721,0.056328222155571,-0.910779237747192,-0.292363196611404 ,0.000483309850096703,-0.956307232379913,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961 ,-0.185326799750328,-0.451911568641663,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.292363196611404 ,0.000483309850096703,-0.956307232379913,-0.846078813076019,-0.0403724387288094,-0.531526803970337,0.652852118015289 ,-0.584342896938324,-0.482003599405289,0.664769351482391,-0.462521582841873,-0.586647689342499,0.527362644672394 ,-0.438462257385254,-0.72776335477829,0.496177941560745,-0.590101897716522,-0.636857271194458,0.614885807037354 ,-0.39096936583519,-0.684878408908844,0.725502192974091,-0.203444570302963,-0.657462477684021,0.527362644672394 ,-0.438462257385254,-0.72776335477829,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.846078813076019 ,-0.0403724387288094,-0.531526803970337,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.997772693634033 ,-0.0664616152644157,0.00569661194458604,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.846078813076019 ,-0.0403724387288094,-0.531526803970337,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997032284736633 ,-0.0711089670658112,-0.0294978637248278,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.294507533311844 ,-0.613352715969086,-0.73284637928009,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961 ,-0.185326799750328,-0.451911568641663,-0.878421425819397,-0.363578677177429,-0.310139209032059,0.725502192974091 ,-0.203444570302963,-0.657462477684021,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.269831538200378 ,-0.272859454154968,-0.923438489437103,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394 ,-0.438462257385254,-0.72776335477829,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.878421425819397 ,-0.363578677177429,-0.310139209032059,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.304955780506134 ,-0.78030651807785,-0.546007096767426,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.496177941560745 ,-0.590101897716522,-0.636857271194458,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.304955780506134 ,-0.78030651807785,-0.546007096767426,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394 ,-0.438462257385254,-0.72776335477829,-0.294507533311844,-0.613352715969086,-0.73284637928009,-0.304955780506134 ,-0.78030651807785,-0.546007096767426,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.933935105800629 ,0.157070308923721,0.321082711219788,-0.90123462677002,0.253379285335541,0.351532429456711,-0.914615273475647 ,0.203247100114822,0.349527567625046,-0.156580075621605,0.884556114673615,0.439366787672043,-0.0257334969937801 ,0.934201776981354,0.355815708637238,-0.109931223094463,0.875869393348694,0.469859391450882,-0.204512879252434 ,0.857547581195831,0.472002804279327,-0.389257401227951,0.367899239063263,0.844469547271729,-0.158640176057816 ,0.0965946391224861,0.982600033283234,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.281328231096268 ,0.118911549448967,0.952215552330017,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.105134896934032 ,-0.328432708978653,0.938657879829407,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.662640571594238 ,-0.0052980799227953,0.748918831348419,-0.447645485401154,0.239924728870392,0.861423015594482,-0.383932620286942 ,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.438263714313507 ,0.241573825478554,0.865775406360626,-0.82659912109375,0.121020883321762,0.549625158309937,-0.784394800662994 ,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.704894602298737 ,0.389235317707062,0.592975080013275,-0.736577808856964,0.297644317150116,0.607339262962341,-0.808332681655884 ,0.323168575763702,0.49209788441658,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.982630908489227 ,0.117604449391365,0.143546640872955,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996856987476349 ,0.0654792115092278,0.0445937626063824,-0.767612516880035,0.418656378984451,0.485281258821487,-0.800284266471863 ,0.299557894468308,0.519432485103607,-0.910772800445557,0.214318007230759,0.352931588888168,-0.844134092330933 ,0.36929926276207,0.388658910989761,-0.800284266471863,0.299557894468308,0.519432485103607,-0.854055345058441 ,0.17005829513073,0.4915991127491,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.910772800445557 ,0.214318007230759,0.352931588888168,-0.58455902338028,0.465762704610825,0.664346158504486,-0.694730341434479 ,0.390507906675339,0.604030907154083,-0.749469220638275,0.428192466497421,0.504922866821289,-0.617127954959869 ,0.561533391475677,0.551210701465607,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.573864758014679 ,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.602755010128021 ,-0.2416090965271,0.760467886924744,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.941886365413666 ,-0.24503418803215,0.229800596833229,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.87983900308609 ,0.0556478500366211,0.47200283408165,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.961850166320801 ,-0.179731413722038,0.20625451207161,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.95811140537262 ,-0.0200627520680428,0.285692185163498,-0.841734766960144,0.21214547753334,0.496464431285858,-0.960161685943604 ,0.0413071177899837,0.276375204324722,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.311408758163452 ,-0.316491156816483,0.896023392677307,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.305121660232544 ,-0.789030134677887,0.533228099346161,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.496900916099548 ,0.22183683514595,0.838974297046661,-0.459187179803848,0.12899711728096,0.878923714160919,-0.444485455751419 ,0.263989001512527,0.856003820896149,-0.506407201290131,0.224265813827515,0.832620322704315,-0.409960985183716 ,0.234984055161476,0.881314098834991,-0.427875101566315,0.308164179325104,0.849680960178375,-0.496900916099548 ,0.22183683514595,0.838974297046661,-0.506407201290131,0.224265813827515,0.832620322704315,-0.451172351837158 ,0.441036701202393,0.775841593742371,-0.489892512559891,0.122311964631081,0.863159954547882,-0.314933896064758 ,-0.0157290305942297,0.948983252048492,-0.265877991914749,0.261434108018875,0.927879869937897,-0.451172351837158 ,0.441036701202393,0.775841593742371,-0.265877991914749,0.261434108018875,0.927879869937897,-0.296029925346375 ,0.469678968191147,0.831725895404816,-0.431310623884201,0.54215931892395,0.721134126186371,-0.309603661298752 ,-0.439581990242004,0.843156754970551,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.170729905366898 ,-0.910779476165771,0.375941574573517,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.522650301456451 ,0.406982094049454,-0.749134302139282,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.884765982627869 ,0.444219619035721,-0.140918776392937,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.840847790241241 ,0.534673869609833,0.0842547118663788,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.690247058868408 ,0.178245946764946,0.701275527477264,-0.72613924741745,0.535442233085632,0.431304275989532,-0.684539437294006 ,0.44213280081749,0.57958984375,-0.746036350727081,0.393973112106323,0.536856591701508,-0.773442804813385,0.436002254486084 ,0.460096001625061,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375 ,-0.649461984634399,0.424084842205048,0.631150722503662,-0.704894602298737,0.389235317707062,0.592975080013275 ,-0.746036350727081,0.393973112106323,0.536856591701508,-0.808332681655884,0.323168575763702,0.49209788441658 ,-0.859274387359619,0.29542076587677,0.417581170797348,-0.773442804813385,0.436002254486084,0.460096001625061 ,-0.746036350727081,0.393973112106323,0.536856591701508,-0.764328002929688,0.478488236665726,0.432263433933258 ,-0.7086301445961,0.50186014175415,0.495963364839554,-0.776160657405853,0.480935424566269,0.407769232988358,-0.709937155246735 ,0.54696124792099,0.443646997213364,-0.594367325305939,0.527927815914154,0.606646299362183,-0.764328002929688 ,0.478488236665726,0.432263433933258,-0.709937155246735,0.54696124792099,0.443646997213364,-0.487235128879547 ,0.602307498455048,0.632319211959839,-0.16526772081852,0.578359544277191,0.798865914344788,-0.594367325305939 ,0.527927815914154,0.606646299362183,-0.487235128879547,0.602307498455048,0.632319211959839,-0.148301675915718 ,0.617360651493073,0.772575199604034,0.0581676289439201,0.571192860603333,0.818752288818359,-0.16526772081852 ,0.578359544277191,0.798865914344788,-0.148301675915718,0.617360651493073,0.772575199604034,0.0604556538164616 ,0.606487095355988,0.792791604995728,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.993900120258331 ,-0.00187443883623928,0.110267803072929,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003 ,0.0417908765375614,0.202954426407814,-0.8117955327034,0.118040002882481,0.571886837482452,-0.525420844554901 ,-0.165615484118462,0.834568381309509,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.739963114261627 ,0.167704880237579,0.651405930519104,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.42745703458786 ,-0.154648303985596,0.890710055828094,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.490864455699921 ,-0.0663091167807579,0.868708908557892,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.42745703458786 ,-0.154648303985596,0.890710055828094,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.405952632427216 ,-0.25302666425705,0.878168523311615,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.308251351118088 ,0.00680266646668315,0.951280653476715,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0580175220966339 ,-0.274829417467117,0.959740996360779,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.308251351118088 ,0.00680266646668315,0.951280653476715,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.0252015665173531 ,-0.364970922470093,0.930677771568298,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.662640571594238 ,-0.0052980799227953,0.748918831348419,-0.849758863449097,0.226472169160843,0.476046502590179,-0.611043751239777 ,-0.00789655186235905,0.791557371616364,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.849758863449097 ,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.847808718681335 ,0.127517849206924,0.514742314815521,-0.328838348388672,0.935817182064056,0.126931354403496,0.279289931058884 ,0.161584615707397,0.94651335477829,-0.124414332211018,0.380547553300858,0.91635400056839,-0.630214631557465 ,0.655408442020416,0.416256308555603,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.124414332211018 ,0.380547553300858,0.91635400056839,0.279289931058884,0.161584615707397,0.94651335477829,-0.377197057008743,-0.298063486814499 ,0.876858353614807,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.406814515590668,-0.530913829803467 ,0.743392527103424,-0.28600937128067,-0.592511594295502,0.753079414367676,0.0128951743245125,-0.862936913967133 ,0.505147039890289,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.406814515590668,-0.530913829803467 ,0.743392527103424,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188662573695183,-0.633236289024353 ,0.750611901283264,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.23735885322094,-0.585129797458649 ,0.775424957275391,-0.218783125281334,-0.517780601978302,0.827065408229828,0.138299137353897,-0.216322302818298 ,0.966477155685425,0.028565090149641,-0.175006538629532,0.984152793884277,0.0824021622538567,0.119332544505596 ,0.98942893743515,0.0996207222342491,0.155612200498581,0.982782065868378,-0.0433456413447857,-0.716439366340637 ,0.696301460266113,0.152057304978371,-0.511582612991333,0.845672428607941,-0.0233143605291843,-0.495335191488266 ,0.868389010429382,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.604022920131683,-0.106749713420868 ,0.789785325527191,-0.619005084037781,0.113047316670418,0.777208507061005,-0.603184819221497,0.0701910704374313 ,0.794506967067719,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.56518691778183,0.0673309490084648 ,0.822210609912872,-0.619005084037781,0.113047316670418,0.777208507061005,-0.498029559850693,0.248690649867058 ,0.830734312534332,-0.261222988367081,0.14337170124054,0.954571664333344,-0.245125457644463,0.30829644203186 ,0.919166386127472,-0.484222084283829,0.366713851690292,0.794386506080627,-0.728943645954132,0.505101680755615 ,0.462075144052505,-0.761701762676239,0.421244710683823,0.492304056882858,-0.673884630203247,0.467902958393097 ,0.571792244911194,-0.671048521995544,0.370010554790497,0.642484307289124,-0.655175447463989,0.41560024023056 ,0.630889534950256,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.866631507873535,0.0684041753411293 ,0.49423748254776,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.623706221580505,-0.429783433675766 ,0.652898728847504,-0.670063674449921,0.104801684617996,0.734868168830872,-0.483639568090439,-0.0787182152271271 ,0.871720254421234,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.554198384284973,-0.301848381757736 ,0.775726556777954,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.739276468753815,0.150933310389519 ,0.656269311904907,-0.670063674449921,0.104801684617996,0.734868168830872,-0.554198384284973,-0.301848381757736 ,0.775726556777954,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.948079526424408,-0.0349823534488678 ,0.316103518009186,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.00827599223703146,-0.428946763277054 ,0.903291881084442,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0569505728781223,-0.381698995828629 ,0.922530472278595,0.033345639705658,-0.401991754770279,0.915035903453827,-0.426155984401703,-0.544485569000244 ,0.722444832324982,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.0110307689756155,-0.0793537572026253 ,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.00827599223703146,-0.428946763277054 ,0.903291881084442,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.426155984401703,-0.544485569000244 ,0.722444832324982,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.865811467170715,0.0343829169869423 ,0.499187588691711,-0.782657444477081,0.380464553833008,0.4926398396492,-0.575338959693909,0.442981451749802 ,0.687570035457611,-0.664805889129639,0.056874256581068,0.74484795331955,0.0440349131822586,-0.167181059718132 ,0.984942317008972,-0.100514478981495,0.314375013113022,0.943962454795837,-0.144208893179893,0.115719296038151 ,0.982757806777954,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.976188123226166,-0.133096665143967 ,-0.171295195817947,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119 ,-0.327353954315186,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.0115164406597614,-0.997357308864594 ,0.0717345252633095,0.315651625394821,-0.933804154396057,0.168445229530334,-0.575954735279083,-0.540566444396973 ,0.613240599632263,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688 ,-0.55961686372757,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.0115164406597614,-0.997357308864594 ,0.0717345252633095,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.451660662889481,0.11085283011198 ,0.88527637720108,-0.38422480225563,0.137366592884064,0.912963151931763,-0.215113177895546,0.235299572348595 ,0.947818756103516,-0.110501579940319,0.212603434920311,0.970870316028595,-0.354619354009628,-0.125306099653244 ,0.926576197147369,-0.490771174430847,0.254273563623428,0.833359837532043,-0.330226361751556,0.315774649381638 ,0.889514982700348,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.134053289890289,0.873388648033142 ,-0.468211501836777,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.152414619922638,0.895912230014801 ,-0.417266219854355,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.152414619922638,0.895912230014801 ,-0.417266219854355,0.461978673934937,0.681396842002869,-0.567691802978516,-0.999627530574799,0.0187976788729429 ,-0.0197845976799726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998166382312775,0.0398845337331295 ,0.0455306805670261,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.127602562308311,0.294543892145157 ,-0.947080492973328,0.002942921128124,0.253444164991379,-0.967345535755157,-0.00542618287727237,0.149814411997795 ,-0.98869925737381,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.0685182884335518,0.227593377232552 ,-0.971342623233795,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.156535282731056,0.121644385159016 ,-0.980152726173401,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.109931223094463,0.875869393348694 ,0.469859391450882,-0.147507503628731,0.729519248008728,0.667864620685577,-0.142908409237862,0.800538897514343 ,0.581991970539093,-0.204512879252434,0.857547581195831,0.472002804279327,-0.109931223094463,0.875869393348694 ,0.469859391450882,-0.142908409237862,0.800538897514343,0.581991970539093,-0.219483211636543,0.80230712890625 ,0.55509489774704,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.0295225456357002,-0.382050126791 ,0.923669934272766,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.403298109769821,-0.683849096298218 ,0.608030438423157,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.0295225456357002,-0.382050126791 ,0.923669934272766,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.129767522215843,-0.742323935031891 ,0.657354950904846,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.482923626899719,-0.587090194225311 ,0.649699866771698,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.446160137653351,-0.556800782680511 ,0.700652599334717,0.912925958633423,0.3648841381073,-0.182827115058899,0.904918491840363,0.223670721054077,-0.362068980932236 ,0.636519849300385,0.647450149059296,-0.419107168912888,0.61859929561615,0.783204674720764,-0.0626528933644295 ,0.673712253570557,-0.610602140426636,-0.416265428066254,0.593445479869843,-0.55176454782486,-0.585984945297241 ,0.853590905666351,0.0963327810168266,-0.511959493160248,0.936679661273956,0.0184381268918514,-0.349701732397079 ,0.65024209022522,-0.683634519577026,-0.331404685974121,0.626364231109619,-0.75530606508255,-0.192822501063347 ,0.773029983043671,-0.340951681137085,-0.534954726696014,0.699126958847046,-0.0890455171465874,-0.709431052207947 ,0.591210007667542,0.268222451210022,-0.760609924793243,0.633826375007629,0.136593535542488,-0.761318802833557 ,0.880469501018524,0.252094835042953,-0.401524186134338,0.782209396362305,0.460544377565384,-0.419579923152924 ,0.594776809215546,0.323577910661697,-0.735892593860626,0.889407336711884,0.240895375609398,-0.388489335775375 ,0.880469501018524,0.252094835042953,-0.401524186134338,0.633826375007629,0.136593535542488,-0.761318802833557 ,0.97625857591629,0.21655336022377,-0.00488529354333878,0.934138953685761,0.351697504520416,-0.0607721395790577 ,0.880469501018524,0.252094835042953,-0.401524186134338,0.889407336711884,0.240895375609398,-0.388489335775375 ,0.860303461551666,0.500444173812866,-0.0971267074346542,0.782209396362305,0.460544377565384,-0.419579923152924 ,0.880469501018524,0.252094835042953,-0.401524186134338,0.934138953685761,0.351697504520416,-0.0607721395790577 ,0.591210007667542,0.268222451210022,-0.760609924793243,0.782209396362305,0.460544377565384,-0.419579923152924 ,0.637716591358185,0.673823416233063,-0.373201817274094,0.476214468479156,0.553961336612701,-0.682895720005035 ,0.860303461551666,0.500444173812866,-0.0971267074346542,0.719738006591797,0.692870736122131,-0.0436733961105347 ,0.637716591358185,0.673823416233063,-0.373201817274094,0.782209396362305,0.460544377565384,-0.419579923152924 ,0.637716591358185,0.673823416233063,-0.373201817274094,0.719738006591797,0.692870736122131,-0.0436733961105347 ,0.581854581832886,0.813074886798859,0.0188271906226873,0.411318093538284,0.679248511791229,-0.607814848423004 ,0.476214468479156,0.553961336612701,-0.682895720005035,0.115779966115952,0.184250295162201,-0.976036310195923 ,0.139773815870285,0.0987650603055954,-0.985245525836945,-0.00773082999512553,0.120841763913631,-0.992641687393188 ,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.17595848441124,0.184216767549515,-0.967007160186768 ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.286009520292282,0.0698904916644096,-0.955674588680267 ,0.311260253190994,0.141205564141274,-0.93977552652359,0.115779966115952,0.184250295162201,-0.976036310195923 ,0.256779372692108,0.275679916143417,-0.926317930221558,0.286009520292282,0.0698904916644096,-0.955674588680267 ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.594776809215546,0.323577910661697,-0.735892593860626 ,0.633826375007629,0.136593535542488,-0.761318802833557,0.286009520292282,0.0698904916644096,-0.955674588680267 ,0.256779372692108,0.275679916143417,-0.926317930221558,0.591210007667542,0.268222451210022,-0.760609924793243 ,0.311260253190994,0.141205564141274,-0.93977552652359,0.286009520292282,0.0698904916644096,-0.955674588680267 ,0.633826375007629,0.136593535542488,-0.761318802833557,-0.00773082999512553,0.120841763913631,-0.992641687393188 ,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.000760512368287891,0.207898333668709,-0.978150188922882 ,0.280443012714386,0.696482062339783,0.660503208637238,0.259025126695633,0.847382187843323,0.463518500328064 ,0.283866882324219,0.767588019371033,0.574654817581177,0.564589977264404,0.0705946907401085,-0.822346925735474 ,0.7000772356987,0.225735083222389,-0.67744779586792,0.484490036964417,0.357505440711975,-0.798410475254059,0.426292926073074 ,0.0950048267841339,-0.899582326412201,0.857822477817535,0.172914609313011,-0.483984649181366,0.61924135684967 ,0.312463909387589,-0.72035163640976,0.484490036964417,0.357505440711975,-0.798410475254059,0.7000772356987,0.225735083222389 ,-0.67744779586792,0.417167514562607,0.344521790742874,-0.840997040271759,0.378902137279511,0.434016942977905 ,-0.8173508644104,0.484490036964417,0.357505440711975,-0.798410475254059,0.61924135684967,0.312463909387589,-0.72035163640976 ,0.35312095284462,0.134023457765579,-0.925928354263306,0.426292926073074,0.0950048267841339,-0.899582326412201 ,0.484490036964417,0.357505440711975,-0.798410475254059,0.378902137279511,0.434016942977905,-0.8173508644104 ,0.35312095284462,0.134023457765579,-0.925928354263306,0.378902137279511,0.434016942977905,-0.8173508644104,0.256089895963669 ,0.453810095787048,-0.853507101535797,0.23451641201973,0.162132352590561,-0.958496332168579,0.417167514562607 ,0.344521790742874,-0.840997040271759,0.282642304897308,0.340673059225082,-0.896691262722015,0.256089895963669 ,0.453810095787048,-0.853507101535797,0.378902137279511,0.434016942977905,-0.8173508644104,0.154383972287178 ,0.366727441549301,-0.917429327964783,0.0980598703026772,0.422548413276672,-0.901020050048828,0.256089895963669 ,0.453810095787048,-0.853507101535797,0.282642304897308,0.340673059225082,-0.896691262722015,0.000681107048876584 ,0.225692093372345,-0.974198460578918,0.23451641201973,0.162132352590561,-0.958496332168579,0.256089895963669 ,0.453810095787048,-0.853507101535797,0.0980598703026772,0.422548413276672,-0.901020050048828,0.138864398002625 ,0.273968666791916,-0.951660573482513,0.002942921128124,0.253444164991379,-0.967345535755157,0.00121181993745267 ,0.232196122407913,-0.9726682305336,0.158535957336426,0.208172604441643,-0.96515828371048,0.823107242584229,0.306770831346512 ,0.477897584438324,0.714458644390106,0.458717465400696,0.528324842453003,0.810526788234711,0.52942031621933,0.250520348548889 ,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.714458644390106 ,0.458717465400696,0.528324842453003,0.565896391868591,0.594577431678772,0.571173310279846,0.581854581832886 ,0.813074886798859,0.0188271906226873,0.719738006591797,0.692870736122131,-0.0436733961105347,0.860303461551666 ,0.500444173812866,-0.0971267074346542,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711 ,0.52942031621933,0.250520348548889,0.719738006591797,0.692870736122131,-0.0436733961105347,0.903585314750671 ,0.234351992607117,0.35862609744072,0.838887810707092,0.294615089893341,0.457677990198135,0.894195675849915,0.373524785041809 ,0.246765822172165,0.919988930225372,0.274642944335938,0.279627621173859,0.823107242584229,0.306770831346512 ,0.477897584438324,0.885173201560974,0.411667943000793,0.216789960861206,0.894195675849915,0.373524785041809 ,0.246765822172165,0.838887810707092,0.294615089893341,0.457677990198135,0.860303461551666,0.500444173812866 ,-0.0971267074346542,0.934138953685761,0.351697504520416,-0.0607721395790577,0.894195675849915,0.373524785041809 ,0.246765822172165,0.885173201560974,0.411667943000793,0.216789960861206,0.97625857591629,0.21655336022377,-0.00488529354333878 ,0.919988930225372,0.274642944335938,0.279627621173859,0.894195675849915,0.373524785041809,0.246765822172165 ,0.934138953685761,0.351697504520416,-0.0607721395790577,0.981309294700623,-0.093424528837204,-0.168237790465355 ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.955751359462738,0.0778623446822166,-0.283684283494949 ,0.876467704772949,0.014190330170095,-0.48125147819519,0.993362247943878,-0.0349664911627769,0.109584823250771 ,0.99024760723114,0.0581013411283493,-0.126625210046768,0.955751359462738,0.0778623446822166,-0.283684283494949 ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.857822477817535,0.172914609313011,-0.483984649181366 ,0.7000772356987,0.225735083222389,-0.67744779586792,0.955751359462738,0.0778623446822166,-0.283684283494949 ,0.99024760723114,0.0581013411283493,-0.126625210046768,0.564589977264404,0.0705946907401085,-0.822346925735474 ,0.876467704772949,0.014190330170095,-0.48125147819519,0.955751359462738,0.0778623446822166,-0.283684283494949 ,0.7000772356987,0.225735083222389,-0.67744779586792,0.800951898097992,0.0424955785274506,-0.597218692302704 ,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.981309294700623,-0.093424528837204,-0.168237790465355 ,0.876467704772949,0.014190330170095,-0.48125147819519,0.800951898097992,0.0424955785274506,-0.597218692302704 ,0.876467704772949,0.014190330170095,-0.48125147819519,0.564589977264404,0.0705946907401085,-0.822346925735474 ,0.572597026824951,0.0432385914027691,-0.818695962429047,0.945727825164795,-0.098081186413765,0.309804677963257 ,0.944782853126526,0.0188948940485716,0.327151775360107,0.941311419010162,0.140633046627045,0.30684706568718 ,0.20434632897377,0.515124678611755,0.832399606704712,0.340864300727844,0.524212896823883,0.780392467975616,0.366717875003815 ,0.635487914085388,0.679465293884277,0.266760617494583,0.623513042926788,0.734894752502441,0.20434632897377,0.515124678611755 ,0.832399606704712,0.266760617494583,0.623513042926788,0.734894752502441,0.0616534538567066,0.625403761863709 ,0.777861833572388,0.0543623231351376,0.513473629951477,0.85638165473938,0.395363062620163,0.562560498714447 ,0.726094901561737,0.524678170681,0.559116363525391,0.641951441764832,0.547570884227753,0.592168509960175,0.591187477111816 ,0.448636323213577,0.619527339935303,0.644136130809784,0.395363062620163,0.562560498714447,0.726094901561737 ,0.448636323213577,0.619527339935303,0.644136130809784,0.366717875003815,0.635487914085388,0.679465293884277 ,0.340864300727844,0.524212896823883,0.780392467975616,0.440387338399887,0.692013561725616,0.571993172168732 ,0.374413341283798,0.732271254062653,0.568852782249451,0.366717875003815,0.635487914085388,0.679465293884277 ,0.448636323213577,0.619527339935303,0.644136130809784,0.547570884227753,0.592168509960175,0.591187477111816 ,0.440387338399887,0.692013561725616,0.571993172168732,0.448636323213577,0.619527339935303,0.644136130809784 ,0.943980097770691,0.0651601999998093,0.323505431413651,0.909750938415527,0.190706014633179,0.368760675191879 ,0.908929646015167,0.18951641023159,0.371389836072922,0.951365828514099,0.00983366928994656,0.30790650844574 ,0.943980097770691,0.0651601999998093,0.323505431413651,0.951365828514099,0.00983366928994656,0.30790650844574 ,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639 ,0.835932672023773,0.318577855825424,0.446905732154846,0.908929646015167,0.18951641023159,0.371389836072922,0.909750938415527 ,0.190706014633179,0.368760675191879,0.834239661693573,0.322053194046021,0.447577893733978,0.835932672023773 ,0.318577855825424,0.446905732154846,0.834239661693573,0.322053194046021,0.447577893733978,0.702617406845093 ,0.468200266361237,0.535833239555359,0.744709670543671,0.422629773616791,0.516518652439117,0.266760617494583 ,0.623513042926788,0.734894752502441,0.366717875003815,0.635487914085388,0.679465293884277,0.374413341283798 ,0.732271254062653,0.568852782249451,0.320665568113327,0.737191736698151,0.594745278358459,0.266760617494583 ,0.623513042926788,0.734894752502441,0.320665568113327,0.737191736698151,0.594745278358459,0.0704773217439651 ,0.772313952445984,0.631319284439087,0.0616534538567066,0.625403761863709,0.777861833572388,0.956802248954773 ,0.196078270673752,0.214668840169907,0.982270240783691,0.0125455530360341,0.187050387263298,0.944782853126526 ,0.0188948940485716,0.327151775360107,0.966708958148956,-0.002308584516868,0.255868047475815,0.305753350257874 ,-0.212547421455383,-0.92808324098587,0.310143738985062,-0.212492153048515,-0.926638007164001,0.173930779099464 ,-0.177192866802216,-0.96868509054184,0.158634498715401,-0.20582041144371,-0.96564644575119,0.31784787774086 ,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.173930779099464 ,-0.177192866802216,-0.96868509054184,0.310143738985062,-0.212492153048515,-0.926638007164001,-0.0269717872142792 ,-0.128648608922958,-0.991323411464691,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.173930779099464 ,-0.177192866802216,-0.96868509054184,0.191843032836914,-0.158846795558929,-0.968485355377197,-0.0315490290522575 ,-0.190183460712433,-0.981241524219513,0.158634498715401,-0.20582041144371,-0.96564644575119,0.173930779099464 ,-0.177192866802216,-0.96868509054184,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.982270240783691 ,0.0125455530360341,0.187050387263298,0.956802248954773,0.196078270673752,0.214668840169907,0.976279318332672 ,0.215815082192421,0.0173952374607325,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.995472311973572 ,0.0944016128778458,0.0111022079363465,0.980593264102936,0.101042859256268,-0.168009653687477,0.952138841152191 ,0.245724052190781,-0.181800335645676,0.976959228515625,0.212819382548332,-0.0160801913589239,0.927419364452362 ,0.100383616983891,-0.36030051112175,0.896075665950775,0.270221561193466,-0.352177083492279,0.952138841152191 ,0.245724052190781,-0.181800335645676,0.980593264102936,0.101042859256268,-0.168009653687477,0.802429139614105 ,0.495289087295532,-0.332860708236694,0.84548145532608,0.494162082672119,-0.202397987246513,0.952138841152191 ,0.245724052190781,-0.181800335645676,0.896075665950775,0.270221561193466,-0.352177083492279,0.882022321224213 ,0.469820559024811,-0.0361285507678986,0.976959228515625,0.212819382548332,-0.0160801913589239,0.952138841152191 ,0.245724052190781,-0.181800335645676,0.84548145532608,0.494162082672119,-0.202397987246513,0.803016126155853 ,0.524560868740082,0.282844364643097,0.919247984886169,0.28292128443718,0.273749440908432,0.903041958808899,0.404765665531158 ,0.143805220723152,0.758423209190369,0.636332154273987,0.140980765223503,0.803016126155853,0.524560868740082 ,0.282844364643097,0.758423209190369,0.636332154273987,0.140980765223503,0.592619299888611,0.791549921035767 ,0.149167820811272,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435 ,0.51718670129776,0.547570884227753,0.592168509960175,0.591187477111816,0.702617406845093,0.468200266361237,0.535833239555359 ,0.690945386886597,0.533301711082459,0.488040715456009,0.617453694343567,0.698337316513062,0.362044125795364 ,0.554235219955444,0.652181923389435,0.51718670129776,0.690945386886597,0.533301711082459,0.488040715456009,0.909750938415527 ,0.190706014633179,0.368760675191879,0.908561766147614,0.233992353081703,0.346068024635315,0.827282428741455 ,0.399940013885498,0.394527286291122,0.834239661693573,0.322053194046021,0.447577893733978,0.919247984886169 ,0.28292128443718,0.273749440908432,0.803016126155853,0.524560868740082,0.282844364643097,0.827282428741455,0.399940013885498 ,0.394527286291122,0.908561766147614,0.233992353081703,0.346068024635315,0.617453694343567,0.698337316513062 ,0.362044125795364,0.690945386886597,0.533301711082459,0.488040715456009,0.827282428741455,0.399940013885498 ,0.394527286291122,0.803016126155853,0.524560868740082,0.282844364643097,0.702617406845093,0.468200266361237 ,0.535833239555359,0.834239661693573,0.322053194046021,0.447577893733978,0.827282428741455,0.399940013885498 ,0.394527286291122,0.690945386886597,0.533301711082459,0.488040715456009,0.974952936172485,0.16339498758316,0.150893643498421 ,0.903041958808899,0.404765665531158,0.143805220723152,0.919247984886169,0.28292128443718,0.273749440908432,0.961383461952209 ,0.117865592241287,0.248695820569992,0.961383461952209,0.117865592241287,0.248695820569992,0.919247984886169 ,0.28292128443718,0.273749440908432,0.94008880853653,0.132723599672318,0.314034193754196,0.974952936172485,0.16339498758316 ,0.150893643498421,0.961383461952209,0.117865592241287,0.248695820569992,0.954596400260925,0.0140978172421455 ,0.297568470239639,0.98244035243988,0.067487895488739,0.173943564295769,0.98244035243988,0.067487895488739,0.173943564295769 ,0.954596400260925,0.0140978172421455,0.297568470239639,0.941569864749908,0.149283602833748,0.301928132772446 ,0.974337458610535,0.124738365411758,0.187368124723434,0.941569864749908,0.149283602833748,0.301928132772446 ,0.944782853126526,0.0188948940485716,0.327151775360107,0.982270240783691,0.0125455530360341,0.187050387263298 ,0.974337458610535,0.124738365411758,0.187368124723434,0.974952936172485,0.16339498758316,0.150893643498421,0.98244035243988 ,0.067487895488739,0.173943564295769,0.995472311973572,0.0944016128778458,0.0111022079363465,0.976959228515625 ,0.212819382548332,-0.0160801913589239,0.974952936172485,0.16339498758316,0.150893643498421,0.976959228515625 ,0.212819382548332,-0.0160801913589239,0.882022321224213,0.469820559024811,-0.0361285507678986,0.903041958808899 ,0.404765665531158,0.143805220723152,0.995472311973572,0.0944016128778458,0.0111022079363465,0.994647562503815 ,0.10004199296236,0.0258419681340456,0.983511805534363,0.0664925277233124,-0.168176248669624,0.980593264102936 ,0.101042859256268,-0.168009653687477,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994307160377502 ,-0.0864710509777069,-0.0622573494911194,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994647562503815 ,0.10004199296236,0.0258419681340456,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.974936366081238 ,0.00979904364794493,-0.222267970442772,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994307160377502 ,-0.0864710509777069,-0.0622573494911194,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.917562901973724 ,0.0575754530727863,-0.393399685621262,0.983511805534363,0.0664925277233124,-0.168176248669624,0.974936366081238 ,0.00979904364794493,-0.222267970442772,0.927419364452362,0.100383616983891,-0.36030051112175,0.980593264102936 ,0.101042859256268,-0.168009653687477,0.983511805534363,0.0664925277233124,-0.168176248669624,0.917562901973724 ,0.0575754530727863,-0.393399685621262,0.995472311973572,0.0944016128778458,0.0111022079363465,0.98244035243988 ,0.067487895488739,0.173943564295769,0.974337458610535,0.124738365411758,0.187368124723434,0.994647562503815 ,0.10004199296236,0.0258419681340456,0.974337458610535,0.124738365411758,0.187368124723434,0.982270240783691 ,0.0125455530360341,0.187050387263298,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994647562503815 ,0.10004199296236,0.0258419681340456,0.652361810207367,0.183982044458389,-0.735237896442413,0.822571158409119 ,0.128576725721359,-0.553935706615448,0.826969504356384,0.0367851555347443,-0.561042189598084,0.679547071456909 ,0.0500539317727089,-0.731922388076782,0.927419364452362,0.100383616983891,-0.36030051112175,0.917562901973724 ,0.0575754530727863,-0.393399685621262,0.826969504356384,0.0367851555347443,-0.561042189598084,0.822571158409119 ,0.128576725721359,-0.553935706615448,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.806335091590881 ,-0.064182311296463,-0.587966322898865,0.826969504356384,0.0367851555347443,-0.561042189598084,0.917562901973724 ,0.0575754530727863,-0.393399685621262,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.679547071456909 ,0.0500539317727089,-0.731922388076782,0.826969504356384,0.0367851555347443,-0.561042189598084,0.806335091590881 ,-0.064182311296463,-0.587966322898865,0.00778961461037397,0.31232625246048,-0.949942946434021,0.150489449501038 ,0.298117339611053,-0.942591607570648,0.156925246119499,0.156653806567192,-0.975107192993164,-0.00349890603683889 ,0.173883408308029,-0.984760046005249,0.289862871170044,0.274766653776169,-0.91677850484848,0.317441433668137 ,0.128782093524933,-0.939492464065552,0.156925246119499,0.156653806567192,-0.975107192993164,0.150489449501038 ,0.298117339611053,-0.942591607570648,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.157008796930313 ,0.0128065068274736,-0.987514197826386,0.156925246119499,0.156653806567192,-0.975107192993164,0.317441433668137 ,0.128782093524933,-0.939492464065552,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.00349890603683889 ,0.173883408308029,-0.984760046005249,0.156925246119499,0.156653806567192,-0.975107192993164,0.157008796930313 ,0.0128065068274736,-0.987514197826386,0.289862871170044,0.274766653776169,-0.91677850484848,0.150489449501038 ,0.298117339611053,-0.942591607570648,0.148825243115425,0.473339468240738,-0.868216991424561,0.262024700641632 ,0.458286553621292,-0.849303483963013,0.00778961461037397,0.31232625246048,-0.949942946434021,0.0223272144794464 ,0.483893781900406,-0.874841868877411,0.148825243115425,0.473339468240738,-0.868216991424561,0.150489449501038 ,0.298117339611053,-0.942591607570648,0.0394280813634396,0.674713432788849,-0.737025916576386,0.152186512947083 ,0.664242565631866,-0.731861352920532,0.148825243115425,0.473339468240738,-0.868216991424561,0.0223272144794464 ,0.483893781900406,-0.874841868877411,0.241631746292114,0.652338445186615,-0.718379199504852,0.262024700641632 ,0.458286553621292,-0.849303483963013,0.148825243115425,0.473339468240738,-0.868216991424561,0.152186512947083 ,0.664242565631866,-0.731861352920532,0.312359720468521,0.949172854423523,-0.0387601368129253,0.299265414476395 ,0.918772161006927,-0.257483899593353,0.208839908242226,0.94090873003006,-0.266601979732513,0.250509142875671 ,0.967322170734406,-0.0391524843871593,0.270549148321152,0.870745658874512,-0.410615533590317,0.176319569349289 ,0.887581884860992,-0.425570040941238,0.208839908242226,0.94090873003006,-0.266601979732513,0.299265414476395 ,0.918772161006927,-0.257483899593353,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0692925006151199 ,0.95879065990448,-0.27553403377533,0.208839908242226,0.94090873003006,-0.266601979732513,0.176319569349289,0.887581884860992 ,-0.425570040941238,0.0761537179350853,0.996121823787689,-0.044066745787859,0.250509142875671,0.967322170734406 ,-0.0391524843871593,0.208839908242226,0.94090873003006,-0.266601979732513,0.0692925006151199,0.95879065990448 ,-0.27553403377533,0.547570884227753,0.592168509960175,0.591187477111816,0.554235219955444,0.652181923389435 ,0.51718670129776,0.43085303902626,0.76660943031311,0.476104646921158,0.440387338399887,0.692013561725616,0.571993172168732 ,0.617453694343567,0.698337316513062,0.362044125795364,0.425699532032013,0.838678896427155,0.339702278375626 ,0.43085303902626,0.76660943031311,0.476104646921158,0.554235219955444,0.652181923389435,0.51718670129776,0.354833543300629 ,0.872086048126221,0.336985319852829,0.371298015117645,0.806507170200348,0.460091233253479,0.43085303902626,0.76660943031311 ,0.476104646921158,0.425699532032013,0.838678896427155,0.339702278375626,0.374413341283798,0.732271254062653 ,0.568852782249451,0.440387338399887,0.692013561725616,0.571993172168732,0.43085303902626,0.76660943031311,0.476104646921158 ,0.371298015117645,0.806507170200348,0.460091233253479,0.250509142875671,0.967322170734406,-0.0391524843871593 ,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0787876397371292,0.981232225894928,0.175999522209167 ,0.280323714017868,0.944564402103424,0.170928910374641,0.250509142875671,0.967322170734406,-0.0391524843871593 ,0.280323714017868,0.944564402103424,0.170928910374641,0.32793140411377,0.928926110267639,0.171922340989113,0.312359720468521 ,0.949172854423523,-0.0387601368129253,0.280323714017868,0.944564402103424,0.170928910374641,0.0787876397371292 ,0.981232225894928,0.175999522209167,0.0780636146664619,0.932616472244263,0.352324455976486,0.311769247055054 ,0.887734949588776,0.338713079690933,0.280323714017868,0.944564402103424,0.170928910374641,0.311769247055054 ,0.887734949588776,0.338713079690933,0.354833543300629,0.872086048126221,0.336985319852829,0.32793140411377,0.928926110267639 ,0.171922340989113,0.572597026824951,0.0432385914027691,-0.818695962429047,0.647758185863495,-0.0730211958289146 ,-0.758338510990143,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.800951898097992,0.0424955785274506 ,-0.597218692302704,0.668470501899719,-0.223753660917282,-0.709282398223877,0.763271033763886,-0.164724439382553 ,-0.624726474285126,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.647758185863495,-0.0730211958289146 ,-0.758338510990143,0.903657674789429,-0.181017354130745,-0.38811793923378,0.933521032333374,-0.113554745912552 ,-0.340064376592636,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.763271033763886,-0.164724439382553 ,-0.624726474285126,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.800951898097992,0.0424955785274506 ,-0.597218692302704,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.933521032333374,-0.113554745912552 ,-0.340064376592636,0.564893007278442,0.823054492473602,-0.0589678697288036,0.717910170555115,0.69438225030899 ,-0.049378827214241,0.675751328468323,0.703905045986176,-0.218810006976128,0.51955384016037,0.820082247257233 ,-0.239851862192154,0.882022321224213,0.469820559024811,-0.0361285507678986,0.84548145532608,0.494162082672119 ,-0.202397987246513,0.675751328468323,0.703905045986176,-0.218810006976128,0.717910170555115,0.69438225030899 ,-0.049378827214241,0.802429139614105,0.495289087295532,-0.332860708236694,0.643622934818268,0.695999085903168 ,-0.318331331014633,0.675751328468323,0.703905045986176,-0.218810006976128,0.84548145532608,0.494162082672119 ,-0.202397987246513,0.468265026807785,0.816386163234711,-0.337996363639832,0.51955384016037,0.820082247257233 ,-0.239851862192154,0.675751328468323,0.703905045986176,-0.218810006976128,0.643622934818268,0.695999085903168 ,-0.318331331014633,0.758423209190369,0.636332154273987,0.140980765223503,0.903041958808899,0.404765665531158 ,0.143805220723152,0.882022321224213,0.469820559024811,-0.0361285507678986,0.717910170555115,0.69438225030899 ,-0.049378827214241,0.758423209190369,0.636332154273987,0.140980765223503,0.717910170555115,0.69438225030899 ,-0.049378827214241,0.564893007278442,0.823054492473602,-0.0589678697288036,0.592619299888611,0.791549921035767 ,0.149167820811272,0.374413341283798,0.732271254062653,0.568852782249451,0.371298015117645,0.806507170200348 ,0.460091233253479,0.329870194196701,0.817974448204041,0.471278518438339,0.320665568113327,0.737191736698151 ,0.594745278358459,0.354833543300629,0.872086048126221,0.336985319852829,0.311769247055054,0.887734949588776 ,0.338713079690933,0.329870194196701,0.817974448204041,0.471278518438339,0.371298015117645,0.806507170200348 ,0.460091233253479,0.0780636146664619,0.932616472244263,0.352324455976486,0.0752492547035217,0.86371123790741 ,0.498337715864182,0.329870194196701,0.817974448204041,0.471278518438339,0.311769247055054,0.887734949588776 ,0.338713079690933,0.0704773217439651,0.772313952445984,0.631319284439087,0.320665568113327,0.737191736698151 ,0.594745278358459,0.329870194196701,0.817974448204041,0.471278518438339,0.0752492547035217,0.86371123790741 ,0.498337715864182,0.941746175289154,0.170597404241562,0.289845913648605,0.941311419010162,0.140633046627045 ,0.30684706568718,0.944782853126526,0.0188948940485716,0.327151775360107,0.941569864749908,0.149283602833748 ,0.301928132772446,0.941746175289154,0.170597404241562,0.289845913648605,0.941569864749908,0.149283602833748 ,0.301928132772446,0.954596400260925,0.0140978172421455,0.297568470239639,0.955479383468628,-0.0429471768438816 ,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.961383461952209,0.117865592241287 ,0.248695820569992,0.94008880853653,0.132723599672318,0.314034193754196,0.943980097770691,0.0651601999998093 ,0.323505431413651,0.919247984886169,0.28292128443718,0.273749440908432,0.908561766147614,0.233992353081703,0.346068024635315 ,0.94008880853653,0.132723599672318,0.314034193754196,0.909750938415527,0.190706014633179,0.368760675191879,0.943980097770691 ,0.0651601999998093,0.323505431413651,0.94008880853653,0.132723599672318,0.314034193754196,0.908561766147614 ,0.233992353081703,0.346068024635315,0.702617406845093,0.468200266361237,0.535833239555359,0.547570884227753 ,0.592168509960175,0.591187477111816,0.524678170681,0.559116363525391,0.641951441764832,0.744709670543671,0.422629773616791 ,0.516518652439117,0.510853886604309,0.565487027168274,-0.647497296333313,0.691879332065582,0.507222592830658 ,-0.513836801052094,0.772872805595398,0.305390149354935,-0.55624133348465,0.594810545444489,0.366844743490219 ,-0.715279877185822,0.802429139614105,0.495289087295532,-0.332860708236694,0.896075665950775,0.270221561193466 ,-0.352177083492279,0.772872805595398,0.305390149354935,-0.55624133348465,0.691879332065582,0.507222592830658 ,-0.513836801052094,0.927419364452362,0.100383616983891,-0.36030051112175,0.822571158409119,0.128576725721359 ,-0.553935706615448,0.772872805595398,0.305390149354935,-0.55624133348465,0.896075665950775,0.270221561193466 ,-0.352177083492279,0.652361810207367,0.183982044458389,-0.735237896442413,0.594810545444489,0.366844743490219 ,-0.715279877185822,0.772872805595398,0.305390149354935,-0.55624133348465,0.822571158409119,0.128576725721359 ,-0.553935706615448,0.468265026807785,0.816386163234711,-0.337996363639832,0.643622934818268,0.695999085903168 ,-0.318331331014633,0.603891670703888,0.66539740562439,-0.438817948102951,0.453374654054642,0.743375957012177 ,-0.491775959730148,0.802429139614105,0.495289087295532,-0.332860708236694,0.691879332065582,0.507222592830658 ,-0.513836801052094,0.603891670703888,0.66539740562439,-0.438817948102951,0.643622934818268,0.695999085903168 ,-0.318331331014633,0.510853886604309,0.565487027168274,-0.647497296333313,0.453374654054642,0.743375957012177 ,-0.491775959730148,0.603891670703888,0.66539740562439,-0.438817948102951,0.691879332065582,0.507222592830658 ,-0.513836801052094,0.270549148321152,0.870745658874512,-0.410615533590317,0.243253543972969,0.798352062702179 ,-0.550873577594757,0.160658344626427,0.809181571006775,-0.565167307853699,0.176319569349289,0.887581884860992 ,-0.425570040941238,0.241631746292114,0.652338445186615,-0.718379199504852,0.152186512947083,0.664242565631866 ,-0.731861352920532,0.160658344626427,0.809181571006775,-0.565167307853699,0.243253543972969,0.798352062702179 ,-0.550873577594757,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0535563454031944,0.82038402557373 ,-0.569299399852753,0.160658344626427,0.809181571006775,-0.565167307853699,0.152186512947083,0.664242565631866 ,-0.731861352920532,0.0622152015566826,0.901260554790497,-0.428787440061569,0.176319569349289,0.887581884860992 ,-0.425570040941238,0.160658344626427,0.809181571006775,-0.565167307853699,0.0535563454031944,0.82038402557373 ,-0.569299399852753,0.422840595245361,0.890932738780975,0.165664300322533,0.32793140411377,0.928926110267639 ,0.171922340989113,0.354833543300629,0.872086048126221,0.336985319852829,0.425699532032013,0.838678896427155 ,0.339702278375626,0.422840595245361,0.890932738780975,0.165664300322533,0.425699532032013,0.838678896427155 ,0.339702278375626,0.617453694343567,0.698337316513062,0.362044125795364,0.592619299888611,0.791549921035767 ,0.149167820811272,0.415615051984787,0.907950639724731,-0.0537562556564808,0.312359720468521,0.949172854423523 ,-0.0387601368129253,0.32793140411377,0.928926110267639,0.171922340989113,0.422840595245361,0.890932738780975 ,0.165664300322533,0.415615051984787,0.907950639724731,-0.0537562556564808,0.422840595245361,0.890932738780975 ,0.165664300322533,0.592619299888611,0.791549921035767,0.149167820811272,0.564893007278442,0.823054492473602 ,-0.0589678697288036,0.270549148321152,0.870745658874512,-0.410615533590317,0.299265414476395,0.918772161006927 ,-0.257483899593353,0.396910279989243,0.88137674331665,-0.256197690963745,0.358765363693237,0.85211443901062 ,-0.381035953760147,0.312359720468521,0.949172854423523,-0.0387601368129253,0.415615051984787,0.907950639724731 ,-0.0537562556564808,0.396910279989243,0.88137674331665,-0.256197690963745,0.299265414476395,0.918772161006927 ,-0.257483899593353,0.564893007278442,0.823054492473602,-0.0589678697288036,0.51955384016037,0.820082247257233 ,-0.239851862192154,0.396910279989243,0.88137674331665,-0.256197690963745,0.415615051984787,0.907950639724731 ,-0.0537562556564808,0.468265026807785,0.816386163234711,-0.337996363639832,0.358765363693237,0.85211443901062 ,-0.381035953760147,0.396910279989243,0.88137674331665,-0.256197690963745,0.51955384016037,0.820082247257233 ,-0.239851862192154,0.270549148321152,0.870745658874512,-0.410615533590317,0.358765363693237,0.85211443901062 ,-0.381035953760147,0.326544016599655,0.784170210361481,-0.527679860591888,0.243253543972969,0.798352062702179 ,-0.550873577594757,0.468265026807785,0.816386163234711,-0.337996363639832,0.453374654054642,0.743375957012177 ,-0.491775959730148,0.326544016599655,0.784170210361481,-0.527679860591888,0.358765363693237,0.85211443901062 ,-0.381035953760147,0.510853886604309,0.565487027168274,-0.647497296333313,0.347870439291,0.626684665679932,-0.697318077087402 ,0.326544016599655,0.784170210361481,-0.527679860591888,0.453374654054642,0.743375957012177,-0.491775959730148 ,0.241631746292114,0.652338445186615,-0.718379199504852,0.243253543972969,0.798352062702179,-0.550873577594757 ,0.326544016599655,0.784170210361481,-0.527679860591888,0.347870439291,0.626684665679932,-0.697318077087402,0.652361810207367 ,0.183982044458389,-0.735237896442413,0.456190079450607,0.236269950866699,-0.857943534851074,0.404344618320465 ,0.425657629966736,-0.809518992900848,0.594810545444489,0.366844743490219,-0.715279877185822,0.289862871170044 ,0.274766653776169,-0.91677850484848,0.262024700641632,0.458286553621292,-0.849303483963013,0.404344618320465 ,0.425657629966736,-0.809518992900848,0.456190079450607,0.236269950866699,-0.857943534851074,0.241631746292114 ,0.652338445186615,-0.718379199504852,0.347870439291,0.626684665679932,-0.697318077087402,0.404344618320465,0.425657629966736 ,-0.809518992900848,0.262024700641632,0.458286553621292,-0.849303483963013,0.510853886604309,0.565487027168274 ,-0.647497296333313,0.594810545444489,0.366844743490219,-0.715279877185822,0.404344618320465,0.425657629966736 ,-0.809518992900848,0.347870439291,0.626684665679932,-0.697318077087402,0.289862871170044,0.274766653776169,-0.91677850484848 ,0.456190079450607,0.236269950866699,-0.857943534851074,0.494736820459366,0.0896743088960648,-0.8644038438797 ,0.317441433668137,0.128782093524933,-0.939492464065552,0.652361810207367,0.183982044458389,-0.735237896442413 ,0.679547071456909,0.0500539317727089,-0.731922388076782,0.494736820459366,0.0896743088960648,-0.8644038438797 ,0.456190079450607,0.236269950866699,-0.857943534851074,0.688820779323578,-0.0580477155745029,-0.722603917121887 ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.494736820459366,0.0896743088960648,-0.8644038438797 ,0.679547071456909,0.0500539317727089,-0.731922388076782,0.330739557743073,-0.00570091884583235,-0.943704843521118 ,0.317441433668137,0.128782093524933,-0.939492464065552,0.494736820459366,0.0896743088960648,-0.8644038438797 ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877 ,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.493934065103531,-0.187336564064026,-0.849078416824341 ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.572597026824951,0.0432385914027691,-0.818695962429047 ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.493934065103531,-0.187336564064026,-0.849078416824341 ,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.31784787774086,-0.175634980201721,-0.931732296943665 ,0.310143738985062,-0.212492153048515,-0.926638007164001,0.493934065103531,-0.187336564064026,-0.849078416824341 ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.305753350257874,-0.212547421455383,-0.92808324098587 ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.493934065103531,-0.187336564064026,-0.849078416824341 ,0.310143738985062,-0.212492153048515,-0.926638007164001,0.330739557743073,-0.00570091884583235,-0.943704843521118 ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.154737427830696,-0.127341821789742,-0.979714453220367 ,0.157008796930313,0.0128065068274736,-0.987514197826386,0.305753350257874,-0.212547421455383,-0.92808324098587 ,0.158634498715401,-0.20582041144371,-0.96564644575119,0.154737427830696,-0.127341821789742,-0.979714453220367 ,0.320828467607498,-0.143988654017448,-0.936128377914429,-0.0315490290522575,-0.190183460712433,-0.981241524219513 ,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.154737427830696,-0.127341821789742,-0.979714453220367 ,0.158634498715401,-0.20582041144371,-0.96564644575119,-0.0150691494345665,0.027319710701704,-0.999513149261475 ,0.157008796930313,0.0128065068274736,-0.987514197826386,0.154737427830696,-0.127341821789742,-0.979714453220367 ,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.688820779323578,-0.0580477155745029,-0.722603917121887 ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.510694682598114,-0.152896985411644,-0.846057593822479 ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877 ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.510694682598114,-0.152896985411644,-0.846057593822479 ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.305753350257874,-0.212547421455383,-0.92808324098587 ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.510694682598114,-0.152896985411644,-0.846057593822479 ,0.505452334880829,-0.224964916706085,-0.8330118060112,0.330739557743073,-0.00570091884583235,-0.943704843521118 ,0.514681279659271,-0.030753742903471,-0.856829822063446,0.510694682598114,-0.152896985411644,-0.846057593822479 ,0.320828467607498,-0.143988654017448,-0.936128377914429,0.668470501899719,-0.223753660917282,-0.709282398223877 ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.78548675775528,-0.165785521268845,-0.596259772777557 ,0.763271033763886,-0.164724439382553,-0.624726474285126,0.688820779323578,-0.0580477155745029,-0.722603917121887 ,0.806335091590881,-0.064182311296463,-0.587966322898865,0.78548675775528,-0.165785521268845,-0.596259772777557 ,0.684577643871307,-0.163184806704521,-0.710439383983612,0.898539185523987,-0.0431283302605152,-0.436769187450409 ,0.838157534599304,-0.159007966518402,-0.521735966205597,0.78548675775528,-0.165785521268845,-0.596259772777557 ,0.806335091590881,-0.064182311296463,-0.587966322898865,0.903657674789429,-0.181017354130745,-0.38811793923378 ,0.763271033763886,-0.164724439382553,-0.624726474285126,0.78548675775528,-0.165785521268845,-0.596259772777557 ,0.838157534599304,-0.159007966518402,-0.521735966205597,0.898539185523987,-0.0431283302605152,-0.436769187450409 ,0.974936366081238,0.00979904364794493,-0.222267970442772,0.983070194721222,-0.155307233333588,-0.0972249284386635 ,0.965442478656769,-0.181367635726929,-0.187153950333595,0.989281177520752,-0.130912706255913,-0.0646882206201553 ,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974936366081238,0.00979904364794493,-0.222267970442772 ,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.981309294700623,-0.093424528837204,-0.168237790465355 ,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.989231050014496,-0.126766130328178,-0.0731591805815697 ,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.958209931850433,-0.0949564725160599,-0.269846349954605 ,0.933521032333374,-0.113554745912552,-0.340064376592636,0.989404678344727,-0.134779617190361,-0.0539703145623207 ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.572597026824951,0.0432385914027691,-0.818695962429047 ,0.564589977264404,0.0705946907401085,-0.822346925735474,0.426292926073074,0.0950048267841339,-0.899582326412201 ,0.440676689147949,-0.105378225445747,-0.891459226608276,0.426292926073074,0.0950048267841339,-0.899582326412201 ,0.35312095284462,0.134023457765579,-0.925928354263306,0.31784787774086,-0.175634980201721,-0.931732296943665 ,0.191843032836914,-0.158846795558929,-0.968485355377197,0.31784787774086,-0.175634980201721,-0.931732296943665 ,0.35312095284462,0.134023457765579,-0.925928354263306,0.23451641201973,0.162132352590561,-0.958496332168579 ,0.191843032836914,-0.158846795558929,-0.968485355377197,0.23451641201973,0.162132352590561,-0.958496332168579 ,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0269717872142792,-0.128648608922958,-0.991323411464691 ,0.164569541811943,0.375759840011597,-0.911987602710724,0.286092400550842,0.370450645685196,-0.883695363998413 ,0.258463323116302,0.471300333738327,-0.843251287937164,0.148562401533127,0.439921736717224,-0.885662496089935 ,0.17595848441124,0.184216767549515,-0.967007160186768,0.311260253190994,0.141205564141274,-0.93977552652359 ,0.286092400550842,0.370450645685196,-0.883695363998413,0.164569541811943,0.375759840011597,-0.911987602710724 ,0.591210007667542,0.268222451210022,-0.760609924793243,0.476214468479156,0.553961336612701,-0.682895720005035 ,0.286092400550842,0.370450645685196,-0.883695363998413,0.311260253190994,0.141205564141274,-0.93977552652359 ,0.286092400550842,0.370450645685196,-0.883695363998413,0.476214468479156,0.553961336612701,-0.682895720005035 ,0.411318093538284,0.679248511791229,-0.607814848423004,0.258463323116302,0.471300333738327,-0.843251287937164 ,0.0694107115268707,0.216942340135574,-0.973713636398315,0.17595848441124,0.184216767549515,-0.967007160186768 ,0.164569541811943,0.375759840011597,-0.911987602710724,0.0754155963659287,0.356131970882416,-0.931387424468994 ,0.0754155963659287,0.356131970882416,-0.931387424468994,0.164569541811943,0.375759840011597,-0.911987602710724 ,0.148562401533127,0.439921736717224,-0.885662496089935,0.0560689158737659,0.370522946119308,-0.927129447460175 ,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0694107115268707,0.216942340135574,-0.973713636398315 ,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0102010685950518,0.341328680515289,-0.939888656139374 ,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0754155963659287,0.356131970882416,-0.931387424468994 ,0.0560689158737659,0.370522946119308,-0.927129447460175,0.010585374198854,0.345912545919418,-0.938207030296326 ,0.75023740530014,-0.238408371806145,0.616688966751099,0.616745948791504,-0.290956258773804,0.731415688991547 ,0.628606140613556,-0.0929744690656662,0.77214640378952,0.76386970281601,-0.0586191527545452,0.642702758312225 ,0.855076372623444,-0.165702432394028,0.491311639547348,0.75023740530014,-0.238408371806145,0.616688966751099 ,0.76386970281601,-0.0586191527545452,0.642702758312225,0.85496574640274,-0.0235987044870853,0.518147349357605 ,0.89460563659668,0.0454745329916477,0.444536596536636,0.882708728313446,0.169010564684868,0.438475489616394 ,0.941748380661011,0.168847903609276,0.290861427783966,0.940892815589905,-0.119216494262218,0.317030221223831 ,0.854965507984161,-0.114104993641377,0.505978286266327,0.89460563659668,0.0454745329916477,0.444536596536636 ,0.506778419017792,-0.624182820320129,0.594618737697601,0.535486578941345,-0.739663183689117,0.407618075609207 ,0.882708728313446,0.169010564684868,0.438475489616394,-0.053869191557169,-0.604926705360413,-0.794456899166107 ,0.868690371513367,-0.108423709869385,-0.483343929052353,0.724950075149536,-0.680160522460938,0.108761206269264 ,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.0578227378427982,-0.628531396389008,-0.775631904602051 ,-0.053869191557169,-0.604926705360413,-0.794456899166107,-0.0524128936231136,-0.826581239700317,-0.560371577739716 ,0.801777124404907,0.00266337930224836,-0.597617149353027,0.868690371513367,-0.108423709869385,-0.483343929052353 ,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.0578227378427982,-0.628531396389008,-0.775631904602051 ,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.712912499904633,-0.638341963291168,0.290302157402039 ,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.549701511859894,-0.519823312759399,0.653920412063599 ,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.712912499904633,-0.638341963291168,0.290302157402039 ,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.139181971549988,-0.98750239610672,0.0739418119192123 ,0.237821668386459,-0.891240954399109,0.386174082756042,0.589298963546753,-0.771825730800629,0.238771393895149 ,0.2151879966259,-0.952648401260376,-0.214837476611137,0.237821668386459,-0.891240954399109,0.386174082756042 ,-0.139181971549988,-0.98750239610672,0.0739418119192123,-0.449249923229218,-0.874760508537292,0.181572452187538 ,-0.272507458925247,-0.860418200492859,0.430604517459869,0.786046326160431,0.0746424272656441,0.613644540309906 ,0.89460563659668,0.0454745329916477,0.444536596536636,0.854965507984161,-0.114104993641377,0.505978286266327 ,0.576319634914398,0.0662916451692581,0.814531207084656,0.506778419017792,-0.624182820320129,0.594618737697601 ,0.89460563659668,0.0454745329916477,0.444536596536636,0.786046326160431,0.0746424272656441,0.613644540309906 ,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.449249923229218,-0.874760508537292,0.181572452187538 ,0.506778419017792,-0.624182820320129,0.594618737697601,-0.498864650726318,-0.669482290744781,0.550388514995575 ,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.272507458925247,-0.860418200492859,0.430604517459869 ,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.712912499904633,-0.638341963291168,0.290302157402039 ,0.844061017036438,0.391468346118927,0.366488069295883,0.868690371513367,-0.108423709869385,-0.483343929052353 ,0.801777124404907,0.00266337930224836,-0.597617149353027,0.941748380661011,0.168847903609276,0.290861427783966 ,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883 ,0.535486578941345,-0.739663183689117,0.407618075609207,0.724950075149536,-0.680160522460938,0.108761206269264 ,0.844061017036438,0.391468346118927,0.366488069295883,0.882708728313446,0.169010564684868,0.438475489616394 ,0.844061017036438,0.391468346118927,0.366488069295883,0.724950075149536,-0.680160522460938,0.108761206269264 ,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.0362738110125065,-0.271473735570908,0.961762070655823 ,0.032781969755888,-0.0827890038490295,0.996027767658234,0.356171637773514,-0.454808622598648,0.816266417503357 ,0.361973732709885,-0.605334222316742,0.708904445171356,0.032781969755888,-0.0827890038490295,0.996027767658234 ,0.204357400536537,-0.124537408351898,0.97094202041626,0.17069847881794,-0.387216597795486,0.906049311161041 ,0.356171637773514,-0.454808622598648,0.816266417503357,0.314119011163712,-0.739236891269684,0.595699608325958 ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0362738110125065,-0.271473735570908,0.961762070655823 ,0.361973732709885,-0.605334222316742,0.708904445171356,0.314119011163712,-0.739236891269684,0.595699608325958 ,0.206430405378342,-0.778748571872711,0.592399477958679,0.00206050439737737,-0.384430259466171,0.923151731491089 ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0268061328679323,-0.427482962608337,0.903625905513763 ,0.00206050439737737,-0.384430259466171,0.923151731491089,0.0454688854515553,-0.765503704547882,0.641822934150696 ,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.00206050439737737,-0.384430259466171,0.923151731491089 ,0.206430405378342,-0.778748571872711,0.592399477958679,0.0366746000945568,-0.755166232585907,0.654506683349609 ,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0366746000945568,-0.755166232585907,0.654506683349609 ,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0352796316146851,-0.824001550674438,0.565488159656525 ,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0454688854515553,-0.765503704547882,0.641822934150696 ,0.00206050439737737,-0.384430259466171,0.923151731491089,0.00267285062000155,-0.590106904506683,0.807320654392242 ,0.17069847881794,-0.387216597795486,0.906049311161041,0.458961844444275,-0.463801801204681,0.757787525653839 ,0.835841596126556,0.145906612277031,0.529225945472717,0.513224720954895,-0.832203328609467,0.209852293133736 ,0.835841596126556,0.145906612277031,0.529225945472717,0.190371856093407,0.256429195404053,0.947629988193512 ,-0.0904141515493393,0.920958995819092,0.379024863243103,0.835841596126556,0.145906612277031,0.529225945472717 ,0.458961844444275,-0.463801801204681,0.757787525653839,0.190371856093407,0.256429195404053,0.947629988193512 ,0.680179119110107,0.270307511091232,0.681388378143311,0.835841596126556,0.145906612277031,0.529225945472717 ,-0.0904141515493393,0.920958995819092,0.379024863243103,-0.111705176532269,0.976534187793732,0.18412746489048 ,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717 ,0.680179119110107,0.270307511091232,0.681388378143311,-0.00835443940013647,-0.52916145324707,0.848480045795441 ,0.168070778250694,-0.457133919000626,0.873373210430145,0.192558065056801,-0.101361930370331,0.976036429405212 ,0.0599219687283039,-0.361293613910675,0.93052476644516,0.361973732709885,-0.605334222316742,0.708904445171356 ,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621 ,0.626789748668671,-0.749257385730743,0.213887751102448,0.361973732709885,-0.605334222316742,0.708904445171356 ,0.626789748668671,-0.749257385730743,0.213887751102448,0.517510056495667,-0.833824872970581,0.192144423723221 ,0.314119011163712,-0.739236891269684,0.595699608325958,0.17069847881794,-0.387216597795486,0.906049311161041 ,0.513224720954895,-0.832203328609467,0.209852293133736,0.578862547874451,-0.786143362522125,0.216556489467621 ,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621 ,0.513224720954895,-0.832203328609467,0.209852293133736,0.680179119110107,0.270307511091232,0.681388378143311 ,0.714891254901886,0.201140508055687,0.669681310653687,0.360629975795746,-0.702259659767151,0.613821983337402 ,0.626789748668671,-0.749257385730743,0.213887751102448,0.578862547874451,-0.786143362522125,0.216556489467621 ,0.714891254901886,0.201140508055687,0.669681310653687,-0.0101526426151395,0.0385068021714687,0.999206781387329 ,0.315801054239273,0.0731089860200882,0.946004629135132,0.192558065056801,-0.101361930370331,0.976036429405212 ,0.168070778250694,-0.457133919000626,0.873373210430145,0.139593034982681,-0.543097734451294,0.827984690666199 ,0.0695574581623077,-0.316367268562317,0.946083247661591,-0.136446863412857,-0.21966315805912,0.965986728668213 ,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.130675092339516,-0.201507270336151,0.9707310795784 ,-0.204613357782364,0.564212739467621,0.799873352050781,0.026754243299365,0.843723058700562,0.53611159324646 ,-0.046717431396246,0.464232265949249,0.884480595588684,-0.204613357782364,0.564212739467621,0.799873352050781 ,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.136446863412857,-0.21966315805912,0.965986728668213 ,-0.0965566337108612,0.382317036390305,0.918972492218018,0.0405396111309528,-0.00950155965983868,0.999132752418518 ,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0505779199302197,-0.0635379478335381,0.996696949005127 ,0.0361802279949188,0.15255069732666,0.987633168697357,0.0405396111309528,-0.00950155965983868,0.999132752418518 ,0.0361802279949188,0.15255069732666,0.987633168697357,0.190371856093407,0.256429195404053,0.947629988193512 ,0.193743079900742,0.0896209701895714,0.976950228214264,0.724869191646576,-0.144625514745712,0.673534035682678 ,0.668389976024628,-0.0383556596934795,0.742821395397186,0.729625582695007,0.0742557868361473,0.679803311824799 ,0.712920248508453,0.00929267052561045,0.701183557510376,0.724869191646576,-0.144625514745712,0.673534035682678 ,0.729625582695007,0.0742557868361473,0.679803311824799,0.621637463569641,0.0923129394650459,0.77784651517868 ,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.162078380584717,0.332254558801651,0.929159581661224 ,0.0823612809181213,0.629497587680817,0.772624969482422,0.0361802279949188,0.15255069732666,0.987633168697357 ,0.256553143262863,0.759260475635529,0.598083674907684,0.118274427950382,0.894158720970154,0.431846410036087 ,0.0823612809181213,0.629497587680817,0.772624969482422,0.162078380584717,0.332254558801651,0.929159581661224 ,-0.111705176532269,0.976534187793732,0.18412746489048,-0.0904141515493393,0.920958995819092,0.379024863243103 ,0.0823612809181213,0.629497587680817,0.772624969482422,0.118274427950382,0.894158720970154,0.431846410036087 ,0.190371856093407,0.256429195404053,0.947629988193512,0.0361802279949188,0.15255069732666,0.987633168697357 ,0.0823612809181213,0.629497587680817,0.772624969482422,-0.0904141515493393,0.920958995819092,0.379024863243103 ,0.724869191646576,-0.144625514745712,0.673534035682678,0.388869285583496,-0.304632723331451,0.869470834732056 ,0.405026167631149,-0.171226277947426,0.898128807544708,0.593307375907898,-0.0775594636797905,0.801230847835541 ,0.668389976024628,-0.0383556596934795,0.742821395397186,-0.218910127878189,-0.0667930841445923,0.973456263542175 ,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.0144113004207611,0.0269631575793028,0.999532520771027 ,-0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.136446863412857,-0.21966315805912,0.965986728668213 ,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.0540277659893036,-0.0540848448872566,0.997073590755463 ,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.00769979506731033,-0.155788585543633,0.987760424613953 ,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.333709418773651,0.169013321399689,0.927400946617126 ,0.205060333013535,0.0685160234570503,0.976348161697388,-0.0540277659893036,-0.0540848448872566,0.997073590755463 ,0.0144113004207611,0.0269631575793028,0.999532520771027,0.470013290643692,0.212332352995873,0.856739461421967 ,0.333709418773651,0.169013321399689,0.927400946617126,0.578032433986664,0.306231528520584,0.756373405456543 ,0.357361167669296,0.242811009287834,0.901851356029511,0.388869285583496,-0.304632723331451,0.869470834732056 ,0.724869191646576,-0.144625514745712,0.673534035682678,-0.0965566337108612,0.382317036390305,0.918972492218018 ,-0.136446863412857,-0.21966315805912,0.965986728668213,0.0695574581623077,-0.316367268562317,0.946083247661591 ,0.119953289628029,0.283690631389618,0.951383650302887,-0.104829348623753,-0.0149719836190343,0.994377493858337 ,-0.046717431396246,0.464232265949249,0.884480595588684,0.162078380584717,0.332254558801651,0.929159581661224 ,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.026754243299365,0.843723058700562,0.53611159324646 ,0.256553143262863,0.759260475635529,0.598083674907684,0.162078380584717,0.332254558801651,0.929159581661224 ,-0.046717431396246,0.464232265949249,0.884480595588684,0.0405396111309528,-0.00950155965983868,0.999132752418518 ,0.193743079900742,0.0896209701895714,0.976950228214264,0.533409833908081,0.213411912322044,0.818492114543915 ,0.109049446880817,0.0514820925891399,0.992702305316925,0.0540597923099995,-0.0316095426678658,0.998037278652191 ,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.109049446880817,0.0514820925891399,0.992702305316925 ,0.109049446880817,0.0514820925891399,0.992702305316925,0.533409833908081,0.213411912322044,0.818492114543915 ,0.54212898015976,0.215727955102921,0.812131583690643,0.578032433986664,0.306231528520584,0.756373405456543,0.724869191646576 ,-0.144625514745712,0.673534035682678,0.858066916465759,-0.0402064435184002,0.511961579322815,0.700553953647614 ,0.463066458702087,0.542949020862579,0.858066916465759,-0.0402064435184002,0.511961579322815,0.875872433185577 ,0.296488851308823,0.38071221113205,0.802525162696838,0.518118143081665,0.295815676450729,0.700553953647614,0.463066458702087 ,0.542949020862579,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.994033694267273,0.107649877667427 ,-0.0175654906779528,0.212925776839256,0.972887873649597,-0.0902870893478394,0.480981200933456,0.871001183986664 ,0.100070223212242,0.13062296807766,0.400416731834412,0.906975269317627,-0.878701210021973,-0.298690170049667 ,-0.372382044792175,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597 ,-0.0902870893478394,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.370056182146072,0.811048626899719 ,-0.453054636716843,0.713096976280212,0.68854147195816,-0.131921663880348,0.212925776839256,0.972887873649597 ,-0.0902870893478394,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597 ,-0.0902870893478394,0.713096976280212,0.68854147195816,-0.131921663880348,0.778178691864014,0.616257607936859 ,0.121097095310688,0.480981200933456,0.871001183986664,0.100070223212242,0.551189541816711,0.456701904535294 ,0.698293268680573,0.486871391534805,0.750825703144073,0.446337312459946,0.276492714881897,0.762958288192749 ,0.584334194660187,0.326813966035843,0.423467636108398,0.844906985759735,0.551189541816711,0.456701904535294 ,0.698293268680573,0.326813966035843,0.423467636108398,0.844906985759735,0.329012274742126,0.260547906160355 ,0.907670497894287,0.561613619327545,0.285967856645584,0.776409983634949,0.7577885389328,0.376234740018845,0.533107817173004 ,0.739092469215393,0.541533410549164,0.400604367256165,0.778178691864014,0.616257607936859,0.121097095310688 ,0.827663242816925,0.523418128490448,0.202501967549324,0.804373443126678,0.392295897006989,0.446191996335983 ,0.739092469215393,0.541533410549164,0.400604367256165,0.7577885389328,0.376234740018845,0.533107817173004,0.758135914802551 ,0.0851427242159843,0.646514236927032,0.443391680717468,-0.0999263972043991,0.89074045419693,0.252335846424103 ,0.330343335866928,0.909505307674408,-0.26518127322197,0.597104549407959,-0.757063448429108,0.182353228330612 ,0.97417688369751,-0.133141815662384,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.278109550476074 ,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.182353228330612 ,0.97417688369751,-0.133141815662384,0.486871391534805,0.750825703144073,0.446337312459946,0.534174799919128 ,0.836855232715607,0.119710274040699,0.170329049229622,0.936843514442444,-0.305470585823059,-0.523017466068268 ,0.285451769828796,-0.803100228309631,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372 ,0.835606217384338,-0.549224615097046,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.0107070477679372 ,0.835606217384338,-0.549224615097046,0.170329049229622,0.936843514442444,-0.305470585823059,-0.452081710100174 ,0.604530513286591,-0.655869662761688,0.7577885389328,0.376234740018845,0.533107817173004,0.804373443126678,0.392295897006989 ,0.446191996335983,0.731819272041321,0.307825177907944,0.608016610145569,0.740872263908386,0.260281056165695 ,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.804373443126678,0.392295897006989 ,0.446191996335983,0.650610029697418,0.750839710235596,0.113781958818436,0.665128111839294,0.607672452926636 ,0.433980166912079,0.731819272041321,0.307825177907944,0.608016610145569,0.665128111839294,0.607672452926636 ,0.433980166912079,0.551189541816711,0.456701904535294,0.698293268680573,0.561613619327545,0.285967856645584 ,0.776409983634949,0.665128111839294,0.607672452926636,0.433980166912079,0.534174799919128,0.836855232715607 ,0.119710274040699,0.486871391534805,0.750825703144073,0.446337312459946,0.551189541816711,0.456701904535294 ,0.698293268680573,0.558381021022797,0.167118594050407,0.812577426433563,0.561613619327545,0.285967856645584 ,0.776409983634949,0.329012274742126,0.260547906160355,0.907670497894287,0.315978825092316,0.0904445722699165 ,0.944445431232452,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.113433599472046,0.992009460926056 ,0.0552276223897934,0.182353228330612,0.97417688369751,-0.133141815662384,-0.26518127322197,0.597104549407959 ,-0.757063448429108,0.113433599472046,0.992009460926056,0.0552276223897934,0.276492714881897,0.762958288192749 ,0.584334194660187,0.486871391534805,0.750825703144073,0.446337312459946,0.182353228330612,0.97417688369751,-0.133141815662384 ,0.0685662999749184,0.738678991794586,0.670561015605927,0.0410983338952065,0.381287395954132,0.923542559146881 ,0.172223508358002,0.402292132377625,0.899166345596313,0.179263070225716,0.753637075424194,0.632373213768005 ,0.172223508358002,0.402292132377625,0.899166345596313,0.0410983338952065,0.381287395954132,0.923542559146881 ,0.0325647220015526,0.328354388475418,0.943993091583252,0.181231990456581,0.289873003959656,0.939749240875244 ,0.329012274742126,0.260547906160355,0.907670497894287,0.326813966035843,0.423467636108398,0.844906985759735 ,0.172223508358002,0.402292132377625,0.899166345596313,0.181231990456581,0.289873003959656,0.939749240875244 ,0.276492714881897,0.762958288192749,0.584334194660187,0.179263070225716,0.753637075424194,0.632373213768005 ,0.172223508358002,0.402292132377625,0.899166345596313,0.326813966035843,0.423467636108398,0.844906985759735 ,0.650610029697418,0.750839710235596,0.113781958818436,0.401338756084442,0.891479909420013,-0.210216000676155 ,0.534174799919128,0.836855232715607,0.119710274040699,0.665128111839294,0.607672452926636,0.433980166912079 ,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569 ,0.561613619327545,0.285967856645584,0.776409983634949,0.558381021022797,0.167118594050407,0.812577426433563 ,0.315978825092316,0.0904445722699165,0.944445431232452,0.329012274742126,0.260547906160355,0.907670497894287 ,0.181231990456581,0.289873003959656,0.939749240875244,0.178787171840668,0.10878062993288,0.977855801582336,0.0226862858980894 ,0.138102903962135,0.990158021450043,0.178787171840668,0.10878062993288,0.977855801582336,0.181231990456581,0.289873003959656 ,0.939749240875244,0.0325647220015526,0.328354388475418,0.943993091583252,0.0685662999749184,0.738678991794586 ,0.670561015605927,0.179263070225716,0.753637075424194,0.632373213768005,0.145434200763702,0.978163301944733 ,0.14847719669342,0.078812912106514,0.980074644088745,0.182324379682541,0.276492714881897,0.762958288192749,0.584334194660187 ,0.113433599472046,0.992009460926056,0.0552276223897934,0.145434200763702,0.978163301944733,0.14847719669342 ,0.179263070225716,0.753637075424194,0.632373213768005,-0.0239754971116781,0.848645508289337,-0.528418362140656 ,0.103339314460754,0.947827875614166,-0.301568180322647,0.145434200763702,0.978163301944733,0.14847719669342 ,0.113433599472046,0.992009460926056,0.0552276223897934,0.0339763574302197,0.937289535999298,-0.346891850233078 ,0.078812912106514,0.980074644088745,0.182324379682541,0.145434200763702,0.978163301944733,0.14847719669342,0.103339314460754 ,0.947827875614166,-0.301568180322647,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.803184449672699 ,0.0743702203035355,-0.591069996356964,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.452081710100174 ,0.604530513286591,-0.655869662761688,0.170329049229622,0.936843514442444,-0.305470585823059,0.534174799919128 ,0.836855232715607,0.119710274040699,0.401338756084442,0.891479909420013,-0.210216000676155,-0.19065423309803 ,0.753101229667664,-0.629674077033997,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.803184449672699 ,0.0743702203035355,-0.591069996356964,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.19065423309803 ,0.753101229667664,-0.629674077033997,0.277289211750031,-0.704152882099152,0.653666138648987,0.295715004205704 ,-0.771513819694519,0.56331080198288,0.426225006580353,-0.76509952545166,0.482654064893723,0.385886758565903 ,-0.746556282043457,0.541982591152191,0.353581786155701,-0.382090777158737,0.853807151317596,0.277289211750031 ,-0.704152882099152,0.653666138648987,0.385886758565903,-0.746556282043457,0.541982591152191,0.476604402065277 ,-0.515640795230865,0.712013244628906,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.176269888877869 ,-0.285972148180008,0.941885769367218,0.238539665937424,0.21987047791481,0.945915341377258,0.0352616421878338 ,0.240770235657692,0.969941377639771,0.353581786155701,-0.382090777158737,0.853807151317596,0.434465974569321 ,0.150427758693695,0.888037621974945,0.238539665937424,0.21987047791481,0.945915341377258,0.176269888877869,-0.285972148180008 ,0.941885769367218,0.40496814250946,0.259010583162308,0.87687760591507,0.235586777329445,0.270827025175095,0.933355033397675 ,0.238539665937424,0.21987047791481,0.945915341377258,0.434465974569321,0.150427758693695,0.888037621974945,0.0384946875274181 ,0.285418510437012,0.957629561424255,0.0352616421878338,0.240770235657692,0.969941377639771,0.238539665937424 ,0.21987047791481,0.945915341377258,0.235586777329445,0.270827025175095,0.933355033397675,0.362627446651459,-0.180693462491035 ,0.914249002933502,0.248945504426956,-0.117258243262768,0.961393058300018,0.40496814250946,0.259010583162308 ,0.87687760591507,0.552154183387756,0.173749193549156,0.815436661243439,0.0766859278082848,-0.975562393665314 ,0.205905899405479,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0500960312783718,-0.998004376888275 ,0.0384394414722919,0.128954827785492,-0.985570788383484,0.109639815986156,0.193085044622421,-0.95480340719223 ,0.225983783602715,0.0766859278082848,-0.975562393665314,0.205905899405479,0.128954827785492,-0.985570788383484 ,0.109639815986156,0.225613579154015,-0.956868171691895,0.183034926652908,0.282156497240067,-0.915852665901184 ,-0.285659939050674,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465096980333328,-0.885112583637238 ,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238 ,0.016138968989253,0.470402508974075,-0.871353209018707,-0.139517307281494,0.600540995597839,-0.799374520778656 ,-0.0187329761683941,0.545321881771088,-0.833433032035828,0.0895174741744995,0.545321881771088,-0.833433032035828 ,0.0895174741744995,0.630033671855927,-0.76368510723114,0.140863940119743,0.539758801460266,-0.780041754245758 ,0.316536396741867,0.471000701189041,-0.846986770629883,0.246519237756729,0.630033671855927,-0.76368510723114 ,0.140863940119743,0.767249822616577,-0.595458924770355,0.23823593556881,0.70995169878006,-0.557043075561523 ,0.430896311998367,0.539758801460266,-0.780041754245758,0.316536396741867,0.295715004205704,-0.771513819694519 ,0.56331080198288,0.277289211750031,-0.704152882099152,0.653666138648987,0.0847999006509781,-0.684147000312805 ,0.724397599697113,0.0651562884449959,-0.780692636966705,0.62150913476944,0.353581786155701,-0.382090777158737 ,0.853807151317596,0.176269888877869,-0.285972148180008,0.941885769367218,0.0847999006509781,-0.684147000312805 ,0.724397599697113,0.277289211750031,-0.704152882099152,0.653666138648987,-0.00443782517686486,-0.271711438894272 ,0.962368547916412,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.0847999006509781,-0.684147000312805 ,0.724397599697113,0.176269888877869,-0.285972148180008,0.941885769367218,-0.0491818785667419,-0.776791214942932 ,0.627834796905518,0.0651562884449959,-0.780692636966705,0.62150913476944,0.0847999006509781,-0.684147000312805 ,0.724397599697113,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.353581786155701,-0.382090777158737 ,0.853807151317596,0.476604402065277,-0.515640795230865,0.712013244628906,0.598369121551514,-0.00250658229924738 ,0.801216602325439,0.434465974569321,0.150427758693695,0.888037621974945,0.598369121551514,-0.00250658229924738 ,0.801216602325439,0.552154183387756,0.173749193549156,0.815436661243439,0.40496814250946,0.259010583162308,0.87687760591507 ,0.434465974569321,0.150427758693695,0.888037621974945,0.00911593530327082,-0.103348582983017,0.994603395462036 ,0.0384946875274181,0.285418510437012,0.957629561424255,0.235586777329445,0.270827025175095,0.933355033397675 ,0.173270419239998,-0.100987397134304,0.979683041572571,0.235586777329445,0.270827025175095,0.933355033397675 ,0.40496814250946,0.259010583162308,0.87687760591507,0.248945504426956,-0.117258243262768,0.961393058300018,0.173270419239998 ,-0.100987397134304,0.979683041572571,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.0108760436996818 ,-0.349400758743286,0.936910271644592,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.186361730098724 ,-0.434708625078201,0.881077587604523,-0.220686122775078,-0.040834903717041,0.974489688873291,0.0623843558132648 ,-0.406503170728683,0.911517083644867,0.226468428969383,-0.439074218273163,0.869439959526062,-0.0349236838519573 ,-0.777106523513794,0.62839937210083,-0.186361730098724,-0.434708625078201,0.881077587604523,0.61975085735321 ,-0.35027813911438,0.702292025089264,0.463432401418686,-0.580224633216858,0.66975349187851,0.226468428969383 ,-0.439074218273163,0.869439959526062,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383 ,-0.439074218273163,0.869439959526062,0.463432401418686,-0.580224633216858,0.66975349187851,0.176858365535736 ,-0.897578120231628,0.403824985027313,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.00262317061424255 ,-0.184787794947624,0.982774972915649,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383 ,-0.439074218273163,0.869439959526062,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.463432401418686 ,-0.580224633216858,0.66975349187851,0.61975085735321,-0.35027813911438,0.702292025089264,0.794963598251343,-0.434218406677246 ,0.423659265041351,0.420062124729156,-0.858003616333008,0.295596987009048,0.176858365535736,-0.897578120231628 ,0.403824985027313,0.794963598251343,-0.434218406677246,0.423659265041351,0.881620466709137,-0.332029432058334 ,0.335412949323654,0.562851548194885,-0.792488932609558,0.23486053943634,0.420062124729156,-0.858003616333008 ,0.295596987009048,0.513407528400421,-0.784644782543182,0.347484111785889,0.507576704025269,-0.725169718265533 ,0.465290039777756,0.223161399364471,-0.702425539493561,0.675867795944214,0.220125123858452,-0.84959089756012 ,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,0.507576704025269,-0.725169718265533 ,0.465290039777756,0.511638343334198,-0.543274581432343,0.665641725063324,0.215388640761375,-0.476592898368835 ,0.852330327033997,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.0377944894134998,-0.657056510448456 ,0.752893269062042,0.223161399364471,-0.702425539493561,0.675867795944214,0.215388640761375,-0.476592898368835 ,0.852330327033997,-0.055518988519907,-0.839309513568878,0.540811538696289,0.220125123858452,-0.84959089756012 ,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,-0.0377944894134998,-0.657056510448456 ,0.752893269062042,0.903869867324829,0.198627322912216,0.37890163064003,0.899348855018616,0.00629356363788247 ,0.437186509370804,0.836100995540619,0.0841564238071442,0.542081892490387,0.855352699756622,0.226547658443451 ,0.46588408946991,0.899348855018616,0.00629356363788247,0.437186509370804,0.903869867324829,0.198627322912216 ,0.37890163064003,0.793976366519928,0.302302360534668,0.527460694313049,0.795822381973267,0.0336451791226864 ,0.604594647884369,0.846422255039215,-0.185521140694618,0.499150514602661,0.899348855018616,0.00629356363788247 ,0.437186509370804,0.795822381973267,0.0336451791226864,0.604594647884369,0.777246952056885,-0.186122506856918 ,0.60103702545166,0.899348855018616,0.00629356363788247,0.437186509370804,0.846422255039215,-0.185521140694618 ,0.499150514602661,0.759909570217133,-0.165927812457085,0.628494560718536,0.836100995540619,0.0841564238071442 ,0.542081892490387,0.411182582378387,-0.842439949512482,0.348172098398209,0.823821365833282,-0.474406152963638 ,0.310253411531448,0.778993248939514,-0.607196033000946,0.156468689441681,0.513407528400421,-0.784644782543182 ,0.347484111785889,0.350974529981613,-0.540442049503326,0.764682471752167,0.576319634914398,0.0662916451692581 ,0.814531207084656,0.854965507984161,-0.114104993641377,0.505978286266327,0.560910940170288,-0.546258211135864 ,0.622077882289886,0.536651909351349,-0.138671860098839,0.832331001758575,0.777246952056885,-0.186122506856918 ,0.60103702545166,0.795822381973267,0.0336451791226864,0.604594647884369,0.532816469669342,0.10447982698679,0.83975625038147 ,0.536214470863342,0.394264131784439,0.746344327926636,0.532816469669342,0.10447982698679,0.83975625038147,0.795822381973267 ,0.0336451791226864,0.604594647884369,0.793976366519928,0.302302360534668,0.527460694313049,0.814013004302979 ,0.416528642177582,0.404829293489456,0.73296993970871,0.0683575123548508,0.676817834377289,0.898182094097137 ,-0.0604765526950359,0.435443967580795,0.915319561958313,0.399081766605377,0.0540725849568844,0.854046881198883 ,0.485713124275208,0.186243653297424,0.814013004302979,0.416528642177582,0.404829293489456,0.915319561958313 ,0.399081766605377,0.0540725849568844,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561 ,0.528298437595367,-0.518734514713287,0.890166699886322,0.437690794467926,-0.12660938501358,0.915319561958313 ,0.399081766605377,0.0540725849568844,0.93711906671524,0.303550958633423,-0.172234460711479,0.552991390228271 ,0.323919504880905,-0.767643570899963,0.672172069549561,0.528298437595367,-0.518734514713287,0.93711906671524 ,0.303550958633423,-0.172234460711479,0.856223344802856,0.13723511993885,-0.498044282197952,0.552991390228271 ,0.323919504880905,-0.767643570899963,0.856223344802856,0.13723511993885,-0.498044282197952,0.933138132095337 ,-0.0070160455070436,-0.359449595212936,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.744540750980377 ,0.353585213422775,-0.566247820854187,0.552991390228271,0.323919504880905,-0.767643570899963,0.890166699886322 ,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.552991390228271 ,0.323919504880905,-0.767643570899963,0.744540750980377,0.353585213422775,-0.566247820854187,0.632524311542511 ,-0.737463712692261,0.236770406365395,0.625836908817291,-0.779953479766846,0.000855531019624323,0.816257119178772 ,-0.389834344387054,-0.426325589418411,0.93777334690094,-0.280869245529175,-0.204190224409103,0.816257119178772 ,-0.389834344387054,-0.426325589418411,0.851511597633362,-0.5011847615242,0.154083982110024,0.967206120491028 ,-0.19463723897934,0.163182899355888,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.816257119178772 ,-0.389834344387054,-0.426325589418411,0.625836908817291,-0.779953479766846,0.000855531019624323,0.851511597633362 ,-0.5011847615242,0.154083982110024,0.632524311542511,-0.737463712692261,0.236770406365395,0.645412087440491 ,-0.585248291492462,0.490843862295151,0.0743590220808983,-0.732295691967011,0.676914930343628,0.125414818525314 ,-0.832001984119415,0.540410816669464,0.612550616264343,-0.435902178287506,0.659371674060822,0.078930102288723 ,-0.647568047046661,0.757908701896667,0.0743590220808983,-0.732295691967011,0.676914930343628,0.645412087440491 ,-0.585248291492462,0.490843862295151,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.485137194395065 ,-0.428027123212814,0.762518644332886,0.0743590220808983,-0.732295691967011,0.676914930343628,0.078930102288723 ,-0.647568047046661,0.757908701896667,-0.119093708693981,-0.53387188911438,0.837136447429657,0.125414818525314 ,-0.832001984119415,0.540410816669464,0.0743590220808983,-0.732295691967011,0.676914930343628,-0.485137194395065 ,-0.428027123212814,0.762518644332886,0.546313166618347,-0.300951540470123,0.781645774841309,0.0897415652871132 ,-0.61595892906189,0.782649993896484,0.078930102288723,-0.647568047046661,0.757908701896667,0.612550616264343 ,-0.435902178287506,0.659371674060822,0.0897415652871132,-0.61595892906189,0.782649993896484,-0.527550399303436 ,-0.67441987991333,0.51657372713089,-0.549701511859894,-0.519823312759399,0.653920412063599,0.078930102288723 ,-0.647568047046661,0.757908701896667,0.576319634914398,0.0662916451692581,0.814531207084656,0.0803298726677895 ,0.272869914770126,0.958691358566284,0.591780304908752,0.0913430228829384,0.8009073138237,0.786046326160431,0.0746424272656441 ,0.613644540309906,0.576319634914398,0.0662916451692581,0.814531207084656,0.350974529981613,-0.540442049503326 ,0.764682471752167,-0.119093708693981,-0.53387188911438,0.837136447429657,0.0803298726677895,0.272869914770126 ,0.958691358566284,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.239867821335793,-0.0863698795437813 ,0.966955900192261,0.244136393070221,0.145083606243134,0.95882648229599,0.0296379756182432,0.164347007870674 ,0.985957264900208,0.536651909351349,-0.138671860098839,0.832331001758575,0.532816469669342,0.10447982698679 ,0.83975625038147,0.244136393070221,0.145083606243134,0.95882648229599,0.239867821335793,-0.0863698795437813 ,0.966955900192261,0.536214470863342,0.394264131784439,0.746344327926636,0.253624588251114,0.428919792175293 ,0.867007732391357,0.244136393070221,0.145083606243134,0.95882648229599,0.532816469669342,0.10447982698679,0.83975625038147 ,0.0497331917285919,0.445011228322983,0.894142985343933,0.0296379756182432,0.164347007870674,0.985957264900208 ,0.244136393070221,0.145083606243134,0.95882648229599,0.253624588251114,0.428919792175293,0.867007732391357,0.544139504432678 ,-0.298705726861954,0.784019768238068,0.238130986690521,-0.235158920288086,0.942334294319153,0.215388640761375 ,-0.476592898368835,0.852330327033997,0.511638343334198,-0.543274581432343,0.665641725063324,0.536651909351349 ,-0.138671860098839,0.832331001758575,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521 ,-0.235158920288086,0.942334294319153,0.544139504432678,-0.298705726861954,0.784019768238068,0.0126708010211587 ,-0.0581304989755154,0.99822860956192,0.000908877176698297,-0.206076413393021,0.97853547334671,0.238130986690521 ,-0.235158920288086,0.942334294319153,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521 ,-0.235158920288086,0.942334294319153,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304 ,-0.446781009435654,0.894439041614532,0.215388640761375,-0.476592898368835,0.852330327033997,0.856223344802856 ,0.13723511993885,-0.498044282197952,0.93711906671524,0.303550958633423,-0.172234460711479,0.979637861251831 ,-0.147638529539108,0.136060565710068,0.93777334690094,-0.280869245529175,-0.204190224409103,0.915319561958313 ,0.399081766605377,0.0540725849568844,0.898182094097137,-0.0604765526950359,0.435443967580795,0.979637861251831 ,-0.147638529539108,0.136060565710068,0.93711906671524,0.303550958633423,-0.172234460711479,0.612550616264343 ,-0.435902178287506,0.659371674060822,0.645412087440491,-0.585248291492462,0.490843862295151,0.979637861251831 ,-0.147638529539108,0.136060565710068,0.898182094097137,-0.0604765526950359,0.435443967580795,0.632524311542511 ,-0.737463712692261,0.236770406365395,0.93777334690094,-0.280869245529175,-0.204190224409103,0.979637861251831 ,-0.147638529539108,0.136060565710068,0.645412087440491,-0.585248291492462,0.490843862295151,0.275395423173904 ,-0.612316191196442,0.741097986698151,0.589075446128845,-0.205572411417961,0.781492233276367,0.759909570217133 ,-0.165927812457085,0.628494560718536,0.59905880689621,-0.501385033130646,0.624292850494385,0.237821668386459 ,-0.891240954399109,0.386174082756042,-0.272507458925247,-0.860418200492859,0.430604517459869,0.275395423173904 ,-0.612316191196442,0.741097986698151,0.59905880689621,-0.501385033130646,0.624292850494385,-0.527550399303436 ,-0.67441987991333,0.51657372713089,0.0897415652871132,-0.61595892906189,0.782649993896484,0.275395423173904 ,-0.612316191196442,0.741097986698151,-0.272507458925247,-0.860418200492859,0.430604517459869,0.546313166618347 ,-0.300951540470123,0.781645774841309,0.589075446128845,-0.205572411417961,0.781492233276367,0.275395423173904 ,-0.612316191196442,0.741097986698151,0.0897415652871132,-0.61595892906189,0.782649993896484,0.507576704025269 ,-0.725169718265533,0.465290039777756,0.689145267009735,-0.603762626647949,0.400686323642731,0.511638343334198 ,-0.543274581432343,0.665641725063324,0.507576704025269,-0.725169718265533,0.465290039777756,0.513407528400421 ,-0.784644782543182,0.347484111785889,0.778993248939514,-0.607196033000946,0.156468689441681,0.704199492931366 ,-0.704627811908722,0.0871931314468384,0.689145267009735,-0.603762626647949,0.400686323642731,0.814013004302979 ,0.416528642177582,0.404829293489456,0.741662085056305,0.344577699899673,0.575502872467041,0.694613039493561 ,0.143838599324226,0.704856872558594,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561 ,0.143838599324226,0.704856872558594,0.741662085056305,0.344577699899673,0.575502872467041,0.855352699756622 ,0.226547658443451,0.46588408946991,0.836100995540619,0.0841564238071442,0.542081892490387,0.589075446128845 ,-0.205572411417961,0.781492233276367,0.694613039493561,0.143838599324226,0.704856872558594,0.836100995540619 ,0.0841564238071442,0.542081892490387,0.759909570217133,-0.165927812457085,0.628494560718536,0.546313166618347 ,-0.300951540470123,0.781645774841309,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561 ,0.143838599324226,0.704856872558594,0.589075446128845,-0.205572411417961,0.781492233276367,-0.055518988519907 ,-0.839309513568878,0.540811538696289,-0.0675294324755669,-0.945460379123688,0.318660378456116,0.117540158331394 ,-0.936730265617371,0.329728245735168,0.220125123858452,-0.84959089756012,0.479312241077423,0.117540158331394 ,-0.936730265617371,0.329728245735168,0.411182582378387,-0.842439949512482,0.348172098398209,0.513407528400421 ,-0.784644782543182,0.347484111785889,0.220125123858452,-0.84959089756012,0.479312241077423,0.73296993970871 ,0.0683575123548508,0.676817834377289,0.546313166618347,-0.300951540470123,0.781645774841309,0.612550616264343 ,-0.435902178287506,0.659371674060822,0.898182094097137,-0.0604765526950359,0.435443967580795,0.771526336669922 ,-0.409758031368256,0.486667722463608,0.589298963546753,-0.771825730800629,0.238771393895149,0.237821668386459 ,-0.891240954399109,0.386174082756042,0.59905880689621,-0.501385033130646,0.624292850494385,0.846422255039215 ,-0.185521140694618,0.499150514602661,0.771526336669922,-0.409758031368256,0.486667722463608,0.59905880689621 ,-0.501385033130646,0.624292850494385,0.759909570217133,-0.165927812457085,0.628494560718536,0.771526336669922 ,-0.409758031368256,0.486667722463608,0.846422255039215,-0.185521140694618,0.499150514602661,0.777246952056885 ,-0.186122506856918,0.60103702545166,0.760827541351318,-0.370115906000137,0.53306257724762,0.589298963546753 ,-0.771825730800629,0.238771393895149,0.771526336669922,-0.409758031368256,0.486667722463608,0.760827541351318 ,-0.370115906000137,0.53306257724762,0.689145267009735,-0.603762626647949,0.400686323642731,0.704199492931366 ,-0.704627811908722,0.0871931314468384,0.854965507984161,-0.114104993641377,0.505978286266327,0.940892815589905 ,-0.119216494262218,0.317030221223831,0.823821365833282,-0.474406152963638,0.310253411531448,0.560910940170288 ,-0.546258211135864,0.622077882289886,0.937154471874237,-0.0475939512252808,0.345653474330902,0.917503833770752 ,-0.132210671901703,0.375109404325485,0.916658163070679,-0.0698241367936134,0.393525570631027,0.916658163070679 ,-0.0698241367936134,0.393525570631027,0.917503833770752,-0.132210671901703,0.375109404325485,0.872779548168182 ,-0.198945015668869,0.445731669664383,0.855076372623444,-0.165702432394028,0.491311639547348,-0.220686122775078 ,-0.040834903717041,0.974489688873291,-0.186361730098724,-0.434708625078201,0.881077587604523,0.0312842912971973 ,-0.474717557430267,0.879582047462463,0.106603257358074,0.0133492052555084,0.994212031364441,-0.0349236838519573 ,-0.777106523513794,0.62839937210083,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0312842912971973 ,-0.474717557430267,0.879582047462463,-0.186361730098724,-0.434708625078201,0.881077587604523,0.301303088665009 ,-0.716448962688446,0.629219651222229,0.560910940170288,-0.546258211135864,0.622077882289886,0.823821365833282 ,-0.474406152963638,0.310253411531448,0.411182582378387,-0.842439949512482,0.348172098398209,0.760827541351318 ,-0.370115906000137,0.53306257724762,0.544139504432678,-0.298705726861954,0.784019768238068,0.511638343334198 ,-0.543274581432343,0.665641725063324,0.689145267009735,-0.603762626647949,0.400686323642731,0.536651909351349 ,-0.138671860098839,0.832331001758575,0.544139504432678,-0.298705726861954,0.784019768238068,0.760827541351318 ,-0.370115906000137,0.53306257724762,0.777246952056885,-0.186122506856918,0.60103702545166,0.742792665958405 ,-0.550313711166382,0.381331622600555,0.803535997867584,-0.553550720214844,0.2188870459795,0.897108614444733 ,-0.31337758898735,0.311433225870132,0.760169208049774,-0.346720576286316,0.549479365348816,0.821304857730865 ,-0.558016240596771,0.118643142282963,0.923712968826294,-0.295430272817612,0.243875607848167,0.897108614444733 ,-0.31337758898735,0.311433225870132,0.803535997867584,-0.553550720214844,0.2188870459795,0.945337653160095,-0.174788698554039 ,0.275292009115219,0.899602174758911,-0.197590529918671,0.389453411102295,0.897108614444733,-0.31337758898735 ,0.311433225870132,0.923712968826294,-0.295430272817612,0.243875607848167,0.705349028110504,-0.217919707298279 ,0.674532234668732,0.760169208049774,-0.346720576286316,0.549479365348816,0.897108614444733,-0.31337758898735 ,0.311433225870132,0.899602174758911,-0.197590529918671,0.389453411102295,0.593307375907898,-0.0775594636797905 ,0.801230847835541,0.405026167631149,-0.171226277947426,0.898128807544708,0.401639640331268,-0.00309631112031639 ,0.915792524814606,0.577744483947754,0.0458397567272186,0.814929485321045,-0.00769979506731033,-0.155788585543633 ,0.987760424613953,0.205060333013535,0.0685160234570503,0.976348161697388,0.209787964820862,-0.0149007942527533 ,0.977633357048035,0.130675092339516,-0.201507270336151,0.9707310795784,0.613882482051849,0.099590003490448,0.783090114593506 ,0.621637463569641,0.0923129394650459,0.77784651517868,0.729625582695007,0.0742557868361473,0.679803311824799 ,0.613882482051849,0.099590003490448,0.783090114593506,0.729625582695007,0.0742557868361473,0.679803311824799 ,0.668389976024628,-0.0383556596934795,0.742821395397186,0.615384101867676,0.0611244365572929,0.785853803157806 ,0.520175099372864,-0.288751989603043,0.803766191005707,0.596563339233398,-0.0223739240318537,0.8022540807724 ,0.440964937210083,0.0207586232572794,0.897284269332886,0.356722086668015,-0.354729324579239,0.86424332857132 ,0.520175099372864,-0.288751989603043,0.803766191005707,0.356722086668015,-0.354729324579239,0.86424332857132 ,0.217255920171738,-0.631381034851074,0.744417786598206,0.34566730260849,-0.589025497436523,0.73045402765274 ,0.553863286972046,-0.30215710401535,0.77584570646286,0.520175099372864,-0.288751989603043,0.803766191005707 ,0.34566730260849,-0.589025497436523,0.73045402765274,0.266091585159302,-0.603160440921783,0.751926004886627 ,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.499244570732117,-0.495106011629105,-0.711073040962219 ,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.696032464504242,-0.619228482246399,-0.363448590040207 ,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.696032464504242,-0.619228482246399,-0.363448590040207 ,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.217067420482636,-0.972187459468842,0.0879386737942696 ,0.356722086668015,-0.354729324579239,0.86424332857132,0.440964937210083,0.0207586232572794,0.897284269332886 ,0.191416949033737,-0.0921172648668289,0.977176547050476,0.164827063679695,-0.547387719154358,0.820486903190613 ,0.356722086668015,-0.354729324579239,0.86424332857132,0.164827063679695,-0.547387719154358,0.820486903190613 ,0.114735066890717,-0.656680226325989,0.745390474796295,0.217255920171738,-0.631381034851074,0.744417786598206 ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.117666520178318,-0.734499752521515,-0.668329775333405 ,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.438083231449127,-0.825523734092712,-0.355800002813339 ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.438083231449127,-0.825523734092712,-0.355800002813339 ,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.05385497584939,-0.996109485626221,0.06975357234478 ,0.596563339233398,-0.0223739240318537,0.8022540807724,0.520175099372864,-0.288751989603043,0.803766191005707 ,0.553863286972046,-0.30215710401535,0.77584570646286,0.607095539569855,-0.200262412428856,0.768979847431183 ,-0.070097453892231,-0.765305280685425,-0.639839172363281,0.0357764922082424,-0.768304586410522,-0.639083802700043 ,0.0121895968914032,-0.964383244514465,-0.26422792673111,-0.0787644907832146,-0.96135801076889,-0.263793289661407 ,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0357764922082424,-0.768304586410522,-0.639083802700043 ,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0417160429060459,-0.96068263053894,-0.274497121572495 ,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0121895968914032,-0.964383244514465,-0.26422792673111 ,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.0655759945511818,-0.996207714080811,0.0571834556758404 ,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0787644907832146,-0.96135801076889,-0.263793289661407 ,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.00571701768785715,-0.999931693077087,-0.0101942336186767 ,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.758401393890381,-0.574856221675873,-0.307193249464035 ,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.834057211875916,-0.216860771179199,-0.50726717710495 ,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.469266027212143,-0.852578699588776,0.229997724294662 ,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.758401393890381,-0.574856221675873,-0.307193249464035 ,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0125365713611245,-0.668434202671051,0.743665635585785 ,0.208488672971725,-0.647888123989105,0.732648193836212,0.171075537800789,-0.616661608219147,0.768415033817291 ,0.0412249267101288,-0.205861806869507,0.977712333202362,0.0592443346977234,-0.610537111759186,0.789768636226654 ,0.171075537800789,-0.616661608219147,0.768415033817291,0.0600041374564171,-0.192453533411026,0.979469835758209 ,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0353972837328911,-0.630800306797028,0.775137424468994 ,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0412249267101288,-0.205861806869507,0.977712333202362 ,-0.0406640991568565,-0.687796175479889,0.724763989448547,0.0125365713611245,-0.668434202671051,0.743665635585785 ,0.0592443346977234,-0.610537111759186,0.789768636226654,-0.0353972837328911,-0.630800306797028,0.775137424468994 ,0.443391680717468,-0.0999263972043991,0.89074045419693,0.511712968349457,-0.26713839173317,0.816570222377777 ,0.477897197008133,-0.208041027188301,0.853424370288849,0.164051368832588,-0.273042142391205,0.947910964488983 ,0.443824082612991,-0.204101487994194,0.872561037540436,0.173163160681725,-0.359727561473846,0.916848182678223 ,0.164051368832588,-0.273042142391205,0.947910964488983,0.477897197008133,-0.208041027188301,0.853424370288849 ,-0.05385497584939,-0.996109485626221,0.06975357234478,0.0592407323420048,-0.802932441234589,0.593118906021118 ,0.163204148411751,-0.824093818664551,0.542433202266693,0.0655759945511818,-0.996207714080811,0.0571834556758404 ,0.114735066890717,-0.656680226325989,0.745390474796295,0.208488672971725,-0.647888123989105,0.732648193836212 ,0.163204148411751,-0.824093818664551,0.542433202266693,0.0592407323420048,-0.802932441234589,0.593118906021118 ,0.163204148411751,-0.824093818664551,0.542433202266693,0.208488672971725,-0.647888123989105,0.732648193836212 ,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.00129488680977374,-0.888734400272369,0.458420634269714 ,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0655759945511818,-0.996207714080811,0.0571834556758404 ,0.163204148411751,-0.824093818664551,0.542433202266693,-0.00129488680977374,-0.888734400272369,0.458420634269714 ,0.525104641914368,-0.419060587882996,0.740711390972137,0.0940685495734215,-0.732769310474396,0.673943758010864 ,-0.474541693925858,-0.67278927564621,0.567595541477203,0.13062296807766,0.400416731834412,0.906975269317627 ,0.121470481157303,-0.391699403524399,0.912039756774902,-0.117666520178318,-0.734499752521515,-0.668329775333405 ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.0417160429060459,-0.96068263053894,-0.274497121572495 ,0.0705975443124771,-0.761587023735046,-0.644205927848816,-0.05385497584939,-0.996109485626221,0.06975357234478 ,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.0417160429060459,-0.96068263053894,-0.274497121572495 ,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.680179119110107,0.270307511091232,0.681388378143311 ,-0.111705176532269,0.976534187793732,0.18412746489048,0.0118562933057547,0.974313676357269,0.224883005023003 ,0.714891254901886,0.201140508055687,0.669681310653687,0.0228955876082182,0.892617464065552,0.450233042240143 ,0.143662974238396,0.945594608783722,0.29191067814827,0.00479412823915482,0.900386512279511,0.435064554214478 ,0.221466824412346,0.900687992572784,0.373782753944397,0.0228955876082182,0.892617464065552,0.450233042240143 ,0.221466824412346,0.900687992572784,0.373782753944397,0.256553143262863,0.759260475635529,0.598083674907684 ,0.026754243299365,0.843723058700562,0.53611159324646,-0.0965566337108612,0.382317036390305,0.918972492218018 ,0.119953289628029,0.283690631389618,0.951383650302887,0.134373739361763,0.867044448852539,0.479768335819244 ,0.104800805449486,0.884988248348236,0.453665733337402,0.134373739361763,0.867044448852539,0.479768335819244 ,0.138274729251862,0.981688380241394,-0.131026938557625,0.234877377748489,0.967058181762695,0.0981385260820389 ,0.104800805449486,0.884988248348236,0.453665733337402,0.00479412823915482,0.900386512279511,0.435064554214478 ,-0.194994285702705,0.859172344207764,0.473075121641159,0.161482572555542,0.960672616958618,0.225901573896408 ,0.221466824412346,0.900687992572784,0.373782753944397,-0.258119583129883,0.745032370090485,0.615061819553375 ,0.0118562933057547,0.974313676357269,0.224883005023003,0.161482572555542,0.960672616958618,0.225901573896408 ,-0.194994285702705,0.859172344207764,0.473075121641159,-0.111705176532269,0.976534187793732,0.18412746489048 ,0.118274427950382,0.894158720970154,0.431846410036087,0.161482572555542,0.960672616958618,0.225901573896408 ,0.0118562933057547,0.974313676357269,0.224883005023003,0.256553143262863,0.759260475635529,0.598083674907684 ,0.221466824412346,0.900687992572784,0.373782753944397,0.161482572555542,0.960672616958618,0.225901573896408 ,0.118274427950382,0.894158720970154,0.431846410036087,0.357361167669296,0.242811009287834,0.901851356029511 ,0.578032433986664,0.306231528520584,0.756373405456543,0.195265397429466,0.864439308643341,0.463266789913177 ,0.149628981947899,0.846252083778381,0.511339902877808,0.195265397429466,0.864439308643341,0.463266789913177 ,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.0952406078577042,0.956162750720978,-0.276915192604065 ,0.149628981947899,0.846252083778381,0.511339902877808,0.802525162696838,0.518118143081665,0.295815676450729 ,0.466519266366959,0.882316112518311,0.0622739568352699,0.237646877765656,0.914831399917603,0.326507955789566 ,0.700553953647614,0.463066458702087,0.542949020862579,-0.427035480737686,0.790110290050507,-0.439734488725662 ,-0.457484602928162,0.835335671901703,-0.304831385612488,0.237646877765656,0.914831399917603,0.326507955789566 ,0.466519266366959,0.882316112518311,0.0622739568352699,-0.357527554035187,0.888932764530182,-0.286308616399765 ,0.195265397429466,0.864439308643341,0.463266789913177,0.237646877765656,0.914831399917603,0.326507955789566 ,-0.457484602928162,0.835335671901703,-0.304831385612488,0.578032433986664,0.306231528520584,0.756373405456543 ,0.700553953647614,0.463066458702087,0.542949020862579,0.237646877765656,0.914831399917603,0.326507955789566 ,0.195265397429466,0.864439308643341,0.463266789913177,-0.598032653331757,0.367280632257462,-0.712363600730896 ,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.462323904037476,0.371266037225723,-0.805244147777557 ,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.611508309841156,0.264030992984772,-0.7458855509758 ,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.421522259712219,0.257120847702026,-0.869602143764496 ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.897598922252655,-0.0851877480745316,0.432503432035446 ,0.534866094589233,0.53300929069519,0.655606091022491,0.970540165901184,0.124821022152901,0.206086173653603,0.971762239933014 ,-0.143596902489662,0.187237858772278,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.0532905422151089 ,-0.321431696414948,0.945432066917419,0.542791187763214,-0.0487677082419395,0.838450610637665,0.477409869432449 ,-0.0182194709777832,0.878491818904877,0.0532905422151089,-0.321431696414948,0.945432066917419,0.124305054545403 ,-0.308796167373657,0.942970395088196,0.507363021373749,-0.115291275084019,0.853985190391541,0.542791187763214 ,-0.0487677082419395,0.838450610637665,0.927076876163483,-0.29800683259964,0.227421119809151,0.960171759128571 ,-0.181689232587814,0.212271526455879,0.887619376182556,-0.256067276000977,0.382833331823349,0.875984609127045 ,-0.341396063566208,0.340734094381332,0.205060333013535,0.0685160234570503,0.976348161697388,0.469725012779236 ,0.301579147577286,0.829703807830811,0.328607112169266,0.0718188062310219,0.941732108592987,0.209787964820862 ,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.499466627836227 ,0.169172704219818,0.849655032157898,0.495325356721878,-0.15430523455143,0.854893386363983,0.32480525970459,-0.177078545093536 ,0.929055869579315,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.806693911552429,-0.123899839818478 ,0.577835381031036,0.839345693588257,-0.00945493672043085,0.543515801429749,0.936820507049561,0.0892298817634583 ,0.338238596916199,0.733202934265137,-0.122967794537544,0.668799161911011,0.785013139247894,0.0451312512159348 ,0.617832958698273,0.839345693588257,-0.00945493672043085,0.543515801429749,0.806693911552429,-0.123899839818478 ,0.577835381031036,0.679168462753296,-0.108902141451836,0.725858509540558,0.936820507049561,0.0892298817634583 ,0.338238596916199,0.839345693588257,-0.00945493672043085,0.543515801429749,0.52197939157486,-0.246480882167816 ,0.816568851470947,0.314269214868546,-0.177054598927498,0.932677090167999,0.679168462753296,-0.108902141451836 ,0.725858509540558,0.52197939157486,-0.246480882167816,0.816568851470947,0.0854972749948502,-0.343144297599792 ,0.935383439064026,0.0854972749948502,-0.343144297599792,0.935383439064026,0.52197939157486,-0.246480882167816 ,0.816568851470947,0.36207702755928,0.0357636697590351,0.931461870670319,-0.00456069782376289,-0.34082293510437 ,0.940116465091705,0.767594814300537,-0.318948030471802,0.555940985679626,0.572291314601898,-0.52212518453598 ,0.632351100444794,0.743626773357391,-0.236951321363449,0.625198543071747,0.883507072925568,-0.0658736377954483 ,0.463762849569321,0.767594814300537,-0.318948030471802,0.555940985679626,0.883507072925568,-0.0658736377954483 ,0.463762849569321,0.922792911529541,0.0174659602344036,0.384900212287903,0.91918009519577,-0.0705135017633438 ,0.387473553419113,0.683746695518494,-0.463673830032349,0.563468754291534,0.767594814300537,-0.318948030471802 ,0.555940985679626,0.91918009519577,-0.0705135017633438,0.387473553419113,0.813478171825409,-0.273027837276459 ,0.513526141643524,0.767594814300537,-0.318948030471802,0.555940985679626,0.683746695518494,-0.463673830032349 ,0.563468754291534,0.629647791385651,-0.52997088432312,0.568044483661652,0.572291314601898,-0.52212518453598 ,0.632351100444794,0.939345419406891,-0.108932219445705,0.325213760137558,0.950795531272888,-0.131767466664314 ,0.280401825904846,0.964455902576447,-0.157870531082153,0.211900100111961,0.964605271816254,-0.126861244440079 ,0.231177195906639,0.93361908197403,-0.0509388744831085,0.354627430438995,0.939345419406891,-0.108932219445705 ,0.325213760137558,0.964605271816254,-0.126861244440079,0.231177195906639,0.961285889148712,-0.0557491593062878 ,0.269854545593262,0.821834087371826,-0.135336369276047,0.55341911315918,0.939345419406891,-0.108932219445705 ,0.325213760137558,0.93361908197403,-0.0509388744831085,0.354627430438995,0.800939977169037,-0.0900113806128502 ,0.59194016456604,0.883507072925568,-0.0658736377954483,0.463762849569321,0.743626773357391,-0.236951321363449 ,0.625198543071747,0.775663673877716,0.0339613817632198,0.630232095718384,0.817228376865387,-0.0154423741623759 ,0.576107025146484,0.458424359560013,-0.261700868606567,0.849329054355621,0.540978610515594,-0.216916099190712 ,0.812582015991211,0.852472126483917,-0.133455187082291,0.505451321601868,0.821834087371826,-0.135336369276047 ,0.55341911315918,0.458424359560013,-0.261700868606567,0.849329054355621,0.821834087371826,-0.135336369276047 ,0.55341911315918,0.800939977169037,-0.0900113806128502,0.59194016456604,0.373029977083206,-0.317807883024216 ,0.871691942214966,0.288555771112442,-0.2911037504673,0.912137150764465,0.373029977083206,-0.317807883024216 ,0.871691942214966,0.800939977169037,-0.0900113806128502,0.59194016456604,0.680521726608276,-0.105455316603184 ,0.725099503993988,0.288555771112442,-0.2911037504673,0.912137150764465,0.680521726608276,-0.105455316603184 ,0.725099503993988,0.54023802280426,-0.148879259824753,0.828237771987915,0.189583629369736,-0.286395132541656 ,0.939167618751526,0.314269214868546,-0.177054598927498,0.932677090167999,0.629274904727936,-0.103665113449097 ,0.770238041877747,0.890204846858978,0.0921151489019394,0.446150302886963,0.679168462753296,-0.108902141451836 ,0.725858509540558,0.629274904727936,-0.103665113449097,0.770238041877747,0.874416053295136,-0.00546242296695709 ,0.485146045684814,0.890166699886322,0.437690794467926,-0.12660938501358,0.890204846858978,0.0921151489019394 ,0.446150302886963,0.874416053295136,-0.00546242296695709,0.485146045684814,0.629274904727936,-0.103665113449097 ,0.770238041877747,0.560746312141418,-0.00312843848951161,0.827981770038605,0.787108600139618,0.00810690317302942 ,0.616761207580566,0.314269214868546,-0.177054598927498,0.932677090167999,0.430652797222137,0.0691945105791092 ,0.89986127614975,0.560746312141418,-0.00312843848951161,0.827981770038605,0.629274904727936,-0.103665113449097 ,0.770238041877747,0.536631107330322,0.258791983127594,0.803152441978455,0.649454653263092,0.203223869204521 ,0.732740581035614,0.560746312141418,-0.00312843848951161,0.827981770038605,0.430652797222137,0.0691945105791092 ,0.89986127614975,0.793840944766998,0.179479137063026,0.581036806106567,0.787108600139618,0.00810690317302942 ,0.616761207580566,0.560746312141418,-0.00312843848951161,0.827981770038605,0.649454653263092,0.203223869204521 ,0.732740581035614,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.936820507049561,0.0892298817634583 ,0.338238596916199,0.97348940372467,0.2094656676054,0.0918834507465363,0.744540750980377,0.353585213422775,-0.566247820854187 ,0.679168462753296,-0.108902141451836,0.725858509540558,0.890204846858978,0.0921151489019394,0.446150302886963 ,0.97348940372467,0.2094656676054,0.0918834507465363,0.936820507049561,0.0892298817634583,0.338238596916199,0.890166699886322 ,0.437690794467926,-0.12660938501358,0.744540750980377,0.353585213422775,-0.566247820854187,0.97348940372467 ,0.2094656676054,0.0918834507465363,0.890204846858978,0.0921151489019394,0.446150302886963,0.964605271816254 ,-0.126861244440079,0.231177195906639,0.964455902576447,-0.157870531082153,0.211900100111961,0.896426856517792 ,-0.172908827662468,0.408070415258408,0.901179313659668,-0.204281270503998,0.382289171218872,0.887543320655823 ,-0.171314582228661,0.427689343690872,0.961285889148712,-0.0557491593062878,0.269854545593262,0.964605271816254 ,-0.126861244440079,0.231177195906639,0.901179313659668,-0.204281270503998,0.382289171218872,0.793840944766998 ,0.179479137063026,0.581036806106567,0.649454653263092,0.203223869204521,0.732740581035614,0.651595652103424 ,0.352775752544403,0.671544790267944,0.776918292045593,0.306892603635788,0.549740731716156,0.536631107330322 ,0.258791983127594,0.803152441978455,0.469725012779236,0.301579147577286,0.829703807830811,0.651595652103424 ,0.352775752544403,0.671544790267944,0.649454653263092,0.203223869204521,0.732740581035614,0.333709418773651 ,0.169013321399689,0.927400946617126,0.651595652103424,0.352775752544403,0.671544790267944,0.469725012779236 ,0.301579147577286,0.829703807830811,0.205060333013535,0.0685160234570503,0.976348161697388,0.288555771112442 ,-0.2911037504673,0.912137150764465,0.288461953401566,-0.251531571149826,0.923862278461456,0.345462441444397 ,-0.298967152833939,0.889536023139954,0.373029977083206,-0.317807883024216,0.871691942214966,0.295946687459946 ,-0.143637612462044,0.944343090057373,0.124305054545403,-0.308796167373657,0.942970395088196,0.0532905422151089 ,-0.321431696414948,0.945432066917419,0.103208005428314,-0.00969436671584845,0.994612574577332,0.103208005428314 ,-0.00969436671584845,0.994612574577332,0.0532905422151089,-0.321431696414948,0.945432066917419,-0.00456069782376289 ,-0.34082293510437,0.940116465091705,0.36207702755928,0.0357636697590351,0.931461870670319,0.765106797218323 ,-0.350072890520096,0.540426254272461,0.875984609127045,-0.341396063566208,0.340734094381332,0.887619376182556 ,-0.256067276000977,0.382833331823349,0.75313264131546,-0.288527101278305,0.591221868991852,0.922792911529541 ,0.0174659602344036,0.384900212287903,0.93361908197403,-0.0509388744831085,0.354627430438995,0.961285889148712 ,-0.0557491593062878,0.269854545593262,0.91918009519577,-0.0705135017633438,0.387473553419113,0.458424359560013 ,-0.261700868606567,0.849329054355621,0.373029977083206,-0.317807883024216,0.871691942214966,0.345462441444397 ,-0.298967152833939,0.889536023139954,0.421490222215652,-0.217597857117653,0.880339205265045,0.458424359560013 ,-0.261700868606567,0.849329054355621,0.421490222215652,-0.217597857117653,0.880339205265045,0.501314342021942 ,-0.180266559123993,0.846278846263886,0.540978610515594,-0.216916099190712,0.812582015991211,0.775663673877716 ,0.0339613817632198,0.630232095718384,0.743626773357391,-0.236951321363449,0.625198543071747,0.527478218078613 ,-0.385366201400757,0.757139086723328,0.702920734882355,-0.00120963365770876,0.711267173290253,0.314269214868546 ,-0.177054598927498,0.932677090167999,0.0854972749948502,-0.343144297599792,0.935383439064026,0.322372585535049 ,-0.0660212859511375,0.944307744503021,0.322372585535049,-0.0660212859511375,0.944307744503021,0.0854972749948502 ,-0.343144297599792,0.935383439064026,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.477409869432449 ,-0.0182194709777832,0.878491818904877,0.314269214868546,-0.177054598927498,0.932677090167999,0.322372585535049 ,-0.0660212859511375,0.944307744503021,0.508330583572388,0.166116118431091,0.844988405704498,0.430652797222137 ,0.0691945105791092,0.89986127614975,0.430652797222137,0.0691945105791092,0.89986127614975,0.508330583572388 ,0.166116118431091,0.844988405704498,0.499466627836227,0.169172704219818,0.849655032157898,0.536631107330322 ,0.258791983127594,0.803152441978455,0.668687582015991,0.158593982458115,0.726432919502258,0.477409869432449 ,-0.0182194709777832,0.878491818904877,0.542791187763214,-0.0487677082419395,0.838450610637665,0.702920734882355 ,-0.00120963365770876,0.711267173290253,0.85576856136322,-0.00803003925830126,0.517296552658081,0.922792911529541 ,0.0174659602344036,0.384900212287903,0.883507072925568,-0.0658736377954483,0.463762849569321,0.817228376865387 ,-0.0154423741623759,0.576107025146484,0.821834087371826,-0.135336369276047,0.55341911315918,0.852472126483917 ,-0.133455187082291,0.505451321601868,0.950795531272888,-0.131767466664314,0.280401825904846,0.939345419406891 ,-0.108932219445705,0.325213760137558,0.813478171825409,-0.273027837276459,0.513526141643524,0.91918009519577 ,-0.0705135017633438,0.387473553419113,0.961285889148712,-0.0557491593062878,0.269854545593262,0.887543320655823 ,-0.171314582228661,0.427689343690872,0.927076876163483,-0.29800683259964,0.227421119809151,0.926659166812897 ,-0.245477139949799,0.284681916236877,0.966324627399445,-0.156342566013336,0.204386278986931,0.960171759128571 ,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.926659166812897 ,-0.245477139949799,0.284681916236877,0.750554323196411,-0.229917243123055,0.619521021842957,0.809566378593445 ,-0.159671008586884,0.564895987510681,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.982208073139191 ,-0.177859634160995,-0.0602763295173645,0.915560901165009,-0.141839787364006,0.376337260007858,0.820341229438782 ,-0.113342881202698,0.560529828071594,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.988306105136871 ,-0.150656268000603,-0.0235306043177843,0.956220626831055,-0.152332276105881,0.249873846769333,0.915560901165009 ,-0.141839787364006,0.376337260007858,0.362627446651459,-0.180693462491035,0.914249002933502,0.570054233074188 ,-0.200027942657471,0.796885788440704,0.400608420372009,-0.480024576187134,0.780441761016846,0.11539563536644 ,-0.528798937797546,0.840865969657898,0.350974529981613,-0.540442049503326,0.764682471752167,0.560910940170288 ,-0.546258211135864,0.622077882289886,0.432139188051224,-0.378973364830017,0.818312227725983,0.461174815893173 ,-0.519026458263397,0.719673037528992,0.432139188051224,-0.378973364830017,0.818312227725983,0.416703939437866 ,-0.0255245417356491,0.908683836460114,0.56849592924118,-0.125116035342216,0.813116490840912,0.461174815893173 ,-0.519026458263397,0.719673037528992,0.0348379723727703,0.239972576498985,0.970154345035553,0.026632534340024 ,0.124120466411114,0.991909682750702,-0.147914990782738,0.17213037610054,0.973905682563782,0.00455546798184514 ,0.298394352197647,0.954431772232056,0.809566378593445,-0.159671008586884,0.564895987510681,0.750554323196411 ,-0.229917243123055,0.619521021842957,0.705349028110504,-0.217919707298279,0.674532234668732,0.634909212589264 ,-0.137729376554489,0.760211110115051,0.800201892852783,0.430362582206726,0.417690068483353,0.793976366519928 ,0.302302360534668,0.527460694313049,0.903869867324829,0.198627322912216,0.37890163064003,0.854240536689758,0.355053037405014 ,0.379750460386276,0.793774306774139,0.385858178138733,0.470144480466843,0.843018114566803,0.354378879070282 ,0.404643177986145,0.800201892852783,0.430362582206726,0.417690068483353,0.854240536689758,0.355053037405014 ,0.379750460386276,0.595219552516937,0.51872980594635,0.613704323768616,0.800201892852783,0.430362582206726,0.417690068483353 ,0.843018114566803,0.354378879070282,0.404643177986145,0.688724040985107,0.428849041461945,0.584591865539551 ,0.536214470863342,0.394264131784439,0.746344327926636,0.793976366519928,0.302302360534668,0.527460694313049 ,0.800201892852783,0.430362582206726,0.417690068483353,0.595219552516937,0.51872980594635,0.613704323768616,0.854240536689758 ,0.355053037405014,0.379750460386276,0.903869867324829,0.198627322912216,0.37890163064003,0.855352699756622,0.226547658443451 ,0.46588408946991,0.857260406017303,0.312566876411438,0.409153461456299,0.688724040985107,0.428849041461945,0.584591865539551 ,0.728551387786865,0.287864476442337,0.621568083763123,0.278584688901901,0.430597722530365,0.858473181724548 ,0.279262810945511,0.544022977352142,0.791234016418457,0.718716561794281,0.339281320571899,0.60690575838089,0.27374255657196 ,0.526692390441895,0.804773390293121,0.278584688901901,0.430597722530365,0.858473181724548,0.728551387786865 ,0.287864476442337,0.621568083763123,0.0571579374372959,0.555576980113983,0.829498171806335,0.0507387444376946 ,0.459851264953613,0.886545181274414,0.278584688901901,0.430597722530365,0.858473181724548,0.27374255657196,0.526692390441895 ,0.804773390293121,0.0581676289439201,0.571192860603333,0.818752288818359,0.279262810945511,0.544022977352142 ,0.791234016418457,0.278584688901901,0.430597722530365,0.858473181724548,0.0507387444376946,0.459851264953613 ,0.886545181274414,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221 ,0.931382119655609,0.332773357629776,-0.801452815532684,0.49692577123642,0.353568494319916,-0.776771426200867 ,0.521167457103729,0.346010982990265,0.0731605663895607,0.935373663902283,0.0857556685805321,0.213776871562004 ,0.973111212253571,0.237495303153992,-0.275904625654221,0.931382119655609,0.402090311050415,-0.284287929534912 ,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.0857556685805321,0.213776871562004 ,0.973111212253571,0.174916133284569,0.190565213561058,0.965965449810028,0.173318073153496,-0.274096310138702 ,0.945955634117126,0.332773357629776,-0.801452815532684,0.49692577123642,0.237495303153992,-0.275904625654221 ,0.931382119655609,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579 ,0.524562180042267,0.557120144367218,0.203072413802147,0.805219650268555,0.663587033748627,0.242647290229797 ,0.707654237747192,0.594232082366943,0.290724605321884,0.749911665916443,0.428730636835098,0.26745393872261,0.862935900688171 ,0.481910198926926,0.246677935123444,0.840780913829803,0.562969863414764,0.141692653298378,0.81424081325531,0.557120144367218 ,0.203072413802147,0.805219650268555,0.481910198926926,0.246677935123444,0.840780913829803,0.508710622787476 ,0.190386489033699,0.839622795581818,0.471029788255692,0.166954964399338,0.86617374420166,0.450006783008575,0.263622760772705 ,0.853227376937866,0.557120144367218,0.203072413802147,0.805219650268555,0.562969863414764,0.141692653298378 ,0.81424081325531,0.556747674942017,0.38243293762207,0.737412452697754,0.663587033748627,0.242647290229797,0.707654237747192 ,0.557120144367218,0.203072413802147,0.805219650268555,0.450006783008575,0.263622760772705,0.853227376937866 ,0.465027630329132,-0.875830411911011,-0.129113703966141,0.470402508974075,-0.871353209018707,-0.139517307281494 ,0.282156497240067,-0.915852665901184,-0.285659939050674,0.28289994597435,-0.924392461776733,-0.255863577127457 ,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.470402508974075,-0.871353209018707,-0.139517307281494 ,0.465027630329132,-0.875830411911011,-0.129113703966141,0.638466238975525,-0.769491136074066,0.0156274978071451 ,-0.0377323105931282,-0.656355738639832,0.753507435321808,0.0476435497403145,-0.676355302333832,0.73503303527832 ,0.101414501667023,-0.396623194217682,0.912362396717072,-0.0135245211422443,-0.380902349948883,0.924516320228577 ,0.0903236120939255,-0.645915448665619,0.758046746253967,0.226432472467422,-0.391454815864563,0.891903281211853 ,0.101414501667023,-0.396623194217682,0.912362396717072,0.0476435497403145,-0.676355302333832,0.73503303527832 ,0.315978825092316,0.0904445722699165,0.944445431232452,0.178787171840668,0.10878062993288,0.977855801582336 ,0.101414501667023,-0.396623194217682,0.912362396717072,0.226432472467422,-0.391454815864563,0.891903281211853 ,0.0226862858980894,0.138102903962135,0.990158021450043,-0.0135245211422443,-0.380902349948883,0.924516320228577 ,0.101414501667023,-0.396623194217682,0.912362396717072,0.178787171840668,0.10878062993288,0.977855801582336 ,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.984952390193939,-0.153410941362381,-0.0795853585004807 ,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.993429064750671,-0.113890402019024,0.0113009223714471 ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.979115843772888,-0.186871707439423,-0.0800699964165688 ,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.978873014450073,-0.188474208116531,-0.0792786628007889 ,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.984952390193939,-0.153410941362381,-0.0795853585004807 ,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.982208073139191,-0.177859634160995,-0.0602763295173645 ,0.698544383049011,-0.714900195598602,0.0308788027614355,0.600540995597839,-0.799374520778656,-0.0187329761683941 ,0.638466238975525,-0.769491136074066,0.0156274978071451,0.727549016475677,-0.679640352725983,0.0936024785041809 ,0.807879209518433,-0.580146849155426,0.103734038770199,0.698544383049011,-0.714900195598602,0.0308788027614355 ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.772367715835571,-0.599683940410614,0.209349811077118 ,0.744709670543671,0.422629773616791,0.516518652439117,0.524678170681,0.559116363525391,0.641951441764832,0.623485326766968 ,0.449957937002182,0.639377772808075,0.773433268070221,0.347118884325027,0.53038614988327,0.956220626831055,-0.152332276105881 ,0.249873846769333,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.993429064750671,-0.113890402019024 ,0.0113009223714471,0.976429760456085,-0.14936164021492,0.155807659029961,0.93977153301239,0.0100719593465328 ,0.341654866933823,0.947793483734131,-0.0109208915382624,0.318697780370712,0.949501037597656,-0.133338466286659 ,0.284022271633148,0.950774133205414,-0.180742517113686,0.25171560049057,0.94478839635849,-0.0280621573328972 ,0.326477229595184,0.93977153301239,0.0100719593465328,0.341654866933823,0.950774133205414,-0.180742517113686 ,0.25171560049057,0.949546575546265,-0.188553437590599,0.250617027282715,0.921219646930695,-0.0589233264327049 ,0.384554862976074,0.93503212928772,0.00599651364609599,0.354512244462967,0.93977153301239,0.0100719593465328 ,0.341654866933823,0.94478839635849,-0.0280621573328972,0.326477229595184,0.961935639381409,0.00657567568123341 ,0.273196935653687,0.947793483734131,-0.0109208915382624,0.318697780370712,0.93977153301239,0.0100719593465328 ,0.341654866933823,0.93503212928772,0.00599651364609599,0.354512244462967,0.934174954891205,-0.332788705825806 ,0.128719761967659,0.916550815105438,-0.369929283857346,0.151943743228912,0.950774133205414,-0.180742517113686 ,0.25171560049057,0.949501037597656,-0.133338466286659,0.284022271633148,0.900704562664032,-0.383264392614365 ,0.204547420144081,0.949546575546265,-0.188553437590599,0.250617027282715,0.950774133205414,-0.180742517113686 ,0.25171560049057,0.916550815105438,-0.369929283857346,0.151943743228912,0.346010982990265,0.0731605663895607 ,0.935373663902283,0.316976845264435,0.303443849086761,0.898580849170685,0.109994232654572,0.335926622152328 ,0.935443520545959,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328 ,0.935443520545959,0.316976845264435,0.303443849086761,0.898580849170685,0.37644562125206,0.38054347038269,0.844674706459045 ,0.33416548371315,0.26105335354805,0.905640423297882,0.410660326480865,0.0589907094836235,0.909878134727478,0.280919551849365 ,0.197001457214355,0.939294755458832,0.109994232654572,0.335926622152328,0.935443520545959,0.33416548371315,0.26105335354805 ,0.905640423297882,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328 ,0.935443520545959,0.280919551849365,0.197001457214355,0.939294755458832,0.174916133284569,0.190565213561058 ,0.965965449810028,0.174435555934906,-0.932725489139557,-0.315587401390076,0.0540894381701946,-0.932692110538483 ,-0.35659471154213,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.200176298618317,-0.953467607498169 ,-0.225452929735184,0.28289994597435,-0.924392461776733,-0.255863577127457,0.174435555934906,-0.932725489139557 ,-0.315587401390076,0.200176298618317,-0.953467607498169,-0.225452929735184,0.304112553596497,-0.921620965003967 ,-0.241102367639542,0.174435555934906,-0.932725489139557,-0.315587401390076,0.28289994597435,-0.924392461776733 ,-0.255863577127457,0.282156497240067,-0.915852665901184,-0.285659939050674,0.168268576264381,-0.926923274993896 ,-0.335408568382263,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.174435555934906,-0.932725489139557 ,-0.315587401390076,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0587443448603153,-0.922947645187378 ,-0.380416542291641,0.591701328754425,-0.0445454604923725,0.804925620555878,0.56849592924118,-0.125116035342216 ,0.813116490840912,0.44965198636055,0.140096634626389,0.882148504257202,0.583943843841553,0.131935343146324,0.801001012325287 ,0.414541780948639,0.400993496179581,0.816920638084412,0.611575484275818,0.314111411571503,0.726160764694214 ,0.610058009624481,0.18056558072567,0.771508455276489,0.491490423679352,0.244152218103409,0.835958659648895,0.637141883373261 ,-0.082910381257534,0.766274154186249,0.602697968482971,-0.102753959596157,0.791325986385345,0.830796539783478 ,-0.141607835888863,0.538260519504547,0.846625864505768,-0.12819692492485,0.516517341136932,0.602697968482971 ,-0.102753959596157,0.791325986385345,0.542096614837646,-0.0831166654825211,0.836195468902588,0.797767400741577 ,-0.104994267225266,0.593753576278687,0.830796539783478,-0.141607835888863,0.538260519504547,0.851511597633362 ,-0.5011847615242,0.154083982110024,0.664332985877991,-0.312286198139191,0.679072141647339,0.642606198787689 ,-0.0799093768000603,0.762018263339996,0.733202934265137,-0.122967794537544,0.668799161911011,0.664332985877991 ,-0.312286198139191,0.679072141647339,0.591701328754425,-0.0445454604923725,0.804925620555878,0.568371534347534 ,0.0187626089900732,0.822558045387268,0.642606198787689,-0.0799093768000603,0.762018263339996,0.329291462898254 ,-0.460140645503998,0.824522733688354,0.437306433916092,-0.371932566165924,0.818797469139099,0.533053755760193 ,0.0411353260278702,0.845080852508545,0.351316899061203,-0.0729207322001457,0.933412551879883,0.292688071727753 ,-0.580336809158325,0.759962379932404,0.329291462898254,-0.460140645503998,0.824522733688354,0.351316899061203 ,-0.0729207322001457,0.933412551879883,0.335490047931671,-0.171642184257507,0.926275014877319,0.490798503160477 ,-0.859692454338074,-0.141582772135735,0.523316979408264,-0.825681805610657,-0.210686638951302,0.671372294425964 ,-0.724817991256714,-0.15459018945694,0.645513415336609,-0.755210697650909,-0.113882429897785,0.537862658500671 ,-0.839294493198395,-0.0793002098798752,0.499172002077103,-0.857490539550781,-0.124648600816727,0.490798503160477 ,-0.859692454338074,-0.141582772135735,0.645513415336609,-0.755210697650909,-0.113882429897785,0.642173051834106 ,-0.76616907119751,-0.0244695600122213,0.630890548229218,-0.774750173091888,0.0417049825191498,0.490798503160477 ,-0.859692454338074,-0.141582772135735,0.501666784286499,-0.849441289901733,-0.163646027445793,0.435357719659805 ,-0.872423410415649,-0.222128495573998,0.490798503160477,-0.859692454338074,-0.141582772135735,0.499172002077103 ,-0.857490539550781,-0.124648600816727,0.501666784286499,-0.849441289901733,-0.163646027445793,0.630890548229218 ,-0.774750173091888,0.0417049825191498,0.523316979408264,-0.825681805610657,-0.210686638951302,0.490798503160477 ,-0.859692454338074,-0.141582772135735,0.965503036975861,0.206421509385109,0.158726423978806,0.967272758483887 ,0.0499838180840015,0.248767033219337,0.980852127075195,0.00218713283538818,0.194741636514664,0.96669465303421 ,0.168093785643578,0.192991986870766,0.980899035930634,0.0846881344914436,0.175114318728447,0.975037813186646 ,0.14565335214138,0.167589843273163,0.965288519859314,0.151292905211449,0.212904900312424,0.965503036975861,0.206421509385109 ,0.158726423978806,0.980899035930634,0.0846881344914436,0.175114318728447,0.974559843540192,0.0402764715254307 ,0.220478907227516,0.926979184150696,-0.0986248403787613,0.36191537976265,0.967272758483887,0.0499838180840015 ,0.248767033219337,0.965503036975861,0.206421509385109,0.158726423978806,0.965288519859314,0.151292905211449 ,0.212904900312424,0.945337653160095,-0.174788698554039,0.275292009115219,0.947748720645905,-0.180222257971764 ,0.263234436511993,0.936089217662811,-0.214836105704308,0.278536230325699,0.941718637943268,-0.180898189544678 ,0.283622801303864,0.947748720645905,-0.180222257971764,0.263234436511993,0.96362441778183,-0.210319370031357 ,0.16490513086319,0.949846565723419,-0.197867274284363,0.242157250642776,0.936089217662811,-0.214836105704308 ,0.278536230325699,0.9190753698349,-0.11298330873251,0.377538323402405,0.935290277004242,-0.181792959570885,0.303617179393768 ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.909473538398743,-0.0684049502015114,0.410095930099487 ,0.949846565723419,-0.197867274284363,0.242157250642776,0.964770019054413,-0.0907266810536385,0.246956452727318 ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.935290277004242,-0.181792959570885,0.303617179393768 ,0.961935639381409,0.00657567568123341,0.273196935653687,0.93503212928772,0.00599651364609599,0.354512244462967 ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.964770019054413,-0.0907266810536385,0.246956452727318 ,0.921219646930695,-0.0589233264327049,0.384554862976074,0.909473538398743,-0.0684049502015114,0.410095930099487 ,0.937723875045776,-0.0835999995470047,0.337171912193298,0.93503212928772,0.00599651364609599,0.354512244462967 ,0.684517562389374,-0.439017295837402,0.581978976726532,0.689838171005249,-0.617681860923767,0.377614080905914 ,0.657656788825989,-0.727221310138702,0.196562394499779,0.742792665958405,-0.550313711166382,0.381331622600555 ,0.689838171005249,-0.617681860923767,0.377614080905914,0.693672001361847,-0.686315536499023,0.218609541654587 ,0.639384806156158,-0.761013865470886,0.109749406576157,0.657656788825989,-0.727221310138702,0.196562394499779 ,0.642289221286774,0.115071445703506,0.757775127887726,0.698984086513519,0.246289730072021,0.671388566493988 ,0.450006783008575,0.263622760772705,0.853227376937866,0.471029788255692,0.166954964399338,0.86617374420166,0.698984086513519 ,0.246289730072021,0.671388566493988,0.720846891403198,0.393656641244888,0.570450901985168,0.556747674942017 ,0.38243293762207,0.737412452697754,0.450006783008575,0.263622760772705,0.853227376937866,0.570054233074188,-0.200027942657471 ,0.796885788440704,0.683284997940063,0.154697299003601,0.713575720787048,0.702580511569977,0.00276018492877483 ,0.711598932743073,0.681784629821777,-0.285219341516495,0.673661351203918,0.550090253353119,-0.357467710971832 ,0.754730105400085,0.719567954540253,-0.322717130184174,0.614878535270691,0.765106797218323,-0.350072890520096 ,0.540426254272461,0.613220632076263,-0.373373091220856,0.696098387241364,0.681784629821777,-0.285219341516495 ,0.673661351203918,0.702580511569977,0.00276018492877483,0.711598932743073,0.550090253353119,-0.357467710971832 ,0.754730105400085,0.629800915718079,-0.358788877725601,0.68892765045166,0.874416053295136,-0.00546242296695709 ,0.485146045684814,0.908188223838806,0.15894940495491,0.387206882238388,0.885035216808319,0.393218964338303,0.249181613326073 ,0.854046881198883,0.485713124275208,0.186243653297424,0.890166699886322,0.437690794467926,-0.12660938501358 ,0.163330301642418,0.241669088602066,0.956514120101929,0.0931223928928375,0.201938465237617,0.97496110200882 ,0.16256257891655,0.269552499055862,0.949165344238281,0.245724827051163,0.276487857103348,0.929071426391602,0.0931223928928375 ,0.201938465237617,0.97496110200882,0.0272070206701756,0.178279355168343,0.983603715896606,0.0426242314279079 ,0.260108649730682,0.964638113975525,0.16256257891655,0.269552499055862,0.949165344238281,0.584166944026947,-0.151799350976944 ,0.797311663627625,0.618419706821442,-0.127026095986366,0.775513648986816,0.414358675479889,-0.126704558730125 ,0.901250720024109,0.402891218662262,-0.177310451865196,0.897908508777618,0.567721784114838,-0.411755472421646 ,0.712845981121063,0.387449771165848,-0.245748713612556,0.888532638549805,0.414358675479889,-0.126704558730125 ,0.901250720024109,0.618419706821442,-0.127026095986366,0.775513648986816,0.690909028053284,-0.334549605846405 ,0.640875399112701,0.0780740827322006,-0.57033497095108,0.817693412303925,0.047360323369503,-0.552981853485107 ,0.831846177577972,0.0903236120939255,-0.645915448665619,0.758046746253967,0.0476435497403145,-0.676355302333832 ,0.73503303527832,0.0780740827322006,-0.57033497095108,0.817693412303925,0.0476435497403145,-0.676355302333832 ,0.73503303527832,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0301125477999449,-0.572418868541718 ,0.819408237934113,0.630890548229218,-0.774750173091888,0.0417049825191498,0.435357719659805,-0.872423410415649 ,-0.222128495573998,0.563636422157288,-0.823141872882843,0.0689310654997826,0.623485326766968,0.449957937002182 ,0.639377772808075,0.524678170681,0.559116363525391,0.641951441764832,0.497093498706818,0.456073582172394,0.738169968128204 ,0.226432472467422,-0.391454815864563,0.891903281211853,0.0903236120939255,-0.645915448665619,0.758046746253967 ,0.378649204969406,-0.51500403881073,0.769022524356842,0.488678455352783,-0.257274806499481,0.833668410778046 ,0.226432472467422,-0.391454815864563,0.891903281211853,0.488678455352783,-0.257274806499481,0.833668410778046 ,0.558381021022797,0.167118594050407,0.812577426433563,0.315978825092316,0.0904445722699165,0.944445431232452 ,0.70995169878006,-0.557043075561523,0.430896311998367,0.767249822616577,-0.595458924770355,0.23823593556881 ,0.868513345718384,-0.371388286352158,0.328260958194733,0.821784615516663,-0.261638671159744,0.506177127361298 ,0.868513345718384,-0.371388286352158,0.328260958194733,0.883809387683868,-0.290479838848114,0.366745710372925 ,0.792236804962158,-0.0960670188069344,0.602604329586029,0.821784615516663,-0.261638671159744,0.506177127361298 ,0.218448147177696,-0.859921038150787,0.461320102214813,0.423061966896057,-0.638191282749176,0.643218815326691 ,0.599736154079437,-0.429048538208008,0.675450921058655,0.462026834487915,-0.814152240753174,0.351692080497742 ,0.599736154079437,-0.429048538208008,0.675450921058655,0.56849592924118,-0.125116035342216,0.813116490840912 ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.599736154079437,-0.429048538208008,0.675450921058655 ,0.423061966896057,-0.638191282749176,0.643218815326691,0.56849592924118,-0.125116035342216,0.813116490840912 ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.664332985877991,-0.312286198139191,0.679072141647339 ,0.599736154079437,-0.429048538208008,0.675450921058655,0.851511597633362,-0.5011847615242,0.154083982110024 ,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655 ,0.664332985877991,-0.312286198139191,0.679072141647339,0.934174954891205,-0.332788705825806,0.128719761967659 ,0.953670024871826,-0.218769177794456,0.206527322530746,0.945006668567657,-0.308922052383423,0.107375629246235 ,0.94329446554184,-0.325108468532562,0.0670826062560081,0.938213586807251,-0.216931000351906,0.269622415304184 ,0.935753345489502,-0.270965844392776,0.225705921649933,0.945006668567657,-0.308922052383423,0.107375629246235 ,0.953670024871826,-0.218769177794456,0.206527322530746,0.971762239933014,-0.143596902489662,0.187237858772278 ,0.988696813583374,-0.11085943877697,0.10093978792429,0.945006668567657,-0.308922052383423,0.107375629246235 ,0.935753345489502,-0.270965844392776,0.225705921649933,0.987058341503143,-0.0681737512350082,0.145148620009422 ,0.94329446554184,-0.325108468532562,0.0670826062560081,0.945006668567657,-0.308922052383423,0.107375629246235 ,0.988696813583374,-0.11085943877697,0.10093978792429,0.623457431793213,0.0676653161644936,0.778923749923706 ,0.565106153488159,0.017743531614542,0.824827373027802,0.601098597049713,0.0911194980144501,0.793963313102722 ,0.655191659927368,0.0146637577563524,0.755320370197296,0.623457431793213,0.0676653161644936,0.778923749923706 ,0.655191659927368,0.0146637577563524,0.755320370197296,0.633589863777161,-0.0252969916909933,0.773255407810211 ,0.61975085735321,-0.35027813911438,0.702292025089264,0.690708041191101,-0.0477886833250523,0.721552908420563 ,0.877371370792389,-0.100216217339039,0.469229310750961,0.794963598251343,-0.434218406677246,0.423659265041351 ,0.794963598251343,-0.434218406677246,0.423659265041351,0.877371370792389,-0.100216217339039,0.469229310750961 ,0.894858956336975,-0.0870964974164963,0.437768936157227,0.881620466709137,-0.332029432058334,0.335412949323654 ,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0587443448603153,-0.922947645187378,-0.380416542291641 ,0.168268576264381,-0.926923274993896,-0.335408568382263,0.164555922150612,-0.956649422645569,-0.240298211574554 ,0.164555922150612,-0.956649422645569,-0.240298211574554,0.168268576264381,-0.926923274993896,-0.335408568382263 ,0.282156497240067,-0.915852665901184,-0.285659939050674,0.283746033906937,-0.948122382164001,-0.143360316753387 ,0.44691988825798,-0.179234355688095,0.876434624195099,0.529802799224854,-0.195633217692375,0.825249433517456 ,0.359973400831223,-0.258122891187668,0.896544337272644,0.312136799097061,-0.241864830255508,0.918733894824982 ,0.529802799224854,-0.195633217692375,0.825249433517456,0.584166944026947,-0.151799350976944,0.797311663627625 ,0.402891218662262,-0.177310451865196,0.897908508777618,0.359973400831223,-0.258122891187668,0.896544337272644 ,0.938213586807251,-0.216931000351906,0.269622415304184,0.953670024871826,-0.218769177794456,0.206527322530746 ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.979475617408752,-0.109372921288013,0.169307827949524 ,0.934174954891205,-0.332788705825806,0.128719761967659,0.949501037597656,-0.133338466286659,0.284022271633148 ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.953670024871826,-0.218769177794456,0.206527322530746 ,0.965523362159729,-0.0906704962253571,0.24401530623436,0.949501037597656,-0.133338466286659,0.284022271633148 ,0.947793483734131,-0.0109208915382624,0.318697780370712,0.987097263336182,-0.0312144737690687,0.157049849629402 ,0.979475617408752,-0.109372921288013,0.169307827949524,0.965523362159729,-0.0906704962253571,0.24401530623436 ,0.987097263336182,-0.0312144737690687,0.157049849629402,0.995871722698212,-0.0808055028319359,0.041352104395628 ,0.55342048406601,0.140735372900963,0.820925891399384,0.562969863414764,0.141692653298378,0.81424081325531,0.508710622787476 ,0.190386489033699,0.839622795581818,0.503296196460724,0.0546823143959045,0.862382054328918,0.498867928981781 ,0.236602708697319,0.833756506443024,0.55342048406601,0.140735372900963,0.820925891399384,0.33416548371315,0.26105335354805 ,0.905640423297882,0.37644562125206,0.38054347038269,0.844674706459045,0.630171060562134,-0.220097869634628,0.744608163833618 ,0.523068964481354,-0.400331109762192,0.752418637275696,0.613220632076263,-0.373373091220856,0.696098387241364 ,0.662703216075897,-0.235535204410553,0.710878074169159,0.270446568727493,-0.724654376506805,0.633825421333313 ,0.586388051509857,-0.415063470602036,0.695608615875244,0.406590580940247,-0.393400549888611,0.824572682380676 ,0.0997758805751801,-0.76704877614975,0.633782982826233,0.437306433916092,-0.371932566165924,0.818797469139099 ,0.406590580940247,-0.393400549888611,0.824572682380676,0.586388051509857,-0.415063470602036,0.695608615875244 ,0.640114009380341,-0.360243141651154,0.678585946559906,0.358242690563202,-0.369526594877243,0.857386887073517 ,0.738801121711731,-0.260166734457016,0.6216801404953,0.717148721218109,-0.158668875694275,0.678617656230927 ,0.359977900981903,-0.319483041763306,0.876553773880005,0.219657093286514,0.398345082998276,0.890545904636383 ,0.305438488721848,0.421940237283707,0.853623926639557,0.395363062620163,0.562560498714447,0.726094901561737 ,0.340864300727844,0.524212896823883,0.780392467975616,0.370492875576019,0.369821041822433,0.852037250995636 ,0.416927576065063,0.413195610046387,0.809592962265015,0.305438488721848,0.421940237283707,0.853623926639557 ,0.245724827051163,0.276487857103348,0.929071426391602,0.278009802103043,0.308251172304153,0.909775674343109 ,0.305438488721848,0.421940237283707,0.853623926639557,0.416927576065063,0.413195610046387,0.809592962265015 ,0.497093498706818,0.456073582172394,0.738169968128204,0.524678170681,0.559116363525391,0.641951441764832,0.395363062620163 ,0.562560498714447,0.726094901561737,0.773433268070221,0.347118884325027,0.53038614988327,0.623485326766968,0.449957937002182 ,0.639377772808075,0.649705529212952,0.341418325901031,0.679202735424042,0.750506460666656,0.343903452157974 ,0.564331829547882,0.649705529212952,0.341418325901031,0.679202735424042,0.556747674942017,0.38243293762207,0.737412452697754 ,0.720846891403198,0.393656641244888,0.570450901985168,0.750506460666656,0.343903452157974,0.564331829547882 ,0.591701328754425,-0.0445454604923725,0.804925620555878,0.583943843841553,0.131935343146324,0.801001012325287 ,0.601098597049713,0.0911194980144501,0.793963313102722,0.568371534347534,0.0187626089900732,0.822558045387268 ,0.335370063781738,-0.00474565383046865,0.942074537277222,0.286056965589523,0.444956660270691,0.848637104034424 ,0.65963888168335,0.347626268863678,0.666357636451721,0.690708041191101,-0.0477886833250523,0.721552908420563 ,0.335370063781738,-0.00474565383046865,0.942074537277222,0.017973817884922,0.0102047342807055,0.999786376953125 ,0.0513622872531414,0.468802571296692,0.881808400154114,0.286056965589523,0.444956660270691,0.848637104034424 ,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.640791594982147,-0.766526699066162,0.0426960773766041 ,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.430644094944,-0.871794462203979,-0.233495324850082 ,0.611575484275818,0.314111411571503,0.726160764694214,0.800925850868225,0.226523146033287,0.554260790348053 ,0.826946556568146,0.0731306597590446,0.557504594326019,0.610058009624481,0.18056558072567,0.771508455276489 ,0.800925850868225,0.226523146033287,0.554260790348053,0.611575484275818,0.314111411571503,0.726160764694214 ,0.512064158916473,0.485980182886124,0.708246827125549,0.535205781459808,0.472302228212357,0.700346648693085 ,0.783647418022156,0.339152276515961,0.520454108715057,0.813101530075073,0.281051158905029,0.509780466556549 ,0.834977984428406,0.275511413812637,0.47634568810463,0.79509973526001,0.317423015832901,0.516777575016022,0.819765686988831 ,0.312743216753006,0.479766517877579,0.773433268070221,0.347118884325027,0.53038614988327,0.821655750274658,0.296962469816208 ,0.486513197422028,0.855628609657288,0.255288362503052,0.450252771377563,0.85977029800415,0.296936422586441,0.415480256080627 ,0.922278165817261,0.183078601956367,0.340419232845306,0.855628609657288,0.255288362503052,0.450252771377563 ,0.821655750274658,0.296962469816208,0.486513197422028,0.966420710086823,0.0570991300046444,0.250540882349014 ,0.930171310901642,0.112328357994556,0.34951913356781,0.855628609657288,0.255288362503052,0.450252771377563,0.922278165817261 ,0.183078601956367,0.340419232845306,0.270428031682968,-0.84670215845108,0.458218395709991,0.387449771165848 ,-0.245748713612556,0.888532638549805,0.567721784114838,-0.411755472421646,0.712845981121063,0.454382866621017 ,-0.848002672195435,0.272814393043518,0.563636422157288,-0.823141872882843,0.0689310654997826,0.454382866621017 ,-0.848002672195435,0.272814393043518,0.567721784114838,-0.411755472421646,0.712845981121063,0.690909028053284 ,-0.334549605846405,0.640875399112701,0.766620635986328,-0.390746057033539,-0.509519696235657,0.719214975833893 ,-0.430595219135284,-0.545268356800079,0.829468905925751,-0.13685368001461,-0.5415278673172,0.946312725543976 ,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.719214975833893 ,-0.430595219135284,-0.545268356800079,0.940188527107239,-0.340047240257263,0.0203306917101145,0.959231495857239 ,-0.07520642131567,-0.272431552410126,0.847399115562439,-0.142815440893173,-0.511388719081879,0.829468905925751 ,-0.13685368001461,-0.5415278673172,0.959231495857239,-0.07520642131567,-0.272431552410126,0.899878442287445 ,-0.160217583179474,-0.405646592378616,0.976300895214081,-0.175593838095665,-0.126504495739937,0.946312725543976 ,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.847399115562439 ,-0.142815440893173,-0.511388719081879,0.824678778648376,0.331173717975616,0.458507210016251,0.855628609657288 ,0.255288362503052,0.450252771377563,0.930171310901642,0.112328357994556,0.34951913356781,0.908929646015167,0.18951641023159 ,0.371389836072922,0.835932672023773,0.318577855825424,0.446905732154846,0.824678778648376,0.331173717975616 ,0.458507210016251,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027 ,0.53038614988327,0.824678778648376,0.331173717975616,0.458507210016251,0.835932672023773,0.318577855825424,0.446905732154846 ,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.855628609657288 ,0.255288362503052,0.450252771377563,0.824678778648376,0.331173717975616,0.458507210016251,0.267092674970627 ,-0.484114617109299,0.833243370056152,0.406590580940247,-0.393400549888611,0.824572682380676,0.437306433916092 ,-0.371932566165924,0.818797469139099,0.329291462898254,-0.460140645503998,0.824522733688354,0.640791594982147 ,-0.766526699066162,0.0426960773766041,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.65738570690155 ,-0.752218425273895,0.0448495484888554,0.705848097801209,-0.694441199302673,0.13974928855896,0.65738570690155 ,-0.752218425273895,0.0448495484888554,0.639384806156158,-0.761013865470886,0.109749406576157,0.693672001361847 ,-0.686315536499023,0.218609541654587,0.705848097801209,-0.694441199302673,0.13974928855896,0.985209882259369 ,0.0516813509166241,0.163372397422791,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453 ,0.0208978541195393,0.260981827974319,0.962778627872467,0.0666173547506332,0.261953175067902,0.870097935199738 ,0.102833516895771,0.482032060623169,0.826946556568146,0.0731306597590446,0.557504594326019,0.965117514133453 ,0.0208978541195393,0.260981827974319,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453 ,0.0208978541195393,0.260981827974319,0.826946556568146,0.0731306597590446,0.557504594326019,0.800925850868225 ,0.226523146033287,0.554260790348053,0.933462917804718,0.164250507950783,0.318855404853821,0.920523226261139 ,0.14191623032093,0.36400106549263,0.962778627872467,0.0666173547506332,0.261953175067902,0.965117514133453,0.0208978541195393 ,0.260981827974319,0.933462917804718,0.164250507950783,0.318855404853821,0.966257035732269,0.139943510293961 ,0.216247826814651,0.976429760456085,-0.14936164021492,0.155807659029961,0.993429064750671,-0.113890402019024 ,0.0113009223714471,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.981637835502625,-0.188382476568222 ,0.0299864616245031,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.858178198337555,-0.416941344738007 ,-0.299483120441437,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.981637835502625,-0.188382476568222 ,0.0299864616245031,0.54023802280426,-0.148879259824753,0.828237771987915,0.507363021373749,-0.115291275084019 ,0.853985190391541,0.124305054545403,-0.308796167373657,0.942970395088196,0.189583629369736,-0.286395132541656 ,0.939167618751526,0.94987964630127,-0.0038351418916136,0.312592297792435,0.972302615642548,0.043654702603817 ,0.229612305760384,0.964095413684845,-0.0113426633179188,0.265313804149628,0.956782042980194,0.0500060208141804 ,0.286474347114563,0.972302615642548,0.043654702603817,0.229612305760384,0.966708958148956,-0.002308584516868 ,0.255868047475815,0.945727825164795,-0.098081186413765,0.309804677963257,0.964095413684845,-0.0113426633179188 ,0.265313804149628,0.94987964630127,-0.0038351418916136,0.312592297792435,0.956782042980194,0.0500060208141804 ,0.286474347114563,0.937608182430267,0.0460146591067314,0.344635367393494,0.155652940273285,-0.987067878246307 ,0.0383299365639687,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.386847853660584,-0.767014622688293 ,0.511895835399628,0.191021859645844,-0.901510059833527,0.388317227363586,0.155652940273285,-0.987067878246307 ,0.0383299365639687,0.191021859645844,-0.901510059833527,0.388317227363586,0.255019038915634,-0.916801631450653 ,0.307311117649078,0.279211044311523,-0.955691933631897,0.093242421746254,0.17069847881794,-0.387216597795486 ,0.906049311161041,0.204357400536537,-0.124537408351898,0.97094202041626,0.197210118174553,0.0128493588417768 ,0.980277061462402,0.848142683506012,0.254542678594589,0.464609563350677,0.65963888168335,0.347626268863678,0.666357636451721 ,0.667004644870758,0.442110657691956,0.59970235824585,0.825178265571594,0.267818719148636,0.497346937656403,0.801001727581024 ,0.319669455289841,0.506169617176056,0.848142683506012,0.254542678594589,0.464609563350677,0.801001727581024 ,0.319669455289841,0.506169617176056,0.79509973526001,0.317423015832901,0.516777575016022,0.834977984428406,0.275511413812637 ,0.47634568810463,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.136760428547859,-0.195085763931274 ,0.971204459667206,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.0292664598673582,0.127957031130791 ,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.136760428547859,-0.195085763931274 ,0.971204459667206,0.0031939682085067,-0.177682086825371,0.984082758426666,0.0314028672873974,0.188204348087311 ,0.981627702713013,0.382985174655914,-0.340148031711578,0.858849048614502,0.514656662940979,-0.124439902603626 ,0.848317861557007,0.633589863777161,-0.0252969916909933,0.773255407810211,0.588271081447601,-0.259690821170807 ,0.765831470489502,0.382985174655914,-0.340148031711578,0.858849048614502,0.588271081447601,-0.259690821170807 ,0.765831470489502,0.525104641914368,-0.419060587882996,0.740711390972137,0.121470481157303,-0.391699403524399 ,0.912039756774902,0.173163160681725,-0.359727561473846,0.916848182678223,0.382985174655914,-0.340148031711578 ,0.858849048614502,0.121470481157303,-0.391699403524399,0.912039756774902,0.164051368832588,-0.273042142391205 ,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.514656662940979,-0.124439902603626 ,0.848317861557007,0.382985174655914,-0.340148031711578,0.858849048614502,0.173163160681725,-0.359727561473846 ,0.916848182678223,0.416703939437866,-0.0255245417356491,0.908683836460114,0.254473268985748,-0.0765668898820877 ,0.964044034481049,0.182319968938828,0.114501133561134,0.976549506187439,0.44965198636055,0.140096634626389,0.882148504257202 ,0.523316979408264,-0.825681805610657,-0.210686638951302,0.626487195491791,-0.719823837280273,-0.298943966627121 ,0.720593869686127,-0.637408852577209,-0.272863417863846,0.671372294425964,-0.724817991256714,-0.15459018945694 ,0.630890548229218,-0.774750173091888,0.0417049825191498,0.755779623985291,-0.654822111129761,0.00226114504039288 ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.523316979408264,-0.825681805610657,-0.210686638951302 ,0.840808868408203,-0.369773417711258,0.395358175039291,0.756419658660889,-0.554076313972473,-0.347604215145111 ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.755779623985291,-0.654822111129761,0.00226114504039288 ,0.626487195491791,-0.719823837280273,-0.298943966627121,0.756419658660889,-0.554076313972473,-0.347604215145111 ,0.777718842029572,-0.48187255859375,-0.403673440217972,0.720593869686127,-0.637408852577209,-0.272863417863846 ,0.562851548194885,-0.792488932609558,0.23486053943634,0.881620466709137,-0.332029432058334,0.335412949323654 ,0.738801121711731,-0.260166734457016,0.6216801404953,0.386847853660584,-0.767014622688293,0.511895835399628 ,0.618419706821442,-0.127026095986366,0.775513648986816,0.584166944026947,-0.151799350976944,0.797311663627625 ,0.637141883373261,-0.082910381257534,0.766274154186249,0.649656236171722,-0.0531920231878757,0.758364915847778 ,0.690909028053284,-0.334549605846405,0.640875399112701,0.618419706821442,-0.127026095986366,0.775513648986816 ,0.649656236171722,-0.0531920231878757,0.758364915847778,0.707773089408875,-0.177667543292046,0.683733463287354 ,0.430644094944,-0.871794462203979,-0.233495324850082,0.304112553596497,-0.921620965003967,-0.241102367639542 ,0.563636422157288,-0.823141872882843,0.0689310654997826,0.435357719659805,-0.872423410415649,-0.222128495573998 ,0.529802799224854,-0.195633217692375,0.825249433517456,0.44691988825798,-0.179234355688095,0.876434624195099 ,0.542096614837646,-0.0831166654825211,0.836195468902588,0.602697968482971,-0.102753959596157,0.791325986385345 ,0.584166944026947,-0.151799350976944,0.797311663627625,0.529802799224854,-0.195633217692375,0.825249433517456 ,0.602697968482971,-0.102753959596157,0.791325986385345,0.637141883373261,-0.082910381257534,0.766274154186249 ,0.0341533571481705,0.664829432964325,0.746214032173157,0.102224595844746,0.498050421476364,0.861101567745209 ,0.31933718919754,0.337111681699753,0.885652005672455,0.220439016819,0.602273344993591,0.767250597476959,-0.407276064157486 ,0.876896381378174,0.255301624536514,-0.38366886973381,0.80352109670639,0.455139607191086,0.0341533571481705 ,0.664829432964325,0.746214032173157,0.220439016819,0.602273344993591,0.767250597476959,0.164532527327538,0.859674274921417 ,0.483620911836624,0.534866094589233,0.53300929069519,0.655606091022491,0.102224595844746,0.498050421476364,0.861101567745209 ,0.0341533571481705,0.664829432964325,0.746214032173157,-0.38366886973381,0.80352109670639,0.455139607191086 ,0.765106797218323,-0.350072890520096,0.540426254272461,0.75313264131546,-0.288527101278305,0.591221868991852 ,0.662703216075897,-0.235535204410553,0.710878074169159,0.613220632076263,-0.373373091220856,0.696098387241364 ,0.35059866309166,-0.137498125433922,0.926377296447754,0.194007128477097,-0.0432056449353695,0.98004823923111 ,0.313594281673431,0.139182701706886,0.939301192760468,0.46117314696312,-0.0281441453844309,0.886863708496094 ,0.44691988825798,-0.179234355688095,0.876434624195099,0.35059866309166,-0.137498125433922,0.926377296447754 ,0.46117314696312,-0.0281441453844309,0.886863708496094,0.542096614837646,-0.0831166654825211,0.836195468902588 ,0.563636422157288,-0.823141872882843,0.0689310654997826,0.304112553596497,-0.921620965003967,-0.241102367639542 ,0.200176298618317,-0.953467607498169,-0.225452929735184,0.454382866621017,-0.848002672195435,0.272814393043518 ,0.200176298618317,-0.953467607498169,-0.225452929735184,0.0610353648662567,-0.966653764247894,-0.248707070946693 ,0.270428031682968,-0.84670215845108,0.458218395709991,0.454382866621017,-0.848002672195435,0.272814393043518 ,0.327757924795151,-0.912954866886139,-0.243080645799637,0.304112553596497,-0.921620965003967,-0.241102367639542 ,0.430644094944,-0.871794462203979,-0.233495324850082,0.640791594982147,-0.766526699066162,0.0426960773766041 ,0.638466238975525,-0.769491136074066,0.0156274978071451,0.465027630329132,-0.875830411911011,-0.129113703966141 ,0.494663387537003,-0.866621494293213,-0.0653853639960289,-0.0349236838519573,-0.777106523513794,0.62839937210083 ,0.176858365535736,-0.897578120231628,0.403824985027313,-0.021647073328495,-0.960853159427643,0.276211261749268 ,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.623457431793213,0.0676653161644936,0.778923749923706 ,0.574505984783173,-0.027739129960537,0.818030178546906,0.535101175308228,-0.00626787729561329,0.844764709472656 ,0.565106153488159,0.017743531614542,0.824827373027802,0.514656662940979,-0.124439902603626,0.848317861557007 ,0.574505984783173,-0.027739129960537,0.818030178546906,0.623457431793213,0.0676653161644936,0.778923749923706 ,0.633589863777161,-0.0252969916909933,0.773255407810211,0.574505984783173,-0.027739129960537,0.818030178546906 ,0.514656662940979,-0.124439902603626,0.848317861557007,0.443824082612991,-0.204101487994194,0.872561037540436 ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.633136808872223,-0.0669011846184731,0.771143317222595 ,0.535101175308228,-0.00626787729561329,0.844764709472656,0.574505984783173,-0.027739129960537,0.818030178546906 ,0.633136808872223,-0.0669011846184731,0.771143317222595,0.578185617923737,-0.0845057815313339,0.811517179012299 ,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.00247630476951599,-0.186591759324074,0.982434391975403 ,0.288086891174316,-0.211062774062157,0.934054851531982,0.312136799097061,-0.241864830255508,0.918733894824982 ,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.000449120096163824,-0.222807794809341,0.974862277507782 ,0.253216534852982,-0.212744683027267,0.943727254867554,0.288086891174316,-0.211062774062157,0.934054851531982 ,0.765106797218323,-0.350072890520096,0.540426254272461,0.719567954540253,-0.322717130184174,0.614878535270691 ,0.866469502449036,-0.361488610506058,0.344320476055145,0.875984609127045,-0.341396063566208,0.340734094381332 ,0.332773357629776,-0.801452815532684,0.49692577123642,0.198447287082672,-0.827921032905579,0.524562180042267 ,0.168408244848251,-0.974918007850647,0.145511314272881,0.304768770933151,-0.92969423532486,0.206844300031662 ,0.353568494319916,-0.776771426200867,0.521167457103729,0.332773357629776,-0.801452815532684,0.49692577123642 ,0.304768770933151,-0.92969423532486,0.206844300031662,0.225757539272308,-0.896350860595703,0.381560862064362 ,0.918502330780029,-0.196233198046684,0.343287169933319,0.989523768424988,0.120242863893509,-0.0799020603299141 ,0.941014289855957,-0.231837883591652,0.246461525559425,0.928443729877472,-0.228811115026474,0.292639285326004 ,0.925993382930756,0.073547326028347,-0.370306611061096,0.903722703456879,-0.336785912513733,0.26431143283844 ,0.941014289855957,-0.231837883591652,0.246461525559425,0.989523768424988,0.120242863893509,-0.0799020603299141 ,0.804244041442871,-0.107830874621868,0.584434807300568,0.64728707075119,-0.269912004470825,0.712858319282532 ,0.43553838133812,0.174102976918221,0.883172988891602,0.897598922252655,-0.0851877480745316,0.432503432035446 ,0.928443729877472,-0.228811115026474,0.292639285326004,0.941014289855957,-0.231837883591652,0.246461525559425 ,0.804244041442871,-0.107830874621868,0.584434807300568,0.877371370792389,-0.100216217339039,0.469229310750961 ,0.690708041191101,-0.0477886833250523,0.721552908420563,0.65963888168335,0.347626268863678,0.666357636451721 ,0.848142683506012,0.254542678594589,0.464609563350677,0.688574373722076,-0.431850165128708,0.58255535364151 ,0.586388051509857,-0.415063470602036,0.695608615875244,0.270446568727493,-0.724654376506805,0.633825421333313 ,0.333747088909149,-0.66472852230072,0.668392717838287,0.731125593185425,-0.405815303325653,0.548424422740936 ,0.688574373722076,-0.431850165128708,0.58255535364151,0.333747088909149,-0.66472852230072,0.668392717838287 ,0.535029828548431,-0.536747872829437,0.652414619922638,0.688574373722076,-0.431850165128708,0.58255535364151 ,0.731125593185425,-0.405815303325653,0.548424422740936,0.73811411857605,-0.426667273044586,0.522630453109741 ,0.731416404247284,-0.417625606060028,0.539090871810913,-0.0552638620138168,0.347488284111023,0.936054348945618 ,0.179719522595406,0.199890360236168,0.963195025920868,-0.00221070507541299,0.348074615001678,0.937464237213135 ,0.174916133284569,0.190565213561058,0.965965449810028,0.280919551849365,0.197001457214355,0.939294755458832 ,0.431708127260208,0.0743667632341385,0.898942530155182,0.493298023939133,0.0378949381411076,0.8690345287323 ,0.951365828514099,0.00983366928994656,0.30790650844574,0.958109974861145,-0.0344467237591743,0.284321486949921 ,0.955479383468628,-0.0429471768438816,0.291915565729141,0.0600041374564171,-0.192453533411026,0.979469835758209 ,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874 ,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0409326404333115,0.16646908223629,0.985196709632874 ,0.0314028672873974,0.188204348087311,0.981627702713013,0.00068405584897846,-0.208776980638504,0.977963030338287 ,0.0412249267101288,-0.205861806869507,0.977712333202362,0.44965198636055,0.140096634626389,0.882148504257202 ,0.182319968938828,0.114501133561134,0.976549506187439,0.191416949033737,-0.0921172648668289,0.977176547050476 ,0.440964937210083,0.0207586232572794,0.897284269332886,0.763672888278961,0.330310761928558,0.554705798625946 ,0.728024780750275,0.317726284265518,0.607478320598602,0.862693786621094,0.213308542966843,0.458539962768555 ,0.87058699131012,0.227341398596764,0.436341762542725,0.488678455352783,-0.257274806499481,0.833668410778046 ,0.378649204969406,-0.51500403881073,0.769022524356842,0.678119361400604,-0.318360239267349,0.662420451641083 ,0.750837445259094,-0.0367836877703667,0.659461975097656,0.981309294700623,-0.093424528837204,-0.168237790465355 ,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.979115843772888,-0.186871707439423,-0.0800699964165688 ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.979115843772888,-0.186871707439423,-0.0800699964165688 ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.993362247943878,-0.0349664911627769,0.109584823250771 ,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.135898023843765,0.169247582554817,0.976159334182739 ,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299,0.348074615001678,0.937464237213135 ,0.179719522595406,0.199890360236168,0.963195025920868,0.0426242314279079,0.260108649730682,0.964638113975525 ,-0.0196372587233782,0.188453316688538,0.98188579082489,0.135898023843765,0.169247582554817,0.976159334182739 ,0.166202440857887,0.306374847888947,0.937289237976074,0.333747088909149,-0.66472852230072,0.668392717838287 ,0.270446568727493,-0.724654376506805,0.633825421333313,0.235940769314766,-0.737428665161133,0.632875144481659 ,0.363939642906189,-0.646557629108429,0.670455992221832,0.189460039138794,-0.647004544734955,0.738572955131531 ,0.535029828548431,-0.536747872829437,0.652414619922638,0.333747088909149,-0.66472852230072,0.668392717838287 ,0.363939642906189,-0.646557629108429,0.670455992221832,0.286647915840149,-0.584438979625702,0.759120643138886 ,0.583943843841553,0.131935343146324,0.801001012325287,0.44965198636055,0.140096634626389,0.882148504257202,0.440964937210083 ,0.0207586232572794,0.897284269332886,0.596563339233398,-0.0223739240318537,0.8022540807724,0.364222437143326 ,-0.205845013260841,0.908278524875641,0.335370063781738,-0.00474565383046865,0.942074537277222,0.690708041191101 ,-0.0477886833250523,0.721552908420563,0.61975085735321,-0.35027813911438,0.702292025089264,0.00262317061424255 ,-0.184787794947624,0.982774972915649,0.017973817884922,0.0102047342807055,0.999786376953125,0.335370063781738 ,-0.00474565383046865,0.942074537277222,0.364222437143326,-0.205845013260841,0.908278524875641,0.958109974861145 ,-0.0344467237591743,0.284321486949921,0.969503223896027,0.0232477653771639,0.243973404169083,0.968910753726959 ,0.00811574142426252,0.247277289628983,0.955479383468628,-0.0429471768438816,0.291915565729141,0.930171310901642 ,0.112328357994556,0.34951913356781,0.966420710086823,0.0570991300046444,0.250540882349014,0.969503223896027 ,0.0232477653771639,0.243973404169083,0.958109974861145,-0.0344467237591743,0.284321486949921,-0.0301125477999449 ,-0.572418868541718,0.819408237934113,0.00911593530327082,-0.103348582983017,0.994603395462036,0.173270419239998 ,-0.100987397134304,0.979683041572571,0.0780740827322006,-0.57033497095108,0.817693412303925,0.173270419239998 ,-0.100987397134304,0.979683041572571,0.248945504426956,-0.117258243262768,0.961393058300018,0.047360323369503 ,-0.552981853485107,0.831846177577972,0.0780740827322006,-0.57033497095108,0.817693412303925,0.810256838798523 ,-0.430587977170944,0.397590130567551,0.893001258373261,-0.370285004377365,0.255807995796204,0.870028138160706 ,-0.439180076122284,0.223990917205811,0.770568072795868,-0.510897517204285,0.381062299013138,0.900704562664032 ,-0.383264392614365,0.204547420144081,0.903808772563934,-0.380508303642273,0.19581413269043,0.870028138160706 ,-0.439180076122284,0.223990917205811,0.893001258373261,-0.370285004377365,0.255807995796204,0.886316955089569 ,0.0816843584179878,0.455817818641663,0.89356255531311,-0.0812801718711853,0.441519498825073,0.959026873111725 ,-0.148191750049591,0.241467580199242,0.747522175312042,-0.213430538773537,0.629013538360596,0.770568072795868 ,-0.510897517204285,0.381062299013138,0.870028138160706,-0.439180076122284,0.223990917205811,0.89356255531311 ,-0.0812801718711853,0.441519498825073,0.897057175636292,-0.352101475000381,0.267044723033905,0.927076876163483 ,-0.29800683259964,0.227421119809151,0.875984609127045,-0.341396063566208,0.340734094381332,0.866469502449036 ,-0.361488610506058,0.344320476055145,0.956220626831055,-0.152332276105881,0.249873846769333,0.976429760456085 ,-0.14936164021492,0.155807659029961,0.976300895214081,-0.175593838095665,-0.126504495739937,0.970759510993958 ,-0.233238592743874,0.056795421987772,0.935715436935425,0.19026754796505,0.297043561935425,0.938729107379913 ,0.213661849498749,0.270437210798264,0.956782042980194,0.0500060208141804,0.286474347114563,0.964095413684845 ,-0.0113426633179188,0.265313804149628,0.945727825164795,-0.098081186413765,0.309804677963257,0.941311419010162 ,0.140633046627045,0.30684706568718,0.935715436935425,0.19026754796505,0.297043561935425,0.964095413684845,-0.0113426633179188 ,0.265313804149628,0.707773089408875,-0.177667543292046,0.683733463287354,0.820341229438782,-0.113342881202698 ,0.560529828071594,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698 ,0.560529828071594,0.707773089408875,-0.177667543292046,0.683733463287354,0.649656236171722,-0.0531920231878757 ,0.758364915847778,0.855769634246826,-0.0943452939391136,0.508681952953339,-0.0512008517980576,-0.79354852437973 ,0.606349110603333,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0997758805751801,-0.76704877614975 ,0.633782982826233,-0.0242012590169907,-0.832133829593658,0.554046511650085,-0.0352796316146851,-0.824001550674438 ,0.565488159656525,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0242012590169907,-0.832133829593658 ,0.554046511650085,0.0416775047779083,-0.927180886268616,0.372288316488266,-0.0242012590169907,-0.832133829593658 ,0.554046511650085,0.0997758805751801,-0.76704877614975,0.633782982826233,0.406590580940247,-0.393400549888611 ,0.824572682380676,0.267092674970627,-0.484114617109299,0.833243370056152,-0.0242012590169907,-0.832133829593658 ,0.554046511650085,0.267092674970627,-0.484114617109299,0.833243370056152,0.209196627140045,-0.665287017822266 ,0.716679811477661,0.0416775047779083,-0.927180886268616,0.372288316488266,0.0587443448603153,-0.922947645187378 ,-0.380416542291641,0.0633370503783226,-0.944429814815521,-0.322553485631943,-0.0777209997177124,-0.922415435314178 ,-0.378297746181488,-0.0771657377481461,-0.907520055770874,-0.412859290838242,0.750837445259094,-0.0367836877703667 ,0.659461975097656,0.678119361400604,-0.318360239267349,0.662420451641083,0.680992484092712,-0.305005490779877 ,0.665748357772827,0.758135914802551,0.0851427242159843,0.646514236927032,0.80888158082962,-0.583779513835907 ,-0.0700862184166908,0.671372294425964,-0.724817991256714,-0.15459018945694,0.720593869686127,-0.637408852577209 ,-0.272863417863846,0.828101873397827,-0.525332391262054,-0.195635288953781,0.838521242141724,-0.431514054536819 ,-0.332682609558105,0.828101873397827,-0.525332391262054,-0.195635288953781,0.720593869686127,-0.637408852577209 ,-0.272863417863846,0.777718842029572,-0.48187255859375,-0.403673440217972,0.758135914802551,0.0851427242159843 ,0.646514236927032,0.680992484092712,-0.305005490779877,0.665748357772827,0.515636503696442,-0.41490975022316 ,0.749645829200745,0.443391680717468,-0.0999263972043991,0.89074045419693,0.989404678344727,-0.134779617190361 ,-0.0539703145623207,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.858178198337555,-0.416941344738007 ,-0.299483120441437,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.989404678344727,-0.134779617190361 ,-0.0539703145623207,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.993429064750671,-0.113890402019024 ,0.0113009223714471,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.371347606182098,0.418176740407944 ,0.82899284362793,0.535205781459808,0.472302228212357,0.700346648693085,0.512064158916473,0.485980182886124,0.708246827125549 ,0.328961253166199,0.182314842939377,0.92657744884491,0.314301073551178,0.320888847112656,0.893445670604706,0.371347606182098 ,0.418176740407944,0.82899284362793,0.0426242314279079,0.260108649730682,0.964638113975525,0.166202440857887 ,0.306374847888947,0.937289237976074,0.221095889806747,0.32488140463829,0.919548094272614,0.16256257891655,0.269552499055862 ,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.166202440857887,0.306374847888947,0.937289237976074 ,0.508710622787476,0.190386489033699,0.839622795581818,0.481910198926926,0.246677935123444,0.840780913829803 ,0.278009802103043,0.308251172304153,0.909775674343109,0.221095889806747,0.32488140463829,0.919548094272614,0.481910198926926 ,0.246677935123444,0.840780913829803,0.428730636835098,0.26745393872261,0.862935900688171,0.933138132095337,-0.0070160455070436 ,-0.359449595212936,0.967206120491028,-0.19463723897934,0.163182899355888,0.806693911552429,-0.123899839818478 ,0.577835381031036,0.806693911552429,-0.123899839818478,0.577835381031036,0.967206120491028,-0.19463723897934 ,0.163182899355888,0.851511597633362,-0.5011847615242,0.154083982110024,0.733202934265137,-0.122967794537544 ,0.668799161911011,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.959231495857239,-0.07520642131567 ,-0.272431552410126,0.940188527107239,-0.340047240257263,0.0203306917101145,0.985052049160004,-0.113364338874817 ,0.129696041345596,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.989280700683594,-0.0284773074090481 ,-0.143222585320473,0.959231495857239,-0.07520642131567,-0.272431552410126,0.99903529882431,-0.0258715786039829 ,-0.035483431071043,0.965724050998688,-0.163102030754089,-0.201927617192268,0.899878442287445,-0.160217583179474 ,-0.405646592378616,0.959231495857239,-0.07520642131567,-0.272431552410126,0.989280700683594,-0.0284773074090481 ,-0.143222585320473,0.400608420372009,-0.480024576187134,0.780441761016846,0.570054233074188,-0.200027942657471 ,0.796885788440704,0.681784629821777,-0.285219341516495,0.673661351203918,0.656731724739075,-0.381447851657867 ,0.650538980960846,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.00655650394037366,-0.135652124881744 ,0.990734815597534,0.387449771165848,-0.245748713612556,0.888532638549805,0.270428031682968,-0.84670215845108 ,0.458218395709991,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.997385084629059,0.0175571031868458 ,0.0701054036617279,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.989280700683594,-0.0284773074090481 ,-0.143222585320473,0.961935639381409,0.00657567568123341,0.273196935653687,0.964770019054413,-0.0907266810536385 ,0.246956452727318,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.997385084629059,0.0175571031868458 ,0.0701054036617279,0.949846565723419,-0.197867274284363,0.242157250642776,0.986409723758698,-0.164261862635612 ,-0.00372203509323299,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.964770019054413,-0.0907266810536385 ,0.246956452727318,0.965724050998688,-0.163102030754089,-0.201927617192268,0.989280700683594,-0.0284773074090481 ,-0.143222585320473,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.986409723758698,-0.164261862635612 ,-0.00372203509323299,0.44691988825798,-0.179234355688095,0.876434624195099,0.312136799097061,-0.241864830255508 ,0.918733894824982,0.288086891174316,-0.211062774062157,0.934054851531982,0.35059866309166,-0.137498125433922 ,0.926377296447754,0.288086891174316,-0.211062774062157,0.934054851531982,0.253216534852982,-0.212744683027267 ,0.943727254867554,0.194007128477097,-0.0432056449353695,0.98004823923111,0.35059866309166,-0.137498125433922 ,0.926377296447754,0.562851548194885,-0.792488932609558,0.23486053943634,0.386847853660584,-0.767014622688293 ,0.511895835399628,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.637141883373261,-0.082910381257534 ,0.766274154186249,0.846625864505768,-0.12819692492485,0.516517341136932,0.855769634246826,-0.0943452939391136 ,0.508681952953339,0.649656236171722,-0.0531920231878757,0.758364915847778,0.903585314750671,0.234351992607117 ,0.35862609744072,0.98053389787674,0.00911934021860361,0.196137949824333,0.991146802902222,-0.0709943845868111 ,0.112195692956448,0.944392323493958,0.0710759162902832,0.321047365665436,0.98053389787674,0.00911934021860361 ,0.196137949824333,0.98186069726944,-0.153709232807159,0.111008986830711,0.990583539009094,-0.136551707983017 ,0.0098949521780014,0.991146802902222,-0.0709943845868111,0.112195692956448,0.927650630474091,-0.232570663094521 ,-0.292190253734589,0.867056906223297,-0.245093911886215,-0.433752596378326,0.899878442287445,-0.160217583179474 ,-0.405646592378616,0.965724050998688,-0.163102030754089,-0.201927617192268,0.847399115562439,-0.142815440893173 ,-0.511388719081879,0.899878442287445,-0.160217583179474,-0.405646592378616,0.867056906223297,-0.245093911886215 ,-0.433752596378326,0.863667845726013,-0.255664467811584,-0.434411734342575,0.705349028110504,-0.217919707298279 ,0.674532234668732,0.750554323196411,-0.229917243123055,0.619521021842957,0.688922643661499,-0.305572867393494 ,0.657275319099426,0.760169208049774,-0.346720576286316,0.549479365348816,0.688922643661499,-0.305572867393494 ,0.657275319099426,0.684517562389374,-0.439017295837402,0.581978976726532,0.742792665958405,-0.550313711166382 ,0.381331622600555,0.760169208049774,-0.346720576286316,0.549479365348816,0.378649204969406,-0.51500403881073 ,0.769022524356842,0.0903236120939255,-0.645915448665619,0.758046746253967,0.11539563536644,-0.528798937797546 ,0.840865969657898,0.400608420372009,-0.480024576187134,0.780441761016846,0.80888158082962,-0.583779513835907 ,-0.0700862184166908,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.645513415336609,-0.755210697650909 ,-0.113882429897785,0.671372294425964,-0.724817991256714,-0.15459018945694,0.821304857730865,-0.558016240596771 ,0.118643142282963,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.645513415336609,-0.755210697650909 ,-0.113882429897785,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.586100876331329,-0.804308116436005 ,-0.0978478193283081,0.430644094944,-0.871794462203979,-0.233495324850082,0.435357719659805,-0.872423410415649 ,-0.222128495573998,0.501666784286499,-0.849441289901733,-0.163646027445793,0.609544932842255,-0.541187822818756 ,0.579284608364105,0.629647791385651,-0.52997088432312,0.568044483661652,0.810256838798523,-0.430587977170944 ,0.397590130567551,0.770568072795868,-0.510897517204285,0.381062299013138,0.609544932842255,-0.541187822818756 ,0.579284608364105,0.770568072795868,-0.510897517204285,0.381062299013138,0.747522175312042,-0.213430538773537 ,0.629013538360596,0.584165692329407,-0.333255082368851,0.740061819553375,0.535205781459808,0.472302228212357 ,0.700346648693085,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117,0.275353401899338 ,0.553449213504791,0.783647418022156,0.339152276515961,0.520454108715057,0.901179313659668,-0.204281270503998 ,0.382289171218872,0.896426856517792,-0.172908827662468,0.408070415258408,0.623109459877014,-0.205047786235809 ,0.754778146743774,0.645662844181061,-0.29273384809494,0.705284595489502,0.901179313659668,-0.204281270503998 ,0.382289171218872,0.645662844181061,-0.29273384809494,0.705284595489502,0.651034355163574,-0.303375482559204 ,0.695785582065582,0.887543320655823,-0.171314582228661,0.427689343690872,0.261966973543167,0.625043272972107 ,0.735319077968597,0.286056965589523,0.444956660270691,0.848637104034424,0.0513622872531414,0.468802571296692 ,0.881808400154114,0.0635503008961678,0.655404150485992,0.752600014209747,0.261966973543167,0.625043272972107 ,0.735319077968597,0.667004644870758,0.442110657691956,0.59970235824585,0.65963888168335,0.347626268863678,0.666357636451721 ,0.286056965589523,0.444956660270691,0.848637104034424,0.985209882259369,0.0516813509166241,0.163372397422791 ,0.985529184341431,0.0794467255473137,0.149734541773796,0.96662175655365,0.153387770056725,0.205218374729156 ,0.980856478214264,0.0318705588579178,0.192106366157532,0.966420710086823,0.0570991300046444,0.250540882349014 ,0.922278165817261,0.183078601956367,0.340419232845306,0.96662175655365,0.153387770056725,0.205218374729156,0.985529184341431 ,0.0794467255473137,0.149734541773796,0.85977029800415,0.296936422586441,0.415480256080627,0.885397613048553 ,0.234036833047867,0.401618927717209,0.96662175655365,0.153387770056725,0.205218374729156,0.922278165817261,0.183078601956367 ,0.340419232845306,0.870097935199738,0.102833516895771,0.482032060623169,0.980856478214264,0.0318705588579178 ,0.192106366157532,0.96662175655365,0.153387770056725,0.205218374729156,0.885397613048553,0.234036833047867,0.401618927717209 ,0.43553838133812,0.174102976918221,0.883172988891602,0.534866094589233,0.53300929069519,0.655606091022491,0.897598922252655 ,-0.0851877480745316,0.432503432035446,0.804244041442871,-0.107830874621868,0.584434807300568,0.43553838133812 ,0.174102976918221,0.883172988891602,0.102224595844746,0.498050421476364,0.861101567745209,0.534866094589233 ,0.53300929069519,0.655606091022491,0.43553838133812,0.174102976918221,0.883172988891602,0.64728707075119,-0.269912004470825 ,0.712858319282532,0.409548729658127,0.024171682074666,0.911967992782593,0.102224595844746,0.498050421476364 ,0.861101567745209,0.43553838133812,0.174102976918221,0.883172988891602,0.409548729658127,0.024171682074666,0.911967992782593 ,0.31933718919754,0.337111681699753,0.885652005672455,0.933462917804718,0.164250507950783,0.318855404853821,0.800925850868225 ,0.226523146033287,0.554260790348053,0.783647418022156,0.339152276515961,0.520454108715057,0.915872991085052 ,0.226020276546478,0.33180034160614,0.975037813186646,0.14565335214138,0.167589843273163,0.966257035732269,0.139943510293961 ,0.216247826814651,0.933462917804718,0.164250507950783,0.318855404853821,0.915872991085052,0.226020276546478 ,0.33180034160614,0.965288519859314,0.151292905211449,0.212904900312424,0.601098597049713,0.0911194980144501 ,0.793963313102722,0.583943843841553,0.131935343146324,0.801001012325287,0.596563339233398,-0.0223739240318537 ,0.8022540807724,0.655191659927368,0.0146637577563524,0.755320370197296,0.235940769314766,-0.737428665161133 ,0.632875144481659,0.270446568727493,-0.724654376506805,0.633825421333313,0.0997758805751801,-0.76704877614975 ,0.633782982826233,0.0527103617787361,-0.77695095539093,0.627350628376007,0.821304857730865,-0.558016240596771 ,0.118643142282963,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.93299263715744,-0.32493382692337 ,0.154734432697296,0.923712968826294,-0.295430272817612,0.243875607848167,0.80888158082962,-0.583779513835907 ,-0.0700862184166908,0.926652431488037,-0.373704701662064,0.0407436527311802,0.93299263715744,-0.32493382692337 ,0.154734432697296,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.96362441778183,-0.210319370031357 ,0.16490513086319,0.947748720645905,-0.180222257971764,0.263234436511993,0.93299263715744,-0.32493382692337,0.154734432697296 ,0.926652431488037,-0.373704701662064,0.0407436527311802,0.945337653160095,-0.174788698554039,0.275292009115219 ,0.923712968826294,-0.295430272817612,0.243875607848167,0.93299263715744,-0.32493382692337,0.154734432697296 ,0.947748720645905,-0.180222257971764,0.263234436511993,0.742792665958405,-0.550313711166382,0.381331622600555 ,0.657656788825989,-0.727221310138702,0.196562394499779,0.64417177438736,-0.7592693567276,0.0924808010458946 ,0.803535997867584,-0.553550720214844,0.2188870459795,0.639384806156158,-0.761013865470886,0.109749406576157 ,0.575045108795166,-0.818020403385162,0.0128742791712284,0.64417177438736,-0.7592693567276,0.0924808010458946 ,0.657656788825989,-0.727221310138702,0.196562394499779,0.537862658500671,-0.839294493198395,-0.0793002098798752 ,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.64417177438736,-0.7592693567276,0.0924808010458946 ,0.575045108795166,-0.818020403385162,0.0128742791712284,0.821304857730865,-0.558016240596771,0.118643142282963 ,0.803535997867584,-0.553550720214844,0.2188870459795,0.64417177438736,-0.7592693567276,0.0924808010458946,0.642173051834106 ,-0.76616907119751,-0.0244695600122213,0.560910940170288,-0.546258211135864,0.622077882289886,0.301303088665009 ,-0.716448962688446,0.629219651222229,0.275670319795609,-0.347558110952377,0.896219432353973,0.432139188051224 ,-0.378973364830017,0.818312227725983,0.275670319795609,-0.347558110952377,0.896219432353973,0.254473268985748 ,-0.0765668898820877,0.964044034481049,0.416703939437866,-0.0255245417356491,0.908683836460114,0.432139188051224 ,-0.378973364830017,0.818312227725983,0.981637835502625,-0.188382476568222,0.0299864616245031,0.946312725543976 ,-0.198392629623413,-0.255210876464844,0.976300895214081,-0.175593838095665,-0.126504495739937,0.976429760456085 ,-0.14936164021492,0.155807659029961,0.981637835502625,-0.188382476568222,0.0299864616245031,0.0486728809773922 ,-0.68095201253891,-0.730708718299866,0.766620635986328,-0.390746057033539,-0.509519696235657,0.946312725543976 ,-0.198392629623413,-0.255210876464844,0.688574373722076,-0.431850165128708,0.58255535364151,0.731416404247284 ,-0.417625606060028,0.539090871810913,0.640114009380341,-0.360243141651154,0.678585946559906,0.586388051509857 ,-0.415063470602036,0.695608615875244,0.515636503696442,-0.41490975022316,0.749645829200745,0.680992484092712 ,-0.305005490779877,0.665748357772827,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119 ,-0.357467710971832,0.754730105400085,0.613220632076263,-0.373373091220856,0.696098387241364,0.523068964481354 ,-0.400331109762192,0.752418637275696,0.609544932842255,-0.541187822818756,0.579284608364105,0.584165692329407 ,-0.333255082368851,0.740061819553375,0.510522961616516,-0.392942905426025,0.764828205108643,0.504154682159424 ,-0.548682808876038,0.666914701461792,0.609544932842255,-0.541187822818756,0.579284608364105,0.504154682159424 ,-0.548682808876038,0.666914701461792,0.572291314601898,-0.52212518453598,0.632351100444794,0.629647791385651 ,-0.52997088432312,0.568044483661652,0.731416404247284,-0.417625606060028,0.539090871810913,0.73811411857605 ,-0.426667273044586,0.522630453109741,0.831848502159119,-0.322033703327179,0.452020287513733,0.842584788799286 ,-0.21356026828289,0.494411617517471,0.640114009380341,-0.360243141651154,0.678585946559906,0.731416404247284 ,-0.417625606060028,0.539090871810913,0.842584788799286,-0.21356026828289,0.494411617517471,0.770362615585327 ,0.0158082563430071,0.63740998506546,0.536214470863342,0.394264131784439,0.746344327926636,0.595219552516937 ,0.51872980594635,0.613704323768616,0.267601639032364,0.585238754749298,0.765431225299835,0.253624588251114,0.428919792175293 ,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.595219552516937,0.51872980594635,0.613704323768616 ,0.688724040985107,0.428849041461945,0.584591865539551,0.279262810945511,0.544022977352142,0.791234016418457 ,0.0581676289439201,0.571192860603333,0.818752288818359,0.0604556538164616,0.606487095355988,0.792791604995728 ,0.267601639032364,0.585238754749298,0.765431225299835,0.279262810945511,0.544022977352142,0.791234016418457 ,0.0497331917285919,0.445011228322983,0.894142985343933,0.253624588251114,0.428919792175293,0.867007732391357 ,0.267601639032364,0.585238754749298,0.765431225299835,0.0604556538164616,0.606487095355988,0.792791604995728 ,0.786049902439117,0.275353401899338,0.553449213504791,0.912213087081909,0.0526493825018406,0.406319200992584 ,0.915872991085052,0.226020276546478,0.33180034160614,0.783647418022156,0.339152276515961,0.520454108715057,0.926979184150696 ,-0.0986248403787613,0.36191537976265,0.965288519859314,0.151292905211449,0.212904900312424,0.915872991085052 ,0.226020276546478,0.33180034160614,0.912213087081909,0.0526493825018406,0.406319200992584,0.289565563201904 ,-0.362892955541611,0.885697722434998,0.0666661337018013,-0.827535629272461,0.557440996170044,0.198447287082672 ,-0.827921032905579,0.524562180042267,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672 ,-0.827921032905579,0.524562180042267,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.021647073328495 ,-0.960853159427643,0.276211261749268,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251 ,-0.974918007850647,0.145511314272881,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0233143605291843 ,-0.495335191488266,0.868389010429382,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.136760428547859 ,-0.195085763931274,0.971204459667206,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.199777901172638 ,-0.484420716762543,0.851719081401825,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0214409474283457 ,-0.17113696038723,0.985013961791992,0.533053755760193,0.0411353260278702,0.845080852508545,0.437306433916092 ,-0.371932566165924,0.818797469139099,0.640114009380341,-0.360243141651154,0.678585946559906,0.770362615585327 ,0.0158082563430071,0.63740998506546,0.754335284233093,-0.305042564868927,0.581315159797668,0.771643459796906 ,-0.219248831272125,0.597073137760162,0.861247181892395,-0.192313641309738,0.470392137765884,0.838417947292328 ,-0.244426995515823,0.487145572900772,0.771643459796906,-0.219248831272125,0.597073137760162,0.754335284233093 ,-0.305042564868927,0.581315159797668,0.71972918510437,-0.325454443693161,0.613244891166687,0.677804887294769 ,-0.293700158596039,0.674033224582672,0.510522961616516,-0.392942905426025,0.764828205108643,0.494429767131805 ,-0.0934201404452324,0.864182770252228,0.32480525970459,-0.177078545093536,0.929055869579315,0.385615348815918 ,-0.420324206352234,0.821357607841492,0.494429767131805,-0.0934201404452324,0.864182770252228,0.510522961616516 ,-0.392942905426025,0.764828205108643,0.584165692329407,-0.333255082368851,0.740061819553375,0.550924062728882 ,0.0100475419312716,0.834494948387146,0.254473268985748,-0.0765668898820877,0.964044034481049,0.275670319795609 ,-0.347558110952377,0.896219432353973,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.0214409474283457 ,-0.17113696038723,0.985013961791992,0.301303088665009,-0.716448962688446,0.629219651222229,-0.00210810895077884 ,-0.784596800804138,0.620002746582031,-0.0337620861828327,-0.434601843357086,0.899989664554596,0.275670319795609 ,-0.347558110952377,0.896219432353973,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.199777901172638 ,-0.484420716762543,0.851719081401825,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.00210810895077884 ,-0.784596800804138,0.620002746582031,0.949343860149384,0.194382473826408,0.246904209256172,0.952320516109467 ,0.113910689949989,0.283037096261978,0.935723841190338,0.105225577950478,0.336672723293304,0.960835516452789 ,0.146968066692352,0.234937101602554,0.952320516109467,0.113910689949989,0.283037096261978,0.937154471874237 ,-0.0475939512252808,0.345653474330902,0.916476547718048,0.0582267269492149,0.395828783512115,0.935723841190338 ,0.105225577950478,0.336672723293304,0.954735457897186,-0.0869630351662636,0.284460365772247,0.976793885231018 ,-0.16974413394928,0.13061648607254,0.830796539783478,-0.141607835888863,0.538260519504547,0.797767400741577 ,-0.104994267225266,0.593753576278687,0.976793885231018,-0.16974413394928,0.13061648607254,0.984028935432434 ,-0.172777280211449,0.042837880551815,0.846625864505768,-0.12819692492485,0.516517341136932,0.830796539783478 ,-0.141607835888863,0.538260519504547,0.792236804962158,-0.0960670188069344,0.602604329586029,0.702580511569977 ,0.00276018492877483,0.711598932743073,0.683284997940063,0.154697299003601,0.713575720787048,0.756793797016144 ,-0.0805434510111809,0.64867240190506,0.0903236120939255,-0.645915448665619,0.758046746253967,0.047360323369503 ,-0.552981853485107,0.831846177577972,0.11539563536644,-0.528798937797546,0.840865969657898,-0.0214409474283457 ,-0.17113696038723,0.985013961791992,-0.0292664598673582,0.127957031130791,0.991347789764404,0.182319968938828 ,0.114501133561134,0.976549506187439,0.254473268985748,-0.0765668898820877,0.964044034481049,0.908188223838806 ,0.15894940495491,0.387206882238388,0.874416053295136,-0.00546242296695709,0.485146045684814,0.787108600139618 ,0.00810690317302942,0.616761207580566,0.864675521850586,0.193993464112282,0.46336030960083,0.908188223838806 ,0.15894940495491,0.387206882238388,0.787108600139618,0.00810690317302942,0.616761207580566,0.793840944766998 ,0.179479137063026,0.581036806106567,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.820341229438782 ,-0.113342881202698,0.560529828071594,0.855769634246826,-0.0943452939391136,0.508681952953339,0.990714609622955 ,-0.135222300887108,-0.0141245061531663,0.855769634246826,-0.0943452939391136,0.508681952953339,0.846625864505768 ,-0.12819692492485,0.516517341136932,0.984028935432434,-0.172777280211449,0.042837880551815,0.990714609622955 ,-0.135222300887108,-0.0141245061531663,0.65490597486496,0.140991285443306,0.742441654205322,0.736574053764343 ,-0.0243753399699926,0.675917506217957,0.46117314696312,-0.0281441453844309,0.886863708496094,0.313594281673431 ,0.139182701706886,0.939301192760468,0.736574053764343,-0.0243753399699926,0.675917506217957,0.797767400741577 ,-0.104994267225266,0.593753576278687,0.542096614837646,-0.0831166654825211,0.836195468902588,0.46117314696312 ,-0.0281441453844309,0.886863708496094,0.0600041374564171,-0.192453533411026,0.979469835758209,0.191416949033737 ,-0.0921172648668289,0.977176547050476,0.182319968938828,0.114501133561134,0.976549506187439,-0.0292664598673582 ,0.127957031130791,0.991347789764404,0.85977029800415,0.296936422586441,0.415480256080627,0.821655750274658,0.296962469816208 ,0.486513197422028,0.750506460666656,0.343903452157974,0.564331829547882,0.720846891403198,0.393656641244888 ,0.570450901985168,0.773433268070221,0.347118884325027,0.53038614988327,0.750506460666656,0.343903452157974,0.564331829547882 ,0.821655750274658,0.296962469816208,0.486513197422028,0.410660326480865,0.0589907094836235,0.909878134727478 ,0.33416548371315,0.26105335354805,0.905640423297882,0.55342048406601,0.140735372900963,0.820925891399384,0.503296196460724 ,0.0546823143959045,0.862382054328918,0.400608420372009,-0.480024576187134,0.780441761016846,0.656731724739075 ,-0.381447851657867,0.650538980960846,0.678119361400604,-0.318360239267349,0.662420451641083,0.378649204969406 ,-0.51500403881073,0.769022524356842,0.0272070206701756,0.178279355168343,0.983603715896606,0.0931223928928375 ,0.201938465237617,0.97496110200882,0.0304032936692238,0.174695551395416,0.984152972698212,0.0284836571663618 ,0.148866042494774,0.988447070121765,0.0931223928928375,0.201938465237617,0.97496110200882,0.163330301642418 ,0.241669088602066,0.956514120101929,0.0344220362603664,0.22930283844471,0.972746253013611,0.0304032936692238 ,0.174695551395416,0.984152972698212,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.978873014450073 ,-0.188474208116531,-0.0792786628007889,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.996031820774078 ,-0.0883952453732491,0.0103418976068497,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.984028935432434 ,-0.172777280211449,0.042837880551815,0.990583539009094,-0.136551707983017,0.0098949521780014,0.996031820774078 ,-0.0883952453732491,0.0103418976068497,0.921219646930695,-0.0589233264327049,0.384554862976074,0.727879226207733 ,-0.243267610669136,0.641102731227875,0.710833370685577,-0.195758193731308,0.675569832324982,0.909473538398743 ,-0.0684049502015114,0.410095930099487,0.651034355163574,-0.303375482559204,0.695785582065582,0.645662844181061 ,-0.29273384809494,0.705284595489502,0.710833370685577,-0.195758193731308,0.675569832324982,0.727879226207733 ,-0.243267610669136,0.641102731227875,0.623109459877014,-0.205047786235809,0.754778146743774,0.705142974853516 ,-0.157100901007652,0.691442430019379,0.710833370685577,-0.195758193731308,0.675569832324982,0.645662844181061 ,-0.29273384809494,0.705284595489502,0.9190753698349,-0.11298330873251,0.377538323402405,0.909473538398743,-0.0684049502015114 ,0.410095930099487,0.710833370685577,-0.195758193731308,0.675569832324982,0.705142974853516,-0.157100901007652 ,0.691442430019379,0.886316955089569,0.0816843584179878,0.455817818641663,0.841468989849091,0.227338507771492 ,0.490150064229965,0.813554108142853,0.0718955099582672,0.577027499675751,0.771234273910522,0.123447246849537 ,0.62446653842926,0.813554108142853,0.0718955099582672,0.577027499675751,0.832460403442383,-0.0762069076299667 ,0.548818945884705,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667 ,0.548818945884705,0.813554108142853,0.0718955099582672,0.577027499675751,0.841468989849091,0.227338507771492 ,0.490150064229965,0.853365004062653,0.0768043100833893,0.515625178813934,0.813554108142853,0.0718955099582672 ,0.577027499675751,0.825742661952972,-0.0501102656126022,0.561816692352295,0.802095234394073,-0.0203569829463959 ,0.596849083900452,0.771234273910522,0.123447246849537,0.62446653842926,0.85977029800415,0.296936422586441,0.415480256080627 ,0.720846891403198,0.393656641244888,0.570450901985168,0.698984086513519,0.246289730072021,0.671388566493988 ,0.885397613048553,0.234036833047867,0.401618927717209,0.698984086513519,0.246289730072021,0.671388566493988 ,0.642289221286774,0.115071445703506,0.757775127887726,0.870097935199738,0.102833516895771,0.482032060623169 ,0.885397613048553,0.234036833047867,0.401618927717209,0.115422785282135,-0.952069759368896,0.283268004655838 ,0.164180904626846,-0.958690702915192,0.232285901904106,0.171536713838577,-0.946371257305145,0.273782074451447 ,0.0454688854515553,-0.765503704547882,0.641822934150696,0.225757539272308,-0.896350860595703,0.381560862064362 ,0.164180904626846,-0.958690702915192,0.232285901904106,0.115422785282135,-0.952069759368896,0.283268004655838 ,0.194313436746597,-0.80370157957077,0.562410891056061,0.72280216217041,-0.137790024280548,0.677178680896759 ,0.76386970281601,-0.0586191527545452,0.642702758312225,0.628606140613556,-0.0929744690656662,0.77214640378952 ,0.605580151081085,-0.127637818455696,0.785481572151184,0.826119303703308,-0.120154865086079,0.550535798072815 ,0.85496574640274,-0.0235987044870853,0.518147349357605,0.76386970281601,-0.0586191527545452,0.642702758312225 ,0.72280216217041,-0.137790024280548,0.677178680896759,0.900704562664032,-0.383264392614365,0.204547420144081 ,0.916550815105438,-0.369929283857346,0.151943743228912,0.933318138122559,-0.313118785619736,0.175709679722786 ,0.903808772563934,-0.380508303642273,0.19581413269043,0.934174954891205,-0.332788705825806,0.128719761967659 ,0.926874995231628,-0.321304202079773,0.194078236818314,0.933318138122559,-0.313118785619736,0.175709679722786 ,0.916550815105438,-0.369929283857346,0.151943743228912,0.918524086475372,-0.00282709067687392,0.395354956388474 ,0.96756237745285,-0.0955442041158676,0.233868315815926,0.933318138122559,-0.313118785619736,0.175709679722786 ,0.926874995231628,-0.321304202079773,0.194078236818314,0.629800915718079,-0.358788877725601,0.68892765045166 ,0.550090253353119,-0.357467710971832,0.754730105400085,0.523068964481354,-0.400331109762192,0.752418637275696 ,0.515636503696442,-0.41490975022316,0.749645829200745,0.226486593484879,0.604172766208649,-0.76398891210556 ,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791 ,0.152718812227249,0.346232503652573,-0.925634920597076,0.962022840976715,-0.137412339448929,0.235859960317612 ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.76568216085434,0.0699278339743614,-0.639406681060791 ,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791 ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.888055205345154,-0.428246527910233,-0.167221024632454 ,0.658207952976227,-0.19222703576088,-0.727881193161011,0.152718812227249,0.346232503652573,-0.925634920597076 ,0.76568216085434,0.0699278339743614,-0.639406681060791,0.658207952976227,-0.19222703576088,-0.727881193161011 ,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.941693007946014,-0.139167279005051,-0.30634418129921 ,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.658207952976227,-0.19222703576088,-0.727881193161011 ,0.888055205345154,-0.428246527910233,-0.167221024632454,0.961935639381409,0.00657567568123341,0.273196935653687 ,0.997385084629059,0.0175571031868458,0.0701054036617279,0.987097263336182,-0.0312144737690687,0.157049849629402 ,0.947793483734131,-0.0109208915382624,0.318697780370712,0.997004151344299,-0.0145358238369226,-0.075969785451889 ,0.995871722698212,-0.0808055028319359,0.041352104395628,0.987097263336182,-0.0312144737690687,0.157049849629402 ,0.997385084629059,0.0175571031868458,0.0701054036617279,0.807750403881073,-0.224028185009956,0.545298755168915 ,0.94478839635849,-0.0280621573328972,0.326477229595184,0.949546575546265,-0.188553437590599,0.250617027282715 ,0.895655035972595,-0.253568202257156,0.365383625030518,0.691827952861786,-0.359834015369415,0.626013994216919 ,0.807750403881073,-0.224028185009956,0.545298755168915,0.895655035972595,-0.253568202257156,0.365383625030518 ,0.780404269695282,-0.392066359519959,0.487086415290833,0.651034355163574,-0.303375482559204,0.695785582065582 ,0.727879226207733,-0.243267610669136,0.641102731227875,0.807750403881073,-0.224028185009956,0.545298755168915 ,0.691827952861786,-0.359834015369415,0.626013994216919,0.921219646930695,-0.0589233264327049,0.384554862976074 ,0.94478839635849,-0.0280621573328972,0.326477229595184,0.807750403881073,-0.224028185009956,0.545298755168915 ,0.727879226207733,-0.243267610669136,0.641102731227875,0.511712968349457,-0.26713839173317,0.816570222377777 ,0.630171060562134,-0.220097869634628,0.744608163833618,0.663574039936066,-0.114788979291916,0.739251613616943 ,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943 ,0.630171060562134,-0.220097869634628,0.744608163833618,0.662703216075897,-0.235535204410553,0.710878074169159 ,0.585816919803619,-0.176041945815086,0.791092753410339,0.443824082612991,-0.204101487994194,0.872561037540436 ,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943 ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.634909212589264,-0.137729376554489,0.760211110115051 ,0.705349028110504,-0.217919707298279,0.674532234668732,0.899602174758911,-0.197590529918671,0.389453411102295 ,0.844319820404053,-0.143771529197693,0.51619154214859,0.899602174758911,-0.197590529918671,0.389453411102295 ,0.945337653160095,-0.174788698554039,0.275292009115219,0.941718637943268,-0.180898189544678,0.283622801303864 ,0.844319820404053,-0.143771529197693,0.51619154214859,0.993362247943878,-0.0349664911627769,0.109584823250771 ,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.996031820774078,-0.0883952453732491,0.0103418976068497 ,0.98517507314682,-0.0804919600486755,0.151496455073357,0.996031820774078,-0.0883952453732491,0.0103418976068497 ,0.990583539009094,-0.136551707983017,0.0098949521780014,0.98186069726944,-0.153709232807159,0.111008986830711 ,0.98517507314682,-0.0804919600486755,0.151496455073357,0.663574039936066,-0.114788979291916,0.739251613616943 ,0.585816919803619,-0.176041945815086,0.791092753410339,0.501314342021942,-0.180266559123993,0.846278846263886 ,0.655753970146179,-0.0819050073623657,0.750518679618835,0.838521242141724,-0.431514054536819,-0.332682609558105 ,0.882519364356995,-0.329183042049408,-0.335854291915894,0.918742716312408,-0.362510144710541,-0.15651923418045 ,0.828101873397827,-0.525332391262054,-0.195635288953781,0.927650630474091,-0.232570663094521,-0.292190253734589 ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.918742716312408,-0.362510144710541,-0.15651923418045 ,0.882519364356995,-0.329183042049408,-0.335854291915894,0.96362441778183,-0.210319370031357,0.16490513086319 ,0.926652431488037,-0.373704701662064,0.0407436527311802,0.918742716312408,-0.362510144710541,-0.15651923418045 ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.80888158082962,-0.583779513835907,-0.0700862184166908 ,0.828101873397827,-0.525332391262054,-0.195635288953781,0.918742716312408,-0.362510144710541,-0.15651923418045 ,0.926652431488037,-0.373704701662064,0.0407436527311802,-0.147914990782738,0.17213037610054,0.973905682563782 ,0.100095093250275,0.182193845510483,0.978154599666595,-0.0552638620138168,0.347488284111023,0.936054348945618 ,0.00455546798184514,0.298394352197647,0.954431772232056,-0.147914990782738,0.17213037610054,0.973905682563782 ,-0.220686122775078,-0.040834903717041,0.974489688873291,0.106603257358074,0.0133492052555084,0.994212031364441 ,0.100095093250275,0.182193845510483,0.978154599666595,0.970759510993958,-0.233238592743874,0.056795421987772 ,0.976300895214081,-0.175593838095665,-0.126504495739937,0.847399115562439,-0.142815440893173,-0.511388719081879 ,0.863667845726013,-0.255664467811584,-0.434411734342575,-0.0528050363063812,-0.813004612922668,0.579857885837555 ,0.270428031682968,-0.84670215845108,0.458218395709991,0.0610353648662567,-0.966653764247894,-0.248707070946693 ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.900704562664032,-0.383264392614365,0.204547420144081 ,0.893001258373261,-0.370285004377365,0.255807995796204,0.895655035972595,-0.253568202257156,0.365383625030518 ,0.949546575546265,-0.188553437590599,0.250617027282715,0.810256838798523,-0.430587977170944,0.397590130567551 ,0.780404269695282,-0.392066359519959,0.487086415290833,0.895655035972595,-0.253568202257156,0.365383625030518 ,0.893001258373261,-0.370285004377365,0.255807995796204,-0.0776756703853607,-0.921032607555389,-0.381661415100098 ,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.0610353648662567,-0.966653764247894,-0.248707070946693 ,0.0540894381701946,-0.932692110538483,-0.35659471154213,-0.0776756703853607,-0.921032607555389,-0.381661415100098 ,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0587443448603153,-0.922947645187378,-0.380416542291641 ,-0.0771657377481461,-0.907520055770874,-0.412859290838242,0.944392323493958,0.0710759162902832,0.321047365665436 ,0.991146802902222,-0.0709943845868111,0.112195692956448,0.976793885231018,-0.16974413394928,0.13061648607254 ,0.954735457897186,-0.0869630351662636,0.284460365772247,0.991146802902222,-0.0709943845868111,0.112195692956448 ,0.990583539009094,-0.136551707983017,0.0098949521780014,0.984028935432434,-0.172777280211449,0.042837880551815 ,0.976793885231018,-0.16974413394928,0.13061648607254,-0.00140566960908473,-0.234566405415535,0.97209906578064 ,0.312136799097061,-0.241864830255508,0.918733894824982,0.359973400831223,-0.258122891187668,0.896544337272644 ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.359973400831223,-0.258122891187668,0.896544337272644 ,0.402891218662262,-0.177310451865196,0.897908508777618,0.00449910387396812,-0.161412835121155,0.986876726150513 ,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.115422785282135,-0.952069759368896,0.283268004655838 ,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00267285062000155,-0.590106904506683,0.807320654392242 ,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.0416775047779083,-0.927180886268616,0.372288316488266 ,0.949846565723419,-0.197867274284363,0.242157250642776,0.96362441778183,-0.210319370031357,0.16490513086319 ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.986409723758698,-0.164261862635612,-0.00372203509323299 ,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.927650630474091,-0.232570663094521,-0.292190253734589 ,0.965724050998688,-0.163102030754089,-0.201927617192268,0.986409723758698,-0.164261862635612,-0.00372203509323299 ,0.00449910387396812,-0.161412835121155,0.986876726150513,0.402891218662262,-0.177310451865196,0.897908508777618 ,0.414358675479889,-0.126704558730125,0.901250720024109,0.0111285699531436,-0.0777815505862236,0.9969083070755 ,0.414358675479889,-0.126704558730125,0.901250720024109,0.387449771165848,-0.245748713612556,0.888532638549805 ,0.00655650394037366,-0.135652124881744,0.990734815597534,0.0111285699531436,-0.0777815505862236,0.9969083070755 ,0.928761661052704,-0.0844941884279251,0.360918909311295,0.993277549743652,-0.10496261715889,0.0488112159073353 ,0.985052049160004,-0.113364338874817,0.129696041345596,0.90520966053009,-0.162895515561104,0.392505496740341 ,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.99903529882431,-0.0258715786039829,-0.035483431071043 ,0.985052049160004,-0.113364338874817,0.129696041345596,0.993277549743652,-0.10496261715889,0.0488112159073353 ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.90520966053009,-0.162895515561104,0.392505496740341 ,0.985052049160004,-0.113364338874817,0.129696041345596,-0.529633462429047,-0.0744152963161469,-0.844956040382385 ,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.572411417961121,0.114080429077148,-0.81199187040329 ,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.426414966583252,0.120833218097687,-0.896420419216156 ,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.593829154968262,0.197740450501442,-0.77991384267807 ,-0.572411417961121,0.114080429077148,-0.81199187040329,0.677804887294769,-0.293700158596039,0.674033224582672 ,0.71972918510437,-0.325454443693161,0.613244891166687,0.659502923488617,-0.421348959207535,0.622511804103851 ,0.598259091377258,-0.415802270174026,0.684977769851685,0.918524086475372,-0.00282709067687392,0.395354956388474 ,0.952345132827759,-0.057124700397253,0.299625486135483,0.935723841190338,0.105225577950478,0.336672723293304 ,0.916476547718048,0.0582267269492149,0.395828783512115,0.952345132827759,-0.057124700397253,0.299625486135483 ,0.987058341503143,-0.0681737512350082,0.145148620009422,0.960835516452789,0.146968066692352,0.234937101602554 ,0.935723841190338,0.105225577950478,0.336672723293304,0.94987964630127,-0.0038351418916136,0.312592297792435 ,0.910945057868958,-0.218233183026314,0.35007631778717,0.980899035930634,0.0846881344914436,0.175114318728447 ,0.96669465303421,0.168093785643578,0.192991986870766,0.928288996219635,-0.0903030559420586,0.360728323459625 ,0.974559843540192,0.0402764715254307,0.220478907227516,0.980899035930634,0.0846881344914436,0.175114318728447 ,0.910945057868958,-0.218233183026314,0.35007631778717,0.949343860149384,0.194382473826408,0.246904209256172 ,0.953015685081482,0.205261945724487,0.222774803638458,0.972302615642548,0.043654702603817,0.229612305760384 ,0.94987964630127,-0.0038351418916136,0.312592297792435,0.953015685081482,0.205261945724487,0.222774803638458 ,0.970540165901184,0.124821022152901,0.206086173653603,0.966708958148956,-0.002308584516868,0.255868047475815 ,0.972302615642548,0.043654702603817,0.229612305760384,0.970540165901184,0.124821022152901,0.206086173653603 ,0.953015685081482,0.205261945724487,0.222774803638458,0.974692046642303,0.140635088086128,0.17377345263958,0.974692046642303 ,0.140635088086128,0.17377345263958,0.953015685081482,0.205261945724487,0.222774803638458,0.949343860149384,0.194382473826408 ,0.246904209256172,0.960835516452789,0.146968066692352,0.234937101602554,0.937154471874237,-0.0475939512252808 ,0.345653474330902,0.952320516109467,0.113910689949989,0.283037096261978,0.96669465303421,0.168093785643578,0.192991986870766 ,0.980852127075195,0.00218713283538818,0.194741636514664,0.952320516109467,0.113910689949989,0.283037096261978 ,0.949343860149384,0.194382473826408,0.246904209256172,0.94987964630127,-0.0038351418916136,0.312592297792435 ,0.96669465303421,0.168093785643578,0.192991986870766,-0.875516295433044,0.353666007518768,-0.329228729009628 ,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.598032653331757,0.367280632257462,-0.712363600730896 ,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.534112751483917,0.714107155799866,-0.452520221471787 ,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.875516295433044,0.353666007518768,-0.329228729009628 ,0.420062124729156,-0.858003616333008,0.295596987009048,0.562851548194885,-0.792488932609558,0.23486053943634 ,-0.032355971634388,-0.99692964553833,0.0713044255971909,-0.036917757242918,-0.99125212430954,0.126713573932648 ,0.420062124729156,-0.858003616333008,0.295596987009048,-0.036917757242918,-0.99125212430954,0.126713573932648 ,-0.021647073328495,-0.960853159427643,0.276211261749268,0.176858365535736,-0.897578120231628,0.403824985027313 ,0.838521242141724,-0.431514054536819,-0.332682609558105,0.777718842029572,-0.48187255859375,-0.403673440217972 ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.882519364356995,-0.329183042049408,-0.335854291915894 ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.777718842029572,-0.48187255859375,-0.403673440217972 ,0.756419658660889,-0.554076313972473,-0.347604215145111,0.836000919342041,-0.399822771549225,-0.375824630260468 ,0.863667845726013,-0.255664467811584,-0.434411734342575,0.867056906223297,-0.245093911886215,-0.433752596378326 ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.836000919342041,-0.399822771549225,-0.375824630260468 ,0.927650630474091,-0.232570663094521,-0.292190253734589,0.882519364356995,-0.329183042049408,-0.335854291915894 ,0.82772159576416,-0.350066870450974,-0.438554704189301,0.867056906223297,-0.245093911886215,-0.433752596378326 ,0.840808868408203,-0.369773417711258,0.395358175039291,0.920036554336548,-0.30953249335289,0.240254893898964 ,0.836000919342041,-0.399822771549225,-0.375824630260468,0.756419658660889,-0.554076313972473,-0.347604215145111 ,0.970759510993958,-0.233238592743874,0.056795421987772,0.863667845726013,-0.255664467811584,-0.434411734342575 ,0.836000919342041,-0.399822771549225,-0.375824630260468,0.920036554336548,-0.30953249335289,0.240254893898964 ,0.578185617923737,-0.0845057815313339,0.811517179012299,0.345462441444397,-0.298967152833939,0.889536023139954 ,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483 ,0.288461953401566,-0.251531571149826,0.923862278461456,0.288555771112442,-0.2911037504673,0.912137150764465 ,0.189583629369736,-0.286395132541656,0.939167618751526,0.535101175308228,-0.00626787729561329,0.844764709472656 ,0.578185617923737,-0.0845057815313339,0.811517179012299,0.288461953401566,-0.251531571149826,0.923862278461456 ,0.285702854394913,-0.151269629597664,0.946304082870483,0.748473048210144,-0.374994337558746,0.546961903572083 ,0.755906164646149,-0.2192542552948,0.616873919963837,0.409548729658127,0.024171682074666,0.911967992782593,0.64728707075119 ,-0.269912004470825,0.712858319282532,0.728204727172852,-0.0192169677466154,0.685090184211731,0.31933718919754 ,0.337111681699753,0.885652005672455,0.409548729658127,0.024171682074666,0.911967992782593,0.755906164646149 ,-0.2192542552948,0.616873919963837,0.152718812227249,0.346232503652573,-0.925634920597076,0.266787320375443 ,-0.0615599937736988,-0.961787343025208,0.611288368701935,0.178437694907188,-0.771029531955719,0.88115268945694 ,0.072045162320137,-0.467310845851898,0.710636675357819,0.109640218317509,-0.694963693618774,0.941693007946014 ,-0.139167279005051,-0.30634418129921,0.611288368701935,0.178437694907188,-0.771029531955719,0.266787320375443 ,-0.0615599937736988,-0.961787343025208,0.849067807197571,-0.235355824232101,-0.472960323095322,0.898844718933105 ,-0.132514029741287,-0.417753785848618,0.930897831916809,-0.328699737787247,0.15932896733284,0.922981798648834 ,-0.320070415735245,0.213681027293205,0.898844718933105,-0.132514029741287,-0.417753785848618,0.954277276992798 ,-0.00887809786945581,-0.298790961503983,0.921016693115234,-0.344745218753815,0.181325793266296,0.930897831916809 ,-0.328699737787247,0.15932896733284,0.619684100151062,-0.672098994255066,0.405307918787003,0.749665677547455 ,-0.55081570148468,0.366883426904678,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196 ,-0.574259579181671,0.566858351230621,0.749665677547455,-0.55081570148468,0.366883426904678,0.924175441265106 ,0.249484479427338,0.28923562169075,0.849923014640808,0.0266168173402548,0.526234149932861,0.710340082645416 ,-0.399401605129242,0.57956475019455,0.837971806526184,-0.0177910327911377,0.545423448085785,0.812450289726257 ,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257 ,-0.238335385918617,0.532090902328491,0.718032777309418,-0.160360962152481,0.677283763885498,0.442805558443069 ,-0.711188673973084,0.546016395092011,0.442805558443069,-0.711188673973084,0.546016395092011,0.648021519184113 ,-0.726138114929199,0.229764148592949,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257 ,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.648021519184113 ,-0.726138114929199,0.229764148592949,0.770939111709595,-0.636473119258881,0.0235556345432997,0.908649146556854 ,-0.308447659015656,0.281454712152481,0.837971806526184,-0.0177910327911377,0.545423448085785,0.877821445465088 ,-0.28317603468895,0.386317104101181,0.908649146556854,-0.308447659015656,0.281454712152481,0.883517026901245 ,-0.041202936321497,0.46658331155777,0.955420434474945,-0.273161262273788,-0.112047769129276,0.819948792457581 ,-0.482310354709625,0.308319211006165,0.81360274553299,-0.323832809925079,0.482890188694,0.81360274553299,-0.323832809925079 ,0.482890188694,0.819948792457581,-0.482310354709625,0.308319211006165,0.776369571685791,-0.530167698860168,0.340840935707092 ,0.770434737205505,-0.328132152557373,0.546589076519012,0.856838226318359,0.0312061347067356,0.514640152454376 ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.928679704666138,-0.214017242193222,0.30290362238884 ,0.856838226318359,0.0312061347067356,0.514640152454376,0.930178761482239,0.315359890460968,0.187924444675446 ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.856838226318359,0.0312061347067356,0.514640152454376 ,0.732805073261261,0.230000048875809,0.640387892723084,0.930178761482239,0.315359890460968,0.187924444675446 ,0.766620635986328,-0.390746057033539,-0.509519696235657,-0.137073755264282,-0.758140206336975,-0.637521922588348 ,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.719214975833893,-0.430595219135284,-0.545268356800079 ,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.361367613077164,-0.930869936943054,0.0538017079234123 ,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.137073755264282,-0.758140206336975,-0.637521922588348 ,0.442805558443069,-0.711188673973084,0.546016395092011,0.494343549013138,-0.783010900020599,0.377516150474548 ,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.361367613077164,-0.930869936943054,0.0538017079234123 ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.719214975833893,-0.430595219135284,-0.545268356800079 ,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.494343549013138,-0.783010900020599,0.377516150474548 ,0.442805558443069,-0.711188673973084,0.546016395092011,0.718032777309418,-0.160360962152481,0.677283763885498 ,0.494343549013138,-0.783010900020599,0.377516150474548,0.746549785137177,0.0205342527478933,0.665012657642365 ,0.785623669624329,-0.0282825529575348,0.61805784702301,0.718032777309418,-0.160360962152481,0.677283763885498 ,0.928761661052704,-0.0844941884279251,0.360918909311295,0.90520966053009,-0.162895515561104,0.392505496740341 ,0.718032777309418,-0.160360962152481,0.677283763885498,0.785623669624329,-0.0282825529575348,0.61805784702301 ,0.940188527107239,-0.340047240257263,0.0203306917101145,0.494343549013138,-0.783010900020599,0.377516150474548 ,0.718032777309418,-0.160360962152481,0.677283763885498,0.90520966053009,-0.162895515561104,0.392505496740341 ,0.728204727172852,-0.0192169677466154,0.685090184211731,0.683746635913849,0.227861896157265,0.693231225013733 ,0.220439016819,0.602273344993591,0.767250597476959,0.31933718919754,0.337111681699753,0.885652005672455,0.675026595592499 ,0.510915398597717,0.532263576984406,0.164532527327538,0.859674274921417,0.483620911836624,0.220439016819,0.602273344993591 ,0.767250597476959,0.683746635913849,0.227861896157265,0.693231225013733,0.164532527327538,0.859674274921417 ,0.483620911836624,0.675026595592499,0.510915398597717,0.532263576984406,0.689203560352325,0.677581548690796 ,0.256674349308014,0.168165519833565,0.971532881259918,0.166865915060043,0.164532527327538,0.859674274921417 ,0.483620911836624,0.168165519833565,0.971532881259918,0.166865915060043,-0.482280492782593,0.875927150249481 ,0.0125399529933929,-0.407276064157486,0.876896381378174,0.255301624536514,-0.598032653331757,0.367280632257462 ,-0.712363600730896,-0.560936093330383,0.519313037395477,-0.644720613956451,0.0532629415392876,0.673361361026764 ,-0.737392425537109,0.0157992169260979,0.392201274633408,-0.919743716716766,-0.534112751483917,0.714107155799866 ,-0.452520221471787,0.130885064601898,0.893452942371368,-0.429663747549057,0.0532629415392876,0.673361361026764 ,-0.737392425537109,-0.560936093330383,0.519313037395477,-0.644720613956451,0.771966874599457,0.597103416919708 ,-0.218024387955666,0.77188766002655,0.415448874235153,-0.481239676475525,0.0532629415392876,0.673361361026764 ,-0.737392425537109,0.130885064601898,0.893452942371368,-0.429663747549057,0.743491053581238,0.170196279883385 ,-0.64672577381134,0.0157992169260979,0.392201274633408,-0.919743716716766,0.0532629415392876,0.673361361026764 ,-0.737392425537109,0.77188766002655,0.415448874235153,-0.481239676475525,0.715653717517853,-0.159719884395599 ,-0.679948031902313,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.00643475539982319,0.176812067627907 ,-0.984223604202271,0.720991909503937,-0.0311141833662987,-0.692244589328766,-0.593829154968262,0.197740450501442 ,-0.77991384267807,-0.611508309841156,0.264030992984772,-0.7458855509758,0.00643475539982319,0.176812067627907 ,-0.984223604202271,0.0297790002077818,0.0396078526973724,-0.99877142906189,-0.598032653331757,0.367280632257462 ,-0.712363600730896,0.0157992169260979,0.392201274633408,-0.919743716716766,0.00643475539982319,0.176812067627907 ,-0.984223604202271,-0.611508309841156,0.264030992984772,-0.7458855509758,0.743491053581238,0.170196279883385 ,-0.64672577381134,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.00643475539982319,0.176812067627907 ,-0.984223604202271,0.0157992169260979,0.392201274633408,-0.919743716716766,0.789831042289734,-0.580399453639984 ,-0.198251023888588,0.10502952337265,-0.714195668697357,-0.692021250724792,0.152815148234367,-0.51164585351944 ,-0.845497488975525,0.768442690372467,-0.500588834285736,-0.398631006479263,-0.690630912780762,-0.290166169404984 ,-0.662444412708282,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.152815148234367,-0.51164585351944 ,-0.845497488975525,0.10502952337265,-0.714195668697357,-0.692021250724792,-0.568153619766235,-0.0387567244470119 ,-0.822009384632111,0.129408821463585,-0.283919304609299,-0.950075387954712,0.152815148234367,-0.51164585351944 ,-0.845497488975525,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.741453766822815,-0.373992174863815 ,-0.557114124298096,0.768442690372467,-0.500588834285736,-0.398631006479263,0.152815148234367,-0.51164585351944 ,-0.845497488975525,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.609373271465302,-0.198937028646469 ,-0.767520844936371,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.529633462429047,-0.0744152963161469 ,-0.844956040382385,-0.568153619766235,-0.0387567244470119,-0.822009384632111,0.442805558443069,-0.711188673973084 ,0.546016395092011,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655 ,-0.117775782942772,0.648021519184113,-0.726138114929199,0.229764148592949,-0.797735512256622,-0.550144195556641 ,-0.246899589896202,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.13529472053051,-0.983780562877655 ,-0.117775782942772,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655 ,-0.117775782942772,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.748543560504913,-0.365974009037018 ,-0.55294269323349,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.648021519184113,-0.726138114929199 ,0.229764148592949,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.0209639705717564,-0.893982887268066 ,-0.44761049747467,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0486728809773922,-0.68095201253891 ,-0.730708718299866,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.797735512256622,-0.550144195556641 ,-0.246899589896202,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.621009290218353,-0.361309498548508 ,-0.695559442043304,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.773767530918121,-0.490831345319748 ,-0.400460213422775,0.728204727172852,-0.0192169677466154,0.685090184211731,0.755906164646149,-0.2192542552948 ,0.616873919963837,0.91906201839447,-0.39140060544014,0.0461581349372864,0.893281400203705,-0.428035885095596 ,0.137235671281815,0.748473048210144,-0.374994337558746,0.546961903572083,0.937642931938171,-0.346572607755661 ,0.0267044957727194,0.91906201839447,-0.39140060544014,0.0461581349372864,0.755906164646149,-0.2192542552948 ,0.616873919963837,0.845922708511353,-0.200713187456131,-0.494094133377075,0.75577849149704,-0.394848763942719 ,-0.52239191532135,0.91906201839447,-0.39140060544014,0.0461581349372864,0.937642931938171,-0.346572607755661 ,0.0267044957727194,0.653988599777222,-0.593074798583984,-0.469639420509338,0.893281400203705,-0.428035885095596 ,0.137235671281815,0.91906201839447,-0.39140060544014,0.0461581349372864,0.75577849149704,-0.394848763942719 ,-0.52239191532135,0.675026595592499,0.510915398597717,0.532263576984406,0.683746635913849,0.227861896157265 ,0.693231225013733,0.882562458515167,-0.37857860326767,0.278857797384262,0.914948225021362,-0.193324074149132 ,0.354253560304642,0.728204727172852,-0.0192169677466154,0.685090184211731,0.893281400203705,-0.428035885095596 ,0.137235671281815,0.882562458515167,-0.37857860326767,0.278857797384262,0.683746635913849,0.227861896157265 ,0.693231225013733,0.653988599777222,-0.593074798583984,-0.469639420509338,0.576260924339294,-0.753080308437347 ,-0.317479759454727,0.882562458515167,-0.37857860326767,0.278857797384262,0.893281400203705,-0.428035885095596 ,0.137235671281815,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.914948225021362,-0.193324074149132 ,0.354253560304642,0.882562458515167,-0.37857860326767,0.278857797384262,0.576260924339294,-0.753080308437347 ,-0.317479759454727,0.625812768936157,-0.514012217521667,0.586642861366272,0.568605542182922,-0.712091386318207 ,0.411841779947281,0.699254095554352,-0.603147983551025,0.383739799261093,0.726148188114166,-0.493182122707367 ,0.479040950536728,0.625812768936157,-0.514012217521667,0.586642861366272,0.726148188114166,-0.493182122707367 ,0.479040950536728,0.748473048210144,-0.374994337558746,0.546961903572083,0.64728707075119,-0.269912004470825 ,0.712858319282532,0.748473048210144,-0.374994337558746,0.546961903572083,0.726148188114166,-0.493182122707367 ,0.479040950536728,0.946356475353241,-0.319671094417572,0.0471152737736702,0.937642931938171,-0.346572607755661 ,0.0267044957727194,0.699254095554352,-0.603147983551025,0.383739799261093,0.951302230358124,-0.298469483852386 ,0.0770719945430756,0.946356475353241,-0.319671094417572,0.0471152737736702,0.726148188114166,-0.493182122707367 ,0.479040950536728,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418 ,-0.411545008420944,0.946356475353241,-0.319671094417572,0.0471152737736702,0.951302230358124,-0.298469483852386 ,0.0770719945430756,0.845922708511353,-0.200713187456131,-0.494094133377075,0.937642931938171,-0.346572607755661 ,0.0267044957727194,0.946356475353241,-0.319671094417572,0.0471152737736702,0.911007940769196,-0.0263682082295418 ,-0.411545008420944,0.433967679738998,-0.800836622714996,0.412713944911957,0.568605542182922,-0.712091386318207 ,0.411841779947281,0.620464503765106,-0.659890949726105,0.42375436425209,0.433967679738998,-0.800836622714996 ,0.412713944911957,0.620464503765106,-0.659890949726105,0.42375436425209,0.552745521068573,-0.585487604141235 ,0.593023300170898,0.54015976190567,-0.714601397514343,0.444490998983383,0.433967679738998,-0.800836622714996 ,0.412713944911957,0.54015976190567,-0.714601397514343,0.444490998983383,0.764377176761627,-0.598457217216492 ,0.239951074123383,0.693809986114502,-0.652198612689972,0.305392682552338,0.433967679738998,-0.800836622714996 ,0.412713944911957,0.693809986114502,-0.652198612689972,0.305392682552338,0.699254095554352,-0.603147983551025 ,0.383739799261093,0.568605542182922,-0.712091386318207,0.411841779947281,0.764377176761627,-0.598457217216492 ,0.239951074123383,0.968429863452911,-0.214592844247818,0.126860067248344,0.957345426082611,-0.272242695093155 ,0.0968175828456879,0.693809986114502,-0.652198612689972,0.305392682552338,0.881676495075226,0.461544960737228 ,0.0980962067842484,0.932843506336212,0.333851307630539,-0.135448768734932,0.957345426082611,-0.272242695093155 ,0.0968175828456879,0.968429863452911,-0.214592844247818,0.126860067248344,0.942937254905701,0.154236450791359 ,-0.295093923807144,0.951302230358124,-0.298469483852386,0.0770719945430756,0.957345426082611,-0.272242695093155 ,0.0968175828456879,0.932843506336212,0.333851307630539,-0.135448768734932,0.699254095554352,-0.603147983551025 ,0.383739799261093,0.693809986114502,-0.652198612689972,0.305392682552338,0.957345426082611,-0.272242695093155 ,0.0968175828456879,0.951302230358124,-0.298469483852386,0.0770719945430756,0.620464503765106,-0.659890949726105 ,0.42375436425209,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327 ,0.743466079235077,-0.337065368890762,0.577620208263397,0.699970245361328,0.172705575823784,-0.692975103855133 ,0.710636675357819,0.109640218317509,-0.694963693618774,0.937653958797455,-0.289538353681564,0.192282542586327 ,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327 ,0.710636675357819,0.109640218317509,-0.694963693618774,0.88115268945694,0.072045162320137,-0.467310845851898 ,0.973303020000458,-0.0122882071882486,0.229194864630699,0.743466079235077,-0.337065368890762,0.577620208263397 ,0.937653958797455,-0.289538353681564,0.192282542586327,0.973303020000458,-0.0122882071882486,0.229194864630699 ,0.740522563457489,0.0606227926909924,0.6692915558815,0.636911451816559,-0.300338536500931,0.71002858877182,0.743466079235077 ,-0.337065368890762,0.577620208263397,0.740522563457489,0.0606227926909924,0.6692915558815,0.590947866439819 ,0.059150405228138,0.804538309574127,0.636911451816559,-0.300338536500931,0.71002858877182,0.590947866439819 ,0.059150405228138,0.804538309574127,0.520368456840515,0.258096873760223,0.814004063606262,0.686343193054199 ,0.200842931866646,0.698995769023895,0.810089349746704,-0.185254707932472,0.556269705295563,0.54015976190567 ,-0.714601397514343,0.444490998983383,0.552745521068573,-0.585487604141235,0.593023300170898,0.636911451816559 ,-0.300338536500931,0.71002858877182,0.810089349746704,-0.185254707932472,0.556269705295563,0.772665083408356 ,-0.529866874217987,0.349613666534424,0.620464503765106,-0.659890949726105,0.42375436425209,0.743466079235077 ,-0.337065368890762,0.577620208263397,0.636911451816559,-0.300338536500931,0.71002858877182,0.552745521068573 ,-0.585487604141235,0.593023300170898,0.870513737201691,-0.304842829704285,0.386363327503204,0.89732414484024 ,-0.179725483059883,0.403122931718826,0.968429863452911,-0.214592844247818,0.126860067248344,0.764377176761627 ,-0.598457217216492,0.239951074123383,0.89732414484024,-0.179725483059883,0.403122931718826,0.849923014640808 ,0.0266168173402548,0.526234149932861,0.881676495075226,0.461544960737228,0.0980962067842484,0.968429863452911 ,-0.214592844247818,0.126860067248344,0.611288368701935,0.178437694907188,-0.771029531955719,0.930164098739624 ,0.356697469949722,0.0869576334953308,0.973303020000458,-0.0122882071882486,0.229194864630699,0.88115268945694 ,0.072045162320137,-0.467310845851898,0.66197681427002,0.379794925451279,0.646175265312195,0.740522563457489 ,0.0606227926909924,0.6692915558815,0.973303020000458,-0.0122882071882486,0.229194864630699,0.930164098739624 ,0.356697469949722,0.0869576334953308,0.611288368701935,0.178437694907188,-0.771029531955719,0.941693007946014 ,-0.139167279005051,-0.30634418129921,0.930178761482239,0.315359890460968,0.187924444675446,0.930164098739624 ,0.356697469949722,0.0869576334953308,0.930178761482239,0.315359890460968,0.187924444675446,0.732805073261261 ,0.230000048875809,0.640387892723084,0.66197681427002,0.379794925451279,0.646175265312195,0.930164098739624,0.356697469949722 ,0.0869576334953308,0.664898633956909,-0.325722575187683,0.672171533107758,0.683038532733917,-0.228187322616577 ,0.693821907043457,0.974376916885376,-0.212370634078979,0.0740836188197136,0.977968633174896,-0.17539019882679 ,0.113206177949905,0.717738389968872,-0.173748686909676,0.674287021160126,0.967301428318024,-0.248277440667152 ,0.0518288649618626,0.974376916885376,-0.212370634078979,0.0740836188197136,0.683038532733917,-0.228187322616577 ,0.693821907043457,0.715653717517853,-0.159719884395599,-0.679948031902313,0.720991909503937,-0.0311141833662987 ,-0.692244589328766,0.974376916885376,-0.212370634078979,0.0740836188197136,0.967301428318024,-0.248277440667152 ,0.0518288649618626,0.743491053581238,0.170196279883385,-0.64672577381134,0.977968633174896,-0.17539019882679 ,0.113206177949905,0.974376916885376,-0.212370634078979,0.0740836188197136,0.720991909503937,-0.0311141833662987 ,-0.692244589328766,0.661345362663269,-0.681172966957092,0.314047187566757,0.66036581993103,-0.495232194662094 ,0.564501583576202,0.975407660007477,-0.161730393767357,0.149743661284447,0.979921102523804,-0.156960278749466 ,0.122955821454525,0.664898633956909,-0.325722575187683,0.672171533107758,0.977968633174896,-0.17539019882679 ,0.113206177949905,0.975407660007477,-0.161730393767357,0.149743661284447,0.66036581993103,-0.495232194662094 ,0.564501583576202,0.743491053581238,0.170196279883385,-0.64672577381134,0.77188766002655,0.415448874235153,-0.481239676475525 ,0.975407660007477,-0.161730393767357,0.149743661284447,0.977968633174896,-0.17539019882679,0.113206177949905 ,0.771966874599457,0.597103416919708,-0.218024387955666,0.979921102523804,-0.156960278749466,0.122955821454525 ,0.975407660007477,-0.161730393767357,0.149743661284447,0.77188766002655,0.415448874235153,-0.481239676475525 ,0.834912359714508,-0.36245208978653,0.414185792207718,0.84412956237793,-0.267634004354477,0.464561402797699 ,0.664898633956909,-0.325722575187683,0.672171533107758,0.66036581993103,-0.495232194662094,0.564501583576202 ,0.834912359714508,-0.36245208978653,0.414185792207718,0.66036581993103,-0.495232194662094,0.564501583576202 ,0.661345362663269,-0.681172966957092,0.314047187566757,0.813187956809998,-0.535195648670197,0.228672236204147 ,0.664898633956909,-0.325722575187683,0.672171533107758,0.84412956237793,-0.267634004354477,0.464561402797699 ,0.873907625675201,-0.238707512617111,0.423443168401718,0.683038532733917,-0.228187322616577,0.693821907043457 ,0.873907625675201,-0.238707512617111,0.423443168401718,0.905476927757263,-0.224815160036087,0.359957873821259 ,0.717738389968872,-0.173748686909676,0.674287021160126,0.683038532733917,-0.228187322616577,0.693821907043457 ,0.921016693115234,-0.344745218753815,0.181325793266296,0.954277276992798,-0.00887809786945581,-0.298790961503983 ,0.982178807258606,0.114838123321533,-0.148785173892975,0.987944602966309,0.0211450234055519,0.153357028961182 ,0.991854608058929,0.119089640676975,0.0451894104480743,0.919128894805908,0.0630135238170624,0.388884782791138 ,0.987944602966309,0.0211450234055519,0.153357028961182,0.982178807258606,0.114838123321533,-0.148785173892975 ,0.991854608058929,0.119089640676975,0.0451894104480743,0.982178807258606,0.114838123321533,-0.148785173892975 ,0.834912359714508,-0.36245208978653,0.414185792207718,0.813187956809998,-0.535195648670197,0.228672236204147 ,0.982178807258606,0.114838123321533,-0.148785173892975,0.954277276992798,-0.00887809786945581,-0.298790961503983 ,0.84412956237793,-0.267634004354477,0.464561402797699,0.834912359714508,-0.36245208978653,0.414185792207718 ,0.597383677959442,-0.186877384781837,0.779877960681915,0.636335551738739,-0.147832229733467,0.757114708423615 ,0.906243920326233,-0.301860004663467,0.29597732424736,0.922981798648834,-0.320070415735245,0.213681027293205 ,0.636335551738739,-0.147832229733467,0.757114708423615,0.671223521232605,-0.0201855413615704,0.74098014831543 ,0.900076270103455,-0.156032308936119,0.406837373971939,0.906243920326233,-0.301860004663467,0.29597732424736 ,0.987944602966309,0.0211450234055519,0.153357028961182,0.7646564245224,-0.170687139034271,0.62142288684845,0.699551403522491 ,-0.470909416675568,0.537468254566193,0.921016693115234,-0.344745218753815,0.181325793266296,0.919128894805908 ,0.0630135238170624,0.388884782791138,0.7646564245224,-0.170687139034271,0.62142288684845,0.987944602966309,0.0211450234055519 ,0.153357028961182,0.671223521232605,-0.0201855413615704,0.74098014831543,0.636335551738739,-0.147832229733467 ,0.757114708423615,0.89732414484024,-0.179725483059883,0.403122931718826,0.870513737201691,-0.304842829704285 ,0.386363327503204,0.636335551738739,-0.147832229733467,0.757114708423615,0.597383677959442,-0.186877384781837 ,0.779877960681915,0.849923014640808,0.0266168173402548,0.526234149932861,0.89732414484024,-0.179725483059883 ,0.403122931718826,0.619684100151062,-0.672098994255066,0.405307918787003,0.590675473213196,-0.574259579181671 ,0.566858351230621,0.921016693115234,-0.344745218753815,0.181325793266296,0.699551403522491,-0.470909416675568 ,0.537468254566193,0.878716766834259,-0.421581953763962,0.223887145519257,0.776369571685791,-0.530167698860168 ,0.340840935707092,0.906263113021851,-0.354522317647934,0.230219781398773,0.805564939975739,-0.533806264400482 ,0.257130265235901,0.988399267196655,0.136643067002296,-0.0662992894649506,0.924175441265106,0.249484479427338 ,0.28923562169075,0.749665677547455,-0.55081570148468,0.366883426904678,0.619684100151062,-0.672098994255066 ,0.405307918787003,0.67726731300354,-0.631388366222382,0.377700597047806,0.805564939975739,-0.533806264400482 ,0.257130265235901,0.749665677547455,-0.55081570148468,0.366883426904678,0.932843506336212,0.333851307630539 ,-0.135448768734932,0.881676495075226,0.461544960737228,0.0980962067842484,0.924175441265106,0.249484479427338 ,0.28923562169075,0.988399267196655,0.136643067002296,-0.0662992894649506,0.932843506336212,0.333851307630539 ,-0.135448768734932,0.988399267196655,0.136643067002296,-0.0662992894649506,0.975082695484161,0.0550070591270924 ,-0.214913904666901,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418 ,-0.411545008420944,0.942937254905701,0.154236450791359,-0.295093923807144,0.975082695484161,0.0550070591270924 ,-0.214913904666901,0.958627998828888,-0.06352149695158,-0.277483999729156,0.911007940769196,-0.0263682082295418 ,-0.411545008420944,0.958627998828888,-0.06352149695158,-0.277483999729156,0.955420434474945,-0.273161262273788 ,-0.112047769129276,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788 ,-0.112047769129276,0.958627998828888,-0.06352149695158,-0.277483999729156,0.906263113021851,-0.354522317647934 ,0.230219781398773,0.819948792457581,-0.482310354709625,0.308319211006165,0.975082695484161,0.0550070591270924 ,-0.214913904666901,0.878716766834259,-0.421581953763962,0.223887145519257,0.906263113021851,-0.354522317647934 ,0.230219781398773,0.958627998828888,-0.06352149695158,-0.277483999729156,0.776369571685791,-0.530167698860168 ,0.340840935707092,0.819948792457581,-0.482310354709625,0.308319211006165,0.906263113021851,-0.354522317647934 ,0.230219781398773,0.831347465515137,-0.304245948791504,-0.465076088905334,0.855084657669067,-0.451219111680985 ,-0.255404502153397,0.653988599777222,-0.593074798583984,-0.469639420509338,0.75577849149704,-0.394848763942719 ,-0.52239191532135,0.831347465515137,-0.304245948791504,-0.465076088905334,0.75577849149704,-0.394848763942719 ,-0.52239191532135,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788 ,-0.112047769129276,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731 ,0.300438493490219,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.576260924339294,-0.753080308437347 ,-0.317479759454727,0.739733874797821,-0.650235652923584,-0.173168674111366,0.576260924339294,-0.753080308437347 ,-0.317479759454727,0.653988599777222,-0.593074798583984,-0.469639420509338,0.855084657669067,-0.451219111680985 ,-0.255404502153397,0.654792129993439,-0.747980833053589,0.108498655259609,0.589496672153473,-0.806856513023376 ,-0.0384224876761436,0.718589425086975,-0.627188920974731,0.300438493490219,0.726504981517792,-0.654014825820923 ,0.210843905806541,0.689203560352325,0.677581548690796,0.256674349308014,0.966807126998901,-0.0426941066980362 ,0.251915037631989,0.989448130130768,-0.0820280760526657,0.119431190192699,0.732895731925964,0.679829776287079 ,0.0263686496764421,0.654792129993439,-0.747980833053589,0.108498655259609,0.673599064350128,-0.729973196983337 ,0.115772970020771,0.989448130130768,-0.0820280760526657,0.119431190192699,0.966807126998901,-0.0426941066980362 ,0.251915037631989,0.661345362663269,-0.681172966957092,0.314047187566757,0.979921102523804,-0.156960278749466 ,0.122955821454525,0.989448130130768,-0.0820280760526657,0.119431190192699,0.673599064350128,-0.729973196983337 ,0.115772970020771,0.771966874599457,0.597103416919708,-0.218024387955666,0.732895731925964,0.679829776287079 ,0.0263686496764421,0.989448130130768,-0.0820280760526657,0.119431190192699,0.979921102523804,-0.156960278749466 ,0.122955821454525,0.966807126998901,-0.0426941066980362,0.251915037631989,0.689203560352325,0.677581548690796 ,0.256674349308014,0.675026595592499,0.510915398597717,0.532263576984406,0.914948225021362,-0.193324074149132 ,0.354253560304642,0.966807126998901,-0.0426941066980362,0.251915037631989,0.914948225021362,-0.193324074149132 ,0.354253560304642,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.654792129993439,-0.747980833053589 ,0.108498655259609,0.789831042289734,-0.580399453639984,-0.198251023888588,0.932135164737701,-0.321184366941452 ,0.167226210236549,0.908649146556854,-0.308447659015656,0.281454712152481,0.770939111709595,-0.636473119258881 ,0.0235556345432997,0.909835636615753,-0.0349062643945217,0.413498103618622,0.883517026901245,-0.041202936321497 ,0.46658331155777,0.908649146556854,-0.308447659015656,0.281454712152481,0.932135164737701,-0.321184366941452 ,0.167226210236549,0.909835636615753,-0.0349062643945217,0.413498103618622,0.932135164737701,-0.321184366941452 ,0.167226210236549,0.947174549102783,-0.313290327787399,0.0686262398958206,0.903367161750793,-0.021636750549078 ,0.428321927785873,0.789831042289734,-0.580399453639984,-0.198251023888588,0.768442690372467,-0.500588834285736 ,-0.398631006479263,0.947174549102783,-0.313290327787399,0.0686262398958206,0.932135164737701,-0.321184366941452 ,0.167226210236549,0.741453766822815,-0.373992174863815,-0.557114124298096,0.959232211112976,-0.282177299261093 ,0.015797957777977,0.947174549102783,-0.313290327787399,0.0686262398958206,0.768442690372467,-0.500588834285736 ,-0.398631006479263,0.85181188583374,-0.0614667385816574,0.52022910118103,0.903367161750793,-0.021636750549078 ,0.428321927785873,0.947174549102783,-0.313290327787399,0.0686262398958206,0.959232211112976,-0.282177299261093 ,0.015797957777977,0.909835636615753,-0.0349062643945217,0.413498103618622,0.903367161750793,-0.021636750549078 ,0.428321927785873,0.936789333820343,-0.0987404808402061,0.335672438144684,0.917440295219421,-0.101929731667042 ,0.384595423936844,0.903367161750793,-0.021636750549078,0.428321927785873,0.85181188583374,-0.0614667385816574 ,0.52022910118103,0.96601414680481,-0.199814081192017,0.163984462618828,0.936789333820343,-0.0987404808402061 ,0.335672438144684,0.788077771663666,0.0518888607621193,0.61338484287262,0.669167935848236,0.129631534218788 ,0.731717109680176,0.808598875999451,0.0304549541324377,0.587571620941162,0.869269788265228,-0.0789045765995979 ,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.837971806526184,-0.0177910327911377 ,0.545423448085785,0.883517026901245,-0.041202936321497,0.46658331155777,0.869269788265228,-0.0789045765995979 ,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.746549785137177,0.0205342527478933 ,0.665012657642365,0.837971806526184,-0.0177910327911377,0.545423448085785,0.81360274553299,-0.323832809925079 ,0.482890188694,0.770434737205505,-0.328132152557373,0.546589076519012,0.78486180305481,-0.111138336360455,0.60962301492691 ,0.883532881736755,-0.151341363787651,0.443244278430939,0.886961340904236,-0.0727596655488014,0.456076264381409 ,0.831347465515137,-0.304245948791504,-0.465076088905334,0.955420434474945,-0.273161262273788,-0.112047769129276 ,0.81360274553299,-0.323832809925079,0.482890188694,0.886961340904236,-0.0727596655488014,0.456076264381409,0.855084657669067 ,-0.451219111680985,-0.255404502153397,0.770434737205505,-0.328132152557373,0.546589076519012,0.724820017814636 ,-0.392161190509796,0.566432297229767,0.733931958675385,-0.110008127987385,0.670255243778229,0.78486180305481 ,-0.111138336360455,0.60962301492691,0.724820017814636,-0.392161190509796,0.566432297229767,0.699551403522491 ,-0.470909416675568,0.537468254566193,0.7646564245224,-0.170687139034271,0.62142288684845,0.733931958675385,-0.110008127987385 ,0.670255243778229,0.919128894805908,0.0630135238170624,0.388884782791138,0.815926849842072,-0.0521769113838673 ,0.575795948505402,0.733931958675385,-0.110008127987385,0.670255243778229,0.7646564245224,-0.170687139034271 ,0.62142288684845,0.718589425086975,-0.627188920974731,0.300438493490219,0.78486180305481,-0.111138336360455 ,0.60962301492691,0.733931958675385,-0.110008127987385,0.670255243778229,0.815926849842072,-0.0521769113838673 ,0.575795948505402,0.900076270103455,-0.156032308936119,0.406837373971939,0.889522910118103,-0.00140424643177539 ,0.456888437271118,0.936789333820343,-0.0987404808402061,0.335672438144684,0.96601414680481,-0.199814081192017 ,0.163984462618828,0.889522910118103,-0.00140424643177539,0.456888437271118,0.867614150047302,0.0466058775782585 ,0.495049089193344,0.917440295219421,-0.101929731667042,0.384595423936844,0.936789333820343,-0.0987404808402061 ,0.335672438144684,0.869269788265228,-0.0789045765995979,0.488000065088272,0.917440295219421,-0.101929731667042 ,0.384595423936844,0.867614150047302,0.0466058775782585,0.495049089193344,0.788077771663666,0.0518888607621193 ,0.61338484287262,0.724820017814636,-0.392161190509796,0.566432297229767,0.770434737205505,-0.328132152557373 ,0.546589076519012,0.776369571685791,-0.530167698860168,0.340840935707092,0.67726731300354,-0.631388366222382 ,0.377700597047806,0.619684100151062,-0.672098994255066,0.405307918787003,0.699551403522491,-0.470909416675568 ,0.537468254566193,0.724820017814636,-0.392161190509796,0.566432297229767,0.67726731300354,-0.631388366222382 ,0.377700597047806,0.66197681427002,0.379794925451279,0.646175265312195,0.732805073261261,0.230000048875809,0.640387892723084 ,0.669167935848236,0.129631534218788,0.731717109680176,0.520368456840515,0.258096873760223,0.814004063606262 ,0.520368456840515,0.258096873760223,0.814004063606262,0.669167935848236,0.129631534218788,0.731717109680176 ,0.788077771663666,0.0518888607621193,0.61338484287262,0.686343193054199,0.200842931866646,0.698995769023895 ,0.671223521232605,-0.0201855413615704,0.74098014831543,0.870513737201691,-0.304842829704285,0.386363327503204 ,0.858721911907196,-0.0560792721807957,0.509364068508148,0.698842525482178,0.18292909860611,0.691488325595856 ,0.74112343788147,0.26722252368927,0.615896224975586,0.698842525482178,0.18292909860611,0.691488325595856,0.858721911907196 ,-0.0560792721807957,0.509364068508148,0.74112343788147,0.26722252368927,0.615896224975586,0.858721911907196 ,-0.0560792721807957,0.509364068508148,0.810089349746704,-0.185254707932472,0.556269705295563,0.686343193054199 ,0.200842931866646,0.698995769023895,0.870513737201691,-0.304842829704285,0.386363327503204,0.772665083408356 ,-0.529866874217987,0.349613666534424,0.810089349746704,-0.185254707932472,0.556269705295563,0.858721911907196 ,-0.0560792721807957,0.509364068508148,0.906243920326233,-0.301860004663467,0.29597732424736,0.900076270103455 ,-0.156032308936119,0.406837373971939,0.96601414680481,-0.199814081192017,0.163984462618828,0.854979157447815 ,-0.303726255893707,-0.420429587364197,0.906243920326233,-0.301860004663467,0.29597732424736,0.854979157447815 ,-0.303726255893707,-0.420429587364197,0.849067807197571,-0.235355824232101,-0.472960323095322,0.922981798648834 ,-0.320070415735245,0.213681027293205,0.84412956237793,-0.267634004354477,0.464561402797699,0.954277276992798 ,-0.00887809786945581,-0.298790961503983,0.898844718933105,-0.132514029741287,-0.417753785848618,0.873907625675201 ,-0.238707512617111,0.423443168401718,0.898844718933105,-0.132514029741287,-0.417753785848618,0.849067807197571 ,-0.235355824232101,-0.472960323095322,0.905476927757263,-0.224815160036087,0.359957873821259,0.873907625675201 ,-0.238707512617111,0.423443168401718,0.934250891208649,-0.198644295334816,0.296168446540833,0.905476927757263 ,-0.224815160036087,0.359957873821259,0.849067807197571,-0.235355824232101,-0.472960323095322,0.854979157447815 ,-0.303726255893707,-0.420429587364197,0.96601414680481,-0.199814081192017,0.163984462618828,0.934250891208649 ,-0.198644295334816,0.296168446540833,0.854979157447815,-0.303726255893707,-0.420429587364197,0.717738389968872 ,-0.173748686909676,0.674287021160126,0.905476927757263,-0.224815160036087,0.359957873821259,0.934250891208649 ,-0.198644295334816,0.296168446540833,0.778299868106842,-0.129949271678925,0.614298403263092,0.934250891208649 ,-0.198644295334816,0.296168446540833,0.96601414680481,-0.199814081192017,0.163984462618828,0.85181188583374 ,-0.0614667385816574,0.52022910118103,0.778299868106842,-0.129949271678925,0.614298403263092,0.715653717517853 ,-0.159719884395599,-0.679948031902313,0.967301428318024,-0.248277440667152,0.0518288649618626,0.963969707489014 ,-0.265031158924103,0.0228220708668232,0.722632110118866,-0.252884060144424,-0.643313705921173,0.717738389968872 ,-0.173748686909676,0.674287021160126,0.778299868106842,-0.129949271678925,0.614298403263092,0.963969707489014 ,-0.265031158924103,0.0228220708668232,0.967301428318024,-0.248277440667152,0.0518288649618626,0.85181188583374 ,-0.0614667385816574,0.52022910118103,0.959232211112976,-0.282177299261093,0.015797957777977,0.963969707489014 ,-0.265031158924103,0.0228220708668232,0.778299868106842,-0.129949271678925,0.614298403263092,0.741453766822815 ,-0.373992174863815,-0.557114124298096,0.722632110118866,-0.252884060144424,-0.643313705921173,0.963969707489014 ,-0.265031158924103,0.0228220708668232,0.959232211112976,-0.282177299261093,0.015797957777977,0.741453766822815 ,-0.373992174863815,-0.557114124298096,0.129408821463585,-0.283919304609299,-0.950075387954712,0.0741845220327377 ,-0.0867956131696701,-0.993460237979889,0.722632110118866,-0.252884060144424,-0.643313705921173,-0.568153619766235 ,-0.0387567244470119,-0.822009384632111,-0.572411417961121,0.114080429077148,-0.81199187040329,0.0741845220327377 ,-0.0867956131696701,-0.993460237979889,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.593829154968262 ,0.197740450501442,-0.77991384267807,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.0741845220327377 ,-0.0867956131696701,-0.993460237979889,-0.572411417961121,0.114080429077148,-0.81199187040329,0.715653717517853 ,-0.159719884395599,-0.679948031902313,0.722632110118866,-0.252884060144424,-0.643313705921173,0.0741845220327377 ,-0.0867956131696701,-0.993460237979889,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.925993382930756 ,0.073547326028347,-0.370306611061096,0.989523768424988,0.120242863893509,-0.0799020603299141,0.853913903236389 ,0.342162936925888,-0.392116755247116,0.226486593484879,0.604172766208649,-0.76398891210556,0.989523768424988 ,0.120242863893509,-0.0799020603299141,0.918502330780029,-0.196233198046684,0.343287169933319,0.962022840976715 ,-0.137412339448929,0.235859960317612,0.853913903236389,0.342162936925888,-0.392116755247116,0.152718812227249 ,0.346232503652573,-0.925634920597076,0.710636675357819,0.109640218317509,-0.694963693618774,0.699970245361328 ,0.172705575823784,-0.692975103855133,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328 ,0.172705575823784,-0.692975103855133,0.856441259384155,-0.50444495677948,0.10974358022213,0.819883346557617 ,-0.543677628040314,0.179460227489471,0.925993382930756,0.073547326028347,-0.370306611061096,0.856441259384155 ,-0.50444495677948,0.10974358022213,0.620464503765106,-0.659890949726105,0.42375436425209,0.568605542182922,-0.712091386318207 ,0.411841779947281,0.819883346557617,-0.543677628040314,0.179460227489471,0.726504981517792,-0.654014825820923 ,0.210843905806541,0.718589425086975,-0.627188920974731,0.300438493490219,0.815926849842072,-0.0521769113838673 ,0.575795948505402,0.965819001197815,-0.0271366275846958,0.257793039083481,0.855084657669067,-0.451219111680985 ,-0.255404502153397,0.886961340904236,-0.0727596655488014,0.456076264381409,0.883532881736755,-0.151341363787651 ,0.443244278430939,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731 ,0.300438493490219,0.739733874797821,-0.650235652923584,-0.173168674111366,0.883532881736755,-0.151341363787651 ,0.443244278430939,0.78486180305481,-0.111138336360455,0.60962301492691,0.900076270103455,-0.156032308936119 ,0.406837373971939,0.671223521232605,-0.0201855413615704,0.74098014831543,0.698842525482178,0.18292909860611 ,0.691488325595856,0.889522910118103,-0.00140424643177539,0.456888437271118,0.698842525482178,0.18292909860611 ,0.691488325595856,0.74112343788147,0.26722252368927,0.615896224975586,0.867614150047302,0.0466058775782585,0.495049089193344 ,0.889522910118103,-0.00140424643177539,0.456888437271118,0.788077771663666,0.0518888607621193,0.61338484287262 ,0.867614150047302,0.0466058775782585,0.495049089193344,0.74112343788147,0.26722252368927,0.615896224975586,0.686343193054199 ,0.200842931866646,0.698995769023895,0.597383677959442,-0.186877384781837,0.779877960681915,0.922981798648834 ,-0.320070415735245,0.213681027293205,0.930897831916809,-0.328699737787247,0.15932896733284,0.575946867465973 ,-0.330290824174881,0.74779224395752,0.930897831916809,-0.328699737787247,0.15932896733284,0.921016693115234 ,-0.344745218753815,0.181325793266296,0.590675473213196,-0.574259579181671,0.566858351230621,0.575946867465973 ,-0.330290824174881,0.74779224395752,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.766620635986328 ,-0.390746057033539,-0.509519696235657,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.137073755264282 ,-0.758140206336975,-0.637521922588348,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.797735512256622 ,-0.550144195556641,-0.246899589896202,0.938213586807251,-0.216931000351906,0.269622415304184,0.979475617408752 ,-0.109372921288013,0.169307827949524,0.948027610778809,-0.215131908655167,0.234439536929131,0.891989231109619 ,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.979475617408752 ,-0.109372921288013,0.169307827949524,0.995871722698212,-0.0808055028319359,0.041352104395628,0.982620000839233 ,-0.16903156042099,0.076722227036953,0.568605542182922,-0.712091386318207,0.411841779947281,0.625812768936157 ,-0.514012217521667,0.586642861366272,0.819252371788025,-0.448852121829987,0.356871604919434,0.819883346557617 ,-0.543677628040314,0.179460227489471,0.64728707075119,-0.269912004470825,0.712858319282532,0.903722703456879 ,-0.336785912513733,0.26431143283844,0.819252371788025,-0.448852121829987,0.356871604919434,0.625812768936157 ,-0.514012217521667,0.586642861366272,0.0543623231351376,0.513473629951477,0.85638165473938,0.045425571501255 ,0.382962375879288,0.922646403312683,0.219657093286514,0.398345082998276,0.890545904636383,0.20434632897377,0.515124678611755 ,0.832399606704712,0.045425571501255,0.382962375879288,0.922646403312683,0.0344220362603664,0.22930283844471 ,0.972746253013611,0.163330301642418,0.241669088602066,0.956514120101929,0.219657093286514,0.398345082998276 ,0.890545904636383,0.924175441265106,0.249484479427338,0.28923562169075,0.881676495075226,0.461544960737228,0.0980962067842484 ,0.849923014640808,0.0266168173402548,0.526234149932861,0.849923014640808,0.0266168173402548,0.526234149932861 ,0.597383677959442,-0.186877384781837,0.779877960681915,0.575946867465973,-0.330290824174881,0.74779224395752 ,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621 ,0.710340082645416,-0.399401605129242,0.57956475019455,0.575946867465973,-0.330290824174881,0.74779224395752 ,0.54015976190567,-0.714601397514343,0.444490998983383,0.772665083408356,-0.529866874217987,0.349613666534424 ,0.764377176761627,-0.598457217216492,0.239951074123383,0.764377176761627,-0.598457217216492,0.239951074123383 ,0.772665083408356,-0.529866874217987,0.349613666534424,0.870513737201691,-0.304842829704285,0.386363327503204 ,0.938213586807251,-0.216931000351906,0.269622415304184,0.918502330780029,-0.196233198046684,0.343287169933319 ,0.928443729877472,-0.228811115026474,0.292639285326004,0.935753345489502,-0.270965844392776,0.225705921649933 ,0.918502330780029,-0.196233198046684,0.343287169933319,0.891989231109619,-0.254739731550217,0.373447239398956 ,0.840574324131012,-0.291103184223175,0.456830143928528,0.888055205345154,-0.428246527910233,-0.167221024632454 ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.869891345500946,-0.342425405979156,0.355012476444244 ,0.887078821659088,-0.412128984928131,0.207944288849831,0.962022840976715,-0.137412339448929,0.235859960317612 ,0.840574324131012,-0.291103184223175,0.456830143928528,0.869891345500946,-0.342425405979156,0.355012476444244 ,0.952154934406281,-0.291899025440216,0.0905317366123199,0.928761661052704,-0.0844941884279251,0.360918909311295 ,0.928679704666138,-0.214017242193222,0.30290362238884,0.982620000839233,-0.16903156042099,0.076722227036953 ,0.993277549743652,-0.10496261715889,0.0488112159073353,0.928679704666138,-0.214017242193222,0.30290362238884 ,0.941693007946014,-0.139167279005051,-0.30634418129921,0.888055205345154,-0.428246527910233,-0.167221024632454 ,0.887078821659088,-0.412128984928131,0.207944288849831,0.928679704666138,-0.214017242193222,0.30290362238884 ,0.887078821659088,-0.412128984928131,0.207944288849831,0.869891345500946,-0.342425405979156,0.355012476444244 ,0.948027610778809,-0.215131908655167,0.234439536929131,0.982620000839233,-0.16903156042099,0.076722227036953 ,0.918502330780029,-0.196233198046684,0.343287169933319,0.840574324131012,-0.291103184223175,0.456830143928528 ,0.962022840976715,-0.137412339448929,0.235859960317612,-0.572831332683563,0.0232040770351887,-0.819344758987427 ,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.499244570732117,-0.495106011629105,-0.711073040962219 ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.572831332683563,0.0232040770351887,-0.819344758987427 ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.385834068059921,-0.169429570436478,-0.906876862049103 ,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.155012637376785,-0.308559864759445,-0.938489139080048 ,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.385834068059921,-0.169429570436478,-0.906876862049103 ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.155012637376785,-0.308559864759445,-0.938489139080048 ,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.499244570732117,-0.495106011629105,-0.711073040962219 ,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0362379811704159,-0.262005388736725,-0.964385807514191 ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.0560902766883373,-0.278950154781342,-0.958666086196899 ,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899 ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.00530779222026467,-0.225043326616287,-0.974334299564362 ,0.060580100864172,-0.309540450572968,-0.948954582214355,0.0705975443124771,-0.761587023735046,-0.644205927848816 ,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0560902766883373,-0.278950154781342,-0.958666086196899 ,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.070097453892231,-0.765305280685425,-0.639839172363281 ,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899 ,0.0357764922082424,-0.768304586410522,-0.639083802700043,-0.637578308582306,0.271278858184814,-0.721042096614838 ,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.728337526321411,0.0211671013385057,-0.684891521930695 ,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.637578308582306,0.271278858184814,-0.721042096614838 ,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.392845422029495,-0.17293743789196,-0.903197169303894 ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.162789091467857,-0.282180637121201,-0.945448994636536 ,-0.155012637376785,-0.308559864759445,-0.938489139080048,0.060580100864172,-0.309540450572968,-0.948954582214355 ,0.00530779222026467,-0.225043326616287,-0.974334299564362,-0.117666520178318,-0.734499752521515,-0.668329775333405 ,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.060580100864172,-0.309540450572968,-0.948954582214355 ,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.268979072570801,0.152991950511932,-0.950917303562164 ,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.26518127322197,0.597104549407959,-0.757063448429108 ,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.268979072570801,0.152991950511932,-0.950917303562164 ,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.523017466068268,0.285451769828796,-0.803100228309631 ,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0239754971116781,0.848645508289337,-0.528418362140656 ,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.289194285869598,0.281266182661057,-0.915016949176788 ,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.914143800735474,0.108810022473335,-0.390514433383942 ,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777 ,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.914143800735474,0.108810022473335,-0.390514433383942 ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.749875366687775,0.181030079722404,-0.636329352855682 ,0.370056182146072,0.811048626899719,-0.453054636716843,-0.144558519124985,0.63954085111618,-0.755043268203735 ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.299774140119553,0.750125706195831,-0.589446246623993 ,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.144558519124985,0.63954085111618,-0.755043268203735 ,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.0239754971116781,0.848645508289337,-0.528418362140656 ,0.00547882029786706,0.479039758443832,-0.877776086330414,0.0384715124964714,0.615228533744812,-0.787409543991089 ,0.103339314460754,0.947827875614166,-0.301568180322647,0.0384715124964714,0.615228533744812,-0.787409543991089 ,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0339763574302197,0.937289535999298,-0.346891850233078 ,0.103339314460754,0.947827875614166,-0.301568180322647,-0.677631020545959,0.0696527808904648,-0.732096076011658 ,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.523017466068268,0.285451769828796,-0.803100228309631 ,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.677631020545959,0.0696527808904648,-0.732096076011658 ,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.835774898529053,0.0728342235088348,-0.54422003030777 ,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.929068803787231,-0.0690155401825905,-0.363411635160446 ,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.788628935813904,-0.377316504716873,-0.485486000776291 ,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.878701210021973,-0.298690170049667,-0.372382044792175 ,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.788628935813904,-0.377316504716873,-0.485486000776291 ,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.735399723052979,0.0687208324670792,-0.674139976501465 ,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.788628935813904,-0.377316504716873,-0.485486000776291 ,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.877584159374237,0.190617814660072,-0.439898729324341 ,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.623760402202606,0.624061942100525,-0.470605611801147 ,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.719125330448151,0.296634525060654,-0.628384232521057 ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.749875366687775,0.181030079722404,-0.636329352855682 ,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.970641255378723,0.0346399769186974,-0.238024458289146 ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.856640636920929,-0.0924222394824028,0.507567644119263 ,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.934147357940674,0.162888333201408,-0.317546963691711 ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.970641255378723,0.0346399769186974,-0.238024458289146 ,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.778645157814026,-0.596678197383881,-0.194131031632423 ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.934147357940674,0.162888333201408,-0.317546963691711 ,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.856640636920929,-0.0924222394824028,0.507567644119263 ,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.778645157814026,-0.596678197383881,-0.194131031632423 ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.880580544471741,0.26120713353157,-0.395409554243088 ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.467009961605072,0.872948586940765,-0.140934243798256 ,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.945308268070221,0.226358875632286,-0.234848886728287 ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.880580544471741,0.26120713353157,-0.395409554243088 ,-0.634040713310242,0.756764888763428,0.159057512879372,-0.467009961605072,0.872948586940765,-0.140934243798256 ,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.945308268070221,0.226358875632286,-0.234848886728287 ,0.585816919803619,-0.176041945815086,0.791092753410339,0.662703216075897,-0.235535204410553,0.710878074169159 ,0.75313264131546,-0.288527101278305,0.591221868991852,0.638028085231781,-0.251523166894913,0.727774858474731 ,0.585816919803619,-0.176041945815086,0.791092753410339,0.638028085231781,-0.251523166894913,0.727774858474731 ,0.540978610515594,-0.216916099190712,0.812582015991211,0.501314342021942,-0.180266559123993,0.846278846263886 ,0.638028085231781,-0.251523166894913,0.727774858474731,0.75313264131546,-0.288527101278305,0.591221868991852 ,0.887619376182556,-0.256067276000977,0.382833331823349,0.874927282333374,-0.188851833343506,0.44591161608696 ,0.638028085231781,-0.251523166894913,0.727774858474731,0.874927282333374,-0.188851833343506,0.44591161608696 ,0.852472126483917,-0.133455187082291,0.505451321601868,0.540978610515594,-0.216916099190712,0.812582015991211 ,0.874927282333374,-0.188851833343506,0.44591161608696,0.887619376182556,-0.256067276000977,0.382833331823349 ,0.960171759128571,-0.181689232587814,0.212271526455879,0.961752712726593,-0.126318529248238,0.243054285645485 ,0.874927282333374,-0.188851833343506,0.44591161608696,0.961752712726593,-0.126318529248238,0.243054285645485 ,0.950795531272888,-0.131767466664314,0.280401825904846,0.852472126483917,-0.133455187082291,0.505451321601868 ,0.961752712726593,-0.126318529248238,0.243054285645485,0.960171759128571,-0.181689232587814,0.212271526455879 ,0.966324627399445,-0.156342566013336,0.204386278986931,0.968484222888947,-0.138258457183838,0.207178428769112 ,0.964455902576447,-0.157870531082153,0.211900100111961,0.950795531272888,-0.131767466664314,0.280401825904846 ,0.961752712726593,-0.126318529248238,0.243054285645485,0.968484222888947,-0.138258457183838,0.207178428769112 ,0.968484222888947,-0.138258457183838,0.207178428769112,0.966324627399445,-0.156342566013336,0.204386278986931 ,0.809566378593445,-0.159671008586884,0.564895987510681,0.861340701580048,-0.127685099840164,0.491720139980316 ,0.964455902576447,-0.157870531082153,0.211900100111961,0.968484222888947,-0.138258457183838,0.207178428769112 ,0.861340701580048,-0.127685099840164,0.491720139980316,0.896426856517792,-0.172908827662468,0.408070415258408 ,0.606970250606537,-0.105902783572674,0.787636816501617,0.623109459877014,-0.205047786235809,0.754778146743774 ,0.896426856517792,-0.172908827662468,0.408070415258408,0.861340701580048,-0.127685099840164,0.491720139980316 ,0.606970250606537,-0.105902783572674,0.787636816501617,0.861340701580048,-0.127685099840164,0.491720139980316 ,0.809566378593445,-0.159671008586884,0.564895987510681,0.634909212589264,-0.137729376554489,0.760211110115051 ,0.634909212589264,-0.137729376554489,0.760211110115051,0.844319820404053,-0.143771529197693,0.51619154214859 ,0.757737696170807,-0.147417977452278,0.635689795017242,0.606970250606537,-0.105902783572674,0.787636816501617 ,0.941718637943268,-0.180898189544678,0.283622801303864,0.92750072479248,-0.198037564754486,0.31705442070961 ,0.757737696170807,-0.147417977452278,0.635689795017242,0.844319820404053,-0.143771529197693,0.51619154214859 ,0.9190753698349,-0.11298330873251,0.377538323402405,0.705142974853516,-0.157100901007652,0.691442430019379,0.757737696170807 ,-0.147417977452278,0.635689795017242,0.92750072479248,-0.198037564754486,0.31705442070961,0.623109459877014 ,-0.205047786235809,0.754778146743774,0.606970250606537,-0.105902783572674,0.787636816501617,0.757737696170807 ,-0.147417977452278,0.635689795017242,0.705142974853516,-0.157100901007652,0.691442430019379,0.936089217662811 ,-0.214836105704308,0.278536230325699,0.935290277004242,-0.181792959570885,0.303617179393768,0.9190753698349 ,-0.11298330873251,0.377538323402405,0.92750072479248,-0.198037564754486,0.31705442070961,0.949846565723419,-0.197867274284363 ,0.242157250642776,0.935290277004242,-0.181792959570885,0.303617179393768,0.936089217662811,-0.214836105704308 ,0.278536230325699,0.0527103617787361,-0.77695095539093,0.627350628376007,-0.0512008517980576,-0.79354852437973 ,0.606349110603333,-0.0138667495921254,-0.712914168834686,0.701114177703857,0.0200271289795637,-0.717210829257965 ,0.696568429470062,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0352796316146851,-0.824001550674438 ,0.565488159656525,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0138667495921254,-0.712914168834686 ,0.701114177703857,0.235940769314766,-0.737428665161133,0.632875144481659,0.0527103617787361,-0.77695095539093 ,0.627350628376007,0.0200271289795637,-0.717210829257965,0.696568429470062,0.152485489845276,-0.706423759460449 ,0.691168308258057,0.363939642906189,-0.646557629108429,0.670455992221832,0.235940769314766,-0.737428665161133 ,0.632875144481659,0.152485489845276,-0.706423759460449,0.691168308258057,0.317214041948318,-0.645033359527588 ,0.695202946662903,0.363939642906189,-0.646557629108429,0.670455992221832,0.317214041948318,-0.645033359527588 ,0.695202946662903,0.389301151037216,-0.589295387268066,0.707937479019165,0.286647915840149,-0.584438979625702 ,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.286647915840149,-0.584438979625702 ,0.759120643138886,0.389301151037216,-0.589295387268066,0.707937479019165,0.34683957695961,-0.624991238117218 ,0.699348449707031,0.184710487723351,-0.617817997932434,0.764318585395813,0.34683957695961,-0.624991238117218 ,0.699348449707031,0.139593034982681,-0.543097734451294,0.827984690666199,0.168070778250694,-0.457133919000626 ,0.873373210430145,0.196283534169197,-0.554668664932251,0.808588564395905,0.358242690563202,-0.369526594877243 ,0.857386887073517,0.359977900981903,-0.319483041763306,0.876553773880005,0.161047965288162,-0.353496670722961 ,0.921468198299408,0.16572479903698,-0.647090375423431,0.744183719158173,0.196283534169197,-0.554668664932251 ,0.808588564395905,0.161047965288162,-0.353496670722961,0.921468198299408,0.0293192863464355,-0.389476090669632 ,0.920569777488709,0.196283534169197,-0.554668664932251,0.808588564395905,0.16572479903698,-0.647090375423431 ,0.744183719158173,0.255019038915634,-0.916801631450653,0.307311117649078,0.191021859645844,-0.901510059833527 ,0.388317227363586,0.771733045578003,-0.627318918704987,0.104398690164089,0.813187956809998,-0.535195648670197 ,0.228672236204147,0.661345362663269,-0.681172966957092,0.314047187566757,0.673599064350128,-0.729973196983337 ,0.115772970020771,0.771733045578003,-0.627318918704987,0.104398690164089,0.673599064350128,-0.729973196983337 ,0.115772970020771,0.654792129993439,-0.747980833053589,0.108498655259609,0.726504981517792,-0.654014825820923 ,0.210843905806541,0.991854608058929,0.119089640676975,0.0451894104480743,0.813187956809998,-0.535195648670197 ,0.228672236204147,0.771733045578003,-0.627318918704987,0.104398690164089,0.965819001197815,-0.0271366275846958 ,0.257793039083481,0.726504981517792,-0.654014825820923,0.210843905806541,0.965819001197815,-0.0271366275846958 ,0.257793039083481,0.771733045578003,-0.627318918704987,0.104398690164089,-0.534112751483917,0.714107155799866 ,-0.452520221471787,-0.515466570854187,0.838185369968414,-0.178155809640884,0.190385565161705,0.977179288864136 ,-0.0942017361521721,0.130885064601898,0.893452942371368,-0.429663747549057,-0.482280492782593,0.875927150249481 ,0.0125399529933929,0.168165519833565,0.971532881259918,0.166865915060043,0.190385565161705,0.977179288864136 ,-0.0942017361521721,-0.515466570854187,0.838185369968414,-0.178155809640884,0.689203560352325,0.677581548690796 ,0.256674349308014,0.732895731925964,0.679829776287079,0.0263686496764421,0.190385565161705,0.977179288864136 ,-0.0942017361521721,0.168165519833565,0.971532881259918,0.166865915060043,0.771966874599457,0.597103416919708 ,-0.218024387955666,0.130885064601898,0.893452942371368,-0.429663747549057,0.190385565161705,0.977179288864136 ,-0.0942017361521721,0.732895731925964,0.679829776287079,0.0263686496764421,0.883517026901245,-0.041202936321497 ,0.46658331155777,0.909835636615753,-0.0349062643945217,0.413498103618622,0.917440295219421,-0.101929731667042 ,0.384595423936844,0.869269788265228,-0.0789045765995979,0.488000065088272,-0.690630912780762,-0.290166169404984 ,-0.662444412708282,0.10502952337265,-0.714195668697357,-0.692021250724792,0.0209639705717564,-0.893982887268066 ,-0.44761049747467,-0.748543560504913,-0.365974009037018,-0.55294269323349,0.789831042289734,-0.580399453639984 ,-0.198251023888588,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0209639705717564,-0.893982887268066 ,-0.44761049747467,0.10502952337265,-0.714195668697357,-0.692021250724792,0.970540165901184,0.124821022152901 ,0.206086173653603,0.534866094589233,0.53300929069519,0.655606091022491,0.956802248954773,0.196078270673752,0.214668840169907 ,0.966708958148956,-0.002308584516868,0.255868047475815,0.925993382930756,0.073547326028347,-0.370306611061096 ,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133 ,0.897598922252655,-0.0851877480745316,0.432503432035446,0.971762239933014,-0.143596902489662,0.187237858772278 ,0.935753345489502,-0.270965844392776,0.225705921649933,0.928443729877472,-0.228811115026474,0.292639285326004 ,0.846449613571167,0.310930520296097,0.432256042957306,0.857260406017303,0.312566876411438,0.409153461456299 ,0.813006162643433,0.437411576509476,0.384307235479355,0.885035216808319,0.393218964338303,0.249181613326073 ,0.908188223838806,0.15894940495491,0.387206882238388,0.854240536689758,0.355053037405014,0.379750460386276,0.857260406017303 ,0.312566876411438,0.409153461456299,0.846449613571167,0.310930520296097,0.432256042957306,0.793774306774139 ,0.385858178138733,0.470144480466843,0.718716561794281,0.339281320571899,0.60690575838089,0.728551387786865,0.287864476442337 ,0.621568083763123,0.87058699131012,0.227341398596764,0.436341762542725,0.862693786621094,0.213308542966843,0.458539962768555 ,0.688724040985107,0.428849041461945,0.584591865539551,0.843018114566803,0.354378879070282,0.404643177986145 ,0.87058699131012,0.227341398596764,0.436341762542725,0.728551387786865,0.287864476442337,0.621568083763123,0.494429767131805 ,-0.0934201404452324,0.864182770252228,0.401639640331268,-0.00309631112031639,0.915792524814606,0.32480525970459 ,-0.177078545093536,0.929055869579315,0.59909462928772,0.124072253704071,0.791006743907928,0.61716902256012,-0.00506624486297369 ,0.786814272403717,0.578135192394257,0.0218988731503487,0.815647065639496,0.616745948791504,-0.290956258773804 ,0.731415688991547,0.75023740530014,-0.238408371806145,0.616688966751099,0.775085091590881,-0.264017641544342 ,0.574053823947906,0.666223108768463,-0.303315341472626,0.681283056735992,0.75023740530014,-0.238408371806145 ,0.616688966751099,0.855076372623444,-0.165702432394028,0.491311639547348,0.872779548168182,-0.198945015668869 ,0.445731669664383,0.775085091590881,-0.264017641544342,0.574053823947906,0.476604402065277,-0.515640795230865 ,0.712013244628906,0.385886758565903,-0.746556282043457,0.541982591152191,0.425350964069366,-0.787436366081238 ,0.446117222309113,0.601338624954224,-0.55975753068924,0.570143282413483,0.385886758565903,-0.746556282043457 ,0.541982591152191,0.426225006580353,-0.76509952545166,0.482654064893723,0.408859342336655,-0.819536507129669 ,0.401489645242691,0.425350964069366,-0.787436366081238,0.446117222309113,0.892324268817902,-0.364589005708694 ,0.266143202781677,0.883809387683868,-0.290479838848114,0.366745710372925,0.868513345718384,-0.371388286352158 ,0.328260958194733,0.8774573802948,-0.435060352087021,0.201967760920525,0.868513345718384,-0.371388286352158 ,0.328260958194733,0.767249822616577,-0.595458924770355,0.23823593556881,0.807879209518433,-0.580146849155426 ,0.103734038770199,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426 ,0.103734038770199,0.767249822616577,-0.595458924770355,0.23823593556881,0.630033671855927,-0.76368510723114 ,0.140863940119743,0.698544383049011,-0.714900195598602,0.0308788027614355,0.630033671855927,-0.76368510723114 ,0.140863940119743,0.545321881771088,-0.833433032035828,0.0895174741744995,0.600540995597839,-0.799374520778656 ,-0.0187329761683941,0.698544383049011,-0.714900195598602,0.0308788027614355,0.598369121551514,-0.00250658229924738 ,0.801216602325439,0.476604402065277,-0.515640795230865,0.712013244628906,0.601338624954224,-0.55975753068924 ,0.570143282413483,0.756793797016144,-0.0805434510111809,0.64867240190506,0.683284997940063,0.154697299003601 ,0.713575720787048,0.552154183387756,0.173749193549156,0.815436661243439,0.598369121551514,-0.00250658229924738 ,0.801216602325439,0.756793797016144,-0.0805434510111809,0.64867240190506,0.552154183387756,0.173749193549156 ,0.815436661243439,0.683284997940063,0.154697299003601,0.713575720787048,0.570054233074188,-0.200027942657471 ,0.796885788440704,0.362627446651459,-0.180693462491035,0.914249002933502,0.66197681427002,0.379794925451279 ,0.646175265312195,0.520368456840515,0.258096873760223,0.814004063606262,0.590947866439819,0.059150405228138 ,0.804538309574127,0.740522563457489,0.0606227926909924,0.6692915558815,0.399795055389404,-0.131603688001633 ,0.907107710838318,0.628606140613556,-0.0929744690656662,0.77214640378952,0.616745948791504,-0.290956258773804 ,0.731415688991547,0.381202667951584,-0.36025732755661,0.851410090923309,0.399795055389404,-0.131603688001633 ,0.907107710838318,0.381202667951584,-0.36025732755661,0.851410090923309,0.0599219687283039,-0.361293613910675 ,0.93052476644516,0.192558065056801,-0.101361930370331,0.976036429405212,0.381202667951584,-0.36025732755661 ,0.851410090923309,0.616745948791504,-0.290956258773804,0.731415688991547,0.666223108768463,-0.303315341472626 ,0.681283056735992,0.462689489126205,-0.42478209733963,0.778125107288361,0.279211044311523,-0.955691933631897 ,0.093242421746254,0.164180904626846,-0.958690702915192,0.232285901904106,0.225757539272308,-0.896350860595703 ,0.381560862064362,0.304768770933151,-0.92969423532486,0.206844300031662,0.026754243299365,0.843723058700562 ,0.53611159324646,-0.204613357782364,0.564212739467621,0.799873352050781,-0.00705753592774272,0.88813054561615 ,0.45953705906868,0.0228955876082182,0.892617464065552,0.450233042240143,-0.0965566337108612,0.382317036390305 ,0.918972492218018,0.104800805449486,0.884988248348236,0.453665733337402,-0.00705753592774272,0.88813054561615 ,0.45953705906868,-0.204613357782364,0.564212739467621,0.799873352050781,0.234877377748489,0.967058181762695 ,0.0981385260820389,0.216771319508553,0.955569624900818,0.199742004275322,-0.00705753592774272,0.88813054561615 ,0.45953705906868,0.104800805449486,0.884988248348236,0.453665733337402,0.143662974238396,0.945594608783722,0.29191067814827 ,0.0228955876082182,0.892617464065552,0.450233042240143,-0.00705753592774272,0.88813054561615,0.45953705906868 ,0.216771319508553,0.955569624900818,0.199742004275322,0.802525162696838,0.518118143081665,0.295815676450729 ,0.875872433185577,0.296488851308823,0.38071221113205,0.611026585102081,0.780639052391052,-0.131336376070976 ,0.466519266366959,0.882316112518311,0.0622739568352699,0.611026585102081,0.780639052391052,-0.131336376070976 ,0.123842000961304,0.97543865442276,-0.182160839438438,-0.427035480737686,0.790110290050507,-0.439734488725662 ,0.466519266366959,0.882316112518311,0.0622739568352699,0.247720703482628,0.139039516448975,0.95880264043808 ,0.463392287492752,0.731873750686646,0.499628275632858,0.450289756059647,0.883358836174011,0.130062907934189 ,0.450289756059647,0.883358836174011,0.130062907934189,-0.0188573095947504,0.503645062446594,0.863704860210419 ,0.247720703482628,0.139039516448975,0.95880264043808,0.123842000961304,0.97543865442276,-0.182160839438438,0.611026585102081 ,0.780639052391052,-0.131336376070976,0.450289756059647,0.883358836174011,0.130062907934189,0.463392287492752 ,0.731873750686646,0.499628275632858,0.875872433185577,0.296488851308823,0.38071221113205,0.785606920719147,0.572498440742493 ,0.234664186835289,0.450289756059647,0.883358836174011,0.130062907934189,0.611026585102081,0.780639052391052 ,-0.131336376070976,0.315801054239273,0.0731089860200882,0.946004629135132,-0.0188573095947504,0.503645062446594 ,0.863704860210419,0.450289756059647,0.883358836174011,0.130062907934189,0.785606920719147,0.572498440742493 ,0.234664186835289,0.247720703482628,0.139039516448975,0.95880264043808,-0.0188573095947504,0.503645062446594 ,0.863704860210419,-0.505003929138184,-0.526722073554993,0.683765232563019,0.101962603628635,-0.729668021202087 ,0.676156997680664,0.247720703482628,0.139039516448975,0.95880264043808,-0.505003929138184,-0.526722073554993 ,0.683765232563019,-0.505003929138184,-0.526722073554993,0.683765232563019,0.315801054239273,0.0731089860200882 ,0.946004629135132,0.139593034982681,-0.543097734451294,0.827984690666199,-0.350690484046936,-0.68567168712616 ,0.637863993644714,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.0188573095947504,0.503645062446594 ,0.863704860210419,0.315801054239273,0.0731089860200882,0.946004629135132,-0.505003929138184,-0.526722073554993 ,0.683765232563019,-0.350690484046936,-0.68567168712616,0.637863993644714,0.101962603628635,-0.729668021202087 ,0.676156997680664,0.139593034982681,-0.543097734451294,0.827984690666199,0.34683957695961,-0.624991238117218 ,0.699348449707031,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.350690484046936,-0.68567168712616 ,0.637863993644714,0.389301151037216,-0.589295387268066,0.707937479019165,-0.243915364146233,-0.739838838577271 ,0.627011835575104,-0.219358518719673,-0.771041095256805,0.597810626029968,0.34683957695961,-0.624991238117218 ,0.699348449707031,0.154463171958923,-0.632704854011536,0.758831799030304,0.220668077468872,-0.699356377124786 ,0.679857552051544,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.243915364146233,-0.739838838577271 ,0.627011835575104,0.101962603628635,-0.729668021202087,0.676156997680664,-0.350690484046936,-0.68567168712616 ,0.637863993644714,-0.219358518719673,-0.771041095256805,0.597810626029968,0.220668077468872,-0.699356377124786 ,0.679857552051544,0.389301151037216,-0.589295387268066,0.707937479019165,0.317214041948318,-0.645033359527588 ,0.695202946662903,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.243915364146233,-0.739838838577271 ,0.627011835575104,0.152485489845276,-0.706423759460449,0.691168308258057,-0.368264228105545,-0.82679408788681 ,0.425197541713715,-0.307040005922318,-0.765494167804718,0.565460085868835,0.317214041948318,-0.645033359527588 ,0.695202946662903,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0443188734352589,-0.657264351844788 ,0.752355933189392,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.368264228105545,-0.82679408788681 ,0.425197541713715,0.154463171958923,-0.632704854011536,0.758831799030304,-0.243915364146233,-0.739838838577271 ,0.627011835575104,-0.307040005922318,-0.765494167804718,0.565460085868835,0.0443188734352589,-0.657264351844788 ,0.752355933189392,-0.368264228105545,-0.82679408788681,0.425197541713715,0.152485489845276,-0.706423759460449 ,0.691168308258057,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.332527428865433,-0.892948389053345 ,0.303428173065186,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.332527428865433,-0.892948389053345 ,0.303428173065186,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.15265741944313,-0.753475069999695 ,0.639508426189423,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0138667495921254,-0.712914168834686 ,0.701114177703857,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.332527428865433,-0.892948389053345 ,0.303428173065186,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0965530276298523,-0.965101063251495 ,0.243428528308868,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0138667495921254,-0.712914168834686 ,0.701114177703857,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.261559337377548,-0.96132493019104 ,0.086262010037899,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0965530276298523,-0.965101063251495 ,0.243428528308868,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.332527428865433,-0.892948389053345 ,0.303428173065186,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.261559337377548,-0.96132493019104 ,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.0965530276298523,-0.965101063251495 ,0.243428528308868,0.0694410875439644,-0.971313714981079,0.227437034249306,0.139529138803482,-0.986220002174377 ,-0.0888914614915848,-0.0252817086875439,-0.707010686397552,0.706750750541687,0.0366746000945568,-0.755166232585907 ,0.654506683349609,0.0694410875439644,-0.971313714981079,0.227437034249306,-0.0965530276298523,-0.965101063251495 ,0.243428528308868,0.206430405378342,-0.778748571872711,0.592399477958679,0.311435610055923,-0.928014516830444 ,0.204443141818047,0.0694410875439644,-0.971313714981079,0.227437034249306,0.0366746000945568,-0.755166232585907 ,0.654506683349609,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.139529138803482,-0.986220002174377 ,-0.0888914614915848,0.0694410875439644,-0.971313714981079,0.227437034249306,0.311435610055923,-0.928014516830444 ,0.204443141818047,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.311435610055923,-0.928014516830444 ,0.204443141818047,0.517510056495667,-0.833824872970581,0.192144423723221,0.494486898183823,-0.83785080909729 ,0.231276199221611,0.206430405378342,-0.778748571872711,0.592399477958679,0.314119011163712,-0.739236891269684 ,0.595699608325958,0.517510056495667,-0.833824872970581,0.192144423723221,0.311435610055923,-0.928014516830444 ,0.204443141818047,0.360629975795746,-0.702259659767151,0.613821983337402,0.494486898183823,-0.83785080909729 ,0.231276199221611,0.517510056495667,-0.833824872970581,0.192144423723221,0.626789748668671,-0.749257385730743 ,0.213887751102448,0.194313436746597,-0.80370157957077,0.562410891056061,0.115422785282135,-0.952069759368896 ,0.283268004655838,0.0416775047779083,-0.927180886268616,0.372288316488266,0.209196627140045,-0.665287017822266 ,0.716679811477661,0.292688071727753,-0.580336809158325,0.759962379932404,0.340945303440094,-0.698488175868988 ,0.629182457923889,0.194313436746597,-0.80370157957077,0.562410891056061,0.209196627140045,-0.665287017822266 ,0.716679811477661,0.340945303440094,-0.698488175868988,0.629182457923889,0.353568494319916,-0.776771426200867 ,0.521167457103729,0.225757539272308,-0.896350860595703,0.381560862064362,0.194313436746597,-0.80370157957077 ,0.562410891056061,0.402090311050415,-0.284287929534912,0.870346903800964,0.353568494319916,-0.776771426200867 ,0.521167457103729,0.340945303440094,-0.698488175868988,0.629182457923889,0.431166082620621,-0.246951669454575 ,0.867819547653198,0.414541780948639,0.400993496179581,0.816920638084412,0.491490423679352,0.244152218103409 ,0.835958659648895,0.498867928981781,0.236602708697319,0.833756506443024,0.37644562125206,0.38054347038269,0.844674706459045 ,0.471029788255692,0.166954964399338,0.86617374420166,0.498867928981781,0.236602708697319,0.833756506443024,0.491490423679352 ,0.244152218103409,0.835958659648895,0.168070778250694,-0.457133919000626,0.873373210430145,-0.00835443940013647 ,-0.52916145324707,0.848480045795441,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.184710487723351 ,-0.617817997932434,0.764318585395813,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.189460039138794 ,-0.647004544734955,0.738572955131531,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351 ,-0.617817997932434,0.764318585395813,0.615384101867676,0.0611244365572929,0.785853803157806,0.668389976024628 ,-0.0383556596934795,0.742821395397186,0.593307375907898,-0.0775594636797905,0.801230847835541,0.578135192394257 ,0.0218988731503487,0.815647065639496,0.61716902256012,-0.00506624486297369,0.786814272403717,0.652630388736725 ,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.724583506584167 ,-0.0711281225085258,0.685506820678711,0.740868389606476,0.000323399232001975,0.671650171279907,0.636694431304932 ,0.0437434837222099,0.769874513149261,0.724583506584167,-0.0711281225085258,0.685506820678711,0.802095234394073 ,-0.0203569829463959,0.596849083900452,0.825742661952972,-0.0501102656126022,0.561816692352295,0.740868389606476 ,0.000323399232001975,0.671650171279907,0.189460039138794,-0.647004544734955,0.738572955131531,0.598259091377258 ,-0.415802270174026,0.684977769851685,0.659502923488617,-0.421348959207535,0.622511804103851,0.381202667951584 ,-0.36025732755661,0.851410090923309,0.462689489126205,-0.42478209733963,0.778125107288361,-0.00835443940013647 ,-0.52916145324707,0.848480045795441,0.0599219687283039,-0.361293613910675,0.93052476644516,0.41924661397934 ,0.116037733852863,0.90042632818222,0.452132165431976,-0.0737369656562805,0.888897836208344,0.399795055389404 ,-0.131603688001633,0.907107710838318,0.192558065056801,-0.101361930370331,0.976036429405212,0.452132165431976 ,-0.0737369656562805,0.888897836208344,0.605580151081085,-0.127637818455696,0.785481572151184,0.628606140613556 ,-0.0929744690656662,0.77214640378952,0.399795055389404,-0.131603688001633,0.907107710838318,0.321778655052185 ,0.226275533437729,0.919379055500031,0.41924661397934,0.116037733852863,0.90042632818222,0.192558065056801,-0.101361930370331 ,0.976036429405212,0.321778655052185,0.226275533437729,0.919379055500031,0.192558065056801,-0.101361930370331 ,0.976036429405212,0.315801054239273,0.0731089860200882,0.946004629135132,0.720236837863922,0.181686788797379 ,0.669513881206512,0.656306624412537,0.257158219814301,0.709317445755005,0.875872433185577,0.296488851308823 ,0.38071221113205,0.315801054239273,0.0731089860200882,0.946004629135132,0.785606920719147,0.572498440742493 ,0.234664186835289,0.875872433185577,0.296488851308823,0.38071221113205,0.656306624412537,0.257158219814301,0.709317445755005 ,0.41924661397934,0.116037733852863,0.90042632818222,0.321778655052185,0.226275533437729,0.919379055500031,0.479255974292755 ,0.34857839345932,0.805485486984253,0.528464257717133,0.246433109045029,0.812401533126831,0.315801054239273,0.0731089860200882 ,0.946004629135132,0.656306624412537,0.257158219814301,0.709317445755005,0.479255974292755,0.34857839345932,0.805485486984253 ,0.321778655052185,0.226275533437729,0.919379055500031,0.720236837863922,0.181686788797379,0.669513881206512 ,0.528464257717133,0.246433109045029,0.812401533126831,0.479255974292755,0.34857839345932,0.805485486984253,0.656306624412537 ,0.257158219814301,0.709317445755005,0.525402009487152,0.0301267635077238,0.85032057762146,0.529063761234283 ,-0.0630637779831886,0.846235513687134,0.452132165431976,-0.0737369656562805,0.888897836208344,0.41924661397934 ,0.116037733852863,0.90042632818222,0.529063761234283,-0.0630637779831886,0.846235513687134,0.627576470375061 ,-0.135800153017044,0.766619920730591,0.605580151081085,-0.127637818455696,0.785481572151184,0.452132165431976 ,-0.0737369656562805,0.888897836208344,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.994033694267273 ,0.107649877667427,-0.0175654906779528,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.749779462814331 ,-0.631075918674469,-0.198931902647018,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.493718534708023 ,-0.839366674423218,0.227388679981232,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.994033694267273 ,0.107649877667427,-0.0175654906779528,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.741096556186676 ,-0.649701416492462,-0.169304147362709,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.493718534708023 ,-0.839366674423218,0.227388679981232,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.749779462814331 ,-0.631075918674469,-0.198931902647018,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.655008316040039 ,-0.755039751529694,0.029649443924427,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.834057211875916 ,-0.216860771179199,-0.50726717710495,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.507226884365082 ,-0.292785495519638,-0.810553848743439,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.637578308582306 ,0.271278858184814,-0.721042096614838,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.757471144199371 ,0.2759148478508,-0.591699600219727,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.507226884365082 ,-0.292785495519638,-0.810553848743439,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.72423392534256 ,0.108453460037708,-0.680972158908844,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.757471144199371 ,0.2759148478508,-0.591699600219727,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.637578308582306 ,0.271278858184814,-0.721042096614838,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.72423392534256 ,0.108453460037708,-0.680972158908844,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.690762042999268 ,-0.452603310346603,-0.563913226127625,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.757471144199371 ,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.934147357940674 ,0.162888333201408,-0.317546963691711,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.843048751354218 ,-0.0439708046615124,-0.536036670207977,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.757471144199371 ,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.843048751354218 ,-0.0439708046615124,-0.536036670207977,0.443391680717468,-0.0999263972043991,0.89074045419693,0.164051368832588 ,-0.273042142391205,0.947910964488983,0.121470481157303,-0.391699403524399,0.912039756774902,0.252335846424103 ,0.330343335866928,0.909505307674408,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0613121353089809 ,-0.89322817325592,0.445403426885605,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.0125365713611245 ,-0.668434202671051,0.743665635585785,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,0.00571701768785715 ,-0.999931693077087,-0.0101942336186767,-0.00129488680977374,-0.888734400272369,0.458420634269714,-0.0613121353089809 ,-0.89322817325592,0.445403426885605,0.191416949033737,-0.0921172648668289,0.977176547050476,0.0600041374564171 ,-0.192453533411026,0.979469835758209,0.171075537800789,-0.616661608219147,0.768415033817291,0.164827063679695 ,-0.547387719154358,0.820486903190613,0.0592407323420048,-0.802932441234589,0.593118906021118,-0.05385497584939 ,-0.996109485626221,0.06975357234478,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.0574505962431431 ,-0.838245630264282,0.542257905006409,0.0592407323420048,-0.802932441234589,0.593118906021118,0.0574505962431431 ,-0.838245630264282,0.542257905006409,0.217255920171738,-0.631381034851074,0.744417786598206,0.114735066890717 ,-0.656680226325989,0.745390474796295,0.0574505962431431,-0.838245630264282,0.542257905006409,-0.217067420482636 ,-0.972187459468842,0.0879386737942696,-0.304188013076782,-0.938978254795074,0.160591080784798,0.0620634108781815 ,-0.851760566234589,0.520242273807526,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0620634108781815 ,-0.851760566234589,0.520242273807526,0.34566730260849,-0.589025497436523,0.73045402765274,0.217255920171738 ,-0.631381034851074,0.744417786598206,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.304188013076782 ,-0.938978254795074,0.160591080784798,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.127903699874878 ,-0.852072358131409,0.507556319236755,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.127903699874878 ,-0.852072358131409,0.507556319236755,0.266091585159302,-0.603160440921783,0.751926004886627,0.34566730260849 ,-0.589025497436523,0.73045402765274,0.827663242816925,0.523418128490448,0.202501967549324,0.778178691864014 ,0.616257607936859,0.121097095310688,0.713096976280212,0.68854147195816,-0.131921663880348,0.662245333194733 ,0.742432057857513,-0.101122446358204,0.650610029697418,0.750839710235596,0.113781958818436,0.804373443126678 ,0.392295897006989,0.446191996335983,0.827663242816925,0.523418128490448,0.202501967549324,0.662245333194733 ,0.742432057857513,-0.101122446358204,0.33390274643898,0.823867678642273,-0.457985788583755,0.35404372215271 ,0.848205924034119,-0.393953949213028,0.662245333194733,0.742432057857513,-0.101122446358204,0.713096976280212 ,0.68854147195816,-0.131921663880348,0.401338756084442,0.891479909420013,-0.210216000676155,0.650610029697418 ,0.750839710235596,0.113781958818436,0.662245333194733,0.742432057857513,-0.101122446358204,0.35404372215271 ,0.848205924034119,-0.393953949213028,0.33390274643898,0.823867678642273,-0.457985788583755,-0.299774140119553 ,0.750125706195831,-0.589446246623993,-0.325168341398239,0.677460372447968,-0.659782588481903,0.35404372215271 ,0.848205924034119,-0.393953949213028,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.903453350067139 ,0.0792897418141365,-0.421289950609207,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.299774140119553 ,0.750125706195831,-0.589446246623993,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.19065423309803 ,0.753101229667664,-0.629674077033997,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.903453350067139 ,0.0792897418141365,-0.421289950609207,0.401338756084442,0.891479909420013,-0.210216000676155,0.35404372215271 ,0.848205924034119,-0.393953949213028,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.19065423309803 ,0.753101229667664,-0.629674077033997,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.749875366687775 ,0.181030079722404,-0.636329352855682,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.631305754184723 ,0.608145177364349,-0.481261342763901,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.812742531299591 ,0.259539633989334,-0.521621286869049,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.749875366687775 ,0.181030079722404,-0.636329352855682,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.384992688894272 ,0.544456601142883,-0.745216548442841,-0.719125330448151,0.296634525060654,-0.628384232521057,0.370056182146072 ,0.811048626899719,-0.453054636716843,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.384992688894272 ,0.544456601142883,-0.745216548442841,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.877584159374237 ,0.190617814660072,-0.439898729324341,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.384992688894272 ,0.544456601142883,-0.745216548442841,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973 ,-0.298690170049667,-0.372382044792175,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.903518497943878 ,-0.0541667006909847,-0.425112038850784,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878 ,-0.0541667006909847,-0.425112038850784,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.946641564369202 ,0.0270117726176977,-0.321154475212097,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.903518497943878 ,-0.0541667006909847,-0.425112038850784,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.929068803787231 ,-0.0690155401825905,-0.363411635160446,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.889417350292206 ,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784,0.370056182146072 ,0.811048626899719,-0.453054636716843,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.914967000484467 ,-0.0528537072241306,-0.400052279233933,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973 ,-0.298690170049667,-0.372382044792175,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.914967000484467 ,-0.0528537072241306,-0.400052279233933,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.877584159374237 ,0.190617814660072,-0.439898729324341,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.914967000484467 ,-0.0528537072241306,-0.400052279233933,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903453350067139 ,0.0792897418141365,-0.421289950609207,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.563491344451904 ,0.231473565101624,-0.793030619621277,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.469266027212143 ,-0.852578699588776,0.229997724294662,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.339177936315537 ,-0.843130052089691,0.417241036891937,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.493718534708023 ,-0.839366674423218,0.227388679981232,-0.474541693925858,-0.67278927564621,0.567595541477203,0.0940685495734215 ,-0.732769310474396,0.673943758010864,0.656731724739075,-0.381447851657867,0.650538980960846,0.681784629821777 ,-0.285219341516495,0.673661351203918,0.629800915718079,-0.358788877725601,0.68892765045166,0.656731724739075 ,-0.381447851657867,0.650538980960846,0.629800915718079,-0.358788877725601,0.68892765045166,0.680992484092712 ,-0.305005490779877,0.665748357772827,0.678119361400604,-0.318360239267349,0.662420451641083,0.857260406017303 ,0.312566876411438,0.409153461456299,0.855352699756622,0.226547658443451,0.46588408946991,0.741662085056305,0.344577699899673 ,0.575502872467041,0.813006162643433,0.437411576509476,0.384307235479355,0.426225006580353,-0.76509952545166 ,0.482654064893723,0.361090242862701,-0.862221240997314,0.355229914188385,0.369030982255936,-0.873893618583679 ,0.316427052021027,0.408859342336655,-0.819536507129669,0.401489645242691,0.361090242862701,-0.862221240997314 ,0.355229914188385,0.193085044622421,-0.95480340719223,0.225983783602715,0.225613579154015,-0.956868171691895 ,0.183034926652908,0.369030982255936,-0.873893618583679,0.316427052021027,0.545321881771088,-0.833433032035828 ,0.0895174741744995,0.471000701189041,-0.846986770629883,0.246519237756729,0.42274335026741,-0.887621939182281 ,0.182798534631729,0.465096980333328,-0.885112583637238,0.016138968989253,0.42274335026741,-0.887621939182281 ,0.182798534631729,0.263781130313873,-0.963467478752136,0.0463673323392868,0.283746033906937,-0.948122382164001 ,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001 ,-0.143360316753387,0.263781130313873,-0.963467478752136,0.0463673323392868,0.158431231975555,-0.986164569854736 ,-0.0487753190100193,0.164555922150612,-0.956649422645569,-0.240298211574554,0.158431231975555,-0.986164569854736 ,-0.0487753190100193,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0633370503783226,-0.944429814815521 ,-0.322553485631943,0.164555922150612,-0.956649422645569,-0.240298211574554,0.361090242862701,-0.862221240997314 ,0.355229914188385,0.426225006580353,-0.76509952545166,0.482654064893723,0.295715004205704,-0.771513819694519 ,0.56331080198288,0.233462005853653,-0.895743429660797,0.378337532281876,0.193085044622421,-0.95480340719223 ,0.225983783602715,0.361090242862701,-0.862221240997314,0.355229914188385,0.233462005853653,-0.895743429660797 ,0.378337532281876,0.295715004205704,-0.771513819694519,0.56331080198288,0.0651562884449959,-0.780692636966705 ,0.62150913476944,0.050213560461998,-0.91094309091568,0.409464567899704,0.233462005853653,-0.895743429660797 ,0.378337532281876,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0628481134772301,-0.906862795352936 ,0.416713327169418,0.050213560461998,-0.91094309091568,0.409464567899704,0.0651562884449959,-0.780692636966705 ,0.62150913476944,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0766859278082848,-0.975562393665314 ,0.205905899405479,0.050213560461998,-0.91094309091568,0.409464567899704,-0.0628481134772301,-0.906862795352936 ,0.416713327169418,0.193085044622421,-0.95480340719223,0.225983783602715,0.233462005853653,-0.895743429660797 ,0.378337532281876,0.050213560461998,-0.91094309091568,0.409464567899704,0.0766859278082848,-0.975562393665314 ,0.205905899405479,-0.0777209997177124,-0.922415435314178,-0.378297746181488,0.0633370503783226,-0.944429814815521 ,-0.322553485631943,0.0663259923458099,-0.98754096031189,-0.14270156621933,-0.0788524150848389,-0.974068284034729 ,-0.212069168686867,0.684517562389374,-0.439017295837402,0.581978976726532,0.688922643661499,-0.305572867393494 ,0.657275319099426,0.844530344009399,-0.306019067764282,0.4394551217556,0.789786696434021,-0.370871901512146 ,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.688922643661499,-0.305572867393494 ,0.657275319099426,0.750554323196411,-0.229917243123055,0.619521021842957,0.926659166812897,-0.245477139949799 ,0.284681916236877,0.897057175636292,-0.352101475000381,0.267044723033905,0.844530344009399,-0.306019067764282 ,0.4394551217556,0.926659166812897,-0.245477139949799,0.284681916236877,0.927076876163483,-0.29800683259964,0.227421119809151 ,0.640791594982147,-0.766526699066162,0.0426960773766041,0.705848097801209,-0.694441199302673,0.13974928855896 ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.638466238975525,-0.769491136074066,0.0156274978071451 ,0.693672001361847,-0.686315536499023,0.218609541654587,0.772367715835571,-0.599683940410614,0.209349811077118 ,0.727549016475677,-0.679640352725983,0.0936024785041809,0.705848097801209,-0.694441199302673,0.13974928855896 ,0.756793797016144,-0.0805434510111809,0.64867240190506,0.821784615516663,-0.261638671159744,0.506177127361298 ,0.792236804962158,-0.0960670188069344,0.602604329586029,0.70995169878006,-0.557043075561523,0.430896311998367 ,0.821784615516663,-0.261638671159744,0.506177127361298,0.756793797016144,-0.0805434510111809,0.64867240190506 ,0.601338624954224,-0.55975753068924,0.570143282413483,0.471000701189041,-0.846986770629883,0.246519237756729 ,0.539758801460266,-0.780041754245758,0.316536396741867,0.425350964069366,-0.787436366081238,0.446117222309113 ,0.408859342336655,-0.819536507129669,0.401489645242691,0.70995169878006,-0.557043075561523,0.430896311998367 ,0.601338624954224,-0.55975753068924,0.570143282413483,0.425350964069366,-0.787436366081238,0.446117222309113 ,0.539758801460266,-0.780041754245758,0.316536396741867,0.263781130313873,-0.963467478752136,0.0463673323392868 ,0.42274335026741,-0.887621939182281,0.182798534631729,0.369030982255936,-0.873893618583679,0.316427052021027 ,0.225613579154015,-0.956868171691895,0.183034926652908,0.471000701189041,-0.846986770629883,0.246519237756729 ,0.408859342336655,-0.819536507129669,0.401489645242691,0.369030982255936,-0.873893618583679,0.316427052021027 ,0.42274335026741,-0.887621939182281,0.182798534631729,0.0663259923458099,-0.98754096031189,-0.14270156621933 ,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.128954827785492,-0.985570788383484,0.109639815986156 ,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.263781130313873,-0.963467478752136,0.0463673323392868 ,0.225613579154015,-0.956868171691895,0.183034926652908,0.128954827785492,-0.985570788383484,0.109639815986156 ,0.158431231975555,-0.986164569854736,-0.0487753190100193,-0.0788524150848389,-0.974068284034729,-0.212069168686867 ,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0500960312783718,-0.998004376888275,0.0384394414722919 ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.0727874711155891,-0.98180228471756,0.1754030585289 ,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,0.0500960312783718,-0.998004376888275,0.0384394414722919 ,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199 ,0.772367715835571,-0.599683940410614,0.209349811077118,0.785579741001129,-0.492246091365814,0.374910920858383 ,0.789786696434021,-0.370871901512146,0.488560140132904,0.892324268817902,-0.364589005708694,0.266143202781677 ,0.8774573802948,-0.435060352087021,0.201967760920525,0.785579741001129,-0.492246091365814,0.374910920858383 ,0.693672001361847,-0.686315536499023,0.218609541654587,0.689838171005249,-0.617681860923767,0.377614080905914 ,0.785579741001129,-0.492246091365814,0.374910920858383,0.772367715835571,-0.599683940410614,0.209349811077118 ,0.684517562389374,-0.439017295837402,0.581978976726532,0.789786696434021,-0.370871901512146,0.488560140132904 ,0.785579741001129,-0.492246091365814,0.374910920858383,0.689838171005249,-0.617681860923767,0.377614080905914 ,0.813478171825409,-0.273027837276459,0.513526141643524,0.887543320655823,-0.171314582228661,0.427689343690872 ,0.651034355163574,-0.303375482559204,0.695785582065582,0.691827952861786,-0.359834015369415,0.626013994216919 ,0.683746695518494,-0.463673830032349,0.563468754291534,0.813478171825409,-0.273027837276459,0.513526141643524 ,0.691827952861786,-0.359834015369415,0.626013994216919,0.780404269695282,-0.392066359519959,0.487086415290833 ,0.683746695518494,-0.463673830032349,0.563468754291534,0.780404269695282,-0.392066359519959,0.487086415290833 ,0.810256838798523,-0.430587977170944,0.397590130567551,0.629647791385651,-0.52997088432312,0.568044483661652 ,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.377608895301819,-0.90075010061264,0.214617609977722 ,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.339177936315537,-0.843130052089691,0.417241036891937 ,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.339177936315537,-0.843130052089691,0.417241036891937 ,0.0940685495734215,-0.732769310474396,0.673943758010864,0.266091585159302,-0.603160440921783,0.751926004886627 ,0.553863286972046,-0.30215710401535,0.77584570646286,0.266091585159302,-0.603160440921783,0.751926004886627 ,0.0940685495734215,-0.732769310474396,0.673943758010864,0.525104641914368,-0.419060587882996,0.740711390972137 ,0.553863286972046,-0.30215710401535,0.77584570646286,0.525104641914368,-0.419060587882996,0.740711390972137 ,0.588271081447601,-0.259690821170807,0.765831470489502,0.607095539569855,-0.200262412428856,0.768979847431183 ,0.546967387199402,0.0579036511480808,0.835148990154266,0.568371534347534,0.0187626089900732,0.822558045387268 ,0.601098597049713,0.0911194980144501,0.793963313102722,0.565106153488159,0.017743531614542,0.824827373027802 ,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.301303088665009,-0.716448962688446,0.629219651222229 ,0.411182582378387,-0.842439949512482,0.348172098398209,0.117540158331394,-0.936730265617371,0.329728245735168 ,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.117540158331394,-0.936730265617371,0.329728245735168 ,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.0433456413447857,-0.716439366340637,0.696301460266113 ,0.44965198636055,0.140096634626389,0.882148504257202,0.56849592924118,-0.125116035342216,0.813116490840912,0.416703939437866 ,-0.0255245417356491,0.908683836460114,0.218448147177696,-0.859921038150787,0.461320102214813,0.190928906202316 ,-0.824125647544861,0.533257067203522,0.301912575960159,-0.736388921737671,0.605458617210388,0.423061966896057 ,-0.638191282749176,0.643218815326691,0.350974529981613,-0.540442049503326,0.764682471752167,0.461174815893173 ,-0.519026458263397,0.719673037528992,0.301912575960159,-0.736388921737671,0.605458617210388,0.190928906202316 ,-0.824125647544861,0.533257067203522,0.56849592924118,-0.125116035342216,0.813116490840912,0.423061966896057 ,-0.638191282749176,0.643218815326691,0.301912575960159,-0.736388921737671,0.605458617210388,0.461174815893173 ,-0.519026458263397,0.719673037528992,0.633136808872223,-0.0669011846184731,0.771143317222595,0.655753970146179 ,-0.0819050073623657,0.750518679618835,0.501314342021942,-0.180266559123993,0.846278846263886,0.421490222215652 ,-0.217597857117653,0.880339205265045,0.345462441444397,-0.298967152833939,0.889536023139954,0.578185617923737 ,-0.0845057815313339,0.811517179012299,0.633136808872223,-0.0669011846184731,0.771143317222595,0.421490222215652 ,-0.217597857117653,0.880339205265045,0.523068964481354,-0.400331109762192,0.752418637275696,0.511712968349457 ,-0.26713839173317,0.816570222377777,0.443391680717468,-0.0999263972043991,0.89074045419693,0.515636503696442 ,-0.41490975022316,0.749645829200745,0.7577885389328,0.376234740018845,0.533107817173004,0.740872263908386,0.260281056165695 ,0.619162321090698,0.750837445259094,-0.0367836877703667,0.659461975097656,0.758135914802551,0.0851427242159843 ,0.646514236927032,0.740872263908386,0.260281056165695,0.619162321090698,0.558381021022797,0.167118594050407 ,0.812577426433563,0.488678455352783,-0.257274806499481,0.833668410778046,0.750837445259094,-0.0367836877703667 ,0.659461975097656,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.377608895301819,-0.90075010061264 ,0.214617609977722,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.696032464504242,-0.619228482246399 ,-0.363448590040207,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.696032464504242,-0.619228482246399 ,-0.363448590040207,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.728337526321411,0.0211671013385057 ,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.728337526321411,0.0211671013385057 ,-0.684891521930695,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.572831332683563,0.0232040770351887 ,-0.819344758987427,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.572831332683563,0.0232040770351887 ,-0.819344758987427,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.392845422029495,-0.17293743789196 ,-0.903197169303894,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.72423392534256,0.108453460037708 ,-0.680972158908844,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.749779462814331,-0.631075918674469 ,-0.198931902647018,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.731875240802765,-0.356860965490341 ,-0.580524682998657,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.72423392534256,0.108453460037708 ,-0.680972158908844,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.749779462814331,-0.631075918674469 ,-0.198931902647018,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.731875240802765,-0.356860965490341 ,-0.580524682998657,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.970641255378723,0.0346399769186974 ,-0.238024458289146,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.946641564369202,0.0270117726176977 ,-0.321154475212097,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.83115953207016,0.347447574138641 ,0.434112966060638,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.970641255378723,0.0346399769186974 ,-0.238024458289146,-0.634040713310242,0.756764888763428,0.159057512879372,-0.945308268070221,0.226358875632286 ,-0.234848886728287,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.83115953207016,0.347447574138641 ,0.434112966060638,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.946641564369202,0.0270117726176977 ,-0.321154475212097,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.945308268070221,0.226358875632286 ,-0.234848886728287,0.0454688854515553,-0.765503704547882,0.641822934150696,0.0821766927838326,-0.66467010974884 ,0.742603957653046,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.915560901165009,-0.141839787364006 ,0.376337260007858,0.956220626831055,-0.152332276105881,0.249873846769333,0.970759510993958,-0.233238592743874 ,0.056795421987772,0.920036554336548,-0.30953249335289,0.240254893898964,0.915560901165009,-0.141839787364006 ,0.376337260007858,0.920036554336548,-0.30953249335289,0.240254893898964,0.840808868408203,-0.369773417711258 ,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.639384806156158,-0.761013865470886 ,0.109749406576157,0.65738570690155,-0.752218425273895,0.0448495484888554,0.55375200510025,-0.828931510448456 ,-0.0789381936192513,0.575045108795166,-0.818020403385162,0.0128742791712284,0.65738570690155,-0.752218425273895 ,0.0448495484888554,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.501666784286499,-0.849441289901733 ,-0.163646027445793,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.55375200510025,-0.828931510448456 ,-0.0789381936192513,0.499172002077103,-0.857490539550781,-0.124648600816727,0.537862658500671,-0.839294493198395 ,-0.0793002098798752,0.575045108795166,-0.818020403385162,0.0128742791712284,-0.032355971634388,-0.99692964553833 ,0.0713044255971909,0.155652940273285,-0.987067878246307,0.0383299365639687,0.168408244848251,-0.974918007850647 ,0.145511314272881,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647 ,0.145511314272881,0.155652940273285,-0.987067878246307,0.0383299365639687,0.279211044311523,-0.955691933631897 ,0.093242421746254,0.304768770933151,-0.92969423532486,0.206844300031662,0.741662085056305,0.344577699899673 ,0.575502872467041,0.814013004302979,0.416528642177582,0.404829293489456,0.854046881198883,0.485713124275208 ,0.186243653297424,0.813006162643433,0.437411576509476,0.384307235479355,0.793840944766998,0.179479137063026 ,0.581036806106567,0.776109874248505,0.274881482124329,0.567532956600189,0.864675521850586,0.193993464112282 ,0.46336030960083,0.776109874248505,0.274881482124329,0.567532956600189,0.815548717975616,0.273398518562317,0.510032892227173 ,0.864675521850586,0.193993464112282,0.46336030960083,0.894858956336975,-0.0870964974164963,0.437768936157227 ,0.834977984428406,0.275511413812637,0.47634568810463,0.813101530075073,0.281051158905029,0.509780466556549,0.693030059337616 ,-0.0411044172942638,0.71973592042923,0.717148721218109,-0.158668875694275,0.678617656230927,0.738801121711731 ,-0.260166734457016,0.6216801404953,0.881620466709137,-0.332029432058334,0.335412949323654,0.894858956336975 ,-0.0870964974164963,0.437768936157227,0.717148721218109,-0.158668875694275,0.678617656230927,0.885035216808319 ,0.393218964338303,0.249181613326073,0.813006162643433,0.437411576509476,0.384307235479355,0.854046881198883 ,0.485713124275208,0.186243653297424,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.109049446880817 ,0.0514820925891399,0.992702305316925,0.54212898015976,0.215727955102921,0.812131583690643,0.470013290643692 ,0.212332352995873,0.856739461421967,0.0144113004207611,0.0269631575793028,0.999532520771027,0.779178857803345 ,0.328662276268005,0.533724129199982,0.749379277229309,0.298672914505005,0.590952754020691,0.776918292045593 ,0.306892603635788,0.549740731716156,0.791379868984222,0.358002513647079,0.495532125234604,0.749379277229309 ,0.298672914505005,0.590952754020691,0.776109874248505,0.274881482124329,0.567532956600189,0.793840944766998 ,0.179479137063026,0.581036806106567,0.776918292045593,0.306892603635788,0.549740731716156,0.328961253166199 ,0.182314842939377,0.92657744884491,0.335490047931671,-0.171642184257507,0.926275014877319,0.351316899061203 ,-0.0729207322001457,0.933412551879883,0.314301073551178,0.320888847112656,0.893445670604706,0.533053755760193 ,0.0411353260278702,0.845080852508545,0.770362615585327,0.0158082563430071,0.63740998506546,0.786049902439117 ,0.275353401899338,0.553449213504791,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117 ,0.275353401899338,0.553449213504791,0.770362615585327,0.0158082563430071,0.63740998506546,0.842584788799286 ,-0.21356026828289,0.494411617517471,0.912213087081909,0.0526493825018406,0.406319200992584,0.926979184150696 ,-0.0986248403787613,0.36191537976265,0.912213087081909,0.0526493825018406,0.406319200992584,0.842584788799286 ,-0.21356026828289,0.494411617517471,0.831848502159119,-0.322033703327179,0.452020287513733,0.926979184150696 ,-0.0986248403787613,0.36191537976265,0.831848502159119,-0.322033703327179,0.452020287513733,0.838417947292328 ,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.754335284233093 ,-0.305042564868927,0.581315159797668,0.838417947292328,-0.244426995515823,0.487145572900772,0.831848502159119 ,-0.322033703327179,0.452020287513733,0.73811411857605,-0.426667273044586,0.522630453109741,-0.0354966223239899 ,-0.161021754145622,0.986312329769135,0.197210118174553,0.0128493588417768,0.980277061462402,0.193743079900742 ,0.0896209701895714,0.976950228214264,0.17069847881794,-0.387216597795486,0.906049311161041,0.197210118174553 ,0.0128493588417768,0.980277061462402,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.458961844444275 ,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.193743079900742 ,0.0896209701895714,0.976950228214264,0.190371856093407,0.256429195404053,0.947629988193512,0.190371856093407 ,0.256429195404053,0.947629988193512,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899 ,-0.161021754145622,0.986312329769135,0.573087453842163,0.0656763836741447,0.816858232021332,0.636694431304932 ,0.0437434837222099,0.769874513149261,0.627576470375061,-0.135800153017044,0.766619920730591,0.529063761234283 ,-0.0630637779831886,0.846235513687134,0.573087453842163,0.0656763836741447,0.816858232021332,0.529063761234283 ,-0.0630637779831886,0.846235513687134,0.525402009487152,0.0301267635077238,0.85032057762146,0.621637463569641 ,0.0923129394650459,0.77784651517868,0.620820641517639,-0.00240864953957498,0.783948957920074,0.652630388736725 ,-0.0358134843409061,0.756829559803009,0.730820298194885,-0.016795739531517,0.682363271713257,0.724583506584167 ,-0.0711281225085258,0.685506820678711,0.61716902256012,-0.00506624486297369,0.786814272403717,0.750991225242615 ,0.0683757290244102,0.656762480735779,0.730820298194885,-0.016795739531517,0.682363271713257,0.652630388736725 ,-0.0358134843409061,0.756829559803009,0.802095234394073,-0.0203569829463959,0.596849083900452,0.724583506584167 ,-0.0711281225085258,0.685506820678711,0.730820298194885,-0.016795739531517,0.682363271713257,0.750991225242615 ,0.0683757290244102,0.656762480735779,0.56373119354248,0.0243276692926884,0.825599908828735,0.613882482051849 ,0.099590003490448,0.783090114593506,0.615384101867676,0.0611244365572929,0.785853803157806,0.620820641517639 ,-0.00240864953957498,0.783948957920074,0.615384101867676,0.0611244365572929,0.785853803157806,0.652630388736725 ,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.621637463569641 ,0.0923129394650459,0.77784651517868,0.613882482051849,0.099590003490448,0.783090114593506,0.56373119354248,0.0243276692926884 ,0.825599908828735,0.573087453842163,0.0656763836741447,0.816858232021332,0.56373119354248,0.0243276692926884 ,0.825599908828735,0.620820641517639,-0.00240864953957498,0.783948957920074,0.636694431304932,0.0437434837222099 ,0.769874513149261,0.573087453842163,0.0656763836741447,0.816858232021332,0.598116338253021,0.120038144290447 ,0.792368412017822,0.621637463569641,0.0923129394650459,0.77784651517868,0.41924661397934,0.116037733852863,0.90042632818222 ,0.528464257717133,0.246433109045029,0.812401533126831,0.621637463569641,0.0923129394650459,0.77784651517868 ,0.598116338253021,0.120038144290447,0.792368412017822,0.712920248508453,0.00929267052561045,0.701183557510376 ,0.720236837863922,0.181686788797379,0.669513881206512,0.751433670520782,0.0212495382875204,0.659466326236725 ,0.598116338253021,0.120038144290447,0.792368412017822,0.528464257717133,0.246433109045029,0.812401533126831 ,0.598116338253021,0.120038144290447,0.792368412017822,0.751433670520782,0.0212495382875204,0.659466326236725 ,0.712920248508453,0.00929267052561045,0.701183557510376,0.621637463569641,0.0923129394650459,0.77784651517868 ,0.525402009487152,0.0301267635077238,0.85032057762146,0.41924661397934,0.116037733852863,0.90042632818222,0.724869191646576 ,-0.144625514745712,0.673534035682678,0.712920248508453,0.00929267052561045,0.701183557510376,0.751433670520782 ,0.0212495382875204,0.659466326236725,0.858066916465759,-0.0402064435184002,0.511961579322815,0.751433670520782 ,0.0212495382875204,0.659466326236725,0.720236837863922,0.181686788797379,0.669513881206512,0.875872433185577 ,0.296488851308823,0.38071221113205,0.858066916465759,-0.0402064435184002,0.511961579322815,0.578135192394257 ,0.0218988731503487,0.815647065639496,0.593307375907898,-0.0775594636797905,0.801230847835541,0.577744483947754 ,0.0458397567272186,0.814929485321045,0.59909462928772,0.124072253704071,0.791006743907928,0.578135192394257 ,0.0218988731503487,0.815647065639496,0.577744483947754,0.0458397567272186,0.814929485321045,0.550924062728882 ,0.0100475419312716,0.834494948387146,0.59909462928772,0.124072253704071,0.791006743907928,0.550924062728882 ,0.0100475419312716,0.834494948387146,0.584165692329407,-0.333255082368851,0.740061819553375,0.747522175312042 ,-0.213430538773537,0.629013538360596,0.916658163070679,-0.0698241367936134,0.393525570631027,0.855076372623444 ,-0.165702432394028,0.491311639547348,0.85496574640274,-0.0235987044870853,0.518147349357605,0.903705775737762 ,0.0166217982769012,0.427831262350082,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916658163070679 ,-0.0698241367936134,0.393525570631027,0.903705775737762,0.0166217982769012,0.427831262350082,0.916476547718048 ,0.0582267269492149,0.395828783512115,0.358242690563202,-0.369526594877243,0.857386887073517,0.386847853660584 ,-0.767014622688293,0.511895835399628,0.738801121711731,-0.260166734457016,0.6216801404953,0.16572479903698,-0.647090375423431 ,0.744183719158173,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0632589310407639,-0.395606756210327 ,0.916238844394684,0.0821766927838326,-0.66467010974884,0.742603957653046,0.2151879966259,-0.952648401260376 ,-0.214837476611137,0.589298963546753,-0.771825730800629,0.238771393895149,0.704199492931366,-0.704627811908722 ,0.0871931314468384,0.43766725063324,-0.727506041526794,-0.528377115726471,0.0578227378427982,-0.628531396389008 ,-0.775631904602051,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.2151879966259,-0.952648401260376 ,-0.214837476611137,0.43766725063324,-0.727506041526794,-0.528377115726471,0.778993248939514,-0.607196033000946 ,0.156468689441681,0.914134383201599,-0.267116606235504,-0.304970562458038,0.43766725063324,-0.727506041526794 ,-0.528377115726471,0.704199492931366,-0.704627811908722,0.0871931314468384,0.801777124404907,0.00266337930224836 ,-0.597617149353027,0.0578227378427982,-0.628531396389008,-0.775631904602051,0.43766725063324,-0.727506041526794 ,-0.528377115726471,0.43766725063324,-0.727506041526794,-0.528377115726471,0.914134383201599,-0.267116606235504 ,-0.304970562458038,0.801777124404907,0.00266337930224836,-0.597617149353027,0.844061017036438,0.391468346118927 ,0.366488069295883,0.801777124404907,0.00266337930224836,-0.597617149353027,0.993568658828735,0.0655909031629562 ,0.0922989472746849,0.941748380661011,0.168847903609276,0.290861427783966,0.823821365833282,-0.474406152963638 ,0.310253411531448,0.940892815589905,-0.119216494262218,0.317030221223831,0.941748380661011,0.168847903609276 ,0.290861427783966,0.993568658828735,0.0655909031629562,0.0922989472746849,0.218448147177696,-0.859921038150787 ,0.461320102214813,0.462026834487915,-0.814152240753174,0.351692080497742,0.280335813760757,-0.904288768768311 ,0.321983903646469,0.160614088177681,-0.826539099216461,0.539477705955505,0.851511597633362,-0.5011847615242 ,0.154083982110024,0.625836908817291,-0.779953479766846,0.000855531019624323,0.280335813760757,-0.904288768768311 ,0.321983903646469,0.462026834487915,-0.814152240753174,0.351692080497742,0.632524311542511,-0.737463712692261 ,0.236770406365395,0.125414818525314,-0.832001984119415,0.540410816669464,0.280335813760757,-0.904288768768311 ,0.321983903646469,0.625836908817291,-0.779953479766846,0.000855531019624323,-0.119093708693981,-0.53387188911438 ,0.837136447429657,0.160614088177681,-0.826539099216461,0.539477705955505,0.280335813760757,-0.904288768768311 ,0.321983903646469,0.125414818525314,-0.832001984119415,0.540410816669464,-0.119093708693981,-0.53387188911438 ,0.837136447429657,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403 ,0.796926200389862,0.0803298726677895,0.272869914770126,0.958691358566284,-0.549701511859894,-0.519823312759399 ,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.600347876548767,0.0670153573155403 ,0.796926200389862,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403 ,0.796926200389862,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.498864650726318,-0.669482290744781 ,0.550388514995575,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.0803298726677895,0.272869914770126 ,0.958691358566284,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.0804867446422577,-0.0660979077219963 ,0.994561672210693,0.591780304908752,0.0913430228829384,0.8009073138237,-0.119093708693981,-0.53387188911438 ,0.837136447429657,0.350974529981613,-0.540442049503326,0.764682471752167,0.190928906202316,-0.824125647544861 ,0.533257067203522,0.160614088177681,-0.826539099216461,0.539477705955505,0.218448147177696,-0.859921038150787 ,0.461320102214813,0.160614088177681,-0.826539099216461,0.539477705955505,0.190928906202316,-0.824125647544861 ,0.533257067203522,0.724950075149536,-0.680160522460938,0.108761206269264,0.535486578941345,-0.739663183689117 ,0.407618075609207,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.2151879966259,-0.952648401260376 ,-0.214837476611137,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.535486578941345,-0.739663183689117 ,0.407618075609207,0.506778419017792,-0.624182820320129,0.594618737697601,-0.449249923229218,-0.874760508537292 ,0.181572452187538,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.506778419017792,-0.624182820320129 ,0.594618737697601,0.591780304908752,0.0913430228829384,0.8009073138237,-0.0804867446422577,-0.0660979077219963 ,0.994561672210693,-0.498864650726318,-0.669482290744781,0.550388514995575,0.506778419017792,-0.624182820320129 ,0.594618737697601,0.786046326160431,0.0746424272656441,0.613644540309906,0.591780304908752,0.0913430228829384 ,0.8009073138237,0.993568658828735,0.0655909031629562,0.0922989472746849,0.801777124404907,0.00266337930224836 ,-0.597617149353027,0.914134383201599,-0.267116606235504,-0.304970562458038,0.914134383201599,-0.267116606235504 ,-0.304970562458038,0.778993248939514,-0.607196033000946,0.156468689441681,0.823821365833282,-0.474406152963638 ,0.310253411531448,0.993568658828735,0.0655909031629562,0.0922989472746849,0.802095234394073,-0.0203569829463959 ,0.596849083900452,0.750991225242615,0.0683757290244102,0.656762480735779,0.734094381332397,0.226703405380249 ,0.640086710453033,0.771234273910522,0.123447246849537,0.62446653842926,0.61716902256012,-0.00506624486297369 ,0.786814272403717,0.59909462928772,0.124072253704071,0.791006743907928,0.734094381332397,0.226703405380249,0.640086710453033 ,0.750991225242615,0.0683757290244102,0.656762480735779,0.747522175312042,-0.213430538773537,0.629013538360596 ,0.89356255531311,-0.0812801718711853,0.441519498825073,0.734094381332397,0.226703405380249,0.640086710453033 ,0.59909462928772,0.124072253704071,0.791006743907928,0.886316955089569,0.0816843584179878,0.455817818641663 ,0.771234273910522,0.123447246849537,0.62446653842926,0.734094381332397,0.226703405380249,0.640086710453033,0.89356255531311 ,-0.0812801718711853,0.441519498825073,0.740868389606476,0.000323399232001975,0.671650171279907,0.825742661952972 ,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.732703268527985 ,-0.161094918847084,0.661206722259521,0.740868389606476,0.000323399232001975,0.671650171279907,0.732703268527985 ,-0.161094918847084,0.661206722259521,0.627576470375061,-0.135800153017044,0.766619920730591,0.636694431304932 ,0.0437434837222099,0.769874513149261,0.841468989849091,0.227338507771492,0.490150064229965,0.886316955089569 ,0.0816843584179878,0.455817818641663,0.96756237745285,-0.0955442041158676,0.233868315815926,0.918524086475372 ,-0.00282709067687392,0.395354956388474,0.918524086475372,-0.00282709067687392,0.395354956388474,0.853365004062653 ,0.0768043100833893,0.515625178813934,0.841468989849091,0.227338507771492,0.490150064229965,0.868124186992645 ,-0.0820373073220253,0.48952043056488,0.826119303703308,-0.120154865086079,0.550535798072815,0.832460403442383 ,-0.0762069076299667,0.548818945884705,0.853365004062653,0.0768043100833893,0.515625178813934,0.918524086475372 ,-0.00282709067687392,0.395354956388474,0.868124186992645,-0.0820373073220253,0.48952043056488,0.853365004062653 ,0.0768043100833893,0.515625178813934,0.605580151081085,-0.127637818455696,0.785481572151184,0.627576470375061 ,-0.135800153017044,0.766619920730591,0.732703268527985,-0.161094918847084,0.661206722259521,0.72280216217041 ,-0.137790024280548,0.677178680896759,0.732703268527985,-0.161094918847084,0.661206722259521,0.832460403442383 ,-0.0762069076299667,0.548818945884705,0.826119303703308,-0.120154865086079,0.550535798072815,0.72280216217041 ,-0.137790024280548,0.677178680896759,0.960835516452789,0.146968066692352,0.234937101602554,0.987058341503143 ,-0.0681737512350082,0.145148620009422,0.988696813583374,-0.11085943877697,0.10093978792429,0.974692046642303 ,0.140635088086128,0.17377345263958,0.988696813583374,-0.11085943877697,0.10093978792429,0.971762239933014,-0.143596902489662 ,0.187237858772278,0.970540165901184,0.124821022152901,0.206086173653603,0.974692046642303,0.140635088086128 ,0.17377345263958,0.987058341503143,-0.0681737512350082,0.145148620009422,0.952345132827759,-0.057124700397253 ,0.299625486135483,0.939327776432037,-0.292384117841721,0.17937345802784,0.94329446554184,-0.325108468532562 ,0.0670826062560081,0.918524086475372,-0.00282709067687392,0.395354956388474,0.926874995231628,-0.321304202079773 ,0.194078236818314,0.939327776432037,-0.292384117841721,0.17937345802784,0.952345132827759,-0.057124700397253 ,0.299625486135483,0.934174954891205,-0.332788705825806,0.128719761967659,0.94329446554184,-0.325108468532562 ,0.0670826062560081,0.939327776432037,-0.292384117841721,0.17937345802784,0.926874995231628,-0.321304202079773 ,0.194078236818314,0.826119303703308,-0.120154865086079,0.550535798072815,0.868124186992645,-0.0820373073220253 ,0.48952043056488,0.903705775737762,0.0166217982769012,0.427831262350082,0.85496574640274,-0.0235987044870853 ,0.518147349357605,0.868124186992645,-0.0820373073220253,0.48952043056488,0.918524086475372,-0.00282709067687392 ,0.395354956388474,0.916476547718048,0.0582267269492149,0.395828783512115,0.903705775737762,0.0166217982769012 ,0.427831262350082,0.717148721218109,-0.158668875694275,0.678617656230927,0.693030059337616,-0.0411044172942638 ,0.71973592042923,0.204357400536537,-0.124537408351898,0.97094202041626,0.359977900981903,-0.319483041763306 ,0.876553773880005,0.204357400536537,-0.124537408351898,0.97094202041626,0.693030059337616,-0.0411044172942638 ,0.71973592042923,0.197210118174553,0.0128493588417768,0.980277061462402,0.197210118174553,0.0128493588417768 ,0.980277061462402,0.693030059337616,-0.0411044172942638,0.71973592042923,0.813101530075073,0.281051158905029 ,0.509780466556549,0.533409833908081,0.213411912322044,0.818492114543915,0.193743079900742,0.0896209701895714 ,0.976950228214264,0.877371370792389,-0.100216217339039,0.469229310750961,0.848142683506012,0.254542678594589 ,0.464609563350677,0.834977984428406,0.275511413812637,0.47634568810463,0.894858956336975,-0.0870964974164963 ,0.437768936157227,0.862693786621094,0.213308542966843,0.458539962768555,0.728024780750275,0.317726284265518 ,0.607478320598602,0.749379277229309,0.298672914505005,0.590952754020691,0.779178857803345,0.328662276268005 ,0.533724129199982,0.825178265571594,0.267818719148636,0.497346937656403,0.776109874248505,0.274881482124329 ,0.567532956600189,0.749379277229309,0.298672914505005,0.590952754020691,0.728024780750275,0.317726284265518 ,0.607478320598602,0.261966973543167,0.625043272972107,0.735319077968597,0.0635503008961678,0.655404150485992 ,0.752600014209747,0.0571579374372959,0.555576980113983,0.829498171806335,0.27374255657196,0.526692390441895 ,0.804773390293121,0.261966973543167,0.625043272972107,0.735319077968597,0.27374255657196,0.526692390441895,0.804773390293121 ,0.718716561794281,0.339281320571899,0.60690575838089,0.667004644870758,0.442110657691956,0.59970235824585,0.819765686988831 ,0.312743216753006,0.479766517877579,0.79509973526001,0.317423015832901,0.516777575016022,0.779178857803345,0.328662276268005 ,0.533724129199982,0.791379868984222,0.358002513647079,0.495532125234604,0.779178857803345,0.328662276268005 ,0.533724129199982,0.79509973526001,0.317423015832901,0.516777575016022,0.801001727581024,0.319669455289841,0.506169617176056 ,0.825178265571594,0.267818719148636,0.497346937656403,0.825178265571594,0.267818719148636,0.497346937656403 ,0.667004644870758,0.442110657691956,0.59970235824585,0.718716561794281,0.339281320571899,0.60690575838089,0.862693786621094 ,0.213308542966843,0.458539962768555,0.813101530075073,0.281051158905029,0.509780466556549,0.819765686988831 ,0.312743216753006,0.479766517877579,0.54212898015976,0.215727955102921,0.812131583690643,0.533409833908081,0.213411912322044 ,0.818492114543915,0.819765686988831,0.312743216753006,0.479766517877579,0.791379868984222,0.358002513647079 ,0.495532125234604,0.470013290643692,0.212332352995873,0.856739461421967,0.54212898015976,0.215727955102921,0.812131583690643 ,0.333709418773651,0.169013321399689,0.927400946617126,0.470013290643692,0.212332352995873,0.856739461421967 ,0.791379868984222,0.358002513647079,0.495532125234604,0.776918292045593,0.306892603635788,0.549740731716156 ,0.651595652103424,0.352775752544403,0.671544790267944,0.316976845264435,0.303443849086761,0.898580849170685 ,0.397927284240723,0.292557120323181,0.869519531726837,0.414541780948639,0.400993496179581,0.816920638084412 ,0.37644562125206,0.38054347038269,0.844674706459045,0.316976845264435,0.303443849086761,0.898580849170685,0.346010982990265 ,0.0731605663895607,0.935373663902283,0.410090506076813,0.0557969398796558,0.910336434841156,0.397927284240723 ,0.292557120323181,0.869519531726837,0.328961253166199,0.182314842939377,0.92657744884491,0.371347606182098,0.418176740407944 ,0.82899284362793,0.397927284240723,0.292557120323181,0.869519531726837,0.410090506076813,0.0557969398796558 ,0.910336434841156,0.410090506076813,0.0557969398796558,0.910336434841156,0.346010982990265,0.0731605663895607 ,0.935373663902283,0.402090311050415,-0.284287929534912,0.870346903800964,0.431166082620621,-0.246951669454575 ,0.867819547653198,-0.0552638620138168,0.347488284111023,0.936054348945618,-0.00221070507541299,0.348074615001678 ,0.937464237213135,0.00455546798184514,0.298394352197647,0.954431772232056,0.410660326480865,0.0589907094836235 ,0.909878134727478,0.503296196460724,0.0546823143959045,0.862382054328918,0.135898023843765,0.169247582554817 ,0.976159334182739,0.179719522595406,0.199890360236168,0.963195025920868,0.166202440857887,0.306374847888947 ,0.937289237976074,0.135898023843765,0.169247582554817,0.976159334182739,0.503296196460724,0.0546823143959045 ,0.862382054328918,0.508710622787476,0.190386489033699,0.839622795581818,0.826946556568146,0.0731306597590446 ,0.557504594326019,0.870097935199738,0.102833516895771,0.482032060623169,0.642289221286774,0.115071445703506 ,0.757775127887726,0.610058009624481,0.18056558072567,0.771508455276489,0.610058009624481,0.18056558072567,0.771508455276489 ,0.642289221286774,0.115071445703506,0.757775127887726,0.471029788255692,0.166954964399338,0.86617374420166,0.491490423679352 ,0.244152218103409,0.835958659648895,0.623485326766968,0.449957937002182,0.639377772808075,0.497093498706818 ,0.456073582172394,0.738169968128204,0.620209395885468,0.316063761711121,0.717944324016571,0.649705529212952 ,0.341418325901031,0.679202735424042,0.594232082366943,0.290724605321884,0.749911665916443,0.663587033748627 ,0.242647290229797,0.707654237747192,0.620209395885468,0.316063761711121,0.717944324016571,0.594232082366943 ,0.290724605321884,0.749911665916443,0.620209395885468,0.316063761711121,0.717944324016571,0.416927576065063 ,0.413195610046387,0.809592962265015,0.370492875576019,0.369821041822433,0.852037250995636,0.556747674942017 ,0.38243293762207,0.737412452697754,0.649705529212952,0.341418325901031,0.679202735424042,0.620209395885468,0.316063761711121 ,0.717944324016571,0.663587033748627,0.242647290229797,0.707654237747192,0.340945303440094,-0.698488175868988 ,0.629182457923889,0.292688071727753,-0.580336809158325,0.759962379932404,0.335490047931671,-0.171642184257507 ,0.926275014877319,0.431166082620621,-0.246951669454575,0.867819547653198,0.335490047931671,-0.171642184257507 ,0.926275014877319,0.328961253166199,0.182314842939377,0.92657744884491,0.410090506076813,0.0557969398796558 ,0.910336434841156,0.431166082620621,-0.246951669454575,0.867819547653198,0.285702854394913,-0.151269629597664 ,0.946304082870483,0.189583629369736,-0.286395132541656,0.939167618751526,0.124305054545403,-0.308796167373657 ,0.942970395088196,0.295946687459946,-0.143637612462044,0.944343090057373,0.785013139247894,0.0451312512159348 ,0.617832958698273,0.733202934265137,-0.122967794537544,0.668799161911011,0.642606198787689,-0.0799093768000603 ,0.762018263339996,0.563811004161835,0.228632539510727,0.793627321720123,0.642606198787689,-0.0799093768000603 ,0.762018263339996,0.568371534347534,0.0187626089900732,0.822558045387268,0.546967387199402,0.0579036511480808 ,0.835148990154266,0.563811004161835,0.228632539510727,0.793627321720123,0.607095539569855,-0.200262412428856 ,0.768979847431183,0.588271081447601,-0.259690821170807,0.765831470489502,0.633589863777161,-0.0252969916909933 ,0.773255407810211,0.655191659927368,0.0146637577563524,0.755320370197296,-0.00835443940013647,-0.52916145324707 ,0.848480045795441,0.462689489126205,-0.42478209733963,0.778125107288361,0.521133065223694,-0.480470329523087 ,0.705385446548462,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087 ,0.705385446548462,0.462689489126205,-0.42478209733963,0.778125107288361,0.666223108768463,-0.303315341472626 ,0.681283056735992,0.670062482357025,-0.367128610610962,0.645161092281342,0.677804887294769,-0.293700158596039 ,0.674033224582672,0.598259091377258,-0.415802270174026,0.684977769851685,0.521133065223694,-0.480470329523087 ,0.705385446548462,0.670062482357025,-0.367128610610962,0.645161092281342,0.189460039138794,-0.647004544734955 ,0.738572955131531,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087 ,0.705385446548462,0.598259091377258,-0.415802270174026,0.684977769851685,0.788963615894318,-0.297772616147995 ,0.537464380264282,0.775085091590881,-0.264017641544342,0.574053823947906,0.872779548168182,-0.198945015668869 ,0.445731669664383,0.888771831989288,-0.233848795294762,0.394207358360291,0.873168885707855,-0.228458538651466 ,0.430561006069183,0.670062482357025,-0.367128610610962,0.645161092281342,0.788963615894318,-0.297772616147995 ,0.537464380264282,0.771643459796906,-0.219248831272125,0.597073137760162,0.677804887294769,-0.293700158596039 ,0.674033224582672,0.771643459796906,-0.219248831272125,0.597073137760162,0.788963615894318,-0.297772616147995 ,0.537464380264282,0.873168885707855,-0.228458538651466,0.430561006069183,0.861247181892395,-0.192313641309738 ,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.861247181892395,-0.192313641309738 ,0.470392137765884,0.873168885707855,-0.228458538651466,0.430561006069183,0.888771831989288,-0.233848795294762 ,0.394207358360291,0.872779548168182,-0.198945015668869,0.445731669664383,0.917503833770752,-0.132210671901703 ,0.375109404325485,0.92565244436264,-0.184836938977242,0.330155730247498,0.888771831989288,-0.233848795294762 ,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.937154471874237,-0.0475939512252808 ,0.345653474330902,0.980852127075195,0.00218713283538818,0.194741636514664,0.92565244436264,-0.184836938977242 ,0.330155730247498,0.917503833770752,-0.132210671901703,0.375109404325485,0.937154471874237,-0.0475939512252808 ,0.345653474330902,0.92565244436264,-0.184836938977242,0.330155730247498,0.980852127075195,0.00218713283538818 ,0.194741636514664,0.938709080219269,-0.156169772148132,0.307304710149765,0.890117168426514,-0.206235691905022 ,0.40639665722847,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242 ,0.330155730247498,0.890117168426514,-0.206235691905022,0.40639665722847,0.92565244436264,-0.184836938977242 ,0.330155730247498,0.938709080219269,-0.156169772148132,0.307304710149765,0.189460039138794,-0.647004544734955 ,0.738572955131531,0.659502923488617,-0.421348959207535,0.622511804103851,0.535029828548431,-0.536747872829437 ,0.652414619922638,0.731125593185425,-0.405815303325653,0.548424422740936,0.535029828548431,-0.536747872829437 ,0.652414619922638,0.659502923488617,-0.421348959207535,0.622511804103851,0.71972918510437,-0.325454443693161 ,0.613244891166687,0.71972918510437,-0.325454443693161,0.613244891166687,0.754335284233093,-0.305042564868927 ,0.581315159797668,0.73811411857605,-0.426667273044586,0.522630453109741,0.731125593185425,-0.405815303325653 ,0.548424422740936,0.245724827051163,0.276487857103348,0.929071426391602,0.16256257891655,0.269552499055862,0.949165344238281 ,0.221095889806747,0.32488140463829,0.919548094272614,0.278009802103043,0.308251172304153,0.909775674343109,0.0426242314279079 ,0.260108649730682,0.964638113975525,0.0272070206701756,0.178279355168343,0.983603715896606,0.0412900410592556 ,0.144470527768135,0.988647282123566,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299 ,0.348074615001678,0.937464237213135,-0.0196372587233782,0.188453316688538,0.98188579082489,0.0412900410592556 ,0.144470527768135,0.988647282123566,0.17553049325943,0.198497295379639,0.964255094528198,0.278009802103043,0.308251172304153 ,0.909775674343109,0.428730636835098,0.26745393872261,0.862935900688171,0.594232082366943,0.290724605321884,0.749911665916443 ,0.370492875576019,0.369821041822433,0.852037250995636,0.937608182430267,0.0460146591067314,0.344635367393494 ,0.956782042980194,0.0500060208141804,0.286474347114563,0.938729107379913,0.213661849498749,0.270437210798264 ,0.950939536094666,0.19349630177021,0.241398423910141,0.955479383468628,-0.0429471768438816,0.291915565729141 ,0.968910753726959,0.00811574142426252,0.247277289628983,0.949283540248871,0.162967398762703,0.2688909471035 ,0.941746175289154,0.170597404241562,0.289845913648605,0.969503223896027,0.0232477653771639,0.243973404169083 ,0.960846960544586,0.123489730060101,0.248039066791534,0.949283540248871,0.162967398762703,0.2688909471035,0.968910753726959 ,0.00811574142426252,0.247277289628983,0.938729107379913,0.213661849498749,0.270437210798264,0.935715436935425 ,0.19026754796505,0.297043561935425,0.949283540248871,0.162967398762703,0.2688909471035,0.960846960544586,0.123489730060101 ,0.248039066791534,0.941311419010162,0.140633046627045,0.30684706568718,0.941746175289154,0.170597404241562,0.289845913648605 ,0.949283540248871,0.162967398762703,0.2688909471035,0.935715436935425,0.19026754796505,0.297043561935425,0.950939536094666 ,0.19349630177021,0.241398423910141,0.938729107379913,0.213661849498749,0.270437210798264,0.960846960544586,0.123489730060101 ,0.248039066791534,0.973029315471649,0.0977980643510818,0.208924487233162,0.969503223896027,0.0232477653771639 ,0.243973404169083,0.973029315471649,0.0977980643510818,0.208924487233162,0.960846960544586,0.123489730060101 ,0.248039066791534,0.900685906410217,0.180543556809425,0.395182073116302,0.950939536094666,0.19349630177021,0.241398423910141 ,0.985209882259369,0.0516813509166241,0.163372397422791,0.962778627872467,0.0666173547506332,0.261953175067902 ,0.920523226261139,0.14191623032093,0.36400106549263,0.900685906410217,0.180543556809425,0.395182073116302,0.962778627872467 ,0.0666173547506332,0.261953175067902,0.900685906410217,0.180543556809425,0.395182073116302,0.920523226261139 ,0.14191623032093,0.36400106549263,0.928288996219635,-0.0903030559420586,0.360728323459625,0.905692398548126 ,-0.0579960867762566,0.419949680566788,0.94987964630127,-0.0038351418916136,0.312592297792435,0.937608182430267 ,0.0460146591067314,0.344635367393494,0.905692398548126,-0.0579960867762566,0.419949680566788,0.910945057868958 ,-0.218233183026314,0.35007631778717,0.928288996219635,-0.0903030559420586,0.360728323459625,0.910945057868958 ,-0.218233183026314,0.35007631778717,0.905692398548126,-0.0579960867762566,0.419949680566788,0.969503223896027 ,0.0232477653771639,0.243973404169083,0.966420710086823,0.0570991300046444,0.250540882349014,0.985529184341431 ,0.0794467255473137,0.149734541773796,0.973029315471649,0.0977980643510818,0.208924487233162,0.973029315471649 ,0.0977980643510818,0.208924487233162,0.985529184341431,0.0794467255473137,0.149734541773796,0.985209882259369 ,0.0516813509166241,0.163372397422791,0.950939536094666,0.19349630177021,0.241398423910141,0.431708127260208 ,0.0743667632341385,0.898942530155182,-0.0552638620138168,0.347488284111023,0.936054348945618,0.100095093250275 ,0.182193845510483,0.978154599666595,0.493298023939133,0.0378949381411076,0.8690345287323,0.0312842912971973 ,-0.474717557430267,0.879582047462463,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0666661337018013 ,-0.827535629272461,0.557440996170044,0.289565563201904,-0.362892955541611,0.885697722434998,-0.021647073328495 ,-0.960853159427643,0.276211261749268,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.00421709613874555 ,-0.829368829727173,0.558685541152954,0.100095093250275,0.182193845510483,0.978154599666595,0.106603257358074 ,0.0133492052555084,0.994212031364441,0.493298023939133,0.0378949381411076,0.8690345287323,0.974559843540192 ,0.0402764715254307,0.220478907227516,0.928288996219635,-0.0903030559420586,0.360728323459625,0.920523226261139 ,0.14191623032093,0.36400106549263,0.966257035732269,0.139943510293961,0.216247826814651,0.975037813186646,0.14565335214138 ,0.167589843273163,0.974559843540192,0.0402764715254307,0.220478907227516,0.966257035732269,0.139943510293961 ,0.216247826814651,0.204357400536537,-0.124537408351898,0.97094202041626,0.032781969755888,-0.0827890038490295 ,0.996027767658234,0.161047965288162,-0.353496670722961,0.921468198299408,0.359977900981903,-0.319483041763306 ,0.876553773880005,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.0293192863464355,-0.389476090669632 ,0.920569777488709,0.161047965288162,-0.353496670722961,0.921468198299408,0.032781969755888,-0.0827890038490295 ,0.996027767658234,0.386847853660584,-0.767014622688293,0.511895835399628,0.358242690563202,-0.369526594877243 ,0.857386887073517,0.196283534169197,-0.554668664932251,0.808588564395905,0.191021859645844,-0.901510059833527 ,0.388317227363586,0.0821766927838326,-0.66467010974884,0.742603957653046,0.0454688854515553,-0.765503704547882 ,0.641822934150696,0.171536713838577,-0.946371257305145,0.273782074451447,0.508330583572388,0.166116118431091 ,0.844988405704498,0.322372585535049,-0.0660212859511375,0.944307744503021,0.477409869432449,-0.0182194709777832 ,0.878491818904877,0.668687582015991,0.158593982458115,0.726432919502258,0.508330583572388,0.166116118431091 ,0.844988405704498,0.668687582015991,0.158593982458115,0.726432919502258,0.495325356721878,-0.15430523455143 ,0.854893386363983,0.499466627836227,0.169172704219818,0.849655032157898,0.469725012779236,0.301579147577286 ,0.829703807830811,0.536631107330322,0.258791983127594,0.803152441978455,0.499466627836227,0.169172704219818 ,0.849655032157898,0.328607112169266,0.0718188062310219,0.941732108592987,0.401639640331268,-0.00309631112031639 ,0.915792524814606,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219 ,0.941732108592987,0.32480525970459,-0.177078545093536,0.929055869579315,0.130675092339516,-0.201507270336151 ,0.9707310795784,0.209787964820862,-0.0149007942527533,0.977633357048035,0.401639640331268,-0.00309631112031639 ,0.915792524814606,0.405026167631149,-0.171226277947426,0.898128807544708,0.0695574581623077,-0.316367268562317 ,0.946083247661591,0.130675092339516,-0.201507270336151,0.9707310795784,0.405026167631149,-0.171226277947426 ,0.898128807544708,0.388869285583496,-0.304632723331451,0.869470834732056,0.119953289628029,0.283690631389618 ,0.951383650302887,0.0695574581623077,-0.316367268562317,0.946083247661591,0.388869285583496,-0.304632723331451 ,0.869470834732056,0.357361167669296,0.242811009287834,0.901851356029511,0.134373739361763,0.867044448852539 ,0.479768335819244,0.119953289628029,0.283690631389618,0.951383650302887,0.357361167669296,0.242811009287834 ,0.901851356029511,0.149628981947899,0.846252083778381,0.511339902877808,0.134373739361763,0.867044448852539 ,0.479768335819244,0.149628981947899,0.846252083778381,0.511339902877808,-0.0952406078577042,0.956162750720978 ,-0.276915192604065,0.138274729251862,0.981688380241394,-0.131026938557625,0.495325356721878,-0.15430523455143 ,0.854893386363983,0.385615348815918,-0.420324206352234,0.821357607841492,0.32480525970459,-0.177078545093536 ,0.929055869579315,0.743626773357391,-0.236951321363449,0.625198543071747,0.572291314601898,-0.52212518453598 ,0.632351100444794,0.504154682159424,-0.548682808876038,0.666914701461792,0.527478218078613,-0.385366201400757 ,0.757139086723328,0.504154682159424,-0.548682808876038,0.666914701461792,0.510522961616516,-0.392942905426025 ,0.764828205108643,0.385615348815918,-0.420324206352234,0.821357607841492,0.527478218078613,-0.385366201400757 ,0.757139086723328,0.967272758483887,0.0499838180840015,0.248767033219337,0.926979184150696,-0.0986248403787613 ,0.36191537976265,0.875677406787872,-0.203340858221054,0.437997281551361,0.938709080219269,-0.156169772148132 ,0.307304710149765,0.980852127075195,0.00218713283538818,0.194741636514664,0.967272758483887,0.0499838180840015 ,0.248767033219337,0.938709080219269,-0.156169772148132,0.307304710149765,0.861247181892395,-0.192313641309738 ,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.875677406787872,-0.203340858221054 ,0.437997281551361,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054 ,0.437997281551361,0.890117168426514,-0.206235691905022,0.40639665722847,0.938709080219269,-0.156169772148132 ,0.307304710149765,0.707773089408875,-0.177667543292046,0.683733463287354,0.840808868408203,-0.369773417711258 ,0.395358175039291,0.755779623985291,-0.654822111129761,0.00226114504039288,0.630890548229218,-0.774750173091888 ,0.0417049825191498,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.993277549743652,-0.10496261715889 ,0.0488112159073353,0.982620000839233,-0.16903156042099,0.076722227036953,0.995871722698212,-0.0808055028319359 ,0.041352104395628,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484 ,0.491001784801483,0.886324822902679,0.0356802977621555,0.461687415838242,0.692221164703369,0.374112457036972 ,0.61714643239975,0.854045331478119,0.171825125813484,0.491001784801483,0.944392323493958,0.0710759162902832 ,0.321047365665436,0.954735457897186,-0.0869630351662636,0.284460365772247,0.886324822902679,0.0356802977621555 ,0.461687415838242,0.886324822902679,0.0356802977621555,0.461687415838242,0.954735457897186,-0.0869630351662636 ,0.284460365772247,0.797767400741577,-0.104994267225266,0.593753576278687,0.736574053764343,-0.0243753399699926 ,0.675917506217957,0.03270548209548,0.73682564496994,0.675291240215302,0.134861305356026,0.567138254642487,0.812506437301636 ,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0662719309329987,0.700039923191071,0.711021840572357 ,0.03270548209548,0.73682564496994,0.675291240215302,-0.0116734821349382,0.488428175449371,0.872525990009308 ,0.0294170621782541,0.161411821842194,0.986448585987091,0.823107242584229,0.306770831346512,0.477897584438324 ,0.838887810707092,0.294615089893341,0.457677990198135,0.854045331478119,0.171825125813484,0.491001784801483 ,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483 ,0.838887810707092,0.294615089893341,0.457677990198135,0.903585314750671,0.234351992607117,0.35862609744072,0.944392323493958 ,0.0710759162902832,0.321047365665436,0.03270548209548,0.73682564496994,0.675291240215302,0.136332333087921,0.628257870674133 ,0.765967071056366,0.245428472757339,0.709896266460419,0.660160720348358,0.590013384819031,0.564291477203369 ,0.577459335327148,0.34969162940979,0.814756572246552,0.462479740381241,0.305379688739777,0.8488889336586,0.431428849697113 ,0.562591254711151,0.530478656291962,0.634100556373596,0.590013384819031,0.564291477203369,0.577459335327148 ,0.692221164703369,0.374112457036972,0.61714643239975,0.358841747045517,0.757651388645172,0.545157730579376,0.34969162940979 ,0.814756572246552,0.462479740381241,0.65490597486496,0.140991285443306,0.742441654205322,0.431429743766785,0.571957051753998 ,0.697662889957428,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428 ,0.245428472757339,0.709896266460419,0.660160720348358,0.283866882324219,0.767588019371033,0.574654817581177 ,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177 ,0.245428472757339,0.709896266460419,0.660160720348358,0.136332333087921,0.628257870674133,0.765967071056366 ,0.280443012714386,0.696482062339783,0.660503208637238,0.34969162940979,0.814756572246552,0.462479740381241,0.358841747045517 ,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.259025126695633 ,0.847382187843323,0.463518500328064,0.180923089385033,0.918246328830719,0.352264821529388,0.305379688739777 ,0.8488889336586,0.431428849697113,0.34969162940979,0.814756572246552,0.462479740381241,0.259025126695633,0.847382187843323 ,0.463518500328064,-0.0116734821349382,0.488428175449371,0.872525990009308,0.134861305356026,0.567138254642487 ,0.812506437301636,0.313594281673431,0.139182701706886,0.939301192760468,0.194007128477097,-0.0432056449353695 ,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.134861305356026,0.567138254642487,0.812506437301636 ,0.431429743766785,0.571957051753998,0.697662889957428,0.65490597486496,0.140991285443306,0.742441654205322,0.65490597486496 ,0.140991285443306,0.742441654205322,0.692221164703369,0.374112457036972,0.61714643239975,0.886324822902679,0.0356802977621555 ,0.461687415838242,0.736574053764343,-0.0243753399699926,0.675917506217957,0.136332333087921,0.628257870674133 ,0.765967071056366,0.03270548209548,0.73682564496994,0.675291240215302,0.0662719309329987,0.700039923191071,0.711021840572357 ,0.0579896494746208,0.56835275888443,0.820738911628723,0.245428472757339,0.709896266460419,0.660160720348358 ,0.431429743766785,0.571957051753998,0.697662889957428,0.134861305356026,0.567138254642487,0.812506437301636 ,0.03270548209548,0.73682564496994,0.675291240215302,0.358841747045517,0.757651388645172,0.545157730579376,0.692221164703369 ,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.766651809215546,0.277672499418259 ,0.578915357589722,0.692221164703369,0.374112457036972,0.61714643239975,0.590013384819031,0.564291477203369,0.577459335327148 ,0.671461880207062,0.368781983852386,0.642758727073669,0.671461880207062,0.368781983852386,0.642758727073669 ,0.590013384819031,0.564291477203369,0.577459335327148,0.562591254711151,0.530478656291962,0.634100556373596 ,0.714458644390106,0.458717465400696,0.528324842453003,0.823107242584229,0.306770831346512,0.477897584438324 ,0.766651809215546,0.277672499418259,0.578915357589722,0.671461880207062,0.368781983852386,0.642758727073669 ,0.714458644390106,0.458717465400696,0.528324842453003,0.671461880207062,0.368781983852386,0.642758727073669 ,0.562591254711151,0.530478656291962,0.634100556373596,0.565896391868591,0.594577431678772,0.571173310279846 ,0.0294170621782541,0.161411821842194,0.986448585987091,-0.0116734821349382,0.488428175449371,0.872525990009308 ,0.194007128477097,-0.0432056449353695,0.98004823923111,0.253216534852982,-0.212744683027267,0.943727254867554 ,0.0294170621782541,0.161411821842194,0.986448585987091,0.253216534852982,-0.212744683027267,0.943727254867554 ,-0.000449120096163824,-0.222807794809341,0.974862277507782,0.857822477817535,0.172914609313011,-0.483984649181366 ,0.93999981880188,0.000262991350609809,-0.341174811124802,0.755998075008392,0.118834607303143,-0.643696546554565 ,0.61924135684967,0.312463909387589,-0.72035163640976,0.980402529239655,0.0757675468921661,-0.181852087378502 ,0.8230060338974,0.186259508132935,-0.536626935005188,0.755998075008392,0.118834607303143,-0.643696546554565 ,0.93999981880188,0.000262991350609809,-0.341174811124802,0.509885489940643,0.234869077801704,-0.827558636665344 ,0.461275607347488,0.184249937534332,-0.867915213108063,0.755998075008392,0.118834607303143,-0.643696546554565 ,0.8230060338974,0.186259508132935,-0.536626935005188,0.417167514562607,0.344521790742874,-0.840997040271759 ,0.61924135684967,0.312463909387589,-0.72035163640976,0.755998075008392,0.118834607303143,-0.643696546554565 ,0.461275607347488,0.184249937534332,-0.867915213108063,0.417167514562607,0.344521790742874,-0.840997040271759 ,0.461275607347488,0.184249937534332,-0.867915213108063,0.300174236297607,0.20870378613472,-0.93077290058136 ,0.282642304897308,0.340673059225082,-0.896691262722015,0.509885489940643,0.234869077801704,-0.827558636665344 ,0.299484491348267,0.221028134226799,-0.928146302700043,0.300174236297607,0.20870378613472,-0.93077290058136 ,0.461275607347488,0.184249937534332,-0.867915213108063,0.158535957336426,0.208172604441643,-0.96515828371048 ,0.171811878681183,0.197920143604279,-0.965043187141418,0.300174236297607,0.20870378613472,-0.93077290058136 ,0.299484491348267,0.221028134226799,-0.928146302700043,0.154383972287178,0.366727441549301,-0.917429327964783 ,0.282642304897308,0.340673059225082,-0.896691262722015,0.300174236297607,0.20870378613472,-0.93077290058136 ,0.171811878681183,0.197920143604279,-0.965043187141418,0.0148119395598769,0.396181702613831,-0.918052673339844 ,0.012098491191864,0.36400181055069,-0.931319653987885,0.0980598703026772,0.422548413276672,-0.901020050048828 ,0.154383972287178,0.366727441549301,-0.917429327964783,0.000681107048876584,0.225692093372345,-0.974198460578918 ,0.0980598703026772,0.422548413276672,-0.901020050048828,0.012098491191864,0.36400181055069,-0.931319653987885 ,0.993362247943878,-0.0349664911627769,0.109584823250771,0.98517507314682,-0.0804919600486755,0.151496455073357 ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.99024760723114,0.0581013411283493,-0.126625210046768 ,0.98186069726944,-0.153709232807159,0.111008986830711,0.995911478996277,-0.0872819051146507,0.0232853442430496 ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.98517507314682,-0.0804919600486755,0.151496455073357 ,0.980402529239655,0.0757675468921661,-0.181852087378502,0.93999981880188,0.000262991350609809,-0.341174811124802 ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.995911478996277,-0.0872819051146507,0.0232853442430496 ,0.857822477817535,0.172914609313011,-0.483984649181366,0.99024760723114,0.0581013411283493,-0.126625210046768 ,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.93999981880188,0.000262991350609809,-0.341174811124802 ,0.158535957336426,0.208172604441643,-0.96515828371048,0.00121181993745267,0.232196122407913,-0.9726682305336 ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.171811878681183,0.197920143604279,-0.965043187141418 ,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.0148119395598769,0.396181702613831,-0.918052673339844 ,0.154383972287178,0.366727441549301,-0.917429327964783,0.171811878681183,0.197920143604279,-0.965043187141418 ,0.980402529239655,0.0757675468921661,-0.181852087378502,0.981077253818512,0.19092746078968,-0.0321571119129658 ,0.849523603916168,0.293443530797958,-0.438406825065613,0.8230060338974,0.186259508132935,-0.536626935005188 ,0.97625857591629,0.21655336022377,-0.00488529354333878,0.889407336711884,0.240895375609398,-0.388489335775375 ,0.849523603916168,0.293443530797958,-0.438406825065613,0.981077253818512,0.19092746078968,-0.0321571119129658 ,0.594776809215546,0.323577910661697,-0.735892593860626,0.538163602352142,0.395974457263947,-0.744032382965088 ,0.849523603916168,0.293443530797958,-0.438406825065613,0.889407336711884,0.240895375609398,-0.388489335775375 ,0.509885489940643,0.234869077801704,-0.827558636665344,0.8230060338974,0.186259508132935,-0.536626935005188 ,0.849523603916168,0.293443530797958,-0.438406825065613,0.538163602352142,0.395974457263947,-0.744032382965088 ,0.509885489940643,0.234869077801704,-0.827558636665344,0.538163602352142,0.395974457263947,-0.744032382965088 ,0.268934428691864,0.356452435255051,-0.894771456718445,0.299484491348267,0.221028134226799,-0.928146302700043 ,0.594776809215546,0.323577910661697,-0.735892593860626,0.256779372692108,0.275679916143417,-0.926317930221558 ,0.268934428691864,0.356452435255051,-0.894771456718445,0.538163602352142,0.395974457263947,-0.744032382965088 ,0.115779966115952,0.184250295162201,-0.976036310195923,0.138864398002625,0.273968666791916,-0.951660573482513 ,0.268934428691864,0.356452435255051,-0.894771456718445,0.256779372692108,0.275679916143417,-0.926317930221558 ,0.158535957336426,0.208172604441643,-0.96515828371048,0.299484491348267,0.221028134226799,-0.928146302700043 ,0.268934428691864,0.356452435255051,-0.894771456718445,0.138864398002625,0.273968666791916,-0.951660573482513 ,0.98186069726944,-0.153709232807159,0.111008986830711,0.98053389787674,0.00911934021860361,0.196137949824333 ,0.973558664321899,0.0965578630566597,0.207026869058609,0.995911478996277,-0.0872819051146507,0.0232853442430496 ,0.903585314750671,0.234351992607117,0.35862609744072,0.919988930225372,0.274642944335938,0.279627621173859,0.973558664321899 ,0.0965578630566597,0.207026869058609,0.98053389787674,0.00911934021860361,0.196137949824333,0.97625857591629 ,0.21655336022377,-0.00488529354333878,0.981077253818512,0.19092746078968,-0.0321571119129658,0.973558664321899 ,0.0965578630566597,0.207026869058609,0.919988930225372,0.274642944335938,0.279627621173859,0.980402529239655 ,0.0757675468921661,-0.181852087378502,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.973558664321899 ,0.0965578630566597,0.207026869058609,0.981077253818512,0.19092746078968,-0.0321571119129658,0.505010664463043 ,0.824910163879395,0.253943711519241,-0.457634329795837,0.886664032936096,0.066315270960331,-0.560799777507782 ,0.808064699172974,-0.180374935269356,0.401338547468185,0.912790596485138,-0.075766921043396,0.505010664463043 ,0.824910163879395,0.253943711519241,0.401338547468185,0.912790596485138,-0.075766921043396,0.976279318332672 ,0.215815082192421,0.0173952374607325,0.956802248954773,0.196078270673752,0.214668840169907,-0.482280492782593 ,0.875927150249481,0.0125399529933929,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.888915956020355 ,0.416312962770462,-0.191081121563911,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782 ,0.808064699172974,-0.180374935269356,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.888915956020355 ,0.416312962770462,-0.191081121563911,-0.560632228851318,0.74455463886261,-0.362394601106644,-0.888915956020355 ,0.416312962770462,-0.191081121563911,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.621643662452698 ,0.524245023727417,-0.582001924514771,-0.560632228851318,0.74455463886261,-0.362394601106644,0.983070194721222 ,-0.155307233333588,-0.0972249284386635,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.934603452682495 ,0.00426531257107854,-0.355665951967239,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.983070194721222 ,-0.155307233333588,-0.0972249284386635,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.97535902261734 ,-0.218811824917793,-0.0282160099595785,0.965442478656769,-0.181367635726929,-0.187153950333595,0.534866094589233 ,0.53300929069519,0.655606091022491,-0.38366886973381,0.80352109670639,0.455139607191086,-0.722711741924286,0.688240706920624 ,0.0633445307612419,-0.14746518433094,0.953655540943146,0.262288182973862,-0.407276064157486,0.876896381378174 ,0.255301624536514,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.722711741924286,0.688240706920624 ,0.0633445307612419,-0.38366886973381,0.80352109670639,0.455139607191086,-0.457634329795837,0.886664032936096 ,0.066315270960331,-0.14746518433094,0.953655540943146,0.262288182973862,-0.722711741924286,0.688240706920624 ,0.0633445307612419,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.76844048500061,0.638914406299591 ,-0.0358826071023941,-0.407276064157486,0.876896381378174,0.255301624536514,-0.482280492782593,0.875927150249481 ,0.0125399529933929,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.76844048500061,0.638914406299591 ,-0.0358826071023941,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974 ,-0.180374935269356,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395 ,0.253943711519241,0.956802248954773,0.196078270673752,0.214668840169907,0.534866094589233,0.53300929069519,0.655606091022491 ,-0.14746518433094,0.953655540943146,0.262288182973862,-0.457634329795837,0.886664032936096,0.066315270960331 ,0.505010664463043,0.824910163879395,0.253943711519241,-0.14746518433094,0.953655540943146,0.262288182973862 ,0.976279318332672,0.215815082192421,0.0173952374607325,0.401338547468185,0.912790596485138,-0.075766921043396 ,0.382399499416351,0.801903128623962,-0.459044635295868,0.961685180664063,0.152435541152954,-0.227870747447014 ,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.560632228851318,0.74455463886261,-0.362394601106644 ,0.382399499416351,0.801903128623962,-0.459044635295868,0.401338547468185,0.912790596485138,-0.075766921043396 ,-0.621643662452698,0.524245023727417,-0.582001924514771,0.301987856626511,0.555173337459564,-0.774974763393402 ,0.382399499416351,0.801903128623962,-0.459044635295868,-0.560632228851318,0.74455463886261,-0.362394601106644 ,0.934603452682495,0.00426531257107854,-0.355665951967239,0.961685180664063,0.152435541152954,-0.227870747447014 ,0.382399499416351,0.801903128623962,-0.459044635295868,0.301987856626511,0.555173337459564,-0.774974763393402 ,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.999161183834076,-0.0292985811829567,0.0286098290234804 ,0.976279318332672,0.215815082192421,0.0173952374607325,0.961685180664063,0.152435541152954,-0.227870747447014 ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.974573373794556,-0.220145642757416,-0.0417446494102478 ,0.817201495170593,0.0648972690105438,-0.572686731815338,0.805123388767242,-0.0231669675558805,-0.592654705047607 ,0.934603452682495,0.00426531257107854,-0.355665951967239,0.817201495170593,0.0648972690105438,-0.572686731815338 ,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.858178198337555,-0.416941344738007,-0.299483120441437 ,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.817870736122131,-0.315850645303726,-0.480963379144669 ,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.972712695598602,-0.223196312785149,-0.0633513405919075 ,0.903657674789429,-0.181017354130745,-0.38811793923378,0.935528516769409,-0.219087332487106,-0.277104824781418 ,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.965442478656769,-0.181367635726929,-0.187153950333595 ,0.935528516769409,-0.219087332487106,-0.277104824781418,0.838157534599304,-0.159007966518402,-0.521735966205597 ,0.903657674789429,-0.181017354130745,-0.38811793923378,0.838157534599304,-0.159007966518402,-0.521735966205597 ,0.935528516769409,-0.219087332487106,-0.277104824781418,0.934603452682495,0.00426531257107854,-0.355665951967239 ,0.301987856626511,0.555173337459564,-0.774974763393402,0.240385457873344,0.328945428133011,-0.913241326808929 ,0.817201495170593,0.0648972690105438,-0.572686731815338,-0.621643662452698,0.524245023727417,-0.582001924514771 ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.240385457873344,0.328945428133011,-0.913241326808929 ,0.301987856626511,0.555173337459564,-0.774974763393402,-0.421522259712219,0.257120847702026,-0.869602143764496 ,0.246327593922615,0.163114905357361,-0.955361843109131,0.240385457873344,0.328945428133011,-0.913241326808929 ,-0.462323904037476,0.371266037225723,-0.805244147777557,0.805123388767242,-0.0231669675558805,-0.592654705047607 ,0.817201495170593,0.0648972690105438,-0.572686731815338,0.240385457873344,0.328945428133011,-0.913241326808929 ,0.246327593922615,0.163114905357361,-0.955361843109131,0.805123388767242,-0.0231669675558805,-0.592654705047607 ,0.246327593922615,0.163114905357361,-0.955361843109131,0.256132781505585,-0.0418680384755135,-0.965734481811523 ,0.811204135417938,-0.168334782123566,-0.560010075569153,-0.421522259712219,0.257120847702026,-0.869602143764496 ,-0.426414966583252,0.120833218097687,-0.896420419216156,0.256132781505585,-0.0418680384755135,-0.965734481811523 ,0.246327593922615,0.163114905357361,-0.955361843109131,-0.529633462429047,-0.0744152963161469,-0.844956040382385 ,0.193057999014854,-0.308601260185242,-0.931393504142761,0.256132781505585,-0.0418680384755135,-0.965734481811523 ,-0.426414966583252,0.120833218097687,-0.896420419216156,0.817870736122131,-0.315850645303726,-0.480963379144669 ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.256132781505585,-0.0418680384755135,-0.965734481811523 ,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.690630912780762,-0.290166169404984,-0.662444412708282 ,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.621009290218353,-0.361309498548508,-0.695559442043304 ,-0.77015894651413,-0.0879611894488335,-0.631757915019989,0.969782054424286,-0.238185256719589,-0.0528260990977287 ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.805123388767242,-0.0231669675558805,-0.592654705047607 ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.969782054424286,-0.238185256719589,-0.0528260990977287 ,0.811204135417938,-0.168334782123566,-0.560010075569153,0.817870736122131,-0.315850645303726,-0.480963379144669 ,0.972712695598602,-0.223196312785149,-0.0633513405919075,-0.77015894651413,-0.0879611894488335,-0.631757915019989 ,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.158295571804047,-0.666025876998901,-0.72893899679184 ,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.529633462429047,-0.0744152963161469,-0.844956040382385 ,0.158295571804047,-0.666025876998901,-0.72893899679184,0.858178198337555,-0.416941344738007,-0.299483120441437 ,0.817870736122131,-0.315850645303726,-0.480963379144669,0.193057999014854,-0.308601260185242,-0.931393504142761 ,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.858178198337555,-0.416941344738007,-0.299483120441437 ,0.158295571804047,-0.666025876998901,-0.72893899679184,0.0486728809773922,-0.68095201253891,-0.730708718299866 ,0.158295571804047,-0.666025876998901,-0.72893899679184,-0.621009290218353,-0.361309498548508,-0.695559442043304 ,0.945727825164795,-0.098081186413765,0.309804677963257,0.966708958148956,-0.002308584516868,0.255868047475815 ,0.944782853126526,0.0188948940485716,0.327151775360107,0.542791187763214,-0.0487677082419395,0.838450610637665 ,0.507363021373749,-0.115291275084019,0.853985190391541,0.775663673877716,0.0339613817632198,0.630232095718384 ,0.702920734882355,-0.00120963365770876,0.711267173290253,0.800939977169037,-0.0900113806128502,0.59194016456604 ,0.93361908197403,-0.0509388744831085,0.354627430438995,0.922792911529541,0.0174659602344036,0.384900212287903 ,0.85576856136322,-0.00803003925830126,0.517296552658081,0.864675521850586,0.193993464112282,0.46336030960083 ,0.815548717975616,0.273398518562317,0.510032892227173,0.846449613571167,0.310930520296097,0.432256042957306 ,0.908188223838806,0.15894940495491,0.387206882238388,0.989404678344727,-0.134779617190361,-0.0539703145623207 ,0.933521032333374,-0.113554745912552,-0.340064376592636,0.903657674789429,-0.181017354130745,-0.38811793923378 ,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.959026873111725,-0.148191750049591,0.241467580199242 ,0.89356255531311,-0.0812801718711853,0.441519498825073,0.870028138160706,-0.439180076122284,0.223990917205811 ,0.903808772563934,-0.380508303642273,0.19581413269043,0.96756237745285,-0.0955442041158676,0.233868315815926 ,0.959026873111725,-0.148191750049591,0.241467580199242,0.903808772563934,-0.380508303642273,0.19581413269043 ,0.933318138122559,-0.313118785619736,0.175709679722786,0.886316955089569,0.0816843584179878,0.455817818641663 ,0.959026873111725,-0.148191750049591,0.241467580199242,0.96756237745285,-0.0955442041158676,0.233868315815926 ,0.289565563201904,-0.362892955541611,0.885697722434998,0.173318073153496,-0.274096310138702,0.945955634117126 ,0.174916133284569,0.190565213561058,0.965965449810028,0.493298023939133,0.0378949381411076,0.8690345287323,0.179719522595406 ,0.199890360236168,0.963195025920868,0.431708127260208,0.0743667632341385,0.898942530155182,0.280919551849365 ,0.197001457214355,0.939294755458832,0.410660326480865,0.0589907094836235,0.909878134727478,0.471029788255692 ,0.166954964399338,0.86617374420166,0.562969863414764,0.141692653298378,0.81424081325531,0.55342048406601,0.140735372900963 ,0.820925891399384,0.498867928981781,0.236602708697319,0.833756506443024,0.542900562286377,0.367345452308655 ,0.755192875862122,0.314301073551178,0.320888847112656,0.893445670604706,0.351316899061203,-0.0729207322001457 ,0.933412551879883,0.533053755760193,0.0411353260278702,0.845080852508545,0.542900562286377,0.367345452308655 ,0.755192875862122,0.535205781459808,0.472302228212357,0.700346648693085,0.371347606182098,0.418176740407944 ,0.82899284362793,0.314301073551178,0.320888847112656,0.893445670604706,0.267092674970627,-0.484114617109299 ,0.833243370056152,0.329291462898254,-0.460140645503998,0.824522733688354,0.292688071727753,-0.580336809158325 ,0.759962379932404,0.209196627140045,-0.665287017822266,0.716679811477661,0.512064158916473,0.485980182886124 ,0.708246827125549,0.611575484275818,0.314111411571503,0.726160764694214,0.414541780948639,0.400993496179581 ,0.816920638084412,0.397927284240723,0.292557120323181,0.869519531726837,0.371347606182098,0.418176740407944 ,0.82899284362793,0.763672888278961,0.330310761928558,0.554705798625946,0.793774306774139,0.385858178138733,0.470144480466843 ,0.846449613571167,0.310930520296097,0.432256042957306,0.815548717975616,0.273398518562317,0.510032892227173 ,0.793774306774139,0.385858178138733,0.470144480466843,0.763672888278961,0.330310761928558,0.554705798625946 ,0.87058699131012,0.227341398596764,0.436341762542725,0.843018114566803,0.354378879070282,0.404643177986145,0.763672888278961 ,0.330310761928558,0.554705798625946,0.815548717975616,0.273398518562317,0.510032892227173,0.776109874248505 ,0.274881482124329,0.567532956600189,0.728024780750275,0.317726284265518,0.607478320598602,0.817228376865387 ,-0.0154423741623759,0.576107025146484,0.775663673877716,0.0339613817632198,0.630232095718384,0.507363021373749 ,-0.115291275084019,0.853985190391541,0.54023802280426,-0.148879259824753,0.828237771987915,0.839345693588257 ,-0.00945493672043085,0.543515801429749,0.785013139247894,0.0451312512159348,0.617832958698273,0.36207702755928 ,0.0357636697590351,0.931461870670319,0.52197939157486,-0.246480882167816,0.816568851470947,0.480981200933456 ,0.871001183986664,0.100070223212242,0.739092469215393,0.541533410549164,0.400604367256165,0.252335846424103 ,0.330343335866928,0.909505307674408,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399 ,0.912039756774902,0.13062296807766,0.400416731834412,0.906975269317627,0.252335846424103,0.330343335866928,0.909505307674408 ,0.114735066890717,-0.656680226325989,0.745390474796295,0.164827063679695,-0.547387719154358,0.820486903190613 ,0.171075537800789,-0.616661608219147,0.768415033817291,0.208488672971725,-0.647888123989105,0.732648193836212 ,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0233143605291843,-0.495335191488266,0.868389010429382 ,-0.199777901172638,-0.484420716762543,0.851719081401825,0.607095539569855,-0.200262412428856,0.768979847431183 ,0.655191659927368,0.0146637577563524,0.755320370197296,0.596563339233398,-0.0223739240318537,0.8022540807724 ,0.702920734882355,-0.00120963365770876,0.711267173290253,0.495325356721878,-0.15430523455143,0.854893386363983 ,0.668687582015991,0.158593982458115,0.726432919502258,0.936089217662811,-0.214836105704308,0.278536230325699 ,0.92750072479248,-0.198037564754486,0.31705442070961,0.941718637943268,-0.180898189544678,0.283622801303864 ,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0632589310407639,-0.395606756210327,0.916238844394684 ,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0362738110125065,-0.271473735570908,0.961762070655823 ,0.816257119178772,-0.389834344387054,-0.426325589418411,0.933138132095337,-0.0070160455070436,-0.359449595212936 ,0.856223344802856,0.13723511993885,-0.498044282197952,0.93777334690094,-0.280869245529175,-0.204190224409103 ,0.047360323369503,-0.552981853485107,0.831846177577972,0.248945504426956,-0.117258243262768,0.961393058300018 ,0.362627446651459,-0.180693462491035,0.914249002933502,0.11539563536644,-0.528798937797546,0.840865969657898 ,0.370056182146072,0.811048626899719,-0.453054636716843,0.33390274643898,0.823867678642273,-0.457985788583755 ,0.713096976280212,0.68854147195816,-0.131921663880348,0.370056182146072,0.811048626899719,-0.453054636716843 ,-0.299774140119553,0.750125706195831,-0.589446246623993,0.33390274643898,0.823867678642273,-0.457985788583755 ,0.138864398002625,0.273968666791916,-0.951660573482513,0.115779966115952,0.184250295162201,-0.976036310195923 ,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.002942921128124,0.253444164991379,-0.967345535755157 ,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.00773082999512553,0.120841763913631,-0.992641687393188 ,0.139773815870285,0.0987650603055954,-0.985245525836945,0.17595848441124,0.184216767549515,-0.967007160186768 ,-0.147914990782738,0.17213037610054,0.973905682563782,0.026632534340024,0.124120466411114,0.991909682750702 ,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.220686122775078,-0.040834903717041,0.974489688873291 ,0.714891254901886,0.201140508055687,0.669681310653687,0.0118562933057547,0.974313676357269,0.224883005023003 ,-0.258119583129883,0.745032370090485,0.615061819553375,-0.0101526426151395,0.0385068021714687,0.999206781387329 ,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.77015894651413,-0.0879611894488335,-0.631757915019989 ,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.994307160377502,-0.0864710509777069,-0.0622573494911194 ,0.961685180664063,0.152435541152954,-0.227870747447014,0.934603452682495,0.00426531257107854,-0.355665951967239 ,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.965442478656769,-0.181367635726929,-0.187153950333595 ,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.969782054424286,-0.238185256719589,-0.0528260990977287 ,0.935528516769409,-0.219087332487106,-0.277104824781418,-0.888915956020355,0.416312962770462,-0.191081121563911 ,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.534112751483917,0.714107155799866,-0.452520221471787 ,-0.875516295433044,0.353666007518768,-0.329228729009628,0.840574324131012,-0.291103184223175,0.456830143928528 ,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131 ,0.869891345500946,-0.342425405979156,0.355012476444244,-0.773259878158569,-0.498874604701996,-0.39139911532402 ,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.84568065404892,0.227536335587502,-0.482753932476044 ,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.311408758163452,-0.316491156816483,0.896023392677307 ,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.069260835647583,0.0269219465553761,0.997235238552094 ,-0.451660662889481,0.11085283011198,0.88527637720108,0.289565563201904,-0.362892955541611,0.885697722434998 ,0.493298023939133,0.0378949381411076,0.8690345287323,0.106603257358074,0.0133492052555084,0.994212031364441 ,0.0312842912971973,-0.474717557430267,0.879582047462463,0.937608182430267,0.0460146591067314,0.344635367393494 ,0.950939536094666,0.19349630177021,0.241398423910141,0.900685906410217,0.180543556809425,0.395182073116302,0.905692398548126 ,-0.0579960867762566,0.419949680566788,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0475814715027809 ,0.0593862198293209,0.997100412845612,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0073667336255312 ,-0.00580848380923271,0.999956011772156,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0540597923099995 ,-0.0316095426678658,0.998037278652191,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.104829348623753 ,-0.0149719836190343,0.994377493858337,0.958109974861145,-0.0344467237591743,0.284321486949921,0.951365828514099 ,0.00983366928994656,0.30790650844574,0.908929646015167,0.18951641023159,0.371389836072922,0.930171310901642 ,0.112328357994556,0.34951913356781,-0.739963114261627,0.167704880237579,0.651405930519104,-0.628194212913513 ,0.287138849496841,0.723134398460388,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.720110774040222 ,-0.0107529554516077,0.693775773048401,0.36207702755928,0.0357636697590351,0.931461870670319,0.785013139247894 ,0.0451312512159348,0.617832958698273,0.563811004161835,0.228632539510727,0.793627321720123,-0.619005084037781 ,0.113047316670418,0.777208507061005,-0.578717350959778,0.160483196377754,0.799582004547119,-0.603184819221497 ,0.0701910704374313,0.794506967067719,-0.761701762676239,0.421244710683823,0.492304056882858,-0.702385485172272 ,0.688902199268341,0.179076477885246,-0.630214631557465,0.655408442020416,0.416256308555603,0.778178691864014 ,0.616257607936859,0.121097095310688,0.739092469215393,0.541533410549164,0.400604367256165,0.480981200933456 ,0.871001183986664,0.100070223212242,0.746549785137177,0.0205342527478933,0.665012657642365,0.808598875999451 ,0.0304549541324377,0.587571620941162,0.669167935848236,0.129631534218788,0.731717109680176,0.732805073261261 ,0.230000048875809,0.640387892723084,0.991854608058929,0.119089640676975,0.0451894104480743,0.965819001197815 ,-0.0271366275846958,0.257793039083481,0.815926849842072,-0.0521769113838673,0.575795948505402,0.919128894805908 ,0.0630135238170624,0.388884782791138,0.856838226318359,0.0312061347067356,0.514640152454376,0.928679704666138 ,-0.214017242193222,0.30290362238884,0.928761661052704,-0.0844941884279251,0.360918909311295,0.785623669624329 ,-0.0282825529575348,0.61805784702301,0.856838226318359,0.0312061347067356,0.514640152454376,0.785623669624329 ,-0.0282825529575348,0.61805784702301,0.746549785137177,0.0205342527478933,0.665012657642365,0.732805073261261 ,0.230000048875809,0.640387892723084,0.776369571685791,-0.530167698860168,0.340840935707092,0.878716766834259 ,-0.421581953763962,0.223887145519257,0.805564939975739,-0.533806264400482,0.257130265235901,0.67726731300354 ,-0.631388366222382,0.377700597047806,0.975082695484161,0.0550070591270924,-0.214913904666901,0.988399267196655 ,0.136643067002296,-0.0662992894649506,0.805564939975739,-0.533806264400482,0.257130265235901,0.878716766834259 ,-0.421581953763962,0.223887145519257,0.563811004161835,0.228632539510727,0.793627321720123,0.103208005428314 ,-0.00969436671584845,0.994612574577332,0.36207702755928,0.0357636697590351,0.931461870670319,0.546967387199402 ,0.0579036511480808,0.835148990154266,0.295946687459946,-0.143637612462044,0.944343090057373,0.103208005428314 ,-0.00969436671584845,0.994612574577332,0.563811004161835,0.228632539510727,0.793627321720123,0.535101175308228 ,-0.00626787729561329,0.844764709472656,0.285702854394913,-0.151269629597664,0.946304082870483,0.295946687459946 ,-0.143637612462044,0.944343090057373,0.546967387199402,0.0579036511480808,0.835148990154266,0.565106153488159 ,0.017743531614542,0.824827373027802,-0.670063674449921,0.104801684617996,0.734868168830872,-0.611212015151978 ,0.257414042949677,0.74843692779541,-0.483639568090439,-0.0787182152271271,0.871720254421234,0.527478218078613 ,-0.385366201400757,0.757139086723328,0.385615348815918,-0.420324206352234,0.821357607841492,0.495325356721878 ,-0.15430523455143,0.854893386363983,0.702920734882355,-0.00120963365770876,0.711267173290253,0.20434632897377 ,0.515124678611755,0.832399606704712,0.219657093286514,0.398345082998276,0.890545904636383,0.340864300727844 ,0.524212896823883,0.780392467975616,0.171536713838577,-0.946371257305145,0.273782074451447,0.164180904626846 ,-0.958690702915192,0.232285901904106,0.279211044311523,-0.955691933631897,0.093242421746254,0.255019038915634 ,-0.916801631450653,0.307311117649078,0.16572479903698,-0.647090375423431,0.744183719158173,0.0821766927838326 ,-0.66467010974884,0.742603957653046,0.171536713838577,-0.946371257305145,0.273782074451447,0.255019038915634 ,-0.916801631450653,0.307311117649078,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.139739543199539 ,-0.751490116119385,0.644775569438934,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.30062210559845 ,-0.923126101493835,0.239717543125153,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.304556578397751 ,-0.909958362579346,0.281462401151657,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.139739543199539 ,-0.751490116119385,0.644775569438934,0.033345639705658,-0.401991754770279,0.915035903453827,-0.157473087310791 ,-0.645219802856445,0.747591853141785,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.436592847108841 ,-0.8724405169487,0.219622910022736,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.303882002830505 ,-0.951589345932007,0.046188946813345,-0.52777773141861,0.480110883712769,0.700674116611481,-0.346435993909836 ,0.570491790771484,0.744661808013916,-0.428986668586731,0.611180424690247,0.665153324604034,0.245724827051163 ,0.276487857103348,0.929071426391602,0.305438488721848,0.421940237283707,0.853623926639557,0.219657093286514 ,0.398345082998276,0.890545904636383,0.163330301642418,0.241669088602066,0.956514120101929,-0.960206747055054 ,0.212085798382759,0.18172125518322,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072 ,0.224255800247192,0.285233229398727,-0.974589943885803,0.150285556912422,0.166098326444626,-0.346435993909836 ,0.570491790771484,0.744661808013916,-0.273772716522217,0.454653739929199,0.847548484802246,-0.20940063893795 ,0.453145354986191,0.866493284702301,-0.279750615358353,0.610641419887543,0.74084860086441,-0.428986668586731 ,0.611180424690247,0.665153324604034,0.0744598954916,0.293609887361526,0.953020930290222,0.0879488736391068,0.341627478599548 ,0.935711324214935,0.139874473214149,0.332423865795136,0.932700097560883,-0.617874979972839,-0.144242078065872 ,0.772932589054108,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.780423760414124,-0.171599060297012 ,0.601242482662201,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.671271145343781,-0.219168946146965 ,0.708067834377289,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012 ,0.601242482662201,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.938549876213074,0.168846443295479 ,0.301023334264755,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.896919310092926,-0.0747082084417343 ,0.435837626457214,-0.918760776519775,0.045384906232357,0.392197400331497,-0.855047225952148,0.419915407896042 ,0.304245471954346,-0.922844409942627,0.263350307941437,0.281078040599823,-0.897303998470306,0.274592310190201 ,0.345607608556747,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.680772840976715,-0.570546209812164 ,0.459374964237213,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.766225039958954,-0.486649185419083 ,0.419609010219574,0.64728707075119,-0.269912004470825,0.712858319282532,0.804244041442871,-0.107830874621868 ,0.584434807300568,0.941014289855957,-0.231837883591652,0.246461525559425,0.903722703456879,-0.336785912513733 ,0.26431143283844,0.719567954540253,-0.322717130184174,0.614878535270691,0.550090253353119,-0.357467710971832 ,0.754730105400085,0.702580511569977,0.00276018492877483,0.711598932743073,0.792236804962158,-0.0960670188069344 ,0.602604329586029,0.866469502449036,-0.361488610506058,0.344320476055145,0.719567954540253,-0.322717130184174 ,0.614878535270691,0.792236804962158,-0.0960670188069344,0.602604329586029,0.883809387683868,-0.290479838848114 ,0.366745710372925,0.892324268817902,-0.364589005708694,0.266143202781677,0.897057175636292,-0.352101475000381 ,0.267044723033905,0.866469502449036,-0.361488610506058,0.344320476055145,0.883809387683868,-0.290479838848114 ,0.366745710372925,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282 ,0.4394551217556,0.897057175636292,-0.352101475000381,0.267044723033905,0.892324268817902,-0.364589005708694 ,0.266143202781677,-0.82659912109375,0.121020883321762,0.549625158309937,-0.787644863128662,0.107126019895077 ,0.606745064258575,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.895226001739502,0.157463803887367 ,0.416863977909088,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.784394800662994,0.0327747240662575 ,0.61939537525177,-0.82659912109375,0.121020883321762,0.549625158309937,-0.895226001739502,0.157463803887367 ,0.416863977909088,0.680521726608276,-0.105455316603184,0.725099503993988,0.85576856136322,-0.00803003925830126 ,0.517296552658081,0.817228376865387,-0.0154423741623759,0.576107025146484,0.54023802280426,-0.148879259824753 ,0.828237771987915,0.800939977169037,-0.0900113806128502,0.59194016456604,0.85576856136322,-0.00803003925830126 ,0.517296552658081,0.680521726608276,-0.105455316603184,0.725099503993988,0.0623843558132648,-0.406503170728683 ,0.911517083644867,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.00295650074258447,-0.253587752580643 ,0.967307865619659,0.226468428969383,-0.439074218273163,0.869439959526062,0.819252371788025,-0.448852121829987 ,0.356871604919434,0.903722703456879,-0.336785912513733,0.26431143283844,0.925993382930756,0.073547326028347 ,-0.370306611061096,0.819883346557617,-0.543677628040314,0.179460227489471,0.918502330780029,-0.196233198046684 ,0.343287169933319,0.938213586807251,-0.216931000351906,0.269622415304184,0.891989231109619,-0.254739731550217 ,0.373447239398956,-0.596545398235321,0.216776832938194,0.772749245166779,-0.700570464134216,0.212181925773621 ,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.803527772426605,-0.0332267098128796 ,0.59433925151825,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.578490018844604,0.0704870000481606 ,0.812638223171234,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.377908736467361,-0.53636372089386 ,0.754651606082916,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.323468834161758,-0.409916341304779 ,0.85284024477005,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.419774144887924,-0.091299757361412 ,0.903024911880493,-0.35642284154892,0.221263155341148,0.907747387886047,-0.252474844455719,-0.0950261279940605 ,0.962926030158997,-0.204613357782364,0.564212739467621,0.799873352050781,-0.046717431396246,0.464232265949249 ,0.884480595588684,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.218910127878189,-0.0667930841445923 ,0.973456263542175,0.255169302225113,-0.0558453612029552,0.965282320976257,0.133207947015762,0.0763719230890274 ,0.988141179084778,0.187445163726807,0.511297464370728,0.838712811470032,0.330043107271194,0.436470597982407 ,0.83699756860733,-0.692487776279449,0.122583940625191,0.71093875169754,-0.667788088321686,0.180951654911041 ,0.722021877765656,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.933361113071442,-0.067049466073513 ,0.35262069106102,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.95017421245575,-0.209271758794785 ,0.231028690934181,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.933361113071442,-0.067049466073513 ,0.35262069106102,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.961850166320801,-0.179731413722038 ,0.20625451207161,-0.582078754901886,0.152128055691719,0.798774898052216,-0.578490018844604,0.0704870000481606 ,0.812638223171234,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.667788088321686,0.180951654911041 ,0.722021877765656,-0.667788088321686,0.180951654911041,0.722021877765656,-0.692487776279449,0.122583940625191 ,0.71093875169754,-0.518675327301025,0.170822575688362,0.837732374668121,-0.667788088321686,0.180951654911041 ,0.722021877765656,-0.518675327301025,0.170822575688362,0.837732374668121,-0.538357496261597,0.0919485241174698 ,0.837685286998749,-0.582078754901886,0.152128055691719,0.798774898052216,-0.518675327301025,0.170822575688362 ,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.53751266002655,0.1327995210886,0.832733154296875 ,-0.527163207530975,0.108157083392143,0.842852890491486,-0.419887959957123,0.29813814163208,0.857209324836731 ,-0.447176039218903,0.207748264074326,0.869985222816467,-0.518675327301025,0.170822575688362,0.837732374668121 ,0.523068964481354,-0.400331109762192,0.752418637275696,0.630171060562134,-0.220097869634628,0.744608163833618 ,0.511712968349457,-0.26713839173317,0.816570222377777,-0.576066911220551,-0.146876826882362,0.804098308086395 ,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.17153462767601,-0.247131928801537,0.953677952289581 ,-0.505191087722778,-0.124014981091022,0.854050517082214,0.139874473214149,0.332423865795136,0.932700097560883 ,0.0879488736391068,0.341627478599548,0.935711324214935,-0.113911136984825,0.222564980387688,0.968240201473236 ,-0.0552638620138168,0.347488284111023,0.936054348945618,0.431708127260208,0.0743667632341385,0.898942530155182 ,0.179719522595406,0.199890360236168,0.963195025920868,0.670062482357025,-0.367128610610962,0.645161092281342 ,0.666223108768463,-0.303315341472626,0.681283056735992,0.775085091590881,-0.264017641544342,0.574053823947906 ,0.788963615894318,-0.297772616147995,0.537464380264282,-0.912839949131012,0.366738528013229,0.179516360163689 ,-0.930616736412048,0.324010014533997,0.170205876231194,-0.922440767288208,0.315537393093109,0.222573891282082 ,-0.951293051242828,0.220237165689468,0.215724766254425,0.494429767131805,-0.0934201404452324,0.864182770252228 ,0.550924062728882,0.0100475419312716,0.834494948387146,0.577744483947754,0.0458397567272186,0.814929485321045 ,0.401639640331268,-0.00309631112031639,0.915792524814606,-0.863483607769012,-0.064167745411396,0.500278532505035 ,-0.559565424919128,0.213157281279564,0.80090606212616,-0.671594560146332,-0.181319773197174,0.718389809131622 ,0.0272070206701756,0.178279355168343,0.983603715896606,0.0284836571663618,0.148866042494774,0.988447070121765 ,0.0307504720985889,0.178748592734337,0.983414113521576,0.0412900410592556,0.144470527768135,0.988647282123566 ,0.0412900410592556,0.144470527768135,0.988647282123566,0.0307504720985889,0.178748592734337,0.983414113521576 ,0.0381993055343628,0.285694986581802,0.957558989524841,0.17553049325943,0.198497295379639,0.964255094528198 ,0.17553049325943,0.198497295379639,0.964255094528198,0.0381993055343628,0.285694986581802,0.957558989524841 ,0.0348379723727703,0.239972576498985,0.970154345035553,0.00455546798184514,0.298394352197647,0.954431772232056 ,-0.00221070507541299,0.348074615001678,0.937464237213135,0.17553049325943,0.198497295379639,0.964255094528198 ,0.00455546798184514,0.298394352197647,0.954431772232056,0.416927576065063,0.413195610046387,0.809592962265015 ,0.620209395885468,0.316063761711121,0.717944324016571,0.497093498706818,0.456073582172394,0.738169968128204 ,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.203441798686981,-0.920203626155853,-0.334419906139374 ,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.778645157814026,-0.596678197383881,-0.194131031632423 ,0.140199616551399,0.988947510719299,0.0482386760413647,0.0780868381261826,0.989874243736267,-0.118538655340672 ,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.467009961605072,0.872948586940765,-0.140934243798256 ,0.0402784161269665,0.935566067695618,0.350847274065018,0.140199616551399,0.988947510719299,0.0482386760413647 ,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.634040713310242,0.756764888763428,0.159057512879372 ,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.0320936106145382,0.92166805267334,-0.386649638414383 ,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.812742531299591,0.259539633989334,-0.521621286869049 ,-0.623760402202606,0.624061942100525,-0.470605611801147,0.0780868381261826,0.989874243736267,-0.118538655340672 ,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.631305754184723,0.608145177364349,-0.481261342763901 ,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.181932657957077,-0.979667663574219,-0.0845683068037033 ,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.67014467716217,-0.656066417694092,0.347106426954269 ,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.149305984377861,-0.898303508758545,-0.413229376077652 ,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.690762042999268,-0.452603310346603,-0.563913226127625 ,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.169935211539268,-0.892408609390259,-0.418005883693695 ,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.773259878158569,-0.498874604701996,-0.39139911532402 ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.156271457672119,-0.733824193477631,-0.661121249198914 ,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.507226884365082,-0.292785495519638,-0.810553848743439 ,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.139869406819344,-0.803301215171814,-0.578915953636169 ,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.616132795810699,-0.418477803468704,-0.667275547981262 ,0.387454837560654,-0.142215475440025,-0.910853147506714,0.329197883605957,-0.229186490178108,-0.916025280952454 ,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0849056839942932,-0.303190618753433,-0.949139893054962 ,0.323159694671631,-0.226072624325752,-0.918944478034973,-0.392845422029495,-0.17293743789196,-0.903197169303894 ,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.156271457672119,-0.733824193477631,-0.661121249198914 ,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.856640636920929,-0.0924222394824028,0.507567644119263 ,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.188150137662888,-0.861675441265106,0.471290737390518 ,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.876164734363556,0.0590006411075592,0.478387147188187 ,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.243391394615173,0.450631767511368,0.858889758586884 ,-0.83115953207016,0.347447574138641,0.434112966060638,-0.83115953207016,0.347447574138641,0.434112966060638 ,-0.243391394615173,0.450631767511368,0.858889758586884,0.0402784161269665,0.935566067695618,0.350847274065018 ,-0.634040713310242,0.756764888763428,0.159057512879372,-0.856640636920929,-0.0924222394824028,0.507567644119263 ,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.353458434343338,0.0279432106763124,0.935032784938812 ,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.0625194534659386,-0.652953445911407,-0.754813313484192 ,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0190247669816017,-0.745713531970978,-0.665995001792908 ,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411 ,-0.070786252617836,-0.7830451130867,-0.617923676967621,0.0190247669816017,-0.745713531970978,-0.665995001792908 ,-0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0765528976917267,-0.892704427242279,-0.444092899560928 ,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.00492077972739935,-0.813752949237823,-0.58119010925293 ,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.0762164741754532,-0.884903132915497,-0.459497004747391 ,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0045230402611196,-0.909497022628784,-0.415685802698135 ,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0781072080135345,-0.934095561504364,-0.348374396562576 ,-0.0762164741754532,-0.884903132915497,-0.459497004747391,0.016590029001236,-0.906809270381927,-0.421214610338211 ,0.0482706017792225,-0.93963760137558,-0.338749468326569,-0.0777258798480034,-0.995770275592804,-0.0489919558167458 ,-0.0781072080135345,-0.934095561504364,-0.348374396562576,0.0482706017792225,-0.93963760137558,-0.338749468326569 ,0.0264394171535969,-0.995756030082703,-0.0881528109312058,-0.0632308647036552,-0.910096168518066,0.409544676542282 ,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,0.0264394171535969,-0.995756030082703,-0.0881528109312058 ,0.0696752369403839,-0.881582498550415,0.46685928106308,-0.0141258565708995,-0.388077318668365,0.921518564224243 ,-0.0632308647036552,-0.910096168518066,0.409544676542282,0.0696752369403839,-0.881582498550415,0.46685928106308 ,0.26997372508049,-0.290317326784134,0.91805773973465,0.0160026121884584,-0.0152897713705897,0.999755024909973 ,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.26997372508049,-0.290317326784134,0.91805773973465 ,0.385292500257492,-0.029097318649292,0.922335624694824,0.0535399168729782,0.501161873340607,0.863695681095123 ,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.385292500257492,-0.029097318649292,0.922335624694824 ,0.338861733675003,0.40567883849144,0.848880112171173,0.0919129848480225,0.966963589191437,0.237767487764359 ,0.0535399168729782,0.501161873340607,0.863695681095123,0.338861733675003,0.40567883849144,0.848880112171173 ,0.157188326120377,0.944919049739838,0.287088453769684,0.157188326120377,0.944919049739838,0.287088453769684 ,0.098090648651123,0.992740631103516,0.0696010887622833,0.0886319801211357,0.994267225265503,0.0598079860210419 ,0.0919129848480225,0.966963589191437,0.237767487764359,0.098090648651123,0.992740631103516,0.0696010887622833 ,0.125102162361145,0.989620208740234,-0.0707194358110428,0.0366231761872768,0.998422920703888,-0.0425488464534283 ,0.0886319801211357,0.994267225265503,0.0598079860210419,0.00503939157351851,0.912464261054993,-0.409125357866287 ,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.125102162361145,0.989620208740234,-0.0707194358110428 ,0.188163548707962,0.840512216091156,-0.5080686211586,0.017586937174201,0.584774792194366,-0.811005055904388 ,0.00503939157351851,0.912464261054993,-0.409125357866287,0.188163548707962,0.840512216091156,-0.5080686211586 ,0.243700608611107,0.544483065605164,-0.802588403224945,0.163174018263817,0.444838464260101,-0.880620777606964 ,0.189078122377396,0.441867411136627,-0.87692791223526,0.0718594193458557,0.455831170082092,-0.88716071844101 ,0.057487852871418,0.456679046154022,-0.88777220249176,-0.0362379811704159,-0.262005388736725,-0.964385807514191 ,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.16799932718277,-0.600783705711365,-0.781559407711029 ,-0.162789091467857,-0.282180637121201,-0.945448994636536,0.00530779222026467,-0.225043326616287,-0.974334299564362 ,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.046584777534008,-0.616905212402344,-0.785657584667206 ,0.329197883605957,-0.229186490178108,-0.916025280952454,0.364371746778488,-0.284274369478226,-0.886803984642029 ,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293 ,0.0190247669816017,-0.745713531970978,-0.665995001792908,0.364371746778488,-0.284274369478226,-0.886803984642029 ,0.428298622369766,-0.365026712417603,-0.826629161834717,-0.0045230402611196,-0.909497022628784,-0.415685802698135 ,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.428298622369766,-0.365026712417603,-0.826629161834717 ,0.521451473236084,-0.506328523159027,-0.686818599700928,0.016590029001236,-0.906809270381927,-0.421214610338211 ,-0.0045230402611196,-0.909497022628784,-0.415685802698135,0.521451473236084,-0.506328523159027,-0.686818599700928 ,0.593445479869843,-0.55176454782486,-0.585984945297241,0.0482706017792225,-0.93963760137558,-0.338749468326569 ,0.016590029001236,-0.906809270381927,-0.421214610338211,0.593445479869843,-0.55176454782486,-0.585984945297241 ,0.673712253570557,-0.610602140426636,-0.416265428066254,0.0264394171535969,-0.995756030082703,-0.0881528109312058 ,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.673712253570557,-0.610602140426636,-0.416265428066254 ,0.670762062072754,-0.708589673042297,-0.219041094183922,0.0696752369403839,-0.881582498550415,0.46685928106308 ,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.670762062072754,-0.708589673042297,-0.219041094183922 ,0.572986006736755,-0.752050638198853,0.325740456581116,0.26997372508049,-0.290317326784134,0.91805773973465 ,0.0696752369403839,-0.881582498550415,0.46685928106308,0.572986006736755,-0.752050638198853,0.325740456581116 ,0.849142253398895,-0.224129945039749,0.478250175714493,0.385292500257492,-0.029097318649292,0.922335624694824 ,0.26997372508049,-0.290317326784134,0.91805773973465,0.849142253398895,-0.224129945039749,0.478250175714493 ,0.890664577484131,-0.0774205401539803,0.448020815849304,0.338861733675003,0.40567883849144,0.848880112171173 ,0.385292500257492,-0.029097318649292,0.922335624694824,0.890664577484131,-0.0774205401539803,0.448020815849304 ,0.888973355293274,0.214637205004692,0.404545694589615,0.157188326120377,0.944919049739838,0.287088453769684 ,0.338861733675003,0.40567883849144,0.848880112171173,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639 ,0.645680010318756,0.0625654682517052,0.76104062795639,0.645680010318756,0.0625654682517052,0.771759808063507 ,0.606137216091156,-0.19231353700161,0.098090648651123,0.992740631103516,0.0696010887622833,0.157188326120377 ,0.944919049739838,0.287088453769684,0.771759808063507,0.606137216091156,-0.19231353700161,0.769487977027893 ,0.440927565097809,-0.462029308080673,0.125102162361145,0.989620208740234,-0.0707194358110428,0.098090648651123 ,0.992740631103516,0.0696010887622833,0.243700608611107,0.544483065605164,-0.802588403224945,0.188163548707962 ,0.840512216091156,-0.5080686211586,0.778522193431854,0.369191855192184,-0.507543742656708,0.735658526420593 ,0.230637982487679,-0.636877298355103,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.046584777534008 ,-0.616905212402344,-0.785657584667206,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.0362379811704159 ,-0.262005388736725,-0.964385807514191,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.0723719522356987 ,-0.219757899641991,-0.972866296768188,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.0625194534659386 ,-0.652953445911407,-0.754813313484192,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.156271457672119 ,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.156271457672119 ,-0.733824193477631,-0.661121249198914,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041 ,-0.816932082176209,-0.572107493877411,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.139869406819344 ,-0.803301215171814,-0.578915953636169,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.0765528976917267 ,-0.892704427242279,-0.444092899560928,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.149305984377861 ,-0.898303508758545,-0.413229376077652,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0762164741754532 ,-0.884903132915497,-0.459497004747391,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.169935211539268 ,-0.892408609390259,-0.418005883693695,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0781072080135345 ,-0.934095561504364,-0.348374396562576,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.203441798686981 ,-0.920203626155853,-0.334419906139374,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0777258798480034 ,-0.995770275592804,-0.0489919558167458,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.181932657957077 ,-0.979667663574219,-0.0845683068037033,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0632308647036552 ,-0.910096168518066,0.409544676542282,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.188150137662888 ,-0.861675441265106,0.471290737390518,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0141258565708995 ,-0.388077318668365,0.921518564224243,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.279808014631271 ,-0.247867569327354,0.927506923675537,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.0160026121884584 ,-0.0152897713705897,0.999755024909973,-0.243391394615173,0.450631767511368,0.858889758586884,-0.353458434343338 ,0.0279432106763124,0.935032784938812,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.0535399168729782 ,0.501161873340607,0.863695681095123,0.0402784161269665,0.935566067695618,0.350847274065018,-0.243391394615173 ,0.450631767511368,0.858889758586884,0.0535399168729782,0.501161873340607,0.863695681095123,0.0919129848480225 ,0.966963589191437,0.237767487764359,0.0919129848480225,0.966963589191437,0.237767487764359,0.0886319801211357 ,0.994267225265503,0.0598079860210419,0.140199616551399,0.988947510719299,0.0482386760413647,0.0402784161269665 ,0.935566067695618,0.350847274065018,0.0886319801211357,0.994267225265503,0.0598079860210419,0.0366231761872768 ,0.998422920703888,-0.0425488464534283,0.0780868381261826,0.989874243736267,-0.118538655340672,0.140199616551399 ,0.988947510719299,0.0482386760413647,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.0780868381261826 ,0.989874243736267,-0.118538655340672,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.00503939157351851 ,0.912464261054993,-0.409125357866287,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.0320936106145382 ,0.92166805267334,-0.386649638414383,0.00503939157351851,0.912464261054993,-0.409125357866287,0.017586937174201 ,0.584774792194366,-0.811005055904388,-0.0419603176414967,0.516997694969177,-0.854957699775696,-0.0663426592946053 ,0.518996477127075,-0.85219794511795,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.147772952914238 ,0.520121157169342,-0.84121173620224,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.16799932718277 ,-0.600783705711365,-0.781559407711029,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.43607622385025 ,-0.0767353698611259,-0.896632134914398,-0.385834068059921,-0.169429570436478,-0.906876862049103,0.243047595024109 ,-0.82210099697113,0.514857113361359,0.279289931058884,0.161584615707397,0.94651335477829,0.336174368858337,0.935995519161224 ,0.104399025440216,0.759971797466278,-0.612702488899231,0.216883733868599,-0.914143800735474,0.108810022473335 ,-0.390514433383942,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.631305754184723,0.608145177364349 ,-0.481261342763901,-0.812742531299591,0.259539633989334,-0.521621286869049,0.317967116832733,0.377013236284256 ,-0.869918346405029,0.735658526420593,0.230637982487679,-0.636877298355103,0.74884694814682,0.0258232615888119 ,-0.662239730358124,0.769487977027893,0.440927565097809,-0.462029308080673,0.778522193431854,0.369191855192184 ,-0.507543742656708,0.188163548707962,0.840512216091156,-0.5080686211586,0.125102162361145,0.989620208740234 ,-0.0707194358110428,0.120905123651028,0.330013185739517,-0.936201512813568,0.130089670419693,0.341309607028961 ,-0.930905163288116,0.317967116832733,0.377013236284256,-0.869918346405029,0.00479412823915482,0.900386512279511 ,0.435064554214478,0.143662974238396,0.945594608783722,0.29191067814827,0.288045525550842,0.936091125011444,0.201898843050003 ,0.167652994394302,0.863424003124237,0.475806176662445,0.234877377748489,0.967058181762695,0.0981385260820389 ,0.138274729251862,0.981688380241394,-0.131026938557625,0.199432492256165,0.944634437561035,-0.260561794042587 ,0.310655295848846,0.949596464633942,-0.0419514440000057,-0.194994285702705,0.859172344207764,0.473075121641159 ,0.00479412823915482,0.900386512279511,0.435064554214478,0.167652994394302,0.863424003124237,0.475806176662445 ,-0.143396884202957,0.656446933746338,0.74061781167984,-0.0101526426151395,0.0385068021714687,0.999206781387329 ,-0.258119583129883,0.745032370090485,0.615061819553375,-0.143396884202957,0.656446933746338,0.74061781167984 ,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.457484602928162,0.835335671901703,-0.304831385612488 ,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.413909703493118,0.867565214633942,-0.27569791674614 ,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.357527554035187,0.888932764530182,-0.286308616399765 ,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.390900999307632,0.84614360332489,-0.362267166376114 ,-0.298668056726456,0.872490286827087,-0.386727452278137,0.360629975795746,-0.702259659767151,0.613821983337402 ,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.0197913087904453,0.212507590651512,0.976958990097046 ,0.130621984601021,-0.367120236158371,0.920956373214722,0.216771319508553,0.955569624900818,0.199742004275322 ,0.234877377748489,0.967058181762695,0.0981385260820389,0.310655295848846,0.949596464633942,-0.0419514440000057 ,0.314175516366959,0.947196781635284,0.0641251429915428,0.143662974238396,0.945594608783722,0.29191067814827 ,0.216771319508553,0.955569624900818,0.199742004275322,0.314175516366959,0.947196781635284,0.0641251429915428 ,0.288045525550842,0.936091125011444,0.201898843050003,-0.427035480737686,0.790110290050507,-0.439734488725662 ,0.123842000961304,0.97543865442276,-0.182160839438438,0.0281898751854897,0.814052581787109,0.580106735229492 ,-0.413909703493118,0.867565214633942,-0.27569791674614,0.463392287492752,0.731873750686646,0.499628275632858 ,0.247720703482628,0.139039516448975,0.95880264043808,0.503155887126923,-0.0240856502205133,0.863860011100769 ,0.413316607475281,0.417648822069168,0.809159338474274,0.123842000961304,0.97543865442276,-0.182160839438438 ,0.463392287492752,0.731873750686646,0.499628275632858,0.413316607475281,0.417648822069168,0.809159338474274 ,0.0281898751854897,0.814052581787109,0.580106735229492,0.503155887126923,-0.0240856502205133,0.863860011100769 ,0.247720703482628,0.139039516448975,0.95880264043808,0.101962603628635,-0.729668021202087,0.676156997680664 ,0.345502704381943,-0.548628091812134,0.761337697505951,0.220668077468872,-0.699356377124786,0.679857552051544 ,0.154463171958923,-0.632704854011536,0.758831799030304,0.176707834005356,-0.49970081448555,0.847981989383698 ,0.259503424167633,-0.571858525276184,0.778226017951965,0.101962603628635,-0.729668021202087,0.676156997680664 ,0.220668077468872,-0.699356377124786,0.679857552051544,0.259503424167633,-0.571858525276184,0.778226017951965 ,0.345502704381943,-0.548628091812134,0.761337697505951,0.0443188734352589,-0.657264351844788,0.752355933189392 ,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.142644554376602,-0.667072474956512,0.7312091588974 ,0.0566699393093586,-0.541294038295746,0.83892148733139,0.154463171958923,-0.632704854011536,0.758831799030304 ,0.0443188734352589,-0.657264351844788,0.752355933189392,0.0566699393093586,-0.541294038295746,0.83892148733139 ,0.176707834005356,-0.49970081448555,0.847981989383698,-0.15265741944313,-0.753475069999695,0.639508426189423 ,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.303393453359604,-0.824807524681091,0.477121531963348 ,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.261559337377548,-0.96132493019104,0.086262010037899 ,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.137277618050575,-0.987909972667694,0.0720329731702805 ,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.298746109008789,-0.881751596927643,0.365054726600647 ,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.289635807275772,-0.935811340808868,0.200918629765511 ,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.100898645818233,-0.993996679782867,-0.0423085056245327 ,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.10157036036253,-0.993610143661499,0.0492179282009602 ,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.139529138803482,-0.986220002174377,-0.0888914614915848 ,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.318193823099136,-0.936122417449951,0.149758413434029 ,0.10157036036253,-0.993610143661499,0.0492179282009602,0.390757709741592,-0.919032633304596,-0.0518401972949505 ,0.494486898183823,-0.83785080909729,0.231276199221611,0.336078584194183,-0.770137906074524,0.542161226272583 ,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583 ,0.494486898183823,-0.83785080909729,0.231276199221611,0.360629975795746,-0.702259659767151,0.613821983337402 ,0.130621984601021,-0.367120236158371,0.920956373214722,0.138274729251862,0.981688380241394,-0.131026938557625 ,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.0502913668751717,0.914079129695892,-0.402405440807343 ,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343 ,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.357527554035187,0.888932764530182,-0.286308616399765 ,-0.298668056726456,0.872490286827087,-0.386727452278137,0.167652994394302,0.863424003124237,0.475806176662445 ,0.288045525550842,0.936091125011444,0.201898843050003,0.353775978088379,0.927305817604065,0.122255511581898 ,0.256664752960205,0.744389593601227,0.616447329521179,0.310655295848846,0.949596464633942,-0.0419514440000057 ,0.199432492256165,0.944634437561035,-0.260561794042587,0.249470040202141,0.963651180267334,0.0956092849373817 ,0.31928414106369,0.943383932113647,0.0899131372570992,-0.143396884202957,0.656446933746338,0.74061781167984 ,0.167652994394302,0.863424003124237,0.475806176662445,0.256664752960205,0.744389593601227,0.616447329521179 ,0.268563270568848,0.657460391521454,0.704002559185028,-0.0197913087904453,0.212507590651512,0.976958990097046 ,-0.143396884202957,0.656446933746338,0.74061781167984,0.268563270568848,0.657460391521454,0.704002559185028 ,0.17468436062336,0.368205070495605,0.913186967372894,-0.390900999307632,0.84614360332489,-0.362267166376114 ,-0.413909703493118,0.867565214633942,-0.27569791674614,0.225631609559059,0.960186958312988,0.164716094732285 ,0.130621984601021,-0.367120236158371,0.920956373214722,-0.0197913087904453,0.212507590651512,0.976958990097046 ,0.17468436062336,0.368205070495605,0.913186967372894,0.0710558071732521,-0.106974616646767,0.991719484329224 ,0.314175516366959,0.947196781635284,0.0641251429915428,0.310655295848846,0.949596464633942,-0.0419514440000057 ,0.31928414106369,0.943383932113647,0.0899131372570992,0.353775978088379,0.927305817604065,0.122255511581898 ,0.288045525550842,0.936091125011444,0.201898843050003,0.314175516366959,0.947196781635284,0.0641251429915428 ,0.353775978088379,0.927305817604065,0.122255511581898,-0.413909703493118,0.867565214633942,-0.27569791674614 ,0.0281898751854897,0.814052581787109,0.580106735229492,0.218661069869995,0.707967698574066,0.671542286872864 ,0.225631609559059,0.960186958312988,0.164716094732285,0.413316607475281,0.417648822069168,0.809159338474274 ,0.503155887126923,-0.0240856502205133,0.863860011100769,0.0616627000272274,0.104778632521629,0.992582082748413 ,0.0281898751854897,0.814052581787109,0.580106735229492,0.413316607475281,0.417648822069168,0.809159338474274 ,0.0616627000272274,0.104778632521629,0.992582082748413,0.218661069869995,0.707967698574066,0.671542286872864 ,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0616627000272274,0.104778632521629,0.992582082748413 ,0.503155887126923,-0.0240856502205133,0.863860011100769,0.345502704381943,-0.548628091812134,0.761337697505951 ,0.259503424167633,-0.571858525276184,0.778226017951965,0.176707834005356,-0.49970081448555,0.847981989383698 ,-0.284435749053955,-0.519317030906677,0.805857360363007,-0.218292459845543,-0.596042931079865,0.77271032333374 ,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965 ,-0.218292459845543,-0.596042931079865,0.77271032333374,-0.133871212601662,-0.598869144916534,0.789578497409821 ,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.142644554376602,-0.667072474956512,0.7312091588974 ,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.347446411848068,-0.559259712696075,0.75266832113266 ,0.176707834005356,-0.49970081448555,0.847981989383698,0.0566699393093586,-0.541294038295746,0.83892148733139 ,-0.347446411848068,-0.559259712696075,0.75266832113266,-0.284435749053955,-0.519317030906677,0.805857360363007 ,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.303393453359604,-0.824807524681091,0.477121531963348 ,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.389427453279495,-0.677065253257751,0.624442875385284 ,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.137277618050575,-0.987909972667694,0.0720329731702805 ,-0.159446969628334,-0.872670114040375,0.461544692516327,-0.251093715429306,-0.850699782371521,0.461802780628204 ,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.289635807275772,-0.935811340808868,0.200918629765511 ,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.346875548362732,-0.780973374843597,0.519382238388062 ,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.10157036036253,-0.993610143661499,0.0492179282009602 ,-0.0293050315231085,-0.867081463336945,0.497303605079651,-0.159446969628334,-0.872670114040375,0.461544692516327 ,0.10157036036253,-0.993610143661499,0.0492179282009602,0.318193823099136,-0.936122417449951,0.149758413434029 ,0.0979375094175339,-0.812688946723938,0.574408352375031,-0.0293050315231085,-0.867081463336945,0.497303605079651 ,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583 ,0.195375472307205,-0.65039587020874,0.73403924703598,0.0979375094175339,-0.812688946723938,0.574408352375031 ,0.0710558071732521,-0.106974616646767,0.991719484329224,0.195375472307205,-0.65039587020874,0.73403924703598 ,0.336078584194183,-0.770137906074524,0.542161226272583,0.130621984601021,-0.367120236158371,0.920956373214722 ,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343 ,0.141909137368202,0.983762621879578,0.109876543283463,0.249470040202141,0.963651180267334,0.0956092849373817 ,0.127965569496155,0.980436325073242,0.149564117193222,0.141909137368202,0.983762621879578,0.109876543283463 ,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.298668056726456,0.872490286827087,-0.386727452278137 ,0.268563270568848,0.657460391521454,0.704002559185028,0.256664752960205,0.744389593601227,0.616447329521179 ,0.0710558071732521,-0.106974616646767,0.991719484329224,0.17468436062336,0.368205070495605,0.913186967372894 ,0.225631609559059,0.960186958312988,0.164716094732285,0.127965569496155,0.980436325073242,0.149564117193222 ,-0.298668056726456,0.872490286827087,-0.386727452278137,-0.390900999307632,0.84614360332489,-0.362267166376114 ,-0.140541449189186,0.973841786384583,0.178550481796265,0.00727432640269399,0.986923277378082,0.161026418209076 ,-0.106629706919193,0.951739728450775,0.287787467241287,-0.261545598506927,0.922910153865814,0.282543420791626 ,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.131636127829552,0.990942358970642,0.0265548899769783 ,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.096912607550621,0.976125478744507,-0.194388866424561 ,-0.106629706919193,0.951739728450775,0.287787467241287,-0.852710962295532,0.37292954325676,0.365797132253647 ,-0.632225632667542,0.537100076675415,0.558403313159943,-0.261545598506927,0.922910153865814,0.282543420791626 ,0.41320937871933,0.88689249753952,-0.206590741872787,0.438933074474335,0.880430459976196,-0.179387643933296 ,0.225808262825012,0.957561135292053,-0.179129242897034,0.220753118395805,0.94330245256424,-0.247888132929802 ,0.477838784456253,0.792661190032959,-0.378626853227615,0.510045230388641,0.828637421131134,-0.230681270360947 ,0.379621177911758,0.902513563632965,-0.203364074230194,0.377052932977676,0.915556311607361,-0.139956220984459 ,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296 ,0.41320937871933,0.88689249753952,-0.206590741872787,0.379621177911758,0.902513563632965,-0.203364074230194 ,-0.852710962295532,0.37292954325676,0.365797132253647,-0.887657046318054,-0.456045299768448,0.063934437930584 ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.632225632667542,0.537100076675415,0.558403313159943 ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.887657046318054,-0.456045299768448,0.063934437930584 ,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.609397828578949,-0.718622922897339,0.334985673427582 ,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.201113522052765,0.971361815929413,0.126529023051262 ,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.233783647418022,0.9701207280159,-0.0648916512727737 ,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937 ,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.294077008962631,0.955018162727356,0.0381973087787628 ,0.466618627309799,0.783142864704132,-0.41104057431221,0.477838784456253,0.792661190032959,-0.378626853227615 ,0.377052932977676,0.915556311607361,-0.139956220984459,0.536845266819,0.771515130996704,0.341411113739014,0.772461295127869 ,-0.0374295972287655,0.633957862854004,0.727005004882813,0.68491542339325,0.0485247001051903,0.483564585447311 ,0.417995601892471,0.769054591655731,0.456143170595169,-0.412308812141418,0.788628458976746,0.727005004882813 ,0.68491542339325,0.0485247001051903,0.466618627309799,0.783142864704132,-0.41104057431221,0.536845266819,0.771515130996704 ,0.341411113739014,0.483564585447311,0.417995601892471,0.769054591655731,0.520344138145447,-0.759189605712891 ,0.390989869832993,0.493583381175995,-0.804481565952301,0.330431401729584,0.347713977098465,-0.788004815578461 ,0.508078157901764,0.519531428813934,-0.689787209033966,0.504262566566467,0.506179451942444,-0.83683580160141 ,0.208538070321083,0.593186497688293,-0.723713397979736,0.352659493684769,0.59520959854126,-0.673711001873016 ,0.437994301319122,0.501122713088989,-0.80717408657074,0.312003254890442,0.593186497688293,-0.723713397979736 ,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.519531428813934,-0.689787209033966 ,0.504262566566467,0.59520959854126,-0.673711001873016,0.437994301319122,0.331354945898056,-0.940484642982483 ,0.0754489675164223,0.506179451942444,-0.83683580160141,0.208538070321083,0.501122713088989,-0.80717408657074 ,0.312003254890442,0.32907634973526,-0.925415575504303,0.187922358512878,-0.0488644652068615,-0.996573328971863 ,-0.0667372941970825,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.15561980009079,-0.982760071754456 ,0.0998257622122765,0.000309223076328635,-0.998522400856018,0.054340984672308,0.13556943833828,-0.990667700767517 ,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.32907634973526,-0.925415575504303 ,0.187922358512878,0.15561980009079,-0.982760071754456,0.0998257622122765,-0.294042885303497,-0.950065493583679 ,-0.104471661150455,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,0.000309223076328635,-0.998522400856018 ,0.054340984672308,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.558743357658386,-0.822392702102661 ,-0.10712693631649,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.217681989073753,-0.974551320075989 ,0.0535187609493732,-0.443623483181,-0.884970426559448,0.141511723399162,-0.762853384017944,-0.64490020275116 ,-0.0464594550430775,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.443623483181,-0.884970426559448 ,0.141511723399162,-0.609397828578949,-0.718622922897339,0.334985673427582,0.225808262825012,0.957561135292053 ,-0.179129242897034,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.096912607550621,0.976125478744507 ,-0.194388866424561,0.220753118395805,0.94330245256424,-0.247888132929802,-0.21051436662674,0.861303210258484 ,0.462428838014603,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.140541449189186,0.973841786384583 ,0.178550481796265,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.233783647418022,0.9701207280159 ,-0.0648916512727737,-0.199626341462135,0.962749063968658,0.182382985949516,-0.136555016040802,0.971848607063293 ,0.191997408866882,-0.261545598506927,0.922910153865814,0.282543420791626,-0.632225632667542,0.537100076675415 ,0.558403313159943,-0.21051436662674,0.861303210258484,0.462428838014603,0.0513934716582298,0.959308326244354 ,0.277644217014313,0.41320937871933,0.88689249753952,-0.206590741872787,0.220753118395805,0.94330245256424,-0.247888132929802 ,0.0820492878556252,0.971076488494873,0.224228322505951,0.377052932977676,0.915556311607361,-0.139956220984459 ,0.379621177911758,0.902513563632965,-0.203364074230194,-0.207352936267853,0.936322927474976,0.283379822969437 ,-0.321906387805939,0.894509375095367,0.310208320617676,0.379621177911758,0.902513563632965,-0.203364074230194 ,0.41320937871933,0.88689249753952,-0.206590741872787,0.0513934716582298,0.959308326244354,0.277644217014313 ,-0.207352936267853,0.936322927474976,0.283379822969437,-0.632225632667542,0.537100076675415,0.558403313159943 ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.0247958675026894,-0.292493909597397,0.95594584941864 ,-0.21051436662674,0.861303210258484,0.462428838014603,-0.0247958675026894,-0.292493909597397,0.95594584941864 ,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.609397828578949,-0.718622922897339,0.334985673427582 ,-0.0917615294456482,-0.593113124370575,0.799872934818268,-0.294077008962631,0.955018162727356,0.0381973087787628 ,-0.199626341462135,0.962749063968658,0.182382985949516,-0.233783647418022,0.9701207280159,-0.0648916512727737 ,0.536845266819,0.771515130996704,0.341411113739014,0.377052932977676,0.915556311607361,-0.139956220984459,-0.321906387805939 ,0.894509375095367,0.310208320617676,-0.44193634390831,0.542223930358887,0.714622557163239,0.456143170595169 ,-0.412308812141418,0.788628458976746,0.483564585447311,0.417995601892471,0.769054591655731,-0.522650837898254 ,-0.0699307844042778,0.849673926830292,0.483564585447311,0.417995601892471,0.769054591655731,0.536845266819,0.771515130996704 ,0.341411113739014,-0.44193634390831,0.542223930358887,0.714622557163239,-0.522650837898254,-0.0699307844042778 ,0.849673926830292,0.519531428813934,-0.689787209033966,0.504262566566467,0.347713977098465,-0.788004815578461 ,0.508078157901764,-0.209563195705414,-0.620633363723755,0.755577564239502,0.0385516360402107,-0.591684639453888 ,0.805247187614441,-0.209563195705414,-0.620633363723755,0.755577564239502,0.347713977098465,-0.788004815578461 ,0.508078157901764,0.456143170595169,-0.412308812141418,0.788628458976746,-0.522650837898254,-0.0699307844042778 ,0.849673926830292,0.501122713088989,-0.80717408657074,0.312003254890442,0.59520959854126,-0.673711001873016 ,0.437994301319122,0.177197024226189,-0.632450103759766,0.754061043262482,0.239427268505096,-0.754494905471802 ,0.611074507236481,0.59520959854126,-0.673711001873016,0.437994301319122,0.519531428813934,-0.689787209033966 ,0.504262566566467,0.0385516360402107,-0.591684639453888,0.805247187614441,0.177197024226189,-0.632450103759766 ,0.754061043262482,0.32907634973526,-0.925415575504303,0.187922358512878,0.501122713088989,-0.80717408657074 ,0.312003254890442,0.239427268505096,-0.754494905471802,0.611074507236481,0.182993903756142,-0.84755676984787 ,0.498157352209091,0.000309223076328635,-0.998522400856018,0.054340984672308,0.15561980009079,-0.982760071754456 ,0.0998257622122765,0.0988316684961319,-0.885145425796509,0.454697638750076,0.053495068103075,-0.879860281944275 ,0.472212016582489,0.15561980009079,-0.982760071754456,0.0998257622122765,0.32907634973526,-0.925415575504303 ,0.187922358512878,0.182993903756142,-0.84755676984787,0.498157352209091,0.0988316684961319,-0.885145425796509 ,0.454697638750076,-0.217681989073753,-0.974551320075989,0.0535187609493732,0.000309223076328635,-0.998522400856018 ,0.054340984672308,0.053495068103075,-0.879860281944275,0.472212016582489,-0.0185150001198053,-0.84597235918045 ,0.532905161380768,-0.443623483181,-0.884970426559448,0.141511723399162,-0.217681989073753,-0.974551320075989 ,0.0535187609493732,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.0868597701191902,-0.755090534687042 ,0.649841248989105,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.443623483181,-0.884970426559448 ,0.141511723399162,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.0917615294456482,-0.593113124370575 ,0.799872934818268,0.220753118395805,0.94330245256424,-0.247888132929802,-0.096912607550621,0.976125478744507 ,-0.194388866424561,-0.136555016040802,0.971848607063293,0.191997408866882,0.0820492878556252,0.971076488494873 ,0.224228322505951,-0.251987457275391,0.951171100139618,0.178257703781128,-0.199626341462135,0.962749063968658 ,0.182382985949516,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.251987457275391,0.951171100139618 ,0.178257703781128,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.373619109392166,0.927157580852509 ,0.0280638355761766,-0.251987457275391,0.951171100139618,0.178257703781128,-0.373619109392166,0.927157580852509 ,0.0280638355761766,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.21051436662674,0.861303210258484 ,0.462428838014603,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.183847695589066,0.966428518295288 ,0.179488003253937,-0.109012864530087,0.977998495101929,0.177862659096718,-0.266566455364227,0.959463894367218 ,0.0914947912096977,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.109012864530087,0.977998495101929 ,0.177862659096718,0.00727432640269399,0.986923277378082,0.161026418209076,-0.140541449189186,0.973841786384583 ,0.178550481796265,-0.21051436662674,0.861303210258484,0.462428838014603,-0.140541449189186,0.973841786384583 ,0.178550481796265,-0.261545598506927,0.922910153865814,0.282543420791626,-0.258119583129883,0.745032370090485 ,0.615061819553375,-0.194994285702705,0.859172344207764,0.473075121641159,-0.143396884202957,0.656446933746338 ,0.74061781167984,0.690909028053284,-0.334549605846405,0.640875399112701,0.707773089408875,-0.177667543292046 ,0.683733463287354,0.630890548229218,-0.774750173091888,0.0417049825191498,0.563636422157288,-0.823141872882843 ,0.0689310654997826,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.740522086620331,-0.668854534626007 ,0.065273717045784,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362 ,0.424813508987427,0.772461295127869,-0.0374295972287655,0.633957862854004,0.456143170595169,-0.412308812141418 ,0.788628458976746,0.347713977098465,-0.788004815578461,0.508078157901764,0.493583381175995,-0.804481565952301 ,0.330431401729584,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.563221275806427,-0.79902458190918 ,-0.210574418306351,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.432196706533432,-0.877966165542603 ,-0.205867424607277,0.733389377593994,-0.0344664603471756,0.678934574127197,0.746549785137177,0.0205342527478933 ,0.665012657642365,0.718032777309418,-0.160360962152481,0.677283763885498,0.746549785137177,0.0205342527478933 ,0.665012657642365,0.733389377593994,-0.0344664603471756,0.678934574127197,0.837971806526184,-0.0177910327911377 ,0.545423448085785,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.686445116996765,0.270512044429779 ,0.674993574619293,-0.596545398235321,0.216776832938194,0.772749245166779,-0.672767162322998,0.059370718896389 ,0.737468242645264,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.789937257766724,-0.089169554412365 ,0.606669545173645,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.501666784286499,-0.849441289901733 ,-0.163646027445793,0.499172002077103,-0.857490539550781,-0.124648600816727,0.494663387537003,-0.866621494293213 ,-0.0653853639960289,0.465027630329132,-0.875830411911011,-0.129113703966141,0.28289994597435,-0.924392461776733 ,-0.255863577127457,0.297710686922073,-0.932827949523926,-0.202978670597076,0.28289994597435,-0.924392461776733 ,-0.255863577127457,0.304112553596497,-0.921620965003967,-0.241102367639542,0.175545483827591,-0.61814421415329 ,-0.766212463378906,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.752854526042938,-0.165658488869667 ,-0.636998772621155,-0.550425469875336,0.323076784610748,-0.769839704036713,0.371378809213638,-0.592879414558411 ,-0.714543044567108,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.550425469875336,0.323076784610748 ,-0.769839704036713,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.274789333343506,-0.803769111633301 ,-0.527679860591888,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.478178977966309,0.510015189647675 ,-0.715003073215485,-0.847938656806946,-0.0612146966159344,-0.526548087596893,0.810995221138,0.0803924724459648 ,-0.579503059387207,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.803069472312927,-0.0576225444674492 ,-0.593092858791351,0.28655207157135,0.762932240962982,-0.579501807689667,-0.264983803033829,-0.798545002937317 ,-0.540471494197845,0.851555109024048,0.0737949088215828,-0.519045412540436,0.294900387525558,0.804033398628235 ,-0.516298413276672,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.798945486545563,0.0567517168819904 ,-0.598719775676727,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.797584235668182,-0.0538384169340134 ,-0.600800156593323,0.260495960712433,0.757402241230011,-0.598735094070435,0.579808115959167,-0.470308184623718 ,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.0163767393678427,0.894915819168091 ,-0.445934444665909,-0.303038567304611,0.683238506317139,-0.66434383392334,0.934951305389404,-0.173643231391907 ,-0.309376925230026,0.852502286434174,-0.25280287861824,-0.457526594400406,-0.023583659902215,0.889200866222382 ,-0.456908762454987,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.492102652788162,-0.846493780612946 ,-0.203182756900787,-0.355053901672363,-0.683800160884857,-0.637459099292755,0.175545483827591,-0.61814421415329 ,-0.766212463378906,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.131819605827332,-0.987344026565552 ,-0.0881783813238144,0.175545483827591,-0.61814421415329,-0.766212463378906,0.371378809213638,-0.592879414558411 ,-0.714543044567108,0.503014385700226,-0.864195764064789,-0.0119248116388917,-0.294909566640854,-0.954956710338593 ,-0.0329544395208359,0.503014385700226,-0.864195764064789,-0.0119248116388917,0.371378809213638,-0.592879414558411 ,-0.714543044567108,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.081024631857872,-0.948496878147125 ,-0.30624932050705,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.810995221138,0.0803924724459648 ,-0.579503059387207,0.932336986064911,-0.159625917673111,-0.324449211359024,0.9972323179245,0.045465212315321 ,-0.0588272288441658,0.851555109024048,0.0737949088215828,-0.519045412540436,-0.264983803033829,-0.798545002937317 ,-0.540471494197845,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639 ,-0.329601436853409,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.798945486545563,0.0567517168819904 ,-0.598719775676727,0.929458439350128,-0.182677119970322,-0.320524662733078,0.60779196023941,-0.794095873832703 ,-0.000789706071373075,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.867282569408417,-0.217768251895905 ,-0.447658270597458,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.155517369508743,-0.869324624538422 ,-0.469136536121368,-0.081024631857872,-0.948496878147125,-0.30624932050705,0.932336986064911,-0.159625917673111 ,-0.324449211359024,0.874620616436005,-0.089490108191967,-0.476476937532425,0.875138163566589,-0.110415413975716 ,-0.471106797456741,-0.116839110851288,-0.866200923919678,-0.485844105482101,-0.0602938197553158,-0.94219297170639 ,-0.329601436853409,0.929458439350128,-0.182677119970322,-0.320524662733078,-0.607791721820831,0.794096052646637 ,0.000804367766249925,-0.303038567304611,0.683238506317139,-0.66434383392334,0.0163767393678427,0.894915819168091 ,-0.445934444665909,-0.606431722640991,0.795135319232941,0.000614068820141256,0.0626835599541664,0.945166885852814 ,-0.320515751838684,0.260495960712433,0.757402241230011,-0.598735094070435,-0.797584235668182,-0.0538384169340134 ,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.997315406799316,-0.0089312419295311 ,-0.0726793855428696,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.294900387525558,0.804033398628235 ,-0.516298413276672,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896 ,-0.324451416730881,0.28655207157135,0.762932240962982,-0.579501807689667,-0.803069472312927,-0.0576225444674492 ,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.998532772064209,-0.0460729710757732 ,-0.0284526403993368,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.478178977966309,0.510015189647675 ,-0.715003073215485,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.921080887317657,0.378857254981995 ,-0.089873306453228,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.478178977966309,0.510015189647675 ,-0.715003073215485,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.947175621986389,-0.247870579361916 ,-0.203515365719795,-0.921080887317657,0.378857254981995,-0.089873306453228,-0.550425469875336,0.323076784610748 ,-0.769839704036713,-0.752854526042938,-0.165658488869667,-0.636998772621155,0.118536964058876,0.87408572435379 ,-0.471087127923965,0.0626835599541664,0.945166885852814,-0.320515751838684,-0.925963163375854,0.184349000453949 ,-0.329556822776794,-0.867111802101135,0.110181644558907,-0.485774785280228,0.138788193464279,0.868160247802734 ,-0.476482480764389,0.085883192718029,0.94199538230896,-0.324451416730881,-0.939117789268494,0.162155643105507 ,-0.302924692630768,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.947175621986389,-0.247870579361916 ,-0.203515365719795,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.355053901672363,-0.683800160884857 ,-0.637459099292755,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.260734766721725,-0.760901808738709 ,-0.594176650047302,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.847938656806946,-0.0612146966159344 ,-0.526548087596893,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507 ,-0.302924692630768,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.847938656806946,-0.0612146966159344 ,-0.526548087596893,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.081024631857872,-0.948496878147125 ,-0.30624932050705,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.274789333343506,-0.803769111633301 ,-0.527679860591888,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.932336986064911,-0.159625917673111 ,-0.324449211359024,0.810995221138,0.0803924724459648,-0.579503059387207,0.851555109024048,0.0737949088215828 ,-0.519045412540436,0.9972323179245,0.045465212315321,-0.0588272288441658,0.085883192718029,0.94199538230896 ,-0.324451416730881,0.305213630199432,0.950488805770874,-0.0584435798227787,0.294900387525558,0.804033398628235 ,-0.516298413276672,0.28655207157135,0.762932240962982,-0.579501807689667,0.28655207157135,0.762932240962982 ,-0.579501807689667,0.294900387525558,0.804033398628235,-0.516298413276672,0.851555109024048,0.0737949088215828 ,-0.519045412540436,0.810995221138,0.0803924724459648,-0.579503059387207,-0.25739848613739,-0.756804287433624 ,-0.600827217102051,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.838329255580902,-0.0461989641189575 ,-0.543203234672546,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949 ,-0.329556822776794,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.838329255580902,-0.0461989641189575 ,-0.543203234672546,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.0602938197553158,-0.94219297170639 ,-0.329601436853409,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.264983803033829,-0.798545002937317 ,-0.540471494197845,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.929458439350128,-0.182677119970322 ,-0.320524662733078,0.798945486545563,0.0567517168819904,-0.598719775676727,0.867282569408417,-0.217768251895905 ,-0.447658270597458,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.0626835599541664,0.945166885852814 ,-0.320515751838684,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0163767393678427,0.894915819168091 ,-0.445934444665909,0.260495960712433,0.757402241230011,-0.598735094070435,0.260495960712433,0.757402241230011 ,-0.598735094070435,0.0163767393678427,0.894915819168091,-0.445934444665909,0.867282569408417,-0.217768251895905 ,-0.447658270597458,0.798945486545563,0.0567517168819904,-0.598719775676727,0.852502286434174,-0.25280287861824 ,-0.457526594400406,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.303038567304611,0.683238506317139 ,-0.66434383392334,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.023583659902215,0.889200866222382 ,-0.456908762454987,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.607791721820831,0.794096052646637 ,0.000804367766249925,-0.608507454395294,0.793548166751862,0.000247186981141567,0.852502286434174,-0.25280287861824 ,-0.457526594400406,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.60779196023941,-0.794095873832703 ,-0.000789706071373075,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905 ,-0.447658270597458,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.99813711643219,0.0131128579378128 ,-0.0595852471888065,0.852502286434174,-0.25280287861824,-0.457526594400406,0.934951305389404,-0.173643231391907 ,-0.309376925230026,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.0738223046064377,0.948160707950592 ,-0.309097975492477,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.608507454395294,0.793548166751862 ,0.000247186981141567,0.0163767393678427,0.894915819168091,-0.445934444665909,0.271794468164444,0.960521817207336 ,-0.0593764595687389,-0.606431722640991,0.795135319232941,0.000614068820141256,-0.998532772064209,-0.0460729710757732 ,-0.0284526403993368,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.939117789268494,0.162155643105507 ,-0.302924692630768,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.081024631857872,-0.948496878147125 ,-0.30624932050705,-0.155517369508743,-0.869324624538422,-0.469136536121368,0.9972323179245,0.045465212315321 ,-0.0588272288441658,0.874620616436005,-0.089490108191967,-0.476476937532425,0.932336986064911,-0.159625917673111 ,-0.324449211359024,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896 ,-0.324451416730881,0.138788193464279,0.868160247802734,-0.476482480764389,-0.997315406799316,-0.0089312419295311 ,-0.0726793855428696,-0.867111802101135,0.110181644558907,-0.485774785280228,-0.925963163375854,0.184349000453949 ,-0.329556822776794,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639 ,-0.329601436853409,-0.116839110851288,-0.866200923919678,-0.485844105482101,0.99813711643219,0.0131128579378128 ,-0.0595852471888065,0.875138163566589,-0.110415413975716,-0.471106797456741,0.929458439350128,-0.182677119970322 ,-0.320524662733078,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0626835599541664,0.945166885852814 ,-0.320515751838684,0.118536964058876,0.87408572435379,-0.471087127923965,-0.76156884431839,0.476596713066101 ,-0.439167976379395,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.968085289001465,0.249152198433876 ,-0.0270941611379385,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.739788293838501,0.545380115509033 ,-0.394047945737839,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.898221433162689,0.418351918458939 ,0.134833067655563,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.704140067100525,0.675374805927277 ,-0.219215899705887,-0.898221433162689,0.418351918458939,0.134833067655563,-0.654416978359222,0.561667382717133 ,0.506229400634766,-0.521776258945465,0.845166325569153,0.115945540368557,-0.521776258945465,0.845166325569153 ,0.115945540368557,-0.654416978359222,0.561667382717133,0.506229400634766,-0.214515462517738,0.588520050048828 ,0.779504477977753,-0.117615908384323,0.926379323005676,0.357753843069077,-0.952755749225616,-0.0757631734013557 ,0.294136703014374,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.926552474498749,0.207176357507706 ,0.313972115516663,-0.910864353179932,0.099295899271965,0.400582611560822,-0.910864353179932,0.099295899271965 ,0.400582611560822,-0.926552474498749,0.207176357507706,0.313972115516663,-0.666352272033691,0.406804174184799 ,0.624888002872467,-0.658345222473145,0.235575124621391,0.714902698993683,-0.658345222473145,0.235575124621391 ,0.714902698993683,-0.666352272033691,0.406804174184799,0.624888002872467,-0.245068669319153,0.507136404514313 ,0.826289296150208,-0.250782161951065,0.269851088523865,0.929671287536621,-0.98439222574234,0.0485405139625072 ,0.16916187107563,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.958588540554047,0.28219923377037 ,-0.0383618324995041,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.962221920490265,0.251950860023499 ,-0.103197500109673,-0.912259876728058,0.390434086322784,0.123867250978947,-0.926552474498749,0.207176357507706 ,0.313972115516663,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.912259876728058,0.390434086322784 ,0.123867250978947,-0.660027086734772,0.561297416687012,0.499309033155441,-0.666352272033691,0.406804174184799 ,0.624888002872467,-0.926552474498749,0.207176357507706,0.313972115516663,-0.660027086734772,0.561297416687012 ,0.499309033155441,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245068669319153,0.507136404514313 ,0.826289296150208,-0.666352272033691,0.406804174184799,0.624888002872467,-0.980856895446777,0.194233447313309 ,-0.0138956038281322,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.76156884431839,0.476596713066101 ,-0.439167976379395,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.924136519432068,-0.0825221389532089 ,0.373043924570084,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.98439222574234,0.0485405139625072 ,0.16916187107563,-0.952755749225616,-0.0757631734013557,0.294136703014374,0.935190200805664,0.351279437541962 ,-0.044966459274292,0.898469209671021,-0.0272972695529461,0.438187032938004,0.912912726402283,-0.113555498421192 ,0.392040193080902,0.96645724773407,0.233678266406059,-0.106558986008167,0.804791152477264,0.576125502586365 ,0.142795473337173,0.761282086372375,0.311987817287445,0.568430483341217,0.898469209671021,-0.0272972695529461 ,0.438187032938004,0.935190200805664,0.351279437541962,-0.044966459274292,0.804791152477264,0.576125502586365 ,0.142795473337173,0.42239049077034,0.834542334079742,0.353730529546738,0.335851162672043,0.562229573726654,0.755712866783142 ,0.761282086372375,0.311987817287445,0.568430483341217,-0.117615908384323,0.926379323005676,0.357753843069077 ,-0.214515462517738,0.588520050048828,0.779504477977753,0.335851162672043,0.562229573726654,0.755712866783142 ,0.42239049077034,0.834542334079742,0.353730529546738,0.706884205341339,-0.28878253698349,0.645692944526672,0.630046010017395 ,0.0436474196612835,0.775330185890198,0.717575788497925,0.177658915519714,0.673440635204315,0.870358824729919 ,-0.102341800928116,0.481665521860123,0.630046010017395,0.0436474196612835,0.775330185890198,0.228427618741989 ,0.282149314880371,0.931779265403748,0.267084360122681,0.455141335725784,0.849418818950653,0.717575788497925 ,0.177658915519714,0.673440635204315,0.228427618741989,0.282149314880371,0.931779265403748,-0.250782161951065 ,0.269851088523865,0.929671287536621,-0.245068669319153,0.507136404514313,0.826289296150208,0.267084360122681 ,0.455141335725784,0.849418818950653,0.961451351642609,0.0904497504234314,0.259673148393631,0.90546315908432 ,0.186478093266487,0.381264179944992,0.819937825202942,-0.00659102853387594,0.572414636611938,0.845280110836029 ,-0.0974530875682831,0.525361180305481,0.717575788497925,0.177658915519714,0.673440635204315,0.791133522987366 ,0.342469990253448,0.506776094436646,0.962417662143707,0.0915835499763489,0.255665153264999,0.870358824729919 ,-0.102341800928116,0.481665521860123,0.267084360122681,0.455141335725784,0.849418818950653,0.301605939865112 ,0.609322726726532,0.733321011066437,0.791133522987366,0.342469990253448,0.506776094436646,0.717575788497925 ,0.177658915519714,0.673440635204315,-0.245068669319153,0.507136404514313,0.826289296150208,-0.249163046479225 ,0.650838494300842,0.717165946960449,0.301605939865112,0.609322726726532,0.733321011066437,0.267084360122681 ,0.455141335725784,0.849418818950653,0.982547283172607,-0.0194747932255268,0.184990763664246,0.997464418411255 ,-0.00418182462453842,-0.0710434243083,0.942662239074707,-0.0168874561786652,0.333320707082748,0.947061896324158 ,0.0981694161891937,0.305673807859421,0.942662239074707,-0.0168874561786652,0.333320707082748,0.982214033603668 ,0.146134316921234,-0.117899708449841,0.96645724773407,0.233678266406059,-0.106558986008167,0.912912726402283 ,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.706884205341339 ,-0.28878253698349,0.645692944526672,0.870358824729919,-0.102341800928116,0.481665521860123,0.845280110836029 ,-0.0974530875682831,0.525361180305481,0.870358824729919,-0.102341800928116,0.481665521860123,0.962417662143707 ,0.0915835499763489,0.255665153264999,0.961451351642609,0.0904497504234314,0.259673148393631,0.845280110836029 ,-0.0974530875682831,0.525361180305481,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952755749225616 ,-0.0757631734013557,0.294136703014374,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.984016895294189 ,0.178066939115524,-0.00170839997008443,-0.910864353179932,0.099295899271965,0.400582611560822,-0.898221433162689 ,0.418351918458939,0.134833067655563,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.952755749225616 ,-0.0757631734013557,0.294136703014374,-0.658345222473145,0.235575124621391,0.714902698993683,-0.654416978359222 ,0.561667382717133,0.506229400634766,-0.898221433162689,0.418351918458939,0.134833067655563,-0.910864353179932 ,0.099295899271965,0.400582611560822,-0.250782161951065,0.269851088523865,0.929671287536621,-0.214515462517738 ,0.588520050048828,0.779504477977753,-0.654416978359222,0.561667382717133,0.506229400634766,-0.658345222473145 ,0.235575124621391,0.714902698993683,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.980856895446777 ,0.194233447313309,-0.0138956038281322,-0.952685832977295,0.144979551434517,0.26715275645256,-0.924136519432068 ,-0.0825221389532089,0.373043924570084,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.958563566207886 ,0.284186273813248,-0.0198515504598618,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.952685832977295 ,0.144979551434517,0.26715275645256,0.698522806167603,-0.278597444295883,0.659127771854401,0.912912726402283 ,-0.113555498421192,0.392040193080902,0.898469209671021,-0.0272972695529461,0.438187032938004,0.706884205341339 ,-0.28878253698349,0.645692944526672,0.706884205341339,-0.28878253698349,0.645692944526672,0.898469209671021 ,-0.0272972695529461,0.438187032938004,0.761282086372375,0.311987817287445,0.568430483341217,0.630046010017395 ,0.0436474196612835,0.775330185890198,0.630046010017395,0.0436474196612835,0.775330185890198,0.761282086372375 ,0.311987817287445,0.568430483341217,0.335851162672043,0.562229573726654,0.755712866783142,0.228427618741989 ,0.282149314880371,0.931779265403748,0.228427618741989,0.282149314880371,0.931779265403748,0.335851162672043 ,0.562229573726654,0.755712866783142,-0.214515462517738,0.588520050048828,0.779504477977753,-0.250782161951065 ,0.269851088523865,0.929671287536621,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603 ,-0.278597444295883,0.659127771854401,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707 ,-0.0168874561786652,0.333320707082748,0.942662239074707,-0.0168874561786652,0.333320707082748,0.819937825202942 ,-0.00659102853387594,0.572414636611938,0.90546315908432,0.186478093266487,0.381264179944992,0.947061896324158 ,0.0981694161891937,0.305673807859421,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.929124534130096 ,0.342707455158234,-0.138849511742592,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.978413343429565 ,-0.195419788360596,0.0672191008925438,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.952633440494537 ,0.0169817637652159,0.303646564483643,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.915837526321411 ,0.379801750183105,-0.130354270339012,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.707790970802307 ,0.336063861846924,0.621363818645477,-0.544086277484894,0.801831424236298,0.247055679559708,-0.805534958839417 ,0.59233832359314,0.0157723147422075,-0.707790970802307,0.336063861846924,0.621363818645477,-0.297837793827057 ,0.470342427492142,0.830704927444458,-0.19909605383873,0.874440908432007,0.442395597696304,-0.544086277484894 ,0.801831424236298,0.247055679559708,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.613491356372833 ,0.78081339597702,-0.118147142231464,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.872991740703583 ,0.465614497661591,-0.14521898329258,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.432487457990646 ,0.89841216802597,0.0762243419885635,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773 ,0.556849658489227,0.0643076002597809,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.147313103079796 ,0.957895338535309,0.246445491909981,-0.245548605918884,0.755104780197144,0.607883751392365,-0.619584679603577 ,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.912259876728058 ,0.390434086322784,0.123867250978947,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.872991740703583 ,0.465614497661591,-0.14521898329258,-0.619584679603577,0.676743805408478,0.397658914327621,-0.660027086734772 ,0.561297416687012,0.499309033155441,-0.912259876728058,0.390434086322784,0.123867250978947,-0.828120172023773 ,0.556849658489227,0.0643076002597809,-0.245548605918884,0.755104780197144,0.607883751392365,-0.249163046479225 ,0.650838494300842,0.717165946960449,-0.660027086734772,0.561297416687012,0.499309033155441,-0.619584679603577 ,0.676743805408478,0.397658914327621,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.965696513652802 ,-0.217925488948822,-0.141204655170441,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.929124534130096 ,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.719024538993835 ,0.657704889774323,-0.224561721086502,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.866115570068359 ,0.494783669710159,-0.0709429755806923,0.87403529882431,-0.400045335292816,0.275728017091751,0.975419282913208 ,0.160561114549637,0.150921493768692,0.949690341949463,0.234604075551033,0.207482814788818,0.854402661323547 ,-0.324486196041107,0.405838400125504,0.854402661323547,-0.324486196041107,0.405838400125504,0.949690341949463 ,0.234604075551033,0.207482814788818,0.757872521877289,0.513580203056335,0.402324080467224,0.717831492424011 ,-0.054539829492569,0.694077372550964,0.717831492424011,-0.054539829492569,0.694077372550964,0.757872521877289 ,0.513580203056335,0.402324080467224,0.302653968334198,0.791418790817261,0.531090319156647,0.249009624123573 ,0.325980126857758,0.911992967128754,0.249009624123573,0.325980126857758,0.911992967128754,0.302653968334198 ,0.791418790817261,0.531090319156647,-0.19909605383873,0.874440908432007,0.442395597696304,-0.297837793827057 ,0.470342427492142,0.830704927444458,0.832433819770813,0.553277313709259,0.030629251152277,0.924078166484833 ,0.34885248541832,0.156145676970482,0.746821939945221,0.530121684074402,0.401531994342804,0.654044508934021,0.736575365066528 ,0.172286093235016,0.654044508934021,0.736575365066528,0.172286093235016,0.746821939945221,0.530121684074402 ,0.401531994342804,0.281799226999283,0.728858947753906,0.623982191085815,0.284114360809326,0.91420567035675,0.288975805044174 ,0.281799226999283,0.728858947753906,0.623982191085815,-0.245548605918884,0.755104780197144,0.607883751392365 ,-0.147313103079796,0.957895338535309,0.246445491909981,0.284114360809326,0.91420567035675,0.288975805044174 ,0.894311189651489,0.387113749980927,0.224389031529427,0.90546315908432,0.186478093266487,0.381264179944992,0.961451351642609 ,0.0904497504234314,0.259673148393631,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833 ,0.34885248541832,0.156145676970482,0.962417662143707,0.0915835499763489,0.255665153264999,0.791133522987366 ,0.342469990253448,0.506776094436646,0.746821939945221,0.530121684074402,0.401531994342804,0.746821939945221 ,0.530121684074402,0.401531994342804,0.791133522987366,0.342469990253448,0.506776094436646,0.301605939865112 ,0.609322726726532,0.733321011066437,0.281799226999283,0.728858947753906,0.623982191085815,0.301605939865112 ,0.609322726726532,0.733321011066437,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245548605918884 ,0.755104780197144,0.607883751392365,0.281799226999283,0.728858947753906,0.623982191085815,0.947061896324158 ,0.0981694161891937,0.305673807859421,0.96901547908783,0.136607244610786,0.205785036087036,0.951126515865326 ,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.96901547908783 ,0.136607244610786,0.205785036087036,0.975419282913208,0.160561114549637,0.150921493768692,0.87403529882431,-0.400045335292816 ,0.275728017091751,0.900647282600403,-0.388538032770157,0.194609194993973,0.867212951183319,0.49559211730957 ,0.0482721738517284,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832 ,0.156145676970482,0.832433819770813,0.553277313709259,0.030629251152277,0.923258781433105,0.354574829339981 ,0.147884577512741,0.961451351642609,0.0904497504234314,0.259673148393631,0.962417662143707,0.0915835499763489 ,0.255665153264999,0.924078166484833,0.34885248541832,0.156145676970482,-0.929124534130096,0.342707455158234 ,-0.138849511742592,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.719024538993835,0.657704889774323 ,-0.224561721086502,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.915837526321411,0.379801750183105 ,-0.130354270339012,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.613491356372833,0.78081339597702 ,-0.118147142231464,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.805534958839417,0.59233832359314 ,0.0157723147422075,-0.544086277484894,0.801831424236298,0.247055679559708,-0.432487457990646,0.89841216802597 ,0.0762243419885635,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.544086277484894,0.801831424236298 ,0.247055679559708,-0.19909605383873,0.874440908432007,0.442395597696304,-0.147313103079796,0.957895338535309 ,0.246445491909981,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.929124534130096,0.342707455158234 ,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.861001670360565,0.508598923683167 ,-0.00179795478470623,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.945275783538818,0.311140537261963 ,-0.0982102751731873,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.93208372592926,0.354399085044861 ,0.0749747157096863,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.832433819770813,0.553277313709259 ,0.030629251152277,0.949690341949463,0.234604075551033,0.207482814788818,0.975419282913208,0.160561114549637 ,0.150921493768692,0.867212951183319,0.49559211730957,0.0482721738517284,0.654044508934021,0.736575365066528 ,0.172286093235016,0.757872521877289,0.513580203056335,0.402324080467224,0.949690341949463,0.234604075551033 ,0.207482814788818,0.832433819770813,0.553277313709259,0.030629251152277,0.284114360809326,0.91420567035675,0.288975805044174 ,0.302653968334198,0.791418790817261,0.531090319156647,0.757872521877289,0.513580203056335,0.402324080467224 ,0.654044508934021,0.736575365066528,0.172286093235016,-0.19909605383873,0.874440908432007,0.442395597696304 ,0.302653968334198,0.791418790817261,0.531090319156647,0.284114360809326,0.91420567035675,0.288975805044174,-0.147313103079796 ,0.957895338535309,0.246445491909981,0.894311189651489,0.387113749980927,0.224389031529427,0.867212951183319 ,0.49559211730957,0.0482721738517284,0.975419282913208,0.160561114549637,0.150921493768692,0.96901547908783,0.136607244610786 ,0.205785036087036,0.90546315908432,0.186478093266487,0.381264179944992,0.894311189651489,0.387113749980927,0.224389031529427 ,0.96901547908783,0.136607244610786,0.205785036087036,0.947061896324158,0.0981694161891937,0.305673807859421 ,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.958563566207886,0.284186273813248,-0.0198515504598618 ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.964038372039795,-0.105999648571014,-0.243709042668343 ,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.88679826259613,0.179964601993561,-0.42567777633667 ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.958563566207886,0.284186273813248,-0.0198515504598618 ,0.895804822444916,0.195413783192635,-0.399183094501495,0.886481404304504,0.177040234208107,-0.427559942007065 ,0.964801907539368,-0.255219370126724,0.0634067207574844,0.977060616016388,-0.163682118058205,0.136237412691116 ,0.901520609855652,-0.411151170730591,-0.134964123368263,0.964801907539368,-0.255219370126724,0.0634067207574844 ,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746 ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.901520609855652,-0.411151170730591,-0.134964123368263 ,0.787978410720825,0.121628329157829,-0.603569865226746,0.571970582008362,0.0312800444662571,-0.819677472114563 ,0.241922825574875,-0.699652969837189,-0.672279000282288,0.666584491729736,-0.599533498287201,-0.44297257065773 ,0.571970582008362,0.0312800444662571,-0.819677472114563,0.266431361436844,-0.0175890251994133,-0.963693380355835 ,0.977060616016388,-0.163682118058205,0.136237412691116,0.832494258880615,-0.151082515716553,-0.53303599357605 ,0.693842947483063,0.221262499690056,-0.685291826725006,0.895804822444916,0.195413783192635,-0.399183094501495 ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.954547107219696,-0.0926553905010223,-0.283292710781097 ,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.536711573600769,0.454791516065598,-0.710707664489746 ,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.533322870731354,0.362958401441574,-0.764086365699768 ,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.807687342166901,-0.332686811685562,-0.486786007881165 ,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.416003495454788,0.214769661426544,-0.883637428283691 ,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.351745277643204,-0.619295239448547,-0.701960563659668 ,0.266431361436844,-0.0175890251994133,-0.963693380355835,-0.121472828090191,0.0532774887979031,-0.991163909435272 ,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.241922825574875,-0.699652969837189,-0.672279000282288 ,-0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026 ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.536711573600769,0.454791516065598,-0.710707664489746 ,0.964801907539368,-0.255219370126724,0.0634067207574844,0.552583754062653,-0.801110565662384,0.229941368103027 ,0.598017036914825,-0.77135705947876,0.217678412795067,0.977060616016388,-0.163682118058205,0.136237412691116 ,0.901520609855652,-0.411151170730591,-0.134964123368263,0.446152597665787,-0.869332015514374,0.212625667452812 ,0.552583754062653,-0.801110565662384,0.229941368103027,0.964801907539368,-0.255219370126724,0.0634067207574844 ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.292398184537888,-0.949960947036743,0.10989760607481 ,0.446152597665787,-0.869332015514374,0.212625667452812,0.901520609855652,-0.411151170730591,-0.134964123368263 ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.292398184537888,-0.949960947036743,0.10989760607481 ,0.666584491729736,-0.599533498287201,-0.44297257065773,0.241922825574875,-0.699652969837189,-0.672279000282288 ,0.356895834207535,-0.932965636253357,0.0469100996851921,0.682462096214294,-0.715959489345551,-0.147131055593491 ,0.977060616016388,-0.163682118058205,0.136237412691116,0.598017036914825,-0.77135705947876,0.217678412795067 ,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.626312673091888,-0.775286138057709,0.0816323086619377 ,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.980031192302704,0.046081081032753,-0.19343064725399 ,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.954547107219696,-0.0926553905010223,-0.283292710781097 ,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.515369832515717,-0.855204343795776,0.0549499057233334 ,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.807687342166901,-0.332686811685562,-0.486786007881165 ,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.270284593105316,-0.962110757827759,-0.0359042175114155 ,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.270284593105316,-0.962110757827759,-0.0359042175114155 ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.241922825574875,-0.699652969837189,-0.672279000282288 ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.699954152107239,-0.637360692024231,-0.322235196828842 ,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.704459130764008,-0.709129512310028,0.0295414477586746 ,0.895804822444916,0.195413783192635,-0.399183094501495,-0.0514890588819981,0.630368947982788,-0.774586260318756 ,-0.0356711931526661,0.684221088886261,-0.728401660919189,0.886481404304504,0.177040234208107,-0.427559942007065 ,0.787978410720825,0.121628329157829,-0.603569865226746,0.886481404304504,0.177040234208107,-0.427559942007065 ,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215 ,0.571970582008362,0.0312800444662571,-0.819677472114563,0.787978410720825,0.121628329157829,-0.603569865226746 ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0719253867864609,0.846214473247528,-0.527965664863586 ,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.571970582008362,0.0312800444662571,-0.819677472114563 ,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.0788120701909065,0.901525735855103,-0.42548793554306 ,0.777539789676666,-0.479580610990524,-0.406736135482788,-0.33768093585968,-0.49410879611969,-0.801141738891602 ,-0.207446113228798,0.0645331293344498,-0.976115584373474,0.832494258880615,-0.151082515716553,-0.53303599357605 ,0.693842947483063,0.221262499690056,-0.685291826725006,-0.13019323348999,0.440476208925247,-0.88827383518219 ,-0.0514890588819981,0.630368947982788,-0.774586260318756,0.895804822444916,0.195413783192635,-0.399183094501495 ,-0.533322870731354,0.362958401441574,-0.764086365699768,0.541287243366241,0.601404964923859,-0.587639510631561 ,0.570469558238983,0.551836013793945,-0.608310341835022,-0.536711573600769,0.454791516065598,-0.710707664489746 ,-0.416003495454788,0.214769661426544,-0.883637428283691,0.492161780595779,0.702208399772644,-0.514470756053925 ,0.541287243366241,0.601404964923859,-0.587639510631561,-0.533322870731354,0.362958401441574,-0.764086365699768 ,-0.121472828090191,0.0532774887979031,-0.991163909435272,0.315746545791626,0.845299899578094,-0.431012988090515 ,0.492161780595779,0.702208399772644,-0.514470756053925,-0.416003495454788,0.214769661426544,-0.883637428283691 ,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.0788120701909065,0.901525735855103,-0.42548793554306 ,0.315746545791626,0.845299899578094,-0.431012988090515,-0.121472828090191,0.0532774887979031,-0.991163909435272 ,-0.536711573600769,0.454791516065598,-0.710707664489746,0.570469558238983,0.551836013793945,-0.608310341835022 ,0.622039020061493,0.415303707122803,-0.663769721984863,-0.185644939541817,0.470028698444366,-0.862907290458679 ,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.185644939541817,0.470028698444366,-0.862907290458679 ,0.622039020061493,0.415303707122803,-0.663769721984863,0.643028497695923,0.0408206060528755,-0.764753580093384 ,-0.540148377418518,0.0994914695620537,-0.83566814661026,0.643028497695923,0.0408206060528755,-0.764753580093384 ,0.564797043800354,-0.561121165752411,-0.605101108551025,-0.639358460903168,-0.36973437666893,-0.674178957939148 ,0.598017036914825,-0.77135705947876,0.217678412795067,0.552583754062653,-0.801110565662384,0.229941368103027 ,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.503399014472961,-0.851141691207886,0.148819476366043 ,0.446152597665787,-0.869332015514374,0.212625667452812,-0.599539399147034,-0.652060031890869,0.464079976081848 ,-0.549799084663391,-0.796860456466675,0.250468283891678,0.552583754062653,-0.801110565662384,0.229941368103027 ,0.292398184537888,-0.949960947036743,0.10989760607481,-0.502160012722015,-0.455851703882217,0.734870433807373 ,-0.599539399147034,-0.652060031890869,0.464079976081848,0.446152597665787,-0.869332015514374,0.212625667452812 ,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.272433489561081,-0.386231929063797,0.881251931190491 ,-0.502160012722015,-0.455851703882217,0.734870433807373,0.292398184537888,-0.949960947036743,0.10989760607481 ,0.777539789676666,-0.479580610990524,-0.406736135482788,0.682462096214294,-0.715959489345551,-0.147131055593491 ,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.33768093585968,-0.49410879611969,-0.801141738891602 ,0.356895834207535,-0.932965636253357,0.0469100996851921,0.598017036914825,-0.77135705947876,0.217678412795067 ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.492518663406372,-0.867294549942017,-0.0722879022359848 ,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.704459130764008,-0.709129512310028,0.0295414477586746 ,0.375612527132034,-0.880971193313599,0.287758558988571,0.426156967878342,-0.793524563312531,0.434406518936157 ,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.626312673091888,-0.775286138057709,0.0816323086619377 ,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973 ,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.515369832515717,-0.855204343795776,0.0549499057233334 ,0.342554897069931,-0.64288204908371,0.685097694396973,0.0474529080092907,-0.46172571182251,0.885752558708191 ,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0474529080092907,-0.46172571182251,0.885752558708191 ,-0.272433489561081,-0.386231929063797,0.881251931190491,0.0585855022072792,-0.997730076313019,-0.0332028940320015 ,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.456256777048111,-0.889221489429474,-0.0333887115120888 ,0.376423925161362,-0.91814798116684,0.12373098731041,0.375612527132034,-0.880971193313599,0.287758558988571 ,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.699954152107239,-0.637360692024231,-0.322235196828842 ,0.438194841146469,-0.882847785949707,-0.169011816382408,0.376423925161362,-0.91814798116684,0.12373098731041 ,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.639358460903168,-0.36973437666893,-0.674178957939148 ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.438194841146469,-0.882847785949707,-0.169011816382408 ,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.207446113228798,0.0645331293344498,-0.976115584373474 ,-0.13019323348999,0.440476208925247,-0.88827383518219,0.693842947483063,0.221262499690056,-0.685291826725006 ,0.682462096214294,-0.715959489345551,-0.147131055593491,0.356895834207535,-0.932965636253357,0.0469100996851921 ,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.442046195268631,-0.813259303569794,-0.378423690795898 ,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.76156884431839,0.476596713066101,-0.439167976379395 ,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.0356711931526661,0.684221088886261,-0.728401660919189 ,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.704140067100525,0.675374805927277,-0.219215899705887 ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0356711931526661,0.684221088886261,-0.728401660919189 ,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.704140067100525,0.675374805927277,-0.219215899705887 ,-0.521776258945465,0.845166325569153,0.115945540368557,-0.0719253867864609,0.846214473247528,-0.527965664863586 ,-0.521776258945465,0.845166325569153,0.115945540368557,-0.117615908384323,0.926379323005676,0.357753843069077 ,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.0719253867864609,0.846214473247528,-0.527965664863586 ,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.905734241008759,-0.0415813475847244,-0.421801447868347 ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.207446113228798,0.0645331293344498,-0.976115584373474 ,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.76156884431839,0.476596713066101,-0.439167976379395 ,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.13019323348999,0.440476208925247,-0.88827383518219 ,0.541287243366241,0.601404964923859,-0.587639510631561,0.935190200805664,0.351279437541962,-0.044966459274292 ,0.96645724773407,0.233678266406059,-0.106558986008167,0.570469558238983,0.551836013793945,-0.608310341835022 ,0.492161780595779,0.702208399772644,-0.514470756053925,0.804791152477264,0.576125502586365,0.142795473337173 ,0.935190200805664,0.351279437541962,-0.044966459274292,0.541287243366241,0.601404964923859,-0.587639510631561 ,0.315746545791626,0.845299899578094,-0.431012988090515,0.42239049077034,0.834542334079742,0.353730529546738 ,0.804791152477264,0.576125502586365,0.142795473337173,0.492161780595779,0.702208399772644,-0.514470756053925 ,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.117615908384323,0.926379323005676,0.357753843069077 ,0.42239049077034,0.834542334079742,0.353730529546738,0.315746545791626,0.845299899578094,-0.431012988090515 ,0.570469558238983,0.551836013793945,-0.608310341835022,0.96645724773407,0.233678266406059,-0.106558986008167 ,0.982214033603668,0.146134316921234,-0.117899708449841,0.622039020061493,0.415303707122803,-0.663769721984863 ,0.622039020061493,0.415303707122803,-0.663769721984863,0.982214033603668,0.146134316921234,-0.117899708449841 ,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.643028497695923,0.0408206060528755,-0.764753580093384 ,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.972557067871094,-0.221615329384804,-0.0708476528525352 ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.643028497695923,0.0408206060528755,-0.764753580093384 ,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.9717116355896,-0.234629422426224,-0.0269353594630957 ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.549799084663391,-0.796860456466675,0.250468283891678 ,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.978413343429565,-0.195419788360596,0.0672191008925438 ,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.599539399147034,-0.652060031890869,0.464079976081848 ,-0.707790970802307,0.336063861846924,0.621363818645477,-0.952633440494537,0.0169817637652159,0.303646564483643 ,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.502160012722015,-0.455851703882217,0.734870433807373 ,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.297837793827057,0.470342427492142,0.830704927444458 ,-0.707790970802307,0.336063861846924,0.621363818645477,-0.502160012722015,-0.455851703882217,0.734870433807373 ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.905734241008759,-0.0415813475847244,-0.421801447868347 ,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.442046195268631,-0.813259303569794,-0.378423690795898 ,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.9717116355896,-0.234629422426224,-0.0269353594630957 ,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.492518663406372,-0.867294549942017,-0.0722879022359848 ,0.375612527132034,-0.880971193313599,0.287758558988571,0.87403529882431,-0.400045335292816,0.275728017091751 ,0.854402661323547,-0.324486196041107,0.405838400125504,0.426156967878342,-0.793524563312531,0.434406518936157 ,0.854402661323547,-0.324486196041107,0.405838400125504,0.717831492424011,-0.054539829492569,0.694077372550964 ,0.342554897069931,-0.64288204908371,0.685097694396973,0.426156967878342,-0.793524563312531,0.434406518936157 ,0.342554897069931,-0.64288204908371,0.685097694396973,0.717831492424011,-0.054539829492569,0.694077372550964 ,0.249009624123573,0.325980126857758,0.911992967128754,0.0474529080092907,-0.46172571182251,0.885752558708191 ,0.0474529080092907,-0.46172571182251,0.885752558708191,0.249009624123573,0.325980126857758,0.911992967128754 ,-0.297837793827057,0.470342427492142,0.830704927444458,-0.272433489561081,-0.386231929063797,0.881251931190491 ,0.900647282600403,-0.388538032770157,0.194609194993973,0.87403529882431,-0.400045335292816,0.275728017091751 ,0.375612527132034,-0.880971193313599,0.287758558988571,0.376423925161362,-0.91814798116684,0.12373098731041 ,0.951126515865326,-0.290161103010178,0.105663925409317,0.900647282600403,-0.388538032770157,0.194609194993973 ,0.376423925161362,-0.91814798116684,0.12373098731041,0.438194841146469,-0.882847785949707,-0.169011816382408 ,0.564797043800354,-0.561121165752411,-0.605101108551025,0.972557067871094,-0.221615329384804,-0.0708476528525352 ,0.951126515865326,-0.290161103010178,0.105663925409317,0.438194841146469,-0.882847785949707,-0.169011816382408 ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.809617698192596,0.346473306417465,-0.473788410425186 ,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.207446113228798,0.0645331293344498,-0.976115584373474 ,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.965696513652802,-0.217925488948822,-0.141204655170441 ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.442046195268631,-0.813259303569794,-0.378423690795898 ,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.958588540554047,0.28219923377037,-0.0383618324995041 ,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.872991740703583,0.465614497661591,-0.14521898329258 ,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.96112471818924,0.0701068416237831,0.267066061496735 ,-0.952685832977295,0.144979551434517,0.26715275645256,-0.93208372592926,0.354399085044861,0.0749747157096863 ,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.866115570068359,0.494783669710159,-0.0709429755806923 ,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.93208372592926,0.354399085044861,0.0749747157096863 ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.88679826259613,0.179964601993561,-0.42567777633667 ,-0.905734241008759,-0.0415813475847244,-0.421801447868347,0.698522806167603,-0.278597444295883,0.659127771854401 ,0.845280110836029,-0.0974530875682831,0.525361180305481,0.819937825202942,-0.00659102853387594,0.572414636611938 ,0.942662239074707,-0.0168874561786652,0.333320707082748,0.997464418411255,-0.00418182462453842,-0.0710434243083 ,0.982214033603668,0.146134316921234,-0.117899708449841,0.982547283172607,-0.0194747932255268,0.184990763664246 ,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.997464418411255,-0.00418182462453842,-0.0710434243083 ,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.905734241008759,-0.0415813475847244,-0.421801447868347 ,-0.964038372039795,-0.105999648571014,-0.243709042668343,0.867212951183319,0.49559211730957,0.0482721738517284 ,0.894311189651489,0.387113749980927,0.224389031529427,0.923258781433105,0.354574829339981,0.147884577512741 ,0.96901547908783,0.136607244610786,0.205785036087036,0.900647282600403,-0.388538032770157,0.194609194993973 ,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246 ,0.951126515865326,-0.290161103010178,0.105663925409317,0.972557067871094,-0.221615329384804,-0.0708476528525352 ,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.980856895446777,0.194233447313309,-0.0138956038281322 ,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.945275783538818,0.311140537261963,-0.0982102751731873 ,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.965696513652802,-0.217925488948822,-0.141204655170441 ,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.540148377418518,0.0994914695620537,-0.83566814661026 ,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.639358460903168,-0.36973437666893,-0.674178957939148 ,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.980031192302704,0.046081081032753,-0.19343064725399 ,0.682462096214294,-0.715959489345551,-0.147131055593491,0.777539789676666,-0.479580610990524,-0.406736135482788 ,0.977060616016388,-0.163682118058205,0.136237412691116,0.977060616016388,-0.163682118058205,0.136237412691116 ,0.777539789676666,-0.479580610990524,-0.406736135482788,0.832494258880615,-0.151082515716553,-0.53303599357605 ,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952685832977295,0.144979551434517,0.26715275645256 ,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.866115570068359,0.494783669710159,-0.0709429755806923 ,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.771193385124207,0.619839727878571,-0.145118817687035 ,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648 ,0.968085885047913,0.249149695038795,-0.0270941667258739,0.984016954898834,0.178066745400429,-0.00170838471967727 ,0.739788413047791,0.545380234718323,-0.394047558307648,0.704140186309814,0.675374627113342,-0.21921606361866 ,0.898221969604492,0.418350785970688,0.134832948446274,0.968085885047913,0.249149695038795,-0.0270941667258739 ,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.654416561126709 ,0.56166809797287,0.506229162216187,0.898221969604492,0.418350785970688,0.134832948446274,0.521775901317596,0.845166563987732 ,0.11594570428133,0.117615856230259,0.926379323005676,0.357753992080688,0.214515626430511,0.588520109653473,0.779504418373108 ,0.654416561126709,0.56166809797287,0.506229162216187,0.952755630016327,-0.0757652819156647,0.294136583805084 ,0.910864531993866,0.0992951467633247,0.400582402944565,0.926552355289459,0.207176983356476,0.31397208571434 ,0.98439222574234,0.0485407151281834,0.169161930680275,0.910864531993866,0.0992951467633247,0.400582402944565 ,0.658345222473145,0.235576301813126,0.714902341365814,0.666352212429047,0.406804502010345,0.624887824058533 ,0.926552355289459,0.207176983356476,0.31397208571434,0.658345222473145,0.235576301813126,0.714902341365814,0.250782340764999 ,0.269851475954056,0.929671168327332,0.245068743824959,0.507136464118958,0.826289236545563,0.666352212429047 ,0.406804502010345,0.624887824058533,0.98439222574234,0.0485407151281834,0.169161930680275,0.962221920490265 ,0.251950919628143,-0.103197492659092,0.958588719367981,0.282198518514633,-0.0383618138730526,0.96112471818924 ,0.0701063796877861,0.267066121101379,0.962221920490265,0.251950919628143,-0.103197492659092,0.98439222574234 ,0.0485407151281834,0.169161930680275,0.926552355289459,0.207176983356476,0.31397208571434,0.912259817123413 ,0.390434235334396,0.123867250978947,0.912259817123413,0.390434235334396,0.123867250978947,0.926552355289459 ,0.207176983356476,0.31397208571434,0.666352212429047,0.406804502010345,0.624887824058533,0.660027027130127,0.561297476291656 ,0.499309003353119,0.660027027130127,0.561297476291656,0.499309003353119,0.666352212429047,0.406804502010345 ,0.624887824058533,0.245068743824959,0.507136464118958,0.826289236545563,0.249163061380386,0.650838553905487 ,0.717165887355804,0.980856955051422,0.194233074784279,-0.0138955730944872,0.80961799621582,0.346472293138504 ,-0.473788559436798,0.761568784713745,0.476597040891647,-0.439167678356171,0.984016954898834,0.178066745400429 ,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952755630016327,-0.0757652819156647 ,0.294136583805084,0.98439222574234,0.0485407151281834,0.169161930680275,0.96112471818924,0.0701063796877861 ,0.267066121101379,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.966457307338715,0.233678236603737 ,-0.106558948755264,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.898469209671021,-0.0272952988743782 ,0.43818724155426,-0.804790914058685,0.576125860214233,0.142795518040657,-0.935190379619598,0.351279079914093 ,-0.0449664331972599,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.761282026767731,0.31198838353157 ,0.568430244922638,-0.804790914058685,0.576125860214233,0.142795518040657,-0.761282026767731,0.31198838353157 ,0.568430244922638,-0.335850954055786,0.562229692935944,0.755712807178497,-0.422390103340149,0.834542691707611 ,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.422390103340149,0.834542691707611 ,0.353730261325836,-0.335850954055786,0.562229692935944,0.755712807178497,0.214515626430511,0.588520109653473 ,0.779504418373108,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764 ,0.481665462255478,-0.71757584810257,0.177658542990685,0.67344069480896,-0.63004606962204,0.043647576123476,0.775330185890198 ,-0.63004606962204,0.043647576123476,0.775330185890198,-0.71757584810257,0.177658542990685,0.67344069480896,-0.267084181308746 ,0.455141216516495,0.849418938159943,-0.22842738032341,0.282149195671082,0.931779384613037,-0.22842738032341 ,0.282149195671082,0.931779384613037,-0.267084181308746,0.455141216516495,0.849418938159943,0.245068743824959 ,0.507136464118958,0.826289236545563,0.250782340764999,0.269851475954056,0.929671168327332,-0.961451351642609 ,0.0904500335454941,0.259673148393631,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.819937765598297 ,-0.00659000594168901,0.572414755821228,-0.905462920665741,0.186479464173317,0.38126415014267,-0.71757584810257 ,0.177658542990685,0.67344069480896,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.962417662143707 ,0.0915835052728653,0.255665123462677,-0.791133582592011,0.342469930648804,0.506776034832001,-0.267084181308746 ,0.455141216516495,0.849418938159943,-0.71757584810257,0.177658542990685,0.67344069480896,-0.791133582592011 ,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726,0.245068743824959 ,0.507136464118958,0.826289236545563,-0.267084181308746,0.455141216516495,0.849418938159943,-0.30160591006279 ,0.609322607517242,0.733321130275726,0.249163061380386,0.650838553905487,0.717165887355804,-0.982547223567963 ,-0.0194754991680384,0.184990763664246,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.942662239074707 ,-0.0168870743364096,0.333320766687393,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.942662239074707 ,-0.0168870743364096,0.333320766687393,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.966457307338715 ,0.233678236603737,-0.106558948755264,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.698523104190826 ,-0.278595626354218,0.659128189086914,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.870358943939209 ,-0.102341398596764,0.481665462255478,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209 ,-0.102341398596764,0.481665462255478,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.961451351642609 ,0.0904500335454941,0.259673148393631,-0.962417662143707,0.0915835052728653,0.255665123462677,0.924136519432068 ,-0.0825216323137283,0.373044043779373,0.984016954898834,0.178066745400429,-0.00170838471967727,0.968085885047913 ,0.249149695038795,-0.0270941667258739,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866 ,0.0992951467633247,0.400582402944565,0.952755630016327,-0.0757652819156647,0.294136583805084,0.968085885047913 ,0.249149695038795,-0.0270941667258739,0.898221969604492,0.418350785970688,0.134832948446274,0.658345222473145 ,0.235576301813126,0.714902341365814,0.910864531993866,0.0992951467633247,0.400582402944565,0.898221969604492 ,0.418350785970688,0.134832948446274,0.654416561126709,0.56166809797287,0.506229162216187,0.250782340764999,0.269851475954056 ,0.929671168327332,0.658345222473145,0.235576301813126,0.714902341365814,0.654416561126709,0.56166809797287,0.506229162216187 ,0.214515626430511,0.588520109653473,0.779504418373108,0.984016954898834,0.178066745400429,-0.00170838471967727 ,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952685952186584,0.144979014992714,0.267152786254883 ,0.980856955051422,0.194233074784279,-0.0138955730944872,0.980856955051422,0.194233074784279,-0.0138955730944872 ,0.952685952186584,0.144979014992714,0.267152786254883,0.932084560394287,0.354396849870682,0.074974812567234 ,0.958563983440399,0.284184783697128,-0.0198514685034752,-0.698523104190826,-0.278595626354218,0.659128189086914 ,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.898469209671021,-0.0272952988743782,0.43818724155426 ,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.706884801387787,-0.288780331611633,0.645693302154541 ,-0.63004606962204,0.043647576123476,0.775330185890198,-0.761282026767731,0.31198838353157,0.568430244922638 ,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.63004606962204,0.043647576123476,0.775330185890198 ,-0.22842738032341,0.282149195671082,0.931779384613037,-0.335850954055786,0.562229692935944,0.755712807178497 ,-0.761282026767731,0.31198838353157,0.568430244922638,-0.22842738032341,0.282149195671082,0.931779384613037 ,0.250782340764999,0.269851475954056,0.929671168327332,0.214515626430511,0.588520109653473,0.779504418373108 ,-0.335850954055786,0.562229692935944,0.755712807178497,-0.912912726402283,-0.113554358482361,0.392040550708771 ,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.819937765598297,-0.00659000594168901,0.572414755821228 ,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.942662239074707,-0.0168870743364096,0.333320766687393 ,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.905462920665741,0.186479464173317,0.38126415014267 ,-0.819937765598297,-0.00659000594168901,0.572414755821228,0.915838539600372,0.379799336194992,-0.13035449385643 ,0.97841340303421,-0.195419549942017,0.0672191828489304,0.971711337566376,-0.234630659222603,-0.0269353967159987 ,0.929125070571899,0.342706054449081,-0.138849601149559,0.97841340303421,-0.195419549942017,0.0672191828489304 ,0.915838539600372,0.379799336194992,-0.13035449385643,0.805536329746246,0.592336535453796,0.01577203348279,0.952633321285248 ,0.0169839523732662,0.303646683692932,0.952633321285248,0.0169839523732662,0.303646683692932,0.805536329746246 ,0.592336535453796,0.01577203348279,0.544086754322052,0.801831126213074,0.247055530548096,0.707790434360504,0.336065679788589 ,0.621363461017609,0.707790434360504,0.336065679788589,0.621363461017609,0.544086754322052,0.801831126213074 ,0.247055530548096,0.199096158146858,0.874440908432007,0.442395567893982,0.29783770442009,0.470342755317688,0.830704748630524 ,0.719026386737823,0.657702744007111,-0.224562168121338,0.872992157936096,0.465613692998886,-0.145219102501869 ,0.828120410442352,0.556849300861359,0.0643075108528137,0.613492965698242,0.780812084674835,-0.118147522211075 ,0.613492965698242,0.780812084674835,-0.118147522211075,0.828120410442352,0.556849300861359,0.0643075108528137 ,0.619584619998932,0.676743865013123,0.397658854722977,0.432487845420837,0.898411989212036,0.076224185526371 ,0.432487845420837,0.898411989212036,0.076224185526371,0.619584619998932,0.676743865013123,0.397658854722977 ,0.245548591017723,0.755104839801788,0.60788369178772,0.147313222289085,0.957895278930664,0.246445551514626,0.828120410442352 ,0.556849300861359,0.0643075108528137,0.872992157936096,0.465613692998886,-0.145219102501869,0.962221920490265 ,0.251950919628143,-0.103197492659092,0.912259817123413,0.390434235334396,0.123867250978947,0.619584619998932 ,0.676743865013123,0.397658854722977,0.828120410442352,0.556849300861359,0.0643075108528137,0.912259817123413 ,0.390434235334396,0.123867250978947,0.660027027130127,0.561297476291656,0.499309003353119,0.245548591017723 ,0.755104839801788,0.60788369178772,0.619584619998932,0.676743865013123,0.397658854722977,0.660027027130127,0.561297476291656 ,0.499309003353119,0.249163061380386,0.650838553905487,0.717165887355804,0.945276021957397,0.311139762401581 ,-0.0982102602720261,0.929125070571899,0.342706054449081,-0.138849601149559,0.971711337566376,-0.234630659222603 ,-0.0269353967159987,0.965696275234222,-0.217926412820816,-0.141204699873924,0.77119505405426,0.619837582111359 ,-0.14511901140213,0.866116344928741,0.494782358407974,-0.0709430351853371,0.872992157936096,0.465613692998886 ,-0.145219102501869,0.719026386737823,0.657702744007111,-0.224562168121338,-0.874035537242889,-0.400044828653336 ,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.949690282344818,0.234604343771935 ,0.20748282968998,-0.975419044494629,0.160562738776207,0.150921478867531,-0.854402720928192,-0.324486047029495 ,0.405838370323181,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.75787228345871,0.513580441474915 ,0.402324169874191,-0.949690282344818,0.234604343771935,0.20748282968998,-0.717831492424011,-0.054540041834116 ,0.69407731294632,-0.24900957942009,0.325979948043823,0.911993026733398,-0.302653342485428,0.791418969631195 ,0.531090319156647,-0.75787228345871,0.513580441474915,0.402324169874191,-0.24900957942009,0.325979948043823 ,0.911993026733398,0.29783770442009,0.470342755317688,0.830704748630524,0.199096158146858,0.874440908432007,0.442395567893982 ,-0.302653342485428,0.791418969631195,0.531090319156647,-0.832433760166168,0.553277373313904,0.0306292269378901 ,-0.654044389724731,0.736575484275818,0.172286108136177,-0.746822059154511,0.530121624469757,0.401531904935837 ,-0.924078285694122,0.348852246999741,0.156145602464676,-0.654044389724731,0.736575484275818,0.172286108136177 ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.281799405813217,0.728858828544617,0.62398225069046 ,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046 ,-0.284113943576813,0.914205729961395,0.288975954055786,0.147313222289085,0.957895278930664,0.246445551514626 ,0.245548591017723,0.755104839801788,0.60788369178772,-0.894310534000397,0.387115389108658,0.224388927221298 ,-0.92325884103775,0.354574739933014,0.14788456261158,-0.961451351642609,0.0904500335454941,0.259673148393631 ,-0.905462920665741,0.186479464173317,0.38126415014267,-0.924078285694122,0.348852246999741,0.156145602464676 ,-0.746822059154511,0.530121624469757,0.401531904935837,-0.791133582592011,0.342469930648804,0.506776034832001 ,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.746822059154511,0.530121624469757,0.401531904935837 ,-0.281799405813217,0.728858828544617,0.62398225069046,-0.30160591006279,0.609322607517242,0.733321130275726 ,-0.791133582592011,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726 ,-0.281799405813217,0.728858828544617,0.62398225069046,0.245548591017723,0.755104839801788,0.60788369178772,0.249163061380386 ,0.650838553905487,0.717165887355804,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.982547223567963 ,-0.0194754991680384,0.184990763664246,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.96901535987854 ,0.136607885360718,0.205785036087036,-0.96901535987854,0.136607885360718,0.205785036087036,-0.900646984577179 ,-0.388538599014282,0.194609254598618,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.975419044494629 ,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.832433760166168 ,0.553277373313904,0.0306292269378901,-0.924078285694122,0.348852246999741,0.156145602464676,-0.92325884103775 ,0.354574739933014,0.14788456261158,-0.92325884103775,0.354574739933014,0.14788456261158,-0.924078285694122,0.348852246999741 ,0.156145602464676,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.961451351642609,0.0904500335454941 ,0.259673148393631,0.929125070571899,0.342706054449081,-0.138849601149559,0.77119505405426,0.619837582111359 ,-0.14511901140213,0.719026386737823,0.657702744007111,-0.224562168121338,0.915838539600372,0.379799336194992 ,-0.13035449385643,0.915838539600372,0.379799336194992,-0.13035449385643,0.719026386737823,0.657702744007111 ,-0.224562168121338,0.613492965698242,0.780812084674835,-0.118147522211075,0.805536329746246,0.592336535453796 ,0.01577203348279,0.805536329746246,0.592336535453796,0.01577203348279,0.613492965698242,0.780812084674835,-0.118147522211075 ,0.432487845420837,0.898411989212036,0.076224185526371,0.544086754322052,0.801831126213074,0.247055530548096 ,0.544086754322052,0.801831126213074,0.247055530548096,0.432487845420837,0.898411989212036,0.076224185526371 ,0.147313222289085,0.957895278930664,0.246445551514626,0.199096158146858,0.874440908432007,0.442395567893982 ,0.929125070571899,0.342706054449081,-0.138849601149559,0.945276021957397,0.311139762401581,-0.0982102602720261 ,0.861002922058105,0.508596777915955,-0.00179798470344394,0.77119505405426,0.619837582111359,-0.14511901140213 ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.958563983440399,0.284184783697128,-0.0198514685034752 ,0.932084560394287,0.354396849870682,0.074974812567234,0.861002922058105,0.508596777915955,-0.00179798470344394 ,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.867211997509003,0.495593756437302,0.048272043466568 ,-0.975419044494629,0.160562738776207,0.150921478867531,-0.949690282344818,0.234604343771935,0.20748282968998 ,-0.654044389724731,0.736575484275818,0.172286108136177,-0.832433760166168,0.553277373313904,0.0306292269378901 ,-0.949690282344818,0.234604343771935,0.20748282968998,-0.75787228345871,0.513580441474915,0.402324169874191 ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.654044389724731,0.736575484275818,0.172286108136177 ,-0.75787228345871,0.513580441474915,0.402324169874191,-0.302653342485428,0.791418969631195,0.531090319156647 ,0.199096158146858,0.874440908432007,0.442395567893982,0.147313222289085,0.957895278930664,0.246445551514626 ,-0.284113943576813,0.914205729961395,0.288975954055786,-0.302653342485428,0.791418969631195,0.531090319156647 ,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036 ,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568 ,-0.905462920665741,0.186479464173317,0.38126415014267,-0.947061836719513,0.0981702655553818,0.305673837661743 ,-0.96901535987854,0.136607885360718,0.205785036087036,-0.894310534000397,0.387115389108658,0.224388927221298 ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.96403831243515,-0.105999603867531,-0.243709176778793 ,0.971478760242462,0.187488585710526,-0.145179286599159,0.958563983440399,0.284184783697128,-0.0198514685034752 ,0.980856955051422,0.194233074784279,-0.0138955730944872,0.958563983440399,0.284184783697128,-0.0198514685034752 ,0.971478760242462,0.187488585710526,-0.145179286599159,0.886798441410065,0.179963767528534,-0.42567777633667 ,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.977060735225677,-0.163681700825691,0.136237412691116 ,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.886481404304504,0.177040040493011,-0.427559942007065 ,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.78797847032547,0.121628470718861,-0.603569746017456 ,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.964801907539368,-0.255219370126724,0.0634067133069038 ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.571970641613007,0.0312801524996758,-0.819677472114563 ,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.901520729064941,-0.411150813102722,-0.134964138269424 ,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.266431421041489,-0.0175891108810902,-0.963693380355835 ,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.666584610939026,-0.599533259868622,-0.442972719669342 ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.895804762840271,0.195414647459984,-0.399182796478271 ,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.83249443769455,-0.151082009077072,-0.53303587436676 ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.536711633205414,0.454791337251663,-0.710707724094391 ,0.533322811126709,0.362958133220673,-0.764086484909058,0.954547107219696,-0.0926554873585701,-0.283292710781097 ,0.416003495454788,0.214769378304482,-0.883637487888336,0.807687342166901,-0.332686930894852,-0.486785978078842 ,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.533322811126709,0.362958133220673,-0.764086484909058 ,0.121472798287869,0.0532773099839687,-0.991163909435272,0.351745188236237,-0.619295418262482,-0.701960504055023 ,0.807687342166901,-0.332686930894852,-0.486785978078842,0.416003495454788,0.214769378304482,-0.883637487888336 ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.241922900080681,-0.699652969837189,-0.672279000282288 ,0.351745188236237,-0.619295418262482,-0.701960504055023,0.121472798287869,0.0532773099839687,-0.991163909435272 ,0.185644999146461,0.47002848982811,-0.862907350063324,0.536711633205414,0.454791337251663,-0.710707724094391 ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.540148317813873,0.0994915440678597,-0.83566814661026 ,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.977060735225677,-0.163681700825691,0.136237412691116 ,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.552583634853363,-0.801110625267029,0.229941442608833 ,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.964801907539368,-0.255219370126724,0.0634067133069038 ,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842 ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.901520729064941,-0.411150813102722,-0.134964138269424 ,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.292398482561111,-0.949960827827454,0.109898090362549 ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.241922900080681,-0.699652969837189,-0.672279000282288 ,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.292398482561111,-0.949960827827454,0.109898090362549 ,-0.356896013021469,-0.932965517044067,0.0469101071357727,-0.598017156124115,-0.77135694026947,0.217678472399712 ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.682462215423584,-0.715959310531616,-0.147131323814392 ,0.704459071159363,-0.709129512310028,0.0295416153967381,0.980031192302704,0.0460809320211411,-0.19343064725399 ,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.626312613487244,-0.775286138057709,0.0816323310136795 ,0.807687342166901,-0.332686930894852,-0.486785978078842,0.515369713306427,-0.855204403400421,0.0549497418105602 ,0.626312613487244,-0.775286138057709,0.0816323310136795,0.954547107219696,-0.0926554873585701,-0.283292710781097 ,0.351745188236237,-0.619295418262482,-0.701960504055023,0.270284384489059,-0.962110817432404,-0.0359043404459953 ,0.515369713306427,-0.855204403400421,0.0549497418105602,0.807687342166901,-0.332686930894852,-0.486785978078842 ,0.351745188236237,-0.619295418262482,-0.701960504055023,-0.241922900080681,-0.699652969837189,-0.672279000282288 ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,0.270284384489059,-0.962110817432404,-0.0359043404459953 ,0.980031192302704,0.0460809320211411,-0.19343064725399,0.704459071159363,-0.709129512310028,0.0295416153967381 ,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.699954152107239,-0.637360692024231,-0.322235226631165 ,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.886481404304504,0.177040040493011,-0.427559942007065 ,0.0356707610189915,0.684221625328064,-0.728401243686676,0.0514887571334839,0.63036984205246,-0.774585545063019 ,-0.78797847032547,0.121628470718861,-0.603569746017456,0.085333488881588,0.746294617652893,-0.66012316942215 ,0.0356707610189915,0.684221625328064,-0.728401243686676,-0.886481404304504,0.177040040493011,-0.427559942007065 ,-0.571970641613007,0.0312801524996758,-0.819677472114563,0.0719250813126564,0.846214592456818,-0.527965605258942 ,0.085333488881588,0.746294617652893,-0.66012316942215,-0.78797847032547,0.121628470718861,-0.603569746017456 ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.0788121968507767,0.901525676250458,-0.425488084554672 ,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.571970641613007,0.0312801524996758,-0.819677472114563 ,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.83249443769455,-0.151082009077072,-0.53303587436676 ,0.207446232438087,0.064531996846199,-0.976115584373474,0.337681114673615,-0.494108825922012,-0.801141619682312 ,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.895804762840271,0.195414647459984,-0.399182796478271 ,0.0514887571334839,0.63036984205246,-0.774585545063019,0.13019335269928,0.440476208925247,-0.88827383518219 ,0.533322811126709,0.362958133220673,-0.764086484909058,0.536711633205414,0.454791337251663,-0.710707724094391 ,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.541287541389465,0.6014044880867,-0.587639689445496 ,0.416003495454788,0.214769378304482,-0.883637487888336,0.533322811126709,0.362958133220673,-0.764086484909058 ,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.492161601781845,0.702208459377289,-0.514470815658569 ,0.121472798287869,0.0532773099839687,-0.991163909435272,0.416003495454788,0.214769378304482,-0.883637487888336 ,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.31574621796608,0.845299959182739,-0.431013107299805 ,-0.266431421041489,-0.0175891108810902,-0.963693380355835,0.121472798287869,0.0532773099839687,-0.991163909435272 ,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.0788121968507767,0.901525676250458,-0.425488084554672 ,0.536711633205414,0.454791337251663,-0.710707724094391,0.185644999146461,0.47002848982811,-0.862907350063324 ,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.570469677448273,0.551836013793945,-0.608310282230377 ,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.643028497695923,0.0408206768333912,-0.764753520488739 ,-0.622039020061493,0.415303826332092,-0.663769662380219,0.185644999146461,0.47002848982811,-0.862907350063324 ,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082 ,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.643028497695923,0.0408206768333912,-0.764753520488739 ,-0.598017156124115,-0.77135694026947,0.217678472399712,0.50339812040329,-0.851142287254334,0.148819401860237 ,0.54979944229126,-0.796860158443451,0.250468462705612,-0.552583634853363,-0.801110625267029,0.229941442608833 ,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.552583634853363,-0.801110625267029,0.229941442608833 ,0.54979944229126,-0.796860158443451,0.250468462705612,0.599540710449219,-0.652058064937592,0.464081108570099 ,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.446152657270432,-0.869331896305084,0.212626039981842 ,0.599540710449219,-0.652058064937592,0.464081108570099,0.502160549163818,-0.455849409103394,0.734871506690979 ,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.292398482561111,-0.949960827827454,0.109898090362549 ,0.502160549163818,-0.455849409103394,0.734871506690979,0.272433400154114,-0.386231541633606,0.88125205039978 ,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.337681114673615,-0.494108825922012,-0.801141619682312 ,0.442046135663986,-0.813259184360504,-0.378423988819122,-0.682462215423584,-0.715959310531616,-0.147131323814392 ,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.49251726269722,-0.867295384407043,-0.0722877904772758 ,0.50339812040329,-0.851142287254334,0.148819401860237,-0.598017156124115,-0.77135694026947,0.217678472399712 ,0.626312613487244,-0.775286138057709,0.0816323310136795,-0.426157087087631,-0.793524503707886,0.434406518936157 ,-0.375613301992416,-0.88097071647644,0.287758976221085,0.704459071159363,-0.709129512310028,0.0295416153967381 ,0.515369713306427,-0.855204403400421,0.0549497418105602,-0.342554897069931,-0.642882287502289,0.685097455978394 ,-0.426157087087631,-0.793524503707886,0.434406518936157,0.626312613487244,-0.775286138057709,0.0816323310136795 ,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.0474530011415482,-0.461726039648056,0.885752379894257 ,-0.342554897069931,-0.642882287502289,0.685097455978394,0.515369713306427,-0.855204403400421,0.0549497418105602 ,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.058585699647665,-0.997730076313019,-0.0332027748227119 ,0.272433400154114,-0.386231541633606,0.88125205039978,-0.0474530011415482,-0.461726039648056,0.885752379894257 ,0.704459071159363,-0.709129512310028,0.0295416153967381,-0.375613301992416,-0.88097071647644,0.287758976221085 ,-0.376423895359039,-0.918147921562195,0.123731203377247,0.456256777048111,-0.889221549034119,-0.0333885848522186 ,0.456256777048111,-0.889221549034119,-0.0333885848522186,-0.376423895359039,-0.918147921562195,0.123731203377247 ,-0.438194215297699,-0.882848083972931,-0.169011920690537,0.699954152107239,-0.637360692024231,-0.322235226631165 ,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.438194215297699,-0.882848083972931,-0.169011920690537 ,-0.564797222614288,-0.561120748519897,-0.60510128736496,0.639358460903168,-0.369733929634094,-0.674179136753082 ,-0.83249443769455,-0.151082009077072,-0.53303587436676,-0.693842947483063,0.221263691782951,-0.685291409492493 ,0.13019335269928,0.440476208925247,-0.88827383518219,0.207446232438087,0.064531996846199,-0.976115584373474 ,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.442046135663986,-0.813259184360504,-0.378423988819122 ,0.49251726269722,-0.867295384407043,-0.0722877904772758,-0.356896013021469,-0.932965517044067,0.0469101071357727 ,0.0514887571334839,0.63036984205246,-0.774585545063019,0.0356707610189915,0.684221625328064,-0.728401243686676 ,0.739788413047791,0.545380234718323,-0.394047558307648,0.761568784713745,0.476597040891647,-0.439167678356171 ,0.739788413047791,0.545380234718323,-0.394047558307648,0.0356707610189915,0.684221625328064,-0.728401243686676 ,0.085333488881588,0.746294617652893,-0.66012316942215,0.704140186309814,0.675374627113342,-0.21921606361866 ,0.085333488881588,0.746294617652893,-0.66012316942215,0.0719250813126564,0.846214592456818,-0.527965605258942 ,0.521775901317596,0.845166563987732,0.11594570428133,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596 ,0.845166563987732,0.11594570428133,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.0788121968507767 ,0.901525676250458,-0.425488084554672,0.117615856230259,0.926379323005676,0.357753992080688,0.337681114673615 ,-0.494108825922012,-0.801141619682312,0.207446232438087,0.064531996846199,-0.976115584373474,0.886798441410065 ,0.179963767528534,-0.42567777633667,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.80961799621582 ,0.346472293138504,-0.473788559436798,0.13019335269928,0.440476208925247,-0.88827383518219,0.0514887571334839 ,0.63036984205246,-0.774585545063019,0.761568784713745,0.476597040891647,-0.439167678356171,-0.541287541389465 ,0.6014044880867,-0.587639689445496,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.966457307338715 ,0.233678236603737,-0.106558948755264,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.492161601781845 ,0.702208459377289,-0.514470815658569,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.935190379619598 ,0.351279079914093,-0.0449664331972599,-0.804790914058685,0.576125860214233,0.142795518040657,-0.31574621796608 ,0.845299959182739,-0.431013107299805,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.804790914058685 ,0.576125860214233,0.142795518040657,-0.422390103340149,0.834542691707611,0.353730261325836,-0.0788121968507767 ,0.901525676250458,-0.425488084554672,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.422390103340149 ,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.570469677448273 ,0.551836013793945,-0.608310282230377,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.982214033603668 ,0.1461341381073,-0.117899678647518,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.622039020061493 ,0.415303826332092,-0.663769662380219,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.997464418411255 ,-0.00418218318372965,-0.0710434541106224,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255 ,-0.00418218318372965,-0.0710434541106224,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.564797222614288 ,-0.561120748519897,-0.60510128736496,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.97841340303421 ,-0.195419549942017,0.0672191828489304,0.54979944229126,-0.796860158443451,0.250468462705612,0.50339812040329 ,-0.851142287254334,0.148819401860237,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.952633321285248 ,0.0169839523732662,0.303646683692932,0.599540710449219,-0.652058064937592,0.464081108570099,0.54979944229126 ,-0.796860158443451,0.250468462705612,0.97841340303421,-0.195419549942017,0.0672191828489304,0.707790434360504 ,0.336065679788589,0.621363461017609,0.502160549163818,-0.455849409103394,0.734871506690979,0.599540710449219 ,-0.652058064937592,0.464081108570099,0.952633321285248,0.0169839523732662,0.303646683692932,0.272433400154114 ,-0.386231541633606,0.88125205039978,0.502160549163818,-0.455849409103394,0.734871506690979,0.707790434360504 ,0.336065679788589,0.621363461017609,0.29783770442009,0.470342755317688,0.830704748630524,0.96403831243515,-0.105999603867531 ,-0.243709176778793,0.442046135663986,-0.813259184360504,-0.378423988819122,0.337681114673615,-0.494108825922012 ,-0.801141619682312,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.50339812040329,-0.851142287254334 ,0.148819401860237,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.965696275234222,-0.217926412820816 ,-0.141204699873924,0.971711337566376,-0.234630659222603,-0.0269353967159987,-0.375613301992416,-0.88097071647644 ,0.287758976221085,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.854402720928192,-0.324486047029495 ,0.405838370323181,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495 ,0.405838370323181,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.342554897069931,-0.642882287502289 ,0.685097455978394,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.342554897069931,-0.642882287502289 ,0.685097455978394,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.24900957942009,0.325979948043823 ,0.911993026733398,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.0474530011415482,-0.461726039648056 ,0.885752379894257,0.272433400154114,-0.386231541633606,0.88125205039978,0.29783770442009,0.470342755317688,0.830704748630524 ,-0.24900957942009,0.325979948043823,0.911993026733398,-0.900646984577179,-0.388538599014282,0.194609254598618 ,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.375613301992416,-0.88097071647644,0.287758976221085 ,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.951126158237457,-0.290162175893784,0.105663880705833 ,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.376423895359039,-0.918147921562195,0.123731203377247 ,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.564797222614288,-0.561120748519897,-0.60510128736496 ,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.951126158237457,-0.290162175893784,0.105663880705833 ,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.886798441410065,0.179963767528534,-0.42567777633667 ,0.207446232438087,0.064531996846199,-0.976115584373474,0.13019335269928,0.440476208925247,-0.88827383518219 ,0.80961799621582,0.346472293138504,-0.473788559436798,0.49251726269722,-0.867295384407043,-0.0722877904772758 ,0.442046135663986,-0.813259184360504,-0.378423988819122,0.96403831243515,-0.105999603867531,-0.243709176778793 ,0.965696275234222,-0.217926412820816,-0.141204699873924,0.962221920490265,0.251950919628143,-0.103197492659092 ,0.872992157936096,0.465613692998886,-0.145219102501869,0.866116344928741,0.494782358407974,-0.0709430351853371 ,0.958588719367981,0.282198518514633,-0.0383618138730526,0.958588719367981,0.282198518514633,-0.0383618138730526 ,0.932084560394287,0.354396849870682,0.074974812567234,0.952685952186584,0.144979014992714,0.267152786254883 ,0.96112471818924,0.0701063796877861,0.267066121101379,0.861002922058105,0.508596777915955,-0.00179798470344394 ,0.932084560394287,0.354396849870682,0.074974812567234,0.958588719367981,0.282198518514633,-0.0383618138730526 ,0.866116344928741,0.494782358407974,-0.0709430351853371,0.971478760242462,0.187488585710526,-0.145179286599159 ,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.886798441410065,0.179963767528534,-0.42567777633667 ,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.819937765598297,-0.00659000594168901,0.572414755821228 ,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.942662239074707,-0.0168870743364096,0.333320766687393 ,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224 ,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.997464418411255,-0.00418218318372965,-0.0710434541106224 ,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.971478760242462,0.187488585710526,-0.145179286599159 ,0.96403831243515,-0.105999603867531,-0.243709176778793,0.905734241008759,-0.0415820777416229,-0.421801388263702 ,-0.867211997509003,0.495593756437302,0.048272043466568,-0.92325884103775,0.354574739933014,0.14788456261158 ,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036 ,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.900646984577179,-0.388538599014282,0.194609254598618 ,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.972556948661804,-0.221615761518478,-0.070847675204277 ,-0.951126158237457,-0.290162175893784,0.105663880705833,0.886798441410065,0.179963767528534,-0.42567777633667 ,0.80961799621582,0.346472293138504,-0.473788559436798,0.980856955051422,0.194233074784279,-0.0138955730944872 ,0.945276021957397,0.311139762401581,-0.0982102602720261,0.965696275234222,-0.217926412820816,-0.141204699873924 ,0.96403831243515,-0.105999603867531,-0.243709176778793,0.980031192302704,0.0460809320211411,-0.19343064725399 ,0.639358460903168,-0.369733929634094,-0.674179136753082,0.540148317813873,0.0994915440678597,-0.83566814661026 ,0.639358460903168,-0.369733929634094,-0.674179136753082,0.980031192302704,0.0460809320211411,-0.19343064725399 ,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.682462215423584,-0.715959310531616,-0.147131323814392 ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.777539730072021,-0.479580640792847,-0.406736254692078 ,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.83249443769455,-0.151082009077072,-0.53303587436676 ,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.924136519432068,-0.0825216323137283,0.373044043779373 ,0.96112471818924,0.0701063796877861,0.267066121101379,0.952685952186584,0.144979014992714,0.267152786254883 ,0.866116344928741,0.494782358407974,-0.0709430351853371,0.77119505405426,0.619837582111359,-0.14511901140213 ,0.861002922058105,0.508596777915955,-0.00179798470344394,0.220404133200645,0.441583395004272,-0.869727611541748 ,0.345912396907806,0.450473189353943,-0.823054373264313,0.499523967504501,-0.410259157419205,-0.762996256351471 ,0.291362255811691,-0.415095657110214,-0.861860573291779,0.345912396907806,0.450473189353943,-0.823054373264313 ,0.596955060958862,0.477591276168823,-0.644632637500763,0.719791650772095,-0.389199703931808,-0.574824810028076 ,0.499523967504501,-0.410259157419205,-0.762996256351471,0.596955060958862,0.477591276168823,-0.644632637500763 ,0.801617920398712,0.503292322158813,-0.322653979063034,0.89153379201889,-0.356688916683197,-0.279178351163864 ,0.719791650772095,-0.389199703931808,-0.574824810028076,0.801617920398712,0.503292322158813,-0.322653979063034 ,0.856007039546967,0.515455603599548,0.039463996887207,0.93902975320816,-0.33998966217041,0.0512847155332565 ,0.89153379201889,-0.356688916683197,-0.279178351163864,0.531617403030396,0.581484317779541,-0.615840017795563 ,0.596955060958862,0.477591276168823,-0.644632637500763,0.345912396907806,0.450473189353943,-0.823054373264313 ,0.28382807970047,0.520071446895599,-0.805585086345673,0.709659159183502,0.635841906070709,-0.303461521863937 ,0.801617920398712,0.503292322158813,-0.322653979063034,0.596955060958862,0.477591276168823,-0.644632637500763 ,0.531617403030396,0.581484317779541,-0.615840017795563,0.755816400051117,0.653946995735168,0.0330889187753201 ,0.856007039546967,0.515455603599548,0.039463996887207,0.801617920398712,0.503292322158813,-0.322653979063034 ,0.709659159183502,0.635841906070709,-0.303461521863937,0.238343358039856,0.387237757444382,-0.890639841556549 ,0.568823277950287,-0.359092324972153,-0.739927589893341,0.49908322095871,-0.0296989660710096,-0.866044998168945 ,0.249522879719734,0.613189935684204,-0.749490737915039,0.528623342514038,0.140339240431786,-0.837175190448761 ,0.64734548330307,0.346664369106293,-0.678798675537109,0.531617403030396,0.581484317779541,-0.615840017795563 ,0.28382807970047,0.520071446895599,-0.805585086345673,0.64734548330307,0.346664369106293,-0.678798675537109 ,0.815433382987976,0.474987715482712,-0.330839991569519,0.709659159183502,0.635841906070709,-0.303461521863937 ,0.531617403030396,0.581484317779541,-0.615840017795563,0.815433382987976,0.474987715482712,-0.330839991569519 ,0.855934202671051,0.515577018260956,0.0394590422511101,0.755816400051117,0.653946995735168,0.0330889187753201 ,0.709659159183502,0.635841906070709,-0.303461521863937,0.495009750127792,0.455467730760574,-0.739942193031311 ,0.532988548278809,0.496355772018433,-0.685240209102631,0.64734548330307,0.346664369106293,-0.678798675537109 ,0.528623342514038,0.140339240431786,-0.837175190448761,0.532988548278809,0.496355772018433,-0.685240209102631 ,0.672445952892303,0.657832205295563,-0.339224457740784,0.815433382987976,0.474987715482712,-0.330839991569519 ,0.64734548330307,0.346664369106293,-0.678798675537109,0.672445952892303,0.657832205295563,-0.339224457740784 ,0.702748596668243,0.710811495780945,0.0298582091927528,0.855934202671051,0.515577018260956,0.0394590422511101 ,0.815433382987976,0.474987715482712,-0.330839991569519,0.0635582432150841,-0.298091143369675,-0.952418982982636 ,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.568823277950287,-0.359092324972153,-0.739927589893341 ,0.238343358039856,0.387237757444382,-0.890639841556549,0.291362255811691,-0.415095657110214,-0.861860573291779 ,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.238343358039856,0.387237757444382,-0.890639841556549 ,0.220404133200645,0.441583395004272,-0.869727611541748,0.28382807970047,0.520071446895599,-0.805585086345673 ,0.345912396907806,0.450473189353943,-0.823054373264313,0.220404133200645,0.441583395004272,-0.869727611541748 ,0.249522879719734,0.613189935684204,-0.749490737915039,0.49908322095871,-0.0296989660710096,-0.866044998168945 ,0.528623342514038,0.140339240431786,-0.837175190448761,0.28382807970047,0.520071446895599,-0.805585086345673 ,0.249522879719734,0.613189935684204,-0.749490737915039,0.531679213047028,-0.524689078330994,-0.664844751358032 ,0.122271165251732,0.0883934944868088,-0.988552689552307,0.449340283870697,0.427763402462006,-0.784290611743927 ,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.491910099983215,0.172478601336479,-0.853390634059906 ,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.366778641939163,0.448393434286118,-0.815117657184601 ,0.497087746858597,0.30063185095787,-0.813955903053284,-0.358708292245865,0.679778933525085,-0.639710068702698 ,0.511581122875214,0.562213659286499,-0.64976966381073,0.497087746858597,0.30063185095787,-0.813955903053284 ,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.345371842384338,0.869300365447998,-0.353603094816208 ,0.516282200813293,0.786112189292908,-0.339823931455612,0.511581122875214,0.562213659286499,-0.64976966381073 ,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.349057763814926,0.936734259128571,-0.0262219123542309 ,0.506098926067352,0.862278997898102,0.0184080004692078,0.516282200813293,0.786112189292908,-0.339823931455612 ,-0.345371842384338,0.869300365447998,-0.353603094816208,0.614878416061401,0.498528629541397,-0.611059486865997 ,0.567450106143951,0.238805204629898,-0.788018047809601,0.497087746858597,0.30063185095787,-0.813955903053284 ,0.511581122875214,0.562213659286499,-0.64976966381073,0.64806866645813,0.696889817714691,-0.307167142629623 ,0.614878416061401,0.498528629541397,-0.611059486865997,0.511581122875214,0.562213659286499,-0.64976966381073 ,0.516282200813293,0.786112189292908,-0.339823931455612,0.645423412322998,0.763367056846619,0.0264460854232311 ,0.64806866645813,0.696889817714691,-0.307167142629623,0.516282200813293,0.786112189292908,-0.339823931455612 ,0.506098926067352,0.862278997898102,0.0184080004692078,0.0124354995787144,0.454871088266373,-0.890470445156097 ,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432 ,0.655558884143829,0.209355428814888,-0.725543141365051,0.614878416061401,0.498528629541397,-0.611059486865997 ,0.383456945419312,0.608026206493378,-0.695172548294067,0.186724796891212,0.483126193284988,-0.855408072471619 ,0.567450106143951,0.238805204629898,-0.788018047809601,0.64806866645813,0.696889817714691,-0.307167142629623 ,0.488431423902512,0.799107253551483,-0.350517243146896,0.383456945419312,0.608026206493378,-0.695172548294067 ,0.614878416061401,0.498528629541397,-0.611059486865997,0.645423412322998,0.763367056846619,0.0264460854232311 ,0.506222486495972,0.862206280231476,0.0184154994785786,0.488431423902512,0.799107253551483,-0.350517243146896 ,0.64806866645813,0.696889817714691,-0.307167142629623,0.383456945419312,0.608026206493378,-0.695172548294067 ,0.532988548278809,0.496355772018433,-0.685240209102631,0.495009750127792,0.455467730760574,-0.739942193031311 ,0.186724796891212,0.483126193284988,-0.855408072471619,0.488431423902512,0.799107253551483,-0.350517243146896 ,0.672445952892303,0.657832205295563,-0.339224457740784,0.532988548278809,0.496355772018433,-0.685240209102631 ,0.383456945419312,0.608026206493378,-0.695172548294067,0.506222486495972,0.862206280231476,0.0184154994785786 ,0.702748596668243,0.710811495780945,0.0298582091927528,0.672445952892303,0.657832205295563,-0.339224457740784 ,0.488431423902512,0.799107253551483,-0.350517243146896,-0.57543957233429,0.0254972595721483,-0.817446708679199 ,-0.559110403060913,0.469017684459686,-0.683679699897766,0.122271165251732,0.0883934944868088,-0.988552689552307 ,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.286835759878159,0.0198002532124519,-0.957775115966797 ,-0.128493547439575,-0.169293120503426,-0.977153658866882,0.368004411458969,0.153596758842468,-0.917050004005432 ,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432 ,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.36416107416153,0.234637573361397,-0.901294589042664 ,0.491910099983215,0.172478601336479,-0.853390634059906,0.567450106143951,0.238805204629898,-0.788018047809601 ,0.655558884143829,0.209355428814888,-0.725543141365051,0.491910099983215,0.172478601336479,-0.853390634059906 ,0.497087746858597,0.30063185095787,-0.813955903053284,0.567450106143951,0.238805204629898,-0.788018047809601 ,0.186724796891212,0.483126193284988,-0.855408072471619,0.0124354995787144,0.454871088266373,-0.890470445156097 ,0.655558884143829,0.209355428814888,-0.725543141365051,0.449340283870697,0.427763402462006,-0.784290611743927 ,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.559110403060913,0.469017684459686,-0.683679699897766 ,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.143515676259995,-0.203022330999374,-0.968599617481232 ,0.508907198905945,-0.553594052791595,-0.659201860427856,-0.0507657080888748,-0.284880071878433,-0.957217931747437 ,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.143515676259995,-0.203022330999374,-0.968599617481232 ,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.128973305225372,-0.305629998445511,-0.943374931812286 ,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.623004376888275,-0.00750839477404952,-0.782182335853577 ,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.566836953163147,-0.543319463729858,-0.619273662567139 ,0.531679213047028,-0.524689078330994,-0.664844751358032,0.623004376888275,-0.00750839477404952,-0.782182335853577 ,0.449340283870697,0.427763402462006,-0.784290611743927,0.614906549453735,0.590024650096893,-0.523221671581268 ,0.755403220653534,-0.0362841933965683,-0.654254853725433,-0.0200252141803503,0.64056408405304,-0.767643511295319 ,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.614906549453735,0.590024650096893,-0.523221671581268 ,0.449340283870697,0.427763402462006,-0.784290611743927,-0.0200252141803503,0.64056408405304,-0.767643511295319 ,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.619978547096252,0.568114936351776,-0.541176497936249 ,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.57543957233429,0.0254972595721483,-0.817446708679199 ,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.348750114440918,0.540946424007416,-0.765343248844147 ,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.57543957233429,0.0254972595721483,-0.817446708679199 ,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.143515676259995,-0.203022330999374,-0.968599617481232 ,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.627847135066986,-0.674039661884308,-0.389202296733856 ,0.531679213047028,-0.524689078330994,-0.664844751358032,0.568823277950287,-0.359092324972153,-0.739927589893341 ,0.508907198905945,-0.553594052791595,-0.659201860427856,0.755403220653534,-0.0362841933965683,-0.654254853725433 ,0.528623342514038,0.140339240431786,-0.837175190448761,0.49908322095871,-0.0296989660710096,-0.866044998168945 ,0.566836953163147,-0.543319463729858,-0.619273662567139,0.495009750127792,0.455467730760574,-0.739942193031311 ,0.528623342514038,0.140339240431786,-0.837175190448761,0.755403220653534,-0.0362841933965683,-0.654254853725433 ,0.614906549453735,0.590024650096893,-0.523221671581268,0.0124354995787144,0.454871088266373,-0.890470445156097 ,0.186724796891212,0.483126193284988,-0.855408072471619,-0.0195061750710011,0.763988316059113,-0.644935190677643 ,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643 ,0.186724796891212,0.483126193284988,-0.855408072471619,0.495009750127792,0.455467730760574,-0.739942193031311 ,0.614906549453735,0.590024650096893,-0.523221671581268,0.130445152521133,0.457035809755325,0.879830837249756 ,0.20105354487896,-0.399605453014374,0.894367337226868,0.418255031108856,-0.396321922540665,0.817307531833649 ,0.260075956583023,0.465220808982849,0.84612649679184,0.656683743000031,-0.378395289182663,0.652367532253265 ,0.528121531009674,0.489418476819992,0.693943202495575,0.260075956583023,0.465220808982849,0.84612649679184,0.418255031108856 ,-0.396321922540665,0.817307531833649,0.857872784137726,-0.350929707288742,0.375369966030121,0.76475590467453 ,0.509621679782867,0.39425140619278,0.528121531009674,0.489418476819992,0.693943202495575,0.656683743000031,-0.378395289182663 ,0.652367532253265,0.93902975320816,-0.33998966217041,0.0512847155332565,0.856007039546967,0.515455603599548 ,0.039463996887207,0.76475590467453,0.509621679782867,0.39425140619278,0.857872784137726,-0.350929707288742,0.375369966030121 ,0.466174960136414,0.592728853225708,0.656774938106537,0.200175419449806,0.534444093704224,0.821157276630402 ,0.260075956583023,0.465220808982849,0.84612649679184,0.528121531009674,0.489418476819992,0.693943202495575,0.675370097160339 ,0.64173036813736,0.363397032022476,0.466174960136414,0.592728853225708,0.656774938106537,0.528121531009674,0.489418476819992 ,0.693943202495575,0.76475590467453,0.509621679782867,0.39425140619278,0.755816400051117,0.653946995735168,0.0330889187753201 ,0.675370097160339,0.64173036813736,0.363397032022476,0.76475590467453,0.509621679782867,0.39425140619278,0.856007039546967 ,0.515455603599548,0.039463996887207,0.407602995634079,-0.0139898108318448,0.913052082061768,0.505278706550598 ,-0.368258208036423,0.78043532371521,0.111461341381073,0.330251514911652,0.937288820743561,0.17189884185791,0.626526415348053 ,0.760207533836365,0.466174960136414,0.592728853225708,0.656774938106537,0.574624836444855,0.359153598546982 ,0.735401213169098,0.440102815628052,0.155542016029358,0.884373366832733,0.200175419449806,0.534444093704224 ,0.821157276630402,0.675370097160339,0.64173036813736,0.363397032022476,0.777630627155304,0.481480687856674,0.404310435056686 ,0.574624836444855,0.359153598546982,0.735401213169098,0.466174960136414,0.592728853225708,0.656774938106537 ,0.755816400051117,0.653946995735168,0.0330889187753201,0.855934202671051,0.515577018260956,0.0394590422511101 ,0.777630627155304,0.481480687856674,0.404310435056686,0.675370097160339,0.64173036813736,0.363397032022476,0.574624836444855 ,0.359153598546982,0.735401213169098,0.460348039865494,0.508830428123474,0.727441608905792,0.416925370693207 ,0.468881458044052,0.778667747974396,0.440102815628052,0.155542016029358,0.884373366832733,0.777630627155304 ,0.481480687856674,0.404310435056686,0.634704053401947,0.664313793182373,0.394763141870499,0.460348039865494 ,0.508830428123474,0.727441608905792,0.574624836444855,0.359153598546982,0.735401213169098,0.855934202671051 ,0.515577018260956,0.0394590422511101,0.702748596668243,0.710811495780945,0.0298582091927528,0.634704053401947 ,0.664313793182373,0.394763141870499,0.777630627155304,0.481480687856674,0.404310435056686,-0.00422305008396506 ,-0.606499910354614,0.795072376728058,0.434695482254028,-0.572132110595703,0.695488810539246,0.014976161532104 ,0.0756698846817017,0.997020423412323,-0.341256439685822,-0.287500321865082,0.894923210144043,0.111461341381073 ,0.330251514911652,0.937288820743561,0.505278706550598,-0.368258208036423,0.78043532371521,-0.0179628469049931 ,-0.326483070850372,0.945032358169556,-0.208328202366829,-0.172579661011696,0.962712645530701,0.20105354487896 ,-0.399605453014374,0.894367337226868,0.130445152521133,0.457035809755325,0.879830837249756,0.111461341381073 ,0.330251514911652,0.937288820743561,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.200175419449806 ,0.534444093704224,0.821157276630402,0.17189884185791,0.626526415348053,0.760207533836365,0.130445152521133,0.457035809755325 ,0.879830837249756,0.260075956583023,0.465220808982849,0.84612649679184,0.200175419449806,0.534444093704224,0.821157276630402 ,0.440102815628052,0.155542016029358,0.884373366832733,0.407602995634079,-0.0139898108318448,0.913052082061768 ,0.17189884185791,0.626526415348053,0.760207533836365,0.368747025728226,0.423022657632828,0.827694058418274,0.014976161532104 ,0.0756698846817017,0.997020423412323,0.434695482254028,-0.572132110595703,0.695488810539246,0.589323878288269 ,-0.0393206179141998,0.806939482688904,0.401947200298309,0.187930881977081,0.896169900894165,0.411258369684219 ,0.315371930599213,0.855223417282104,-0.448035717010498,0.462348014116287,0.765178620815277,-0.454463303089142 ,0.250147342681885,0.85492068529129,0.411258369684219,0.315371930599213,0.855223417282104,0.442751318216324,0.574035108089447 ,0.688806891441345,-0.42182531952858,0.69061017036438,0.587470054626465,-0.448035717010498,0.462348014116287 ,0.765178620815277,0.442751318216324,0.574035108089447,0.688806891441345,0.479419261217117,0.792443513870239 ,0.377081513404846,-0.37904354929924,0.875075936317444,0.300945341587067,-0.42182531952858,0.69061017036438,0.587470054626465 ,0.479419261217117,0.792443513870239,0.377081513404846,0.506098926067352,0.862278997898102,0.0184080004692078 ,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.37904354929924,0.875075936317444,0.300945341587067 ,0.549417436122894,0.509770929813385,0.662022709846497,0.442751318216324,0.574035108089447,0.688806891441345 ,0.411258369684219,0.315371930599213,0.855223417282104,0.483853906393051,0.253162741661072,0.83773148059845,0.613779723644257 ,0.702778577804565,0.359689712524414,0.479419261217117,0.792443513870239,0.377081513404846,0.442751318216324 ,0.574035108089447,0.688806891441345,0.549417436122894,0.509770929813385,0.662022709846497,0.645423412322998 ,0.763367056846619,0.0264460854232311,0.506098926067352,0.862278997898102,0.0184080004692078,0.479419261217117 ,0.792443513870239,0.377081513404846,0.613779723644257,0.702778577804565,0.359689712524414,0.27214840054512,0.170062497258186 ,0.947108268737793,-0.424899607896805,0.554023623466492,0.715903759002686,-0.0785331204533577,0.470493257045746 ,0.878901958465576,0.577877700328827,0.222700744867325,0.785150766372681,0.0984512493014336,0.498287439346313 ,0.861404061317444,0.310688972473145,0.620523273944855,0.720016121864319,0.549417436122894,0.509770929813385 ,0.662022709846497,0.483853906393051,0.253162741661072,0.83773148059845,0.310688972473145,0.620523273944855,0.720016121864319 ,0.450630962848663,0.805599272251129,0.384631723165512,0.613779723644257,0.702778577804565,0.359689712524414 ,0.549417436122894,0.509770929813385,0.662022709846497,0.450630962848663,0.805599272251129,0.384631723165512 ,0.506222486495972,0.862206280231476,0.0184154994785786,0.645423412322998,0.763367056846619,0.0264460854232311 ,0.613779723644257,0.702778577804565,0.359689712524414,0.416925370693207,0.468881458044052,0.778667747974396 ,0.460348039865494,0.508830428123474,0.727441608905792,0.310688972473145,0.620523273944855,0.720016121864319 ,0.0984512493014336,0.498287439346313,0.861404061317444,0.460348039865494,0.508830428123474,0.727441608905792 ,0.634704053401947,0.664313793182373,0.394763141870499,0.450630962848663,0.805599272251129,0.384631723165512 ,0.310688972473145,0.620523273944855,0.720016121864319,0.634704053401947,0.664313793182373,0.394763141870499 ,0.702748596668243,0.710811495780945,0.0298582091927528,0.506222486495972,0.862206280231476,0.0184154994785786 ,0.450630962848663,0.805599272251129,0.384631723165512,-0.656222641468048,0.0393575765192509,0.753540217876434 ,-0.341256439685822,-0.287500321865082,0.894923210144043,0.014976161532104,0.0756698846817017,0.997020423412323 ,-0.625847578048706,0.480478763580322,0.614373624324799,-0.383537352085114,0.0364017225801945,0.922807693481445 ,-0.424899607896805,0.554023623466492,0.715903759002686,0.27214840054512,0.170062497258186,0.947108268737793 ,-0.228187650442123,-0.152172490954399,0.961651682853699,0.27214840054512,0.170062497258186,0.947108268737793 ,0.401947200298309,0.187930881977081,0.896169900894165,-0.454463303089142,0.250147342681885,0.85492068529129 ,-0.408599942922592,0.0173157677054405,0.912549316883087,0.483853906393051,0.253162741661072,0.83773148059845 ,0.411258369684219,0.315371930599213,0.855223417282104,0.401947200298309,0.187930881977081,0.896169900894165 ,0.577877700328827,0.222700744867325,0.785150766372681,-0.0785331204533577,0.470493257045746,0.878901958465576 ,0.0984512493014336,0.498287439346313,0.861404061317444,0.483853906393051,0.253162741661072,0.83773148059845 ,0.577877700328827,0.222700744867325,0.785150766372681,-0.625847578048706,0.480478763580322,0.614373624324799 ,0.014976161532104,0.0756698846817017,0.997020423412323,0.368747025728226,0.423022657632828,0.827694058418274 ,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.343363374471664,-0.172115311026573,0.92329728603363 ,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.354196131229401,-0.301204055547714,0.885336756706238 ,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.225328087806702,-0.289088577032089,0.930405855178833 ,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.354196131229401,-0.301204055547714,0.885336756706238 ,-0.383537352085114,0.0364017225801945,0.922807693481445,0.589323878288269,-0.0393206179141998,0.806939482688904 ,0.434695482254028,-0.572132110595703,0.695488810539246,0.535627126693726,-0.624319195747375,0.568620383739471 ,0.718368828296661,-0.0318839028477669,0.694931387901306,0.558537840843201,0.599707722663879,0.57304984331131 ,0.368747025728226,0.423022657632828,0.827694058418274,0.589323878288269,-0.0393206179141998,0.806939482688904 ,0.718368828296661,-0.0318839028477669,0.694931387901306,-0.0980732291936874,0.653969585895538,0.750136971473694 ,0.368747025728226,0.423022657632828,0.827694058418274,0.558537840843201,0.599707722663879,0.57304984331131,-0.0848502963781357 ,0.77521288394928,0.625975549221039,-0.671684086322784,0.576999366283417,0.464663535356522,-0.625847578048706 ,0.480478763580322,0.614373624324799,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.0848502963781357 ,0.77521288394928,0.625975549221039,-0.424899607896805,0.554023623466492,0.715903759002686,-0.383537352085114 ,0.0364017225801945,0.922807693481445,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.625847578048706 ,0.480478763580322,0.614373624324799,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.341256439685822 ,-0.287500321865082,0.894923210144043,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.383537352085114 ,0.0364017225801945,0.922807693481445,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.00422305008396506 ,-0.606499910354614,0.795072376728058,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.354196131229401 ,-0.301204055547714,0.885336756706238,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.0179628469049931 ,-0.326483070850372,0.945032358169556,0.505278706550598,-0.368258208036423,0.78043532371521,0.434695482254028 ,-0.572132110595703,0.695488810539246,0.407602995634079,-0.0139898108318448,0.913052082061768,0.440102815628052 ,0.155542016029358,0.884373366832733,0.718368828296661,-0.0318839028477669,0.694931387901306,0.535627126693726 ,-0.624319195747375,0.568620383739471,0.416925370693207,0.468881458044052,0.778667747974396,0.558537840843201 ,0.599707722663879,0.57304984331131,0.718368828296661,-0.0318839028477669,0.694931387901306,0.440102815628052 ,0.155542016029358,0.884373366832733,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.671684086322784 ,0.576999366283417,0.464663535356522,-0.0848502963781357,0.77521288394928,0.625975549221039,0.0984512493014336 ,0.498287439346313,0.861404061317444,0.416925370693207,0.468881458044052,0.778667747974396,0.0984512493014336 ,0.498287439346313,0.861404061317444,-0.0848502963781357,0.77521288394928,0.625975549221039,0.558537840843201 ,0.599707722663879,0.57304984331131,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.28100323677063 ,-0.703339219093323,0.652955651283264,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.227215021848679 ,-0.0811199173331261,0.970460176467896,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.468802720308304 ,-0.729726076126099,0.497718721628189,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.431291252374649 ,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.468802720308304 ,-0.729726076126099,0.497718721628189,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.882811486721039 ,-0.336694210767746,0.327537626028061,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.6035475730896 ,-0.760226249694824,0.240387856960297,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.928562819957733 ,-0.368498861789703,-0.0444939211010933,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473 ,-0.254610985517502,0.687078893184662,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.882811486721039 ,-0.336694210767746,0.327537626028061,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.52898645401001 ,-0.491417169570923,0.691868841648102,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.928562819957733 ,-0.368498861789703,-0.0444939211010933,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.674269676208496 ,-0.660174071788788,0.330954134464264,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.528953433036804 ,-0.511403381824493,0.677255392074585,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.528953433036804 ,-0.511403381824493,0.677255392074585,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0911645293235779 ,-0.702602386474609,0.705718696117401,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.744288861751556 ,-0.234780222177505,0.625229835510254,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.132480919361115 ,-0.155877292156219,0.978851914405823,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.202346414327621 ,-0.358685582876205,0.911263167858124,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.755199730396271 ,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.755199730396271 ,-0.445887237787247,0.480476796627045,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.34972295165062 ,-0.865084648132324,0.359614223241806,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.769146144390106 ,-0.596087396144867,0.230421498417854,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.358602106571198 ,-0.933434844017029,-0.010197676718235,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.291014969348907 ,-0.640561819076538,0.71062707901001,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.52898645401001 ,-0.491417169570923,0.691868841648102,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.34972295165062 ,-0.865084648132324,0.359614223241806,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.674269676208496 ,-0.660174071788788,0.330954134464264,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.358602106571198 ,-0.933434844017029,-0.010197676718235,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.556144297122955 ,-0.497788280248642,0.665515065193176,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.556144297122955 ,-0.497788280248642,0.665515065193176,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.75330114364624 ,-0.0430446080863476,0.656265556812286,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.199148803949356 ,-0.719600260257721,-0.665218114852905,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.107617132365704 ,-0.122167520225048,-0.986657798290253,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.319179713726044 ,-0.172680079936981,-0.931829333305359,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.415939480066299 ,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.415939480066299 ,-0.73881071805954,-0.530238687992096,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.846806704998016 ,-0.342166721820831,-0.407234936952591,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.576395452022552 ,-0.764892399311066,-0.287589907646179,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.928562819957733 ,-0.368498861789703,-0.0444939211010933,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.612231731414795 ,-0.260206639766693,-0.746635675430298,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.456670939922333 ,-0.504286706447601,-0.732902884483337,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.846806704998016 ,-0.342166721820831,-0.407234936952591,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.639376401901245 ,-0.667583346366882,-0.381484389305115,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.928562819957733 ,-0.368498861789703,-0.0444939211010933,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.452344924211502 ,-0.552772045135498,-0.699876546859741,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.452344924211502 ,-0.552772045135498,-0.699876546859741,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.00627111084759235 ,-0.725264191627502,-0.688442051410675,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.67170912027359 ,-0.26042515039444,-0.693531274795532,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.0616781376302242 ,-0.181977167725563,-0.981366455554962,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.702341377735138 ,-0.454965353012085,-0.547469735145569,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.122947707772255 ,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.702341377735138 ,-0.454965353012085,-0.547469735145569,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.311080545186996 ,-0.873001515865326,-0.375629216432571,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.741996705532074 ,-0.600749731063843,-0.297557651996613,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.358602106571198 ,-0.933434844017029,-0.010197676718235,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528 ,-0.658140003681183,-0.722882747650146,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.210457310080528 ,-0.658140003681183,-0.722882747650146,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.639376401901245 ,-0.667583346366882,-0.381484389305115,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.358602106571198 ,-0.933434844017029,-0.010197676718235,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.639376401901245 ,-0.667583346366882,-0.381484389305115,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.498913466930389 ,-0.494338691234589,-0.711838901042938,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.671101152896881 ,-0.0684311091899872,-0.738200783729553,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.498913466930389 ,-0.494338691234589,-0.711838901042938,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.0911645293235779 ,-0.702602386474609,0.705718696117401,0.206373274326324,-0.932199418544769,-0.29734542965889,0.265233933925629 ,-0.933141052722931,-0.242690622806549,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.28100323677063 ,-0.703339219093323,0.652955651283264,0.265233933925629,-0.933141052722931,-0.242690622806549,0.333554297685623 ,-0.926460325717926,-0.174392700195313,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.468802720308304 ,-0.729726076126099,0.497718721628189,0.333554297685623,-0.926460325717926,-0.174392700195313,0.393486231565475 ,-0.915565848350525,-0.0831127688288689,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.6035475730896 ,-0.760226249694824,0.240387856960297,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.414534240961075 ,-0.909560441970825,0.0293457116931677,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.147581502795219 ,-0.881406664848328,0.448711484670639,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.206373274326324 ,-0.932199418544769,-0.29734542965889,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.528953433036804 ,-0.511403381824493,0.677255392074585,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.0544524416327477 ,-0.920815229415894,-0.386179000139236,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.744288861751556 ,-0.234780222177505,0.625229835510254,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.913896083831787 ,0.178190380334854,-0.36474946141243,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.916511356830597 ,0.31258288025856,-0.249597251415253,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.744288861751556 ,-0.234780222177505,0.625229835510254,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106 ,-0.596087396144867,0.230421498417854,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.916511356830597 ,0.31258288025856,-0.249597251415253,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.76525092124939 ,-0.642850756645203,-0.0336732342839241,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.911587297916412 ,0.377997100353241,-0.161637872457504,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.913896083831787 ,0.178190380334854,-0.36474946141243,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.909932374954224 ,-0.128417745232582,0.394375443458557,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.895336210727692 ,-0.087383933365345,-0.436734586954117,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.556144297122955 ,-0.497788280248642,0.665515065193176,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838 ,-0.516851603984833,0.654703378677368,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.751205563545227 ,-0.478883922100067,-0.454269051551819,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.751205563545227 ,-0.478883922100067,-0.454269051551819,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.528953433036804 ,-0.511403381824493,0.677255392074585,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.411167025566101 ,-0.631594717502594,0.657289743423462,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.616970300674438 ,-0.649450302124023,-0.444479376077652,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.556144297122955 ,-0.497788280248642,0.665515065193176,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.445206075906754 ,-0.782184541225433,-0.435865759849548,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.199148803949356 ,-0.719600260257721,-0.665218114852905,0.238087520003319,-0.928487598896027,0.285000205039978,0.173939555883408 ,-0.926637887954712,0.333297610282898,-0.415939480066299,-0.73881071805954,-0.530238687992096,0.313057601451874 ,-0.922951817512512,0.223952934145927,0.238087520003319,-0.928487598896027,0.285000205039978,-0.199148803949356 ,-0.719600260257721,-0.665218114852905,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552 ,-0.764892399311066,-0.287589907646179,0.382047444581985,-0.913609445095062,0.139131292700768,0.313057601451874 ,-0.922951817512512,0.223952934145927,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.634244203567505 ,-0.772702574729919,-0.0257883872836828,0.414534240961075,-0.909560441970825,0.0293457116931677,0.382047444581985 ,-0.913609445095062,0.139131292700768,-0.00627111084759235,-0.725264191627502,-0.688442051410675,0.173939555883408 ,-0.926637887954712,0.333297610282898,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.100533246994019 ,-0.893698990345001,-0.437258720397949,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.0946064740419388 ,-0.913934707641602,0.394680887460709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.452344924211502 ,-0.552772045135498,-0.699876546859741,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.671101152896881 ,-0.0684311091899872,-0.738200783729553,-0.94632351398468,0.183760270476341,0.265902101993561,-0.945695042610168 ,0.244873836636543,0.21377021074295,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.67170912027359 ,-0.26042515039444,-0.693531274795532,-0.945695042610168,0.244873836636543,0.21377021074295,-0.936998605728149 ,0.316089689731598,0.14873118698597,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.702341377735138 ,-0.454965353012085,-0.547469735145569,-0.936998605728149,0.316089689731598,0.14873118698597,-0.923020243644714 ,0.379948437213898,0.0606035329401493,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.741996705532074 ,-0.600749731063843,-0.297557651996613,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.912554860115051 ,0.405823320150375,-0.0505079813301563,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.859895944595337 ,-0.137679204344749,-0.49155205488205,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.94632351398468 ,0.183760270476341,0.265902101993561,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.498913466930389 ,-0.494338691234589,-0.711838901042938,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.935486495494843 ,-0.0804866030812263,0.344074010848999,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.60280579328537 ,-0.423473596572876,-0.676236093044281,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.659892737865448 ,-0.642082750797272,0.390219569206238,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.452344924211502 ,-0.552772045135498,-0.699876546859741,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.794270694255829 ,-0.471489399671555,0.383186310529709,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.507410705089569 ,-0.552135229110718,-0.66157466173172,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.48826989531517 ,-0.774789869785309,0.40161320567131,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.48826989531517 ,-0.774789869785309,0.40161320567131,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.498913466930389 ,-0.494338691234589,-0.711838901042938,0.499523967504501,-0.410259157419205,-0.762996256351471,0.265233933925629 ,-0.933141052722931,-0.242690622806549,0.206373274326324,-0.932199418544769,-0.29734542965889,0.291362255811691 ,-0.415095657110214,-0.861860573291779,0.719791650772095,-0.389199703931808,-0.574824810028076,0.333554297685623 ,-0.926460325717926,-0.174392700195313,0.265233933925629,-0.933141052722931,-0.242690622806549,0.499523967504501 ,-0.410259157419205,-0.762996256351471,0.89153379201889,-0.356688916683197,-0.279178351163864,0.393486231565475 ,-0.915565848350525,-0.0831127688288689,0.333554297685623,-0.926460325717926,-0.174392700195313,0.719791650772095 ,-0.389199703931808,-0.574824810028076,0.93902975320816,-0.33998966217041,0.0512847155332565,0.414534240961075 ,-0.909560441970825,0.0293457116931677,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.89153379201889 ,-0.356688916683197,-0.279178351163864,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.0544524416327477 ,-0.920815229415894,-0.386179000139236,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.291362255811691 ,-0.415095657110214,-0.861860573291779,-0.0544524416327477,-0.920815229415894,-0.386179000139236,-0.576637268066406 ,-0.666932582855225,-0.471900790929794,-0.250289469957352,-0.339470773935318,-0.906705439090729,0.0635582432150841 ,-0.298091143369675,-0.952418982982636,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.913896083831787 ,0.178190380334854,-0.36474946141243,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.366778641939163 ,0.448393434286118,-0.815117657184601,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.918562531471252 ,0.240213423967361,-0.313911467790604,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.358708292245865 ,0.679778933525085,-0.639710068702698,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.916511356830597 ,0.31258288025856,-0.249597251415253,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.345371842384338 ,0.869300365447998,-0.353603094816208,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.911587297916412 ,0.377997100353241,-0.161637872457504,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.349057763814926 ,0.936734259128571,-0.0262219123542309,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.895336210727692 ,-0.087383933365345,-0.436734586954117,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.36416107416153 ,0.234637573361397,-0.901294589042664,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.633082926273346 ,-0.611027598381042,-0.475238174200058,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.312836438417435 ,0.000868286821059883,-0.94980663061142,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.751205563545227 ,-0.478883922100067,-0.454269051551819,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.195326372981071 ,-0.254561126232147,-0.947125256061554,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.576637268066406 ,-0.666932582855225,-0.471900790929794,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.0507657080888748 ,-0.284880071878433,-0.957217931747437,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.445206075906754 ,-0.782184541225433,-0.435865759849548,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.195326372981071 ,-0.254561126232147,-0.947125256061554,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.633082926273346 ,-0.611027598381042,-0.475238174200058,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.128973305225372 ,-0.305629998445511,-0.943374931812286,0.20105354487896,-0.399605453014374,0.894367337226868,0.173939555883408 ,-0.926637887954712,0.333297610282898,0.238087520003319,-0.928487598896027,0.285000205039978,0.418255031108856 ,-0.396321922540665,0.817307531833649,0.418255031108856,-0.396321922540665,0.817307531833649,0.238087520003319 ,-0.928487598896027,0.285000205039978,0.313057601451874,-0.922951817512512,0.223952934145927,0.656683743000031 ,-0.378395289182663,0.652367532253265,0.656683743000031,-0.378395289182663,0.652367532253265,0.313057601451874 ,-0.922951817512512,0.223952934145927,0.382047444581985,-0.913609445095062,0.139131292700768,0.857872784137726 ,-0.350929707288742,0.375369966030121,0.857872784137726,-0.350929707288742,0.375369966030121,0.382047444581985 ,-0.913609445095062,0.139131292700768,0.414534240961075,-0.909560441970825,0.0293457116931677,0.93902975320816 ,-0.33998966217041,0.0512847155332565,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.0946064740419388 ,-0.913934707641602,0.394680887460709,0.173939555883408,-0.926637887954712,0.333297610282898,0.20105354487896 ,-0.399605453014374,0.894367337226868,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.622603535652161 ,-0.659051358699799,0.42191955447197,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.0351529642939568 ,-0.352832555770874,0.935025930404663,-0.448035717010498,0.462348014116287,0.765178620815277,-0.945695042610168 ,0.244873836636543,0.21377021074295,-0.94632351398468,0.183760270476341,0.265902101993561,-0.454463303089142 ,0.250147342681885,0.85492068529129,-0.42182531952858,0.69061017036438,0.587470054626465,-0.936998605728149,0.316089689731598 ,0.14873118698597,-0.945695042610168,0.244873836636543,0.21377021074295,-0.448035717010498,0.462348014116287 ,0.765178620815277,-0.37904354929924,0.875075936317444,0.300945341587067,-0.923020243644714,0.379948437213898 ,0.0606035329401493,-0.936998605728149,0.316089689731598,0.14873118698597,-0.42182531952858,0.69061017036438 ,0.587470054626465,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.912554860115051,0.405823320150375 ,-0.0505079813301563,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.37904354929924,0.875075936317444 ,0.300945341587067,-0.94632351398468,0.183760270476341,0.265902101993561,-0.935486495494843,-0.0804866030812263 ,0.344074010848999,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.454463303089142,0.250147342681885 ,0.85492068529129,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.679035544395447,-0.603133201599121 ,0.418498605489731,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.408599942922592,0.0173157677054405 ,0.912549316883087,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.794270694255829,-0.471489399671555 ,0.383186310529709,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.291664242744446,-0.238015905022621 ,0.926434218883514,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.622603535652161,-0.659051358699799 ,0.42191955447197,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.343363374471664,-0.172115311026573 ,0.92329728603363,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.48826989531517,-0.774789869785309 ,0.40161320567131,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.291664242744446,-0.238015905022621 ,0.926434218883514,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.679035544395447,-0.603133201599121 ,0.418498605489731,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.225328087806702,-0.289088577032089 ,0.930405855178833,0.220404133200645,0.441583395004272,-0.869727611541748,0.238343358039856,0.387237757444382 ,-0.890639841556549,0.249522879719734,0.613189935684204,-0.749490737915039,0.0635582432150841,-0.298091143369675 ,-0.952418982982636,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.0507657080888748,-0.284880071878433 ,-0.957217931747437,0.508907198905945,-0.553594052791595,-0.659201860427856,0.568823277950287,-0.359092324972153 ,-0.739927589893341,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.491910099983215,0.172478601336479 ,-0.853390634059906,0.655558884143829,0.209355428814888,-0.725543141365051,0.368004411458969,0.153596758842468 ,-0.917050004005432,0.368004411458969,0.153596758842468,-0.917050004005432,-0.128493547439575,-0.169293120503426 ,-0.977153658866882,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.128493547439575,-0.169293120503426 ,-0.977153658866882,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128973305225372,-0.305629998445511 ,-0.943374931812286,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.348750114440918,0.540946424007416 ,-0.765343248844147,-0.619978547096252,0.568114936351776,-0.541176497936249,0.568823277950287,-0.359092324972153 ,-0.739927589893341,0.531679213047028,-0.524689078330994,-0.664844751358032,0.566836953163147,-0.543319463729858 ,-0.619273662567139,0.568823277950287,-0.359092324972153,-0.739927589893341,0.566836953163147,-0.543319463729858 ,-0.619273662567139,0.49908322095871,-0.0296989660710096,-0.866044998168945,-0.619978547096252,0.568114936351776 ,-0.541176497936249,-0.348750114440918,0.540946424007416,-0.765343248844147,0.0124354995787144,0.454871088266373 ,-0.890470445156097,0.130445152521133,0.457035809755325,0.879830837249756,0.17189884185791,0.626526415348053 ,0.760207533836365,0.111461341381073,0.330251514911652,0.937288820743561,0.111461341381073,0.330251514911652 ,0.937288820743561,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.0351529642939568,-0.352832555770874 ,0.935025930404663,0.401947200298309,0.187930881977081,0.896169900894165,0.27214840054512,0.170062497258186,0.947108268737793 ,0.577877700328827,0.222700744867325,0.785150766372681,0.27214840054512,0.170062497258186,0.947108268737793,-0.408599942922592 ,0.0173157677054405,0.912549316883087,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.0179628469049931 ,-0.326483070850372,0.945032358169556,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.208328202366829 ,-0.172579661011696,0.962712645530701,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.225328087806702 ,-0.289088577032089,0.930405855178833,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.625847578048706 ,0.480478763580322,0.614373624324799,-0.671684086322784,0.576999366283417,0.464663535356522,-0.424899607896805 ,0.554023623466492,0.715903759002686,0.505278706550598,-0.368258208036423,0.78043532371521,0.535627126693726 ,-0.624319195747375,0.568620383739471,0.434695482254028,-0.572132110595703,0.695488810539246,0.505278706550598 ,-0.368258208036423,0.78043532371521,0.407602995634079,-0.0139898108318448,0.913052082061768,0.535627126693726 ,-0.624319195747375,0.568620383739471,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0785331204533577 ,0.470493257045746,0.878901958465576,-0.424899607896805,0.554023623466492,0.715903759002686,-0.431291252374649 ,-0.167436838150024,0.88653975725174,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.227215021848679 ,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.202346414327621 ,-0.358685582876205,0.911263167858124,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.660988688468933 ,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.216712310910225 ,-0.169844657182693,0.961347281932831,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.107617132365704 ,-0.122167520225048,-0.986657798290253,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626 ,-0.205408811569214,-0.966817259788513,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.507410705089569 ,-0.552135229110718,-0.66157466173172,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.381634205579758 ,-0.640459716320038,-0.666458308696747,-0.151893243193626,-0.205408811569214,-0.966817259788513,0.136130660772324 ,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.105160817503929 ,0.278431057929993,0.954681813716888,0.263650745153427,-0.157535120844841,0.951667487621307,0.272030591964722 ,-0.10613701492548,0.956417441368103,-0.142246410250664,0.246101453900337,0.958749234676361,-0.179838627576828 ,0.158750206232071,0.970801949501038,0.326879501342773,0.00586882513016462,0.945047795772552,0.326879501342773 ,0.00586882513016462,0.945047795772552,-0.179838627576828,0.158750206232071,0.970801949501038,-0.172908544540405 ,0.0579710826277733,0.983230412006378,0.334599673748016,0.175780311226845,0.925820887088776,0.334599673748016 ,0.175780311226845,0.925820887088776,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.122078433632851 ,-0.0250803548842669,0.992203533649445,0.253547221422195,0.327525943517685,0.910187065601349,0.253547221422195 ,0.327525943517685,0.910187065601349,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.040074922144413 ,-0.0765580385923386,0.996259450912476,0.105446070432663,0.417101114988327,0.902722418308258,0.105446070432663 ,0.417101114988327,0.902722418308258,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.0589041672646999 ,-0.0861395671963692,0.994540214538574,-0.067083902657032,0.418874800205231,0.90556263923645,-0.067083902657032 ,0.418874800205231,0.90556263923645,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.153722941875458 ,-0.0543801262974739,0.986616492271423,-0.182103842496872,0.370986968278885,0.910607993602753,-0.233089491724968 ,0.366702735424042,0.900665521621704,0.179733082652092,-0.0269720479846001,0.983345568180084,0.213143289089203 ,0.0353558585047722,0.976381063461304,-0.283145189285278,0.239479392766953,0.928697168827057,-0.283145189285278 ,0.239479392766953,0.928697168827057,0.213143289089203,0.0353558585047722,0.976381063461304,0.233963787555695 ,0.155204430222511,0.959777355194092,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.418653875589371 ,-0.0103639494627714,0.908086717128754,0.233963787555695,0.155204430222511,0.959777355194092,0.180598795413971 ,0.261213630437851,0.948236048221588,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.224078983068466 ,-0.125485673546791,0.96645849943161,0.180598795413971,0.261213630437851,0.948236048221588,0.0773428529500961 ,0.322050452232361,0.943557918071747,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.112397000193596 ,-0.326285779476166,0.938565135002136,0.0773428529500961,0.322050452232361,0.943557918071747,-0.0433657057583332 ,0.308572441339493,0.950211763381958,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332 ,0.308572441339493,0.950211763381958,-0.299070537090302,0.902828752994537,0.308961302042007,-0.590794920921326 ,0.744754731655121,0.310325294733047,-0.105160817503929,0.278431057929993,0.954681813716888,-0.142246410250664 ,0.246101453900337,0.958749234676361,-0.486762404441834,0.520327687263489,0.70165628194809,-0.624243855476379 ,0.262774765491486,0.73570990562439,-0.179838627576828,0.158750206232071,0.970801949501038,-0.179838627576828 ,0.158750206232071,0.970801949501038,-0.624243855476379,0.262774765491486,0.73570990562439,-0.629434466362,-0.076258510351181 ,0.773302555084229,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.172908544540405,0.0579710826277733 ,0.983230412006378,-0.629434466362,-0.076258510351181,0.773302555084229,-0.466201931238174,-0.373760640621185 ,0.801847040653229,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.122078433632851,-0.0250803548842669 ,0.992203533649445,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.176110938191414,-0.553461611270905 ,0.814042508602142,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.040074922144413,-0.0765580385923386 ,0.996259450912476,-0.176110938191414,-0.553461611270905,0.814042508602142,0.167152568697929,-0.567055284976959 ,0.806540906429291,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.0589041672646999,-0.0861395671963692 ,0.994540214538574,0.167152568697929,-0.567055284976959,0.806540906429291,0.439817190170288,-0.44538602232933 ,0.779866755008698,0.153722941875458,-0.0543801262974739,0.986616492271423,0.179733082652092,-0.0269720479846001 ,0.983345568180084,0.676802039146423,-0.601036489009857,0.425081342458725,0.85341203212738,-0.31018790602684 ,0.418893098831177,0.213143289089203,0.0353558585047722,0.976381063461304,0.213143289089203,0.0353558585047722 ,0.976381063461304,0.85341203212738,-0.31018790602684,0.418893098831177,0.902406454086304,0.256440877914429,0.346266776323318 ,0.233963787555695,0.155204430222511,0.959777355194092,0.233963787555695,0.155204430222511,0.959777355194092 ,0.902406454086304,0.256440877914429,0.346266776323318,0.674272358417511,0.674698412418365,0.300231248140335 ,0.180598795413971,0.261213630437851,0.948236048221588,0.180598795413971,0.261213630437851,0.948236048221588 ,0.674272358417511,0.674698412418365,0.300231248140335,0.264634191989899,0.922052919864655,0.282466232776642 ,0.0773428529500961,0.322050452232361,0.943557918071747,0.0773428529500961,0.322050452232361,0.943557918071747 ,0.264634191989899,0.922052919864655,0.282466232776642,-0.299070537090302,0.902828752994537,0.308961302042007 ,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.486762404441834,0.520327687263489,0.70165628194809 ,-0.549692809581757,0.641294836997986,0.535330533981323,-0.767678797245026,0.2869873046875,0.572981357574463 ,-0.624243855476379,0.262774765491486,0.73570990562439,-0.624243855476379,0.262774765491486,0.73570990562439 ,-0.767678797245026,0.2869873046875,0.572981357574463,-0.778753936290741,-0.129268735647202,0.61386626958847 ,-0.629434466362,-0.076258510351181,0.773302555084229,-0.629434466362,-0.076258510351181,0.773302555084229,-0.778753936290741 ,-0.129268735647202,0.61386626958847,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.466201931238174 ,-0.373760640621185,0.801847040653229,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.578869938850403 ,-0.496298432350159,0.646991074085236,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.176110938191414 ,-0.553461611270905,0.814042508602142,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.220708161592484 ,-0.714994132518768,0.663378715515137,0.199516177177429,-0.725585639476776,0.658573269844055,0.167152568697929 ,-0.567055284976959,0.806540906429291,0.167152568697929,-0.567055284976959,0.806540906429291,0.199516177177429 ,-0.725585639476776,0.658573269844055,0.568061590194702,-0.524848997592926,0.633908152580261,0.439817190170288 ,-0.44538602232933,0.779866755008698,0.439817190170288,-0.44538602232933,0.779866755008698,0.568061590194702 ,-0.524848997592926,0.633908152580261,0.88259881734848,-0.254938364028931,0.395000904798508,-0.246941313147545 ,0.924433410167694,0.290590465068817,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.690867304801941 ,0.718407988548279,-0.0811932682991028,-0.549692809581757,0.641294836997986,0.535330533981323,-0.549692809581757 ,0.641294836997986,0.535330533981323,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.959779977798462 ,0.278704285621643,-0.0338585041463375,-0.767678797245026,0.2869873046875,0.572981357574463,-0.767678797245026 ,0.2869873046875,0.572981357574463,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.971564769744873 ,-0.236011743545532,0.0189810190349817,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.778753936290741 ,-0.129268735647202,0.61386626958847,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.723084032535553 ,-0.687865734100342,0.0631685853004456,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.578869938850403 ,-0.496298432350159,0.646991074085236,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.28089165687561 ,-0.955799043178558,0.086879275739193,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.220708161592484 ,-0.714994132518768,0.663378715515137,-0.28089165687561,-0.955799043178558,0.086879275739193,0.236541092395782 ,-0.968005061149597,0.0837526917457581,0.199516177177429,-0.725585639476776,0.658573269844055,0.199516177177429 ,-0.725585639476776,0.658573269844055,0.236541092395782,-0.968005061149597,0.0837526917457581,0.690576732158661 ,-0.721194446086884,0.0546111837029457,0.568061590194702,-0.524848997592926,0.633908152580261,0.568061590194702 ,-0.524848997592926,0.633908152580261,0.690576732158661,-0.721194446086884,0.0546111837029457,0.959537088871002 ,-0.28148826956749,0.00727332010865211,0.88259881734848,-0.254938364028931,0.395000904798508,0.88259881734848 ,-0.254938364028931,0.395000904798508,0.959537088871002,-0.28148826956749,0.00727332010865211,0.971341848373413 ,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413 ,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.722835063934326 ,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326 ,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.280602157115936 ,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936 ,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,-0.236852958798409 ,0.965259969234467,-0.110334932804108,-0.246941313147545,0.924433410167694,0.290590465068817,0.00198204442858696 ,0.093896672129631,0.995579957962036,0.272030591964722,-0.10613701492548,0.956417441368103,0.326879501342773 ,0.00586882513016462,0.945047795772552,0.00198204442858696,0.093896672129631,0.995579957962036,0.326879501342773 ,0.00586882513016462,0.945047795772552,0.334599673748016,0.175780311226845,0.925820887088776,0.00198204442858696 ,0.093896672129631,0.995579957962036,0.334599673748016,0.175780311226845,0.925820887088776,0.253547221422195 ,0.327525943517685,0.910187065601349,0.00198204442858696,0.093896672129631,0.995579957962036,0.253547221422195 ,0.327525943517685,0.910187065601349,0.105446070432663,0.417101114988327,0.902722418308258,0.00198204442858696 ,0.093896672129631,0.995579957962036,0.105446070432663,0.417101114988327,0.902722418308258,-0.067083902657032 ,0.418874800205231,0.90556263923645,0.00198204442858696,0.093896672129631,0.995579957962036,-0.067083902657032 ,0.418874800205231,0.90556263923645,-0.182103842496872,0.370986968278885,0.910607993602753,0.0314320400357246 ,0.12189869582653,0.992044746875763,-0.233089491724968,0.366702735424042,0.900665521621704,-0.283145189285278 ,0.239479392766953,0.928697168827057,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246 ,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.136130660772324,-0.198970586061478 ,0.970504581928253,0.263650745153427,-0.157535120844841,0.951667487621307,0.028663007542491,0.119241014122963 ,0.992451548576355,-0.283145189285278,0.239479392766953,0.928697168827057,-0.418653875589371,-0.0103639494627714 ,0.908086717128754,-0.224078983068466,-0.125485673546791,0.96645849943161,0.136130660772324,-0.198970586061478 ,0.970504581928253,0.028663007542491,0.119241014122963,0.992451548576355,-0.224078983068466,-0.125485673546791 ,0.96645849943161,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.246941313147545,0.924433410167694 ,0.290590465068817,-0.549692809581757,0.641294836997986,0.535330533981323,-0.486762404441834,0.520327687263489 ,0.70165628194809,-0.114203341305256,0.279921561479568,0.953205943107605,-0.587047100067139,0.73501044511795 ,0.339316010475159,-0.486762404441834,0.520327687263489,0.70165628194809,-0.142246410250664,0.246101453900337 ,0.958749234676361,0.245040863752365,-0.134970381855965,0.960071861743927,-0.114203341305256,0.279921561479568 ,0.953205943107605,-0.142246410250664,0.246101453900337,0.958749234676361,0.272030591964722,-0.10613701492548 ,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,0.0316664315760136,0.122062407433987 ,0.992017149925232,0.245040863752365,-0.134970381855965,0.960071861743927,0.272030591964722,-0.10613701492548 ,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,-0.182103842496872,0.370986968278885 ,0.910607993602753,-0.211337894201279,0.346838146448135,0.91380500793457,0.0316664315760136,0.122062407433987 ,0.992017149925232,-0.182103842496872,0.370986968278885,0.910607993602753,0.153722941875458,-0.0543801262974739 ,0.986616492271423,0.196472957730293,-0.029518248513341,0.980064809322357,-0.211337894201279,0.346838146448135 ,0.91380500793457,0.153722941875458,-0.0543801262974739,0.986616492271423,0.439817190170288,-0.44538602232933 ,0.779866755008698,0.680254757404327,-0.584707081317902,0.44200798869133,0.196472957730293,-0.029518248513341 ,0.980064809322357,-0.106244966387749,0.278917253017426,0.954419791698456,-0.58428555727005,0.74019581079483 ,0.332746803760529,-0.58428555727005,0.74019581079483,0.332746803760529,-0.106244966387749,0.278917253017426 ,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,-0.106244966387749,0.278917253017426 ,0.954419791698456,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116 ,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,0.0315654873847961,0.122002728283405 ,0.992027699947357,0.252784311771393,-0.144343972206116,0.956694781780243,0.252784311771393,-0.144343972206116 ,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195 ,0.908464431762695,-0.220397889614105,0.355129688978195,0.908464431762695,0.0315654873847961,0.122002728283405 ,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376 ,0.981216847896576,0.189345061779022,-0.0369042716920376,0.981216847896576,-0.220397889614105,0.355129688978195 ,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.676772654056549,-0.6009920835495 ,0.4251908659935,0.676772654056549,-0.6009920835495,0.4251908659935,0.189345061779022,-0.0369042716920376,0.981216847896576 ,0.285419285297394,-0.260888695716858,-0.922210872173309,0.285419285297394,-0.260888695716858,-0.922210872173309 ,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248,0.161541283130646,-0.984371840953827 ,0.304495304822922,-0.222503274679184,-0.926161408424377,0.359685301780701,-0.109944850206375,-0.926573574542999 ,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.106314696371555,0.128722757101059,-0.985965311527252 ,0.359685301780701,-0.109944850206375,-0.926573574542999,0.368203610181808,0.0610124915838242,-0.92774111032486 ,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.144488215446472,0.0409091152250767,-0.988660514354706 ,0.368203610181808,0.0610124915838242,-0.92774111032486,0.287971884012222,0.213878870010376,-0.933449566364288 ,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.137990683317184,-0.0606634132564068,-0.988573968410492 ,0.287971884012222,0.213878870010376,-0.933449566364288,0.140473276376724,0.304339796304703,-0.942148923873901 ,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0875953435897827,-0.144417569041252,-0.985632121562958 ,0.140473276376724,0.304339796304703,-0.942148923873901,-0.0318344980478287,0.306514382362366,-0.951333522796631 ,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.00595734408125281,-0.196369305253029,-0.980511903762817 ,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.147164434194565,0.259054154157639,-0.954585552215576 ,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0928165391087532,-0.206099733710289,-0.974119126796722 ,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.222749635577202 ,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,-0.248975187540054 ,0.126625880599022,-0.960196435451508,-0.387186944484711,-0.118426606059074,-0.914363980293274,0.268629968166351 ,0.0369143784046173,-0.962535858154297,0.247289061546326,-0.083899550139904,-0.965302526950836,-0.387186944484711 ,-0.118426606059074,-0.914363980293274,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.215820819139481 ,0.143767416477203,-0.965791046619415,0.268629968166351,0.0369143784046173,-0.962535858154297,-0.191727757453918 ,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.112991258502007 ,0.205170169472694,-0.972182154655457,0.215820819139481,0.143767416477203,-0.965791046619415,-0.0825225338339806 ,-0.437338262796402,-0.895502805709839,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.00743300467729568 ,0.191485971212387,-0.981467187404633,0.112991258502007,0.205170169472694,-0.972182154655457,-0.563491702079773 ,0.64732563495636,0.513270497322083,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248 ,0.161541283130646,-0.984371840953827,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.106314696371555 ,0.128722757101059,-0.985965311527252,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.595909535884857 ,0.174546733498573,-0.783852875232697,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.144488215446472 ,0.0409091152250767,-0.988660514354706,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.602712452411652 ,-0.166520953178406,-0.780389904975891,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.137990683317184 ,-0.0606634132564068,-0.988573968410492,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.441163808107376 ,-0.466001093387604,-0.766953408718109,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.0875953435897827 ,-0.144417569041252,-0.985632121562958,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.152386710047722 ,-0.647121250629425,-0.747002243995667,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.00595734408125281 ,-0.196369305253029,-0.980511903762817,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.190285310149193 ,-0.661201238632202,-0.725675106048584,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.0928165391087532 ,-0.206099733710289,-0.974119126796722,0.187471479177475,-0.174140021204948,-0.9667107462883,0.462890416383743 ,-0.538564682006836,-0.704045832157135,0.190285310149193,-0.661201238632202,-0.725675106048584,0.897243618965149 ,-0.439534097909927,-0.0419950634241104,0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202 ,-0.155833333730698,-0.962340116500854,0.562596559524536,-0.566279470920563,0.602339327335358,0.247289061546326 ,-0.083899550139904,-0.965302526950836,0.268629968166351,0.0369143784046173,-0.962535858154297,0.765360236167908 ,0.200960800051689,0.611423313617706,0.713191151618958,-0.304302185773849,0.631473302841187,0.268629968166351 ,0.0369143784046173,-0.962535858154297,0.215820819139481,0.143767416477203,-0.965791046619415,0.56377899646759 ,0.570771217346191,0.596970200538635,0.765360236167908,0.200960800051689,0.611423313617706,0.215820819139481 ,0.143767416477203,-0.965791046619415,0.112991258502007,0.205170169472694,-0.972182154655457,0.205752313137054 ,0.791630685329437,0.575314521789551,0.56377899646759,0.570771217346191,0.596970200538635,0.112991258502007,0.205170169472694 ,-0.972182154655457,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.294516265392303,0.773154675960541 ,0.56168669462204,0.205752313137054,0.791630685329437,0.575314521789551,-0.457403212785721,0.433727949857712 ,-0.776313304901123,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.74471515417099,0.218894854187965 ,-0.630463659763336,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.595909535884857,0.174546733498573 ,-0.783852875232697,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.757954597473145,-0.199201464653015 ,-0.621147036552429,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.602712452411652,-0.166520953178406 ,-0.780389904975891,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.560215413570404,-0.568411111831665 ,-0.602550804615021,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.441163808107376,-0.466001093387604 ,-0.766953408718109,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.203609570860863,-0.789041042327881 ,-0.579618275165558,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.152386710047722,-0.647121250629425 ,-0.747002243995667,0.190285310149193,-0.661201238632202,-0.725675106048584,0.216090649366379,-0.800804913043976 ,-0.558584153652191,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.190285310149193,-0.661201238632202 ,-0.725675106048584,0.462890416383743,-0.538564682006836,-0.704045832157135,0.585278213024139,-0.600160777568817 ,-0.54521232843399,0.216090649366379,-0.800804913043976,-0.558584153652191,0.462890416383743,-0.538564682006836 ,-0.704045832157135,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.585278213024139,-0.600160777568817 ,-0.54521232843399,0.713191151618958,-0.304302185773849,0.631473302841187,0.765360236167908,0.200960800051689 ,0.611423313617706,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.765360236167908,0.200960800051689 ,0.611423313617706,0.56377899646759,0.570771217346191,0.596970200538635,-0.0524273775517941,0.0131540298461914 ,0.998538076877594,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.56377899646759,0.570771217346191 ,0.596970200538635,0.205752313137054,0.791630685329437,0.575314521789551,-0.049451969563961,0.00981415808200836 ,0.998728275299072,-0.0524273775517941,0.0131540298461914,0.998538076877594,0.205752313137054,0.791630685329437 ,0.575314521789551,-0.294516265392303,0.773154675960541,0.56168669462204,-0.049451969563961,0.00981415808200836 ,0.998728275299072,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.525119662284851,0.574203789234161 ,-0.628123641014099,-0.518197417259216,0.525039672851563,0.675133109092712,-0.197243928909302,0.699767708778381 ,0.686600387096405,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.74471515417099,0.218894854187965 ,-0.630463659763336,-0.708945393562317,0.213501617312431,0.672170698642731,-0.518197417259216,0.525039672851563 ,0.675133109092712,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.757954597473145,-0.199201464653015 ,-0.621147036552429,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.708945393562317,0.213501617312431 ,0.672170698642731,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.560215413570404,-0.568411111831665 ,-0.602550804615021,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.718839228153229,-0.15140588581562 ,0.678488373756409,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.203609570860863,-0.789041042327881 ,-0.579618275165558,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.54542750120163,-0.47233721613884 ,0.692391753196716,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.216090649366379,-0.800804913043976 ,-0.558584153652191,0.129999682307243,-0.674115300178528,0.727096021175385,-0.234902039170265,-0.663679361343384 ,0.710176527500153,0.216090649366379,-0.800804913043976,-0.558584153652191,0.585278213024139,-0.600160777568817 ,-0.54521232843399,0.451691657304764,-0.500417768955231,0.738618135452271,0.129999682307243,-0.674115300178528 ,0.727096021175385,0.585278213024139,-0.600160777568817,-0.54521232843399,0.897243618965149,-0.439534097909927 ,-0.0419950634241104,0.64369797706604,-0.188760459423065,0.741634964942932,0.451691657304764,-0.500417768955231 ,0.738618135452271,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.634316861629486,0.173373848199844 ,0.753381490707397,0.654116809368134,0.177300214767456,0.735320270061493,0.64369797706604,-0.188760459423065 ,0.741634964942932,0.634316861629486,0.173373848199844,0.753381490707397,0.465378105640411,0.486588507890701 ,0.739361107349396,0.479970723390579,0.499263644218445,0.72136253118515,0.654116809368134,0.177300214767456,0.735320270061493 ,0.465378105640411,0.486588507890701,0.739361107349396,0.161993652582169,0.672100722789764,0.722522437572479 ,0.168181717395782,0.690484523773193,0.703523993492126,0.479970723390579,0.499263644218445,0.72136253118515,0.161993652582169 ,0.672100722789764,0.722522437572479,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.197243928909302 ,0.699767708778381,0.686600387096405,0.168181717395782,0.690484523773193,0.703523993492126,0.037516862154007 ,-0.0272734649479389,-0.998923718929291,0.359685301780701,-0.109944850206375,-0.926573574542999,0.304495304822922 ,-0.222503274679184,-0.926161408424377,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.368203610181808 ,0.0610124915838242,-0.92774111032486,0.359685301780701,-0.109944850206375,-0.926573574542999,0.037516862154007 ,-0.0272734649479389,-0.998923718929291,0.287971884012222,0.213878870010376,-0.933449566364288,0.368203610181808 ,0.0610124915838242,-0.92774111032486,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.140473276376724 ,0.304339796304703,-0.942148923873901,0.287971884012222,0.213878870010376,-0.933449566364288,0.037516862154007 ,-0.0272734649479389,-0.998923718929291,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.140473276376724 ,0.304339796304703,-0.942148923873901,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.147164434194565 ,0.259054154157639,-0.954585552215576,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.387186944484711 ,-0.118426606059074,-0.914363980293274,-0.248975187540054,0.126625880599022,-0.960196435451508,0.0634305104613304 ,-0.00267115444876254,-0.997982680797577,-0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806 ,-0.437338262796402,-0.895502805709839,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.0634305104613304 ,-0.00267115444876254,-0.997982680797577,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.197243928909302 ,0.699767708778381,0.686600387096405,-0.518197417259216,0.525039672851563,0.675133109092712,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,-0.518197417259216,0.525039672851563,0.675133109092712,-0.708945393562317 ,0.213501617312431,0.672170698642731,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.708945393562317 ,0.213501617312431,0.672170698642731,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.54542750120163 ,-0.47233721613884,0.692391753196716,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.54542750120163 ,-0.47233721613884,0.692391753196716,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,-0.234902039170265,-0.663679361343384,0.710176527500153,0.129999682307243 ,-0.674115300178528,0.727096021175385,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.129999682307243 ,-0.674115300178528,0.727096021175385,0.451691657304764,-0.500417768955231,0.738618135452271,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,0.451691657304764,-0.500417768955231,0.738618135452271,0.64369797706604 ,-0.188760459423065,0.741634964942932,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.64369797706604 ,-0.188760459423065,0.741634964942932,0.654116809368134,0.177300214767456,0.735320270061493,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,0.654116809368134,0.177300214767456,0.735320270061493,0.479970723390579 ,0.499263644218445,0.72136253118515,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.479970723390579 ,0.499263644218445,0.72136253118515,0.168181717395782,0.690484523773193,0.703523993492126,-0.0474429130554199 ,0.0178848132491112,0.998713791370392,0.168181717395782,0.690484523773193,0.703523993492126,-0.197243928909302 ,0.699767708778381,0.686600387096405,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.376014769077301 ,0.9161736369133,-0.138703793287277,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.525119662284851 ,0.574203789234161,-0.628123641014099,0.462890416383743,-0.538564682006836,-0.704045832157135,0.187471479177475 ,-0.174140021204948,-0.9667107462883,0.230113714933395,-0.14894126355648,-0.961698591709137,0.690046310424805 ,-0.637357771396637,-0.342944711446762,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.176630616188049 ,0.235003083944321,-0.955811262130737,0.230113714933395,-0.14894126355648,-0.961698591709137,0.187471479177475 ,-0.174140021204948,-0.9667107462883,0.0672855526208878,0.000956431380473077,-0.997733294963837,-0.176630616188049 ,0.235003083944321,-0.955811262130737,-0.147164434194565,0.259054154157639,-0.954585552215576,0.037516862154007 ,-0.0272734649479389,-0.998923718929291,0.277595341205597,-0.251689046621323,-0.92714262008667,0.0672855526208878 ,0.000956431380473077,-0.997733294963837,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.304495304822922 ,-0.222503274679184,-0.926161408424377,-0.0779055655002594,0.162667319178581,-0.983600556850433,0.277595341205597 ,-0.251689046621323,-0.92714262008667,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.106314696371555 ,0.128722757101059,-0.985965311527252,-0.568253636360168,0.691138505935669,-0.446559488773346,-0.0779055655002594 ,0.162667319178581,-0.983600556850433,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.457403212785721 ,0.433727949857712,-0.776313304901123,0.0672584101557732,0.000950529880356044,-0.997735142707825,-0.186045140028 ,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.0672584101557732 ,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,0.0672584101557732 ,0.000950529880356044,-0.997735142707825,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394 ,-0.260888695716858,-0.922210872173309,-0.0494545698165894,0.00981395319104195,0.998728156089783,-0.563491702079773 ,0.64732563495636,0.513270497322083,-0.376014769077301,0.9161736369133,-0.138703793287277,0.161993652582169,0.672100722789764 ,0.722522437572479,-0.0524277351796627,0.0131527418270707,0.998538076877594,-0.0494545698165894,0.00981395319104195 ,0.998728156089783,0.161993652582169,0.672100722789764,0.722522437572479,0.465378105640411,0.486588507890701 ,0.739361107349396,-0.0554704740643501,0.0163217782974243,0.998326897621155,-0.0524277351796627,0.0131527418270707 ,0.998538076877594,0.465378105640411,0.486588507890701,0.739361107349396,0.634316861629486,0.173373848199844 ,0.753381490707397,0.562596559524536,-0.566279470920563,0.602339327335358,-0.0554704740643501,0.0163217782974243 ,0.998326897621155,0.634316861629486,0.173373848199844,0.753381490707397,0.897243618965149,-0.439534097909927 ,-0.0419950634241104,0.0671186223626137,0.000861435197293758,-0.997744619846344,-0.248975187540054,0.126625880599022 ,-0.960196435451508,-0.198622241616249,0.25632917881012,-0.945962250232697,0.0671186223626137,0.000861435197293758 ,-0.997744619846344,0.213518917560577,-0.146410331130028,-0.965905606746674,-0.198622241616249,0.25632917881012 ,-0.945962250232697,-0.248975187540054,0.126625880599022,-0.960196435451508,0.247289061546326,-0.083899550139904 ,-0.965302526950836,0.562577784061432,-0.566266417503357,0.602369129657745,0.213518917560577,-0.146410331130028 ,-0.965905606746674,0.247289061546326,-0.083899550139904,-0.965302526950836,0.713191151618958,-0.304302185773849 ,0.631473302841187,0.713191151618958,-0.304302185773849,0.631473302841187,-0.0554691106081009,0.016322173178196 ,0.9983269572258,-0.0554691106081009,0.016322173178196,0.9983269572258,0.562577784061432,-0.566266417503357,0.602369129657745 ,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239 ,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0554691106081009,0.016322173178196,0.9983269572258 ,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427 ,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.052426990121603,0.0131535343825817,0.998538136482239 ,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204 ,-0.559975147247314,0.642372965812683,0.523244559764862,-0.0494528710842133,0.00981275457888842,0.998728215694427 ,-0.294516265392303,0.773154675960541,0.56168669462204,-0.00743300467729568,0.191485971212387,-0.981467187404633 ,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.559975147247314,0.642372965812683,0.523244559764862 ,0.168216422200203,-0.316025346517563,-0.933719038963318,0.295631766319275,-0.272996246814728,-0.915464341640472 ,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.00743300467729568,0.191485971212387,-0.981467187404633 ,0.168216422200203,-0.316025346517563,-0.933719038963318,0.0671186223626137,0.000861435197293758,-0.997744619846344 ,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.295631766319275,-0.272996246814728,-0.915464341640472 ,0.448934882879257,0.813904881477356,-0.368803858757019,0.44893816113472,0.813904583454132,-0.368800550699234 ,0.440851420164108,0.897496819496155,0.0122249089181423,0.440847247838974,0.897498905658722,0.0122235044836998 ,0.44893816113472,0.813904583454132,-0.368800550699234,0.539011299610138,0.767137050628662,-0.347803890705109 ,0.440850377082825,0.897497296333313,0.0122277606278658,0.440851420164108,0.897496819496155,0.0122249089181423 ,0.539011299610138,0.767137050628662,-0.347803890705109,0.545111775398254,0.763338685035706,-0.346651464700699 ,0.440852701663971,0.897496223449707,0.012224905192852,0.440850377082825,0.897497296333313,0.0122277606278658 ,0.545111775398254,0.763338685035706,-0.346651464700699,0.455776125192642,0.810517728328705,-0.367871195077896 ,0.442016541957855,0.896921515464783,0.012377162463963,0.440852701663971,0.897496223449707,0.012224905192852 ,0.455776125192642,0.810517728328705,-0.367871195077896,0.142660588026047,0.912153422832489,-0.384218811988831 ,0.122088372707367,0.992165386676788,-0.0265009626746178,0.442016541957855,0.896921515464783,0.012377162463963 ,0.122088372707367,0.992165386676788,-0.0265009626746178,0.142660588026047,0.912153422832489,-0.384218811988831 ,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.61342579126358,0.783559501171112,-0.0987081080675125 ,0.142660588026047,0.912153422832489,-0.384218811988831,0.137940660119057,0.361901491880417,-0.921954274177551 ,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.513519883155823,0.72038060426712,-0.466207087039948 ,0.142660588026047,0.912153422832489,-0.384218811988831,0.455776125192642,0.810517728328705,-0.367871195077896 ,0.283052384853363,0.298188000917435,-0.911572933197021,0.137940660119057,0.361901491880417,-0.921954274177551 ,0.455776125192642,0.810517728328705,-0.367871195077896,0.545111775398254,0.763338685035706,-0.346651464700699 ,0.492568016052246,0.186314031481743,-0.850096344947815,0.283052384853363,0.298188000917435,-0.911572933197021 ,0.545111775398254,0.763338685035706,-0.346651464700699,0.539011299610138,0.767137050628662,-0.347803890705109 ,0.478817075490952,0.194986343383789,-0.85598748922348,0.492568016052246,0.186314031481743,-0.850096344947815 ,0.539011299610138,0.767137050628662,-0.347803890705109,0.44893816113472,0.813904583454132,-0.368800550699234 ,0.316425144672394,0.418457597494125,-0.851333260536194,0.478817075490952,0.194986343383789,-0.85598748922348 ,0.44893816113472,0.813904583454132,-0.368800550699234,0.448934882879257,0.813904881477356,-0.368803858757019 ,0.388678818941116,0.606405913829803,-0.693686246871948,0.316425144672394,0.418457597494125,-0.851333260536194 ,-0.61342579126358,0.783559501171112,-0.0987081080675125,-0.513519883155823,0.72038060426712,-0.466207087039948 ,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.994015336036682,-0.013940011151135,-0.108347617089748 ,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.202121838927269,0.379350662231445,-0.902906358242035 ,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.877225399017334,-0.0474915951490402,-0.477723956108093 ,-0.202121838927269,0.379350662231445,-0.902906358242035,0.137940660119057,0.361901491880417,-0.921954274177551 ,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.407863765954971,-0.0665257051587105,-0.910615980625153 ,0.137940660119057,0.361901491880417,-0.921954274177551,0.283052384853363,0.298188000917435,-0.911572933197021 ,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.18805918097496,-0.322835922241211,-0.927583277225494 ,0.283052384853363,0.298188000917435,-0.911572933197021,0.492568016052246,0.186314031481743,-0.850096344947815 ,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.0553795695304871,-0.388206869363785,-0.919906795024872 ,0.492568016052246,0.186314031481743,-0.850096344947815,0.478817075490952,0.194986343383789,-0.85598748922348 ,0.145911514759064,-0.481736391782761,-0.864083230495453,0.161093965172768,-0.487442761659622,-0.858165621757507 ,0.478817075490952,0.194986343383789,-0.85598748922348,0.316425144672394,0.418457597494125,-0.851333260536194 ,-0.0688509345054626,-0.381582528352737,-0.921766996383667,0.145911514759064,-0.481736391782761,-0.864083230495453 ,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.877225399017334,-0.0474915951490402,-0.477723956108093 ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.698107659816742,-0.714397788047791,-0.0477649942040443 ,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.18805918097496,-0.322835922241211,-0.927583277225494 ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.877225399017334,-0.0474915951490402,-0.477723956108093 ,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.0553795695304871,-0.388206869363785,-0.919906795024872 ,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.617421507835388,-0.677755653858185,-0.399296700954437 ,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.161093965172768,-0.487442761659622,-0.858165621757507 ,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.360949605703354,-0.846770226955414,-0.390762716531754 ,0.161093965172768,-0.487442761659622,-0.858165621757507,0.145911514759064,-0.481736391782761,-0.864083230495453 ,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.267079532146454,-0.890150487422943,-0.36918917298317 ,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.0688509345054626,-0.381582528352737,-0.921766996383667 ,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.273802310228348,-0.887621462345123,-0.370351791381836 ,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.360949605703354,-0.846770226955414,-0.390762716531754 ,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.698107659816742,-0.714397788047791,-0.0477649942040443 ,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.267079532146454,-0.890150487422943,-0.36918917298317 ,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.442009299993515,-0.896925032138824,-0.0123796230182052 ,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.273802310228348,-0.887621462345123,-0.370351791381836 ,-0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.440844893455505,-0.897499859333038,-0.0122388359159231 ,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.365646749734879,-0.844457924365997,-0.391399145126343 ,-0.440847545862198,-0.897498548030853,-0.0122386990115047,-0.440846532583237,-0.897499084472656,-0.0122378673404455 ,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.845829725265503,-0.252385228872299,0.469972103834152 ,-0.235922157764435,0.199316576123238,0.951111793518066,-0.421170502901077,0.887910008430481,0.185016736388206 ,-0.235922157764435,0.199316576123238,0.951111793518066,0.433050602674484,0.2669917345047,0.860919594764709,0.224865674972534 ,0.969921231269836,0.0932112112641335,-0.421170502901077,0.887910008430481,0.185016736388206,0.433050602674484 ,0.2669917345047,0.860919594764709,0.957085728645325,-0.0379634574055672,0.287307798862457,0.726850271224976 ,0.572953879833221,-0.378698468208313,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976 ,0.572953879833221,-0.378698468208313,0.957085728645325,-0.0379634574055672,0.287307798862457,0.456055998802185 ,-0.77651709318161,-0.434780597686768,0.24622069299221,-0.288397252559662,-0.925312042236328,0.24622069299221 ,-0.288397252559662,-0.925312042236328,0.456055998802185,-0.77651709318161,-0.434780597686768,-0.634028613567352 ,-0.730724096298218,-0.253081113100052,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.732778429985046 ,-0.419793635606766,-0.535545647144318,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.845829725265503 ,-0.252385228872299,0.469972103834152,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.944567203521729 ,-0.0448826812207699,0.32523587346077,-0.370245814323425,0.399501115083694,0.838639914989471,-0.349220633506775 ,0.932596325874329,0.0911537334322929,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775 ,0.932596325874329,0.0911537334322929,-0.370245814323425,0.399501115083694,0.838639914989471,0.375980079174042 ,0.371540576219559,0.848879635334015,0.369482100009918,0.916309058666229,0.154469192028046,0.369482100009918 ,0.916309058666229,0.154469192028046,0.375980079174042,0.371540576219559,0.848879635334015,0.894815683364868 ,-0.12337201833725,0.429050445556641,0.928892433643341,0.347320407629013,-0.128558844327927,0.894815683364868 ,-0.12337201833725,0.429050445556641,0.416108936071396,-0.85736757516861,-0.302942514419556,0.484689444303513 ,-0.474302530288696,-0.734923958778381,0.928892433643341,0.347320407629013,-0.128558844327927,0.416108936071396 ,-0.85736757516861,-0.302942514419556,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.60913348197937 ,-0.356543242931366,-0.708401918411255,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.688949525356293 ,-0.657936096191406,-0.304086625576019,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.884408414363861 ,0.372294396162033,-0.281458079814911,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.71156644821167 ,0.465114206075668,-0.52663266658783,-0.968230009078979,0.101840510964394,0.228383734822273,-0.409153193235397 ,0.62424099445343,0.665519952774048,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.1602942943573,0.98438024520874 ,-0.0728094503283501,-0.409153193235397,0.62424099445343,0.665519952774048,0.232475742697716,0.544684231281281 ,0.805775463581085,0.487440526485443,0.864142239093781,0.125139698386192,0.232475742697716,0.544684231281281 ,0.805775463581085,0.731430292129517,-0.0698081851005554,0.678333699703217,0.977178752422333,0.20803302526474 ,0.0429406240582466,0.487440526485443,0.864142239093781,0.125139698386192,0.731430292129517,-0.0698081851005554 ,0.678333699703217,0.338283896446228,-0.929607927799225,0.146263748407364,0.618484795093536,-0.605106949806213 ,-0.501320481300354,0.977178752422333,0.20803302526474,0.0429406240582466,0.338283896446228,-0.929607927799225 ,0.146263748407364,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.411054730415344,-0.414192497730255 ,-0.812082886695862,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.681281208992004,-0.719342052936554 ,-0.135657235980034,-0.968230009078979,0.101840510964394,0.228383734822273,-0.71156644821167,0.465114206075668 ,-0.52663266658783,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.46152138710022,0.495068192481995 ,-0.73614227771759,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.469395011663437,0.732399642467499 ,0.493212997913361,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.469395011663437,0.732399642467499 ,0.493212997913361,0.0926875099539757,0.587645053863525,0.803792417049408,0.554872810840607,0.810436189174652 ,0.187907695770264,0.00481484783813357,0.982931971549988,-0.183906376361847,0.0926875099539757,0.587645053863525 ,0.803792417049408,0.564271926879883,-0.0617093704640865,0.823279500007629,0.960403800010681,0.128028109669685 ,0.247453689575195,0.554872810840607,0.810436189174652,0.187907695770264,0.564271926879883,-0.0617093704640865 ,0.823279500007629,0.173397973179817,-0.937193632125854,0.302656918764114,0.640678882598877,-0.692017734050751 ,-0.33262899518013,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751 ,-0.33262899518013,0.173397973179817,-0.937193632125854,0.302656918764114,-0.733310759067535,-0.636212587356567 ,-0.239768356084824,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.733310759067535,-0.636212587356567 ,-0.239768356084824,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.46152138710022,0.495068192481995 ,-0.73614227771759,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.853244364261627,0.346652209758759 ,-0.389623284339905,-0.490928202867508,0.838506758213043,0.236423268914223,0.226359263062477,0.93932580947876 ,-0.257737308740616,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876 ,-0.257737308740616,-0.490928202867508,0.838506758213043,0.236423268914223,-0.0895224064588547,0.63932603597641 ,0.763706743717194,0.57053416967392,0.761871993541718,0.306662291288376,0.57053416967392,0.761871993541718,0.306662291288376 ,-0.0895224064588547,0.63932603597641,0.763706743717194,0.200342118740082,-0.0948356613516808,0.975125253200531 ,0.818824291229248,0.0307636950165033,0.573219299316406,0.200342118740082,-0.0948356613516808,0.975125253200531 ,-0.106568887829781,-0.917000472545624,0.384386867284775,0.603054106235504,-0.796112895011902,-0.0502992123365402 ,0.818824291229248,0.0307636950165033,0.573219299316406,-0.106568887829781,-0.917000472545624,0.384386867284775 ,-0.688571929931641,-0.57403826713562,-0.443112581968308,0.0145619604736567,-0.473971128463745,-0.880419969558716 ,0.603054106235504,-0.796112895011902,-0.0502992123365402,-0.688571929931641,-0.57403826713562,-0.443112581968308 ,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.0640924125909805,0.448149740695953,-0.891658008098602 ,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.636273860931396,0.352563947439194,-0.686188161373138 ,-0.471161872148514,0.881984531879425,-0.010475798510015,0.0175805017352104,0.980271637439728,-0.196871712803841 ,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841 ,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.272446572780609,0.69793826341629,0.662310421466827 ,0.0640470013022423,0.825317442417145,0.561025023460388,0.0640470013022423,0.825317442417145,0.561025023460388 ,-0.272446572780609,0.69793826341629,0.662310421466827,-0.156113177537918,-0.0394117124378681,0.986952602863312 ,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.156113177537918,-0.0394117124378681,0.986952602863312 ,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.0146371489390731,-0.971577882766724,0.236267194151878 ,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.344938427209854,-0.869564116001129,0.353377550840378 ,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.0737737640738487,-0.545523285865784,-0.834842383861542 ,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.560525834560394,-0.537862956523895,-0.629693746566772 ,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.0483600646257401,0.41675278544426,-0.907732546329498 ,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.126118883490562,0.0425354726612568,0.991102814674377 ,-0.488242149353027,0.767777740955353,0.414893865585327,-0.985833287239075,0.163165256381035,0.0388573855161667 ,-0.693171083927155,-0.380507975816727,0.612149894237518,0.21278840303421,0.936659038066864,0.278192192316055 ,-0.488242149353027,0.767777740955353,0.414893865585327,-0.126118883490562,0.0425354726612568,0.991102814674377 ,0.426090598106384,0.13983453810215,0.89380818605423,0.732098400592804,0.597899973392487,-0.32641613483429,0.21278840303421 ,0.936659038066864,0.278192192316055,0.426090598106384,0.13983453810215,0.89380818605423,0.951123833656311,-0.0359408818185329 ,0.306711047887802,0.300222218036652,-0.191066533327103,-0.934537410736084,0.732098400592804,0.597899973392487 ,-0.32641613483429,0.951123833656311,-0.0359408818185329,0.306711047887802,0.565304636955261,-0.708869636058807 ,-0.421822786331177,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.686947405338287,-0.371219843626022 ,-0.624739229679108,0.300222218036652,-0.191066533327103,-0.934537410736084,0.565304636955261,-0.708869636058807 ,-0.421822786331177,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.985833287239075,0.163165256381035 ,0.0388573855161667,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.513763785362244,-0.837060868740082 ,-0.188084691762924,0.839519679546356,-0.36930912733078,0.398519098758698,0.256522864103317,0.500971019268036 ,0.826573669910431,-0.378572434186935,0.294946253299713,0.877319574356079,-0.584547698497772,-0.607527673244476 ,0.537786364555359,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.622146844863892,-0.293455481529236 ,-0.725821733474731,0.408187568187714,-0.202498286962509,-0.890155792236328,0.839519679546356,-0.36930912733078 ,0.398519098758698,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876 ,-0.257737308740616,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.361195623874664,0.398085296154022 ,-0.843247175216675,0.226359263062477,0.93932580947876,-0.257737308740616,0.57053416967392,0.761871993541718 ,0.306662291288376,0.158035054802895,0.827060580253601,0.539440214633942,-0.129192128777504,0.97855806350708 ,-0.160416796803474,0.57053416967392,0.761871993541718,0.306662291288376,0.818824291229248,0.0307636950165033 ,0.573219299316406,0.379477560520172,-0.0227062478661537,0.924922287464142,0.158035054802895,0.827060580253601 ,0.539440214633942,0.818824291229248,0.0307636950165033,0.573219299316406,0.603054106235504,-0.796112895011902 ,-0.0502992123365402,0.143845021724701,-0.97483503818512,0.170309022068977,0.379477560520172,-0.0227062478661537 ,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,0.603054106235504,-0.796112895011902 ,-0.0502992123365402,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.282981604337692,-0.529688954353333 ,-0.799594283103943,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.0640924125909805,0.448149740695953 ,-0.891658008098602,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.282981604337692,-0.529688954353333 ,-0.799594283103943,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.471161872148514,0.881984531879425 ,-0.010475798510015,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.361195623874664,0.398085296154022 ,-0.843247175216675,0.158035054802895,0.827060580253601,0.539440214633942,-0.272446572780609,0.69793826341629 ,0.662310421466827,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.129192128777504,0.97855806350708 ,-0.160416796803474,0.379477560520172,-0.0227062478661537,0.924922287464142,-0.156113177537918,-0.0394117124378681 ,0.986952602863312,-0.272446572780609,0.69793826341629,0.662310421466827,0.158035054802895,0.827060580253601 ,0.539440214633942,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.156113177537918,-0.0394117124378681 ,0.986952602863312,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512 ,0.170309022068977,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.344938427209854,-0.869564116001129 ,0.353377550840378,0.143845021724701,-0.97483503818512,0.170309022068977,-0.282981604337692,-0.529688954353333 ,-0.799594283103943,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.636273860931396,0.352563947439194 ,-0.686188161373138,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.282981604337692,-0.529688954353333 ,-0.799594283103943,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.421170502901077,0.887910008430481 ,0.185016736388206,-0.466424465179443,0.73600161075592,0.490662693977356,-0.991045475006104,0.116085380315781 ,0.0659778565168381,-0.421170502901077,0.887910008430481,0.185016736388206,0.224865674972534,0.969921231269836 ,0.0932112112641335,0.32935905456543,0.802997291088104,0.496707141399384,-0.466424465179443,0.73600161075592 ,0.490662693977356,0.32935905456543,0.802997291088104,0.496707141399384,0.224865674972534,0.969921231269836,0.0932112112641335 ,0.726850271224976,0.572953879833221,-0.378698468208313,0.955747485160828,0.277235507965088,-0.0984230935573578 ,0.955747485160828,0.277235507965088,-0.0984230935573578,0.726850271224976,0.572953879833221,-0.378698468208313 ,0.24622069299221,-0.288397252559662,-0.925312042236328,0.266901016235352,-0.573494374752045,-0.774511456489563 ,0.266901016235352,-0.573494374752045,-0.774511456489563,0.24622069299221,-0.288397252559662,-0.925312042236328 ,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.733418405056,-0.496127247810364,-0.464709877967834 ,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.961783766746521,0.263442039489746,-0.0746343955397606 ,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.733418405056,-0.496127247810364,-0.464709877967834 ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.884408414363861,0.372294396162033,-0.281458079814911 ,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.408735007047653,0.821314215660095,0.397968202829361 ,-0.466424465179443,0.73600161075592,0.490662693977356,-0.370245814323425,0.399501115083694,0.838639914989471 ,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.991045475006104,0.116085380315781,0.0659778565168381 ,-0.349220633506775,0.932596325874329,0.0911537334322929,0.369482100009918,0.916309058666229,0.154469192028046 ,0.314681202173233,0.790566682815552,0.525338053703308,-0.408735007047653,0.821314215660095,0.397968202829361 ,0.32935905456543,0.802997291088104,0.496707141399384,0.375980079174042,0.371540576219559,0.848879635334015,-0.370245814323425 ,0.399501115083694,0.838639914989471,-0.466424465179443,0.73600161075592,0.490662693977356,0.369482100009918 ,0.916309058666229,0.154469192028046,0.928892433643341,0.347320407629013,-0.128558844327927,0.935888707637787 ,0.150985181331635,0.318301498889923,0.314681202173233,0.790566682815552,0.525338053703308,0.955747485160828 ,0.277235507965088,-0.0984230935573578,0.894815683364868,-0.12337201833725,0.429050445556641,0.375980079174042 ,0.371540576219559,0.848879635334015,0.32935905456543,0.802997291088104,0.496707141399384,0.928892433643341,0.347320407629013 ,-0.128558844327927,0.484689444303513,-0.474302530288696,-0.734923958778381,0.477653324604034,-0.817450523376465 ,-0.321903645992279,0.935888707637787,0.150985181331635,0.318301498889923,0.416108936071396,-0.85736757516861 ,-0.302942514419556,0.894815683364868,-0.12337201833725,0.429050445556641,0.955747485160828,0.277235507965088 ,-0.0984230935573578,0.266901016235352,-0.573494374752045,-0.774511456489563,0.477653324604034,-0.817450523376465 ,-0.321903645992279,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.60913348197937,-0.356543242931366 ,-0.708401918411255,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.688949525356293,-0.657936096191406 ,-0.304086625576019,0.416108936071396,-0.85736757516861,-0.302942514419556,0.266901016235352,-0.573494374752045 ,-0.774511456489563,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.60913348197937,-0.356543242931366 ,-0.708401918411255,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.969522476196289,0.24116288125515 ,-0.043204452842474,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.991045475006104,0.116085380315781 ,0.0659778565168381,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.688949525356293,-0.657936096191406 ,-0.304086625576019,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.878820657730103,0.367129892110825 ,-0.304778426885605,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.1602942943573,0.98438024520874,-0.0728094503283501 ,-0.327859699726105,0.917791128158569,0.223981082439423,-0.408735007047653,0.821314215660095,0.397968202829361 ,-0.409153193235397,0.62424099445343,0.665519952774048,-0.968230009078979,0.101840510964394,0.228383734822273 ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.1602942943573,0.98438024520874,-0.0728094503283501 ,0.487440526485443,0.864142239093781,0.125139698386192,0.318696260452271,0.794055461883545,0.517598927021027 ,-0.327859699726105,0.917791128158569,0.223981082439423,0.314681202173233,0.790566682815552,0.525338053703308 ,0.232475742697716,0.544684231281281,0.805775463581085,-0.409153193235397,0.62424099445343,0.665519952774048 ,-0.408735007047653,0.821314215660095,0.397968202829361,0.487440526485443,0.864142239093781,0.125139698386192 ,0.977178752422333,0.20803302526474,0.0429406240582466,0.865680992603302,0.0555743537843227,0.497501730918884 ,0.318696260452271,0.794055461883545,0.517598927021027,0.935888707637787,0.150985181331635,0.318301498889923 ,0.731430292129517,-0.0698081851005554,0.678333699703217,0.232475742697716,0.544684231281281,0.805775463581085 ,0.314681202173233,0.790566682815552,0.525338053703308,0.977178752422333,0.20803302526474,0.0429406240582466 ,0.618484795093536,-0.605106949806213,-0.501320481300354,0.482842773199081,-0.868827641010284,-0.109550587832928 ,0.865680992603302,0.0555743537843227,0.497501730918884,0.338283896446228,-0.929607927799225,0.146263748407364 ,0.731430292129517,-0.0698081851005554,0.678333699703217,0.935888707637787,0.150985181331635,0.318301498889923 ,0.477653324604034,-0.817450523376465,-0.321903645992279,0.482842773199081,-0.868827641010284,-0.109550587832928 ,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.411054730415344,-0.414192497730255,-0.812082886695862 ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.681281208992004,-0.719342052936554,-0.135657235980034 ,0.338283896446228,-0.929607927799225,0.146263748407364,0.477653324604034,-0.817450523376465,-0.321903645992279 ,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.411054730415344,-0.414192497730255,-0.812082886695862 ,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.878820657730103,0.367129892110825,-0.304778426885605 ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.968230009078979,0.101840510964394,0.228383734822273 ,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.699752986431122,-0.557938694953918,-0.446150362491608 ,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.46152138710022,0.495068192481995,-0.73614227771759 ,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.258809417486191,0.965757608413696,0.0181634556502104 ,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.327859699726105,0.917791128158569,0.223981082439423 ,-0.469395011663437,0.732399642467499,0.493212997913361,-0.971816718578339,0.234788149595261,-0.0211378261446953 ,-0.878820657730103,0.367129892110825,-0.304778426885605,0.00481484783813357,0.982931971549988,-0.183906376361847 ,0.554872810840607,0.810436189174652,0.187907695770264,0.248662516474724,0.809659063816071,0.531619369983673 ,-0.258809417486191,0.965757608413696,0.0181634556502104,0.318696260452271,0.794055461883545,0.517598927021027 ,0.0926875099539757,0.587645053863525,0.803792417049408,-0.469395011663437,0.732399642467499,0.493212997913361 ,-0.327859699726105,0.917791128158569,0.223981082439423,0.554872810840607,0.810436189174652,0.187907695770264 ,0.960403800010681,0.128028109669685,0.247453689575195,0.678723812103271,-0.00691590458154678,0.734361052513123 ,0.248662516474724,0.809659063816071,0.531619369983673,0.865680992603302,0.0555743537843227,0.497501730918884 ,0.564271926879883,-0.0617093704640865,0.823279500007629,0.0926875099539757,0.587645053863525,0.803792417049408 ,0.318696260452271,0.794055461883545,0.517598927021027,0.678723812103271,-0.00691590458154678,0.734361052513123 ,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013 ,0.291824638843536,-0.956135869026184,0.0253480579704046,0.173397973179817,-0.937193632125854,0.302656918764114 ,0.564271926879883,-0.0617093704640865,0.823279500007629,0.865680992603302,0.0555743537843227,0.497501730918884 ,0.482842773199081,-0.868827641010284,-0.109550587832928,0.291824638843536,-0.956135869026184,0.0253480579704046 ,0.640678882598877,-0.692017734050751,-0.33262899518013,-0.267235428094864,-0.431134343147278,-0.861805319786072 ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.733310759067535,-0.636212587356567,-0.239768356084824 ,0.173397973179817,-0.937193632125854,0.302656918764114,0.482842773199081,-0.868827641010284,-0.109550587832928 ,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.267235428094864,-0.431134343147278,-0.861805319786072 ,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.672615647315979,0.435778170824051,-0.598068177700043 ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.971816718578339,0.234788149595261,-0.0211378261446953 ,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.610901474952698,-0.556556701660156,-0.563066601753235 ,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.258809417486191,0.965757608413696,0.0181634556502104 ,-0.490928202867508,0.838506758213043,0.236423268914223,-0.853244364261627,0.346652209758759,-0.389623284339905 ,-0.672615647315979,0.435778170824051,-0.598068177700043,0.248662516474724,0.809659063816071,0.531619369983673 ,-0.0895224064588547,0.63932603597641,0.763706743717194,-0.490928202867508,0.838506758213043,0.236423268914223 ,-0.258809417486191,0.965757608413696,0.0181634556502104,0.678723812103271,-0.00691590458154678,0.734361052513123 ,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.0895224064588547,0.63932603597641,0.763706743717194 ,0.248662516474724,0.809659063816071,0.531619369983673,-0.106568887829781,-0.917000472545624,0.384386867284775 ,0.200342118740082,-0.0948356613516808,0.975125253200531,0.678723812103271,-0.00691590458154678,0.734361052513123 ,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.688571929931641,-0.57403826713562,-0.443112581968308 ,-0.106568887829781,-0.917000472545624,0.384386867284775,0.291824638843536,-0.956135869026184,0.0253480579704046 ,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.853244364261627,0.346652209758759,-0.389623284339905 ,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.507272720336914,-0.507041871547699,-0.696837842464447 ,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.41831374168396,0.542322099208832,0.728629112243652 ,-0.235922157764435,0.199316576123238,0.951111793518066,-0.845829725265503,-0.252385228872299,0.469972103834152 ,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.374769628047943,0.711422443389893,0.594496309757233 ,0.433050602674484,0.2669917345047,0.860919594764709,-0.235922157764435,0.199316576123238,0.951111793518066,-0.41831374168396 ,0.542322099208832,0.728629112243652,0.957085728645325,-0.0379634574055672,0.287307798862457,0.433050602674484 ,0.2669917345047,0.860919594764709,0.374769628047943,0.711422443389893,0.594496309757233,0.948985993862152,0.294174909591675 ,-0.113519780337811,0.456055998802185,-0.77651709318161,-0.434780597686768,0.957085728645325,-0.0379634574055672 ,0.287307798862457,0.948985993862152,0.294174909591675,-0.113519780337811,0.373983144760132,-0.495919108390808 ,-0.783709645271301,-0.634028613567352,-0.730724096298218,-0.253081113100052,0.456055998802185,-0.77651709318161 ,-0.434780597686768,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.678203999996185,-0.559847712516785 ,-0.476035594940186,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.845829725265503,-0.252385228872299 ,0.469972103834152,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.678203999996185,-0.559847712516785 ,-0.476035594940186,-0.238327190279961,0.167034506797791,0.956712901592255,-0.126118883490562,0.0425354726612568 ,0.991102814674377,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.871865928173065,-0.182605341076851 ,0.454428285360336,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.488242149353027,0.767777740955353 ,0.414893865585327,-0.41831374168396,0.542322099208832,0.728629112243652,-0.976834237575531,-0.0582810156047344 ,0.205908060073853,0.359920799732208,0.294513046741486,0.88527911901474,0.426090598106384,0.13983453810215,0.89380818605423 ,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.238327190279961,0.167034506797791,0.956712901592255 ,-0.488242149353027,0.767777740955353,0.414893865585327,0.21278840303421,0.936659038066864,0.278192192316055 ,0.374769628047943,0.711422443389893,0.594496309757233,-0.41831374168396,0.542322099208832,0.728629112243652 ,0.971750199794769,0.155082061886787,0.177907571196556,0.951123833656311,-0.0359408818185329,0.306711047887802 ,0.426090598106384,0.13983453810215,0.89380818605423,0.359920799732208,0.294513046741486,0.88527911901474,0.21278840303421 ,0.936659038066864,0.278192192316055,0.732098400592804,0.597899973392487,-0.32641613483429,0.948985993862152 ,0.294174909591675,-0.113519780337811,0.374769628047943,0.711422443389893,0.594496309757233,0.565304636955261 ,-0.708869636058807,-0.421822786331177,0.951123833656311,-0.0359408818185329,0.306711047887802,0.971750199794769 ,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.948985993862152 ,0.294174909591675,-0.113519780337811,0.732098400592804,0.597899973392487,-0.32641613483429,0.300222218036652 ,-0.191066533327103,-0.934537410736084,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.513763785362244 ,-0.837060868740082,-0.188084691762924,0.565304636955261,-0.708869636058807,-0.421822786331177,0.502565324306488 ,-0.459530532360077,-0.732297599315643,-0.632987320423126,-0.605237662792206,-0.482715725898743,0.373983144760132 ,-0.495919108390808,-0.783709645271301,0.300222218036652,-0.191066533327103,-0.934537410736084,-0.686947405338287 ,-0.371219843626022,-0.624739229679108,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065 ,-0.182605341076851,0.454428285360336,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.513763785362244 ,-0.837060868740082,-0.188084691762924,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.686947405338287 ,-0.371219843626022,-0.624739229679108,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.976834237575531 ,-0.0582810156047344,0.205908060073853,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065 ,-0.182605341076851,0.454428285360336,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.378572434186935 ,0.294946253299713,0.877319574356079,-0.238327190279961,0.167034506797791,0.956712901592255,-0.378572434186935 ,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.359920799732208 ,0.294513046741486,0.88527911901474,-0.238327190279961,0.167034506797791,0.956712901592255,0.256522864103317 ,0.500971019268036,0.826573669910431,0.916088342666626,0.400877177715302,0.00892047397792339,0.971750199794769 ,0.155082061886787,0.177907571196556,0.359920799732208,0.294513046741486,0.88527911901474,0.916088342666626,0.400877177715302 ,0.00892047397792339,0.408187568187714,-0.202498286962509,-0.890155792236328,0.502565324306488,-0.459530532360077 ,-0.732297599315643,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077 ,-0.732297599315643,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236 ,-0.725821733474731,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.632987320423126,-0.605237662792206 ,-0.482715725898743,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.976081073284149,0.0319094844162464 ,0.215052559971809,-0.871865928173065,-0.182605341076851,0.454428285360336,0.957568049430847,0.202899873256683 ,-0.204682797193527,0.497125834226608,0.858945310115814,0.122795671224594,0.373975813388824,0.180082246661186 ,0.909787058830261,0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186 ,0.909787058830261,0.497125834226608,0.858945310115814,0.122795671224594,-0.14895835518837,0.98171204328537,0.118544928729534 ,-0.295474290847778,0.289970576763153,0.910281300544739,-0.295474290847778,0.289970576763153,0.910281300544739 ,-0.14895835518837,0.98171204328537,0.118544928729534,-0.733866095542908,0.619026124477386,-0.279727041721344 ,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.733866095542908,0.619026124477386,-0.279727041721344 ,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.558293402194977,-0.744525730609894,-0.366046398878098 ,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.386270940303802,-0.268448829650879,-0.88245677947998 ,0.626136362552643,-0.462657570838928,-0.627615451812744,0.547039151191711,-0.767979085445404,-0.333100914955139 ,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.626136362552643,-0.462657570838928,-0.627615451812744 ,0.957568049430847,0.202899873256683,-0.204682797193527,0.883933007717133,-0.306944608688354,0.352771013975143 ,0.547039151191711,-0.767979085445404,-0.333100914955139,0.975085556507111,-0.105434238910675,0.195171296596527 ,0.86001181602478,0.317273110151291,-0.399646580219269,0.416134297847748,0.908453166484833,0.0393080599606037 ,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037 ,-0.287073612213135,0.937016367912292,0.198970049619675,-0.234096929430962,0.390781313180923,0.890218317508698 ,0.50421130657196,0.371916502714157,0.779390156269073,-0.287073612213135,0.937016367912292,0.198970049619675 ,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.834793627262115,-0.068818561732769,0.546245038509369 ,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369 ,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.608099102973938,-0.439832001924515,-0.660880744457245 ,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.506093978881836,-0.828284025192261,-0.240446254611015 ,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.484535843133926,-0.391038775444031,-0.782504737377167 ,0.599041819572449,-0.698567867279053,-0.391346126794815,0.599041819572449,-0.698567867279053,-0.391346126794815 ,0.484535843133926,-0.391038775444031,-0.782504737377167,0.86001181602478,0.317273110151291,-0.399646580219269 ,0.975085556507111,-0.105434238910675,0.195171296596527,0.661870062351227,0.421795666217804,-0.619690597057343 ,0.210457503795624,0.972685754299164,-0.0979291051626205,0.533453047275543,0.59451025724411,0.601652204990387 ,0.994639039039612,0.0399277433753014,0.0953883677721024,0.210457503795624,0.972685754299164,-0.0979291051626205 ,-0.410943269729614,0.892482936382294,0.186010345816612,-0.0871332660317421,0.554765582084656,0.827431499958038 ,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038 ,-0.410943269729614,0.892482936382294,0.186010345816612,-0.947485268115997,0.26874190568924,0.1733478307724,-0.636269569396973 ,-0.0266684051603079,0.771005690097809,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997 ,0.26874190568924,0.1733478307724,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575 ,-0.907169759273529,0.194461092352867,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.717132270336151 ,-0.562979400157928,-0.410822957754135,0.271069228649139,-0.435710102319717,-0.858299553394318,0.610304296016693 ,-0.760079562664032,-0.223176524043083,0.610304296016693,-0.760079562664032,-0.223176524043083,0.271069228649139 ,-0.435710102319717,-0.858299553394318,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612 ,0.0399277433753014,0.0953883677721024,0.38824450969696,0.468270719051361,-0.793718278408051,0.0321094393730164 ,0.982071399688721,-0.185754418373108,0.576588332653046,0.699405252933502,0.422348409891129,0.972901284694672 ,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164 ,0.982071399688721,-0.185754418373108,-0.472547024488449,0.842842221260071,0.257519453763962,0.0535213947296143 ,0.588878512382507,0.806447505950928,0.0535213947296143,0.588878512382507,0.806447505950928,-0.472547024488449 ,0.842842221260071,0.257519453763962,-0.908354461193085,0.186973229050636,0.374076366424561,-0.450931012630463 ,-0.0296851322054863,0.892065048217773,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.908354461193085 ,0.186973229050636,0.374076366424561,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.189478844404221 ,-0.925744891166687,0.327252507209778,-0.721794605255127,-0.649047315120697,-0.240312546491623,0.121086686849594 ,-0.443384885787964,-0.888114750385284,0.652944087982178,-0.679937779903412,-0.333689540624619,-0.189478844404221 ,-0.925744891166687,0.327252507209778,0.652944087982178,-0.679937779903412,-0.333689540624619,0.121086686849594 ,-0.443384885787964,-0.888114750385284,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672 ,0.173448488116264,-0.15290105342865,0.813007533550262,0.294095903635025,-0.502519965171814,-0.0286615137010813 ,0.447031855583191,-0.894058763980865,-0.199642360210419,0.952765345573425,-0.228869169950485,0.569939315319061 ,0.805042445659637,0.164547294378281,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.475066125392914 ,0.794856011867523,0.37751305103302,0.231555417180061,0.629199266433716,0.741950392723084,0.569939315319061,0.805042445659637 ,0.164547294378281,-0.475066125392914,0.794856011867523,0.37751305103302,-0.730549097061157,0.0796399638056755 ,0.67820018529892,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.231555417180061,0.629199266433716 ,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,-0.730549097061157,0.0796399638056755 ,0.67820018529892,-0.65307891368866,-0.756489455699921,0.0348084531724453,0.0996505841612816,-0.92350834608078 ,0.370408058166504,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.65307891368866,-0.756489455699921 ,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.585191905498505,-0.614215075969696 ,-0.529424488544464,0.585191905498505,-0.614215075969696,-0.529424488544464,-0.162778183817863,-0.468375027179718 ,-0.86840546131134,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.813007533550262,0.294095903635025 ,-0.502519965171814,0.558855295181274,0.314870893955231,-0.767161726951599,-0.0483600646257401,0.41675278544426 ,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,0.519844651222229,0.850727140903473 ,-0.0776200741529465,0.0175805017352104,0.980271637439728,-0.196871712803841,0.0640470013022423,0.825317442417145 ,0.561025023460388,0.402456730604172,0.676650583744049,0.616581320762634,0.519844651222229,0.850727140903473 ,-0.0776200741529465,0.0640470013022423,0.825317442417145,0.561025023460388,0.0680289566516876,0.0137546937912703 ,0.997588515281677,0.284913867712021,-0.0533209033310413,0.957068920135498,0.402456730604172,0.676650583744049 ,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.0680289566516876,0.0137546937912703 ,0.997588515281677,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.334185361862183,-0.890982747077942 ,0.307359427213669,0.334185361862183,-0.890982747077942,0.307359427213669,-0.0146371489390731,-0.971577882766724 ,0.236267194151878,-0.0737737640738487,-0.545523285865784,-0.834842383861542,0.435699939727783,-0.569284319877625 ,-0.697195053100586,0.435699939727783,-0.569284319877625,-0.697195053100586,-0.0737737640738487,-0.545523285865784 ,-0.834842383861542,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.558855295181274,0.314870893955231 ,-0.767161726951599,0.260944664478302,0.0303234942257404,0.964877367019653,0.744088768959045,-0.425844013690948 ,0.514770567417145,0.990352332592011,0.100834503769875,-0.0950506180524826,0.586896598339081,0.733868896961212 ,0.342036306858063,-0.114175498485565,0.946973264217377,0.300342559814453,-0.292137324810028,0.162486374378204 ,0.942472279071808,0.260944664478302,0.0303234942257404,0.964877367019653,0.586896598339081,0.733868896961212 ,0.342036306858063,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.901480376720428,0.0224926322698593 ,0.432235211133957,-0.292137324810028,0.162486374378204,0.942472279071808,-0.114175498485565,0.946973264217377 ,0.300342559814453,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.660339951515198,-0.670212745666504 ,-0.338771462440491,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.730445027351379,0.644031345844269 ,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,-0.660339951515198,-0.670212745666504 ,-0.338771462440491,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.571836888790131,-0.410920888185501 ,-0.710032820701599,0.744088768959045,-0.425844013690948,0.514770567417145,0.430197030305862,-0.866838395595551 ,-0.252034991979599,0.571836888790131,-0.410920888185501,-0.710032820701599,0.990352332592011,0.100834503769875 ,-0.0950506180524826,-0.799655735492706,-0.317605823278427,0.509585380554199,0.612414479255676,-0.645280599594116 ,0.456685394048691,0.511097252368927,0.266881614923477,0.817039608955383,-0.110857367515564,0.512554824352264 ,0.85146826505661,0.612414479255676,-0.645280599594116,0.456685394048691,-0.799655735492706,-0.317605823278427 ,0.509585380554199,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.49901670217514,-0.328819900751114 ,-0.801785349845886,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.268526494503021,0.378220826387405 ,-0.885913372039795,0.167536497116089,0.969197690486908,-0.18051965534687,-0.199642360210419,0.952765345573425 ,-0.228869169950485,-0.199642360210419,0.952765345573425,-0.228869169950485,0.167536497116089,0.969197690486908 ,-0.18051965534687,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.475066125392914,0.794856011867523 ,0.37751305103302,-0.475066125392914,0.794856011867523,0.37751305103302,-0.0316924452781677,0.833044230937958 ,0.55229789018631,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.730549097061157,0.0796399638056755 ,0.67820018529892,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.25203549861908,-0.00277848681434989 ,0.967713952064514,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.65307891368866,-0.756489455699921 ,0.0348084531724453,-0.18044501543045,-0.964608788490295,0.19227434694767,0.138857930898666,-0.542990744113922 ,-0.828178465366364,-0.162778183817863,-0.468375027179718,-0.86840546131134,-0.65307891368866,-0.756489455699921 ,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.138857930898666,-0.542990744113922 ,-0.828178465366364,0.268526494503021,0.378220826387405,-0.885913372039795,-0.0286615137010813,0.447031855583191 ,-0.894058763980865,0.167536497116089,0.969197690486908,-0.18051965534687,0.268526494503021,0.378220826387405 ,-0.885913372039795,0.558855295181274,0.314870893955231,-0.767161726951599,0.519844651222229,0.850727140903473 ,-0.0776200741529465,-0.0316924452781677,0.833044230937958,0.55229789018631,0.167536497116089,0.969197690486908 ,-0.18051965534687,0.519844651222229,0.850727140903473,-0.0776200741529465,0.402456730604172,0.676650583744049 ,0.616581320762634,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.0316924452781677,0.833044230937958 ,0.55229789018631,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413 ,0.957068920135498,0.334185361862183,-0.890982747077942,0.307359427213669,-0.18044501543045,-0.964608788490295 ,0.19227434694767,-0.25203549861908,-0.00277848681434989,0.967713952064514,0.284913867712021,-0.0533209033310413 ,0.957068920135498,0.435699939727783,-0.569284319877625,-0.697195053100586,0.138857930898666,-0.542990744113922 ,-0.828178465366364,-0.18044501543045,-0.964608788490295,0.19227434694767,0.334185361862183,-0.890982747077942 ,0.307359427213669,0.268526494503021,0.378220826387405,-0.885913372039795,0.138857930898666,-0.542990744113922 ,-0.828178465366364,0.435699939727783,-0.569284319877625,-0.697195053100586,0.558855295181274,0.314870893955231 ,-0.767161726951599,0.957568049430847,0.202899873256683,-0.204682797193527,0.996209383010864,0.0533985421061516 ,-0.0686690136790276,0.573537588119507,0.703198969364166,0.420197457075119,0.497125834226608,0.858945310115814 ,0.122795671224594,0.497125834226608,0.858945310115814,0.122795671224594,0.573537588119507,0.703198969364166 ,0.420197457075119,-0.208385854959488,0.819956362247467,0.533148169517517,-0.14895835518837,0.98171204328537 ,0.118544928729534,-0.208385854959488,0.819956362247467,0.533148169517517,-0.941002309322357,0.337059259414673 ,0.0300944726914167,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.14895835518837,0.98171204328537 ,0.118544928729534,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.404285073280334,-0.552336990833282 ,-0.72902500629425,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.733866095542908,0.619026124477386 ,-0.279727041721344,-0.404285073280334,-0.552336990833282,-0.72902500629425,0.631527423858643,-0.539189040660858 ,-0.557178795337677,0.626136362552643,-0.462657570838928,-0.627615451812744,-0.386270940303802,-0.268448829650879 ,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.631527423858643,-0.539189040660858 ,-0.557178795337677,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.957568049430847,0.202899873256683 ,-0.204682797193527,0.968059420585632,0.180046543478966,-0.17448265850544,0.509348154067993,0.792352139949799 ,0.335771501064301,0.416134297847748,0.908453166484833,0.0393080599606037,0.86001181602478,0.317273110151291 ,-0.399646580219269,0.573537588119507,0.703198969364166,0.420197457075119,0.996209383010864,0.0533985421061516 ,-0.0686690136790276,0.975085556507111,-0.105434238910675,0.195171296596527,0.50421130657196,0.371916502714157 ,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,0.509348154067993,0.792352139949799 ,0.335771501064301,-0.190792232751846,0.806503474712372,0.559598445892334,-0.287073612213135,0.937016367912292 ,0.198970049619675,-0.208385854959488,0.819956362247467,0.533148169517517,0.573537588119507,0.703198969364166 ,0.420197457075119,0.50421130657196,0.371916502714157,0.779390156269073,-0.234096929430962,0.390781313180923 ,0.890218317508698,-0.287073612213135,0.937016367912292,0.198970049619675,-0.190792232751846,0.806503474712372 ,0.559598445892334,-0.873119652271271,0.208043858408928,0.440885275602341,-0.91410881280899,0.405452340841293 ,-0.00367248360998929,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.208385854959488,0.819956362247467 ,0.533148169517517,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769 ,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.873119652271271,0.208043858408928 ,0.440885275602341,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.608099102973938,-0.439832001924515 ,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.404285073280334,-0.552336990833282 ,-0.72902500629425,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.834793627262115,-0.068818561732769 ,0.546245038509369,-0.567008674144745,-0.784497559070587,-0.251126945018768,0.596852362155914,-0.598833739757538 ,-0.534008800983429,0.484535843133926,-0.391038775444031,-0.782504737377167,-0.608099102973938,-0.439832001924515 ,-0.660880744457245,0.599041819572449,-0.698567867279053,-0.391346126794815,0.631527423858643,-0.539189040660858 ,-0.557178795337677,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.506093978881836,-0.828284025192261 ,-0.240446254611015,0.484535843133926,-0.391038775444031,-0.782504737377167,0.596852362155914,-0.598833739757538 ,-0.534008800983429,0.968059420585632,0.180046543478966,-0.17448265850544,0.86001181602478,0.317273110151291 ,-0.399646580219269,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.631527423858643,-0.539189040660858 ,-0.557178795337677,0.599041819572449,-0.698567867279053,-0.391346126794815,0.975085556507111,-0.105434238910675 ,0.195171296596527,0.851017236709595,0.312567472457886,-0.421984851360321,0.411976963281631,0.894454181194305 ,0.173858374357224,0.210457503795624,0.972685754299164,-0.0979291051626205,0.661870062351227,0.421795666217804 ,-0.619690597057343,0.509348154067993,0.792352139949799,0.335771501064301,0.968059420585632,0.180046543478966 ,-0.17448265850544,0.994639039039612,0.0399277433753014,0.0953883677721024,0.533453047275543,0.59451025724411 ,0.601652204990387,0.210457503795624,0.972685754299164,-0.0979291051626205,0.411976963281631,0.894454181194305 ,0.173858374357224,-0.195588424801826,0.810276031494141,0.552447199821472,-0.410943269729614,0.892482936382294 ,0.186010345816612,-0.190792232751846,0.806503474712372,0.559598445892334,0.509348154067993,0.792352139949799 ,0.335771501064301,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656 ,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.195588424801826,0.810276031494141 ,0.552447199821472,-0.785535871982574,0.107658803462982,0.60937911272049,-0.947485268115997,0.26874190568924 ,0.1733478307724,-0.873119652271271,0.208043858408928,0.440885275602341,-0.190792232751846,0.806503474712372 ,0.559598445892334,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.636269569396973,-0.0266684051603079 ,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.785535871982574,0.107658803462982,0.60937911272049 ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.717132270336151,-0.562979400157928,-0.410822957754135 ,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.567008674144745,-0.784497559070587,-0.251126945018768 ,-0.873119652271271,0.208043858408928,0.440885275602341,-0.636269569396973,-0.0266684051603079,0.771005690097809 ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,0.493326157331467,-0.591391324996948,-0.637875854969025 ,0.271069228649139,-0.435710102319717,-0.858299553394318,-0.717132270336151,-0.562979400157928,-0.410822957754135 ,0.610304296016693,-0.760079562664032,-0.223176524043083,0.596852362155914,-0.598833739757538,-0.534008800983429 ,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.373132437467575,-0.907169759273529,0.194461092352867 ,0.271069228649139,-0.435710102319717,-0.858299553394318,0.493326157331467,-0.591391324996948,-0.637875854969025 ,0.851017236709595,0.312567472457886,-0.421984851360321,0.661870062351227,0.421795666217804,-0.619690597057343 ,0.994639039039612,0.0399277433753014,0.0953883677721024,0.968059420585632,0.180046543478966,-0.17448265850544 ,0.596852362155914,-0.598833739757538,-0.534008800983429,0.610304296016693,-0.760079562664032,-0.223176524043083 ,0.38824450969696,0.468270719051361,-0.793718278408051,0.611883342266083,0.395266950130463,-0.685100555419922 ,0.318963170051575,0.947534799575806,-0.0209827292710543,0.0321094393730164,0.982071399688721,-0.185754418373108 ,0.411976963281631,0.894454181194305,0.173858374357224,0.851017236709595,0.312567472457886,-0.421984851360321 ,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129 ,0.0321094393730164,0.982071399688721,-0.185754418373108,0.318963170051575,0.947534799575806,-0.0209827292710543 ,-0.12346463650465,0.82139652967453,0.556834042072296,-0.472547024488449,0.842842221260071,0.257519453763962 ,-0.195588424801826,0.810276031494141,0.552447199821472,0.411976963281631,0.894454181194305,0.173858374357224 ,0.576588332653046,0.699405252933502,0.422348409891129,0.0535213947296143,0.588878512382507,0.806447505950928 ,-0.472547024488449,0.842842221260071,0.257519453763962,-0.12346463650465,0.82139652967453,0.556834042072296 ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.908354461193085,0.186973229050636,0.374076366424561 ,-0.785535871982574,0.107658803462982,0.60937911272049,-0.195588424801826,0.810276031494141,0.552447199821472 ,0.0535213947296143,0.588878512382507,0.806447505950928,-0.450931012630463,-0.0296851322054863,0.892065048217773 ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.345148712396622,-0.936045050621033,0.0684986561536789 ,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.908354461193085,0.186973229050636,0.374076366424561 ,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.546746909618378,-0.836352705955505,-0.0397748313844204 ,-0.785535871982574,0.107658803462982,0.60937911272049,-0.450931012630463,-0.0296851322054863,0.892065048217773 ,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.375919848680496,-0.534900844097137,-0.756680428981781 ,0.121086686849594,-0.443384885787964,-0.888114750385284,-0.721794605255127,-0.649047315120697,-0.240312546491623 ,0.652944087982178,-0.679937779903412,-0.333689540624619,0.493326157331467,-0.591391324996948,-0.637875854969025 ,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.189478844404221,-0.925744891166687,0.327252507209778 ,0.121086686849594,-0.443384885787964,-0.888114750385284,0.375919848680496,-0.534900844097137,-0.756680428981781 ,0.611883342266083,0.395266950130463,-0.685100555419922,0.38824450969696,0.468270719051361,-0.793718278408051 ,0.972901284694672,0.173448488116264,-0.15290105342865,0.851017236709595,0.312567472457886,-0.421984851360321 ,0.493326157331467,-0.591391324996948,-0.637875854969025,0.652944087982178,-0.679937779903412,-0.333689540624619 ,0.318963170051575,0.947534799575806,-0.0209827292710543,0.611883342266083,0.395266950130463,-0.685100555419922 ,0.813007533550262,0.294095903635025,-0.502519965171814,0.569939315319061,0.805042445659637,0.164547294378281 ,-0.12346463650465,0.82139652967453,0.556834042072296,0.318963170051575,0.947534799575806,-0.0209827292710543 ,0.569939315319061,0.805042445659637,0.164547294378281,0.231555417180061,0.629199266433716,0.741950392723084 ,-0.572655022144318,0.03255345672369,0.819149851799011,-0.12346463650465,0.82139652967453,0.556834042072296,0.231555417180061 ,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.0996505841612816 ,-0.92350834608078,0.370408058166504,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.572655022144318 ,0.03255345672369,0.819149851799011,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.585191905498505 ,-0.614215075969696,-0.529424488544464,0.375919848680496,-0.534900844097137,-0.756680428981781,-0.345148712396622 ,-0.936045050621033,0.0684986561536789,0.0996505841612816,-0.92350834608078,0.370408058166504,0.813007533550262 ,0.294095903635025,-0.502519965171814,0.611883342266083,0.395266950130463,-0.685100555419922,0.375919848680496 ,-0.534900844097137,-0.756680428981781,0.585191905498505,-0.614215075969696,-0.529424488544464,0.545881569385529 ,0.511918663978577,0.663289248943329,0.990075051784515,-0.120317794382572,0.0726294368505478,0.883933007717133 ,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,-0.245863825082779 ,0.731000900268555,0.636544346809387,0.545881569385529,0.511918663978577,0.663289248943329,0.373975813388824 ,0.180082246661186,0.909787058830261,-0.295474290847778,0.289970576763153,0.910281300544739,-0.910116851329803 ,0.0209306813776493,0.413822680711746,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.245863825082779 ,0.731000900268555,0.636544346809387,-0.295474290847778,0.289970576763153,0.910281300544739,-0.558293402194977 ,-0.744525730609894,-0.366046398878098,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.935286819934845 ,0.353607445955276,0.0141536435112357,-0.910116851329803,0.0209306813776493,0.413822680711746,0.547039151191711 ,-0.767979085445404,-0.333100914955139,0.571398973464966,-0.599262952804565,-0.560702323913574,-0.506552457809448 ,-0.468146800994873,-0.724046409130096,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.990075051784515 ,-0.120317794382572,0.0726294368505478,0.571398973464966,-0.599262952804565,-0.560702323913574,0.547039151191711 ,-0.767979085445404,-0.333100914955139,0.883933007717133,-0.306944608688354,0.352771013975143,0.375081390142441 ,0.14768061041832,0.915152668952942,0.911960899829865,-0.238872826099396,0.333567291498184,0.744088768959045 ,-0.425844013690948,0.514770567417145,0.260944664478302,0.0303234942257404,0.964877367019653,0.990352332592011 ,0.100834503769875,-0.0950506180524826,0.990075051784515,-0.120317794382572,0.0726294368505478,0.545881569385529 ,0.511918663978577,0.663289248943329,0.586896598339081,0.733868896961212,0.342036306858063,-0.218149244785309 ,0.312739759683609,0.924448370933533,0.375081390142441,0.14768061041832,0.915152668952942,0.260944664478302,0.0303234942257404 ,0.964877367019653,-0.292137324810028,0.162486374378204,0.942472279071808,0.586896598339081,0.733868896961212 ,0.342036306858063,0.545881569385529,0.511918663978577,0.663289248943329,-0.245863825082779,0.731000900268555 ,0.636544346809387,-0.114175498485565,0.946973264217377,0.300342559814453,-0.927251279354095,0.214977368712425 ,0.306577533483505,-0.218149244785309,0.312739759683609,0.924448370933533,-0.292137324810028,0.162486374378204 ,0.942472279071808,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.114175498485565,0.946973264217377 ,0.300342559814453,-0.245863825082779,0.731000900268555,0.636544346809387,-0.935286819934845,0.353607445955276 ,0.0141536435112357,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.660339951515198,-0.670212745666504 ,-0.338771462440491,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.927251279354095,0.214977368712425 ,0.306577533483505,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.935286819934845,0.353607445955276 ,0.0141536435112357,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.434810429811478,-0.167877942323685 ,-0.884735524654388,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551 ,-0.252034991979599,0.522938787937164,-0.641703903675079,-0.561026811599731,-0.624496459960938,-0.423985540866852 ,-0.655927181243896,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.506552457809448,-0.468146800994873 ,-0.724046409130096,0.571398973464966,-0.599262952804565,-0.560702323913574,0.571836888790131,-0.410920888185501 ,-0.710032820701599,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.911960899829865,-0.238872826099396 ,0.333567291498184,0.522938787937164,-0.641703903675079,-0.561026811599731,0.430197030305862,-0.866838395595551 ,-0.252034991979599,0.744088768959045,-0.425844013690948,0.514770567417145,0.571836888790131,-0.410920888185501 ,-0.710032820701599,0.571398973464966,-0.599262952804565,-0.560702323913574,0.990075051784515,-0.120317794382572 ,0.0726294368505478,0.990352332592011,0.100834503769875,-0.0950506180524826,0.911960899829865,-0.238872826099396 ,0.333567291498184,0.375081390142441,0.14768061041832,0.915152668952942,0.511097252368927,0.266881614923477,0.817039608955383 ,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383 ,0.375081390142441,0.14768061041832,0.915152668952942,-0.218149244785309,0.312739759683609,0.924448370933533 ,-0.110857367515564,0.512554824352264,0.85146826505661,-0.110857367515564,0.512554824352264,0.85146826505661 ,-0.218149244785309,0.312739759683609,0.924448370933533,-0.927251279354095,0.214977368712425,0.306577533483505 ,-0.879560232162476,0.457515209913254,0.130589336156845,-0.879560232162476,0.457515209913254,0.130589336156845 ,-0.927251279354095,0.214977368712425,0.306577533483505,-0.624496459960938,-0.423985540866852,-0.655927181243896 ,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.624496459960938,-0.423985540866852,-0.655927181243896 ,0.522938787937164,-0.641703903675079,-0.561026811599731,0.49901670217514,-0.328819900751114,-0.801785349845886 ,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.522938787937164,-0.641703903675079,-0.561026811599731 ,0.911960899829865,-0.238872826099396,0.333567291498184,0.996219396591187,-0.0303011108189821,0.0814168974757195 ,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.976081073284149,0.0319094844162464,0.215052559971809 ,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.378572434186935,0.294946253299713,0.877319574356079 ,0.256522864103317,0.500971019268036,0.826573669910431,0.839519679546356,-0.36930912733078,0.398519098758698 ,0.916088342666626,0.400877177715302,0.00892047397792339,0.916088342666626,0.400877177715302,0.00892047397792339 ,0.839519679546356,-0.36930912733078,0.398519098758698,0.408187568187714,-0.202498286962509,-0.890155792236328 ,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.584547698497772,-0.607527673244476,0.537786364555359 ,-0.976081073284149,0.0319094844162464,0.215052559971809,0.996219396591187,-0.0303011108189821,0.0814168974757195 ,0.511097252368927,0.266881614923477,0.817039608955383,0.612414479255676,-0.645280599594116,0.456685394048691 ,-0.110857367515564,0.512554824352264,0.85146826505661,-0.879560232162476,0.457515209913254,0.130589336156845 ,-0.799655735492706,-0.317605823278427,0.509585380554199,-0.879560232162476,0.457515209913254,0.130589336156845 ,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.799655735492706,-0.317605823278427,0.509585380554199 ,0.49901670217514,-0.328819900751114,-0.801785349845886,0.996219396591187,-0.0303011108189821,0.0814168974757195 ,0.612414479255676,-0.645280599594116,0.456685394048691,-0.318901360034943,-0.0882023423910141,0.943674862384796 ,-0.31753671169281,0.108130596578121,0.942060589790344,-0.868339955806732,0.248359262943268,0.429305762052536 ,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.31753671169281,0.108130596578121,0.942060589790344 ,-0.218334898352623,0.277430087327957,0.93560802936554,-0.627032935619354,0.660118401050568,0.413610130548477 ,-0.868339955806732,0.248359262943268,0.429305762052536,-0.218334898352623,0.277430087327957,0.93560802936554 ,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.21239410340786,0.895821630954742,0.390374630689621 ,-0.627032935619354,0.660118401050568,0.413610130548477,-0.0478470139205456,0.374339252710342,0.926056563854218 ,0.148238986730576,0.372900396585464,0.91595333814621,0.264493584632874,0.892315626144409,0.365808635950089,-0.21239410340786 ,0.895821630954742,0.390374630689621,0.148238986730576,0.372900396585464,0.91595333814621,0.317363291978836,0.27348119020462 ,0.908013522624969,0.675838232040405,0.650524258613586,0.346498042345047,0.264493584632874,0.892315626144409 ,0.365808635950089,0.317363291978836,0.27348119020462,0.908013522624969,0.414219319820404,0.102734677493572,0.90436053276062 ,0.911416888237,0.235228717327118,0.337619215250015,0.675838232040405,0.650524258613586,0.346498042345047,0.414219319820404 ,0.102734677493572,0.90436053276062,0.412851452827454,-0.0935835912823677,0.905977785587311,0.908100605010986 ,-0.24227574467659,0.341549009084702,0.911416888237,0.235228717327118,0.337619215250015,0.412851452827454,-0.0935835912823677 ,0.905977785587311,0.313630968332291,-0.262897282838821,0.912425696849823,0.666783571243286,-0.654056191444397 ,0.357225596904755,0.908100605010986,-0.24227574467659,0.341549009084702,0.313630968332291,-0.262897282838821 ,0.912425696849823,0.143147274851799,-0.359821945428848,0.921974539756775,0.252132117748261,-0.889766812324524 ,0.380452841520309,0.666783571243286,-0.654056191444397,0.357225596904755,0.143147274851799,-0.359821945428848 ,0.921974539756775,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.224753618240356,-0.886253476142883 ,0.405019313097,0.252132117748261,-0.889766812324524,0.380452841520309,-0.0529243946075439,-0.358375370502472 ,0.932076215744019,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.636087536811829,-0.644459784030914 ,0.42433974146843,-0.224753618240356,-0.886253476142883,0.405019313097,-0.222048029303551,-0.258952558040619 ,0.940020382404327,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.871661067008972,-0.229165747761726 ,0.433232098817825,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726 ,0.433232098817825,-0.868339955806732,0.248359262943268,0.429305762052536,-0.908097684383392,0.242292806506157 ,-0.341544687747955,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.868339955806732,0.248359262943268 ,0.429305762052536,-0.627032935619354,0.660118401050568,0.413610130548477,-0.66677725315094,0.654064834117889 ,-0.35722154378891,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.627032935619354,0.660118401050568 ,0.413610130548477,-0.21239410340786,0.895821630954742,0.390374630689621,-0.252133041620255,0.889771401882172 ,-0.380441606044769,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.21239410340786,0.895821630954742 ,0.390374630689621,0.264493584632874,0.892315626144409,0.365808635950089,0.224738791584969,0.886259078979492 ,-0.405015259981155,-0.252133041620255,0.889771401882172,-0.380441606044769,0.264493584632874,0.892315626144409 ,0.365808635950089,0.675838232040405,0.650524258613586,0.346498042345047,0.636084914207459,0.644462466239929 ,-0.42433974146843,0.224738791584969,0.886259078979492,-0.405015259981155,0.675838232040405,0.650524258613586 ,0.346498042345047,0.911416888237,0.235228717327118,0.337619215250015,0.871663808822632,0.22916416823864,-0.433227360248566 ,0.636084914207459,0.644462466239929,-0.42433974146843,0.911416888237,0.235228717327118,0.337619215250015,0.908100605010986 ,-0.24227574467659,0.341549009084702,0.868341326713562,-0.248342737555504,-0.429312497377396,0.871663808822632 ,0.22916416823864,-0.433227360248566,0.908100605010986,-0.24227574467659,0.341549009084702,0.666783571243286 ,-0.654056191444397,0.357225596904755,0.627018570899963,-0.660117030143738,-0.413634151220322,0.868341326713562 ,-0.248342737555504,-0.429312497377396,0.666783571243286,-0.654056191444397,0.357225596904755,0.252132117748261 ,-0.889766812324524,0.380452841520309,0.212370932102203,-0.895820319652557,-0.390390157699585,0.627018570899963 ,-0.660117030143738,-0.413634151220322,0.252132117748261,-0.889766812324524,0.380452841520309,-0.224753618240356 ,-0.886253476142883,0.405019313097,-0.264504671096802,-0.892306506633759,-0.365822821855545,0.212370932102203 ,-0.895820319652557,-0.390390157699585,-0.224753618240356,-0.886253476142883,0.405019313097,-0.636087536811829 ,-0.644459784030914,0.42433974146843,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.264504671096802 ,-0.892306506633759,-0.365822821855545,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972 ,-0.229165747761726,0.433232098817825,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.675834715366364 ,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.908097684383392 ,0.242292806506157,-0.341544687747955,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.414216488599777 ,-0.102731600403786,-0.904362142086029,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.66677725315094 ,0.654064834117889,-0.35722154378891,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.412847608327866 ,0.093598335981369,-0.90597802400589,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.252133041620255 ,0.889771401882172,-0.380441606044769,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.313630282878876 ,0.262905478477478,-0.912423551082611,-0.252133041620255,0.889771401882172,-0.380441606044769,0.224738791584969 ,0.886259078979492,-0.405015259981155,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.14314316213131 ,0.359831392765045,-0.921971440315247,0.224738791584969,0.886259078979492,-0.405015259981155,0.636084914207459 ,0.644462466239929,-0.42433974146843,0.222044736146927,0.258958548307419,-0.940019488334656,0.0529278218746185 ,0.358382165431976,-0.932073414325714,0.636084914207459,0.644462466239929,-0.42433974146843,0.871663808822632 ,0.22916416823864,-0.433227360248566,0.318903893232346,0.0882057771086693,-0.943673670291901,0.222044736146927 ,0.258958548307419,-0.940019488334656,0.871663808822632,0.22916416823864,-0.433227360248566,0.868341326713562 ,-0.248342737555504,-0.429312497377396,0.317530363798141,-0.108123689889908,-0.942063570022583,0.318903893232346 ,0.0882057771086693,-0.943673670291901,0.868341326713562,-0.248342737555504,-0.429312497377396,0.627018570899963 ,-0.660117030143738,-0.413634151220322,0.218313500285149,-0.277421027421951,-0.935615718364716,0.317530363798141 ,-0.108123689889908,-0.942063570022583,0.627018570899963,-0.660117030143738,-0.413634151220322,0.212370932102203 ,-0.895820319652557,-0.390390157699585,0.0478369519114494,-0.374329477548599,-0.926061034202576,0.218313500285149 ,-0.277421027421951,-0.935615718364716,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.264504671096802 ,-0.892306506633759,-0.365822821855545,-0.148233711719513,-0.372886508703232,-0.91595983505249,0.0478369519114494 ,-0.374329477548599,-0.926061034202576,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.675834715366364 ,-0.650523722171783,-0.346505790948868,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.148233711719513 ,-0.372886508703232,-0.91595983505249,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119 ,-0.235225573182106,-0.337617367506027,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.317355632781982 ,-0.273479759693146,-0.908016622066498,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.31753671169281 ,0.108130596578121,0.942060589790344,-0.318901360034943,-0.0882023423910141,0.943674862384796,0.0515071414411068 ,0.00784654170274735,0.998641788959503,-0.218334898352623,0.277430087327957,0.93560802936554,-0.31753671169281 ,0.108130596578121,0.942060589790344,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0478470139205456 ,0.374339252710342,0.926056563854218,-0.218334898352623,0.277430087327957,0.93560802936554,0.0515071414411068 ,0.00784654170274735,0.998641788959503,0.148238986730576,0.372900396585464,0.91595333814621,-0.0478470139205456 ,0.374339252710342,0.926056563854218,0.0515071414411068,0.00784654170274735,0.998641788959503,0.317363291978836 ,0.27348119020462,0.908013522624969,0.148238986730576,0.372900396585464,0.91595333814621,0.0515071414411068,0.00784654170274735 ,0.998641788959503,0.414219319820404,0.102734677493572,0.90436053276062,0.317363291978836,0.27348119020462,0.908013522624969 ,0.0515071414411068,0.00784654170274735,0.998641788959503,0.412851452827454,-0.0935835912823677,0.905977785587311 ,0.414219319820404,0.102734677493572,0.90436053276062,0.0515071414411068,0.00784654170274735,0.998641788959503 ,0.313630968332291,-0.262897282838821,0.912425696849823,0.412851452827454,-0.0935835912823677,0.905977785587311 ,0.0515071414411068,0.00784654170274735,0.998641788959503,0.143147274851799,-0.359821945428848,0.921974539756775 ,0.313630968332291,-0.262897282838821,0.912425696849823,0.0515071414411068,0.00784654170274735,0.998641788959503 ,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.143147274851799,-0.359821945428848,0.921974539756775 ,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.222048029303551,-0.258952558040619,0.940020382404327 ,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.0515071414411068,0.00784654170274735,0.998641788959503 ,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.222048029303551,-0.258952558040619,0.940020382404327 ,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.412847608327866,0.093598335981369,-0.90597802400589 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.412847608327866,0.093598335981369,-0.90597802400589 ,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.14314316213131,0.359831392765045,-0.921971440315247 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.14314316213131,0.359831392765045,-0.921971440315247 ,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,0.0529278218746185,0.358382165431976,-0.932073414325714,0.222044736146927,0.258958548307419,-0.940019488334656 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.222044736146927,0.258958548307419,-0.940019488334656 ,0.318903893232346,0.0882057771086693,-0.943673670291901,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,0.318903893232346,0.0882057771086693,-0.943673670291901,0.317530363798141,-0.108123689889908,-0.942063570022583 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.317530363798141,-0.108123689889908,-0.942063570022583 ,0.218313500285149,-0.277421027421951,-0.935615718364716,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,0.218313500285149,-0.277421027421951,-0.935615718364716,0.0478369519114494,-0.374329477548599,-0.926061034202576 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0478369519114494,-0.374329477548599,-0.926061034202576 ,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.317355632781982,-0.273479759693146,-0.908016622066498 ,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.317355632781982,-0.273479759693146,-0.908016622066498 ,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.0515034012496471,-0.00784700363874435,-0.998641967773438 ,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.966661691665649,0.248886108398438,-0.0601741522550583 ,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.653685986995697,-0.0610022284090519,-0.754303216934204 ,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.914616882801056,0.401076018810272,0.0511271618306637 ,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.58228075504303,0.397593438625336,-0.709132254123688 ,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.851284623146057,0.473647087812424,0.225771903991699 ,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.453953713178635,0.773242294788361,-0.442744106054306 ,-0.851284623146057,0.473647087812424,0.225771903991699,-0.79402083158493,0.444575279951096,0.414588689804077 ,-0.158385679125786,0.879829466342926,0.448122888803482,-0.297669261693954,0.954544186592102,-0.0154400775209069 ,-0.79402083158493,0.444575279951096,0.414588689804077,-0.759445428848267,0.323628008365631,0.564364731311798 ,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.158385679125786,0.879829466342926,0.448122888803482 ,-0.759445428848267,0.323628008365631,0.564364731311798,-0.757242918014526,0.146255627274513,0.636547327041626 ,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.0778716132044792,0.579540431499481,0.811214447021484 ,-0.757242918014526,0.146255627274513,0.636547327041626,-0.787810683250427,-0.0407748445868492,0.614566326141357 ,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.0762700662016869,0.147347286343575,0.98613977432251 ,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.84276008605957,-0.189629122614861,0.503781855106354 ,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.152521103620529,-0.309242963790894,0.938672542572021 ,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.90670782327652,-0.260194718837738,0.331933170557022 ,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.288555532693863,-0.679946959018707,0.674097776412964 ,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.961663961410522,-0.232538834214211,0.14535491168499 ,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.447622418403625,-0.858233511447906,0.251136243343353 ,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.99335777759552,-0.114957891404629,-0.00500302389264107 ,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.581832349300385,-0.785723686218262,-0.210022509098053 ,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.994962155818939,0.0604930706322193,-0.0799432098865509 ,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.654718458652496,-0.490442901849747,-0.575160443782806 ,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.58228075504303,0.397593438625336,-0.709132254123688 ,0.15252123773098,0.30924791097641,-0.938670873641968,0.0762772560119629,-0.147341594099998,-0.986140072345734 ,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.453953713178635,0.773242294788361,-0.442744106054306 ,0.288539916276932,0.679925382137299,-0.674126207828522,0.15252123773098,0.30924791097641,-0.938670873641968 ,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.297669261693954,0.954544186592102,-0.0154400775209069 ,0.447615385055542,0.858229279518127,-0.251163244247437,0.288539916276932,0.679925382137299,-0.674126207828522 ,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.158385679125786,0.879829466342926,0.448122888803482 ,0.581838190555573,0.785721182823181,0.210015803575516,0.447615385055542,0.858229279518127,-0.251163244247437 ,-0.158385679125786,0.879829466342926,0.448122888803482,-0.0778716132044792,0.579540431499481,0.811214447021484 ,0.654724836349487,0.490438729524612,0.57515674829483,0.581838190555573,0.785721182823181,0.210015803575516,-0.0778716132044792 ,0.579540431499481,0.811214447021484,-0.0762700662016869,0.147347286343575,0.98613977432251,0.653687477111816 ,0.0610029399394989,0.754301846027374,0.654724836349487,0.490438729524612,0.57515674829483,-0.0762700662016869 ,0.147347286343575,0.98613977432251,-0.152521103620529,-0.309242963790894,0.938672542572021,0.582287847995758 ,-0.397587060928345,0.709130048751831,0.653687477111816,0.0610029399394989,0.754301846027374,-0.152521103620529 ,-0.309242963790894,0.938672542572021,-0.288555532693863,-0.679946959018707,0.674097776412964,0.453961431980133 ,-0.773255228996277,0.442713648080826,0.582287847995758,-0.397587060928345,0.709130048751831,-0.288555532693863 ,-0.679946959018707,0.674097776412964,-0.447622418403625,-0.858233511447906,0.251136243343353,0.297663301229477 ,-0.954546689987183,0.0153974173590541,0.453961431980133,-0.773255228996277,0.442713648080826,-0.447622418403625 ,-0.858233511447906,0.251136243343353,-0.581832349300385,-0.785723686218262,-0.210022509098053,0.158382549881935 ,-0.879823446273804,-0.448135793209076,0.297663301229477,-0.954546689987183,0.0153974173590541,-0.581832349300385 ,-0.785723686218262,-0.210022509098053,-0.654718458652496,-0.490442901849747,-0.575160443782806,0.0778705626726151 ,-0.57954204082489,-0.811213433742523,0.158382549881935,-0.879823446273804,-0.448135793209076,-0.654718458652496 ,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,0.0762772560119629 ,-0.147341594099998,-0.986140072345734,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629 ,-0.147341594099998,-0.986140072345734,0.15252123773098,0.30924791097641,-0.938670873641968,0.787807643413544 ,0.0407794341444969,-0.614569902420044,0.757250845432281,-0.146252647042274,-0.636538565158844,0.15252123773098 ,0.30924791097641,-0.938670873641968,0.288539916276932,0.679925382137299,-0.674126207828522,0.842750906944275 ,0.189622536301613,-0.503799676895142,0.787807643413544,0.0407794341444969,-0.614569902420044,0.288539916276932 ,0.679925382137299,-0.674126207828522,0.447615385055542,0.858229279518127,-0.251163244247437,0.906708478927612 ,0.260196477174759,-0.331930011510849,0.842750906944275,0.189622536301613,-0.503799676895142,0.447615385055542 ,0.858229279518127,-0.251163244247437,0.581838190555573,0.785721182823181,0.210015803575516,0.961666405200958 ,0.232534736394882,-0.145345583558083,0.906708478927612,0.260196477174759,-0.331930011510849,0.581838190555573 ,0.785721182823181,0.210015803575516,0.654724836349487,0.490438729524612,0.57515674829483,0.993358135223389,0.114954985678196 ,0.00499376095831394,0.961666405200958,0.232534736394882,-0.145345583558083,0.654724836349487,0.490438729524612 ,0.57515674829483,0.653687477111816,0.0610029399394989,0.754301846027374,0.9949631690979,-0.0604812912642956 ,0.079939104616642,0.993358135223389,0.114954985678196,0.00499376095831394,0.653687477111816,0.0610029399394989 ,0.754301846027374,0.582287847995758,-0.397587060928345,0.709130048751831,0.966662883758545,-0.248881489038467 ,0.0601733289659023,0.9949631690979,-0.0604812912642956,0.079939104616642,0.582287847995758,-0.397587060928345 ,0.709130048751831,0.453961431980133,-0.773255228996277,0.442713648080826,0.914616823196411,-0.401075154542923 ,-0.0511355213820934,0.966662883758545,-0.248881489038467,0.0601733289659023,0.453961431980133,-0.773255228996277 ,0.442713648080826,0.297663301229477,-0.954546689987183,0.0153974173590541,0.851288199424744,-0.473640650510788 ,-0.225771829485893,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.297663301229477,-0.954546689987183 ,0.0153974173590541,0.158382549881935,-0.879823446273804,-0.448135793209076,0.794022977352142,-0.44456884264946 ,-0.414591461420059,0.851288199424744,-0.473640650510788,-0.225771829485893,0.158382549881935,-0.879823446273804 ,-0.448135793209076,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.759444773197174,-0.323628276586533 ,-0.564365446567535,0.794022977352142,-0.44456884264946,-0.414591461420059,0.0778705626726151,-0.57954204082489 ,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.757250845432281,-0.146252647042274 ,-0.636538565158844,0.759444773197174,-0.323628276586533,-0.564365446567535,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.994962155818939,0.0604930706322193 ,-0.0799432098865509,-0.947113156318665,0.111555203795433,0.300885528326035,-0.914616882801056,0.401076018810272 ,0.0511271618306637,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.851284623146057,0.473647087812424,0.225771903991699,-0.914616882801056,0.401076018810272 ,0.0511271618306637,-0.947113156318665,0.111555203795433,0.300885528326035,-0.79402083158493,0.444575279951096 ,0.414588689804077,-0.851284623146057,0.473647087812424,0.225771903991699,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.759445428848267,0.323628008365631,0.564364731311798,-0.79402083158493,0.444575279951096 ,0.414588689804077,-0.947113156318665,0.111555203795433,0.300885528326035,-0.757242918014526,0.146255627274513 ,0.636547327041626,-0.759445428848267,0.323628008365631,0.564364731311798,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.757242918014526,0.146255627274513 ,0.636547327041626,-0.947113156318665,0.111555203795433,0.300885528326035,-0.84276008605957,-0.189629122614861 ,0.503781855106354,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.84276008605957,-0.189629122614861 ,0.503781855106354,-0.947113156318665,0.111555203795433,0.300885528326035,-0.961663961410522,-0.232538834214211 ,0.14535491168499,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.947113156318665,0.111555203795433 ,0.300885528326035,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.961663961410522,-0.232538834214211 ,0.14535491168499,-0.947113156318665,0.111555203795433,0.300885528326035,-0.994962155818939,0.0604930706322193 ,-0.0799432098865509,-0.99335777759552,-0.114957891404629,-0.00500302389264107,0.757250845432281,-0.146252647042274 ,-0.636538565158844,0.787807643413544,0.0407794341444969,-0.614569902420044,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.787807643413544,0.0407794341444969,-0.614569902420044,0.842750906944275,0.189622536301613 ,-0.503799676895142,0.947114884853363,-0.111551322042942,-0.300881564617157,0.842750906944275,0.189622536301613 ,-0.503799676895142,0.906708478927612,0.260196477174759,-0.331930011510849,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.906708478927612,0.260196477174759,-0.331930011510849,0.961666405200958,0.232534736394882 ,-0.145345583558083,0.947114884853363,-0.111551322042942,-0.300881564617157,0.961666405200958,0.232534736394882 ,-0.145345583558083,0.993358135223389,0.114954985678196,0.00499376095831394,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.993358135223389,0.114954985678196,0.00499376095831394,0.9949631690979,-0.0604812912642956 ,0.079939104616642,0.947114884853363,-0.111551322042942,-0.300881564617157,0.9949631690979,-0.0604812912642956 ,0.079939104616642,0.966662883758545,-0.248881489038467,0.0601733289659023,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.966662883758545,-0.248881489038467,0.0601733289659023,0.914616823196411,-0.401075154542923 ,-0.0511355213820934,0.947114884853363,-0.111551322042942,-0.300881564617157,0.914616823196411,-0.401075154542923 ,-0.0511355213820934,0.851288199424744,-0.473640650510788,-0.225771829485893,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.851288199424744,-0.473640650510788,-0.225771829485893,0.794022977352142,-0.44456884264946 ,-0.414591461420059,0.947114884853363,-0.111551322042942,-0.300881564617157,0.794022977352142,-0.44456884264946 ,-0.414591461420059,0.759444773197174,-0.323628276586533,-0.564365446567535,0.947114884853363,-0.111551322042942 ,-0.300881564617157,0.759444773197174,-0.323628276586533,-0.564365446567535,0.757250845432281,-0.146252647042274 ,-0.636538565158844,0.947114884853363,-0.111551322042942,-0.300881564617157,-0.751705825328827,0.499238789081573 ,0.430927991867065,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.574179291725159,0.614476501941681 ,-0.541051506996155,-0.613819122314453,0.653787076473236,0.442480057477951,-0.751705825328827,0.499238789081573 ,0.430927991867065,-0.777491211891174,0.513072729110718,0.363680928945541,-0.671055376529694,0.46099641919136 ,-0.580660879611969,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.439152985811234,0.717960596084595 ,0.540071547031403,-0.615385949611664,0.731114089488983,0.294571459293365,-0.777491211891174,0.513072729110718 ,0.363680928945541,-0.517933547496796,0.54983514547348,0.655306160449982,-0.439152985811234,0.717960596084595 ,0.540071547031403,-0.152461975812912,0.801973640918732,0.577575623989105,-0.341462641954422,0.911851763725281 ,0.227880761027336,-0.615385949611664,0.731114089488983,0.294571459293365,-0.439152985811234,0.717960596084595 ,0.540071547031403,-0.517933547496796,0.54983514547348,0.655306160449982,-0.115547746419907,0.596075415611267 ,0.794570803642273,-0.152461975812912,0.801973640918732,0.577575623989105,-0.554732620716095,0.528954327106476 ,0.642245292663574,-0.468677580356598,0.695621490478516,0.544474124908447,-0.133603423833847,0.738610506057739 ,0.660760641098022,-0.180301427841187,0.592643916606903,0.785025238990784,-0.554732620716095,0.528954327106476 ,0.642245292663574,-0.751705825328827,0.499238789081573,0.430927991867065,-0.617351293563843,0.618397295475006 ,0.486273765563965,-0.468677580356598,0.695621490478516,0.544474124908447,-0.554732620716095,0.528954327106476 ,0.642245292663574,-0.517933547496796,0.54983514547348,0.655306160449982,-0.777491211891174,0.513072729110718 ,0.363680928945541,-0.751705825328827,0.499238789081573,0.430927991867065,-0.554732620716095,0.528954327106476 ,0.642245292663574,-0.180301427841187,0.592643916606903,0.785025238990784,-0.115547746419907,0.596075415611267 ,0.794570803642273,-0.517933547496796,0.54983514547348,0.655306160449982,-0.615385949611664,0.731114089488983 ,0.294571459293365,-0.341462641954422,0.911851763725281,0.227880761027336,-0.399629831314087,0.611662745475769 ,-0.682762563228607,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.615385949611664,0.731114089488983 ,0.294571459293365,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.671055376529694,0.46099641919136 ,-0.580660879611969,-0.777491211891174,0.513072729110718,0.363680928945541,0.100666761398315,0.823356568813324 ,0.558524966239929,0.303691446781158,0.796526610851288,0.522797167301178,0.173411548137665,0.978560149669647 ,0.111123643815517,-0.0562314540147781,0.983582377433777,0.171474948525429,0.100666761398315,0.823356568813324 ,0.558524966239929,0.137634456157684,0.618980467319489,0.773252785205841,0.349911212921143,0.597250580787659 ,0.721702098846436,0.303691446781158,0.796526610851288,0.522797167301178,0.100666761398315,0.823356568813324 ,0.558524966239929,-0.152461975812912,0.801973640918732,0.577575623989105,-0.115547746419907,0.596075415611267 ,0.794570803642273,0.137634456157684,0.618980467319489,0.773252785205841,0.100666761398315,0.823356568813324 ,0.558524966239929,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.341462641954422,0.911851763725281 ,0.227880761027336,-0.152461975812912,0.801973640918732,0.577575623989105,0.111760005354881,0.6034294962883,0.789545774459839 ,0.3438441157341,0.581315696239471,0.73745733499527,0.349911212921143,0.597250580787659,0.721702098846436,0.137634456157684 ,0.618980467319489,0.773252785205841,0.111760005354881,0.6034294962883,0.789545774459839,0.115875713527203,0.724421501159668 ,0.679548561573029,0.311594694852829,0.703108549118042,0.639176845550537,0.3438441157341,0.581315696239471,0.73745733499527 ,0.111760005354881,0.6034294962883,0.789545774459839,-0.180301427841187,0.592643916606903,0.785025238990784,-0.133603423833847 ,0.738610506057739,0.660760641098022,0.115875713527203,0.724421501159668,0.679548561573029,0.111760005354881 ,0.6034294962883,0.789545774459839,0.137634456157684,0.618980467319489,0.773252785205841,-0.115547746419907,0.596075415611267 ,0.794570803642273,-0.180301427841187,0.592643916606903,0.785025238990784,-0.0562314540147781,0.983582377433777 ,0.171474948525429,0.173411548137665,0.978560149669647,0.111123643815517,-0.149124965071678,0.574361085891724 ,-0.804904401302338,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0562314540147781,0.983582377433777 ,0.171474948525429,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.399629831314087,0.611662745475769 ,-0.682762563228607,-0.341462641954422,0.911851763725281,0.227880761027336,0.303691446781158,0.796526610851288 ,0.522797167301178,0.573039770126343,0.718792796134949,0.393652617931366,0.427761524915695,0.903279960155487 ,-0.0332473926246166,0.173411548137665,0.978560149669647,0.111123643815517,0.303691446781158,0.796526610851288 ,0.522797167301178,0.349911212921143,0.597250580787659,0.721702098846436,0.619265675544739,0.530689239501953 ,0.578687310218811,0.573039770126343,0.718792796134949,0.393652617931366,0.3438441157341,0.581315696239471,0.73745733499527 ,0.614433944225311,0.529466807842255,0.584923803806305,0.619265675544739,0.530689239501953,0.578687310218811 ,0.349911212921143,0.597250580787659,0.721702098846436,0.3438441157341,0.581315696239471,0.73745733499527,0.311594694852829 ,0.703108549118042,0.639176845550537,0.595157265663147,0.650768876075745,0.471473932266235,0.614433944225311 ,0.529466807842255,0.584923803806305,0.173411548137665,0.978560149669647,0.111123643815517,0.427761524915695 ,0.903279960155487,-0.0332473926246166,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.149124965071678 ,0.574361085891724,-0.804904401302338,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.838148951530457 ,0.305466830730438,0.451880872249603,-0.84395432472229,0.306451618671417,0.440259546041489,-0.85843151807785 ,-0.220211803913116,0.46325159072876,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.765394926071167 ,0.3244788646698,0.555773317813873,-0.838148951530457,0.305466830730438,0.451880872249603,-0.852979302406311 ,-0.200469166040421,0.481911212205887,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.444218367338181 ,-0.208816647529602,0.871243715286255,-0.402393966913223,0.337146878242493,0.85112339258194,-0.765394926071167 ,0.3244788646698,0.555773317813873,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.0376495942473412 ,0.290562659502029,0.956115007400513,-0.402393966913223,0.337146878242493,0.85112339258194,-0.444218367338181 ,-0.208816647529602,0.871243715286255,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.254925400018692 ,-0.255845844745636,0.932499825954437,0.298023343086243,0.239961877465248,0.923904955387115,0.0376495942473412 ,0.290562659502029,0.956115007400513,0.254925400018692,-0.255845844745636,0.932499825954437,0.46340024471283 ,-0.317235618829727,0.827418744564056,0.511566936969757,0.168196827173233,0.842620372772217,0.298023343086243 ,0.239961877465248,0.923904955387115,-0.617351293563843,0.618397295475006,0.486273765563965,-0.613819122314453 ,0.653787076473236,0.442480057477951,-0.565762281417847,0.699094772338867,0.437240809202194,-0.580900967121124 ,0.676747918128967,0.452290087938309,-0.613819122314453,0.653787076473236,0.442480057477951,-0.574179291725159 ,0.614476501941681,-0.541051506996155,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.565762281417847 ,0.699094772338867,0.437240809202194,-0.468677580356598,0.695621490478516,0.544474124908447,-0.464684039354324 ,0.73650199174881,0.491562396287918,-0.136432588100433,0.76638126373291,0.62773072719574,-0.133603423833847,0.738610506057739 ,0.660760641098022,-0.468677580356598,0.695621490478516,0.544474124908447,-0.617351293563843,0.618397295475006 ,0.486273765563965,-0.580900967121124,0.676747918128967,0.452290087938309,-0.464684039354324,0.73650199174881 ,0.491562396287918,0.115875713527203,0.724421501159668,0.679548561573029,0.114413313567638,0.738645255565643 ,0.664313733577728,0.288802593946457,0.72074019908905,0.630179822444916,0.311594694852829,0.703108549118042,0.639176845550537 ,0.115875713527203,0.724421501159668,0.679548561573029,-0.133603423833847,0.738610506057739,0.660760641098022 ,-0.136432588100433,0.76638126373291,0.62773072719574,0.114413313567638,0.738645255565643,0.664313733577728,0.311594694852829 ,0.703108549118042,0.639176845550537,0.288802593946457,0.72074019908905,0.630179822444916,0.483360201120377,0.719882130622864 ,0.498129189014435,0.595157265663147,0.650768876075745,0.471473932266235,0.953060507774353,-0.0791450366377831 ,-0.292252898216248,0.551096558570862,-0.25121533870697,-0.795728206634521,0.553836524486542,-0.170769691467285 ,-0.814925014972687,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.825739741325378,0.310847252607346 ,0.470667392015457,0.913910686969757,0.00122638128232211,0.405913442373276,0.985759019851685,-0.0950566306710243 ,-0.138720765709877,0.903454899787903,0.395046651363373,0.166455298662186,0.825739741325378,0.310847252607346 ,0.470667392015457,0.491690248250961,0.47496309876442,0.72982931137085,0.511566936969757,0.168196827173233,0.842620372772217 ,0.913910686969757,0.00122638128232211,0.405913442373276,0.825739741325378,0.310847252607346,0.470667392015457 ,0.903454899787903,0.395046651363373,0.166455298662186,0.483360201120377,0.719882130622864,0.498129189014435 ,0.491690248250961,0.47496309876442,0.72982931137085,0.911615371704102,0.410868912935257,-0.0120057743042707 ,0.777296364307404,0.555617034435272,-0.295127332210541,0.427761524915695,0.903279960155487,-0.0332473926246166 ,0.573039770126343,0.718792796134949,0.393652617931366,0.911615371704102,0.410868912935257,-0.0120057743042707 ,0.954911112785339,0.274276524782181,0.113653682172298,0.937605857849121,-0.0351583212614059,-0.345917791128159 ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.911615371704102,0.410868912935257,-0.0120057743042707 ,0.573039770126343,0.718792796134949,0.393652617931366,0.619265675544739,0.530689239501953,0.578687310218811 ,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299 ,0.954911112785339,0.274276524782181,0.113653682172298,0.619265675544739,0.530689239501953,0.578687310218811 ,0.614433944225311,0.529466807842255,0.584923803806305,0.955691754817963,0.266970068216324,0.124017179012299 ,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.937605857849121,-0.0351583212614059,-0.345917791128159 ,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299 ,0.614433944225311,0.529466807842255,0.584923803806305,0.595157265663147,0.650768876075745,0.471473932266235 ,0.959389328956604,0.278238892555237,0.0464239455759525,0.777296364307404,0.555617034435272,-0.295127332210541 ,0.0935691148042679,0.299101799726486,-0.949622511863709,-0.0669071823358536,0.486191123723984,-0.87128734588623 ,0.427761524915695,0.903279960155487,-0.0332473926246166,0.777296364307404,0.555617034435272,-0.295127332210541 ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.223619028925896,0.0197683665901423,-0.974476158618927 ,0.0935691148042679,0.299101799726486,-0.949622511863709,0.781544268131256,-0.494354426860809,0.380528897047043 ,0.913910686969757,0.00122638128232211,0.405913442373276,0.511566936969757,0.168196827173233,0.842620372772217 ,0.46340024471283,-0.317235618829727,0.827418744564056,0.781544268131256,-0.494354426860809,0.380528897047043 ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.985759019851685,-0.0950566306710243,-0.138720765709877 ,0.913910686969757,0.00122638128232211,0.405913442373276,-0.731446206569672,0.503581285476685,0.459774166345596 ,-0.717735588550568,0.527478277683258,0.454557299613953,-0.84395432472229,0.306451618671417,0.440259546041489 ,-0.838148951530457,0.305466830730438,0.451880872249603,-0.731446206569672,0.503581285476685,0.459774166345596 ,-0.580900967121124,0.676747918128967,0.452290087938309,-0.565762281417847,0.699094772338867,0.437240809202194 ,-0.717735588550568,0.527478277683258,0.454557299613953,-0.717735588550568,0.527478277683258,0.454557299613953 ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.880555152893066,0.364310264587402,-0.303151249885559 ,-0.84395432472229,0.306451618671417,0.440259546041489,-0.717735588550568,0.527478277683258,0.454557299613953 ,-0.565762281417847,0.699094772338867,0.437240809202194,-0.553338885307312,0.652364552021027,-0.517915606498718 ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.645979166030884,0.542717456817627,0.53681343793869 ,-0.283104240894318,0.575908482074738,0.766929864883423,-0.136432588100433,0.76638126373291,0.62773072719574 ,-0.464684039354324,0.73650199174881,0.491562396287918,-0.645979166030884,0.542717456817627,0.53681343793869 ,-0.765394926071167,0.3244788646698,0.555773317813873,-0.402393966913223,0.337146878242493,0.85112339258194,-0.283104240894318 ,0.575908482074738,0.766929864883423,-0.645979166030884,0.542717456817627,0.53681343793869,-0.731446206569672 ,0.503581285476685,0.459774166345596,-0.838148951530457,0.305466830730438,0.451880872249603,-0.765394926071167 ,0.3244788646698,0.555773317813873,-0.645979166030884,0.542717456817627,0.53681343793869,-0.464684039354324,0.73650199174881 ,0.491562396287918,-0.580900967121124,0.676747918128967,0.452290087938309,-0.731446206569672,0.503581285476685 ,0.459774166345596,0.0814845785498619,0.534461736679077,0.84125554561615,0.300524145364761,0.497426092624664 ,0.813788950443268,0.288802593946457,0.72074019908905,0.630179822444916,0.114413313567638,0.738645255565643,0.664313733577728 ,0.0814845785498619,0.534461736679077,0.84125554561615,0.0376495942473412,0.290562659502029,0.956115007400513 ,0.298023343086243,0.239961877465248,0.923904955387115,0.300524145364761,0.497426092624664,0.813788950443268 ,0.0814845785498619,0.534461736679077,0.84125554561615,-0.283104240894318,0.575908482074738,0.766929864883423 ,-0.402393966913223,0.337146878242493,0.85112339258194,0.0376495942473412,0.290562659502029,0.956115007400513 ,0.0814845785498619,0.534461736679077,0.84125554561615,0.114413313567638,0.738645255565643,0.664313733577728 ,-0.136432588100433,0.76638126373291,0.62773072719574,-0.283104240894318,0.575908482074738,0.766929864883423 ,0.300524145364761,0.497426092624664,0.813788950443268,0.491690248250961,0.47496309876442,0.72982931137085,0.483360201120377 ,0.719882130622864,0.498129189014435,0.288802593946457,0.72074019908905,0.630179822444916,0.300524145364761,0.497426092624664 ,0.813788950443268,0.298023343086243,0.239961877465248,0.923904955387115,0.511566936969757,0.168196827173233 ,0.842620372772217,0.491690248250961,0.47496309876442,0.72982931137085,0.914809167385101,0.392747074365616,0.0942015051841736 ,0.903454899787903,0.395046651363373,0.166455298662186,0.985759019851685,-0.0950566306710243,-0.138720765709877 ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.914809167385101,0.392747074365616,0.0942015051841736 ,0.595157265663147,0.650768876075745,0.471473932266235,0.483360201120377,0.719882130622864,0.498129189014435 ,0.903454899787903,0.395046651363373,0.166455298662186,0.225880712270737,-0.859437644481659,-0.458633750677109 ,0.29811355471611,-0.682091355323792,-0.667742192745209,0.311078637838364,-0.216382816433907,-0.925423443317413 ,0.16324470937252,-0.308202177286148,-0.937210023403168,0.225880712270737,-0.859437644481659,-0.458633750677109 ,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.282306700944901,-0.637052953243256,-0.717263162136078 ,0.29811355471611,-0.682091355323792,-0.667742192745209,0.225880712270737,-0.859437644481659,-0.458633750677109 ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.268338412046433,-0.713256895542145,-0.647502183914185 ,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.260857611894608,-0.829145133495331,-0.494440793991089 ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.905829727649689,-0.366898268461227,-0.21179735660553 ,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.260857611894608,-0.829145133495331,-0.494440793991089 ,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.638520240783691,-0.465828388929367,-0.612613916397095 ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.29811355471611,-0.682091355323792,-0.667742192745209 ,0.264597475528717,-0.737169206142426,-0.621747314929962,0.115910343825817,-0.0576019249856472,-0.991588056087494 ,0.311078637838364,-0.216382816433907,-0.925423443317413,0.29811355471611,-0.682091355323792,-0.667742192745209 ,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.247060716152191,-0.702493846416473,-0.667430460453033 ,0.264597475528717,-0.737169206142426,-0.621747314929962,-0.282306700944901,-0.637052953243256,-0.717263162136078 ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.901528060436249,-0.393501937389374,-0.180009379982948 ,-0.247060716152191,-0.702493846416473,-0.667430460453033,-0.901528060436249,-0.393501937389374,-0.180009379982948 ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.955415546894073,0.030608743429184,-0.293673634529114 ,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.810647666454315,-0.584102094173431,-0.0409278348088264 ,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.955415546894073,0.030608743429184,-0.293673634529114 ,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.67541229724884,0.485521674156189,-0.555055737495422 ,-0.671055376529694,0.46099641919136,-0.580660879611969,0.16324470937252,-0.308202177286148,-0.937210023403168 ,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.241613432765007,0.616148710250854,-0.749655723571777 ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.16324470937252,-0.308202177286148,-0.937210023403168 ,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.241613432765007,0.616148710250854,-0.749655723571777 ,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.268338412046433,-0.713256895542145,-0.647502183914185 ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.149124965071678,0.574361085891724,-0.804904401302338 ,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.638520240783691,-0.465828388929367,-0.612613916397095 ,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0990582183003426,-0.981914699077606,0.161341309547424 ,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.402248114347458,-0.864168643951416,0.302339196205139 ,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.573512434959412,-0.801527380943298,-0.169225797057152 ,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.0823863819241524,-0.986806333065033,0.139376148581505 ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0823863819241524,-0.986806333065033,0.139376148581505 ,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.402248114347458,-0.864168643951416,0.302339196205139 ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0981104820966721,-0.982542932033539,0.158062309026718 ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.417831748723984,-0.851728618144989,0.316188275814056 ,-0.0990582183003426,-0.981914699077606,0.161341309547424,-0.0981104820966721,-0.982542932033539,0.158062309026718 ,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.232284545898438,-0.856678247451782,0.460593432188034 ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0490679740905762,-0.984484553337097,0.168471187353134 ,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.232284545898438,-0.856678247451782,0.460593432188034 ,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.0490679740905762,-0.984484553337097,0.168471187353134 ,-0.0325715281069279,-0.988623857498169,0.14683997631073,0.0744497627019882,-0.870341658592224,0.486788034439087 ,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.0325715281069279,-0.988623857498169,0.14683997631073 ,-0.0330409817397594,-0.990994393825531,0.129762962460518,0.212042272090912,-0.828755676746368,0.517882287502289 ,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.574179291725159,0.614476501941681,-0.541051506996155 ,0.311078637838364,-0.216382816433907,-0.925423443317413,0.115910343825817,-0.0576019249856472,-0.991588056087494 ,-0.553338885307312,0.652364552021027,-0.517915606498718,0.551096558570862,-0.25121533870697,-0.795728206634521 ,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.955415546894073,0.030608743429184,-0.293673634529114 ,0.553836524486542,-0.170769691467285,-0.814925014972687,0.553836524486542,-0.170769691467285,-0.814925014972687 ,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.942904889583588,-0.124770976603031,-0.308808296918869 ,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709 ,0.223619028925896,0.0197683665901423,-0.974476158618927,-0.942904889583588,-0.124770976603031,-0.308808296918869 ,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.677798688411713,0.543503999710083,-0.49516898393631 ,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.157777264714241,0.23123687505722,-0.960018694400787 ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.462465226650238,-0.184937626123428,-0.867135524749756 ,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.202129036188126,-0.938186347484589,-0.280980914831162 ,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.852979302406311,-0.200469166040421,0.481911212205887 ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.402248114347458,-0.864168643951416,0.302339196205139 ,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.916306138038635,-0.243330180644989,0.318077772855759 ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.402248114347458,-0.864168643951416,0.302339196205139 ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.916306138038635,-0.243330180644989,0.318077772855759 ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.573512434959412,-0.801527380943298,-0.169225797057152 ,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.784946858882904,-0.199270412325859,0.586642801761627 ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.232284545898438,-0.856678247451782,0.460593432188034 ,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.784946858882904,-0.199270412325859,0.586642801761627 ,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.417831748723984,-0.851728618144989,0.316188275814056 ,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0118078086525202,-0.230731546878815,0.972945809364319 ,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.0744497627019882,-0.870341658592224,0.486788034439087 ,0.254925400018692,-0.255845844745636,0.932499825954437,-0.0118078086525202,-0.230731546878815,0.972945809364319 ,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.232284545898438,-0.856678247451782,0.460593432188034 ,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.254925400018692,-0.255845844745636,0.932499825954437 ,0.0744497627019882,-0.870341658592224,0.486788034439087,0.212042272090912,-0.828755676746368,0.517882287502289 ,0.46340024471283,-0.317235618829727,0.827418744564056,0.509586453437805,-0.79888927936554,0.319527089595795 ,0.566634595394135,-0.823737919330597,0.0195191036909819,0.895158112049103,-0.394557535648346,-0.207403689622879 ,0.781544268131256,-0.494354426860809,0.380528897047043,0.509586453437805,-0.79888927936554,0.319527089595795 ,0.781544268131256,-0.494354426860809,0.380528897047043,0.46340024471283,-0.317235618829727,0.827418744564056 ,0.212042272090912,-0.828755676746368,0.517882287502289,-0.879374027252197,0.0191096197813749,-0.475748002529144 ,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.573512434959412,-0.801527380943298,-0.169225797057152 ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759 ,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.84395432472229,0.306451618671417,0.440259546041489 ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144 ,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759 ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144 ,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.157777264714241,0.23123687505722,-0.960018694400787 ,-0.462465226650238,-0.184937626123428,-0.867135524749756,0.985759019851685,-0.0950566306710243,-0.138720765709877 ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.953060507774353,-0.0791450366377831,-0.292252898216248 ,0.895158112049103,-0.394557535648346,-0.207403689622879,0.551096558570862,-0.25121533870697,-0.795728206634521 ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.553836524486542,-0.170769691467285,-0.814925014972687 ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.937605857849121,-0.0351583212614059,-0.345917791128159 ,0.553836524486542,-0.170769691467285,-0.814925014972687,0.937605857849121,-0.0351583212614059,-0.345917791128159 ,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.223619028925896,0.0197683665901423,-0.974476158618927 ,0.909277319908142,0.0840957164764404,-0.407606035470963,0.553836524486542,-0.170769691467285,-0.814925014972687 ,0.595157265663147,0.650768876075745,0.471473932266235,0.914809167385101,0.392747074365616,0.0942015051841736 ,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303 ,0.959389328956604,0.278238892555237,0.0464239455759525,0.953060507774353,-0.0791450366377831,-0.292252898216248 ,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.959389328956604,0.278238892555237,0.0464239455759525 ,0.914809167385101,0.392747074365616,0.0942015051841736,0.909277319908142,0.0840957164764404,-0.407606035470963 ,0.777296364307404,0.555617034435272,-0.295127332210541,0.911615371704102,0.410868912935257,-0.0120057743042707 ,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303 ,0.955691754817963,0.266970068216324,0.124017179012299,0.16324470937252,-0.308202177286148,-0.937210023403168 ,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.225880712270737,-0.859437644481659,-0.458633750677109 ,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.942904889583588,-0.124770976603031,-0.308808296918869 ,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.311078637838364,-0.216382816433907,-0.925423443317413 ,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.67541229724884,0.485521674156189,-0.555055737495422 ,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.671055376529694,0.46099641919136,-0.580660879611969 ,-0.562178492546082,0.54021954536438,-0.626193344593048,0.16324470937252,-0.308202177286148,-0.937210023403168 ,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.399629831314087,0.611662745475769,-0.682762563228607 ,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.157777264714241,0.23123687505722,-0.960018694400787 ,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.638520240783691,-0.465828388929367,-0.612613916397095 ,-0.0669071823358536,0.486191123723984,-0.87128734588623,0.0935691148042679,0.299101799726486,-0.949622511863709 ,-0.553338885307312,0.652364552021027,-0.517915606498718,0.115910343825817,-0.0576019249856472,-0.991588056087494 ,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.613819122314453,0.653787076473236,0.442480057477951 ,-0.617351293563843,0.618397295475006,0.486273765563965,-0.751705825328827,0.499238789081573,0.430927991867065 ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435 ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435 ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435 ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435 ,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435 ,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199 ,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199 ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121 ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121 ,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121 ,-0.22176705300808,-0.273640364408493,-0.935916841030121,0.813896775245667,0.349610984325409,0.464051961898804 ,0.614185929298401,0.569629371166229,0.546166718006134,0.756061971187592,0.654500067234039,2.3479871742893e-005 ,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.391825526952744,0.788023412227631,0.474859833717346 ,0.470227479934692,0.88252204656601,0.00639821914955974,0.756061971187592,0.654500067234039,2.3479871742893e-005 ,0.614185929298401,0.569629371166229,0.546166718006134,0.801087200641632,-0.297826498746872,0.519190430641174 ,0.931309640407562,-0.364154070615768,0.00736169191077352,0.934493005275726,0.355923593044281,0.00642255879938602 ,0.806965947151184,0.306465566158295,0.504861176013947,0.367402404546738,-0.773531317710876,0.516395926475525 ,0.596734344959259,-0.558585286140442,0.576099514961243,0.737963557243347,-0.674840569496155,-2.56854491453851e-005 ,0.44488126039505,-0.89555948972702,0.00733880698680878,0.596734344959259,-0.558585286140442,0.576099514961243 ,0.800876438617706,-0.339855968952179,0.493046551942825,0.922433912754059,-0.386155009269714,-2.86983799924201e-006 ,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.800876438617706,-0.339855968952179,0.493046551942825 ,0.334624856710434,-0.800290584564209,0.497555166482925,0.379204839468002,-0.925312757492065,-1.92532752407715e-006 ,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.596734344959259,-0.558585286140442,0.576099514961243 ,0.106314092874527,-0.103658013045788,0.988914728164673,0.257298767566681,-0.254731476306915,0.932153046131134 ,0.800876438617706,-0.339855968952179,0.493046551942825,0.101462937891483,-0.233674854040146,0.967006385326386 ,0.106314092874527,-0.103658013045788,0.988914728164673,0.596734344959259,-0.558585286140442,0.576099514961243 ,0.367402404546738,-0.773531317710876,0.516395926475525,0.806965947151184,0.306465566158295,0.504861176013947 ,0.331482470035553,0.125218272209167,0.935114860534668,0.318617641925812,-0.106823146343231,0.941844820976257 ,0.801087200641632,-0.297826498746872,0.519190430641174,0.614185929298401,0.569629371166229,0.546166718006134 ,0.136184617877007,0.141381427645683,0.980543255805969,0.119092851877213,0.270987540483475,0.955187201499939 ,0.391825526952744,0.788023412227631,0.474859833717346,0.283706575632095,0.309986978769302,0.907424211502075 ,0.136184617877007,0.141381427645683,0.980543255805969,0.614185929298401,0.569629371166229,0.546166718006134 ,0.813896775245667,0.349610984325409,0.464051961898804,0.925318360328674,0.379191190004349,1.48290735069168e-006 ,0.386173337697983,0.922426223754883,-1.33558714878745e-005,0.350653737783432,0.829828143119812,0.434081971645355 ,0.813896775245667,0.349610984325409,0.464051961898804,0.334624856710434,-0.800290584564209,0.497555166482925 ,0.249570056796074,-0.831263303756714,0.496705174446106,0.287294447422028,-0.95784193277359,0.000848318391945213 ,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.257298767566681,-0.254731476306915,0.932153046131134 ,0.0777146592736244,-0.258388966321945,0.962909936904907,0.249570056796074,-0.831263303756714,0.496705174446106 ,0.334624856710434,-0.800290584564209,0.497555166482925,0.119092851877213,0.270987540483475,0.955187201499939 ,0.136184617877007,0.141381427645683,0.980543255805969,0.106314092874527,-0.103658013045788,0.988914728164673 ,0.101462937891483,-0.233674854040146,0.967006385326386,0.249570056796074,-0.831263303756714,0.496705174446106 ,0.202535301446915,-0.827068865299225,0.524343967437744,0.230931788682938,-0.972930014133453,0.00881298631429672 ,0.287294447422028,-0.95784193277359,0.000848318391945213,0.0620995722711086,-0.238982826471329,0.969036042690277 ,0.202535301446915,-0.827068865299225,0.524343967437744,0.249570056796074,-0.831263303756714,0.496705174446106 ,0.0777146592736244,-0.258388966321945,0.962909936904907,-0.224501311779022,0.125647932291031,0.966339349746704 ,0.0620995722711086,-0.238982826471329,0.969036042690277,0.0777146592736244,-0.258388966321945,0.962909936904907 ,0.106314092874527,-0.103658013045788,0.988914728164673,0.136184617877007,0.141381427645683,0.980543255805969 ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.224501311779022,0.125647932291031,0.966339349746704 ,0.106314092874527,-0.103658013045788,0.988914728164673,-0.359729558229446,0.842673659324646,0.400619268417358 ,-0.267910957336426,0.269903123378754,0.924865424633026,0.283706575632095,0.309986978769302,0.907424211502075 ,0.350653737783432,0.829828143119812,0.434081971645355,0.386173337697983,0.922426223754883,-1.33558714878745e-005 ,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.359729558229446,0.842673659324646,0.400619268417358 ,0.350653737783432,0.829828143119812,0.434081971645355,-0.484778821468353,-0.720648169517517,0.495636761188507 ,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.961853384971619,-0.273398995399475,-0.00954078417271376 ,-0.530582964420319,-0.847630381584167,0.00210796948522329,-0.223055556416512,-0.293780386447906,0.929483354091644 ,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.907637715339661,-0.237347409129143,0.34620800614357 ,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.82353150844574,0.433955609798431,0.365346997976303 ,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.961853384971619,-0.273398995399475,-0.00954078417271376 ,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.784685611724854,0.430022925138474,0.446484923362732 ,-0.82353150844574,0.433955609798431,0.365346997976303,-0.516254961490631,0.0715761184692383,0.85343873500824 ,-0.224501311779022,0.125647932291031,0.966339349746704,-0.267910957336426,0.269903123378754,0.924865424633026 ,-0.839977502822876,0.365999639034271,0.400602132081985,-0.784685611724854,0.430022925138474,0.446484923362732 ,-0.224501311779022,0.125647932291031,0.966339349746704,-0.379228323698044,0.925303101539612,-2.7772266548709e-005 ,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.839977502822876,0.365999639034271,0.400602132081985 ,-0.359729558229446,0.842673659324646,0.400619268417358,-0.879828155040741,0.475291937589645,4.95063375183236e-007 ,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.82353150844574,0.433955609798431,0.365346997976303 ,-0.784685611724854,0.430022925138474,0.446484923362732,-0.922426700592041,0.386172264814377,-1.29236177599523e-005 ,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.784685611724854,0.430022925138474,0.446484923362732 ,-0.839977502822876,0.365999639034271,0.400602132081985,0.391825526952744,0.788023412227631,0.474859833717346 ,0.806965947151184,0.306465566158295,0.504861176013947,0.934493005275726,0.355923593044281,0.00642255879938602 ,0.470227479934692,0.88252204656601,0.00639821914955974,0.801087200641632,-0.297826498746872,0.519190430641174 ,0.367402404546738,-0.773531317710876,0.516395926475525,0.44488126039505,-0.89555948972702,0.00733880698680878 ,0.931309640407562,-0.364154070615768,0.00736169191077352,0.367402404546738,-0.773531317710876,0.516395926475525 ,0.801087200641632,-0.297826498746872,0.519190430641174,0.318617641925812,-0.106823146343231,0.941844820976257 ,0.101462937891483,-0.233674854040146,0.967006385326386,0.391825526952744,0.788023412227631,0.474859833717346 ,0.119092851877213,0.270987540483475,0.955187201499939,0.331482470035553,0.125218272209167,0.935114860534668 ,0.806965947151184,0.306465566158295,0.504861176013947,0.202535301446915,-0.827068865299225,0.524343967437744 ,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.530582964420319,-0.847630381584167,0.00210796948522329 ,0.230931788682938,-0.972930014133453,0.00881298631429672,0.0620995722711086,-0.238982826471329,0.969036042690277 ,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.484778821468353,-0.720648169517517,0.495636761188507 ,0.202535301446915,-0.827068865299225,0.524343967437744,-0.516254961490631,0.0715761184692383,0.85343873500824 ,-0.223055556416512,-0.293780386447906,0.929483354091644,0.0620995722711086,-0.238982826471329,0.969036042690277 ,-0.224501311779022,0.125647932291031,0.966339349746704,0.318617641925812,-0.106823146343231,0.941844820976257 ,0.331482470035553,0.125218272209167,0.935114860534668,0.119092851877213,0.270987540483475,0.955187201499939 ,0.101462937891483,-0.233674854040146,0.967006385326386,0.800876438617706,-0.339855968952179,0.493046551942825 ,0.257298767566681,-0.254731476306915,0.932153046131134,0.334624856710434,-0.800290584564209,0.497555166482925 ,0.813896775245667,0.349610984325409,0.464051961898804,0.350653737783432,0.829828143119812,0.434081971645355 ,0.283706575632095,0.309986978769302,0.907424211502075,0.257298767566681,-0.254731476306915,0.932153046131134 ,0.106314092874527,-0.103658013045788,0.988914728164673,0.0777146592736244,-0.258388966321945,0.962909936904907 ,0.136184617877007,0.141381427645683,0.980543255805969,0.283706575632095,0.309986978769302,0.907424211502075 ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.907637715339661,-0.237347409129143,0.34620800614357 ,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.82353150844574,0.433955609798431,0.365346997976303 ,-0.267910957336426,0.269903123378754,0.924865424633026,-0.359729558229446,0.842673659324646,0.400619268417358 ,-0.839977502822876,0.365999639034271,0.400602132081985,-0.715936124324799,-0.265720427036285,-0.645622253417969 ,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.590422987937927,0.577111005783081,-0.564219415187836 ,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.280009269714355,0.941216468811035,-0.18896122276783 ,-0.94429612159729,0.285850405693054,0.163077712059021,-0.838626086711884,0.269073814153671,0.473609089851379 ,-0.28647455573082,0.941656053066254,0.176681011915207,0.444880247116089,-0.370750695466995,0.815245687961578 ,0.441483318805695,-0.799440860748291,0.407414764165878,0.971585929393768,-0.201965615153313,0.123412564396858 ,0.867507219314575,0.29306098818779,0.401928424835205,-0.838626086711884,0.269073814153671,0.473609089851379 ,-0.593102335929871,0.413477510213852,0.690844416618347,-0.093751385807991,0.893021583557129,0.440139919519424 ,-0.28647455573082,0.941656053066254,0.176681011915207,-0.593102335929871,0.413477510213852,0.690844416618347 ,-0.287397742271423,0.360831707715988,0.887244582176209,0.16777765750885,0.800705552101135,0.57508373260498,-0.093751385807991 ,0.893021583557129,0.440139919519424,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.715936124324799 ,-0.265720427036285,-0.645622253417969,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.188246309757233 ,-0.278920531272888,-0.941682875156403,0.862523198127747,-0.491381734609604,-0.120820865035057,0.275533765554428 ,-0.959253966808319,0.0625537186861038,0.1276044100523,-0.98238742351532,-0.136499106884003,0.669596016407013 ,-0.609213531017303,-0.424853086471558,0.441483318805695,-0.799440860748291,0.407414764165878,0.275533765554428 ,-0.959253966808319,0.0625537186861038,0.862523198127747,-0.491381734609604,-0.120820865035057,0.971585929393768 ,-0.201965615153313,0.123412564396858,0.1276044100523,-0.98238742351532,-0.136499106884003,-0.157730147242546 ,-0.903618812561035,-0.398238956928253,0.234486192464828,-0.579630196094513,-0.780413389205933,0.669596016407013 ,-0.609213531017303,-0.424853086471558,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.188246309757233 ,-0.278920531272888,-0.941682875156403,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.157730147242546 ,-0.903618812561035,-0.398238956928253,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.942690014839172 ,0.129888460040092,-0.307350814342499,-0.94429612159729,0.285850405693054,0.163077712059021,-0.280009269714355 ,0.941216468811035,-0.18896122276783,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575 ,0.29306098818779,0.401928424835205,0.477360427379608,0.551516830921173,0.684073209762573,0.125939533114433,0.102134250104427 ,0.986766338348389,-0.093751385807991,0.893021583557129,0.440139919519424,-0.48685422539711,0.635573267936707 ,0.599182426929474,-0.644909203052521,0.686387538909912,0.336101531982422,-0.28647455573082,0.941656053066254 ,0.176681011915207,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.726660370826721,-0.194792434573174 ,-0.658802449703217,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.590422987937927,0.577111005783081 ,-0.564219415187836,0.430329024791718,-0.429309993982315,0.794046521186829,0.698819696903229,-0.628040254116058 ,0.342368811368942,0.971585929393768,-0.201965615153313,0.123412564396858,0.862523198127747,-0.491381734609604 ,-0.120820865035057,0.311042487621307,0.756668508052826,0.575069785118103,-0.000230645935516804,0.945964872837067 ,0.324269145727158,0.125939533114433,0.102134250104427,0.986766338348389,-0.287397742271423,0.360831707715988 ,0.887244582176209,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.587697565555573,0.621326804161072 ,-0.518232226371765,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.715936124324799,-0.265720427036285 ,-0.645622253417969,0.196220353245735,-0.529779434204102,0.82512503862381,-0.890061616897583,0.000229601078899577 ,-0.455840140581131,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.157730147242546,-0.903618812561035 ,-0.398238956928253,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.174817264080048,-0.965653240680695 ,-0.192231014370918,0.669596016407013,-0.609213531017303,-0.424853086471558,0.234486192464828,-0.579630196094513 ,-0.780413389205933,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021 ,0.0248145386576653,-0.838626086711884,0.269073814153671,0.473609089851379,-0.94429612159729,0.285850405693054 ,0.163077712059021,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.890061616897583,0.000229601078899577 ,-0.455840140581131,0.15072038769722,0.436317950487137,-0.887079477310181,-0.393206983804703,0.276302039623261 ,-0.876952350139618,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.932197749614716,0.288106322288513 ,0.219093680381775,0.938903152942657,-0.259861499071121,0.225683227181435,0.441483318805695,-0.799440860748291 ,0.407414764165878,0.444880247116089,-0.370750695466995,0.815245687961578,-0.593102335929871,0.413477510213852 ,0.690844416618347,-0.838626086711884,0.269073814153671,0.473609089851379,-0.118636824190617,0.992627620697021 ,0.0248145386576653,0.353509962558746,0.865797221660614,0.354155212640762,-0.280009269714355,0.941216468811035 ,-0.18896122276783,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.0224729143083096,0.939465522766113 ,-0.341905742883682,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.590422987937927,0.577111005783081 ,-0.564219415187836,-0.45841521024704,0.236967280507088,0.856564044952393,-0.48685422539711,0.635573267936707 ,0.599182426929474,-0.093751385807991,0.893021583557129,0.440139919519424,0.16777765750885,0.800705552101135 ,0.57508373260498,0.353509962558746,0.865797221660614,0.354155212640762,0.311042487621307,0.756668508052826,0.575069785118103 ,-0.287397742271423,0.360831707715988,0.887244582176209,-0.593102335929871,0.413477510213852,0.690844416618347 ,0.1276044100523,-0.98238742351532,-0.136499106884003,0.712573170661926,-0.434123963117599,-0.551158607006073 ,0.196220353245735,-0.529779434204102,0.82512503862381,-0.157730147242546,-0.903618812561035,-0.398238956928253 ,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.587697565555573,0.621326804161072,-0.518232226371765 ,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.642236828804016,0.662946939468384,-0.384750843048096 ,-0.94429612159729,0.285850405693054,0.163077712059021,0.275533765554428,-0.959253966808319,0.0625537186861038 ,0.825049936771393,-0.453089714050293,-0.337642371654511,0.712573170661926,-0.434123963117599,-0.551158607006073 ,0.1276044100523,-0.98238742351532,-0.136499106884003,0.938903152942657,-0.259861499071121,0.225683227181435 ,0.825049936771393,-0.453089714050293,-0.337642371654511,0.275533765554428,-0.959253966808319,0.0625537186861038 ,0.441483318805695,-0.799440860748291,0.407414764165878,0.477360427379608,0.551516830921173,0.684073209762573 ,0.867507219314575,0.29306098818779,0.401928424835205,0.458260357379913,-0.0337133072316647,0.888178408145905 ,0.131552502512932,0.257139623165131,0.957378268241882,0.444880247116089,-0.370750695466995,0.815245687961578 ,0.963503360748291,0.0733285918831825,-0.257457196712494,0.932197749614716,0.288106322288513,0.219093680381775 ,0.971585929393768,-0.201965615153313,0.123412564396858,0.698819696903229,-0.628040254116058,0.342368811368942 ,0.710298955440521,-0.332644939422607,0.620340883731842,0.867507219314575,0.29306098818779,0.401928424835205 ,0.862523198127747,-0.491381734609604,-0.120820865035057,0.669596016407013,-0.609213531017303,-0.424853086471558 ,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.324506491422653,-0.76884526014328,-0.550974130630493 ,0.430329024791718,-0.429309993982315,0.794046521186829,-0.39165410399437,-0.637071013450623,-0.663888275623322 ,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.234486192464828,-0.579630196094513,-0.780413389205933 ,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.564248859882355,-0.400254756212235,-0.72209370136261 ,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.188246309757233,-0.278920531272888,-0.941682875156403 ,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.803242444992065,0.584271669387817,-0.115879893302917 ,-0.280009269714355,0.941216468811035,-0.18896122276783,0.16777765750885,0.800705552101135,0.57508373260498,0.477360427379608 ,0.551516830921173,0.684073209762573,0.131552502512932,0.257139623165131,0.957378268241882,-0.45841521024704 ,0.236967280507088,0.856564044952393,0.125939533114433,0.102134250104427,0.986766338348389,0.477360427379608 ,0.551516830921173,0.684073209762573,0.16777765750885,0.800705552101135,0.57508373260498,-0.287397742271423,0.360831707715988 ,0.887244582176209,0.125939533114433,0.102134250104427,0.986766338348389,-0.000230645935516804,0.945964872837067 ,0.324269145727158,0.963503360748291,0.0733285918831825,-0.257457196712494,0.444880247116089,-0.370750695466995 ,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.710298955440521,-0.332644939422607 ,0.620340883731842,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.644909203052521,0.686387538909912 ,0.336101531982422,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.280009269714355,0.941216468811035 ,-0.18896122276783,-0.28647455573082,0.941656053066254,0.176681011915207,-0.590430736541748,-0.351442277431488 ,-0.726553440093994,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.188246309757233,-0.278920531272888 ,-0.941682875156403,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.726660370826721,-0.194792434573174 ,-0.658802449703217,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.425395786762238,0.0713668540120125 ,-0.902189075946808,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.125359445810318,-0.967730283737183 ,-0.218593493103981,0.734102785587311,-0.292018711566925,-0.613040089607239,0.912895321846008,-0.237331077456474 ,-0.332108557224274,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.554785251617432,-0.486120134592056 ,-0.675204038619995,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.734102785587311,-0.292018711566925 ,-0.613040089607239,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.416033059358597,-0.68202668428421 ,-0.60146164894104,0.245215684175491,0.0387152023613453,-0.968695223331451,0.550641417503357,-0.21704863011837 ,-0.806029736995697,0.0798471421003342,-0.235298857092857,-0.968637645244598,-0.382183432579041,-0.525775790214539 ,-0.759931325912476,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.631522357463837,-0.462838768959045 ,-0.622060894966125,0.0447333157062531,0.253253638744354,-0.966365098953247,0.245215684175491,0.0387152023613453 ,-0.968695223331451,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.692777395248413,-0.369596987962723 ,-0.619239509105682,0.014613856561482,0.369894355535507,-0.928958892822266,0.0447333157062531,0.253253638744354 ,-0.966365098953247,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.816524565219879,-0.212788254022598 ,-0.536664545536041,-0.109934903681278,0.544603824615479,-0.831457078456879,0.014613856561482,0.369894355535507 ,-0.928958892822266,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.967885553836823,0.0332815907895565 ,-0.2491784542799,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.109934903681278,0.544603824615479 ,-0.831457078456879,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.961901783943176,-0.240396350622177 ,-0.130209416151047,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.262595504522324,0.756710708141327 ,-0.598692297935486,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.114330105483532,0.989368736743927 ,-0.0898787155747414,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.939602613449097,-0.0850153714418411 ,-0.33154085278511,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.492600291967392,-0.0365926474332809 ,0.869486033916473,0.168574303388596,0.687315046787262,0.706527233123779,0.379244118928909,0.687416434288025 ,0.6193807721138,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.26186203956604,-0.22778545320034 ,0.937839031219482,0.452623516321182,0.438722670078278,0.776308119297028,0.168574303388596,0.687315046787262 ,0.706527233123779,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.0175823662430048,-0.464624613523483 ,0.885333180427551,0.694800972938538,0.194172203540802,0.692494571208954,0.452623516321182,0.438722670078278 ,0.776308119297028,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.11012527346611,-0.683853626251221 ,0.72126042842865,0.860161125659943,-0.0221190489828587,0.509542524814606,0.694800972938538,0.194172203540802 ,0.692494571208954,0.11012527346611,-0.683853626251221,0.72126042842865,0.185537919402123,-0.862958252429962 ,0.469977349042892,0.939531803131104,-0.259159535169601,0.223866790533066,0.860161125659943,-0.0221190489828587 ,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.185537919402123,-0.862958252429962 ,0.469977349042892,0.152538388967514,-0.224785834550858,0.962394595146179,0.536905825138092,-0.0598908923566341 ,0.841513633728027,0.402792274951935,-0.430315464735031,0.807828545570374,0.213872507214546,-0.799906253814697 ,-0.560721397399902,0.431525766849518,-0.644686222076416,-0.631003320217133,0.620412230491638,-0.276802182197571 ,0.7338045835495,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.0485654957592487,-0.998615622520447 ,0.0202043671160936,0.912895321846008,-0.237331077456474,-0.332108557224274,0.34168353676796,-0.250584989786148 ,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.734102785587311,-0.292018711566925 ,-0.613040089607239,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857 ,-0.968637645244598,0.773750245571136,0.0814331769943237,-0.62823498249054,0.734102785587311,-0.292018711566925 ,-0.613040089607239,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.550641417503357,-0.21704863011837 ,-0.806029736995697,0.245215684175491,0.0387152023613453,-0.968695223331451,0.518284618854523,0.496293634176254 ,-0.69647228717804,0.708127677440643,0.316911339759827,-0.6309694647789,0.245215684175491,0.0387152023613453 ,-0.968695223331451,0.0447333157062531,0.253253638744354,-0.966365098953247,0.452985435724258,0.593249797821045 ,-0.665476441383362,0.518284618854523,0.496293634176254,-0.69647228717804,0.0447333157062531,0.253253638744354 ,-0.966365098953247,0.014613856561482,0.369894355535507,-0.928958892822266,0.495889782905579,0.643950700759888 ,-0.582598328590393,0.452985435724258,0.593249797821045,-0.665476441383362,0.014613856561482,0.369894355535507 ,-0.928958892822266,-0.109934903681278,0.544603824615479,-0.831457078456879,0.408554971218109,0.713565170764923 ,-0.569128751754761,0.495889782905579,0.643950700759888,-0.582598328590393,-0.109934903681278,0.544603824615479 ,-0.831457078456879,-0.262595504522324,0.756710708141327,-0.598692297935486,0.298005253076553,0.807478785514832 ,-0.509088277816772,0.408554971218109,0.713565170764923,-0.569128751754761,-0.262595504522324,0.756710708141327 ,-0.598692297935486,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.261479198932648,0.892048358917236 ,-0.368616729974747,0.298005253076553,0.807478785514832,-0.509088277816772,-0.0453839227557182,0.813610911369324 ,-0.579635679721832,0.434583961963654,0.868087708950043,-0.239917635917664,0.274172246456146,0.939159333705902 ,-0.206904113292694,0.261479198932648,0.892048358917236,-0.368616729974747,0.434583961963654,0.868087708950043 ,-0.239917635917664,0.432530790567398,0.890540361404419,-0.140907749533653,0.244631126523018,0.968607366085052 ,-0.0442199148237705,0.274172246456146,0.939159333705902,-0.206904113292694,0.432530790567398,0.890540361404419 ,-0.140907749533653,0.473273813724518,0.879378318786621,-0.0520168133080006,0.308822751045227,0.945434510707855 ,0.103837110102177,0.244631126523018,0.968607366085052,-0.0442199148237705,0.493666648864746,0.825041174888611 ,0.274955064058304,0.308822751045227,0.945434510707855,0.103837110102177,0.473273813724518,0.879378318786621 ,-0.0520168133080006,0.379244118928909,0.687416434288025,0.6193807721138,0.168574303388596,0.687315046787262 ,0.706527233123779,0.168574303388596,0.687315046787262,0.706527233123779,0.452623516321182,0.438722670078278 ,0.776308119297028,0.684545934200287,0.646372973918915,0.337044298648834,0.493666648864746,0.825041174888611 ,0.274955064058304,0.452623516321182,0.438722670078278,0.776308119297028,0.694800972938538,0.194172203540802 ,0.692494571208954,0.821635723114014,0.506255805492401,0.261953771114349,0.684545934200287,0.646372973918915 ,0.337044298648834,0.694800972938538,0.194172203540802,0.692494571208954,0.860161125659943,-0.0221190489828587 ,0.509542524814606,0.910674393177032,0.388812184333801,0.139632686972618,0.821635723114014,0.506255805492401 ,0.261953771114349,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601 ,0.223866790533066,0.978960454463959,0.203055590391159,-0.0201213043183088,0.910674393177032,0.388812184333801 ,0.139632686972618,0.939531803131104,-0.259159535169601,0.223866790533066,0.536905825138092,-0.0598908923566341 ,0.841513633728027,0.808023393154144,0.485407531261444,0.333882838487625,0.978960454463959,0.203055590391159 ,-0.0201213043183088,0.716321706771851,-0.189274966716766,0.671608626842499,0.633299946784973,-0.263623267412186 ,-0.727622151374817,0.655673146247864,0.429177463054657,-0.621208012104034,0.8587726354599,0.351541489362717 ,0.372730553150177,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474 ,-0.332108557224274,0.917431473731995,0.173299670219421,-0.358171314001083,0.560299038887024,0.522571742534637 ,-0.642638146877289,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.0529462173581123,-0.663012385368347 ,-0.746733784675598,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.174817264080048,-0.965653240680695 ,-0.192231014370918,-0.118618525564671,-0.856628596782684,-0.502112627029419,0.0447756871581078,-0.48030561208725 ,0.875957548618317,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.785106539726257,-0.527087867259979 ,-0.325247794389725,0.152538388967514,-0.224785834550858,0.962394595146179,0.185537919402123,-0.862958252429962 ,0.469977349042892,0.698819696903229,-0.628040254116058,0.342368811368942,0.430329024791718,-0.429309993982315 ,0.794046521186829,0.185537919402123,-0.862958252429962,0.469977349042892,0.11012527346611,-0.683853626251221 ,0.72126042842865,0.710298955440521,-0.332644939422607,0.620340883731842,0.698819696903229,-0.628040254116058 ,0.342368811368942,0.11012527346611,-0.683853626251221,0.72126042842865,-0.0175823662430048,-0.464624613523483 ,0.885333180427551,0.458260357379913,-0.0337133072316647,0.888178408145905,0.710298955440521,-0.332644939422607 ,0.620340883731842,-0.0175823662430048,-0.464624613523483,0.885333180427551,-0.26186203956604,-0.22778545320034 ,0.937839031219482,0.131552502512932,0.257139623165131,0.957378268241882,0.458260357379913,-0.0337133072316647 ,0.888178408145905,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.492600291967392,-0.0365926474332809 ,0.869486033916473,-0.45841521024704,0.236967280507088,0.856564044952393,0.131552502512932,0.257139623165131 ,0.957378268241882,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.507395565509796,-0.316553086042404 ,0.801463544368744,-0.45841521024704,0.236967280507088,0.856564044952393,-0.507395565509796,-0.316553086042404 ,0.801463544368744,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.48685422539711,0.635573267936707 ,0.599182426929474,-0.45841521024704,0.236967280507088,0.856564044952393,-0.745286226272583,-0.551344156265259 ,0.374924063682556,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.644909203052521,0.686387538909912 ,0.336101531982422,-0.48685422539711,0.635573267936707,0.599182426929474,-0.774236679077148,-0.53553432226181 ,0.337284058332443,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.732633888721466,0.678043484687805 ,0.0591999553143978,-0.644909203052521,0.686387538909912,0.336101531982422,-0.767853438854218,-0.571131825447083 ,0.290188789367676,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.803242444992065,0.584271669387817 ,-0.115879893302917,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.961901783943176,-0.240396350622177 ,-0.130209416151047,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.896995723247528,0.227888956665993 ,-0.378768175840378,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.967885553836823,0.0332815907895565 ,-0.2491784542799,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.726660370826721,-0.194792434573174 ,-0.658802449703217,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.816524565219879,-0.212788254022598 ,-0.536664545536041,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.590430736541748,-0.351442277431488 ,-0.726553440093994,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.692777395248413,-0.369596987962723 ,-0.619239509105682,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.564248859882355,-0.400254756212235 ,-0.72209370136261,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.631522357463837,-0.462838768959045 ,-0.622060894966125,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.39165410399437,-0.637071013450623 ,-0.663888275623322,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.416033059358597,-0.68202668428421 ,-0.60146164894104,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.0995239168405533,-0.824471116065979 ,-0.55708384513855,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.184634819626808,-0.868635058403015 ,-0.459764152765274,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.174817264080048,-0.965653240680695 ,-0.192231014370918,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.397501945495605,-0.911328136920929 ,-0.10711282491684,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.174817264080048,-0.965653240680695 ,-0.192231014370918,0.473273813724518,0.879378318786621,-0.0520168133080006,0.432530790567398,0.890540361404419 ,-0.140907749533653,-0.0387217588722706,0.991758227348328,0.122131980955601,0.0474359504878521,0.963465213775635 ,0.263599425554276,0.432530790567398,0.890540361404419,-0.140907749533653,0.434583961963654,0.868087708950043 ,-0.239917635917664,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0387217588722706,0.991758227348328 ,0.122131980955601,0.434583961963654,0.868087708950043,-0.239917635917664,-0.0453839227557182,0.813610911369324 ,-0.579635679721832,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.114330105483532,0.989368736743927 ,-0.0898787155747414,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.961901783943176,-0.240396350622177 ,-0.130209416151047,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.361907035112381,0.692692756652832 ,-0.623859047889709,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.767853438854218,-0.571131825447083 ,0.290188789367676,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.939602613449097,-0.0850153714418411 ,-0.33154085278511,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.774236679077148,-0.53553432226181 ,0.337284058332443,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.950904071331024,-0.10767637193203 ,0.290150344371796,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.745286226272583,-0.551344156265259 ,0.374924063682556,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.888648450374603,-0.0919873118400574 ,0.449268519878387,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.507395565509796,-0.316553086042404 ,0.801463544368744,-0.356422990560532,-0.175295606255531,0.917733132839203,-0.82242077589035,-0.122631624341011 ,0.555504739284515,-0.507395565509796,-0.316553086042404,0.801463544368744,0.379244118928909,0.687416434288025 ,0.6193807721138,0.281729221343994,0.614752173423767,0.736687481403351,-0.356422990560532,-0.175295606255531 ,0.917733132839203,0.379244118928909,0.687416434288025,0.6193807721138,0.473273813724518,0.879378318786621,-0.0520168133080006 ,0.0474359504878521,0.963465213775635,0.263599425554276,0.281729221343994,0.614752173423767,0.736687481403351 ,0.0474359504878521,0.963465213775635,0.263599425554276,-0.82242077589035,-0.122631624341011,0.555504739284515 ,-0.356422990560532,-0.175295606255531,0.917733132839203,0.281729221343994,0.614752173423767,0.736687481403351 ,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.0387217588722706,0.991758227348328,0.122131980955601 ,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.950904071331024,-0.10767637193203,0.290150344371796 ,0.0474359504878521,0.963465213775635,0.263599425554276,-0.0387217588722706,0.991758227348328,0.122131980955601 ,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.82242077589035,-0.122631624341011,0.555504739284515 ,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.382183432579041,-0.525775790214539,-0.759931325912476 ,-0.554785251617432,-0.486120134592056,-0.675204038619995,-0.125359445810318,-0.967730283737183,-0.218593493103981 ,-0.382183432579041,-0.525775790214539,-0.759931325912476,0.0798471421003342,-0.235298857092857,-0.968637645244598 ,0.0883260667324066,-0.0597434565424919,-0.994298338890076,-0.554785251617432,-0.486120134592056,-0.675204038619995 ,0.773750245571136,0.0814331769943237,-0.62823498249054,0.550641417503357,-0.21704863011837,-0.806029736995697 ,0.708127677440643,0.316911339759827,-0.6309694647789,0.834144115447998,0.219395592808723,-0.506032764911652 ,0.912895321846008,-0.237331077456474,-0.332108557224274,0.773750245571136,0.0814331769943237,-0.62823498249054 ,0.834144115447998,0.219395592808723,-0.506032764911652,0.917431473731995,0.173299670219421,-0.358171314001083 ,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.0485654957592487,-0.998615622520447,0.0202043671160936 ,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.184634819626808,-0.868635058403015,-0.459764152765274 ,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.397501945495605,-0.911328136920929,-0.10711282491684 ,0.550641417503357,-0.21704863011837,-0.806029736995697,0.773750245571136,0.0814331769943237,-0.62823498249054 ,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0447756871581078,-0.48030561208725,0.875957548618317 ,0.402792274951935,-0.430315464735031,0.807828545570374,0.152538388967514,-0.224785834550858,0.962394595146179 ,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.34168353676796,-0.250584989786148,-0.90579217672348 ,0.431525766849518,-0.644686222076416,-0.631003320217133,0.213872507214546,-0.799906253814697,-0.560721397399902 ,0.536905825138092,-0.0598908923566341,0.841513633728027,0.152538388967514,-0.224785834550858,0.962394595146179 ,0.402792274951935,-0.430315464735031,0.807828545570374,0.620412230491638,-0.276802182197571,0.7338045835495 ,0.620412230491638,-0.276802182197571,0.7338045835495,0.716321706771851,-0.189274966716766,0.671608626842499 ,0.536905825138092,-0.0598908923566341,0.841513633728027,0.34168353676796,-0.250584989786148,-0.90579217672348 ,0.560299038887024,0.522571742534637,-0.642638146877289,0.655673146247864,0.429177463054657,-0.621208012104034 ,0.633299946784973,-0.263623267412186,-0.727622151374817,0.560299038887024,0.522571742534637,-0.642638146877289 ,0.808023393154144,0.485407531261444,0.333882838487625,0.8587726354599,0.351541489362717,0.372730553150177,0.655673146247864 ,0.429177463054657,-0.621208012104034,0.808023393154144,0.485407531261444,0.333882838487625,0.536905825138092 ,-0.0598908923566341,0.841513633728027,0.716321706771851,-0.189274966716766,0.671608626842499,0.8587726354599 ,0.351541489362717,0.372730553150177,0.152538388967514,-0.224785834550858,0.962394595146179,0.430329024791718 ,-0.429309993982315,0.794046521186829,-0.665691614151001,-0.224520370364189,0.711649715900421,0.0447756871581078 ,-0.48030561208725,0.875957548618317,0.430329024791718,-0.429309993982315,0.794046521186829,-0.324506491422653 ,-0.76884526014328,-0.550974130630493,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.665691614151001 ,-0.224520370364189,0.711649715900421,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.0529462173581123 ,-0.663012385368347,-0.746733784675598,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.785106539726257 ,-0.527087867259979,-0.325247794389725,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.213872507214546 ,-0.799906253814697,-0.560721397399902,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.118618525564671 ,-0.856628596782684,-0.502112627029419,0.213872507214546,-0.799906253814697,-0.560721397399902,0.402792274951935 ,-0.430315464735031,0.807828545570374,0.0447756871581078,-0.48030561208725,0.875957548618317,0.431525766849518 ,-0.644686222076416,-0.631003320217133,0.633299946784973,-0.263623267412186,-0.727622151374817,0.716321706771851 ,-0.189274966716766,0.671608626842499,0.620412230491638,-0.276802182197571,0.7338045835495,0.34168353676796,-0.250584989786148 ,-0.90579217672348,0.633299946784973,-0.263623267412186,-0.727622151374817,0.431525766849518,-0.644686222076416 ,-0.631003320217133,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.619437336921692,-0.682137429714203 ,0.38856914639473,0.944702625274658,-0.242696091532707,0.22053462266922,0.783942937850952,-0.186095729470253 ,-0.59228527545929,0.563710689544678,-0.825831174850464,-0.0152685670182109,-0.622635543346405,-0.330902069807053 ,-0.709104180335999,-0.345263749361038,0.0585285425186157,-0.936678886413574,0.860051214694977,-0.450541734695435 ,-0.239424526691437,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.636468827724457,-0.680911600589752 ,-0.362307667732239,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.559645414352417,0.337002664804459 ,-0.757117092609406,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.812022507190704,-0.510543346405029 ,-0.282780736684799,-0.204246431589127,0.468568325042725,-0.859492361545563,0.0350158661603928,0.28818079829216 ,-0.956935584545136,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.964417695999146,-0.242346316576004 ,-0.10567332059145,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.204246431589127,0.468568325042725 ,-0.859492361545563,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.936240494251251,-0.336361736059189 ,-0.101560480892658,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.348378151655197,0.573172330856323 ,-0.741691410541534,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.714399695396423,0.0904595702886581 ,0.693866074085236,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.28282842040062,0.665716886520386 ,-0.690528094768524,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.68883353471756,0.240426927804947 ,0.68388831615448,-0.515329539775848,0.822090923786163,0.242078438401222,-0.218518972396851,0.973436176776886 ,-0.0683486759662628,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.362409710884094,-0.350539416074753 ,0.86358630657196,0.421934872865677,0.754051804542542,0.503365516662598,-0.0888755843043327,0.982992351055145 ,0.160708159208298,0.647586286067963,0.657160103321075,0.385710477828979,-0.231773406267166,-0.521698236465454 ,0.821043252944946,-0.681038498878479,0.23202945291996,0.694513380527496,-0.194348111748695,0.853331387042999 ,0.483791589736938,-0.186525732278824,0.166592419147491,0.968222677707672,0.557236135005951,-0.528833091259003 ,0.640174508094788,0.84937584400177,-0.117848217487335,0.514463245868683,0.147361263632774,0.536922037601471 ,0.83066201210022,0.492649406194687,-0.832895398139954,0.252154290676117,0.117170162498951,-0.72569465637207 ,0.677966356277466,0.688185930252075,-0.329065650701523,0.646618843078613,0.740381181240082,-0.407373487949371 ,0.53467983007431,0.128620937466621,-0.731338679790497,-0.669776320457459,0.0479290783405304,-0.711503028869629 ,-0.701046526432037,0.409443646669388,-0.535873591899872,-0.738373458385468,0.39375701546669,-0.458273440599442 ,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.783942937850952,-0.186095729470253 ,-0.59228527545929,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253 ,-0.59228527545929,0.944702625274658,-0.242696091532707,0.22053462266922,0.196220353245735,-0.529779434204102 ,0.82512503862381,0.712573170661926,-0.434123963117599,-0.551158607006073,0.990355789661407,0.138366982340813 ,0.0070703998208046,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.270774930715561,0.961904466152191 ,-0.0376923382282257,0.524228572845459,0.571583867073059,0.631249785423279,-0.559645414352417,0.337002664804459 ,-0.757117092609406,0.0350158661603928,0.28818079829216,-0.956935584545136,0.15072038769722,0.436317950487137 ,-0.887079477310181,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.0350158661603928,0.28818079829216 ,-0.956935584545136,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.393206983804703,0.276302039623261 ,-0.876952350139618,0.15072038769722,0.436317950487137,-0.887079477310181,-0.204246431589127,0.468568325042725 ,-0.859492361545563,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.587697565555573,0.621326804161072 ,-0.518232226371765,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.642236828804016,0.662946939468384 ,-0.384750843048096,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.348378151655197,0.573172330856323 ,-0.741691410541534,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.28282842040062,0.665716886520386 ,-0.690528094768524,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.118636824190617,0.992627620697021 ,0.0248145386576653,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021 ,0.0248145386576653,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.515329539775848,0.822090923786163 ,0.242078438401222,-0.544045865535736,0.806812047958374,0.230365887284279,-0.0888755843043327,0.982992351055145 ,0.160708159208298,-0.0888755843043327,0.982992351055145,0.160708159208298,0.421934872865677,0.754051804542542 ,0.503365516662598,0.353509962558746,0.865797221660614,0.354155212640762,-0.118636824190617,0.992627620697021 ,0.0248145386576653,0.421934872865677,0.754051804542542,0.503365516662598,0.647586286067963,0.657160103321075 ,0.385710477828979,0.353509962558746,0.865797221660614,0.354155212640762,0.186152040958405,0.93400251865387,0.304937154054642 ,0.962971687316895,0.234042793512344,-0.133826553821564,0.376616507768631,0.266982734203339,-0.887062668800354 ,-0.115848742425442,0.797249376773834,-0.592429339885712,0.981993198394775,-0.177747964859009,-0.0639918148517609 ,0.922376871109009,0.332838177680969,0.19606027007103,0.932197749614716,0.288106322288513,0.219093680381775,0.963503360748291 ,0.0733285918831825,-0.257457196712494,0.656768381595612,0.692223727703094,-0.299134790897369,0.974745631217957 ,0.220444723963737,0.0357081368565559,0.86196494102478,-0.1180724427104,-0.493026673793793,0.675891757011414 ,0.290058821439743,-0.677522122859955,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.576983273029327 ,-0.730052053928375,0.366216242313385,-0.560702860355377,-0.742602586746216,0.366270005702972,0.0984330475330353 ,-0.979092538356781,-0.178013265132904,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.570683121681213 ,-0.742836952209473,0.350019991397858,-0.570909857749939,-0.742268860340118,0.350854486227036,-0.576983273029327 ,-0.730052053928375,0.366216242313385,0.117170162498951,-0.72569465637207,0.677966356277466,0.492649406194687 ,-0.832895398139954,0.252154290676117,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.432871133089066 ,-0.797651648521423,0.419969528913498,-0.525343060493469,-0.763313293457031,0.375988662242889,0.146697908639908 ,-0.919724345207214,0.364124774932861,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.939789652824402 ,-0.260946482419968,-0.220685958862305,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.411500960588455 ,-0.813480317592621,0.410994797945023,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953 ,-0.834601283073425,0.426168650388718,-0.362409710884094,-0.350539416074753,0.86358630657196,-0.948863983154297 ,0.0798187553882599,0.305427759885788,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.349028646945953 ,-0.834601283073425,0.426168650388718,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.938455939292908 ,0.222387745976448,0.26428034901619,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.845608711242676 ,-0.529381453990936,-0.0685647577047348,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.936240494251251 ,-0.336361736059189,-0.101560480892658,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.258471637964249 ,-0.55105721950531,0.793428242206573,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.936240494251251 ,-0.336361736059189,-0.101560480892658,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.74268364906311 ,-0.662175238132477,0.099724605679512,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.812022507190704 ,-0.510543346405029,-0.282780736684799,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.704847455024719 ,-0.653521716594696,0.275861263275146,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.636468827724457 ,-0.680911600589752,-0.362307667732239,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.585366904735565 ,-0.749170899391174,0.309981554746628,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.899655342102051 ,0.0265117771923542,-0.435795217752457,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.563165187835693 ,-0.765297174453735,0.311713248491287,-0.940216422080994,-0.294904381036758,-0.170365795493126,0.274054676294327 ,-0.837668061256409,0.472447067499161,0.122500397264957,-0.675016582012177,0.727561831474304,-0.971858441829681 ,-0.121235102415085,0.201973125338554,0.619437336921692,-0.682137429714203,0.38856914639473,0.0984330475330353 ,-0.979092538356781,-0.178013265132904,-0.560702860355377,-0.742602586746216,0.366270005702972,0.129642620682716 ,-0.699265003204346,0.703008711338043,0.938903152942657,-0.259861499071121,0.225683227181435,0.932197749614716 ,0.288106322288513,0.219093680381775,0.656768381595612,0.692223727703094,-0.299134790897369,-0.964417695999146 ,-0.242346316576004,-0.10567332059145,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.348378151655197 ,0.573172330856323,-0.741691410541534,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.74268364906311 ,-0.662175238132477,0.099724605679512,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.964417695999146 ,-0.242346316576004,-0.10567332059145,-0.704847455024719,-0.653521716594696,0.275861263275146,0.647586286067963 ,0.657160103321075,0.385710477828979,0.421934872865677,0.754051804542542,0.503365516662598,-0.362409710884094 ,-0.350539416074753,0.86358630657196,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953 ,-0.834601283073425,0.426168650388718,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.362409710884094 ,-0.350539416074753,0.86358630657196,0.353509962558746,0.865797221660614,0.354155212640762,0.647586286067963 ,0.657160103321075,0.385710477828979,0.311042487621307,0.756668508052826,0.575069785118103,-0.348378151655197 ,0.573172330856323,-0.741691410541534,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.587697565555573 ,0.621326804161072,-0.518232226371765,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.000230645935516804 ,0.945964872837067,0.324269145727158,0.311042487621307,0.756668508052826,0.575069785118103,0.647586286067963 ,0.657160103321075,0.385710477828979,-0.194348111748695,0.853331387042999,0.483791589736938,-0.231773406267166 ,-0.521698236465454,0.821043252944946,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.938751816749573 ,-0.267549335956573,-0.2171690762043,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938455939292908 ,0.222387745976448,0.26428034901619,-0.68883353471756,0.240426927804947,0.68388831615448,-0.25869232416153,-0.551353573799133 ,0.793150365352631,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.68883353471756,0.240426927804947 ,0.68388831615448,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.258471637964249,-0.55105721950531 ,0.793428242206573,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.544045865535736,0.806812047958374 ,0.230365887284279,-0.938455939292908,0.222387745976448,0.26428034901619,-0.948863983154297,0.0798187553882599 ,0.305427759885788,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.582318484783173,0.299308508634567 ,0.755856871604919,-0.241258025169373,0.814110457897186,0.528222262859344,-0.608640491962433,0.785175085067749 ,-0.114266492426395,-0.963154852390289,0.258741587400436,0.073385939002037,-0.515329539775848,0.822090923786163 ,0.242078438401222,-0.68883353471756,0.240426927804947,0.68388831615448,-0.384408742189407,0.77344286441803,0.504000067710876 ,-0.646622598171234,0.407719850540161,0.644704401493073,-0.68883353471756,0.240426927804947,0.68388831615448 ,-0.938455939292908,0.222387745976448,0.26428034901619,-0.660113751888275,0.749479293823242,0.0503051020205021 ,-0.384408742189407,0.77344286441803,0.504000067710876,-0.938455939292908,0.222387745976448,0.26428034901619 ,-0.544045865535736,0.806812047958374,0.230365887284279,-0.915725409984589,0.365749269723892,0.166356295347214 ,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.544045865535736,0.806812047958374,0.230365887284279 ,-0.515329539775848,0.822090923786163,0.242078438401222,-0.646622598171234,0.407719850540161,0.644704401493073 ,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073 ,-0.384408742189407,0.77344286441803,0.504000067710876,-0.241258025169373,0.814110457897186,0.528222262859344 ,-0.582318484783173,0.299308508634567,0.755856871604919,-0.384408742189407,0.77344286441803,0.504000067710876 ,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.608640491962433,0.785175085067749,-0.114266492426395 ,-0.241258025169373,0.814110457897186,0.528222262859344,-0.660113751888275,0.749479293823242,0.0503051020205021 ,-0.915725409984589,0.365749269723892,0.166356295347214,-0.963154852390289,0.258741587400436,0.073385939002037 ,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.915725409984589,0.365749269723892,0.166356295347214 ,-0.646622598171234,0.407719850540161,0.644704401493073,-0.582318484783173,0.299308508634567,0.755856871604919 ,-0.963154852390289,0.258741587400436,0.073385939002037,0.768967747688293,-0.480744570493698,0.421394437551498 ,0.786129951477051,-0.545342028141022,0.290863931179047,0.786934494972229,-0.544415593147278,0.290423303842545 ,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.86196494102478,-0.1180724427104,-0.493026673793793 ,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103 ,0.974745631217957,0.220444723963737,0.0357081368565559,0.656768381595612,0.692223727703094,-0.299134790897369 ,0.932197749614716,0.288106322288513,0.219093680381775,0.117170162498951,-0.72569465637207,0.677966356277466 ,0.130088999867439,-0.835984408855438,0.533110618591309,0.767808198928833,-0.477225512266159,0.427465051412582 ,0.688185930252075,-0.329065650701523,0.646618843078613,-0.570683121681213,-0.742836952209473,0.350019991397858 ,0.130088999867439,-0.835984408855438,0.533110618591309,0.117170162498951,-0.72569465637207,0.677966356277466 ,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.673596203327179,-0.148960739374161,0.723932862281799 ,-0.186525732278824,0.166592419147491,0.968222677707672,-0.681038498878479,0.23202945291996,0.694513380527496 ,0.492649406194687,-0.832895398139954,0.252154290676117,0.740381181240082,-0.407373487949371,0.53467983007431 ,0.740420699119568,-0.407449632883072,0.53456711769104,0.981993198394775,-0.177747964859009,-0.0639918148517609 ,0.84937584400177,-0.117848217487335,0.514463245868683,0.557236135005951,-0.528833091259003,0.640174508094788 ,-0.194348111748695,0.853331387042999,0.483791589736938,-0.681038498878479,0.23202945291996,0.694513380527496 ,-0.186525732278824,0.166592419147491,0.968222677707672,0.147361263632774,0.536922037601471,0.83066201210022 ,0.147361263632774,0.536922037601471,0.83066201210022,0.186152040958405,0.93400251865387,0.304937154054642,-0.194348111748695 ,0.853331387042999,0.483791589736938,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.963503360748291 ,0.0733285918831825,-0.257457196712494,0.376616507768631,0.266982734203339,-0.887062668800354,0.962971687316895 ,0.234042793512344,-0.133826553821564,0.963503360748291,0.0733285918831825,-0.257457196712494,-0.000230645935516804 ,0.945964872837067,0.324269145727158,-0.115848742425442,0.797249376773834,-0.592429339885712,0.376616507768631 ,0.266982734203339,-0.887062668800354,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.194348111748695 ,0.853331387042999,0.483791589736938,0.186152040958405,0.93400251865387,0.304937154054642,-0.115848742425442 ,0.797249376773834,-0.592429339885712,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938751816749573 ,-0.267549335956573,-0.2171690762043,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.673596203327179 ,-0.148960739374161,0.723932862281799,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.263038337230682 ,-0.85704118013382,-0.443047612905502,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.939789652824402 ,-0.260946482419968,-0.220685958862305,-0.263038337230682,-0.85704118013382,-0.443047612905502,0.492649406194687 ,-0.832895398139954,0.252154290676117,0.146697908639908,-0.919724345207214,0.364124774932861,-0.319790989160538 ,-0.818331360816956,-0.47756415605545,0.492649406194687,-0.832895398139954,0.252154290676117,0.557236135005951 ,-0.528833091259003,0.640174508094788,0.146697908639908,-0.919724345207214,0.364124774932861,0.84937584400177 ,-0.117848217487335,0.514463245868683,0.962971687316895,0.234042793512344,-0.133826553821564,0.186152040958405 ,0.93400251865387,0.304937154054642,0.147361263632774,0.536922037601471,0.83066201210022,0.981993198394775,-0.177747964859009 ,-0.0639918148517609,0.962971687316895,0.234042793512344,-0.133826553821564,0.84937584400177,-0.117848217487335 ,0.514463245868683,0.146697908639908,-0.919724345207214,0.364124774932861,0.557236135005951,-0.528833091259003 ,0.640174508094788,-0.186525732278824,0.166592419147491,0.968222677707672,-0.673596203327179,-0.148960739374161 ,0.723932862281799,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.525343060493469,-0.763313293457031 ,0.375988662242889,-0.570909857749939,-0.742268860340118,0.350854486227036,0.143902435898781,-0.987122178077698 ,-0.0698700472712517,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0479290783405304,-0.711503028869629 ,-0.701046526432037,0.128620937466621,-0.731338679790497,-0.669776320457459,0.675891757011414,0.290058821439743 ,-0.677522122859955,0.86196494102478,-0.1180724427104,-0.493026673793793,0.39375701546669,-0.458273440599442 ,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.86196494102478,-0.1180724427104 ,-0.493026673793793,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.39375701546669,-0.458273440599442 ,-0.796831786632538,0.675891757011414,0.290058821439743,-0.677522122859955,0.409443646669388,-0.535873591899872 ,-0.738373458385468,0.851781845092773,0.0115588782355189,-0.523769080638886,0.825049936771393,-0.453089714050293 ,-0.337642371654511,0.938903152942657,-0.259861499071121,0.225683227181435,0.656768381595612,0.692223727703094 ,-0.299134790897369,0.675891757011414,0.290058821439743,-0.677522122859955,0.851781845092773,0.0115588782355189 ,-0.523769080638886,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.423463702201843,-0.905563116073608 ,0.0251786317676306,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.130088999867439,-0.835984408855438 ,0.533110618591309,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.622635543346405,-0.330902069807053 ,-0.709104180335999,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.899655342102051,0.0265117771923542 ,-0.435795217752457,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.345263749361038,0.0585285425186157 ,-0.936678886413574,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.944702625274658,-0.242696091532707 ,0.22053462266922,0.619437336921692,-0.682137429714203,0.38856914639473,0.563710689544678,-0.825831174850464 ,-0.0152685670182109,0.860051214694977,-0.450541734695435,-0.239424526691437,0.860051214694977,-0.450541734695435 ,-0.239424526691437,0.990355789661407,0.138366982340813,0.0070703998208046,0.944702625274658,-0.242696091532707 ,0.22053462266922,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.890061616897583,0.000229601078899577 ,-0.455840140581131,-0.270774930715561,0.961904466152191,-0.0376923382282257,-0.182028561830521,0.561503648757935 ,-0.80720454454422,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.196220353245735,-0.529779434204102 ,0.82512503862381,0.524228572845459,0.571583867073059,0.631249785423279,-0.270774930715561,0.961904466152191 ,-0.0376923382282257,0.196220353245735,-0.529779434204102,0.82512503862381,0.944702625274658,-0.242696091532707 ,0.22053462266922,0.990355789661407,0.138366982340813,0.0070703998208046,0.524228572845459,0.571583867073059 ,0.631249785423279,0.619437336921692,-0.682137429714203,0.38856914639473,0.129642620682716,-0.699265003204346 ,0.703008711338043,0.122500397264957,-0.675016582012177,0.727561831474304,0.274054676294327,-0.837668061256409 ,0.472447067499161,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119 ,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119 ,0.796919584274292,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.899655342102051,0.0265117771923542 ,-0.435795217752457,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.971858441829681,-0.121235102415085 ,0.201973125338554,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.622635543346405,-0.330902069807053 ,-0.709104180335999,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.274054676294327,-0.837668061256409 ,0.472447067499161,0.274054676294327,-0.837668061256409,0.472447067499161,0.563710689544678,-0.825831174850464 ,-0.0152685670182109,0.619437336921692,-0.682137429714203,0.38856914639473,-0.559645414352417,0.337002664804459 ,-0.757117092609406,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.345263749361038,0.0585285425186157 ,-0.936678886413574,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.182028561830521,0.561503648757935 ,-0.80720454454422,0.990355789661407,0.138366982340813,0.0070703998208046,0.860051214694977,-0.450541734695435 ,-0.239424526691437,0.779076516628265,-0.514032542705536,0.35890144109726,0.786129951477051,-0.545342028141022 ,0.290863931179047,0.768967747688293,-0.480744570493698,0.421394437551498,0.130088999867439,-0.835984408855438 ,0.533110618591309,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.76507031917572,-0.643946468830109 ,0.000624333799351007,0.786640048027039,-0.542381346225739,0.294991344213486,0.785886585712433,-0.543201982975006 ,0.295489281415939,0.767808198928833,-0.477225512266159,0.427465051412582,0.786934494972229,-0.544415593147278 ,0.290423303842545,0.78587132692337,-0.599782109260559,0.150557950139046,0.764481008052826,-0.644642233848572 ,-0.00227227224968374,0.786640048027039,-0.542381346225739,0.294991344213486,0.76507031917572,-0.643946468830109 ,0.000624333799351007,0.785931706428528,-0.599372208118439,0.151869475841522,0.767808198928833,-0.477225512266159 ,0.427465051412582,0.785886585712433,-0.543201982975006,0.295489281415939,0.778943240642548,-0.513350427150726 ,0.360164850950241,0.517825782299042,-0.683434009552002,0.514562368392944,0.543316781520844,-0.79720413684845 ,0.263196527957916,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.818628549575806,-0.56630539894104 ,-0.095631942152977,0.936200797557831,-0.349729657173157,0.0348892845213413,0.927894592285156,-0.210005521774292 ,0.308073401451111,0.795584321022034,-0.263417273759842,0.545579493045807,0.623724460601807,-0.472118139266968 ,0.622954428195953,0.785886585712433,-0.543201982975006,0.295489281415939,0.786640048027039,-0.542381346225739 ,0.294991344213486,0.207798928022385,-0.957674980163574,0.199194043874741,0.171830341219902,-0.731816828250885 ,0.659483432769775,0.786640048027039,-0.542381346225739,0.294991344213486,0.785931706428528,-0.599372208118439 ,0.151869475841522,0.451574474573135,-0.847453653812408,-0.279110699892044,0.207798928022385,-0.957674980163574 ,0.199194043874741,0.785931706428528,-0.599372208118439,0.151869475841522,0.78587132692337,-0.599782109260559 ,0.150557950139046,0.737974345684052,-0.506336569786072,-0.446113437414169,0.451574474573135,-0.847453653812408 ,-0.279110699892044,0.78587132692337,-0.599782109260559,0.150557950139046,0.786934494972229,-0.544415593147278 ,0.290423303842545,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.737974345684052,-0.506336569786072 ,-0.446113437414169,0.786934494972229,-0.544415593147278,0.290423303842545,0.786129951477051,-0.545342028141022 ,0.290863931179047,0.947726309299469,0.160956501960754,0.275513887405396,0.967499911785126,-0.0959258452057838 ,-0.233970403671265,0.786129951477051,-0.545342028141022,0.290863931179047,0.779076516628265,-0.514032542705536 ,0.35890144109726,0.694981157779694,0.0461361445486546,0.717546284198761,0.947726309299469,0.160956501960754 ,0.275513887405396,0.382880628108978,-0.336864858865738,0.860188663005829,0.694981157779694,0.0461361445486546 ,0.717546284198761,0.779076516628265,-0.514032542705536,0.35890144109726,0.778943240642548,-0.513350427150726 ,0.360164850950241,0.778943240642548,-0.513350427150726,0.360164850950241,0.785886585712433,-0.543201982975006 ,0.295489281415939,0.171830341219902,-0.731816828250885,0.659483432769775,0.382880628108978,-0.336864858865738 ,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,0.207798928022385,-0.957674980163574 ,0.199194043874741,-0.0772176012396812,-0.989201128482819,0.124573387205601,-0.119434408843517,-0.692093312740326 ,0.711858332157135,0.207798928022385,-0.957674980163574,0.199194043874741,0.451574474573135,-0.847453653812408 ,-0.279110699892044,0.227369338274002,-0.840859830379486,-0.491180092096329,-0.0772176012396812,-0.989201128482819 ,0.124573387205601,0.451574474573135,-0.847453653812408,-0.279110699892044,0.737974345684052,-0.506336569786072 ,-0.446113437414169,0.589757025241852,-0.405549645423889,-0.698366761207581,0.227369338274002,-0.840859830379486 ,-0.491180092096329,0.737974345684052,-0.506336569786072,-0.446113437414169,0.967499911785126,-0.0959258452057838 ,-0.233970403671265,0.893790304660797,0.11711710691452,-0.432923167943954,0.589757025241852,-0.405549645423889 ,-0.698366761207581,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.947726309299469,0.160956501960754 ,0.275513887405396,0.865549385547638,0.446460962295532,0.226929157972336,0.893790304660797,0.11711710691452,-0.432923167943954 ,0.947726309299469,0.160956501960754,0.275513887405396,0.694981157779694,0.0461361445486546,0.717546284198761 ,0.539613544940948,0.300762385129929,0.786358177661896,0.865549385547638,0.446460962295532,0.226929157972336 ,0.694981157779694,0.0461361445486546,0.717546284198761,0.382880628108978,-0.336864858865738,0.860188663005829 ,0.137372449040413,-0.188157200813293,0.972484290599823,0.539613544940948,0.300762385129929,0.786358177661896 ,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775 ,-0.119434408843517,-0.692093312740326,0.711858332157135,0.137372449040413,-0.188157200813293,0.972484290599823 ,-0.119434408843517,-0.692093312740326,0.711858332157135,-0.0772176012396812,-0.989201128482819,0.124573387205601 ,0.543316781520844,-0.79720413684845,0.263196527957916,0.517825782299042,-0.683434009552002,0.514562368392944 ,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.227369338274002,-0.840859830379486,-0.491180092096329 ,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.543316781520844,-0.79720413684845,0.263196527957916 ,0.227369338274002,-0.840859830379486,-0.491180092096329,0.589757025241852,-0.405549645423889,-0.698366761207581 ,0.818628549575806,-0.56630539894104,-0.095631942152977,0.664069056510925,-0.747671186923981,-0.00021937265410088 ,0.589757025241852,-0.405549645423889,-0.698366761207581,0.893790304660797,0.11711710691452,-0.432923167943954 ,0.936200797557831,-0.349729657173157,0.0348892845213413,0.818628549575806,-0.56630539894104,-0.095631942152977 ,0.893790304660797,0.11711710691452,-0.432923167943954,0.865549385547638,0.446460962295532,0.226929157972336 ,0.927894592285156,-0.210005521774292,0.308073401451111,0.936200797557831,-0.349729657173157,0.0348892845213413 ,0.865549385547638,0.446460962295532,0.226929157972336,0.539613544940948,0.300762385129929,0.786358177661896 ,0.795584321022034,-0.263417273759842,0.545579493045807,0.927894592285156,-0.210005521774292,0.308073401451111 ,0.539613544940948,0.300762385129929,0.786358177661896,0.137372449040413,-0.188157200813293,0.972484290599823 ,0.623724460601807,-0.472118139266968,0.622954428195953,0.795584321022034,-0.263417273759842,0.545579493045807 ,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135 ,0.517825782299042,-0.683434009552002,0.514562368392944,0.623724460601807,-0.472118139266968,0.622954428195953 ,0.39375701546669,-0.458273440599442,-0.796831786632538,0.764481008052826,-0.644642233848572,-0.00227227224968374 ,0.78587132692337,-0.599782109260559,0.150557950139046,0.785931706428528,-0.599372208118439,0.151869475841522 ,0.76507031917572,-0.643946468830109,0.000624333799351007,0.128620937466621,-0.731338679790497,-0.669776320457459 ,0.128620937466621,-0.731338679790497,-0.669776320457459,0.76507031917572,-0.643946468830109,0.000624333799351007 ,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.689465761184692,-0.331197649240494,0.64416229724884 ,0.768967747688293,-0.480744570493698,0.421394437551498,0.974745631217957,0.220444723963737,0.0357081368565559 ,0.922376871109009,0.332838177680969,0.19606027007103,0.740420699119568,-0.407449632883072,0.53456711769104,0.689465761184692 ,-0.331197649240494,0.64416229724884,0.922376871109009,0.332838177680969,0.19606027007103,0.981993198394775,-0.177747964859009 ,-0.0639918148517609,0.688185930252075,-0.329065650701523,0.646618843078613,0.767808198928833,-0.477225512266159 ,0.427465051412582,0.778943240642548,-0.513350427150726,0.360164850950241,0.779076516628265,-0.514032542705536 ,0.35890144109726,0.768967747688293,-0.480744570493698,0.421394437551498,0.689465761184692,-0.331197649240494 ,0.64416229724884,0.740381181240082,-0.407373487949371,0.53467983007431,0.688185930252075,-0.329065650701523 ,0.646618843078613,0.689465761184692,-0.331197649240494,0.64416229724884,0.740420699119568,-0.407449632883072 ,0.53456711769104,0.712573170661926,-0.434123963117599,-0.551158607006073,0.825049936771393,-0.453089714050293 ,-0.337642371654511,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253 ,-0.59228527545929,0.0479290783405304,-0.711503028869629,-0.701046526432037,-0.423463702201843,-0.905563116073608 ,0.0251786317676306,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.0479290783405304,-0.711503028869629 ,-0.701046526432037,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.783942937850952,-0.186095729470253 ,-0.59228527545929,0.409443646669388,-0.535873591899872,-0.738373458385468,-0.218962535262108,0.084364540874958 ,-0.972079277038574,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.146824181079865,0.202549442648888 ,-0.968202650547028,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.2064258903265,-0.0007158950320445 ,0.978461980819702,-0.437538176774979,0.011323343962431,0.899128556251526,-0.412358522415161,0.0925682708621025 ,0.906306564807892,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717 ,0.999922931194305,0.109445370733738,0.0023056548088789,0.993990123271942,0.111529469490051,0.0670560151338577 ,0.99149614572525,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.737501204013824,0.475387096405029 ,-0.479686439037323,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.92103111743927,-0.215036183595657 ,-0.324747800827026,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.934549152851105,-0.271674513816834 ,0.229805961251259,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.777965724468231,-0.355387061834335 ,-0.518140316009521,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.412358522415161,0.0925682708621025 ,0.906306564807892,-0.437538176774979,0.011323343962431,0.899128556251526,-0.730253517627716,0.0695252642035484 ,0.679629266262054,-0.669797301292419,0.132067054510117,0.730705082416534,-0.437538176774979,0.011323343962431 ,0.899128556251526,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.771451115608215,-0.12942261993885 ,0.622987151145935,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.967698454856873,-0.123798668384552 ,-0.219621583819389,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.987909078598022,-0.100733421742916 ,0.117849096655846,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.677088737487793,-0.402109175920486 ,-0.616327106952667,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.870969414710999,-0.301988989114761 ,-0.387575656175613,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.373749554157257,-0.424562931060791 ,-0.824656069278717,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.0261400658637285,-0.230357423424721 ,-0.972754895687103,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.669797301292419,0.132067054510117 ,0.730705082416534,-0.559998273849487,0.512845575809479,0.65068531036377,-0.285846680402756,0.740470588207245 ,0.608272194862366,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.888843476772308,-0.151014879345894 ,0.43261045217514,-0.559998273849487,0.512845575809479,0.65068531036377,-0.669797301292419,0.132067054510117 ,0.730705082416534,-0.880525827407837,0.119760677218437,0.458619266748428,-0.998369693756104,-0.0149935530498624 ,0.055073969066143,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.92103111743927,-0.215036183595657 ,-0.324747800827026,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163037300109863,0.519588589668274 ,0.838717222213745,0.0445509292185307,0.65805971622467,0.751646637916565,-0.265586584806442,0.827619135379791 ,0.494479835033417,-0.415858834981918,0.554817199707031,0.720582604408264,0.135322481393814,0.847399234771729 ,0.513422191143036,-0.244644120335579,0.685302138328552,0.685937523841858,-0.18195928633213,0.86905300617218 ,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.630419492721558,0.671314060688019 ,-0.389754712581635,-0.528733134269714,0.826087534427643,0.194988861680031,-0.36407133936882,0.919048547744751 ,0.151002898812294,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.244644120335579,0.685302138328552 ,0.685937523841858,-0.408989250659943,0.558586657047272,0.721601545810699,-0.198288127779961,0.888361811637878 ,0.414119631052017,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0639016851782799,0.636703133583069 ,0.768456697463989,-0.207234025001526,0.598978042602539,0.773485243320465,-0.217426031827927,0.259526431560516 ,0.940942049026489,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.244644120335579,0.685302138328552 ,0.685937523841858,-0.163037300109863,0.519588589668274,0.838717222213745,-0.415858834981918,0.554817199707031 ,0.720582604408264,-0.408989250659943,0.558586657047272,0.721601545810699,-0.388724118471146,0.781137049198151 ,-0.488588243722916,-0.187158063054085,0.75642067193985,-0.626737236976624,-0.10327572375536,0.46809983253479 ,-0.877619862556458,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373749554157257,-0.424562931060791 ,-0.824656069278717,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0572102777659893,-0.363048881292343 ,-0.930012106895447,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0545569509267807,0.00619251187890768 ,-0.99849146604538,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.103274650871754,0.0756512358784676 ,-0.991771757602692,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103162460029125,0.213912323117256 ,-0.971390247344971,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0663832724094391,0.0673947036266327 ,-0.995515525341034,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0469610393047333,0.340933084487915 ,0.938913881778717,0.269015103578568,0.393741130828857,0.878975987434387,0.228596761822701,0.602607667446136 ,0.764596283435822,-0.0639016851782799,0.636703133583069,0.768456697463989,0.0754682123661041,0.474540889263153 ,-0.876992285251617,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.051368486136198,0.366652280092239 ,-0.928938865661621,0.0849071517586708,0.404431521892548,-0.910618424415588,0.0357786677777767,-0.332784980535507 ,-0.942323744297028,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0222764182835817,-0.332656174898148 ,-0.942785024642944,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.251114159822464,0.744844555854797 ,0.618181467056274,-0.265586584806442,0.827619135379791,0.494479835033417,-0.264517962932587,0.829988181591034 ,0.491070061922073,-0.126853466033936,0.814248085021973,0.566487669944763,0.0858502238988876,-0.0293905436992645 ,-0.995874464511871,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.044108722358942,-0.104566030204296 ,-0.993539333343506,0.053296934813261,-0.126089468598366,-0.99058610200882,0.025994973257184,0.100541830062866 ,0.99459320306778,0.0350599996745586,0.0215551313012838,0.999152719974518,0.105945765972137,-0.0333648808300495 ,0.993811964988709,0.0329285115003586,0.095338836312294,0.994900107383728,-0.969365537166595,0.00907830987125635 ,0.245454847812653,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.998369693756104,-0.0149935530498624 ,0.055073969066143,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.903727471828461,0.0786926299333572 ,0.420813679695129,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.771451115608215,-0.12942261993885 ,0.622987151145935,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.880525827407837,0.119760677218437 ,0.458619266748428,-0.669797301292419,0.132067054510117,0.730705082416534,-0.730253517627716,0.0695252642035484 ,0.679629266262054,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.264517962932587,0.829988181591034 ,0.491070061922073,-0.54696398973465,0.598231494426727,0.585618793964386,-0.523228526115417,0.410001486539841 ,0.747081458568573,-0.207234025001526,0.598978042602539,0.773485243320465,-0.207234025001526,0.598978042602539 ,0.773485243320465,-0.523228526115417,0.410001486539841,0.747081458568573,-0.531731903553009,0.138175398111343 ,0.835564970970154,-0.217426031827927,0.259526431560516,0.940942049026489,-0.198288127779961,0.888361811637878 ,0.414119631052017,-0.175527319312096,0.630527257919312,0.756059229373932,-0.129651710391045,0.577601253986359 ,0.805957317352295,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674 ,0.53821325302124,-0.18195928633213,0.86905300617218,0.460040956735611,-0.129651710391045,0.577601253986359,0.805957317352295 ,-0.101806551218033,0.422118037939072,0.900806188583374,-0.101806551218033,0.422118037939072,0.900806188583374 ,-0.129651710391045,0.577601253986359,0.805957317352295,-0.163592055439949,0.697549223899841,0.697612106800079 ,-0.235576257109642,0.590675473213196,0.771755337715149,0.0849071517586708,0.404431521892548,-0.910618424415588 ,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.187158063054085,0.75642067193985,-0.626737236976624 ,0.0754682123661041,0.474540889263153,-0.876992285251617,0.053296934813261,-0.126089468598366,-0.99058610200882 ,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0333343744277954,-0.188492000102997,-0.981508851051331 ,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0198883153498173,-0.203020170331001,-0.978972554206848 ,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0222764182835817,-0.332656174898148,-0.942785024642944 ,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0663832724094391,0.0673947036266327,-0.995515525341034 ,0.103274650871754,0.0756512358784676,-0.991771757602692,0.0858502238988876,-0.0293905436992645,-0.995874464511871 ,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.103162460029125,0.213912323117256,-0.971390247344971 ,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.0605181753635406,0.0956659987568855,-0.993572115898132 ,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0757151022553444,0.839400827884674,0.53821325302124 ,0.124407894909382,0.762849271297455,0.634494781494141,0.32895365357399,0.891276717185974,0.312114208936691,0.135322481393814 ,0.847399234771729,0.513422191143036,-0.235576257109642,0.590675473213196,0.771755337715149,0.007120281457901 ,0.824189305305481,0.566269636154175,0.124407894909382,0.762849271297455,0.634494781494141,-0.101806551218033 ,0.422118037939072,0.900806188583374,-0.130890280008316,0.562183797359467,0.816588640213013,0.0445509292185307 ,0.65805971622467,0.751646637916565,0.288280248641968,0.458255499601364,0.840771317481995,0.227748140692711,0.261638969182968 ,0.937910318374634,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824 ,0.911067366600037,0.227748140692711,0.261638969182968,0.937910318374634,0.288280248641968,0.458255499601364 ,0.840771317481995,0.127348259091377,0.984222948551178,0.1228316873312,0.320210188627243,0.913715243339539,0.250179767608643 ,0.007120281457901,0.824189305305481,0.566269636154175,-0.373853147029877,0.908021092414856,0.189027920365334 ,0.007120281457901,0.824189305305481,0.566269636154175,0.320210188627243,0.913715243339539,0.250179767608643 ,0.32895365357399,0.891276717185974,0.312114208936691,0.124407894909382,0.762849271297455,0.634494781494141,0.287634700536728 ,0.718605816364288,0.633144497871399,0.32895365357399,0.891276717185974,0.312114208936691,0.320210188627243,0.913715243339539 ,0.250179767608643,0.167783945798874,0.880431950092316,0.443495273590088,0.135322481393814,0.847399234771729 ,0.513422191143036,0.32895365357399,0.891276717185974,0.312114208936691,0.287634700536728,0.718605816364288,0.633144497871399 ,0.267442584037781,0.554580211639404,0.787981748580933,-0.764665424823761,-0.00892197620123625,0.644365727901459 ,-0.531731903553009,0.138175398111343,0.835564970970154,-0.523228526115417,0.410001486539841,0.747081458568573 ,-0.541739642620087,0.290830105543137,0.788629233837128,-0.902310907840729,-0.0581778958439827,0.427142024040222 ,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.803666055202484,-0.115168422460556,0.583829700946808 ,-0.943021297454834,-0.0914337635040283,0.31992295384407,0.0350599996745586,0.0215551313012838,0.999152719974518 ,0.0415807291865349,0.144025474786758,0.988700032234192,0.227037891745567,0.0226937420666218,0.973621487617493 ,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.217947199940681,-0.245030641555786,0.944700479507446 ,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.493893593549728,-0.127556279301643,0.8601154088974 ,-0.26172998547554,-0.1111850887537,0.958715438842773,0.105945765972137,-0.0333648808300495,0.993811964988709 ,0.227037891745567,0.0226937420666218,0.973621487617493,-0.0597144067287445,-0.130844533443451,0.98960292339325 ,-0.125138372182846,-0.0807519108057022,0.988847553730011,0.0415807291865349,0.144025474786758,0.988700032234192 ,0.051253791898489,0.460094302892685,0.886389493942261,0.269015103578568,0.393741130828857,0.878975987434387 ,0.227037891745567,0.0226937420666218,0.973621487617493,0.227037891745567,0.0226937420666218,0.973621487617493 ,0.269015103578568,0.393741130828857,0.878975987434387,-0.0469610393047333,0.340933084487915,0.938913881778717 ,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.26172998547554,-0.1111850887537,0.958715438842773 ,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.0597144067287445,-0.130844533443451,0.98960292339325 ,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.764665424823761,-0.00892197620123625,0.644365727901459 ,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.907991111278534,-0.362916141748428,0.209389582276344 ,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.934313356876373,-0.104866981506348,0.340678036212921 ,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.813670039176941,0.0365244150161743,0.580178439617157 ,-0.959401249885559,0.00467001460492611,0.282005965709686,0.0329285115003586,0.095338836312294,0.994900107383728 ,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.125138372182846,-0.0807519108057022,0.988847553730011 ,-0.130024403333664,0.107345074415207,0.985682845115662,-0.90759688615799,-0.3472660779953,0.235953688621521 ,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.864759087562561,-0.407921642065048,0.292902112007141 ,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.0597144067287445,-0.130844533443451,0.98960292339325 ,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.217426031827927,0.259526431560516,0.940942049026489 ,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.457065612077713,0.0828292146325111,0.885567843914032 ,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.168258428573608,-0.0454077981412411,0.984696507453918 ,-0.243838042020798,0.106035023927689,0.964001834392548,-0.457065612077713,0.0828292146325111,0.885567843914032 ,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.771451115608215,-0.12942261993885,0.622987151145935 ,-0.420480906963348,-0.101670697331429,0.901586890220642,0.267442584037781,0.554580211639404,0.787981748580933 ,0.288280248641968,0.458255499601364,0.840771317481995,0.0445509292185307,0.65805971622467,0.751646637916565 ,-0.163037300109863,0.519588589668274,0.838717222213745,0.128257870674133,0.488565057516098,0.863049328327179 ,0.287634700536728,0.718605816364288,0.633144497871399,0.167783945798874,0.880431950092316,0.443495273590088 ,0.0469380915164948,0.75044322013855,0.659266114234924,0.288280248641968,0.458255499601364,0.840771317481995 ,0.267442584037781,0.554580211639404,0.787981748580933,0.287634700536728,0.718605816364288,0.633144497871399 ,0.128257870674133,0.488565057516098,0.863049328327179,-0.0117101557552814,0.969888210296631,0.243268758058548 ,0.0469380915164948,0.75044322013855,0.659266114234924,0.167783945798874,0.880431950092316,0.443495273590088 ,0.118423573672771,0.978543698787689,0.168606325984001,-0.973214685916901,0.0593582727015018,0.22210305929184 ,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.990118980407715,-0.139986857771873,-0.00824637804180384 ,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.264517962932587,0.829988181591034,0.491070061922073 ,-0.207234025001526,0.598978042602539,0.773485243320465,-0.0639016851782799,0.636703133583069,0.768456697463989 ,-0.126853466033936,0.814248085021973,0.566487669944763,0.00678820535540581,0.00935708172619343,0.999933183193207 ,0.0177117679268122,0.0767069831490517,0.996896326541901,0.111529469490051,0.0670560151338577,0.99149614572525 ,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.285846680402756,0.740470588207245,0.608272194862366 ,-0.233475670218468,0.295215666294098,0.926464676856995,-0.205622598528862,0.0701295286417007,0.976115345954895 ,-0.412358522415161,0.0925682708621025,0.906306564807892,0.00109092053025961,0.832261800765991,-0.554381728172302 ,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.498037964105606,0.826278984546661,-0.263099282979965 ,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.420480906963348,-0.101670697331429,0.901586890220642 ,-0.437538176774979,0.011323343962431,0.899128556251526,-0.2064258903265,-0.0007158950320445,0.978461980819702 ,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.045579582452774,-0.167653381824493,-0.98479175567627 ,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.0858502238988876,-0.0293905436992645,-0.995874464511871 ,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.265586584806442,0.827619135379791,0.494479835033417 ,-0.130890280008316,0.562183797359467,0.816588640213013,-0.54696398973465,0.598231494426727,0.585618793964386 ,-0.264517962932587,0.829988181591034,0.491070061922073,0.0620061531662941,0.990111231803894,-0.125837221741676 ,0.118423573672771,0.978543698787689,0.168606325984001,0.127348259091377,0.984222948551178,0.1228316873312,0.0272185504436493 ,0.988011002540588,-0.151965260505676,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901 ,0.824189305305481,0.566269636154175,-0.235576257109642,0.590675473213196,0.771755337715149,-0.528733134269714 ,0.826087534427643,0.194988861680031,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.322016537189484 ,0.469987332820892,-0.821837723255157,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.630419492721558 ,0.671314060688019,-0.389754712581635,-0.498037964105606,0.826278984546661,-0.263099282979965,0.0272185504436493 ,0.988011002540588,-0.151965260505676,0.127348259091377,0.984222948551178,0.1228316873312,-0.373853147029877 ,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.235576257109642 ,0.590675473213196,0.771755337715149,-0.163592055439949,0.697549223899841,0.697612106800079,-0.36407133936882 ,0.919048547744751,0.151002898812294,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.493893593549728 ,-0.127556279301643,0.8601154088974,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.767262578010559 ,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.217947199940681 ,-0.245030641555786,0.944700479507446,-0.217426031827927,0.259526431560516,0.940942049026489,-0.531731903553009 ,0.138175398111343,0.835564970970154,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068 ,-0.305343925952911,0.817783713340759,-0.531731903553009,0.138175398111343,0.835564970970154,-0.764665424823761 ,-0.00892197620123625,0.644365727901459,-0.0938221365213394,0.828937470912933,-0.551416397094727,0.00109092053025961 ,0.832261800765991,-0.554381728172302,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.173114001750946 ,0.483975678682327,-0.857787311077118,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.10327572375536 ,0.46809983253479,-0.877619862556458,0.0849071517586708,0.404431521892548,-0.910618424415588,0.103162460029125 ,0.213912323117256,-0.971390247344971,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.322016537189484 ,0.469987332820892,-0.821837723255157,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.146824181079865 ,0.202549442648888,-0.968202650547028,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.659155488014221 ,-0.442682504653931,-0.607903122901917,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.870969414710999 ,-0.301988989114761,-0.387575656175613,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.934549152851105 ,-0.271674513816834,0.229805961251259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.91446441411972 ,-0.237356558442116,-0.32774493098259,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.776331782341003 ,-0.346262842416763,-0.526698231697083,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.498037964105606 ,0.826278984546661,-0.263099282979965,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714 ,0.826087534427643,0.194988861680031,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.224544212222099 ,0.65578031539917,-0.720785677433014,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0340137556195259 ,-0.196621879935265,-0.979889214038849,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.045579582452774 ,-0.167653381824493,-0.98479175567627,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.273301541805267 ,-0.178375348448753,-0.945245206356049,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.0765343606472015 ,-0.228869631886482,-0.970443785190582,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.529427289962769 ,-0.308612763881683,-0.790230929851532,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.224544212222099 ,0.65578031539917,-0.720785677433014,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.369074016809464 ,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0170070379972458 ,-0.356290400028229,-0.934220492839813,-0.0261400658637285,-0.230357423424721,-0.972754895687103,0.0198883153498173 ,-0.203020170331001,-0.978972554206848,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0145233506336808 ,-0.332326263189316,-0.943052649497986,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0572102777659893 ,-0.363048881292343,-0.930012106895447,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.218962535262108 ,0.084364540874958,-0.972079277038574,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.529427289962769 ,-0.308612763881683,-0.790230929851532,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.273301541805267 ,-0.178375348448753,-0.945245206356049,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.659155488014221 ,-0.442682504653931,-0.607903122901917,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.677088737487793 ,-0.402109175920486,-0.616327106952667,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.396053969860077 ,-0.291344702243805,-0.870781004428864,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.730700254440308 ,-0.321549147367477,-0.602231919765472,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.361107349395752 ,-0.274716913700104,-0.891140937805176,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.045579582452774 ,-0.167653381824493,-0.98479175567627,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.396053969860077 ,-0.291344702243805,-0.870781004428864,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.168258428573608 ,-0.0454077981412411,0.984696507453918,0.0502381287515163,0.0132010383531451,0.998650014400482,0.0329285115003586 ,0.095338836312294,0.994900107383728,-0.130024403333664,0.107345074415207,0.985682845115662,0.111529469490051 ,0.0670560151338577,0.99149614572525,0.109445370733738,0.0023056548088789,0.993990123271942,-0.2064258903265 ,-0.0007158950320445,0.978461980819702,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.233475670218468 ,0.295215666294098,0.926464676856995,-0.0027873576618731,0.0608935356140137,0.998140394687653,0.111529469490051 ,0.0670560151338577,0.99149614572525,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447 ,0.00425092596560717,0.999922931194305,0.0105779552832246,0.0432977452874184,0.99900621175766,0.0502381287515163 ,0.0132010383531451,0.998650014400482,0.109445370733738,0.0023056548088789,0.993990123271942,0.109445370733738 ,0.0023056548088789,0.993990123271942,0.0502381287515163,0.0132010383531451,0.998650014400482,-0.168258428573608 ,-0.0454077981412411,0.984696507453918,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.803666055202484 ,-0.115168422460556,0.583829700946808,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.934549152851105 ,-0.271674513816834,0.229805961251259,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.493893593549728 ,-0.127556279301643,0.8601154088974,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.813670039176941 ,0.0365244150161743,0.580178439617157,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.457065612077713 ,0.0828292146325111,0.885567843914032,-0.243838042020798,0.106035023927689,0.964001834392548,-0.26172998547554 ,-0.1111850887537,0.958715438842773,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.130024403333664 ,0.107345074415207,0.985682845115662,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.26172998547554 ,-0.1111850887537,0.958715438842773,-0.243838042020798,0.106035023927689,0.964001834392548,-0.962112545967102 ,-0.0959249585866928,0.255221039056778,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.813670039176941 ,0.0365244150161743,0.580178439617157,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.887102901935577 ,-0.248076841235161,0.389238119125366,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.797964632511139 ,-0.0603525713086128,0.599674940109253,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.885262668132782 ,-0.178442940115929,0.429497480392456,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.916449964046478 ,-0.370115518569946,-0.152098655700684,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.958365261554718 ,-0.274972796440125,0.0769802629947662,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.776331782341003 ,-0.346262842416763,-0.526698231697083,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.803666055202484 ,-0.115168422460556,0.583829700946808,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.971830129623413 ,-0.100029721856117,0.213401570916176,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.730858027935028 ,-0.478023678064346,0.487175494432449,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.797964632511139 ,-0.0603525713086128,0.599674940109253,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.885262668132782 ,-0.178442940115929,0.429497480392456,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.987909078598022 ,-0.100733421742916,0.117849096655846,-0.971830129623413,-0.100029721856117,0.213401570916176,0.242353484034538 ,0.171934008598328,0.954831659793854,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.130890280008316 ,0.562183797359467,0.816588640213013,0.227748140692711,0.261638969182968,0.937910318374634,-0.0389007441699505 ,0.220736414194107,0.974557399749756,-0.541739642620087,0.290830105543137,0.788629233837128,-0.54696398973465 ,0.598231494426727,0.585618793964386,-0.130890280008316,0.562183797359467,0.816588640213013,-0.885142028331757 ,0.459607869386673,-0.072692796587944,-0.721357464790344,0.650649428367615,0.237273663282394,-0.96703976392746 ,-0.131514891982079,0.218031987547874,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163592055439949 ,0.697549223899841,0.697612106800079,-0.129651710391045,0.577601253986359,0.805957317352295,-0.175527319312096 ,0.630527257919312,0.756059229373932,-0.191041514277458,0.700716555118561,0.6873859167099,-0.36407133936882,0.919048547744751 ,0.151002898812294,-0.163592055439949,0.697549223899841,0.697612106800079,-0.191041514277458,0.700716555118561 ,0.6873859167099,-0.309881597757339,0.939583599567413,0.145451411604881,-0.388724118471146,0.781137049198151 ,-0.488588243722916,-0.36407133936882,0.919048547744751,0.151002898812294,-0.309881597757339,0.939583599567413 ,0.145451411604881,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0682389214634895,0.656387150287628 ,0.751331746578217,0.0917807519435883,0.740839779376984,0.665381610393524,0.228596761822701,0.602607667446136 ,0.764596283435822,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136 ,0.764596283435822,0.0917807519435883,0.740839779376984,0.665381610393524,-0.126853466033936,0.814248085021973 ,0.566487669944763,-0.0639016851782799,0.636703133583069,0.768456697463989,0.118423573672771,0.978543698787689 ,0.168606325984001,0.0620061531662941,0.990111231803894,-0.125837221741676,0.00345755694434047,0.996382415294647 ,-0.0849123671650887,-0.0117101557552814,0.969888210296631,0.243268758058548,0.206769347190857,0.0198965240269899 ,-0.978187382221222,0.076873891055584,0.283797085285187,-0.955797910690308,-0.158792361617088,0.191556662321091 ,-0.968550980091095,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091 ,-0.968550980091095,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.121267899870873,0.453522175550461 ,-0.882956266403198,-0.20303450524807,0.175852552056313,-0.963251233100891,-7.2909109860575e-009,0.660060167312622 ,0.751212775707245,0.00678820535540581,0.00935708172619343,0.999933183193207,-0.0027873576618731,0.0608935356140137 ,0.998140394687653,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0428657233715057,0.703625798225403 ,0.709276556968689,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.233475670218468,0.295215666294098 ,0.926464676856995,-0.431082636117935,0.669595658779144,0.604821860790253,-0.0938221365213394,0.828937470912933 ,-0.551416397094727,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.0149039337411523,0.576608240604401 ,-0.816884815692902,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.173114001750946,0.483975678682327 ,-0.857787311077118,-0.158792361617088,0.191556662321091,-0.968550980091095,0.076873891055584,0.283797085285187 ,-0.955797910690308,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.91446441411972,-0.237356558442116 ,-0.32774493098259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.887102901935577,-0.248076841235161 ,0.389238119125366,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.960404455661774,0.118234008550644 ,0.252277553081512,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.882290184497833,-0.257993787527084 ,-0.393704503774643,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.900862991809845,0.205661669373512 ,0.382294595241547,-0.823818027973175,0.437958568334579,0.359883517026901,-0.929829955101013,0.272868812084198 ,0.246898397803307,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036 ,-0.230341240763664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.972549617290497,-0.208768278360367 ,-0.102776825428009,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.935231983661652,0.339124768972397 ,0.10166396945715,-0.830669224262238,0.464176833629608,0.307454913854599,-0.873635351657867,0.199546694755554 ,0.44378200173378,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.541739642620087,0.290830105543137 ,0.788629233837128,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.439444810152054,-0.112185478210449 ,0.89123660326004,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.304660886526108,0.0813428908586502 ,0.948981106281281,-0.151422306895256,0.167262390255928,0.974214851856232,-0.325357735157013,0.61151111125946 ,0.721246421337128,-0.516382813453674,0.465612560510635,0.718716740608215,-0.439444810152054,-0.112185478210449 ,0.89123660326004,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.275725185871124,-0.367643237113953 ,0.888152062892914,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.670227468013763,0.653629958629608 ,0.351515263319016,-0.516382813453674,0.465612560510635,0.718716740608215,-0.325357735157013,0.61151111125946 ,0.721246421337128,-0.482889622449875,0.809686243534088,0.333505302667618,-0.905158758163452,-0.227180346846581 ,0.359272450208664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.969261229038239,0.233877912163734 ,0.0763790160417557,-0.935231983661652,0.339124768972397,0.10166396945715,-0.823818027973175,0.437958568334579 ,0.359883517026901,-0.900862991809845,0.205661669373512,0.382294595241547,-0.873635351657867,0.199546694755554 ,0.44378200173378,-0.830669224262238,0.464176833629608,0.307454913854599,-0.534069001674652,-0.533251285552979 ,-0.656058967113495,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.992305636405945,0.0944509729743004 ,0.0800536796450615,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.0765343606472015,-0.228869631886482 ,-0.970443785190582,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.882290184497833,-0.257993787527084 ,-0.393704503774643,-0.636381566524506,-0.215738385915756,-0.74059122800827,0.230162009596825,-0.0996426865458488 ,-0.968037605285645,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.636381566524506,-0.215738385915756 ,-0.74059122800827,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.727636575698853,-0.347527086734772 ,0.591413497924805,-0.873635351657867,0.199546694755554,0.44378200173378,-0.900862991809845,0.205661669373512 ,0.382294595241547,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.869328856468201,-0.380869299173355 ,0.314969629049301,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.982743322849274,-0.0388989634811878 ,0.180837959051132,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.275725185871124,-0.367643237113953 ,0.888152062892914,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.151422306895256,0.167262390255928 ,0.974214851856232,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0389007441699505,0.220736414194107 ,0.974557399749756,0.242353484034538,0.171934008598328,0.954831659793854,-0.225912064313889,-0.13972570002079 ,0.964074909687042,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.736354291439056,0.674543976783752 ,-0.0526571460068226,-0.670227468013763,0.653629958629608,0.351515263319016,-0.482889622449875,0.809686243534088 ,0.333505302667618,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.677062809467316,0.519408404827118 ,-0.521345198154449,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.474048495292664,0.878205180168152 ,-0.0635117962956429,-0.386267960071564,0.732354819774628,-0.560761570930481,0.206769347190857,0.0198965240269899 ,-0.978187382221222,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.447565525770187,-0.178849518299103 ,-0.876183688640594,-0.339145213365555,-0.0408404320478439,-0.939847111701965,0.076873891055584,0.283797085285187 ,-0.955797910690308,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.339145213365555,-0.0408404320478439 ,-0.939847111701965,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.580101191997528,0.322207540273666 ,-0.748107552528381,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.386267960071564,0.732354819774628 ,-0.560761570930481,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.596588253974915,0.134587496519089 ,-0.791181802749634,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.319942742586136,0.472043305635452 ,-0.821469247341156,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.58198344707489,-0.50494521856308 ,0.637436747550964,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.775276005268097,0.0246404502540827 ,0.631141781806946,-0.439444810152054,-0.112185478210449,0.89123660326004,0.0469380915164948,0.75044322013855 ,0.659266114234924,-0.325357735157013,0.61151111125946,0.721246421337128,-0.151422306895256,0.167262390255928 ,0.974214851856232,0.182602807879448,0.369611233472824,0.911067366600037,0.0469380915164948,0.75044322013855 ,0.659266114234924,-0.0117101557552814,0.969888210296631,0.243268758058548,-0.482889622449875,0.809686243534088 ,0.333505302667618,-0.325357735157013,0.61151111125946,0.721246421337128,-0.225912064313889,-0.13972570002079 ,0.964074909687042,0.242353484034538,0.171934008598328,0.954831659793854,0.182602807879448,0.369611233472824 ,0.911067366600037,-0.151422306895256,0.167262390255928,0.974214851856232,-0.0117101557552814,0.969888210296631 ,0.243268758058548,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.474048495292664,0.878205180168152 ,-0.0635117962956429,-0.482889622449875,0.809686243534088,0.333505302667618,0.00345755694434047,0.996382415294647 ,-0.0849123671650887,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.386267960071564,0.732354819774628 ,-0.560761570930481,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.705084800720215,-0.161029234528542 ,-0.690597534179688,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.309495180845261,0.256983548402786 ,-0.915517449378967,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.00375068746507168,0.864742159843445 ,-0.502202033996582,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.319942742586136,0.472043305635452 ,-0.821469247341156,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.0149039337411523,0.576608240604401 ,-0.816884815692902,0.076873891055584,0.283797085285187,-0.955797910690308,-0.309495180845261,0.256983548402786 ,-0.915517449378967,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.764665424823761,-0.00892197620123625 ,0.644365727901459,-0.541739642620087,0.290830105543137,0.788629233837128,-0.775276005268097,0.0246404502540827 ,0.631141781806946,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.764665424823761,-0.00892197620123625 ,0.644365727901459,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.972549617290497,-0.208768278360367 ,-0.102776825428009,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.864759087562561,-0.407921642065048 ,0.292902112007141,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.9968541264534,-0.0452842265367508 ,-0.0650477930903435,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346 ,0.487175494432449,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.9968541264534,-0.0452842265367508 ,-0.0650477930903435,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.821968972682953,-0.468651831150055 ,-0.323623836040497,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.900862991809845,0.205661669373512 ,0.382294595241547,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.636381566524506,-0.215738385915756 ,-0.74059122800827,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.985974311828613,-0.0694569125771523 ,-0.151757627725601,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.868559181690216,-0.156194493174553 ,-0.470327794551849,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.447565525770187,-0.178849518299103 ,-0.876183688640594,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.805109977722168,-0.249997183680534 ,-0.537865459918976,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.339145213365555,-0.0408404320478439 ,-0.939847111701965,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.917147397994995,-0.128003314137459 ,-0.377433180809021,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.990118980407715,-0.139986857771873 ,-0.00824637804180384,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.20303450524807,0.175852552056313 ,-0.963251233100891,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.277610629796982,0.394662648439407 ,-0.875884532928467,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.121267899870873,0.453522175550461 ,-0.882956266403198,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.373621255159378,0.625036597251892 ,-0.685373187065125,-0.277610629796982,0.394662648439407,-0.875884532928467,0.0105779552832246,0.0432977452874184 ,0.99900621175766,0.025994973257184,0.100541830062866,0.99459320306778,0.0329285115003586,0.095338836312294,0.994900107383728 ,0.0502381287515163,0.0132010383531451,0.998650014400482,0.051253791898489,0.460094302892685,0.886389493942261 ,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822 ,0.269015103578568,0.393741130828857,0.878975987434387,-0.484471023082733,-0.813864707946777,-0.320799201726913 ,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.960404455661774,0.118234008550644,0.252277553081512 ,-0.929829955101013,0.272868812084198,0.246898397803307,-0.355119854211807,-0.655639946460724,-0.666352868080139 ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.985974311828613,-0.0694569125771523,-0.151757627725601 ,-0.960404455661774,0.118234008550644,0.252277553081512,-0.969261229038239,0.233877912163734,0.0763790160417557 ,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.938947200775146,-0.340274900197983,-0.0509038865566254 ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599 ,-0.935231983661652,0.339124768972397,0.10166396945715,-0.980707883834839,0.0803700610995293,0.178192809224129 ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.0524283163249493,-0.77048397064209,0.635299742221832 ,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.275725185871124,-0.367643237113953,0.888152062892914 ,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.0998818427324295,-0.0102633228525519,0.994946360588074 ,-0.097216323018074,-0.329928547143936,0.938986778259277,0.0822462737560272,-0.665926337242126,0.741469919681549 ,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.516382813453674,0.465612560510635,0.718716740608215 ,-0.670227468013763,0.653629958629608,0.351515263319016,-0.563040912151337,0.733509361743927,0.380721718072891 ,-0.333576679229736,0.525787591934204,0.782479405403137,-0.097216323018074,-0.329928547143936,0.938986778259277 ,-0.154075160622597,0.221347615122795,0.962946593761444,0.198109984397888,-0.381663233041763,0.902820944786072 ,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.407216638326645,-0.806287288665771,0.429040133953094 ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.938947200775146,-0.340274900197983,-0.0509038865566254 ,-0.944353520870209,-0.253018736839294,-0.21018548309803,0.729846894741058,-0.679405450820923,0.0757084339857101 ,0.704946756362915,-0.708129465579987,-0.040034044533968,-0.237173914909363,-0.706752181053162,0.666520714759827 ,-0.22399939596653,-0.804867208003998,0.549557149410248,0.568926751613617,-0.0644996538758278,0.819854915142059 ,0.493679195642471,-0.48221343755722,0.723706424236298,0.198109984397888,-0.381663233041763,0.902820944786072 ,0.165526703000069,0.46548119187355,0.869441270828247,0.311660826206207,-0.127051904797554,-0.941660940647125 ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.355119854211807,-0.655639946460724,-0.666352868080139 ,0.707368016242981,-0.349391609430313,-0.614455819129944,0.493679195642471,-0.48221343755722,0.723706424236298 ,0.568926751613617,-0.0644996538758278,0.819854915142059,0.780032634735107,-0.518629193305969,0.350104093551636 ,-0.594531655311584,-0.698622703552246,0.398068368434906,0.707368016242981,-0.349391609430313,-0.614455819129944 ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.298700571060181,-0.161740928888321,-0.94054126739502 ,0.311660826206207,-0.127051904797554,-0.941660940647125,0.707368016242981,-0.349391609430313,-0.614455819129944 ,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.692149817943573,-0.677433252334595,-0.249023765325546 ,0.644391298294067,-0.53528618812561,-0.546103060245514,-0.22399939596653,-0.804867208003998,0.549557149410248 ,-0.594531655311584,-0.698622703552246,0.398068368434906,0.780032634735107,-0.518629193305969,0.350104093551636 ,0.729846894741058,-0.679405450820923,0.0757084339857101,-0.22399939596653,-0.804867208003998,0.549557149410248 ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.980707883834839,0.0803700610995293,0.178192809224129 ,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599 ,-0.926227867603302,0.166116192936897,0.338389337062836,-0.915170788764954,0.197068557143211,0.351605415344238 ,-0.823818027973175,0.437958568334579,0.359883517026901,-0.237173914909363,-0.706752181053162,0.666520714759827 ,-0.915170788764954,0.197068557143211,0.351605415344238,-0.926227867603302,0.166116192936897,0.338389337062836 ,-0.22399939596653,-0.804867208003998,0.549557149410248,0.704946756362915,-0.708129465579987,-0.040034044533968 ,0.692149817943573,-0.677433252334595,-0.249023765325546,-0.484471023082733,-0.813864707946777,-0.320799201726913 ,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.333576679229736,0.525787591934204,0.782479405403137 ,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743195831775665,0.547327280044556,0.384828329086304 ,-0.496076285839081,0.322463065385818,0.806179821491241,-0.333576679229736,0.525787591934204,0.782479405403137 ,-0.496076285839081,0.322463065385818,0.806179821491241,-0.0998818427324295,-0.0102633228525519,0.994946360588074 ,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.097216323018074,-0.329928547143936,0.938986778259277 ,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.496076285839081,0.322463065385818,0.806179821491241 ,-0.549624145030975,0.147533476352692,0.822281718254089,-0.841190576553345,0.42979621887207,-0.328136563301086 ,-0.866790115833282,0.482820779085159,0.124735727906227,-0.775943994522095,0.628167152404785,0.0575932897627354 ,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.670227468013763,0.653629958629608,0.351515263319016 ,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.612874746322632,0.790095686912537,-0.011550584807992 ,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743281781673431,0.522458851337433,-0.417814522981644 ,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.676622211933136,0.280620872974396,-0.680760145187378 ,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.638818860054016,0.281881213188171,-0.715858519077301 ,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.558412373065948,0.662734746932983,-0.498957246541977 ,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.567850172519684,0.0910008028149605,-0.81808614730835 ,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.513277769088745,-0.317918360233307,-0.797166168689728 ,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.496076285839081,0.322463065385818,0.806179821491241 ,-0.743195831775665,0.547327280044556,0.384828329086304,-0.819946527481079,0.416022598743439,0.393208384513855 ,-0.549624145030975,0.147533476352692,0.822281718254089,0.314551591873169,-0.777825355529785,-0.544100165367126 ,0.445018202066422,-0.841427505016327,-0.306526601314545,0.480990260839462,-0.836049139499664,-0.263951063156128 ,0.233872562646866,-0.770340859889984,-0.593193531036377,0.552962005138397,-0.830714046955109,0.064398355782032 ,0.518121659755707,-0.845738351345062,-0.127579480409622,0.602230906486511,-0.791486024856567,-0.104248508810997 ,0.624863624572754,-0.775575757026672,0.0895971804857254,0.158797964453697,-0.752626359462738,0.639012277126312 ,0.477273166179657,-0.844216048717499,0.243945851922035,0.392137885093689,-0.898935735225677,0.195300936698914 ,0.22346855700016,-0.725432455539703,0.651006579399109,0.631202757358551,-0.748089611530304,0.204804703593254 ,0.679318964481354,-0.681169748306274,0.273008167743683,0.484550148248672,-0.283617049455643,0.827509820461273 ,0.470721006393433,-0.417188495397568,0.777415871620178,-0.425698101520538,-0.165044084191322,0.889686226844788 ,0.158797964453697,-0.752626359462738,0.639012277126312,0.22346855700016,-0.725432455539703,0.651006579399109 ,-0.331690967082977,-0.041898600757122,0.94245719909668,0.305413067340851,0.121777974069119,0.944400906562805 ,0.509250044822693,-0.170650407671928,0.843529999256134,-0.047230526804924,-0.147780075669289,0.987891852855682 ,-0.28887614607811,0.124025739729404,0.949298799037933,0.117293141782284,0.336978107690811,0.934177756309509 ,0.305413067340851,0.121777974069119,0.944400906562805,-0.28887614607811,0.124025739729404,0.949298799037933 ,-0.357071965932846,0.176186710596085,0.917310118675232,-0.388193219900131,-0.0462160408496857,-0.920418441295624 ,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.158167138695717,-0.488490730524063,-0.858114242553711 ,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063,-0.858114242553711 ,0.233872562646866,-0.770340859889984,-0.593193531036377,0.309054106473923,-0.602658152580261,-0.735723257064819 ,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.603177964687347,-0.730402767658234,-0.320449888706207 ,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233872562646866,-0.770340859889984,-0.593193531036377 ,0.480990260839462,-0.836049139499664,-0.263951063156128,0.509250044822693,-0.170650407671928,0.843529999256134 ,0.744553029537201,-0.501156628131866,0.4410021007061,0.443388015031815,-0.641468644142151,0.626039206981659 ,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.661741137504578,0.744016170501709,0.0924049317836761 ,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.270709186792374,0.893246471881866,0.35892516374588 ,-0.65559720993042,0.741017520427704,-0.145207911729813,0.64731752872467,-0.742053866386414,-0.174172759056091 ,0.668083667755127,-0.706556260585785,0.233329057693481,0.779800176620483,-0.625844657421112,0.0151696130633354 ,0.668628990650177,-0.726897060871124,-0.156703382730484,0.323112219572067,0.289230555295944,0.901079475879669 ,0.771257698535919,-0.18939545750618,0.607693135738373,0.509250044822693,-0.170650407671928,0.843529999256134 ,0.305413067340851,0.121777974069119,0.944400906562805,0.323112219572067,0.289230555295944,0.901079475879669 ,0.235387146472931,0.430203825235367,0.871503055095673,-0.34545773267746,0.720738053321838,0.600995540618896 ,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.633037269115448,0.653608679771423,0.414800643920898 ,-0.217019572854042,0.53657478094101,0.815469205379486,-0.0627354606986046,0.701922833919525,0.709484755992889 ,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.245442464947701,0.425341755151749,0.871115624904633 ,0.174675241112709,0.124651238322258,0.976703941822052,0.279203683137894,0.224120020866394,0.933710634708405 ,-0.217019572854042,0.53657478094101,0.815469205379486,-0.599866449832916,0.551924109458923,0.57925820350647 ,-0.245442464947701,0.425341755151749,0.871115624904633,-0.217019572854042,0.53657478094101,0.815469205379486 ,-0.633037269115448,0.653608679771423,0.414800643920898,-0.62176638841629,0.776679754257202,-0.100871689617634 ,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.685906887054443,0.655823826789856,-0.315320372581482 ,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.563096046447754,0.501788794994354,-0.656605541706085 ,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.521965801715851,0.298950701951981,-0.798861801624298 ,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.0413625538349152,-0.756104946136475,-0.653141975402832 ,-0.266530960798264,-0.246738225221634,-0.931708931922913,0.130334496498108,-0.649341344833374,-0.749245464801788 ,0.130334496498108,-0.649341344833374,-0.749245464801788,-0.266530960798264,-0.246738225221634,-0.931708931922913 ,-0.349483400583267,-0.0788575559854507,-0.933618187904358,0.241232365369797,-0.621889412403107,-0.745023787021637 ,0.420848518610001,-0.797750890254974,-0.431833386421204,0.545369505882263,-0.785522282123566,-0.292449623346329 ,0.446416854858398,-0.828317999839783,-0.338528007268906,0.319416075944901,-0.833531200885773,-0.450776189565659 ,0.606213510036469,-0.729506313800812,-0.316742390394211,0.558507144451141,-0.773075938224792,-0.30070486664772 ,0.241232365369797,-0.621889412403107,-0.745023787021637,0.233110591769218,-0.47022944688797,-0.851201355457306 ,0.130334496498108,-0.649341344833374,-0.749245464801788,0.241232365369797,-0.621889412403107,-0.745023787021637 ,0.558507144451141,-0.773075938224792,-0.30070486664772,0.54656720161438,-0.7532879114151,-0.365816354751587 ,-0.0413625538349152,-0.756104946136475,-0.653141975402832,0.130334496498108,-0.649341344833374,-0.749245464801788 ,0.54656720161438,-0.7532879114151,-0.365816354751587,0.431472927331924,-0.822143793106079,-0.371363341808319 ,0.606213510036469,-0.729506313800812,-0.316742390394211,0.233110591769218,-0.47022944688797,-0.851201355457306 ,0.309054106473923,-0.602658152580261,-0.735723257064819,0.603177964687347,-0.730402767658234,-0.320449888706207 ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.523556113243103,0.279740929603577,0.804757118225098 ,-0.331690967082977,-0.041898600757122,0.94245719909668,-0.0139366090297699,0.110060036182404,0.993827223777771 ,0.0628950372338295,0.12239508330822,0.990486621856689,0.470721006393433,-0.417188495397568,0.777415871620178 ,0.484550148248672,-0.283617049455643,0.827509820461273,0.115986511111259,0.227630436420441,0.966815114021301 ,0.564540684223175,-0.811680018901825,0.149898007512093,0.463100373744965,-0.535968005657196,0.705886960029602 ,0.22346855700016,-0.725432455539703,0.651006579399109,0.392137885093689,-0.898935735225677,0.195300936698914 ,0.463100373744965,-0.535968005657196,0.705886960029602,-0.0139366090297699,0.110060036182404,0.993827223777771 ,-0.331690967082977,-0.041898600757122,0.94245719909668,0.22346855700016,-0.725432455539703,0.651006579399109 ,0.319416075944901,-0.833531200885773,-0.450776189565659,0.446416854858398,-0.828317999839783,-0.338528007268906 ,0.445018202066422,-0.841427505016327,-0.306526601314545,0.314551591873169,-0.777825355529785,-0.544100165367126 ,0.319416075944901,-0.833531200885773,-0.450776189565659,-0.175627052783966,-0.391306757926941,-0.903346061706543 ,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.420848518610001,-0.797750890254974,-0.431833386421204 ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.229133352637291,-0.201160058379173,-0.952382564544678 ,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.353154391050339,-0.159876078367233,-0.92180347442627 ,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.122526675462723,-0.422631919384003,-0.897980749607086 ,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.486891210079193,0.021690109744668,-0.873193264007568 ,-0.328695803880692,0.662784039974213,0.672812342643738,-0.402240663766861,0.592356264591217,0.698080539703369 ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.485478460788727,0.644360303878784,0.590855658054352 ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.175726309418678,0.623865723609924,0.761519432067871 ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.402240663766861,0.592356264591217,0.698080539703369 ,0.668083667755127,-0.706556260585785,0.233329057693481,0.64731752872467,-0.742053866386414,-0.174172759056091 ,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.477273166179657,-0.844216048717499,0.243945851922035 ,0.692083477973938,-0.68414306640625,-0.23014922440052,0.657974064350128,-0.742551565170288,-0.125249087810516 ,0.668628990650177,-0.726897060871124,-0.156703382730484,0.779800176620483,-0.625844657421112,0.0151696130633354 ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.788194417953491,-0.590478122234344,-0.173450663685799 ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.692083477973938,-0.68414306640625,-0.23014922440052 ,0.431472927331924,-0.822143793106079,-0.371363341808319,0.54656720161438,-0.7532879114151,-0.365816354751587 ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.816579103469849,-0.529018878936768,-0.230949223041534 ,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.337419033050537,0.179084926843643,-0.924162864685059 ,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.438523173332214,0.694159924983978,-0.570823431015015 ,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.566018283367157,0.00991705991327763,-0.824333071708679 ,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.627143085002899,0.109072089195251,-0.771229445934296 ,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.598774611949921,0.291624635457993,-0.745938360691071 ,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.742188274860382,0.281538933515549,-0.608187794685364 ,0.314551591873169,-0.777825355529785,-0.544100165367126,0.233872562646866,-0.770340859889984,-0.593193531036377 ,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.122526675462723,-0.422631919384003,-0.897980749607086 ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.473940014839172,0.0295314248651266,-0.880061805248261 ,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.637764096260071,0.392574012279511,-0.662678360939026 ,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.602150559425354,0.09493388235569,-0.792718291282654 ,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.388193219900131,-0.0462160408496857,-0.920418441295624 ,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.624755680561066,0.281536430120468,-0.728297710418701 ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.708205878734589,0.435963183641434,-0.555320203304291 ,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.653796315193176,0.736424326896667,0.173866480588913 ,-0.728628396987915,0.670947968959808,0.137584701180458,-0.742188274860382,0.281538933515549,-0.608187794685364 ,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.349483400583267,-0.0788575559854507,-0.933618187904358 ,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.391994029283524,0.0455844439566135,-0.91883772611618 ,-0.353154391050339,-0.159876078367233,-0.92180347442627,0.233110591769218,-0.47022944688797,-0.851201355457306 ,0.241232365369797,-0.621889412403107,-0.745023787021637,-0.349483400583267,-0.0788575559854507,-0.933618187904358 ,-0.175627052783966,-0.391306757926941,-0.903346061706543,0.319416075944901,-0.833531200885773,-0.450776189565659 ,0.314551591873169,-0.777825355529785,-0.544100165367126,-0.122526675462723,-0.422631919384003,-0.897980749607086 ,0.0628950372338295,0.12239508330822,0.990486621856689,0.115986511111259,0.227630436420441,0.966815114021301 ,-0.397168695926666,0.623658359050751,0.673280954360962,-0.467934727668762,0.514274716377258,0.718720138072968 ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.57789820432663,-0.655906856060028,-0.485612899065018 ,0.143241554498672,-0.263150751590729,-0.954061627388,0.298700571060181,-0.161740928888321,-0.94054126739502 ,0.484550148248672,-0.283617049455643,0.827509820461273,0.679318964481354,-0.681169748306274,0.273008167743683 ,0.780032634735107,-0.518629193305969,0.350104093551636,0.568926751613617,-0.0644996538758278,0.819854915142059 ,0.617175698280334,-0.749861061573029,-0.238332808017731,0.57789820432663,-0.655906856060028,-0.485612899065018 ,0.644391298294067,-0.53528618812561,-0.546103060245514,0.692149817943573,-0.677433252334595,-0.249023765325546 ,0.780032634735107,-0.518629193305969,0.350104093551636,0.679318964481354,-0.681169748306274,0.273008167743683 ,0.669889271259308,-0.735676348209381,0.100143387913704,0.729846894741058,-0.679405450820923,0.0757084339857101 ,0.165526703000069,0.46548119187355,0.869441270828247,0.115986511111259,0.227630436420441,0.966815114021301,0.484550148248672 ,-0.283617049455643,0.827509820461273,0.568926751613617,-0.0644996538758278,0.819854915142059,0.669889271259308 ,-0.735676348209381,0.100143387913704,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.704946756362915 ,-0.708129465579987,-0.040034044533968,0.729846894741058,-0.679405450820923,0.0757084339857101,0.298700571060181 ,-0.161740928888321,-0.94054126739502,0.143241554498672,-0.263150751590729,-0.954061627388,-0.337419033050537 ,0.179084926843643,-0.924162864685059,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.793548226356506 ,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.866790115833282 ,0.482820779085159,0.124735727906227,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.841190576553345 ,0.42979621887207,-0.328136563301086,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.52191436290741 ,0.573753893375397,-0.631198763847351,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.485478460788727 ,0.644360303878784,0.590855658054352,-0.559439122676849,0.572440028190613,0.599449932575226,-0.524893045425415 ,0.430009782314301,0.734560310840607,-0.751098394393921,0.448982089757919,0.484010636806488,-0.549624145030975 ,0.147533476352692,0.822281718254089,-0.819946527481079,0.416022598743439,0.393208384513855,-0.896193027496338 ,0.243554174900055,0.370836079120636,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.751098394393921 ,0.448982089757919,0.484010636806488,-0.737871766090393,0.512266218662262,0.439463973045349,-0.328695803880692 ,0.662784039974213,0.672812342643738,-0.485478460788727,0.644360303878784,0.590855658054352,-0.532302677631378 ,-0.016792556270957,0.846387565135956,-0.896193027496338,0.243554174900055,0.370836079120636,-0.751098394393921 ,0.448982089757919,0.484010636806488,-0.524893045425415,0.430009782314301,0.734560310840607,-0.676622211933136 ,0.280620872974396,-0.680760145187378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.288306564092636 ,0.196774065494537,-0.937101542949677,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.288306564092636 ,0.196774065494537,-0.937101542949677,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.438523173332214 ,0.694159924983978,-0.570823431015015,-0.52191436290741,0.573753893375397,-0.631198763847351,0.311660826206207 ,-0.127051904797554,-0.941660940647125,0.298700571060181,-0.161740928888321,-0.94054126739502,-0.150649160146713 ,0.343712389469147,-0.926912426948547,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.549624145030975 ,0.147533476352692,0.822281718254089,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.154075160622597 ,0.221347615122795,0.962946593761444,-0.097216323018074,-0.329928547143936,0.938986778259277,0.115986511111259 ,0.227630436420441,0.966815114021301,0.165526703000069,0.46548119187355,0.869441270828247,-0.154075160622597 ,0.221347615122795,0.962946593761444,-0.397168695926666,0.623658359050751,0.673280954360962,-0.438523173332214 ,0.694159924983978,-0.570823431015015,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.665791451931 ,0.744200885295868,0.053728986531496,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.736354291439056 ,0.674543976783752,-0.0526571460068226,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.558412373065948 ,0.662734746932983,-0.498957246541977,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.677062809467316 ,0.519408404827118,-0.521345198154449,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.449016630649567 ,0.427696466445923,-0.784512460231781,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.676421940326691 ,0.591155827045441,0.439304113388062,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.665791451931,0.744200885295868 ,0.053728986531496,-0.345012873411179,0.660347282886505,0.667013943195343,-0.345012873411179,0.660347282886505 ,0.667013943195343,-0.665791451931,0.744200885295868,0.053728986531496,-0.728628396987915,0.670947968959808,0.137584701180458 ,-0.458523720502853,0.614238142967224,0.642236292362213,-0.458523720502853,0.614238142967224,0.642236292362213 ,-0.728628396987915,0.670947968959808,0.137584701180458,-0.653796315193176,0.736424326896667,0.173866480588913 ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.357071965932846,0.176186710596085,0.917310118675232 ,-0.396970868110657,0.459579348564148,0.794481575489044,-0.175726309418678,0.623865723609924,0.761519432067871 ,0.117293141782284,0.336978107690811,0.934177756309509,-0.627143085002899,0.109072089195251,-0.771229445934296 ,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.546689867973328,0.213103443384171,-0.809763610363007 ,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.572875738143921,0.11709675937891,-0.811234712600708 ,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.388193219900131,-0.0462160408496857,-0.920418441295624 ,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.238952934741974,-0.279697000980377,-0.929876923561096 ,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.602150559425354,0.09493388235569,-0.792718291282654 ,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.396970868110657,0.459579348564148,0.794481575489044 ,-0.357071965932846,0.176186710596085,0.917310118675232,-0.523556113243103,0.279740929603577,0.804757118225098 ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.396970868110657,0.459579348564148,0.794481575489044 ,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739 ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.207436442375183,0.874366402626038,0.438695192337036 ,0.293660908937454,0.577858746051788,0.761473953723907,-0.175726309418678,0.623865723609924,0.761519432067871 ,-0.341495484113693,0.750590026378632,0.565681397914886,-0.708205878734589,0.435963183641434,-0.555320203304291 ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.535080850124359,0.838914573192596,-0.0995529592037201 ,-0.653796315193176,0.736424326896667,0.173866480588913,-0.550443887710571,0.485175997018814,-0.679423153400421 ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.643109500408173,0.5986048579216,-0.477579742670059 ,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.28887614607811,0.124025739729404,0.949298799037933,-0.047230526804924 ,-0.147780075669289,0.987891852855682,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.523556113243103 ,0.279740929603577,0.804757118225098,-0.047230526804924,-0.147780075669289,0.987891852855682,0.443388015031815 ,-0.641468644142151,0.626039206981659,0.158797964453697,-0.752626359462738,0.639012277126312,-0.425698101520538 ,-0.165044084191322,0.889686226844788,0.323112219572067,0.289230555295944,0.901079475879669,0.406247109174728 ,0.174616456031799,0.896923840045929,0.70347386598587,-0.284948945045471,0.651098012924194,0.771257698535919 ,-0.18939545750618,0.607693135738373,0.792802751064301,-0.543330252170563,0.276144862174988,0.744553029537201 ,-0.501156628131866,0.4410021007061,0.771257698535919,-0.18939545750618,0.607693135738373,0.70347386598587,-0.284948945045471 ,0.651098012924194,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.896193027496338,0.243554174900055 ,0.370836079120636,-0.819946527481079,0.416022598743439,0.393208384513855,-0.866790115833282,0.482820779085159 ,0.124735727906227,-0.866790115833282,0.482820779085159,0.124735727906227,-0.819946527481079,0.416022598743439 ,0.393208384513855,-0.743195831775665,0.547327280044556,0.384828329086304,-0.775943994522095,0.628167152404785 ,0.0575932897627354,-0.207436442375183,0.874366402626038,0.438695192337036,-0.34545773267746,0.720738053321838 ,0.600995540618896,0.235387146472931,0.430203825235367,0.871503055095673,0.293660908937454,0.577858746051788 ,0.761473953723907,0.624863624572754,-0.775575757026672,0.0895971804857254,0.669889271259308,-0.735676348209381 ,0.100143387913704,0.679318964481354,-0.681169748306274,0.273008167743683,0.631202757358551,-0.748089611530304 ,0.204804703593254,0.552962005138397,-0.830714046955109,0.064398355782032,0.564540684223175,-0.811680018901825 ,0.149898007512093,0.392137885093689,-0.898935735225677,0.195300936698914,0.45007735490799,-0.890308558940887 ,-0.0691446214914322,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.392137885093689,-0.898935735225677 ,0.195300936698914,0.477273166179657,-0.844216048717499,0.243945851922035,0.505315124988556,-0.859342753887177 ,-0.0786550119519234,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.405150681734085,0.0784264355897903 ,-0.910879909992218,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.458829164505005,0.0783318057656288 ,-0.885064899921417,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.617175698280334,-0.749861061573029 ,-0.238332808017731,0.692149817943573,-0.677433252334595,-0.249023765325546,0.704946756362915,-0.708129465579987 ,-0.040034044533968,0.518121659755707,-0.845738351345062,-0.127579480409622,0.446416854858398,-0.828317999839783 ,-0.338528007268906,0.545369505882263,-0.785522282123566,-0.292449623346329,0.602230906486511,-0.791486024856567 ,-0.104248508810997,0.518121659755707,-0.845738351345062,-0.127579480409622,0.45007735490799,-0.890308558940887 ,-0.0691446214914322,0.445018202066422,-0.841427505016327,-0.306526601314545,0.446416854858398,-0.828317999839783 ,-0.338528007268906,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.458829164505005,0.0783318057656288 ,-0.885064899921417,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.537661731243134,0.416983306407928 ,-0.732833385467529,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.563096046447754,0.501788794994354 ,-0.656605541706085,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.428541034460068,0.378491044044495 ,-0.820424914360046,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.590115070343018,0.449753820896149 ,-0.670436978340149,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.471282690763474,0.177316069602966 ,-0.863974332809448,0.788194417953491,-0.590478122234344,-0.173450663685799,0.816579103469849,-0.529018878936768 ,-0.230949223041534,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.207436442375183,0.874366402626038 ,0.438695192337036,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.24271634221077,0.841442763805389 ,0.482765853404999,-0.34545773267746,0.720738053321838,0.600995540618896,0.722802340984344,-0.617218017578125 ,0.310803234577179,0.792802751064301,-0.543330252170563,0.276144862174988,0.70347386598587,-0.284948945045471 ,0.651098012924194,0.592092573642731,-0.300796002149582,0.747628331184387,-0.550443887710571,0.485175997018814 ,-0.679423153400421,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.661741137504578,0.744016170501709 ,0.0924049317836761,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.769570112228394,0.63578873872757 ,-0.0594516098499298,-0.633037269115448,0.653608679771423,0.414800643920898,-0.661741137504578,0.744016170501709 ,0.0924049317836761,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.0371899753808975,0.612780451774597 ,0.789377629756927,-0.24271634221077,0.841442763805389,0.482765853404999,-0.270709186792374,0.893246471881866 ,0.35892516374588,-0.0627354606986046,0.701922833919525,0.709484755992889,0.406247109174728,0.174616456031799 ,0.896923840045929,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.0627354606986046,0.701922833919525 ,0.709484755992889,0.279203683137894,0.224120020866394,0.933710634708405,0.592092573642731,-0.300796002149582 ,0.747628331184387,0.406247109174728,0.174616456031799,0.896923840045929,0.279203683137894,0.224120020866394 ,0.933710634708405,0.420396059751511,-0.116494543850422,0.899831175804138,-0.616043865680695,0.713367164134979 ,-0.334061741828918,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.599522888660431,0.463965177536011 ,-0.652156889438629,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.590115070343018,0.449753820896149 ,-0.670436978340149,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.480240970849991,0.318685859441757 ,-0.817195177078247,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.624755680561066,0.281536430120468 ,-0.728297710418701,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.546689867973328,0.213103443384171 ,-0.809763610363007,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.586480021476746,0.39526778459549 ,-0.706968545913696,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.714342832565308,0.493795871734619 ,-0.495862871408463,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.586480021476746,0.39526778459549 ,-0.706968545913696,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.572875738143921,0.11709675937891 ,-0.811234712600708,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173 ,-0.952382564544678,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.572875738143921,0.11709675937891 ,-0.811234712600708,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.229133352637291,-0.201160058379173 ,-0.952382564544678,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063 ,-0.858114242553711,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.737871766090393,0.512266218662262 ,0.439463973045349,-0.751098394393921,0.448982089757919,0.484010636806488,-0.896193027496338,0.243554174900055 ,0.370836079120636,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.612874746322632,0.790095686912537 ,-0.011550584807992,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.743281781673431,0.522458851337433 ,-0.417814522981644,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.563040912151337,0.733509361743927 ,0.380721718072891,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.775943994522095,0.628167152404785 ,0.0575932897627354,-0.743195831775665,0.547327280044556,0.384828329086304,0.293660908937454,0.577858746051788 ,0.761473953723907,0.235387146472931,0.430203825235367,0.871503055095673,0.305413067340851,0.121777974069119 ,0.944400906562805,0.117293141782284,0.336978107690811,0.934177756309509,0.54656720161438,-0.7532879114151,-0.365816354751587 ,0.558507144451141,-0.773075938224792,-0.30070486664772,0.657974064350128,-0.742551565170288,-0.125249087810516 ,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.567850172519684,0.0910008028149605,-0.81808614730835 ,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.449016630649567,0.427696466445923,-0.784512460231781 ,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.580101191997528,0.322207540273666,-0.748107552528381 ,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.446121543645859,0.174870699644089,-0.877721965312958 ,-0.449016630649567,0.427696466445923,-0.784512460231781,0.792802751064301,-0.543330252170563,0.276144862174988 ,0.722802340984344,-0.617218017578125,0.310803234577179,0.71945708990097,-0.687020063400269,0.101906716823578 ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.792802751064301,-0.543330252170563,0.276144862174988 ,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.779800176620483,-0.625844657421112,0.0151696130633354 ,0.744553029537201,-0.501156628131866,0.4410021007061,-0.482590168714523,0.598400712013245,0.639549314975739 ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.397168695926666,0.623658359050751,0.673280954360962 ,-0.559439122676849,0.572440028190613,0.599449932575226,-0.485478460788727,0.644360303878784,0.590855658054352 ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.482590168714523,0.598400712013245,0.639549314975739 ,-0.559439122676849,0.572440028190613,0.599449932575226,-0.665791451931,0.744200885295868,0.053728986531496,-0.626471102237701 ,0.537168443202972,-0.564786732196808,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.728628396987915 ,0.670947968959808,0.137584701180458,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.742188274860382 ,0.281538933515549,-0.608187794685364,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.337419033050537 ,0.179084926843643,-0.924162864685059,0.143241554498672,-0.263150751590729,-0.954061627388,-0.238952934741974 ,-0.279697000980377,-0.929876923561096,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.337419033050537 ,0.179084926843643,-0.924162864685059,0.420848518610001,-0.797750890254974,-0.431833386421204,-0.238952934741974 ,-0.279697000980377,-0.929876923561096,0.143241554498672,-0.263150751590729,-0.954061627388,0.57789820432663 ,-0.655906856060028,-0.485612899065018,0.545369505882263,-0.785522282123566,-0.292449623346329,0.420848518610001 ,-0.797750890254974,-0.431833386421204,0.57789820432663,-0.655906856060028,-0.485612899065018,0.617175698280334 ,-0.749861061573029,-0.238332808017731,0.602230906486511,-0.791486024856567,-0.104248508810997,0.545369505882263 ,-0.785522282123566,-0.292449623346329,0.617175698280334,-0.749861061573029,-0.238332808017731,0.646031558513641 ,-0.763022661209106,-0.0209675077348948,0.624863624572754,-0.775575757026672,0.0895971804857254,0.602230906486511 ,-0.791486024856567,-0.104248508810997,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.669889271259308 ,-0.735676348209381,0.100143387913704,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.52191436290741 ,0.573753893375397,-0.631198763847351,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.51726096868515 ,0.854504764080048,0.0475671775639057,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.471282690763474 ,0.177316069602966,-0.863974332809448,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.521965801715851 ,0.298950701951981,-0.798861801624298,-0.480240970849991,0.318685859441757,-0.817195177078247,0.558507144451141 ,-0.773075938224792,-0.30070486664772,0.606213510036469,-0.729506313800812,-0.316742390394211,0.668628990650177 ,-0.726897060871124,-0.156703382730484,0.657974064350128,-0.742551565170288,-0.125249087810516,0.606213510036469 ,-0.729506313800812,-0.316742390394211,0.603177964687347,-0.730402767658234,-0.320449888706207,0.64731752872467 ,-0.742053866386414,-0.174172759056091,0.668628990650177,-0.726897060871124,-0.156703382730484,0.480990260839462 ,-0.836049139499664,-0.263951063156128,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.64731752872467 ,-0.742053866386414,-0.174172759056091,0.603177964687347,-0.730402767658234,-0.320449888706207,0.445018202066422 ,-0.841427505016327,-0.306526601314545,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.505315124988556 ,-0.859342753887177,-0.0786550119519234,0.480990260839462,-0.836049139499664,-0.263951063156128,-0.345012873411179 ,0.660347282886505,0.667013943195343,-0.328695803880692,0.662784039974213,0.672812342643738,-0.737871766090393 ,0.512266218662262,0.439463973045349,-0.676421940326691,0.591155827045441,0.439304113388062,-0.458523720502853 ,0.614238142967224,0.642236292362213,-0.402240663766861,0.592356264591217,0.698080539703369,-0.328695803880692 ,0.662784039974213,0.672812342643738,-0.345012873411179,0.660347282886505,0.667013943195343,-0.58198344707489 ,-0.50494521856308,0.637436747550964,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.407216638326645 ,-0.806287288665771,0.429040133953094,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.498203843832016 ,-0.171885296702385,-0.849851965904236,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.596588253974915 ,0.134587496519089,-0.791181802749634,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.513277769088745 ,-0.317918360233307,-0.797166168689728,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.705084800720215 ,-0.161029234528542,-0.690597534179688,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.737501204013824 ,0.475387096405029,-0.479686439037323,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.595847427845001 ,0.771685659885406,-0.222411975264549,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.917147397994995 ,-0.128003314137459,-0.377433180809021,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.677902281284332 ,0.724911689758301,-0.122276462614536,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.677902281284332 ,0.724911689758301,-0.122276462614536,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.523228526115417 ,0.410001486539841,0.747081458568573,-0.54696398973465,0.598231494426727,0.585618793964386,-0.541739642620087 ,0.290830105543137,0.788629233837128,-0.265586584806442,0.827619135379791,0.494479835033417,-0.251114159822464 ,0.744844555854797,0.618181467056274,-0.415858834981918,0.554817199707031,0.720582604408264,-0.265586584806442 ,0.827619135379791,0.494479835033417,0.0445509292185307,0.65805971622467,0.751646637916565,-0.130890280008316 ,0.562183797359467,0.816588640213013,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.677088737487793 ,-0.402109175920486,-0.616327106952667,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.776331782341003 ,-0.346262842416763,-0.526698231697083,0.135322481393814,0.847399234771729,0.513422191143036,0.267442584037781 ,0.554580211639404,0.787981748580933,-0.163037300109863,0.519588589668274,0.838717222213745,-0.244644120335579 ,0.685302138328552,0.685937523841858,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0573794208467007 ,0.242892846465111,-0.968354642391205,0.103162460029125,0.213912323117256,-0.971390247344971,0.0849071517586708 ,0.404431521892548,-0.910618424415588,0.124407894909382,0.762849271297455,0.634494781494141,-0.0757151022553444 ,0.839400827884674,0.53821325302124,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130024403333664 ,0.107345074415207,0.985682845115662,-0.243838042020798,0.106035023927689,0.964001834392548,-0.168258428573608 ,-0.0454077981412411,0.984696507453918,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.826433479785919 ,-0.267859846353531,-0.495236098766327,-0.92103111743927,-0.215036183595657,-0.324747800827026,0.167783945798874 ,0.880431950092316,0.443495273590088,0.320210188627243,0.913715243339539,0.250179767608643,0.127348259091377 ,0.984222948551178,0.1228316873312,0.118423573672771,0.978543698787689,0.168606325984001,-0.373621255159378,0.625036597251892 ,-0.685373187065125,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.277610629796982,0.394662648439407 ,-0.875884532928467,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.91446441411972,-0.237356558442116 ,-0.32774493098259,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.529427289962769,-0.308612763881683 ,-0.790230929851532,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.534069001674652,-0.533251285552979 ,-0.656058967113495,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.803666055202484,-0.115168422460556 ,0.583829700946808,-0.797964632511139,-0.0603525713086128,0.599674940109253,0.0620061531662941,0.990111231803894 ,-0.125837221741676,0.0272185504436493,0.988011002540588,-0.151965260505676,0.00109092053025961,0.832261800765991 ,-0.554381728172302,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.373621255159378,0.625036597251892 ,-0.685373187065125,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.630419492721558,0.671314060688019 ,-0.389754712581635,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0104440562427044,-0.319070518016815 ,-0.947673439979553,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.659155488014221,-0.442682504653931 ,-0.607903122901917,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.534069001674652,-0.533251285552979 ,-0.656058967113495,-0.0765343606472015,-0.228869631886482,-0.970443785190582,0.230162009596825,-0.0996426865458488 ,-0.968037605285645,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.218962535262108,0.084364540874958 ,-0.972079277038574,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.0474926419556141,-0.104372285306454 ,-0.993403673171997,-0.273301541805267,-0.178375348448753,-0.945245206356049,0.0198883153498173,-0.203020170331001 ,-0.978972554206848,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.045579582452774,-0.167653381824493 ,-0.98479175567627,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.907991111278534,-0.362916141748428 ,0.209389582276344,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.806973397731781,-0.133313298225403 ,0.575344681739807,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.947871088981628,-0.0393517799675465 ,0.316214770078659,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.730858027935028,-0.478023678064346 ,0.487175494432449,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.987909078598022,-0.100733421742916 ,0.117849096655846,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.961413502693176,-0.0763644799590111 ,0.264296323060989,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.967698454856873,-0.123798668384552 ,-0.219621583819389,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.826433479785919,-0.267859846353531 ,-0.495236098766327,-0.126853466033936,0.814248085021973,0.566487669944763,0.0917807519435883,0.740839779376984 ,0.665381610393524,-0.251114159822464,0.744844555854797,0.618181467056274,-0.130246058106422,-0.0256487857550383 ,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.20303450524807,0.175852552056313 ,-0.963251233100891,-0.218962535262108,0.084364540874958,-0.972079277038574,0.230162009596825,-0.0996426865458488 ,-0.968037605285645,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.130246058106422,-0.0256487857550383 ,-0.99114990234375,-0.658022820949554,0.640722334384918,0.395576566457748,-0.559998273849487,0.512845575809479 ,0.65068531036377,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.285846680402756,0.740470588207245 ,0.608272194862366,-0.431082636117935,0.669595658779144,0.604821860790253,-0.233475670218468,0.295215666294098 ,0.926464676856995,0.0469380915164948,0.75044322013855,0.659266114234924,0.182602807879448,0.369611233472824 ,0.911067366600037,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824 ,0.911067366600037,0.242353484034538,0.171934008598328,0.954831659793854,0.227748140692711,0.261638969182968 ,0.937910318374634,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.00375068746507168,0.864742159843445 ,-0.502202033996582,0.00345755694434047,0.996382415294647,-0.0849123671650887,0.0620061531662941,0.990111231803894 ,-0.125837221741676,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346 ,0.487175494432449,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.929829955101013,0.272868812084198 ,0.246898397803307,-0.960404455661774,0.118234008550644,0.252277553081512,-0.992305636405945,0.0944509729743004 ,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.969261229038239,0.233877912163734 ,0.0763790160417557,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.944353520870209,-0.253018736839294 ,-0.21018548309803,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.982743322849274,-0.0388989634811878 ,0.180837959051132,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.873635351657867,0.199546694755554 ,0.44378200173378,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.727636575698853,-0.347527086734772 ,0.591413497924805,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.905158758163452,-0.227180346846581 ,0.359272450208664,-0.915170788764954,0.197068557143211,0.351605415344238,-0.484471023082733,-0.813864707946777 ,-0.320799201726913,-0.929829955101013,0.272868812084198,0.246898397803307,-0.237173914909363,-0.706752181053162 ,0.666520714759827,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.915170788764954,0.197068557143211 ,0.351605415344238,-0.915170788764954,0.197068557143211,0.351605415344238,-0.929829955101013,0.272868812084198 ,0.246898397803307,-0.823818027973175,0.437958568334579,0.359883517026901,-0.970666527748108,0.0689158514142036 ,-0.230341240763664,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.938947200775146,-0.340274900197983 ,-0.0509038865566254,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.969261229038239,0.233877912163734 ,0.0763790160417557,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.333576679229736,0.525787591934204 ,0.782479405403137,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.516382813453674,0.465612560510635 ,0.718716740608215,0.0822462737560272,-0.665926337242126,0.741469919681549,0.198109984397888,-0.381663233041763 ,0.902820944786072,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.935231983661652,0.339124768972397 ,0.10166396945715,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.980707883834839,0.0803700610995293 ,0.178192809224129,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.484471023082733,-0.813864707946777 ,-0.320799201726913,0.707368016242981,-0.349391609430313,-0.614455819129944,0.165526703000069,0.46548119187355 ,0.869441270828247,0.198109984397888,-0.381663233041763,0.902820944786072,-0.154075160622597,0.221347615122795 ,0.962946593761444,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.0524283163249493,-0.77048397064209 ,0.635299742221832,0.198109984397888,-0.381663233041763,0.902820944786072,0.493679195642471,-0.48221343755722 ,0.723706424236298,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.869328856468201,-0.380869299173355 ,0.314969629049301,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.275725185871124,-0.367643237113953 ,0.888152062892914,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0998818427324295,-0.0102633228525519 ,0.994946360588074,-0.397168695926666,0.623658359050751,0.673280954360962,-0.524893045425415,0.430009782314301 ,0.734560310840607,-0.559439122676849,0.572440028190613,0.599449932575226,-0.175627052783966,-0.391306757926941 ,-0.903346061706543,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.238952934741974,-0.279697000980377 ,-0.929876923561096,0.668083667755127,-0.706556260585785,0.233329057693481,0.744553029537201,-0.501156628131866 ,0.4410021007061,0.779800176620483,-0.625844657421112,0.0151696130633354,0.771257698535919,-0.18939545750618 ,0.607693135738373,0.744553029537201,-0.501156628131866,0.4410021007061,0.509250044822693,-0.170650407671928 ,0.843529999256134,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.349483400583267,-0.0788575559854507 ,-0.933618187904358,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.420396059751511,-0.116494543850422 ,0.899831175804138,0.279203683137894,0.224120020866394,0.933710634708405,0.174675241112709,0.124651238322258 ,0.976703941822052,-0.523556113243103,0.279740929603577,0.804757118225098,-0.425698101520538,-0.165044084191322 ,0.889686226844788,-0.331690967082977,-0.041898600757122,0.94245719909668,0.518121659755707,-0.845738351345062 ,-0.127579480409622,0.552962005138397,-0.830714046955109,0.064398355782032,0.45007735490799,-0.890308558940887 ,-0.0691446214914322,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.65559720993042,0.741017520427704 ,-0.145207911729813,-0.270709186792374,0.893246471881866,0.35892516374588,0.753405332565308,-0.651543796062469 ,-0.0887193456292152,0.692083477973938,-0.68414306640625,-0.23014922440052,0.779800176620483,-0.625844657421112 ,0.0151696130633354,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.637764096260071,0.392574012279511 ,-0.662678360939026,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.662047147750854,0.339645981788635 ,-0.668082535266876,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.628251135349274,0.515080809593201 ,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.550443887710571,0.485175997018814 ,-0.679423153400421,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.521023571491241,0.56111478805542 ,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.428541034460068,0.378491044044495 ,-0.820424914360046,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.309054106473923,-0.602658152580261 ,-0.735723257064819,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.769570112228394,0.63578873872757 ,-0.0594516098499298,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.643109500408173,0.5986048579216,-0.477579742670059 ,-0.154075160622597,0.221347615122795,0.962946593761444,-0.532302677631378,-0.016792556270957,0.846387565135956 ,-0.524893045425415,0.430009782314301,0.734560310840607,0.311660826206207,-0.127051904797554,-0.941660940647125 ,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.513277769088745,-0.317918360233307,-0.797166168689728 ,-0.524893045425415,0.430009782314301,0.734560310840607,-0.397168695926666,0.623658359050751,0.673280954360962 ,-0.154075160622597,0.221347615122795,0.962946593761444,-0.498203843832016,-0.171885296702385,-0.849851965904236 ,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.446121543645859,0.174870699644089,-0.877721965312958 ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.341495484113693,0.750590026378632,0.565681397914886 ,-0.653796315193176,0.736424326896667,0.173866480588913,-0.396970868110657,0.459579348564148,0.794481575489044 ,-0.420263022184372,0.62258517742157,0.660126268863678,-0.175726309418678,0.623865723609924,0.761519432067871 ,-0.523556113243103,0.279740929603577,0.804757118225098,-0.357071965932846,0.176186710596085,0.917310118675232 ,-0.28887614607811,0.124025739729404,0.949298799037933,-0.590115070343018,0.449753820896149,-0.670436978340149 ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.537661731243134,0.416983306407928,-0.732833385467529 ,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.751343011856079,0.620160222053528,0.225576862692833 ,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.62176638841629,0.776679754257202,-0.100871689617634 ,0.443388015031815,-0.641468644142151,0.626039206981659,0.477273166179657,-0.844216048717499,0.243945851922035 ,0.158797964453697,-0.752626359462738,0.639012277126312,-0.217019572854042,0.53657478094101,0.815469205379486 ,0.279203683137894,0.224120020866394,0.933710634708405,-0.0627354606986046,0.701922833919525,0.709484755992889 ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.207436442375183,0.874366402626038,0.438695192337036 ,-0.341495484113693,0.750590026378632,0.565681397914886,0.443388015031815,-0.641468644142151,0.626039206981659 ,0.744553029537201,-0.501156628131866,0.4410021007061,0.668083667755127,-0.706556260585785,0.233329057693481 ,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.769570112228394,0.63578873872757,-0.0594516098499298 ,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.616043865680695,0.713367164134979,-0.334061741828918 ,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.643109500408173,0.5986048579216,-0.477579742670059 ,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.751343011856079,0.620160222053528,0.225576862692833 ,-0.599866449832916,0.551924109458923,0.57925820350647,-0.633037269115448,0.653608679771423,0.414800643920898 ,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.353154391050339,-0.159876078367233,-0.92180347442627 ,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.662047147750854,0.339645981788635,-0.668082535266876 ,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.537661731243134,0.416983306407928,-0.732833385467529 ,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.643109500408173,0.5986048579216,-0.477579742670059 ,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.563096046447754,0.501788794994354,-0.656605541706085 ,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.34545773267746,0.720738053321838,0.600995540618896 ,-0.24271634221077,0.841442763805389,0.482765853404999,0.406247109174728,0.174616456031799,0.896923840045929 ,0.323112219572067,0.289230555295944,0.901079475879669,-0.0371899753808975,0.612780451774597,0.789377629756927 ,0.70347386598587,-0.284948945045471,0.651098012924194,0.406247109174728,0.174616456031799,0.896923840045929 ,0.592092573642731,-0.300796002149582,0.747628331184387,-0.535080850124359,0.838914573192596,-0.0995529592037201 ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.550443887710571,0.485175997018814,-0.679423153400421 ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.270709186792374,0.893246471881866,0.35892516374588 ,-0.24271634221077,0.841442763805389,0.482765853404999,-0.379977285861969,-0.0195776931941509,-0.924788594245911 ,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678 ,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.586480021476746,0.39526778459549,-0.706968545913696 ,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.379977285861969,-0.0195776931941509,-0.924788594245911 ,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.473940014839172,0.0295314248651266,-0.880061805248261 ,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.628251135349274,0.515080809593201,-0.583088576793671 ,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671 ,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.428541034460068,0.378491044044495,-0.820424914360046 ,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.637764096260071,0.392574012279511,-0.662678360939026 ,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.637764096260071,0.392574012279511,-0.662678360939026 ,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.385445684194565,0.201349288225174,-0.900494337081909 ,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.628251135349274,0.515080809593201,-0.583088576793671 ,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.793548226356506,0.599173665046692,-0.106170132756233 ,-0.676421940326691,0.591155827045441,0.439304113388062,-0.959632217884064,0.26953399181366,0.0803584158420563 ,0.742225170135498,-0.630128085613251,-0.228123426437378,0.657974064350128,-0.742551565170288,-0.125249087810516 ,0.692083477973938,-0.68414306640625,-0.23014922440052,-0.175726309418678,0.623865723609924,0.761519432067871 ,0.293660908937454,0.577858746051788,0.761473953723907,0.117293141782284,0.336978107690811,0.934177756309509 ,0.323112219572067,0.289230555295944,0.901079475879669,0.305413067340851,0.121777974069119,0.944400906562805 ,0.235387146472931,0.430203825235367,0.871503055095673,-0.638818860054016,0.281881213188171,-0.715858519077301 ,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.676622211933136,0.280620872974396,-0.680760145187378 ,0.477273166179657,-0.844216048717499,0.243945851922035,0.443388015031815,-0.641468644142151,0.626039206981659 ,0.668083667755127,-0.706556260585785,0.233329057693481,-0.0411282703280449,-0.362414002418518,-0.931109309196472 ,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.353154391050339,-0.159876078367233,-0.92180347442627 ,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.676421940326691,0.591155827045441,0.439304113388062 ,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563 ,-0.676421940326691,0.591155827045441,0.439304113388062,-0.737871766090393,0.512266218662262,0.439463973045349 ,-0.458523720502853,0.614238142967224,0.642236292362213,-0.341495484113693,0.750590026378632,0.565681397914886 ,-0.402240663766861,0.592356264591217,0.698080539703369,-0.594531655311584,-0.698622703552246,0.398068368434906 ,-0.407216638326645,-0.806287288665771,0.429040133953094,0.493679195642471,-0.48221343755722,0.723706424236298 ,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.985974311828613,-0.0694569125771523,-0.151757627725601 ,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.805109977722168,-0.249997183680534,-0.537865459918976 ,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.513277769088745,-0.317918360233307,-0.797166168689728 ,-0.251114159822464,0.744844555854797,0.618181467056274,-0.291274279356003,0.469944089651108,0.833253800868988 ,-0.408989250659943,0.558586657047272,0.721601545810699,-0.415858834981918,0.554817199707031,0.720582604408264 ,0.624863624572754,-0.775575757026672,0.0895971804857254,0.631202757358551,-0.748089611530304,0.204804703593254 ,0.564540684223175,-0.811680018901825,0.149898007512093,0.552962005138397,-0.830714046955109,0.064398355782032 ,0.470721006393433,-0.417188495397568,0.777415871620178,0.463100373744965,-0.535968005657196,0.705886960029602 ,0.564540684223175,-0.811680018901825,0.149898007512093,0.631202757358551,-0.748089611530304,0.204804703593254 ,-0.0139366090297699,0.110060036182404,0.993827223777771,0.463100373744965,-0.535968005657196,0.705886960029602 ,0.470721006393433,-0.417188495397568,0.777415871620178,0.0628950372338295,0.12239508330822,0.990486621856689 ,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689 ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.39349702000618,0.476447492837906,0.786230206489563 ,-0.482590168714523,0.598400712013245,0.639549314975739,-0.39349702000618,0.476447492837906,0.786230206489563 ,-0.467934727668762,0.514274716377258,0.718720138072968,-0.888843476772308,-0.151014879345894,0.43261045217514 ,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.721357464790344,0.650649428367615,0.237273663282394 ,-0.658022820949554,0.640722334384918,0.395576566457748,-0.880525827407837,0.119760677218437,0.458619266748428 ,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.96703976392746,-0.131514891982079,0.218031987547874 ,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.903727471828461,0.0786926299333572,0.420813679695129 ,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.973214685916901,0.0593582727015018,0.22210305929184 ,-0.880525827407837,0.119760677218437,0.458619266748428,-0.961413502693176,-0.0763644799590111,0.264296323060989 ,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.903727471828461,0.0786926299333572,0.420813679695129 ,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.943021297454834,-0.0914337635040283,0.31992295384407 ,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.961413502693176,-0.0763644799590111,0.264296323060989 ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.947871088981628,-0.0393517799675465,0.316214770078659 ,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.943021297454834,-0.0914337635040283,0.31992295384407 ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.90759688615799,-0.3472660779953,0.235953688621521 ,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.962112545967102,-0.0959249585866928,0.255221039056778 ,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.947871088981628,-0.0393517799675465,0.316214770078659 ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.959401249885559,0.00467001460492611,0.282005965709686 ,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.961413502693176,-0.0763644799590111,0.264296323060989 ,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.959401249885559,0.00467001460492611,0.282005965709686 ,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.776331782341003,-0.346262842416763,-0.526698231697083 ,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.826433479785919,-0.267859846353531,-0.495236098766327 ,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.776331782341003,-0.346262842416763,-0.526698231697083 ,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.369074016809464,-0.353648155927658,-0.859486699104309 ,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.369074016809464,-0.353648155927658,-0.859486699104309 ,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0572102777659893,-0.363048881292343,-0.930012106895447 ,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0572102777659893,-0.363048881292343,-0.930012106895447 ,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0340137556195259,-0.196621879935265,-0.979889214038849 ,0.079964205622673,0.0645997598767281,-0.994702279567719,-0.0752750188112259,0.0473053678870201,-0.996040105819702 ,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0810841843485832,0.166241332888603,-0.982745766639709 ,0.213752746582031,0.00495887640863657,0.976875185966492,0.206305459141731,0.0686478838324547,0.976076602935791 ,0.412932306528091,0.0920658186078072,0.906096458435059,0.443167895078659,0.0182685311883688,0.896252453327179 ,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0177117679268122,0.0767069831490517,0.996896326541901 ,-0.0938338041305542,0.0678655132651329,0.993272125720978,-0.0935027524828911,0.0115412008017302,0.995552122592926 ,0.667598783969879,0.599002242088318,-0.442163020372391,0.751961290836334,-0.373251110315323,-0.543357908725739 ,0.901673018932343,-0.243753165006638,-0.357169687747955,0.694567322731018,0.687739253044128,-0.211165577173233 ,0.428307920694351,0.88731974363327,-0.170926719903946,0.587996542453766,-0.370855212211609,-0.718836843967438 ,0.751961290836334,-0.373251110315323,-0.543357908725739,0.667598783969879,0.599002242088318,-0.442163020372391 ,0.550657391548157,0.552472710609436,-0.625739872455597,0.957330107688904,-0.260764896869659,0.124582171440125 ,0.898464798927307,-0.377257645130157,-0.224583357572556,0.720091462135315,-0.402850449085236,-0.56496000289917 ,0.797747611999512,-0.370718449354172,-0.475569725036621,0.412932306528091,0.0920658186078072,0.906096458435059 ,0.669797122478485,0.132066950201988,0.730705201625824,0.740497648715973,0.0785514339804649,0.6674525141716,0.443167895078659 ,0.0182685311883688,0.896252453327179,0.443167895078659,0.0182685311883688,0.896252453327179,0.740497648715973 ,0.0785514339804649,0.6674525141716,0.789331138134003,-0.10905522108078,0.604204714298248,0.436154782772064,-0.0844674557447433 ,0.895898580551147,0.963335692882538,-0.129456236958504,-0.235001027584076,0.964883267879486,-0.257389277219772 ,0.0524501986801624,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.999219238758087,-0.0126819871366024 ,0.0374175347387791,0.641741633415222,-0.441758394241333,-0.626910865306854,0.631867706775665,-0.394274353981018 ,-0.66730123758316,0.797747611999512,-0.370718449354172,-0.475569725036621,0.720091462135315,-0.402850449085236 ,-0.56496000289917,0.340316504240036,-0.448403626680374,-0.826510012149811,-0.000479655718663707,-0.389120310544968 ,-0.921186804771423,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.316583722829819,-0.383378833532333 ,-0.867637872695923,0.669797122478485,0.132066950201988,0.730705201625824,0.412932306528091,0.0920658186078072 ,0.906096458435059,0.291106730699539,0.735121071338654,0.612253129482269,0.562915802001953,0.509836494922638 ,0.650532484054565,0.889242053031921,-0.13137923181057,0.438164442777634,0.88209742307663,0.116333372890949,0.456476300954819 ,0.669797122478485,0.132066950201988,0.730705201625824,0.562915802001953,0.509836494922638,0.650532484054565 ,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.98511666059494,-0.171194240450859,-0.0154188685119152 ,0.911918580532074,-0.233281582593918,-0.33761540055275,0.963335692882538,-0.129456236958504,-0.235001027584076 ,-0.0114694014191628,0.852027952671051,0.523370683193207,0.377356678247452,0.665678739547729,0.643796324729919 ,0.306847393512726,0.504767894744873,0.806879222393036,-0.123493202030659,0.566911935806274,0.814469277858734 ,0.306847393512726,0.504767894744873,0.806879222393036,0.543150007724762,0.5245680809021,0.65560382604599,0.381191462278366 ,0.807218015193939,0.450657457113266,0.0985177978873253,0.656356811523438,0.747990608215332,-0.0114694014191628 ,0.852027952671051,0.523370683193207,0.200062945485115,0.83070033788681,0.519530355930328,0.296454012393951,0.853960573673248 ,0.42762878537178,0.377356678247452,0.665678739547729,0.643796324729919,0.613006412982941,0.632095158100128,-0.474003076553345 ,0.367568165063858,0.757281005382538,-0.539832472801209,0.438032209873199,0.893748044967651,0.0966554135084152 ,0.600959360599518,0.790454268455505,0.118447989225388,0.377356678247452,0.665678739547729,0.643796324729919 ,0.296454012393951,0.853960573673248,0.42762878537178,0.307623445987701,0.872403740882874,0.379841536283493,0.536732196807861 ,0.528757095336914,0.657521426677704,0.198797062039375,0.642942130565643,0.739665627479553,0.167321741580963 ,0.36504065990448,0.915832281112671,0.345328092575073,0.282600909471512,0.894921898841858,0.349903911352158,0.592323482036591 ,0.725754916667938,0.377356678247452,0.665678739547729,0.643796324729919,0.536732196807861,0.528757095336914 ,0.657521426677704,0.543150007724762,0.5245680809021,0.65560382604599,0.306847393512726,0.504767894744873,0.806879222393036 ,0.367568165063858,0.757281005382538,-0.539832472801209,0.237173900008202,0.452350407838821,-0.85972535610199 ,0.0132267400622368,0.464425086975098,-0.885513663291931,0.148073747754097,0.745845675468445,-0.649452328681946 ,0.340316504240036,-0.448403626680374,-0.826510012149811,0.365317970514297,-0.409484475851059,-0.835981607437134 ,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.000479655718663707,-0.389120310544968,-0.921186804771423 ,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.0605181753635406,0.0956659987568855,-0.993572115898132 ,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.208209201693535,-0.0487155094742775,-0.976870357990265 ,-0.219784289598465,0.21984101831913,-0.950455009937286,0.0261680763214827,0.194867521524429,-0.980480432510376 ,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.228578105568886,0.0637626796960831,-0.971435189247131 ,0.167321741580963,0.36504065990448,0.915832281112671,0.198797062039375,0.642942130565643,0.739665627479553,-0.103646658360958 ,0.632546961307526,0.767555713653564,-0.169371664524078,0.433557659387589,0.88506555557251,-0.0510855726897717 ,0.371638625860214,-0.926970899105072,-0.163042917847633,0.482063621282578,-0.86083197593689,-0.181298598647118 ,0.412835657596588,-0.892579138278961,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0743019878864288 ,-0.318207800388336,-0.945104777812958,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.0222764182835817 ,-0.332656174898148,-0.942785024642944,-0.0440147742629051,-0.354229003190994,-0.934122323989868,0.378357648849487 ,0.724991083145142,0.575528800487518,0.250419557094574,0.807709574699402,0.533755779266357,0.380377441644669 ,0.814519464969635,0.438030809164047,0.381191462278366,0.807218015193939,0.450657457113266,-0.208209201693535 ,-0.0487155094742775,-0.976870357990265,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.044108722358942 ,-0.104566030204296,-0.993539333343506,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.025994973257184 ,0.100541830062866,0.99459320306778,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0463824793696404 ,-0.00737064564600587,0.998896598815918,0.0350599996745586,0.0215551313012838,0.999152719974518,0.922331035137177 ,0.0571805983781815,0.382146298885345,0.88209742307663,0.116333372890949,0.456476300954819,0.999219238758087 ,-0.0126819871366024,0.0374175347387791,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.922331035137177 ,0.0571805983781815,0.382146298885345,0.964077115058899,-0.108696304261684,0.242364108562469,0.789331138134003 ,-0.10905522108078,0.604204714298248,0.740497648715973,0.0785514339804649,0.6674525141716,0.88209742307663,0.116333372890949 ,0.456476300954819,0.922331035137177,0.0571805983781815,0.382146298885345,0.740497648715973,0.0785514339804649 ,0.6674525141716,0.669797122478485,0.132066950201988,0.730705201625824,0.380377441644669,0.814519464969635,0.438030809164047 ,0.349903911352158,0.592323482036591,0.725754916667938,0.645817458629608,0.37744864821434,0.66366583108902,0.659283638000488 ,0.56208461523056,0.499405652284622,0.349903911352158,0.592323482036591,0.725754916667938,0.345328092575073,0.282600909471512 ,0.894921898841858,0.634893178939819,0.130881890654564,0.761433184146881,0.645817458629608,0.37744864821434,0.66366583108902 ,0.307623445987701,0.872403740882874,0.379841536283493,0.296454012393951,0.853960573673248,0.42762878537178,0.273056983947754 ,0.564899086952209,0.778671264648438,0.31501841545105,0.615055680274963,0.722820818424225,0.200062945485115,0.83070033788681 ,0.519530355930328,0.248548656702042,0.411066323518753,0.877067863941193,0.273056983947754,0.564899086952209 ,0.778671264648438,0.296454012393951,0.853960573673248,0.42762878537178,0.248548656702042,0.411066323518753,0.877067863941193 ,0.374015629291534,0.57144570350647,0.730453372001648,0.299544423818588,0.682939231395721,0.666233539581299,0.273056983947754 ,0.564899086952209,0.778671264648438,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.163042917847633 ,0.482063621282578,-0.86083197593689,0.148073747754097,0.745845675468445,-0.649452328681946,0.0132267400622368 ,0.464425086975098,-0.885513663291931,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0863703861832619 ,-0.238449081778526,-0.967306673526764,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.044108722358942 ,-0.104566030204296,-0.993539333343506,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0440147742629051 ,-0.354229003190994,-0.934122323989868,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0333343744277954 ,-0.188492000102997,-0.981508851051331,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.109398990869522 ,-0.127084732055664,-0.985840439796448,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.228578105568886 ,0.0637626796960831,-0.971435189247131,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.228578105568886 ,0.0637626796960831,-0.971435189247131,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.0573794208467007 ,0.242892846465111,-0.968354642391205,0.200062945485115,0.83070033788681,0.519530355930328,-0.0114694014191628 ,0.852027952671051,0.523370683193207,-0.22732575237751,0.908823013305664,0.349805355072021,0.0103344274684787 ,0.766447365283966,0.642223954200745,0.374015629291534,0.57144570350647,0.730453372001648,0.248548656702042,0.411066323518753 ,0.877067863941193,0.0103344274684787,0.766447365283966,0.642223954200745,0.120974369347095,0.820596933364868 ,0.558556973934174,-0.0114694014191628,0.852027952671051,0.523370683193207,-0.123493202030659,0.566911935806274 ,0.814469277858734,-0.154036402702332,0.732537567615509,0.663069784641266,-0.22732575237751,0.908823013305664 ,0.349805355072021,0.274746268987656,0.549388289451599,0.789105176925659,-0.0824126973748207,0.271421998739243 ,0.958925545215607,-0.14302770793438,0.47186079621315,0.869994521141052,0.0985177978873253,0.656356811523438 ,0.747990608215332,0.0201202612370253,0.491976112127304,0.870376169681549,-0.14302770793438,0.47186079621315 ,0.869994521141052,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.0346120446920395,0.37646210193634 ,0.9257852435112,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.0329985395073891,0.983319759368896 ,0.178866878151894,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.22561714053154,0.930931448936462 ,0.287164628505707,-0.0476368367671967,0.9897421002388,0.134689643979073,0.4521364569664,0.881967127323151,0.133066028356552 ,0.120974369347095,0.820596933364868,0.558556973934174,-0.22561714053154,0.930931448936462,0.287164628505707 ,0.120974369347095,0.820596933364868,0.558556973934174,0.0103344274684787,0.766447365283966,0.642223954200745 ,-0.22732575237751,0.908823013305664,0.349805355072021,-0.22561714053154,0.930931448936462,0.287164628505707 ,-0.154036402702332,0.732537567615509,0.663069784641266,-0.0509213022887707,0.887329638004303,0.458315491676331 ,-0.22561714053154,0.930931448936462,0.287164628505707,-0.22732575237751,0.908823013305664,0.349805355072021 ,0.834282159805298,-0.0577300190925598,0.548307001590729,0.659731268882751,0.252948880195618,0.70765209197998 ,0.645817458629608,0.37744864821434,0.66366583108902,0.634893178939819,0.130881890654564,0.761433184146881,0.954777777194977 ,-0.0263348873704672,0.296151697635651,0.967678904533386,-0.0477387942373753,0.247625812888145,0.890053927898407 ,-0.0586380586028099,0.452068090438843,0.888165593147278,-0.00891786906868219,0.459437042474747,0.0350599996745586 ,0.0215551313012838,0.999152719974518,-0.0463824793696404,-0.00737064564600587,0.998896598815918,-0.152715757489204 ,0.0582166723906994,0.986553966999054,0.0415807291865349,0.144025474786758,0.988700032234192,0.295928508043289 ,-0.207367569208145,0.932429611682892,0.307560920715332,-0.091851145029068,0.947084844112396,0.534165501594543 ,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,-0.0463824793696404 ,-0.00737064564600587,0.998896598815918,0.171966776251793,-0.0650009214878082,0.982955873012543,0.135682836174965 ,-0.100586615502834,0.985633075237274,-0.152715757489204,0.0582166723906994,0.986553966999054,0.0415807291865349 ,0.144025474786758,0.988700032234192,-0.152715757489204,0.0582166723906994,0.986553966999054,-0.169371664524078 ,0.433557659387589,0.88506555557251,0.051253791898489,0.460094302892685,0.886389493942261,-0.152715757489204 ,0.0582166723906994,0.986553966999054,0.135682836174965,-0.100586615502834,0.985633075237274,0.167321741580963 ,0.36504065990448,0.915832281112671,-0.169371664524078,0.433557659387589,0.88506555557251,0.307560920715332,-0.091851145029068 ,0.947084844112396,0.295928508043289,-0.207367569208145,0.932429611682892,0.135682836174965,-0.100586615502834 ,0.985633075237274,0.171966776251793,-0.0650009214878082,0.982955873012543,0.834282159805298,-0.0577300190925598 ,0.548307001590729,0.774369955062866,-0.461647033691406,0.432704478502274,0.801247537136078,-0.596114218235016 ,0.0514810234308243,0.858235716819763,-0.482136696577072,0.175999104976654,0.964077115058899,-0.108696304261684 ,0.242364108562469,0.967678904533386,-0.0477387942373753,0.247625812888145,0.831483364105225,0.0368483774363995 ,0.554326236248016,0.789331138134003,-0.10905522108078,0.604204714298248,0.0116106020286679,0.109513640403748 ,0.993917465209961,0.169032081961632,0.119583055377007,0.978329241275787,0.171966776251793,-0.0650009214878082 ,0.982955873012543,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.888511061668396,-0.437404543161392 ,0.138655453920364,0.727367699146271,-0.668511748313904,0.15501070022583,0.858235716819763,-0.482136696577072 ,0.175999104976654,0.801247537136078,-0.596114218235016,0.0514810234308243,0.135682836174965,-0.100586615502834 ,0.985633075237274,0.295928508043289,-0.207367569208145,0.932429611682892,0.345328092575073,0.282600909471512 ,0.894921898841858,0.167321741580963,0.36504065990448,0.915832281112671,0.801247537136078,-0.596114218235016 ,0.0514810234308243,0.774369955062866,-0.461647033691406,0.432704478502274,0.859270870685577,-0.205668747425079 ,0.468352407217026,0.888511061668396,-0.437404543161392,0.138655453920364,0.486142605543137,0.105355285108089 ,0.867505431175232,0.2811399102211,0.126565098762512,0.951284229755402,0.19136768579483,-0.0293898787349463,0.981078326702118 ,0.436154782772064,-0.0844674557447433,0.895898580551147,0.486142605543137,0.105355285108089,0.867505431175232 ,0.436154782772064,-0.0844674557447433,0.895898580551147,0.789331138134003,-0.10905522108078,0.604204714298248 ,0.831483364105225,0.0368483774363995,0.554326236248016,-0.123493202030659,0.566911935806274,0.814469277858734 ,0.306847393512726,0.504767894744873,0.806879222393036,0.0985177978873253,0.656356811523438,0.747990608215332 ,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549 ,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0509213022887707,0.887329638004303,0.458315491676331 ,-0.154036402702332,0.732537567615509,0.663069784641266,-0.14302770793438,0.47186079621315,0.869994521141052 ,0.0201202612370253,0.491976112127304,0.870376169681549,-0.154036402702332,0.732537567615509,0.663069784641266 ,-0.123493202030659,0.566911935806274,0.814469277858734,0.105207018554211,0.966200411319733,0.235347032546997 ,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0509213022887707,0.887329638004303,0.458315491676331 ,0.0895038321614265,0.749099910259247,0.65638279914856,0.88209742307663,0.116333372890949,0.456476300954819,0.889242053031921 ,-0.13137923181057,0.438164442777634,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.999219238758087 ,-0.0126819871366024,0.0374175347387791,0.380377441644669,0.814519464969635,0.438030809164047,0.250419557094574 ,0.807709574699402,0.533755779266357,0.198797062039375,0.642942130565643,0.739665627479553,0.349903911352158 ,0.592323482036591,0.725754916667938,0.00678820535540581,0.00935708172619343,0.999933183193207,0.00949578825384378 ,0.0594539344310761,0.998185873031616,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.0177117679268122 ,0.0767069831490517,0.996896326541901,0.291106730699539,0.735121071338654,0.612253129482269,0.412932306528091 ,0.0920658186078072,0.906096458435059,0.206305459141731,0.0686478838324547,0.976076602935791,0.233477383852005 ,0.295218259096146,0.926463425159454,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.316321402788162 ,0.603275775909424,-0.732119560241699,0.508885145187378,0.79451996088028,-0.331321537494659,0.0145869944244623 ,0.988409578800201,-0.151108130812645,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0340137556195259 ,-0.196621879935265,-0.979889214038849,-0.0104440562427044,-0.319070518016815,-0.947673439979553,0.436154782772064 ,-0.0844674557447433,0.895898580551147,0.19136768579483,-0.0293898787349463,0.981078326702118,0.213752746582031 ,0.00495887640863657,0.976875185966492,0.443167895078659,0.0182685311883688,0.896252453327179,-0.0851698592305183 ,-0.236632868647575,-0.967858970165253,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.208209201693535 ,-0.0487155094742775,-0.976870357990265,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.381191462278366 ,0.807218015193939,0.450657457113266,0.380377441644669,0.814519464969635,0.438030809164047,0.659283638000488 ,0.56208461523056,0.499405652284622,0.274746268987656,0.549388289451599,0.789105176925659,-0.0161609761416912 ,0.992576837539673,-0.120540797710419,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0476368367671967 ,0.9897421002388,0.134689643979073,-0.0329985395073891,0.983319759368896,0.178866878151894,0.4521364569664,0.881967127323151 ,0.133066028356552,0.600959360599518,0.790454268455505,0.118447989225388,0.374015629291534,0.57144570350647,0.730453372001648 ,0.120974369347095,0.820596933364868,0.558556973934174,0.367568165063858,0.757281005382538,-0.539832472801209 ,0.613006412982941,0.632095158100128,-0.474003076553345,0.316321402788162,0.603275775909424,-0.732119560241699 ,0.237173900008202,0.452350407838821,-0.85972535610199,0.508885145187378,0.79451996088028,-0.331321537494659 ,0.4521364569664,0.881967127323151,0.133066028356552,-0.0476368367671967,0.9897421002388,0.134689643979073,0.0145869944244623 ,0.988409578800201,-0.151108130812645,0.600959360599518,0.790454268455505,0.118447989225388,0.438032209873199 ,0.893748044967651,0.0966554135084152,0.299544423818588,0.682939231395721,0.666233539581299,0.374015629291534 ,0.57144570350647,0.730453372001648,0.859270870685577,-0.205668747425079,0.468352407217026,0.774369955062866 ,-0.461647033691406,0.432704478502274,0.550590097904205,-0.295528441667557,0.780713438987732,0.534165501594543 ,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,0.634893178939819 ,0.130881890654564,0.761433184146881,0.345328092575073,0.282600909471512,0.894921898841858,0.295928508043289 ,-0.207367569208145,0.932429611682892,0.774369955062866,-0.461647033691406,0.432704478502274,0.834282159805298 ,-0.0577300190925598,0.548307001590729,0.634893178939819,0.130881890654564,0.761433184146881,0.550590097904205 ,-0.295528441667557,0.780713438987732,0.0704744011163712,0.82375580072403,-0.562547504901886,0.0859579145908356 ,0.475804299116135,-0.875340759754181,0.0293854102492332,0.448770761489868,-0.893163621425629,-0.0235754959285259 ,0.833040595054626,-0.552709341049194,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.219784289598465 ,0.21984101831913,-0.950455009937286,-0.181298598647118,0.412835657596588,-0.892579138278961,0.0132267400622368 ,0.464425086975098,-0.885513663291931,0.181251630187035,0.380190223455429,-0.906974792480469,0.0261680763214827 ,0.194867521524429,-0.980480432510376,0.0132267400622368,0.464425086975098,-0.885513663291931,0.237173900008202 ,0.452350407838821,-0.85972535610199,0.85130912065506,-0.28415909409523,-0.441051483154297,0.797747611999512 ,-0.370718449354172,-0.475569725036621,0.631867706775665,-0.394274353981018,-0.66730123758316,0.544504523277283 ,-0.49831086397171,-0.674685955047607,0.797747611999512,-0.370718449354172,-0.475569725036621,0.85130912065506 ,-0.28415909409523,-0.441051483154297,0.934587121009827,-0.0746875330805779,0.347805470228195,0.957330107688904 ,-0.260764896869659,0.124582171440125,0.720091462135315,-0.402850449085236,-0.56496000289917,0.898464798927307 ,-0.377257645130157,-0.224583357572556,0.778241097927094,-0.324259251356125,-0.53777015209198,0.599293649196625 ,-0.39963087439537,-0.693644165992737,0.508885145187378,0.79451996088028,-0.331321537494659,0.613006412982941 ,0.632095158100128,-0.474003076553345,0.600959360599518,0.790454268455505,0.118447989225388,0.4521364569664,0.881967127323151 ,0.133066028356552,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.219784289598465,0.21984101831913 ,-0.950455009937286,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.051368486136198,0.366652280092239 ,-0.928938865661621,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.109398990869522,-0.127084732055664 ,-0.985840439796448,0.111387610435486,-0.211319342255592,-0.9710493683815,0.223528057336807,-0.361992210149765 ,-0.904984474182129,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.415907889604568,-0.581008851528168 ,-0.699606537818909,0.394706159830093,-0.349102348089218,-0.84990268945694,-0.00605733366683126,-0.0303982496261597 ,-0.999519467353821,0.427927106618881,-0.320324927568436,-0.845145165920258,0.339142799377441,0.423890322446823 ,-0.839820921421051,0.205058068037033,-0.244612783193588,-0.947689712047577,-0.000479655718663707,-0.389120310544968 ,-0.921186804771423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0863703861832619,-0.238449081778526 ,-0.967306673526764,-0.03669124096632,-0.316752940416336,-0.947798132896423,-0.0440147742629051,-0.354229003190994 ,-0.934122323989868,-0.000479655718663707,-0.389120310544968,-0.921186804771423,0.0686725899577141,-0.344746232032776 ,-0.936180591583252,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.079964205622673,0.0645997598767281 ,-0.994702279567719,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.394706159830093,-0.349102348089218 ,-0.84990268945694,0.111387610435486,-0.211319342255592,-0.9710493683815,0.111387610435486,-0.211319342255592 ,-0.9710493683815,0.394706159830093,-0.349102348089218,-0.84990268945694,0.544504523277283,-0.49831086397171 ,-0.674685955047607,0.223528057336807,-0.361992210149765,-0.904984474182129,0.641741633415222,-0.441758394241333 ,-0.626910865306854,0.340316504240036,-0.448403626680374,-0.826510012149811,0.316583722829819,-0.383378833532333 ,-0.867637872695923,0.631867706775665,-0.394274353981018,-0.66730123758316,0.641741633415222,-0.441758394241333 ,-0.626910865306854,0.599293649196625,-0.39963087439537,-0.693644165992737,0.365317970514297,-0.409484475851059 ,-0.835981607437134,0.340316504240036,-0.448403626680374,-0.826510012149811,0.631867706775665,-0.394274353981018 ,-0.66730123758316,0.316583722829819,-0.383378833532333,-0.867637872695923,0.223528057336807,-0.361992210149765 ,-0.904984474182129,0.544504523277283,-0.49831086397171,-0.674685955047607,-0.0851698592305183,-0.236632868647575 ,-0.967858970165253,0.223528057336807,-0.361992210149765,-0.904984474182129,0.316583722829819,-0.383378833532333 ,-0.867637872695923,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.19136768579483,-0.0293898787349463 ,0.981078326702118,0.169032081961632,0.119583055377007,0.978329241275787,0.0116106020286679,0.109513640403748 ,0.993917465209961,-0.0284342020750046,0.0239462200552225,0.999308824539185,-0.0938338041305542,0.0678655132651329 ,0.993272125720978,0.206305459141731,0.0686478838324547,0.976076602935791,0.213752746582031,0.00495887640863657 ,0.976875185966492,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.233477383852005,0.295218259096146 ,0.926463425159454,0.206305459141731,0.0686478838324547,0.976076602935791,-0.0938338041305542,0.0678655132651329 ,0.993272125720978,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0116670094430447,0.00425092596560717 ,0.999922931194305,-0.0935027524828911,0.0115412008017302,0.995552122592926,-0.0284342020750046,0.0239462200552225 ,0.999308824539185,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0935027524828911,0.0115412008017302 ,0.995552122592926,0.213752746582031,0.00495887640863657,0.976875185966492,0.19136768579483,-0.0293898787349463 ,0.981078326702118,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.890053927898407,-0.0586380586028099 ,0.452068090438843,0.929404556751251,-0.130073204636574,0.345381230115891,0.957330107688904,-0.260764896869659 ,0.124582171440125,0.934587121009827,-0.0746875330805779,0.347805470228195,0.534165501594543,-0.113752603530884 ,0.837691783905029,0.486142605543137,0.105355285108089,0.867505431175232,0.831483364105225,0.0368483774363995 ,0.554326236248016,0.859270870685577,-0.205668747425079,0.468352407217026,0.486142605543137,0.105355285108089 ,0.867505431175232,0.534165501594543,-0.113752603530884,0.837691783905029,0.307560920715332,-0.091851145029068 ,0.947084844112396,0.2811399102211,0.126565098762512,0.951284229755402,0.169032081961632,0.119583055377007,0.978329241275787 ,0.2811399102211,0.126565098762512,0.951284229755402,0.307560920715332,-0.091851145029068,0.947084844112396,0.171966776251793 ,-0.0650009214878082,0.982955873012543,0.954777777194977,-0.0263348873704672,0.296151697635651,0.859270870685577 ,-0.205668747425079,0.468352407217026,0.831483364105225,0.0368483774363995,0.554326236248016,0.967678904533386 ,-0.0477387942373753,0.247625812888145,0.926999032497406,-0.273295104503632,0.256870836019516,0.799426317214966 ,-0.355103880167007,0.484581023454666,0.888165593147278,-0.00891786906868219,0.459437042474747,0.934587121009827 ,-0.0746875330805779,0.347805470228195,0.929404556751251,-0.130073204636574,0.345381230115891,0.964883267879486 ,-0.257389277219772,0.0524501986801624,0.898464798927307,-0.377257645130157,-0.224583357572556,0.957330107688904 ,-0.260764896869659,0.124582171440125,0.964883267879486,-0.257389277219772,0.0524501986801624,0.963335692882538 ,-0.129456236958504,-0.235001027584076,0.778241097927094,-0.324259251356125,-0.53777015209198,0.898464798927307 ,-0.377257645130157,-0.224583357572556,0.890053927898407,-0.0586380586028099,0.452068090438843,0.967678904533386 ,-0.0477387942373753,0.247625812888145,0.964077115058899,-0.108696304261684,0.242364108562469,0.929404556751251 ,-0.130073204636574,0.345381230115891,0.789399027824402,-0.501962423324585,0.353387653827667,0.954777777194977 ,-0.0263348873704672,0.296151697635651,0.888165593147278,-0.00891786906868219,0.459437042474747,0.799426317214966 ,-0.355103880167007,0.484581023454666,0.929404556751251,-0.130073204636574,0.345381230115891,0.964077115058899 ,-0.108696304261684,0.242364108562469,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964883267879486 ,-0.257389277219772,0.0524501986801624,-0.10020349919796,0.182739198207855,0.978041768074036,-0.0824126973748207 ,0.271421998739243,0.958925545215607,0.274746268987656,0.549388289451599,0.789105176925659,0.183646157383919 ,0.213717266917229,0.959478497505188,0.183646157383919,0.213717266917229,0.959478497505188,0.274746268987656 ,0.549388289451599,0.789105176925659,0.659283638000488,0.56208461523056,0.499405652284622,0.659731268882751,0.252948880195618 ,0.70765209197998,0.891434013843536,0.447212874889374,-0.0731168016791344,0.98511666059494,-0.171194240450859 ,-0.0154188685119152,0.889242053031921,-0.13137923181057,0.438164442777634,0.648516714572906,0.651950538158417 ,0.392920613288879,0.299544423818588,0.682939231395721,0.666233539581299,0.325509399175644,0.684422254562378 ,0.652387738227844,0.31501841545105,0.615055680274963,0.722820818424225,0.273056983947754,0.564899086952209,0.778671264648438 ,0.438032209873199,0.893748044967651,0.0966554135084152,0.384984284639359,0.917665719985962,0.0983701795339584 ,0.325509399175644,0.684422254562378,0.652387738227844,0.299544423818588,0.682939231395721,0.666233539581299 ,0.367568165063858,0.757281005382538,-0.539832472801209,0.148073747754097,0.745845675468445,-0.649452328681946 ,0.384984284639359,0.917665719985962,0.0983701795339584,0.438032209873199,0.893748044967651,0.0966554135084152 ,0.0682389214634895,0.656387150287628,0.751331746578217,0.0630034655332565,0.605371952056885,0.793445229530334 ,-0.103646658360958,0.632546961307526,0.767555713653564,0.0415897369384766,0.750063896179199,0.660056412220001 ,-0.103646658360958,0.632546961307526,0.767555713653564,0.198797062039375,0.642942130565643,0.739665627479553 ,0.250419557094574,0.807709574699402,0.533755779266357,0.0415897369384766,0.750063896179199,0.660056412220001 ,-0.0329985395073891,0.983319759368896,0.178866878151894,0.105207018554211,0.966200411319733,0.235347032546997 ,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.0161609761416912,0.992576837539673,-0.120540797710419 ,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0161609761416912,0.992576837539673,-0.120540797710419 ,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.00971746817231178,0.864930868148804,-0.501796960830688 ,-0.335044384002686,0.0369866825640202,-0.941476106643677,-0.00605733366683126,-0.0303982496261597,-0.999519467353821 ,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.187019199132919,0.292121440172195,-0.937917292118073 ,0.0385239869356155,0.185332536697388,-0.981920421123505,0.0810841843485832,0.166241332888603,-0.982745766639709 ,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0859579145908356,0.475804299116135,-0.875340759754181 ,0.500678837299347,-0.355485200881958,-0.789272427558899,0.587996542453766,-0.370855212211609,-0.718836843967438 ,0.550657391548157,0.552472710609436,-0.625739872455597,0.454949915409088,0.569741904735565,-0.6844083070755 ,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.042865764349699,0.703626394271851,0.709275960922241 ,0.00949578825384378,0.0594539344310761,0.998185873031616,0.00678820535540581,0.00935708172619343,0.999933183193207 ,0.042865764349699,0.703626394271851,0.709275960922241,0.404132395982742,0.670274078845978,0.622422397136688 ,0.233477383852005,0.295218259096146,0.926463425159454,0.00949578825384378,0.0594539344310761,0.998185873031616 ,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.00971746817231178,0.864930868148804,-0.501796960830688 ,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.0859579145908356,0.475804299116135,-0.875340759754181 ,0.0859579145908356,0.475804299116135,-0.875340759754181,-0.0591709204018116,0.578005433082581,-0.813884854316711 ,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505 ,0.85130912065506,-0.28415909409523,-0.441051483154297,0.751560986042023,-0.51889967918396,-0.407307237386703 ,0.926999032497406,-0.273295104503632,0.256870836019516,0.934587121009827,-0.0746875330805779,0.347805470228195 ,0.98869800567627,0.0949656590819359,0.116007700562477,0.997147977352142,0.063211515545845,-0.0412334688007832 ,0.81435614824295,-0.302029103040695,-0.495582967996597,0.95084285736084,-0.116525217890739,-0.286914199590683 ,0.95027631521225,0.169706359505653,0.261102795600891,0.997147977352142,0.063211515545845,-0.0412334688007832 ,0.961808860301971,0.241085827350616,0.129620164632797,0.88108503818512,0.403870642185211,0.246125221252441,0.932883560657501 ,0.00894892401993275,-0.36006686091423,0.88943737745285,-0.310296326875687,-0.335585117340088,0.933888673782349 ,-0.271616876125336,-0.232542887330055,0.97384238243103,-0.111237548291683,-0.198134258389473,0.958027005195618 ,0.285412758588791,-0.0269038528203964,0.930458664894104,-0.278987765312195,0.237513080239296,0.932736575603485 ,0.169303506612778,0.31833752989769,0.883106589317322,0.432061642408371,0.182881161570549,0.659731268882751,0.252948880195618 ,0.70765209197998,0.853261947631836,-0.0267263799905777,0.520797252655029,0.547626852989197,-0.143319010734558 ,0.824356973171234,0.183646157383919,0.213717266917229,0.959478497505188,0.434262931346893,0.0580337457358837 ,0.898914754390717,0.636708438396454,0.429240256547928,0.640589714050293,0.4572993516922,0.58682519197464,0.668216645717621 ,0.291518121957779,0.153290659189224,0.944202899932861,0.547626852989197,-0.143319010734558,0.824356973171234 ,0.629741132259369,-0.543165504932404,0.555335402488709,0.369285374879837,-0.387989014387131,0.844448208808899 ,0.344554513692856,-0.157719656825066,0.925422430038452,0.751155555248261,0.608797609806061,0.255207538604736 ,0.573260188102722,0.776374936103821,0.261944144964218,0.4572993516922,0.58682519197464,0.668216645717621,0.636708438396454 ,0.429240256547928,0.640589714050293,0.930458664894104,-0.278987765312195,0.237513080239296,0.958027005195618 ,0.285412758588791,-0.0269038528203964,0.983769476413727,0.170430228114128,-0.0561354644596577,0.97384238243103 ,-0.111237548291683,-0.198134258389473,0.88108503818512,0.403870642185211,0.246125221252441,0.883106589317322 ,0.432061642408371,0.182881161570549,0.932736575603485,0.169303506612778,0.31833752989769,0.95027631521225,0.169706359505653 ,0.261102795600891,0.415907889604568,-0.581008851528168,-0.699606537818909,0.81435614824295,-0.302029103040695 ,-0.495582967996597,0.997147977352142,0.063211515545845,-0.0412334688007832,0.751560986042023,-0.51889967918396 ,-0.407307237386703,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.523119628429413,-0.252469837665558 ,-0.814005434513092,0.81435614824295,-0.302029103040695,-0.495582967996597,0.415907889604568,-0.581008851528168 ,-0.699606537818909,-0.362747877836227,-0.08218814432621,-0.928255915641785,0.315108418464661,-0.203955173492432 ,-0.926881313323975,0.523119628429413,-0.252469837665558,-0.814005434513092,-0.0618164576590061,-0.231827840209007 ,-0.970790684223175,0.799426317214966,-0.355103880167007,0.484581023454666,0.926999032497406,-0.273295104503632 ,0.256870836019516,0.95027631521225,0.169706359505653,0.261102795600891,0.932736575603485,0.169303506612778,0.31833752989769 ,0.878222644329071,-0.435990631580353,0.196563258767128,0.853261947631836,-0.0267263799905777,0.520797252655029 ,0.993755042552948,-0.10124122351408,0.0469168499112129,0.88943737745285,-0.310296326875687,-0.335585117340088 ,0.369285374879837,-0.387989014387131,0.844448208808899,0.434262931346893,0.0580337457358837,0.898914754390717 ,0.291518121957779,0.153290659189224,0.944202899932861,0.344554513692856,-0.157719656825066,0.925422430038452 ,0.183646157383919,0.213717266917229,0.959478497505188,0.547626852989197,-0.143319010734558,0.824356973171234 ,0.344554513692856,-0.157719656825066,0.925422430038452,-0.10020349919796,0.182739198207855,0.978041768074036 ,0.763394236564636,0.627238869667053,-0.154274553060532,0.51531445980072,0.84699958562851,-0.130547553300858 ,0.573260188102722,0.776374936103821,0.261944144964218,0.751155555248261,0.608797609806061,0.255207538604736 ,0.631870806217194,0.478121697902679,-0.61003190279007,0.352353453636169,0.709057629108429,-0.610806286334991 ,0.51531445980072,0.84699958562851,-0.130547553300858,0.763394236564636,0.627238869667053,-0.154274553060532 ,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.206161767244339,-0.0580398291349411,-0.976795136928558 ,0.315108418464661,-0.203955173492432,-0.926881313323975,-0.362747877836227,-0.08218814432621,-0.928255915641785 ,-0.187019199132919,0.292121440172195,-0.937917292118073,0.198803246021271,0.240951344370842,-0.949957728385925 ,0.206161767244339,-0.0580398291349411,-0.976795136928558,-0.335044384002686,0.0369866825640202,-0.941476106643677 ,0.493055760860443,0.288357526063919,-0.820820271968842,0.235302045941353,0.454530268907547,-0.859089732170105 ,0.352353453636169,0.709057629108429,-0.610806286334991,0.631870806217194,0.478121697902679,-0.61003190279007 ,0.491784423589706,0.100257873535156,-0.864925682544708,0.198803246021271,0.240951344370842,-0.949957728385925 ,0.235302045941353,0.454530268907547,-0.859089732170105,0.493055760860443,0.288357526063919,-0.820820271968842 ,0.629741132259369,-0.543165504932404,0.555335402488709,0.547626852989197,-0.143319010734558,0.824356973171234 ,0.853261947631836,-0.0267263799905777,0.520797252655029,0.878222644329071,-0.435990631580353,0.196563258767128 ,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0346120446920395,0.37646210193634,0.9257852435112,0.291518121957779 ,0.153290659189224,0.944202899932861,0.4572993516922,0.58682519197464,0.668216645717621,0.0895038321614265,0.749099910259247 ,0.65638279914856,0.4572993516922,0.58682519197464,0.668216645717621,0.573260188102722,0.776374936103821,0.261944144964218 ,0.105207018554211,0.966200411319733,0.235347032546997,0.344554513692856,-0.157719656825066,0.925422430038452 ,0.291518121957779,0.153290659189224,0.944202899932861,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.10020349919796 ,0.182739198207855,0.978041768074036,0.105207018554211,0.966200411319733,0.235347032546997,0.573260188102722 ,0.776374936103821,0.261944144964218,0.51531445980072,0.84699958562851,-0.130547553300858,0.0476450361311436 ,0.994988679885864,-0.0879064798355103,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.51531445980072 ,0.84699958562851,-0.130547553300858,0.352353453636169,0.709057629108429,-0.610806286334991,-0.00971746817231178 ,0.864930868148804,-0.501796960830688,0.594084918498993,-0.202006503939629,-0.778624713420868,0.206161767244339 ,-0.0580398291349411,-0.976795136928558,0.198803246021271,0.240951344370842,-0.949957728385925,0.491784423589706 ,0.100257873535156,-0.864925682544708,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.352353453636169 ,0.709057629108429,-0.610806286334991,0.235302045941353,0.454530268907547,-0.859089732170105,-0.0591709204018116 ,0.578005433082581,-0.813884854316711,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.235302045941353 ,0.454530268907547,-0.859089732170105,0.198803246021271,0.240951344370842,-0.949957728385925,-0.187019199132919 ,0.292121440172195,-0.937917292118073,0.834282159805298,-0.0577300190925598,0.548307001590729,0.993755042552948 ,-0.10124122351408,0.0469168499112129,0.853261947631836,-0.0267263799905777,0.520797252655029,0.659731268882751 ,0.252948880195618,0.70765209197998,0.834282159805298,-0.0577300190925598,0.548307001590729,0.858235716819763 ,-0.482136696577072,0.175999104976654,0.933888673782349,-0.271616876125336,-0.232542887330055,0.993755042552948 ,-0.10124122351408,0.0469168499112129,0.858235716819763,-0.482136696577072,0.175999104976654,0.727367699146271 ,-0.668511748313904,0.15501070022583,0.97384238243103,-0.111237548291683,-0.198134258389473,0.933888673782349 ,-0.271616876125336,-0.232542887330055,0.789399027824402,-0.501962423324585,0.353387653827667,0.930458664894104 ,-0.278987765312195,0.237513080239296,0.97384238243103,-0.111237548291683,-0.198134258389473,0.727367699146271 ,-0.668511748313904,0.15501070022583,0.751560986042023,-0.51889967918396,-0.407307237386703,0.997147977352142 ,0.063211515545845,-0.0412334688007832,0.95027631521225,0.169706359505653,0.261102795600891,0.926999032497406 ,-0.273295104503632,0.256870836019516,0.523119628429413,-0.252469837665558,-0.814005434513092,0.786963045597076 ,-0.207125172019005,-0.581195652484894,0.95084285736084,-0.116525217890739,-0.286914199590683,0.81435614824295 ,-0.302029103040695,-0.495582967996597,0.786963045597076,-0.207125172019005,-0.581195652484894,0.523119628429413 ,-0.252469837665558,-0.814005434513092,0.315108418464661,-0.203955173492432,-0.926881313323975,0.708127498626709 ,-0.297497063875198,-0.640352189540863,0.708127498626709,-0.297497063875198,-0.640352189540863,0.315108418464661 ,-0.203955173492432,-0.926881313323975,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.594084918498993 ,-0.202006503939629,-0.778624713420868,0.901673018932343,-0.243753165006638,-0.357169687747955,0.911918580532074 ,-0.233281582593918,-0.33761540055275,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.891434013843536 ,0.447212874889374,-0.0731168016791344,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0261680763214827 ,0.194867521524429,-0.980480432510376,0.181251630187035,0.380190223455429,-0.906974792480469,0.0293854102492332 ,0.448770761489868,-0.893163621425629,0.0293854102492332,0.448770761489868,-0.893163621425629,0.181251630187035 ,0.380190223455429,-0.906974792480469,0.316321402788162,0.603275775909424,-0.732119560241699,-0.0235754959285259 ,0.833040595054626,-0.552709341049194,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0284342020750046 ,0.0239462200552225,0.999308824539185,0.0116106020286679,0.109513640403748,0.993917465209961,0.025994973257184 ,0.100541830062866,0.99459320306778,0.051253791898489,0.460094302892685,0.886389493942261,-0.169371664524078 ,0.433557659387589,0.88506555557251,-0.103646658360958,0.632546961307526,0.767555713653564,0.0630034655332565 ,0.605371952056885,0.793445229530334,0.400240421295166,-0.835451424121857,-0.376601278781891,0.961808860301971 ,0.241085827350616,0.129620164632797,0.98869800567627,0.0949656590819359,0.116007700562477,0.21975277364254,-0.661429107189178 ,-0.717091500759125,0.21975277364254,-0.661429107189178,-0.717091500759125,0.98869800567627,0.0949656590819359 ,0.116007700562477,0.95084285736084,-0.116525217890739,-0.286914199590683,0.379243552684784,-0.345731914043427 ,-0.858279526233673,0.983769476413727,0.170430228114128,-0.0561354644596577,0.600287616252899,-0.73423707485199 ,0.317097216844559,0.900146186351776,-0.397185921669006,-0.178830027580261,0.932883560657501,0.00894892401993275 ,-0.36006686091423,0.883106589317322,0.432061642408371,0.182881161570549,0.971705734729767,0.10692148655653,0.21060810983181 ,0.998818516731262,0.0184048507362604,0.0449758432805538,0.958027005195618,0.285412758588791,-0.0269038528203964 ,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0231866482645273,-0.662597954273224,0.748616278171539 ,0.369285374879837,-0.387989014387131,0.844448208808899,0.629741132259369,-0.543165504932404,0.555335402488709 ,0.232206523418427,-0.020738473162055,0.972445428371429,0.369285374879837,-0.387989014387131,0.844448208808899 ,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.201975762844086,-0.339365005493164,0.918714940547943 ,0.636708438396454,0.429240256547928,0.640589714050293,0.468301683664322,0.50049239397049,0.728148937225342,0.654108226299286 ,0.695117294788361,0.298252135515213,0.751155555248261,0.608797609806061,0.255207538604736,0.201975762844086 ,-0.339365005493164,0.918714940547943,-0.0231866482645273,-0.662597954273224,0.748616278171539,-0.0981862172484398 ,-0.372313976287842,0.922898590564728,0.296016186475754,0.207150265574455,0.932450115680695,0.410484403371811 ,-0.832323789596558,0.372477740049362,0.88943737745285,-0.310296326875687,-0.335585117340088,0.900146186351776 ,-0.397185921669006,-0.178830027580261,0.600287616252899,-0.73423707485199,0.317097216844559,-0.75411182641983 ,-0.632700145244598,0.176084950566292,0.245737388730049,-0.81788432598114,0.52026754617691,0.280021280050278 ,-0.723065078258514,0.631478428840637,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.453907251358032 ,-0.0319928824901581,0.890474379062653,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.0981862172484398 ,-0.372313976287842,0.922898590564728,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.446602612733841 ,-0.102232590317726,-0.888872683048248,-0.80677717924118,-0.297363102436066,-0.510573983192444,0.21975277364254 ,-0.661429107189178,-0.717091500759125,0.379243552684784,-0.345731914043427,-0.858279526233673,-0.418209999799728 ,-0.452997386455536,0.787333309650421,0.600287616252899,-0.73423707485199,0.317097216844559,-0.755255520343781 ,-0.470546215772629,0.456262409687042,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.80677717924118 ,-0.297363102436066,-0.510573983192444,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.432995676994324 ,-0.138490244746208,-0.890693664550781,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.80677717924118 ,-0.297363102436066,-0.510573983192444,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.760693609714508 ,-0.63129860162735,-0.151021003723145,0.400240421295166,-0.835451424121857,-0.376601278781891,0.245737388730049 ,-0.81788432598114,0.52026754617691,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.755255520343781 ,-0.470546215772629,0.456262409687042,0.600287616252899,-0.73423707485199,0.317097216844559,0.245737388730049 ,-0.81788432598114,0.52026754617691,0.600287616252899,-0.73423707485199,0.317097216844559,0.998818516731262,0.0184048507362604 ,0.0449758432805538,0.971705734729767,0.10692148655653,0.21060810983181,0.883106589317322,0.432061642408371,0.182881161570549 ,0.88108503818512,0.403870642185211,0.246125221252441,0.963078618049622,0.14069077372551,0.229533597826958,0.971705734729767 ,0.10692148655653,0.21060810983181,0.280021280050278,-0.723065078258514,0.631478428840637,0.245737388730049,-0.81788432598114 ,0.52026754617691,0.971705734729767,0.10692148655653,0.21060810983181,0.963078618049622,0.14069077372551,0.229533597826958 ,-0.74693363904953,-0.662334084510803,0.0583409406244755,0.280021280050278,-0.723065078258514,0.631478428840637 ,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.760693609714508,-0.63129860162735,-0.151021003723145 ,0.468301683664322,0.50049239397049,0.728148937225342,0.619435131549835,0.287277430295944,0.730596840381622,0.821134924888611 ,0.497984498739243,0.278834909200668,0.654108226299286,0.695117294788361,0.298252135515213,0.468301683664322 ,0.50049239397049,0.728148937225342,0.434262931346893,0.0580337457358837,0.898914754390717,0.232206523418427 ,-0.020738473162055,0.972445428371429,0.619435131549835,0.287277430295944,0.730596840381622,0.201975762844086 ,-0.339365005493164,0.918714940547943,0.663583517074585,0.109266623854637,0.740079581737518,0.619435131549835 ,0.287277430295944,0.730596840381622,0.232206523418427,-0.020738473162055,0.972445428371429,0.814588725566864 ,0.377569645643234,-0.440325260162354,0.711495399475098,0.476572155952454,-0.516384780406952,0.814492523670197 ,0.578000962734222,-0.0501683428883553,0.904258787631989,0.426958590745926,0.00473785446956754,0.751155555248261 ,0.608797609806061,0.255207538604736,0.654108226299286,0.695117294788361,0.298252135515213,0.654076218605042 ,0.750132322311401,-0.097395233809948,0.763394236564636,0.627238869667053,-0.154274553060532,0.711495399475098 ,0.476572155952454,-0.516384780406952,0.814588725566864,0.377569645643234,-0.440325260162354,0.594970345497131 ,0.240510985255241,-0.766918957233429,0.552935898303986,0.244290605187416,-0.796607792377472,0.552935898303986 ,0.244290605187416,-0.796607792377472,0.365138918161392,0.402016133069992,-0.83967649936676,0.52654629945755 ,0.6285120844841,-0.572469711303711,0.711495399475098,0.476572155952454,-0.516384780406952,0.457004487514496 ,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.379243552684784 ,-0.345731914043427,-0.858279526233673,0.367359757423401,-0.19918592274189,-0.908499717712402,0.619435131549835 ,0.287277430295944,0.730596840381622,0.663583517074585,0.109266623854637,0.740079581737518,0.889924466609955 ,0.362089574337006,0.277354598045349,0.821134924888611,0.497984498739243,0.278834909200668,-0.43317574262619 ,-0.754240989685059,-0.493436217308044,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.563665211200714 ,-0.803098201751709,-0.19317039847374,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.590254783630371 ,-0.794654071331024,0.141859948635101,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.659241914749146 ,-0.751696407794952,-0.0187781285494566,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.118136525154114 ,-0.743892669677734,0.65777462720871,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.417856335639954 ,-0.873386740684509,0.250183314085007,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.643522143363953 ,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.385445386171341 ,-0.256175637245178,0.886456966400146,-0.677714884281158,-0.638366103172302,0.364953815937042,0.530508995056152 ,-0.19520378112793,0.824897408485413,0.452383905649185,-0.0666286796331406,0.889330863952637,-0.178765639662743 ,-0.712745010852814,0.678260564804077,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.167113959789276 ,0.136682227253914,0.976417362689972,0.421373724937439,0.10162215679884,0.901175439357758,0.170562490820885,-0.154649093747139 ,0.97313517332077,-0.400625139474869,-0.141950860619545,0.905179262161255,0.0310389213263988,0.339698702096939 ,0.940021991729736,0.487773865461349,0.149537533521652,0.860066950321198,0.421373724937439,0.10162215679884,0.901175439357758 ,-0.167113959789276,0.136682227253914,0.976417362689972,0.256946176290512,-0.0665651634335518,-0.964130580425262 ,0.273258209228516,-0.188740387558937,-0.943242788314819,0.0101248463615775,-0.493800461292267,-0.869516313076019 ,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019 ,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.442572265863419,-0.578949928283691,-0.684796929359436 ,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.685480773448944,-0.689756214618683,-0.233136162161827 ,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.359539449214935,-0.751623332500458,-0.552986204624176 ,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.400625139474869,-0.141950860619545,0.905179262161255 ,0.170562490820885,-0.154649093747139,0.97313517332077,-0.394339233636856,-0.615044772624969,0.682800531387329 ,-0.708291888237,-0.455330967903137,0.539440810680389,0.713517069816589,0.700637459754944,-0.000777124951127917 ,0.675231993198395,0.699040055274963,-0.235382169485092,0.372105628252029,0.872971594333649,0.315369695425034 ,0.20168174803257,0.693581879138947,0.691569745540619,-0.710149168968201,-0.699236750602722,-0.0821955949068069 ,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.808354198932648,-0.575751066207886,0.122776761651039 ,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.179948955774307,0.305097907781601,0.935165047645569 ,-0.167113959789276,0.136682227253914,0.976417362689972,-0.400625139474869,-0.141950860619545,0.905179262161255 ,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.179948955774307,0.305097907781601,0.935165047645569 ,0.181594237685204,0.605878710746765,0.774554371833801,0.467824161052704,0.695085167884827,0.545891225337982 ,-0.0883399024605751,0.440414160490036,0.89343798160553,0.727736592292786,0.600477695465088,0.331400126218796 ,0.713517069816589,0.700637459754944,-0.000777124951127917,0.20168174803257,0.693581879138947,0.691569745540619 ,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.361584514379501 ,0.504137456417084,0.78428441286087,-0.214763179421425,0.201751604676247,0.955600917339325,-0.188908159732819 ,-0.0821763500571251,0.978550314903259,0.70020192861557,0.436750024557114,0.564771354198456,0.727736592292786 ,0.600477695465088,0.331400126218796,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291 ,0.846654772758484,0.633797287940979,0.754054367542267,-0.172345638275146,0.755062222480774,0.655636370182037 ,0.00468770461156964,0.704874277114868,0.496488779783249,-0.506607472896576,0.571536600589752,0.54747611284256 ,-0.611241221427917,0.70020192861557,0.436750024557114,0.564771354198456,0.587356448173523,0.37003019452095,0.719784736633301 ,0.420910388231277,0.458904504776001,0.782458364963531,0.598974168300629,0.55623596906662,0.576048195362091,0.713795185089111 ,0.560950756072998,0.419321686029434,0.758696973323822,0.616848468780518,0.209467962384224,0.621278166770935 ,0.634226977825165,0.460184365510941,0.626114845275879,0.552237331867218,0.550467252731323,0.376012861728668 ,-0.0599821247160435,-0.924670994281769,0.318814963102341,0.117576964199543,-0.94049596786499,0.626918852329254 ,0.478092342615128,-0.615142643451691,0.752733170986176,0.386990457773209,-0.532570421695709,-0.647555708885193 ,-0.75584751367569,0.0967788398265839,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.667661368846893 ,-0.595950901508331,0.446173489093781,-0.699702382087708,-0.709872841835022,0.080604575574398,0.0771664902567863 ,0.0724747255444527,0.994380593299866,-0.11764945089817,0.119960054755211,0.985783040523529,0.420910388231277 ,0.458904504776001,0.782458364963531,0.587356448173523,0.37003019452095,0.719784736633301,0.632134556770325,0.566209673881531 ,0.52897310256958,0.713795185089111,0.560950756072998,0.419321686029434,0.626114845275879,0.552237331867218,0.550467252731323 ,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435 ,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.752733170986176,0.386990457773209,-0.532570421695709 ,0.833262026309967,0.342827558517456,-0.433755338191986,-0.16471865773201,-0.673515558242798,-0.720586240291595 ,0.25180572271347,-0.338099181652069,-0.906798124313354,0.204112648963928,-0.444034606218338,-0.872451305389404 ,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.508835017681122,-0.825367450714111,-0.244653806090355 ,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.592759191989899,-0.802146971225739,-0.0720886588096619 ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.649092614650726,-0.759154498577118,-0.0486132241785526 ,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.597946286201477,-0.554786086082459,0.578508973121643 ,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.471450448036194,-0.245001286268234,0.847176969051361 ,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.597946286201477,-0.554786086082459,0.578508973121643 ,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.173014774918556,0.150903835892677,0.973290264606476 ,0.284897238016129,0.421358793973923,0.860982179641724,0.315255045890808,0.464517712593079,0.827549159526825 ,-0.24175851047039,0.0892980098724365,0.966218769550323,0.575458467006683,0.549589157104492,0.605639576911926 ,0.5494784116745,0.570390999317169,0.610514163970947,0.632134556770325,0.566209673881531,0.52897310256958,0.611269116401672 ,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.833262026309967 ,0.342827558517456,-0.433755338191986,0.827770292758942,0.364258110523224,-0.426746338605881,0.39981883764267 ,-0.144185781478882,-0.905182480812073,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.123677581548691 ,-0.415960758924484,-0.900933146476746,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.302494555711746 ,-0.645085394382477,-0.701685011386871,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.645101189613342 ,-0.736709177494049,-0.202741235494614,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.476104736328125 ,-0.838325619697571,-0.265583217144012,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.583746492862701 ,-0.193907052278519,0.788441598415375,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.471450448036194 ,-0.245001286268234,0.847176969051361,0.553665459156036,0.525177180767059,-0.646253407001495,0.626918852329254 ,0.478092342615128,-0.615142643451691,0.318814963102341,0.117576964199543,-0.94049596786499,0.330627292394638 ,0.250829428434372,-0.909818768501282,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.350332707166672 ,-0.557033061981201,-0.752981543540955,0.152081519365311,-0.148781135678291,-0.977105617523193,0.25180572271347 ,-0.338099181652069,-0.906798124313354,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.37796476483345 ,-0.602357983589172,-0.703070044517517,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.152081519365311 ,-0.148781135678291,-0.977105617523193,-0.173014774918556,0.150903835892677,0.973290264606476,-0.415114998817444 ,-0.0299451891332865,0.909276008605957,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.190007403492928 ,0.150082901120186,0.970243453979492,0.170904099941254,-0.332066059112549,-0.9276442527771,0.129470959305763 ,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.302494555711746 ,-0.645085394382477,-0.701685011386871,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.576924562454224 ,-0.750419557094574,-0.322534501552582,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.843225598335266 ,-0.434366077184677,-0.316696554422379,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.680057168006897 ,-0.347443431615829,0.645604610443115,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.622686505317688 ,-0.240481927990913,0.744600534439087,0.5100998878479,0.534974932670593,0.673498272895813,0.5494784116745,0.570390999317169 ,0.610514163970947,0.575458467006683,0.549589157104492,0.605639576911926,0.490533232688904,0.463574707508087 ,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.284897238016129,0.421358793973923,0.860982179641724 ,-0.173014774918556,0.150903835892677,0.973290264606476,-0.190007403492928,0.150082901120186,0.970243453979492 ,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.428903788328171,-0.809928238391876,-0.400072306394577 ,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.628000319004059,-0.748511612415314,-0.212945908308029 ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.374727010726929,-0.451056748628616,-0.810016989707947 ,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.641323387622833,-0.735230326652527,-0.219409838318825 ,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.663558781147003,-0.701492488384247,-0.259996235370636 ,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.37796476483345,-0.602357983589172,-0.703070044517517 ,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.508835017681122,-0.825367450714111,-0.244653806090355 ,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.350332707166672,-0.557033061981201,-0.752981543540955 ,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.508835017681122,-0.825367450714111,-0.244653806090355 ,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.190189674496651,-0.685347437858582,-0.702941536903381 ,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.407645702362061,-0.312832653522491,-0.857881546020508 ,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.495001792907715,-0.723142206668854,-0.481703817844391 ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.685480773448944,-0.689756214618683,-0.233136162161827 ,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.374727010726929,-0.451056748628616,-0.810016989707947 ,0.524966239929199,0.447477400302887,0.72399890422821,0.154613956809044,0.104744024574757,0.982406854629517,0.452383905649185 ,-0.0666286796331406,0.889330863952637,0.64373791217804,0.242922231554985,0.725665390491486,0.078959085047245 ,0.121888175606728,0.989398181438446,0.0298695340752602,0.230346247553825,0.972650170326233,-0.385445386171341 ,-0.256175637245178,0.886456966400146,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.588989198207855 ,-0.775294840335846,0.228056281805038,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.178765639662743 ,-0.712745010852814,0.678260564804077,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.396454155445099 ,-0.508855581283569,0.764127016067505,-0.178765639662743,-0.712745010852814,0.678260564804077,0.452383905649185 ,-0.0666286796331406,0.889330863952637,0.154613956809044,0.104744024574757,0.982406854629517,-0.188908159732819 ,-0.0821763500571251,0.978550314903259,-0.281839609146118,-0.242576912045479,0.92829030752182,0.0771664902567863 ,0.0724747255444527,0.994380593299866,0.445416361093521,0.291170030832291,0.846654772758484,-0.428903788328171 ,-0.809928238391876,-0.400072306394577,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.534167528152466 ,-0.810541450977325,-0.240182310342789,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.428903788328171 ,-0.809928238391876,-0.400072306394577,-0.524412930011749,-0.76793509721756,-0.367786258459091,0.0934423208236694 ,-0.290181279182434,-0.952398717403412,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.249904245138168 ,-0.0394469499588013,-0.967466652393341,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.107540838420391 ,-0.360320240259171,-0.926609039306641,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.0273940563201904 ,-0.397710710763931,-0.917101860046387,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.256946176290512 ,-0.0665651634335518,-0.964130580425262,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.457292228937149 ,0.637990713119507,0.619557559490204,0.600133121013641,0.610116124153137,0.517299294471741,0.543609440326691 ,0.5921830534935,0.594817638397217,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438 ,0.511303961277008,0.529006600379944,0.562984585762024,0.63498067855835,0.543609440326691,0.5921830534935,0.594817638397217 ,0.315534800291061,0.608373045921326,0.728230714797974,-0.673542857170105,-0.664238333702087,0.324233591556549 ,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.564210891723633,-0.825607478618622,-0.0061880461871624 ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.755765080451965,-0.64697390794754,-0.101212374866009 ,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.727918982505798,-0.682847082614899,-0.0620787553489208 ,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.799912631511688,-0.600115418434143,-0.00112808460835367 ,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.721217155456543,-0.691242814064026,-0.0450457334518433 ,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.508835017681122,-0.825367450714111,-0.244653806090355 ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.721217155456543,-0.691242814064026,-0.0450457334518433 ,-0.663558781147003,-0.701492488384247,-0.259996235370636,0.0456269159913063,0.337521076202393,-0.940211534500122 ,0.400274157524109,0.667701542377472,-0.627658545970917,0.577099621295929,0.499205440282822,-0.646335780620575 ,0.220365136861801,0.161491006612778,-0.961956262588501,0.669646203517914,0.237006261944771,-0.703847944736481 ,0.523088097572327,0.0727911219000816,-0.849164426326752,0.494590252637863,0.0603402629494667,-0.867029130458832 ,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.523088097572327,0.0727911219000816,-0.849164426326752 ,0.669646203517914,0.237006261944771,-0.703847944736481,0.652852237224579,0.393031805753708,-0.647541463375092 ,0.509894669055939,0.256654620170593,-0.821057736873627,-0.43317574262619,-0.754240989685059,-0.493436217308044 ,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019 ,-0.359539449214935,-0.751623332500458,-0.552986204624176,0.249904245138168,-0.0394469499588013,-0.967466652393341 ,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209 ,0.351930469274521,0.00348040298558772,-0.936019718647003,0.444862186908722,0.181827828288078,-0.876947104930878 ,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.365171790122986,-0.00518579035997391,-0.930925726890564 ,0.494590252637863,0.0603402629494667,-0.867029130458832,0.509894669055939,0.256654620170593,-0.821057736873627 ,0.652852237224579,0.393031805753708,-0.647541463375092,0.670561790466309,0.450112581253052,-0.589699506759644 ,0.537330985069275,0.244881898164749,-0.807036757469177,0.652852237224579,0.393031805753708,-0.647541463375092 ,0.669646203517914,0.237006261944771,-0.703847944736481,0.781165838241577,0.623325526714325,0.0352878011763096 ,0.716162204742432,0.693212687969208,0.0810423269867897,0.771716117858887,0.588264167308807,0.241659909486771 ,0.721818268299103,0.577692627906799,0.381116211414337,0.8706374168396,0.436955988407135,-0.225964426994324,0.833557188510895 ,0.43537425994873,-0.340046495199203,0.684045433998108,0.607819020748138,0.403283834457397,0.839346766471863 ,0.531246542930603,-0.115212969481945,0.8706374168396,0.436955988407135,-0.225964426994324,0.721818268299103 ,0.577692627906799,0.381116211414337,0.170904099941254,-0.332066059112549,-0.9276442527771,0.123677581548691 ,-0.415960758924484,-0.900933146476746,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764 ,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.827770292758942 ,0.364258110523224,-0.426746338605881,0.833576500415802,0.26908865571022,-0.482432901859283,0.474989861249924 ,-0.106995098292828,-0.873462498188019,0.340121984481812,0.0539852678775787,-0.938830494880676,0.293987482786179 ,-0.0222472082823515,-0.955550312995911,0.152081519365311,-0.148781135678291,-0.977105617523193,0.213511228561401 ,-0.0973462760448456,-0.972078502178192,0.214979261159897,-0.17779715359211,-0.96029794216156,0.213511228561401 ,-0.0973462760448456,-0.972078502178192,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.374727010726929 ,-0.451056748628616,-0.810016989707947,0.0273940563201904,-0.397710710763931,-0.917101860046387,-0.0263592731207609 ,-0.425665766000748,-0.904496490955353,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.428903788328171 ,-0.809928238391876,-0.400072306394577,0.078959085047245,0.121888175606728,0.989398181438446,0.591853797435761 ,0.480847299098969,0.646911799907684,0.522614181041718,0.594646036624908,0.610958755016327,0.0298695340752602 ,0.230346247553825,0.972650170326233,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.432995676994324 ,-0.138490244746208,-0.890693664550781,-0.286727339029312,-0.249588027596474,-0.924928784370422,-0.678066968917847 ,-0.616290330886841,-0.400513917207718,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.453907251358032 ,-0.0319928824901581,0.890474379062653,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.677714884281158 ,-0.638366103172302,0.364953815937042,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.760693609714508 ,-0.63129860162735,-0.151021003723145,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.678066968917847 ,-0.616290330886841,-0.400513917207718,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.75411182641983 ,-0.632700145244598,0.176084950566292,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.677714884281158 ,-0.638366103172302,0.364953815937042,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.453907251358032 ,-0.0319928824901581,0.890474379062653,-0.385445386171341,-0.256175637245178,0.886456966400146,0.0298695340752602 ,0.230346247553825,0.972650170326233,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.75411182641983 ,-0.632700145244598,0.176084950566292,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.689547598361969 ,-0.720895409584045,0.069526307284832,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.0456269159913063 ,0.337521076202393,-0.940211534500122,0.220365136861801,0.161491006612778,-0.961956262588501,-0.286727339029312 ,-0.249588027596474,-0.924928784370422,0.808014631271362,0.548655688762665,-0.214684262871742,0.814588725566864 ,0.377569645643234,-0.440325260162354,0.904258787631989,0.426958590745926,0.00473785446956754,0.976709187030792 ,0.208457589149475,-0.050838902592659,0.814588725566864,0.377569645643234,-0.440325260162354,0.808014631271362 ,0.548655688762665,-0.214684262871742,0.467050135135651,0.542557895183563,-0.698208510875702,0.594970345497131 ,0.240510985255241,-0.766918957233429,0.600133121013641,0.610116124153137,0.517299294471741,0.836146891117096 ,0.398915261030197,0.376463830471039,0.645030558109283,0.393106490373611,0.655288398265839,0.669920027256012 ,0.533662140369415,0.516151010990143,0.663583517074585,0.109266623854637,0.740079581737518,0.639394581317902 ,-0.0537512600421906,0.766997635364532,0.951489508152008,0.185274630784988,0.245644211769104,0.889924466609955 ,0.362089574337006,0.277354598045349,0.836146891117096,0.398915261030197,0.376463830471039,0.600133121013641 ,0.610116124153137,0.517299294471741,0.457292228937149,0.637990713119507,0.619557559490204,0.821033596992493 ,0.463092446327209,0.333840012550354,0.639394581317902,-0.0537512600421906,0.766997635364532,0.645030558109283 ,0.393106490373611,0.655288398265839,0.836146891117096,0.398915261030197,0.376463830471039,0.951489508152008 ,0.185274630784988,0.245644211769104,0.594970345497131,0.240510985255241,-0.766918957233429,0.467050135135651 ,0.542557895183563,-0.698208510875702,0.171164497733116,0.182280600070953,-0.968233704566956,0.457004487514496 ,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.467050135135651 ,0.542557895183563,-0.698208510875702,0.400274157524109,0.667701542377472,-0.627658545970917,0.0456269159913063 ,0.337521076202393,-0.940211534500122,-0.446602612733841,-0.102232590317726,-0.888872683048248,0.171164497733116 ,0.182280600070953,-0.968233704566956,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.432995676994324 ,-0.138490244746208,-0.890693664550781,0.663583517074585,0.109266623854637,0.740079581737518,0.201975762844086 ,-0.339365005493164,0.918714940547943,0.296016186475754,0.207150265574455,0.932450115680695,0.639394581317902 ,-0.0537512600421906,0.766997635364532,0.0298695340752602,0.230346247553825,0.972650170326233,0.522614181041718 ,0.594646036624908,0.610958755016327,0.296016186475754,0.207150265574455,0.932450115680695,-0.0173206701874733 ,0.471247583627701,0.881830871105194,0.400274157524109,0.667701542377472,-0.627658545970917,0.571531593799591 ,0.820161521434784,-0.026204576715827,0.712321758270264,0.700732469558716,-0.0396451056003571,0.577099621295929 ,0.499205440282822,-0.646335780620575,0.763394236564636,0.627238869667053,-0.154274553060532,0.654076218605042 ,0.750132322311401,-0.097395233809948,0.52654629945755,0.6285120844841,-0.572469711303711,0.631870806217194,0.478121697902679 ,-0.61003190279007,0.631870806217194,0.478121697902679,-0.61003190279007,0.52654629945755,0.6285120844841,-0.572469711303711 ,0.365138918161392,0.402016133069992,-0.83967649936676,0.493055760860443,0.288357526063919,-0.820820271968842 ,0.765193700790405,0.545681536197662,0.341628700494766,0.472492724657059,0.634560942649841,0.611623287200928 ,0.712321758270264,0.700732469558716,-0.0396451056003571,0.571531593799591,0.820161521434784,-0.026204576715827 ,0.472492724657059,0.634560942649841,0.611623287200928,0.578510701656342,0.581528306007385,0.571970403194427 ,0.781165838241577,0.623325526714325,0.0352878011763096,0.712321758270264,0.700732469558716,-0.0396451056003571 ,0.578510701656342,0.581528306007385,0.571970403194427,0.461020469665527,0.72527813911438,0.511303961277008,0.716162204742432 ,0.693212687969208,0.0810423269867897,0.781165838241577,0.623325526714325,0.0352878011763096,0.487773865461349 ,0.149537533521652,0.860066950321198,0.0310389213263988,0.339698702096939,0.940021991729736,0.315534800291061 ,0.608373045921326,0.728230714797974,0.528455495834351,0.430389046669006,0.731778681278229,0.523088097572327 ,0.0727911219000816,-0.849164426326752,0.509894669055939,0.256654620170593,-0.821057736873627,0.444862186908722 ,0.181827828288078,-0.876947104930878,0.494590252637863,0.0603402629494667,-0.867029130458832,0.464535415172577 ,0.0843750312924385,-0.881525814533234,0.273258209228516,-0.188740387558937,-0.943242788314819,0.256946176290512 ,-0.0665651634335518,-0.964130580425262,0.444862186908722,0.181827828288078,-0.876947104930878,0.0934423208236694 ,-0.290181279182434,-0.952398717403412,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.494590252637863 ,0.0603402629494667,-0.867029130458832,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.528455495834351 ,0.430389046669006,0.731778681278229,0.524966239929199,0.447477400302887,0.72399890422821,0.64373791217804,0.242922231554985 ,0.725665390491486,0.487773865461349,0.149537533521652,0.860066950321198,0.528455495834351,0.430389046669006 ,0.731778681278229,0.543609440326691,0.5921830534935,0.594817638397217,0.600953817367554,0.56422370672226,0.566132545471191 ,0.524966239929199,0.447477400302887,0.72399890422821,0.319102138280869,0.857758343219757,0.403019160032272,0.461020469665527 ,0.72527813911438,0.511303961277008,0.315534800291061,0.608373045921326,0.728230714797974,-0.151531577110291 ,0.591902196407318,0.791637539863586,0.652852237224579,0.393031805753708,-0.647541463375092,0.716162204742432 ,0.693212687969208,0.0810423269867897,0.56834876537323,0.804110050201416,-0.174317732453346,0.670561790466309 ,0.450112581253052,-0.589699506759644,0.483205556869507,0.452571898698807,-0.749460518360138,0.729157328605652 ,0.398623704910278,-0.556263148784637,0.598047912120819,0.525615990161896,-0.605034232139587,0.575007021427155 ,0.477127492427826,-0.664617359638214,0.421373724937439,0.10162215679884,0.901175439357758,0.64373791217804,0.242922231554985 ,0.725665390491486,0.530508995056152,-0.19520378112793,0.824897408485413,0.170562490820885,-0.154649093747139 ,0.97313517332077,0.170562490820885,-0.154649093747139,0.97313517332077,0.530508995056152,-0.19520378112793,0.824897408485413 ,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.394339233636856,-0.615044772624969,0.682800531387329 ,-0.179948955774307,0.305097907781601,0.935165047645569,-0.692679047584534,-0.143219769001007,0.706883192062378 ,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.28609374165535,0.17817023396492,0.941491186618805 ,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.613032460212708,-0.252606987953186,0.748585939407349 ,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.708291888237,-0.455330967903137,0.539440810680389 ,0.976709187030792,0.208457589149475,-0.050838902592659,0.904258787631989,0.426958590745926,0.00473785446956754 ,0.889924466609955,0.362089574337006,0.277354598045349,0.951489508152008,0.185274630784988,0.245644211769104 ,0.904258787631989,0.426958590745926,0.00473785446956754,0.814492523670197,0.578000962734222,-0.0501683428883553 ,0.821134924888611,0.497984498739243,0.278834909200668,0.889924466609955,0.362089574337006,0.277354598045349 ,0.319102138280869,0.857758343219757,0.403019160032272,-0.151531577110291,0.591902196407318,0.791637539863586 ,-0.0883399024605751,0.440414160490036,0.89343798160553,0.467824161052704,0.695085167884827,0.545891225337982 ,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.643522143363953,-0.70788186788559,0.291174322366714 ,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.69510406255722,-0.692621827125549,0.192627400159836 ,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.510247528553009,-0.860017955303192,-0.00407588528469205 ,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.588989198207855,-0.775294840335846,0.228056281805038 ,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.564210891723633,-0.825607478618622,-0.0061880461871624 ,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.417856335639954,-0.873386740684509,0.250183314085007 ,-0.11764945089817,0.119960054755211,0.985783040523529,0.0771664902567863,0.0724747255444527,0.994380593299866 ,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.489890843629837,-0.162440925836563,0.856516182422638 ,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.680057168006897,-0.347443431615829,0.645604610443115 ,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.684738636016846,-0.554822146892548,0.472551971673965 ,0.755062222480774,0.655636370182037,0.00468770461156964,0.633797287940979,0.754054367542267,-0.172345638275146 ,0.75712126493454,0.653194308280945,0.0102259330451488,0.758696973323822,0.616848468780518,0.209467962384224 ,0.755062222480774,0.655636370182037,0.00468770461156964,0.758696973323822,0.616848468780518,0.209467962384224 ,0.713795185089111,0.560950756072998,0.419321686029434,0.771716117858887,0.588264167308807,0.241659909486771 ,0.713795185089111,0.560950756072998,0.419321686029434,0.632134556770325,0.566209673881531,0.52897310256958,0.721818268299103 ,0.577692627906799,0.381116211414337,0.771716117858887,0.588264167308807,0.241659909486771,0.684045433998108 ,0.607819020748138,0.403283834457397,0.721818268299103,0.577692627906799,0.381116211414337,0.632134556770325 ,0.566209673881531,0.52897310256958,0.5494784116745,0.570390999317169,0.610514163970947,0.704874277114868,0.496488779783249 ,-0.506607472896576,0.833557188510895,0.43537425994873,-0.340046495199203,0.803746700286865,0.434959292411804 ,-0.405957728624344,0.673612415790558,0.488613814115524,-0.554529428482056,0.853050053119659,0.432356089353561 ,-0.292187958955765,0.803746700286865,0.434959292411804,-0.405957728624344,0.833557188510895,0.43537425994873 ,-0.340046495199203,0.8706374168396,0.436955988407135,-0.225964426994324,0.8706374168396,0.436955988407135,-0.225964426994324 ,0.839346766471863,0.531246542930603,-0.115212969481945,0.811299920082092,0.393999367952347,-0.431922435760498 ,0.853050053119659,0.432356089353561,-0.292187958955765,0.839346766471863,0.531246542930603,-0.115212969481945 ,0.862522184848785,0.47530135512352,-0.17362080514431,0.830814361572266,0.356648951768875,-0.427257508039474 ,0.811299920082092,0.393999367952347,-0.431922435760498,0.626114845275879,0.552237331867218,0.550467252731323 ,0.621278166770935,0.634226977825165,0.460184365510941,0.598974168300629,0.55623596906662,0.576048195362091,0.420910388231277 ,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.611269116401672 ,0.567333459854126,0.551799595355988,0.626114845275879,0.552237331867218,0.550467252731323,0.420910388231277 ,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.284897238016129 ,0.421358793973923,0.860982179641724,0.575458467006683,0.549589157104492,0.605639576911926,0.611269116401672 ,0.567333459854126,0.551799595355988,0.284897238016129,0.421358793973923,0.860982179641724,0.21572470664978,0.340408891439438 ,0.915196537971497,0.490533232688904,0.463574707508087,0.73788595199585,0.575458467006683,0.549589157104492,0.605639576911926 ,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.340121984481812,0.0539852678775787,-0.938830494880676 ,0.406537264585495,0.167056277394295,-0.898231387138367,0.391682207584381,0.0344884172081947,-0.919453978538513 ,0.320780336856842,-0.177296921610832,-0.930411577224731,0.376012861728668,-0.0599821247160435,-0.924670994281769 ,0.413307309150696,-0.19144606590271,-0.890239000320435,0.184821337461472,-0.38211777806282,-0.905443012714386 ,0.204352244734764,-0.29480442404747,-0.933450877666473,0.184821337461472,-0.38211777806282,-0.905443012714386 ,0.413307309150696,-0.19144606590271,-0.890239000320435,0.39981883764267,-0.144185781478882,-0.905182480812073 ,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073 ,0.474989861249924,-0.106995098292828,-0.873462498188019,0.129470959305763,-0.140533372759819,-0.981574058532715 ,-0.407645702362061,-0.312832653522491,-0.857881546020508,0.129470959305763,-0.140533372759819,-0.981574058532715 ,0.0502891913056374,0.172818437218666,-0.98366904258728,-0.437055885791779,-0.11311361938715,-0.892293393611908 ,0.0502891913056374,0.172818437218666,-0.98366904258728,0.139374434947968,0.0775641202926636,-0.98719733953476 ,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.437055885791779,-0.11311361938715,-0.892293393611908 ,0.595824003219604,0.198742762207985,-0.778135597705841,0.85837733745575,0.37276965379715,-0.352464318275452 ,0.84142130613327,0.443432748317719,-0.30883252620697,0.609626173973084,0.347123831510544,-0.712643682956696 ,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.361765921115875,-0.279954940080643,-0.889241635799408 ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.218467608094215,-0.0307074077427387,-0.975360929965973 ,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.272565364837646,-0.405919879674912,-0.872317135334015 ,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.424547016620636,-0.828336775302887,-0.365538060665131 ,0.690612375736237,0.305584073066711,-0.655494391918182,-0.0785726085305214,-0.289755910634995,-0.953869938850403 ,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.736901640892029,0.310691028833389,-0.600372433662415 ,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.272565364837646,-0.405919879674912,-0.872317135334015 ,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.66791182756424,-0.591369688510895,-0.451858043670654 ,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.0785726085305214,-0.289755910634995,-0.953869938850403 ,0.690612375736237,0.305584073066711,-0.655494391918182,0.568666934967041,0.406713992357254,-0.714983642101288 ,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.299353003501892,-0.946574151515961,-0.119938470423222 ,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.45667690038681,-0.210856854915619,-0.864283263683319 ,-0.353174358606339,-0.401916116476059,-0.844826221466064,0.568666934967041,0.406713992357254,-0.714983642101288 ,0.67058277130127,0.452658027410507,-0.587724030017853,-0.45667690038681,-0.210856854915619,-0.864283263683319 ,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.45667690038681,-0.210856854915619,-0.864283263683319 ,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.928529560565948,-0.339161455631256,0.15100422501564 ,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.45667690038681,-0.210856854915619,-0.864283263683319 ,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,-0.494617521762848 ,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.417728811502457 ,-0.903412997722626,-0.0966832265257835,-0.926164984703064,-0.361916661262512,0.105994082987309,0.633565187454224 ,0.343504458665848,-0.693253099918365,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.0629069060087204 ,-0.574297785758972,-0.81622588634491,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064 ,-0.361916661262512,0.105994082987309,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.21460884809494 ,-0.781227350234985,0.586196959018707,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769 ,0.163093075156212,0.441786974668503,-0.128134071826935,-0.277867317199707,0.952035427093506,0.21460884809494 ,-0.781227350234985,0.586196959018707,0.928486943244934,-0.278761386871338,0.24536520242691,0.838517308235168 ,0.23515185713768,0.491520494222641,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.128134071826935 ,-0.277867317199707,0.952035427093506,0.874470949172974,0.181272923946381,0.449934005737305,0.221149787306786 ,-0.755684494972229,0.616468727588654,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.715266227722168 ,-0.692378520965576,0.0949009582400322,-0.113240525126457,-0.398993462324142,0.909934520721436,0.823110163211823 ,0.325570344924927,0.465288698673248,0.88580310344696,-0.0711137056350708,0.458580136299133,0.221149787306786 ,-0.755684494972229,0.616468727588654,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.0514638796448708 ,-0.993651986122131,-0.100036129355431,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.209620162844658 ,-0.216750532388687,-0.953456163406372,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.00699111027643085 ,-0.506333768367767,-0.862309277057648,0.744133472442627,0.145097494125366,-0.652082920074463,0.728366911411285 ,0.471724718809128,-0.496948093175888,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.809780776500702 ,-0.571567296981812,-0.132536545395851,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.286078542470932 ,-0.0728482380509377,-0.955433011054993,-0.953828155994415,-0.279060304164886,-0.111072786152363,0.779201686382294 ,0.334656059741974,-0.529952883720398,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.209620162844658 ,-0.216750532388687,-0.953456163406372,0.769174098968506,0.351543009281158,-0.533656001091003,0.11994443833828 ,-0.617316663265228,-0.77751749753952,-0.383375316858292,-0.909262895584106,-0.162062838673592,-0.94000107049942 ,-0.321145743131638,-0.115166857838631,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828 ,-0.617316663265228,-0.77751749753952,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.780810236930847 ,0.338432997465134,-0.525165200233459,0.867587566375732,-0.240597397089005,-0.435206592082977,-0.94000107049942 ,-0.321145743131638,-0.115166857838631,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.0104025090113282 ,-0.818762242794037,0.574038505554199,-0.441486179828644,-0.275298207998276,0.853991091251373,0.0104025090113282 ,-0.818762242794037,0.574038505554199,0.824216485023499,-0.374453365802765,0.42479619383812,0.694519758224487 ,0.188186302781105,0.694426536560059,-0.441486179828644,-0.275298207998276,0.853991091251373,0.682577550411224 ,0.201181307435036,0.702576637268066,0.677649199962616,0.231181770563126,0.698102116584778,-0.391219317913055 ,-0.370447516441345,0.842446446418762,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672 ,-0.711835026741028,-0.120827160775661,-0.391219317913055,-0.370447516441345,0.842446446418762,0.284337043762207 ,-0.628438115119934,0.724029004573822,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207 ,-0.628438115119934,0.724029004573822,-0.391219317913055,-0.370447516441345,0.842446446418762,0.67560875415802 ,0.409798443317413,0.612876892089844,0.628294765949249,0.216130942106247,0.747350692749023,-0.0565342605113983 ,-0.994561314582825,0.087474100291729,0.569195508956909,-0.757238268852234,-0.320322901010513,0.000683139485772699 ,-0.280447483062744,-0.959869146347046,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.569195508956909 ,-0.757238268852234,-0.320322901010513,0.869658291339874,0.203361555933952,-0.449820637702942,0.874346256256104 ,0.418091505765915,-0.246410429477692,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.877589702606201 ,0.353748112916946,-0.323571652173996,0.864371955394745,0.365095496177673,-0.345783799886703,-0.0460331737995148 ,-0.0997519120573998,-0.99394690990448,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.899728536605835 ,-0.311181008815765,-0.30603089928627,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908 ,-0.622352182865143,-0.743058264255524,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.246053159236908 ,-0.622352182865143,-0.743058264255524,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.886669814586639 ,0.303469926118851,-0.348887741565704,0.927240550518036,-0.288017064332962,-0.239313811063766,-0.16863539814949 ,-0.750330984592438,0.639191269874573,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.899728536605835 ,-0.311181008815765,-0.30603089928627,-0.366940021514893,-0.90958160161972,-0.194977775216103,-0.16863539814949 ,-0.750330984592438,0.639191269874573,0.669099032878876,-0.368822127580643,0.645195066928864,0.524607241153717 ,0.204550698399544,0.826405644416809,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.760593712329865 ,-0.590625822544098,-0.269552141427994,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.591978549957275 ,-0.234647616744041,0.771039485931396,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844 ,0.270657926797867,0.835567474365234,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.591978549957275 ,-0.234647616744041,0.771039485931396,0.484563320875168,0.265936732292175,0.833352267742157,0.460785627365112 ,0.218516558408737,0.860190212726593,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.559872090816498 ,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.0734389647841454 ,-0.75235915184021,0.654646813869476,0.460785627365112,0.218516558408737,0.860190212726593,0.853275120258331 ,-0.0167487524449825,0.521191954612732,0.45549151301384,-0.838008761405945,0.300447642803192,0.853275120258331 ,-0.0167487524449825,0.521191954612732,0.982857048511505,0.136188626289368,-0.124276459217072,0.437012165784836 ,-0.816920578479767,-0.376378893852234,0.45549151301384,-0.838008761405945,0.300447642803192,-0.36907297372818 ,-0.926835656166077,-0.0689988732337952,0.437012165784836,-0.816920578479767,-0.376378893852234,0.260752469301224 ,-0.303326517343521,-0.91651576757431,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.437012165784836 ,-0.816920578479767,-0.376378893852234,0.982857048511505,0.136188626289368,-0.124276459217072,0.914490401744843 ,0.386459112167358,-0.119819387793541,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.684952914714813 ,-0.620533168315887,-0.381808966398239,0.260752469301224,-0.303326517343521,-0.91651576757431,0.258395105600357 ,-0.170487090945244,-0.950876474380493,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.48573312163353 ,-0.643503189086914,-0.591580092906952,-0.27993255853653,-0.94170469045639,-0.18662802875042,-0.768858969211578 ,-0.468379706144333,-0.435288727283478,0.258395105600357,-0.170487090945244,-0.950876474380493,0.48573312163353 ,-0.643503189086914,-0.591580092906952,0.258395105600357,-0.170487090945244,-0.950876474380493,0.941704988479614 ,0.318803399801254,-0.107499539852142,0.974766612052917,-0.217580199241638,0.0498894527554512,-0.248893335461617 ,-0.684883832931519,0.684825658798218,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.768858969211578 ,-0.468379706144333,-0.435288727283478,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.287435591220856 ,0.297283440828323,0.910496234893799,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.248893335461617 ,-0.684883832931519,0.684825658798218,0.527618527412415,-0.248120784759521,0.812437534332275,-0.665418803691864 ,-0.653117716312408,-0.361462414264679,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.633391082286835 ,-0.307917952537537,0.709931194782257,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835 ,-0.307917952537537,0.709931194782257,-0.705930113792419,-0.207728907465935,0.677134692668915,0.307352930307388 ,0.437818199396133,0.844896078109741,0.0841809809207916,0.380945682525635,0.920757293701172,0.0841809809207916 ,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,-0.589905083179474 ,-0.166010066866875,0.790223181247711,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474 ,-0.166010066866875,0.790223181247711,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.784540235996246 ,-0.611652791500092,0.10187029838562,-0.701657354831696,-0.649943113327026,0.291977494955063,0.567480087280273 ,-0.0757819190621376,0.819892346858978,-0.183004111051559,-0.709960997104645,0.680047690868378,0.0199296418577433 ,-0.141455933451653,0.989743947982788,0.323202461004257,0.213562965393066,0.921917021274567,-0.183004111051559 ,-0.709960997104645,0.680047690868378,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.392839103937149 ,-0.172498524188995,0.903283834457397,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.229229316115379 ,-0.896437346935272,-0.379280924797058,0.571861207485199,-0.818909585475922,0.0485987178981304,0.735555529594421 ,-0.454784423112869,-0.502124667167664,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883 ,0.161021858453751,0.237991765141487,0.735555529594421,-0.454784423112869,-0.502124667167664,0.571861207485199 ,-0.818909585475922,0.0485987178981304,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.340475767850876 ,-0.728246688842773,-0.594754576683044,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.691691398620605 ,-0.350874394178391,-0.631229043006897,0.703052580356598,-0.608254909515381,-0.368433207273483,0.691691398620605 ,-0.350874394178391,-0.631229043006897,0.957826614379883,0.161021858453751,0.237991765141487,0.943321526050568 ,0.150219425559044,0.295936793088913,0.703052580356598,-0.608254909515381,-0.368433207273483,0.503020167350769 ,-0.85257089138031,0.141751810908318,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.340475767850876 ,-0.728246688842773,-0.594754576683044,0.703052580356598,-0.608254909515381,-0.368433207273483,0.703052580356598 ,-0.608254909515381,-0.368433207273483,0.943321526050568,0.150219425559044,0.295936793088913,0.813535928726196 ,-0.204780623316765,0.544264793395996,0.503020167350769,-0.85257089138031,0.141751810908318,0.0493573248386383 ,-0.726132214069366,0.685781180858612,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.238497838377953 ,-0.942050397396088,-0.235923483967781,0.503020167350769,-0.85257089138031,0.141751810908318,0.813535928726196 ,-0.204780623316765,0.544264793395996,0.245743036270142,0.103760361671448,0.963765621185303,0.0493573248386383 ,-0.726132214069366,0.685781180858612,0.503020167350769,-0.85257089138031,0.141751810908318,-0.688713252544403 ,0.550716757774353,0.471577256917953,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.765611350536346 ,-0.587060868740082,0.263056576251984,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.688713252544403 ,0.550716757774353,0.471577256917953,-0.56933456659317,0.0568463616073132,0.820138216018677,0.245743036270142 ,0.103760361671448,0.963765621185303,0.0954181030392647,0.715005815029144,0.69257640838623,-0.683180570602417 ,0.540656507015228,0.490871548652649,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.998530864715576 ,0.000625132001005113,-0.0541816689074039,-0.688713252544403,0.550716757774353,0.471577256917953,-0.688713252544403 ,0.550716757774353,0.471577256917953,0.0954181030392647,0.715005815029144,0.69257640838623,0.18985190987587,0.684443712234497 ,0.703912675380707,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725 ,0.431969791650772,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.993846356868744,-0.0301143601536751 ,-0.106595493853092,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725 ,0.431969791650772,-0.683180570602417,0.540656507015228,0.490871548652649,0.18985190987587,0.684443712234497 ,0.703912675380707,0.199689194560051,0.642064154148102,0.740187704563141,-0.701637983322144,0.54883086681366 ,0.454410493373871,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.982938468456268,-0.0543373562395573 ,-0.17572546005249,-0.688493669033051,0.582562029361725,0.431969791650772,0.199689194560051,0.642064154148102 ,0.740187704563141,0.0676127597689629,0.604031264781952,0.7940873503685,-0.701637983322144,0.54883086681366,0.454410493373871 ,-0.688493669033051,0.582562029361725,0.431969791650772,-0.763029158115387,0.474885076284409,0.438486844301224 ,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.701637983322144,0.54883086681366,0.454410493373871 ,-0.60441780090332,0.615803182125092,0.505436062812805,0.0676127597689629,0.604031264781952,0.7940873503685,0.0691882893443108 ,0.630300760269165,0.773261845111847,-0.60441780090332,0.615803182125092,0.505436062812805,-0.701637983322144 ,0.54883086681366,0.454410493373871,-0.911145687103271,0.362300097942352,0.196347072720528,-0.505132853984833 ,0.614961266517639,0.605527400970459,-0.633555710315704,0.25967600941658,0.728817939758301,-0.930138111114502 ,-0.0125236622989178,0.366996258497238,-0.255626708269119,0.402414381504059,0.879043579101563,-0.513125777244568 ,0.318144857883453,0.797173619270325,-0.519362270832062,0.62650853395462,0.581162631511688,-0.394463092088699 ,0.67669689655304,0.621675312519073,-0.255626708269119,0.402414381504059,0.879043579101563,-0.190007403492928 ,0.150082901120186,0.970243453979492,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.513125777244568 ,0.318144857883453,0.797173619270325,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.993846356868744 ,-0.0301143601536751,-0.106595493853092,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.340475767850876 ,-0.728246688842773,-0.594754576683044,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.238497838377953 ,-0.942050397396088,-0.235923483967781,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.998530864715576 ,0.000625132001005113,-0.0541816689074039,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.999070584774017 ,-0.0414997637271881,0.0116504887118936,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.279823988676071 ,-0.630851566791534,-0.723688364028931,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.437055885791779 ,-0.11311361938715,-0.892293393611908,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.66791182756424 ,-0.591369688510895,-0.451858043670654,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.245216280221939 ,-0.962543606758118,-0.115666791796684,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.648254215717316 ,-0.664977610111237,-0.370905965566635,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883 ,0.161021858453751,0.237991765141487,0.18985190987587,0.684443712234497,0.703912675380707,0.0954181030392647 ,0.715005815029144,0.69257640838623,0.0954181030392647,0.715005815029144,0.69257640838623,0.245743036270142,0.103760361671448 ,0.963765621185303,0.813535928726196,-0.204780623316765,0.544264793395996,0.943321526050568,0.150219425559044 ,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.567480087280273,-0.0757819190621376 ,0.819892346858978,0.0676127597689629,0.604031264781952,0.7940873503685,0.199689194560051,0.642064154148102,0.740187704563141 ,0.0691882893443108,0.630300760269165,0.773261845111847,0.0676127597689629,0.604031264781952,0.7940873503685 ,0.567480087280273,-0.0757819190621376,0.819892346858978,0.323202461004257,0.213562965393066,0.921917021274567 ,0.148562759160995,0.479341596364975,0.864962875843048,-0.255626708269119,0.402414381504059,0.879043579101563 ,-0.394463092088699,0.67669689655304,0.621675312519073,0.0911808460950851,0.673339366912842,0.733689427375793 ,-0.255626708269119,0.402414381504059,0.879043579101563,0.148562759160995,0.479341596364975,0.864962875843048 ,0.21572470664978,0.340408891439438,0.915196537971497,-0.190007403492928,0.150082901120186,0.970243453979492 ,0.842374086380005,0.358164042234421,-0.402646720409393,0.830814361572266,0.356648951768875,-0.427257508039474 ,0.862522184848785,0.47530135512352,-0.17362080514431,0.908332526683807,0.395048230886459,-0.137364193797112 ,0.842374086380005,0.358164042234421,-0.402646720409393,0.908332526683807,0.395048230886459,-0.137364193797112 ,0.909188210964203,0.403158754110336,-0.104114137589931,0.822202026844025,0.427274346351624,-0.376059085130692 ,0.899213671684265,0.427792370319366,0.0916977524757385,0.910323619842529,0.411990493535995,0.0396831221878529 ,0.905055105686188,0.328626185655594,-0.269963204860687,0.922886550426483,0.384252488613129,-0.0251074023544788 ,0.922377347946167,0.359061807394028,-0.142459228634834,0.960252404212952,0.207041427493095,0.18721416592598 ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.894895136356354,0.433114320039749,-0.107586048543453 ,0.922377347946167,0.359061807394028,-0.142459228634834,0.894895136356354,0.433114320039749,-0.107586048543453 ,0.690612375736237,0.305584073066711,-0.655494391918182,0.820404410362244,0.42123407125473,-0.386650294065475 ,0.190256670117378,0.381372839212418,0.904630959033966,0.693649888038635,0.505129396915436,0.513511538505554 ,0.768445134162903,0.434675455093384,0.469626784324646,0.394909024238586,0.532412230968475,0.748721599578857 ,0.307352930307388,0.437818199396133,0.844896078109741,0.272435218095779,0.357738167047501,0.893197894096375 ,0.927422702312469,0.341609179973602,-0.152283608913422,0.914490401744843,0.386459112167358,-0.119819387793541 ,0.251297831535339,0.359561949968338,0.89864593744278,0.287435591220856,0.297283440828323,0.910496234893799,0.941704988479614 ,0.318803399801254,-0.107499539852142,0.92225056886673,0.365326255559921,-0.126453906297684,0.287435591220856 ,0.297283440828323,0.910496234893799,0.527618527412415,-0.248120784759521,0.812437534332275,0.974766612052917 ,-0.217580199241638,0.0498894527554512,0.941704988479614,0.318803399801254,-0.107499539852142,0.646180808544159 ,0.374157816171646,0.665173888206482,0.460785627365112,0.218516558408737,0.860190212726593,0.820957541465759 ,0.472796261310577,0.320144385099411,0.868437707424164,0.397741049528122,0.296003401279449,0.834237515926361 ,0.296865254640579,0.464670658111572,0.910323619842529,0.411990493535995,0.0396831221878529,0.899213671684265 ,0.427792370319366,0.0916977524757385,0.890609622001648,0.401651859283447,0.213284432888031,0.503586828708649 ,0.359971582889557,0.785379409790039,0.478091299533844,0.270657926797867,0.835567474365234,0.877589702606201 ,0.353748112916946,-0.323571652173996,0.874346256256104,0.418091505765915,-0.246410429477692,0.484563320875168 ,0.265936732292175,0.833352267742157,0.864371955394745,0.365095496177673,-0.345783799886703,0.877589702606201 ,0.353748112916946,-0.323571652173996,0.478091299533844,0.270657926797867,0.835567474365234,0.484563320875168 ,0.265936732292175,0.833352267742157,0.524607241153717,0.204550698399544,0.826405644416809,0.886669814586639 ,0.303469926118851,-0.348887741565704,0.864371955394745,0.365095496177673,-0.345783799886703,0.524607241153717 ,0.204550698399544,0.826405644416809,0.669099032878876,-0.368822127580643,0.645195066928864,0.927240550518036 ,-0.288017064332962,-0.239313811063766,0.886669814586639,0.303469926118851,-0.348887741565704,0.853837490081787 ,0.519237220287323,0.0367999672889709,0.744133472442627,0.145097494125366,-0.652082920074463,0.905055105686188 ,0.328626185655594,-0.269963204860687,0.910323619842529,0.411990493535995,0.0396831221878529,0.853837490081787 ,0.519237220287323,0.0367999672889709,0.910323619842529,0.411990493535995,0.0396831221878529,0.834237515926361 ,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.769174098968506 ,0.351543009281158,-0.533656001091003,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802 ,0.409798443317413,0.612876892089844,0.677649199962616,0.231181770563126,0.698102116584778,0.694519758224487 ,0.188186302781105,0.694426536560059,0.780810236930847,0.338432997465134,-0.525165200233459,0.779201686382294 ,0.334656059741974,-0.529952883720398,0.682577550411224,0.201181307435036,0.702576637268066,0.867587566375732 ,-0.240597397089005,-0.435206592082977,0.780810236930847,0.338432997465134,-0.525165200233459,0.694519758224487 ,0.188186302781105,0.694426536560059,0.824216485023499,-0.374453365802765,0.42479619383812,0.838517308235168 ,0.23515185713768,0.491520494222641,0.623998522758484,0.368696242570877,-0.68897670507431,0.67058277130127,0.452658027410507 ,-0.587724030017853,0.823110163211823,0.325570344924927,0.465288698673248,0.621371865272522,0.365546494722366 ,-0.6930171251297,0.623998522758484,0.368696242570877,-0.68897670507431,0.838517308235168,0.23515185713768,0.491520494222641 ,0.874470949172974,0.181272923946381,0.449934005737305,0.882170557975769,0.163093075156212,0.441786974668503 ,0.633565187454224,0.343504458665848,-0.693253099918365,0.621371865272522,0.365546494722366,-0.6930171251297 ,0.874470949172974,0.181272923946381,0.449934005737305,0.768445134162903,0.434675455093384,0.469626784324646 ,0.693649888038635,0.505129396915436,0.513511538505554,0.982857048511505,0.136188626289368,-0.124276459217072 ,0.936653733253479,0.265634030103683,0.228294312953949,0.609626173973084,0.347123831510544,-0.712643682956696 ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.0502891913056374,0.172818437218666,-0.98366904258728 ,0.595824003219604,0.198742762207985,-0.778135597705841,0.218467608094215,-0.0307074077427387,-0.975360929965973 ,0.139374434947968,0.0775641202926636,-0.98719733953476,0.609626173973084,0.347123831510544,-0.712643682956696 ,0.736901640892029,0.310691028833389,-0.600372433662415,0.366583049297333,0.495457142591476,0.787489116191864 ,0.340076804161072,0.586851418018341,0.734815061092377,0.39249575138092,0.576124608516693,0.716957092285156,0.442981511354446 ,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.5100998878479,0.534974932670593 ,0.673498272895813,0.490533232688904,0.463574707508087,0.73788595199585,0.366583049297333,0.495457142591476,0.787489116191864 ,0.787978947162628,0.441818922758102,0.428818345069885,0.723389148712158,0.50640881061554,0.469316840171814,0.768445134162903 ,0.434675455093384,0.469626784324646,0.936653733253479,0.265634030103683,0.228294312953949,0.684045433998108 ,0.607819020748138,0.403283834457397,0.5494784116745,0.570390999317169,0.610514163970947,0.5100998878479,0.534974932670593 ,0.673498272895813,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023 ,0.492295831441879,0.642198443412781,0.582559704780579,0.498202055692673,0.5100998878479,0.534974932670593,0.673498272895813 ,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.39249575138092 ,0.576124608516693,0.716957092285156,0.723389148712158,0.50640881061554,0.469316840171814,0.674923956394196,0.549656689167023 ,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.39249575138092,0.576124608516693,0.716957092285156 ,0.394909024238586,0.532412230968475,0.748721599578857,0.768445134162903,0.434675455093384,0.469626784324646 ,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.74693363904953,-0.662334084510803,0.0583409406244755 ,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.689479112625122,-0.7086461186409,-0.149797007441521 ,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.659241914749146,-0.751696407794952,-0.0187781285494566 ,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.539040088653564,-0.79723459482193,-0.271758705377579 ,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.539040088653564,-0.79723459482193,-0.271758705377579 ,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.510247528553009,-0.860017955303192,-0.00407588528469205 ,0.351930469274521,0.00348040298558772,-0.936019718647003,0.459090322256088,0.385543048381805,-0.800370275974274 ,0.406537264585495,0.167056277394295,-0.898231387138367,0.340121984481812,0.0539852678775787,-0.938830494880676 ,0.330627292394638,0.250829428434372,-0.909818768501282,0.33696186542511,0.354342758655548,-0.87229460477829 ,0.494146823883057,0.54429703950882,-0.677908360958099,0.553665459156036,0.525177180767059,-0.646253407001495 ,0.475114166736603,0.274622708559036,-0.835971832275391,0.406537264585495,0.167056277394295,-0.898231387138367 ,0.459090322256088,0.385543048381805,-0.800370275974274,0.521424174308777,0.414691746234894,-0.745753049850464 ,0.564947247505188,0.481012016534805,-0.670419335365295,0.571536600589752,0.54747611284256,-0.611241221427917 ,0.704874277114868,0.496488779783249,-0.506607472896576,0.673612415790558,0.488613814115524,-0.554529428482056 ,0.755062222480774,0.655636370182037,0.00468770461156964,0.771716117858887,0.588264167308807,0.241659909486771 ,0.833557188510895,0.43537425994873,-0.340046495199203,0.704874277114868,0.496488779783249,-0.506607472896576 ,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.749038457870483,-0.580160796642303,0.319929391145706 ,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.930138111114502,-0.0125236622989178,0.366996258497238 ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.592759191989899,-0.802146971225739,-0.0720886588096619 ,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.647555708885193,-0.75584751367569,0.0967788398265839 ,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.721217155456543,-0.691242814064026,-0.0450457334518433 ,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.647555708885193,-0.75584751367569,0.0967788398265839 ,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.671412885189056,-0.393651962280273,-0.627887606620789 ,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.576924562454224,-0.750419557094574,-0.322534501552582 ,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.495001792907715,-0.723142206668854,-0.481703817844391 ,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.476104736328125,-0.838325619697571,-0.265583217144012 ,0.204112648963928,-0.444034606218338,-0.872451305389404,0.320780336856842,-0.177296921610832,-0.930411577224731 ,0.184821337461472,-0.38211777806282,-0.905443012714386,0.123677581548691,-0.415960758924484,-0.900933146476746 ,0.319102138280869,0.857758343219757,0.403019160032272,0.467824161052704,0.695085167884827,0.545891225337982 ,0.357862263917923,0.82249915599823,0.442074358463287,0.56834876537323,0.804110050201416,-0.174317732453346,-0.667661368846893 ,-0.595950901508331,0.446173489093781,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.613032460212708 ,-0.252606987953186,0.748585939407349,-0.77697879076004,-0.497155666351318,0.386186748743057,0.483205556869507 ,0.452571898698807,-0.749460518360138,0.675231993198395,0.699040055274963,-0.235382169485092,0.713517069816589 ,0.700637459754944,-0.000777124951127917,0.729157328605652,0.398623704910278,-0.556263148784637,0.75712126493454 ,0.653194308280945,0.0102259330451488,0.729157328605652,0.398623704910278,-0.556263148784637,0.713517069816589 ,0.700637459754944,-0.000777124951127917,0.727736592292786,0.600477695465088,0.331400126218796,0.598974168300629 ,0.55623596906662,0.576048195362091,0.75712126493454,0.653194308280945,0.0102259330451488,0.727736592292786,0.600477695465088 ,0.331400126218796,0.70020192861557,0.436750024557114,0.564771354198456,0.181594237685204,0.605878710746765,0.774554371833801 ,0.20168174803257,0.693581879138947,0.691569745540619,0.372105628252029,0.872971594333649,0.315369695425034,0.357862263917923 ,0.82249915599823,0.442074358463287,-0.28609374165535,0.17817023396492,0.941491186618805,-0.214763179421425,0.201751604676247 ,0.955600917339325,0.20168174803257,0.693581879138947,0.691569745540619,0.181594237685204,0.605878710746765,0.774554371833801 ,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.504859209060669,-0.313114404678345,0.804410696029663 ,-0.214763179421425,0.201751604676247,0.955600917339325,-0.28609374165535,0.17817023396492,0.941491186618805 ,0.816755056381226,0.501944601535797,0.284539580345154,0.801483035087585,0.569443702697754,0.182643905282021 ,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879 ,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.787978947162628 ,0.441818922758102,0.428818345069885,0.816755056381226,0.501944601535797,0.284539580345154,0.816755056381226 ,0.501944601535797,0.284539580345154,0.807778179645538,0.493730574846268,0.322062909603119,0.890609622001648 ,0.401651859283447,0.213284432888031,0.862821519374847,0.482879310846329,0.149554565548897,0.807778179645538 ,0.493730574846268,0.322062909603119,0.787978947162628,0.441818922758102,0.428818345069885,0.646180808544159 ,0.374157816171646,0.665173888206482,0.868437707424164,0.397741049528122,0.296003401279449,0.862821519374847 ,0.482879310846329,0.149554565548897,0.899213671684265,0.427792370319366,0.0916977524757385,0.922886550426483 ,0.384252488613129,-0.0251074023544788,0.891873419284821,0.448944300413132,0.0548712648451328,0.909188210964203 ,0.403158754110336,-0.104114137589931,0.922886550426483,0.384252488613129,-0.0251074023544788,0.960252404212952 ,0.207041427493095,0.18721416592598,0.922377347946167,0.359061807394028,-0.142459228634834,0.908332526683807 ,0.395048230886459,-0.137364193797112,0.891873419284821,0.448944300413132,0.0548712648451328,0.922886550426483 ,0.384252488613129,-0.0251074023544788,0.909188210964203,0.403158754110336,-0.104114137589931,0.891873419284821 ,0.448944300413132,0.0548712648451328,0.908332526683807,0.395048230886459,-0.137364193797112,0.862522184848785 ,0.47530135512352,-0.17362080514431,0.801483035087585,0.569443702697754,0.182643905282021,0.922377347946167,0.359061807394028 ,-0.142459228634834,0.820404410362244,0.42123407125473,-0.386650294065475,0.822202026844025,0.427274346351624 ,-0.376059085130692,0.909188210964203,0.403158754110336,-0.104114137589931,0.807778179645538,0.493730574846268 ,0.322062909603119,0.868437707424164,0.397741049528122,0.296003401279449,0.957878828048706,0.257844924926758 ,-0.126428335905075,0.890609622001648,0.401651859283447,0.213284432888031,0.820957541465759,0.472796261310577 ,0.320144385099411,0.869658291339874,0.203361555933952,-0.449820637702942,0.957878828048706,0.257844924926758 ,-0.126428335905075,0.868437707424164,0.397741049528122,0.296003401279449,-0.714628040790558,-0.682467877864838 ,-0.153441905975342,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.66791182756424,-0.591369688510895 ,-0.451858043670654,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.755157172679901,-0.459198147058487 ,-0.46784046292305,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.66791182756424,-0.591369688510895 ,-0.451858043670654,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.671412885189056,-0.393651962280273 ,-0.627887606620789,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.437055885791779,-0.11311361938715 ,-0.892293393611908,-0.754156410694122,-0.292590618133545,-0.587910532951355,0.190256670117378,0.381372839212418 ,0.904630959033966,0.30104210972786,0.404300183057785,0.863663733005524,-0.392839103937149,-0.172498524188995 ,0.903283834457397,-0.589905083179474,-0.166010066866875,0.790223181247711,0.0199296418577433,-0.141455933451653 ,0.989743947982788,-0.392839103937149,-0.172498524188995,0.903283834457397,0.30104210972786,0.404300183057785 ,0.863663733005524,0.356225103139877,0.46585413813591,0.809989869594574,-0.394463092088699,0.67669689655304,0.621675312519073 ,-0.60441780090332,0.615803182125092,0.505436062812805,0.0691882893443108,0.630300760269165,0.773261845111847 ,0.0911808460950851,0.673339366912842,0.733689427375793,0.564947247505188,0.481012016534805,-0.670419335365295 ,0.553665459156036,0.525177180767059,-0.646253407001495,0.494146823883057,0.54429703950882,-0.677908360958099 ,0.598047912120819,0.525615990161896,-0.605034232139587,0.673612415790558,0.488613814115524,-0.554529428482056 ,0.626918852329254,0.478092342615128,-0.615142643451691,0.553665459156036,0.525177180767059,-0.646253407001495 ,0.564947247505188,0.481012016534805,-0.670419335365295,0.803746700286865,0.434959292411804,-0.405957728624344 ,0.752733170986176,0.386990457773209,-0.532570421695709,0.626918852329254,0.478092342615128,-0.615142643451691 ,0.673612415790558,0.488613814115524,-0.554529428482056,0.833262026309967,0.342827558517456,-0.433755338191986 ,0.752733170986176,0.386990457773209,-0.532570421695709,0.803746700286865,0.434959292411804,-0.405957728624344 ,0.853050053119659,0.432356089353561,-0.292187958955765,0.853050053119659,0.432356089353561,-0.292187958955765 ,0.845363795757294,0.50351881980896,-0.178406670689583,0.827770292758942,0.364258110523224,-0.426746338605881 ,0.833262026309967,0.342827558517456,-0.433755338191986,0.845363795757294,0.50351881980896,-0.178406670689583 ,0.8753382563591,0.393582403659821,-0.280848383903503,0.833576500415802,0.26908865571022,-0.482432901859283,0.827770292758942 ,0.364258110523224,-0.426746338605881,0.595824003219604,0.198742762207985,-0.778135597705841,0.833576500415802 ,0.26908865571022,-0.482432901859283,0.8753382563591,0.393582403659821,-0.280848383903503,0.85837733745575,0.37276965379715 ,-0.352464318275452,0.811299920082092,0.393999367952347,-0.431922435760498,0.830814361572266,0.356648951768875 ,-0.427257508039474,0.8753382563591,0.393582403659821,-0.280848383903503,0.845363795757294,0.50351881980896,-0.178406670689583 ,0.85837733745575,0.37276965379715,-0.352464318275452,0.8753382563591,0.393582403659821,-0.280848383903503,0.830814361572266 ,0.356648951768875,-0.427257508039474,0.842374086380005,0.358164042234421,-0.402646720409393,0.85837733745575 ,0.37276965379715,-0.352464318275452,0.842374086380005,0.358164042234421,-0.402646720409393,0.822202026844025 ,0.427274346351624,-0.376059085130692,0.84142130613327,0.443432748317719,-0.30883252620697,0.822202026844025 ,0.427274346351624,-0.376059085130692,0.820404410362244,0.42123407125473,-0.386650294065475,0.736901640892029 ,0.310691028833389,-0.600372433662415,0.84142130613327,0.443432748317719,-0.30883252620697,0.521424174308777 ,0.414691746234894,-0.745753049850464,0.33696186542511,0.354342758655548,-0.87229460477829,0.330627292394638 ,0.250829428434372,-0.909818768501282,0.475114166736603,0.274622708559036,-0.835971832275391,0.537330985069275 ,0.244881898164749,-0.807036757469177,0.464535415172577,0.0843750312924385,-0.881525814533234,0.444862186908722 ,0.181827828288078,-0.876947104930878,0.509894669055939,0.256654620170593,-0.821057736873627,0.509490370750427 ,0.360699236392975,-0.781226992607117,0.537330985069275,0.244881898164749,-0.807036757469177,0.670561790466309 ,0.450112581253052,-0.589699506759644,0.575007021427155,0.477127492427826,-0.664617359638214,0.509490370750427 ,0.360699236392975,-0.781226992607117,0.272443890571594,0.180597811937332,-0.945070743560791,0.464535415172577 ,0.0843750312924385,-0.881525814533234,0.537330985069275,0.244881898164749,-0.807036757469177,0.0856246650218964 ,-0.211089760065079,-0.973709166049957,0.273258209228516,-0.188740387558937,-0.943242788314819,0.464535415172577 ,0.0843750312924385,-0.881525814533234,0.272443890571594,0.180597811937332,-0.945070743560791,0.0856246650218964 ,-0.211089760065079,-0.973709166049957,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0101248463615775 ,-0.493800461292267,-0.869516313076019,0.273258209228516,-0.188740387558937,-0.943242788314819,0.821033596992493 ,0.463092446327209,0.333840012550354,0.976709187030792,0.208457589149475,-0.050838902592659,0.951489508152008 ,0.185274630784988,0.245644211769104,0.836146891117096,0.398915261030197,0.376463830471039,0.654076218605042 ,0.750132322311401,-0.097395233809948,0.814492523670197,0.578000962734222,-0.0501683428883553,0.711495399475098 ,0.476572155952454,-0.516384780406952,0.52654629945755,0.6285120844841,-0.572469711303711,0.654108226299286,0.695117294788361 ,0.298252135515213,0.821134924888611,0.497984498739243,0.278834909200668,0.814492523670197,0.578000962734222 ,-0.0501683428883553,0.654076218605042,0.750132322311401,-0.097395233809948,-0.649092614650726,-0.759154498577118 ,-0.0486132241785526,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.645101189613342,-0.736709177494049 ,-0.202741235494614,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.64864593744278,-0.723939120769501 ,-0.234884113073349,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.843225598335266,-0.434366077184677 ,-0.316696554422379,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.844545185565948,-0.263896226882935 ,-0.465942233800888,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.875506162643433,-0.298629522323608 ,-0.379880726337433,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.649092614650726,-0.759154498577118 ,-0.0486132241785526,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.749038457870483,-0.580160796642303 ,0.319929391145706,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.749038457870483,-0.580160796642303 ,0.319929391145706,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.875506162643433,-0.298629522323608 ,-0.379880726337433,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.151531577110291,0.591902196407318 ,0.791637539863586,0.0310389213263988,0.339698702096939,0.940021991729736,-0.167113959789276,0.136682227253914 ,0.976417362689972,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.663558781147003,-0.701492488384247 ,-0.259996235370636,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.714125990867615,-0.699272274971008 ,-0.0322852060198784,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.281839609146118,-0.242576912045479 ,0.92829030752182,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.504859209060669,-0.313114404678345 ,0.804410696029663,-0.597946286201477,-0.554786086082459,0.578508973121643,0.457004487514496,0.0586743913590908 ,-0.887526988983154,0.333853751420975,0.150268703699112,-0.930570244789124,0.365138918161392,0.402016133069992 ,-0.83967649936676,0.552935898303986,0.244290605187416,-0.796607792377472,0.493055760860443,0.288357526063919 ,-0.820820271968842,0.365138918161392,0.402016133069992,-0.83967649936676,0.333853751420975,0.150268703699112 ,-0.930570244789124,0.491784423589706,0.100257873535156,-0.864925682544708,-0.77697879076004,-0.497155666351318 ,0.386186748743057,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.699702382087708,-0.709872841835022 ,0.080604575574398,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.77697879076004,-0.497155666351318 ,0.386186748743057,-0.708291888237,-0.455330967903137,0.539440810680389,-0.808354198932648,-0.575751066207886 ,0.122776761651039,-0.799912631511688,-0.600115418434143,-0.00112808460835367,0.25180572271347,-0.338099181652069 ,-0.906798124313354,0.152081519365311,-0.148781135678291,-0.977105617523193,0.293987482786179,-0.0222472082823515 ,-0.955550312995911,0.320780336856842,-0.177296921610832,-0.930411577224731,0.600953817367554,0.56422370672226 ,0.566132545471191,0.669920027256012,0.533662140369415,0.516151010990143,0.522614181041718,0.594646036624908 ,0.610958755016327,0.591853797435761,0.480847299098969,0.646911799907684,0.600133121013641,0.610116124153137 ,0.517299294471741,0.669920027256012,0.533662140369415,0.516151010990143,0.600953817367554,0.56422370672226,0.566132545471191 ,0.543609440326691,0.5921830534935,0.594817638397217,0.712321758270264,0.700732469558716,-0.0396451056003571 ,0.781165838241577,0.623325526714325,0.0352878011763096,0.669646203517914,0.237006261944771,-0.703847944736481 ,0.577099621295929,0.499205440282822,-0.646335780620575,0.449265569448471,-0.0221075545996428,-0.893124639987946 ,0.220365136861801,0.161491006612778,-0.961956262588501,0.577099621295929,0.499205440282822,-0.646335780620575 ,0.669646203517914,0.237006261944771,-0.703847944736481,-0.286727339029312,-0.249588027596474,-0.924928784370422 ,0.220365136861801,0.161491006612778,-0.961956262588501,0.449265569448471,-0.0221075545996428,-0.893124639987946 ,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.524412930011749,-0.76793509721756,-0.367786258459091 ,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.286727339029312,-0.249588027596474,-0.924928784370422 ,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.628000319004059,-0.748511612415314,-0.212945908308029 ,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.678066968917847,-0.616290330886841,-0.400513917207718 ,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.659241914749146,-0.751696407794952,-0.0187781285494566 ,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.689479112625122,-0.7086461186409,-0.149797007441521 ,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.654502868652344,-0.735222280025482,0.176278829574585 ,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.689547598361969,-0.720895409584045,0.069526307284832 ,-0.659241914749146,-0.751696407794952,-0.0187781285494566,0.808014631271362,0.548655688762665,-0.214684262871742 ,0.571531593799591,0.820161521434784,-0.026204576715827,0.400274157524109,0.667701542377472,-0.627658545970917 ,0.467050135135651,0.542557895183563,-0.698208510875702,-0.128134071826935,-0.277867317199707,0.952035427093506 ,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.768422484397888,-0.629524946212769,0.115000896155834 ,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.809780776500702,-0.571567296981812,-0.132536545395851 ,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.441486179828644,-0.275298207998276,0.853991091251373 ,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0460331737995148,-0.0997519120573998,-0.99394690990448 ,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.760593712329865,-0.590625822544098,-0.269552141427994 ,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.559872090816498,-0.363111883401871,0.744777143001556 ,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.0565342605113983,-0.994561314582825,0.087474100291729 ,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.92225056886673,0.365326255559921,-0.126453906297684 ,0.258395105600357,-0.170487090945244,-0.950876474380493,0.260752469301224,-0.303326517343521,-0.91651576757431 ,0.927422702312469,0.341609179973602,-0.152283608913422,-0.684952914714813,-0.620533168315887,-0.381808966398239 ,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.708140134811401,-0.189787998795509,0.68008679151535 ,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.708140134811401,-0.189787998795509,0.68008679151535 ,0.251297831535339,0.359561949968338,0.89864593744278,0.272435218095779,0.357738167047501,0.893197894096375,-0.705930113792419 ,-0.207728907465935,0.677134692668915,0.272435218095779,0.357738167047501,0.893197894096375,0.251297831535339 ,0.359561949968338,0.89864593744278,0.92225056886673,0.365326255559921,-0.126453906297684,0.927422702312469,0.341609179973602 ,-0.152283608913422,0.769174098968506,0.351543009281158,-0.533656001091003,0.677649199962616,0.231181770563126 ,0.698102116584778,0.682577550411224,0.201181307435036,0.702576637268066,0.779201686382294,0.334656059741974 ,-0.529952883720398,0.633565187454224,0.343504458665848,-0.693253099918365,0.882170557975769,0.163093075156212 ,0.441786974668503,0.928486943244934,-0.278761386871338,0.24536520242691,0.765720903873444,-0.195053040981293 ,-0.61288321018219,-0.60441780090332,0.615803182125092,0.505436062812805,-0.394463092088699,0.67669689655304 ,0.621675312519073,-0.519362270832062,0.62650853395462,0.581162631511688,-0.763029158115387,0.474885076284409 ,0.438486844301224,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.44155490398407,-0.0105606326833367 ,0.897172093391418,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.583746492862701,-0.193907052278519 ,0.788441598415375,-0.633555710315704,0.25967600941658,0.728817939758301,-0.513125777244568,0.318144857883453 ,0.797173619270325,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.622686505317688,-0.240481927990913 ,0.744600534439087,-0.519362270832062,0.62650853395462,0.581162631511688,-0.513125777244568,0.318144857883453 ,0.797173619270325,-0.633555710315704,0.25967600941658,0.728817939758301,-0.505132853984833,0.614961266517639 ,0.605527400970459,-0.763029158115387,0.474885076284409,0.438486844301224,-0.505132853984833,0.614961266517639 ,0.605527400970459,-0.911145687103271,0.362300097942352,0.196347072720528,-0.942745447158813,-0.331097900867462 ,-0.040066309273243,0.356225103139877,0.46585413813591,0.809989869594574,0.340076804161072,0.586851418018341 ,0.734815061092377,0.0911808460950851,0.673339366912842,0.733689427375793,0.0691882893443108,0.630300760269165 ,0.773261845111847,0.366583049297333,0.495457142591476,0.787489116191864,0.490533232688904,0.463574707508087 ,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.148562759160995,0.479341596364975,0.864962875843048 ,0.315255045890808,0.464517712593079,0.827549159526825,0.420910388231277,0.458904504776001,0.782458364963531 ,-0.11764945089817,0.119960054755211,0.985783040523529,-0.24175851047039,0.0892980098724365,0.966218769550323 ,0.330627292394638,0.250829428434372,-0.909818768501282,0.318814963102341,0.117576964199543,-0.94049596786499 ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.475114166736603,0.274622708559036,-0.835971832275391 ,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.320780336856842,-0.177296921610832,-0.930411577224731 ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.318814963102341,0.117576964199543,-0.94049596786499 ,0.387060284614563,0.0985353216528893,-0.916774332523346,0.391682207584381,0.0344884172081947,-0.919453978538513 ,0.406537264585495,0.167056277394295,-0.898231387138367,0.475114166736603,0.274622708559036,-0.835971832275391 ,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.583746492862701,-0.193907052278519,0.788441598415375 ,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.24175851047039,0.0892980098724365,0.966218769550323 ,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.714125990867615,-0.699272274971008,-0.0322852060198784 ,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.687927067279816,-0.688686609268188,-0.229057043790817 ,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.727918982505798,-0.682847082614899,-0.0620787553489208 ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.685480773448944,-0.689756214618683,-0.233136162161827 ,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.685480773448944,-0.689756214618683,-0.233136162161827 ,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.564210891723633,-0.825607478618622,-0.0061880461871624 ,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.563665211200714,-0.803098201751709,-0.19317039847374 ,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.510247528553009,-0.860017955303192,-0.00407588528469205 ,0.472492724657059,0.634560942649841,0.611623287200928,0.765193700790405,0.545681536197662,0.341628700494766 ,0.821033596992493,0.463092446327209,0.333840012550354,0.457292228937149,0.637990713119507,0.619557559490204 ,0.578510701656342,0.581528306007385,0.571970403194427,0.472492724657059,0.634560942649841,0.611623287200928 ,0.457292228937149,0.637990713119507,0.619557559490204,0.529006600379944,0.562984585762024,0.63498067855835,0.629741132259369 ,-0.543165504932404,0.555335402488709,0.878222644329071,-0.435990631580353,0.196563258767128,0.410484403371811 ,-0.832323789596558,0.372477740049362,0.0891242697834969,-0.774946451187134,0.625711500644684,0.367359757423401 ,-0.19918592274189,-0.908499717712402,0.594084918498993,-0.202006503939629,-0.778624713420868,0.491784423589706 ,0.100257873535156,-0.864925682544708,0.333853751420975,0.150268703699112,-0.930570244789124,0.379243552684784 ,-0.345731914043427,-0.858279526233673,0.708127498626709,-0.297497063875198,-0.640352189540863,0.594084918498993 ,-0.202006503939629,-0.778624713420868,0.367359757423401,-0.19918592274189,-0.908499717712402,0.901673018932343 ,-0.243753165006638,-0.357169687747955,0.672885239124298,0.731690943241119,-0.1088752374053,0.694567322731018 ,0.687739253044128,-0.211165577173233,0.901673018932343,-0.243753165006638,-0.357169687747955,0.891434013843536 ,0.447212874889374,-0.0731168016791344,0.672885239124298,0.731690943241119,-0.1088752374053,0.645817458629608 ,0.37744864821434,0.66366583108902,0.659731268882751,0.252948880195618,0.70765209197998,0.659283638000488,0.56208461523056 ,0.499405652284622,0.381191462278366,0.807218015193939,0.450657457113266,0.543150007724762,0.5245680809021,0.65560382604599 ,0.378357648849487,0.724991083145142,0.575528800487518,0.381191462278366,0.807218015193939,0.450657457113266 ,0.274746268987656,0.549388289451599,0.789105176925659,0.0985177978873253,0.656356811523438,0.747990608215332 ,0.599293649196625,-0.39963087439537,-0.693644165992737,0.641741633415222,-0.441758394241333,-0.626910865306854 ,0.720091462135315,-0.402850449085236,-0.56496000289917,0.0103344274684787,0.766447365283966,0.642223954200745 ,0.248548656702042,0.411066323518753,0.877067863941193,0.200062945485115,0.83070033788681,0.519530355930328,0.169032081961632 ,0.119583055377007,0.978329241275787,0.19136768579483,-0.0293898787349463,0.981078326702118,0.2811399102211,0.126565098762512 ,0.951284229755402,0.963335692882538,-0.129456236958504,-0.235001027584076,0.911918580532074,-0.233281582593918 ,-0.33761540055275,0.853671669960022,-0.248006701469421,-0.457970976829529,0.316321402788162,0.603275775909424 ,-0.732119560241699,0.181251630187035,0.380190223455429,-0.906974792480469,0.237173900008202,0.452350407838821 ,-0.85972535610199,0.544504523277283,-0.49831086397171,-0.674685955047607,0.751560986042023,-0.51889967918396 ,-0.407307237386703,0.85130912065506,-0.28415909409523,-0.441051483154297,0.394706159830093,-0.349102348089218 ,-0.84990268945694,0.415907889604568,-0.581008851528168,-0.699606537818909,0.544504523277283,-0.49831086397171 ,-0.674685955047607,0.934587121009827,-0.0746875330805779,0.347805470228195,0.888165593147278,-0.00891786906868219 ,0.459437042474747,0.890053927898407,-0.0586380586028099,0.452068090438843,0.316321402788162,0.603275775909424 ,-0.732119560241699,0.613006412982941,0.632095158100128,-0.474003076553345,0.508885145187378,0.79451996088028 ,-0.331321537494659,0.544504523277283,-0.49831086397171,-0.674685955047607,0.415907889604568,-0.581008851528168 ,-0.699606537818909,0.751560986042023,-0.51889967918396,-0.407307237386703,0.079964205622673,0.0645997598767281 ,-0.994702279567719,0.111387610435486,-0.211319342255592,-0.9710493683815,-0.109398990869522,-0.127084732055664 ,-0.985840439796448,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.00605733366683126,-0.0303982496261597 ,-0.999519467353821,0.079964205622673,0.0645997598767281,-0.994702279567719,0.0810841843485832,0.166241332888603 ,-0.982745766639709,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.0618164576590061,-0.231827840209007 ,-0.970790684223175,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.362747877836227,-0.08218814432621 ,-0.928255915641785,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.160292729735374,-0.153213784098625 ,-0.975106060504913,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.03669124096632,-0.316752940416336 ,-0.947798132896423,0.859270870685577,-0.205668747425079,0.468352407217026,0.954777777194977,-0.0263348873704672 ,0.296151697635651,0.888511061668396,-0.437404543161392,0.138655453920364,0.888511061668396,-0.437404543161392 ,0.138655453920364,0.954777777194977,-0.0263348873704672,0.296151697635651,0.789399027824402,-0.501962423324585 ,0.353387653827667,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964077115058899,-0.108696304261684 ,0.242364108562469,0.922331035137177,0.0571805983781815,0.382146298885345,0.963335692882538,-0.129456236958504 ,-0.235001027584076,0.853671669960022,-0.248006701469421,-0.457970976829529,0.778241097927094,-0.324259251356125 ,-0.53777015209198,0.250419557094574,0.807709574699402,0.533755779266357,0.378357648849487,0.724991083145142 ,0.575528800487518,0.0415897369384766,0.750063896179199,0.660056412220001,-0.362747877836227,-0.08218814432621 ,-0.928255915641785,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.335044384002686,0.0369866825640202 ,-0.941476106643677,0.648516714572906,0.651950538158417,0.392920613288879,0.889242053031921,-0.13137923181057 ,0.438164442777634,0.562915802001953,0.509836494922638,0.650532484054565,0.29329439997673,0.882676124572754,0.367234617471695 ,0.291106730699539,0.735121071338654,0.612253129482269,0.233477383852005,0.295218259096146,0.926463425159454 ,0.404132395982742,0.670274078845978,0.622422397136688,0.0895038321614265,0.749099910259247,0.65638279914856 ,0.0201202612370253,0.491976112127304,0.870376169681549,-0.0346120446920395,0.37646210193634,0.9257852435112 ,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0824126973748207,0.271421998739243,0.958925545215607 ,-0.10020349919796,0.182739198207855,0.978041768074036,0.727367699146271,-0.668511748313904,0.15501070022583 ,0.888511061668396,-0.437404543161392,0.138655453920364,0.789399027824402,-0.501962423324585,0.353387653827667 ,0.961808860301971,0.241085827350616,0.129620164632797,0.997147977352142,0.063211515545845,-0.0412334688007832 ,0.98869800567627,0.0949656590819359,0.116007700562477,0.932883560657501,0.00894892401993275,-0.36006686091423 ,0.97384238243103,-0.111237548291683,-0.198134258389473,0.983769476413727,0.170430228114128,-0.0561354644596577 ,0.88943737745285,-0.310296326875687,-0.335585117340088,0.993755042552948,-0.10124122351408,0.0469168499112129 ,0.933888673782349,-0.271616876125336,-0.232542887330055,0.930458664894104,-0.278987765312195,0.237513080239296 ,0.799426317214966,-0.355103880167007,0.484581023454666,0.932736575603485,0.169303506612778,0.31833752989769 ,0.799426317214966,-0.355103880167007,0.484581023454666,0.930458664894104,-0.278987765312195,0.237513080239296 ,0.789399027824402,-0.501962423324585,0.353387653827667,0.963078618049622,0.14069077372551,0.229533597826958 ,0.961808860301971,0.241085827350616,0.129620164632797,0.400240421295166,-0.835451424121857,-0.376601278781891 ,0.280021280050278,-0.723065078258514,0.631478428840637,0.963078618049622,0.14069077372551,0.229533597826958 ,0.400240421295166,-0.835451424121857,-0.376601278781891,0.963078618049622,0.14069077372551,0.229533597826958 ,0.88108503818512,0.403870642185211,0.246125221252441,0.961808860301971,0.241085827350616,0.129620164632797,0.932883560657501 ,0.00894892401993275,-0.36006686091423,0.900146186351776,-0.397185921669006,-0.178830027580261,0.88943737745285 ,-0.310296326875687,-0.335585117340088,0.998818516731262,0.0184048507362604,0.0449758432805538,0.600287616252899 ,-0.73423707485199,0.317097216844559,0.983769476413727,0.170430228114128,-0.0561354644596577,0.468301683664322 ,0.50049239397049,0.728148937225342,0.636708438396454,0.429240256547928,0.640589714050293,0.434262931346893,0.0580337457358837 ,0.898914754390717,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.0891242697834969,-0.774946451187134 ,0.625711500644684,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.410484403371811,-0.832323789596558 ,0.372477740049362,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.0981862172484398,-0.372313976287842 ,0.922898590564728,0.0891242697834969,-0.774946451187134,0.625711500644684,0.958027005195618,0.285412758588791 ,-0.0269038528203964,0.998818516731262,0.0184048507362604,0.0449758432805538,0.983769476413727,0.170430228114128 ,-0.0561354644596577,0.21975277364254,-0.661429107189178,-0.717091500759125,-0.80677717924118,-0.297363102436066 ,-0.510573983192444,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.0173206701874733,0.471247583627701 ,0.881830871105194,0.296016186475754,0.207150265574455,0.932450115680695,-0.0981862172484398,-0.372313976287842 ,0.922898590564728,0.88943737745285,-0.310296326875687,-0.335585117340088,0.410484403371811,-0.832323789596558 ,0.372477740049362,0.878222644329071,-0.435990631580353,0.196563258767128,0.369285374879837,-0.387989014387131 ,0.844448208808899,0.232206523418427,-0.020738473162055,0.972445428371429,0.434262931346893,0.0580337457358837 ,0.898914754390717,0.522614181041718,0.594646036624908,0.610958755016327,0.669920027256012,0.533662140369415 ,0.516151010990143,0.645030558109283,0.393106490373611,0.655288398265839,0.0273940563201904,-0.397710710763931 ,-0.917101860046387,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.365171790122986,-0.00518579035997391 ,-0.930925726890564,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.808354198932648,-0.575751066207886 ,0.122776761651039,-0.708291888237,-0.455330967903137,0.539440810680389,-0.692679047584534,-0.143219769001007 ,0.706883192062378,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.708291888237,-0.455330967903137 ,0.539440810680389,0.214979261159897,-0.17779715359211,-0.96029794216156,0.340121984481812,0.0539852678775787 ,-0.938830494880676,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.504859209060669,-0.313114404678345 ,0.804410696029663,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.214763179421425,0.201751604676247 ,0.955600917339325,0.204352244734764,-0.29480442404747,-0.933450877666473,0.129470959305763,-0.140533372759819 ,-0.981574058532715,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.495001792907715,-0.723142206668854 ,-0.481703817844391,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477 ,-0.701685011386871,0.64373791217804,0.242922231554985,0.725665390491486,0.452383905649185,-0.0666286796331406 ,0.889330863952637,0.530508995056152,-0.19520378112793,0.824897408485413,-0.582614302635193,-0.811018943786621 ,-0.0529977157711983,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.590254783630371,-0.794654071331024 ,0.141859948635101,0.56834876537323,0.804110050201416,-0.174317732453346,0.372105628252029,0.872971594333649 ,0.315369695425034,0.675231993198395,0.699040055274963,-0.235382169485092,0.0771664902567863,0.0724747255444527 ,0.994380593299866,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.471450448036194,-0.245001286268234 ,0.847176969051361,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.808354198932648,-0.575751066207886 ,0.122776761651039,-0.755765080451965,-0.64697390794754,-0.101212374866009,0.575007021427155,0.477127492427826 ,-0.664617359638214,0.585969090461731,0.300280570983887,-0.752643227577209,0.56600546836853,0.354604989290237 ,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.575007021427155,0.477127492427826 ,-0.664617359638214,0.459090322256088,0.385543048381805,-0.800370275974274,0.56834876537323,0.804110050201416 ,-0.174317732453346,0.675231993198395,0.699040055274963,-0.235382169485092,0.483205556869507,0.452571898698807 ,-0.749460518360138,0.494146823883057,0.54429703950882,-0.677908360958099,0.33696186542511,0.354342758655548 ,-0.87229460477829,0.575007021427155,0.477127492427826,-0.664617359638214,0.25180572271347,-0.338099181652069 ,-0.906798124313354,0.320780336856842,-0.177296921610832,-0.930411577224731,0.204112648963928,-0.444034606218338 ,-0.872451305389404,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.374727010726929,-0.451056748628616 ,-0.810016989707947,-0.442572265863419,-0.578949928283691,-0.684796929359436,0.75712126493454,0.653194308280945 ,0.0102259330451488,0.598047912120819,0.525615990161896,-0.605034232139587,0.729157328605652,0.398623704910278 ,-0.556263148784637,0.296016186475754,0.207150265574455,0.932450115680695,0.645030558109283,0.393106490373611 ,0.655288398265839,0.639394581317902,-0.0537512600421906,0.766997635364532,-0.446602612733841,-0.102232590317726 ,-0.888872683048248,0.379243552684784,-0.345731914043427,-0.858279526233673,0.171164497733116,0.182280600070953 ,-0.968233704566956,0.645030558109283,0.393106490373611,0.655288398265839,0.296016186475754,0.207150265574455 ,0.932450115680695,0.522614181041718,0.594646036624908,0.610958755016327,0.367359757423401,-0.19918592274189 ,-0.908499717712402,0.333853751420975,0.150268703699112,-0.930570244789124,0.457004487514496,0.0586743913590908 ,-0.887526988983154,0.56834876537323,0.804110050201416,-0.174317732453346,0.716162204742432,0.693212687969208 ,0.0810423269867897,0.461020469665527,0.72527813911438,0.511303961277008,0.528455495834351,0.430389046669006 ,0.731778681278229,0.315534800291061,0.608373045921326,0.728230714797974,0.543609440326691,0.5921830534935,0.594817638397217 ,0.64373791217804,0.242922231554985,0.725665390491486,0.421373724937439,0.10162215679884,0.901175439357758,0.487773865461349 ,0.149537533521652,0.860066950321198,0.521424174308777,0.414691746234894,-0.745753049850464,0.459090322256088 ,0.385543048381805,-0.800370275974274,0.575007021427155,0.477127492427826,-0.664617359638214,0.75712126493454 ,0.653194308280945,0.0102259330451488,0.621278166770935,0.634226977825165,0.460184365510941,0.758696973323822 ,0.616848468780518,0.209467962384224,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.118136525154114 ,-0.743892669677734,0.65777462720871,-0.492057383060455,-0.813641428947449,0.309624224901199,0.361584514379501 ,0.504137456417084,0.78428441286087,0.20168174803257,0.693581879138947,0.691569745540619,-0.214763179421425,0.201751604676247 ,0.955600917339325,0.56834876537323,0.804110050201416,-0.174317732453346,0.461020469665527,0.72527813911438,0.511303961277008 ,0.319102138280869,0.857758343219757,0.403019160032272,-0.394339233636856,-0.615044772624969,0.682800531387329 ,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.708291888237,-0.455330967903137,0.539440810680389 ,0.633797287940979,0.754054367542267,-0.172345638275146,0.598047912120819,0.525615990161896,-0.605034232139587 ,0.75712126493454,0.653194308280945,0.0102259330451488,0.571536600589752,0.54747611284256,-0.611241221427917 ,0.598047912120819,0.525615990161896,-0.605034232139587,0.633797287940979,0.754054367542267,-0.172345638275146 ,0.75712126493454,0.653194308280945,0.0102259330451488,0.598974168300629,0.55623596906662,0.576048195362091,0.621278166770935 ,0.634226977825165,0.460184365510941,0.351930469274521,0.00348040298558772,-0.936019718647003,0.340121984481812 ,0.0539852678775787,-0.938830494880676,0.214979261159897,-0.17779715359211,-0.96029794216156,0.320780336856842 ,-0.177296921610832,-0.930411577224731,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.391682207584381 ,0.0344884172081947,-0.919453978538513,0.595824003219604,0.198742762207985,-0.778135597705841,0.129470959305763 ,-0.140533372759819,-0.981574058532715,0.474989861249924,-0.106995098292828,-0.873462498188019,0.595824003219604 ,0.198742762207985,-0.778135597705841,0.474989861249924,-0.106995098292828,-0.873462498188019,0.833576500415802 ,0.26908865571022,-0.482432901859283,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.272565364837646 ,-0.405919879674912,-0.872317135334015,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.353174358606339 ,-0.401916116476059,-0.844826221466064,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.424547016620636 ,-0.828336775302887,-0.365538060665131,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.0785726085305214 ,-0.289755910634995,-0.953869938850403,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.768422484397888 ,-0.629524946212769,0.115000896155834,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.45667690038681 ,-0.210856854915619,-0.864283263683319,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.67058277130127 ,0.452658027410507,-0.587724030017853,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522 ,0.365546494722366,-0.6930171251297,0.633565187454224,0.343504458665848,-0.693253099918365,-0.494617521762848 ,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139 ,-0.858605027198792,-0.218445509672165,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.765720903873444 ,-0.195053040981293,-0.61288321018219,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.0629069060087204 ,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,0.21460884809494 ,-0.781227350234985,0.586196959018707,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.928486943244934 ,-0.278761386871338,0.24536520242691,0.21460884809494,-0.781227350234985,0.586196959018707,0.463766068220139 ,-0.858605027198792,-0.218445509672165,0.765720903873444,-0.195053040981293,-0.61288321018219,0.928486943244934 ,-0.278761386871338,0.24536520242691,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.926164984703064 ,-0.361916661262512,0.105994082987309,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.928529560565948 ,-0.339161455631256,0.15100422501564,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769 ,0.163093075156212,0.441786974668503,0.874470949172974,0.181272923946381,0.449934005737305,-0.113240525126457 ,-0.398993462324142,0.909934520721436,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.768422484397888 ,-0.629524946212769,0.115000896155834,0.838517308235168,0.23515185713768,0.491520494222641,0.823110163211823 ,0.325570344924927,0.465288698673248,-0.113240525126457,-0.398993462324142,0.909934520721436,0.88580310344696 ,-0.0711137056350708,0.458580136299133,0.463198840618134,-0.858536601066589,-0.219913169741631,0.221149787306786 ,-0.755684494972229,0.616468727588654,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.00839155726134777 ,-0.974679827690125,-0.223447620868683,0.463198840618134,-0.858536601066589,-0.219913169741631,0.463198840618134 ,-0.858536601066589,-0.219913169741631,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.0514638796448708 ,-0.993651986122131,-0.100036129355431,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.905055105686188 ,0.328626185655594,-0.269963204860687,0.744133472442627,0.145097494125366,-0.652082920074463,0.744133472442627 ,0.145097494125366,-0.652082920074463,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.463198840618134 ,-0.858536601066589,-0.219913169741631,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.424547016620636 ,-0.828336775302887,-0.365538060665131,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.299353003501892 ,-0.946574151515961,-0.119938470423222,0.221149787306786,-0.755684494972229,0.616468727588654,0.463198840618134 ,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.960252404212952 ,0.207041427493095,0.18721416592598,0.905055105686188,0.328626185655594,-0.269963204860687,-0.809780776500702 ,-0.571567296981812,-0.132536545395851,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.209620162844658 ,-0.216750532388687,-0.953456163406372,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.728366911411285 ,0.471724718809128,-0.496948093175888,0.769174098968506,0.351543009281158,-0.533656001091003,-0.286078542470932 ,-0.0728482380509377,-0.955433011054993,0.779201686382294,0.334656059741974,-0.529952883720398,0.780810236930847 ,0.338432997465134,-0.525165200233459,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.953828155994415 ,-0.279060304164886,-0.111072786152363,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828 ,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,-0.383375316858292 ,-0.909262895584106,-0.162062838673592,0.867587566375732,-0.240597397089005,-0.435206592082977,0.470961600542068 ,-0.874415993690491,-0.116584025323391,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068 ,-0.874415993690491,-0.116584025323391,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.383375316858292 ,-0.909262895584106,-0.162062838673592,0.824216485023499,-0.374453365802765,0.42479619383812,0.0104025090113282 ,-0.818762242794037,0.574038505554199,0.470961600542068,-0.874415993690491,-0.116584025323391,0.470961600542068 ,-0.874415993690491,-0.116584025323391,0.867587566375732,-0.240597397089005,-0.435206592082977,0.824216485023499 ,-0.374453365802765,0.42479619383812,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.953828155994415 ,-0.279060304164886,-0.111072786152363,-0.94000107049942,-0.321145743131638,-0.115166857838631,0.694519758224487 ,0.188186302781105,0.694426536560059,0.682577550411224,0.201181307435036,0.702576637268066,-0.441486179828644 ,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.809780776500702 ,-0.571567296981812,-0.132536545395851,-0.391219317913055,-0.370447516441345,0.842446446418762,0.677649199962616 ,0.231181770563126,0.698102116584778,0.67560875415802,0.409798443317413,0.612876892089844,-0.391219317913055 ,-0.370447516441345,0.842446446418762,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.260551959276199 ,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.245216280221939 ,-0.962543606758118,-0.115666791796684,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.0565342605113983 ,-0.994561314582825,0.087474100291729,0.964045107364655,-0.123944662511349,0.23506323993206,0.628294765949249 ,0.216130942106247,0.747350692749023,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249 ,0.216130942106247,0.747350692749023,0.964045107364655,-0.123944662511349,0.23506323993206,0.284337043762207 ,-0.628438115119934,0.724029004573822,0.569195508956909,-0.757238268852234,-0.320322901010513,0.284337043762207 ,-0.628438115119934,0.724029004573822,0.964045107364655,-0.123944662511349,0.23506323993206,0.869658291339874 ,0.203361555933952,-0.449820637702942,0.569195508956909,-0.757238268852234,-0.320322901010513,0.964045107364655 ,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.964045107364655 ,-0.123944662511349,0.23506323993206,0.834237515926361,0.296865254640579,0.464670658111572,-0.0565342605113983 ,-0.994561314582825,0.087474100291729,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.569195508956909 ,-0.757238268852234,-0.320322901010513,0.569195508956909,-0.757238268852234,-0.320322901010513,-0.0514638796448708 ,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.760593712329865 ,-0.590625822544098,-0.269552141427994,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.000683139485772699 ,-0.280447483062744,-0.959869146347046,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.874346256256104 ,0.418091505765915,-0.246410429477692,0.877589702606201,0.353748112916946,-0.323571652173996,-0.0460331737995148 ,-0.0997519120573998,-0.99394690990448,0.864371955394745,0.365095496177673,-0.345783799886703,0.886669814586639 ,0.303469926118851,-0.348887741565704,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.903714656829834 ,-0.299481302499771,-0.305958777666092,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908 ,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.366940021514893 ,-0.90958160161972,-0.194977775216103,0.927240550518036,-0.288017064332962,-0.239313811063766,0.416420161724091 ,-0.908685982227325,0.0297335833311081,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091 ,-0.908685982227325,0.0297335833311081,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.366940021514893 ,-0.90958160161972,-0.194977775216103,0.669099032878876,-0.368822127580643,0.645195066928864,-0.16863539814949 ,-0.750330984592438,0.639191269874573,0.416420161724091,-0.908685982227325,0.0297335833311081,0.416420161724091 ,-0.908685982227325,0.0297335833311081,0.927240550518036,-0.288017064332962,-0.239313811063766,0.669099032878876 ,-0.368822127580643,0.645195066928864,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.903714656829834 ,-0.299481302499771,-0.305958777666092,-0.899728536605835,-0.311181008815765,-0.30603089928627,0.524607241153717 ,0.204550698399544,0.826405644416809,0.484563320875168,0.265936732292175,0.833352267742157,-0.591978549957275 ,-0.234647616744041,0.771039485931396,-0.695965886116028,-0.67816036939621,-0.236071988940239,-0.760593712329865 ,-0.590625822544098,-0.269552141427994,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649 ,0.359971582889557,0.785379409790039,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844 ,0.270657926797867,0.835567474365234,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.119874052703381 ,-0.978117644786835,0.170047551393509,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381 ,-0.978117644786835,0.170047551393509,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.260551959276199 ,-0.96073442697525,0.0954045951366425,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.0565342605113983 ,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,0.119874052703381 ,-0.978117644786835,0.170047551393509,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.468902409076691 ,-0.882473528385162,-0.0370272994041443,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.701657354831696 ,-0.649943113327026,0.291977494955063,-0.468902409076691,-0.882473528385162,-0.0370272994041443,0.119874052703381 ,-0.978117644786835,0.170047551393509,0.437012165784836,-0.816920578479767,-0.376378893852234,-0.36907297372818 ,-0.926835656166077,-0.0689988732337952,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.665418803691864 ,-0.653117716312408,-0.361462414264679,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469 ,0.341609179973602,-0.152283608913422,0.260752469301224,-0.303326517343521,-0.91651576757431,0.914490401744843 ,0.386459112167358,-0.119819387793541,0.258395105600357,-0.170487090945244,-0.950876474380493,0.92225056886673 ,0.365326255559921,-0.126453906297684,0.941704988479614,0.318803399801254,-0.107499539852142,-0.768858969211578 ,-0.468379706144333,-0.435288727283478,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.258395105600357 ,-0.170487090945244,-0.950876474380493,0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608 ,-0.844779372215271,0.235983863472939,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.974766612052917 ,-0.217580199241638,0.0498894527554512,0.480270147323608,-0.844779372215271,0.235983863472939,0.48573312163353 ,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.248893335461617 ,-0.684883832931519,0.684825658798218,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.527618527412415 ,-0.248120784759521,0.812437534332275,-0.248893335461617,-0.684883832931519,0.684825658798218,0.480270147323608 ,-0.844779372215271,0.235983863472939,0.480270147323608,-0.844779372215271,0.235983863472939,0.974766612052917 ,-0.217580199241638,0.0498894527554512,0.527618527412415,-0.248120784759521,0.812437534332275,-0.708140134811401 ,-0.189787998795509,0.68008679151535,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.768858969211578 ,-0.468379706144333,-0.435288727283478,0.287435591220856,0.297283440828323,0.910496234893799,0.251297831535339 ,0.359561949968338,0.89864593744278,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419 ,-0.207728907465935,0.677134692668915,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.684952914714813 ,-0.620533168315887,-0.381808966398239,0.272435218095779,0.357738167047501,0.893197894096375,0.307352930307388 ,0.437818199396133,0.844896078109741,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.701657354831696 ,-0.649943113327026,0.291977494955063,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835 ,-0.307917952537537,0.709931194782257,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474 ,-0.166010066866875,0.790223181247711,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.784540235996246 ,-0.611652791500092,0.10187029838562,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.701657354831696 ,-0.649943113327026,0.291977494955063,-0.392839103937149,-0.172498524188995,0.903283834457397,-0.725724279880524 ,-0.448904931545258,0.521352767944336,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.229229316115379 ,-0.896437346935272,-0.379280924797058,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.223597481846809 ,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,0.571861207485199 ,-0.818909585475922,0.0485987178981304,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.567480087280273 ,-0.0757819190621376,0.819892346858978,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.183004111051559 ,-0.709960997104645,0.680047690868378,-0.183004111051559,-0.709960997104645,0.680047690868378,0.571861207485199 ,-0.818909585475922,0.0485987178981304,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809 ,-0.973583161830902,0.046260129660368,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.725724279880524 ,-0.448904931545258,0.521352767944336,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.183004111051559 ,-0.709960997104645,0.680047690868378,-0.223597481846809,-0.973583161830902,0.046260129660368,0.735555529594421 ,-0.454784423112869,-0.502124667167664,0.691691398620605,-0.350874394178391,-0.631229043006897,-0.279823988676071 ,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.691691398620605 ,-0.350874394178391,-0.631229043006897,0.735555529594421,-0.454784423112869,-0.502124667167664,0.0493573248386383 ,-0.726132214069366,0.685781180858612,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.765611350536346 ,-0.587060868740082,0.263056576251984,0.245743036270142,0.103760361671448,0.963765621185303,-0.56933456659317 ,0.0568463616073132,0.820138216018677,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.911145687103271 ,0.362300097942352,0.196347072720528,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.965597808361053 ,0.00630215974524617,-0.259963750839233,-0.633555710315704,0.25967600941658,0.728817939758301,-0.622686505317688 ,-0.240481927990913,0.744600534439087,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.993846356868744 ,-0.0301143601536751,-0.106595493853092,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.279823988676071 ,-0.630851566791534,-0.723688364028931,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.237416341900826 ,-0.918983161449432,-0.314806878566742,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.229229316115379 ,-0.896437346935272,-0.379280924797058,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.942745447158813 ,-0.331097900867462,-0.040066309273243,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826 ,-0.918983161449432,-0.314806878566742,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.942745447158813 ,-0.331097900867462,-0.040066309273243,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.630859076976776 ,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.930138111114502 ,-0.0125236622989178,0.366996258497238,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.844545185565948 ,-0.263896226882935,-0.465942233800888,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.965597808361053 ,0.00630215974524617,-0.259963750839233,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.630859076976776 ,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.754156410694122 ,-0.292590618133545,-0.587910532951355,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.844545185565948 ,-0.263896226882935,-0.465942233800888,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.755157172679901 ,-0.459198147058487,-0.46784046292305,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098 ,-0.818433046340942,-0.269279778003693,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.630859076976776 ,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.507598042488098 ,-0.818433046340942,-0.269279778003693,-0.223597481846809,-0.973583161830902,0.046260129660368,0.00839155726134777 ,-0.974679827690125,-0.223447620868683,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.424547016620636 ,-0.828336775302887,-0.365538060665131,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.784540235996246 ,-0.611652791500092,0.10187029838562,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.714628040790558 ,-0.682467877864838,-0.153441905975342,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.468902409076691 ,-0.882473528385162,-0.0370272994041443,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.245216280221939 ,-0.962543606758118,-0.115666791796684,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939 ,-0.962543606758118,-0.115666791796684,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.0514638796448708 ,-0.993651986122131,-0.100036129355431,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.223597481846809 ,-0.973583161830902,0.046260129660368,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098 ,-0.818433046340942,-0.269279778003693,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.784540235996246 ,-0.611652791500092,0.10187029838562,0.957826614379883,0.161021858453751,0.237991765141487,0.199689194560051 ,0.642064154148102,0.740187704563141,0.18985190987587,0.684443712234497,0.703912675380707,0.84142130613327,0.443432748317719 ,-0.30883252620697,0.736901640892029,0.310691028833389,-0.600372433662415,0.609626173973084,0.347123831510544 ,-0.712643682956696,0.820404410362244,0.42123407125473,-0.386650294065475,0.690612375736237,0.305584073066711 ,-0.655494391918182,0.736901640892029,0.310691028833389,-0.600372433662415,0.693649888038635,0.505129396915436 ,0.513511538505554,0.190256670117378,0.381372839212418,0.904630959033966,0.0841809809207916,0.380945682525635 ,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,0.394909024238586,0.532412230968475 ,0.748721599578857,0.30104210972786,0.404300183057785,0.863663733005524,0.30104210972786,0.404300183057785,0.863663733005524 ,0.340076804161072,0.586851418018341,0.734815061092377,0.356225103139877,0.46585413813591,0.809989869594574,0.568666934967041 ,0.406713992357254,-0.714983642101288,0.690612375736237,0.305584073066711,-0.655494391918182,0.894895136356354 ,0.433114320039749,-0.107586048543453,0.982857048511505,0.136188626289368,-0.124276459217072,0.693649888038635 ,0.505129396915436,0.513511538505554,0.914490401744843,0.386459112167358,-0.119819387793541,0.307352930307388 ,0.437818199396133,0.844896078109741,0.693649888038635,0.505129396915436,0.513511538505554,0.0841809809207916 ,0.380945682525635,0.920757293701172,0.982857048511505,0.136188626289368,-0.124276459217072,0.853275120258331 ,-0.0167487524449825,0.521191954612732,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331 ,-0.0167487524449825,0.521191954612732,0.460785627365112,0.218516558408737,0.860190212726593,0.646180808544159 ,0.374157816171646,0.665173888206482,0.340076804161072,0.586851418018341,0.734815061092377,0.394909024238586 ,0.532412230968475,0.748721599578857,0.39249575138092,0.576124608516693,0.716957092285156,0.820957541465759,0.472796261310577 ,0.320144385099411,0.503586828708649,0.359971582889557,0.785379409790039,0.874346256256104,0.418091505765915 ,-0.246410429477692,0.503586828708649,0.359971582889557,0.785379409790039,0.820957541465759,0.472796261310577 ,0.320144385099411,0.460785627365112,0.218516558408737,0.860190212726593,0.394909024238586,0.532412230968475 ,0.748721599578857,0.340076804161072,0.586851418018341,0.734815061092377,0.30104210972786,0.404300183057785,0.863663733005524 ,0.67058277130127,0.452658027410507,-0.587724030017853,0.568666934967041,0.406713992357254,-0.714983642101288 ,0.894895136356354,0.433114320039749,-0.107586048543453,0.728366911411285,0.471724718809128,-0.496948093175888 ,0.744133472442627,0.145097494125366,-0.652082920074463,0.853837490081787,0.519237220287323,0.0367999672889709 ,0.853837490081787,0.519237220287323,0.0367999672889709,0.67560875415802,0.409798443317413,0.612876892089844 ,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844 ,0.853837490081787,0.519237220287323,0.0367999672889709,0.628294765949249,0.216130942106247,0.747350692749023 ,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.299353003501892,-0.946574151515961,-0.119938470423222 ,0.463198840618134,-0.858536601066589,-0.219913169741631,0.874346256256104,0.418091505765915,-0.246410429477692 ,0.869658291339874,0.203361555933952,-0.449820637702942,0.820957541465759,0.472796261310577,0.320144385099411 ,0.307352930307388,0.437818199396133,0.844896078109741,0.914490401744843,0.386459112167358,-0.119819387793541 ,0.693649888038635,0.505129396915436,0.513511538505554,0.684045433998108,0.607819020748138,0.403283834457397 ,0.801483035087585,0.569443702697754,0.182643905282021,0.839346766471863,0.531246542930603,-0.115212969481945 ,0.891873419284821,0.448944300413132,0.0548712648451328,0.801483035087585,0.569443702697754,0.182643905282021 ,0.862821519374847,0.482879310846329,0.149554565548897,0.862821519374847,0.482879310846329,0.149554565548897 ,0.890609622001648,0.401651859283447,0.213284432888031,0.899213671684265,0.427792370319366,0.0916977524757385 ,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.754156410694122,-0.292590618133545,-0.587910532951355 ,-0.844545185565948,-0.263896226882935,-0.465942233800888,0.585969090461731,0.300280570983887,-0.752643227577209 ,0.459090322256088,0.385543048381805,-0.800370275974274,0.351930469274521,0.00348040298558772,-0.936019718647003 ,0.564947247505188,0.481012016534805,-0.670419335365295,0.598047912120819,0.525615990161896,-0.605034232139587 ,0.571536600589752,0.54747611284256,-0.611241221427917,-0.190189674496651,-0.685347437858582,-0.702941536903381 ,0.204112648963928,-0.444034606218338,-0.872451305389404,0.123677581548691,-0.415960758924484,-0.900933146476746 ,0.181594237685204,0.605878710746765,0.774554371833801,0.357862263917923,0.82249915599823,0.442074358463287,0.467824161052704 ,0.695085167884827,0.545891225337982,-0.28609374165535,0.17817023396492,0.941491186618805,0.181594237685204,0.605878710746765 ,0.774554371833801,-0.179948955774307,0.305097907781601,0.935165047645569,-0.613032460212708,-0.252606987953186 ,0.748585939407349,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.28609374165535,0.17817023396492 ,0.941491186618805,0.56834876537323,0.804110050201416,-0.174317732453346,0.483205556869507,0.452571898698807 ,-0.749460518360138,0.575007021427155,0.477127492427826,-0.664617359638214,0.56834876537323,0.804110050201416 ,-0.174317732453346,0.357862263917923,0.82249915599823,0.442074358463287,0.372105628252029,0.872971594333649 ,0.315369695425034,0.862821519374847,0.482879310846329,0.149554565548897,0.801483035087585,0.569443702697754 ,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.890609622001648,0.401651859283447 ,0.213284432888031,0.957878828048706,0.257844924926758,-0.126428335905075,0.834237515926361,0.296865254640579 ,0.464670658111572,0.839346766471863,0.531246542930603,-0.115212969481945,0.801483035087585,0.569443702697754 ,0.182643905282021,0.862522184848785,0.47530135512352,-0.17362080514431,0.684045433998108,0.607819020748138,0.403283834457397 ,0.642198443412781,0.582559704780579,0.498202055692673,0.801483035087585,0.569443702697754,0.182643905282021 ,0.816755056381226,0.501944601535797,0.284539580345154,0.787978947162628,0.441818922758102,0.428818345069885 ,0.807778179645538,0.493730574846268,0.322062909603119,0.646180808544159,0.374157816171646,0.665173888206482 ,0.787978947162628,0.441818922758102,0.428818345069885,0.936653733253479,0.265634030103683,0.228294312953949 ,0.853275120258331,-0.0167487524449825,0.521191954612732,0.646180808544159,0.374157816171646,0.665173888206482 ,0.936653733253479,0.265634030103683,0.228294312953949,0.869658291339874,0.203361555933952,-0.449820637702942 ,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075 ,0.960252404212952,0.207041427493095,0.18721416592598,0.922886550426483,0.384252488613129,-0.0251074023544788 ,0.905055105686188,0.328626185655594,-0.269963204860687,0.987558305263519,-0.14246828854084,-0.0665680542588234 ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.960252404212952,0.207041427493095,0.18721416592598 ,0.823110163211823,0.325570344924927,0.465288698673248,0.894895136356354,0.433114320039749,-0.107586048543453 ,0.88580310344696,-0.0711137056350708,0.458580136299133,0.67058277130127,0.452658027410507,-0.587724030017853 ,0.894895136356354,0.433114320039749,-0.107586048543453,0.823110163211823,0.325570344924927,0.465288698673248 ,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234 ,0.744133472442627,0.145097494125366,-0.652082920074463,0.88580310344696,-0.0711137056350708,0.458580136299133 ,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.463198840618134,-0.858536601066589,-0.219913169741631 ,0.45549151301384,-0.838008761405945,0.300447642803192,0.437012165784836,-0.816920578479767,-0.376378893852234 ,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0734389647841454,-0.75235915184021,0.654646813869476 ,0.45549151301384,-0.838008761405945,0.300447642803192,0.119874052703381,-0.978117644786835,0.170047551393509 ,0.0502891913056374,0.172818437218666,-0.98366904258728,0.129470959305763,-0.140533372759819,-0.981574058532715 ,0.595824003219604,0.198742762207985,-0.778135597705841,-0.942745447158813,-0.331097900867462,-0.040066309273243 ,-0.911145687103271,0.362300097942352,0.196347072720528,-0.965597808361053,0.00630215974524617,-0.259963750839233 ,0.323202461004257,0.213562965393066,0.921917021274567,0.0199296418577433,-0.141455933451653,0.989743947982788 ,0.356225103139877,0.46585413813591,0.809989869594574,0.0691882893443108,0.630300760269165,0.773261845111847 ,0.323202461004257,0.213562965393066,0.921917021274567,0.356225103139877,0.46585413813591,0.809989869594574,0.249904245138168 ,-0.0394469499588013,-0.967466652393341,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.272443890571594 ,0.180597811937332,-0.945070743560791,0.575007021427155,0.477127492427826,-0.664617359638214,0.56600546836853 ,0.354604989290237,-0.744239985942841,0.509490370750427,0.360699236392975,-0.781226992607117,0.249904245138168 ,-0.0394469499588013,-0.967466652393341,0.351930469274521,0.00348040298558772,-0.936019718647003,0.214979261159897 ,-0.17779715359211,-0.96029794216156,0.598047912120819,0.525615990161896,-0.605034232139587,0.494146823883057 ,0.54429703950882,-0.677908360958099,0.575007021427155,0.477127492427826,-0.664617359638214,0.845363795757294 ,0.50351881980896,-0.178406670689583,0.853050053119659,0.432356089353561,-0.292187958955765,0.811299920082092 ,0.393999367952347,-0.431922435760498,0.575007021427155,0.477127492427826,-0.664617359638214,0.33696186542511 ,0.354342758655548,-0.87229460477829,0.521424174308777,0.414691746234894,-0.745753049850464,-0.667661368846893 ,-0.595950901508331,0.446173489093781,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.558849096298218 ,-0.377615302801132,0.73830509185791,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.597946286201477 ,-0.554786086082459,0.578508973121643,-0.504859209060669,-0.313114404678345,0.804410696029663,0.249904245138168 ,-0.0394469499588013,-0.967466652393341,0.272443890571594,0.180597811937332,-0.945070743560791,0.56600546836853 ,0.354604989290237,-0.744239985942841,0.56600546836853,0.354604989290237,-0.744239985942841,0.272443890571594 ,0.180597811937332,-0.945070743560791,0.509490370750427,0.360699236392975,-0.781226992607117,0.670561790466309 ,0.450112581253052,-0.589699506759644,0.56834876537323,0.804110050201416,-0.174317732453346,0.575007021427155 ,0.477127492427826,-0.664617359638214,0.808014631271362,0.548655688762665,-0.214684262871742,0.976709187030792 ,0.208457589149475,-0.050838902592659,0.765193700790405,0.545681536197662,0.341628700494766,-0.965597808361053 ,0.00630215974524617,-0.259963750839233,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.875506162643433 ,-0.298629522323608,-0.379880726337433,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.755765080451965 ,-0.64697390794754,-0.101212374866009,-0.714125990867615,-0.699272274971008,-0.0322852060198784,0.315534800291061 ,0.608373045921326,0.728230714797974,0.0310389213263988,0.339698702096939,0.940021991729736,-0.151531577110291 ,0.591902196407318,0.791637539863586,-0.179948955774307,0.305097907781601,0.935165047645569,-0.0883399024605751 ,0.440414160490036,0.89343798160553,-0.167113959789276,0.136682227253914,0.976417362689972,0.552935898303986 ,0.244290605187416,-0.796607792377472,0.594970345497131,0.240510985255241,-0.766918957233429,0.457004487514496 ,0.0586743913590908,-0.887526988983154,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.673542857170105 ,-0.664238333702087,0.324233591556549,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.107540838420391 ,-0.360320240259171,-0.926609039306641,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.374727010726929 ,-0.451056748628616,-0.810016989707947,0.571531593799591,0.820161521434784,-0.026204576715827,0.808014631271362 ,0.548655688762665,-0.214684262871742,0.765193700790405,0.545681536197662,0.341628700494766,-0.928529560565948 ,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064 ,-0.361916661262512,0.105994082987309,-0.763029158115387,0.474885076284409,0.438486844301224,-0.519362270832062 ,0.62650853395462,0.581162631511688,-0.505132853984833,0.614961266517639,0.605527400970459,-0.999070584774017 ,-0.0414997637271881,0.0116504887118936,-0.763029158115387,0.474885076284409,0.438486844301224,-0.942745447158813 ,-0.331097900867462,-0.040066309273243,0.148562759160995,0.479341596364975,0.864962875843048,0.0911808460950851 ,0.673339366912842,0.733689427375793,0.340076804161072,0.586851418018341,0.734815061092377,0.340076804161072 ,0.586851418018341,0.734815061092377,0.366583049297333,0.495457142591476,0.787489116191864,0.148562759160995 ,0.479341596364975,0.864962875843048,-0.173014774918556,0.150903835892677,0.973290264606476,-0.24175851047039 ,0.0892980098724365,0.966218769550323,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.11764945089817 ,0.119960054755211,0.985783040523529,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.24175851047039 ,0.0892980098724365,0.966218769550323,0.320780336856842,-0.177296921610832,-0.930411577224731,0.391682207584381 ,0.0344884172081947,-0.919453978538513,0.387060284614563,0.0985353216528893,-0.916774332523346,0.976709187030792 ,0.208457589149475,-0.050838902592659,0.821033596992493,0.463092446327209,0.333840012550354,0.765193700790405 ,0.545681536197662,0.341628700494766,0.578510701656342,0.581528306007385,0.571970403194427,0.529006600379944 ,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.70020192861557,0.436750024557114 ,0.564771354198456,0.445416361093521,0.291170030832291,0.846654772758484,0.587356448173523,0.37003019452095,0.719784736633301 ,0.587356448173523,0.37003019452095,0.719784736633301,0.445416361093521,0.291170030832291,0.846654772758484,0.0771664902567863 ,0.0724747255444527,0.994380593299866,0.600287616252899,-0.73423707485199,0.317097216844559,-0.418209999799728 ,-0.452997386455536,0.787333309650421,0.410484403371811,-0.832323789596558,0.372477740049362,0.786963045597076 ,-0.207125172019005,-0.581195652484894,0.379243552684784,-0.345731914043427,-0.858279526233673,0.95084285736084 ,-0.116525217890739,-0.286914199590683,0.708127498626709,-0.297497063875198,-0.640352189540863,0.379243552684784 ,-0.345731914043427,-0.858279526233673,0.786963045597076,-0.207125172019005,-0.581195652484894,0.378357648849487 ,0.724991083145142,0.575528800487518,0.543150007724762,0.5245680809021,0.65560382604599,0.536732196807861,0.528757095336914 ,0.657521426677704,0.429811149835587,0.447204560041428,0.784391760826111,-0.654502868652344,-0.735222280025482 ,0.176278829574585,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.588989198207855,-0.775294840335846 ,0.228056281805038,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513 ,0.83552473783493,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.588989198207855,-0.775294840335846 ,0.228056281805038,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757 ,0.982406854629517,0.078959085047245,0.121888175606728,0.989398181438446,-0.386899769306183,-0.390137135982513 ,0.83552473783493,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757 ,0.982406854629517,0.524966239929199,0.447477400302887,0.72399890422821,0.591853797435761,0.480847299098969,0.646911799907684 ,0.078959085047245,0.121888175606728,0.989398181438446,0.600953817367554,0.56422370672226,0.566132545471191,0.591853797435761 ,0.480847299098969,0.646911799907684,0.524966239929199,0.447477400302887,0.72399890422821,-0.0328970178961754 ,0.677300930023193,-0.734970211982727,-0.0340137556195259,-0.196621879935265,-0.979889214038849,0.205058068037033 ,-0.244612783193588,-0.947689712047577,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881 ,-0.320324927568436,-0.845145165920258,0.205058068037033,-0.244612783193588,-0.947689712047577,0.0686725899577141 ,-0.344746232032776,-0.936180591583252,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625 ,-0.39963087439537,-0.693644165992737,0.500678837299347,-0.355485200881958,-0.789272427558899,0.427927106618881 ,-0.320324927568436,-0.845145165920258,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625 ,-0.39963087439537,-0.693644165992737,0.778241097927094,-0.324259251356125,-0.53777015209198,0.587996542453766 ,-0.370855212211609,-0.718836843967438,0.500678837299347,-0.355485200881958,-0.789272427558899,0.778241097927094 ,-0.324259251356125,-0.53777015209198,0.853671669960022,-0.248006701469421,-0.457970976829529,0.751961290836334 ,-0.373251110315323,-0.543357908725739,0.587996542453766,-0.370855212211609,-0.718836843967438,0.901673018932343 ,-0.243753165006638,-0.357169687747955,0.751961290836334,-0.373251110315323,-0.543357908725739,0.853671669960022 ,-0.248006701469421,-0.457970976829529,0.911918580532074,-0.233281582593918,-0.33761540055275,0.753405332565308 ,-0.651543796062469,-0.0887193456292152,0.71945708990097,-0.687020063400269,0.101906716823578,0.788194417953491 ,-0.590478122234344,-0.173450663685799,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.696818470954895 ,-0.717234194278717,0.00436395406723022,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.00150869158096612 ,-0.98975282907486,0.142783313989639,-0.0595608800649643,-0.947182178497314,0.315116405487061,-7.15617352398112e-005 ,-0.950459361076355,0.310848772525787,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.551685750484467 ,-0.802535355091095,0.227111890912056,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.58903169631958 ,-0.6592817902565,0.467321366071701,-0.0595608800649643,-0.947182178497314,0.315116405487061,0.274910867214203 ,-0.0151522560045123,0.961350321769714,0.152735993266106,0.0633700788021088,0.986233234405518,0.292623817920685 ,0.00810971390455961,0.956193268299103,0.359952032566071,-0.103429064154625,0.927219986915588,0.0370258577167988 ,-0.771627187728882,0.63499653339386,-0.00152458809316158,-0.818883240222931,0.573958158493042,-7.15617352398112e-005 ,-0.950459361076355,0.310848772525787,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.288185745477676 ,-0.458648860454559,0.840589225292206,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.0595608800649643 ,-0.947182178497314,0.315116405487061,-0.58903169631958,-0.6592817902565,0.467321366071701,0.536377429962158 ,-0.345477372407913,0.770029008388519,0.454795598983765,-0.290122002363205,0.842015504837036,0.477317273616791 ,-0.364241302013397,0.79968523979187,0.777780055999756,-0.164350166916847,0.606668949127197,0.833742022514343 ,-0.228465765714645,0.502670586109161,0.571900844573975,-0.259421706199646,0.778222262859344,0.335281848907471 ,0.203614771366119,0.919851660728455,0.742353081703186,0.249405577778816,0.621859073638916,0.0951899439096451 ,-0.0263954158872366,0.995109081268311,0.225532427430153,-0.0723189786076546,0.971547782421112,0.274910867214203 ,-0.0151522560045123,0.961350321769714,0.058000672608614,-0.0229690801352263,0.998052299022675,0.63869446516037 ,-0.424023747444153,0.642085075378418,0.571900844573975,-0.259421706199646,0.778222262859344,0.833742022514343 ,-0.228465765714645,0.502670586109161,0.804235875606537,-0.38592141866684,0.451961606740952,-0.000327471556374803 ,-0.115864381194115,0.993264973163605,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.0599330253899097 ,-0.274288892745972,0.95977795124054,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.571900844573975 ,-0.259421706199646,0.778222262859344,0.454795598983765,-0.290122002363205,0.842015504837036,0.292623817920685 ,0.00810971390455961,0.956193268299103,0.335281848907471,0.203614771366119,0.919851660728455,0.477317273616791 ,-0.364241302013397,0.79968523979187,0.454795598983765,-0.290122002363205,0.842015504837036,0.571900844573975 ,-0.259421706199646,0.778222262859344,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052 ,-0.082901194691658,0.747905075550079,0.824855744838715,-0.0143105983734131,0.565162122249603,0.537741303443909 ,0.6980841755867,0.472771346569061,0.458152443170547,0.667493462562561,0.586982846260071,0.280117779970169,0.669322490692139 ,0.688143491744995,0.403074562549591,-0.0995079353451729,0.909741222858429,0.658608675003052,-0.082901194691658 ,0.747905075550079,0.458152443170547,0.667493462562561,0.586982846260071,0.404132395982742,0.670274078845978 ,0.622422397136688,0.607683002948761,0.504087805747986,0.61369115114212,0.691345393657684,-0.0592475160956383 ,0.720091164112091,0.748501777648926,-0.0708362907171249,0.659338533878326,0.537741303443909,0.6980841755867 ,0.472771346569061,0.29329439997673,0.882676124572754,0.367234617471695,0.562915802001953,0.509836494922638,0.650532484054565 ,0.458152443170547,0.667493462562561,0.586982846260071,-0.0034278747625649,-0.586137890815735,0.810204088687897 ,0.157182320952415,-0.535330414772034,0.829888582229614,0.174659475684166,-0.296808987855911,0.938828229904175 ,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755 ,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.058000672608614,-0.0229690801352263,0.998052299022675 ,-0.000558733532670885,-0.012703550979495,0.999919176101685,0.0589314736425877,-0.0994917079806328,0.993291735649109 ,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.000558733532670885,-0.012703550979495,0.999919176101685 ,0.058000672608614,-0.0229690801352263,0.998052299022675,0.682068586349487,-0.309287667274475,0.662663996219635 ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.536377429962158,-0.345477372407913,0.770029008388519 ,0.682068586349487,-0.309287667274475,0.662663996219635,0.536377429962158,-0.345477372407913,0.770029008388519 ,0.777780055999756,-0.164350166916847,0.606668949127197,0.404132395982742,0.670274078845978,0.622422397136688 ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.403074562549591,-0.0995079353451729,0.909741222858429 ,0.280117779970169,0.669322490692139,0.688143491744995,0.0532422475516796,-0.0883512496948242,0.994665443897247 ,0.0500486679375172,0.682355880737305,0.729304850101471,6.54090908938088e-005,0.672398924827576,0.740189015865326 ,-0.000327471556374803,-0.115864381194115,0.993264973163605,0.682068586349487,-0.309287667274475,0.662663996219635 ,0.691345393657684,-0.0592475160956383,0.720091164112091,0.0532422475516796,-0.0883512496948242,0.994665443897247 ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0500486679375172,0.682355880737305,0.729304850101471 ,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.691345393657684,-0.0592475160956383,0.720091164112091 ,0.607683002948761,0.504087805747986,0.61369115114212,0.607683002948761,0.504087805747986,0.61369115114212,0.404132395982742 ,0.670274078845978,0.622422397136688,0.042865764349699,0.703626394271851,0.709275960922241,0.0500486679375172 ,0.682355880737305,0.729304850101471,0.875346660614014,0.271785736083984,-0.399875849485397,0.908465981483459 ,0.211989372968674,-0.360208302736282,0.889020264148712,0.213740766048431,-0.404917031526566,0.903672158718109 ,0.187046512961388,-0.385214596986771,0.66176563501358,-0.249233901500702,-0.707070529460907,0.656103849411011 ,-0.195678874850273,-0.728860437870026,0.205762028694153,-0.343506038188934,-0.91633266210556,0.213652655482292 ,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.727709889411926 ,0.17916151881218,-0.662072122097015,0.9054034948349,0.148057624697685,-0.397898882627487,0.881142616271973,0.0315838828682899 ,-0.471794605255127,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-3.70855048004159e-007,-0.0389081388711929 ,-0.999242782592773,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-0.0289378985762596,0.188017979264259 ,-0.981739223003387,-0.0764778554439545,-0.225456923246384,-0.971246778964996,1.25483495594381e-007,-0.219631806015968 ,-0.975582838058472,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-0.0648035630583763,-0.03354711830616 ,-0.997334003448486,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.101892530918121,-0.302259355783463 ,-0.947764337062836,0.142389953136444,-0.3092340528965,-0.940265595912933,0.605917453765869,-0.0272433757781982 ,-0.795060873031616,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.748518824577332,-0.407584488391876 ,-0.523062586784363,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.481532573699951,-0.766164124011993 ,-0.425580739974976,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,3.42403474462571e-008,-0.837808728218079 ,-0.545963823795319,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.804567158222198,-0.249711319804192 ,0.538809776306152,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.594752132892609,-0.34540992975235 ,0.725921392440796,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.804567158222198,-0.249711319804192 ,0.538809776306152,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.942177176475525,-0.23178243637085 ,0.242031067609787,-0.927966833114624,-0.267184227705002,0.25978872179985,0.74054491519928,0.170902013778687 ,-0.649912059307098,0.746655583381653,0.0161054637283087,-0.665015816688538,0.708321094512939,-0.0154764745384455 ,-0.705720722675323,0.71757835149765,0.116429716348648,-0.686677098274231,0.893347382545471,0.219659432768822 ,-0.392020732164383,0.942655086517334,0.280740022659302,-0.180517137050629,0.578336894512177,0.572735607624054 ,-0.580947756767273,0.561173915863037,0.357189118862152,-0.74665904045105,0.205762028694153,-0.343506038188934 ,-0.91633266210556,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.0764778554439545,-0.225456923246384 ,-0.971246778964996,0.213652655482292,-0.249391734600067,-0.94454026222229,0.142389953136444,-0.3092340528965 ,-0.940265595912933,0.101892530918121,-0.302259355783463,-0.947764337062836,-0.501008868217468,-0.341375559568405 ,-0.795269012451172,-0.412438809871674,-0.450837343931198,-0.791605889797211,0.727709889411926,0.17916151881218 ,-0.662072122097015,0.712960124015808,-0.033335629850626,-0.700411677360535,0.238241225481033,-0.0322869308292866 ,-0.970669209957123,0.258906006813049,0.225121974945068,-0.939301729202271,0.798646211624146,0.188777849078178 ,0.571425557136536,0.810771644115448,0.203989744186401,0.54866886138916,0.562908291816711,0.161133006215096,0.810660421848297 ,0.694722712039948,0.104215458035469,0.711687743663788,0.516355931758881,0.769888043403625,-0.375031918287277 ,0.744332075119019,0.174594134092331,-0.644582509994507,0.460788071155548,0.137184977531433,-0.876843571662903 ,0.296686768531799,0.847575604915619,-0.439991503953934,0.306774467229843,-0.0150404367595911,0.951663374900818 ,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.0692291632294655,-0.189661636948586,0.97940582036972 ,0.054814163595438,-0.00857834424823523,0.998459756374359,0.893347382545471,0.219659432768822,-0.392020732164383 ,0.561173915863037,0.357189118862152,-0.74665904045105,0.892053008079529,0.256361722946167,-0.372182875871658 ,0.904940068721771,0.195454493165016,-0.377996027469635,-0.501008868217468,-0.341375559568405,-0.795269012451172 ,0.101892530918121,-0.302259355783463,-0.947764337062836,0.080341137945652,-0.401152580976486,-0.912481188774109 ,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.927966833114624,-0.267184227705002,0.25978872179985 ,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.967553913593292,-0.25226628780365,0.0141822574660182 ,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.911426484584808,-0.347711831331253,-0.219996020197868 ,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.696818470954895,-0.717234194278717,0.00436395406723022 ,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.162544935941696,-0.482564568519592,0.860645413398743 ,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796 ,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.748518824577332 ,-0.407584488391876,-0.523062586784363,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.439750492572784 ,-0.494966864585876,-0.749418020248413,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.911426484584808 ,-0.347711831331253,-0.219996020197868,0.839759349822998,0.221470341086388,-0.495736926794052,0.892053008079529 ,0.256361722946167,-0.372182875871658,0.561173915863037,0.357189118862152,-0.74665904045105,0.602514207363129 ,0.114386186003685,-0.789868593215942,0.881142616271973,0.0315838828682899,-0.471794605255127,0.808351874351501 ,-0.0360210724174976,-0.587596535682678,0.66176563501358,-0.249233901500702,-0.707070529460907,0.712960124015808 ,-0.033335629850626,-0.700411677360535,0.898882806301117,0.175670132040977,-0.401434540748596,0.927110075950623 ,-0.224742949008942,-0.299929141998291,0.939878582954407,0.179825350642204,-0.290329366922379,0.647473335266113 ,0.339982986450195,0.682048261165619,0.910265743732452,0.359647780656815,0.205109089612961,0.935757219791412 ,0.300309896469116,0.184857651591301,0.865987479686737,0.269352704286575,0.421324998140335,0.762866199016571 ,0.277735590934753,0.583864748477936,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.072829432785511 ,0.0172536037862301,0.99719512462616,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.314308881759644 ,-0.16680882871151,0.934550523757935,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.748518824577332 ,-0.407584488391876,-0.523062586784363,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.661673307418823 ,-0.718335151672363,-0.214902579784393,0.923468410968781,-0.310481667518616,0.225404515862465,0.8788041472435 ,-0.274041712284088,0.390646249055862,0.871811747550964,0.251815319061279,0.420158743858337,0.952159941196442 ,0.220857203006744,0.211219072341919,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.0648035630583763 ,-0.03354711830616,-0.997334003448486,-0.0289378985762596,0.188017979264259,-0.981739223003387,0.258906006813049 ,0.225121974945068,-0.939301729202271,0.38853245973587,0.0891766548156738,-0.917109608650208,0.25152114033699 ,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.216437473893166 ,0.0472434125840664,-0.975152730941772,0.248540058732033,0.104038745164871,-0.96301805973053,0.194792345166206 ,0.732599914073944,-0.65219122171402,0.296686768531799,0.847575604915619,-0.439991503953934,0.460788071155548 ,0.137184977531433,-0.876843571662903,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.492029935121536 ,-0.177097424864769,-0.852374970912933,0.080341137945652,-0.401152580976486,-0.912481188774109,0.101892530918121 ,-0.302259355783463,-0.947764337062836,0.492029935121536,-0.177097424864769,-0.852374970912933,0.543910622596741 ,-0.0741649866104126,-0.835859358310699,0.71757835149765,0.116429716348648,-0.686677098274231,0.708321094512939 ,-0.0154764745384455,-0.705720722675323,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.0692291632294655 ,-0.189661636948586,0.97940582036972,-0.226662054657936,-0.126468449831009,0.965727686882019,0.682208895683289 ,0.033966027200222,0.730367958545685,0.694722712039948,0.104215458035469,0.711687743663788,0.489940017461777 ,0.0234622322022915,0.871440351009369,0.335014045238495,0.0223999582231045,0.941946804523468,0.489940017461777 ,0.0234622322022915,0.871440351009369,0.306774467229843,-0.0150404367595911,0.951663374900818,0.054814163595438 ,-0.00857834424823523,0.998459756374359,0.335014045238495,0.0223999582231045,0.941946804523468,0.811995446681976 ,0.143728405237198,0.565690279006958,0.798646211624146,0.188777849078178,0.571425557136536,0.694722712039948 ,0.104215458035469,0.711687743663788,0.682208895683289,0.033966027200222,0.730367958545685,0.556707918643951 ,0.787832021713257,-0.263433039188385,0.530404925346375,0.817605495452881,-0.224035635590553,0.857278525829315 ,0.230919152498245,-0.460162937641144,0.856384754180908,0.207969963550568,-0.472603112459183,0.923292398452759 ,0.235370382666588,-0.303532481193542,0.857278525829315,0.230919152498245,-0.460162937641144,0.530404925346375 ,0.817605495452881,-0.224035635590553,0.535478115081787,0.838915288448334,-0.0973878055810928,0.535478115081787 ,0.838915288448334,-0.0973878055810928,0.539530575275421,0.836876928806305,0.092432402074337,0.97637003660202 ,0.214487105607986,0.0263973921537399,0.923292398452759,0.235370382666588,-0.303532481193542,0.771463513374329 ,0.571617126464844,0.279460042715073,0.560579180717468,0.758218228816986,0.332950711250305,0.897881627082825 ,0.0853674784302711,0.4318807721138,0.940263509750366,0.158270344138145,0.301421761512756,0.248540058732033,0.104038745164871 ,-0.96301805973053,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000970269029494375,0.721597969532013 ,-0.692311644554138,0.194792345166206,0.732599914073944,-0.65219122171402,0.194792345166206,0.732599914073944 ,-0.65219122171402,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.0328970178961754,0.677300930023193 ,-0.734970211982727,0.339142799377441,0.423890322446823,-0.839820921421051,0.296686768531799,0.847575604915619 ,-0.439991503953934,0.194792345166206,0.732599914073944,-0.65219122171402,0.339142799377441,0.423890322446823 ,-0.839820921421051,0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436 ,-0.625739872455597,0.667598783969879,0.599002242088318,-0.442163020372391,0.516355931758881,0.769888043403625 ,-0.375031918287277,0.296686768531799,0.847575604915619,-0.439991503953934,0.694567322731018,0.687739253044128 ,-0.211165577173233,0.530404925346375,0.817605495452881,-0.224035635590553,0.556707918643951,0.787832021713257 ,-0.263433039188385,0.428307920694351,0.88731974363327,-0.170926719903946,0.535478115081787,0.838915288448334 ,-0.0973878055810928,0.530404925346375,0.817605495452881,-0.224035635590553,0.694567322731018,0.687739253044128 ,-0.211165577173233,0.672885239124298,0.731690943241119,-0.1088752374053,0.891434013843536,0.447212874889374 ,-0.0731168016791344,0.539530575275421,0.836876928806305,0.092432402074337,0.535478115081787,0.838915288448334 ,-0.0973878055810928,0.672885239124298,0.731690943241119,-0.1088752374053,0.648516714572906,0.651950538158417 ,0.392920613288879,0.560579180717468,0.758218228816986,0.332950711250305,0.771463513374329,0.571617126464844 ,0.279460042715073,0.539530575275421,0.836876928806305,0.092432402074337,0.891434013843536,0.447212874889374 ,-0.0731168016791344,0.942655086517334,0.280740022659302,-0.180517137050629,0.935757219791412,0.300309896469116 ,0.184857651591301,0.910265743732452,0.359647780656815,0.205109089612961,0.578336894512177,0.572735607624054 ,-0.580947756767273,0.977872133255005,0.203673675656319,-0.0477813258767128,0.952159941196442,0.220857203006744 ,0.211219072341919,0.935757219791412,0.300309896469116,0.184857651591301,0.942655086517334,0.280740022659302 ,-0.180517137050629,0.939878582954407,0.179825350642204,-0.290329366922379,0.977872133255005,0.203673675656319 ,-0.0477813258767128,0.942655086517334,0.280740022659302,-0.180517137050629,0.893347382545471,0.219659432768822 ,-0.392020732164383,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.633589029312134,0.43701559305191 ,-0.638421773910522,0.25152114033699,0.52830183506012,-0.810946524143219,0.38853245973587,0.0891766548156738 ,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.280981153249741,-0.215777322649956 ,-0.935141563415527,0.248540058732033,0.104038745164871,-0.96301805973053,0.460788071155548,0.137184977531433 ,-0.876843571662903,0.280981153249741,-0.215777322649956,-0.935141563415527,-0.000504601746797562,-0.248110130429268 ,-0.968731701374054,-0.000922495266422629,0.0980329513549805,-0.995182752609253,0.248540058732033,0.104038745164871 ,-0.96301805973053,0.924298286437988,-0.381513595581055,0.0109577048569918,0.876497626304626,-0.393738061189651 ,-0.276987820863724,0.923292398452759,0.235370382666588,-0.303532481193542,0.97637003660202,0.214487105607986 ,0.0263973921537399,0.706851065158844,-0.181566014885902,-0.683663189411163,0.434906035661697,-0.159671977162361 ,-0.886206328868866,0.460788071155548,0.137184977531433,-0.876843571662903,0.744332075119019,0.174594134092331 ,-0.644582509994507,0.857278525829315,0.230919152498245,-0.460162937641144,0.829558193683624,-0.330268114805222 ,-0.450284510850906,0.837246775627136,-0.256030231714249,-0.483183532953262,0.856384754180908,0.207969963550568 ,-0.472603112459183,0.876497626304626,-0.393738061189651,-0.276987820863724,0.829558193683624,-0.330268114805222 ,-0.450284510850906,0.857278525829315,0.230919152498245,-0.460162937641144,0.923292398452759,0.235370382666588 ,-0.303532481193542,0.216437473893166,0.0472434125840664,-0.975152730941772,1.06040135960939e-006,-0.00336454622447491 ,-0.999994337558746,-0.000504601746797562,-0.248110130429268,-0.968731701374054,0.280981153249741,-0.215777322649956 ,-0.935141563415527,0.38853245973587,0.0891766548156738,-0.917109608650208,0.216437473893166,0.0472434125840664 ,-0.975152730941772,0.280981153249741,-0.215777322649956,-0.935141563415527,0.434906035661697,-0.159671977162361 ,-0.886206328868866,0.706851065158844,-0.181566014885902,-0.683663189411163,0.711495935916901,-0.0537417083978653 ,-0.700632095336914,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361 ,-0.886206328868866,0.829558193683624,-0.330268114805222,-0.450284510850906,0.848333179950714,-0.297908991575241 ,-0.43769970536232,0.849871397018433,-0.222601994872093,-0.477668255567551,0.837246775627136,-0.256030231714249 ,-0.483183532953262,0.876497626304626,-0.393738061189651,-0.276987820863724,0.927110075950623,-0.224742949008942 ,-0.299929141998291,0.848333179950714,-0.297908991575241,-0.43769970536232,0.829558193683624,-0.330268114805222 ,-0.450284510850906,0.924298286437988,-0.381513595581055,0.0109577048569918,0.935387670993805,-0.353589057922363 ,-0.0049727950245142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.876497626304626,-0.393738061189651 ,-0.276987820863724,0.633589029312134,0.43701559305191,-0.638421773910522,0.644856452941895,0.422154635190964 ,-0.637138664722443,0.240688636898994,0.458865791559219,-0.85528427362442,0.25152114033699,0.52830183506012,-0.810946524143219 ,0.0464195013046265,0.499532669782639,-0.865050494670868,0.25152114033699,0.52830183506012,-0.810946524143219 ,0.240688636898994,0.458865791559219,-0.85528427362442,0.0252151377499104,0.378374934196472,-0.9253089427948 ,0.0464195013046265,0.499532669782639,-0.865050494670868,0.0252151377499104,0.378374934196472,-0.9253089427948 ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-1.63649360729323e-008,0.470822811126709,-0.882227778434753 ,0.881142616271973,0.0315838828682899,-0.471794605255127,0.9054034948349,0.148057624697685,-0.397898882627487 ,0.862718880176544,0.197039529681206,-0.465716183185577,0.830685615539551,0.156212329864502,-0.53437727689743 ,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.923468410968781,-0.310481667518616,0.225404515862465 ,0.952159941196442,0.220857203006744,0.211219072341919,0.977872133255005,0.203673675656319,-0.0477813258767128 ,0.924298286437988,-0.381513595581055,0.0109577048569918,0.911828219890594,-0.323383867740631,0.252966731786728 ,0.923468410968781,-0.310481667518616,0.225404515862465,0.935387670993805,-0.353589057922363,-0.0049727950245142 ,0.291106730699539,0.735121071338654,0.612253129482269,0.404132395982742,0.670274078845978,0.622422397136688 ,0.280117779970169,0.669322490692139,0.688143491744995,0.042865764349699,0.703626394271851,0.709275960922241 ,-7.2909109860575e-009,0.660060167312622,0.751212775707245,6.54090908938088e-005,0.672398924827576,0.740189015865326 ,0.0500486679375172,0.682355880737305,0.729304850101471,-0.661673307418823,-0.718335151672363,-0.214902579784393 ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736 ,-0.481532573699951,-0.766164124011993,-0.425580739974976,0.562908291816711,0.161133006215096,0.810660421848297 ,0.237323373556137,0.127464771270752,0.963031828403473,0.306774467229843,-0.0150404367595911,0.951663374900818 ,0.489940017461777,0.0234622322022915,0.871440351009369,0.562908291816711,0.161133006215096,0.810660421848297 ,0.489940017461777,0.0234622322022915,0.871440351009369,0.694722712039948,0.104215458035469,0.711687743663788 ,0.762866199016571,0.277735590934753,0.583864748477936,0.798646211624146,0.188777849078178,0.571425557136536 ,0.811995446681976,0.143728405237198,0.565690279006958,0.67109352350235,0.25623893737793,0.695683181285858,0.335014045238495 ,0.0223999582231045,0.941946804523468,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.372333556413651 ,0.209001079201698,0.904260098934174,0.849871397018433,-0.222601994872093,-0.477668255567551,0.848333179950714 ,-0.297908991575241,-0.43769970536232,0.888135969638824,0.229056358337402,-0.3984315097332,0.847342550754547 ,0.298378229141235,-0.439296066761017,0.602514207363129,0.114386186003685,-0.789868593215942,0.561173915863037 ,0.357189118862152,-0.74665904045105,-0.239916190505028,0.291067600250244,-0.926131665706635,-0.0240183379501104 ,-0.0193977113813162,-0.999523282051086,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,0.157182320952415 ,-0.535330414772034,0.829888582229614,0.130942046642303,-0.413219839334488,0.901167869567871,0.235934317111969 ,-0.318644911050797,0.918041586875916,0.174659475684166,-0.296808987855911,0.938828229904175,0.0464195013046265 ,0.499532669782639,-0.865050494670868,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,1.06040135960939e-006 ,-0.00336454622447491,-0.999994337558746,0.216437473893166,0.0472434125840664,-0.975152730941772,0.939878582954407 ,0.179825350642204,-0.290329366922379,0.893347382545471,0.219659432768822,-0.392020732164383,0.904940068721771 ,0.195454493165016,-0.377996027469635,0.898882806301117,0.175670132040977,-0.401434540748596,0.237323373556137 ,0.127464771270752,0.963031828403473,-0.00901283789426088,0.0965975746512413,0.995282709598541,-0.072829432785511 ,0.0172536037862301,0.99719512462616,0.306774467229843,-0.0150404367595911,0.951663374900818,0.746655583381653 ,0.0161054637283087,-0.665015816688538,0.730062305927277,-0.0445751175284386,-0.681925296783447,0.691866219043732 ,-0.034970335662365,-0.721178352832794,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.691866219043732 ,-0.034970335662365,-0.721178352832794,0.45493283867836,-0.156170472502708,-0.876725077629089,0.492029935121536 ,-0.177097424864769,-0.852374970912933,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.492029935121536 ,-0.177097424864769,-0.852374970912933,0.45493283867836,-0.156170472502708,-0.876725077629089,0.0628172904253006 ,-0.389361083507538,-0.918940663337708,0.080341137945652,-0.401152580976486,-0.912481188774109,0.080341137945652 ,-0.401152580976486,-0.912481188774109,0.0628172904253006,-0.389361083507538,-0.918940663337708,-0.380791038274765 ,-0.516843378543854,-0.766727566719055,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.439750492572784 ,-0.494966864585876,-0.749418020248413,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.772903144359589 ,-0.524522066116333,-0.357067674398422,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.941869378089905 ,-0.335682570934296,-0.0141169847920537,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.927966833114624 ,-0.267184227705002,0.25978872179985,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.927966833114624 ,-0.267184227705002,0.25978872179985,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.840525031089783 ,-0.0687118694186211,0.537397801876068,-0.239916190505028,0.291067600250244,-0.926131665706635,0.561173915863037 ,0.357189118862152,-0.74665904045105,0.578336894512177,0.572735607624054,-0.580947756767273,-0.420213580131531 ,0.558342278003693,-0.715314149856567,-0.372333556413651,0.209001079201698,0.904260098934174,0.054814163595438 ,-0.00857834424823523,0.998459756374359,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.226662054657936 ,-0.126468449831009,0.965727686882019,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.197339624166489 ,-0.302571266889572,0.932473957538605,-0.132603287696838,-0.345454096794128,0.929019808769226,-0.197339624166489 ,-0.302571266889572,0.932473957538605,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.314308881759644 ,-0.16680882871151,0.934550523757935,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609 ,-0.34540992975235,0.725921392440796,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.58903169631958 ,-0.6592817902565,0.467321366071701,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.58903169631958 ,-0.6592817902565,0.467321366071701,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.942177176475525 ,-0.23178243637085,0.242031067609787,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.696818470954895 ,-0.717234194278717,0.00436395406723022,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.942177176475525 ,-0.23178243637085,0.242031067609787,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.0282435193657875 ,-0.397893935441971,0.916996598243713,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.162544935941696 ,-0.482564568519592,0.860645413398743,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.230195790529251 ,-0.346913009881973,0.909209132194519,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.132603287696838 ,-0.345454096794128,0.929019808769226,0.647473335266113,0.339982986450195,0.682048261165619,0.762866199016571 ,0.277735590934753,0.583864748477936,0.67109352350235,0.25623893737793,0.695683181285858,0.355668604373932,0.293017596006393 ,0.887491166591644,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.771387696266174,0.0395333021879196 ,0.635136306285858,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.804567158222198,-0.249711319804192 ,0.538809776306152,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.67518013715744,-0.23394076526165,0.699573814868927 ,-0.771387696266174,0.0395333021879196,0.635136306285858,0.539530575275421,0.836876928806305,0.092432402074337 ,0.771463513374329,0.571617126464844,0.279460042715073,0.940263509750366,0.158270344138145,0.301421761512756 ,0.97637003660202,0.214487105607986,0.0263973921537399,0.0589314736425877,-0.0994917079806328,0.993291735649109 ,0.058000672608614,-0.0229690801352263,0.998052299022675,0.274910867214203,-0.0151522560045123,0.961350321769714 ,0.359952032566071,-0.103429064154625,0.927219986915588,-0.00127162621356547,-0.241362497210503,0.970434188842773 ,0.174659475684166,-0.296808987855911,0.938828229904175,0.0951899439096451,-0.0263954158872366,0.995109081268311 ,0.000567267881706357,0.0375262796878815,0.999295473098755,0.174659475684166,-0.296808987855911,0.938828229904175 ,0.235934317111969,-0.318644911050797,0.918041586875916,0.225532427430153,-0.0723189786076546,0.971547782421112 ,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.099254384636879,-0.0100136240944266,0.995011687278748 ,0.225532427430153,-0.0723189786076546,0.971547782421112,0.235934317111969,-0.318644911050797,0.918041586875916 ,0.0292022190988064,-0.160741657018662,0.98656439781189,0.157182320952415,-0.535330414772034,0.829888582229614 ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00152458809316158,-0.818883240222931,0.573958158493042 ,0.0370258577167988,-0.771627187728882,0.63499653339386,0.130942046642303,-0.413219839334488,0.901167869567871 ,0.157182320952415,-0.535330414772034,0.829888582229614,0.0370258577167988,-0.771627187728882,0.63499653339386 ,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.0289378985762596,0.188017979264259,-0.981739223003387 ,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-5.31019793470477e-007,0.257037252187729,-0.966401517391205 ,-0.00141350529156625,0.303659945726395,-0.952779412269592,-0.0289378985762596,0.188017979264259,-0.981739223003387 ,-0.00141350529156625,0.303659945726395,-0.952779412269592,0.234113991260529,0.373340249061584,-0.89766788482666 ,0.258906006813049,0.225121974945068,-0.939301729202271,0.696373343467712,0.309285789728165,-0.647616028785706 ,0.727709889411926,0.17916151881218,-0.662072122097015,0.258906006813049,0.225121974945068,-0.939301729202271 ,0.234113991260529,0.373340249061584,-0.89766788482666,0.727709889411926,0.17916151881218,-0.662072122097015 ,0.696373343467712,0.309285789728165,-0.647616028785706,0.903672158718109,0.187046512961388,-0.385214596986771 ,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577 ,0.9054034948349,0.148057624697685,-0.397898882627487,0.903672158718109,0.187046512961388,-0.385214596986771 ,0.889020264148712,0.213740766048431,-0.404917031526566,0.696373343467712,0.309285789728165,-0.647616028785706 ,0.644856452941895,0.422154635190964,-0.637138664722443,0.875346660614014,0.271785736083984,-0.399875849485397 ,0.903672158718109,0.187046512961388,-0.385214596986771,0.644856452941895,0.422154635190964,-0.637138664722443 ,0.696373343467712,0.309285789728165,-0.647616028785706,0.234113991260529,0.373340249061584,-0.89766788482666 ,0.240688636898994,0.458865791559219,-0.85528427362442,0.240688636898994,0.458865791559219,-0.85528427362442 ,0.234113991260529,0.373340249061584,-0.89766788482666,-0.00141350529156625,0.303659945726395,-0.952779412269592 ,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0252151377499104,0.378374934196472,-0.9253089427948 ,-0.00141350529156625,0.303659945726395,-0.952779412269592,-5.31019793470477e-007,0.257037252187729,-0.966401517391205 ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,0.335281848907471,0.203614771366119,0.919851660728455 ,0.292623817920685,0.00810971390455961,0.956193268299103,0.152735993266106,0.0633700788021088,0.986233234405518 ,0.144889816641808,0.162904694676399,0.975945174694061,0.742353081703186,0.249405577778816,0.621859073638916 ,0.335281848907471,0.203614771366119,0.919851660728455,0.144889816641808,0.162904694676399,0.975945174694061 ,0.562908291816711,0.161133006215096,0.810660421848297,0.952159941196442,0.220857203006744,0.211219072341919 ,0.871811747550964,0.251815319061279,0.420158743858337,0.865987479686737,0.269352704286575,0.421324998140335 ,0.935757219791412,0.300309896469116,0.184857651591301,0.633589029312134,0.43701559305191,-0.638421773910522 ,0.847342550754547,0.298378229141235,-0.439296066761017,0.875346660614014,0.271785736083984,-0.399875849485397 ,0.644856452941895,0.422154635190964,-0.637138664722443,0.837246775627136,-0.256030231714249,-0.483183532953262 ,0.849871397018433,-0.222601994872093,-0.477668255567551,0.711495935916901,-0.0537417083978653,-0.700632095336914 ,0.706851065158844,-0.181566014885902,-0.683663189411163,0.837246775627136,-0.256030231714249,-0.483183532953262 ,0.706851065158844,-0.181566014885902,-0.683663189411163,0.744332075119019,0.174594134092331,-0.644582509994507 ,0.856384754180908,0.207969963550568,-0.472603112459183,0.516355931758881,0.769888043403625,-0.375031918287277 ,0.556707918643951,0.787832021713257,-0.263433039188385,0.856384754180908,0.207969963550568,-0.472603112459183 ,0.744332075119019,0.174594134092331,-0.644582509994507,0.428307920694351,0.88731974363327,-0.170926719903946 ,0.556707918643951,0.787832021713257,-0.263433039188385,0.516355931758881,0.769888043403625,-0.375031918287277 ,0.667598783969879,0.599002242088318,-0.442163020372391,0.711495935916901,-0.0537417083978653,-0.700632095336914 ,0.849871397018433,-0.222601994872093,-0.477668255567551,0.847342550754547,0.298378229141235,-0.439296066761017 ,0.633589029312134,0.43701559305191,-0.638421773910522,-0.0764778554439545,-0.225456923246384,-0.971246778964996 ,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.238241225481033,-0.0322869308292866,-0.970669209957123 ,0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535 ,0.66176563501358,-0.249233901500702,-0.707070529460907,0.213652655482292,-0.249391734600067,-0.94454026222229 ,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.154773816466331,-0.473390430212021,-0.867148518562317 ,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,1.25483495594381e-007,-0.219631806015968,-0.975582838058472 ,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.152735993266106,0.0633700788021088,0.986233234405518 ,0.274910867214203,-0.0151522560045123,0.961350321769714,0.225532427430153,-0.0723189786076546,0.971547782421112 ,0.099254384636879,-0.0100136240944266,0.995011687278748,0.152735993266106,0.0633700788021088,0.986233234405518 ,0.099254384636879,-0.0100136240944266,0.995011687278748,-0.00901283789426088,0.0965975746512413,0.995282709598541 ,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297 ,0.144889816641808,0.162904694676399,0.975945174694061,-0.00901283789426088,0.0965975746512413,0.995282709598541 ,0.237323373556137,0.127464771270752,0.963031828403473,0.8788041472435,-0.274041712284088,0.390646249055862,0.923468410968781 ,-0.310481667518616,0.225404515862465,0.911828219890594,-0.323383867740631,0.252966731786728,0.86302787065506 ,-0.341093569993973,0.372609823942184,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00160102033987641 ,-0.972155630588531,-0.234330713748932,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.696818470954895 ,-0.717234194278717,0.00436395406723022,0.839759349822998,0.221470341086388,-0.495736926794052,0.737981557846069 ,0.239907741546631,-0.630735695362091,0.754355251789093,0.176875531673431,-0.632189214229584,0.830685615539551 ,0.156212329864502,-0.53437727689743,0.0292022190988064,-0.160741657018662,0.98656439781189,0.235934317111969 ,-0.318644911050797,0.918041586875916,0.130942046642303,-0.413219839334488,0.901167869567871,-0.176305994391441 ,-0.141984179615974,0.974041402339935,-0.176305994391441,-0.141984179615974,0.974041402339935,0.130942046642303 ,-0.413219839334488,0.901167869567871,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.314308881759644 ,-0.16680882871151,0.934550523757935,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.230195790529251 ,-0.346913009881973,0.909209132194519,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.288185745477676 ,-0.458648860454559,0.840589225292206,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.099254384636879 ,-0.0100136240944266,0.995011687278748,0.0292022190988064,-0.160741657018662,0.98656439781189,0.865987479686737 ,0.269352704286575,0.421324998140335,0.810771644115448,0.203989744186401,0.54866886138916,0.798646211624146,0.188777849078178 ,0.571425557136536,0.762866199016571,0.277735590934753,0.583864748477936,0.865987479686737,0.269352704286575 ,0.421324998140335,0.871811747550964,0.251815319061279,0.420158743858337,0.742353081703186,0.249405577778816 ,0.621859073638916,0.810771644115448,0.203989744186401,0.54866886138916,0.8788041472435,-0.274041712284088,0.390646249055862 ,0.833742022514343,-0.228465765714645,0.502670586109161,0.742353081703186,0.249405577778816,0.621859073638916 ,0.871811747550964,0.251815319061279,0.420158743858337,0.833742022514343,-0.228465765714645,0.502670586109161 ,0.8788041472435,-0.274041712284088,0.390646249055862,0.86302787065506,-0.341093569993973,0.372609823942184,0.804235875606537 ,-0.38592141866684,0.451961606740952,0.560579180717468,0.758218228816986,0.332950711250305,0.537741303443909 ,0.6980841755867,0.472771346569061,0.824855744838715,-0.0143105983734131,0.565162122249603,0.897881627082825 ,0.0853674784302711,0.4318807721138,0.560579180717468,0.758218228816986,0.332950711250305,0.648516714572906,0.651950538158417 ,0.392920613288879,0.29329439997673,0.882676124572754,0.367234617471695,0.537741303443909,0.6980841755867,0.472771346569061 ,-0.431082636117935,0.669595658779144,0.604821860790253,-0.775685489177704,-0.0603891722857952,0.628223836421967 ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.60768449306488,0.504088938236237,0.613688766956329 ,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.526136100292206,-0.358043670654297,0.77135306596756 ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.459984451532364,-0.0801213979721069,0.884304702281952 ,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.431082636117935,0.669595658779144,0.604821860790253 ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.517962217330933,-0.411119759082794,0.750130414962769 ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.775685489177704,-0.0603891722857952,0.628223836421967 ,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.526136100292206,-0.358043670654297,0.77135306596756 ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.168157458305359,0.0816780477762222,0.982370495796204 ,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.223823264241219,-0.0781873688101768,0.971488475799561 ,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.300837725400925,0.085910752415657,0.949797868728638 ,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.23646841943264,-0.0167027618736029,0.971495628356934 ,-0.300837725400925,0.085910752415657,0.949797868728638,-0.542048811912537,0.261238425970078,0.79870992898941 ,-0.46170049905777,0.186353012919426,0.867240011692047,-0.168157458305359,0.0816780477762222,0.982370495796204 ,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.0607370398938656,-0.274085581302643,0.959785461425781 ,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.690265357494354,-0.0591067634522915,0.721138119697571 ,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.60768449306488,0.504088938236237,0.613688766956329 ,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0535679198801517,-0.0883782878518105,0.994645535945892 ,-0.60768449306488,0.504088938236237,0.613688766956329,-0.0499880313873291,0.682301819324493,0.72935962677002 ,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.431082636117935,0.669595658779144,0.604821860790253 ,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.911240935325623,0.185407862067223,-0.367782354354858 ,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.851074159145355,0.339823096990585,-0.400241255760193 ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.927313208580017,0.3043152987957,-0.217904642224312 ,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.907857835292816,0.213884130120277,-0.360621273517609 ,0.804645359516144,-0.23887425661087,0.543585240840912,0.928109109401703,-0.270218104124069,0.256116449832916 ,0.942616164684296,-0.229998171329498,0.242023915052414,0.821004927158356,-0.27689054608345,0.499282002449036 ,-0.0987945944070816,-0.283014118671417,-0.95401394367218,0.498120248317719,-0.335890352725983,-0.799408435821533 ,0.437422394752502,-0.487632155418396,-0.755563676357269,-0.0824775397777557,-0.385316282510757,-0.919091284275055 ,0.129383936524391,-0.521730244159698,-0.843242168426514,-0.122972406446934,-0.410810470581055,-0.903389453887939 ,-0.213652208447456,-0.249391779303551,-0.944540321826935,0.0764780566096306,-0.225457280874252,-0.971246659755707 ,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.911240935325623,0.185407862067223,-0.367782354354858 ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.907857835292816,0.213884130120277,-0.360621273517609 ,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.911240935325623,0.185407862067223,-0.367782354354858 ,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.91725742816925,0.217973545193672,-0.333356142044067 ,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.869192600250244,0.256745725870132,-0.422594249248505 ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.762536406517029,0.295603901147842,-0.57546204328537 ,-0.896749377250671,0.217612341046333,0.3853380382061,-0.857216417789459,0.268806040287018,0.43923032283783,-0.937493622303009 ,0.316276133060455,0.145172759890556,-0.947259664535522,0.288537085056305,0.139446943998337,-0.168157458305359 ,0.0816780477762222,0.982370495796204,-0.46170049905777,0.186353012919426,0.867240011692047,-0.19649812579155 ,0.101020708680153,0.975286245346069,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.937493622303009 ,0.316276133060455,0.145172759890556,-0.857216417789459,0.268806040287018,0.43923032283783,-0.856140553951263 ,0.267054259777069,0.442386031150818,-0.949352085590363,0.231479719281197,0.21248009800911,0.0648036450147629 ,-0.0335458181798458,-0.997334063053131,0.0289377775043249,0.188017472624779,-0.981739282608032,-9.64683522397536e-007 ,0.150016367435455,-0.988683521747589,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,0.0648036450147629 ,-0.0335458181798458,-0.997334063053131,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.258904993534088 ,0.225121468305588,-0.939302146434784,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.981611013412476 ,0.117763727903366,-0.150238215923309,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.879550158977509 ,0.255253672599792,-0.401543378829956,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.756916880607605 ,0.234977602958679,0.609805166721344,-0.623560965061188,0.103526078164577,0.774889707565308,-0.76946359872818 ,0.151790544390678,0.620391309261322,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.832928359508514 ,0.179307460784912,-0.523525714874268,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.560297548770905 ,0.801149368286133,-0.210300549864769,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.557936251163483 ,0.826133012771606,-0.0788124948740005,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.882979989051819 ,0.18293422460556,-0.432297796010971,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.938374042510986 ,0.216587886214256,-0.269339561462402,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.539918065071106 ,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.937403380870819 ,0.166482493281364,0.305873274803162,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.560215890407562 ,0.757637023925781,0.334879487752914,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.199406370520592 ,0.723391234874725,-0.66101610660553,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.000922495266422629 ,0.0980329513549805,-0.995182752609253,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.249231114983559 ,0.10294646769762,-0.962956845760345,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.363279938697815 ,0.743713617324829,-0.561175346374512,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.199406370520592 ,0.723391234874725,-0.66101610660553,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.0328970178961754 ,0.677300930023193,-0.734970211982727,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.363279938697815 ,0.743713617324829,-0.561175346374512,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.453488618135452 ,0.205984279513359,-0.867132365703583,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.595847427845001 ,0.771685659885406,-0.222411975264549,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.535965800285339 ,0.788156151771545,-0.30257323384285,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.557936251163483 ,0.826133012771606,-0.0788124948740005,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.595847427845001 ,0.771685659885406,-0.222411975264549,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.885142028331757 ,0.459607869386673,-0.072692796587944,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.557936251163483 ,0.826133012771606,-0.0788124948740005,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.721357464790344 ,0.650649428367615,0.237273663282394,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.539918065071106 ,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.89384138584137 ,0.0922480821609497,0.438791304826736,-0.937403380870819,0.166482493281364,0.305873274803162,-0.918076574802399 ,-0.319764405488968,0.234277844429016,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.282345056533813 ,-0.215331554412842,-0.934833467006683,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.000922495266422629 ,0.0980329513549805,-0.995182752609253,-0.000504601746797562,-0.248110130429268,-0.968731701374054,-0.217749357223511 ,0.0478734634816647,-0.974829912185669,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.000504601746797562 ,-0.248110130429268,-0.968731701374054,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.388578176498413 ,0.0904658958315849,-0.916963994503021,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.282345056533813 ,-0.215331554412842,-0.934833467006683,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.822116851806641 ,-0.369756579399109,-0.432901799678802,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.849872410297394 ,-0.222603037953377,-0.477665901184082,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.924633741378784 ,-0.380622237920761,-0.0133865028619766,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.898467183113098 ,-0.361167401075363,-0.249629408121109,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.975579440593719 ,0.218437165021896,0.0230220295488834,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.876467823982239 ,-0.40311262011528,-0.263257294893265,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.882979989051819 ,0.18293422460556,-0.432297796010971,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.81538712978363 ,-0.2979336977005,-0.496366053819656,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.460297226905823 ,0.136182025074959,-0.877257645130157,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.282345056533813 ,-0.215331554412842,-0.934833467006683,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.0466683618724346 ,0.500033855438232,-0.864747524261475,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.240688547492027 ,0.458865880966187,-0.855284214019775,-0.251288145780563,0.529204964637756,-0.810429751873016,0.129383936524391 ,-0.521730244159698,-0.843242168426514,0.0764780566096306,-0.225457280874252,-0.971246659755707,1.25483495594381e-007 ,-0.219631806015968,-0.975582838058472,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,-0.893712103366852 ,0.0450193509459496,-0.446376502513886,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.869192600250244 ,0.256745725870132,-0.422594249248505,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.122972406446934 ,-0.410810470581055,-0.903389453887939,0.129383936524391,-0.521730244159698,-0.843242168426514,0.355752408504486 ,-0.498135715723038,-0.790759801864624,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.915939331054688 ,0.209013342857361,-0.342590838670731,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.834647357463837 ,0.36496365070343,-0.412511020898819,-0.949352085590363,0.231479719281197,0.21248009800911,-0.977315187454224 ,0.206456959247589,-0.0472285002470016,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.937493622303009 ,0.316276133060455,0.145172759890556,-0.937493622303009,0.316276133060455,0.145172759890556,-0.945763826370239 ,0.294518440961838,-0.137075424194336,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.947259664535522 ,0.288537085056305,0.139446943998337,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0499880313873291 ,0.682301819324493,0.72935962677002,6.54090908938088e-005,0.672398924827576,0.740189015865326,-7.2909109860575e-009 ,0.660060167312622,0.751212775707245,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.459984451532364 ,-0.0801213979721069,0.884304702281952,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.697653412818909 ,-0.241543143987656,0.674489855766296,-0.46170049905777,0.186353012919426,0.867240011692047,-0.56521064043045 ,0.138002142310143,0.813321769237518,-0.19649812579155,0.101020708680153,0.975286245346069,-0.916763663291931 ,0.137710228562355,0.374940365552902,-0.91884845495224,0.158920049667358,0.361195176839828,-0.756916880607605 ,0.234977602958679,0.609805166721344,-0.76946359872818,0.151790544390678,0.620391309261322,-0.34188050031662 ,0.0427594222128391,0.938770115375519,0.372333496809006,0.209000527858734,0.904260218143463,0.119991220533848 ,0.0380257852375507,0.992046475410461,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.934890508651733 ,-0.354153573513031,-0.0235587190836668,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.918076574802399 ,-0.319764405488968,0.234277844429016,-0.937403380870819,0.166482493281364,0.305873274803162,-0.975579440593719 ,0.218437165021896,0.0230220295488834,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.918076574802399 ,-0.319764405488968,0.234277844429016,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499 ,-0.76721602678299,-0.434891045093536,0.734110653400421,-0.4181247651577,-0.535026371479034,0.355752408504486 ,-0.498135715723038,-0.790759801864624,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.19649812579155 ,0.101020708680153,0.975286245346069,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.0323158428072929 ,-0.124152012169361,0.991736829280853,-0.56521064043045,0.138002142310143,0.813321769237518,-0.504790067672729 ,0.0473182201385498,0.861944317817688,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.19649812579155 ,0.101020708680153,0.975286245346069,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.56521064043045 ,0.138002142310143,0.813321769237518,-0.791948556900024,0.189529091119766,0.580427587032318,-0.76946359872818 ,0.151790544390678,0.620391309261322,-0.896749377250671,0.217612341046333,0.3853380382061,-0.916763663291931 ,0.137710228562355,0.374940365552902,-0.76946359872818,0.151790544390678,0.620391309261322,-0.791948556900024 ,0.189529091119766,0.580427587032318,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.714573800563812 ,0.00537209678441286,-0.699539422988892,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.747396409511566 ,0.179795786738396,-0.639587461948395,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.693207740783691 ,0.00517747504636645,-0.720719218254089,-0.736777663230896,0.0245511569082737,-0.675689220428467,-0.757742166519165 ,0.0436116605997086,-0.6510950922966,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.437422394752502 ,-0.487632155418396,-0.755563676357269,0.381186455488205,-0.513081967830658,-0.769053816795349,-0.0642701610922813 ,-0.378672003746033,-0.923296749591827,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.767184436321259 ,-0.520890653133392,-0.374300688505173,0.834830164909363,-0.436789900064468,-0.335072010755539,0.804645359516144 ,-0.23887425661087,0.543585240840912,0.840525209903717,-0.068711943924427,0.537397503852844,0.943277299404144 ,-0.202248081564903,0.263293832540512,0.928109109401703,-0.270218104124069,0.256116449832916,0.804645359516144 ,-0.23887425661087,0.543585240840912,0.821004927158356,-0.27689054608345,0.499282002449036,0.555963099002838 ,-0.328692525625229,0.76345682144165,0.6691654920578,-0.191945850849152,0.717895746231079,-0.985917925834656 ,0.0740947499871254,0.149919137358665,-0.916763663291931,0.137710228562355,0.374940365552902,-0.896749377250671 ,0.217612341046333,0.3853380382061,-0.947259664535522,0.288537085056305,0.139446943998337,0.372333496809006,0.209000527858734 ,0.904260218143463,0.369765430688858,-0.00654551573097706,0.929102063179016,0.119991220533848,0.0380257852375507 ,0.992046475410461,0.166143178939819,-0.158774629235268,0.973235368728638,0.119991220533848,0.0380257852375507 ,0.992046475410461,0.369765430688858,-0.00654551573097706,0.929102063179016,0.555963099002838,-0.328692525625229 ,0.76345682144165,0.821004927158356,-0.27689054608345,0.499282002449036,0.569704055786133,-0.669814586639404 ,0.476220279932022,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404 ,0.476220279932022,0.821004927158356,-0.27689054608345,0.499282002449036,0.942616164684296,-0.229998171329498 ,0.242023915052414,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535 ,0.00657681748270988,0.552965581417084,-0.801727950572968,0.226851031184196,0.942616164684296,-0.229998171329498 ,0.242023915052414,0.969441294670105,-0.244898587465286,0.0144304987043142,0.320217043161392,-0.31071874499321 ,0.894938468933105,0.571035802364349,-0.157328203320503,0.805708348751068,0.6691654920578,-0.191945850849152 ,0.717895746231079,0.555963099002838,-0.328692525625229,0.76345682144165,0.771388173103333,0.0395334213972092 ,0.63513571023941,0.840525209903717,-0.068711943924427,0.537397503852844,0.804645359516144,-0.23887425661087 ,0.543585240840912,0.6691654920578,-0.191945850849152,0.717895746231079,0.571035802364349,-0.157328203320503 ,0.805708348751068,0.771388173103333,0.0395334213972092,0.63513571023941,0.6691654920578,-0.191945850849152,0.717895746231079 ,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.975579440593719,0.218437165021896,0.0230220295488834 ,-0.937403380870819,0.166482493281364,0.305873274803162,-0.557555019855499,0.7959104180336,0.235921680927277 ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.296950221061707,-0.0679281502962112,0.952473819255829 ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.0589147843420506,-0.0217308606952429,0.998026490211487 ,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0589147843420506,-0.0217308606952429,0.998026490211487 ,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.223823264241219,-0.0781873688101768,0.971488475799561 ,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.173607736825943,-0.299605935811996,0.938134670257568 ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0504573062062263,-0.359267920255661,0.931869447231293 ,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022 ,0.0579886250197887,-0.947378635406494,0.314819037914276,-0.0412573479115963,-0.771816492080688,0.634505391120911 ,0.0579886250197887,-0.947378635406494,0.314819037914276,0.552965581417084,-0.801727950572968,0.226851031184196 ,-0.00150869158096612,-0.98975282907486,0.142783313989639,-7.15617352398112e-005,-0.950459361076355,0.310848772525787 ,-0.000327471556374803,-0.115864381194115,0.993264973163605,6.54090908938088e-005,0.672398924827576,0.740189015865326 ,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0535679198801517,-0.0883782878518105,0.994645535945892 ,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.0535679198801517,-0.0883782878518105,0.994645535945892 ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.00104101200122386,-0.114976294338703,0.993367731571198 ,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.000558733532670885,-0.012703550979495,0.999919176101685 ,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345 ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00127162621356547,-0.241362497210503,0.970434188842773 ,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.160209238529205,-0.537021696567535,0.828215360641479 ,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276 ,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00152458809316158,-0.818883240222931,0.573958158493042 ,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.526136100292206,-0.358043670654297,0.77135306596756 ,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.0599461607635021,-0.0994156152009964,0.993238627910614 ,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.0607370398938656,-0.274085581302643,0.959785461425781 ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00124295917339623,-0.0901384949684143,0.995928466320038 ,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.0589147843420506,-0.0217308606952429,0.998026490211487 ,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.00124295917339623,-0.0901384949684143,0.995928466320038 ,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.00127162621356547,-0.241362497210503,0.970434188842773 ,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.0940853953361511,-0.0260460525751114,0.995223343372345 ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.173607736825943,-0.299605935811996,0.938134670257568 ,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.223823264241219,-0.0781873688101768,0.971488475799561 ,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,0.0289377775043249,0.188017472624779,-0.981739282608032 ,0.00141346117015928,0.303658157587051,-0.95278000831604,-5.31019793470477e-007,0.257037252187729,-0.966401517391205 ,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.258904993534088,0.225121468305588,-0.939302146434784 ,-0.234113723039627,0.373339533805847,-0.897668302059174,0.00141346117015928,0.303658157587051,-0.95278000831604 ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.908670663833618,0.161942407488823,-0.384827554225922 ,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.894481837749481,0.206879526376724,-0.396362364292145 ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.894481837749481,0.206879526376724,-0.396362364292145 ,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.889981806278229,0.204838335514069,-0.407398611307144 ,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.0252151340246201,0.378374934196472,-0.9253089427948 ,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.234113723039627,0.373339533805847,-0.897668302059174 ,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.834647357463837,0.36496365070343,-0.412511020898819 ,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.81538712978363,-0.2979336977005,-0.496366053819656 ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.710737705230713,-0.0530968047678471,-0.701450347900391 ,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.81538712978363,-0.2979336977005,-0.496366053819656 ,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.706996381282806,0.174120202660561,-0.685447514057159 ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.486983984708786,0.772737681865692,-0.407090991735458 ,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.832928359508514,0.179307460784912,-0.523525714874268 ,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.336488217115402,0.925924956798553,-0.17157706618309 ,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.486983984708786,0.772737681865692,-0.407090991735458 ,-0.535965800285339,0.788156151771545,-0.30257323384285,0.0764780566096306,-0.225457280874252,-0.971246659755707 ,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773 ,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,0.0764780566096306,-0.225457280874252,-0.971246659755707 ,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.238240316510201,-0.0322862826287746,-0.970669448375702 ,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.798387050628662,0.133906185626984,-0.587066650390625 ,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.73286509513855,0.247602537274361,-0.633720517158508 ,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.0642701610922813,-0.378672003746033,-0.923296749591827 ,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.493558466434479,-0.160849839448929,-0.854708909988403 ,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.0824775397777557,-0.385316282510757,-0.919091284275055 ,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.539451956748962,-0.0545219406485558,-0.840249359607697 ,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.647741854190826,-0.201575800776482,-0.7347092628479 ,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.11159410327673,-0.287050694227219,-0.951393008232117 ,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.122972406446934,-0.410810470581055,-0.903389453887939 ,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.658169209957123,-0.236423432826996,-0.714784801006317 ,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.213652208447456,-0.249391779303551,-0.944540321826935 ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.710200548171997,-0.0193932019174099,-0.703732252120972 ,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.238240316510201,-0.0322862826287746,-0.970669448375702 ,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.729262590408325,0.181498125195503,-0.659723043441772 ,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.258904993534088,0.225121468305588,-0.939302146434784 ,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.705344617366791,0.3143090903759,-0.635372936725616 ,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.234113723039627,0.373339533805847,-0.897668302059174 ,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.6525519490242,0.396776258945465,-0.645557582378387 ,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.240688547492027,0.458865880966187,-0.855284214019775 ,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.654150426387787,0.449408560991287,-0.608374178409576 ,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.388578176498413,0.0904658958315849,-0.916963994503021 ,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.690211474895477,-0.193527087569237,-0.69724839925766 ,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.706996381282806,0.174120202660561,-0.685447514057159 ,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.434679806232452,-0.159963503479958,-0.886264741420746 ,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.460297226905823,0.136182025074959,-0.877257645130157 ,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.486983984708786,0.772737681865692,-0.407090991735458 ,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.535482585430145,0.550125539302826,-0.640796601772308 ,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.486983984708786,0.772737681865692,-0.407090991735458 ,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.00152458809316158,-0.818883240222931,0.573958158493042 ,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.160209238529205,-0.537021696567535,0.828215360641479 ,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0412573479115963,-0.771816492080688,0.634505391120911 ,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0504573062062263,-0.359267920255661,0.931869447231293 ,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.51021933555603,-0.415738612413406,0.752886176109314 ,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.722804188728333,-0.031068803742528,0.690354108810425 ,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.459984451532364,-0.0801213979721069,0.884304702281952 ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.47534304857254,0.696664929389954,0.537314653396606 ,-0.285846680402756,0.740470588207245,0.608272194862366,-0.559998273849487,0.512845575809479,0.65068531036377 ,-0.47534304857254,0.696664929389954,0.537314653396606,-0.324628859758377,0.674010813236237,0.663570284843445 ,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.977315187454224,0.206456959247589,-0.0472285002470016 ,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.898467183113098,-0.361167401075363,-0.249629408121109 ,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.889225006103516,0.236249953508377,-0.391745924949646 ,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.849872410297394,-0.222603037953377,-0.477665901184082 ,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.834647357463837,0.36496365070343,-0.412511020898819 ,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.710737705230713,-0.0530968047678471,-0.701450347900391 ,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.388578176498413,0.0904658958315849,-0.916963994503021 ,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.654150426387787,0.449408560991287,-0.608374178409576 ,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.217749357223511,0.0478734634816647,-0.974829912185669 ,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.251288145780563,0.529204964637756,-0.810429751873016 ,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.217749357223511,0.0478734634816647,-0.974829912185669 ,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-1.63649360729323e-008,0.470822811126709,-0.882227778434753 ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.893712103366852,0.0450193509459496,-0.446376502513886 ,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.798387050628662,0.133906185626984,-0.587066650390625 ,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.762536406517029,0.295603901147842,-0.57546204328537 ,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.798387050628662,0.133906185626984,-0.587066650390625 ,0.913829922676086,-0.341083079576492,-0.220402225852013,0.663747429847717,-0.717649459838867,-0.210757240653038 ,0.698322951793671,-0.715752601623535,0.00657681748270988,0.969441294670105,-0.244898587465286,0.0144304987043142 ,0.437422394752502,-0.487632155418396,-0.755563676357269,0.834830164909363,-0.436789900064468,-0.335072010755539 ,0.767184436321259,-0.520890653133392,-0.374300688505173,0.381186455488205,-0.513081967830658,-0.769053816795349 ,0.734110653400421,-0.4181247651577,-0.535026371479034,0.913829922676086,-0.341083079576492,-0.220402225852013 ,0.834830164909363,-0.436789900064468,-0.335072010755539,0.437422394752502,-0.487632155418396,-0.755563676357269 ,0.498120248317719,-0.335890352725983,-0.799408435821533,0.663747429847717,-0.717649459838867,-0.210757240653038 ,0.913829922676086,-0.341083079576492,-0.220402225852013,0.734110653400421,-0.4181247651577,-0.535026371479034 ,0.471433281898499,-0.76721602678299,-0.434891045093536,-0.0466683618724346,0.500033855438232,-0.864747524261475 ,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,9.78030900711246e-009,0.344052970409393,-0.93895024061203 ,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.0252151340246201,0.378374934196472,-0.9253089427948 ,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-5.31019793470477e-007,0.257037252187729,-0.966401517391205 ,0.00141346117015928,0.303658157587051,-0.95278000831604,0.129383936524391,-0.521730244159698,-0.843242168426514 ,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,3.42403474462571e-008,-0.837808728218079,-0.545963823795319 ,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536 ,0.252460122108459,-0.750463306903839,-0.61079353094101,3.42403474462571e-008,-0.837808728218079,-0.545963823795319 ,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,0.663747429847717,-0.717649459838867,-0.210757240653038 ,0.471433281898499,-0.76721602678299,-0.434891045093536,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736 ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048 ,0.698322951793671,-0.715752601623535,0.00657681748270988,0.663747429847717,-0.717649459838867,-0.210757240653038 ,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048 ,-0.00150869158096612,-0.98975282907486,0.142783313989639,0.552965581417084,-0.801727950572968,0.226851031184196 ,0.698322951793671,-0.715752601623535,0.00657681748270988,-0.889981806278229,0.204838335514069,-0.407398611307144 ,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.654150426387787,0.449408560991287,-0.608374178409576 ,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.909943282604218,0.190858140587807,-0.368207067251205 ,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.6525519490242,0.396776258945465,-0.645557582378387 ,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.908670663833618,0.161942407488823,-0.384827554225922 ,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.705344617366791,0.3143090903759,-0.635372936725616 ,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.893712103366852,0.0450193509459496,-0.446376502513886 ,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.729262590408325,0.181498125195503,-0.659723043441772 ,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.836360037326813,-0.0850801542401314,-0.541537880897522 ,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.710200548171997,-0.0193932019174099,-0.703732252120972 ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.836360037326813,-0.0850801542401314,-0.541537880897522 ,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.647741854190826,-0.201575800776482,-0.7347092628479 ,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.715955674648285,0.135700687766075,-0.684830486774445 ,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.493558466434479,-0.160849839448929,-0.854708909988403 ,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.693207740783691,0.00517747504636645,-0.720719218254089 ,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.493558466434479,-0.160849839448929,-0.854708909988403 ,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.836360037326813,-0.0850801542401314,-0.541537880897522 ,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.595030784606934,-0.0228520985692739,-0.80337792634964 ,-0.721792817115784,0.204645067453384,-0.661162257194519,0.166143178939819,-0.158774629235268,0.973235368728638 ,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.14869236946106,-0.0228312611579895,0.988619923591614 ,0.119991220533848,0.0380257852375507,0.992046475410461,-0.34188050031662,0.0427594222128391,0.938770115375519 ,0.119991220533848,0.0380257852375507,0.992046475410461,-0.14869236946106,-0.0228312611579895,0.988619923591614 ,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.0504573062062263,-0.359267920255661,0.931869447231293 ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0969914272427559,-0.0219030473381281,0.99504417181015 ,0.0323158428072929,-0.124152012169361,0.991736829280853,0.29104819893837,-0.456484824419022,0.840780913829803 ,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.0323158428072929,-0.124152012169361,0.991736829280853 ,0.166143178939819,-0.158774629235268,0.973235368728638,0.29104819893837,-0.456484824419022,0.840780913829803 ,0.166143178939819,-0.158774629235268,0.973235368728638,0.244560360908508,-0.223172500729561,0.943601787090302 ,0.320217043161392,-0.31071874499321,0.894938468933105,0.555963099002838,-0.328692525625229,0.76345682144165 ,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.0969914272427559,-0.0219030473381281,0.99504417181015 ,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.896749377250671,0.217612341046333,0.3853380382061 ,-0.791948556900024,0.189529091119766,0.580427587032318,-0.857216417789459,0.268806040287018,0.43923032283783 ,-0.542048811912537,0.261238425970078,0.79870992898941,-0.856140553951263,0.267054259777069,0.442386031150818 ,-0.857216417789459,0.268806040287018,0.43923032283783,-0.46170049905777,0.186353012919426,0.867240011692047 ,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.722804188728333,-0.031068803742528,0.690354108810425 ,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.85723865032196,-0.337598741054535,0.388804644346237 ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.89384138584137,0.0922480821609497,0.438791304826736 ,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.47534304857254,0.696664929389954,0.537314653396606 ,-0.559998273849487,0.512845575809479,0.65068531036377,-0.658022820949554,0.640722334384918,0.395576566457748 ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.47534304857254,0.696664929389954,0.537314653396606 ,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.915939331054688,0.209013342857361,-0.342590838670731 ,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.939296424388886,0.188786894083023,-0.286498993635178 ,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.889225006103516,0.236249953508377,-0.391745924949646 ,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.898467183113098,-0.361167401075363,-0.249629408121109 ,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.848252356052399,-0.297393381595612,-0.438206702470779 ,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.876467823982239,-0.40311262011528,-0.263257294893265 ,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.938374042510986,0.216587886214256,-0.269339561462402 ,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.822116851806641,-0.369756579399109,-0.432901799678802 ,-0.947259664535522,0.288537085056305,0.139446943998337,-0.927313208580017,0.3043152987957,-0.217904642224312 ,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.985917925834656,0.0740947499871254,0.149919137358665 ,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.988040089607239,-0.0323765277862549,0.150760009884834 ,-0.91884845495224,0.158920049667358,0.361195176839828,-0.916763663291931,0.137710228562355,0.374940365552902 ,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.981611013412476,0.117763727903366,-0.150238215923309 ,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395 ,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.981611013412476,0.117763727903366,-0.150238215923309 ,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.988040089607239,-0.0323765277862549,0.150760009884834 ,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.894481837749481,0.206879526376724,-0.396362364292145 ,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.890709757804871,0.27239003777504,-0.363922744989395 ,0.928109109401703,-0.270218104124069,0.256116449832916,0.942102074623108,-0.334151595830917,-0.0280432906001806 ,0.969441294670105,-0.244898587465286,0.0144304987043142,0.942616164684296,-0.229998171329498,0.242023915052414 ,0.536377429962158,-0.345477372407913,0.770029008388519,0.359952032566071,-0.103429064154625,0.927219986915588 ,0.292623817920685,0.00810971390455961,0.956193268299103,0.454795598983765,-0.290122002363205,0.842015504837036 ,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0589314736425877,-0.0994917079806328,0.993291735649109 ,0.359952032566071,-0.103429064154625,0.927219986915588,0.536377429962158,-0.345477372407913,0.770029008388519 ,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.00124295917339623,-0.0901384949684143,0.995928466320038 ,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.0599330253899097,-0.274288892745972,0.95977795124054 ,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.480668127536774,-0.309450268745422,0.820486843585968 ,-0.300837725400925,0.085910752415657,0.949797868728638,-0.296950221061707,-0.0679281502962112,0.952473819255829 ,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.683673858642578,-0.293579787015915,0.668132424354553 ,-0.542048811912537,0.261238425970078,0.79870992898941,-0.300837725400925,0.085910752415657,0.949797868728638 ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.871616542339325,-0.254917442798615,0.418690472841263 ,-0.856140553951263,0.267054259777069,0.442386031150818,-0.542048811912537,0.261238425970078,0.79870992898941 ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.949352085590363,0.231479719281197,0.21248009800911 ,-0.856140553951263,0.267054259777069,0.442386031150818,-0.871616542339325,-0.254917442798615,0.418690472841263 ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.934890508651733,-0.354153573513031,-0.0235587190836668 ,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.949352085590363,0.231479719281197,0.21248009800911 ,0.166143178939819,-0.158774629235268,0.973235368728638,0.369765430688858,-0.00654551573097706,0.929102063179016 ,0.244560360908508,-0.223172500729561,0.943601787090302,-0.941869378089905,-0.335682570934296,-0.0141169847920537 ,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.911426484584808,-0.347711831331253,-0.219996020197868 ,-0.837089002132416,-0.441800951957703,-0.322635918855667,0.942102074623108,-0.334151595830917,-0.0280432906001806 ,0.834830164909363,-0.436789900064468,-0.335072010755539,0.913829922676086,-0.341083079576492,-0.220402225852013 ,0.969441294670105,-0.244898587465286,0.0144304987043142,0.927110075950623,-0.224742949008942,-0.299929141998291 ,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.977872133255005,0.203673675656319,-0.0477813258767128 ,0.939878582954407,0.179825350642204,-0.290329366922379,-0.939296424388886,0.188786894083023,-0.286498993635178 ,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.945763826370239,0.294518440961838,-0.137075424194336 ,-0.977315187454224,0.206456959247589,-0.0472285002470016,0.862718880176544,0.197039529681206,-0.465716183185577 ,0.839759349822998,0.221470341086388,-0.495736926794052,0.830685615539551,0.156212329864502,-0.53437727689743 ,0.892053008079529,0.256361722946167,-0.372182875871658,0.889020264148712,0.213740766048431,-0.404917031526566 ,0.908465981483459,0.211989372968674,-0.360208302736282,0.904940068721771,0.195454493165016,-0.377996027469635 ,0.888135969638824,0.229056358337402,-0.3984315097332,0.848333179950714,-0.297908991575241,-0.43769970536232 ,0.927110075950623,-0.224742949008942,-0.299929141998291,0.898882806301117,0.175670132040977,-0.401434540748596 ,0.892053008079529,0.256361722946167,-0.372182875871658,0.839759349822998,0.221470341086388,-0.495736926794052 ,0.862718880176544,0.197039529681206,-0.465716183185577,0.889020264148712,0.213740766048431,-0.404917031526566 ,0.552965581417084,-0.801727950572968,0.226851031184196,0.0579886250197887,-0.947378635406494,0.314819037914276 ,0.569704055786133,-0.669814586639404,0.476220279932022,-0.00901283789426088,0.0965975746512413,0.995282709598541 ,0.0292022190988064,-0.160741657018662,0.98656439781189,-0.176305994391441,-0.141984179615974,0.974041402339935 ,-0.072829432785511,0.0172536037862301,0.99719512462616,0.742353081703186,0.249405577778816,0.621859073638916 ,0.562908291816711,0.161133006215096,0.810660421848297,0.810771644115448,0.203989744186401,0.54866886138916,-0.504790067672729 ,0.0473182201385498,0.861944317817688,-0.76946359872818,0.151790544390678,0.620391309261322,-0.623560965061188 ,0.103526078164577,0.774889707565308,-0.34188050031662,0.0427594222128391,0.938770115375519,-0.857216417789459 ,0.268806040287018,0.43923032283783,-0.791948556900024,0.189529091119766,0.580427587032318,-0.56521064043045 ,0.138002142310143,0.813321769237518,-0.46170049905777,0.186353012919426,0.867240011692047,0.830685615539551 ,0.156212329864502,-0.53437727689743,0.754355251789093,0.176875531673431,-0.632189214229584,0.808351874351501 ,-0.0360210724174976,-0.587596535682678,0.881142616271973,0.0315838828682899,-0.471794605255127,0.355752408504486 ,-0.498135715723038,-0.790759801864624,0.734110653400421,-0.4181247651577,-0.535026371479034,0.498120248317719 ,-0.335890352725983,-0.799408435821533,-0.122972406446934,-0.410810470581055,-0.903389453887939,0.355752408504486 ,-0.498135715723038,-0.790759801864624,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.129383936524391 ,-0.521730244159698,-0.843242168426514,0.252460122108459,-0.750463306903839,-0.61079353094101,0.355752408504486 ,-0.498135715723038,-0.790759801864624,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.295105874538422 ,-0.732439458370209,-0.613551139831543,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,1.08000335785619e-007 ,-0.503708183765411,-0.863873839378357,0.71757835149765,0.116429716348648,-0.686677098274231,0.754355251789093 ,0.176875531673431,-0.632189214229584,0.737981557846069,0.239907741546631,-0.630735695362091,0.74054491519928 ,0.170902013778687,-0.649912059307098,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.605917453765869 ,-0.0272433757781982,-0.795060873031616,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.754355251789093 ,0.176875531673431,-0.632189214229584,0.71757835149765,0.116429716348648,-0.686677098274231,0.808351874351501 ,-0.0360210724174976,-0.587596535682678,0.656103849411011,-0.195678874850273,-0.728860437870026,0.66176563501358 ,-0.249233901500702,-0.707070529460907,0.888135969638824,0.229056358337402,-0.3984315097332,0.908465981483459 ,0.211989372968674,-0.360208302736282,0.875346660614014,0.271785736083984,-0.399875849485397,0.847342550754547 ,0.298378229141235,-0.439296066761017,0.904940068721771,0.195454493165016,-0.377996027469635,0.908465981483459 ,0.211989372968674,-0.360208302736282,0.888135969638824,0.229056358337402,-0.3984315097332,0.898882806301117 ,0.175670132040977,-0.401434540748596,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.355752408504486 ,-0.498135715723038,-0.790759801864624,0.498120248317719,-0.335890352725983,-0.799408435821533,-0.0987945944070816 ,-0.283014118671417,-0.95401394367218,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934 ,-0.0228520985692739,-0.80337792634964,-0.11159410327673,-0.287050694227219,-0.951393008232117,-0.0987945944070816 ,-0.283014118671417,-0.95401394367218,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.595030784606934 ,-0.0228520985692739,-0.80337792634964,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.715955674648285 ,0.135700687766075,-0.684830486774445,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.721792817115784 ,0.204645067453384,-0.661162257194519,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.747396409511566 ,0.179795786738396,-0.639587461948395,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.748518824577332 ,-0.407584488391876,-0.523062586784363,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.295105874538422 ,-0.732439458370209,-0.613551139831543,0.205762028694153,-0.343506038188934,-0.91633266210556,0.142389953136444 ,-0.3092340528965,-0.940265595912933,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.154773816466331 ,-0.473390430212021,-0.867148518562317,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.295105874538422 ,-0.732439458370209,-0.613551139831543,-0.154773816466331,-0.473390430212021,-0.867148518562317,0.605917453765869 ,-0.0272433757781982,-0.795060873031616,0.142389953136444,-0.3092340528965,-0.940265595912933,0.205762028694153 ,-0.343506038188934,-0.91633266210556,0.656103849411011,-0.195678874850273,-0.728860437870026,0.808351874351501 ,-0.0360210724174976,-0.587596535682678,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.656103849411011 ,-0.195678874850273,-0.728860437870026,0.940263509750366,0.158270344138145,0.301421761512756,0.911828219890594 ,-0.323383867740631,0.252966731786728,0.924298286437988,-0.381513595581055,0.0109577048569918,0.97637003660202 ,0.214487105607986,0.0263973921537399,0.897881627082825,0.0853674784302711,0.4318807721138,0.86302787065506,-0.341093569993973 ,0.372609823942184,0.911828219890594,-0.323383867740631,0.252966731786728,0.940263509750366,0.158270344138145 ,0.301421761512756,0.824855744838715,-0.0143105983734131,0.565162122249603,0.804235875606537,-0.38592141866684 ,0.451961606740952,0.86302787065506,-0.341093569993973,0.372609823942184,0.897881627082825,0.0853674784302711 ,0.4318807721138,0.658608675003052,-0.082901194691658,0.747905075550079,0.63869446516037,-0.424023747444153,0.642085075378418 ,0.804235875606537,-0.38592141866684,0.451961606740952,0.824855744838715,-0.0143105983734131,0.565162122249603 ,0.403074562549591,-0.0995079353451729,0.909741222858429,0.477317273616791,-0.364241302013397,0.79968523979187 ,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079 ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.777780055999756,-0.164350166916847,0.606668949127197 ,0.477317273616791,-0.364241302013397,0.79968523979187,0.403074562549591,-0.0995079353451729,0.909741222858429 ,0.682068586349487,-0.309287667274475,0.662663996219635,0.777780055999756,-0.164350166916847,0.606668949127197 ,0.748501777648926,-0.0708362907171249,0.659338533878326,0.691345393657684,-0.0592475160956383,0.720091164112091 ,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.918076574802399,-0.319764405488968,0.234277844429016 ,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.871616542339325,-0.254917442798615,0.418690472841263 ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.695749223232269,-0.452543646097183,0.557796776294708 ,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.871616542339325,-0.254917442798615,0.418690472841263 ,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.480668127536774,-0.309450268745422,0.820486843585968 ,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.695749223232269,-0.452543646097183,0.557796776294708 ,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.51021933555603,-0.415738612413406,0.752886176109314 ,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.526136100292206,-0.358043670654297,0.77135306596756 ,0.198349118232727,-0.359346985816956,-0.911881268024445,0.304857552051544,-0.136514157056808,-0.942563354969025 ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.085550844669342,-0.179267361760139,-0.980073630809784 ,-0.183117777109146,0.0588014125823975,-0.981330871582031,0.304857552051544,-0.136514157056808,-0.942563354969025 ,0.220349878072739,-0.298315703868866,-0.928683817386627,-0.265993624925613,0.0903498530387878,-0.959731340408325 ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.677114307880402,0.387711197137833,-0.625456809997559 ,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.872953355312347,0.427382349967957,-0.235152706503868 ,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.349404841661453,-0.0127950254827738,-0.936884522438049 ,-0.265993624925613,0.0903498530387878,-0.959731340408325,0.220349878072739,-0.298315703868866,-0.928683817386627 ,0.5493523478508,-0.702752709388733,-0.452051609754562,0.318604946136475,-0.851775884628296,-0.415895074605942 ,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.126519411802292,-0.418506681919098,-0.899358093738556 ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.790130019187927,0.358856797218323,-0.496906787157059 ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.0690199434757233,-0.290056854486465,-0.954517304897308 ,0.220349878072739,-0.298315703868866,-0.928683817386627,0.56249988079071,-0.630179584026337,-0.535226583480835 ,0.5493523478508,-0.702752709388733,-0.452051609754562,0.126519411802292,-0.418506681919098,-0.899358093738556 ,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.633183777332306,0.444622397422791,-0.6335529088974 ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.0690199434757233,-0.290056854486465,-0.954517304897308 ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713 ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.220480233430862,-0.962971389293671,-0.155160069465637 ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.321904927492142,-0.23541721701622,-0.917036533355713 ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.633183777332306,0.444622397422791,-0.6335529088974 ,0.735884010791779,-0.676981329917908,0.0130754383280873,0.917286098003387,-0.397383034229279,0.0259414706379175 ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.321904927492142,-0.23541721701622,-0.917036533355713 ,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.684927523136139,0.406749725341797,-0.604507207870483 ,-0.6867835521698,0.410039186477661,-0.600163519382477,0.321904927492142,-0.23541721701622,-0.917036533355713 ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.907455027103424,-0.419752985239029,-0.0182434022426605 ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.0838128700852394,-0.573638498783112,-0.814809322357178 ,-0.698399066925049,0.385518401861191,-0.603004395961761,0.370425969362259,-0.053249154239893,-0.927334427833557 ,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.852042078971863,-0.144021943211555,-0.503271222114563 ,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.237571656703949,-0.289404422044754,0.92725658416748 ,-0.182237774133682,-0.768710494041443,0.613085329532623,0.343388766050339,-0.92741858959198,-0.148252636194229 ,-0.802604734897614,0.216235384345055,0.55593866109848,-0.902596533298492,-0.221002161502838,0.369428634643555 ,-0.182237774133682,-0.768710494041443,0.613085329532623,0.237571656703949,-0.289404422044754,0.92725658416748 ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.792753040790558,0.233859673142433,0.562896311283112 ,0.237571656703949,-0.289404422044754,0.92725658416748,0.209573119878769,-0.409179538488388,0.888060390949249 ,-0.183022558689117,-0.742925465106964,0.643866777420044,0.209573119878769,-0.409179538488388,0.888060390949249 ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.220480233430862,-0.962971389293671,-0.155160069465637 ,-0.730839848518372,0.374586492776871,0.570576965808868,0.209573119878769,-0.409179538488388,0.888060390949249 ,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.818624794483185,-0.0173483304679394,0.574066698551178 ,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.623242735862732,-0.753325045108795,-0.209928289055824 ,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.141052380204201,-0.502090394496918,-0.853234708309174 ,-0.141052380204201,-0.502090394496918,-0.853234708309174,0.0652027949690819,-0.225424140691757,-0.972076416015625 ,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.814637243747711,0.194269418716431,-0.546466410160065 ,0.747061431407928,-0.62068235874176,-0.238018155097961,0.910755693912506,-0.337876051664352,-0.237410709261894 ,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.0652027949690819,-0.225424140691757,-0.972076416015625 ,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.810490429401398,0.401368230581284,-0.426624894142151 ,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.1495750695467,-0.0865894258022308,-0.984951555728912 ,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.1495750695467,-0.0865894258022308,-0.984951555728912 ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.300238430500031,-0.930824100971222,-0.208382621407509 ,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.931690096855164,-0.183842733502388,-0.31329756975174 ,-0.821675598621368,0.388978660106659,-0.416587084531784,0.1495750695467,-0.0865894258022308,-0.984951555728912 ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.534395098686218,-0.306080341339111,0.787868499755859 ,0.0157063417136669,-0.81893128156662,0.573676645755768,0.300238430500031,-0.930824100971222,-0.208382621407509 ,0.0157063417136669,-0.81893128156662,0.573676645755768,0.534395098686218,-0.306080341339111,0.787868499755859 ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.781307756900787,-0.323809385299683,0.533578157424927 ,-0.567694067955017,0.240619167685509,0.787290215492249,0.534395098686218,-0.306080341339111,0.787868499755859 ,0.477158278226852,-0.397838234901428,0.783610045909882,-0.56154191493988,0.270268112421036,0.782065093517303 ,0.623242735862732,-0.753325045108795,-0.209928289055824,-0.024921914562583,-0.994488954544067,-0.101836577057838 ,-0.223028287291527,-0.612437725067139,0.758405148983002,0.477158278226852,-0.397838234901428,0.783610045909882 ,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.507044553756714,0.251941651105881,0.824276208877563 ,-0.559803783893585,0.448765695095062,0.696583867073059,0.477158278226852,-0.397838234901428,0.783610045909882 ,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.613874554634094,-0.719477951526642,-0.324822306632996 ,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.653539955615997,-0.718670427799225,-0.237483367323875 ,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.147622227668762,-0.275771498680115,-0.94981986284256 ,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.907855153083801,0.259428709745407,-0.329386949539185 ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.147622227668762,-0.275771498680115,-0.94981986284256 ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.878461718559265,0.420071333646774,-0.22769521176815 ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.279529839754105,-0.929970979690552,-0.238782465457916 ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.0946790054440498,-0.0982154458761215,-0.99065113067627 ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.967258095741272,-0.228260591626167,-0.110945627093315 ,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.0946790054440498,-0.0982154458761215,-0.99065113067627 ,0.205829456448555,-0.762141346931458,0.613819897174835,0.279529839754105,-0.929970979690552,-0.238782465457916 ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.674587190151215,-0.27459716796875,0.685221493244171 ,0.205829456448555,-0.762141346931458,0.613819897174835,0.674587190151215,-0.27459716796875,0.685221493244171 ,-0.394580245018005,0.233544617891312,0.888686299324036,-0.597855687141418,-0.328857451677322,0.731041252613068 ,0.678764045238495,-0.636029005050659,-0.367078334093094,0.631237089633942,-0.400684475898743,0.664072096347809 ,0.674587190151215,-0.27459716796875,0.685221493244171,0.833657681941986,-0.354278296232224,-0.423676431179047 ,-0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197 ,0.674587190151215,-0.27459716796875,0.685221493244171,0.631237089633942,-0.400684475898743,0.664072096347809 ,-0.326038300991058,0.243334606289864,0.913502752780914,-0.36957174539566,0.387512475252151,0.844541788101196 ,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461 ,0.113647989928722,-0.758261322975159,0.641968786716461,-0.462510108947754,-0.809054553508759,0.362650156021118 ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.326038300991058,0.243334606289864,0.913502752780914 ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.462510108947754,-0.809054553508759,0.362650156021118 ,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.980141282081604,0.198108091950417,0.00872699916362762 ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.568342566490173,-0.692033231258392,-0.445058077573776 ,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.534125924110413,-0.786291003227234,-0.310573488473892 ,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.400393456220627,-0.282469868659973,-0.8717200756073 ,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.980141282081604,0.198108091950417,0.00872699916362762 ,0.586962282657623,-0.660651743412018,-0.467989921569824,0.671555638313293,-0.521569073200226,-0.526287734508514 ,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.400393456220627,-0.282469868659973,-0.8717200756073 ,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.394356489181519,-0.149896875023842,-0.906649768352509 ,0.672275424003601,-0.513835847377777,-0.532933831214905,0.192592486739159,-0.95661062002182,-0.21864178776741 ,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.970863342285156,-0.156214520335197,0.181717962026596 ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.394356489181519,-0.149896875023842,-0.906649768352509 ,0.295449286699295,-0.702050924301147,0.647946059703827,0.192592486739159,-0.95661062002182,-0.21864178776741 ,0.672275424003601,-0.513835847377777,-0.532933831214905,0.78001469373703,-0.23672841489315,0.579255342483521 ,-0.142891898751259,0.310856729745865,0.939654171466827,-0.427836775779724,-0.217984616756439,0.877176403999329 ,0.295449286699295,-0.702050924301147,0.647946059703827,0.78001469373703,-0.23672841489315,0.579255342483521 ,0.568342566490173,-0.692033231258392,-0.445058077573776,0.297526687383652,-0.947863459587097,-0.114161059260368 ,0.702709794044495,-0.35005995631218,0.619400501251221,0.776305437088013,-0.254482686519623,0.576704740524292 ,0.702709794044495,-0.35005995631218,0.619400501251221,0.0647351443767548,0.381562024354935,0.922073602676392 ,-0.162613198161125,0.452644348144531,0.876738309860229,0.776305437088013,-0.254482686519623,0.576704740524292 ,0.0647351443767548,0.381562024354935,0.922073602676392,0.702709794044495,-0.35005995631218,0.619400501251221 ,0.679429173469543,-0.206046029925346,0.704216599464417,-0.0423084795475006,0.388709634542465,0.920388400554657 ,0.679429173469543,-0.206046029925346,0.704216599464417,0.692436456680298,-0.693914532661438,0.197520568966866 ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959 ,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.181978538632393,0.229496166110039,0.956146061420441 ,0.10479624569416,-0.144131794571877,0.983993768692017,0.228076592087746,-0.722928047180176,0.652193248271942 ,0.228076592087746,-0.722928047180176,0.652193248271942,0.10479624569416,-0.144131794571877,0.983993768692017 ,0.499378323554993,-0.200641006231308,0.842831194400787,0.759757459163666,-0.495759963989258,0.42070260643959 ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.139615654945374,-0.644082069396973,-0.752107560634613 ,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.610331058502197,-0.781622171401978,0.128696575760841 ,-0.90501195192337,0.21977810561657,0.364212721586227,-0.455443143844604,-0.0435190759599209,0.889200568199158 ,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.823581099510193,-0.405602097511292,-0.396485984325409 ,0.210858762264252,-0.745639085769653,-0.632108330726624,-0.783048808574677,-0.561382532119751,-0.267739146947861 ,-0.791083514690399,-0.304101139307022,-0.53076297044754,0.139615654945374,-0.644082069396973,-0.752107560634613 ,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.783048808574677,-0.561382532119751,-0.267739146947861 ,-0.883537590503693,0.207842156291008,0.419717639684677,-0.90501195192337,0.21977810561657,0.364212721586227 ,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.783048808574677,-0.561382532119751,-0.267739146947861 ,0.210858762264252,-0.745639085769653,-0.632108330726624,0.144954472780228,-0.95414674282074,-0.261901140213013 ,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.531814455986023,-0.819929480552673,0.211870223283768 ,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.883537590503693,0.207842156291008,0.419717639684677 ,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.531814455986023,-0.819929480552673,0.211870223283768 ,0.144954472780228,-0.95414674282074,-0.261901140213013,0.755722880363464,-0.635050356388092,0.159981176257133 ,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.531814455986023,-0.819929480552673,0.211870223283768 ,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.10662803798914,0.114874452352524,0.987640738487244 ,0.779160380363464,0.504416584968567,0.372119605541229,0.677094995975494,0.017529908567667,0.735686838626862 ,0.755722880363464,-0.635050356388092,0.159981176257133,0.980175495147705,-0.0617897920310497,-0.188249826431274 ,0.779160380363464,0.504416584968567,0.372119605541229,0.0438288599252701,0.716634690761566,0.696070194244385 ,-0.10662803798914,0.114874452352524,0.987640738487244,0.677094995975494,0.017529908567667,0.735686838626862 ,0.775657951831818,0.494642019271851,0.39202556014061,0.779160380363464,0.504416584968567,0.372119605541229,0.980175495147705 ,-0.0617897920310497,-0.188249826431274,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.779160380363464 ,0.504416584968567,0.372119605541229,0.775657951831818,0.494642019271851,0.39202556014061,-0.0499426536262035 ,0.692004799842834,0.720163226127625,0.0438288599252701,0.716634690761566,0.696070194244385,0.775603353977203 ,0.536381304264069,0.332768052816391,0.775657951831818,0.494642019271851,0.39202556014061,0.966551244258881,-0.0919508412480354 ,-0.239423617720604,0.944929540157318,-0.11514762789011,-0.306348145008087,0.775603353977203,0.536381304264069 ,0.332768052816391,-0.057441920042038,0.650170862674713,0.75761353969574,-0.0499426536262035,0.692004799842834 ,0.720163226127625,0.775657951831818,0.494642019271851,0.39202556014061,0.789509534835815,0.501795709133148,0.353377729654312 ,0.775603353977203,0.536381304264069,0.332768052816391,0.944929540157318,-0.11514762789011,-0.306348145008087 ,0.986938416957855,-0.10414332151413,-0.122909314930439,-0.057441920042038,0.650170862674713,0.75761353969574 ,0.775603353977203,0.536381304264069,0.332768052816391,0.789509534835815,0.501795709133148,0.353377729654312 ,0.0780415087938309,0.603700041770935,0.793382465839386,0.843434154987335,0.424213349819183,0.329638987779617 ,0.704449236392975,0.57451719045639,0.416750878095627,0.789509534835815,0.501795709133148,0.353377729654312,0.986938416957855 ,-0.10414332151413,-0.122909314930439,0.0780415087938309,0.603700041770935,0.793382465839386,0.789509534835815 ,0.501795709133148,0.353377729654312,0.704449236392975,0.57451719045639,0.416750878095627,0.075324609875679,0.630104899406433 ,0.772848010063171,0.950212061405182,0.303586721420288,0.0702292993664742,0.977863430976868,-0.0681029558181763 ,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.619699597358704,0.579480230808258 ,0.529315650463104,0.396490722894669,0.381844133138657,0.834859371185303,0.516311764717102,0.647967755794525 ,0.559964299201965,0.631212413311005,0.590215682983398,0.503206074237823,0.634808242321014,0.281936556100845 ,0.719395816326141,0.396490722894669,0.381844133138657,0.834859371185303,0.634808242321014,0.281936556100845 ,0.719395816326141,0.540099084377289,-0.0461409948766232,0.840335667133331,0.280613332986832,0.159042209386826 ,0.946552574634552,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.210858762264252,-0.745639085769653 ,-0.632108330726624,0.139615654945374,-0.644082069396973,-0.752107560634613,0.966551244258881,-0.0919508412480354 ,-0.239423617720604,0.210858762264252,-0.745639085769653,-0.632108330726624,0.980175495147705,-0.0617897920310497 ,-0.188249826431274,0.755722880363464,-0.635050356388092,0.159981176257133,0.144954472780228,-0.95414674282074 ,-0.261901140213013,0.944929540157318,-0.11514762789011,-0.306348145008087,0.139615654945374,-0.644082069396973 ,-0.752107560634613,0.119333148002625,-0.907433569431305,-0.402894467115402,0.986938416957855,-0.10414332151413 ,-0.122909314930439,0.648194909095764,-0.336823225021362,-0.682930052280426,0.56249988079071,-0.630179584026337 ,-0.535226583480835,0.220349878072739,-0.298315703868866,-0.928683817386627,0.304857552051544,-0.136514157056808 ,-0.942563354969025,0.318604946136475,-0.851775884628296,-0.415895074605942,0.5493523478508,-0.702752709388733 ,-0.452051609754562,0.643197417259216,-0.725296139717102,-0.245443657040596,0.166518494486809,-0.975531220436096 ,-0.14356318116188,-0.883537590503693,0.207842156291008,0.419717639684677,0.0438288599252701,0.716634690761566 ,0.696070194244385,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.90501195192337,0.21977810561657 ,0.364212721586227,0.0438288599252701,0.716634690761566,0.696070194244385,-0.883537590503693,0.207842156291008 ,0.419717639684677,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.10662803798914,0.114874452352524 ,0.987640738487244,-0.90501195192337,0.21977810561657,0.364212721586227,-0.057441920042038,0.650170862674713 ,0.75761353969574,0.0780415087938309,0.603700041770935,0.793382465839386,-0.455443143844604,-0.0435190759599209 ,0.889200568199158,0.075324609875679,0.630104899406433,0.772848010063171,-0.181978538632393,0.229496166110039 ,0.956146061420441,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.0780415087938309,0.603700041770935 ,0.793382465839386,-0.000278991181403399,0.484035164117813,0.875048518180847,0.0509466230869293,0.674606919288635 ,0.73641699552536,0.516311764717102,0.647967755794525,0.559964299201965,0.396490722894669,0.381844133138657,0.834859371185303 ,0.396490722894669,0.381844133138657,0.834859371185303,0.280613332986832,0.159042209386826,0.946552574634552 ,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.000278991181403399,0.484035164117813,0.875048518180847 ,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.891970098018646,0.451832711696625,-0.0153782712295651 ,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.899121463298798,0.345348745584488,-0.268914222717285 ,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538 ,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891970098018646,0.451832711696625,-0.0153782712295651 ,-0.850029647350311,0.48296907544136,0.210215270519257,-0.891911506652832,0.441495150327683,0.0978566035628319 ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.869016945362091,0.468115001916885,0.160243302583694 ,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.872280597686768,0.488854855298996,0.0121469330042601 ,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.911366164684296,0.266076982021332,0.31402975320816 ,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.836970150470734,0.473509907722473,-0.274352669715881 ,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.872280597686768,0.488854855298996,0.0121469330042601 ,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.256222367286682,0.552950799465179,0.792840123176575 ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.585053384304047,0.545464694499969,0.600150644779205 ,-0.162613198161125,0.452644348144531,0.876738309860229,-0.896232187747955,0.443575948476791,0.00286618177779019 ,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.126598969101906,0.370326429605484,0.920234203338623 ,-0.104846432805061,0.370796233415604,0.922776997089386,-0.906125068664551,0.423002034425735,-0.00257390737533569 ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.142891898751259,0.310856729745865,0.939654171466827 ,-0.142891898751259,0.310856729745865,0.939654171466827,-0.925728321075439,0.377710282802582,0.0190277993679047 ,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.427836775779724,-0.217984616756439,0.877176403999329 ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.79394793510437,0.450177043676376,0.408640831708908 ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.326038300991058,0.243334606289864,0.913502752780914 ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.826775729656219,0.455823004245758,0.329647213220596 ,-0.850029647350311,0.48296907544136,0.210215270519257,-0.869016945362091,0.468115001916885,0.160243302583694 ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.871611714363098,0.473160296678543,-0.128110930323601 ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.343200415372849,0.296563923358917,0.891214549541473 ,-0.350194752216339,0.292267352342606,0.889912009239197,-0.343200415372849,0.296563923358917,0.891214549541473 ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.878461718559265,0.420071333646774,-0.22769521176815 ,-0.350194752216339,0.292267352342606,0.889912009239197,-0.878461718559265,0.420071333646774,-0.22769521176815 ,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.394580245018005,0.233544617891312,0.888686299324036 ,-0.394580245018005,0.233544617891312,0.888686299324036,-0.904796302318573,0.359979897737503,-0.227504059672356 ,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.597855687141418,-0.328857451677322,0.731041252613068 ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.869016945362091,0.468115001916885,0.160243302583694 ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065 ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.507044553756714,0.251941651105881,0.824276208877563 ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.869016945362091,0.468115001916885,0.160243302583694 ,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.56154191493988,0.270268112421036,0.782065093517303 ,-0.559803783893585,0.448765695095062,0.696583867073059,-0.757650375366211,0.518597006797791,-0.39626133441925 ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.567694067955017,0.240619167685509,0.787290215492249 ,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.821675598621368,0.388978660106659,-0.416587084531784 ,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.781307756900787,-0.323809385299683,0.533578157424927 ,-0.581417798995972,0.228432759642601,0.780878841876984,-0.821675598621368,0.388978660106659,-0.416587084531784 ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.730839848518372,0.374586492776871,0.570576965808868 ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.6867835521698,0.410039186477661,-0.600163519382477 ,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.792753040790558,0.233859673142433,0.562896311283112 ,-0.748213112354279,0.285198539495468,0.599031686782837,-0.6867835521698,0.410039186477661,-0.600163519382477 ,-0.802604734897614,0.216235384345055,0.55593866109848,-0.792753040790558,0.233859673142433,0.562896311283112 ,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.698399066925049,0.385518401861191,-0.603004395961761 ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.878819167613983,0.322898685932159,0.351302325725555 ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.585053384304047,0.545464694499969,0.600150644779205 ,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.735660195350647,0.260931700468063,-0.625074982643127 ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.265993624925613,0.0903498530387878,-0.959731340408325 ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.790130019187927,0.358856797218323,-0.496906787157059 ,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.265993624925613,0.0903498530387878,-0.959731340408325 ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.308326691389084,0.577942073345184,0.755590915679932 ,-0.25537496805191,0.596560716629028,0.760854065418243,-0.200460329651833,0.603900372982025,0.771440207958221 ,-0.308326691389084,0.577942073345184,0.755590915679932,-0.225308075547218,0.514127254486084,0.827592551708221 ,-0.313503563404083,0.434664905071259,0.844264149665833,-0.506461322307587,0.506999313831329,0.697458744049072 ,-0.693721890449524,0.488555252552032,0.529210448265076,-0.878819167613983,0.322898685932159,0.351302325725555 ,-0.6693514585495,0.480027586221695,0.567046880722046,-0.6203373670578,0.548794507980347,0.560362577438354,-0.566602885723114 ,0.588818848133087,0.576414406299591,-0.308326691389084,0.577942073345184,0.755590915679932,-0.506461322307587 ,0.506999313831329,0.697458744049072,-0.601623058319092,0.623578310012817,0.499199062585831,-0.308326691389084 ,0.577942073345184,0.755590915679932,-0.566602885723114,0.588818848133087,0.576414406299591,-0.6203373670578 ,0.548794507980347,0.560362577438354,-0.25537496805191,0.596560716629028,0.760854065418243,-0.6203373670578,0.548794507980347 ,0.560362577438354,-0.6693514585495,0.480027586221695,0.567046880722046,-0.256222367286682,0.552950799465179 ,0.792840123176575,-0.25537496805191,0.596560716629028,0.760854065418243,-0.737847745418549,0.550981104373932 ,0.389872461557388,-0.566602885723114,0.588818848133087,0.576414406299591,-0.601623058319092,0.623578310012817 ,0.499199062585831,-0.73642486333847,0.608879089355469,0.294863820075989,-0.566602885723114,0.588818848133087 ,0.576414406299591,-0.737847745418549,0.550981104373932,0.389872461557388,-0.693721890449524,0.488555252552032 ,0.529210448265076,-0.6203373670578,0.548794507980347,0.560362577438354,-0.737847745418549,0.550981104373932 ,0.389872461557388,-0.802789449691772,0.535418033599854,0.26240548491478,-0.826775729656219,0.455823004245758 ,0.329647213220596,-0.724430322647095,0.542059719562531,0.425877869129181,-0.724430322647095,0.542059719562531 ,0.425877869129181,-0.79394793510437,0.450177043676376,0.408640831708908,-0.525893211364746,0.411127626895905 ,0.744587421417236,-0.693721890449524,0.488555252552032,0.529210448265076,-0.802789449691772,0.535418033599854 ,0.26240548491478,-0.846407413482666,0.503773093223572,0.17264749109745,-0.891911506652832,0.441495150327683 ,0.0978566035628319,-0.850029647350311,0.48296907544136,0.210215270519257,-0.887826502323151,0.459839731454849 ,0.0176490340381861,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.911366164684296,0.266076982021332 ,0.31402975320816,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.891970098018646,0.451832711696625 ,-0.0153782712295651,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891911506652832,0.441495150327683 ,0.0978566035628319,-0.846407413482666,0.503773093223572,0.17264749109745,-0.846407413482666,0.503773093223572 ,0.17264749109745,-0.73642486333847,0.608879089355469,0.294863820075989,-0.860682129859924,0.507934510707855 ,-0.0350551940500736,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.908803284168243,0.416819602251053 ,-0.018383901566267,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.836941063404083,0.479608535766602 ,-0.263638645410538,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.724430322647095,0.542059719562531 ,0.425877869129181,-0.826775729656219,0.455823004245758,0.329647213220596,-0.948099076747894,0.317963510751724 ,0.00271255942061543,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453 ,0.425844460725784,-0.79394793510437,0.450177043676376,0.408640831708908,-0.948099076747894,0.317963510751724 ,0.00271255942061543,-0.907855153083801,0.259428709745407,-0.329386949539185,0.643197417259216,-0.725296139717102 ,-0.245443657040596,0.5493523478508,-0.702752709388733,-0.452051609754562,0.56249988079071,-0.630179584026337 ,-0.535226583480835,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982 ,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018,0.56249988079071,-0.630179584026337 ,-0.535226583480835,0.648194909095764,-0.336823225021362,-0.682930052280426,0.515248417854309,-0.441880226135254 ,-0.734343886375427,0.648194909095764,-0.336823225021362,-0.682930052280426,0.304857552051544,-0.136514157056808 ,-0.942563354969025,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.0423084795475006,0.388709634542465 ,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.499378323554993,-0.200641006231308 ,0.842831194400787,-0.155946508049965,0.418714195489883,0.894627928733826,0.10479624569416,-0.144131794571877 ,0.983993768692017,-0.213889330625534,0.483835697174072,0.848619103431702,-0.155946508049965,0.418714195489883 ,0.894627928733826,0.499378323554993,-0.200641006231308,0.842831194400787,0.516311764717102,0.647967755794525 ,0.559964299201965,0.0509466230869293,0.674606919288635,0.73641699552536,0.075324609875679,0.630104899406433 ,0.772848010063171,0.704449236392975,0.57451719045639,0.416750878095627,-0.735660195350647,0.260931700468063 ,-0.625074982643127,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.931574642658234,0.319444477558136 ,-0.173562213778496,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.872953355312347,0.427382349967957 ,-0.235152706503868,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.899121463298798,0.345348745584488 ,-0.268914222717285,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.872953355312347,0.427382349967957 ,-0.235152706503868,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.836941063404083,0.479608535766602 ,-0.263638645410538,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602 ,-0.263638645410538,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.790130019187927,0.358856797218323 ,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,0.745758533477783,-0.330089628696442 ,-0.578692495822906,0.810982346534729,-0.364237248897552,-0.457863301038742,0.919881999492645,-0.0601645521819592 ,-0.387552946805954,0.237571656703949,-0.289404422044754,0.92725658416748,0.917286098003387,-0.397383034229279 ,0.0259414706379175,0.735884010791779,-0.676981329917908,0.0130754383280873,0.209573119878769,-0.409179538488388 ,0.888060390949249,0.747061431407928,-0.62068235874176,-0.238018155097961,0.477158278226852,-0.397838234901428 ,0.783610045909882,0.534395098686218,-0.306080341339111,0.787868499755859,0.910755693912506,-0.337876051664352 ,-0.237410709261894,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.147622227668762,-0.275771498680115 ,-0.94981986284256,0.678764045238495,-0.636029005050659,-0.367078334093094,0.833657681941986,-0.354278296232224 ,-0.423676431179047,0.631237089633942,-0.400684475898743,0.664072096347809,0.613874554634094,-0.719477951526642 ,-0.324822306632996,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.113647989928722,-0.758261322975159 ,0.641968786716461,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.916209638118744,0.399763643741608 ,-0.0273665990680456,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842 ,-0.906649768352509,0.586962282657623,-0.660651743412018,-0.467989921569824,0.776305437088013,-0.254482686519623 ,0.576704740524292,0.78001469373703,-0.23672841489315,0.579255342483521,0.671555638313293,-0.521569073200226 ,-0.526287734508514,0.78001469373703,-0.23672841489315,0.579255342483521,0.776305437088013,-0.254482686519623 ,0.576704740524292,-0.126598969101906,0.370326429605484,0.920234203338623,-0.104846432805061,0.370796233415604 ,0.922776997089386,-0.126598969101906,0.370326429605484,0.920234203338623,-0.916209638118744,0.399763643741608 ,-0.0273665990680456,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.104846432805061,0.370796233415604 ,0.922776997089386,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.820966601371765,0.385130524635315 ,-0.421530872583389,-0.567694067955017,0.240619167685509,0.787290215492249,-0.56154191493988,0.270268112421036 ,0.782065093517303,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.852042078971863,-0.144021943211555 ,-0.503271222114563,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.802604734897614,0.216235384345055 ,0.55593866109848,0.704449236392975,0.57451719045639,0.416750878095627,0.843434154987335,0.424213349819183,0.329638987779617 ,0.631212413311005,0.590215682983398,0.503206074237823,0.516311764717102,0.647967755794525,0.559964299201965 ,0.741024434566498,0.216318398714066,0.635680079460144,0.716558694839478,-0.309423923492432,0.625140368938446 ,0.540099084377289,-0.0461409948766232,0.840335667133331,0.634808242321014,0.281936556100845,0.719395816326141 ,0.631212413311005,0.590215682983398,0.503206074237823,0.619699597358704,0.579480230808258,0.529315650463104 ,0.741024434566498,0.216318398714066,0.635680079460144,0.634808242321014,0.281936556100845,0.719395816326141 ,0.843434154987335,0.424213349819183,0.329638987779617,0.906101286411285,-0.389416426420212,-0.165334045886993 ,0.950212061405182,0.303586721420288,0.0702292993664742,0.619699597358704,0.579480230808258,0.529315650463104 ,-0.213889330625534,0.483835697174072,0.848619103431702,0.075324609875679,0.630104899406433,0.772848010063171 ,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221 ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.000278991181403399,0.484035164117813,0.875048518180847 ,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.313503563404083,0.434664905071259,0.844264149665833 ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.893975257873535,0.250766932964325,-0.371381372213364 ,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.0690199434757233,-0.290056854486465,-0.954517304897308 ,-0.349404841661453,-0.0127950254827738,-0.936884522438049,0.126519411802292,-0.418506681919098,-0.899358093738556 ,0.210187539458275,-0.419684708118439,-0.882998287677765,0.318604946136475,-0.851775884628296,-0.415895074605942 ,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942 ,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.0690199434757233,-0.290056854486465,-0.954517304897308 ,0.735884010791779,-0.676981329917908,0.0130754383280873,0.321904927492142,-0.23541721701622,-0.917036533355713 ,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713 ,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.713936686515808,0.496329486370087,-0.493914365768433 ,-0.684927523136139,0.406749725341797,-0.604507207870483,0.370425969362259,-0.053249154239893,-0.927334427833557 ,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.0838128700852394,-0.573638498783112,-0.814809322357178 ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.541915059089661,-0.82688319683075,-0.150307148694992 ,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.0838128700852394,-0.573638498783112,-0.814809322357178 ,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.541915059089661,-0.82688319683075,-0.150307148694992 ,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.182237774133682,-0.768710494041443,0.613085329532623 ,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.541915059089661,-0.82688319683075,-0.150307148694992 ,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.852042078971863,-0.144021943211555,-0.503271222114563 ,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.902596533298492,-0.221002161502838,0.369428634643555 ,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.917286098003387,-0.397383034229279,0.0259414706379175 ,0.237571656703949,-0.289404422044754,0.92725658416748,0.237571656703949,-0.289404422044754,0.92725658416748 ,-0.792753040790558,0.233859673142433,0.562896311283112,-0.802604734897614,0.216235384345055,0.55593866109848 ,0.209573119878769,-0.409179538488388,0.888060390949249,0.735884010791779,-0.676981329917908,0.0130754383280873 ,0.676666736602783,-0.736289203166962,0.000588160357438028,-0.748213112354279,0.285198539495468,0.599031686782837 ,0.209573119878769,-0.409179538488388,0.888060390949249,-0.730839848518372,0.374586492776871,0.570576965808868 ,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.183022558689117,-0.742925465106964,0.643866777420044 ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838 ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.0995585918426514,-0.971274793148041,-0.216132834553719 ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838 ,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.994495153427124,-0.0799508094787598,0.0677299797534943 ,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.910764098167419,0.385902374982834,-0.146928876638412 ,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.541550755500793,-0.826843023300171,-0.151833668351173 ,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.0995585918426514,-0.971274793148041,-0.216132834553719 ,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942 ,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.541550755500793,-0.826843023300171,-0.151833668351173 ,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.994495153427124,-0.0799508094787598,0.0677299797534943 ,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.911366164684296,0.266076982021332,0.31402975320816 ,0.747061431407928,-0.62068235874176,-0.238018155097961,0.0652027949690819,-0.225424140691757,-0.972076416015625 ,0.623242735862732,-0.753325045108795,-0.209928289055824,0.0652027949690819,-0.225424140691757,-0.972076416015625 ,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.757650375366211,0.518597006797791,-0.39626133441925 ,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.821675598621368,0.388978660106659,-0.416587084531784 ,-0.820966601371765,0.385130524635315,-0.421530872583389,0.893890082836151,-0.378993809223175,-0.239424884319305 ,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.910755693912506,-0.337876051664352,-0.237410709261894 ,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.300238430500031,-0.930824100971222,-0.208382621407509 ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.931690096855164,-0.183842733502388,-0.31329756975174 ,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.536295533180237,-0.842644929885864,-0.0483388155698776 ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.300238430500031,-0.930824100971222,-0.208382621407509 ,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.781307756900787,-0.323809385299683,0.533578157424927 ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.0157063417136669,-0.81893128156662,0.573676645755768 ,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.781307756900787,-0.323809385299683,0.533578157424927 ,-0.931690096855164,-0.183842733502388,-0.31329756975174,0.534395098686218,-0.306080341339111,0.787868499755859 ,0.893890082836151,-0.378993809223175,-0.239424884319305,0.910755693912506,-0.337876051664352,-0.237410709261894 ,-0.581417798995972,0.228432759642601,0.780878841876984,0.534395098686218,-0.306080341339111,0.787868499755859 ,-0.567694067955017,0.240619167685509,0.787290215492249,0.623242735862732,-0.753325045108795,-0.209928289055824 ,0.477158278226852,-0.397838234901428,0.783610045909882,0.747061431407928,-0.62068235874176,-0.238018155097961 ,-0.56154191493988,0.270268112421036,0.782065093517303,0.477158278226852,-0.397838234901428,0.783610045909882 ,-0.559803783893585,0.448765695095062,0.696583867073059,0.00529748247936368,-0.99651163816452,0.0832859799265862 ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.210238441824913,-0.975585281848907,0.0635072365403175 ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.00529748247936368,-0.99651163816452,0.0832859799265862 ,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.929436683654785,-0.0642196834087372,0.36335015296936 ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.507044553756714,0.251941651105881,0.824276208877563 ,-0.507044553756714,0.251941651105881,0.824276208877563,-0.223028287291527,-0.612437725067139,0.758405148983002 ,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875 ,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.223028287291527,-0.612437725067139,0.758405148983002 ,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.929436683654785,-0.0642196834087372,0.36335015296936 ,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.948099076747894,0.317963510751724,0.00271255942061543 ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.929436683654785,-0.0642196834087372,0.36335015296936 ,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.653539955615997,-0.718670427799225,-0.237483367323875 ,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.653539955615997,-0.718670427799225,-0.237483367323875 ,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.024921914562583,-0.994488954544067,-0.101836577057838 ,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.147622227668762,-0.275771498680115,-0.94981986284256 ,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256 ,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.871611714363098,0.473160296678543,-0.128110930323601 ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.904796302318573,0.359979897737503,-0.227504059672356 ,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068 ,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.833657681941986,-0.354278296232224,-0.423676431179047 ,-0.382496774196625,-0.602528691291809,-0.700468003749847,0.279529839754105,-0.929970979690552,-0.238782465457916 ,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.967258095741272,-0.228260591626167,-0.110945627093315 ,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.464792013168335,-0.880890548229218,0.0894443169236183 ,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.279529839754105,-0.929970979690552,-0.238782465457916 ,0.205829456448555,-0.762141346931458,0.613819897174835,-0.597855687141418,-0.328857451677322,0.731041252613068 ,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.205829456448555,-0.762141346931458,0.613819897174835 ,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.597855687141418,-0.328857451677322,0.731041252613068 ,-0.967258095741272,-0.228260591626167,-0.110945627093315,0.674587190151215,-0.27459716796875,0.685221493244171 ,0.828972637653351,-0.365704894065857,-0.423159956932068,0.833657681941986,-0.354278296232224,-0.423676431179047 ,-0.394580245018005,0.233544617891312,0.888686299324036,0.674587190151215,-0.27459716796875,0.685221493244171 ,-0.350194752216339,0.292267352342606,0.889912009239197,0.613874554634094,-0.719477951526642,-0.324822306632996 ,0.631237089633942,-0.400684475898743,0.664072096347809,0.678764045238495,-0.636029005050659,-0.367078334093094 ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.343200415372849,0.296563923358917,0.891214549541473 ,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461 ,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909 ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.210238441824913,-0.975585281848907,0.0635072365403175 ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175 ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.00529748247936368,-0.99651163816452,0.0832859799265862 ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.403339564800262,-0.909987509250641,-0.0961246117949486 ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.297526687383652,-0.947863459587097,-0.114161059260368 ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.692436456680298,-0.693914532661438,0.197520568966866 ,-0.156990006566048,-0.969383895397186,0.188809439539909,0.297526687383652,-0.947863459587097,-0.114161059260368 ,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.586962282657623,-0.660651743412018,-0.467989921569824 ,-0.400393456220627,-0.282469868659973,-0.8717200756073,0.568342566490173,-0.692033231258392,-0.445058077573776 ,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.896232187747955,0.443575948476791,0.00286618177779019 ,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509 ,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.906125068664551,0.423002034425735,-0.00257390737533569 ,0.672275424003601,-0.513835847377777,-0.532933831214905,-0.394356489181519,-0.149896875023842,-0.906649768352509 ,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.600427627563477,-0.609243273735046,-0.517985820770264 ,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.496130347251892,-0.8139808177948,0.302142232656479 ,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.600427627563477,-0.609243273735046,-0.517985820770264 ,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.496130347251892,-0.8139808177948,0.302142232656479 ,0.192592486739159,-0.95661062002182,-0.21864178776741,0.295449286699295,-0.702050924301147,0.647946059703827 ,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.496130347251892,-0.8139808177948,0.302142232656479 ,0.295449286699295,-0.702050924301147,0.647946059703827,-0.496130347251892,-0.8139808177948,0.302142232656479 ,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.970863342285156,-0.156214520335197,0.181717962026596 ,0.78001469373703,-0.23672841489315,0.579255342483521,0.672275424003601,-0.513835847377777,-0.532933831214905 ,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.142891898751259,0.310856729745865,0.939654171466827 ,0.78001469373703,-0.23672841489315,0.579255342483521,-0.104846432805061,0.370796233415604,0.922776997089386 ,0.776305437088013,-0.254482686519623,0.576704740524292,0.586962282657623,-0.660651743412018,-0.467989921569824 ,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.126598969101906,0.370326429605484,0.920234203338623 ,0.776305437088013,-0.254482686519623,0.576704740524292,-0.162613198161125,0.452644348144531,0.876738309860229 ,0.692436456680298,-0.693914532661438,0.197520568966866,0.702709794044495,-0.35005995631218,0.619400501251221 ,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221 ,0.692436456680298,-0.693914532661438,0.197520568966866,0.679429173469543,-0.206046029925346,0.704216599464417 ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.692436456680298,-0.693914532661438,0.197520568966866 ,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.499378323554993,-0.200641006231308,0.842831194400787 ,0.679429173469543,-0.206046029925346,0.704216599464417,0.759757459163666,-0.495759963989258,0.42070260643959 ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.166270598769188,-0.985880434513092,0.0198450349271297 ,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297 ,0.119333148002625,-0.907433569431305,-0.402894467115402,-0.610331058502197,-0.781622171401978,0.128696575760841 ,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.228076592087746,-0.722928047180176,0.652193248271942 ,-0.610331058502197,-0.781622171401978,0.128696575760841,0.228076592087746,-0.722928047180176,0.652193248271942 ,0.166270598769188,-0.985880434513092,0.0198450349271297,-0.610331058502197,-0.781622171401978,0.128696575760841 ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.759757459163666,-0.495759963989258,0.42070260643959 ,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959 ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.228076592087746,-0.722928047180176,0.652193248271942 ,-0.823581099510193,-0.405602097511292,-0.396485984325409,0.139615654945374,-0.644082069396973,-0.752107560634613 ,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.90501195192337,0.21977810561657,0.364212721586227 ,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.791083514690399,-0.304101139307022,-0.53076297044754 ,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.755722880363464,-0.635050356388092,0.159981176257133 ,0.677094995975494,0.017529908567667,0.735686838626862,-0.10662803798914,0.114874452352524,0.987640738487244 ,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.677094995975494,0.017529908567667,0.735686838626862 ,0.950212061405182,0.303586721420288,0.0702292993664742,0.919881999492645,-0.0601645521819592,-0.387552946805954 ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144 ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.716558694839478,-0.309423923492432,0.625140368938446 ,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.139615654945374,-0.644082069396973,-0.752107560634613 ,0.944929540157318,-0.11514762789011,-0.306348145008087,0.906101286411285,-0.389416426420212,-0.165334045886993 ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.134703695774078,-0.930721879005432,-0.340017199516296 ,0.119333148002625,-0.907433569431305,-0.402894467115402,0.906101286411285,-0.389416426420212,-0.165334045886993 ,0.986938416957855,-0.10414332151413,-0.122909314930439,0.530287146568298,-0.713563740253448,-0.457845360040665 ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.134703695774078,-0.930721879005432,-0.340017199516296 ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.530287146568298,-0.713563740253448,-0.457845360040665 ,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.919881999492645,-0.0601645521819592,-0.387552946805954 ,0.946987807750702,-0.279256701469421,-0.158838823437691,0.977863430976868,-0.0681029558181763,0.197851315140724 ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.919881999492645,-0.0601645521819592,-0.387552946805954 ,0.65491396188736,-0.503674864768982,-0.563382029533386,0.65491396188736,-0.503674864768982,-0.563382029533386 ,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.530287146568298,-0.713563740253448,-0.457845360040665 ,0.648194909095764,-0.336823225021362,-0.682930052280426,0.745758533477783,-0.330089628696442,-0.578692495822906 ,0.65491396188736,-0.503674864768982,-0.563382029533386,0.530287146568298,-0.713563740253448,-0.457845360040665 ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386 ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.530287146568298,-0.713563740253448,-0.457845360040665 ,0.134703695774078,-0.930721879005432,-0.340017199516296,0.134703695774078,-0.930721879005432,-0.340017199516296 ,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018 ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.318604946136475,-0.851775884628296,-0.415895074605942 ,0.166518494486809,-0.975531220436096,-0.14356318116188,0.403339564800262,-0.909987509250641,-0.0961246117949486 ,0.643197417259216,-0.725296139717102,-0.245443657040596,0.751181125640869,-0.660092532634735,-0.00218340824358165 ,0.643197417259216,-0.725296139717102,-0.245443657040596,0.403339564800262,-0.909987509250641,-0.0961246117949486 ,0.210238441824913,-0.975585281848907,0.0635072365403175,0.643197417259216,-0.725296139717102,-0.245443657040596 ,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188 ,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.024921914562583,-0.994488954544067,-0.101836577057838 ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.751181125640869,-0.660092532634735,-0.00218340824358165 ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.166270598769188,-0.985880434513092,0.0198450349271297 ,0.414326965808868,-0.847513318061829,-0.331744402647018,0.751181125640869,-0.660092532634735,-0.00218340824358165 ,0.643197417259216,-0.725296139717102,-0.245443657040596,-0.90501195192337,0.21977810561657,0.364212721586227 ,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.057441920042038,0.650170862674713,0.75761353969574 ,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.677114307880402,0.387711197137833,-0.625456809997559 ,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881 ,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.752102732658386,0.351088106632233,-0.557744264602661 ,-0.585053384304047,0.545464694499969,0.600150644779205,0.0647351443767548,0.381562024354935,0.922073602676392 ,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.0423084795475006,0.388709634542465,0.920388400554657 ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.256222367286682,0.552950799465179,0.792840123176575 ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.213889330625534,0.483835697174072,0.848619103431702 ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.633183777332306,0.444622397422791,-0.6335529088974 ,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.752102732658386,0.351088106632233,-0.557744264602661 ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.896232187747955,0.443575948476791,0.00286618177779019 ,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229 ,0.0647351443767548,0.381562024354935,0.922073602676392,-0.585053384304047,0.545464694499969,0.600150644779205 ,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.878819167613983,0.322898685932159,0.351302325725555 ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.774610698223114,0.0345993041992188,0.631491184234619 ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.326038300991058,0.243334606289864,0.913502752780914 ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.25537496805191,0.596560716629028,0.760854065418243 ,-0.256222367286682,0.552950799465179,0.792840123176575,-0.739033222198486,0.522002279758453,0.425844460725784 ,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.36957174539566,0.387512475252151,0.844541788101196 ,-0.36957174539566,0.387512475252151,0.844541788101196,-0.326038300991058,0.243334606289864,0.913502752780914 ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.256222367286682,0.552950799465179,0.792840123176575 ,-0.155946508049965,0.418714195489883,0.894627928733826,-0.200460329651833,0.603900372982025,0.771440207958221 ,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.872280597686768,0.488854855298996,0.0121469330042601 ,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.757650375366211,0.518597006797791,-0.39626133441925 ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.814637243747711,0.194269418716431,-0.546466410160065 ,-0.806818068027496,0.571618735790253,0.149320676922798,-0.757650375366211,0.518597006797791,-0.39626133441925 ,-0.559803783893585,0.448765695095062,0.696583867073059,-0.559803783893585,0.448765695095062,0.696583867073059 ,-0.507044553756714,0.251941651105881,0.824276208877563,-0.806818068027496,0.571618735790253,0.149320676922798 ,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173 ,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.871611714363098,0.473160296678543,-0.128110930323601 ,-0.739033222198486,0.522002279758453,0.425844460725784,-0.907855153083801,0.259428709745407,-0.329386949539185 ,-0.162613198161125,0.452644348144531,0.876738309860229,-0.585053384304047,0.545464694499969,0.600150644779205 ,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.846407413482666,0.503773093223572,0.17264749109745 ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.73642486333847,0.608879089355469,0.294863820075989 ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.850029647350311,0.48296907544136,0.210215270519257 ,-0.826775729656219,0.455823004245758,0.329647213220596,0.515248417854309,-0.441880226135254,-0.734343886375427 ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.648194909095764,-0.336823225021362,-0.682930052280426 ,-0.802789449691772,0.535418033599854,0.26240548491478,-0.737847745418549,0.550981104373932,0.389872461557388 ,-0.73642486333847,0.608879089355469,0.294863820075989,-0.826775729656219,0.455823004245758,0.329647213220596 ,-0.743728399276733,0.346636980772018,0.571586310863495,-0.948099076747894,0.317963510751724,0.00271255942061543 ,-0.737847745418549,0.550981104373932,0.389872461557388,-0.724430322647095,0.542059719562531,0.425877869129181 ,-0.693721890449524,0.488555252552032,0.529210448265076,-0.525893211364746,0.411127626895905,0.744587421417236 ,-0.878819167613983,0.322898685932159,0.351302325725555,-0.693721890449524,0.488555252552032,0.529210448265076 ,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.878819167613983,0.322898685932159,0.351302325725555 ,-0.525893211364746,0.411127626895905,0.744587421417236,-0.907855153083801,0.259428709745407,-0.329386949539185 ,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.929436683654785,-0.0642196834087372,0.36335015296936 ,-0.911366164684296,0.266076982021332,0.31402975320816,-0.910764098167419,0.385902374982834,-0.146928876638412 ,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.994495153427124,-0.0799508094787598,0.0677299797534943 ,-0.911366164684296,0.266076982021332,0.31402975320816,-0.818624794483185,-0.0173483304679394,0.574066698551178 ,-0.730839848518372,0.374586492776871,0.570576965808868,-0.818624794483185,-0.0173483304679394,0.574066698551178 ,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.713936686515808,0.496329486370087,-0.493914365768433 ,-0.730839848518372,0.374586492776871,0.570576965808868,-0.872280597686768,0.488854855298996,0.0121469330042601 ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.814637243747711,0.194269418716431,-0.546466410160065 ,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.818624794483185,-0.0173483304679394,0.574066698551178 ,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.994495153427124,-0.0799508094787598,0.0677299797534943 ,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.156990006566048,-0.969383895397186,0.188809439539909 ,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.113647989928722,-0.758261322975159,0.641968786716461 ,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.462510108947754,-0.809054553508759,0.362650156021118 ,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.183117777109146,0.0588014125823975,-0.981330871582031 ,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.629925072193146,0.0149115975946188,-0.776512682437897 ,0.906101286411285,-0.389416426420212,-0.165334045886993,0.919881999492645,-0.0601645521819592,-0.387552946805954 ,0.950212061405182,0.303586721420288,0.0702292993664742,-0.181978538632393,0.229496166110039,0.956146061420441 ,-0.213889330625534,0.483835697174072,0.848619103431702,0.10479624569416,-0.144131794571877,0.983993768692017 ,0.075324609875679,0.630104899406433,0.772848010063171,-0.213889330625534,0.483835697174072,0.848619103431702 ,-0.181978538632393,0.229496166110039,0.956146061420441,0.919881999492645,-0.0601645521819592,-0.387552946805954 ,0.810982346534729,-0.364237248897552,-0.457863301038742,0.946987807750702,-0.279256701469421,-0.158838823437691 ,0.917286098003387,-0.397383034229279,0.0259414706379175,0.907455027103424,-0.419752985239029,-0.0182434022426605 ,0.370425969362259,-0.053249154239893,-0.927334427833557,0.843434154987335,0.424213349819183,0.329638987779617 ,0.619699597358704,0.579480230808258,0.529315650463104,0.631212413311005,0.590215682983398,0.503206074237823 ,0.986938416957855,-0.10414332151413,-0.122909314930439,0.906101286411285,-0.389416426420212,-0.165334045886993 ,0.843434154987335,0.424213349819183,0.329638987779617,-0.000278991181403399,0.484035164117813,0.875048518180847 ,-0.200460329651833,0.603900372982025,0.771440207958221,0.0509466230869293,0.674606919288635,0.73641699552536 ,-0.200460329651833,0.603900372982025,0.771440207958221,-0.000278991181403399,0.484035164117813,0.875048518180847 ,-0.225308075547218,0.514127254486084,0.827592551708221,-0.646084487438202,0.634681701660156,0.423973977565765 ,-0.601623058319092,0.623578310012817,0.499199062585831,-0.506461322307587,0.506999313831329,0.697458744049072 ,-0.636041522026062,0.455239772796631,0.623063385486603,-0.569389760494232,0.625551760196686,0.533366978168488 ,-0.458326160907745,0.410590946674347,0.788258969783783,-0.313503563404083,0.434664905071259,0.844264149665833 ,-0.126709908246994,0.488826990127563,0.863129615783691,0.126011043787003,0.287478059530258,0.949461758136749 ,-0.126709908246994,0.488826990127563,0.863129615783691,-0.313503563404083,0.434664905071259,0.844264149665833 ,-0.0354647859930992,0.343396455049515,0.938520729541779,0.540099084377289,-0.0461409948766232,0.840335667133331 ,0.498305976390839,-0.0497501380741596,0.865572690963745,0.126011043787003,0.287478059530258,0.949461758136749 ,0.280613332986832,0.159042209386826,0.946552574634552,0.809420764446259,-0.470037072896957,0.351998805999756 ,0.72262305021286,-0.326216995716095,0.609424650669098,0.716558694839478,-0.309423923492432,0.625140368938446 ,0.977863430976868,-0.0681029558181763,0.197851315140724,0.977863430976868,-0.0681029558181763,0.197851315140724 ,0.946987807750702,-0.279256701469421,-0.158838823437691,0.741691589355469,-0.67026162147522,0.0253561399877071 ,0.809420764446259,-0.470037072896957,0.351998805999756,0.946987807750702,-0.279256701469421,-0.158838823437691 ,0.810982346534729,-0.364237248897552,-0.457863301038742,0.582424879074097,-0.744178652763367,-0.327077031135559 ,0.741691589355469,-0.67026162147522,0.0253561399877071,0.810982346534729,-0.364237248897552,-0.457863301038742 ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.508804976940155,-0.739443361759186,-0.440841227769852 ,0.582424879074097,-0.744178652763367,-0.327077031135559,0.284903138875961,-0.719545781612396,-0.633311986923218 ,0.416897594928741,-0.716307580471039,-0.559553265571594,0.508804976940155,-0.739443361759186,-0.440841227769852 ,0.745758533477783,-0.330089628696442,-0.578692495822906,0.515248417854309,-0.441880226135254,-0.734343886375427 ,-0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.266710460186005,-0.229353681206703,-0.936088860034943 ,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.629925072193146,0.0149115975946188,-0.776512682437897 ,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.893975257873535,0.250766932964325,-0.371381372213364 ,-0.897937893867493,0.273350894451141,-0.344944715499878,-0.589546144008636,-0.0253028552979231,-0.807338297367096 ,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.897937893867493,0.273350894451141,-0.344944715499878 ,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.931574642658234,0.319444477558136,-0.173562213778496 ,-0.720763742923737,0.630777835845947,0.28743514418602,-0.847473680973053,0.530733585357666,-0.0104993488639593 ,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.73642486333847,0.608879089355469,0.294863820075989 ,-0.646084487438202,0.634681701660156,0.423973977565765,-0.720763742923737,0.630777835845947,0.28743514418602 ,-0.73642486333847,0.608879089355469,0.294863820075989,-0.601623058319092,0.623578310012817,0.499199062585831 ,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.918838560581207,0.321084290742874,-0.229435324668884 ,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.860682129859924,0.507934510707855,-0.0350551940500736 ,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.95041960477829,0.288634985685349,-0.115725472569466 ,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.899121463298798,0.345348745584488,-0.268914222717285 ,0.126011043787003,0.287478059530258,0.949461758136749,-0.0354647859930992,0.343396455049515,0.938520729541779 ,0.280613332986832,0.159042209386826,0.946552574634552,-0.506461322307587,0.506999313831329,0.697458744049072 ,-0.313503563404083,0.434664905071259,0.844264149665833,-0.458326160907745,0.410590946674347,0.788258969783783 ,-0.636041522026062,0.455239772796631,0.623063385486603,0.540099084377289,-0.0461409948766232,0.840335667133331 ,0.716558694839478,-0.309423923492432,0.625140368938446,0.72262305021286,-0.326216995716095,0.609424650669098 ,0.498305976390839,-0.0497501380741596,0.865572690963745,-0.000557535502593964,-0.634240567684174,-0.773135602474213 ,0.284903138875961,-0.719545781612396,-0.633311986923218,0.515248417854309,-0.441880226135254,-0.734343886375427 ,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784 ,-0.178665772080421,-0.378166645765305,-0.908332824707031,-0.000557535502593964,-0.634240567684174,-0.773135602474213 ,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784 ,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.273908197879791,-0.125118911266327,-0.953582465648651 ,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.273908197879791,-0.125118911266327,-0.953582465648651 ,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.178665772080421,-0.378166645765305,-0.908332824707031 ,0.280117779970169,0.669322490692139,0.688143491744995,0.458152443170547,0.667493462562561,0.586982846260071 ,0.562915802001953,0.509836494922638,0.650532484054565,0.291106730699539,0.735121071338654,0.612253129482269 ,-0.431082636117935,0.669595658779144,0.604821860790253,-0.285846680402756,0.740470588207245,0.608272194862366 ,-0.324628859758377,0.674010813236237,0.663570284843445,-0.658022820949554,0.640722334384918,0.395576566457748 ,-0.721357464790344,0.650649428367615,0.237273663282394,-0.557555019855499,0.7959104180336,0.235921680927277 ,-0.560215890407562,0.757637023925781,0.334879487752914,-0.677088737487793,-0.402109175920486,-0.616327106952667 ,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.405299872159958,-0.415835052728653,-0.814133405685425 ,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.737501204013824,0.475387096405029,-0.479686439037323 ,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361 ,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.579810619354248,-0.395008951425552,-0.71259218454361 ,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.453488618135452,0.205984279513359,-0.867132365703583 ,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0743019878864288,-0.318207800388336,-0.945104777812958 ,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.205058068037033,-0.244612783193588,-0.947689712047577 ,0.296686768531799,0.847575604915619,-0.439991503953934,0.454949915409088,0.569741904735565,-0.6844083070755 ,0.550657391548157,0.552472710609436,-0.625739872455597,0.339142799377441,0.423890322446823,-0.839820921421051 ,0.427927106618881,-0.320324927568436,-0.845145165920258,0.500678837299347,-0.355485200881958,-0.789272427558899 ,0.454949915409088,0.569741904735565,-0.6844083070755,-0.940154373645782,-0.000986201339401305,0.34074741601944 ,-0.915072500705719,0.126962244510651,0.382783114910126,-0.833327293395996,0.113953985273838,0.540906727313995 ,-0.850330471992493,0.108354985713959,0.514973104000092,-0.88858425617218,0.0664631873369217,0.453872948884964 ,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.975045323371887,0.00311258574947715,0.221984133124352 ,-0.95991450548172,0.12906339764595,0.248810708522797,-0.915072500705719,0.126962244510651,0.382783114910126 ,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.999095141887665,-0.00423012021929026,-0.0423198379576206 ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.95991450548172,0.12906339764595,0.248810708522797 ,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.999439835548401,-0.0108993193134665,-0.0316409841179848 ,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.971041917800903,0.0163660850375891,-0.238347947597504 ,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.992459714412689,0.0535954684019089,-0.110232837498188 ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.999095141887665,-0.00423012021929026,-0.0423198379576206 ,-0.90544730424881,0.119117729365826,0.407401740550995,-0.830910623073578,0.150519490242004,0.535659790039063 ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.915072500705719,0.126962244510651,0.382783114910126 ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.90544730424881,0.119117729365826,0.407401740550995 ,-0.915072500705719,0.126962244510651,0.382783114910126,-0.95991450548172,0.12906339764595,0.248810708522797 ,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.96833336353302,0.0874056592583656,0.23386062681675 ,-0.95991450548172,0.12906339764595,0.248810708522797,-0.995317578315735,0.0929132029414177,-0.0266464799642563 ,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.999233186244965,0.0380166918039322,-0.00937180034816265 ,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.988875865936279,0.0939552411437035,-0.115312464535236 ,-0.446692645549774,0.129568219184875,0.885255753993988,-0.850330471992493,0.108354985713959,0.514973104000092 ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.484486788511276,0.136127799749374,0.864142179489136 ,-0.833327293395996,0.113953985273838,0.540906727313995,-0.830910623073578,0.150519490242004,0.535659790039063 ,-0.504776954650879,0.179731994867325,0.844332098960876,-0.484486788511276,0.136127799749374,0.864142179489136 ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.776555001735687,-0.203016772866249,0.59644490480423 ,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.536516189575195,-0.591317057609558,0.602075219154358 ,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.776555001735687,-0.203016772866249,0.59644490480423 ,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.282705783843994,-0.5980544090271,0.749938905239105 ,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.948758661746979,-0.259771883487701,0.179931968450546 ,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.282705783843994,-0.5980544090271,0.749938905239105 ,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.987079083919525,-0.140233889222145,-0.0775200128555298 ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.52260547876358,-0.713823437690735,0.466196954250336 ,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.992392778396606,0.0152386799454689,-0.122165411710739 ,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.935397446155548,0.0250490680336952,-0.352709710597992 ,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.988875865936279,0.0939552411437035,-0.115312464535236 ,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.961289465427399,-0.197325810790062,-0.192315071821213 ,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.999439835548401,-0.0108993193134665,-0.0316409841179848 ,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.972792744636536,0.0608477629721165,-0.223543986678123 ,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.995226204395294,0.0964939147233963,-0.0146211665123701 ,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.615352869033813,0.61141961812973,-0.497500658035278 ,0.103712424635887,0.131697446107864,0.985849618911743,-0.446692645549774,0.129568219184875,0.885255753993988 ,-0.484486788511276,0.136127799749374,0.864142179489136,0.0677588582038879,0.127564132213593,0.989513099193573 ,-0.484486788511276,0.136127799749374,0.864142179489136,-0.504776954650879,0.179731994867325,0.844332098960876 ,0.0673240348696709,0.131959661841393,0.988966166973114,0.0677588582038879,0.127564132213593,0.989513099193573 ,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.508872270584106,0.031244209036231,0.860274851322174 ,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.0107409534975886,-0.582138001918793,0.813019037246704 ,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.588486015796661,-0.357772886753082,0.725039839744568 ,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.0782936215400696,-0.811185777187347,0.579523682594299 ,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221 ,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.0782936215400696,-0.811185777187347,0.579523682594299 ,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.361082255840302,-0.597368240356445,0.716080188751221 ,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.00733196083456278,-0.679022014141083,0.734081327915192 ,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.52260547876358,-0.713823437690735,0.466196954250336 ,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.00733196083456278,-0.679022014141083,0.734081327915192 ,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.52260547876358,-0.713823437690735,0.466196954250336 ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.332114219665527,-0.935638904571533,-0.119498759508133 ,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.895039916038513,-0.34432727098465,-0.283447057008743 ,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.332114219665527,-0.935638904571533,-0.119498759508133 ,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.895039916038513,-0.34432727098465,-0.283447057008743 ,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.543579876422882,-0.26823478937149,-0.795343339443207 ,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.924877762794495,-0.0230817683041096,-0.379563301801682 ,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.526416659355164,-0.125638738274574,-0.840892672538757 ,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.935397446155548,0.0250490680336952,-0.352709710597992 ,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.520528793334961,-0.54434335231781,-0.657829761505127 ,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.959655940532684,-0.217719197273254,-0.177929356694222 ,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.596441090106964,-0.0567259602248669,-0.800649881362915 ,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.972792744636536,0.0608477629721165,-0.223543986678123 ,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.280504614114761,0.75769966840744,-0.58924388885498 ,0.103712424635887,0.131697446107864,0.985849618911743,-0.3530093729496,0.178218960762024,0.918489158153534,-0.342477291822433 ,0.228350877761841,0.911353468894959,0.142002120614052,0.141973868012428,0.979631960391998,-0.203233033418655 ,-0.00871946662664413,0.979091584682465,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.0107409534975886 ,-0.582138001918793,0.813019037246704,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0107409534975886 ,-0.582138001918793,0.813019037246704,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.405384927988052 ,-0.526269018650055,0.747465074062347,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0444819778203964 ,-0.725194454193115,0.687105774879456,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0782936215400696 ,-0.811185777187347,0.579523682594299,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.00733196083456278 ,-0.679022014141083,0.734081327915192,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.632588505744934 ,-0.619191765785217,0.465224027633667,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.0927847772836685 ,-0.869047880172729,0.485949277877808,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.716924250125885 ,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.496702879667282 ,-0.638544976711273,-0.587832093238831,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.807790637016296 ,-0.143092095851898,-0.571838200092316,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707 ,-0.0985642895102501,-0.839246511459351,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.807790637016296 ,-0.143092095851898,-0.571838200092316,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.520528793334961 ,-0.54434335231781,-0.657829761505127,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.760540843009949 ,0.00420303363353014,-0.649276435375214,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.567457735538483 ,-0.508834183216095,-0.647363483905792,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.609844028949738 ,0.00468328595161438,-0.792507588863373,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.596441090106964 ,-0.0567259602248669,-0.800649881362915,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.679527759552002 ,0.357755899429321,-0.64050966501236,-0.850330471992493,0.108354985713959,0.514973104000092,-0.85614150762558 ,0.16506227850914,0.489669442176819,-0.866834819316864,0.162685200572014,0.471307665109634,-0.88858425617218 ,0.0664631873369217,0.453872948884964,-0.887829720973969,0.160652026534081,0.431218415498734,-0.954534351825714 ,0.144535258412361,0.260717809200287,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.934069633483887 ,0.0233576260507107,0.356326133012772,-0.954534351825714,0.144535258412361,0.260717809200287,-0.991207242012024 ,0.115119017660618,0.0652364492416382,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.976888537406921 ,-0.0332014113664627,0.211155027151108,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.793882787227631 ,0.349916815757751,-0.497301042079926,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.971041917800903 ,0.0163660850375891,-0.238347947597504,-0.446692645549774,0.129568219184875,0.885255753993988,-0.4341821372509 ,0.175567016005516,0.883550822734833,-0.85614150762558,0.16506227850914,0.489669442176819,-0.850330471992493 ,0.108354985713959,0.514973104000092,0.103712424635887,0.131697446107864,0.985849618911743,0.142002120614052 ,0.141973868012428,0.979631960391998,-0.4341821372509,0.175567016005516,0.883550822734833,-0.446692645549774 ,0.129568219184875,0.885255753993988,-0.85614150762558,0.16506227850914,0.489669442176819,-0.542121350765228 ,0.80557918548584,0.239053606987,-0.545656681060791,0.805297791957855,0.23184959590435,-0.866834819316864,0.162685200572014 ,0.471307665109634,-0.887829720973969,0.160652026534081,0.431218415498734,-0.567242085933685,0.801439464092255 ,0.189555287361145,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.954534351825714,0.144535258412361 ,0.260717809200287,-0.954534351825714,0.144535258412361,0.260717809200287,-0.613154649734497,0.784870028495789 ,0.0895571559667587,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.991207242012024,0.115119017660618 ,0.0652364492416382,-0.4341821372509,0.175567016005516,0.883550822734833,-0.252021908760071,0.83885395526886 ,0.482502818107605,-0.542121350765228,0.80557918548584,0.239053606987,-0.85614150762558,0.16506227850914,0.489669442176819 ,0.142002120614052,0.141973868012428,0.979631960391998,0.134743452072144,0.77269721031189,0.620308935642242,-0.252021908760071 ,0.83885395526886,0.482502818107605,-0.4341821372509,0.175567016005516,0.883550822734833,-0.961289465427399,-0.197325810790062 ,-0.192315071821213,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.959655940532684,-0.217719197273254 ,-0.177929356694222,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.961289465427399,-0.197325810790062 ,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.567457735538483,-0.508834183216095 ,-0.647363483905792,-0.795754730701447,0.170272067189217,0.58118999004364,-0.887829720973969,0.160652026534081 ,0.431218415498734,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.914398610591888,-0.029835456982255 ,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.914398610591888,-0.029835456982255 ,0.403714030981064,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.976888537406921,-0.0332014113664627 ,0.211155027151108,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.976888537406921,-0.0332014113664627 ,0.211155027151108,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.992125034332275,-0.0701997056603432 ,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.992125034332275,-0.0701997056603432 ,-0.103729829192162,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.991207242012024,0.115119017660618 ,0.0652364492416382,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.63306587934494,0.773617923259735 ,-0.0272569861263037,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.973434746265411,0.0614772625267506 ,-0.220556899905205,-0.795754730701447,0.170272067189217,0.58118999004364,-0.502963840961456,0.808468639850616 ,0.305623710155487,-0.567242085933685,0.801439464092255,0.189555287361145,-0.887829720973969,0.160652026534081 ,0.431218415498734,-0.795754730701447,0.170272067189217,0.58118999004364,-0.914398610591888,-0.029835456982255 ,0.403714030981064,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.866834819316864,0.162685200572014 ,0.471307665109634,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788 ,0.1700219810009,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.940154373645782,-0.000986201339401305 ,0.34074741601944,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.992125034332275,-0.0701997056603432 ,-0.103729829192162,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.975045323371887,0.00311258574947715 ,0.221984133124352,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506 ,-0.220556899905205,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.971041917800903,0.0163660850375891 ,-0.238347947597504,-0.502963840961456,0.808468639850616,0.305623710155487,-0.795754730701447,0.170272067189217 ,0.58118999004364,-0.866834819316864,0.162685200572014,0.471307665109634,-0.545656681060791,0.805297791957855 ,0.23184959590435,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.632741153240204,0.704046428203583 ,-0.322424083948135,-0.640371739864349,0.527525365352631,-0.558248162269592,-0.982470035552979,0.0214608013629913 ,-0.185180932283401,0.859614074230194,0.295270681381226,-0.416987895965576,0.727284967899323,0.664062142372131 ,-0.173430144786835,0.739424109458923,0.592256605625153,0.320131361484528,0.480490952730179,0.872772097587585 ,-0.0860075280070305,-0.440291285514832,0.870396435260773,0.220348998904228,-0.696859955787659,0.71514618396759 ,-0.0543340221047401,0.480490952730179,0.872772097587585,-0.0860075280070305,0.739424109458923,0.592256605625153 ,0.320131361484528,0.727284967899323,0.664062142372131,-0.173430144786835,0.859614074230194,0.295270681381226 ,-0.416987895965576,0.95859158039093,0.227282658219337,-0.171594634652138,0.452183425426483,0.585657775402069 ,-0.672707319259644,0.663050174713135,0.587917149066925,-0.463376611471176,0.618651807308197,0.59744918346405 ,-0.510219931602478,0.606457710266113,0.614539504051209,-0.504529714584351,0.818660914897919,0.313737779855728 ,-0.481002062559128,0.726223528385162,0.613508462905884,-0.310172140598297,0.668675601482391,0.60236382484436 ,-0.435925096273422,0.818660914897919,0.313737779855728,-0.481002062559128,0.837498724460602,0.478580474853516 ,-0.263735711574554,0.618651807308197,0.59744918346405,-0.510219931602478,0.266915023326874,0.622528493404388 ,-0.735672950744629,0.107837736606598,0.170556277036667,-0.979429244995117,0.606457710266113,0.614539504051209 ,-0.504529714584351,-0.745452880859375,0.509112060070038,-0.430238157510757,0.107837736606598,0.170556277036667 ,-0.979429244995117,-0.112059034407139,0.629188656806946,-0.769132256507874,-0.907228708267212,0.420285493135452 ,-0.0172105636447668,0.760291457176209,0.640448451042175,-0.108548037707806,0.754503428936005,0.630674540996552 ,-0.181587845087051,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814 ,0.00964442919939756,0.786859929561615,0.489207118749619,-0.376201838254929,0.760291457176209,0.640448451042175 ,-0.108548037707806,0.913363456726074,0.407031029462814,0.00964442919939756,0.95859158039093,0.227282658219337 ,-0.171594634652138,-0.793882787227631,0.349916815757751,-0.497301042079926,0.859614074230194,0.295270681381226 ,-0.416987895965576,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.615352869033813,0.61141961812973 ,-0.497500658035278,-0.542121350765228,0.80557918548584,0.239053606987,0.618651807308197,0.59744918346405,-0.510219931602478 ,0.663050174713135,0.587917149066925,-0.463376611471176,-0.545656681060791,0.805297791957855,0.23184959590435 ,-0.567242085933685,0.801439464092255,0.189555287361145,0.668675601482391,0.60236382484436,-0.435925096273422 ,0.726223528385162,0.613508462905884,-0.310172140598297,-0.613154649734497,0.784870028495789,0.0895571559667587 ,-0.613154649734497,0.784870028495789,0.0895571559667587,0.726223528385162,0.613508462905884,-0.310172140598297 ,0.754503428936005,0.630674540996552,-0.181587845087051,-0.63306587934494,0.773617923259735,-0.0272569861263037 ,-0.672253370285034,0.372103184461594,-0.640011370182037,0.739069283008575,0.399415373802185,-0.542442619800568 ,0.859614074230194,0.295270681381226,-0.416987895965576,-0.793882787227631,0.349916815757751,-0.497301042079926 ,-0.640371739864349,0.527525365352631,-0.558248162269592,0.786859929561615,0.489207118749619,-0.376201838254929 ,0.739069283008575,0.399415373802185,-0.542442619800568,-0.672253370285034,0.372103184461594,-0.640011370182037 ,-0.252021908760071,0.83885395526886,0.482502818107605,0.266915023326874,0.622528493404388,-0.735672950744629 ,0.618651807308197,0.59744918346405,-0.510219931602478,-0.542121350765228,0.80557918548584,0.239053606987,0.134743452072144 ,0.77269721031189,0.620308935642242,-0.112059034407139,0.629188656806946,-0.769132256507874,0.266915023326874 ,0.622528493404388,-0.735672950744629,-0.252021908760071,0.83885395526886,0.482502818107605,-0.500255882740021 ,0.598247230052948,0.625974655151367,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.112059034407139 ,0.629188656806946,-0.769132256507874,0.134743452072144,0.77269721031189,0.620308935642242,-0.502963840961456 ,0.808468639850616,0.305623710155487,0.617954909801483,0.584929347038269,-0.525346875190735,0.668675601482391 ,0.60236382484436,-0.435925096273422,-0.567242085933685,0.801439464092255,0.189555287361145,-0.63306587934494 ,0.773617923259735,-0.0272569861263037,0.754503428936005,0.630674540996552,-0.181587845087051,0.760291457176209 ,0.640448451042175,-0.108548037707806,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.545656681060791 ,0.805297791957855,0.23184959590435,0.663050174713135,0.587917149066925,-0.463376611471176,0.617954909801483 ,0.584929347038269,-0.525346875190735,-0.502963840961456,0.808468639850616,0.305623710155487,-0.632741153240204 ,0.704046428203583,-0.322424083948135,0.760291457176209,0.640448451042175,-0.108548037707806,0.786859929561615 ,0.489207118749619,-0.376201838254929,-0.640371739864349,0.527525365352631,-0.558248162269592,0.134743452072144 ,0.77269721031189,0.620308935642242,0.142002120614052,0.141973868012428,0.979631960391998,-0.342477291822433 ,0.228350877761841,0.911353468894959,-0.500255882740021,0.598247230052948,0.625974655151367,-0.802371442317963 ,-0.439784169197083,-0.403472363948822,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.332114219665527 ,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.567457735538483 ,-0.508834183216095,-0.647363483905792,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.618749499320984 ,-0.411593735218048,-0.669133543968201,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.280504614114761 ,0.75769966840744,-0.58924388885498,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.679527759552002 ,0.357755899429321,-0.64050966501236,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.988875865936279 ,0.0939552411437035,-0.115312464535236,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.826611280441284 ,-0.0826262384653091,0.556674718856812,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.508872270584106 ,0.031244209036231,0.860274851322174,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.536516189575195 ,-0.591317057609558,0.602075219154358,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.987079083919525 ,-0.140233889222145,-0.0775200128555298,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.802422821521759 ,-0.594593703746796,-0.0507543347775936,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.916571378707886 ,-0.142677664756775,-0.373550534248352,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.982470035552979 ,0.0214608013629913,-0.185180932283401,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.793882787227631 ,0.349916815757751,-0.497301042079926,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.914398610591888 ,-0.029835456982255,0.403714030981064,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.999095141887665 ,-0.00423012021929026,-0.0423198379576206,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.971041917800903 ,0.0163660850375891,-0.238347947597504,0.754503428936005,0.630674540996552,-0.181587845087051,0.726223528385162 ,0.613508462905884,-0.310172140598297,0.837498724460602,0.478580474853516,-0.263735711574554,0.739069283008575 ,0.399415373802185,-0.542442619800568,0.786859929561615,0.489207118749619,-0.376201838254929,0.95859158039093 ,0.227282658219337,-0.171594634652138,0.266915023326874,0.622528493404388,-0.735672950744629,-0.112059034407139 ,0.629188656806946,-0.769132256507874,0.107837736606598,0.170556277036667,-0.979429244995117,0.668675601482391 ,0.60236382484436,-0.435925096273422,0.617954909801483,0.584929347038269,-0.525346875190735,0.818660914897919 ,0.313737779855728,-0.481002062559128,0.663050174713135,0.587917149066925,-0.463376611471176,0.818660914897919 ,0.313737779855728,-0.481002062559128,0.617954909801483,0.584929347038269,-0.525346875190735,-0.615352869033813 ,0.61141961812973,-0.497500658035278,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.280504614114761 ,0.75769966840744,-0.58924388885498,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.982470035552979 ,0.0214608013629913,-0.185180932283401,-0.640371739864349,0.527525365352631,-0.558248162269592,0.739069283008575 ,0.399415373802185,-0.542442619800568,0.95859158039093,0.227282658219337,-0.171594634652138,0.859614074230194 ,0.295270681381226,-0.416987895965576,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.280504614114761 ,0.75769966840744,-0.58924388885498,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.961289465427399 ,-0.197325810790062,-0.192315071821213,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.999439835548401 ,-0.0108993193134665,-0.0316409841179848,-0.128415614366531,0.132796317338943,0.982789158821106,-0.3530093729496 ,0.178218960762024,0.918489158153534,0.103712424635887,0.131697446107864,0.985849618911743,0.0677588582038879 ,0.127564132213593,0.989513099193573,-0.271919548511505,0.128996223211288,0.953635036945343,-0.128415614366531 ,0.132796317338943,0.982789158821106,0.0677588582038879,0.127564132213593,0.989513099193573,0.0673240348696709 ,0.131959661841393,0.988966166973114,0.107837736606598,0.170556277036667,-0.979429244995117,-0.745452880859375 ,0.509112060070038,-0.430238157510757,-0.394719243049622,0.916350066661835,0.0670766159892082,0.606457710266113 ,0.614539504051209,-0.504529714584351,0.606457710266113,0.614539504051209,-0.504529714584351,-0.394719243049622 ,0.916350066661835,0.0670766159892082,-0.514610290527344,0.855887234210968,0.0513155348598957,0.818660914897919 ,0.313737779855728,-0.481002062559128,0.818660914897919,0.313737779855728,-0.481002062559128,-0.514610290527344 ,0.855887234210968,0.0513155348598957,-0.0310307368636131,0.989131927490234,-0.14371882379055,0.837498724460602 ,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.837498724460602 ,0.478580474853516,-0.263735711574554,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.484726011753082 ,0.737569272518158,-0.470140665769577,0.95859158039093,0.227282658219337,-0.171594634652138,0.95859158039093 ,0.227282658219337,-0.171594634652138,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.6479212641716 ,0.534398972988129,-0.542785227298737,0.452183425426483,0.585657775402069,-0.672707319259644,0.452183425426483 ,0.585657775402069,-0.672707319259644,-0.6479212641716,0.534398972988129,-0.542785227298737,-0.621815145015717 ,0.744533002376556,-0.24293327331543,0.727284967899323,0.664062142372131,-0.173430144786835,0.727284967899323 ,0.664062142372131,-0.173430144786835,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.440291285514832 ,0.870396435260773,0.220348998904228,0.739424109458923,0.592256605625153,0.320131361484528,-0.960245311260223 ,-0.113252125680447,-0.255152612924576,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.845922648906708 ,-0.233836725354195,-0.47930708527565,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.98088002204895 ,-0.192411512136459,-0.0291934106498957,-0.0231689736247063,-0.380177617073059,0.924623250961304,-0.109985366463661 ,-0.239039614796638,0.964760720729828,0.0760682299733162,-0.295749306678772,0.952232122421265,0.15866231918335 ,-0.379611045122147,0.91143935918808,0.52398556470871,-0.396742969751358,0.753680408000946,0.790293097496033 ,-0.395322471857071,0.468142062425613,0.755637884140015,-0.506735622882843,0.415006548166275,0.481494694948196 ,-0.484542727470398,0.730329513549805,0.871467053890228,-0.412256300449371,0.265687584877014,0.755637884140015 ,-0.506735622882843,0.415006548166275,0.790293097496033,-0.395322471857071,0.468142062425613,-0.716924250125885 ,-0.697136282920837,0.00454333378002048,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.815638482570648 ,-0.327178388834,0.477166801691055,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.632588505744934 ,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.815638482570648 ,-0.327178388834,0.477166801691055,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.730245351791382 ,-0.126696899533272,0.671334207057953,0.184660375118256,-0.167485639452934,0.968426108360291,-0.326030820608139 ,-0.10023545473814,0.940030157566071,-0.378116965293884,-0.19206166267395,0.905615746974945,0.141510874032974 ,-0.212751299142838,0.9668048620224,0.641422510147095,-0.270272105932236,0.718004286289215,0.0331840701401234 ,-0.163069397211075,0.986056387424469,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.481494694948196 ,-0.484542727470398,0.730329513549805,0.817183673381805,-0.296553581953049,0.494233578443527,0.641422510147095 ,-0.270272105932236,0.718004286289215,0.481494694948196,-0.484542727470398,0.730329513549805,0.755637884140015 ,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.925617933273315,-0.33330973982811 ,0.179265230894089,0.755637884140015,-0.506735622882843,0.415006548166275,0.871467053890228,-0.412256300449371 ,0.265687584877014,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.965311110019684,-0.0178779885172844 ,-0.260489523410797,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.807790637016296,-0.143092095851898 ,-0.571838200092316,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.941830277442932,0.142349690198898 ,-0.30445408821106,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.785466253757477,-0.00865362863987684 ,-0.618843913078308,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.791375637054443,0.071151964366436 ,-0.607175409793854,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.883178770542145,0.174471154808998 ,-0.435379177331924,0.279067039489746,0.00181126198731363,0.960269927978516,-0.192327111959457,0.128940626978874 ,0.972822964191437,0.0315546318888664,0.227497383952141,0.973267316818237,0.421088457107544,0.0603364557027817 ,0.905010521411896,0.176409095525742,0.258731871843338,0.949703991413116,0.128309071063995,0.135050594806671 ,0.982495903968811,0.228005558252335,0.109595686197281,0.967472076416016,0.239963844418526,0.229667663574219 ,0.943223297595978,0.952021479606628,-0.172354578971863,0.252881437540054,0.951565146446228,-0.195825412869453 ,0.237015143036842,0.941856145858765,-0.193580731749535,0.27465158700943,0.931146800518036,-0.184283837676048 ,0.31465071439743,0.951565146446228,-0.195825412869453,0.237015143036842,0.98254132270813,-0.173451960086823 ,0.0672831237316132,0.987110912799835,-0.0946229994297028,0.129068180918694,0.941856145858765,-0.193580731749535 ,0.27465158700943,-0.114197492599487,0.229852318763733,0.966502368450165,-0.810181975364685,0.20594097673893 ,0.548811018466949,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.328887611627579,-0.327985614538193 ,0.885583639144897,0.169450357556343,0.192077651619911,0.966639935970306,-0.114197492599487,0.229852318763733 ,0.966502368450165,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.200362399220467,-0.34291222691536 ,0.917750597000122,0.234150499105453,0.240436136722565,0.941999971866608,0.708682000637054,0.0549906380474567 ,0.703381717205048,0.421088457107544,0.0603364557027817,0.905010521411896,0.0315546318888664,0.227497383952141 ,0.973267316818237,0.383701860904694,0.4597148001194,0.800896465778351,0.307897627353668,0.368194788694382,0.877286553382874 ,0.176409095525742,0.258731871843338,0.949703991413116,0.239963844418526,0.229667663574219,0.943223297595978 ,0.96482926607132,0.118159219622612,0.23482520878315,0.931146800518036,-0.184283837676048,0.31465071439743,0.941856145858765 ,-0.193580731749535,0.27465158700943,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097 ,0.041219849139452,0.124520778656006,0.974241256713867,0.0409249700605869,0.221763730049133,0.941856145858765 ,-0.193580731749535,0.27465158700943,0.987110912799835,-0.0946229994297028,0.129068180918694,0.522907495498657 ,0.438181906938553,0.731139063835144,0.459321737289429,0.336945086717606,0.821882903575897,0.307897627353668 ,0.368194788694382,0.877286553382874,0.383701860904694,0.4597148001194,0.800896465778351,-0.730245351791382,-0.126696899533272 ,0.671334207057953,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.553619503974915,-0.0878534093499184 ,0.828122735023499,-0.405384927988052,-0.526269018650055,0.747465074062347,0.0315546318888664,0.227497383952141 ,0.973267316818237,0.537278115749359,0.0936880186200142,0.838185369968414,0.618959546089172,0.0886023566126823 ,0.780409336090088,0.234150499105453,0.240436136722565,0.941999971866608,-0.192327111959457,0.128940626978874 ,0.972822964191437,0.414723992347717,0.00967027805745602,0.909895896911621,0.537278115749359,0.0936880186200142 ,0.838185369968414,0.0315546318888664,0.227497383952141,0.973267316818237,-0.439218908548355,-0.51500540971756 ,-0.736108779907227,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.385900318622589,-0.542145550251007 ,-0.746430933475494,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.883931934833527,-0.461925148963928 ,-0.0727287381887436,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.437478572130203,-0.839489638805389 ,0.32228809595108,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.696337580680847,-0.401266604661942 ,0.595062255859375,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.437478572130203,-0.839489638805389 ,0.32228809595108,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.696337580680847,-0.401266604661942 ,0.595062255859375,-0.383682757616043,-0.370396196842194,0.845928013324738,0.0664144828915596,-0.803862929344177 ,0.591095209121704,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.127582266926765,-0.6490518450737 ,0.749969661235809,0.0995035693049431,-0.912259519100189,0.397343188524246,0.453684121370316,-0.692796587944031 ,0.560538649559021,-0.0757445394992828,-0.423881083726883,0.902545094490051,-0.248274028301239,-0.562410414218903 ,0.788704335689545,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.776257455348969,-0.559176445007324 ,0.291111826896667,-0.689171850681305,-0.406394809484482,0.599904477596283,0.0119833052158356,-0.684736132621765 ,0.728692531585693,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.631964385509491,-0.724000751972198 ,0.276484966278076,-0.248274028301239,-0.562410414218903,0.788704335689545,0.588976085186005,-0.561100006103516 ,0.58161324262619,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.4933140873909,-0.832423627376556 ,0.252412617206573,0.0119833052158356,-0.684736132621765,0.728692531585693,0.588976085186005,-0.561100006103516 ,0.58161324262619,0.80362457036972,-0.592847883701324,0.052143108099699,-0.182750031352043,-0.981905281543732 ,-0.0496434457600117,-0.405343025922775,-0.871097385883331,0.277284026145935,0.586520791053772,-0.278485208749771 ,-0.760551989078522,0.557888448238373,-0.237554967403412,-0.795190632343292,0.250409841537476,-0.715217471122742 ,-0.652502000331879,0.815547049045563,-0.485381871461868,-0.315099239349365,-0.439218908548355,-0.51500540971756 ,-0.736108779907227,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.115532882511616,-0.0797315537929535 ,-0.990098476409912,-0.38756388425827,0.403812289237976,-0.82869166135788,0.722857892513275,-0.480003207921982 ,-0.497064769268036,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.557888448238373,-0.237554967403412 ,-0.795190632343292,0.586520791053772,-0.278485208749771,-0.760551989078522,-0.38756388425827,0.403812289237976 ,-0.82869166135788,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0894739627838135,-0.183631375432014 ,-0.978914678096771,-0.0492830350995064,-0.186444014310837,-0.981228709220886,0.733602523803711,0.10412222892046 ,-0.671554863452911,0.827176570892334,0.131099432706833,-0.546435594558716,0.785422801971436,0.0201532933861017 ,-0.618631482124329,0.733602523803711,0.10412222892046,-0.671554863452911,0.784134984016418,-0.509350836277008 ,-0.354533582925797,0.873561680316925,0.247193098068237,-0.419267863035202,0.827176570892334,0.131099432706833 ,-0.546435594558716,0.313923090696335,0.485718756914139,-0.815799951553345,0.310650020837784,0.28316468000412 ,-0.907366693019867,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0705952271819115,0.538945734500885 ,-0.839377045631409,0.163023561239243,0.98268049955368,-0.0881040766835213,-0.237061515450478,0.971401154994965 ,-0.0134798940271139,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744 ,0.217398658394814,0.611826419830322,0.748416423797607,0.256010234355927,0.461327522993088,0.762120604515076 ,0.454256683588028,0.551901042461395,0.718475461006165,0.423318117856979,0.692905008792877,0.710618555545807 ,0.122081570327282,0.692905008792877,0.710618555545807,0.122081570327282,0.551901042461395,0.718475461006165 ,0.423318117856979,0.744250357151031,0.605297327041626,0.282323569059372,0.765731871128082,0.635692894458771 ,-0.0977200418710709,0.72797954082489,0.659762263298035,-0.1864393055439,0.727798700332642,0.645059943199158 ,-0.232823416590691,0.737480342388153,0.641140997409821,0.212275862693787,0.749618530273438,0.631173431873322 ,0.199228778481483,0.72797954082489,0.659762263298035,-0.1864393055439,0.749618530273438,0.631173431873322,0.199228778481483 ,0.857426404953003,0.506103038787842,0.0931651070713997,0.787813723087311,0.593129634857178,-0.165972396731377 ,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.0757445394992828,-0.423881083726883,0.902545094490051 ,0.453684121370316,-0.692796587944031,0.560538649559021,0.0664144828915596,-0.803862929344177,0.591095209121704 ,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.877826690673828,-0.373566150665283,0.299780994653702 ,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.419215679168701,-0.523534297943115,0.741734504699707 ,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.854438602924347,-0.0391707941889763,-0.518073618412018 ,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.385900318622589,-0.542145550251007,-0.746430933475494 ,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.905556201934814,-0.270013034343719,0.327201753854752 ,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.495511651039124,-0.864618480205536,-0.0830851569771767 ,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.780203819274902,-0.321271508932114,0.536718428134918 ,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.437478572130203,-0.839489638805389,0.32228809595108 ,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.485520303249359,-0.413982003927231,0.769992828369141 ,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.295072466135025,-0.836212396621704,0.462256520986557 ,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.188842684030533,-0.479351043701172,0.857065320014954 ,0.453684121370316,-0.692796587944031,0.560538649559021,0.0995035693049431,-0.912259519100189,0.397343188524246 ,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.877826690673828,-0.373566150665283,0.299780994653702 ,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.187207087874413,-0.466673582792282,0.864389538764954 ,0.215633437037468,-0.617008090019226,0.756837606430054,-0.0384488701820374,-0.525311648845673,0.850040793418884 ,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.4933140873909,-0.832423627376556,0.252412617206573 ,0.505574882030487,-0.704972505569458,0.497401028871536,0.215633437037468,-0.617008090019226,0.756837606430054 ,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.405343025922775,-0.871097385883331,0.277284026145935 ,0.648859202861786,-0.732072532176971,0.207488730549812,0.505574882030487,-0.704972505569458,0.497401028871536 ,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.182750031352043,-0.981905281543732,-0.0496434457600117 ,0.557888448238373,-0.237554967403412,-0.795190632343292,0.913924276828766,-0.399497181177139,-0.0717244148254395 ,0.724748253822327,-0.680762588977814,-0.106311939656734,0.250409841537476,-0.715217471122742,-0.652502000331879 ,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.854438602924347,-0.0391707941889763,-0.518073618412018 ,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.115532882511616,-0.0797315537929535,-0.990098476409912 ,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0816480964422226,-0.362786769866943,0.928288400173187 ,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.584700465202332,-0.0801375582814217,0.80728143453598 ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.913924276828766,-0.399497181177139,-0.0717244148254395 ,0.557888448238373,-0.237554967403412,-0.795190632343292,0.661856412887573,-0.0551184453070164,-0.747601568698883 ,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.822551071643829,-0.00935472548007965,-0.568614363670349 ,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.0894739627838135,-0.183631375432014,-0.978914678096771 ,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.0854111611843109,-0.252843081951141,-0.963729918003082 ,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806990265846252,-0.00711527280509472,-0.590521931648254 ,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.791375637054443,0.071151964366436,-0.607175409793854 ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.12953394651413,0.104335330426693,-0.986070513725281 ,0.827176570892334,0.131099432706833,-0.546435594558716,0.987110912799835,-0.0946229994297028,0.129068180918694 ,0.98254132270813,-0.173451960086823,0.0672831237316132,0.785422801971436,0.0201532933861017,-0.618631482124329 ,0.873561680316925,0.247193098068237,-0.419267863035202,0.991360425949097,0.041219849139452,0.124520778656006 ,0.987110912799835,-0.0946229994297028,0.129068180918694,0.827176570892334,0.131099432706833,-0.546435594558716 ,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.780570030212402,0.394561380147934,-0.484800666570663 ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.0699166879057884,0.326290905475616,-0.942680180072784 ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.317345827817917,0.649519979953766,0.69095253944397 ,0.24549475312233,0.895091116428375,0.372215270996094,-0.237061515450478,0.971401154994965,-0.0134798940271139 ,-0.0108341164886951,0.764748215675354,0.644238173961639,0.533803761005402,0.725452780723572,0.434478789567947 ,0.551901042461395,0.718475461006165,0.423318117856979,0.461327522993088,0.762120604515076,0.454256683588028 ,0.533803761005402,0.725452780723572,0.434478789567947,0.713100373744965,0.617973983287811,0.331052958965302 ,0.744250357151031,0.605297327041626,0.282323569059372,0.551901042461395,0.718475461006165,0.423318117856979 ,0.744611740112305,0.447527796030045,0.495249718427658,0.514605224132538,0.383560210466385,0.766852676868439 ,0.749618530273438,0.631173431873322,0.199228778481483,0.737480342388153,0.641140997409821,0.212275862693787 ,0.514605224132538,0.383560210466385,0.766852676868439,0.787412106990814,0.238013699650764,0.568622589111328 ,0.857426404953003,0.506103038787842,0.0931651070713997,0.749618530273438,0.631173431873322,0.199228778481483 ,0.976662814617157,0.0512243360280991,0.208580628037453,0.972417175769806,0.114111065864563,0.203429251909256 ,0.990084290504456,0.101971529424191,0.0966169014573097,0.989238142967224,-0.144198939204216,-0.0247913636267185 ,0.972417175769806,0.114111065864563,0.203429251909256,0.976662814617157,0.0512243360280991,0.208580628037453 ,0.942203402519226,0.0765308514237404,0.326183587312698,0.936010003089905,0.160365864634514,0.313317894935608 ,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.528048157691956,-0.00915560126304626,0.849165081977844 ,-0.460758477449417,0.108215481042862,0.880903542041779,-0.120599381625652,0.0903127938508987,0.988584518432617 ,0.453684121370316,-0.692796587944031,0.560538649559021,-0.188842684030533,-0.479351043701172,0.857065320014954 ,-0.485520303249359,-0.413982003927231,0.769992828369141,0.0664144828915596,-0.803862929344177,0.591095209121704 ,0.243934661149979,-0.119537994265556,0.962396264076233,-0.309459805488586,0.0171791967004538,0.950757324695587 ,-0.192327111959457,0.128940626978874,0.972822964191437,0.279067039489746,0.00181126198731363,0.960269927978516 ,0.204974547028542,-0.221624046564102,0.953345775604248,-0.326030820608139,-0.10023545473814,0.940030157566071 ,-0.309459805488586,0.0171791967004538,0.950757324695587,0.243934661149979,-0.119537994265556,0.962396264076233 ,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.378116965293884,-0.19206166267395,0.905615746974945 ,-0.326030820608139,-0.10023545473814,0.940030157566071,0.204974547028542,-0.221624046564102,0.953345775604248 ,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.322146862745285,-0.331865698099136,0.886615216732025 ,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.552228093147278,-0.748099327087402,0.367955982685089 ,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.760540843009949,0.00420303363353014,-0.649276435375214 ,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.728761196136475,-0.219147056341171,-0.648753881454468 ,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.0854111611843109,-0.252843081951141,-0.963729918003082 ,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.797997057437897,0.0611037090420723,-0.599555671215057 ,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0854111611843109,-0.252843081951141,-0.963729918003082 ,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.809815943241119,-0.0024391699116677,-0.586678981781006 ,0.936010003089905,0.160365864634514,0.313317894935608,0.913795173168182,0.295857787132263,0.278292179107666 ,0.974241256713867,0.0409249700605869,0.221763730049133,0.972417175769806,0.114111065864563,0.203429251909256 ,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.725508868694305,-0.0050850510597229,-0.68819397687912 ,0.785422801971436,0.0201532933861017,-0.618631482124329,0.98254132270813,-0.173451960086823,0.0672831237316132 ,0.501740634441376,-0.243245840072632,0.830113112926483,0.549654603004456,-0.190786004066467,0.8133145570755 ,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.159226596355438,-0.153975084424019,0.975160777568817 ,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.631689548492432,-0.334710896015167,0.699240267276764 ,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.395515620708466,-0.150387838482857,0.906063437461853 ,0.141510874032974,-0.212751299142838,0.9668048620224,-0.378116965293884,-0.19206166267395,0.905615746974945 ,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.776257455348969,-0.559176445007324,0.291111826896667 ,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.689171850681305,-0.406394809484482,0.599904477596283 ,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006 ,0.990084290504456,0.101971529424191,0.0966169014573097,0.972417175769806,0.114111065864563,0.203429251909256 ,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.460758477449417,0.108215481042862,0.880903542041779 ,-0.565971076488495,0.169359281659126,0.806842088699341,-0.3249591588974,0.21022142469883,0.922067523002625,-0.778803586959839 ,0.240923523902893,0.579155206680298,-0.509689390659332,0.284962147474289,0.811796367168427,-0.3249591588974 ,0.21022142469883,0.922067523002625,-0.565971076488495,0.169359281659126,0.806842088699341,-0.317345827817917 ,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,0.461327522993088 ,0.762120604515076,0.454256683588028,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744 ,0.217398658394814,0.24549475312233,0.895091116428375,0.372215270996094,0.461327522993088,0.762120604515076,0.454256683588028 ,0.611826419830322,0.748416423797607,0.256010234355927,0.931353688240051,0.363742500543594,0.0164845213294029 ,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.725508868694305,-0.0050850510597229,-0.68819397687912 ,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.722857892513275,-0.480003207921982,-0.497064769268036 ,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219 ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.661856412887573,-0.0551184453070164,-0.747601568698883 ,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.987223386764526,-0.158934772014618,-0.0113900080323219 ,0.967770040035248,-0.190110430121422,0.165164038538933,0.92842835187912,-0.2966628074646,0.223633676767349,0.967770040035248 ,-0.190110430121422,0.165164038538933,0.969397664070129,-0.16740058362484,0.179569631814957,0.925617933273315 ,-0.33330973982811,0.179265230894089,0.92842835187912,-0.2966628074646,0.223633676767349,0.817183673381805,-0.296553581953049 ,0.494233578443527,0.858429610729218,-0.151253923773766,0.490123331546783,0.736215591430664,-0.133181810379028 ,0.663512766361237,0.641422510147095,-0.270272105932236,0.718004286289215,0.641422510147095,-0.270272105932236 ,0.718004286289215,0.736215591430664,-0.133181810379028,0.663512766361237,0.15244060754776,-0.0132473884150386 ,0.988223850727081,0.0331840701401234,-0.163069397211075,0.986056387424469,0.27410614490509,-0.107289530336857 ,0.955695986747742,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.326030820608139,-0.10023545473814 ,0.940030157566071,0.184660375118256,-0.167485639452934,0.968426108360291,-0.528048157691956,-0.00915560126304626 ,0.849165081977844,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.0752630904316902,-0.163290411233902 ,0.983703076839447,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.0894739627838135,-0.183631375432014 ,-0.978914678096771,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0222479663789272,-0.27899968624115 ,-0.960033416748047,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.495511651039124,-0.864618480205536 ,-0.0830851569771767,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.845922648906708,-0.233836725354195 ,-0.47930708527565,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.757972836494446,-0.133171454071999 ,-0.63854718208313,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.495511651039124,-0.864618480205536 ,-0.0830851569771767,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.182750031352043,-0.981905281543732 ,-0.0496434457600117,0.80362457036972,-0.592847883701324,0.052143108099699,0.815547049045563,-0.485381871461868 ,-0.315099239349365,0.250409841537476,-0.715217471122742,-0.652502000331879,0.724748253822327,-0.680762588977814 ,-0.106311939656734,0.648859202861786,-0.732072532176971,0.207488730549812,-0.182750031352043,-0.981905281543732 ,-0.0496434457600117,0.250409841537476,-0.715217471122742,-0.652502000331879,0.876565277576447,0.158835455775261 ,0.4543177485466,0.81756728887558,0.216796487569809,0.533463180065155,0.744038224220276,-0.0333225503563881,0.667305529117584 ,0.807695090770721,-0.134995654225349,0.573938012123108,-0.129216328263283,-0.0478254519402981,0.990462481975555 ,0.549654603004456,-0.190786004066467,0.8133145570755,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202 ,0.611092865467072,0.783767402172089,-0.251838445663452,-0.440982908010483,0.861458897590637,0.337114036083221 ,-0.517145156860352,0.786711513996124,0.69356244802475,0.349522531032562,0.629924654960632,0.179207041859627 ,0.602162182331085,0.778000950813293,0.840604901313782,-0.077635869383812,0.536056041717529,0.169450357556343 ,0.192077651619911,0.966639935970306,-0.200362399220467,-0.34291222691536,0.917750597000122,0.417133778333664 ,-0.483815759420395,0.769364476203918,0.713100373744965,0.617973983287811,0.331052958965302,0.744611740112305 ,0.447527796030045,0.495249718427658,0.737480342388153,0.641140997409821,0.212275862693787,0.744250357151031 ,0.605297327041626,0.282323569059372,0.727798700332642,0.645059943199158,-0.232823416590691,0.765731871128082 ,0.635692894458771,-0.0977200418710709,0.744250357151031,0.605297327041626,0.282323569059372,0.737480342388153 ,0.641140997409821,0.212275862693787,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.733602523803711 ,0.10412222892046,-0.671554863452911,0.785422801971436,0.0201532933861017,-0.618631482124329,0.725508868694305 ,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.98254132270813 ,-0.173451960086823,0.0672831237316132,0.951565146446228,-0.195825412869453,0.237015143036842,0.967770040035248 ,-0.190110430121422,0.165164038538933,0.967770040035248,-0.190110430121422,0.165164038538933,0.951565146446228 ,-0.195825412869453,0.237015143036842,0.952021479606628,-0.172354578971863,0.252881437540054,0.969397664070129 ,-0.16740058362484,0.179569631814957,0.15244060754776,-0.0132473884150386,0.988223850727081,0.228005558252335 ,0.109595686197281,0.967472076416016,0.128309071063995,0.135050594806671,0.982495903968811,-0.00481649860739708 ,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,-0.192327111959457 ,0.128940626978874,0.972822964191437,-0.309459805488586,0.0171791967004538,0.950757324695587,0.27410614490509 ,-0.107289530336857,0.955695986747742,-0.460758477449417,0.108215481042862,0.880903542041779,-0.709648728370667 ,-0.32101958990097,0.627172350883484,-0.471319168806076,0.566682040691376,0.675817847251892,-0.565971076488495 ,0.169359281659126,0.806842088699341,-0.471319168806076,0.566682040691376,0.675817847251892,0.179207041859627 ,0.602162182331085,0.778000950813293,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495 ,0.169359281659126,0.806842088699341,-0.251838445663452,-0.440982908010483,0.861458897590637,-0.0749797448515892 ,0.161466658115387,0.984025657176971,0.279067039489746,0.00181126198731363,0.960269927978516,0.337114036083221 ,-0.517145156860352,0.786711513996124,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.743342161178589 ,-0.232909336686134,0.627053201198578,-0.565971076488495,0.169359281659126,0.806842088699341,-0.24122528731823 ,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.743342161178589 ,-0.232909336686134,0.627053201198578,-0.810181975364685,0.20594097673893,0.548811018466949,-0.778803586959839 ,0.240923523902893,0.579155206680298,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.24122528731823 ,-0.215426832437515,0.946256637573242,0.421088457107544,0.0603364557027817,0.905010521411896,0.417133778333664 ,-0.483815759420395,0.769364476203918,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.382766902446747 ,0.693923592567444,0.609884858131409,0.353388279676437,0.625863969326019,0.695277690887451,0.533803761005402 ,0.725452780723572,0.434478789567947,0.533803761005402,0.725452780723572,0.434478789567947,0.353388279676437 ,0.625863969326019,0.695277690887451,0.596079111099243,0.546218872070313,0.588502049446106,0.713100373744965 ,0.617973983287811,0.331052958965302,-0.509491384029388,0.564497232437134,0.649431586265564,-0.460758477449417 ,0.108215481042862,0.880903542041779,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.778017282485962 ,0.0114750172942877,0.628138065338135,0.501740634441376,-0.243245840072632,0.830113112926483,0.204974547028542 ,-0.221624046564102,0.953345775604248,0.243934661149979,-0.119537994265556,0.962396264076233,0.549654603004456 ,-0.190786004066467,0.8133145570755,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.713192403316498 ,-0.572692215442657,0.404203116893768,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.584700465202332 ,-0.0801375582814217,0.80728143453598,0.204974547028542,-0.221624046564102,0.953345775604248,0.501740634441376 ,-0.243245840072632,0.830113112926483,0.274976700544357,-0.741329073905945,0.612224638462067,-0.552228093147278 ,-0.748099327087402,0.367955982685089,-0.552228093147278,-0.748099327087402,0.367955982685089,0.274976700544357 ,-0.741329073905945,0.612224638462067,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.164029136300087 ,-0.974515855312347,-0.15301413834095,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.528048157691956 ,-0.00915560126304626,0.849165081977844,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.801663935184479 ,-0.0182420816272497,0.597496509552002,0.549654603004456,-0.190786004066467,0.8133145570755,0.243934661149979 ,-0.119537994265556,0.962396264076233,0.279067039489746,0.00181126198731363,0.960269927978516,0.611190438270569 ,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,0.611190438270569 ,0.347120821475983,0.711303949356079,0.279067039489746,0.00181126198731363,0.960269927978516,-0.0749797448515892 ,0.161466658115387,0.984025657176971,0.69356244802475,0.349522531032562,0.629924654960632,0.421088457107544,0.0603364557027817 ,0.905010521411896,-0.24122528731823,-0.215426832437515,0.946256637573242,0.179207041859627,0.602162182331085 ,0.778000950813293,0.421088457107544,0.0603364557027817,0.905010521411896,0.69356244802475,0.349522531032562 ,0.629924654960632,0.337114036083221,-0.517145156860352,0.786711513996124,0.279067039489746,0.00181126198731363 ,0.960269927978516,0.708682000637054,0.0549906380474567,0.703381717205048,0.840604901313782,-0.077635869383812 ,0.536056041717529,0.417133778333664,-0.483815759420395,0.769364476203918,0.421088457107544,0.0603364557027817 ,0.905010521411896,0.713100373744965,0.617973983287811,0.331052958965302,0.596079111099243,0.546218872070313 ,0.588502049446106,0.924569427967072,0.246832609176636,0.290249824523926,0.744611740112305,0.447527796030045 ,0.495249718427658,0.274976700544357,-0.741329073905945,0.612224638462067,0.501740634441376,-0.243245840072632 ,0.830113112926483,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.23681703209877,-0.796483516693115 ,0.556355774402618,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.552228093147278,-0.748099327087402 ,0.367955982685089,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.261260628700256,-0.761488914489746 ,0.593192636966705,-0.706475257873535,0.284995973110199,0.647819399833679,-0.768386900424957,0.31679978966713 ,0.556075036525726,-0.617434501647949,0.298396319150925,0.727828443050385,-0.471209764480591,0.287038415670395 ,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.566947221755981,0.26147249341011 ,0.781154930591583,-0.551642179489136,0.164528906345367,0.817692577838898,-0.439302027225494,0.130682304501534 ,0.888783395290375,-0.439302027225494,0.130682304501534,0.888783395290375,-0.551642179489136,0.164528906345367 ,0.817692577838898,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.38883912563324,0.0112887192517519 ,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.38883912563324,0.0112887192517519 ,0.921236515045166,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.553619503974915,-0.0878534093499184 ,0.828122735023499,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.477214306592941,-0.241928458213806 ,0.844829678535461,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.333558112382889,-0.317182183265686 ,0.887769341468811,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.660951018333435,-0.242743968963623 ,0.710083901882172,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.333558112382889,-0.317182183265686 ,0.887769341468811,-0.815638482570648,-0.327178388834,0.477166801691055,-0.836283564567566,-0.213887989521027 ,0.504858076572418,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.631689548492432,-0.334710896015167 ,0.699240267276764,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.952340602874756,-0.189112782478333 ,0.239340081810951,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.815638482570648,-0.327178388834 ,0.477166801691055,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.98088002204895,-0.192411512136459 ,-0.0291934106498957,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.965311110019684,-0.0178779885172844 ,-0.260489523410797,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.960245311260223,-0.113252125680447 ,-0.255152612924576,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.97038471698761,0.0723681449890137 ,-0.230469912290573,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.939613878726959,-0.00117565772961825 ,-0.342234462499619,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.97038471698761,0.0723681449890137 ,-0.230469912290573,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.916346251964569,0.129433929920197 ,-0.378888338804245,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197 ,-0.378888338804245,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.728761196136475,-0.219147056341171 ,-0.648753881454468,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.911869525909424,0.153217226266861 ,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.939192354679108,0.142906233668327 ,-0.312242686748505,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.883178770542145,0.174471154808998 ,-0.435379177331924,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.905240058898926,0.247854217886925 ,-0.345121324062347,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.751268684864044,0.274677604436874 ,-0.60012298822403,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.952340602874756,-0.189112782478333 ,0.239340081810951,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.947529137134552,-0.270958930253983 ,-0.16961669921875,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.35503289103508,-0.122166983783245 ,0.926837027072906,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.333558112382889,-0.317182183265686 ,0.887769341468811,0.0331840701401234,-0.163069397211075,0.986056387424469,0.15244060754776,-0.0132473884150386 ,0.988223850727081,-0.00481649860739708,-0.00974023062735796,0.999940991401672,-0.125947520136833,-0.109786510467529 ,0.985943257808685,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.125947520136833,-0.109786510467529 ,0.985943257808685,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.0231689736247063,-0.380177617073059 ,0.924623250961304,0.936010003089905,0.160365864634514,0.313317894935608,0.942203402519226,0.0765308514237404 ,0.326183587312698,0.888628959655762,0.438762068748474,0.133515372872353,0.886933207511902,0.205319285392761 ,0.413755267858505,0.876565277576447,0.158835455775261,0.4543177485466,0.913795173168182,0.295857787132263,0.278292179107666 ,0.839090466499329,0.267581433057785,0.473632037639618,0.81756728887558,0.216796487569809,0.533463180065155,0.835870265960693 ,-0.162916868925095,0.524193644523621,0.807695090770721,-0.134995654225349,0.573938012123108,0.744038224220276 ,-0.0333225503563881,0.667305529117584,0.754620671272278,-0.10168993473053,0.648233592510223,0.835870265960693 ,-0.162916868925095,0.524193644523621,0.754620671272278,-0.10168993473053,0.648233592510223,0.736215591430664 ,-0.133181810379028,0.663512766361237,0.858429610729218,-0.151253923773766,0.490123331546783,0.886933207511902 ,0.205319285392761,0.413755267858505,0.888628959655762,0.438762068748474,0.133515372872353,0.884826481342316 ,0.464208155870438,0.0399109348654747,0.7496537566185,0.27985754609108,0.599749088287354,0.81756728887558,0.216796487569809 ,0.533463180065155,0.839090466499329,0.267581433057785,0.473632037639618,0.522907495498657,0.438181906938553 ,0.731139063835144,0.383701860904694,0.4597148001194,0.800896465778351,0.744038224220276,-0.0333225503563881 ,0.667305529117584,0.81756728887558,0.216796487569809,0.533463180065155,0.383701860904694,0.4597148001194,0.800896465778351 ,0.239963844418526,0.229667663574219,0.943223297595978,0.228005558252335,0.109595686197281,0.967472076416016 ,0.754620671272278,-0.10168993473053,0.648233592510223,0.744038224220276,-0.0333225503563881,0.667305529117584 ,0.239963844418526,0.229667663574219,0.943223297595978,0.736215591430664,-0.133181810379028,0.663512766361237 ,0.754620671272278,-0.10168993473053,0.648233592510223,0.228005558252335,0.109595686197281,0.967472076416016 ,0.15244060754776,-0.0132473884150386,0.988223850727081,0.459321737289429,0.336945086717606,0.821882903575897 ,0.665011644363403,0.0966486409306526,0.740552842617035,0.307897627353668,0.368194788694382,0.877286553382874 ,0.925617933273315,-0.33330973982811,0.179265230894089,0.969397664070129,-0.16740058362484,0.179569631814957 ,0.858429610729218,-0.151253923773766,0.490123331546783,0.817183673381805,-0.296553581953049,0.494233578443527 ,0.969397664070129,-0.16740058362484,0.179569631814957,0.952021479606628,-0.172354578971863,0.252881437540054 ,0.835870265960693,-0.162916868925095,0.524193644523621,0.858429610729218,-0.151253923773766,0.490123331546783 ,0.835870265960693,-0.162916868925095,0.524193644523621,0.952021479606628,-0.172354578971863,0.252881437540054 ,0.931146800518036,-0.184283837676048,0.31465071439743,0.807695090770721,-0.134995654225349,0.573938012123108 ,0.876565277576447,0.158835455775261,0.4543177485466,0.807695090770721,-0.134995654225349,0.573938012123108,0.931146800518036 ,-0.184283837676048,0.31465071439743,0.96482926607132,0.118159219622612,0.23482520878315,0.913795173168182,0.295857787132263 ,0.278292179107666,0.876565277576447,0.158835455775261,0.4543177485466,0.96482926607132,0.118159219622612,0.23482520878315 ,0.925617933273315,-0.33330973982811,0.179265230894089,0.817183673381805,-0.296553581953049,0.494233578443527 ,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.871467053890228 ,-0.412256300449371,0.265687584877014,0.881475806236267,-0.330746680498123,0.337056457996368,0.881475806236267 ,-0.330746680498123,0.337056457996368,0.871467053890228,-0.412256300449371,0.265687584877014,0.790293097496033 ,-0.395322471857071,0.468142062425613,0.505574882030487,-0.704972505569458,0.497401028871536,0.648859202861786 ,-0.732072532176971,0.207488730549812,-0.3249591588974,0.21022142469883,0.922067523002625,-0.509689390659332 ,0.284962147474289,0.811796367168427,-0.706475257873535,0.284995973110199,0.647819399833679,-0.471209764480591 ,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.120599381625652 ,0.0903127938508987,0.988584518432617,-0.3249591588974,0.21022142469883,0.922067523002625,-0.485232472419739 ,0.239207372069359,0.84102874994278,-0.439302027225494,0.130682304501534,0.888783395290375,-0.0752630904316902 ,-0.163290411233902,0.983703076839447,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.38883912563324 ,0.0112887192517519,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.0816480964422226 ,-0.362786769866943,0.928288400173187,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.35503289103508 ,-0.122166983783245,0.926837027072906,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.188842684030533 ,-0.479351043701172,0.857065320014954,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.353479325771332 ,-0.210106566548347,0.911541342735291,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.485520303249359 ,-0.413982003927231,0.769992828369141,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.477214306592941 ,-0.241928458213806,0.844829678535461,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.780203819274902 ,-0.321271508932114,0.536718428134918,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.660951018333435 ,-0.242743968963623,0.710083901882172,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.905556201934814 ,-0.270013034343719,0.327201753854752,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.836283564567566 ,-0.213887989521027,0.504858076572418,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.966925442218781 ,-0.254910856485367,-0.00869623944163322,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.952340602874756 ,-0.189112782478333,0.239340081810951,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.883178770542145 ,0.174471154808998,-0.435379177331924,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.888693332672119 ,0.348883032798767,-0.297497481107712,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.916346251964569 ,0.129433929920197,-0.378888338804245,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.797997057437897 ,0.0611037090420723,-0.599555671215057,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.928009748458862 ,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.806906938552856 ,0.030128238722682,-0.589909672737122,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.939613878726959 ,-0.00117565772961825,-0.342234462499619,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.806990265846252 ,-0.00711527280509472,-0.590521931648254,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.960245311260223 ,-0.113252125680447,-0.255152612924576,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.822551071643829 ,-0.00935472548007965,-0.568614363670349,-0.854438602924347,-0.0391707941889763,-0.518073618412018,0.913924276828766 ,-0.399497181177139,-0.0717244148254395,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.92842835187912 ,-0.2966628074646,0.223633676767349,0.881475806236267,-0.330746680498123,0.337056457996368,0.648859202861786 ,-0.732072532176971,0.207488730549812,0.724748253822327,-0.680762588977814,-0.106311939656734,0.913924276828766 ,-0.399497181177139,-0.0717244148254395,0.881475806236267,-0.330746680498123,0.337056457996368,0.52398556470871 ,-0.396742969751358,0.753680408000946,0.215633437037468,-0.617008090019226,0.756837606430054,0.505574882030487 ,-0.704972505569458,0.497401028871536,0.790293097496033,-0.395322471857071,0.468142062425613,-0.0384488701820374 ,-0.525311648845673,0.850040793418884,0.215633437037468,-0.617008090019226,0.756837606430054,0.52398556470871 ,-0.396742969751358,0.753680408000946,0.15866231918335,-0.379611045122147,0.91143935918808,-0.0384488701820374 ,-0.525311648845673,0.850040793418884,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.776257455348969 ,-0.559176445007324,0.291111826896667,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.187207087874413 ,-0.466673582792282,0.864389538764954,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.15866231918335 ,-0.379611045122147,0.91143935918808,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974 ,-0.212751299142838,0.9668048620224,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.187207087874413 ,-0.466673582792282,0.864389538764954,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974 ,-0.212751299142838,0.9668048620224,0.0760682299733162,-0.295749306678772,0.952232122421265,-0.109985366463661 ,-0.239039614796638,0.964760720729828,0.184660375118256,-0.167485639452934,0.968426108360291,0.141510874032974 ,-0.212751299142838,0.9668048620224,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.125947520136833 ,-0.109786510467529,0.985943257808685,0.27410614490509,-0.107289530336857,0.955695986747742,0.184660375118256 ,-0.167485639452934,0.968426108360291,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.00481649860739708 ,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,0.27410614490509 ,-0.107289530336857,0.955695986747742,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.128309071063995 ,0.135050594806671,0.982495903968811,0.537278115749359,0.0936880186200142,0.838185369968414,0.414723992347717 ,0.00967027805745602,0.909895896911621,0.128309071063995,0.135050594806671,0.982495903968811,0.176409095525742 ,0.258731871843338,0.949703991413116,0.665011644363403,0.0966486409306526,0.740552842617035,0.618959546089172 ,0.0886023566126823,0.780409336090088,0.537278115749359,0.0936880186200142,0.838185369968414,0.176409095525742 ,0.258731871843338,0.949703991413116,0.307897627353668,0.368194788694382,0.877286553382874,0.857426404953003 ,0.506103038787842,0.0931651070713997,0.787412106990814,0.238013699650764,0.568622589111328,0.7496537566185,0.27985754609108 ,0.599749088287354,0.884826481342316,0.464208155870438,0.0399109348654747,0.818305492401123,0.54065877199173 ,-0.195100545883179,0.787813723087311,0.593129634857178,-0.165972396731377,0.857426404953003,0.506103038787842 ,0.0931651070713997,0.884826481342316,0.464208155870438,0.0399109348654747,0.913795173168182,0.295857787132263 ,0.278292179107666,0.936010003089905,0.160365864634514,0.313317894935608,0.886933207511902,0.205319285392761 ,0.413755267858505,0.839090466499329,0.267581433057785,0.473632037639618,0.913795173168182,0.295857787132263 ,0.278292179107666,0.96482926607132,0.118159219622612,0.23482520878315,0.974241256713867,0.0409249700605869,0.221763730049133 ,-0.917055070400238,0.301483958959579,0.260993033647537,-0.898983955383301,0.272523552179337,0.342868447303772 ,-0.617434501647949,0.298396319150925,0.727828443050385,-0.768386900424957,0.31679978966713,0.556075036525726 ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.911110818386078,0.327579766511917,0.250137090682983 ,-0.768386900424957,0.31679978966713,0.556075036525726,-0.706475257873535,0.284995973110199,0.647819399833679 ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.706475257873535,0.284995973110199,0.647819399833679 ,-0.509689390659332,0.284962147474289,0.811796367168427,-0.317345827817917,0.649519979953766,0.69095253944397 ,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.317345827817917,0.649519979953766,0.69095253944397 ,-0.509689390659332,0.284962147474289,0.811796367168427,-0.778803586959839,0.240923523902893,0.579155206680298 ,-0.382766902446747,0.693923592567444,0.609884858131409,-0.0108341164886951,0.764748215675354,0.644238173961639 ,-0.778803586959839,0.240923523902893,0.579155206680298,-0.810181975364685,0.20594097673893,0.548811018466949 ,0.353388279676437,0.625863969326019,0.695277690887451,-0.382766902446747,0.693923592567444,0.609884858131409 ,-0.810181975364685,0.20594097673893,0.548811018466949,-0.114197492599487,0.229852318763733,0.966502368450165 ,0.596079111099243,0.546218872070313,0.588502049446106,0.353388279676437,0.625863969326019,0.695277690887451 ,-0.114197492599487,0.229852318763733,0.966502368450165,0.169450357556343,0.192077651619911,0.966639935970306 ,0.924569427967072,0.246832609176636,0.290249824523926,0.596079111099243,0.546218872070313,0.588502049446106 ,0.169450357556343,0.192077651619911,0.966639935970306,0.840604901313782,-0.077635869383812,0.536056041717529 ,0.744611740112305,0.447527796030045,0.495249718427658,0.924569427967072,0.246832609176636,0.290249824523926 ,0.840604901313782,-0.077635869383812,0.536056041717529,0.708682000637054,0.0549906380474567,0.703381717205048 ,0.514605224132538,0.383560210466385,0.766852676868439,0.744611740112305,0.447527796030045,0.495249718427658 ,0.708682000637054,0.0549906380474567,0.703381717205048,0.234150499105453,0.240436136722565,0.941999971866608 ,0.787412106990814,0.238013699650764,0.568622589111328,0.514605224132538,0.383560210466385,0.766852676868439 ,0.234150499105453,0.240436136722565,0.941999971866608,0.618959546089172,0.0886023566126823,0.780409336090088 ,0.787412106990814,0.238013699650764,0.568622589111328,0.618959546089172,0.0886023566126823,0.780409336090088 ,0.665011644363403,0.0966486409306526,0.740552842617035,0.459321737289429,0.336945086717606,0.821882903575897 ,0.7496537566185,0.27985754609108,0.599749088287354,0.7496537566185,0.27985754609108,0.599749088287354,0.459321737289429 ,0.336945086717606,0.821882903575897,0.522907495498657,0.438181906938553,0.731139063835144,0.839090466499329 ,0.267581433057785,0.473632037639618,0.886933207511902,0.205319285392761,0.413755267858505,0.7496537566185,0.27985754609108 ,0.599749088287354,0.522907495498657,0.438181906938553,0.731139063835144,-0.768386900424957,0.31679978966713 ,0.556075036525726,-0.911110818386078,0.327579766511917,0.250137090682983,-0.917055070400238,0.301483958959579 ,0.260993033647537,0.260435909032822,0.0412507019937038,-0.964609503746033,0.159143656492233,-0.20932050049305 ,-0.964809954166412,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.183688193559647,-0.183951675891876 ,-0.965619206428528,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.896334648132324,0.12926284968853 ,-0.424117147922516,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.609844028949738,0.00468328595161438 ,-0.792507588863373,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.939192354679108,0.142906233668327 ,-0.312242686748505,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.911869525909424,0.153217226266861 ,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.791375637054443,0.071151964366436 ,-0.607175409793854,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.797997057437897,0.0611037090420723 ,-0.599555671215057,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.183688193559647,-0.183951675891876 ,-0.965619206428528,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.809815943241119,-0.0024391699116677 ,-0.586678981781006,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.183688193559647,-0.183951675891876 ,-0.965619206428528,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.460758477449417,0.108215481042862 ,0.880903542041779,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.251838445663452,-0.440982908010483 ,0.861458897590637,0.884826481342316,0.464208155870438,0.0399109348654747,0.888628959655762,0.438762068748474 ,0.133515372872353,0.66844254732132,0.71253913640976,-0.213242888450623,0.818305492401123,0.54065877199173,-0.195100545883179 ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.751268684864044,0.274677604436874,-0.60012298822403 ,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.12953394651413,0.104335330426693,-0.986070513725281 ,0.310650020837784,0.28316468000412,-0.907366693019867,0.260435909032822,0.0412507019937038,-0.964609503746033 ,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.0699166879057884,0.326290905475616,-0.942680180072784 ,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.120599381625652,0.0903127938508987,0.988584518432617 ,-0.439302027225494,0.130682304501534,0.888783395290375,-0.38883912563324,0.0112887192517519,0.921236515045166 ,0.990084290504456,0.101971529424191,0.0966169014573097,0.991360425949097,0.041219849139452,0.124520778656006 ,0.873561680316925,0.247193098068237,-0.419267863035202,0.989238142967224,-0.144198939204216,-0.0247913636267185 ,0.784134984016418,-0.509350836277008,-0.354533582925797,0.989238142967224,-0.144198939204216,-0.0247913636267185 ,0.873561680316925,0.247193098068237,-0.419267863035202,-0.237061515450478,0.971401154994965,-0.0134798940271139 ,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.86081600189209,0.504893720149994,-0.0638600736856461 ,-0.816423416137695,0.517423629760742,0.256369888782501,0.163023561239243,0.98268049955368,-0.0881040766835213 ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.468789458274841,0.865421831607819,-0.176865667104721 ,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.911110818386078,0.327579766511917,0.250137090682983 ,-0.816423416137695,0.517423629760742,0.256369888782501,-0.86081600189209,0.504893720149994,-0.0638600736856461 ,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.917055070400238,0.301483958959579,0.260993033647537 ,-0.911110818386078,0.327579766511917,0.250137090682983,-0.923302352428436,0.378709852695465,0.0639655441045761 ,-0.942716598510742,0.31031545996666,0.12243277579546,-0.898983955383301,0.272523552179337,0.342868447303772 ,-0.917055070400238,0.301483958959579,0.260993033647537,-0.942716598510742,0.31031545996666,0.12243277579546 ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.907228708267212,0.420285493135452,-0.0172105636447668 ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.457298666238785,0.889312863349915,0.000723629433196038 ,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469 ,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.909005224704742,0.416743367910385,0.00586836272850633 ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.838867545127869,0.499842166900635,-0.215543583035469 ,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.955984711647034,0.292123109102249,-0.0275191478431225 ,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.939192354679108,0.142906233668327,-0.312242686748505 ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.278325170278549,0.959965646266937,0.0316396243870258 ,0.0602656826376915,0.93876701593399,-0.339241087436676,-0.297451019287109,0.894863903522491,-0.33277839422226 ,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.468789458274841,0.865421831607819,-0.176865667104721 ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.825409948825836,0.564256370067596,0.0176955871284008 ,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.86081600189209,0.504893720149994,-0.0638600736856461 ,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.909005224704742,0.416743367910385,0.00586836272850633 ,-0.942716598510742,0.31031545996666,0.12243277579546,-0.923302352428436,0.378709852695465,0.0639655441045761 ,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.955984711647034,0.292123109102249,-0.0275191478431225 ,0.0602656826376915,0.93876701593399,-0.339241087436676,0.313923090696335,0.485718756914139,-0.815799951553345 ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.297451019287109,0.894863903522491,-0.33277839422226 ,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.780570030212402,0.394561380147934,-0.484800666570663 ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.297451019287109,0.894863903522491,-0.33277839422226 ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.780570030212402,0.394561380147934,-0.484800666570663 ,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712 ,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.955984711647034,0.292123109102249,-0.0275191478431225 ,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546 ,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.981271386146545,0.187864378094673,-0.0425844676792622 ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.696859955787659,0.71514618396759,-0.0543340221047401 ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.981271386146545,0.187864378094673,-0.0425844676792622 ,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.566947221755981,0.26147249341011,0.781154930591583 ,-0.617434501647949,0.298396319150925,0.727828443050385,-0.898983955383301,0.272523552179337,0.342868447303772 ,-0.500255882740021,0.598247230052948,0.625974655151367,-0.342477291822433,0.228350877761841,0.911353468894959 ,-0.471209764480591,0.287038415670395,0.834008574485779,-0.617434501647949,0.298396319150925,0.727828443050385 ,-0.566947221755981,0.26147249341011,0.781154930591583,-0.485232472419739,0.239207372069359,0.84102874994278 ,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687 ,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347 ,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.904579520225525,-0.0986718684434891,0.414728611707687 ,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.501954138278961,0.0510877333581448,0.863384068012238 ,-0.271919548511505,0.128996223211288,0.953635036945343,-0.203233033418655,-0.00871946662664413,0.979091584682465 ,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.97038471698761,0.0723681449890137,-0.230469912290573 ,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.553619503974915,-0.0878534093499184,0.828122735023499 ,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.405384927988052,-0.526269018650055,0.747465074062347 ,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.501954138278961,0.0510877333581448,0.863384068012238 ,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.295709520578384,-0.414570212364197,0.860632002353668 ,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822 ,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.947529137134552,-0.270958930253983,-0.16961669921875 ,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.501954138278961,0.0510877333581448,0.863384068012238 ,-0.551642179489136,0.164528906345367,0.817692577838898,-0.3530093729496,0.178218960762024,0.918489158153534 ,-0.128415614366531,0.132796317338943,0.982789158821106,-0.271919548511505,0.128996223211288,0.953635036945343 ,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.907434463500977,0.401591062545776,-0.123642094433308 ,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.440291285514832,0.870396435260773,0.220348998904228 ,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.6479212641716,0.534398972988129,-0.542785227298737 ,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.907434463500977,0.401591062545776,-0.123642094433308 ,-0.898983955383301,0.272523552179337,0.342868447303772,-0.907228708267212,0.420285493135452,-0.0172105636447668 ,-0.500255882740021,0.598247230052948,0.625974655151367,-0.745452880859375,0.509112060070038,-0.430238157510757 ,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.966511785984039,0.186886444687843,0.175864636898041 ,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.394719243049622,0.916350066661835,0.0670766159892082 ,-0.966511785984039,0.186886444687843,0.175864636898041,-0.981271386146545,0.187864378094673,-0.0425844676792622 ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.514610290527344,0.855887234210968,0.0513155348598957 ,-0.566947221755981,0.26147249341011,0.781154930591583,-0.342477291822433,0.228350877761841,0.911353468894959 ,-0.3530093729496,0.178218960762024,0.918489158153534,-0.551642179489136,0.164528906345367,0.817692577838898 ,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.484726011753082,0.737569272518158,-0.470140665769577 ,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.514610290527344,0.855887234210968,0.0513155348598957 ,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.785466253757477,-0.00865362863987684,-0.618843913078308 ,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.526416659355164,-0.125638738274574,-0.840892672538757 ,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.916571378707886,-0.142677664756775,-0.373550534248352 ,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.534743189811707,-0.0985642895102501,-0.839246511459351 ,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.987079083919525,-0.140233889222145,-0.0775200128555298 ,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.924877762794495,-0.0230817683041096,-0.379563301801682 ,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.992392778396606,0.0152386799454689,-0.122165411710739 ,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.948758661746979,-0.259771883487701,0.179931968450546 ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.999233186244965,0.0380166918039322,-0.00937180034816265 ,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.801825046539307,-0.262576133012772,0.536777794361115 ,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.90544730424881,0.119117729365826,0.407401740550995 ,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.801825046539307,-0.262576133012772,0.536777794361115 ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.830910623073578,0.150519490242004,0.535659790039063 ,-0.90544730424881,0.119117729365826,0.407401740550995,-0.776555001735687,-0.203016772866249,0.59644490480423 ,-0.504776954650879,0.179731994867325,0.844332098960876,-0.830910623073578,0.150519490242004,0.535659790039063 ,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.508872270584106,0.031244209036231,0.860274851322174 ,0.0673240348696709,0.131959661841393,0.988966166973114,-0.504776954650879,0.179731994867325,0.844332098960876 ,-0.508872270584106,0.031244209036231,0.860274851322174,0.0816235020756722,-0.0377316474914551,0.995948731899261 ,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.271919548511505,0.128996223211288,0.953635036945343 ,0.0673240348696709,0.131959661841393,0.988966166973114,0.0816235020756722,-0.0377316474914551,0.995948731899261 ,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.939192354679108,0.142906233668327,-0.312242686748505 ,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.536318302154541,-0.443965286016464,0.717814385890961 ,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0444819778203964,-0.725194454193115,0.687105774879456 ,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.24122528731823,-0.215426832437515,0.946256637573242 ,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.328887611627579,-0.327985614538193,0.885583639144897 ,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.251838445663452,-0.440982908010483,0.861458897590637 ,0.179207041859627,0.602162182331085,0.778000950813293,-0.471319168806076,0.566682040691376,0.675817847251892 ,-0.509491384029388,0.564497232437134,0.649431586265564,0.110788695514202,0.611092865467072,0.783767402172089 ,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.460758477449417,0.108215481042862,0.880903542041779 ,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.129216328263283,-0.0478254519402981,0.990462481975555 ,0.110788695514202,0.611092865467072,0.783767402172089,-0.509491384029388,0.564497232437134,0.649431586265564 ,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.159226596355438,-0.153975084424019,0.975160777568817 ,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.778017282485962,0.0114750172942877,0.628138065338135 ,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.23681703209877,-0.796483516693115,0.556355774402618 ,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.801663935184479,-0.0182420816272497,0.597496509552002 ,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.164029136300087,-0.974515855312347,-0.15301413834095 ,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.713192403316498,-0.572692215442657,0.404203116893768 ,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.261260628700256,-0.761488914489746,0.593192636966705 ,-0.164029136300087,-0.974515855312347,-0.15301413834095,0.0995035693049431,-0.912259519100189,0.397343188524246 ,0.52398556470871,-0.396742969751358,0.753680408000946,0.481494694948196,-0.484542727470398,0.730329513549805 ,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.15866231918335,-0.379611045122147,0.91143935918808 ,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.468789458274841,0.865421831607819,-0.176865667104721 ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.457298666238785,0.889312863349915,0.000723629433196038 ,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.278325170278549,0.959965646266937,0.0316396243870258 ,-0.901924610137939,0.307412892580032,0.303363412618637,-0.977742493152618,-0.0699509307742119,-0.197804138064384 ,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.899024248123169,0.213699862360954,0.382214277982712 ,-0.899024248123169,0.213699862360954,0.382214277982712,-0.955119252204895,-0.281733334064484,-0.0915070921182632 ,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.817979872226715,-0.0342942997813225,0.574223697185516 ,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.882815718650818,-0.369268298149109,0.290305644273758 ,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.572269916534424,-0.327977895736694,0.751623332500458 ,-0.761745274066925,0.099917359650135,0.640125453472137,-0.857412815093994,0.318779051303864,0.404008865356445 ,-0.899024248123169,0.213699862360954,0.382214277982712,-0.817979872226715,-0.0342942997813225,0.574223697185516 ,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.761745274066925,0.099917359650135,0.640125453472137 ,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.572269916534424,-0.327977895736694,0.751623332500458 ,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.51681649684906,-0.0720630958676338,0.85305780172348 ,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.26332488656044,-0.487629622220993,0.832392573356628 ,-0.777440845966339,0.387861520051956,0.495125383138657,-0.921807289123535,0.190687090158463,0.337505161762238 ,-0.943840563297272,0.1807881295681,0.276551336050034,-0.938613772392273,0.27569842338562,0.207351386547089,-0.9817014336586 ,0.106130860745907,0.158109441399574,-0.857412815093994,0.318779051303864,0.404008865356445,-0.761745274066925 ,0.099917359650135,0.640125453472137,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.849806487560272 ,-0.0963084548711777,0.51822155714035,-0.761745274066925,0.099917359650135,0.640125453472137,-0.51681649684906 ,-0.0720630958676338,0.85305780172348,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.565454542636871 ,-0.235293716192245,0.790504932403564,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.208346873521805 ,-0.195467934012413,0.95832347869873,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.973640561103821 ,0.150163590908051,0.171682626008987,-0.9817014336586,0.106130860745907,0.158109441399574,-0.849806487560272 ,-0.0963084548711777,0.51822155714035,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.823427438735962 ,0.0464033856987953,0.565520942211151,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.565454542636871 ,-0.235293716192245,0.790504932403564,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.53584623336792 ,-0.0723051279783249,0.841213822364807,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.235414087772369 ,-0.349107921123505,0.90703022480011,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.943840563297272 ,0.1807881295681,0.276551336050034,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.939433455467224 ,0.230843335390091,-0.253330230712891,-0.938613772392273,0.27569842338562,0.207351386547089,-0.977742493152618 ,-0.0699509307742119,-0.197804138064384,-0.901924610137939,0.307412892580032,0.303363412618637,-0.938613772392273 ,0.27569842338562,0.207351386547089,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.857412815093994 ,0.318779051303864,0.404008865356445,-0.777440845966339,0.387861520051956,0.495125383138657,-0.901924610137939 ,0.307412892580032,0.303363412618637,-0.899024248123169,0.213699862360954,0.382214277982712,-0.9817014336586 ,0.106130860745907,0.158109441399574,-0.921807289123535,0.190687090158463,0.337505161762238,-0.777440845966339 ,0.387861520051956,0.495125383138657,-0.857412815093994,0.318779051303864,0.404008865356445,-0.970218658447266 ,-0.038191806524992,0.239200875163078,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.734350621700287 ,0.677913844585419,0.0340877436101437,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.54743480682373 ,0.804430425167084,0.230666100978851,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.938417971134186 ,0.0142068117856979,0.345209956169128,-0.798004448413849,0.101907536387444,0.593972861766815,-0.250951796770096 ,0.864163637161255,0.436170101165771,-0.54743480682373,0.804430425167084,0.230666100978851,-0.798004448413849 ,0.101907536387444,0.593972861766815,-0.507640421390533,0.139722898602486,0.85016393661499,0.0952272266149521 ,0.827912211418152,0.552714347839355,-0.250951796770096,0.864163637161255,0.436170101165771,-0.507640421390533 ,0.139722898602486,0.85016393661499,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.793523073196411 ,-0.0159704424440861,0.608330607414246,-0.798004448413849,0.101907536387444,0.593972861766815,-0.938417971134186 ,0.0142068117856979,0.345209956169128,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.516035139560699 ,-0.0156707875430584,0.85642409324646,-0.507640421390533,0.139722898602486,0.85016393661499,-0.798004448413849 ,0.101907536387444,0.593972861766815,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.182312056422234 ,-0.0702576190233231,0.98072737455368,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.507640421390533 ,0.139722898602486,0.85016393661499,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.95304924249649 ,0.0933544263243675,0.288066118955612,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771 ,0.0581443458795547,0.146505534648895,-0.97012186050415,0.115440957248211,0.213394016027451,-0.793523073196411 ,-0.0159704424440861,0.608330607414246,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.952853083610535 ,0.227692499756813,0.200567036867142,-0.799672305583954,0.218887090682983,0.559117794036865,-0.516035139560699 ,-0.0156707875430584,0.85642409324646,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.799672305583954 ,0.218887090682983,0.559117794036865,-0.508204877376556,0.144576609134674,0.849014341831207,-0.182312056422234 ,-0.0702576190233231,0.98072737455368,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.508204877376556 ,0.144576609134674,0.849014341831207,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.799672305583954 ,0.218887090682983,0.559117794036865,-0.952853083610535,0.227692499756813,0.200567036867142,-0.973640561103821 ,0.150163590908051,0.171682626008987,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.508204877376556 ,0.144576609134674,0.849014341831207,-0.799672305583954,0.218887090682983,0.559117794036865,-0.823427438735962 ,0.0464033856987953,0.565520942211151,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.14939372241497 ,0.0765637531876564,0.985809028148651,-0.508204877376556,0.144576609134674,0.849014341831207,-0.53584623336792 ,-0.0723051279783249,0.841213822364807,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.938012957572937 ,0.237204626202583,-0.252716571092606,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.97012186050415 ,0.115440957248211,0.213394016027451,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.987499535083771 ,0.0581443458795547,0.146505534648895,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.837948083877563 ,0.531638741493225,-0.123301722109318,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.93721479177475 ,-0.0726321637630463,0.34110552072525,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.970218658447266 ,-0.038191806524992,0.239200875163078,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.93721479177475 ,-0.0726321637630463,0.34110552072525,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.95304924249649 ,0.0933544263243675,0.288066118955612,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649 ,0.0933544263243675,0.288066118955612,-0.97012186050415,0.115440957248211,0.213394016027451,-0.960990250110626 ,0.131045117974281,0.243567124009132,-0.948896527290344,0.107380069792271,0.296757221221924,-0.943840563297272 ,0.1807881295681,0.276551336050034,-0.960990250110626,0.131045117974281,0.243567124009132,-0.934666931629181 ,0.235346302390099,-0.266476780176163,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181 ,0.235346302390099,-0.266476780176163,-0.960990250110626,0.131045117974281,0.243567124009132,-0.97012186050415 ,0.115440957248211,0.213394016027451,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.960990250110626 ,0.131045117974281,0.243567124009132,-0.943840563297272,0.1807881295681,0.276551336050034,-0.921807289123535 ,0.190687090158463,0.337505161762238,-0.948896527290344,0.107380069792271,0.296757221221924,0.801646828651428 ,-0.0831208676099777,0.591991007328033,0.734746038913727,-0.160801336169243,0.659007728099823,0.70257967710495 ,-0.699933767318726,0.128352925181389,0.841358840465546,-0.538884103298187,0.0414636693894863,0.401816725730896 ,-0.892981171607971,0.202800214290619,0.70257967710495,-0.699933767318726,0.128352925181389,0.734746038913727 ,-0.160801336169243,0.659007728099823,0.503881454467773,-0.329790472984314,0.798336863517761,-0.0260992348194122 ,-0.974703729152679,0.221971705555916,0.401816725730896,-0.892981171607971,0.202800214290619,0.503881454467773 ,-0.329790472984314,0.798336863517761,0.107415564358234,-0.480258971452713,0.870524644851685,0.498356074094772 ,-0.197405740618706,0.844199180603027,0.503881454467773,-0.329790472984314,0.798336863517761,0.734746038913727 ,-0.160801336169243,0.659007728099823,0.73037314414978,-0.078302189707756,0.678545415401459,0.147659823298454 ,-0.24711586534977,0.957669198513031,0.107415564358234,-0.480258971452713,0.870524644851685,0.503881454467773 ,-0.329790472984314,0.798336863517761,0.498356074094772,-0.197405740618706,0.844199180603027,-0.208346873521805 ,-0.195467934012413,0.95832347869873,-0.26332488656044,-0.487629622220993,0.832392573356628,0.107415564358234 ,-0.480258971452713,0.870524644851685,0.147659823298454,-0.24711586534977,0.957669198513031,0.751119554042816 ,-0.269360929727554,0.602713882923126,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633 ,-0.151919424533844,0.490823149681091,0.808899104595184,-0.271903991699219,0.521296918392181,0.498356074094772 ,-0.197405740618706,0.844199180603027,0.73037314414978,-0.078302189707756,0.678545415401459,0.806595623493195 ,-0.339085549116135,0.484173983335495,0.540686428546906,-0.418503105640411,0.729735136032104,0.147659823298454 ,-0.24711586534977,0.957669198513031,0.498356074094772,-0.197405740618706,0.844199180603027,0.540686428546906 ,-0.418503105640411,0.729735136032104,0.155815690755844,-0.419202774763107,0.894421875476837,-0.208346873521805 ,-0.195467934012413,0.95832347869873,0.147659823298454,-0.24711586534977,0.957669198513031,0.155815690755844 ,-0.419202774763107,0.894421875476837,-0.235414087772369,-0.349107921123505,0.90703022480011,0.540686428546906 ,-0.418503105640411,0.729735136032104,0.806595623493195,-0.339085549116135,0.484173983335495,0.82207328081131 ,-0.257045179605484,0.508058369159698,0.566346645355225,-0.257577836513519,0.782882571220398,0.155815690755844 ,-0.419202774763107,0.894421875476837,0.540686428546906,-0.418503105640411,0.729735136032104,0.566346645355225 ,-0.257577836513519,0.782882571220398,0.190858632326126,-0.215845569968224,0.957592666149139,-0.235414087772369 ,-0.349107921123505,0.90703022480011,0.155815690755844,-0.419202774763107,0.894421875476837,0.190858632326126 ,-0.215845569968224,0.957592666149139,-0.199428826570511,-0.151153653860092,0.968184232711792,0.980303883552551 ,-0.197100415825844,-0.0124758314341307,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.808899104595184 ,-0.271903991699219,0.521296918392181,0.857912063598633,-0.151919424533844,0.490823149681091,0.841358840465546 ,-0.538884103298187,0.0414636693894863,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.857912063598633 ,-0.151919424533844,0.490823149681091,0.801646828651428,-0.0831208676099777,0.591991007328033,0.73037314414978 ,-0.078302189707756,0.678545415401459,0.734746038913727,-0.160801336169243,0.659007728099823,0.801646828651428 ,-0.0831208676099777,0.591991007328033,0.685023248195648,0.00244083511643112,0.728517115116119,0.73037314414978 ,-0.078302189707756,0.678545415401459,0.685023248195648,0.00244083511643112,0.728517115116119,0.751119554042816 ,-0.269360929727554,0.602713882923126,0.806595623493195,-0.339085549116135,0.484173983335495,0.733399391174316 ,-0.42873340845108,0.527553796768188,0.972478210926056,0.193684622645378,0.129508212208748,0.895388960838318 ,0.358975827693939,0.263467311859131,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026 ,-0.203684195876122,0.819789946079254,0.730379700660706,0.544567286968231,0.412300884723663,0.44217050075531 ,0.718546867370605,0.536819994449615,0.224035635590553,-0.0279745738953352,0.97417938709259,0.224035635590553 ,-0.0279745738953352,0.97417938709259,0.44217050075531,0.718546867370605,0.536819994449615,0.0952272266149521 ,0.827912211418152,0.552714347839355,-0.146061703562737,0.0914116725325584,0.985043108463287,0.476951867341995 ,-0.307240515947342,0.823480546474457,0.658827781677246,-0.438512951135635,0.611271023750305,0.69538801908493 ,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.163414120674133 ,-0.171451970934868,0.971545219421387,0.476951867341995,-0.307240515947342,0.823480546474457,0.535216987133026 ,-0.203684195876122,0.819789946079254,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.182312056422234 ,-0.0702576190233231,0.98072737455368,0.163414120674133,-0.171451970934868,0.971545219421387,0.224035635590553 ,-0.0279745738953352,0.97417938709259,-0.146061703562737,0.0914116725325584,0.985043108463287,0.817899644374847 ,-0.355826288461685,0.452137023210526,0.585005819797516,-0.507527828216553,0.632600724697113,0.754743993282318 ,-0.253586798906326,0.605024993419647,0.814589738845825,-0.243902504444122,0.526265263557434,0.839219391345978 ,-0.174447894096375,0.515052139759064,0.658827781677246,-0.438512951135635,0.611271023750305,0.476951867341995 ,-0.307240515947342,0.823480546474457,0.605567514896393,-0.0923454314470291,0.790417790412903,0.605567514896393 ,-0.0923454314470291,0.790417790412903,0.476951867341995,-0.307240515947342,0.823480546474457,0.163414120674133 ,-0.171451970934868,0.971545219421387,0.2394889742136,-0.0051474985666573,0.970885455608368,0.2394889742136,-0.0051474985666573 ,0.970885455608368,0.163414120674133,-0.171451970934868,0.971545219421387,-0.182312056422234,-0.0702576190233231 ,0.98072737455368,-0.14939372241497,0.0765637531876564,0.985809028148651,0.82207328081131,-0.257045179605484 ,0.508058369159698,0.839219391345978,-0.174447894096375,0.515052139759064,0.605567514896393,-0.0923454314470291 ,0.790417790412903,0.566346645355225,-0.257577836513519,0.782882571220398,0.566346645355225,-0.257577836513519 ,0.782882571220398,0.605567514896393,-0.0923454314470291,0.790417790412903,0.2394889742136,-0.0051474985666573 ,0.970885455608368,0.190858632326126,-0.215845569968224,0.957592666149139,0.190858632326126,-0.215845569968224 ,0.957592666149139,0.2394889742136,-0.0051474985666573,0.970885455608368,-0.14939372241497,0.0765637531876564 ,0.985809028148651,-0.199428826570511,-0.151153653860092,0.968184232711792,0.814589738845825,-0.243902504444122 ,0.526265263557434,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.983128607273102,-0.182582512497902 ,-0.011036628857255,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685 ,0.452137023210526,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.972478210926056,0.193684622645378 ,0.129508212208748,0.733399391174316,-0.42873340845108,0.527553796768188,0.658827781677246,-0.438512951135635 ,0.611271023750305,0.585005819797516,-0.507527828216553,0.632600724697113,0.733399391174316,-0.42873340845108 ,0.527553796768188,0.69538801908493,-0.360292613506317,0.621791541576386,0.754743993282318,-0.253586798906326 ,0.605024993419647,0.585005819797516,-0.507527828216553,0.632600724697113,0.658827781677246,-0.438512951135635 ,0.611271023750305,0.839219391345978,-0.174447894096375,0.515052139759064,0.981736898422241,-0.184043049812317 ,-0.0481746941804886,0.809050917625427,-0.256973832845688,0.528583943843842,0.808899104595184,-0.271903991699219 ,0.521296918392181,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.814589738845825,-0.243902504444122 ,0.526265263557434,0.809050917625427,-0.256973832845688,0.528583943843842,0.981736898422241,-0.184043049812317 ,-0.0481746941804886,0.9765744805336,-0.21293817460537,-0.0309777203947306,-0.955119252204895,-0.281733334064484 ,-0.0915070921182632,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.985335469245911,0.0123848039656878 ,-0.170178011059761,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.882815718650818,-0.369268298149109 ,0.290305644273758,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.9922234416008,-0.1217075958848 ,0.0260745380073786,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.985335469245911,0.0123848039656878 ,-0.170178011059761,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.961426258087158,0.114839658141136 ,-0.249942779541016,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.924062490463257,0.166337832808495 ,-0.344151526689529,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.939433455467224,0.230843335390091 ,-0.253330230712891,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.837948083877563,0.531638741493225 ,-0.123301722109318,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.713566780090332,0.700178563594818 ,0.0239257458597422,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.734350621700287,0.677913844585419 ,0.0340877436101437,-0.54743480682373,0.804430425167084,0.230666100978851,-0.639851093292236,0.713299214839935 ,0.28599801659584,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.54743480682373,0.804430425167084 ,0.230666100978851,-0.250951796770096,0.864163637161255,0.436170101165771,-0.615591168403625,0.608454763889313 ,0.500829696655273,-0.639851093292236,0.713299214839935,0.28599801659584,-0.250951796770096,0.864163637161255 ,0.436170101165771,0.0952272266149521,0.827912211418152,0.552714347839355,-0.139664217829704,0.122649051249027 ,0.982573747634888,-0.615591168403625,0.608454763889313,0.500829696655273,-0.904506981372833,0.363090604543686 ,-0.223679021000862,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.843237459659576,0.525120079517365 ,-0.114889100193977,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.938012957572937,0.237204626202583 ,-0.252716571092606,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.874023795127869,0.388026893138886 ,-0.292433828115463,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.932059943675995,0.251615643501282 ,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.850903332233429,0.254370987415314 ,-0.459629088640213,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.939433455467224,0.230843335390091 ,-0.253330230712891,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.796034395694733,0.305417150259018 ,-0.522541463375092,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.850903332233429,0.254370987415314 ,-0.459629088640213,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.940755069255829,0.217000797390938 ,-0.260558128356934,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.863597929477692,0.181174650788307 ,-0.470504373311996,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.938012957572937,0.237204626202583 ,-0.252716571092606,-0.866832733154297,0.233201399445534,-0.440701872110367,0.841358840465546,-0.538884103298187 ,0.0414636693894863,0.70257967710495,-0.699933767318726,0.128352925181389,0.685771405696869,-0.727804124355316 ,0.00433491868898273,0.682205855846405,-0.688040673732758,-0.247376576066017,0.70257967710495,-0.699933767318726 ,0.128352925181389,0.401816725730896,-0.892981171607971,0.202800214290619,0.301932573318481,-0.883707880973816 ,0.357627093791962,0.685771405696869,-0.727804124355316,0.00433491868898273,0.401816725730896,-0.892981171607971 ,0.202800214290619,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.289558619260788,-0.713769853115082 ,0.637721240520477,0.301932573318481,-0.883707880973816,0.357627093791962,0.933255016803741,-0.359124660491943 ,-0.00803234614431858,0.841358840465546,-0.538884103298187,0.0414636693894863,0.682205855846405,-0.688040673732758 ,-0.247376576066017,0.846972167491913,-0.511904895305634,-0.14349739253521,0.980303883552551,-0.197100415825844 ,-0.0124758314341307,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.846972167491913,-0.511904895305634 ,-0.14349739253521,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.895388960838318,0.358975827693939 ,0.263467311859131,0.972478210926056,0.193684622645378,0.129508212208748,0.960353672504425,0.263352990150452 ,0.0914659649133682,0.898760318756104,0.357274115085602,0.254135996103287,0.730379700660706,0.544567286968231 ,0.412300884723663,0.895388960838318,0.358975827693939,0.263467311859131,0.898760318756104,0.357274115085602 ,0.254135996103287,0.750469028949738,0.503480017185211,0.42814028263092,0.44217050075531,0.718546867370605,0.536819994449615 ,0.730379700660706,0.544567286968231,0.412300884723663,0.750469028949738,0.503480017185211,0.42814028263092,0.626252830028534 ,0.308739811182022,0.715882003307343,0.0952272266149521,0.827912211418152,0.552714347839355,0.44217050075531 ,0.718546867370605,0.536819994449615,0.626252830028534,0.308739811182022,0.715882003307343,-0.139664217829704 ,0.122649051249027,0.982573747634888,0.960353672504425,0.263352990150452,0.0914659649133682,0.972478210926056 ,0.193684622645378,0.129508212208748,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.991423904895782 ,0.113214619457722,0.0652767568826675,0.991423904895782,0.113214619457722,0.0652767568826675,0.999559164047241 ,-0.0022999900393188,0.0296008456498384,0.983128607273102,-0.182582512497902,-0.011036628857255,0.992731213569641 ,-0.118552401661873,0.0207367613911629,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.981736898422241 ,-0.184043049812317,-0.0481746941804886,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.98767364025116 ,-0.155731916427612,-0.0157585926353931,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.986363470554352 ,-0.161528527736664,-0.0315533950924873,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.973673224449158 ,-0.222424849867821,-0.0498761273920536,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.981736898422241 ,-0.184043049812317,-0.0481746941804886,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.962084114551544 ,-0.260001808404922,-0.0824210941791534,0.983128607273102,-0.182582512497902,-0.011036628857255,0.9765744805336 ,-0.21293817460537,-0.0309777203947306,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.992731213569641 ,-0.118552401661873,0.0207367613911629,-0.901924610137939,0.307412892580032,0.303363412618637,-0.777440845966339 ,0.387861520051956,0.495125383138657,-0.938613772392273,0.27569842338562,0.207351386547089,-0.938613772392273 ,0.27569842338562,0.207351386547089,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.961426258087158 ,0.114839658141136,-0.249942779541016,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.987499535083771 ,0.0581443458795547,0.146505534648895,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771 ,0.0581443458795547,0.146505534648895,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.938012957572937 ,0.237204626202583,-0.252716571092606,0.801646828651428,-0.0831208676099777,0.591991007328033,0.857912063598633 ,-0.151919424533844,0.490823149681091,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633 ,-0.151919424533844,0.490823149681091,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.980303883552551 ,-0.197100415825844,-0.0124758314341307,0.733399391174316,-0.42873340845108,0.527553796768188,0.585005819797516 ,-0.507527828216553,0.632600724697113,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847 ,-0.355826288461685,0.452137023210526,0.983128607273102,-0.182582512497902,-0.011036628857255,0.999559164047241 ,-0.0022999900393188,0.0296008456498384,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.268051534891129 ,-0.524246156215668,0.808278679847717,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.398783475160599 ,0.608131349086761,0.686402201652527,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022 ,0.599665939807892,0.800044298171997,0.381472051143646,0.46587747335434,0.798396646976471,0.390523910522461,0.243563205003738 ,0.88778829574585,0.381472051143646,0.46587747335434,0.798396646976471,0.241816222667694,-0.361797332763672,0.900348603725433 ,0.626252830028534,0.308739811182022,0.715882003307343,0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534 ,0.308739811182022,0.715882003307343,0.241816222667694,-0.361797332763672,0.900348603725433,-0.268051534891129 ,-0.524246156215668,0.808278679847717,-0.139664217829704,0.122649051249027,0.982573747634888,-0.139664217829704 ,0.122649051249027,0.982573747634888,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.633089065551758 ,-0.179430231451988,0.75299608707428,-0.615591168403625,0.608454763889313,0.500829696655273,-0.633089065551758 ,-0.179430231451988,0.75299608707428,-0.398783475160599,0.608131349086761,0.686402201652527,-0.541773617267609 ,0.383253455162048,0.748062908649445,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609 ,0.383253455162048,0.748062908649445,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0181612316519022 ,0.599665939807892,0.800044298171997,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022 ,0.599665939807892,0.800044298171997,-0.268051534891129,-0.524246156215668,0.808278679847717,0.241816222667694 ,-0.361797332763672,0.900348603725433,0.381472051143646,0.46587747335434,0.798396646976471,-0.948896527290344 ,0.107380069792271,0.296757221221924,-0.973640561103821,0.150163590908051,0.171682626008987,-0.952853083610535 ,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.921807289123535 ,0.190687090158463,0.337505161762238,-0.9817014336586,0.106130860745907,0.158109441399574,-0.973640561103821 ,0.150163590908051,0.171682626008987,-0.948896527290344,0.107380069792271,0.296757221221924,0.809050917625427 ,-0.256973832845688,0.528583943843842,0.743283569812775,-0.261148244142532,0.615898609161377,0.751119554042816 ,-0.269360929727554,0.602713882923126,0.808899104595184,-0.271903991699219,0.521296918392181,0.743283569812775 ,-0.261148244142532,0.615898609161377,0.82207328081131,-0.257045179605484,0.508058369159698,0.806595623493195 ,-0.339085549116135,0.484173983335495,0.751119554042816,-0.269360929727554,0.602713882923126,0.754743993282318 ,-0.253586798906326,0.605024993419647,0.839219391345978,-0.174447894096375,0.515052139759064,0.82207328081131 ,-0.257045179605484,0.508058369159698,0.743283569812775,-0.261148244142532,0.615898609161377,0.809050917625427 ,-0.256973832845688,0.528583943843842,0.814589738845825,-0.243902504444122,0.526265263557434,0.754743993282318 ,-0.253586798906326,0.605024993419647,0.743283569812775,-0.261148244142532,0.615898609161377,0.69538801908493 ,-0.360292613506317,0.621791541576386,0.895388960838318,0.358975827693939,0.263467311859131,0.730379700660706 ,0.544567286968231,0.412300884723663,0.535216987133026,-0.203684195876122,0.819789946079254,0.78125125169754 ,-0.138539433479309,0.608648777008057,0.878065228462219,-0.00301950192078948,0.47853147983551,0.930242419242859 ,-0.158916160464287,0.330748707056046,0.805302381515503,-0.358387529850006,0.472277879714966,0.370588421821594 ,-0.193350583314896,0.908449113368988,0.340047508478165,-0.388343751430511,0.856479287147522,0.640090823173523 ,-0.393064320087433,0.660139560699463,0.660678803920746,-0.179935500025749,0.728784441947937,-0.709845840930939 ,-0.0613325238227844,0.701681673526764,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.562524795532227 ,-0.508337914943695,0.652041733264923,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.415467321872711 ,-0.0540936067700386,0.907998204231262,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.0792728736996651 ,-0.368663102388382,0.926176726818085,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.542648077011108 ,0.604446232318878,0.583247661590576,-0.828080534934998,0.439521878957748,0.347998708486557,-0.678687632083893 ,0.530943989753723,0.507426381111145,0.998525857925415,0.0400822311639786,0.0366002470254898,0.930242419242859 ,-0.158916160464287,0.330748707056046,0.878065228462219,-0.00301950192078948,0.47853147983551,0.977894842624664 ,0.203556552529335,0.0478159449994564,-0.478552311658859,0.59250408411026,0.648017406463623,-0.839360475540161 ,0.300623118877411,0.452879399061203,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.723428726196289 ,-0.0725482106208801,0.686576724052429,-0.542648077011108,0.604446232318878,0.583247661590576,-0.678687632083893 ,0.530943989753723,0.507426381111145,-0.839360475540161,0.300623118877411,0.452879399061203,-0.478552311658859 ,0.59250408411026,0.648017406463623,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.801453590393066 ,-0.0788522064685822,0.592835962772369,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.679585158824921 ,-0.597024917602539,0.426292538642883,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.904659032821655 ,-0.172026187181473,0.389870524406433,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.723428726196289 ,-0.0725482106208801,0.686576724052429,-0.419204741716385,0.619329035282135,0.66385155916214,-0.478552311658859 ,0.59250408411026,0.648017406463623,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.713757753372192 ,-0.0291265603154898,0.699786782264709,-0.454762816429138,0.657830238342285,0.60037499666214,-0.542648077011108 ,0.604446232318878,0.583247661590576,-0.478552311658859,0.59250408411026,0.648017406463623,-0.419204741716385 ,0.619329035282135,0.66385155916214,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.562524795532227 ,-0.508337914943695,0.652041733264923,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.882178366184235 ,-0.427934050559998,0.196554735302925,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.679585158824921 ,-0.597024917602539,0.426292538642883,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.713757753372192 ,-0.0291265603154898,0.699786782264709,-0.419204741716385,0.619329035282135,0.66385155916214,-0.713757753372192 ,-0.0291265603154898,0.699786782264709,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.211948931217194 ,0.670887529850006,0.710624814033508,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.882178366184235 ,-0.427934050559998,0.196554735302925,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.829398572444916 ,-0.0672809854149818,0.554591119289398,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.713757753372192 ,-0.0291265603154898,0.699786782264709,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.998829364776611 ,0.0265166759490967,-0.0404574386775494,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.938492894172668 ,-0.335133403539658,0.0831665322184563,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.388236194849014 ,-0.50770115852356,0.769098341464996,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.845879793167114 ,-0.333898961544037,0.415931314229965,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.450191855430603 ,-0.821828484535217,0.349177956581116,-0.0997487902641296,0.343725502490997,0.933757483959198,0.129296213388443 ,0.717355608940125,0.684604585170746,0.051387831568718,-0.174088895320892,0.983388185501099,-0.380323052406311 ,-0.00781864393502474,0.9248206615448,-0.381502002477646,-0.250341862440109,0.889823138713837,0.44838610291481 ,-0.404915183782578,0.796864807605743,0.225461423397064,-0.225655317306519,0.947758853435516,-0.450191855430603 ,-0.821828484535217,0.349177956581116,-0.388236194849014,-0.50770115852356,0.769098341464996,0.147943705320358 ,-0.468890011310577,0.870778322219849,0.477010041475296,-0.793651044368744,0.377596825361252,-0.415356457233429 ,-0.555049777030945,0.720693230628967,-0.450191855430603,-0.821828484535217,0.349177956581116,0.477010041475296 ,-0.793651044368744,0.377596825361252,0.519910156726837,-0.607850134372711,0.600176334381104,0.129296213388443 ,0.717355608940125,0.684604585170746,-0.211948931217194,0.670887529850006,0.710624814033508,-0.380323052406311 ,-0.00781864393502474,0.9248206615448,0.225461423397064,-0.225655317306519,0.947758853435516,0.214603096246719 ,0.506344735622406,0.835200905799866,0.289558619260788,-0.713769853115082,0.637721240520477,0.051387831568718 ,-0.174088895320892,0.983388185501099,0.129296213388443,0.717355608940125,0.684604585170746,0.214603096246719 ,0.506344735622406,0.835200905799866,0.870778322219849,-0.383099019527435,0.308188676834106,0.491936594247818 ,-0.382108181715012,0.782299041748047,0.332508742809296,-0.680451035499573,0.653011798858643,0.518838703632355 ,-0.706463396549225,0.481368720531464,0.44838610291481,-0.404915183782578,0.796864807605743,0.870778322219849 ,-0.383099019527435,0.308188676834106,0.518838703632355,-0.706463396549225,0.481368720531464,0.225461423397064 ,-0.225655317306519,0.947758853435516,0.423083633184433,0.0620496086776257,0.903963565826416,0.508102118968964 ,0.373251259326935,0.776218891143799,0.786464095115662,-0.0169835668057203,0.61740243434906,0.605372726917267 ,0.000812157464679331,0.795941710472107,0.650932729244232,-0.458716839551926,0.604868113994598,0.245217740535736 ,-0.767790734767914,0.591916918754578,0.319739699363709,-0.689254701137543,0.650149524211884,0.602446496486664 ,-0.488442957401276,0.631254017353058,0.508102118968964,0.373251259326935,0.776218891143799,0.395677745342255 ,-0.301782160997391,0.867390692234039,0.703794419765472,-0.329490423202515,0.629372298717499,0.786464095115662 ,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.395677745342255 ,-0.301782160997391,0.867390692234039,0.245217740535736,-0.767790734767914,0.591916918754578,0.650932729244232 ,-0.458716839551926,0.604868113994598,0.650932729244232,-0.458716839551926,0.604868113994598,0.602446496486664 ,-0.488442957401276,0.631254017353058,0.605372726917267,0.000812157464679331,0.795941710472107,0.786464095115662 ,-0.0169835668057203,0.61740243434906,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.713757753372192 ,-0.0291265603154898,0.699786782264709,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.381502002477646 ,-0.250341862440109,0.889823138713837,0.214603096246719,0.506344735622406,0.835200905799866,0.225461423397064 ,-0.225655317306519,0.947758853435516,0.395677745342255,-0.301782160997391,0.867390692234039,0.508102118968964 ,0.373251259326935,0.776218891143799,0.245217740535736,-0.767790734767914,0.591916918754578,0.518838703632355 ,-0.706463396549225,0.481368720531464,0.332508742809296,-0.680451035499573,0.653011798858643,0.319739699363709 ,-0.689254701137543,0.650149524211884,0.395677745342255,-0.301782160997391,0.867390692234039,0.225461423397064 ,-0.225655317306519,0.947758853435516,0.518838703632355,-0.706463396549225,0.481368720531464,0.245217740535736 ,-0.767790734767914,0.591916918754578,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.839360475540161 ,0.300623118877411,0.452879399061203,-0.678687632083893,0.530943989753723,0.507426381111145,-0.801453590393066 ,-0.0788522064685822,0.592835962772369,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.408054858446121 ,-0.272179991006851,0.871440947055817,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.703129649162292 ,0.0220469851046801,0.710719764232636,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.0792728736996651 ,-0.368663102388382,0.926176726818085,0.340047508478165,-0.388343751430511,0.856479287147522,0.370588421821594 ,-0.193350583314896,0.908449113368988,0.329437464475632,-0.321430414915085,0.887780070304871,0.319739699363709 ,-0.689254701137543,0.650149524211884,0.332508742809296,-0.680451035499573,0.653011798858643,0.491936594247818 ,-0.382108181715012,0.782299041748047,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.829398572444916 ,-0.0672809854149818,0.554591119289398,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.562524795532227 ,-0.508337914943695,0.652041733264923,0.660678803920746,-0.179935500025749,0.728784441947937,0.640090823173523 ,-0.393064320087433,0.660139560699463,0.867793679237366,-0.309993803501129,0.38837856054306,0.884072363376617 ,-0.159779712557793,0.439188450574875,0.831244945526123,-0.225508287549019,0.508112013339996,0.82292628288269 ,-0.280684322118759,0.493972301483154,0.668613970279694,-0.338565081357956,0.662064254283905,0.654389500617981 ,-0.325742691755295,0.682397305965424,0.329437464475632,-0.321430414915085,0.887780070304871,0.280544310808182 ,-0.2230264544487,0.933570623397827,0.654389500617981,-0.325742691755295,0.682397305965424,0.668613970279694 ,-0.338565081357956,0.662064254283905,-0.866685390472412,0.374831438064575,0.329177558422089,-0.828080534934998 ,0.439521878957748,0.347998708486557,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.871505856513977 ,0.489616960287094,-0.0274355374276638,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.931710779666901 ,0.00594112882390618,0.363152533769608,-0.839360475540161,0.300623118877411,0.452879399061203,0.786464095115662 ,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.650932729244232 ,-0.458716839551926,0.604868113994598,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.775201201438904 ,-0.315398722887039,0.547345161437988,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.719066202640533 ,-0.680389881134033,-0.14146888256073,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.398905754089355 ,-0.33735454082489,0.852681756019592,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.63077574968338 ,-0.739016532897949,0.236593529582024,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.43298476934433 ,-0.720436811447144,0.541751801967621,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0704309269785881 ,-0.316668570041656,0.945917785167694,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.139990076422691 ,-0.714202582836151,0.685796916484833,0.289891242980957,-0.786550641059875,0.545253336429596,0.378215909004211 ,-0.383805245161057,0.842405080795288,0.378215909004211,-0.383805245161057,0.842405080795288,0.289891242980957 ,-0.786550641059875,0.545253336429596,0.526285588741302,-0.789061844348907,0.316867232322693,0.665505409240723 ,-0.470593899488449,0.579347848892212,0.175360679626465,-0.976183235645294,-0.127730026841164,0.175360679626465 ,-0.976183235645294,-0.127730026841164,0.562327146530151,-0.809826016426086,0.167242258787155,0.526285588741302 ,-0.789061844348907,0.316867232322693,0.147943705320358,-0.468890011310577,0.870778322219849,0.280544310808182 ,-0.2230264544487,0.933570623397827,0.329437464475632,-0.321430414915085,0.887780070304871,0.491936594247818 ,-0.382108181715012,0.782299041748047,0.913633346557617,-0.352534860372543,0.202467978000641,0.477010041475296 ,-0.793651044368744,0.377596825361252,0.147943705320358,-0.468890011310577,0.870778322219849,0.491936594247818 ,-0.382108181715012,0.782299041748047,0.870778322219849,-0.383099019527435,0.308188676834106,0.505195319652557 ,-0.403650730848312,0.762786865234375,0.913633346557617,-0.352534860372543,0.202467978000641,0.870778322219849 ,-0.383099019527435,0.308188676834106,0.44838610291481,-0.404915183782578,0.796864807605743,-0.381502002477646 ,-0.250341862440109,0.889823138713837,-0.369073897600174,-0.252177625894547,0.89453387260437,0.505195319652557 ,-0.403650730848312,0.762786865234375,0.44838610291481,-0.404915183782578,0.796864807605743,-0.88222748041153 ,-0.112881354987621,0.457091361284256,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.369073897600174 ,-0.252177625894547,0.89453387260437,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.901903212070465 ,-0.103399723768234,0.419379383325577,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.998829364776611 ,0.0265166759490967,-0.0404574386775494,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.716449618339539 ,-0.232984632253647,0.657585084438324,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.996204435825348 ,0.0376567244529724,-0.0784778669476509,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.829398572444916 ,-0.0672809854149818,0.554591119289398,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.716449618339539 ,-0.232984632253647,0.657585084438324,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.417631775140762 ,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.703214585781097 ,0.00478603458032012,0.710961520671844,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.417631775140762 ,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.927268087863922 ,0.115808911621571,0.356036812067032,-0.918597161769867,0.136136829853058,0.37100675702095,-0.703214585781097 ,0.00478603458032012,0.710961520671844,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.967624545097351 ,0.222042396664619,-0.119999624788761,-0.918597161769867,0.136136829853058,0.37100675702095,-0.927268087863922 ,0.115808911621571,0.356036812067032,0.949489533901215,-0.288099020719528,0.124372407793999,0.943572819232941 ,-0.310979694128037,-0.113850839436054,0.968242347240448,-0.211912021040916,-0.132665053009987,0.951669454574585 ,-0.257042765617371,0.168090030550957,0.353731364011765,-0.88641881942749,-0.298556119203568,0.536804795265198 ,-0.812591671943665,-0.227014124393463,0.891479134559631,-0.356151014566422,-0.280038207769394,0.746579051017761 ,-0.327975332736969,-0.578836619853973,0.422129124403,0.115602806210518,-0.899134576320648,0.541264474391937 ,0.0936620086431503,-0.835619688034058,0.233156397938728,0.373372942209244,-0.897903501987457,0.156071558594704 ,0.248666033148766,-0.955932438373566,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.639851093292236 ,0.713299214839935,0.28599801659584,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609 ,0.383253455162048,0.748062908649445,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.536804795265198 ,-0.812591671943665,-0.227014124393463,0.722857892513275,-0.480003207921982,-0.497064769268036,0.586520791053772 ,-0.278485208749771,-0.760551989078522,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.176827967166901 ,-0.795711040496826,-0.579288959503174,0.056479137390852,-0.856393754482269,-0.513224899768829,0.318273335695267 ,-0.280295252799988,-0.905613958835602,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.613127768039703 ,0.486845344305038,-0.622138202190399,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.829805314540863 ,0.320066124200821,-0.457144170999527,-0.59022468328476,0.354267239570618,-0.725347936153412,0.233156397938728 ,0.373372942209244,-0.897903501987457,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.184135809540749 ,0.315396666526794,-0.930923700332642,0.156071558594704,0.248666033148766,-0.955932438373566,-0.866832733154297 ,0.233201399445534,-0.440701872110367,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.847418308258057 ,0.181933835148811,-0.498780846595764,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.863866031169891 ,0.184018969535828,-0.468905657529831,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.874023795127869 ,0.388026893138886,-0.292433828115463,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.828140676021576 ,-0.416389226913452,0.375237315893173,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.843237459659576 ,0.525120079517365,-0.114889100193977,-0.713566780090332,0.700178563594818,0.0239257458597422,0.776516377925873 ,0.531664490699768,-0.338164389133453,0.865038812160492,0.500161468982697,0.0393240377306938,0.610888957977295 ,-0.781325817108154,0.127846196293831,0.559202313423157,-0.768743932247162,-0.310363441705704,0.277932703495026 ,-0.692557215690613,-0.665670990943909,0.467275589704514,0.564712345600128,-0.680259943008423,0.776516377925873 ,0.531664490699768,-0.338164389133453,0.559202313423157,-0.768743932247162,-0.310363441705704,-0.153365463018417 ,0.631252944469452,-0.760262310504913,0.136670753359795,0.566407382488251,-0.812713861465454,-0.0725360587239265 ,-0.598356962203979,-0.797939538955688,-0.398402363061905,-0.552445113658905,-0.732174813747406,0.277932703495026 ,-0.692557215690613,-0.665670990943909,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.136670753359795 ,0.566407382488251,-0.812713861465454,0.467275589704514,0.564712345600128,-0.680259943008423,-0.398402363061905 ,-0.552445113658905,-0.732174813747406,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.343562453985214 ,0.683792293071747,-0.643733561038971,-0.153365463018417,0.631252944469452,-0.760262310504913,0.733602523803711 ,0.10412222892046,-0.671554863452911,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.931353688240051 ,0.363742500543594,0.0164845213294029,0.809532463550568,0.353956818580627,0.468371391296387,0.639626801013947 ,-0.543238401412964,0.543847024440765,0.784134984016418,-0.509350836277008,-0.354533582925797,-0.809815943241119 ,-0.0024391699116677,-0.586678981781006,-0.983289659023285,0.179070711135864,0.032787948846817,-0.38756388425827 ,0.403812289237976,-0.82869166135788,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.0222479663789272 ,-0.27899968624115,-0.960033416748047,-0.795176029205322,0.587453246116638,0.150312438607216,-0.728462755680084 ,0.461005359888077,-0.506770253181458,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.845747351646423 ,-0.528353095054626,0.0745282098650932,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.193201750516891 ,-0.134490892291069,-0.971897780895233,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.299906134605408 ,-0.817314743995667,-0.491988658905029,0.056479137390852,-0.856393754482269,-0.513224899768829,0.353731364011765 ,-0.88641881942749,-0.298556119203568,0.746579051017761,-0.327975332736969,-0.578836619853973,0.318273335695267 ,-0.280295252799988,-0.905613958835602,0.604855418205261,-0.787497401237488,-0.118312001228333,0.855425655841827 ,0.486632764339447,-0.177300468087196,0.802787482738495,0.346281617879868,0.485408395528793,0.624463975429535 ,-0.657274067401886,0.421942621469498,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.725547671318054 ,0.0196763575077057,-0.687890529632568,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.299906134605408 ,-0.817314743995667,-0.491988658905029,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.177617996931076 ,0.0687198787927628,-0.981697201728821,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.566148936748505 ,0.251458436250687,-0.785012185573578,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.796081125736237 ,0.269071251153946,-0.542084395885468,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.512617945671082 ,0.132903546094894,-0.848268508911133,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.769991517066956 ,0.178484797477722,-0.612581610679626,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.854514360427856 ,0.214296534657478,-0.473161995410919,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.184135809540749 ,0.315396666526794,-0.930923700332642,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.613127768039703 ,0.486845344305038,-0.622138202190399,0.992731213569641,-0.118552401661873,0.0207367613911629,0.962084114551544 ,-0.260001808404922,-0.0824210941791534,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.951669454574585 ,-0.257042765617371,0.168090030550957,0.971294820308685,-0.11888038367033,0.206043228507042,0.989946246147156 ,-0.126425102353096,-0.0634277909994125,0.972172915935516,-0.00723095051944256,0.234152868390083,0.971294820308685 ,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448 ,-0.211912021040916,-0.132665053009987,0.943572819232941,-0.310979694128037,-0.113850839436054,0.821827530860901 ,-0.195920065045357,-0.53499048948288,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.368462383747101 ,-0.106815822422504,-0.923485696315765,0.383778035640717,0.0243120118975639,-0.923105239868164,0.0997140929102898 ,0.107741750776768,-0.989165723323822,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.804398477077484 ,0.375305235385895,-0.460531324148178,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850323617458344 ,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.826255619525909 ,0.440138310194016,-0.351539462804794,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.904132783412933 ,0.388770788908005,-0.177203923463821,0.855425655841827,0.486632764339447,-0.177300468087196,0.604855418205261 ,-0.787497401237488,-0.118312001228333,0.441250443458557,-0.840362787246704,-0.314783275127411,0.785753786563873 ,0.386755406856537,-0.482712358236313,0.785753786563873,0.386755406856537,-0.482712358236313,0.441250443458557 ,-0.840362787246704,-0.314783275127411,0.138132452964783,-0.828281044960022,-0.54301929473877,0.505264282226563 ,0.378391265869141,-0.775582432746887,0.505264282226563,0.378391265869141,-0.775582432746887,0.138132452964783 ,-0.828281044960022,-0.54301929473877,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.077034167945385 ,0.455207884311676,-0.88704651594162,0.077034167945385,0.455207884311676,-0.88704651594162,-0.136814370751381 ,-0.897029936313629,-0.42026075720787,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584 ,0.541098833084106,-0.792217254638672,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.490713983774185 ,0.668629288673401,-0.558690071105957,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.302752912044525 ,-0.830289721488953,-0.467931240797043,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.479781299829483 ,-0.760774612426758,-0.437072038650513,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.728462755680084 ,0.461005359888077,-0.506770253181458,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.0315269827842712 ,0.564418613910675,0.824886441230774,0.390523910522461,0.243563205003738,0.88778829574585,-0.419215679168701 ,-0.523534297943115,0.741734504699707,0.66844254732132,0.71253913640976,-0.213242888450623,0.888628959655762 ,0.438762068748474,0.133515372872353,0.886778235435486,0.377031594514847,0.267341554164886,0.399906992912292 ,0.90941196680069,-0.11421176046133,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416 ,0.297644048929214,-0.934196829795837,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.682030558586121 ,0.27886825799942,-0.676067173480988,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.211497768759727 ,-0.562794804573059,-0.799081146717072,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.676543116569519 ,-0.0153456926345825,-0.73624312877655,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.857439279556274 ,0.218963667750359,-0.465674519538879,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.975552141666412 ,0.149593591690063,-0.16099639236927,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.801694869995117 ,0.527419447898865,-0.281272232532501,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.894487380981445 ,0.445400327444077,-0.0388705171644688,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.876750707626343 ,0.238855347037315,-0.417440205812454,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.673633635044098 ,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,0.243145853281021 ,0.221795409917831,-0.944291710853577,0.24560159444809,0.232358887791634,-0.941110610961914,-0.187843710184097 ,0.254132181406021,-0.948752641677856,0.900178790092468,-0.431453764438629,0.0593785345554352,0.846972167491913 ,-0.511904895305634,-0.14349739253521,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.92520534992218 ,-0.376655071973801,-0.0461085550487041,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.9922234416008 ,-0.1217075958848,0.0260745380073786,-0.828080534934998,0.439521878957748,0.347998708486557,-0.542648077011108 ,0.604446232318878,0.583247661590576,0.605372726917267,0.000812157464679331,0.795941710472107,0.301932573318481 ,-0.883707880973816,0.357627093791962,0.423083633184433,0.0620496086776257,0.903963565826416,0.752377092838287 ,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.314953178167343 ,0.413695752620697,-0.854201555252075,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.625715851783752 ,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.233997270464897 ,0.489457190036774,-0.840045750141144,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.657665491104126 ,0.524985373020172,-0.540246665477753,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.801694869995117 ,0.527419447898865,-0.281272232532501,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269 ,0.594750702381134,-0.773861885070801,0.314953178167343,0.413695752620697,-0.854201555252075,0.333965450525284 ,0.337952494621277,-0.879917681217194,-0.233997270464897,0.489457190036774,-0.840045750141144,0.268678843975067 ,0.187903970479965,-0.944724142551422,0.286524504423141,0.225191175937653,-0.931231796741486,0.676566541194916 ,0.144181370735168,-0.722128391265869,0.655851304531097,0.12275330722332,-0.744842708110809,-0.653601109981537 ,0.351934164762497,-0.670035779476166,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.214722737669945 ,0.271103382110596,-0.938294768333435,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.663710594177246 ,0.281592607498169,-0.692960262298584,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.843356728553772 ,0.326204419136047,-0.427013009786606,-0.653601109981537,0.351934164762497,-0.670035779476166,0.286524504423141 ,0.225191175937653,-0.931231796741486,0.268678843975067,0.187903970479965,-0.944724142551422,-0.214722737669945 ,0.271103382110596,-0.938294768333435,-0.214377388358116,0.321097940206528,-0.922463238239288,0.24560159444809 ,0.232358887791634,-0.941110610961914,0.243145853281021,0.221795409917831,-0.944291710853577,0.639175117015839 ,0.0817547887563705,-0.764703452587128,0.653478145599365,0.112765118479729,-0.748498737812042,-0.892978370189667 ,-0.00842274446040392,-0.450020730495453,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.689231038093567 ,-0.628963589668274,-0.359674036502838,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.501005291938782 ,-0.576619863510132,-0.645370602607727,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.892978370189667 ,-0.00842274446040392,-0.450020730495453,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.0649978742003441 ,-0.592735111713409,-0.802770435810089,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.645673513412476 ,-0.0602749027311802,-0.761231005191803,0.442950963973999,-0.635696709156036,-0.632205784320831,-0.801694869995117 ,0.527419447898865,-0.281272232532501,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.613127768039703 ,0.486845344305038,-0.622138202190399,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.625715851783752 ,0.58097767829895,-0.520523428916931,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.206791058182716 ,0.492802500724792,-0.845211863517761,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.217736855149269 ,0.594750702381134,-0.773861885070801,-0.206791058182716,0.492802500724792,-0.845211863517761,0.233156397938728 ,0.373372942209244,-0.897903501987457,0.314953178167343,0.413695752620697,-0.854201555252075,0.314953178167343 ,0.413695752620697,-0.854201555252075,0.233156397938728,0.373372942209244,-0.897903501987457,0.541264474391937 ,0.0936620086431503,-0.835619688034058,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.676543116569519 ,-0.0153456926345825,-0.73624312877655,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.876750707626343 ,0.238855347037315,-0.417440205812454,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.682030558586121 ,0.27886825799942,-0.676067173480988,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.217101514339447 ,-0.0525678582489491,-0.974732518196106,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.645673513412476 ,-0.0602749027311802,-0.761231005191803,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.24560159444809 ,0.232358887791634,-0.941110610961914,0.653478145599365,0.112765118479729,-0.748498737812042,0.987106621265411 ,-0.147132456302643,-0.0630284249782562,0.93778657913208,-0.340576171875,-0.0675588026642799,0.872841775417328 ,-0.161784738302231,-0.460405200719833,0.892382204532623,-0.0374441854655743,-0.449724316596985,-0.924062490463257 ,0.166337832808495,-0.344151526689529,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.804398477077484 ,0.375305235385895,-0.460531324148178,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.633183360099792 ,0.75979870557785,-0.147596448659897,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.658661007881165 ,-0.541524648666382,-0.52241438627243,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.383682757616043 ,-0.370396196842194,0.845928013324738,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.639851093292236 ,0.713299214839935,0.28599801659584,-0.541773617267609,0.383253455162048,0.748062908649445,-0.127582266926765 ,-0.6490518450737,0.749969661235809,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.390523910522461 ,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,-0.248274028301239 ,-0.562410414218903,0.788704335689545,-0.689171850681305,-0.406394809484482,0.599904477596283,0.390523910522461 ,0.243563205003738,0.88778829574585,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.419215679168701 ,-0.523534297943115,0.741734504699707,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.193201750516891 ,-0.134490892291069,-0.971897780895233,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.176827967166901 ,-0.795711040496826,-0.579288959503174,-0.177617996931076,0.0687198787927628,-0.981697201728821,0.00292694312520325 ,-0.0230234544724226,-0.99973064661026,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.170505315065384 ,0.193187981843948,-0.96623307466507,-0.217101514339447,-0.0525678582489491,-0.974732518196106,0.194131925702095 ,-0.0336651504039764,-0.980397582054138,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.211497768759727 ,-0.562794804573059,-0.799081146717072,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.775201201438904 ,-0.315398722887039,0.547345161437988,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.96207994222641 ,0.0375091098248959,0.270176410675049,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.408054858446121 ,-0.272179991006851,0.871440947055817,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.775201201438904 ,-0.315398722887039,0.547345161437988,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.398905754089355 ,-0.33735454082489,0.852681756019592,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0792728736996651 ,-0.368663102388382,0.926176726818085,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0704309269785881 ,-0.316668570041656,0.945917785167694,0.378215909004211,-0.383805245161057,0.842405080795288,0.340047508478165 ,-0.388343751430511,0.856479287147522,0.340047508478165,-0.388343751430511,0.856479287147522,0.378215909004211 ,-0.383805245161057,0.842405080795288,0.665505409240723,-0.470593899488449,0.579347848892212,0.640090823173523 ,-0.393064320087433,0.660139560699463,0.665505409240723,-0.470593899488449,0.579347848892212,0.78835541009903 ,-0.474211633205414,0.391942739486694,0.867793679237366,-0.309993803501129,0.38837856054306,0.640090823173523 ,-0.393064320087433,0.660139560699463,0.998525857925415,0.0400822311639786,0.0366002470254898,0.92520534992218 ,-0.376655071973801,-0.0461085550487041,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.930242419242859 ,-0.158916160464287,0.330748707056046,0.930242419242859,-0.158916160464287,0.330748707056046,0.816507577896118 ,-0.574229061603546,-0.0598032623529434,0.685771405696869,-0.727804124355316,0.00433491868898273,0.805302381515503 ,-0.358387529850006,0.472277879714966,0.301932573318481,-0.883707880973816,0.357627093791962,0.289558619260788 ,-0.713769853115082,0.637721240520477,0.423083633184433,0.0620496086776257,0.903963565826416,0.989946246147156 ,-0.126425102353096,-0.0634277909994125,0.981179654598236,-0.112972341477871,-0.156600564718246,0.780589640140533 ,-0.0567772276699543,-0.622459769248962,0.78181403875351,-0.124027468264103,-0.611051499843597,-0.665158569812775 ,0.0713190585374832,0.743288397789001,-0.211948931217194,0.670887529850006,0.710624814033508,-0.0997487902641296 ,0.343725502490997,0.933757483959198,-0.211948931217194,0.670887529850006,0.710624814033508,0.129296213388443 ,0.717355608940125,0.684604585170746,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.439218908548355 ,-0.51500540971756,-0.736108779907227,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.839367032051086 ,0.0223368648439646,-0.543105900287628,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.639851093292236 ,0.713299214839935,0.28599801659584,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.828140676021576 ,-0.416389226913452,0.375237315893173,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.985335469245911 ,0.0123848039656878,-0.170178011059761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.894487380981445 ,0.445400327444077,-0.0388705171644688,-0.828080534934998,0.439521878957748,0.347998708486557,-0.9922234416008 ,-0.1217075958848,0.0260745380073786,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.665158569812775 ,0.0713190585374832,0.743288397789001,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.26332488656044 ,-0.487629622220993,0.832392573356628,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.0997487902641296 ,0.343725502490997,0.933757483959198,0.051387831568718,-0.174088895320892,0.983388185501099,-0.0260992348194122 ,-0.974703729152679,0.221971705555916,0.107415564358234,-0.480258971452713,0.870524644851685,0.508102118968964 ,0.373251259326935,0.776218891143799,0.423083633184433,0.0620496086776257,0.903963565826416,0.289558619260788 ,-0.713769853115082,0.637721240520477,0.214603096246719,0.506344735622406,0.835200905799866,-0.903217494487762 ,-0.152761682868004,0.401076048612595,-0.542648077011108,0.604446232318878,0.583247661590576,-0.454762816429138 ,0.657830238342285,0.60037499666214,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.882815718650818 ,-0.369268298149109,0.290305644273758,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.843237459659576 ,0.525120079517365,-0.114889100193977,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.839367032051086 ,0.0223368648439646,-0.543105900287628,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.863866031169891 ,0.184018969535828,-0.468905657529831,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.512617945671082 ,0.132903546094894,-0.848268508911133,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.725547671318054 ,0.0196763575077057,-0.687890529632568,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.177617996931076 ,0.0687198787927628,-0.981697201728821,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.441881209611893 ,-0.050617303699255,-0.89564436674118,-0.193201750516891,-0.134490892291069,-0.971897780895233,0.00292694312520325 ,-0.0230234544724226,-0.99973064661026,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.193201750516891 ,-0.134490892291069,-0.971897780895233,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.318273335695267 ,-0.280295252799988,-0.905613958835602,0.368462383747101,-0.106815822422504,-0.923485696315765,0.00292694312520325 ,-0.0230234544724226,-0.99973064661026,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.989946246147156 ,-0.126425102353096,-0.0634277909994125,0.78181403875351,-0.124027468264103,-0.611051499843597,0.746579051017761 ,-0.327975332736969,-0.578836619853973,0.891479134559631,-0.356151014566422,-0.280038207769394,0.815547049045563 ,-0.485381871461868,-0.315099239349365,0.891479134559631,-0.356151014566422,-0.280038207769394,0.586520791053772 ,-0.278485208749771,-0.760551989078522,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.987106621265411 ,-0.147132456302643,-0.0630284249782562,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.883630573749542 ,-0.0664602965116501,-0.463443666696548,0.881715893745422,0.054974939674139,-0.468566834926605,0.991608023643494 ,-0.114275835454464,-0.060452651232481,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.885001957416534 ,0.0480887815356255,-0.463097155094147,0.897607445716858,-0.182163774967194,-0.401394128799438,0.932035446166992 ,0.0906825214624405,-0.350836962461472,0.752377092838287,0.158552542328835,-0.639366745948792,0.69469678401947 ,0.0795350298285484,-0.714891970157623,0.821827530860901,-0.195920065045357,-0.53499048948288,0.897607445716858 ,-0.182163774967194,-0.401394128799438,0.69469678401947,0.0795350298285484,-0.714891970157623,0.541264474391937 ,0.0936620086431503,-0.835619688034058,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.821827530860901 ,-0.195920065045357,-0.53499048948288,0.541264474391937,0.0936620086431503,-0.835619688034058,0.422129124403 ,0.115602806210518,-0.899134576320648,0.881715893745422,0.054974939674139,-0.468566834926605,0.885001957416534 ,0.0480887815356255,-0.463097155094147,0.655851304531097,0.12275330722332,-0.744842708110809,0.676566541194916 ,0.144181370735168,-0.722128391265869,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.892382204532623 ,-0.0374441854655743,-0.449724316596985,0.653478145599365,0.112765118479729,-0.748498737812042,0.639175117015839 ,0.0817547887563705,-0.764703452587128,0.897607445716858,-0.182163774967194,-0.401394128799438,0.821827530860901 ,-0.195920065045357,-0.53499048948288,0.943572819232941,-0.310979694128037,-0.113850839436054,0.92520534992218 ,-0.376655071973801,-0.0461085550487041,0.998525857925415,0.0400822311639786,0.0366002470254898,0.932035446166992 ,0.0906825214624405,-0.350836962461472,0.897607445716858,-0.182163774967194,-0.401394128799438,0.92520534992218 ,-0.376655071973801,-0.0461085550487041,0.991423904895782,0.113214619457722,0.0652767568826675,0.992731213569641 ,-0.118552401661873,0.0207367613911629,0.971294820308685,-0.11888038367033,0.206043228507042,0.972172915935516 ,-0.00723095051944256,0.234152868390083,0.991423904895782,0.113214619457722,0.0652767568826675,0.972172915935516 ,-0.00723095051944256,0.234152868390083,0.815547049045563,-0.485381871461868,-0.315099239349365,0.80362457036972 ,-0.592847883701324,0.052143108099699,0.588976085186005,-0.561100006103516,0.58161324262619,0.995399534702301 ,0.0302368272095919,0.0909145176410675,0.80362457036972,-0.592847883701324,0.052143108099699,0.898760318756104 ,0.357274115085602,0.254135996103287,0.960353672504425,0.263352990150452,0.0914659649133682,0.588976085186005 ,-0.561100006103516,0.58161324262619,0.0119833052158356,-0.684736132621765,0.728692531585693,0.750469028949738 ,0.503480017185211,0.42814028263092,0.898760318756104,0.357274115085602,0.254135996103287,0.588976085186005,-0.561100006103516 ,0.58161324262619,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.757972836494446,-0.133171454071999 ,-0.63854718208313,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.843237459659576,0.525120079517365 ,-0.114889100193977,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.757972836494446,-0.133171454071999 ,-0.63854718208313,-0.924443244934082,0.266406655311584,-0.272822648286819,0.603638291358948,-0.670441269874573 ,-0.431427150964737,0.872841775417328,-0.161784738302231,-0.460405200719833,0.93778657913208,-0.340576171875 ,-0.0675588026642799,0.581761598587036,-0.790978848934174,-0.189488589763641,0.932035446166992,0.0906825214624405 ,-0.350836962461472,0.998525857925415,0.0400822311639786,0.0366002470254898,0.977894842624664,0.203556552529335 ,0.0478159449994564,0.904317140579224,0.203987643122673,-0.3749660551548,0.932035446166992,0.0906825214624405 ,-0.350836962461472,0.904317140579224,0.203987643122673,-0.3749660551548,0.74667090177536,0.1879021525383,-0.638102948665619 ,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194 ,0.752377092838287,0.158552542328835,-0.639366745948792,0.74667090177536,0.1879021525383,-0.638102948665619,0.32976895570755 ,0.307349354028702,-0.892630279064178,-0.233997270464897,0.489457190036774,-0.840045750141144,0.333965450525284 ,0.337952494621277,-0.879917681217194,0.32976895570755,0.307349354028702,-0.892630279064178,-0.232812166213989 ,0.426294058561325,-0.874112010002136,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.233997270464897 ,0.489457190036774,-0.840045750141144,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.671548306941986 ,0.466394305229187,-0.575759708881378,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.657665491104126 ,0.524985373020172,-0.540246665477753,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.820989012718201 ,0.473643779754639,-0.318808138370514,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.971879303455353 ,-0.208401709794998,0.109632924199104,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.975552141666412 ,0.149593591690063,-0.16099639236927,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.719066202640533 ,-0.680389881134033,-0.14146888256073,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.967361629009247 ,-0.0953836515545845,-0.234762668609619,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.703129649162292 ,0.0220469851046801,0.710719764232636,-0.93060040473938,0.126688674092293,0.343413561582565,-0.96207994222641 ,0.0375091098248959,0.270176410675049,-0.866685390472412,0.374831438064575,0.329177558422089,-0.801453590393066 ,-0.0788522064685822,0.592835962772369,-0.678687632083893,0.530943989753723,0.507426381111145,-0.828080534934998 ,0.439521878957748,0.347998708486557,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.96207994222641 ,0.0375091098248959,0.270176410675049,-0.93060040473938,0.126688674092293,0.343413561582565,-0.964663922786713 ,0.191057458519936,-0.18144017457962,0.951669454574585,-0.257042765617371,0.168090030550957,0.968242347240448 ,-0.211912021040916,-0.132665053009987,0.981179654598236,-0.112972341477871,-0.156600564718246,0.971294820308685 ,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448 ,-0.211912021040916,-0.132665053009987,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.780589640140533 ,-0.0567772276699543,-0.622459769248962,0.383778035640717,0.0243120118975639,-0.923105239868164,0.780589640140533 ,-0.0567772276699543,-0.622459769248962,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.422129124403 ,0.115602806210518,-0.899134576320648,0.383778035640717,0.0243120118975639,-0.923105239868164,0.422129124403 ,0.115602806210518,-0.899134576320648,0.156071558594704,0.248666033148766,-0.955932438373566,0.0997140929102898 ,0.107741750776768,-0.989165723323822,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.170505315065384 ,0.193187981843948,-0.96623307466507,0.0997140929102898,0.107741750776768,-0.989165723323822,0.156071558594704 ,0.248666033148766,-0.955932438373566,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.170505315065384 ,0.193187981843948,-0.96623307466507,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.59022468328476 ,0.354267239570618,-0.725347936153412,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.829805314540863 ,0.320066124200821,-0.457144170999527,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.566148936748505 ,0.251458436250687,-0.785012185573578,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.98767364025116 ,-0.155731916427612,-0.0157585926353931,0.949489533901215,-0.288099020719528,0.124372407793999,0.951669454574585 ,-0.257042765617371,0.168090030550957,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.854514360427856 ,0.214296534657478,-0.473161995410919,-0.850323617458344,0.228136301040649,-0.474239945411682,0.846972167491913 ,-0.511904895305634,-0.14349739253521,0.900178790092468,-0.431453764438629,0.0593785345554352,0.973673224449158 ,-0.222424849867821,-0.0498761273920536,0.660678803920746,-0.179935500025749,0.728784441947937,0.884072363376617 ,-0.159779712557793,0.439188450574875,0.861376106739044,-0.246860504150391,0.443949490785599,0.664143323898315 ,-0.190197542309761,0.72300660610199,-0.93060040473938,0.126688674092293,0.343413561582565,-0.703129649162292 ,0.0220469851046801,0.710719764232636,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.924485385417938 ,0.137891575694084,0.355404943227768,0.519910156726837,-0.607850134372711,0.600176334381104,0.477010041475296 ,-0.793651044368744,0.377596825361252,0.913633346557617,-0.352534860372543,0.202467978000641,-0.388236194849014 ,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.147943705320358 ,-0.468890011310577,0.870778322219849,0.519910156726837,-0.607850134372711,0.600176334381104,0.913633346557617 ,-0.352534860372543,0.202467978000641,0.505195319652557,-0.403650730848312,0.762786865234375,0.505195319652557 ,-0.403650730848312,0.762786865234375,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.415356457233429 ,-0.555049777030945,0.720693230628967,0.519910156726837,-0.607850134372711,0.600176334381104,-0.901903212070465 ,-0.103399723768234,0.419379383325577,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.415356457233429 ,-0.555049777030945,0.720693230628967,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.845879793167114 ,-0.333898961544037,0.415931314229965,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.996204435825348 ,0.0376567244529724,-0.0784778669476509,-0.938492894172668,-0.335133403539658,0.0831665322184563,0.682205855846405 ,-0.688040673732758,-0.247376576066017,0.685771405696869,-0.727804124355316,0.00433491868898273,0.816507577896118 ,-0.574229061603546,-0.0598032623529434,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.900178790092468 ,-0.431453764438629,0.0593785345554352,0.949489533901215,-0.288099020719528,0.124372407793999,0.98767364025116 ,-0.155731916427612,-0.0157585926353931,0.846972167491913,-0.511904895305634,-0.14349739253521,0.682205855846405 ,-0.688040673732758,-0.247376576066017,0.816507577896118,-0.574229061603546,-0.0598032623529434,-0.863597929477692 ,0.181174650788307,-0.470504373311996,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.854514360427856 ,0.214296534657478,-0.473161995410919,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.863597929477692 ,0.181174650788307,-0.470504373311996,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.796034395694733 ,0.305417150259018,-0.522541463375092,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.850323617458344 ,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.798423051834106 ,0.345685392618179,-0.492972820997238,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.419204741716385 ,0.619329035282135,0.66385155916214,-0.211948931217194,0.670887529850006,0.710624814033508,-0.665158569812775 ,0.0713190585374832,0.743288397789001,-0.454762816429138,0.657830238342285,0.60037499666214,0.051387831568718 ,-0.174088895320892,0.983388185501099,0.289558619260788,-0.713769853115082,0.637721240520477,-0.0260992348194122 ,-0.974703729152679,0.221971705555916,0.559202313423157,-0.768743932247162,-0.310363441705704,0.610888957977295 ,-0.781325817108154,0.127846196293831,0.639626801013947,-0.543238401412964,0.543847024440765,0.91938704252243 ,-0.184946089982986,-0.347163438796997,0.776516377925873,0.531664490699768,-0.338164389133453,0.467275589704514 ,0.564712345600128,-0.680259943008423,0.228658348321915,0.96535587310791,-0.125711753964424,0.287440627813339 ,0.955214440822601,-0.070308543741703,0.182189047336578,0.963832557201386,-0.194509625434875,0.136670753359795 ,0.566407382488251,-0.812713861465454,-0.153365463018417,0.631252944469452,-0.760262310504913,0.158467367291451 ,0.970077335834503,-0.183951318264008,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.0725360587239265 ,-0.598356962203979,-0.797939538955688,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.285298675298691 ,0.0749257579445839,-0.95550549030304,0.865038812160492,0.500161468982697,0.0393240377306938,0.332606196403503 ,0.942266285419464,-0.0388250686228275,0.399906992912292,0.90941196680069,-0.11421176046133,0.886778235435486 ,0.377031594514847,0.267341554164886,0.467275589704514,0.564712345600128,-0.680259943008423,0.136670753359795 ,0.566407382488251,-0.812713861465454,0.182189047336578,0.963832557201386,-0.194509625434875,0.228658348321915 ,0.96535587310791,-0.125711753964424,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.658661007881165 ,-0.541524648666382,-0.52241438627243,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.285298675298691 ,0.0749257579445839,-0.95550549030304,-0.343562453985214,0.683792293071747,-0.643733561038971,0.191059574484825 ,0.965591907501221,-0.17643266916275,0.158467367291451,0.970077335834503,-0.183951318264008,-0.153365463018417 ,0.631252944469452,-0.760262310504913,0.277932703495026,-0.692557215690613,-0.665670990943909,0.505863070487976 ,-0.10451452434063,-0.856258869171143,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.0725360587239265 ,-0.598356962203979,-0.797939538955688,0.277932703495026,-0.692557215690613,-0.665670990943909,0.559202313423157 ,-0.768743932247162,-0.310363441705704,0.91938704252243,-0.184946089982986,-0.347163438796997,0.505863070487976 ,-0.10451452434063,-0.856258869171143,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.795176029205322 ,0.587453246116638,0.150312438607216,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.439218908548355 ,-0.51500540971756,-0.736108779907227,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.845747351646423 ,-0.528353095054626,0.0745282098650932,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.549123287200928 ,-0.730513632297516,-0.405972242355347,0.536804795265198,-0.812591671943665,-0.227014124393463,0.604855418205261 ,-0.787497401237488,-0.118312001228333,0.624463975429535,-0.657274067401886,0.421942621469498,0.722857892513275 ,-0.480003207921982,-0.497064769268036,0.722857892513275,-0.480003207921982,-0.497064769268036,0.624463975429535 ,-0.657274067401886,0.421942621469498,0.802787482738495,0.346281617879868,0.485408395528793,0.931353688240051 ,0.363742500543594,0.0164845213294029,0.931353688240051,0.363742500543594,0.0164845213294029,0.802787482738495 ,0.346281617879868,0.485408395528793,0.855425655841827,0.486632764339447,-0.177300468087196,0.809532463550568 ,0.353956818580627,0.468371391296387,0.441250443458557,-0.840362787246704,-0.314783275127411,0.604855418205261 ,-0.787497401237488,-0.118312001228333,0.536804795265198,-0.812591671943665,-0.227014124393463,0.353731364011765 ,-0.88641881942749,-0.298556119203568,0.138132452964783,-0.828281044960022,-0.54301929473877,0.441250443458557 ,-0.840362787246704,-0.314783275127411,0.353731364011765,-0.88641881942749,-0.298556119203568,0.056479137390852 ,-0.856393754482269,-0.513224899768829,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.138132452964783 ,-0.828281044960022,-0.54301929473877,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.176827967166901 ,-0.795711040496826,-0.579288959503174,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.0855581760406494 ,-0.201314404606819,-0.975782930850983,0.077034167945385,0.455207884311676,-0.88704651594162,-0.28214168548584 ,0.541098833084106,-0.792217254638672,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.203037455677986 ,-0.825956046581268,-0.52590149641037,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.302752912044525 ,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.490713983774185 ,0.668629288673401,-0.558690071105957,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.371980756521225 ,-0.111040212213993,-0.921574950218201,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.481908857822418 ,-0.755593657493591,-0.443668872117996,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.302752912044525 ,-0.830289721488953,-0.467931240797043,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.795176029205322 ,0.587453246116638,0.150312438607216,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.983289659023285 ,0.179070711135864,0.032787948846817,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.490713983774185 ,0.668629288673401,-0.558690071105957,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.562491774559021 ,-0.71064704656601,-0.422591775655746,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.481908857822418 ,-0.755593657493591,-0.443668872117996,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.633183360099792 ,0.75979870557785,-0.147596448659897,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.809815943241119 ,-0.0024391699116677,-0.586678981781006,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.658661007881165 ,-0.541524648666382,-0.52241438627243,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.809815943241119 ,-0.0024391699116677,-0.586678981781006,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.0330419652163982 ,0.483641624450684,-0.874642193317413,0.191059574484825,0.965591907501221,-0.17643266916275,-0.343562453985214 ,0.683792293071747,-0.643733561038971,0.855425655841827,0.486632764339447,-0.177300468087196,0.785753786563873 ,0.386755406856537,-0.482712358236313,0.843447089195251,-0.319755733013153,-0.431686460971832,0.809532463550568 ,0.353956818580627,0.468371391296387,0.942203402519226,0.0765308514237404,0.326183587312698,0.976662814617157 ,0.0512243360280991,0.208580628037453,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.606497347354889 ,-0.734818637371063,0.303648799657822,0.886778235435486,0.377031594514847,0.267341554164886,-0.127582266926765 ,-0.6490518450737,0.749969661235809,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0315269827842712 ,0.564418613910675,0.824886441230774,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.839367032051086 ,0.0223368648439646,-0.543105900287628,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.481908857822418 ,-0.755593657493591,-0.443668872117996,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.769991517066956 ,0.178484797477722,-0.612581610679626,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.839367032051086 ,0.0223368648439646,-0.543105900287628,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.850323617458344 ,0.228136301040649,-0.474239945411682,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.796081125736237 ,0.269071251153946,-0.542084395885468,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.804398477077484 ,0.375305235385895,-0.460531324148178,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.829805314540863 ,0.320066124200821,-0.457144170999527,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.871505856513977 ,0.489616960287094,-0.0274355374276638,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.81437873840332 ,0.501368820667267,-0.292261153459549,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967624545097351 ,0.222042396664619,-0.119999624788761,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.843356728553772 ,0.326204419136047,-0.427013009786606,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.892978370189667 ,-0.00842274446040392,-0.450020730495453,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.975552141666412 ,0.149593591690063,-0.16099639236927,-0.876750707626343,0.238855347037315,-0.417440205812454,0.505264282226563 ,0.378391265869141,-0.775582432746887,0.077034167945385,0.455207884311676,-0.88704651594162,0.0855581760406494 ,-0.201314404606819,-0.975782930850983,0.585620284080505,-0.30219754576683,-0.752147257328033,0.606497347354889 ,-0.734818637371063,0.303648799657822,0.784134984016418,-0.509350836277008,-0.354533582925797,0.639626801013947 ,-0.543238401412964,0.543847024440765,0.610888957977295,-0.781325817108154,0.127846196293831,0.865038812160492 ,0.500161468982697,0.0393240377306938,0.886778235435486,0.377031594514847,0.267341554164886,0.606497347354889 ,-0.734818637371063,0.303648799657822,0.610888957977295,-0.781325817108154,0.127846196293831,0.585620284080505 ,-0.30219754576683,-0.752147257328033,0.843447089195251,-0.319755733013153,-0.431686460971832,0.785753786563873 ,0.386755406856537,-0.482712358236313,0.505264282226563,0.378391265869141,-0.775582432746887,-0.706070244312286 ,0.00520930625498295,-0.708122611045837,-0.879797160625458,-0.457895129919052,-0.127628490328789,0.0757457762956619 ,-0.699936747550964,-0.710176825523376,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.585620284080505 ,-0.30219754576683,-0.752147257328033,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.66748982667923 ,-0.736912310123444,0.106852844357491,0.843447089195251,-0.319755733013153,-0.431686460971832,0.735480666160584 ,0.34406366944313,-0.583685159683228,0.91938704252243,-0.184946089982986,-0.347163438796997,0.639626801013947 ,-0.543238401412964,0.543847024440765,0.807643234729767,0.341063499450684,0.481028109788895,0.930141091346741 ,0.365344673395157,0.0368896275758743,0.272457927465439,0.39542019367218,-0.877159953117371,0.505863070487976 ,-0.10451452434063,-0.856258869171143,0.91938704252243,-0.184946089982986,-0.347163438796997,0.162468671798706 ,0.414035111665726,-0.89564436674118,-0.719203293323517,0.653926372528076,-0.234791070222855,-0.682009935379028 ,0.101576536893845,-0.724254548549652,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822 ,0.553657293319702,-0.675496935844421,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.0861517861485481 ,0.0155389430001378,-0.996160864830017,0.594993591308594,0.323719650506973,-0.735654950141907,-0.316894441843033 ,0.476865291595459,-0.819864273071289,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.505863070487976 ,-0.10451452434063,-0.856258869171143,0.728234827518463,0.325270414352417,-0.603219032287598,-0.371980756521225 ,-0.111040212213993,-0.921574950218201,-0.712427794933319,-0.549001693725586,-0.437085568904877,0.435323119163513 ,-0.758436143398285,-0.485044747591019,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.807643234729767 ,0.341063499450684,0.481028109788895,0.639626801013947,-0.543238401412964,0.543847024440765,0.809532463550568 ,0.353956818580627,0.468371391296387,0.521454632282257,-0.681395709514618,0.513599991798401,0.521454632282257 ,-0.681395709514618,0.513599991798401,0.809532463550568,0.353956818580627,0.468371391296387,0.843447089195251 ,-0.319755733013153,-0.431686460971832,0.454940408468246,-0.69178706407547,-0.560767233371735,-0.809815943241119 ,-0.0024391699116677,-0.586678981781006,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.917265832424164 ,-0.397978872060776,0.0153695549815893,-0.983289659023285,0.179070711135864,0.032787948846817,-0.983289659023285 ,0.179070711135864,0.032787948846817,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.205607205629349 ,-0.621804177761078,-0.755701839923859,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028 ,0.101576536893845,-0.724254548549652,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.756093859672546 ,0.644391119480133,-0.114376991987228,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.0855581760406494 ,-0.201314404606819,-0.975782930850983,-0.555338084697723,-0.543631553649902,-0.629336416721344,0.512858152389526 ,-0.774301767349243,-0.370719999074936,0.585620284080505,-0.30219754576683,-0.752147257328033,0.784134984016418 ,-0.509350836277008,-0.354533582925797,0.606497347354889,-0.734818637371063,0.303648799657822,0.989238142967224 ,-0.144198939204216,-0.0247913636267185,0.888628959655762,0.438762068748474,0.133515372872353,0.942203402519226 ,0.0765308514237404,0.326183587312698,0.886778235435486,0.377031594514847,0.267341554164886,-0.917265832424164 ,-0.397978872060776,0.0153695549815893,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.132126957178116 ,0.383346885442734,-0.914104819297791,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.205607205629349 ,-0.621804177761078,-0.755701839923859,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.682009935379028 ,0.101576536893845,-0.724254548549652,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.706070244312286 ,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.719203293323517 ,0.653926372528076,-0.234791070222855,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.879797160625458 ,-0.457895129919052,-0.127628490328789,-0.719203293323517,0.653926372528076,-0.234791070222855,0.162468671798706 ,0.414035111665726,-0.89564436674118,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.0757457762956619 ,-0.699936747550964,-0.710176825523376,0.162468671798706,0.414035111665726,-0.89564436674118,-0.285298675298691 ,0.0749257579445839,-0.95550549030304,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.371980756521225 ,-0.111040212213993,-0.921574950218201,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822 ,0.553657293319702,-0.675496935844421,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.712427794933319 ,-0.549001693725586,-0.437085568904877,-0.486998409032822,0.553657293319702,-0.675496935844421,0.594993591308594 ,0.323719650506973,-0.735654950141907,0.435323119163513,-0.758436143398285,-0.485044747591019,0.435323119163513 ,-0.758436143398285,-0.485044747591019,0.594993591308594,0.323719650506973,-0.735654950141907,0.0861517861485481 ,0.0155389430001378,-0.996160864830017,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0855581760406494 ,-0.201314404606819,-0.975782930850983,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.316894441843033 ,0.476865291595459,-0.819864273071289,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.555338084697723 ,-0.543631553649902,-0.629336416721344,-0.316894441843033,0.476865291595459,-0.819864273071289,0.728234827518463 ,0.325270414352417,-0.603219032287598,0.512858152389526,-0.774301767349243,-0.370719999074936,0.512858152389526 ,-0.774301767349243,-0.370719999074936,0.728234827518463,0.325270414352417,-0.603219032287598,0.505863070487976 ,-0.10451452434063,-0.856258869171143,0.585620284080505,-0.30219754576683,-0.752147257328033,0.585620284080505 ,-0.30219754576683,-0.752147257328033,0.505863070487976,-0.10451452434063,-0.856258869171143,0.272457927465439 ,0.39542019367218,-0.877159953117371,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.0887269154191017 ,-0.638365030288696,-0.764602899551392,0.272457927465439,0.39542019367218,-0.877159953117371,0.930141091346741 ,0.365344673395157,0.0368896275758743,0.66748982667923,-0.736912310123444,0.106852844357491,0.66748982667923 ,-0.736912310123444,0.106852844357491,0.930141091346741,0.365344673395157,0.0368896275758743,0.91938704252243 ,-0.184946089982986,-0.347163438796997,0.843447089195251,-0.319755733013153,-0.431686460971832,0.843447089195251 ,-0.319755733013153,-0.431686460971832,0.91938704252243,-0.184946089982986,-0.347163438796997,0.735480666160584 ,0.34406366944313,-0.583685159683228,0.454940408468246,-0.69178706407547,-0.560767233371735,0.454940408468246 ,-0.69178706407547,-0.560767233371735,0.735480666160584,0.34406366944313,-0.583685159683228,0.807643234729767 ,0.341063499450684,0.481028109788895,0.521454632282257,-0.681395709514618,0.513599991798401,0.526285588741302 ,-0.789061844348907,0.316867232322693,0.289891242980957,-0.786550641059875,0.545253336429596,0.133638396859169 ,-0.991028487682343,-0.00182732508983463,0.133638396859169,-0.991028487682343,-0.00182732508983463,0.289891242980957 ,-0.786550641059875,0.545253336429596,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0176914222538471 ,-0.987810254096985,0.154654189944267,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.43298476934433 ,-0.720436811447144,0.541751801967621,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.316983908414841 ,-0.933099091053009,0.169844955205917,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.355301171541214 ,-0.934036552906036,0.0365622416138649,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.63077574968338 ,-0.739016532897949,0.236593529582024,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.39702296257019 ,-0.910409450531006,-0.116307184100151,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.63077574968338 ,-0.739016532897949,0.236593529582024,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.387578904628754 ,-0.825659334659576,-0.40996253490448,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.719066202640533 ,-0.680389881134033,-0.14146888256073,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.689231038093567 ,-0.628963589668274,-0.359674036502838,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.347473174333572 ,-0.882382750511169,-0.317274332046509,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.348667085170746 ,-0.872639775276184,-0.341951847076416,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.65434330701828 ,-0.613166451454163,-0.442562788724899,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.501005291938782 ,-0.576619863510132,-0.645370602607727,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.227143570780754 ,-0.829574823379517,-0.51010924577713,-0.227143570780754,-0.829574823379517,-0.51010924577713,0.0649978742003441 ,-0.592735111713409,-0.802770435810089,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.113406293094158 ,-0.831756949424744,-0.543432950973511,-0.211497768759727,-0.562794804573059,-0.799081146717072,0.0696519389748573 ,-0.853706240653992,-0.516075789928436,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.442950963973999 ,-0.635696709156036,-0.632205784320831,0.219755545258522,-0.882318615913391,-0.416198641061783,0.526285588741302 ,-0.789061844348907,0.316867232322693,0.562327146530151,-0.809826016426086,0.167242258787155,0.78835541009903 ,-0.474211633205414,0.391942739486694,0.665505409240723,-0.470593899488449,0.579347848892212,0.991608023643494 ,-0.114275835454464,-0.060452651232481,0.82292628288269,-0.280684322118759,0.493972301483154,0.831244945526123 ,-0.225508287549019,0.508112013339996,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.867793679237366 ,-0.309993803501129,0.38837856054306,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.988763093948364 ,-0.140536084771156,-0.0509620234370232,0.884072363376617,-0.159779712557793,0.439188450574875,0.78835541009903 ,-0.474211633205414,0.391942739486694,0.93778657913208,-0.340576171875,-0.0675588026642799,0.987106621265411 ,-0.147132456302643,-0.0630284249782562,0.867793679237366,-0.309993803501129,0.38837856054306,0.581761598587036 ,-0.790978848934174,-0.189488589763641,0.93778657913208,-0.340576171875,-0.0675588026642799,0.78835541009903 ,-0.474211633205414,0.391942739486694,0.562327146530151,-0.809826016426086,0.167242258787155,-0.0647715702652931 ,-0.0269695688039064,0.997535645961761,0.280544310808182,-0.2230264544487,0.933570623397827,0.147943705320358 ,-0.468890011310577,0.870778322219849,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.370588421821594 ,-0.193350583314896,0.908449113368988,0.280544310808182,-0.2230264544487,0.933570623397827,-0.0647715702652931 ,-0.0269695688039064,0.997535645961761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.985335469245911 ,0.0123848039656878,-0.170178011059761,-0.924062490463257,0.166337832808495,-0.344151526689529,0.92520534992218 ,-0.376655071973801,-0.0461085550487041,0.943572819232941,-0.310979694128037,-0.113850839436054,0.949489533901215 ,-0.288099020719528,0.124372407793999,0.900178790092468,-0.431453764438629,0.0593785345554352,0.815547049045563 ,-0.485381871461868,-0.315099239349365,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.891479134559631 ,-0.356151014566422,-0.280038207769394,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.94812422990799 ,0.313342124223709,-0.0536391511559486,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.922418296337128 ,0.0309104230254889,0.384953290224075,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.94812422990799 ,0.313342124223709,-0.0536391511559486,-0.877985596656799,0.347244709730148,0.329488188028336,-0.939527928829193 ,0.186541080474854,0.287210255861282,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.482705980539322 ,0.267842918634415,-0.833819627761841,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.923067510128021 ,0.218861386179924,-0.316300690174103,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0218884665518999 ,0.60806405544281,0.793586194515228,0.432919770479202,0.554768323898315,0.710501611232758,0.272088974714279,0.83392196893692 ,0.480147629976273,-0.402506142854691,0.589897632598877,0.70000684261322,-0.0960818529129028,0.882192492485046 ,0.460982292890549,-0.147527620196342,0.908096194267273,0.391914486885071,-0.551313877105713,0.631630659103394 ,0.545064926147461,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.877985596656799,0.347244709730148 ,0.329488188028336,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.850938260555267,-0.0678398907184601 ,0.520866394042969,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.697896897792816,0.111968666315079 ,0.707391619682312,-0.877985596656799,0.347244709730148,0.329488188028336,-0.675129354000092,-0.135668352246284 ,0.725116848945618,-0.0218884665518999,0.60806405544281,0.793586194515228,0.0640611723065376,0.868370652198792 ,0.491760730743408,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.402506142854691,0.589897632598877 ,0.70000684261322,-0.697896897792816,0.111968666315079,0.707391619682312,-0.45111495256424,-0.252489358186722 ,0.856004893779755,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.0958455428481102,-0.0575050786137581 ,0.993733763694763,-0.976002871990204,0.137454673647881,0.168892458081245,-0.850299119949341,0.0502048023045063 ,0.523899674415588,-0.551313877105713,0.631630659103394,0.545064926147461,-0.683505356311798,0.663009881973267 ,0.305349379777908,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.668019652366638,-0.146763682365417 ,0.729527354240417,-0.697896897792816,0.111968666315079,0.707391619682312,-0.0958455428481102,-0.0575050786137581 ,0.993733763694763,-0.939527928829193,0.186541080474854,0.287210255861282,-0.903742134571075,0.0408328101038933 ,0.426125347614288,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.990444839000702,0.137596040964127 ,-0.00929243210703135,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.805570960044861,0.0887086465954781 ,-0.585820972919464,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.923067510128021,0.218861386179924 ,-0.316300690174103,0.568327903747559,-0.132913276553154,0.811995983123779,0.503679692745209,-0.333046585321426 ,0.797111511230469,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.0958455428481102,-0.0575050786137581 ,0.993733763694763,0.560331284999847,-0.197167843580246,0.804458677768707,0.681288719177246,-0.155398637056351 ,0.715329945087433,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.969195008277893,0.116620995104313 ,0.216934517025948,0.934698820114136,0.0468888580799103,-0.352334558963776,0.909544348716736,-0.0496345721185207 ,0.412632375955582,0.953069984912872,0.0484385639429092,0.298849850893021,0.942743897438049,-0.0672791972756386 ,-0.326661080121994,0.76161140203476,-0.261901050806046,0.592752873897552,0.503679692745209,-0.333046585321426 ,0.797111511230469,0.568327903747559,-0.132913276553154,0.811995983123779,0.807208120822906,-0.16038890182972 ,0.568058490753174,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.964133560657501,0.11603681743145 ,0.238708838820457,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.937970280647278,0.291287869215012 ,-0.188050955533981,-0.964133560657501,0.11603681743145,0.238708838820457,-0.892664194107056,0.187903389334679 ,-0.409686326980591,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.928708910942078,-0.245197176933289 ,0.278169125318527,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.713874757289886,0.186937421560287 ,-0.674860894680023,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.892664194107056,0.187903389334679 ,-0.409686326980591,0.801601529121399,-0.550374329090118,-0.233501866459847,0.681288719177246,-0.155398637056351 ,0.715329945087433,0.293806612491608,-0.416160941123962,0.860515952110291,0.364783316850662,-0.883516609668732 ,0.293822199106216,0.953069984912872,0.0484385639429092,0.298849850893021,0.909544348716736,-0.0496345721185207 ,0.412632375955582,0.871833384037018,0.0184005852788687,0.489456832408905,0.928847432136536,0.162274017930031 ,0.333030939102173,0.546681344509125,-0.221680983901024,0.807463347911835,0.560331284999847,-0.197167843580246 ,0.804458677768707,0.969195008277893,0.116620995104313,0.216934517025948,0.928847432136536,0.162274017930031 ,0.333030939102173,0.332680404186249,-0.441110402345657,0.833513855934143,-0.837489604949951,-0.137019082903862 ,0.528996169567108,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.922418296337128,0.0309104230254889 ,0.384953290224075,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.0511878095567226,-0.230872601270676 ,0.971636593341827,0.161164596676826,-0.331503033638,0.929586827754974,-0.136431202292442,-0.35848480463028,0.923512399196625 ,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.246746554970741,-0.163683891296387,-0.95515638589859 ,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.482705980539322,0.267842918634415,-0.833819627761841 ,0.890334188938141,-0.2436583340168,-0.384624063968658,-0.47929310798645,-0.284916669130325,-0.830120861530304 ,-0.383484423160553,-0.10283836722374,-0.917803883552551,0.942743897438049,-0.0672791972756386,-0.326661080121994 ,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.652578115463257,-0.0296747144311666,0.757140159606934 ,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.850938260555267,-0.0678398907184601,0.520866394042969 ,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.389561533927917,-0.191748484969139,0.900818705558777 ,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.675129354000092,-0.135668352246284,0.725116848945618 ,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.213112205266953,-0.0906345173716545,0.972814738750458 ,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.45111495256424,-0.252489358186722,0.856004893779755 ,0.0511878095567226,-0.230872601270676,0.971636593341827,0.152829229831696,-0.222570449113846,0.962863266468048 ,0.30596736073494,-0.302397102117538,0.902740240097046,0.161164596676826,-0.331503033638,0.929586827754974,0.118139639496803 ,-0.728867173194885,0.67438542842865,-0.583520650863647,-0.523498177528381,0.620848834514618,0.546681344509125 ,-0.221680983901024,0.807463347911835,0.456334859132767,-0.263855695724487,0.849787414073944,-0.812033832073212 ,-0.319456815719604,0.488414168357849,-0.828753769397736,-0.00401695584878325,0.559599041938782,0.681288719177246 ,-0.155398637056351,0.715329945087433,0.560331284999847,-0.197167843580246,0.804458677768707,-0.383484423160553 ,-0.10283836722374,-0.917803883552551,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.934698820114136 ,0.0468888580799103,-0.352334558963776,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.202261254191399 ,-0.191956058144569,0.960334956645966,0.332680404186249,-0.441110402345657,0.833513855934143,-0.922418296337128 ,0.0309104230254889,0.384953290224075,-0.964133560657501,0.11603681743145,0.238708838820457,0.691331505775452 ,-0.716019809246063,-0.0968316718935966,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.775554835796356 ,-0.490125626325607,-0.397858709096909,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.201129660010338 ,-0.411518931388855,0.888931393623352,0.202261254191399,-0.191956058144569,0.960334956645966,-0.964133560657501 ,0.11603681743145,0.238708838820457,-0.928708910942078,-0.245197176933289,0.278169125318527,0.751028060913086 ,-0.474978506565094,-0.458641737699509,0.691331505775452,-0.716019809246063,-0.0968316718935966,-0.543925106525421 ,-0.442455142736435,-0.713006973266602,-0.56893402338028,-0.144464939832687,-0.809594929218292,0.505280077457428 ,-0.213028207421303,-0.836248159408569,0.751028060913086,-0.474978506565094,-0.458641737699509,-0.56893402338028 ,-0.144464939832687,-0.809594929218292,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.828753769397736 ,-0.00401695584878325,0.559599041938782,-0.650360941886902,-0.2744460105896,0.708314895629883,0.293806612491608 ,-0.416160941123962,0.860515952110291,0.681288719177246,-0.155398637056351,0.715329945087433,-0.587613880634308 ,-0.804071664810181,0.0904360190033913,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.801601529121399 ,-0.550374329090118,-0.233501866459847,0.364783316850662,-0.883516609668732,0.293822199106216,-0.583520650863647 ,-0.523498177528381,0.620848834514618,-0.812033832073212,-0.319456815719604,0.488414168357849,0.560331284999847 ,-0.197167843580246,0.804458677768707,0.546681344509125,-0.221680983901024,0.807463347911835,0.0923520997166634 ,-0.948987245559692,0.301486879587173,-0.201129660010338,-0.411518931388855,0.888931393623352,-0.928708910942078 ,-0.245197176933289,0.278169125318527,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.650360941886902 ,-0.2744460105896,0.708314895629883,-0.587613880634308,-0.804071664810181,0.0904360190033913,0.364783316850662 ,-0.883516609668732,0.293822199106216,0.293806612491608,-0.416160941123962,0.860515952110291,0.563132643699646 ,0.445763438940048,0.695827960968018,0.717245042324066,0.0185855161398649,0.696573138237,0.961548805236816,-0.0192979723215103 ,0.273955345153809,0.709949553012848,0.601409435272217,0.366440117359161,-0.937970280647278,0.291287869215012 ,-0.188050955533981,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.713874757289886,0.186937421560287 ,-0.674860894680023,0.568327903747559,-0.132913276553154,0.811995983123779,-0.0958455428481102,-0.0575050786137581 ,0.993733763694763,-0.136431202292442,-0.35848480463028,0.923512399196625,0.161164596676826,-0.331503033638,0.929586827754974 ,0.714491784572601,0.142257153987885,0.685028791427612,0.890334188938141,-0.2436583340168,-0.384624063968658 ,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.953069984912872,0.0484385639429092,0.298849850893021 ,-0.697896897792816,0.111968666315079,0.707391619682312,-0.903742134571075,0.0408328101038933,0.426125347614288 ,-0.939527928829193,0.186541080474854,0.287210255861282,-0.877985596656799,0.347244709730148,0.329488188028336 ,0.320462375879288,0.819697320461273,0.474763184785843,0.272088974714279,0.83392196893692,0.480147629976273,0.432919770479202 ,0.554768323898315,0.710501611232758,0.543301939964294,0.448152214288712,0.709917306900024,0.406093060970306 ,0.667463958263397,0.624163687229156,0.807208120822906,-0.16038890182972,0.568058490753174,0.568327903747559 ,-0.132913276553154,0.811995983123779,0.714491784572601,0.142257153987885,0.685028791427612,0.871833384037018 ,0.0184005852788687,0.489456832408905,-0.939527928829193,0.186541080474854,0.287210255861282,-0.990444839000702 ,0.137596040964127,-0.00929243210703135,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.543925106525421 ,-0.442455142736435,-0.713006973266602,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.892664194107056 ,0.187903389334679,-0.409686326980591,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.543925106525421 ,-0.442455142736435,-0.713006973266602,-0.892664194107056,0.187903389334679,-0.409686326980591,0.991721928119659 ,-0.0987398326396942,0.0820856466889381,0.681288719177246,-0.155398637056351,0.715329945087433,0.801601529121399 ,-0.550374329090118,-0.233501866459847,0.890334188938141,-0.2436583340168,-0.384624063968658,0.991721928119659 ,-0.0987398326396942,0.0820856466889381,0.801601529121399,-0.550374329090118,-0.233501866459847,0.890334188938141 ,-0.2436583340168,-0.384624063968658,0.801601529121399,-0.550374329090118,-0.233501866459847,-0.653040766716003 ,-0.484619319438934,-0.581963837146759,-0.47929310798645,-0.284916669130325,-0.830120861530304,0.928275108337402 ,-0.108704164624214,0.355652451515198,0.949140191078186,-0.201623901724815,0.241827890276909,0.76161140203476 ,-0.261901050806046,0.592752873897552,0.807208120822906,-0.16038890182972,0.568058490753174,0.406093060970306 ,0.667463958263397,0.624163687229156,0.563132643699646,0.445763438940048,0.695827960968018,0.709949553012848 ,0.601409435272217,0.366440117359161,0.380683273077011,0.860944807529449,0.337422966957092,0.320462375879288 ,0.819697320461273,0.474763184785843,0.543301939964294,0.448152214288712,0.709917306900024,0.717245042324066 ,0.0185855161398649,0.696573138237,0.563132643699646,0.445763438940048,0.695827960968018,0.406093060970306,0.667463958263397 ,0.624163687229156,0.543301939964294,0.448152214288712,0.709917306900024,0.432919770479202,0.554768323898315 ,0.710501611232758,0.538123428821564,-0.0776133164763451,0.839285016059875,0.717245042324066,0.0185855161398649 ,0.696573138237,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.141525283455849,-0.0639705210924149 ,0.987865567207336,0.538123428821564,-0.0776133164763451,0.839285016059875,0.432919770479202,0.554768323898315 ,0.710501611232758,-0.402506142854691,0.589897632598877,0.70000684261322,-0.652125775814056,-0.00108898046892136 ,0.758109986782074,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.0218884665518999,0.60806405544281 ,0.793586194515228,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.402506142854691,0.589897632598877 ,0.70000684261322,-0.551313877105713,0.631630659103394,0.545064926147461,-0.850299119949341,0.0502048023045063 ,0.523899674415588,-0.683505356311798,0.663009881973267,0.305349379777908,-0.551313877105713,0.631630659103394 ,0.545064926147461,-0.147527620196342,0.908096194267273,0.391914486885071,-0.258647561073303,0.909015476703644 ,0.326790869235992,-0.331648796796799,0.794523477554321,-0.508666396141052,0.0982041954994202,0.744845330715179 ,-0.659970700740814,0.00497482251375914,0.164960786700249,-0.986287593841553,-0.522813379764557,0.17926724255085 ,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.886800348758698,0.175986841320992 ,-0.427333265542984,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.331648796796799,0.794523477554321 ,-0.508666396141052,-0.505583822727203,0.0150259397923946,-0.862646639347076,-5.02178700116929e-005,0.0272602327167988 ,-0.999628365039825,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.459000378847122,0.0631367489695549 ,-0.886189818382263,0.34263151884079,0.695380985736847,-0.631703197956085,0.632241547107697,0.646320283412933 ,-0.427247822284698,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.341541588306427,0.10033044219017 ,-0.934496164321899,0.71175479888916,-0.136520832777023,-0.689033508300781,0.433557748794556,-0.0273693483322859 ,-0.900710046291351,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.70794689655304,-0.166302517056465 ,-0.686407029628754,-0.459000378847122,0.0631367489695549,-0.886189818382263,-0.805570960044861,0.0887086465954781 ,-0.585820972919464,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.505583822727203,0.0150259397923946 ,-0.862646639347076,0.938030481338501,-0.164544522762299,-0.304998099803925,0.820765018463135,-0.278661012649536 ,-0.4986911714077,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.459000378847122,0.0631367489695549 ,-0.886189818382263,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.0723040401935577,-0.562818825244904 ,-0.823411822319031,-0.379301369190216,-0.56307464838028,-0.734218895435333,0.433557748794556,-0.0273693483322859 ,-0.900710046291351,0.71175479888916,-0.136520832777023,-0.689033508300781,0.471586465835571,-0.672621011734009 ,-0.570251822471619,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.379301369190216,-0.56307464838028 ,-0.734218895435333,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.805570960044861,0.0887086465954781 ,-0.585820972919464,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.820765018463135,-0.278661012649536 ,-0.4986911714077,0.938030481338501,-0.164544522762299,-0.304998099803925,0.0390605479478836,-0.798295617103577 ,-0.600997805595398,0.433943748474121,-0.801411271095276,-0.411622196435928,0.985846102237701,-0.106943093240261 ,0.129114612936974,0.97103625535965,0.0917741134762764,-0.2206040173769,0.850343227386475,-0.422914385795593 ,-0.313145011663437,0.846594989299774,-0.529064953327179,0.0580276139080524,0.0982041954994202,0.744845330715179 ,-0.659970700740814,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.0896633565425873,0.986825108528137 ,-0.134672433137894,0.149676010012627,0.966882228851318,-0.20672644674778,0.380683273077011,0.860944807529449 ,0.337422966957092,0.709949553012848,0.601409435272217,0.366440117359161,0.785880386829376,0.614527404308319 ,-0.0689060613512993,0.462400853633881,0.884378015995026,0.0637255683541298,0.404174894094467,0.903538584709167 ,-0.142339900135994,0.632241547107697,0.646320283412933,-0.427247822284698,0.34263151884079,0.695380985736847 ,-0.631703197956085,0.26786082983017,0.938322722911835,-0.218634366989136,-0.652326703071594,-0.073212519288063 ,-0.754393696784973,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.458068251609802,-0.324115723371506 ,-0.827721238136292,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506 ,-0.827721238136292,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.0723040401935577,-0.562818825244904 ,-0.823411822319031,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.282903432846069,-0.614905893802643 ,-0.736109018325806,0.471586465835571,-0.672621011734009,-0.570251822471619,0.642500996589661,-0.273710608482361 ,-0.715733826160431,0.383173555135727,-0.262150347232819,-0.885694801807404,0.433943748474121,-0.801411271095276 ,-0.411622196435928,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.846594989299774,-0.529064953327179 ,0.0580276139080524,0.850343227386475,-0.422914385795593,-0.313145011663437,-0.798132300376892,-0.595748007297516 ,0.0898284390568733,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.620602905750275,-0.69584184885025 ,-0.361463844776154,-0.348949372768402,-0.852245092391968,0.389759749174118,0.645033359527588,-0.763978242874146 ,0.0164063423871994,0.085636705160141,-0.288859754800797,0.95353364944458,-0.826135456562042,-0.335000514984131 ,0.453072637319565,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.306766450405121,-0.118458941578865 ,0.944384336471558,0.441097766160965,0.233705207705498,0.866495609283447,0.390775859355927,0.856176912784576 ,0.338016718626022,-0.15803237259388,0.792331874370575,0.589267313480377,-0.395615994930267,-0.602470278739929 ,-0.693193674087524,0.709003627300262,-0.541708946228027,-0.451514393091202,0.415498226881027,-0.625033438205719 ,0.660828590393066,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.712907791137695,0.682124972343445 ,-0.162689983844757,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.863033890724182,-0.335786253213882 ,-0.377385854721069,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.282899647951126,-0.764817118644714 ,-0.578811287879944,0.557026505470276,-0.731577336788177,-0.393085300922394,0.466174304485321,-0.668626964092255 ,0.579326808452606,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.733190715312958,0.653582453727722 ,-0.187780037522316,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.68010026216507,-0.471441000699997 ,-0.561433076858521,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.717040240764618,0.690781652927399 ,-0.0931341797113419,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.94776064157486,-0.269029259681702 ,-0.171385675668716,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829 ,-0.240730464458466,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.94776064157486,-0.269029259681702 ,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.445575803518295,0.0603601969778538 ,-0.89320707321167,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.647231996059418,0.709673702716827 ,-0.278305560350418,-0.305622786283493,0.734605431556702,-0.605763673782349,0.462542772293091,0.739023745059967 ,-0.489793956279755,0.671855986118317,0.740681707859039,-0.000314049131702632,0.999210178852081,0.0289647411555052 ,-0.0272047873586416,0.627128839492798,0.0574354380369186,-0.776795089244843,0.596383929252625,0.731881856918335 ,0.329659104347229,0.615696132183075,0.768994271755219,0.171947747468948,0.9074946641922,-0.352809637784958,-0.227988600730896 ,0.918069958686829,-0.187106743454933,0.3494833111763,0.638639688491821,0.766668796539307,0.0660171657800674 ,0.900666058063507,-0.271470785140991,0.339270144701004,0.9074946641922,-0.352809637784958,-0.227988600730896 ,0.615696132183075,0.768994271755219,0.171947747468948,0.390775859355927,0.856176912784576,0.338016718626022 ,0.441097766160965,0.233705207705498,0.866495609283447,0.812849104404449,-0.351107835769653,0.464757591485977 ,0.748181462287903,0.587628960609436,0.308085650205612,0.916947364807129,0.362371891736984,0.167015478014946 ,0.847357213497162,0.513431668281555,0.135549768805504,0.882211685180664,0.466362744569778,0.0648712962865829 ,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829 ,0.847357213497162,0.513431668281555,0.135549768805504,0.729536890983582,0.676141858100891,0.102995507419109 ,0.755123436450958,0.652067601680756,0.0677972882986069,0.719103455543518,0.620088696479797,0.313656240701675 ,0.416522979736328,0.747589826583862,0.517318189144135,0.382025003433228,0.832321524620056,0.401618927717209 ,0.661795139312744,0.713703632354736,0.229465380311012,0.732339978218079,0.57999724149704,0.356765180826187,0.404268801212311 ,0.753554701805115,0.518384099006653,0.416522979736328,0.747589826583862,0.517318189144135,0.719103455543518 ,0.620088696479797,0.313656240701675,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.66072803735733 ,0.731441617012024,-0.168616935610771,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.709426164627075 ,0.694045186042786,-0.1225391253829,-0.471274226903915,0.860716223716736,0.192531064152718,-0.508786559104919 ,0.827320158481598,0.238070502877235,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.602886259555817 ,0.797378957271576,-0.026737067848444,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633 ,0.720325946807861,-0.15107399225235,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.632999122142792 ,0.753636598587036,-0.177042424678802,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.644031703472137 ,0.764946818351746,0.00891846232116222,-0.508786559104919,0.827320158481598,0.238070502877235,-0.52653956413269 ,0.801656424999237,0.283024877309799,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.774571657180786 ,0.617025077342987,-0.138992056250572,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.727224290370941 ,0.663318395614624,-0.176503553986549,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.752022266387939 ,0.649503409862518,-0.112284816801548,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.719631135463715 ,0.672992944717407,-0.170913591980934,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.972268521785736 ,0.233539238572121,0.0123817138373852,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.774571657180786 ,0.617025077342987,-0.138992056250572,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.749007999897003 ,0.651602983474731,-0.120002493262291,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.774571657180786 ,0.617025077342987,-0.138992056250572,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.678524672985077 ,0.663206458091736,-0.315850287675858,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.789477050304413 ,0.597959935665131,-0.138455465435982,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.721381545066834 ,0.602611720561981,-0.341273695230484,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.789477050304413 ,0.597959935665131,-0.138455465435982,-0.320632964372635,0.735152721405029,-0.597281336784363,-0.704592347145081 ,0.645622909069061,-0.294483691453934,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.350197345018387 ,0.671358823776245,-0.653176188468933,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.678524672985077 ,0.663206458091736,-0.315850287675858,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.320632964372635 ,0.735152721405029,-0.597281336784363,0.177267909049988,0.365930050611496,-0.91360342502594,0.546093285083771 ,0.623855233192444,-0.559094548225403,0.500399529933929,0.708592414855957,-0.497490793466568,0.139554411172867 ,0.707306206226349,-0.692995309829712,0.139554411172867,0.707306206226349,-0.692995309829712,0.500399529933929 ,0.708592414855957,-0.497490793466568,0.483161181211472,0.7082759141922,-0.514684855937958,0.143811240792274 ,0.67733633518219,-0.721480309963226,0.627380788326263,0.542527794837952,-0.558620572090149,0.926415085792542 ,0.366669327020645,-0.085490919649601,0.968909800052643,-0.119059138000011,-0.21688424050808,0.674115300178528 ,-0.0423769503831863,-0.737409472465515,0.500399529933929,0.708592414855957,-0.497490793466568,0.74566113948822 ,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.483161181211472 ,0.7082759141922,-0.514684855937958,0.947628259658813,0.256551682949066,0.190215542912483,0.970879018306732,0.17382837831974 ,0.164856374263763,0.975513935089111,-0.202585577964783,0.0856255367398262,0.981737434864044,-0.183587238192558 ,0.0498724691569805,0.713916897773743,0.653736352920532,0.250901371240616,0.793782532215118,0.557114601135254 ,0.24399308860302,0.855198323726654,0.434896290302277,0.281959295272827,0.72310745716095,0.620889782905579,0.302673995494843 ,0.996930718421936,0.0329510122537613,0.0710170343518257,0.991389572620392,-0.125116944313049,0.0386327914893627 ,0.655400395393372,-0.538768291473389,0.52931934595108,0.814328134059906,-0.0162655059248209,0.580176770687103 ,0.738506376743317,0.594660043716431,0.317785710096359,0.878546118736267,0.378491014242172,0.291378289461136 ,0.896252334117889,0.421274542808533,0.138778761029243,0.767313122749329,0.622622787952423,0.153530031442642 ,0.896252334117889,0.421274542808533,0.138778761029243,0.882211685180664,0.466362744569778,0.0648712962865829 ,0.755123436450958,0.652067601680756,0.0677972882986069,0.767313122749329,0.622622787952423,0.153530031442642 ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.52653956413269,0.801656424999237,0.283024877309799 ,-0.508786559104919,0.827320158481598,0.238070502877235,-0.128903239965439,0.870382308959961,0.475203812122345 ,-0.13026924431324,0.905642747879028,0.403535783290863,-0.128903239965439,0.870382308959961,0.475203812122345 ,-0.508786559104919,0.827320158481598,0.238070502877235,-0.471274226903915,0.860716223716736,0.192531064152718 ,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.667403042316437,0.744478642940521,-0.0180177688598633 ,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.891578018665314,0.451290994882584,-0.0377500951290131 ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.576912403106689,0.718079209327698,0.389274090528488 ,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.911553025245667,0.36151385307312,0.195905029773712 ,-0.909857094287872,0.391187280416489,0.138320609927177,-0.816486001014709,0.512708961963654,0.265480846166611 ,-0.660224080085754,0.688790798187256,0.299451798200607,-0.752071261405945,0.531812846660614,0.389312088489532 ,-0.752071261405945,0.531812846660614,0.389312088489532,-0.660224080085754,0.688790798187256,0.299451798200607 ,-0.563141465187073,0.729207098484039,0.388752728700638,-0.646896600723267,0.568207919597626,0.508590757846832 ,0.320559591054916,0.729658484458923,0.6040198802948,0.311181455850601,0.925608515739441,0.215441450476646,-0.0790780931711197 ,0.992485880851746,0.0933722108602524,-0.202111601829529,0.805501878261566,0.557061612606049,0.614538609981537 ,0.667141020298004,0.421028733253479,0.320559591054916,0.729658484458923,0.6040198802948,0.367227405309677,0.346865594387054 ,0.86303436756134,0.764663100242615,0.188213542103767,0.616332709789276,0.520070433616638,0.75630134344101,0.396906822919846 ,0.522960782051086,0.842813670635223,-0.127189323306084,0.764615535736084,0.640312492847443,0.0732326954603195 ,0.941741049289703,0.116148002445698,0.315647602081299,0.413430035114288,0.428488910198212,0.803413271903992 ,0.941741049289703,0.116148002445698,0.315647602081299,0.996930718421936,0.0329510122537613,0.0710170343518257 ,0.910823285579681,0.270006626844406,0.312245815992355,0.602918326854706,0.515652477741241,0.608762681484222 ,0.229550704360008,0.575565576553345,0.784876227378845,0.413430035114288,0.428488910198212,0.803413271903992 ,0.910823285579681,0.270006626844406,0.312245815992355,0.152829229831696,-0.222570449113846,0.962863266468048 ,0.0511878095567226,-0.230872601270676,0.971636593341827,0.187374159693718,0.57430511713028,0.796909391880035 ,0.602918326854706,0.515652477741241,0.608762681484222,0.602918326854706,0.515652477741241,0.608762681484222 ,0.187374159693718,0.57430511713028,0.796909391880035,0.00418568449094892,0.628182590007782,0.778054714202881 ,0.229550704360008,0.575565576553345,0.784876227378845,-0.407288640737534,0.570921063423157,0.712857007980347 ,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.389561533927917,-0.191748484969139,0.900818705558777 ,-0.407288640737534,0.570921063423157,0.712857007980347,-0.659538865089417,0.541105389595032,0.521740794181824 ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.402498841285706,0.624280869960785,0.669528245925903 ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.659538865089417,0.541105389595032,0.521740794181824 ,-0.861413061618805,0.450139373540878,0.235249027609825,-0.752071261405945,0.531812846660614,0.389312088489532 ,0.522960782051086,0.842813670635223,-0.127189323306084,0.261382073163986,0.943598508834839,-0.203227162361145 ,0.505573332309723,0.856702566146851,0.102256514132023,0.764615535736084,0.640312492847443,0.0732326954603195 ,-0.33124178647995,0.767114698886871,0.549375951290131,-0.402498841285706,0.624280869960785,0.669528245925903 ,-0.646896600723267,0.568207919597626,0.508590757846832,-0.563141465187073,0.729207098484039,0.388752728700638 ,-0.699552893638611,0.686573624610901,0.19809702038765,-0.633913338184357,0.759061396121979,-0.148255288600922 ,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.923372864723206,0.289372861385345,-0.252281367778778 ,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.244611799716949,0.194430083036423,-0.949927389621735 ,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.802868485450745,0.579959869384766,0.138017445802689 ,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.244611799716949,0.194430083036423,-0.949927389621735 ,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292 ,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.397901207208633,0.642866194248199,-0.654520928859711 ,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.244611799716949,0.194430083036423,-0.949927389621735 ,-0.421845138072968,0.35173299908638,-0.835661768913269,0.383173555135727,-0.262150347232819,-0.885694801807404 ,0.642500996589661,-0.273710608482361,-0.715733826160431,0.633863806724548,0.397778630256653,-0.663316547870636 ,0.398143172264099,0.565787017345428,-0.722057580947876,0.390601873397827,0.504608035087585,-0.769935667514801 ,0.432219922542572,0.089619405567646,-0.897303879261017,0.62652999162674,-0.0954440459609032,-0.773531258106232 ,0.605724632740021,0.555329561233521,-0.569830477237701,0.62652999162674,-0.0954440459609032,-0.773531258106232 ,0.886820495128632,-0.356388479471207,-0.294171094894409,0.859436631202698,0.509184420108795,0.0458242334425449 ,0.605724632740021,0.555329561233521,-0.569830477237701,0.642500996589661,-0.273710608482361,-0.715733826160431 ,0.850343227386475,-0.422914385795593,-0.313145011663437,0.97103625535965,0.0917741134762764,-0.2206040173769 ,0.633863806724548,0.397778630256653,-0.663316547870636,0.654246509075165,0.624168276786804,0.427054405212402 ,0.599660396575928,0.629723131656647,0.493817895650864,0.970879018306732,0.17382837831974,0.164856374263763,0.933142781257629 ,0.297380536794662,0.202013194561005,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.800276517868042 ,0.427208811044693,-0.420773267745972,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.305637359619141 ,0.797389090061188,-0.520342588424683,0.525696158409119,0.742150247097015,-0.41576024889946,0.723603904247284 ,0.683222591876984,0.0980009809136391,0.906324923038483,0.41602036356926,-0.0741765573620796,0.627528429031372 ,0.574077785015106,-0.525968432426453,0.367227405309677,0.346865594387054,0.86303436756134,0.320559591054916 ,0.729658484458923,0.6040198802948,-0.202111601829529,0.805501878261566,0.557061612606049,-0.27060467004776,0.441340714693069 ,0.855565011501312,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888 ,-0.771057546138763,0.193036586046219,0.594731748104095,-0.780404388904572,-0.393562406301498,0.580699265003204 ,-0.71266895532608,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.909857094287872,0.391187280416489 ,0.138320609927177,-0.752071261405945,0.531812846660614,0.389312088489532,-0.861413061618805,0.450139373540878 ,0.235249027609825,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66440737247467,0.746931433677673 ,0.0256171077489853,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66072803735733,0.731441617012024 ,-0.168616935610771,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.905105233192444,0.409709483385086 ,-0.113677680492401,-0.911553025245667,0.36151385307312,0.195905029773712,-0.664968252182007,0.74531364440918 ,0.0482159554958344,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.392663925886154,0.918741226196289 ,-0.0415882430970669,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.686884999275208,0.723168194293976 ,-0.0722270086407661,0.311181455850601,0.925608515739441,0.215441450476646,0.227211803197861,0.921236932277679 ,0.315748870372772,-0.127702474594116,0.976085126399994,0.175925895571709,-0.0790780931711197,0.992485880851746 ,0.0933722108602524,0.597852408885956,0.634572505950928,0.489785879850388,0.780855357646942,0.547496914863586 ,0.30085226893425,0.505573332309723,0.856702566146851,0.102256514132023,0.227211803197861,0.921236932277679,0.315748870372772 ,0.826885938644409,0.48306405544281,0.287938833236694,0.732339978218079,0.57999724149704,0.356765180826187,0.719103455543518 ,0.620088696479797,0.313656240701675,0.796578645706177,0.576386570930481,0.182321041822433,0.796578645706177 ,0.576386570930481,0.182321041822433,0.719103455543518,0.620088696479797,0.313656240701675,0.661795139312744 ,0.713703632354736,0.229465380311012,0.703840851783752,0.696332156658173,0.140461936593056,0.819103598594666 ,0.554179012775421,0.148171901702881,0.748181462287903,0.587628960609436,0.308085650205612,0.665187358856201 ,-0.279087334871292,0.692557573318481,0.939882814884186,-0.341329634189606,0.010694270953536,-0.384443581104279 ,-0.766654908657074,-0.514240622520447,0.685397624969482,-0.694671988487244,-0.218313813209534,0.317059487104416 ,-0.547120809555054,0.774681925773621,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.602886259555817 ,0.797378957271576,-0.026737067848444,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66072803735733 ,0.731441617012024,-0.168616935610771,-0.640394568443298,0.754049122333527,-0.145961567759514,0.118139639496803 ,-0.728867173194885,0.67438542842865,0.910823285579681,0.270006626844406,0.312245815992355,0.807652294635773 ,0.443565875291824,0.388519138097763,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.807652294635773 ,0.443565875291824,0.388519138097763,0.762879073619843,0.502556324005127,0.406758666038513,0.914847433567047 ,-0.40378075838089,0.00391693273559213,0.993199586868286,-5.2900577429682e-006,0.1164241284132,-0.305622786283493 ,0.734605431556702,-0.605763673782349,0.121350355446339,0.714234948158264,-0.68930584192276,0.198126867413521 ,0.0765141919255257,-0.977185368537903,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.906213700771332 ,0.328242093324661,-0.266521811485291,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.909857094287872 ,0.391187280416489,0.138320609927177,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.842867016792297 ,-0.00614785309880972,-0.538086771965027,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.923372864723206 ,0.289372861385345,-0.252281367778778,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.426684230566025 ,0.00725271692499518,-0.904371619224548,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.828169226646423 ,0.35357066988945,-0.434883296489716,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419 ,0.499041646718979,-0.751902282238007,0.239434629678726,0.547067284584045,-0.802115023136139,0.324593335390091 ,0.033190730959177,-0.945271134376526,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.896252334117889 ,0.421274542808533,0.138778761029243,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977 ,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.797426402568817 ,0.177674129605293,0.57666540145874,0.891313195228577,0.424902439117432,0.158173009753227,0.896252334117889,0.421274542808533 ,0.138778761029243,0.878546118736267,0.378491014242172,0.291378289461136,0.870848119258881,0.464649528264999 ,0.160388246178627,0.908547043800354,0.339474141597748,0.243515089154243,0.855198323726654,0.434896290302277 ,0.281959295272827,0.793782532215118,0.557114601135254,0.24399308860302,0.546093285083771,0.623855233192444,-0.559094548225403 ,0.809562027454376,0.57842743396759,-0.100154921412468,0.74566113948822,0.665992856025696,-0.021046232432127 ,0.500399529933929,0.708592414855957,-0.497490793466568,-0.647231996059418,0.709673702716827,-0.278305560350418 ,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.749007999897003,0.651602983474731,-0.120002493262291 ,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.734271168708801,0.669210433959961,-0.114031746983528 ,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.702043056488037,0.707515060901642,-0.0809816271066666 ,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.727224290370941,0.663318395614624,-0.176503553986549 ,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.717040240764618,0.690781652927399,-0.0931341797113419 ,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.709426164627075,0.694045186042786,-0.1225391253829 ,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.650463998317719,0.74002069234848,-0.171072840690613 ,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.640394568443298,0.754049122333527,-0.145961567759514 ,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.752064287662506,0.658552467823029,-0.0266082808375359 ,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.602886259555817,0.797378957271576,-0.026737067848444 ,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.599858164787292,0.75833535194397,0.255142569541931 ,-0.471274226903915,0.860716223716736,0.192531064152718,-0.471274226903915,0.860716223716736,0.192531064152718 ,-0.599858164787292,0.75833535194397,0.255142569541931,-0.15803237259388,0.792331874370575,0.589267313480377 ,-0.13026924431324,0.905642747879028,0.403535783290863,0.661795139312744,0.713703632354736,0.229465380311012 ,0.382025003433228,0.832321524620056,0.401618927717209,0.390775859355927,0.856176912784576,0.338016718626022 ,0.748181462287903,0.587628960609436,0.308085650205612,0.703840851783752,0.696332156658173,0.140461936593056 ,0.661795139312744,0.713703632354736,0.229465380311012,0.748181462287903,0.587628960609436,0.308085650205612 ,0.819103598594666,0.554179012775421,0.148171901702881,0.755123436450958,0.652067601680756,0.0677972882986069 ,0.729536890983582,0.676141858100891,0.102995507419109,0.658155202865601,0.750174701213837,0.0637934505939484 ,0.638639688491821,0.766668796539307,0.0660171657800674,0.755123436450958,0.652067601680756,0.0677972882986069 ,0.638639688491821,0.766668796539307,0.0660171657800674,0.615696132183075,0.768994271755219,0.171947747468948 ,0.767313122749329,0.622622787952423,0.153530031442642,0.738506376743317,0.594660043716431,0.317785710096359 ,0.767313122749329,0.622622787952423,0.153530031442642,0.615696132183075,0.768994271755219,0.171947747468948 ,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589 ,0.632348001003265,0.720907807350159,0.283598184585571,0.713916897773743,0.653736352920532,0.250901371240616 ,0.72310745716095,0.620889782905579,0.302673995494843,0.483161181211472,0.7082759141922,-0.514684855937958,0.711231529712677 ,0.702188611030579,-0.0328761637210846,0.671855986118317,0.740681707859039,-0.000314049131702632,0.462542772293091 ,0.739023745059967,-0.489793956279755,0.143811240792274,0.67733633518219,-0.721480309963226,0.483161181211472 ,0.7082759141922,-0.514684855937958,0.462542772293091,0.739023745059967,-0.489793956279755,0.121350355446339 ,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.647231996059418 ,0.709673702716827,-0.278305560350418,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.300025343894959 ,0.704358756542206,-0.643322288990021,0.732339978218079,0.57999724149704,0.356765180826187,0.826885938644409 ,0.48306405544281,0.287938833236694,0.854411005973816,0.0699176639318466,0.514872193336487,0.764663100242615 ,0.188213542103767,0.616332709789276,0.404268801212311,0.753554701805115,0.518384099006653,0.732339978218079 ,0.57999724149704,0.356765180826187,0.764663100242615,0.188213542103767,0.616332709789276,0.367227405309677,0.346865594387054 ,0.86303436756134,-0.144893556833267,0.857636988162994,0.493421375751495,0.404268801212311,0.753554701805115 ,0.518384099006653,0.367227405309677,0.346865594387054,0.86303436756134,-0.27060467004776,0.441340714693069,0.855565011501312 ,-0.52653956413269,0.801656424999237,0.283024877309799,-0.713882029056549,0.360403180122375,0.60040158033371 ,-0.911553025245667,0.36151385307312,0.195905029773712,-0.66440737247467,0.746931433677673,0.0256171077489853 ,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.911553025245667,0.36151385307312,0.195905029773712 ,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.632999122142792,0.753636598587036,-0.177042424678802 ,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.99501496553421,0.0992259010672569,-0.00997005868703127 ,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.752022266387939,0.649503409862518,-0.112284816801548 ,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.972268521785736,0.233539238572121,0.0123817138373852 ,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.842867016792297,-0.00614785309880972,-0.538086771965027 ,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.721381545066834,0.602611720561981,-0.341273695230484 ,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.426684230566025,0.00725271692499518,-0.904371619224548 ,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.324593335390091,0.033190730959177,-0.945271134376526 ,0.177267909049988,0.365930050611496,-0.91360342502594,-0.350197345018387,0.671358823776245,-0.653176188468933 ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.968909800052643,-0.119059138000011,-0.21688424050808 ,0.809562027454376,0.57842743396759,-0.100154921412468,0.546093285083771,0.623855233192444,-0.559094548225403 ,0.870848119258881,0.464649528264999,0.160388246178627,0.981737434864044,-0.183587238192558,0.0498724691569805 ,0.975513935089111,-0.202585577964783,0.0856255367398262,0.908547043800354,0.339474141597748,0.243515089154243 ,0.797426402568817,0.177674129605293,0.57666540145874,0.592115879058838,-0.487801223993301,0.641442716121674 ,0.991389572620392,-0.125116944313049,0.0386327914893627,0.891313195228577,0.424902439117432,0.158173009753227 ,0.893702685832977,0.422671288251877,0.150480911135674,0.891313195228577,0.424902439117432,0.158173009753227 ,0.991389572620392,-0.125116944313049,0.0386327914893627,0.941741049289703,0.116148002445698,0.315647602081299 ,0.413176476955414,-0.602903485298157,0.682489991188049,-0.695957362651825,-0.547607123851776,0.464510262012482 ,-0.430106282234192,-0.644480228424072,-0.632181823253632,0.712531208992004,-0.546411454677582,-0.440152049064636 ,-0.360958158969879,-0.844728171825409,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456 ,0.450368106365204,-0.655529201030731,0.606176614761353,-0.668817758560181,-0.562513589859009,0.486067175865173 ,-0.350197345018387,0.671358823776245,-0.653176188468933,0.177267909049988,0.365930050611496,-0.91360342502594 ,0.139554411172867,0.707306206226349,-0.692995309829712,-0.320632964372635,0.735152721405029,-0.597281336784363 ,-0.320632964372635,0.735152721405029,-0.597281336784363,0.139554411172867,0.707306206226349,-0.692995309829712 ,0.143811240792274,0.67733633518219,-0.721480309963226,-0.300025343894959,0.704358756542206,-0.643322288990021 ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.128903239965439,0.870382308959961,0.475203812122345 ,0.416522979736328,0.747589826583862,0.517318189144135,0.404268801212311,0.753554701805115,0.518384099006653 ,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863 ,0.382025003433228,0.832321524620056,0.401618927717209,0.416522979736328,0.747589826583862,0.517318189144135 ,-0.576912403106689,0.718079209327698,0.389274090528488,-0.202111601829529,0.805501878261566,0.557061612606049 ,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.392663925886154,0.918741226196289,-0.0415882430970669 ,0.187374159693718,0.57430511713028,0.796909391880035,-0.407288640737534,0.570921063423157,0.712857007980347 ,-0.402498841285706,0.624280869960785,0.669528245925903,0.00418568449094892,0.628182590007782,0.778054714202881 ,-0.33124178647995,0.767114698886871,0.549375951290131,0.0206130910664797,0.755090355873108,0.655296623706818 ,0.00418568449094892,0.628182590007782,0.778054714202881,-0.402498841285706,0.624280869960785,0.669528245925903 ,-0.272203058004379,0.658502340316772,-0.701626777648926,0.12256808578968,0.664539575576782,-0.737132430076599 ,0.180026173591614,0.22968553006649,-0.956470131874084,-0.421845138072968,0.35173299908638,-0.835661768913269 ,-0.421845138072968,0.35173299908638,-0.835661768913269,0.180026173591614,0.22968553006649,-0.956470131874084 ,0.154303297400475,0.424244195222855,-0.892304539680481,-0.397901207208633,0.642866194248199,-0.654520928859711 ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.27060467004776,0.441340714693069,0.855565011501312 ,-0.202111601829529,0.805501878261566,0.557061612606049,-0.576912403106689,0.718079209327698,0.389274090528488 ,0.128622680902481,0.604616940021515,-0.786062717437744,0.178336277604103,0.738516449928284,-0.650222778320313 ,0.525696158409119,0.742150247097015,-0.41576024889946,0.627528429031372,0.574077785015106,-0.525968432426453 ,-0.127702474594116,0.976085126399994,0.175925895571709,-0.410511583089828,0.907221853733063,0.0918080508708954 ,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.0790780931711197,0.992485880851746,0.0933722108602524 ,0.330185920000076,-0.571054816246033,0.751580774784088,-0.705251336097717,-0.583878993988037,0.402126729488373 ,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786 ,0.0794514417648315,0.574801087379456,-0.814426898956299,0.627380788326263,0.542527794837952,-0.558620572090149 ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.0525061227381229,0.0318809561431408,-0.998111546039581 ,-0.15803237259388,0.792331874370575,0.589267313480377,0.390775859355927,0.856176912784576,0.338016718626022 ,0.382025003433228,0.832321524620056,0.401618927717209,-0.13026924431324,0.905642747879028,0.403535783290863 ,-0.300025343894959,0.704358756542206,-0.643322288990021,0.143811240792274,0.67733633518219,-0.721480309963226 ,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349 ,-0.144893556833267,0.857636988162994,0.493421375751495,-0.27060467004776,0.441340714693069,0.855565011501312 ,-0.713882029056549,0.360403180122375,0.60040158033371,-0.52653956413269,0.801656424999237,0.283024877309799 ,0.177267909049988,0.365930050611496,-0.91360342502594,0.0525061227381229,0.0318809561431408,-0.998111546039581 ,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.546093285083771,0.623855233192444,-0.559094548225403 ,0.198126867413521,0.0765141919255257,-0.977185368537903,0.648241341114044,-0.506932139396667,-0.568157494068146 ,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.147367149591446,-0.401798576116562,-0.903792500495911 ,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.312811404466629,-0.918802380561829,-0.240730464458466 ,0.248996675014496,-0.917850255966187,0.309114098548889,-0.32362487912178,-0.91464102268219,0.242278203368187 ,0.671025335788727,-0.589844524860382,-0.449230968952179,0.412575602531433,-0.667341530323029,0.62002956867218 ,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.459699749946594,-0.614600539207459,-0.641047835350037 ,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.195960283279419,-0.584128737449646,-0.787650465965271 ,0.724370837211609,-0.668023765087128,0.170385256409645,-0.180837586522102,-0.611773490905762,0.770085096359253 ,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.349896669387817,-0.784230947494507,-0.512400388717651 ,0.437470436096191,-0.700090229511261,0.564352095127106,-0.581261277198792,-0.682450115680695,0.443167269229889 ,0.326672673225403,-0.732156872749329,0.597688257694244,-0.308205217123032,-0.725507915019989,-0.615343630313873 ,0.147367149591446,-0.401798576116562,-0.903792500495911,0.635097622871399,-0.770463764667511,-0.0551052875816822 ,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.671025335788727,-0.589844524860382,-0.449230968952179 ,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.259815841913223,-0.928046464920044,-0.266881018877029 ,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.459699749946594,-0.614600539207459,-0.641047835350037 ,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.303018301725388,-0.938679337501526,0.164502337574959 ,0.412575602531433,-0.667341530323029,0.62002956867218,0.918069958686829,-0.187106743454933,0.3494833111763,-0.303018301725388 ,-0.938679337501526,0.164502337574959,-0.596454918384552,-0.699760973453522,0.393161654472351,0.918069958686829 ,-0.187106743454933,0.3494833111763,0.412575602531433,-0.667341530323029,0.62002956867218,0.671025335788727,-0.589844524860382 ,-0.449230968952179,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.0517404824495316,-0.448792159557343 ,-0.892137050628662,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.370716333389282,-0.925935029983521 ,-0.0722066015005112,0.0855752229690552,-0.285937607288361,-0.954419493675232,-0.311763912439346,-0.736566066741943 ,0.600228011608124,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.76872593164444,-0.625621676445007 ,-0.132883220911026,-0.414378970861435,-0.48013111948967,0.773152112960815,0.739399373531342,-0.377425998449326 ,0.557528674602509,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.414378970861435,-0.48013111948967 ,0.773152112960815,0.474026173353195,-0.576446056365967,0.665589272975922,0.627128839492798,0.0574354380369186 ,-0.776795089244843,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.887380838394165,-0.451604127883911 ,-0.0927843973040581,0.628591895103455,-0.444956034421921,-0.637876510620117,0.628591895103455,-0.444956034421921 ,-0.637876510620117,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.0855752229690552,-0.285937607288361 ,-0.954419493675232,0.627128839492798,0.0574354380369186,-0.776795089244843,-0.773792386054993,-0.604486167430878 ,-0.189319148659706,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.0959864854812622,-0.913586139678955 ,0.395154267549515,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.518468379974365,-0.848432958126068 ,0.106546200811863,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.180837586522102,-0.611773490905762 ,0.770085096359253,0.724370837211609,-0.668023765087128,0.170385256409645,0.106877602636814,-0.900658130645752 ,-0.421179473400116,0.518468379974365,-0.848432958126068,0.106546200811863,0.724370837211609,-0.668023765087128 ,0.170385256409645,0.195960283279419,-0.584128737449646,-0.787650465965271,-0.542883276939392,-0.826726615428925 ,-0.147651329636574,0.106877602636814,-0.900658130645752,-0.421179473400116,0.195960283279419,-0.584128737449646 ,-0.787650465965271,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.349896669387817,-0.784230947494507 ,-0.512400388717651,0.149650126695633,-0.977229058742523,-0.150426715612412,0.259535193443298,-0.932749152183533 ,0.250240802764893,0.437470436096191,-0.700090229511261,0.564352095127106,-0.72308760881424,-0.507770538330078 ,-0.468309044837952,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.149650126695633,-0.977229058742523 ,-0.150426715612412,0.349896669387817,-0.784230947494507,-0.512400388717651,-0.581261277198792,-0.682450115680695 ,0.443167269229889,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.464242279529572,-0.87283843755722 ,-0.150440096855164,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.437470436096191,-0.700090229511261 ,0.564352095127106,0.259535193443298,-0.932749152183533,0.250240802764893,-0.32362487912178,-0.91464102268219 ,0.242278203368187,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.810118317604065,-0.284595668315887 ,-0.512555956840515,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.63175368309021,-0.695993006229401 ,0.341293066740036,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187 ,0.309114098548889,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.63175368309021,-0.695993006229401 ,0.341293066740036,0.438560783863068,-0.682490229606628,0.584697782993317,0.50744092464447,-0.861680567264557 ,0.00320711638778448,0.248996675014496,-0.917850255966187,0.309114098548889,0.438560783863068,-0.682490229606628 ,0.584697782993317,0.663442254066467,-0.730678737163544,-0.161099433898926,0.0872491523623466,-0.891694486141205 ,-0.444149285554886,0.50744092464447,-0.861680567264557,0.00320711638778448,0.663442254066467,-0.730678737163544 ,-0.161099433898926,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.810118317604065,-0.284595668315887 ,-0.512555956840515,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.165543153882027,-0.540197908878326 ,-0.825094938278198,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.445575803518295,0.0603601969778538 ,-0.89320707321167,0.198126867413521,0.0765141919255257,-0.977185368537903,0.147367149591446,-0.401798576116562 ,-0.903792500495911,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.308205217123032,-0.725507915019989 ,-0.615343630313873,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.885131180286407,0.0417930334806442 ,-0.4634610414505,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.259815841913223,-0.928046464920044 ,-0.266881018877029,-0.311763912439346,-0.736566066741943,0.600228011608124,0.739399373531342,-0.377425998449326 ,0.557528674602509,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.259815841913223,-0.928046464920044 ,-0.266881018877029,0.149650126695633,-0.977229058742523,-0.150426715612412,0.518468379974365,-0.848432958126068 ,0.106546200811863,0.106877602636814,-0.900658130645752,-0.421179473400116,-0.370716333389282,-0.925935029983521 ,-0.0722066015005112,-0.311763912439346,-0.736566066741943,0.600228011608124,0.518468379974365,-0.848432958126068 ,0.106546200811863,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.464242279529572,-0.87283843755722 ,-0.150440096855164,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.0959864854812622,-0.913586139678955 ,0.395154267549515,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.50744092464447,-0.861680567264557 ,0.00320711638778448,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.106877602636814,-0.900658130645752 ,-0.421179473400116,0.262460827827454,-0.84521484375,0.465538591146469,0.663442254066467,-0.730678737163544,-0.161099433898926 ,0.438560783863068,-0.682490229606628,0.584697782993317,-0.63175368309021,-0.695993006229401,0.341293066740036 ,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.326672673225403,-0.732156872749329,0.597688257694244 ,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.648241341114044,-0.506932139396667,-0.568157494068146 ,0.262460827827454,-0.84521484375,0.465538591146469,0.262460827827454,-0.84521484375,0.465538591146469,0.33387279510498 ,-0.734721720218658,0.590519189834595,0.323404222726822,-0.738465547561646,0.591674208641052,0.326672673225403 ,-0.732156872749329,0.597688257694244,0.326672673225403,-0.732156872749329,0.597688257694244,0.323404222726822 ,-0.738465547561646,0.591674208641052,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.308205217123032 ,-0.725507915019989,-0.615343630313873,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.0872491523623466 ,-0.891694486141205,-0.444149285554886,0.33387279510498,-0.734721720218658,0.590519189834595,0.262460827827454 ,-0.84521484375,0.465538591146469,0.106877602636814,-0.900658130645752,-0.421179473400116,0.33387279510498,-0.734721720218658 ,0.590519189834595,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.348949372768402,-0.852245092391968 ,0.389759749174118,0.323404222726822,-0.738465547561646,0.591674208641052,0.33387279510498,-0.734721720218658 ,0.590519189834595,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.810118317604065,-0.284595668315887 ,-0.512555956840515,-0.798132300376892,-0.595748007297516,0.0898284390568733,0.301147431135178,-0.680567443370819 ,0.667935729026794,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.478905022144318,-0.688271999359131 ,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,0.296216726303101,-0.720275163650513 ,0.627263367176056,-0.75092750787735,-0.519762337207794,0.407375782728195,-0.420935481786728,-0.595206379890442 ,-0.684501767158508,0.593356251716614,-0.709651470184326,-0.379898846149445,0.310219675302505,-0.605204224586487 ,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.338333308696747,-0.796955823898315 ,-0.500391840934753,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.207811191678047,-0.962575137615204 ,-0.173964604735374,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.181093856692314,-0.00969438999891281 ,0.983418047428131,0.261419922113419,-0.95404326915741,0.146496027708054,-0.306935518980026,-0.919691741466522 ,0.244862422347069,0.191650301218033,-0.911473155021667,0.363987505435944,0.389462053775787,-0.886311709880829 ,-0.250541061162949,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.40076744556427,-0.847734689712524 ,0.347464174032211,0.118260912597179,-0.832547545433044,0.541182935237885,0.262365132570267,-0.963967680931091 ,-0.0439422130584717,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.362296253442764,-0.902348458766937 ,0.233470991253853,0.230480119585991,-0.946770370006561,0.224732518196106,0.334644615650177,-0.86758428812027 ,-0.367845684289932,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.295633107423782,-0.949930131435394 ,-0.10116221010685,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228 ,0.699605226516724,0.192425221204758,-0.974552154541016,0.114980839192867,-0.395999372005463,-0.883323132991791 ,0.250847965478897,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.314595818519592,-0.93869549036026 ,-0.140997156500816,0.148850917816162,-0.924228250980377,0.351632624864578,-0.112518116831779,-0.874383687973022 ,-0.47200945019722,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.180372029542923,-0.916134834289551 ,0.357998490333557,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.201402932405472,-0.92625367641449 ,-0.318576455116272,-0.362296253442764,-0.902348458766937,0.233470991253853,0.900666058063507,-0.271470785140991 ,0.339270144701004,0.956566870212555,-0.244721978902817,-0.15840108692646,0.191650301218033,-0.911473155021667 ,0.363987505435944,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.211911574006081,-0.951958775520325 ,-0.221061065793037,-0.395999372005463,-0.883323132991791,0.250847965478897,0.389462053775787,-0.886311709880829 ,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.339713484048843,-0.93720954656601 ,0.0789492130279541,0.230480119585991,-0.946770370006561,0.224732518196106,-0.207811191678047,-0.962575137615204 ,-0.173964604735374,-0.40076744556427,-0.847734689712524,0.347464174032211,0.665187358856201,-0.279087334871292 ,0.692557573318481,0.812849104404449,-0.351107835769653,0.464757591485977,-0.295633107423782,-0.949930131435394 ,-0.10116221010685,0.192425221204758,-0.974552154541016,0.114980839192867,-0.339781731367111,-0.868737757205963 ,0.360337555408478,-0.958362400531769,-0.256493717432022,0.125509053468704,0.148850917816162,-0.924228250980377 ,0.351632624864578,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.863033890724182,-0.335786253213882 ,-0.377385854721069,0.180372029542923,-0.916134834289551,0.357998490333557,0.326997041702271,-0.921505868434906 ,-0.209522947669029,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.931363523006439,-0.361005514860153 ,-0.0472965724766254,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.191650301218033,-0.911473155021667 ,0.363987505435944,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.306935518980026,-0.919691741466522 ,0.244862422347069,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.262365132570267,-0.963967680931091 ,-0.0439422130584717,0.192425221204758,-0.974552154541016,0.114980839192867,-0.970349133014679,-0.239411488175392 ,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,0.124663800001144,-0.874086201190948 ,0.469502121210098,0.085636705160141,-0.288859754800797,0.95353364944458,-0.181093856692314,-0.00969438999891281 ,0.983418047428131,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.826135456562042,-0.335000514984131 ,0.453072637319565,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.480840772390366,-0.73974883556366 ,-0.470705687999725,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.814851105213165,-0.0293110944330692 ,0.578928768634796,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.295633107423782,-0.949930131435394 ,-0.10116221010685,0.261419922113419,-0.95404326915741,0.146496027708054,0.645033359527588,-0.763978242874146 ,0.0164063423871994,0.261419922113419,-0.95404326915741,0.146496027708054,-0.181093856692314,-0.00969438999891281 ,0.983418047428131,0.085636705160141,-0.288859754800797,0.95353364944458,0.645033359527588,-0.763978242874146 ,0.0164063423871994,0.191650301218033,-0.911473155021667,0.363987505435944,-0.395999372005463,-0.883323132991791 ,0.250847965478897,-0.722061336040497,-0.559728622436523,0.406609505414963,0.415498226881027,-0.625033438205719 ,0.660828590393066,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.722061336040497,-0.559728622436523 ,0.406609505414963,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.200983807444572,-0.912257611751556 ,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.709003627300262,-0.541708946228027 ,-0.451514393091202,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.200983807444572,-0.912257611751556 ,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.191650301218033,-0.911473155021667 ,0.363987505435944,0.415498226881027,-0.625033438205719,0.660828590393066,0.709003627300262,-0.541708946228027 ,-0.451514393091202,0.230480119585991,-0.946770370006561,0.224732518196106,-0.339713484048843,-0.93720954656601 ,0.0789492130279541,-0.705482065677643,-0.662965536117554,0.250542938709259,0.466174304485321,-0.668626964092255 ,0.579326808452606,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.705482065677643,-0.662965536117554 ,0.250542938709259,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.112518116831779,-0.874383687973022 ,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.557026505470276,-0.731577336788177 ,-0.393085300922394,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.112518116831779,-0.874383687973022 ,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.230480119585991,-0.946770370006561 ,0.224732518196106,0.466174304485321,-0.668626964092255,0.579326808452606,0.557026505470276,-0.731577336788177 ,-0.393085300922394,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.666895866394043,-0.560438930988312 ,0.491078555583954,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.211911574006081,-0.951958775520325 ,-0.221061065793037,0.685397624969482,-0.694671988487244,-0.218313813209534,-0.384443581104279,-0.766654908657074 ,-0.514240622520447,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.262365132570267,-0.963967680931091 ,-0.0439422130584717,0.317059487104416,-0.547120809555054,0.774681925773621,0.685397624969482,-0.694671988487244 ,-0.218313813209534,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.118260912597179,-0.832547545433044 ,0.541182935237885,0.317059487104416,-0.547120809555054,0.774681925773621,0.118260912597179,-0.832547545433044 ,0.541182935237885,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.666895866394043,-0.560438930988312 ,0.491078555583954,0.610170483589172,-0.773055613040924,0.17342720925808,0.812849104404449,-0.351107835769653 ,0.464757591485977,0.441097766160965,0.233705207705498,0.866495609283447,0.343847304582596,-0.196072638034821 ,0.918327033519745,0.441097766160965,0.233705207705498,0.866495609283447,-0.306766450405121,-0.118458941578865 ,0.944384336471558,-0.545982420444489,-0.58450835943222,0.600210964679718,0.343847304582596,-0.196072638034821 ,0.918327033519745,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.314526081085205,-0.770808577537537 ,-0.554010331630707,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.306766450405121,-0.118458941578865 ,0.944384336471558,0.610170483589172,-0.773055613040924,0.17342720925808,-0.314526081085205,-0.770808577537537 ,-0.554010331630707,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.812849104404449,-0.351107835769653 ,0.464757591485977,0.712531208992004,-0.546411454677582,-0.440152049064636,0.956566870212555,-0.244721978902817 ,-0.15840108692646,0.810173988342285,-0.314327269792557,0.494789332151413,0.413176476955414,-0.602903485298157 ,0.682489991188049,0.810173988342285,-0.314327269792557,0.494789332151413,-0.306935518980026,-0.919691741466522 ,0.244862422347069,-0.695957362651825,-0.547607123851776,0.464510262012482,0.413176476955414,-0.602903485298157 ,0.682489991188049,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.201402932405472,-0.92625367641449 ,-0.318576455116272,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.695957362651825,-0.547607123851776 ,0.464510262012482,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.430106282234192,-0.644480228424072 ,-0.632181823253632,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.956566870212555,-0.244721978902817 ,-0.15840108692646,-0.668817758560181,-0.562513589859009,0.486067175865173,0.450368106365204,-0.655529201030731 ,0.606176614761353,0.900666058063507,-0.271470785140991,0.339270144701004,-0.362296253442764,-0.902348458766937 ,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.360958158969879,-0.844728171825409 ,-0.395149976015091,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.362296253442764,-0.902348458766937 ,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.9074946641922,-0.352809637784958 ,-0.227988600730896,0.595698297023773,-0.718034982681274,-0.359957337379456,-0.360958158969879,-0.844728171825409 ,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456,0.9074946641922,-0.352809637784958 ,-0.227988600730896,0.900666058063507,-0.271470785140991,0.339270144701004,0.450368106365204,-0.655529201030731 ,0.606176614761353,0.330185920000076,-0.571054816246033,0.751580774784088,0.717249751091003,-0.62588095664978 ,-0.306309938430786,0.939882814884186,-0.341329634189606,0.010694270953536,0.665187358856201,-0.279087334871292 ,0.692557573318481,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.705251336097717,-0.583878993988037 ,0.402126729488373,0.330185920000076,-0.571054816246033,0.751580774784088,0.665187358856201,-0.279087334871292 ,0.692557573318481,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.40076744556427,-0.847734689712524 ,0.347464174032211,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.391103744506836,-0.641536116600037 ,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786,-0.391103744506836,-0.641536116600037 ,-0.659900963306427,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.939882814884186,-0.341329634189606 ,0.010694270953536,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.706917762756348,-0.104018487036228 ,0.699605226516724,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.623616337776184,-0.765475332736969 ,-0.158588007092476,-0.970349133014679,-0.239411488175392,0.0332369618117809,0.192425221204758,-0.974552154541016 ,0.114980839192867,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.623616337776184,-0.765475332736969 ,-0.158588007092476,0.192425221204758,-0.974552154541016,0.114980839192867,-0.706917762756348,-0.104018487036228 ,0.699605226516724,-0.0837006717920303,-0.567485928535461,0.819117784500122,0.668955624103546,-0.737108647823334 ,-0.0957559272646904,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.912856221199036,-0.241108059883118 ,0.329485028982162,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.478905022144318,-0.688271999359131 ,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,-0.478905022144318,-0.688271999359131 ,-0.544914305210114,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.314595818519592,-0.93869549036026 ,-0.140997156500816,0.301147431135178,-0.680567443370819,0.667935729026794,0.124663800001144,-0.874086201190948 ,0.469502121210098,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.691426277160645,-0.534520924091339 ,0.486021667718887,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.794416427612305,-0.305552929639816 ,-0.524919033050537,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.75092750787735,-0.519762337207794 ,0.407375782728195,0.593356251716614,-0.709651470184326,-0.379898846149445,-0.420935481786728,-0.595206379890442 ,-0.684501767158508,-0.794416427612305,-0.305552929639816,-0.524919033050537,0.326997041702271,-0.921505868434906 ,-0.209522947669029,0.148850917816162,-0.924228250980377,0.351632624864578,0.296216726303101,-0.720275163650513 ,0.627263367176056,0.593356251716614,-0.709651470184326,-0.379898846149445,0.326997041702271,-0.921505868434906 ,-0.209522947669029,-0.75092750787735,-0.519762337207794,0.407375782728195,0.296216726303101,-0.720275163650513 ,0.627263367176056,0.148850917816162,-0.924228250980377,0.351632624864578,-0.958362400531769,-0.256493717432022 ,0.125509053468704,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.69564962387085,-0.635027050971985 ,0.335875362157822,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.68010026216507,-0.471441000699997 ,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,0.522674977779388,-0.842709720134735 ,-0.129039421677589,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.68010026216507,-0.471441000699997 ,-0.561433076858521,0.522674977779388,-0.842709720134735,-0.129039421677589,0.312811404466629,-0.918802380561829 ,-0.240730464458466,0.180372029542923,-0.916134834289551,0.357998490333557,0.310219675302505,-0.605204224586487 ,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,0.310219675302505,-0.605204224586487 ,0.733138203620911,0.180372029542923,-0.916134834289551,0.357998490333557,-0.931363523006439,-0.361005514860153 ,-0.0472965724766254,0.259535193443298,-0.932749152183533,0.250240802764893,-0.303018301725388,-0.938679337501526 ,0.164502337574959,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.334644615650177,-0.86758428812027 ,-0.367845684289932,0.918069958686829,-0.187106743454933,0.3494833111763,0.9074946641922,-0.352809637784958,-0.227988600730896 ,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.303018301725388,-0.938679337501526,0.164502337574959 ,0.956566870212555,-0.244721978902817,-0.15840108692646,0.900666058063507,-0.271470785140991,0.339270144701004 ,0.638639688491821,0.766668796539307,0.0660171657800674,0.658155202865601,0.750174701213837,0.0637934505939484 ,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.15803237259388,0.792331874370575,0.589267313480377 ,-0.599858164787292,0.75833535194397,0.255142569541931,-0.814851105213165,-0.0293110944330692,0.578928768634796 ,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.599858164787292,0.75833535194397,0.255142569541931 ,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.970349133014679,-0.239411488175392,0.0332369618117809 ,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.752064287662506,0.658552467823029,-0.0266082808375359 ,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.863033890724182,-0.335786253213882,-0.377385854721069 ,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.600557804107666,0.788931846618652,-0.13006503880024 ,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.906549394130707,0.409386157989502,-0.102816209197044 ,-0.816486001014709,0.512708961963654,0.265480846166611,-0.909857094287872,0.391187280416489,0.138320609927177 ,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.968974888324738,0.149660646915436,0.196696102619171 ,-0.660224080085754,0.688790798187256,0.299451798200607,-0.816486001014709,0.512708961963654,0.265480846166611 ,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.359505951404572,0.919594466686249,-0.15843440592289 ,-0.33124178647995,0.767114698886871,0.549375951290131,-0.563141465187073,0.729207098484039,0.388752728700638 ,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.00761284260079265,0.965830504894257,-0.259062647819519 ,0.261382073163986,0.943598508834839,-0.203227162361145,-0.00761284260079265,0.965830504894257,-0.259062647819519 ,-0.049139030277729,0.993503928184509,-0.10264165699482,0.505573332309723,0.856702566146851,0.102256514132023 ,0.413430035114288,0.428488910198212,0.803413271903992,0.158631011843681,0.588066816329956,0.793103754520416 ,0.520070433616638,0.75630134344101,0.396906822919846,0.941741049289703,0.116148002445698,0.315647602081299,0.0206130910664797 ,0.755090355873108,0.655296623706818,0.158631011843681,0.588066816329956,0.793103754520416,0.229550704360008 ,0.575565576553345,0.784876227378845,0.00418568449094892,0.628182590007782,0.778054714202881,0.261382073163986 ,0.943598508834839,-0.203227162361145,0.522960782051086,0.842813670635223,-0.127189323306084,0.158631011843681 ,0.588066816329956,0.793103754520416,0.0206130910664797,0.755090355873108,0.655296623706818,-0.00761284260079265 ,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,0.0206130910664797 ,0.755090355873108,0.655296623706818,-0.33124178647995,0.767114698886871,0.549375951290131,-0.494772285223007 ,0.860163271427155,-0.123772047460079,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.64732962846756 ,0.721940577030182,-0.244471192359924,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.258335679769516 ,0.945306420326233,-0.199144259095192,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.470422893762589 ,0.855190873146057,-0.217602774500847,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.00761284260079265 ,0.965830504894257,-0.259062647819519,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.303004384040833 ,0.934939086437225,-0.184599980711937,-0.049139030277729,0.993503928184509,-0.10264165699482,0.980522811412811 ,0.123100526630878,0.153040006756783,0.894985616207123,0.383079379796982,0.228584766387939,0.780855357646942 ,0.547496914863586,0.30085226893425,0.962031662464142,0.166659101843834,0.216147840023041,0.980522811412811,0.123100526630878 ,0.153040006756783,0.941741049289703,0.116148002445698,0.315647602081299,0.764615535736084,0.640312492847443 ,0.0732326954603195,0.894985616207123,0.383079379796982,0.228584766387939,0.916947364807129,0.362371891736984 ,0.167015478014946,0.826885938644409,0.48306405544281,0.287938833236694,0.796578645706177,0.576386570930481,0.182321041822433 ,0.847357213497162,0.513431668281555,0.135549768805504,0.703840851783752,0.696332156658173,0.140461936593056 ,0.729536890983582,0.676141858100891,0.102995507419109,0.847357213497162,0.513431668281555,0.135549768805504 ,0.796578645706177,0.576386570930481,0.182321041822433,0.819103598594666,0.554179012775421,0.148171901702881 ,0.658155202865601,0.750174701213837,0.0637934505939484,0.729536890983582,0.676141858100891,0.102995507419109 ,0.703840851783752,0.696332156658173,0.140461936593056,0.764663100242615,0.188213542103767,0.616332709789276 ,0.854411005973816,0.0699176639318466,0.514872193336487,0.597852408885956,0.634572505950928,0.489785879850388 ,0.614538609981537,0.667141020298004,0.421028733253479,0.916947364807129,0.362371891736984,0.167015478014946 ,0.893702685832977,0.422671288251877,0.150480911135674,0.941741049289703,0.116148002445698,0.315647602081299 ,0.980522811412811,0.123100526630878,0.153040006756783,0.780855357646942,0.547496914863586,0.30085226893425,0.597852408885956 ,0.634572505950928,0.489785879850388,0.854411005973816,0.0699176639318466,0.514872193336487,0.962031662464142 ,0.166659101843834,0.216147840023041,0.227211803197861,0.921236932277679,0.315748870372772,0.311181455850601 ,0.925608515739441,0.215441450476646,0.614538609981537,0.667141020298004,0.421028733253479,0.597852408885956 ,0.634572505950928,0.489785879850388,0.227211803197861,0.921236932277679,0.315748870372772,0.505573332309723 ,0.856702566146851,0.102256514132023,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.127702474594116 ,0.976085126399994,0.175925895571709,-0.127702474594116,0.976085126399994,0.175925895571709,-0.049139030277729 ,0.993503928184509,-0.10264165699482,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.410511583089828 ,0.907221853733063,0.0918080508708954,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.470422893762589 ,0.855190873146057,-0.217602774500847,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.410511583089828 ,0.907221853733063,0.0918080508708954,0.826885938644409,0.48306405544281,0.287938833236694,0.916947364807129 ,0.362371891736984,0.167015478014946,0.962031662464142,0.166659101843834,0.216147840023041,0.854411005973816 ,0.0699176639318466,0.514872193336487,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.559431493282318 ,0.828812479972839,0.0103096449747682,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.64732962846756 ,0.721940577030182,-0.244471192359924,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.686884999275208 ,0.723168194293976,-0.0722270086407661,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.891578018665314 ,0.451290994882584,-0.0377500951290131,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.905105233192444 ,0.409709483385086,-0.113677680492401,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.740322589874268 ,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.740322589874268 ,0.65516471862793,-0.150604158639908,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.694885432720184 ,0.706956088542938,-0.131709337234497,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.676983892917633 ,0.720325946807861,-0.15107399225235,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.749487936496735 ,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.749487936496735 ,0.64631062746048,-0.143354147672653,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.733190715312958 ,0.653582453727722,-0.187780037522316,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.712907791137695 ,0.682124972343445,-0.162689983844757,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.794416427612305 ,-0.305552929639816,-0.524919033050537,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.600557804107666 ,0.788931846618652,-0.13006503880024,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.719631135463715 ,0.672992944717407,-0.170913591980934,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.719631135463715 ,0.672992944717407,-0.170913591980934,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.749487936496735 ,0.64631062746048,-0.143354147672653,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646 ,0.638815999031067,-0.188326075673103,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.709426164627075 ,0.694045186042786,-0.1225391253829,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.745954036712646 ,0.638815999031067,-0.188326075673103,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.931363523006439 ,-0.361005514860153,-0.0472965724766254,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.63100528717041 ,0.719355642795563,-0.290447652339935,-0.816486001014709,0.512708961963654,0.265480846166611,-0.968974888324738 ,0.149660646915436,0.196696102619171,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.258335679769516 ,0.945306420326233,-0.199144259095192,-0.563141465187073,0.729207098484039,0.388752728700638,-0.660224080085754 ,0.688790798187256,0.299451798200607,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.667403042316437 ,0.744478642940521,-0.0180177688598633,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.494772285223007 ,0.860163271427155,-0.123772047460079,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.63100528717041 ,0.719355642795563,-0.290447652339935,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.472927123308182 ,0.876888871192932,0.0860569700598717,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.906549394130707 ,0.409386157989502,-0.102816209197044,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.63100528717041 ,0.719355642795563,-0.290447652339935,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.864171028137207 ,0.408056378364563,-0.294445961713791,-0.968974888324738,0.149660646915436,0.196696102619171,-0.834402322769165 ,0.550801813602448,0.0197510607540607,0.658155202865601,0.750174701213837,0.0637934505939484,0.819103598594666 ,0.554179012775421,0.148171901702881,0.810173988342285,-0.314327269792557,0.494789332151413,0.956566870212555 ,-0.244721978902817,-0.15840108692646,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.939418137073517 ,0.146129980683327,-0.310063809156418,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.972268521785736 ,0.233539238572121,0.0123817138373852,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.785715341567993 ,0.180996224284172,0.591516494750977,-0.699552893638611,0.686573624610901,0.19809702038765,-0.923372864723206 ,0.289372861385345,-0.252281367778778,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699552893638611 ,0.686573624610901,0.19809702038765,-0.802868485450745,0.579959869384766,0.138017445802689,-0.699533343315125 ,0.693202495574951,-0.173561066389084,-0.305637359619141,0.797389090061188,-0.520342588424683,-0.633913338184357 ,0.759061396121979,-0.148255288600922,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.397901207208633 ,0.642866194248199,-0.654520928859711,-0.397901207208633,0.642866194248199,-0.654520928859711,0.154303297400475 ,0.424244195222855,-0.892304539680481,0.133048385381699,0.622710466384888,-0.771057546138763,-0.305637359619141 ,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.154303297400475 ,0.424244195222855,-0.892304539680481,0.15365432202816,0.571211695671082,-0.806292474269867,0.193036586046219 ,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,0.160101726651192 ,0.546482443809509,-0.822024524211884,0.192081093788147,0.0805686637759209,-0.978066265583038,0.324593335390091 ,0.033190730959177,-0.945271134376526,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.957430243492126 ,0.286320626735687,0.0367132313549519,-0.785715341567993,0.180996224284172,0.591516494750977,-0.90586119890213 ,-0.279545783996582,0.31822881102562,-0.699552893638611,0.686573624610901,0.19809702038765,-0.785715341567993 ,0.180996224284172,0.591516494750977,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.802868485450745 ,0.579959869384766,0.138017445802689,0.72310745716095,0.620889782905579,0.302673995494843,0.738506376743317,0.594660043716431 ,0.317785710096359,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778 ,0.326349973678589,0.878546118736267,0.378491014242172,0.291378289461136,0.738506376743317,0.594660043716431 ,0.317785710096359,0.72310745716095,0.620889782905579,0.302673995494843,0.855198323726654,0.434896290302277,0.281959295272827 ,0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.878546118736267 ,0.378491014242172,0.291378289461136,0.855198323726654,0.434896290302277,0.281959295272827,0.797426402568817 ,0.177674129605293,0.57666540145874,0.908547043800354,0.339474141597748,0.243515089154243,0.975513935089111,-0.202585577964783 ,0.0856255367398262,0.543871879577637,-0.524204134941101,0.655296385288239,0.494092851877213,0.035261906683445 ,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.970879018306732,0.17382837831974 ,0.164856374263763,0.599660396575928,0.629723131656647,0.493817895650864,0.814328134059906,-0.0162655059248209 ,0.580176770687103,0.807652294635773,0.443565875291824,0.388519138097763,0.910823285579681,0.270006626844406 ,0.312245815992355,0.996930718421936,0.0329510122537613,0.0710170343518257,0.178336277604103,0.738516449928284 ,-0.650222778320313,0.390601873397827,0.504608035087585,-0.769935667514801,0.605724632740021,0.555329561233521 ,-0.569830477237701,0.525696158409119,0.742150247097015,-0.41576024889946,0.605724632740021,0.555329561233521 ,-0.569830477237701,0.859436631202698,0.509184420108795,0.0458242334425449,0.723603904247284,0.683222591876984 ,0.0980009809136391,0.525696158409119,0.742150247097015,-0.41576024889946,0.654246509075165,0.624168276786804 ,0.427054405212402,0.762879073619843,0.502556324005127,0.406758666038513,0.807652294635773,0.443565875291824 ,0.388519138097763,0.599660396575928,0.629723131656647,0.493817895650864,0.599660396575928,0.629723131656647 ,0.493817895650864,0.807652294635773,0.443565875291824,0.388519138097763,0.814328134059906,-0.0162655059248209 ,0.580176770687103,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796 ,0.607288181781769,0.494092851877213,0.035261906683445,0.868693768978119,0.814328134059906,-0.0162655059248209 ,0.580176770687103,0.655400395393372,-0.538768291473389,0.52931934595108,0.0525061227381229,0.0318809561431408 ,-0.998111546039581,0.192081093788147,0.0805686637759209,-0.978066265583038,0.160101726651192,0.546482443809509 ,-0.822024524211884,0.0794514417648315,0.574801087379456,-0.814426898956299,0.160101726651192,0.546482443809509 ,-0.822024524211884,0.15365432202816,0.571211695671082,-0.806292474269867,0.128622680902481,0.604616940021515 ,-0.786062717437744,0.0794514417648315,0.574801087379456,-0.814426898956299,-0.414378970861435,-0.48013111948967 ,0.773152112960815,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.0517404824495316,-0.448792159557343 ,-0.892137050628662,0.628591895103455,-0.444956034421921,-0.637876510620117,0.887380838394165,-0.451604127883911 ,-0.0927843973040581,0.474026173353195,-0.576446056365967,0.665589272975922,-0.551329076290131,-0.707401514053345 ,-0.4422886967659,0.165543153882027,-0.540197908878326,-0.825094938278198,0.663442254066467,-0.730678737163544 ,-0.161099433898926,-0.348949372768402,-0.852245092391968,0.389759749174118,-0.620602905750275,-0.69584184885025 ,-0.361463844776154,0.323404222726822,-0.738465547561646,0.591674208641052,0.343847304582596,-0.196072638034821 ,0.918327033519745,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.314526081085205,-0.770808577537537 ,-0.554010331630707,0.610170483589172,-0.773055613040924,0.17342720925808,-0.0837006717920303,-0.567485928535461 ,0.819117784500122,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.668955624103546,-0.737108647823334 ,-0.0957559272646904,0.598684668540955,-0.729470372200012,-0.330831676721573,0.314595818519592,-0.93869549036026 ,-0.140997156500816,0.124663800001144,-0.874086201190948,0.469502121210098,0.301147431135178,-0.680567443370819 ,0.667935729026794,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.810118317604065,-0.284595668315887 ,-0.512555956840515,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.885131180286407,0.0417930334806442 ,-0.4634610414505,0.627128839492798,0.0574354380369186,-0.776795089244843,0.0855752229690552,-0.285937607288361 ,-0.954419493675232,0.648241341114044,-0.506932139396667,-0.568157494068146,0.198126867413521,0.0765141919255257 ,-0.977185368537903,0.969612717628479,0.0529157817363739,0.238853618502617,0.918069958686829,-0.187106743454933 ,0.3494833111763,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.887380838394165,-0.451604127883911 ,-0.0927843973040581,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.739399373531342,-0.377425998449326 ,0.557528674602509,0.474026173353195,-0.576446056365967,0.665589272975922,-0.647231996059418,0.709673702716827 ,-0.278305560350418,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.94776064157486,-0.269029259681702 ,-0.171385675668716,-0.702043056488037,0.707515060901642,-0.0809816271066666,0.198126867413521,0.0765141919255257 ,-0.977185368537903,0.121350355446339,0.714234948158264,-0.68930584192276,0.462542772293091,0.739023745059967 ,-0.489793956279755,0.627128839492798,0.0574354380369186,-0.776795089244843,0.633758366107941,-0.479115188121796 ,0.607288181781769,0.655400395393372,-0.538768291473389,0.52931934595108,0.592115879058838,-0.487801223993301 ,0.641442716121674,0.543871879577637,-0.524204134941101,0.655296385288239,0.970879018306732,0.17382837831974 ,0.164856374263763,0.633758366107941,-0.479115188121796,0.607288181781769,0.543871879577637,-0.524204134941101 ,0.655296385288239,0.975513935089111,-0.202585577964783,0.0856255367398262,0.627528429031372,0.574077785015106 ,-0.525968432426453,0.906324923038483,0.41602036356926,-0.0741765573620796,0.926415085792542,0.366669327020645 ,-0.085490919649601,0.627380788326263,0.542527794837952,-0.558620572090149,0.128622680902481,0.604616940021515 ,-0.786062717437744,0.627528429031372,0.574077785015106,-0.525968432426453,0.627380788326263,0.542527794837952 ,-0.558620572090149,0.0794514417648315,0.574801087379456,-0.814426898956299,0.15365432202816,0.571211695671082 ,-0.806292474269867,0.154303297400475,0.424244195222855,-0.892304539680481,0.178336277604103,0.738516449928284 ,-0.650222778320313,0.128622680902481,0.604616940021515,-0.786062717437744,0.193036586046219,0.594731748104095 ,-0.780404388904572,0.15365432202816,0.571211695671082,-0.806292474269867,0.160101726651192,0.546482443809509 ,-0.822024524211884,0.239434629678726,0.547067284584045,-0.802115023136139,-0.393562406301498,0.580699265003204 ,-0.71266895532608,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045 ,-0.802115023136139,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979 ,-0.751902282238007,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.800276517868042,0.427208811044693 ,-0.420773267745972,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.90586119890213,-0.279545783996582 ,0.31822881102562,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.936574637889862,0.00382737815380096 ,-0.350447237491608,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579 ,0.344143718481064,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.90586119890213,-0.279545783996582 ,0.31822881102562,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579 ,0.344143718481064,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.906213700771332,0.328242093324661 ,-0.266521811485291,-0.921413004398346,-0.24597555398941,0.300822287797928,0.969612717628479,0.0529157817363739 ,0.238853618502617,0.632348001003265,0.720907807350159,0.283598184585571,0.613771736621857,0.718874037265778 ,0.326349973678589,0.918069958686829,-0.187106743454933,0.3494833111763,0.398143172264099,0.565787017345428,-0.722057580947876 ,0.633863806724548,0.397778630256653,-0.663316547870636,0.62652999162674,-0.0954440459609032,-0.773531258106232 ,0.432219922542572,0.089619405567646,-0.897303879261017,0.633863806724548,0.397778630256653,-0.663316547870636 ,0.97103625535965,0.0917741134762764,-0.2206040173769,0.886820495128632,-0.356388479471207,-0.294171094894409 ,0.62652999162674,-0.0954440459609032,-0.773531258106232,-0.458068251609802,-0.324115723371506,-0.827721238136292 ,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.12256808578968,0.664539575576782,-0.737132430076599 ,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.656110644340515,0.732090890407562,-0.183198615908623 ,-0.308493584394455,0.950873613357544,0.02590411901474,-0.0896633565425873,0.986825108528137,-0.134672433137894 ,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.576912403106689,0.718079209327698,0.389274090528488 ,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.664968252182007,0.74531364440918,0.0482159554958344 ,0.320559591054916,0.729658484458923,0.6040198802948,0.614538609981537,0.667141020298004,0.421028733253479,0.311181455850601 ,0.925608515739441,0.215441450476646,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.814851105213165 ,-0.0293110944330692,0.578928768634796,-0.599858164787292,0.75833535194397,0.255142569541931,0.941741049289703 ,0.116148002445698,0.315647602081299,0.991389572620392,-0.125116944313049,0.0386327914893627,0.996930718421936 ,0.0329510122537613,0.0710170343518257,-0.861413061618805,0.450139373540878,0.235249027609825,-0.659538865089417 ,0.541105389595032,0.521740794181824,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.861413061618805 ,0.450139373540878,0.235249027609825,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.837489604949951 ,-0.137019082903862,0.528996169567108,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.909857094287872 ,0.391187280416489,0.138320609927177,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.559431493282318 ,0.828812479972839,0.0103096449747682,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.410511583089828 ,0.907221853733063,0.0918080508708954,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.970349133014679 ,-0.239411488175392,0.0332369618117809,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.906213700771332 ,0.328242093324661,-0.266521811485291,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.921413004398346 ,-0.24597555398941,0.300822287797928,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.936574637889862 ,0.00382737815380096,-0.350447237491608,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.15803237259388 ,0.792331874370575,0.589267313480377,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.306766450405121 ,-0.118458941578865,0.944384336471558,0.819103598594666,0.554179012775421,0.148171901702881,0.939882814884186 ,-0.341329634189606,0.010694270953536,0.810173988342285,-0.314327269792557,0.494789332151413,0.748181462287903 ,0.587628960609436,0.308085650205612,0.812849104404449,-0.351107835769653,0.464757591485977,0.665187358856201 ,-0.279087334871292,0.692557573318481,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.494772285223007 ,0.860163271427155,-0.123772047460079,-0.258335679769516,0.945306420326233,-0.199144259095192,0.158631011843681 ,0.588066816329956,0.793103754520416,0.413430035114288,0.428488910198212,0.803413271903992,0.229550704360008 ,0.575565576553345,0.784876227378845,0.520070433616638,0.75630134344101,0.396906822919846,0.158631011843681,0.588066816329956 ,0.793103754520416,0.522960782051086,0.842813670635223,-0.127189323306084,-0.99501496553421,0.0992259010672569 ,-0.00997005868703127,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.968974888324738,0.149660646915436 ,0.196696102619171,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.64732962846756,0.721940577030182 ,-0.244471192359924,-0.669141829013824,0.742036163806915,-0.0403926707804203,0.980522811412811,0.123100526630878 ,0.153040006756783,0.962031662464142,0.166659101843834,0.216147840023041,0.916947364807129,0.362371891736984 ,0.167015478014946,0.780855357646942,0.547496914863586,0.30085226893425,0.894985616207123,0.383079379796982,0.228584766387939 ,0.505573332309723,0.856702566146851,0.102256514132023,0.894985616207123,0.383079379796982,0.228584766387939 ,0.764615535736084,0.640312492847443,0.0732326954603195,0.505573332309723,0.856702566146851,0.102256514132023 ,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.906549394130707,0.409386157989502,-0.102816209197044 ,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.359505951404572,0.919594466686249,-0.15843440592289 ,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.258335679769516,0.945306420326233,-0.199144259095192 ,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.929460346698761,0.35161367058754,-0.111674793064594 ,-0.802868485450745,0.579959869384766,0.138017445802689,0.192081093788147,0.0805686637759209,-0.978066265583038 ,0.177267909049988,0.365930050611496,-0.91360342502594,0.324593335390091,0.033190730959177,-0.945271134376526 ,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.875641226768494,-0.338847458362579,0.344143718481064 ,-0.858353078365326,-0.409084886312485,0.309644252061844,0.918069958686829,-0.187106743454933,0.3494833111763 ,0.613771736621857,0.718874037265778,0.326349973678589,0.596383929252625,0.731881856918335,0.329659104347229 ,0.592115879058838,-0.487801223993301,0.641442716121674,0.797426402568817,0.177674129605293,0.57666540145874 ,0.543871879577637,-0.524204134941101,0.655296385288239,0.177267909049988,0.365930050611496,-0.91360342502594 ,0.192081093788147,0.0805686637759209,-0.978066265583038,0.0525061227381229,0.0318809561431408,-0.998111546039581 ,0.970879018306732,0.17382837831974,0.164856374263763,0.947628259658813,0.256551682949066,0.190215542912483,0.933142781257629 ,0.297380536794662,0.202013194561005,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.828169226646423 ,0.35357066988945,-0.434883296489716,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.906213700771332 ,0.328242093324661,-0.266521811485291,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.99501496553421 ,0.0992259010672569,-0.00997005868703127,0.655400395393372,-0.538768291473389,0.52931934595108,0.991389572620392 ,-0.125116944313049,0.0386327914893627,0.592115879058838,-0.487801223993301,0.641442716121674,0.993199586868286 ,-5.2900577429682e-006,0.1164241284132,0.914847433567047,-0.40378075838089,0.00391693273559213,0.985846102237701 ,-0.106943093240261,0.129114612936974,0.26786082983017,0.938322722911835,-0.218634366989136,0.34263151884079 ,0.695380985736847,-0.631703197956085,0.0982041954994202,0.744845330715179,-0.659970700740814,0.149676010012627 ,0.966882228851318,-0.20672644674778,0.0982041954994202,0.744845330715179,-0.659970700740814,0.34263151884079 ,0.695380985736847,-0.631703197956085,0.341541588306427,0.10033044219017,-0.934496164321899,0.00497482251375914 ,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.377974539995193 ,-0.0538287870585918,-0.924249827861786,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.00533884158357978 ,0.0413248725235462,-0.999131500720978,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.433557748794556 ,-0.0273693483322859,-0.900710046291351,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.0723040401935577 ,-0.562818825244904,-0.823411822319031,-0.0723040401935577,-0.562818825244904,-0.823411822319031,0.282903432846069 ,-0.614905893802643,-0.736109018325806,0.383173555135727,-0.262150347232819,-0.885694801807404,-0.03597491979599 ,-0.262611389160156,-0.964230835437775,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.383173555135727 ,-0.262150347232819,-0.885694801807404,0.398143172264099,0.565787017345428,-0.722057580947876,0.12256808578968 ,0.664539575576782,-0.737132430076599,0.12256808578968,0.664539575576782,-0.737132430076599,0.398143172264099 ,0.565787017345428,-0.722057580947876,0.432219922542572,0.089619405567646,-0.897303879261017,0.180026173591614 ,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481,0.180026173591614 ,0.22968553006649,-0.956470131874084,0.432219922542572,0.089619405567646,-0.897303879261017,0.390601873397827 ,0.504608035087585,-0.769935667514801,0.178336277604103,0.738516449928284,-0.650222778320313,0.154303297400475 ,0.424244195222855,-0.892304539680481,0.390601873397827,0.504608035087585,-0.769935667514801,-0.995019972324371 ,0.0198635049164295,0.0976764634251595,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.850299119949341 ,0.0502048023045063,0.523899674415588,-0.976002871990204,0.137454673647881,0.168892458081245,-0.668019652366638 ,-0.146763682365417,0.729527354240417,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.850299119949341 ,0.0502048023045063,0.523899674415588,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.147625342011452 ,-0.322125315666199,0.935116052627563,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.652125775814056 ,-0.00108898046892136,0.758109986782074,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.147625342011452 ,-0.322125315666199,0.935116052627563,0.503679692745209,-0.333046585321426,0.797111511230469,0.538123428821564 ,-0.0776133164763451,0.839285016059875,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.717245042324066 ,0.0185855161398649,0.696573138237,0.538123428821564,-0.0776133164763451,0.839285016059875,0.503679692745209 ,-0.333046585321426,0.797111511230469,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186 ,-0.201623901724815,0.241827890276909,0.961548805236816,-0.0192979723215103,0.273955345153809,0.717245042324066 ,0.0185855161398649,0.696573138237,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815 ,0.241827890276909,0.941822648048401,-0.153352871537209,-0.299086838960648,0.967416942119598,-0.0268917102366686 ,-0.251756459474564,0.961548805236816,-0.0192979723215103,0.273955345153809,-0.505583822727203,0.0150259397923946 ,-0.862646639347076,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.886800348758698,0.175986841320992 ,-0.427333265542984,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085 ,-0.833384335041046,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988 ,-0.999628365039825,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.341541588306427,0.10033044219017 ,-0.934496164321899,0.377974539995193,-0.0538287870585918,-0.924249827861786,-5.02178700116929e-005,0.0272602327167988 ,-0.999628365039825,0.00497482251375914,0.164960786700249,-0.986287593841553,0.733689785003662,-0.00598063552752137 ,-0.679458260536194,0.70794689655304,-0.166302517056465,-0.686407029628754,0.377974539995193,-0.0538287870585918 ,-0.924249827861786,0.341541588306427,0.10033044219017,-0.934496164321899,-0.903742134571075,0.0408328101038933 ,0.426125347614288,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.995019972324371,0.0198635049164295 ,0.0976764634251595,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.668019652366638,-0.146763682365417 ,0.729527354240417,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.903742134571075,0.0408328101038933 ,0.426125347614288,-0.697896897792816,0.111968666315079,0.707391619682312,-0.713874757289886,0.186937421560287 ,-0.674860894680023,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.932169854640961,0.263871490955353 ,-0.247853130102158,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.482705980539322,0.267842918634415 ,-0.833819627761841,-0.244611799716949,0.194430083036423,-0.949927389621735,0.505280077457428,-0.213028207421303 ,-0.836248159408569,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.929460346698761,0.35161367058754 ,-0.111674793064594,-0.861413061618805,0.450139373540878,0.235249027609825,-0.837489604949951,-0.137019082903862 ,0.528996169567108,-0.802868485450745,0.579959869384766,0.138017445802689,-0.389561533927917,-0.191748484969139 ,0.900818705558777,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.659538865089417,0.541105389595032 ,0.521740794181824,-0.407288640737534,0.570921063423157,0.712857007980347,0.0511878095567226,-0.230872601270676 ,0.971636593341827,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.187374159693718,0.57430511713028 ,0.796909391880035,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.985846102237701,-0.106943093240261 ,0.129114612936974,0.846594989299774,-0.529064953327179,0.0580276139080524,0.867540001869202,-0.48896712064743 ,-0.0910244435071945,0.914847433567047,-0.40378075838089,0.00391693273559213,0.886820495128632,-0.356388479471207 ,-0.294171094894409,0.97103625535965,0.0917741134762764,-0.2206040173769,0.985846102237701,-0.106943093240261 ,0.129114612936974,0.762879073619843,0.502556324005127,0.406758666038513,0.859436631202698,0.509184420108795 ,0.0458242334425449,0.886820495128632,-0.356388479471207,-0.294171094894409,0.914847433567047,-0.40378075838089 ,0.00391693273559213,0.723603904247284,0.683222591876984,0.0980009809136391,0.859436631202698,0.509184420108795 ,0.0458242334425449,0.762879073619843,0.502556324005127,0.406758666038513,0.654246509075165,0.624168276786804 ,0.427054405212402,0.723603904247284,0.683222591876984,0.0980009809136391,0.654246509075165,0.624168276786804 ,0.427054405212402,0.933142781257629,0.297380536794662,0.202013194561005,0.906324923038483,0.41602036356926,-0.0741765573620796 ,0.947628259658813,0.256551682949066,0.190215542912483,0.926415085792542,0.366669327020645,-0.085490919649601 ,0.906324923038483,0.41602036356926,-0.0741765573620796,0.933142781257629,0.297380536794662,0.202013194561005 ,0.926415085792542,0.366669327020645,-0.085490919649601,0.947628259658813,0.256551682949066,0.190215542912483 ,0.981737434864044,-0.183587238192558,0.0498724691569805,0.968909800052643,-0.119059138000011,-0.21688424050808 ,0.809562027454376,0.57842743396759,-0.100154921412468,0.968909800052643,-0.119059138000011,-0.21688424050808 ,0.981737434864044,-0.183587238192558,0.0498724691569805,0.870848119258881,0.464649528264999,0.160388246178627 ,0.809562027454376,0.57842743396759,-0.100154921412468,0.870848119258881,0.464649528264999,0.160388246178627 ,0.793782532215118,0.557114601135254,0.24399308860302,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677 ,0.702188611030579,-0.0328761637210846,0.74566113948822,0.665992856025696,-0.021046232432127,0.793782532215118 ,0.557114601135254,0.24399308860302,0.713916897773743,0.653736352920532,0.250901371240616,0.632348001003265,0.720907807350159 ,0.283598184585571,0.671855986118317,0.740681707859039,-0.000314049131702632,0.711231529712677,0.702188611030579 ,-0.0328761637210846,0.713916897773743,0.653736352920532,0.250901371240616,0.999210178852081,0.0289647411555052 ,-0.0272047873586416,0.671855986118317,0.740681707859039,-0.000314049131702632,0.632348001003265,0.720907807350159 ,0.283598184585571,0.969612717628479,0.0529157817363739,0.238853618502617,0.999210178852081,0.0289647411555052 ,-0.0272047873586416,0.969612717628479,0.0529157817363739,0.238853618502617,0.964107513427734,-0.248898878693581 ,-0.0924450159072876,0.739399373531342,-0.377425998449326,0.557528674602509,-0.47929310798645,-0.284916669130325 ,-0.830120861530304,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.944391250610352,-0.0824343115091324 ,-0.3183234333992,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.383484423160553,-0.10283836722374 ,-0.917803883552551,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.698255062103271,-0.555874645709991 ,-0.451046735048294,-0.382079601287842,0.0211677625775337,-0.923886954784393,-0.828753769397736,-0.00401695584878325 ,0.559599041938782,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.587613880634308,-0.804071664810181 ,0.0904360190033913,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.828753769397736,-0.00401695584878325 ,0.559599041938782,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.964972972869873,-0.0338398963212967 ,-0.260157763957977,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.653040766716003,-0.484619319438934 ,-0.581963837146759,0.118139639496803,-0.728867173194885,0.67438542842865,-0.944391250610352,-0.0824343115091324 ,-0.3183234333992,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.812033832073212,-0.319456815719604 ,0.488414168357849,-0.583520650863647,-0.523498177528381,0.620848834514618,0.0390605479478836,-0.798295617103577 ,-0.600997805595398,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743 ,-0.0910244435071945,0.846594989299774,-0.529064953327179,0.0580276139080524,-0.944391250610352,-0.0824343115091324 ,-0.3183234333992,0.118139639496803,-0.728867173194885,0.67438542842865,-0.698255062103271,-0.555874645709991 ,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.118139639496803,-0.728867173194885 ,0.67438542842865,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.751028060913086,-0.474978506565094 ,-0.458641737699509,0.332680404186249,-0.441110402345657,0.833513855934143,0.202261254191399,-0.191956058144569 ,0.960334956645966,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.202261254191399,-0.191956058144569 ,0.960334956645966,-0.201129660010338,-0.411518931388855,0.888931393623352,0.0923520997166634,-0.948987245559692 ,0.301486879587173,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.332680404186249,-0.441110402345657 ,0.833513855934143,0.751028060913086,-0.474978506565094,-0.458641737699509,0.505280077457428,-0.213028207421303 ,-0.836248159408569,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.837489604949951,-0.137019082903862 ,0.528996169567108,0.118139639496803,-0.728867173194885,0.67438542842865,0.867540001869202,-0.48896712064743 ,-0.0910244435071945,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.871833384037018,0.0184005852788687 ,0.489456832408905,0.909544348716736,-0.0496345721185207,0.412632375955582,0.928275108337402,-0.108704164624214 ,0.355652451515198,0.807208120822906,-0.16038890182972,0.568058490753174,0.938030481338501,-0.164544522762299 ,-0.304998099803925,0.928275108337402,-0.108704164624214,0.355652451515198,0.909544348716736,-0.0496345721185207 ,0.412632375955582,0.934698820114136,0.0468888580799103,-0.352334558963776,0.934698820114136,0.0468888580799103 ,-0.352334558963776,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.0390605479478836,-0.798295617103577 ,-0.600997805595398,0.938030481338501,-0.164544522762299,-0.304998099803925,-0.698255062103271,-0.555874645709991 ,-0.451046735048294,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.382079601287842,0.0211677625775337 ,-0.923886954784393,0.456334859132767,-0.263855695724487,0.849787414073944,0.546681344509125,-0.221680983901024 ,0.807463347911835,0.928847432136536,0.162274017930031,0.333030939102173,0.928847432136536,0.162274017930031 ,0.333030939102173,0.969195008277893,0.116620995104313,0.216934517025948,0.953069984912872,0.0484385639429092 ,0.298849850893021,0.871833384037018,0.0184005852788687,0.489456832408905,0.714491784572601,0.142257153987885 ,0.685028791427612,0.30596736073494,-0.302397102117538,0.902740240097046,0.456334859132767,-0.263855695724487 ,0.849787414073944,0.928847432136536,0.162274017930031,0.333030939102173,0.161164596676826,-0.331503033638,0.929586827754974 ,0.30596736073494,-0.302397102117538,0.902740240097046,0.714491784572601,0.142257153987885,0.685028791427612 ,0.709949553012848,0.601409435272217,0.366440117359161,0.961548805236816,-0.0192979723215103,0.273955345153809 ,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.785880386829376,0.614527404308319,-0.0689060613512993 ,0.785880386829376,0.614527404308319,-0.0689060613512993,0.632241547107697,0.646320283412933,-0.427247822284698 ,0.404174894094467,0.903538584709167,-0.142339900135994,0.462400853633881,0.884378015995026,0.0637255683541298 ,0.632241547107697,0.646320283412933,-0.427247822284698,0.785880386829376,0.614527404308319,-0.0689060613512993 ,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.733689785003662,-0.00598063552752137,-0.679458260536194 ,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.967416942119598,-0.0268917102366686,-0.251756459474564 ,0.941822648048401,-0.153352871537209,-0.299086838960648,0.70794689655304,-0.166302517056465,-0.686407029628754 ,0.70794689655304,-0.166302517056465,-0.686407029628754,0.941822648048401,-0.153352871537209,-0.299086838960648 ,0.820765018463135,-0.278661012649536,-0.4986911714077,0.71175479888916,-0.136520832777023,-0.689033508300781 ,0.71175479888916,-0.136520832777023,-0.689033508300781,0.820765018463135,-0.278661012649536,-0.4986911714077 ,0.433943748474121,-0.801411271095276,-0.411622196435928,0.471586465835571,-0.672621011734009,-0.570251822471619 ,0.471586465835571,-0.672621011734009,-0.570251822471619,0.433943748474121,-0.801411271095276,-0.411622196435928 ,0.850343227386475,-0.422914385795593,-0.313145011663437,0.642500996589661,-0.273710608482361,-0.715733826160431 ,-0.683505356311798,0.663009881973267,0.305349379777908,-0.258647561073303,0.909015476703644,0.326790869235992 ,-0.343125730752945,0.914759814739227,0.213258653879166,-0.722104966640472,0.687272310256958,0.0788739323616028 ,-0.683505356311798,0.663009881973267,0.305349379777908,-0.722104966640472,0.687272310256958,0.0788739323616028 ,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.976002871990204,0.137454673647881,0.168892458081245 ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.995019972324371,0.0198635049164295,0.0976764634251595 ,-0.976002871990204,0.137454673647881,0.168892458081245,-0.973912477493286,0.184166118502617,-0.132579416036606 ,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.99804013967514,0.0525207407772541,0.0340211354196072 ,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.970708966255188,0.0394217669963837,-0.23700213432312 ,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.990444839000702,0.137596040964127,-0.00929243210703135 ,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.946598649024963,0.101268656551838,-0.306097477674484 ,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.967456996440887,0.251362770795822,-0.0290456227958202 ,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.923067510128021,0.218861386179924,-0.316300690174103 ,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.94812422990799,0.313342124223709,-0.0536391511559486 ,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.932169854640961,0.263871490955353,-0.247853130102158 ,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.94812422990799,0.313342124223709,-0.0536391511559486 ,-0.949256777763367,0.266638487577438,-0.166779711842537,0.30596736073494,-0.302397102117538,0.902740240097046 ,0.152829229831696,-0.222570449113846,0.962863266468048,0.118139639496803,-0.728867173194885,0.67438542842865 ,0.456334859132767,-0.263855695724487,0.849787414073944,0.602918326854706,0.515652477741241,0.608762681484222 ,0.910823285579681,0.270006626844406,0.312245815992355,0.118139639496803,-0.728867173194885,0.67438542842865 ,0.152829229831696,-0.222570449113846,0.962863266468048,-0.343125730752945,0.914759814739227,0.213258653879166 ,-0.308493584394455,0.950873613357544,0.02590411901474,-0.656110644340515,0.732090890407562,-0.183198615908623 ,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606 ,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.656110644340515,0.732090890407562,-0.183198615908623 ,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.853118479251862,0.0149602368474007,-0.521502673625946 ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.973912477493286,0.184166118502617,-0.132579416036606 ,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.946598649024963,0.101268656551838,-0.306097477674484 ,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.853118479251862,0.0149602368474007,-0.521502673625946 ,-0.805570960044861,0.0887086465954781,-0.585820972919464,0.949140191078186,-0.201623901724815,0.241827890276909 ,0.928275108337402,-0.108704164624214,0.355652451515198,0.938030481338501,-0.164544522762299,-0.304998099803925 ,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.339781731367111,-0.868737757205963,0.360337555408478 ,0.118260912597179,-0.832547545433044,0.541182935237885,0.261419922113419,-0.95404326915741,0.146496027708054 ,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.306935518980026,-0.919691741466522,0.244862422347069 ,0.810173988342285,-0.314327269792557,0.494789332151413,0.939882814884186,-0.341329634189606,0.010694270953536 ,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.890334188938141,-0.2436583340168,-0.384624063968658 ,0.953069984912872,0.0484385639429092,0.298849850893021,0.969195008277893,0.116620995104313,0.216934517025948 ,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.0872491523623466,-0.891694486141205,-0.444149285554886 ,-0.542883276939392,-0.826726615428925,-0.147651329636574,-0.0959864854812622,-0.913586139678955,0.395154267549515 ,0.50744092464447,-0.861680567264557,0.00320711638778448,0.314595818519592,-0.93869549036026,-0.140997156500816 ,-0.211911574006081,-0.951958775520325,-0.221061065793037,-0.339781731367111,-0.868737757205963,0.360337555408478 ,0.124663800001144,-0.874086201190948,0.469502121210098,0.124663800001144,-0.874086201190948,0.469502121210098 ,-0.339781731367111,-0.868737757205963,0.360337555408478,0.192425221204758,-0.974552154541016,0.114980839192867 ,0.118260912597179,-0.832547545433044,0.541182935237885,-0.40076744556427,-0.847734689712524,0.347464174032211 ,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.261419922113419,-0.95404326915741,0.146496027708054 ,0.230480119585991,-0.946770370006561,0.224732518196106,-0.362296253442764,-0.902348458766937,0.233470991253853 ,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.389462053775787,-0.886311709880829,-0.250541061162949 ,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.326997041702271,-0.921505868434906,-0.209522947669029 ,0.180372029542923,-0.916134834289551,0.357998490333557,-0.339713484048843,-0.93720954656601,0.0789492130279541 ,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.395999372005463,-0.883323132991791,0.250847965478897 ,0.148850917816162,-0.924228250980377,0.351632624864578,0.326997041702271,-0.921505868434906,-0.209522947669029 ,0.259535193443298,-0.932749152183533,0.250240802764893,0.334644615650177,-0.86758428812027,-0.367845684289932 ,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.32362487912178,-0.91464102268219,0.242278203368187 ,0.248996675014496,-0.917850255966187,0.309114098548889,0.50744092464447,-0.861680567264557,0.00320711638778448 ,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.32362487912178,-0.91464102268219,0.242278203368187 ,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.303018301725388,-0.938679337501526,0.164502337574959 ,0.259535193443298,-0.932749152183533,0.250240802764893,0.149650126695633,-0.977229058742523,-0.150426715612412 ,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.262460827827454,-0.84521484375,0.465538591146469 ,0.648241341114044,-0.506932139396667,-0.568157494068146,0.0855752229690552,-0.285937607288361,-0.954419493675232 ,-0.407288640737534,0.570921063423157,0.712857007980347,0.187374159693718,0.57430511713028,0.796909391880035 ,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.751268684864044,0.274677604436874,-0.60012298822403 ,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.883178770542145,0.174471154808998,-0.435379177331924 ,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.905240058898926,0.247854217886925,-0.345121324062347 ,-0.888693332672119,0.348883032798767,-0.297497481107712,0.850938260555267,-0.0678395256400108,0.520866513252258 ,0.922418177127838,0.0309108179062605,0.384953439235687,0.937970161437988,0.291288256645203,-0.188050866127014 ,0.9481241106987,0.313342481851578,-0.053639143705368,0.967456996440887,0.251362919807434,-0.0290456917136908 ,0.939527928829193,0.186540976166725,0.287210315465927,0.877985596656799,0.347244620323181,0.32948824763298,0.9481241106987 ,0.313342481851578,-0.053639143705368,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.923067450523376 ,0.21886146068573,-0.316300749778748,0.932169795036316,0.263871729373932,-0.24785327911377,0.482705801725388 ,0.267842918634415,-0.833819687366486,-0.0640612170100212,0.868370532989502,0.491760909557343,-0.272089272737503 ,0.833921611309052,0.480148106813431,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648 ,0.608063995838165,0.793586194515228,0.402506083250046,0.589897155761719,0.700007259845734,0.551314413547516 ,0.63163036108017,0.545064687728882,0.147527933120728,0.908096134662628,0.391914397478104,0.0960818827152252 ,0.882192432880402,0.460982412099838,0.675129354000092,-0.135668084025383,0.725116908550262,0.850938260555267 ,-0.0678395256400108,0.520866513252258,0.9481241106987,0.313342481851578,-0.053639143705368,0.877985596656799 ,0.347244620323181,0.32948824763298,0.451114922761917,-0.252489298582077,0.856004953384399,0.675129354000092 ,-0.135668084025383,0.725116908550262,0.877985596656799,0.347244620323181,0.32948824763298,0.697896838188171 ,0.111968606710434,0.707391738891602,0.0218879040330648,0.608063995838165,0.793586194515228,0.402506083250046 ,0.589897155761719,0.700007259845734,0.0960818827152252,0.882192432880402,0.460982412099838,-0.0640612170100212 ,0.868370532989502,0.491760909557343,0.697896838188171,0.111968606710434,0.707391738891602,0.095845490694046 ,-0.0575048215687275,0.993733823299408,0.136431142687798,-0.358484745025635,0.923512399196625,0.451114922761917 ,-0.252489298582077,0.856004953384399,0.97600269317627,0.13745604455471,0.168892234563828,0.683504700660706,0.663010776042938 ,0.305349051952362,0.551314413547516,0.63163036108017,0.545064687728882,0.85029935836792,0.0502043291926384,0.523899376392365 ,0.147625222802162,-0.322124987840652,0.935116171836853,0.095845490694046,-0.0575048215687275,0.993733823299408 ,0.697896838188171,0.111968606710434,0.707391738891602,0.668019592761993,-0.146763533353806,0.729527413845062 ,0.939527928829193,0.186540976166725,0.287210315465927,0.990444839000702,0.137596189975739,-0.00929253362119198 ,0.99804013967514,0.0525208227336407,0.0340210981667042,0.903742134571075,0.0408325865864754,0.426125437021255 ,0.946598649024963,0.101268604397774,-0.306097507476807,0.923067450523376,0.21886146068573,-0.316300749778748 ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.805570960044861,0.0887085422873497,-0.585820972919464 ,-0.568327784538269,-0.132913276553154,0.811996042728424,0.095845490694046,-0.0575048215687275,0.993733823299408 ,0.147625222802162,-0.322124987840652,0.935116171836853,-0.503679633140564,-0.333046585321426,0.797111511230469 ,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.969194948673248,0.11662120372057,0.21693454682827 ,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.681288778781891,-0.15539838373661,0.715329945087433 ,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.942743897438049,-0.067279078066349,-0.326661109924316 ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.909544348716736,-0.0496344491839409,0.412632405757904 ,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.807208120822906,-0.160388857126236,0.568058490753174 ,-0.568327784538269,-0.132913276553154,0.811996042728424,-0.503679633140564,-0.333046585321426,0.797111511230469 ,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014 ,0.922418177127838,0.0309108179062605,0.384953439235687,0.964133620262146,0.116036243736744,0.238708943128586 ,0.964133620262146,0.116036243736744,0.238708943128586,0.928708553314209,-0.245198935270309,0.278168857097626 ,0.775554299354553,-0.490126490592957,-0.397858679294586,0.892664194107056,0.187903523445129,-0.409686356782913 ,0.937970161437988,0.291288256645203,-0.188050866127014,0.892664194107056,0.187903523445129,-0.409686356782913 ,0.568934082984924,-0.144464790821075,-0.809594869613647,0.713874757289886,0.186937391757965,-0.674860894680023 ,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.364783376455307,-0.883516609668732,0.293822169303894 ,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.681288778781891,-0.15539838373661,0.715329945087433 ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.928847432136536,0.162273854017258,0.333030939102173 ,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.909544348716736,-0.0496344491839409,0.412632405757904 ,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173 ,-0.969194948673248,0.11662120372057,0.21693454682827,-0.560331225395203,-0.197167724370956,0.804458677768707 ,-0.332680583000183,-0.441110253334045,0.833513855934143,0.922418177127838,0.0309108179062605,0.384953439235687 ,0.850938260555267,-0.0678395256400108,0.520866513252258,0.837489545345306,-0.137019574642181,0.528996109962463 ,0.21311217546463,-0.0906343460083008,0.972814798355103,0.136431142687798,-0.358484745025635,0.923512399196625 ,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.0511879175901413,-0.230872392654419,0.971636593341827 ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.482705801725388,0.267842918634415,-0.833819687366486 ,0.244611874222755,0.194429770112038,-0.949927449226379,0.246746584773064,-0.163684040307999,-0.955156326293945 ,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.942743897438049,-0.067279078066349,-0.326661109924316 ,0.383484452962875,-0.102838270366192,-0.917803883552551,0.479293167591095,-0.284916758537292,-0.830120801925659 ,0.837489545345306,-0.137019574642181,0.528996109962463,0.850938260555267,-0.0678395256400108,0.520866513252258 ,0.675129354000092,-0.135668084025383,0.725116908550262,0.652578055858612,-0.0296747293323278,0.757140219211578 ,0.652578055858612,-0.0296747293323278,0.757140219211578,0.675129354000092,-0.135668084025383,0.725116908550262 ,0.451114922761917,-0.252489298582077,0.856004953384399,0.389561533927917,-0.19174836575985,0.900818705558777 ,0.389561533927917,-0.19174836575985,0.900818705558777,0.451114922761917,-0.252489298582077,0.856004953384399 ,0.136431142687798,-0.358484745025635,0.923512399196625,0.21311217546463,-0.0906343460083008,0.972814798355103 ,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.161164477467537,-0.331503093242645,0.929586827754974 ,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.152829229831696,-0.222570538520813,0.962863206863403 ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.456334859132767,-0.263855904340744,0.849787354469299 ,-0.54668140411377,-0.221681281924248,0.807463228702545,0.583520710468292,-0.523498058319092,0.620848894119263 ,0.812033891677856,-0.31945663690567,0.488414198160172,-0.560331225395203,-0.197167724370956,0.804458677768707 ,-0.681288778781891,-0.15539838373661,0.715329945087433,0.828753769397736,-0.00401723757386208,0.559598922729492 ,0.383484452962875,-0.102838270366192,-0.917803883552551,-0.942743897438049,-0.067279078066349,-0.326661109924316 ,-0.934698820114136,0.0468888208270073,-0.352334499359131,0.382079660892487,0.0211679134517908,-0.923886954784393 ,-0.202261313796043,-0.191956117749214,0.960334956645966,0.964133620262146,0.116036243736744,0.238708943128586 ,0.922418177127838,0.0309108179062605,0.384953439235687,-0.332680583000183,-0.441110253334045,0.833513855934143 ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,0.543925285339355,-0.442454695701599,-0.713007152080536 ,0.775554299354553,-0.490126490592957,-0.397858679294586,-0.0923527628183365,-0.948987364768982,0.301486223936081 ,0.201128974556923,-0.41152036190033,0.888930916786194,0.928708553314209,-0.245198935270309,0.278168857097626 ,0.964133620262146,0.116036243736744,0.238708943128586,-0.202261313796043,-0.191956117749214,0.960334956645966 ,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.568934082984924,-0.144464790821075,-0.809594869613647 ,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.691331505775452,-0.716019868850708,-0.0968314781785011 ,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.713874757289886,0.186937391757965,-0.674860894680023 ,0.568934082984924,-0.144464790821075,-0.809594869613647,-0.751028060913086,-0.474978417158127,-0.458641856908798 ,0.828753769397736,-0.00401723757386208,0.559598922729492,-0.681288778781891,-0.15539838373661,0.715329945087433 ,-0.293806701898575,-0.416160970926285,0.860515952110291,0.650361001491547,-0.274446427822113,0.708314716815948 ,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.364783376455307,-0.883516609668732,0.293822169303894 ,-0.801601707935333,-0.550374031066895,-0.23350191116333,0.653040647506714,-0.484619528055191,-0.581963717937469 ,0.583520710468292,-0.523498058319092,0.620848894119263,-0.54668140411377,-0.221681281924248,0.807463228702545 ,-0.560331225395203,-0.197167724370956,0.804458677768707,0.812033891677856,-0.31945663690567,0.488414198160172 ,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.775554299354553,-0.490126490592957,-0.397858679294586 ,0.928708553314209,-0.245198935270309,0.278168857097626,0.201128974556923,-0.41152036190033,0.888930916786194 ,0.650361001491547,-0.274446427822113,0.708314716815948,-0.293806701898575,-0.416160970926285,0.860515952110291 ,-0.364783376455307,-0.883516609668732,0.293822169303894,0.587613701820374,-0.80407178401947,0.0904358923435211 ,-0.563137769699097,0.445758104324341,0.69582724571228,-0.709949254989624,0.60140985250473,0.366439938545227 ,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.717246651649475,0.0185818821191788,0.696571588516235 ,0.937970161437988,0.291288256645203,-0.188050866127014,0.713874757289886,0.186937391757965,-0.674860894680023 ,0.949256718158722,0.266638696193695,-0.166779711842537,-0.568327784538269,-0.132913276553154,0.811996042728424 ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974 ,0.136431142687798,-0.358484745025635,0.923512399196625,0.095845490694046,-0.0575048215687275,0.993733823299408 ,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.953069984912872,0.0484387166798115,0.298849910497665 ,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.697896838188171,0.111968606710434,0.707391738891602 ,0.877985596656799,0.347244620323181,0.32948824763298,0.939527928829193,0.186540976166725,0.287210315465927,0.903742134571075 ,0.0408325865864754,0.426125437021255,-0.320462554693222,0.819696664810181,0.474764227867126,-0.406098872423172 ,0.667459309101105,0.624164879322052,-0.5433070063591,0.448145478963852,0.709917664527893,-0.432919979095459 ,0.554767727851868,0.710501968860626,-0.272089272737503,0.833921611309052,0.480148106813431,-0.807208120822906 ,-0.160388857126236,0.568058490753174,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.714491605758667 ,0.14225697517395,0.685028970241547,-0.568327784538269,-0.132913276553154,0.811996042728424,0.939527928829193 ,0.186540976166725,0.287210315465927,0.967456996440887,0.251362919807434,-0.0290456917136908,0.990444839000702 ,0.137596189975739,-0.00929253362119198,0.543925285339355,-0.442454695701599,-0.713007152080536,0.892664194107056 ,0.187903523445129,-0.409686356782913,0.775554299354553,-0.490126490592957,-0.397858679294586,0.568934082984924 ,-0.144464790821075,-0.809594869613647,0.892664194107056,0.187903523445129,-0.409686356782913,0.543925285339355 ,-0.442454695701599,-0.713007152080536,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.801601707935333 ,-0.550374031066895,-0.23350191116333,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.890334248542786 ,-0.243657946586609,-0.384624123573303,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.991721987724304 ,-0.09873928129673,0.0820856168866158,-0.890334248542786,-0.243657946586609,-0.384624123573303,0.479293167591095 ,-0.284916758537292,-0.830120801925659,0.653040647506714,-0.484619528055191,-0.581963717937469,-0.801601707935333 ,-0.550374031066895,-0.23350191116333,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.807208120822906 ,-0.160388857126236,0.568058490753174,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.949140191078186 ,-0.201623931527138,0.24182790517807,-0.406098872423172,0.667459309101105,0.624164879322052,-0.320462554693222 ,0.819696664810181,0.474764227867126,-0.380683273077011,0.86094468832016,0.337423235177994,-0.709949254989624 ,0.60140985250473,0.366439938545227,-0.563137769699097,0.445758104324341,0.69582724571228,-0.5433070063591,0.448145478963852 ,0.709917664527893,-0.406098872423172,0.667459309101105,0.624164879322052,-0.563137769699097,0.445758104324341 ,0.69582724571228,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.5433070063591,0.448145478963852 ,0.709917664527893,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.538123428821564,-0.0776136741042137 ,0.839285016059875,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165 ,0.793586194515228,-0.432919979095459,0.554767727851868,0.710501968860626,-0.538123428821564,-0.0776136741042137 ,0.839285016059875,0.141524657607079,-0.0639704838395119,0.987865626811981,0.402506083250046,0.589897155761719 ,0.700007259845734,0.0218879040330648,0.608063995838165,0.793586194515228,0.141524657607079,-0.0639704838395119 ,0.987865626811981,0.652125597000122,-0.00108946568798274,0.758110165596008,0.652125597000122,-0.00108946568798274 ,0.758110165596008,0.85029935836792,0.0502043291926384,0.523899376392365,0.551314413547516,0.63163036108017,0.545064687728882 ,0.402506083250046,0.589897155761719,0.700007259845734,0.683504700660706,0.663010776042938,0.305349051952362 ,0.258648008108139,0.909015238285065,0.326791137456894,0.147527933120728,0.908096134662628,0.391914397478104 ,0.551314413547516,0.63163036108017,0.545064687728882,0.331649243831635,0.794523119926453,-0.508666634559631 ,0.522813856601715,0.179267287254334,-0.833384037017822,-0.00497461529448628,0.164960891008377,-0.986287593841553 ,-0.0982039347290993,0.744844913482666,-0.659971237182617,0.522813856601715,0.179267287254334,-0.833384037017822 ,0.331649243831635,0.794523119926453,-0.508666634559631,0.656110465526581,0.732090950012207,-0.183199197053909 ,0.886800289154053,0.175987064838409,-0.427333384752274,0.505583882331848,0.0150260468944907,-0.862646579742432 ,0.459000468254089,0.0631367564201355,-0.886189818382263,-0.00533877313137054,0.0413248650729656,-0.999131500720978 ,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.342631131410599,0.695380508899689,-0.631703972816467 ,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.733689248561859,-0.00598060339689255,-0.679458796977997 ,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.711754858493805,-0.136520877480507,-0.689033389091492 ,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.377974569797516,-0.0538287982344627,-0.924249827861786 ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.459000468254089,0.0631367564201355,-0.886189818382263 ,0.505583882331848,0.0150260468944907,-0.862646579742432,0.853118479251862,0.0149601250886917,-0.521502673625946 ,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.938030481338501,-0.164544627070427,-0.304998099803925 ,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.82076495885849,-0.278661072254181,-0.498691141605377 ,0.459000468254089,0.0631367564201355,-0.886189818382263,0.379301398992538,-0.563074827194214,-0.734218776226044 ,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.00533877313137054,0.0413248650729656,-0.999131500720978 ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.282903432846069,-0.614905774593353,-0.73610907793045 ,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.711754858493805,-0.136520877480507,-0.689033389091492 ,0.379301398992538,-0.563074827194214,-0.734218776226044,0.459000468254089,0.0631367564201355,-0.886189818382263 ,0.805570960044861,0.0887085422873497,-0.585820972919464,0.652326643466949,-0.0732125490903854,-0.754393696784973 ,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.433943778276443,-0.801411330699921,-0.411621987819672 ,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.938030481338501,-0.164544627070427,-0.304998099803925 ,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.846594870090485,-0.529065132141113,0.0580275692045689 ,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.971036195755005,0.0917746424674988,-0.220604136586189 ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.149676010012627,0.966881930828094,-0.206727981567383 ,0.0896634757518768,0.986824929714203,-0.134673669934273,0.331649243831635,0.794523119926453,-0.508666634559631 ,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.267860978841782,0.938322484493256,-0.218635410070419 ,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.632241010665894,0.646320343017578,-0.427248448133469 ,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.246746584773064,-0.163684040307999,-0.955156326293945 ,0.458068341016769,-0.324115723371506,-0.827721178531647,0.379301398992538,-0.563074827194214,-0.734218776226044 ,0.458068341016769,-0.324115723371506,-0.827721178531647,0.0359749346971512,-0.262611299753189,-0.964230835437775 ,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.379301398992538,-0.563074827194214,-0.734218776226044 ,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.383173704147339,-0.262150138616562,-0.885694742202759 ,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.471586525440216,-0.672621071338654,-0.570251703262329 ,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.85034316778183,-0.422914505004883,-0.313145041465759 ,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.0390606410801411,-0.798295676708221,-0.600997745990753 ,0.798132300376892,-0.595748007297516,0.0898283571004868,0.348949402570724,-0.852244853973389,0.389760226011276 ,0.620603084564209,-0.695841789245605,-0.361463725566864,0.885131120681763,0.0417929887771606,-0.463461130857468 ,-0.64503401517868,-0.763977766036987,0.0164064429700375,0.480840384960175,-0.739749372005463,-0.470705211162567 ,0.826135098934174,-0.33500149846077,0.453072637319565,-0.0856366232037544,-0.288858771324158,0.953533947467804 ,0.306766599416733,-0.118459150195122,0.944384276866913,0.15803250670433,0.792331993579865,0.589267194271088 ,-0.390775978565216,0.856176793575287,0.33801680803299,-0.441097885370255,0.233705267310143,0.866495549678802 ,0.395615637302399,-0.602471053600311,-0.693193197250366,0.722060799598694,-0.55972957611084,0.406609207391739 ,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.709003865718842,-0.541708588600159,-0.451514542102814 ,0.712908089160919,0.682124614715576,-0.162689983844757,0.650463998317719,0.740020751953125,-0.17107281088829 ,0.863034009933472,-0.335786014795303,-0.377385854721069,0.958362102508545,-0.256494760513306,0.125509008765221 ,0.282899409532547,-0.764817476272583,-0.578811049461365,0.705481588840485,-0.662966072559357,0.250542849302292 ,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.557026326656342,-0.731577575206757,-0.393085092306137 ,0.733190476894379,0.653582632541656,-0.187780305743217,0.931363761425018,-0.361004918813705,-0.0472966246306896 ,0.680100440979004,-0.471440553665161,-0.56143319606781,0.717039883136749,0.690781950950623,-0.093134693801403 ,0.717039883136749,0.690781950950623,-0.093134693801403,0.680100440979004,-0.471440553665161,-0.56143319606781 ,0.94776064157486,-0.269029140472412,-0.171385690569878,0.702042996883392,0.707515120506287,-0.0809817835688591 ,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.248996630311012,-0.917850255966187,0.309114128351212 ,0.94776064157486,-0.269029140472412,-0.171385690569878,0.680100440979004,-0.471440553665161,-0.56143319606781 ,0.445575773715973,0.0603602342307568,-0.89320707321167,0.305622786283493,0.734605193138123,-0.605763852596283 ,0.647232055664063,0.709673702716827,-0.278305619955063,0.885131120681763,0.0417929887771606,-0.463461130857468 ,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.627128541469574,0.0574355758726597,-0.776795268058777 ,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.671855926513672,0.740681767463684,-0.000314092845655978 ,-0.596384108066559,0.73188179731369,0.329658985137939,-0.918069899082184,-0.187107101082802,0.349483251571655 ,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.615695953369141,0.768994450569153,0.171947792172432 ,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.615695953369141,0.768994450569153,0.171947792172432 ,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.900666117668152,-0.271470487117767,0.339270144701004 ,-0.390775978565216,0.856176793575287,0.33801680803299,-0.748181462287903,0.587628781795502,0.308085918426514 ,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802 ,-0.916947364807129,0.362371772527695,0.167015537619591,-0.893702745437622,0.422671109437943,0.150480940937996 ,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.847357213497162,0.513431549072266,0.135549783706665 ,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.755123674869537,0.652067303657532,0.067797377705574 ,-0.729536950588226,0.676141858100891,0.102995604276657,-0.847357213497162,0.513431549072266,0.135549783706665 ,-0.719103634357452,0.620088398456573,0.313656359910965,-0.661795377731323,0.713703334331512,0.229465648531914 ,-0.382025182247162,0.832321286201477,0.401619255542755,-0.416523069143295,0.747589528560638,0.517318487167358 ,-0.732339918613434,0.57999724149704,0.356765151023865,-0.719103634357452,0.620088398456573,0.313656359910965 ,-0.416523069143295,0.747589528560638,0.517318487167358,-0.404268890619278,0.753554701805115,0.518383979797363 ,0.640394508838654,0.754049122333527,-0.145961552858353,0.709426641464233,0.694044709205627,-0.122539132833481 ,0.676984488964081,0.720325291156769,-0.15107424557209,0.660727977752686,0.731441617012024,-0.168617248535156 ,0.471274465322495,0.860716044902802,0.192531242966652,0.602886617183685,0.797378718852997,-0.0267372038215399 ,0.644031763076782,0.764946699142456,0.00891874358057976,0.508786737918854,0.827319860458374,0.238071173429489 ,0.740322411060333,0.655164897441864,-0.150604203343391,0.632998824119568,0.753636837005615,-0.177042677998543 ,0.660727977752686,0.731441617012024,-0.168617248535156,0.676984488964081,0.720325291156769,-0.15107424557209 ,0.664407253265381,0.746931552886963,0.0256172958761454,0.526539385318756,0.801656424999237,0.283025234937668 ,0.508786737918854,0.827319860458374,0.238071173429489,0.644031763076782,0.764946699142456,0.00891874358057976 ,0.719630718231201,0.67299348115921,-0.170913383364677,0.727223694324493,0.663318991661072,-0.176503792405128 ,0.73427015542984,0.669211447238922,-0.114032231271267,0.774570941925049,0.617026031017303,-0.138991788029671 ,0.834402143955231,0.550802052021027,0.0197512619197369,0.719630718231201,0.67299348115921,-0.170913383364677 ,0.774570941925049,0.617026031017303,-0.138991788029671,0.75202214717865,0.649503469467163,-0.112284608185291 ,0.75202214717865,0.649503469467163,-0.112284608185291,0.774570941925049,0.617026031017303,-0.138991788029671 ,0.789476454257965,0.597960650920868,-0.13845556974411,0.972268581390381,0.233539223670959,0.0123813217505813 ,0.789476454257965,0.597960650920868,-0.13845556974411,0.774570941925049,0.617026031017303,-0.138991788029671 ,0.73427015542984,0.669211447238922,-0.114032231271267,0.749007403850555,0.651603639125824,-0.120002605021,0.704592168331146 ,0.64562314748764,-0.294483780860901,0.789476454257965,0.597960650920868,-0.13845556974411,0.749007403850555 ,0.651603639125824,-0.120002605021,0.678524672985077,0.663206517696381,-0.31585019826889,0.972268581390381,0.233539223670959 ,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.704592168331146,0.64562314748764 ,-0.294483780860901,0.721381485462189,0.602611780166626,-0.341273874044418,0.320632994174957,0.735152721405029 ,-0.597281336784363,0.350197345018387,0.67135888338089,-0.653176128864288,0.721381485462189,0.602611780166626 ,-0.341273874044418,0.704592168331146,0.64562314748764,-0.294483780860901,0.300025343894959,0.704358696937561 ,-0.643322348594666,0.320632994174957,0.735152721405029,-0.597281336784363,0.704592168331146,0.64562314748764 ,-0.294483780860901,0.678524672985077,0.663206517696381,-0.31585019826889,-0.177267998456955,0.365929782390594 ,-0.913603544235229,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.500399649143219,0.708592295646667 ,-0.497490882873535,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.139554515480995,0.707306146621704 ,-0.692995369434357,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.483161300420761,0.708275854587555 ,-0.514684855937958,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.627380669116974,0.542527735233307 ,-0.558620691299438,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.968909800052643,-0.119058966636658 ,-0.216884210705757,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.500399649143219,0.708592295646667 ,-0.497490882873535,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.711231410503387,0.702188730239868 ,-0.0328762196004391,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.947628021240234,0.25655260682106 ,0.190215468406677,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.975513935089111,-0.202585533261299 ,0.085625521838665,-0.970878839492798,0.173829272389412,0.164856299757957,-0.713916778564453,0.653736412525177 ,0.250901401042938,-0.723107695579529,0.620889544487,0.302673906087875,-0.855198562145233,0.434895634651184,0.281959563493729 ,-0.793782532215118,0.557114601135254,0.243993073701859,-0.996930718421936,0.0329507254064083,0.0710170492529869 ,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.655400156974792,-0.538768410682678,0.529319524765015 ,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.738506555557251,0.594659924507141,0.317785561084747 ,-0.767313361167908,0.622622489929199,0.153530210256577,-0.896252572536469,0.421273946762085,0.13877908885479 ,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479 ,-0.767313361167908,0.622622489929199,0.153530210256577,-0.755123674869537,0.652067303657532,0.067797377705574 ,-0.882212042808533,0.466362148523331,0.0648713782429695,0.144893497228622,0.857636988162994,0.493421345949173 ,0.128903344273567,0.870382189750671,0.475203901529312,0.508786737918854,0.827319860458374,0.238071173429489 ,0.526539385318756,0.801656424999237,0.283025234937668,0.130269169807434,0.905642747879028,0.403535813093185 ,0.471274465322495,0.860716044902802,0.192531242966652,0.508786737918854,0.827319860458374,0.238071173429489 ,0.128903344273567,0.870382189750671,0.475203901529312,0.669141590595245,0.742036402225494,-0.0403924956917763 ,0.891577959060669,0.451291143894196,-0.0377500578761101,0.906549096107483,0.409386813640594,-0.10281577706337 ,0.667402267456055,0.744479417800903,-0.0180171187967062,0.71388167142868,0.36040398478508,0.60040146112442,0.911552846431732 ,0.361514419317245,0.195904940366745,0.664968013763428,0.745313882827759,0.0482159033417702,0.57691216468811 ,0.718079447746277,0.389273971319199,0.909856855869293,0.391187816858292,0.138320595026016,0.752071380615234 ,0.531812727451324,0.389312088489532,0.660223960876465,0.688790857791901,0.299451887607574,0.816485822200775 ,0.512709319591522,0.265480846166611,0.752071380615234,0.531812727451324,0.389312088489532,0.646896421909332 ,0.568208158016205,0.508590698242188,0.563141405582428,0.729207217693329,0.388752609491348,0.660223960876465 ,0.688790857791901,0.299451887607574,-0.320559352636337,0.729658544063568,0.604019939899445,0.202111423015594 ,0.805501997470856,0.557061493396759,0.0790780261158943,0.992485880851746,0.0933722630143166,-0.311181366443634 ,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,-0.76466292142868 ,0.188213840126991,0.616332828998566,-0.367227405309677,0.346865743398666,0.863034307956696,-0.320559352636337 ,0.729658544063568,0.604019939899445,-0.520070433616638,0.75630134344101,0.396906822919846,-0.941741049289703 ,0.11614803224802,0.315647661685944,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.522960901260376 ,0.842813611030579,-0.127189248800278,-0.413429826498032,0.428489029407501,0.803413331508636,-0.910823285579681 ,0.270006507635117,0.312245815992355,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.941741049289703 ,0.11614803224802,0.315647661685944,-0.602918326854706,0.515652418136597,0.608762681484222,-0.910823285579681 ,0.270006507635117,0.312245815992355,-0.413429826498032,0.428489029407501,0.803413331508636,-0.229550525546074 ,0.57556563615799,0.784876227378845,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706 ,0.515652418136597,0.608762681484222,-0.187374100089073,0.574305176734924,0.796909391880035,-0.0511879175901413 ,-0.230872392654419,0.971636593341827,-0.602918326854706,0.515652418136597,0.608762681484222,-0.229550525546074 ,0.57556563615799,0.784876227378845,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.187374100089073 ,0.574305176734924,0.796909391880035,0.407288730144501,0.570921003818512,0.712857067584991,0.389561533927917 ,-0.19174836575985,0.900818705558777,0.21311217546463,-0.0906343460083008,0.972814798355103,0.407288730144501 ,0.570921003818512,0.712857067584991,0.402498751878738,0.624280869960785,0.669528305530548,0.646896421909332 ,0.568208158016205,0.508590698242188,0.659538865089417,0.541105449199677,0.521740734577179,0.646896421909332 ,0.568208158016205,0.508590698242188,0.752071380615234,0.531812727451324,0.389312088489532,0.861413061618805 ,0.450139224529266,0.23524908721447,0.659538865089417,0.541105449199677,0.521740734577179,-0.522960901260376 ,0.842813611030579,-0.127189248800278,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.505573391914368 ,0.856702506542206,0.102256529033184,-0.261382013559341,0.943598508834839,-0.203227147459984,0.331241726875305 ,0.767114758491516,0.549375832080841,0.563141405582428,0.729207217693329,0.388752609491348,0.646896421909332 ,0.568208158016205,0.508590698242188,0.402498751878738,0.624280869960785,0.669528305530548,0.699552476406097 ,0.686574220657349,0.198096364736557,0.923372685909271,0.289373397827148,-0.252281337976456,0.800276219844818 ,0.427209228277206,-0.420773357152939,0.633913099765778,0.759061396121979,-0.14825627207756,0.837489545345306 ,-0.137019574642181,0.528996109962463,0.80286830663681,0.57996016740799,0.138016909360886,0.69953316450119,0.693202435970306 ,-0.173562079668045,0.244611874222755,0.194429770112038,-0.949927449226379,0.421845316886902,0.35173287987709 ,-0.835661768913269,0.272203177213669,0.658502519130707,-0.701626539230347,0.458068341016769,-0.324115723371506 ,-0.827721178531647,0.246746584773064,-0.163684040307999,-0.955156326293945,0.244611874222755,0.194429770112038 ,-0.949927449226379,0.397901266813278,0.642865896224976,-0.65452116727829,0.421845316886902,0.35173287987709 ,-0.835661768913269,0.244611874222755,0.194429770112038,-0.949927449226379,0.69953316450119,0.693202435970306 ,-0.173562079668045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.398143172264099,0.565787076950073 ,-0.722057461738586,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.642501175403595,-0.273710697889328 ,-0.715733766555786,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613 ,-0.569830656051636,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.432219624519348,0.0896197631955147 ,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.605723857879639,0.555330216884613 ,-0.569830656051636,-0.859436213970184,0.509185254573822,0.04582304880023,-0.886820614337921,-0.356388121843338 ,-0.294171214103699,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.633863687515259,0.397778928279877 ,-0.663316428661346,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.85034316778183,-0.422914505004883 ,-0.313145041465759,-0.65424633026123,0.624168395996094,0.42705449461937,-0.93314254283905,0.297381490468979 ,0.20201313495636,-0.970878839492798,0.173829272389412,0.164856299757957,-0.599660336971283,0.629722774028778 ,0.493818551301956,0.393562316894531,0.580699145793915,-0.71266907453537,0.305637389421463,0.797388851642609 ,-0.520342946052551,0.633913099765778,0.759061396121979,-0.14825627207756,0.800276219844818,0.427209228277206 ,-0.420773357152939,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.627528488636017,0.574077665805817 ,-0.525968492031097,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.723603487014771,0.683223187923431 ,0.098000094294548,-0.367227405309677,0.346865743398666,0.863034307956696,0.270604372024536,0.441341161727905 ,0.855564832687378,0.202111423015594,0.805501997470856,0.557061493396759,-0.320559352636337,0.729658544063568 ,0.604019939899445,0.305637389421463,0.797388851642609,-0.520342946052551,0.393562316894531,0.580699145793915 ,-0.71266907453537,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.13304828107357,0.622710764408112 ,-0.771057367324829,0.929460346698761,0.351613759994507,-0.111674785614014,0.861413061618805,0.450139224529266 ,0.23524908721447,0.752071380615234,0.531812727451324,0.389312088489532,0.909856855869293,0.391187816858292,0.138320595026016 ,0.644031763076782,0.764946699142456,0.00891874358057976,0.660727977752686,0.731441617012024,-0.168617248535156 ,0.632998824119568,0.753636837005615,-0.177042677998543,0.664407253265381,0.746931552886963,0.0256172958761454 ,0.686884999275208,0.723168194293976,-0.0722270235419273,0.664968013763428,0.745313882827759,0.0482159033417702 ,0.911552846431732,0.361514419317245,0.195904940366745,0.905105113983154,0.409709811210632,-0.113677680492401 ,0.664968013763428,0.745313882827759,0.0482159033417702,0.686884999275208,0.723168194293976,-0.0722270235419273 ,0.559431314468384,0.828812599182129,0.0103096608072519,0.392663985490799,0.918741226196289,-0.0415881127119064 ,-0.311181366443634,0.925608515739441,0.215441450476646,0.0790780261158943,0.992485880851746,0.0933722630143166 ,0.127702310681343,0.976085126399994,0.17592579126358,-0.227211818099022,0.921236872673035,0.315748959779739 ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739 ,-0.505573391914368,0.856702506542206,0.102256529033184,-0.780855476856232,0.547496676445007,0.300852298736572 ,-0.826885998249054,0.483063906431198,0.287938833236694,-0.796578586101532,0.576386690139771,0.182320937514305 ,-0.719103634357452,0.620088398456573,0.313656359910965,-0.732339918613434,0.57999724149704,0.356765151023865 ,-0.796578586101532,0.576386690139771,0.182320937514305,-0.703840732574463,0.696332275867462,0.140461906790733 ,-0.661795377731323,0.713703334331512,0.229465648531914,-0.719103634357452,0.620088398456573,0.313656359910965 ,-0.819103717803955,0.554178774356842,0.148171976208687,-0.939882695674896,-0.341330021619797,0.0106942849233747 ,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.748181462287903,0.587628781795502,0.308085918426514 ,0.384443372488022,-0.766655147075653,-0.514240384101868,0.666895627975464,-0.56043928861618,0.491078466176987 ,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.685397565364838,-0.694672048091888,-0.21831376850605 ,0.602886617183685,0.797378718852997,-0.0267372038215399,0.640394508838654,0.754049122333527,-0.145961552858353 ,0.660727977752686,0.731441617012024,-0.168617248535156,0.644031763076782,0.764946699142456,0.00891874358057976 ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.993199586868286,-4.69008500658674e-006,0.116424031555653 ,-0.807652175426483,0.443565607070923,0.388519644737244,-0.910823285579681,0.270006507635117,0.312245815992355 ,-0.807652175426483,0.443565607070923,0.388519644737244,-0.993199586868286,-4.69008500658674e-006,0.116424031555653 ,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.762878954410553,0.502556443214417,0.40675875544548 ,0.305622786283493,0.734605193138123,-0.605763852596283,0.445575773715973,0.0603602342307568,-0.89320707321167 ,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.1213503703475,0.714234888553619,-0.689305901527405 ,0.906213641166687,0.328242212533951,-0.266521811485291,0.957429826259613,0.286321878433228,0.0367136411368847 ,0.909856855869293,0.391187816858292,0.138320595026016,0.995014905929565,0.0992267951369286,-0.00996995531022549 ,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.828168988227844,0.353571265935898,-0.434883326292038 ,0.923372685909271,0.289373397827148,-0.252281337976456,0.936574637889862,0.00382779608480632,-0.350447237491608 ,0.426684230566025,0.0072528044693172,-0.904371619224548,0.430813550949097,0.499041706323624,-0.751902282238007 ,0.828168988227844,0.353571265935898,-0.434883326292038,0.842867076396942,-0.00614791456609964,-0.538086712360382 ,0.430813550949097,0.499041706323624,-0.751902282238007,0.426684230566025,0.0072528044693172,-0.904371619224548 ,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.239434540271759,0.547067582607269,-0.80211478471756 ,-0.896252572536469,0.421273946762085,0.13877908885479,-0.882212042808533,0.466362148523331,0.0648713782429695 ,-0.893702745437622,0.422671109437943,0.150480940937996,-0.891313374042511,0.424901962280273,0.158173263072968 ,-0.797426640987396,0.177673250436783,0.576665341854095,-0.878546297550201,0.378490209579468,0.291378676891327 ,-0.896252572536469,0.421273946762085,0.13877908885479,-0.891313374042511,0.424901962280273,0.158173263072968 ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.793782532215118,0.557114601135254,0.243993073701859 ,-0.855198562145233,0.434895634651184,0.281959563493729,-0.908547103404999,0.339473843574524,0.243515312671661 ,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.500399649143219,0.708592295646667,-0.497490882873535 ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.809561967849731,0.578427612781525,-0.10015495121479 ,0.647232055664063,0.709673702716827,-0.278305619955063,0.678524672985077,0.663206517696381,-0.31585019826889 ,0.749007403850555,0.651603639125824,-0.120002605021,0.702042996883392,0.707515120506287,-0.0809817835688591 ,0.73427015542984,0.669211447238922,-0.114032231271267,0.717039883136749,0.690781950950623,-0.093134693801403 ,0.702042996883392,0.707515120506287,-0.0809817835688591,0.749007403850555,0.651603639125824,-0.120002605021 ,0.727223694324493,0.663318991661072,-0.176503792405128,0.733190476894379,0.653582632541656,-0.187780305743217 ,0.717039883136749,0.690781950950623,-0.093134693801403,0.73427015542984,0.669211447238922,-0.114032231271267 ,0.709426641464233,0.694044709205627,-0.122539132833481,0.640394508838654,0.754049122333527,-0.145961552858353 ,0.650463998317719,0.740020751953125,-0.17107281088829,0.712908089160919,0.682124614715576,-0.162689983844757 ,0.640394508838654,0.754049122333527,-0.145961552858353,0.602886617183685,0.797378718852997,-0.0267372038215399 ,0.752064108848572,0.658552646636963,-0.0266083907335997,0.650463998317719,0.740020751953125,-0.17107281088829 ,0.602886617183685,0.797378718852997,-0.0267372038215399,0.471274465322495,0.860716044902802,0.192531242966652 ,0.599858105182648,0.75833523273468,0.255142837762833,0.752064108848572,0.658552646636963,-0.0266083907335997 ,0.471274465322495,0.860716044902802,0.192531242966652,0.130269169807434,0.905642747879028,0.403535813093185 ,0.15803250670433,0.792331993579865,0.589267194271088,0.599858105182648,0.75833523273468,0.255142837762833,-0.661795377731323 ,0.713703334331512,0.229465648531914,-0.748181462287903,0.587628781795502,0.308085918426514,-0.390775978565216 ,0.856176793575287,0.33801680803299,-0.382025182247162,0.832321286201477,0.401619255542755,-0.703840732574463 ,0.696332275867462,0.140461906790733,-0.819103717803955,0.554178774356842,0.148171976208687,-0.748181462287903 ,0.587628781795502,0.308085918426514,-0.661795377731323,0.713703334331512,0.229465648531914,-0.755123674869537 ,0.652067303657532,0.067797377705574,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.658155262470245 ,0.750174641609192,0.0637935549020767,-0.729536950588226,0.676141858100891,0.102995604276657,-0.755123674869537 ,0.652067303657532,0.067797377705574,-0.767313361167908,0.622622489929199,0.153530210256577,-0.615695953369141 ,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.738506555557251 ,0.594659924507141,0.317785561084747,-0.596384108066559,0.73188179731369,0.329658985137939,-0.615695953369141 ,0.768994450569153,0.171947792172432,-0.767313361167908,0.622622489929199,0.153530210256577,-0.613772094249725 ,0.718873798847198,0.326349943876266,-0.723107695579529,0.620889544487,0.302673906087875,-0.713916778564453,0.653736412525177 ,0.250901401042938,-0.63234806060791,0.720907807350159,0.283598214387894,-0.483161300420761,0.708275854587555 ,-0.514684855937958,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.671855926513672,0.740681767463684 ,-0.000314092845655978,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.143811345100403,0.67733633518219 ,-0.721480309963226,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.462542802095413,0.739023745059967 ,-0.48979389667511,-0.483161300420761,0.708275854587555,-0.514684855937958,0.305622786283493,0.734605193138123 ,-0.605763852596283,0.300025343894959,0.704358696937561,-0.643322348594666,0.678524672985077,0.663206517696381 ,-0.31585019826889,0.647232055664063,0.709673702716827,-0.278305619955063,-0.732339918613434,0.57999724149704 ,0.356765151023865,-0.76466292142868,0.188213840126991,0.616332828998566,-0.854411065578461,0.0699175223708153 ,0.514872133731842,-0.826885998249054,0.483063906431198,0.287938833236694,-0.404268890619278,0.753554701805115 ,0.518383979797363,-0.367227405309677,0.346865743398666,0.863034307956696,-0.76466292142868,0.188213840126991 ,0.616332828998566,-0.732339918613434,0.57999724149704,0.356765151023865,0.144893497228622,0.857636988162994 ,0.493421345949173,0.270604372024536,0.441341161727905,0.855564832687378,-0.367227405309677,0.346865743398666 ,0.863034307956696,-0.404268890619278,0.753554701805115,0.518383979797363,0.526539385318756,0.801656424999237 ,0.283025234937668,0.664407253265381,0.746931552886963,0.0256172958761454,0.911552846431732,0.361514419317245 ,0.195904940366745,0.71388167142868,0.36040398478508,0.60040146112442,0.664407253265381,0.746931552886963,0.0256172958761454 ,0.632998824119568,0.753636837005615,-0.177042677998543,0.905105113983154,0.409709811210632,-0.113677680492401 ,0.911552846431732,0.361514419317245,0.195904940366745,0.834402143955231,0.550802052021027,0.0197512619197369 ,0.75202214717865,0.649503469467163,-0.112284608185291,0.939418137073517,0.146130084991455,-0.310063809156418 ,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.721381485462189,0.602611780166626,-0.341273874044418 ,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.936574637889862,0.00382779608480632,-0.350447237491608 ,0.972268581390381,0.233539223670959,0.0123813217505813,0.350197345018387,0.67135888338089,-0.653176128864288 ,0.426684230566025,0.0072528044693172,-0.904371619224548,0.842867076396942,-0.00614791456609964,-0.538086712360382 ,0.721381485462189,0.602611780166626,-0.341273874044418,0.426684230566025,0.0072528044693172,-0.904371619224548 ,0.350197345018387,0.67135888338089,-0.653176128864288,-0.177267998456955,0.365929782390594,-0.913603544235229 ,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.674115240573883,-0.0423770807683468,-0.73740953207016 ,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.809561967849731,0.578427612781525,-0.10015495121479 ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.870848000049591,0.464649707078934,0.160388261079788 ,-0.908547103404999,0.339473843574524,0.243515312671661,-0.975513935089111,-0.202585533261299,0.085625521838665 ,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.797426640987396,0.177673250436783,0.576665341854095 ,-0.891313374042511,0.424901962280273,0.158173263072968,-0.991389513015747,-0.125117510557175,0.038632795214653 ,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.893702745437622,0.422671109437943,0.150480940937996 ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.991389513015747,-0.125117510557175,0.038632795214653 ,-0.891313374042511,0.424901962280273,0.158173263072968,-0.413176447153091,-0.602903425693512,0.682490050792694 ,-0.712531268596649,-0.546411395072937,-0.440152049064636,0.43010625243187,-0.644480228424072,-0.632181823253632 ,0.695957362651825,-0.547607183456421,0.464510202407837,0.360958188772202,-0.844728171825409,-0.395149946212769 ,0.668817698955536,-0.562513530254364,0.486067235469818,-0.450368136167526,-0.655528962612152,0.606176793575287 ,-0.595698416233063,-0.718034863471985,-0.359957367181778,0.350197345018387,0.67135888338089,-0.653176128864288 ,0.320632994174957,0.735152721405029,-0.597281336784363,-0.139554515480995,0.707306146621704,-0.692995369434357 ,-0.177267998456955,0.365929782390594,-0.913603544235229,0.320632994174957,0.735152721405029,-0.597281336784363 ,0.300025343894959,0.704358696937561,-0.643322348594666,-0.143811345100403,0.67733633518219,-0.721480309963226 ,-0.139554515480995,0.707306146621704,-0.692995369434357,0.144893497228622,0.857636988162994,0.493421345949173 ,-0.404268890619278,0.753554701805115,0.518383979797363,-0.416523069143295,0.747589528560638,0.517318487167358 ,0.128903344273567,0.870382189750671,0.475203901529312,0.128903344273567,0.870382189750671,0.475203901529312 ,-0.416523069143295,0.747589528560638,0.517318487167358,-0.382025182247162,0.832321286201477,0.401619255542755 ,0.130269169807434,0.905642747879028,0.403535813093185,0.57691216468811,0.718079447746277,0.389273971319199,0.392663985490799 ,0.918741226196289,-0.0415881127119064,0.0790780261158943,0.992485880851746,0.0933722630143166,0.202111423015594 ,0.805501997470856,0.557061493396759,-0.187374100089073,0.574305176734924,0.796909391880035,-0.00418555224314332 ,0.628182470798492,0.77805483341217,0.402498751878738,0.624280869960785,0.669528305530548,0.407288730144501,0.570921003818512 ,0.712857067584991,0.331241726875305,0.767114758491516,0.549375832080841,0.402498751878738,0.624280869960785 ,0.669528305530548,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.0206129420548677,0.755090236663818 ,0.655296742916107,0.272203177213669,0.658502519130707,-0.701626539230347,0.421845316886902,0.35173287987709 ,-0.835661768913269,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.122567981481552,0.664539813995361 ,-0.737132251262665,0.421845316886902,0.35173287987709,-0.835661768913269,0.397901266813278,0.642865896224976 ,-0.65452116727829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.180025935173035,0.229685723781586 ,-0.956470131874084,0.71388167142868,0.36040398478508,0.60040146112442,0.57691216468811,0.718079447746277,0.389273971319199 ,0.202111423015594,0.805501997470856,0.557061493396759,0.270604372024536,0.441341161727905,0.855564832687378 ,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.627528488636017,0.574077665805817,-0.525968492031097 ,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.178336516022682,0.738517105579376,-0.650221943855286 ,0.127702310681343,0.976085126399994,0.17592579126358,0.0790780261158943,0.992485880851746,0.0933722630143166 ,0.392663985490799,0.918741226196289,-0.0415881127119064,0.410511314868927,0.907221972942352,0.0918079540133476 ,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.717249631881714,-0.625881135463715,-0.306309938430786 ,0.391103774309158,-0.641535997390747,-0.659901022911072,0.705251514911652,-0.583878755569458,0.402126759290695 ,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.0525061003863811,0.0318809561431408,-0.998111546039581 ,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.627380669116974,0.542527735233307,-0.558620691299438 ,0.15803250670433,0.792331993579865,0.589267194271088,0.130269169807434,0.905642747879028,0.403535813093185,-0.382025182247162 ,0.832321286201477,0.401619255542755,-0.390775978565216,0.856176793575287,0.33801680803299,0.300025343894959 ,0.704358696937561,-0.643322348594666,0.305622786283493,0.734605193138123,-0.605763852596283,-0.1213503703475 ,0.714234888553619,-0.689305901527405,-0.143811345100403,0.67733633518219,-0.721480309963226,0.144893497228622 ,0.857636988162994,0.493421345949173,0.526539385318756,0.801656424999237,0.283025234937668,0.71388167142868,0.36040398478508 ,0.60040146112442,0.270604372024536,0.441341161727905,0.855564832687378,-0.177267998456955,0.365929782390594 ,-0.913603544235229,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.674115240573883,-0.0423770807683468 ,-0.73740953207016,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.198126822710037,0.0765142217278481 ,-0.977185368537903,-0.147367119789124,-0.401798576116562,-0.903792500495911,-0.635097622871399,-0.770463764667511 ,-0.0551051236689091,-0.648241400718689,-0.506932020187378,-0.568157553672791,0.11251799762249,-0.874383747577667 ,-0.472009360790253,0.323624908924103,-0.91464102268219,0.242278248071671,-0.248996630311012,-0.917850255966187 ,0.309114128351212,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.671025335788727,-0.589844524860382 ,-0.449230968952179,0.459699690341949,-0.614600598812103,-0.641047835350037,0.596454858779907,-0.699761033058167 ,0.393161594867706,-0.412575572729111,-0.667341589927673,0.620029509067535,0.773792564868927,-0.604486048221588 ,-0.189318999648094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.724370777606964,-0.668023824691772 ,0.170385435223579,-0.195960268378258,-0.58412891626358,-0.787650287151337,0.723087668418884,-0.507770240306854 ,-0.468309193849564,0.581261336803436,-0.682449996471405,0.443167299032211,-0.437470376491547,-0.700090348720551 ,0.564352035522461,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.326672613620758,-0.732156813144684 ,0.597688376903534,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.147367119789124,-0.401798576116562 ,-0.903792500495911,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.964107573032379,-0.248898640275002 ,-0.0924450159072876,0.259815812110901,-0.928046464920044,-0.266881018877029,0.459699690341949,-0.614600598812103 ,-0.641047835350037,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.259815812110901,-0.928046464920044 ,-0.266881018877029,0.303018242120743,-0.938679337501526,0.164502277970314,0.596454858779907,-0.699761033058167 ,0.393161594867706,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.412575572729111,-0.667341589927673 ,0.620029509067535,0.596454858779907,-0.699761033058167,0.393161594867706,0.303018242120743,-0.938679337501526 ,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.918069899082184,-0.187107101082802 ,0.349483251571655,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.671025335788727,-0.589844524860382 ,-0.449230968952179,-0.412575572729111,-0.667341589927673,0.620029509067535,0.0517410226166248,-0.448791861534119 ,-0.892137169837952,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.37071630358696,-0.925935029983521 ,-0.0722067281603813,0.768725872039795,-0.625621736049652,-0.132883325219154,0.311763882637024,-0.736566185951233 ,0.600227952003479,0.414378970861435,-0.480131238698959,0.773152053356171,0.768725872039795,-0.625621736049652 ,-0.132883325219154,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.739399552345276,-0.3774254322052 ,0.557528793811798,-0.47402635216713,-0.576445937156677,0.665589272975922,0.414378970861435,-0.480131238698959 ,0.773152053356171,0.311763882637024,-0.736566185951233,0.600227952003479,-0.627128541469574,0.0574355758726597 ,-0.776795268058777,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.887380957603455,-0.451603919267654 ,-0.09278454631567,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.628591358661652,-0.444956004619598 ,-0.637876987457275,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.0855747610330582,-0.285937398672104 ,-0.954419612884521,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.773792564868927,-0.604486048221588 ,-0.189318999648094,0.542883396148682,-0.82672655582428,-0.147651195526123,0.0959865897893906,-0.91358608007431 ,0.395154505968094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.518468260765076,-0.848432958126068 ,0.106546267867088,-0.724370777606964,-0.668023824691772,0.170385435223579,0.180837735533714,-0.611773073673248 ,0.770085334777832,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.106877580285072,-0.900658130645752 ,-0.421179503202438,-0.195960268378258,-0.58412891626358,-0.787650287151337,-0.724370777606964,-0.668023824691772 ,0.170385435223579,-0.518468260765076,-0.848432958126068,0.106546267867088,0.542883396148682,-0.82672655582428 ,-0.147651195526123,0.773792564868927,-0.604486048221588,-0.189318999648094,-0.195960268378258,-0.58412891626358 ,-0.787650287151337,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.349896788597107,-0.784230768680573 ,-0.512400567531586,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.259535163640976,-0.932749211788177 ,0.250240743160248,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.723087668418884,-0.507770240306854 ,-0.468309193849564,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.149650141596794,-0.977229058742523 ,-0.150426745414734,0.464242339134216,-0.872838377952576,-0.150440022349358,0.581261336803436,-0.682449996471405 ,0.443167299032211,0.723087668418884,-0.507770240306854,-0.468309193849564,0.464242339134216,-0.872838377952576 ,-0.150440022349358,0.323624908924103,-0.91464102268219,0.242278248071671,-0.437470376491547,-0.700090348720551 ,0.564352035522461,0.581261336803436,-0.682449996471405,0.443167299032211,0.323624908924103,-0.91464102268219 ,0.242278248071671,-0.259535163640976,-0.932749211788177,0.250240743160248,0.810118317604065,-0.284595668315887 ,-0.51255601644516,0.94776064157486,-0.269029140472412,-0.171385690569878,0.631753981113434,-0.695992708206177 ,0.341293185949326,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.248996630311012,-0.917850255966187 ,0.309114128351212,-0.438560724258423,-0.682490348815918,0.584697723388672,0.631753981113434,-0.695992708206177 ,0.341293185949326,0.94776064157486,-0.269029140472412,-0.171385690569878,-0.507440745830536,-0.861680686473846 ,0.00320725026540458,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.438560724258423,-0.682490348815918 ,0.584697723388672,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.0872491747140884,-0.891694486141205 ,-0.444149196147919,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.663442015647888,-0.730678915977478 ,-0.161099418997765,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.810118317604065,-0.284595668315887 ,-0.51255601644516,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.165543153882027,-0.540198087692261 ,-0.825094819068909,-0.0872491747140884,-0.891694486141205,-0.444149196147919,0.445575773715973,0.0603602342307568 ,-0.89320707321167,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.147367119789124,-0.401798576116562 ,-0.903792500495911,-0.198126822710037,0.0765142217278481,-0.977185368537903,0.308205276727676,-0.725507915019989 ,-0.615343689918518,0.445575773715973,0.0603602342307568,-0.89320707321167,0.885131120681763,0.0417929887771606 ,-0.463461130857468,0.620603084564209,-0.695841789245605,-0.361463725566864,0.259815812110901,-0.928046464920044 ,-0.266881018877029,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.739399552345276,-0.3774254322052 ,0.557528793811798,0.311763882637024,-0.736566185951233,0.600227952003479,0.259815812110901,-0.928046464920044 ,-0.266881018877029,0.311763882637024,-0.736566185951233,0.600227952003479,0.37071630358696,-0.925935029983521 ,-0.0722067281603813,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.518468260765076,-0.848432958126068 ,0.106546267867088,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.518468260765076,-0.848432958126068 ,0.106546267867088,0.0959865897893906,-0.91358608007431,0.395154505968094,0.464242339134216,-0.872838377952576 ,-0.150440022349358,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.0959865897893906,-0.91358608007431 ,0.395154505968094,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.464242339134216,-0.872838377952576 ,-0.150440022349358,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.262460768222809,-0.84521484375 ,0.465538620948792,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.663442015647888,-0.730678915977478 ,-0.161099418997765,0.551329076290131,-0.7074014544487,-0.442288815975189,0.631753981113434,-0.695992708206177 ,0.341293185949326,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.326672613620758,-0.732156813144684 ,0.597688376903534,-0.262460768222809,-0.84521484375,0.465538620948792,-0.648241400718689,-0.506932020187378 ,-0.568157553672791,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.262460768222809,-0.84521484375 ,0.465538620948792,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.3234041929245,-0.738465428352356 ,0.591674447059631,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.326672613620758,-0.732156813144684 ,0.597688376903534,0.308205276727676,-0.725507915019989,-0.615343689918518,0.620603084564209,-0.695841789245605 ,-0.361463725566864,-0.3234041929245,-0.738465428352356,0.591674447059631,0.542883396148682,-0.82672655582428 ,-0.147651195526123,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.262460768222809,-0.84521484375 ,0.465538620948792,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.0872491747140884,-0.891694486141205 ,-0.444149196147919,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.3234041929245,-0.738465428352356 ,0.591674447059631,0.348949402570724,-0.852244853973389,0.389760226011276,0.798132300376892,-0.595748007297516 ,0.0898283571004868,-0.333872824907303,-0.734721601009369,0.590519309043884,0.798132300376892,-0.595748007297516 ,0.0898283571004868,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.0872491747140884,-0.891694486141205 ,-0.444149196147919,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.598684787750244,-0.729470372200012 ,-0.330831557512283,0.478905141353607,-0.688271880149841,-0.544914424419403,0.691426575183868,-0.534520328044891 ,0.486021935939789,-0.29621621966362,-0.72027575969696,0.627262949943542,-0.593355655670166,-0.709652066230774 ,-0.379898726940155,0.420935273170471,-0.595206916332245,-0.68450140953064,0.750927150249481,-0.519762933254242 ,0.407375574111938,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.522674918174744,-0.84270977973938 ,-0.129039376974106,0.338333457708359,-0.796955585479736,-0.500392079353333,0.695649981498718,-0.635026633739471 ,0.335875421762466,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.261420041322708,-0.954043209552765 ,0.146496221423149,0.181094169616699,-0.00969368312507868,0.983417987823486,0.306766599416733,-0.118459150195122 ,0.944384276866913,0.306935548782349,-0.919691801071167,0.244862332940102,0.201402872800827,-0.92625367641449 ,-0.318576484918594,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.191650345921516,-0.911473035812378 ,0.363987594842911,0.400767505168915,-0.84773463010788,0.347464233636856,0.207801967859268,-0.930255472660065 ,-0.302395612001419,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.118260890245438,-0.832547545433044 ,0.541182935237885,0.362296313047409,-0.902348458766937,0.233470931649208,0.128298655152321,-0.92551976442337 ,-0.356304168701172,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.23048010468483,-0.946770489215851 ,0.224732384085655,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.192425131797791,-0.974552154541016 ,0.114980764687061,0.706917345523834,-0.10402026027441,0.699605345726013,0.814850926399231,-0.0293116569519043 ,0.57892906665802,0.395999073982239,-0.883323311805725,0.250847846269608,-0.148850679397583,-0.924228370189667 ,0.351632446050644,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.211911484599113,-0.951958835124969 ,-0.221060931682587,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.312811404466629,-0.918802440166473 ,-0.240730464458466,-0.18037211894989,-0.916134774684906,0.357998490333557,0.339713275432587,-0.937209665775299 ,0.0789491534233093,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.956566870212555,-0.244721978902817 ,-0.158401101827621,-0.900666117668152,-0.271470487117767,0.339270144701004,0.362296313047409,-0.902348458766937 ,0.233470931649208,-0.191650345921516,-0.911473035812378,0.363987594842911,0.395999073982239,-0.883323311805725 ,0.250847846269608,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.262365102767944,-0.963967621326447 ,-0.0439423173666,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.23048010468483,-0.946770489215851 ,0.224732384085655,0.339713275432587,-0.937209665775299,0.0789491534233093,0.200983673334122,-0.912257730960846 ,-0.356919288635254,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.812849164009094,-0.351107835769653 ,0.46475750207901,-0.665187239646912,-0.279087424278259,0.692557692527771,0.400767505168915,-0.84773463010788 ,0.347464233636856,0.295632928609848,-0.949930250644684,-0.101162008941174,0.339781612157822,-0.868737816810608 ,0.360337436199188,-0.192425131797791,-0.974552154541016,0.114980764687061,0.958362102508545,-0.256494760513306 ,0.125509008765221,0.863034009933472,-0.335786014795303,-0.377385854721069,-0.314595848321915,-0.93869549036026 ,-0.140997022390366,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.18037211894989,-0.916134774684906 ,0.357998490333557,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.794416069984436,-0.305554151535034 ,-0.524918794631958,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.262365102767944,-0.963967621326447 ,-0.0439423173666,0.306935548782349,-0.919691801071167,0.244862332940102,-0.191650345921516,-0.911473035812378 ,0.363987594842911,0.306935548782349,-0.919691801071167,0.244862332940102,-0.262365102767944,-0.963967621326447 ,-0.0439423173666,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.192425131797791,-0.974552154541016 ,0.114980764687061,-0.124663934111595,-0.874086141586304,0.469502240419388,0.912856459617615,-0.241107016801834 ,0.329485177993774,0.970349192619324,-0.239411205053329,0.0332370884716511,-0.0856366232037544,-0.288858771324158 ,0.953533947467804,0.826135098934174,-0.33500149846077,0.453072637319565,0.814850926399231,-0.0293116569519043 ,0.57892906665802,0.181094169616699,-0.00969368312507868,0.983417987823486,0.295632928609848,-0.949930250644684 ,-0.101162008941174,0.814850926399231,-0.0293116569519043,0.57892906665802,0.826135098934174,-0.33500149846077 ,0.453072637319565,0.480840384960175,-0.739749372005463,-0.470705211162567,0.480840384960175,-0.739749372005463 ,-0.470705211162567,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.261420041322708,-0.954043209552765 ,0.146496221423149,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765 ,0.146496221423149,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.0856366232037544,-0.288858771324158 ,0.953533947467804,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.191650345921516,-0.911473035812378 ,0.363987594842911,-0.415498435497284,-0.625033140182495,0.660828769207001,0.722060799598694,-0.55972957611084 ,0.406609207391739,0.395999073982239,-0.883323311805725,0.250847846269608,0.395615637302399,-0.602471053600311 ,-0.693193197250366,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395999073982239,-0.883323311805725 ,0.250847846269608,0.722060799598694,-0.55972957611084,0.406609207391739,-0.389462172985077,-0.886311650276184 ,-0.250541120767593,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395615637302399,-0.602471053600311 ,-0.693193197250366,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.389462172985077,-0.886311650276184 ,-0.250541120767593,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.415498435497284,-0.625033140182495 ,0.660828769207001,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.23048010468483,-0.946770489215851 ,0.224732384085655,-0.466174095869064,-0.668627381324768,0.579326450824738,0.705481588840485,-0.662966072559357 ,0.250542849302292,0.339713275432587,-0.937209665775299,0.0789491534233093,0.282899409532547,-0.764817476272583 ,-0.578811049461365,0.11251799762249,-0.874383747577667,-0.472009360790253,0.339713275432587,-0.937209665775299 ,0.0789491534233093,0.705481588840485,-0.662966072559357,0.250542849302292,-0.334644585847855,-0.867584347724915 ,-0.367845624685287,0.11251799762249,-0.874383747577667,-0.472009360790253,0.282899409532547,-0.764817476272583 ,-0.578811049461365,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.334644585847855,-0.867584347724915 ,-0.367845624685287,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.466174095869064,-0.668627381324768 ,0.579326450824738,-0.23048010468483,-0.946770489215851,0.224732384085655,0.384443372488022,-0.766655147075653 ,-0.514240384101868,0.211911484599113,-0.951958835124969,-0.221060931682587,0.339781612157822,-0.868737816810608 ,0.360337436199188,0.666895627975464,-0.56043928861618,0.491078466176987,-0.685397565364838,-0.694672048091888 ,-0.21831376850605,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.211911484599113,-0.951958835124969 ,-0.221060931682587,0.384443372488022,-0.766655147075653,-0.514240384101868,-0.317059487104416,-0.547120869159698 ,0.774681866168976,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.262365102767944,-0.963967621326447 ,-0.0439423173666,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.317059487104416,-0.547120869159698 ,0.774681866168976,0.666895627975464,-0.56043928861618,0.491078466176987,0.339781612157822,-0.868737816810608 ,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.610171139240265,-0.773055195808411 ,0.173426955938339,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.441097885370255,0.233705267310143 ,0.866495549678802,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143 ,0.866495549678802,-0.343847513198853,-0.196072369813919,0.918327033519745,0.545981824398041,-0.584509074687958 ,0.600210785865784,0.306766599416733,-0.118459150195122,0.944384276866913,0.207811132073402,-0.962575078010559 ,-0.173964589834213,0.306766599416733,-0.118459150195122,0.944384276866913,0.545981824398041,-0.584509074687958 ,0.600210785865784,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.610171139240265,-0.773055195808411 ,0.173426955938339,-0.812849164009094,-0.351107835769653,0.46475750207901,0.207811132073402,-0.962575078010559 ,-0.173964589834213,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.712531268596649,-0.546411395072937 ,-0.440152049064636,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.810173809528351,-0.314327657222748 ,0.494789302349091,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748 ,0.494789302349091,-0.413176447153091,-0.602903425693512,0.682490050792694,0.695957362651825,-0.547607183456421 ,0.464510202407837,0.306935548782349,-0.919691801071167,0.244862332940102,0.306935548782349,-0.919691801071167 ,0.244862332940102,0.695957362651825,-0.547607183456421,0.464510202407837,0.43010625243187,-0.644480228424072 ,-0.632181823253632,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.712531268596649,-0.546411395072937 ,-0.440152049064636,-0.956566870212555,-0.244721978902817,-0.158401101827621,0.201402872800827,-0.92625367641449 ,-0.318576484918594,0.43010625243187,-0.644480228424072,-0.632181823253632,0.668817698955536,-0.562513530254364 ,0.486067235469818,0.362296313047409,-0.902348458766937,0.233470931649208,-0.900666117668152,-0.271470487117767 ,0.339270144701004,-0.450368136167526,-0.655528962612152,0.606176793575287,0.128298655152321,-0.92551976442337 ,-0.356304168701172,0.362296313047409,-0.902348458766937,0.233470931649208,0.668817698955536,-0.562513530254364 ,0.486067235469818,0.360958188772202,-0.844728171825409,-0.395149946212769,0.128298655152321,-0.92551976442337 ,-0.356304168701172,0.360958188772202,-0.844728171825409,-0.395149946212769,-0.595698416233063,-0.718034863471985 ,-0.359957367181778,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.595698416233063,-0.718034863471985 ,-0.359957367181778,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.900666117668152,-0.271470487117767 ,0.339270144701004,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.330185979604721,-0.571054816246033 ,0.751580774784088,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.939882695674896,-0.341330021619797 ,0.0106942849233747,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.400767505168915,-0.84773463010788 ,0.347464233636856,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.330185979604721,-0.571054816246033 ,0.751580774784088,0.705251514911652,-0.583878755569458,0.402126759290695,0.705251514911652,-0.583878755569458 ,0.402126759290695,0.391103774309158,-0.641535997390747,-0.659901022911072,0.207801967859268,-0.930255472660065 ,-0.302395612001419,0.400767505168915,-0.84773463010788,0.347464233636856,-0.717249631881714,-0.625881135463715 ,-0.306309938430786,-0.939882695674896,-0.341330021619797,0.0106942849233747,0.207801967859268,-0.930255472660065 ,-0.302395612001419,0.391103774309158,-0.641535997390747,-0.659901022911072,0.0837007611989975,-0.567488670349121 ,0.819115877151489,0.623615741729736,-0.765475749969482,-0.158588528633118,0.970349192619324,-0.239411205053329 ,0.0332370884716511,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329 ,0.0332370884716511,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.668955087661743,-0.737109065055847 ,-0.0957564637064934,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.192425131797791,-0.974552154541016 ,0.114980764687061,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.0837007611989975,-0.567488670349121 ,0.819115877151489,0.706917345523834,-0.10402026027441,0.699605345726013,0.691426575183868,-0.534520328044891 ,0.486021935939789,0.478905141353607,-0.688271880149841,-0.544914424419403,0.863034009933472,-0.335786014795303 ,-0.377385854721069,0.912856459617615,-0.241107016801834,0.329485177993774,-0.598684787750244,-0.729470372200012 ,-0.330831557512283,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.863034009933472,-0.335786014795303 ,-0.377385854721069,0.478905141353607,-0.688271880149841,-0.544914424419403,-0.301147669553757,-0.68056708574295 ,0.667935967445374,0.691426575183868,-0.534520328044891,0.486021935939789,0.912856459617615,-0.241107016801834 ,0.329485177993774,-0.124663934111595,-0.874086141586304,0.469502240419388,0.958362102508545,-0.256494760513306 ,0.125509008765221,0.750927150249481,-0.519762933254242,0.407375574111938,0.420935273170471,-0.595206916332245 ,-0.68450140953064,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.593355655670166,-0.709652066230774 ,-0.379898726940155,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.794416069984436,-0.305554151535034 ,-0.524918794631958,0.420935273170471,-0.595206916332245,-0.68450140953064,-0.148850679397583,-0.924228370189667 ,0.351632446050644,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.593355655670166,-0.709652066230774 ,-0.379898726940155,-0.29621621966362,-0.72027575969696,0.627262949943542,0.750927150249481,-0.519762933254242 ,0.407375574111938,0.958362102508545,-0.256494760513306,0.125509008765221,-0.148850679397583,-0.924228370189667 ,0.351632446050644,-0.29621621966362,-0.72027575969696,0.627262949943542,0.338333457708359,-0.796955585479736 ,-0.500392079353333,0.680100440979004,-0.471440553665161,-0.56143319606781,0.931363761425018,-0.361004918813705 ,-0.0472966246306896,0.695649981498718,-0.635026633739471,0.335875421762466,-0.312811404466629,-0.918802440166473 ,-0.240730464458466,0.680100440979004,-0.471440553665161,-0.56143319606781,0.338333457708359,-0.796955585479736 ,-0.500392079353333,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.522674918174744,-0.84270977973938 ,-0.129039376974106,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.18037211894989,-0.916134774684906 ,0.357998490333557,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.695649981498718,-0.635026633739471 ,0.335875421762466,0.931363761425018,-0.361004918813705,-0.0472966246306896,-0.18037211894989,-0.916134774684906 ,0.357998490333557,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.259535163640976,-0.932749211788177 ,0.250240743160248,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.128298655152321,-0.92551976442337 ,-0.356304168701172,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802 ,0.349483251571655,0.303018242120743,-0.938679337501526,0.164502277970314,0.128298655152321,-0.92551976442337 ,-0.356304168701172,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.956566870212555,-0.244721978902817 ,-0.158401101827621,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.638639569282532,0.766668856143951 ,0.0660171955823898,-0.900666117668152,-0.271470487117767,0.339270144701004,0.181094169616699,-0.00969368312507868 ,0.983417987823486,0.814850926399231,-0.0293116569519043,0.57892906665802,0.599858105182648,0.75833523273468 ,0.255142837762833,0.15803250670433,0.792331993579865,0.589267194271088,0.706917345523834,-0.10402026027441,0.699605345726013 ,0.970349192619324,-0.239411205053329,0.0332370884716511,0.752064108848572,0.658552646636963,-0.0266083907335997 ,0.599858105182648,0.75833523273468,0.255142837762833,0.912856459617615,-0.241107016801834,0.329485177993774 ,0.863034009933472,-0.335786014795303,-0.377385854721069,0.650463998317719,0.740020751953125,-0.17107281088829 ,0.752064108848572,0.658552646636963,-0.0266083907335997,0.864170670509338,0.408057361841202,-0.2944455742836 ,0.906549096107483,0.409386813640594,-0.10281577706337,0.740322411060333,0.655164897441864,-0.150604203343391 ,0.600557744503021,0.788931846618652,-0.130065008997917,0.816485822200775,0.512709319591522,0.265480846166611 ,0.968974769115448,0.149661242961884,0.196696132421494,0.995014905929565,0.0992267951369286,-0.00996995531022549 ,0.909856855869293,0.391187816858292,0.138320595026016,0.660223960876465,0.688790857791901,0.299451887607574 ,0.359505623579025,0.919594645500183,-0.158434361219406,0.631004393100739,0.719356596469879,-0.29044708609581 ,0.816485822200775,0.512709319591522,0.265480846166611,0.331241726875305,0.767114758491516,0.549375832080841 ,0.00761288125067949,0.965830504894257,-0.259062767028809,0.258335798978806,0.945306360721588,-0.199144557118416 ,0.563141405582428,0.729207217693329,0.388752609491348,-0.261382013559341,0.943598508834839,-0.203227147459984 ,-0.505573391914368,0.856702506542206,0.102256529033184,0.0491388663649559,0.993503928184509,-0.102641858160496 ,0.00761288125067949,0.965830504894257,-0.259062767028809,-0.413429826498032,0.428489029407501,0.803413331508636 ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.520070433616638,0.75630134344101,0.396906822919846 ,-0.158630818128586,0.588066816329956,0.793103873729706,-0.0206129420548677,0.755090236663818,0.655296742916107 ,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.229550525546074,0.57556563615799,0.784876227378845 ,-0.158630818128586,0.588066816329956,0.793103873729706,-0.261382013559341,0.943598508834839,-0.203227147459984 ,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.158630818128586,0.588066816329956,0.793103873729706 ,-0.522960901260376,0.842813611030579,-0.127189248800278,0.00761288125067949,0.965830504894257,-0.259062767028809 ,0.331241726875305,0.767114758491516,0.549375832080841,-0.0206129420548677,0.755090236663818,0.655296742916107 ,-0.261382013559341,0.943598508834839,-0.203227147459984,0.494772255420685,0.860163271427155,-0.123772226274014 ,0.470422744750977,0.855190873146057,-0.217602953314781,0.647329449653625,0.721940755844116,-0.244471147656441 ,0.669141590595245,0.742036402225494,-0.0403924956917763,0.258335798978806,0.945306360721588,-0.199144557118416 ,0.303004235029221,0.934939086437225,-0.184600368142128,0.470422744750977,0.855190873146057,-0.217602953314781 ,0.494772255420685,0.860163271427155,-0.123772226274014,0.00761288125067949,0.965830504894257,-0.259062767028809 ,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128 ,0.258335798978806,0.945306360721588,-0.199144557118416,-0.980522751808167,0.123100936412811,0.153040006756783 ,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572 ,-0.894985496997833,0.383079677820206,0.228584602475166,-0.980522751808167,0.123100936412811,0.153040006756783 ,-0.894985496997833,0.383079677820206,0.228584602475166,-0.76461535692215,0.640312731266022,0.0732325837016106 ,-0.941741049289703,0.11614803224802,0.315647661685944,-0.916947364807129,0.362371772527695,0.167015537619591 ,-0.847357213497162,0.513431549072266,0.135549783706665,-0.796578586101532,0.576386690139771,0.182320937514305 ,-0.826885998249054,0.483063906431198,0.287938833236694,-0.703840732574463,0.696332275867462,0.140461906790733 ,-0.796578586101532,0.576386690139771,0.182320937514305,-0.847357213497162,0.513431549072266,0.135549783706665 ,-0.729536950588226,0.676141858100891,0.102995604276657,-0.819103717803955,0.554178774356842,0.148171976208687 ,-0.703840732574463,0.696332275867462,0.140461906790733,-0.729536950588226,0.676141858100891,0.102995604276657 ,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.76466292142868,0.188213840126991,0.616332828998566 ,-0.614538252353668,0.667141258716583,0.421028852462769,-0.597852468490601,0.634572565555573,0.48978579044342 ,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.916947364807129,0.362371772527695,0.167015537619591 ,-0.980522751808167,0.123100936412811,0.153040006756783,-0.941741049289703,0.11614803224802,0.315647661685944 ,-0.893702745437622,0.422671109437943,0.150480940937996,-0.780855476856232,0.547496676445007,0.300852298736572 ,-0.962031662464142,0.166659042239189,0.216147810220718,-0.854411065578461,0.0699175223708153,0.514872133731842 ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739 ,-0.597852468490601,0.634572565555573,0.48978579044342,-0.614538252353668,0.667141258716583,0.421028852462769 ,-0.311181366443634,0.925608515739441,0.215441450476646,-0.227211818099022,0.921236872673035,0.315748959779739 ,0.127702310681343,0.976085126399994,0.17592579126358,0.0491388663649559,0.993503928184509,-0.102641858160496 ,-0.505573391914368,0.856702506542206,0.102256529033184,0.127702310681343,0.976085126399994,0.17592579126358 ,0.410511314868927,0.907221972942352,0.0918079540133476,0.303004235029221,0.934939086437225,-0.184600368142128 ,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128 ,0.410511314868927,0.907221972942352,0.0918079540133476,0.559431314468384,0.828812599182129,0.0103096608072519 ,0.470422744750977,0.855190873146057,-0.217602953314781,-0.826885998249054,0.483063906431198,0.287938833236694 ,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.962031662464142,0.166659042239189,0.216147810220718 ,-0.916947364807129,0.362371772527695,0.167015537619591,0.686884999275208,0.723168194293976,-0.0722270235419273 ,0.647329449653625,0.721940755844116,-0.244471147656441,0.470422744750977,0.855190873146057,-0.217602953314781 ,0.559431314468384,0.828812599182129,0.0103096608072519,0.905105113983154,0.409709811210632,-0.113677680492401 ,0.891577959060669,0.451291143894196,-0.0377500578761101,0.647329449653625,0.721940755844116,-0.244471147656441 ,0.686884999275208,0.723168194293976,-0.0722270235419273,0.632998824119568,0.753636837005615,-0.177042677998543 ,0.740322411060333,0.655164897441864,-0.150604203343391,0.891577959060669,0.451291143894196,-0.0377500578761101 ,0.905105113983154,0.409709811210632,-0.113677680492401,0.676984488964081,0.720325291156769,-0.15107424557209 ,0.694885969161987,0.706955552101135,-0.131709426641464,0.600557744503021,0.788931846618652,-0.130065008997917 ,0.740322411060333,0.655164897441864,-0.150604203343391,0.709426641464233,0.694044709205627,-0.122539132833481 ,0.749488353729248,0.646310150623322,-0.143354311585426,0.694885969161987,0.706955552101135,-0.131709426641464 ,0.676984488964081,0.720325291156769,-0.15107424557209,0.74595445394516,0.638815522193909,-0.188326209783554 ,0.733190476894379,0.653582632541656,-0.187780305743217,0.727223694324493,0.663318991661072,-0.176503792405128 ,0.749488353729248,0.646310150623322,-0.143354311585426,0.958362102508545,-0.256494760513306,0.125509008765221 ,0.794416069984436,-0.305554151535034,-0.524918794631958,0.74595445394516,0.638815522193909,-0.188326209783554 ,0.712908089160919,0.682124614715576,-0.162689983844757,0.694885969161987,0.706955552101135,-0.131709426641464 ,0.719630718231201,0.67299348115921,-0.170913383364677,0.834402143955231,0.550802052021027,0.0197512619197369 ,0.600557744503021,0.788931846618652,-0.130065008997917,0.694885969161987,0.706955552101135,-0.131709426641464 ,0.749488353729248,0.646310150623322,-0.143354311585426,0.727223694324493,0.663318991661072,-0.176503792405128 ,0.719630718231201,0.67299348115921,-0.170913383364677,0.749488353729248,0.646310150623322,-0.143354311585426 ,0.709426641464233,0.694044709205627,-0.122539132833481,0.712908089160919,0.682124614715576,-0.162689983844757 ,0.74595445394516,0.638815522193909,-0.188326209783554,0.794416069984436,-0.305554151535034,-0.524918794631958 ,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.733190476894379,0.653582632541656,-0.187780305743217 ,0.74595445394516,0.638815522193909,-0.188326209783554,0.864170670509338,0.408057361841202,-0.2944455742836,0.968974769115448 ,0.149661242961884,0.196696132421494,0.816485822200775,0.512709319591522,0.265480846166611,0.631004393100739 ,0.719356596469879,-0.29044708609581,0.359505623579025,0.919594645500183,-0.158434361219406,0.660223960876465 ,0.688790857791901,0.299451887607574,0.563141405582428,0.729207217693329,0.388752609491348,0.258335798978806 ,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.494772255420685 ,0.860163271427155,-0.123772226274014,0.669141590595245,0.742036402225494,-0.0403924956917763,0.667402267456055 ,0.744479417800903,-0.0180171187967062,0.359505623579025,0.919594645500183,-0.158434361219406,0.47292697429657 ,0.876888990402222,0.0860569775104523,0.667402267456055,0.744479417800903,-0.0180171187967062,0.631004393100739 ,0.719356596469879,-0.29044708609581,0.864170670509338,0.408057361841202,-0.2944455742836,0.631004393100739,0.719356596469879 ,-0.29044708609581,0.667402267456055,0.744479417800903,-0.0180171187967062,0.906549096107483,0.409386813640594 ,-0.10281577706337,0.600557744503021,0.788931846618652,-0.130065008997917,0.834402143955231,0.550802052021027 ,0.0197512619197369,0.968974769115448,0.149661242961884,0.196696132421494,0.864170670509338,0.408057361841202 ,-0.2944455742836,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.956566870212555,-0.244721978902817 ,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.819103717803955,0.554178774356842 ,0.148171976208687,0.75202214717865,0.649503469467163,-0.112284608185291,0.972268581390381,0.233539223670959 ,0.0123813217505813,0.875641047954559,-0.338848143815994,0.34414342045784,0.939418137073517,0.146130084991455 ,-0.310063809156418,0.905861377716064,-0.279544115066528,0.318229824304581,0.923372685909271,0.289373397827148 ,-0.252281337976456,0.699552476406097,0.686574220657349,0.198096364736557,0.785714864730835,0.180998295545578 ,0.591516494750977,0.633913099765778,0.759061396121979,-0.14825627207756,0.69953316450119,0.693202435970306,-0.173562079668045 ,0.80286830663681,0.57996016740799,0.138016909360886,0.699552476406097,0.686574220657349,0.198096364736557,0.305637389421463 ,0.797388851642609,-0.520342946052551,0.397901266813278,0.642865896224976,-0.65452116727829,0.69953316450119 ,0.693202435970306,-0.173562079668045,0.633913099765778,0.759061396121979,-0.14825627207756,0.397901266813278 ,0.642865896224976,-0.65452116727829,0.305637389421463,0.797388851642609,-0.520342946052551,-0.13304828107357 ,0.622710764408112,-0.771057367324829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.13304828107357 ,0.622710764408112,-0.771057367324829,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.153654128313065 ,0.571211874485016,-0.806292414665222,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.239434540271759 ,0.547067582607269,-0.80211478471756,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.192081272602081 ,0.0805686637759209,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,0.921413123607636 ,-0.245974183082581,0.300823181867599,0.905861377716064,-0.279544115066528,0.318229824304581,0.785714864730835 ,0.180998295545578,0.591516494750977,0.957429826259613,0.286321878433228,0.0367136411368847,0.699552476406097 ,0.686574220657349,0.198096364736557,0.80286830663681,0.57996016740799,0.138016909360886,0.957429826259613,0.286321878433228 ,0.0367136411368847,0.785714864730835,0.180998295545578,0.591516494750977,-0.723107695579529,0.620889544487,0.302673906087875 ,-0.613772094249725,0.718873798847198,0.326349943876266,-0.596384108066559,0.73188179731369,0.329658985137939 ,-0.738506555557251,0.594659924507141,0.317785561084747,-0.878546297550201,0.378490209579468,0.291378676891327 ,-0.855198562145233,0.434895634651184,0.281959563493729,-0.723107695579529,0.620889544487,0.302673906087875,-0.738506555557251 ,0.594659924507141,0.317785561084747,-0.908547103404999,0.339473843574524,0.243515312671661,-0.855198562145233 ,0.434895634651184,0.281959563493729,-0.878546297550201,0.378490209579468,0.291378676891327,-0.797426640987396 ,0.177673250436783,0.576665341854095,-0.797426640987396,0.177673250436783,0.576665341854095,-0.543871939182281 ,-0.524204313755035,0.655296266078949,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.908547103404999 ,0.339473843574524,0.243515312671661,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.599660336971283 ,0.629722774028778,0.493818551301956,-0.970878839492798,0.173829272389412,0.164856299757957,-0.633758366107941 ,-0.479114800691605,0.607288539409637,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.996930718421936 ,0.0329507254064083,0.0710170492529869,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483 ,0.443565607070923,0.388519644737244,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.525695741176605 ,0.742150485515594,-0.415760308504105,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.390601694583893 ,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.525695741176605 ,0.742150485515594,-0.415760308504105,-0.723603487014771,0.683223187923431,0.098000094294548,-0.859436213970184 ,0.509185254573822,0.04582304880023,-0.65424633026123,0.624168395996094,0.42705449461937,-0.599660336971283,0.629722774028778 ,0.493818551301956,-0.807652175426483,0.443565607070923,0.388519644737244,-0.762878954410553,0.502556443214417 ,0.40675875544548,-0.599660336971283,0.629722774028778,0.493818551301956,-0.494092434644699,0.0352621860802174 ,0.868693947792053,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.807652175426483,0.443565607070923 ,0.388519644737244,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.655400156974792,-0.538768410682678 ,0.529319524765015,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.494092434644699,0.0352621860802174 ,0.868693947792053,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.079451210796833,0.574800968170166 ,-0.814427018165588,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.192081272602081,0.0805686637759209 ,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.079451210796833,0.574800968170166 ,-0.814427018165588,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.153654128313065,0.571211874485016 ,-0.806292414665222,0.414378970861435,-0.480131238698959,0.773152053356171,-0.47402635216713,-0.576445937156677 ,0.665589272975922,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.628591358661652,-0.444956004619598 ,-0.637876987457275,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.768725872039795,-0.625621736049652 ,-0.132883325219154,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.663442015647888,-0.730678915977478 ,-0.161099418997765,-0.165543153882027,-0.540198087692261,-0.825094819068909,0.348949402570724,-0.852244853973389 ,0.389760226011276,-0.3234041929245,-0.738465428352356,0.591674447059631,0.620603084564209,-0.695841789245605 ,-0.361463725566864,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.610171139240265,-0.773055195808411 ,0.173426955938339,0.314525902271271,-0.770808696746826,-0.554010331630707,0.545981824398041,-0.584509074687958 ,0.600210785865784,0.0837007611989975,-0.567488670349121,0.819115877151489,-0.668955087661743,-0.737109065055847 ,-0.0957564637064934,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.598684787750244,-0.729470372200012 ,-0.330831557512283,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.124663934111595,-0.874086141586304 ,0.469502240419388,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.798132300376892,-0.595748007297516 ,0.0898283571004868,0.885131120681763,0.0417929887771606,-0.463461130857468,0.94776064157486,-0.269029140472412 ,-0.171385690569878,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.627128541469574,0.0574355758726597 ,-0.776795268058777,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.648241400718689,-0.506932020187378 ,-0.568157553672791,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.969612717628479,0.0529158711433411 ,0.238853633403778,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.918069899082184,-0.187107101082802 ,0.349483251571655,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.47402635216713,-0.576445937156677 ,0.665589272975922,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.999210119247437,0.0289651956409216 ,-0.0272048581391573,0.647232055664063,0.709673702716827,-0.278305619955063,0.702042996883392,0.707515120506287 ,-0.0809817835688591,0.94776064157486,-0.269029140472412,-0.171385690569878,0.885131120681763,0.0417929887771606 ,-0.463461130857468,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.627128541469574,0.0574355758726597 ,-0.776795268058777,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.1213503703475,0.714234888553619 ,-0.689305901527405,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.543871939182281,-0.524204313755035 ,0.655296266078949,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.655400156974792,-0.538768410682678 ,0.529319524765015,-0.970878839492798,0.173829272389412,0.164856299757957,-0.975513935089111,-0.202585533261299 ,0.085625521838665,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.633758366107941,-0.479114800691605 ,0.607288539409637,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.627380669116974,0.542527735233307 ,-0.558620691299438,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.906325161457062,0.416019886732101 ,-0.074176587164402,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.079451210796833,0.574800968170166 ,-0.814427018165588,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.627528488636017,0.574077665805817 ,-0.525968492031097,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.128622829914093,0.604616820812225 ,-0.786062777042389,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.154303342103958,0.42424476146698 ,-0.892304241657257,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.239434540271759,0.547067582607269 ,-0.80211478471756,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.153654128313065,0.571211874485016 ,-0.806292414665222,0.393562316894531,0.580699145793915,-0.71266907453537,0.430813550949097,0.499041706323624 ,-0.751902282238007,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.193036198616028,0.594731986522675 ,-0.780404329299927,0.430813550949097,0.499041706323624,-0.751902282238007,0.393562316894531,0.580699145793915 ,-0.71266907453537,0.800276219844818,0.427209228277206,-0.420773357152939,0.828168988227844,0.353571265935898 ,-0.434883326292038,0.905861377716064,-0.279544115066528,0.318229824304581,0.858353197574615,-0.409084677696228 ,0.309644132852554,0.936574637889862,0.00382779608480632,-0.350447237491608,0.923372685909271,0.289373397827148 ,-0.252281337976456,0.875641047954559,-0.338848143815994,0.34414342045784,0.858353197574615,-0.409084677696228 ,0.309644132852554,0.905861377716064,-0.279544115066528,0.318229824304581,0.921413123607636,-0.245974183082581 ,0.300823181867599,0.875641047954559,-0.338848143815994,0.34414342045784,0.921413123607636,-0.245974183082581 ,0.300823181867599,0.906213641166687,0.328242212533951,-0.266521811485291,0.939418137073517,0.146130084991455 ,-0.310063809156418,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.918069899082184,-0.187107101082802 ,0.349483251571655,-0.613772094249725,0.718873798847198,0.326349943876266,-0.63234806060791,0.720907807350159 ,0.283598214387894,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.432219624519348,0.0896197631955147 ,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.633863687515259,0.397778928279877 ,-0.663316428661346,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.626530051231384,-0.095443420112133 ,-0.773531317710876,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.971036195755005,0.0917746424674988 ,-0.220604136586189,0.458068341016769,-0.324115723371506,-0.827721178531647,0.272203177213669,0.658502519130707 ,-0.701626539230347,-0.122567981481552,0.664539813995361,-0.737132251262665,0.0359749346971512,-0.262611299753189 ,-0.964230835437775,0.656110465526581,0.732090950012207,-0.183199197053909,0.331649243831635,0.794523119926453 ,-0.508666634559631,0.0896634757518768,0.986824929714203,-0.134673669934273,0.308493763208389,0.950873613357544 ,0.0259031727910042,0.57691216468811,0.718079447746277,0.389273971319199,0.664968013763428,0.745313882827759 ,0.0482159033417702,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.320559352636337,0.729658544063568 ,0.604019939899445,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583 ,0.421028852462769,0.706917345523834,-0.10402026027441,0.699605345726013,0.599858105182648,0.75833523273468,0.255142837762833 ,0.814850926399231,-0.0293116569519043,0.57892906665802,-0.941741049289703,0.11614803224802,0.315647661685944 ,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.991389513015747,-0.125117510557175,0.038632795214653 ,0.861413061618805,0.450139224529266,0.23524908721447,0.652578055858612,-0.0296747293323278,0.757140219211578 ,0.659538865089417,0.541105449199677,0.521740734577179,0.861413061618805,0.450139224529266,0.23524908721447,0.837489545345306 ,-0.137019574642181,0.528996109962463,0.652578055858612,-0.0296747293323278,0.757140219211578,0.957429826259613 ,0.286321878433228,0.0367136411368847,0.929460346698761,0.351613759994507,-0.111674785614014,0.909856855869293 ,0.391187816858292,0.138320595026016,0.559431314468384,0.828812599182129,0.0103096608072519,0.410511314868927 ,0.907221972942352,0.0918079540133476,0.392663985490799,0.918741226196289,-0.0415881127119064,0.912856459617615 ,-0.241107016801834,0.329485177993774,0.752064108848572,0.658552646636963,-0.0266083907335997,0.970349192619324 ,-0.239411205053329,0.0332370884716511,0.906213641166687,0.328242212533951,-0.266521811485291,0.921413123607636 ,-0.245974183082581,0.300823181867599,0.957429826259613,0.286321878433228,0.0367136411368847,0.858353197574615 ,-0.409084677696228,0.309644132852554,0.972268581390381,0.233539223670959,0.0123813217505813,0.936574637889862 ,0.00382779608480632,-0.350447237491608,0.15803250670433,0.792331993579865,0.589267194271088,0.306766599416733 ,-0.118459150195122,0.944384276866913,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.819103717803955 ,0.554178774356842,0.148171976208687,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.939882695674896 ,-0.341330021619797,0.0106942849233747,-0.748181462287903,0.587628781795502,0.308085918426514,-0.665187239646912 ,-0.279087424278259,0.692557692527771,-0.812849164009094,-0.351107835769653,0.46475750207901,0.47292697429657 ,0.876888990402222,0.0860569775104523,0.258335798978806,0.945306360721588,-0.199144557118416,0.494772255420685 ,0.860163271427155,-0.123772226274014,-0.158630818128586,0.588066816329956,0.793103873729706,-0.229550525546074 ,0.57556563615799,0.784876227378845,-0.413429826498032,0.428489029407501,0.803413331508636,-0.520070433616638 ,0.75630134344101,0.396906822919846,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.158630818128586 ,0.588066816329956,0.793103873729706,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.968974769115448 ,0.149661242961884,0.196696132421494,0.834402143955231,0.550802052021027,0.0197512619197369,0.891577959060669 ,0.451291143894196,-0.0377500578761101,0.669141590595245,0.742036402225494,-0.0403924956917763,0.647329449653625 ,0.721940755844116,-0.244471147656441,-0.980522751808167,0.123100936412811,0.153040006756783,-0.916947364807129 ,0.362371772527695,0.167015537619591,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232 ,0.547496676445007,0.300852298736572,-0.505573391914368,0.856702506542206,0.102256529033184,-0.894985496997833 ,0.383079677820206,0.228584602475166,-0.894985496997833,0.383079677820206,0.228584602475166,-0.505573391914368 ,0.856702506542206,0.102256529033184,-0.76461535692215,0.640312731266022,0.0732325837016106,0.891577959060669 ,0.451291143894196,-0.0377500578761101,0.740322411060333,0.655164897441864,-0.150604203343391,0.906549096107483 ,0.409386813640594,-0.10281577706337,0.359505623579025,0.919594645500183,-0.158434361219406,0.258335798978806 ,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.957429826259613 ,0.286321878433228,0.0367136411368847,0.80286830663681,0.57996016740799,0.138016909360886,0.929460346698761,0.351613759994507 ,-0.111674785614014,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.324593514204025,0.0331906899809837 ,-0.945271074771881,-0.177267998456955,0.365929782390594,-0.913603544235229,0.972268581390381,0.233539223670959 ,0.0123813217505813,0.858353197574615,-0.409084677696228,0.309644132852554,0.875641047954559,-0.338848143815994 ,0.34414342045784,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.596384108066559,0.73188179731369 ,0.329658985137939,-0.613772094249725,0.718873798847198,0.326349943876266,-0.592115700244904,-0.487801969051361 ,0.64144229888916,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.797426640987396,0.177673250436783 ,0.576665341854095,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.0525061003863811,0.0318809561431408 ,-0.998111546039581,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.970878839492798,0.173829272389412 ,0.164856299757957,-0.93314254283905,0.297381490468979,0.20201313495636,-0.947628021240234,0.25655260682106,0.190215468406677 ,0.800276219844818,0.427209228277206,-0.420773357152939,0.923372685909271,0.289373397827148,-0.252281337976456 ,0.828168988227844,0.353571265935898,-0.434883326292038,0.906213641166687,0.328242212533951,-0.266521811485291 ,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.939418137073517,0.146130084991455,-0.310063809156418 ,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.592115700244904,-0.487801969051361,0.64144229888916 ,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.993199586868286,-4.69008500658674e-006,0.116424031555653 ,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259 ,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.149676010012627,0.966881930828094,-0.206727981567383 ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.342631131410599,0.695380508899689,-0.631703972816467 ,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.00497461529448628,0.164960891008377,-0.986287593841553 ,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.342631131410599,0.695380508899689,-0.631703972816467 ,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00533877313137054,0.0413248650729656,-0.999131500720978 ,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.377974569797516,-0.0538287982344627,-0.924249827861786 ,-0.00533877313137054,0.0413248650729656,-0.999131500720978,0.0723040029406548,-0.562818944454193,-0.823411762714386 ,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.433557718992233,-0.0273692850023508,-0.900710046291351 ,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.0359749346971512,-0.262611299753189,-0.964230835437775 ,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.282903432846069,-0.614905774593353,-0.73610907793045 ,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.122567981481552,0.664539813995361,-0.737132251262665 ,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.383173704147339,-0.262150138616562,-0.885694742202759 ,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.180025935173035,0.229685723781586,-0.956470131874084 ,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.398143172264099,0.565787076950073,-0.722057461738586 ,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.390601694583893,0.504609107971191,-0.769935011863709 ,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.180025935173035,0.229685723781586,-0.956470131874084 ,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.390601694583893,0.504609107971191,-0.769935011863709 ,-0.154303342103958,0.42424476146698,-0.892304241657257,0.995019972324371,0.0198635533452034,0.0976764634251595 ,0.97600269317627,0.13745604455471,0.168892234563828,0.85029935836792,0.0502043291926384,0.523899376392365,0.878947734832764 ,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.878947734832764 ,-0.0450414381921291,0.474786430597305,0.85029935836792,0.0502043291926384,0.523899376392365,0.652125597000122 ,-0.00108946568798274,0.758110165596008,0.147625222802162,-0.322124987840652,0.935116171836853,0.668019592761993 ,-0.146763533353806,0.729527413845062,0.652125597000122,-0.00108946568798274,0.758110165596008,0.141524657607079 ,-0.0639704838395119,0.987865626811981,0.147625222802162,-0.322124987840652,0.935116171836853,0.141524657607079 ,-0.0639704838395119,0.987865626811981,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.503679633140564 ,-0.333046585321426,0.797111511230469,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.761611342430115 ,-0.261901050806046,0.592752873897552,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.538123428821564 ,-0.0776136741042137,0.839285016059875,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.761611342430115 ,-0.261901050806046,0.592752873897552,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.961548864841461 ,-0.0192971937358379,0.273955136537552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.961548864841461 ,-0.0192971937358379,0.273955136537552,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.941822648048401 ,-0.153352990746498,-0.29908686876297,0.505583882331848,0.0150260468944907,-0.862646579742432,0.522813856601715 ,0.179267287254334,-0.833384037017822,0.886800289154053,0.175987064838409,-0.427333384752274,0.853118479251862 ,0.0149601250886917,-0.521502673625946,0.522813856601715,0.179267287254334,-0.833384037017822,0.505583882331848 ,0.0150260468944907,-0.862646579742432,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00497461529448628 ,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.00497461529448628 ,0.164960891008377,-0.986287593841553,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.377974569797516 ,-0.0538287982344627,-0.924249827861786,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.341541200876236 ,0.100330114364624,-0.934496402740479,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.707946956157684 ,-0.166302591562271,-0.686406970024109,0.903742134571075,0.0408325865864754,0.426125437021255,0.99804013967514 ,0.0525208227336407,0.0340210981667042,0.995019972324371,0.0198635533452034,0.0976764634251595,0.878947734832764 ,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.697896838188171 ,0.111968606710434,0.707391738891602,0.903742134571075,0.0408325865864754,0.426125437021255,0.878947734832764 ,-0.0450414381921291,0.474786430597305,0.713874757289886,0.186937391757965,-0.674860894680023,0.482705801725388 ,0.267842918634415,-0.833819687366486,0.932169795036316,0.263871729373932,-0.24785327911377,0.949256718158722 ,0.266638696193695,-0.166779711842537,0.482705801725388,0.267842918634415,-0.833819687366486,0.713874757289886 ,0.186937391757965,-0.674860894680023,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.244611874222755 ,0.194429770112038,-0.949927449226379,0.929460346698761,0.351613759994507,-0.111674785614014,0.80286830663681 ,0.57996016740799,0.138016909360886,0.837489545345306,-0.137019574642181,0.528996109962463,0.861413061618805 ,0.450139224529266,0.23524908721447,0.389561533927917,-0.19174836575985,0.900818705558777,0.407288730144501,0.570921003818512 ,0.712857067584991,0.659538865089417,0.541105449199677,0.521740734577179,0.652578055858612,-0.0296747293323278 ,0.757140219211578,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.187374100089073,0.574305176734924 ,0.796909391880035,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.993199586868286,-4.69008500658674e-006 ,0.116424031555653,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.846594870090485,-0.529065132141113 ,0.0580275692045689,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218 ,0.00391686055809259,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.971036195755005,0.0917746424674988 ,-0.220604136586189,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.762878954410553,0.502556443214417 ,0.40675875544548,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.886820614337921,-0.356388121843338 ,-0.294171214103699,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431 ,0.098000094294548,-0.65424633026123,0.624168395996094,0.42705449461937,-0.762878954410553,0.502556443214417 ,0.40675875544548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431 ,0.098000094294548,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.93314254283905,0.297381490468979 ,0.20201313495636,-0.65424633026123,0.624168395996094,0.42705449461937,-0.947628021240234,0.25655260682106,0.190215468406677 ,-0.93314254283905,0.297381490468979,0.20201313495636,-0.906325161457062,0.416019886732101,-0.074176587164402 ,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.926415205001831,0.366669058799744,-0.0854909643530846 ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.981737494468689,-0.183587089180946,0.0498724691569805 ,-0.947628021240234,0.25655260682106,0.190215468406677,-0.809561967849731,0.578427612781525,-0.10015495121479 ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.981737494468689,-0.183587089180946,0.0498724691569805 ,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.809561967849731,0.578427612781525,-0.10015495121479 ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.793782532215118,0.557114601135254,0.243993073701859 ,-0.870848000049591,0.464649707078934,0.160388261079788,-0.711231410503387,0.702188730239868,-0.0328762196004391 ,-0.713916778564453,0.653736412525177,0.250901401042938,-0.793782532215118,0.557114601135254,0.243993073701859 ,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.63234806060791,0.720907807350159,0.283598214387894 ,-0.713916778564453,0.653736412525177,0.250901401042938,-0.711231410503387,0.702188730239868,-0.0328762196004391 ,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573 ,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.63234806060791,0.720907807350159,0.283598214387894 ,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573 ,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.964107573032379,-0.248898640275002,-0.0924450159072876 ,-0.969612717628479,0.0529158711433411,0.238853633403778,0.479293167591095,-0.284916758537292,-0.830120801925659 ,0.383484452962875,-0.102838270366192,-0.917803883552551,0.944391191005707,-0.0824342668056488,-0.318323493003845 ,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.383484452962875,-0.102838270366192,-0.917803883552551 ,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616 ,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.828753769397736,-0.00401723757386208,0.559598922729492 ,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211 ,0.653040647506714,-0.484619528055191,-0.581963717937469,0.828753769397736,-0.00401723757386208,0.559598922729492 ,0.653040647506714,-0.484619528055191,-0.581963717937469,0.479293167591095,-0.284916758537292,-0.830120801925659 ,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.812033891677856,-0.31945663690567,0.488414198160172 ,-0.1181396022439,-0.72886723279953,0.674385368824005,0.583520710468292,-0.523498058319092,0.620848894119263 ,0.812033891677856,-0.31945663690567,0.488414198160172,0.964972972869873,-0.0338397771120071,-0.260157763957977 ,0.944391191005707,-0.0824342668056488,-0.318323493003845,-0.0390606410801411,-0.798295676708221,-0.600997745990753 ,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.867540001869202,-0.488967150449753,-0.0910245105624199 ,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845 ,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.1181396022439,-0.72886723279953,0.674385368824005 ,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.993199586868286,-4.69008500658674e-006,0.116424031555653 ,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.751028060913086,-0.474978417158127,-0.458641856908798 ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.202261313796043,-0.191956117749214,0.960334956645966 ,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.202261313796043,-0.191956117749214,0.960334956645966 ,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.0923527628183365,-0.948987364768982,0.301486223936081 ,0.201128974556923,-0.41152036190033,0.888930916786194,-0.332680583000183,-0.441110253334045,0.833513855934143 ,0.837489545345306,-0.137019574642181,0.528996109962463,0.244611874222755,0.194429770112038,-0.949927449226379 ,-0.505279898643494,-0.213028356432915,-0.836248219013214,-0.751028060913086,-0.474978417158127,-0.458641856908798 ,-0.1181396022439,-0.72886723279953,0.674385368824005,0.698255121707916,-0.555874645709991,-0.451046764850616 ,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.871833384037018,0.0184007696807384,0.489456802606583 ,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.928275108337402,-0.108704075217247,0.35565248131752 ,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.938030481338501,-0.164544627070427,-0.304998099803925 ,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.909544348716736,-0.0496344491839409,0.412632405757904 ,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.934698820114136,0.0468888208270073,-0.352334499359131 ,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.0390606410801411,-0.798295676708221,-0.600997745990753 ,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616 ,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.0390606410801411,-0.798295676708221,-0.600997745990753 ,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.928847432136536,0.162273854017258,0.333030939102173 ,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173 ,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.969194948673248,0.11662120372057,0.21693454682827 ,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.928847432136536,0.162273854017258,0.333030939102173 ,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.305967152118683,-0.302397131919861,0.902740299701691 ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974 ,-0.714491605758667,0.14225697517395,0.685028970241547,-0.305967152118683,-0.302397131919861,0.902740299701691 ,-0.709949254989624,0.60140985250473,0.366439938545227,-0.785880029201508,0.614527881145477,-0.0689065307378769 ,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.961548864841461,-0.0192971937358379,0.273955136537552 ,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.462400823831558,0.884378015995026,0.0637255012989044 ,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.632241010665894,0.646320343017578,-0.427248448133469 ,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.733689248561859,-0.00598060339689255,-0.679458796977997 ,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.785880029201508,0.614527881145477,-0.0689065307378769 ,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.707946956157684,-0.166302591562271,-0.686406970024109 ,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.967416822910309,-0.0268912296742201,-0.251756906509399 ,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.711754858493805,-0.136520877480507,-0.689033389091492 ,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.941822648048401,-0.153352990746498,-0.29908686876297 ,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.471586525440216,-0.672621071338654,-0.570251703262329 ,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.82076495885849,-0.278661072254181,-0.498691141605377 ,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.642501175403595,-0.273710697889328,-0.715733766555786 ,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.433943778276443,-0.801411330699921,-0.411621987819672 ,0.683504700660706,0.663010776042938,0.305349051952362,0.722103536128998,0.687273919582367,0.0788736194372177 ,0.343125909566879,0.914759755134583,0.213258594274521,0.258648008108139,0.909015238285065,0.326791137456894 ,0.683504700660706,0.663010776042938,0.305349051952362,0.97600269317627,0.13745604455471,0.168892234563828,0.973912060260773 ,0.184168219566345,-0.132579684257507,0.722103536128998,0.687273919582367,0.0788736194372177,0.970708966255188 ,0.0394216887652874,-0.237002193927765,0.973912060260773,0.184168219566345,-0.132579684257507,0.97600269317627 ,0.13745604455471,0.168892234563828,0.995019972324371,0.0198635533452034,0.0976764634251595,0.946598649024963 ,0.101268604397774,-0.306097507476807,0.970708966255188,0.0394216887652874,-0.237002193927765,0.995019972324371 ,0.0198635533452034,0.0976764634251595,0.99804013967514,0.0525208227336407,0.0340210981667042,0.923067450523376 ,0.21886146068573,-0.316300749778748,0.946598649024963,0.101268604397774,-0.306097507476807,0.99804013967514 ,0.0525208227336407,0.0340210981667042,0.990444839000702,0.137596189975739,-0.00929253362119198,0.932169795036316 ,0.263871729373932,-0.24785327911377,0.923067450523376,0.21886146068573,-0.316300749778748,0.990444839000702 ,0.137596189975739,-0.00929253362119198,0.967456996440887,0.251362919807434,-0.0290456917136908,0.949256718158722 ,0.266638696193695,-0.166779711842537,0.932169795036316,0.263871729373932,-0.24785327911377,0.967456996440887 ,0.251362919807434,-0.0290456917136908,0.9481241106987,0.313342481851578,-0.053639143705368,0.937970161437988 ,0.291288256645203,-0.188050866127014,0.949256718158722,0.266638696193695,-0.166779711842537,0.9481241106987 ,0.313342481851578,-0.053639143705368,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.456334859132767 ,-0.263855904340744,0.849787354469299,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.152829229831696 ,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.152829229831696 ,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.910823285579681 ,0.270006507635117,0.312245815992355,0.343125909566879,0.914759755134583,0.213258594274521,0.722103536128998 ,0.687273919582367,0.0788736194372177,0.656110465526581,0.732090950012207,-0.183199197053909,0.308493763208389 ,0.950873613357544,0.0259031727910042,0.973912060260773,0.184168219566345,-0.132579684257507,0.886800289154053 ,0.175987064838409,-0.427333384752274,0.656110465526581,0.732090950012207,-0.183199197053909,0.722103536128998 ,0.687273919582367,0.0788736194372177,0.853118479251862,0.0149601250886917,-0.521502673625946,0.886800289154053 ,0.175987064838409,-0.427333384752274,0.973912060260773,0.184168219566345,-0.132579684257507,0.970708966255188 ,0.0394216887652874,-0.237002193927765,0.946598649024963,0.101268604397774,-0.306097507476807,0.805570960044861 ,0.0887085422873497,-0.585820972919464,0.853118479251862,0.0149601250886917,-0.521502673625946,0.970708966255188 ,0.0394216887652874,-0.237002193927765,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.941822648048401 ,-0.153352990746498,-0.29908686876297,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.928275108337402 ,-0.108704075217247,0.35565248131752,0.339781612157822,-0.868737816810608,0.360337436199188,0.295632928609848 ,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.118260890245438 ,-0.832547545433044,0.541182935237885,0.306935548782349,-0.919691801071167,0.244862332940102,0.207801967859268 ,-0.930255472660065,-0.302395612001419,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.810173809528351 ,-0.314327657222748,0.494789302349091,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.991721987724304 ,-0.09873928129673,0.0820856168866158,-0.969194948673248,0.11662120372057,0.21693454682827,-0.953069984912872 ,0.0484387166798115,0.298849910497665,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.507440745830536 ,-0.861680686473846,0.00320725026540458,0.0959865897893906,-0.91358608007431,0.395154505968094,0.542883396148682 ,-0.82672655582428,-0.147651195526123,-0.314595848321915,-0.93869549036026,-0.140997022390366,-0.124663934111595 ,-0.874086141586304,0.469502240419388,0.339781612157822,-0.868737816810608,0.360337436199188,0.211911484599113 ,-0.951958835124969,-0.221060931682587,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.192425131797791 ,-0.974552154541016,0.114980764687061,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438 ,-0.832547545433044,0.541182935237885,-0.261420041322708,-0.954043209552765,0.146496221423149,0.207811132073402 ,-0.962575078010559,-0.173964589834213,0.400767505168915,-0.84773463010788,0.347464233636856,-0.23048010468483 ,-0.946770489215851,0.224732384085655,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.201402872800827 ,-0.92625367641449,-0.318576484918594,0.362296313047409,-0.902348458766937,0.233470931649208,0.200983673334122 ,-0.912257730960846,-0.356919288635254,0.339713275432587,-0.937209665775299,0.0789491534233093,-0.18037211894989 ,-0.916134774684906,0.357998490333557,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.200983673334122 ,-0.912257730960846,-0.356919288635254,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.148850679397583 ,-0.924228370189667,0.351632446050644,0.395999073982239,-0.883323311805725,0.250847846269608,-0.259535163640976 ,-0.932749211788177,0.250240743160248,0.323624908924103,-0.91464102268219,0.242278248071671,0.11251799762249 ,-0.874383747577667,-0.472009360790253,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.248996630311012 ,-0.917850255966187,0.309114128351212,0.323624908924103,-0.91464102268219,0.242278248071671,0.464242339134216 ,-0.872838377952576,-0.150440022349358,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.259815812110901 ,-0.928046464920044,-0.266881018877029,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.259535163640976 ,-0.932749211788177,0.250240743160248,0.303018242120743,-0.938679337501526,0.164502277970314,0.37071630358696 ,-0.925935029983521,-0.0722067281603813,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.648241400718689 ,-0.506932020187378,-0.568157553672791,-0.262460768222809,-0.84521484375,0.465538620948792,0.407288730144501 ,0.570921003818512,0.712857067584991,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.187374100089073 ,0.574305176734924,0.796909391880035,0.90192449092865,0.307413011789322,0.303363531827927,0.899024188518524,0.213700130581856 ,0.382214337587357,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.97774213552475,-0.0699520856142044 ,-0.19780558347702,0.899024188518524,0.213700130581856,0.382214337587357,0.817979574203491,-0.0342949964106083 ,0.574224054813385,0.882815957069397,-0.369267553091049,0.290305823087692,0.955118477344513,-0.28173553943634 ,-0.0915084630250931,0.817979574203491,-0.0342949964106083,0.574224054813385,0.572269201278687,-0.327979475259781 ,0.751623213291168,0.665161728858948,0.0713187083601952,0.743285655975342,0.882815957069397,-0.369267553091049 ,0.290305823087692,0.761745095252991,0.0999165698885918,0.640125811100006,0.817979574203491,-0.0342949964106083 ,0.574224054813385,0.899024188518524,0.213700130581856,0.382214337587357,0.857412695884705,0.318779200315475 ,0.404009103775024,0.516816318035126,-0.0720634460449219,0.85305792093277,0.572269201278687,-0.327979475259781 ,0.751623213291168,0.817979574203491,-0.0342949964106083,0.574224054813385,0.761745095252991,0.0999165698885918 ,0.640125811100006,0.208346754312515,-0.195467948913574,0.95832347869873,0.263325154781342,-0.487631261348724 ,0.832391500473022,0.572269201278687,-0.327979475259781,0.751623213291168,0.516816318035126,-0.0720634460449219 ,0.85305792093277,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154 ,0.943840563297272,0.180788546800613,0.276551008224487,0.921807408332825,0.190687164664268,0.337504833936691 ,0.981701374053955,0.106130957603455,0.158109560608864,0.849806606769562,-0.0963085368275642,0.518221437931061 ,0.761745095252991,0.0999165698885918,0.640125811100006,0.857412695884705,0.318779200315475,0.404009103775024 ,0.849806606769562,-0.0963085368275642,0.518221437931061,0.56545478105545,-0.235293805599213,0.79050475358963 ,0.516816318035126,-0.0720634460449219,0.85305792093277,0.761745095252991,0.0999165698885918,0.640125811100006 ,0.56545478105545,-0.235293805599213,0.79050475358963,0.235414057970047,-0.349107831716537,0.907030284404755 ,0.208346754312515,-0.195467948913574,0.95832347869873,0.516816318035126,-0.0720634460449219,0.85305792093277 ,0.973640501499176,0.150164008140564,0.171682879328728,0.823427438735962,0.0464031770825386,0.565521001815796 ,0.849806606769562,-0.0963085368275642,0.518221437931061,0.981701374053955,0.106130957603455,0.158109560608864 ,0.823427438735962,0.0464031770825386,0.565521001815796,0.535846352577209,-0.072305366396904,0.841213762760162 ,0.56545478105545,-0.235293805599213,0.79050475358963,0.849806606769562,-0.0963085368275642,0.518221437931061 ,0.535846352577209,-0.072305366396904,0.841213762760162,0.199428960680962,-0.151153594255447,0.968184232711792 ,0.235414057970047,-0.349107831716537,0.907030284404755,0.56545478105545,-0.235293805599213,0.79050475358963 ,0.943840563297272,0.180788546800613,0.276551008224487,0.938613653182983,0.275698870420456,0.207351207733154 ,0.939432919025421,0.230844467878342,-0.253331035375595,0.932059586048126,0.251616179943085,-0.260680228471756 ,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.961426019668579,0.11484207212925,-0.249942690134048 ,0.938613653182983,0.275698870420456,0.207351207733154,0.90192449092865,0.307413011789322,0.303363531827927,0.857412695884705 ,0.318779200315475,0.404009103775024,0.899024188518524,0.213700130581856,0.382214337587357,0.90192449092865,0.307413011789322 ,0.303363531827927,0.777440786361694,0.387861609458923,0.495125412940979,0.981701374053955,0.106130957603455 ,0.158109560608864,0.857412695884705,0.318779200315475,0.404009103775024,0.777440786361694,0.387861609458923 ,0.495125412940979,0.921807408332825,0.190687164664268,0.337504833936691,0.970218658447266,-0.0381909385323524 ,0.239201232790947,0.837947964668274,0.531638920307159,-0.123301580548286,0.734350562095642,0.677913904190063 ,0.0340876169502735,0.938418209552765,0.0142068490386009,0.345209211111069,0.547434866428375,0.804429769515991 ,0.230668216943741,0.79800420999527,0.101907514035702,0.593973159790039,0.938418209552765,0.0142068490386009 ,0.345209211111069,0.734350562095642,0.677913904190063,0.0340876169502735,0.250951588153839,0.864162683486938 ,0.436172097921371,0.507640182971954,0.139722838997841,0.85016405582428,0.79800420999527,0.101907514035702,0.593973159790039 ,0.547434866428375,0.804429769515991,0.230668216943741,-0.0952283963561058,0.827900111675262,0.552732229232788 ,0.146060764789581,0.0914121642708778,0.985043168067932,0.507640182971954,0.139722838997841,0.85016405582428 ,0.250951588153839,0.864162683486938,0.436172097921371,0.793522596359253,-0.0159706063568592,0.608331143856049 ,0.937215089797974,-0.0726325064897537,0.341104626655579,0.938418209552765,0.0142068490386009,0.345209211111069 ,0.79800420999527,0.101907514035702,0.593973159790039,0.516034662723541,-0.0156709868460894,0.856424331665039 ,0.793522596359253,-0.0159706063568592,0.608331143856049,0.79800420999527,0.101907514035702,0.593973159790039 ,0.507640182971954,0.139722838997841,0.85016405582428,0.182312279939651,-0.0702581331133842,0.980727314949036 ,0.516034662723541,-0.0156709868460894,0.856424331665039,0.507640182971954,0.139722838997841,0.85016405582428 ,0.146060764789581,0.0914121642708778,0.985043168067932,0.95304924249649,0.093354158103466,0.288066178560257 ,0.970121920108795,0.115440391004086,0.213393971323967,0.987499356269836,0.0581452213227749,0.146506309509277 ,0.910413324832916,-0.164700835943222,0.379501283168793,0.793522596359253,-0.0159706063568592,0.608331143856049 ,0.799672067165375,0.218886733055115,0.559118211269379,0.952853143215179,0.227692276239395,0.200567096471787 ,0.937215089797974,-0.0726325064897537,0.341104626655579,0.516034662723541,-0.0156709868460894,0.856424331665039 ,0.508204519748688,0.144576266407967,0.849014639854431,0.799672067165375,0.218886733055115,0.559118211269379 ,0.793522596359253,-0.0159706063568592,0.608331143856049,0.182312279939651,-0.0702581331133842,0.980727314949036 ,0.149393752217293,0.076563760638237,0.985809028148651,0.508204519748688,0.144576266407967,0.849014639854431 ,0.516034662723541,-0.0156709868460894,0.856424331665039,0.799672067165375,0.218886733055115,0.559118211269379 ,0.823427438735962,0.0464031770825386,0.565521001815796,0.973640501499176,0.150164008140564,0.171682879328728 ,0.952853143215179,0.227692276239395,0.200567096471787,0.508204519748688,0.144576266407967,0.849014639854431 ,0.535846352577209,-0.072305366396904,0.841213762760162,0.823427438735962,0.0464031770825386,0.565521001815796 ,0.799672067165375,0.218886733055115,0.559118211269379,0.149393752217293,0.076563760638237,0.985809028148651 ,0.199428960680962,-0.151153594255447,0.968184232711792,0.535846352577209,-0.072305366396904,0.841213762760162 ,0.508204519748688,0.144576266407967,0.849014639854431,0.938012719154358,0.237205043435097,-0.252717018127441 ,0.987499356269836,0.0581452213227749,0.146506309509277,0.970121920108795,0.115440391004086,0.213393971323967 ,0.940755069255829,0.217000737786293,-0.260558247566223,0.987499356269836,0.0581452213227749,0.146506309509277 ,0.904506981372833,0.363091230392456,-0.223677977919579,0.837947964668274,0.531638920307159,-0.123301580548286 ,0.970218658447266,-0.0381909385323524,0.239201232790947,0.937215089797974,-0.0726325064897537,0.341104626655579 ,0.910413324832916,-0.164700835943222,0.379501283168793,0.970218658447266,-0.0381909385323524,0.239201232790947 ,0.938418209552765,0.0142068490386009,0.345209211111069,0.937215089797974,-0.0726325064897537,0.341104626655579 ,0.952853143215179,0.227692276239395,0.200567096471787,0.95304924249649,0.093354158103466,0.288066178560257,0.910413324832916 ,-0.164700835943222,0.379501283168793,0.95304924249649,0.093354158103466,0.288066178560257,0.948896646499634 ,0.107380241155624,0.296756833791733,0.960990369319916,0.131044924259186,0.24356672167778,0.970121920108795,0.115440391004086 ,0.213393971323967,0.943840563297272,0.180788546800613,0.276551008224487,0.932059586048126,0.251616179943085 ,-0.260680228471756,0.934666991233826,0.235346615314484,-0.26647624373436,0.960990369319916,0.131044924259186 ,0.24356672167778,0.934666991233826,0.235346615314484,-0.26647624373436,0.940755069255829,0.217000737786293,-0.260558247566223 ,0.970121920108795,0.115440391004086,0.213393971323967,0.960990369319916,0.131044924259186,0.24356672167778,0.960990369319916 ,0.131044924259186,0.24356672167778,0.948896646499634,0.107380241155624,0.296756833791733,0.921807408332825,0.190687164664268 ,0.337504833936691,0.943840563297272,0.180788546800613,0.276551008224487,-0.80164510011673,-0.0831164047122002 ,0.591993927955627,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.702580034732819,-0.699933290481567 ,0.128353402018547,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.401816695928574,-0.892981469631195 ,0.202799007296562,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.734745264053345,-0.160798713564873 ,0.659009218215942,-0.702580034732819,-0.699933290481567,0.128353402018547,0.026099681854248,-0.974704563617706 ,0.221968054771423,-0.10741464048624,-0.480259567499161,0.87052446603775,-0.503881514072418,-0.329790264368057 ,0.798336923122406,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.49835604429245,-0.197405397891998 ,0.844199240207672,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.734745264053345,-0.160798713564873 ,0.659009218215942,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.14765976369381,-0.247115641832352 ,0.957669258117676,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.503881514072418,-0.329790264368057 ,0.798336923122406,-0.10741464048624,-0.480259567499161,0.87052446603775,0.208346754312515,-0.195467948913574 ,0.95832347869873,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.10741464048624,-0.480259567499161 ,0.87052446603775,0.263325154781342,-0.487631261348724,0.832391500473022,-0.75111985206604,-0.269361168146133 ,0.602713465690613,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.857911825180054,-0.151918008923531 ,0.490824013948441,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.49835604429245,-0.197405397891998 ,0.844199240207672,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.806595921516418,-0.339085519313812 ,0.484173595905304,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.14765976369381,-0.247115641832352 ,0.957669258117676,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.540686428546906,-0.418503016233444 ,0.729735136032104,-0.49835604429245,-0.197405397891998,0.844199240207672,0.208346754312515,-0.195467948913574 ,0.95832347869873,0.235414057970047,-0.349107831716537,0.907030284404755,-0.155815601348877,-0.419202566146851 ,0.894421994686127,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.540686428546906,-0.418503016233444 ,0.729735136032104,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.822073340415955,-0.257045239210129 ,0.508058190345764,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.155815601348877,-0.419202566146851 ,0.894421994686127,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.566346526145935,-0.257577747106552 ,0.782882690429688,-0.540686428546906,-0.418503016233444,0.729735136032104,0.235414057970047,-0.349107831716537 ,0.907030284404755,0.199428960680962,-0.151153594255447,0.968184232711792,-0.190858513116837,-0.215845420956612 ,0.957592725753784,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.980304419994354,-0.197097584605217 ,-0.0124787287786603,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.808899223804474,-0.271904230117798 ,0.521296620368958,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.84135890007019,-0.538883864879608 ,0.041464950889349,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.857911825180054,-0.151918008923531 ,0.490824013948441,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.730372190475464,-0.0783009603619576 ,0.678546547889709,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.80164510011673,-0.0831164047122002 ,0.591993927955627,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.730372190475464,-0.0783009603619576 ,0.678546547889709,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.75111985206604,-0.269361168146133 ,0.602713465690613,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.733399271965027,-0.428732603788376 ,0.527554571628571,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.895388603210449,0.358975976705551 ,0.26346829533577,-0.972477912902832,0.193684712052345,0.12951023876667,-0.535216987133026,-0.203683137893677 ,0.819790184497833,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.442167282104492,0.71852970123291 ,0.536845564842224,-0.730377912521362,0.544562876224518,0.412309736013412,-0.224036976695061,-0.0279729403555393 ,0.974179148674011,0.146060764789581,0.0914121642708778,0.985043168067932,-0.0952283963561058,0.827900111675262 ,0.552732229232788,-0.442167282104492,0.71852970123291,0.536845564842224,-0.476952195167542,-0.30724024772644 ,0.823480427265167,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.695387840270996,-0.360292494297028 ,0.621791779994965,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.163414344191551,-0.171452105045319 ,0.971545159816742,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.535216987133026,-0.203683137893677 ,0.819790184497833,-0.476952195167542,-0.30724024772644,0.823480427265167,0.182312279939651,-0.0702581331133842 ,0.980727314949036,0.146060764789581,0.0914121642708778,0.985043168067932,-0.224036976695061,-0.0279729403555393 ,0.974179148674011,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.817899703979492,-0.355825662612915 ,0.452137291431427,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.754743993282318,-0.253586679697037 ,0.605025053024292,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.839219510555267,-0.174447998404503 ,0.515052020549774,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.476952195167542,-0.30724024772644 ,0.823480427265167,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.605567634105682,-0.0923453718423843 ,0.790417671203613,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.163414344191551,-0.171452105045319 ,0.971545159816742,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.239489018917084,-0.00514746597036719 ,0.970885396003723,0.149393752217293,0.076563760638237,0.985809028148651,0.182312279939651,-0.0702581331133842 ,0.980727314949036,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.822073340415955,-0.257045239210129 ,0.508058190345764,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.605567634105682,-0.0923453718423843 ,0.790417671203613,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.566346526145935,-0.257577747106552 ,0.782882690429688,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.239489018917084,-0.00514746597036719 ,0.970885396003723,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.190858513116837,-0.215845420956612 ,0.957592725753784,0.199428960680962,-0.151153594255447,0.968184232711792,0.149393752217293,0.076563760638237 ,0.985809028148651,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.81458967924118,-0.243902236223221 ,0.526265501976013,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.983128547668457,-0.182582557201386 ,-0.011038308031857,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.817899703979492,-0.355825662612915 ,0.452137291431427,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.972477912902832,0.193684712052345 ,0.12951023876667,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.658827900886536,-0.438512802124023 ,0.61127108335495,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.733399271965027,-0.428732603788376 ,0.527554571628571,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.754743993282318,-0.253586679697037 ,0.605025053024292,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.658827900886536,-0.438512802124023 ,0.61127108335495,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.981736660003662,-0.184043005108833 ,-0.0481799468398094,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.808899223804474,-0.271904230117798 ,0.521296620368958,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.81458967924118,-0.243902236223221 ,0.526265501976013,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.981736660003662,-0.184043005108833 ,-0.0481799468398094,-0.809050858020782,-0.2569739818573,0.528584063053131,0.955118477344513,-0.28173553943634 ,-0.0915084630250931,0.992223381996155,-0.121708244085312,0.0260738711804152,0.985335350036621,0.0123839350417256 ,-0.170178771018982,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.882815957069397,-0.369267553091049 ,0.290305823087692,0.903218030929565,-0.152758419513702,0.401076167821884,0.992223381996155,-0.121708244085312 ,0.0260738711804152,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.985335350036621,0.0123839350417256 ,-0.170178771018982,0.924062311649323,0.166339710354805,-0.344151109457016,0.961426019668579,0.11484207212925 ,-0.249942690134048,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.924062311649323,0.166339710354805 ,-0.344151109457016,0.798422634601593,0.345685362815857,-0.49297359585762,0.939432919025421,0.230844467878342 ,-0.253331035375595,0.961426019668579,0.11484207212925,-0.249942690134048,0.837947964668274,0.531638920307159 ,-0.123301580548286,0.843237340450287,0.525120317935944,-0.114888966083527,0.713566720485687,0.700178623199463 ,0.0239254627376795,0.734350562095642,0.677913904190063,0.0340876169502735,0.734350562095642,0.677913904190063 ,0.0340876169502735,0.713566720485687,0.700178623199463,0.0239254627376795,0.625909388065338,0.726224660873413 ,0.284315198659897,0.547434866428375,0.804429769515991,0.230668216943741,0.547434866428375,0.804429769515991 ,0.230668216943741,0.625909388065338,0.726224660873413,0.284315198659897,0.628335058689117,0.550278067588806 ,0.549899160861969,0.250951588153839,0.864162683486938,0.436172097921371,0.250951588153839,0.864162683486938 ,0.436172097921371,0.628335058689117,0.550278067588806,0.549899160861969,0.139649003744125,0.122624859213829 ,0.982578873634338,-0.0952283963561058,0.827900111675262,0.552732229232788,0.904506981372833,0.363091230392456 ,-0.223677977919579,0.87714958190918,0.359215557575226,-0.318704843521118,0.843237340450287,0.525120317935944 ,-0.114888966083527,0.837947964668274,0.531638920307159,-0.123301580548286,0.938012719154358,0.237205043435097 ,-0.252717018127441,0.868426561355591,0.2465450912714,-0.430175423622131,0.87714958190918,0.359215557575226,-0.318704843521118 ,0.904506981372833,0.363091230392456,-0.223677977919579,0.932059586048126,0.251616179943085,-0.260680228471756 ,0.796033978462219,0.30541729927063,-0.522541999816895,0.850903332233429,0.254371464252472,-0.459628790616989 ,0.934666991233826,0.235346615314484,-0.26647624373436,0.939432919025421,0.230844467878342,-0.253331035375595 ,0.798422634601593,0.345685362815857,-0.49297359585762,0.796033978462219,0.30541729927063,-0.522541999816895 ,0.932059586048126,0.251616179943085,-0.260680228471756,0.850903332233429,0.254371464252472,-0.459628790616989 ,0.863597810268402,0.181175544857979,-0.470504224300385,0.940755069255829,0.217000737786293,-0.260558247566223 ,0.934666991233826,0.235346615314484,-0.26647624373436,0.863597810268402,0.181175544857979,-0.470504224300385 ,0.868426561355591,0.2465450912714,-0.430175423622131,0.938012719154358,0.237205043435097,-0.252717018127441 ,0.940755069255829,0.217000737786293,-0.260558247566223,-0.84135890007019,-0.538883864879608,0.041464950889349 ,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.657594680786133,-0.753369987010956,0.00171860994305462 ,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.702580034732819,-0.699933290481567,0.128353402018547 ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.298704415559769,-0.948391199111938,0.106441475450993 ,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.401816695928574,-0.892981469631195,0.202799007296562 ,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.293226510286331,-0.722825050354004,0.625733315944672 ,0.026099681854248,-0.974704563617706,0.221968054771423,-0.933254837989807,-0.359125286340714,-0.00803146045655012 ,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.680876314640045,-0.688694536685944,-0.249213308095932 ,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.980304419994354,-0.197097584605217,-0.0124787287786603 ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.846266686916351,-0.512883901596069,-0.144162610173225 ,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.895388603210449,0.358975976705551,0.26346829533577 ,-0.912629246711731,0.357585817575455,0.198091477155685,-0.964486479759216,0.261449635028839,0.0375484488904476 ,-0.972477912902832,0.193684712052345,0.12951023876667,-0.730377912521362,0.544562876224518,0.412309736013412 ,-0.750467360019684,0.503474771976471,0.428149402141571,-0.912629246711731,0.357585817575455,0.198091477155685 ,-0.895388603210449,0.358975976705551,0.26346829533577,-0.442167282104492,0.71852970123291,0.536845564842224 ,-0.644507586956024,0.336329728364944,0.686652958393097,-0.750467360019684,0.503474771976471,0.428149402141571 ,-0.730377912521362,0.544562876224518,0.412309736013412,-0.0952283963561058,0.827900111675262,0.552732229232788 ,0.139649003744125,0.122624859213829,0.982578873634338,-0.644507586956024,0.336329728364944,0.686652958393097 ,-0.442167282104492,0.71852970123291,0.536845564842224,-0.964486479759216,0.261449635028839,0.0375484488904476 ,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.999559104442596,-0.0023001697845757,0.0296011492609978 ,-0.972477912902832,0.193684712052345,0.12951023876667,-0.994358837604523,0.088942214846611,0.0577910803258419 ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.983128547668457,-0.182582557201386,-0.011038308031857 ,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.978760063648224,-0.199930444359779,-0.0453491657972336 ,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.986363708972931,-0.161525458097458,-0.0315617434680462 ,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.979109942913055,-0.187053516507149,-0.0797165557742119 ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.980304419994354,-0.197097584605217,-0.0124787287786603 ,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.976574420928955,-0.212938129901886,-0.0309790316969156 ,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.978760063648224,-0.199930444359779,-0.0453491657972336 ,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.983128547668457,-0.182582557201386,-0.011038308031857 ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.961961030960083,-0.248708829283714,-0.113026410341263 ,-0.976574420928955,-0.212938129901886,-0.0309790316969156,0.90192449092865,0.307413011789322,0.303363531827927 ,0.938613653182983,0.275698870420456,0.207351207733154,0.777440786361694,0.387861609458923,0.495125412940979 ,0.938613653182983,0.275698870420456,0.207351207733154,0.961426019668579,0.11484207212925,-0.249942690134048 ,0.939432919025421,0.230844467878342,-0.253331035375595,0.970218658447266,-0.0381909385323524,0.239201232790947 ,0.910413324832916,-0.164700835943222,0.379501283168793,0.987499356269836,0.0581452213227749,0.146506309509277 ,0.987499356269836,0.0581452213227749,0.146506309509277,0.938012719154358,0.237205043435097,-0.252717018127441 ,0.904506981372833,0.363091230392456,-0.223677977919579,-0.80164510011673,-0.0831164047122002,0.591993927955627 ,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.857911825180054,-0.151918008923531,0.490824013948441 ,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.980304419994354,-0.197097584605217,-0.0124787287786603 ,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.733399271965027,-0.428732603788376,0.527554571628571 ,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.585005640983582,-0.507526874542236,0.632601678371429 ,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.999559104442596,-0.0023001697845757,0.0296011492609978 ,-0.983128547668457,-0.182582557201386,-0.011038308031857,0.633086621761322,-0.179429575800896,0.752998232841492 ,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931 ,0.268051654100418,-0.524244606494904,0.808279573917389,0.0315268374979496,0.564418375492096,0.824886620044708 ,-0.397260129451752,0.234844520688057,0.887148499488831,-0.414126962423325,0.480852067470551,0.772839069366455 ,0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455 ,-0.397260129451752,0.234844520688057,0.887148499488831,-0.642944931983948,0.0801258310675621,0.761709690093994 ,-0.644507586956024,0.336329728364944,0.686652958393097,-0.278751373291016,-0.37135124206543,0.88566130399704 ,-0.644507586956024,0.336329728364944,0.686652958393097,0.139649003744125,0.122624859213829,0.982578873634338 ,0.268051654100418,-0.524244606494904,0.808279573917389,-0.278751373291016,-0.37135124206543,0.88566130399704 ,0.139649003744125,0.122624859213829,0.982578873634338,0.628335058689117,0.550278067588806,0.549899160861969 ,0.633086621761322,-0.179429575800896,0.752998232841492,0.268051654100418,-0.524244606494904,0.808279573917389 ,0.633086621761322,-0.179429575800896,0.752998232841492,0.628335058689117,0.550278067588806,0.549899160861969 ,0.54774808883667,0.373568952083588,0.74861091375351,0.398782223463058,0.608129858970642,0.686404287815094,0.54774808883667 ,0.373568952083588,0.74861091375351,0.0315268374979496,0.564418375492096,0.824886620044708,0.0181612763553858 ,0.599665701389313,0.800044476985931,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858 ,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.278751373291016 ,-0.37135124206543,0.88566130399704,0.268051654100418,-0.524244606494904,0.808279573917389,0.948896646499634 ,0.107380241155624,0.296756833791733,0.95304924249649,0.093354158103466,0.288066178560257,0.952853143215179,0.227692276239395 ,0.200567096471787,0.973640501499176,0.150164008140564,0.171682879328728,0.921807408332825,0.190687164664268 ,0.337504833936691,0.948896646499634,0.107380241155624,0.296756833791733,0.973640501499176,0.150164008140564 ,0.171682879328728,0.981701374053955,0.106130957603455,0.158109560608864,-0.809050858020782,-0.2569739818573 ,0.528584063053131,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.75111985206604,-0.269361168146133 ,0.602713465690613,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.743283689022064,-0.261148422956467 ,0.615898430347443,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.806595921516418,-0.339085519313812 ,0.484173595905304,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.754743993282318,-0.253586679697037 ,0.605025053024292,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.822073340415955,-0.257045239210129 ,0.508058190345764,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.809050858020782,-0.2569739818573 ,0.528584063053131,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.754743993282318,-0.253586679697037 ,0.605025053024292,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.695387840270996,-0.360292494297028 ,0.621791779994965,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.730377912521362,0.544562876224518 ,0.412309736013412,-0.895388603210449,0.358975976705551,0.26346829533577,-0.734731197357178,-0.22553177177906 ,0.639769911766052,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.840797781944275,-0.253655642271042 ,0.478244692087173,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.371589094400406,-0.191971749067307 ,0.908332765102386,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.640028655529022,-0.393081039190292 ,0.660189807415009,-0.340044319629669,-0.38835272192955,0.856476545333862,0.71001797914505,-0.0603355132043362 ,0.701593995094299,0.799828112125397,-0.075599230825901,0.595449209213257,0.562524676322937,-0.508338332176209 ,0.652041435241699,0.415581941604614,-0.137492552399635,0.899103701114655,-0.738620281219482,0.158259704709053 ,0.655281603336334,-0.664949595928192,0.242700353264809,0.706355810165405,-0.635453879833221,-0.442719787359238 ,0.632611691951752,0.41880676150322,-0.0415473021566868,0.907124400138855,0.0549214817583561,-0.121100522577763 ,0.991119742393494,0.0793883204460144,-0.368574857711792,0.926201999187469,0.409103959798813,-0.270957797765732 ,0.8713299036026,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.879705667495728,-0.112221792340279 ,0.462086796760559,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.787253379821777,-0.358191251754761 ,0.501927375793457,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.644040644168854,-0.339113295078278 ,0.685721397399902,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.66814124584198,-0.354110926389694 ,0.654364347457886,-0.323071241378784,-0.339786946773529,0.883272171020508,0.542647838592529,0.604447543621063 ,0.583246529102325,0.674828827381134,0.533339440822601,0.510054051876068,0.817657768726349,0.451825648546219 ,0.356776267290115,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.996665477752686,0.0815145745873451 ,0.0036500059068203,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.938033282756805,-0.126567348837852 ,0.322605550289154,0.478552430868149,0.592504560947418,0.648016929626465,0.723428726196289,-0.0725484043359756 ,0.686576724052429,0.931710660457611,0.00594053184613585,0.363152772188187,0.83936071395874,0.300622671842575 ,0.452879250049591,0.542647838592529,0.604447543621063,0.583246529102325,0.478552430868149,0.592504560947418 ,0.648016929626465,0.83936071395874,0.300622671842575,0.452879250049591,0.674828827381134,0.533339440822601,0.510054051876068 ,0.904658854007721,-0.172026917338371,0.389870554208755,0.679584980010986,-0.597025573253632,0.426291733980179 ,0.562524676322937,-0.508338332176209,0.652041435241699,0.799828112125397,-0.075599230825901,0.595449209213257 ,0.931710660457611,0.00594053184613585,0.363152772188187,0.723428726196289,-0.0725484043359756,0.686576724052429 ,0.679584980010986,-0.597025573253632,0.426291733980179,0.904658854007721,-0.172026917338371,0.389870554208755 ,0.419204384088516,0.619329214096069,0.663851618766785,0.713757336139679,-0.0291267577558756,0.699787139892578 ,0.723428726196289,-0.0725484043359756,0.686576724052429,0.478552430868149,0.592504560947418,0.648016929626465 ,0.454763680696487,0.657829880714417,0.600374758243561,0.419204384088516,0.619329214096069,0.663851618766785 ,0.478552430868149,0.592504560947418,0.648016929626465,0.542647838592529,0.604447543621063,0.583246529102325 ,0.679584980010986,-0.597025573253632,0.426291733980179,0.88217830657959,-0.427934646606445,0.19655367732048 ,0.769319772720337,-0.500670611858368,0.396832406520844,0.562524676322937,-0.508338332176209,0.652041435241699 ,0.723428726196289,-0.0725484043359756,0.686576724052429,0.713757336139679,-0.0291267577558756,0.699787139892578 ,0.88217830657959,-0.427934646606445,0.19655367732048,0.679584980010986,-0.597025573253632,0.426291733980179 ,0.419204384088516,0.619329214096069,0.663851618766785,0.211952582001686,0.670883417129517,0.710627555847168 ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.713757336139679,-0.0291267577558756,0.699787139892578 ,0.998829364776611,0.0265165809541941,-0.040457472205162,0.828034996986389,-0.0658707618713379,0.556793570518494 ,0.769319772720337,-0.500670611858368,0.396832406520844,0.88217830657959,-0.427934646606445,0.19655367732048 ,0.882227420806885,-0.112881802022457,0.457091331481934,0.998829364776611,0.0265165809541941,-0.040457472205162 ,0.88217830657959,-0.427934646606445,0.19655367732048,0.713757336139679,-0.0291267577558756,0.699787139892578 ,0.45019194483757,-0.821827292442322,0.349180638790131,0.392352849245071,-0.511246860027313,0.764647543430328 ,0.717177391052246,-0.236680090427399,0.655468583106995,0.938493072986603,-0.335132718086243,0.0831675454974175 ,0.415358334779739,-0.555045127868652,0.720695734024048,0.45019194483757,-0.821827292442322,0.349180638790131 ,0.938493072986603,-0.335132718086243,0.0831675454974175,0.845881640911102,-0.333893984556198,0.415931522846222 ,0.0997511595487595,0.3437180519104,0.933759927749634,-0.0513959974050522,-0.174092352390289,0.983387172222137 ,-0.129297733306885,0.717350006103516,0.68461012840271,0.380322515964508,-0.00781834218651056,0.924820899963379 ,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.448386162519455,-0.404915392398834,0.796864748001099 ,0.381502151489258,-0.250341862440109,0.889823019504547,0.45019194483757,-0.821827292442322,0.349180638790131 ,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.147943556308746,-0.468891173601151,0.870777666568756 ,0.392352849245071,-0.511246860027313,0.764647543430328,0.415358334779739,-0.555045127868652,0.720695734024048 ,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.47701033949852,-0.793649733066559,0.377599358558655 ,0.45019194483757,-0.821827292442322,0.349180638790131,-0.129297733306885,0.717350006103516,0.68461012840271 ,-0.214603140950203,0.506344437599182,0.835201025009155,-0.225461483001709,-0.22565546631813,0.947758793830872 ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.211952582001686,0.670883417129517,0.710627555847168 ,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.214603140950203,0.506344437599182,0.835201025009155 ,-0.129297733306885,0.717350006103516,0.68461012840271,-0.0513959974050522,-0.174092352390289,0.983387172222137 ,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.518838763237,-0.706463754177094,0.481368243694305 ,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.491936564445496,-0.3821080327034,0.782299101352692 ,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.225461483001709,-0.22565546631813,0.947758793830872 ,-0.518838763237,-0.706463754177094,0.481368243694305,-0.870778322219849,-0.383099049329758,0.308188587427139 ,-0.664949595928192,0.242700353264809,0.706355810165405,-0.738620281219482,0.158259704709053,0.655281603336334 ,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.508101880550385,0.373251050710678,0.776219129562378 ,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.644040644168854,-0.339113295078278,0.685721397399902 ,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.245217561721802,-0.767791271209717,0.59191632270813 ,-0.508101880550385,0.373251050710678,0.776219129562378,-0.786463916301727,-0.0169835556298494,0.617402672767639 ,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.395677655935287,-0.301782429218292,0.867390632629395 ,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.650932431221008,-0.45871701836586,0.604868352413177 ,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.395677655935287,-0.301782429218292,0.867390632629395 ,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.786463916301727,-0.0169835556298494,0.617402672767639 ,-0.738620281219482,0.158259704709053,0.655281603336334,-0.644040644168854,-0.339113295078278,0.685721397399902 ,0.380322515964508,-0.00781834218651056,0.924820899963379,0.381502151489258,-0.250341862440109,0.889823019504547 ,0.882227420806885,-0.112881802022457,0.457091331481934,0.713757336139679,-0.0291267577558756,0.699787139892578 ,-0.214603140950203,0.506344437599182,0.835201025009155,-0.508101880550385,0.373251050710678,0.776219129562378 ,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.225461483001709,-0.22565546631813,0.947758793830872 ,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.279380530118942,-0.650672852993011,0.706095814704895 ,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.518838763237,-0.706463754177094,0.481368243694305 ,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.245217561721802,-0.767791271209717,0.59191632270813 ,-0.518838763237,-0.706463754177094,0.481368243694305,-0.225461483001709,-0.22565546631813,0.947758793830872 ,0.904658854007721,-0.172026917338371,0.389870554208755,0.799828112125397,-0.075599230825901,0.595449209213257 ,0.674828827381134,0.533339440822601,0.510054051876068,0.83936071395874,0.300622671842575,0.452879250049591,0.728648900985718 ,-0.0937679037451744,0.678438127040863,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322 ,-0.0415473021566868,0.907124400138855,0.409103959798813,-0.270957797765732,0.8713299036026,0.0549214817583561 ,-0.121100522577763,0.991119742393494,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.340044319629669 ,-0.38835272192955,0.856476545333862,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.635453879833221 ,-0.442719787359238,0.632611691951752,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.734731197357178 ,-0.22553177177906,0.639769911766052,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.738620281219482 ,0.158259704709053,0.655281603336334,0.358441174030304,0.000843510264530778,0.933551967144012,0.072246678173542 ,-0.0245807897299528,0.997083842754364,0.0549214817583561,-0.121100522577763,0.991119742393494,0.41880676150322 ,-0.0415473021566868,0.907124400138855,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.491936564445496 ,-0.3821080327034,0.782299101352692,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.279380530118942 ,-0.650672852993011,0.706095814704895,0.415581941604614,-0.137492552399635,0.899103701114655,0.562524676322937 ,-0.508338332176209,0.652041435241699,0.769319772720337,-0.500670611858368,0.396832406520844,0.828034996986389 ,-0.0658707618713379,0.556793570518494,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.996665477752686 ,0.0815145745873451,0.0036500059068203,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.840797781944275 ,-0.253655642271042,0.478244692087173,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.884543001651764 ,-0.164741396903992,0.436398863792419,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.640028655529022 ,-0.393081039190292,0.660189807415009,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.662939727306366 ,-0.253610551357269,0.70440936088562,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.840797781944275 ,-0.253655642271042,0.478244692087173,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.66814124584198 ,-0.354110926389694,0.654364347457886,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.280184537172318 ,-0.219449639320374,0.934525847434998,0.883821845054626,0.46681609749794,-0.0306868441402912,0.817657768726349 ,0.451825648546219,0.356776267290115,0.900879740715027,0.256662726402283,0.350056976079941,0.901214420795441 ,0.431201189756393,-0.0433364585042,0.904658854007721,-0.172026917338371,0.389870554208755,0.83936071395874,0.300622671842575 ,0.452879250049591,0.931710660457611,0.00594053184613585,0.363152772188187,-0.786463916301727,-0.0169835556298494 ,0.617402672767639,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.703794181346893,-0.329490482807159 ,0.629372477531433,0.617214262485504,-0.750285804271698,0.236891880631447,0.713743150234222,-0.689680516719818 ,-0.122112594544888,0.969275593757629,-0.197328850626946,0.146854087710381,0.76043301820755,-0.311322569847107 ,0.569929718971252,0.432984858751297,-0.720436871051788,0.541751623153687,0.617214262485504,-0.750285804271698 ,0.236891880631447,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873 ,0.85297966003418,0.399355500936508,-0.336066722869873,0.85297966003418,0.0704309046268463,-0.316668450832367 ,0.945917844772339,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788 ,0.541751623153687,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.378215819597244,-0.383805155754089 ,0.842405080795288,-0.289891123771667,-0.78655070066452,0.545253217220306,0.139990121126175,-0.714202702045441 ,0.685796797275543,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389 ,0.579359292984009,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.289891123771667,-0.78655070066452 ,0.545253217220306,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.526285529136658,-0.789061963558197 ,0.316867142915726,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.175360560417175,-0.976183235645294 ,-0.127729922533035,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.491936564445496,-0.3821080327034 ,0.782299101352692,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.280184537172318,-0.219449639320374 ,0.934525847434998,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.870778322219849,-0.383099049329758 ,0.308188587427139,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.147943556308746,-0.468891173601151 ,0.870777666568756,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.505195796489716,-0.403650432825089 ,0.762786626815796,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.870778322219849,-0.383099049329758 ,0.308188587427139,-0.913633704185486,-0.352534234523773,0.202467292547226,0.381502151489258,-0.250341862440109 ,0.889823019504547,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.505195796489716,-0.403650432825089 ,0.762786626815796,0.369075655937195,-0.252174496650696,0.894534051418304,0.882227420806885,-0.112881802022457 ,0.457091331481934,0.381502151489258,-0.250341862440109,0.889823019504547,0.369075655937195,-0.252174496650696 ,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.901904165744781,-0.103395886719227 ,0.419378310441971,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.998829364776611,0.0265165809541941 ,-0.040457472205162,0.882227420806885,-0.112881802022457,0.457091331481934,0.717177391052246,-0.236680090427399 ,0.655468583106995,0.828034996986389,-0.0658707618713379,0.556793570518494,0.998829364776611,0.0265165809541941 ,-0.040457472205162,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.938493072986603,-0.335132718086243 ,0.0831675454974175,0.358441174030304,0.000843510264530778,0.933551967144012,0.415581941604614,-0.137492552399635 ,0.899103701114655,0.828034996986389,-0.0658707618713379,0.556793570518494,0.717177391052246,-0.236680090427399 ,0.655468583106995,0.71001797914505,-0.0603355132043362,0.701593995094299,0.415581941604614,-0.137492552399635 ,0.899103701114655,0.358441174030304,0.000843510264530778,0.933551967144012,0.698577165603638,0.0347565114498138 ,0.714690029621124,0.71001797914505,-0.0603355132043362,0.701593995094299,0.698577165603638,0.0347565114498138 ,0.714690029621124,0.922343671321869,0.13623221218586,0.361556380987167,0.927353084087372,0.117294065654278,0.355328530073166 ,0.956080257892609,0.274207085371017,-0.103542387485504,0.927353084087372,0.117294065654278,0.355328530073166 ,0.922343671321869,0.13623221218586,0.361556380987167,0.962835073471069,0.210140570998192,-0.169674947857857 ,-0.750467360019684,0.503474771976471,0.428149402141571,-0.644507586956024,0.336329728364944,0.686652958393097 ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.011982899159193,-0.684736132621765,0.728692591190338 ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.727824807167053,-0.528583109378815,-0.436887800693512 ,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.978760063648224,-0.199930444359779,-0.0453491657972336 ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.944730460643768,-0.313157916069031,-0.0970383062958717 ,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.36346247792244,-0.894582808017731,-0.260031878948212 ,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.896283984184265,-0.348051100969315,-0.274837076663971 ,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.750467360019684,0.503474771976471,0.428149402141571 ,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.227918326854706,-0.765941560268402,0.601154506206512 ,-0.912629246711731,0.357585817575455,0.198091477155685,-0.797184348106384,-0.0889851674437523,-0.597142159938812 ,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.552984535694122,0.0753506049513817,-0.829777300357819 ,-0.826197624206543,-0.211467355489731,-0.522186815738678,0.495204418897629,-0.163849160075188,0.853185832500458 ,0.628335058689117,0.550278067588806,0.549899160861969,0.625909388065338,0.726224660873413,0.284315198659897 ,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.896283984184265,-0.348051100969315,-0.274837076663971 ,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.722859144210815,-0.480000674724579,-0.497065395116806 ,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.361754894256592,-0.299040019512177,-0.883011043071747 ,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.36346247792244,-0.894582808017731,-0.260031878948212 ,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.154521003365517,0.240299493074417,-0.958321154117584 ,0.184527859091759,0.31499707698822,-0.930981338024139,0.204966142773628,0.497180044651031,-0.843090057373047 ,0.868426561355591,0.2465450912714,-0.430175423622131,0.854514420032501,0.21429717540741,-0.473161548376083,0.847418010234833 ,0.181933760643005,-0.49878141283989,0.86673891544342,0.195172861218452,-0.458989411592484,0.86673891544342,0.195172861218452 ,-0.458989411592484,0.924738705158234,0.24395327270031,-0.29213884472847,0.87714958190918,0.359215557575226,-0.318704843521118 ,0.828140437602997,-0.416388809680939,0.375238239765167,0.713566720485687,0.700178623199463,0.0239254627376795 ,0.843237340450287,0.525120317935944,-0.114888966083527,0.883931815624237,-0.461925357580185,-0.0727289691567421 ,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.506913185119629,-0.816672563552856,-0.275835067033768 ,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.865038812160492,0.500161468982697,0.0393235273659229 ,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.506913185119629,-0.816672563552856,-0.275835067033768 ,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.467275679111481,0.564712703227997,-0.680259525775909 ,0.153497099876404,0.630856812000275,-0.76056444644928,0.387114733457565,-0.80674409866333,-0.446437150239944 ,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.136648282408714,0.56611156463623,-0.812923669815063 ,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.467275679111481,0.564712703227997,-0.680259525775909 ,-0.136648282408714,0.56611156463623,-0.812923669815063,0.141500309109688,-0.856403529644012,-0.496538639068604 ,0.387114733457565,-0.80674409866333,-0.446437150239944,0.153497099876404,0.630856812000275,-0.76056444644928 ,0.343719273805618,0.683673620223999,-0.643775939941406,0.582785487174988,-0.706441342830658,-0.40162381529808 ,-0.733602643013,0.104122340679169,-0.671554684638977,-0.784134566783905,-0.509350836277008,-0.354534596204758 ,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.809531450271606,0.353956669569016,0.468373239040375 ,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.747647523880005,-0.00706110056489706,-0.664058268070221 ,0.794842600822449,-0.0390454083681107,-0.605558216571808,-0.00303205195814371,-0.243413895368576,-0.969917774200439 ,0.370678871870041,0.354065299034119,-0.858623862266541,0.985135495662689,0.16939789056778,0.0285019427537918 ,0.181528016924858,-0.138318374752998,-0.973609566688538,0.287791073322296,-0.680340945720673,-0.67402708530426 ,0.412972420454025,-0.0658904165029526,-0.908356904983521,-0.604859709739685,-0.787493765354156,-0.118314750492573 ,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.802786946296692,0.346281349658966,0.485409408807755 ,-0.855425894260406,0.486632615327835,-0.177299648523331,0.412972420454025,-0.0658904165029526,-0.908356904983521 ,0.287791073322296,-0.680340945720673,-0.67402708530426,0.445772647857666,-0.772406101226807,-0.452410876750946 ,0.725067377090454,0.0188654419034719,-0.688419461250305,-0.412408858537674,0.0103200003504753,-0.910940408706665 ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.802456378936768,-0.12530305981636,-0.583406329154968 ,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.847418010234833,0.181933760643005,-0.49878141283989 ,0.854514420032501,0.21429717540741,-0.473161548376083,0.788738131523132,0.260696917772293,-0.556712925434113 ,0.767102777957916,0.172567009925842,-0.617878556251526,0.711101770401001,0.454571276903152,-0.536375999450684 ,0.700349986553192,0.341331839561462,-0.626899063587189,0.817859530448914,0.310457706451416,-0.484480977058411 ,0.811875224113464,0.435735166072845,-0.388578832149506,-0.972312390804291,-0.209807604551315,-0.102904692292213 ,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.826197624206543,-0.211467355489731,-0.522186815738678 ,-0.944730460643768,-0.313157916069031,-0.0970383062958717,0.804398238658905,0.375304967164993,-0.460531920194626 ,0.850323617458344,0.228136360645294,-0.474239885807037,0.796033978462219,0.30541729927063,-0.522541999816895 ,0.804398238658905,0.375304967164993,-0.460531920194626,0.904132843017578,0.38877084851265,-0.177203312516212 ,0.783251345157623,0.53278785943985,-0.320397257804871,0.811875224113464,0.435735166072845,-0.388578832149506 ,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.794855117797852,0.412983626127243,-0.444578289985657 ,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.604859709739685,-0.787493765354156,-0.118314750492573 ,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.478379726409912,0.39488697052002,-0.784357786178589 ,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.461797803640366,-0.839399814605713,-0.286619544029236 ,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.135029509663582,-0.80270379781723,-0.580890357494354 ,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.478379726409912,0.39488697052002,-0.784357786178589 ,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.247284039855003,0.510108411312103,-0.823796093463898 ,0.286900162696838,-0.815463900566101,-0.502699613571167,0.135029509663582,-0.80270379781723,-0.580890357494354 ,0.468129217624664,-0.774566531181335,-0.425325512886047,0.286900162696838,-0.815463900566101,-0.502699613571167 ,0.247284039855003,0.510108411312103,-0.823796093463898,0.525159299373627,0.660153150558472,-0.537034034729004 ,0.821175813674927,-0.555518984794617,0.130648210644722,0.468129217624664,-0.774566531181335,-0.425325512886047 ,0.525159299373627,0.660153150558472,-0.537034034729004,0.81356155872345,0.572328507900238,0.102750584483147 ,0.261260062456131,-0.761487662792206,0.593194544315338,0.419214755296707,-0.523533642292023,0.741735517978668 ,-0.397260129451752,0.234844520688057,0.887148499488831,0.0315268374979496,0.564418375492096,0.824886620044708 ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.642944931983948,0.0801258310675621,0.761709690093994 ,-0.397260129451752,0.234844520688057,0.887148499488831,0.689028441905975,-0.416694343090057,0.592963397502899 ,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.39990708231926,0.909411907196045,-0.114211864769459 ,-0.886275291442871,0.375701189041138,0.270859181880951,-0.888629198074341,0.438762098550797,0.133514106273651 ,0.749106764793396,0.343264579772949,-0.56657612323761,0.741937816143036,0.455005794763565,-0.492440849542618 ,0.797342956066132,0.463364690542221,-0.386700719594955,0.825478971004486,0.333341240882874,-0.455486595630646 ,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.738151073455811,0.192115649580956,-0.646702826023102 ,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.903565168380737,0.0908703580498695,-0.418703347444534 ,0.784849643707275,0.264893710613251,-0.560216426849365,0.808817446231842,0.214464277029037,-0.547557651996613 ,0.833951056003571,0.203840136528015,-0.512810707092285,0.841212332248688,0.233560338616371,-0.487659126520157 ,0.582049369812012,-0.552822172641754,-0.596327304840088,0.750801265239716,0.03514039888978,-0.659592807292938 ,0.847964406013489,0.0018927511991933,-0.530049800872803,0.632658183574677,-0.595792829990387,-0.494746923446655 ,0.964388489723206,0.187021419405937,-0.187023624777794,0.974583148956299,0.15406733751297,-0.162637546658516 ,0.841212332248688,0.233560338616371,-0.487659126520157,0.833951056003571,0.203840136528015,-0.512810707092285 ,0.904132843017578,0.38877084851265,-0.177203312516212,0.883821845054626,0.46681609749794,-0.0306868441402912 ,0.789179563522339,0.518753051757813,-0.328771829605103,0.783251345157623,0.53278785943985,-0.320397257804871 ,0.215944558382034,0.319608330726624,-0.922614991664886,-0.28614467382431,0.227497309446335,-0.930787920951843 ,-0.323528319597244,0.300020337104797,-0.89739465713501,0.224338784813881,0.414775222539902,-0.881835401058197 ,-0.233401030302048,0.186044618487358,-0.954416751861572,0.2085961997509,0.239187613129616,-0.948302090167999 ,0.168669149279594,0.29014664888382,-0.942000865936279,-0.261592835187912,0.265700459480286,-0.927886009216309 ,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.930256605148315,-0.364659577608109,-0.0405716709792614 ,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.846266686916351,-0.512883901596069,-0.144162610173225 ,0.903218030929565,-0.152758419513702,0.401076167821884,0.542647838592529,0.604447543621063,0.583246529102325 ,0.817657768726349,0.451825648546219,0.356776267290115,0.992223381996155,-0.121708244085312,0.0260738711804152 ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.787253379821777,-0.358191251754761,0.501927375793457 ,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.298704415559769,-0.948391199111938,0.106441475450993 ,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.76449728012085,0.158614858984947,-0.624808132648468 ,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.897854268550873,-0.19834990799427,-0.393083959817886 ,0.740222573280334,0.520439863204956,-0.4256911277771,0.7084801197052,0.54767894744873,-0.445088446140289,0.783251345157623 ,0.53278785943985,-0.320397257804871,0.789179563522339,0.518753051757813,-0.328771829605103,0.216972485184669 ,0.595779240131378,-0.773285210132599,0.233416378498077,0.501707494258881,-0.832950413227081,-0.337705463171005 ,0.352743804454803,-0.872655034065247,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.903565168380737 ,0.0908703580498695,-0.418703347444534,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.638863980770111 ,0.0889059156179428,-0.764165282249451,-0.894527077674866,-0.0458483695983887,-0.444656252861023,0.749106764793396 ,0.343264579772949,-0.56657612323761,0.825478971004486,0.333341240882874,-0.455486595630646,0.83752965927124 ,0.20064052939415,-0.508219838142395,0.794304847717285,0.190871343016624,-0.576756417751312,-0.28614467382431 ,0.227497309446335,-0.930787920951843,0.215944558382034,0.319608330726624,-0.922614991664886,0.222743824124336 ,0.213152140378952,-0.951289296150208,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.880043566226959 ,-0.142866209149361,-0.452893614768982,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.688710927963257 ,0.127927929162979,-0.713660776615143,-0.907213628292084,-0.0245506521314383,-0.419953256845474,0.847964406013489 ,0.0018927511991933,-0.530049800872803,0.971639752388,-0.0853487625718117,-0.220526039600372,0.698415637016296 ,-0.626996219158173,-0.345096111297607,0.632658183574677,-0.595792829990387,-0.494746923446655,-0.107030250132084 ,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.700080990791321 ,-0.0367838852107525,-0.713115334510803,-0.255131036043167,0.019106624647975,-0.966717660427094,0.711101770401001 ,0.454571276903152,-0.536375999450684,0.811875224113464,0.435735166072845,-0.388578832149506,0.783251345157623 ,0.53278785943985,-0.320397257804871,0.7084801197052,0.54767894744873,-0.445088446140289,0.216972485184669,0.595779240131378 ,-0.773285210132599,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.232910394668579,0.366851598024368 ,-0.900651276111603,0.204966142773628,0.497180044651031,-0.843090057373047,-0.826197624206543,-0.211467355489731 ,-0.522186815738678,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.704469919204712,0.0606652796268463 ,-0.707136392593384,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.784849643707275,0.264893710613251 ,-0.560216426849365,0.841212332248688,0.233560338616371,-0.487659126520157,0.847964406013489,0.0018927511991933 ,-0.530049800872803,0.750801265239716,0.03514039888978,-0.659592807292938,0.156650885939598,0.00669354572892189 ,-0.987631380558014,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.261592835187912,0.265700459480286 ,-0.927886009216309,0.168669149279594,0.29014664888382,-0.942000865936279,-0.987256348133087,-0.145976811647415 ,-0.063369482755661,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.901192605495453,-0.155655428767204 ,-0.404503762722015,-0.937702357769012,-0.340810507535934,-0.0675463825464249,0.924062311649323,0.166339710354805 ,-0.344151109457016,0.904132843017578,0.38877084851265,-0.177203312516212,0.804398238658905,0.375304967164993 ,-0.460531920194626,0.798422634601593,0.345685362815857,-0.49297359585762,0.633183419704437,0.759799301624298 ,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.582785487174988,-0.706441342830658 ,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.495204418897629,-0.163849160075188 ,0.853185832500458,0.625909388065338,0.726224660873413,0.284315198659897,0.69633674621582,-0.401266545057297 ,0.595063328742981,0.54774808883667,0.373568952083588,0.74861091375351,0.0833947658538818,-0.437338054180145 ,0.895422101020813,0.127582147717476,-0.649050772190094,0.749970614910126,-0.397260129451752,0.234844520688057 ,0.887148499488831,0.419214755296707,-0.523533642292023,0.741735517978668,0.689028441905975,-0.416694343090057 ,0.592963397502899,0.788738131523132,0.260696917772293,-0.556712925434113,0.680371522903442,0.248313769698143 ,-0.689517855644226,0.468770742416382,0.121921703219414,-0.874865233898163,0.767102777957916,0.172567009925842 ,-0.617878556251526,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.107030250132084,-0.605656087398529 ,-0.788495600223541,-0.255131036043167,0.019106624647975,-0.966717660427094,0.156650885939598,0.00669354572892189 ,-0.987631380558014,0.969275593757629,-0.197328850626946,0.146854087710381,0.955532789230347,0.0592790879309177 ,0.288865029811859,0.728648900985718,-0.0937679037451744,0.678438127040863,0.76043301820755,-0.311322569847107 ,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.76043301820755,-0.311322569847107 ,0.569929718971252,0.728648900985718,-0.0937679037451744,0.678438127040863,0.409103959798813,-0.270957797765732 ,0.8713299036026,0.409103959798813,-0.270957797765732,0.8713299036026,0.0793883204460144,-0.368574857711792,0.926201999187469 ,0.0704309046268463,-0.316668450832367,0.945917844772339,0.399355500936508,-0.336066722869873,0.85297966003418 ,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.340044319629669,-0.38835272192955,0.856476545333862 ,-0.378215819597244,-0.383805155754089,0.842405080795288,0.0704309046268463,-0.316668450832367,0.945917844772339 ,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.640028655529022,-0.393081039190292,0.660189807415009 ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.378215819597244,-0.383805155754089,0.842405080795288 ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.640028655529022,-0.393081039190292,0.660189807415009 ,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.788328349590302,-0.474288523197174,0.39190411567688 ,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.938033282756805,-0.126567348837852,0.322605550289154 ,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.930256605148315,-0.364659577608109,-0.0405716709792614 ,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.787253379821777,-0.358191251754761,0.501927375793457 ,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.817072033882141,-0.573431372642517,-0.0597474798560143 ,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.635453879833221,-0.442719787359238,0.632611691951752 ,-0.664949595928192,0.242700353264809,0.706355810165405,-0.293226510286331,-0.722825050354004,0.625733315944672 ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.802456378936768,-0.12530305981636,-0.583406329154968 ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.980311870574951,-0.142144083976746,-0.137053519487381 ,0.665161728858948,0.0713187083601952,0.743285655975342,0.0997511595487595,0.3437180519104,0.933759927749634 ,0.211952582001686,0.670883417129517,0.710627555847168,0.211952582001686,0.670883417129517,0.710627555847168 ,0.0997511595487595,0.3437180519104,0.933759927749634,-0.129297733306885,0.717350006103516,0.68461012840271,0.433499962091446 ,-0.540944635868073,-0.720733463764191,0.757972776889801,-0.133172035217285,-0.63854718208313,0.839367091655731 ,0.0223367810249329,-0.543105840682983,0.698725283145905,-0.511526346206665,-0.500123798847198,0.625909388065338 ,0.726224660873413,0.284315198659897,0.713566720485687,0.700178623199463,0.0239254627376795,0.828140437602997 ,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.985335350036621 ,0.0123839350417256,-0.170178771018982,0.992223381996155,-0.121708244085312,0.0260738711804152,0.817657768726349 ,0.451825648546219,0.356776267290115,0.883821845054626,0.46681609749794,-0.0306868441402912,0.904132843017578 ,0.38877084851265,-0.177203312516212,0.572269201278687,-0.327979475259781,0.751623213291168,0.263325154781342 ,-0.487631261348724,0.832391500473022,0.0997511595487595,0.3437180519104,0.933759927749634,0.665161728858948 ,0.0713187083601952,0.743285655975342,0.263325154781342,-0.487631261348724,0.832391500473022,-0.10741464048624 ,-0.480259567499161,0.87052446603775,0.026099681854248,-0.974704563617706,0.221968054771423,-0.0513959974050522 ,-0.174092352390289,0.983387172222137,0.0997511595487595,0.3437180519104,0.933759927749634,-0.508101880550385 ,0.373251050710678,0.776219129562378,-0.214603140950203,0.506344437599182,0.835201025009155,-0.293226510286331 ,-0.722825050354004,0.625733315944672,-0.664949595928192,0.242700353264809,0.706355810165405,0.903218030929565 ,-0.152758419513702,0.401076167821884,0.882815957069397,-0.369267553091049,0.290305823087692,0.665161728858948 ,0.0713187083601952,0.743285655975342,0.454763680696487,0.657829880714417,0.600374758243561,0.542647838592529 ,0.604447543621063,0.583246529102325,0.87714958190918,0.359215557575226,-0.318704843521118,0.924738705158234 ,0.24395327270031,-0.29213884472847,0.843237340450287,0.525120317935944,-0.114888966083527,0.839367091655731 ,0.0223367810249329,-0.543105840682983,0.757972776889801,-0.133172035217285,-0.63854718208313,0.86673891544342 ,0.195172861218452,-0.458989411592484,0.847418010234833,0.181933760643005,-0.49878141283989,0.468770742416382 ,0.121921703219414,-0.874865233898163,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.725067377090454 ,0.0188654419034719,-0.688419461250305,0.767102777957916,0.172567009925842,-0.617878556251526,0.412972420454025 ,-0.0658904165029526,-0.908356904983521,0.468770742416382,0.121921703219414,-0.874865233898163,0.236234411597252 ,0.0899422541260719,-0.967524528503418,0.181528016924858,-0.138318374752998,-0.973609566688538,-0.802456378936768 ,-0.12530305981636,-0.583406329154968,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.361754894256592 ,-0.299040019512177,-0.883011043071747,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.993737041950226 ,-0.103920765221119,-0.041074700653553,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.771207451820374 ,-0.338145196437836,-0.539348602294922,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.727824807167053 ,-0.528583109378815,-0.436887800693512,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.896283984184265 ,-0.348051100969315,-0.274837076663971,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.880043566226959 ,-0.142866209149361,-0.452893614768982,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.987256348133087 ,-0.145976811647415,-0.063369482755661,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.894527077674866 ,-0.0458483695983887,-0.444656252861023,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.997484087944031 ,-0.0642545074224472,-0.0299487132579088,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.901192605495453 ,-0.155655428767204,-0.404503762722015,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.688710927963257 ,0.127927929162979,-0.713660776615143,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.700080990791321 ,-0.0367838852107525,-0.713115334510803,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.621575772762299 ,-0.674482524394989,-0.398392915725708,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.930256605148315 ,-0.364659577608109,-0.0405716709792614,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.826197624206543 ,-0.211467355489731,-0.522186815738678,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.930256605148315 ,-0.364659577608109,-0.0405716709792614,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.94291615486145 ,0.0813095048069954,-0.322951853275299,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.994358837604523 ,0.088942214846611,0.0577910803258419,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.988070666790009 ,-0.152181640267372,-0.0236044656485319,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.993737041950226 ,-0.103920765221119,-0.041074700653553,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.924738705158234 ,0.24395327270031,-0.29213884472847,0.86673891544342,0.195172861218452,-0.458989411592484,0.757972776889801,-0.133172035217285 ,-0.63854718208313,0.843237340450287,0.525120317935944,-0.114888966083527,0.924738705158234,0.24395327270031 ,-0.29213884472847,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185 ,-0.0727289691567421,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.997484087944031,-0.0642545074224472 ,-0.0299487132579088,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.917498290538788,0.153388485312462 ,-0.36697256565094,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.599566876888275,-0.77289891242981 ,-0.207718148827553,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.901192605495453,-0.155655428767204 ,-0.404503762722015,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997882843017578,0.0525476969778538 ,0.0383221693336964,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.917498290538788,0.153388485312462 ,-0.36697256565094,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.76449728012085,0.158614858984947 ,-0.624808132648468,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.917498290538788,0.153388485312462 ,-0.36697256565094,0.224338784813881,0.414775222539902,-0.881835401058197,-0.323528319597244,0.300020337104797 ,-0.89739465713501,-0.337705463171005,0.352743804454803,-0.872655034065247,0.233416378498077,0.501707494258881 ,-0.832950413227081,0.740222573280334,0.520439863204956,-0.4256911277771,0.789179563522339,0.518753051757813 ,-0.328771829605103,0.797342956066132,0.463364690542221,-0.386700719594955,0.741937816143036,0.455005794763565 ,-0.492440849542618,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283 ,0.350056976079941,0.817657768726349,0.451825648546219,0.356776267290115,0.674828827381134,0.533339440822601 ,0.510054051876068,0.971639752388,-0.0853487625718117,-0.220526039600372,0.974583148956299,0.15406733751297,-0.162637546658516 ,0.955532789230347,0.0592790879309177,0.288865029811859,0.969275593757629,-0.197328850626946,0.146854087710381 ,0.698415637016296,-0.626996219158173,-0.345096111297607,0.971639752388,-0.0853487625718117,-0.220526039600372 ,0.969275593757629,-0.197328850626946,0.146854087710381,0.713743150234222,-0.689680516719818,-0.122112594544888 ,0.728648900985718,-0.0937679037451744,0.678438127040863,0.955532789230347,0.0592790879309177,0.288865029811859 ,0.93097060918808,0.125499755144119,0.342846184968948,0.700942933559418,0.0266663283109665,0.712718665599823 ,0.71001797914505,-0.0603355132043362,0.701593995094299,0.927353084087372,0.117294065654278,0.355328530073166 ,0.900879740715027,0.256662726402283,0.350056976079941,0.799828112125397,-0.075599230825901,0.595449209213257 ,0.900879740715027,0.256662726402283,0.350056976079941,0.927353084087372,0.117294065654278,0.355328530073166 ,0.956080257892609,0.274207085371017,-0.103542387485504,0.901214420795441,0.431201189756393,-0.0433364585042 ,0.974583148956299,0.15406733751297,-0.162637546658516,0.964388489723206,0.187021419405937,-0.187023624777794 ,0.93097060918808,0.125499755144119,0.342846184968948,0.955532789230347,0.0592790879309177,0.288865029811859 ,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.980311870574951,-0.142144083976746,-0.137053519487381 ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.978760063648224,-0.199930444359779,-0.0453491657972336 ,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.980311870574951,-0.142144083976746,-0.137053519487381 ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.797184348106384,-0.0889851674437523,-0.597142159938812 ,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.412408858537674,0.0103200003504753,-0.910940408706665 ,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.797184348106384,-0.0889851674437523,-0.597142159938812 ,-0.794891834259033,-0.0708803534507751,-0.602596819400787,0.184527859091759,0.31499707698822,-0.930981338024139 ,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.0849575996398926,0.129486069083214,-0.9879350066185 ,0.152592211961746,0.243283241987228,-0.957877278327942,0.817859530448914,0.310457706451416,-0.484480977058411 ,0.700349986553192,0.341331839561462,-0.626899063587189,0.680371522903442,0.248313769698143,-0.689517855644226 ,0.788738131523132,0.260696917772293,-0.556712925434113,0.863597810268402,0.181175544857979,-0.470504224300385 ,0.850323617458344,0.228136360645294,-0.474239885807037,0.854514420032501,0.21429717540741,-0.473161548376083 ,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.965022444725037,-0.244066029787064,-0.0957262590527534 ,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.662939727306366,-0.253610551357269,0.70440936088562 ,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.371589094400406,-0.191971749067307,0.908332765102386 ,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.848265528678894,-0.243028342723846,0.47051340341568 ,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.663156628608704,-0.176363825798035,0.727405726909637 ,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.983820915222168,-0.177888512611389,-0.0212618205696344 ,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.880043566226959,-0.142866209149361,-0.452893614768982 ,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.894527077674866,-0.0458483695983887,-0.444656252861023 ,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.643724501132965,0.0191281009465456,-0.765018165111542 ,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.243201240897179,0.169641554355621,-0.955026090145111 ,0.222743824124336,0.213152140378952,-0.951289296150208,0.2085961997509,0.239187613129616,-0.948302090167999 ,-0.233401030302048,0.186044618487358,-0.954416751861572,0.833951056003571,0.203840136528015,-0.512810707092285 ,0.808817446231842,0.214464277029037,-0.547557651996613,0.794304847717285,0.190871343016624,-0.576756417751312 ,0.83752965927124,0.20064052939415,-0.508219838142395,0.962835073471069,0.210140570998192,-0.169674947857857 ,0.964388489723206,0.187021419405937,-0.187023624777794,0.833951056003571,0.203840136528015,-0.512810707092285 ,0.83752965927124,0.20064052939415,-0.508219838142395,0.964388489723206,0.187021419405937,-0.187023624777794 ,0.962835073471069,0.210140570998192,-0.169674947857857,0.922343671321869,0.13623221218586,0.361556380987167 ,0.93097060918808,0.125499755144119,0.342846184968948,0.93097060918808,0.125499755144119,0.342846184968948,0.922343671321869 ,0.13623221218586,0.361556380987167,0.698577165603638,0.0347565114498138,0.714690029621124,0.700942933559418 ,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.700942933559418 ,0.0266663283109665,0.712718665599823,0.698577165603638,0.0347565114498138,0.714690029621124,0.358441174030304 ,0.000843510264530778,0.933551967144012,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.913633704185486 ,-0.352534234523773,0.202467292547226,-0.47701033949852,-0.793649733066559,0.377599358558655,0.392352849245071 ,-0.511246860027313,0.764647543430328,0.072246678173542,-0.0245807897299528,0.997083842754364,0.358441174030304 ,0.000843510264530778,0.933551967144012,0.717177391052246,-0.236680090427399,0.655468583106995,0.392352849245071 ,-0.511246860027313,0.764647543430328,-0.147943556308746,-0.468891173601151,0.870777666568756,0.072246678173542 ,-0.0245807897299528,0.997083842754364,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.505195796489716 ,-0.403650432825089,0.762786626815796,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.505195796489716 ,-0.403650432825089,0.762786626815796,-0.519910514354706,-0.607847154140472,0.600179076194763,0.415358334779739 ,-0.555045127868652,0.720695734024048,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781 ,-0.103395886719227,0.419378310441971,0.369075655937195,-0.252174496650696,0.894534051418304,0.415358334779739 ,-0.555045127868652,0.720695734024048,0.845881640911102,-0.333893984556198,0.415931522846222,0.845881640911102 ,-0.333893984556198,0.415931522846222,0.938493072986603,-0.335132718086243,0.0831675454974175,0.996204316616058 ,0.0376579239964485,-0.0784778967499733,0.901904165744781,-0.103395886719227,0.419378310441971,-0.680876314640045 ,-0.688694536685944,-0.249213308095932,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.657594680786133 ,-0.753369987010956,0.00171860994305462,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.817072033882141 ,-0.573431372642517,-0.0597474798560143,-0.680876314640045,-0.688694536685944,-0.249213308095932,0.863597810268402 ,0.181175544857979,-0.470504224300385,0.854514420032501,0.21429717540741,-0.473161548376083,0.868426561355591 ,0.2465450912714,-0.430175423622131,0.850903332233429,0.254371464252472,-0.459628790616989,0.850323617458344 ,0.228136360645294,-0.474239885807037,0.863597810268402,0.181175544857979,-0.470504224300385,0.796033978462219 ,0.30541729927063,-0.522541999816895,0.850323617458344,0.228136360645294,-0.474239885807037,0.850903332233429 ,0.254371464252472,-0.459628790616989,0.804398238658905,0.375304967164993,-0.460531920194626,0.796033978462219 ,0.30541729927063,-0.522541999816895,0.798422634601593,0.345685362815857,-0.49297359585762,0.419204384088516 ,0.619329214096069,0.663851618766785,0.454763680696487,0.657829880714417,0.600374758243561,0.665161728858948 ,0.0713187083601952,0.743285655975342,0.211952582001686,0.670883417129517,0.710627555847168,-0.0513959974050522 ,-0.174092352390289,0.983387172222137,0.026099681854248,-0.974704563617706,0.221968054771423,-0.293226510286331 ,-0.722825050354004,0.625733315944672,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.91961681842804 ,-0.250545829534531,-0.302542001008987,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.61088901758194 ,-0.78132575750351,0.127846345305443,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.28744050860405 ,0.955214440822601,-0.0703088492155075,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.467275679111481 ,0.564712703227997,-0.680259525775909,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.158186048269272 ,0.96994811296463,-0.184872642159462,0.153497099876404,0.630856812000275,-0.76056444644928,-0.136648282408714 ,0.56611156463623,-0.812923669815063,0.387114733457565,-0.80674409866333,-0.446437150239944,0.450898140668869 ,-0.00387678225524724,-0.892566978931427,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.141500309109688 ,-0.856403529644012,-0.496538639068604,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.886275291442871 ,0.375701189041138,0.270859181880951,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.332606077194214 ,0.942266285419464,-0.0388254560530186,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.22865828871727 ,0.9653559923172,-0.125710710883141,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.136648282408714 ,0.56611156463623,-0.812923669815063,0.752802550792694,0.00600722571834922,-0.658219039440155,0.450898140668869 ,-0.00387678225524724,-0.892566978931427,0.387114733457565,-0.80674409866333,-0.446437150239944,0.582785487174988 ,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.153497099876404 ,0.630856812000275,-0.76056444644928,-0.158186048269272,0.96994811296463,-0.184872642159462,-0.190744638442993 ,0.965611159801483,-0.176667913794518,-0.191050976514816,-0.840808987617493,-0.50649756193161,0.141500309109688 ,-0.856403529644012,-0.496538639068604,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.633409440517426 ,-0.235751509666443,-0.737030327320099,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.633409440517426 ,-0.235751509666443,-0.737030327320099,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.506913185119629 ,-0.816672563552856,-0.275835067033768,0.370678871870041,0.354065299034119,-0.858623862266541,0.433499962091446 ,-0.540944635868073,-0.720733463764191,0.821175813674927,-0.555518984794617,0.130648210644722,0.81356155872345 ,0.572328507900238,0.102750584483147,0.821175813674927,-0.555518984794617,0.130648210644722,0.433499962091446 ,-0.540944635868073,-0.720733463764191,0.698725283145905,-0.511526346206665,-0.500123798847198,0.445772647857666 ,-0.772406101226807,-0.452410876750946,0.468129217624664,-0.774566531181335,-0.425325512886047,-0.536809802055359 ,-0.812587976455688,-0.227015629410744,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.624468743801117 ,-0.657272636890411,0.421937793493271,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.722859144210815 ,-0.480000674724579,-0.497065395116806,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.802786946296692 ,0.346281349658966,0.485409408807755,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.931353390216827 ,0.363743156194687,0.0164867397397757,-0.809531450271606,0.353956669569016,0.468373239040375,-0.855425894260406 ,0.486632615327835,-0.177299648523331,-0.802786946296692,0.346281349658966,0.485409408807755,-0.461797803640366 ,-0.839399814605713,-0.286619544029236,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.536809802055359 ,-0.812587976455688,-0.227015629410744,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.140064582228661 ,-0.834803938865662,-0.532432377338409,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.36346247792244 ,-0.894582808017731,-0.260031878948212,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508 ,0.39994078874588,-0.913580656051636,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.515371859073639 ,-0.300769984722137,-0.802452027797699,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.140064582228661 ,-0.834803938865662,-0.532432377338409,0.135029509663582,-0.80270379781723,-0.580890357494354,0.183815449476242 ,-0.694319665431976,-0.695795953273773,-0.0776953548192978,-0.877335965633392,-0.473545104265213,0.3254614174366 ,-0.149335280060768,-0.933688282966614,0.247284039855003,0.510108411312103,-0.823796093463898,-0.0736050382256508 ,0.39994078874588,-0.913580656051636,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.135029509663582 ,-0.80270379781723,-0.580890357494354,0.286900162696838,-0.815463900566101,-0.502699613571167,0.287791073322296 ,-0.680340945720673,-0.67402708530426,0.183815449476242,-0.694319665431976,-0.695795953273773,0.247284039855003 ,0.510108411312103,-0.823796093463898,0.3254614174366,-0.149335280060768,-0.933688282966614,0.727754414081573 ,0.0140857892110944,-0.685693144798279,0.525159299373627,0.660153150558472,-0.537034034729004,0.287791073322296 ,-0.680340945720673,-0.67402708530426,0.286900162696838,-0.815463900566101,-0.502699613571167,0.468129217624664 ,-0.774566531181335,-0.425325512886047,0.445772647857666,-0.772406101226807,-0.452410876750946,0.525159299373627 ,0.660153150558472,-0.537034034729004,0.727754414081573,0.0140857892110944,-0.685693144798279,0.985135495662689 ,0.16939789056778,0.0285019427537918,0.370678871870041,0.354065299034119,-0.858623862266541,0.81356155872345 ,0.572328507900238,0.102750584483147,0.179054066538811,0.451375037431717,-0.8741854429245,0.794842600822449,-0.0390454083681107 ,-0.605558216571808,0.949472963809967,-0.307868123054504,0.0609782487154007,0.633183419704437,0.759799301624298 ,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.794842600822449,-0.0390454083681107 ,-0.605558216571808,0.752802550792694,0.00600722571834922,-0.658219039440155,0.582785487174988,-0.706441342830658 ,-0.40162381529808,0.633183419704437,0.759799301624298,-0.14759349822998,0.343719273805618,0.683673620223999 ,-0.643775939941406,-0.190744638442993,0.965611159801483,-0.176667913794518,0.179054066538811,0.451375037431717 ,-0.8741854429245,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.809531450271606,0.353956669569016 ,0.468373239040375,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.794855117797852,0.412983626127243 ,-0.444578289985657,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.952340543270111,-0.189113721251488 ,0.239339768886566,0.905556082725525,-0.270015031099319,0.327200382947922,0.966925024986267,-0.254912257194519 ,-0.00869798846542835,0.952340543270111,-0.189113721251488,0.239339768886566,0.836283266544342,-0.213887274265289 ,0.504858911037445,0.780203700065613,-0.321272552013397,0.53671795129776,0.905556082725525,-0.270015031099319 ,0.327200382947922,0.836283266544342,-0.213887274265289,0.504858911037445,0.660950601100922,-0.242743700742722 ,0.71008437871933,0.485521018505096,-0.413983583450317,0.769991517066956,0.780203700065613,-0.321272552013397 ,0.53671795129776,0.477214813232422,-0.241928040981293,0.844829499721527,0.353479385375977,-0.210105717182159 ,0.911541521549225,0.081648163497448,-0.362786680459976,0.928288400173187,0.188842624425888,-0.479352325201035 ,0.857064664363861,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.158661097288132,-0.379611909389496 ,0.911439180374146,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.109986312687397,-0.239039734005928 ,0.964760601520538,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.158661097288132,-0.379611909389496 ,0.911439180374146,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.481494218111038,-0.48454275727272 ,0.730329811573029,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.790293157100677,-0.395322173833847 ,0.468142211437225,-0.75563770532608,-0.50673520565033,0.415007293224335,0.854438722133636,-0.0391706973314285 ,-0.518073558807373,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.932186603546143,-9.77104355115443e-006 ,-0.361978143453598,0.960243940353394,-0.113252773880959,-0.255157649517059,0.992983877658844,-0.0297704339027405 ,0.114441238343716,0.939164042472839,-0.287473499774933,0.187962368130684,0.946958303451538,-0.273756355047226 ,-0.168307527899742,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.992983877658844,-0.0297704339027405 ,0.114441238343716,0.915004968643188,-0.0659479200839996,0.398016005754471,0.821053445339203,-0.304968655109406 ,0.482561200857162,0.939164042472839,-0.287473499774933,0.187962368130684,0.915004968643188,-0.0659479200839996 ,0.398016005754471,0.755727231502533,-0.0899055525660515,0.648685872554779,0.658008575439453,-0.304749071598053 ,0.688587427139282,0.821053445339203,-0.304968655109406,0.482561200857162,0.353479385375977,-0.210105717182159 ,0.911541521549225,0.365955173969269,-0.121213011443615,0.922704815864563,0.0752642378211021,-0.163290247321129 ,0.983702957630157,0.081648163497448,-0.362786680459976,0.928288400173187,-0.184660717844963,-0.167485594749451 ,0.968426048755646,-0.141511112451553,-0.212750777602196,0.966804921627045,0.37811690568924,-0.192061543464661 ,0.90561580657959,0.326031237840652,-0.100235551595688,0.940030038356781,-0.641422271728516,-0.270271867513657 ,0.718004584312439,-0.481494218111038,-0.48454275727272,0.730329811573029,0.0231705605983734,-0.380178421735764 ,0.924622893333435,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.817183375358582,-0.296553403139114 ,0.494234204292297,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.481494218111038,-0.48454275727272 ,0.730329811573029,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.928428411483765,-0.296662479639053 ,0.223633751273155,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.75563770532608,-0.50673520565033 ,0.415007293224335,-0.925617933273315,-0.333309531211853,0.179265692830086,0.824556231498718,-0.0130053572356701 ,-0.565630555152893,0.79849648475647,0.00311785028316081,-0.601991355419159,0.906778931617737,0.0885622203350067 ,-0.412199825048447,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.989881575107574,0.137960970401764 ,0.0331847853958607,0.992983877658844,-0.0297704339027405,0.114441238343716,0.960284650325775,-0.0229552984237671 ,-0.278076320886612,0.937741100788116,0.0962117910385132,-0.333743721246719,0.915004968643188,-0.0659479200839996 ,0.398016005754471,0.992983877658844,-0.0297704339027405,0.114441238343716,0.989881575107574,0.137960970401764 ,0.0331847853958607,0.948979258537292,0.121414266526699,0.291027426719666,0.755727231502533,-0.0899055525660515 ,0.648685872554779,0.915004968643188,-0.0659479200839996,0.398016005754471,0.948979258537292,0.121414266526699 ,0.291027426719666,0.808870196342468,0.0797994136810303,0.582547068595886,0.365955173969269,-0.121213011443615 ,0.922704815864563,0.399412155151367,0.0118926726281643,0.916694343090057,0.0489731431007385,-0.0354295633733273 ,0.998171508312225,0.0752642378211021,-0.163290247321129,0.983702957630157,-0.274106293916702,-0.107289478182793 ,0.955695927143097,-0.184660717844963,-0.167485594749451,0.968426048755646,0.326031237840652,-0.100235551595688 ,0.940030038356781,0.309460699558258,0.0171790830790997,0.950757026672363,-0.641422271728516,-0.270271867513657 ,0.718004584312439,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.152441054582596,-0.013247330673039 ,0.988223791122437,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.817183375358582,-0.296553403139114 ,0.494234204292297,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.736215531826019,-0.133181735873222 ,0.663512825965881,-0.858429491519928,-0.151253908872604,0.490123569965363,0.79849648475647,0.00311785028316081 ,-0.601991355419159,0.770998120307922,0.0437404066324234,-0.63533353805542,0.899548053741455,0.145640388131142 ,-0.411827832460403,0.906778931617737,0.0885622203350067,-0.412199825048447,0.978495180606842,0.204968735575676 ,-0.0231311116367579,0.989881575107574,0.137960970401764,0.0331847853958607,0.937741100788116,0.0962117910385132 ,-0.333743721246719,0.927813827991486,0.152230933308601,-0.340569078922272,0.854383409023285,0.179303303360939 ,0.487728714942932,0.808870196342468,0.0797994136810303,0.582547068595886,0.948979258537292,0.121414266526699 ,0.291027426719666,0.961814522743225,0.194339916110039,0.1927300542593,-0.414724171161652,0.00967030972242355 ,0.909895837306976,-0.274106293916702,-0.107289478182793,0.955695927143097,0.309460699558258,0.0171790830790997 ,0.950757026672363,0.192327603697777,0.12894095480442,0.972822844982147,-0.951565086841583,-0.195825457572937 ,0.237015262246132,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.96939754486084,-0.16740058362484 ,0.179570108652115,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.987223207950592,-0.158936277031899 ,-0.0113820992410183,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.951565086841583,-0.195825457572937 ,0.237015262246132,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.926154136657715,0.165854901075363 ,-0.3387191593647,0.922853767871857,-0.106967732310295,-0.369998395442963,0.978555917739868,-0.185044288635254 ,-0.090481773018837,0.978495180606842,0.204968735575676,-0.0231311116367579,0.927813827991486,0.152230933308601 ,-0.340569078922272,0.548670411109924,0.271492123603821,0.790729284286499,0.501937747001648,0.161304622888565 ,0.849728941917419,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804 ,0.36308279633522,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605 ,-0.180715546011925,0.601944923400879,0.77782016992569,0.251838862895966,-0.440983474254608,0.861458539962769 ,0.251838862895966,-0.440983474254608,0.861458539962769,-0.180715546011925,0.601944923400879,0.77782016992569 ,-0.692504823207855,0.347807645797729,0.632033944129944,-0.337113708257675,-0.517143785953522,0.78671258687973 ,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.420417785644531,0.0594633929431438,0.905380010604858 ,-0.0315550751984119,0.227497562766075,0.973267257213593,0.192327603697777,0.12894095480442,0.972822844982147 ,-0.17640919983387,0.25873214006424,0.949703872203827,-0.244612783193588,0.231081768870354,0.941682457923889 ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.128308832645416,0.135050818324089,0.982495844364166 ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.929407715797424,-0.180255636572838,0.322039186954498 ,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.951565086841583,-0.195825457572937,0.237015262246132 ,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.941855192184448,-0.19358217716217,0.274653851985931 ,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.982540905475616,-0.173452958464623,0.0672866627573967 ,0.777039647102356,0.333707332611084,0.533712267875671,0.65978866815567,0.352559685707092,0.663611769676209,0.760879397392273 ,0.00385691528208554,0.648881912231445,0.501708924770355,0.238893568515778,0.831395208835602,0.690571069717407 ,0.287569731473923,0.66363787651062,0.509689807891846,0.284962385892868,0.811796009540558,0.324959099292755,0.210221484303474 ,0.922067523002625,0.114197269082069,0.229852244257927,0.96650242805481,0.328837275505066,-0.326990753412247 ,0.885970175266266,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706 ,0.548811316490173,-0.169450506567955,0.19207775592804,0.966639876365662,0.199919357895851,-0.342281520366669 ,0.918082594871521,0.328837275505066,-0.326990753412247,0.885970175266266,0.114197269082069,0.229852244257927 ,0.96650242805481,-0.234150588512421,0.240435913205147,0.942000031471252,-0.0315550751984119,0.227497562766075 ,0.973267257213593,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.708681702613831,0.0549901239573956 ,0.703382074832916,-0.284107565879822,0.352843284606934,0.891506910324097,-0.244612783193588,0.231081768870354 ,0.941682457923889,-0.17640919983387,0.25873214006424,0.949703872203827,-0.224652707576752,0.331979662179947 ,0.91614443063736,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.973927080631256,-0.0629245564341545 ,0.217960059642792,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.929407715797424,-0.180255636572838 ,0.322039186954498,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.98711097240448,-0.0946236401796341 ,0.129067301750183,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.973927080631256,-0.0629245564341545 ,0.217960059642792,0.405990958213806,0.468467801809311,0.784671425819397,0.317346751689911,0.64952027797699,0.690951824188232 ,0.509689807891846,0.284962385892868,0.811796009540558,0.690571069717407,0.287569731473923,0.66363787651062,0.114197269082069 ,0.229852244257927,0.96650242805481,0.810181796550751,0.205940678715706,0.548811316490173,0.382766664028168,0.693922400474548 ,0.609886407852173,-0.353388220071793,0.625863552093506,0.695278108119965,-0.169450506567955,0.19207775592804 ,0.966639876365662,0.114197269082069,0.229852244257927,0.96650242805481,-0.353388220071793,0.625863552093506 ,0.695278108119965,-0.596078813076019,0.546218574047089,0.588502645492554,-0.234150588512421,0.240435913205147 ,0.942000031471252,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.744610011577606,0.447527408599854 ,0.49525260925293,-0.514606833457947,0.383561730384827,0.766850829124451,-0.618925273418427,0.0886659994721413 ,0.780429303646088,-0.234150588512421,0.240435913205147,0.942000031471252,-0.514606833457947,0.383561730384827 ,0.766850829124451,-0.78737735748291,0.23807966709137,0.568643093109131,-0.284107565879822,0.352843284606934 ,0.891506910324097,-0.224652707576752,0.331979662179947,0.91614443063736,-0.702946484088898,0.346591114997864 ,0.621080338954926,0.47508293390274,0.0346805192530155,0.879257321357727,0.4305479824543,-0.135443344712257,0.89234721660614 ,0.755727231502533,-0.0899055525660515,0.648685872554779,0.808870196342468,0.0797994136810303,0.582547068595886 ,0.501937747001648,0.161304622888565,0.849728941917419,0.47508293390274,0.0346805192530155,0.879257321357727 ,0.808870196342468,0.0797994136810303,0.582547068595886,0.854383409023285,0.179303303360939,0.487728714942932 ,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.234150588512421,0.240435913205147,0.942000031471252 ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.537278592586517,0.0936881303787231,0.83818507194519 ,0.192327603697777,0.12894095480442,0.972822844982147,-0.0315550751984119,0.227497562766075,0.973267257213593 ,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.414724171161652,0.00967030972242355,0.909895837306976 ,0.961814522743225,0.194339916110039,0.1927300542593,0.922054708003998,0.046831239014864,0.384216070175171,0.882719457149506 ,0.298290461301804,0.36308279633522,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804 ,0.36308279633522,0.7165766954422,0.119066134095192,0.687270760536194,0.564793407917023,-0.0494600534439087,0.823748826980591 ,0.65978866815567,0.352559685707092,0.663611769676209,0.978495180606842,0.204968735575676,-0.0231311116367579 ,0.983711898326874,-0.176273837685585,0.0351918712258339,0.922054708003998,0.046831239014864,0.384216070175171 ,0.961814522743225,0.194339916110039,0.1927300542593,0.948979258537292,0.121414266526699,0.291027426719666,0.989881575107574 ,0.137960970401764,0.0331847853958607,0.978495180606842,0.204968735575676,-0.0231311116367579,0.961814522743225 ,0.194339916110039,0.1927300542593,0.778017222881317,0.0114749372005463,0.62813812494278,0.509491503238678,0.564498364925385 ,0.649430513381958,-0.110789246857166,0.611093282699585,0.78376704454422,0.129216074943542,-0.0478254444897175 ,0.990462481975555,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.110789246857166,0.611093282699585 ,0.78376704454422,-0.611190378665924,0.347120583057404,0.711304187774658,-0.549654603004456,-0.190786048769951 ,0.8133145570755,-0.279066264629364,0.00181216315831989,0.96027010679245,0.192327603697777,0.12894095480442,0.972822844982147 ,0.309460699558258,0.0171790830790997,0.950757026672363,-0.243933483958244,-0.119538404047489,0.962396502494812 ,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.858429491519928,-0.151253908872604,0.490123569965363 ,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.754620730876923,-0.101689904928207,0.648233532905579 ,0.433499962091446,-0.540944635868073,-0.720733463764191,0.198074012994766,-0.129640698432922,-0.971576035022736 ,0.385900169610977,-0.542145550251007,-0.746431052684784,0.757972776889801,-0.133172035217285,-0.63854718208313 ,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.495510667562485,-0.864618837833405,-0.0830870270729065 ,0.437477648258209,-0.839490532875061,0.322287112474442,0.828140437602997,-0.416388809680939,0.375238239765167 ,0.69633674621582,-0.401266545057297,0.595063328742981,0.828140437602997,-0.416388809680939,0.375238239765167 ,0.437477648258209,-0.839490532875061,0.322287112474442,0.295071959495544,-0.836212575435638,0.462256461381912 ,0.69633674621582,-0.401266545057297,0.595063328742981,0.295071959495544,-0.836212575435638,0.462256461381912 ,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.495204418897629,-0.163849160075188,0.853185832500458 ,0.127582147717476,-0.649050772190094,0.749970614910126,0.0833947658538818,-0.437338054180145,0.895422101020813 ,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0995030105113983,-0.912258505821228,0.39734560251236 ,0.00337490346282721,-0.386369347572327,0.92233794927597,0.689028441905975,-0.416694343090057,0.592963397502899 ,0.776257395744324,-0.559177398681641,0.291110157966614,0.631964325904846,-0.724000632762909,0.276485413312912 ,-0.011982899159193,-0.684736132621765,0.728692591190338,0.00337490346282721,-0.386369347572327,0.92233794927597 ,0.631964325904846,-0.724000632762909,0.276485413312912,0.4933140873909,-0.832423627376556,0.252412617206573 ,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.011982899159193,-0.684736132621765,0.728692591190338 ,0.4933140873909,-0.832423627376556,0.252412617206573,0.405342906713486,-0.871097266674042,0.277284443378448 ,-0.227918326854706,-0.765941560268402,0.601154506206512,0.405342906713486,-0.871097266674042,0.277284443378448 ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.805050849914551,-0.582361280918121,0.112909138202667 ,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.727824807167053,-0.528583109378815,-0.436887800693512 ,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.557889223098755,-0.23755519092083,-0.7951899766922 ,0.433499962091446,-0.540944635868073,-0.720733463764191,0.370678871870041,0.354065299034119,-0.858623862266541 ,0.116842739284039,-0.105540536344051,-0.987526714801788,0.198074012994766,-0.129640698432922,-0.971576035022736 ,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.586520671844482,-0.278485208749771,-0.760552048683167 ,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.661859035491943,-0.0551192909479141,-0.747599124908447 ,0.116842739284039,-0.105540536344051,-0.987526714801788,0.370678871870041,0.354065299034119,-0.858623862266541 ,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.0670028999447823,-0.229776233434677,-0.970934331417084 ,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.722859144210815,-0.480000674724579,-0.497065395116806 ,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.725514113903046,-0.0050869844853878,-0.688188493251801 ,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.733602643013,0.104122340679169,-0.671554684638977 ,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.725514113903046,-0.0050869844853878,-0.688188493251801 ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.733602643013,0.104122340679169,-0.671554684638977 ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.827176213264465,0.131099432706833,-0.546436131000519 ,-0.733602643013,0.104122340679169,-0.671554684638977,-0.827176213264465,0.131099432706833,-0.546436131000519 ,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.784134566783905,-0.509350836277008,-0.354534596204758 ,0.11270098388195,0.815884530544281,-0.567125082015991,-0.277701437473297,0.780102908611298,-0.56064373254776 ,-0.171155840158463,0.985165357589722,0.0124461855739355,0.227652028203011,0.973727345466614,-0.0054389201104641 ,-0.423373013734818,0.789847135543823,0.443730562925339,-0.460725039243698,0.8605055809021,0.217399582266808 ,-0.245494201779366,0.895091235637665,0.372215330600739,-0.1829604357481,0.769297182559967,0.61213344335556,-0.594437062740326 ,0.745864152908325,0.300551623106003,-0.664495587348938,0.716933071613312,0.210837796330452,-0.590883314609528 ,0.718779802322388,0.366350263357162,-0.498491138219833,0.755745649337769,0.424682348966599,-0.664495587348938 ,0.716933071613312,0.210837796330452,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.744540989398956 ,0.615887403488159,0.257568180561066,-0.590883314609528,0.718779802322388,0.366350263357162,-0.727959036827087 ,0.661616802215576,-0.179830119013786,-0.748579859733582,0.631325542926788,0.202623516321182,-0.737479329109192 ,0.641141176223755,0.212278604507446,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.727959036827087 ,0.661616802215576,-0.179830119013786,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.856980979442596 ,0.504014492034912,0.107484914362431,-0.748579859733582,0.631325542926788,0.202623516321182,-0.833821058273315 ,0.528545200824738,-0.159318462014198,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.856980979442596 ,0.504014492034912,0.107484914362431,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.948116004467011 ,0.0624199733138084,0.311736673116684,-0.886275291442871,0.375701189041138,0.270859181880951,-0.603576362133026 ,-0.735800743103027,0.307071357965469,-0.989869713783264,-0.139774799346924,-0.0249191801995039,0.495204418897629 ,-0.163849160075188,0.853185832500458,-0.0664141848683357,-0.803863763809204,0.591094017028809,-0.453684002161026 ,-0.692797005176544,0.560538291931152,0.0833947658538818,-0.437338054180145,0.895422101020813,0.689028441905975 ,-0.416694343090057,0.592963397502899,0.419214755296707,-0.523533642292023,0.741735517978668,0.552227675914764 ,-0.748098790645599,0.367957681417465,0.877826869487762,-0.373567342758179,0.299778997898102,0.845922589302063 ,-0.233836695551872,-0.479307234287262,0.385900169610977,-0.542145550251007,-0.746431052684784,0.198074012994766 ,-0.129640698432922,-0.971576035022736,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.437477648258209 ,-0.839490532875061,0.322287112474442,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.966925024986267 ,-0.254912257194519,-0.00869798846542835,0.905556082725525,-0.270015031099319,0.327200382947922,0.295071959495544 ,-0.836212575435638,0.462256461381912,0.437477648258209,-0.839490532875061,0.322287112474442,0.905556082725525 ,-0.270015031099319,0.327200382947922,0.780203700065613,-0.321272552013397,0.53671795129776,-0.0664141848683357 ,-0.803863763809204,0.591094017028809,0.295071959495544,-0.836212575435638,0.462256461381912,0.780203700065613 ,-0.321272552013397,0.53671795129776,0.485521018505096,-0.413983583450317,0.769991517066956,0.081648163497448 ,-0.362786680459976,0.928288400173187,-0.0995030105113983,-0.912258505821228,0.39734560251236,-0.453684002161026 ,-0.692797005176544,0.560538291931152,0.188842624425888,-0.479352325201035,0.857064664363861,0.322147607803345 ,-0.331866294145584,0.886614739894867,0.187207460403442,-0.466673761606216,0.864389359951019,0.776257395744324 ,-0.559177398681641,0.291110157966614,0.877826869487762,-0.373567342758179,0.299778997898102,-0.215633437037468 ,-0.617008090019226,0.756837606430054,0.4933140873909,-0.832423627376556,0.252412617206573,0.631964325904846 ,-0.724000632762909,0.276485413312912,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.505574762821198 ,-0.704972326755524,0.49740144610405,0.405342906713486,-0.871097266674042,0.277284443378448,0.4933140873909,-0.832423627376556 ,0.252412617206573,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.648859262466431,-0.732072472572327 ,0.20748870074749,0.182749971747398,-0.981905281543732,-0.0496433302760124,0.405342906713486,-0.871097266674042 ,0.277284443378448,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.557889223098755,-0.23755519092083 ,-0.7951899766922,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.724748373031616,-0.680762529373169 ,-0.106311395764351,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.198074012994766,-0.129640698432922 ,-0.971576035022736,0.116842739284039,-0.105540536344051,-0.987526714801788,0.824556231498718,-0.0130053572356701 ,-0.565630555152893,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.0752642378211021,-0.163290247321129 ,0.983702957630157,0.584701359272003,-0.0801372230052948,0.807280838489532,-0.0995030105113983,-0.912258505821228 ,0.39734560251236,0.081648163497448,-0.362786680459976,0.928288400173187,-0.977448999881744,-0.204651221632957 ,-0.0520704686641693,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.557889223098755,-0.23755519092083 ,-0.7951899766922,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.824556231498718,-0.0130053572356701 ,-0.565630555152893,0.116842739284039,-0.105540536344051,-0.987526714801788,0.0670028999447823,-0.229776233434677 ,-0.970934331417084,0.79849648475647,0.00311785028316081,-0.601991355419159,0.584701359272003,-0.0801372230052948 ,0.807280838489532,0.0752642378211021,-0.163290247321129,0.983702957630157,0.0489731431007385,-0.0354295633733273 ,0.998171508312225,0.528049111366272,-0.00915573351085186,0.849164485931396,-0.725514113903046,-0.0050869844853878 ,-0.688188493251801,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.977448999881744,-0.204651221632957 ,-0.0520704686641693,-0.987223207950592,-0.158936277031899,-0.0113820992410183,0.79849648475647,0.00311785028316081 ,-0.601991355419159,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.0755608975887299,-0.262402594089508 ,-0.961995542049408,0.770998120307922,0.0437404066324234,-0.63533353805542,0.784979939460754,0.0750055387616158 ,-0.614963889122009,0.772511541843414,0.0615992993116379,-0.632005870342255,0.214329496026039,-0.204933792352676 ,-0.95502096414566,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.827176213264465,0.131099432706833 ,-0.546436131000519,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.982540905475616,-0.173452958464623 ,0.0672866627573967,-0.98711097240448,-0.0946236401796341,0.129067301750183,0.798663914203644,0.0795769542455673 ,-0.596492648124695,0.265012234449387,-0.116133384406567,-0.957225978374481,0.119323797523975,0.10215725004673 ,-0.987585842609406,0.775733590126038,0.173521965742111,-0.606735110282898,-0.87356162071228,0.247192814946175 ,-0.419268190860748,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.98711097240448,-0.0946236401796341 ,0.129067301750183,-0.991252839565277,0.0431834943592548,0.124711617827415,0.73961067199707,0.263024806976318 ,-0.619511127471924,0.0699164718389511,0.326290965080261,-0.942680180072784,0.11270098388195,0.815884530544281 ,-0.567125082015991,0.792211890220642,0.491865277290344,-0.361204653978348,0.405990958213806,0.468467801809311 ,0.784671425819397,-0.1829604357481,0.769297182559967,0.61213344335556,-0.245494201779366,0.895091235637665,0.372215330600739 ,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565 ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.590883314609528,0.718779802322388,0.366350263357162 ,-0.594345927238464,0.730467915534973,0.336406856775284,-0.594345927238464,0.730467915534973,0.336406856775284 ,-0.590883314609528,0.718779802322388,0.366350263357162,-0.744540989398956,0.615887403488159,0.257568180561066 ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293 ,-0.737479329109192,0.641141176223755,0.212278604507446,-0.748579859733582,0.631325542926788,0.202623516321182 ,-0.514606833457947,0.383561730384827,0.766850829124451,-0.514606833457947,0.383561730384827,0.766850829124451 ,-0.748579859733582,0.631325542926788,0.202623516321182,-0.856980979442596,0.504014492034912,0.107484914362431 ,-0.78737735748291,0.23807966709137,0.568643093109131,-0.882953405380249,0.46945133805275,0.00294615048915148 ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.78737735748291,0.23807966709137,0.568643093109131 ,-0.856980979442596,0.504014492034912,0.107484914362431,-0.948116004467011,0.0624199733138084,0.311736673116684 ,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.989299476146698,0.112728737294674,0.0926214382052422 ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.453684002161026,-0.692797005176544,0.560538291931152 ,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.485521018505096,-0.413983583450317,0.769991517066956 ,0.188842624425888,-0.479352325201035,0.857064664363861,0.552227675914764,-0.748098790645599,0.367957681417465 ,-0.204973682761192,-0.221624344587326,0.953345894813538,0.326031237840652,-0.100235551595688,0.940030038356781 ,0.37811690568924,-0.192061543464661,0.90561580657959,0.877826869487762,-0.373567342758179,0.299778997898102 ,0.552227675914764,-0.748098790645599,0.367957681417465,0.37811690568924,-0.192061543464661,0.90561580657959 ,0.322147607803345,-0.331866294145584,0.886614739894867,-0.00303205195814371,-0.243413895368576,-0.969917774200439 ,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.0755608975887299,-0.262402594089508,-0.961995542049408 ,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.439302206039429,0.130682423710823,0.888783276081085 ,0.501708924770355,0.238893568515778,0.831395208835602,0.324959099292755,0.210221484303474,0.922067523002625 ,0.120599403977394,0.0903128907084465,0.988584518432617,0.713191568851471,-0.57269150018692,0.404205650091171 ,0.801663935184479,-0.0182420387864113,0.597496569156647,0.159226432442665,-0.153974950313568,0.975160837173462 ,0.236816734075546,-0.796482741832733,0.556356966495514,0.127582147717476,-0.649050772190094,0.749970614910126 ,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.164029166102409,-0.97451639175415,-0.153010532259941 ,0.261260062456131,-0.761487662792206,0.593194544315338,0.755727231502533,-0.0899055525660515,0.648685872554779 ,0.4305479824543,-0.135443344712257,0.89234721660614,0.356381446123123,-0.306900352239609,0.882498979568481,0.658008575439453 ,-0.304749071598053,0.688587427139282,-0.141511112451553,-0.212750777602196,0.966804921627045,0.322147607803345 ,-0.331866294145584,0.886614739894867,0.37811690568924,-0.192061543464661,0.90561580657959,0.776257395744324 ,-0.559177398681641,0.291110157966614,0.689028441905975,-0.416694343090057,0.592963397502899,0.877826869487762 ,-0.373567342758179,0.299778997898102,0.399412155151367,0.0118926726281643,0.916694343090057,0.439302206039429 ,0.130682423710823,0.888783276081085,0.120599403977394,0.0903128907084465,0.988584518432617,0.0489731431007385 ,-0.0354295633733273,0.998171508312225,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.120599403977394 ,0.0903128907084465,0.988584518432617,0.460760354995728,0.108215063810349,0.880902588367462,0.528049111366272 ,-0.00915573351085186,0.849164485931396,0.120599403977394,0.0903128907084465,0.988584518432617,0.324959099292755 ,0.210221484303474,0.922067523002625,0.565941989421844,0.17062908411026,0.806594908237457,0.460760354995728,0.108215063810349 ,0.880902588367462,0.778803884983063,0.240923345088959,0.579154968261719,0.565941989421844,0.17062908411026,0.806594908237457 ,0.324959099292755,0.210221484303474,0.922067523002625,0.509689807891846,0.284962385892868,0.811796009540558 ,0.778803884983063,0.240923345088959,0.579154968261719,0.509689807891846,0.284962385892868,0.811796009540558 ,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565 ,0.317346751689911,0.64952027797699,0.690951824188232,-0.245494201779366,0.895091235637665,0.372215330600739 ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.0522431507706642,0.792317688465118,0.607867777347565 ,-0.460725039243698,0.8605055809021,0.217399582266808,-0.594437062740326,0.745864152908325,0.300551623106003 ,-0.498491138219833,0.755745649337769,0.424682348966599,-0.245494201779366,0.895091235637665,0.372215330600739 ,-0.243933483958244,-0.119538404047489,0.962396502494812,0.309460699558258,0.0171790830790997,0.950757026672363 ,0.326031237840652,-0.100235551595688,0.940030038356781,-0.204973682761192,-0.221624344587326,0.953345894813538 ,0.159226432442665,-0.153974950313568,0.975160837173462,0.129216074943542,-0.0478254444897175,0.990462481975555 ,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.501740396022797,-0.243245616555214,0.830113351345062 ,0.801663935184479,-0.0182420387864113,0.597496569156647,0.778017222881317,0.0114749372005463,0.62813812494278 ,0.129216074943542,-0.0478254444897175,0.990462481975555,0.159226432442665,-0.153974950313568,0.975160837173462 ,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.385900169610977,-0.542145550251007,-0.746431052684784 ,0.845922589302063,-0.233836695551872,-0.479307234287262,0.966925024986267,-0.254912257194519,-0.00869798846542835 ,0.757972776889801,-0.133172035217285,-0.63854718208313,0.385900169610977,-0.542145550251007,-0.746431052684784 ,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.883931815624237,-0.461925357580185,-0.0727289691567421 ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.250410139560699,-0.715217709541321,-0.65250164270401 ,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.805050849914551,-0.582361280918121,0.112909138202667 ,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.250410139560699,-0.715217709541321,-0.65250164270401 ,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.648859262466431,-0.732072472572327,0.20748870074749 ,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.806389153003693,-0.12540277838707,0.577936589717865 ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.784406840801239,0.0822488218545914,0.614769160747528 ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.417345523834229,-0.483428627252579,0.769492983818054 ,0.199919357895851,-0.342281520366669,0.918082594871521,-0.169450506567955,0.19207775592804,0.966639876365662 ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.169450506567955,0.19207775592804,0.966639876365662 ,-0.596078813076019,0.546218574047089,0.588502645492554,-0.924569010734558,0.246832668781281,0.290251165628433 ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744540989398956,0.615887403488159,0.257568180561066 ,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744610011577606,0.447527408599854,0.49525260925293 ,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.737479329109192,0.641141176223755,0.212278604507446 ,-0.744540989398956,0.615887403488159,0.257568180561066,-0.759507477283478,0.648222267627716,-0.0543712638318539 ,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.982540905475616,-0.173452958464623,0.0672866627573967 ,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.725514113903046,-0.0050869844853878,-0.688188493251801 ,0.460760354995728,0.108215063810349,0.880902588367462,0.565941989421844,0.17062908411026,0.806594908237457,0.47046023607254 ,0.569419384002686,0.674113273620605,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254 ,0.569419384002686,0.674113273620605,0.565941989421844,0.17062908411026,0.806594908237457,0.238703370094299,-0.21425598859787 ,0.947161555290222,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729 ,0.632033944129944,-0.180715546011925,0.601944923400879,0.77782016992569,0.238703370094299,-0.21425598859787 ,0.947161555290222,-0.420417785644531,0.0594633929431438,0.905380010604858,0.565941989421844,0.17062908411026 ,0.806594908237457,0.778803884983063,0.240923345088959,0.579154968261719,0.810181796550751,0.205940678715706 ,0.548811316490173,0.743318140506744,-0.232130751013756,0.627370238304138,0.328837275505066,-0.326990753412247 ,0.885970175266266,0.238703370094299,-0.21425598859787,0.947161555290222,0.565941989421844,0.17062908411026,0.806594908237457 ,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173 ,0.778803884983063,0.240923345088959,0.579154968261719,-0.0522431507706642,0.792317688465118,0.607867777347565 ,0.382766664028168,0.693922400474548,0.609886407852173,-0.0522431507706642,0.792317688465118,0.607867777347565 ,-0.594345927238464,0.730467915534973,0.336406856775284,-0.353388220071793,0.625863552093506,0.695278108119965 ,0.382766664028168,0.693922400474548,0.609886407852173,-0.594345927238464,0.730467915534973,0.336406856775284 ,-0.724499702453613,0.627744674682617,0.284669786691666,-0.596078813076019,0.546218574047089,0.588502645492554 ,-0.353388220071793,0.625863552093506,0.695278108119965,0.509491503238678,0.564498364925385,0.649430513381958 ,0.460760354995728,0.108215063810349,0.880902588367462,0.0749799236655235,0.161466613411903,0.984025657176971 ,-0.110789246857166,0.611093282699585,0.78376704454422,-0.110789246857166,0.611093282699585,0.78376704454422 ,0.0749799236655235,0.161466613411903,0.984025657176971,-0.279066264629364,0.00181216315831989,0.96027010679245 ,-0.611190378665924,0.347120583057404,0.711304187774658,0.778017222881317,0.0114749372005463,0.62813812494278 ,0.528049111366272,-0.00915573351085186,0.849164485931396,0.460760354995728,0.108215063810349,0.880902588367462 ,0.509491503238678,0.564498364925385,0.649430513381958,0.801663935184479,-0.0182420387864113,0.597496569156647 ,0.584701359272003,-0.0801372230052948,0.807280838489532,0.528049111366272,-0.00915573351085186,0.849164485931396 ,0.778017222881317,0.0114749372005463,0.62813812494278,-0.0995030105113983,-0.912258505821228,0.39734560251236 ,0.584701359272003,-0.0801372230052948,0.807280838489532,0.801663935184479,-0.0182420387864113,0.597496569156647 ,0.713191568851471,-0.57269150018692,0.404205650091171,-0.0995030105113983,-0.912258505821228,0.39734560251236 ,0.713191568851471,-0.57269150018692,0.404205650091171,0.236816734075546,-0.796482741832733,0.556356966495514 ,0.164029166102409,-0.97451639175415,-0.153010532259941,-0.204973682761192,-0.221624344587326,0.953345894813538 ,0.552227675914764,-0.748098790645599,0.367957681417465,-0.274976640939713,-0.741328597068787,0.612225234508514 ,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755 ,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.204973682761192,-0.221624344587326,0.953345894813538 ,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755 ,-0.611190378665924,0.347120583057404,0.711304187774658,-0.279066264629364,0.00181216315831989,0.96027010679245 ,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.420417785644531,0.0594633929431438,0.905380010604858 ,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.337113708257675,-0.517143785953522,0.78671258687973 ,-0.692504823207855,0.347807645797729,0.632033944129944,0.251838862895966,-0.440983474254608,0.861458539962769 ,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245 ,0.0749799236655235,0.161466613411903,0.984025657176971,-0.708681702613831,0.0549901239573956,0.703382074832916 ,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.417345523834229,-0.483428627252579,0.769492983818054 ,-0.840604901313782,-0.077635757625103,0.536056041717529,0.199919357895851,-0.342281520366669,0.918082594871521 ,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.420417785644531,0.0594633929431438,0.905380010604858 ,0.238703370094299,-0.21425598859787,0.947161555290222,-0.708681702613831,0.0549901239573956,0.703382074832916 ,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.924569010734558,0.246832668781281,0.290251165628433 ,-0.744610011577606,0.447527408599854,0.49525260925293,-0.724499702453613,0.627744674682617,0.284669786691666 ,-0.744610011577606,0.447527408599854,0.49525260925293,-0.924569010734558,0.246832668781281,0.290251165628433 ,-0.596078813076019,0.546218574047089,0.588502645492554,0.236816734075546,-0.796482741832733,0.556356966495514 ,0.159226432442665,-0.153974950313568,0.975160837173462,-0.501740396022797,-0.243245616555214,0.830113351345062 ,-0.274976640939713,-0.741328597068787,0.612225234508514,0.164029166102409,-0.97451639175415,-0.153010532259941 ,0.236816734075546,-0.796482741832733,0.556356966495514,-0.274976640939713,-0.741328597068787,0.612225234508514 ,0.552227675914764,-0.748098790645599,0.367957681417465,0.261260062456131,-0.761487662792206,0.593194544315338 ,0.164029166102409,-0.97451639175415,-0.153010532259941,0.552227675914764,-0.748098790645599,0.367957681417465 ,0.419214755296707,-0.523533642292023,0.741735517978668,0.265012234449387,-0.116133384406567,-0.957225978374481 ,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.119323797523975,0.10215725004673,-0.987585842609406 ,0.917835712432861,0.197176292538643,-0.344527393579483,0.90627920627594,0.138545647263527,-0.399328351020813 ,0.798663914203644,0.0795769542455673,-0.596492648124695,0.775733590126038,0.173521965742111,-0.606735110282898 ,0.690571069717407,0.287569731473923,0.66363787651062,0.777039647102356,0.333707332611084,0.533712267875671,0.457932114601135 ,0.272002577781677,0.846352636814117,0.405990958213806,0.468467801809311,0.784671425819397,0.690571069717407 ,0.287569731473923,0.66363787651062,0.501708924770355,0.238893568515778,0.831395208835602,0.548670411109924,0.271492123603821 ,0.790729284286499,0.777039647102356,0.333707332611084,0.533712267875671,0.501708924770355,0.238893568515778 ,0.831395208835602,0.439302206039429,0.130682423710823,0.888783276081085,0.501937747001648,0.161304622888565 ,0.849728941917419,0.548670411109924,0.271492123603821,0.790729284286499,0.399412155151367,0.0118926726281643 ,0.916694343090057,0.47508293390274,0.0346805192530155,0.879257321357727,0.501937747001648,0.161304622888565 ,0.849728941917419,0.439302206039429,0.130682423710823,0.888783276081085,0.399412155151367,0.0118926726281643 ,0.916694343090057,0.365955173969269,-0.121213011443615,0.922704815864563,0.4305479824543,-0.135443344712257 ,0.89234721660614,0.47508293390274,0.0346805192530155,0.879257321357727,0.477214813232422,-0.241928040981293 ,0.844829499721527,0.356381446123123,-0.306900352239609,0.882498979568481,0.353479385375977,-0.210105717182159 ,0.911541521549225,0.658008575439453,-0.304749071598053,0.688587427139282,0.356381446123123,-0.306900352239609 ,0.882498979568481,0.477214813232422,-0.241928040981293,0.844829499721527,0.660950601100922,-0.242743700742722 ,0.71008437871933,0.821053445339203,-0.304968655109406,0.482561200857162,0.658008575439453,-0.304749071598053 ,0.688587427139282,0.660950601100922,-0.242743700742722,0.71008437871933,0.836283266544342,-0.213887274265289 ,0.504858911037445,0.939164042472839,-0.287473499774933,0.187962368130684,0.821053445339203,-0.304968655109406 ,0.482561200857162,0.836283266544342,-0.213887274265289,0.504858911037445,0.952340543270111,-0.189113721251488 ,0.239339768886566,0.960243940353394,-0.113252773880959,-0.255157649517059,0.946958303451538,-0.273756355047226 ,-0.168307527899742,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.960284650325775,-0.0229552984237671 ,-0.278076320886612,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960243940353394,-0.113252773880959 ,-0.255157649517059,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960284650325775,-0.0229552984237671 ,-0.278076320886612,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.906778931617737,0.0885622203350067 ,-0.412199825048447,0.937741100788116,0.0962117910385132,-0.333743721246719,0.937741100788116,0.0962117910385132 ,-0.333743721246719,0.906778931617737,0.0885622203350067,-0.412199825048447,0.899548053741455,0.145640388131142 ,-0.411827832460403,0.927813827991486,0.152230933308601,-0.340569078922272,0.926154136657715,0.165854901075363 ,-0.3387191593647,0.902734816074371,0.140678882598877,-0.406545639038086,0.904744982719421,0.140758752822876 ,-0.402024179697037,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527 ,-0.399328351020813,0.917835712432861,0.197176292538643,-0.344527393579483,0.920450210571289,0.249687507748604 ,-0.300711780786514,0.946711003780365,0.167055711150169,-0.275373607873917,0.73961067199707,0.263024806976318 ,-0.619511127471924,0.917835712432861,0.197176292538643,-0.344527393579483,0.775733590126038,0.173521965742111 ,-0.606735110282898,0.227652028203011,0.973727345466614,-0.0054389201104641,0.781636536121368,0.602840006351471 ,-0.160088449716568,0.792211890220642,0.491865277290344,-0.361204653978348,0.11270098388195,0.815884530544281 ,-0.567125082015991,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.946958303451538,-0.273756355047226 ,-0.168307527899742,0.939164042472839,-0.287473499774933,0.187962368130684,0.952340543270111,-0.189113721251488 ,0.239339768886566,0.353479385375977,-0.210105717182159,0.911541521549225,0.356381446123123,-0.306900352239609 ,0.882498979568481,0.4305479824543,-0.135443344712257,0.89234721660614,0.365955173969269,-0.121213011443615,0.922704815864563 ,0.660950601100922,-0.242743700742722,0.71008437871933,0.477214813232422,-0.241928040981293,0.844829499721527 ,0.188842624425888,-0.479352325201035,0.857064664363861,0.485521018505096,-0.413983583450317,0.769991517066956 ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.152441054582596,-0.013247330673039,0.988223791122437 ,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.128308832645416,0.135050818324089,0.982495844364166 ,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.0331847779452801,-0.163069307804108,0.986056327819824 ,0.125946626067162,-0.109786443412304,0.985943377017975,0.00481598870828748,-0.00974012352526188,0.999940931797028 ,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.0231705605983734,-0.380178421735764,0.924622893333435 ,0.109986312687397,-0.239039734005928,0.964760601520538,0.125946626067162,-0.109786443412304,0.985943377017975 ,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.928428411483765,-0.296662479639053,0.223633751273155 ,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.987223207950592,-0.158936277031899,-0.0113820992410183 ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.890410006046295,0.22136127948761,0.397704929113388 ,-0.888629198074341,0.438762098550797,0.133514106273651,-0.948116004467011,0.0624199733138084,0.311736673116684 ,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.784406840801239,0.0822488218545914,0.614769160747528 ,-0.890410006046295,0.22136127948761,0.397704929113388,-0.953436672687531,0.152786508202553,0.260028511285782 ,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.754620730876923,-0.101689904928207,0.648233532905579 ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.806389153003693,-0.12540277838707,0.577936589717865 ,-0.890410006046295,0.22136127948761,0.397704929113388,-0.702946484088898,0.346591114997864,0.621080338954926 ,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.888629198074341,0.438762098550797,0.133514106273651 ,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.284107565879822,0.352843284606934,0.891506910324097 ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.890410006046295,0.22136127948761,0.397704929113388 ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.244612783193588,0.231081768870354,0.941682457923889 ,-0.284107565879822,0.352843284606934,0.891506910324097,-0.784406840801239,0.0822488218545914,0.614769160747528 ,-0.228005513548851,0.109595887362957,0.967472076416016,-0.244612783193588,0.231081768870354,0.941682457923889 ,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.754620730876923,-0.101689904928207,0.648233532905579 ,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.736215531826019,-0.133181735873222,0.663512825965881 ,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.228005513548851,0.109595887362957,0.967472076416016 ,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.52398544549942,-0.396743208169937,0.753680348396301 ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.505574762821198,-0.704972326755524,0.49740144610405 ,-0.158661097288132,-0.379611909389496,0.911439180374146,-0.52398544549942,-0.396743208169937,0.753680348396301 ,-0.215633437037468,-0.617008090019226,0.756837606430054,0.0384484939277172,-0.525311291217804,0.850041031837463 ,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.187207460403442,-0.466673761606216,0.864389359951019 ,0.322147607803345,-0.331866294145584,0.886614739894867,-0.141511112451553,-0.212750777602196,0.966804921627045 ,0.109986312687397,-0.239039734005928,0.964760601520538,-0.0760671570897102,-0.295749187469482,0.952232241630554 ,-0.141511112451553,-0.212750777602196,0.966804921627045,0.125946626067162,-0.109786443412304,0.985943377017975 ,0.109986312687397,-0.239039734005928,0.964760601520538,-0.141511112451553,-0.212750777602196,0.966804921627045 ,-0.184660717844963,-0.167485594749451,0.968426048755646,0.00481598870828748,-0.00974012352526188,0.999940931797028 ,0.125946626067162,-0.109786443412304,0.985943377017975,-0.184660717844963,-0.167485594749451,0.968426048755646 ,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.128308832645416,0.135050818324089,0.982495844364166 ,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.274106293916702,-0.107289478182793,0.955695927143097 ,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.17640919983387,0.25873214006424,0.949703872203827 ,-0.128308832645416,0.135050818324089,0.982495844364166,-0.414724171161652,0.00967030972242355,0.909895837306976 ,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.224652707576752,0.331979662179947,0.91614443063736 ,-0.17640919983387,0.25873214006424,0.949703872203827,-0.537278592586517,0.0936881303787231,0.83818507194519 ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.78737735748291,0.23807966709137,0.568643093109131 ,-0.702946484088898,0.346591114997864,0.621080338954926,-0.224652707576752,0.331979662179947,0.91614443063736 ,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.925617933273315,-0.333309531211853,0.179265692830086 ,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.858429491519928,-0.151253908872604,0.490123569965363 ,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.96939754486084,-0.16740058362484,0.179570108652115 ,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.835869967937469,-0.162916868925095,0.524194180965424 ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.835869967937469,-0.162916868925095,0.524194180965424 ,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.929407715797424,-0.180255636572838,0.322039186954498 ,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.829591572284698,0.0585402958095074,0.555293500423431 ,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.929407715797424,-0.180255636572838,0.322039186954498 ,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.973927080631256,-0.0629245564341545,0.217960059642792 ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.989299476146698,0.112728737294674,0.0926214382052422 ,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.925617933273315,-0.333309531211853,0.179265692830086 ,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.817183375358582,-0.296553403139114,0.494234204292297 ,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.881475806236267,-0.330746591091156,0.337056517601013 ,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.881475806236267,-0.330746591091156,0.337056517601013 ,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.505574762821198,-0.704972326755524,0.49740144610405 ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.871467232704163,-0.412255734205246,0.265687882900238 ,0.781636536121368,0.602840006351471,-0.160088449716568,0.920450210571289,0.249687507748604,-0.300711780786514 ,0.917835712432861,0.197176292538643,-0.344527393579483,0.904744982719421,0.140758752822876,-0.402024179697037 ,0.902734816074371,0.140678882598877,-0.406545639038086,0.772511541843414,0.0615992993116379,-0.632005870342255 ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.854438722133636,-0.0391706973314285,-0.518073558807373 ,0.960243940353394,-0.113252773880959,-0.255157649517059,0.980879783630371,-0.19241227209568,-0.0291947238147259 ,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.845922589302063,-0.233836695551872,-0.479307234287262 ,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.928428411483765,-0.296662479639053,0.223633751273155 ,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.96939754486084,-0.16740058362484,0.179570108652115 ,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.881475806236267,-0.330746591091156,0.337056517601013 ,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.977448999881744,-0.204651221632957,-0.0520704686641693 ,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.881475806236267,-0.330746591091156,0.337056517601013 ,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.724748373031616,-0.680762529373169,-0.106311395764351 ,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.158661097288132,-0.379611909389496,0.911439180374146 ,0.0384484939277172,-0.525311291217804,0.850041031837463,0.187207460403442,-0.466673761606216,0.864389359951019 ,0.0384484939277172,-0.525311291217804,0.850041031837463,0.631964325904846,-0.724000632762909,0.276485413312912 ,0.776257395744324,-0.559177398681641,0.291110157966614,0.187207460403442,-0.466673761606216,0.864389359951019 ,0.920450210571289,0.249687507748604,-0.300711780786514,0.754057705402374,0.374476611614227,-0.539596378803253 ,0.769950747489929,0.0194198340177536,-0.637807726860046,0.946711003780365,0.167055711150169,-0.275373607873917 ,0.754057705402374,0.374476611614227,-0.539596378803253,0.806110441684723,0.0128834620118141,-0.591624915599823 ,0.626454889774323,0.131802603602409,-0.768233299255371,0.227652028203011,0.973727345466614,-0.0054389201104641 ,0.485665678977966,0.51228803396225,-0.708300650119781,0.781636536121368,0.602840006351471,-0.160088449716568 ,0.978495180606842,0.204968735575676,-0.0231311116367579,0.978555917739868,-0.185044288635254,-0.090481773018837 ,0.983711898326874,-0.176273837685585,0.0351918712258339,0.777039647102356,0.333707332611084,0.533712267875671 ,0.548670411109924,0.271492123603821,0.790729284286499,0.882719457149506,0.298290461301804,0.36308279633522,0.65978866815567 ,0.352559685707092,0.663611769676209,0.922054708003998,0.046831239014864,0.384216070175171,0.7165766954422,0.119066134095192 ,0.687270760536194,0.882719457149506,0.298290461301804,0.36308279633522,0.485665678977966,0.51228803396225,-0.708300650119781 ,0.806110441684723,0.0128834620118141,-0.591624915599823,0.754057705402374,0.374476611614227,-0.539596378803253 ,0.920450210571289,0.249687507748604,-0.300711780786514,0.781636536121368,0.602840006351471,-0.160088449716568 ,-0.085037998855114,0.891525149345398,0.444917380809784,-0.0469878204166889,0.559723138809204,0.827346444129944 ,0.0470689907670021,0.582839369773865,0.811222970485687,0.101348482072353,0.892875194549561,0.438750922679901 ,0.0935290157794952,0.208944618701935,-0.973444640636444,0.0038525490090251,0.171840533614159,-0.985117256641388 ,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.0126510011032224,0.631483376026154,-0.775286257266998 ,0.933896422386169,0.335515409708023,0.123558923602104,0.693666994571686,0.300759524106979,0.654499650001526 ,0.698169589042664,-0.369514137506485,0.613203525543213,0.942301154136658,-0.286070376634598,0.173874363303185 ,0.378664463758469,0.883253812789917,-0.276542812585831,0.368075758218765,0.856088101863861,0.362813085317612 ,0.639892160892487,0.694699466228485,0.328528076410294,0.675914883613586,0.694170355796814,-0.247520759701729 ,0.309483885765076,-0.163968995213509,-0.936661064624786,0.0866431072354317,0.348724126815796,-0.933211922645569 ,0.29194575548172,0.445136368274689,-0.846534848213196,0.452584743499756,-0.12309543043375,-0.883184313774109 ,0.472137004137039,0.668477177619934,-0.574651956558228,0.306242048740387,0.731363773345947,-0.609362602233887 ,0.378664463758469,0.883253812789917,-0.276542812585831,0.675914883613586,0.694170355796814,-0.247520759701729 ,0.768324851989746,0.0888023898005486,-0.63386994600296,0.638194561004639,0.569729268550873,-0.517799377441406 ,0.29194575548172,0.445136368274689,-0.846534848213196,0.40653070807457,0.0205510575324297,-0.913405954837799 ,0.723759770393372,0.0808410197496414,0.685300350189209,0.622246146202087,0.559013962745667,0.548008322715759 ,0.826591491699219,0.555592954158783,0.0897942036390305,0.976288020610809,0.129569977521896,0.173416510224342 ,0.411225825548172,-0.383013069629669,0.8271604180336,0.330161929130554,-0.399422317743301,0.855251371860504 ,0.245776325464249,-0.0611284077167511,0.967397153377533,0.390471458435059,0.0208971817046404,0.920377850532532 ,0.15211121737957,-0.123818121850491,0.980576992034912,0.245776325464249,-0.0611284077167511,0.967397153377533 ,0.330161929130554,-0.399422317743301,0.855251371860504,0.760879397392273,0.00385691528208554,0.648881912231445 ,0.206741601228714,0.69427889585495,-0.689372718334198,0.0479706004261971,0.64763480424881,-0.760439336299896 ,0.0983121022582054,0.926145672798157,-0.364127546548843,0.324993640184402,0.89479660987854,-0.306134164333344 ,0.0983121022582054,0.926145672798157,-0.364127546548843,0.101348482072353,0.892875194549561,0.438750922679901 ,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344 ,0.282659292221069,0.205503165721893,-0.936948299407959,0.413956999778748,-0.385759115219116,-0.824517726898193 ,0.319176852703094,-0.387702465057373,-0.864761769771576,0.114235505461693,0.174652293324471,-0.977980971336365 ,0.283178418874741,0.436211496591568,0.854124963283539,0.439386487007141,-0.126929730176926,0.889285326004028 ,0.800352692604065,-0.0664194524288177,0.595838904380798,0.622246146202087,0.559013962745667,0.548008322715759 ,0.826591491699219,0.555592954158783,0.0897942036390305,0.993047595024109,0.00499473372474313,0.117607519030571 ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.827589094638824,0.557050704956055,-0.069215714931488 ,0.897543668746948,-0.428973793983459,-0.101964816451073,0.747824549674988,-0.399453073740005,-0.530278921127319 ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.983732461929321,-0.14598248898983,-0.104687921702862 ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.747824549674988,-0.399453073740005,-0.530278921127319 ,0.426769316196442,-0.235881611704826,-0.873056590557098,0.517105877399445,-0.187926828861237,-0.835035920143127 ,0.457932114601135,0.272002577781677,0.846352636814117,0.760879397392273,0.00385691528208554,0.648881912231445 ,0.330161929130554,-0.399422317743301,0.855251371860504,0.088567815721035,0.174428701400757,0.980678558349609 ,-0.085037998855114,0.891525149345398,0.444917380809784,0.101348482072353,0.892875194549561,0.438750922679901 ,0.0983121022582054,0.926145672798157,-0.364127546548843,-0.0940461307764053,0.921943545341492,-0.37573316693306 ,0.114235505461693,0.174652293324471,-0.977980971336365,0.319176852703094,-0.387702465057373,-0.864761769771576 ,0.806110441684723,0.0128834620118141,-0.591624915599823,0.485665678977966,0.51228803396225,-0.708300650119781 ,0.897991716861725,-0.426986217498779,0.106271713972092,0.983711898326874,-0.176273837685585,0.0351918712258339 ,0.978555917739868,-0.185044288635254,-0.090481773018837,0.897543668746948,-0.428973793983459,-0.101964816451073 ,0.897991716861725,-0.426986217498779,0.106271713972092,0.729263663291931,-0.375070512294769,0.572273194789886 ,0.922054708003998,0.046831239014864,0.384216070175171,0.983711898326874,-0.176273837685585,0.0351918712258339 ,0.937979876995087,0.334741920232773,-0.0902306362986565,0.933896422386169,0.335515409708023,0.123558923602104 ,0.942301154136658,-0.286070376634598,0.173874363303185,0.95092248916626,-0.279943495988846,-0.131825938820839 ,0.769950747489929,0.0194198340177536,-0.637807726860046,0.754057705402374,0.374476611614227,-0.539596378803253 ,0.0866431072354317,0.348724126815796,-0.933211922645569,0.309483885765076,-0.163968995213509,-0.936661064624786 ,0.7165766954422,0.119066134095192,0.687270760536194,0.922054708003998,0.046831239014864,0.384216070175171,0.729263663291931 ,-0.375070512294769,0.572273194789886,0.397319257259369,-0.209660559892654,0.893409132957459,0.65978866815567 ,0.352559685707092,0.663611769676209,0.564793407917023,-0.0494600534439087,0.823748826980591,0.302472561597824 ,-0.163718789815903,0.938992261886597,0.0738702192902565,0.343476206064224,0.936251699924469,0.411225825548172 ,-0.383013069629669,0.8271604180336,0.698169589042664,-0.369514137506485,0.613203525543213,0.693666994571686 ,0.300759524106979,0.654499650001526,0.286839812994003,0.207817569375038,0.935165643692017,0.411225825548172 ,-0.383013069629669,0.8271604180336,0.286839812994003,0.207817569375038,0.935165643692017,0.088567815721035,0.174428701400757 ,0.980678558349609,0.330161929130554,-0.399422317743301,0.855251371860504,0.368075758218765,0.856088101863861 ,0.362813085317612,0.274606496095657,0.656895995140076,0.702195703983307,0.401270300149918,0.638443887233734 ,0.65678882598877,0.639892160892487,0.694699466228485,0.328528076410294,0.888468742370605,0.446394234895706,0.106561981141567 ,0.784074723720551,0.612660884857178,0.0993655025959015,0.522062003612518,0.681964814662933,0.512225747108459 ,0.648745238780975,0.392575055360794,0.651931345462799,0.794647932052612,0.60278457403183,-0.072009839117527 ,0.784074723720551,0.612660884857178,0.0993655025959015,0.888468742370605,0.446394234895706,0.106561981141567 ,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0935290157794952,0.208944618701935,-0.973444640636444 ,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.143443211913109,0.633186459541321,-0.760591149330139 ,0.231918528676033,0.24745686352253,-0.940733194351196,0.231918528676033,0.24745686352253,-0.940733194351196 ,0.143443211913109,0.633186459541321,-0.760591149330139,0.545021951198578,0.680707216262817,-0.489478081464767 ,0.670513987541199,0.40045166015625,-0.624539375305176,0.282659292221069,0.205503165721893,-0.936948299407959 ,0.71557879447937,0.306318610906601,-0.62778651714325,0.7308149933815,-0.370514005422592,-0.573261618614197,0.413956999778748 ,-0.385759115219116,-0.824517726898193,0.29194575548172,0.445136368274689,-0.846534848213196,0.638194561004639 ,0.569729268550873,-0.517799377441406,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.452584743499756 ,-0.12309543043375,-0.883184313774109,0.670513987541199,0.40045166015625,-0.624539375305176,0.545021951198578 ,0.680707216262817,-0.489478081464767,0.794647932052612,0.60278457403183,-0.072009839117527,0.891878128051758 ,0.445774257183075,-0.0764117166399956,0.0983121022582054,0.926145672798157,-0.364127546548843,0.0479706004261971 ,0.64763480424881,-0.760439336299896,-0.0566258281469345,0.623355150222778,-0.779885828495026,-0.0940461307764053 ,0.921943545341492,-0.37573316693306,0.978555917739868,-0.185044288635254,-0.090481773018837,0.922853767871857 ,-0.106967732310295,-0.369998395442963,0.747824549674988,-0.399453073740005,-0.530278921127319,0.897543668746948 ,-0.428973793983459,-0.101964816451073,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.638194561004639 ,0.569729268550873,-0.517799377441406,0.827589094638824,0.557050704956055,-0.069215714931488,0.995611786842346 ,0.0103343157097697,-0.0930073782801628,0.626454889774323,0.131802603602409,-0.768233299255371,0.806110441684723 ,0.0128834620118141,-0.591624915599823,0.319176852703094,-0.387702465057373,-0.864761769771576,0.227507263422012 ,-0.0530111268162727,-0.972332358360291,0.626454889774323,0.131802603602409,-0.768233299255371,0.227507263422012 ,-0.0530111268162727,-0.972332358360291,0.0866431072354317,0.348724126815796,-0.933211922645569,0.754057705402374 ,0.374476611614227,-0.539596378803253,0.29194575548172,0.445136368274689,-0.846534848213196,0.0866431072354317 ,0.348724126815796,-0.933211922645569,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.40653070807457 ,0.0205510575324297,-0.913405954837799,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.319176852703094 ,-0.387702465057373,-0.864761769771576,0.413956999778748,-0.385759115219116,-0.824517726898193,0.40653070807457 ,0.0205510575324297,-0.913405954837799,0.413956999778748,-0.385759115219116,-0.824517726898193,0.7308149933815 ,-0.370514005422592,-0.573261618614197,0.768324851989746,0.0888023898005486,-0.63386994600296,0.40653070807457 ,0.0205510575324297,-0.913405954837799,0.827589094638824,0.557050704956055,-0.069215714931488,0.638194561004639 ,0.569729268550873,-0.517799377441406,0.768324851989746,0.0888023898005486,-0.63386994600296,0.98238343000412 ,0.131090134382248,-0.133184969425201,0.768324851989746,0.0888023898005486,-0.63386994600296,0.7308149933815 ,-0.370514005422592,-0.573261618614197,0.95092248916626,-0.279943495988846,-0.131825938820839,0.98238343000412 ,0.131090134382248,-0.133184969425201,0.98238343000412,0.131090134382248,-0.133184969425201,0.976288020610809 ,0.129569977521896,0.173416510224342,0.826591491699219,0.555592954158783,0.0897942036390305,0.827589094638824 ,0.557050704956055,-0.069215714931488,0.95092248916626,-0.279943495988846,-0.131825938820839,0.942301154136658 ,-0.286070376634598,0.173874363303185,0.976288020610809,0.129569977521896,0.173416510224342,0.98238343000412 ,0.131090134382248,-0.133184969425201,0.942301154136658,-0.286070376634598,0.173874363303185,0.698169589042664 ,-0.369514137506485,0.613203525543213,0.723759770393372,0.0808410197496414,0.685300350189209,0.976288020610809 ,0.129569977521896,0.173416510224342,0.245776325464249,-0.0611284077167511,0.967397153377533,0.0738702192902565 ,0.343476206064224,0.936251699924469,0.283178418874741,0.436211496591568,0.854124963283539,0.390471458435059 ,0.0208971817046404,0.920377850532532,0.283178418874741,0.436211496591568,0.854124963283539,0.622246146202087 ,0.559013962745667,0.548008322715759,0.723759770393372,0.0808410197496414,0.685300350189209,0.390471458435059 ,0.0208971817046404,0.920377850532532,0.723759770393372,0.0808410197496414,0.685300350189209,0.698169589042664 ,-0.369514137506485,0.613203525543213,0.411225825548172,-0.383013069629669,0.8271604180336,0.390471458435059 ,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.65978866815567 ,0.352559685707092,0.663611769676209,0.0738702192902565,0.343476206064224,0.936251699924469,0.245776325464249 ,-0.0611284077167511,0.967397153377533,0.378664463758469,0.883253812789917,-0.276542812585831,0.306242048740387 ,0.731363773345947,-0.609362602233887,0.206741601228714,0.69427889585495,-0.689372718334198,0.324993640184402 ,0.89479660987854,-0.306134164333344,0.101348482072353,0.892875194549561,0.438750922679901,0.0470689907670021 ,0.582839369773865,0.811222970485687,0.190875470638275,0.632551431655884,0.750629842281342,0.320414483547211 ,0.864260375499725,0.387799590826035,0.190875470638275,0.632551431655884,0.750629842281342,0.274606496095657 ,0.656895995140076,0.702195703983307,0.368075758218765,0.856088101863861,0.362813085317612,0.320414483547211 ,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.320414483547211 ,0.864260375499725,0.387799590826035,0.368075758218765,0.856088101863861,0.362813085317612,0.378664463758469 ,0.883253812789917,-0.276542812585831,0.937979876995087,0.334741920232773,-0.0902306362986565,0.95092248916626 ,-0.279943495988846,-0.131825938820839,0.7308149933815,-0.370514005422592,-0.573261618614197,0.71557879447937 ,0.306318610906601,-0.62778651714325,0.223221242427826,0.259100526571274,0.939701676368713,0.648745238780975 ,0.392575055360794,0.651931345462799,0.522062003612518,0.681964814662933,0.512225747108459,0.1247773244977,0.633714616298676 ,0.763437211513519,0.1247773244977,0.633714616298676,0.763437211513519,-0.0781158208847046,0.611012876033783 ,0.787757039070129,0.0274804774671793,0.267909824848175,0.963052034378052,0.223221242427826,0.259100526571274 ,0.939701676368713,0.405990958213806,0.468467801809311,0.784671425819397,0.0274804774671793,0.267909824848175 ,0.963052034378052,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.1829604357481,0.769297182559967 ,0.61213344335556,0.0738702192902565,0.343476206064224,0.936251699924469,0.302472561597824,-0.163718789815903 ,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.283178418874741,0.436211496591568 ,0.854124963283539,0.397319257259369,-0.209660559892654,0.893409132957459,0.729263663291931,-0.375070512294769 ,0.572273194789886,0.796823620796204,-0.217323467135429,0.563775300979614,0.500088214874268,-0.193674385547638 ,0.844039142131805,0.622246146202087,0.559013962745667,0.548008322715759,0.800352692604065,-0.0664194524288177 ,0.595838904380798,0.993047595024109,0.00499473372474313,0.117607519030571,0.826591491699219,0.555592954158783 ,0.0897942036390305,0.796823620796204,-0.217323467135429,0.563775300979614,0.729263663291931,-0.375070512294769 ,0.572273194789886,0.897991716861725,-0.426986217498779,0.106271713972092,0.979334354400635,-0.157389283180237 ,0.127015009522438,0.979334354400635,-0.157389283180237,0.127015009522438,0.897991716861725,-0.426986217498779 ,0.106271713972092,0.897543668746948,-0.428973793983459,-0.101964816451073,0.983732461929321,-0.14598248898983 ,-0.104687921702862,0.426769316196442,-0.235881611704826,-0.873056590557098,0.747824549674988,-0.399453073740005 ,-0.530278921127319,0.922853767871857,-0.106967732310295,-0.369998395442963,0.795709431171417,0.00568865891546011 ,-0.605651795864105,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.103621512651443,0.603616952896118 ,-0.790511965751648,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0417431555688381,0.749460160732269 ,-0.66073215007782,0.143443211913109,0.633186459541321,-0.760591149330139,-0.0126510011032224,0.631483376026154 ,-0.775286257266998,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843 ,-0.645456671714783,0.545021951198578,0.680707216262817,-0.489478081464767,0.143443211913109,0.633186459541321 ,-0.760591149330139,0.103472903370857,0.756755590438843,-0.645456671714783,0.484853446483612,0.730157256126404 ,-0.481443136930466,0.794647932052612,0.60278457403183,-0.072009839117527,0.545021951198578,0.680707216262817 ,-0.489478081464767,0.484853446483612,0.730157256126404,-0.481443136930466,0.826110124588013,0.547678649425507 ,-0.132628157734871,0.826110124588013,0.547678649425507,-0.132628157734871,0.794824659824371,0.578912436962128 ,0.181972846388817,0.784074723720551,0.612660884857178,0.0993655025959015,0.794647932052612,0.60278457403183 ,-0.072009839117527,0.522062003612518,0.681964814662933,0.512225747108459,0.784074723720551,0.612660884857178 ,0.0993655025959015,0.794824659824371,0.578912436962128,0.181972846388817,0.430720508098602,0.740847587585449 ,0.515387892723084,0.1247773244977,0.633714616298676,0.763437211513519,0.522062003612518,0.681964814662933,0.512225747108459 ,0.430720508098602,0.740847587585449,0.515387892723084,0.0950676947832108,0.75424587726593,0.649673223495483 ,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157 ,-0.0781158208847046,0.611012876033783,0.787757039070129,0.1247773244977,0.633714616298676,0.763437211513519 ,-0.1829604357481,0.769297182559967,0.61213344335556,-0.0781158208847046,0.611012876033783,0.787757039070129 ,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.245767340064049,0.604095578193665,0.758067905902863 ,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0566258281469345,0.623355150222778,-0.779885828495026 ,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0417431555688381,0.749460160732269,-0.66073215007782 ,0.103472903370857,0.756755590438843,-0.645456671714783,-0.0417431555688381,0.749460160732269,-0.66073215007782 ,0.0479706004261971,0.64763480424881,-0.760439336299896,0.206741601228714,0.69427889585495,-0.689372718334198 ,0.484853446483612,0.730157256126404,-0.481443136930466,0.103472903370857,0.756755590438843,-0.645456671714783 ,0.206741601228714,0.69427889585495,-0.689372718334198,0.306242048740387,0.731363773345947,-0.609362602233887 ,0.472137004137039,0.668477177619934,-0.574651956558228,0.826110124588013,0.547678649425507,-0.132628157734871 ,0.484853446483612,0.730157256126404,-0.481443136930466,0.472137004137039,0.668477177619934,-0.574651956558228 ,0.675914883613586,0.694170355796814,-0.247520759701729,0.675914883613586,0.694170355796814,-0.247520759701729 ,0.639892160892487,0.694699466228485,0.328528076410294,0.794824659824371,0.578912436962128,0.181972846388817 ,0.826110124588013,0.547678649425507,-0.132628157734871,0.430720508098602,0.740847587585449,0.515387892723084 ,0.794824659824371,0.578912436962128,0.181972846388817,0.639892160892487,0.694699466228485,0.328528076410294 ,0.401270300149918,0.638443887233734,0.65678882598877,0.0950676947832108,0.75424587726593,0.649673223495483,0.430720508098602 ,0.740847587585449,0.515387892723084,0.401270300149918,0.638443887233734,0.65678882598877,0.274606496095657,0.656895995140076 ,0.702195703983307,0.190875470638275,0.632551431655884,0.750629842281342,0.190875470638275,0.632551431655884 ,0.750629842281342,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0567072629928589,0.694658160209656 ,0.717101395130157,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656 ,0.717101395130157,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0469878204166889,0.559723138809204 ,0.827346444129944,-0.245767340064049,0.604095578193665,0.758067905902863,0.0935290157794952,0.208944618701935 ,-0.973444640636444,0.114235505461693,0.174652293324471,-0.977980971336365,0.485665678977966,0.51228803396225 ,-0.708300650119781,0.0038525490090251,0.171840533614159,-0.985117256641388,0.231918528676033,0.24745686352253 ,-0.940733194351196,0.282659292221069,0.205503165721893,-0.936948299407959,0.114235505461693,0.174652293324471 ,-0.977980971336365,0.0935290157794952,0.208944618701935,-0.973444640636444,0.231918528676033,0.24745686352253 ,-0.940733194351196,0.670513987541199,0.40045166015625,-0.624539375305176,0.71557879447937,0.306318610906601 ,-0.62778651714325,0.282659292221069,0.205503165721893,-0.936948299407959,0.891878128051758,0.445774257183075 ,-0.0764117166399956,0.937979876995087,0.334741920232773,-0.0902306362986565,0.71557879447937,0.306318610906601 ,-0.62778651714325,0.670513987541199,0.40045166015625,-0.624539375305176,0.891878128051758,0.445774257183075 ,-0.0764117166399956,0.888468742370605,0.446394234895706,0.106561981141567,0.933896422386169,0.335515409708023 ,0.123558923602104,0.937979876995087,0.334741920232773,-0.0902306362986565,0.888468742370605,0.446394234895706 ,0.106561981141567,0.648745238780975,0.392575055360794,0.651931345462799,0.693666994571686,0.300759524106979 ,0.654499650001526,0.933896422386169,0.335515409708023,0.123558923602104,0.286839812994003,0.207817569375038 ,0.935165643692017,0.693666994571686,0.300759524106979,0.654499650001526,0.648745238780975,0.392575055360794 ,0.651931345462799,0.223221242427826,0.259100526571274,0.939701676368713,0.088567815721035,0.174428701400757 ,0.980678558349609,0.286839812994003,0.207817569375038,0.935165643692017,0.223221242427826,0.259100526571274 ,0.939701676368713,0.0274804774671793,0.267909824848175,0.963052034378052,0.405990958213806,0.468467801809311 ,0.784671425819397,0.457932114601135,0.272002577781677,0.846352636814117,0.088567815721035,0.174428701400757 ,0.980678558349609,0.0274804774671793,0.267909824848175,0.963052034378052,0.777039647102356,0.333707332611084 ,0.533712267875671,0.760879397392273,0.00385691528208554,0.648881912231445,0.457932114601135,0.272002577781677 ,0.846352636814117,0.926154136657715,0.165854901075363,-0.3387191593647,0.93531322479248,0.178703308105469,-0.305375546216965 ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.922853767871857,-0.106967732310295,-0.369998395442963 ,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.320743799209595,-0.127513855695724,-0.938543379306793 ,0.214329496026039,-0.204933792352676,-0.95502096414566,0.179054066538811,0.451375037431717,-0.8741854429245 ,0.902734816074371,0.140678882598877,-0.406545639038086,0.926154136657715,0.165854901075363,-0.3387191593647 ,0.927813827991486,0.152230933308601,-0.340569078922272,0.899548053741455,0.145640388131142,-0.411827832460403 ,0.899548053741455,0.145640388131142,-0.411827832460403,0.770998120307922,0.0437404066324234,-0.63533353805542 ,0.772511541843414,0.0615992993116379,-0.632005870342255,0.902734816074371,0.140678882598877,-0.406545639038086 ,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.214329496026039,-0.204933792352676,-0.95502096414566 ,0.772511541843414,0.0615992993116379,-0.632005870342255,0.770998120307922,0.0437404066324234,-0.63533353805542 ,0.179054066538811,0.451375037431717,-0.8741854429245,0.214329496026039,-0.204933792352676,-0.95502096414566 ,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.794842600822449,-0.0390454083681107,-0.605558216571808 ,0.564793407917023,-0.0494600534439087,0.823748826980591,0.7165766954422,0.119066134095192,0.687270760536194 ,0.397319257259369,-0.209660559892654,0.893409132957459,0.302472561597824,-0.163718789815903,0.938992261886597 ,0.439386487007141,-0.126929730176926,0.889285326004028,0.302472561597824,-0.163718789815903,0.938992261886597 ,0.397319257259369,-0.209660559892654,0.893409132957459,0.500088214874268,-0.193674385547638,0.844039142131805 ,0.800352692604065,-0.0664194524288177,0.595838904380798,0.439386487007141,-0.126929730176926,0.889285326004028 ,0.500088214874268,-0.193674385547638,0.844039142131805,0.796823620796204,-0.217323467135429,0.563775300979614 ,0.993047595024109,0.00499473372474313,0.117607519030571,0.800352692604065,-0.0664194524288177,0.595838904380798 ,0.796823620796204,-0.217323467135429,0.563775300979614,0.979334354400635,-0.157389283180237,0.127015009522438 ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.993047595024109,0.00499473372474313,0.117607519030571 ,0.979334354400635,-0.157389283180237,0.127015009522438,0.983732461929321,-0.14598248898983,-0.104687921702862 ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.823152184486389,-0.0570015087723732,-0.564952492713928 ,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.983732461929321,-0.14598248898983,-0.104687921702862 ,0.452584743499756,-0.12309543043375,-0.883184313774109,0.823152184486389,-0.0570015087723732,-0.564952492713928 ,0.821371793746948,-0.202065214514732,-0.533402323722839,0.517105877399445,-0.187926828861237,-0.835035920143127 ,0.426769316196442,-0.235881611704826,-0.873056590557098,0.309483885765076,-0.163968995213509,-0.936661064624786 ,0.452584743499756,-0.12309543043375,-0.883184313774109,0.517105877399445,-0.187926828861237,-0.835035920143127 ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.769950747489929,0.0194198340177536,-0.637807726860046 ,0.309483885765076,-0.163968995213509,-0.936661064624786,0.426769316196442,-0.235881611704826,-0.873056590557098 ,0.946711003780365,0.167055711150169,-0.275373607873917,0.769950747489929,0.0194198340177536,-0.637807726860046 ,0.795709431171417,0.00568865891546011,-0.605651795864105,0.93531322479248,0.178703308105469,-0.305375546216965 ,0.904744982719421,0.140758752822876,-0.402024179697037,0.90627920627594,0.138545647263527,-0.399328351020813 ,0.946711003780365,0.167055711150169,-0.275373607873917,0.93531322479248,0.178703308105469,-0.305375546216965 ,0.90627920627594,0.138545647263527,-0.399328351020813,0.904744982719421,0.140758752822876,-0.402024179697037 ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.798663914203644,0.0795769542455673,-0.596492648124695 ,0.784979939460754,0.0750055387616158,-0.614963889122009,0.320743799209595,-0.127513855695724,-0.938543379306793 ,0.265012234449387,-0.116133384406567,-0.957225978374481,0.798663914203644,0.0795769542455673,-0.596492648124695 ,-0.245767340064049,0.604095578193665,0.758067905902863,-0.423373013734818,0.789847135543823,0.443730562925339 ,-0.1829604357481,0.769297182559967,0.61213344335556,0.127582147717476,-0.649050772190094,0.749970614910126,0.261260062456131 ,-0.761487662792206,0.593194544315338,0.0315268374979496,0.564418375492096,0.824886620044708,0.54774808883667 ,0.373568952083588,0.74861091375351,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.805050849914551 ,-0.582361280918121,0.112909138202667,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.912629246711731 ,0.357585817575455,0.198091477155685,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.844159960746765 ,0.49836453795433,-0.197551965713501,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.888629198074341 ,0.438762098550797,0.133514106273651,0.775733590126038,0.173521965742111,-0.606735110282898,0.119323797523975 ,0.10215725004673,-0.987585842609406,0.0699164718389511,0.326290965080261,-0.942680180072784,0.73961067199707 ,0.263024806976318,-0.619511127471924,-0.310650229454041,0.283165037631989,-0.907366514205933,0.0699164718389511 ,0.326290965080261,-0.942680180072784,0.119323797523975,0.10215725004673,-0.987585842609406,-0.313530147075653 ,0.0253957733511925,-0.94923859834671,0.839367091655731,0.0223367810249329,-0.543105840682983,0.725067377090454 ,0.0188654419034719,-0.688419461250305,0.445772647857666,-0.772406101226807,-0.452410876750946,0.698725283145905 ,-0.511526346206665,-0.500123798847198,0.767102777957916,0.172567009925842,-0.617878556251526,0.725067377090454 ,0.0188654419034719,-0.688419461250305,0.839367091655731,0.0223367810249329,-0.543105840682983,0.847418010234833 ,0.181933760643005,-0.49878141283989,0.850323617458344,0.228136360645294,-0.474239885807037,0.817859530448914 ,0.310457706451416,-0.484480977058411,0.788738131523132,0.260696917772293,-0.556712925434113,0.854514420032501 ,0.21429717540741,-0.473161548376083,0.804398238658905,0.375304967164993,-0.460531920194626,0.811875224113464 ,0.435735166072845,-0.388578832149506,0.817859530448914,0.310457706451416,-0.484480977058411,0.850323617458344 ,0.228136360645294,-0.474239885807037,0.901214420795441,0.431201189756393,-0.0433364585042,0.797342956066132 ,0.463364690542221,-0.386700719594955,0.789179563522339,0.518753051757813,-0.328771829605103,0.883821845054626 ,0.46681609749794,-0.0306868441402912,0.825478971004486,0.333341240882874,-0.455486595630646,0.797342956066132 ,0.463364690542221,-0.386700719594955,0.901214420795441,0.431201189756393,-0.0433364585042,0.956080257892609 ,0.274207085371017,-0.103542387485504,0.962835073471069,0.210140570998192,-0.169674947857857,0.83752965927124 ,0.20064052939415,-0.508219838142395,0.825478971004486,0.333341240882874,-0.455486595630646,0.956080257892609 ,0.274207085371017,-0.103542387485504,0.847964406013489,0.0018927511991933,-0.530049800872803,0.841212332248688 ,0.233560338616371,-0.487659126520157,0.974583148956299,0.15406733751297,-0.162637546658516,0.971639752388,-0.0853487625718117 ,-0.220526039600372,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.61088901758194,-0.78132575750351 ,0.127846345305443,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.784134566783905,-0.509350836277008 ,-0.354534596204758,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.61088901758194,-0.78132575750351 ,0.127846345305443,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.886275291442871,0.375701189041138 ,0.270859181880951,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.86350291967392,-0.290329337120056 ,-0.412397265434265,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.478379726409912,0.39488697052002 ,-0.784357786178589,0.727754414081573,0.0140857892110944,-0.685693144798279,0.3254614174366,-0.149335280060768 ,-0.933688282966614,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.889379680156708,-0.442159056663513 ,-0.116185612976551,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.86350291967392,-0.290329337120056 ,-0.412397265434265,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.0535960160195827,-0.641778349876404 ,-0.765015006065369,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.807643473148346,0.341063529253006 ,0.481027781963348,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.91961681842804,-0.250545829534531 ,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.91961681842804,-0.250545829534531 ,-0.302542001008987,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.319865703582764,0.368970960378647 ,-0.872666239738464,-0.106276124715805,0.407822400331497,-0.906855165958405,0.450898140668869,-0.00387678225524724 ,-0.892566978931427,0.752802550792694,0.00600722571834922,-0.658219039440155,0.727935612201691,0.64398717880249 ,-0.23535118997097,0.488869249820709,0.539150297641754,-0.685801565647125,-0.571620225906372,0.314757347106934 ,-0.757745385169983,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.450898140668869,-0.00387678225524724 ,-0.892566978931427,0.294517815113068,0.487916797399521,-0.821703374385834,-0.74421751499176,0.314032524824142 ,-0.589511573314667,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.247537314891815,0.00721516087651253 ,-0.968851506710052,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0602304749190807,-0.267121762037277 ,-0.961778700351715,-0.434757024049759,-0.760941982269287,-0.481615632772446,0.709877908229828,-0.542047500610352 ,-0.44973087310791,-0.807643473148346,0.341063529253006,0.481027781963348,-0.521454632282257,-0.681395828723907 ,0.513599872589111,-0.809531450271606,0.353956669569016,0.468373239040375,-0.639626681804657,-0.543238401412964 ,0.543847143650055,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.454940319061279,-0.69178706407547 ,-0.560767292976379,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.809531450271606,0.353956669569016 ,0.468373239040375,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.985135495662689,0.16939789056778 ,0.0285019427537918,0.902499437332153,-0.42168003320694,0.0876398980617523,0.707824647426605,0.70638644695282 ,-0.00156357116065919,0.985135495662689,0.16939789056778,0.0285019427537918,0.727754414081573,0.0140857892110944 ,-0.685693144798279,0.209208816289902,-0.618555307388306,-0.757377743721008,0.902499437332153,-0.42168003320694 ,0.0876398980617523,0.752802550792694,0.00600722571834922,-0.658219039440155,0.794842600822449,-0.0390454083681107 ,-0.605558216571808,0.707824647426605,0.70638644695282,-0.00156357116065919,0.113118633627892,0.424383550882339 ,-0.898388981819153,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.515371859073639,-0.300769984722137 ,-0.802452027797699,-0.509106159210205,-0.777470827102661,-0.369256019592285,0.556583344936371,-0.535031855106354 ,-0.635575234889984,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.989869713783264,-0.139774799346924 ,-0.0249191801995039,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989299476146698,0.112728737294674 ,0.0926214382052422,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.87356162071228,0.247192814946175 ,-0.419268190860748,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.784134566783905,-0.509350836277008 ,-0.354534596204758,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.989869713783264,-0.139774799346924 ,-0.0249191801995039,-0.888629198074341,0.438762098550797,0.133514106273651,-0.886275291442871,0.375701189041138 ,0.270859181880951,-0.948116004467011,0.0624199733138084,0.311736673116684,0.902499437332153,-0.42168003320694 ,0.0876398980617523,0.209208816289902,-0.618555307388306,-0.757377743721008,0.113118633627892,0.424383550882339 ,-0.898388981819153,0.707824647426605,0.70638644695282,-0.00156357116065919,0.209208816289902,-0.618555307388306 ,-0.757377743721008,0.727754414081573,0.0140857892110944,-0.685693144798279,0.752802550792694,0.00600722571834922 ,-0.658219039440155,0.113118633627892,0.424383550882339,-0.898388981819153,0.727754414081573,0.0140857892110944 ,-0.685693144798279,0.889379680156708,-0.442159056663513,-0.116185612976551,0.727935612201691,0.64398717880249 ,-0.23535118997097,0.752802550792694,0.00600722571834922,-0.658219039440155,0.889379680156708,-0.442159056663513 ,-0.116185612976551,-0.0490232147276402,-0.692386627197266,-0.71985936164856,-0.106276124715805,0.407822400331497 ,-0.906855165958405,0.727935612201691,0.64398717880249,-0.23535118997097,-0.0490232147276402,-0.692386627197266 ,-0.71985936164856,0.3254614174366,-0.149335280060768,-0.933688282966614,0.450898140668869,-0.00387678225524724 ,-0.892566978931427,-0.106276124715805,0.407822400331497,-0.906855165958405,0.3254614174366,-0.149335280060768 ,-0.933688282966614,0.709877908229828,-0.542047500610352,-0.44973087310791,0.488869249820709,0.539150297641754 ,-0.685801565647125,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.709877908229828,-0.542047500610352 ,-0.44973087310791,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.571620225906372,0.314757347106934 ,-0.757745385169983,0.488869249820709,0.539150297641754,-0.685801565647125,-0.434757024049759,-0.760941982269287 ,-0.481615632772446,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.247537314891815,0.00721516087651253 ,-0.968851506710052,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.0602304749190807,-0.267121762037277 ,-0.961778700351715,0.556583344936371,-0.535031855106354,-0.635575234889984,0.294517815113068,0.487916797399521 ,-0.821703374385834,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.556583344936371,-0.535031855106354 ,-0.635575234889984,-0.509106159210205,-0.777470827102661,-0.369256019592285,-0.74421751499176,0.314032524824142 ,-0.589511573314667,0.294517815113068,0.487916797399521,-0.821703374385834,-0.509106159210205,-0.777470827102661 ,-0.369256019592285,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.633409440517426,-0.235751509666443 ,-0.737030327320099,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.515371859073639,-0.300769984722137 ,-0.802452027797699,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.319865703582764,0.368970960378647 ,-0.872666239738464,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.0535960160195827,-0.641778349876404 ,-0.765015006065369,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.952590048313141,0.304238706827164 ,-0.00332731963135302,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.667489945888519,-0.736912131309509 ,0.106853626668453,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.91961681842804,-0.250545829534531 ,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.86350291967392,-0.290329337120056 ,-0.412397265434265,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.735480487346649,0.344063550233841 ,-0.583685457706451,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.454940319061279,-0.69178706407547 ,-0.560767292976379,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.807643473148346,0.341063529253006 ,0.481027781963348,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.526285529136658,-0.789061963558197 ,0.316867142915726,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.133638396859169,-0.991028487682343 ,-0.00182775978464633,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.289891123771667,-0.78655070066452 ,0.545253217220306,0.017691396176815,-0.98781031370163,0.15465372800827,0.017691396176815,-0.98781031370163,0.15465372800827 ,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687 ,0.139990121126175,-0.714202702045441,0.685796797275543,0.316983908414841,-0.933099210262299,0.169844269752502 ,0.316983908414841,-0.933099210262299,0.169844269752502,0.355301350355148,-0.934036493301392,0.0365620106458664 ,0.355301350355148,-0.934036493301392,0.0365620106458664,0.617214262485504,-0.750285804271698,0.236891880631447 ,0.432984858751297,-0.720436871051788,0.541751623153687,0.397023230791092,-0.910409390926361,-0.116307109594345 ,0.713743150234222,-0.689680516719818,-0.122112594544888,0.617214262485504,-0.750285804271698,0.236891880631447 ,0.397023230791092,-0.910409390926361,-0.116307109594345,0.387578755617142,-0.825659155845642,-0.409962981939316 ,0.698415637016296,-0.626996219158173,-0.345096111297607,0.713743150234222,-0.689680516719818,-0.122112594544888 ,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607 ,0.347473055124283,-0.882382750511169,-0.31727460026741,0.347473055124283,-0.882382750511169,-0.31727460026741 ,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228 ,0.582049369812012,-0.552822172641754,-0.596327304840088,0.632658183574677,-0.595792829990387,-0.494746923446655 ,0.366124451160431,-0.844667136669159,-0.390500038862228,0.0932797566056252,-0.850050926208496,-0.518374681472778 ,0.0932797566056252,-0.850050926208496,-0.518374681472778,-0.107030250132084,-0.605656087398529,-0.788495600223541 ,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.0686139315366745,-0.854096055030823,-0.515569627285004 ,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.451495438814163,-0.670070111751556,-0.589201033115387 ,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387 ,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.3389513194561,-0.904059052467346,-0.260363727807999 ,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.526285529136658,-0.789061963558197,0.316867142915726 ,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.788328349590302,-0.474288523197174,0.39190411567688 ,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.997484087944031,-0.0642545074224472,-0.0299487132579088 ,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.848265528678894,-0.243028342723846,0.47051340341568 ,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.884543001651764,-0.164741396903992,0.436398863792419 ,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.983820915222168,-0.177888512611389,-0.0212618205696344 ,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.867790400981903,-0.310010522603989,0.388372659683228 ,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.982089936733246,-0.183242216706276,-0.0438368730247021 ,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.788328349590302,-0.474288523197174,0.39190411567688 ,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.987256348133087,-0.145976811647415,-0.063369482755661 ,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553 ,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.788328349590302,-0.474288523197174,0.39190411567688 ,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553 ,-0.182520136237144,-0.960930228233337,-0.208085164427757,-0.562327146530151,-0.809826016426086,0.167242348194122 ,0.238703370094299,-0.21425598859787,0.947161555290222,0.328837275505066,-0.326990753412247,0.885970175266266 ,0.199919357895851,-0.342281520366669,0.918082594871521,0.709650099277496,-0.321021109819412,0.627169966697693 ,0.251838862895966,-0.440983474254608,0.861458539962769,0.0749799236655235,0.161466613411903,0.984025657176971 ,0.460760354995728,0.108215063810349,0.880902588367462,0.072246678173542,-0.0245807897299528,0.997083842754364 ,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.280184537172318,-0.219449639320374,0.934525847434998 ,0.0549214817583561,-0.121100522577763,0.991119742393494,0.072246678173542,-0.0245807897299528,0.997083842754364 ,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.371589094400406,-0.191971749067307,0.908332765102386 ,0.904132843017578,0.38877084851265,-0.177203312516212,0.924062311649323,0.166339710354805,-0.344151109457016 ,0.985335350036621,0.0123839350417256,-0.170178771018982,-0.944730460643768,-0.313157916069031,-0.0970383062958717 ,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.89118105173111,-0.452543765306473,0.0316311828792095 ,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.979109942913055,-0.187053516507149,-0.0797165557742119 ,0.781636536121368,0.602840006351471,-0.160088449716568,0.917835712432861,0.197176292538643,-0.344527393579483 ,0.792211890220642,0.491865277290344,-0.361204653978348,-0.52398544549942,-0.396743208169937,0.753680348396301 ,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.75563770532608,-0.50673520565033,0.415007293224335 ,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.882953405380249,0.46945133805275,0.00294615048915148 ,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.844159960746765,0.49836453795433,-0.197551965713501 ,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.829591572284698,0.0585402958095074,0.555293500423431 ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.941641628742218,-0.00888281501829624,0.336499899625778 ,-0.953436672687531,0.152786508202553,0.260028511285782,-0.973927080631256,-0.0629245564341545,0.217960059642792 ,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.727824807167053,-0.528583109378815,-0.436887800693512 ,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.994358837604523,0.088942214846611,0.0577910803258419 ,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.644507586956024,0.336329728364944,0.686652958393097 ,-0.642944931983948,0.0801258310675621,0.761709690093994,0.495204418897629,-0.163849160075188,0.853185832500458 ,0.0833947658538818,-0.437338054180145,0.895422101020813,0.54774808883667,0.373568952083588,0.74861091375351 ,0.628335058689117,0.550278067588806,0.549899160861969,0.86673891544342,0.195172861218452,-0.458989411592484 ,0.87714958190918,0.359215557575226,-0.318704843521118,0.868426561355591,0.2465450912714,-0.430175423622131,-0.941869378089905 ,-0.335682570934296,-0.0141169847920537,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.772903144359589 ,-0.524522066116333,-0.357067674398422,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281 ,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.865038812160492 ,0.500161468982697,0.0393235273659229,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.28744050860405 ,0.955214440822601,-0.0703088492155075,-0.776516318321228,0.531664490699768,-0.33816459774971,0.843789756298065 ,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065 ,-0.527951836585999,-0.0963620916008949,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.928109109401703 ,-0.270218104124069,0.256116449832916,0.943277299404144,-0.202248081564903,0.263293832540512,0.776516377925873 ,0.531664490699768,-0.338164389133453,0.287440627813339,0.955214440822601,-0.070308543741703,0.332606196403503 ,0.942266285419464,-0.0388250686228275,0.865038812160492,0.500161468982697,0.0393240377306938,0.182520046830177 ,-0.960930287837982,-0.208085060119629,0.581761598587036,-0.790978848934174,-0.189488589763641,0.562327146530151 ,-0.809826016426086,0.167242258787155,0.198757439851761,-0.919363081455231,-0.339509904384613,0.603638291358948 ,-0.670441269874573,-0.431427150964737,0.581761598587036,-0.790978848934174,-0.189488589763641,0.198757439851761 ,-0.919363081455231,-0.339509904384613,-0.272133141756058,-0.872126579284668,-0.406618744134903,-0.599566876888275 ,-0.77289891242981,-0.207718148827553,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.141517594456673 ,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673 ,-0.947756111621857,-0.285886585712433,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.709949254989624 ,0.60140985250473,0.366439938545227,-0.380683273077011,0.86094468832016,0.337423235177994,-0.462400823831558 ,0.884378015995026,0.0637255012989044,0.73961067199707,0.263024806976318,-0.619511127471924,0.792211890220642 ,0.491865277290344,-0.361204653978348,0.917835712432861,0.197176292538643,-0.344527393579483,0.0910219326615334 ,-0.210485890507698,-0.97335022687912,0.265012234449387,-0.116133384406567,-0.957225978374481,0.320743799209595 ,-0.127513855695724,-0.938543379306793,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864 ,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.310650229454041 ,0.283165037631989,-0.907366514205933,-0.277701437473297,0.780102908611298,-0.56064373254776,0.11270098388195 ,0.815884530544281,-0.567125082015991,0.0699164718389511,0.326290965080261,-0.942680180072784,0.825562000274658 ,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658 ,0.439345568418503,-0.354150801897049,0.660678803920746,-0.179935500025749,0.728784441947937,0.664143323898315 ,-0.190197542309761,0.72300660610199,0.280544310808182,-0.2230264544487,0.933570623397827,0.370588421821594,-0.193350583314896 ,0.908449113368988,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.978282392024994,-0.200846880674362 ,-0.0512255467474461,0.861376106739044,-0.246860504150391,0.443949490785599,0.884072363376617,-0.159779712557793 ,0.439188450574875,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881938695907593,-0.0529328174889088 ,-0.468382596969604,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.988763093948364,-0.140536084771156 ,-0.0509620234370232,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.883630573749542,-0.0664602965116501 ,-0.463443666696548,0.639175117015839,0.0817547887563705,-0.764703452587128,0.632078886032104,0.0873222127556801 ,-0.769968271255493,0.230421900749207,0.163790717720985,-0.95920717716217,0.632078886032104,0.0873222127556801 ,-0.769968271255493,0.639175117015839,0.0817547887563705,-0.764703452587128,0.243145853281021,0.221795409917831 ,-0.944291710853577,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.227913439273834,0.190211743116379 ,-0.954921424388886,0.230421900749207,0.163790717720985,-0.95920717716217,0.243145853281021,0.221795409917831 ,-0.944291710853577,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.227913439273834,0.190211743116379 ,-0.954921424388886,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.673633635044098,0.289073169231415 ,-0.680187046527863,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.850684106349945,0.180962756276131 ,-0.493547379970551,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.673633635044098,0.289073169231415 ,-0.680187046527863,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.958607912063599,0.205605447292328 ,-0.196970209479332,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.857439279556274,0.218963667750359 ,-0.465674519538879,-0.93060040473938,0.126688674092293,0.343413561582565,-0.924485385417938,0.137891575694084 ,0.355404943227768,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.964663922786713,0.191057458519936 ,-0.18144017457962,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.389621406793594,0.0748821347951889 ,0.917925834655762,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.703129649162292,0.0220469851046801 ,0.710719764232636,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.1855189204216,-0.00743514811620116 ,0.982612550258636,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.388236194849014,-0.50770115852356 ,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.389621406793594,0.0748821347951889 ,0.917925834655762,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.0499088205397129,-0.128681614995003 ,0.990429282188416,0.319739699363709,-0.689254701137543,0.650149524211884,0.329437464475632,-0.321430414915085 ,0.887780070304871,0.668613970279694,-0.338565081357956,0.662064254283905,0.68229067325592,-0.351099163293839 ,0.641255617141724,0.811961233615875,-0.33458149433136,0.478303402662277,0.68229067325592,-0.351099163293839 ,0.641255617141724,0.668613970279694,-0.338565081357956,0.662064254283905,0.82292628288269,-0.280684322118759 ,0.493972301483154,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.811961233615875,-0.33458149433136 ,0.478303402662277,0.82292628288269,-0.280684322118759,0.493972301483154,0.991608023643494,-0.114275835454464 ,-0.060452651232481,0.881715893745422,0.054974939674139,-0.468566834926605,0.878365039825439,0.0618300177156925 ,-0.473974645137787,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.991608023643494,-0.114275835454464 ,-0.060452651232481,0.878365039825439,0.0618300177156925,-0.473974645137787,0.881715893745422,0.054974939674139 ,-0.468566834926605,0.676566541194916,0.144181370735168,-0.722128391265869,0.696259915828705,0.165328323841095 ,-0.6984903216362,0.676566541194916,0.144181370735168,-0.722128391265869,0.286524504423141,0.225191175937653 ,-0.931231796741486,0.3039411008358,0.26229527592659,-0.915871679782867,0.696259915828705,0.165328323841095,-0.6984903216362 ,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.213439926505089,0.370307356119156,-0.904055237770081 ,0.3039411008358,0.26229527592659,-0.915871679782867,0.286524504423141,0.225191175937653,-0.931231796741486,-0.639900922775269 ,0.420081675052643,-0.643473565578461,-0.213439926505089,0.370307356119156,-0.904055237770081,-0.214377388358116 ,0.321097940206528,-0.922463238239288,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.653601109981537 ,0.351934164762497,-0.670035779476166,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.820141792297363 ,0.414948493242264,-0.393935561180115,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.843356728553772 ,0.326204419136047,-0.427013009786606,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.944865584373474 ,0.320159882307053,-0.0687510371208191,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.935219764709473 ,0.0955542922019959,0.340930134057999,-0.944865584373474,0.320159882307053,-0.0687510371208191,-0.957767188549042 ,0.271569937467575,-0.094508096575737,-0.927268087863922,0.115808911621571,0.356036812067032,-0.709845840930939 ,-0.0613325238227844,0.701681673526764,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.935219764709473 ,0.0955542922019959,0.340930134057999,-0.927268087863922,0.115808911621571,0.356036812067032,0.602446496486664 ,-0.488442957401276,0.631254017353058,0.78125125169754,-0.138539433479309,0.608648777008057,0.805302381515503 ,-0.358387529850006,0.472277879714966,0.605372726917267,0.000812157464679331,0.795941710472107,0.602446496486664 ,-0.488442957401276,0.631254017353058,0.319739699363709,-0.689254701137543,0.650149524211884,0.408358931541443 ,-0.833707392215729,0.371718913316727,0.805302381515503,-0.358387529850006,0.472277879714966,0.685771405696869 ,-0.727804124355316,0.00433491868898273,0.301932573318481,-0.883707880973816,0.357627093791962,0.622698485851288 ,-0.640293836593628,0.44974485039711,0.78181403875351,-0.124027468264103,-0.611051499843597,0.368462383747101 ,-0.106815822422504,-0.923485696315765,0.318273335695267,-0.280295252799988,-0.905613958835602,0.746579051017761 ,-0.327975332736969,-0.578836619853973,0.383778035640717,0.0243120118975639,-0.923105239868164,0.368462383747101 ,-0.106815822422504,-0.923485696315765,0.78181403875351,-0.124027468264103,-0.611051499843597,0.780589640140533 ,-0.0567772276699543,-0.622459769248962,0.872841775417328,-0.161784738302231,-0.460405200719833,0.645673513412476 ,-0.0602749027311802,-0.761231005191803,0.653478145599365,0.112765118479729,-0.748498737812042,0.892382204532623 ,-0.0374441854655743,-0.449724316596985,0.603638291358948,-0.670441269874573,-0.431427150964737,0.442950963973999 ,-0.635696709156036,-0.632205784320831,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.872841775417328 ,-0.161784738302231,-0.460405200719833,0.219755545258522,-0.882318615913391,-0.416198641061783,0.442950963973999 ,-0.635696709156036,-0.632205784320831,0.603638291358948,-0.670441269874573,-0.431427150964737,0.362535744905472 ,-0.881527543067932,-0.302451580762863,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.176827967166901 ,-0.795711040496826,-0.579288959503174,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.217101514339447 ,-0.0525678582489491,-0.974732518196106,-0.187843710184097,0.254132181406021,-0.948752641677856,0.24560159444809 ,0.232358887791634,-0.941110610961914,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.345599442720413 ,-0.564565002918243,-0.74955141544342,0.224707394838333,-0.83567225933075,-0.501157164573669,0.224707394838333 ,-0.83567225933075,-0.501157164573669,0.16710638999939,-0.594872176647186,-0.786258578300476,0.156650885939598 ,0.00669354572892189,-0.987631380558014,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.345599442720413 ,-0.564565002918243,-0.74955141544342,0.16710638999939,-0.594872176647186,-0.786258578300476,0.394656956195831 ,0.265770107507706,-0.879552245140076,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.156650885939598 ,0.00669354572892189,-0.987631380558014,0.168669149279594,0.29014664888382,-0.942000865936279,0.431132704019547 ,0.237300783395767,-0.870524525642395,0.394656956195831,0.265770107507706,-0.879552245140076,0.168669149279594 ,0.29014664888382,-0.942000865936279,0.2085961997509,0.239187613129616,-0.948302090167999,0.491525501012802,0.22898742556572 ,-0.840218663215637,0.431132704019547,0.237300783395767,-0.870524525642395,0.2085961997509,0.239187613129616 ,-0.948302090167999,0.222743824124336,0.213152140378952,-0.951289296150208,0.502497434616089,0.354075133800507 ,-0.788750350475311,0.491525501012802,0.22898742556572,-0.840218663215637,0.222743824124336,0.213152140378952 ,-0.951289296150208,0.215944558382034,0.319608330726624,-0.922614991664886,0.500628232955933,0.440243989229202 ,-0.745356738567352,0.502497434616089,0.354075133800507,-0.788750350475311,0.215944558382034,0.319608330726624 ,-0.922614991664886,0.224338784813881,0.414775222539902,-0.881835401058197,0.49361053109169,0.523924946784973 ,-0.694155097007751,0.500628232955933,0.440243989229202,-0.745356738567352,0.224338784813881,0.414775222539902 ,-0.881835401058197,0.233416378498077,0.501707494258881,-0.832950413227081,0.471412837505341,0.597895562648773 ,-0.648298442363739,0.49361053109169,0.523924946784973,-0.694155097007751,0.233416378498077,0.501707494258881 ,-0.832950413227081,0.216972485184669,0.595779240131378,-0.773285210132599,0.44583061337471,0.492900937795639 ,-0.747183859348297,0.471412837505341,0.597895562648773,-0.648298442363739,0.216972485184669,0.595779240131378 ,-0.773285210132599,0.204966142773628,0.497180044651031,-0.843090057373047,0.424920648336411,0.331089466810226 ,-0.842509508132935,0.44583061337471,0.492900937795639,-0.747183859348297,0.204966142773628,0.497180044651031 ,-0.843090057373047,0.184527859091759,0.31499707698822,-0.930981338024139,0.354670226573944,0.281918495893478 ,-0.89147686958313,0.424920648336411,0.331089466810226,-0.842509508132935,0.184527859091759,0.31499707698822 ,-0.930981338024139,0.152592211961746,0.243283241987228,-0.957877278327942,0.236234411597252,0.0899422541260719 ,-0.967524528503418,0.468770742416382,0.121921703219414,-0.874865233898163,0.354670226573944,0.281918495893478 ,-0.89147686958313,0.152592211961746,0.243283241987228,-0.957877278327942,0.0293396916240454,-0.0204683300107718 ,-0.999359905719757,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.152592211961746,0.243283241987228 ,-0.957877278327942,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.181899905204773,-0.161402761936188 ,-0.969980180263519,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.0293396916240454,-0.0204683300107718 ,-0.999359905719757,0.097769021987915,-0.178414672613144,-0.979085981845856,0.183815449476242,-0.694319665431976 ,-0.695795953273773,0.287791073322296,-0.680340945720673,-0.67402708530426,0.210264012217522,-0.226016640663147 ,-0.951160073280334,0.183815449476242,-0.694319665431976,-0.695795953273773,0.181899905204773,-0.161402761936188 ,-0.969980180263519,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.248274028301239,-0.562410414218903 ,0.788704335689545,0.626252830028534,0.308739811182022,0.715882003307343,0.750469028949738,0.503480017185211 ,0.42814028263092,0.0119833052158356,-0.684736132621765,0.728692531585693,0.991423904895782,0.113214619457722 ,0.0652767568826675,0.80362457036972,-0.592847883701324,0.052143108099699,0.960353672504425,0.263352990150452 ,0.0914659649133682,0.815547049045563,-0.485381871461868,-0.315099239349365,0.972172915935516,-0.00723095051944256 ,0.234152868390083,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.183815449476242,-0.694319665431976 ,-0.695795953273773,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.361754894256592,-0.299040019512177 ,-0.883011043071747,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.407887548208237,-0.115010686218739 ,-0.905759513378143,-0.361754894256592,-0.299040019512177,-0.883011043071747,0.097769021987915,-0.178414672613144 ,-0.979085981845856,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.412408858537674,0.0103200003504753 ,-0.910940408706665,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.0293396916240454,-0.0204683300107718 ,-0.999359905719757,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.438451677560806,0.0950856506824493 ,-0.893710732460022,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.0849575996398926,0.129486069083214 ,-0.9879350066185,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.552984535694122,0.0753506049513817 ,-0.829777300357819,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.154521003365517,0.240299493074417 ,-0.958321154117584,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.314977377653122,0.411381006240845 ,-0.855309844017029,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.552984535694122,0.0753506049513817 ,-0.829777300357819,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.76449728012085,0.158614858984947 ,-0.624808132648468,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.314977377653122,0.411381006240845 ,-0.855309844017029,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.738151073455811,0.192115649580956 ,-0.646702826023102,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.337705463171005,0.352743804454803 ,-0.872655034065247,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.683530271053314,0.162589937448502 ,-0.711583316326141,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.323528319597244,0.300020337104797 ,-0.89739465713501,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.243201240897179,0.169641554355621 ,-0.955026090145111,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.683530271053314,0.162589937448502 ,-0.711583316326141,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.643724501132965,0.0191281009465456 ,-0.765018165111542,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.243201240897179,0.169641554355621 ,-0.955026090145111,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.261592835187912,0.265700459480286 ,-0.927886009216309,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.643724501132965,0.0191281009465456 ,-0.765018165111542,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.700080990791321,-0.0367838852107525 ,-0.713115334510803,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.261592835187912,0.265700459480286 ,-0.927886009216309,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.0161609761416912,0.992576837539673 ,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0235754959285259,0.833040595054626 ,-0.552709341049194,0.0145869944244623,0.988409578800201,-0.151108130812645,0.707107186317444,1.42954419857233e-007 ,-0.707106351852417,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822137832642,0.145729631185532 ,-0.924653470516205,0.653282701969147,0.27059879899025,-0.707105338573456,0.653282701969147,0.27059879899025 ,-0.707105338573456,0.351822137832642,0.145729631185532,-0.924653470516205,0.269274324178696,0.269274234771729 ,-0.924652755260468,0.500002682209015,0.500003159046173,-0.707102656364441,0.500002682209015,0.500003159046173 ,-0.707102656364441,0.269274324178696,0.269274234771729,-0.924652755260468,0.145730510354042,0.351823717355728 ,-0.924652755260468,0.270599722862244,0.653285622596741,-0.707102358341217,0.270599722862244,0.653285622596741 ,-0.707102358341217,0.145730510354042,0.351823717355728,-0.924652755260468,-4.91471212171746e-007,0.380813121795654 ,-0.92465204000473,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-8.65250569859199e-007,0.707113921642303 ,-0.707099616527557,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-0.145731240510941,0.351825833320618 ,-0.924651801586151,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.270600706338882,0.653288960456848 ,-0.707098841667175,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.269273996353149,0.269273847341537 ,-0.924652934074402,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.500002384185791,0.500002264976501 ,-0.707103490829468,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.351821750402451,0.145729392766953 ,-0.924653649330139,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.653282523155212,0.270598083734512 ,-0.707105815410614,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.38080957531929,-5.00349642607034e-007 ,-0.92465353012085,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.707108438014984,-4.28863302204263e-007 ,-0.707105159759521,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821571588516,-0.145729005336761 ,-0.924653768539429,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.653282105922699,-0.270597249269485 ,-0.707106530666351,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.269271582365036,-0.269272118806839 ,-0.924654185771942,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.499998718500137,-0.499999731779099 ,-0.707107841968536,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.145729050040245,-0.351821690797806 ,-0.924653708934784,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.270597517490387,-0.653282105922699 ,-0.707106411457062,-0.145729050040245,-0.351821690797806,-0.924653708934784,7.21318116347902e-008,-0.380809605121613 ,-0.924653470516205,3.76195913531774e-007,-0.707108318805695,-0.707105219364166,3.76195913531774e-007,-0.707108318805695 ,-0.707105219364166,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,0.145730197429657,-0.351823180913925 ,-0.924652993679047,0.270599752664566,-0.653284311294556,-0.707103490829468,0.270599752664566,-0.653284311294556 ,-0.707103490829468,0.145730197429657,-0.351823180913925,-0.924652993679047,0.269273817539215,-0.269274026155472 ,-0.924652934074402,0.500002145767212,-0.500002562999725,-0.707103431224823,0.500002145767212,-0.500002562999725 ,-0.707103431224823,0.269273817539215,-0.269274026155472,-0.924652934074402,0.351822197437286,-0.145729750394821 ,-0.92465341091156,0.653282999992371,-0.270599007606506,-0.707105040550232,0.653282999992371,-0.270599007606506 ,-0.707105040550232,0.351822197437286,-0.145729750394821,-0.92465341091156,0.380808919668198,7.69873338413163e-008 ,-0.924653768539429,0.707107186317444,1.42954419857233e-007,-0.707106351852417,2.76187535064309e-008,-1.53088933529943e-007 ,-1,0.351822137832642,0.145729631185532,-0.924653470516205,0.380808919668198,7.69873338413163e-008,-0.924653768539429 ,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269274324178696,0.269274234771729,-0.924652755260468,0.351822137832642 ,0.145729631185532,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730510354042,0.351823717355728 ,-0.924652755260468,0.269274324178696,0.269274234771729,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007 ,-1,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,0.145730510354042,0.351823717355728,-0.924652755260468 ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145731240510941,0.351825833320618,-0.924651801586151,-4.91471212171746e-007 ,0.380813121795654,-0.92465204000473,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269273996353149,0.269273847341537 ,-0.924652934074402,-0.145731240510941,0.351825833320618,-0.924651801586151,2.76187535064309e-008,-1.53088933529943e-007 ,-1,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.269273996353149,0.269273847341537,-0.924652934074402 ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821750402451 ,0.145729392766953,-0.924653649330139,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821571588516,-0.145729005336761 ,-0.924653768539429,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,2.76187535064309e-008,-1.53088933529943e-007 ,-1,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.351821571588516,-0.145729005336761,-0.924653768539429 ,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.269271582365036 ,-0.269272118806839,-0.924654185771942,2.76187535064309e-008,-1.53088933529943e-007,-1,7.21318116347902e-008 ,-0.380809605121613,-0.924653470516205,-0.145729050040245,-0.351821690797806,-0.924653708934784,2.76187535064309e-008 ,-1.53088933529943e-007,-1,0.145730197429657,-0.351823180913925,-0.924652993679047,7.21318116347902e-008,-0.380809605121613 ,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269273817539215,-0.269274026155472,-0.924652934074402 ,0.145730197429657,-0.351823180913925,-0.924652993679047,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822197437286 ,-0.145729750394821,-0.92465341091156,0.269273817539215,-0.269274026155472,-0.924652934074402,2.76187535064309e-008 ,-1.53088933529943e-007,-1,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822197437286,-0.145729750394821 ,-0.92465341091156,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-0.16665855050087,-0.398711144924164 ,-0.901806175708771,-0.166320815682411,-0.355819970369339,-0.919635534286499,-4.25225262006279e-005,-0.53346848487854 ,-0.84581995010376,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.583353996276855,0.174302786588669 ,-0.793294787406921,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.474208623170853,-0.238814353942871 ,-0.847404181957245,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.626655638217926,-0.314949661493301 ,-0.712817966938019,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.539180338382721,-0.263834714889526 ,-0.799797356128693,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.646563589572906,-0.121796235442162 ,-0.753074467182159,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.892938792705536,-0.105374619364738 ,0.437671780586243,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.352033823728561,-0.930627882480621 ,-0.100019671022892,-0.166118785738945,-0.764228582382202,-0.623184740543365,4.79029440612067e-005,-0.794294953346252 ,-0.607532322406769,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.583353996276855,0.174302786588669 ,-0.793294787406921,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.322878926992416,0.229583457112312 ,-0.918172419071198,0.343204021453857,-0.33707195520401,-0.876694619655609,-0.193181023001671,-0.0350730493664742 ,-0.980536043643951,-0.148570522665977,-0.138561144471169,-0.979146361351013,0.179372578859329,-0.472685307264328 ,-0.862782776355743,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.193181023001671,-0.0350730493664742 ,-0.980536043643951,0.465988546609879,-0.185971200466156,-0.865025639533997,0.519467711448669,0.00208272109739482 ,-0.854487538337708,-0.00083814247045666,0.651532232761383,-0.758620500564575,-0.000496746390126646,0.380419790744781 ,-0.924813807010651,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.283784359693527,0.524189174175262 ,-0.802927255630493,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.892938792705536,-0.105374619364738 ,0.437671780586243,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.616882503032684,-0.380074203014374 ,-0.689202189445496,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635 ,-0.647402346134186,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.720038771629334,-0.514539837837219 ,0.465610325336456,-0.134015202522278,-0.116930104792118,-0.984056532382965,-9.11212846403942e-005,-0.237379238009453 ,-0.97141706943512,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-0.166320815682411,-0.355819970369339 ,-0.919635534286499,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-0.127862602472305,-0.339489370584488 ,-0.931878805160522,0.188191697001457,0.451240569353104,-0.872333526611328,-7.12665205355734e-005,0.481959730386734 ,-0.876193344593048,0.892129957675934,0.00357697787694633,-0.451764702796936,0.519467711448669,0.00208272109739482 ,-0.854487538337708,0.465988546609879,-0.185971200466156,-0.865025639533997,0.810467839241028,-0.323448747396469 ,-0.488387942314148,0.810467839241028,-0.323448747396469,-0.488387942314148,0.465988546609879,-0.185971200466156 ,-0.865025639533997,0.343204021453857,-0.33707195520401,-0.876694619655609,0.604493975639343,-0.595244467258453 ,-0.529406309127808,0.604493975639343,-0.595244467258453,-0.529406309127808,0.343204021453857,-0.33707195520401 ,-0.876694619655609,0.179372578859329,-0.472685307264328,-0.862782776355743,0.323608160018921,-0.778499960899353 ,-0.537787616252899,0.179372578859329,-0.472685307264328,-0.862782776355743,-4.42204545834102e-005,-0.402646452188492 ,-0.915355563163757,-0.000123229197924957,-0.83578085899353,-0.549063146114349,0.323608160018921,-0.778499960899353 ,-0.537787616252899,-0.000125430116895586,0.848767280578613,-0.528766572475433,-7.12665205355734e-005,0.481959730386734 ,-0.876193344593048,0.188191697001457,0.451240569353104,-0.872333526611328,0.329959392547607,0.791166961193085 ,-0.514957904815674,0.329959392547607,0.791166961193085,-0.514957904815674,0.188191697001457,0.451240569353104 ,-0.872333526611328,0.357724249362946,0.356190264225006,-0.863227546215057,0.620680093765259,0.618018448352814 ,-0.482503294944763,0.620680093765259,0.618018448352814,-0.482503294944763,0.357724249362946,0.356190264225006 ,-0.863227546215057,0.474322229623795,0.197919875383377,-0.857814729213715,0.817646563053131,0.341178327798843 ,-0.463736414909363,0.817646563053131,0.341178327798843,-0.463736414909363,0.474322229623795,0.197919875383377 ,-0.857814729213715,0.519467711448669,0.00208272109739482,-0.854487538337708,0.892129957675934,0.00357697787694633 ,-0.451764702796936,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.16665855050087,-0.398711144924164 ,-0.901806175708771,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,4.82885420538537e-009,-0.291559427976608 ,-0.956552743911743,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.539180338382721,-0.263834714889526 ,-0.799797356128693,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.193181023001671,-0.0350730493664742 ,-0.980536043643951,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.626655638217926,-0.314949661493301 ,-0.712817966938019,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.474208623170853,-0.238814353942871 ,-0.847404181957245,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.700383901596069,-0.324826598167419 ,-0.635570704936981,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.646563589572906,-0.121796235442162 ,-0.753074467182159,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.197930246591568,-0.385256856679916 ,-0.901332795619965,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.474208623170853,-0.238814353942871 ,-0.847404181957245,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.481388568878174,-0.302958816289902 ,-0.82248467206955,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.148570522665977,-0.138561144471169 ,-0.979146361351013,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.442375749349594,0.0474703647196293 ,-0.895572602748871,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.16665855050087,-0.398711144924164 ,-0.901806175708771,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.711151361465454,-0.0892844870686531 ,-0.697346448898315,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.19164302945137,-0.11858031898737 ,-0.974274933338165,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635 ,-0.647402346134186,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.19164302945137,-0.11858031898737 ,-0.974274933338165,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.322878926992416,0.229583457112312 ,-0.918172419071198,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.166320815682411,-0.355819970369339 ,-0.919635534286499,-0.442375749349594,0.0474703647196293,-0.895572602748871,-9.11212846403942e-005,-0.237379238009453 ,-0.97141706943512,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.131448835134506,0.348875522613525 ,-0.927904665470123,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.646563589572906,-0.121796235442162 ,-0.753074467182159,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.289463877677917,-0.0333973616361618 ,-0.956606149673462,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.166118785738945,-0.764228582382202 ,-0.623184740543365,-0.127862602472305,-0.339489370584488,-0.931878805160522,2.56711878421356e-008,-0.301535218954086 ,-0.953455030918121,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.357724249362946,0.356190264225006 ,-0.863227546215057,0.188191697001457,0.451240569353104,-0.872333526611328,-0.127862602472305,-0.339489370584488 ,-0.931878805160522,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.289463877677917,-0.0333973616361618 ,-0.956606149673462,0.519467711448669,0.00208272109739482,-0.854487538337708,0.474322229623795,0.197919875383377 ,-0.857814729213715,-0.19164302945137,-0.11858031898737,-0.974274933338165,4.82885420538537e-009,-0.291559427976608 ,-0.956552743911743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.148570522665977,-0.138561144471169 ,-0.979146361351013,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.000613691401667893,-0.000187244397238828 ,0.999999821186066,-0.0012283253017813,0.00826878752559423,0.999965071678162,-0.979976892471313,-0.169393971562386 ,-0.104646749794483,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.000613691401667893,-0.000187244397238828 ,0.999999821186066,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.720038771629334,-0.514539837837219 ,0.465610325336456,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.000991592183709145,-0.117668882012367 ,0.993052363395691,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.352033823728561,-0.930627882480621 ,-0.100019671022892,-0.00141415814869106,-0.878426611423492,0.477875143289566,0.166359573602676,-0.3556267619133 ,-0.919703304767609,0.166693791747093,-0.398688644170761,-0.901809573173523,-8.2697579273372e-006,-0.489702671766281 ,-0.871889472007751,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,0.623893320560455,-0.135710507631302 ,-0.769636154174805,0.472712248563766,-0.247125968337059,-0.845855712890625,0.441408336162567,-0.158523812890053 ,-0.883192420005798,0.581144511699677,0.173393562436104,-0.795113682746887,0.697533905506134,-0.312777817249298 ,-0.644683241844177,0.536963045597076,-0.257282644510269,-0.803415417671204,0.480526119470596,-0.309671342372894 ,-0.820486605167389,0.624607563018799,-0.328015089035034,-0.70871114730835,0.709162533283234,-0.0900625139474869 ,-0.69926905632019,0.642595112323761,-0.116949319839478,-0.757228076457977,0.980213820934296,-0.158584430813789 ,-0.118456050753593,0.893694162368774,-0.106106624007225,0.435949683189392,0.167570888996124,-0.767371296882629 ,-0.618919491767883,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.00141415814869106,-0.878426611423492 ,0.477875143289566,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.442176729440689,0.0476577542722225 ,-0.895660936832428,0.322174906730652,0.228472575545311,-0.918696701526642,0.282752156257629,0.52211320400238 ,-0.804642200469971,0.581144511699677,0.173393562436104,-0.795113682746887,-0.345937311649323,-0.339615941047668 ,-0.874636113643646,-0.180230349302292,-0.474406808614731,-0.8616583943367,0.14857217669487,-0.138560771942139 ,-0.979146182537079,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.470687717199326,-0.187841206789017 ,-0.86207240819931,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.289462924003601,-0.0333970598876476 ,-0.956606388092041,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.00083814247045666,0.651532232761383 ,-0.758620500564575,0.282752156257629,0.52211320400238,-0.804642200469971,0.130474492907524,0.346959501504898 ,-0.928760170936584,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.716144323348999,-0.513313174247742 ,0.472913175821304,0.61796361207962,-0.383677423000336,-0.686230778694153,0.709162533283234,-0.0900625139474869 ,-0.69926905632019,0.893694162368774,-0.106106624007225,0.435949683189392,0.351649820804596,-0.93211555480957 ,-0.08661999553442,0.399607270956039,-0.656506419181824,-0.639776051044464,0.61796361207962,-0.383677423000336 ,-0.686230778694153,0.716144323348999,-0.513313174247742,0.472913175821304,0.133698701858521,-0.117022633552551 ,-0.984088599681854,0.166359573602676,-0.3556267619133,-0.919703304767609,-4.25225262006279e-005,-0.53346848487854 ,-0.84581995010376,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.189093619585037,0.45308318734169 ,-0.87118262052536,0.12786553800106,-0.339494079351425,-0.931876718997955,2.56711878421356e-008,-0.301535218954086 ,-0.953455030918121,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.898149847984314,0.0036230287514627 ,-0.439674586057663,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.470687717199326,-0.187841206789017 ,-0.86207240819931,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.815859735012054,-0.325591415166855 ,-0.477873504161835,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.345937311649323,-0.339615941047668 ,-0.874636113643646,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.607874691486359,-0.598318219184875 ,-0.522018849849701,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.180230349302292,-0.474406808614731 ,-0.8616583943367,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.000123229197924957,-0.83578085899353 ,-0.549063146114349,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.180230349302292,-0.474406808614731 ,-0.8616583943367,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.000125430116895586,0.848767280578613 ,-0.528766572475433,-0.331108927726746,0.793362975120544,-0.510824918746948,-0.189093619585037,0.45308318734169 ,-0.87118262052536,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.331108927726746,0.793362975120544 ,-0.510824918746948,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.360539704561234,0.358874976634979 ,-0.860941290855408,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.623912632465363,0.621031820774078 ,-0.474396973848343,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.479103714227676,0.199860870838165 ,-0.854701817035675,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.822878837585449,0.343268781900406 ,-0.452810108661652,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.525108873844147,0.00211814977228642 ,-0.851032376289368,-0.479103714227676,0.199860870838165,-0.854701817035675,4.82885420538537e-009,-0.291559427976608 ,-0.956552743911743,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,0.166693791747093,-0.398688644170761 ,-0.901809573173523,0.197933539748192,-0.385259449481964,-0.901330947875977,0.0890793353319168,-0.28693476319313 ,-0.953799426555634,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.14857217669487,-0.138560771942139 ,-0.979146182537079,0.536963045597076,-0.257282644510269,-0.803415417671204,0.642595112323761,-0.116949319839478 ,-0.757228076457977,0.624607563018799,-0.328015089035034,-0.70871114730835,0.480526119470596,-0.309671342372894 ,-0.820486605167389,0.472712248563766,-0.247125968337059,-0.845855712890625,0.623893320560455,-0.135710507631302 ,-0.769636154174805,0.642595112323761,-0.116949319839478,-0.757228076457977,0.536963045597076,-0.257282644510269 ,-0.803415417671204,0.697533905506134,-0.312777817249298,-0.644683241844177,0.980213820934296,-0.158584430813789 ,-0.118456050753593,0.472712248563766,-0.247125968337059,-0.845855712890625,0.255537897348404,-0.293244242668152 ,-0.921253621578217,0.197933539748192,-0.385259449481964,-0.901330947875977,0.441408336162567,-0.158523812890053 ,-0.883192420005798,0.480526119470596,-0.309671342372894,-0.820486605167389,0.536963045597076,-0.257282644510269 ,-0.803415417671204,0.14857217669487,-0.138560771942139,-0.979146182537079,0.255537897348404,-0.293244242668152 ,-0.921253621578217,0.442176729440689,0.0476577542722225,-0.895660936832428,0.441408336162567,-0.158523812890053 ,-0.883192420005798,0.166693791747093,-0.398688644170761,-0.901809573173523,0.166359573602676,-0.3556267619133 ,-0.919703304767609,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.61796361207962,-0.383677423000336 ,-0.686230778694153,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476 ,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231,0.61796361207962,-0.383677423000336 ,-0.686230778694153,0.399607270956039,-0.656506419181824,-0.639776051044464,0.12786553800106,-0.339494079351425 ,-0.931876718997955,0.322174906730652,0.228472575545311,-0.918696701526642,0.442176729440689,0.0476577542722225 ,-0.895660936832428,0.166359573602676,-0.3556267619133,-0.919703304767609,0.133698701858521,-0.117022633552551 ,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.133698701858521,-0.117022633552551 ,-0.984088599681854,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.000496746390126646,0.380419790744781 ,-0.924813807010651,0.642595112323761,-0.116949319839478,-0.757228076457977,0.709162533283234,-0.0900625139474869 ,-0.69926905632019,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.193183556199074,-0.0350735858082771 ,-0.980535566806793,0.167570888996124,-0.767371296882629,-0.618919491767883,4.79029440612067e-005,-0.794294953346252 ,-0.607532322406769,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,0.12786553800106,-0.339494079351425 ,-0.931876718997955,0.12786553800106,-0.339494079351425,-0.931876718997955,-0.189093619585037,0.45308318734169 ,-0.87118262052536,-0.360539704561234,0.358874976634979,-0.860941290855408,0.191643193364143,-0.11858157813549 ,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549 ,-0.974274754524231,-0.479103714227676,0.199860870838165,-0.854701817035675,-0.525108873844147,0.00211814977228642 ,-0.851032376289368,0.14857217669487,-0.138560771942139,-0.979146182537079,-4.42204545834102e-005,-0.402646452188492 ,-0.915355563163757,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,0.0890793353319168,-0.28693476319313 ,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,0.893694162368774,-0.106106624007225 ,0.435949683189392,0.980213820934296,-0.158584430813789,-0.118456050753593,-0.0012283253017813,0.00826878752559423 ,0.999965071678162,0.716144323348999,-0.513313174247742,0.472913175821304,0.893694162368774,-0.106106624007225 ,0.435949683189392,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.000991592183709145,-0.117668882012367 ,0.993052363395691,0.351649820804596,-0.93211555480957,-0.08661999553442,0.716144323348999,-0.513313174247742 ,0.472913175821304,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.00141415814869106,-0.878426611423492 ,0.477875143289566,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.0890797153115273,-0.286934584379196 ,-0.953799426555634,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.442375749349594,0.0474703647196293 ,-0.895572602748871,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.583353996276855,0.174302786588669 ,-0.793294787406921,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.197930246591568,-0.385256856679916 ,-0.901332795619965,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.481388568878174,-0.302958816289902 ,-0.82248467206955,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.255537241697311,-0.293244957923889 ,-0.921253561973572,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.197930246591568,-0.385256856679916 ,-0.901332795619965,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.322878926992416,0.229583457112312 ,-0.918172419071198,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.134015202522278,-0.116930104792118 ,-0.984056532382965,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.166118785738945,-0.764228582382202 ,-0.623184740543365,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.283784359693527,0.524189174175262 ,-0.802927255630493,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.322878926992416,0.229583457112312 ,-0.918172419071198,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.397642314434052,-0.650192856788635 ,-0.647402346134186,-0.166118785738945,-0.764228582382202,-0.623184740543365,0.465988546609879,-0.185971200466156 ,-0.865025639533997,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.343204021453857,-0.33707195520401 ,-0.876694619655609,0.357724249362946,0.356190264225006,-0.863227546215057,-0.19164302945137,-0.11858031898737 ,-0.974274933338165,0.474322229623795,0.197919875383377,-0.857814729213715,0.179372578859329,-0.472685307264328 ,-0.862782776355743,-0.148570522665977,-0.138561144471169,-0.979146361351013,-4.42204545834102e-005,-0.402646452188492 ,-0.915355563163757,0.255537897348404,-0.293244242668152,-0.921253621578217,0.14857217669487,-0.138560771942139 ,-0.979146182537079,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.442176729440689,0.0476577542722225 ,-0.895660936832428,0.581144511699677,0.173393562436104,-0.795113682746887,0.441408336162567,-0.158523812890053 ,-0.883192420005798,0.255537897348404,-0.293244242668152,-0.921253621578217,0.0890793353319168,-0.28693476319313 ,-0.953799426555634,0.197933539748192,-0.385259449481964,-0.901330947875977,0.480526119470596,-0.309671342372894 ,-0.820486605167389,0.255537897348404,-0.293244242668152,-0.921253621578217,0.472712248563766,-0.247125968337059 ,-0.845855712890625,0.166693791747093,-0.398688644170761,-0.901809573173523,0.441408336162567,-0.158523812890053 ,-0.883192420005798,0.197933539748192,-0.385259449481964,-0.901330947875977,0.322174906730652,0.228472575545311 ,-0.918696701526642,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898 ,-0.928760170936584,0.12786553800106,-0.339494079351425,-0.931876718997955,0.399607270956039,-0.656506419181824 ,-0.639776051044464,0.167570888996124,-0.767371296882629,-0.618919491767883,0.282752156257629,0.52211320400238 ,-0.804642200469971,0.322174906730652,0.228472575545311,-0.918696701526642,0.130474492907524,0.346959501504898 ,-0.928760170936584,0.167570888996124,-0.767371296882629,-0.618919491767883,0.399607270956039,-0.656506419181824 ,-0.639776051044464,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.470687717199326,-0.187841206789017 ,-0.86207240819931,-0.345937311649323,-0.339615941047668,-0.874636113643646,0.193183556199074,-0.0350735858082771 ,-0.980535566806793,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.479103714227676,0.199860870838165 ,-0.854701817035675,0.191643193364143,-0.11858157813549,-0.974274754524231,-0.180230349302292,-0.474406808614731 ,-0.8616583943367,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.14857217669487,-0.138560771942139 ,-0.979146182537079,-0.646716237068176,0.744295537471771,0.166680246591568,-0.651998162269592,0.691909074783325 ,-0.31009703874588,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.391309916973114,0.896766066551209 ,0.206608697772026,-0.25070720911026,0.613901972770691,0.748512029647827,-0.556003272533417,0.628243684768677 ,0.544215261936188,-0.497222453355789,0.684417903423309,0.533237218856812,-0.142466872930527,0.844133794307709 ,0.516857206821442,-0.212957128882408,0.63821679353714,0.739816606044769,0.414917647838593,0.779010057449341 ,0.470092207193375,0.181902796030045,0.957158207893372,0.225298702716827,-0.301660984754562,0.907010614871979 ,0.293823689222336,0.414917647838593,0.779010057449341,0.470092207193375,-0.212957128882408,0.63821679353714 ,0.739816606044769,-0.18118342757225,0.484352648258209,0.855906009674072,0.203874498605728,0.632674932479858 ,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,-0.235205337405205,0.51457417011261 ,0.824555516242981,-0.263717442750931,0.775425553321838,0.573731958866119,0.199702888727188,0.793615162372589 ,0.574711859226227,0.0745275393128395,0.431530833244324,0.899014353752136,-0.421310722827911,0.492505818605423 ,0.761534810066223,-0.426660984754562,0.140150994062424,0.893486499786377,0.0708804950118065,0.122446231544018 ,0.989940881729126,-0.317988157272339,0.931548714637756,0.176353335380554,-0.391309916973114,0.896766066551209 ,0.206608697772026,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.337764918804169,0.929125368595123 ,-0.150468930602074,-0.29035672545433,0.911720991134644,0.290616303682327,-0.269276291131973,0.797245502471924 ,0.540268361568451,-0.218010768294334,0.827573180198669,0.517294824123383,-0.435499727725983,0.707530975341797 ,0.556542754173279,-0.261273354291916,0.592454433441162,0.762059092521667,-0.761694371700287,0.389483571052551 ,0.517807185649872,-0.435499727725983,0.707530975341797,0.556542754173279,-0.423358976840973,0.530543863773346 ,0.734363913536072,0.0901670306921005,0.507265865802765,0.8570596575737,-0.117755182087421,0.405977427959442 ,0.906264901161194,-0.235205337405205,0.51457417011261,0.824555516242981,0.251353085041046,0.650286138057709 ,0.716902732849121,0.0708804950118065,0.122446231544018,0.989940881729126,-0.426660984754562,0.140150994062424 ,0.893486499786377,-0.384194701910019,0.144494697451591,0.911874830722809,0.0692365244030952,0.127935454249382 ,0.989362835884094,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.427128940820694,0.891256213188171 ,-0.152391627430916,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.299128979444504,0.822018504142761 ,-0.484569281339645,-0.848471641540527,0.145880371332169,0.508738458156586,-0.868030965328217,0.305244266986847 ,0.391596972942352,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.786082983016968,-0.551289200782776 ,-0.279560059309006,0.0692365244030952,0.127935454249382,0.989362835884094,-0.384194701910019,0.144494697451591 ,0.911874830722809,-0.134134471416473,0.255289256572723,0.957515180110931,0.0673762187361717,0.208747074007988 ,0.975646018981934,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.874421000480652,0.028505390509963 ,-0.484329789876938,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.95565664768219,0.128923356533051 ,0.264762312173843,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.676061987876892,-0.682281494140625 ,0.278266310691834,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.659405767917633,-0.515389144420624 ,-0.547318935394287,-0.847110569477081,0.52096164226532,0.104893282055855,-0.322806298732758,0.932436168193817 ,-0.162354081869125,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.873165845870972,0.487039655447006 ,0.0193340703845024,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.786065578460693,0.0604399740695953 ,0.61518120765686,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.740768253803253,-0.0962792262434959 ,0.664825260639191,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585 ,-0.91673743724823,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.534500002861023,-0.166172981262207 ,-0.828671395778656,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.342734336853027,-0.423973858356476 ,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.639488339424133,-0.334312081336975 ,-0.692307770252228,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.936180412769318,-0.215160012245178 ,-0.277979135513306,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.943637073040009,-0.318791925907135 ,-0.0889983400702477,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.966241955757141,0.0842645391821861 ,0.243466570973396,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.909859955310822,-0.283149540424347 ,0.303284049034119,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.165860414505005,0.132470846176147 ,0.977211236953735,-0.183761566877365,0.212806239724159,0.959658861160278,0.0114754280075431,0.247809365391731 ,0.968740820884705,0.000295055127935484,0.143534883856773,0.98964524269104,0.0114754280075431,0.247809365391731 ,0.968740820884705,-0.183761566877365,0.212806239724159,0.959658861160278,-0.122193120419979,0.122121326625347 ,0.984964549541473,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566 ,-0.891022980213165,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.342734336853027,-0.423973858356476 ,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.342734336853027,-0.423973858356476 ,-0.838319361209869,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835 ,-0.656138777732849,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.838490962982178,-0.395441621541977 ,-0.37491175532341,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.922690570354462,-0.371692568063736 ,-0.102405093610287,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.952946603298187,-0.258524835109711 ,0.158296033740044,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.914080381393433,-0.244995877146721 ,0.323162585496902,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.911127626895905,-0.233605042099953 ,0.339521944522858,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.917683064937592,-0.215978980064392 ,0.333482950925827,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.909859955310822,-0.283149540424347 ,0.303284049034119,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.879765868186951,-0.241239860653877 ,0.409652799367905,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.229701682925224,-0.369639068841934 ,-0.900335550308228,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.281565397977829,-0.490265786647797 ,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.281565397977829,-0.490265786647797 ,-0.824839651584625,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.550454020500183,-0.472135245800018 ,-0.688540995121002,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.794973969459534,-0.455967396497726 ,-0.400137633085251,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.925502419471741,-0.354022324085236 ,-0.134586229920387,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.939242422580719,-0.304669201374054 ,0.158114925026894,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.952732801437378,-0.159682244062424 ,0.258460462093353,-0.264800101518631,0.156511932611465,0.951517164707184,-0.352729320526123,0.114327535033226 ,0.92871481180191,-0.184806242585182,0.04760567471385,0.981621265411377,-0.139697372913361,0.0780137032270432 ,0.987116277217865,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.268173515796661,-0.478363126516342 ,-0.836212694644928,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.678428113460541,-0.240620195865631 ,-0.69414496421814,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.797606468200684,-0.431223660707474 ,-0.421746492385864,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.962320387363434,-0.205677136778831 ,-0.177866160869598,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.993262529373169,-0.102700755000114 ,0.0536848418414593,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.952732801437378,-0.159682244062424 ,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.952732801437378,-0.159682244062424 ,0.258460462093353,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604 ,0.313814520835876,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.937714636325836,-0.0839959159493446 ,0.337099254131317,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.865155875682831,0.0832358598709106 ,0.49454739689827,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.911626994609833,-0.102696627378464 ,0.397981941699982,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.709277749061584,0.0713812634348869 ,0.701305747032166,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.888201236724854,-0.231391221284866 ,-0.396934121847153,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.939978837966919,-0.283475905656815 ,-0.189950495958328,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.977081477642059,-0.212798669934273 ,-0.00533603969961405,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.983753859996796,0.00252871820703149 ,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.983753859996796,0.00252871820703149 ,0.179504722356796,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.954774618148804,-0.0549839399755001 ,0.292202323675156,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.946208834648132,0.0787987634539604 ,0.313814520835876,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.833407461643219,-0.0707383528351784 ,0.548113167285919,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.865155875682831,0.0832358598709106 ,0.49454739689827,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.527523517608643,-0.0868940651416779 ,0.845084846019745,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.197025984525681,-0.816609442234039 ,-0.542521715164185,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.746677756309509,-0.64300948381424 ,-0.170326471328735,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.632238566875458,-0.767571091651917 ,-0.105399325489998,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.859505951404572,-0.505740880966187 ,0.0739976838231087,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.74617874622345,-0.66409957408905 ,0.046787291765213,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.835693418979645,-0.485578000545502 ,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.835693418979645,-0.485578000545502 ,0.256574630737305,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.550154626369476,-0.73190438747406 ,0.402052044868469,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.622000575065613,0.0438020005822182 ,0.781790673732758,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.726840019226074,-0.113997332751751 ,0.677280008792877,-0.381237626075745,0.038385421037674,0.923679828643799,-0.536454916000366,0.0231257192790508 ,0.84361207485199,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.609626770019531,-0.0633527785539627 ,0.790152907371521,-0.564329564571381,0.12249568849802,0.816411018371582,-0.706152856349945,0.175898715853691 ,0.685862839221954,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.622000575065613,0.0438020005822182 ,0.781790673732758,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.564329564571381,0.12249568849802 ,0.816411018371582,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.536454916000366,0.0231257192790508 ,0.84361207485199,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.406585454940796,0.0949709191918373 ,0.908663153648376,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.381237626075745,0.038385421037674 ,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.381237626075745,0.038385421037674 ,0.923679828643799,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.492890477180481,0.0867519974708557 ,0.865755796432495,-0.428126484155655,0.265849471092224,0.863731324672699,-0.600559055805206,0.384851962327957 ,0.70086932182312,-0.706152856349945,0.175898715853691,0.685862839221954,-0.564329564571381,0.12249568849802 ,0.816411018371582,-0.165860414505005,0.132470846176147,0.977211236953735,-0.28684601187706,0.185986965894699 ,0.939749002456665,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.249695494771004,0.0878867655992508 ,0.964327812194824,-0.564329564571381,0.12249568849802,0.816411018371582,-0.406585454940796,0.0949709191918373 ,0.908663153648376,-0.28684601187706,0.185986965894699,0.939749002456665,-0.428126484155655,0.265849471092224 ,0.863731324672699,-0.264800101518631,0.156511932611465,0.951517164707184,-0.249695494771004,0.0878867655992508 ,0.964327812194824,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226 ,0.92871481180191,-0.183761566877365,0.212806239724159,0.959658861160278,-0.165860414505005,0.132470846176147 ,0.977211236953735,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.264800101518631,0.156511932611465 ,0.951517164707184,-0.338261693716049,0.297003328800201,0.892954647541046,-0.28684601187706,0.185986965894699 ,0.939749002456665,-0.130102187395096,0.286587357521057,0.949179172515869,-0.153394818305969,0.361563980579376 ,0.91964203119278,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.130102187395096,0.286587357521057 ,0.949179172515869,-0.28684601187706,0.185986965894699,0.939749002456665,-0.165860414505005,0.132470846176147 ,0.977211236953735,-0.426482230424881,0.398722440004349,0.811870276927948,-0.52557498216629,0.553365111351013 ,0.646187245845795,-0.600559055805206,0.384851962327957,0.70086932182312,-0.428126484155655,0.265849471092224 ,0.863731324672699,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.337764918804169,0.929125368595123 ,-0.150468930602074,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.504832327365875,0.760625302791595 ,-0.40815868973732,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.374457865953445,-0.757000803947449 ,-0.535472750663757,-0.347785919904709,0.133236810564995,0.928058683872223,-0.747875332832336,-0.0330392643809319 ,0.663016498088837,0.169686332345009,0.978208720684052,-0.119642592966557,-0.0425885356962681,0.988019645214081 ,-0.148335143923759,-0.182774692773819,0.975853502750397,0.119596734642982,-0.332666903734207,0.942436695098877 ,0.0338508486747742,-0.421310722827911,0.492505818605423,0.761534810066223,-0.654110372066498,0.557340681552887 ,0.511381506919861,-0.627907395362854,0.28337550163269,0.724865913391113,-0.426660984754562,0.140150994062424 ,0.893486499786377,-0.426660984754562,0.140150994062424,0.893486499786377,-0.627907395362854,0.28337550163269 ,0.724865913391113,-0.509144961833954,0.274927198886871,0.815589666366577,-0.384194701910019,0.144494697451591 ,0.911874830722809,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.122193120419979,0.122121326625347 ,0.984964549541473,-0.183761566877365,0.212806239724159,0.959658861160278,-0.264800101518631,0.156511932611465 ,0.951517164707184,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.492890477180481,0.0867519974708557 ,0.865755796432495,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.527523517608643,-0.0868940651416779 ,0.845084846019745,0.218648448586464,0.688608109951019,-0.691383898258209,0.169686332345009,0.978208720684052 ,-0.119642592966557,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.190823212265968,0.973383665084839 ,0.126928135752678,0.0462776906788349,0.971960961818695,0.23054338991642,0.370400339365005,0.925967752933502 ,-0.0733987167477608,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0405596829950809,0.531582415103912 ,-0.846034944057465,0.254257917404175,-0.212425783276558,0.943519055843353,0.444850295782089,-0.346757113933563 ,0.825752794742584,0.271333545446396,-0.434894740581512,0.858629524707794,0.142127305269241,-0.253888607025146 ,0.956734240055084,0.228504449129105,-0.206080406904221,0.951481223106384,0.15039549767971,-0.209228366613388 ,0.966232180595398,0.3562351167202,-0.323089301586151,0.876761019229889,0.419803202152252,-0.320524513721466 ,0.84913444519043,0.15039549767971,-0.209228366613388,0.966232180595398,-0.0830294638872147,-0.341880321502686 ,0.93606835603714,0.10191734880209,-0.459647685289383,0.882234036922455,0.3562351167202,-0.323089301586151,0.876761019229889 ,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.582632660865784,0.528638899326324,-0.617316842079163 ,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.484570324420929,0.164985567331314,-0.85905259847641 ,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.792521595954895,-0.308754324913025,0.525909006595612 ,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.864151895046234,-0.414072304964066,-0.285981833934784 ,0.142127305269241,-0.253888607025146,0.956734240055084,0.271333545446396,-0.434894740581512,0.858629524707794 ,0.000465182994958013,-0.480507552623749,0.876990437507629,0.000238662076299079,-0.279259294271469,0.96021568775177 ,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.794973969459534,-0.455967396497726,-0.400137633085251 ,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.656892538070679,-0.430070400238037,-0.619299292564392 ,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.797606468200684,-0.431223660707474,-0.421746492385864 ,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.554800570011139,-0.511544942855835,-0.656138777732849 ,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.888201236724854,-0.231391221284866,-0.396934121847153 ,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.550454020500183,-0.472135245800018,-0.688540995121002 ,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.898073315620422,-0.295351594686508,-0.325932085514069 ,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.678428113460541,-0.240620195865631,-0.69414496421814 ,-0.490000605583191,0.777733385562897,0.393738687038422,-0.995725810527802,0.0919083878397942,-0.0091116763651371 ,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.415997177362442,0.908823668956757,0.0313992239534855 ,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.805140495300293,-0.58423912525177,-0.102046631276608 ,-0.868030965328217,0.305244266986847,0.391596972942352,-0.903881251811981,0.372275590896606,0.21073579788208 ,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.415997177362442,0.908823668956757,0.0313992239534855 ,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.873165845870972,0.487039655447006,0.0193340703845024 ,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.997107744216919,-0.0381367467343807,-0.065739631652832 ,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.952946603298187,-0.258524835109711,0.158296033740044 ,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.939242422580719,-0.304669201374054,0.158114925026894 ,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.943637073040009,-0.318791925907135,-0.0889983400702477 ,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.960346519947052,-0.250571459531784,0.12226414680481 ,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.922690570354462,-0.371692568063736,-0.102405093610287 ,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.993262529373169,-0.102700755000114,0.0536848418414593 ,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.925502419471741,-0.354022324085236,-0.134586229920387 ,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.977081477642059,-0.212798669934273,-0.00533603969961405 ,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.962320387363434,-0.205677136778831,-0.177866160869598 ,0.315422087907791,0.495868057012558,-0.809088230133057,0.218648448586464,0.688608109951019,-0.691383898258209 ,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.0405596829950809,0.531582415103912,-0.846034944057465 ,0.370400339365005,0.925967752933502,-0.0733987167477608,0.169686332345009,0.978208720684052,-0.119642592966557 ,0.218648448586464,0.688608109951019,-0.691383898258209,0.315422087907791,0.495868057012558,-0.809088230133057 ,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.140057414770126,-0.293910145759583,-0.945516109466553 ,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.00452618766576052,-0.317399501800537,-0.948281109333038 ,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.128380045294762,-0.384965181350708,-0.913958609104156 ,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.201079472899437,-0.101671770215034,-0.974284291267395 ,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.253343611955643,0.265877068042755,-0.930121719837189 ,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.233643680810928,0.587966680526733,-0.774406731128693 ,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.233643680810928,0.587966680526733,-0.774406731128693 ,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.350932270288467,0.749857068061829,-0.56085729598999 ,0.122461646795273,0.908201992511749,0.400215208530426,0.227538049221039,0.872712194919586,0.431971967220306 ,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.165674656629562,0.933009803295136,-0.319444298744202 ,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.294875234365463,0.607182502746582,-0.737819731235504 ,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.665653705596924,0.333070456981659,-0.667809247970581 ,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.793157696723938,-0.575152516365051,0.200250893831253 ,-0.946829199790955,0.314822763204575,0.066340483725071,-0.968474745750427,0.246992528438568,-0.0324244759976864 ,0.203874498605728,0.632674932479858,0.747099459171295,-0.18118342757225,0.484352648258209,0.855906009674072 ,-0.153394818305969,0.361563980579376,0.91964203119278,0.0901670306921005,0.507265865802765,0.8570596575737,0.0454900041222572 ,0.2624471783638,0.963873505592346,-0.134134471416473,0.255289256572723,0.957515180110931,-0.0718724653124809 ,0.221051037311554,0.972610294818878,0.0114754280075431,0.247809365391731,0.968740820884705,0.00928871519863606 ,-0.538456916809082,-0.842601835727692,0.120998434722424,-0.617575466632843,-0.777148604393005,0.0646116733551025 ,-0.592574059963226,-0.802920520305634,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0363553054630756 ,-0.593656182289124,-0.803897142410278,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00847726315259933 ,-0.531524419784546,-0.847000539302826,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.452270448207855 ,-0.555824816226959,-0.697502851486206,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.729460597038269 ,0.376104354858398,-0.571343004703522,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.559611320495605 ,0.189872339367867,-0.806711673736572,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.201079472899437 ,-0.101671770215034,-0.974284291267395,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167 ,-0.344970017671585,-0.91673743724823,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201079472899437 ,-0.101671770215034,-0.974284291267395,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.0942423716187477 ,-0.686610460281372,-0.72089147567749,0.120998434722424,-0.617575466632843,-0.777148604393005,0.00928871519863606 ,-0.538456916809082,-0.842601835727692,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.678428113460541 ,-0.240620195865631,-0.69414496421814,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.3323914706707 ,-0.288453340530396,-0.89794796705246,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.386307686567307 ,-0.301311910152435,-0.871766865253448,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.217214897274971 ,-0.348953694105148,-0.911618888378143,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971 ,-0.348953694105148,-0.911618888378143,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.140057414770126 ,-0.293910145759583,-0.945516109466553,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.439678937196732 ,-0.382927387952805,-0.812434017658234,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.201465025544167 ,-0.344970017671585,-0.91673743724823,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.128380045294762 ,-0.384965181350708,-0.913958609104156,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.120519727468491 ,-0.475927352905273,-0.871187806129456,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.490650862455368 ,0.719568371772766,0.49140927195549,0.51012510061264,0.705090045928955,0.492565125226974,-0.436571836471558,0.668562531471252 ,0.602020919322968,-0.528217673301697,0.774278223514557,0.348538845777512,0.51012510061264,0.705090045928955 ,0.492565125226974,0.576555967330933,0.629547953605652,0.520819187164307,-0.206960439682007,0.579236388206482 ,0.78844952583313,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482 ,0.78844952583313,0.576555967330933,0.629547953605652,0.520819187164307,0.665259420871735,0.743798911571503,-0.0647542923688889 ,-0.210487872362137,0.845762014389038,0.490287095308304,-0.877903461456299,0.125808238983154,0.462014973163605 ,-0.553295969963074,0.315833359956741,0.770787119865417,-0.18118342757225,0.484352648258209,0.855906009674072 ,-0.212957128882408,0.63821679353714,0.739816606044769,-0.301660984754562,0.907010614871979,0.293823689222336 ,-0.720441699028015,0.626922428607941,0.296533405780792,-0.877903461456299,0.125808238983154,0.462014973163605 ,-0.212957128882408,0.63821679353714,0.739816606044769,-0.25070720911026,0.613901972770691,0.748512029647827 ,-0.142466872930527,0.844133794307709,0.516857206821442,0.421662032604218,0.906709790229797,0.00885869562625885 ,-0.112783953547478,0.903910756111145,0.412583559751511,-0.491390645503998,0.848508954048157,0.196386933326721 ,-0.317988157272339,0.931548714637756,0.176353335380554,-0.337764918804169,0.929125368595123,-0.150468930602074 ,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.423358976840973,0.530543863773346,0.734363913536072 ,-0.435499727725983,0.707530975341797,0.556542754173279,-0.218010768294334,0.827573180198669,0.517294824123383 ,-0.44881072640419,0.73288232088089,0.511324167251587,-0.134134471416473,0.255289256572723,0.957515180110931 ,-0.117755182087421,0.405977427959442,0.906264901161194,-0.130102187395096,0.286587357521057,0.949179172515869 ,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.153394818305969,0.361563980579376,0.91964203119278 ,-0.18118342757225,0.484352648258209,0.855906009674072,-0.553295969963074,0.315833359956741,0.770787119865417 ,-0.338261693716049,0.297003328800201,0.892954647541046,-0.130102187395096,0.286587357521057,0.949179172515869 ,-0.117755182087421,0.405977427959442,0.906264901161194,0.0901670306921005,0.507265865802765,0.8570596575737 ,-0.153394818305969,0.361563980579376,0.91964203119278,-0.553295969963074,0.315833359956741,0.770787119865417 ,-0.887027978897095,0.338621288537979,0.313874155282974,-0.554342925548553,0.567035973072052,0.609240651130676 ,-0.426482230424881,0.398722440004349,0.811870276927948,0.502047836780548,0.814261257648468,0.291421681642532 ,0.251353085041046,0.650286138057709,0.716902732849121,0.199702888727188,0.793615162372589,0.574711859226227 ,0.325284242630005,0.933813154697418,0.148940086364746,-0.235205337405205,0.51457417011261,0.824555516242981 ,-0.627907395362854,0.28337550163269,0.724865913391113,-0.654110372066498,0.557340681552887,0.511381506919861 ,-0.263717442750931,0.775425553321838,0.573731958866119,-0.509144961833954,0.274927198886871,0.815589666366577 ,-0.627907395362854,0.28337550163269,0.724865913391113,-0.235205337405205,0.51457417011261,0.824555516242981 ,-0.117755182087421,0.405977427959442,0.906264901161194,-0.355782032012939,0.924564778804779,-0.136378616094589 ,0.227538049221039,0.872712194919586,0.431971967220306,0.37678524851799,0.791645467281342,0.480968058109283,-0.468000799417496 ,0.87750107049942,0.10472384095192,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.559611320495605 ,0.189872339367867,-0.806711673736572,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.534500002861023 ,-0.166172981262207,-0.828671395778656,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.652629017829895 ,0.286883503198624,-0.701265454292297,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.623457789421082 ,-0.205396309494972,-0.754395663738251,-0.598303258419037,0.575496375560761,0.557527720928192,-0.708229780197144 ,0.558061540126801,-0.432409435510635,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.734153270721436 ,0.469748914241791,0.490260034799576,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.559611320495605 ,0.189872339367867,-0.806711673736572,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.253343611955643 ,0.265877068042755,-0.930121719837189,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.484570324420929 ,0.164985567331314,-0.85905259847641,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.729460597038269 ,0.376104354858398,-0.571343004703522,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.559611320495605 ,0.189872339367867,-0.806711673736572,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.642698705196381 ,0.173675417900085,-0.746173679828644,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.452270448207855 ,-0.555824816226959,-0.697502851486206,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.484570324420929 ,0.164985567331314,-0.85905259847641,-0.646716237068176,0.744295537471771,0.166680246591568,-0.497222453355789 ,0.684417903423309,0.533237218856812,-0.556003272533417,0.628243684768677,0.544215261936188,-0.717432975769043 ,0.661532044410706,0.218323826789856,-0.142466872930527,0.844133794307709,0.516857206821442,-0.497222453355789 ,0.684417903423309,0.533237218856812,-0.269276291131973,0.797245502471924,0.540268361568451,-0.29035672545433 ,0.911720991134644,0.290616303682327,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.651998162269592 ,0.691909074783325,-0.31009703874588,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.585451006889343 ,0.667790055274963,-0.459677666425705,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.474711626768112 ,0.621306002140045,-0.623400151729584,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.331786870956421 ,0.242688208818436,-0.911602914333344,0.0537682510912418,-0.324202865362167,0.944458305835724,0.0744736939668655 ,0.385000914335251,0.919906497001648,0.320094555616379,0.36778724193573,0.873081922531128,0.349699586629868,-0.343658298254013 ,0.871555626392365,0.349699586629868,-0.343658298254013,0.871555626392365,0.320094555616379,0.36778724193573 ,0.873081922531128,0.600283682346344,0.352708756923676,0.717813372612,0.696352481842041,-0.374734103679657,0.612100958824158 ,0.799351274967194,0.345198392868042,0.491808533668518,0.900613248348236,-0.362417966127396,0.239893689751625 ,0.696352481842041,-0.374734103679657,0.612100958824158,0.600283682346344,0.352708756923676,0.717813372612,-0.334018349647522 ,0.527555286884308,-0.7810999751091,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.21808297932148 ,0.578010439872742,-0.786348342895508,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.365642845630646 ,0.319204062223434,-0.874307751655579,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.240498825907707 ,0.538952767848969,-0.807273328304291,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.182968229055405 ,-0.224779292941093,-0.957077264785767,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.363190740346909 ,0.022262267768383,-0.931448817253113,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.128380045294762 ,-0.384965181350708,-0.913958609104156,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.182968229055405 ,-0.224779292941093,-0.957077264785767,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.140057414770126 ,-0.293910145759583,-0.945516109466553,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.0463922955095768 ,-0.412300795316696,-0.909865856170654,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.253343611955643 ,0.265877068042755,-0.930121719837189,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.334018349647522 ,0.527555286884308,-0.7810999751091,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.363190740346909 ,0.022262267768383,-0.931448817253113,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.253343611955643 ,0.265877068042755,-0.930121719837189,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.251340746879578 ,-0.154538676142693,-0.955481886863709,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.256396502256393 ,-0.00964211951941252,-0.966523587703705,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.0387927554547787 ,0.555053651332855,-0.830909490585327,-0.294875234365463,0.607182502746582,-0.737819731235504,0.0643617510795593 ,0.973314523696899,0.220264464616776,0.0419506318867207,0.986220836639404,0.160026773810387,0.10627294331789 ,0.940789699554443,0.321901887655258,0.0643617510795593,0.973314523696899,0.220264464616776,-0.294875234365463 ,0.607182502746582,-0.737819731235504,-0.585451006889343,0.667790055274963,-0.459677666425705,0.190607443451881 ,0.891252994537354,0.41150563955307,0.10627294331789,0.940789699554443,0.321901887655258,-0.585451006889343,0.667790055274963 ,-0.459677666425705,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706 ,0.218323826789856,-0.556003272533417,0.628243684768677,0.544215261936188,0.352456122636795,0.760582089424133 ,0.545242667198181,0.287199288606644,0.822433173656464,0.491039961576462,-0.556003272533417,0.628243684768677 ,0.544215261936188,-0.25070720911026,0.613901972770691,0.748512029647827,0.540614545345306,0.654488027095795 ,0.528565406799316,0.352456122636795,0.760582089424133,0.545242667198181,-0.25070720911026,0.613901972770691 ,0.748512029647827,-0.112783953547478,0.903910756111145,0.412583559751511,0.255933493375778,0.96283483505249 ,-0.0862965509295464,0.540614545345306,0.654488027095795,0.528565406799316,-0.353226035833359,0.839446485042572 ,0.412990301847458,0.875235259532928,0.374192535877228,0.306501507759094,0.799351274967194,0.345198392868042 ,0.491808533668518,-0.289120554924011,0.931183099746704,0.222052708268166,-0.293016821146011,0.709561467170715 ,0.640830397605896,-0.0522832758724689,0.619819462299347,0.783000826835632,0.916130423545837,0.393186241388321 ,0.0781642198562622,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321 ,0.0781642198562622,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.00815227441489697,0.997119009494781 ,0.075413390994072,0.941828966140747,0.33263236284256,0.0481028594076633,0.0218184478580952,0.990070343017578 ,-0.13886933028698,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.320094555616379,0.36778724193573 ,0.873081922531128,0.0744736939668655,0.385000914335251,0.919906497001648,-0.0716726332902908,0.99415910243988 ,-0.0806891024112701,-0.193970412015915,0.978859066963196,0.0648878961801529,0.600283682346344,0.352708756923676 ,0.717813372612,0.320094555616379,0.36778724193573,0.873081922531128,-0.193970412015915,0.978859066963196,0.0648878961801529 ,-0.289120554924011,0.931183099746704,0.222052708268166,0.799351274967194,0.345198392868042,0.491808533668518 ,0.600283682346344,0.352708756923676,0.717813372612,-0.528217673301697,0.774278223514557,0.348538845777512,-0.436571836471558 ,0.668562531471252,0.602020919322968,-0.293016821146011,0.709561467170715,0.640830397605896,-0.353226035833359 ,0.839446485042572,0.412990301847458,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.468000799417496 ,0.87750107049942,0.10472384095192,-0.289120554924011,0.931183099746704,0.222052708268166,-0.193970412015915 ,0.978859066963196,0.0648878961801529,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.355782032012939 ,0.924564778804779,-0.136378616094589,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.0716726332902908 ,0.99415910243988,-0.0806891024112701,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.165674656629562 ,0.933009803295136,-0.319444298744202,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.0218184478580952 ,0.990070343017578,-0.13886933028698,0.122461646795273,0.908201992511749,0.400215208530426,0.0643617510795593 ,0.973314523696899,0.220264464616776,0.10627294331789,0.940789699554443,0.321901887655258,0.227538049221039,0.872712194919586 ,0.431971967220306,0.227538049221039,0.872712194919586,0.431971967220306,0.10627294331789,0.940789699554443,0.321901887655258 ,0.190607443451881,0.891252994537354,0.41150563955307,0.37678524851799,0.791645467281342,0.480968058109283,0.51012510061264 ,0.705090045928955,0.492565125226974,0.490650862455368,0.719568371772766,0.49140927195549,0.287199288606644,0.822433173656464 ,0.491039961576462,0.352456122636795,0.760582089424133,0.545242667198181,0.490650862455368,0.719568371772766 ,0.49140927195549,0.37678524851799,0.791645467281342,0.480968058109283,0.190607443451881,0.891252994537354,0.41150563955307 ,0.287199288606644,0.822433173656464,0.491039961576462,0.51012510061264,0.705090045928955,0.492565125226974,0.352456122636795 ,0.760582089424133,0.545242667198181,0.540614545345306,0.654488027095795,0.528565406799316,0.576555967330933 ,0.629547953605652,0.520819187164307,0.576555967330933,0.629547953605652,0.520819187164307,0.540614545345306 ,0.654488027095795,0.528565406799316,0.255933493375778,0.96283483505249,-0.0862965509295464,0.665259420871735 ,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,0.665259420871735 ,0.743798911571503,-0.0647542923688889,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.00815227441489697 ,0.997119009494781,0.075413390994072,-0.206960439682007,0.579236388206482,0.78844952583313,-0.210487872362137 ,0.845762014389038,0.490287095308304,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.0522832758724689 ,0.619819462299347,0.783000826835632,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007 ,0.579236388206482,0.78844952583313,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.293016821146011 ,0.709561467170715,0.640830397605896,0.875235259532928,0.374192535877228,0.306501507759094,0.953684031963348 ,-0.290462404489517,-0.0782197788357735,0.900613248348236,-0.362417966127396,0.239893689751625,0.799351274967194 ,0.345198392868042,0.491808533668518,0.908462584018707,-0.179232552647591,-0.377586334943771,0.886379599571228 ,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,0.835292756557465 ,-0.124363616108894,-0.53555554151535,0.835292756557465,-0.124363616108894,-0.53555554151535,0.916130423545837 ,0.393186241388321,0.0781642198562622,0.941828966140747,0.33263236284256,0.0481028594076633,0.822044253349304 ,-0.128348395228386,-0.554770171642303,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225 ,0.658302128314972,0.572181582450867,0.443346619606018,0.824227571487427,0.352267920970917,-0.312749028205872 ,0.791433751583099,0.525186359882355,0.417629092931747,0.907208979129791,0.0505746938288212,-0.39387321472168 ,0.899492859840393,0.18914669752121,-0.312749028205872,0.791433751583099,0.525186359882355,0.443346619606018 ,0.824227571487427,0.352267920970917,0.333067029714584,0.789500892162323,-0.515514075756073,0.287465304136276 ,0.55735319852829,-0.778923034667969,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.535731971263886 ,0.751305878162384,-0.385396867990494,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389 ,-0.263566613197327,-0.79201877117157,-0.556003570556641,0.531874418258667,-0.638724982738495,0.287465304136276 ,0.55735319852829,-0.778923034667969,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.225950360298157 ,-0.351854801177979,-0.908374726772308,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.708229780197144 ,0.558061540126801,-0.432409435510635,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.529653549194336 ,0.324454098939896,-0.783707022666931,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.23223540186882 ,0.292309641838074,-0.927697062492371,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.249898374080658 ,-0.566836893558502,-0.785013854503632,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.831379592418671 ,-0.460717499256134,-0.310720801353455,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.432406663894653 ,-0.769645929336548,-0.469754874706268,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.900380790233612 ,-0.432869046926498,-0.0440317057073116,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.523446321487427 ,-0.84945410490036,-0.0665707886219025,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.919401347637177 ,-0.339992344379425,0.197753340005875,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.704255282878876 ,-0.136106103658676,0.696778059005737,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.646371781826019 ,-0.668279051780701,0.368248045444489,-0.21317532658577,0.371294349431992,0.903712749481201,0.203655928373337 ,0.636657357215881,0.743768572807312,0.489128321409225,0.658302128314972,0.572181582450867,-0.29514667391777 ,0.569713115692139,0.767017185688019,-0.848471641540527,0.145880371332169,0.508738458156586,-0.29514667391777 ,0.569713115692139,0.767017185688019,-0.312749028205872,0.791433751583099,0.525186359882355,-0.868030965328217 ,0.305244266986847,0.391596972942352,-0.868030965328217,0.305244266986847,0.391596972942352,-0.312749028205872 ,0.791433751583099,0.525186359882355,-0.39387321472168,0.899492859840393,0.18914669752121,-0.903881251811981 ,0.372275590896606,0.21073579788208,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.946829199790955 ,0.314822763204575,0.066340483725071,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.535731971263886 ,0.751305878162384,-0.385396867990494,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.974632024765015 ,0.185502991080284,-0.125223994255066,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.550671279430389 ,-0.263566613197327,-0.79201877117157,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.990060329437256 ,-0.0573833771049976,-0.128404289484024,-0.720985412597656,0.250006407499313,0.646279215812683,-0.734153270721436 ,0.469748914241791,0.490260034799576,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.831379592418671 ,-0.460717499256134,-0.310720801353455,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.952506065368652 ,0.304441630840302,-0.00689529813826084,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.900380790233612 ,-0.432869046926498,-0.0440317057073116,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.873165845870972 ,0.487039655447006,0.0193340703845024,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.919401347637177 ,-0.339992344379425,0.197753340005875,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.847110569477081 ,0.52096164226532,0.104893282055855,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.0522458925843239 ,-0.587620496749878,0.807448148727417,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.795908987522125 ,-0.482192486524582,0.366086363792419,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.793157696723938 ,-0.575152516365051,0.200250893831253,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.154009714722633 ,-0.985912680625916,-0.0652465522289276,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.805140495300293 ,-0.58423912525177,-0.102046631276608,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.196655720472336 ,-0.712397694587708,-0.673658668994904,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.786082983016968 ,-0.551289200782776,-0.279560059309006,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.18527527153492 ,-0.667633235454559,-0.721067905426025,-0.33330100774765,0.819487571716309,0.466208755970001,-0.0801405981183052 ,0.901194870471954,0.425940543413162,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.322806298732758 ,0.932436168193817,-0.162354081869125,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.355633050203323 ,0.924526989459991,-0.137021988630295,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0175000000745058 ,0.99979567527771,0.010117226280272,-0.490000605583191,0.777733385562897,0.393738687038422,-0.415997177362442 ,0.908823668956757,0.0313992239534855,-0.0175000000745058,0.99979567527771,0.010117226280272,0.130717054009438 ,0.879965662956238,0.456698477268219,-0.568449974060059,0.526249170303345,0.632397353649139,-0.490000605583191 ,0.777733385562897,0.393738687038422,0.130717054009438,0.879965662956238,0.456698477268219,0.133888319134712 ,0.6242516040802,0.769664764404297,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.141512751579285 ,-0.835205972194672,0.531418025493622,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.792521595954895 ,-0.308754324913025,0.525909006595612,0.021379429847002,0.751378178596497,0.659525394439697,-0.261273354291916 ,0.592454433441162,0.762059092521667,-0.423358976840973,0.530543863773346,0.734363913536072,0.107353128492832 ,0.690562188625336,0.715261578559875,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.997107744216919 ,-0.0381367467343807,-0.065739631652832,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.740590155124664 ,-0.532754123210907,-0.409510970115662,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0371135324239731 ,0.851556301116943,-0.52294784784317,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.582632660865784 ,0.528638899326324,-0.617316842079163,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.936180412769318 ,-0.215160012245178,-0.277979135513306,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.542133092880249 ,-0.457725584506989,-0.704683601856232,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.988731265068054 ,0.125658646225929,0.0813654363155365,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.874497592449188 ,-0.478756755590439,-0.0777553021907806,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.938912212848663 ,-0.107537157833576,0.326924532651901,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.905584931373596 ,-0.288571357727051,0.310873836278915,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.631440281867981 ,-0.43637079000473,-0.640986502170563,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,0.00376493413932621 ,0.588400185108185,-0.808561086654663,0.0140912849456072,0.990858137607574,0.134169965982437,-0.491390645503998 ,0.848508954048157,0.196386933326721,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.024807246401906 ,0.980889618396759,-0.192977145314217,0.107353128492832,0.690562188625336,0.715261578559875,-0.423358976840973 ,0.530543863773346,0.734363913536072,-0.44881072640419,0.73288232088089,0.511324167251587,0.0436014086008072 ,0.880429863929749,0.472167462110519,0.0436014086008072,0.880429863929749,0.472167462110519,0.443346619606018 ,0.824227571487427,0.352267920970917,0.489128321409225,0.658302128314972,0.572181582450867,0.107353128492832 ,0.690562188625336,0.715261578559875,0.0140912849456072,0.990858137607574,0.134169965982437,0.417629092931747 ,0.907208979129791,0.0505746938288212,0.443346619606018,0.824227571487427,0.352267920970917,0.0436014086008072 ,0.880429863929749,0.472167462110519,-0.0371135324239731,0.851556301116943,-0.52294784784317,0.333067029714584 ,0.789500892162323,-0.515514075756073,0.373418390750885,0.898855626583099,-0.229384630918503,-0.024807246401906 ,0.980889618396759,-0.192977145314217,0.128099784255028,-0.105493560433388,-0.986134648323059,0.287465304136276 ,0.55735319852829,-0.778923034667969,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0306792501360178 ,-0.0856858864426613,-0.995849788188934,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.23223540186882 ,0.292309641838074,-0.927697062492371,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713 ,-0.351018995046616,-0.853744387626648,-0.249898374080658,-0.566836893558502,-0.785013854503632,0.022180886939168 ,-0.312959760427475,-0.949507355690002,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.542133092880249 ,-0.457725584506989,-0.704683601856232,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.432406663894653 ,-0.769645929336548,-0.469754874706268,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.874497592449188 ,-0.478756755590439,-0.0777553021907806,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.55406641960144 ,-0.797906458377838,0.237393528223038,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.874497592449188 ,-0.478756755590439,-0.0777553021907806,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.55406641960144 ,-0.797906458377838,0.237393528223038,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.905584931373596 ,-0.288571357727051,0.310873836278915,0.203655928373337,0.636657357215881,0.743768572807312,-0.0869597047567368 ,0.548145830631256,0.831849813461304,-0.261273354291916,0.592454433441162,0.762059092521667,0.021379429847002 ,0.751378178596497,0.659525394439697,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.550671279430389 ,-0.263566613197327,-0.79201877117157,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.225950360298157 ,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.225950360298157 ,-0.351854801177979,-0.908374726772308,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.631440281867981 ,-0.43637079000473,-0.640986502170563,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.642698705196381 ,0.173675417900085,-0.746173679828644,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.661458969116211 ,-0.196823701262474,-0.723693668842316,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.210184469819069 ,0.149185121059418,-0.966212332248688,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.661458969116211 ,-0.196823701262474,-0.723693668842316,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.210184469819069 ,0.149185121059418,-0.966212332248688,-0.321419239044189,-0.278268992900848,-0.905127644538879,0.022180886939168 ,-0.312959760427475,-0.949507355690002,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.529653549194336 ,0.324454098939896,-0.783707022666931,0.0630237460136414,0.258316248655319,-0.964002430438995,0.022180886939168 ,-0.312959760427475,-0.949507355690002,-0.362813800573349,0.452378064393997,0.814690291881561,-0.734153270721436 ,0.469748914241791,0.490260034799576,-0.720985412597656,0.250006407499313,0.646279215812683,-0.0333014093339443 ,0.336885303258896,0.940956592559814,0.0345219671726227,0.469873160123825,0.882058680057526,0.0388557612895966 ,0.393748223781586,0.918396770954132,-0.598303258419037,0.575496375560761,0.557527720928192,-0.362813800573349 ,0.452378064393997,0.814690291881561,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.659405767917633 ,-0.515389144420624,-0.547318935394287,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.598303258419037 ,0.575496375560761,0.557527720928192,0.0388557612895966,0.393748223781586,0.918396770954132,-0.0402880981564522 ,-0.602410852909088,0.797168791294098,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.598303258419037 ,0.575496375560761,0.557527720928192,-0.497222453355789,0.684417903423309,0.533237218856812,-0.646716237068176 ,0.744295537471771,0.166680246591568,-0.391309916973114,0.896766066551209,0.206608697772026,-0.269276291131973 ,0.797245502471924,0.540268361568451,-0.269276291131973,0.797245502471924,0.540268361568451,-0.391309916973114 ,0.896766066551209,0.206608697772026,-0.317988157272339,0.931548714637756,0.176353335380554,-0.218010768294334 ,0.827573180198669,0.517294824123383,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.805685818195343 ,-0.585970938205719,0.0866512581706047,-0.903881251811981,0.372275590896606,0.21073579788208,-0.946829199790955 ,0.314822763204575,0.066340483725071,0.37678524851799,0.791645467281342,0.480968058109283,0.490650862455368,0.719568371772766 ,0.49140927195549,-0.528217673301697,0.774278223514557,0.348538845777512,-0.468000799417496,0.87750107049942 ,0.10472384095192,-0.317988157272339,0.931548714637756,0.176353335380554,-0.491390645503998,0.848508954048157 ,0.196386933326721,-0.44881072640419,0.73288232088089,0.511324167251587,-0.218010768294334,0.827573180198669 ,0.517294824123383,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.646716237068176,0.744295537471771 ,0.166680246591568,-0.717432975769043,0.661532044410706,0.218323826789856,-0.72230190038681,0.680600225925446 ,-0.122732326388359,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706 ,0.218323826789856,0.287199288606644,0.822433173656464,0.491039961576462,0.190607443451881,0.891252994537354 ,0.41150563955307,-0.468000799417496,0.87750107049942,0.10472384095192,-0.528217673301697,0.774278223514557,0.348538845777512 ,-0.353226035833359,0.839446485042572,0.412990301847458,-0.289120554924011,0.931183099746704,0.222052708268166 ,-0.903881251811981,0.372275590896606,0.21073579788208,-0.39387321472168,0.899492859840393,0.18914669752121,-0.482304006814957 ,0.870065748691559,-0.101825155317783,-0.946829199790955,0.314822763204575,0.066340483725071,-0.805140495300293 ,-0.58423912525177,-0.102046631276608,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.154009714722633 ,-0.985912680625916,-0.0652465522289276,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.491390645503998 ,0.848508954048157,0.196386933326721,0.0140912849456072,0.990858137607574,0.134169965982437,0.0436014086008072 ,0.880429863929749,0.472167462110519,-0.44881072640419,0.73288232088089,0.511324167251587,-0.299128979444504 ,0.822018504142761,-0.484569281339645,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.233643680810928 ,0.587966680526733,-0.774406731128693,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.322806298732758 ,0.932436168193817,-0.162354081869125,-0.847110569477081,0.52096164226532,0.104893282055855,-0.656458854675293 ,0.394298911094666,0.643109738826752,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652 ,0.028505390509963,-0.484329789876938,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.93118155002594 ,-0.18550032377243,0.31383204460144,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594 ,-0.18550032377243,0.31383204460144,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.909859955310822 ,-0.283149540424347,0.303284049034119,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951 ,-0.241239860653877,0.409652799367905,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.911626994609833 ,-0.102696627378464,0.397981941699982,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.504832327365875 ,0.760625302791595,-0.40815868973732,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.197057366371155 ,0.623411595821381,-0.756654739379883,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.550154626369476 ,-0.73190438747406,0.402052044868469,-0.307830482721329,-0.686485290527344,0.658770322799683,-0.430081337690353 ,-0.536487519741058,0.726093113422394,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.350932270288467 ,0.749857068061829,-0.56085729598999,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.427128940820694 ,0.891256213188171,-0.152391627430916,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.792521595954895 ,-0.308754324913025,0.525909006595612,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.968474745750427 ,0.246992528438568,-0.0324244759976864,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.326218724250793 ,0.625610828399658,-0.70865535736084,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.269162774085999 ,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.271266043186188 ,0.549705266952515,-0.790087878704071,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.326218724250793 ,0.625610828399658,-0.70865535736084,-0.334018349647522,0.527555286884308,-0.7810999751091,0.333067029714584 ,0.789500892162323,-0.515514075756073,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.482304006814957 ,0.870065748691559,-0.101825155317783,0.373418390750885,0.898855626583099,-0.229384630918503,-0.646371781826019 ,-0.668279051780701,0.368248045444489,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.919401347637177 ,-0.339992344379425,0.197753340005875,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.974632024765015 ,0.185502991080284,-0.125223994255066,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.535731971263886 ,0.751305878162384,-0.385396867990494,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.847110569477081 ,0.52096164226532,0.104893282055855,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.704255282878876 ,-0.136106103658676,0.696778059005737,-0.656458854675293,0.394298911094666,0.643109738826752,-0.793157696723938 ,-0.575152516365051,0.200250893831253,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.0983656272292137 ,-0.854222357273102,0.510517776012421,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.322806298732758 ,0.932436168193817,-0.162354081869125,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.141158223152161 ,0.972466349601746,-0.185427963733673,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.504972338676453 ,0.857627868652344,-0.0973518118262291,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.0371135324239731 ,0.851556301116943,-0.52294784784317,-0.024807246401906,0.980889618396759,-0.192977145314217,-0.966241955757141 ,0.0842645391821861,0.243466570973396,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.922896504402161 ,-0.346186280250549,0.168573826551437,-0.988731265068054,0.125658646225929,0.0813654363155365,0.287465304136276 ,0.55735319852829,-0.778923034667969,0.333067029714584,0.789500892162323,-0.515514075756073,-0.0371135324239731 ,0.851556301116943,-0.52294784784317,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.687154352664948 ,-0.340534240007401,0.6417595744133,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.905584931373596 ,-0.288571357727051,0.310873836278915,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.911127626895905 ,-0.233605042099953,0.339521944522858,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.988731265068054 ,0.125658646225929,0.0813654363155365,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.623457789421082 ,-0.205396309494972,-0.754395663738251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.639488339424133 ,-0.334312081336975,-0.692307770252228,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.936180412769318 ,-0.215160012245178,-0.277979135513306,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.656892538070679 ,-0.430070400238037,-0.619299292564392,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.568449974060059 ,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.995725810527802 ,0.0919083878397942,-0.0091116763651371,-0.490000605583191,0.777733385562897,0.393738687038422,-0.40227422118187 ,-0.350243538618088,-0.845875263214111,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.623457789421082 ,-0.205396309494972,-0.754395663738251,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.144822835922241 ,-0.365306288003922,-0.919552981853485,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.192518308758736 ,-0.454994261264801,-0.869434833526611,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.107891380786896 ,-0.441889137029648,-0.890557944774628,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.0780564248561859 ,-0.38590082526207,-0.919232130050659,-0.0463922955095768,-0.412300795316696,-0.909865856170654,0.022180886939168 ,-0.312959760427475,-0.949507355690002,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.730888843536377 ,-0.408141672611237,-0.547011733055115,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.99845689535141 ,-0.0306249987334013,-0.0463239327073097,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.831379592418671 ,-0.460717499256134,-0.310720801353455,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.568449974060059 ,0.526249170303345,0.632397353649139,0.133888319134712,0.6242516040802,0.769664764404297,-0.0333014093339443 ,0.336885303258896,0.940956592559814,-0.720985412597656,0.250006407499313,0.646279215812683,-0.661458969116211 ,-0.196823701262474,-0.723693668842316,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.542133092880249 ,-0.457725584506989,-0.704683601856232,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.249898374080658 ,-0.566836893558502,-0.785013854503632,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.740590155124664 ,-0.532754123210907,-0.409510970115662,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.120519727468491 ,-0.475927352905273,-0.871187806129456,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.144792750477791 ,-0.430247753858566,-0.891022980213165,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791 ,-0.430247753858566,-0.891022980213165,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.140057414770126 ,-0.293910145759583,-0.945516109466553,-0.229701682925224,-0.369639068841934,-0.900335550308228,0.953684031963348 ,-0.290462404489517,-0.0782197788357735,0.875235259532928,0.374192535877228,0.306501507759094,0.886379599571228 ,0.431774586439133,0.167038753628731,0.908462584018707,-0.179232552647591,-0.377586334943771,0.875235259532928 ,0.374192535877228,0.306501507759094,-0.353226035833359,0.839446485042572,0.412990301847458,-0.293016821146011 ,0.709561467170715,0.640830397605896,0.886379599571228,0.431774586439133,0.167038753628731,0.417629092931747 ,0.907208979129791,0.0505746938288212,0.0140912849456072,0.990858137607574,0.134169965982437,-0.024807246401906 ,0.980889618396759,-0.192977145314217,0.373418390750885,0.898855626583099,-0.229384630918503,-0.39387321472168 ,0.899492859840393,0.18914669752121,0.417629092931747,0.907208979129791,0.0505746938288212,0.373418390750885 ,0.898855626583099,-0.229384630918503,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.192518308758736 ,-0.454994261264801,-0.869434833526611,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.342734336853027 ,-0.423973858356476,-0.838319361209869,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.0599007532000542 ,0.520737946033478,0.851612508296967,-0.761694371700287,0.389483571052551,0.517807185649872,-0.261273354291916 ,0.592454433441162,0.762059092521667,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.786082983016968 ,-0.551289200782776,-0.279560059309006,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.747875332832336 ,-0.0330392643809319,0.663016498088837,-0.848471641540527,0.145880371332169,0.508738458156586,-0.0869597047567368 ,0.548145830631256,0.831849813461304,0.203655928373337,0.636657357215881,0.743768572807312,-0.21317532658577 ,0.371294349431992,0.903712749481201,-0.347785919904709,0.133236810564995,0.928058683872223,-0.848471641540527 ,0.145880371332169,0.508738458156586,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.21317532658577 ,0.371294349431992,0.903712749481201,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225 ,0.658302128314972,0.572181582450867,0.203655928373337,0.636657357215881,0.743768572807312,0.021379429847002 ,0.751378178596497,0.659525394439697,0.107353128492832,0.690562188625336,0.715261578559875,0.444850295782089 ,-0.346757113933563,0.825752794742584,0.254257917404175,-0.212425783276558,0.943519055843353,0.228504449129105 ,-0.206080406904221,0.951481223106384,0.419803202152252,-0.320524513721466,0.84913444519043,-0.952732801437378 ,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.917683064937592 ,-0.215978980064392,0.333482950925827,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.687154352664948 ,-0.340534240007401,0.6417595744133,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.938912212848663 ,-0.107537157833576,0.326924532651901,-0.249380812048912,0.181461036205292,0.951252400875092,0.0534563846886158 ,0.983699679374695,0.171689838171005,-0.106476634740829,0.986019790172577,0.128170698881149,0.255933493375778 ,0.96283483505249,-0.0862965509295464,-0.112783953547478,0.903910756111145,0.412583559751511,0.181902796030045 ,0.957158207893372,0.225298702716827,-0.142466872930527,0.844133794307709,0.516857206821442,-0.29035672545433 ,0.911720991134644,0.290616303682327,-0.301660984754562,0.907010614871979,0.293823689222336,-0.301660984754562 ,0.907010614871979,0.293823689222336,-0.29035672545433,0.911720991134644,0.290616303682327,-0.435499727725983 ,0.707530975341797,0.556542754173279,-0.720441699028015,0.626922428607941,0.296533405780792,-0.720441699028015 ,0.626922428607941,0.296533405780792,-0.435499727725983,0.707530975341797,0.556542754173279,-0.761694371700287 ,0.389483571052551,0.517807185649872,-0.877903461456299,0.125808238983154,0.462014973163605,0.181902796030045 ,0.957158207893372,0.225298702716827,0.414917647838593,0.779010057449341,0.470092207193375,0.421662032604218 ,0.906709790229797,0.00885869562625885,-0.142466872930527,0.844133794307709,0.516857206821442,-0.684342086315155 ,0.70050323009491,0.202413260936737,-0.887027978897095,0.338621288537979,0.313874155282974,-0.761694371700287 ,0.389483571052551,0.517807185649872,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.112783953547478 ,0.903910756111145,0.412583559751511,0.421662032604218,0.906709790229797,0.00885869562625885,0.325284242630005 ,0.933813154697418,0.148940086364746,0.0534563846886158,0.983699679374695,0.171689838171005,-0.0425885356962681 ,0.988019645214081,-0.148335143923759,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.106476634740829 ,0.986019790172577,0.128170698881149,-0.182774692773819,0.975853502750397,0.119596734642982,-0.662446260452271 ,-0.708414137363434,-0.243545264005661,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.672753393650055 ,-0.281969040632248,-0.684029519557953,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.819226324558258 ,-0.572083711624146,-0.0398554801940918,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.939978837966919 ,-0.283475905656815,-0.189950495958328,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.954774618148804 ,-0.0549839399755001,0.292202323675156,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.859505951404572 ,-0.505740880966187,0.0739976838231087,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.833407461643219 ,-0.0707383528351784,0.548113167285919,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.835693418979645 ,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.527523517608643 ,-0.0868940651416779,0.845084846019745,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.680657148361206 ,-0.552846014499664,0.480694442987442,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.122193120419979 ,0.122121326625347,0.984964549541473,-0.139697372913361,0.0780137032270432,0.987116277217865,0.254257917404175 ,-0.212425783276558,0.943519055843353,0.142127305269241,-0.253888607025146,0.956734240055084,0.254257917404175 ,-0.212425783276558,0.943519055843353,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.184806242585182 ,0.04760567471385,0.981621265411377,0.228504449129105,-0.206080406904221,0.951481223106384,0.228504449129105 ,-0.206080406904221,0.951481223106384,-0.184806242585182,0.04760567471385,0.981621265411377,-0.275664061307907 ,0.0508917570114136,0.959905922412872,0.15039549767971,-0.209228366613388,0.966232180595398,-0.275664061307907 ,0.0508917570114136,0.959905922412872,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.0830294638872147 ,-0.341880321502686,0.93606835603714,0.15039549767971,-0.209228366613388,0.966232180595398,0.000295055127935484 ,0.143534883856773,0.98964524269104,-0.122193120419979,0.122121326625347,0.984964549541473,0.142127305269241 ,-0.253888607025146,0.956734240055084,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.859505951404572 ,-0.505740880966187,0.0739976838231087,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.977081477642059 ,-0.212798669934273,-0.00533603969961405,-0.819226324558258,-0.572083711624146,-0.0398554801940918,0.00928871519863606 ,-0.538456916809082,-0.842601835727692,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.0681053325533867 ,-0.345358580350876,-0.935996353626251,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.672753393650055 ,-0.281969040632248,-0.684029519557953,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.00847726315259933 ,-0.531524419784546,-0.847000539302826,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.3323914706707 ,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,0.00928871519863606 ,-0.538456916809082,-0.842601835727692,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.746677756309509 ,-0.64300948381424,-0.170326471328735,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.898073315620422 ,-0.295351594686508,-0.325932085514069,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.600559055805206 ,0.384851962327957,0.70086932182312,-0.789069652557373,0.513498783111572,0.33717668056488,-0.900736033916473 ,0.276170164346695,0.335267961025238,-0.706152856349945,0.175898715853691,0.685862839221954,-0.95565664768219 ,0.128923356533051,0.264762312173843,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.706152856349945 ,0.175898715853691,0.685862839221954,-0.900736033916473,0.276170164346695,0.335267961025238,-0.786065578460693 ,0.0604399740695953,0.61518120765686,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594 ,-0.18550032377243,0.31383204460144,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.88741672039032 ,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.726840019226074 ,-0.113997332751751,0.677280008792877,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.82379025220871 ,-0.139535933732986,0.549453675746918,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.492890477180481 ,0.0867519974708557,0.865755796432495,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.740768253803253 ,-0.0962792262434959,0.664825260639191,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.93118155002594 ,-0.18550032377243,0.31383204460144,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.609626770019531 ,-0.0633527785539627,0.790152907371521,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.879765868186951 ,-0.241239860653877,0.409652799367905,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.52557498216629 ,0.553365111351013,0.646187245845795,-0.713905096054077,0.655318558216095,0.246773228049278,-0.789069652557373 ,0.513498783111572,0.33717668056488,-0.600559055805206,0.384851962327957,0.70086932182312,-0.554342925548553 ,0.567035973072052,0.609240651130676,-0.684342086315155,0.70050323009491,0.202413260936737,-0.713905096054077 ,0.655318558216095,0.246773228049278,-0.52557498216629,0.553365111351013,0.646187245845795,-0.854032337665558 ,0.444255322217941,-0.270676791667938,-0.95565664768219,0.128923356533051,0.264762312173843,-0.900736033916473 ,0.276170164346695,0.335267961025238,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.874421000480652 ,0.028505390509963,-0.484329789876938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.0824920982122421 ,0.586886823177338,-0.805455684661865,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.789069652557373 ,0.513498783111572,0.33717668056488,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.716631889343262 ,0.319041401147842,-0.620202660560608,-0.900736033916473,0.276170164346695,0.335267961025238,-0.713905096054077 ,0.655318558216095,0.246773228049278,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.829341650009155 ,0.321383953094482,-0.457061111927032,-0.789069652557373,0.513498783111572,0.33717668056488,-0.684342086315155 ,0.70050323009491,0.202413260936737,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.73716002702713 ,0.672038435935974,0.0704230293631554,-0.713905096054077,0.655318558216095,0.246773228049278,0.0745275393128395 ,0.431530833244324,0.899014353752136,0.0482074841856956,0.963629901409149,0.262856423854828,-0.190823212265968 ,0.973383665084839,0.126928135752678,-0.421310722827911,0.492505818605423,0.761534810066223,0.199702888727188 ,0.793615162372589,0.574711859226227,-0.263717442750931,0.775425553321838,0.573731958866119,-0.106476634740829 ,0.986019790172577,0.128170698881149,0.0534563846886158,0.983699679374695,0.171689838171005,-0.190823212265968 ,0.973383665084839,0.126928135752678,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.654110372066498 ,0.557340681552887,0.511381506919861,-0.421310722827911,0.492505818605423,0.761534810066223,-0.332666903734207 ,0.942436695098877,0.0338508486747742,-0.182774692773819,0.975853502750397,0.119596734642982,-0.263717442750931 ,0.775425553321838,0.573731958866119,-0.654110372066498,0.557340681552887,0.511381506919861,0.0772658213973045 ,-0.858631789684296,0.506736099720001,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.0522458925843239 ,-0.587620496749878,0.807448148727417,0.185403272509575,-0.597725808620453,0.779967606067657,0.130717054009438 ,0.879965662956238,0.456698477268219,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.0638052001595497 ,0.994221389293671,-0.086329497396946,0.105478949844837,0.892287731170654,0.438972383737564,0.133888319134712 ,0.6242516040802,0.769664764404297,0.130717054009438,0.879965662956238,0.456698477268219,0.105478949844837,0.892287731170654 ,0.438972383737564,0.212958931922913,0.603173196315765,0.768655061721802,0.0345219671726227,0.469873160123825 ,0.882058680057526,-0.0333014093339443,0.336885303258896,0.940956592559814,0.245675906538963,0.358359038829803 ,0.900678694248199,0.246256619691849,0.328444272279739,0.911856353282928,0.185403272509575,-0.597725808620453 ,0.779967606067657,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.141512751579285,-0.835205972194672 ,0.531418025493622,0.183785125613213,-0.564789414405823,0.80450975894928,-0.0402880981564522,-0.602410852909088 ,0.797168791294098,0.0388557612895966,0.393748223781586,0.918396770954132,0.246256619691849,0.328444272279739 ,0.911856353282928,0.183785125613213,-0.564789414405823,0.80450975894928,-0.00957944244146347,-0.984838724136353 ,0.173207774758339,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.0983656272292137,-0.854222357273102 ,0.510517776012421,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0333014093339443,0.336885303258896 ,0.940956592559814,0.133888319134712,0.6242516040802,0.769664764404297,0.212958931922913,0.603173196315765,0.768655061721802 ,0.245675906538963,0.358359038829803,0.900678694248199,-0.286335736513138,0.0160704739391804,-0.95799458026886 ,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.365642845630646,0.319204062223434,-0.874307751655579 ,-0.291299909353256,0.369882375001907,-0.882230937480927,0.0482074841856956,0.963629901409149,0.262856423854828 ,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.218648448586464,0.688608109951019,-0.691383898258209 ,-0.190823212265968,0.973383665084839,0.126928135752678,-0.294875234365463,0.607182502746582,-0.737819731235504 ,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.0597109496593475,0.20538541674614,-0.976857900619507 ,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.331786870956421,0.242688208818436,-0.911602914333344 ,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0473092421889305,0.433387726545334,-0.899964928627014 ,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508 ,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.0400200858712196,0.538817524909973,-0.841471374034882 ,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.240498825907707,0.538952767848969,-0.807273328304291 ,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0513396598398685,0.366866230964661,-0.928855955600739 ,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.0672369971871376,-0.00775569351390004,-0.997706890106201 ,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.182968229055405,-0.224779292941093,-0.957077264785767 ,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.055810023099184,-0.2584228515625,-0.964418411254883 ,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.0780564248561859,-0.38590082526207,-0.919232130050659 ,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.000145141151733696,-0.408616960048676,-0.912705957889557 ,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.0450695939362049,-0.253388822078705,-0.966314017772675 ,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527 ,-0.000159720322699286,-0.320416629314423,-0.947276711463928,0.00452618766576052,-0.317399501800537,-0.948281109333038 ,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.169686332345009,0.978208720684052,-0.119642592966557 ,0.0492917597293854,0.955946862697601,0.28937155008316,0.0205553397536278,0.989267349243164,-0.144663617014885 ,-0.0425885356962681,0.988019645214081,-0.148335143923759,0.370400339365005,0.925967752933502,-0.0733987167477608 ,0.0462776906788349,0.971960961818695,0.23054338991642,0.0492917597293854,0.955946862697601,0.28937155008316 ,0.169686332345009,0.978208720684052,-0.119642592966557,-0.165674656629562,0.933009803295136,-0.319444298744202 ,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0557159669697285,0.916767716407776,0.395515710115433 ,0.122461646795273,0.908201992511749,0.400215208530426,-0.000357056385837495,-0.611226499080658,-0.791455626487732 ,-0.000515560561325401,-0.726091146469116,-0.68759822845459,0.0942423716187477,-0.686610460281372,-0.72089147567749 ,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.122461646795273,0.908201992511749,0.400215208530426 ,0.0557159669697285,0.916767716407776,0.395515710115433,0.0419506318867207,0.986220836639404,0.160026773810387 ,0.0643617510795593,0.973314523696899,0.220264464616776,-0.0473092421889305,0.433387726545334,-0.899964928627014 ,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.21808297932148,0.578010439872742,-0.786348342895508 ,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.020222021266818,-0.390664726495743,-0.920310854911804 ,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.0463922955095768,-0.412300795316696,-0.909865856170654 ,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.000159720322699286,-0.320416629314423,-0.947276711463928 ,-0.000357056385837495,-0.611226499080658,-0.791455626487732,0.0480021014809608,-0.559525310993195,-0.827422022819519 ,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0513396598398685,0.366866230964661,-0.928855955600739 ,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.286335736513138,0.0160704739391804,-0.95799458026886 ,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.352729320526123,0.114327535033226,0.92871481180191 ,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.275664061307907,0.0508917570114136,0.959905922412872 ,-0.184806242585182,0.04760567471385,0.981621265411377,-0.307830482721329,-0.686485290527344,0.658770322799683 ,0.10191734880209,-0.459647685289383,0.882234036922455,-0.0830294638872147,-0.341880321502686,0.93606835603714 ,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.384585797786713,-0.351018995046616,-0.853744387626648 ,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.642698705196381,0.173675417900085,-0.746173679828644 ,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.0812708511948586,-0.898197948932648,-0.432013303041458 ,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.196655720472336,-0.712397694587708,-0.673658668994904 ,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.0440049432218075,-0.995802879333496,-0.0802504494786263 ,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.180760905146599,-0.893208205699921,-0.411709308624268 ,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.102202795445919,-0.709632575511932,-0.697119891643524 ,-0.105853073298931,-0.664507687091827,-0.739746332168579,-0.18527527153492,-0.667633235454559,-0.721067905426025 ,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.105853073298931,-0.664507687091827,-0.739746332168579 ,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.374457865953445,-0.757000803947449,-0.535472750663757 ,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.10163875669241,0.148283883929253,-0.983708024024963 ,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.829341650009155,0.321383953094482,-0.457061111927032 ,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.756865978240967,0.644326865673065,0.109529994428158 ,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.73716002702713,0.672038435935974,0.0704230293631554 ,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.854032337665558,0.444255322217941,-0.270676791667938 ,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.10163875669241,0.148283883929253,-0.983708024024963 ,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.154009714722633,-0.985912680625916,-0.0652465522289276 ,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.00957944244146347,-0.984838724136353,0.173207774758339 ,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0638052001595497,0.994221389293671,-0.086329497396946 ,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.140676811337471,0.965593755245209,-0.218720734119415 ,-0.720985412597656,0.250006407499313,0.646279215812683,-0.990060329437256,-0.0573833771049976,-0.128404289484024 ,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.568449974060059,0.526249170303345,0.632397353649139 ,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.990060329437256,-0.0573833771049976,-0.128404289484024 ,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.730888843536377,-0.408141672611237,-0.547011733055115 ,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.529653549194336,0.324454098939896,-0.783707022666931 ,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.990060329437256,-0.0573833771049976,-0.128404289484024 ,0.708686351776123,0.701542615890503,0.0748436823487282,0.471062362194061,0.869565486907959,0.148176074028015 ,0.457759588956833,0.863344848155975,-0.21234855055809,0.646372437477112,0.650956153869629,-0.398068875074387 ,0.387304782867432,0.59377658367157,0.705283224582672,0.263491213321686,0.831329226493835,0.48935067653656,0.606493294239044 ,0.649602949619293,0.458456039428711,0.662577331066132,0.589804947376251,0.46165069937706,0.350325137376785,0.620450079441071 ,0.70165091753006,0.394804865121841,0.885042786598206,0.246634021401405,-0.0894755497574806,0.965718626976013 ,0.243683651089668,-0.298087060451508,0.801499605178833,0.518403768539429,-0.298087060451508,0.801499605178833 ,0.518403768539429,-0.0615167804062366,0.641514480113983,0.764640331268311,0.321956604719162,0.474833071231842 ,0.819071114063263,0.350325137376785,0.620450079441071,0.70165091753006,-0.111158438026905,0.66179496049881,0.74139815568924 ,-0.0702482014894485,0.80213338136673,0.592998504638672,0.386715173721313,0.754913926124573,0.529675722122192 ,0.375614732503891,0.495400130748749,0.783257484436035,0.0745275393128395,0.431530833244324,0.899014353752136 ,0.0708804950118065,0.122446231544018,0.989940881729126,0.551036536693573,0.1087965965271,0.827358484268188,0.550135016441345 ,0.461672753095627,0.695851802825928,0.396661043167114,0.909007132053375,0.127929911017418,0.372023165225983 ,0.906736969947815,-0.19856184720993,0.457759588956833,0.863344848155975,-0.21234855055809,0.471062362194061 ,0.869565486907959,0.148176074028015,0.383488237857819,0.890466749668121,0.244960829615593,0.55004757642746,0.676443994045258 ,0.489766448736191,0.337217271327972,0.810059905052185,0.479674339294434,0.389103561639786,0.77647876739502,0.495660334825516 ,0.388264060020447,0.528846085071564,0.754700541496277,0.55090343952179,0.499813765287399,0.668349921703339,0.55004757642746 ,0.676443994045258,0.489766448736191,0.858800172805786,0.271537780761719,0.434430092573166,0.0572854578495026 ,0.523676514625549,0.849988996982574,-0.111158438026905,0.66179496049881,0.74139815568924,0.375614732503891,0.495400130748749 ,0.783257484436035,0.257902681827545,0.417416572570801,0.871349334716797,0.0708804950118065,0.122446231544018 ,0.989940881729126,0.0692365244030952,0.127935454249382,0.989362835884094,0.510494410991669,0.103201098740101 ,0.853665590286255,0.551036536693573,0.1087965965271,0.827358484268188,0.372023165225983,0.906736969947815,-0.19856184720993 ,0.282073974609375,0.803686380386353,-0.523948907852173,0.320013791322708,0.764963567256927,-0.558947086334229 ,0.457759588956833,0.863344848155975,-0.21234855055809,0.916756093502045,0.0901993364095688,0.389130234718323 ,0.705088436603546,-0.598325669765472,-0.380600422620773,0.74578994512558,-0.633161306381226,-0.207133173942566 ,0.93030720949173,0.248524934053421,0.269747763872147,0.0692365244030952,0.127935454249382,0.989362835884094 ,0.0673762187361717,0.208747074007988,0.975646018981934,0.253994464874268,0.250187575817108,0.934287428855896 ,0.510494410991669,0.103201098740101,0.853665590286255,0.895810067653656,0.254065722227097,-0.364657372236252 ,0.980262100696564,0.00691105145961046,0.197581350803375,0.971711039543152,-0.0647541359066963,0.227122470736504 ,0.842455089092255,-0.136532187461853,-0.521179795265198,0.579905271530151,-0.813046872615814,-0.0516200996935368 ,0.54582554101944,-0.560542941093445,-0.622788965702057,0.789066255092621,-0.467570185661316,-0.398437708616257 ,0.663097739219666,-0.724811255931854,0.186949267983437,0.835493862628937,0.547001540660858,0.0523386560380459 ,0.799383401870728,0.596614599227905,-0.0709738805890083,0.238877683877945,0.949131786823273,-0.205149352550507 ,0.285585820674896,0.936043798923492,-0.20557901263237,0.635354340076447,0.0863202884793282,0.767381072044373 ,0.747986078262329,-0.084919698536396,0.658259391784668,0.80047994852066,-0.0622782073915005,0.596115171909332 ,0.813431859016418,0.0690318197011948,0.577549338340759,0.122040368616581,-0.22475291788578,-0.966743111610413 ,0.460681647062302,-0.288388341665268,-0.83940726518631,0.346117079257965,-0.47863432765007,-0.80691522359848 ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.39206200838089,-0.444667458534241,-0.805331110954285 ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.623417019844055,-0.452671766281128,-0.637526035308838 ,0.31203830242157,-0.439545303583145,-0.842277884483337,0.996236562728882,0.0134180961176753,-0.0856306329369545 ,0.942644000053406,-0.318175673484802,-0.100928120315075,0.829055666923523,-0.40739643573761,-0.383007615804672 ,0.946820557117462,-0.166022479534149,-0.275621712207794,0.92408949136734,-0.175655707716942,0.339416593313217 ,0.909235060214996,-0.290925145149231,0.297748446464539,0.915336489677429,-0.234250664710999,0.327545046806335 ,0.970865368843079,0.0892849490046501,0.222370475530624,0.132409438490868,0.260098040103912,0.956460535526276 ,0.0114754280075431,0.247809365391731,0.968740820884705,0.188986584544182,0.217446967959404,0.957601606845856 ,0.186875864863396,0.167301252484322,0.968032896518707,0.000295055127935484,0.143534883856773,0.98964524269104 ,0.122565753757954,0.118542328476906,0.98535543680191,0.188986584544182,0.217446967959404,0.957601606845856,0.0114754280075431 ,0.247809365391731,0.968740820884705,0.140872359275818,-0.399173051118851,-0.905988872051239,0.31203830242157 ,-0.439545303583145,-0.842277884483337,0.272795677185059,-0.496994286775589,-0.823759198188782,0.140843346714973 ,-0.431618928909302,-0.890992820262909,0.623417019844055,-0.452671766281128,-0.637526035308838,0.546701967716217 ,-0.520302414894104,-0.656050562858582,0.272795677185059,-0.496994286775589,-0.823759198188782,0.31203830242157 ,-0.439545303583145,-0.842277884483337,0.942644000053406,-0.318175673484802,-0.100928120315075,0.92242443561554 ,-0.371073186397552,-0.106947988271713,0.790781438350677,-0.460972279310226,-0.402702450752258,0.829055666923523 ,-0.40739643573761,-0.383007615804672,0.915336489677429,-0.234250664710999,0.327545046806335,0.916560828685761 ,-0.24360553920269,0.317131847143173,0.941202819347382,-0.301624983549118,0.152183011174202,0.955660283565521 ,-0.256323933601379,0.144953340291977,0.909235060214996,-0.290925145149231,0.297748446464539,0.918301284313202 ,-0.218417331576347,0.330176681280136,0.916560828685761,-0.24360553920269,0.317131847143173,0.915336489677429 ,-0.234250664710999,0.327545046806335,0.885917663574219,-0.280271381139755,0.369591504335403,0.879492223262787 ,-0.245268657803535,0.407844007015228,0.918301284313202,-0.218417331576347,0.330176681280136,0.909235060214996 ,-0.290925145149231,0.297748446464539,0.140843346714973,-0.431618928909302,-0.890992820262909,0.272795677185059 ,-0.496994286775589,-0.823759198188782,0.267562568187714,-0.479633033275604,-0.835680842399597,0.228939339518547 ,-0.370276868343353,-0.900267601013184,0.546701967716217,-0.520302414894104,-0.656050562858582,0.549745261669159 ,-0.473052263259888,-0.68847781419754,0.267562568187714,-0.479633033275604,-0.835680842399597,0.272795677185059 ,-0.496994286775589,-0.823759198188782,0.92242443561554,-0.371073186397552,-0.106947988271713,0.925438106060028 ,-0.353884547948837,-0.135388508439064,0.796822428703308,-0.432056725025177,-0.422375500202179,0.790781438350677 ,-0.460972279310226,-0.402702450752258,0.916560828685761,-0.24360553920269,0.317131847143173,0.953391134738922 ,-0.158550098538399,0.256724029779434,0.960864663124084,-0.249232992529869,0.120921671390533,0.941202819347382 ,-0.301624983549118,0.152183011174202,0.265665024518967,0.160569414496422,0.950599610805511,0.140111669898033 ,0.0783234462141991,0.987033009529114,0.185034364461899,0.0477372668683529,0.981571912765503,0.353190511465073 ,0.114995338022709,0.928457081317902,0.549745261669159,-0.473052263259888,-0.68847781419754,0.678162038326263 ,-0.241175547242165,-0.694212198257446,0.385590463876724,-0.303107500076294,-0.871461868286133,0.267562568187714 ,-0.479633033275604,-0.835680842399597,0.925438106060028,-0.353884547948837,-0.135388508439064,0.962334990501404 ,-0.205602362751961,-0.177873581647873,0.888094663619995,-0.231564551591873,-0.39707151055336,0.796822428703308 ,-0.432056725025177,-0.422375500202179,0.960864663124084,-0.249232992529869,0.120921671390533,0.953391134738922 ,-0.158550098538399,0.256724029779434,0.983779430389404,0.00275212083943188,0.179361149668694,0.993288457393646 ,-0.102479107677937,0.0536287166178226,0.938150525093079,-0.0836314186453819,0.335975229740143,0.946241497993469 ,0.0790377557277679,0.313655972480774,0.983779430389404,0.00275212083943188,0.179361149668694,0.953391134738922 ,-0.158550098538399,0.256724029779434,0.91181892156601,-0.103688038885593,0.397284656763077,0.86522775888443 ,0.0834222286939621,0.494390219449997,0.946241497993469,0.0790377557277679,0.313655972480774,0.938150525093079 ,-0.0836314186453819,0.335975229740143,0.823973476886749,-0.140763908624649,0.548865377902985,0.709406793117523 ,0.0714843049645424,0.701164722442627,0.86522775888443,0.0834222286939621,0.494390219449997,0.91181892156601 ,-0.103688038885593,0.397284656763077,0.962334990501404,-0.205602362751961,-0.177873581647873,0.939977943897247 ,-0.283478707075119,-0.189950734376907,0.89782452583313,-0.295981734991074,-0.32604593038559,0.888094663619995 ,-0.231564551591873,-0.39707151055336,0.993288457393646,-0.102479107677937,0.0536287166178226,0.983779430389404 ,0.00275212083943188,0.179361149668694,0.984757125377655,-0.122858062386513,0.123123273253441,0.977083265781403 ,-0.21279039978981,-0.00533624598756433,0.946241497993469,0.0790377557277679,0.313655972480774,0.954775273799896 ,-0.0549841597676277,0.292200028896332,0.984757125377655,-0.122858062386513,0.123123273253441,0.983779430389404 ,0.00275212083943188,0.179361149668694,0.86522775888443,0.0834222286939621,0.494390219449997,0.833409249782562 ,-0.0707181841135025,0.54811304807663,0.954775273799896,-0.0549841597676277,0.292200028896332,0.946241497993469 ,0.0790377557277679,0.313655972480774,0.709406793117523,0.0714843049645424,0.701164722442627,0.527580142021179 ,-0.0869907140731812,0.845039546489716,0.833409249782562,-0.0707181841135025,0.54811304807663,0.86522775888443 ,0.0834222286939621,0.494390219449997,0.661977589130402,-0.708897471427917,-0.243413314223289,0.746676325798035 ,-0.643010795116425,-0.17032790184021,0.6322380900383,-0.767571449279785,-0.10539997369051,0.29490727186203,-0.85530948638916 ,-0.425999224185944,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.859511733055115,-0.505731165409088 ,0.0739971473813057,0.746179103851318,-0.664099156856537,0.0467877462506294,0.6322380900383,-0.767571449279785 ,-0.10539997369051,0.859511733055115,-0.505731165409088,0.0739971473813057,0.835695207118988,-0.485575556755066 ,0.256573379039764,0.711589336395264,-0.66451358795166,0.228171736001968,0.746179103851318,-0.664099156856537 ,0.0467877462506294,0.680691421031952,-0.552797436714172,0.480701744556427,0.550213515758514,-0.731853306293488 ,0.402064383029938,0.711589336395264,-0.66451358795166,0.228171736001968,0.835695207118988,-0.485575556755066 ,0.256573379039764,0.544267177581787,0.038809709250927,0.838013768196106,0.729275226593018,-0.11221731454134 ,0.674955487251282,0.747986078262329,-0.084919698536396,0.658259391784668,0.635354340076447,0.0863202884793282 ,0.767381072044373,0.385354042053223,0.042363528162241,0.921795845031738,0.610790312290192,-0.062268540263176 ,0.789340078830719,0.729275226593018,-0.11221731454134,0.674955487251282,0.544267177581787,0.038809709250927 ,0.838013768196106,0.603610038757324,0.179113283753395,0.776899814605713,0.635354340076447,0.0863202884793282 ,0.767381072044373,0.813431859016418,0.0690318197011948,0.577549338340759,0.77562689781189,0.195846498012543 ,0.60003924369812,0.428932994604111,0.13583180308342,0.893065631389618,0.544267177581787,0.038809709250927,0.838013768196106 ,0.635354340076447,0.0863202884793282,0.767381072044373,0.603610038757324,0.179113283753395,0.776899814605713 ,0.255159199237823,0.10554338991642,0.961121380329132,0.385354042053223,0.042363528162241,0.921795845031738,0.544267177581787 ,0.038809709250927,0.838013768196106,0.428932994604111,0.13583180308342,0.893065631389618,0.353190511465073,0.114995338022709 ,0.928457081317902,0.493080407381058,0.0869515836238861,0.865627586841583,0.610790312290192,-0.062268540263176 ,0.789340078830719,0.385354042053223,0.042363528162241,0.921795845031738,0.512751221656799,0.314961016178131 ,0.798677444458008,0.603610038757324,0.179113283753395,0.776899814605713,0.77562689781189,0.195846498012543,0.60003924369812 ,0.704553008079529,0.389835178852081,0.592987060546875,0.186875864863396,0.167301252484322,0.968032896518707 ,0.255159199237823,0.10554338991642,0.961121380329132,0.428932994604111,0.13583180308342,0.893065631389618,0.352489024400711 ,0.249785035848618,0.901864171028137,0.603610038757324,0.179113283753395,0.776899814605713,0.512751221656799 ,0.314961016178131,0.798677444458008,0.352489024400711,0.249785035848618,0.901864171028137,0.428932994604111 ,0.13583180308342,0.893065631389618,0.265665024518967,0.160569414496422,0.950599610805511,0.353190511465073,0.114995338022709 ,0.928457081317902,0.385354042053223,0.042363528162241,0.921795845031738,0.255159199237823,0.10554338991642,0.961121380329132 ,0.188986584544182,0.217446967959404,0.957601606845856,0.265665024518967,0.160569414496422,0.950599610805511 ,0.255159199237823,0.10554338991642,0.961121380329132,0.186875864863396,0.167301252484322,0.968032896518707,0.448167592287064 ,0.331256568431854,0.830310106277466,0.287839502096176,0.391564905643463,0.873971045017242,0.238586917519569 ,0.344399750232697,0.908000588417053,0.352489024400711,0.249785035848618,0.901864171028137,0.132409438490868 ,0.260098040103912,0.956460535526276,0.186875864863396,0.167301252484322,0.968032896518707,0.352489024400711 ,0.249785035848618,0.901864171028137,0.238586917519569,0.344399750232697,0.908000588417053,0.545623481273651 ,0.394130259752274,0.739564955234528,0.512751221656799,0.314961016178131,0.798677444458008,0.704553008079529 ,0.389835178852081,0.592987060546875,0.63835346698761,0.527818858623505,0.560278594493866,0.540044844150543,0.824666082859039 ,-0.168158859014511,0.491935312747955,0.72918576002121,-0.475697129964828,0.282073974609375,0.803686380386353 ,-0.523948907852173,0.372023165225983,0.906736969947815,-0.19856184720993,0.647948265075684,-0.685174643993378 ,-0.332714289426804,0.812437415122986,-0.0575567446649075,0.580200552940369,0.4433753490448,0.161547407507896 ,0.881657958030701,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.122356586158276,0.987737119197845 ,-0.0969751328229904,0.393054485321045,0.919416308403015,-0.0134849762544036,0.259856075048447,0.961204409599304 ,0.0925252288579941,0.0862562954425812,0.984675407409668,-0.151572123169899,0.550135016441345,0.461672753095627 ,0.695851802825928,0.551036536693573,0.1087965965271,0.827358484268188,0.736154615879059,0.240016058087349,0.632825970649719 ,0.750702619552612,0.512931108474731,0.416349858045578,0.551036536693573,0.1087965965271,0.827358484268188,0.510494410991669 ,0.103201098740101,0.853665590286255,0.63226306438446,0.224956437945366,0.741375803947449,0.736154615879059,0.240016058087349 ,0.632825970649719,0.140111669898033,0.0783234462141991,0.987033009529114,0.265665024518967,0.160569414496422 ,0.950599610805511,0.188986584544182,0.217446967959404,0.957601606845856,0.122565753757954,0.118542328476906 ,0.98535543680191,0.275597482919693,0.0508149787783623,0.95992910861969,0.527580142021179,-0.0869907140731812 ,0.845039546489716,0.709406793117523,0.0714843049645424,0.701164722442627,0.493080407381058,0.0869515836238861 ,0.865627586841583,-0.266191899776459,0.70389860868454,-0.658535182476044,0.266888707876205,0.958940505981445 ,0.0959352776408196,0.393054485321045,0.919416308403015,-0.0134849762544036,-0.122356586158276,0.987737119197845 ,-0.0969751328229904,0.0462776906788349,0.971960961818695,0.23054338991642,-0.0405596829950809,0.531582415103912 ,-0.846034944057465,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.318083673715591,0.947685122489929 ,-0.0267524290829897,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.141722351312637,-0.25363889336586 ,0.956860542297363,-0.27082097530365,-0.434562891721725,0.858959317207336,-0.444781541824341,-0.346720337867737 ,0.825805306434631,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.41981428861618,-0.320506066083908 ,0.849135935306549,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.150304853916168,-0.209269061684608 ,0.966237485408783,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.355942904949188,-0.323049247264862 ,0.876894414424896,-0.101489536464214,-0.459648072719574,0.882283091545105,0.0832947567105293,-0.342013299465179 ,0.935996174812317,0.578356921672821,-0.429673582315445,-0.693457901477814,0.37424498796463,0.138061463832855 ,-0.91699492931366,0.132010728120804,0.613032221794128,-0.778950989246368,0.526131212711334,0.493667006492615 ,-0.692444086074829,0.663097739219666,-0.724811255931854,0.186949267983437,0.789066255092621,-0.467570185661316 ,-0.398437708616257,0.958566963672638,0.124525241553783,-0.256208688020706,0.835218191146851,-0.360097140073776 ,0.415620774030685,-0.141722351312637,-0.25363889336586,0.956860542297363,0.000238662076299079,-0.279259294271469 ,0.96021568775177,0.000465182994958013,-0.480507552623749,0.876990437507629,-0.27082097530365,-0.434562891721725 ,0.858959317207336,0.546701967716217,-0.520302414894104,-0.656050562858582,0.623417019844055,-0.452671766281128 ,-0.637526035308838,0.829055666923523,-0.40739643573761,-0.383007615804672,0.790781438350677,-0.460972279310226 ,-0.402702450752258,0.549745261669159,-0.473052263259888,-0.68847781419754,0.546701967716217,-0.520302414894104 ,-0.656050562858582,0.790781438350677,-0.460972279310226,-0.402702450752258,0.796822428703308,-0.432056725025177 ,-0.422375500202179,0.678162038326263,-0.241175547242165,-0.694212198257446,0.549745261669159,-0.473052263259888 ,-0.68847781419754,0.796822428703308,-0.432056725025177,-0.422375500202179,0.888094663619995,-0.231564551591873 ,-0.39707151055336,0.672621726989746,-0.282224327325821,-0.684053659439087,0.678162038326263,-0.241175547242165 ,-0.694212198257446,0.888094663619995,-0.231564551591873,-0.39707151055336,0.89782452583313,-0.295981734991074 ,-0.32604593038559,-0.00762177817523479,0.899371445178986,0.437118947505951,0.0780242905020714,0.996866285800934 ,0.0130291758105159,0.78013014793396,0.624480009078979,-0.0377050787210464,0.849660098552704,0.510039925575256 ,0.133928999304771,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.945589601993561,0.313947737216949 ,0.0854233801364899,0.93030720949173,0.248524934053421,0.269747763872147,0.74578994512558,-0.633161306381226 ,-0.207133173942566,0.238877683877945,0.949131786823273,-0.205149352550507,0.799383401870728,0.596614599227905 ,-0.0709738805890083,0.78013014793396,0.624480009078979,-0.0377050787210464,0.0780242905020714,0.996866285800934 ,0.0130291758105159,0.986967325210571,0.15194895863533,0.0529817342758179,0.955660283565521,-0.256323933601379 ,0.144953340291977,0.942644000053406,-0.318175673484802,-0.100928120315075,0.996236562728882,0.0134180961176753 ,-0.0856306329369545,0.92242443561554,-0.371073186397552,-0.106947988271713,0.942644000053406,-0.318175673484802 ,-0.100928120315075,0.955660283565521,-0.256323933601379,0.144953340291977,0.941202819347382,-0.301624983549118 ,0.152183011174202,0.925438106060028,-0.353884547948837,-0.135388508439064,0.92242443561554,-0.371073186397552 ,-0.106947988271713,0.941202819347382,-0.301624983549118,0.152183011174202,0.960864663124084,-0.249232992529869 ,0.120921671390533,0.962334990501404,-0.205602362751961,-0.177873581647873,0.925438106060028,-0.353884547948837 ,-0.135388508439064,0.960864663124084,-0.249232992529869,0.120921671390533,0.993288457393646,-0.102479107677937 ,0.0536287166178226,0.939977943897247,-0.283478707075119,-0.189950734376907,0.962334990501404,-0.205602362751961 ,-0.177873581647873,0.993288457393646,-0.102479107677937,0.0536287166178226,0.977083265781403,-0.21279039978981 ,-0.00533624598756433,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.0405596829950809,0.531582415103912 ,-0.846034944057465,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.266191899776459,0.70389860868454 ,-0.658535182476044,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.389843672513962,0.518116474151611 ,-0.761299669742584,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.122356586158276,0.987737119197845 ,-0.0969751328229904,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.00791200343519449,-0.3136927485466 ,-0.949491560459137,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.139385372400284,-0.293043553829193 ,-0.945884346961975,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0882615447044373,-0.199013933539391 ,-0.976014018058777,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.0786453634500504,-0.439450114965439 ,-0.894817590713501,0.196265131235123,0.534957885742188,-0.821766436100006,0.163574278354645,0.575437486171722 ,-0.801320910453796,0.37424498796463,0.138061463832855,-0.91699492931366,0.142098233103752,0.253012806177139 ,-0.956970512866974,0.196265131235123,0.534957885742188,-0.821766436100006,0.318493723869324,0.728740870952606 ,-0.606216490268707,0.320013791322708,0.764963567256927,-0.558947086334229,0.163574278354645,0.575437486171722 ,-0.801320910453796,-0.0101916557177901,0.912391781806946,0.409191101789474,0.179319217801094,0.922120809555054 ,-0.342837929725647,0.39146089553833,0.900987803936005,-0.187027588486671,-0.112045332789421,0.883429408073425 ,0.45497065782547,0.558892965316772,0.631695210933685,-0.537214875221252,0.589160740375519,0.293493062257767 ,-0.75282895565033,0.220478102564812,0.225269511342049,-0.949022173881531,0.230260863900185,0.590617835521698 ,-0.773401916027069,0.806149482727051,-0.532726168632507,0.257538169622421,0.968841314315796,0.185883238911629 ,-0.163688346743584,0.964999854564667,0.254521876573563,-0.0631974339485168,0.775248348712921,-0.624625861644745 ,0.0939816311001778,-0.0615167804062366,0.641514480113983,0.764640331268311,0.0572854578495026,0.523676514625549 ,0.849988996982574,0.287839502096176,0.391564905643463,0.873971045017242,0.321956604719162,0.474833071231842 ,0.819071114063263,0.0454900041222572,0.2624471783638,0.963873505592346,0.0114754280075431,0.247809365391731 ,0.968740820884705,0.132409438490868,0.260098040103912,0.956460535526276,0.253994464874268,0.250187575817108 ,0.934287428855896,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.0173844322562218,-0.524197161197662 ,-0.851419508457184,-0.0738197043538094,-0.58150452375412,-0.810187101364136,-0.117905855178833,-0.615884125232697 ,-0.778964042663574,0.29490727186203,-0.85530948638916,-0.425999224185944,-0.0854567661881447,-0.590025365352631 ,-0.802849411964417,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.375436156988144,-0.682113528251648 ,-0.627510011196136,0.303897142410278,-0.58835905790329,-0.749319791793823,0.493177682161331,0.0824330747127533 ,-0.866014182567596,0.67315399646759,0.330984532833099,-0.661296367645264,0.591645836830139,-0.392304599285126 ,-0.7043097615242,0.471546560525894,0.148768365383148,-0.86920177936554,0.122040368616581,-0.22475291788578,-0.966743111610413 ,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.125168636441231,-0.0242336299270391,-0.991839468479156 ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.0879448130726814,-0.45889338850975,-0.884128153324127 ,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.122040368616581,-0.22475291788578,-0.966743111610413 ,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.0494538806378841,-0.556213021278381,-0.829566955566406 ,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.117905855178833,-0.615884125232697,-0.778964042663574 ,0.678162038326263,-0.241175547242165,-0.694212198257446,0.672621726989746,-0.282224327325821,-0.684053659439087 ,0.332537442445755,-0.288520336151123,-0.897872388362885,0.385590463876724,-0.303107500076294,-0.871461868286133 ,0.385590463876724,-0.303107500076294,-0.871461868286133,0.332537442445755,-0.288520336151123,-0.897872388362885 ,0.216808795928955,-0.349548786878586,-0.911487579345703,0.228939339518547,-0.370276868343353,-0.900267601013184 ,0.216808795928955,-0.349548786878586,-0.911487579345703,0.0646723359823227,-0.342740118503571,-0.937201499938965 ,0.139385372400284,-0.293043553829193,-0.945884346961975,0.228939339518547,-0.370276868343353,-0.900267601013184 ,0.39206200838089,-0.444667458534241,-0.805331110954285,0.174190670251846,-0.475461959838867,-0.862318694591522 ,0.150176227092743,-0.476422011852264,-0.866296231746674,0.346117079257965,-0.47863432765007,-0.80691522359848 ,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0879448130726814,-0.45889338850975,-0.884128153324127 ,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128 ,-0.373825579881668,0.746838629245758,0.549987733364105,0.617900848388672,0.738122165203094,0.270876914262772 ,0.554794549942017,0.63729065656662,0.534849166870117,-0.39384588599205,0.733602285385132,0.553816795349121,-0.39384588599205 ,0.733602285385132,0.553816795349121,0.554794549942017,0.63729065656662,0.534849166870117,0.347248166799545,0.561754763126373 ,0.75089967250824,-0.460472017526627,0.662255048751831,0.591086983680725,0.347248166799545,0.561754763126373 ,0.75089967250824,0.327279478311539,0.828797340393066,0.453853607177734,-0.619935512542725,0.784334897994995 ,0.0223318859934807,-0.460472017526627,0.662255048751831,0.591086983680725,0.938301980495453,0.0685238614678383 ,0.338959902524948,0.350325137376785,0.620450079441071,0.70165091753006,0.321956604719162,0.474833071231842,0.819071114063263 ,0.671115279197693,0.284787148237228,0.684471070766449,0.394804865121841,0.885042786598206,0.246634021401405 ,0.350325137376785,0.620450079441071,0.70165091753006,0.938301980495453,0.0685238614678383,0.338959902524948 ,0.791727185249329,0.579225897789001,0.194075778126717,0.387304782867432,0.59377658367157,0.705283224582672,0.223836988210678 ,0.893291056156158,0.389779537916183,-0.358905464410782,0.931329369544983,0.0617449507117271,0.263491213321686 ,0.831329226493835,0.48935067653656,0.565629243850708,0.815166532993317,0.124768301844597,0.540044844150543,0.824666082859039 ,-0.168158859014511,0.372023165225983,0.906736969947815,-0.19856184720993,0.396661043167114,0.909007132053375 ,0.127929911017418,0.55090343952179,0.499813765287399,0.668349921703339,0.558709442615509,0.701101422309875,0.443058162927628 ,0.337217271327972,0.810059905052185,0.479674339294434,0.55004757642746,0.676443994045258,0.489766448736191,0.253994464874268 ,0.250187575817108,0.934287428855896,0.132409438490868,0.260098040103912,0.956460535526276,0.238586917519569 ,0.344399750232697,0.908000588417053,0.257902681827545,0.417416572570801,0.871349334716797,0.287839502096176 ,0.391564905643463,0.873971045017242,0.448167592287064,0.331256568431854,0.830310106277466,0.671115279197693 ,0.284787148237228,0.684471070766449,0.321956604719162,0.474833071231842,0.819071114063263,0.238586917519569 ,0.344399750232697,0.908000588417053,0.287839502096176,0.391564905643463,0.873971045017242,0.0572854578495026 ,0.523676514625549,0.849988996982574,0.257902681827545,0.417416572570801,0.871349334716797,0.671115279197693 ,0.284787148237228,0.684471070766449,0.545623481273651,0.394130259752274,0.739564955234528,0.665781199932098 ,0.528658747673035,0.526550352573395,0.947060525417328,0.264708548784256,0.181674882769585,-0.0702482014894485 ,0.80213338136673,0.592998504638672,-0.111158438026905,0.66179496049881,0.74139815568924,-0.406122446060181,0.842904448509216 ,0.352954238653183,-0.243022814393044,0.95173841714859,0.187440201640129,0.375614732503891,0.495400130748749 ,0.783257484436035,0.386715173721313,0.754913926124573,0.529675722122192,0.750702619552612,0.512931108474731 ,0.416349858045578,0.736154615879059,0.240016058087349,0.632825970649719,0.63226306438446,0.224956437945366,0.741375803947449 ,0.257902681827545,0.417416572570801,0.871349334716797,0.375614732503891,0.495400130748749,0.783257484436035 ,0.736154615879059,0.240016058087349,0.632825970649719,0.39146089553833,0.900987803936005,-0.187027588486671 ,0.53197318315506,0.845954120159149,0.0369608402252197,-0.258110016584396,0.811675071716309,0.523987472057343 ,-0.112045332789421,0.883429408073425,0.45497065782547,0.595662355422974,0.236076727509499,-0.767759144306183 ,0.460681647062302,-0.288388341665268,-0.83940726518631,0.122040368616581,-0.22475291788578,-0.966743111610413 ,0.471546560525894,0.148768365383148,-0.86920177936554,0.493177682161331,0.0824330747127533,-0.866014182567596 ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.460681647062302,-0.288388341665268,-0.83940726518631 ,0.595662355422974,0.236076727509499,-0.767759144306183,0.737872421741486,0.632259011268616,0.236204952001572 ,0.554449737071991,0.577977955341339,0.598771214485168,0.837648034095764,0.514832735061646,-0.182463780045509 ,0.652710020542145,0.543907403945923,-0.527384459972382,0.125168636441231,-0.0242336299270391,-0.991839468479156 ,0.142098233103752,0.253012806177139,-0.956970512866974,0.37424498796463,0.138061463832855,-0.91699492931366 ,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242 ,0.67315399646759,0.330984532833099,-0.661296367645264,0.471546560525894,0.148768365383148,-0.86920177936554 ,0.37424498796463,0.138061463832855,-0.91699492931366,0.67315399646759,0.330984532833099,-0.661296367645264,0.493177682161331 ,0.0824330747127533,-0.866014182567596,0.595662355422974,0.236076727509499,-0.767759144306183,0.471546560525894 ,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.37424498796463,0.138061463832855 ,-0.91699492931366,0.578356921672821,-0.429673582315445,-0.693457901477814,0.303897142410278,-0.58835905790329 ,-0.749319791793823,0.708686351776123,0.701542615890503,0.0748436823487282,0.780383825302124,0.614288032054901 ,0.116838775575161,0.662577331066132,0.589804947376251,0.46165069937706,0.606493294239044,0.649602949619293,0.458456039428711 ,0.263491213321686,0.831329226493835,0.48935067653656,0.383488237857819,0.890466749668121,0.244960829615593,0.389103561639786 ,0.77647876739502,0.495660334825516,0.606493294239044,0.649602949619293,0.458456039428711,0.589160740375519,0.293493062257767 ,-0.75282895565033,0.558892965316772,0.631695210933685,-0.537214875221252,0.74043333530426,0.634463846683502 ,-0.221842527389526,0.646372437477112,0.650956153869629,-0.398068875074387,0.181706041097641,0.450920969247818 ,-0.873872518539429,0.220478102564812,0.225269511342049,-0.949022173881531,0.589160740375519,0.293493062257767 ,-0.75282895565033,0.424405604600906,0.592946588993073,-0.684320271015167,0.0537682510912418,-0.324202865362167 ,0.944458305835724,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.175815492868423,0.3834168612957 ,0.90668648481369,0.0744736939668655,0.385000914335251,0.919906497001648,-0.249922096729279,-0.324745059013367 ,0.912183940410614,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.474767446517944,0.386590272188187 ,0.790660321712494,-0.175815492868423,0.3834168612957,0.90668648481369,-0.702542901039124,0.392548084259033,0.593581914901733 ,-0.474767446517944,0.386590272188187,0.790660321712494,-0.629638135433197,-0.332909524440765,0.701945245265961 ,-0.881015419960022,-0.306221485137939,0.360610902309418,0.258142352104187,0.50887656211853,-0.821222960948944 ,0.162849396467209,0.526230156421661,-0.834602832794189,0.145952269434929,0.566527962684631,-0.811014175415039 ,0.266342312097549,0.6069176197052,-0.748807609081268,0.263788342475891,0.299328684806824,-0.916961312294006 ,0.19240340590477,0.354867070913315,-0.914904534816742,0.162849396467209,0.526230156421661,-0.834602832794189 ,0.258142352104187,0.50887656211853,-0.821222960948944,0.0690941736102104,-0.258630573749542,-0.963502049446106 ,0.155474439263344,0.00156243739183992,-0.987838685512543,0.235058307647705,0.00269885058514774,-0.971977531909943 ,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0786453634500504,-0.439450114965439,-0.894817590713501 ,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0690941736102104,-0.258630573749542,-0.963502049446106 ,0.13675257563591,-0.219145968556404,-0.966060936450958,0.139385372400284,-0.293043553829193,-0.945884346961975 ,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.0458064116537571,-0.413144141435623,-0.909512877464294 ,0.106468603014946,-0.443950653076172,-0.889703452587128,0.142098233103752,0.253012806177139,-0.956970512866974 ,0.263788342475891,0.299328684806824,-0.916961312294006,0.258142352104187,0.50887656211853,-0.821222960948944 ,0.196265131235123,0.534957885742188,-0.821766436100006,0.235058307647705,0.00269885058514774,-0.971977531909943 ,0.263788342475891,0.299328684806824,-0.916961312294006,0.142098233103752,0.253012806177139,-0.956970512866974 ,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.13675257563591,-0.219145968556404,-0.966060936450958 ,0.235058307647705,0.00269885058514774,-0.971977531909943,0.125168636441231,-0.0242336299270391,-0.991839468479156 ,0.0882615447044373,-0.199013933539391,-0.976014018058777,-0.0387927554547787,0.555053651332855,-0.830909490585327 ,0.0419506318867207,0.986220836639404,0.160026773810387,0.0270950496196747,0.974490761756897,0.222785964608192 ,0.230260863900185,0.590617835521698,-0.773401916027069,-0.00269555998966098,0.944226384162903,0.329286128282547 ,0.558892965316772,0.631695210933685,-0.537214875221252,0.230260863900185,0.590617835521698,-0.773401916027069 ,0.0270950496196747,0.974490761756897,0.222785964608192,-0.0771232843399048,0.899696409702301,0.42964905500412 ,0.74043333530426,0.634463846683502,-0.221842527389526,0.558892965316772,0.631695210933685,-0.537214875221252 ,-0.00269555998966098,0.944226384162903,0.329286128282547,0.780383825302124,0.614288032054901,0.116838775575161 ,-0.166241437196732,0.836733281612396,0.521767377853394,-0.227350860834122,0.778867661952972,0.584531247615814 ,0.662577331066132,0.589804947376251,0.46165069937706,0.662577331066132,0.589804947376251,0.46165069937706,-0.227350860834122 ,0.778867661952972,0.584531247615814,-0.422318667173386,0.684858381748199,0.593814790248871,0.387304782867432 ,0.59377658367157,0.705283224582672,0.387304782867432,0.59377658367157,0.705283224582672,-0.422318667173386,0.684858381748199 ,0.593814790248871,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.223836988210678,0.893291056156158 ,0.389779537916183,0.457618981599808,0.813868880271912,0.358053594827652,0.37424173951149,0.91025847196579,0.17712339758873 ,-0.702542901039124,0.392548084259033,0.593581914901733,-0.800732433795929,0.427052974700928,0.420063436031342 ,0.420635163784027,0.68705153465271,0.592474699020386,-0.826933801174164,0.485819309949875,0.283125460147858 ,-0.870735168457031,0.449585229158401,0.199231997132301,0.196103185415268,0.611983716487885,0.766171991825104 ,-0.870735168457031,0.449585229158401,0.199231997132301,-0.903985500335693,0.390926718711853,0.173165991902351 ,0.0825407654047012,0.994074046611786,0.0707375407218933,0.196103185415268,0.611983716487885,0.766171991825104 ,0.0218184478580952,0.990070343017578,-0.13886933028698,0.0744736939668655,0.385000914335251,0.919906497001648 ,-0.175815492868423,0.3834168612957,0.90668648481369,0.122364826500416,0.988039612770081,-0.0938328057527542 ,0.122364826500416,0.988039612770081,-0.0938328057527542,-0.175815492868423,0.3834168612957,0.90668648481369 ,-0.474767446517944,0.386590272188187,0.790660321712494,0.261956453323364,0.964480102062225,0.0340141989290714 ,0.261956453323364,0.964480102062225,0.0340141989290714,-0.474767446517944,0.386590272188187,0.790660321712494 ,-0.702542901039124,0.392548084259033,0.593581914901733,0.37424173951149,0.91025847196579,0.17712339758873,0.617900848388672 ,0.738122165203094,0.270876914262772,0.457618981599808,0.813868880271912,0.358053594827652,0.420635163784027 ,0.68705153465271,0.592474699020386,0.554794549942017,0.63729065656662,0.534849166870117,0.39146089553833,0.900987803936005 ,-0.187027588486671,0.261956453323364,0.964480102062225,0.0340141989290714,0.37424173951149,0.91025847196579 ,0.17712339758873,0.53197318315506,0.845954120159149,0.0369608402252197,0.179319217801094,0.922120809555054,-0.342837929725647 ,0.122364826500416,0.988039612770081,-0.0938328057527542,0.261956453323364,0.964480102062225,0.0340141989290714 ,0.39146089553833,0.900987803936005,-0.187027588486671,0.00435609184205532,0.929633140563965,-0.368460655212402 ,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122364826500416,0.988039612770081,-0.0938328057527542 ,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474 ,-0.112045332789421,0.883429408073425,0.45497065782547,-0.00269555998966098,0.944226384162903,0.329286128282547 ,0.0270950496196747,0.974490761756897,0.222785964608192,-0.112045332789421,0.883429408073425,0.45497065782547 ,-0.258110016584396,0.811675071716309,0.523987472057343,-0.0771232843399048,0.899696409702301,0.42964905500412 ,-0.00269555998966098,0.944226384162903,0.329286128282547,-0.373825579881668,0.746838629245758,0.549987733364105 ,-0.166241437196732,0.836733281612396,0.521767377853394,-0.0771232843399048,0.899696409702301,0.42964905500412 ,-0.258110016584396,0.811675071716309,0.523987472057343,-0.166241437196732,0.836733281612396,0.521767377853394 ,-0.373825579881668,0.746838629245758,0.549987733364105,-0.39384588599205,0.733602285385132,0.553816795349121 ,-0.227350860834122,0.778867661952972,0.584531247615814,-0.39384588599205,0.733602285385132,0.553816795349121 ,-0.460472017526627,0.662255048751831,0.591086983680725,-0.422318667173386,0.684858381748199,0.593814790248871 ,-0.227350860834122,0.778867661952972,0.584531247615814,-0.460472017526627,0.662255048751831,0.591086983680725 ,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.20431387424469,0.977353155612946,-0.0551062189042568 ,-0.422318667173386,0.684858381748199,0.593814790248871,0.327279478311539,0.828797340393066,0.453853607177734 ,0.0825407654047012,0.994074046611786,0.0707375407218933,-0.20431387424469,0.977353155612946,-0.0551062189042568 ,-0.619935512542725,0.784334897994995,0.0223318859934807,0.347248166799545,0.561754763126373,0.75089967250824 ,0.196103185415268,0.611983716487885,0.766171991825104,0.0825407654047012,0.994074046611786,0.0707375407218933 ,0.327279478311539,0.828797340393066,0.453853607177734,0.554794549942017,0.63729065656662,0.534849166870117,0.420635163784027 ,0.68705153465271,0.592474699020386,0.196103185415268,0.611983716487885,0.766171991825104,0.347248166799545,0.561754763126373 ,0.75089967250824,-0.800732433795929,0.427052974700928,0.420063436031342,-0.702542901039124,0.392548084259033 ,0.593581914901733,-0.881015419960022,-0.306221485137939,0.360610902309418,-0.971851825714111,-0.229726418852806 ,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.905991911888123,-0.0693745836615562 ,-0.417571365833282,-0.870735168457031,0.449585229158401,0.199231997132301,-0.826933801174164,0.485819309949875 ,0.283125460147858,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.895736455917358,-0.0740359798073769 ,-0.438377469778061,-0.903985500335693,0.390926718711853,0.173165991902351,-0.870735168457031,0.449585229158401 ,0.199231997132301,0.430973529815674,0.546808898448944,0.717817425727844,0.42970210313797,0.768015503883362,0.474877148866653 ,-0.339239358901978,0.848914384841919,0.405291259288788,-0.365288615226746,0.685251891613007,0.630074620246887 ,-0.349254995584488,0.931400954723358,0.102533832192421,-0.339239358901978,0.848914384841919,0.405291259288788 ,0.42970210313797,0.768015503883362,0.474877148866653,0.471417188644409,0.872199058532715,0.130516812205315,-0.349305719137192 ,0.811025559902191,-0.469279229640961,0.524978220462799,0.717848002910614,-0.457265913486481,0.49711886048317 ,0.498656928539276,-0.710080325603485,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.263506501913071 ,-0.108145013451576,-0.958576560020447,-0.354273974895477,0.577595055103302,-0.735441267490387,0.49711886048317 ,0.498656928539276,-0.710080325603485,0.421276032924652,-0.302525490522385,-0.854988157749176,0.54582554101944 ,-0.560542941093445,-0.622788965702057,0.652710020542145,0.543907403945923,-0.527384459972382,0.0589214377105236 ,0.108213946223259,-0.99237996339798,0.0839502513408661,-0.381248086690903,-0.920653164386749,-0.248638898134232 ,0.048121701925993,-0.967400133609772,0.0589214377105236,0.108213946223259,-0.99237996339798,0.652710020542145 ,0.543907403945923,-0.527384459972382,0.442993491888046,0.219760671257973,-0.869173228740692,0.613709151744843 ,-0.52058732509613,-0.593590676784515,0.764467060565948,-0.53394079208374,-0.361244171857834,0.218565791845322 ,-0.866421818733215,-0.448934614658356,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.764467060565948 ,-0.53394079208374,-0.361244171857834,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.428993254899979 ,-0.900569558143616,-0.0702797770500183,0.218565791845322,-0.866421818733215,-0.448934614658356,0.891158640384674 ,-0.445911049842834,-0.0836637020111084,0.932840287685394,-0.323781669139862,0.158033236861229,0.534525871276855 ,-0.813466727733612,0.229246467351913,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.654802083969116 ,-0.347440212965012,0.67120748758316,0.646713316440582,-0.673043549060822,0.358851253986359,0.916919708251953 ,-0.248773142695427,0.312041908502579,0.685809075832367,-0.12582391500473,0.716822326183319,0.368975192308426 ,0.372379690408707,0.851581275463104,0.430973529815674,0.546808898448944,0.717817425727844,-0.365288615226746 ,0.685251891613007,0.630074620246887,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045 ,0.0901993364095688,0.389130234718323,0.93030720949173,0.248524934053421,0.269747763872147,0.42970210313797,0.768015503883362 ,0.474877148866653,0.430973529815674,0.546808898448944,0.717817425727844,0.93030720949173,0.248524934053421,0.269747763872147 ,0.945589601993561,0.313947737216949,0.0854233801364899,0.471417188644409,0.872199058532715,0.130516812205315 ,0.42970210313797,0.768015503883362,0.474877148866653,0.968841314315796,0.185883238911629,-0.163688346743584 ,0.524978220462799,0.717848002910614,-0.457265913486481,0.517808675765991,0.838519096374512,-0.169587478041649 ,0.964999854564667,0.254521876573563,-0.0631974339485168,0.789066255092621,-0.467570185661316,-0.398437708616257 ,0.421276032924652,-0.302525490522385,-0.854988157749176,0.49711886048317,0.498656928539276,-0.710080325603485 ,0.958566963672638,0.124525241553783,-0.256208688020706,0.837648034095764,0.514832735061646,-0.182463780045509 ,0.554449737071991,0.577977955341339,0.598771214485168,0.437207967042923,0.465549558401108,0.76948869228363,0.996942400932312 ,0.0589848347008228,-0.051250733435154,0.849660098552704,0.510039925575256,0.133928999304771,0.78013014793396 ,0.624480009078979,-0.0377050787210464,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.764467060565948 ,-0.53394079208374,-0.361244171857834,0.78013014793396,0.624480009078979,-0.0377050787210464,0.799383401870728 ,0.596614599227905,-0.0709738805890083,0.932840287685394,-0.323781669139862,0.158033236861229,0.891158640384674 ,-0.445911049842834,-0.0836637020111084,0.799383401870728,0.596614599227905,-0.0709738805890083,0.835493862628937 ,0.547001540660858,0.0523386560380459,0.916919708251953,-0.248773142695427,0.312041908502579,0.932840287685394 ,-0.323781669139862,0.158033236861229,0.835218191146851,-0.360097140073776,0.415620774030685,0.806149482727051 ,-0.532726168632507,0.257538169622421,0.112480655312538,-0.860872745513916,0.496231973171234,0.123612143099308 ,-0.593166947364807,0.795533180236816,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.0816513150930405 ,-0.993346512317657,-0.0812143534421921,0.0904572755098343,-0.981297671794891,0.169918611645699,0.775248348712921 ,-0.624625861644745,0.0939816311001778,0.705088436603546,-0.598325669765472,-0.380600422620773,0.0589963421225548 ,-0.720462381839752,-0.690980017185211,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.74578994512558 ,-0.633161306381226,-0.207133173942566,0.647948265075684,-0.685174643993378,-0.332714289426804,0.0439913086593151 ,-0.675665616989136,-0.735894501209259,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.705088436603546 ,-0.598325669765472,-0.380600422620773,0.201858729124069,0.87289696931839,0.444189012050629,0.285585820674896 ,0.936043798923492,-0.20557901263237,0.132751479744911,0.960573315620422,-0.244286626577377,-0.00299930199980736 ,0.929396331310272,0.36907109618187,0.0780242905020714,0.996866285800934,0.0130291758105159,0.0320413000881672 ,0.998972654342651,-0.0320465676486492,0.141466349363327,0.962726950645447,-0.230529963970184,0.238877683877945 ,0.949131786823273,-0.205149352550507,-0.00762177817523479,0.899371445178986,0.437118947505951,-0.112318813800812 ,0.902268052101135,0.416289359331131,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.0780242905020714 ,0.996866285800934,0.0130291758105159,0.135901644825935,0.703174889087677,0.697908222675323,-0.158927887678146 ,0.672389388084412,0.722934603691101,-0.112318813800812,0.902268052101135,0.416289359331131,-0.00762177817523479 ,0.899371445178986,0.437118947505951,0.663097739219666,-0.724811255931854,0.186949267983437,0.835218191146851 ,-0.360097140073776,0.415620774030685,0.123612143099308,-0.593166947364807,0.795533180236816,0.159164875745773 ,-0.84468400478363,0.511053323745728,0.114869266748428,0.74843168258667,0.653188347816467,0.0335473045706749 ,0.692889869213104,0.720262587070465,0.55090343952179,0.499813765287399,0.668349921703339,0.388264060020447,0.528846085071564 ,0.754700541496277,0.946820557117462,-0.166022479534149,-0.275621712207794,0.704087793827057,-0.576694130897522 ,-0.414347946643829,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.996236562728882,0.0134180961176753 ,-0.0856306329369545,-0.0757745653390884,0.59090781211853,-0.803172528743744,0.526131212711334,0.493667006492615 ,-0.692444086074829,0.491935312747955,0.72918576002121,-0.475697129964828,0.0196502637118101,0.849765479564667 ,-0.52679455280304,0.765287220478058,-0.345726698637009,-0.542962729930878,0.316276580095291,-0.60947847366333 ,-0.726983547210693,0.704087793827057,-0.576694130897522,-0.414347946643829,0.946820557117462,-0.166022479534149 ,-0.275621712207794,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.873082160949707,-0.478354394435883 ,-0.0943642035126686,0.929248809814453,-0.338162571191788,0.148804187774658,0.986967325210571,0.15194895863533 ,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.91059011220932,-0.28900209069252 ,0.295471668243408,0.830892741680145,-0.200436040759087,0.51907867193222,0.92408949136734,-0.175655707716942 ,0.339416593313217,0.526131212711334,0.493667006492615,-0.692444086074829,-0.0757745653390884,0.59090781211853 ,-0.803172528743744,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.509015023708344,-0.485809624195099 ,-0.71055805683136,0.066303126513958,0.98921149969101,0.130631282925606,0.0600598677992821,0.978212475776672 ,-0.198728814721107,0.540044844150543,0.824666082859039,-0.168158859014511,0.565629243850708,0.815166532993317 ,0.124768301844597,0.0335473045706749,0.692889869213104,0.720262587070465,0.0757396295666695,0.879416644573212 ,0.469989240169525,0.558709442615509,0.701101422309875,0.443058162927628,0.55090343952179,0.499813765287399,0.668349921703339 ,0.0757396295666695,0.879416644573212,0.469989240169525,0.0335473045706749,0.692889869213104,0.720262587070465 ,-0.365288615226746,0.685251891613007,0.630074620246887,-0.339239358901978,0.848914384841919,0.405291259288788 ,0.066303126513958,0.98921149969101,0.130631282925606,0.0757396295666695,0.879416644573212,0.469989240169525 ,-0.339239358901978,0.848914384841919,0.405291259288788,-0.349254995584488,0.931400954723358,0.102533832192421 ,0.0196502637118101,0.849765479564667,-0.52679455280304,0.0600598677992821,0.978212475776672,-0.198728814721107 ,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349305719137192,0.811025559902191,-0.469279229640961 ,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.103349760174751,-0.10200422257185,-0.989400804042816 ,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.354273974895477,0.577595055103302,-0.735441267490387 ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.230070114135742,-0.386967688798904,-0.89292985200882 ,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.0589214377105236,0.108213946223259,-0.99237996339798 ,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.316276580095291,-0.60947847366333,-0.726983547210693 ,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.23220556974411,-0.496286630630493,-0.836528658866882 ,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.873082160949707,-0.478354394435883,-0.0943642035126686 ,0.704087793827057,-0.576694130897522,-0.414347946643829,0.218565791845322,-0.866421818733215,-0.448934614658356 ,0.929248809814453,-0.338162571191788,0.148804187774658,0.873082160949707,-0.478354394435883,-0.0943642035126686 ,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.534525871276855,-0.813466727733612,0.229246467351913 ,0.646713316440582,-0.673043549060822,0.358851253986359,0.91059011220932,-0.28900209069252,0.295471668243408 ,0.929248809814453,-0.338162571191788,0.148804187774658,0.534525871276855,-0.813466727733612,0.229246467351913 ,-0.0639391615986824,0.658531367778778,0.749832093715668,0.114869266748428,0.74843168258667,0.653188347816467 ,0.388264060020447,0.528846085071564,0.754700541496277,0.189128592610359,0.522824287414551,0.831194996833801 ,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0839502513408661,-0.381248086690903,-0.920653164386749 ,-0.263506501913071,-0.108145013451576,-0.958576560020447,0.421276032924652,-0.302525490522385,-0.854988157749176 ,0.230070114135742,-0.386967688798904,-0.89292985200882,0.509015023708344,-0.485809624195099,-0.71055805683136 ,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.0839502513408661,-0.381248086690903,-0.920653164386749 ,0.418020725250244,-0.127127349376678,-0.899498343467712,0.482518672943115,-0.357222050428391,-0.799730002880096 ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.493177682161331,0.0824330747127533,-0.866014182567596 ,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.482518672943115,-0.357222050428391,-0.799730002880096 ,0.418020725250244,-0.127127349376678,-0.899498343467712,-0.027174474671483,-0.150700747966766,-0.988205909729004 ,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.23220556974411,-0.496286630630493,-0.836528658866882 ,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.027174474671483,-0.150700747966766,-0.988205909729004 ,0.464636594057083,-0.415377110242844,-0.782032430171967,-0.23220556974411,-0.496286630630493,-0.836528658866882 ,-0.248638898134232,0.048121701925993,-0.967400133609772,0.442993491888046,0.219760671257973,-0.869173228740692 ,0.338892996311188,0.40640527009964,0.84852010011673,0.037119422107935,0.39716312289238,0.916997075080872,0.437207967042923 ,0.465549558401108,0.76948869228363,0.554449737071991,0.577977955341339,0.598771214485168,0.579905271530151,-0.813046872615814 ,-0.0516200996935368,0.737872421741486,0.632259011268616,0.236204952001572,0.652710020542145,0.543907403945923 ,-0.527384459972382,0.54582554101944,-0.560542941093445,-0.622788965702057,0.606493294239044,0.649602949619293 ,0.458456039428711,0.389103561639786,0.77647876739502,0.495660334825516,0.471062362194061,0.869565486907959,0.148176074028015 ,0.708686351776123,0.701542615890503,0.0748436823487282,0.389103561639786,0.77647876739502,0.495660334825516 ,0.337217271327972,0.810059905052185,0.479674339294434,0.396661043167114,0.909007132053375,0.127929911017418 ,0.471062362194061,0.869565486907959,0.148176074028015,0.775248348712921,-0.624625861644745,0.0939816311001778 ,0.964999854564667,0.254521876573563,-0.0631974339485168,0.945589601993561,0.313947737216949,0.0854233801364899 ,0.771648705005646,-0.635727405548096,-0.0202230606228113,-0.258110016584396,0.811675071716309,0.523987472057343 ,0.53197318315506,0.845954120159149,0.0369608402252197,0.617900848388672,0.738122165203094,0.270876914262772 ,-0.373825579881668,0.746838629245758,0.549987733364105,0.396661043167114,0.909007132053375,0.127929911017418 ,0.337217271327972,0.810059905052185,0.479674339294434,0.558709442615509,0.701101422309875,0.443058162927628 ,0.565629243850708,0.815166532993317,0.124768301844597,0.646372437477112,0.650956153869629,-0.398068875074387 ,0.74043333530426,0.634463846683502,-0.221842527389526,0.780383825302124,0.614288032054901,0.116838775575161 ,0.708686351776123,0.701542615890503,0.0748436823487282,0.74043333530426,0.634463846683502,-0.221842527389526 ,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.166241437196732,0.836733281612396,0.521767377853394 ,0.780383825302124,0.614288032054901,0.116838775575161,0.53197318315506,0.845954120159149,0.0369608402252197 ,0.37424173951149,0.91025847196579,0.17712339758873,0.457618981599808,0.813868880271912,0.358053594827652,0.617900848388672 ,0.738122165203094,0.270876914262772,0.945589601993561,0.313947737216949,0.0854233801364899,0.964999854564667 ,0.254521876573563,-0.0631974339485168,0.517808675765991,0.838519096374512,-0.169587478041649,0.471417188644409 ,0.872199058532715,0.130516812205315,0.74578994512558,-0.633161306381226,-0.207133173942566,0.0672344118356705 ,-0.90103155374527,-0.428510963916779,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.771648705005646 ,-0.635727405548096,-0.0202230606228113,0.565629243850708,0.815166532993317,0.124768301844597,0.558709442615509 ,0.701101422309875,0.443058162927628,0.0757396295666695,0.879416644573212,0.469989240169525,0.066303126513958 ,0.98921149969101,0.130631282925606,0.282073974609375,0.803686380386353,-0.523948907852173,0.132010728120804 ,0.613032221794128,-0.778950989246368,0.163574278354645,0.575437486171722,-0.801320910453796,0.320013791322708 ,0.764963567256927,-0.558947086334229,0.285585820674896,0.936043798923492,-0.20557901263237,0.201858729124069 ,0.87289696931839,0.444189012050629,0.618469655513763,0.424896746873856,0.661028027534485,0.835493862628937,0.547001540660858 ,0.0523386560380459,0.842455089092255,-0.136532187461853,-0.521179795265198,0.971711039543152,-0.0647541359066963 ,0.227122470736504,0.929154098033905,-0.212225988507271,0.302708983421326,0.92408949136734,-0.175655707716942 ,0.339416593313217,0.929154098033905,-0.212225988507271,0.302708983421326,0.885917663574219,-0.280271381139755 ,0.369591504335403,0.909235060214996,-0.290925145149231,0.297748446464539,0.92408949136734,-0.175655707716942 ,0.339416593313217,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649 ,0.548865377902985,0.91181892156601,-0.103688038885593,0.397284656763077,0.918301284313202,-0.218417331576347 ,0.330176681280136,0.491935312747955,0.72918576002121,-0.475697129964828,0.526131212711334,0.493667006492615 ,-0.692444086074829,0.132010728120804,0.613032221794128,-0.778950989246368,0.282073974609375,0.803686380386353 ,-0.523948907852173,0.550213515758514,-0.731853306293488,0.402064383029938,0.680691421031952,-0.552797436714172 ,0.480701744556427,0.430274456739426,-0.536508023738861,0.725963473320007,0.307976216077805,-0.686480343341827 ,0.6587073802948,0.318493723869324,0.728740870952606,-0.606216490268707,0.646372437477112,0.650956153869629,-0.398068875074387 ,0.457759588956833,0.863344848155975,-0.21234855055809,0.320013791322708,0.764963567256927,-0.558947086334229 ,0.835218191146851,-0.360097140073776,0.415620774030685,0.958566963672638,0.124525241553783,-0.256208688020706 ,0.968841314315796,0.185883238911629,-0.163688346743584,0.806149482727051,-0.532726168632507,0.257538169622421 ,0.266342312097549,0.6069176197052,-0.748807609081268,0.145952269434929,0.566527962684631,-0.811014175415039 ,0.181706041097641,0.450920969247818,-0.873872518539429,0.424405604600906,0.592946588993073,-0.684320271015167 ,0.196265131235123,0.534957885742188,-0.821766436100006,0.258142352104187,0.50887656211853,-0.821222960948944 ,0.266342312097549,0.6069176197052,-0.748807609081268,0.318493723869324,0.728740870952606,-0.606216490268707 ,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.343787729740143,0.921479761600494,-0.180790051817894 ,0.517808675765991,0.838519096374512,-0.169587478041649,0.524978220462799,0.717848002910614,-0.457265913486481 ,0.646713316440582,-0.673043549060822,0.358851253986359,0.534525871276855,-0.813466727733612,0.229246467351913 ,0.932840287685394,-0.323781669139862,0.158033236861229,0.916919708251953,-0.248773142695427,0.312041908502579 ,0.958566963672638,0.124525241553783,-0.256208688020706,0.49711886048317,0.498656928539276,-0.710080325603485 ,0.524978220462799,0.717848002910614,-0.457265913486481,0.968841314315796,0.185883238911629,-0.163688346743584 ,0.835493862628937,0.547001540660858,0.0523386560380459,0.618469655513763,0.424896746873856,0.661028027534485 ,0.685809075832367,-0.12582391500473,0.716822326183319,0.916919708251953,-0.248773142695427,0.312041908502579 ,0.775248348712921,-0.624625861644745,0.0939816311001778,0.0904572755098343,-0.981297671794891,0.169918611645699 ,0.112480655312538,-0.860872745513916,0.496231973171234,0.806149482727051,-0.532726168632507,0.257538169622421 ,0.285585820674896,0.936043798923492,-0.20557901263237,0.238877683877945,0.949131786823273,-0.205149352550507 ,0.141466349363327,0.962726950645447,-0.230529963970184,0.132751479744911,0.960573315620422,-0.244286626577377 ,0.540044844150543,0.824666082859039,-0.168158859014511,0.0600598677992821,0.978212475776672,-0.198728814721107 ,0.0196502637118101,0.849765479564667,-0.52679455280304,0.491935312747955,0.72918576002121,-0.475697129964828 ,0.970865368843079,0.0892849490046501,0.222370475530624,0.986967325210571,0.15194895863533,0.0529817342758179 ,0.929248809814453,-0.338162571191788,0.148804187774658,0.91059011220932,-0.28900209069252,0.295471668243408 ,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.0757745653390884,0.59090781211853,-0.803172528743744 ,0.0196502637118101,0.849765479564667,-0.52679455280304,-0.349305719137192,0.811025559902191,-0.469279229640961 ,0.654802083969116,-0.347440212965012,0.67120748758316,0.830892741680145,-0.200436040759087,0.51907867193222 ,0.91059011220932,-0.28900209069252,0.295471668243408,0.646713316440582,-0.673043549060822,0.358851253986359 ,0.915336489677429,-0.234250664710999,0.327545046806335,0.955660283565521,-0.256323933601379,0.144953340291977 ,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624 ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.482518672943115,-0.357222050428391,-0.799730002880096 ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.39206200838089,-0.444667458534241,-0.805331110954285 ,0.623417019844055,-0.452671766281128,-0.637526035308838,0.765287220478058,-0.345726698637009,-0.542962729930878 ,0.946820557117462,-0.166022479534149,-0.275621712207794,0.829055666923523,-0.40739643573761,-0.383007615804672 ,0.135901644825935,0.703174889087677,0.697908222675323,-0.00762177817523479,0.899371445178986,0.437118947505951 ,0.849660098552704,0.510039925575256,0.133928999304771,0.961316466331482,0.243311077356339,0.129113554954529 ,0.346117079257965,-0.47863432765007,-0.80691522359848,0.460681647062302,-0.288388341665268,-0.83940726518631 ,0.527646243572235,-0.330830633640289,-0.782394111156464,0.39206200838089,-0.444667458534241,-0.805331110954285 ,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.150176227092743,-0.476422011852264,-0.866296231746674 ,0.174190670251846,-0.475461959838867,-0.862318694591522,0.113550499081612,-0.486260622739792,-0.866404592990875 ,0.106468603014946,-0.443950653076172,-0.889703452587128,0.0458064116537571,-0.413144141435623,-0.909512877464294 ,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0786453634500504,-0.439450114965439,-0.894817590713501 ,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.464636594057083,-0.415377110242844,-0.782032430171967 ,0.613709151744843,-0.52058732509613,-0.593590676784515,-0.0159856956452131,-0.708547711372375,-0.705481767654419 ,0.961316466331482,0.243311077356339,0.129113554954529,0.849660098552704,0.510039925575256,0.133928999304771 ,0.764467060565948,-0.53394079208374,-0.361244171857834,0.613709151744843,-0.52058732509613,-0.593590676784515 ,0.135901644825935,0.703174889087677,0.697908222675323,0.437207967042923,0.465549558401108,0.76948869228363,0.037119422107935 ,0.39716312289238,0.916997075080872,-0.158927887678146,0.672389388084412,0.722934603691101,0.482518672943115 ,-0.357222050428391,-0.799730002880096,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.316276580095291 ,-0.60947847366333,-0.726983547210693,0.765287220478058,-0.345726698637009,-0.542962729930878,-0.0159856956452131 ,-0.708547711372375,-0.705481767654419,0.218565791845322,-0.866421818733215,-0.448934614658356,0.704087793827057 ,-0.576694130897522,-0.414347946643829,0.316276580095291,-0.60947847366333,-0.726983547210693,0.113550499081612 ,-0.486260622739792,-0.866404592990875,0.140872359275818,-0.399173051118851,-0.905988872051239,0.140843346714973 ,-0.431618928909302,-0.890992820262909,0.106468603014946,-0.443950653076172,-0.889703452587128,0.140843346714973 ,-0.431618928909302,-0.890992820262909,0.228939339518547,-0.370276868343353,-0.900267601013184,0.139385372400284 ,-0.293043553829193,-0.945884346961975,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.971851825714111 ,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.826933801174164 ,0.485819309949875,0.283125460147858,-0.800732433795929,0.427052974700928,0.420063436031342,-0.800732433795929 ,0.427052974700928,0.420063436031342,-0.826933801174164,0.485819309949875,0.283125460147858,0.420635163784027 ,0.68705153465271,0.592474699020386,0.457618981599808,0.813868880271912,0.358053594827652,-0.349254995584488 ,0.931400954723358,0.102533832192421,-0.343787729740143,0.921479761600494,-0.180790051817894,0.0600598677992821 ,0.978212475776672,-0.198728814721107,0.066303126513958,0.98921149969101,0.130631282925606,0.471417188644409 ,0.872199058532715,0.130516812205315,0.517808675765991,0.838519096374512,-0.169587478041649,-0.343787729740143 ,0.921479761600494,-0.180790051817894,-0.349254995584488,0.931400954723358,0.102533832192421,0.174190670251846 ,-0.475461959838867,-0.862318694591522,0.39206200838089,-0.444667458534241,-0.805331110954285,0.31203830242157 ,-0.439545303583145,-0.842277884483337,0.140872359275818,-0.399173051118851,-0.905988872051239,0.4433753490448 ,0.161547407507896,0.881657958030701,0.189128592610359,0.522824287414551,0.831194996833801,0.150548562407494 ,0.393970012664795,0.906709849834442,0.705088436603546,-0.598325669765472,-0.380600422620773,0.916756093502045 ,0.0901993364095688,0.389130234718323,0.812437415122986,-0.0575567446649075,0.580200552940369,0.647948265075684 ,-0.685174643993378,-0.332714289426804,0.189128592610359,0.522824287414551,0.831194996833801,0.4433753490448 ,0.161547407507896,0.881657958030701,0.368975192308426,0.372379690408707,0.851581275463104,-0.0639391615986824 ,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.430973529815674 ,0.546808898448944,0.717817425727844,0.368975192308426,0.372379690408707,0.851581275463104,0.812437415122986 ,-0.0575567446649075,0.580200552940369,-0.365288615226746,0.685251891613007,0.630074620246887,0.0335473045706749 ,0.692889869213104,0.720262587070465,0.114869266748428,0.74843168258667,0.653188347816467,-0.0639391615986824 ,0.658531367778778,0.749832093715668,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.41981428861618 ,-0.320506066083908,0.849135935306549,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.253998309373856 ,-0.212244898080826,0.943629682064056,0.953391134738922,-0.158550098538399,0.256724029779434,0.916560828685761 ,-0.24360553920269,0.317131847143173,0.918301284313202,-0.218417331576347,0.330176681280136,0.938150525093079 ,-0.0836314186453819,0.335975229740143,0.654802083969116,-0.347440212965012,0.67120748758316,0.164040550589561 ,0.209489807486534,0.963952660560608,0.92408949136734,-0.175655707716942,0.339416593313217,0.830892741680145 ,-0.200436040759087,0.51907867193222,0.0319873727858067,0.984376490116119,0.173146665096283,0.223836988210678 ,0.893291056156158,0.389779537916183,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.185543641448021 ,0.976534903049469,0.10933043807745,-0.0894755497574806,0.965718626976013,0.243683651089668,0.394804865121841 ,0.885042786598206,0.246634021401405,0.383488237857819,0.890466749668121,0.244960829615593,0.263491213321686 ,0.831329226493835,0.48935067653656,0.394804865121841,0.885042786598206,0.246634021401405,0.791727185249329,0.579225897789001 ,0.194075778126717,0.55004757642746,0.676443994045258,0.489766448736191,0.383488237857819,0.890466749668121,0.244960829615593 ,0.791727185249329,0.579225897789001,0.194075778126717,0.938301980495453,0.0685238614678383,0.338959902524948 ,0.858800172805786,0.271537780761719,0.434430092573166,0.55004757642746,0.676443994045258,0.489766448736191,-0.0894755497574806 ,0.965718626976013,0.243683651089668,0.263491213321686,0.831329226493835,0.48935067653656,-0.358905464410782 ,0.931329369544983,0.0617449507117271,-0.298087060451508,0.801499605178833,0.518403768539429,0.761567413806915 ,0.64221316576004,0.0870478227734566,0.685486555099487,0.727433860301971,-0.0307916849851608,0.858800172805786 ,0.271537780761719,0.434430092573166,0.947060525417328,0.264708548784256,0.181674882769585,-0.243022814393044 ,0.95173841714859,0.187440201640129,-0.358905464410782,0.931329369544983,0.0617449507117271,0.223836988210678 ,0.893291056156158,0.389779537916183,0.0319873727858067,0.984376490116119,0.173146665096283,0.0862562954425812 ,0.984675407409668,-0.151572123169899,0.259856075048447,0.961204409599304,0.0925252288579941,0.185543641448021 ,0.976534903049469,0.10933043807745,0.0825407654047012,0.994074046611786,0.0707375407218933,0.661977589130402 ,-0.708897471427917,-0.243413314223289,0.375436156988144,-0.682113528251648,-0.627510011196136,0.672621726989746 ,-0.282224327325821,-0.684053659439087,0.89782452583313,-0.295981734991074,-0.32604593038559,0.819233179092407 ,-0.572073757648468,-0.0398566573858261,0.746676325798035,-0.643010795116425,-0.17032790184021,0.939977943897247 ,-0.283478707075119,-0.189950734376907,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.954775273799896 ,-0.0549841597676277,0.292200028896332,0.835695207118988,-0.485575556755066,0.256573379039764,0.859511733055115 ,-0.505731165409088,0.0739971473813057,0.984757125377655,-0.122858062386513,0.123123273253441,0.833409249782562 ,-0.0707181841135025,0.54811304807663,0.680691421031952,-0.552797436714172,0.480701744556427,0.835695207118988 ,-0.485575556755066,0.256573379039764,0.954775273799896,-0.0549841597676277,0.292200028896332,0.527580142021179 ,-0.0869907140731812,0.845039546489716,0.430274456739426,-0.536508023738861,0.725963473320007,0.680691421031952 ,-0.552797436714172,0.480701744556427,0.833409249782562,-0.0707181841135025,0.54811304807663,0.122565753757954 ,0.118542328476906,0.98535543680191,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.253998309373856 ,-0.212244898080826,0.943629682064056,0.140111669898033,0.0783234462141991,0.987033009529114,-0.253998309373856 ,-0.212244898080826,0.943629682064056,-0.228407248854637,-0.205970659852028,0.951528370380402,0.185034364461899 ,0.0477372668683529,0.981571912765503,0.140111669898033,0.0783234462141991,0.987033009529114,-0.228407248854637 ,-0.205970659852028,0.951528370380402,-0.150304853916168,-0.209269061684608,0.966237485408783,0.275597482919693 ,0.0508149787783623,0.95992910861969,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693 ,0.0508149787783623,0.95992910861969,-0.150304853916168,-0.209269061684608,0.966237485408783,0.0832947567105293 ,-0.342013299465179,0.935996174812317,0.527580142021179,-0.0869907140731812,0.845039546489716,0.000295055127935484 ,0.143534883856773,0.98964524269104,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.141722351312637 ,-0.25363889336586,0.956860542297363,0.122565753757954,0.118542328476906,0.98535543680191,0.859511733055115,-0.505731165409088 ,0.0739971473813057,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.977083265781403,-0.21279039978981 ,-0.00533624598756433,0.984757125377655,-0.122858062386513,0.123123273253441,-0.0074951434507966,-0.537373244762421 ,-0.843311250209808,-0.0494538806378841,-0.556213021278381,-0.829566955566406,0.0646723359823227,-0.342740118503571 ,-0.937201499938965,0.216808795928955,-0.349548786878586,-0.911487579345703,0.672621726989746,-0.282224327325821 ,-0.684053659439087,0.375436156988144,-0.682113528251648,-0.627510011196136,0.0173844322562218,-0.524197161197662 ,-0.851419508457184,0.332537442445755,-0.288520336151123,-0.897872388362885,0.332537442445755,-0.288520336151123 ,-0.897872388362885,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0074951434507966,-0.537373244762421 ,-0.843311250209808,0.216808795928955,-0.349548786878586,-0.911487579345703,0.746676325798035,-0.643010795116425 ,-0.17032790184021,0.661977589130402,-0.708897471427917,-0.243413314223289,0.89782452583313,-0.295981734991074 ,-0.32604593038559,0.939977943897247,-0.283478707075119,-0.189950734376907,0.704553008079529,0.389835178852081 ,0.592987060546875,0.77562689781189,0.195846498012543,0.60003924369812,0.960910856723785,0.17212125658989,0.216851592063904 ,0.860680103302002,0.465308487415314,0.206682801246643,0.77562689781189,0.195846498012543,0.60003924369812,0.813431859016418 ,0.0690318197011948,0.577549338340759,0.980262100696564,0.00691105145961046,0.197581350803375,0.960910856723785 ,0.17212125658989,0.216851592063904,0.813431859016418,0.0690318197011948,0.577549338340759,0.80047994852066,-0.0622782073915005 ,0.596115171909332,0.929154098033905,-0.212225988507271,0.302708983421326,0.971711039543152,-0.0647541359066963 ,0.227122470736504,0.885917663574219,-0.280271381139755,0.369591504335403,0.747986078262329,-0.084919698536396 ,0.658259391784668,0.729275226593018,-0.11221731454134,0.674955487251282,0.879492223262787,-0.245268657803535 ,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.610790312290192,-0.062268540263176 ,0.789340078830719,0.493080407381058,0.0869515836238861,0.865627586841583,0.709406793117523,0.0714843049645424 ,0.701164722442627,0.747986078262329,-0.084919698536396,0.658259391784668,0.885917663574219,-0.280271381139755 ,0.369591504335403,0.929154098033905,-0.212225988507271,0.302708983421326,0.80047994852066,-0.0622782073915005 ,0.596115171909332,0.610790312290192,-0.062268540263176,0.789340078830719,0.823973476886749,-0.140763908624649 ,0.548865377902985,0.879492223262787,-0.245268657803535,0.407844007015228,0.729275226593018,-0.11221731454134 ,0.674955487251282,0.63835346698761,0.527818858623505,0.560278594493866,0.704553008079529,0.389835178852081,0.592987060546875 ,0.860680103302002,0.465308487415314,0.206682801246643,0.7801553606987,0.610978186130524,0.134399503469467,0.665781199932098 ,0.528658747673035,0.526550352573395,0.63835346698761,0.527818858623505,0.560278594493866,0.7801553606987,0.610978186130524 ,0.134399503469467,0.761567413806915,0.64221316576004,0.0870478227734566,0.895810067653656,0.254065722227097 ,-0.364657372236252,0.68595552444458,0.102393850684166,-0.720403015613556,0.960910856723785,0.17212125658989 ,0.216851592063904,0.980262100696564,0.00691105145961046,0.197581350803375,0.842455089092255,-0.136532187461853 ,-0.521179795265198,0.0516201481223106,0.961737930774689,-0.26906418800354,0.0456644557416439,0.4627845287323 ,-0.885293841362,0.585361659526825,0.51231449842453,-0.628399193286896,0.860680103302002,0.465308487415314,0.206682801246643 ,0.960910856723785,0.17212125658989,0.216851592063904,0.68595552444458,0.102393850684166,-0.720403015613556,0.810609877109528 ,0.241179883480072,-0.533613920211792,0.7801553606987,0.610978186130524,0.134399503469467,0.860680103302002,0.465308487415314 ,0.206682801246643,0.810609877109528,0.241179883480072,-0.533613920211792,0.745590567588806,0.664693832397461 ,0.047716099768877,0.761567413806915,0.64221316576004,0.0870478227734566,0.7801553606987,0.610978186130524,0.134399503469467 ,0.745590567588806,0.664693832397461,0.047716099768877,0.685486555099487,0.727433860301971,-0.0307916849851608 ,0.0745275393128395,0.431530833244324,0.899014353752136,0.550135016441345,0.461672753095627,0.695851802825928 ,0.266888707876205,0.958940505981445,0.0959352776408196,0.0482074841856956,0.963629901409149,0.262856423854828 ,-0.0702482014894485,0.80213338136673,0.592998504638672,0.0319873727858067,0.984376490116119,0.173146665096283 ,0.185543641448021,0.976534903049469,0.10933043807745,0.386715173721313,0.754913926124573,0.529675722122192,0.266888707876205 ,0.958940505981445,0.0959352776408196,0.550135016441345,0.461672753095627,0.695851802825928,0.750702619552612 ,0.512931108474731,0.416349858045578,0.393054485321045,0.919416308403015,-0.0134849762544036,0.393054485321045 ,0.919416308403015,-0.0134849762544036,0.750702619552612,0.512931108474731,0.416349858045578,0.386715173721313 ,0.754913926124573,0.529675722122192,0.259856075048447,0.961204409599304,0.0925252288579941,-0.0619851760566235 ,-0.854239583015442,0.516171097755432,-0.115733034908772,-0.588226437568665,0.800372123718262,0.123612143099308 ,-0.593166947364807,0.795533180236816,0.112480655312538,-0.860872745513916,0.496231973171234,-0.112318813800812 ,0.902268052101135,0.416289359331131,0.0113279931247234,0.923928916454315,0.382396370172501,0.107348747551441 ,0.986339747905731,-0.124940805137157,0.0320413000881672,0.998972654342651,-0.0320465676486492,-0.158927887678146 ,0.672389388084412,0.722934603691101,-0.0713663622736931,0.679935038089752,0.729791164398193,0.0113279931247234 ,0.923928916454315,0.382396370172501,-0.112318813800812,0.902268052101135,0.416289359331131,0.141376316547394 ,0.226959496736526,0.963588178157806,-0.119005374610424,0.237747848033905,0.964009165763855,-0.106734469532967 ,0.405797332525253,0.907709360122681,0.037119422107935,0.39716312289238,0.916997075080872,-0.115733034908772 ,-0.588226437568665,0.800372123718262,-0.087286576628685,-0.801884651184082,0.591068506240845,0.159164875745773 ,-0.84468400478363,0.511053323745728,0.123612143099308,-0.593166947364807,0.795533180236816,-0.0289680454879999 ,-0.984227418899536,0.17452010512352,-0.0619851760566235,-0.854239583015442,0.516171097755432,0.112480655312538 ,-0.860872745513916,0.496231973171234,0.0904572755098343,-0.981297671794891,0.169918611645699,0.037119422107935 ,0.39716312289238,0.916997075080872,-0.106734469532967,0.405797332525253,0.907709360122681,-0.0713663622736931 ,0.679935038089752,0.729791164398193,-0.158927887678146,0.672389388084412,0.722934603691101,0.155474439263344 ,0.00156243739183992,-0.987838685512543,0.19240340590477,0.354867070913315,-0.914904534816742,0.263788342475891 ,0.299328684806824,-0.916961312294006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.0482074841856956 ,0.963629901409149,0.262856423854828,0.266888707876205,0.958940505981445,0.0959352776408196,-0.266191899776459 ,0.70389860868454,-0.658535182476044,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.230260863900185 ,0.590617835521698,-0.773401916027069,0.220478102564812,0.225269511342049,-0.949022173881531,-0.0597109496593475 ,0.20538541674614,-0.976857900619507,-0.0387927554547787,0.555053651332855,-0.830909490585327,0.220478102564812 ,0.225269511342049,-0.949022173881531,0.181706041097641,0.450920969247818,-0.873872518539429,-0.0473092421889305 ,0.433387726545334,-0.899964928627014,-0.0597109496593475,0.20538541674614,-0.976857900619507,0.145952269434929 ,0.566527962684631,-0.811014175415039,0.162849396467209,0.526230156421661,-0.834602832794189,-0.0400200858712196 ,0.538817524909973,-0.841471374034882,-0.0390528962016106,0.551643908023834,-0.833164989948273,0.162849396467209 ,0.526230156421661,-0.834602832794189,0.19240340590477,0.354867070913315,-0.914904534816742,-0.0513396598398685 ,0.366866230964661,-0.928855955600739,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0672369971871376 ,-0.00775569351390004,-0.997706890106201,0.155474439263344,0.00156243739183992,-0.987838685512543,0.0690941736102104 ,-0.258630573749542,-0.963502049446106,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.055810023099184 ,-0.2584228515625,-0.964418411254883,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.0340255945920944 ,-0.412763565778732,-0.910202443599701,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696 ,-0.408616960048676,-0.912705957889557,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0445788577198982 ,-0.252718240022659,-0.966512382030487,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-8.87226342456415e-005 ,-0.255004823207855,-0.966939747333527,0.0445788577198982,-0.252718240022659,-0.966512382030487,-0.00791200343519449 ,-0.3136927485466,-0.949491560459137,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.122356586158276 ,0.987737119197845,-0.0969751328229904,0.0862562954425812,0.984675407409668,-0.151572123169899,0.0205553397536278 ,0.989267349243164,-0.144663617014885,0.0492917597293854,0.955946862697601,0.28937155008316,-0.318083673715591 ,0.947685122489929,-0.0267524290829897,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0492917597293854 ,0.955946862697601,0.28937155008316,0.0462776906788349,0.971960961818695,0.23054338991642,0.179319217801094,0.922120809555054 ,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0557159669697285,0.916767716407776 ,0.395515710115433,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.000357056385837495,-0.611226499080658 ,-0.791455626487732,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0924276784062386,-0.684463918209076 ,-0.723164081573486,-0.000515560561325401,-0.726091146469116,-0.68759822845459,-0.0101916557177901,0.912391781806946 ,0.409191101789474,0.0270950496196747,0.974490761756897,0.222785964608192,0.0419506318867207,0.986220836639404 ,0.160026773810387,0.0557159669697285,0.916767716407776,0.395515710115433,-0.0473092421889305,0.433387726545334 ,-0.899964928627014,0.181706041097641,0.450920969247818,-0.873872518539429,0.145952269434929,0.566527962684631 ,-0.811014175415039,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.020222021266818,-0.390664726495743 ,-0.920310854911804,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0458064116537571,-0.413144141435623 ,-0.909512877464294,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.000159720322699286,-0.320416629314423 ,-0.947276711463928,-0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.0494538806378841,-0.556213021278381 ,-0.829566955566406,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0513396598398685,0.366866230964661 ,-0.928855955600739,0.19240340590477,0.354867070913315,-0.914904534816742,0.155474439263344,0.00156243739183992 ,-0.987838685512543,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.353190511465073,0.114995338022709 ,0.928457081317902,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623 ,0.95992910861969,0.493080407381058,0.0869515836238861,0.865627586841583,0.307976216077805,-0.686480343341827 ,0.6587073802948,0.430274456739426,-0.536508023738861,0.725963473320007,0.0832947567105293,-0.342013299465179 ,0.935996174812317,-0.101489536464214,-0.459648072719574,0.882283091545105,0.230070114135742,-0.386967688798904 ,-0.89292985200882,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.493177682161331,0.0824330747127533 ,-0.866014182567596,0.303897142410278,-0.58835905790329,-0.749319791793823,-0.0341968536376953,-0.89968353509903 ,-0.43520113825798,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0589963421225548,-0.720462381839752 ,-0.690980017185211,-0.0373940095305443,-0.711677670478821,-0.701510190963745,-0.0297683943063021,-0.996251881122589 ,-0.0812156423926353,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0672344118356705,-0.90103155374527 ,-0.428510963916779,-0.0341968536376953,-0.89968353509903,-0.43520113825798,-0.0373940095305443,-0.711677670478821 ,-0.701510190963745,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0439913086593151,-0.675665616989136 ,-0.735894501209259,-0.0370400324463844,-0.668275535106659,-0.742991149425507,-0.0370400324463844,-0.668275535106659 ,-0.742991149425507,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.254503726959229,-0.798789858818054 ,-0.545126259326935,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.00493840174749494,0.00535354111343622 ,-0.999973475933075,-0.0351880826056004,-0.407869398593903,-0.912361979484558,0.810609877109528,0.241179883480072 ,-0.533613920211792,0.68595552444458,0.102393850684166,-0.720403015613556,0.254503726959229,-0.798789858818054 ,-0.545126259326935,0.810609877109528,0.241179883480072,-0.533613920211792,-0.0351880826056004,-0.407869398593903 ,-0.912361979484558,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.0456644557416439,0.4627845287323 ,-0.885293841362,0.00493840174749494,0.00535354111343622,-0.999973475933075,0.68595552444458,0.102393850684166 ,-0.720403015613556,0.895810067653656,0.254065722227097,-0.364657372236252,-0.0297683943063021,-0.996251881122589 ,-0.0812156423926353,-0.0289680454879999,-0.984227418899536,0.17452010512352,0.0904572755098343,-0.981297671794891 ,0.169918611645699,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0516201481223106,0.961737930774689 ,-0.26906418800354,0.132751479744911,0.960573315620422,-0.244286626577377,0.141466349363327,0.962726950645447 ,-0.230529963970184,0.107348747551441,0.986339747905731,-0.124940805137157,0.437207967042923,0.465549558401108 ,0.76948869228363,0.135901644825935,0.703174889087677,0.697908222675323,0.961316466331482,0.243311077356339,0.129113554954529 ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.961316466331482,0.243311077356339,0.129113554954529 ,0.613709151744843,-0.52058732509613,-0.593590676784515,0.464636594057083,-0.415377110242844,-0.782032430171967 ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.837648034095764,0.514832735061646,-0.182463780045509 ,0.996942400932312,0.0589848347008228,-0.051250733435154,0.464636594057083,-0.415377110242844,-0.782032430171967 ,0.442993491888046,0.219760671257973,-0.869173228740692,-0.554342925548553,0.567035973072052,0.609240651130676 ,-0.52557498216629,0.553365111351013,0.646187245845795,-0.426482230424881,0.398722440004349,0.811870276927948 ,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.484570324420929,0.164985567331314,-0.85905259847641 ,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.134134471416473,0.255289256572723,0.957515180110931 ,0.0454900041222572,0.2624471783638,0.963873505592346,0.0673762187361717,0.208747074007988,0.975646018981934 ,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.911626994609833,-0.102696627378464,0.397981941699982 ,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.386307686567307,-0.301311910152435,-0.871766865253448 ,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.229701682925224,-0.369639068841934,-0.900335550308228 ,-0.509144961833954,0.274927198886871,0.815589666366577,-0.134134471416473,0.255289256572723,0.957515180110931 ,-0.384194701910019,0.144494697451591,0.911874830722809,-0.661458969116211,-0.196823701262474,-0.723693668842316 ,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.828345477581024,-0.291038513183594,-0.478686034679413 ,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.746677756309509,-0.64300948381424,-0.170326471328735 ,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.00847726315259933,-0.531524419784546,-0.847000539302826 ,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.36091136932373,-0.689484357833862,-0.627976357936859 ,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.695569396018982,-0.386790245771408,-0.605455636978149 ,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.15230655670166,-0.395185917615891,-0.905886709690094 ,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.120519727468491,-0.475927352905273,-0.871187806129456 ,-0.426482230424881,0.398722440004349,0.811870276927948,-0.428126484155655,0.265849471092224,0.863731324672699 ,-0.338261693716049,0.297003328800201,0.892954647541046,-0.338261693716049,0.297003328800201,0.892954647541046 ,-0.428126484155655,0.265849471092224,0.863731324672699,-0.28684601187706,0.185986965894699,0.939749002456665 ,-0.887027978897095,0.338621288537979,0.313874155282974,-0.553295969963074,0.315833359956741,0.770787119865417 ,-0.877903461456299,0.125808238983154,0.462014973163605,0.203874498605728,0.632674932479858,0.747099459171295 ,0.502047836780548,0.814261257648468,0.291421681642532,0.414917647838593,0.779010057449341,0.470092207193375 ,0.0901670306921005,0.507265865802765,0.8570596575737,0.251353085041046,0.650286138057709,0.716902732849121,0.203874498605728 ,0.632674932479858,0.747099459171295,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046 ,0.650286138057709,0.716902732849121,0.502047836780548,0.814261257648468,0.291421681642532,-0.553295969963074 ,0.315833359956741,0.770787119865417,-0.426482230424881,0.398722440004349,0.811870276927948,-0.338261693716049 ,0.297003328800201,0.892954647541046,-0.509144961833954,0.274927198886871,0.815589666366577,-0.117755182087421 ,0.405977427959442,0.906264901161194,-0.134134471416473,0.255289256572723,0.957515180110931,-0.642698705196381 ,0.173675417900085,-0.746173679828644,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.498561441898346 ,0.123794674873352,-0.857969343662262,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.665653705596924 ,0.333070456981659,-0.667809247970581,-0.474711626768112,0.621306002140045,-0.623400151729584,0.0345219671726227 ,0.469873160123825,0.882058680057526,-0.362813800573349,0.452378064393997,0.814690291881561,-0.0333014093339443 ,0.336885303258896,0.940956592559814,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.621008992195129 ,-0.719995379447937,0.309765249490738,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.708229780197144 ,0.558061540126801,-0.432409435510635,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.875469923019409 ,0.442794948816299,-0.193610593676567,-0.21317532658577,0.371294349431992,0.903712749481201,-0.747875332832336 ,-0.0330392643809319,0.663016498088837,-0.347785919904709,0.133236810564995,0.928058683872223,-0.362813800573349 ,0.452378064393997,0.814690291881561,-0.598303258419037,0.575496375560761,0.557527720928192,-0.734153270721436 ,0.469748914241791,0.490260034799576,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.676061987876892 ,-0.682281494140625,0.278266310691834,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.210184469819069 ,0.149185121059418,-0.966212332248688,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.644763290882111 ,0.0604433193802834,-0.761988759040833,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.210184469819069 ,0.149185121059418,-0.966212332248688,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.0306792501360178 ,-0.0856858864426613,-0.995849788188934,-0.225950360298157,-0.351854801177979,-0.908374726772308,0.128099784255028 ,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.659405767917633 ,-0.515389144420624,-0.547318935394287,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.23223540186882 ,0.292309641838074,-0.927697062492371,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.210184469819069 ,0.149185121059418,-0.966212332248688,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.326218724250793 ,0.625610828399658,-0.70865535736084,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.639488339424133 ,-0.334312081336975,-0.692307770252228,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.828345477581024 ,-0.291038513183594,-0.478686034679413,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.374457865953445 ,-0.757000803947449,-0.535472750663757,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.687154352664948 ,-0.340534240007401,0.6417595744133,-0.249380812048912,0.181461036205292,0.951252400875092,-0.704255282878876 ,-0.136106103658676,0.696778059005737,-0.33330100774765,0.819487571716309,0.466208755970001,-0.249380812048912 ,0.181461036205292,0.951252400875092,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.656458854675293 ,0.394298911094666,0.643109738826752,-0.249380812048912,0.181461036205292,0.951252400875092,-0.33330100774765 ,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.0534899868071079 ,0.977624833583832,-0.203441679477692,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.704255282878876 ,-0.136106103658676,0.696778059005737,-0.249380812048912,0.181461036205292,0.951252400875092,-0.656458854675293 ,0.394298911094666,0.643109738826752,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.474711626768112 ,0.621306002140045,-0.623400151729584,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.662446260452271 ,-0.708414137363434,-0.243545264005661,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.197025984525681 ,-0.816609442234039,-0.542521715164185,-0.00815227441489697,0.997119009494781,0.075413390994072,0.255933493375778 ,0.96283483505249,-0.0862965509295464,-0.106476634740829,0.986019790172577,0.128170698881149,-0.761694371700287 ,0.389483571052551,0.517807185649872,-0.887027978897095,0.338621288537979,0.313874155282974,-0.877903461456299 ,0.125808238983154,0.462014973163605,0.502047836780548,0.814261257648468,0.291421681642532,0.421662032604218 ,0.906709790229797,0.00885869562625885,0.414917647838593,0.779010057449341,0.470092207193375,0.502047836780548 ,0.814261257648468,0.291421681642532,0.325284242630005,0.933813154697418,0.148940086364746,0.421662032604218 ,0.906709790229797,0.00885869562625885,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.00452618766576052 ,-0.317399501800537,-0.948281109333038,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.554342925548553 ,0.567035973072052,0.609240651130676,-0.887027978897095,0.338621288537979,0.313874155282974,-0.684342086315155 ,0.70050323009491,0.202413260936737,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.786065578460693 ,0.0604399740695953,0.61518120765686,-0.95565664768219,0.128923356533051,0.264762312173843,-0.854032337665558 ,0.444255322217941,-0.270676791667938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.874421000480652 ,0.028505390509963,-0.484329789876938,0.199702888727188,0.793615162372589,0.574711859226227,0.0534563846886158 ,0.983699679374695,0.171689838171005,0.325284242630005,0.933813154697418,0.148940086364746,-0.263717442750931 ,0.775425553321838,0.573731958866119,-0.182774692773819,0.975853502750397,0.119596734642982,-0.106476634740829 ,0.986019790172577,0.128170698881149,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.384585797786713 ,-0.351018995046616,-0.853744387626648,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.452270448207855 ,-0.555824816226959,-0.697502851486206,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.695569396018982 ,-0.386790245771408,-0.605455636978149,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.183785125613213 ,-0.564789414405823,0.80450975894928,-0.141512751579285,-0.835205972194672,0.531418025493622,0.0345219671726227 ,0.469873160123825,0.882058680057526,0.246256619691849,0.328444272279739,0.911856353282928,0.0388557612895966 ,0.393748223781586,0.918396770954132,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.430081337690353 ,-0.536487519741058,0.726093113422394,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.560725450515747 ,0.635622680187225,-0.530632436275482,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.0824920982122421 ,0.586886823177338,-0.805455684661865,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.0801405981183052 ,0.901194870471954,0.425940543413162,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.249380812048912 ,0.181461036205292,0.951252400875092,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.0534899868071079 ,0.977624833583832,-0.203441679477692,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.141158223152161 ,0.972466349601746,-0.185427963733673,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.0801405981183052 ,0.901194870471954,0.425940543413162,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0534899868071079 ,0.977624833583832,-0.203441679477692,0.665781199932098,0.528658747673035,0.526550352573395,0.545623481273651 ,0.394130259752274,0.739564955234528,0.63835346698761,0.527818858623505,0.560278594493866,0.163574278354645,0.575437486171722 ,-0.801320910453796,0.132010728120804,0.613032221794128,-0.778950989246368,0.37424498796463,0.138061463832855 ,-0.91699492931366,0.253994464874268,0.250187575817108,0.934287428855896,0.0673762187361717,0.208747074007988 ,0.975646018981934,0.0454900041222572,0.2624471783638,0.963873505592346,0.938150525093079,-0.0836314186453819 ,0.335975229740143,0.918301284313202,-0.218417331576347,0.330176681280136,0.91181892156601,-0.103688038885593 ,0.397284656763077,0.385590463876724,-0.303107500076294,-0.871461868286133,0.228939339518547,-0.370276868343353 ,-0.900267601013184,0.267562568187714,-0.479633033275604,-0.835680842399597,0.63226306438446,0.224956437945366 ,0.741375803947449,0.510494410991669,0.103201098740101,0.853665590286255,0.253994464874268,0.250187575817108 ,0.934287428855896,0.482518672943115,-0.357222050428391,-0.799730002880096,0.765287220478058,-0.345726698637009 ,-0.542962729930878,0.583753287792206,-0.402651727199554,-0.705055773258209,0.819233179092407,-0.572073757648468 ,-0.0398566573858261,0.6322380900383,-0.767571449279785,-0.10539997369051,0.746676325798035,-0.643010795116425 ,-0.17032790184021,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0854567661881447,-0.590025365352631 ,-0.802849411964417,-0.0738197043538094,-0.58150452375412,-0.810187101364136,0.526131212711334,0.493667006492615 ,-0.692444086074829,0.509015023708344,-0.485809624195099,-0.71055805683136,0.578356921672821,-0.429673582315445 ,-0.693457901477814,0.140872359275818,-0.399173051118851,-0.905988872051239,0.113550499081612,-0.486260622739792 ,-0.866404592990875,0.174190670251846,-0.475461959838867,-0.862318694591522,0.545623481273651,0.394130259752274 ,0.739564955234528,0.448167592287064,0.331256568431854,0.830310106277466,0.512751221656799,0.314961016178131 ,0.798677444458008,0.448167592287064,0.331256568431854,0.830310106277466,0.352489024400711,0.249785035848618 ,0.901864171028137,0.512751221656799,0.314961016178131,0.798677444458008,0.947060525417328,0.264708548784256 ,0.181674882769585,0.938301980495453,0.0685238614678383,0.338959902524948,0.671115279197693,0.284787148237228 ,0.684471070766449,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.298087060451508,0.801499605178833 ,0.518403768539429,-0.406122446060181,0.842904448509216,0.352954238653183,0.0572854578495026,0.523676514625549 ,0.849988996982574,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.111158438026905,0.66179496049881 ,0.74139815568924,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.406122446060181,0.842904448509216 ,0.352954238653183,-0.111158438026905,0.66179496049881,0.74139815568924,0.671115279197693,0.284787148237228,0.684471070766449 ,0.448167592287064,0.331256568431854,0.830310106277466,0.545623481273651,0.394130259752274,0.739564955234528 ,0.63226306438446,0.224956437945366,0.741375803947449,0.253994464874268,0.250187575817108,0.934287428855896,0.257902681827545 ,0.417416572570801,0.871349334716797,0.493177682161331,0.0824330747127533,-0.866014182567596,0.30552539229393 ,-0.0599766410887241,-0.950293123722076,0.418020725250244,-0.127127349376678,-0.899498343467712,0.646372437477112 ,0.650956153869629,-0.398068875074387,0.424405604600906,0.592946588993073,-0.684320271015167,0.589160740375519 ,0.293493062257767,-0.75282895565033,0.141376316547394,0.226959496736526,0.963588178157806,0.037119422107935 ,0.39716312289238,0.916997075080872,0.338892996311188,0.40640527009964,0.84852010011673,0.159164875745773,-0.84468400478363 ,0.511053323745728,0.114696279168129,-0.973567485809326,0.19751238822937,0.579905271530151,-0.813046872615814 ,-0.0516200996935368,0.652710020542145,0.543907403945923,-0.527384459972382,0.837648034095764,0.514832735061646 ,-0.182463780045509,0.442993491888046,0.219760671257973,-0.869173228740692,0.368975192308426,0.372379690408707 ,0.851581275463104,0.4433753490448,0.161547407507896,0.881657958030701,0.812437415122986,-0.0575567446649075 ,0.580200552940369,0.338892996311188,0.40640527009964,0.84852010011673,0.554449737071991,0.577977955341339,0.598771214485168 ,0.737872421741486,0.632259011268616,0.236204952001572,0.159164875745773,-0.84468400478363,0.511053323745728 ,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.663097739219666,-0.724811255931854,0.186949267983437 ,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.418020725250244,-0.127127349376678,-0.899498343467712 ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.0589214377105236,0.108213946223259,-0.99237996339798 ,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.027174474671483,-0.150700747966766,-0.988205909729004 ,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.263506501913071,-0.108145013451576,-0.958576560020447 ,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.421276032924652,-0.302525490522385,-0.854988157749176 ,0.789066255092621,-0.467570185661316,-0.398437708616257,0.54582554101944,-0.560542941093445,-0.622788965702057 ,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.027174474671483,-0.150700747966766,-0.988205909729004 ,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.424405604600906,0.592946588993073,-0.684320271015167 ,0.318493723869324,0.728740870952606,-0.606216490268707,0.266342312097549,0.6069176197052,-0.748807609081268 ,0.583753287792206,-0.402651727199554,-0.705055773258209,0.765287220478058,-0.345726698637009,-0.542962729930878 ,0.623417019844055,-0.452671766281128,-0.637526035308838,0.0439913086593151,-0.675665616989136,-0.735894501209259 ,0.647948265075684,-0.685174643993378,-0.332714289426804,0.254503726959229,-0.798789858818054,-0.545126259326935 ,0.654802083969116,-0.347440212965012,0.67120748758316,0.685809075832367,-0.12582391500473,0.716822326183319 ,0.164040550589561,0.209489807486534,0.963952660560608,0.201858729124069,0.87289696931839,0.444189012050629,-0.00299930199980736 ,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.618469655513763,0.424896746873856 ,0.661028027534485,0.201858729124069,0.87289696931839,0.444189012050629,0.164040550589561,0.209489807486534,0.963952660560608 ,0.842455089092255,-0.136532187461853,-0.521179795265198,0.92408949136734,-0.175655707716942,0.339416593313217 ,0.0516201481223106,0.961737930774689,-0.26906418800354,0.685809075832367,-0.12582391500473,0.716822326183319 ,0.618469655513763,0.424896746873856,0.661028027534485,0.164040550589561,0.209489807486534,0.963952660560608 ,0.646372437477112,0.650956153869629,-0.398068875074387,0.318493723869324,0.728740870952606,-0.606216490268707 ,0.424405604600906,0.592946588993073,-0.684320271015167,0.661977589130402,-0.708897471427917,-0.243413314223289 ,0.29490727186203,-0.85530948638916,-0.425999224185944,0.375436156988144,-0.682113528251648,-0.627510011196136 ,0.685486555099487,0.727433860301971,-0.0307916849851608,0.745590567588806,0.664693832397461,0.047716099768877 ,0.554396212100983,0.801354885101318,0.224666863679886,0.0825407654047012,0.994074046611786,0.0707375407218933 ,0.185543641448021,0.976534903049469,0.10933043807745,-0.20431387424469,0.977353155612946,-0.0551062189042568 ,0.858800172805786,0.271537780761719,0.434430092573166,0.938301980495453,0.0685238614678383,0.338959902524948 ,0.947060525417328,0.264708548784256,0.181674882769585,-0.406122446060181,0.842904448509216,0.352954238653183 ,-0.298087060451508,0.801499605178833,0.518403768539429,-0.358905464410782,0.931329369544983,0.0617449507117271 ,-0.406122446060181,0.842904448509216,0.352954238653183,-0.358905464410782,0.931329369544983,0.0617449507117271 ,-0.243022814393044,0.95173841714859,0.187440201640129,0.0646723359823227,-0.342740118503571,-0.937201499938965 ,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.00791200343519449,-0.3136927485466,-0.949491560459137 ,0.665781199932098,0.528658747673035,0.526550352573395,0.761567413806915,0.64221316576004,0.0870478227734566 ,0.947060525417328,0.264708548784256,0.181674882769585,0.971711039543152,-0.0647541359066963,0.227122470736504 ,0.980262100696564,0.00691105145961046,0.197581350803375,0.813431859016418,0.0690318197011948,0.577549338340759 ,0.895810067653656,0.254065722227097,-0.364657372236252,0.842455089092255,-0.136532187461853,-0.521179795265198 ,0.585361659526825,0.51231449842453,-0.628399193286896,-0.0702482014894485,0.80213338136673,0.592998504638672 ,-0.243022814393044,0.95173841714859,0.187440201640129,0.0319873727858067,0.984376490116119,0.173146665096283 ,0.386715173721313,0.754913926124573,0.529675722122192,0.185543641448021,0.976534903049469,0.10933043807745,0.259856075048447 ,0.961204409599304,0.0925252288579941,0.303897142410278,-0.58835905790329,-0.749319791793823,0.509015023708344 ,-0.485809624195099,-0.71055805683136,0.230070114135742,-0.386967688798904,-0.89292985200882,0.303897142410278 ,-0.58835905790329,-0.749319791793823,0.578356921672821,-0.429673582315445,-0.693457901477814,0.509015023708344 ,-0.485809624195099,-0.71055805683136,0.114696279168129,-0.973567485809326,0.19751238822937,0.159164875745773 ,-0.84468400478363,0.511053323745728,-0.087286576628685,-0.801884651184082,0.591068506240845,0.527580142021179 ,-0.0869907140731812,0.845039546489716,0.0832947567105293,-0.342013299465179,0.935996174812317,0.430274456739426 ,-0.536508023738861,0.725963473320007,0.585361659526825,0.51231449842453,-0.628399193286896,0.0456644557416439 ,0.4627845287323,-0.885293841362,0.895810067653656,0.254065722227097,-0.364657372236252,0.132751479744911,0.960573315620422 ,-0.244286626577377,0.0516201481223106,0.961737930774689,-0.26906418800354,-0.00299930199980736,0.929396331310272 ,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.0516201481223106,0.961737930774689 ,-0.26906418800354,0.92408949136734,-0.175655707716942,0.339416593313217,0.0320413000881672,0.998972654342651 ,-0.0320465676486492,0.107348747551441,0.986339747905731,-0.124940805137157,0.141466349363327,0.962726950645447 ,-0.230529963970184,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0516201481223106,0.961737930774689 ,-0.26906418800354,0.164040550589561,0.209489807486534,0.963952660560608,-0.278887689113617,0.155069842934608 ,0.947720944881439,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.0194659624248743,-0.00312843942083418 ,0.999805629253387,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.613169372081757,0.156963154673576 ,0.774200141429901,-0.564494132995605,0.336166679859161,0.753882169723511,-0.641344308853149,0.404579341411591 ,0.651914894580841,-0.636052131652832,0.114426992833614,0.763114809989929,-0.750942230224609,-0.362746059894562 ,0.551816165447235,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.630502700805664,-0.217548668384552 ,0.745076417922974,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.672568202018738,-0.34249159693718 ,0.656011819839478,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.818475067615509,-0.0781779363751411 ,0.569198310375214,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.343512952327728,0.508661150932312 ,0.789469838142395,0.00251755584031343,0.621276617050171,0.783587276935577,-0.000752673309762031,0.723128914833069 ,0.690712690353394,-0.387391060590744,0.579724550247192,0.716831684112549,-0.555378377437592,0.35284760594368 ,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.617133378982544,0.414651036262512 ,0.668738305568695,-0.642749607563019,0.417651236057281,0.642215192317963,-0.555378377437592,0.35284760594368 ,0.753029525279999,-0.642749607563019,0.417651236057281,0.642215192317963,-0.641344308853149,0.404579341411591 ,0.651914894580841,-0.564494132995605,0.336166679859161,0.753882169723511,-0.0194659624248743,-0.00312843942083418 ,0.999805629253387,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.261586844921112,-0.0964996665716171 ,0.960343718528748,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.237974777817726,0.331118106842041 ,0.913087487220764,-0.273963540792465,0.203753486275673,0.939908742904663,0.00488811917603016,0.0790495574474335 ,0.996858716011047,0.00906203780323267,0.313269138336182,0.949621140956879,-0.617133378982544,0.414651036262512 ,0.668738305568695,-0.531420171260834,0.370124280452728,0.761971533298492,-0.343512952327728,0.508661150932312 ,0.789469838142395,-0.387391060590744,0.579724550247192,0.716831684112549,-0.273963540792465,0.203753486275673 ,0.939908742904663,-0.278887689113617,0.155069842934608,0.947720944881439,-0.00995929818600416,0.0271856393665075 ,0.999580800533295,0.00488811917603016,0.0790495574474335,0.996858716011047,0.230391070246696,-0.334940761327744 ,0.913638114929199,-0.308693647384644,-0.0323835387825966,0.950610101222992,-0.363826632499695,-0.186291873455048 ,0.912647545337677,-0.1506307721138,-0.438284873962402,0.886124551296234,0.0855588167905808,-0.00326380506157875 ,0.996327757835388,0.270083338022232,0.0848804861307144,0.959088265895844,0.283566653728485,0.161925837397575 ,0.945182502269745,0.083267405629158,0.0343488194048405,0.995935082435608,0.634447515010834,0.382206737995148 ,0.671858906745911,0.563284993171692,0.310863167047501,0.765554785728455,0.58095771074295,0.129276961088181,0.803601682186127 ,0.640639364719391,0.166238233447075,0.749630630016327,0.756035923957825,-0.331106662750244,0.56460428237915 ,0.663084924221039,-0.243456080555916,0.707847118377686,0.597107112407684,-0.194828405976295,0.778142035007477 ,0.672916948795319,-0.2681784927845,0.689393281936646,0.865743160247803,-0.106940761208534,0.488929957151413 ,0.758550822734833,-0.0895375981926918,0.645432889461517,0.763749420642853,-0.150436565279961,0.627738535404205 ,0.980335772037506,-0.188939213752747,-0.056953851133585,-0.0552290044724941,-0.859539985656738,0.508075475692749 ,0.352704226970673,-0.858029365539551,-0.373343408107758,0.396026074886322,-0.763220906257629,0.510545969009399 ,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.000752673309762031,0.723128914833069,0.690712690353394 ,0.00251755584031343,0.621276617050171,0.783587276935577,0.349495083093643,0.501587808132172,0.791367709636688 ,0.386756360530853,0.580943465232849,0.716187238693237,0.55474841594696,0.352636069059372,0.753592729568481,0.642712593078613 ,0.417624264955521,0.642269790172577,0.6171053647995,0.41465026140213,0.668764650821686,0.533473014831543,0.369999885559082 ,0.760596215724945,0.634447515010834,0.382206737995148,0.671858906745911,0.642712593078613,0.417624264955521 ,0.642269790172577,0.55474841594696,0.352636069059372,0.753592729568481,0.563284993171692,0.310863167047501,0.765554785728455 ,0.269184499979019,-0.069842740893364,0.96055281162262,0.270083338022232,0.0848804861307144,0.959088265895844 ,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.095149926841259,-0.00452130474150181,0.995452702045441 ,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757 ,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.323701471090317,-0.00802869722247124,0.946125209331512 ,0.205443143844604,0.26053661108017,0.943352401256561,0.00906203780323267,0.313269138336182,0.949621140956879 ,0.00488811917603016,0.0790495574474335,0.996858716011047,0.0908891633152962,0.0803348198533058,0.992615461349487 ,0.349495083093643,0.501587808132172,0.791367709636688,0.533473014831543,0.369999885559082,0.760596215724945 ,0.6171053647995,0.41465026140213,0.668764650821686,0.386756360530853,0.580943465232849,0.716187238693237,0.0908891633152962 ,0.0803348198533058,0.992615461349487,0.00488811917603016,0.0790495574474335,0.996858716011047,-0.00995929818600416 ,0.0271856393665075,0.999580800533295,0.083267405629158,0.0343488194048405,0.995935082435608,0.681668698787689 ,-0.471610575914383,-0.559384763240814,0.980335772037506,-0.188939213752747,-0.056953851133585,0.763749420642853 ,-0.150436565279961,0.627738535404205,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437 ,-0.288532286882401,0.858965337276459,0.34773051738739,-0.0993074625730515,0.932320535182953,-0.20400233566761 ,0.056657962501049,0.97732949256897,0.231048971414566,-0.393600910902023,0.889772295951843,0.663369238376617 ,-0.460236370563507,0.590020060539246,0.396026074886322,-0.763220906257629,0.510545969009399,0.352704226970673 ,-0.858029365539551,-0.373343408107758,0.681668698787689,-0.471610575914383,-0.559384763240814,-0.186641603708267 ,-0.111381784081459,0.976093769073486,0.269184499979019,-0.069842740893364,0.96055281162262,0.0906060114502907 ,0.000123244855785742,0.99588680267334,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.0486040636897087 ,-0.42794406414032,0.902497410774231,-0.132798001170158,0.175962328910828,0.975398361682892,-0.434367448091507 ,0.0498845726251602,0.899353325366974,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.312857300043106 ,-0.0701114386320114,0.947208881378174,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.757822096347809 ,-0.00610118778422475,0.652432680130005,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.0225364938378334 ,-0.576714694499969,0.816634714603424,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.385932207107544 ,-0.757268369197845,-0.526878535747528,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.764558732509613 ,-0.46812915802002,-0.443063259124756,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.312857300043106 ,-0.0701114386320114,0.947208881378174,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.227696925401688 ,-0.449939787387848,0.863544046878815,-0.398337602615356,0.261720597743988,0.879107236862183,-0.312857300043106 ,-0.0701114386320114,0.947208881378174,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.385932207107544 ,-0.757268369197845,-0.526878535747528,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.494366526603699 ,-0.309805452823639,0.812171339988709,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.545051276683807 ,-0.206261366605759,0.812634825706482,-0.398337602615356,0.261720597743988,0.879107236862183,-0.664829790592194 ,0.592853784561157,0.454451024532318,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.398337602615356 ,0.261720597743988,0.879107236862183,-0.545051276683807,-0.206261366605759,0.812634825706482,0.462544351816177 ,-0.573750495910645,0.675916492938995,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.373196601867676 ,-0.775050580501556,0.509922385215759,0.462544351816177,-0.573750495910645,0.675916492938995,-0.545051276683807 ,-0.206261366605759,0.812634825706482,-0.789819777011871,-0.316357046365738,0.525454998016357,0.373196601867676 ,-0.775050580501556,0.509922385215759,0.692745566368103,-0.565952122211456,0.446991920471191,0.828352034091949 ,-0.389868885278702,0.402287393808365,0.462544351816177,-0.573750495910645,0.675916492938995,0.462544351816177 ,-0.573750495910645,0.675916492938995,0.243750929832459,-0.884264886379242,0.398322850465775,-0.241606667637825 ,-0.822853565216064,0.514332830905914,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.398337602615356 ,0.261720597743988,0.879107236862183,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.841920852661133 ,-0.371541500091553,0.391313314437866,-0.889869391918182,0.231929391622543,0.39286282658577,-0.664829790592194 ,0.592853784561157,0.454451024532318,-0.398337602615356,0.261720597743988,0.879107236862183,-0.49268251657486 ,0.733969807624817,0.467495709657669,-0.434220999479294,0.787271618843079,0.437784820795059,-0.775861084461212 ,-0.47871196269989,0.410943329334259,-0.664829790592194,0.592853784561157,0.454451024532318,-0.824626564979553 ,0.277553707361221,0.492904603481293,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.789819777011871 ,-0.316357046365738,0.525454998016357,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.883911490440369 ,0.0454356893897057,0.465441823005676,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.789819777011871 ,-0.316357046365738,0.525454998016357,-0.627400159835815,-0.604899108409882,0.490373462438583,0.0565900318324566 ,-0.86772346496582,0.493815332651138,0.373196601867676,-0.775050580501556,0.509922385215759,0.0855588167905808 ,-0.00326380506157875,0.996327757835388,0.083267405629158,0.0343488194048405,0.995935082435608,-0.00995929818600416 ,0.0271856393665075,0.999580800533295,-0.0194659624248743,-0.00312843942083418,0.999805629253387,0.095149926841259 ,-0.00452130474150181,0.995452702045441,0.0855588167905808,-0.00326380506157875,0.996327757835388,-0.0194659624248743 ,-0.00312843942083418,0.999805629253387,-0.041683241724968,-0.0278020035475492,0.998744010925293,0.264413386583328 ,0.205984830856323,0.942154884338379,0.0908891633152962,0.0803348198533058,0.992615461349487,0.083267405629158 ,0.0343488194048405,0.995935082435608,0.283566653728485,0.161925837397575,0.945182502269745,-0.170626193284988 ,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.552981913089752 ,0.0302376579493284,0.832644402980804,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.132798001170158 ,0.175962328910828,0.975398361682892,-0.0486040636897087,-0.42794406414032,0.902497410774231,0.231048971414566 ,-0.393600910902023,0.889772295951843,-0.20400233566761,0.056657962501049,0.97732949256897,-0.775861084461212 ,-0.47871196269989,0.410943329334259,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.684404134750366 ,-0.533953189849854,0.496472477912903,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.054779440164566 ,-0.293895661830902,0.954266488552094,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.308693647384644 ,-0.0323835387825966,0.950610101222992,0.243585184216499,-0.228214547038078,0.942647516727448,-0.883911490440369 ,0.0454356893897057,0.465441823005676,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.403701454401016 ,-0.278951406478882,0.87132728099823,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.586991429328918 ,-0.31607523560524,0.745343863964081,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.225288927555084 ,-0.849879503250122,0.476392418146133,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.213104128837585 ,-0.584437012672424,0.782955944538116,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.672568202018738 ,-0.34249159693718,0.656011819839478,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.261586844921112 ,-0.0964996665716171,0.960343718528748,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.749688327312469 ,-0.105248801410198,0.653368294239044,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.758550822734833 ,-0.0895375981926918,0.645432889461517,0.672916948795319,-0.2681784927845,0.689393281936646,0.269184499979019 ,-0.069842740893364,0.96055281162262,0.403341591358185,-0.0460353009402752,0.913890719413757,0.662317752838135 ,-0.689115524291992,0.294032365083694,0.828352034091949,-0.389868885278702,0.402287393808365,0.230391070246696 ,-0.334940761327744,0.913638114929199,0.243750929832459,-0.884264886379242,0.398322850465775,-0.430613458156586 ,-0.0293598677963018,0.902058780193329,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.564494132995605 ,0.336166679859161,0.753882169723511,-0.613169372081757,0.156963154673576,0.774200141429901,-0.664681375026703 ,-0.304605394601822,0.682212769985199,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.430613458156586 ,-0.0293598677963018,0.902058780193329,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.237974777817726 ,0.331118106842041,0.913087487220764,0.00906203780323267,0.313269138336182,0.949621140956879,0.00251755584031343 ,0.621276617050171,0.783587276935577,-0.343512952327728,0.508661150932312,0.789469838142395,-0.25699707865715 ,0.0964793935418129,0.961584210395813,-0.278887689113617,0.155069842934608,0.947720944881439,-0.555378377437592 ,0.35284760594368,0.753029525279999,-0.564494132995605,0.336166679859161,0.753882169723511,-0.278887689113617 ,0.155069842934608,0.947720944881439,-0.273963540792465,0.203753486275673,0.939908742904663,-0.531420171260834 ,0.370124280452728,0.761971533298492,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834 ,0.370124280452728,0.761971533298492,-0.273963540792465,0.203753486275673,0.939908742904663,-0.237974777817726 ,0.331118106842041,0.913087487220764,-0.343512952327728,0.508661150932312,0.789469838142395,0.563284993171692 ,0.310863167047501,0.765554785728455,0.270083338022232,0.0848804861307144,0.959088265895844,0.428336501121521 ,-0.0297424420714378,0.903129696846008,0.58095771074295,0.129276961088181,0.803601682186127,0.428336501121521 ,-0.0297424420714378,0.903129696846008,0.269184499979019,-0.069842740893364,0.96055281162262,0.672916948795319 ,-0.2681784927845,0.689393281936646,0.597107112407684,-0.194828405976295,0.778142035007477,0.00251755584031343 ,0.621276617050171,0.783587276935577,0.00906203780323267,0.313269138336182,0.949621140956879,0.205443143844604 ,0.26053661108017,0.943352401256561,0.349495083093643,0.501587808132172,0.791367709636688,0.55474841594696,0.352636069059372 ,0.753592729568481,0.283566653728485,0.161925837397575,0.945182502269745,0.270083338022232,0.0848804861307144 ,0.959088265895844,0.563284993171692,0.310863167047501,0.765554785728455,0.34773051738739,-0.0993074625730515 ,0.932320535182953,0.422998309135437,-0.288532286882401,0.858965337276459,0.663369238376617,-0.460236370563507 ,0.590020060539246,0.763749420642853,-0.150436565279961,0.627738535404205,0.396026074886322,-0.763220906257629 ,0.510545969009399,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401 ,0.858965337276459,0.231048971414566,-0.393600910902023,0.889772295951843,0.533473014831543,0.369999885559082 ,0.760596215724945,0.264413386583328,0.205984830856323,0.942154884338379,0.283566653728485,0.161925837397575 ,0.945182502269745,0.55474841594696,0.352636069059372,0.753592729568481,-0.867058575153351,-0.260521769523621 ,0.424662053585052,-0.824626564979553,0.277553707361221,0.492904603481293,-0.323701471090317,-0.00802869722247124 ,0.946125209331512,-0.186641603708267,-0.111381784081459,0.976093769073486,0.205443143844604,0.26053661108017 ,0.943352401256561,0.264413386583328,0.205984830856323,0.942154884338379,0.533473014831543,0.369999885559082 ,0.760596215724945,0.349495083093643,0.501587808132172,0.791367709636688,-0.434220999479294,0.787271618843079 ,0.437784820795059,-0.49268251657486,0.733969807624817,0.467495709657669,-0.307226657867432,0.378487527370453 ,0.873131692409515,-0.132798001170158,0.175962328910828,0.975398361682892,-0.89117294549942,0.00654474506154656 ,0.453616559505463,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.552981913089752,0.0302376579493284 ,0.832644402980804,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0565900318324566,-0.86772346496582 ,0.493815332651138,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.20392233133316,-0.215887486934662 ,0.954886496067047,-0.054779440164566,-0.293895661830902,0.954266488552094,0.828352034091949,-0.389868885278702 ,0.402287393808365,0.692745566368103,-0.565952122211456,0.446991920471191,0.243585184216499,-0.228214547038078 ,0.942647516727448,0.230391070246696,-0.334940761327744,0.913638114929199,0.403341591358185,-0.0460353009402752 ,0.913890719413757,0.34773051738739,-0.0993074625730515,0.932320535182953,0.763749420642853,-0.150436565279961 ,0.627738535404205,0.758550822734833,-0.0895375981926918,0.645432889461517,-0.483883440494537,-0.269137471914291 ,0.832719504833221,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.889869391918182,0.231929391622543 ,0.39286282658577,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.749688327312469,-0.105248801410198 ,0.653368294239044,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.363826632499695,-0.186291873455048 ,0.912647545337677,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243750929832459,-0.884264886379242 ,0.398322850465775,0.230391070246696,-0.334940761327744,0.913638114929199,-0.1506307721138,-0.438284873962402 ,0.886124551296234,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.403701454401016,-0.278951406478882 ,0.87132728099823,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.624233663082123,-0.653565049171448 ,0.428001224994659,-0.170626193284988,-0.221982836723328,0.960005402565002,0.231048971414566,-0.393600910902023 ,0.889772295951843,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.225288927555084,-0.849879503250122 ,0.476392418146133,0.396026074886322,-0.763220906257629,0.510545969009399,-0.054779440164566,-0.293895661830902 ,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,0.692745566368103,-0.565952122211456 ,0.446991920471191,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.624233663082123,-0.653565049171448 ,0.428001224994659,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.186641603708267,-0.111381784081459 ,0.976093769073486,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297 ,0.955521821975708,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.627400159835815,-0.604899108409882 ,0.490373462438583,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.307226657867432,0.378487527370453 ,0.873131692409515,-0.49268251657486,0.733969807624817,0.467495709657669,-0.889869391918182,0.231929391622543 ,0.39286282658577,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.841920852661133,-0.371541500091553 ,0.391313314437866,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.0486040636897087,-0.42794406414032 ,0.902497410774231,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434220999479294,0.787271618843079 ,0.437784820795059,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20400233566761,0.056657962501049 ,0.97732949256897,-0.824626564979553,0.277553707361221,0.492904603481293,-0.363826632499695,-0.186291873455048 ,0.912647545337677,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.241606667637825,-0.822853565216064 ,0.514332830905914,-0.1506307721138,-0.438284873962402,0.886124551296234,0.095149926841259,-0.00452130474150181 ,0.995452702045441,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.20392233133316,-0.215887486934662 ,0.954886496067047,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.613169372081757,0.156963154673576 ,0.774200141429901,-0.636052131652832,0.114426992833614,0.763114809989929,-0.651766121387482,-0.189316362142563 ,0.734411418437958,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.749688327312469,-0.105248801410198 ,0.653368294239044,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.750942230224609,-0.362746059894562 ,0.551816165447235,-0.818475067615509,-0.0781779363751411,0.569198310375214,0.640639364719391,0.166238233447075 ,0.749630630016327,0.58095771074295,0.129276961088181,0.803601682186127,0.597107112407684,-0.194828405976295 ,0.778142035007477,0.663084924221039,-0.243456080555916,0.707847118377686,0.756035923957825,-0.331106662750244 ,0.56460428237915,0.672916948795319,-0.2681784927845,0.689393281936646,0.758550822734833,-0.0895375981926918 ,0.645432889461517,0.865743160247803,-0.106940761208534,0.488929957151413,-0.398337602615356,0.261720597743988 ,0.879107236862183,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.0225364938378334,-0.576714694499969 ,0.816634714603424,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.000114999507786706,0.00247487379238009 ,-0.999996960163116,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.385932207107544,-0.757268369197845 ,-0.526878535747528,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.000114999507786706,0.00247487379238009 ,-0.999996960163116,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.352704226970673,-0.858029365539551 ,-0.373343408107758,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.636052131652832,0.114426992833614 ,0.763114809989929,-0.504159510135651,-0.0417646616697311,0.862600088119507,-0.651766121387482,-0.189316362142563 ,0.734411418437958,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.261586844921112,-0.0964996665716171 ,0.960343718528748,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.041683241724968,-0.0278020035475492 ,0.998744010925293,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.054779440164566,-0.293895661830902 ,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,-0.308693647384644,-0.0323835387825966 ,0.950610101222992,0.230391070246696,-0.334940761327744,0.913638114929199,0.428336501121521,-0.0297424420714378 ,0.903129696846008,0.270083338022232,0.0848804861307144,0.959088265895844,0.269184499979019,-0.069842740893364 ,0.96055281162262,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.20400233566761,0.056657962501049 ,0.97732949256897,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752 ,0.913890719413757,0.269184499979019,-0.069842740893364,0.96055281162262,-0.186641603708267,-0.111381784081459 ,0.976093769073486,-0.307226657867432,0.378487527370453,0.873131692409515,-0.434367448091507,0.0498845726251602 ,0.899353325366974,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20392233133316,-0.215887486934662 ,0.954886496067047,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.054779440164566,-0.293895661830902 ,0.954266488552094,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.697269201278687,-0.168340444564819 ,0.696761846542358,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.0908891633152962,0.0803348198533058 ,0.992615461349487,0.264413386583328,0.205984830856323,0.942154884338379,0.205443143844604,0.26053661108017,0.943352401256561 ,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.294902235269547,-0.00327466218732297,0.955521821975708 ,-0.170626193284988,-0.221982836723328,0.960005402565002,0.0906060114502907,0.000123244855785742,0.99588680267334 ,0.269184499979019,-0.069842740893364,0.96055281162262,0.095149926841259,-0.00452130474150181,0.995452702045441 ,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.0383354164659977,-0.957559168338776,-0.285676121711731 ,0.352704226970673,-0.858029365539551,-0.373343408107758,-0.818475067615509,-0.0781779363751411,0.569198310375214 ,-0.757822096347809,-0.00610118778422475,0.652432680130005,-0.697269201278687,-0.168340444564819,0.696761846542358 ,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0906060114502907,0.000123244855785742,0.99588680267334 ,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0565900318324566,-0.86772346496582,0.493815332651138 ,0.692745566368103,-0.565952122211456,0.446991920471191,0.373196601867676,-0.775050580501556,0.509922385215759 ,-0.889869391918182,0.231929391622543,0.39286282658577,-0.49268251657486,0.733969807624817,0.467495709657669 ,-0.398337602615356,0.261720597743988,0.879107236862183,-0.434220999479294,0.787271618843079,0.437784820795059 ,-0.824626564979553,0.277553707361221,0.492904603481293,-0.664829790592194,0.592853784561157,0.454451024532318 ,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.627400159835815,-0.604899108409882,0.490373462438583 ,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.867058575153351,-0.260521769523621,0.424662053585052 ,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.775861084461212,-0.47871196269989,0.410943329334259 ,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.824626564979553,0.277553707361221,0.492904603481293 ,-0.20400233566761,0.056657962501049,0.97732949256897,0.462544351816177,-0.573750495910645,0.675916492938995 ,0.662317752838135,-0.689115524291992,0.294032365083694,0.243750929832459,-0.884264886379242,0.398322850465775 ,0.828352034091949,-0.389868885278702,0.402287393808365,0.662317752838135,-0.689115524291992,0.294032365083694 ,0.462544351816177,-0.573750495910645,0.675916492938995,-0.883911490440369,0.0454356893897057,0.465441823005676 ,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.684404134750366,-0.533953189849854,0.496472477912903 ,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.462544351816177,-0.573750495910645,0.675916492938995 ,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.430613458156586,-0.0293598677963018,0.902058780193329 ,-0.613169372081757,0.156963154673576,0.774200141429901,-0.630502700805664,-0.217548668384552,0.745076417922974 ,0.428336501121521,-0.0297424420714378,0.903129696846008,0.597107112407684,-0.194828405976295,0.778142035007477 ,0.58095771074295,0.129276961088181,0.803601682186127,-0.0552290044724941,-0.859539985656738,0.508075475692749 ,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0225364938378334,-0.576714694499969,0.816634714603424 ,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.0225364938378334,-0.576714694499969,0.816634714603424 ,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.980335772037506,-0.188939213752747,-0.056953851133585 ,0.681668698787689,-0.471610575914383,-0.559384763240814,0.00490783946588635,0.00122942065354437,-0.999987185001373 ,0.681668698787689,-0.471610575914383,-0.559384763240814,0.352704226970673,-0.858029365539551,-0.373343408107758 ,0.00490783946588635,0.00122942065354437,-0.999987185001373,-0.764558732509613,-0.46812915802002,-0.443063259124756 ,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.00530534936115146,0.00112179282587022,-0.99998527765274 ,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.764558732509613,-0.46812915802002,-0.443063259124756 ,-0.00530534936115146,0.00112179282587022,-0.99998527765274,0.0223364941775799,-0.576743245124817,-0.816620051860809 ,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.838969886302948,-0.5302734375,0.122227653861046,-0.130363821983337 ,-0.434679388999939,-0.89109992980957,0.381297171115875,-0.692393600940704,-0.612538635730743,0.680035650730133 ,-0.698283791542053,-0.223497807979584,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.540568292140961 ,-0.817409574985504,0.199066668748856,0.727542281150818,-0.685412287712097,0.0298695731908083,-0.470319867134094 ,-0.882218599319458,-0.0221261866390705,-0.452180773019791,-0.878205716609955,0.155843734741211,0.680035650730133 ,-0.698283791542053,-0.223497807979584,0.683449149131775,-0.689567506313324,0.239570155739784,-0.449864596128464 ,-0.877300322055817,-0.167230501770973,-0.470319867134094,-0.882218599319458,-0.0221261866390705,0.727542281150818 ,-0.685412287712097,0.0298695731908083,0.598632395267487,-0.692815542221069,0.402052044868469,-0.421292394399643 ,-0.875049769878387,-0.238328784704208,-0.449864596128464,-0.877300322055817,-0.167230501770973,0.683449149131775 ,-0.689567506313324,0.239570155739784,0.312898457050323,-0.30317035317421,0.900101244449615,-0.108442008495331 ,0.0180171951651573,0.993939459323883,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.0551113523542881 ,-0.341195195913315,0.938375473022461,0.365167140960693,-0.260313987731934,-0.893806219100952,0.123946145176888 ,-0.156060710549355,-0.979939997196198,0.376559227705002,0.0804113894701004,-0.922896087169647,0.702634871006012 ,0.155434265732765,-0.694366157054901,0.91601550579071,-0.263128757476807,-0.302785158157349,0.670127213001251 ,-0.275791883468628,-0.6891068816185,0.806311964988709,0.228450000286102,-0.545592904090881,0.915866374969482 ,0.261728912591934,-0.304444909095764,0.966503024101257,-0.253703832626343,0.0388099141418934,0.91601550579071 ,-0.263128757476807,-0.302785158157349,0.915866374969482,0.261728912591934,-0.304444909095764,0.966637134552002 ,0.25298011302948,0.0401717498898506,0.913093268871307,-0.252991795539856,0.319774568080902,0.966503024101257 ,-0.253703832626343,0.0388099141418934,0.966637134552002,0.25298011302948,0.0401717498898506,0.914951086044312 ,0.242541939020157,0.322549074888229,0.79538756608963,-0.253331542015076,0.550619423389435,0.913093268871307 ,-0.252991795539856,0.319774568080902,0.914951086044312,0.242541939020157,0.322549074888229,0.789637267589569 ,0.246989637613297,0.561666369438171,0.763365149497986,-0.125001043081284,0.633757352828979,0.79538756608963 ,-0.253331542015076,0.550619423389435,0.789637267589569,0.246989637613297,0.561666369438171,0.419073313474655 ,0.202598944306374,0.885060012340546,0.661575853824615,0.331751018762589,-0.672501742839813,0.623564124107361 ,0.781771123409271,0.00130499247461557,0.796620786190033,0.575817584991455,-0.183927938342094,0.66670024394989 ,0.432952612638474,-0.606681823730469,0.42945009469986,0.892923653125763,-0.135129347443581,0.647005915641785 ,0.732552111148834,-0.211543783545494,0.688613891601563,0.692343652248383,-0.215571701526642,0.623564124107361 ,0.781771123409271,0.00130499247461557,0.42945009469986,0.892923653125763,-0.135129347443581,0.452374219894409 ,0.89155113697052,0.0222298968583345,0.689587533473969,0.723532259464264,0.0311464741826057,0.647005915641785 ,0.732552111148834,-0.211543783545494,0.452374219894409,0.89155113697052,0.0222298968583345,0.471769779920578 ,0.864407062530518,0.173878565430641,0.6768958568573,0.69471287727356,0.243281871080399,0.689587533473969,0.723532259464264 ,0.0311464741826057,0.471769779920578,0.864407062530518,0.173878565430641,0.407848834991455,0.861259400844574 ,0.303136229515076,0.582376599311829,0.69311785697937,0.424764811992645,0.6768958568573,0.69471287727356,0.243281871080399 ,0.598632395267487,-0.692815542221069,0.402052044868469,0.757855832576752,-0.532335162162781,0.37719202041626 ,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.421292394399643,-0.875049769878387,-0.238328784704208 ,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.108442008495331,0.0180171951651573,0.993939459323883 ,0.532896935939789,0.0133537920191884,0.846074759960175,0.419073313474655,0.202598944306374,0.885060012340546 ,0.407848834991455,0.861259400844574,0.303136229515076,0.135122209787369,0.838861703872681,0.527307271957397 ,0.315021455287933,0.667639553546906,0.674550950527191,0.582376599311829,0.69311785697937,0.424764811992645,-0.949683308601379 ,-0.00300553464330733,-0.313197374343872,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.480726420879364 ,-0.269600003957748,0.834396779537201,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.949683308601379 ,-0.00300553464330733,-0.313197374343872,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.515409469604492 ,0.101915791630745,0.850862085819244,-0.683583498001099,0.133054658770561,0.71764200925827,-0.362329810857773 ,0.579764425754547,0.729787826538086,-0.633079648017883,0.295362114906311,0.71552175283432,-0.448814660310745 ,0.224063515663147,0.865078568458557,-0.152529567480087,0.450641930103302,0.87957751750946,-0.226269230246544 ,-0.722853541374207,-0.652904987335205,0.171032205224037,-0.919270157814026,0.354528367519379,-0.198421195149422 ,-0.758837580680847,0.620318114757538,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0536522269248962 ,-0.227453172206879,-0.97230988740921,0.967476725578308,-0.220996707677841,0.12308245152235,0.935926675796509 ,-0.349802911281586,0.040978018194437,0.577395439147949,-0.441121131181717,-0.687041938304901,0.806311964988709 ,0.228450000286102,-0.545592904090881,0.670127213001251,-0.275791883468628,-0.6891068816185,0.365167140960693 ,-0.260313987731934,-0.893806219100952,0.702634871006012,0.155434265732765,-0.694366157054901,0.381297171115875 ,-0.692393600940704,-0.612538635730743,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.685902893543243 ,-0.71078634262085,0.155948713421822,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.257767707109451 ,-0.179750084877014,-0.949339628219604,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.550249099731445 ,0.0241546873003244,-0.834651112556458,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.151356309652328 ,0.151358395814896,-0.976822376251221,0.129860803484917,0.240213453769684,-0.961994647979736,-0.246528506278992 ,0.0864357575774193,-0.965273320674896,-0.476255148649216,0.154200553894043,-0.865680813789368,0.585507750511169 ,-0.785169541835785,0.201716393232346,0.171032205224037,-0.919270157814026,0.354528367519379,-0.226269230246544 ,-0.722853541374207,-0.652904987335205,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.842067956924438 ,-0.0588998831808567,0.536145865917206,0.532896935939789,0.0133537920191884,0.846074759960175,0.752812325954437 ,-0.289424031972885,0.591191411018372,0.883874535560608,-0.163575857877731,0.438188046216965,0.532896935939789 ,0.0133537920191884,0.846074759960175,0.763365149497986,-0.125001043081284,0.633757352828979,0.419073313474655 ,0.202598944306374,0.885060012340546,-0.207103610038757,-0.83615118265152,-0.507896959781647,0.757855832576752 ,-0.532335162162781,0.37719202041626,0.967476725578308,-0.220996707677841,0.12308245152235,-0.0536522269248962 ,-0.227453172206879,-0.97230988740921,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.873431265354156 ,-0.446991860866547,0.193173810839653,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.198421195149422 ,-0.758837580680847,0.620318114757538,0.935926675796509,-0.349802911281586,0.040978018194437,0.585507750511169 ,-0.785169541835785,0.201716393232346,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.577395439147949 ,-0.441121131181717,-0.687041938304901,0.365167140960693,-0.260313987731934,-0.893806219100952,0.0223364941775799 ,-0.576743245124817,-0.816620051860809,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.123946145176888 ,-0.156060710549355,-0.979939997196198,0.670127213001251,-0.275791883468628,-0.6891068816185,0.91601550579071 ,-0.263128757476807,-0.302785158157349,0.680035650730133,-0.698283791542053,-0.223497807979584,0.381297171115875 ,-0.692393600940704,-0.612538635730743,0.966503024101257,-0.253703832626343,0.0388099141418934,0.727542281150818 ,-0.685412287712097,0.0298695731908083,0.680035650730133,-0.698283791542053,-0.223497807979584,0.91601550579071 ,-0.263128757476807,-0.302785158157349,0.966503024101257,-0.253703832626343,0.0388099141418934,0.913093268871307 ,-0.252991795539856,0.319774568080902,0.683449149131775,-0.689567506313324,0.239570155739784,0.727542281150818 ,-0.685412287712097,0.0298695731908083,0.913093268871307,-0.252991795539856,0.319774568080902,0.79538756608963 ,-0.253331542015076,0.550619423389435,0.598632395267487,-0.692815542221069,0.402052044868469,0.683449149131775 ,-0.689567506313324,0.239570155739784,0.79538756608963,-0.253331542015076,0.550619423389435,0.763365149497986 ,-0.125001043081284,0.633757352828979,0.757855832576752,-0.532335162162781,0.37719202041626,0.598632395267487 ,-0.692815542221069,0.402052044868469,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.303164839744568 ,0.00688559422269464,-0.952913224697113,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.123946145176888 ,-0.156060710549355,-0.979939997196198,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.129860803484917 ,0.240213453769684,-0.961994647979736,0.376559227705002,0.0804113894701004,-0.922896087169647,0.0183170828968287 ,-0.00617978628724813,-0.999813139438629,0.796620786190033,0.575817584991455,-0.183927938342094,0.702634871006012 ,0.155434265732765,-0.694366157054901,0.376559227705002,0.0804113894701004,-0.922896087169647,0.66670024394989 ,0.432952612638474,-0.606681823730469,0.647005915641785,0.732552111148834,-0.211543783545494,0.915866374969482 ,0.261728912591934,-0.304444909095764,0.806311964988709,0.228450000286102,-0.545592904090881,0.688613891601563 ,0.692343652248383,-0.215571701526642,0.647005915641785,0.732552111148834,-0.211543783545494,0.689587533473969 ,0.723532259464264,0.0311464741826057,0.966637134552002,0.25298011302948,0.0401717498898506,0.915866374969482 ,0.261728912591934,-0.304444909095764,0.689587533473969,0.723532259464264,0.0311464741826057,0.6768958568573 ,0.69471287727356,0.243281871080399,0.914951086044312,0.242541939020157,0.322549074888229,0.966637134552002,0.25298011302948 ,0.0401717498898506,0.6768958568573,0.69471287727356,0.243281871080399,0.582376599311829,0.69311785697937,0.424764811992645 ,0.789637267589569,0.246989637613297,0.561666369438171,0.914951086044312,0.242541939020157,0.322549074888229 ,0.582376599311829,0.69311785697937,0.424764811992645,0.315021455287933,0.667639553546906,0.674550950527191,0.419073313474655 ,0.202598944306374,0.885060012340546,0.789637267589569,0.246989637613297,0.561666369438171,-0.512385308742523 ,0.0120415911078453,0.858671247959137,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.201268136501312 ,-0.0940669924020767,0.975009024143219,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.515409469604492 ,0.101915791630745,0.850862085819244,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.108442008495331 ,0.0180171951651573,0.993939459323883,-0.185590207576752,0.0829386487603188,0.979120790958405,0.419073313474655 ,0.202598944306374,0.885060012340546,-0.152529567480087,0.450641930103302,0.87957751750946,-0.448814660310745 ,0.224063515663147,0.865078568458557,-0.185590207576752,0.0829386487603188,0.979120790958405,0.171032205224037 ,-0.919270157814026,0.354528367519379,0.312898457050323,-0.30317035317421,0.900101244449615,-0.0551113523542881 ,-0.341195195913315,0.938375473022461,-0.198421195149422,-0.758837580680847,0.620318114757538,0.967476725578308 ,-0.220996707677841,0.12308245152235,0.842067956924438,-0.0588998831808567,0.536145865917206,0.883874535560608 ,-0.163575857877731,0.438188046216965,0.935926675796509,-0.349802911281586,0.040978018194437,0.670127213001251 ,-0.275791883468628,-0.6891068816185,0.381297171115875,-0.692393600940704,-0.612538635730743,0.0223364941775799 ,-0.576743245124817,-0.816620051860809,0.365167140960693,-0.260313987731934,-0.893806219100952,0.688613891601563 ,0.692343652248383,-0.215571701526642,0.806311964988709,0.228450000286102,-0.545592904090881,0.702634871006012 ,0.155434265732765,-0.694366157054901,0.796620786190033,0.575817584991455,-0.183927938342094,0.171032205224037 ,-0.919270157814026,0.354528367519379,0.585507750511169,-0.785169541835785,0.201716393232346,0.752812325954437 ,-0.289424031972885,0.591191411018372,0.312898457050323,-0.30317035317421,0.900101244449615,-0.201268136501312 ,-0.0940669924020767,0.975009024143219,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.198421195149422 ,-0.758837580680847,0.620318114757538,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.883874535560608 ,-0.163575857877731,0.438188046216965,0.752812325954437,-0.289424031972885,0.591191411018372,0.585507750511169 ,-0.785169541835785,0.201716393232346,0.935926675796509,-0.349802911281586,0.040978018194437,0.757855832576752 ,-0.532335162162781,0.37719202041626,0.763365149497986,-0.125001043081284,0.633757352828979,0.842067956924438 ,-0.0588998831808567,0.536145865917206,0.967476725578308,-0.220996707677841,0.12308245152235,0.315021455287933 ,0.667639553546906,0.674550950527191,0.135122209787369,0.838861703872681,0.527307271957397,-0.362329810857773 ,0.579764425754547,0.729787826538086,-0.152529567480087,0.450641930103302,0.87957751750946,-0.683583498001099 ,0.133054658770561,0.71764200925827,-0.515409469604492,0.101915791630745,0.850862085819244,-0.448814660310745 ,0.224063515663147,0.865078568458557,-0.633079648017883,0.295362114906311,0.71552175283432,-0.850510120391846 ,-0.227078184485435,-0.474413365125656,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.130363821983337 ,-0.434679388999939,-0.89109992980957,-0.838969886302948,-0.5302734375,0.122227653861046,0.129860803484917,0.240213453769684 ,-0.961994647979736,0.151356309652328,0.151358395814896,-0.976822376251221,0.661575853824615,0.331751018762589 ,-0.672501742839813,0.66670024394989,0.432952612638474,-0.606681823730469,-0.476255148649216,0.154200553894043 ,-0.865680813789368,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.303164839744568,0.00688559422269464 ,-0.952913224697113,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.948083400726318,-9.9310447865264e-008 ,0.318021833896637,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.540568292140961,-0.817409574985504 ,0.199066668748856,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.999005138874054,6.03368519591641e-008 ,-0.0445944853127003,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.452180773019791,-0.878205716609955 ,0.155843734741211,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.940430045127869,5.90034510139503e-008 ,-0.339987248182297,-0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.470319867134094,-0.882218599319458 ,-0.0221261866390705,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.852473676204681,-2.95911831926787e-007 ,-0.52277010679245,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.449864596128464,-0.877300322055817 ,-0.167230501770973,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.728089213371277,-0.000130440981592983 ,0.685482382774353,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.685902893543243,-0.71078634262085 ,0.155948713421822,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.522543489933014,0.0101915588602424 ,0.852551698684692,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.838969886302948,-0.5302734375,0.122227653861046 ,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.812868595123291,0.000118661264423281,-0.582447171211243 ,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.421292394399643,-0.875049769878387,-0.238328784704208 ,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.472109436988831,-0.00532391341403127,-0.881523847579956 ,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.226269230246544,-0.722853541374207,-0.652904987335205 ,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.472109436988831,-0.00532391341403127,-0.881523847579956 ,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.577395439147949,-0.441121131181717,-0.687041938304901 ,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.704409718513489,0.000107401865534484,-0.709793627262115 ,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.207103610038757,-0.83615118265152,-0.507896959781647 ,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.196195036172867,-0.0147135937586427,-0.980454504489899 ,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.873431265354156,-0.446991860866547,0.193173810839653 ,-0.949683308601379,-0.00300553464330733,-0.313197374343872,0.532896935939789,0.0133537920191884,0.846074759960175 ,-0.108442008495331,0.0180171951651573,0.993939459323883,0.312898457050323,-0.30317035317421,0.900101244449615 ,0.623564124107361,0.781771123409271,0.00130499247461557,0.688613891601563,0.692343652248383,-0.215571701526642 ,0.796620786190033,0.575817584991455,-0.183927938342094,0.312898457050323,-0.30317035317421,0.900101244449615 ,0.752812325954437,-0.289424031972885,0.591191411018372,0.532896935939789,0.0133537920191884,0.846074759960175 ,0.842067956924438,-0.0588998831808567,0.536145865917206,0.763365149497986,-0.125001043081284,0.633757352828979 ,0.532896935939789,0.0133537920191884,0.846074759960175,0.315021455287933,0.667639553546906,0.674550950527191 ,-0.152529567480087,0.450641930103302,0.87957751750946,0.419073313474655,0.202598944306374,0.885060012340546 ,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.448814660310745,0.224063515663147,0.865078568458557 ,-0.515409469604492,0.101915791630745,0.850862085819244,0.151356309652328,0.151358395814896,-0.976822376251221 ,0.380553632974625,-0.296130239963531,-0.876062631607056,0.661575853824615,0.331751018762589,-0.672501742839813 ,-0.257767707109451,-0.179750084877014,-0.949339628219604,0.123946145176888,-0.156060710549355,-0.979939997196198 ,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.246528506278992,0.0864357575774193,-0.965273320674896 ,0.0183170828968287,-0.00617978628724813,-0.999813139438629,-0.303164839744568,0.00688559422269464,-0.952913224697113 ,0.66670024394989,0.432952612638474,-0.606681823730469,0.376559227705002,0.0804113894701004,-0.922896087169647 ,0.129860803484917,0.240213453769684,-0.961994647979736,-0.838969886302948,-0.5302734375,0.122227653861046,-0.464085191488266 ,0.0445687659084797,0.88466864824295,-0.850510120391846,-0.227078184485435,-0.474413365125656,0.376559227705002 ,0.0804113894701004,-0.922896087169647,0.123946145176888,-0.156060710549355,-0.979939997196198,0.0183170828968287 ,-0.00617978628724813,-0.999813139438629,0.0518634654581547,-0.075635053217411,-0.995785892009735,-0.0710315629839897 ,-0.0534634776413441,-0.996040225028992,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.949683308601379 ,-0.00300553464330733,-0.313197374343872,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.472109436988831 ,-0.00532391341403127,-0.881523847579956,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.326529651880264 ,-0.00680761877447367,-0.945162415504456,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.704409718513489 ,0.000107401865534484,-0.709793627262115,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.472109436988831 ,-0.00532391341403127,-0.881523847579956,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.327883958816528 ,-0.01082568988204,-0.944655954837799,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.391295343637466 ,-0.708213090896606,-0.587641179561615,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.326529651880264 ,-0.00680761877447367,-0.945162415504456,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.196195036172867 ,-0.0147135937586427,-0.980454504489899,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,0.0518634654581547 ,-0.075635053217411,-0.995785892009735,0.142189741134644,-0.0967937782406807,-0.9850954413414,-0.0223364103585482 ,-0.576743721961975,-0.816619694232941,0.130361214280128,-0.434677690267563,-0.891101121902466,0.839043617248535 ,-0.530505955219269,0.120703317224979,0.685371875762939,-0.711494088172913,0.155053615570068,-0.38129711151123 ,-0.692395269870758,-0.6125368475914,0.539408206939697,-0.818039894104004,0.199623316526413,0.452180683612823 ,-0.878205835819244,0.155843451619148,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191 ,-0.68541157245636,0.0298696421086788,-0.680036187171936,-0.698283493518829,-0.22349713742733,0.452180683612823 ,-0.878205835819244,0.155843451619148,0.470319837331772,-0.882218599319458,-0.0221268218010664,-0.683448731899261 ,-0.68956845998764,0.239568650722504,-0.72754293680191,-0.68541157245636,0.0298696421086788,0.470319837331772 ,-0.882218599319458,-0.0221268218010664,0.44986492395401,-0.877299964427948,-0.167231306433678,-0.598632097244263 ,-0.69281804561615,0.402048170566559,-0.683448731899261,-0.68956845998764,0.239568650722504,0.44986492395401 ,-0.877299964427948,-0.167231306433678,0.421293467283249,-0.875048518180847,-0.238331392407417,0.201270371675491 ,-0.0940680578351021,0.975008428096771,0.108443260192871,0.0180166698992252,0.993939340114594,-0.312896370887756 ,-0.30316898226738,0.900102436542511,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.199198111891747 ,-0.0411539115011692,-0.979094684123993,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.641679227352142 ,0.0955243930220604,-0.761001229286194,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.916015803813934 ,-0.263128668069839,-0.302784383296967,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.806312918663025 ,0.228450119495392,-0.545591473579407,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532 ,-0.253715485334396,0.0387984029948711,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.915864527225494 ,0.261734366416931,-0.304445862770081,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.913034975528717 ,-0.253099620342255,0.319855839014053,-0.914388120174408,0.244719073176384,0.32250103354454,-0.966454327106476 ,0.253697991371155,0.0400422066450119,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.795308172702789 ,-0.253419429063797,0.55069363117218,-0.789120137691498,0.248433187603951,0.561756551265717,-0.914388120174408 ,0.244719073176384,0.32250103354454,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.76336532831192 ,-0.125000447034836,0.63375723361969,-0.419077694416046,0.202596783638,0.885058403015137,-0.789120137691498,0.248433187603951 ,0.561756551265717,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.433125436306,0.08011444658041 ,-0.897766172885895,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.676364660263062,0.342619508504868 ,-0.652029693126678,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.797359347343445,0.574054718017578 ,-0.186223655939102,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.429452449083328,0.892922580242157 ,-0.135128989815712,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.688615202903748,0.69234311580658 ,-0.215569332242012,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.429452449083328,0.892922580242157 ,-0.135128989815712,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.689061939716339,0.724038541316986 ,0.0310133062303066,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.452375322580338,0.891550540924072 ,0.0222301334142685,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.675342082977295,0.696398377418518 ,0.242780566215515,-0.47176668047905,0.864408373832703,0.173880234360695,-0.47176668047905,0.864408373832703 ,0.173880234360695,-0.675342082977295,0.696398377418518,0.242780566215515,-0.581114292144775,0.694480895996094 ,0.424266964197159,-0.407311707735062,0.861595511436462,0.302903264760971,-0.598632097244263,-0.69281804561615 ,0.402048170566559,0.421293467283249,-0.875048518180847,-0.238331392407417,0.207105413079262,-0.836149632930756 ,-0.50789874792099,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.532896161079407,0.0133542641997337 ,0.846075296401978,0.108443260192871,0.0180166698992252,0.993939340114594,0.185588449239731,0.0829351618885994 ,0.979121387004852,-0.419077694416046,0.202596783638,0.885058403015137,-0.407311707735062,0.861595511436462,0.302903264760971 ,-0.581114292144775,0.694480895996094,0.424266964197159,-0.315046489238739,0.668025493621826,0.674157023429871 ,-0.13514731824398,0.839401423931122,0.526441276073456,0.701747357845306,0.0141455726698041,0.712285459041595 ,0.528442323207855,0.0112593621015549,0.848894536495209,0.49128520488739,-0.262695521116257,0.830439567565918 ,0.856841146945953,-0.483877241611481,0.178005740046501,0.701747357845306,0.0141455726698041,0.712285459041595 ,0.68733537197113,0.112072803080082,0.717641830444336,0.517209410667419,0.0911701247096062,0.850989103317261 ,0.528442323207855,0.0112593621015549,0.848894536495209,0.351653456687927,0.578750193119049,0.735790729522705 ,0.146949008107185,0.44949945807457,0.881110787391663,0.438047766685486,0.220905914902687,0.871386647224426,0.614956438541412 ,0.290624231100082,0.733052670955658,0.204843252897263,-0.720215260982513,-0.66281920671463,0.322322010993958 ,-0.727867662906647,-0.605241358280182,0.198422521352768,-0.758837461471558,0.620317757129669,-0.171031460165977 ,-0.919269144535065,0.354531347751617,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.870814919471741 ,-0.427383571863174,-0.242949977517128,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.967477083206177 ,-0.220996335148811,0.123080067336559,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.372008502483368 ,-0.198910742998123,-0.90666651725769,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.806312918663025 ,0.228450119495392,-0.545591473579407,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.0223364103585482 ,-0.576743721961975,-0.816619694232941,0.685371875762939,-0.711494088172913,0.155053615570068,0.539408206939697 ,-0.818039894104004,0.199623316526413,0.257765382528305,-0.179748728871346,-0.949340522289276,0.304023921489716 ,0.0101332226768136,-0.952610492706299,0.551838159561157,0.0304165203124285,-0.833396375179291,0.850508272647858 ,-0.227084189653397,-0.474413722753525,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974 ,0.163634076714516,-0.861219465732574,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.131680130958557 ,0.240106955170631,-0.961773872375488,-0.585506916046143,-0.7851682305336,0.201723843812943,0.0860703811049461 ,-0.674501478672028,-0.73323917388916,0.204843252897263,-0.720215260982513,-0.66281920671463,-0.171031460165977 ,-0.919269144535065,0.354531347751617,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.532896161079407 ,0.0133542641997337,0.846075296401978,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.883872747421265 ,-0.163574352860451,0.438192099332809,-0.419077694416046,0.202596783638,0.885058403015137,-0.76336532831192,-0.125000447034836 ,0.63375723361969,-0.532896161079407,0.0133542641997337,0.846075296401978,0.207105413079262,-0.836149632930756 ,-0.50789874792099,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.967477083206177,-0.220996335148811 ,0.123080067336559,-0.757856607437134,-0.532336175441742,0.377189010381699,0.49128520488739,-0.262695521116257 ,0.830439567565918,0.198422521352768,-0.758837461471558,0.620317757129669,0.322322010993958,-0.727867662906647 ,-0.605241358280182,0.856841146945953,-0.483877241611481,0.178005740046501,-0.935926795005798,-0.349802285432816 ,0.0409805364906788,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.0860703811049461,-0.674501478672028 ,-0.73323917388916,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.372008502483368,-0.198910742998123 ,-0.90666651725769,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.130361214280128,-0.434677690267563 ,-0.891101121902466,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.67012745141983,-0.27579391002655 ,-0.689105927944183,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.680036187171936,-0.698283493518829 ,-0.22349713742733,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396 ,0.0387984029948711,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.680036187171936,-0.698283493518829 ,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.966500461101532,-0.253715485334396 ,0.0387984029948711,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.683448731899261,-0.68956845998764 ,0.239568650722504,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.913034975528717,-0.253099620342255 ,0.319855839014053,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.598632097244263,-0.69281804561615 ,0.402048170566559,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.795308172702789,-0.253419429063797 ,0.55069363117218,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.757856607437134,-0.532336175441742 ,0.377189010381699,-0.76336532831192,-0.125000447034836,0.63375723361969,0.257765382528305,-0.179748728871346 ,-0.949340522289276,-0.12762725353241,-0.169139251112938,-0.977293848991394,-0.199198111891747,-0.0411539115011692 ,-0.979094684123993,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717 ,-0.964075088500977,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.433125436306,0.08011444658041 ,-0.897766172885895,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.797359347343445,0.574054718017578 ,-0.186223655939102,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.433125436306,0.08011444658041 ,-0.897766172885895,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.647002518177032,0.732555210590363 ,-0.211543470621109,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.806312918663025,0.228450119495392 ,-0.545591473579407,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.647002518177032,0.732555210590363 ,-0.211543470621109,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966454327106476,0.253697991371155 ,0.0400422066450119,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.689061939716339,0.724038541316986 ,0.0310133062303066,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.914388120174408,0.244719073176384 ,0.32250103354454,-0.675342082977295,0.696398377418518,0.242780566215515,-0.675342082977295,0.696398377418518 ,0.242780566215515,-0.914388120174408,0.244719073176384,0.32250103354454,-0.789120137691498,0.248433187603951 ,0.561756551265717,-0.581114292144775,0.694480895996094,0.424266964197159,-0.581114292144775,0.694480895996094 ,0.424266964197159,-0.789120137691498,0.248433187603951,0.561756551265717,-0.419077694416046,0.202596783638,0.885058403015137 ,-0.315046489238739,0.668025493621826,0.674157023429871,0.528442323207855,0.0112593621015549,0.848894536495209 ,0.108443260192871,0.0180166698992252,0.993939340114594,0.201270371675491,-0.0940680578351021,0.975008428096771 ,0.49128520488739,-0.262695521116257,0.830439567565918,0.517209410667419,0.0911701247096062,0.850989103317261 ,0.185588449239731,0.0829351618885994,0.979121387004852,0.108443260192871,0.0180166698992252,0.993939340114594 ,0.528442323207855,0.0112593621015549,0.848894536495209,-0.419077694416046,0.202596783638,0.885058403015137,0.185588449239731 ,0.0829351618885994,0.979121387004852,0.438047766685486,0.220905914902687,0.871386647224426,0.146949008107185 ,0.44949945807457,0.881110787391663,-0.171031460165977,-0.919269144535065,0.354531347751617,0.198422521352768 ,-0.758837461471558,0.620317757129669,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.312896370887756 ,-0.30316898226738,0.900102436542511,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.935926795005798 ,-0.349802285432816,0.0409805364906788,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.842067539691925 ,-0.0588989481329918,0.536146581172943,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.372008502483368 ,-0.198910742998123,-0.90666651725769,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.38129711151123 ,-0.692395269870758,-0.6125368475914,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.797359347343445 ,0.574054718017578,-0.186223655939102,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.806312918663025 ,0.228450119495392,-0.545591473579407,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.312896370887756 ,-0.30316898226738,0.900102436542511,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.585506916046143 ,-0.7851682305336,0.201723843812943,0.201270371675491,-0.0940680578351021,0.975008428096771,0.0551152527332306 ,-0.341196656227112,0.938374698162079,0.198422521352768,-0.758837461471558,0.620317757129669,0.49128520488739 ,-0.262695521116257,0.830439567565918,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.935926795005798 ,-0.349802285432816,0.0409805364906788,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.752809286117554 ,-0.289420604705811,0.59119701385498,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.967477083206177 ,-0.220996335148811,0.123080067336559,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.76336532831192 ,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,0.146949008107185 ,0.44949945807457,0.881110787391663,0.351653456687927,0.578750193119049,0.735790729522705,-0.13514731824398,0.839401423931122 ,0.526441276073456,0.68733537197113,0.112072803080082,0.717641830444336,0.614956438541412,0.290624231100082,0.733052670955658 ,0.438047766685486,0.220905914902687,0.871386647224426,0.517209410667419,0.0911701247096062,0.850989103317261 ,0.850508272647858,-0.227084189653397,-0.474413722753525,0.839043617248535,-0.530505955219269,0.120703317224979 ,0.130361214280128,-0.434677690267563,-0.891101121902466,0.257765382528305,-0.179748728871346,-0.949340522289276 ,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.669741690158844,0.427952170372009,-0.606879770755768 ,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.178068861365318,0.174752190709114,-0.968376576900482 ,0.481170386075974,0.163634076714516,-0.861219465732574,0.551838159561157,0.0304165203124285,-0.833396375179291 ,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977 ,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.452180683612823,-0.878205835819244,0.155843451619148 ,0.539408206939697,-0.818039894104004,0.199623316526413,0.727328240871429,-0.00104458257555962,0.686289012432098 ,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.470319837331772,-0.882218599319458,-0.0221268218010664 ,0.452180683612823,-0.878205835819244,0.155843451619148,0.948083400726318,1.65112687966484e-008,0.318021893501282 ,0.940430104732513,-4.52081110324798e-008,-0.339987009763718,0.44986492395401,-0.877299964427948,-0.167231306433678 ,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.999005138874054,5.02348207476189e-008,-0.0445948578417301 ,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.421293467283249,-0.875048518180847,-0.238331392407417 ,0.44986492395401,-0.877299964427948,-0.167231306433678,0.940430104732513,-4.52081110324798e-008,-0.339987009763718 ,0.727328240871429,-0.00104458257555962,0.686289012432098,0.539408206939697,-0.818039894104004,0.199623316526413 ,0.685371875762939,-0.711494088172913,0.155053615570068,0.523545145988464,0.00788477715104818,0.851961433887482 ,0.523545145988464,0.00788477715104818,0.851961433887482,0.685371875762939,-0.711494088172913,0.155053615570068 ,0.839043617248535,-0.530505955219269,0.120703317224979,0.466128349304199,0.0431555546820164,0.883663952350616 ,0.812868714332581,0.000118819662020542,-0.582446992397308,0.207105413079262,-0.836149632930756,-0.50789874792099 ,0.421293467283249,-0.875048518180847,-0.238331392407417,0.852473616600037,-2.64333579025333e-007,-0.522770285606384 ,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.205130055546761,-0.01137740816921,-0.978668570518494 ,0.204843252897263,-0.720215260982513,-0.66281920671463,0.0860703811049461,-0.674501478672028,-0.73323917388916 ,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.0860703811049461,-0.674501478672028,-0.73323917388916 ,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.801146507263184,0.00023984866857063,-0.59846818447113 ,0.801146507263184,0.00023984866857063,-0.59846818447113,-0.938664674758911,-0.343050718307495,-0.0349972806870937 ,0.207105413079262,-0.836149632930756,-0.50789874792099,0.812868714332581,0.000118819662020542,-0.582446992397308 ,0.205130055546761,-0.01137740816921,-0.978668570518494,0.0140170939266682,-0.019058208912611,-0.999720096588135 ,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.856841146945953,-0.483877241611481,0.178005740046501 ,0.322322010993958,-0.727867662906647,-0.605241358280182,-0.532896161079407,0.0133542641997337,0.846075296401978 ,-0.312896370887756,-0.30316898226738,0.900102436542511,0.108443260192871,0.0180166698992252,0.993939340114594 ,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.797359347343445,0.574054718017578,-0.186223655939102 ,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.312896370887756,-0.30316898226738,0.900102436542511 ,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.752809286117554,-0.289420604705811,0.59119701385498 ,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.532896161079407,0.0133542641997337,0.846075296401978 ,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871 ,-0.419077694416046,0.202596783638,0.885058403015137,0.146949008107185,0.44949945807457,0.881110787391663,0.185588449239731 ,0.0829351618885994,0.979121387004852,0.517209410667419,0.0911701247096062,0.850989103317261,0.438047766685486 ,0.220905914902687,0.871386647224426,-0.178068861365318,0.174752190709114,-0.968376576900482,-0.676364660263062 ,0.342619508504868,-0.652029693126678,-0.444781333208084,-0.232732489705086,-0.864872872829437,0.257765382528305 ,-0.179748728871346,-0.949340522289276,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.12762725353241 ,-0.169139251112938,-0.977293848991394,0.249399721622467,0.0914280638098717,-0.964075088500977,0.304023921489716 ,0.0101332226768136,-0.952610492706299,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.669741690158844 ,0.427952170372009,-0.606879770755768,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.433125436306 ,0.08011444658041,-0.897766172885895,0.322322010993958,-0.727867662906647,-0.605241358280182,0.204843252897263 ,-0.720215260982513,-0.66281920671463,0.205130055546761,-0.01137740816921,-0.978668570518494,-0.870814919471741 ,-0.427383571863174,-0.242949977517128,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.801146507263184 ,0.00023984866857063,-0.59846818447113,0.839043617248535,-0.530505955219269,0.120703317224979,0.850508272647858 ,-0.227084189653397,-0.474413722753525,0.466128349304199,0.0431555546820164,0.883663952350616,-0.372008502483368 ,-0.198910742998123,-0.90666651725769,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.12762725353241 ,-0.169139251112938,-0.977293848991394,0.150906592607498,0.329798728227615,0.931912004947662,0.189128592610359 ,0.522824287414551,0.831194996833801,0.388264060020447,0.528846085071564,0.754700541496277,0.858800172805786 ,0.271537780761719,0.434430092573166,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918 ,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,-0.347785919904709 ,0.133236810564995,0.928058683872223,-0.104220665991306,0.344170242547989,0.933104991912842,-0.0869597047567368 ,0.548145830631256,0.831849813461304,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.673399865627289 ,0.731426298618317,0.107462607324123,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.835862636566162 ,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162 ,0.227462083101273,-0.499594479799271,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.107317022979259 ,-0.361611425876617,-0.926131844520569,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.374457865953445 ,-0.757000803947449,-0.535472750663757,0.810609877109528,0.241179883480072,-0.533613920211792,0.791842222213745 ,0.591257572174072,0.152972057461739,0.745590567588806,0.664693832397461,0.047716099768877,-0.0846520513296127 ,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,0.152771726250649 ,0.56620579957962,0.809982597827911,0.165652215480804,0.70129519701004,0.693357288837433,0.165652215480804,0.70129519701004 ,0.693357288837433,0.152771726250649,0.56620579957962,0.809982597827911,0.340089678764343,0.499063193798065,0.797041356563568 ,0.40163654088974,0.616658449172974,0.677067518234253,0.40163654088974,0.616658449172974,0.677067518234253,0.340089678764343 ,0.499063193798065,0.797041356563568,0.490783363580704,0.368656903505325,0.789445221424103,0.591461837291718 ,0.452348530292511,0.667498111724854,0.591461837291718,0.452348530292511,0.667498111724854,0.490783363580704 ,0.368656903505325,0.789445221424103,0.584496080875397,0.192600935697556,0.788206338882446,0.709483921527863 ,0.230550438165665,0.665942311286926,0.709483921527863,0.230550438165665,0.665942311286926,0.584496080875397 ,0.192600935697556,0.788206338882446,0.608551204204559,-0.00531027046963573,0.79349684715271,0.739747881889343 ,-0.0187778417021036,0.672622084617615,0.739747881889343,-0.0187778417021036,0.672622084617615,0.608551204204559 ,-0.00531027046963573,0.79349684715271,0.55970573425293,-0.198335975408554,0.804606914520264,0.678183913230896 ,-0.26194903254509,0.686621606349945,0.678183913230896,-0.26194903254509,0.686621606349945,0.55970573425293,-0.198335975408554 ,0.804606914520264,0.444581091403961,-0.360417783260345,0.820028483867645,0.53311824798584,-0.466141611337662 ,0.706043124198914,0.53311824798584,-0.466141611337662,0.706043124198914,0.444581091403961,-0.360417783260345 ,0.820028483867645,0.278635025024414,-0.469717562198639,0.837692022323608,0.324051290750504,-0.603787064552307 ,0.728307604789734,0.324051290750504,-0.603787064552307,0.728307604789734,0.278635025024414,-0.469717562198639 ,0.837692022323608,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0793530717492104,-0.656251728534698 ,0.750357747077942,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0844017341732979,-0.511408865451813 ,0.855182647705078,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.167935863137245,-0.616517841815948 ,0.769222497940063,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.111898861825466,-0.479868054389954 ,0.870175421237946,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.384569972753525,-0.489893972873688 ,0.782374441623688,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.283866763114929,-0.379370450973511 ,0.880623459815979,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.541184604167938,-0.293485879898071 ,0.788026213645935,-0.541184604167938,-0.293485879898071,0.788026213645935,-0.408186405897141,-0.223486140370369 ,0.885120213031769,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.616609632968903,-0.0538487322628498 ,0.785425305366516,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.46808922290802,-0.0332756750285625 ,0.883054494857788,-0.455481648445129,0.165574789047241,0.874712228775024,-0.600685119628906,0.196671590209007 ,0.774917840957642,-0.600685119628906,0.196671590209007,0.774917840957642,-0.455481648445129,0.165574789047241 ,0.874712228775024,-0.372059375047684,0.346225291490555,0.861220002174377,-0.495565205812454,0.424222469329834 ,0.757925093173981,-0.495565205812454,0.424222469329834,0.757925093173981,-0.372059375047684,0.346225291490555 ,0.861220002174377,-0.229102194309235,0.484258502721787,0.844396770000458,-0.315447002649307,0.598084509372711 ,0.736741542816162,-0.315447002649307,0.598084509372711,0.736741542816162,-0.229102194309235,0.484258502721787 ,0.844396770000458,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.0846520513296127,0.694811403751373 ,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.00891148950904608,0.421955615282059 ,0.906572699546814,0.136559754610062,0.425709754228592,0.894495725631714,0.152771726250649,0.56620579957962,0.809982597827911 ,0.152771726250649,0.56620579957962,0.809982597827911,0.136559754610062,0.425709754228592,0.894495725631714,0.273672163486481 ,0.376535683870316,0.88505619764328,0.340089678764343,0.499063193798065,0.797041356563568,0.340089678764343,0.499063193798065 ,0.797041356563568,0.273672163486481,0.376535683870316,0.88505619764328,0.384000062942505,0.28102844953537,0.879526555538177 ,0.490783363580704,0.368656903505325,0.789445221424103,0.490783363580704,0.368656903505325,0.789445221424103 ,0.384000062942505,0.28102844953537,0.879526555538177,0.452635645866394,0.15212544798851,0.878623247146606,0.584496080875397 ,0.192600935697556,0.788206338882446,0.584496080875397,0.192600935697556,0.788206338882446,0.452635645866394 ,0.15212544798851,0.878623247146606,0.470285147428513,0.00726274587213993,0.882484614849091,0.608551204204559 ,-0.00531027046963573,0.79349684715271,0.608551204204559,-0.00531027046963573,0.79349684715271,0.470285147428513 ,0.00726274587213993,0.882484614849091,0.434570521116257,-0.134057357907295,0.890604913234711,0.55970573425293 ,-0.198335975408554,0.804606914520264,0.55970573425293,-0.198335975408554,0.804606914520264,0.434570521116257 ,-0.134057357907295,0.890604913234711,0.350383520126343,-0.252725511789322,0.901865363121033,0.444581091403961 ,-0.360417783260345,0.820028483867645,0.444581091403961,-0.360417783260345,0.820028483867645,0.350383520126343 ,-0.252725511789322,0.901865363121033,0.228896334767342,-0.332815736532211,0.91478967666626,0.278635025024414 ,-0.469717562198639,0.837692022323608,0.278635025024414,-0.469717562198639,0.837692022323608,0.228896334767342 ,-0.332815736532211,0.91478967666626,0.0866658836603165,-0.363462805747986,0.927568793296814,0.0844017341732979 ,-0.511408865451813,0.855182647705078,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0866658836603165 ,-0.363462805747986,0.927568793296814,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.111898861825466 ,-0.479868054389954,0.870175421237946,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.0571252852678299 ,-0.340407937765121,0.938540935516357,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.283866763114929 ,-0.379370450973511,0.880623459815979,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.183149293065071 ,-0.2668676674366,0.946170151233673,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.408186405897141 ,-0.223486140370369,0.885120213031769,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.274222016334534 ,-0.152747601270676,0.949458003044128,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.46808922290802 ,-0.0332756750285625,0.883054494857788,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.318153589963913 ,-0.0134182879701257,0.947944223880768,-0.308955788612366,0.132258638739586,0.941835463047028,-0.455481648445129 ,0.165574789047241,0.874712228775024,-0.455481648445129,0.165574789047241,0.874712228775024,-0.308955788612366 ,0.132258638739586,0.941835463047028,-0.247846245765686,0.264629483222961,0.931956827640533,-0.372059375047684 ,0.346225291490555,0.861220002174377,-0.372059375047684,0.346225291490555,0.861220002174377,-0.247846245765686 ,0.264629483222961,0.931956827640533,-0.143103122711182,0.365745604038239,0.919647574424744,-0.229102194309235 ,0.484258502721787,0.844396770000458,-0.229102194309235,0.484258502721787,0.844396770000458,-0.143103122711182 ,0.365745604038239,0.919647574424744,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.0459145493805408 ,0.561039865016937,0.826514482498169,0.404841154813766,0.621719241142273,0.670498967170715,0.166674554347992 ,0.707286298274994,0.686997592449188,0.162125825881958,0.655974566936493,0.737165212631226,0.381767153739929 ,0.577166616916656,0.721895158290863,0.59637314081192,0.455737888813019,0.660789012908936,0.404841154813766,0.621719241142273 ,0.670498967170715,0.381767153739929,0.577166616916656,0.721895158290863,0.55845445394516,0.424168527126312,0.712888300418854 ,0.71536773443222,0.231748938560486,0.659197568893433,0.59637314081192,0.455737888813019,0.660789012908936,0.55845445394516 ,0.424168527126312,0.712888300418854,0.668235063552856,0.217623174190521,0.711408495903015,0.74573540687561,-0.019992433488369 ,0.665942192077637,0.71536773443222,0.231748938560486,0.659197568893433,0.668235063552856,0.217623174190521,0.711408495903015 ,0.69628119468689,-0.0145472744479775,0.717621684074402,0.683374345302582,-0.265446841716766,0.680101037025452 ,0.74573540687561,-0.019992433488369,0.665942192077637,0.69628119468689,-0.0145472744479775,0.717621684074402 ,0.638800263404846,-0.240928456187248,0.730676174163818,0.536719858646393,-0.471459150314331,0.699755728244781 ,0.683374345302582,-0.265446841716766,0.680101037025452,0.638800263404846,-0.240928456187248,0.730676174163818 ,0.503562271595001,-0.430930227041245,0.748815178871155,0.325602531433105,-0.610175728797913,0.722266256809235 ,0.536719858646393,-0.471459150314331,0.699755728244781,0.503562271595001,-0.430930227041245,0.748815178871155 ,0.308857411146164,-0.558854043483734,0.769603312015533,0.0785464271903038,-0.662888288497925,0.744586825370789 ,0.325602531433105,-0.610175728797913,0.722266256809235,0.308857411146164,-0.558854043483734,0.769603312015533 ,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.171089246869087,-0.622517466545105,0.763675689697266 ,0.0785464271903038,-0.662888288497925,0.744586825370789,0.0810477286577225,-0.607410430908203,0.790242910385132 ,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.389568954706192,-0.494513541460037,0.776976466178894 ,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.149094551801682,-0.570135653018951,0.807908475399017 ,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.547417819499969,-0.296164989471436,0.782700479030609 ,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.350501775741577,-0.452110230922699,0.820210218429565 ,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.623331189155579,-0.0542619191110134,0.78007298707962 ,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.495985597372055,-0.269255638122559,0.825529932975769 ,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.607059121131897,0.19852888584137,0.769457936286926 ,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.56595778465271,-0.0462783649563789,0.823134303092957 ,-0.551003336906433,0.186732366681099,0.813342690467834,-0.500814497470856,0.428098827600479,0.752274036407471 ,-0.607059121131897,0.19852888584137,0.769457936286926,-0.551003336906433,0.186732366681099,0.813342690467834 ,-0.453138768672943,0.398362696170807,0.797478795051575,-0.31894525885582,0.603455662727356,0.730831801891327 ,-0.500814497470856,0.428098827600479,0.752274036407471,-0.453138768672943,0.398362696170807,0.797478795051575 ,-0.285550057888031,0.56007307767868,0.777675628662109,-0.085962675511837,0.700907051563263,0.708053469657898 ,-0.31894525885582,0.603455662727356,0.730831801891327,-0.285550057888031,0.56007307767868,0.777675628662109 ,-0.070789560675621,0.65000593662262,0.756624817848206,0.166674554347992,0.707286298274994,0.686997592449188 ,-0.085962675511837,0.700907051563263,0.708053469657898,-0.070789560675621,0.65000593662262,0.756624817848206 ,0.162125825881958,0.655974566936493,0.737165212631226,0.449477076530457,0.711219429969788,0.540497243404388 ,0.173702031373978,0.810399651527405,0.559535503387451,0.166674554347992,0.707286298274994,0.686997592449188 ,0.404841154813766,0.621719241142273,0.670498967170715,0.671196460723877,0.518955230712891,0.529321074485779 ,0.449477076530457,0.711219429969788,0.540497243404388,0.404841154813766,0.621719241142273,0.670498967170715 ,0.59637314081192,0.455737888813019,0.660789012908936,0.808924913406372,0.25956854224205,0.527508020401001,0.671196460723877 ,0.518955230712891,0.529321074485779,0.59637314081192,0.455737888813019,0.660789012908936,0.71536773443222,0.231748938560486 ,0.659197568893433,0.844040215015411,-0.0319031029939651,0.53533011674881,0.808924913406372,0.25956854224205 ,0.527508020401001,0.71536773443222,0.231748938560486,0.659197568893433,0.74573540687561,-0.019992433488369,0.665942192077637 ,0.771810173988342,-0.316096395254135,0.551717400550842,0.844040215015411,-0.0319031029939651,0.53533011674881 ,0.74573540687561,-0.019992433488369,0.665942192077637,0.683374345302582,-0.265446841716766,0.680101037025452 ,0.601994156837463,-0.554628610610962,0.574447631835938,0.771810173988342,-0.316096395254135,0.551717400550842 ,0.683374345302582,-0.265446841716766,0.680101037025452,0.536719858646393,-0.471459150314331,0.699755728244781 ,0.357549130916595,-0.715268313884735,0.600458025932312,0.601994156837463,-0.554628610610962,0.574447631835938 ,0.536719858646393,-0.471459150314331,0.699755728244781,0.325602531433105,-0.610175728797913,0.722266256809235 ,0.0714418441057205,-0.776358008384705,0.626230239868164,0.357549130916595,-0.715268313884735,0.600458025932312 ,0.325602531433105,-0.610175728797913,0.722266256809235,0.0785464271903038,-0.662888288497925,0.744586825370789 ,-0.2176783233881,-0.729624152183533,0.648278295993805,0.0714418441057205,-0.776358008384705,0.626230239868164 ,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.171089246869087,-0.622517466545105,0.763675689697266 ,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.2176783233881,-0.729624152183533,0.648278295993805 ,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.389568954706192,-0.494513541460037,0.776976466178894 ,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.470725387334824,-0.581375122070313,0.663641929626465 ,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.547417819499969,-0.296164989471436,0.782700479030609 ,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.653564929962158,-0.351642489433289,0.670224189758301 ,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.623331189155579,-0.0542619191110134,0.78007298707962 ,-0.722602725028992,0.221371009945869,0.654858946800232,-0.741482198238373,-0.0714436993002892,0.667158126831055 ,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.607059121131897,0.19852888584137,0.769457936286926 ,-0.599480926990509,0.48726087808609,0.634979903697968,-0.722602725028992,0.221371009945869,0.654858946800232 ,-0.607059121131897,0.19852888584137,0.769457936286926,-0.500814497470856,0.428098827600479,0.752274036407471 ,-0.388752341270447,0.690308272838593,0.610201716423035,-0.599480926990509,0.48726087808609,0.634979903697968 ,-0.500814497470856,0.428098827600479,0.752274036407471,-0.31894525885582,0.603455662727356,0.730831801891327 ,-0.118887908756733,0.803094327449799,0.583870828151703,-0.388752341270447,0.690308272838593,0.610201716423035 ,-0.31894525885582,0.603455662727356,0.730831801891327,-0.085962675511837,0.700907051563263,0.708053469657898 ,0.173702031373978,0.810399651527405,0.559535503387451,-0.118887908756733,0.803094327449799,0.583870828151703 ,-0.085962675511837,0.700907051563263,0.708053469657898,0.166674554347992,0.707286298274994,0.686997592449188 ,0.491414904594421,0.804159760475159,0.334422618150711,0.175544574856758,0.917761504650116,0.356227368116379 ,0.173702031373978,0.810399651527405,0.559535503387451,0.449477076530457,0.711219429969788,0.540497243404388 ,0.745363593101501,0.583941757678986,0.321628957986832,0.491414904594421,0.804159760475159,0.334422618150711 ,0.449477076530457,0.711219429969788,0.540497243404388,0.671196460723877,0.518955230712891,0.529321074485779 ,0.90310138463974,0.286846220493317,0.319573432207108,0.745363593101501,0.583941757678986,0.321628957986832,0.671196460723877 ,0.518955230712891,0.529321074485779,0.808924913406372,0.25956854224205,0.527508020401001,0.943322658538818,-0.0469927303493023 ,0.328533172607422,0.90310138463974,0.286846220493317,0.319573432207108,0.808924913406372,0.25956854224205,0.527508020401001 ,0.844040215015411,-0.0319031029939651,0.53533011674881,0.860598742961884,-0.372500419616699,0.34729415178299 ,0.943322658538818,-0.0469927303493023,0.328533172607422,0.844040215015411,-0.0319031029939651,0.53533011674881 ,0.771810173988342,-0.316096395254135,0.551717400550842,0.666100323200226,-0.64570939540863,0.373322576284409 ,0.860598742961884,-0.372500419616699,0.34729415178299,0.771810173988342,-0.316096395254135,0.551717400550842 ,0.601994156837463,-0.554628610610962,0.574447631835938,0.38611564040184,-0.829714477062225,0.403098732233047 ,0.666100323200226,-0.64570939540863,0.373322576284409,0.601994156837463,-0.554628610610962,0.574447631835938 ,0.357549130916595,-0.715268313884735,0.600458025932312,0.0584128089249134,-0.899684309959412,0.432615399360657 ,0.38611564040184,-0.829714477062225,0.403098732233047,0.357549130916595,-0.715268313884735,0.600458025932312 ,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.272724866867065,-0.846146643161774,0.457883208990097 ,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0714418441057205,-0.776358008384705,0.626230239868164 ,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.562557637691498,-0.676345586776733,0.475484549999237 ,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.2176783233881,-0.729624152183533,0.648278295993805 ,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.771963715553284,-0.413211286067963,0.48304083943367 ,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.470725387334824,-0.581375122070313,0.663641929626465 ,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.872656047344208,-0.0922837853431702,0.479536414146423 ,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.653564929962158,-0.351642489433289,0.670224189758301 ,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.85104501247406,0.243097007274628,0.465431213378906 ,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.741482198238373,-0.0714436993002892,0.667158126831055 ,-0.722602725028992,0.221371009945869,0.654858946800232,-0.71004056930542,0.547635197639465,0.442648887634277 ,-0.85104501247406,0.243097007274628,0.465431213378906,-0.722602725028992,0.221371009945869,0.654858946800232 ,-0.599480926990509,0.48726087808609,0.634979903697968,-0.468671709299088,0.780212640762329,0.414264500141144 ,-0.71004056930542,0.547635197639465,0.442648887634277,-0.599480926990509,0.48726087808609,0.634979903697968 ,-0.388752341270447,0.690308272838593,0.610201716423035,-0.15956723690033,0.909399926662445,0.384096413850784 ,-0.468671709299088,0.780212640762329,0.414264500141144,-0.388752341270447,0.690308272838593,0.610201716423035 ,-0.118887908756733,0.803094327449799,0.583870828151703,0.175544574856758,0.917761504650116,0.356227368116379 ,-0.15956723690033,0.909399926662445,0.384096413850784,-0.118887908756733,0.803094327449799,0.583870828151703 ,0.173702031373978,0.810399651527405,0.559535503387451,0.175544574856758,0.917761504650116,0.356227368116379 ,0.491414904594421,0.804159760475159,0.334422618150711,0.50420355796814,0.839778661727905,0.20137183368206,0.172172844409943 ,0.959192931652069,0.22428885102272,0.491414904594421,0.804159760475159,0.334422618150711,0.745363593101501,0.583941757678986 ,0.321628957986832,0.7711421251297,0.608294606208801,0.187929421663284,0.50420355796814,0.839778661727905,0.20137183368206 ,0.745363593101501,0.583941757678986,0.321628957986832,0.90310138463974,0.286846220493317,0.319573432207108,0.936946272850037 ,0.296007573604584,0.185771778225899,0.7711421251297,0.608294606208801,0.187929421663284,0.90310138463974,0.286846220493317 ,0.319573432207108,0.943322658538818,-0.0469927303493023,0.328533172607422,0.979227960109711,-0.0549116656184196 ,0.195185303688049,0.936946272850037,0.296007573604584,0.185771778225899,0.943322658538818,-0.0469927303493023 ,0.328533172607422,0.860598742961884,-0.372500419616699,0.34729415178299,0.892272472381592,-0.397068977355957 ,0.214909449219704,0.979227960109711,-0.0549116656184196,0.195185303688049,0.860598742961884,-0.372500419616699 ,0.34729415178299,0.666100323200226,-0.64570939540863,0.373322576284409,0.687824785709381,-0.684250712394714 ,0.242276713252068,0.892272472381592,-0.397068977355957,0.214909449219704,0.666100323200226,-0.64570939540863 ,0.373322576284409,0.38611564040184,-0.829714477062225,0.403098732233047,0.393515467643738,-0.877666234970093 ,0.273582845926285,0.687824785709381,-0.684250712394714,0.242276713252068,0.38611564040184,-0.829714477062225 ,0.403098732233047,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0490523800253868,-0.951213300228119 ,0.304609894752502,0.393515467643738,-0.877666234970093,0.273582845926285,0.0584128089249134,-0.899684309959412 ,0.432615399360657,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.299019634723663,-0.894943594932556 ,0.331154435873032,0.0490523800253868,-0.951213300228119,0.304609894752502,-0.272724866867065,-0.846146643161774 ,0.457883208990097,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.603678643703461,-0.716462135314941 ,0.349648594856262,-0.299019634723663,-0.894943594932556,0.331154435873032,-0.562557637691498,-0.676345586776733 ,0.475484549999237,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.823797225952148,-0.439864456653595 ,0.357599437236786,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.771963715553284,-0.413211286067963 ,0.48304083943367,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.929643630981445,-0.102520182728767 ,0.353909969329834,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.872656047344208,-0.0922837853431702 ,0.479536414146423,-0.85104501247406,0.243097007274628,0.465431213378906,-0.90692675113678,0.250015825033188 ,0.339080929756165,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.85104501247406,0.243097007274628 ,0.465431213378906,-0.71004056930542,0.547635197639465,0.442648887634277,-0.758711993694305,0.570132851600647 ,0.315126359462738,-0.90692675113678,0.250015825033188,0.339080929756165,-0.71004056930542,0.547635197639465 ,0.442648887634277,-0.468671709299088,0.780212640762329,0.414264500141144,-0.504998087882996,0.81461375951767 ,0.285274267196655,-0.758711993694305,0.570132851600647,0.315126359462738,-0.468671709299088,0.780212640762329 ,0.414264500141144,-0.15956723690033,0.909399926662445,0.384096413850784,-0.180075660347939,0.950408160686493 ,0.253568828105927,-0.504998087882996,0.81461375951767,0.285274267196655,-0.15956723690033,0.909399926662445 ,0.384096413850784,0.175544574856758,0.917761504650116,0.356227368116379,0.172172844409943,0.959192931652069 ,0.22428885102272,-0.180075660347939,0.950408160686493,0.253568828105927,0.081717848777771,0.0365908145904541 ,0.995983600616455,0.136559754610062,0.425709754228592,0.894495725631714,-0.00891148950904608,0.421955615282059 ,0.906572699546814,0.081717848777771,0.0365908145904541,0.995983600616455,0.273672163486481,0.376535683870316 ,0.88505619764328,0.136559754610062,0.425709754228592,0.894495725631714,0.081717848777771,0.0365908145904541 ,0.995983600616455,0.384000062942505,0.28102844953537,0.879526555538177,0.273672163486481,0.376535683870316,0.88505619764328 ,0.081717848777771,0.0365908145904541,0.995983600616455,0.452635645866394,0.15212544798851,0.878623247146606 ,0.384000062942505,0.28102844953537,0.879526555538177,0.081717848777771,0.0365908145904541,0.995983600616455 ,0.470285147428513,0.00726274587213993,0.882484614849091,0.452635645866394,0.15212544798851,0.878623247146606 ,0.081717848777771,0.0365908145904541,0.995983600616455,0.434570521116257,-0.134057357907295,0.890604913234711 ,0.470285147428513,0.00726274587213993,0.882484614849091,0.081717848777771,0.0365908145904541,0.995983600616455 ,0.350383520126343,-0.252725511789322,0.901865363121033,0.434570521116257,-0.134057357907295,0.890604913234711 ,0.081717848777771,0.0365908145904541,0.995983600616455,0.228896334767342,-0.332815736532211,0.91478967666626 ,0.350383520126343,-0.252725511789322,0.901865363121033,0.081717848777771,0.0365908145904541,0.995983600616455 ,0.0866658836603165,-0.363462805747986,0.927568793296814,0.228896334767342,-0.332815736532211,0.91478967666626 ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.0571252852678299,-0.340407937765121,0.938540935516357 ,0.0866658836603165,-0.363462805747986,0.927568793296814,0.081717848777771,0.0365908145904541,0.995983600616455 ,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.0571252852678299,-0.340407937765121,0.938540935516357 ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.274222016334534,-0.152747601270676,0.949458003044128 ,-0.183149293065071,-0.2668676674366,0.946170151233673,0.081717848777771,0.0365908145904541,0.995983600616455 ,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.274222016334534,-0.152747601270676,0.949458003044128 ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.308955788612366,0.132258638739586,0.941835463047028 ,-0.318153589963913,-0.0134182879701257,0.947944223880768,0.081717848777771,0.0365908145904541,0.995983600616455 ,-0.247846245765686,0.264629483222961,0.931956827640533,-0.308955788612366,0.132258638739586,0.941835463047028 ,0.081717848777771,0.0365908145904541,0.995983600616455,-0.143103122711182,0.365745604038239,0.919647574424744 ,-0.247846245765686,0.264629483222961,0.931956827640533,0.081717848777771,0.0365908145904541,0.995983600616455 ,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.143103122711182,0.365745604038239,0.919647574424744 ,0.0240920167416334,0.706818819046021,0.706984281539917,0.034081757068634,0.56817638874054,0.82220071554184,0.233674764633179 ,0.535661220550537,0.811457395553589,0.2747623026371,0.666023552417755,0.693482756614685,-0.224320411682129,0.654188752174377 ,0.722300112247467,-0.163695827126503,0.526300370693207,0.834392964839935,0.034081757068634,0.56817638874054 ,0.82220071554184,0.0240920167416334,0.706818819046021,0.706984281539917,-0.436875194311142,0.515262722969055 ,0.737322390079498,-0.332944214344025,0.415709882974625,0.846364855766296,-0.163695827126503,0.526300370693207 ,0.834392964839935,-0.224320411682129,0.654188752174377,0.722300112247467,-0.584827542304993,0.308754056692123 ,0.750098466873169,-0.450771480798721,0.251298606395721,0.856536090373993,-0.332944214344025,0.415709882974625 ,0.846364855766296,-0.436875194311142,0.515262722969055,0.737322390079498,-0.648242235183716,0.0625410452485085 ,0.758861362934113,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.450771480798721,0.251298606395721 ,0.856536090373993,-0.584827542304993,0.308754056692123,0.750098466873169,-0.61853951215744,-0.190050154924393 ,0.762423634529114,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.501288175582886,0.0552607960999012 ,0.863514006137848,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.499736815690994,-0.414954453706741 ,0.760313034057617,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.477663516998291,-0.14585192501545 ,0.866351425647736,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.307833850383759,-0.581823825836182 ,0.752807676792145,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.383112281560898,-0.324924170970917 ,0.864667117595673,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.0688507258892059,-0.668073415756226 ,0.740903198719025,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.230319395661354,-0.457817196846008 ,0.858694553375244,-0.307833850383759,-0.581823825836182,0.752807676792145,0.184999153017998,-0.662078678607941 ,0.726241767406464,0.162060111761093,-0.521743357181549,0.837568163871765,-0.0400415360927582,-0.52651184797287 ,0.849224328994751,-0.0688507258892059,-0.668073415756226,0.740903198719025,0.419496387243271,-0.564626634120941 ,0.710788011550903,0.348768085241318,-0.444183886051178,0.825264513492584,0.162060111761093,-0.521743357181549 ,0.837568163871765,0.184999153017998,-0.662078678607941,0.726241767406464,0.602874755859375,-0.388880640268326 ,0.696644723415375,0.494788855314255,-0.304279118776321,0.814001321792603,0.348768085241318,-0.444183886051178 ,0.825264513492584,0.419496387243271,-0.564626634120941,0.710788011550903,0.710392951965332,-0.158590719103813 ,0.685704588890076,0.580431342124939,-0.120935805141926,0.805278837680817,0.494788855314255,-0.304279118776321 ,0.814001321792603,0.602874755859375,-0.388880640268326,0.696644723415375,0.727535784244537,0.0951134264469147 ,0.67944473028183,0.594111680984497,0.0810576304793358,0.800288081169128,0.580431342124939,-0.120935805141926 ,0.805278837680817,0.710392951965332,-0.158590719103813,0.685704588890076,0.651982724666595,0.337994933128357 ,0.678732573986053,0.533979833126068,0.274454295635223,0.799712657928467,0.594111680984497,0.0810576304793358 ,0.800288081169128,0.727535784244537,0.0951134264469147,0.67944473028183,0.493931025266647,0.53727263212204,0.683644890785217 ,0.408169955015183,0.433131784200668,0.803613185882568,0.533979833126068,0.274454295635223,0.799712657928467 ,0.651982724666595,0.337994933128357,0.678732573986053,0.2747623026371,0.666023552417755,0.693482756614685,0.233674764633179 ,0.535661220550537,0.811457395553589,0.408169955015183,0.433131784200668,0.803613185882568,0.493931025266647 ,0.53727263212204,0.683644890785217,0.034081757068634,0.56817638874054,0.82220071554184,0.0417974554002285,0.434518992900848 ,0.899692296981812,0.192422226071358,0.410055339336395,0.891531467437744,0.233674764633179,0.535661220550537 ,0.811457395553589,-0.163695827126503,0.526300370693207,0.834392964839935,-0.107358939945698,0.402824491262436 ,0.908959031105042,0.0417974554002285,0.434518992900848,0.899692296981812,0.034081757068634,0.56817638874054 ,0.82220071554184,-0.332944214344025,0.415709882974625,0.846364855766296,-0.234948098659515,0.319365561008453 ,0.918044149875641,-0.107358939945698,0.402824491262436,0.908959031105042,-0.163695827126503,0.526300370693207 ,0.834392964839935,-0.450771480798721,0.251298606395721,0.856536090373993,-0.323758065700531,0.195376396179199 ,0.925747692584991,-0.234948098659515,0.319365561008453,0.918044149875641,-0.332944214344025,0.415709882974625 ,0.846364855766296,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.361866801977158,0.0475688315927982 ,0.931015372276306,-0.323758065700531,0.195376396179199,0.925747692584991,-0.450771480798721,0.251298606395721 ,0.856536090373993,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.344122022390366,-0.104039087891579 ,0.933143019676209,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.501288175582886,0.0552607960999012 ,0.863514006137848,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.272957742214203,-0.239076629281044 ,0.931845724582672,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.477663516998291,-0.14585192501545 ,0.866351425647736,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.157753229141235,-0.339445114135742 ,0.927303016185761,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.383112281560898,-0.324924170970917 ,0.864667117595673,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0142518226057291,-0.391459435224533 ,0.92008501291275,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.230319395661354,-0.457817196846008 ,0.858694553375244,0.162060111761093,-0.521743357181549,0.837568163871765,0.13820318877697,-0.388006061315537 ,0.911236047744751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.0400415360927582,-0.52651184797287 ,0.849224328994751,0.348768085241318,-0.444183886051178,0.825264513492584,0.279189854860306,-0.329605966806412 ,0.901894092559814,0.13820318877697,-0.388006061315537,0.911236047744751,0.162060111761093,-0.521743357181549 ,0.837568163871765,0.494788855314255,-0.304279118776321,0.814001321792603,0.38951188325882,-0.224056273698807 ,0.893352866172791,0.279189854860306,-0.329605966806412,0.901894092559814,0.348768085241318,-0.444183886051178 ,0.825264513492584,0.580431342124939,-0.120935805141926,0.805278837680817,0.454289197921753,-0.0856318548321724 ,0.886729121208191,0.38951188325882,-0.224056273698807,0.893352866172791,0.494788855314255,-0.304279118776321 ,0.814001321792603,0.594111680984497,0.0810576304793358,0.800288081169128,0.464658886194229,0.0669254288077354 ,0.88295704126358,0.454289197921753,-0.0856318548321724,0.886729121208191,0.580431342124939,-0.120935805141926 ,0.805278837680817,0.533979833126068,0.274454295635223,0.799712657928467,0.419226229190826,0.21297712624073,0.882547497749329 ,0.464658886194229,0.0669254288077354,0.88295704126358,0.594111680984497,0.0810576304793358,0.800288081169128 ,0.408169955015183,0.433131784200668,0.803613185882568,0.324202924966812,0.332735329866409,0.885539174079895 ,0.419226229190826,0.21297712624073,0.882547497749329,0.533979833126068,0.274454295635223,0.799712657928467,0.233674764633179 ,0.535661220550537,0.811457395553589,0.192422226071358,0.410055339336395,0.891531467437744,0.324202924966812 ,0.332735329866409,0.885539174079895,0.408169955015183,0.433131784200668,0.803613185882568,-0.183556318283081 ,0.567722976207733,0.802494645118713,0.0306328255683184,0.613005936145782,0.789484262466431,0.0251268558204174 ,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,-0.36688569188118 ,0.447914391756058,0.81533282995224,-0.183556318283081,0.567722976207733,0.802494645118713,-0.215900436043739 ,0.635483682155609,0.741314709186554,-0.422100454568863,0.500542402267456,0.755836308002472,-0.494506686925888 ,0.269742369651794,0.826257944107056,-0.36688569188118,0.447914391756058,0.81533282995224,-0.422100454568863 ,0.500542402267456,0.755836308002472,-0.565596282482147,0.300016045570374,0.768173933029175,-0.54912269115448 ,0.0573039166629314,0.833774864673615,-0.494506686925888,0.269742369651794,0.826257944107056,-0.565596282482147 ,0.300016045570374,0.768173933029175,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.523315012454987 ,-0.160613864660263,0.836865901947021,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.626972436904907 ,0.0610111244022846,0.776648700237274,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.420577734708786 ,-0.354520976543427,0.835122287273407,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.597933351993561 ,-0.184150025248528,0.780105412006378,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.2548748254776 ,-0.498156249523163,0.828781723976135,-0.420577734708786,-0.354520976543427,0.835122287273407,-0.482387334108353 ,-0.40233388543129,0.778093755245209,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0486774146556854 ,-0.572135806083679,0.818713128566742,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.295998096466064 ,-0.56403261423111,0.770877659320831,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.170113638043404 ,-0.566585600376129,0.806251883506775,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.0639727190136909 ,-0.647417724132538,0.75944572687149,0.182335004210472,-0.641266107559204,0.74533998966217,0.371963411569595 ,-0.482319325208664,0.793102324008942,0.170113638043404,-0.566585600376129,0.806251883506775,0.182335004210472 ,-0.641266107559204,0.74533998966217,0.409660339355469,-0.546471178531647,0.730443477630615,0.529680788516998 ,-0.330754697322845,0.781050324440002,0.371963411569595,-0.482319325208664,0.793102324008942,0.409660339355469 ,-0.546471178531647,0.730443477630615,0.587337672710419,-0.375847816467285,0.71677953004837,0.622047901153564 ,-0.132383927702904,0.771706521511078,0.529680788516998,-0.330754697322845,0.781050324440002,0.587337672710419 ,-0.375847816467285,0.71677953004837,0.691395580768585,-0.152425721287727,0.706214249134064,0.636672735214233 ,0.0860606729984283,0.766316771507263,0.622047901153564,-0.132383927702904,0.771706521511078,0.691395580768585 ,-0.152425721287727,0.706214249134064,0.707835674285889,0.0936401560902596,0.700142979621887,0.571585476398468 ,0.295183837413788,0.765608549118042,0.636672735214233,0.0860606729984283,0.766316771507263,0.707835674285889 ,0.0936401560902596,0.700142979621887,0.634431779384613,0.329166561365128,0.699389517307281,0.435493797063828 ,0.466814637184143,0.769694268703461,0.571585476398468,0.295183837413788,0.765608549118042,0.634431779384613 ,0.329166561365128,0.699389517307281,0.481055945158005,0.522368133068085,0.704071521759033,0.246697977185249 ,0.577754318714142,0.778036057949066,0.435493797063828,0.466814637184143,0.769694268703461,0.481055945158005 ,0.522368133068085,0.704071521759033,0.268397808074951,0.647146701812744,0.713557183742523,0.0306328255683184 ,0.613005936145782,0.789484262466431,0.246697977185249,0.577754318714142,0.778036057949066,0.268397808074951 ,0.647146701812744,0.713557183742523,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739 ,0.635483682155609,0.741314709186554,0.0251268558204174,0.686642229557037,0.726561188697815,0.0138044422492385 ,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,-0.422100454568863 ,0.500542402267456,0.755836308002472,-0.215900436043739,0.635483682155609,0.741314709186554,-0.272946208715439 ,0.75020706653595,0.602237343788147,-0.518174409866333,0.589555025100708,0.6196129322052,-0.565596282482147,0.300016045570374 ,0.768173933029175,-0.422100454568863,0.500542402267456,0.755836308002472,-0.518174409866333,0.589555025100708 ,0.6196129322052,-0.688787519931793,0.350962370634079,0.634347856044769,-0.626972436904907,0.0610111244022846 ,0.776648700237274,-0.565596282482147,0.300016045570374,0.768173933029175,-0.688787519931793,0.350962370634079 ,0.634347856044769,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.597933351993561,-0.184150025248528 ,0.780105412006378,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.761736273765564,0.0666655674576759 ,0.644448220729828,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.482387334108353,-0.40233388543129 ,0.778093755245209,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.727181673049927,-0.224953591823578 ,0.648538887500763,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.295998096466064,-0.56403261423111 ,0.770877659320831,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.589768707752228,-0.484505742788315 ,0.646085977554321,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.0639727190136909,-0.647417724132538 ,0.75944572687149,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.368078649044037,-0.676924169063568 ,0.637410223484039,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.182335004210472,-0.641266107559204 ,0.74533998966217,-0.0639727190136909,-0.647417724132538,0.75944572687149,-0.0920489430427551,-0.776246547698975 ,0.6236732006073,0.201069504022598,-0.769039869308472,0.606752574443817,0.409660339355469,-0.546471178531647 ,0.730443477630615,0.182335004210472,-0.641266107559204,0.74533998966217,0.201069504022598,-0.769039869308472 ,0.606752574443817,0.471676796674728,-0.656273901462555,0.58891898393631,0.587337672710419,-0.375847816467285 ,0.71677953004837,0.409660339355469,-0.546471178531647,0.730443477630615,0.471676796674728,-0.656273901462555 ,0.58891898393631,0.6831955909729,-0.45319789648056,0.57258665561676,0.691395580768585,-0.152425721287727,0.706214249134064 ,0.587337672710419,-0.375847816467285,0.71677953004837,0.6831955909729,-0.45319789648056,0.57258665561676,0.807079255580902 ,-0.187228798866272,0.559971868991852,0.707835674285889,0.0936401560902596,0.700142979621887,0.691395580768585 ,-0.152425721287727,0.706214249134064,0.807079255580902,-0.187228798866272,0.559971868991852,0.826618671417236 ,0.105725072324276,0.552742063999176,0.634431779384613,0.329166561365128,0.699389517307281,0.707835674285889 ,0.0936401560902596,0.700142979621887,0.826618671417236,0.105725072324276,0.552742063999176,0.739149928092957 ,0.386077225208282,0.551907360553741,0.481055945158005,0.522368133068085,0.704071521759033,0.634431779384613 ,0.329166561365128,0.699389517307281,0.739149928092957,0.386077225208282,0.551907360553741,0.556476175785065 ,0.615973055362701,0.557594358921051,0.268397808074951,0.647146701812744,0.713557183742523,0.481055945158005 ,0.522368133068085,0.704071521759033,0.556476175785065,0.615973055362701,0.557594358921051,0.303310126066208 ,0.764374732971191,0.56897646188736,0.0251268558204174,0.686642229557037,0.726561188697815,0.268397808074951 ,0.647146701812744,0.713557183742523,0.303310126066208,0.764374732971191,0.56897646188736,0.0138044422492385 ,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,0.0138044422492385 ,0.811234712600708,0.58455765247345,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689 ,0.853318154811859,0.40453627705574,-0.518174409866333,0.589555025100708,0.6196129322052,-0.272946208715439,0.75020706653595 ,0.602237343788147,-0.328935414552689,0.853318154811859,0.40453627705574,-0.609814286231995,0.669305503368378 ,0.424448668956757,-0.688787519931793,0.350962370634079,0.634347856044769,-0.518174409866333,0.589555025100708 ,0.6196129322052,-0.609814286231995,0.669305503368378,0.424448668956757,-0.805227220058441,0.396035611629486 ,0.441321760416031,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.688787519931793,0.350962370634079 ,0.634347856044769,-0.805227220058441,0.396035611629486,0.441321760416031,-0.888783156871796,0.0704197734594345 ,0.452885746955872,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.761736273765564,0.0666655674576759 ,0.644448220729828,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.849202871322632,-0.263590753078461 ,0.457574456930161,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.727181673049927,-0.224953591823578 ,0.648538887500763,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.691821098327637,-0.560874342918396 ,0.454756587743759,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.589768707752228,-0.484505742788315 ,0.646085977554321,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.437908887863159,-0.781264841556549 ,0.444815665483475,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.368078649044037,-0.676924169063568 ,0.637410223484039,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.121754303574562,-0.89501953125 ,0.429087340831757,0.201069504022598,-0.769039869308472,0.606752574443817,-0.0920489430427551,-0.776246547698975 ,0.6236732006073,-0.121754303574562,-0.89501953125,0.429087340831757,0.213988110423088,-0.886772990226746,0.409686177968979 ,0.471676796674728,-0.656273901462555,0.58891898393631,0.201069504022598,-0.769039869308472,0.606752574443817 ,0.213988110423088,-0.886772990226746,0.409686177968979,0.523918509483337,-0.757616579532623,0.389264106750488 ,0.6831955909729,-0.45319789648056,0.57258665561676,0.471676796674728,-0.656273901462555,0.58891898393631,0.523918509483337 ,-0.757616579532623,0.389264106750488,0.766169846057892,-0.525022745132446,0.370587140321732,0.807079255580902 ,-0.187228798866272,0.559971868991852,0.6831955909729,-0.45319789648056,0.57258665561676,0.766169846057892,-0.525022745132446 ,0.370587140321732,0.908073663711548,-0.220386654138565,0.356134712696075,0.826618671417236,0.105725072324276 ,0.552742063999176,0.807079255580902,-0.187228798866272,0.559971868991852,0.908073663711548,-0.220386654138565 ,0.356134712696075,0.930448770523071,0.115156330168247,0.347856402397156,0.739149928092957,0.386077225208282 ,0.551907360553741,0.826618671417236,0.105725072324276,0.552742063999176,0.930448770523071,0.115156330168247 ,0.347856402397156,0.830271482467651,0.436247199773788,0.346897125244141,0.556476175785065,0.615973055362701 ,0.557594358921051,0.739149928092957,0.386077225208282,0.551907360553741,0.830271482467651,0.436247199773788 ,0.346897125244141,0.621051132678986,0.699568390846252,0.353411287069321,0.303310126066208,0.764374732971191 ,0.56897646188736,0.556476175785065,0.615973055362701,0.557594358921051,0.621051132678986,0.699568390846252,0.353411287069321 ,0.331061065196991,0.869544088840485,0.366458177566528,0.0138044422492385,0.811234712600708,0.58455765247345 ,0.303310126066208,0.764374732971191,0.56897646188736,0.331061065196991,0.869544088840485,0.366458177566528,-0.000517124892212451 ,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.000517124892212451 ,0.923211693763733,0.384291529655457,-0.00916329398751259,0.9673011302948,0.253465056419373,-0.354367077350616 ,0.893833041191101,0.274748027324677,-0.609814286231995,0.669305503368378,0.424448668956757,-0.328935414552689 ,0.853318154811859,0.40453627705574,-0.354367077350616,0.893833041191101,0.274748027324677,-0.649618446826935 ,0.700406491756439,0.295679837465286,-0.805227220058441,0.396035611629486,0.441321760416031,-0.609814286231995 ,0.669305503368378,0.424448668956757,-0.649618446826935,0.700406491756439,0.295679837465286,-0.855028748512268 ,0.413159251213074,0.313409119844437,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.805227220058441 ,0.396035611629486,0.441321760416031,-0.855028748512268,0.413159251213074,0.313409119844437,-0.942859053611755 ,0.0708882212638855,0.325563609600067,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.888783156871796 ,0.0704197734594345,0.452885746955872,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.901254296302795 ,-0.280208140611649,0.33049076795578,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.849202871322632 ,-0.263590753078461,0.457574456930161,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.735823094844818 ,-0.592702567577362,0.327518105506897,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.691821098327637 ,-0.560874342918396,0.454756587743759,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.468927621841431 ,-0.824368357658386,0.317054718732834,-0.121754303574562,-0.89501953125,0.429087340831757,-0.437908887863159 ,-0.781264841556549,0.444815665483475,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.136601343750954 ,-0.943935394287109,0.300542861223221,0.213988110423088,-0.886772990226746,0.409686177968979,-0.121754303574562 ,-0.89501953125,0.429087340831757,-0.136601343750954,-0.943935394287109,0.300542861223221,0.21633192896843,-0.935254573822021 ,0.280177354812622,0.523918509483337,-0.757616579532623,0.389264106750488,0.213988110423088,-0.886772990226746 ,0.409686177968979,0.21633192896843,-0.935254573822021,0.280177354812622,0.542101740837097,-0.799496412277222 ,0.258710563182831,0.766169846057892,-0.525022745132446,0.370587140321732,0.523918509483337,-0.757616579532623 ,0.389264106750488,0.542101740837097,-0.799496412277222,0.258710563182831,0.796745836734772,-0.555020034313202 ,0.239058271050453,0.908073663711548,-0.220386654138565,0.356134712696075,0.766169846057892,-0.525022745132446 ,0.370587140321732,0.796745836734772,-0.555020034313202,0.239058271050453,0.945919096469879,-0.234794244170189 ,0.22384974360466,0.930448770523071,0.115156330168247,0.347856402397156,0.908073663711548,-0.220386654138565 ,0.356134712696075,0.945919096469879,-0.234794244170189,0.22384974360466,0.969435811042786,0.117914944887161 ,0.215151831507683,0.830271482467651,0.436247199773788,0.346897125244141,0.930448770523071,0.115156330168247 ,0.347856402397156,0.969435811042786,0.117914944887161,0.215151831507683,0.864136636257172,0.455431222915649 ,0.214126899838448,0.621051132678986,0.699568390846252,0.353411287069321,0.830271482467651,0.436247199773788 ,0.346897125244141,0.864136636257172,0.455431222915649,0.214126899838448,0.644224345684052,0.732226133346558 ,0.220952302217484,0.331061065196991,0.869544088840485,0.366458177566528,0.621051132678986,0.699568390846252 ,0.353411287069321,0.644224345684052,0.732226133346558,0.220952302217484,0.339384973049164,0.910898625850677 ,0.234694600105286,-0.000517124892212451,0.923211693763733,0.384291529655457,0.331061065196991,0.869544088840485 ,0.366458177566528,0.339384973049164,0.910898625850677,0.234694600105286,-0.00916329398751259,0.9673011302948 ,0.253465056419373,0.192422226071358,0.410055339336395,0.891531467437744,0.0417974554002285,0.434518992900848 ,0.899692296981812,0.0575622506439686,0.0207394547760487,0.998126447200775,0.0417974554002285,0.434518992900848 ,0.899692296981812,-0.107358939945698,0.402824491262436,0.908959031105042,0.0575622506439686,0.0207394547760487 ,0.998126447200775,-0.107358939945698,0.402824491262436,0.908959031105042,-0.234948098659515,0.319365561008453 ,0.918044149875641,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.234948098659515,0.319365561008453 ,0.918044149875641,-0.323758065700531,0.195376396179199,0.925747692584991,0.0575622506439686,0.0207394547760487 ,0.998126447200775,-0.323758065700531,0.195376396179199,0.925747692584991,-0.361866801977158,0.0475688315927982 ,0.931015372276306,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.361866801977158,0.0475688315927982 ,0.931015372276306,-0.344122022390366,-0.104039087891579,0.933143019676209,0.0575622506439686,0.0207394547760487 ,0.998126447200775,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.272957742214203,-0.239076629281044 ,0.931845724582672,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.272957742214203,-0.239076629281044 ,0.931845724582672,-0.157753229141235,-0.339445114135742,0.927303016185761,0.0575622506439686,0.0207394547760487 ,0.998126447200775,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.0142518226057291,-0.391459435224533 ,0.92008501291275,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.0142518226057291,-0.391459435224533 ,0.92008501291275,0.13820318877697,-0.388006061315537,0.911236047744751,0.0575622506439686,0.0207394547760487 ,0.998126447200775,0.13820318877697,-0.388006061315537,0.911236047744751,0.279189854860306,-0.329605966806412 ,0.901894092559814,0.0575622506439686,0.0207394547760487,0.998126447200775,0.279189854860306,-0.329605966806412 ,0.901894092559814,0.38951188325882,-0.224056273698807,0.893352866172791,0.0575622506439686,0.0207394547760487 ,0.998126447200775,0.38951188325882,-0.224056273698807,0.893352866172791,0.454289197921753,-0.0856318548321724 ,0.886729121208191,0.0575622506439686,0.0207394547760487,0.998126447200775,0.454289197921753,-0.0856318548321724 ,0.886729121208191,0.464658886194229,0.0669254288077354,0.88295704126358,0.0575622506439686,0.0207394547760487 ,0.998126447200775,0.464658886194229,0.0669254288077354,0.88295704126358,0.419226229190826,0.21297712624073,0.882547497749329 ,0.0575622506439686,0.0207394547760487,0.998126447200775,0.419226229190826,0.21297712624073,0.882547497749329 ,0.324202924966812,0.332735329866409,0.885539174079895,0.0575622506439686,0.0207394547760487,0.998126447200775 ,0.324202924966812,0.332735329866409,0.885539174079895,0.192422226071358,0.410055339336395,0.891531467437744 ,0.0575622506439686,0.0207394547760487,0.998126447200775 } LayerElementUV: 0 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193 ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971 ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189 ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103 ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103 ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133 ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381 ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197 ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381 ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541 ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657 ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227 ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189 ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343 ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041 ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388 ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262 ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384 ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219 ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384 ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711 ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434 ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704 ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295 ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711 ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919 ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714 ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721 ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457 ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533 ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668 ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609 ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641 ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477 ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952 ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179 ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091 ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543 ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275 ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265 ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347 ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788 ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292 ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701 ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518 ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106 ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773 ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182 ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717 ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852 ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802 ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301 ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902 ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028 ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265 ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052 ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881 ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353 ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759 ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876 ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883 ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243 ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019 ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086 ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354 ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458 ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145 ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984 ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776 ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498 ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703 ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005 ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694 ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514 ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136 ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914 ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291 ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054 ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134 ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648 ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641 ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501 ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514 ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916 ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246 ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727 ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926 ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313 ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945 ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699 ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488 ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238 ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427 ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571 ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169 ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773 ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855 ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001 ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759 ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486 ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526 ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024 ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928 ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131 ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178 ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772 ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037 ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327 ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132 ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618 ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778 ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092 ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932 ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879 ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267 ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111 ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753 ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917 ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712 ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244 ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589 ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853 ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413 ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591 ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181 ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623 ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009 ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806 ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914 ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502 ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701 ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449 ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809 ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545 ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124 ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685 ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178 ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955 ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233 ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522 ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788 ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333 ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858 ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182 ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997 ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692 ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521 ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427 ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427 ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801 ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498 ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394 ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777 ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967 ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378 ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182 ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182 ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182 ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894 ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921 ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591 ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558 ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692 ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365 ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368 ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543 ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411 ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909 ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001 ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795 ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595 ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929 ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319 ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246 ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587 ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095 ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761 ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699 ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986 ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892 ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831 ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422 ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841 ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562 ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153 ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756 ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266 ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123 ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202 ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361 ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219 ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301 ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226 ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947 ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013 ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182 ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135 ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115 ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869 ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231 ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836 ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449 ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095 ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943 ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909 ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634 ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754 ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949 ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469 ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691 ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411 ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387 ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505 ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175 ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884 ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211 ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369 ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238 ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731 ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672 ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634 ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078 ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088 ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222 ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316 ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045 ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819 ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199 ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759 ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362 ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628 ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116 ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052 ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688 ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646 ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177 ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235 ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975 ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201 ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482 ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303 ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773 ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051 ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464 ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396 ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856 ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004 ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612 ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315 ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162 ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302 ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666 ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726 ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349 ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645 ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925 ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608 ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729 ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505 ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904 ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256 ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973 ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215 ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334 ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766 ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093 ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483 ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089 ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503 ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906 ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111 ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224 ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664 ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219 ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386 ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467 ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715 ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145 ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042 ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589 ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911 ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309 ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737 ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353 ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671 ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867 ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591 ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672 ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654 ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217 ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237 ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014 ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803 ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467 ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254 ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278 ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076 ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065 ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293 ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182 ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982 ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318 ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803 ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098 ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775 ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203 ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511 ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461 ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083 ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674 ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391 ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467 ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997 ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567 ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925 ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404 ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035 ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767 ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183 ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859 ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175 ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153 ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906 ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072 ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718 ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449 ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115 ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521 ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587 ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331 ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873 ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868 ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152 ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234 ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304 ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734 ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086 ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811 ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376 ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811 ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416 ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084 ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821 ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037 ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985 ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476 ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735 ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619 ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169 ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391 ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975 ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484 ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239 ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107 ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224 ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567 ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654 ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557 ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182 ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029 ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566 ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677 ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529 ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426 ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792 ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639 ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413 ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596 ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899 ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912 ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452 ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238 ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541 ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459 ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182 ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286 ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342 ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191 ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598 ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243 ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193 ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442 ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465 ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923 ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469 ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606 ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796 ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159 ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455 ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422 ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185 ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441 ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091 ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489 ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692 ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379 ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832 ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159 ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268 ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897 ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138 ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538 ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041 ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254 ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863 ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607 ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511 ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412 ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093 ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141 ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647 ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053 ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976 ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185 ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219 ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711 ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802 ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016 ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331 ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385 ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885 ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399 ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011 ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597 ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458 ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544 ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551 ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252 ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125 ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748 ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717 ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964 ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863 ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499 ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504 ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682 ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619 ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393 ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586 ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585 ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027 ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854 ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075 ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434 ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353 ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043 ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069 ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817 ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957 ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531 ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966 ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297 ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925 ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983 ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951 ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038 ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843 ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608 ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003 ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476 ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337 ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737 ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529 ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413 ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061 ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845 ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266 ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031 ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075 ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524 ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636 ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248 ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948 ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729 ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808 ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219 ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047 ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019 ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793 ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262 ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278 ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192 ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869 ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409 ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533 ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203 ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798 ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381 ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707 ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858 ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587 ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284 ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955 ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566 ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552 ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576 ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234 ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924 ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093 ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356 ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098 ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198 ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073 ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947 ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007 ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338 ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182 ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421 ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517 ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137 ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926 ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832 ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685 ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432 ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594 ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892 ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207 ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182 ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094 ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112 ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616 ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905 ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666 ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828 ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714 ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831 ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868 ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372 ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579 ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204 ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623 ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398 ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665 ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624 ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595 ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064 ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547 ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637 ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637 ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986 ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761 ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108 ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704 ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631 ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915 ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931 ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868 ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272 ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953 ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621 ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699 ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921 ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247 ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195 ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297 ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018 ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548 ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472 ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786 ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026 ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289 ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217 ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317 ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798 ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684 ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119 ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895 ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566 ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657 ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648 ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405 ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209 ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182 ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049 ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871 ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564 ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182 ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592 ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196 ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287 ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677 ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707 ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964 ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558 ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292 ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369 ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879 ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581 ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516 ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948 ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014 ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099 ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017 ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714 ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938 ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987 ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376 ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365 ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283 ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993 ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462 ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861 ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179 ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091 ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416 ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697 ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603 ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436 ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565 ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863 ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596 ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313 ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162 ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415 ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485 ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717 ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492 ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802 ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126 ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353 ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741 ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369 ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915 ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869 ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941 ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857 ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413 ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263 ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628 ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325 ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516 ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781 ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433 ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901 ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092 ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909 ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625 ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381 ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694 ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245 ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554 ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991 ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085 ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631 ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987 ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418 ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385 ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794 ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319 ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365 ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282 ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057 ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401 ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807 ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026 ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284 ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427 ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571 ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626 ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966 ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936 ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784 ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101 ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047 ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735 ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461 ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583 ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928 ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064 ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293 ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593 ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712 ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917 ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072 ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667 ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965 ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874 ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538 ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843 ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794 ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585 ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715 ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085 ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027 ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929 ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339 ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041 ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593 ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257 ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865 ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218 ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002 ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643 ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033 ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496 ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972 ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797 ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385 ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926 ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969 ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651 ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073 ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589 ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091 ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849 ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145 ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966 ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813 ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549 ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682 ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345 ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198 ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342 ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952 ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792 ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413 ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689 ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692 ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341 ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413 ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857 ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229 ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389 ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644 ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318 ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391 ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803 ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125 ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302 ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012 ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892 ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605 ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789 ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325 ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422 ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616 ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237 ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728 ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332 ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705 ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594 ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323 ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961 ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595 ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625 ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077 ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185 ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946 ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793 ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714 ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911 ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424 ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269 ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858 ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366 ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113 ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989 ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466 ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798 ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643 ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907 ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301 ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673 ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091 ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096 ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179 ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967 ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601 ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869 ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821 ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166 ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871 ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406 ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231 ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583 ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592 ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502 ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902 ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233 ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754 ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585 ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318 ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581 ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387 ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016 ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677 ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467 ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944 ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835 ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048 ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596 ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516 ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361 ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801 ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539 ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536 ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619 ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706 ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908 ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959 ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276 ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093 ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414 ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312 ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915 ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001 ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493 ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274 ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205 ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969 ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574 ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417 ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949 ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531 ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658 ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904 ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587 ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482 ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813 ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414 ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549 ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519 ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291 ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079 ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499 ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704 ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482 ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703 ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315 ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092 ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115 ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262 ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462 ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838 ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031 ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309 ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671 ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812 ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075 ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934 ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445 ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217 ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428 ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437 ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352 ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152 ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883 ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946 ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217 ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594 ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294 ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673 ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989 ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215 ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178 ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971 ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697 ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186 ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828 ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862 ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393 ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785 ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137 ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802 ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093 ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707 ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216 ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906 ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263 ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312 ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126 ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493 ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588 ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353 ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876 ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205 ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334 ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671 ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507 ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395 ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885 ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617 ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816 ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611 ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188 ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624 ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801 ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591 ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872 ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677 ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859 ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067 ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833 ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241 ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753 ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008 ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242 ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127 ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585 ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944 ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235 ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293 ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594 ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388 ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182 ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292 ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437 ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775 ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452 ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378 ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825 ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676 ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151 ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392 ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709 ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407 ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056 ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681 ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495 ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657 ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869 ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949 ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217 ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853 ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542 ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225 ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512 ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641 ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237 ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414 ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135 ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797 ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228 ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131 ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843 ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426 ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817 ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721 ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778 ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033 ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737 ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438 ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162 ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053 ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346 ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016 ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476 ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299 ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765 ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195 ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172 ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753 ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874 ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373 ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253 ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836 ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636 ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746 ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846 ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831 ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435 ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297 ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074 ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185 ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792 ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639 ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363 ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854 ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912 ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238 ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401 ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151 ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379 ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726 ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333 ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193 ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743 ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923 ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113 ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407 ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007 ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574 ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586 ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572 ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898 ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817 ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355 ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363 ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242 ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333 ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207 ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915 ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519 ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544 ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841 ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981 ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856 ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776 ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298 ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747 ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119 ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607 ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449 ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216 ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907 ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098 ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478 ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661 ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789 ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656 ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637 ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916 ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998 ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843 ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073 ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256 ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209 ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557 ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847 ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922 ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766 ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067 ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418 ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945 ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967 ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202 ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237 ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586 ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377 ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614 ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228 ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011 ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935 ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187 ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505 ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701 ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249 ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288 ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198 ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798 ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556 ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672 ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954 ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794 ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053 ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458 ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152 ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255 ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333 ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948 ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407 ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442 ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881 ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077 ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848 ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442 ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047 ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607 ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028 ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524 ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922 ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928 ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683 ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194 ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352 ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337 ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037 ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379 ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186 ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632 ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003 ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204 ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766 ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587 ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284 ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815 ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766 ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552 ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148 ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985 ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148 ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593 ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416 ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805 ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398 ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396 ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575 ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139 ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971 ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255 ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755 ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232 ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146 ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159 ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612 ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088 ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988 ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593 ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938 ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211 ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063 ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969 ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584 ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382 ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772 ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761 ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706 ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931 ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343 ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879 ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235 ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556 ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634 ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232 ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482 ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615 ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465 ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706 ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678 ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646 ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009 ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419 ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097 ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059 ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836 ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826 ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054 ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426 ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095 ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523 ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181 ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434 ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281 ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853 ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474 ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692 ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164 ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879 ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612 ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325 ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094 ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736 ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396 ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113 ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604 ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125 ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454 ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813 ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208 ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171 ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355 ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259 ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881 ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256 ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668 ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886 ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975 ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967 ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853 ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967 ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896 ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146 ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856 ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337 ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159 ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105 ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332 ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896 ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409 ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301 ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146 ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211 ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664 ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039 ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856 ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987 ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969 ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574 ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758 ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774 ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024 ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848 ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837 ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803 ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771 ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944 ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512 ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085 ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472 ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837 ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977 ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173 ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594 ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236 ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413 ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082 ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577 ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986 ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726 ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042 ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941 ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664 ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441 ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802 ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249 ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021 ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992 ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016 ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007 ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679 ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564 ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346 ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245 ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347 ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546 ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375 ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705 ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375 ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682 ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807 ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807 ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299 ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458 ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629 ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985 ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827 ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793 ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793 ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776 ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835 ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541 ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364 ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124 ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341 ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271 ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038 ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458 ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082 ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593 ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896 ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774 ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903 ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126 ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999 ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113 ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504 ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518 ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639 ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756 ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693 ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485 ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158 ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789 ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196 ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822 ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684 ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694 ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229 ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909 ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786 ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413 ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547 ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826 ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975 ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443 ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139 ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445 ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139 ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316 ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195 ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783 ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956 ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314 ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949 ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974 ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385 ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161 ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436 ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499 ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539 ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231 ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978 ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644 ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793 ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138 ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014 ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102 ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719 ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226 ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041 ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953 ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965 ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809 ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625 ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767 ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802 ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031 ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584 ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234 ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214 ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716 ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162 ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652 ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242 ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848 ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742 ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663 ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214 ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676 ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026 ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281 ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501 ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471 ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744 ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386 ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371 ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547 ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424 ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412 ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308 ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237 ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932 ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395 ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964 ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765 ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439 ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814 ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781 ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738 ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245 ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754 ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616 ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856 ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783 ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244 ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314 ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028 ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755 ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493 ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161 ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928 ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969 ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313 ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533 ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923 ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585 ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439 ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072 ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595 ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719 ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834 ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461 ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035 ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961 ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809 ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044 ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767 ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297 ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319 ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439 ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344 ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911 ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438 ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086 ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652 ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257 ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271 ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974 ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378 ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229 ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889 ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481 ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344 ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916 ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113 ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035 ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333 ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982 ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093 ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449 ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641 ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698 ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721 ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791 ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639 ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339 ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778 ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439 ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483 ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444 ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985 ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788 ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789 ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036 ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774 ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535 ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803 ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633 ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265 ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674 ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813 ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729 ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488 ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261 ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986 ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266 ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392 ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022 ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875 ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793 ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439 ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034 ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082 ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703 ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909 ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385 ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175 ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853 ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518 ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391 ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864 ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694 ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134 ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116 ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152 ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803 ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513 ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763 ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533 ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202 ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861 ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423 ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336 ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799 ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267 ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692 ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754 ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939 ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019 ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196 ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577 ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812 ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097 ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148 ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348 ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046 ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397 ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519 ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738 ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629 ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493 ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662 ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985 ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547 ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436 ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933 ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619 ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053 ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845 ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887 ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403 ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322 ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825 ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938 ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625 ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483 ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074 ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902 ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819 ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989 ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789 ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682 ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013 ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999 ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776 ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199 ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223 ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653 ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344 ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567 ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856 ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633 ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974 ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752 ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382 ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158 ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737 ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058 ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696 ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204 ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509 ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662 ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322 ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012 ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425 ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933 ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514 ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405 ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388 ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033 ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755 ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412 ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607 ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329 ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503 ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658 ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374 ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612 ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965 ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048 ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022 ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702 ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798 ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871 ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183 ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026 ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686 ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441 ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027 ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965 ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746 ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264 ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264 ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832 ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264 ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832 ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264 ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832 ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264 ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381 ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173 ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599 ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718 ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573 ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716 ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406 ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849 ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505 ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527 ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705 ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317 ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891 ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125 ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664 ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005 ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411 ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646 ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727 ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479 ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036 ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916 ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329 ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139 ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922 ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667 ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966 ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947 ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397 ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714 ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631 ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703 ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422 ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177 ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827 ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016 ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401 ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739 ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815 ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697 ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604 ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905 ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934 ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085 ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821 ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026 ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963 ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214 ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479 ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957 ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588 ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087 ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243 ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692 ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099 ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532 ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791 ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503 ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335 ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843 ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069 ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397 ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759 ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017 ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887 ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721 ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758 ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103 ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348 ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713 ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427 ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438 ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493 ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631 ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805 ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282 ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393 ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073 ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911 ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105 ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717 ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506 ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356 ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778 ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796 ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739 ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681 ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972 ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302 ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529 ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543 ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943 ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554 ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641 ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085 ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348 ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415 ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949 ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395 ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667 ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384 ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288 ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595 ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471 ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626 ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271 ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193 ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487 ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584 ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934 ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863 ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053 ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457 ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658 ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033 ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761 ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362 ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545 ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561 ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541 ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054 ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947 ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414 ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457 ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947 ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493 ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898 ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854 ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326 ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623 ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623 ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666 ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623 ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666 ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623 ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666 ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623 ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189 ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189 ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649 ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573 ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189 ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194 ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485 ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065 ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296 ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622 ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585 ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548 ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296 ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334 ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997 ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294 ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981 ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236 ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779 ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528 ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978 ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236 ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572 ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427 ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366 ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857 ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455 ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427 ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821 ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366 ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464 ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882 ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198 ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284 ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007 ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526 ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646 ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012 ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055 ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399 ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395 ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348 ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178 ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298 ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594 ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656 ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895 ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712 ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091 ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506 ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358 ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734 ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673 ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688 ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819 ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173 ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504 ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948 ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933 ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462 ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374 ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687 ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874 ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169 ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942 ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258 ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594 ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039 ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058 ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912 ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176 ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588 ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649 ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423 ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892 ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426 ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066 ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939 ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371 ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027 ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941 ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445 ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186 ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303 ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943 ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244 ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319 ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886 ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785 ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449 ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341 ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361 ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546 ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223 ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809 ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425 ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985 ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512 ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143 ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318 ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521 ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339 ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727 ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211 ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016 ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147 ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817 ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345 ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594 ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496 ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134 ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641 ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343 ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339 ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869 ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087 ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312 ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043 ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437 ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556 ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207 ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902 ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219 ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598 ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219 ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572 ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219 ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598 ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219 ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598 ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219 ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943 ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219 ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598 ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489 ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489 ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598 ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489 ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489 ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489 ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598 ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426 ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639 ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219 ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099 ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099 ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219 ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099 ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099 ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099 ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099 ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572 ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627 ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769 ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969 ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366 ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969 ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774 ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333 ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752 ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912 ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969 ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841 ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954 ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874 ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733 ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373 ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841 ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996 ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782 ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402 ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143 ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996 ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791 ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704 ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878 ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626 ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689 ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491 ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516 ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756 ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491 ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491 ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491 ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838 ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231 ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903 ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491 ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667 ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039 ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127 ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034 ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829 ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034 ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919 ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817 ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376 ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107 ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365 ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394 ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512 ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005 ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762 ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073 ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797 ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996 ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961 ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652 ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371 ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471 ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855 ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857 ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742 ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824 ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165 ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544 ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159 ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304 ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052 ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465 ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604 ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885 ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418 ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952 ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744 ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787 ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271 ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956 ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765 ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174 ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895 ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853 ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923 ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062 ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285 ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984 ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487 ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485 ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345 ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459 ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949 ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115 ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371 ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234 ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749 ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003 ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872 ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677 ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736 ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601 ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488 ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379 ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588 ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744 ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365 ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533 ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111 ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683 ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884 ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132 ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009 ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352 ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487 ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753 ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094 ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147 ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296 ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276 ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258 ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242 ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328 ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209 ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408 ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444 ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744 ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189 ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348 ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553 ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813 ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817 ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151 ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666 ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315 ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578 ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315 ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427 ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869 ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045 ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953 ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469 ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199 ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483 ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233 ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983 ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259 ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056 ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114 ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344 ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201 ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787 ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393 ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048 ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726 ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136 ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081 ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525 ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041 ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821 ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141 ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401 ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203 ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048 ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252 ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377 ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443 ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231 ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852 ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422 ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642 ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729 ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628 ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696 ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072 ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508 ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894 ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728 ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823 ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232 ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764 ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132 ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678 ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657 ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221 ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614 ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378 ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101 ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824 ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462 ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847 ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485 ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251 ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588 ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106 ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207 ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301 ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591 ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064 ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513 ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792 ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899 ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687 ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716 ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147 ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609 ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629 ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587 ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061 ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602 ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129 ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097 ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496 ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871 ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729 ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304 ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162 ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452 ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711 ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926 ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932 ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262 ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124 ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343 ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411 ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245 ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936 ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803 ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148 ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041 ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949 ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288 ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867 ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632 ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136 ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569 ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929 ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264 ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125 ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113 ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998 ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839 ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925 ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089 ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943 ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606 ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799 ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593 ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519 ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899 ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376 ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953 ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894 ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433 ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309 ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157 ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123 ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547 ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583 ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052 ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226 ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263 ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374 ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441 ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365 ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827 ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052 ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489 ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326 ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963 ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869 ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591 ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551 ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554 ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624 ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777 ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417 ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217 ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178 ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266 ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256 ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718 ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493 ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411 ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719 ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913 ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167 ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882 ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955 ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649 ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325 ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255 ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884 ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861 ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323 ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561 ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732 ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287 ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153 ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077 ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604 ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723 ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099 ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052 ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661 ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696 ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555 ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121 ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921 ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163 ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999 ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799 ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263 ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706 ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333 ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454 ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966 ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089 ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791 ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507 ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741 ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681 ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343 ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353 ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989 ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761 ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865 ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874 ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515 ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253 ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576 ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218 ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552 ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904 ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864 ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292 ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755 ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155 ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587 ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601 ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909 ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252 ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265 ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148 ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241 ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952 ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867 ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499 ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557 ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203 ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677 ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819 ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731 ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794 ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986 ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596 ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101 ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689 ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563 ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283 ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966 ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416 ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492 ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293 ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329 ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928 ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628 ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142 ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711 ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301 ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019 ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856 ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073 ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582 ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101 ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735 ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171 ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546 ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966 ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847 ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669 ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816 ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271 ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969 ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144 ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889 ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453 ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953 ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483 ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355 ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553 ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552 ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807 ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127 ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769 ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912 ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362 ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681 ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301 ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735 ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558 ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324 ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062 ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897 ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126 ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627 ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095 ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698 ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184 ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311 ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807 ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608 ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066 ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631 ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364 ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613 ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637 ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822 ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064 ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049 ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388 ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871 ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525 ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152 ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264 ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542 ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714 ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178 ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679 ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773 ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899 ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856 ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726 ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275 ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331 ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956 ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286 ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902 ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064 ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992 ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046 ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065 ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093 ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771 ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919 ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174 ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231 ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546 ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135 ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486 ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434 ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853 ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516 ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148 ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862 ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159 ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281 ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019 ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685 ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583 ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801 ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569 ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678 ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398 ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311 ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624 ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072 ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534 ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705 ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058 ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392 ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808 ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182 ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251 ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595 ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462 ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561 ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289 ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591 ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062 ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406 ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422 ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273 ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907 ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748 ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067 ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147 ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061 ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285 ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207 ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035 ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842 ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843 ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121 ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181 ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929 ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205 ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564 ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105 ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942 ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006 ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132 ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452 ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178 ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055 ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998 ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961 ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459 ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692 ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107 ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555 ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523 ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965 ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491 ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866 ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899 ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065 ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058 ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524 ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933 ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833 ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714 ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415 ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849 ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693 ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786 ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248 ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891 ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762 ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805 ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262 ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801 ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649 ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265 ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852 ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239 ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486 ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104 ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275 ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915 ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366 ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247 ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994 ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727 ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625 ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211 ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571 ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855 ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936 ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028 ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311 ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853 ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294 ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689 ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475 ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534 ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296 ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262 ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458 ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576 ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224 ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192 ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659 ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292 ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854 ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667 ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954 ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474 ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496 ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765 ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918 ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234 ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442 ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323 ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508 ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179 ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663 ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915 ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099 ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953 ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099 ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561 ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142 ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527 ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201 ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436 ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195 ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517 ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533 ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886 ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494 ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446 ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232 ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218 ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085 ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347 ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928 ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136 ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283 ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479 ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532 ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573 ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361 ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852 ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387 ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349 ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391 ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577 ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624 ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683 ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114 ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614 ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099 ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604 ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826 ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798 ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116 ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836 ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289 ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151 ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612 ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483 ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287 ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077 ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059 ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541 ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552 ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615 ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552 ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438 ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544 ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911 ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575 ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466 ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738 ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771 ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833 ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851 ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844 ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017 ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389 ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381 ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431 ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248 ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647 ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604 ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743 ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143 ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135 ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105 ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598 ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071 ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036 ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016 ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663 ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761 ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498 ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563 ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107 ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985 ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257 ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906 ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161 ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579 ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338 ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999 ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601 ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367 ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216 ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667 ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579 ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399 ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943 ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309 ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943 ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837 ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907 ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701 ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449 ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131 ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004 ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825 ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839 ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162 ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248 ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573 ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173 ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551 ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622 ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514 ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694 ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746 ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895 ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794 ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256 ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982 ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739 ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528 ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348 ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254 ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999 ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315 ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645 ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786 ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184 ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138 ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643 ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822 ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593 ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705 ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004 ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622 ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445 ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276 ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119 ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756 ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021 ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918 ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715 ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297 ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861 ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532 ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327 ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726 ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033 ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935 ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712 ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401 ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066 ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684 ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507 ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769 ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025 ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788 ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238 ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198 ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442 ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422 ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828 ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674 ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872 ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071 ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138 ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372 ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032 ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568 ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736 ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654 ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647 ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486 ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797 ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231 ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779 ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774 ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293 ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767 ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605 ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791 ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802 ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394 ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095 ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429 ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594 ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718 ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846 ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739 ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413 ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194 ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045 ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878 ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056 ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991 ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075 ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593 ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249 ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553 ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703 ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739 ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957 ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137 ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514 ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253 ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445 ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285 ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507 ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174 ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025 ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016 ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484 ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946 ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923 ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027 ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142 ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955 ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959 ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588 ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862 ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835 ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371 ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649 ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221 ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001 ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212 ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617 ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852 ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272 ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529 ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571 ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167 ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402 ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059 ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922 ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845 ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484 ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134 ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946 ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799 ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152 ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846 ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344 ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634 ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712 ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767 ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896 ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513 ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824 ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436 ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126 ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681 ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107 ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346 ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474 ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814 ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993 ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485 ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569 ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177 ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631 ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575 ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191 ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654 ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791 ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805 ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105 ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864 ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353 ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369 ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879 ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128 ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803 ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568 ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728 ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048 ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721 ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887 ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493 ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541 ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654 ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739 ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811 ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126 ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577 ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316 ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024 ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512 ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663 ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183 ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993 ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874 ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672 ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852 ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213 ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545 ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629 ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769 ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438 ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584 ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542 ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885 ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341 ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608 ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764 ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994 ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566 ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395 ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244 ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863 ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421 ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298 ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857 ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562 ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951 ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106 ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525 ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025 ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655 ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529 ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196 ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211 ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858 ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601 ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026 ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972 ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517 ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404 ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855 ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465 ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925 ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538 ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066 ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374 ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817 ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534 ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956 ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943 ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938 ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861 ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834 ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809 ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992 ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746 ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456 ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815 ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706 ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789 ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591 ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756 ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574 ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455 ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948 ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651 ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686 ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111 ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853 ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524 ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924 ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975 ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757 ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691 ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315 ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324 ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381 ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344 ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401 ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844 ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196 ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418 ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398 ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522 ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685 ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437 ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524 ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954 ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344 ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936 ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318 ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407 ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033 ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092 ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791 ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299 ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534 ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933 ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886 ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962 ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948 ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535 ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283 ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526 ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272 ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807 ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112 ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229 ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593 ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723 ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959 ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508 ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872 ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774 ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491 ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963 ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169 ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043 ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012 ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435 ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189 ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613 ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837 ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475 ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268 ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307 ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897 ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761 ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134 ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111 ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347 ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226 ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311 ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284 ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513 ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504 ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754 ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277 ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662 ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374 ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521 ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302 ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995 ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124 ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597 ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387 ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505 ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043 ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425 ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526 ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425 ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296 ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193 ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371 ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927 ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216 ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302 ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857 ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606 ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049 ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313 ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937 ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547 ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081 ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316 ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013 ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102 ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062 ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082 ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773 ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134 ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551 ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289 ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298 ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368 ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232 ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244 ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757 ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896 ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648 ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179 ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826 ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774 ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951 ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127 ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092 ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548 ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717 ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938 ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157 ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339 ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889 ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367 ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367 ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612 ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612 ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065 ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065 ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556 ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419 ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017 ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845 ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715 ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089 ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965 ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461 ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831 ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829 ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545 ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177 ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883 ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697 ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387 ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964 ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025 ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207 ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904 ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587 ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769 ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004 ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594 ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897 ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296 ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728 ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203 ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597 ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413 ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161 ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359 ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516 ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075 ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709 ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498 ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002 ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516 ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431 ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014 ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501 ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879 ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071 ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488 ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054 ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621 ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581 ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979 ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229 ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853 ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206 ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678 ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031 ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425 ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013 ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524 ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011 ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245 ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545 ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196 ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861 ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417 ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953 ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225 ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125 ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099 ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026 ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506 ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488 ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518 ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614 ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507 ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112 ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837 ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136 ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232 ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973 ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623 ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763 ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747 ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272 ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616 ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115 ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589 ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448 ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921 ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833 ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501 ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896 ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043 ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703 ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337 ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932 ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926 ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719 ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722 ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059 ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724 ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386 ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075 ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982 ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831 ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061 ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882 ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825 ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371 ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662 ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157 ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488 ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213 ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228 ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769 ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445 ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987 ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297 ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301 ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968 ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383 ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316 ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728 ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934 ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062 ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007 ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138 ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685 ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951 ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986 ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596 ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243 ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912 ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292 ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215 ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973 ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905 ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943 ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512 ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145 ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688 ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501 ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606 ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063 ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256 ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822 ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009 ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872 ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118 ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307 ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597 ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128 ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805 ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793 ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287 ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942 ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822 ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087 ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613 ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501 ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905 ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853 ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779 ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323 ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303 ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236 ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301 ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276 ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524 ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811 ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015 ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329 ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264 ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334 ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247 ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133 ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948 ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682 ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794 ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389 ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623 ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202 ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392 ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182 ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062 ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643 ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692 ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449 ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011 ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257 ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773 ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833 ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563 ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795 ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609 ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502 ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668 ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125 ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896 ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252 ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556 ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646 ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215 ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107 ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446 ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764 ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714 ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638 ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395 ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909 ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372 ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249 ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264 ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609 ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581 ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568 ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235 ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337 ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889 ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665 ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375 ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789 ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837 ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324 ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636 ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212 ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615 ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548 ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098 ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755 ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362 ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667 ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625 ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563 ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986 ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454 ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234 ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135 ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538 ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973 ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574 ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557 ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968 ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793 ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841 ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715 ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775 ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791 ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083 ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772 ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374 ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895 ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182 ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671 ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875 ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996 ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791 ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095 ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036 ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128 ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326 ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032 ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638 ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726 ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397 ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745 ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954 ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098 ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755 ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526 ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725 ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627 ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157 ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655 ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994 ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179 ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507 ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814 ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901 ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877 ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012 ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375 ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355 ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281 ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865 ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833 ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743 ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768 ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288 ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473 ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659 ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292 ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964 ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133 ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201 ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293 ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013 ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646 ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588 ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165 ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865 ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227 ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106 ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642 ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765 ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835 ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183 ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227 ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086 ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432 ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513 ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312 ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633 ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022 ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552 ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808 ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386 ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944 ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297 ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484 ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453 ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383 ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065 ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802 ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354 ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872 ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222 ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638 ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807 ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524 ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323 ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165 ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507 ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951 ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215 ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087 ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366 ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399 ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123 ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671 ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742 ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543 ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744 ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924 ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052 ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235 ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116 ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443 ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149 ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659 ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132 ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731 ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403 ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649 ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019 ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981 ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601 ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013 ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236 ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288 ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623 ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255 ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904 ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255 ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155 ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439 ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626 ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971 ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574 ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566 ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699 ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431 ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864 ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974 ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008 ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399 ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344 ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207 ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793 ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829 ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166 ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062 ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816 ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186 ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449 ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567 ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317 ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936 ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294 ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198 ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379 ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029 ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272 ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853 ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239 ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279 ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657 ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565 ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876 ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016 ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383 ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222 ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827 ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765 ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324 ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245 ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762 ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984 ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822 ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933 ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329 ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999 ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249 ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244 ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762 ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181 ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814 ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899 ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994 ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935 ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381 ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414 ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813 ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488 ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838 ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535 ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539 ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418 ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368 ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535 ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638 ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751 ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699 ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256 ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667 ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938 ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555 ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219 ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725 ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928 ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241 ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347 ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236 ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984 ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482 ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451 ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037 ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848 ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874 ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241 ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053 ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048 ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005 ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648 ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505 ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419 ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017 ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875 ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739 ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724 ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275 ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712 ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713 ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484 ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654 ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095 ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804 ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559 ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442 ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595 ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341 ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495 ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061 ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041 ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763 ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135 ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448 ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895 ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482 ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856 ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024 ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903 ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879 ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251 ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624 ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211 ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012 ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039 ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086 ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414 ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186 ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828 ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931 ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358 ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491 ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676 ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334 ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113 ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744 ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392 ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881 ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118 ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168 ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905 ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233 ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275 ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514 ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809 ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269 ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484 ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088 ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686 ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914 ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958 ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479 ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966 ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899 ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556 ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412 ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475 ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419 ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893 ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354 ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738 ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304 ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426 ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402 ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334 ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378 ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619 ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026 ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366 ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826 ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357 ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836 ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441 ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111 ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785 ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583 ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171 ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271 ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103 ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028 ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809 ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838 ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167 ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973 ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605 ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757 ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644 ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991 ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826 ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304 ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994 ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539 ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305 ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558 ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897 ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019 ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033 ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759 ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717 ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223 ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239 ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526 ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592 ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483 ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408 ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798 ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779 ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459 ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879 ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246 ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749 ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677 ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534 ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169 ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977 ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994 ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486 ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222 ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327 ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734 ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447 ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204 ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566 ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782 ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563 ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338 ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982 ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359 ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281 ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264 ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557 ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158 ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866 ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563 ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039 ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088 ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078 ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883 ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169 ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132 ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401 ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909 ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108 ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753 ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792 ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138 ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187 ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589 ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079 ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315 ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202 ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154 ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924 ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005 ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234 ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851 ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654 ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271 ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883 ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445 ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397 ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582 ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158 ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839 ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607 ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543 ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253 ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672 ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351 ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905 ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019 ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227 ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747 ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231 ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234 ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691 ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226 ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641 ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998 ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264 ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812 ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783 ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703 ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797 ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947 ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521 ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391 ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042 ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844 ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766 ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196 ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484 ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111 ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917 ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615 ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737 ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799 ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392 ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258 ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409 ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535 ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536 ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968 ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125 ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141 ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401 ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337 ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667 ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989 ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783 ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194 ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954 ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127 ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776 ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616 ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131 ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774 ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151 ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519 ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157 ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333 ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347 ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901 ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676 ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631 ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012 ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048 ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284 ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556 ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512 ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865 ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786 ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893 ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663 ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037 ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948 ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325 ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938 ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369 ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886 ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355 ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094 ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082 ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589 ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694 ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186 ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473 ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644 ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226 ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226 ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872 ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478 ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123 ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705 ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117 ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519 ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744 ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426 ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368 ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933 ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878 ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548 ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617 ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808 ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183 ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749 ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254 ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987 ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163 ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436 ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426 ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571 ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692 ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373 ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542 ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883 ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455 ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385 ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697 ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125 ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356 ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726 ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193 ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982 ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806 ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181 ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542 ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426 ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398 ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404 ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648 ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877 ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277 ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489 ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004 ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905 ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782 ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988 ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638 ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268 ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245 ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917 ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788 ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177 ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989 ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129 ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108 ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438 ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261 ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425 ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412 ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362 ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276 ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656 ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407 ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997 ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754 ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773 ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882 ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449 ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259 ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101 ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301 ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284 ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786 ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446 ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213 ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925 ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267 ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179 ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427 ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392 ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329 ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498 ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209 ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924 ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917 ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705 ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912 ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832 ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272 ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687 ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374 ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107 ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279 ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471 ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413 ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697 ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824 ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088 ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603 ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676 ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576 ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628 ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526 ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321 ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102 ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627 ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941 ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915 ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629 ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664 ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005 ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458 ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158 ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166 ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454 ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145 ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233 ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521 ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594 ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598 ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266 ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322 ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931 ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497 ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938 ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938 ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427 ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006 ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838 ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933 ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553 ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188 ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537 ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347 ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683 ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111 ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242 ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658 ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144 ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213 ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323 ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323 ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294 ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626 ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544 ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168 ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645 ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757 ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956 ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759 ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203 ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042 ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595 ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542 ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974 ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268 ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205 ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577 ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812 ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989 ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721 ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015 ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966 ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842 ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342 ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754 ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837 ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583 ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271 ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587 ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175 ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402 ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994 ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989 ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104 ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712 ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974 ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782 ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666 ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114 ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187 ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401 ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255 ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059 ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303 ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123 ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032 ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452 ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445 ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429 ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387 ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709 ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402 ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109 ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442 ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282 ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408 ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517 ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282 ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298 ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094 ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286 ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411 ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928 ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935 ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314 ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067 ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521 ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277 ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192 ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546 ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193 ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172 ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141 ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388 ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542 ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044 ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154 ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909 ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984 ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899 ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105 ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976 ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998 ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619 ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695 ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007 ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931 ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564 ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033 ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737 ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931 ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299 ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065 ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384 ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599 ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592 ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483 ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401 ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512 ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582 ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951 ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396 ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481 ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237 ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964 ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704 ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749 ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684 ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208 ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742 ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174 ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281 ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759 ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723 ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376 ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672 ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755 ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683 ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141 ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971 ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269 ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896 ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775 ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464 ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984 ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764 ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039 ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961 ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101 ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941 ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719 ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322 ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111 ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626 ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244 ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901 ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061 ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729 ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927 ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316 ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683 ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114 ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406 ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311 ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899 ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796 ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269 ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149 ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808 ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951 ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033 ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387 ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298 ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363 ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417 ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526 ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964 ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122 ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241 ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446 ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312 ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081 ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239 ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273 ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398 ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875 ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522 ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939 ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865 ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754 ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952 ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264 ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314 ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103 ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874 ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323 ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667 ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542 ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059 ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305 ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476 ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308 ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155 ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553 ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834 ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218 ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777 ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467 ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336 ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919 ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877 ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104 ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976 ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078 ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564 ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191 ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626 ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076 ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927 ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084 ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147 ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355 ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372 ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758 ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788 ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658 ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692 ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661 ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161 ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619 ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949 ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371 ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718 ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849 ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685 ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787 ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819 ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409 ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148 ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676 ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513 ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359 ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079 ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194 ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539 ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625 ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695 ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744 ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488 ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071 ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704 ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242 ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492 ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816 ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732 ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908 ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763 ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327 ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646 ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514 ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084 ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386 ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101 ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385 ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428 ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987 ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883 ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484 ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373 ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658 ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462 ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587 ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865 ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358 ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328 ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711 ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338 ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066 ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667 ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168 ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753 ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501 ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244 ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687 ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246 ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578 ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489 ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344 ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083 ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861 ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144 ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115 ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762 ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515 ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856 ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278 ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699 ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249 ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716 ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617 ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275 ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222 ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765 ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668 ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356 ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064 ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829 ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163 ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914 ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919 ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663 ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282 ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348 ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092 ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691 ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254 ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426 ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086 ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411 ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477 ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754 ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387 ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886 ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322 ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393 ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323 ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383 ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805 ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731 ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783 ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745 ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548 ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141 ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856 ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393 ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819 ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549 ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264 ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259 ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728 ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662 ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994 ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397 ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743 ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432 ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912 ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697 ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586 ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695 ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428 ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084 ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141 ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187 ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701 ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708 ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792 ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552 ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483 ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544 ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508 ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097 ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012 ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559 ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001 ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201 ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676 ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318 ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923 ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571 ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863 ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219 ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546 ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389 ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969 ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588 ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622 ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012 ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577 ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138 ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649 ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702 ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322 ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632 ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957 ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658 ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431 ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986 ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328 ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529 ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019 ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869 ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414 ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775 ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282 ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705 ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856 ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905 ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138 ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005 ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709 ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545 ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871 ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635 ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287 ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739 ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893 ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312 ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956 ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734 ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363 ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742 ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213 ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713 ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885 ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799 ,0.417306035757065,0.26596075296402 UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32 ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23 ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62 ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81 ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100 ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110 ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124 ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133 ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149 ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151 ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177 ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193 ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199 ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206 ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211 ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225 ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239 ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246 ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257 ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243 ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197 ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185 ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275 ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278 ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225 ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139 ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223 ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293 ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139 ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89 ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320 ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333 ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348 ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363 ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375 ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389 ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408 ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423 ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402 ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426 ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455 ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472 ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479 ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500 ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507 ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527 ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540 ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549 ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555 ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322 ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567 ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372 ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592 ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620 ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609 ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640 ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652 ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665 ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685 ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704 ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710 ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703 ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736 ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750 ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762 ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436 ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796 ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808 ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826 ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838 ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699 ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783 ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530 ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890 ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777 ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912 ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904 ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940 ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788 ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970 ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986 ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992 ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980 ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010 ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017 ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026 ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035 ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918 ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050 ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896 ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022 ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729 ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067 ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039 ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931 ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930 ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031 ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577 ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030 ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091 ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975 ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112 ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811 ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813 ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126 ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138 ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144 ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147 ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159 ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168 ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898 ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180 ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900 ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187 ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012 ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059 ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861 ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204 ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164 ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216 ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185 ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224 ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230 ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251 ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262 ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267 ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043 ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274 ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286 ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295 ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300 ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274 ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314 ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305 ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312 ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334 ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337 ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346 ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348 ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358 ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236 ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374 ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380 ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383 ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305 ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274 ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391 ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400 ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377 ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414 ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258 ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423 ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357 ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352 ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200 ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335 ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405 ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423 ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338 ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432 ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375 ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440 ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444 ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456 ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466 ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476 ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446 ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477 ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502 ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507 ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180 ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027 ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519 ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277 ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395 ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995 ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533 ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542 ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523 ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552 ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558 ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563 ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565 ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574 ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353 ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588 ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589 ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597 ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603 ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611 ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614 ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620 ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627 ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629 ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631 ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403 ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639 ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643 ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891 ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650 ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976 ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542 ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665 ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653 ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840 ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081 ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637 ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752 ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952 ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461 ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633 ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313 ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818 ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979 ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691 ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689 ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922 ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710 ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700 ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588 ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722 ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959 ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330 ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531 ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323 ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734 ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742 ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155 ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159 ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746 ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727 ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701 ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764 ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718 ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135 ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758 ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768 ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144 ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698 ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773 ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775 ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749 ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789 ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793 ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136 ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770 ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804 ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208 ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978 ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809 ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672 ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382 ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071 ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447 ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818 ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820 ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815 ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836 ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841 ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836 ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839 ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127 ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858 ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276 ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860 ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207 ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658 ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861 ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877 ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696 ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071 ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760 ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528 ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104 ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673 ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596 ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735 ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810 ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749 ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831 ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462 ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889 ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882 ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915 ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921 ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927 ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938 ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951 ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958 ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946 ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983 ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996 ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965 ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002 ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009 ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013 ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023 ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040 ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045 ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052 ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059 ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051 ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993 ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988 ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034 ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075 ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078 ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081 ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026 ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028 ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088 ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094 ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916 ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101 ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110 ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126 ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139 ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140 ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152 ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162 ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143 ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183 ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197 ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183 ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187 ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215 ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231 ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249 ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232 ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234 ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438 ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263 ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283 ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295 ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450 ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307 ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313 ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323 ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339 ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347 ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361 ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370 ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373 ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645 ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133 ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385 ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345 ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117 ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388 ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399 ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414 ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415 ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434 ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452 ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460 ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428 ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476 ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480 ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491 ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408 ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518 ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534 ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544 ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549 ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533 ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544 ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570 ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576 ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580 ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491 ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598 ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611 ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623 ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634 ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584 ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651 ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660 ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665 ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684 ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698 ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702 ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717 ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729 ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740 ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865 ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755 ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765 ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317 ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762 ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661 ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806 ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811 ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824 ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839 ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645 ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854 ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547 ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873 ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884 ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696 ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745 ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897 ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668 ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773 ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618 ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775 ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933 ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939 ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946 ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830 ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958 ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891 ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777 ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859 ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622 ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732 ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779 ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990 ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998 ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821 ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829 ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922 ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012 ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698 ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838 ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020 ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002 ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028 ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038 ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046 ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736 ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882 ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140 ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716 ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009 ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657 ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078 ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651 ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092 ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092 ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596 ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190 ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194 ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099 ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107 ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495 ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115 ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117 ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564 ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127 ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142 ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153 ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159 ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900 ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173 ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105 ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187 ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192 ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196 ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190 ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214 ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124 ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222 ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152 ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237 ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229 ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240 ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248 ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215 ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256 ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268 ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266 ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278 ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147 ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265 ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289 ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301 ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302 ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305 ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918 ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291 ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248 ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198 ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134 ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315 ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319 ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433 ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322 ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342 ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351 ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350 ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368 ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373 ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559 ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712 ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383 ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389 ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164 ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394 ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608 ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279 ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297 ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407 ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410 ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416 ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174 ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426 ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381 ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436 ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069 ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678 ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447 ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452 ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449 ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444 ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364 ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426 ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475 ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478 ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484 ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487 ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492 ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298 ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500 ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997 ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303 ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290 ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724 ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493 ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386 ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565 ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421 ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350 ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118 ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868 ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737 ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002 ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874 ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523 ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525 ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452 ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799 ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528 ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357 ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339 ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530 ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956 ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064 ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074 ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874 ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609 ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213 ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929 ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808 ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501 ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035 ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032 ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946 ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552 ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065 ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867 ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903 ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799 ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179 ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511 ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550 ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564 ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562 ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565 ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573 ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984 ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583 ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992 ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591 ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895 ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594 ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095 ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164 ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610 ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973 ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612 ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186 ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861 ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957 ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789 ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600 ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243 ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354 ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495 ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315 ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364 ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221 ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258 ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803 ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943 ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153 ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757 ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540 ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519 ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157 ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453 ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997 ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624 ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642 ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660 ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675 ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684 ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694 ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711 ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683 ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733 ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649 ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624 ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630 ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403 ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766 ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784 ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799 ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816 ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782 ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769 ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793 ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802 ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856 ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843 ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875 ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891 ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903 ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925 ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876 ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940 ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943 ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884 ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932 ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962 ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669 ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968 ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957 ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994 ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004 ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957 ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959 ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973 ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013 ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994 ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026 ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039 ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044 ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059 ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046 ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025 ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056 ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080 ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087 ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098 ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109 ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097 ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085 ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102 ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072 ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133 ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123 ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133 ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157 ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166 ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171 ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143 ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179 ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022 ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195 ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200 ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207 ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096 ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087 ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191 ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132 ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221 ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235 ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243 ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255 ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264 ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220 ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253 ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275 ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286 ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282 ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306 ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238 ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282 ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296 ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315 ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324 ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331 ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346 ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321 ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361 ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367 ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374 ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344 ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345 ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391 ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243 ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403 ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298 ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405 ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267 ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315 ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416 ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421 ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431 ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431 ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451 ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465 ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469 ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475 ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481 ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464 ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490 ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501 ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508 ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515 ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522 ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502 ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536 ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506 ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534 ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529 ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558 ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564 ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573 ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583 ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579 ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596 ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607 ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621 ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633 ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642 ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653 ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647 ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418 ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621 ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440 ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643 ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519 ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665 ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471 ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525 ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526 ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668 ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682 ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693 ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679 ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708 ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702 ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723 ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734 ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676 ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669 ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752 ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751 ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761 ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771 ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759 ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794 ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787 ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808 ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819 ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832 ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841 ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779 ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849 ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789 ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763 ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864 ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866 ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846 ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876 ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891 ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899 ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900 ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912 ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925 ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940 ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953 ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964 ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976 ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992 ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004 ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013 ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984 ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025 ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924 ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031 ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939 ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045 ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956 ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037 ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967 ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057 ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985 ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062 ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007 ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071 ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073 ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080 ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093 ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106 ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118 ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120 ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143 ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151 ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163 ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135 ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173 ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076 ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187 ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096 ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185 ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109 ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199 ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122 ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199 ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138 ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210 ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155 ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211 ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221 ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020 ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167 ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238 ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247 ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260 ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269 ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284 ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293 ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300 ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248 ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301 ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305 ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316 ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325 ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338 ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347 ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362 ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371 ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312 ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324 ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367 ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379 ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386 ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398 ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401 ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402 ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425 ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392 ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443 ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449 ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443 ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460 ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425 ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438 ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474 ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476 ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496 ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504 ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479 ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422 ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456 ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457 ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448 ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530 ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483 ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551 ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546 ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563 ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567 ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587 ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547 ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561 ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591 ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607 ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601 ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590 ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602 ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627 ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601 ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605 ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657 ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672 ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685 ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701 ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672 ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714 ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692 ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735 ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741 ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748 ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655 ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745 ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760 ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658 ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695 ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729 ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765 ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783 ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801 ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774 ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790 ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837 ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854 ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862 ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793 ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854 ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823 ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876 ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800 ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795 ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829 ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806 ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771 ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864 ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885 ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904 ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890 ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918 ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915 ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902 ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887 ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840 ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950 ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965 ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981 ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997 ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013 ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024 ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035 ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042 ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053 ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062 ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074 ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045 ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013 ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093 ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980 ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101 ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092 ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114 ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941 ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073 ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958 ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024 ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002 ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087 ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157 ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169 ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123 ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184 ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081 ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188 ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125 ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969 ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201 ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218 ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229 ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237 ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244 ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256 ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275 ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289 ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305 ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321 ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332 ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322 ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352 ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362 ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320 ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228 ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386 ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389 ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360 ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348 ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331 ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273 ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383 ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263 ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427 ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429 ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401 ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404 ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296 ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322 ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414 ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397 ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445 ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005 ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149 ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113 ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105 ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126 ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125 ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214 ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388 ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405 ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409 ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278 ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408 ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298 ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422 ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298 ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222 ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272 ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020 ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457 ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465 ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466 ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497 ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513 ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528 ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506 ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519 ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562 ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557 ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580 ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590 ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597 ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604 ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606 ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614 ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511 ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553 ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478 ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637 ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628 ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608 ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604 ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639 ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648 ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617 ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664 ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674 ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694 ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631 ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704 ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699 ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705 ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677 ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499 ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720 ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735 ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722 ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756 ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733 ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760 ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793 ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796 ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823 ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840 ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856 ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852 ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854 ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872 ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885 ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784 ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925 ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934 ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775 ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961 ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902 ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745 ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980 ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771 ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986 ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801 ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952 ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764 ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784 ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957 ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833 ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962 ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024 ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032 ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048 ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066 ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082 ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100 ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118 ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133 ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142 ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167 ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184 ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197 ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203 ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891 ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025 ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226 ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239 ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233 ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233 ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040 ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257 ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256 ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883 ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937 ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002 ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274 ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279 ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100 ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284 ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285 ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021 ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801 ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289 ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937 ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936 ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941 ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977 ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140 ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297 ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899 ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870 ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988 ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583 ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623 ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462 ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542 ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669 ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310 ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717 ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924 ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864 ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805 ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913 ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998 ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024 ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313 ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315 ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234 ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084 ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061 ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091 ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116 ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326 ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146 ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150 ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329 ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177 ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333 ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329 ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281 ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032 ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248 ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248 ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856 ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280 ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234 ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015 ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264 ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999 ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804 ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870 ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739 ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920 ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474 ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345 ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361 ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372 ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388 ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391 ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408 ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426 ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439 ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427 ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468 ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482 ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450 ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500 ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444 ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435 ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526 ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522 ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484 ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393 ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532 ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555 ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465 ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463 ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546 ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554 ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439 ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574 ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534 ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406 ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545 ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463 ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504 ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591 ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585 ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621 ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631 ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647 ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657 ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651 ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678 ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411 ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601 ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650 ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708 ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722 ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613 ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736 ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747 ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736 ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623 ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645 ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618 ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775 ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661 ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590 ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671 ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617 ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785 ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775 ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783 ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791 ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792 ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724 ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349 ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598 ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519 ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742 ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704 ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399 ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765 ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506 ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355 ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800 ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811 ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826 ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839 ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859 ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875 ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893 ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903 ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925 ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941 ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959 ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975 ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983 ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994 ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966 ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975 ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018 ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035 ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910 ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881 ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033 ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033 ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056 ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020 ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064 ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021 ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884 ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037 ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077 ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814 ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833 ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848 ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854 ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868 ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879 ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888 ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901 ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092 ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093 ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036 ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956 ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985 ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071 ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813 ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993 ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945 ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029 ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057 ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889 ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091 ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829 ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108 ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114 ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057 ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125 ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780 ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511 ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140 ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132 ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158 ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150 ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177 ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164 ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196 ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188 ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148 ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217 ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211 ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129 ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237 ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251 ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244 ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223 ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198 ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159 ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259 ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168 ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238 ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277 ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273 ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303 ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320 ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286 ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343 ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359 ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375 ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393 ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344 ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408 ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370 ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424 ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395 ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288 ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449 ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356 ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463 ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468 ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362 ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322 ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468 ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458 ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453 ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303 ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494 ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507 ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516 ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424 ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470 ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325 ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311 ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461 ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510 ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517 ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410 ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290 ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530 ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499 ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480 ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525 ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300 ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439 ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545 ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549 ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551 ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502 ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193 ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258 ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183 ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142 ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322 ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350 ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562 ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574 ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582 ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589 ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600 ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580 ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598 ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617 ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626 ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634 ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639 ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646 ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634 ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648 ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665 ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668 ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618 ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683 ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689 ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587 ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696 ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694 ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652 ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712 ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713 ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730 ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746 ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754 ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767 ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764 ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708 ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783 ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792 ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800 ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807 ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823 ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838 ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851 ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812 ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884 ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895 ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907 ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921 ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934 ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936 ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955 ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818 ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665 ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868 ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716 ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680 ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780 ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668 ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886 ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817 ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688 ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981 ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942 ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720 ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833 ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709 ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744 ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896 ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011 ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012 ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023 ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905 ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908 ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914 ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929 ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842 ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055 ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063 ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914 ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014 ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045 ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790 ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004 ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796 ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717 ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098 ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107 ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125 ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140 ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152 ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113 ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171 ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144 ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114 ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095 ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182 ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109 ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212 ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207 ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221 ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249 ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270 ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285 ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305 ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316 ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326 ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349 ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365 ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384 ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399 ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412 ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430 ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443 ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450 ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461 ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474 ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488 ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258 ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459 ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338 ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314 ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342 ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510 ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403 ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443 ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444 ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538 ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532 ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561 ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568 ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576 ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566 ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580 ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583 ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605 ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600 ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631 ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246 ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619 ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605 ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639 ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607 ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603 ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585 ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587 ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609 ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655 ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391 ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659 ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458 ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661 ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312 ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316 ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665 ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682 ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482 ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490 ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436 ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556 ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561 ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691 ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446 ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287 ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382 ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473 ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663 ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659 ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414 ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213 ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517 ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135 ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215 ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689 ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469 ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345 ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717 ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717 ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191 ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166 ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219 ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730 ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164 ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192 ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626 ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609 ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522 ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752 ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754 ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777 ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790 ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793 ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772 ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820 ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787 ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831 ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771 ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747 ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844 ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862 ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840 ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883 ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905 ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925 ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941 ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957 ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970 ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979 ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002 ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016 ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031 ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045 ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053 ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067 ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079 ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015 ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049 ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947 ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117 ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129 ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944 ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930 ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984 ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943 ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970 ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124 ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005 ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153 ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159 ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974 ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178 ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173 ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193 ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178 ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170 ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216 ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193 ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213 ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221 ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235 ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253 ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250 ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245 ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886 ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897 ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258 ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264 ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143 ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147 ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161 ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253 ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271 ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232 ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288 ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115 ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152 ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306 ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097 ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093 ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310 ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313 ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945 ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297 ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140 ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085 ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126 ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157 ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332 ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221 ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168 ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141 ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122 ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328 ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154 ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341 ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337 ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115 ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300 ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326 ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344 ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154 ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760 ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845 ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351 ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107 ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075 ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138 ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810 ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358 ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362 ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790 ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855 ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372 ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736 ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858 ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799 ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250 ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215 ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380 ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388 ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393 ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384 ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408 ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417 ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396 ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414 ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418 ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439 ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447 ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395 ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442 ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465 ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465 ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467 ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443 ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481 ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487 ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491 ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496 ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461 ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453 ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402 ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475 ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516 ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417 ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470 ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528 ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542 ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529 ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549 ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566 ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578 ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581 ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586 ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581 ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531 ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595 ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584 ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610 ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619 ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561 ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627 ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638 ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649 ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662 ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672 ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688 ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702 ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710 ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513 ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737 ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751 ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760 ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770 ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762 ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784 ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720 ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536 ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754 ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572 ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387 ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799 ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691 ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779 ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654 ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758 ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795 ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809 ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649 ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595 ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768 ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618 ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568 ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490 ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817 ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667 ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827 ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686 ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837 ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679 ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706 ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855 ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867 ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854 ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871 ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896 ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905 ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917 ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931 ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944 ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954 ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960 ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948 ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904 ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898 ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992 ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004 ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016 ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026 ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042 ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050 ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849 ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005 ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061 ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067 ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076 ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040 ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879 ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996 ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087 ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077 ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983 ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102 ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912 ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944 ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095 ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088 ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925 ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960 ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109 ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892 ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846 ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900 ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869 ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120 ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980 ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980 ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856 ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951 ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932 ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058 ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909 ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125 ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918 ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142 ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157 ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169 ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183 ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187 ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192 ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201 ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209 ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128 ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152 ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141 ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193 ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189 ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174 ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183 ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225 ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032 ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225 ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230 ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202 ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214 ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913 ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192 ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209 ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115 ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512 ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237 ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744 ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661 ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672 ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837 ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262 ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023 ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242 ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253 ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244 ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612 ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810 ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778 ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595 ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922 ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119 ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630 ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290 ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807 ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026 ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946 ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805 ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775 ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999 ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762 ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961 ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794 ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725 ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650 ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681 ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647 ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648 ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766 ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300 ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309 ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318 ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327 ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329 ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329 ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330 ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348 ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363 ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358 ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379 ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355 ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341 ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366 ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388 ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398 ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349 ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425 ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422 ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435 ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404 ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413 ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367 ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418 ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355 ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365 ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440 ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411 ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449 ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465 ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462 ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490 ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508 ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526 ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535 ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533 ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553 ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554 ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568 ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581 ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581 ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547 ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591 ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467 ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616 ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495 ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543 ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643 ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555 ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653 ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667 ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675 ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683 ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688 ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696 ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595 ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608 ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711 ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628 ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719 ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730 ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734 ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743 ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758 ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756 ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657 ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751 ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771 ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782 ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795 ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780 ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713 ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813 ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640 ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477 ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519 ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780 ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796 ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475 ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793 ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712 ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707 ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754 ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499 ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630 ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653 ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804 ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786 ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512 ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847 ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831 ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783 ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603 ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546 ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874 ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605 ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578 ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611 ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673 ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503 ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539 ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886 ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901 ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913 ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906 ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663 ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736 ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660 ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737 ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846 ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952 ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911 ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967 ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468 ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994 ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004 ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022 ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038 ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047 ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054 ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055 ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074 ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071 ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093 ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098 ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061 ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108 ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995 ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126 ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009 ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065 ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047 ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077 ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160 ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174 ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182 ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063 ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195 ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204 ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104 ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119 ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218 ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181 ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226 ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233 ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237 ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246 ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263 ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259 ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166 ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252 ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231 ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285 ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297 ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309 ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218 ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314 ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323 ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990 ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338 ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282 ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336 ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350 ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349 ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964 ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222 ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148 ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049 ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997 ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303 ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321 ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047 ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023 ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311 ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193 ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023 ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283 ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366 ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378 ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074 ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127 ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077 ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102 ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100 ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003 ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395 ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401 ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416 ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170 ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239 ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126 ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235 ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360 ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439 ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448 ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354 ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488 ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590 ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596 ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794 ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791 ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865 ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885 ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703 ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839 ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518 ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048 ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341 ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976 ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356 ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351 ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335 ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357 ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377 ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212 ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390 ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470 ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488 ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493 ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510 ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504 ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524 ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530 ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545 ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559 ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569 ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527 ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582 ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490 ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586 ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505 ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535 ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570 ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514 ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538 ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568 ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470 ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548 ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583 ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583 ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481 ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557 ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476 ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593 ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612 ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629 ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639 ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615 ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660 ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607 ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685 ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603 ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613 ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628 ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634 ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684 ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620 ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674 ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693 ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696 ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714 ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660 ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687 ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720 ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732 ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746 ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755 ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766 ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777 ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742 ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785 ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790 ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749 ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757 ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767 ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787 ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801 ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784 ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810 ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817 ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821 ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773 ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833 ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837 ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840 ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850 ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857 ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868 ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874 ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851 ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883 ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869 ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892 ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856 ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901 ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839 ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910 ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898 ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919 ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891 ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928 ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916 ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937 ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942 ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930 ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950 ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939 ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876 ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882 ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888 ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964 ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975 ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982 ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962 ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996 ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978 ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005 ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963 ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014 ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981 ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023 ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012 ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032 ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021 ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041 ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030 ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050 ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039 ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059 ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048 ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068 ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057 ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077 ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999 ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005 ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } LayerElementSpecularUV: 0 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193 ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971 ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189 ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103 ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103 ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133 ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381 ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197 ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381 ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541 ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657 ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227 ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189 ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343 ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041 ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388 ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262 ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384 ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219 ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384 ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711 ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434 ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704 ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295 ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711 ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919 ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714 ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721 ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457 ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533 ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668 ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609 ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641 ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477 ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952 ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179 ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091 ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543 ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275 ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265 ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347 ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788 ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292 ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701 ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518 ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106 ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773 ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182 ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717 ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852 ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802 ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301 ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902 ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028 ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265 ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052 ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881 ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353 ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759 ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876 ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883 ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243 ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019 ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086 ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354 ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458 ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145 ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984 ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776 ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498 ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703 ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005 ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694 ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514 ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136 ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914 ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291 ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054 ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134 ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648 ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641 ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501 ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514 ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916 ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246 ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727 ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926 ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313 ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945 ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699 ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488 ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238 ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427 ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571 ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169 ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773 ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855 ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001 ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759 ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486 ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526 ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024 ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928 ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131 ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178 ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772 ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037 ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327 ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132 ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618 ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778 ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092 ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932 ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879 ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267 ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111 ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753 ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917 ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712 ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244 ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589 ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853 ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413 ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591 ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181 ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623 ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009 ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806 ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914 ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502 ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701 ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449 ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809 ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545 ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124 ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685 ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178 ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955 ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233 ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522 ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788 ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333 ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858 ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182 ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997 ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692 ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521 ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427 ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427 ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801 ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498 ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394 ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777 ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967 ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378 ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182 ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182 ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182 ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894 ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921 ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591 ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558 ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692 ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365 ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368 ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543 ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411 ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909 ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001 ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795 ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595 ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929 ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319 ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246 ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587 ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095 ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761 ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699 ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986 ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892 ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831 ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422 ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841 ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562 ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153 ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756 ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266 ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123 ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202 ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361 ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219 ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301 ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226 ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947 ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013 ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182 ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135 ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115 ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869 ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231 ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836 ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449 ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095 ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943 ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909 ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634 ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754 ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949 ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469 ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691 ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411 ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387 ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505 ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175 ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884 ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211 ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369 ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238 ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731 ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672 ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634 ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078 ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088 ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222 ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316 ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045 ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819 ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199 ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759 ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362 ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628 ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116 ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052 ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688 ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646 ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177 ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235 ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975 ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201 ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482 ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303 ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773 ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051 ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464 ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396 ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856 ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004 ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612 ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315 ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162 ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302 ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666 ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726 ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349 ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645 ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925 ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608 ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729 ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505 ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904 ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256 ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973 ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215 ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334 ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766 ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093 ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483 ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089 ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503 ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906 ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111 ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224 ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664 ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219 ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386 ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467 ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715 ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145 ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042 ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589 ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911 ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309 ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737 ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353 ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671 ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867 ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591 ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672 ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654 ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217 ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237 ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014 ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803 ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467 ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254 ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278 ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076 ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065 ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293 ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182 ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982 ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318 ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803 ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098 ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775 ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203 ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511 ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461 ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083 ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674 ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391 ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467 ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997 ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567 ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925 ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404 ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035 ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767 ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183 ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859 ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175 ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153 ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906 ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072 ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718 ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449 ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115 ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521 ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587 ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331 ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873 ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868 ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152 ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234 ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304 ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734 ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086 ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811 ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376 ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811 ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416 ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084 ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821 ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037 ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985 ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476 ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735 ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619 ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169 ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391 ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975 ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484 ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239 ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107 ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224 ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567 ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654 ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557 ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182 ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029 ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566 ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677 ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529 ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426 ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792 ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639 ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413 ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596 ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899 ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912 ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452 ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238 ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541 ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459 ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182 ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286 ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342 ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191 ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598 ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243 ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193 ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442 ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465 ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923 ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469 ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606 ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796 ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159 ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455 ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422 ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185 ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441 ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091 ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489 ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692 ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379 ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832 ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159 ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268 ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897 ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138 ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538 ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041 ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254 ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863 ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607 ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511 ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412 ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093 ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141 ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647 ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053 ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976 ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185 ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219 ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711 ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802 ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016 ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331 ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385 ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885 ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399 ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011 ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597 ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458 ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544 ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551 ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252 ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125 ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748 ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717 ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964 ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863 ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499 ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504 ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682 ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619 ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393 ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586 ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585 ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027 ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854 ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075 ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434 ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353 ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043 ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069 ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817 ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957 ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531 ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966 ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297 ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925 ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983 ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951 ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038 ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843 ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608 ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003 ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476 ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337 ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737 ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529 ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413 ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061 ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845 ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266 ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031 ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075 ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524 ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636 ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248 ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948 ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729 ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808 ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219 ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047 ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019 ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793 ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262 ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278 ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192 ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869 ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409 ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533 ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203 ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798 ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381 ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707 ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858 ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587 ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284 ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955 ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566 ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552 ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576 ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234 ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924 ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093 ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356 ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098 ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198 ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073 ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947 ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007 ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338 ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182 ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421 ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517 ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137 ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926 ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832 ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685 ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432 ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594 ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892 ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207 ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182 ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094 ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112 ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616 ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905 ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666 ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828 ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714 ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831 ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868 ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372 ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579 ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204 ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623 ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398 ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665 ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624 ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595 ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064 ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547 ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637 ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637 ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986 ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761 ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108 ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704 ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631 ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915 ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931 ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868 ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272 ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953 ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621 ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699 ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921 ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247 ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195 ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297 ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018 ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548 ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472 ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786 ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026 ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289 ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217 ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317 ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798 ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684 ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119 ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895 ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566 ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657 ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648 ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405 ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209 ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182 ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049 ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871 ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564 ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182 ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592 ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196 ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287 ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677 ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707 ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964 ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558 ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292 ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369 ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879 ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581 ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516 ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948 ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014 ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099 ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017 ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714 ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938 ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987 ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376 ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365 ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283 ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993 ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462 ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861 ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179 ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091 ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416 ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697 ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603 ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436 ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565 ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863 ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596 ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313 ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162 ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415 ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485 ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717 ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492 ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802 ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126 ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353 ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741 ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369 ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915 ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869 ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941 ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857 ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413 ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263 ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628 ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325 ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516 ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781 ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433 ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901 ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092 ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909 ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625 ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381 ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694 ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245 ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554 ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991 ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085 ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631 ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987 ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418 ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385 ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794 ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319 ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365 ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282 ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057 ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401 ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807 ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026 ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284 ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427 ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571 ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626 ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966 ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936 ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784 ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101 ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047 ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735 ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461 ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583 ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928 ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064 ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293 ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593 ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712 ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917 ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072 ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667 ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965 ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874 ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538 ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843 ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794 ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585 ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715 ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085 ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027 ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929 ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339 ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041 ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593 ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257 ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865 ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218 ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002 ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643 ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033 ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496 ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972 ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797 ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385 ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926 ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969 ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651 ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073 ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589 ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091 ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849 ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145 ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966 ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813 ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549 ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682 ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345 ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198 ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342 ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952 ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792 ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413 ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689 ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692 ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341 ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413 ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857 ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229 ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389 ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644 ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318 ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391 ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803 ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125 ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302 ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012 ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892 ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605 ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789 ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325 ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422 ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616 ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237 ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728 ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332 ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705 ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594 ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323 ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961 ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595 ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625 ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077 ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185 ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946 ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793 ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714 ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911 ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424 ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269 ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858 ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366 ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113 ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989 ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466 ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798 ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643 ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907 ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301 ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673 ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091 ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096 ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179 ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967 ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601 ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869 ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821 ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166 ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871 ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406 ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231 ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583 ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592 ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502 ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902 ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233 ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754 ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585 ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318 ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581 ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387 ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016 ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677 ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467 ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944 ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835 ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048 ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596 ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516 ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361 ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801 ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539 ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536 ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619 ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706 ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908 ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959 ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276 ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093 ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414 ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312 ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915 ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001 ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493 ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274 ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205 ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969 ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574 ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417 ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949 ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531 ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658 ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904 ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587 ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482 ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813 ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414 ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549 ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519 ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291 ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079 ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499 ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704 ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482 ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703 ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315 ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092 ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115 ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262 ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462 ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838 ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031 ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309 ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671 ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812 ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075 ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934 ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445 ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217 ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428 ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437 ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352 ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152 ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883 ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946 ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217 ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594 ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294 ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673 ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989 ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215 ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178 ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971 ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697 ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186 ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828 ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862 ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393 ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785 ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137 ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802 ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093 ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707 ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216 ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906 ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263 ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312 ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126 ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493 ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588 ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353 ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876 ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205 ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334 ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671 ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507 ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395 ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885 ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617 ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816 ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611 ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188 ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624 ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801 ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591 ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872 ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677 ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859 ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067 ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833 ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241 ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753 ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008 ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242 ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127 ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585 ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944 ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235 ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293 ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594 ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388 ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182 ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292 ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437 ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775 ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452 ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378 ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825 ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676 ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151 ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392 ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709 ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407 ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056 ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681 ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495 ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657 ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869 ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949 ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217 ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853 ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542 ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225 ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512 ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641 ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237 ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414 ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135 ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797 ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228 ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131 ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843 ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426 ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817 ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721 ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778 ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033 ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737 ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438 ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162 ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053 ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346 ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016 ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476 ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299 ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765 ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195 ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172 ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753 ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874 ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373 ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253 ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836 ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636 ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746 ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846 ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831 ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435 ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297 ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074 ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185 ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792 ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639 ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363 ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854 ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912 ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238 ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401 ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151 ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379 ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726 ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333 ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193 ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743 ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923 ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113 ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407 ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007 ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574 ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586 ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572 ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898 ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817 ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355 ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363 ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242 ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333 ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207 ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915 ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519 ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544 ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841 ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981 ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856 ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776 ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298 ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747 ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119 ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607 ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449 ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216 ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907 ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098 ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478 ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661 ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789 ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656 ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637 ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916 ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998 ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843 ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073 ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256 ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209 ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557 ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847 ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922 ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766 ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067 ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418 ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945 ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967 ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202 ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237 ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586 ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377 ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614 ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228 ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011 ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935 ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187 ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505 ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701 ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249 ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288 ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198 ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798 ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556 ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672 ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954 ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794 ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053 ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458 ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152 ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255 ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333 ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948 ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407 ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442 ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881 ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077 ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848 ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442 ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047 ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607 ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028 ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524 ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922 ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928 ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683 ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194 ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352 ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337 ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037 ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379 ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186 ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632 ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003 ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204 ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766 ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587 ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284 ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815 ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766 ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552 ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148 ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985 ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148 ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593 ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416 ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805 ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398 ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396 ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575 ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139 ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971 ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255 ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755 ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232 ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146 ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159 ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612 ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088 ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988 ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593 ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938 ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211 ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063 ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969 ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584 ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382 ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772 ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761 ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706 ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931 ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343 ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879 ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235 ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556 ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634 ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232 ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482 ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615 ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465 ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706 ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678 ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646 ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009 ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419 ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097 ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059 ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836 ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826 ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054 ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426 ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095 ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523 ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181 ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434 ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281 ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853 ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474 ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692 ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164 ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879 ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612 ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325 ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094 ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736 ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396 ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113 ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604 ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125 ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454 ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813 ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208 ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171 ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355 ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259 ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881 ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256 ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668 ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886 ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975 ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967 ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853 ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967 ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896 ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146 ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856 ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337 ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159 ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105 ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332 ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896 ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409 ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301 ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146 ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211 ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664 ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039 ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856 ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987 ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969 ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574 ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758 ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774 ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024 ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848 ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837 ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803 ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771 ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944 ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512 ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085 ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472 ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837 ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977 ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173 ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594 ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236 ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413 ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082 ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577 ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986 ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726 ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042 ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941 ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664 ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441 ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802 ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249 ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021 ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992 ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016 ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007 ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679 ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564 ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346 ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245 ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347 ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546 ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375 ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705 ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375 ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682 ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807 ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807 ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299 ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458 ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629 ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985 ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827 ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793 ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793 ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776 ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835 ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541 ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364 ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124 ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341 ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271 ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038 ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458 ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082 ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593 ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896 ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774 ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903 ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126 ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999 ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113 ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504 ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518 ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639 ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756 ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693 ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485 ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158 ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789 ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196 ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822 ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684 ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694 ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229 ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909 ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786 ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413 ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547 ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826 ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975 ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443 ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139 ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445 ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139 ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316 ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195 ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783 ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956 ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314 ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949 ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974 ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385 ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161 ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436 ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499 ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539 ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231 ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978 ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644 ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793 ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138 ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014 ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102 ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719 ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226 ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041 ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953 ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965 ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809 ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625 ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767 ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802 ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031 ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584 ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234 ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214 ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716 ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162 ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652 ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242 ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848 ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742 ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663 ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214 ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676 ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026 ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281 ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501 ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471 ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744 ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386 ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371 ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547 ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424 ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412 ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308 ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237 ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932 ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395 ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964 ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765 ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439 ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814 ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781 ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738 ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245 ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754 ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616 ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856 ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783 ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244 ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314 ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028 ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755 ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493 ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161 ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928 ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969 ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313 ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533 ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923 ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585 ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439 ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072 ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595 ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719 ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834 ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461 ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035 ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961 ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809 ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044 ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767 ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297 ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319 ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439 ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344 ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911 ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438 ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086 ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652 ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257 ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271 ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974 ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378 ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229 ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889 ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481 ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344 ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916 ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113 ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035 ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333 ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982 ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093 ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449 ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641 ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698 ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721 ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791 ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639 ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339 ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778 ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439 ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483 ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444 ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985 ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788 ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789 ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036 ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774 ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535 ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803 ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633 ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265 ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674 ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813 ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729 ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488 ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261 ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986 ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266 ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392 ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022 ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875 ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793 ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439 ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034 ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082 ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703 ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909 ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385 ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175 ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853 ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518 ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391 ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864 ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694 ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134 ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116 ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152 ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803 ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513 ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763 ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533 ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202 ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861 ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423 ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336 ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799 ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267 ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692 ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754 ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939 ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019 ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196 ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577 ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812 ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097 ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148 ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348 ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046 ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397 ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519 ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738 ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629 ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493 ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662 ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985 ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547 ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436 ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933 ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619 ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053 ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845 ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887 ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403 ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322 ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825 ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938 ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625 ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483 ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074 ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902 ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819 ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989 ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789 ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682 ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013 ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999 ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776 ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199 ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223 ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653 ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344 ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567 ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856 ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633 ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974 ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752 ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382 ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158 ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737 ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058 ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696 ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204 ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509 ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662 ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322 ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012 ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425 ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933 ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514 ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405 ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388 ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033 ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755 ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412 ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607 ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329 ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503 ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658 ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374 ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612 ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965 ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048 ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022 ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702 ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798 ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871 ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183 ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026 ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686 ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441 ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027 ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965 ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746 ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264 ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264 ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832 ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264 ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832 ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264 ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832 ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264 ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381 ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173 ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599 ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718 ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573 ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716 ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406 ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849 ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505 ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527 ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705 ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317 ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891 ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125 ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664 ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005 ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411 ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646 ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727 ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479 ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036 ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916 ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329 ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139 ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922 ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667 ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966 ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947 ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397 ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714 ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631 ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703 ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422 ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177 ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827 ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016 ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401 ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739 ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815 ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697 ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604 ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905 ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934 ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085 ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821 ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026 ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963 ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214 ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479 ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957 ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588 ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087 ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243 ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692 ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099 ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532 ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791 ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503 ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335 ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843 ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069 ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397 ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759 ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017 ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887 ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721 ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758 ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103 ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348 ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713 ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427 ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438 ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493 ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631 ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805 ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282 ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393 ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073 ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911 ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105 ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717 ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506 ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356 ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778 ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796 ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739 ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681 ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972 ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302 ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529 ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543 ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943 ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554 ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641 ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085 ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348 ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415 ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949 ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395 ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667 ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384 ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288 ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595 ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471 ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626 ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271 ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193 ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487 ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584 ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934 ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863 ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053 ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457 ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658 ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033 ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761 ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362 ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545 ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561 ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541 ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054 ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947 ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414 ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457 ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947 ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493 ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898 ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854 ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326 ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623 ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623 ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666 ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623 ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666 ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623 ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666 ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623 ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189 ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189 ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649 ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573 ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189 ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194 ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485 ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065 ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296 ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622 ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585 ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548 ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296 ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334 ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997 ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294 ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981 ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236 ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779 ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528 ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978 ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236 ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572 ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427 ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366 ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857 ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455 ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427 ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821 ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366 ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464 ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882 ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198 ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284 ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007 ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526 ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646 ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012 ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055 ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399 ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395 ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348 ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178 ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298 ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594 ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656 ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895 ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712 ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091 ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506 ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358 ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734 ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673 ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688 ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819 ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173 ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504 ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948 ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933 ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462 ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374 ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687 ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874 ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169 ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942 ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258 ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594 ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039 ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058 ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912 ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176 ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588 ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649 ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423 ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892 ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426 ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066 ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939 ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371 ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027 ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941 ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445 ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186 ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303 ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943 ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244 ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319 ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886 ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785 ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449 ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341 ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361 ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546 ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223 ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809 ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425 ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985 ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512 ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143 ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318 ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521 ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339 ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727 ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211 ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016 ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147 ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817 ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345 ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594 ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496 ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134 ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641 ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343 ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339 ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869 ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087 ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312 ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043 ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437 ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556 ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207 ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902 ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219 ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598 ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219 ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572 ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219 ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598 ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219 ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598 ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219 ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943 ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219 ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598 ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489 ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489 ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598 ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489 ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489 ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489 ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598 ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426 ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639 ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219 ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099 ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099 ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219 ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099 ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099 ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099 ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099 ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572 ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627 ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769 ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969 ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366 ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969 ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774 ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333 ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752 ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912 ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969 ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841 ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954 ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874 ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733 ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373 ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841 ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996 ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782 ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402 ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143 ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996 ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791 ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704 ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878 ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626 ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689 ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491 ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516 ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756 ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491 ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491 ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491 ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838 ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231 ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903 ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491 ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667 ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039 ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127 ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034 ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829 ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034 ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919 ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817 ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376 ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107 ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365 ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394 ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512 ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005 ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762 ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073 ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797 ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996 ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961 ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652 ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371 ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471 ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855 ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857 ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742 ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824 ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165 ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544 ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159 ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304 ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052 ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465 ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604 ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885 ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418 ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952 ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744 ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787 ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271 ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956 ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765 ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174 ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895 ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853 ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923 ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062 ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285 ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984 ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487 ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485 ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345 ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459 ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949 ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115 ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371 ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234 ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749 ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003 ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872 ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677 ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736 ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601 ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488 ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379 ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588 ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744 ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365 ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533 ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111 ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683 ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884 ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132 ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009 ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352 ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487 ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753 ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094 ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147 ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296 ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276 ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258 ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242 ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328 ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209 ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408 ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444 ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744 ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189 ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348 ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553 ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813 ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817 ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151 ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666 ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315 ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578 ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315 ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427 ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869 ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045 ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953 ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469 ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199 ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483 ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233 ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983 ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259 ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056 ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114 ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344 ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201 ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787 ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393 ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048 ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726 ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136 ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081 ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525 ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041 ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821 ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141 ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401 ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203 ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048 ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252 ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377 ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443 ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231 ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852 ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422 ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642 ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729 ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628 ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696 ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072 ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508 ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894 ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728 ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823 ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232 ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764 ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132 ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678 ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657 ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221 ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614 ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378 ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101 ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824 ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462 ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847 ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485 ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251 ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588 ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106 ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207 ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301 ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591 ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064 ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513 ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792 ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899 ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687 ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716 ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147 ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609 ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629 ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587 ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061 ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602 ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129 ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097 ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496 ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871 ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729 ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304 ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162 ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452 ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711 ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926 ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932 ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262 ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124 ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343 ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411 ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245 ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936 ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803 ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148 ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041 ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949 ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288 ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867 ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632 ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136 ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569 ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929 ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264 ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125 ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113 ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998 ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839 ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925 ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089 ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943 ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606 ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799 ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593 ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519 ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899 ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376 ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953 ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894 ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433 ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309 ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157 ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123 ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547 ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583 ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052 ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226 ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263 ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374 ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441 ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365 ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827 ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052 ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489 ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326 ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963 ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869 ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591 ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551 ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554 ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624 ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777 ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417 ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217 ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178 ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266 ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256 ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718 ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493 ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411 ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719 ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913 ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167 ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882 ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955 ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649 ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325 ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255 ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884 ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861 ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323 ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561 ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732 ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287 ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153 ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077 ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604 ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723 ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099 ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052 ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661 ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696 ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555 ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121 ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921 ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163 ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999 ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799 ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263 ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706 ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333 ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454 ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966 ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089 ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791 ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507 ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741 ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681 ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343 ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353 ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989 ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761 ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865 ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874 ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515 ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253 ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576 ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218 ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552 ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904 ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864 ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292 ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755 ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155 ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587 ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601 ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909 ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252 ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265 ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148 ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241 ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952 ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867 ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499 ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557 ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203 ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677 ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819 ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731 ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794 ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986 ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596 ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101 ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689 ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563 ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283 ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966 ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416 ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492 ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293 ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329 ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928 ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628 ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142 ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711 ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301 ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019 ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856 ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073 ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582 ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101 ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735 ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171 ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546 ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966 ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847 ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669 ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816 ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271 ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969 ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144 ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889 ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453 ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953 ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483 ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355 ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553 ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552 ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807 ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127 ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769 ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912 ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362 ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681 ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301 ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735 ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558 ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324 ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062 ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897 ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126 ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627 ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095 ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698 ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184 ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311 ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807 ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608 ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066 ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631 ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364 ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613 ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637 ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822 ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064 ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049 ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388 ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871 ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525 ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152 ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264 ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542 ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714 ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178 ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679 ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773 ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899 ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856 ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726 ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275 ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331 ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956 ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286 ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902 ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064 ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992 ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046 ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065 ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093 ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771 ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919 ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174 ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231 ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546 ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135 ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486 ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434 ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853 ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516 ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148 ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862 ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159 ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281 ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019 ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685 ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583 ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801 ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569 ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678 ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398 ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311 ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624 ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072 ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534 ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705 ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058 ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392 ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808 ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182 ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251 ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595 ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462 ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561 ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289 ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591 ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062 ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406 ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422 ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273 ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907 ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748 ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067 ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147 ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061 ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285 ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207 ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035 ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842 ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843 ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121 ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181 ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929 ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205 ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564 ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105 ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942 ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006 ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132 ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452 ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178 ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055 ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998 ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961 ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459 ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692 ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107 ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555 ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523 ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965 ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491 ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866 ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899 ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065 ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058 ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524 ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933 ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833 ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714 ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415 ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849 ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693 ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786 ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248 ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891 ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762 ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805 ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262 ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801 ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649 ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265 ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852 ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239 ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486 ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104 ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275 ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915 ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366 ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247 ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994 ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727 ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625 ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211 ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571 ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855 ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936 ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028 ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311 ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853 ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294 ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689 ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475 ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534 ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296 ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262 ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458 ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576 ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224 ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192 ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659 ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292 ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854 ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667 ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954 ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474 ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496 ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765 ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918 ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234 ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442 ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323 ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508 ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179 ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663 ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915 ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099 ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953 ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099 ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561 ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142 ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527 ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201 ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436 ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195 ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517 ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533 ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886 ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494 ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446 ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232 ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218 ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085 ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347 ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928 ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136 ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283 ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479 ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532 ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573 ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361 ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852 ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387 ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349 ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391 ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577 ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624 ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683 ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114 ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614 ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099 ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604 ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826 ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798 ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116 ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836 ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289 ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151 ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612 ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483 ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287 ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077 ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059 ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541 ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552 ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615 ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552 ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438 ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544 ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911 ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575 ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466 ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738 ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771 ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833 ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851 ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844 ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017 ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389 ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381 ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431 ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248 ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647 ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604 ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743 ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143 ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135 ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105 ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598 ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071 ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036 ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016 ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663 ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761 ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498 ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563 ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107 ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985 ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257 ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906 ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161 ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579 ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338 ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999 ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601 ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367 ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216 ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667 ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579 ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399 ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943 ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309 ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943 ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837 ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907 ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701 ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449 ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131 ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004 ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825 ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839 ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162 ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248 ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573 ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173 ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551 ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622 ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514 ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694 ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746 ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895 ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794 ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256 ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982 ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739 ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528 ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348 ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254 ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999 ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315 ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645 ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786 ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184 ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138 ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643 ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822 ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593 ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705 ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004 ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622 ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445 ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276 ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119 ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756 ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021 ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918 ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715 ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297 ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861 ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532 ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327 ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726 ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033 ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935 ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712 ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401 ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066 ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684 ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507 ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769 ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025 ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788 ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238 ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198 ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442 ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422 ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828 ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674 ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872 ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071 ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138 ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372 ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032 ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568 ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736 ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654 ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647 ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486 ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797 ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231 ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779 ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774 ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293 ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767 ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605 ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791 ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802 ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394 ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095 ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429 ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594 ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718 ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846 ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739 ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413 ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194 ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045 ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878 ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056 ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991 ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075 ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593 ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249 ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553 ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703 ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739 ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957 ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137 ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514 ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253 ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445 ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285 ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507 ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174 ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025 ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016 ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484 ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946 ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923 ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027 ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142 ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955 ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959 ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588 ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862 ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835 ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371 ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649 ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221 ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001 ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212 ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617 ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852 ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272 ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529 ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571 ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167 ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402 ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059 ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922 ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845 ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484 ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134 ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946 ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799 ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152 ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846 ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344 ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634 ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712 ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767 ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896 ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513 ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824 ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436 ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126 ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681 ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107 ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346 ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474 ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814 ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993 ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485 ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569 ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177 ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631 ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575 ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191 ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654 ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791 ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805 ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105 ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864 ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353 ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369 ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879 ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128 ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803 ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568 ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728 ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048 ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721 ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887 ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493 ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541 ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654 ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739 ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811 ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126 ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577 ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316 ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024 ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512 ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663 ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183 ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993 ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874 ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672 ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852 ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213 ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545 ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629 ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769 ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438 ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584 ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542 ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885 ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341 ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608 ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764 ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994 ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566 ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395 ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244 ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863 ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421 ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298 ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857 ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562 ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951 ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106 ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525 ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025 ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655 ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529 ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196 ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211 ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858 ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601 ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026 ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972 ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517 ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404 ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855 ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465 ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925 ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538 ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066 ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374 ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817 ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534 ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956 ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943 ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938 ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861 ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834 ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809 ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992 ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746 ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456 ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815 ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706 ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789 ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591 ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756 ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574 ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455 ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948 ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651 ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686 ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111 ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853 ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524 ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924 ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975 ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757 ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691 ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315 ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324 ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381 ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344 ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401 ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844 ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196 ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418 ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398 ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522 ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685 ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437 ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524 ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954 ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344 ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936 ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318 ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407 ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033 ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092 ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791 ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299 ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534 ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933 ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886 ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962 ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948 ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535 ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283 ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526 ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272 ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807 ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112 ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229 ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593 ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723 ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959 ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508 ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872 ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774 ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491 ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963 ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169 ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043 ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012 ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435 ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189 ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613 ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837 ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475 ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268 ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307 ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897 ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761 ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134 ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111 ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347 ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226 ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311 ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284 ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513 ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504 ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754 ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277 ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662 ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374 ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521 ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302 ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995 ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124 ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597 ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387 ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505 ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043 ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425 ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526 ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425 ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296 ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193 ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371 ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927 ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216 ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302 ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857 ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606 ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049 ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313 ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937 ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547 ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081 ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316 ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013 ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102 ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062 ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082 ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773 ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134 ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551 ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289 ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298 ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368 ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232 ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244 ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757 ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896 ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648 ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179 ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826 ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774 ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951 ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127 ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092 ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548 ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717 ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938 ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157 ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339 ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889 ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367 ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367 ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612 ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612 ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065 ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065 ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556 ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419 ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017 ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845 ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715 ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089 ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965 ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461 ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831 ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829 ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545 ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177 ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883 ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697 ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387 ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964 ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025 ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207 ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904 ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587 ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769 ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004 ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594 ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897 ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296 ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728 ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203 ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597 ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413 ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161 ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359 ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516 ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075 ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709 ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498 ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002 ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516 ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431 ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014 ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501 ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879 ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071 ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488 ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054 ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621 ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581 ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979 ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229 ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853 ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206 ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678 ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031 ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425 ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013 ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524 ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011 ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245 ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545 ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196 ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861 ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417 ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953 ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225 ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125 ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099 ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026 ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506 ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488 ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518 ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614 ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507 ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112 ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837 ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136 ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232 ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973 ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623 ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763 ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747 ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272 ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616 ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115 ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589 ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448 ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921 ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833 ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501 ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896 ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043 ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703 ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337 ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932 ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926 ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719 ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722 ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059 ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724 ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386 ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075 ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982 ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831 ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061 ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882 ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825 ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371 ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662 ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157 ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488 ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213 ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228 ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769 ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445 ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987 ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297 ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301 ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968 ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383 ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316 ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728 ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934 ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062 ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007 ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138 ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685 ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951 ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986 ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596 ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243 ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912 ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292 ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215 ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973 ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905 ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943 ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512 ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145 ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688 ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501 ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606 ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063 ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256 ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822 ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009 ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872 ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118 ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307 ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597 ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128 ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805 ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793 ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287 ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942 ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822 ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087 ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613 ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501 ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905 ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853 ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779 ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323 ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303 ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236 ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301 ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276 ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524 ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811 ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015 ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329 ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264 ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334 ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247 ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133 ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948 ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682 ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794 ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389 ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623 ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202 ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392 ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182 ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062 ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643 ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692 ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449 ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011 ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257 ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773 ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833 ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563 ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795 ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609 ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502 ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668 ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125 ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896 ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252 ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556 ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646 ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215 ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107 ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446 ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764 ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714 ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638 ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395 ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909 ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372 ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249 ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264 ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609 ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581 ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568 ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235 ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337 ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889 ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665 ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375 ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789 ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837 ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324 ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636 ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212 ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615 ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548 ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098 ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755 ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362 ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667 ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625 ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563 ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986 ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454 ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234 ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135 ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538 ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973 ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574 ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557 ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968 ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793 ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841 ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715 ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775 ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791 ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083 ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772 ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374 ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895 ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182 ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671 ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875 ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996 ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791 ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095 ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036 ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128 ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326 ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032 ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638 ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726 ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397 ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745 ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954 ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098 ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755 ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526 ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725 ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627 ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157 ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655 ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994 ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179 ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507 ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814 ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901 ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877 ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012 ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375 ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355 ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281 ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865 ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833 ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743 ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768 ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288 ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473 ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659 ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292 ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964 ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133 ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201 ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293 ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013 ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646 ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588 ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165 ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865 ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227 ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106 ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642 ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765 ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835 ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183 ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227 ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086 ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432 ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513 ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312 ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633 ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022 ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552 ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808 ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386 ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944 ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297 ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484 ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453 ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383 ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065 ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802 ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354 ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872 ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222 ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638 ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807 ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524 ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323 ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165 ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507 ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951 ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215 ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087 ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366 ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399 ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123 ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671 ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742 ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543 ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744 ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924 ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052 ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235 ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116 ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443 ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149 ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659 ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132 ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731 ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403 ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649 ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019 ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981 ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601 ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013 ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236 ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288 ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623 ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255 ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904 ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255 ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155 ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439 ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626 ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971 ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574 ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566 ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699 ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431 ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864 ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974 ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008 ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399 ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344 ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207 ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793 ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829 ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166 ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062 ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816 ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186 ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449 ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567 ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317 ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936 ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294 ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198 ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379 ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029 ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272 ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853 ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239 ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279 ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657 ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565 ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876 ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016 ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383 ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222 ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827 ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765 ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324 ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245 ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762 ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984 ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822 ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933 ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329 ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999 ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249 ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244 ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762 ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181 ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814 ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899 ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994 ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935 ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381 ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414 ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813 ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488 ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838 ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535 ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539 ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418 ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368 ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535 ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638 ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751 ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699 ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256 ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667 ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938 ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555 ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219 ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725 ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928 ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241 ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347 ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236 ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984 ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482 ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451 ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037 ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848 ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874 ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241 ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053 ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048 ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005 ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648 ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505 ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419 ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017 ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875 ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739 ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724 ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275 ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712 ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713 ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484 ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654 ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095 ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804 ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559 ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442 ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595 ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341 ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495 ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061 ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041 ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763 ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135 ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448 ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895 ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482 ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856 ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024 ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903 ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879 ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251 ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624 ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211 ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012 ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039 ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086 ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414 ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186 ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828 ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931 ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358 ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491 ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676 ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334 ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113 ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744 ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392 ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881 ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118 ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168 ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905 ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233 ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275 ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514 ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809 ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269 ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484 ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088 ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686 ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914 ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958 ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479 ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966 ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899 ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556 ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412 ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475 ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419 ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893 ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354 ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738 ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304 ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426 ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402 ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334 ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378 ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619 ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026 ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366 ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826 ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357 ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836 ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441 ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111 ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785 ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583 ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171 ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271 ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103 ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028 ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809 ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838 ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167 ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973 ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605 ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757 ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644 ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991 ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826 ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304 ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994 ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539 ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305 ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558 ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897 ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019 ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033 ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759 ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717 ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223 ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239 ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526 ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592 ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483 ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408 ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798 ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779 ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459 ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879 ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246 ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749 ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677 ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534 ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169 ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977 ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994 ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486 ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222 ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327 ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734 ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447 ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204 ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566 ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782 ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563 ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338 ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982 ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359 ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281 ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264 ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557 ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158 ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866 ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563 ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039 ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088 ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078 ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883 ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169 ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132 ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401 ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909 ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108 ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753 ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792 ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138 ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187 ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589 ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079 ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315 ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202 ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154 ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924 ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005 ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234 ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851 ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654 ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271 ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883 ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445 ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397 ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582 ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158 ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839 ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607 ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543 ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253 ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672 ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351 ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905 ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019 ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227 ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747 ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231 ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234 ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691 ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226 ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641 ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998 ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264 ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812 ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783 ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703 ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797 ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947 ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521 ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391 ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042 ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844 ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766 ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196 ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484 ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111 ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917 ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615 ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737 ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799 ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392 ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258 ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409 ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535 ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536 ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968 ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125 ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141 ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401 ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337 ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667 ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989 ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783 ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194 ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954 ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127 ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776 ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616 ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131 ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774 ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151 ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519 ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157 ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333 ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347 ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901 ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676 ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631 ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012 ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048 ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284 ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556 ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512 ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865 ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786 ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893 ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663 ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037 ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948 ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325 ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938 ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369 ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886 ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355 ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094 ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082 ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589 ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694 ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186 ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473 ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644 ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226 ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226 ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872 ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478 ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123 ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705 ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117 ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519 ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744 ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426 ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368 ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933 ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878 ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548 ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617 ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808 ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183 ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749 ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254 ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987 ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163 ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436 ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426 ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571 ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692 ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373 ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542 ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883 ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455 ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385 ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697 ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125 ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356 ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726 ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193 ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982 ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806 ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181 ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542 ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426 ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398 ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404 ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648 ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877 ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277 ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489 ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004 ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905 ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782 ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988 ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638 ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268 ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245 ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917 ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788 ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177 ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989 ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129 ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108 ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438 ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261 ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425 ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412 ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362 ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276 ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656 ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407 ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997 ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754 ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773 ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882 ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449 ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259 ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101 ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301 ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284 ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786 ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446 ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213 ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925 ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267 ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179 ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427 ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392 ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329 ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498 ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209 ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924 ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917 ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705 ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912 ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832 ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272 ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687 ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374 ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107 ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279 ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471 ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413 ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697 ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824 ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088 ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603 ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676 ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576 ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628 ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526 ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321 ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102 ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627 ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941 ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915 ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629 ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664 ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005 ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458 ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158 ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166 ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454 ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145 ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233 ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521 ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594 ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598 ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266 ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322 ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931 ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497 ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938 ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938 ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427 ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006 ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838 ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933 ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553 ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188 ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537 ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347 ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683 ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111 ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242 ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658 ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144 ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213 ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323 ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323 ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294 ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626 ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544 ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168 ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645 ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757 ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956 ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759 ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203 ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042 ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595 ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542 ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974 ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268 ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205 ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577 ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812 ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989 ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721 ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015 ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966 ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842 ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342 ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754 ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837 ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583 ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271 ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587 ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175 ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402 ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994 ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989 ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104 ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712 ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974 ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782 ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666 ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114 ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187 ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401 ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255 ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059 ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303 ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123 ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032 ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452 ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445 ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429 ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387 ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709 ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402 ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109 ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442 ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282 ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408 ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517 ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282 ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298 ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094 ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286 ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411 ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928 ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935 ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314 ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067 ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521 ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277 ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192 ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546 ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193 ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172 ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141 ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388 ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542 ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044 ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154 ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909 ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984 ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899 ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105 ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976 ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998 ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619 ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695 ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007 ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931 ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564 ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033 ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737 ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931 ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299 ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065 ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384 ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599 ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592 ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483 ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401 ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512 ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582 ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951 ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396 ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481 ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237 ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964 ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704 ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749 ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684 ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208 ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742 ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174 ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281 ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759 ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723 ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376 ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672 ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755 ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683 ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141 ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971 ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269 ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896 ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775 ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464 ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984 ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764 ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039 ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961 ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101 ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941 ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719 ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322 ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111 ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626 ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244 ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901 ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061 ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729 ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927 ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316 ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683 ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114 ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406 ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311 ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899 ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796 ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269 ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149 ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808 ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951 ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033 ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387 ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298 ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363 ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417 ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526 ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964 ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122 ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241 ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446 ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312 ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081 ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239 ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273 ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398 ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875 ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522 ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939 ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865 ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754 ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952 ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264 ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314 ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103 ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874 ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323 ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667 ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542 ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059 ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305 ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476 ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308 ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155 ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553 ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834 ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218 ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777 ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467 ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336 ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919 ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877 ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104 ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976 ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078 ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564 ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191 ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626 ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076 ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927 ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084 ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147 ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355 ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372 ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758 ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788 ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658 ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692 ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661 ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161 ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619 ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949 ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371 ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718 ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849 ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685 ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787 ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819 ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409 ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148 ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676 ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513 ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359 ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079 ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194 ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539 ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625 ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695 ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744 ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488 ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071 ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704 ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242 ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492 ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816 ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732 ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908 ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763 ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327 ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646 ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514 ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084 ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386 ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101 ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385 ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428 ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987 ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883 ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484 ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373 ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658 ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462 ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587 ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865 ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358 ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328 ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711 ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338 ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066 ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667 ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168 ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753 ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501 ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244 ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687 ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246 ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578 ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489 ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344 ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083 ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861 ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144 ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115 ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762 ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515 ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856 ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278 ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699 ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249 ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716 ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617 ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275 ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222 ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765 ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668 ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356 ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064 ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829 ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163 ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914 ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919 ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663 ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282 ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348 ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092 ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691 ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254 ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426 ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086 ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411 ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477 ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754 ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387 ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886 ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322 ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393 ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323 ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383 ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805 ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731 ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783 ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745 ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548 ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141 ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856 ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393 ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819 ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549 ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264 ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259 ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728 ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662 ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994 ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397 ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743 ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432 ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912 ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697 ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586 ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695 ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428 ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084 ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141 ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187 ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701 ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708 ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792 ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552 ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483 ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544 ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508 ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097 ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012 ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559 ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001 ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201 ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676 ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318 ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923 ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571 ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863 ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219 ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546 ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389 ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969 ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588 ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622 ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012 ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577 ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138 ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649 ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702 ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322 ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632 ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957 ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658 ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431 ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986 ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328 ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529 ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019 ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869 ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414 ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775 ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282 ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705 ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856 ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905 ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138 ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005 ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709 ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545 ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871 ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635 ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287 ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739 ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893 ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312 ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956 ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734 ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363 ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742 ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213 ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713 ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885 ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799 ,0.417306035757065,0.26596075296402 UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32 ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23 ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62 ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81 ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100 ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110 ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124 ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133 ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149 ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151 ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177 ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193 ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199 ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206 ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211 ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225 ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239 ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246 ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257 ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243 ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197 ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185 ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275 ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278 ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225 ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139 ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223 ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293 ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139 ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89 ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320 ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333 ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348 ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363 ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375 ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389 ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408 ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423 ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402 ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426 ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455 ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472 ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479 ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500 ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507 ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527 ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540 ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549 ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555 ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322 ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567 ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372 ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592 ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620 ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609 ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640 ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652 ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665 ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685 ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704 ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710 ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703 ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736 ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750 ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762 ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436 ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796 ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808 ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826 ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838 ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699 ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783 ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530 ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890 ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777 ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912 ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904 ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940 ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788 ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970 ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986 ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992 ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980 ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010 ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017 ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026 ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035 ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918 ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050 ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896 ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022 ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729 ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067 ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039 ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931 ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930 ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031 ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577 ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030 ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091 ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975 ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112 ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811 ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813 ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126 ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138 ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144 ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147 ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159 ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168 ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898 ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180 ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900 ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187 ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012 ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059 ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861 ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204 ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164 ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216 ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185 ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224 ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230 ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251 ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262 ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267 ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043 ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274 ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286 ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295 ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300 ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274 ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314 ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305 ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312 ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334 ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337 ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346 ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348 ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358 ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236 ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374 ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380 ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383 ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305 ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274 ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391 ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400 ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377 ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414 ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258 ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423 ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357 ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352 ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200 ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335 ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405 ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423 ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338 ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432 ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375 ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440 ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444 ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456 ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466 ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476 ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446 ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477 ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502 ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507 ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180 ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027 ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519 ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277 ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395 ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995 ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533 ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542 ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523 ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552 ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558 ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563 ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565 ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574 ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353 ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588 ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589 ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597 ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603 ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611 ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614 ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620 ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627 ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629 ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631 ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403 ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639 ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643 ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891 ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650 ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976 ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542 ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665 ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653 ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840 ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081 ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637 ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752 ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952 ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461 ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633 ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313 ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818 ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979 ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691 ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689 ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922 ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710 ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700 ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588 ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722 ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959 ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330 ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531 ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323 ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734 ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742 ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155 ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159 ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746 ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727 ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701 ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764 ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718 ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135 ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758 ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768 ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144 ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698 ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773 ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775 ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749 ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789 ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793 ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136 ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770 ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804 ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208 ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978 ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809 ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672 ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382 ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071 ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447 ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818 ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820 ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815 ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836 ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841 ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836 ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839 ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127 ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858 ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276 ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860 ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207 ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658 ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861 ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877 ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696 ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071 ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760 ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528 ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104 ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673 ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596 ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735 ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810 ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749 ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831 ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462 ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889 ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882 ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915 ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921 ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927 ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938 ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951 ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958 ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946 ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983 ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996 ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965 ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002 ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009 ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013 ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023 ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040 ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045 ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052 ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059 ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051 ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993 ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988 ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034 ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075 ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078 ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081 ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026 ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028 ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088 ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094 ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916 ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101 ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110 ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126 ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139 ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140 ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152 ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162 ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143 ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183 ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197 ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183 ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187 ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215 ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231 ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249 ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232 ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234 ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438 ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263 ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283 ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295 ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450 ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307 ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313 ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323 ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339 ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347 ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361 ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370 ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373 ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645 ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133 ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385 ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345 ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117 ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388 ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399 ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414 ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415 ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434 ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452 ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460 ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428 ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476 ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480 ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491 ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408 ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518 ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534 ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544 ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549 ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533 ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544 ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570 ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576 ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580 ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491 ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598 ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611 ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623 ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634 ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584 ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651 ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660 ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665 ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684 ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698 ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702 ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717 ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729 ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740 ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865 ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755 ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765 ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317 ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762 ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661 ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806 ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811 ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824 ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839 ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645 ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854 ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547 ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873 ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884 ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696 ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745 ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897 ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668 ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773 ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618 ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775 ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933 ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939 ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946 ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830 ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958 ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891 ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777 ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859 ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622 ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732 ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779 ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990 ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998 ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821 ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829 ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922 ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012 ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698 ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838 ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020 ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002 ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028 ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038 ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046 ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736 ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882 ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140 ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716 ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009 ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657 ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078 ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651 ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092 ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092 ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596 ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190 ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194 ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099 ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107 ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495 ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115 ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117 ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564 ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127 ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142 ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153 ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159 ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900 ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173 ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105 ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187 ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192 ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196 ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190 ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214 ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124 ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222 ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152 ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237 ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229 ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240 ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248 ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215 ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256 ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268 ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266 ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278 ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147 ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265 ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289 ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301 ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302 ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305 ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918 ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291 ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248 ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198 ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134 ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315 ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319 ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433 ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322 ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342 ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351 ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350 ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368 ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373 ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559 ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712 ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383 ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389 ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164 ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394 ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608 ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279 ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297 ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407 ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410 ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416 ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174 ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426 ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381 ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436 ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069 ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678 ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447 ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452 ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449 ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444 ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364 ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426 ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475 ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478 ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484 ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487 ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492 ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298 ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500 ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997 ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303 ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290 ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724 ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493 ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386 ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565 ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421 ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350 ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118 ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868 ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737 ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002 ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874 ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523 ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525 ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452 ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799 ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528 ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357 ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339 ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530 ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956 ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064 ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074 ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874 ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609 ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213 ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929 ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808 ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501 ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035 ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032 ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946 ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552 ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065 ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867 ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903 ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799 ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179 ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511 ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550 ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564 ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562 ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565 ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573 ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984 ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583 ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992 ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591 ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895 ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594 ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095 ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164 ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610 ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973 ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612 ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186 ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861 ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957 ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789 ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600 ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243 ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354 ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495 ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315 ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364 ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221 ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258 ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803 ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943 ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153 ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757 ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540 ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519 ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157 ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453 ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997 ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624 ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642 ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660 ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675 ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684 ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694 ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711 ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683 ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733 ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649 ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624 ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630 ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403 ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766 ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784 ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799 ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816 ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782 ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769 ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793 ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802 ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856 ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843 ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875 ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891 ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903 ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925 ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876 ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940 ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943 ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884 ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932 ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962 ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669 ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968 ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957 ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994 ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004 ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957 ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959 ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973 ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013 ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994 ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026 ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039 ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044 ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059 ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046 ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025 ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056 ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080 ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087 ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098 ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109 ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097 ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085 ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102 ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072 ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133 ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123 ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133 ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157 ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166 ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171 ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143 ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179 ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022 ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195 ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200 ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207 ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096 ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087 ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191 ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132 ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221 ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235 ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243 ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255 ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264 ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220 ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253 ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275 ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286 ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282 ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306 ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238 ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282 ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296 ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315 ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324 ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331 ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346 ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321 ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361 ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367 ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374 ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344 ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345 ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391 ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243 ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403 ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298 ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405 ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267 ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315 ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416 ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421 ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431 ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431 ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451 ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465 ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469 ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475 ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481 ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464 ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490 ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501 ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508 ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515 ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522 ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502 ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536 ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506 ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534 ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529 ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558 ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564 ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573 ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583 ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579 ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596 ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607 ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621 ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633 ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642 ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653 ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647 ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418 ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621 ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440 ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643 ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519 ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665 ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471 ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525 ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526 ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668 ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682 ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693 ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679 ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708 ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702 ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723 ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734 ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676 ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669 ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752 ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751 ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761 ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771 ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759 ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794 ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787 ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808 ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819 ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832 ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841 ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779 ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849 ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789 ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763 ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864 ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866 ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846 ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876 ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891 ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899 ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900 ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912 ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925 ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940 ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953 ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964 ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976 ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992 ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004 ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013 ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984 ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025 ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924 ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031 ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939 ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045 ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956 ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037 ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967 ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057 ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985 ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062 ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007 ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071 ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073 ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080 ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093 ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106 ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118 ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120 ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143 ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151 ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163 ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135 ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173 ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076 ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187 ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096 ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185 ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109 ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199 ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122 ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199 ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138 ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210 ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155 ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211 ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221 ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020 ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167 ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238 ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247 ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260 ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269 ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284 ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293 ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300 ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248 ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301 ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305 ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316 ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325 ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338 ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347 ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362 ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371 ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312 ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324 ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367 ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379 ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386 ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398 ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401 ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402 ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425 ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392 ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443 ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449 ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443 ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460 ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425 ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438 ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474 ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476 ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496 ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504 ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479 ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422 ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456 ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457 ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448 ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530 ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483 ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551 ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546 ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563 ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567 ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587 ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547 ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561 ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591 ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607 ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601 ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590 ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602 ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627 ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601 ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605 ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657 ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672 ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685 ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701 ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672 ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714 ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692 ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735 ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741 ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748 ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655 ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745 ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760 ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658 ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695 ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729 ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765 ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783 ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801 ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774 ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790 ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837 ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854 ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862 ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793 ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854 ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823 ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876 ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800 ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795 ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829 ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806 ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771 ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864 ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885 ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904 ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890 ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918 ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915 ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902 ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887 ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840 ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950 ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965 ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981 ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997 ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013 ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024 ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035 ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042 ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053 ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062 ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074 ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045 ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013 ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093 ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980 ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101 ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092 ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114 ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941 ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073 ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958 ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024 ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002 ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087 ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157 ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169 ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123 ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184 ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081 ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188 ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125 ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969 ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201 ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218 ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229 ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237 ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244 ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256 ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275 ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289 ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305 ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321 ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332 ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322 ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352 ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362 ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320 ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228 ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386 ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389 ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360 ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348 ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331 ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273 ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383 ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263 ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427 ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429 ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401 ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404 ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296 ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322 ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414 ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397 ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445 ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005 ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149 ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113 ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105 ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126 ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125 ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214 ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388 ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405 ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409 ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278 ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408 ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298 ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422 ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298 ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222 ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272 ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020 ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457 ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465 ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466 ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497 ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513 ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528 ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506 ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519 ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562 ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557 ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580 ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590 ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597 ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604 ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606 ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614 ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511 ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553 ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478 ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637 ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628 ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608 ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604 ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639 ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648 ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617 ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664 ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674 ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694 ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631 ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704 ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699 ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705 ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677 ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499 ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720 ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735 ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722 ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756 ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733 ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760 ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793 ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796 ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823 ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840 ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856 ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852 ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854 ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872 ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885 ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784 ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925 ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934 ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775 ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961 ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902 ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745 ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980 ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771 ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986 ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801 ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952 ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764 ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784 ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957 ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833 ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962 ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024 ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032 ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048 ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066 ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082 ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100 ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118 ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133 ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142 ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167 ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184 ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197 ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203 ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891 ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025 ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226 ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239 ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233 ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233 ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040 ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257 ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256 ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883 ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937 ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002 ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274 ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279 ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100 ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284 ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285 ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021 ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801 ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289 ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937 ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936 ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941 ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977 ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140 ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297 ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899 ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870 ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988 ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583 ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623 ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462 ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542 ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669 ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310 ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717 ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924 ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864 ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805 ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913 ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998 ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024 ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313 ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315 ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234 ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084 ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061 ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091 ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116 ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326 ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146 ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150 ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329 ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177 ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333 ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329 ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281 ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032 ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248 ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248 ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856 ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280 ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234 ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015 ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264 ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999 ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804 ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870 ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739 ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920 ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474 ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345 ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361 ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372 ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388 ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391 ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408 ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426 ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439 ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427 ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468 ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482 ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450 ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500 ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444 ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435 ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526 ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522 ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484 ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393 ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532 ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555 ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465 ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463 ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546 ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554 ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439 ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574 ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534 ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406 ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545 ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463 ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504 ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591 ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585 ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621 ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631 ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647 ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657 ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651 ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678 ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411 ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601 ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650 ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708 ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722 ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613 ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736 ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747 ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736 ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623 ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645 ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618 ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775 ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661 ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590 ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671 ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617 ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785 ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775 ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783 ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791 ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792 ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724 ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349 ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598 ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519 ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742 ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704 ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399 ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765 ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506 ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355 ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800 ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811 ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826 ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839 ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859 ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875 ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893 ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903 ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925 ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941 ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959 ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975 ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983 ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994 ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966 ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975 ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018 ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035 ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910 ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881 ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033 ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033 ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056 ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020 ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064 ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021 ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884 ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037 ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077 ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814 ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833 ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848 ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854 ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868 ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879 ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888 ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901 ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092 ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093 ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036 ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956 ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985 ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071 ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813 ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993 ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945 ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029 ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057 ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889 ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091 ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829 ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108 ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114 ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057 ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125 ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780 ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511 ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140 ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132 ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158 ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150 ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177 ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164 ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196 ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188 ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148 ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217 ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211 ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129 ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237 ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251 ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244 ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223 ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198 ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159 ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259 ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168 ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238 ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277 ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273 ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303 ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320 ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286 ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343 ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359 ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375 ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393 ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344 ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408 ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370 ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424 ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395 ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288 ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449 ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356 ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463 ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468 ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362 ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322 ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468 ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458 ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453 ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303 ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494 ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507 ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516 ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424 ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470 ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325 ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311 ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461 ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510 ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517 ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410 ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290 ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530 ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499 ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480 ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525 ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300 ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439 ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545 ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549 ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551 ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502 ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193 ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258 ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183 ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142 ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322 ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350 ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562 ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574 ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582 ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589 ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600 ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580 ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598 ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617 ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626 ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634 ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639 ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646 ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634 ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648 ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665 ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668 ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618 ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683 ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689 ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587 ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696 ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694 ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652 ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712 ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713 ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730 ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746 ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754 ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767 ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764 ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708 ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783 ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792 ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800 ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807 ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823 ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838 ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851 ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812 ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884 ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895 ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907 ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921 ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934 ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936 ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955 ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818 ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665 ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868 ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716 ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680 ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780 ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668 ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886 ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817 ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688 ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981 ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942 ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720 ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833 ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709 ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744 ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896 ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011 ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012 ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023 ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905 ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908 ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914 ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929 ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842 ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055 ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063 ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914 ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014 ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045 ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790 ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004 ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796 ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717 ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098 ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107 ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125 ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140 ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152 ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113 ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171 ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144 ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114 ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095 ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182 ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109 ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212 ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207 ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221 ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249 ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270 ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285 ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305 ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316 ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326 ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349 ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365 ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384 ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399 ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412 ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430 ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443 ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450 ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461 ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474 ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488 ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258 ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459 ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338 ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314 ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342 ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510 ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403 ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443 ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444 ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538 ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532 ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561 ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568 ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576 ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566 ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580 ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583 ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605 ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600 ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631 ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246 ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619 ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605 ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639 ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607 ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603 ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585 ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587 ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609 ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655 ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391 ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659 ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458 ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661 ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312 ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316 ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665 ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682 ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482 ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490 ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436 ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556 ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561 ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691 ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446 ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287 ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382 ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473 ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663 ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659 ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414 ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213 ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517 ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135 ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215 ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689 ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469 ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345 ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717 ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717 ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191 ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166 ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219 ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730 ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164 ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192 ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626 ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609 ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522 ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752 ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754 ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777 ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790 ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793 ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772 ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820 ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787 ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831 ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771 ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747 ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844 ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862 ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840 ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883 ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905 ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925 ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941 ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957 ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970 ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979 ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002 ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016 ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031 ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045 ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053 ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067 ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079 ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015 ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049 ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947 ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117 ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129 ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944 ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930 ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984 ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943 ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970 ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124 ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005 ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153 ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159 ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974 ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178 ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173 ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193 ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178 ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170 ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216 ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193 ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213 ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221 ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235 ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253 ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250 ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245 ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886 ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897 ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258 ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264 ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143 ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147 ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161 ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253 ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271 ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232 ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288 ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115 ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152 ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306 ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097 ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093 ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310 ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313 ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945 ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297 ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140 ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085 ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126 ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157 ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332 ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221 ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168 ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141 ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122 ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328 ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154 ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341 ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337 ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115 ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300 ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326 ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344 ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154 ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760 ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845 ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351 ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107 ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075 ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138 ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810 ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358 ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362 ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790 ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855 ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372 ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736 ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858 ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799 ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250 ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215 ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380 ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388 ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393 ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384 ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408 ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417 ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396 ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414 ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418 ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439 ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447 ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395 ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442 ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465 ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465 ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467 ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443 ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481 ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487 ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491 ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496 ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461 ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453 ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402 ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475 ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516 ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417 ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470 ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528 ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542 ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529 ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549 ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566 ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578 ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581 ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586 ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581 ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531 ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595 ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584 ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610 ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619 ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561 ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627 ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638 ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649 ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662 ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672 ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688 ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702 ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710 ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513 ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737 ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751 ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760 ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770 ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762 ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784 ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720 ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536 ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754 ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572 ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387 ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799 ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691 ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779 ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654 ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758 ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795 ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809 ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649 ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595 ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768 ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618 ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568 ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490 ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817 ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667 ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827 ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686 ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837 ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679 ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706 ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855 ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867 ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854 ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871 ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896 ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905 ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917 ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931 ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944 ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954 ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960 ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948 ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904 ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898 ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992 ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004 ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016 ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026 ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042 ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050 ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849 ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005 ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061 ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067 ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076 ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040 ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879 ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996 ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087 ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077 ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983 ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102 ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912 ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944 ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095 ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088 ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925 ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960 ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109 ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892 ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846 ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900 ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869 ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120 ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980 ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980 ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856 ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951 ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932 ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058 ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909 ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125 ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918 ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142 ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157 ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169 ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183 ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187 ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192 ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201 ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209 ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128 ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152 ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141 ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193 ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189 ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174 ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183 ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225 ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032 ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225 ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230 ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202 ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214 ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913 ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192 ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209 ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115 ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512 ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237 ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744 ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661 ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672 ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837 ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262 ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023 ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242 ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253 ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244 ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612 ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810 ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778 ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595 ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922 ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119 ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630 ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290 ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807 ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026 ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946 ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805 ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775 ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999 ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762 ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961 ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794 ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725 ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650 ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681 ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647 ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648 ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766 ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300 ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309 ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318 ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327 ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329 ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329 ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330 ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348 ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363 ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358 ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379 ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355 ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341 ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366 ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388 ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398 ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349 ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425 ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422 ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435 ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404 ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413 ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367 ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418 ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355 ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365 ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440 ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411 ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449 ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465 ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462 ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490 ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508 ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526 ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535 ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533 ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553 ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554 ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568 ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581 ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581 ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547 ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591 ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467 ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616 ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495 ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543 ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643 ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555 ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653 ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667 ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675 ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683 ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688 ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696 ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595 ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608 ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711 ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628 ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719 ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730 ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734 ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743 ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758 ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756 ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657 ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751 ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771 ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782 ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795 ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780 ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713 ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813 ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640 ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477 ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519 ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780 ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796 ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475 ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793 ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712 ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707 ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754 ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499 ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630 ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653 ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804 ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786 ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512 ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847 ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831 ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783 ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603 ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546 ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874 ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605 ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578 ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611 ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673 ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503 ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539 ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886 ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901 ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913 ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906 ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663 ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736 ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660 ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737 ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846 ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952 ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911 ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967 ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468 ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994 ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004 ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022 ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038 ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047 ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054 ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055 ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074 ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071 ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093 ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098 ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061 ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108 ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995 ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126 ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009 ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065 ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047 ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077 ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160 ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174 ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182 ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063 ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195 ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204 ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104 ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119 ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218 ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181 ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226 ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233 ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237 ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246 ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263 ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259 ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166 ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252 ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231 ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285 ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297 ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309 ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218 ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314 ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323 ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990 ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338 ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282 ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336 ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350 ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349 ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964 ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222 ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148 ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049 ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997 ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303 ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321 ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047 ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023 ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311 ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193 ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023 ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283 ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366 ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378 ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074 ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127 ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077 ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102 ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100 ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003 ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395 ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401 ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416 ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170 ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239 ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126 ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235 ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360 ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439 ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448 ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354 ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488 ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590 ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596 ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794 ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791 ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865 ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885 ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703 ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839 ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518 ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048 ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341 ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976 ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356 ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351 ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335 ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357 ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377 ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212 ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390 ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470 ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488 ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493 ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510 ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504 ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524 ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530 ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545 ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559 ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569 ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527 ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582 ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490 ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586 ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505 ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535 ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570 ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514 ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538 ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568 ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470 ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548 ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583 ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583 ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481 ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557 ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476 ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593 ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612 ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629 ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639 ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615 ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660 ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607 ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685 ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603 ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613 ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628 ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634 ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684 ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620 ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674 ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693 ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696 ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714 ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660 ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687 ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720 ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732 ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746 ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755 ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766 ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777 ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742 ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785 ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790 ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749 ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757 ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767 ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787 ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801 ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784 ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810 ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817 ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821 ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773 ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833 ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837 ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840 ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850 ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857 ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868 ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874 ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851 ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883 ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869 ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892 ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856 ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901 ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839 ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910 ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898 ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919 ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891 ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928 ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916 ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937 ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942 ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930 ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950 ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939 ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876 ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882 ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888 ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964 ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975 ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982 ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962 ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996 ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978 ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005 ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963 ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014 ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981 ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023 ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012 ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032 ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021 ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041 ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030 ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050 ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039 ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059 ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048 ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068 ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057 ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077 ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999 ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005 ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } LayerElementBumpUV: 0 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193 ,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971 ,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189 ,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103 ,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103 ,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133 ,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381 ,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197 ,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381 ,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541 ,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657 ,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227 ,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189 ,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343 ,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041 ,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388 ,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262 ,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384 ,0.313490509986877,0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219 ,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384 ,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711 ,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434 ,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704 ,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295 ,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711 ,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919 ,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714 ,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721 ,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457 ,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533 ,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668 ,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609 ,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641 ,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477 ,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952 ,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179 ,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288,0.360970288515091 ,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543 ,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275 ,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265 ,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347 ,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788 ,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292 ,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701 ,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518 ,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106 ,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773 ,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182 ,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717 ,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852 ,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802 ,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301 ,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902 ,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028 ,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265 ,0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052 ,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881 ,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353 ,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759 ,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876 ,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883 ,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243 ,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019 ,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086 ,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354 ,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458 ,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145 ,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984 ,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776 ,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498 ,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703 ,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005 ,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055,0.609531939029694 ,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514 ,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136 ,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914 ,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291 ,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054 ,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134 ,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648 ,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641 ,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501 ,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514 ,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916 ,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246 ,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727 ,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926 ,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313 ,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945 ,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699 ,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488 ,0.0914957895874977,0.80051189661026,0.0865048691630363,0.763055205345154,0.080446183681488,0.719281196594238 ,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427 ,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571 ,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169 ,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773 ,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855 ,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001 ,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759 ,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486 ,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526 ,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024 ,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928 ,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131 ,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178 ,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772 ,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037 ,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327 ,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132 ,0.607026278972626,0.453061938285828,0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618 ,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778 ,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092 ,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932 ,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879 ,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267 ,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111 ,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753 ,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917 ,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712 ,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244 ,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589 ,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853 ,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413 ,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591 ,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181 ,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623 ,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653,0.449466496706009 ,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806 ,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914 ,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502 ,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701 ,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449 ,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809 ,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545 ,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124 ,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685 ,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178 ,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955 ,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233 ,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522 ,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788 ,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333 ,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858 ,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182 ,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861,0.34814915060997 ,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692 ,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521 ,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427 ,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427 ,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801 ,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498 ,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394 ,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777 ,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967 ,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378 ,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182 ,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182 ,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182 ,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894 ,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921 ,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591 ,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558 ,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605,0.481752008199692 ,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365 ,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368 ,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543 ,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411 ,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909 ,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001 ,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795 ,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595 ,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929 ,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319 ,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246 ,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587 ,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095 ,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761 ,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699 ,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986 ,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892 ,0.494083315134048,0.483844935894012,0.491256147623062,0.476915508508682,0.489434659481049,0.507938206195831 ,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422 ,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841 ,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562 ,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153 ,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756 ,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266 ,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123 ,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202 ,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361 ,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219 ,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301 ,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226 ,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947 ,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013 ,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182 ,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135 ,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115 ,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415,0.439141184091568,0.444102138280869 ,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231 ,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836 ,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449 ,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095 ,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943 ,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909 ,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634 ,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754 ,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949 ,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469 ,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691 ,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411 ,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387 ,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505 ,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175 ,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884 ,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211 ,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596,0.454729199409485,0.506186008453369 ,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238 ,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731 ,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672 ,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634 ,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078 ,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088 ,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222 ,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316 ,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045 ,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819 ,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199 ,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759 ,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362 ,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628 ,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116 ,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052 ,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688 ,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342,0.328943759202957,0.19858555495739,0.362459033727646 ,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177 ,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235 ,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975 ,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201 ,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482 ,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303 ,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773 ,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051 ,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464 ,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396 ,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856 ,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004 ,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612 ,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315 ,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162 ,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302 ,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666 ,0.507564306259155,0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726 ,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349 ,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645 ,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925 ,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608 ,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729 ,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505 ,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904 ,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256 ,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973 ,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215 ,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334 ,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766 ,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093 ,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483 ,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089 ,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503 ,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906 ,0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111 ,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224 ,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664 ,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219 ,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386 ,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467 ,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715 ,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145 ,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042 ,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589 ,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911 ,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309 ,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737 ,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353 ,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671 ,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867 ,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591 ,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672 ,0.271769434213638,0.385051816701889,0.256161749362946,0.422860234975815,0.246646866202354,0.351017981767654 ,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217 ,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237 ,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014 ,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803 ,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467 ,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254 ,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278 ,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076 ,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065 ,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293 ,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182 ,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982 ,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318 ,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803 ,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098 ,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775 ,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203 ,0.148400202393532,0.419813513755798,0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511 ,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461 ,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083 ,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674 ,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391 ,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467 ,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997 ,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567 ,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925 ,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404 ,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035 ,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767 ,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183 ,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859 ,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175 ,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153 ,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906 ,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072 ,0.425704270601273,0.605306565761566,0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718 ,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449 ,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115 ,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521 ,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587 ,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331 ,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873 ,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868 ,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152 ,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234 ,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304 ,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734 ,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086 ,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811 ,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376 ,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811 ,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416 ,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084 ,0.501217484474182,0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821 ,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037 ,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985 ,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476 ,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735 ,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619 ,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169 ,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391 ,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975 ,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484 ,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239 ,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107 ,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224 ,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567 ,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654 ,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557 ,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182 ,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464,0.476730823516846,0.335748642683029 ,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566 ,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677 ,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529 ,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426 ,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792 ,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639 ,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413 ,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596 ,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899 ,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912 ,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452 ,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238 ,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541 ,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459 ,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182 ,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286 ,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342 ,0.201496973633766,0.577669441699982,0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191 ,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598 ,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243 ,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193 ,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442 ,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465 ,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923 ,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469 ,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606 ,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796 ,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159 ,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455 ,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422 ,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185 ,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441 ,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091 ,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489 ,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808,0.594250917434692 ,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379 ,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832 ,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159 ,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268 ,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897 ,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138 ,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538 ,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041 ,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254 ,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863 ,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607 ,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511 ,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412 ,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093 ,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141 ,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647 ,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053 ,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976 ,0.574461042881012,0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185 ,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219 ,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711 ,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802 ,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016 ,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331 ,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385 ,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885 ,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399 ,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011 ,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597 ,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458 ,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544 ,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551 ,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252 ,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125 ,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748 ,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717 ,0.56607973575592,0.232950657606125,0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964 ,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863 ,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499 ,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504 ,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682 ,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619 ,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393 ,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586 ,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585 ,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027 ,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854 ,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075 ,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434 ,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353 ,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043 ,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069 ,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817 ,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957 ,0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531 ,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966 ,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297 ,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925 ,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983 ,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951 ,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038 ,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843 ,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608 ,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003 ,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476 ,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337 ,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737 ,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529 ,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413 ,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061 ,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845 ,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266 ,0.0327511876821518,0.240590929985046,0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031 ,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075 ,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524 ,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636 ,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248 ,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948 ,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729 ,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808 ,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219 ,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047 ,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019 ,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793 ,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262 ,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278 ,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192 ,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869 ,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409 ,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533 ,0.459741652011871,0.338231563568115,0.394522905349731,0.594241797924042,0.388592958450317,0.594755053520203 ,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798 ,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381 ,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707 ,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858 ,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587 ,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284 ,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955 ,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566 ,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552 ,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576 ,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234 ,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924 ,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093 ,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356 ,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098 ,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198 ,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073 ,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033,0.227975755929947 ,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007 ,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338 ,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182 ,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421 ,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517 ,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137 ,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926 ,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832 ,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685 ,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432 ,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594 ,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892 ,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207 ,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182 ,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094 ,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112 ,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616 ,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905 ,0.387614846229553,0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666 ,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828 ,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714 ,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831 ,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868 ,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372 ,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579 ,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204 ,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623 ,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398 ,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665 ,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624 ,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595 ,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064 ,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547 ,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637 ,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637 ,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986 ,0.571574211120605,0.392384350299835,0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761 ,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108 ,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704 ,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631 ,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915 ,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931 ,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868 ,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272 ,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953 ,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621 ,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699 ,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921 ,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247 ,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195 ,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297 ,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018 ,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548 ,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472 ,0.480641216039658,0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786 ,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026 ,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289 ,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217 ,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317 ,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798 ,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684 ,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119 ,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895 ,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566 ,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657 ,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648 ,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405 ,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209 ,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182 ,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049 ,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871 ,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564 ,0.103776723146439,0.271889269351959,0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182 ,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592 ,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196 ,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287 ,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677 ,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707 ,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964 ,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558 ,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292 ,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369 ,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879 ,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581 ,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516 ,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948 ,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014 ,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099 ,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017 ,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714 ,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938 ,0.896463871002197,0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987 ,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376 ,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365 ,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283 ,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993 ,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462 ,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861 ,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179 ,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091 ,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416 ,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697 ,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603 ,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436 ,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565 ,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863 ,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596 ,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313 ,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162 ,0.677415728569031,0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415 ,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485 ,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717 ,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492 ,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802 ,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126 ,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353 ,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741 ,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369 ,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915 ,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869 ,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941 ,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857 ,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413 ,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263 ,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628 ,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325 ,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516 ,0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781 ,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433 ,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901 ,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092 ,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909 ,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625 ,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381 ,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694 ,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245 ,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554 ,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991 ,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085 ,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631 ,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987 ,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418 ,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385 ,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794 ,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796,0.821314513683319 ,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365 ,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282 ,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057 ,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401 ,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807 ,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026 ,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284 ,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427 ,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571 ,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626 ,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966 ,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936 ,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784 ,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101 ,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047 ,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735 ,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461 ,0.492020517587662,0.517554759979248,0.489789307117462,0.521288216114044,0.486277997493744,0.524867177009583 ,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928 ,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064 ,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293 ,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593 ,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712 ,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917 ,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072 ,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667 ,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965 ,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874 ,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538 ,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843 ,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794 ,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585 ,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715 ,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085 ,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027 ,0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929 ,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339 ,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041 ,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593 ,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257 ,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865 ,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218 ,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002 ,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643 ,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033 ,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496 ,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972 ,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797 ,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385 ,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926 ,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969 ,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651 ,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073 ,0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589 ,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091 ,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849 ,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145 ,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966 ,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813 ,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549 ,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682 ,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345 ,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198 ,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342 ,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952 ,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792 ,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413 ,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689 ,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692 ,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341 ,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413 ,0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857 ,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229 ,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389 ,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644 ,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318 ,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391 ,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803 ,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125 ,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302 ,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012 ,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892 ,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605 ,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789 ,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325 ,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422 ,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616 ,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237 ,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215,0.536648154258728 ,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332 ,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705 ,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594 ,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323 ,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961 ,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595 ,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625 ,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077 ,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185 ,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946 ,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793 ,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714 ,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911 ,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424 ,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269 ,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858 ,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366 ,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931,0.422893911600113 ,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989 ,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466 ,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798 ,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643 ,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907 ,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301 ,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673 ,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091 ,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096 ,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179 ,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967 ,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601 ,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869 ,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821 ,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166 ,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871 ,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406 ,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231 ,0.506956994533539,0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583 ,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592 ,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502 ,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902 ,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233 ,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754 ,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585 ,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318 ,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581 ,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387 ,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016 ,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677 ,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467 ,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944 ,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835 ,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048 ,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596 ,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516 ,0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361 ,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801 ,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539 ,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536 ,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619 ,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706 ,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908 ,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959 ,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276 ,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093 ,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414 ,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312 ,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915 ,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001 ,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493 ,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274 ,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205 ,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969 ,0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574 ,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417 ,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949 ,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531 ,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658 ,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904 ,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587 ,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482 ,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813 ,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414 ,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549 ,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519 ,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291 ,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079 ,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499 ,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704 ,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482 ,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703 ,0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315 ,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092 ,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115 ,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262 ,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462 ,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838 ,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031 ,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309 ,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671 ,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812 ,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075 ,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934 ,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445 ,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217 ,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428 ,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437 ,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352 ,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486,0.630282640457153,0.570110380649567,0.638663291931152 ,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883 ,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946 ,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217 ,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594 ,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294 ,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673 ,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989 ,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215 ,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178 ,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971 ,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697 ,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186 ,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828 ,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862 ,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393 ,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785 ,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137 ,0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802 ,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093 ,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707 ,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216 ,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906 ,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263 ,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312 ,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126 ,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493 ,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588 ,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353 ,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876 ,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205 ,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334 ,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671 ,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507 ,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395 ,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885 ,0.543237447738647,0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617 ,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816 ,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611 ,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188 ,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624 ,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801 ,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591 ,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872 ,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677 ,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859 ,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067 ,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833 ,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241 ,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753 ,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008 ,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242 ,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127 ,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977,0.668446362018585 ,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944 ,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235 ,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293 ,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594 ,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388 ,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182 ,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292 ,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437 ,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775 ,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452 ,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378 ,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825 ,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676 ,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151 ,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392 ,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709 ,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407 ,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828,0.602044343948364,0.593871057033539,0.612634897232056 ,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681 ,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495 ,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657 ,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869 ,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949 ,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217 ,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853 ,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542 ,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225 ,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512 ,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641 ,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237 ,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414 ,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135 ,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797 ,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228 ,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131 ,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843 ,0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426 ,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817 ,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721 ,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778 ,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033 ,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737 ,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438 ,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162 ,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053 ,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346 ,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016 ,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476 ,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299 ,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765 ,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195 ,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172 ,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753 ,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042,0.525910139083862,0.60409289598465,0.548857510089874 ,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373 ,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253 ,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836 ,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636 ,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746 ,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846 ,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831 ,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435 ,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297 ,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074 ,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185 ,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792 ,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639 ,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363 ,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854 ,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912 ,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238 ,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209,0.727306187152863,0.436012208461761,0.721607804298401 ,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151 ,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379 ,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726 ,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333 ,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193 ,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743 ,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923 ,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113 ,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407 ,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007 ,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574 ,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586 ,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572 ,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898 ,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817 ,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355 ,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363 ,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242 ,0.526827156543732,0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333 ,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207 ,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915 ,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519 ,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544 ,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841 ,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981 ,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856 ,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776 ,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298 ,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747 ,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119 ,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607 ,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449 ,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216 ,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907 ,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098 ,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478 ,0.754323303699493,0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661 ,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789 ,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656 ,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637 ,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916 ,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998 ,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843 ,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073 ,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256 ,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209 ,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557 ,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847 ,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922 ,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766 ,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067 ,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418 ,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945 ,0.611816823482513,0.769262611865997,0.623659491539001,0.771583199501038,0.616897940635681,0.768544793128967 ,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202 ,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237 ,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586 ,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377 ,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614 ,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228 ,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011 ,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935 ,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187 ,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505 ,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701 ,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249 ,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288 ,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198 ,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798 ,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556 ,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672 ,0.0403527356684208,0.816201508045197,0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954 ,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794 ,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053 ,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458 ,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152 ,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255 ,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333 ,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948 ,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407 ,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442 ,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881 ,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077 ,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848 ,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442 ,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047 ,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607 ,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028 ,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524 ,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846,0.602072775363922 ,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928 ,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683 ,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194 ,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352 ,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337 ,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037 ,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379 ,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186 ,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632 ,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003 ,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204 ,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766 ,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587 ,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284 ,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815 ,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766 ,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552 ,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238,0.556499540805817,0.599716067314148 ,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985 ,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148 ,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593 ,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416 ,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805 ,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398 ,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396 ,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575 ,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139 ,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971 ,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255 ,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755 ,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232 ,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146 ,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159 ,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612 ,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088 ,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174,0.333364248275757,0.551311314105988 ,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593 ,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938 ,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211 ,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063 ,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969 ,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584 ,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382 ,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772 ,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761 ,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706 ,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931 ,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343 ,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879 ,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235 ,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556 ,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634 ,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232 ,0.678222596645355,0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482 ,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615 ,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465 ,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706 ,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678 ,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646 ,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009 ,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419 ,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097 ,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059 ,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836 ,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826 ,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054 ,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426 ,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095 ,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523 ,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181 ,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434 ,0.790905892848969,0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281 ,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853 ,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474 ,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692 ,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164 ,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879 ,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612 ,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325 ,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094 ,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736 ,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396 ,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113 ,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604 ,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125 ,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454 ,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813 ,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208 ,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171 ,0.543534815311432,0.0322365164756775,0.557037770748138,0.0385730713605881,0.557879507541656,0.0331084579229355 ,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259 ,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881 ,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256 ,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668 ,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886 ,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975 ,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967 ,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853 ,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967 ,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896 ,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146 ,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856 ,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337 ,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159 ,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105 ,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332 ,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896 ,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026,0.485119014978409 ,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301 ,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146 ,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211 ,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664 ,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039 ,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856 ,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987 ,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969 ,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574 ,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758 ,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774 ,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024 ,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848 ,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837 ,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803 ,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771 ,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944 ,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512 ,0.0149797797203064,0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085 ,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472 ,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837 ,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977 ,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173 ,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594 ,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236 ,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413 ,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082 ,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577 ,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986 ,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726 ,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042 ,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941 ,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664 ,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441 ,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802 ,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249 ,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507,0.0117701292037964,0.422150850296021 ,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992 ,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016 ,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007 ,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679 ,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564 ,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346 ,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245 ,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347 ,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546 ,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375 ,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705 ,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375 ,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682 ,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807 ,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807 ,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299 ,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458 ,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629 ,0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985 ,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827 ,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793 ,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793 ,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776 ,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835 ,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541 ,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364 ,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124 ,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341 ,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271 ,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038 ,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458 ,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082 ,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593 ,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896 ,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774 ,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903 ,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646,0.683692932128906,0.0178875774145126 ,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999 ,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113 ,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504 ,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518 ,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639 ,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756 ,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693 ,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485 ,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158 ,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789 ,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196 ,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822 ,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684 ,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694 ,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229 ,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909 ,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786 ,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413 ,0.548435807228088,0.0826816782355309,0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547 ,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826 ,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975 ,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443 ,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139 ,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445 ,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139 ,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316 ,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195 ,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783 ,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956 ,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314 ,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949 ,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974 ,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385 ,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161 ,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436 ,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499 ,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438,0.139729559421539 ,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231 ,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978 ,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644 ,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793 ,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138 ,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014 ,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102 ,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719 ,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226 ,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041 ,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953 ,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965 ,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809 ,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625 ,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767 ,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802 ,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031 ,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584 ,0.147085726261139,0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234 ,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214 ,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716 ,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162 ,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652 ,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242 ,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848 ,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742 ,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663 ,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214 ,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676 ,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026 ,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281 ,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501 ,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471 ,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744 ,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386 ,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294,0.219694241881371 ,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547 ,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424 ,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412 ,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308 ,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237 ,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932 ,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395 ,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964 ,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765 ,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439 ,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814 ,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781 ,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738 ,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245 ,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754 ,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616 ,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856 ,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783 ,0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244 ,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314 ,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028 ,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755 ,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493 ,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161 ,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928 ,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969 ,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313 ,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533 ,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923 ,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585 ,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439 ,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072 ,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595 ,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719 ,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834 ,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461 ,0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035 ,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961 ,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809 ,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044 ,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767 ,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297 ,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319 ,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439 ,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344 ,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911 ,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438 ,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086 ,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652 ,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257 ,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271 ,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974 ,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378 ,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094,0.759102463722229 ,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889 ,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481 ,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344 ,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916 ,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113 ,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035 ,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333 ,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982 ,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093 ,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449 ,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641 ,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698 ,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721 ,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791 ,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639 ,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339 ,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778 ,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421,0.627090036869049,0.837572515010834,0.626471817493439 ,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483 ,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444 ,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985 ,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788 ,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789 ,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036 ,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774 ,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535 ,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803 ,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633 ,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265 ,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674 ,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813 ,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729 ,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488 ,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261 ,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986 ,0.934876620769501,0.369551956653595,0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266 ,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392 ,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022 ,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875 ,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793 ,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439 ,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034 ,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082 ,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703 ,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909 ,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385 ,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175 ,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853 ,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518 ,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391 ,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864 ,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694 ,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134 ,0.802964627742767,0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116 ,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152 ,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803 ,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513 ,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763 ,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533 ,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202 ,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861 ,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423 ,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336 ,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799 ,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267 ,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692 ,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754 ,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939 ,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019 ,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196 ,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577 ,0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812 ,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097 ,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148 ,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348 ,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046 ,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397 ,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519 ,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738 ,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629 ,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493 ,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662 ,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985 ,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547 ,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436 ,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933 ,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619 ,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053 ,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845 ,0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887 ,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403 ,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322 ,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825 ,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938 ,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625 ,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483 ,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074 ,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902 ,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819 ,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989 ,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789 ,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682 ,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013 ,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999 ,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776 ,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199 ,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223 ,0.108967132866383,0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653 ,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344 ,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567 ,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856 ,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633 ,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974 ,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752 ,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382 ,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158 ,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737 ,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058 ,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696 ,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204 ,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509 ,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662 ,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322 ,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012 ,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425 ,0.00582033395767212,0.928635358810425,0.0301453322172165,0.945208311080933,0.00582033395767212,0.945208311080933 ,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514 ,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405 ,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388 ,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033 ,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755 ,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412 ,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607 ,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329 ,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503 ,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658 ,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374 ,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612 ,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965 ,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048 ,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022 ,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702 ,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798 ,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871 ,0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183 ,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026 ,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686 ,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441 ,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027 ,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965 ,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746 ,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264 ,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264 ,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832 ,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264 ,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832 ,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264 ,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832 ,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264 ,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381 ,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173 ,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599 ,0.122953936457634,0.413901716470718,0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718 ,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573 ,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716 ,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406 ,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849 ,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505 ,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527 ,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705 ,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317 ,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891 ,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125 ,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664 ,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005 ,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411 ,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646 ,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727 ,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479 ,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036 ,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631,0.920238852500916 ,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329 ,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139 ,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922 ,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667 ,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966 ,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947 ,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397 ,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714 ,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631 ,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703 ,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422 ,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177 ,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827 ,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016 ,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401 ,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739 ,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815 ,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697 ,0.803424000740051,0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604 ,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905 ,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934 ,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085 ,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821 ,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026 ,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963 ,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214 ,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479 ,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957 ,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588 ,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087 ,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243 ,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692 ,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099 ,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532 ,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791 ,0.950862765312195,0.773497998714447,0.940354406833649,0.773665010929108,0.959785580635071,0.773280024528503 ,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335 ,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843 ,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069 ,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397 ,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759 ,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017 ,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887 ,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721 ,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758 ,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103 ,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348 ,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713 ,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427 ,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438 ,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493 ,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631 ,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805 ,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406,0.970409572124481,0.583586990833282 ,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393 ,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073 ,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911 ,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105 ,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717 ,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506 ,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356 ,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778 ,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796 ,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739 ,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681 ,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972 ,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302 ,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529 ,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543 ,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943 ,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554 ,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306,0.719281017780304,0.983229696750641 ,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085 ,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348 ,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415 ,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949 ,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395 ,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667 ,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384 ,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288 ,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595 ,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471 ,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626 ,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271 ,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193 ,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487 ,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584 ,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934 ,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863 ,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457,0.983235836029053 ,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457 ,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658 ,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033 ,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761 ,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362 ,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545 ,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561 ,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541 ,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054 ,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947 ,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414 ,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457 ,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947 ,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493 ,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898 ,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854 ,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326 ,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623 ,0.637106657028198,0.177578389644623,0.620323657989502,0.196973383426666,0.620323657989502,0.177578389644623 ,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666 ,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623 ,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666 ,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623 ,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666 ,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623 ,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189 ,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189 ,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649 ,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573 ,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189 ,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194 ,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485 ,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065 ,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296 ,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622 ,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585 ,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893,0.206433475017548 ,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296 ,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334 ,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997 ,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294 ,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981 ,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236 ,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779 ,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528 ,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978 ,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236 ,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572 ,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427 ,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366 ,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857 ,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455 ,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427 ,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821 ,0.683457255363464,0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366 ,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464 ,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882 ,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198 ,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284 ,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007 ,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526 ,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646 ,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012 ,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055 ,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399 ,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395 ,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348 ,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178 ,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298 ,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594 ,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656 ,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895 ,0.881043076515198,0.466186791658401,0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712 ,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091 ,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506 ,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358 ,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734 ,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673 ,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688 ,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819 ,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173 ,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504 ,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948 ,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933 ,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462 ,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374 ,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687 ,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874 ,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169 ,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942 ,0.833344876766205,0.484429806470871,0.847736835479736,0.463386803865433,0.846568882465363,0.464255839586258 ,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594 ,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039 ,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058 ,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912 ,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176 ,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588 ,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649 ,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423 ,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892 ,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426 ,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066 ,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939 ,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371 ,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027 ,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941 ,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445 ,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186 ,0.516026794910431,0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303 ,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943 ,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244 ,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319 ,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886 ,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785 ,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449 ,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341 ,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361 ,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546 ,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223 ,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809 ,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425 ,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985 ,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512 ,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143 ,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318 ,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846,0.206447616219521 ,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339 ,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727 ,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211 ,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016 ,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147 ,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817 ,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345 ,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594 ,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496 ,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134 ,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641 ,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343 ,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339 ,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869 ,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087 ,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312 ,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043 ,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437 ,0.0736037790775299,0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556 ,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207 ,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902 ,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219 ,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598 ,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219 ,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572 ,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219 ,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598 ,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219 ,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598 ,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219 ,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943 ,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219 ,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598 ,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489 ,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489 ,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598 ,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468,0.0853549689054489 ,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489 ,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489 ,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598 ,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426 ,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639 ,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219 ,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099 ,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099 ,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219 ,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099 ,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099 ,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099 ,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099 ,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572 ,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627 ,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769 ,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969 ,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366 ,0.26112961769104,0.530635476112366,0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969 ,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774 ,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333 ,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752 ,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912 ,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969 ,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841 ,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954 ,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874 ,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733 ,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373 ,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841 ,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996 ,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782 ,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402 ,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143 ,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996 ,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701,0.674582898616791 ,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704 ,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878 ,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626 ,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689 ,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491 ,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516 ,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756 ,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491 ,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491 ,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491 ,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838 ,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231 ,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903 ,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491 ,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667 ,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039 ,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127 ,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034 ,0.279166221618652,0.709953963756561,0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829 ,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034 ,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919 ,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817 ,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376 ,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107 ,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365 ,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394 ,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512 ,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005 ,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762 ,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073 ,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797 ,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996 ,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961 ,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652 ,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371 ,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471 ,0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855 ,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857 ,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742 ,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824 ,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165 ,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544 ,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159 ,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304 ,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052 ,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465 ,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604 ,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885 ,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418 ,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952 ,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744 ,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787 ,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271 ,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956 ,0.310332953929901,0.122801892459393,0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765 ,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174 ,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895 ,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853 ,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923 ,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062 ,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285 ,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984 ,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487 ,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485 ,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345 ,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459 ,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949 ,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115 ,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371 ,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234 ,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749 ,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003 ,0.118860952556133,0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872 ,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677 ,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736 ,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601 ,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488 ,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379 ,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588 ,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744 ,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365 ,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533 ,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111 ,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683 ,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884 ,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132 ,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009 ,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352 ,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487 ,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753 ,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016,0.118029937148094 ,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147 ,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296 ,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276 ,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258 ,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242 ,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328 ,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209 ,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408 ,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444 ,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744 ,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189 ,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348 ,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553 ,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813 ,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817 ,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151 ,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666 ,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047,0.409544587135315 ,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578 ,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315 ,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427 ,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869 ,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045 ,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953 ,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469 ,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199 ,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483 ,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233 ,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983 ,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259 ,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056 ,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114 ,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344 ,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201 ,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787 ,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623,0.244148418307304,0.376309484243393 ,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048 ,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726 ,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136 ,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081 ,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525 ,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041 ,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821 ,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141 ,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401 ,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203 ,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048 ,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252 ,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377 ,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443 ,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231 ,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852 ,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422 ,0.271062970161438,0.0843436047434807,0.268807142972946,0.0709859803318977,0.255287438631058,0.0861772000789642 ,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729 ,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628 ,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696 ,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072 ,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508 ,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894 ,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728 ,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823 ,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232 ,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764 ,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132 ,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678 ,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657 ,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221 ,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614 ,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378 ,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101 ,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812,0.0979962795972824 ,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462 ,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847 ,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485 ,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251 ,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588 ,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106 ,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207 ,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301 ,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591 ,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064 ,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513 ,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792 ,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899 ,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687 ,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716 ,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147 ,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609 ,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629 ,0.359014123678207,0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587 ,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061 ,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602 ,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129 ,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097 ,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496 ,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871 ,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729 ,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304 ,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162 ,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452 ,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711 ,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926 ,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932 ,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262 ,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124 ,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343 ,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411 ,0.422037154436111,0.454183876514435,0.141791939735413,0.448351323604584,0.145058676600456,0.413058042526245 ,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936 ,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803 ,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148 ,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041 ,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949 ,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288 ,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867 ,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632 ,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136 ,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569 ,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929 ,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264 ,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125 ,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113 ,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998 ,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839 ,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925 ,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089 ,0.791049957275391,0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943 ,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606 ,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799 ,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593 ,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519 ,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899 ,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376 ,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953 ,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894 ,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433 ,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309 ,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157 ,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123 ,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547 ,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583 ,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052 ,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226 ,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263 ,0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374 ,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441 ,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365 ,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827 ,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052 ,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489 ,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326 ,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963 ,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869 ,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591 ,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551 ,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554 ,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624 ,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777 ,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417 ,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217 ,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178 ,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266 ,0.587654650211334,0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256 ,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718 ,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493 ,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411 ,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719 ,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913 ,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167 ,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882 ,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955 ,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649 ,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325 ,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255 ,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884 ,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861 ,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323 ,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561 ,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732 ,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287 ,0.0992880389094353,0.55315625667572,0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153 ,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077 ,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604 ,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723 ,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099 ,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052 ,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661 ,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696 ,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555 ,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121 ,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921 ,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163 ,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999 ,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799 ,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263 ,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706 ,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333 ,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868,0.941240012645721,0.446224510669708,0.945038080215454 ,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966 ,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089 ,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791 ,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507 ,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741 ,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681 ,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343 ,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353 ,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989 ,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761 ,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865 ,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874 ,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515 ,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253 ,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576 ,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218 ,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552 ,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792,0.356241673231125,0.772000849246979,0.366978108882904 ,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864 ,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292 ,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755 ,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155 ,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587 ,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601 ,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909 ,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252 ,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265 ,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148 ,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241 ,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952 ,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867 ,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499 ,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557 ,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203 ,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677 ,0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819 ,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731 ,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794 ,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986 ,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596 ,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101 ,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689 ,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563 ,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283 ,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966 ,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416 ,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492 ,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293 ,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329 ,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928 ,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628 ,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142 ,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711 ,0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301 ,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019 ,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856 ,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073 ,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582 ,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101 ,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735 ,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171 ,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546 ,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966 ,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847 ,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669 ,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816 ,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271 ,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969 ,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144 ,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889 ,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582,0.90440434217453 ,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953 ,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483 ,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355 ,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553 ,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552 ,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807 ,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127 ,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769 ,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912 ,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362 ,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681 ,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301 ,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735 ,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558 ,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324 ,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062 ,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897 ,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126 ,0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627 ,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095 ,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698 ,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184 ,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311 ,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807 ,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608 ,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066 ,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631 ,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364 ,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613 ,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637 ,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822 ,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064 ,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049 ,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388 ,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871 ,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525 ,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043,0.014482319355011,0.828360557556152 ,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264 ,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542 ,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714 ,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178 ,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679 ,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773 ,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899 ,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856 ,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726 ,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275 ,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331 ,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956 ,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286 ,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902 ,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064 ,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992 ,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046 ,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065 ,0.0374843291938305,0.953755974769592,0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093 ,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771 ,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919 ,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174 ,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231 ,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546 ,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135 ,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486 ,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434 ,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853 ,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516 ,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148 ,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862 ,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159 ,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281 ,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019 ,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685 ,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583 ,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801 ,0.0981541946530342,0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569 ,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678 ,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398 ,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311 ,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624 ,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072 ,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534 ,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705 ,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058 ,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392 ,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808 ,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182 ,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251 ,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595 ,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462 ,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561 ,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289 ,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591 ,0.778886675834656,0.0793051347136498,0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062 ,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406 ,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422 ,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273 ,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907 ,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748 ,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067 ,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147 ,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061 ,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285 ,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207 ,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035 ,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842 ,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843 ,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121 ,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181 ,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929 ,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205 ,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705,0.493428647518158,0.950604200363159,0.342332631349564 ,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105 ,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942 ,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006 ,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132 ,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452 ,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178 ,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055 ,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998 ,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961 ,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459 ,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692 ,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107 ,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555 ,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523 ,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965 ,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491 ,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866 ,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093,0.0616136789321899 ,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065 ,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058 ,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524 ,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933 ,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833 ,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714 ,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415 ,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849 ,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693 ,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786 ,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248 ,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891 ,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762 ,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805 ,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262 ,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801 ,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649 ,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016,0.146303951740265 ,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852 ,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239 ,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486 ,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104 ,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275 ,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915 ,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366 ,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247 ,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994 ,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727 ,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625 ,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211 ,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571 ,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855 ,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936 ,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028 ,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311 ,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853 ,0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294 ,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689 ,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475 ,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534 ,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296 ,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262 ,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458 ,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576 ,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224 ,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192 ,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659 ,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292 ,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854 ,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667 ,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954 ,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474 ,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496 ,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144,0.368574023246765 ,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918 ,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234 ,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442 ,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323 ,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508 ,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179 ,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663 ,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915 ,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099 ,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953 ,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099 ,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561 ,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142 ,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527 ,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201 ,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436 ,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195 ,0.864213168621063,0.874509155750275,0.815409004688263,0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517 ,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533 ,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886 ,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494 ,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446 ,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232 ,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218 ,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085 ,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347 ,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928 ,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136 ,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283 ,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479 ,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532 ,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573 ,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361 ,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852 ,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387 ,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256,0.754678249359131,0.978725790977478,0.543712019920349 ,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391 ,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577 ,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624 ,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683 ,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114 ,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614 ,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099 ,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604 ,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826 ,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798 ,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116 ,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836 ,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289 ,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151 ,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612 ,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483 ,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287 ,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077 ,0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059 ,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541 ,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552 ,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615 ,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552 ,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438 ,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544 ,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911 ,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575 ,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466 ,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738 ,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771 ,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833 ,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851 ,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844 ,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017 ,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389 ,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177,0.596252083778381 ,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431 ,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248 ,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647 ,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604 ,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743 ,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143 ,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135 ,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105 ,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598 ,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071 ,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036 ,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016 ,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663 ,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761 ,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498 ,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563 ,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107 ,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197,0.123328268527985 ,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257 ,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906 ,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161 ,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579 ,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338 ,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999 ,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601 ,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367 ,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216 ,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667 ,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579 ,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399 ,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943 ,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309 ,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943 ,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837 ,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907 ,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701 ,0.0743808746337891,0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449 ,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131 ,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004 ,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825 ,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839 ,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162 ,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248 ,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573 ,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173 ,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551 ,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622 ,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514 ,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694 ,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746 ,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895 ,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794 ,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256 ,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982 ,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676,0.235308602452278,0.0271604433655739 ,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528 ,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348 ,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254 ,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999 ,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315 ,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645 ,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786 ,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184 ,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138 ,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643 ,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822 ,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593 ,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705 ,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004 ,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622 ,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445 ,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276 ,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119 ,0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756 ,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021 ,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918 ,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715 ,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297 ,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861 ,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532 ,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327 ,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726 ,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033 ,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935 ,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712 ,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401 ,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066 ,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684 ,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507 ,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769 ,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025 ,0.199742212891579,0.168715670704842,0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788 ,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238 ,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198 ,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442 ,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422 ,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828 ,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674 ,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872 ,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071 ,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138 ,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372 ,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032 ,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568 ,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736 ,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654 ,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647 ,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486 ,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797 ,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031,0.196686863899231 ,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779 ,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774 ,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293 ,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767 ,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605 ,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791 ,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802 ,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394 ,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095 ,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429 ,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594 ,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718 ,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846 ,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739 ,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413 ,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194 ,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045 ,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878 ,0.808161675930023,0.0944669842720032,0.829814612865448,0.092739924788475,0.836659967899323,0.0951223000884056 ,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991 ,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075 ,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593 ,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249 ,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553 ,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703 ,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739 ,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957 ,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137 ,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514 ,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253 ,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445 ,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285 ,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507 ,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174 ,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025 ,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016 ,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484 ,0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946 ,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923 ,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027 ,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142 ,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955 ,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959 ,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588 ,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862 ,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835 ,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371 ,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649 ,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221 ,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001 ,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212 ,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617 ,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852 ,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272 ,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529 ,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826,0.719165027141571 ,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167 ,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402 ,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059 ,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922 ,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845 ,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484 ,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134 ,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946 ,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799 ,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152 ,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846 ,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344 ,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634 ,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712 ,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767 ,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896 ,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513 ,0.326107054948807,0.852742612361908,0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824 ,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436 ,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126 ,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681 ,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107 ,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346 ,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474 ,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814 ,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993 ,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485 ,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569 ,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177 ,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631 ,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575 ,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191 ,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654 ,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791 ,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805 ,0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105 ,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864 ,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353 ,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369 ,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879 ,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128 ,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803 ,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568 ,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728 ,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048 ,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721 ,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887 ,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493 ,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541 ,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654 ,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739 ,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811 ,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126 ,0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577 ,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316 ,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024 ,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512 ,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663 ,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183 ,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993 ,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874 ,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672 ,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852 ,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213 ,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545 ,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629 ,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769 ,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438 ,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584 ,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542 ,0.832485556602478,0.200292333960533,0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885 ,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341 ,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608 ,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764 ,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994 ,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566 ,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395 ,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244 ,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863 ,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421 ,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298 ,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857 ,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562 ,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951 ,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106 ,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525 ,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025 ,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655 ,0.0769496187567711,0.269949793815613,0.0977088510990143,0.236902311444283,0.106580346822739,0.257785648107529 ,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196 ,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211 ,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858 ,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601 ,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026 ,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972 ,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517 ,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404 ,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855 ,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465 ,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925 ,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538 ,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066 ,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374 ,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817 ,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534 ,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956 ,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943 ,0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938 ,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861 ,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834 ,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809 ,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992 ,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746 ,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456 ,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815 ,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706 ,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789 ,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591 ,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756 ,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574 ,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455 ,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948 ,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651 ,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686 ,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111 ,0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853 ,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524 ,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924 ,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975 ,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757 ,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691 ,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315 ,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324 ,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381 ,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344 ,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401 ,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844 ,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196 ,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418 ,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398 ,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522 ,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685 ,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437 ,0.133912816643715,0.20319464802742,0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524 ,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954 ,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344 ,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936 ,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318 ,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407 ,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033 ,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092 ,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791 ,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299 ,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534 ,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933 ,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886 ,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962 ,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948 ,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535 ,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283 ,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526 ,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022,0.232346341013908,0.0509957745671272 ,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807 ,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112 ,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229 ,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593 ,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723 ,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959 ,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508 ,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872 ,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774 ,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491 ,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963 ,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169 ,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043 ,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012 ,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435 ,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189 ,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613 ,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837 ,0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475 ,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268 ,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307 ,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897 ,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761 ,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134 ,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111 ,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347 ,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226 ,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311 ,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284 ,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513 ,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504 ,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754 ,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277 ,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662 ,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374 ,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521 ,0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302 ,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995 ,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124 ,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597 ,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387 ,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505 ,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043 ,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425 ,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526 ,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425 ,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296 ,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193 ,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371 ,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927 ,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216 ,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302 ,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857 ,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566,0.0835410356521606 ,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049 ,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313 ,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937 ,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547 ,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081 ,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316 ,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013 ,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102 ,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062 ,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082 ,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773 ,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134 ,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551 ,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289 ,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298 ,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368 ,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232 ,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244 ,0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757 ,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896 ,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648 ,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179 ,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826 ,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774 ,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951 ,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127 ,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092 ,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548 ,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717 ,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938 ,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157 ,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339 ,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889 ,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367 ,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367 ,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365,0.0136640649288893,0.0665248408913612 ,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612 ,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065 ,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065 ,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556 ,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419 ,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017 ,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845 ,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715 ,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089 ,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965 ,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461 ,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831 ,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829 ,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545 ,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177 ,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883 ,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697 ,0.314485341310501,0.406984806060791,0.316858559846878,0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387 ,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964 ,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025 ,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207 ,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904 ,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587 ,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769 ,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004 ,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594 ,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897 ,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296 ,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728 ,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203 ,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597 ,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413 ,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161 ,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359 ,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516 ,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069,0.313420087099075 ,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709 ,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498 ,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002 ,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516 ,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431 ,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014 ,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501 ,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879 ,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071 ,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488 ,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054 ,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621 ,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581 ,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979 ,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229 ,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853 ,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206 ,0.482427507638931,0.03264981508255,0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678 ,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031 ,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425 ,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013 ,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524 ,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011 ,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245 ,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545 ,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196 ,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861 ,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417 ,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953 ,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225 ,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125 ,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099 ,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026 ,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506 ,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488 ,0.508201599121094,0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518 ,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614 ,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507 ,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112 ,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837 ,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136 ,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232 ,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973 ,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623 ,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763 ,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747 ,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272 ,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616 ,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115 ,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589 ,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448 ,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921 ,0.36936816573143,0.356859803199768,0.368447452783585,0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833 ,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501 ,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896 ,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043 ,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703 ,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337 ,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932 ,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926 ,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719 ,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722 ,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059 ,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724 ,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386 ,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075 ,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982 ,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831 ,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061 ,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882 ,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842,0.472558706998825 ,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371 ,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662 ,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157 ,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488 ,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213 ,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228 ,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769 ,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445 ,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987 ,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297 ,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301 ,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968 ,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383 ,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316 ,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728 ,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934 ,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062 ,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275,0.421510130167007 ,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138 ,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685 ,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951 ,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986 ,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596 ,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243 ,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912 ,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292 ,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215 ,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973 ,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905 ,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943 ,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512 ,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145 ,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688 ,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501 ,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606 ,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063 ,0.550254046916962,0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256 ,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822 ,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009 ,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872 ,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118 ,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307 ,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597 ,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128 ,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805 ,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793 ,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287 ,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942 ,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822 ,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087 ,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613 ,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501 ,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905 ,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853 ,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623,0.0392846465110779 ,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323 ,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303 ,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236 ,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301 ,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276 ,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524 ,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811 ,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015 ,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329 ,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264 ,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334 ,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247 ,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133 ,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948 ,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682 ,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794 ,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389 ,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623 ,0.49083137512207,0.0473983287811279,0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202 ,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392 ,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182 ,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062 ,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643 ,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692 ,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449 ,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011 ,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257 ,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773 ,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833 ,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563 ,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795 ,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609 ,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502 ,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668 ,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125 ,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896 ,0.4264976978302,0.349507212638855,0.451796531677246,0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252 ,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556 ,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646 ,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215 ,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107 ,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446 ,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764 ,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714 ,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638 ,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395 ,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909 ,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372 ,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249 ,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264 ,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609 ,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581 ,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568 ,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235 ,0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337 ,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889 ,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665 ,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375 ,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789 ,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837 ,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324 ,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636 ,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212 ,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615 ,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548 ,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098 ,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755 ,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362 ,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667 ,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625 ,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563 ,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677,0.780230820178986 ,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454 ,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234 ,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135 ,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538 ,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973 ,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574 ,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557 ,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968 ,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793 ,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841 ,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715 ,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775 ,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791 ,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083 ,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772 ,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374 ,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895 ,0.664426863193512,0.451735496520996,0.781740605831146,0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182 ,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671 ,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875 ,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996 ,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791 ,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095 ,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036 ,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128 ,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326 ,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032 ,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638 ,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726 ,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397 ,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745 ,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954 ,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098 ,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755 ,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526 ,0.486700624227524,0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725 ,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627 ,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157 ,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655 ,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994 ,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179 ,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507 ,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814 ,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901 ,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877 ,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012 ,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375 ,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355 ,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281 ,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865 ,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833 ,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743 ,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768 ,0.386751741170883,0.617895185947418,0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288 ,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473 ,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659 ,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292 ,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964 ,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133 ,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201 ,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293 ,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013 ,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646 ,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588 ,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165 ,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865 ,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227 ,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106 ,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642 ,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765 ,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866,0.90181291103363,0.50802755355835 ,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183 ,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227 ,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086 ,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432 ,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513 ,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312 ,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633 ,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022 ,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552 ,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808 ,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386 ,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944 ,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297 ,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484 ,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453 ,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383 ,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065 ,0.637537717819214,0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802 ,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354 ,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872 ,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222 ,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638 ,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807 ,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524 ,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323 ,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165 ,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507 ,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951 ,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215 ,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087 ,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366 ,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399 ,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123 ,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671 ,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322,0.564278662204742 ,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543 ,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744 ,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924 ,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052 ,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235 ,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116 ,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443 ,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149 ,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659 ,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132 ,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731 ,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403 ,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649 ,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019 ,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981 ,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601 ,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013 ,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728,0.561667025089264,0.981199622154236 ,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288 ,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623 ,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255 ,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904 ,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255 ,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155 ,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439 ,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626 ,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971 ,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574 ,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566 ,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699 ,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431 ,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864 ,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974 ,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008 ,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812,0.991807043552399 ,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344 ,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207 ,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793 ,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829 ,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166 ,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062 ,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816 ,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186 ,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449 ,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567 ,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317 ,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936 ,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294 ,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198 ,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379 ,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029 ,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272 ,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368,0.434852063655853 ,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239 ,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279 ,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657 ,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565 ,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876 ,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016 ,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383 ,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222 ,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827 ,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765 ,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324 ,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245 ,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762 ,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984 ,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822 ,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933 ,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329 ,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999 ,0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249 ,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244 ,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762 ,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181 ,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814 ,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899 ,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994 ,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935 ,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381 ,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414 ,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813 ,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488 ,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838 ,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535 ,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539 ,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418 ,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368 ,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535 ,0.816003322601318,0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638 ,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751 ,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699 ,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256 ,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667 ,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938 ,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555 ,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219 ,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725 ,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928 ,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241 ,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347 ,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236 ,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984 ,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482 ,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451 ,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037 ,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016,0.830957114696503,0.422840178012848 ,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874 ,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241 ,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053 ,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048 ,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005 ,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648 ,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505 ,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419 ,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017 ,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875 ,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739 ,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724 ,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275 ,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712 ,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713 ,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484 ,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654 ,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579,0.143848940730095 ,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804 ,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559 ,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442 ,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595 ,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341 ,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495 ,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061 ,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041 ,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763 ,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135 ,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448 ,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895 ,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482 ,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856 ,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024 ,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903 ,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879 ,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251 ,0.898496329784393,0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624 ,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211 ,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012 ,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039 ,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086 ,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414 ,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186 ,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828 ,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931 ,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358 ,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491 ,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676 ,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334 ,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113 ,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744 ,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392 ,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881 ,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118 ,0.331734776496887,0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168 ,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905 ,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233 ,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275 ,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514 ,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809 ,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269 ,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484 ,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088 ,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686 ,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914 ,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958 ,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479 ,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966 ,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899 ,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556 ,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412 ,0.59907454252243,0.0290243290364742,0.594756245613098,0.0432147420942783,0.550425350666046,0.0373775735497475 ,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419 ,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893 ,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354 ,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738 ,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304 ,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426 ,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402 ,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334 ,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378 ,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619 ,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026 ,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366 ,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826 ,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357 ,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836 ,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441 ,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111 ,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764,0.933514356613159,0.0762230306863785 ,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583 ,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171 ,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271 ,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103 ,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028 ,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809 ,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838 ,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167 ,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973 ,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605 ,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757 ,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644 ,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991 ,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826 ,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304 ,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994 ,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539 ,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047,0.816710710525513,0.759240210056305 ,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558 ,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897 ,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019 ,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033 ,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759 ,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717 ,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223 ,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239 ,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526 ,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592 ,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483 ,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408 ,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798 ,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779 ,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459 ,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879 ,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246 ,0.591059923171997,0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749 ,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677 ,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534 ,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169 ,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977 ,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994 ,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486 ,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222 ,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327 ,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734 ,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447 ,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204 ,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566 ,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782 ,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563 ,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338 ,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982 ,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531,0.714633941650391,0.916672646999359 ,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281 ,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264 ,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557 ,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158 ,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866 ,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563 ,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039 ,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088 ,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078 ,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883 ,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169 ,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132 ,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401 ,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909 ,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108 ,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753 ,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385,0.974531888961792 ,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138 ,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187 ,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589 ,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079 ,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315 ,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202 ,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154 ,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924 ,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005 ,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234 ,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851 ,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654 ,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271 ,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883 ,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445 ,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397 ,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582 ,0.577414393424988,0.962452411651611,0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158 ,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839 ,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607 ,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543 ,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253 ,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672 ,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351 ,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905 ,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019 ,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227 ,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747 ,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231 ,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234 ,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691 ,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226 ,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641 ,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998 ,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264 ,0.963677108287811,0.872271716594696,0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812 ,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783 ,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703 ,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797 ,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947 ,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521 ,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391 ,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042 ,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844 ,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766 ,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196 ,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484 ,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111 ,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917 ,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615 ,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737 ,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799 ,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392 ,0.978221297264099,0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258 ,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409 ,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535 ,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536 ,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968 ,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125 ,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141 ,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401 ,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337 ,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667 ,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989 ,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783 ,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194 ,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954 ,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127 ,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776 ,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616 ,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307,0.621363580226898,0.682616829872131 ,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774 ,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151 ,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519 ,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157 ,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333 ,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347 ,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901 ,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676 ,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631 ,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012 ,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048 ,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284 ,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556 ,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512 ,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865 ,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786 ,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893 ,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663 ,0.105796456336975,0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037 ,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948 ,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325 ,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938 ,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369 ,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886 ,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355 ,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094 ,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082 ,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589 ,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694 ,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186 ,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473 ,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644 ,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226 ,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226 ,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872 ,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478 ,0.292685657739639,0.292649954557419,0.269282728433609,0.292957901954651,0.269526928663254,0.0986065044999123 ,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705 ,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117 ,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519 ,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744 ,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426 ,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368 ,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933 ,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878 ,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548 ,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617 ,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808 ,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183 ,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749 ,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254 ,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987 ,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163 ,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436 ,0.189350441098213,0.114026740193367,0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426 ,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571 ,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692 ,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373 ,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542 ,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883 ,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455 ,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385 ,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697 ,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125 ,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356 ,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726 ,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193 ,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982 ,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806 ,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181 ,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542 ,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426 ,0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398 ,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404 ,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648 ,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877 ,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277 ,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489 ,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004 ,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905 ,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782 ,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988 ,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638 ,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268 ,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245 ,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917 ,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788 ,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177 ,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989 ,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129 ,0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108 ,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438 ,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261 ,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425 ,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412 ,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362 ,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276 ,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656 ,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407 ,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997 ,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754 ,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773 ,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882 ,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449 ,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259 ,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101 ,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301 ,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117,0.727285981178284 ,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786 ,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446 ,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213 ,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925 ,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267 ,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179 ,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427 ,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392 ,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329 ,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498 ,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209 ,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924 ,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917 ,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705 ,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912 ,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832 ,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272 ,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778,0.139332994818687 ,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374 ,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107 ,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279 ,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471 ,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413 ,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697 ,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824 ,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088 ,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603 ,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676 ,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576 ,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628 ,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526 ,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321 ,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102 ,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627 ,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941 ,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915 ,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231,0.157439410686493,0.711707234382629 ,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664 ,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005 ,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458 ,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158 ,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166 ,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454 ,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145 ,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233 ,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521 ,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594 ,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598 ,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266 ,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322 ,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931 ,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497 ,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938 ,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938 ,0.955354988574982,0.376253008842468,0.963590979576111,0.376287996768951,0.955453991889954,0.500213027000427 ,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006 ,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838 ,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933 ,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553 ,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188 ,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537 ,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347 ,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683 ,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111 ,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242 ,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658 ,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144 ,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213 ,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323 ,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323 ,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294 ,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626 ,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544 ,0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168 ,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645 ,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757 ,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956 ,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759 ,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203 ,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042 ,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595 ,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542 ,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974 ,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268 ,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205 ,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577 ,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812 ,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989 ,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721 ,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015 ,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045,0.36667200922966 ,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842 ,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342 ,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754 ,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837 ,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583 ,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271 ,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587 ,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175 ,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402 ,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994 ,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989 ,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104 ,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712 ,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974 ,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782 ,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666 ,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114 ,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187 ,0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401 ,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255 ,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059 ,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303 ,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123 ,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032 ,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452 ,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445 ,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429 ,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387 ,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709 ,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402 ,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109 ,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442 ,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282 ,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408 ,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517 ,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282 ,0.845073997974396,0.622668981552124,0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298 ,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094 ,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286 ,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411 ,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928 ,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935 ,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314 ,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067 ,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521 ,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277 ,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192 ,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546 ,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193 ,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172 ,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141 ,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388 ,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542 ,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044 ,0.743863999843597,0.51264899969101,0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154 ,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909 ,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984 ,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899 ,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105 ,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976 ,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998 ,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619 ,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695 ,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007 ,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931 ,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564 ,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033 ,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737 ,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931 ,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299 ,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065 ,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384 ,0.595848023891449,0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599 ,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592 ,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483 ,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401 ,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512 ,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582 ,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951 ,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396 ,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481 ,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237 ,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964 ,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704 ,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749 ,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684 ,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208 ,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742 ,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174 ,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281 ,0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759 ,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723 ,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376 ,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672 ,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755 ,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683 ,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141 ,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971 ,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269 ,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896 ,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775 ,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464 ,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984 ,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764 ,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039 ,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961 ,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101 ,0.408055007457733,0.415430009365082,0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941 ,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719 ,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322 ,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111 ,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626 ,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244 ,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901 ,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061 ,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729 ,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927 ,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316 ,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683 ,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114 ,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406 ,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311 ,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899 ,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796 ,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746,0.726795017719269 ,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149 ,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808 ,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951 ,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033 ,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387 ,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298 ,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363 ,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417 ,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526 ,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964 ,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122 ,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241 ,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446 ,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312 ,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081 ,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239 ,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273 ,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236,0.835596978664398 ,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875 ,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522 ,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939 ,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865 ,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754 ,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952 ,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264 ,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314 ,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103 ,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874 ,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323 ,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667 ,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542 ,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059 ,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305 ,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476 ,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308 ,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155 ,0.768315017223358,0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553 ,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834 ,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218 ,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777 ,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467 ,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336 ,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919 ,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877 ,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104 ,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976 ,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078 ,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564 ,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191 ,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626 ,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076 ,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927 ,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084 ,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207,0.759728014469147 ,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355 ,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372 ,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758 ,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788 ,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658 ,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692 ,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661 ,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161 ,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619 ,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949 ,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371 ,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718 ,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849 ,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685 ,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787 ,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819 ,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409 ,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148 ,0.171581521630287,0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676 ,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513 ,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359 ,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079 ,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194 ,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539 ,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625 ,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695 ,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744 ,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488 ,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071 ,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704 ,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242 ,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492 ,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816 ,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732 ,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908 ,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763 ,0.162967994809151,0.113466002047062,0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327 ,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646 ,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514 ,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084 ,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386 ,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101 ,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385 ,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428 ,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987 ,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883 ,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484 ,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373 ,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658 ,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462 ,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587 ,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865 ,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358 ,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328 ,0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711 ,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338 ,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066 ,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667 ,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168 ,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753 ,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501 ,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244 ,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687 ,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246 ,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578 ,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489 ,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344 ,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083 ,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861 ,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144 ,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115 ,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658,0.698300063610077,0.684771537780762 ,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515 ,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856 ,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278 ,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699 ,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249 ,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716 ,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617 ,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275 ,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222 ,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765 ,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668 ,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356 ,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064 ,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829 ,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163 ,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914 ,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919 ,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008,0.199659392237663 ,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282 ,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348 ,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092 ,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691 ,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254 ,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426 ,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086 ,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411 ,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477 ,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754 ,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387 ,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886 ,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322 ,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393 ,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323 ,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383 ,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805 ,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594,0.313732326030731 ,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783 ,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745 ,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548 ,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141 ,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856 ,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393 ,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819 ,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549 ,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264 ,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259 ,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728 ,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662 ,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994 ,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397 ,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743 ,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432 ,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912 ,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163,0.583523273468018,0.458871752023697 ,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586 ,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695 ,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428 ,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084 ,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141 ,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187 ,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701 ,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708 ,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792 ,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552 ,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483 ,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544 ,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508 ,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097 ,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012 ,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559 ,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001 ,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302,0.476934969425201 ,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676 ,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318 ,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923 ,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571 ,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863 ,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219 ,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546 ,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389 ,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969 ,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588 ,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622 ,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012 ,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577 ,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138 ,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649 ,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702 ,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322 ,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028,0.441692322492599,0.315481513738632 ,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957 ,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658 ,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431 ,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986 ,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328 ,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529 ,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019 ,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869 ,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414 ,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775 ,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282 ,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705 ,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856 ,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905 ,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138 ,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005 ,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709 ,0.507110118865967,0.265018463134766,0.501041769981384,0.297658920288086,0.484085887670517,0.325823694467545 ,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871 ,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635 ,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287 ,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739 ,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893 ,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312 ,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956 ,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734 ,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363 ,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742 ,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213 ,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713 ,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885 ,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799 ,0.417306035757065,0.26596075296402 UVIndex: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32 ,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23 ,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62 ,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81 ,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100 ,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110 ,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124 ,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133 ,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149 ,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151 ,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177 ,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193 ,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199 ,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206 ,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211 ,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225 ,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239 ,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246 ,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252,249,254,137,254,249,138,255,256,257 ,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243 ,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197 ,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185 ,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275 ,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278 ,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225 ,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139 ,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223 ,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293 ,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139 ,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89 ,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320 ,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333 ,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348 ,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363 ,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375 ,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389 ,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408 ,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420,421,418,416,402,401,419,422,399,402,423 ,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402 ,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426 ,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455 ,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472 ,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479 ,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500 ,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507 ,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527 ,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540 ,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549 ,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555 ,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322 ,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567 ,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372 ,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592 ,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620 ,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609 ,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640 ,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648,649,650,651,380,379,649,648,389,388,652 ,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665 ,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685 ,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704 ,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710 ,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703 ,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736 ,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750 ,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762 ,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436 ,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796 ,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808 ,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826 ,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838 ,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699 ,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783 ,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530 ,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890 ,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777 ,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911,912,913,912,914,860,861,913,915,914,912 ,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904 ,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940 ,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788 ,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970 ,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986 ,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992 ,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980 ,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010 ,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017 ,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026 ,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035 ,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918 ,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050 ,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896 ,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022 ,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729 ,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067 ,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039 ,1075,1076,1077,1078,1079,1080,1077,1080,1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931 ,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930 ,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031 ,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577 ,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030 ,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091 ,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975 ,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112 ,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811 ,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813 ,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126 ,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138 ,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144 ,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147 ,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159 ,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168 ,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898 ,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180 ,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900 ,1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187 ,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012 ,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059 ,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861 ,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204 ,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164 ,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216 ,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185 ,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224 ,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230 ,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251 ,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262 ,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267 ,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043 ,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274 ,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286 ,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295 ,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300 ,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306,1307,1306,1303,1302,1274 ,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314 ,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305 ,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312 ,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334 ,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337 ,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346 ,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348 ,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358 ,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236 ,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374 ,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380 ,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383 ,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305 ,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274 ,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391 ,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400 ,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377 ,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414 ,1411,1400,1401,1400,1411,1410,1402,1415,1416,1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258 ,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423 ,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357 ,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352 ,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200 ,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335 ,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405 ,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423 ,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338 ,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432 ,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375 ,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440 ,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444 ,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456 ,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466 ,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476 ,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446 ,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477 ,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502 ,1503,1504,1503,1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507 ,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180 ,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027 ,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519 ,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277 ,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395 ,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995 ,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533 ,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542 ,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523 ,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552 ,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558 ,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563 ,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565 ,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574 ,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353 ,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588 ,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589 ,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597,615,1462,1597 ,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603 ,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611 ,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614 ,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620 ,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627 ,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629 ,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631 ,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403 ,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639 ,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643 ,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891 ,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650 ,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976 ,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542 ,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665 ,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653 ,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840 ,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081 ,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192,687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637 ,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752 ,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952 ,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461 ,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633 ,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313 ,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818 ,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979 ,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691 ,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689 ,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922 ,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710 ,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700 ,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588 ,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722 ,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959 ,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330 ,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531 ,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323 ,319,318,1738,1737,1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734 ,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742 ,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155 ,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159 ,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746 ,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727 ,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701 ,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764 ,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718 ,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135 ,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758 ,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768 ,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144 ,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698 ,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773 ,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775 ,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749 ,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789 ,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775,775,1792,1793 ,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136 ,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770 ,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804 ,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208 ,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978 ,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809 ,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672 ,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382 ,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071 ,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447 ,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818 ,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820 ,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815 ,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836 ,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841 ,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836 ,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839 ,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127 ,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855,1856,1857,1854,1857,167,178,1855,660,1216,1858 ,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276 ,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860 ,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207 ,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658 ,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861 ,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877 ,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696 ,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071 ,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760 ,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528 ,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104 ,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673 ,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596 ,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735 ,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810 ,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749 ,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831 ,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462 ,1461,1881,1882,1883,1884,1885,1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889 ,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882 ,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915 ,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921 ,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927 ,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938 ,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951 ,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958 ,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946 ,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983 ,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996 ,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965 ,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002 ,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009 ,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013 ,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023 ,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040 ,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045 ,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944,2052 ,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059 ,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051 ,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993 ,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988 ,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034 ,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075 ,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078 ,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081 ,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026 ,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028 ,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088 ,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094 ,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916 ,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101 ,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110 ,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126 ,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139 ,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140 ,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141,2144,2147,2149,2150,2148,2148,2150,2151,2152 ,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162 ,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143 ,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183 ,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197 ,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183 ,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187 ,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215 ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231 ,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249 ,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232 ,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234 ,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438 ,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263 ,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283 ,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295 ,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450 ,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307 ,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313 ,2317,2318,2316,2317,2319,2320,2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323 ,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339 ,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347 ,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361 ,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370 ,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373 ,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645 ,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133 ,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385 ,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345 ,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117 ,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388 ,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399 ,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414 ,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415 ,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434 ,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452 ,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460 ,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437,2428 ,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476 ,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480 ,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491 ,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408 ,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518 ,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534 ,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544 ,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549 ,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533 ,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544 ,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570 ,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576 ,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580 ,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491 ,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598 ,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611 ,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623 ,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634 ,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098,2636,2637,2638,2583,2582,2638,2097,2584 ,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651 ,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660 ,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665 ,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684 ,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698 ,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702 ,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717 ,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729 ,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740 ,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865 ,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755 ,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765 ,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317 ,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762 ,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661 ,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806 ,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811 ,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824 ,2825,2645,2826,2827,2828,2829,2827,2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839 ,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645 ,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854 ,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547 ,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873 ,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884 ,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696 ,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745 ,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897 ,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668 ,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773 ,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618 ,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775 ,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933 ,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939 ,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946 ,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830 ,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958 ,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891 ,2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777 ,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859 ,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622 ,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732 ,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779 ,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990 ,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998 ,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821 ,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829 ,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922 ,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012 ,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698 ,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838 ,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020 ,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002 ,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028 ,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038 ,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046 ,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882,2887,2886,2736,2551,2553,3049,2736 ,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882 ,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140 ,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716 ,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009 ,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657 ,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078 ,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651 ,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092 ,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092 ,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596 ,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190 ,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194 ,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099 ,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107 ,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495 ,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115 ,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117 ,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564 ,3119,3120,3121,3010,2921,3122,2896,3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127 ,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142 ,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153 ,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159 ,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900 ,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173 ,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105 ,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187 ,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192 ,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196 ,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190 ,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214 ,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124 ,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222 ,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152 ,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237 ,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229 ,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240 ,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249,3248 ,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215 ,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256 ,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268 ,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266 ,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278 ,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147 ,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265 ,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289 ,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301 ,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302 ,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305 ,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918 ,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291 ,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248 ,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198 ,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134 ,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315 ,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319 ,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324,3325,3326,3327,3326,3325,3328,3329,2436,2433 ,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322 ,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342 ,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351 ,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350 ,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368 ,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373 ,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559 ,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712 ,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383 ,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389 ,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164 ,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394 ,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608 ,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279 ,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297 ,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407 ,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410 ,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416 ,3415,2216,3418,3416,3412,2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174 ,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426 ,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381 ,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436 ,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069 ,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678 ,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447 ,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452 ,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449 ,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444 ,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364 ,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426 ,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475 ,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478 ,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484 ,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487 ,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492 ,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298 ,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500,2291,3494,3500 ,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997 ,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303 ,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290 ,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724 ,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493 ,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386 ,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565 ,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421 ,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350 ,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118 ,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868 ,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737 ,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002 ,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874 ,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523 ,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525 ,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452 ,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799 ,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124,2135,3528,2338,3529,3528,2383,2126,2125,3528,3528 ,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357 ,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339 ,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530 ,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956 ,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064 ,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074 ,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874 ,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609 ,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213 ,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929 ,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808 ,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501 ,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035 ,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032 ,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946 ,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552 ,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065 ,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867 ,3558,3109,3110,3109,3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903 ,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799 ,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179 ,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511 ,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550 ,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564 ,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562 ,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565 ,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573 ,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984 ,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583 ,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992 ,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591 ,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895 ,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594 ,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095 ,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164 ,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610 ,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860,2973,3613,3614,2973 ,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612 ,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186 ,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861 ,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957 ,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789 ,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600 ,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243 ,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354 ,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495 ,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315 ,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364 ,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221 ,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258 ,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803 ,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943 ,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153 ,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757 ,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540 ,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918,3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519 ,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157 ,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453 ,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997 ,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624 ,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642 ,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660 ,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675 ,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684 ,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694 ,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711 ,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683 ,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733 ,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649 ,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624 ,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630 ,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403 ,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766 ,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784 ,3766,3785,3786,3787,3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799 ,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816 ,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782 ,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769 ,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793 ,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802 ,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856 ,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843 ,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875 ,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891 ,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903 ,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925 ,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876 ,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940 ,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943 ,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884 ,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932 ,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962 ,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630,2814,2630,2669 ,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968 ,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957 ,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994 ,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004 ,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957 ,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959 ,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973 ,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013 ,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994 ,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026 ,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039 ,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044 ,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059 ,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046 ,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025 ,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056 ,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080 ,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087 ,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076,4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098 ,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109 ,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097 ,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085 ,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102 ,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072 ,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133 ,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123 ,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133 ,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157 ,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166 ,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171 ,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143 ,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179 ,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022 ,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195 ,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200 ,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207 ,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096 ,4209,4213,4113,4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087 ,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191 ,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132 ,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221 ,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235 ,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243 ,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255 ,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264 ,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220 ,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253 ,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275 ,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286 ,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282 ,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306 ,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238 ,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282 ,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296 ,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315 ,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323,4322,4326,4327,4325,4324 ,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331 ,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346 ,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321 ,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361 ,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367 ,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374 ,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344 ,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345 ,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391 ,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243 ,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403 ,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298 ,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405 ,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267 ,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315 ,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416 ,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421 ,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431 ,4436,4437,4433,4432,4437,4438,4434,4433,4439,4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431 ,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451 ,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465 ,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469 ,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475 ,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481 ,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464 ,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490 ,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501 ,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508 ,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515 ,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522 ,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502 ,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536 ,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506 ,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534 ,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529 ,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558 ,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564 ,4568,4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573 ,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583 ,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579 ,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596 ,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607 ,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621 ,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633 ,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642 ,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653 ,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647 ,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418 ,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621 ,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440 ,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643 ,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519 ,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665 ,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471 ,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525 ,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542,4506,4496,4495,4542,4546,4527,4526 ,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668 ,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682 ,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693 ,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679 ,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708 ,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702 ,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723 ,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734 ,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676 ,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669 ,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752 ,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751 ,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761 ,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771 ,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759 ,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794 ,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787 ,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808 ,4795,4796,4810,4809,4796,4797,4810,4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819 ,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832 ,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841 ,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779 ,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849 ,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789 ,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763 ,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864 ,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866 ,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846 ,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876 ,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891 ,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899 ,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900 ,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912 ,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925 ,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940 ,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953 ,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966,4964 ,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976 ,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992 ,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004 ,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013 ,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984 ,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025 ,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924 ,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031 ,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939 ,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045 ,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956 ,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037 ,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967 ,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057 ,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985 ,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062 ,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007 ,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071 ,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066,5072,5019,5065,5019,5018,5067,5065,5018,5073 ,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080 ,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093 ,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106 ,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118 ,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120 ,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143 ,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151 ,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163 ,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135 ,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173 ,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076 ,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187 ,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096 ,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185 ,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109 ,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199 ,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122 ,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199 ,5198,5130,5128,5206,5200,5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138 ,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210 ,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155 ,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211 ,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221 ,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020 ,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167 ,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238 ,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247 ,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260 ,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269 ,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284 ,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293 ,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300 ,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248 ,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301 ,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305 ,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316 ,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324,5302,5305,5325 ,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338 ,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347 ,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362 ,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371 ,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312 ,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324 ,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367 ,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379 ,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386 ,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398 ,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401 ,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402 ,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425 ,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392 ,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443 ,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449 ,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443 ,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460 ,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417,5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425 ,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438 ,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474 ,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476 ,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496 ,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504 ,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479 ,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422 ,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456 ,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457 ,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448 ,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530 ,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483 ,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551 ,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546 ,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563 ,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567 ,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587 ,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547 ,5550,5546,5562,5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561 ,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591 ,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607 ,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601 ,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590 ,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602 ,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627 ,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601 ,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605 ,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657 ,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672 ,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685 ,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701 ,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672 ,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714 ,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692 ,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735 ,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741 ,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748,5747,5673,5671,5749,5748 ,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655 ,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745 ,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760 ,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658 ,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695 ,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729 ,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765 ,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783 ,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801 ,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774 ,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790 ,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837 ,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854 ,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862 ,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793 ,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854 ,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823 ,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876 ,5881,5882,5883,5884,5835,5834,5830,5834,5833,5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800 ,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795 ,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829 ,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806 ,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771 ,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864 ,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885 ,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904 ,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890 ,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918 ,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915 ,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902 ,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887 ,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840 ,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950 ,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965 ,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981 ,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997 ,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013 ,5997,5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024 ,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035 ,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042 ,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053 ,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062 ,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074 ,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045 ,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013 ,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093 ,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980 ,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101 ,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092 ,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114 ,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941 ,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073 ,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958 ,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024 ,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002 ,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932,6144,6085,6086,6145,6145,6086,6087 ,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157 ,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169 ,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123 ,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184 ,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081 ,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188 ,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125 ,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969 ,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201 ,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218 ,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229 ,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237 ,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244 ,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256 ,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275 ,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289 ,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305 ,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321 ,6322,6323,6324,6325,6326,6327,6321,6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332 ,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322 ,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352 ,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362 ,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320 ,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228 ,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386 ,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389 ,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360 ,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348 ,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331 ,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273 ,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383 ,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263 ,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427 ,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429 ,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401 ,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404 ,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353,6296 ,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322 ,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414 ,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397 ,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445 ,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005 ,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149 ,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113 ,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105 ,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126 ,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125 ,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214 ,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388 ,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405 ,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409 ,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278 ,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408 ,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298 ,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422 ,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385,6397,6386,6355,6352,6351,6349,6404,6279,6298 ,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222 ,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272 ,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020 ,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457 ,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465 ,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466 ,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497 ,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513 ,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528 ,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506 ,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519 ,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562 ,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557 ,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580 ,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590 ,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597 ,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604 ,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606 ,6497,6496,6498,6487,6544,6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614 ,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511 ,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553 ,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478 ,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637 ,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628 ,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608 ,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604 ,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639 ,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648 ,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617 ,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664 ,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674 ,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694 ,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631 ,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704 ,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699 ,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705 ,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597,6601,6678,6677 ,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499 ,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720 ,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735 ,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722 ,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756 ,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733 ,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760 ,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793 ,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796 ,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823 ,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840 ,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856 ,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852 ,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854 ,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872 ,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885 ,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784 ,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925 ,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929,6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934 ,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775 ,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961 ,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902 ,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745 ,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980 ,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771 ,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986 ,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801 ,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952 ,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764 ,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784 ,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957 ,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833 ,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962 ,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024 ,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032 ,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048 ,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066 ,7067,7068,7069,7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082 ,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100 ,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118 ,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133 ,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142 ,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167 ,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184 ,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197 ,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203 ,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891 ,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025 ,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226 ,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239 ,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233 ,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233 ,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040 ,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257 ,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256 ,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012,6966,6884,7263,7264,6883 ,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937 ,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002 ,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274 ,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279 ,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100 ,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284 ,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285 ,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021 ,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801 ,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289 ,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937 ,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936 ,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941 ,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977 ,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140 ,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297 ,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899 ,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870 ,6907,6935,6814,6905,6905,6814,6813,6806,6776,6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988 ,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583 ,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623 ,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462 ,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542 ,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669 ,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310 ,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717 ,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924 ,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864 ,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805 ,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913 ,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998 ,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024 ,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313 ,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315 ,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234 ,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084 ,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061 ,7095,7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091 ,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116 ,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326 ,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146 ,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150 ,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329 ,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177 ,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333 ,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329 ,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281 ,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032 ,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248 ,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248 ,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856 ,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280 ,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234 ,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015 ,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264 ,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288,6948,6948,7288,7287,6952,6995,6999 ,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804 ,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870 ,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739 ,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920 ,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474 ,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345 ,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361 ,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372 ,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388 ,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391 ,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408 ,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426 ,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439 ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427 ,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468 ,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482 ,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450 ,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500 ,7501,7502,7499,7503,7504,7505,7506,7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444 ,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435 ,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526 ,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522 ,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484 ,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393 ,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532 ,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555 ,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465 ,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463 ,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546 ,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554 ,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439 ,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574 ,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534 ,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406 ,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545 ,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463 ,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365,7504 ,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591 ,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585 ,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621 ,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631 ,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647 ,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657 ,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651 ,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678 ,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411 ,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601 ,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650 ,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708 ,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722 ,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613 ,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736 ,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747 ,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736 ,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623 ,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758,7759,7676,7675,7645,7760,7758,7761,7760,7645 ,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618 ,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775 ,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661 ,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590 ,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671 ,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617 ,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785 ,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775 ,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783 ,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791 ,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792 ,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724 ,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349 ,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598 ,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519 ,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742 ,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704 ,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399 ,7398,7548,7395,7394,7549,7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765 ,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506 ,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355 ,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800 ,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811 ,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826 ,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839 ,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859 ,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875 ,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893 ,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903 ,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925 ,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941 ,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959 ,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975 ,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983 ,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994 ,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966 ,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963,7984,7971,7975 ,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018 ,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035 ,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910 ,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881 ,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033 ,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033 ,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056 ,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020 ,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064 ,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021 ,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884 ,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037 ,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077 ,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814 ,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833 ,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848 ,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854 ,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868 ,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881,7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879 ,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888 ,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901 ,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092 ,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093 ,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036 ,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956 ,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985 ,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071 ,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813 ,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993 ,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945 ,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029 ,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057 ,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889 ,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091 ,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829 ,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108 ,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114 ,8113,8115,8116,8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057 ,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125 ,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780 ,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511 ,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140 ,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132 ,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158 ,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150 ,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177 ,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164 ,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196 ,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188 ,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148 ,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217 ,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211 ,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129 ,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237 ,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251 ,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219,8245,8244,8220,8220,8244 ,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223 ,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198 ,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159 ,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259 ,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168 ,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238 ,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277 ,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273 ,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303 ,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320 ,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286 ,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343 ,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359 ,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375 ,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393 ,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344 ,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408 ,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370 ,8367,8414,8418,8371,8419,8420,8371,8418,8421,8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424 ,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395 ,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288 ,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449 ,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356 ,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463 ,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468 ,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362 ,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322 ,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468 ,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458 ,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453 ,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303 ,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494 ,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507 ,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516 ,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424 ,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470 ,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325 ,8310,8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311 ,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461 ,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510 ,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517 ,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410 ,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290 ,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530 ,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499 ,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480 ,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525 ,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300 ,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439 ,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545 ,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549 ,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551 ,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502 ,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193 ,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258 ,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265,8264,8263,8203,8201,8184,8185,8183 ,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142 ,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322 ,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350 ,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562 ,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574 ,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582 ,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589 ,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600 ,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580 ,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598 ,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617 ,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626 ,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634 ,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639 ,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646 ,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634 ,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648 ,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665 ,8586,8585,8666,8590,8589,8667,8668,8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668 ,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618 ,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683 ,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689 ,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587 ,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696 ,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694 ,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652 ,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712 ,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713 ,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730 ,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746 ,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754 ,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767 ,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764 ,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708 ,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783 ,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792 ,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748,8800 ,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807 ,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823 ,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838 ,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851 ,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812 ,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884 ,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895 ,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907 ,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921 ,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934 ,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936 ,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955 ,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818 ,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665 ,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868 ,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716 ,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680 ,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780 ,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759,8680,8754,8664,8718,8731,8565,8563,8672,8668 ,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886 ,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817 ,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688 ,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981 ,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942 ,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720 ,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833 ,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709 ,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744 ,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896 ,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011 ,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012 ,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023 ,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905 ,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908 ,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914 ,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929 ,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842 ,9045,9034,8901,8903,9031,9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055 ,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063 ,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914 ,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014 ,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045 ,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790 ,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004 ,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796 ,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717 ,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098 ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107 ,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125 ,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140 ,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152 ,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113 ,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171 ,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144 ,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114 ,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147,9097,9122,9095 ,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182 ,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109 ,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212 ,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207 ,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221 ,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249 ,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270 ,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285 ,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305 ,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316 ,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326 ,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349 ,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365 ,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384 ,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399 ,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412 ,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430 ,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443 ,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378,9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450 ,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461 ,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474 ,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488 ,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258 ,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459 ,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338 ,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314 ,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342 ,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510 ,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403 ,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443 ,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444 ,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538 ,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532 ,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561 ,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568 ,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576 ,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566 ,9564,9565,9551,9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580 ,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583 ,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605 ,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600 ,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631 ,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246 ,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619 ,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605 ,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639 ,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607 ,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603 ,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585 ,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587 ,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609 ,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655 ,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391 ,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659 ,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458 ,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452,9410,9661,9453,9453,9661 ,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312 ,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316 ,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665 ,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682 ,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482 ,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490 ,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436 ,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556 ,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561 ,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691 ,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446 ,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287 ,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382 ,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473 ,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663 ,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659 ,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414 ,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213 ,9707,9707,9213,9223,9708,9708,9223,9239,9709,9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517 ,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135 ,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215 ,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689 ,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469 ,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345 ,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717 ,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717 ,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191 ,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166 ,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219 ,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730 ,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164 ,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192 ,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626 ,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609 ,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522 ,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752 ,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754 ,9761,9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777 ,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790 ,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793 ,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772 ,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820 ,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787 ,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831 ,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771 ,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747 ,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844 ,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862 ,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840 ,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883 ,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905 ,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925 ,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941 ,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957 ,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970 ,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979,9976,9980,9981,9982,9983,9976,9979 ,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002 ,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016 ,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031 ,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045 ,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053 ,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067 ,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079 ,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015 ,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049 ,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947 ,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117 ,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129 ,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944 ,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930 ,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984 ,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943 ,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970 ,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124 ,10143,10144,10145,10146,10147,10148,10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005 ,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153 ,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159 ,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974 ,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178 ,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173 ,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193 ,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178 ,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170 ,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216 ,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193 ,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213 ,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221 ,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235 ,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253 ,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250 ,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245 ,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886 ,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897 ,9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258 ,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264 ,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143 ,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147 ,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161 ,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253 ,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271 ,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232 ,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288 ,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115 ,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152 ,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306 ,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097 ,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093 ,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310 ,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313 ,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945 ,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297 ,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319,10099,9961,9963,10320,10140 ,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085 ,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126 ,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157 ,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332 ,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221 ,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168 ,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141 ,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122 ,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328 ,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154 ,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341 ,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337 ,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115 ,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300 ,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326 ,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344 ,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154 ,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760 ,9761,9838,9837,9760,9837,9836,9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845 ,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351 ,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107 ,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075 ,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138 ,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810 ,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358 ,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362 ,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790 ,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855 ,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372 ,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736 ,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858 ,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799 ,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250 ,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215 ,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380 ,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388 ,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396,10397,10393 ,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384 ,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408 ,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417 ,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396 ,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414 ,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418 ,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439 ,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447 ,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395 ,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442 ,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465 ,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465 ,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467 ,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443 ,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481 ,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487 ,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491 ,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496 ,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499,10457,10461 ,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453 ,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402 ,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475 ,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516 ,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417 ,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470 ,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528 ,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542 ,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529 ,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549 ,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566 ,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578 ,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581 ,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586 ,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581 ,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531 ,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595 ,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584 ,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611,10612,10610 ,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619 ,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561 ,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627 ,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638 ,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649 ,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662 ,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672 ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688 ,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702 ,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710 ,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513 ,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737 ,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751 ,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760 ,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770 ,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762 ,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784 ,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720 ,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537,10537,10536 ,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754 ,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572 ,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387 ,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799 ,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691 ,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779 ,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654 ,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758 ,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795 ,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809 ,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649 ,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595 ,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768 ,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618 ,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568 ,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490 ,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817 ,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667 ,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659,10678,10827 ,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686 ,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837 ,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679 ,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706 ,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855 ,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867 ,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854 ,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871 ,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896 ,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905 ,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917 ,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931 ,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944 ,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954 ,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960 ,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948 ,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904 ,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898 ,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990,10991,10992 ,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004 ,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016 ,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026 ,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042 ,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050 ,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849 ,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005 ,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061 ,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067 ,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076 ,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040 ,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879 ,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996 ,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087 ,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077 ,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983 ,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102 ,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912 ,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097,10945,10944 ,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095 ,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088 ,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925 ,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960 ,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109 ,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892 ,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846 ,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900 ,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869 ,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120 ,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980 ,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980 ,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856 ,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951 ,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932 ,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058 ,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909 ,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125 ,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968,10969,10918 ,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142 ,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157 ,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169 ,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183 ,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187 ,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192 ,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201 ,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209 ,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128 ,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152 ,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141 ,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193 ,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189 ,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174 ,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183 ,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225 ,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032 ,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225 ,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213,11132,11230 ,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202 ,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214 ,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913 ,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192 ,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209 ,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115 ,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512 ,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237 ,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744 ,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661 ,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672 ,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837 ,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262 ,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023 ,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242 ,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253 ,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244 ,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612 ,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275,11276,10810 ,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778 ,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595 ,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922 ,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119 ,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630 ,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290 ,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807 ,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026 ,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946 ,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805 ,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775 ,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999 ,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762 ,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961 ,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794 ,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725 ,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650 ,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681 ,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886,11296,11295,10647,10646,10692,10647 ,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648 ,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766 ,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300 ,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309 ,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318 ,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327 ,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329 ,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329 ,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330 ,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348 ,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363 ,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358 ,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379 ,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355 ,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341 ,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366 ,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388 ,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398 ,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11346,11349 ,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425 ,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422 ,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435 ,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404 ,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413 ,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367 ,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418 ,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355 ,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365 ,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440 ,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411 ,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449 ,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465 ,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462 ,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490 ,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508 ,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526 ,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535 ,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541,11530,11531,11530,11541,11542,11533 ,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553 ,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554 ,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568 ,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581 ,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581 ,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547 ,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591 ,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467 ,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616 ,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495 ,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543 ,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643 ,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555 ,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653 ,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667 ,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675 ,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683 ,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688 ,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696,11697,11459,11455,11458,11698,11696 ,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595 ,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608 ,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711 ,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628 ,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719 ,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730 ,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734 ,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743 ,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758 ,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756 ,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657 ,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751 ,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771 ,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782 ,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795 ,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780 ,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713 ,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813 ,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817,11818,11819,11820,11821,11499,11640 ,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477 ,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519 ,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780 ,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796 ,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475 ,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793 ,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712 ,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707 ,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754 ,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499 ,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630 ,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653 ,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804 ,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786 ,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512 ,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847 ,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831 ,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783 ,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864,11476,11475,11849,11487,11600,11603 ,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546 ,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874 ,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605 ,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578 ,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611 ,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673 ,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503 ,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539 ,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886 ,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901 ,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913 ,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906 ,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663 ,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736 ,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660 ,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737 ,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846 ,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952 ,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953,11960,11961,11924,11923,11894,11911 ,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967 ,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468 ,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994 ,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004 ,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022 ,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038 ,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047 ,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054 ,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055 ,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074 ,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071 ,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093 ,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098 ,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061 ,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108 ,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995 ,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126 ,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009 ,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042,12044,12055,12062,12053,12055,12065 ,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047 ,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077 ,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160 ,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174 ,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182 ,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063 ,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195 ,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204 ,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104 ,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119 ,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218 ,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181 ,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226 ,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233 ,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237 ,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246 ,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263 ,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259 ,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165,11770,11764,12269,12164,12163,12166 ,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252 ,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231 ,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285 ,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297 ,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309 ,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218 ,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314 ,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323 ,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990 ,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338 ,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282 ,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336 ,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350 ,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349 ,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964 ,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222 ,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148 ,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049 ,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090,12359,12360,12162,11967,11966,11997 ,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303 ,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321 ,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047 ,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023 ,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311 ,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193 ,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023 ,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283 ,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366 ,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378 ,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074 ,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127 ,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077 ,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102 ,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100 ,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003 ,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395 ,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401 ,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411,12412,12413,12414,12402,12415,12416 ,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170 ,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239 ,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126 ,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235 ,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360 ,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439 ,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448 ,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354 ,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488 ,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590 ,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596 ,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794 ,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791 ,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865 ,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885 ,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703 ,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839 ,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518 ,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139,12138,12002,11489,11669,12068,12048 ,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341 ,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976 ,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356 ,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351 ,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335 ,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357 ,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377 ,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212 ,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390 ,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470 ,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488 ,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493 ,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510 ,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504 ,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524 ,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530 ,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545 ,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559 ,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554,12566,12567,12568,12556,12554,12569 ,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527 ,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582 ,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490 ,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586 ,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505 ,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535 ,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570 ,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514 ,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538 ,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568 ,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470 ,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548 ,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583 ,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583 ,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481 ,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557 ,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476 ,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593 ,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12609,12608,12613,12614,12612 ,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629 ,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639 ,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615 ,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660 ,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607 ,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685 ,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603 ,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613 ,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628 ,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634 ,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684 ,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620 ,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674 ,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693 ,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696 ,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714 ,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660 ,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687 ,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704,12711,12707,12706,12712,12718,12720 ,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732 ,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746 ,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755 ,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766 ,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777 ,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742 ,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785 ,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790 ,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749 ,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757 ,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767 ,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787 ,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801 ,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784 ,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810 ,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817 ,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821 ,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773 ,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799,12794,12740,12757,12800,12755,12833 ,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837 ,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840 ,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850 ,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857 ,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868 ,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874 ,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851 ,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883 ,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869 ,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892 ,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856 ,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901 ,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839 ,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910 ,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898 ,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919 ,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891 ,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928 ,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931,12914,12915,12933,12932,12915,12916 ,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937 ,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942 ,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930 ,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950 ,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939 ,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876 ,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882 ,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888 ,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964 ,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975 ,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982 ,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962 ,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996 ,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978 ,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005 ,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963 ,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014 ,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981 ,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987,12985,13022,13023,12989,12987,13023 ,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012 ,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032 ,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021 ,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041 ,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030 ,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050 ,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039 ,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059 ,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048 ,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068 ,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057 ,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077 ,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999 ,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005 ,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } LayerElementSmoothing: 0 { Version: 101 Name: "" MappingInformationType: "ByEdge" ReferenceInformationType: "Direct" Smoothing: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0 ,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0 ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 ,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0 ,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0 ,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 ,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0 ,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1 ,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1 ,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1 ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1 ,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 ,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1 ,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1 ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0 ,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1 ,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1 ,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 ,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1 ,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1 ,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1 ,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1 ,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0 ,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1 ,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1 ,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1 ,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1 ,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1 ,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } LayerElementMaterial: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygon" ReferenceInformationType: "IndexToDirect" Materials: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 } LayerElementTexture: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygon" ReferenceInformationType: "IndexToDirect" BlendMode: "Translucent" TextureAlpha: 1 TextureId: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 ,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 } LayerElementSpecularTextures: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygon" ReferenceInformationType: "IndexToDirect" BlendMode: "Translucent" TextureAlpha: 1 TextureId: 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 ,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 ,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,8,8,7,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9 } LayerElementBumpTextures: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygon" ReferenceInformationType: "IndexToDirect" BlendMode: "Translucent" TextureAlpha: 1 TextureId: 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10 ,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 ,13,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,13,13,12,13,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12 ,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11 ,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 ,14,14,14,14,14,14,14,14,14 } Layer: 0 { Version: 100 LayerElement: { Type: "LayerElementNormal" TypedIndex: 0 } LayerElement: { Type: "LayerElementMaterial" TypedIndex: 0 } LayerElement: { Type: "LayerElementTexture" TypedIndex: 0 } LayerElement: { Type: "LayerElementSpecularTextures" TypedIndex: 0 } LayerElement: { Type: "LayerElementBumpTextures" TypedIndex: 0 } LayerElement: { Type: "LayerElementUV" TypedIndex: 0 } LayerElement: { Type: "LayerElementSpecularUV" TypedIndex: 0 } LayerElement: { Type: "LayerElementBumpUV" TypedIndex: 0 } LayerElement: { Type: "LayerElementSmoothing" TypedIndex: 0 } } } Model: "Model::Producer Perspective", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,71.3,287.5 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",10 Property: "FarPlane", "double", "",4000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",0 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 0,71.3,287.5 Up: 0,1,0 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Top", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,4000,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 0,4000,0 Up: 0,0,-1 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Bottom", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,-4000,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 0,-4000,0 Up: 0,0,-1 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Front", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,0,4000 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 0,0,4000 Up: 0,1,0 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Back", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",0,0,-4000 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 0,0,-4000 Up: 0,1,0 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Right", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",4000,0,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: 4000,0,0 Up: 0,1,0 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Model: "Model::Producer Left", "Camera" { Version: 232 Properties60: { Property: "QuaternionInterpolate", "bool", "",0 Property: "RotationOffset", "Vector3D", "",0,0,0 Property: "RotationPivot", "Vector3D", "",0,0,0 Property: "ScalingOffset", "Vector3D", "",0,0,0 Property: "ScalingPivot", "Vector3D", "",0,0,0 Property: "TranslationActive", "bool", "",0 Property: "TranslationMin", "Vector3D", "",0,0,0 Property: "TranslationMax", "Vector3D", "",0,0,0 Property: "TranslationMinX", "bool", "",0 Property: "TranslationMinY", "bool", "",0 Property: "TranslationMinZ", "bool", "",0 Property: "TranslationMaxX", "bool", "",0 Property: "TranslationMaxY", "bool", "",0 Property: "TranslationMaxZ", "bool", "",0 Property: "RotationOrder", "enum", "",0 Property: "RotationSpaceForLimitOnly", "bool", "",0 Property: "RotationStiffnessX", "double", "",0 Property: "RotationStiffnessY", "double", "",0 Property: "RotationStiffnessZ", "double", "",0 Property: "AxisLen", "double", "",10 Property: "PreRotation", "Vector3D", "",0,0,0 Property: "PostRotation", "Vector3D", "",0,0,0 Property: "RotationActive", "bool", "",0 Property: "RotationMin", "Vector3D", "",0,0,0 Property: "RotationMax", "Vector3D", "",0,0,0 Property: "RotationMinX", "bool", "",0 Property: "RotationMinY", "bool", "",0 Property: "RotationMinZ", "bool", "",0 Property: "RotationMaxX", "bool", "",0 Property: "RotationMaxY", "bool", "",0 Property: "RotationMaxZ", "bool", "",0 Property: "InheritType", "enum", "",0 Property: "ScalingActive", "bool", "",0 Property: "ScalingMin", "Vector3D", "",1,1,1 Property: "ScalingMax", "Vector3D", "",1,1,1 Property: "ScalingMinX", "bool", "",0 Property: "ScalingMinY", "bool", "",0 Property: "ScalingMinZ", "bool", "",0 Property: "ScalingMaxX", "bool", "",0 Property: "ScalingMaxY", "bool", "",0 Property: "ScalingMaxZ", "bool", "",0 Property: "GeometricTranslation", "Vector3D", "",0,0,0 Property: "GeometricRotation", "Vector3D", "",0,0,0 Property: "GeometricScaling", "Vector3D", "",1,1,1 Property: "MinDampRangeX", "double", "",0 Property: "MinDampRangeY", "double", "",0 Property: "MinDampRangeZ", "double", "",0 Property: "MaxDampRangeX", "double", "",0 Property: "MaxDampRangeY", "double", "",0 Property: "MaxDampRangeZ", "double", "",0 Property: "MinDampStrengthX", "double", "",0 Property: "MinDampStrengthY", "double", "",0 Property: "MinDampStrengthZ", "double", "",0 Property: "MaxDampStrengthX", "double", "",0 Property: "MaxDampStrengthY", "double", "",0 Property: "MaxDampStrengthZ", "double", "",0 Property: "PreferedAngleX", "double", "",0 Property: "PreferedAngleY", "double", "",0 Property: "PreferedAngleZ", "double", "",0 Property: "LookAtProperty", "object", "" Property: "UpVectorProperty", "object", "" Property: "Show", "bool", "",0 Property: "NegativePercentShapeSupport", "bool", "",1 Property: "DefaultAttributeIndex", "int", "",0 Property: "Lcl Translation", "Lcl Translation", "A+",-4000,0,0 Property: "Lcl Rotation", "Lcl Rotation", "A+",0,0,0 Property: "Lcl Scaling", "Lcl Scaling", "A+",1,1,1 Property: "Visibility", "Visibility", "A+",0 Property: "Color", "Color", "A",0.8,0.8,0.8 Property: "Roll", "Roll", "A+",0 Property: "OpticalCenterX", "Real", "A+",0 Property: "OpticalCenterY", "Real", "A+",0 Property: "BackgroundColor", "Color", "A+",0.63,0.63,0.63 Property: "TurnTable", "Real", "A+",0 Property: "DisplayTurnTableIcon", "bool", "",1 Property: "Motion Blur Intensity", "Real", "A+",1 Property: "UseMotionBlur", "bool", "",0 Property: "UseRealTimeMotionBlur", "bool", "",1 Property: "ResolutionMode", "enum", "",0 Property: "ApertureMode", "enum", "",2 Property: "GateFit", "enum", "",0 Property: "FieldOfView", "FieldOfView", "A+",40 Property: "FieldOfViewX", "FieldOfView", "A+",1 Property: "FieldOfViewY", "FieldOfView", "A+",1 Property: "FocalLength", "Real", "A+",21.3544940948486 Property: "CameraFormat", "enum", "",0 Property: "AspectW", "double", "",320 Property: "AspectH", "double", "",200 Property: "PixelAspectRatio", "double", "",1 Property: "UseFrameColor", "bool", "",0 Property: "FrameColor", "ColorRGB", "",0.3,0.3,0.3 Property: "ShowName", "bool", "",1 Property: "ShowGrid", "bool", "",1 Property: "ShowOpticalCenter", "bool", "",0 Property: "ShowAzimut", "bool", "",1 Property: "ShowTimeCode", "bool", "",0 Property: "NearPlane", "double", "",1 Property: "FarPlane", "double", "",30000 Property: "FilmWidth", "double", "",0.816 Property: "FilmHeight", "double", "",0.612 Property: "FilmAspectRatio", "double", "",1.33333333333333 Property: "FilmSqueezeRatio", "double", "",1 Property: "FilmFormatIndex", "enum", "",4 Property: "ViewFrustum", "bool", "",1 Property: "ViewFrustumNearFarPlane", "bool", "",0 Property: "ViewFrustumBackPlaneMode", "enum", "",2 Property: "BackPlaneDistance", "double", "",100 Property: "BackPlaneDistanceMode", "enum", "",0 Property: "ViewCameraToLookAt", "bool", "",1 Property: "LockMode", "bool", "",0 Property: "LockInterestNavigation", "bool", "",0 Property: "FitImage", "bool", "",0 Property: "Crop", "bool", "",0 Property: "Center", "bool", "",1 Property: "KeepRatio", "bool", "",1 Property: "BackgroundMode", "enum", "",0 Property: "BackgroundAlphaTreshold", "double", "",0.5 Property: "ForegroundTransparent", "bool", "",1 Property: "DisplaySafeArea", "bool", "",0 Property: "SafeAreaDisplayStyle", "enum", "",1 Property: "SafeAreaAspectRatio", "double", "",1.33333333333333 Property: "Use2DMagnifierZoom", "bool", "",0 Property: "2D Magnifier Zoom", "Real", "A+",100 Property: "2D Magnifier X", "Real", "A+",50 Property: "2D Magnifier Y", "Real", "A+",50 Property: "CameraProjectionType", "enum", "",1 Property: "UseRealTimeDOFAndAA", "bool", "",0 Property: "UseDepthOfField", "bool", "",0 Property: "FocusSource", "enum", "",0 Property: "FocusAngle", "double", "",3.5 Property: "FocusDistance", "double", "",200 Property: "UseAntialiasing", "bool", "",0 Property: "AntialiasingIntensity", "double", "",0.77777 Property: "UseAccumulationBuffer", "bool", "",0 Property: "FrameSamplingCount", "int", "",7 } MultiLayer: 0 MultiTake: 0 Hidden: "True" Shading: Y Culling: "CullingOff" TypeFlags: "Camera" GeometryVersion: 124 Position: -4000,0,0 Up: 0,1,0 LookAt: 0,0,0 ShowInfoOnMoving: 1 ShowAudio: 0 AudioColor: 0,1,0 CameraOrthoZoom: 1 } Pose: "Pose::skinCluster3", "BindPose" { Type: "BindPose" Version: 100 Properties60: { } NbPoseNodes: 59 PoseNode: { Node: "Model::him" Matrix: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 } PoseNode: { Node: "Model::Root" Matrix: 1.33158055981697e-006,-5.5511151231309e-017,1.00000000000003,0,1,1.66752833763587e-010,-1.33158055981693e-006 ,0,-1.66752944785748e-010,1.00000000000004,2.22044604925039e-016,0,0.0375633844953955,37.4609861130865,2.23054871115166 ,1 } PoseNode: { Node: "Model::Pelvis" Matrix: -1.66752944785752e-010,1.00000000000094,3.33066907387862e-016,0,2.75770739245021e-006,-3.97450655096411e-017 ,1.00000000000003,0,1.00000000000091,1.66752833764135e-010,-2.75770739256375e-006,0,0.0375620733105228,37.4609888630758 ,1.27468111719239,1 } PoseNode: { Node: "Model::Spine" Matrix: 1.24029684198113e-006,0.995498838507049,-0.0947735868260166,0,-1.27428576289917e-006,0.0947735868271358,0.995498838507889 ,0,0.999999999999406,-1.1139454664704e-006,1.38609741848246e-006,0,0.0375671700624984,41.2469948552468,1.27108130580428 ,1 } PoseNode: { Node: "Model::Spine1" Matrix: 1.03960780457953e-006,0.98074971266116,-0.19526913922047,0,-1.1645631082995e-006,0.195269139221088,0.980749712661819 ,0,0.999999999999837,-7.92191801362473e-007,1.34514820815766e-006,0,0.0375726762066018,45.7695196641318,0.836911606169505 ,1 } PoseNode: { Node: "Model::L_Thigh1" Matrix: 0.210985191505916,-0.975253732219803,0.0660718325861944,0,0.177993635259534,0.104794326230727,0.978435668241952 ,0,-0.961146957227345,-0.194675058661601,0.195698995513005,0,3.5327074628724,37.4609841497582,1.27467801962757 ,1 } PoseNode: { Node: "Model::R_Thigh" Matrix: -0.210987587098956,-0.975253163175659,0.0660724603122853,0,-0.177990489435915,0.104794812011874,0.97843623227106 ,0,-0.961147083401435,0.194677624807938,-0.195696186916594,0,-3.45758308113989,37.4609935763943,1.27468759391711 ,1 } PoseNode: { Node: "Model::Spine2" Matrix: 1.15766800847204e-006,0.995290550202889,-0.0969362439528012,0,-1.28535910910391e-006,0.0969362439538238,0.995290550203612 ,0,0.999999999999517,-1.02761825064411e-006,1.3915258848223e-006,0,0.0375774663776998,50.2253922781078,-0.0539313180359257 ,1 } PoseNode: { Node: "Model::L_Knee2" Matrix: 0.140922950790799,-0.955665576234115,-0.258542307170597,0,0.237354544212354,-0.220918711872771,0.945969229345032 ,0,-0.961146961126678,-0.194674940381941,0.195699024114051,0,7.38470396372674,19.6555865808851,2.48096457007616 ,1 } PoseNode: { Node: "Model::R_Knee" Matrix: -0.140926372210181,-0.955665194315514,-0.258541892648224,0,-0.23735235663778,-0.220918035591436,0.945969990525419 ,0,-0.961147085585364,0.194677625250286,-0.195696187361257,0,-7.30962477938486,19.6556065018375,2.48098499916812 ,1 } PoseNode: { Node: "Model::Spine3" Matrix: 0.0267457025467083,0.997222184485877,-0.0695175881175487,0,0.0695652398894222,0.0675171408584094,0.99529002121809 ,0,0.997218805426799,-0.0314557323172693,-0.067566193734535,0,0.037582954481531,54.7475266033293,-0.498784000447107 ,1 } PoseNode: { Node: "Model::L_Ankle1" Matrix: -0.00974436259181705,-0.998083556732566,-0.0611084168461832,0,0.261574774854858,-0.0615276811691846,0.963220090472259 ,0,-0.965134004335868,-0.00659841591207144,0.261673027918648,0,9.55886480195558,4.91157385166946,-1.50782703524102 ,1 } PoseNode: { Node: "Model::R_Ankle" Matrix: 0.00974138551962694,-0.998083577574783,-0.0611084475807566,0,-0.26157229002768,-0.0615269335133899,0.963220845632343 ,0,-0.965134744120757,0.00660116199430494,-0.261670363784603,0,-9.48383716527764,4.91159968219961,-1.50780021776383 ,1 } PoseNode: { Node: "Model::Neck" Matrix: 0.0524868392889062,0.940038670507985,0.337005085889192,0,0.0529138494736022,-0.339614137295755,0.939075268843438 ,0,0.997218760704303,-0.0314568537088636,-0.0675663317258446,0,0.185453422192648,60.2682047905477,-0.886519744810882 ,1 } PoseNode: { Node: "Model::L_Ball" Matrix: 0.255589775823783,0.19195411195591,0.947537621302088,0,-0.0564815951498304,0.981381805094744,-0.183574958091845 ,0,-0.965134008856972,-0.00659851424383035,0.261672987109975,0,11.1487853847708,-0.714600338285195,4.21443710294172 ,1 } PoseNode: { Node: "Model::R_Ball" Matrix: -0.25558666067715,0.191954823954638,0.947538281383767,0,0.0564837267618767,0.981381639119508,-0.183575147793249 ,0,-0.965134739912784,0.00660112479013478,-0.261670355112633,0,-11.0737572844988,-0.714570040351037,4.21446814199767 ,1 } PoseNode: { Node: "Model::Head" Matrix: 0.0413181877665486,0.987834399898251,0.149920513802912,0,0.062028292927883,-0.152295266367851,0.986386738366224 ,0,0.99721878219907,-0.0314563913752569,-0.067566229726332,0,0.392981060570839,63.9850191920975,0.445964203562684 ,1 } PoseNode: { Node: "Model::L_Clavicle" Matrix: 0.978469078551498,-0.19899715238426,-0.0547582098290914,0,-0.069589287242088,-0.0683111384044164,-0.995234104790114 ,0,0.194308156552106,0.977616366684517,-0.0806884043782442,0,1.34840940139458,60.2019324480378,-1.79660442619341 ,1 } PoseNode: { Node: "Model::R_Clavicle" Matrix: -0.987461923011747,-0.13698449419504,0.0784481919759329,0,-0.0695892727841481,-0.0683111257247411,-0.995234106778274 ,0,0.141690531380276,-0.988214994757188,0.0579219885650571,0,-1.09138459344411,60.2788924913577,-1.63129036253243 ,1 } PoseNode: { Node: "Model::L_eye_joint1" Matrix: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121 ,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,2.04555419810496,67.8963551483937,2.37140015218962 ,1 } PoseNode: { Node: "Model::R_eye_joint" Matrix: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121 ,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,-0.409936873234029,68.0595129473661,2.4771378649045 ,1 } PoseNode: { Node: "Model::L_eyeBall_joint2" Matrix: 0.0413367875848507,0.987788683622589,0.150216314763167,0,0.124663367302492,-0.154268945761706,0.980132793135531 ,0,0.991337639848011,-0.0217890619226689,-0.129518029951179,0,2.05070439627867,67.878345659435,4.23560315393477 ,1 } PoseNode: { Node: "Model::R_eyeBall_joint" Matrix: 0.0387875582448076,0.985236212535225,0.166749169520768,0,0.100028336113103,-0.1698648688521,0.980377689145253 ,0,0.994228272900296,-0.0213468072050495,-0.105140166318426,0,-0.429499383170284,68.0711452108758,4.27851568464557 ,1 } PoseNode: { Node: "Model::L_UpperArm" Matrix: 0.674535534616324,-0.734845412587802,0.0707395700590386,0,-0.00572428097575982,-0.101024952776188,-0.994867403846182 ,0,0.738220225503697,0.670668478827922,-0.0723513795484483,0,8.04491907067728,58.8400224990099,-2.17136220574529 ,1 } PoseNode: { Node: "Model::R_UpperArm" Matrix: -0.703610256733915,-0.691373653145981,0.164119291692498,0,-0.1347478692944,-0.0969550739362427,-0.986125182940114 ,0,0.697693056382247,-0.715962484913526,-0.0249425301025703,0,-7.84944071573371,59.3413887525868,-1.09440146152723 ,1 } PoseNode: { Node: "Model::L_Forearm" Matrix: 0.662227001235097,-0.700126797308046,0.266979158818587,0,0.128399382035873,-0.245002469789134,-0.960982554234246 ,0,0.738220180823852,0.670668526064849,-0.0723513975612902,0,16.9097893109037,49.1825482190907,-1.24168969306059 ,1 } PoseNode: { Node: "Model::R_Forearm" Matrix: -0.662814701550135,-0.65833014375124,0.356760672082372,0,-0.271847634986037,-0.232377145821934,-0.933862759981466 ,0,0.697692990233294,-0.715962550614917,-0.0249424944978314,0,-17.0964154474492,50.2552282683214,1.06248452295354 ,1 } PoseNode: { Node: "Model::L_Hand" Matrix: 0.525245261158389,-0.819456511598867,0.229365340473718,0,-0.790238340982239,-0.569703536988409,-0.225746104342684 ,0,0.315659364239265,-0.0626812373747693,-0.946800025542229,0,24.0787631140926,41.6032895272955,1.6485065671716 ,1 } PoseNode: { Node: "Model::R_Hand" Matrix: -0.539910124506363,-0.785857706458226,0.301537587819719,0,0.715295250733165,-0.617193555619553,-0.327757250060974 ,0,0.443677562763431,0.0387289149319088,0.895349262736555,0,-24.2717529148383,43.1284417167981,4.92461529417918 ,1 } PoseNode: { Node: "Model::L_Thumb1" Matrix: -0.241495132730921,-0.623205901261989,0.74383772606254,0,0.74882388880975,-0.60721234791625,-0.265623820790119 ,0,0.61720575088779,0.492856585321279,0.613310267810766,0,23.907239967734,40.0198169594799,3.46924073788322,1 } PoseNode: { Node: "Model::L_Index1" Matrix: 0.476186922188061,-0.826192452107739,0.30108482700071,0,-0.714199475385093,-0.563128923203692,-0.415698178519829 ,0,0.512996263158813,-0.0170846090838862,-0.858220820124501,0,25.8572264968031,38.1282899455549,4.12055942809326 ,1 } PoseNode: { Node: "Model::L_Middle1" Matrix: 0.570318660983103,-0.809442163568181,0.13978575995208,0,-0.773811834783023,-0.586520001785938,-0.239185251125484 ,0,0.275593789834533,0.0282439112719806,-0.960859260283435,0,26.2532517128633,38.0536303136344,2.99594441017406 ,1 } PoseNode: { Node: "Model::L_Ring1" Matrix: 0.58288563544361,-0.812067739772282,-0.0281118678441426,0,-0.810871911031163,-0.579105536366181,-0.0844006630517097 ,0,0.0522593310342686,0.0719910332368333,-0.996035291673013,0,26.6641372400988,38.0871363638132,1.89145970528058 ,1 } PoseNode: { Node: "Model::L_Pinky1" Matrix: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787 ,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,26.5389279380321,38.1112872763109,0.859131146820495 ,1 } PoseNode: { Node: "Model::R_Thumb1" Matrix: 0.299955264051308,-0.640285298618272,0.707150444388401,0,-0.814394997426312,-0.557902711924946,-0.159703974445855 ,0,0.496777192390993,-0.527995676382642,-0.688790919898989,0,-23.9561106277145,41.5296020162524,6.71234048568143 ,1 } PoseNode: { Node: "Model::R_Index1" Matrix: -0.482154356012774,-0.795962880036411,0.366019579093359,0,0.614915285773909,-0.605054061971992,-0.505755637789783 ,0,0.624024310384197,-0.0187812660351121,0.781179170712812,0,-25.9153301313679,39.7613856649882,7.62853698134705 ,1 } PoseNode: { Node: "Model::R_Middle1" Matrix: -0.595926399395956,-0.772654529636261,0.21880759560448,0,0.696185127521994,-0.632889114944885,-0.338788554082281 ,0,0.400247429545363,-0.0495624932684929,0.91506592530629,0,-26.463194722499,39.7164998561171,6.56787767402416 ,1 } PoseNode: { Node: "Model::R_Ring1" Matrix: -0.631144710533568,-0.773772868523889,0.0541477347483783,0,0.754157767297867,-0.62847227279389,-0.190443192019585 ,0,0.181390093764703,-0.0793613433479259,0.980203763672088,0,-27.0162528423477,39.7804122897328,5.52870707356913 ,1 } PoseNode: { Node: "Model::R_Pinky1" Matrix: -0.540667622835062,-0.833617327916268,-0.112963789652428,0,0.839021778202407,-0.544097550461574,-0.000555890927663861 ,0,-0.0609999443314432,-0.0950797095804421,0.993598968834152,0,-27.0300412701334,39.8010486385352,4.4888290833198 ,1 } PoseNode: { Node: "Model::L_Thumb2" Matrix: -0.135155863907165,-0.701497726806397,0.699738402577797,0,0.775106460820417,-0.51477500599991,-0.366355962170193 ,0,0.617205698961515,0.492856600851178,0.61331027335005,0,23.6318315714115,39.3090915103631,4.31753622028422 ,1 } PoseNode: { Node: "Model::L_Index2" Matrix: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676 ,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.5589812285729,36.910733644079,4.56426645349348 ,1 } PoseNode: { Node: "Model::L_Middle2" Matrix: 0.499759799299395,-0.858072301605573,0.118118678235241,0,-0.821150580980059,-0.512751598060226,-0.250594545036832 ,0,0.2755938001527,0.0282438330507944,-0.960859246286125,0,27.1253418110482,36.8158938867169,3.20969391712155 ,1 } PoseNode: { Node: "Model::L_Ring2" Matrix: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018 ,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,27.4821214428528,36.9475330246914,1.85200927333924 ,1 } PoseNode: { Node: "Model::L_Pinky2" Matrix: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787 ,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,27.0676322099866,37.1318253052027,0.653993696506666 ,1 } PoseNode: { Node: "Model::R_Thumb2" Matrix: 0.183942672645697,-0.711563369205016,0.678117059737729,0,-0.848161196618615,-0.463571215689533,-0.256367513175262 ,0,0.496777269596991,-0.52799564816841,-0.68879096195946,0,-23.6140335044233,40.7993987668532,7.51879688568199 ,1 } PoseNode: { Node: "Model::R_Index2" Matrix: -0.364861769159626,-0.891041931293543,0.270037532993132,0,0.690991774155602,-0.45353240699875,-0.562884345430602 ,0,0.624024271802067,-0.0187812798263943,0.78117923606601,0,-26.6258774379163,38.588378479262,8.16793742758162 ,1 } PoseNode: { Node: "Model::R_Middle2" Matrix: -0.532122282112629,-0.825523064728124,0.188036378951055,0,0.746088418575545,-0.562188027154702,-0.356786686762729 ,0,0.400247390778701,-0.0495624225379808,0.915065924284819,0,-27.3744398996367,38.5350163451575,6.902461468954 ,1 } PoseNode: { Node: "Model::R_Ring2" Matrix: -0.446935139950889,-0.894507302286969,0.0102839893074999,0,0.875983248722551,-0.439952916617308,-0.197724129284052 ,0,0.181390106308193,-0.0793613189517498,0.98020376496034,0,-27.9019606689573,38.6945496193369,5.60469461416785 ,1 } PoseNode: { Node: "Model::R_Pinky2" Matrix: -0.5406675646503,-0.833617365648527,-0.112963789690979,0,0.839021814302138,-0.544097494825449,-0.000555860376745012 ,0,-0.0609999635143494,-0.0950796971405138,0.993598968846862,0,-27.6419641277959,38.8575661966203,4.36097765072208 ,1 } PoseNode: { Node: "Model::L_Thumb3" Matrix: -0.150316369043588,-0.691277124434889,0.706782057371717,0,0.772309497099311,-0.528420538698419,-0.352575863363785 ,0,0.61720584336029,0.492856632260411,0.613310211936847,0,23.4449809601311,38.3392942259419,5.2849036370461,1 } PoseNode: { Node: "Model::L_Index3" Matrix: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676 ,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.9217272116612,35.9400189097872,4.80042005026002 ,1 } PoseNode: { Node: "Model::L_Middle3" Matrix: 0.444149191605448,-0.890216436988675,0.101223529453903,0,-0.85251369302479,-0.454661417782185,-0.257882648909561 ,0,0.275593828665205,0.0282439000328089,-0.960859249476387,0,27.8895391841724,35.5037919764501,3.39031248905482 ,1 } PoseNode: { Node: "Model::L_Ring3" Matrix: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018 ,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,28.0197072816314,35.6691937847349,1.78781962542131 ,1 } PoseNode: { Node: "Model::L_Pinky3" Matrix: 0.407760983432604,-0.896533476315931,-0.17308589317943,0,-0.893470978416277,-0.430848807188504,0.126802786997145 ,0,-0.188256783383293,0.102941959924762,-0.976709963153078,0,27.4688838331264,36.3884799778826,0.498308263782114 ,1 } PoseNode: { Node: "Model::R_Thumb3" Matrix: 0.200525290419247,-0.702344061022863,0.683009913076289,0,-0.844394482826131,-0.477423758496535,-0.243031928267996 ,0,0.496777164440344,-0.527995735037014,-0.688790961793811,0,-23.3597375381589,39.8156859646858,8.45627353609159 ,1 } PoseNode: { Node: "Model::R_Index3" Matrix: -0.364861777469363,-0.891041943274719,0.270037482231165,0,0.690991846413133,-0.453532383677801,-0.562884275518276 ,0,0.624024186931544,-0.0187812745593408,0.781179303989205,0,-27.013671960418,37.6413385227463,8.45494644727821 ,1 } PoseNode: { Node: "Model::R_Middle3" Matrix: -0.481422853291761,-0.861020641468519,0.163937983653291,0,0.779765361368942,-0.506149369069037,-0.368481784767604 ,0,0.400247490114989,-0.0495624334986858,0.91506591765906,0,-28.1881241464277,37.2726865185971,7.18999280407797 ,1 } PoseNode: { Node: "Model::R_Ring3" Matrix: -0.446935168407541,-0.894507287994929,0.0102839957306443,0,0.875983239723845,-0.439952948090884,-0.197724099119921 ,0,0.181390079649833,-0.0793613055628818,0.980203770977579,0,-28.5224230630313,37.4527394415117,5.61897135092215 ,1 } PoseNode: { Node: "Model::R_Pinky3" Matrix: -0.482801791338162,-0.8684419272543,-0.112743678120074,0,0.873602569081369,-0.486588709999451,0.00707029180252432 ,0,-0.060999963693244,-0.0950796974193541,0.99359897176079,0,-28.1063699787253,38.1415268190634,4.26394683249727 ,1 } } Material: "Material::character_anim:headM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties60: { Property: "ShadingModel", "KString", "", "Phong" Property: "MultiLayer", "bool", "",0 Property: "EmissiveColor", "ColorRGB", "",0,0,0 Property: "EmissiveFactor", "double", "",1 Property: "AmbientColor", "ColorRGB", "",0.0495800003409386,0.0495800003409386,0.0495800003409386 Property: "AmbientFactor", "double", "",1 Property: "DiffuseColor", "ColorRGB", "",1,1,1 Property: "DiffuseFactor", "double", "",1 Property: "Bump", "Vector3D", "",0.5,0.5,0.5 Property: "TransparentColor", "ColorRGB", "",0,0,0 Property: "TransparencyFactor", "double", "",1 Property: "SpecularColor", "ColorRGB", "",0.5,0.5,0.5 Property: "SpecularFactor", "double", "",1 Property: "ShininessExponent", "double", "",1.24573092330083 Property: "ReflectionColor", "ColorRGB", "",0,0,0 Property: "ReflectionFactor", "double", "",0.5 Property: "Emissive", "Vector3D", "",0,0,0 Property: "Ambient", "Vector3D", "",0.0495800003409386,0.0495800003409386,0.0495800003409386 Property: "Diffuse", "Vector3D", "",1,1,1 Property: "Specular", "Vector3D", "",0.5,0.5,0.5 Property: "Shininess", "double", "",1.24573092330083 Property: "Opacity", "double", "",1 Property: "Reflectivity", "double", "",0 } } Material: "Material::character_anim:jacketM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties60: { Property: "ShadingModel", "KString", "", "Phong" Property: "MultiLayer", "bool", "",0 Property: "EmissiveColor", "ColorRGB", "",0,0,0 Property: "EmissiveFactor", "double", "",1 Property: "AmbientColor", "ColorRGB", "",0,0,0 Property: "AmbientFactor", "double", "",1 Property: "DiffuseColor", "ColorRGB", "",1,1,1 Property: "DiffuseFactor", "double", "",1 Property: "Bump", "Vector3D", "",0.5,0.5,0.5 Property: "TransparentColor", "ColorRGB", "",0,0,0 Property: "TransparencyFactor", "double", "",1 Property: "SpecularColor", "ColorRGB", "",0.5,0.5,0.5 Property: "SpecularFactor", "double", "",1 Property: "ShininessExponent", "double", "",1.24573092330083 Property: "ReflectionColor", "ColorRGB", "",0,0,0 Property: "ReflectionFactor", "double", "",0.5 Property: "Emissive", "Vector3D", "",0,0,0 Property: "Ambient", "Vector3D", "",0,0,0 Property: "Diffuse", "Vector3D", "",1,1,1 Property: "Specular", "Vector3D", "",0.5,0.5,0.5 Property: "Shininess", "double", "",1.24573092330083 Property: "Opacity", "double", "",1 Property: "Reflectivity", "double", "",0 } } Material: "Material::character_anim:pantsM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties60: { Property: "ShadingModel", "KString", "", "Phong" Property: "MultiLayer", "bool", "",0 Property: "EmissiveColor", "ColorRGB", "",0,0,0 Property: "EmissiveFactor", "double", "",1 Property: "AmbientColor", "ColorRGB", "",0,0,0 Property: "AmbientFactor", "double", "",1 Property: "DiffuseColor", "ColorRGB", "",1,1,1 Property: "DiffuseFactor", "double", "",0.800000011920929 Property: "Bump", "Vector3D", "",0.5,0.5,0.5 Property: "TransparentColor", "ColorRGB", "",0,0,0 Property: "TransparencyFactor", "double", "",1 Property: "SpecularColor", "ColorRGB", "",0.5,0.5,0.5 Property: "SpecularFactor", "double", "",1 Property: "ShininessExponent", "double", "",1.24573092330083 Property: "ReflectionColor", "ColorRGB", "",0,0,0 Property: "ReflectionFactor", "double", "",0.5 Property: "Emissive", "Vector3D", "",0,0,0 Property: "Ambient", "Vector3D", "",0,0,0 Property: "Diffuse", "Vector3D", "",0.800000011920929,0.800000011920929,0.800000011920929 Property: "Specular", "Vector3D", "",0.5,0.5,0.5 Property: "Shininess", "double", "",1.24573092330083 Property: "Opacity", "double", "",1 Property: "Reflectivity", "double", "",0 } } Material: "Material::character_anim:upBodyM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties60: { Property: "ShadingModel", "KString", "", "Phong" Property: "MultiLayer", "bool", "",0 Property: "EmissiveColor", "ColorRGB", "",0,0,0 Property: "EmissiveFactor", "double", "",1 Property: "AmbientColor", "ColorRGB", "",0,0,0 Property: "AmbientFactor", "double", "",1 Property: "DiffuseColor", "ColorRGB", "",1,1,1 Property: "DiffuseFactor", "double", "",1 Property: "Bump", "Vector3D", "",0.5,0.5,0.5 Property: "TransparentColor", "ColorRGB", "",0,0,0 Property: "TransparencyFactor", "double", "",1 Property: "SpecularColor", "ColorRGB", "",0.5,0.5,0.5 Property: "SpecularFactor", "double", "",1 Property: "ShininessExponent", "double", "",1.19371980378707 Property: "ReflectionColor", "ColorRGB", "",0,0,0 Property: "ReflectionFactor", "double", "",0.5 Property: "Emissive", "Vector3D", "",0,0,0 Property: "Ambient", "Vector3D", "",0,0,0 Property: "Diffuse", "Vector3D", "",1,1,1 Property: "Specular", "Vector3D", "",0.5,0.5,0.5 Property: "Shininess", "double", "",1.19371980378707 Property: "Opacity", "double", "",1 Property: "Reflectivity", "double", "",0 } } Material: "Material::character_anim:eyeBallM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties60: { Property: "ShadingModel", "KString", "", "Phong" Property: "MultiLayer", "bool", "",0 Property: "EmissiveColor", "ColorRGB", "",0,0,0 Property: "EmissiveFactor", "double", "",1 Property: "AmbientColor", "ColorRGB", "",0,0,0 Property: "AmbientFactor", "double", "",1 Property: "DiffuseColor", "ColorRGB", "",1,1,1 Property: "DiffuseFactor", "double", "",1 Property: "Bump", "Vector3D", "",0.5,0.5,0.5 Property: "TransparentColor", "ColorRGB", "",0,0,0 Property: "TransparencyFactor", "double", "",1 Property: "SpecularColor", "ColorRGB", "",0.5,0.5,0.5 Property: "SpecularFactor", "double", "",1 Property: "ShininessExponent", "double", "",65.9860000610352 Property: "ReflectionColor", "ColorRGB", "",0,0,0 Property: "ReflectionFactor", "double", "",0.5 Property: "Emissive", "Vector3D", "",0,0,0 Property: "Ambient", "Vector3D", "",0,0,0 Property: "Diffuse", "Vector3D", "",1,1,1 Property: "Specular", "Vector3D", "",0.5,0.5,0.5 Property: "Shininess", "double", "",65.9860000610352 Property: "Opacity", "double", "",1 Property: "Reflectivity", "double", "",0 } } Deformer: "Deformer::Skin_him", "Skin" { Version: 100 MultiLayer: 0 Type: "Skin" Properties60: { } Link_DeformAcuracy: 50 } Deformer: "SubDeformer::Cluster_Root", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6514,6515,6516,6517,6518,6519,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6558,6575 ,6660,6661,6664,6712,6818,6819,6821,6891,6892,6893,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000 ,11001,11020 Weights: 0.148829370737076,0.17685829102993,0.113096483051777,0.12204097956419,0.0812638849020004,0.00829269830137491,0.0237471498548985 ,0.0290536563843489,0.0317849144339561,0.0604783557355404,0.0725867226719856,0.0152020892128348,0.028587194159627 ,0.0811868533492088,0.0760499387979507,0.159019902348518,0.0269343629479408,0.0198612324893475,0.082656018435955,0.0308674443513155 ,0.134406641125679,0.0715651735663414,0.0573297701776028,0.0623637847602367,0.0700489580631256,0.0712813660502434 ,0.0706327632069588,0.0615008324384689,0.0691068470478058,0.0702681243419647,0.0494278706610203,0.0572692602872849 ,0.048890370875597,0.0335745625197887,0.034069836139679,0.0332106426358223,0.0273313820362091,0.0328722968697548,0.033588569611311 ,0.0339282527565956,0.0229143295437098,0.0325650237500668,0.0331987328827381,0.0264733470976353,0.0256072301417589 ,0.0269183497875929 Transform: 6.12303176910625e-017,0.999999999999114,-1.66752672949146e-010,0,0,1.66752672949004e-010,0.999999999999965,0,0.999999999999079 ,-6.12303176910646e-017,1.02103191405195e-026,0,-2.23054871114961,-0.0375633907420858,-37.4609861130789,1 TransformLink: 6.12303176911753e-017,0,1.00000000000092,0,1.00000000000089,1.667526729493e-010,-6.12303176911731e-017,0,-1.66752672949158e-010 ,1.00000000000004,1.02103191405202e-026,0,0.0375633844953997,37.4609861130865,2.23054871115166,1 } Deformer: "SubDeformer::Cluster_Pelvis", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6514,6515,6516,6517,6518,6519,6521,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539 ,6540,6541,6542,6544,6545,6549,6558,6568,6569,6574,6575,6576,6577,6578,6579,6590,6591,6593,6594,6601,6602,6603,6644 ,6645,6646,6647,6648,6652,6653,6654,6655,6659,6660,6661,6662,6664,6665,6666,6667,6673,6674,6680,6681,6688,6691,6696 ,6697,6698,6699,6700,6701,6702,6705,6712,6713,6714,6724,6725,6730,6731,6732,6733,6734,6735,6738,6748,6749,6751,6752 ,6760,6761,6762,6805,6806,6807,6811,6812,6813,6817,6818,6819,6820,6821,6822,6823,6824,6831,6832,6838,6839,6847,6856 ,6860,6890,6891,6892,6893,6894,6906,6909,6910,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001 ,11020 Weights: 0.799383759498596,0.75867486000061,0.854301154613495,0.847075760364532,0.899999976158142,0.0894757434725761,0.0345684066414833 ,0.0351840741932392,0.949999988079071,0.949999988079071,0.949999988079071,0.910582900047302,0.899999976158142,0.949999988079071 ,0.0527760647237301,0.899999976158142,0.899999976158142,0.783881008625031,0.949999988079071,0.949999988079071,0.899999976158142 ,0.949999988079071,0.619111835956573,0.591075420379639,0.449584573507309,0.185553684830666,0.805147349834442,0.235315650701523 ,0.0519597008824348,0.899999976158142,0.13294880092144,0.117739856243134,0.603049695491791,0.899999976158142,0.283097892999649 ,0.887273788452148,0.624301850795746,0.085120789706707,0.783373355865479,0.630953192710876,0.384793758392334,0.0488782748579979 ,0.523425757884979,0.474541455507278,0.0999121963977814,0.0011430912418291,0.206513106822968,0.214638784527779,0.176684230566025 ,0.113295316696167,0.159522891044617,0.114811077713966,0.455518305301666,0.572888076305389,0.180876806378365,0.899999976158142 ,0.899999976158142,0.188521772623062,0.899999976158142,0.289416015148163,0.471739292144775,0.0972785204648972,0.136938780546188 ,0.472441554069519,0.562164723873138,0.13294880092144,0.751014232635498,0.104111813008785,0.755477726459503,0.731383979320526 ,0.46454194188118,0.158830061554909,0.673907995223999,0.224742695689201,0.0140152266249061,0.0582037307322025,0.899999976158142 ,0.0200727786868811,0.0173638090491295,0.193586349487305,0.104791283607483,0.609969437122345,0.899999976158142,0.411259800195694 ,0.276800006628037,0.884683132171631,0.630967020988464,0.115955218672752,0.81635719537735,0.671586453914642,0.355839669704437 ,0.0490408353507519,0.542843878269196,0.470961928367615,0.103352710604668,0.159476667642593,0.1330576390028,0.0624692253768444 ,0.19200786948204,0.3819380402565,0.541414737701416,0.155516654253006,0.899999976158142,0.899999976158142,0.160386845469475 ,0.899999976158142,0.167465269565582,0.487605810165405,0.0952591747045517,0.104544185101986,0.474321901798248,0.575775980949402 ,0.167334824800491,0.760569870471954,0.0504525750875473,0.0977368652820587,0.1761714220047,0.899999976158142,0.899999976158142 ,0.899999976158142,0.162171944975853,0.10718097537756,0.499940901994705,0.115701332688332,0.0335655994713306,0.0331794954836369 ,0.033482737839222,0.0363343097269535,0.0336760170757771,0.033488791435957,0.0334953814744949,0.0385428369045258,0.0340126343071461 ,0.0335763432085514,0.0367633253335953,0.0371963866055012,0.036540824919939 Transform: -1.66752994577569e-010,2.75770739236699e-006,0.999999999991485,0,0.999999999999055,-3.97446220415258e-017,1.66752994577685e-010 ,0,4.996005878912e-016,0.99999999999236,-2.75770739236458e-006,0,-37.4609888630342,-1.27468122076786,-0.0375585643593996 ,1 TransformLink: -1.66752994577884e-010,1.00000000000094,4.99600587892144e-016,0,2.75770739238816e-006,-3.97446220418308e-017,1.00000000000003 ,0,1.00000000000091,1.66752994579256e-010,-2.75770739239057e-006,0,0.0375620733105271,37.4609888630758,1.27468111719239 ,1 } Deformer: "SubDeformer::Cluster_Spine", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670 ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693 ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736 ,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759 ,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782 ,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805 ,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828 ,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851 ,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874 ,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897 ,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920 ,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943 ,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966 ,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989 ,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012 ,5013,5301,5302,5308,5315,5316,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5336,5337,5339,5340,5341,5342 ,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5392,5393,5442,5445,5446,5461,5468,5476,5481,5482 ,5530,5531,5739,5740,5741,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769 ,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5786,5787,5788,5808,5809,5816,5823,5824,5872,5875,5876,5891,5892 ,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515 ,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538 ,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561 ,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584 ,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607 ,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630 ,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653 ,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676 ,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699 ,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722 ,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745 ,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768 ,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791 ,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814 ,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837 ,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860 ,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883 ,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906 ,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181 ,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204 ,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227 ,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250 ,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273 ,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296 ,7297,7298,7299,7300,7301,7302,7303,7306,7307,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322 ,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345 ,7346,7347,7348,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369 ,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392 ,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416 ,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439 ,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462 ,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485 ,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508 ,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531 ,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554 ,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577 ,7578,7579,7580,7581,7582,7583,7584,7585,7614,7615,7616,7617,7618,7619,7620,7621,7622,7624,7625,7630,7632,7633,7668 ,7669,7670,7671,7672,7674,7681,7692,7694,7695,7696,7709,7710,7716,7717,7718,7719,7720,7721,7722,7723,7724,7798,7799 ,7800,7806,7807,7808,7809,7810,7811,7812,7813,7848,7850,7851,7853,7854,7855,7909,7910,7911,7912,7913,7914,7915,7916 ,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939 ,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962 ,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,8000,9108,9109,9110,9111,9112,9113,9114,9115,9116,9118,9119,9126 ,9127,9162,9163,9164,9165,9166,9168,9175,9186,9188,9189,9190,9203,9204,9210,9211,9212,9213,9214,9215,9216,9217,9218 ,9219,9296,9297,9298,9300,9301,9304,9305,9306,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323 ,9329,9330,9331,9350,9351,9352,9353,9359,9361,9363,9364,9365,9366,9367,9368,9374,9375,9376,9377,9424,9425,9426,9427 ,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450 ,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9473,9474 ,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497 ,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520 ,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9537,9538,9539,9540,9541,9542,9543,9544 ,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567 ,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590 ,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613 ,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636 ,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659 ,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682 ,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705 ,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728 ,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751 ,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774 ,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797 ,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9848,9849,9850 ,9851,9852,9853,9854,9855,9856,9857,9858,9881,9882,9883,9884,9885,9915,9916,9927,9928,9929,9930,9931,9932,9933,9934 ,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957 ,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980 ,9981,9984,9985,9986,9987,9988,9989,9990,9994,9995,9996,9997,9999,10000,10001,10002,10003,10004,10005,10006,10007 ,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026 ,10027,10028,10029,10032,10033,10034,10035,10036,10037,10038,10040,10041,10042,10043,10044,10045,10046,10047,10048 ,10049,10050,10051,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161 ,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180 ,10181,10182,10183,10184,10185,10188,10189,10194,10216,10223,10224,10227,10228,10229,10230,10231,10232,10241,10275 ,10276,10277,10285,10448,10449,10456,10585,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598 ,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617 ,10618,10619,10620,10621,10622,10623,10624,10625,10628,10629,10634,10656,10661,10664,10665,10666,10667,10668,10669 ,10670,10677,10709,10710,10711,10712,10720,10876,10877,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918 ,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937 ,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956 ,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975 ,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994 ,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013 ,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032 ,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051 ,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070 ,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089 ,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108 ,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127 ,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146 ,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165 ,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184 ,11185,11186,11187,11188,11189,11190,11191,11192 Weights: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.485887348651886,0.485664427280426 ,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323 ,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369 ,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425 ,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227 ,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683 ,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244 ,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.244441643357277 ,0.247425943613052,0.246487095952034,0.241566851735115,0.250035226345062,0.250796467065811,0.25156769156456,0.253332167863846 ,0.251615196466446,0.253420650959015,0.250169515609741,0.25105145573616,0.247620776295662,0.246866270899773,0.244649648666382 ,0.241981253027916,0.242047905921936,0.237693607807159,0.240509778261185,0.235144719481468,0.240449100732803,0.235020831227303 ,0.241887286305428,0.237368017435074,0.200827375054359,0.195532456040382,0.205721631646156,0.208878561854362,0.209438517689705 ,0.207261577248573,0.202953681349754,0.197683557868004,0.192855000495911,0.189739361405373,0.189154654741287,0.191265761852264 ,0.197463110089302,0.194227814674377,0.200458317995071,0.202400833368301,0.202764689922333,0.201455339789391,0.19883306324482 ,0.195606157183647,0.192636698484421,0.190710946917534,0.190338432788849,0.191622346639633,0.24601249396801,0.196497097611427 ,0.373516350984573,0.376757621765137,0.369537591934204,0.365251928567886,0.382805824279785,0.382776975631714,0.386137038469315 ,0.388760268688202,0.380438297986984,0.387044966220856,0.392412126064301,0.379495084285736,0.370759338140488,0.358247369527817 ,0.354949980974197,0.368560016155243,0.36077743768692,0.390685200691223,0.387448787689209,0.386936098337173,0.380599111318588 ,0.38983428478241,0.39421871304512,0.377999693155289,0.370091617107391,0.366377264261246,0.357207298278809,0.352117955684662 ,0.341517567634583,0.388354241847992,0.392351239919662,0.364930152893066,0.375461101531982,0.353334933519363,0.338869631290436 ,0.318140685558319,0.374630272388458,0.253818362951279,0.330474436283112,0.336101323366165,0.251405566930771,0.258881658315659 ,0.329255163669586,0.258955836296082,0.326492011547089,0.25557616353035,0.322989732027054,0.23970103263855,0.309830665588379 ,0.213416919112206,0.286303400993347,0.360161691904068,0.354063391685486,0.364664852619171,0.351037055253983,0.347294807434082 ,0.343819558620453,0.332145482301712,0.309136658906937,0.283766984939575,0.182805374264717,0.322982370853424,0.316466480493546 ,0.293134987354279,0.276267886161804,0.274140179157257,0.295364439487457,0.303073704242706,0.354633033275604,0.364007532596588 ,0.343757838010788,0.334839880466461,0.348560273647308,0.33023327589035,0.317398726940155,0.361911833286285,0.34889817237854 ,0.201658248901367,0.193551778793335,0.34731462597847,0.353964239358902,0.359329700469971,0.341922789812088,0.344691544771194 ,0.341207295656204,0.337673217058182,0.325471311807632,0.302787721157074,0.373936861753464,0.356122374534607,0.357345730066299 ,0.375500559806824,0.368380576372147,0.346033930778503,0.37697446346283,0.37307596206665,0.353593707084656,0.331589162349701 ,0.358462393283844,0.329241544008255,0.348726212978363,0.314913302659988,0.291479706764221,0.335428446531296,0.26182433962822 ,0.353498190641403,0.244015663862228,0.247688680887222,0.245483666658401,0.242484733462334,0.2377700060606,0.23008830845356 ,0.237610965967178,0.241329908370972,0.249271839857101,0.252844214439392,0.24934010207653,0.252829015254974,0.246366634964943 ,0.249618053436279,0.232329145073891,0.234494656324387,0.210118144750595,0.209856301546097,0.331883281469345,0.244902163743973 ,0.237399041652679,0.247255980968475,0.24386802315712,0.199680224061012,0.193274289369583,0.251673072576523,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.228242665529251,0.433049440383911 ,0.063678465783596,0.550755441188812,0.905955851078033,0.277041643857956,0.420005768537521,0.408874332904816,0.334239274263382 ,0.426755398511887,0.241860181093216,0.899999976158142,0.500172555446625,0.50339287519455,0.420577973127365,0.428421944379807 ,0.167543798685074,0.0129226706922054,0.5,0.36642724275589,0.25941988825798,0.245549902319908,0.302309572696686,0.202298223972321 ,0.253012418746948,0.389088153839111,0.188150689005852,0.940474212169647,0.944787383079529,0.545298874378204,0.404611170291901 ,0.5118807554245,0.34206211566925,0.193565756082535,0.0798677578568459,0.359307199716568,0.220871970057487,0.201562315225601 ,0.553697109222412,0.584769606590271,0.909379601478577,0.911072134971619,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.522571086883545,0.397793114185333,0.326984196901321,0.244352966547012,0.427823901176453 ,0.458259165287018,0.461357414722443,0.394107729196548,0.899999976158142,0.27571764588356,0.420828282833099,0.409706592559814 ,0.334164440631866,0.426904082298279,0.241386741399765,0.500177025794983,0.503991425037384,0.42418310046196,0.334534138441086 ,0.899999976158142,0.194053664803505,0.169082060456276,0.5,0.366859018802643,0.258727252483368,0.244743958115578,0.341296017169952 ,0.212976187467575,0.27468204498291,0.370680093765259,0.143536567687988,0.54621148109436,0.405595302581787,0.512151777744293 ,0.236699178814888,0.130981206893921,0.079025998711586,0.359673470258713,0.202563613653183,0.173596724867821,0.553828299045563 ,0.586015403270721,0.303222894668579,0.908758401870728,0.899999976158142,0.899999976158142,0.899999976158142,0.416867136955261 ,0.435121119022369,0.502011477947235,0.507540047168732,0.517787754535675,0.920168399810791,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.944217801094055,0.939911723136902,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.0499768182635307,0.0622557625174522,0.0314086191356182,0.0294202249497175 ,0.0173703264445066,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.0223812647163868,0.0184281393885612,0.0165518838912249,0.0271356329321861,0.0262770988047123,0.0286044720560312 ,0.899999976158142,0.0176951847970486,0.0220540463924408,0.0550919994711876,0.0200411379337311,0.0253521800041199 ,0.016105180606246,0.0171583909541368,0.0850373953580856,0.0758332088589668,0.0980560183525085,0.372282832860947,0.470829576253891 ,0.058711938560009,0.202237918972969,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.0271500088274479,0.899999976158142,0.899999976158142,0.899999976158142,0.474399924278259,0.484295248985291,0.473359733819962 ,0.486365467309952,0.470664262771606,0.374861598014832,0.366387665271759,0.437676966190338,0.425652414560318,0.46727055311203 ,0.195437729358673,0.221567079424858,0.119305938482285,0.0407545492053032,0.196933567523956,0.0379016511142254,0.175045162439346 ,0.450425118207932,0.466519892215729,0.479820847511292,0.494895756244659,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.474442213773727,0.317375123500824,0.335670530796051,0.0426778271794319,0.0611641183495522,0.0800886005163193 ,0.386461079120636,0.899999976158142,0.402333498001099,0.899999976158142,0.899999976158142,0.483016639947891,0.492276847362518 ,0.482892215251923,0.210124060511589,0.273503005504608,0.491192519664764,0.210949346423149,0.480654180049896,0.460385143756866 ,0.489091366529465,0.485488176345825,0.409366816282272,0.485847264528275,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.490868449211121,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.406117528676987,0.101345561444759,0.487271994352341,0.498311102390289,0.479613840579987 ,0.208456739783287,0.422964990139008,0.287179529666901,0.166849553585052,0.111482918262482,0.485398918390274,0.102656565606594 ,0.114537015557289,0.118492007255554,0.132055476307869,0.0896488949656487,0.0687534958124161,0.064977765083313,0.0578959956765175 ,0.497809112071991,0.200785055756569,0.134202092885971,0.121802054345608,0.105732023715973,0.0741553604602814,0.055485475808382 ,0.0617626309394836,0.899999976158142,0.899999976158142,0.419221252202988,0.0352571569383144,0.0283600147813559,0.400317370891571 ,0.49568247795105,0.0277331583201885,0.284585326910019,0.250304728746414,0.425329893827438,0.47427025437355,0.484636008739471 ,0.462838232517242,0.478616893291473,0.474339812994003,0.44830396771431,0.305842816829681,0.490415573120117,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.216201022267342,0.409849554300308,0.428201466798782,0.299757570028305 ,0.493067115545273,0.477148860692978,0.899999976158142,0.899999976158142,0.0576332211494446,0.179240301251411,0.4087735414505 ,0.243735611438751,0.479312092065811,0.899999976158142,0.899999976158142,0.899999976158142,0.0528160966932774,0.0476635284721851 ,0.0912690982222557,0.38397690653801,0.0972289070487022,0.200551301240921,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.0280716568231583,0.899999976158142,0.899999976158142,0.899999976158142,0.452894061803818,0.47402435541153,0.483769923448563 ,0.47241935133934,0.486981511116028,0.47670915722847,0.470452100038528,0.374543905258179,0.339963465929031,0.443937122821808 ,0.425873547792435,0.467277556657791,0.203481242060661,0.226448878645897,0.115699142217636,0.0413811802864075,0.22074756026268 ,0.199416875839233,0.0382523499429226,0.171607092022896,0.490018874406815,0.486813902854919,0.433707058429718,0.483929514884949 ,0.479347556829453,0.494737774133682,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.47393861413002 ,0.335015952587128,0.0346741303801537,0.0523174330592155,0.280055373907089,0.402526408433914,0.899999976158142,0.403372168540955 ,0.899999976158142,0.899999976158142,0.480757892131805,0.486051797866821,0.48539599776268,0.482352942228317,0.202147349715233 ,0.275057405233383,0.48567208647728,0.0835829302668571,0.0729673504829407,0.209692642092705,0.480644881725311,0.460294842720032 ,0.485169321298599,0.409366607666016,0.476667702198029,0.497557014226913,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.487591832876205,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.363091051578522,0.486785143613815,0.492457121610641,0.479441195726395,0.480146616697311 ,0.483121246099472,0.484910160303116,0.286455065011978,0.164788633584976,0.115249574184418,0.104643501341343,0.114593736827374 ,0.117495730519295,0.129164040088654,0.0909549221396446,0.0774164944887161,0.0694414302706718,0.060987826436758,0.498031169176102 ,0.132643029093742,0.0914852172136307,0.0800103396177292,0.055613748729229,0.0585689470171928,0.899999976158142,0.899999976158142 ,0.430365353822708,0.0360974445939064,0.0292764361947775,0.413414359092712,0.0287411995232105,0.331874817609787,0.242936596274376 ,0.426501959562302,0.474240958690643,0.484399497509003,0.462895035743713,0.491324007511139,0.481851667165756,0.472675174474716 ,0.462384283542633,0.304057329893112,0.487220883369446,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.209291517734528,0.393088698387146,0.427878260612488,0.4830022752285,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.303087472915649,0.0536928921937943,0.325082153081894,0.202775940299034,0.476244419813156,0.499079555273056 ,0.496010959148407,0.497787863016129,0.0508093200623989,0.421548753976822,0.0662107318639755,0.0445234589278698,0.077688030898571 ,0.0827849209308624,0.0493801422417164,0.079817570745945,0.0710747241973877,0.494894951581955,0.47863557934761,0.485665053129196 ,0.0818784013390541,0.485051035881042,0.419161200523376,0.492303609848022,0.492112398147583,0.0693842321634293,0.0480330437421799 ,0.422746449708939,0.0661759674549103,0.0414951294660568,0.077379547059536,0.0510545521974564,0.077643096446991,0.478472769260406 ,0.100985370576382,0.212159022688866,0.0847534462809563,0.0664583668112755,0.469830930233002,0.466865479946136,0.468666285276413 ,0.467166066169739,0.475262671709061,0.513434112071991,0.45416596531868,0.0456559956073761,0.0381095334887505,0.04617028683424 ,0.458466410636902,0.492889791727066,0.466491162776947,0.467004597187042,0.465437352657318,0.468502849340439,0.497051328420639 ,0.48866793513298,0.476463884115219,0.28717103600502,0.336231589317322,0.487657696008682,0.277788311243057,0.282144725322723 ,0.256011962890625,0.180214300751686,0.287221610546112,0.264949142932892,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.128804847598076,0.124300897121429,0.119410678744316,0.121989578008652,0.126729294657707,0.12162871658802 ,0.0948135182261467,0.13428783416748,0.0900763049721718,0.0886399820446968,0.0841514021158218,0.081154964864254,0.0858331248164177 ,0.0372096374630928,0.0309558864682913,0.0244138482958078,0.0176111347973347,0.014983844012022,0.129338786005974,0.0909664332866669 ,0.0378601811826229,0.0245837960392237,0.0324109755456448,0.0193320214748383,0.0143751567229629,0.0130134420469403 ,0.0144294565543532,0.0651924386620522,0.0683740973472595,0.0874151587486267,0.0967726111412048,0.118158273398876 ,0.15954327583313,0.133861139416695,0.120879530906677,0.0863500535488129,0.0355506911873817,0.0342619754374027,0.0312653295695782 ,0.0287093352526426,0.021574629470706,0.0168448891490698,0.0118433842435479,0.0115172686055303,0.0134986257180572 ,0.0120220622047782,0.0131854433566332,0.0606853812932968,0.0832474008202553,0.093217745423317,0.11446488648653,0.129967495799065 ,0.0255544222891331,0.0210145488381386,0.0194068942219019,0.0119495382532477,0.00901409145444632,0.00822153221815825 ,0.0083137908950448,0.00901816599071026,0.0524943694472313,0.0553345903754234,0.068617656826973,0.076964758336544 ,0.192974328994751,0.188027605414391,0.188158750534058,0.185076355934143,0.14940433204174,0.144968196749687,0.182830169796944 ,0.154406279325485,0.174253150820732,0.193655014038086,0.185767650604248,0.246047541499138,0.24127422273159,0.241126343607903 ,0.237629055976868,0.235797300934792,0.24693551659584,0.239405423402786,0.038468461483717,0.188023090362549,0.128091588616371 ,0.133428320288658,0.138287797570229,0.178264051675797,0.23220020532608,0.241286396980286,0.227848380804062,0.151058748364449 ,0.113301075994968,0.11036491394043,0.125564470887184,0.0676738694310188,0.0801245048642159,0.167598038911819,0.128094255924225 ,0.232770204544067,0.237745985388756,0.184255436062813,0.179258301854134,0.229751572012901,0.23304195702076,0.17586824297905 ,0.238762646913528,0.182600617408752,0.13694255053997,0.233596786856651,0.199792727828026,0.225131019949913,0.228194355964661 ,0.172236859798431,0.220965817570686,0.190604701638222,0.183457717299461,0.232855081558228,0.0307963136583567,0.146925538778305 ,0.202488541603088,0.0871826484799385,0.049006026238203,0.132937029004097,0.131644994020462,0.130768299102783,0.122386641800404 ,0.0836272537708282,0.0803681313991547,0.00396483391523361,0.00633750250563025,0.00248087686486542,0.0016853892011568 ,0.00199530832469463,0.00109372811857611,0.00142326357308775,0.0220866464078426,0.0141881955787539,0.00774034112691879 ,0.00421709381043911,0.00252895569428802,0.00525286328047514,0.0047554038465023,0.00263063330203295,0.0451593361794949 ,0.0221035573631525,0.00112951546907425,0.00106509344186634,0.00172538100741804,0.00144575606100261,0.00125635962467641 ,0.00322978175245225,0.00199160212650895,0.00201613828539848,0.00330872484482825,0.00193723302800208,0.00445955852046609 ,0.00245628482662141,0.00561189698055387,0.00297321169637144,0.00795925036072731,0.0075264573097229,0.00421811267733574 ,0.00596139440312982,0.00241706985980272,0.00402618013322353,0.00628479011356831,0.0041719451546669,0.00203253165818751 ,0.00271617225371301,0.00141770753543824,0.00252853706479073,0.00138250086456537,0.00662316475063562,0.00596707733348012 ,0.00925629865378141,0.0103338537737727,0.0120895095169544,0.0127093885093927,0.00898659415543079,0.00683298194780946 ,0.00487540382891893,0.00407768040895462,0.0348199345171452,0.0649327710270882,0.066335991024971,0.0358296371996403 ,0.161739841103554,0.0818046554923058,0.0807016789913177,0.15451543033123,0.0940489768981934,0.0603382438421249,0.0702256262302399 ,0.0352267138659954,0.0277259387075901,0.0261700768023729,0.255933821201324,0.346736639738083,0.336984097957611,0.143246442079544 ,0.0974620506167412,0.043335136026144,0.031309686601162,0.432955324649811,0.483261168003082,0.478565245866776,0.422408699989319 ,0.304098427295685,0.207750976085663,0.146186009049416,0.0112169776111841,0.00671346625313163,0.00299824820831418 ,0.00180409394670278,0.00173606141470373,0.0016881157644093,0.00215591676533222,0.00260239094495773,0.00358258979395032 ,0.00706381490454078,0.00335836806334555,0.00202733650803566,0.00176701706368476,0.00121282087638974,0.00118987401947379 ,0.00561260897666216,0.00241978513076901,0.00387012725695968,0.0596045516431332,0.0244100801646709,0.244619458913803 ,0.029373075813055,0.43449404835701,0.486235320568085,0.48059156537056,0.427583009004593,0.307614177465439,0.20915924012661 ,0.148607149720192,0.0463326685130596,0.0486371889710426,0.00634428393095732,0.00365646346472204,0.0118476608768106 ,0.0321184881031513,0.0478746853768826,0.0106965135782957,0.0764963403344154,0.148223981261253,0.331562787294388,0.467333436012268 ,0.469035536050797,0.00947490520775318,0.0101797981187701,0.0101308375597,0.014061757363379,0.0202330444008112,0.0269427467137575 ,0.0267547108232975,0.0241191368550062,0.0281163435429335,0.0306482631713152,0.0295060761272907,0.0109167220070958 ,0.0117025338113308,0.0124574238434434,0.050898727029562,0.0503738038241863,0.0578904375433922,0.0922311246395111 ,0.141333788633347,0.22456730902195,0.227567330002785,0.0177560783922672,0.0190714467316866,0.0195607356727123,0.0255508925765753 ,0.052836962044239,0.0918030440807343,0.15401166677475,0.169818848371506,0.344298928976059,0.156067594885826,0.424768060445786 ,0.465730160474777,0.319286823272705,0.291175782680511,0.0849423706531525,0.0330376215279102,0.0144369145855308,0.0126413479447365 ,0.00879246182739735,0.0079611511901021,0.0291281025856733,0.0667730271816254,0.104921028017998,0.0713702738285065 ,0.112708725035191,0.166204929351807,0.13128425180912,0.208592295646667,0.249056994915009,0.319560289382935,0.350937873125076 ,0.167568385601044,0.0866376608610153,0.0311222057789564,0.0183327905833721,0.0126609988510609,0.00722455093637109 ,0.00863407645374537,0.00679195951670408,0.00553479325026274,0.0042190826497972,0.00392617005854845,0.00431412877514958 ,0.00698245875537395,0.0130870034918189,0.0372610092163086,0.142217367887497,0.333639472723007,0.424810439348221,0.00361940916627645 ,0.027364544570446,0.00949712097644806,0.0702332332730293,0.0720498561859131,0.0657416209578514,0.0468012802302837 ,0.0353254340589046,0.103264316916466,0.10613390058279,0.0849223732948303,0.0626742914319038,0.0477514900267124,0.0023828495759517 ,0.00336645683273673,0.00471905944868922,0.00498715182766318,0.0053791287355125,0.00838648993521929,0.0250504445284605 ,0.0453383177518845,0.0595372840762138,0.0807408019900322,0.00324741145595908,0.00398993026465178,0.0115005858242512 ,0.0220406595617533,0.0313174091279507,0.0482421852648258,0.00227482104673982,0.00196545757353306,0.00375738996081054 ,0.083605483174324,0.0822170674800873,0.0831636190414429,0.0630473122000694,0.0481768995523453,0.3446224629879,0.425492912530899 ,0.131611213088036,0.113337218761444,0.102451033890247,0.340103626251221,0.338898211717606,0.0360977724194527,0.0380000621080399 ,0.471558958292007,0.465493679046631,0.418613165616989,0.329782277345657,0.474898964166641,0.4684838950634,0.419469267129898 ,0.332224696874619,0.478455871343613,0.470837116241455,0.42595586180687,0.15671406686306,0.26562574505806,0.26365339756012 ,0.257146269083023,0.0138539336621761,0.114299923181534,0.188113182783127,0.0199986882507801,0.0217276699841022,0.0225842781364918 ,0.0265044532716274,0.0309454146772623,0.0353365615010262,0.0395141430199146,0.0400376841425896,0.0374672003090382 ,0.120118767023087,0.129973024129868,0.0787881836295128,0.0643641352653503,0.0733145847916603,0.0299731642007828,0.0131016932427883 ,0.00807503890246153,0.00641247676685452,0.00469847675412893,0.00116353866178542,0.00109649647492915,0.0015472712693736 ,0.0015398912364617,0.00181988475378603,0.00185549294110388,0.00183399405796081,0.00189391942694783,0.00124193157535046 ,0.0014578535920009,0.0014706157380715,0.00103451905306429,0.00117230892647058,0.00116537837311625,0.00127800682093948 ,0.00128758465871215,0.00169459613971412,0.00166226760484278,0.00101601879578084,0.00132098130416125,0.00105506856925786 ,0.00109436130151153,0.00142546708229929,0.00165331270545721,0.00175113021396101,0.00116391049232334,0.00149487575981766 ,0.00275484379380941,0.00286094797775149,0.00283250957727432,0.00315297488123178,0.00307540665380657,0.00171014678198844 ,0.00189925020094961,0.00185286905616522,0.00317150028422475,0.00369846285320818,0.00408397102728486,0.00546123459935188 ,0.0460431762039661,0.0475341975688934,0.038765087723732,0.00189711654093117,0.00187039421871305,0.00190330250188708 ,0.00195048784371465,0.00183602317702025,0.0025363105814904,0.00109787075780332,0.00116721540689468,0.00113554787822068 ,0.00149305525701493,0.00161524920258671,0.057351540774107,0.0321330279111862,0.0826931446790695,0.0506877452135086 ,0.0968986079096794,0.0525840595364571,0.0556077249348164,0.0939208716154099,0.0881008803844452,0.0490996241569519 ,0.0903309360146523,0.00541983218863606,0.00260564009658992,0.00511829322203994,0.00349382869899273,0.00537390913814306 ,0.00596560025587678,0.00700216926634312,0.0063464199192822,0.00247354246675968,0.00279559753835201,0.00530987698584795 ,0.00257820077240467,0.00249433261342347,0.0997933968901634,0.0544734485447407,0.0484018176794052,0.00362300151027739 ,0.00399520713835955,0.0385792851448059,0.00472923275083303,0.00707319425418973,0.022978238761425,0.0392886884510517 ,0.0639106407761574,0.0347827896475792,0.00521091790869832,0.00661726342514157,0.0041303988546133,0.00309630646370351 ,0.00707019120454788,0.00562763307243586,0.00834548845887184,0.00777499936521053,0.0427671931684017,0.0307781342417002 ,0.0477634370326996,0.0568116456270218,0.0543619580566883,0.0481494814157486,0.0539024993777275,0.0498538091778755 ,0.0479667596518993,0.0577677562832832,0.00659023737534881,0.00663879793137312,0.00526854488998652,0.00690277572721243 ,0.0539496801793575,0.00554723339155316,0.00560073181986809,0.0486485287547112,0.00913042854517698,0.00652239751070738 ,0.0011291156988591,0.00109412742312998,0.00103278865572065,0.00147875573020428,0.00147705664858222,0.0017723172204569 ,0.00181253568734974,0.00182461738586426,0.00188483169768006,0.00118751765694469,0.00142098765354604,0.00146216049324721 ,0.00114015850704163,0.00115575676318258,0.00132532499264926,0.00134176283609122,0.0017199928406626,0.0016922679496929 ,0.00105575239285827,0.00134141428861767,0.00106850953307003,0.0010271678911522,0.00135946099180728,0.00160738476552069 ,0.00174183479975909,0.00121512752957642,0.00152292428538203,0.00197672424837947,0.00273400289006531,0.00280472636222839 ,0.0028488168027252,0.00316720129922032,0.00305494153872132,0.0017370292916894,0.00188972463365644,0.00180811155587435 ,0.00311806984245777,0.0040378887206316,0.00432216608896852,0.00690364046022296,0.00387458363547921,0.00535369943827391 ,0.0023983852006495,0.00160886731464416,0.00332784000784159,0.00185783591587096,0.00101551448460668,0.00134352233726531 ,0.0238124150782824,0.0478002242743969,0.0526870340108871,0.0381637215614319,0.0153794707730412,0.00393905816599727 ,0.00180854869540781,0.00274698971770704,0.0018029633210972,0.00197869702242315,0.00171526428312063,0.00514251785352826 ,0.0047717816196382,0.00266478047706187,0.489171802997589,0.488262295722961,0.0431586429476738,0.0143493311479688 ,0.00275305891409516,0.00104679516516626,0.00102104444522411,0.00112195441033691,0.00115225685294718,0.00160331535153091 ,0.00175481359474361,0.00187249213922769,0.00149584782775491,0.00132315745577216,0.00103499344550073,0.00103408901486546 ,0.0608331300318241,0.0343646034598351,0.0864746570587158,0.0532681569457054,0.0959476977586746,0.0519197396934032 ,0.0571485608816147,0.0961936935782433,0.0861227437853813,0.0494562238454819,0.0908803790807724,0.00510046212002635 ,0.00244628125801682,0.00376808317378163,0.00580758368596435,0.00642081862315536,0.00778972543776035,0.00451423460617661 ,0.00583442393690348,0.0062086065299809,0.00240529561415315,0.00264307809993625,0.00508069852367044,0.00245545478537679 ,0.0968750342726707,0.0523639731109142,0.0470106676220894,0.00390005228109658,0.00304794777184725,0.00187453755643219 ,0.00189462560229003,0.00312620983459055,0.00182634731754661,0.00426232814788818,0.00234097195789218,0.00541879655793309 ,0.00286390422843397,0.0077361180447042,0.00739045953378081,0.00410307198762894,0.00611513201147318,0.00248692650347948 ,0.00408196216449142,0.00639339722692966,0.00434895092621446,0.00212754565291107,0.00288760499097407,0.00151408067904413 ,0.00271663744933903,0.00149647297803313,0.006270463578403,0.00564201502129436,0.00783688575029373,0.0102068949490786 ,0.0115534784272313,0.011789258569479,0.0125153223052621,0.00919362623244524,0.00709264166653156,0.00514057138934731 ,0.00437394948676229,0.0210229996591806,0.0211294535547495,0.0236893240362406,0.0280384570360184,0.0627929121255875 ,0.0637256726622581,0.148144006729126,0.073219008743763,0.159480541944504,0.0803302451968193,0.0883469432592392,0.175800532102585 ,0.0797864273190498,0.153079614043236,0.0946589261293411,0.0606883279979229,0.0712572634220123,0.0368200019001961 ,0.029294203966856,0.0278862025588751,0.252608448266983,0.345064520835876,0.335890293121338,0.144410610198975,0.0991004928946495 ,0.0455374196171761,0.0332835167646408,0.431980043649673,0.483294159173965,0.47867688536644,0.422485083341599,0.30485126376152 ,0.209794074296951,0.148937806487083,0.0112794619053602,0.00676137395203114,0.0815660059452057,0.171418637037277,0.00282467366196215 ,0.00169222545810044,0.00163030030671507,0.00158798391930759,0.0020512524060905,0.00250268145464361,0.00348014035262167 ,0.0069389408454299,0.0034073784481734,0.00208802055567503,0.00185293727554381,0.00129873096011579,0.0012914533726871 ,0.00529764918610454,0.00260264379903674,0.019681055098772,0.00415737135335803,0.0573714300990105,0.0260794423520565 ,0.241283521056175,0.0313012041151524,0.43357065320015,0.486305832862854,0.480722397565842,0.421222060918808,0.308387398719788 ,0.21123956143856,0.151384964585304,0.0513319559395313,0.00637604761868715,0.00370210641995072,0.0116720963269472 ,0.0107373110949993,0.0756150707602501,0.146860748529434,0.330495357513428,0.467436373233795,0.469159185886383,0.0102206543087959 ,0.010956222191453,0.0108262272551656,0.0147844785824418,0.0208914484828711,0.0274675246328115,0.0268960893154144 ,0.0242242868989706,0.027724850922823,0.0302235800772905,0.028852054849267,0.0297430325299501,0.0521327517926693,0.0530193373560905 ,0.0581693537533283,0.0927537828683853,0.142314732074738,0.226108208298683,0.229115411639214,0.019042607396841,0.0204018652439117 ,0.0207625348120928,0.0267703607678413,0.0535290092229843,0.0909426435828209,0.152808129787445,0.168576091527939,0.343474626541138 ,0.155315488576889,0.424900680780411,0.465838462114334,0.320092290639877,0.290643304586411,0.0841367095708847,0.0326586216688156 ,0.0142576759681106,0.0126772029325366,0.00866493117064238,0.00799310021102428,0.0292372778058052,0.0670557543635368 ,0.105456203222275,0.0716907531023026,0.113329194486141,0.167281061410904,0.13141243159771,0.209005817770958,0.250615149736404 ,0.316368371248245,0.349230736494064,0.165242061018944,0.0850486308336258,0.0304153300821781,0.0123343467712402,0.00701207853853703 ,0.00838807877153158,0.00656341481953859,0.00529869552701712,0.00399890448898077,0.00370304146781564,0.00407698517665267 ,0.00661989906802773,0.0218677837401628,0.0659785270690918,0.13825549185276,0.327767133712769,0.422945559024811,0.00341141130775213 ,0.0277226585894823,0.00964815262705088,0.0733150765299797,0.0750653073191643,0.0668630003929138,0.0482793487608433 ,0.0364491641521454,0.106386072933674,0.109185293316841,0.0868760198354721,0.0639690756797791,0.0486819483339787,0.0025335478130728 ,0.00351265678182244,0.00484719267114997,0.0051118447445333,0.00551333790645003,0.00857016909867525,0.0255201179534197 ,0.0461918115615845,0.0607488192617893,0.082602471113205,0.00348183745518327,0.00425211526453495,0.0122325997799635 ,0.0232921801507473,0.0329400151968002,0.0505042336881161,0.00243083899840713,0.00211556325666606,0.00381573452614248 ,0.333928316831589,0.333637237548828,0.342649161815643,0.148482084274292,0.169741451740265,0.325659662485123,0.165427297353745 ,0.190183475613594,0.338564485311508,0.332659870386124,0.424720793962479,0.272170603275299,0.265515953302383,0.400727868080139 ,0.3985435962677,0.386788845062256,0.480597913265228,0.483692198991776,0.382549494504929,0.371120661497116,0.389783293008804 ,0.388345569372177,0.375611394643784,0.479947537183762,0.477173000574112,0.479976087808609,0.488711804151535,0.264497667551041 ,0.480171978473663,0.480196863412857,0.281652390956879,0.386610776185989,0.393351674079895,0.493049114942551,0.476622134447098 ,0.493348211050034,0.488274902105331,0.481746703386307,0.479674130678177,0.485377997159958,0.383438646793365,0.38273361325264 ,0.478472590446472,0.478911131620407,0.482469409704208,0.25904905796051,0.387419193983078,0.484412759542465,0.374153643846512 ,0.384540796279907,0.393201231956482,0.391896665096283,0.389575123786926,0.397310733795166,0.389183044433594,0.395906448364258 ,0.391255348920822,0.385995209217072,0.379178792238235,0.480608761310577,0.478224217891693,0.478784024715424,0.483895808458328 ,0.485016852617264,0.289588868618011,0.2858946621418,0.282295495271683,0.278777480125427,0.280919998884201,0.284057527780533 ,0.275038123130798,0.492896527051926,0.491387784481049,0.488171577453613,0.487669318914413,0.483663886785507,0.483254432678223 ,0.487161904573441,0.488301068544388,0.494450151920319,0.493478566408157,0.491661041975021,0.491220772266388,0.488335520029068 ,0.488093882799149,0.490230351686478,0.49139529466629,0.447182863950729,0.453413426876068,0.457830518484116,0.455677270889282 ,0.451877117156982,0.452926635742188,0.453699231147766,0.452374875545502,0.162077844142914,0.153775423765183,0.144265338778496 ,0.130756393074989,0.12773522734642,0.110134489834309,0.100244358181953,0.257783085107803,0.328106373548508,0.337502628564835 ,0.339458107948303,0.336772680282593,0.334999978542328,0.337213188409805,0.333657503128052,0.321457594633102,0.240402236580849 ,0.236348703503609,0.2256248742342,0.192733883857727,0.178379684686661,0.337512731552124,0.33630096912384,0.00372941023670137 ,0.0425253920257092,0.00479376269504428,0.00736830430105329,0.024929778650403,0.0419468656182289,0.0679051578044891 ,0.0369835682213306,0.0055746752768755,0.00702597154304385,0.004378626588732,0.00330133899115026,0.00717229535803199 ,0.00537879345938563,0.00868201814591885,0.00824112817645073,0.0452413111925125,0.0330644808709621,0.0503015853464603 ,0.0586812384426594,0.0568802282214165,0.0477373376488686,0.0552803725004196,0.0545187331736088,0.0527505427598953 ,0.0634061843156815,0.00648416765034199,0.00671511329710484,0.00569756980985403,0.00735023058950901,0.0519979819655418 ,0.00522345816716552,0.00534566678106785,0.0481486767530441,0.00946079008281231,0.0066124158911407,0.0383318774402142 ,0.0402498096227646,0.00106495397631079,0.118589662015438,0.00465148035436869,0.00636514322832227,0.00802721362560987 ,0.01302869617939,0.0298224594444036,0.0730650275945663,0.0640791431069374,0.0785257965326309,0.129638075828552,0.00703607313334942 ,0.00397564051672816,0.002779102884233,0.00183781166560948,0.00102745718322694,0.00205730739980936,0.00119256286416203 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0363458469510078,0.0490859411656857,0.0230439715087414,0.0270924493670464 ,0.0206718631088734,0.0185975339263678,0.0315399616956711,0.0198257975280285,0.0269823614507914,0.0328964106738567 ,0.0420869141817093,0.033035896718502,0.0343892797827721,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0205506253987551 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164824109524488,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0294039398431778 ,0.0285390242934227,0.033760379999876,0.25,0.0334517695009708,0.0518122427165508,0.0614676512777805,0.0205193366855383 ,0.0269071813672781,0.0314036086201668,0.0327518321573734,0.0268050134181976,0.0195972546935081,0.0420689024031162 ,0.25,0.0342525728046894,0.032850906252861,0.25,0.25,0.25,0.25,0.25,0.25,0.0203968714922667,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.0164006631821394,0.25,0.25,0.25,0.25,0.0283657796680927,0.0336172617971897,0.25,0.0332952253520489 ,0.0431861653923988,0.0524789169430733,0.0583099275827408,0.0627204552292824,0.0649085119366646,0.0649517104029655 ,0.0558292157948017,0.0712820068001747,0.0773883908987045,0.0595448277890682,0.0459866523742676,0.0631427764892578 ,0.0695129185914993,0.0743144378066063,0.0786107704043388,0.0818765684962273,0.0685356482863426,0.085819348692894 ,0.0700611248612404,0.0875939428806305,0.0724721848964691,0.0884920507669449,0.0853708758950233,0.0881564021110535 ,0.0908025205135345,0.0936112031340599,0.0958083048462868,0.097295954823494,0.0983019843697548,0.0867456123232841 ,0.04403305798769,0.0457499995827675,0.089852549135685,0.0920755043625832,0.0464900881052017,0.0950798839330673,0.04793631285429 ,0.0969551578164101,0.0981794819235802,0.0453936643898487,0.0594191439449787,0.0714830383658409,0.0849934816360474 ,0.0919935032725334,0.0601679086685181,0.031210158020258,0.0784409269690514,0.0928118303418159,0.0457577556371689 ,0.0402213782072067,0.115750454366207,0.0459373705089092,0.00880237855017185,0.104578346014023,0.00779814412817359 ,0.0330955237150192,0.00620269542559981,0.0458248779177666,0.115556560456753,0.0106787532567978,0.0427076853811741 ,0.0520423203706741,0.0623702667653561,0.0579177998006344,0.0646481588482857,0.0645835474133492,0.0556703619658947 ,0.0594267956912518,0.0773378387093544,0.0711730420589447,0.0628099739551544,0.0455066487193108,0.0741315335035324 ,0.0692554861307144,0.081831268966198,0.0785038098692894,0.0683186501264572,0.0858453959226608,0.0698799192905426 ,0.0876429975032806,0.072339653968811,0.0885435417294502,0.0882261097431183,0.0853879749774933,0.0937753990292549 ,0.0909218266606331,0.0959855541586876,0.0974629446864128,0.0984429940581322,0.0867866203188896,0.0899530425667763 ,0.045818142592907,0.0443416349589825,0.0922174900770187,0.0952682867646217,0.0465697981417179,0.0971475094556808 ,0.0479841232299805,0.098355196416378,0.0455138795077801,0.0592054910957813,0.0713467746973038,0.0850033462047577 ,0.0920666009187698,0.0600640438497067,0.0311885327100754,0.0783986672759056,0.0402268432080746,0.0457861050963402 ,0.0928908884525299,0.0460279919207096,0.11594096571207,0.0825046300888062,0.0336504355072975,0.0550510063767433,0.0327116213738918 ,0.0843499973416328,0.0538351610302925,0.115753903985024,0.0459173731505871,0.0423254780471325,0.0473188795149326 ,0.0469414778053761,0.0424519367516041,0.0455350130796433,0.0465708039700985,0.0463208556175232,0.0459131821990013 ,0.0454256609082222,0.0454010963439941,0.0476120784878731,0.0460077859461308,0.0464699864387512,0.0480568446218967 ,0.0285552516579628,0.0279842782765627,0.0420441664755344,0.0346364490687847,0.0459042675793171,0.0479452051222324 ,0.0302031561732292,0.0351778902113438,0.0353191234171391,0.0300698410719633,0.0477901250123978,0.0460597239434719 ,0.0475746355950832,0.0476561114192009,0.0469396188855171,0.0473422221839428,0.042336743324995,0.0424514710903168 ,0.0466025285422802,0.0457513518631458,0.046540342271328,0.0455028414726257,0.0456418693065643,0.0460276454687119 ,0.0466801859438419,0.0461235679686069,0.0493917614221573,0.0505173802375793,0.0328598394989967,0.0614248886704445 ,0.0582841336727142,0.0327506698668003,0.028565488755703,0.0420595146715641,0.0346313901245594,0.0460008196532726 ,0.0476239807903767,0.0496446788311005,0.0461848825216293,0.0553307607769966,0.0574205592274666,0.0306450352072716 ,0.0352026782929897,0.0550592020153999,0.0530673302710056,0.0526897385716438,0.0578309148550034,0.0578070469200611 ,0.0511235482990742,0.0550271794199944,0.0333066172897816,0.0585754439234734,0.0363343097269535,0.0334516875445843 ,0.0499937012791634,0.0477185994386673,0.0502332895994186,0.0329226404428482,0.0596463717520237,0.0602541044354439 ,0.0325763672590256,0.0548891797661781,0.0545088052749634,0.0385428369045258,0.0597529001533985,0.0630740821361542 ,0.060188289731741,0.0497944205999374,0.0485014282166958,0.0548396296799183,0.0474867112934589,0.0483855456113815 ,0.048272006213665,0.0479882210493088,0.0484448708593845,0.033422339707613,0.0332249216735363,0.0367633253335953,0.0371963866055012 ,0.0591864511370659,0.0586266443133354,0.0564895682036877,0.0560322143137455,0.0527559295296669,0.0523263998329639 ,0.0475462675094604,0.0351889580488205,0.0518597513437271,0.0550283901393414,0.0553474090993404,0.0562724024057388 ,0.0565110705792904,0.0470517128705978,0.0469588600099087,0.0484369359910488,0.0455471314489841,0.0457634702324867 ,0.036540824919939,0.051483154296875,0.0525423064827919,0.0472937934100628,0.0474919863045216,0.0455344542860985,0.0463755093514919 ,0.0482619404792786,0.0477126091718674,0.0420452356338501,0.0387176498770714,0.039597537368536,0.0432965233922005 ,0.0378118790686131,0.0393772348761559,0.0388134606182575,0.0400375463068485,0.0406235195696354,0.0418323688209057 ,0.0435393676161766,0.0449409149587154,0.0449843443930149,0.0442634783685207,0.0454877987504005,0.0468482598662376 ,0.0431497171521187,0.0388540960848331,0.0420254059135914,0.0379814654588699,0.0388836711645126,0.0405762083828449 ,0.0420276112854481,0.0438253730535507,0.0379501208662987,0.0464935377240181,0.0470876507461071,0.0479562990367413 ,0.0428505316376686,0.0432538129389286,0.0440746434032917,0.043167881667614,0.0358535051345825,0.0463173091411591 ,0.0455583706498146,0.0473006889224052,0.0433365665376186,0.0436598360538483,0.041830450296402,0.0425897315144539 ,0.0429352596402168,0.0446554943919182,0.0444185100495815,0.0478337593376637,0.0489576756954193,0.0458226874470711 ,0.0455644465982914,0.0451333113014698,0.0450351312756538,0.0444156192243099,0.04610550776124,0.0441313832998276,0.0450423546135426 ,0.0474513657391071,0.0425930954515934,0.0418335050344467,0.0427580513060093,0.0435871928930283,0.0469574220478535 ,0.0477113723754883,0.0432335324585438,0.03575224801898,0.0422356687486172,0.0439734980463982,0.0452122874557972,0.0419878959655762 ,0.0434043630957603,0.0424181818962097,0.0476711951196194,0.0470606423914433,0.0485476925969124,0.0440369583666325 ,0.0443284660577774,0.0432426556944847,0.0444737486541271,0.0441686771810055,0.0458097457885742,0.0439906790852547 ,0.0467772446572781,0.0438812710344791,0.0452282652258873,0.0449860095977783,0.0453792065382004,0.0476871356368065 ,0.0482325255870819,0.0461746491491795,0.0417544841766357,0.0429480746388435,0.0392320193350315,0.0384102240204811 ,0.037625715136528,0.0392917655408382,0.0385116524994373,0.0399314872920513,0.040337935090065,0.0414942279458046,0.0446748659014702 ,0.0447062738239765,0.0433738604187965,0.0440853387117386,0.04347088560462,0.0471675954759121,0.0453428402543068,0.0417539440095425 ,0.0385626032948494,0.0376894623041153,0.0385972186923027,0.0403062179684639,0.0417737476527691,0.0438350588083267 ,0.0378008708357811,0.0464474521577358,0.0470256581902504,0.0479054264724255,0.0426812805235386,0.0431039035320282 ,0.0439547300338745,0.0359450168907642,0.0431542471051216,0.0455041453242302,0.0462410636246204,0.0472339168190956 ,0.0431707948446274,0.0435150414705276,0.0422635935246944,0.0415555536746979,0.0426978245377541,0.0444945953786373 ,0.0443046689033508,0.0453293025493622,0.045503132045269,0.0486048869788647,0.0449728332459927,0.044301874935627,0.0448818653821945 ,0.0458832271397114,0.0472133979201317,0.0448503606021404,0.0439546369016171,0.0423831306397915,0.0434070527553558 ,0.0425996817648411,0.041539017111063,0.0469246916472912,0.04325220733881,0.0476763360202312,0.0422559827566147,0.035848829895258 ,0.04379603266716,0.0450015254318714,0.0432388633489609,0.0417218655347824,0.0422676876187325,0.0476168803870678,0.0470242872834206 ,0.0485067889094353,0.0438692346215248,0.426967233419418,0.0432997718453407,0.427755177021027,0.0439979955554008,0.0456666573882103 ,0.421029776334763,0.0463924035429955 Transform: 1.24029691597309e-006,-1.27428575571653e-006,0.999999999997432,0,0.99549886814286,0.0947735896485261,-1.11394550754345e-006 ,0,-0.0947735896470627,0.995498868141555,1.38609737719942e-006,0,-40.9408718012017,-5.17448571803319,-0.0375229850015673 ,1 TransformLink: 1.24029687904964e-006,0.995498838507016,-0.0947735868256679,0,-1.27428571778409e-006,0.0947735868273431,0.995498838507936 ,0,0.999999999999406,-1.11394550754565e-006,1.38609737720216e-006,0,0.0375671700638182,41.2469948552473,1.27108130581873 ,1 } Deformer: "SubDeformer::Cluster_Spine1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670 ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693 ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736 ,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759 ,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5301 ,5302,5308,5310,5315,5316,5317,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5339,5340,5341 ,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5390,5392,5393,5422,5435,5436,5440,5441,5442 ,5445,5446,5461,5468,5469,5470,5476,5481,5482,5530,5531,5739,5740,5741,5742,5746,5747,5748,5749,5750,5751,5752,5757 ,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5782,5786 ,5787,5788,5808,5809,5816,5821,5823,5824,5852,5866,5870,5871,5872,5875,5876,5891,5892,5899,5910,5911,5959,6496,6497 ,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520 ,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6546,6547,6548,6549 ,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6571,6575,6579,6581,6583,6584,6585 ,6586,6593,6594,6596,6597,6598,6599,6600,6603,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623 ,6624,6625,6626,6627,6628,6629,6632,6634,6657,6658,6660,6661,6668,6671,6672,6673,6675,6676,6677,6678,6679,6684,6685 ,6686,6687,6692,6693,6694,6695,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6717,6718,6719 ,6720,6721,6727,6736,6737,6738,6739,6740,6742,6743,6744,6745,6751,6752,6754,6755,6756,6757,6758,6759,6762,6772,6773 ,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6792,6794,6795,6796,6815,6816 ,6818,6819,6825,6828,6829,6830,6831,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6865,6884,6885,6886,6887,6888 ,6889,6891,6892,6893,6894,6895,6896,6897,6898,6899,6901,6902,6905,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921 ,6922,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9927,9928,9929,9930,9931,9932 ,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955 ,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978 ,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001 ,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020 ,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039 ,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10112,10116,10128,10129,10130,10131,10132 ,10133,10134,10135,10136,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158 ,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177 ,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10216,10223,10224 ,10225,10226,10227,10228,10229,10230,10231,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10275,10276 ,10277,10284,10285,10286,10287,10288,10289,10338,10339,10448,10449,10456,10470,10471,10483,10484,10485,10486,10490 ,10550,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596 ,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615 ,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10656,10661 ,10662,10663,10664,10665,10666,10667,10668,10669,10670,10677,10685,10686,10687,10688,10691,10692,10709,10710,10711 ,10712,10719,10720,10721,10722,10723,10724,10771,10772,10876,10877,10888,10895,10896,10897,10909,10910,10911,10912 ,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931 ,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950 ,10952,10953,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971 ,10972,10974,10977,10978,10979,10981,10982,10984,10985,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996 ,10997,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019 ,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039 ,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058 ,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077 ,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096 ,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115 ,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134 ,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153 ,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172 ,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191 ,11192 Weights: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0160846933722496,0.0164203029125929 ,0.0159657876938581,0.0154251707717776,0.0168652925640345,0.0166946854442358,0.0172978769987822,0.0174098424613476 ,0.0175959542393684,0.0179028194397688,0.0176764037460089,0.0180323757231236,0.0175203327089548,0.0177715346217155 ,0.0171755701303482,0.0172060579061508,0.0167375691235065,0.0164956580847502,0.0163211673498154,0.0158238299190998 ,0.0160321909934282,0.0153556959703565,0.0159447863698006,0.015207638964057,0.0128046330064535,0.0123249804601073 ,0.0134784216061234,0.0141613502055407,0.0146538205444813,0.0148128774017096,0.0146015761420131,0.0140923066064715 ,0.0134314354509115,0.0127910561859608,0.0123281786218286,0.0121562043204904,0.0129481069743633,0.0126527966931462 ,0.0133569296449423,0.0137679995968938,0.0140651864930987,0.0141647066920996,0.0140419183298945,0.0137354964390397 ,0.0133314346894622,0.012936201877892,0.0126501396298409,0.0125458519905806,0.0167935136705637,0.0133372796699405 ,0.4118632376194,0.435128420591354,0.452331721782684,0.309406131505966,0.449244529008865,0.0940441563725472,0.407361507415771 ,0.404217571020126,0.421248406171799,0.409840732812881,0.392953753471375,0.428104996681213,0.405013799667358,0.0706687644124031 ,0.499827414751053,0.496607095003128,0.374263346195221,0.571578025817871,0.405000001192093,0.269432663917542,0.249056547880173 ,0.5,0.394996881484985,0.384848088026047,0.389729768037796,0.334900081157684,0.293396413326263,0.328714191913605,0.398442834615707 ,0.32771834731102,0.0595257952809334,0.0552126057446003,0.454701125621796,0.40461653470993,0.4881192445755,0.347358107566834 ,0.35251322388649,0.440273106098175,0.308558940887451,0.391451150178909,0.371111899614334,0.507824063301086,0.489344775676727 ,0.339798629283905,0.363848000764847,0.356653660535812,0.403677821159363,0.446302890777588,0.415230363607407,0.0906204208731651 ,0.0889278724789619,0.412925362586975,0.449999988079071,0.0518114231526852,0.0728756785392761,0.0594516582787037,0.0610590726137161 ,0.0579790323972702,0.477428883314133,0.401172369718552,0.389459520578384,0.377351671457291,0.502477288246155,0.389182537794113 ,0.428046405315399,0.387773752212524,0.402254194021225,0.485787153244019,0.0524009801447392,0.404599189758301,0.42209380865097 ,0.410691499710083,0.393934220075607,0.428258091211319,0.405008465051651,0.499823004007339,0.496008574962616,0.376370757818222 ,0.384699434041977,0.0788780599832535,0.341655790805817,0.348720580339432,0.5,0.396044343709946,0.385793387889862 ,0.390573292970657,0.378742516040802,0.348475426435471,0.358005672693253,0.379805535078049,0.353024065494537,0.119299098849297 ,0.453788548707962,0.405600816011429,0.487848222255707,0.389860063791275,0.426657408475876,0.441065758466721,0.30920135974884 ,0.392572522163391,0.34356015920639,0.359241247177124,0.341385185718536,0.366231173276901,0.358353018760681,0.349766403436661 ,0.446171700954437,0.413984596729279,0.390668451786041,0.0912416279315948,0.412029325962067,0.0845936164259911,0.0729723423719406 ,0.0587323158979416,0.447466403245926,0.438775271177292,0.497988551855087,0.492459923028946,0.482212215662003,0.0798316299915314 ,0.0531247593462467,0.0527055263519287,0.0659925639629364,0.0599521771073341,0.0557822063565254,0.0600882656872272 ,0.0715308338403702,0.0537794753909111,0.0618537701666355,0.0668433904647827,0.0528572015464306,0.0730938166379929 ,0.00181005604099482,0.00221109134145081,0.00119374599307776,0.00146303232759237,0.00136578513775021,0.00223155738785863 ,0.0690709576010704,0.0473786555230618,0.0920473039150238,0.0891687572002411,0.0381028018891811,0.00387158431112766 ,0.00251820357516408,0.00166320090647787,0.00180311361327767,0.00113617500755936,0.00619343807920814,0.0186367426067591 ,0.00111796089913696,0.00189601548481733,0.00200709118507802,0.00302449869923294,0.00478658778592944,0.00123879930470139 ,0.00197416427545249,0.00173406291287392,0.0183619633316994,0.0167030841112137,0.0173190552741289,0.0156179061159492 ,0.0506496839225292,0.050516739487648,0.0377767160534859,0.0546070151031017,0.0417194440960884,0.0459446907043457 ,0.0589710585772991,0.0463874600827694,0.00128481700085104,0.020310215651989,0.0542940571904182,0.0669875293970108 ,0.0289271455258131,0.0201205685734749,0.0398120880126953,0.0143598988652229,0.0361818224191666,0.00191568059381098 ,0.0531524606049061,0.0251301974058151,0.0691704824566841,0.0520155392587185,0.0624980665743351,0.0755863040685654 ,0.0785739421844482,0.0241166241466999,0.0203430224210024,0.0184384100139141,0.0401647128164768,0.00786753464490175 ,0.0217073261737823,0.089838333427906,0.0157315582036972,0.0600272752344608,0.0427021160721779,0.0384004004299641 ,0.0568193718791008,0.0522586293518543,0.035638190805912,0.0346027687191963,0.0764086619019508,0.0884695127606392 ,0.0188344158232212,0.070174053311348,0.0326588302850723,0.0264596547931433,0.0506513118743896,0.01990070566535,0.0195501185953617 ,0.028569471091032,0.0360912568867207,0.0218110550194979,0.0160472877323627,0.0184787679463625,0.0352999679744244 ,0.0516716316342354,0.00237905723042786,0.00159102503675967,0.0226545855402946,0.0271457750350237,0.0474893748760223 ,0.0645274966955185,0.0529851205646992,0.0228720381855965,0.0246643126010895,0.0471772253513336,0.0649261623620987 ,0.0203444454818964,0.0275691486895084,0.0192651394754648,0.0189470537006855,0.0246421601623297,0.01800193823874,0.0357401669025421 ,0.0506223030388355,0.0174189861863852,0.0172808524221182,0.0165687892585993,0.0133684435859323,0.0363536477088928 ,0.0501126907765865,0.0500063300132751,0.0454842299222946,0.0584978610277176,0.045951172709465,0.0012955809943378 ,0.0180803369730711,0.0527493879199028,0.0667149424552917,0.0293978601694107,0.0208155307918787,0.0405387282371521 ,0.0133866406977177,0.04086684435606,0.0363172851502895,0.0116078825667501,0.0158129744231701,0.0509919971227646,0.0182479619979858 ,0.0257603283971548,0.0683596357703209,0.0512992851436138,0.0617051981389523,0.0748262330889702,0.0815390720963478 ,0.0236504841595888,0.0202212948352098,0.0184010080993176,0.0407758466899395,0.0176970455795527,0.0173410214483738 ,0.0224231835454702,0.0889244079589844,0.0594708025455475,0.0424453541636467,0.0379730463027954,0.0561151020228863 ,0.0516486801207066,0.0352943167090416,0.0342671312391758,0.0758966356515884,0.0880906879901886,0.0187969096004963 ,0.0702414438128471,0.0320881120860577,0.0261492505669594,0.0499122962355614,0.0198557674884796,0.0195044167339802 ,0.028232004493475,0.0354873239994049,0.0216745641082525,0.0166845489293337,0.01869329623878,0.0197165627032518,0.018470698967576 ,0.0349537320435047,0.0510836020112038,0.0024017239920795,0.00161671859677881,0.0228383634239435,0.00963364727795124 ,0.0218189973384142,0.0476066395640373,0.066476434469223,0.0533930957317352,0.0226607136428356,0.0244316216558218 ,0.046758908778429,0.0641279742121696,0.0238656513392925,0.0182043109089136,0.0171894691884518,0.0393313504755497 ,0.0524248778820038,0.0163537990301847,0.0491573363542557,0.0539665594696999,0.052042193710804,0.0551500394940376 ,0.0565586723387241,0.0413413755595684,0.00491613335907459,0.00462120585143566,0.00493934098631144,0.0395209453999996 ,0.0472693964838982,0.0580320283770561,0.0528250709176064,0.0546943955123425,0.0498614907264709,0.0141710704192519 ,0.0384655743837357,0.0153101915493608,0.0204608496278524,0.0201338287442923,0.0194478500634432,0.0189187098294497 ,0.0184417404234409,0.0204847734421492,0.0195690207183361,0.0189714375883341,0.0187409352511168,0.0184062235057354 ,0.0201160330325365,0.0121795358136296,0.01349903549999,0.0223800241947174,0.0190002582967281,0.023339007049799,0.0263351127505302 ,0.0235265847295523,0.0271546300500631,0.0213052537292242,0.0235639810562134,0.025151539593935,0.0246744081377983 ,0.0207709092646837,0.0228502154350281,0.0254615023732185,0.0245288666337729,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.0610730834305286,0.0480313338339329,0.0657686740159988,0.0603674054145813,0.0632295534014702,0.0655892416834831 ,0.056696955114603,0.0630388557910919,0.0597760379314423,0.0569867044687271,0.0520362481474876,0.0575678944587708 ,0.0568820908665657,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0624931752681732,0.0608663484454155,0.0741311311721802 ,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0579049400985241,0.0732160955667496,0.073155365884304,0.25,0.25,0.25,0.0630910694599152 ,0.075778141617775,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0633393228054047,0.0602369867265224,0.0572502575814724,0.25 ,0.0582733973860741,0.0463946387171745,0.0345158390700817,0.0634916201233864,0.0606879107654095,0.0570367276668549 ,0.0573146566748619,0.0601356104016304,0.0634386166930199,0.0521964766085148,0.25,0.0571960285305977,0.0579383820295334 ,0.25,0.25,0.25,0.25,0.25,0.25,0.0628122016787529,0.0741900429129601,0.0608696937561035,0.25,0.25,0.25,0.25,0.25,0.25 ,0.25,0.0731783211231232,0.25,0.25,0.25,0.063268169760704,0.25,0.25,0.25,0.25,0.0605871565639973,0.0575619041919708 ,0.25,0.0585609637200832,0.0125644169747829,0.0161781385540962,0.0946971252560616,0.113065972924232,0.0955591946840286 ,0.113255612552166,0.115407161414623,0.0166719518601894,0.111046440899372,0.114557966589928,0.115057192742825,0.134647995233536 ,0.118201650679111,0.10340691357851,0.0990749299526215,0.0968202129006386,0.0956590920686722,0.0955270379781723,0.0956348106265068 ,0.0974334701895714,0.0942233800888062,0.0941582396626472,0.0963840037584305,0.102147005498409,0.0968629568815231 ,0.0958827063441277,0.0953153520822525,0.0952657982707024,0.0954933315515518,0.0947557613253593,0.094863660633564 ,0.0943074598908424,0.0947857350111008,0.0932449623942375,0.0943935662508011,0.0960135459899902,0.0962416753172874 ,0.096434086561203,0.0970151573419571,0.0969958752393723,0.0975823402404785,0.0983297526836395,0.0963755026459694 ,0.0478864125907421,0.0472911819815636,0.0966922789812088,0.0968846678733826,0.0468310043215752,0.0975888222455978 ,0.0479436703026295,0.0976556986570358,0.0982761457562447,0.0453936643898487,0.0829939991235733,0.131572216749191 ,0.095733642578125,0.0931219086050987,0.0330649577081203,0.111474379897118,0.0940181314945221,0.0138383228331804,0.0954996421933174 ,0.0963278412818909,0.0489871390163898,0.0639310702681541,0.116211578249931,0.0943464785814285,0.0959200859069824 ,0.0470763146877289,0.047386534512043,0.115750454366207,0.0459373705089092,0.0615078397095203,0.114474974572659,0.0102072861045599 ,0.114212065935135,0.107755355536938,0.108900405466557,0.113887831568718,0.0153199834749103,0.0134717989712954,0.331447571516037 ,0.0140763055533171,0.0571444295346737,0.115523591637611,0.0114414868876338,0.121026553213596,0.0150303114205599,0.0986424684524536 ,0.0156874470412731,0.0176794230937958,0.0991439148783684,0.0458248779177666,0.115556560456753,0.0121582960709929 ,0.00145241722930223,0.00110338255763054,0.0189089998602867,0.0985106527805328,0.107939377427101,0.113377869129181 ,0.115028515458107,0.0350148677825928,0.112978167831898,0.0912709683179855,0.115363225340843,0.0318216159939766,0.110598295927048 ,0.0288906805217266,0.103646159172058,0.117995038628578,0.0993009060621262,0.0958817303180695,0.0970390737056732,0.0958659276366234 ,0.0957623273134232,0.0975157767534256,0.0964478775858879,0.0942511260509491,0.0943288579583168,0.0971035063266754 ,0.102390080690384,0.0955712720751762,0.0961361154913902,0.0957473963499069,0.0955247059464455,0.0949553698301315 ,0.0950683504343033,0.0944903567433357,0.0949619114398956,0.0933806076645851,0.0945300683379173,0.0965021103620529 ,0.096266895532608,0.0972602441906929,0.0966887548565865,0.0971979051828384,0.0977544412016869,0.0984711647033691 ,0.0966334342956543,0.0969574153423309,0.0473992563784122,0.0483118109405041,0.097144216299057,0.0978377535939217 ,0.0469192080199718,0.0978628695011139,0.0479916408658028,0.0984536111354828,0.0455138795077801,0.0759637728333473 ,0.095848985016346,0.0932484567165375,0.0500443838536739,0.111272752285004,0.0941459313035011,0.0148799484595656,0.0956147909164429 ,0.0963888987898827,0.1161749958992,0.0639409199357033,0.0490578524768353,0.0944396182894707,0.0474578179419041,0.0471202805638313 ,0.0960363075137138,0.0460279919207096,0.11594096571207,0.0959390848875046,0.113968148827553,0.113645575940609,0.108573324978352 ,0.107358492910862,0.0231448579579592,0.0258436370640993,0.108174778521061,0.100355915725231,0.0570258460938931,0.0962649509310722 ,0.115307062864304,0.10031446069479,0.120918855071068,0.0240998882800341,0.0352719128131866,0.098014697432518,0.0254631005227566 ,0.098651260137558,0.115753903985024,0.0459173731505871,0.00128815008793026,0.00187792407814413,0.00138435524422675 ,0.0017597529804334,0.0464554391801357,0.0474064983427525,0.0470624417066574,0.0466079525649548,0.0455350130796433 ,0.0468212924897671,0.0437308289110661,0.0440183058381081,0.0454256609082222,0.0454010963439941,0.0361616723239422 ,0.0436928942799568,0.043303482234478,0.03602509573102,0.0482787489891052,0.047590360045433,0.0465318225324154,0.0479768924415112 ,0.0442606769502163,0.0457951314747334,0.0483870916068554,0.0478363074362278,0.0477668158710003,0.0483069196343422 ,0.0367880687117577,0.0436840392649174,0.0369462110102177,0.0368062853813171,0.0470705032348633,0.0474236905574799 ,0.046487208455801,0.0466318503022194,0.0468555018305779,0.0457513518631458,0.0437558144330978,0.0455028414726257 ,0.0456418693065643,0.0441100299358368,0.0433482155203819,0.0437701754271984,0.0268096122890711,0.025440776720643 ,0.0119284018874168,0.0146921891719103,0.0483344532549381,0.0465798899531364,0.0480228587985039,0.0443773195147514 ,0.0455287732183933,0.0267925076186657,0.0436607450246811,0.0281855668872595,0.0224408134818077,0.048752348870039 ,0.047987125813961,0.0177878737449646,0.0201244056224823,0.0212911684066057,0.0216138940304518,0.0159024260938168 ,0.0382708534598351,0.0297725424170494,0.0208371076732874,0.0259721092879772,0.037489291280508,0.0253221485763788 ,0.0119044473394752,0.0110253505408764,0.0170450117439032,0.0180079024285078,0.0295708458870649,0.019897572696209 ,0.0265107657760382,0.0362237952649593,0.0424570478498936,0.0366268083453178,0.0421036295592785,0.0370111688971519 ,0.0360145717859268,0.0358593687415123,0.0354854501783848,0.0213343035429716,0.0219551715999842,0.0275051966309547 ,0.0315192379057407,0.0366171412169933,0.0375544615089893,0.0425509549677372,0.04792245849967,0.0371451638638973,0.0319571644067764 ,0.0312190800905228,0.0285049546509981,0.0303987730294466,0.0430089570581913,0.04224693775177,0.0362669602036476,0.0455471314489841 ,0.0457634702324867,0.0380893014371395,0.0421890206634998,0.0401321649551392,0.0402174852788448,0.0449648573994637 ,0.0438278988003731,0.048929788172245,0.0491268672049046,0.0377959571778774,0.034326296299696,0.0331560783088207,0.0366695560514927 ,0.032829862087965,0.0312358327209949,0.0328594297170639,0.0316329225897789,0.0337643548846245,0.0326298214495182 ,0.0279203932732344,0.0363381430506706,0.0310495290905237,0.028650401160121,0.0452901385724545,0.0487910769879818 ,0.0508548691868782,0.035187091678381,0.0386115312576294,0.0337366759777069,0.0337099097669125,0.0345613844692707 ,0.0353715158998966,0.0502113327383995,0.0541133023798466,0.0481908470392227,0.0475474782288074,0.0479730777442455 ,0.0428487621247768,0.0432051122188568,0.0439012609422207,0.0495737344026566,0.0548233762383461,0.0470600426197052 ,0.0479314848780632,0.0474002063274384,0.0433365665376186,0.0436579845845699,0.0344199351966381,0.0330208316445351 ,0.0354295782744884,0.0412854179739952,0.0443773530423641,0.0372496731579304,0.030983192846179,0.0308753717690706 ,0.0365771092474461,0.0414599291980267,0.0419258736073971,0.0443407259881496,0.0271183177828789,0.0270751696079969 ,0.0279165171086788,0.0283128377050161,0.0307662542909384,0.0326637551188469,0.0284421108663082,0.0283898822963238 ,0.0488329380750656,0.0487452857196331,0.0516017079353333,0.0552499406039715,0.0516585372388363,0.0262685399502516 ,0.0259816572070122,0.0343030691146851,0.0272527150809765,0.0290697049349546,0.0481483936309814,0.0489150248467922 ,0.0485729686915874,0.0440369583666325,0.0443004779517651,0.0529002211987972,0.0444244109094143,0.0422025732696056 ,0.0433992557227612,0.0430087298154831,0.0371259637176991,0.0356947109103203,0.0366935394704342,0.0428103283047676 ,0.0448220446705818,0.0490759424865246,0.0488878265023232,0.0436882935464382,0.0376130416989326,0.0364996418356895 ,0.0329779572784901,0.0341395400464535,0.0325955376029015,0.0309378877282143,0.0327054634690285,0.0313573144376278 ,0.0336268469691277,0.0325021110475063,0.0309654697775841,0.0362372621893883,0.0277648419141769,0.0284956824034452 ,0.0510877929627895,0.0490892678499222,0.0451494082808495,0.0384254641830921,0.0349950790405273,0.0335587300360203 ,0.0335502773523331,0.0344194956123829,0.0352435037493706,0.0500917658209801,0.0535659939050674,0.0481077879667282 ,0.0474749654531479,0.0479218363761902,0.04267967492342,0.0430561415851116,0.0437839739024639,0.0545541681349278,0.0494237542152405 ,0.0478241555392742,0.046966340392828,0.0473311729729176,0.0431707948446274,0.043513223528862,0.0329000502824783,0.0342921055853367 ,0.0353162884712219,0.0411745198071003,0.044264130294323,0.0364803969860077,0.0307964682579041,0.0309248808771372 ,0.041353452950716,0.0442280955612659,0.0418182425200939,0.0269630569964647,0.0281666107475758,0.0277667213231325 ,0.026924280449748,0.0305882766842842,0.0282064899802208,0.0282657127827406,0.0325478427112103,0.0487661845982075 ,0.0514672324061394,0.0486907325685024,0.0515044741332531,0.0549807958304882,0.0261166952550411,0.0258255377411842 ,0.027095315977931,0.0341812409460545,0.0288916807621717,0.0480824448168278,0.0488349907100201,0.0485314689576626 ,0.0438692346215248,0.426702290773392,0.0527382120490074,0.427288204431534,0.0420678332448006,0.0432938933372498,0.411774486303329 ,0.0439190529286861 Transform: 1.03960774012265e-006,-1.1645631211396e-006,0.999999999997726,0,0.980749677729069,0.195269132266046,-7.92191754171597e-007 ,0,-0.195269132265112,0.980749677727561,1.34514825497483e-006,0,-44.7250186963504,-9.75817513334512,-0.0375375437398236 ,1 TransformLink: 1.03960777715106e-006,0.980749712661095,-0.195269139220145,0,-1.16456316262133e-006,0.195269139221532,0.98074971266186 ,0,0.999999999999837,-7.92191754173269e-007,1.34514825497767e-006,0,0.0375726762057927,45.7695196641321,0.836911606184657 ,1 } Deformer: "SubDeformer::Cluster_L_Thigh1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754 ,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777 ,4778,4779,4780,4781,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509 ,6510,6511,6512,6513,6520,6522,6539,6540,6541,6542,6543,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556 ,6557,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6576,6577,6578,6579,6580,6581 ,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604 ,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627 ,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650 ,6651,6652,6653,6654,6655,6656,6657,6658,6659,6662,6663,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676 ,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6703,6704,6706,6707 ,6708,6709,6710,6711,6715,6717,6718,6719,6720,6721,6727,6736,6737,6739,6740,6742,6743,6744,6745,6754,6755,6756,6757 ,6758,6759,6760,6761,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6786,6787,6788,6789,6790,6792 ,6794,6795,6796,6815,6816,6817,6823,6824,6825,6828,6829,6830,6832,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845 ,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6884,6885,6886,6887,6888 ,6889,6890,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918 ,6919,6920,6921,6922,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098 ,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121 ,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144 ,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167 ,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190 ,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213 ,9214,9215,9216,9217,9218,9219,9220,9221,9224,9225,9228,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241 ,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264 ,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287 ,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310 ,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333 ,9334,9337,9338,9340,9341,9342,9343,9344,9345,9346,9350,9351,9352,9353,9358,9359,9360,9361,9362,9363,9364,9365,9366 ,9367,9368,9369,9370,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9387,9388,9389,9390,9391,9394,9395 ,9396,9397,9398,9401,9402,9403,9404,9405,9406,9407,9408,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423 ,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446 ,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469 ,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492 ,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515 ,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538 ,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561 ,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584 ,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607 ,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630 ,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653 ,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676 ,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699 ,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722 ,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745 ,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768 ,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791 ,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814 ,9815,9816,9817,9830,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856 ,9857,9858,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924 ,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10958,10959,10960,10961,10962,10963,10966,10967 ,10968,10969,10970,10971,10972,10974,10987,10988,10989,10992,11002,11003,11004,11005,11006,11007,11010,11011,11012 ,11013,11014,11019,11021,11024,11025,11026,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040 ,11041,11042,11043,11046,11047,11048,11049,11050,11051,11057,11058,11059,11065,11066,11067,11068,11069,11070,11071 ,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11092,11093,11094,11095 ,11096,11100,11101,11103,11104,11105,11106,11107,11108,11109,11110,11186,11188,11191 Weights: 0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604 ,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938 ,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501 ,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527 ,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824 ,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092 ,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845 ,0.488437861204147,0.00416137091815472,0.0277236085385084,0.00643570115789771,0.0121639529243112,0.00909974239766598 ,0.00479171518236399,0.00500419642776251,0.0411929301917553,0.172316744923592,0.017515791580081,0.0122600849717855 ,0.0147061124444008,0.0363224595785141,0.00548371067270637,0.00576615380123258,0.00444313138723373,0.0309221986681223 ,0.0243861526250839,0.0407855473458767,0.0334193743765354,0.0287858210504055,0.0404290556907654,0.0133521696552634 ,0.0153562361374497,0.00394795602187514,0.294720143079758,0.332147061824799,0.451189517974854,0.440738648176193,0.52694171667099 ,0.56053215265274,0.0710113123059273,0.0754943490028381,0.0762333571910858,0.0324223935604095,0.0426231101155281,0.0419300906360149 ,0.054236363619566,0.0367760732769966,0.04872802272439,0.0433972254395485,0.0314307063817978,0.0425226949155331,0.0682456791400909 ,0.0300944074988365,0.0210858918726444,0.474399924278259,0.484295248985291,0.471498638391495,0.486365467309952,0.523557245731354 ,0.619279742240906,0.495875418186188,0.440913885831833,0.57122141122818,0.46727055311203,0.796168506145477,0.768812656402588 ,0.275839567184448,0.51499605178833,0.0743753090500832,0.198682188987732,0.411301642656326,0.529948353767395,0.479820847511292 ,0.500937938690186,0.0263245217502117,0.0424249768257141,0.0316543057560921,0.0201548170298338,0.522229611873627,0.678726494312286 ,0.66076672077179,0.173374861478806,0.30635866522789,0.916980922222137,0.150171235203743,0.0270051024854183,0.595347344875336 ,0.0752822607755661,0.0772483572363853,0.461545795202255,0.492276847362518,0.482892215251923,0.200412526726723,0.184160679578781 ,0.319056957960129,0.78528881072998,0.516901075839996,0.535338282585144,0.506751537322998,0.510367870330811,0.586331486701965 ,0.485847264528275,0.0350798517465591,0.0520882494747639,0.0562988594174385,0.0380594171583653,0.0421464815735817 ,0.0588397644460201,0.0591345317661762,0.0170080959796906,0.00808634608983994,0.0766877830028534,0.411884099245071 ,0.059490691870451,0.0679867044091225,0.0484188869595528,0.0754582211375237,0.0759724006056786,0.0657854825258255 ,0.0559916496276855,0.0736488029360771,0.591260671615601,0.889732003211975,0.487271994352341,0.498950868844986,0.479613840579987 ,0.785834491252899,0.572824597358704,0.708657145500183,0.82976233959198,0.885602414608002,0.511381566524506,0.889257073402405 ,0.876482963562012,0.872237324714661,0.858885586261749,0.69885516166687,0.712929487228394,0.754870116710663,0.826089322566986 ,0.498461186885834,0.796081304550171,0.862102627754211,0.716035425662994,0.776793837547302,0.468493312597275,0.370141059160233 ,0.935255467891693,0.0588337853550911,0.0423679687082767,0.364401966333389,0.409932792186737,0.502030313014984,0.424725890159607 ,0.206638872623444,0.423550963401794,0.47427025437355,0.512981176376343,0.535405337810516,0.478230774402618,0.450324267148972 ,0.350229740142822,0.15829062461853,0.437203019857407,0.072347916662693,0.0704113468527794,0.047590609639883,0.0304904915392399 ,0.219705045223236,0.453156352043152,0.565890371799469,0.696279883384705,0.459840565919876,0.470807462930679,0.0758446231484413 ,0.0758962407708168,0.19060306251049,0.814237117767334,0.589112102985382,0.650303483009338,0.479312092065811,0.0765506327152252 ,0.0573959946632385,0.0422562398016453,0.00594675494357944,0.0069339326582849,0.00750571070238948,0.00675412360578775 ,0.00756251020357013,0.0105591025203466,0.00956473592668772,0.0109887747094035,0.0118240602314472,0.0225534420460463 ,0.0116446474567056,0.0156345162540674,0.0126503072679043,0.0184017214924097,0.02912762388587,0.00835435185581446 ,0.010559193789959,0.013892981223762,0.0155445421114564,0.00457817409187555,0.00558604719117284,0.00587162794545293 ,0.00433524837717414,0.00438852561637759,0.00434144446626306,0.0155169852077961,0.0101993773132563,0.0118669904768467 ,0.0128709143027663,0.0612366311252117,0.0660941079258919,0.00496103381738067,0.00530405156314373,0.00533060822635889 ,0.00517881009727716,0.00564287463203073,0.00555076450109482,0.00627115042880178,0.00655965972691774,0.00349594838917255 ,0.00450626295059919,0.0270621012896299,0.0077071120031178,0.00553002953529358,0.0046713505871594,0.00450748903676867 ,0.00562692666426301,0.00778896035626531,0.00455631455406547,0.00974517222493887,0.0224243085831404,0.0199902169406414 ,0.0152868358418345,0.00588500546291471,0.00600074883550406,0.035562451928854,0.0668709725141525,0.0528643541038036 ,0.0286797415465117,0.00771835539489985,0.0144776906818151,0.0277420245110989,0.0613043904304504,0.0195530038326979 ,0.00477746222168207,0.00492516811937094,0.00538024539127946,0.00471328524872661,0.0245123784989119,0.00481082545593381 ,0.00498686451464891,0.00863044243305922,0.0080834086984396,0.945337295532227,0.575647234916687,0.877002120018005 ,0.951153039932251,0.913577795028687,0.906828939914703,0.848201870918274,0.911503732204437,0.92016065120697,0.501849293708801 ,0.516874551773071,0.485665053129196,0.90837961435318,0.510997176170349,0.576061427593231,0.504615783691406,0.50214034318924 ,0.927559852600098,0.463518470525742,0.459303140640259,0.458389520645142,0.453536838293076,0.437261372804642,0.414019107818604 ,0.33054906129837,0.0297942794859409,0.0283474512398243,0.0212143678218126,0.0201682690531015,0.0177914928644896,0.501258254051209 ,0.48866793513298,0.470411956310272,0.709233701229095,0.659839570522308,0.487657696008682,0.317249894142151,0.591846823692322 ,0.728317379951477,0.0744952410459518,0.0745085701346397,0.0748612061142921,0.0743759348988533,0.073490247130394,0.068679578602314 ,0.00504661211743951,0.00530615448951721,0.00626524724066257,0.00732154585421085,0.010610961355269,0.475530505180359 ,0.457699716091156,0.394022941589355,0.431551843881607,0.416367381811142,0.316126555204391,0.381182998418808,0.368567585945129 ,0.43494439125061,0.470878392457962,0.407958835363388,0.39290863275528,0.484929203987122,0.496927618980408,0.480869024991989 ,0.490965217351913,0.490739345550537,0.486781388521194,0.484060883522034,0.499140977859497,0.498905599117279,0.498835623264313 ,0.498779982328415,0.499234527349472,0.485513746738434,0.464017033576965,0.538316786289215,0.595498383045197,0.621743261814117 ,0.549961924552917,0.665306329727173,0.569559574127197,0.692502319812775,0.582057178020477,0.701874971389771,0.585762798786163 ,0.554784119129181,0.538209557533264,0.562252759933472,0.564088642597198,0.517423331737518,0.510753870010376,0.528257966041565 ,0.531076014041901,0.504643619060516,0.510926067829132,0.503247678279877,0.50249171257019,0.541680872440338,0.569454193115234 ,0.497938424348831,0.500130176544189,0.515246391296387,0.495763182640076,0.456928491592407,0.396899402141571,0.353381723165512 ,0.434999793767929,0.276955157518387,0.393005788326263,0.252266436815262,0.366692423820496,0.41437640786171,0.451891839504242 ,0.395257085561752,0.480457574129105,0.490162223577499,0.47022956609726,0.464729964733124,0.48442354798317,0.481425791978836 ,0.482649832963943,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.469599843025208,0.438429415225983 ,0.53112256526947,0.542715907096863,0.613118171691895,0.58654773235321,0.563611149787903,0.658518671989441,0.578721225261688 ,0.688739597797394,0.549276292324066,0.531564772129059,0.559191882610321,0.521686553955078,0.506235778331757,0.512114107608795 ,0.524585604667664,0.506911396980286,0.502553522586823,0.502240002155304,0.533898293972015,0.560736835002899,0.491795599460602 ,0.499462336301804,0.509774446487427,0.42494809627533,0.385932326316834,0.304804563522339,0.46055144071579,0.484394311904907 ,0.629915058612823,0.60269969701767,0.675524175167084,0.704133987426758,0.708353340625763,0.574112117290497,0.543562710285187 ,0.500358045101166,0.497666716575623,0.516063213348389,0.386784434318542,0.262241989374161,0.234151259064674,0.432636260986328 ,0.467396587133408,0.594870746135712,0.622586846351624,0.669934093952179,0.701067090034485,0.566249370574951,0.536252975463867 ,0.490995824337006,0.499499768018723,0.510661065578461,0.777069509029388,0.838457345962524,0.843078911304474,0.838057816028595 ,0.820897698402405,0.821104645729065,0.695372998714447,0.705706894397736,0.698846876621246,0.825857758522034,0.49937179684639 ,0.499444335699081,0.0497633591294289,0.0401905253529549,0.264088690280914,0.032361127436161,0.123556450009346,0.100497841835022 ,0.0158163420855999,0.195913910865784,0.283509016036987,0.274690121412277,0.157025143504143,0.138220191001892,0.192927986383438 ,0.208784431219101,0.107422702014446,0.101228043437004,0.0723254308104515,0.0319409519433975,0.0365838967263699,0.0275654830038548 ,0.0399823375046253,0.125946879386902,0.156849190592766,0.187684044241905,0.294972240924835,0.272793799638748,0.243949249386787 ,0.252712398767471,0.191005766391754,0.17241595685482,0.289673149585724,0.248418867588043,0.269982844591141,0.171875 ,0.250535398721695,0.296302527189255,0.274216443300247,0.0569527558982372,0.0694819986820221,0.0514626353979111,0.0695202350616455 ,0.272596299648285,0.243082493543625,0.0595687702298164,0.224856480956078,0.0474274083971977,0.263241499662399,0.146489635109901 ,0.248953223228455,0.216691300272942,0.138497024774551,0.130280002951622,0.214497163891792,0.194414034485817,0.043913759291172 ,0.0606266558170319,0.0890660583972931,0.106618732213974,0.127299964427948,0.123955383896828,0.110864944756031,0.0777153521776199 ,0.0856007188558578,0.101434029638767,0.182961791753769,0.171248659491539,0.193611741065979,0.726457953453064,0.767273843288422 ,0.949329018592834,0.947693228721619,0.967044532299042,0.735820055007935,0.937262535095215,0.931118547916412,0.614502966403961 ,0.471627980470657,0.859382033348084,0.806083083152771,0.875490844249725,0.610214293003082,0.480199694633484,0.554568469524384 ,0.85510516166687,0.743546366691589,0.777026474475861,0.969801247119904,0.937866985797882,0.932415068149567,0.949755430221558 ,0.973849058151245,0.919099807739258,0.907524585723877,0.885395228862762,0.895452082157135,0.910394549369812,0.88749772310257 ,0.480137258768082,0.587101459503174,0.573359906673431,0.484456360340118,0.488554537296295,0.887721240520477,0.895965039730072 ,0.85337495803833,0.121916674077511,0.0986250415444374,0.0632779374718666,0.388292282819748,0.0482536256313324,0.341414570808411 ,0.314487129449844,0.210128262639046,0.386271238327026,0.292671471834183,0.311388820409775,0.405498296022415,0.489171802997589 ,0.488262295722961,0.943245828151703,0.953772842884064,0.317680716514587,0.895645380020142,0.249509334564209,0.793233335018158 ,0.767973661422729,0.833147823810577,0.853008449077606,0.879653215408325,0.84781402349472,0.835546791553497,0.813656985759735 ,0.0672668591141701,0.0374465249478817,0.300698459148407,0.801475763320923,0.785678327083588,0.691152572631836,0.71686452627182 ,0.757701873779297,0.718370795249939,0.686868906021118,0.64873868227005,0.640286028385162,0.0668506473302841,0.0315555259585381 ,0.153499916195869,0.224143803119659,0.247747972607613,0.126997485756874,0.0675384625792503,0.220779538154602,0.304049074649811 ,0.23338919878006,0.130519986152649,0.0679196491837502,0.520654916763306,0.528996706008911,0.535331785678864,0.536645412445068 ,0.503449976444244,0.43629589676857,0.0170795656740665,0.0109098870307207,0.0372625589370728,0.0495645068585873,0.0435467474162579 ,0.0368288569152355,0.030829057097435,0.0521181859076023,0.0281774066388607,0.0246519558131695,0.0654876306653023 ,0.0794836431741714,0.0776911079883575,0.0642301216721535,0.932604014873505,0.956792771816254,0.903758704662323,0.932408511638641 ,0.890994369983673,0.931350827217102,0.926221489906311,0.89261782169342,0.902318000793457,0.935380637645721,0.897907257080078 ,0.900025606155396,0.827858746051788,0.872521638870239,0.931344091892242,0.924168646335602,0.909043908119202,0.849918723106384 ,0.928871214389801,0.91679835319519,0.883535027503967,0.891045331954956,0.919581055641174,0.866308569908142,0.890310704708099 ,0.930200397968292,0.937199473381042,0.873727262020111,0.795832455158234,0.695792376995087,0.741214990615845,0.804432034492493 ,0.719383418560028,0.808071553707123,0.729966223239899,0.82585597038269,0.761204361915588,0.846185445785522,0.832377910614014 ,0.801839828491211,0.815158605575562,0.75330924987793,0.79405814409256,0.836123406887054,0.808602333068848,0.704605877399445 ,0.801938593387604,0.669931352138519,0.669257760047913,0.761446237564087,0.702609121799469,0.861849069595337,0.868935704231262 ,0.845203518867493,0.839983463287354,0.843391120433807,0.861060738563538,0.862018942832947,0.844989657402039,0.836595356464386 ,0.835583984851837,0.842704594135284,0.921156764030457,0.928623974323273,0.905190229415894,0.887703061103821,0.916462361812592 ,0.915394067764282,0.837085366249084,0.900297462940216,0.814340591430664,0.875716626644135,0.866847991943359,0.797539174556732 ,0.873098731040955,0.816916644573212,0.88154935836792,0.899577438831329,0.9063361287117,0.943336188793182,0.953912019729614 ,0.95522928237915,0.738879859447479,0.642723858356476,0.649845957756042,0.843090772628784,0.889018356800079,0.940876007080078 ,0.953361690044403,0.563094675540924,0.509984493255615,0.513836324214935,0.570927262306213,0.689336657524109,0.78424996137619 ,0.84540319442749,0.866505682468414,0.845664799213409,0.884104430675507,0.806906640529633,0.806087851524353,0.745548367500305 ,0.693888068199158,0.718158841133118,0.729863703250885,0.762996673583984,0.816202282905579,0.851645767688751,0.798132956027985 ,0.756100535392761,0.713165760040283,0.67433774471283,0.671584486961365,0.70308119058609,0.87847501039505,0.76934027671814 ,0.934174656867981,0.849386751651764,0.923826694488525,0.958262145519257,0.750459969043732,0.955860435962677,0.56195741891861 ,0.507635831832886,0.512480020523071,0.572822690010071,0.686382949352264,0.783281445503235,0.843424558639526,0.940874516963959 ,0.861455321311951,0.804872274398804,0.869116067886353,0.874794006347656,0.88017064332962,0.825082838535309,0.655720293521881 ,0.525781691074371,0.524721145629883,0.95732182264328,0.954470098018646,0.954534590244293,0.942378044128418,0.926046431064606 ,0.906598687171936,0.905266165733337,0.912127315998077,0.897906839847565,0.890105247497559,0.891797184944153,0.882738769054413 ,0.933982729911804,0.938160479068756,0.90452766418457,0.884901225566864,0.846039295196533,0.768812417984009,0.766224563121796 ,0.961383998394012,0.958616733551025,0.958833813667297,0.948421061038971,0.907738268375397,0.858722865581512,0.812769114971161 ,0.79958975315094,0.640108168125153,0.816221296787262,0.566758334636688,0.525440812110901,0.672527134418488,0.694593787193298 ,0.863074839115143,0.879387557506561,0.847267925739288,0.855193912982941,0.825581133365631,0.835183918476105,0.89387184381485 ,0.886982619762421,0.866321206092834,0.884880602359772,0.860882103443146,0.818597674369812,0.842101633548737,0.776525318622589 ,0.742721915245056,0.676555931568146,0.637636542320251,0.806542873382568,0.868393003940582,0.884205520153046,0.849901020526886 ,0.834611296653748,0.835323333740234,0.82551372051239,0.809770405292511,0.80741560459137,0.824219048023224,0.819040238857269 ,0.85616147518158,0.91714471578598,0.911832690238953,0.847798645496368,0.664743065834045,0.572323858737946,0.819055914878845 ,0.9074786901474,0.870977461338043,0.920614838600159,0.918147087097168,0.920683085918427,0.929821848869324,0.932937502861023 ,0.888557374477386,0.885168313980103,0.900562405586243,0.912235021591187,0.914624512195587,0.788711607456207,0.804260492324829 ,0.812986791133881,0.819072604179382,0.824297904968262,0.859320640563965,0.912963271141052,0.919374227523804,0.917552053928375 ,0.906057834625244,0.859798669815063,0.847870171070099,0.949789941310883,0.954140841960907,0.948378205299377,0.935009598731995 ,0.80139023065567,0.783727645874023,0.790406882762909,0.65313047170639,0.654624581336975,0.644850671291351,0.837128400802612 ,0.818184018135071,0.66686749458313,0.814675390720367,0.791805326938629,0.654394924640656,0.659997522830963,0.56653755903244 ,0.696981251239777,0.710933864116669,0.577731668949127,0.570209503173828,0.593225657939911,0.480597913265228,0.483692198991776 ,0.605750918388367,0.616306304931641,0.588263213634491,0.579981029033661,0.603322803974152,0.479947537183762,0.477173000574112 ,0.479976087808609,0.504442453384399,0.704963505268097,0.500164926052094,0.499887257814407,0.687900900840759,0.581955969333649 ,0.581269025802612,0.49304935336113,0.476622134447098,0.49345138669014,0.50255560874939,0.481746703386307,0.479674130678177 ,0.50139182806015,0.590379059314728,0.600396871566772,0.478472590446472,0.478911131620407,0.482469409704208,0.716055870056152 ,0.588853597640991,0.501409530639648,0.614471137523651,0.600342035293579,0.590613424777985,0.588627755641937,0.588591754436493 ,0.579011499881744,0.582310616970062,0.572643458843231,0.580984592437744,0.590848982334137,0.602009296417236,0.480608761310577 ,0.478224217891693,0.478784024715424,0.501413822174072,0.503318071365356,0.679476320743561,0.681767165660858,0.685847163200378 ,0.695488452911377,0.694636702537537,0.693195402622223,0.702600240707397,0.500504910945892,0.499761641025543,0.499337792396545 ,0.499050945043564,0.497844457626343,0.497895330190659,0.498723387718201,0.500584185123444,0.499067336320877,0.498121321201324 ,0.496955037117004,0.496602416038513,0.495608180761337,0.495802491903305,0.497365981340408,0.498587638139725,0.544471323490143 ,0.535147666931152,0.526269614696503,0.527077794075012,0.524710237979889,0.523556470870972,0.527945518493652,0.533168017864227 ,0.825302302837372,0.834179222583771,0.843648850917816,0.857739388942719,0.858728110790253,0.87563282251358,0.88662976026535 ,0.726957321166992,0.646619617938995,0.63410347700119,0.628647983074188,0.631692171096802,0.640352308750153,0.639677703380585 ,0.646750509738922,0.661692976951599,0.750041663646698,0.753858208656311,0.765080034732819,0.797111213207245,0.812030851840973 ,0.656091213226318,0.657804548740387,0.924229085445404,0.945810437202454,0.942111432552338,0.917795717716217,0.968188226222992 ,0.946788191795349,0.92444109916687,0.953242957592011,0.935089528560638,0.918654680252075,0.858058393001556,0.881813287734985 ,0.912264347076416,0.917832732200623,0.908516407012939,0.91170597076416,0.941785216331482,0.957115828990936,0.935437202453613 ,0.923129141330719,0.924030184745789,0.935841739177704,0.926523387432098,0.929085969924927,0.93127703666687,0.917386949062347 ,0.916314721107483,0.921677827835083,0.93353807926178,0.919895529747009,0.929590404033661,0.904771506786346,0.917263805866241 ,0.935589730739594,0.89923757314682,0.922143816947937,0.951504290103912,0.948889017105103,0.0205629765987396,0.0385227985680103 ,0.0589834935963154,0.129257842898369,0.221451789140701,0.3001409471035,0.383116811513901,0.473615288734436,0.508742868900299 ,0.572621881961823,0.705073118209839,0.844708263874054,0.85796457529068,0.896636486053467,0.86396312713623,0.836566090583801 ,0.855798006057739,0.891260325908661,0.879905521869659,0.897559642791748,0.877030253410339,0.84106719493866,0.0408311784267426 ,0.063639223575592,0.121105849742889,0.232397735118866,0.317838340997696,0.391686528921127,0.470170110464096,0.515603005886078 ,0.591437518596649,0.761221408843994,0.881025552749634,0.837720394134521,0.729614734649658,0.602391183376312,0.536369681358337 ,0.477584779262543,0.348473966121674,0.258798807859421,0.196032047271729,0.08775744587183,0.0421604700386524,0.00849729776382446 ,0.00970384292304516,0.00899431388825178,0.00871625915169716,0.00986232236027718,0.00997159723192453,0.0101062580943108 ,0.0237986277788877,0.0240418426692486,0.0266467072069645,0.0270236767828465,0.00962186045944691,0.00684724608436227 ,0.0235628131777048,0.0101543748751283,0.01648367382586,0.0201386269181967,0.0271529238671064,0.026808263733983,0.0260190926492214 ,0.0205551907420158,0.026290524750948,0.0106055960059166,0.0152002796530724,0.0205874461680651,0.0106762526556849 ,0.0170283429324627,0.0133009422570467,0.00853356160223484,0.0194792449474335,0.0194181855767965,0.0160052366554737 ,0.0124485464766622,0.0106269288808107,0.0101191401481628,0.0109950825572014,0.0130144422873855,0.0134335104376078 ,0.0152226435020566,0.013090156018734,0.00847305823117495,0.0104275457561016,0.0122905261814594,0.00950068794190884 ,0.00979659147560596,0.0201588086783886,0.0269560553133488,0.0272463820874691,0.0200339201837778,0.0293582603335381 ,0.0293869338929653,0.0283271111547947,0.0283295307308435,0.0256121270358562,0.0255378093570471,0.0285402424633503 ,0.0187209453433752,0.0239661242812872,0.0270861200988293,0.0092220650985837,0.0259588118642569,0.0193630643188953 ,0.0282818600535393,0.0274064168334007,0.0248624049127102,0.0226008743047714,0.0143007067963481,0.0135410754010081 ,0.0120240962132812,0.013326863758266,0.0126821780577302,0.0237496141344309,0.024389436468482,0.0216351617127657,0.014059086330235 ,0.0112041374668479,0.0149165680631995,0.0200591329485178,0.0233019385486841,0.0178584437817335,0.0134067600592971 ,0.0130389947444201,0.0112436562776566,0.0267761740833521,0.0287934467196465,0.0270411297678947,0.0242357961833477 ,0.0266406517475843,0.0255027431994677,0.0287998355925083,0.0280229244381189,0.0297579634934664,0.0288060568273067 ,0.0237090364098549,0.0293429233133793,0.0285121109336615,0.0119260838255286,0.0113710556179285,0.0111018428578973 ,0.0136287482455373,0.0107910009101033,0.0130005907267332,0.0160967893898487,0.0204240214079618,0.0180781949311495 ,0.012203661724925,0.0336312055587769,0.0352119654417038,0.0394501127302647 Transform: 0.210985148969358,0.177993646213452,-0.961146997467895,0,-0.975253674710361,0.104794319466303,-0.194675045018427,0 ,0.0660718200546389,0.978435725440565,0.195699004551353,0,35.704393192953,-5.80168884033437,10.4387178442025,1 TransformLink: 0.210985159829393,-0.975253724909579,0.0660718234555528,0,0.177993636191846,0.104794313566051,0.978435670351535,0 ,-0.961146974134258,-0.194675040292327,0.195698999800395,0,3.53270865811464,37.4609842735306,1.27467830472218,1 } Deformer: "SubDeformer::Cluster_R_Thigh", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754 ,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777 ,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800 ,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823 ,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846 ,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869 ,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892 ,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915 ,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938 ,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961 ,4962,4963,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511 ,6512,6513,6520,6521,6522,6523,6524,6546,6547,6548,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563 ,6564,6565,6571,6581,6583,6584,6585,6586,6596,6597,6598,6599,6600,6601,6602,6610,6611,6612,6613,6614,6615,6616,6617 ,6618,6619,6620,6621,6622,6623,6625,6626,6627,6628,6629,6632,6634,6657,6658,6659,6666,6667,6668,6671,6672,6674,6675 ,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706 ,6707,6708,6709,6710,6711,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730 ,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753 ,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776 ,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799 ,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6820,6822,6823,6824,6825 ,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848 ,6849,6850,6851,6852,6853,6865,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888 ,6889,6890,6894,6895,6896,6897,6898,6899,6901,6902,6905,6906,6907,6908,6912,6913,6914,6915,6916,6917,6918,6919,6920 ,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195 ,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218 ,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241 ,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264 ,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287 ,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310 ,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333 ,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356 ,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379 ,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402 ,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425 ,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448 ,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471 ,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494 ,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517 ,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540 ,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563 ,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586 ,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609 ,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632 ,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655 ,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678 ,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701 ,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724 ,7725,7726,7731,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753 ,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776 ,7777,7778,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804 ,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7828,7830,7831,7832 ,7833,7834,7835,7836,7837,7838,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7860,7861,7862,7863,7864,7865,7866 ,7867,7868,7869,7870,7873,7877,7878,7882,7883,7884,7885,7886,7887,7888,7889,7901,7902,7904,7905,7906,7907,7908,7909 ,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932 ,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955 ,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7993,7994,7995,7996,7997,7998 ,7999,8000,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9871,9872,9873,9874,9875 ,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9960,10011,10012,10913,10915 ,10916,10917,10918,10919,10920,10921,10922,10927,10928,10933,10934,10935,10936,10977,10978,10979,10981,10982,10984 ,10985,10990,10991,10993,10994,10995,10996,10997,11008,11015,11016,11017,11018,11022,11023,11111,11114,11115,11116 ,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11131,11132,11133,11134,11135,11136,11137 ,11143,11144,11145,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166 ,11167,11168,11169,11170,11171,11177,11178,11179,11180,11181,11185,11186,11188,11189,11190,11191,11192 Weights: 0.0121406214311719,0.0122508415952325,0.0118976887315512,0.0117173595353961,0.0124390851706266,0.0122070135548711 ,0.0126539431512356,0.0125598656013608,0.0128371920436621,0.0128599274903536,0.0129400799050927,0.0130276530981064 ,0.0129359588027,0.013020683079958,0.0128265898674726,0.0128425154834986,0.012640917673707,0.0125400200486183,0.0124277845025063 ,0.0121918143704534,0.0122436741366982,0.0118895908817649,0.01213822606951,0.0117150489240885,0.00939200725406408 ,0.00922133028507233,0.0096948491409421,0.0100468639284372,0.0103518152609468,0.0105281351134181,0.0105305276811123 ,0.0103600556030869,0.0100622130557895,0.00971498060971498,0.00940981507301331,0.00922850612550974,0.00949476845562458 ,0.00939072575420141,0.00967897940427065,0.00989330559968948,0.0100796613842249,0.0101881176233292,0.0101903360337019 ,0.0100863538682461,0.00990398414433002,0.00969143025577068,0.00950503349304199,0.00939473509788513,0.0125351883471012 ,0.00978698022663593,0.708606839179993,0.705857396125793,0.708693444728851,0.713237941265106,0.703308582305908,0.704482853412628 ,0.701644003391266,0.701737105846405,0.701303839683533,0.701177060604095,0.702373325824738,0.702935993671417,0.704565227031708 ,0.706540822982788,0.707297801971436,0.711040079593658,0.709844648838043,0.715243935585022,0.711524188518524,0.718027889728546 ,0.711881220340729,0.718633353710175,0.710813581943512,0.716881394386292,0.776921927928925,0.781997501850128,0.772049069404602 ,0.768704175949097,0.76778769493103,0.769531071186066,0.773449778556824,0.778489351272583,0.783312261104584,0.786642789840698 ,0.787595152854919,0.785901963710785,0.780841171741486,0.78394603729248,0.777854740619659,0.775794923305511,0.77521550655365 ,0.776267230510712,0.778660953044891,0.781753301620483,0.784719824790955,0.786772966384888,0.787365198135376,0.786332964897156 ,0.706616520881653,0.781346321105957,0.595562696456909,0.592740178108215,0.597659587860107,0.60121351480484,0.587876677513123 ,0.588220238685608,0.585933327674866,0.583541095256805,0.590661406517029,0.586367666721344,0.58176589012146,0.592983961105347 ,0.599109590053558,0.60893440246582,0.613502681255341,0.602687776088715,0.606080293655396,0.583518028259277,0.585001647472382 ,0.58845466375351,0.600851058959961,0.592422544956207,0.582261502742767,0.59635716676712,0.610490024089813,0.606726586818695 ,0.622400999069214,0.618498742580414,0.636538743972778,0.59371018409729,0.58416748046875,0.622708022594452,0.612394690513611 ,0.633858978748322,0.647794663906097,0.667890906333923,0.612781047821045,0.694311738014221,0.628657341003418,0.621947944164276 ,0.694720327854156,0.688933193683624,0.629056572914124,0.690963566303253,0.633292555809021,0.698847055435181,0.640542209148407 ,0.726858258247375,0.664061963558197,0.764679849147797,0.697108447551727,0.603879392147064,0.610298931598663,0.599850654602051 ,0.612626433372498,0.617496013641357,0.623805463314056,0.644330859184265,0.675829410552979,0.703979671001434,0.799726486206055 ,0.665815711021423,0.672482788562775,0.693197011947632,0.709540367126465,0.71259331703186,0.691519916057587,0.6813023686409 ,0.634478747844696,0.625135600566864,0.645098924636841,0.654494404792786,0.640835642814636,0.658283948898315,0.670843422412872 ,0.626901209354401,0.640329897403717,0.779515445232391,0.78886878490448,0.614881157875061,0.607614874839783,0.602537453174591 ,0.616504311561584,0.616610765457153,0.621333420276642,0.628176867961884,0.650015115737915,0.684783458709717,0.601844429969788 ,0.617423474788666,0.614545404911041,0.60051167011261,0.612510502338409,0.633224368095398,0.600748538970947,0.608348608016968 ,0.633217871189117,0.654657900333405,0.628166735172272,0.637831389904022,0.619139134883881,0.660599529743195,0.692957878112793 ,0.651106178760529,0.721908807754517,0.633278846740723,0.70828640460968,0.701894283294678,0.702260613441467,0.707958936691284 ,0.710699319839478,0.724626004695892,0.713609933853149,0.706369340419769,0.702649652957916,0.696391701698303,0.703982949256897 ,0.698264241218567,0.710292994976044,0.705470740795136,0.734420895576477,0.731867372989655,0.766797482967377,0.767536997795105 ,0.633915066719055,0.704809010028839,0.71831476688385,0.698667943477631,0.702968120574951,0.780551493167877,0.788594007492065 ,0.696524977684021,0.025169862434268,0.17743507027626,0.0417528785765171,0.0149603690952063,0.0314485989511013,0.0341492109000683 ,0.0370167717337608,0.00640609161928296,0.0271293967962265,0.0036061517894268,0.00314630009233952,0.0123215476050973 ,0.00494522554799914,0.0413915291428566,0.0415283180773258,0.0295643042773008,0.00912562478333712,0.00408301642164588 ,0.0054349759593606,0.0047268564812839,0.0043707862496376,0.00671374332159758,0.013554010540247,0.015572807751596 ,0.0180529374629259,0.00400473875924945,0.00994897074997425,0.0267131235450506,0.0106267211958766,0.00780256511643529 ,0.00644758902490139,0.00672720884904265,0.00755316903814673,0.00798691902309656,0.00861690938472748,0.00955253560096025 ,0.0106580853462219,0.00959823466837406,0.0110898446291685,0.0114441076293588,0.0156115349382162,0.011926575563848 ,0.0222729928791523,0.0112889474257827,0.0153295481577516,0.012909191660583,0.0292770471423864,0.0152281168848276 ,0.00450499448925257,0.00555948540568352,0.00584762869402766,0.00425887666642666,0.00437471829354763,0.00431323004886508 ,0.0152728538960218,0.00757876643911004,0.0125082237645984,0.066037654876709,0.0677948594093323,0.0125738857313991 ,0.00489287078380585,0.00520963547751307,0.00530074024572968,0.00512120826169848,0.00559488777071238,0.00552204204723239 ,0.00626269914209843,0.00658323988318443,0.00344414333812892,0.00447779893875122,0.0270733889192343,0.00785047933459282 ,0.00555364228785038,0.00464107654988766,0.00447748182341456,0.005645043682307,0.00791709125041962,0.00454014353454113 ,0.00940870586782694,0.0222935806959867,0.00586624816060066,0.00596039881929755,0.0354999750852585,0.0713171139359474 ,0.0538405925035477,0.0288048982620239,0.0160065516829491,0.0278465356677771,0.0634250044822693,0.0193962790071964 ,0.00478004431352019,0.00492434063926339,0.00523216277360916,0.00458334339782596,0.0267478786408901,0.0244745388627052 ,0.00489023560658097,0.0051567037589848,0.0167336519807577,0.00544742727652192,0.00686383992433548,0.0071214591152966 ,0.191019386053085,0.220372542738914,0.443121582269669,0.455715000629425,0.227879747748375,0.572845339775085,0.0685657858848572 ,0.0767723917961121,0.0764972791075706,0.0284278262406588,0.0561406426131725,0.0431331843137741,0.0424311570823193 ,0.04395667091012,0.0319374054670334,0.043060053139925,0.061846885830164,0.0298868026584387,0.021460996940732,0.544690907001495 ,0.47402435541153,0.483769923448563,0.471407413482666,0.486981511116028,0.464022278785706,0.524255752563477,0.61997526884079 ,0.461970031261444,0.447523772716522,0.571227729320526,0.467277556657791,0.78871762752533,0.764640212059021,0.272586435079575 ,0.0581459067761898,0.365322023630142,0.518994212150574,0.0766203030943871,0.195507556200027,0.490018874406815,0.486813902854919 ,0.399345725774765,0.483929514884949,0.479347556829453,0.50118488073349,0.0270621925592422,0.0431146696209908,0.0324231758713722 ,0.0208385195583105,0.52277660369873,0.661475300788879,0.148517176508904,0.274810284376144,0.717097461223602,0.16009484231472 ,0.0273086782544851,0.594453930854797,0.0753901824355125,0.0772575438022614,0.462949275970459,0.486051797866821,0.48539599776268 ,0.482352942228317,0.19377213716507,0.187886565923691,0.322050809860229,0.906217455863953,0.918335676193237,0.786625683307648 ,0.517066299915314,0.535502195358276,0.510716795921326,0.586380898952484,0.52104240655899,0.498748004436493,0.0355681627988815 ,0.0522505939006805,0.0566963478922844,0.0387060903012753,0.042708445340395,0.0591549165546894,0.0594617202877998 ,0.0175437070429325,0.00841336604207754,0.0766968280076981,0.415104597806931,0.0602047741413116,0.0683207213878632 ,0.0491678677499294,0.0754728838801384,0.0759880915284157,0.0661410689353943,0.0567237138748169,0.0737691223621368 ,0.633418679237366,0.486785143613815,0.50536060333252,0.479441195726395,0.480146616697311,0.483121246099472,0.511276483535767 ,0.709449052810669,0.831922292709351,0.881674110889435,0.887470006942749,0.876770496368408,0.873567700386047,0.862349271774292 ,0.744541883468628,0.785385251045227,0.864405274391174,0.935879349708557,0.498770326375961,0.864026546478271,0.714228093624115 ,0.536101758480072,0.401497185230255,0.938651204109192,0.0591612607240677,0.0429156497120857,0.378555536270142,0.424933820962906 ,0.499189227819443,0.202586621046066,0.425374507904053,0.474240958690643,0.513405799865723,0.535461008548737,0.491324007511139 ,0.481851667165756,0.451976180076599,0.366595089435577,0.160316362977028,0.439833015203476,0.0725618228316307,0.0706432089209557 ,0.0478608459234238,0.0311587397009134,0.21308071911335,0.435666292905808,0.566649258136749,0.468619704246521,0.0769848674535751 ,0.077823668718338,0.0520382076501846,0.0394917130470276,0.693198621273041,0.185054555535316,0.672030031681061,0.791468799114227 ,0.520808458328247,0.49973601102829,0.501943588256836,0.499871522188187,0.0123160965740681,0.948372364044189,0.574645638465881 ,0.927067160606384,0.954527795314789,0.914097964763641,0.943775653839111,0.914058208465576,0.517141699790955,0.890655338764191 ,0.782427728176117,0.905642569065094,0.930662453174591,0.0174932777881622,0.0198648050427437,0.0209019873291254,0.0241470485925674 ,0.0309172626584768,0.0312053728848696,0.0391135588288307,0.339840680360794,0.430046528577805,0.447129368782043,0.458955973386765 ,0.459699958562851,0.463844180107117,0.00849306397140026,0.0146585777401924,0.00937444064766169,0.60956734418869,0.711777687072754 ,0.739983439445496,0.00504391174763441,0.00535760400816798,0.00569094764068723,0.00670535862445831,0.00806801579892635 ,0.0108356466516852,0.0753843709826469,0.0757224038243294,0.0749938189983368,0.0742722302675247,0.0692730024456978 ,0.796917974948883,0.802588641643524,0.807209610939026,0.809173047542572,0.808085501194,0.824402511119843,0.843233942985535 ,0.803074777126312,0.825077176094055,0.823010802268982,0.829862356185913,0.833508431911469,0.849360466003418,0.801250517368317 ,0.793128728866577,0.780713319778442,0.774000704288483,0.794888734817505,0.798239409923553,0.825299918651581,0.801834642887115 ,0.805963695049286,0.800087213516235,0.79336816072464,0.778830647468567,0.787423253059387,0.801776587963104,0.858772218227386 ,0.854447066783905,0.850737750530243,0.842241585254669,0.826670169830322,0.793108701705933,0.814504384994507,0.817793011665344 ,0.837992191314697,0.815393090248108,0.798432469367981,0.810963213443756,0.813634872436523,0.818409025669098,0.805816054344177 ,0.799614131450653,0.795112609863281,0.794762969017029,0.803587794303894,0.813179910182953,0.86850494146347,0.858750760555267 ,0.849023580551147,0.833366572856903,0.82126647233963,0.872544646263123,0.867573082447052,0.867268443107605,0.845763564109802 ,0.836205542087555,0.839719176292419,0.850303113460541,0.860818028450012,0.918317377567291,0.918486177921295,0.909476399421692 ,0.903227865695953,0.747987389564514,0.75365674495697,0.749965846538544,0.753709673881531,0.781962871551514,0.783975124359131 ,0.756250858306885,0.779371798038483,0.770965278148651,0.749122202396393,0.765678226947784,0.70329737663269,0.708670139312744 ,0.705387771129608,0.709230542182922,0.711409032344818,0.704181611537933,0.719209790229797,0.921198844909668,0.752510130405426 ,0.799100637435913,0.798319518566132,0.796379506587982,0.763998687267303,0.717124164104462,0.707501947879791,0.722574353218079 ,0.807906568050385,0.839753091335297,0.84136825799942,0.82934308052063,0.911288857460022,0.900106549263,0.783974468708038 ,0.81630003452301,0.723835170269012,0.718316912651062,0.764115273952484,0.768223702907562,0.724165022373199,0.72052001953125 ,0.770703554153442,0.717623770236969,0.768704295158386,0.839786648750305,0.727094113826752,0.779557883739471,0.730585038661957 ,0.725931465625763,0.776144564151764,0.735690236091614,0.75948578119278,0.773145437240601,0.7225621342659,0.880705714225769 ,0.82598078250885,0.775107979774475,0.871436893939972,0.889169096946716,0.844534039497375,0.845540046691895,0.846522748470306 ,0.854915857315063,0.8920778632164,0.894299268722534,0.732543468475342,0.773456871509552,0.950825214385986,0.969283103942871 ,0.740236520767212,0.854900181293488,0.799582958221436,0.847225308418274,0.734141290187836,0.769206762313843,0.972008883953094 ,0.975831806659698,0.938882350921631,0.914127767086029,0.890340089797974,0.885062396526337,0.895122110843658,0.852914929389954 ,0.941078782081604,0.955900371074677,0.783710718154907,0.758698046207428,0.819364070892334,0.802570521831512,0.788347721099854 ,0.788150370121002,0.688285827636719,0.733043849468231,0.797011494636536,0.71169650554657,0.801984071731567,0.723223984241486 ,0.821078062057495,0.755426645278931,0.842377662658691,0.829339385032654,0.79728102684021,0.816121220588684,0.75395268201828 ,0.793606996536255,0.836301624774933,0.81099146604538,0.70647805929184,0.806005716323853,0.672845840454102,0.67341148853302 ,0.766445398330688,0.707209527492523,0.856030821800232,0.863097786903381,0.824632585048676,0.828430116176605,0.857899188995361 ,0.859728515148163,0.845887064933777,0.838799178600311,0.839101791381836,0.847654759883881,0.932397305965424,0.914330780506134 ,0.912998378276825,0.928670585155487,0.812658250331879,0.874298095703125,0.872081577777863,0.815775990486145,0.882383823394775 ,0.900112390518188,0.907724559307098,0.945751070976257,0.956339716911316,0.957941651344299,0.736182391643524,0.64156436920166 ,0.649076700210571,0.844456791877747,0.890936672687531,0.94377201795578,0.956134855747223,0.562585234642029,0.510322034358978 ,0.514137625694275,0.57107138633728,0.690173208713531,0.786438465118408,0.848345816135406,0.866082906723022,0.84492015838623 ,0.798344433307648,0.737167000770569,0.686202585697174,0.710266470909119,0.722948431968689,0.757045805454254,0.811590313911438 ,0.848826766014099,0.797695994377136,0.75676017999649,0.715186834335327,0.677431404590607,0.675951838493347,0.707814037799835 ,0.872733950614929,0.774448871612549,0.854348838329315,0.921636939048767,0.960894465446472,0.747694432735443,0.958584189414978 ,0.561441242694855,0.507969915866852,0.512782514095306,0.566574394702911,0.687234282493591,0.785499155521393,0.846379995346069 ,0.945776760578156,0.944040477275848,0.860576987266541,0.804284751415253,0.866923034191132,0.937155365943909,0.943481504917145 ,0.874237179756165,0.879157423973084,0.823953986167908,0.654940128326416,0.526018619537354,0.524963557720184,0.959881842136383 ,0.957106471061707,0.956878066062927,0.944541215896606,0.92781674861908,0.90781444311142,0.905358612537384,0.912126362323761 ,0.89648574590683,0.888637125492096,0.889766335487366,0.91316956281662,0.906045854091644,0.899924159049988,0.935516655445099 ,0.941309750080109,0.904953300952911,0.885624349117279,0.847198128700256,0.770461857318878,0.76787406206131,0.963826358318329 ,0.96113908290863,0.961089909076691,0.950632452964783,0.908831655979156,0.857835710048676,0.81183522939682,0.798646628856659 ,0.639582335948944,0.815626800060272,0.566958427429199,0.525693416595459,0.673427164554596,0.694212138652802,0.862183153629303 ,0.878029108047485,0.845140874385834,0.854517221450806,0.822884678840637,0.834131062030792,0.893841207027435,0.887415945529938 ,0.867077529430389,0.885372996330261,0.861731290817261,0.819874823093414,0.842385053634644,0.777085423469543,0.744409739971161 ,0.673969209194183,0.636548519134521,0.80493575334549,0.866995632648468,0.882088422775269,0.866331219673157,0.846528887748718 ,0.83049601316452,0.831366002559662,0.820866942405701,0.804013192653656,0.800460815429688,0.816933929920197,0.81192022562027 ,0.850354492664337,0.895127296447754,0.925061881542206,0.844556331634521,0.659179925918579,0.570643901824951,0.811593234539032 ,0.908195972442627,0.871232807636261,0.924025893211365,0.921512961387634,0.922115802764893,0.931954026222229,0.934867560863495 ,0.891904175281525,0.888459205627441,0.902878940105438,0.914022922515869,0.916135847568512,0.792705476284027,0.806619882583618 ,0.813966035842896,0.819875657558441,0.825136125087738,0.860069930553436,0.914043009281158,0.920753955841064,0.91921067237854 ,0.908249855041504,0.864333271980286,0.852148413658142,0.952171742916107,0.95646870136261,0.950879693031311,0.937963724136353 ,0.805840194225311,0.788787066936493,0.790082514286041,0.905307650566101,0.9073566198349,0.906107366085052,0.926503598690033 ,0.939972460269928,0.643545925617218,0.566204309463501,0.855476260185242,0.872918725013733,0.88499253988266,0.654054284095764 ,0.655697882175446,0.954368114471436,0.951784253120422,0.525358974933624,0.531103730201721,0.576018631458282,0.66177636384964 ,0.521119952201843,0.527190089225769,0.574280679225922,0.658276557922363,0.51849240064621,0.525535702705383,0.569722771644592 ,0.828037142753601,0.717865943908691,0.718957960605621,0.72654914855957,0.891153514385223,0.866597652435303,0.792984366416931 ,0.841738641262054,0.830993831157684,0.825460255146027,0.805268168449402,0.801807880401611,0.801998734474182,0.80620151758194 ,0.80648285150528,0.8196861743927,0.856441140174866,0.840847074985504,0.876736998558044,0.897193491458893,0.879593849182129 ,0.890488386154175,0.854347586631775,0.834697484970093,0.86210036277771,0.894861817359924,0.475770980119705,0.458353370428085 ,0.396623522043228,0.433141261339188,0.417630434036255,0.319892078638077,0.382260203361511,0.368590116500854,0.435862481594086 ,0.471226334571838,0.40870589017868,0.392782628536224,0.484944015741348,0.496751010417938,0.480986088514328,0.490831136703491 ,0.490555346012115,0.48654118180275,0.483698606491089,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949 ,0.4991694688797,0.485532969236374,0.464642822742462,0.535651922225952,0.590244889259338,0.615910470485687,0.546950042247772 ,0.659544289112091,0.566442787647247,0.687947928905487,0.579388856887817,0.699130892753601,0.583877623081207,0.552021145820618 ,0.535593271255493,0.559898853302002,0.56237918138504,0.515810310840607,0.509566366672516,0.526057660579681,0.52871561050415 ,0.504014670848846,0.509806096553802,0.502772271633148,0.502121865749359,0.538578569889069,0.565036475658417,0.497771769762039 ,0.499860972166061,0.513701200485229,0.495591461658478,0.45454004406929,0.391833573579788,0.347644448280334,0.432123422622681 ,0.272249549627304,0.390310823917389,0.250164747238159,0.365234851837158,0.411932826042175,0.449440985918045,0.393866956233978 ,0.479107886552811,0.489363878965378,0.4683777987957,0.462633848190308,0.483733534812927,0.4803307056427,0.482127755880356 ,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.467380285263062,0.434641182422638,0.531138360500336 ,0.542760670185089,0.61461478471756,0.587907910346985,0.563326597213745,0.65929239988327,0.577728271484375,0.687950670719147 ,0.548891603946686,0.53145968914032,0.558209538459778,0.521568179130554,0.505979537963867,0.511844336986542,0.524451196193695 ,0.506610453128815,0.502292513847351,0.501941919326782,0.534197330474854,0.561727583408356,0.491019129753113,0.499508380889893 ,0.509556293487549,0.42677640914917,0.388839572668076,0.308941006660461,0.461290061473846,0.484441757202148,0.623691499233246 ,0.597078144550323,0.669393360614777,0.699311673641205,0.705560207366943,0.56942743062973,0.540330648422241,0.50005704164505 ,0.497496992349625,0.514450132846832,0.381174743175507,0.257222056388855,0.232263743877411,0.428449273109436,0.464983582496643 ,0.596508383750916,0.624365866184235,0.670899271965027,0.700318157672882,0.567449569702148,0.536635041236877,0.490132242441177 ,0.499542444944382,0.510450124740601,0.836060404777527,0.839611887931824,0.836895942687988,0.819555521011353,0.818680346012115 ,0.694415628910065,0.702977180480957,0.69442355632782,0.822489380836487,0.499316424131393,0.499484270811081,0.269271939992905 ,0.0363340899348259,0.200038895010948,0.287381142377853,0.278994768857956,0.135241404175758,0.188873007893562,0.20507188141346 ,0.10530211776495,0.100710526108742,0.0366321876645088,0.0321969203650951,0.0377073623239994,0.0413589552044868,0.129193872213364 ,0.160873353481293,0.298055350780487,0.276435554027557,0.247449889779091,0.255618959665298,0.195023968815804,0.176026284694672 ,0.292012274265289,0.250698626041412,0.273236691951752,0.174657389521599,0.252640843391418,0.298453480005264,0.277277916669846 ,0.0584391839802265,0.071047268807888,0.0527480281889439,0.0709102898836136,0.272021859884262,0.242320537567139,0.0598576068878174 ,0.224342092871666,0.0477189496159554,0.262468338012695,0.146162793040276,0.246551141142845,0.213548183441162,0.136089324951172 ,0.128732904791832,0.212865605950356,0.191950678825378,0.0356704853475094,0.0367216020822525,0.0367787405848503,0.0368168205022812 ,0.036780372262001,0.036685723811388,0.0367924906313419,0.0366408154368401,0.0358510501682758,0.03602459654212,0.175911843776703 ,0.16103008389473,0.182328402996063,0.554998397827148,0.952422797679901,0.93386310338974,0.929259359836578,0.6139115691185 ,0.300000011920929,0.607261776924133,0.300000011920929,0.551125824451447,0.938569843769073,0.937819421291351,0.947948038578033 ,0.9091557264328,0.904147624969482,0.890257716178894,0.910216808319092,0.880972325801849,0.585072457790375,0.480802029371262 ,0.589536905288696,0.576095461845398,0.300000011920929,0.484088629484177,0.487558513879776,0.0334288142621517,0.032782070338726 ,0.032839871942997,0.200000002980232,0.335145354270935,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232 ,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.308288633823395,0.900275528430939,0.250959098339081 ,0.824565351009369,0.847789824008942,0.882460951805115,0.879214882850647,0.852208852767944,0.841133236885071,0.0353639125823975 ,0.200000002980232,0.668727517127991,0.699191093444824,0.720621943473816,0.756375908851624,0.744136810302734,0.711437523365021 ,0.677942633628845,0.640930593013763,0.633037149906158,0.0355646312236786,0.0357317328453064,0.308352440595627,0.034441702067852 ,0.503331482410431,0.520728409290314,0.53005975484848,0.534790754318237,0.535664319992065,0.512462198734283,0.503290057182312 ,0.43207922577858,0.0523942671716213,0.0287168957293034,0.0657621473073959,0.0810146406292915,0.0793797895312309,0.0658637285232544 ,0.4886814057827,0.93654078245163,0.959634304046631,0.908121883869171,0.935774326324463,0.890292286872864,0.930742979049683 ,0.928332030773163,0.895345449447632,0.900514721870422,0.935992121696472,0.898749768733978,0.894806563854218,0.820103764533997 ,0.91419917345047,0.877375066280365,0.934875965118408,0.927780985832214,0.916402637958527,0.914490222930908,0.880014002323151 ,0.886390507221222,0.917209446430206,0.862820744514465,0.852146029472351,0.887707710266113,0.928047180175781,0.93571674823761 ,0.878426074981689,0.919436573982239,0.949093282222748,0.94213742017746,0.919628381729126,0.970703184604645,0.950217664241791 ,0.928992509841919,0.956079125404358,0.937943637371063,0.921655356884003,0.861780822277069,0.885524451732636,0.91277140378952 ,0.914094805717468,0.910454094409943,0.914847612380981,0.945037424564362,0.960116565227509,0.938776850700378,0.925693988800049 ,0.926077365875244,0.934013366699219,0.926871538162231,0.932785332202911,0.935199439525604,0.923216760158539,0.914379596710205 ,0.921595096588135,0.937012314796448,0.923063695430756,0.926131665706635,0.899774134159088,0.91342967748642,0.933672666549683 ,0.901028752326965,0.92220151424408,0.0339444801211357,0.303750246763229,0.200000002980232,0.300000011920929,0.508266389369965 ,0.568917274475098,0.69706529378891,0.837648928165436,0.00947685819119215,0.0099763497710228,0.0164241753518581,0.0136153446510434 ,0.0167659018188715,0.0193188674747944,0.0165212638676167,0.0196010749787092,0.0152013218030334,0.0170877762138844 ,0.0179032739251852,0.0175033565610647,0.014290276914835,0.015932273119688,0.0180900525301695,0.0179031025618315,0.0781811326742172 ,0.0911547169089317,0.137335762381554,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116 ,0.212126582860947,0.213561147451401,0.916650414466858,0.860767245292664,0.887980997562408,0.845418572425842,0.738132357597351 ,0.605785727500916,0.537369668483734,0.300000011920929,0.200000002980232,0.200000002980232,0.100000001490116,0.0340701937675476 ,0.0028827260248363,0.00179311831016093,0.00401651160791516,0.00892997067421675,0.0099483160302043,0.0100685115903616 ,0.0091486806049943,0.00919780507683754,0.0162262488156557,0.010299320332706,0.010226528160274,0.0159180611371994 ,0.00983505696058273,0.00625966535881162,0.0154218059033155,0.0102562345564365,0.0154791539534926,0.0155376037582755 ,0.0240341890603304,0.0147921089082956,0.0244445633143187,0.0284491814672947,0.0287205446511507,0.0280658081173897 ,0.0274832937866449,0.0139817874878645,0.00904152262955904,0.0104096597060561,0.0146032851189375,0.015713419765234 ,0.0161524098366499,0.0160696785897017,0.00990277994424105,0.00993933063000441,0.0107942000031471,0.0152961015701294 ,0.00890574045479298,0.00526867294684052,0.0125740431249142,0.00979874935001135,0.0101370560005307,0.0206324737519026 ,0.020552285015583,0.0277900211513042,0.0274502355605364,0.0297787487506866,0.0297703463584185,0.0287828836590052 ,0.028711199760437,0.0260352157056332,0.0260036587715149,0.0243596658110619,0.0190564673393965,0.0288612972944975 ,0.0274189785122871,0.00950775109231472,0.0198205951601267,0.0264423154294491,0.0287518054246902,0.0278525054454803 ,0.0252742879092693,0.0229827482253313,0.014639045111835,0.0138399545103312,0.0122612956911325,0.0136584080755711 ,0.0129717355594039,0.0248363558202982,0.0241523422300816,0.0219858847558498,0.0143308853730559,0.0114311994984746 ,0.0181903019547462,0.0237003993242979,0.0204702317714691,0.0136737115681171,0.0114700272679329,0.0132998926565051 ,0.0271537154912949,0.0246199890971184,0.0273829195648432,0.0291210822761059,0.0270285941660404,0.0283864550292492 ,0.0291346069425344,0.0259131416678429,0.0300872698426247,0.0291729345917702,0.0296658203005791,0.0240968931466341 ,0.0288406312465668,0.0122615313157439,0.112699277698994,0.109744668006897,0.0139341726899147,0.0110394479706883,0.127745643258095 ,0.00968854501843452 Transform: -0.210987573672523,-0.177990473315178,-0.961146997997314,0,-0.975253101222208,0.104794805518868,0.194677614514139 ,0,0.0660724538480163,0.978436204615115,-0.195696163886547,0,35.72022134769,-5.7883350418252,-10.3666109901212,1 TransformLink: -0.210987586997392,-0.975253162814077,0.0660724580208058,0,-0.177990479303431,0.10479480904455,0.978436237533301,0 ,-0.961147080740473,0.194677631273532,-0.195696180733625,0,-3.45758310962855,37.4609935830385,1.27468775649854,1 } Deformer: "SubDeformer::Cluster_Spine2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670 ,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693 ,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,5301,5302,5303,5304,5307 ,5308,5309,5310,5311,5312,5313,5314,5317,5319,5324,5325,5326,5327,5328,5329,5335,5336,5337,5338,5340,5341,5342,5343 ,5344,5345,5346,5347,5348,5349,5350,5351,5352,5356,5371,5372,5373,5377,5378,5380,5382,5383,5385,5386,5389,5390,5391 ,5392,5393,5396,5401,5419,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438 ,5439,5440,5441,5442,5451,5458,5460,5464,5465,5469,5470,5471,5472,5473,5485,5487,5488,5490,5491,5492,5493,5494,5495 ,5496,5497,5498,5499,5500,5512,5513,5515,5517,5522,5523,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751 ,5757,5758,5759,5760,5761,5762,5766,5769,5770,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5787 ,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5820,5821,5822,5823,5824,5832,5851,5852,5853,5854,5855,5856,5857 ,5858,5859,5860,5861,5863,5866,5867,5869,5870,5871,5872,5881,5888,5890,5891,5899,6496,6497,9927,9928,9929,9930,9931 ,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954 ,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977 ,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000 ,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019 ,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038 ,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10083,10084,10085,10086,10093,10094 ,10095,10096,10112,10116,10123,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10140,10141,10142,10144 ,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163 ,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182 ,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10199,10206,10207,10215,10216,10223,10224,10225 ,10226,10227,10228,10229,10230,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10274,10275,10276,10277 ,10284,10285,10286,10287,10288,10289,10321,10324,10326,10328,10338,10339,10362,10363,10364,10365,10399,10400,10401 ,10402,10403,10404,10405,10408,10410,10411,10413,10414,10448,10456,10460,10461,10462,10463,10464,10467,10468,10470 ,10471,10472,10473,10474,10475,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10527 ,10528,10529,10536,10537,10540,10550,10565,10569,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589 ,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608 ,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628 ,10629,10632,10633,10634,10637,10640,10648,10655,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10677 ,10685,10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10756,10758,10761 ,10771,10772,10791,10792,10793,10794,10828,10829,10830,10831,10832,10833,10834,10836,10837,10838,10839,10840,10842 ,10843,10871,10872,10873,10877,10887,10888,10889,10890,10891,10893,10894,10895,10896,10897,10898,10899,10900,10901 ,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920 ,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939 ,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958 ,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977 ,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996 ,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015 ,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034 ,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053 ,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072 ,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091 ,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110 ,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129 ,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148 ,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167 ,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11187 ,11189,11190,11192 Weights: 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5 ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5 ,0.5,0.5,0.5,0.5,0.5,0.5,0.359894096851349,0.131822139024735,0.321277141571045,0.160423785448074,0.722898602485657 ,0.445386797189713,0.45045331120491,0.402194231748581,0.480391561985016,0.577919542789459,0.447136491537094,0.380231142044067 ,0.412134319543839,0.148485705256462,0.318740755319595,0.15874582529068,0.181284919381142,0.272806972265244,0.1451396048069 ,0.353126019239426,0.495000004768372,0.563023507595062,0.738020777702332,0.899999976158142,0.238575875759125,0.355732023715973 ,0.364720314741135,0.36279034614563,0.504305362701416,0.418273389339447,0.21246899664402,0.484130948781967,1,1,0.717513561248779 ,0.609057724475861,1,0.190772294998169,0.189764350652695,0.379646718502045,0.410798698663712,0.310579746961594,0.410809904336929 ,0.343109250068665,0.151649907231331,0.372355252504349,0.432689905166626,0.705370366573334,0.446909070014954,0.397691786289215 ,0.493638128042221,0.249241650104523,0.408016115427017,0.1743523478508,0.580612659454346,0.316434442996979,0.144477933645248 ,0.492175936698914,0.409012824296951,0.168958619236946,0.447480082511902,0.494035720825195,0.534899950027466,0.577429175376892 ,0.539071023464203,0.499245464801788,0.450773000717163,0.357262283563614,0.359641790390015,0.300000011920929,0.510655224323273 ,0.393249958753586,0.122448980808258,0.300000011920929,0.574471712112427,0.383565634489059,0.390012353658676,0.394759863615036 ,0.500222086906433,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.413799285888672,0.550000011920929 ,0.150000005960464,0.150000005960464,0.119999997317791,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929 ,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929 ,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929 ,0.300000011920929,0.300000011920929,0.201034501194954,0.283556282520294,0.622648358345032,0.410614639520645,0.15689942240715 ,0.363164901733398,0.497522711753845,0.366464495658875,0.144129678606987,0.15396711230278,0.136388406157494,0.110584229230881 ,0.319683194160461,0.15707790851593,0.179601892828941,0.271901369094849,0.144837826490402,0.353604793548584,0.232929348945618 ,0.334674477577209,0.347276002168655,0.237096637487412,0.355479329824448,0.364682763814926,0.228183850646019,0.328231632709503 ,0.286706179380417,0.1999551653862,0.353024065494537,1,0.120854437351227,0.705098867416382,0.570705950260162,0.138418808579445 ,0.188803881406784,0.187508851289749,0.377009600400925,0.378021121025085,0.313959717750549,0.391879200935364,0.343293637037277 ,0.150570645928383,0.370510280132294,0.43337219953537,0.704165577888489,0.446447998285294,0.397987276315689,0.493255823850632 ,0.247754007577896,0.329767942428589,0.584638297557831,0.10365991294384,0.386701285839081,0.469178020954132,0.190165564417839 ,0.446778386831284,0.448410719633102,0.496600031852722,0.485161036252975,0.440406888723373,0.500257134437561,0.45028492808342 ,0.25,0.394021302461624,0.460566163063049,0.361449152231216,0.384900748729706,0.390994220972061,0.341767132282257 ,0.419938653707504,0.170603901147842,0.181894451379776,0.25753927230835,0.41343629360199,0.121487513184547,0.110730439424515 ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5 ,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5 ,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.5 ,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142 ,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.5,0.899999976158142 ,0.899999976158142,0.5,0.899999976158142,0.0210085958242416,0.0191792137920856,0.0192963965237141,0.0186389740556479 ,0.122763067483902,0.0245019607245922,0.0995751470327377,0.0995730087161064,0.0180597361177206,0.0178598538041115 ,0.179421439766884,0.171214923262596,0.128943219780922,0.122265592217445,0.131793394684792,0.121538914740086,0.120697997510433 ,0.0198810547590256,0.121450372040272,0.116797655820847,0.115617334842682,0.105570323765278,0.105481624603271,0.104324460029602 ,0.135003134608269,0.120837047696114,0.10340691357851,0.0984461605548859,0.09486985206604,0.0916204452514648,0.0895644500851631 ,0.0894134789705276,0.0967373102903366,0.0844946131110191,0.0784533694386482,0.094071164727211,0.101866342127323,0.0899942740797997 ,0.084604375064373,0.0803702101111412,0.0761234313249588,0.0726300999522209,0.0867085829377174,0.069316990673542,0.0856314152479172 ,0.0676203221082687,0.0842828527092934,0.067114382982254,0.0686155781149864,0.0656019300222397,0.0627633929252625 ,0.0593736432492733,0.057195819914341,0.0551217012107372,0.0533682592213154,0.0668788924813271,0.899999976158142,0.899999976158142 ,0.0634551644325256,0.061039824038744,0.899999976158142,0.0573312938213348,0.899999976158142,0.0553891472518444,0.0535443685948849 ,0.909212648868561,0.0892795249819756,0.132362753152847,0.0948472172021866,0.0853950530290604,0.0423025786876678,0.120995484292507 ,0.0709883868694305,0.0245840400457382,0.0281479936093092,0.899999976158142,0.899999976158142,0.0205661673098803,0.0625068545341492 ,0.0935042500495911,0.899999976158142,0.906017541885376,0.120485842227936,0.0772125869989395,0.0612680874764919,0.899999976158142 ,0.899999976158142,0.908125281333923,0.906064808368683,0.12110710889101,0.230990335345268,0.125681951642036,0.128095984458923 ,0.128825411200523,0.125952377915382,0.0230134893208742,0.0197366271167994,0.0314518921077251,0.331447571516037,0.228125557303429 ,0.899999976158142,0.125234216451645,0.232355818152428,0.121031150221825,0.0187431108206511,0.130838826298714,0.0202204361557961 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0279667302966118,0.133586198091507,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0994578823447227,0.0994723290205002 ,0.0994878485798836,0.0994757488369942,0.0992683842778206,0.78326690196991,0.651701331138611,0.67856639623642,0.722593247890472 ,0.899999976158142,0.908350229263306,0.227162957191467,0.0995369106531143,0.899999976158142,0.899999976158142,0.800000011920929 ,0.0994640290737152,0.899999976158142,0.899999976158142,0.675524592399597,0.899999976158142,0.810967564582825,0.810860931873322 ,0.811047852039337,0.899999976158142,0.0201524216681719,0.0311778448522091,0.136765494942665,0.131722420454025,0.127948045730591 ,0.127072706818581,0.0993012562394142,0.0991286635398865,0.099322073161602,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.0161145962774754,0.0185560490936041,0.0324523970484734,0.122718594968319,0.0994901955127716,0.0995630919933319 ,0.038259107619524,0.0896085575222969,0.169828429818153,0.122217774391174,0.124139316380024,0.120667956769466,0.0380419753491879 ,0.121132530272007,0.031004436314106,0.103646159172058,0.120674453675747,0.0986567735671997,0.0917479991912842,0.0950431227684021 ,0.0894859209656715,0.0896541252732277,0.0968138575553894,0.09412532299757,0.0784110277891159,0.0844981074333191,0.0900865197181702 ,0.102103270590305,0.0802971869707108,0.0846083983778954,0.0724213346838951,0.0759714841842651,0.0867259800434113 ,0.0690862610936165,0.0856297239661217,0.0673950910568237,0.0842797458171844,0.0669263899326324,0.0652717873454094 ,0.0683451294898987,0.0589643530547619,0.0623894222080708,0.0568165369331837,0.0547826141119003,0.0530858412384987 ,0.0665799528360367,0.0630895420908928,0.899999976158142,0.899999976158142,0.0606382973492146,0.0568939559161663,0.899999976158142 ,0.0549896210432053,0.899999976158142,0.0531911998987198,0.908972263336182,0.0816975012421608,0.094945527613163,0.0854047760367393 ,0.0639795660972595,0.120819725096226,0.0708507224917412,0.0260804612189531,0.0219318121671677,0.899999976158142,0.0194744672626257 ,0.0623186081647873,0.0935470536351204,0.12045968323946,0.906039774417877,0.899999976158142,0.0771617144346237,0.899999976158142 ,0.899999976158142,0.0610728077590466,0.907944023609161,0.0715562850236893,0.125531867146492,0.125799506902695,0.128634288907051 ,0.127870187163353,0.0339642949402332,0.038983803242445,0.108174778521061,0.0945930778980255,0.899999976158142,0.0693850517272949 ,0.125101238489151,0.0958503782749176,0.120923519134521,0.0301489941775799,0.0456141158938408,0.130416601896286,0.899999976158142 ,0.899999976158142,0.899999976158142,0.040399719029665,0.13324661552906,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.0976946875452995,0.0977993011474609,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.768164098262787,0.814141035079956,0.632749080657959,0.677894532680511,0.0795049443840981,0.0845270901918411 ,0.0980286151170731,0.0894803777337074,0.099321112036705,0.0979417786002159,0.908165276050568,0.0995413362979889,0.899999976158142 ,0.899999976158142,0.0994874984025955,0.899999976158142,0.899999976158142,0.899999976158142,0.720643103122711,0.630293428897858 ,0.766258358955383,0.899999976158142,0.899999976158142,0.0977180302143097,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 Transform: 1.15766822404049e-006,-1.28535908817908e-006,0.999999999997491,0,0.995290635085167,0.0969362522209254,-1.02761836151786e-006 ,0,-0.0969362522195667,0.995290635083767,1.3915257634653e-006,0,-49.9940905212278,-4.81498390970324,-0.0375257788007833 ,1 TransformLink: 1.15766812530998e-006,0.995290550202856,-0.0969362439524608,0,-1.28535897856143e-006,0.096936243954034,0.995290550203658 ,0,0.999999999999517,-1.02761836151994e-006,1.39152576346812e-006,0,0.0375774663830155,50.2253922781078,-0.0539313180187548 ,1 } Deformer: "SubDeformer::Cluster_L_Knee2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904 ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927 ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950 ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973 ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996 ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019 ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042 ,4043,4044,4045,4046,4047,4048,4049,4050,4051,6539,6541,6542,6543,6545,6566,6567,6568,6569,6570,6572,6573,6574,6576 ,6578,6580,6582,6587,6588,6589,6591,6592,6595,6604,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6638,6639 ,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6662,6663,6665,6669,6680,6681 ,6682,6683,6689,6690,6691,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6866,6867,6868,6869,6870,6871,6903 ,6904,6909,6910,6911,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552 ,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575 ,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598 ,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621 ,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644 ,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667 ,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690 ,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713 ,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736 ,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759 ,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782 ,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805 ,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828 ,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851 ,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874 ,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897 ,8898,8899,8900,8904,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8919,8920,8921,8922,8923,8924,8925,8926 ,8927,8928,8929,8931,8932,8934,8935,8936,8937,8938,8940,8941,8942,8943,8944,8945,8946,8948,8949,8950,8951,8952,8953 ,8954,8955,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977 ,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000 ,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023 ,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046 ,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069 ,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092 ,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115 ,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138 ,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161 ,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184 ,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207 ,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230 ,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253 ,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276 ,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299 ,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322 ,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345 ,9346,9347,9348,9349,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370 ,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393 ,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416 ,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439 ,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462 ,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485 ,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508 ,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531 ,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554 ,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577 ,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600 ,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623 ,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646 ,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669 ,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9692,9693,9694,9698,9702,9703,9707,9708 ,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740 ,9741,9742,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768 ,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791 ,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814 ,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837 ,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9901,9902 ,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925 ,9926 Weights: 0.217937991023064,0.193066567182541,0.150126114487648,0.17124816775322,0.165598079562187,0.122377060353756,0.148478820919991 ,0.0956615433096886,0.140187636017799,0.0787397772073746,0.144371047616005,0.117074072360992,0.101211987435818,0.133439242839813 ,0.0911127552390099,0.069226861000061,0.0714743733406067,0.0480961725115776,0.10335074365139,0.126632317900658,0.149800479412079 ,0.0685747936367989,0.0428042337298393,0.0310193803161383,0.167778611183167,0.230801030993462,0.163355246186256,0.111697867512703 ,0.134922936558723,0.0986230075359344,0.0804232433438301,0.109543345868587,0.0710814893245697,0.0740618333220482,0.134507805109024 ,0.0736229047179222,0.0587472394108772,0.0512644127011299,0.0673453360795975,0.0499555207788944,0.0700478702783585 ,0.0618133395910263,0.0750201046466827,0.0922682136297226,0.0804645866155624,0.0456821210682392,0.0354322865605354 ,0.0335599854588509,0.143076032400131,0.0875507295131683,0.0984939783811569,0.168851777911186,0.165012300014496,0.0927857756614685 ,0.159829273819923,0.139958202838898,0.14929561316967,0.069535106420517,0.050439827144146,0.0829839482903481,0.102786235511303 ,0.0354951024055481,0.0229150280356407,0.0166076384484768,0.0108027188107371,0.0101655097678304,0.00608651200309396 ,0.072212278842926,0.0804904103279114,0.0394822135567665,0.0363513678312302,0.0183210987597704,0.0167477466166019 ,0.0103857610374689,0.0103328255936503,0.123184978961945,0.131587728857994,0.103567540645599,0.102400660514832,0.0416419804096222 ,0.0209475345909595,0.0313385166227818,0.0538950078189373,0.0102837020531297,0.0172615870833397,0.00782635621726513 ,0.0132249752059579,0.0325090512633324,0.0171860456466675,0.0176416132599115,0.0335634164512157,0.0136251226067543 ,0.0130008785054088,0.0652362108230591,0.0496616810560226,0.124598667025566,0.0696243494749069,0.0846680551767349 ,0.0544763430953026,0.11882134526968,0.172125160694122,0.19344200193882,0.220697969198227,0.200828805565834,0.119947507977486 ,0.0879858732223511,0.173677518963814,0.0491216033697128,0.137200742959976,0.0281743127852678,0.114367216825485,0.0199793707579374 ,0.0973046720027924,0.223634704947472,0.213968828320503,0.0652075260877609,0.115864135324955,0.0806689858436584,0.0329237170517445 ,0.0744070038199425,0.0204459112137556,0.0926106572151184,0.0211250614374876,0.157550111413002,0.165023967623711,0.066793404519558 ,0.0384841412305832,0.0155896889045835,0.00648322282359004,0.00328610604628921,0.118579044938087,0.158680856227875 ,0.0288678389042616,0.0127693628892303,0.0054703475907445,0.00413582799956203,0.0724539160728455,0.107869297266006 ,0.193620681762695,0.221625596284866,0.164402574300766,0.148051723837852,0.139042526483536,0.194092482328415,0.226165369153023 ,0.204499185085297,0.235685050487518,0.136574730277061,0.109518423676491,0.106049604713917,0.132017239928246,0.170960187911987 ,0.176611080765724,0.14548534154892,0.158295169472694,0.0775470584630966,0.0458164028823376,0.0200561676174402,0.00933938194066286 ,0.00501492712646723,0.168417036533356,0.129740998148918,0.0180741064250469,0.0374149270355701,0.00851493515074253 ,0.00643268646672368,0.08414426445961,0.121842563152313,0.202866554260254,0.155388861894608,0.00113062001764774,0.0011699030874297 ,0.00142485089600086,0.00137593131512403,0.00191429245751351,0.00360467471182346,0.00410669762641191,0.00478810397908092 ,0.00366930733434856,0.00185177964158356,0.00651489989832044,0.00790537614375353,0.00180479197297245,0.00497250165790319 ,0.00197080755606294,0.00203889538533986,0.00165602355264127,0.00176483765244484,0.00272715580649674,0.00230192486196756 ,0.00152403034735471,0.00248730834573507,0.00132022495381534,0.00276284059509635,0.00103867775760591,0.00196949602104723 ,0.00180855498183519,0.00192999036516994,0.00233792304061353,0.00125158741138875,0.00667747389525175,0.00140081695280969 ,0.00370705616660416,0.00188195053488016,0.0028317216783762,0.0026190890930593,0.00237803836353123,0.00129506958182901 ,0.0063701095059514,0.00740096950903535,0.0079770889133215,0.00791583675891161,0.00498282955959439,0.00367825804278255 ,0.00346787925809622,0.00271937483921647,0.00141765410080552,0.00240975338965654,0.00307231023907661,0.00263963523320854 ,0.0026630477514118,0.00183302361983806,0.00148538441862911,0.00261011580005288,0.0012280666269362,0.00128619314637035 ,0.001272784313187,0.00129027420189232,0.00192920712288469,0.00404529366642237,0.00393471261486411,0.00227775750681758 ,0.00469678221270442,0.00141284347046167,0.00184910569805652,0.00344931869767606,0.00138123158831149,0.00633459491655231 ,0.00395409855991602,0.00769313843920827,0.00885469187051058,0.00468115182593465,0.00788083299994469,0.00721679860725999 ,0.00124457373749465,0.00189409160520881,0.00751018477603793,0.00158069364260882,0.00212554424069822,0.00121294870041311 ,0.00207396456971765,0.00263531133532524,0.00229365844279528,0.00263653160072863,0.002594891237095,0.00523023307323456 ,0.00501290755346417,0.278524190187454,0.394556045532227,0.356071710586548,0.281402856111526,0.488670468330383,0.486498981714249 ,0.293616443872452,0.338438272476196,0.367852568626404,0.341589659452438,0.299342811107636,0.591005504131317,0.440767735242844 ,0.490833163261414,0.497860908508301,0.510798573493958,0.800929665565491,0.789895832538605,0.820857107639313,0.81392914056778 ,0.284495800733566,0.30119326710701,0.553172945976257,0.391654521226883,0.580089569091797,0.624157726764679,0.180358052253723 ,0.172835975885391,0.255893439054489,0.203865572810173,0.19896200299263,0.268915176391602,0.918198108673096,0.925586402416229 ,0.543842315673828,0.440254360437393,0.312048435211182,0.278778225183487,0.259148359298706,0.256495177745819,0.379354923963547 ,0.228678658604622,0.183471709489822,0.190731287002563,0.20325493812561,0.228591680526733,0.489701420068741,0.187608972191811 ,0.231067150831223,0.207314938306808,0.13930881023407,0.446447372436523,0.307628959417343,0.162401631474495,0.244091495871544 ,0.229731202125549,0.208574816584587,0.213357344269753,0.368181824684143,0.199297100305557,0.151384651660919,0.0941171497106552 ,0.499143898487091,0.207266747951508,0.098545603454113,0.509195327758789,0.164197608828545,0.284520030021667,0.87258243560791 ,0.937198340892792,0.929506897926331,0.939635574817657,0.937211036682129,0.811447024345398,0.838191568851471,0.830745756626129 ,0.814085900783539,0.683981478214264,0.707984209060669,0.814047157764435,0.773857712745667,0.765161633491516,0.841501414775848 ,0.568170011043549,0.560819149017334,0.498938947916031,0.499213874340057,0.453529417514801,0.500098705291748,0.605953276157379 ,0.360562413930893,0.431189507246017,0.500657081604004,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459 ,0.289263367652893,0.271083652973175,0.31381094455719,0.364148586988449,0.0104604847729206,0.0117881782352924,0.00920889433473349 ,0.00868870317935944,0.0158582646399736,0.012913279235363,0.0122199170291424,0.0147344302386045,0.0398468933999538 ,0.0335258916020393,0.0688999518752098,0.0766271725296974,0.186611503362656,0.183087810873985,0.151672527194023,0.0356982983648777 ,0.42280113697052,0.452128559350967,0.40513089299202,0.463361591100693,0.436503082513809,0.38639509677887,0.427062779664993 ,0.103389844298363,0.172851338982582,0.0250426344573498,0.0206322781741619,0.00760459387674928,0.00763090094551444 ,0.00503380922600627,0.00518276123329997,0.00184386631008238,0.00554785551503301,0.0065411957912147,0.00249896850436926 ,0.00617913668975234,0.00226741447113454,0.00445352448150516,0.00413006078451872,0.0073011196218431,0.00764281861484051 ,0.00377230672165751,0.00695649860426784,0.0105930175632238,0.013415620662272,0.0140805477276444,0.0111596565693617 ,0.00858309958130121,0.00860860012471676,0.009040174074471,0.00876380875706673,0.0116116171702743,0.00915669836103916 ,0.00767848733812571,0.007785739377141,0.0373207852244377,0.0356807373464108,0.0712771713733673,0.0775921493768692 ,0.0338086485862732,0.0711394846439362,0.154912173748016,0.148190930485725,0.179008305072784,0.419658631086349,0.404332429170609 ,0.423344492912292,0.461189091205597,0.459054917097092,0.450298726558685,0.468799650669098,0.471357196569443,0.470733731985092 ,0.468281656503677,0.461129665374756,0.459681630134583,0.482899278402328,0.46652552485466,0.49783006310463,0.497768074274063 ,0.425248622894287,0.440236985683441,0.203102990984917,0.212519079446793,0.173639550805092,0.18523108959198,0.0252952706068754 ,0.0382022671401501,0.0494664870202541,0.0247309561818838,0.0959605649113655,0.017598282545805,0.0179799422621727 ,0.0963413417339325,0.00837020669132471,0.00975190475583076,0.00930315069854259,0.00995020940899849,0.0112953381612897 ,0.014461281709373,0.0136039676144719,0.00938993413001299,0.0104363551363349,0.010656557045877,0.0100247217342258 ,0.0326296165585518,0.0194478332996368,0.0119620682671666,0.0225890632718802,0.0124636711552739,0.0057713259011507 ,0.0092778904363513,0.010950168594718,0.00912692490965128,0.00848509091883898,0.00771763687953353,0.00625959457829595 ,0.00867180153727531,0.00519386120140553,0.00542215025052428,0.00709175365045667,0.00440816627815366,0.00893468875437975 ,0.0327585935592651,0.0128655480220914,0.00944874808192253,0.029045645147562,0.00955470465123653,0.0319792591035366 ,0.0514524430036545,0.00910031981766224,0.0809905454516411,0.00846797414124012,0.0040576639585197,0.00289000198245049 ,0.291601538658142,0.305837243795395,0.495860993862152,0.497062891721725,0.284753739833832,0.497428089380264,0.498450934886932 ,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196 ,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.19354435801506 ,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.0101069388911128,0.498003214597702,0.498488068580627 ,0.124844379723072,0.00847867224365473,0.009872623719275,0.00662050535902381,0.00963056832551956,0.00449067214503884 ,0.00523729017004371,0.00585944904014468,0.00689659500494599,0.00176204845774919,0.00231578364036977,0.00216982280835509 ,0.00305611151270568,0.00286427279934287,0.00455412268638611,0.00240973522886634,0.00170441914815456,0.174829512834549 ,0.463668048381805,0.437743693590164,0.0907380133867264,0.0942813456058502,0.0316141545772552,0.447386860847473,0.494165003299713 ,0.254411548376083,0.475739121437073,0.495833784341812,0.481321185827255,0.497110813856125,0.0143417259678245,0.0915817469358444 ,0.441890031099319,0.17601589858532,0.0104726823046803,0.0110441735014319,0.00322920642793179,0.180409610271454,0.0045286095701158 ,0.0840634927153587,0.073136493563652,0.00281742191873491,0.00334198912605643,0.498167306184769,0.498650819063187 ,0.00585331814363599,0.497448414564133,0.48209011554718,0.39910900592804,0.398386210203171,0.421490728855133,0.0171202421188354 ,0.159211203455925,0.15203121304512,0.0257838927209377,0.143713772296906,0.27756530046463,0.267116546630859,0.166035607457161 ,0.181657657027245,0.202675879001617,0.156768962740898,0.158613741397858,0.25874650478363,0.294418185949326,0.310221552848816 ,0.333954304456711,0.306745558977127,0.347377270460129,0.37422052025795,0.396495938301086,0.335510343313217,0.420392662286758 ,0.396934300661087,0.311897039413452,0.252103835344315,0.285647630691528,0.31638965010643,0.289389371871948,0.237182766199112 ,0.358209788799286,0.330744564533234,0.294395178556442,0.216423064470291,0.235265210270882,0.177145376801491,0.154336825013161 ,0.221582189202309,0.203899502754211,0.291168242692947,0.265926122665405,0.222789525985718,0.382866770029068,0.379625827074051 ,0.354701280593872,0.298949152231216,0.32309752702713,0.00353628769516945,0.0043956097215414,0.00995998084545136,0.00464406609535217 ,0.00191318255383521,0.00239988300018013,0.00144379446282983,0.00101906375493854,0.00216976762749255,0.0185377430170774 ,0.00356011069379747,0.0051389541476965,0.00240384507924318,0.0039246529340744,0.00358820962719619,0.00492909690365195 ,0.00868967268615961,0.012543841265142,0.00162668875418603,0.00144240353256464,0.00167010014411062,0.00689264992251992 ,0.00304925511591136,0.0106126070022583,0.0109203718602657,0.0107194166630507,0.0107699315994978,0.00377897336147726 ,0.00214204099029303,0.00185688678175211,0.00528150983154774,0.00216559180989861,0.00740047078579664,0.0178566388785839 ,0.0126037206500769,0.00112852884922177,0.00547391129657626,0.00875450298190117,0.0106500312685966,0.00543188489973545 ,0.00321708037517965,0.0028818033169955,0.00511367572471499,0.00115782092325389,0.00272735022008419,0.0128676798194647 ,0.0186832193285227,0.00801458023488522,0.00457123108208179,0.00317270634695888,0.00154793937690556,0.0102164736017585 ,0.00986851658672094,0.009819395840168,0.0100564016029239,0.00538678048178554,0.0102701392024755,0.0117501271888614 ,0.0102348234504461,0.0146714728325605,0.0262550786137581,0.0271754302084446,0.051020797342062,0.0325711853802204 ,0.0242357943207026,0.0131749734282494,0.0136630134657025,0.017205037176609,0.0239689871668816,0.00827865395694971 ,0.0125653436407447,0.003217370249331,0.00539044104516506,0.00601178500801325,0.00432546203956008,0.00686935102567077 ,0.00861361064016819,0.0101967453956604,0.00765288062393665,0.00386519869789481,0.00497460691258311,0.00544665800407529 ,0.0212502051144838,0.0204925052821636,0.0234464816749096,0.00825588870793581,0.130269840359688,0.116699047386646 ,0.102264374494553,0.498141705989838,0.481745272874832,0.497402459383011,0.109394714236259,0.079887181520462,0.0448430106043816 ,0.05612413585186,0.348335713148117,0.321103662252426,0.136996060609818,0.825557231903076,0.726665556430817,0.574333310127258 ,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.589865803718567,0.588133454322815 ,0.709356665611267,0.82204669713974,0.798275709152222,0.761979937553406,0.801986038684845,0.813846588134766,0.830662250518799 ,0.732072174549103,0.738728821277618,0.721726655960083,0.496359467506409,0.483749479055405,0.507127046585083,0.462187528610229 ,0.355508267879486,0.394198328256607,0.389929682016373,0.422440081834793,0.370403230190277,0.312455385923386,0.337098896503448 ,0.319699198007584,0.357336074113846,0.327188402414322,0.275863766670227,0.237348303198814,0.46007451415062,0.495663166046143 ,0.498662918806076,0.896295666694641,0.88693642616272,0.815315902233124,0.586030066013336,0.504073619842529,0.808114111423492 ,0.795565605163574,0.7134850025177,0.57805347442627,0.500971138477325,0.496326148509979,0.461786419153214,0.892370939254761 ,0.876114130020142,0.794561326503754,0.641628742218018,0.312976479530334,0.201786264777184,0.112239710986614,0.567541480064392 ,0.700277745723724,0.779269278049469,0.792389869689941,0.852401494979858,0.863027215003967,0.855158448219299,0.959153354167938 ,0.955068171024323,0.826405823230743,0.866171360015869,0.893685817718506,0.875145792961121,0.944960653781891,0.859789371490479 ,0.921505987644196,0.849886894226074,0.522505104541779,0.539905965328217,0.603489339351654,0.566338777542114,0.580175757408142 ,0.680625438690186,0.614581108093262,0.627249896526337,0.562271416187286,0.527245342731476,0.588694632053375,0.60365891456604 ,0.513323426246643,0.501584470272064,0.517501533031464,0.50719553232193,0.506801426410675,0.510469377040863,0.512995004653931 ,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.513076305389404,0.534325361251831 ,0.459902405738831,0.40277636051178,0.376346588134766,0.44800540804863,0.332356840372086,0.427796334028244,0.304846733808517 ,0.414865493774414,0.295435309410095,0.411079108715057,0.442986249923706,0.460114300251007,0.435196161270142,0.43331316113472 ,0.481134057044983,0.487723857164383,0.470089703798294,0.467404961585999,0.493127942085266,0.48733189702034,0.494223415851593 ,0.49494481086731,0.456948399543762,0.429066330194473,0.500806391239166,0.498532742261887,0.483417391777039,0.502954125404358 ,0.541422784328461,0.601390898227692,0.644598543643951,0.562959849834442,0.720340251922607,0.603916108608246,0.74493545293808 ,0.629328787326813,0.583151161670685,0.546524524688721,0.601599276065826,0.518307745456696,0.508589446544647,0.528307914733887 ,0.533909976482391,0.513328611850739,0.516984522342682,0.514529645442963,0.499012738466263,0.499266684055328,0.498823940753937 ,0.499305218458176,0.529254913330078,0.560231685638428,0.467360258102417,0.455509841442108,0.38519886136055,0.411968350410461 ,0.433961093425751,0.33932089805603,0.418325275182724,0.308706313371658,0.448693335056305,0.466994106769562,0.438370853662491 ,0.476920962333679,0.492501705884933,0.486679792404175,0.47413045167923,0.491592615842819,0.495432138442993,0.495353788137436 ,0.464972317218781,0.438023507595062,0.507173299789429,0.499462336301804,0.489138394594193,0.57302188873291,0.611708164215088 ,0.692197263240814,0.537839472293854,0.514241337776184,0.368297398090363,0.395665526390076,0.322331756353378,0.293465346097946 ,0.289082944393158,0.424469411373138,0.455118209123611,0.498355507850647,0.501125514507294,0.482653737068176,0.611623883247375 ,0.735338807106018,0.763435781002045,0.566104888916016,0.531529128551483,0.403756648302078,0.375872433185577,0.328113824129105 ,0.296638131141663,0.432593464851379,0.462690770626068,0.508043050765991,0.499496638774872,0.488325774669647,0.220216602087021 ,0.158084243535995,0.153392732143402,0.158346980810165,0.175082996487617,0.175009846687317,0.302030146121979,0.291526287794113 ,0.298471540212631,0.170197010040283,0.49937179684639,0.499444335699081,0.867103099822998,0.914438545703888,0.920026957988739 ,0.932686567306519,0.89571750164032,0.868821501731873,0.731371462345123,0.947578132152557,0.963693678379059,0.872940897941589 ,0.896303176879883,0.976179599761963,0.794882595539093,0.71112322807312,0.721732616424561,0.839061200618744,0.856555044651031 ,0.804526925086975,0.789306282997131,0.887579202651978,0.893890917301178,0.91931164264679,0.957172393798828,0.948259770870209 ,0.927057504653931,0.945972621440887,0.867647588253021,0.834470868110657,0.810692071914673,0.699405074119568,0.720930814743042 ,0.747544467449188,0.738045692443848,0.800284683704376,0.818203568458557,0.705126464366913,0.742816030979156,0.726684033870697 ,0.818915724754334,0.740670919418335,0.698642075061798,0.72279292345047,0.924771547317505,0.910344541072845,0.930291533470154 ,0.909846127033234,0.72337418794632,0.754449546337128,0.923452615737915,0.768020153045654,0.937496244907379,0.732703745365143 ,0.846335530281067,0.747398257255554,0.779557764530182,0.856311082839966,0.863609313964844,0.778908848762512,0.800135552883148 ,0.949707448482513,0.932618141174316,0.901033520698547,0.881569683551788,0.858479797840118,0.861806094646454,0.876955330371857 ,0.913475751876831,0.902207493782043,0.884879410266876,0.815134942531586,0.827250480651855,0.804454684257507,0.272561937570572 ,0.231209844350815,0.0461372584104538,0.0474661439657211,0.0256336480379105,0.26273712515831,0.0582256130874157,0.0627454370260239 ,0.384406566619873,0.526714742183685,0.137601256370544,0.191710874438286,0.120221570134163,0.388462126255035,0.518283665180206 ,0.444480806589127,0.142405226826668,0.254854619503021,0.221037641167641,0.00602481933310628,0.0129641862586141,0.0140214012935758 ,0.0106260320171714,0.0104052014648914,0.0760594680905342,0.090136930346489,0.111144416034222,0.102193497121334,0.087060958147049 ,0.110249400138855,0.518938064575195,0.411055415868759,0.424786895513535,0.51365065574646,0.51007604598999,0.106127068400383 ,0.098522275686264,0.143285870552063,0.848161458969116,0.87744414806366,0.883877217769623,0.882674098014832,0.814743518829346 ,0.609453201293945,0.90973961353302,0.894276797771454,0.656733632087708,0.683802425861359,0.787524402141571,0.609966337680817 ,0.700185656547546,0.681110978126526,0.590685248374939,0.812042593955994,0.85488498210907,0.84349662065506,0.0114013524726033 ,0.02998979203403,0.82684862613678,0.862479329109192,0.899892747402191,0.952809393405914,0.681385636329651,0.100912190973759 ,0.747959554195404,0.205182448029518,0.230525285005569,0.165347367525101,0.145352244377136,0.118710324168205,0.149910762906075 ,0.161987856030464,0.183680325746536,0.922620356082916,0.936474502086639,0.950519919395447,0.921152293682098,0.698137700557709 ,0.196451008319855,0.212425723671913,0.307027161121368,0.281326144933701,0.241061449050903,0.280320852994919,0.312100201845169 ,0.350002586841583,0.358223885297775,0.923398077487946,0.948159337043762,0.952609419822693,0.910579383373261,0.842493653297424 ,0.76557469367981,0.74022364616394,0.854901850223541,0.889715433120728,0.871529042720795,0.814254105091095,0.769732594490051 ,0.691287755966187,0.756349682807922,0.84500390291214,0.882726013660431,0.943487286567688,0.909797847270966,0.477754294872284 ,0.46895295381546,0.463263988494873,0.461836606264114,0.495633959770203,0.562544822692871,0.954037547111511,0.972498118877411 ,0.973097383975983,0.965942442417145,0.938558042049408,0.893055737018585,0.87899911403656,0.889513552188873,0.91115391254425 ,0.924653291702271,0.933769881725311,0.955277562141418,0.962941586971283,0.918522894382477,0.901508152484894,0.903438150882721 ,0.918805599212646,0.00601938785985112,0.00834209378808737,0.00902128033339977,0.0135680222883821,0.0111072529107332 ,0.0150740267708898,0.0156109463423491,0.010163702070713,0.00943706650286913,0.0140196084976196,0.0099268015474081 ,0.0936370566487312,0.168840080499649,0.122784204781055,0.0621220096945763,0.0685685127973557,0.0819874033331871,0.144232213497162 ,0.064440906047821,0.076024703681469,0.113322794437408,0.105542831122875,0.0744545161724091,0.130451485514641,0.00976161099970341 ,0.0145163740962744,0.0138357421383262,0.121410675346851,0.200015738606453,0.301278203725815,0.255931317806244,0.191387891769409 ,0.277878195047379,0.186294168233871,0.266687244176865,0.167191758751869,0.234919160604477,0.144132137298584,0.158535718917847 ,0.192940473556519,0.177407220005989,0.243259996175766,0.200750648975372,0.156268417835236,0.185902982950211,0.292245775461197 ,0.194213286042213,0.327614605426788,0.329183489084244,0.234623968601227,0.294932305812836,0.130018100142479,0.123868778347969 ,0.144459187984467,0.146622702479362,0.141849026083946,0.12442585080862,0.123008102178574,0.144393637776375,0.154975846409798 ,0.15810427069664,0.151754051446915,0.0537906028330326,0.0468266531825066,0.065875843167305,0.0777100026607513,0.0168748777359724 ,0.0163245107978582,0.00927029177546501,0.0200852919369936,0.0175574477761984,0.0358083657920361,0.0347359552979469 ,0.016555942595005,0.0400237366557121,0.0218191370368004,0.020828140899539,0.0365235395729542,0.0203306749463081,0.0189031958580017 ,0.0160851050168276,0.0162520669400692,0.00517894886434078,0.00588505202904344,0.00754177523776889,0.0102942585945129 ,0.0103370044380426,0.0127858771011233,0.012725648470223,0.00225719925947487,0.00247967103496194,0.00295583484694362 ,0.00343910092487931,0.00394250405952334,0.00460764346644282,0.00465325219556689,0.120615385472775,0.14638939499855 ,0.0259825028479099,0.0130146369338036,0.190072625875473,0.251881569623947,0.303522676229477,0.279425084590912,0.26716735959053 ,0.233579471707344,0.179389476776123,0.139929533004761,0.197481900453568,0.24097965657711,0.284078896045685,0.323536843061447 ,0.327070295810699,0.294761389493942,0.114823281764984,0.226902142167091,0.0431271307170391,0.145354419946671,0.0154700810089707 ,0.0150748556479812,0.00514666130766273,0.0122474236413836,0.00207593385130167,0.00224691699258983,0.00269671017304063 ,0.00313036795705557,0.00352810276672244,0.00421923352405429,0.00424055708572268,0.00718909921124578,0.131111428141594 ,0.1904236972332,0.117000259459019,0.112939313054085,0.0377954840660095,0.0207168702036142,0.00744775822386146,0.00290136318653822 ,0.00263731856830418,0.0318821966648102,0.033955492079258,0.0340485014021397,0.0420655496418476,0.0518187135457993 ,0.0640029832720757,0.0653755888342857,0.0614099651575089,0.0705062747001648,0.0752784609794617,0.0743302553892136 ,0.0811913460493088,0.0129808885976672,0.00815192423760891,0.0342321582138538,0.0194837842136621,0.00951037462800741 ,0.00378233869560063,0.00344818504527211,0.0190328881144524,0.0203976389020681,0.0197686478495598,0.0239295717328787 ,0.0362217575311661,0.0423260144889355,0.0255603417754173,0.0229577608406544,0.00873913522809744,0.0217538680881262 ,0.00433075288310647,0.0036963103339076,0.00499796494841576,0.00928898807615042,0.0450254566967487,0.0831537395715714 ,0.135650485754013,0.130224153399467,0.16381923854351,0.155462980270386,0.0740097686648369,0.0420636013150215,0.0245508179068565 ,0.0395204722881317,0.0222378242760897,0.0114340204745531,0.0219455249607563,0.0109243430197239,0.00495197344571352 ,0.00366251519881189,0.0061621661297977,0.0185748841613531,0.0373528525233269,0.0796886682510376,0.134703129529953 ,0.156516999006271,0.154058814048767,0.166036114096642,0.183200716972351,0.187224566936493,0.170882597565651,0.175537288188934 ,0.13520647585392,0.0566487982869148,0.0172476153820753,0.00909297820180655,0.00375358271412551,0.00212639267556369 ,0.176418080925941,0.0626516193151474,0.118131652474403,0.0054199667647481,0.00607475265860558,0.0113804060965776 ,0.02058863081038,0.0292676221579313,0.00431942893192172,0.00483407266438007,0.0111857131123543,0.0219631418585777 ,0.0346396937966347,0.207832738757133,0.191206589341164,0.181002408266068,0.174648985266685,0.168996915221214,0.130842283368111 ,0.0597061589360237,0.0324756540358067,0.0199867393821478,0.0100693386048079,0.135849490761757,0.14685232937336,0.0373170301318169 ,0.021842535585165,0.0178676676005125,0.0135938273742795,0.195307448506355,0.213279038667679,0.204697161912918,0.00610648980364203 ,0.00557427806779742,0.00583919091150165,0.00909410696476698,0.0073732896707952,0.00370940519496799,0.012044102884829 ,0.0105202021077275,0.00344539806246758,0.00359235098585486,0.00363875622861087,0.0143134286627173,0.0115217352285981 ,0.00785835832357407,0.0104260966181755,0.00781506765633821,0.00501787103712559,0.00545677542686462,0.00821452960371971 ,0.010861468501389,0.00835950020700693,0.00238670338876545,0.0143737019971013,0.0138825587928295,0.0107513386756182 ,0.00915904622524977,0.00299868453294039,0.00963104423135519,0.00679265987128019,0.012193463742733,0.00867342483252287 ,0.00494985934346914,0.00614452222362161,0.00640818430110812,0.00739147840067744,0.00805440545082092,0.00842596776783466 ,0.00990130472928286,0.0104558849707246,0.00973545853048563,0.0086657702922821,0.00753398612141609,0.00441383477300406 ,0.00373748014681041,0.0138004226610065,0.014424704015255,0.0142838153988123,0.0120262494310737,0.0115351295098662 ,0.0107753975316882,0.0108194667845964,0.00225539784878492,0.00285463081672788,0.00352868554182351,0.0021801870316267 ,0.00267730024643242,0.00316165899857879,0.00324151059612632,0.00410548970103264,0.00519956555217505,0.00550984358415008 ,0.0070008379407227,0.00705693243071437,0.00594623200595379,0.00503702042624354,0.0078852828592062,0.00768171390518546 ,0.00841241609305143,0.00822311267256737,0.00904565863311291,0.0104596195742488,0.00985451228916645,0.00801316741853952 ,0.0107286684215069,0.0114901326596737,0.0124793574213982,0.0123585993424058,0.0101920366287231,0.00971191469579935 ,0.0085464296862483,0.00770653877407312,0.00526364566758275,0.00548436446115375,0.00534455617889762,0.00661897333338857 ,0.00642301049083471,0.00342081906273961,0.0031899162568152,0.0712230056524277,0.0108023602515459,0.052430871874094 ,0.073781818151474,0.00652772095054388,0.0106889866292477,0.00708547234535217,0.00926093105226755,0.0585980378091335 ,0.0733336359262466,0.136360675096512,0.11399856954813,0.0794778615236282,0.0758616849780083,0.0815607607364655,0.0789245441555977 ,0.0123216593638062,0.00933465082198381,0.0135329077020288,0.0171680320054293,0.0172486528754234,0.0143897123634815 ,0.0164850633591414,0.0151780126616359,0.0148288169875741,0.0180841628462076,0.0762000754475594,0.0706229358911514 ,0.0600572787225246,0.0717723518610001,0.015342109836638,0.0887890160083771,0.0764502882957459,0.0141895366832614 ,0.0898933708667755,0.0702709257602692,0.00957185961306095,0.0102252848446369,0.921268224716187,0.864661574363709 ,0.822214543819427,0.812577962875366,0.796024262905121,0.785190284252167,0.79579108953476,0.798974096775055,0.819302141666412 ,0.832208096981049,0.901484370231628,0.898276150226593,0.966843247413635,0.980400025844574,0.947536468505859,0.940471768379211 ,0.919764041900635,0.792019844055176,0.817002594470978,0.88964307308197,0.902016878128052,0.894849300384521,0.844491899013519 ,0.768581807613373,0.694739043712616,0.614177823066711,0.525126099586487,0.490100830793381,0.426283806562424,0.293765276670456 ,0.153728500008583,0.0190700236707926,0.0979115888476372,0.128510400652885,0.153869733214378,0.128945022821426,0.0753603354096413 ,0.0418420247733593,0.0342198349535465,0.0391802079975605,0.0238109808415174,0.793688833713531,0.822716176509857,0.879287540912628 ,0.890917479991913,0.884676992893219,0.851999402046204,0.756732761859894,0.676083326339722,0.605361580848694,0.528316974639893 ,0.48301774263382,0.40739181637764,0.237763002514839,0.117609687149525,0.159359708428383,0.268328428268433,0.395739287137985 ,0.461845338344574,0.520696938037872,0.648815512657166,0.73719322681427,0.797538042068481,0.895237147808075,0.92297637462616 ,0.949268698692322,0.926944434642792 Transform: 0.140922901343132,0.237354541727967,-0.961147012620551,0,-0.955665486123911,-0.220918692514086,-0.194674927277414 ,0,-0.258542303121038,0.945969218151926,0.195699051049485,0,18.3849263661072,0.242577124515336,10.4387144787704,1 TransformLink: 0.140922914308808,-0.955665574050354,-0.258542326908342,0,0.23735453962216,-0.220918690554097,0.945969209759294,0 ,-0.961146987859919,-0.194674922262287,0.195699046007975,0,7.38470479382302,19.6555869599185,2.48096468690343,1 } Deformer: "SubDeformer::Cluster_R_Knee", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734 ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757 ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780 ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803 ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826 ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849 ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872 ,3873,3874,3875,3876,3877,3878,3879,3880,3881,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795 ,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818 ,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841 ,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864 ,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887 ,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910 ,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933 ,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956 ,4957,4958,4959,4960,4961,4962,4963,6698,6699,6701,6716,6722,6723,6724,6725,6726,6728,6729,6730,6732,6733,6735,6741 ,6746,6747,6749,6750,6753,6763,6764,6765,6766,6767,6768,6769,6770,6771,6791,6793,6797,6798,6799,6800,6801,6802,6803 ,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6820,6822,6826,6838,6839,6840,6846,6848,6849,6850,6853,6872 ,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6906,6907,6908,7175,7176,7177,7178,7179,7180,7181,7182,7183 ,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206 ,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229 ,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252 ,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275 ,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298 ,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321 ,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344 ,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367 ,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390 ,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413 ,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436 ,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459 ,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482 ,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505 ,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528 ,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551 ,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574 ,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597 ,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620 ,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643 ,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666 ,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689 ,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712 ,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735 ,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758 ,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781 ,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804 ,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827 ,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850 ,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873 ,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896 ,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919 ,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942 ,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965 ,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988 ,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011 ,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034 ,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057 ,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080 ,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103 ,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126 ,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149 ,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172 ,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195 ,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218 ,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241 ,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264 ,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287 ,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310 ,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333 ,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356 ,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8371,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384 ,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8398,8399,8401,8402,8403,8404,8405,8407,8408,8409,8410,8411 ,8412,8413,8415,8416,8417,8418,8419,8420,8421,8422,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436 ,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459 ,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482 ,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505 ,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528 ,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876 ,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899 ,9900 Weights: 0.220141038298607,0.196640759706497,0.153409913182259,0.173608124256134,0.170320183038712,0.126419186592102,0.152392864227295 ,0.0990139618515968,0.14085453748703,0.079532116651535,0.147607132792473,0.121031373739243,0.105083473026752,0.136538848280907 ,0.0943783670663834,0.0724063515663147,0.0722803249955177,0.0489093288779259,0.106058277189732,0.128956601023674,0.152325019240379 ,0.0713165998458862,0.0447216145694256,0.031447634100914,0.169862657785416,0.232006281614304,0.165772020816803,0.103722266852856 ,0.127653449773788,0.0925964862108231,0.0742828398942947,0.102622017264366,0.0663422048091888,0.0716065540909767,0.130576521158218 ,0.0677648112177849,0.0536255724728107,0.0473034679889679,0.0628226026892662,0.0479825399816036,0.067742720246315 ,0.0573438853025436,0.0696251764893532,0.0868862792849541,0.0757204443216324,0.0417658872902393,0.0329458601772785 ,0.0323476977646351,0.138429492712021,0.0827741399407387,0.0930347740650177,0.163813948631287,0.159034430980682,0.0869526043534279 ,0.162047952413559,0.142031565308571,0.151230424642563,0.0715784579515457,0.0521086603403091,0.0846825391054153,0.104763366281986 ,0.0371469594538212,0.0241532288491726,0.0175831317901611,0.0114828906953335,0.0103546818718314,0.00621779635548592 ,0.074313260614872,0.0827364549040794,0.0413508154451847,0.0380601659417152,0.0194987952709198,0.0177487712353468 ,0.0106342006474733,0.0105341300368309,0.125118091702461,0.132997080683708,0.105603471398354,0.104569979012012,0.0389265194535255 ,0.0191667303442955,0.0287600625306368,0.0502987541258335,0.00945161189883947,0.0159818902611732,0.00747003080323339 ,0.0126327406615019,0.0298153646290302,0.0158855058252811,0.0162288565188646,0.0306226052343845,0.0130019411444664 ,0.0123899765312672,0.0611419267952442,0.0459677539765835,0.120401263237,0.0655012801289558,0.0809809416532516,0.0507620275020599 ,0.120858289301395,0.173239305615425,0.194508209824562,0.221619069576263,0.203462481498718,0.122273154556751,0.09067752212286 ,0.177778586745262,0.051736406981945,0.142719075083733,0.0299448184669018,0.119198977947235,0.0204716790467501,0.0987163037061691 ,0.224970236420631,0.2149518430233,0.0608539916574955,0.108437448740005,0.0730664432048798,0.0295846927911043,0.0679258480668068 ,0.0184821859002113,0.0888713151216507,0.0201829187572002,0.151507362723351,0.159909516572952,0.0684026852250099,0.0399749800562859 ,0.0165998600423336,0.00700818002223969,0.00339218555018306,0.119954824447632,0.159810870885849,0.026742946356535 ,0.0114951739087701,0.00492738699540496,0.00390063645318151,0.0691457614302635,0.10404796153307,0.197378575801849 ,0.223885104060173,0.169401437044144,0.152185380458832,0.139821991324425,0.195010915398598,0.227022230625153,0.205337241292 ,0.236822202801704,0.129063829779625,0.10129588842392,0.098905049264431,0.127973169088364,0.164971455931664,0.171554416418076 ,0.141118869185448,0.153867691755295,0.0792033225297928,0.047408863902092,0.0212051570415497,0.00996504724025726,0.00513662165030837 ,0.169499516487122,0.131101578474045,0.0164731852710247,0.0349107123911381,0.00778661575168371,0.00612845923751593 ,0.0805720686912537,0.117815710604191,0.203761518001556,0.150883167982101,0.0263166353106499,0.0260032135993242,0.0250821709632874 ,0.0255798380821943,0.0258219204843044,0.0247958730906248,0.0258203968405724,0.0247954521328211,0.0260004531592131 ,0.0250848215073347,0.0263162683695555,0.0255927629768848,0.0266841575503349,0.0261857993900776,0.0270041264593601 ,0.0267010051757097,0.0271879117935896,0.0269935075193644,0.02718535810709,0.0269825775176287,0.0269987527281046,0.0266757011413574 ,0.0266804657876492,0.0261615887284279,0.0143657755106688,0.0146409207955003,0.014243665151298,0.0143082411959767 ,0.0145482616499066,0.0149050131440163,0.0152825172990561,0.015573070384562,0.015692763030529,0.0156103633344173,0.0153549471870065 ,0.0150005919858813,0.0141262682154775,0.014289983548224,0.0140563026070595,0.0140992347151041,0.0142459003254771 ,0.0144590968266129,0.0146814035251737,0.0148508176207542,0.014919743873179,0.0148700829595327,0.0147177278995514 ,0.014505572617054,0.0264943614602089,0.0144799686968327,0.0128087373450398,0.0125354304909706,0.0135557120665908 ,0.0139769492670894,0.0119528453797102,0.0118387266993523,0.0114311072975397,0.0112328929826617,0.0119501119479537 ,0.0109694907441735,0.0105171836912632,0.0115400878712535,0.0127152362838387,0.0141406208276749,0.0138709126040339 ,0.0123479459434748,0.014054648578167,0.0105507085099816,0.0112162828445435,0.0103214271366596,0.00832196790724993 ,0.00780804269015789,0.009716154076159,0.0109609924256802,0.00889249425381422,0.0117862774059176,0.00957919284701347 ,0.0132214203476906,0.0106281461194158,0.0078987218439579,0.00974421761929989,0.00606143195182085,0.00582409603521228 ,0.006409399677068,0.00684636645019054,0.00745494896546006,0.00601428793743253,0.0275966115295887,0.0181790292263031 ,0.0181697066873312,0.0285454522818327,0.0276724547147751,0.0187410712242126,0.0268586464226246,0.0184552185237408 ,0.0250636301934719,0.0172649938613176,0.019733514636755,0.0134406527504325,0.0139356125146151,0.0093548521399498 ,0.0149864898994565,0.0151962209492922,0.0146243590861559,0.0157075729221106,0.0155551945790648,0.014719114638865 ,0.0116011705249548,0.00815725512802601,0.00698467111214995,0.0114818196743727,0.00595068512484431,0.0059604668058455 ,0.00769807770848274,0.00820890627801418,0.00769744720309973,0.00735840713605285,0.00857078935950994,0.00550975417718291 ,0.00538937421515584,0.00574404746294022,0.00558742601424456,0.00542253814637661,0.0060554682277143,0.00633684219792485 ,0.00555249443277717,0.00549389235675335,0.0122513007372618,0.0115393688902259,0.0162530466914177,0.0160768274217844 ,0.0157166384160519,0.0177253689616919,0.0168536193668842,0.0166768617928028,0.0156811382621527,0.0122465901076794 ,0.00686993170529604,0.0105261523276567,0.0118814883753657,0.0123907420784235,0.0103754969313741,0.00876099895685911 ,0.00992501713335514,0.00972733367234468,0.00843804981559515,0.00654476601630449,0.00710128992795944,0.00654926057904959 ,0.0154141951352358,0.0141462627798319,0.0124341379851103,0.0086600873619318,0.00688489247113466,0.00934554636478424 ,0.00654751248657703,0.0263030026108027,0.0273692011833191,0.0282624904066324,0.027193795889616,0.0285530146211386 ,0.0259348955005407,0.0271139964461327,0.0285574868321419,0.0263970233500004,0.0274529494345188,0.0258188918232918 ,0.0267107132822275,0.0244190320372581,0.0250732563436031,0.019841056317091,0.0200264994055033,0.0146815227344632 ,0.0144339753314853,0.0155869135633111,0.0274546537548304,0.0249893926084042,0.0289218779653311,0.0288524646311998 ,0.0128778191283345,0.0118977092206478,0.0276516489684582,0.00106737855821848,0.00147805246524513,0.00186067610047758 ,0.00154843716882169,0.0036833977792412,0.00418908474966884,0.00448016077280045,0.00374782993458211,0.00193444255273789 ,0.00644434196874499,0.00766608444973826,0.00174500048160553,0.00267062359489501,0.00478887232020497,0.00191833276767284 ,0.00174229417461902,0.00180287600960582,0.00234546139836311,0.00128583842888474,0.00214079977013171,0.00140055792871863 ,0.00909567438066006,0.00757129164412618,0.00278374785557389,0.00112155079841614,0.00206252257339656,0.00200117845088243 ,0.00242027174681425,0.00110937282443047,0.00150165776722133,0.00248800916597247,0.00127343449275941,0.00167676596902311 ,0.00287574343383312,0.00260993512347341,0.00256595364771783,0.00664327759295702,0.00750663643702865,0.00799639988690615 ,0.00774700241163373,0.00502653978765011,0.00414060847833753,0.0036840895190835,0.0028526852838695,0.00134008366148919 ,0.00286239455454051,0.00227882293984294,0.00194987049326301,0.00147433683741838,0.00247713620774448,0.00126496504526585 ,0.00147068768274039,0.00135243590921164,0.00185178325045854,0.00391016947105527,0.004016381688416,0.00242762104608119 ,0.00200948468409479,0.00443852646276355,0.00136092700995505,0.00104104517959058,0.00326772313565016,0.00148255017120391 ,0.0063310656696558,0.00368746998719871,0.00776247633621097,0.00483347987756133,0.00770892156288028,0.00199186499230564 ,0.00678484840318561,0.00392672047019005,0.00797629542648792,0.00253050401806831,0.00546338874846697,0.00483818212524056 ,0.00294264638796449,0.0548139214515686,0.0542830303311348,0.0551107376813889,0.0511926561594009,0.0479608401656151 ,0.0406333766877651,0.049762561917305,0.0452366508543491,0.0694228634238243,0.0721440538764,0.0708158910274506,0.0708349570631981 ,0.0531061626970768,0.151600793004036,0.16706295311451,0.187487840652466,0.20305697619915,0.185971736907959,0.0536451786756516 ,0.0685874670743942,0.150415137410164,0.162891030311584,0.158822327852249,0.181840136647224,0.202600136399269,0.195908606052399 ,0.179913505911827,0.0658068060874939,0.0661866217851639,0.0506342947483063,0.0491116270422935,0.0422941707074642 ,0.0326761230826378,0.0382144711911678,0.0465906858444214,0.062720313668251,0.140485212206841,0.1581671833992,0.149998217821121 ,0.150477170944214,0.154587730765343,0.172840252518654,0.185358956456184,0.190242305397987,0.188034802675247,0.18121549487114 ,0.17025201022625,0.0618722401559353,0.0479507856070995,0.0469446107745171,0.0404198542237282,0.0365250930190086,0.0973862633109093 ,0.107481263577938,0.1095936819911,0.139569535851479,0.152655407786369,0.150148823857307,0.139526158571243,0.12822799384594 ,0.0253077670931816,0.022599495947361,0.0183013062924147,0.0162242501974106,0.0368710495531559,0.0366680882871151 ,0.0385774858295918,0.0384872518479824,0.0473769642412663,0.0496687814593315,0.0385955348610878,0.0451695919036865 ,0.0358225330710411,0.0359686277806759,0.0315400585532188,0.0277408231049776,0.0275891739875078,0.0291530825197697 ,0.0292667131870985,0.0293035674840212,0.0269972402602434,0.0237951017916203,0.0364551581442356,0.0372793786227703 ,0.0534247048199177,0.0492258481681347,0.0466186590492725,0.0372154116630554,0.0286095775663853,0.028106402605772 ,0.028421763330698,0.028885792940855,0.0359596349298954,0.037527784705162,0.0339093990623951,0.0175160877406597,0.0160310510545969 ,0.0322983153164387,0.0407855957746506,0.0247920826077461,0.0249441564083099,0.0332219377160072,0.0338853560388088 ,0.0262994114309549,0.0262606032192707,0.0346851497888565,0.0247869081795216,0.0316552892327309,0.0168954823166132 ,0.0228659026324749,0.0132605377584696,0.0257446225732565,0.0263346303254366,0.0339123904705048,0.0255348067730665 ,0.0316641889512539,0.0281443577259779,0.0253598038107157,0.0834964960813522,0.019385414198041,0.0144114922732115 ,0.0338635481894016,0.0556614510715008,0.0164240393787622,0.0165059790015221,0.0164197888225317,0.0167112294584513 ,0.0193981938064098,0.0205408912152052,0.266567349433899,0.225157037377357,0.0447328165173531,0.0239948108792305,0.258423954248428 ,0.141974464058876,0.198101460933685,0.15009517967701,0.264132052659988,0.228737831115723,0.00562358135357499,0.00970039144158363 ,0.0523732267320156,0.0809437707066536,0.106471337378025,0.108843788504601,0.0993791148066521,0.143784582614899,0.0121610853821039 ,0.0205767769366503,0.214575499296188,0.239684775471687,0.178178697824478,0.195422396063805,0.209848985075951,0.207440286874771 ,0.308593571186066,0.263911694288254,0.198621273040771,0.28539165854454,0.192363008856773,0.273256719112396,0.172058612108231 ,0.240541025996208,0.148058325052261,0.161714926362038,0.197376787662506,0.176624745130539,0.242707774043083,0.201266199350357 ,0.156212627887726,0.18373216688633,0.290508925914764,0.190370336174965,0.324851483106613,0.325155407190323,0.229891330003738 ,0.290514171123505,0.135948672890663,0.12972891330719,0.163868829607964,0.158908322453499,0.127753525972366,0.125486969947815 ,0.143728271126747,0.15307492017746,0.154907420277596,0.147174850106239,0.0302150081843138,0.0179505366832018,0.0173399485647678 ,0.032318964600563,0.0182068049907684,0.0369845628738403,0.0409977771341801,0.0224265139549971,0.02091402746737,0.0367025434970856 ,0.0202252976596355,0.0182462017983198,0.0153633151203394,0.0153902797028422,0.00546120433136821,0.00614713365212083 ,0.00780274532735348,0.0103121725842357,0.0102445967495441,0.0122391441836953,0.0120558049529791,0.00240382552146912 ,0.00261368881911039,0.00308898207731545,0.0035490239970386,0.00399774499237537,0.00459673209115863,0.00458607450127602 ,0.121339060366154,0.147182881832123,0.197571039199829,0.26008602976799,0.311032861471176,0.287158697843552,0.273924022912979 ,0.239386796951294,0.183864384889603,0.142866030335426,0.197976171970367,0.240400284528732,0.28218087553978,0.320579469203949 ,0.322815716266632,0.290193647146225,0.120546653866768,0.222052201628685,0.140751510858536,0.0163820739835501,0.0142385689541698 ,0.00542507180944085,0.0115760723128915,0.00221272790804505,0.0023711749818176,0.00282163615338504,0.00317213404923677 ,0.00357885169796646,0.00420893495902419,0.00418007094413042,0.00739439064636827,0.00683258147910237,0.132019907236099 ,0.191063180565834,0.119362480938435,0.0284428987652063,0.00810533761978149,0.113767258822918,0.038724422454834,0.0212871395051479 ,0.00770025048404932,0.00302603910677135,0.00275358185172081,0.0301092397421598,0.0321386978030205,0.0324373990297318 ,0.040670283138752,0.0509076714515686,0.0635824501514435,0.0657511055469513,0.0618208535015583,0.0720918327569962 ,0.0769494622945786,0.0765324309468269,0.0743149816989899,0.0804609358310699,0.0854995623230934,0.0128151131793857 ,0.00777194974943995,0.0344400107860565,0.0195869654417038,0.00954691600054502,0.00379748572595418,0.00346317188814282 ,0.0179612133651972,0.0192962810397148,0.0188435316085815,0.0230968538671732,0.0361262373626232,0.0432674884796143 ,0.0261948890984058,0.0235383044928312,0.0090101845562458,0.022206012159586,0.00445583695545793,0.00383905950002372 ,0.00506020803004503,0.00951316021382809,0.0460106357932091,0.0847913771867752,0.138023719191551,0.131213068962097 ,0.166694819927216,0.156544402241707,0.0745199620723724,0.0423311516642571,0.0246866699308157,0.0397612191736698,0.0223495364189148 ,0.0114756962284446,0.0221945624798536,0.0110521893948317,0.00496905716136098,0.00389229226857424,0.00643961364403367 ,0.0192630626261234,0.0385988131165504,0.0820584818720818,0.112035349011421,0.138285085558891,0.160750851035118,0.158167973160744 ,0.170805841684341,0.189076989889145,0.19410303235054,0.177998840808868,0.182540401816368,0.141154646873474,0.0894900858402252 ,0.0342159382998943,0.00965154357254505,0.00418656365945935,0.00237840251065791,0.183685347437859,0.062582790851593 ,0.118039816617966,0.00520113110542297,0.00584284262731671,0.0112213315442204,0.0201321765780449,0.0286685489118099 ,0.00420221220701933,0.00471079163253307,0.0110045308247209,0.0217082388699055,0.0343283303081989,0.204040139913559 ,0.189030945301056,0.180175974965096,0.173992961645126,0.168315663933754,0.130297273397446,0.059353269636631,0.0322089642286301 ,0.0197652205824852,0.0099091986194253,0.131604447960854,0.14289553463459,0.0357057303190231,0.0209082346409559,0.0171405524015427 ,0.0130592565983534,0.191065490245819,0.208427935838699,0.205090165138245,0.00994481611996889,0.00936297792941332 ,0.00965779647231102,0.00963758956640959,0.0111713800579309,0.00611869245767593,0.0038256177213043,0.00960911344736815 ,0.0110513623803854,0.0102578569203615,0.00362409418448806,0.00338122970424592,0.00906169321388006,0.00970547460019588 ,0.00144677876960486,0.00160244794096798,0.00264640781097114,0.00462430063635111,0.0017758650938049,0.00194164353888482 ,0.00297714397311211,0.00503711635246873,0.00147938809823245,0.0017682610778138,0.00228582904674113,0.0105864265933633 ,0.00957369245588779,0.0102702956646681,0.0098283477127552,0.0924438461661339,0.0143077401444316,0.0122878095135093 ,0.133630022406578,0.141978055238724,0.146272510290146,0.160872846841812,0.158548668026924,0.1529251486063,0.143999874591827 ,0.14327535033226,0.134030342102051,0.0194255840033293,0.0241993553936481,0.0397681333124638,0.0347787775099278,0.0424629487097263 ,0.0764479711651802,0.130649253726006,0.155860245227814,0.130433484911919,0.0997007936239243,0.522098422050476,0.539064466953278 ,0.600684404373169,0.564567744731903,0.578698098659515,0.67663186788559,0.613317966461182,0.627128183841705,0.56117171049118 ,0.526740491390228,0.587794005870819,0.603702127933502,0.513156652450562,0.501628339290619,0.51724100112915,0.507181763648987 ,0.50683331489563,0.510595977306366,0.51329904794693,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949 ,0.4991694688797,0.512927711009979,0.533550322055817,0.462437272071838,0.407903462648392,0.382052510976791,0.450885593891144 ,0.338004499673843,0.430793106555939,0.309323966503143,0.417452901601791,0.298160076141357,0.412941426038742,0.445640444755554 ,0.462612688541412,0.43747690320015,0.435000836849213,0.482632666826248,0.488787829875946,0.472163766622543,0.469649881124496 ,0.493643283843994,0.488330274820328,0.494619727134705,0.495285451412201,0.459936022758484,0.433365523815155,0.500856637954712 ,0.498682528734207,0.484847009181976,0.503007411956787,0.543912529945374,0.606569468975067,0.650449335575104,0.565938055515289 ,0.725132644176483,0.606685757637024,0.74704772233963,0.630785703659058,0.585659027099609,0.549062013626099,0.602989912033081 ,0.519738018512726,0.509474873542786,0.530255079269409,0.536091029644012,0.514073669910431,0.518159925937653,0.515052437782288 ,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.531567454338074,0.564122378826141,0.467445582151413 ,0.455564588308334,0.383804261684418,0.410712748765945,0.434326201677322,0.338629901409149,0.419354826211929,0.309535533189774 ,0.44914898276329,0.467186599969864,0.439384043216705,0.477136939764023,0.492851316928864,0.487034231424332,0.474351823329926 ,0.491978049278259,0.495757520198822,0.495674669742584,0.46476948261261,0.43713316321373,0.508034825325012,0.499508380889893 ,0.489449739456177,0.571016192436218,0.608602643013,0.687842011451721,0.536954998970032,0.514068126678467,0.374398648738861 ,0.40116485953331,0.328352868556976,0.298213601112366,0.291857182979584,0.429039031267166,0.458238869905472,0.498540431261063 ,0.501182377338409,0.484154582023621,0.617342472076416,0.740442156791687,0.765326619148254,0.570390999317169,0.534031748771667 ,0.402218997478485,0.374190449714661,0.327226936817169,0.297424823045731,0.431489735841751,0.462401211261749,0.508988261222839 ,0.499542444944382,0.488626062870026,0.160449832677841,0.156783670186996,0.159524708986282,0.176437810063362,0.177402451634407 ,0.303022652864456,0.294236481189728,0.3028225004673,0.17349174618721,0.499316424131393,0.499484270811081,0.861416578292847 ,0.912409961223602,0.891903102397919,0.862789690494537,0.725841045379639,0.949873089790344,0.959999978542328,0.790222585201263 ,0.706912875175476,0.71718156337738,0.859648823738098,0.808649182319641,0.79305899143219,0.889781832695007,0.894380807876587 ,0.959999978542328,0.956703424453735,0.946452438831329,0.980000019073486,0.943891108036041,0.864047408103943,0.82993084192276 ,0.696012794971466,0.716923475265503,0.743593811988831,0.734707891941071,0.795767307281494,0.814093708992004,0.702549576759338 ,0.740187525749207,0.723242402076721,0.81572687625885,0.738231301307678,0.696267068386078,0.719566822052002,0.922518908977509 ,0.90799868106842,0.928278088569641,0.907724499702454,0.723899960517883,0.755184590816498,0.922885239124298,0.768464267253876 ,0.936938226222992,0.733437836170197,0.846593260765076,0.749828815460205,0.782762229442596,0.858797311782837,0.865191996097565 ,0.780552983283997,0.802658915519714,0.843815445899963,0.85517144203186,0.851339101791382,0.962358355522156,0.959563791751862 ,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328 ,0.959999978542328,0.959999978542328,0.959999978542328,0.822296917438507,0.837610244750977,0.815930068492889,0.443763226270676 ,0.0434230305254459,0.0614212267100811,0.0644745230674744,0.386088460683823,0.699999988079071,0.392738252878189,0.699999988079071 ,0.448874175548553,0.014375370927155,0.0140107590705156,0.0121789062395692,0.0883964225649834,0.0934296697378159,0.107252053916454 ,0.0872711762785912,0.116611294448376,0.414927542209625,0.519198000431061,0.410463094711304,0.422229081392288,0.699999988079071 ,0.515911340713501,0.511167705059052,0.959999978542328,0.959999978542328,0.959999978542328,0.866300702095032,0.821096897125244 ,0.863957941532135,0.806740343570709,0.800000011920929,0.894073009490967,0.663112103939056,0.800000011920929,0.800000011920929 ,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.802115261554718 ,0.896774470806122,0.843385517597198,0.875415921211243,0.820724666118622,0.857815444469452,0.897344946861267,0.955449402332306 ,0.690855324268341,0.0965502113103867,0.746420085430145,0.173812687397003,0.150500819087029,0.116230010986328,0.119169160723686 ,0.145668879151344,0.156594097614288,0.959999978542328,0.953056275844574,0.924655854701996,0.948967397212982,0.800000011920929 ,0.330237716436386,0.299210637807846,0.277687549591064,0.242400661110878,0.254517376422882,0.287185370922089,0.320941507816315 ,0.35770645737648,0.365354865789413,0.959999978542328,0.955655336380005,0.915349721908569,0.959999978542328,0.866086006164551 ,0.807674944400787,0.851825594902039,0.686647355556488,0.959999978542328,0.94360226392746,0.910253405570984,0.921708941459656 ,0.495698720216751,0.477832108736038,0.469940274953842,0.46520921587944,0.464335680007935,0.487537801265717,0.49670997262001 ,0.566858947277069,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486 ,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.933254480361938,0.954226672649384 ,0.997203588485718,0.917994320392609,0.899297475814819,0.901017010211945,0.91645485162735,0.510368406772614,0.00567376147955656 ,0.00783961825072765,0.00862109661102295,0.0129706580191851,0.0114124231040478,0.0154891554266214,0.0153114860877395 ,0.00997543521225452,0.00986269768327475,0.0140800727531314,0.00998373050242662,0.0988286286592484,0.176372304558754 ,0.0798520445823669,0.118268929421902,0.0590761005878448,0.0654688104987144,0.0755378156900406,0.0781648904085159 ,0.116748794913292,0.109995000064373,0.0766285732388496,0.133775547146797,0.144544675946236,0.0103117916733027,0.0153879709541798 ,0.0144848562777042,0.117053553462029,0.0758993700146675,0.0116922548040748,0.0524738281965256,0.0722815245389938 ,0.00605043582618237,0.0100520681589842,0.00665575684979558,0.00875646248459816,0.0561532005667686,0.0707956105470657 ,0.132949247956276,0.110543414950371,0.0790862739086151,0.0793771892786026,0.0800021290779114,0.0763092711567879,0.0117054879665375 ,0.00873408745974302,0.012912311591208,0.016739085316658,0.0182612165808678,0.0163208656013012,0.0179697703570127 ,0.01646638661623,0.0159950032830238,0.0181978512555361,0.0780041739344597,0.0707865208387375,0.0570633821189404,0.0691082701086998 ,0.0176486875861883,0.0937477275729179,0.0800698399543762,0.0161298736929893,0.0884751826524735,0.0703100636601448 ,0.925126254558563,0.865002751350403,0.818695485591888,0.807025611400604,0.789011359214783,0.777534663677216,0.788373947143555 ,0.775901257991791,0.819406390190125,0.906084656715393,0.904069304466248,0.980000019073486,0.950653076171875,0.944453954696655 ,0.924925565719604,0.842944860458374,0.785732328891754,0.811322510242462,0.885092079639435,0.980000019073486,0.959999978542328 ,0.690811693668365,0.800000011920929,0.699999988079071,0.491733610630035,0.431082755327225,0.301695793867111,0.160689681768417 ,0.866851687431335,0.282693952322006,0.396244406700134,0.357076913118362,0.283264219760895,0.487969249486923,0.48589962720871 ,0.285435110330582,0.333517074584961,0.360721081495285,0.338640809059143,0.293287128210068,0.585670709609985,0.439837276935577 ,0.488081306219101,0.497676163911819,0.509250342845917,0.79224419593811,0.785737931728363,0.814616680145264,0.805732011795044 ,0.288319826126099,0.302083253860474,0.547470092773438,0.382642656564713,0.583310306072235,0.627152025699615,0.16984860599041 ,0.161324813961983,0.242668092250824,0.194719076156616,0.193076133728027,0.263555347919464,0.924197673797607,0.930089175701141 ,0.545478880405426,0.436976879835129,0.312507897615433,0.279589712619781,0.259755164384842,0.257184624671936,0.379078358411789 ,0.223878711462021,0.178313493728638,0.185774013400078,0.209724441170692,0.231508731842041,0.489078283309937,0.181608468294144 ,0.229795783758163,0.210761219263077,0.130062341690063,0.443184554576874,0.302244246006012,0.156397596001625,0.244913592934608 ,0.231316775083542,0.209852263331413,0.214463278651237,0.368181377649307,0.194402411580086,0.146217733621597,0.0835636109113693 ,0.499021202325821,0.213828831911087,0.0882539972662926,0.509222984313965,0.159289419651031,0.284890353679657,0.941314816474915 ,0.935063123703003,0.943666756153107,0.941324889659882,0.807415008544922,0.83213347196579,0.822709619998932,0.805511653423309 ,0.67889791727066,0.705907464027405,0.811904907226563,0.768746256828308,0.769252598285675,0.844982445240021,0.566581130027771 ,0.557939112186432,0.498869776725769,0.499205946922302,0.44482946395874,0.499987721443176,0.607680559158325,0.343623101711273 ,0.417950123548508,0.500473856925964,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.288713306188583 ,0.27057296037674,0.313093364238739,0.363294124603271,0.0105788102373481,0.0119627024978399,0.00913762487471104,0.00863190740346909 ,0.0167196895927191,0.0136867398396134,0.0129346754401922,0.0155253410339355,0.041066687554121,0.0345800518989563 ,0.0700398311018944,0.0779722929000854,0.187142431735992,0.18392226099968,0.151584163308144,0.0362898372113705,0.422039180994034 ,0.451437085866928,0.404219388961792,0.463168919086456,0.43609756231308,0.385264873504639,0.4261115193367,0.100049085915089 ,0.169540390372276,0.0236841924488544,0.0192988906055689,0.00689365155994892,0.00697705056518316,0.00481623457744718 ,0.00500012142583728,0.00159262900706381,0.00495164794847369,0.00587473949417472,0.00218673190101981,0.00557536724954844 ,0.00198339577764273,0.00427171634510159,0.00395993422716856,0.00724899023771286,0.0075768306851387,0.00362888071686029 ,0.00689652562141418,0.0112851578742266,0.0142028098925948,0.014911531470716,0.0118908761069179,0.00892538111656904 ,0.00914312712848186,0.00959681440144777,0.00911114737391472,0.0123588955029845,0.00980997644364834,0.00817553699016571 ,0.00812354404479265,0.0385648533701897,0.0368411876261234,0.072588324546814,0.0790384635329247,0.0350004583597183 ,0.0725629329681396,0.156130000948906,0.149460017681122,0.179843455553055,0.418746024370193,0.40342652797699,0.422440052032471 ,0.460526168346405,0.458358615636826,0.449574530124664,0.468382894992828,0.471038162708282,0.470545202493668,0.467958033084869 ,0.460692286491394,0.459357529878616,0.482891708612442,0.465929388999939,0.497931659221649,0.497813880443573,0.424238741397858 ,0.43932181596756,0.197344973683357,0.202123180031776,0.169894814491272,0.180889815092087,0.0224198717623949,0.0342224836349487 ,0.045203685760498,0.022312106564641,0.0928444340825081,0.0164433289319277,0.0166783984750509,0.0927439257502556,0.00851503014564514 ,0.00991012435406446,0.00945863127708435,0.0106856729835272,0.0120738754048944,0.0153764318674803,0.0145045462995768 ,0.0097744083032012,0.0110316863283515,0.011228172108531,0.0104443524032831,0.0342458859086037,0.0208848789334297 ,0.0129208713769913,0.0238716434687376,0.0135756591334939,0.00637398241087794,0.00917599815875292,0.0111155761405826 ,0.00927856750786304,0.0083415349945426,0.00750854006037116,0.00603275885805488,0.00858723465353251,0.00469777034595609 ,0.00487428903579712,0.00659612752497196,0.00405896268785,0.0082297483459115,0.0281874220818281,0.0109415305778384 ,0.00886029656976461,0.0284117553383112,0.0092842411249876,0.0342590026557446,0.0560368150472641,0.00952684786170721 ,0.0863779112696648,0.00806688796728849,0.00389114511199296,0.00306898960843682,0.294876396656036,0.308187693357468 ,0.495612591505051,0.496858716011047,0.288310408592224,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059 ,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188 ,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.180721387267113,0.496883779764175,0.497934907674789 ,0.499061793088913,0.498675882816315,0.0102646071463823,0.49796661734581,0.498460471630096,0.129563570022583,0.00909560639411211 ,0.0105628436431289,0.0071029276587069,0.0100718205794692,0.00461686495691538,0.0050774859264493,0.00555201712995768 ,0.00648870132863522,0.00157895777374506,0.00208959938026965,0.00195883493870497,0.00278144469484687,0.00261728558689356 ,0.00434207217767835,0.00259597669355571,0.00188296823762357,0.162212789058685,0.463326036930084,0.437229096889496 ,0.0932958349585533,0.0973698645830154,0.032982986420393,0.446509718894959,0.493854820728302,0.255417793989182,0.475229948759079 ,0.495688110589981,0.481146574020386,0.497067838907242,0.0132362544536591,0.0880826860666275,0.440971612930298,0.171690061688423 ,0.0110826743766665,0.0114450976252556,0.00285618449561298,0.176528409123421,0.00424475502222776,0.0860917866230011 ,0.0687148496508598,0.00279257842339575,0.00317180179990828,0.498153626918793,0.498638093471527,0.00624458026140928 ,0.497437328100204,0.481990486383438,0.398478388786316,0.397769749164581,0.420945376157761,0.016629746183753,0.156746998429298 ,0.150193274021149,0.0260692816227674,0.142986565828323,0.275827318429947,0.265518844127655,0.164150521159172,0.179356217384338 ,0.201655998826027,0.155882328748703,0.157176062464714,0.257369130849838,0.292699962854385,0.308371394872665,0.332619607448578 ,0.30545511841774,0.346422910690308,0.373265951871872,0.395905733108521,0.33428418636322,0.419889718294144,0.396339476108551 ,0.311042726039886,0.251168638467789,0.284843504428864,0.315118014812469,0.288207590579987,0.236284300684929,0.357216745615005 ,0.329778403043747,0.292900681495667,0.215388238430023,0.235113203525543,0.177311405539513,0.153885200619698,0.220909103751183 ,0.203227922320366,0.290471643209457,0.265276551246643,0.222590640187263,0.382111400365829,0.378728419542313,0.353820085525513 ,0.298215985298157,0.32230332493782,0.00384127185679972,0.00470884656533599,0.0104514425620437,0.00500548165291548 ,0.00195009738672525,0.00237587676383555,0.00140883540734649,0.00102973112370819,0.00200921390205622,0.018424516543746 ,0.00379193644039333,0.00546682765707374,0.00260537373833358,0.00422798423096538,0.00391553714871407,0.00523934373632073 ,0.00917614344507456,0.0130695644766092,0.00181645958218724,0.0016190770547837,0.00161480496171862,0.00720509560778737 ,0.0033471048809588,0.010807802900672,0.011268611997366,0.0110746510326862,0.0109697869047523,0.00400499766692519 ,0.00218103756196797,0.00204763538204134,0.00557699194177985,0.00210049748420715,0.0076933279633522,0.0180913154035807 ,0.012464378029108,0.00113955908454955,0.00530168693512678,0.00870633684098721,0.0107687721028924,0.00494451960548759 ,0.00292759365402162,0.00259687518700957,0.00461619254201651,0.00104889541398734,0.00255234818905592,0.0124525716528296 ,0.0176442191004753,0.00738372420892119,0.00436095427721739,0.00292508560232818,0.00151343178004026,0.0106324488297105 ,0.0103887440636754,0.0103587573394179,0.0104789398610592,0.00571152800694108,0.0108468001708388,0.0124202640727162 ,0.0108270552009344,0.0154264066368341,0.0271961111575365,0.0281857512891293,0.0520243123173714,0.0335392132401466 ,0.0247473139315844,0.0136771816760302,0.014560129493475,0.0181196574121714,0.0251695867627859,0.00895520206540823 ,0.0134405633434653,0.00334702897816896,0.00581781379878521,0.00617641629651189,0.0039284210652113,0.00742758205160499 ,0.00921225268393755,0.0109213050454855,0.00813751667737961,0.00351928896270692,0.00460217660292983,0.00507055455818772 ,0.0222681555896997,0.0214629601687193,0.0244730785489082,0.00889820605516434,0.13249745965004,0.119435474276543,0.105335272848606 ,0.498115301132202,0.48156064748764,0.497372984886169,0.112148396670818,0.0752550736069679,0.0404751114547253,0.0515224635601044 ,0.346944451332092,0.319727420806885,0.139163225889206,0.825967967510223,0.72717809677124,0.57372260093689,0.499346643686295 ,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.584369242191315,0.581871628761292,0.704368472099304 ,0.828925788402557,0.80715149641037,0.756855845451355,0.799853920936584,0.81432843208313,0.834282636642456,0.724787771701813 ,0.729916453361511,0.713068842887878,0.496063411235809,0.479932904243469,0.503707051277161,0.454903155565262,0.344902217388153 ,0.38563796877861,0.383142232894897,0.417621582746506,0.367326766252518,0.309257745742798,0.334212064743042,0.3169926404953 ,0.355116635560989,0.325188308954239,0.263775318861008,0.228697031736374,0.45619061589241,0.495305687189102,0.498378992080688 ,0.90161406993866,0.892532229423523,0.823614180088043,0.58920294046402,0.503884494304657,0.800082147121429,0.787411451339722 ,0.705400943756104,0.573275506496429,0.500288963317871,0.495926558971405,0.46147620677948,0.892712831497192,0.876434028148651 ,0.794651567935944,0.639523088932037,0.304648637771606,0.192797943949699,0.103648610413074,0.563636004924774,0.693290770053864 ,0.77239316701889,0.785526931285858,0.997469186782837,0.997240126132965,0.997250139713287,0.997131943702698,0.996462106704712 ,0.996456742286682,0.99651563167572,0.996563136577606,0.996726870536804,0.997069656848907,0.997214317321777,0.997197806835175 ,0.918697476387024,0.905072033405304,0.856663286685944,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.899999976158142,0.774849414825439,0.775606870651245,0.0752632021903992,0.134086862206459,0.108436532318592,0.151968613266945 ,0.260086327791214,0.394214272499084,0.462630331516266,0.699999988079071,0.800000011920929,0.800000011920929,0.899999976158142 ,0.959999978542328,0.996687591075897,0.980000019073486,0.919819533824921,0.859595537185669,0.83685839176178,0.865764141082764 ,0.820731580257416,0.80120724439621 Transform: -0.140926346148789,-0.237352328489588,-0.961146982434929,0,-0.955665077054438,-0.220918009829913,0.194677605143504 ,0,-0.258541875099369,0.945969867344551,-0.195696175539477,0,18.3954966323429,0.260383799457136,-10.3666111330078 ,1 TransformLink: -0.140926363663087,-0.955665195824307,-0.258541907230903,0,-0.237352355825338,-0.220918035272932,0.945969976291435 ,0,-0.96114709305435,0.194677627549155,-0.195696198062356,0,-7.30962499892272,19.6556066299249,2.48098514166593,1 } Deformer: "SubDeformer::Cluster_Spine3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 124,137,138,139,150,170,171,342,343,1740,1790,1791,1793,1794,1795,1796,1797,1798,1799,1818,1819,1820,1847,1848,3422 ,3467,3468,3470,3471,3472,3473,3474,3475,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445 ,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468 ,4469,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5350,5351,5365,5366,5367,5368,5369,5370,5371,5372 ,5373,5375,5378,5380,5382,5383,5385,5386,5389,5390,5391,5396,5401,5421,5424,5425,5426,5427,5428,5429,5430,5431,5436 ,5437,5439,5440,5441,5448,5451,5469,5471,5472,5473,5558,5559,5682,5683,5744,5751,5766,5768,5769,5770,5771,5776,5777 ,5778,5779,5780,5782,5783,5784,5785,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5818,5820,5821,5822,5824,5832 ,5851,5852,5854,5855,5856,5857,5858,5859,5860,5861,5865,5866,5870,5871,5872,5873,5874,5881,5888,5889,5890,5891,5895 ,5896,5897,5899,5900,5901,5902,5903,5906,5907,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5924,5925,5926 ,5927,5928,5929,5930,5931,5932,5933,5934,5935,5938,5939,5940,5942,5943,5944,5946,5947,5948,5949,5950,5951,5952,5953 ,5954,5955,5956,5957,5958,6496,6497,9959,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9981,9982,9983,9991 ,9992,9993,9997,9998,10006,10007,10008,10010,10013,10014,10015,10016,10017,10018,10019,10021,10022,10029,10030,10031 ,10039,10043,10048,10049,10051,10054,10055,10060,10061,10062,10063,10064,10065,10066,10067,10068,10070,10071,10072 ,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091 ,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110 ,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129 ,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148 ,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167 ,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10186,10187 ,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206 ,10207,10208,10209,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226 ,10227,10228,10229,10230,10231,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246 ,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10270,10271,10272,10273 ,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10298,10299,10300 ,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329 ,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10362,10363,10364,10365,10366,10367,10368,10369,10370 ,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389 ,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10409 ,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428 ,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447 ,10449,10450,10451,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10464,10465,10466,10467,10468,10469 ,10470,10471,10472,10473,10474,10475,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10490,10491,10492 ,10493,10494,10495,10496,10497,10499,10500,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517 ,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536 ,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555 ,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574 ,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593 ,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612 ,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10626,10627,10628,10629,10630,10631,10632 ,10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651 ,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10670,10671,10672 ,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691 ,10692,10693,10694,10695,10696,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718 ,10719,10720,10721,10722,10723,10724,10733,10734,10735,10738,10739,10740,10741,10742,10743,10746,10747,10748,10749 ,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10791 ,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810 ,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829 ,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848 ,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867 ,10868,10869,10870,10871,10872,10873,10874,10875,10876,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887 ,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906 ,10907,10908,10909,10910,10911,10912,10914,10923,10924,10925,10926,10929,10930,10931,10932,10937,10938,10939,10940 ,10941,10955,10956,10957,10964,10965,11009,11027,11028,11044,11045,11052,11053,11054,11055,11056,11060,11061,11062 ,11063,11064,11087,11088,11089,11090,11091,11097,11098,11099,11102,11112,11113,11129,11130,11138,11139,11140,11141 ,11142,11146,11147,11148,11149,11150,11172,11173,11174,11175,11176,11182,11183,11184,11187 Weights: 0.75,0.085762232542038,0.104128152132034,0.106781028211117,0.124402061104774,0.102938070893288,0.172302529215813,0.111800543963909 ,0.103759080171585,0.115088522434235,0.12423200905323,0.095378540456295,0.110840901732445,0.117616847157478,0.118899755179882 ,0.0713480859994888,0.0956620201468468,0.242636173963547,0.12423200905323,0.107998006045818,0.0882430002093315,0.0698882415890694 ,0.0566199608147144,0.0645465701818466,0.11211734265089,0.0914984792470932,0.151150241494179,0.192090138792992,0.12276616692543 ,0.118340142071247,0.101025715470314,0.0772408172488213,0.0512937009334564,0.461652457714081,0.459554940462112,0.459844648838043 ,0.462225466966629,0.472784638404846,0.467772513628006,0.487117677927017,0.534648895263672,0.575068235397339,0.57318240404129 ,0.604590594768524,0.600727379322052,0.601162910461426,0.596206903457642,0.60578978061676,0.603663563728333,0.575768530368805 ,0.535132348537445,0.701581835746765,0.545263409614563,0.591261208057404,0.661754131317139,0.658437669277191,0.536858856678009 ,0.575587630271912,0.602665722370148,0.597706258296967,0.602555274963379,0.604955315589905,0.607475936412811,0.578075408935547 ,0.537131786346436,0.612353384494781,0.661225914955139,0.606588125228882,0.577766060829163,0.53724068403244,0.586965978145599 ,0.661505222320557,0.465115785598755,0.452530950307846,0.277101397514343,0.0386030152440071,0.452400863170624,0.288399666547775 ,0.434900224208832,0.422080427408218,0.44364920258522,0.422790855169296,0.18050417304039,0.482322633266449,0.282486408948898 ,0.390942275524139,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 ,0.38839054107666,0.387968569993973,0.359195381402969,0.899999976158142,0.0431111082434654,0.399808496236801,0.424760729074478 ,0.399594306945801,0.047169242054224,0.294629603624344,0.446909070014954,0.293749272823334,0.42409160733223,0.666466772556305 ,0.419387340545654,0.600000023841858,0.5,0.436221748590469,0.392474800348282,0.383285969495773,0.337732255458832,0.344708532094955 ,0.41933611035347,0.432212859392166,0.266951441764832,0.600000023841858,0.32977768778801,0.252586364746094,0.253333956003189 ,0.899999976158142,0.499777913093567,0.173275351524353,0.5,0.5,0.600000023841858,0.175833567976952,0.18368735909462 ,0.203715935349464,0.207051545381546,0.600000023841858,0.0095208901911974,0.0478370748460293,1,0.12961608171463,0.134921371936798 ,1,0.0517776012420654,0.110316768288612,0.0806061327457428,0.0495592057704926,0.150415286421776,0.759846448898315 ,0.294901102781296,0.429294049739838,0.861581206321716,0.390059977769852,0.387282431125641,0.380919307470322,0.0594810396432877 ,0.0504821762442589,0.400211721658707,0.425702005624771,0.399597972631454,0.046536035835743,0.295834451913834,0.75 ,0.446447640657425,0.292811393737793,0.423771739006042,0.124108269810677,0.415361732244492,0.600000023841858,0.254057466983795 ,0.600000023841858,0.435669839382172,0.42539370059967,0.413400411605835,0.411728411912918,0.418673723936081,0.417498052120209 ,0.43069788813591,1,0.264593541622162,0.248868077993393,0.250652760267258,0.134869754314423,0.5,0.5,0.418447643518448 ,0.600000023841858,0.699999988079071,0.600000023841858,0.0485693663358688,0.5,0.5,0.699999988079071,0.174534395337105 ,1,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.5,0.5,0.5,0.600000023841858 ,0.5,0.600000023841858,0.5,0.5,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5 ,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.0141789242625237,0.0153731536120176 ,0.00258106738328934,0.0111873541027308,0.012540147639811,0.0160985831171274,0.0158132258802652,0.0117630818858743 ,0.0171353444457054,0.0132416011765599,0.0101168863475323,0.00587683590129018,0.00939620938152075,0.00872862990945578 ,0.0169561989605427,0.0363818965852261,0.0223651211708784,0.0398627892136574,0.0235235225409269,0.0233923010528088 ,0.0204265173524618,0.020949138328433,0.00725673837587237,0.0112239895388484,0.0089893639087677,0.00827483367174864 ,0.0159890446811914,0.0124049074947834,0.0115596614778042,0.00993351172655821,0.0130593748763204,0.0169641263782978 ,0.00573462061583996,0.0085513973608613,0.00921071413904428,0.0167909264564514,0.0222052801400423,0.0363022610545158 ,0.023268872871995,0.0203311648219824,0.0110470624640584,0.00882083363831043,0.00814381148666143,0.957538247108459 ,0.958540797233582,0.956538259983063,0.959350943565369,0.961500287055969,0.959985792636871,0.947338461875916,0.953540086746216 ,0.955336928367615,0.75,0.75,0.75,0.75,0.75,0.75,0.955077111721039,0.956288516521454,0.961606383323669,0.958412051200867 ,0.957542419433594,0.959802865982056,0.95624041557312,0.959717214107513,0.957168877124786,0.939900994300842,0.829129636287689 ,0.879289329051971,0.880010366439819,0.959395170211792,0.95811003446579,0.959861755371094,0.959268689155579,0.899999976158142 ,0.899999976158142,0.785349428653717,0.957476377487183,0.899999976158142,0.899999976158142,0.95319277048111,0.953531563282013 ,0.876276314258575,0.953178107738495,0.956213295459747,0.956434607505798,0.800000011920929,0.800000011920929,0.699999988079071 ,0.699999988079071,0.953248918056488,0.95462441444397,0.951935470104218,0.923011600971222,0.959479689598084,0.961464405059814 ,0.961166799068451,0.958817422389984,0.961436033248901,0.961288571357727,0.960675239562988,0.887319087982178,0.720000028610229 ,0.75,0.899999976158142,0.800000011920929,0.720578551292419,0.800000011920929,0.850000023841858,0.899999976158142 ,0.828785061836243,0.776359677314758,0.764668464660645,0.772647380828857,0.765205442905426,0.763894855976105,0.958999872207642 ,0.75,0.75,0.75,1,1,0.800000011920929,0.894429683685303,0.894518375396729,0.895675539970398,0.922911643981934,0.730348885059357 ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75 ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00808052811771631,0.00695882085710764,0.75,0.75,0.00667890813201666,0.75 ,0.0041200197301805,0.75,0.75,0.827726483345032,0.736065030097961,0.75,0.75,0.95705246925354,0.951984941959381,0.910732209682465 ,0.767530143260956,0.75,0.955445647239685,0.956634402275085,0.961577653884888,0.957822620868683,0.971852004528046 ,0.946243524551392,0.960978269577026,0.955973863601685,0.951422214508057,0.957989037036896,0.899999976158142,0.0939868167042732 ,0.095717616379261,0.959257662296295,0.5,0.75,0.75,0.75,0.75,0.878020882606506,0.75,0.5,0.75,0.5,0.5,0.5,0.5,0.75 ,0.0198027025908232,0.0300513803958893,0.763302564620972,0.75,0.75,0.00716592743992805,0.0123920850455761,0.768499076366425 ,0.959338009357452,0.959072470664978,0.958411872386932,0.955592691898346,0.947930335998535,0.95901894569397,0.0324273779988289 ,0.764417946338654,0.75,0.75,0.75,0.720000028610229,0.720000028610229,0.899999976158142,0.96061372756958,0.699999988079071 ,0.5,0.75,0.75,0.75,0.75,0.959779322147369,0.955917954444885,0.960276246070862,0.956004500389099,0.958375811576843 ,0.952684044837952,0.959409594535828,0.960889339447021,0.953610301017761,0.957848727703094,0.95908397436142,0.959031164646149 ,0.968548119068146,0.232526525855064,0.75,0.00976004730910063,0.95672219991684,0.951477289199829,0.948371946811676 ,0.952519536018372,0.949735760688782,0.952434301376343,0.75,0.75,0.75,0.961228728294373,0.75,0.959927022457123,0.957871973514557 ,0.961668848991394,0.961422979831696,0.954932510852814,0.955667316913605,0.9588942527771,0.957856237888336,0.960132479667664 ,0.961470305919647,0.954107403755188,0.958635985851288,0.878364622592926,0.879140973091125,0.879786968231201,0.87715870141983 ,0.961276412010193,0.960936665534973,0.085561029613018,0.0822171941399574,0.0838226974010468,0.0859100669622421,0.959669351577759 ,0.959876298904419,0.960931241512299,0.959267258644104,0.957055270671844,0.959008812904358,0.956428945064545,0.954533338546753 ,0.958473145961761,0.94888299703598,0.75,0.0896205604076386,0.0906806141138077,0.0920000523328781,0.0904827415943146 ,0.955279529094696,0.95048451423645,0.946091711521149,0.951888501644135,0.928969323635101,0.952318787574768,0.93002837896347 ,0.949014604091644,0.954181551933289,0.952441871166229,0.954520225524902,0.956952750682831,0.957884430885315,0.881032288074493 ,0.879364728927612,0.878738582134247,0.789911925792694,0.789941310882568,0.75,0.75,0.720000028610229,0.720000028610229 ,0.699999988079071,0.699999988079071,0.850000023841858,0.850000023841858,0.800000011920929,0.800000011920929,0.957197785377502 ,0.953077971935272,0.939027428627014,0.835327625274658,0.833593666553497,0.0943752005696297,0.0944032445549965,0.899999976158142 ,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.850000023841858,0.699999988079071,0.699999988079071 ,0.0682986751198769,0.0714335814118385,0.789074778556824,0.0760513916611671,0.0947359576821327,0.954803109169006,0.956382870674133 ,0.720000028610229,0.75,0.954493045806885,0.948985457420349,0.78932797908783,0.789512395858765,0.699999988079071,0.850000023841858 ,0.800000011920929,0.959878921508789,0.959619164466858,0.94746595621109,0.93335372209549,0.951277136802673,0.923790335655212 ,0.881081640720367,0.958416938781738,0.834649443626404,0.836609840393066,0.956299424171448,0.881010353565216,0.836093723773956 ,0.880341291427612,0.834789097309113,0.878566384315491,0.899624884128571,0.899553835391998,0.899523794651031,0.899480938911438 ,0.850000023841858,0.960817873477936,0.768886864185333,0.790004849433899,0.899999976158142,0.75,0.960687756538391 ,0.959923565387726,0.75,0.899999976158142,0.899999976158142,0.960811078548431,0.899999976158142,0.0961230620741844 ,0.0984849631786346,0.899999976158142,0.959491372108459,0.75,0.0948158726096153,0.0950082242488861,0.700767397880554 ,0.0730230212211609,0.0979870334267616,0.0872775539755821,0.087272122502327,0.0866196677088737,0.0942397788167,0.959409654140472 ,0.961271166801453,0.961122095584869,0.957583010196686,0.95744389295578,0.956457555294037,0.944807946681976,0.75,0.75 ,0.75,0.75,0.899999976158142,0.899999976158142,0.899999976158142,0.0906759724020958,0.0903674736618996,0.0961243137717247 ,0.0936058834195137,0.938084781169891,0.93389755487442,0.950093328952789,0.955193758010864,0.955569982528687,0.954447031021118 ,0.962438106536865,0.949910342693329,0.966332674026489,0.75,0.75,0.75,0.75,0.75,0.941100180149078,0.935536861419678 ,0.953422069549561,0.960933566093445,0.951039493083954,0.939891397953033,0.950097799301147,0.949685275554657,0.959550976753235 ,0.964796185493469,0.880356311798096,0.865171313285828,0.91388601064682,0.938835144042969,0.957113146781921,0.943677246570587 ,0.877648413181305,0.928777635097504,0.785357356071472,0.899999976158142,0.957551598548889,0.958083152770996,0.899999976158142 ,0.86806857585907,0.948952913284302,0.920421719551086,0.899999976158142,0.850000023841858,0.75,0.75,0.850000023841858 ,0.945503354072571,0.916061341762543,0.953746795654297,0.957053661346436,0.951983451843262,0.95653110742569,0.959425270557404 ,0.950447499752045,0.957255899906158,0.954313933849335,0.950628340244293,0.950628101825714,0.699999988079071,0.800000011920929 ,0.899999976158142,0.800000011920929,0.810391426086426,0.899999976158142,0.850000023841858,0.850000023841858,0.830171585083008 ,0.764804065227509,0.75,0.763968825340271,0.921127438545227,1,0.75,1,1,1,1,1,0.800000011920929,1,0.931986749172211 ,1,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75 ,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00678260065615177,0.00734655186533928,0.75,0.75,0.0065109939314425 ,0.75,0.00402423506602645,0.75,0.822583794593811,1,0.75,0.75,0.955177187919617,0.96015864610672,0.864858448505402 ,0.767907500267029,0.75,0.959308981895447,0.959520757198334,0.959039568901062,0.95704460144043,0.952542364597321,0.978068172931671 ,0.956893384456635,0.95896989107132,0.904391825199127,0.877550303936005,0.914088070392609,0.959565460681915,0.945497035980225 ,0.092599019408226,0.5,0.75,0.75,0.75,0.75,0.879189491271973,0.75,0.5,0.75,0.5,0.5,0.75,0.76336532831192,0.0300193205475807 ,0.0197536144405603,0.75,0.0123153384774923,0.00709361396729946,0.75,0.76811808347702,0.925329804420471,0.938286542892456 ,0.923435568809509,0.864238500595093,0.915386140346527,0.899999976158142,0.75,0.800000011920929,0.699999988079071 ,0.699999988079071,0.800000011920929,0.825247704982758,0.884745538234711,0.75,0.75,0.75,0.75,0.75,0.952121734619141 ,0.94670158624649,0.93092143535614,0.924777686595917,0.953759908676147,0.936432063579559,0.946027040481567,0.947521567344666 ,0.850173532962799,0.903109967708588,0.873982906341553,0.809221684932709,0.75,0.75,0.0102625312283635,0.75,0.942292749881744 ,0.877478003501892,0.942061126232147,0.941333055496216,0.943734705448151,0.943852305412292,0.75,0.75,0.75,0.93719083070755 ,0.90915858745575,0.75,0.957259058952332,0.953966915607452,0.959854364395142,0.934671580791473,0.951683163642883,0.959149658679962 ,0.959299862384796,0.965592980384827,0.75,0.947899401187897,0.957156240940094,0.947200894355774,0.944532811641693 ,0.946368992328644,0.781483590602875,0.960373640060425,0.956585705280304,0.0811243206262589,0.0857763141393662,0.0867564678192139 ,0.957601070404053,0.958110451698303,0.960652112960815,0.956212997436523,0.950175523757935,0.953033983707428,0.95390248298645 ,0.952684342861176,0.947774291038513,0.925760209560394,0.75,0.0890278890728951,0.0842892453074455,0.0817965343594551 ,0.0742781460285187,0.95094621181488,0.948776364326477,0.940522849559784,0.936695992946625,0.931431770324707,0.918804049491882 ,0.813201665878296,0.8664271235466,0.84716135263443,0.801027417182922,0.88867199420929,0.931282520294189,0.780009210109711 ,0.946900606155396,0.946670413017273,0.947484314441681,0.840196132659912,0.800000011920929,0.800000011920929,0.839022636413574 ,0.699999988079071,0.699999988079071,0.75,0.75,0.899999976158142,0.850000023841858,0.850000023841858,0.899999976158142 ,0.954739928245544,0.938593447208405,0.883178055286407,0.882882356643677,0.886038482189178,0.899999976158142,0.899999976158142 ,0.07585559040308,0.074390210211277,0.09121323376894,0.087418220937252,0.0914874374866486,0.899999976158142,0.081835925579071 ,0.0858589857816696,0.0672509297728539,0.0721054747700691,0.720495045185089,0.838570237159729,0.765313267707825,0.899999976158142 ,0.933104932308197,0.93582159280777,0.800000011920929,0.699999988079071,0.799659550189972,0.821321725845337,0.838018119335175 ,0.837090969085693,0.75,0.850000023841858,0.899999976158142,0.889135122299194,0.92995673418045,0.931536793708801,0.890445470809937 ,0.941257774829865,0.887241840362549,0.779425501823425,0.945341825485229,0.88369619846344,0.884203732013702,0.950628221035004 ,0.949951648712158,0.883653819561005,0.947980403900146,0.885260403156281,0.942782938480377,0.810312032699585,0.899999976158142 ,0.899999976158142,0.899999976158142,0.952167749404907,0.768492162227631,0.840166389942169,0.899999976158142,0.75 ,0.75,0.960485398769379,0.959158957004547,0.956989228725433,0.960198104381561,0.960046768188477,0.899999976158142 ,0.0983112379908562,0.0983274206519127,0.899999976158142,0.0946391001343727,0.960810780525208,0.0736546814441681,0.0791008844971657 ,0.0774789527058601,0.0683221891522408,0.081981897354126,0.0948949903249741,0.0952887535095215,0.899999976158142,0.0700687915086746 ,0.0828381180763245,0.0923292860388756,0.0757671371102333,0.0929875746369362,0.0933984667062759,0.0961728468537331 ,0.0964640229940414,0.0112190824002028,0.00527462316676974,0.00599608197808266,0.0109401093795896,0.00660790223628283 ,0.0231660008430481,0.0244253613054752,0.0114240096881986,0.0173866599798203,0.0214097537100315,0.0169858019798994 ,0.0169140622019768,0.0216232407838106,0.00598987704142928,0.0052340873517096,0.0111760459840298,0.0109166782349348 ,0.00654197158291936,0.0231000576168299,0.011360595934093,0.0173457507044077,0.0206026155501604,0.0168101955205202 ,0.0168885830789804,0.00280827027745545,0.00316052138805389,0.00436065997928381,0.00599541608244181,0.00596329383552074 ,0.00793657638132572,0.00531561719253659,0.00536487251520157,0.0040706223808229,0.00725838495418429,0.00932312104851007 ,0.00662264693528414,0.00651014456525445,0.00529910530894995,0.0042096390388906,0.00354334083385766,0.0051647606305778 ,0.00899781100451946,0.00610579364001751,0.00418041413649917,0.0040243323892355,0.00287933833897114,0.0038571204058826 ,0.00323691987432539,0.00287965033203363,0.00544132199138403,0.00374313560314476,0.00607317546382546,0.00863313768059015 ,0.00544475764036179,0.0054993792437017,0.00417273631319404,0.00950081180781126,0.0074219973757863,0.00667169876396656 ,0.00679259700700641,0.00543491076678038,0.00430912571027875,0.00528056034818292,0.00363293150439858,0.00623954366892576 ,0.00917037390172482,0.00430067488923669,0.0041407230310142,0.00296174036338925,0.0039620166644454 Transform: 0.0267456942762977,0.0695652391424119,0.997218802892724,0,0.997222072389479,0.0675171332746874,-0.0314557301666788 ,0,-0.0695175802535841,0.995289909860946,-0.0675662066985298,0,-54.631121365628,-3.20257583373608,1.65094438652875 ,1 TransformLink: 0.0267456972775019,0.997222184290371,-0.0695175880543334,0,0.0695652467630354,0.0675171406709482,0.995290018891401 ,0,0.997218806791107,-0.0314557302896473,-0.0675662069626633,0,0.0375826209140644,54.7475266028855,-0.498783977877638 ,1 } Deformer: "SubDeformer::Cluster_L_Ankle1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904 ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927 ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950 ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973 ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996 ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019 ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042 ,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547 ,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570 ,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593 ,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616 ,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639 ,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662 ,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685 ,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708 ,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731 ,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754 ,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777 ,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800 ,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823 ,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846 ,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869 ,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892 ,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915 ,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938 ,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961 ,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984 ,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007 ,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030 ,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053 ,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076 ,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099 ,9100,9101,9102,9104,9105,9111,9113,9115,9116,9118,9119,9124,9126,9127,9134,9135,9136,9137,9138,9139,9140,9141,9142 ,9143,9144,9147,9148,9149,9150,9151,9152,9154,9157,9162,9164,9168,9174,9175,9181,9182,9183,9184,9185,9196,9197,9198 ,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244 ,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267 ,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290 ,9291,9292,9293,9303,9308,9325,9327,9328,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346 ,9347,9348,9349,9354,9355,9356,9357,9360,9369,9370,9371,9372,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393 ,9394,9395,9396,9397,9398,9399,9400,9402,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421 ,9422,9423,9440,9441,9452,9453,9458,9460,9464,9466,9467,9468,9469,9473,9482,9483,9484,9485,9521,9524,9539,9541,9554 ,9555,9601,9632,9644,9645,9646,9647,9648,9654,9661,9783,9790,9792,9794,9795,9806,9814,9818,9819,9820,9821,9822,9823 ,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9901,9902,9903 ,9904,9905,9906,9907,9908,9909,9910,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926 Weights: 0.662252962589264,0.716935575008392,0.720179736614227,0.670780777931213,0.768863677978516,0.774946868419647,0.802139163017273 ,0.824174582958221,0.820186018943787,0.858241260051727,0.720582842826843,0.775384962558746,0.786859512329102,0.723640918731689 ,0.824556350708008,0.845559477806091,0.864950239658356,0.892545998096466,0.704158782958984,0.673352599143982,0.687313973903656 ,0.740170121192932,0.78624027967453,0.82932311296463,0.655422866344452,0.613076150417328,0.675190806388855,0.847468376159668 ,0.804767429828644,0.820174694061279,0.857121586799622,0.860617458820343,0.874466836452484,0.871271193027496,0.831805944442749 ,0.863919794559479,0.877875924110413,0.891996264457703,0.874595880508423,0.893714904785156,0.872262895107269,0.83377343416214 ,0.84788590669632,0.80837094783783,0.801326990127563,0.854566514492035,0.841355443000793,0.822431445121765,0.712380409240723 ,0.786515653133392,0.800219178199768,0.710730135440826,0.74511331319809,0.824387609958649,0.664935171604156,0.653990149497986 ,0.642671227455139,0.6425661444664,0.597245275974274,0.596463561058044,0.635055124759674,0.631588757038116,0.571098744869232 ,0.664387047290802,0.568991899490356,0.701522052288055,0.579633116722107,0.650809466838837,0.675891995429993,0.679120242595673 ,0.64745831489563,0.736279428005219,0.682271540164948,0.795476019382477,0.722612321376801,0.635961771011353,0.586889326572418 ,0.643270611763,0.663508534431458,0.7317253947258,0.717524886131287,0.781114041805267,0.785607278347015,0.624738037586212 ,0.718818366527557,0.584580779075623,0.696781635284424,0.792071640491486,0.740076243877411,0.78708153963089,0.82867842912674 ,0.716916739940643,0.780235946178436,0.794581592082977,0.821326792240143,0.702947616577148,0.782789766788483,0.716075003147125 ,0.797236800193787,0.646848678588867,0.581979751586914,0.590038537979126,0.59087860584259,0.695394396781921,0.688918888568878 ,0.726925373077393,0.751364767551422,0.784846127033234,0.815278291702271,0.836895823478699,0.85580587387085,0.879223763942719 ,0.880212366580963,0.635002911090851,0.610837399959564,0.835834264755249,0.842389523983002,0.89502215385437,0.889481902122498 ,0.909801483154297,0.899769723415375,0.888761699199677,0.883025705814362,0.768488585948944,0.736176431179047,0.620154917240143 ,0.61918431520462,0.584584772586823,0.582186162471771,0.599543333053589,0.606371879577637,0.602085590362549,0.759392023086548 ,0.743354380130768,0.641951978206635,0.607505738735199,0.743978083133698,0.7264643907547,0.724829494953156,0.66710889339447 ,0.777875006198883,0.809260308742523,0.826838612556458,0.597754776477814,0.592020213603973,0.579893112182617,0.613420307636261 ,0.810257375240326,0.855723738670349,0.869342446327209,0.83930629491806,0.744189202785492,0.710318505764008,0.721735775470734 ,0.69486540555954,0.59639298915863,0.595895648002625,0.567268490791321,0.562873125076294,0.570796370506287,0.581473410129547 ,0.586230039596558,0.716825127601624,0.730502545833588,0.619070827960968,0.576398611068726,0.713853776454926,0.700119316577911 ,0.579771995544434,0.69603168964386,0.687131941318512,0.587622165679932,0.59562212228775,0.638310849666595,0.495868265628815 ,0.504656076431274,0.682099580764771,0.62079256772995,0.619129598140717,0.637898862361908,0.685304403305054,0.392854332923889 ,0.545557498931885,0.499303996562958,0.497860908508301,0.481977909803391,0.191958338022232,0.193772777915001,0.167935505509377 ,0.176776140928268,0.69019490480423,0.678784191608429,0.433016240596771,0.604192554950714,0.417342305183411,0.372644573450089 ,0.808385014533997,0.811666429042816,0.736336946487427,0.764354586601257,0.717962324619293,0.66310316324234,0.0796902030706406 ,0.0722345486283302,0.453533738851547,0.546529531478882,0.583387970924377,0.59502637386322,0.581080198287964,0.584292113780975 ,0.547285854816437,0.671297550201416,0.709093928337097,0.697784125804901,0.773432612419128,0.701103806495667,0.500118792057037 ,0.806355118751526,0.760442793369293,0.784082531929016,0.840699017047882,0.544453740119934,0.655303418636322,0.774261713027954 ,0.620487987995148,0.650266408920288,0.633479595184326,0.626469314098358,0.571754097938538,0.715693593025208,0.76426762342453 ,0.898551404476166,0.499102562665939,0.779566049575806,0.8974888920784,0.490139544010162,0.744280457496643,0.576716959476471 ,0.120298206806183,0.0609138756990433,0.0686163753271103,0.0585639476776123,0.0609014816582203,0.173864901065826,0.151549980044365 ,0.160618603229523,0.179077684879303,0.311770230531693,0.289250820875168,0.182548344135284,0.220449775457382,0.232918500900269 ,0.1557277739048,0.429737746715546,0.436085075139999,0.498938947916031,0.499213874340057,0.545559585094452,0.498984545469284 ,0.392706125974655,0.638633489608765,0.568391859531403,0.498944014310837,0.499541968107224,0.499347507953644,0.499558687210083 ,0.499784559011459,0.506308078765869,0.488025993108749,0.471090734004974,0.489009350538254,0.494769752025604,0.494105905294418 ,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.52510541677475 ,0.503865361213684,0.547393321990967,0.578731000423431,0.578221321105957,0.604531288146973,0.666337788105011,0.618531048297882 ,0.458945125341415,0.467843025922775,0.495702832937241,0.471826136112213,0.463245213031769,0.499710947275162,0.503833949565887 ,0.741899967193604,0.669493854045868,0.639782190322876,0.693806409835815,0.580596685409546,0.528206884860992,0.497483104467392 ,0.497408628463745,0.504603862762451,0.648581326007843,0.624427199363709,0.502325057983398,0.590632736682892,0.498883485794067 ,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936 ,0.493292182683945,0.493460863828659,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692 ,0.494955003261566,0.495421648025513,0.496160745620728,0.496107131242752,0.544339060783386,0.529735803604126,0.589485824108124 ,0.60707688331604,0.549736261367798,0.633057951927185,0.630938470363617,0.64998871088028,0.615624070167542,0.498127013444901 ,0.500028312206268,0.501803278923035,0.473483175039291,0.478267163038254,0.471729397773743,0.478772342205048,0.475807130336761 ,0.478105336427689,0.482067912817001,0.472987681627274,0.476543188095093,0.483400821685791,0.498663365840912,0.49783006310463 ,0.497768074274063,0.506945431232452,0.505904972553253,0.742265939712524,0.777076601982117,0.709838807582855,0.723995983600616 ,0.920427918434143,0.92652815580368,0.908109724521637,0.886519014835358,0.750078618526459,0.70175689458847,0.739742457866669 ,0.779259204864502,0.495814889669418,0.495124042034149,0.495348423719406,0.525247037410736,0.501540124416351,0.515422761440277 ,0.54307609796524,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.654774129390717,0.76426112651825 ,0.695192337036133,0.628502249717712,0.855615854263306,0.789036810398102,0.495361059904099,0.494524925947189,0.495436549186707 ,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.613348126411438,0.550544440746307,0.569208562374115 ,0.592481851577759,0.674045324325562,0.953721344470978,0.98089611530304,0.796355009078979,0.962789952754974,0.862315773963928 ,0.959008634090424,0.931809902191162,0.882491052150726,0.883577704429626,0.551375806331635,0.618872940540314,0.838439345359802 ,0.677922546863556,0.655788064002991,0.495860993862152,0.497062891721725,0.687699973583221,0.497428089380264,0.498450934886932 ,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196 ,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.801122665405273 ,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.494946539402008,0.498003214597702,0.498488068580627 ,0.812527358531952,0.497725337743759,0.495063692331314,0.505264818668365,0.495184719562531,0.516481697559357,0.507335722446442 ,0.497387260198593,0.507205486297607,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659 ,0.497722923755646,0.498795121908188,0.499147802591324,0.820494115352631,0.46927735209465,0.459739953279495,0.73817503452301 ,0.774010121822357,0.577046036720276,0.497711896896362,0.494165003299713,0.633301734924316,0.47880819439888,0.495833784341812 ,0.48139351606369,0.497110813856125,0.76469612121582,0.795858263969421,0.506770610809326,0.73978990316391,0.494763672351837 ,0.494477927684784,0.500276744365692,0.70234751701355,0.49773570895195,0.690812289714813,0.861847698688507,0.498591303825378 ,0.799018800258636,0.498167306184769,0.498650819063187,0.5091193318367,0.497448414564133,0.482101559638977,0.44548761844635 ,0.44733864068985,0.455966800451279,0.691210627555847,0.687352657318115,0.694997549057007,0.650831580162048,0.691382348537445 ,0.511168897151947,0.522735774517059,0.576642036437988,0.559218406677246,0.55339902639389,0.576144576072693,0.581755459308624 ,0.527762532234192,0.547392010688782,0.530811905860901,0.519025087356567,0.503949224948883,0.475909888744354,0.48587840795517 ,0.44903889298439,0.481809675693512,0.457466155290604,0.448883175849915,0.515073657035828,0.562007606029511,0.499335706233978 ,0.529892086982727,0.512110590934753,0.534585952758789,0.494714945554733,0.483254015445709,0.547562420368195,0.59102463722229 ,0.530908048152924,0.520111799240112,0.571300983428955,0.57639741897583,0.547903001308441,0.521144568920136,0.503582537174225 ,0.506857693195343,0.444775521755219,0.477946311235428,0.467674791812897,0.484626680612564,0.499206751585007,0.49823185801506 ,0.497802197933197,0.496602028608322,0.497677952051163,0.499043405056,0.498800069093704,0.518403708934784,0.525831341743469 ,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.569541394710541,0.68333899974823 ,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.510666072368622,0.50631707906723 ,0.530737638473511,0.499969571828842,0.499186664819717,0.499278783798218,0.57228696346283,0.538302779197693,0.49847537279129 ,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589 ,0.499071568250656,0.50044584274292,0.50257819890976,0.529922425746918,0.517054378986359,0.569340586662292,0.593726396560669 ,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497550189495087,0.498391449451447 ,0.498559087514877,0.504504323005676,0.499798029661179,0.501299262046814,0.52972686290741,0.595946848392487,0.558468520641327 ,0.509782254695892,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559 ,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558 ,0.488881856203079,0.493738561868668,0.511237859725952,0.495989292860031,0.546556949615479,0.512413084506989,0.532420933246613 ,0.503437399864197,0.5750692486763,0.61922025680542,0.562155485153198,0.628194510936737,0.578537940979004,0.595672905445099 ,0.691051840782166,0.55819296836853,0.54462867975235,0.519611001014709,0.556648969650269,0.507583141326904,0.497512698173523 ,0.527811646461487,0.501895308494568,0.497514218091965,0.495734304189682,0.58951598405838,0.702751636505127,0.735632419586182 ,0.759821832180023,0.498141705989838,0.4822036921978,0.497402459383011,0.747796297073364,0.848888993263245,0.914315938949585 ,0.896286070346832,0.504512190818787,0.490088790655136,0.690164387226105,0.171521663665771,0.271039336919785,0.42390364408493 ,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.402910560369492,0.401398241519928 ,0.273808985948563,0.175097554922104,0.199212685227394,0.232243254780769,0.19456385076046,0.183189481496811,0.166510850191116 ,0.255079418420792,0.25168913602829,0.27091583609581,0.496359467506409,0.515789389610291,0.492695808410645,0.537370145320892 ,0.642270505428314,0.603465437889099,0.605224668979645,0.571839272975922,0.588908016681671,0.621786415576935,0.595558941364288 ,0.594146132469177,0.561316013336182,0.547303140163422,0.717162847518921,0.740826785564423,0.535634934902191,0.500117421150208 ,0.499933958053589,0.101766638457775,0.111037105321884,0.183134287595749,0.41256394982338,0.495221793651581,0.185607150197029 ,0.197905108332634,0.280133128166199,0.416712075471878,0.494052648544312,0.496475011110306,0.523596227169037,0.102055840194225 ,0.117517657577991,0.198546633124352,0.351395040750504,0.677316725254059,0.786939442157745,0.883826851844788,0.4284348487854 ,0.294497162103653,0.214689984917641,0.201732218265533,0.142618268728256,0.130712449550629,0.135116308927536,0.039704255759716 ,0.043820708990097,0.16945244371891,0.13146761059761,0.104484103620052,0.122791580855846,0.0540477894246578,0.135893955826759 ,0.074902355670929,0.146088987588882,0.00148449698463082,0.00180044712033123,0.00190533243585378,0.00161935156211257 ,0.00256754434667528,0.00247231777757406,0.00311465212143958,0.00306080444715917,0.00206518173217773,0.00141028501093388 ,0.00245590414851904,0.00250778347253799,0.00131974171381444,0.00111980270594358,0.00122817605733871,0.00136681995354593 ,0.00178884842898697,0.00197217962704599,0.00209920550696552,0.00111105316318572,0.00143118086270988,0.00153342681005597 ,0.00161730451509357,0.00108217669185251,0.00127602275460958,0.00116704078391194,0.00126482569612563,0.00127327290829271 ,0.00104213762097061,0.00113009929191321,0.00113605090882629,0.00124113645870239,0.00138873723335564,0.00140770059078932 ,0.00124231504742056,0.0013095501344651,0.00154323561582714,0.00152960699051619,0.00205415673553944,0.00227937055751681 ,0.00211106915958226,0.00291993888095021,0.00182866596151143,0.00118685979396105,0.00230278423987329,0.00110143003985286 ,0.00102221255656332,0.00162972358521074,0.00117750989738852,0.00201793806627393,0.00131509616039693,0.00156842230353504 ,0.00102850899565965,0.00110244657844305,0.00123351323418319,0.00109587737824768,0.0011475111823529,0.00133768632076681 ,0.00156263750977814,0.0018124032067135,0.00228998460806906,0.00124180514831096,0.00104946608189493,0.00122276064939797 ,0.00184418284334242,0.00182779424358159,0.118393562734127,0.0736616924405098,0.0249102488160133,0.0221831742674112 ,0.0899571180343628,0.112894177436829,0.0035569122992456,0.0474935285747051,0.00326452520675957,0.0028353682719171 ,0.00254967133514583,0.00683861877769232,0.00711500784382224,0.00409545283764601,0.00273589114658535,0.003227410139516 ,0.00404798192903399,0.00195459253154695,0.00146086083259434,0.00389905762858689,0.00379705731756985,0.00660856440663338 ,0.00885148253291845,0.0123358722776175,0.0371558479964733,0.0114142606034875,0.0049864212051034,0.00675698649138212 ,0.00125157495494932,0.00423817383125424,0.00477129686623812,0.00646650372073054,0.00695784715935588,0.00672228308394551 ,0.00723032187670469,0.00389069109223783,0.00655906740576029,0.00252278638072312,0.0070349182933569,0.00656781531870365 ,0.00377465505152941,0.0022606726270169,0.0145900612697005,0.0159324333071709,0.0146114667877555,0.0162585619837046 ,0.00300842896103859,0.00186342420056462,0.0134177384898067,0.00533000519499183,0.0120491916313767,0.00303325708955526 ,0.00548212928697467,0.00275028543546796,0.00285283708944917,0.00401054183021188,0.00471321679651737,0.0049645071849227 ,0.00414479849860072,0.00535947270691395,0.00535075319930911,0.00770913390442729,0.00910867750644684,0.0109262075275183 ,0.0109737552702427,0.00946454796940088,0.00697548314929008,0.00968931894749403,0.0109196323901415,0.00148356088902801 ,0.00119180616457015,0.00157149462029338,0.00133818294852972,0.00121787074021995,0.0010013849241659,0.00150432379450649 ,0.00106834375765175,0.0265174955129623,0.0213357713073492,0.0482362285256386,0.111389972269535,0.178344205021858 ,0.00177848618477583,0.038597047328949,0.100632637739182,0.0014194343239069,0.001388642587699,0.00193746259901673 ,0.00310551328584552,0.00602176133543253,0.00628630816936493,0.00313000287860632,0.170989155769348,0.139627546072006 ,0.151070773601532,0.153013974428177,0.120552375912666,0.0891576483845711,0.0443960651755333,0.00191070046275854,0.00883879698812962 ,0.0236061438918114,0.0467715933918953,0.0756872594356537,0.00838399399071932,0.0180896297097206,0.0441901236772537 ,0.085140235722065,0.00336254015564919,0.00880239997059107,0.0102470815181732,0.0147635443136096,0.0361023619771004 ,0.116256214678288,0.172775134444237,0.00751014146953821,0.00373137649148703,0.00834355410188437,0.0205908212810755 ,0.0430315807461739,0.0499112345278263,0.0812323614954948,0.00125892937649041,0.0243157092481852,0.0145227061584592 ,0.0245868228375912,0.0315362252295017,0.0573749467730522,0.0648135989904404,0.0631936118006706,0.0577625222504139 ,0.043515969067812,0.0366875343024731,0.0112321749329567,0.013560269959271,0.0102249225601554,0.0125839579850435,0.0148925315588713 ,0.0148319378495216,0.0134749580174685,0.00117894972208887,0.00133481808006763,0.00110387580934912,0.00105489289853722 ,0.00100554316304624,0.00101256731431931,0.00131905952002853,0.00110926921479404,0.00121478259097785,0.00114571722224355 ,0.00102083408273757,0.0012131753610447,0.00142305926419795,0.00133616500534117,0.00117117504123598,0.00116741808596998 ,0.00118442473467439,0.00101484113838524,0.00115493719931692,0.00110147777013481,0.00105720793362707,0.0010019481414929 ,0.0013600290985778,0.00124275567941368,0.00102024816442281,0.00116363493725657,0.00116654590237886,0.00119186111260206 ,0.00126692734193057,0.0010253731161356,0.00108020601328462,0.00105418777093291,0.00120234151836485,0.00108549254946411 ,0.00124082865659148,0.00112835713662207,0.00100101053249091,0.00140826881397516,0.0752988681197166,0.124789580702782 ,0.160499945282936,0.169288575649261,0.18654191493988,0.202812254428864,0.19428688287735,0.195977717638016,0.176482886075974 ,0.163506925106049,0.0958758518099785,0.0982898101210594,0.0110053485259414,0.0175644811242819,0.0482322424650192 ,0.0564861409366131,0.0773198679089546,0.200308069586754,0.173628240823746,0.102711834013462,0.0539824739098549,0.041170883923769 ,0.0225588493049145,0.00827851705253124,0.00417001498863101,0.00216753897257149,0.2001593708992,0.169763833284378 ,0.113478347659111,0.0628452077507973,0.0467336252331734,0.0235445890575647,0.00916387978941202,0.00502217374742031 ,0.00239629042334855,0.00120741280261427,0.00100570963695645,0.00109773920848966,0.00137963378801942,0.00222949031740427 ,0.00335098314099014,0.00546552427113056,0.0150606175884604,0.0319381542503834,0.0473228059709072,0.0694313868880272 Transform: -0.00974440814253746,0.261574781949277,-0.965134041092506,0,-0.998083574277973,-0.0615276823665369,-0.00659841607181874 ,0,-0.0611084378058367,0.963220134760211,0.261673040260058,0,4.90316612261137,-0.745790957099574,9.65255231474262 ,1 TransformLink: -0.00974440798755643,-0.998083558403841,-0.0611084368339307,0,0.261574768803395,-0.0615276792743595,0.963220086351959 ,0,-0.965134005991403,-0.00659841583183997,0.261673030743233,0,9.55886503187761,4.91157425829824,-1.50782697121848 ,1 } Deformer: "SubDeformer::Cluster_R_Ankle", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734 ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757 ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780 ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803 ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826 ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849 ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872 ,3873,3874,3875,3876,3877,3878,3879,3880,3881,7329,7330,7331,7332,7334,7335,7337,7340,7341,7343,7344,7345,7350,7353 ,7358,7359,7360,7361,7391,7392,7394,7406,7407,7408,7422,7473,7494,7495,7496,7503,7505,7518,7519,7520,7521,7534,7583 ,7584,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607 ,7608,7609,7610,7611,7615,7617,7619,7621,7622,7624,7625,7630,7631,7632,7633,7636,7639,7640,7641,7642,7643,7644,7645 ,7646,7647,7648,7649,7650,7653,7655,7656,7657,7658,7660,7668,7670,7674,7680,7681,7687,7688,7689,7690,7691,7700,7702 ,7703,7704,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747 ,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770 ,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793 ,7794,7795,7796,7821,7822,7823,7824,7825,7826,7827,7829,7830,7839,7840,7841,7842,7843,7844,7845,7846,7849,7856,7857 ,7858,7859,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7890,7891,7892,7893,7894,7895,7896,7897,7898 ,7899,7900,7901,7902,7903,7904,7905,7906,7907,7926,7940,7947,7949,7951,7952,7963,7971,7973,7974,7975,7976,7977,7978 ,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,8001,8002,8003,8004,8005,8006,8007 ,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030 ,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053 ,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076 ,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099 ,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122 ,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145 ,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168 ,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191 ,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214 ,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237 ,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260 ,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283 ,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306 ,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329 ,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352 ,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375 ,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398 ,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421 ,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444 ,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467 ,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490 ,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513 ,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861 ,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9879,9880,9881,9882,9892,9893,9894,9895,9896,9897,9898 ,9899,9900 Weights: 0.65597528219223,0.709011733531952,0.711628913879395,0.66375207901001,0.759973526000977,0.765329241752625,0.795203804969788 ,0.816222965717316,0.818207204341888,0.855426013469696,0.711977422237396,0.765679836273193,0.77683424949646,0.715062618255615 ,0.816503047943115,0.836960196495056,0.862055420875549,0.889485239982605,0.695444762706757,0.665904521942139,0.679816842079163 ,0.73004561662674,0.776868939399719,0.825136184692383,0.648822367191315,0.608231008052826,0.667994916439056,0.85819935798645 ,0.814932882785797,0.829913377761841,0.867069661617279,0.869281947612762,0.881918132305145,0.87449187040329,0.836233615875244 ,0.87369179725647,0.88720440864563,0.899121880531311,0.881960272789001,0.896691918373108,0.875333070755005,0.843001961708069 ,0.857326745986938,0.817641735076904,0.81023383140564,0.86391407251358,0.848222017288208,0.824821889400482,0.71945595741272 ,0.795259475708008,0.809440016746521,0.718048810958862,0.753644526004791,0.834041953086853,0.658038258552551,0.647229909896851 ,0.636279046535492,0.635104060173035,0.591275751590729,0.590951085090637,0.628393530845642,0.623831152915955,0.565776765346527 ,0.655584037303925,0.563940346240997,0.696153104305267,0.576048612594604,0.643130004405975,0.667751610279083,0.66983163356781 ,0.639135599136353,0.725501179695129,0.67290997505188,0.789611160755157,0.717039465904236,0.629511773586273,0.582115352153778 ,0.636384546756744,0.656113088130951,0.739117980003357,0.725175380706787,0.790050804615021,0.794268727302551,0.628185749053955 ,0.724548757076263,0.584488451480865,0.698292374610901,0.801148116588593,0.746210277080536,0.794003248214722,0.837971389293671 ,0.718741595745087,0.78249591588974,0.803311944007874,0.830314457416534,0.709548056125641,0.791346609592438,0.7228022813797 ,0.806047439575195,0.640056371688843,0.577611863613129,0.585572898387909,0.586568832397461,0.688723087310791,0.681378185749054 ,0.717833161354065,0.743086636066437,0.773878395557404,0.805986285209656,0.826895892620087,0.848493158817291,0.874839961528778 ,0.877769410610199,0.630060195922852,0.606431543827057,0.844351172447205,0.852287471294403,0.904818415641785,0.898178219795227 ,0.917577981948853,0.906475067138672,0.892982959747314,0.885418772697449,0.776828825473785,0.743370175361633,0.614108264446259 ,0.612488627433777,0.578422427177429,0.575816452503204,0.594617664813995,0.601395845413208,0.597555696964264,0.766813158988953 ,0.751835882663727,0.646396696567535,0.607691049575806,0.750361561775208,0.732623696327209,0.716885983943939,0.660877883434296 ,0.768944799900055,0.802345812320709,0.824857711791992,0.593540132045746,0.587819695472717,0.575874269008636,0.608721911907196 ,0.82046902179718,0.866474270820618,0.878058969974518,0.843822479248047,0.752577424049377,0.717527389526367,0.728131711483002 ,0.701335966587067,0.590925931930542,0.589995682239532,0.562100648880005,0.558030545711517,0.567298531532288,0.577193260192871 ,0.581563591957092,0.72448593378067,0.737729609012604,0.622413754463196,0.576157510280609,0.720308303833008,0.706418693065643 ,0.5756516456604,0.702696919441223,0.0011795781319961,0.00112896494101733,0.00102828920353204,0.001058503636159,0.00119337264914066 ,0.00106297561433166,0.00105914496816695,0.00112405023537576,0.00129260960966349,0.00110061012674123,0.00120096164755523 ,0.00110439362470061,0.00113475671969354,0.00120625190902501,0.00139809981919825,0.00129295082297176,0.00111539557110518 ,0.00109270925167948,0.00118347734678537,0.00108626356814057,0.00102851632982492,0.0011068059829995,0.00107913860119879 ,0.00102953403256834,0.00105880200862885,0.00136339839082211,0.00121706398203969,0.00114103371743113,0.00122526451013982 ,0.00110203702934086,0.00123027886729687,0.00113892008084804,0.00114424154162407,0.00116908457130194,0.00124633009545505 ,0.00106995261739939,0.00136725208722055,0.00105368765071034,0.00160929455887526,0.00194077589549124,0.00206075864844024 ,0.00175796006806195,0.00272555043920875,0.00264457450248301,0.00324998120777309,0.00313259661197662,0.00219884281978011 ,0.00152749510016292,0.00256760860793293,0.00256768707185984,0.0014338179025799,0.00121916015632451,0.00133566302247345 ,0.00147598213516176,0.00189867184963077,0.00205294857732952,0.00214026914909482,0.00119636079762131,0.00151501852087677 ,0.00159123365301639,0.0016437767772004,0.00106482626870275,0.00118096638470888,0.00139029452111572,0.0010679098777473 ,0.00122420466504991,0.00130276964046061,0.00128704076632857,0.00109646108467132,0.0011663946788758,0.00114935508463532 ,0.00130753719713539,0.00104656210169196,0.00143568706698716,0.00142728083301336,0.00104413845110685,0.00105172116309404 ,0.00116641377098858,0.00122365332208574,0.00145702308509499,0.00145369581878185,0.00198867777362466,0.00222442415542901 ,0.00210310681723058,0.00292031979188323,0.00178137444891036,0.00112225965131074,0.00230230134911835,0.00102994462940842 ,0.00159001746214926,0.0011182960588485,0.00201727566309273,0.00127973523922265,0.00156331283506006,0.00106918648816645 ,0.00122230243869126,0.00108542153611779,0.00111366261262447,0.00132836529519409,0.00169839384034276,0.00196366291493177 ,0.00245589460246265,0.00135377666447312,0.00114572537131608,0.0010074065066874,0.001139544416219,0.00178096874151379 ,0.00182523450348526,0.123235963284969,0.0753501355648041,0.0931120961904526,0.117816068232059,0.00382658536545932 ,0.045457985252142,0.00366591010242701,0.00752341700717807,0.00435095373541117,0.00292286323383451,0.00395955424755812 ,0.00190321274567395,0.00143028236925602,0.00383550697006285,0.00381829147227108,0.00336781400255859,0.00902270525693893 ,0.0128849148750305,0.0199999995529652,0.011979641392827,0.00525866402313113,0.00715382117778063,0.00446873297914863 ,0.00504618370905519,0.00680423062294722,0.00727805029600859,0.00710283266380429,0.00761045608669519,0.00406671036034822 ,0.00681646214798093,0.00266376044601202,0.00734136626124382,0.00681392010301352,0.00394017994403839,0.00238415785133839 ,0.0151917962357402,0.0165377892553806,0.015185103751719,0.0168243162333965,0.00304434704594314,0.00188357208389789 ,0.013633968308568,0.00538172433152795,0.0122589133679867,0.00306214136071503,0.00553420465439558,0.00272889854386449 ,0.00280646537430584,0.00395028758794069,0.0046858717687428,0.0049549350515008,0.00409943610429764,0.15074747800827 ,0.13802894949913,0.13859336078167,0.0366114713251591,0.0394646488130093,0.00432951329275966,0.00327839748933911,0.00322125758975744 ,0.00318318116478622,0.00321962824091315,0.0033142757602036,0.0032075101044029,0.0033591843675822,0.00414895033463836 ,0.00397540256381035,0.00139672122895718,0.00108024047221988,0.00141620181966573,0.00657118484377861,0.00721793109551072 ,0.00716012995690107,0.125166103243828,0.174555525183678,0.133634239435196,0.184101939201355,0.100839555263519,0.00133616954553872 ,0.181976735591888,0.101485811173916,0.151200979948044,0.122543193399906,0.158087536692619,0.124445781111717,0.0913600325584412 ,0.0419483035802841,0.00197794218547642,0.00463608838617802,0.0444087125360966,0.0723793208599091,0.0501375421881676 ,0.0044353692792356,0.0413938835263252,0.0806875303387642,0.00426826579496264,0.120993569493294,0.178608581423759 ,0.143479540944099,0.00399883696809411,0.00555829936638474,0.0498151890933514,0.0808451771736145,0.0747244507074356 ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652 ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0114197684451938 ,0.0139735713601112,0.00279642338864505,0.0127804530784488,0.0154154840856791,0.0153974965214729,0.0140355518087745 ,0.00105739862192422,0.0010168842272833,0.00113954034168273,0.00107212935108691,0.00119830516632646,0.00106814026366919 ,0.00102596683427691,0.00136564020067453,0.0716719478368759,0.124523319303989,0.163556218147278,0.174040555953979 ,0.192555144429207,0.20968496799469,0.201058372855186,0.216555178165436,0.176410168409348,0.0914620831608772,0.0927850008010864 ,0.0199999995529652,0.0454204343259335,0.0527630150318146,0.0724167823791504,0.152738720178604,0.206173092126846,0.178831785917282 ,0.106841884553432,0.0199999995529652,0.00605552084743977,0.00442697573453188,0.125580474734306,0.680477499961853 ,0.584467530250549,0.592251241207123,0.633143901824951,0.495578348636627,0.504434049129486,0.691548705101013,0.626969277858734 ,0.627072930335999,0.64034640789032,0.691565096378326,0.397741913795471,0.545433342456818,0.501227915287018,0.497676163911819 ,0.482865214347839,0.20007586479187,0.197468772530556,0.173577681183815,0.184274166822433,0.684533894062042,0.676782727241516 ,0.437961488962173,0.61360228061676,0.414381235837936,0.369911134243011,0.819726526737213,0.824492573738098,0.750284850597382 ,0.775287508964539,0.726000666618347,0.670123636722565,0.0739083811640739,0.0679146945476532,0.452167540788651,0.550536513328552 ,0.579955399036407,0.590891540050507,0.577258586883545,0.5803182721138,0.545221924781799,0.677812218666077,0.716372787952423 ,0.704729378223419,0.764798760414124,0.694859147071838,0.500020503997803,0.812475562095642,0.761427819728851,0.779982626438141 ,0.851395726203918,0.548225879669189,0.661731421947479,0.782220721244812,0.616512358188629,0.64509129524231,0.628571748733521 ,0.62187534570694,0.569682478904724,0.722129046916962,0.771439790725708,0.910011827945709,0.499018520116806,0.771681487560272 ,0.908240258693695,0.4902164041996,0.751008927822113,0.573323547840118,0.0569627061486244,0.0632607415318489,0.0546923018991947 ,0.0569528415799141,0.177458420395851,0.15703871846199,0.16798897087574,0.187099754810333,0.316656291484833,0.291301727294922 ,0.184640720486641,0.225315734744072,0.228931069374084,0.152371928095818,0.43130487203598,0.438795536756516,0.498869776725769 ,0.499205946922302,0.554381132125854,0.499159663915634,0.391060262918472,0.655699729919434,0.581697702407837,0.499182015657425 ,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.505017697811127,0.486934632062912,0.470368415117264 ,0.488239347934723,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725 ,0.493532657623291,0.492237329483032,0.522314846515656,0.502140820026398,0.544067442417145,0.574277400970459,0.574915885925293 ,0.600490629673004,0.664091825485229,0.614323496818542,0.458703994750977,0.46759495139122,0.49502158164978,0.472131460905075 ,0.463651090860367,0.501171886920929,0.505290508270264,0.747058033943176,0.673701882362366,0.642837941646576,0.698455512523651 ,0.583079934120178,0.52874481678009,0.497591882944107,0.497499942779541,0.504370510578156,0.653982579708099,0.628796756267548 ,0.502160012722015,0.593420624732971,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721 ,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492912411689758,0.494054555892944,0.495537310838699 ,0.495428442955017,0.495201587677002,0.495444416999817,0.494400411844254,0.495095014572144,0.495912224054337,0.495938241481781 ,0.540739595890045,0.526813268661499,0.584814488887787,0.601803541183472,0.545946657657623,0.627271831035614,0.626056015491486 ,0.644936084747314,0.611551523208618,0.497566670179367,0.499393194913864,0.501378178596497,0.473256915807724,0.478118002414703 ,0.47151792049408,0.47887846827507,0.47583332657814,0.478424072265625,0.482468962669373,0.473071485757828,0.476970911026001 ,0.483539015054703,0.499649405479431,0.497931659221649,0.497813880443573,0.50836980342865,0.507277965545654,0.749438107013702 ,0.788178980350494,0.714695155620575,0.729622066020966,0.927818417549133,0.933475971221924,0.915226221084595,0.894323170185089 ,0.754922032356262,0.706262648105621,0.745560348033905,0.78499960899353,0.495742470026016,0.495044946670532,0.495270699262619 ,0.52238667011261,0.500341296195984,0.513158202171326,0.539141952991486,0.495112806558609,0.494484156370163,0.494385927915573 ,0.494777828454971,0.646189391613007,0.752212941646576,0.683876216411591,0.620637953281403,0.84437370300293,0.775074124336243 ,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605 ,0.616513133049011,0.551888883113861,0.570059299468994,0.593811511993408,0.678223431110382,0.960020244121552,0.983643352985382 ,0.799996078014374,0.963403701782227,0.86243861913681,0.955750465393066,0.925033330917358,0.876249372959137,0.874520301818848 ,0.551191985607147,0.61811488866806,0.829396069049835,0.672635018825531,0.651278257369995,0.495612591505051,0.496858716011047 ,0.682246148586273,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069 ,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752 ,0.499421000480652,0.498835802078247,0.81444239616394,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315 ,0.49486768245697,0.49796661734581,0.498460471630096,0.803469717502594,0.49705970287323,0.494718581438065,0.504018425941467 ,0.494964092969894,0.514969348907471,0.506780028343201,0.497430324554443,0.506990075111389,0.499210506677628,0.498955190181732 ,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.833559393882751 ,0.46928659081459,0.459820955991745,0.729598581790924,0.76493626832962,0.571733355522156,0.497356355190277,0.493865221738815 ,0.629204213619232,0.47857478260994,0.495688110589981,0.481274753808975,0.497067838907242,0.770751476287842,0.8014115691185 ,0.508015990257263,0.745351433753967,0.494458675384521,0.494277447462082,0.500205874443054,0.707429111003876,0.49787762761116 ,0.6831995844841,0.869009733200073,0.498603701591492,0.800292253494263,0.498153626918793,0.498638093471527,0.507655739784241 ,0.497437328100204,0.482029527425766,0.445579886436462,0.447542548179626,0.456178933382034,0.691224992275238,0.68994003534317 ,0.696367621421814,0.646832704544067,0.690497040748596,0.512747287750244,0.52385687828064,0.577970147132874,0.56131386756897 ,0.553135573863983,0.57562243938446,0.582246720790863,0.528339803218842,0.5488241314888,0.532852530479431,0.519924283027649 ,0.504666149616241,0.476075559854507,0.486094027757645,0.449438631534576,0.482994347810745,0.45784518122673,0.449248284101486 ,0.514452159404755,0.561508595943451,0.498755604028702,0.53039538860321,0.512394607067108,0.534120500087738,0.494775086641312 ,0.483250230550766,0.548449218273163,0.590691864490509,0.528972744941711,0.518154919147491,0.570011258125305,0.575352251529694 ,0.54700493812561,0.520142495632172,0.502695500850677,0.505330801010132,0.444546610116959,0.477938383817673,0.467626750469208 ,0.483919441699982,0.498431533575058,0.498079359531403,0.49764558672905,0.496072262525558,0.497497260570526,0.499024957418442 ,0.498812049627304,0.517799317836761,0.524429976940155,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566 ,0.49948513507843,0.569468915462494,0.680891454219818,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751 ,0.498042225837708,0.509154617786407,0.505030632019043,0.528218388557434,0.499973088502884,0.499091774225235,0.499190449714661 ,0.570380747318268,0.535448849201202,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124 ,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.499798595905304,0.502025723457336,0.528575539588928 ,0.515362143516541,0.56660008430481,0.591955363750458,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474 ,0.494615614414215,0.497694700956345,0.498536199331284,0.498701572418213,0.504468858242035,0.499821990728378,0.500964164733887 ,0.529118895530701,0.595583856105804,0.559608042240143,0.509870648384094,0.497819513082504,0.498537451028824,0.499243289232254 ,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421 ,0.493789881467819,0.49458646774292,0.492286801338196,0.48815643787384,0.492628186941147,0.509193360805511,0.494705110788345 ,0.543936431407928,0.510835826396942,0.529115557670593,0.501953482627869,0.569758892059326,0.610815465450287,0.557083010673523 ,0.621949911117554,0.572470784187317,0.591342747211456,0.695724725723267,0.55320018529892,0.540745139122009,0.517162621021271 ,0.552327692508698,0.507378876209259,0.497698903083801,0.527704477310181,0.50039005279541,0.496325492858887,0.494565069675446 ,0.582824468612671,0.695666551589966,0.727506101131439,0.750860035419464,0.498115301132202,0.482150375843048,0.497372984886169 ,0.739583432674408,0.856374561786652,0.921864926815033,0.903915703296661,0.506085455417633,0.491403371095657,0.683231711387634 ,0.171146184206009,0.270570337772369,0.424545764923096,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409 ,0.498869776725769,0.407788127660751,0.406853288412094,0.278324812650681,0.1684460490942,0.190583914518356,0.237119317054749 ,0.196648374199867,0.182746469974518,0.163020357489586,0.261683225631714,0.259773045778275,0.278990775346756,0.496063411235809 ,0.519686937332153,0.49615415930748,0.544732213020325,0.653069257736206,0.612227141857147,0.612312376499176,0.576975464820862 ,0.592626690864563,0.625570714473724,0.599093317985535,0.597411274909973,0.564130961894989,0.549682676792145,0.729838013648987 ,0.750595331192017,0.539929986000061,0.500865161418915,0.500391781330109,0.0966039299964905,0.105603665113449,0.174986571073532 ,0.409532397985458,0.495501756668091,0.193169787526131,0.205573499202728,0.287738084793091,0.421045809984207,0.494261145591736 ,0.496202617883682,0.522774279117584,0.10176257789135,0.117253668606281,0.198547959327698,0.353632628917694,0.686014235019684 ,0.796516358852386,0.892734885215759,0.432033270597458,0.301140606403351,0.221199050545692,0.208233565092087,0.00253082648850977 ,0.00275990343652666,0.00274983723647892,0.00286803673952818,0.00353791960515082,0.00354324467480183,0.00348438322544098 ,0.00343684293329716,0.00327312108129263,0.00293036713264883,0.00278568617068231,0.0028021929319948,0.00250480184331536 ,0.00308231031522155,0.00499954726547003,0.0106547418981791,0.00859358441084623,0.0010503102093935,0.00117027142550796 ,0.00592980580404401,0.00331242568790913,0.0199999995529652,0.0762817785143852,0.13538670539856,0.159179985523224 ,0.127241417765617,0.172544106841087,0.19372533261776 Transform: 0.00974139876223667,-0.261572280877899,-0.965134713535369,0,-0.99808360954043,-0.0615269355671852,0.00660116218659385 ,0,-0.0611084648132926,0.963220827450316,-0.261670358354416,0,4.90243372735329,-0.726168719066309,-9.58014941330076 ,1 TransformLink: 0.00974139846069232,-0.998083578644817,-0.0611084629216841,0,-0.261572284969406,-0.0615269365295878,0.963220842516991 ,0,-0.965134745332177,0.00660116240407219,-0.261670366975266,0,-9.483837235735,4.91159978411053,-1.50780017761377 ,1 } Deformer: "SubDeformer::Cluster_Neck", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 94,95,96,108,109,122,123,124,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149 ,150,163,166,167,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,999 ,1010,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742 ,1743,1744,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796 ,1797,1798,1799,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826 ,1827,1828,1829,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2557,2585 ,2586,2587,2588,2676,2677,2688,2689,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3412,3413,3414 ,3415,3416,3417,3418,3419,3420,3421,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3469,3470 ,3471,3472,3473,3474,3475,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4098,4099,4155,4156,4157,4158,4159,4160 ,4161,4163,4203,4204,4205,4207,4208,4209,4210,4211,4212,4230,4231,4234,4235,4236,4237,4240,4248,4249,4250,4251,4252 ,4265,4266,4267,4268,4269,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487 ,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510 ,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533 ,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556 ,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579 ,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602 ,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625 ,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648 ,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671 ,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694 ,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717 ,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,5303,5304,5305,5306,5309,5311,5313,5314,5318 ,5319,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375 ,5376,5379,5380,5381,5382,5383,5384,5387,5388,5389,5391,5394,5395,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407 ,5408,5409,5410,5411,5412,5414,5415,5416,5417,5418,5425,5426,5427,5428,5429,5430,5431,5439,5444,5447,5448,5449,5450 ,5452,5453,5454,5455,5456,5457,5462,5467,5477,5478,5479,5480,5483,5484,5520,5524,5727,5728,5729,5730,5731,5732,5733 ,5734,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806 ,5807,5810,5811,5812,5813,5814,5815,5818,5819,5820,5822,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837 ,5838,5839,5840,5841,5842,5844,5845,5846,5847,5848,5855,5856,5857,5858,5859,5860,5861,5877,5878,5879,5880,5881,5882 ,5883,5884,5885,5886,5887,5893,5894,5898,5908,6001,6484,6485,6486,6487,6488,6489,6490,6491,9982,9983,9991,9992,9993 ,9998,10030,10031,10039,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066 ,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085 ,10086,10087,10088,10089,10091,10092,10093,10094,10100,10101,10102,10111,10112,10116,10133,10134,10135,10136,10145 ,10192,10200,10202,10205,10208,10209,10210,10211,10212,10213,10214,10215,10217,10218,10219,10220,10221,10222,10233 ,10234,10235,10236,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264 ,10265,10266,10267,10268,10269,10278,10279,10280,10282,10283,10284,10286,10287,10288,10289,10290,10291,10292,10293 ,10294,10295,10296,10297,10298,10300,10301,10302,10304,10305,10306,10307,10308,10309,10310,10317,10318,10319,10320 ,10321,10322,10323,10324,10325,10326,10327,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10340 ,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359 ,10360,10361,10363,10364,10365,10366,10367,10368,10370,10372,10373,10376,10377,10378,10394,10395,10415,10416,10419 ,10426,10427,10430,10431,10433,10436,10452,10453,10454,10455,10459,10462,10465,10466,10467,10468,10476,10477,10478 ,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10494,10495,10497,10498,10499,10500,10501 ,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520 ,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10541,10542,10543 ,10544,10550,10553,10571,10573,10575,10583,10586,10626,10632,10635,10638,10639,10641,10642,10643,10644,10645,10646 ,10647,10649,10650,10651,10652,10653,10654,10655,10657,10658,10659,10660,10671,10672,10673,10674,10675,10676,10682 ,10683,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702 ,10703,10704,10705,10706,10707,10708,10713,10715,10716,10717,10718,10719,10721,10722,10723,10724,10725,10726,10727 ,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10752 ,10753,10754,10755,10756,10757,10758,10759,10760,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772 ,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10792 ,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10808,10823,10824,10825,10844 ,10845,10848,10849,10855,10856,10857,10858,10859,10860,10862,10865,10880,10881,10882,10883,10886,10889,10892,10893 ,10894,10898,10901,10902,10903,10904,10905,10906,10907,10908 Weights: 0.567255795001984,0.594789087772369,1,0.485924780368805,0.528420746326447,1,1,0.25,0.489311069250107,0.392085492610931 ,0.399200916290283,0.367956221103668,0.407303422689438,0.416285485029221,0.430377572774887,0.41740095615387,0.377135217189789 ,0.420548111200333,0.393889129161835,0.375083416700363,0.464555472135544,0.463200926780701,0.460871756076813,0.430750489234924 ,0.40896874666214,0.415823668241501,0.389805644750595,0.430850774049759,0.406835645437241,1,0.268844544887543,0.450425446033478 ,0.456322252750397,0.450362801551819,0.4505615234375,0.37137359380722,0.319888979196548,0.333971530199051,0.377856224775314 ,0.461536556482315,0.4345563352108,0.425735384225845,0.447437614202499,0.403514206409454,0.434205532073975,0.309248238801956 ,0.318339675664902,0.508810639381409,0.544517993927002,0.517018139362335,0.488460779190063,0.486855179071426,0.488402009010315 ,0.565379500389099,0.531720817089081,0.533512532711029,0.570134997367859,0.592637956142426,1,1,0.596871972084045,0.460071235895157 ,0.483837783336639,0.496960788965225,0.517288565635681,0.490690231323242,0.527705907821655,0.531510651111603,0.564505398273468 ,0.568630576133728,0.412591725587845,0.460467159748077,0.501135110855103,0.431564539670944,1,1,1,1,1,0.278514921665192 ,0.315800756216049,1,1,1,0.295491874217987,0.423362791538239,0.427228540182114,0.431595623493195,0.437787711620331 ,0.438149452209473,0.441805690526962,0.450171411037445,0.445821523666382,0.43207174539566,0.421678841114044,0.420816749334335 ,0.440724223852158,0.449095875024796,0.158272460103035,0.214777141809464,0.23971700668335,0.317722767591476,0.34293207526207 ,0.384178310632706,0.453722923994064,0.37018746137619,0.2797671854496,0.272957593202591,0.468755125999451,0.456089347600937 ,0.453430771827698,0.367843747138977,0.374986797571182,0.423006445169449,0.391115933656693,0.400139689445496,0.418090730905533 ,0.398969799280167,0.45367106795311,0.374496161937714,0.348593175411224,0.337754309177399,0.448754966259003,0.439398765563965 ,0.412120491266251,0.40472885966301,0.395856976509094,0.491585850715637,0.417333751916885,1,1,0.446810632944107,0.444157123565674 ,0.436623930931091,0.305552244186401,0.321938186883926,0.45570120215416,0.456821322441101,0.421524226665497,0.410207986831665 ,0.439488798379898,0.430942058563232,0.486270278692245,0.387218713760376,0.513144791126251,0.553484082221985,0.527101457118988 ,0.492273092269897,0.488050699234009,0.493159621953964,0.572631776332855,0.536227822303772,0.536720275878906,0.575529217720032 ,0.602228164672852,1,1,0.609866917133331,0.454447686672211,0.484999120235443,0.497838407754898,0.525630235671997,0.493739008903503 ,0.554608345031738,0.549289286136627,0.577452898025513,0.585927069187164,0.404821395874023,0.461030542850494,0.52098685503006 ,0.475875169038773,1,1,1,1,1,1,0.34978786110878,1,1,1,0.267421126365662,0.413493543863297,0.420259416103363,0.425440341234207 ,0.43252557516098,0.431422144174576,0.436633944511414,0.420562446117401,0.409768640995026,0.410564452409744,0.431873440742493 ,0.441510498523712,0.178753688931465,0.248801708221436,1,0.341445356607437,0.399679660797119,0.401330173015594,0.312750190496445 ,0.289100527763367,0.260428875684738,0.0274547934532166,0.0250113885849714,0.020182766020298,0.0213320329785347,0.016894893720746 ,0.0194678697735071,0.0149198956787586,0.0193698238581419,0.0146699715405703,0.0137685351073742,0.0113338427618146 ,0.0107923075556755,0.0357030481100082,0.0397298000752926,0.0218236707150936,0.0282798446714878,0.0171993505209684 ,0.0227650869637728,0.0176588520407677,0.0130077684298158,0.0150612825527787,0.0187534429132938,0.0210761055350304 ,0.0117735685780644,0.0151852741837502,0.013343752361834,0.0096684992313385,0.012965239584446,0.00918575096875429 ,0.0302136708050966,0.0265279468148947,0.0199599303305149,0.015185602940619,0.0155232883989811,0.0111408829689026 ,0.0331871323287487,0.0244939364492893,0.0269742105156183,0.0207655429840088,0.0188741628080606,0.0187237989157438 ,0.038996160030365,0.0349120125174522,0.0274578537791967,0.0220344085246325,0.041811753064394,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.195673152804375,0.364670842885971,0.328575611114502,0.335197657346725 ,0.085664302110672,0.0847082063555717,0.109214313328266,0.145181283354759,1,0.292138516902924,0.1701730042696,0.268163949251175 ,0.274444133043289,0.123346589505672,0.0517623275518417,0.0323195643723011,0.0741127878427505,0.108336910605431,0.0483566932380199 ,0.0131363812834024,0.0477573983371258,0.00303209642879665,0.0137467281892896,0.00896062422543764,0.00180904532317072 ,0.0341183207929134,0.0385043062269688,0.293479233980179,0.160098940134048,0.155995458364487,0.199746564030647,0.0119855618104339 ,0.237626984715462,0.440084129571915,0.233796462416649,0.444397240877151,0.309454947710037,0.160931527614594,0.369414836168289 ,0.386035412549973,0.161727607250214,0.106181867420673,0.0822702571749687,0.0846450924873352,0.0603290311992168,0.0332393832504749 ,0.0122639155015349,0.0174598526209593,0.0603569746017456,0.263093948364258,0.33202987909317,0.0128398509696126,0.00547032617032528 ,0.00472192838788033,0.0279744360595942,0.0175511501729488,0.0347373820841312,0.0315300486981869,0.0298746712505817 ,0.0178451966494322,0.00422401027753949,0.00319708767347038,0.00969248823821545,0.00549563439562917,0.0098872184753418 ,0.116298198699951,0.113489478826523,0.0818140730261803,0.0848385840654373,0.116220399737358,0.0814184322953224,0.11701412498951 ,0.095750592648983,0.00365511584095657,0.019964512437582,0.00232761516235769,0.00926866568624973,0.00592594314366579 ,0.00528620649129152,0.273272782564163,0.00890387129038572,0.0180002469569445,0.0394606180489063,0.147415712475777 ,0.140457794070244,0.0401500388979912,0.0032884725369513,0.0260648149996996,0.0329115353524685,0.0179773308336735 ,0.00425787409767509,0.00778371561318636,0.00381025741808116,0.00544504728168249,0.211386486887932,0.215239286422729 ,0.231434643268585,0.408174365758896,0.367100775241852,0.128619104623795,1,0.304448693990707,0.176563605666161,0.274393022060394 ,0.283235043287277,0.129507526755333,0.0551842972636223,0.034300934523344,0.078447587788105,0.114036232233047,0.0511978343129158 ,0.0139047084376216,0.0508126877248287,0.0317802466452122,0.142172694206238,0.0929999127984047,0.0189517624676228 ,0.34366649389267,0.393704414367676,0.294252127408981,0.161952465772629,0.163479775190353,0.213232666254044,0.125898495316505 ,0.247030854225159,0.443164050579071,0.233504742383957,0.450279980897903,0.309741675853729,0.162085667252541,0.379501342773438 ,0.25,0.168081417679787,0.107104353606701,0.0829724371433258,0.0879543945193291,0.0629429370164871,0.183462262153625 ,0.0351017713546753,0.0128694428130984,0.0183484964072704,0.0632648542523384,0.259588420391083,0.0136276334524155 ,0.0057412046007812,0.00497032888233662,0.0297496803104877,0.0184993632137775,0.0365210957825184,0.0330784022808075 ,0.0315940752625465,0.0185253042727709,0.00435465015470982,0.00335264601744711,0.0100949313491583,0.00577421206980944 ,0.0104488199576736,0.117551773786545,0.126195579767227,0.0899995565414429,0.103110551834106,0.140919372439384,0.082244835793972 ,0.11901718378067,0.0211004968732595,0.0245979446917772,0.00974327325820923,0.00623384583741426,0.161613687872887 ,0.0055119595490396,0.282902300357819,0.00928386207669973,0.018939271569252,0.0417766198515892,0.154402107000351,0.143449380993843 ,0.147689074277878,0.0421619713306427,0.0346495062112808,0.00349515746347606,0.220319107174873,0.225046843290329,0.240709781646729 ,0.40315368771553,0.378050059080124,0.136889830231667,1,0.314606815576553,0.00275175319984555,0.00350375100970268 ,0.00223227171227336,0.00326038477942348,0.00345232943072915,0.00327272177673876,0.00360468029975891,0.00282804574817419 ,0.00355280679650605,1,1,0.00362786720506847,0.00348612759262323,1,1,1,1,0.00774744292721152,0.0106565840542316,0.00863821338862181 ,0.00595487840473652,0.0128081925213337,0.0164071209728718,0.016546867787838,0.25,0.25,1,0.25,0.25,0.25,0.25,0.00147943664342165 ,0.00134516227990389,0.0044733015820384,0.00360238761641085,0.00173059292137623,0.00240649236366153,0.00280290725640953 ,0.00358973792754114,0.00190061377361417,0.0248462148010731,0.151691138744354,0.101414285600185,0.101350642740726 ,0.00352429714985192,0.00175461545586586,0.00108897860627621,0.00120286992751062,0.00216193147934973,0.0918875187635422 ,0.0180216785520315,0.00100491382181644,0.00119083886966109,0.00139025796670467,0.00597331812605262,0.00791144277900457 ,0.00467343721538782,0.00444712163880467,0.0175031926482916,0.0186443794518709,0.0193254761397839,0.0109613062813878 ,0.0139002539217472,0.0153780998662114,0.0041714389808476,0.00452382443472743,0.00202354602515697,0.5,1,0.25,0.25 ,0.25,0.25,0.101412929594517,0.5,0.25,0.5,0.5,0.5,0.5,0.0021704516839236,0.00124227663036436,0.00209963205270469,0.00538497371599078 ,0.5,0.0101059842854738,0.0141486637294292,0.0122741842642426,0.0101597858592868,0.0116839092224836,0.00574857275933027 ,0.00651532784104347,0.00907000526785851,0.00696895597502589,0.0087407324463129,0.00351020158268511,0.00782129820436239 ,1,1,1,1,1,1,1,1,0.00179124786518514,0.00472647324204445,0.00530879013240337,0.00628127250820398,0.00882341712713242 ,0.00924219656735659,0.00794229563325644,0.0049978494644165,0.0205187033861876,0.00416509388014674,1,1,1,1,1,1,1,1 ,0.0047590765170753,0.00339766312390566,1,1,0.00117793213576078,0.0049570444971323,0.004824782256037,0.0124465888366103 ,0.0127216335386038,1,1,1,1,0.0186837278306484,0.0140060009434819,0.00721948593854904,1,1,0.00884454976767302,1,0.00395213393494487 ,1,0.0116208745166659,0.013472743332386,0.0186006035655737,0.0184362661093473,0.011931050568819,0.0167338736355305 ,0.0170167628675699,0.0126416739076376,0.0168435014784336,0.00547084817662835,0.0172698926180601,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00125138647854328,0.00204948312602937,0.00359823647886515,0.00145057961344719,0.00187749601900578 ,0.00122394051868469,0.00116844475269318,0.0013314897660166,0.00126363977324218,0.00163859105668962,0.00136439059861004 ,0.00143550056964159,0.00218372559174895,0.00267671863548458,0.00233855727128685,0.00157993321772665,0.00108630012255162 ,0.00163278100080788,0.00147458596620709,0.00104575627483428,0.00109344394877553,0.00156189978588372,0.0027174826245755 ,1,0.25,0.00419261958450079,0.00326536339707673,0.00335888448171318,0.00118930672761053,0.00312373973429203,0.25,0.00116739247459918 ,0.00136812450364232,1,0.0136201335117221,0.0129918465390801,0.0130262523889542,0.0141849555075169,0.0142200998961926 ,0.0202176105231047,0.00510521046817303,0.0147238532081246,0.010338207706809,0.00867407489567995,1,1,1,0.00789877492934465 ,0.00324751692824066,0.00364983663894236,0.0022549747955054,1,0.00544625706970692,0.00590713182464242,1,1,1,1,1,0.00919234938919544 ,0.00692324060946703,0.0103907808661461,0.0123759154230356,0.016865961253643,0.0124860825017095,0.0155578637495637 ,0.25,0.25,0.25,0.25,0.25,0.00203575659543276,0.00208194018341601,0.00567516684532166,0.00245430134236813,0.00209734006784856 ,0.0054551437497139,0.00334027502685785,0.00234061665832996,0.00376753066666424,0.0190892461687326,0.101087607443333 ,0.102376267313957,0.00378289772197604,0.00555694475769997,0.00121506373398006,0.00127516605425626,0.00153478526044637 ,0.00121405138634145,0.0919240638613701,0.00373780587688088,0.00167861278168857,0.00223392457701266,0.00221726926974952 ,0.0106646819040179,0.00716324429959059,0.0345897115767002,0.00900897104293108,0.0182691775262356,0.00811813399195671 ,0.0113305104896426,0.0197549313306808,0.0211176052689552,0.0061979959718883,0.0087542524561286,0.0139151802286506 ,0.00718409521505237,0.00402087578549981,0.00166014290880412,0.00292091490700841,0.00405985442921519,0.00209410861134529 ,0.00352013343945146,0.5,0.25,0.25,1,0.25,0.25,0.101336054503918,0.5,0.25,0.5,0.5,0.00412551639601588,0.00775624206289649 ,0.00404722802340984,0.00429436750710011,0.00155673618428409,0.0014443468535319,0.00130896712653339,0.00134402082767338 ,0.0104999812319875,0.0105549236759543,0.0127923814579844,0.0147713171318173,0.0141640063375235,0.011232266202569 ,0.01196941267699,0.0103948712348938,0.00805490650236607,0.00575671857222915,0.0102886073291302,0.0108860861510038 ,1,1,1,1,1,1,1,1,0.00152104836888611,0.00132340157870203,0.00119240442290902,0.00119349034503102,0.00247540534473956 ,0.00618533464148641,0.00595171796157956,0.00725632114335895,0.0107390712946653,0.00959169398993254,0.00815762672573328 ,0.00856028590351343,0.00995538290590048,0.0215687062591314,1,1,1,1,1,1,1,1,0.00500578666105866,0.00820006150752306 ,0.00368156004697084,1,1,0.00129385036416352,0.00134667137172073,0.00484176818281412,0.00508514931425452,0.0135751375928521 ,0.25,1,1,1,1,0.0191637482494116,0.0159182604402304,0.00941314082592726,1,0.00361253484152257,1,1,0.0125703969970346 ,0.0191097129136324,0.0188217274844646,0.0150680541992188,0.0141781587153673,0.0193612296134233,0.0181489326059818 ,0.0193812530487776,0.0148670021444559,0.00837697088718414,0.0181021224707365,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,0.00221460894681513,0.00483389338478446,0.00995899457484484,0.00166275002993643,0.00107236753683537,0.00141309737227857 ,0.00251308549195528,0.00117712223436683,0.00119686732068658,0.00369730149395764,0.00232940819114447,0.00343035673722625 ,0.00512200966477394,0.00415379228070378,0.00224908231757581,0.00186692702118307,0.00240918109193444,0.0036583230830729 ,0.00148228707257658,0.00362345040775836,0.00243953289464116,0.00497984746471047,0.00342305307276547,0.00419780611991882 ,0.00295878807082772,0.00106835423503071,0.00148653844371438,0.00132255384232849,0.00168555148411542,0.00212236680090427 ,0.00320635898970068,0.25,0.25,0.00437035784125328,0.00346185616217554,0.00354567030444741,0.00130656303372234,0.00313585111871362 ,0.00616921996697783,0.00590131152421236,0.00172159122303128,0.00200400478206575,0.00266929413191974,0.0020909383893013 ,0.00145117833744735,0.0025090635754168,0.00256710313260555,0.00129591429140419,0.00128374621272087 Transform: 0.0524868350678716,0.0529138509284646,0.997218759939732,0,0.940038672709068,-0.339614138039713,-0.0314568518442159 ,0,0.337005086578302,0.939075270948667,-0.0675663372191003,0,-56.3654154323426,21.2906301347447,1.65101161799859,1 TransformLink: 0.0524868349406584,0.94003867043068,0.337005085761497,0,0.052913850775869,-0.339614137060317,0.939075268240515,0,0.997218761307028 ,-0.0314568518873467,-0.0675663373117412,0,0.18545326968084,60.2682047899057,-0.886519735148667,1 } Deformer: "SubDeformer::Cluster_L_Ball", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904 ,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927 ,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950 ,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973 ,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996 ,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019 ,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042 ,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547 ,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570 ,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593 ,8594,8595,8596,8597,8598,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617 ,8618,8619,8620,8623,8628,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648 ,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671 ,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694 ,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717 ,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740 ,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763 ,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786 ,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810 ,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833 ,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856 ,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879 ,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902 ,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925 ,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948 ,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971 ,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994 ,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9010,9011,9012,9013,9014,9015,9016,9017,9018 ,9019,9020,9021,9022,9023,9024,9025,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044 ,9045,9046,9047,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068 ,9069,9070,9071,9072,9073,9074,9075,9077,9078,9079,9086,9087,9141,9222,9223,9224,9225,9226,9227,9229,9233,9234,9235 ,9238,9241,9242,9243,9244,9245,9246,9247,9248,9249,9251,9252,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265 ,9266,9267,9268,9270,9271,9272,9273,9274,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9332 ,9333,9334,9335,9336,9338,9339,9344,9345,9347,9348,9349,9354,9355,9356,9357,9369,9370,9371,9372,9383,9384,9385,9386 ,9388,9389,9390,9391,9392,9393,9394,9396,9397,9398,9399,9400,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417 ,9418,9419,9420,9421,9422,9423,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834 ,9835,9836,9837,9838,9839,9840,9841,9901,9902,9903,9904,9905,9906,9907,9908,9923,9924,9925,9926 Weights: 0.119809061288834,0.0899978801608086,0.129694148898125,0.157971039414406,0.0655382722616196,0.102676093578339,0.0493819825351238 ,0.0801638662815094,0.0396263524889946,0.0630189478397369,0.135046094655991,0.107540957629681,0.11192848533392,0.142919838428497 ,0.0843309238553047,0.0852136611938477,0.0635753720998764,0.0593578219413757,0.192490458488464,0.200015053153038,0.162885546684265 ,0.191255062818527,0.170955494046211,0.139657527208328,0.176798492670059,0.156122818589211,0.161453932523727,0.0408337861299515 ,0.0603096075356007,0.0812023133039474,0.0624551698565483,0.029839189723134,0.0544516630470753,0.054666955024004,0.0336862355470657 ,0.0624573267996311,0.0633768364787102,0.0567393265664577,0.0580587983131409,0.0563296005129814,0.0576892644166946 ,0.104413233697414,0.0770940035581589,0.0993608608841896,0.118208408355713,0.0997513458132744,0.123212285339832,0.144008576869965 ,0.144543543457985,0.125933632254601,0.101286850869656,0.120418056845665,0.0898743644356728,0.082826592028141,0.175235584378242 ,0.206051632761955,0.20803314447403,0.287898749113083,0.352314889431,0.320552468299866,0.262158662080765,0.332916170358658 ,0.405986249446869,0.319005310535431,0.420205354690552,0.288312464952469,0.414280354976654,0.276978254318237,0.243617594242096 ,0.281397551298141,0.316190302371979,0.245399445295334,0.300980687141418,0.194138199090958,0.267054826021194,0.240853235125542 ,0.281522959470749,0.253161817789078,0.234090819954872,0.226632595062256,0.261527568101883,0.187547445297241,0.160497680306435 ,0.364978283643723,0.263920068740845,0.407592862844467,0.289993405342102,0.17541928589344,0.242737710475922,0.195276826620102 ,0.137758135795593,0.269458144903183,0.206763193011284,0.140182182192802,0.129011526703835,0.172453701496124,0.147585853934288 ,0.199256956577301,0.148286879062653,0.234329968690872,0.245895057916641,0.216519474983215,0.188423424959183,0.103776790201664 ,0.191133603453636,0.185088723897934,0.0749577209353447,0.166032284498215,0.0475209578871727,0.13492988049984,0.0298269018530846 ,0.100796863436699,0.0224829353392124,0.141362354159355,0.175193801522255,0.0989582315087318,0.0417463518679142,0.0243088398128748 ,0.0775943920016289,0.0157915055751801,0.0797843635082245,0.0186276473104954,0.0958492234349251,0.0739613026380539 ,0.0987996235489845,0.313051700592041,0.342331558465958,0.399825572967529,0.411330610513687,0.397170573472977,0.275049090385437 ,0.239233568310738,0.211740121245384,0.243876278400421,0.352577656507492,0.388358443975449,0.183568000793457,0.165666341781616 ,0.0815498232841492,0.111265502870083,0.0577223934233189,0.042687963694334,0.0341188460588455,0.208152711391449,0.181814447045326 ,0.215607687830925,0.150894671678543,0.0531679205596447,0.0347578637301922,0.0246079619973898,0.0286764390766621,0.0848506242036819 ,0.113070398569107,0.132778897881508,0.146839424967766,0.326059967279434,0.358287960290909,0.412675321102142,0.427787512540817 ,0.424188673496246,0.250109553337097,0.284029006958008,0.265100747346878,0.23208250105381,0.372414231300354,0.417168736457825 ,0.202001944184303,0.178038120269775,0.21736142039299,0.148579463362694,0.0343438498675823,0.0178217813372612,0.0483061522245407 ,0.0802863091230392,0.0154612669721246,0.00884495582431555,0.024283966049552,0.040769174695015,0.0130178304389119 ,0.0205114874988794,0.0153527930378914,0.016140166670084,0.0136747797951102,0.00986284576356411,0.00427819881588221 ,0.00722352927550673,0.00711198942735791,0.0163313783705235,0.0112073970958591,0.00929472502321005,0.0253093186765909 ,0.0200225468724966,0.0138108003884554,0.00415289960801601,0.00256811967119575,0.00319767044857144,0.0112569211050868 ,0.0154976118355989,0.00776961492374539,0.0317798443138599,0.0830756649374962,0.0679816603660584,0.002111661946401 ,0.00217902287840843,0.00262391986325383,0.0132161434739828,0.104563571512699,0.126195386052132,0.159771472215652 ,0.159212738275528,0.0733592361211777,0.100023798644543,0.1074343547225,0.111484587192535,0.0233124699443579,0.0703045204281807 ,0.010179772041738,0.0060359057970345,0.00849007628858089,0.00860253255814314,0.019992146641016,0.00909887067973614 ,0.0370676107704639,0.0633366629481316,0.135420516133308,0.120002366602421,0.157945588231087,0.160173356533051,0.060064110904932 ,0.0850093364715576,0.084347702562809,0.00733144860714674,0.00175352673977613,0.0131671754643321,0.00396548444405198 ,0.0915219038724899,0.138763025403023,0.00711936876177788,0.001887789927423,0.00187672674655914,0.00180047412868589 ,0.00188750913366675,0.0146881053224206,0.0102584706619382,0.00863561127334833,0.00683643994852901,0.00424826936796308 ,0.00276495539583266,0.0034044929780066,0.00569254253059626,0.00191985000856221,0.0027708294801414,0.00209227530285716 ,0.00309577863663435,0.00212210300378501,0.0015722387470305,0.00134062161669135,0.00130497117061168,0.204428568482399 ,0.240890353918076,0.215098306536675,0.146842062473297,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901 ,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.435047715902328,0.462608724832535,0.383706748485565 ,0.344641864299774,0.235167190432549,0.212380930781364,0.181989669799805,0.345770686864853,0.118253737688065,0.0800283998250961 ,0.0991662740707397,0.0648122876882553,0.100251704454422,0.113893955945969,0.0691032484173775,0.154710173606873,0.157654821872711 ,0.335175216197968,0.285561293363571,0.411798715591431,0.464162200689316,0.497483104467392,0.497408628463745,0.493552297353745 ,0.345870792865753,0.369031637907028,0.495175987482071,0.403188109397888,0.498849123716354,0.497773230075836,0.497934967279434 ,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.492458581924438 ,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.493433386087418,0.495421648025513 ,0.496160745620728,0.496107131242752,0.418340176343918,0.434583425521851,0.339237004518509,0.31533095240593,0.416455090045929 ,0.295802593231201,0.214149355888367,0.201820328831673,0.205367624759674,0.0822143629193306,0.0956392288208008,0.0748522356152534 ,0.0653277561068535,0.0626779273152351,0.0779718831181526,0.0524279996752739,0.0528356619179249,0.0511609353125095 ,0.0496504344046116,0.0658826380968094,0.0637751594185829,0.0336999036371708,0.0348111018538475,0.00433988263830543 ,0.00446385284885764,0.0678059607744217,0.0538580566644669,0.0546310767531395,0.0104043334722519,0.116521611809731 ,0.090772956609726,0.0542768314480782,0.0352695845067501,0.0424237586557865,0.0887500420212746,0.153960809111595,0.280644834041595 ,0.242277592420578,0.124399460852146,0.495814889669418,0.495124042034149,0.495348423719406,0.464802771806717,0.487164556980133 ,0.470115929841995,0.443319916725159,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.312596261501312 ,0.216291069984436,0.292845606803894,0.348908662796021,0.131920486688614,0.20519183576107,0.495361059904099,0.494524925947189 ,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.381458014249802,0.444033443927765 ,0.423699676990509,0.40310999751091,0.31701996922493,0.01352006662637,0.00623834365978837,0.194196224212646,0.0081644132733345 ,0.128129526972771,0.00901213102042675,0.0167376678436995,0.108408644795418,0.035431731492281,0.440156221389771,0.377069413661957 ,0.158670663833618,0.0304759200662375,0.0383747220039368,0.00827804021537304,0.00587422773241997,0.0275462977588177 ,0.00514383288100362,0.00309813022613525,0.00165706186089665,0.00308532593771815,0.00344883580692112,0.00153451645746827 ,0.00134903774596751,0.00255205435678363,0.00177448592148721,0.00161401403602213,0.0024589782115072,0.00104652903974056 ,0.00126132590230554,0.00246899691410363,0.00533299054950476,0.00599044188857079,0.00394871924072504,0.00192845857236534 ,0.0027121368329972,0.494946539402008,0.00399358989670873,0.00302386237308383,0.0626282393932343,0.493795990943909 ,0.495063692331314,0.488114684820175,0.495184719562531,0.479027658700943,0.487426996231079,0.49675327539444,0.485897928476334 ,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188 ,0.499147802591324,0.00467635691165924,0.0670545846223831,0.102516353130341,0.171086966991425,0.131708532571793,0.391339808702469 ,0.0549012310802937,0.011670021340251,0.112286701798439,0.0454526841640472,0.00833240710198879,0.0372853241860867 ,0.00577836437150836,0.220962136983871,0.112559981644154,0.051339328289032,0.0841941982507706,0.494763672351837,0.494477927684784 ,0.496494054794312,0.117242857813835,0.49773570895195,0.225124195218086,0.0650158226490021,0.498591303825378,0.197639212012291 ,0.00366536597721279,0.0026983511634171,0.485027343034744,0.00510318018496037,0.0358083508908749,0.155403360724449 ,0.154275134205818,0.122542470693588,0.291669100522995,0.153436154127121,0.152971222996712,0.323384523391724,0.164903864264488 ,0.211265802383423,0.21014766395092,0.25732234120369,0.259123921394348,0.24392506480217,0.26708647608757,0.259630799293518 ,0.213490962982178,0.158189788460732,0.158966541290283,0.147020593285561,0.189305245876312,0.176712840795517,0.13990107178688 ,0.154465168714523,0.182679980993271,0.122141182422638,0.154182508587837,0.173029288649559,0.185888528823853,0.215016633272171 ,0.153718262910843,0.19850005209446,0.22823129594326,0.147075280547142,0.186001405119896,0.158042415976524,0.192552268505096 ,0.233826741576195,0.302742838859558,0.274362176656723,0.202020406723022,0.248197495937347,0.187687203288078,0.230491310358047 ,0.270352780818939,0.172357693314552,0.142427876591682,0.177623927593231,0.216424167156219,0.177695736289024,0.49823185801506 ,0.497802197933197,0.493438005447388,0.497677952051163,0.499043405056,0.498800069093704,0.480737179517746,0.473599851131439 ,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.428288877010345,0.298123270273209 ,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.484404802322388,0.48499321937561 ,0.456718504428864,0.499969571828842,0.499186664819717,0.499278783798218,0.426042973995209,0.454804599285126,0.49847537279129 ,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589 ,0.499071568250656,0.494272619485855,0.496581465005875,0.46791198849678,0.475545167922974,0.412802815437317,0.393669903278351 ,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497017949819565,0.498391449451447 ,0.498559087514877,0.490382015705109,0.499798029661179,0.497542917728424,0.467545807361603,0.391185462474823,0.422848254442215 ,0.482203125953674,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559 ,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558 ,0.484863072633743,0.479086011648178,0.437741309404373,0.471439510583878,0.429207265377045,0.474411964416504,0.453916072845459 ,0.479357570409775,0.40096178650856,0.372501075267792,0.425279170274735,0.368588149547577,0.416071623563766,0.398315280675888 ,0.304622709751129,0.434937685728073,0.446757704019547,0.470192223787308,0.435698121786118,0.488551676273346,0.497512698173523 ,0.46674171090126,0.476854473352432,0.48199325799942,0.480819195508957,0.402228116989136,0.166978493332863,0.147668540477753 ,0.137913808226585,0.00371660990640521,0.0360510423779488,0.0051951096393168,0.142808973789215,0.0712238401174545 ,0.0408410467207432,0.0475897714495659,0.147152066230774,0.188807547092438,0.172839537262917,0.00292108580470085,0.00229511526413262 ,0.00176306103821844,0.00133823312353343,0.00133625592570752,0.00191617012023926,0.00224431487731636,0.00722364755347371 ,0.0104683004319668,0.0168343223631382,0.0028557509649545,0.00251159467734396,0.00577683001756668,0.00345012429170311 ,0.00296396017074585,0.00282692280597985,0.0128484172746539,0.0095820389688015,0.00735749956220388,0.00728109432384372 ,0.00222123926505446,0.00233622593805194,0.00484567414969206,0.00572063308209181,0.0406887419521809,0.0657581984996796 ,0.067342184484005,0.0861546471714973,0.0813479200005531,0.125508472323418,0.00697338348254561,0.0218249130994082 ,0.00429057935252786,0.00421941420063376,0.00140310742426664,0.00193769996985793,0.00202646269463003,0.00154978304635733 ,0.00140596809796989,0.00627871742472053,0.00652931304648519,0.00638186885043979,0.0052344617433846,0.00497622787952423 ,0.00719883758574724,0.0146173173561692,0.00557320425286889,0.00636823568493128,0.00689202733337879,0.00697624310851097 ,0.00970681756734848,0.0112742707133293,0.00393346231430769,0.00402365624904633,0.00522507447749376,0.00604073889553547 ,0.00587788922712207,0.00498025165870786,0.00626034289598465,0.00972524099051952,0.00114239507820457,0.00111113348975778 ,0.00414171675220132,0.00236102729104459,0.00183009263128042,0.00206261011771858,0.00431667268276215,0.00359163619577885 ,0.00402410188689828,0.00112126138992608,0.00112171703949571,0.00105882645584643,0.0145033225417137,0.0118997758254409 ,0.00529940519481897,0.00493975775316358,0.0143253924325109,0.0182842966169119,0.00492833275347948,0.00116543157491833 ,0.00208847760222852,0.00127227208577096,0.00117679627146572,0.0010990530718118,0.00108396471478045,0.00175433943513781 ,0.00203517079353333,0.00282048876397312,0.00822119135409594,0.00263078394345939,0.00141910591628402,0.00192295201122761 ,0.00138450774829835,0.00150411960203201,0.00203976663760841,0.00228403392247856,0.00198729173280299,0.00215014256536961 ,0.00130972138140351,0.00220602191984653,0.00217434973455966,0.00222587212920189,0.00128076423425227,0.003685612231493 ,0.00424104742705822,0.0036343524698168,0.00437509920448065,0.00102109019644558,0.0035608890466392,0.00179338501766324 ,0.00302712712436914,0.00102148356381804,0.00169268297031522,0.00118136254604906,0.00139748852234334,0.00162950914818794 ,0.0013056379975751,0.00101929879747331,0.00140442245174199,0.00219127861782908,0.00270291790366173,0.00329401204362512 ,0.00326476339250803,0.00271518155932426,0.00183340918738395,0.00250248983502388,0.00276692444458604,0.00340437423437834 ,0.00259506911970675,0.00460862275213003,0.00593590689823031,0.00691225472837687,0.00340974167920649,0.00509058265015483 ,0.00112110888585448,0.00121387781109661,0.0169682279229164,0.00548749091103673,0.00543259875848889,0.0201374050229788 ,0.0169682689011097,0.0109495837241411,0.00279454910196364,0.00127399724442512,0.00247281650081277,0.00270849862135947 ,0.00316046690568328,0.00136727222707123,0.00219548284076154,0.00320045603439212,0.00428038323298097,0.00147910148371011 ,0.00178130087442696,0.00333713716827333,0.0066437222994864,0.0122147183865309,0.0129707679152489,0.00197774101980031 ,0.00191754603292793,0.00388525449670851,0.00632278667762876,0.00660149846225977,0.00896979309618473,0.00456717424094677 ,0.00206927349790931,0.00231582089327276,0.00252133025787771,0.00406703725457191,0.00486808829009533,0.00824273750185966 ,0.00917720515280962,0.00850125029683113,0.0078301252797246,0.00287978257983923,0.00298473541624844,0.00218153605237603 ,0.00340549414977431,0.00411564903333783,0.00403880747035146,0.00348933646455407,0.00343293184414506,0.0105488328263164 ,0.0172855090349913,0.0181334689259529,0.017433799803257,0.01199746504426,0.00992203690111637,0.00504820328205824 ,0.00421494618058205,0.0042849900200963,0.00263979216106236,0.00343404896557331,0.00158844341058284,0.00203547044657171 ,0.00423127179965377,0.00304207019507885,0.00291611929424107,0.00767210964113474,0.00936917960643768,0.00764511292800307 ,0.00547787873074412,0.00499632721766829,0.00369138456881046,0.00168789469171315,0.00615179724991322,0.0075200037099421 ,0.00723410304635763,0.00540610775351524,0.0049501764588058,0.00335015472956002,0.00170559796970338,0.0010561659000814 ,0.00194478419143707,0.0029250062070787,0.00340850092470646,0.00362419104203582 Transform: 0.255589736853964,-0.0564818010109387,-0.965134033467747,0,0.191954145948709,0.981381637988871,-0.00659877056532776 ,0,0.94753756318427,-0.183574891667538,0.261673019249779,0,-6.70568177723435,2.10466317765816,9.65255217683966,1 TransformLink: 0.255589751837361,0.191954157201607,0.947537618731615,0,-0.0564818092528826,0.981381781194155,-0.183574918455175,0 ,-0.965134018668391,-0.00659877046414227,0.261673015237287,0,11.1487851983253,-0.7145996278846,4.21443668153796,1 } Deformer: "SubDeformer::Cluster_R_Ball", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734 ,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757 ,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780 ,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803 ,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826 ,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849 ,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872 ,3873,3874,3875,3876,3877,3878,3879,3880,3881,7592,7593,7647,7727,7728,7729,7730,7731,7732,7734,7735,7737,7740,7741 ,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7758,7759,7760,7762,7763,7764,7765,7766,7768,7769 ,7770,7771,7772,7775,7776,7777,7778,7779,7780,7781,7782,7824,7825,7826,7827,7829,7839,7840,7841,7842,7843,7844,7845 ,7846,7857,7858,7871,7872,7874,7875,7876,7877,7879,7880,7881,7901,7902,7904,7905,7906,7907,7973,7974,7975,7976,7977 ,7978,7979,7980,7981,7982,7983,7985,7986,7987,7988,7989,7990,7991,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009 ,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032 ,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055 ,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079 ,8080,8081,8082,8083,8084,8085,8086,8087,8090,8095,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110 ,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133 ,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156 ,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179 ,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202 ,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225 ,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248 ,8249,8250,8251,8252,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273 ,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296 ,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319 ,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342 ,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365 ,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388 ,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411 ,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434 ,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457 ,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8477,8478,8479,8480,8481 ,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507 ,8508,8509,8510,8511,8512,8513,8514,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531 ,8532,8533,9873,9879,9880,9895,9896,9897,9898,9899,9900 Weights: 0.123883679509163,0.0943474769592285,0.134961158037186,0.162639766931534,0.0697063133120537,0.108251556754112,0.0524033196270466 ,0.0847631022334099,0.0409382507205009,0.0650418773293495,0.14041543006897,0.113288789987564,0.118082284927368,0.148398548364639 ,0.0891185849905014,0.0906334742903709,0.0656642466783524,0.0616054534912109,0.198496952652931,0.205138891935349,0.167858138680458 ,0.198637783527374,0.178409427404404,0.143416181206703,0.18131497502327,0.159762680530548,0.166233062744141,0.0380784012377262 ,0.0574136562645435,0.0774901211261749,0.0586475282907486,0.0280960090458393,0.0517396591603756,0.0539015904068947 ,0.033189844340086,0.0585433878004551,0.0591700300574303,0.0535746328532696,0.0552171356976032,0.0553255528211594 ,0.0569242052733898,0.0996541529893875,0.0730480924248695,0.0954719707369804,0.114045724272728,0.0943200141191483 ,0.118832118809223,0.142830416560173,0.142114534974098,0.121966376900673,0.0975252166390419,0.118137270212173,0.0873210653662682 ,0.0790054202079773,0.179913774132729,0.21073853969574,0.212490528821945,0.293317466974258,0.356615632772446,0.324366360902786 ,0.26684308052063,0.339021861553192,0.41007000207901,0.326832801103592,0.424576759338379,0.293492197990417,0.417733579874039 ,0.282556712627411,0.249511927366257,0.288817554712296,0.32280421257019,0.255000025033951,0.309341222047806,0.199754640460014 ,0.272426426410675,0.245370149612427,0.284887552261353,0.258011996746063,0.239316925406456,0.221955522894859,0.255657911300659 ,0.181189134716988,0.155432507395744,0.362362623214722,0.259469360113144,0.408041507005692,0.289074867963791,0.169036522507668 ,0.237904220819473,0.189767897129059,0.131405979394913,0.268256455659866,0.205114126205444,0.135546118021011,0.123717814683914 ,0.170050665736198,0.143152132630348,0.196216776967049,0.143190503120422,0.239085361361504,0.249148860573769,0.219918861985207 ,0.191812127828598,0.10781441628933,0.196348652243614,0.191489323973656,0.0791347473859787,0.17438517510891,0.0512946061789989 ,0.143159300088882,0.032307855784893,0.104688346385956,0.0235143061727285,0.144969567656517,0.178616628050804,0.0947948545217514 ,0.0392751023173332,0.0221151169389486,0.0722370743751526,0.0144961653277278,0.0750427767634392,0.0181457158178091 ,0.0943982899188995,0.0716638267040253,0.0967202931642532,0.317489057779312,0.347536385059357,0.404977738857269,0.417175382375717 ,0.40199014544487,0.27864933013916,0.242633402347565,0.206443920731544,0.236668929457664,0.348675906658173,0.388408333063126 ,0.18049268424511,0.163328364491463,0.0857354551553726,0.11523699015379,0.061653770506382,0.0454688034951687,0.0353203043341637 ,0.211448967456818,0.185158059000969,0.218788504600525,0.154455900192261,0.0504671223461628,0.0322298295795918,0.0230359863489866 ,0.0282043348997831,0.0824511051177979,0.11091822385788,0.130749419331551,0.144796341657639,0.329870730638504,0.362595438957214 ,0.416694194078445,0.432004392147064,0.427564829587936,0.253307223320007,0.287334799766541,0.259040862321854,0.227359682321548 ,0.369799613952637,0.41771399974823,0.1991196423769,0.175765603780746,0.220586806535721,0.146419927477837,0.0011718375608325 ,0.00114911294076592,0.00105914357118309,0.0153474509716034,0.0122399032115936,0.0149848219007254,0.0193942412734032 ,0.00106044148560613,0.00466891191899776,0.00221512629650533,0.00135503942146897,0.00115020526573062,0.00108056294266135 ,0.00109034439083189,0.00207694387063384,0.00295530282892287,0.00277027534320951,0.00150005717296153,0.00204197620041668 ,0.00146311393473297,0.00159478781279176,0.00215208088047802,0.00239511393010616,0.0021059256978333,0.00226955814287066 ,0.00137146469205618,0.00229739327915013,0.00227435654960573,0.0023139282129705,0.00133925990667194,0.00385013013146818 ,0.00441626738756895,0.0037888044025749,0.00454087881371379,0.00103383034002036,0.00362318963743746,0.00181189889553934 ,0.00308391591534019,0.00103167560882866,0.00170974782668054,0.00116305600386113,0.00138921814505011,0.00162649981211871 ,0.00129095150623471,0.00543705886229873,0.00679957866668701,0.0100675327703357,0.00103019457310438,0.00853319466114044 ,0.0043475697748363,0.00240783137269318,0.00915769953280687,0.00508745852857828,0.0159079786390066,0.00173971964977682 ,0.00541352434083819,0.00204087933525443,0.0211878269910812,0.0177388042211533,0.0112950056791306,0.00260227895341814 ,0.00253498554229736,0.00296481139957905,0.00295078824274242,0.00396276684477925,0.0129204485565424,0.0137165049090981 ,0.00469488883391023,0.00100137270055711,0.0065825660713017,0.00890141911804676,0.00356663577258587,0.00293150614015758 ,0.00308286678045988,0.00346310110762715,0.00427238317206502,0.00420571630820632,0.00364589900709689,0.0032017685007304 ,0.0104739516973495,0.0177482850849628,0.0189338531345129,0.0184334814548492,0.0127803916111588,0.0105676529929042 ,0.00754354521632195,0.00418343627825379,0.00245327991433442,0.00314569845795631,0.00392649602144957,0.00278305215761065 ,0.00265763350762427,0.00431641656905413,0.00809456873685122,0.00984568707644939,0.00806601252406836,0.00101106090005487 ,0.00756782200187445,0.0368285477161407,0.0192880965769291,0.0506718531250954,0.0835918933153152,0.0164523981511593 ,0.00966632552444935,0.0230161529034376,0.039513636380434,0.0122059863060713,0.0210127718746662,0.0151477660983801 ,0.0165873803198338,0.0147293750196695,0.0106907756999135,0.00464768800884485,0.00788442604243755,0.00767996162176132 ,0.0167933069169521,0.0118056312203407,0.00999381858855486,0.0271462593227625,0.0211340580135584,0.0145684257149696 ,0.00375504838302732,0.00230848137289286,0.00293680862523615,0.010424873791635,0.014182603918016,0.00704707158729434 ,0.0299934018403292,0.0809231996536255,0.066321037709713,0.00189393514301628,0.00199611950665712,0.00235355575568974 ,0.0124866124242544,0.107536680996418,0.129518747329712,0.162986248731613,0.162497103214264,0.0756997019052505,0.0983090773224831 ,0.105313710868359,0.109496608376503,0.0254768114537001,0.0736321210861206,0.0109011856839061,0.00591598078608513 ,0.00877636671066284,0.00925613380968571,0.0185419302433729,0.00858956202864647,0.0360243357717991,0.0613816678524017 ,0.138574033975601,0.123591922223568,0.161576002836227,0.163661375641823,0.0621361434459686,0.0834685415029526,0.0823424607515335 ,0.0064245336689055,0.00196025124751031,0.0144897121936083,0.00350574846379459,0.0897016227245331,0.141786113381386 ,0.00172246783040464,0.0016761178849265,0.00164095626678318,0.00172228494193405,0.0151265971362591,0.0108278458938003 ,0.00930141005665064,0.00738859688863158,0.00444578099995852,0.00279078749008477,0.0034543676301837,0.00593799585476518 ,0.00181633280590177,0.00264560710638762,0.0021140007302165,0.00326533592306077,0.00226045935414732,0.00158813130110502 ,0.00125915941316634,0.00140132789965719,0.206268981099129,0.242492392659187,0.216538220643997,0.148466512560844,0.494710594415665 ,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032 ,0.436618506908417,0.463279128074646,0.385892689228058,0.347750276327133,0.237941667437553,0.215587124228477,0.184324011206627 ,0.349386662244797,0.119256816804409,0.0809679850935936,0.100759044289589,0.064699612557888,0.100251354277134,0.113563232123852 ,0.0685979872941971,0.152892902493477,0.156757727265358,0.333477854728699,0.282245606184006,0.410026401281357,0.464278131723404 ,0.497591882944107,0.497499942779541,0.494036823511124,0.341065794229507,0.3653284907341,0.495653241872787,0.401004016399384 ,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132 ,0.494357407093048,0.49289858341217,0.492176055908203,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002 ,0.495444416999817,0.493240684270859,0.495095014572144,0.495912224054337,0.495938241481781,0.420695513486862,0.436345547437668 ,0.342597186565399,0.319157987833023,0.419052869081497,0.300165265798569,0.217813968658447,0.205603912472725,0.208605021238327 ,0.0836873129010201,0.0971802547574043,0.0761817321181297,0.0662169381976128,0.0635233893990517,0.0789075344800949 ,0.0527386218309402,0.0531285107135773,0.0510307252407074,0.0495729967951775,0.0662362426519394,0.0636715367436409 ,0.0335692539811134,0.0344211980700493,0.00413668062537909,0.00437222234904766,0.0673914477229118,0.0534001886844635 ,0.0532169044017792,0.00969782378524542,0.115410067141056,0.0894881039857864,0.0497617162764072,0.032301552593708 ,0.0395700857043266,0.0833647176623344,0.152233555912972,0.277294039726257,0.237761244177818,0.122256495058537,0.495742470026016 ,0.495044946670532,0.495270699262619,0.466927647590637,0.487584829330444,0.471465349197388,0.446353495121002,0.495112806558609 ,0.494484156370163,0.494385927915573,0.494777828454971,0.319564700126648,0.226902171969414,0.303202927112579,0.355490446090698 ,0.142050608992577,0.21855191886425,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177 ,0.496983617544174,0.495706379413605,0.378789126873016,0.443236827850342,0.423344552516937,0.402129530906677,0.31354683637619 ,0.011792303994298,0.00541512854397297,0.19114363193512,0.00818456895649433,0.128277137875557,0.00999050214886665 ,0.0189298521727324,0.114223763346672,0.039101779460907,0.440741151571274,0.37799397110939,0.167534962296486,0.0324885621666908 ,0.0405340492725372,0.00877480115741491,0.00628257403150201,0.0294434521347284,0.00551354372873902,0.00340866087935865 ,0.00176740461029112,0.00323679530993104,0.00361410598270595,0.00155600626021624,0.00130048347637057,0.00259213359095156 ,0.00172662572003901,0.00157643074635416,0.00248960056342185,0.00115798017941415,0.00232840934768319,0.00483620120212436 ,0.00623246934264898,0.00413015903905034,0.00187641440425068,0.00264824088662863,0.49486768245697,0.00406678952276707 ,0.00307907885871828,0.0669666975736618,0.49384468793869,0.494718581438065,0.488878607749939,0.494964092969894,0.480413794517517 ,0.488142460584641,0.497017651796341,0.486521184444427,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778 ,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.00422780960798264,0.0673873871564865,0.10294995456934 ,0.177105605602264,0.137693867087364,0.395283669233322,0.0561339296400547,0.0122799724340439,0.115378007292748,0.0461952723562717 ,0.00862376298755407,0.0375786609947681,0.00586434034630656,0.216012254357338,0.11050571501255,0.0510124005377293 ,0.0829584822058678,0.494458675384521,0.494277447462082,0.496937960386276,0.116042479872704,0.49787762761116,0.230708613991737 ,0.0622754171490669,0.498603701591492,0.196535959839821,0.00369277526624501,0.00272378325462341,0.486099720001221 ,0.00512532843276858,0.0359800010919571,0.155941724777222,0.15468767285347,0.122875675559044,0.292145252227783,0.153312966227531 ,0.153439074754715,0.327097982168198,0.166516363620758,0.211425349116325,0.210624262690544,0.257879346609116,0.259329915046692 ,0.245208442211151,0.268495231866837,0.260577201843262,0.214291036128998,0.158475875854492,0.158776104450226,0.147456109523773 ,0.189878731966019,0.177501514554024,0.140640020370483,0.154655635356903,0.182721480727196,0.122265093028545,0.154412239789963 ,0.174505144357681,0.18732276558876,0.216400906443596,0.154486611485481,0.199397787451744,0.229595214128494,0.148008167743683 ,0.186971351504326,0.158650085330009,0.193919911980629,0.235914066433907,0.304533690214157,0.276103556156158,0.203738644719124 ,0.249767139554024,0.189385861158371,0.232027933001518,0.272078543901443,0.173341989517212,0.143333211541176,0.178553134202957 ,0.2178645581007,0.17926512658596,0.498079359531403,0.49764558672905,0.493476301431656,0.497497260570526,0.499024957418442 ,0.498812049627304,0.481438368558884,0.475040018558502,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566 ,0.49948513507843,0.428521871566772,0.300684005022049,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751 ,0.498042225837708,0.485606074333191,0.485793232917786,0.458712071180344,0.499973088502884,0.499091774225235,0.499190449714661 ,0.4280044734478,0.457346051931381,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124 ,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.494624406099319,0.497181087732315,0.469323992729187 ,0.476944506168365,0.415308624505997,0.395580261945724,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474 ,0.494615614414215,0.497360795736313,0.498536199331284,0.498701572418213,0.490914940834045,0.499821990728378,0.497986912727356 ,0.468328773975372,0.391963601112366,0.422747701406479,0.482745617628098,0.497819513082504,0.498537451028824,0.499243289232254 ,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421 ,0.493789881467819,0.49458646774292,0.492286801338196,0.484647452831268,0.479186058044434,0.438782334327698,0.471755683422089 ,0.431316256523132,0.475486993789673,0.456324309110641,0.479926824569702,0.405071496963501,0.380229324102402,0.42947643995285 ,0.374703049659729,0.421711415052414,0.402480840682983,0.300346851348877,0.43937224149704,0.450042575597763,0.471916079521179 ,0.439534783363342,0.489101856946945,0.497698903083801,0.467224955558777,0.477341830730438,0.482211530208588,0.480961859226227 ,0.408277362585068,0.171835973858833,0.153058439493179,0.143804714083672,0.0037693683989346,0.0362889654934406,0.00525405537337065 ,0.148268163204193,0.0683703571557999,0.0376599505543709,0.0445618219673634,0.146970078349113,0.188869208097458,0.17760506272316 ,0.00288582826033235,0.00225157150998712,0.0017316211014986,0.0013067068066448,0.00132562627550215,0.00190999440383166 ,0.00226044724695385,0.00784262921661139,0.0112750744447112,0.0173067096620798,0.00262815481983125,0.00226460210978985 ,0.00602485751733184,0.00349772814661264,0.00292510050348938,0.00269699073396623,0.0135289803147316,0.0103104831650853 ,0.00794037710875273,0.00787316635251045,0.00202853791415691,0.00213485443964601,0.00454540317878127,0.00540296733379364 ,0.040046576410532,0.0651715472340584,0.0666946023702621,0.0855960696935654,0.080752395093441,0.125129029154778,0.00638666842132807 ,0.0207076445221901,0.00387939042411745,0.00382913649082184,0.0012292229803279,0.00178197433706373,0.0018641147762537 ,0.0013992638560012,0.00126466911751777,0.00674807792529464,0.00701502803713083,0.00686094397678971,0.00567869283258915 ,0.00544988224282861,0.007870820350945,0.0157495457679033,0.00552460039034486,0.00631229672580957,0.00680046249181032 ,0.00684428494423628,0.00933710113167763,0.0106857251375914,0.00361652881838381,0.00433071563020349,0.00556861003860831 ,0.00640778755769134,0.00623950036242604,0.00100142590235919,0.00236925226636231,0.00223838444799185,0.00389867951162159 ,0.00501776812598109,0.00396161805838346,0.00699444627389312,0.00672429939731956,0.00506741041317582 Transform: -0.255586654162105,0.0564839064701451,-0.965134710701333,0,0.191954875668087,0.981381489803619,0.00660131789598748 ,0,0.947538261415516,-0.183575097990927,-0.261670390290558,0,-6.68650920068585,2.10042577148026,-9.58014889758636 ,1 TransformLink: -0.255586662104494,0.19195488163311,0.947538290860393,0,0.0564839134277388,0.98138161068856,-0.183575120603402,0,-0.965134729663024 ,0.00660131802568145,-0.261670395431512,0,-11.0737572515755,-0.714569534984361,4.21446806383396,1 } Deformer: "SubDeformer::Cluster_Head", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 ,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 ,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113 ,114,115,116,117,118,119,120,121,125,126,127,129,130,131,132,133,134,135,136,140,141,142,145,146,147,151,152,153,154 ,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,172,173,174,175,176,177,178,179,180,181,182,183,184,185 ,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214 ,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243 ,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272 ,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301 ,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330 ,331,332,333,334,335,336,337,338,339,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362 ,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391 ,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420 ,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449 ,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478 ,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507 ,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536 ,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565 ,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594 ,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623 ,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652 ,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681 ,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710 ,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739 ,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768 ,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797 ,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826 ,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855 ,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884 ,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913 ,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942 ,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971 ,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,1000 ,1001,1002,1003,1004,1005,1006,1007,1008,1009,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024 ,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047 ,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070 ,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093 ,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116 ,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 ,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162 ,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185 ,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208 ,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231 ,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254 ,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277 ,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300 ,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323 ,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346 ,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 ,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392 ,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415 ,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438 ,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461 ,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484 ,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507 ,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530 ,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1556,1557 ,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580 ,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603 ,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626 ,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 ,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672 ,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695 ,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718 ,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1732,1733,1734,1746,1747,1748,1749,1750,1751,1752,1753 ,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776 ,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1800,1801,1802,1803,1804,1805,1806,1807,1808,1810 ,1811,1813,1814,1815,1816,1821,1822,1823,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842 ,1843,1844,1845,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869 ,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892 ,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915 ,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938 ,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961 ,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984 ,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2009,2010 ,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033 ,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056 ,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079 ,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102 ,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125 ,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148 ,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171 ,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194 ,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217 ,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240 ,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263 ,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286 ,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309 ,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332 ,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355 ,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378 ,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401 ,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424 ,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447 ,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470 ,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493 ,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516 ,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539 ,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562 ,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585 ,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608 ,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631 ,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654 ,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2678 ,2679,2680,2681,2682,2683,2684,2685,2686,2687,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702 ,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725 ,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748 ,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771 ,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794 ,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817 ,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840 ,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863 ,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886 ,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909 ,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932 ,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955 ,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978 ,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001 ,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024 ,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047 ,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070 ,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093 ,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116 ,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139 ,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162 ,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185 ,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208 ,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233 ,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256 ,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279 ,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302 ,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325 ,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348 ,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371 ,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394 ,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3409,3410,3411,3423,3424,3425,3426,3427,3428,3429 ,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452 ,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3476,3477,3478,3479,3480,3481,3482,3483,3484 ,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507 ,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530 ,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553 ,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576 ,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599 ,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622 ,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645 ,3646,3647,5303,5304,5305,5306,5309,5314,5319,5371,5372,5373,5380,5382,5383,5403,5730,5802,5803,5804,5811,5813,5814 ,6487,10083,10482 Weights: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,0.999999761581421,1,1,1,0.999769389629364,0.997745931148529,0.997007310390472,0.999988436698914,1 ,1,1,1,1,1,1,1,1,1,1,1,1,0.999866485595703,0.999976813793182,0.99999737739563,1,1,1,1,1,0.348414063453674,0.296818614006042 ,0.999929845333099,0.992260038852692,0.986605584621429,0.999526262283325,1,1,1,1,1,0.996576905250549,0.999679207801819 ,0.462966173887253,0.405808210372925,0.933403789997101,1,1,1,0.99883645772934,1,1,1,0.999987483024597,0.999998390674591 ,0.997568309307098,0.99861341714859,1,1,0.99993509054184,0.305174469947815,0.335230082273483,0.277147561311722,0.357239037752151 ,0.382363498210907,0.40365344285965,0.362462073564529,0.300854951143265,0.246836096048355,0.32552570104599,0.262969672679901 ,0.284158438444138,0.215933471918106,0.345835387706757,0.960699081420898,0.880206704139709,0.938635408878326,0.956660568714142 ,0.877048552036285,0.876426160335541,0.886230409145355,0.936781227588654,0.95302551984787,0.884782373905182,0.946100473403931 ,0.892827928066254,0.450425446033478,0.878755748271942,0.932442188262939,0.37913653254509,0.407037675380707,0.415984898805618 ,0.259030967950821,0.293490946292877,0.417256742715836,0.340245813131332,0.36240941286087,0.411219507455826,0.977936863899231 ,0.967643797397614,0.892272353172302,0.968207836151123,0.960449576377869,0.945745766162872,0.987939298152924,0.982316374778748 ,0.978387355804443,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.996214628219604,0.988707542419434 ,0.986609518527985,0.995532214641571,0.973644018173218,0.969042003154755,0.9631507396698,0.984441816806793,0.994842827320099 ,1,0.999999821186066,1,0.999999701976776,1,1,0.999998331069946,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,0.999999821186066,0.999997019767761,0.999997437000275,0.999985814094543,0.999905824661255,0.999983549118042,0.9999960064888 ,0.999999046325684,0.999969482421875,0.999965369701386,0.999825537204742,0.999794542789459,0.999993860721588,0.999995291233063 ,0.999958753585815,0.999951481819153,0.999996781349182,0.999967575073242,0.999789297580719,0.999749004840851,0.999708235263824 ,0.999999642372131,0.99999988079071,0.999999523162842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.990536689758301,0.992207109928131 ,0.996704638004303,0.99727863073349,0.998484134674072,0.994708299636841,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999999701976776 ,1,1,1,1,1,1,1,1,1,1,1,0.999996781349182,0.999999821186066,0.999968290328979,0.999798536300659,0.989763081073761,0.996523678302765 ,0.976127862930298,0.998997271060944,0.998805344104767,0.998647511005402,0.999073028564453,0.999054372310638,0.999225318431854 ,0.999512612819672,0.999987304210663,0.999918818473816,0.993115425109863,0.987185597419739,0.999241054058075,0.997129917144775 ,0.131196677684784,0.925822734832764,0.907572150230408,0.972595036029816,0.861486613750458,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0.420260190963745,0.554195642471313,0.489969193935394,0.700962424278259,0.748266160488129,0.622093796730042 ,0.301548063755035,0.349999994039536,0.150000005960464,0.25,0.100000001490116,0.025000000372529,0.25,0.25,0.837520956993103 ,0.837526202201843,0.76023530960083,0.882980525493622,0.899999976158142,0.685573697090149,0.557134389877319,0.349999994039536 ,0.620917081832886,0.899999976158142,0.997061192989349,0.999017417430878,0.990700721740723,0.997014939785004,0.992497980594635 ,0.997990012168884,0.998118996620178,0.992173731327057,0.977280378341675,0.977026402950287,0.951838552951813,0.944853127002716 ,0.893962979316711,0.966057240962982,1,0.974265038967133,0.941445469856262,0.889961361885071,0.999450743198395,0.999087393283844 ,0.989352107048035,1,0.997996926307678,0.989772439002991,0.997625052928925,0.999521493911743,0.961557149887085,0.985031843185425 ,0.995130717754364,0.966040730476379,0.940969944000244,0.908502101898193,0.838931620121002,0.875945210456848,0.919987916946411 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355 ,0.999999642372131,0.999997198581696,0.999987363815308,1,1,1,1,1,1,1,1,1,1,1,0.996123313903809,0.951491415500641,0.961500227451324 ,0.987795472145081,0.986461222171783,0.99991911649704,0.855317890644073,0.743749916553497,0.663854837417603,1,1,1 ,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,0.999999821186066,0.999999940395355,1,0.999998986721039 ,0.999999701976776,0.999999940395355,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,0.997026085853577,0.991087913513184,0.998008549213409,0.990822672843933,0.978451430797577,0.994244694709778 ,1,1,0.999999403953552,0.999996662139893,0.999999523162842,0.999999940395355,0.999987065792084,0.999997794628143,0.999999761581421 ,0.999999940395355,1,0.996043920516968,0.997313916683197,0.999570369720459,0.99914413690567,0.999780535697937,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.874475002288818,0.859783411026001 ,0.976130604743958,0.985742092132568,0.951068341732025,0.966143608093262,0.9924276471138,0.98901629447937,0.992559731006622 ,0.996199905872345,0.915497481822968,0.930785715579987,0.953211188316345,0.943714499473572,0.974188923835754,0.979826152324677 ,0.853430390357971,0.909686684608459,0.832501828670502,0.89535117149353,1,1,1,1,1,1,1,0.999999821186066,1,1,1,0.999999046325684 ,1,1,1,1,1,1,1,1,0.999951481819153,0.999991178512573,0.999996721744537,0.999953746795654,1,1,1,1,1,1,1,1,0.999999225139618 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999994158744812,0.999984204769135,0.999999582767487,0.999955058097839,0.999902665615082 ,0.999990284442902,0.999941945075989,0.999751687049866,0.999426007270813,1,1,1,1,0.999009013175964,0.996857404708862 ,0.999781668186188,0.987691402435303,1,1,1,1,1,1,0.99999988079071,1,0.99999988079071,1,0.999999046325684,0.99999988079071 ,1,1,1,1,1,1,0.984471559524536,0.989188969135284,0.993452608585358,0.997096359729767,0.994560599327087,0.991468369960785 ,1,1,1,1,1,1,1,0.999518752098084,1,1,1,0.999995589256287,0.999955594539642,0.999967575073242,0.999997019767761,0.999997854232788 ,0.999779105186462,0.999907195568085,0.9999880194664,0.998803615570068,0.999539971351624,0.980000019073486,0.980000019073486 ,0.980000019073486,0.980000019073486,1,0.999998331069946,0.999999940395355,0.99997866153717,0.999966144561768,0.999997615814209 ,0.999999940395355,0.999984562397003,0.999997019767761,0.999944269657135,1,1,1,1,0.996774792671204,0.974485635757446 ,0.980147957801819,0.997989237308502,0.999999701976776,1,1,1,0.99866509437561,1,1,1,1,1,1,0.999999523162842,0.999999523162842 ,1,1,1,1,0.988265216350555,0.989666819572449,0.999395608901978,0.999032855033875,0.999645292758942,0.999818742275238 ,1,1,1,0.994995176792145,0.999091386795044,0.99800705909729,0.952490627765656,0.416576504707336,0.347003281116486 ,0.345246940851212,0.417088449001312,0.944247424602509,1,1,1,0.949999988079071,0.899999976158142,0.899999976158142 ,0.999464333057404,0.999308705329895,0.999829411506653,0.999677062034607,0.997972846031189,1,1,1,1,0.999999344348907 ,0.999998927116394,0.999999940395355,0.999999940395355,1,1,1,1,1,1,1,0.999999821186066,0.999999582767487,0.999997854232788 ,0.999997019767761,0.999984860420227,0.999987363815308,0.999999344348907,1,1,1,1,1,1,1,0.999996244907379,0.9999680519104 ,1,1,1,0.999999105930328,1,1,0.459157198667526,0.988020479679108,0.943029761314392,0.459152907133102,1,1,0.998800873756409 ,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999997913837433,1,1,0.999998986721039,0.999984979629517,1,1,1,1,1,0.999965012073517,0.999940872192383 ,0.336572200059891,0.393645137548447,0.395924478769302,0.337656915187836,1,1,0.999783635139465,0.999759078025818,1 ,1,0.800000011920929,0.800000011920929,0.535878419876099,0.627997994422913,1,1,0.99994820356369,0.999838650226593 ,0.999496340751648,0.999844312667847,0.998620271682739,0.920523047447205,0.908557653427124,1,1,0.999999940395355,0.999999940395355 ,1,0.993643939495087,0.989085495471954,0.992528975009918,0.995644688606262,0.992834329605103,0.997095108032227,0.999972522258759 ,0.999994337558746,0.999965131282806,0.999850511550903,0.999999761581421,0.99986720085144,0.999546825885773,0.999962270259857 ,0.999987840652466,0.999996244907379,0.999980807304382,0.999827742576599,0.999969124794006,0.999980330467224,0.99982076883316 ,0.999875783920288,0.998700678348541,0.999732792377472,0.999924659729004,0.999531447887421,1,1,0.999959707260132,0.999996244907379 ,0.999989688396454,0.587577700614929,0.5,0.55103325843811,0.449999988079071,0.349999994039536,0.449999988079071,0.802620470523834 ,0.994896531105042,1,1,1,1,1,1,1,0.999259829521179,0.998212277889252,0.996332228183746,0.998884201049805,0.998849451541901 ,1,1,1,1,1,0.280946999788284,0.997190296649933,0.998100638389587,0.99994432926178,0.999985456466675,0.912754893302917 ,0.968181848526001,0.87903243303299,0.943862676620483,1,1,0.286551505327225,0.899999976158142,0.899999976158142,1 ,1,1,1,1,1,1,1,1,0.75,0.727270424365997,0.99253249168396,0.969400703907013,0.999407887458801,0.996963143348694,1,0.999822497367859 ,0.999152302742004,0.999869823455811,0.999400675296783,1,1,0.999988973140717,0.600000023841858,0.604558944702148,0.600000023841858 ,1,1,1,1,0.999998569488525,0.999998807907104,0.999997854232788,0.999794840812683,0.999966740608215,0.999977707862854 ,0.998860716819763,0.999999642372131,0.99999612569809,0.993585109710693,0.300000011920929,0.25,0.5,0.449999988079071 ,0.550000011920929,0.699999988079071,1,0.999955832958221,0.999805808067322,0.999777317047119,0.999945402145386,0.999703824520111 ,0.999917566776276,1,0.984215021133423,0.954994142055511,0.988196074962616,1,1,0.999999642372131,1,0.999994695186615 ,0.999999761581421,0.999994874000549,1,1,0.999999582767487,0.999995172023773,0.999970853328705,1,1,1,0.999999582767487 ,0.986238956451416,0.988411843776703,0.441835135221481,0.933162808418274,0.947231888771057,0.424471318721771,0.348979592323303 ,0.999981462955475,0.999907732009888,1,0.999968230724335,0.999855399131775,0.999944865703583,0.999999642372131,0.999989092350006 ,0.970000028610229,0.99187308549881,1,1,1,1,1,1,0.99809867143631,0.770597636699677,0.795691609382629,0.999999761581421 ,0.999998569488525,0.99999862909317,1,0.998847723007202,0.99910581111908,0.999994575977325,0.999991953372955,0.999996244907379 ,0.99998539686203,0.999957919120789,1,1,0.970000028610229,1,0.999999046325684,1,1,0.902129173278809,0.899999976158142 ,1,1,0.999837577342987,0.999737501144409,1,0.999938607215881,0.999995172023773,1,1,0.999913096427917,0.999415576457977 ,0.997944831848145,0.999560117721558,0.999930918216705,0.324698805809021,0.411464750766754,0.980888724327087,1,1,0.999808788299561 ,0.980815947055817,0.212126016616821,0.267991691827774,0.283018052577972,0.23473933339119,1,0.998749792575836,0.906330645084381 ,0.953685879707336,0.943308174610138,1,1,1,0.997312426567078,0.991603791713715,1,0.449999988079071,0.449999988079071 ,0.699999988079071,0.958194732666016,0.983917653560638,0.980177938938141,0.999990999698639,0.999989449977875,0.999405801296234 ,0.999907672405243,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.959780633449554,1,1,0.999953508377075,0.999985635280609 ,0.999996602535248,0.99726277589798,0.999643564224243,1,1,1,1,1,0.999996721744537,0.999999105930328,1,0.999999821186066 ,0.764749228954315,0.999882757663727,0.999713063240051,0.99859493970871,0.999958097934723,0.999601244926453,0.999603807926178 ,0.999942004680634,0.999990224838257,0.999992668628693,1,1,1,0.793075084686279,0.715351104736328,0.999799132347107 ,0.99924623966217,0.997733950614929,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,0.999988198280334,0.999999105930328,0.999990522861481,0.999999225139618,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,0.999998092651367,1,0.999984800815582,0.999993324279785,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,0.400000005960464,0.5,0.548623442649841,0.100000001490116,0.200000002980232,0.449999988079071,0.5,0.600000023841858 ,0.649999976158142,0.649999976158142,0.408688962459564,0.28953355550766,1,0.999999582767487,0.99999862909317,0.999980986118317 ,0.999694406986237,0.998330652713776,0.999876379966736,0.999770939350128,0.998444676399231,1,1,0.84945410490036,0.797120571136475 ,0.699999988079071,0.994182348251343,0.988083004951477,0.78735876083374,0.760871648788452,0.636389255523682,0.687809228897095 ,0.698961198329926,0.661260545253754,0.850000023841858,0.629232227802277,0.649999976158142,0.600000023841858,0.492218673229218 ,0.552437007427216,0.5,0.400000005960464,0.429196774959564,0.452822148799896,0.0500000007450581,0.0500000007450581 ,0.0199999995529652,0.0199999995529652,0.100000001490116,0.100000001490116,0.493190944194794,0.699999988079071,0.899999976158142 ,0.999776363372803,1,1,1,1,1,1,0.648829102516174,0.844642460346222,0.899999976158142,0.949999988079071,0.899999976158142 ,0.949999988079071,0.919702291488647,0.94857931137085,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355 ,1,1,1,1,1,0.999999701976776,0.999998152256012,0.999993979930878,0.999989688396454,1,1,1,1,0.99999737739563,0.999999642372131 ,1,1,1,1,0.999999821186066,0.999999344348907,0.99999862909317,1,1,1,1,1,1,1,1,1,1,1,0.999931156635284,0.75,0.699999988079071 ,0.999999761581421,0.784333109855652,0.970308423042297,0.989005148410797,0.997170150279999,1,0.876214146614075,0.970000028610229 ,1,1,0.989500880241394,0.965273976325989,0.825668215751648,0.708643436431885,0.860360324382782,0.909061014652252,1 ,1,1,1,1,1,0.248748660087585,1,1,1,1,1,1,1,1,1,1,0.999795794487,0.999245464801788,0.974902451038361,0.998980283737183 ,0.997182130813599,0.999996066093445,0.999979078769684,0.994695901870728,0.992942214012146,0.649999976158142,0.981748402118683 ,0.994475185871124,0.954283893108368,0.963509917259216,0.967777073383331,0.976799607276917,0.992380619049072,1,0.987087786197662 ,1,0.999923825263977,0.998186767101288,0.998076796531677,0.999949634075165,0.999882221221924,0.999998688697815,1,1 ,1,1,0.716326594352722,0.808937311172485,0.893687009811401,0.945370733737946,1,0.977323114871979,1,0.992401897907257 ,1,0.999840080738068,0.99998551607132,0.999998927116394,0.999999940395355,0.999539732933044,0.999988734722137,1,0.999999821186066 ,0.999999225139618,0.999996721744537,0.987210094928741,0.550000011920929,0.449999988079071,0.999996244907379,0.999999821186066 ,0.25324410200119,0.230199247598648,0.150708064436913,0.8916996717453,0.88851273059845,0.911445736885071,0.418018728494644 ,0.41413426399231,0.431082844734192,0.434488296508789,0.414009839296341,0.434543877840042,0.450171411037445,0.877384424209595 ,0.946977913379669,0.92013680934906,0.437811374664307,0.42350047826767,0.405306279659271,0.391090542078018,0.391201049089432 ,0.436842024326324,1,1,1,1,1,0.999999523162842,0.999994337558746,0.999958217144012,1,1,1,1,0.99999874830246,0.999989211559296 ,0.999823153018951,0.999800324440002,0.99960058927536,1,0.999998509883881,0.999990463256836,0.999943137168884,0.999967992305756 ,0.999999403953552,0.999948978424072,0.999943375587463,0.999969303607941,0.999974608421326,1,1,1,1,0.308542907238007 ,0.364742130041122,0.150000005960464,0.27529102563858,0.302062720060349,0.333193153142929,0.356406271457672,0.380277574062347 ,0.331978857517242,0.312322288751602,0.247045859694481,0.17919759452343,0.262152791023254,0.327527046203613,0.928611278533936 ,0.83008337020874,0.840809226036072,0.92774510383606,0.819531679153442,0.828730583190918,0.849848210811615,0.850720882415771 ,0.92991054058075,0.861673176288605,0.932130098342896,0.868334949016571,0.882246673107147,0.868992269039154,0.368733763694763 ,0.40806970000267,0.397330462932587,0.312054097652435,0.333123594522476,0.389807045459747,0.949329078197479,0.868522763252258 ,0.840067327022552,0.935846924781799,0.856897950172424,0.829582154750824,0.975209772586823,0.967662453651428,0.963314354419708 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.995160698890686,0.984562516212463,0.984086155891418,0.994865477085114 ,0.962004959583282,0.962112188339233,1,1,1,0.999999761581421,1,1,0.999998569488525,0.99999988079071,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,0.99999988079071,0.999997973442078,0.999999701976776,0.999997615814209,0.999988555908203 ,0.999916911125183,0.999987483024597,0.999996602535248,0.999997317790985,0.999977290630341,0.999970853328705,0.9998539686203 ,0.999813675880432,0.999994397163391,0.999952673912048,0.999995410442352,0.999959945678711,0.999750435352325,0.999721109867096 ,0.999999582767487,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.985836565494537,0.987700045108795,0.99582427740097 ,0.996529221534729,0.997900784015656,0.990917503833771,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999999761581421,1,1 ,1,1,1,1,1,1,1,1,0.999996244907379,0.999999761581421,0.999965786933899,0.999783754348755,0.985003352165222,0.995484948158264 ,0.962019920349121,0.998796164989471,0.998662710189819,0.999032616615295,0.998907327651978,0.999204456806183,0.999488115310669 ,0.999988734722137,0.999921441078186,0.983880579471588,0.965352714061737,0.99883633852005,0.994391560554504,0.992079377174377 ,0.972146093845367,0.998622000217438,0.972789764404297,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.649999976158142 ,0.850000023841858,0.550000011920929,0.850000023841858,0.850000023841858,0.779999971389771,0.460966050624847,0.349999994039536 ,0.250713586807251,0.5,0.247225999832153,0.200000002980232,0.300000011920929,0.300000011920929,0.850000023841858,0.835897326469421 ,0.757781624794006,0.889005482196808,0.799687623977661,0.880736887454987,0.852680206298828,0.773330271244049,0.899999976158142 ,0.657807528972626,0.497373759746552,0.308686256408691,0.535909652709961,0.899999976158142,0.711816906929016,0.993252336978912 ,0.995189130306244,0.975707173347473,0.988046526908875,0.984564483165741,0.995169043540955,0.995753824710846,0.984138786792755 ,0.997786045074463,0.985440492630005,0.989416182041168,0.967290282249451,0.955546677112579,0.910428762435913,0.949999988079071 ,1,0.977843284606934,0.946880638599396,0.95854377746582,0.924271702766418,0.866015911102295,0.892192006111145,0.999153912067413 ,0.998677670955658,0.989454507827759,0.995999813079834,0.999111652374268,0.997927010059357,0.99976247549057,0.999900758266449 ,0.930000007152557,0.968636333942413,0.978482127189636,0.984394371509552,0.965196907520294,0.899999976158142,0.899999976158142 ,0.899999976158142,0.899999976158142,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999996662139893,0.999988734722137,0.999970972537994,1,0.999999403953552 ,0.999999940395355,1,0.999999940395355,0.999999582767487,1,1,1,1,1,0.999894440174103,0.998404622077942,0.999730825424194 ,0.999733328819275,0.999309360980988,0.999999523162842,0.991441905498505,0.970227301120758,0.978859186172485,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,0.999967992305756,0.999800026416779,0.999064028263092,0.999978423118591,0.999989748001099,1,0.999998867511749 ,1,1,0.999998033046722,0.999990582466125,0.999997973442078,0.999999642372131,0.999961972236633,0.999991714954376,0.99999862909317 ,0.999999701976776,1,0.999268352985382,0.998100101947784,0.999813914299011,0.999943375587463,0.999878823757172,0.993770956993103 ,0.979781270027161,0.991786897182465,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,0.824844896793365,0.79753452539444,0.925197064876556,0.94998961687088,0.892102301120758,0.926094353199005 ,0.956209540367126,0.938380777835846,0.948715269565582,0.964846730232239,0.84648585319519,0.884519398212433,0.921480536460876 ,0.893219888210297,0.915879011154175,0.938445568084717,0.899999976158142,0.913427889347076,0.885498821735382,0.883242189884186 ,1,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999993503093719,1,1,0.999992609024048,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999973356723785,1,1,1,1,0.999961853027344,0.999647974967957,0.999996960163116 ,0.997242391109467,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.903084516525269,0.962770581245422,0.979039669036865,0.988998830318451 ,0.978517055511475,0.968517661094666,1,1,1,1,1,1,1,0.999994218349457,1,1,1,1,1,1,1,1,1,0.999996185302734,1,0.999996662139893 ,0.999975204467773,0.969889760017395,0.971092700958252,0.999808013439178,1,1,1,1,1,1,1,1,0.99994158744812,0.999983012676239 ,0.999860167503357,1,1,1,1,0.991058766841888,0.925504803657532,0.942588448524475,0.99311625957489,0.999996066093445 ,0.999999403953552,1,1,0.995644509792328,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999119579792023,0.998876392841339,0.999415218830109 ,1,1,1,1,1,1,0.927903950214386,0.408307909965515,0.338427692651749,0.334506094455719,0.406669586896896,0.911526322364807 ,1,1,1,0.939685106277466,0.908013582229614,0.882593989372253,0.998012900352478,0.997332811355591,0.999821245670319 ,0.99934995174408,0.998911142349243,1,1,1,1,1,0.999844431877136,0.99999612569809,0.99999213218689,0.999998986721039 ,0.999999642372131,0.99999988079071,1,0.999999940395355,1,1,0.999999940395355,1,0.999999701976776,0.999997913837433 ,0.999988555908203,0.999967694282532,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.455325990915298,0.935487270355225,0.935112237930298 ,0.462645888328552,1,1,0.996441245079041,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999954044818878,0.999934792518616 ,0.332305639982224,0.388771086931229,0.394438505172729,0.336643546819687,1,1,1,1,1,1,0.817862629890442,0.888791799545288 ,0.871996223926544,0.926925122737885,1,1,1,1,1,0.999802231788635,0.999353110790253,0.99868243932724,0.999528646469116 ,1,0.97871345281601,0.951372623443604,1,1,1,1,1,1,0.992018222808838,0.985607743263245,0.986931025981903,0.992793202400208 ,0.98271256685257,0.992969512939453,0.999912321567535,0.999967873096466,0.999861121177673,0.999517500400543,0.999994337558746 ,0.999424636363983,0.998278081417084,1,0.999864637851715,0.999949097633362,1,1,1,1,1,1,1,0.997118413448334,0.999441742897034 ,0.999845266342163,0.998751521110535,1,1,1,1,1,1,1,0.966132760047913,0.894500434398651,0.933834314346313,0.84791773557663 ,0.743246674537659,0.811419129371643,0.850000023841858,0.999857187271118,1,1,1,1,1,1,1,0.99671083688736,0.992562532424927 ,0.985294878482819,0.995045244693756,0.997932732105255,1,1,1,1,1,0.278595566749573,0.996629595756531,0.997128784656525 ,0.999779880046844,0.999933123588562,0.999375998973846,0.999950766563416,0.999540448188782,0.999971628189087,1,1,0.28972864151001 ,0.911683559417725,0.877844750881195,1,1,1,1,1,1,1,1,1,1,0.937691330909729,0.962795853614807,1,1,1,1,1,1,1,1,1,1,1 ,1,0.847725927829742,0.91228461265564,0.79233855009079,0.871689975261688,1,1,1,1,1,1,1,1,1,1,0.995091438293457,1,1 ,0.978575766086578,0.418494582176209,0.39224100112915,0.608790159225464,0.550000011920929,0.632516980171204,0.784045279026031 ,1,0.999818503856659,0.999213695526123,0.999005913734436,0.999743700027466,0.998591482639313,0.999609470367432,1,0.999946653842926 ,0.999391973018646,0.999967992305756,0.999391973018646,0.994880020618439,0.999391973018646,1,1,1,0.999995410442352 ,0.999966621398926,0.999999225139618,0.999999225139618,0.999992728233337,0.999965846538544,0.999864935874939,1,1,0.999998986721039 ,0.999993681907654,0.908143758773804,0.930387914180756,0.429049700498581,0.885662496089935,0.903142273426056,0.408094793558121 ,0.329227954149246,0.999907255172729,0.999543070793152,1,0.999873816967011,0.999455451965332,0.999873638153076,1,1 ,0.999391973018646,0.999967992305756,1,1,1,1,1,1,0.999896347522736,0.711599826812744,0.745834589004517,1,1,1,1,1,1 ,0.999975860118866,0.999959826469421,0.999991416931152,0.999968469142914,0.999915838241577,1,0.981522679328918,0.976607978343964 ,0.989433944225311,1,0.999967992305756,0.999552011489868,0.999941349029541,0.958241581916809,1,1,0.999773323535919 ,0.99970531463623,0.994279265403748,0.995593905448914,0.999991178512573,1,1,1,1,1,0.999967992305756,1,1,0.310555666685104 ,0.397277534008026,0.906521797180176,1,1,1,0.897495031356812,0.209778174757957,0.261431634426117,0.277164131402969 ,0.231595560908318,1,1,0.999967992305756,1,0.889366984367371,1,1,1,1,0.999633312225342,0.999985694885254,0.763117611408234 ,0.725181221961975,0.82636034488678,0.99178946018219,0.998883247375488,0.998075246810913,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0.861131191253662,1,1,0.999758005142212,0.999929368495941,0.999975681304932,0.99999988079071 ,0.998361766338348,1,1,1,1,0.999999582767487,0.999993681907654,0.999998152256012,0.99999988079071,0.999999463558197 ,0.979020714759827,0.97575169801712,1,1,1,1,1,1,1,1,1,1,1,0.994842290878296,0.983159720897675,0.999033391475677,0.996413946151733 ,0.990096926689148,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,1,1,0.999999761581421,1,1,1,1,1,1 ,1,1,1,1,0.999965131282806,0.999992609024048,0.999973356723785,0.999996185302734,0.999999046325684,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,0.999999046325684,0.999999582767487,1,1,0.999996900558472,0.999976396560669 ,0.999965965747833,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.606032192707062,0.702783584594727,0.715117573738098 ,0.220490634441376,0.292737722396851,0.52182525396347,0.601603031158447,0.616618871688843,0.727132260799408,0.645783305168152 ,0.784240245819092,0.686429858207703,1,1,1,0.999999165534973,0.999993205070496,1,1,1,1,1,1,0.999985694885254,0.999952256679535 ,1,1,1,0.932030141353607,0.931214332580566,0.97384238243103,0.765795350074768,0.962967395782471,0.942884683609009 ,0.896759152412415,0.881946504116058,0.80953049659729,0.856356859207153,0.848113536834717,0.806062936782837,0.866539835929871 ,0.765458106994629,0.746913552284241,0.694321870803833,0.635266363620758,0.599167943000793,0.657683849334717,0.69309937953949 ,0.579004049301147,0.497260928153992,0.504618883132935,0.628817796707153,0.100000001490116,0.100000001490116,0.0199999995529652 ,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.164457678794861,0.14875328540802,0.272260308265686,0.797969460487366 ,0.866278350353241,1,0.843241333961487,0.999112129211426,0.999932169914246,1,0.99931812286377,0.996939718723297,0.933620035648346 ,0.937213599681854,0.927313685417175,0.931612193584442,0.957677364349365,0.981823623180389,0.949999988079071,1,0.949999988079071 ,0.949999988079071,1,0.965973496437073,0.979378640651703,0.991198360919952,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999998271465302,0.999995768070221,0.999992251396179,0.999989032745361,1,1,1,1,0.999983668327332 ,0.999996900558472,1,1,0.999999940395355,0.999999821186066,0.999999523162842,0.999999165534973,0.99999862909317,0.999999940395355 ,0.999999642372131,1,1,1,1,1,1,1,1,1,0.999670386314392,0.938778817653656,0.850560367107391,1,0.860400438308716,0.988599896430969 ,0.99865597486496,0.999840021133423,0.963169693946838,0.994880020618439,0.995199978351593,0.996245324611664,0.998159110546112 ,0.999204456806183,0.999973356723785,0.999239802360535,0.997623980045319,0.96080356836319,0.891220390796661,0.871136009693146 ,0.989015877246857,0.99062043428421,0.99975597858429,0.999982118606567,1,0.998371005058289,0.996509432792664,1,1,0.559376358985901 ,1,1,1,1,1,1,1,1,1,1,1,1,0.997700333595276,1,1,0.994149565696716,0.999817132949829,1,0.999771416187286,0.850000023841858 ,0.998741507530212,0.999592363834381,0.993519484996796,0.986261963844299,0.993080615997314,0.997539460659027,0.999630749225616 ,0.999588549137115,0.999967992305756,0.968575894832611,1,1,1,1,1,1,1,1,1,1,0.928032338619232,0.976496279239655,0.994863092899323 ,0.999303340911865,0.999495089054108,0.999927997589111,0.999977767467499,1,1,1,1,1,1,1,1,1,1,1,1,1,0.850000023841858 ,0.699999988079071,1,1,1,0.235360309481621,0.222527340054512,0.152716189622879,0.839730203151703,0.847859680652618 ,0.872806251049042,0.404381573200226,0.40144407749176,0.423947304487228,0.427471905946732,0.403210192918777,0.428387820720673 ,0.841572463512421,0.874131262302399,0.408036857843399,0.38528248667717,0.373308509588242,0.377070516347885,0.424087792634964 ,1,1,1,1,1,1,1,0.999999284744263,0.999993503093719,0.999957799911499,1,1,1,1,0.999999940395355,0.999999940395355,0.999998092651367 ,0.999986052513123,0.999738574028015,0.999751091003418,0.999558866024017,0.999999761581421,0.999997317790985,0.99998539686203 ,0.999933063983917,0.999951422214508,0.999995470046997,0.999896287918091,1,1,1,1,0.349999994039536,1,1,1,0.686159372329712 ,0.623571038246155,0.349999994039536,0.214079320430756,1,1,1,1,1,1,1,1,0.999349594116211,1,0.999909162521362,0.949999988079071 ,0.993878483772278,1,1,0.999986410140991,0.999998867511749,1,0.999993741512299,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.913584053516388,0.871200621128082,0.936014592647552,0.942887365818024 ,0.817474365234375,0.740597069263458,0.888899803161621,0.878629624843597,0.87686014175415,0.568309545516968,0.932189285755157 ,0.883029043674469,0.848667085170746,0.871915221214294,0.811980724334717,0.745295226573944,0.777739644050598,0.573302984237671 ,0.686521828174591,0.337067723274231,0.287424027919769,0.285539090633392,0.255632221698761,0.202617704868317,0.289324581623077 ,0.913337051868439,0.916339218616486,0.855006694793701,0.938828587532043,0.940479755401611,0.826563715934753,0.790112614631653 ,0.883481323719025,0.896900475025177,0.687618970870972,0.885863423347473,0.875031530857086,0.854685246944427,0.804443955421448 ,0.830238461494446,0.631611108779907,0.773356795310974,0.477082967758179,0.393136739730835,0.397931814193726,0.397760272026062 ,0.328216433525085,0.426256000995636,0.920019030570984,0.960719287395477,0.985030829906464,0.986254632472992,0.856136322021484 ,0.790562033653259,0.93674647808075,0.819936394691467,0.885690748691559,0.661754369735718,0.976041197776794,0.747037887573242 ,0.630166888237,0.676613986492157,0.522553384304047,0.569085597991943,0.487244963645935,0.49576610326767,0.485332369804382 ,0.446525692939758,0.475012540817261,0.427732467651367,0.453264474868774,0.537856459617615,0.969599306583405,0.947482883930206 ,0.980467319488525,0.976889669895172,0.855967223644257,0.932356476783752,0.814191162586212,0.880587220191956,0.695309996604919 ,0.73822420835495,0.656001031398773,0.587343633174896,0.543010890483856,0.516286194324493,0.520748317241669,0.518919825553894 ,0.481668591499329,0.508216023445129,0.460770845413208,0.484409630298615,0.566373646259308,0.965694129467011,0.921841502189636 ,0.894006490707397,0.0179339237511158,0.022374426946044,0.0351768396794796,0.0133271468803287,0.0114815225824714,0.051796730607748 ,0.0770531296730042,0.128365874290466,0.0722857713699341,0.0740104466676712,0.0232857763767242,0.114134430885315,0.0671189278364182 ,0.0153682315722108,0.0401310659945011,0.128179043531418,0.0737554952502251,0.0775797814130783,0.0229898858815432 ,0.113985672593117,0.0678060799837112,0.0408220998942852,0.014244195073843,0.0031724120490253 Transform: 0.0413181715733012,0.0620282951754813,0.997218779229126,0,0.987834248135006,-0.152295242936304,-0.0314563824956635 ,0,0.149920490642125,0.986386586814641,-0.0675662454229578,0,-63.2896897376797,9.28034499228137,1.65098175999686,1 TransformLink: 0.0413181779113036,0.987834399663875,0.149920513639184,0,0.0620283045373363,-0.152295265922039,0.986386735688766,0 ,0.997218784048189,-0.0314563826476766,-0.0675662457494719,0,0.39298057195007,63.9850191893683,0.445964229859337,1 } Deformer: "SubDeformer::Cluster_L_Clavicle", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 140,143,144,148,167,340,342,343,1793,1794,1795,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820 ,1821,1822,1823,1824,1825,1826,1827,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502 ,2503,2554,2585,2586,2587,2588,2676,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3418,3422,3426 ,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3470,3471,3472,3473,3474,3475,4052,4053,4054,4055,4056 ,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 ,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102 ,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125 ,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148 ,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171 ,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194 ,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217 ,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240 ,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263 ,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286 ,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309 ,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332 ,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355 ,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378 ,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401 ,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424 ,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447 ,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5305 ,5306,5403,5730,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807 ,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844 ,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883 ,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912 ,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935 ,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958 ,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982 ,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005 ,6006,6008,6009,6010,6011,6012,6013,6018,6019,6020,6029,6032,6128,6129,6130,6131,6138,6139,6141,6142,6143,6147,6148 ,6149,6150,6151,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6172,6175,6176,6189,6190,6191,6192,6193,6194,6195 ,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6212,6213,6215,6467,6484,6485,6486,6487 ,6488,6489,6491,6492,6493,6494,6495,10477,10478,10479,10480,10481,10499,10500,10506,10507,10508,10509,10510,10511 ,10512,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541 ,10542,10543,10544,10549,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10630,10631,10635,10636,10638 ,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10682,10683,10689,10690 ,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739 ,10740,10741,10742,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766 ,10767,10768,10769,10770,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805 ,10806,10807,10808,10809,10810,10811,10814,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834 ,10841,10844,10845,10848,10849,10850,10851,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866 ,10867,10868,10869,10870,10873,10875,10878,10882,10883,10884,10885,10886,10891,10892,10893,10894,10898,10899,10900 ,10901,10902,10903,10904,10905,10906,10907,10908 Weights: 0.287342876195908,0.218264132738113,0.300880402326584,0.32291778922081,0.127042591571808,0.189787164330482,0.270161539316177 ,0.318312853574753,0.317722767591476,0.196519017219543,0.112743601202965,0.219398647546768,0.171351626515388,0.521111190319061 ,0.35480409860611,0.320145130157471,0.543612897396088,0.270305871963501,0.236683264374733,0.193796396255493,0.265648812055588 ,0.509497165679932,0.496736019849777,0.533007383346558,0.558105051517487,0.235622301697731,0.312426656484604,0.408343434333801 ,0.344335377216339,0.340542107820511,0.493481904268265,0.251053929328918,0.176417797803879,0.131792828440666,0.531090795993805 ,0.607681572437286,0.578952074050903,0.508088767528534,0.137959614396095,0.262801229953766,0.252974390983582,0.162508279085159 ,0.430942058563232,0.502444863319397,0.387218713760376,0.071005567908287,0.103521510958672,0.133009046316147,0.0921264737844467 ,0.0481603145599365,0.091205820441246,0.0685205608606339,0.0630872771143913,0.0844610333442688,0.117379494011402,0.102523177862167 ,0.0945545136928558,0.165795803070068,0.157553404569626,0.0984221920371056,0.234691560268402,0.186710864305496,0.143213585019112 ,0.181670635938644,0.571555435657501,0.300281792879105,0.253574341535568,0.370613515377045,0.62205445766449,0.599633753299713 ,0.159768491983414,0.158106833696365,0.121347598731518,0.112758591771126,0.147620886564255,0.10937138646841,0.156569451093674 ,0.191426545381546,0.204657435417175,0.181606948375702,0.119416236877441,0.708175778388977,0.537159204483032,0.341445356607437 ,0.399679660797119,0.472524672746658,0.557649970054626,0.596433937549591,0.648896038532257,0.312094032764435,0.273928493261337 ,0.20211586356163,0.253532528877258,0.19913724064827,0.113372690975666,0.144172891974449,0.0597548261284828,0.119243465363979 ,0.0394293665885925,0.213271751999855,0.288261890411377,0.16110073029995,0.136416658759117,0.331749588251114,0.370512872934341 ,0.338433563709259,0.311584800481796,0.334039717912674,0.323579847812653,0.297916144132614,0.282470494508743,0.428035527467728 ,0.430588960647583,0.428622037172318,0.424005836248398,0.38512909412384,0.430455893278122,0.431900888681412,0.390186578035355 ,0.304801762104034,0.382831752300262,0.436085969209671,0.370297282934189,0.494224846363068,0.484575420618057,0.485800296068192 ,0.488230407238007,0.487484663724899,0.48967444896698,0.489894092082977,0.49028691649437,0.495027840137482,0.489778876304626 ,0.49161484837532,0.496164739131927,0.492680281400681,0.492597579956055,0.481758415699005,0.471920698881149,0.489105343818665 ,0.491601377725601,0.491354584693909,0.485707521438599,0.495073169469833,0.494843244552612,0.466411292552948,0.47412383556366 ,0.464865773916245,0.482917994260788,0.494209975004196,0.480746239423752,0.427003294229507,0.379820078611374,0.42709743976593 ,0.462967693805695,0.346141636371613,0.35866567492485,0.429456263780594,0.482946753501892,0.476407021284103,0.278716742992401 ,0.218594446778297,0.168773606419563,0.240790814161301,0.0902368724346161,0.172832623124123,0.0494015403091908,0.130268275737762 ,0.186492174863815,0.255184590816498,0.14660407602787,0.306570321321487,0.340423434972763,0.299146622419357,0.27849805355072 ,0.299457192420959,0.303629398345947,0.284210860729218,0.413726359605789,0.405999809503555,0.419456332921982,0.356164246797562 ,0.345661550760269,0.408305525779724,0.40659299492836,0.350536346435547,0.312975913286209,0.270987153053284,0.413858473300934 ,0.341171443462372,0.483744025230408,0.490468919277191,0.488374829292297,0.484011590480804,0.484352439641953,0.49483135342598 ,0.487460076808929,0.497192651033401,0.487598240375519,0.488094836473465,0.490725487470627,0.476294726133347,0.45472925901413 ,0.467323541641235,0.480455249547958,0.472929209470749,0.483009994029999,0.491576075553894,0.448032379150391,0.457088500261307 ,0.446510463953018,0.470288187265396,0.49086919426918,0.465316772460938,0.353975713253021,0.402869999408722,0.403054624795914 ,0.444430112838745,0.328001022338867,0.316157102584839,0.407167613506317,0.46914541721344,0.460395693778992,0.226573526859283 ,0.179716765880585,0.246300727128983,0.288273096084595,0.0961756333708763,0.174234688282013,0.0480747558176517,0.124625325202942 ,0.0303347427397966,0.10171215236187,0.414591491222382,0.40688768029213,0.410651832818985,0.404483884572983,0.36542534828186 ,0.323211908340454,0.278422921895981,0.491320610046387,0.489428728818893,0.488226443529129,0.491683721542358,0.492925882339478 ,0.491198897361755,0.494440972805023,0.493882149457932,0.501135170459747,0.493873596191406,0.456400662660599,0.480663388967514 ,0.494727551937103,0.212771892547607,0.147338449954987,0.191964328289032,0.256925165653229,0.148505166172981,0.0747698768973351 ,0.0388709753751755,0.111240945756435,0.386646777391434,0.39567494392395,0.400452464818954,0.335536032915115,0.290832757949829 ,0.244191065430641,0.491688162088394,0.495783418416977,0.493266344070435,0.483279794454575,0.502431750297546,0.489663749933243 ,0.504642188549042,0.492314904928207,0.437400162220001,0.468595236539841,0.480583399534225,0.246725380420685,0.195764228701591 ,0.108041472733021,0.0558412708342075,0.0362572111189365,0.300465404987335,0.34278017282486,0.486127644777298,0.484876960515976 ,0.487915635108948,0.491282552480698,0.497506499290466,0.49445840716362,0.482423603534698,0.414954781532288,0.425710588693619 ,0.381416827440262,0.461820185184479,0.162621557712555,0.211802735924721,0.0853544026613235,0.045819204300642,0.266586184501648 ,0.311163306236267,0.486227840185165,0.490895986557007,0.497843503952026,0.500256538391113,0.475985050201416,0.470192551612854 ,0.389865875244141,0.352535128593445,0.40158349275589,0.443223685026169,0.344601839780808,0.439949661493301,0.449354231357574 ,0.600000023841858,0.600000023841858,0.585119128227234,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858 ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.36919179558754 ,0.374925911426544,0.389459431171417,0.390670835971832,0.414509892463684,0.41056901216507,0.435979396104813,0.42843696475029 ,0.451957821846008,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858 ,0.5,0.353585124015808,0.378713309764862,0.409605801105499,0.435899168252945,0.550000011920929,0.600000023841858,0.649999976158142 ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.452943533658981,0.441168695688248,0.441423445940018 ,0.440933734178543,0.550000011920929,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858 ,0.600000023841858,0.5,0.451606303453445,0.449999988079071,0.445196092128754,0.449999988079071,0.5,0.410163074731827 ,0.550000011920929,0.550000011920929,0.5,0.453456491231918,0.453660607337952,0.454501986503601,0.451309412717819,0.442042887210846 ,0.411225140094757,0.374216198921204,0.367380231618881,0.350631505250931,0.46471431851387,0.541934013366699,0.541399717330933 ,0.472214698791504,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858 ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540618896484375,0.539543628692627,0.408979505300522 ,0.403523325920105,0.423235297203064,0.421915978193283,0.440413743257523,0.443479090929031,0.455287665128708,0.461397409439087 ,0.542557179927826,0.474392086267471,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858 ,0.540664434432983,0.39019450545311,0.413305699825287,0.440004765987396,0.461692869663239,0.493854552507401,0.542806029319763 ,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540695428848267,0.492301762104034 ,0.492998450994492,0.493540436029434,0.493857055902481,0.545637249946594,0.496385663747787,0.600000023841858,0.600000023841858 ,0.600000023841858,0.600000023841858,0.600000023841858,0.544318497180939,0.495441734790802,0.380767822265625,0.496274262666702 ,0.496445864439011,0.541243731975555,0.545268177986145,0.491165548563004,0.492123425006866,0.492635935544968,0.493220061063766 ,0.492741793394089,0.439888089895248,0.461666733026505,0.438809275627136,0.411170661449432,0.439403742551804,0.406360357999802 ,0.399927645921707,0.384916067123413,0.408272355794907,0.437813818454742,0.462262064218521,0.476009368896484,0.473369926214218 ,0.465719997882843,0.388347536325455,0.390445053577423,0.390155345201492,0.387774527072906,0.32721534371376,0.332227468490601 ,0.312882304191589,0.265351116657257,0.274931788444519,0.276817619800568,0.295409381389618,0.29927259683609,0.298837125301361 ,0.303793102502823,0.294210225343704,0.296336442232132,0.274231463670731,0.264867663383484,0.0984181761741638,0.254736602306366 ,0.25873875617981,0.138245850801468,0.141562297940254,0.263141125440598,0.274412363767624,0.297334283590317,0.302293747663498 ,0.297444730997086,0.29504469037056,0.292524039745331,0.271924585103989,0.262868225574493,0.187646597623825,0.138774082064629 ,0.293411880731583,0.272233903408051,0.262759327888489,0.21303403377533,0.138494804501534,0.308960318565369,0.31627756357193 ,0.32057198882103,0.143520221114159,0.54930967092514,0.558317601680756,0.601410150527954,0.668936431407928,0.859407842159271 ,0.844669342041016,0.818968653678894,0.689110934734344,0.629467904567719,0.934072911739349,0.90171092748642,0.740257918834686 ,0.722909212112427,0.772041916847229,0.74228435754776,0.596917271614075,0.570652961730957,0.501783609390259,0.770733416080475 ,0.685721516609192,0.490369111299515,0.514139831066132,0.591991603374481,0.572175443172455,0.487940400838852,0.503393948078156 ,0.391505509614944,0.932837843894959,0.920459508895874,0.791873812675476,0.83431601524353,0.484917819499969,0.747351765632629 ,0.895894348621368,0.781249701976776,0.72469288110733,0.561075389385223,0.520167589187622,0.509442687034607,0.574886918067932 ,0.491814941167831,0.482179373502731,0.509530603885651,0.609283030033112,0.511695206165314,0.703715860843658,0.614887654781342 ,0.412589967250824,0.468591123819351,0.200000002980232,0.130821987986565,0.0498344413936138,0.800000011920929,0.5 ,0.374432504177094,0.139433845877647,0.372645854949951,0.438550859689713,0.249949619174004,0.25,0.688447892665863 ,0.756752729415894,0.714166462421417,0.638433933258057,0.549879252910614,0.666928946971893,0.527884304523468,0.548589766025543 ,0.658684313297272,0.69450855255127,0.0693961083889008,0.180000007152557,0.0581055544316769,0.452420741319656,0.42332199215889 ,0.236328333616257,0.175878316164017,0.180000007152557,0.501450002193451,0.0872168615460396,0.0472639165818691,0.140358105301857 ,0.475359320640564,0.481175273656845,0.25,0.253921389579773,0.542810201644897,0.255297660827637,0.25,0.250288337469101 ,0.110027000308037,0.149569854140282,0.129948511719704,0.163483023643494,0.170433908700943,0.0789583772420883,0.130037143826485 ,0.0977599322795868,0.3859803378582,0.397739320993423,0.181627526879311,0.170861035585403,0.122231982648373,0.113688245415688 ,0.0980523452162743,0.113921858370304,0.213507369160652,0.218370392918587,0.218951821327209,0.231220692396164,0.243951767683029 ,0.233398959040642,0.422404229640961,0.422159910202026,0.222008794546127,0.242377281188965,0.249843165278435,0.353360027074814 ,0.230180963873863,0.246015608310699,0.238067552447319,0.413277089595795,0.198262080550194,0.249708235263824,0.25 ,0.25,0.25,0.246774092316628,0.25,0.25,0.25,0.248918384313583,0.242267489433289,0.224540933966637,0.231072202324867 ,0.312419831752777,0.29113432765007,0.399637073278427,0.600000023841858,0.393271803855896,0.308805286884308,0.310129761695862 ,0.303165584802628,0.272623211145401,0.312031984329224,0.155365735292435,0.389771282672882,0.398966461420059,0.14198449254036 ,0.036714855581522,0.374302238225937,0.12066026031971,0.380831450223923,0.353778511285782,0.136191874742508,0.178431421518326 ,0.13067390024662,0.279977709054947,0.292773634195328,0.25970059633255,0.176739081740379,0.300000011920929,0.300000011920929 ,0.122005775570869,0.23972974717617,0.222396865487099,0.200173661112785,0.0868332833051682,0.20101198554039,0.365400671958923 ,0.277413785457611,0.0936562716960907,0.481789469718933,0.236978203058243,0.39022433757782,0.496913224458694,0.497893631458282 ,0.371885746717453,0.276244431734085,0.45980367064476,0.0648277550935745,0.00409483723342419,0.00100980454590172,0.00202051992528141 ,0.00632891012355685,0.0247978214174509,0.0295577496290207,0.008045744150877,0.0131089640781283,0.0208909809589386 ,0.0764315575361252,0.00398753024637699,0.00538884755223989,0.100000001490116,0.0107455933466554,0.00638314755633473 ,0.021383011713624,0.00743433879688382,0.0208641234785318,0.0666176676750183,0.100000001490116,0.012950842268765,0.0156243359670043 ,0.00565479137003422,0.00672947941347957,0.00293202605098486,0.00203574099577963,0.186777889728546,0.123878009617329 ,0.0835776850581169,0.108076155185699,0.0213416274636984,0.00666187796741724,0.0166008118540049,0.0488587208092213 ,0.00350723508745432,0.00225304625928402,0.00419815676286817,0.00883233454078436,0.00231246137991548,0.0317243710160255 ,0.300000011920929,0.300000011920929,0.0762900784611702,0.0403979457914829,0.0416721440851688,0.0470849089324474,0.111286424100399 ,0.0332397967576981,0.181182488799095,0.00807778630405664,0.0166490729898214,0.0129965776577592,0.0273373015224934 ,0.0197057314217091,0.00603368505835533,0.103672489523888,0.0565624609589577,0.0216145347803831,0.0167154371738434 ,0.00300612882710993,0.00544778537005186,0.00598917761817575,0.00195894809439778,0.00142651202622801,0.484894901514053 ,0.684086501598358,0.718907594680786,0.676065981388092,0.40315368771553,0.556465148925781,0.848726749420166,0.621510863304138 ,0.0385145246982574,0.0412820167839527,0.0364001467823982,0.016484459862113,0.013350079767406,0.0127451401203871,0.0128253996372223 ,0.0140470778569579,0.0141159072518349,0.0433820821344852,0.0467647910118103,0.0264780968427658,0.0254385508596897 ,0.0252509098500013,0.0238212086260319,0.0206959210336208,0.0233588702976704,0.0181094761937857,0.0389366447925568 ,0.0427717715501785,0.0298443771898746,0.0229412000626326,0.0311520807445049,0.0416259765625,0.0265055652707815,0.0279774852097034 ,0.0225728377699852,0.052638191729784,0.0411552786827087,0.022190036252141,0.029569573700428,0.0644005686044693,0.0372306294739246 ,0.0174010694026947,0.0159334260970354,0.0642833635210991,0.0247891172766685,0.0386725217103958,0.0488913655281067 ,0.0210474915802479,0.0161526277661324,0.0165552590042353,0.0216749012470245,0.0195208117365837,0.0167216528207064 ,0.0224301293492317,0.0151196178048849,0.0144087765365839,0.0139210736379027,0.0183347892016172,0.0194267723709345 ,0.0171091575175524,0.0175132360309362,0.0197858326137066,0.0189218334853649,0.0205828379839659,0.0198940336704254 ,0.0197188314050436,0.0550209023058414,0.0664688125252724,0.0439060628414154,0.0204747263342142,0.0277326870709658 ,0.00403420999646187,0.0360795818269253,0.0313406437635422,0.0429699942469597,0.0696650743484497,0.0417818203568459 ,0.0495671816170216,0.0916373878717422,0.0601081997156143,0.0219621360301971,0.0245194919407368,0.0292192939668894 ,0.0391875095665455,0.027691051363945,0.0345890782773495,0.0757055059075356,0.048767551779747,0.0649795681238174,0.0988612323999405 ,0.0283221397548914,0.0221623983234167,0.0295963045209646,0.0308881979435682,0.0275767091661692,0.0283039454370737 ,0.0218954849988222,0.0213178470730782,0.0215635728091002,0.0382499136030674,0.0279828310012817,0.0203322749584913 ,0.0206757597625256,0.0208319090306759,0.0254390873014927,0.0176928229629993,0.0229123514145613,0.0227153822779655 ,0.0223618764430285,0.0181357078254223,0.0191761013120413,0.0245725233107805,0.00946254096925259,0.0106111532077193 ,0.0123485242947936,0.0248966719955206,0.020134637132287,0.0190518815070391,0.025281023234129,0.0252148434519768,0.021393371745944 ,0.0203799623996019,0.0214727520942688,0.0261586289852858,0.0101737771183252,0.0134961437433958,0.013369576074183 ,0.0157628618180752,0.0257200412452221,0.0271620377898216,0.0329086408019066,0.0341657251119614,0.0381906665861607 ,0.0430698320269585,0.0974766910076141,0.0675418078899384,0.0754710882902145,0.0998940393328667,0.05403833091259,0.0332547575235367 ,0.0195903498679399,0.0257969200611115,0.0235635377466679,0.0227375086396933,0.0098038949072361,0.0109773771837354 ,0.0231422260403633,0.0319954268634319,0.0609554350376129,0.0171176232397556,0.0139615209773183,0.00126926240045577 ,0.00114938686601818,0.0143906706944108,0.0150092467665672,0.00510499672964215,0.00745106535032392,0.00471863150596619 ,0.011429768987,0.0355809293687344,0.0355133190751076,0.102013848721981,0.0956157669425011,0.0119818644598126,0.0129090240225196 ,0.0540297590196133,0.0342668630182743,0.0395372025668621,0.0619741417467594,0.0335602201521397,0.0617258436977863 ,0.0201867260038853,0.0267706867307425,0.016303826123476,0.0157962460070848,0.0258567780256271,0.0227929409593344 ,0.0163461975753307,0.0234469547867775,0.0147395962849259,0.023964473977685,0.00104093307163566,0.0163080170750618 ,0.00983362924307585,0.0199874434620142,0.0222630240023136,0.0186568982899189,0.0195088945329189,0.019377188757062 ,0.00268315174616873,0.0192961413413286,0.0201760977506638,0.0149978045374155,0.00338341924361885,0.00293034012429416 ,0.00150685710832477,0.0279272049665451,0.0144925909116864,0.00557977287098765,0.0227816849946976,0.00450336327776313 ,0.00403442652896047,0.00253123859874904,0.00225223274901509 Transform: 0.978469015335443,-0.0695892827205353,0.194308144005479,0,-0.198997136937502,-0.0683111362190089,0.977616329180682 ,0,-0.0547582084883066,-0.995234101286735,-0.0806883993392753,0,10.562256371274,2.41825540251226,-59.2613642964607 ,1 TransformLink: 0.978469078077147,-0.19899714969766,-0.0547582119995301,0,-0.0695892830013208,-0.0683111364946372,-0.9952341053024 ,0,0.194308151836972,0.977616368583021,-0.080688402591381,0,1.34840957734272,60.2019324479208,-1.79660429498372,1 } Deformer: "SubDeformer::Cluster_R_Clavicle", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 94,95,108,109,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,150,163,166,168,169 ,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,1011,1089,1092,1093,1147 ,1148,1154,1155,1156,1157,1731,1732,1733,1734,1740,1741,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762 ,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1824,2006,2008,2557,2689,3470,3471,5305,5306,5320,5321 ,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388 ,5394,5395,5396,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417 ,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457 ,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487 ,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510 ,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535 ,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558 ,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5581,5582,5583 ,5584,5585,5586,5587,5588,5590,5591,5592,5593,5594,5600,5601,5603,5604,5612,5621,5622,5633,5634,5635,5636,5641,5642 ,5643,5644,5645,5646,5650,5651,5652,5653,5654,5655,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5675,5678,5679 ,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5704 ,5705,5706,5707,5715,5723,5726,5727,5728,5729,5730,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,6487,10054,10055 ,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089 ,10090,10091,10092,10097,10098,10099,10100,10101,10102,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118 ,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236 ,10237,10238,10246,10247,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282 ,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321 ,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10362,10363,10364,10365,10366,10367,10368 ,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10394,10395,10396,10397 ,10398,10399,10400,10412,10413,10414,10415,10416,10419,10420,10421,10422,10426,10427,10428,10429,10430,10431,10432 ,10433,10434,10435,10436,10437,10438,10439,10440,10441,10447,10450,10454,10455,10457,10458,10459,10461,10465,10467 ,10468,10472,10473,10474,10475,10477,10478,10479,10480,10481,10494,10495,10496,10497 Weights: 0.0811896696686745,0.106965370476246,0.0439532324671745,0.0603947602212429,0.504491329193115,0.29615181684494,0.257327705621719 ,0.347705841064453,0.225890830159187,0.189256742596626,0.152579382061958,0.211225852370262,0.314609289169312,0.472719848155975 ,0.4955133497715,0.511756122112274,0.206776008009911,0.273434907197952,0.348244726657867,0.288756161928177,0.295447260141373 ,0.389805644750595,0.216608464717865,0.269484579563141,0.52827388048172,0.0651521161198616,0.155393227934837,0.116333171725273 ,0.364117801189423,0.54840350151062,0.488428503274918,0.321933090686798,0.10997598618269,0.217991501092911,0.203374117612839 ,0.128395795822144,0.403514206409454,0.434205532073975,0.308789700269699,0.259588360786438,0.0680640563368797,0.10414981842041 ,0.132307544350624,0.086383655667305,0.0469684451818466,0.0455419532954693,0.0944439843297005,0.0689528957009315,0.0652325302362442 ,0.0889942720532417,0.124588340520859,0.115054629743099,0.0808641090989113,0.078086256980896,0.145058155059814,0.151040598750114 ,0.0874453037977219,0.258512765169144,0.197405755519867,0.150129958987236,0.195501983165741,0.583253026008606,0.280665725469589 ,0.264542937278748,0.415470987558365,0.555991590023041,0.655387282371521,0.678301155567169,0.129091560840607,0.133147850632668 ,0.102706968784332,0.0976598337292671,0.127154722809792,0.0970341414213181,0.0665765851736069,0.0911675244569778,0.123185187578201 ,0.153349637985229,0.172009184956551,0.155933886766434,0.093811422586441,0.698477327823639,0.62477844953537,0.645496368408203 ,0.253713548183441,0.34293207526207,0.384178310632706,0.470083117485046,0.505369603633881,0.447033524513245,0.566069185733795 ,0.250466287136078,0.13798713684082,0.22524531185627,0.0365451537072659,0.098877839744091,0.125019162893295,0.0778745412826538 ,0.32728722691536,0.335197657346725,0.548355221748352,0.559520184993744,0.605117619037628,0.66703200340271,0.857504963874817 ,0.838888585567474,0.817730724811554,0.68658447265625,0.62231719493866,0.930196166038513,0.901579201221466,0.073124073445797 ,0.0728209540247917,0.0774632692337036,0.0730397775769234,0.0615610517561436,0.0576975829899311,0.503667175769806 ,0.0770656988024712,0.691126823425293,0.491523891687393,0.518488049507141,0.600300371646881,0.521051943302155,0.570780634880066 ,0.485464632511139,0.500299453735352,0.078926146030426,0.932044923305511,0.914662539958954,0.77969491481781,0.83053070306778 ,0.48119843006134,0.33202987909317,0.733864486217499,0.885810911655426,0.763347387313843,0.714982330799103,0.552891075611115 ,0.51541668176651,0.505415141582489,0.567674338817596,0.490832775831223,0.479702204465866,0.504714846611023,0.591859996318817 ,0.507071256637573,0.685161232948303,0.601899802684784,0.278785139322281,0.465399295091629,0.127761036157608,0.295493602752686 ,0.165520682930946,0.250842660665512,0.241439938545227,0.263491183519363,0.108098432421684,0.25892972946167,0.497192919254303 ,0.497700780630112,0.676034033298492,0.0745359435677528,0.697876036167145,0.622006893157959,0.539307177066803,0.674886465072632 ,0.520930409431458,0.541126072406769,0.649991273880005,0.694431722164154,0.384999990463257,0.649999976158142,0.308550924062729 ,0.450778424739838,0.649999976158142,0.327679842710495,0.241778329014778,0.420805633068085,0.497350841760635,0.073303334414959 ,0.0860887691378593,0.0952140912413597,0.471008658409119,0.478044956922531,0.497991144657135,0.490312159061432,0.537073493003845 ,0.498353183269501,0.497871071100235,0.496121853590012,0.191246077418327,0.290554016828537,0.180064454674721,0.224595800042152 ,0.330453634262085,0.13161201775074,0.176965922117233,0.163933858275414,0.267501980066299,0.275521218776703,0.249476358294487 ,0.233987867832184,0.209987387061119,0.194429218769073,0.164188459515572,0.192451417446136,0.421390801668167,0.431404799222946 ,0.430364221334457,0.456319212913513,0.485508620738983,0.463099330663681,0.416302442550659,0.416258484125137,0.438949644565582 ,0.480661869049072,0.49902668595314,0.243896454572678,0.319553971290588,0.486177712678909,0.331051826477051,0.407012581825256 ,0.27311584353447,0.497810781002045,0.5,0.498094856739044,0.5,0.344194382429123,0.349997818470001,0.497277468442917 ,0.5,0.495895445346832,0.480586707592011,0.442554503679276,0.456413328647614,0.298786699771881,0.280739516019821,0.3919517993927 ,0.390767812728882,0.384277284145355,0.298110395669937,0.300616472959518,0.293284028768539,0.263502031564713,0.305093467235565 ,0.150212869048119,0.384823501110077,0.394534796476364,0.134362503886223,0.0351882837712765,0.365925788879395,0.111604079604149 ,0.366223394870758,0.338921874761581,0.126606851816177,0.169872716069222,0.124539494514465,0.267024546861649,0.284294724464417 ,0.249173209071159,0.167878016829491,0.074166439473629,0.0663126334547997,0.113084986805916,0.228605255484581,0.218380376696587 ,0.198807418346405,0.0853831917047501,0.2009536921978,0.361773580312729,0.27582186460495,0.095493271946907,0.478643804788589 ,0.234572812914848,0.384814769029617,0.495410859584808,0.499167263507843,0.365400642156601,0.270231038331985,0.45518159866333 ,0.0656886175274849,0.0038784621283412,0.00182033306919038,0.00570681737735868,0.0224756076931953,0.0269702468067408 ,0.00732538383454084,0.00128690106794238,0.00738434819504619,0.00386704737320542,0.0120105864480138,0.0196159575134516 ,0.0722305700182915,0.00189907208550721,0.00837074406445026,0.00133265019394457,0.00390737317502499,0.00108838721644133 ,0.00520020211115479,0.00149579567369074,0.00195087259635329,0.00167434592731297,0.0385287217795849,0.0101689994335175 ,0.00581388175487518,0.0194021947681904,0.00715417554602027,0.0199089664965868,0.00318020489066839,0.0635750964283943 ,0.0438726767897606,0.0124826999381185,0.0152434539049864,0.00605776254087687,0.0069635221734643,0.00306702312082052 ,0.00219031004235148,0.00107819936238229,0.183293163776398,0.123738005757332,0.0837252363562584,0.106336541473866 ,0.02176827006042,0.00684678554534912,0.0164734870195389,0.0481944680213928,0.00368563714437187,0.00234336918219924 ,0.00420357985422015,0.00932320952415466,0.00249722274020314,0.0306781362742186,0.0462840646505356,0.042948454618454 ,0.0715780779719353,0.0368835851550102,0.0379315093159676,0.0431694351136684,0.112874694168568,0.0348013080656528 ,0.180167987942696,0.00833920761942863,0.0163257773965597,0.0127486828714609,0.0269198063760996,0.0201910994946957 ,0.00653758551925421,0.105009749531746,0.0578845925629139,0.0229682829231024,0.0176938530057669,0.00325983925722539 ,0.00534686958417296,0.00589984748512506,0.00204170658253133,0.00146694935392588,0.0015066540800035,0.00157240615226328 ,0.0013683115830645,0.481965035200119,0.688069224357605,0.726324617862701,0.680854439735413,0.408174365758896,0.56397271156311 ,0.856086015701294,0.628196120262146,0.0358021147549152,0.0388568043708801,0.0347223058342934,0.0159178152680397,0.294692695140839 ,0.121550291776657,0.318417549133301,0.152870550751686,0.0297826658934355,0.0287917274981737,0.0230006705969572,0.0213493201881647 ,0.021949103102088,0.0226233545690775,0.0245684403926134,0.0207092072814703,0.0198129694908857,0.0292157959192991 ,0.0285200476646423,0.0244624875485897,0.0285634938627481,0.0266288779675961,0.0233569946140051,0.0230660326778889 ,0.0223205760121346,0.0235582739114761,0.0270807910710573,0.0252497419714928,0.0205877032130957,0.0210633222013712 ,0.0520002655684948,0.0519647859036922,0.0151932295411825,0.0169342141598463,0.0237237010151148,0.0229084882885218 ,0.0212979335337877,0.0211339090019464,0.0157450083643198,0.0149975558742881,0.0140739753842354,0.0225031841546297 ,0.0182464756071568,0.0170384235680103,0.0186013076454401,0.0150382602587342,0.0126649113371968,0.0126809123903513 ,0.0219173114746809,0.0171132441610098,0.0192538872361183,0.0219725165516138,0.0210953764617443,0.0230501908808947 ,0.0233804732561111,0.0214685052633286,0.0210958626121283,0.0274754408746958,0.0225150212645531,0.0507607273757458 ,0.00324849225580692,0.00230311276391149,0.0205044820904732,0.0195952504873276,0.0208354070782661,0.0230906028300524 ,0.0224607158452272,0.0257405936717987,0.0201869662851095,0.0517509244382381,0.0203061792999506,0.0184621382504702 ,0.0202194061130285,0.0262561142444611,0.0242316443473101,0.0248070918023586,0.0258013997226954,0.0232786629348993 ,0.021582905203104,0.0208789668977261,0.0204930528998375,0.0211619697511196,0.0254055745899677,0.0262512918561697 ,0.0226288698613644,0.0245581641793251,0.0239381864666939,0.0214787982404232,0.0214498583227396,0.0205761771649122 ,0.0259324423968792,0.0252932719886303,0.0207940619438887,0.0208942238241434,0.019823607057333,0.0189799387007952 ,0.022341238334775,0.0175818745046854,0.021635364741087,0.0208590421825647,0.0202130284160376,0.0228413138538599,0.0187332164496183 ,0.0222814083099365,0.00721948593854904,0.00893825478851795,0.0122251715511084,0.0131850503385067,0.0238036401569843 ,0.0233332365751266,0.0189465973526239,0.0196329019963741,0.0217657741159201,0.0186960380524397,0.0192628987133503 ,0.0228047538548708,0.0188687704503536,0.00966120511293411,0.00806799624115229,0.00595046579837799,0.00591902295127511 ,0.0232310779392719,0.0264482256025076,0.029419269412756,0.0252193752676249,0.0389464311301708,0.0249736830592155 ,0.0361362397670746,0.025445282459259,0.0225537400692701,0.0238805040717125,0.0220386572182179,0.0208422690629959 ,0.020428255200386,0.0189677346497774,0.0206352658569813,0.021261390298605,0.0100880740210414,0.0100587056949735,0.0217400155961514 ,0.0242703147232533,0.0314539447426796,0.0146723967045546,0.016406362876296,0.00290933577343822,0.00303262821398675 ,0.0109252370893955,0.00135533628053963,0.0026568693574518,0.0238387305289507,0.023859228938818,0.0229988656938076 ,0.0269602816551924,0.0106720477342606,0.0104876281693578,0.019563851878047,0.0196315422654152,0.029798885807395,0.0370448529720306 ,0.0274094771593809,0.0410918444395065,0.0189183801412582,0.020300354808569,0.0153505494818091,0.0133901620283723 ,0.0227218400686979,0.0189896188676357,0.0139062767848372,0.0196586865931749,0.0152109181508422,0.0214336402714252 ,0.0111258868128061,0.00999513454735279,0.0197951514273882,0.0215826574712992,0.0487717166543007,0.041760291904211 ,0.0189418196678162,0.00134728313423693,0.0198628734797239,0.00401673326268792,0.00362365040928125,0.00175487017259002 ,0.00186694483272731,0.00233244802802801,0.00539519498124719,0.0136201335117221,0.0129918465390801,0.0130262523889542 ,0.0141849555075169,0.0142200998961926,0.0060765091329813,0.00598268769681454,0.00254058255814016,0.00413914304226637 Transform: -0.987461993727725,-0.0695892778200937,0.141690541961846,0,-0.136984517421225,-0.0683111254337173,-0.988214958114558 ,0,0.0784482095958496,-0.99523410378089,0.0579219836329766,0,7.30754685020742,2.41825467121705,59.8176295206032,1 TransformLink: -0.987461925929919,-0.136984508016053,0.0784482042097015,0,-0.0695892779054036,-0.0683111255174604,-0.995234105000953 ,0,0.141690546310218,-0.988214988442108,0.0579219854105573,0,-1.09138372286622,60.2788924737958,-1.63129026859045 ,1 } Deformer: "SubDeformer::Cluster_L_eye_joint1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 98,99,106,110,151,152,153,154,155,156,157,158,159,160,161,162,164,165,177,178,179,180,181,182,183,184,185,213,214 ,216,217,218,219,220,291,292,324,326,336,337,750,751,752,754,755,796,797,828,833,883,884,942,943,944,945,946,1000 ,1053,1087,1088,1090,1091,1149,1153,1162,1201,1746,1747,1748,1756,1757,1758,1830,1831,1832,1833,1834,1835,1836,1837 ,1838,1839,1840,1841,1842,1843,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960 ,1961,1962,1964,1991,1992,1993,2002,2003,2005,2009,2010,2011,2012,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043 ,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066 ,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2079,2080,2081,2082,2083,2084,2086,2087,2088,2090,2093,2094 ,2095,2096,2097,2098,2099,2100,2101,2173,2178,2179,2180,2265,2269,2270,2271,2319,2320,2321,2322,2323,2324,2325,2326 ,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2404,2422,2423,2424,2425,2426,2427,2449,2450,2467,2468 ,2469,2470,2475,2499,2504,2508,2509,2510,2511,2512,2555,2556,2560,2595,2596,2597,2598,2609,2610,2617,2618,2619,2620 ,2621,2622,2640,2651,2652,2653,2654,2655,2656,2657,2666,2667,2668,2669,2678,2679,2690,2691,2702,2703,2716,2717,2718 ,2719,2730,2733,2734,2735,2736,2737,2738,2739,2752,2768,2769,2771,2772,2792,2793,2806,2807,2808,2813,2818,2819,2831 ,2835,2844,2851,2852,2853,2854,2855,2856,2880,2897,2898,2910,2911,2913,2914,3164,3165,3166,3167,3168,3169,3170,3171 ,3172,3173,3174,3175,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210 ,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3230,3235,3236,3237,3238 ,3239,3240,3241,3242,3244,3245,3247,3248,3249,3314,3315,3317,3318,3319,3321,3322,3323,3324,3325,3329,3330,3331,3332 ,3333,3334,3338,3339,3342,3355,3358,3362,3363,3365,3366,3367,3368,3372,3383,3384,3385,3403,3404,3423,3424,3425,3432 ,3433,3472,3480,3484,3485,3500,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568 ,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591 ,3592,3593,3594,3595,3596,3597,3598,3599,3600,4052,4053,4054,4055,4056,4057,4058,4060,4062,4063,4064,4065,4066,4067 ,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090 ,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113 ,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4130,4131,4132,4133,4134,4135,4136,4137 ,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160 ,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183 ,4184,4185,4186,4187,4188,4189,4190,4191,4193,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208 ,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232 ,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257 ,4258,4259,4260,4261,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4279,4280,4281,4282 ,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4302,4303,4304,4305,4306 ,4307,4308,4309,4310,4311,4314,4315,4316,4317,4318,4319,4321,4322,4323,4326,4327,4328,4329,4330,4331,4333,4334,4335 ,4336,4337,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363 ,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386 ,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409 ,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5790,5791 ,5795,5796,5797,5798,5799,5800,5828,5830,5831,5834,5837,5838,5840,5841,5842,5843,5846,5848,5879,5883,5904,5937,5964 ,5965,5966,5967,5968,5969,5970,5971,5972,5975,5977,5980,5981,5985,5989,5990,6004,6020,6141,6159,6162,6192,6467,6485 ,6489,6493,6494 Weights: 0.0038912461604923,0.00746879680082202,0.00141331483609974,0.01067846827209,0.013077687472105,0.0246206074953079,0.0236639585345984 ,0.0152580700814724,0.0286018270999193,0.0310774073004723,0.0312411542981863,0.0261699371039867,0.0184016786515713 ,0.0347599051892757,0.024570794776082,0.0318554602563381,0.041717704385519,0.0357340350747108,0.00606823712587357 ,0.00972852203994989,0.0188133157789707,0.0098462775349617,0.0125692626461387,0.019047936424613,0.00273100752383471 ,0.00462566455826163,0.00593316461890936,0.00270845112390816,0.00425019580870867,0.00877111963927746,0.0125265428796411 ,0.0174335725605488,0.00591986905783415,0.00135375326499343,0.00188461295329034,0.00151532597374171,0.00204999255947769 ,0.00690315803512931,0.00123022275511175,0.00282211299054325,0.00406783912330866,0.00228741578757763,0.0011156260734424 ,0.00105570175219327,0.00231963209807873,0.00712635600939393,0.00509478570893407,0.0051323501393199,0.00548261823132634 ,0.00537449773401022,0.00795647688210011,0.00294765923172235,0.00560125382617116,0.0033296609763056,0.00171174516435713 ,0.00288268574513495,0.00104738119989634,0.00211143540218472,0.00455130264163017,0.00443605519831181,0.0119684366509318 ,0.00844237580895424,0.00610086182132363,0.0057710106484592,0.00910606142133474,0.0129934316501021,0.0254145096987486 ,0.0266697257757187,0.0183888282626867,0.0464220605790615,0.0186563823372126,0.0157747473567724,0.0484627932310104 ,0.0810441970825195,0.0768198370933533,0.0468261800706387,0.0932487100362778,0.0852285027503967,0.0717913508415222 ,0.0682760924100876,0.0428164899349213,0.0595326125621796,0.0388268604874611,0.0580568835139275,0.0475558713078499 ,0.0521105714142323,0.035434115678072,0.0606706887483597,0.075504295527935,0.0447081252932549,0.075449101626873,0.0893826857209206 ,0.0160036776214838,0.0208015814423561,0.0227869488298893,0.00141787191387266,0.00676626246422529,0.0065395925194025 ,0.00140758685301989,0.0207227878272533,0.0193231124430895,0.00740664172917604,0.00680384412407875,0.00158558180555701 ,0.00143789895810187,0.00504043977707624,0.00720629096031189,0.00148507207632065,0.0222162082791328,0.0100442161783576 ,0.0237202029675245,0.002926493762061,0.00792062189429998,0.0278539098799229,0.0013780000153929,0.0272102281451225 ,0.349999994039536,0.150000005960464,0.449999988079071,0.150000005960464,0.150000005960464,0.219999998807907,0.539033949375153 ,0.649999976158142,0.749286413192749,0.5,0.752774000167847,0.800000011920929,0.699999988079071,0.699999988079071,0.150000005960464 ,0.164102658629417,0.242218345403671,0.110994532704353,0.200312361121178,0.119263090193272,0.147319793701172,0.226669728755951 ,0.100000001490116,0.342192471027374,0.502626240253448,0.691313743591309,0.464090317487717,0.100000001490116,0.288183063268662 ,0.00674763834103942,0.00481084920465946,0.0242928043007851,0.0119534581899643,0.0154355028644204,0.00483096996322274 ,0.00424615060910583,0.0158611889928579,0.00221397657878697,0.0145594794303179,0.0105838282033801,0.0327097326517105 ,0.0444533079862595,0.0895712301135063,0.0500000007450581,0.0221567433327436,0.0531193725764751,0.0414562374353409 ,0.0757283121347427,0.133984073996544,0.107808001339436,0.00132235384080559,0.010545508004725,0.00400018226355314 ,0.00207298039458692,0.0700000002980232,0.0313636586070061,0.0215178523212671,0.0156056005507708,0.034803070127964 ,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00151988526340574,0.0085519477725029,0.0297721326351166 ,0.0211408082395792,0.0018999184248969,0.00622903881594539,0.0202187467366457,0.00821313075721264,0.175155088305473 ,0.20246547460556,0.0748029351234436,0.0500103756785393,0.1078976765275,0.0739056691527367,0.0437904708087444,0.0616192035377026 ,0.0512847304344177,0.0351532548666,0.15351414680481,0.115480601787567,0.0785194784402847,0.106780119240284,0.0841209962964058 ,0.061554454267025,0.100000001490116,0.0865721106529236,0.114501155912876,0.116757825016975,0.00275758747011423,0.0395147576928139 ,0.0261142645031214,0.0137884160503745,0.00676471227779984,0.0145978583022952,0.0223576165735722,0.0301102176308632 ,0.0289073176681995,0.00515285972505808,0.0546868927776814,0.0412694625556469,0.00425857631489635,0.00223806616850197 ,0.0238872319459915,0.0314677245914936,0.0603148639202118,0.0919864401221275,0.117405980825424,0.00103968661278486 ,0.00140306551475078,0.0181460976600647,0.0135137075558305,0.00193576700985432,0.182137340307236,0.111208200454712 ,0.128003790974617,0.0730748623609543,0.0212860628962517,0.0486274063587189,0.00415304768830538,0.00841330084949732 ,0.00778522342443466,0.00381538085639477,0.0112824933603406,0.00411980412900448,0.00129261950496584,0.0338672325015068 ,0.105499587953091,0.0661656931042671,0.15208226442337,0.256753355264664,0.188580900430679,0.150000005960464,0.00176679529249668 ,0.0045908116735518,0.00990359205752611,0.00294763781130314,0.00140576681587845,0.00121235230471939,0.088316410779953 ,0.122155249118805,0.0623086728155613,0.0372041761875153,0.152274057269096,0.0877154096961021,0.20766144990921,0.128310024738312 ,0.00272386288270354,0.0148188229650259,0.581505417823792,0.60775899887085,0.391209810972214,0.449999988079071,0.367483019828796 ,0.21595473587513,0.00511999987065792,0.0337072089314461,0.0243593472987413,0.0595335252583027,0.0494096390902996 ,0.288400173187256,0.254165440797806,0.0184773337095976,0.0233920011669397,0.0105660744011402,0.0417584367096424,0.00572074064984918 ,0.00440607406198978,0.0402106605470181,0.0455601029098034,0.0595960952341557,0.236882373690605,0.274818778038025 ,0.173639640212059,0.00821051653474569,0.00111673469655216,0.00192473467905074,0.0744823962450027,0.0209792852401733 ,0.0242483224719763,0.00515718245878816,0.0168403051793575,0.00198370963335037,0.0062483036890626,0.393967807292938 ,0.297216445207596,0.284882426261902,0.779509365558624,0.707262277603149,0.47817474603653,0.39839693903923,0.383381128311157 ,0.272867739200592,0.354216724634171,0.215759769082069,0.313570141792297,0.0679698660969734,0.0687856376171112,0.0261576380580664 ,0.234204679727554,0.0370325855910778,0.0571153126657009,0.103240847587585,0.1180534735322,0.190469533205032,0.143643140792847 ,0.151886433362961,0.193937033414841,0.133460149168968,0.234541907906532,0.253086447715759,0.305678099393845,0.364733636379242 ,0.400832086801529,0.342316150665283,0.30690062046051,0.42099592089653,0.502739071846008,0.495381146669388,0.371182233095169 ,0.899999976158142,0.899999976158142,0.980000019073486,1,1,0.980000019073486,0.980000019073486,0.980000019073486,0.835542321205139 ,0.85124671459198,0.727739691734314,0.202030509710312,0.133721649646759,0.156758695840836,0.00306026707403362,0.0663799419999123 ,0.0627863854169846,0.0726863443851471,0.0683878138661385,0.0423226542770863,0.0181763526052237,0.0500000007450581 ,0.0500000007450581,0.0500000007450581,0.0340265333652496,0.0206213351339102,0.00880161300301552,0.061221182346344 ,0.149439617991447,0.139599531888962,0.0114001017063856,0.00134399998933077,0.0368302874267101,0.00511999987065792 ,0.00479999976232648,0.00375466677360237,0.00184088898822665,0.00231452425941825,0.0391958728432655,0.108779542148113 ,0.128863975405693,0.0109759103506804,0.00937955174595118,0.00162896886467934,0.0034905462525785,0.440623670816422 ,0.00229969387874007,0.0058504375629127,0.150000005960464,0.0012159482575953,0.00647590681910515,0.0137380259111524 ,0.00691936537623405,0.00245999894104898,0.0314241163432598,0.0719676613807678,0.0235037468373775,0.00513688893988729 ,0.150000005960464,0.300000011920929,0.0837228745222092,0.0730877444148064,0.0616817027330399,0.084648534655571,0.0647208988666534 ,0.00780501682311296,0.649999976158142,0.31384065747261,0.376428991556168,0.00612152414396405,0.0864159390330315,0.128799378871918 ,0.0639853924512863,0.0571126453578472,0.182525634765625,0.259402930736542,0.11110020428896,0.121370367705822,0.123139880597591 ,0.431690454483032,0.0678107142448425,0.116970963776112,0.151332914829254,0.128084793686867,0.188019275665283,0.254704773426056 ,0.222260326147079,0.426697045564651,0.313478171825409,0.662932276725769,0.712575972080231,0.714460909366608,0.744367778301239 ,0.797382295131683,0.710675418376923,0.0866629257798195,0.0836607664823532,0.144993305206299,0.0611713975667953,0.0595202445983887 ,0.173436269164085,0.209887385368347,0.116518676280975,0.103099502623081,0.312380999326706,0.114136606454849,0.124968446791172 ,0.145314767956734,0.195556074380875,0.169761568307877,0.368388921022415,0.226643174886703,0.522917032241821,0.606863260269165 ,0.602068185806274,0.602239727973938,0.671783566474915,0.573743999004364,0.0799809694290161,0.0028724349103868,0.00273489975370467 ,0.00224263756535947,0.00261519732885063,0.00237992848269641,0.00147316930815578,0.00201171170920134,0.00189624272752553 ,0.00219413707964122,0.00245666946284473,0.00189763796515763,0.00182186311576515,0.00285251555033028,0.00287016853690147 ,0.00251814303919673,0.00248833745718002,0.00266813719645143,0.00287493271753192,0.00301240081898868,0.0032727187499404 ,0.00284083373844624,0.00320788915269077,0.00359099078923464,0.00412758998572826,0.00315631576813757,0.00323004997335374 ,0.00321480701677501,0.00332579459063709,0.00285214022733271,0.00295891449786723,0.00354001857340336,0.00337863969616592 ,0.00334977172315121,0.00339434412308037,0.00338804326020181,0.00335639086551964,0.00369864515960217,0.0037561864592135 ,0.00450852140784264,0.00450629414990544,0.00589997135102749,0.00577224884182215,0.00300176558084786,0.00284553435631096 ,0.0033055804669857,0.00401255441829562,0.00271141226403415,0.00304197636432946,0.0032030027359724,0.00278149824589491 ,0.00322267832234502,0.00290161650627851,0.00361466920003295,0.00428378861397505,0.00334629463031888,0.00336101255379617 ,0.00307296216487885,0.0032977256923914,0.00341798411682248,0.00368143315427005,0.00296677765436471,0.00290974951349199 ,0.00300370645709336,0.00312284333631396,0.00280307792127132,0.00274716271087527,0.00294384569860995,0.00303437188267708 ,0.00293560628779233,0.00535764917731285,0.00444378051906824,0.0034510565456003,0.00472006853669882,0.00181388761848211 ,0.00337480590678751,0.00235132407397032,0.00315221515484154,0.00429010717198253,0.00224503269419074,0.0047888970002532 ,0.00585188902914524,0.00548017863184214,0.00454346882179379,0.00465585617348552,0.00493457354605198,0.00388614949770272 ,0.00589821254834533,0.00602432992309332,0.00503173423931003,0.00664270063862205,0.00652361335232854,0.00738831702619791 ,0.00736821768805385,0.00598593987524509,0.00570765323936939,0.0052280118688941,0.00812239944934845,0.00690612616017461 ,0.00922985840588808,0.00964972749352455,0.0100229699164629,0.00979678798466921,0.00947143416851759,0.00988043006509542 ,0.00788048282265663,0.00827876199036837,0.00714467046782374,0.00750800548121333,0.00554124126210809,0.00850069615989923 ,0.0075537096709013,0.00673130573704839,0.0071938019245863,0.00710836937651038,0.00676870625466108,0.00553518440574408 ,0.00828305631875992,0.00855810195207596,0.00742994295433164,0.00832461938261986,0.0091610960662365,0.00952113978564739 ,0.00609192904084921,0.00660995859652758,0.00667747063562274,0.00747788092121482,0.00544685358181596,0.00532601587474346 ,0.00636698864400387,0.00747411930933595,0.00729592377319932,0.00196876213885844,0.00167774257715791,0.00197391537949443 ,0.00210932898335159,0.00105903821531683,0.0016689149197191,0.00136837980244309,0.00125867768656462,0.00219658622518182 ,0.00218117795884609,0.00233970722183585,0.00260340375825763,0.00225786538794637,0.00227275397628546,0.00218520546332002 ,0.00229749316349626,0.00238911714404821,0.00247099064290524,0.00225680181756616,0.00237468630075455,0.00242421845905483 ,0.00274204649031162,0.00256723049096763,0.00336809456348419,0.00306707480922341,0.00234764581546187,0.00248749298043549 ,0.00255475123412907,0.00318171083927155,0.00242847763001919,0.00311959092505276,0.0035705070476979,0.00224441569298506 ,0.00123613397590816,0.00155509519390762,0.00416996888816357,0.0040141916833818,0.00318032247014344,0.00434468686580658 ,0.00411119963973761,0.00373093411326408,0.00657161371782422,0.00643852632492781,0.00604194169864058,0.00593365449458361 ,0.0058493041433394,0.00548689533025026,0.00469370279461145,0.00422931695356965,0.00523619493469596,0.00584275601431727 ,0.00618052296340466,0.00250652339309454,0.00213699461892247,0.00138027011416852,0.0027654857840389,0.00286928634159267 ,0.00325076188892126,0.0032718819566071,0.00351603957824409,0.00424721231684089,0.00551357073709369,0.00331737310625613 ,0.00320188654586673,0.00227472884580493,0.00291172997094691,0.00287038390524685,0.00302322162315249,0.00324240955524147 ,0.00419651810079813,0.00167633499950171,0.00501104025170207,0.0055063646286726,0.00934084132313728,0.00949322339147329 ,0.00925296358764172,0.00772196892648935,0.00849300436675549,0.00798273459076881,0.004718744661659,0.00585839105769992 ,0.00640948535874486,0.0071573075838387,0.0029482904355973,0.00891218427568674,0.0102696055546403,0.00801469944417477 ,0.0075694783590734,0.00829983130097389,0.00948033947497606,0.00821911729872227,0.0088095311075449,0.00777143286541104 ,0.00785871688276529,0.00711476756259799,0.0069456766359508,0.00646172650158405,0.00789961684495211,0.00749206775799394 ,0.00839586462825537,0.00768001656979322,0.00888935849070549,0.00799908488988876,0.0094854049384594,0.00838644616305828 ,0.00998248253017664,0.00871728733181953,0.00874925404787064,0.00752222584560514,0.00852789543569088,0.00786581169813871 ,0.00688365427777171,0.00592871708795428,0.00658458471298218,0.00701384944841266,0.0074963322840631,0.00806235335767269 ,0.00851017609238625,0.00763430166989565,0.00866615958511829,0.0079189445823431,0.00680210301652551,0.00572706665843725 ,0.00624250480905175,0.00361610692925751,0.00403973972424865,0.00464699137955904,0.00516547728329897,0.00528786843642592 ,0.00489354878664017,0.00416175229474902,0.0033993604592979,0.00355392741039395,0.00360536435618997,0.0021504673641175 ,0.0046223346143961,0.00879024062305689,0.0082965986803174,0.0088426573202014,0.0104714669287205,0.00916303694248199 ,0.00852636806666851,0.00781917851418257,0.0084534827619791,0.00698069809004664,0.00365751283243299,0.00275685871019959 ,0.00306416256353259,0.00407540565356612,0.0031653237529099,0.00355168106034398,0.00319073838181794,0.00358729413710535 ,0.00310353306122124,0.00346082681789994,0.0029276676941663,0.00320818251930177,0.00272714579477906,0.0029269983060658 ,0.00231565744616091,0.00244255387224257,0.00347824790515006,0.00379278091713786,0.00359018542803824,0.00396385602653027 ,0.00367449503391981,0.00409605354070663,0.0036963012535125,0.0041322004981339,0.00274232355877757,0.00358765525743365 ,0.00321995210833848,0.00328098819591105,0.00315649411641061,0.00288322917185724,0.00257438328117132,0.00211100280284882 ,0.00332666095346212,0.00351023417897522,0.00364485383033752,0.00366668263450265,0.0022805470507592,0.00273415795527399 ,0.00324346288107336,0.00332364905625582,0.00318467197939754,0.00286923488602042,0.00251456326805055,0.00203057285398245 ,0.00176350364927202,0.00180430873297155,0.00192816136404872,0.00209267088212073,0.00169648032169789,0.00137202127370983 ,0.00207436457276344,0.00218321965076029,0.00210944400168955,0.00187669682782143,0.00159703101962805,0.00125271349679679 ,0.00105652003549039,0.00199300702661276,0.00113289791624993,0.00123676413204521,0.00255915010347962,0.00141588877886534 ,0.00208958005532622,0.00196704873815179,0.00216767517849803,0.00232494808733463,0.00259238597936928,0.00358449853956699 ,0.00352447549812496,0.00344475172460079,0.003357496811077,0.00347600504755974,0.00337328994646668,0.00364757981151342 ,0.00315107614733279,0.00319626065902412,0.00326616037636995,0.00334058725275099,0.00340767367742956,0.00392938638105989 ,0.00355419632978737,0.00237688352353871,0.00454634195193648,0.0019630070310086,0.00281993020325899,0.00906544551253319 ,0.00831099599599838,0.00224613631144166,0.0197735726833344,0.00137500802520663,0.00211713276803494,0.00517774606123567 ,0.00154388858936727,0.0029610728379339,0.00337772024795413,0.00518400780856609,0.0042556906118989,0.00429127365350723 ,0.00385551853105426,0.00231104274280369,0.0017273563425988,0.00102619617246091,0.0148404175415635,0.00504331663250923 ,0.00361545896157622,0.00329389865510166,0.00222742976620793,0.00301670958288014,0.00169996067415923,0.00180735485628247 ,0.00242576887831092,0.00138427189085633,0.0027351276949048,0.00137489358894527,0.00255316752009094,0.00110148976091295 ,0.00185089581646025,0.0012406351743266,0.00199872045777738,0.00163026701193303,0.00174500199500471,0.00111509673297405 ,0.00157053663861007,0.00127368152607232,0.0013530672295019,0.00129679474048316,0.0015278987120837,0.00107203773222864 ,0.00807942263782024,0.00218584365211427,0.00115716061554849,0.00101477664429694 Transform: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.024448608213334,-0.153576078058137,-0.987834247540742,0 ,-0.112669667543803,0.982257219833786,-0.149920490130099,0,-0.104756966978286,7.87776069093907,67.510384927605,1 TransformLink: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570262,-0.153576100851615,0.982257365618587 ,0,-0.0413181939768159,-0.98783439906961,-0.149920513127158,0,2.04555364893807,67.8963551342133,2.37140015377402,1 } Deformer: "SubDeformer::Cluster_R_eye_joint", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 70,71,94,95,98,99,106,108,109,110,120,121,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146 ,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,172,173,174,175,176,177,178,179 ,180,181,182,183,184,185,212,213,214,215,216,217,218,219,220,291,292,293,294,295,296,324,325,326,328,329,336,337,339 ,340,344,345,346,347,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393 ,394,396,397,398,399,400,401,402,403,404,405,406,407,409,410,411,414,416,417,418,420,421,422,423,424,425,426,427,428 ,500,501,502,503,504,506,507,508,573,574,575,576,577,578,590,591,644,645,646,647,648,649,650,651,652,653,654,655,656 ,657,658,659,660,661,662,663,729,731,750,751,752,753,754,755,775,777,778,779,780,795,796,797,798,803,816,817,825,827 ,828,829,830,831,832,833,837,838,839,844,882,883,884,885,914,915,916,917,924,925,926,927,934,935,936,942,943,944,945 ,946,947,964,973,974,975,976,977,978,979,980,989,990,998,1000,1001,1004,1005,1006,1007,1011,1012,1013,1023,1024,1025 ,1026,1028,1037,1038,1039,1050,1053,1054,1055,1056,1057,1058,1059,1068,1069,1070,1087,1088,1089,1090,1091,1092,1093 ,1102,1103,1110,1111,1112,1117,1126,1131,1132,1144,1147,1148,1149,1153,1154,1155,1156,1157,1159,1160,1161,1162,1166 ,1167,1169,1170,1171,1172,1173,1174,1201,1207,1218,1221,1231,1232,1235,1506,1507,1508,1509,1510,1511,1512,1513,1514 ,1515,1516,1517,1523,1526,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546 ,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1570,1571,1572,1573,1574,1575,1576 ,1577,1642,1643,1645,1646,1647,1648,1650,1651,1654,1655,1656,1657,1658,1659,1666,1679,1680,1681,1684,1685,1686,1687 ,1688,1689,1690,1691,1692,1693,1695,1698,1699,1707,1708,1709,1710,1712,1714,1726,1727,1728,1731,1732,1733,1734,1741 ,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1792,1796,1806 ,1807,1808,1810,1811,1813,1814,1815,1816,1817,1821,1822,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839 ,1840,1841,1842,1843,1844,1845,1846,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891 ,1892,1893,1894,1895,1959,1960,1961,1962,1963,1964,1991,1992,1993,1994,1995,2002,2003,2005,2422,2423,2424,2425,2426 ,2427,2467,2468,2469,2470,2475,2499,2500,2501,2502,2503,2504,2512,2554,2555,2556,2557,2560,2585,2586,2587,2588,2617 ,2618,2619,2620,2621,2622,2629,2640,2666,2667,2668,2669,2670,2676,2678,2679,2689,2730,2733,2768,2769,2770,2771,2772 ,2773,2774,2829,2830,2831,2835,2837,2838,2844,2880,2913,2914,3408,3409,3410,3423,3424,3425,3426,3427,3428,3429,3430 ,3431,3432,3433,3434,3435,3436,3437,3438,3486,3487,3499,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612 ,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635 ,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5359,5360,5364,5397,5399,5400,5404,5407,5408,5410,5411 ,5412,5413,5416,5418,5443,5453,5474,5503,5504,5508,5510,5536,5537,5538,5539,5540,5541,5542,5543,5544,5547,5552,5553 ,5554,5557,5561,5562,5576,5592,5644,5662,5665,5684,5726,5728,5732,5736 Weights: 0.00225406116805971,0.00299270241521299,0.00314046395942569,0.00142694683745503,0.00384869473055005,0.00592560134828091 ,0.00200975174084306,0.00715580768883228,0.00537628959864378,0.00739909242838621,0.00239976635202765,0.00138659891672432 ,0.0061279172077775,0.00658823549747467,0.00824131164699793,0.00719038164243102,0.00956671498715878,0.0120942890644073 ,0.0133896032348275,0.00891112256795168,0.00740056345239282,0.00646934891119599,0.00637939153239131,0.00126555329188704 ,0.00449737347662449,0.00272365752607584,0.00274063716642559,0.00139470375142992,0.0045706620439887,0.00445523951202631 ,0.00670536514371634,0.0262232050299644,0.035804707556963,0.0377006456255913,0.0280813500285149,0.0405757576227188 ,0.0415965355932713,0.0393838249146938,0.0370488241314888,0.0285728257149458,0.0360037907958031,0.029328715056181 ,0.0361984297633171,0.0339969955384731,0.0357963219285011,0.0318237543106079,0.00914799701422453,0.0155569585040212 ,0.0171203799545765,0.00547765055671334,0.00529744848608971,0.00671972194686532,0.0112307257950306,0.0072063491679728 ,0.00848108436912298,0.0129470666870475,0.0159949082881212,0.0226276535540819,0.0304606538265944,0.0219458937644959 ,0.0269811600446701,0.0352062843739986,0.00932966638356447,0.0130579331889749,0.0156794786453247,0.00327899609692395 ,0.0085839768871665,0.00914031360298395,0.00356043060310185,0.0175848435610533,0.0184314381331205,0.0194156914949417 ,0.00963829085230827,0.00380341988056898,0.00757872546091676,0.00627756444737315,0.00289895292371511,0.00237405230291188 ,0.00136809202376753,0.0043934378772974,0.00818693824112415,0.00311475805938244,0.0169690046459436,0.00107458676211536 ,0.00117155455518514,0.00565435644239187,0.00999229587614536,0.00254443008452654,0.00318441540002823,0.0741772800683975 ,0.0924278497695923,0.0274049881845713,0.138513386249542,0.579739809036255,0.445804357528687,0.510030806064606,0.299037575721741 ,0.251733839511871,0.377906203269959,0.698451936244965,0.649999976158142,0.850000023841858,0.75,0.899999976158142 ,0.949999988079071,0.75,0.75,0.162479013204575,0.162473782896996,0.239764705300331,0.117019481956959,0.100000001490116 ,0.314426273107529,0.442865610122681,0.649999976158142,0.379082888364792,0.100000001490116,0.0029387956019491,0.00929927919059992 ,0.00298508838750422,0.00750204036012292,0.00200997781939805,0.00188099674414843,0.00782627891749144,0.0227196458727121 ,0.0229735802859068,0.0481614321470261,0.0551468729972839,0.106037020683289,0.0339427515864372,0.0257349461317062 ,0.0585545152425766,0.110038615763187,0.01064791996032,0.00200310163199902,0.0102275665849447,0.00237495475448668 ,0.0384428389370441,0.0149681828916073,0.00486927153542638,0.0339592806994915,0.0590300299227238,0.0914978757500649 ,0.161068394780159,0.124054789543152,0.0800120905041695,0.00387670774944127,0.0485085695981979,0.0384997762739658 ,0.0122045539319515,0.013538776896894,0.144682094454765,0.256250083446503,0.336145132780075,0.002973897382617,0.00891208928078413 ,0.00199143635109067,0.00917734857648611,0.0215485915541649,0.00575529271736741,0.00395605154335499,0.0026860658545047 ,0.125525027513504,0.140216618776321,0.0238694231957197,0.0142579050734639,0.048931673169136,0.0338563732802868,0.00757236639037728 ,0.0109836980700493,0.00744025874882936,0.00380006502382457,0.0845025405287743,0.0692142695188522,0.0467887856066227 ,0.0562854818999767,0.0258110873401165,0.0201738514006138,0.146569639444351,0.0903132930397987,0.167498186230659,0.10464883595705 ,0.00314257550053298,0.0123085863888264,0.0114605892449617,0.00852362066507339,0.00543177081272006,0.00255902297794819 ,0.00438370183110237,0.00621197698637843,0.00119641202036291,0.0199999995529652,0.0199999995529652,0.0199999995529652 ,0.0199999995529652,0.00286894803866744,0.0183880105614662,0.0147572588175535,0.00148830120451748,0.00124421424698085 ,0.0117347855120897,0.0103331999853253,0.00500483578070998,0.00199292507022619,0.00784185156226158,0.00654877489432693 ,0.00432892935350537,0.00542736705392599,0.00806710496544838,0.00971512403339148,0.0500000007450581,0.100000001490116 ,0.100000001490116,0.00202715280465782,0.00701918220147491,0.00660502957180142,0.00692577799782157,0.00690311519429088 ,0.00360431079752743,0.00568113895133138,0.0053304610773921,0.00321385520510376,0.200000002980232,0.200000002980232 ,0.464121609926224,0.372001975774765,0.00137971458025277,0.0794769674539566,0.0914423316717148,0.003408428048715,0.00531325163319707 ,0.00414136936888099,0.00264358799904585,0.00428298860788345,0.0019509750418365,0.00121530832257122,0.412422329187393 ,0.5,0.448966711759567,0.550000011920929,0.649999976158142,0.550000011920929,0.197379514575005,0.0051034651696682 ,0.001438521547243,0.00275980518199503,0.00182668399065733,0.00176234217360616,0.0013265140587464,0.0872451215982437 ,0.0318181775510311,0.120967552065849,0.0561373271048069,0.00152190367225558,0.100000001490116,0.100000001490116,0.25 ,0.272729575634003,0.0074675315991044,0.0305993165820837,0.00303684757091105,0.400000005960464,0.395441085100174,0.400000005960464 ,0.00104265799745917,0.00430345255881548,0.699999988079071,0.75,0.5,0.550000011920929,0.449999988079071,0.300000011920929 ,0.0157849490642548,0.0450058728456497,0.0118039222434163,0.00920973252505064,0.0071520977653563,0.0172294974327087 ,0.0234336089342833,0.0177474711090326,0.0136046605184674,0.00900147948414087,0.0299999993294477,0.00812691077589989 ,0.00190130481496453,0.229402348399162,0.204308375716209,0.00115229026414454,0.0299999993294477,0.097870834171772 ,0.100000001490116,0.00205515092238784,0.00697201397269964,0.0103997318074107,0.0130104143172503,0.0134130232036114 ,0.00165532832033932,0.00309189269319177,0.00234658550471067,0.00112811266444623,0.0012501880992204,0.0936693772673607 ,0.0463141165673733,0.0196417048573494,0.00268755247816443,0.00839622225612402,0.550000011920929,0.550000011920929 ,0.300000011920929,0.0418052561581135,0.016082338988781,0.0198220461606979,0.027225948870182,0.00273721688427031,0.235250785946846 ,0.00140504783485085,0.206924885511398,0.284648895263672,0.001910021295771,0.600000023841858,0.5,0.451376587152481 ,0.899999976158142,0.800000011920929,0.550000011920929,0.5,0.400000005960464,0.349999994039536,0.349999994039536,0.591311037540436 ,0.71046644449234,0.00166933750733733,0.00155535293743014,0.15054589509964,0.202879443764687,0.300000011920929,0.00581762893125415 ,0.011917001567781,0.212641268968582,0.23912838101387,0.363610714673996,0.312190741300583,0.301038801670074,0.338739454746246 ,0.150000005960464,0.370767772197723,0.349999994039536,0.400000005960464,0.507781326770782,0.447562992572784,0.5,0.600000023841858 ,0.570803225040436,0.547177851200104,0.949999988079071,0.949999988079071,1,1,1,1,0.980000019073486,0.980000019073486 ,0.899999976158142,0.899999976158142,0.506809055805206,0.300000011920929,0.100000001490116,0.351170927286148,0.155357539653778 ,0.100000001490116,0.0500000007450581,0.100000001490116,0.0500000007450581,0.0802976787090302,0.051420658826828,0.25 ,0.300000011920929,0.215666860342026,0.0296915806829929,0.0109948515892029,0.00282987905666232,0.123785838484764,0.0299999993294477 ,0.0104991234838963,0.0347260311245918,0.174331799149513,0.291356563568115,0.139639675617218,0.0909389927983284,0.751251339912415 ,0.0250975470989943,0.00101973360870034,0.00281789875589311,0.00530411908403039,0.00705776736140251,0.349999994039536 ,0.018251609057188,0.00552481040358543,0.0457161329686642,0.0364900603890419,0.0322229117155075,0.0232003647834063 ,0.00761937070637941,0.0129122110083699,0.0018132560653612,0.00192320614587516,0.2836734354496,0.191062659025192,0.10631301254034 ,0.0546292588114738,0.0226769000291824,0.00759811419993639,0.0127899246290326,0.449999988079071,0.550000011920929 ,0.00395371858030558,0.00562301510944963,0.00412268145009875,0.00225640623830259,0.00267837452702224,0.00369340716861188 ,0.0384311117231846,0.0382450222969055,0.0308279488235712,0.0295269265770912,0.025489354506135,0.0346145555377007 ,0.0300641786307096,0.0206859800964594,0.0266162808984518,0.0330806113779545,0.0355984233319759,0.0343656949698925 ,0.028419679030776,0.025199556723237,0.0212426129728556,0.0196652188897133,0.0160835292190313,0.0121408421546221,0.0202507004141808 ,0.00168385170400143,0.00484586227685213,0.00330330617725849,0.00781689770519733,0.850000023841858,0.00206114444881678 ,0.0028053573332727,0.00538505567237735,0.0067707528360188,0.00783531460911036,0.00340250763110816,0.00121480436064303 ,0.00330042955465615,0.00112872116733342,0.001448123017326,0.0040852976962924,0.0229259543120861,0.0306862499564886 ,0.0330770649015903,0.0254286862909794,0.0337661243975163,0.0351286977529526,0.034977775067091,0.0342453047633171 ,0.0272729713469744,0.0349134095013142,0.0290430206805468,0.034108117222786,0.0333448573946953,0.0355434231460094 ,0.00803781766444445,0.0159803424030542,0.00133555091451854,0.00135917204897851,0.00788859557360411,0.00362043548375368 ,0.00369403162039816,0.00819585844874382,0.0152367781847715,0.0216128192842007,0.0267653465270996,0.0194449722766876 ,0.025431839749217,0.030388668179512,0.0087865786626935,0.0115359928458929,0.0138986716046929,0.00342140183784068 ,0.00867122411727905,0.00937425717711449,0.00372696132399142,0.0172722488641739,0.0185647197067738,0.00675679836422205 ,0.00549612985923886,0.0025901438202709,0.00203290488570929,0.00122223340440542,0.00404203310608864,0.00779036525636911 ,0.00302999676205218,0.0157638750970364,0.00104375998489559,0.00115360273048282,0.00607519876211882,0.0109270857647061 ,0.00268194708041847,0.0143921598792076,0.0111151766031981,0.00717192562296987,0.00423647742718458,0.00688508246093988 ,0.00912474375218153,0.00378839368931949,0.0198083184659481,0.0161420702934265,0.00262516457587481,0.00211739679798484 ,0.00978809595108032,0.00754176918417215,0.00456672580912709,0.00538340536877513,0.00893084891140461,0.0117520065978169 ,0.00126411009114236,0.00846298411488533,0.00845142267644405,0.00782160647213459,0.0076493383385241,0.00162299012299627 ,0.00385678349994123,0.00648050475865602,0.00575396232306957,0.00336620886810124,0.00382873835042119,0.00597893260419369 ,0.00528374360874295,0.00339140510186553,0.00600495748221874,0.00291066849604249,0.00102913880255073,0.0015889568021521 ,0.00152235745918006,0.00284664798527956,0.0048015546053648,0.0020070958416909,0.00112610473297536,0.00179676874540746 ,0.00196465570479631,0.00165885838214308,0.00152659718878567,0.0021847162861377,0.00660543423146009,0.0121408635750413 ,0.00970069132745266,0.0139794517308474,0.0204916838556528,0.01745898835361,0.0123515529558063,0.00713782571256161 ,0.00626069633290172,0.0105612594634295,0.0144144389778376,0.0159461796283722,0.00256820418871939,0.0021693769376725 ,0.0204103570431471,0.024961069226265,0.00160232768394053,0.00365474610589445,0.00117914832662791,0.0033273680601269 ,0.00291148712858558,0.0307696238160133,0.0307900868356228,0.0234009772539139,0.0223564114421606,0.0201896727085114 ,0.0292647611349821,0.0272439233958721,0.0177467707544565,0.025606844574213,0.0287475045770407,0.0226978901773691 ,0.0148312449455261,0.0135223055258393,0.0114695969969034,0.00944908522069454,0.0149854561313987,0.649999976158142 ,0.785920679569244,0.0500000007450581,0.0392807051539421,0.014969184063375,0.0137453535571694,0.143863663077354,0.20943795144558 ,0.0632535293698311,0.180063635110855,0.114309228956699,0.338245630264282,0.023958794772625,0.252962082624435,0.369833081960678 ,0.323386013507843,0.477446615695953,0.430914372205734,0.512755036354065,0.50423389673233,0.514667630195618,0.553474307060242 ,0.524987459182739,0.572267532348633,0.546735525131226,0.462143510580063,0.0304007176309824,0.0525171086192131,0.0195326711982489 ,0.023110318928957,0.144032761454582,0.067643515765667,0.185808822512627,0.119412794709206,0.304689973592758,0.26177579164505 ,0.343998968601227,0.412656366825104,0.456989109516144,0.483713805675507,0.479251682758331,0.481080204248428,0.518331408500671 ,0.491783976554871,0.539229154586792,0.515590369701386,0.433626353740692,0.0343058742582798,0.0781585201621056,0.105993494391441 ,0.00213290797546506,0.00410596514120698,0.00179009861312807,0.00126644130796194,0.00189128855708987,0.00469252793118358 ,0.0013661136617884,0.00262552103959024,0.00296656228601933,0.00463480222970247,0.00377434235997498,0.00381961558014154 ,0.00345237809233367,0.00204208516515791,0.00151749444194138,0.00241850991733372,0.0138494111597538,0.00451441667973995 ,0.00281708175316453,0.00240241712890565,0.0032461395021528,0.0010263113072142,0.00295444997027516,0.00199528969824314 ,0.00271162413991988,0.00152211741078645,0.00162537593860179,0.00221300823614001,0.00126595702022314,0.00253663677722216 ,0.00132007012143731,0.00228379410691559,0.00165127718355507,0.00111555960029364,0.0010408025700599,0.00178179494105279 ,0.00145317730493844,0.00163022498600185,0.00105069985147566,0.00140582525637001,0.00115194544196129,0.00129253440536559 ,0.00123961386270821,0.00136042467784137,0.00101523788180202,0.00746887130662799,0.00205911742523313,0.00103594770189375 Transform: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.024448608213334,-0.153576078058137,-0.987834247540742,0 ,-0.112669667543803,0.982257219833786,-0.149920490130099,0,2.3502624985163,8.0632495255243,67.5859536222117,1 TransformLink: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570262,-0.153576100851615,0.982257365618587 ,0,-0.0413181939768159,-0.98783439906961,-0.149920513127158,0,-0.409937425337364,68.0595129517144,2.47713790625645 ,1 } Deformer: "SubDeformer::Cluster_L_eyeBall_joint2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 110,1756,1831,1832,1834,1835,1836,1837,1839,1841,1842,1843,1855,1856,1858,1859,2422,2499,2504,2555,2556,2768,2769 ,2771,2772,2831,2835,2844,2880,3423,3424,3425,3432,3433,4107,4153,4154,4162,4164,4165,4166,4167,4168,4169,4170,4171 ,4172,4173,4174,4175,4176,4180,4184,4185,4232,4233,4238,4239,4270,4274,4276,4277,4279,4280,4281,4282,4298,4299,4300 ,4302,4311,4314,4315,4323,4326,4343,4344,4345,5827,5843,5850,5904,5905,11193,11194,11195,11196,11197,11198,11199,11200 ,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219 ,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238 ,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,11252,11253,11254,11255,11256,11257 ,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276 ,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295 ,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312 Weights: 0.0485186316072941,0.0405950658023357,0.0581861548125744,0.0492938794195652,0.0534534640610218,0.0509121939539909 ,0.0433826372027397,0.0467577017843723,0.0438807941973209,0.0395000539720058,0.0368526205420494,0.0433537662029266 ,0.0491937063634396,0.057663019746542,0.0422210991382599,0.0506464838981628,0.0430085472762585,0.0384206995368004 ,0.0452539175748825,0.0379151850938797,0.0435524433851242,0.0460081957280636,0.0355520620942116,0.0343122705817223 ,0.0299891103059053,0.0388531126081944,0.0409986935555935,0.0306265540421009,0.0394253730773926,0.0457773171365261 ,0.0482624992728233,0.0421110391616821,0.0450314655900002,0.0384499169886112,0.0033099977299571,0.00853923615068197 ,0.008744727820158,0.00679745338857174,0.00789610296487808,0.00706197181716561,0.00619890773668885,0.00658508809283376 ,0.00647423835471272,0.00589318620041013,0.0045215068385005,0.00782360695302486,0.0080419946461916,0.00697724567726254 ,0.00778378965333104,0.00851207040250301,0.00889366120100021,0.00702843815088272,0.00684950267896056,0.00677408976480365 ,0.00537176569923759,0.00537971500307322,0.00483532808721066,0.00536222383379936,0.00744686694815755,0.00671214517205954 ,0.00845018029212952,0.00977900065481663,0.00768665550276637,0.00731138838455081,0.00797605887055397,0.00918637402355671 ,0.00951959472149611,0.00827539339661598,0.008237699046731,0.0071938275359571,0.00802947394549847,0.00728526664897799 ,0.0083099864423275,0.00441928021609783,0.00478160614147782,0.00835898332297802,0.0100166546180844,0.00872667785733938 ,0.041375208646059,0.00343337701633573,0.00580845354124904,0.00458178669214249,0.00493878545239568,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Transform: 0.0413367713843446,0.124663369007615,0.991337634166903,0,0.987788531867112,-0.154268921993168,-0.0217890531665547 ,0,0.150216291556795,0.980132642457207,-0.12951804433764,0,-67.7704774647754,6.06441864970652,-0.00534795101653618 ,1 TransformLink: 0.041336777725169,0.987788683388224,0.150216314599115,0,0.124663387373597,-0.154268944720777,0.980132786854868,0,0.991337642531241 ,-0.0217890533503982,-0.129518045430439,0,2.05070381711907,67.878345646167,4.23560315542674,1 } Deformer: "SubDeformer::Cluster_R_eyeBall_joint", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 152,155,156,157,160,162,164,179,381,828,833,884,1090,1091,1162,1746,1747,1748,1758,5413,5443,5474,5503,5504,10457 ,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331 ,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350 ,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369 ,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388 ,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407 ,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426 ,11427,11428,11429,11430,11431,11432 Weights: 0.0593679919838905,0.0537738427519798,0.0508999116718769,0.0431445837020874,0.0444539561867714,0.0391181632876396 ,0.0437302514910698,0.0584536902606487,0.025000000372529,0.0345351696014404,0.0405548587441444,0.0420879870653152 ,0.0314351692795753,0.026578277349472,0.0279440488666296,0.0444546975195408,0.0465724915266037,0.0393374674022198 ,0.0356687866151333,0.00325712328776717,0.00218713586218655,0.00430441554635763,0.00267448276281357,0.00222410587593913 ,0.00167662848252803,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Transform: 0.0387875421844768,0.100028338340874,0.994228268392548,0,0.985236061125961,-0.169864842686071,-0.0213467985085488 ,0,0.166749143805903,0.980377538424147,-0.105140181358115,0,-67.7629265753648,7.41129582551143,2.32996594654076,1 TransformLink: 0.0387875481371354,0.985236212328475,0.166749169396613,0,0.100028353235237,-0.169864867979189,0.980377684403767,0 ,0.994228275139952,-0.0213467986534205,-0.105140182071657,0,-0.42949996447401,68.0711452162903,4.2785157263196,1 } Deformer: "SubDeformer::Cluster_L_UpperArm", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 1809,1812,1817,1818,1819,1820,1826,1846,1847,1848,1849,2007,3408,3418,3422,3467,3468,3473,3474,3475,4052,4053,4054 ,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077 ,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100 ,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123 ,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146 ,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169 ,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192 ,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215 ,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238 ,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261 ,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284 ,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307 ,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330 ,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353 ,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376 ,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399 ,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422 ,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445 ,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468 ,4469,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812 ,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846 ,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885 ,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914 ,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937 ,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961 ,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984 ,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007 ,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030 ,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053 ,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076 ,6077,6080,6081,6082,6083,6084,6086,6089,6093,6102,6110,6111,6112,6113,6114,6115,6128,6129,6130,6131,6132,6133,6134 ,6135,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159 ,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6183,6187 ,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210 ,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6225,6226,6227,6228,6232,6233,6234,6440,6441,6442 ,6443,6444,6445,6447,6448,6449,6462,6463,6467,6469,6484,6485,6486,6488,6489,6491,6492,6493,6494,6495,10499,10500,10506 ,10507,10508,10509,10511,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535 ,10538,10539,10541,10542,10543,10544,10545,10546,10547,10548,10549,10551,10552,10553,10554,10555,10556,10557,10558 ,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10581,10630,10631,10635,10636,10638,10639,10641,10642 ,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10678,10679,10680,10681,10682,10683,10684 ,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735 ,10738,10739,10740,10741,10746,10747,10748,10749,10750,10751,10754,10755,10762,10763,10764,10765,10766,10767,10768 ,10769,10770,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811 ,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830 ,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10844,10845,10846,10847,10848,10849,10850 ,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869 ,10870,10871,10873,10874,10875,10878,10879,10882,10883,10884,10885,10886,10891,10892,10895,10896,10897,10899 Weights: 0.0248133204877377,0.0324307568371296,0.0356169603765011,0.0207698214799166,0.030156422406435,0.034252405166626,0.0145227815955877 ,0.0309497360140085,0.0301462095230818,0.0345631539821625,0.0348508656024933,0.0111808087676764,0.0224440488964319 ,0.0279246065765619,0.0208277739584446,0.0215720869600773,0.0628888607025146,0.0285741072148085,0.0372246988117695 ,0.0393813662230968,0.671951174736023,0.708763182163239,0.777954936027527,0.727325677871704,0.781686902046204,0.867705702781677 ,0.837035357952118,0.925296008586884,0.863075733184814,0.948842465877533,0.771288096904755,0.697845637798309,0.824166059494019 ,0.849767506122589,0.653732538223267,0.61710000038147,0.649790644645691,0.675434172153473,0.653554141521454,0.663696765899658 ,0.689136385917664,0.704505622386932,0.563047289848328,0.560208439826965,0.562112629413605,0.566362500190735,0.601464331150055 ,0.558381021022797,0.557335078716278,0.596216917037964,0.678151428699493,0.60462486743927,0.552501976490021,0.614971101284027 ,0.498361498117447,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.486129522323608 ,0.49028691649437,0.479702353477478,0.489778876304626,0.49161484837532,0.49787762761116,0.492680281400681,0.492597579956055 ,0.511562764644623,0.519893407821655,0.503320753574371,0.502098560333252,0.502025127410889,0.507532954216003,0.498470097780228 ,0.497562944889069,0.523999631404877,0.516897320747375,0.526336133480072,0.508612632751465,0.498038053512573,0.510039269924164 ,0.562739551067352,0.607795894145966,0.562466561794281,0.527937889099121,0.641221940517426,0.629185378551483,0.561213493347168 ,0.509782731533051,0.516025304794312,0.702741324901581,0.760756015777588,0.810972273349762,0.740057587623596,0.892389535903931 ,0.807673513889313,0.937207698822021,0.851298034191132,0.797609925270081,0.729173719882965,0.838807702064514,0.679248750209808 ,0.643914341926575,0.683527052402496,0.706433594226837,0.685965597629547,0.681573331356049,0.701968908309937,0.574149489402771 ,0.581609189510345,0.569718241691589,0.626542508602142,0.637052655220032,0.576336443424225,0.577661514282227,0.633669376373291 ,0.669133603572845,0.709506511688232,0.569708585739136,0.640199959278107,0.498486876487732,0.491136640310287,0.465899139642715 ,0.466461837291718,0.484352439641953,0.467008382081985,0.487460076808929,0.471763491630554,0.487598240375519,0.497599720954895 ,0.490725487470627,0.507308483123779,0.530655086040497,0.519746243953705,0.505765855312347,0.513488173484802,0.50432813167572 ,0.498367249965668,0.535860955715179,0.52631139755249,0.53908234834671,0.513603389263153,0.491457641124725,0.51626843214035 ,0.629995942115784,0.582840859889984,0.582438230514526,0.541063547134399,0.656917929649353,0.66849946975708,0.579762041568756 ,0.516530930995941,0.525534272193909,0.759033679962158,0.805777370929718,0.741298615932465,0.700179159641266,0.890966236591339 ,0.812793016433716,0.942499041557312,0.863510012626648,0.962687611579895,0.887522578239441,0.579064846038818,0.585617065429688 ,0.583216905593872,0.589302241802216,0.62506777048111,0.665343403816223,0.708398222923279,0.491320610046387,0.489428728818893 ,0.488226443529129,0.503230571746826,0.492925882339478,0.49119159579277,0.489473223686218,0.493882149457932,0.482531487941742 ,0.493873596191406,0.536814033985138,0.513014674186707,0.499569326639175,0.773965537548065,0.838369727134705,0.793033599853516 ,0.730684757232666,0.838671863079071,0.913813412189484,0.95292329788208,0.877314269542694,0.604370296001434,0.595778584480286 ,0.592511534690857,0.652695834636688,0.69582200050354,0.741239070892334,0.471526563167572,0.471250087022781,0.495319962501526 ,0.505406856536865,0.471759021282196,0.489663749933243,0.475140810012817,0.492314904928207,0.552528321743011,0.520199775695801 ,0.480048954486847,0.734615802764893,0.784961819648743,0.873987674713135,0.930249631404877,0.953011870384216,0.682857215404511 ,0.642761290073395,0.486127644777298,0.484876960515976,0.487802773714066,0.485596090555191,0.47825613617897,0.498049736022949 ,0.509337723255157,0.577197253704071,0.564165592193604,0.606435894966125,0.529352843761444,0.817949295043945,0.768238842487335 ,0.898294389247894,0.941824316978455,0.714447021484375,0.671498954296112,0.465435177087784,0.464698791503906,0.465445667505264 ,0.469987124204636,0.473710209131241,0.51437783241272,0.599595248699188,0.632000386714935,0.584417045116425,0.542906880378723 ,0.640533328056335,0.542687952518463,0.530597150325775,0.400000005960464,0.384298652410507,0.400000005960464,0.383724123239517 ,0.381333291530609,0.383433222770691,0.381000250577927,0.383127093315125,0.381277710199356,0.383326292037964,0.382163017988205 ,0.383975028991699,0.47921347618103,0.481083244085312,0.61014050245285,0.606766104698181,0.590470552444458,0.591465532779694 ,0.566190838813782,0.57214081287384,0.544518530368805,0.554570317268372,0.531055212020874,0.400000005960464,0.335283935070038 ,0.383234649896622,0.382744610309601,0.383036494255066,0.384032219648361,0.481736332178116,0.628333568572998,0.603837788105011 ,0.573779404163361,0.547561168670654,0.449999988079071,0.400000005960464,0.335080444812775,0.383023858070374,0.382573395967484 ,0.382903724908829,0.384047895669937,0.482000142335892,0.5356525182724,0.550000011920929,0.550000011920929,0.550000011920929 ,0.449999988079071,0.400000005960464,0.390052914619446,0.389245510101318,0.388679087162018,0.388942748308182,0.389945924282074 ,0.489096462726593,0.541556060314178,0.54068124294281,0.550000011920929,0.540895283222198,0.481140583753586,0.572645962238312 ,0.449999988079071,0.449999988079071,0.490680992603302,0.535034477710724,0.533327996730804,0.5282963514328,0.528202474117279 ,0.540067374706268,0.570852518081665,0.606686115264893,0.61121392250061,0.63078111410141,0.524792909622192,0.449999988079071 ,0.449999988079071,0.516527891159058,0.390509039163589,0.389715254306793,0.389851599931717,0.388801574707031,0.389304488897324 ,0.388022065162659,0.389052659273148,0.387650609016418,0.389169931411743,0.387800872325897,0.449999988079071,0.449999988079071 ,0.577778518199921,0.581358850002289,0.564002513885498,0.563650250434875,0.547590792179108,0.543173015117645,0.53354948759079 ,0.526419401168823,0.449999988079071,0.516008198261261,0.390943586826324,0.389945238828659,0.38910847902298,0.388745188713074 ,0.388970702886581,0.449999988079071,0.596204936504364,0.573783755302429,0.548210203647614,0.527739763259888,0.5,0.449999988079071 ,0.391117632389069,0.389978528022766,0.389020830392838,0.388615101575851,0.388895183801651,0.449999988079071,0.5,0.5 ,0.5,0.5,0.449999988079071,0.5,0.394442826509476,0.39354795217514,0.392851710319519,0.392656177282333,0.393025666475296 ,0.449999988079071,0.5,0.611612975597382,0.5,0.5,0.449999988079071,0.449999988079071,0.5,0.5,0.5,0.5,0.5,0.548342764377594 ,0.528138875961304,0.549952268600464,0.576339483261108,0.548967957496643,0.580441653728485,0.585061550140381,0.601735413074493 ,0.579566240310669,0.551377356052399,0.527995407581329,0.514831244945526,0.515691518783569,0.523988962173462,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232 ,0.150000005960464,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116 ,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.200000002980232 ,0.200000002980232,0.200000002980232,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116 ,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.100000001490116,0.150000005960464 ,0.200000002980232,0.200000002980232,0.200000002980232,0.27412673830986,0.167289391160011,0.115354761481285,0.201556026935577 ,0.0854078829288483,0.118652857840061,0.0980373993515968,0.196852833032608,0.319334238767624,0.0512989424169064,0.0455133803188801 ,0.225141897797585,0.125852674245834,0.126647189259529,0.236517712473869,0.039642658084631,0.0356426239013672,0.284983724355698 ,0.103368081152439,0.0672476515173912,0.0664668381214142,0.0355801954865456,0.0285070389509201,0.259743124246597,0.424105197191238 ,0.433663100004196,0.3836570084095,0.0306853652000427,0.0658317655324936,0.187660560011864,0.0972413942217827,0.255493760108948 ,0.237476676702499,0.0979085341095924,0.213220462203026,0.242596372961998,0.417047560214996,0.443311303853989,0.452294915914536 ,0.389263302087784,0.485368460416794,0.510531723499298,0.485199838876724,0.386874854564667,0.475898832082748,0.289770364761353 ,0.372936189174652,0.555619776248932,0.525600433349609,0.0963400900363922,0.400000005960464,0.159999996423721,0.200000002980232 ,0.25,0.604445457458496,0.400000005960464,0.607856810092926,0.200000002980232,0.250050365924835,0.25,0.290451616048813 ,0.218649312853813,0.275064080953598,0.354624599218369,0.443818986415863,0.035328347235918,0.462831854820251,0.432470977306366 ,0.299539059400558,0.151089325547218,0.159999996423721,0.119999997317791,0.159999996423721,0.390148997306824,0.40856060385704 ,0.263671666383743,0.324121683835983,0.119999997317791,0.453196138143539,0.312783122062683,0.352736085653305,0.259641885757446 ,0.515015542507172,0.513885915279388,0.25,0.246078610420227,0.422540277242661,0.244702324271202,0.25,0.249711647629738 ,0.289972990751266,0.350430130958557,0.370051473379135,0.336516976356506,0.329566091299057,0.321041613817215,0.369962871074677 ,0.302240073680878,0.603537738323212,0.594955384731293,0.318372488021851,0.329138964414597,0.273266732692719,0.280394911766052 ,0.30194765329361,0.286078155040741,0.286492615938187,0.281629592180252,0.281048178672791,0.268779307603836,0.256048232316971 ,0.266601055860519,0.57342404127121,0.570661962032318,0.277991205453873,0.257622718811035,0.250156819820404,0.636170923709869 ,0.269819021224976,0.253984391689301,0.26193243265152,0.581623613834381,0.301737904548645,0.250291764736176,0.25,0.25 ,0.25,0.253225922584534,0.25,0.25,0.25,0.251081615686417,0.257732510566711,0.275459051132202,0.268927812576294,0.684864163398743 ,0.70682168006897,0.597854673862457,0.400000005960464,0.598615825176239,0.682989597320557,0.67874550819397,0.69228321313858 ,0.722083210945129,0.681694328784943,0.838652670383453,0.604545176029205,0.59822154045105,0.854656279087067,0.960296213626862 ,0.619710147380829,0.873738169670105,0.616327583789825,0.643613696098328,0.857911109924316,0.812362492084503,0.862970173358917 ,0.720022320747375,0.703288555145264,0.736754536628723,0.811635494232178,0.699999988079071,0.699999988079071,0.872642815113068 ,0.752733886241913,0.771798610687256,0.796925663948059,0.907861709594727,0.796585321426392,0.632541060447693,0.720515251159668 ,0.904353618621826,0.516643166542053,0.761389434337616,0.608241140842438,0.501608371734619,0.497893631458282,0.626036822795868 ,0.721234023571014,0.537346363067627,0.932626843452454,0.884767174720764,0.728157877922058,0.818203866481781,0.945107996463776 ,0.96215945482254,0.962549090385437,0.955218255519867,0.95369279384613,0.934603452682495,0.911027312278748,0.93795645236969 ,0.899999976158142,0.944583356380463,0.923703551292419,0.902863442897797,0.94034343957901,0.911679923534393,0.937895774841309 ,0.977745413780212,0.937895774841309,0.875791609287262,0.935270428657532,0.977102100849152,0.876445770263672,0.782918393611908 ,0.779361724853516,0.849494099617004,0.800993323326111,0.670758605003357,0.639913201332092,0.914563477039337,0.899999976158142 ,0.436270833015442,0.899999976158142,0.899999976158142,0.446738928556442,0.899999976158142,0.899999976158142,0.507570087909698 ,0.899999976158142,0.645191788673401,0.899999976158142,0.50766259431839,0.900056779384613,0.888832092285156,0.22633358836174 ,0.238661527633667,0.0754047632217407,0.202322289347649,0.0670094043016434,0.0905131101608276,0.21491114795208,0.0889049097895622 ,0.0970706418156624,0.262058734893799,0.0366747006773949,0.0293817147612572,0.0843997374176979,0.0237083174288273 ,0.0845616087317467,0.0877782180905342,0.0251938421279192,0.0351834110915661,0.101867720484734,0.104017481207848,0.0342402532696724 ,0.00395678542554379,0.00787932239472866,0.0644239708781242,0.0501892194151878,0.011177022010088,0.00876086298376322 ,0.00236685667186975,0.00262700393795967,0.0177492592483759,0.0270002540200949,0.00567461596801877,0.0109919682145119 ,0.00504005933180451,0.0101816318929195,0.00111566262785345,0.244774356484413,0.245710656046867,0.161167815327644 ,0.129841148853302,0.550000011920929,0.550000011920929,0.899999976158142,0.923249185085297,0.963105201721191,0.966649770736694 ,0.499764204025269,0.49950385093689,0.398110508918762,0.11331570148468,0.967785358428955,0.931321263313293,0.961978733539581 ,0.918358266353607,0.899999976158142,0.906760454177856,0.804405212402344,0.800993323326111,0.813079595565796,0.944771707057953 ,0.993404805660248,0.991805374622345,0.994329869747162,0.995069265365601,0.986856520175934,0.985380828380585,0.900154709815979 ,0.30867263674736,0.373795926570892,0.335957050323486,0.0618258863687515,0.803212404251099,0.870715856552124,0.9056676030159 ,0.873792052268982,0.954519331455231,0.975940942764282,0.962519526481628,0.927388370037079,0.953723430633545,0.945045053958893 ,0.703007698059082,0.649999976158142,0.550000011920929,0.891666114330292,0.771452724933624,0.80041229724884,0.975884914398193 ,0.971213459968567,0.0259718224406242,0.0012870270293206,0.00200663669966161,0.029718391597271,0.00127148546744138 ,0.550000011920929,0.0947002172470093,0.960593581199646,0.699999988079071,0.699999988079071,0.900747776031494,0.949926972389221 ,0.94882196187973,0.940486431121826,0.88645213842392,0.965311646461487,0.816892683506012,0.990643560886383,0.980519413948059 ,0.983963012695313,0.969162106513977,0.97836834192276,0.993345022201538,0.891930460929871,0.936130821704865,0.977292537689209 ,0.981002569198608,0.99278736114502,0.973240435123444,0.833459258079529,0.990656852722168,0.878318190574646,0.925347745418549 ,0.824953973293304,0.499562233686447,0.396667510271072,0.41030552983284,0.498761624097824,0.280284285545349,0.237335756421089 ,0.30772477388382,0.899999976158142,0.198815822601318,0.0269320420920849,0.0825262069702148,0.0013631657930091,0.277416676282883 ,0.0998596251010895,0.0227861143648624,0.421255558729172,0.39227157831192,0.387923717498779,0.241641104221344,0.387358397245407 ,0.235032498836517,0.899999976158142,0.0737694650888443,0.0730752050876617,0.714662909507751,0.801311314105988,0.51268196105957 ,0.0958159640431404,0.0955943614244461,0.0479661673307419,0.0832242593169212,0.065484806895256,0.0121975634247065 ,0.0638823583722115,0.931115567684174,0.927065253257751,0.937691807746887,0.971710443496704,0.0130868805572391,0.0134305208921433 ,0.0142362248152494,0.0124444514513016,0.00878832675516605,0.00935584492981434,0.0142447035759687,0.0179274175316095 ,0.0196094270795584,0.0110583864152431,0.0136709315702319,0.0157110877335072,0.0130274835973978,0.0200563613325357 ,0.0199966225773096,0.0141086541116238,0.0296928975731134,0.0144526325166225,0.0194817539304495,0.0254780128598213 ,0.0564162321388721,0.0327776856720448,0.0240716673433781,0.0244537517428398,0.0639102533459663,0.0245793573558331 ,0.0386718362569809,0.0488913655281067,0.150000005960464,0.25,0.25,0.150000005960464,0.0290121491998434,0.0260587334632874 ,0.0245764590799809,0.0191784016788006,0.0230613481253386,0.0223486497998238,0.0250147357583046,0.0255272854119539 ,0.0297513008117676,0.0315962955355644,0.0310370977967978,0.300000011920929,0.200000002980232,0.100000001490116,0.200000002980232 ,0.100000001490116,0.100000001490116,0.150000005960464,0.150000005960464,0.200000002980232,0.0232919920235872,0.021919434890151 ,0.0169797874987125,0.0198447946459055,0.0152793126180768,0.0129596162587404,0.0160284861922264,0.0172904022037983 ,0.0389271304011345,0.0530599653720856,0.0379460118710995,0.0178657043725252,0.0232501439750195,0.0033667734824121 ,0.0344650968909264,0.022616570815444,0.0295472107827663,0.0618020556867123,0.0412753038108349,0.0489884726703167 ,0.200000002980232,0.300000011920929,0.300000011920929,0.200000002980232,0.0818059369921684,0.0538022443652153,0.25 ,0.0117521230131388,0.0175466556102037,0.00896589178591967,0.0186237078160048,0.0159933008253574,0.00700326915830374 ,0.0725999176502228,0.0467990785837173,0.0598451197147369,0.0907235890626907,0.0269097052514553,0.100000001490116 ,0.022157235071063,0.0218270290642977,0.0214322656393051,0.0171046778559685,0.0158396698534489,0.016515176743269,0.0149005027487874 ,0.0257846564054489,0.0189873352646828,0.015676299110055,0.0149392280727625,0.0261617973446846,0.0244224686175585 ,0.0294471122324467,0.032239593565464,0.0307376030832529,0.200000002980232,0.00128650886472315,0.00292351190000772 ,0.00493186060339212,0.00264519662596285,0.00147427699994296,0.00343792489729822,0.0104314740747213,0.00621141539886594 ,0.0075686234049499,0.00646165106445551,0.0112000769004226,0.0216709971427917,0.0229892302304506,0.0251554101705551 ,0.0266251973807812,0.029200442135334,0.0369292497634888,0.0856243371963501,0.0637016594409943,0.0739372000098228 ,0.0939565300941467,0.0531358830630779,0.0332136414945126,0.200000002980232,0.025435546413064,0.0291993785649538,0.0291943531483412 ,0.150000005960464,0.200000002980232,0.200000002980232,0.150000005960464,0.300000011920929,0.300000011920929,0.25 ,0.25,0.100000001490116,0.150000005960464,0.150000005960464,0.100000001490116,0.0197086650878191,0.0257528014481068 ,0.0543842241168022,0.100000001490116,0.100000001490116,0.00103605363983661,0.0010513128945604,0.00975374132394791 ,0.0106005435809493,0.00368177169002593,0.00513071101158857,0.00379393436014652,0.100000001490116,0.150000005960464 ,0.100000001490116,0.300000011920929,0.25,0.200000002980232,0.150000005960464,0.150000005960464,0.0276906862854958 ,0.0262255556881428,0.200000002980232,0.300000011920929,0.0933467522263527,0.0796394571661949,0.150000005960464,0.150000005960464 ,0.25,0.150000005960464,0.100000001490116,0.0526373125612736,0.032817617058754,0.0278576482087374,0.0460938476026058 ,0.0238594505935907,0.0493467636406422,0.200000002980232,0.0257651209831238,0.100000001490116,0.100000001490116,0.0203086417168379 ,0.0267641171813011,0.100000001490116,0.0280830003321171,0.100000001490116,0.0327643901109695,0.100000001490116,0.00101729144807905 ,0.100000001490116,0.0273743886500597,0.150000005960464,0.100000001490116,0.0151567989960313,0.0151161625981331,0.0236284919083118 ,0.0195639282464981,0.0170303732156754,0.00267774448730052,0.0167572274804115,0.200000002980232,0.300000011920929 ,0.150000005960464,0.00178090971894562 Transform: 0.67453550615253,-0.00572428005084888,0.738220184069585,0,-0.734845382925873,-0.101024949199617,0.670668459615116 ,0,0.0707395621326574,-0.994867443570327,-0.0723513736431941,0,37.9653360667959,3.83014441425826,-45.5581705043554 ,1 TransformLink: 0.674535525364217,-0.734845403855267,0.0707395641474163,0,-0.00572427983321724,-0.101024945358745,-0.99486740574642 ,0,0.738220225293056,0.670668497066384,-0.0723513776834179,0,8.04491980264829,58.8400225859223,-2.17136188975424,1 } Deformer: "SubDeformer::Cluster_R_UpperArm", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 137,150,170,1740,1741,1745,1790,1791,1792,1797,1798,1799,5014,5015,5020,5021,5023,5025,5026,5029,5031,5032,5034,5037 ,5039,5040,5041,5042,5043,5044,5045,5052,5053,5060,5061,5062,5066,5067,5069,5070,5071,5072,5073,5074,5075,5076,5077 ,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100 ,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123 ,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146 ,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5320,5321,5322,5323,5335,5338,5358,5359 ,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397 ,5398,5399,5400,5402,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423 ,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463 ,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492 ,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515 ,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540 ,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563 ,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586 ,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609 ,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632 ,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655 ,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678 ,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701 ,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724 ,5725,5726,5727,5728,5729,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,10054,10055,10060,10061,10062,10063,10064 ,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098 ,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118,10119 ,10120,10121,10122,10123,10124,10125,10126,10139,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204 ,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10242,10243,10244,10245,10246,10247,10248,10254,10257 ,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304 ,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10329,10330,10331,10332,10333,10334,10335 ,10336,10337,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382 ,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10406 ,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425 ,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444 ,10445,10446,10447,10450,10451,10454,10455,10457,10458,10459,10461,10463,10465,10469,10470,10472,10473,10474,10496 Weights: 0.020969782024622,0.0784795209765434,0.0287694744765759,0.0504049845039845,0.0261336229741573,0.0225135684013367,0.0190182253718376 ,0.0650658458471298,0.113102801144123,0.0287809018045664,0.0305631123483181,0.0367412269115448,0.045618362724781,0.0385712683200836 ,0.0391182713210583,0.0349155254662037,0.0142096001654863,0.0279263593256474,0.0288654919713736,0.0265222284942865 ,0.0278860032558441,0.00829831324517727,0.0135858133435249,0.0204892382025719,0.0301536526530981,0.0261204000562429 ,0.0271750949323177,0.0435376390814781,0.0434467270970345,0.00748020503669977,0.0093948757275939,0.0218596905469894 ,0.0117206927388906,0.0366483367979527,0.0317994430661201,0.0213397722691298,0.0211695693433285,0.0263021904975176 ,0.0158387552946806,0.00751717295497656,0.0293513089418411,0.0307456348091364,0.0290009211748838,0.0319274589419365 ,0.0178887881338596,0.0296053178608418,0.0360307134687901,0.0467014126479626,0.0487850047647953,0.0501099713146687 ,0.063944086432457,0.0667659044265747,0.0546446703374386,0.0509453266859055,0.0416330173611641,0.0405608154833317 ,0.0397334024310112,0.0379403904080391,0.0407577157020569,0.034948106855154,0.0280988253653049,0.0205933395773172 ,0.0142618026584387,0.0142017956823111,0.0748932734131813,0.106558777391911,0.121540211141109,0.145699858665466,0.146187573671341 ,0.154134750366211,0.167685657739639,0.16518197953701,0.163050159811974,0.157242730259895,0.14082844555378,0.140541359782219 ,0.140519261360168,0.147883668541908,0.144016921520233,0.131500884890556,0.114455841481686,0.0923147946596146,0.0699141025543213 ,0.066122405230999,0.0590536631643772,0.0526484176516533,0.0622121058404446,0.0769118964672089,0.103977158665657,0.121694050729275 ,0.138020798563957,0.143885031342506,0.13387306034565,0.133046522736549,0.136080756783485,0.141146317124367,0.147136986255646 ,0.128097504377365,0.120865821838379,0.108399629592896,0.128162771463394,0.102392926812172,0.0810344889760017,0.163100302219391 ,0.161350920796394,0.178334593772888,0.181064888834953,0.0655111968517303,0.063481405377388,0.0538437478244305,0.0520751960575581 ,0.0496388413012028,0.158261224627495,0.0590182505548,0.102999188005924,0.0509957335889339,0.0919065028429031,0.0938780084252357 ,0.0241554547101259,0.0186226647347212,0.0187003705650568,0.0800475478172302,0.0831176042556763,0.0880568027496338 ,0.0845041275024414,0.0829988718032837,0.0914682894945145,0.015033345669508,0.0151413809508085,0.00812804233282804 ,0.0082727400586009,0.281471788883209,0.172315835952759,0.120438225567341,0.209621414542198,0.100000001490116,0.100000001490116 ,0.0907326862215996,0.126658961176872,0.104050524532795,0.205078601837158,0.329326122999191,0.0560089275240898,0.0488733053207397 ,0.023843826726079,0.0134323202073574,0.0135761043056846,0.0251511782407761,0.00432062614709139,0.00379811157472432 ,0.296586275100708,0.0109487390145659,0.0712462216615677,0.0683919787406921,0.0371147282421589,0.0302848219871521 ,0.0929126441478729,0.26749175786972,0.429890275001526,0.439371526241302,0.0802547633647919,0.0334492512047291,0.0723082572221756 ,0.20095394551754,0.104419782757759,0.255707621574402,0.251929551362991,0.108305208384991,0.231429785490036,0.254417687654495 ,0.426591217517853,0.449845910072327,0.458420038223267,0.398676633834839,0.487502425909042,0.513588309288025,0.490238398313522 ,0.404504626989365,0.481194138526917,0.308680564165115,0.386695474386215,0.382963806390762,0.534600675106049,0.127761036157608 ,0.295493572950363,0.165520697832108,0.356632709503174,0.372464150190353,0.436508804559708,0.169452592730522,0.441070288419724 ,0.498201429843903,0.497700780630112,0.304001420736313,0.023136442527175,0.291925728321075,0.371426731348038,0.454690366983414 ,0.0379913710057735,0.470165699720383,0.440873682498932,0.310548096895218,0.15815258026123,0.314999997615814,0.349999994039536 ,0.391449093818665,0.394605964422226,0.349999994039536,0.372320175170898,0.458221673965454,0.565859317779541,0.459301829338074 ,0.276696681976318,0.263911247253418,0.184785902500153,0.520172536373138,0.521955013275146,0.497991144657135,0.481275767087936 ,0.430014997720718,0.483669489622116,0.497871071100235,0.496094435453415,0.508753895759583,0.703245341777802,0.519935548305511 ,0.47540420293808,0.663387179374695,0.568387985229492,0.52303409576416,0.536066174507141,0.432498008012772,0.424478769302368 ,0.450523644685745,0.466012120246887,0.490012615919113,0.505570769309998,0.535811543464661,0.507548570632935,0.578609168529511 ,0.568595170974731,0.564144194126129,0.539054274559021,0.514491379261017,0.536900699138641,0.579529047012329,0.576918005943298 ,0.561050355434418,0.51742285490036,0.500973284244537,0.456103533506393,0.380446046590805,0.510196566581726,0.368948191404343 ,0.587899506092072,0.426884144544601,0.500829041004181,0.5,0.498094856739044,0.5,0.355805635452271,0.350002199411392 ,0.497277468442917,0.5,0.502760708332062,0.517215073108673,0.554297804832459,0.540830671787262,0.698667883872986,0.717258453369141 ,0.605572402477264,0.607015371322632,0.608008205890656,0.694056332111359,0.688709139823914,0.702353835105896,0.731380879878998 ,0.688754320144653,0.843828856945038,0.609543561935425,0.602585256099701,0.86238420009613,0.961804509162903,0.628379642963409 ,0.883107841014862,0.631122589111328,0.658645212650299,0.867809116840363,0.821233332157135,0.869235575199127,0.729809761047363 ,0.71179723739624,0.747385561466217,0.820916950702667,0.75,0.75,0.881841719150543,0.764201819896698,0.77573162317276 ,0.798143088817596,0.909145712852478,0.79645836353302,0.636041641235352,0.721963107585907,0.902325689792633,0.519720673561096 ,0.763687491416931,0.613580465316772,0.503093123435974,0.499536067247391,0.63247549533844,0.727182567119598,0.541991591453552 ,0.931566298007965,0.883416652679443,0.722454011440277,0.816012442111969,0.946555495262146,0.963951587677002,0.965491712093353 ,0.958467066287994,0.95552670955658,0.934015333652496,0.903437912464142,0.935317099094391,0.945562958717346,0.946810066699982 ,0.925385355949402,0.907459557056427,0.927021265029907,0.90165764093399,0.956426799297333,0.968130826950073,0.946015894412994 ,0.90613055229187,0.965386986732483,0.974541842937469,0.87210077047348,0.702958166599274,0.720231473445892,0.846153914928436 ,0.649999976158142,0.574937224388123,0.632389008998871,0.89529275894165,0.740150988101959,0.489543944597244,0.54209840297699 ,0.585827589035034,0.490893453359604,0.662932693958282,0.498560518026352,0.504462003707886,0.768023788928986,0.568614304065704 ,0.647481024265289,0.504329919815063,0.716663599014282,0.822241127490997,0.200000002980232,0.200000002980232,0.200000002980232 ,0.21500101685524,0.261308073997498,0.244109690189362,0.244453296065331,0.153650611639023,0.434145867824554,0.312636703252792 ,0.914587438106537,0.923531234264374,0.964551270008087,0.969183504581451,0.499596208333969,0.499518573284149,0.383198082447052 ,0.104722216725349,0.967589974403381,0.931951761245728,0.957806706428528,0.921492457389832,0.901055753231049,0.905746698379517 ,0.649999976158142,0.649999976158142,0.649999976158142,0.944011509418488,0.992870390415192,0.991427659988403,0.993892729282379 ,0.994505882263184,0.98496025800705,0.983531951904297,0.901892483234406,0.285406172275543,0.353163778781891,0.200000002980232 ,0.0540348961949348,0.806423962116241,0.870517492294312,0.90487414598465,0.874945402145386,0.952277839183807,0.974283814430237 ,0.961661517620087,0.927177667617798,0.949196338653564,0.940062880516052,0.649999976158142,0.649999976158142,0.649999976158142 ,0.886188805103302,0.755742967128754,0.745639085769653,0.973658859729767,0.967490673065186,0.307189017534256,0.961516320705414 ,0.75,0.75,0.906072795391083,0.953899383544922,0.953052282333374,0.944958209991455,0.884655654430389,0.963573634624481 ,0.817773759365082,0.990259230136871,0.980742156505585,0.984100639820099,0.969443380832672,0.97771281003952,0.992744565010071 ,0.890227973461151,0.934164881706238,0.975787281990051,0.979732811450958,0.991906225681305,0.972508788108826,0.719477832317352 ,0.990604877471924,0.868284523487091,0.924786448478699,0.810649394989014,0.49951246380806,0.44170954823494,0.405982732772827 ,0.49727800488472,0.200000002980232,0.200000002980232,0.200000002980232,0.952634513378143,0.200000002980232,0.27403461933136 ,0.649999976158142,0.38769394159317,0.383743822574615,0.23994854092598,0.382569253444672,0.664508998394012,0.649999976158142 ,0.649999976158142,0.515626490116119,0.100544266402721,0.0509672276675701,0.087710902094841,0.0689265504479408,0.0132357580587268 ,0.0673551708459854,0.934560120105743,0.929938912391663,0.939364671707153,0.9720698595047,0.294692665338516,0.121550291776657 ,0.318417549133301,0.00905121956020594,0.00918134674429893,0.0127136269584298,0.00864315219223499,0.00791239645332098 ,0.0114359743893147,0.0152849052101374,0.0093435849994421,0.00830323528498411,0.0142276557162404,0.0138462735339999 ,0.00945782754570246,0.00942206755280495,0.014098109677434,0.014433647505939,0.0178906451910734,0.0143724717199802 ,0.0173722356557846,0.00999974180012941,0.014885607175529,0.018461562693119,0.0190013404935598,0.0467968657612801 ,0.0458732806146145,0.030040280893445,0.0285561420023441,0.100000001490116,0.0229084882885218,0.0212979335337877,0.0210412256419659 ,0.200000002980232,0.200000002980232,0.300000011920929,0.300000011920929,0.0272503532469273,0.0286084562540054,0.0298874154686928 ,0.0449934229254723,0.0163005162030458,0.0198944453150034,0.0216402430087328,0.0210471544414759,0.022859338670969 ,0.100000001490116,0.280000001192093,0.25,0.100000001490116,0.200000002980232,0.100000001490116,0.200000002980232 ,0.150000005960464,0.100000001490116,0.200000002980232,0.0452159754931927,0.0238535013049841,0.0278255958110094,0.0225818119943142 ,0.0214288476854563,0.0191271770745516,0.0149979013949633,0.0175532065331936,0.0187588352710009,0.0202955156564713 ,0.018536027520895,0.0447154492139816,0.00276468903757632,0.00197926862165332,0.0182143114507198,0.0188962891697884 ,0.0188498459756374,0.0163978934288025,0.0165616180747747,0.0256021749228239,0.0200647842139006,0.25,0.25,0.280000001192093 ,0.280000001192093,0.0475268326699734,0.0186371058225632,0.300000011920929,0.0100746294483542,0.0147060882300138,0.00839911866933107 ,0.0143435792997479,0.0122731113806367,0.00548796262592077,0.0226557962596416,0.0203133597970009,0.019662719219923 ,0.0199346318840981,0.020324582234025,0.0183906629681587,0.0200679711997509,0.0244641546159983,0.0194248016923666 ,0.0148040950298309,0.0158901512622833,0.0168812870979309,0.0146031798794866,0.018282238394022,0.0178614798933268 ,0.0153546407818794,0.0164247564971447,0.00759732443839312,0.00682812184095383,0.0230845659971237,0.0228842049837112 ,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00130664382595569,0.00277592497877777,0.00490613374859095 ,0.00331772165372968,0.00152155803516507,0.00266357441432774,0.0092479046434164,0.00556127540767193,0.00729139242321253 ,0.0100202336907387,0.00581458257511258,0.0200388133525848,0.0211897641420364,0.023265078663826,0.0219263006001711 ,0.0309158023446798,0.0220311246812344,0.032503891736269,0.0242764744907618,0.0222708638757467,0.0228765457868576 ,0.0218025259673595,0.0208405908197165,0.0202518124133348,0.100000001490116,0.100000001490116,0.100000001490116,0.200000002980232 ,0.200000002980232,0.25,0.25,0.280000001192093,0.280000001192093,0.300000011920929,0.300000011920929,0.150000005960464 ,0.150000005960464,0.200000002980232,0.200000002980232,0.018878472968936,0.0199749954044819,0.0287722535431385,0.150000005960464 ,0.150000005960464,0.00271546677686274,0.00256413081660867,0.150000005960464,0.300000011920929,0.21673309803009,0.300000011920929 ,0.280000001192093,0.25,0.200000002980232,0.200000002980232,0.00260717002674937,0.0190196018666029,0.018177967518568 ,0.280000001192093,0.25,0.0214217882603407,0.0231172982603312,0.200000002980232,0.200000002980232,0.300000011920929 ,0.150000005960464,0.200000002980232,0.0189244467765093,0.0192747078835964,0.0219515785574913,0.0287356525659561,0.0202676299959421 ,0.0340243764221668,0.100000001490116,0.0197208076715469,0.150000005960464,0.150000005960464,0.0182612538337708,0.100000001490116 ,0.150000005960464,0.100000001490116,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116 ,0.100000001490116,0.150000005960464,0.0247486010193825,0.200000002980232,0.100000001490116,0.0153244733810425,0.0152284130454063 ,0.0495516546070576,0.0565993711352348,0.016888216137886,0.00252965185791254,0.200000002980232,0.0175220146775246 ,0.299232631921768,0.25,0.100000001490116,0.100000001490116,0.100000001490116,0.00133510527666658 Transform: -0.703610227813238,-0.134747865534422,0.697693066516033,0,-0.691373621028306,-0.096955071047359,-0.715962418756415 ,0,0.164119304174336,-0.986125037071657,-0.0249425411674709,0,35.6837354126809,3.61653635564703,47.935408778235,1 TransformLink: -0.703610240098373,-0.691373633099789,0.164119307039882,0,-0.134747884155574,-0.0969550844458286,-0.986125173346802 ,0,0.697693115008514,-0.71596246851869,-0.024942542901078,0,-7.84944240647482,59.3413889809175,-1.09440139796442,1 } Deformer: "SubDeformer::Cluster_L_Forearm", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074 ,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4097,4100,4101,4102,4103,4104,4105,4106,4108,4109,4110 ,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133 ,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4177,4178,4179,4181 ,4182,4183,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4206,4213,4214,4215 ,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4241,4242,4243,4244,4245,4246,4247,4253,4254 ,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4271,4272,4273,4275,4283,4284,4285,4286,4287,4288,4289,4290,4291 ,4292,4293,4294,4295,4296,4297,4303,4304,4305,4306,4307,4308,4309,4310,4316,4317,4318,4319,4320,4321,4322,4327,4328 ,4329,4330,4331,4332,4333,4334,4335,4336,4337,4340,4341,4342,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356 ,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379 ,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402 ,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425 ,4426,4427,4428,4429,4430,5849,5864,5868,5893,5894,5898,5922,5923,5926,5927,5936,5937,5941,5945,5960,5961,5962,5964 ,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5983,5984,5985,5988,5989,5990 ,5991,5992,5993,5994,5995,5996,5998,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017 ,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040 ,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063 ,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086 ,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109 ,6110,6111,6112,6113,6114,6115,6116,6129,6130,6131,6132,6133,6134,6135,6137,6138,6139,6140,6141,6143,6144,6145,6146 ,6147,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170 ,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6187,6188,6189,6192,6193,6194,6195,6196,6197 ,6198,6199,6200,6201,6202,6203,6205,6206,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222 ,6223,6224,6225,6226,6227,6228,6229,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6460,6462,6463,6464 ,6467,6469,6492,6493,6494,6495,10539,10549,10551,10552,10555,10556,10557,10558,10559,10630,10875 Weights: 0.0130823627114296,0.0145733961835504,0.017686540260911,0.0165265779942274,0.0167959500104189,0.0174484252929688,0.016780024394393 ,0.0140524292364717,0.0157845802605152,0.011062566190958,0.0132460324093699,0.0114357797428966,0.0128355557098985 ,0.0119939977303147,0.0116653498262167,0.00951695907860994,0.00925766211003065,0.0104927280917764,0.00973798986524343 ,0.00984845124185085,0.00993507821112871,0.00975114479660988,0.00607633776962757,0.00599473621696234,0.0056743398308754 ,0.00550404144451022,0.0102502526715398,0.00793300196528435,0.00754921929910779,0.0102707156911492,0.0141946421936154 ,0.00958449020981789,0.00787202641367912,0.0113529870286584,0.00406387401744723,0.00311212101951241,0.00396739272400737 ,0.00514390412718058,0.00437091197818518,0.00351857556961477,0.00339764193631709,0.00385786732658744,0.0028420789167285 ,0.00624275812879205,0.0056178723461926,0.00572511414065957,0.00517163006588817,0.00433397479355335,0.00553302885964513 ,0.0072903516702354,0.00947430171072483,0.00743232667446136,0.00597157049924135,0.00983333308249712,0.0094017731025815 ,0.00638639880344272,0.00423615192994475,0.00463204644620419,0.0131842866539955,0.016205782070756,0.0168030690401793 ,0.0144315091893077,0.0155597217381001,0.0161190386861563,0.0124592166393995,0.0160823706537485,0.0127456905320287 ,0.0113515695556998,0.0123431896790862,0.00939201284199953,0.00981035921722651,0.011846162378788,0.0105248801410198 ,0.00992137007415295,0.00986271444708109,0.00993407983332872,0.00622597057372332,0.00636665616184473,0.00579370558261871 ,0.0106505611911416,0.0107622062787414,0.00796970538794994,0.00837728101760149,0.00980836246162653,0.0121828624978662 ,0.0142783168703318,0.0083105219528079,0.0117224548012018,0.00993642210960388,0.00767917418852448,0.00782968103885651 ,0.00963418465107679,0.010017391294241,0.00670335255563259,0.0124240284785628,0.0128281209617853,0.0104267252609134 ,0.00943842064589262,0.0117991222068667,0.0113033540546894,0.00881361775100231,0.010496262460947,0.0065448647364974 ,0.00950655899941921,0.00414708536118269,0.00531409168615937,0.0037915192078799,0.00361050292849541,0.00724903866648674 ,0.00917193572968245,0.0109936781227589,0.00282893585972488,0.00443767942488194,0.0038344138301909,0.00314834783785045 ,0.0100808590650558,0.0118633136153221,0.0118824616074562,0.00881960522383451,0.010578534565866,0.0101805999875069 ,0.00759252207353711,0.00988966319710016,0.00481296144425869,0.0045322859659791,0.0038556563667953,0.00742341438308358 ,0.00923402141779661,0.0108389323577285,0.0161522999405861,0.0171369854360819,0.0165906008332968,0.013085457496345 ,0.0101299583911896,0.0139119019731879,0.0115892337635159,0.00417448533698916,0.00503682112321258,0.00557324243709445 ,0.00721208564937115,0.00927688833326101,0.00580374430865049,0.0161867532879114,0.0157619155943394,0.0146748851984739 ,0.0115098869428039,0.0139557290822268,0.0118313496932387,0.00582014210522175,0.00960609689354897,0.00758995581418276 ,0.0119165414944291,0.00834765192121267,0.0101902317255735,0.00910148024559021,0.010863583534956,0.00955894403159618 ,0.010891298763454,0.00956323184072971,0.0128869153559208,0.0114246951416135,0.0122718652710319,0.0106279756873846 ,0.0111806727945805,0.00986453052610159,0.00981386378407478,0.00890371669083834,0.00823746528476477,0.00938957463949919 ,0.0100798653438687,0.0100390641018748,0.0116790756583214,0.0110674453899264,0.00995259359478951,0.00855241715908051 ,0.00950765889137983,0.0102941719815135,0.0102250250056386,0.0117573412135243,0.01140396296978,0.00521518662571907 ,0.00453681312501431,0.00546662602573633,0.00642735743895173,0.00689548952504992,0.00665472960099578,0.00734960194677114 ,0.00683766510337591,0.00571336830034852,0.00265343068167567,0.00448240898549557,0.010069171898067,0.00889439694583416 ,0.00931901391595602,0.0115090440958738,0.0130113819614053,0.00939598213881254,0.0112784979864955,0.0129523808136582 ,0.011606689542532,0.00683522317558527,0.00530915660783648,0.00553609151393175,0.00718199368566275,0.00632563466206193 ,0.00673306873068213,0.00695765623822808,0.00761112431064248,0.00759197911247611,0.00851711817085743,0.00801968108862638 ,0.00914121046662331,0.00810293573886156,0.00927212275564671,0.00706543633714318,0.00801382400095463,0.00976375490427017 ,0.0113250613212585,0.00917198788374662,0.0104699106886983,0.008320945315063,0.00925183948129416,0.00746653834357858 ,0.00805097725242376,0.00470049539580941,0.00601205229759216,0.00583647331222892,0.00677375914528966,0.00773503351956606 ,0.00837157387286425,0.00845489930361509,0.00722456257790327,0.0102738551795483,0.00940028857439756,0.00814017094671726 ,0.00690067606046796,0.00386490998789668,0.00445980951189995,0.00563889276236296,0.00669783353805542,0.00779449241235852 ,0.00851565226912498,0.00859024841338396,0.00727401813492179,0.00593474367633462,0.00519725400954485,0.0045314054004848 ,0.00405027437955141,0.00266629084944725,0.0022423192858696,0.00348280230537057,0.00426881341263652,0.00503883510828018 ,0.00546713080257177,0.00537728983908892,0.0044288095086813,0.0035017451737076,0.00562617788091302,0.0025928404647857 ,0.00231737154535949,0.0061970972456038,0.00331592443399131,0.00674485834315419,0.00590951694175601,0.00519637437537313 ,0.00445498526096344,0.004665806889534,0.0081846471875906,0.00666993763297796,0.00779372174292803,0.00913236383348703 ,0.00815228745341301,0.00982468761503696,0.011363198980689,0.0101974476128817,0.00896517001092434,0.0075426627881825 ,0.00640195840969682,0.00575173040851951,0.00700918631628156,0.00673683220520616,0.0317902453243732,0.0211220774799585 ,0.0194973219186068,0.01398088876158,0.0204283185303211,0.00319192162714899,0.0104818921536207,0.00730531290173531 ,0.00450129853561521,0.00591684225946665,0.00417169742286205,0.00356268719770014,0.0104690222069621,0.00509927375242114 ,0.00186102197039872,0.00145455589517951,0.001659722533077,0.00481847347691655,0.00597766879945993,0.00810802355408669 ,0.00285123847424984,0.00348622654564679,0.0038478837814182,0.00459734443575144,0.00294839451089501,0.00143713282886893 ,0.00252975267358124,0.00263041467405856,0.00343446247279644,0.0047440086491406,0.00173946388531476,0.00166033732239157 ,0.00497205508872867,0.00735520524904132,0.00511531252413988,0.00298283714801073,0.0026974487118423,0.0096267145127058 ,0.00457618525251746,0.00590613065287471,0.00405954755842686,0.00201193033717573,0.00443566776812077,0.00177055958192796 ,0.00127172539941967,0.00133948377333581,0.00157687079627067,0.00116036820691079,0.00138072378467768,0.00185424415394664 ,0.00173488212749362,0.00211239885538816,0.110307686030865,0.270310074090958,0.180308550596237,0.0525071881711483 ,0.0310453362762928,0.0122003210708499,0.0146832931786776,0.0376727655529976,0.0653965249657631,0.0889726653695107 ,0.0620435625314713,0.100000001490116,0.0414770133793354,0.0541006587445736,0.019134471192956,0.05965656042099,0.0883200764656067 ,0.0621042251586914,0.0222545862197876,0.0621042251586914,0.124208390712738,0.0647295713424683,0.0228978954255581 ,0.118719235062599,0.215932756662369,0.219186872243881,0.143957927823067,0.199006676673889,0.328733921051025,0.359697282314301 ,0.0854365229606628,0.100000001490116,0.561005890369415,0.100000001490116,0.100000001490116,0.548947274684906,0.100000001490116 ,0.100000001490116,0.492050230503082,0.100000001490116,0.352902323007584,0.100000001490116,0.490042060613632,0.099943220615387 ,0.111167907714844,0.766309976577759,0.753124237060547,0.901639759540558,0.788366317749023,0.910683929920197,0.895671486854553 ,0.778757274150848,0.895110487937927,0.888791561126709,0.73319685459137,0.947233974933624,0.955398559570313,0.902906775474548 ,0.955532312393188,0.900637269020081,0.896606624126434,0.953525960445404,0.936966776847839,0.888297438621521,0.881877779960632 ,0.928057014942169,0.988516747951508,0.977068960666656,0.928149878978729,0.945951581001282,0.959586977958679,0.95492297410965 ,0.983144521713257,0.965573668479919,0.971107244491577,0.96269965171814,0.965506434440613,0.952936172485352,0.973325133323669 ,0.987694561481476,0.976295530796051,0.993065416812897,0.995336413383484,0.98855584859848,0.991537272930145,0.980835735797882 ,0.96312689781189,0.967631757259369,0.859552204608917,0.924339771270752,0.934046864509583,0.924542844295502,0.932335555553436 ,0.829179406166077,0.84100079536438,0.670541524887085,0.984790861606598,0.807817339897156,0.832724750041962,0.961030125617981 ,0.975924670696259,0.895998060703278,0.860245585441589,0.953859925270081,0.750764131546021,0.750919044017792,0.833233892917633 ,0.863375008106232,0.449999988079071,0.449999988079071,0.859209895133972,0.065053902566433,0.0300639923661947,0.0115915685892105 ,0.499764204025269,0.49950385093689,0.601146101951599,0.882238209247589,0.915871739387512,0.0243195462971926,0.0466393828392029 ,0.0380212739109993,0.0137503705918789,0.0791014283895493,0.195594787597656,0.199006676673889,0.186920404434204,0.0388490706682205 ,0.0013784485636279,0.00267337798140943,0.0028356306720525,0.0120388474315405,0.0138825234025717,0.0989195108413696 ,0.690626382827759,0.625692307949066,0.662807583808899,0.935847699642181,0.00865662377327681,0.0046409317292273,0.00987609662115574 ,0.0168349966406822,0.0235452111810446,0.0170978829264641,0.020403016358614,0.0229209307581186,0.0423493310809135 ,0.0523267090320587,0.296992301940918,0.349999994039536,0.449999988079071,0.103338062763214,0.227065414190292,0.198603168129921 ,0.0149681465700269,0.0262108184397221,0.94562828540802,0.972592830657959,0.965178906917572,0.936788022518158,0.817106544971466 ,0.817820966243744,0.982129037380219,0.753523230552673,0.449999988079071,0.898417294025421,0.00714429467916489,0.0214342530816793 ,0.00914276763796806,0.00893051736056805,0.0117370849475265,0.00181147246621549,0.00124722113832831,0.00145479803904891 ,0.00118767411913723,0.00261793099343777,0.00285224639810622,0.00317385280504823,0.00173605617601424,0.00373418163508177 ,0.00669426564127207,0.00210592360235751,0.00411897618323565,0.020949462428689,0.165792167186737,0.00323831802234054 ,0.119074746966362,0.0746522545814514,0.172979086637497,0.499562233686447,0.601501882076263,0.588120579719543,0.500665545463562 ,0.715467512607574,0.754183232784271,0.689664840698242,0.100000001490116,0.754693031311035,0.791724503040314,0.945742607116699 ,0.905741691589355,0.97682249546051,0.830595850944519,0.719328463077545,0.892614543437958,0.958270907402039,0.577101588249207 ,0.606267750263214,0.610401690006256,0.755581021308899,0.611320614814758,0.761284351348877,0.100000001490116,0.915168702602386 ,0.912965893745422,0.836812496185303,0.285337090492249,0.198688685894012,0.922615230083466,0.00135110120754689,0.896957993507385 ,0.0293768588453531,0.0304955970495939,0.0248932670801878,0.0114057706668973,0.00152966915629804,0.00443700607866049 ,0.00404184451326728,0.00181462150067091,0.00150442542508245,0.00210763537324965,0.0020971957128495,0.00152598856948316 ,0.00385429011657834,0.00210404885001481,0.00414984626695514 Transform: 0.662226976029194,0.128399379241995,0.738220153937706,0,-0.700126772726758,-0.245002464392823,0.670668514419641,0 ,0.266979179766694,-0.960982491477815,-0.0723514007076572,0,23.5674058806897,8.68539591712661,-45.5581716402116,1 TransformLink: 0.662227010399801,-0.700126809064423,0.266979193623327,0,0.128399384753513,-0.245002474909506,-0.960982532727804,0 ,0.738220170844411,0.670668529779279,-0.0723514023646477,0,16.9097890202485,49.1825481658111,-1.24169085897477,1 } Deformer: "SubDeformer::Cluster_R_Forearm", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036 ,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059 ,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082 ,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105 ,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128 ,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151 ,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5169,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187 ,5188,5189,5190,5191,5192,5199,5206,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5226 ,5228,5232,5233,5234,5235,5236,5237,5243,5244,5245,5246,5247,5250,5251,5252,5253,5254,5255,5260,5261,5262,5263,5264 ,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287 ,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5419,5432,5433,5462,5466,5467,5478,5486,5489,5507,5508,5514,5516 ,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550 ,5551,5552,5553,5554,5555,5556,5557,5560,5561,5562,5563,5564,5565,5566,5567,5568,5570,5571,5574,5575,5576,5577,5578 ,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601 ,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624 ,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647 ,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670 ,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695 ,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719 ,5720,5721,5722,5723,5724,5725,5726,5735,5736,5737,5738,10097,10107,10108,10109,10110,10113,10115,10117,10143,10190 ,10447,10458 Weights: 0.9543816447258,0.961428701877594,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.96088171005249 ,0.965084493160248,0.850000023841858,0.985790371894836,0.850000023841858,0.972073614597321,0.97113448381424,0.850000023841858 ,0.850000023841858,0.973477780818939,0.850000023841858,0.972114026546478,0.991701662540436,0.850000023841858,0.986414194107056 ,0.850000023841858,0.850000023841858,0.97951078414917,0.850000023841858,0.969846367835999,0.97387957572937,0.972824931144714 ,0.956462383270264,0.956553280353546,0.992519795894623,0.990605115890503,0.850000023841858,0.850000023841858,0.850000023841858 ,0.850000023841858,0.850000023841858,0.850000023841858,0.978140294551849,0.988279283046722,0.850000023841858,0.850000023841858 ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.963351666927338,0.96820056438446,0.978660225868225 ,0.850000023841858,0.850000023841858,0.850000023841858,0.978830456733704,0.973697781562805,0.850000023841858,0.984161257743835 ,0.992482841014862,0.97064870595932,0.969254374504089,0.97099906206131,0.968072533607483,0.982111215591431,0.970394670963287 ,0.9639692902565,0.953298568725586,0.951214969158173,0.94989001750946,0.936055898666382,0.933234095573425,0.945355355739594 ,0.949054658412933,0.958366990089417,0.959439158439636,0.960266590118408,0.962059617042542,0.959242284297943,0.965051889419556 ,0.971901178359985,0.979406654834747,0.985738217830658,0.985798180103302,0.925106704235077,0.893441200256348,0.878459811210632 ,0.854300141334534,0.853812396526337,0.845865249633789,0.832314372062683,0.834818005561829,0.836949825286865,0.842757284641266 ,0.859171569347382,0.85945862531662,0.859480738639832,0.852116346359253,0.855983078479767,0.868499100208282,0.885544180870056 ,0.907685220241547,0.930085897445679,0.93387758731842,0.940946340560913,0.947351574897766,0.937787890434265,0.923088073730469 ,0.896022856235504,0.878305971622467,0.861979186534882,0.856114983558655,0.866126954555511,0.866953492164612,0.863919258117676 ,0.858853697776794,0.852863013744354,0.871902525424957,0.879134178161621,0.891600370407104,0.871837258338928,0.897607088088989 ,0.918965518474579,0.836899697780609,0.838649094104767,0.821665406227112,0.818935096263886,0.934488832950592,0.936518609523773 ,0.94615626335144,0.947924792766571,0.950361132621765,0.841738760471344,0.94098174571991,0.897000789642334,0.949004292488098 ,0.908093512058258,0.906121969223022,0.97584456205368,0.981377363204956,0.981299638748169,0.91995245218277,0.916882395744324 ,0.911943197250366,0.915495872497559,0.917001128196716,0.908531725406647,0.984966635704041,0.984858632087708,0.991871953010559 ,0.991727232933044,0.521788418292999,0.5,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858 ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858 ,0.850000023841858,0.850000023841858,0.850000023841858,0.523450016975403,0.5,0.850000023841858,0.5,0.5,0.5,0.5,0.850000023841858 ,0.850000023841858,0.500762045383453,0.850000023841858,0.501719176769257,0.850000023841858,0.507238328456879,0.850000023841858 ,0.509424269199371,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858 ,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.56866580247879,0.583622395992279,0.797594547271729 ,0.765617549419403,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858 ,0.850000023841858,0.688585638999939,0.715473115444183,0.55484527349472,0.579463958740234,0.647413372993469,0.698794841766357 ,0.710158050060272,0.679414689540863,0.624432146549225,0.572763860225677,0.564231753349304,0.595975279808044,0.615636348724365 ,0.618266224861145,0.635786294937134,0.655548989772797,0.66695636510849,0.662471175193787,0.643863558769226,0.626260459423065 ,0.600856244564056,0.603469014167786,0.620764255523682,0.640294432640076,0.65158623456955,0.64712917804718,0.628702044487 ,0.611316680908203,0.607571363449097,0.609140694141388,0.619702994823456,0.631768584251404,0.638790547847748,0.63597971200943 ,0.624578416347504,0.613943815231323,0.658988177776337,0.627193629741669,0.0218165908008814,0.0352623462677002,0.026454109698534 ,0.0141577869653702,0.0133350491523743,0.00319730537012219,0.0023472539614886,0.006200619507581,0.00615918589755893 ,0.00416851649060845,0.0035773750860244,0.00362570304423571,0.0050879311747849,0.00134382385294884,0.00219823117367923 ,0.00314766634255648,0.00275600934401155,0.00179083226248622,0.00145914521999657,0.00168375414796174,0.00128154177218676 ,0.00476005533710122,0.00583797786384821,0.00796274747699499,0.0028400057926774,0.00349170388653874,0.00393921649083495 ,0.00469232723116875,0.00309628201648593,0.00155989686027169,0.00251230737194419,0.00267865019850433,0.0034107556566596 ,0.00453887553885579,0.00168139557354152,0.00159857992548496,0.00477183097973466,0.00724268518388271,0.00510938372462988 ,0.00212487136013806,0.00301838270388544,0.00266955746337771,0.00942323636263609,0.00439173029735684,0.00573972193524241 ,0.00425780797377229,0.00218753656372428,0.00465337699279189,0.00195707939565182,0.00140292302239686,0.00148765055928379 ,0.00176502706017345,0.00127081223763525,0.00102934951428324,0.00145317963324487,0.00194567546714097,0.00177611515391618 ,0.00231837830506265,0.111892938613892,0.276097327470779,0.182606264948845,0.051285233348608,0.0299078412353992,0.0116401230916381 ,0.0140904020518065,0.0365951769053936,0.0643474012613297,0.0880153402686119,0.0602120384573936,0.0534202642738819 ,0.0403952412307262,0.053735539317131,0.0189040284603834,0.0706033632159233,0.0886967703700066,0.042857114225626,0.0307560451328754 ,0.0531281605362892,0.0931760966777802,0.0337394736707211,0.0239218175411224,0.123133383691311,0.295537739992142,0.278025776147842 ,0.147490873932838,0.349999994039536,0.424458980560303,0.367260605096817,0.103883504867554,0.259470343589783,0.507120609283447 ,0.45574676990509,0.411120414733887,0.504086971282959,0.33675828576088,0.501042604446411,0.495202124118805,0.231570228934288 ,0.429100096225739,0.351507425308228,0.493275076150894,0.280151754617691,0.175297662615776,0.800000011920929,0.800000011920929 ,0.800000011920929,0.777994394302368,0.733412683010101,0.750932455062866,0.751800656318665,0.840702414512634,0.564836502075195 ,0.684945344924927,0.0456191003322601,0.0653706043958664,0.0292139910161495,0.0110846934840083,0.499919772148132,0.499518573284149 ,0.616083443164825,0.89096063375473,0.0247959773987532,0.0469798818230629,0.0385838113725185,0.0137804802507162,0.0535802431404591 ,0.0805884152650833,0.349999994039536,0.349999994039536,0.349999994039536,0.0399816893041134,0.00100753747392446,0.00152242206968367 ,0.00296934437938035,0.00323700485751033,0.0138339176774025,0.0156798865646124,0.0972830429673195,0.713951766490936 ,0.646363317966461,0.800000011920929,0.943829536437988,0.00899034179747105,0.00499350856989622,0.01054213847965,0.0174784269183874 ,0.0253205075860024,0.0185488481074572,0.0213725566864014,0.0238320827484131,0.0466594398021698,0.0571891218423843 ,0.349999994039536,0.349999994039536,0.349999994039536,0.108780957758427,0.242685750126839,0.253124505281448,0.016670374199748 ,0.0297163967043161,0.690966308116913,0.00730973202735186,0.0209887269884348,0.0087518123909831,0.00851652212440968 ,0.0112668741494417,0.00201677973382175,0.00141855166293681,0.00159147719386965,0.00131093349773437,0.00273123872466385 ,0.00297377584502101,0.00332834711298347,0.0019080612109974,0.00410206848755479,0.0073396610096097,0.00110366602893919 ,0.00239244638942182,0.00473452545702457,0.0217749625444412,0.280029624700546,0.00338610471226275,0.128973752260208 ,0.0733335092663765,0.187143608927727,0.49951246380806,0.555980682373047,0.592231094837189,0.502066969871521,0.800000011920929 ,0.800000011920929,0.800000011920929,0.0454950891435146,0.800000011920929,0.722404003143311,0.349999994039536,0.610655307769775 ,0.614362716674805,0.756966769695282,0.615937829017639,0.333031117916107,0.349999994039536,0.349999994039536,0.00139323866460472 ,0.0287067573517561,0.0301683470606804,0.0249928496778011,0.011644403450191,0.0015737182693556,0.00375572172924876 ,0.0017695747083053,0.00410313904285431,0.00949179194867611,0.00190033111721277,0.00247855274938047,0.00380051089450717 ,0.00995506718754768,0.00198078528046608,0.00330763752572238,0.00164033786859363 Transform: -0.662814698738925,-0.271847628397838,0.697693006595292,0,-0.658330136901758,-0.232377138971596,-0.715962487814441 ,0,0.356760627249285,-0.933862798146209,-0.0249425019495575,0,21.3737221209514,8.0227624562824,47.9354098901974,1 TransformLink: -0.662814672774643,-0.658330111113149,0.356760613273986,0,-0.271847630152989,-0.232377140471911,-0.933862804175582 ,0,0.697693045796623,-0.715962528042281,-0.0249425033510038,0,-17.0964165332061,50.2552287047925,1.06248635465806 ,1 } Deformer: "SubDeformer::Cluster_L_Hand", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6019,6032,6038,6041,6046,6048,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067 ,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090 ,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113 ,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6139,6143,6158,6177,6178,6179,6180,6181 ,6182,6183,6184,6185,6186,6188,6217,6218,6220,6221,6222,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235 ,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6260 ,6271,6272,6274,6275,6276,6277,6278,6281,6282,6300,6301,6302,6303,6304,6307,6308,6309,6326,6327,6329,6330,6331,6332 ,6333,6335,6336,6337,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6367,6368,6370 ,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393 ,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416 ,6417,6418,6419,6420,6421,6422,6423,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440 ,6442,6443,6445,6446,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469 ,6471,6472,6473,6475,6476,6478,6479,6481,6482,6483 Weights: 0.00130479945801198,0.00115911138709635,0.00175872875843197,0.00271619227714837,0.00106285652145743,0.0015120297903195 ,0.00488520367071033,0.00525947473943233,0.0152240814641118,0.0058322437107563,0.0144255012273788,0.00942893140017986 ,0.00434530852362514,0.0114153744652867,0.0101915383711457,0.00324962823651731,0.0111104818060994,0.0106603158637881 ,0.00879672635346651,0.0153704714030027,0.0104524334892631,0.0109532186761498,0.0155204143375158,0.0213428996503353 ,0.00706385681405663,0.0102087017148733,0.0292237475514412,0.00535075040534139,0.0103372754529119,0.00476671941578388 ,0.00251900753937662,0.0204347223043442,0.0258889235556126,0.0137172415852547,0.0270151142030954,0.0225172936916351 ,0.0296244621276855,0.0124627286568284,0.0151561014354229,0.0168448686599731,0.00965970754623413,0.00927151646465063 ,0.00500783044844866,0.00339167006313801,0.00459962524473667,0.0060916724614799,0.0131798479706049,0.0255049075931311 ,0.0152906086295843,0.110847167670727,0.0640205889940262,0.0492582283914089,0.0529643408954144,0.0609882585704327 ,0.163887873291969,0.151392802596092,0.314569145441055,0.0119036193937063,0.181643426418304,0.155784979462624,0.0354310423135757 ,0.0217668879777193,0.0815117955207825,0.106855973601341,0.0321793593466282,0.00307321944274008,0.00231335498392582 ,0.00378830498084426,0.0047411723062396,0.111192271113396,0.796268939971924,0.776784062385559,0.978859066963196,0.98049396276474 ,0.972140312194824,0.974617958068848,0.86642324924469,0.79427707195282,0.951687097549438,0.844824910163879,0.833017945289612 ,0.00297021493315697,0.981817245483398,0.0783289968967438,0.00117522315122187,0.00118728959932923,0.00153656990732998 ,0.0214405823498964,0.0220679994672537,0.0280335266143084,0.0257828701287508,0.175093457102776,0.175840079784393,0.014129888266325 ,0.236173659563065,0.964483380317688,0.966105341911316,0.00487766275182366,0.00121384067460895,0.00104836956597865 ,0.00261064269579947,0.00527278799563646,0.0016196146607399,0.191565632820129,0.00648218113929033,0.0210572946816683 ,0.00848367344588041,0.0187208727002144,0.163910433650017,0.959246575832367,0.969912648200989,0.00222233613021672 ,0.00535696605220437,0.0144689073786139,0.980347037315369,0.970510244369507,0.985016524791718,0.977311074733734,0.979323983192444 ,0.979390799999237,0.985957503318787,0.983055531978607,0.987015068531036,0.995343744754791,0.972897946834564,0.484119653701782 ,0.470623850822449,0.491619795560837,0.994537591934204,0.969956040382385,0.218082129955292,0.35081872344017,0.00539582036435604 ,0.34410172700882,0.00174769177101552,0.020339347422123,0.00183528068009764,0.00886431150138378,0.0222514942288399 ,0.0158319640904665,0.320180326700211,0.04841323569417,0.397936344146729,0.309453368186951,0.206016972661018,0.347281217575073 ,0.0044247810728848,0.191069826483727,0.0211531389504671,0.459793508052826,0.204510793089867,0.157113015651703,0.370152801275253 ,0.00862766150385141,0.00548374000936747,0.431275308132172,0.31342825293541,0.472878903150558,0.270284116268158,0.358282715082169 ,0.203067094087601,0.283760100603104,0.00640271510928869,0.00861588399857283,0.00290981493890285,0.0124844554811716 ,0.412148624658585,0.0235857348889112,0.43615585565567,0.494468510150909,0.492149859666824,0.583465158939362,0.614591658115387 ,0.47902324795723,0.0368059240281582,0.179605558514595,0.093951515853405,0.0709963366389275,0.528760671615601,0.00757221970707178 ,0.00689148018136621,0.00146077561657876,0.00115335988812149,0.00185912323649973,0.00343802105635405,0.00929137691855431 ,0.00599377509206533,0.0103735150769353,0.0123039186000824,0.00861450098454952,0.0111370049417019,0.00242832745425403 ,0.00318639865145087,0.0104857282713056,0.00409229006618261,0.00196978286840022,0.00119663344230503,0.00250004953704774 ,0.00289106229320169,0.00217845221050084,0.00413126405328512,0.0133866397663951,0.0123976143077016,0.0206668935716152 ,0.0215567238628864,0.0301417876034975,0.0713586881756783,0.560532927513123,0.603163719177246,0.804462194442749,0.766411006450653 ,0.804961740970612,0.65153706073761,0.576698124408722,0.960165858268738,0.364009708166122,0.789578795433044,0.732573091983795 ,0.514938175678253,0.972435057163239,0.954573690891266,0.965797305107117,0.983198702335358,0.943976640701294,0.928566694259644 ,0.987579226493835,0.973949670791626,0.983637511730194,0.969260632991791,0.390069872140884,0.995344936847687,0.41723170876503 ,0.504042029380798,0.701698005199432,0.0107290036976337,0.00334366434253752,0.00361302401870489,0.453608155250549 ,0.400738775730133,0.471676975488663,0.800864040851593,0.939786970615387,0.42675507068634,0.605584919452667,0.790349185466766 ,0.525061130523682,0.883583009243011,0.923232853412628,0.904953896999359,0.86821836233139,0.943565130233765,0.911553740501404 ,0.00109791976865381,0.00112204707693309,0.00190161785576493,0.0025254930369556,0.882194042205811,0.0070715737529099 ,0.00892249215394259,0.927492499351501,0.957062900066376,0.887509346008301,0.936216056346893,0.948306977748871,0.522060811519623 ,0.758114814758301,0.863632440567017,0.691744744777679,0.269960701465607,0.157683476805687,0.972856402397156,0.0662615373730659 ,0.951834917068481,0.634501338005066,0.04736552760005,0.00515583343803883,0.318909585475922,0.400039374828339,0.44497874379158 ,0.412904262542725,0.422368437051773,0.36232003569603,0.435642629861832,0.115776337683201,0.112991780042648,0.519146800041199 Transform: 0.525245239000652,-0.790238300444755,0.31565934973444,0,-0.819456473838864,-0.569703518321511,-0.0626812335023225 ,0,0.229365355566028,-0.22574608595525,-0.946799976133382,0,21.0667191574115,43.1016445023767,-3.43213608283347,1 TransformLink: 0.525245270545199,-0.819456523052794,0.229365369340976,0,-0.790238327627501,-0.569703537918265,-0.2257460937205,0 ,0.31565936333484,-0.0626812362029865,-0.946800016926909,0,24.0787627570046,41.6032892634726,1.64850555767672,1 } Deformer: "SubDeformer::Cluster_R_Hand", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 5016,5017,5018,5019,5022,5024,5027,5028,5030,5033,5035,5036,5038,5046,5047,5048,5049,5050,5051,5054,5055,5056,5057 ,5058,5059,5063,5064,5065,5068,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178 ,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201 ,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224 ,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247 ,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270 ,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293 ,5294,5295,5296,5297,5298,5299,5300,5587,5591,5594,5604,5610,5611,5612,5613,5618,5620,5621,5626,5627,5628,5629,5630 ,5632,5633,5640,5642,5645,5646,5661,5680,5709,5710,5717,5719,5720,5721,5722,5723,6923,6924,6925,6926,6927,6928,6929 ,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952 ,6953,6954,6955,6956,6957,6959,6963,6974,6975,6977,6978,6979,6980,6981,6984,6985,7003,7004,7005,7006,7007,7010,7011 ,7029,7030,7032,7033,7034,7035,7036,7038,7039,7040,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064 ,7065,7066,7067,7070,7071,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7087,7088,7089,7090,7091 ,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114 ,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139 ,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7159,7160,7161,7163,7164 ,7166,7167,7169,7170,7171,7172,7173,7174 Weights: 0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.478211551904678,1,1,1,1,1,1,0.5,1,1,1,1,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.476549983024597,1,1,1 ,1,1,1,0.5,1,1,1,1,1,1,0.150000005960464,1,1,1,0.5,0.5,0.5,0.5,0.150000005960464,0.150000005960464,0.499237954616547 ,0.150000005960464,0.498280823230743,0.150000005960464,0.492761671543121,0.150000005960464,0.490575730800629,0.150000005960464 ,0.150000005960464,1,0.150000005960464,1,0.150000005960464,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,1,0.43133419752121,0.416377604007721,0.202405482530594 ,0.234382465481758,0.150000005960464,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464 ,0.150000005960464,1,1,1,1,0.311414361000061,0.284526914358139,0.445154696702957,0.420536041259766,0.352586656808853 ,0.30120512843132,0.289841949939728,0.320585310459137,0.375567853450775,0.427236169576645,0.435768216848373,0.404024720191956 ,0.384363621473312,0.381733804941177,0.364213705062866,0.344451010227203,0.33304363489151,0.337528795003891,0.356136411428452 ,0.373739540576935,0.399143755435944,0.396531015634537,0.379235744476318,0.359705597162247,0.348413735628128,0.35287082195282 ,0.371297925710678,0.388683319091797,0.392428636550903,0.390859305858612,0.380297005176544,0.368231445550919,0.361209481954575 ,0.364020258188248,0.375421583652496,0.386056154966354,0.341011792421341,0.372806400060654,1,1,1,0.00116238882765174 ,0.00126314430963248,0.00127484649419785,0.00115499168168753,0.002157126320526,0.00122782762628049,0.00155618181452155 ,0.00316519476473331,0.00129367306362838,0.00159544369671494,0.00123375444673002,0.00481545180082321,0.00362198776565492 ,0.00342102046124637,0.0025759288109839,0.00383124360814691,0.00162800203543156,0.00126475747674704,0.00289244158193469 ,0.00115937925875187,0.00149133347440511,0.0011821809457615,0.00141481403261423,0.00124221364967525,0.00153389351908118 ,0.00119169999379665,0.00243614916689694,0.00110688724089414,0.00127081596292555,0.00211558281444013,0.00100069667678326 ,0.0010915391612798,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.980131089687347,0.972969591617584,0.984836518764496,0.979745507240295 ,0.976824939250946,0.975857794284821,0.982909977436066,0.980634093284607,0.989108204841614,0.995466649532318,0.979120552539825 ,0.460078805685043,0.459079802036285,0.480023443698883,0.992386698722839,0.975788593292236,0.138774245977402,0.343353152275085 ,0.00259447447024286,0.276375085115433,0.0248107090592384,0.0122508257627487,0.025913767516613,0.014011156745255,0.277671813964844 ,0.0515360981225967,0.380510330200195,0.249686777591705,0.148735642433167,0.335018038749695,0.00630574533715844,0.173127308487892 ,0.0223309826105833,0.442807972431183,0.139312252402306,0.139563262462616,0.357817381620407,0.011000263504684,0.413820147514343 ,0.269777983427048,0.461716413497925,0.253329813480377,0.356669843196869,0.186188355088234,0.220778793096542,0.00349638611078262 ,0.0110432421788573,0.0015514426631853,0.00884688831865788,0.382615059614182,0.021647721529007,0.416930913925171,0.494424849748611 ,0.490876406431198,0.62108588218689,0.640656173229218,0.47115883231163,0.0474152453243732,0.260224372148514,0.133849367499352 ,0.0852451249957085,0.555279970169067,0.00700232526287436,0.010713710449636,0.00243271933868527,0.00105389696545899 ,0.0027286084368825,0.00499552441760898,0.0102303149178624,0.00594911677762866,0.0118187936022878,0.0127267623320222 ,0.00834109634160995,0.0117082539945841,0.00214929180219769,0.00271061388775706,0.0104626463726163,0.00442534405738115 ,0.00153978925663978,0.00266948714852333,0.00231324881315231,0.00142847280949354,0.00443828664720058,0.0104610789567232 ,0.00884981267154217,0.022325336933136,0.0158318430185318,0.0256853923201561,0.0783745720982552,0.57348096370697,0.621407747268677 ,0.828966498374939,0.774004817008972,0.819439351558685,0.668650686740875,0.582747161388397,0.966136991977692,0.334902942180634 ,0.80157071352005,0.726243376731873,0.515989422798157,0.967205703258514,0.947406470775604,0.958869814872742,0.978822588920593 ,0.934976994991302,0.91591876745224,0.981829702854156,0.968005239963531,0.977376699447632,0.962073385715485,0.376457810401917 ,0.992758095264435,0.402833461761475,0.492891848087311,0.673506021499634,0.0103504024446011,0.00493862433359027,0.447454303503037 ,0.384990841150284,0.465120375156403,0.800574660301209,0.931973874568939,0.408383995294571,0.558285415172577,0.778715252876282 ,0.581696271896362,0.878262996673584,0.91571843624115,0.89141857624054,0.856104969978333,1,0.901411950588226,1,0.918534278869629 ,1,0.874900579452515,0.928177952766418,0.940730452537537,0.504734337329865,0.806382894515991,0.88244241476059,0.68834376335144 ,0.284145832061768,1,1,0.653447806835175,0.0394690781831741,0.264194279909134,0.358842074871063,0.421661764383316 ,0.382513344287872,0.406745463609695,0.338808655738831,0.411881446838379,0.121384337544441,0.155007690191269,0.524047017097473 ,1,1,1 Transform: -0.539910064473397,0.715295240266879,0.443677536411028,0,-0.785857646383377,-0.617193463603956,0.0387289250314665 ,0,0.301537519568316,-0.327757234066569,0.895349240611154,0,19.3032950598201,45.5941437919841,4.68926169427989,1 TransformLink: -0.539910067817437,-0.785857651250743,0.301537521435949,0,0.715295342735177,-0.617193552018866,-0.327757281018826 ,0,0.443677559210366,0.0387289270216368,0.895349286620627,0,-24.2717555485735,43.1284436014007,4.92461773900622,1 } Deformer: "SubDeformer::Cluster_L_Thumb1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6041,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072 ,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6089,6090,6091,6092,6093,6094,6095,6096 ,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121 ,6122,6123,6124,6125,6126,6127,6135,6136,6137,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6220,6221,6224 ,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6250,6353,6355,6356,6358 ,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381 ,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405 ,6406,6407,6408,6409,6410,6413,6419,6420,6425,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6445,6446,6448,6449 ,6450,6451,6452,6453,6454,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6481,6482,6483 Weights: 0.00159759109374136,0.00247123767621815,0.00295475963503122,0.0077313999645412,0.00347915571182966,0.00788113940507174 ,0.00438647763803601,0.00198627333156765,0.00456920033320785,0.00394627405330539,0.00149479776155204,0.00498084956780076 ,0.0045593879185617,0.00389673910103738,0.0053889025002718,0.00434868596494198,0.00466193072497845,0.00575977610424161 ,0.00650691241025925,0.00277097732760012,0.0038960506208241,0.00847896747291088,0.00217573903501034,0.00471446616575122 ,0.00265942816622555,0.00134018436074257,0.00880127213895321,0.0104272356256843,0.0025074842851609,0.00591300847008824 ,0.00400860561057925,0.00504888221621513,0.00428155763074756,0.00490744644775987,0.00415540672838688,0.00185257231350988 ,0.0034409835934639,0.00126996927428991,0.00180447299499065,0.00182313250843436,0.00459778308868408,0.00878611020743847 ,0.00689603015780449,0.0274771600961685,0.0106862084940076,0.0132547691464424,0.0176012106239796,0.00608202582225204 ,0.00622645253315568,0.00652747694402933,0.0127935614436865,0.002189856255427,0.00902560912072659,0.00980143714696169 ,0.00303600518964231,0.00200605415739119,0.0202941447496414,0.0301873274147511,0.0108516663312912,0.00138832733500749 ,0.00105692853685468,0.00181000796146691,0.00204267911612988,0.027459803968668,0.194376647472382,0.211311653256416 ,0.0143799241632223,0.0139722237363458,0.0235288999974728,0.0229588188230991,0.128103569149971,0.197381421923637,0.0392584875226021 ,0.141111671924591,0.154612764716148,0.00147584686055779,0.014051241800189,0.00496605504304171,0.0069593284279108 ,0.0040521421469748,0.00478092953562737,0.00771074322983623,0.00695881806313992,0.00556631200015545,0.00246958923526108 ,0.00889166165143251,0.022413456812501,0.0212120581418276,0.00200483039952815,0.00163757242262363,0.00320822768844664 ,0.0478605479001999,0.00297751650214195,0.00626803236082196,0.00324841495603323,0.00309346639551222,0.00481143221259117 ,0.0272986982017756,0.0201074331998825,0.00103253370616585,0.00216887542046607,0.00447408715263009,0.0121217016130686 ,0.0195227228105068,0.00604483531787992,0.0104366512969136,0.0123603446409106,0.0124463373795152,0.00555362459272146 ,0.00640094606205821,0.015989737585187,0.00246398895978928,0.0972976014018059,0.0578067973256111,0.465059280395508 ,0.380723357200623,0.422929733991623,0.458774000406265,0.092535063624382,0.274851739406586,0.232820615172386,0.00305847125127912 ,0.00748487003147602,0.0182876884937286,0.00735447648912668,0.00302722817286849,0.0059708533808589,0.0140878790989518 ,0.0213838182389736,0.0202675182372332,0.0249171163886786,0.0320472456514835,0.0313042849302292,0.0334601327776909 ,0.013205399736762,0.0161251649260521,0.0353358276188374,0.0189561918377876,0.0175694078207016,0.0115405488759279 ,0.0251711886376143,0.033161573112011,0.0268362518399954,0.0510043613612652,0.426536828279495,0.349578112363815,0.436885267496109 ,0.484621107578278,0.478504449129105,0.492120414972305,0.424962937831879,0.391250789165497,0.19102568924427,0.228269383311272 ,0.191427558660507,0.345326334238052,0.418538182973862,0.0294552650302649,0.0147695094347,0.261895328760147,0.481220096349716 ,0.0170786399394274,0.0281957481056452,0.0150331221520901,0.00732234213501215,0.0262191146612167,0.0131651647388935 ,0.00237191957421601,0.00544905196875334,0.00206797500140965,0.0344606004655361,0.00109131261706352,0.198616206645966 ,0.44857582449913,0.0926235690712929,0.0629098638892174,0.0645485669374466,0.0908042192459106,0.0431784391403198,0.0665719956159592 ,0.00115764292422682,0.112029992043972,0.00399026228114963,0.00503641506657004,0.0523641631007195,0.0312329083681107 ,0.063860610127449,0.0429957583546638,0.0335627309978008,0.19743774831295,0.114430151879787,0.0259818006306887,0.463000237941742 ,0.00479828519746661,0.0177750047296286,0.00974856596440077,0.0449162684381008,0.35066893696785,0.463127940893173 ,0.0020702350884676,0.497311651706696,0.503731489181519,0.457812607288361 Transform: -0.241495099703434,0.748823868440869,0.617205703028192,0,-0.623205875017562,-0.607212304548738,0.492856574902623,0 ,0.743837685515158,-0.26562378413437,0.613310235141847,0,28.1335141022105,7.31972621211066,-36.6074359315937,1 TransformLink: -0.241495112205703,-0.623205907281104,0.743837724023843,0,0.748823895817871,-0.607212326748421,-0.265623793845576 ,0,0.61720574758735,0.492856610484397,0.613310279419772,0,23.9072401077965,40.019816957261,3.46924110783787,1 } Deformer: "SubDeformer::Cluster_L_Index1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6117,6118,6119,6120,6121,6123,6124,6125,6126,6127,6136,6185,6186,6230,6231,6235,6236,6238,6239,6240,6241,6242,6243 ,6245,6250,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349 ,6350,6351,6352,6353,6354,6355,6356,6357,6362,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408 ,6409,6410,6411,6412,6413,6415,6418,6419,6420,6421,6422,6423,6424,6425,6427,6428,6429,6431,6432,6433,6434,6435,6436 ,6437,6438,6439,6446,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6466,6478,6479,6480,6483 Weights: 0.00371436937712133,0.00494377221912146,0.00263386126607656,0.00218590977601707,0.00185694906394929,0.00206264993175864 ,0.00298752659000456,0.00426755286753178,0.00718114338815212,0.00587730761617422,0.00168352981563658,0.00520978355780244 ,0.00493870163336396,0.00560601847246289,0.00409966241568327,0.00274549331516027,0.00369933270849288,0.00374366831965745 ,0.00306748598814011,0.00304535985924304,0.00253631826490164,0.00310266017913818,0.00145082944072783,0.00372593943029642 ,0.0044119730591774,0.512684762477875,0.695699751377106,0.632200360298157,0.776936829090118,0.691368758678436,0.499650865793228 ,0.514966368675232,0.54956066608429,0.423678308725357,0.00362533191218972,0.0122475698590279,0.0173689760267735,0.0190478153526783 ,0.00414237612858415,0.0305128712207079,0.0233743507415056,0.0281667727977037,0.0429911389946938,0.0580260083079338 ,0.0308641213923693,0.476867467164993,0.550444364547729,0.507946193218231,0.542712569236755,0.494468510150909,0.492149859666824 ,0.274605512619019,0.293562948703766,0.494670271873474,0.325606614351273,0.00381355290301144,0.00167523242998868,0.00164477236103266 ,0.00221550418063998,0.00144181016366929,0.00109618133865297,0.00171595136635005,0.00399577850475907,0.0344652831554413 ,0.00270954403094947,0.00151923589874059,0.00400778744369745,0.00674853380769491,0.00620432337746024,0.00295892870053649 ,0.0103678619489074,0.00600593723356724,0.00103968544863164,0.00440405542030931,0.0028966658283025,0.565459847450256 ,0.469368457794189,0.272410869598389,0.476170718669891,0.491343110799789,0.106734871864319,0.071705125272274,0.125662431120873 ,0.0645021125674248,0.0104111544787884,0.00976197328418493,0.359163969755173,0.00594769092276692,0.0161525495350361 ,0.0120403580367565,0.00650829821825027,0.0132051296532154,0.0192908421158791,0.00605902681127191,0.00987514760345221 ,0.00226790015585721,0.00873659271746874,0.00513577414676547,0.0196360442787409,0.00865437649190426,0.0073253489099443 ,0.0213408451527357,0.0177945960313082,0.00902661215513945,0.259924441576004,0.00377326039597392,0.00483903102576733 ,0.600874423980713,0.53497850894928,0.02568169683218,0.00841941591352224 Transform: 0.476186898697672,-0.714199454111438,0.512996243940419,0,-0.826192420685591,-0.563128902688112,-0.0170846068296861 ,0,0.30108483017946,-0.415698154205959,-0.858220797655617,0,17.9477939682589,41.6512675908134,-9.0769042840432,1 TransformLink: 0.476186920862355,-0.826192459141696,0.30108484419381,0,-0.714199470747975,-0.563128915805617,-0.415698163889218,0 ,0.512996260553214,-0.0170846073829516,-0.858220825448115,0,25.8572264784377,38.1282898492032,4.12055842343868,1 } Deformer: "SubDeformer::Cluster_L_Middle1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6119,6120,6121,6122,6125,6136,6185,6186,6230,6231,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6249,6250 ,6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6315,6316,6318,6320,6321,6322,6323,6324,6325,6326,6327 ,6328,6353,6354,6356,6401,6402,6403,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6417,6419,6420,6425,6426,6427 ,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6465,6475 ,6476 Weights: 0.00412716390565038,0.00334790674969554,0.00247386749833822,0.00131288380362093,0.00478683551773429,0.00244800793007016 ,0.00789336860179901,0.00774389877915382,0.00784872099757195,0.00588024314492941,0.00478576263412833,0.00626767612993717 ,0.00613046204671264,0.00850861892104149,0.00524820294231176,0.00511750066652894,0.00595254916697741,0.00744087295606732 ,0.00562278227880597,0.00201658881269395,0.0165302008390427,0.00264852098189294,0.00964223500341177,0.771893739700317 ,0.77039760351181,0.820030331611633,0.36432346701622,0.423502087593079,0.594969689846039,0.490104913711548,0.418671399354935 ,0.0125696966424584,0.0014935287181288,0.00192902889102697,0.00668199779465795,0.00570874242112041,0.00863724667578936 ,0.00920366495847702,0.0100211091339588,0.128556668758392,0.00183883716817945,0.427183836698532,0.430036187171936 ,0.0196738447993994,0.527762174606323,0.64354407787323,0.478188276290894,0.00859897024929523,0.00973446387797594,0.0340385884046555 ,0.00638306746259332,0.56878536939621,0.161186441779137,0.00647852476686239,0.0104820244014263,0.0129652433097363 ,0.00652002496644855,0.0194364041090012,0.062188807874918,0.0101987821981311,0.0084811132401228,0.00866235606372356 ,0.0206532515585423,0.00225880974903703,0.0242175608873367,0.0204420946538448,0.418661445379257,0.562414765357971 ,0.460900753736496,0.186287403106689,0.0159904323518276,0.0341598056256771,0.00508690346032381,0.0102104907855392 ,0.0117530338466167,0.00734900729730725,0.0172924008220434,0.0216865725815296,0.00719740614295006,0.0119991423562169 ,0.0114067317917943,0.00656844489276409,0.0289940275251865,0.0121338376775384,0.0108049148693681,0.455316990613937 ,0.0266528204083443,0.0129107730463147,0.0223489850759506,0.00559531105682254,0.00153321924153715,0.54115879535675 ,0.558823943138123 Transform: 0.570318626472898,-0.773811772846064,0.275593770724241,0,-0.809442113089849,-0.586519973135601,0.028243909598697,0 ,0.139785791831067,-0.239185245855052,-0.960859105614745,0,15.4107018618584,43.3508755303443,-5.43133537051692,1 TransformLink: 0.570318661979152,-0.809442163483183,0.139785800533693,0,-0.77381183435103,-0.586520019754033,-0.23918526486624,0 ,0.275593807727066,0.0282439133908888,-0.960859234625286,0,26.2532520446477,38.0536303940709,2.99594460225472,1 } Deformer: "SubDeformer::Cluster_L_Ring1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6274,6277,6278,6279,6280,6281,6282,6283,6285,6286,6287,6290,6291,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430 ,6471,6472,6473,6474 Weights: 0.636881113052368,0.64725536108017,0.770711004734039,0.324779361486435,0.371644020080566,0.644023895263672,0.495609492063522 ,0.184649080038071,0.00116098043508828,0.0132631380110979,0.442761778831482,0.00111894879955798,0.00623618019744754 ,0.0150064034387469,0.0145346531644464,0.0168191604316235,0.0195216089487076,0.037700742483139,0.446998029947281,0.424838811159134 ,0.478186815977097,0.512804090976715,0.556056439876556,0.654269754886627,0.558543562889099,0.545004069805145,0.013606695458293 Transform: 0.582885664221684,-0.81087194489037,0.0522593330921746,0,-0.812067782193689,-0.57910556765076,0.0719910370836576,0 ,-0.0281118424327725,-0.084400665792594,-0.996035240596412,0,15.4403653620145,43.8373141656814,-2.25142242053959,1 TransformLink: 0.582885631511836,-0.812067736622806,-0.0281118408552176,0,-0.810871910930541,-0.579105543397453,-0.0844006622578409 ,0,0.0522593358187756,0.071991040839749,-0.996035292563984,0,26.6641374331222,38.0871364365867,1.89145925166464,1 } Deformer: "SubDeformer::Cluster_L_Pinky1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270 ,6271,6272,6273,6275,6276,6416,6470 Weights: 0.507474660873413,0.490716248750687,0.498910874128342,0.766794085502625,0.626131474971771,0.534704625606537,0.623797118663788 ,0.558018565177917,0.576629400253296,0.479758083820343,0.00651619024574757,0.0263325236737728,0.488740682601929,0.030104698613286 ,0.0135515499860048,0.0173956081271172,0.0141944829374552,0.00693258456885815,0.0144957825541496,0.0226971209049225 ,0.055401973426342,0.0273477323353291,0.0195371117442846,0.471582263708115,0.484038800001144,0.0752825513482094,0.533363699913025 ,0.55875962972641,0.577449381351471,0.0189471412450075 Transform: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0 ,-0.181250153437913,0.114830509928814,-0.97670992775668,0,20.7401281878819,41.51763584013,1.91200099905934,1 TransformLink: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431 ,0,-0.188256764556457,0.102942020272518,-0.976709979481948,0,26.5389261131629,38.1112859796014,0.859130680551072,1 } Deformer: "SubDeformer::Cluster_R_Thumb1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 5610,5613,5626,5627,5628,5629,5630,5640,5717,6938,6939,6940,6941,6942,6943,6944,6945,6953,7056,7058,7059,7061,7062 ,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085 ,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7106,7107,7108,7109 ,7110,7111,7112,7113,7116,7122,7123,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7150,7151,7152 ,7153,7156,7157,7169,7170,7171 Weights: 0.00117834086995572,0.00185435765888542,0.00218916381709278,0.00165725930128247,0.00153683964163065,0.00117011729162186 ,0.00181572057772428,0.00142473354935646,0.00112519657704979,0.0120337009429932,0.0176298543810844,0.0058772643096745 ,0.00901230424642563,0.0135681601241231,0.0142464553937316,0.00650400621816516,0.00706358160823584,0.0124409534037113 ,0.00218535028398037,0.0649432241916656,0.0371046252548695,0.458596736192703,0.341233342885971,0.401548683643341,0.451044887304306 ,0.0650122687220573,0.274735152721405,0.276568412780762,0.00614429172128439,0.0060535091906786,0.0265965759754181 ,0.0063732503913343,0.00581173552200198,0.00778278242796659,0.0180601254105568,0.0219534132629633,0.0191538892686367 ,0.0263300146907568,0.0315652005374432,0.0293215438723564,0.0334162600338459,0.0118432277813554,0.013966896571219 ,0.0339761525392532,0.0192808117717505,0.0143059594556689,0.00743300141766667,0.0268707405775785,0.0281048789620399 ,0.0191535260528326,0.0545883439481258,0.427406132221222,0.33634215593338,0.441167950630188,0.490224152803421,0.483224272727966 ,0.493799120187759,0.414857596158981,0.374179124832153,0.167420074343681,0.220849931240082,0.177327692508698,0.328664183616638 ,0.412713706493378,0.0247516389936209,0.0111677721142769,0.267518728971481,0.479819446802139,0.0197998341172934,0.0317522473633289 ,0.0172765497118235,0.00883822608739138,0.0289071407169104,0.0154305025935173,0.00267817359417677,0.00531181460246444 ,0.0370833277702332,0.00141901499591768,0.208139926195145,0.388550370931625,0.0929949060082436,0.0676976293325424 ,0.0705112963914871,0.0944326370954514,0.0724598839879036,0.0573470108211041,0.067487895488739,0.047105111181736,0.037431426346302 ,0.153220906853676,0.0980262160301209,0.0206126980483532,0.448262453079224,0.334237396717072,0.470356494188309,0.503118216991425 ,0.476589530706406,0.455160111188889 Transform: 0.299955290163138,-0.814394980290346,0.496777211674741,0,-0.640285237271459,-0.557902697734118,-0.527995609111184 ,0,0.70715038790913,-0.159704046697343,-0.688790892093755,0,29.029916536771,4.7317295503175,38.4517010471098,1 TransformLink: 0.299955280479185,-0.640285216600072,0.707150365079025,0,-0.814394991209243,-0.557902705214128,-0.159704048838554 ,0,0.496777284049562,-0.527995686034173,-0.688790992442797,0,-23.956111524808,41.5296033876418,6.71234561535597,1 } Deformer: "SubDeformer::Cluster_R_Index1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6938,6939,6942,6943,6944,6945,6946,6948,6953,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045 ,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7065,7097,7098,7099,7100,7101,7103,7104 ,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7118,7121,7122,7123,7124,7125,7126,7127,7128,7130,7131,7132 ,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7156,7166,7167,7168,7171 Weights: 0.0028345063328743,0.0034583390224725,0.00352103868499398,0.00366821466013789,0.00313717871904373,0.00359226879663765 ,0.00116448593325913,0.00275600515305996,0.00362914521247149,0.516221463680267,0.704328000545502,0.626512408256531 ,0.788698315620422,0.758932828903198,0.491405695676804,0.50881016254425,0.517794549465179,0.377093970775604,0.00629057269543409 ,0.0051807276904583,0.0198304392397404,0.0193320792168379,0.00171411549672484,0.037797424942255,0.027088450267911 ,0.0283459965139627,0.0328404195606709,0.0557266399264336,0.0329632498323917,0.479581147432327,0.584652662277222,0.496655881404877 ,0.558867752552032,0.494424849748611,0.492634028196335,0.283073902130127,0.292983174324036,0.508531212806702,0.341628015041351 ,0.00316119496710598,0.00137431977782398,0.001358114881441,0.00221375562250614,0.00133413984440267,0.00170696689747274 ,0.00347282318398356,0.0293117240071297,0.00315881427377462,0.0017423335229978,0.00493387132883072,0.00811068899929523 ,0.00765371881425381,0.00381668144837022,0.0124431811273098,0.00749050639569759,0.00156867934856564,0.00560529157519341 ,0.00357585120946169,0.573042452335358,0.473697155714035,0.297389835119247,0.473060458898544,0.484047085046768,0.100287444889545 ,0.080564945936203,0.121525146067142,0.0695379748940468,0.0116193136200309,0.011608568020165,0.390105187892914,0.00705760065466166 ,0.0181731842458248,0.0144127681851387,0.00774019164964557,0.0163207482546568,0.0230593774467707,0.0117224948480725 ,0.0103925261646509,0.023034455254674,0.0102231930941343,0.00876631308346987,0.0257692635059357,0.0157899931073189 ,0.0079519534483552,0.268854886293411,0.00414057867601514,0.619400978088379,0.560737490653992,0.0276894252747297,0.00791016221046448 Transform: -0.482154341627574,0.614915306728794,0.624024315663636,0,-0.795962863734002,-0.605054025618336,-0.0187812526913695 ,0,0.366019549322665,-0.505755636317744,0.781179185458219,0,16.3612037448649,43.8516961637896,10.9593100868548,1 TransformLink: -0.482154341588848,-0.795962863670071,0.366019549293266,0,0.614915323925831,-0.605054042539588,-0.505755650461966 ,0,0.62402431454957,-0.0187812526578394,0.781179184063586,0,-25.9153304969333,39.7613861936677,7.62853778503809,1 } Deformer: "SubDeformer::Cluster_R_Middle1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6952,6953,7003,7006,7007,7008,7009,7010,7011,7012,7013,7014 ,7016,7018,7019,7021,7023,7024,7026,7027,7028,7029,7030,7031,7056,7059,7104,7105,7106,7109,7110,7111,7112,7113,7114 ,7115,7116,7117,7118,7120,7122,7123,7128,7129,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147 ,7148,7149,7150,7151,7152,7163,7164 Weights: 0.00500072818249464,0.00594224268570542,0.00633213529363275,0.00784198846668005,0.00608585309237242,0.00622750772163272 ,0.0074488609097898,0.00871003977954388,0.00458542117848992,0.00190111703705043,0.0126460809260607,0.00359231326729059 ,0.00814132858067751,0.780165672302246,0.840406358242035,0.831347942352295,0.338731288909912,0.319924503564835,0.591757655143738 ,0.483411818742752,0.406764596700668,0.0154762221500278,0.00170462974347174,0.00772825255990028,0.00779491337016225 ,0.0104415100067854,0.00672159111127257,0.0107284439727664,0.0477143339812756,0.403345257043839,0.414985597133636 ,0.0198577605187893,0.536106884479523,0.687484502792358,0.474653422832489,0.00896497163921595,0.0292559992522001,0.00563854072242975 ,0.594972848892212,0.157949775457382,0.00806060433387756,0.012730622664094,0.0161999184638262,0.00852251797914505 ,0.0236726757138968,0.0721689537167549,0.014659053646028,0.0109589444473386,0.0114774499088526,0.0247667580842972 ,0.00337542127817869,0.0307328347116709,0.0237923245877028,0.428632140159607,0.56472510099411,0.461676090955734,0.184774100780487 ,0.019334252923727,0.050190407782793,0.00608722772449255,0.0115801775828004,0.0143293524160981,0.00884373113512993 ,0.0217493902891874,0.0264030154794455,0.0144056649878621,0.0137261711061001,0.0345770604908466,0.0144937243312597 ,0.0130718080326915,0.46775695681572,0.0246061757206917,0.0115793980658054,0.0221886523067951,0.57551372051239,0.565304398536682 Transform: -0.595926373558608,0.696185103154453,0.400247416304471,0,-0.772654477421632,-0.632889052852795,-0.0495624802253882 ,0,0.218807554470381,-0.338788561157854,0.915065841994784,0,13.4799143483701,45.7845417929185,6.55023107646816,1 TransformLink: -0.595926415228335,-0.772654531448946,0.218807569770343,0,0.696185144753957,-0.632889090670137,-0.338788581401659 ,0,0.400247444766019,-0.0495624837497705,0.915065907065011,0,-26.4631940713707,39.7164996481656,6.56787952339484,1 } Deformer: "SubDeformer::Cluster_R_Ring1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6977,6980,6981,6982,6983,6984,6985,6986,6989,6990,6994,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160 ,7161,7162 Weights: 0.676510512828827,0.711042284965515,0.829476058483124,0.284224897623062,0.288607120513916,0.649124681949615,0.49312686920166 ,0.10552641004324,0.0175852011889219,0.433233708143234,0.0090728122740984,0.0159076135605574,0.0128143411129713,0.0188714507967234 ,0.0214142464101315,0.0388879030942917,0.434706896543503,0.407617390155792,0.474976152181625,0.521292865276337,0.564831256866455 ,0.709270298480988,0.603561341762543,0.563409507274628,0.0152496118098497 Transform: -0.631144692091481,0.754157801208302,0.181390099390447,0,-0.773772857679433,-0.628472225444924,-0.0793613346788445 ,0,0.0541476720279378,-0.190443212726648,0.980203759768997,0,13.4304721353298,46.4283095780335,2.63824609290169,1 TransformLink: -0.631144674405108,-0.773772835996235,0.0541476705105744,0,0.75415784302433,-0.628472260292024,-0.190443223286214 ,0,0.181390099342531,-0.0793613346578803,0.980203759510066,0,-27.0162545645575,39.7804139060557,5.52870940901063,1 } Deformer: "SubDeformer::Cluster_R_Pinky1", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973 ,6974,6975,6976,6978,6979,7119,7158 Weights: 0.53295224905014,0.508521616458893,0.50278514623642,0.849367201328278,0.616192400455475,0.518803417682648,0.696697235107422 ,0.526841044425964,0.527325034141541,0.436812698841095,0.00324418325908482,0.0118504920974374,0.478200852870941,0.0372413694858551 ,0.0150805469602346,0.0169007889926434,0.00679425150156021,0.0106759835034609,0.0182724725455046,0.0236268937587738 ,0.047363169491291,0.0316543094813824,0.0231564771384001,0.459268122911453,0.478319853544235,0.0776866674423218,0.499195128679276 ,0.556424200534821,0.571000456809998,0.0213689096271992 Transform: -0.54066753815205,0.839021766035349,-0.0609999351852652,0,-0.833617247257869,-0.544097469756582,-0.0950797010971079 ,0,-0.112963852852558,-0.000555909862120531,0.993598931414121,0,19.0716507875639,44.3369412603016,-2.32465685100485 ,1 TransformLink: -0.540667573950472,-0.833617302452938,-0.112963860332067,0,0.839021858736889,-0.544097529872631,-0.000555909923541703 ,0,-0.0609999365174668,-0.095079703173591,0.99359895311372,0,-27.0300436247199,39.8010506213175,4.48883125500148,1 } Deformer: "SubDeformer::Cluster_L_Thumb2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6358,6359,6360,6361,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381 ,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6459,6468,6481,6482 Weights: 0.472210496664047,0.387133657932281,0.427147477865219,0.443163722753525,0.685069382190704,0.724653661251068,0.673102736473084 ,0.536649942398071,0.617036104202271,0.495746076107025,0.556665480136871,0.49608501791954,0.491237044334412,0.484662413597107 ,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321 ,0.47708922624588,0.488475769758224,0.490408599376678,0.495934039354324,0.514282166957855,0.548796355724335,0.577970862388611 ,0.592904388904572,0.534782707691193,0.59475177526474,0.509904384613037,0.484549164772034,0.478367120027542,0.422609061002731 ,0.247988402843475,0.463127940893173,0.369489639997482,0.365565955638886 Transform: -0.135155843776122,0.775106471512664,0.617205682872185,0,-0.701497726450692,-0.514774994311568,0.492856609979176,0 ,0.699738398946368,-0.366355940099343,0.613310269759096,0,27.7480724005536,3.49990679714409,-36.6074357556818,1 TransformLink: -0.135155845224675,-0.701497733969098,0.699738406445918,0,0.775106462370004,-0.514774988239612,-0.366355935778043 ,0,0.617205695239839,0.492856619855105,0.613310282048693,0,23.6318316390265,39.3090914394466,4.31753641469087,1 } Deformer: "SubDeformer::Cluster_L_Index2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351 ,6352,6357,6418,6421,6422,6423,6424,6478,6479,6480 Weights: 0.0128679797053337,0.0311662908643484,0.00870265159755945,0.0184976477175951,0.02268429659307,0.497807532548904,0.465071231126785 ,0.433350116014481,0.552651107311249,0.704526364803314,0.617996513843536,0.475178509950638,0.481539070606232,0.497695684432983 ,0.515092432498932,0.473771840333939,0.477837771177292,0.502260267734528,0.480913937091827,0.475129336118698,0.476394355297089 ,0.0324806794524193,0.445389032363892,0.0190046336501837,0.0207288712263107,0.0156876035034657,0.476336061954498,0.491859197616577 ,0.525479137897491,0.615624308586121,0.0330850556492805,0.0259174816310406,0.472873747348785 Transform: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668777 ,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,23.6325310830361,38.0490136421109,-9.07690618566701,1 TransformLink: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140151,-0.462697104611198 ,0,0.512996245923281,-0.0170845553337047,-0.858220818641226,0,26.5589805331897,36.9107329270075,4.56426544744836,1 } Deformer: "SubDeformer::Cluster_L_Middle2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324 ,6325,6326,6327,6328,6402,6426,6475,6476,6477 Weights: 0.035529550164938,0.0237998683005571,0.02204336412251,0.631926834583282,0.574653387069702,0.0330993868410587,0.490843802690506 ,0.558352828025818,0.574839949607849,0.651658654212952,0.537214756011963,0.484952598810196,0.487971544265747,0.497786968946457 ,0.484419077634811,0.48267862200737,0.523305237293243,0.48245307803154,0.488846242427826,0.868825256824493,0.770056843757629 ,0.526960432529449,0.512958109378815,0.527758955955505,0.0363789610564709,0.0384134836494923,0.478188276290894,0.0621519312262535 ,0.0342778228223324,0.0404716730117798,0.0176376178860664,0.483157634735107 Transform: 0.499759814432716,-0.821150509243367,0.275593784113431,0,-0.85807227136564,-0.512751602155499,0.0282438364463708,0 ,0.118118717124342,-0.250594541726914,-0.960859110891337,0,17.6554166237736,41.9557259278084,-5.43133409867866,1 TransformLink: 0.499759851243271,-0.858072334568235,0.118118725824553,0,-0.821150518533048,-0.512751607956261,-0.250594544561892 ,0,0.275593817426644,0.028243839860428,-0.960859227038021,0,27.1253398134896,36.8158922231038,3.20969323129932,1 } Deformer: "SubDeformer::Cluster_L_Ring2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6274,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298 ,6299,6301,6302,6430,6471,6472,6473,6474 Weights: 0.0352816879749298,0.0397219471633434,0.0205946918576956,0.6727254986763,0.621281743049622,0.00786225218325853,0.495609492063522 ,0.806967973709106,0.611252129077911,0.581453204154968,0.644257962703705,0.541119575500488,0.486171543598175,0.47906419634819 ,0.498831510543823,0.507536768913269,0.48268136382103,0.435824930667877,0.465312838554382,0.446213185787201,0.468680292367935 ,0.510018289089203,0.497348576784134,0.525787651538849,0.478186815977097,0.0253856051713228,0.0158547200262547,0.0227557364851236 ,0.0358967743813992,0.008476871997118,0.470450043678284 Transform: 0.387236956053206,-0.920497931608774,0.0522593739742223,0,-0.920820074405675,-0.38328532604609,0.0719910237843163 ,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,23.4655692344814,39.5994352902992,-2.25142353466758 ,1 TransformLink: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.383285348483891,-0.0759990715551009 ,0,0.0522593771475496,0.0719910281558015,-0.996035295603456,0,27.4821224471454,36.9475336992182,1.85200853561197,1 } Deformer: "SubDeformer::Cluster_L_Pinky2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270 ,6271,6272,6273,6275,6276,6416,6470 Weights: 0.00755235506221652,0.0340460389852524,0.00846235267817974,0.0141114005818963,0.0211576595902443,0.452955424785614 ,0.029446117579937,0.437771379947662,0.390317171812058,0.51088809967041,0.677973389625549,0.69030100107193,0.484176695346832 ,0.678302764892578,0.488589286804199,0.48065397143364,0.499816417694092,0.509559392929077,0.486769676208496,0.441025704145432 ,0.501901745796204,0.48899382352829,0.4646817445755,0.466712713241577,0.473297029733658,0.549367606639862,0.391996681690216 ,0.0391606763005257,0.0295384153723717,0.472831279039383 Transform: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0 ,-0.181250153437913,0.114830509928814,-0.97670992775668,0,19.6083352155855,41.5176353883872,1.91200119143013,1 TransformLink: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431 ,0,-0.188256764556457,0.102942020272518,-0.976709979481947,0,27.0676304296537,37.1318239873771,0.653993257848812,1 } Deformer: "SubDeformer::Cluster_R_Thumb2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 7061,7062,7063,7064,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084 ,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7153,7157,7169,7170 Weights: 0.462549269199371,0.343993365764618,0.403216421604156,0.432211607694626,0.690147161483765,0.665228009223938,0.63617742061615 ,0.552315056324005,0.596552550792694,0.496286422014236,0.546528279781342,0.494744300842285,0.488472163677216,0.483908146619797 ,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278 ,0.477780610322952,0.488146930932999,0.492865741252899,0.501138925552368,0.51694792509079,0.568934202194214,0.616943299770355 ,0.594912886619568,0.543474555015564,0.624541223049164,0.503936529159546,0.487898200750351,0.481148064136505,0.41353514790535 ,0.246037870645523,0.470356494188309,0.358776807785034,0.347928255796433 Transform: 0.183942706555208,-0.848161170706559,0.496777292207143,0,-0.711563310515749,-0.463571214563958,-0.527995586438497 ,0,0.678117009277356,-0.256367565452164,-0.688790932416489,0,28.2763608448924,0.812496319989121,38.4516975354302,1 TransformLink: 0.183942717143272,-0.711563351474578,0.678117048310957,0,-0.848161195233266,-0.463571227969282,-0.256367572865675 ,0,0.496777309132162,-0.527995604427112,-0.688790955883342,0,-23.6140336280634,40.799399288542,7.51879685717006,1 } Deformer: "SubDeformer::Cluster_R_Index2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054 ,7055,7057,7060,7121,7124,7125,7126,7127,7166,7167,7168 Weights: 0.0196526702493429,0.0388948395848274,0.0153781063854694,0.0233097579330206,0.0186757519841194,0.504974246025085,0.478513270616531 ,0.458382576704025,0.606969714164734,0.609241485595703,0.638486862182617,0.468806743621826,0.480103701353073,0.499032914638519 ,0.494927585124969,0.467299968004227,0.476862788200378,0.501342952251434,0.476703554391861,0.472311437129974,0.482087790966034 ,0.0294203441590071,0.457078576087952,0.0218525212258101,0.0127347502857447,0.0168898552656174,0.0218900591135025 ,0.47575369477272,0.488809376955032,0.514865398406982,0.566685616970062,0.0377235636115074,0.0243574362248182,0.468955308198929 Transform: -0.364861736148864,0.690991750298911,0.62402424274074,0,-0.891041856361616,-0.453532359830624,-0.0187812728650537 ,0,0.270037487465404,-0.562884314957988,0.781179199772702,0,22.4634473604217,40.4969438613113,10.9593087714919,1 TransformLink: -0.364861764998285,-0.891041926815814,0.270037508817122,0,0.690991783176016,-0.453532381409508,-0.562884341739794 ,0,0.624024283991176,-0.0187812741065691,0.781179251411694,0,-26.6258772092054,38.5883785902394,8.16793760109114,1 } Deformer: "SubDeformer::Cluster_R_Middle2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027 ,7028,7029,7030,7031,7105,7129,7163,7164,7165 Weights: 0.0448785312473774,0.01941136457026,0.0281076356768608,0.655481696128845,0.679150938987732,0.0478179343044758,0.489845812320709 ,0.558489799499512,0.535889983177185,0.585264027118683,0.52188766002655,0.481962472200394,0.487495481967926,0.491933614015579 ,0.480631649494171,0.482351124286652,0.514230608940125,0.48048734664917,0.487918704748154,0.951218128204346,0.80142742395401 ,0.555743455886841,0.518873155117035,0.50983989238739,0.0447485186159611,0.0386889614164829,0.476235747337341,0.0652661770582199 ,0.0468938462436199,0.0375622734427452,0.0262309741228819,0.480987906455994 Transform: -0.532122228623454,0.74608839556489,0.400247370639833,0,-0.82552298459893,-0.562187946808888,-0.0495624079488831,0 ,0.188036317084237,-0.356786672901474,0.915065869188404,0,15.9470803705496,44.5503810501042,6.55022768199521,1 TransformLink: -0.532122270746827,-0.825523049948226,0.188036331969396,0,0.746088461598279,-0.562187996565961,-0.356786704479278 ,0,0.400247396680201,-0.0495624111734473,0.915065928723215,0,-27.3744402201115,38.5350169717286,6.90246296248997,1 } Deformer: "SubDeformer::Cluster_R_Ring2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6977,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001 ,7002,7004,7005,7133,7159,7160,7161,7162 Weights: 0.0382037088274956,0.0364896692335606,0.0195562429726124,0.712645888328552,0.707021296024323,0.0143969738855958,0.49312686920166 ,0.88950514793396,0.551682949066162,0.570190012454987,0.586169481277466,0.540175020694733,0.484207719564438,0.478153556585312 ,0.499409109354019,0.496039986610413,0.479123532772064,0.434379041194916,0.46566715836525,0.442066639661789,0.463463187217712 ,0.490535736083984,0.496567964553833,0.541257619857788,0.474976152181625,0.0333678238093853,0.0247717965394259,0.0228563323616982 ,0.0331150405108929,0.0127192800864577,0.467338800430298 Transform: -0.446935098472743,0.875983214247907,0.181390098903514,0,-0.894507223525503,-0.439952872930471,-0.0793613109964566 ,0,0.0102839187608737,-0.197724114126782,0.980203752580189,0,22.0845507828728,42.5736111092596,2.63824563864957,1 TransformLink: -0.446935136832639,-0.894507300299969,0.0102839196435299,0,0.875983260367471,-0.439952896093511,-0.197724124536742 ,0,0.181390102125802,-0.0793613124062637,0.980203769992933,0,-27.901960584903,38.6945500401361,5.60469591815982,1 } Deformer: "SubDeformer::Cluster_R_Pinky2", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973 ,6974,6975,6976,6978,6979,7119,7158 Weights: 0.00631227903068066,0.0288749616593122,0.0153481028974056,0.0111556136980653,0.0370478443801403,0.474144101142883 ,0.0249618031084538,0.470720201730728,0.42764550447464,0.556730091571808,0.641176640987396,0.702353775501251,0.478462547063828 ,0.590432405471802,0.486605674028397,0.479619711637497,0.496470123529434,0.494648188352585,0.482276678085327,0.43053936958313 ,0.488811641931534,0.479370653629303,0.454167634248734,0.459241479635239,0.477396637201309,0.509645402431488,0.413587629795074 ,0.0568801686167717,0.0476182997226715,0.466875940561295 Transform: -0.54066747996728,0.839021802135076,-0.0609999543681701,0,-0.833617284990114,-0.544097414120462,-0.0950796886571807 ,0,-0.112963852891107,-0.000555879311200584,0.99359893142683,0,17.9398612556826,44.3369390457035,-2.32465801551563 ,1 TransformLink: -0.540667515765707,-0.8336173401852,-0.112963860370618,0,0.839021894836614,-0.544097474236501,-0.000555879372618377 ,0,-0.0609999557003723,-0.0950796907336637,0.993598953126431,0,-27.6419664270552,38.8575682082219,4.36097974240904 ,1 } Deformer: "SubDeformer::Cluster_L_Thumb3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6079,6091,6092,6094,6096,6097,6100,6101,6103,6104,6107,6108,6109,6116,6117,6118,6122,6123,6124,6126,6127,6184,6224 ,6350,6354,6355,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376 ,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399 ,6400,6404,6405,6446,6459,6464,6465,6466,6468,6481,6482,6483,6566,6567,6570,6572,6573,6580,6582,6587,6588,6589,6605 ,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6640,6641,6642,6643,6649,6663,6669,6682,6683,6689,6855,6858,6859 ,6862,6863,6864,6866,6867,6868,6869,6870,6903,6904,6911,9314,9316,9329,9352,9353,9428,9429,9430,9431,9432,9433,9434 ,9435,9448,9449,9450,9455,9457,9459,9461,9462,9463,9475,9476,9477,9478,9479,9480,9481,9486,9487,9488,9489,9490,9491 ,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9506,9507,9508,9509,9510,9513,9514,9515,9516,9517,9518,9519 ,9520,9522,9523,9531,9538,9540,9542,9544,9546,9547,9548,9549,9550,9551,9556,9557,9558,9559,9560,9561,9562,9567,9568 ,9569,9570,9571,9572,9573,9574,9577,9578,9579,9580,9581,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597 ,9598,9599,9600,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621 ,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9635,9636,9637,9640,9641,9642,9649,9650,9651,9652,9662,9663,9664 ,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9690,9691,9692 ,9693,9694,9695,9697,9698,9701,9702,9703,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724 ,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747 ,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770 ,9771,9772,9773,9774,9775,9776,9777,9778,9779,9799,9800,9801,9802,9803,9804,9805,9810,9811,9813,9849,9851,9852,9853 ,9854,9855,9856,9857,9858 Weights: 0.00149820931255817,0.00138663349207491,0.00258206482976675,0.00212346576154232,0.00344013841822743,0.00489160418510437 ,0.00107892986852676,0.00209578522481024,0.00151363876648247,0.00168884394224733,0.0021959962323308,0.00271111493930221 ,0.00310902716591954,0.00213803281076252,0.00564004061743617,0.00696052052080631,0.00111033720895648,0.00341050652787089 ,0.0053539639338851,0.00688229827210307,0.00649200333282351,0.0014114435762167,0.00588079309090972,0.00492632342502475 ,0.00596584053710103,0.0446317344903946,0.00557761080563068,0.0259243100881577,0.05253741517663,0.0559712648391724 ,0.0270659644156694,0.0530976578593254,0.0325066484510899,0.035634271800518,0.323588341474533,0.455188989639282,0.363215416669846 ,0.495746076107025,0.439982146024704,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016 ,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224 ,0.490052223205566,0.491328775882721,0.458046555519104,0.415151000022888,0.393014430999756,0.351960003376007,0.0252938233315945 ,0.0432725250720978,0.0325434282422066,0.00927298329770565,0.0129866236820817,0.0139118302613497,0.0106906080618501 ,0.00391026306897402,0.00286733661778271,0.00310411211103201,0.00216891011223197,0.00204042112454772,0.00304773822426796 ,0.00282205501571298,0.00232247146777809,0.00350804161280394,0.0190506651997566,0.00137466262094676,0.00171561446040869 ,0.00999070610851049,0.0263785943388939,0.0174223799258471,0.0177107490599155,0.0146211693063378,0.00217383401468396 ,0.00175195629708469,0.00127440562937409,0.00187887821812183,0.00171487790066749,0.00149286584928632,0.00251029059290886 ,0.00156333390623331,0.00117121625225991,0.00126078014727682,0.00140605447813869,0.00230707740411162,0.00234857969917357 ,0.00221398449502885,0.00196380750276148,0.00137024174910039,0.00224497076123953,0.00133721902966499,0.0020017025526613 ,0.00232847104780376,0.00133163447026163,0.00192440755199641,0.00171626394148916,0.00157908024266362,0.0012935638660565 ,0.00231205811724067,0.00100099062547088,0.00109254475682974,0.0019734192173928,0.00168480223510414,0.00182580389082432 ,0.00142278173007071,0.0010410676477477,0.00153141666669399,0.00154780084267259,0.00201118993572891,0.00259579555131495 ,0.00223182025365531,0.00237108976580203,0.00265182740986347,0.00186769140418619,0.00367331691086292,0.00130162853747606 ,0.00129232939798385,0.0017205880722031,0.00136861728969961,0.00145484495442361,0.00100917939562351,0.0021941545419395 ,0.00188804056961089,0.00195067189633846,0.00165543414186686,0.00101901881862432,0.00102479092311114,0.00212220335379243 ,0.00114350859075785,0.00128554948605597,0.00123686867300421,0.00305265444330871,0.00291923386976123,0.00195410684682429 ,0.00105387123767287,0.00137196411378682,0.00153346301522106,0.00194630993064493,0.00169592432212085,0.00111660454422235 ,0.00186238554306328,0.00155351380817592,0.00250041089020669,0.00318694044835866,0.0032063857652247,0.00272415089420974 ,0.00245766364969313,0.00402964977547526,0.00341994944028556,0.0052446280606091,0.00654846709221601,0.00386982690542936 ,0.00455573340877891,0.00550030590966344,0.00639821263030171,0.00862144120037556,0.00814477447420359,0.0100691318511963 ,0.0101043749600649,0.00709112267941237,0.00818463880568743,0.00296359532512724,0.00321070617064834,0.00207592872902751 ,0.00333278137259185,0.00632657762616873,0.00672197481617332,0.00220432667993009,0.00154417741578072,0.00266806920990348 ,0.00424164813011885,0.00453092344105244,0.0031485699582845,0.00186956557445228,0.00134828640148044,0.0010057658655569 ,0.00159944279585034,0.00834708474576473,0.0086600948125124,0.00148575787898153,0.00140404503326863,0.00301717966794968 ,0.00333177810534835,0.0031098450999707,0.00239596702158451,0.00381142972037196,0.00410086335614324,0.00282490067183971 ,0.00170151132624596,0.00125974882394075,0.00221156352199614,0.00152939255349338,0.0064187771640718,0.0073395143263042 ,0.00633658794686198,0.00388056435622275,0.00348237995058298,0.00124342960771173,0.00193079898599535,0.00246216403320432 ,0.00223845848813653,0.00386203173547983,0.00439270539209247,0.005020497366786,0.00632684724405408,0.00307083316147327 ,0.00286118732765317,0.00213557784445584,0.00129702757112682,0.00121187209151685,0.00251098163425922,0.00800847075879574 ,0.00886239018291235,0.00887640286237001,0.00767807802185416,0.00670932326465845,0.00401021400466561,0.00502444198355079 ,0.00238260510377586,0.00547388335689902,0.00776300393044949,0.00480005796998739,0.0028238866943866,0.00190474814735353 ,0.00193470239173621,0.00288113416172564,0.00389803969301283,0.00367174437269568,0.00390818109735847,0.00355087663047016 ,0.00268725026398897,0.00454041082412004,0.0035445315297693,0.00171094539109617,0.00341316545382142,0.00697055878117681 ,0.00964019820094109,0.00920553877949715,0.00569045403972268,0.00306147919036448,0.00185962207615376,0.00222978158853948 ,0.00188676745165139,0.00173016346525401,0.00136094342451543,0.00119532260578126,0.00134551979135722,0.00201214803382754 ,0.00433872221037745,0.00494116824120283,0.0048528490588069,0.00373621983453631,0.00260420818813145,0.00111460161861032 ,0.00214701052755117,0.00107349210884422,0.00131016981322318,0.00134573271498084,0.00137586984783411,0.00183277728501707 ,0.00205387198366225,0.00181044160854071,0.00195832783356309,0.00171237147878855,0.00127034331671894,0.00683472445234656 ,0.00616391934454441,0.00666100112721324,0.00529539445415139,0.00470123440027237,0.00376344588585198,0.00785322301089764 ,0.00749101815745234,0.00359520222991705,0.00375024485401809,0.00510285887867212,0.0165347177535295,0.0120284659788013 ,0.0136821400374174,0.0208208095282316,0.0121704069897532,0.00668172631412745,0.0071162823587656,0.0137389861047268 ,0.0208119451999664,0.0127062760293484,0.00445901975035667,0.0161651168018579,0.0138529241085052,0.0140357566997409 ,0.0165641214698553,0.0206819456070662,0.01622024923563,0.0097760334610939,0.00927293580025434,0.00617081159725785 ,0.00917889270931482,0.0165512580424547,0.0100768441334367,0.0127015858888626,0.0150537947192788,0.00986745487898588 ,0.0064253699965775,0.00897261500358582,0.00977715570479631,0.0120841050520539,0.0137787126004696,0.0152517901733518 ,0.0186050273478031,0.0209942348301411,0.0180246215313673,0.0144900577142835,0.0112779578194022,0.010276542045176 ,0.00792760029435158,0.0171343702822924,0.0179134495556355,0.0175734963268042,0.0137078361585736,0.0129081830382347 ,0.0119716376066208,0.0115421507507563,0.00434318883344531,0.00599595671519637,0.00866668857634068,0.00924254860728979 ,0.0130253322422504,0.0132820680737495,0.00989582482725382,0.00758609594777226,0.00430233962833881,0.00572281144559383 ,0.00791021436452866,0.00848311930894852,0.011293787509203,0.0113278347998858,0.00868441443890333,0.00685539748519659 ,0.00510429078713059,0.00733340112492442,0.0107003068551421,0.0117350667715073,0.0164118018001318,0.0164599809795618 ,0.012408996000886,0.00942008569836617,0.00473457621410489,0.00436365557834506,0.00367337069474161,0.00328112719580531 ,0.00449102418497205,0.00377309625037014,0.00327134947292507,0.00724644213914871,0.0145453428849578,0.0169037282466888 ,0.019414534792304,0.0191765520721674,0.0144556574523449,0.0133972251787782,0.0110455770045519,0.00914285890758038 ,0.00429244339466095,0.0043087056837976,0.0039505329914391,0.00353592447936535,0.00316647044382989,0.00297523243352771 ,0.00270455866120756,0.00102158123627305,0.00184092985000461,0.00203118450008333,0.00171120732557029,0.00121729238890111 ,0.001143594738096,0.00112271460238844,0.00306950928643346,0.00121603487059474,0.00207205256447196,0.00437572225928307 ,0.00116132642142475,0.00153699307702482,0.0022282893769443,0.00355688342824578,0.00518744718283415,0.00414137402549386 ,0.00526373228058219,0.00548378052189946 Transform: -0.150316349336557,0.772309497534129,0.617205824895878,0,-0.691277111630371,-0.528420530153593,0.492856640794005,0 ,0.706782058456871,-0.352575833811562,0.613310194135305,0,26.2919663830623,4.01581780486913,-36.6074352156097,1 TransformLink: -0.15031636014454,-0.691277161334284,0.706782109275615,0,0.772309547535657,-0.528420564365051,-0.352575856638331,0 ,0.617205767563365,0.492856595012341,0.613310137164658,0,23.4449784066569,38.3392924705161,5.2849000587628,1 } Deformer: "SubDeformer::Cluster_L_Index3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6303,6312,6314,6317,6318,6319,6320,6323,6324,6325,6326,6327,6328,6329,6330,6332,6333,6334,6335,6336,6337,6338,6339 ,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6351,6352,6418,6421,6422,6423,6424,6426,6427,6455,6475,6477,6478 ,6479,6480,9690,9691,9695,9697,9701,9709,9735,9736,9737,9738,9739,9743,9744,9745,9746,9747 Weights: 0.00129172543529421,0.00132386665791273,0.0102978684008121,0.023387661203742,0.0202862359583378,0.0210154503583908 ,0.0131963603198528,0.0310754030942917,0.0289298985153437,0.0213378369808197,0.00458353338763118,0.00461415899917483 ,0.0256056245416403,0.00156837981194258,0.00284981518052518,0.00149840523954481,0.0021868369076401,0.00197000638581812 ,0.0135596552863717,0.00847333390265703,0.0207607746124268,0.29146534204483,0.369206309318542,0.475178509950638,0.481539070606232 ,0.497695684432983,0.45072677731514,0.473771840333939,0.477837771177292,0.45277014374733,0.457344979047775,0.475129336118698 ,0.0342537313699722,0.0230790339410305,0.00212693749926984,0.00162085669580847,0.0367642305791378,0.0134540442377329 ,0.364172965288162,0.308993935585022,0.00256865425035357,0.00292015401646495,0.00128136458806694,0.00546527421101928 ,0.0140916919335723,0.00372047512792051,0.00346140190958977,0.472873747348785,0.00581017322838306,0.00588010810315609 ,0.00412550196051598,0.00392747716978192,0.00405125552788377,0.00431024795398116,0.00382395950146019,0.00403719209134579 ,0.00546633033081889,0.00556815648451447,0.00421888194978237,0.0034736858215183,0.0036936835385859,0.00476250844076276 ,0.00477577652782202,0.00371923088096082 Transform: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668776 ,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,22.5696856853696,38.049012840111,-9.07690578638614,1 TransformLink: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140152,-0.462697104611198 ,0,0.512996245923281,-0.0170845553337046,-0.858220818641226,0,26.9217265395714,35.9400181764268,4.80041908558635,1 } Deformer: "SubDeformer::Cluster_L_Middle3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6288,6289,6290,6292,6293,6294,6295,6296,6297,6298,6299,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316 ,6317,6318,6319,6320,6321,6322,6323,6324,6325,6328,6340,6341,6343,6344,6345,6346,6347,6348,6424,6474,6477,6480 Weights: 0.014571632258594,0.0314285829663277,0.00121804932132363,0.0216398369520903,0.113343708217144,0.0645012483000755,0.0907544791698456 ,0.0472875647246838,0.0558902733027935,0.017894497141242,0.0183007605373859,0.00250962004065514,0.00116259243804961 ,0.00177814660128206,0.0104236043989658,0.0174920316785574,0.404900193214417,0.344944804906845,0.459532350301743,0.484952598810196 ,0.487971544265747,0.491063833236694,0.484419077634811,0.48267862200737,0.447204828262329,0.48245307803154,0.487936288118362 ,0.00191004655789584,0.227206647396088,0.0147803528234363,0.0280758254230022,0.431229382753372,0.0180178489536047 ,0.0322740189731121,0.0178740713745356,0.00366789777763188,0.0290819946676493,0.0161577016115189,0.0019784311298281 ,0.00371509045362473,0.0188771914690733,0.00367660750634968,0.0454932413995266,0.483157634735107,0.0285708270967007 Transform: 0.444149185987956,-0.852513629457775,0.275593811819462,0,-0.890216396056314,-0.454661404019702,0.028243899034468,0 ,0.101223567194035,-0.25788265192211,-0.960859095070715,0,18.8757617638073,40.7927182930377,-5.43133705084128,1 TransformLink: 0.444149211847771,-0.890216447887616,0.101223573087601,0,-0.852513678154366,-0.454661429990501,-0.257882666652674 ,0,0.275593848328492,0.0282439027760518,-0.960859222359615,0,27.8895386829017,35.5037913764696,3.39031262789266,1 } Deformer: "SubDeformer::Cluster_L_Ring3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6262,6263,6264,6266,6267,6268,6269,6270,6273,6279,6280,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293 ,6294,6295,6296,6297,6298,6299,6300,6301,6305,6310,6311,6313,6314,6315,6316,6317,6319,6414,6470,6474,6477 Weights: 0.0092698922380805,0.0212964508682489,0.00166295794770122,0.0119648510590196,0.0952514484524727,0.0141067132353783 ,0.00670324685052037,0.0510993860661983,0.00714946305379272,0.00109227269422263,0.00494632869958878,0.00435620592907071 ,0.00662066554650664,0.387978374958038,0.416656672954559,0.337617635726929,0.0103567326441407,0.486171543598175,0.47906419634819 ,0.498831510543823,0.482970893383026,0.48268136382103,0.435824930667877,0.455651253461838,0.446213185787201,0.464510530233383 ,0.396390706300735,0.0377589128911495,0.031072786077857,0.00150687724817544,0.0224732290953398,0.00124005973339081 ,0.00769013585522771,0.0019029772374779,0.0234128329902887,0.0137590598315001,0.0054404535330832,0.0225245822221041 ,0.0112551087513566,0.0140783805400133,0.00170884584076703,0.0353902839124203,0.470450043678284,0.0195930507034063 Transform: 0.387236956053206,-0.920497931608773,0.0522593739742223,0,-0.920820074405675,-0.38328532604609,0.0719910237843162 ,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,22.0773077684876,39.5994348948192,-2.25142358930824 ,1 TransformLink: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.383285348483891,-0.0759990715551009 ,0,0.0522593771475496,0.0719910281558015,-0.996035295603456,0,28.0197082511753,35.6691944754238,1.78781893239835,1 } Deformer: "SubDeformer::Cluster_L_Pinky3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6237,6243,6244,6245,6247,6248,6249,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266 ,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6283,6286,6287,6288,6289,6291,6292,6302,6402 ,6411,6412,6414,6415,6416,6417,6428,6430,6470,6471,6472,6473,6476 Weights: 0.0028082043863833,0.00591129856184125,0.00213855970650911,0.00684588542208076,0.00461385771632195,0.00100696296431124 ,0.00220880098640919,0.00101241818629205,0.00189215911086649,0.00694409897550941,0.00265500461682677,0.00246238824911416 ,0.012714060023427,0.00751850241795182,0.315340012311935,0.282398045063019,0.0182183086872101,0.290860831737518,0.488589286804199 ,0.48065397143364,0.484326124191284,0.483070969581604,0.486769676208496,0.441025704145432,0.428589582443237,0.476955205202103 ,0.4646817445755,0.0394535250961781,0.0268322117626667,0.368200391530991,0.00765684433281422,0.026226406916976,0.00414335122331977 ,0.00356931705027819,0.00267733377404511,0.00140286923851818,0.00212792283855379,0.00176225416362286,0.00486125983297825 ,0.00576191581785679,0.0130852656438947,0.0104430476203561,0.00325614050962031,0.0129974083974957,0.00201679929159582 ,0.00505299167707562,0.00323858973570168,0.00118227885104716,0.00599130569025874,0.00718945031985641,0.00294233672320843 ,0.00191051140427589,0.0024373906198889,0.00133377616293728,0.472831279039383,0.00406493013724685,0.00552025018259883 ,0.00154034374281764,0.00117001007311046 Transform: 0.407760985670509,-0.893470954340694,-0.188256780336324,0,-0.896533461841144,-0.430848801096772,0.102941957451532 ,0,-0.173085860177758,0.126802791082548,-0.976709938167127,0,21.509000619089,40.1573955629144,1.91200401428515,1 TransformLink: 0.407760991938071,-0.896533475621468,-0.173085862838205,0,-0.893470969097868,-0.430848808212964,0.126802793176909 ,0,-0.188256786876179,0.102941961027635,-0.976709972097069,0,27.4688834342309,36.3884796586712,0.498307394296883,1 } Deformer: "SubDeformer::Cluster_R_Thumb3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804 ,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827 ,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850 ,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873 ,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896 ,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919 ,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942 ,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6722,6723 ,6728,6729,6741,6746,6747,6763,6764,6766,6767,6768,6769,6770,6771,6791,6797,6798,6801,6802,6809,6840,6846,6849,6850 ,6852,6853,6873,6879,6880,6881,6882,6907,6908,7053,7057,7058,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070 ,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093 ,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7107,7108,7153,7156,7157,7169,7170,7171,7175,7176,7177,7178,7179 ,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202 ,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225 ,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248 ,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271 ,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294 ,7295,7296,7297,7298,7299,7300,7301,7302,7303,7316,7322,7323,7336,7338,7339,7352,7354,7355,7356,7357,7362,7363,7364 ,7365,7366,7367,7368,7369,7370,7371,7372,7376,7377,7378,7379,7380,7383,7384,7385,7386,7387,7388,7390,7399,7409,7411 ,7413,7414,7415,7416,7417,7418,7424,7425,7427,7428,7429,7430,7431,7432,7437,7438,7439,7440,7441,7442,7443,7444,7445 ,7446,7449,7450,7451,7452,7453,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7474,7475 ,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7497,7498,7499,7500,7501 ,7502,7504,7509,7510,7513,7514,7515,7522,7523,7524,7525,7535,7536,7537,7540,7541,7542,7543,7544,7545,7546,7549,7550 ,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573 ,7574,7575,7576,7577,7578,7579,7580,7581,7582,7806,7808,7913,7914,7917,7933,7934,7935,7957,7958,7959,7967,7970 Weights: 0.0206349026411772,0.0207134280353785,0.0197373144328594,0.0196153838187456,0.0208342466503382,0.0199247840791941 ,0.020967910066247,0.0201352816075087,0.0210805311799049,0.0203174632042646,0.0211408846080303,0.0204198118299246 ,0.0211298149079084,0.0204070769250393,0.0210484024137259,0.0202776417136192,0.0209195241332054,0.0200689751654863 ,0.0207806546241045,0.0198448244482279,0.0206709150224924,0.0196701399981976,0.0206186510622501,0.0195889733731747 ,0.00788491498678923,0.00782912876456976,0.00798560492694378,0.00810904148966074,0.00822552479803562,0.00830235239118338 ,0.00831402372568846,0.00825399998575449,0.00813997536897659,0.00800746586173773,0.00789522379636765,0.0078317066654563 ,0.00756945041939616,0.00753615191206336,0.00763061735779047,0.00770501187071204,0.00777393067255616,0.00781835243105888 ,0.00782459136098623,0.00778975104913116,0.00772374542430043,0.0076460363343358,0.00757865281775594,0.00753908278420568 ,0.0208766013383865,0.00767658930271864,0.0181122086942196,0.0179667640477419,0.0192471258342266,0.0195576250553131 ,0.017364664003253,0.0171640403568745,0.0164985246956348,0.0164657682180405,0.0169501658529043,0.015617867000401,0.015304802916944 ,0.0159808788448572,0.0174158401787281,0.0186776164919138,0.0176764409989119,0.0164042636752129,0.0190876293927431 ,0.0152460727840662,0.0163333211094141,0.0142878238111734,0.0102278674021363,0.00993511267006397,0.0138036357238889 ,0.0146821737289429,0.0105258813127875,0.0151098612695932,0.010812477208674,0.0161618869751692,0.0113155674189329 ,0.010036863386631,0.013737072236836,0.00630041444674134,0.00632011285051703,0.00639667548239231,0.00648933136835694 ,0.00651344237849116,0.0065743844024837,0.0242732800543308,0.0226891804486513,0.0237810015678406,0.0253286696970463 ,0.0245126951485872,0.0229471866041422,0.0232219379395247,0.0217602085322142,0.0205131359398365,0.019203070551157 ,0.0137072140350938,0.0126667339354753,0.00796764250844717,0.00723331281915307,0.0209724307060242,0.0204414576292038 ,0.0208601392805576,0.0206289663910866,0.0196539610624313,0.017655873671174,0.0119224833324552,0.00687668472528458 ,0.00526865758001804,0.0059863431379199,0.00525120692327619,0.00509030371904373,0.00596990715712309,0.00598286464810371 ,0.00556904869154096,0.00575726106762886,0.00705313589423895,0.00537844654172659,0.00546752708032727,0.00539919128641486 ,0.00507829757407308,0.00518155843019485,0.00542729906737804,0.0054210158996284,0.00563446758314967,0.00527805602177978 ,0.0065749972127378,0.00604006601497531,0.0215511415153742,0.0223440397530794,0.0224162228405476,0.0238475557416677 ,0.0218440778553486,0.0207823850214481,0.0184687711298466,0.0122669553384185,0.00555890798568726,0.0136925457045436 ,0.0145726623013616,0.0157181173563004,0.0136122927069664,0.0103479130193591,0.0108167203143239,0.0125496638938785 ,0.0101373661309481,0.00664365477859974,0.00665161525830626,0.00682164169847965,0.017512883991003,0.0179883632808924 ,0.012053057551384,0.00690233474597335,0.00658051390200853,0.00692128064110875,0.00667546642944217,0.021394906565547 ,0.0230478588491678,0.0239932388067245,0.0223625525832176,0.0229776855558157,0.0193508043885231,0.0216651074588299 ,0.0237432606518269,0.0216814745217562,0.0233111679553986,0.020858034491539,0.0221959985792637,0.018921347334981,0.01983792334795 ,0.0134088853374124,0.0136114526540041,0.00840287376195192,0.00817271880805492,0.0186147596687078,0.0228341855108738 ,0.019296795129776,0.0251542255282402,0.0243113692849875,0.00689046317711473,0.00623401440680027,0.0241503212600946 ,0.00160878302995116,0.00129173509776592,0.00135680811945349,0.0012447964400053,0.0023350368719548,0.00148189126048237 ,0.0011633113026619,0.00110392994247377,0.00112566619645804,0.00116727291606367,0.00214046915061772,0.0021126929204911 ,0.00183219206519425,0.00118055264465511,0.00219332682900131,0.00100228341761976,0.00213657296262681,0.00122010568156838 ,0.00124321086332202,0.00112911232281476,0.00185839796904475,0.00145611027255654,0.00128630979452282,0.00131676276214421 ,0.00158617389388382,0.00108790420927107,0.00129958556499332,0.00112535338848829,0.00239369086921215,0.00157444574870169 ,0.00148654624354094,0.00162770645692945,0.00123939570039511,0.00106196757405996,0.00331193278543651,0.00375480088405311 ,0.030896969139576,0.00342011218890548,0.0314387418329716,0.0545489490032196,0.0613855123519897,0.0314983911812305 ,0.0380797535181046,0.0281153731048107,0.0474898740649223,0.357097029685974,0.441101938486099,0.374418169260025,0.496286422014236 ,0.446939200162888,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993 ,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.491288512945175 ,0.490701496601105,0.453511834144592,0.400647670030594,0.362474709749222,0.346060484647751,0.0186582077294588,0.0302668269723654 ,0.0325701758265495,0.006045778747648,0.00994227733463049,0.0142911607399583,0.0085002314299345,0.00303881824947894 ,0.00225531472824514,0.00293149356730282,0.00189879583194852,0.00170789589174092,0.00283215427771211,0.00307905371300876 ,0.00244881375692785,0.0215538665652275,0.00817420054227114,0.0198179297149181,0.0167206320911646,0.0204745102673769 ,0.0128827076405287,0.0194632522761822,0.0188274458050728,0.0182689521461725,0.0176447071135044,0.0172243285924196 ,0.0133353779092431,0.012190000154078,0.0174007099121809,0.0154236424714327,0.0162051524966955,0.0151703329756856 ,0.0145016135647893,0.0117002241313457,0.00993908103555441,0.00885243806988001,0.00738500291481614,0.00533117121085525 ,0.00415570707991719,0.018776623532176,0.0151461735367775,0.00989001058042049,0.00656149117276073,0.00867951009422541 ,0.00545969419181347,0.00419409060850739,0.0036546946503222,0.00388043047860265,0.0102285426110029,0.0109922336414456 ,0.011212820187211,0.011874170973897,0.0128773888573051,0.014671872369945,0.0134199876338243,0.0147367622703314,0.0129374144598842 ,0.00857102498412132,0.00913834292441607,0.00777323078364134,0.00717859389260411,0.00542860059067607,0.00449881935492158 ,0.0031835213303566,0.00312779331579804,0.0037035767454654,0.00317463185638189,0.00338264461606741,0.00893745757639408 ,0.0100510297343135,0.0108140856027603,0.0117486612871289,0.0122409416362643,0.00451468676328659,0.00393110932782292 ,0.00373097020201385,0.00271735526621342,0.00212495261803269,0.00191046798136085,0.00185692752711475,0.00193583639338613 ,0.0038805129006505,0.00357974087819457,0.00360461231321096,0.0035831171553582,0.0221672374755144,0.0216475501656532 ,0.0232979413121939,0.0227267239242792,0.0212558414787054,0.0213878713548183,0.0223234593868256,0.0210523474961519 ,0.0189590454101563,0.0212541595101357,0.0170140545815229,0.0229142792522907,0.0224664770066738,0.0243328101933002 ,0.0238737054169178,0.0234900992363691,0.0218856371939182,0.0175896864384413,0.0038775650318712,0.0221874229609966 ,0.0193830914795399,0.0190263278782368,0.0187140088528395,0.0205218344926834,0.0220660660415888,0.0231052581220865 ,0.0211554951965809,0.0121488925069571,0.0109862107783556,0.0107390657067299,0.0111830253154039,0.00352118560113013 ,0.00373788271099329,0.0161291547119617,0.0148201314732432,0.0186025146394968,0.0189929381012917,0.0184073783457279 ,0.0186326559633017,0.0197839718312025,0.0201774407178164,0.0187430661171675,0.018826674669981,0.0170398093760014 ,0.00637531839311123,0.0164432302117348,0.00738882645964623,0.0185393039137125,0.0195395369082689,0.0177061557769775 ,0.01780916005373,0.0182453524321318,0.0152524942532182,0.0192229803651571,0.00500145647674799,0.00770826498046517 ,0.0079919770359993,0.00751691404730082,0.00616343040019274,0.00610489910468459,0.00630897469818592,0.00628916407003999 ,0.00598625093698502,0.0048967176117003,0.00479170912876725,0.00100405083503574,0.00160079426132143,0.00141929858364165 ,0.00125143490731716,0.00160475785378367,0.00141920440364629,0.00139734172262251,0.00224228156730533,0.00232772389426827 ,0.00225778995081782,0.00207510311156511,0.00256772199645638,0.0027859196998179,0.00332566141150892,0.0031807953491807 ,0.00739510217681527,0.0069126570597291,0.00621898286044598,0.00728207407519221,0.00265317363664508,0.00284682074561715 ,0.00182450644206256,0.00242256047204137,0.0055518732406199,0.0061364620923996,0.00198462349362671,0.00135667133145034 ,0.00205559935420752,0.00380312139168382,0.00420815823599696,0.00297090061940253,0.0017306130612269,0.00121383473742753 ,0.0013610718306154,0.00124339619651437,0.0023764178622514,0.00226104166358709,0.00185194308869541,0.00342356716282666 ,0.00380428275093436,0.00267043663188815,0.00157270825002342,0.00113264902029186,0.0018668407574296,0.00228324695490301 ,0.00129903561901301,0.00562178948894143,0.00653486745432019,0.00579681154340506,0.00362190813757479,0.0032473006285727 ,0.0010425541549921,0.00166034791618586,0.00213556736707687,0.00193362182471901,0.0033060503192246,0.00376513623632491 ,0.00419513089582324,0.00159871904179454,0.00179069326259196,0.00211882498115301,0.00271622347645462,0.00255756848491728 ,0.00192118179984391,0.0011733747087419,0.00109545432496816,0.00220512063242495,0.00709376437589526,0.00795820541679859 ,0.00799622107297182,0.00710853468626738,0.00609957706183195,0.00381770473904908,0.00473736319690943,0.00222578062675893 ,0.00509891239926219,0.00686382222920656,0.00414189184084535,0.00239852466620505,0.00162839086260647,0.00162805255968124 ,0.00251073832623661,0.00347989099100232,0.00331477355211973,0.00349547853693366,0.00321043259464204,0.00244455621577799 ,0.00413611950352788,0.00327009102329612,0.00156419666018337,0.00257822382263839,0.00607397267594934,0.00823282450437546 ,0.00776788638904691,0.00473087746649981,0.00330061535350978,0.0025250562466681,0.00152857240755111,0.00183194293640554 ,0.00153524335473776,0.00137504853773862,0.00150840170681477,0.00229560048319399,0.00346118840388954,0.00357474712654948 ,0.00299402745440602,0.00216723675839603,0.00185670738574117,0.00111249752808362,0.00113845674786717,0.00119416764937341 ,0.00159454462118447,0.00178431125823408,0.00155328854452819,0.00169874343555421,0.00148680072743446,0.00110015727113932 ,0.00114206888247281,0.0010633486090228,0.00107124063652009,0.00571294734254479,0.00447713444009423,0.00330340163782239 ,0.00269269663840532,0.00229857652448118,0.00221802247688174,0.0020226901397109,0.00163530313875526,0.00180016760714352 ,0.00272176787257195,0.00381707167252898,0.00220523751340806,0.00238436763174832,0.00327288988046348,0.00446160836145282 ,0.00157232687342912,0.00185892870649695,0.00203555263578892,0.0046623470261693,0.00693457946181297,0.00711830705404282 ,0.00647621788084507,0.00254868599586189,0.00479469215497375,0.00661462964490056,0.00463264249265194,0.00530045060440898 ,0.00568296201527119,0.00735452771186829,0.00869803410023451,0.00973954610526562,0.0102844815701246,0.0102041307836771 ,0.00881630834192038,0.00401451764628291,0.00498052220791578,0.0047067110426724,0.00366361252963543,0.00462863780558109 ,0.00309047941118479,0.00190148048568517,0.00101162947248667,0.00110797781962901,0.00139670318458229,0.00118378805927932 ,0.00152170250657946,0.00218712538480759,0.00209142896346748,0.00139660085551441,0.00129944365471601,0.00151631084736437 ,0.0012562193442136,0.00226996839046478,0.00154895684681833 Transform: 0.200525319605825,-0.844394449148324,0.496777179549792,0,-0.702343995267135,-0.477423749021522,-0.527995666348737 ,0,0.683009852073652,-0.243031979744324,-0.68879092601797,0,26.872808589569,1.33926660969347,38.4516999417911,1 TransformLink: 0.200525329728245,-0.702344030721116,0.683009886551655,0,-0.844394478650866,-0.477423765702369,-0.243031988235689 ,0,0.496777214538215,-0.527995703535904,-0.688790974530079,0,-23.359737863823,39.8156867725917,8.45627455609007,1 } Deformer: "SubDeformer::Cluster_R_Index3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 7017,7020,7021,7022,7023,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043 ,7044,7045,7046,7047,7048,7049,7050,7051,7052,7054,7055,7121,7124,7125,7126,7127,7128,7129,7130,7149,7163,7165,7166 ,7167,7168 Weights: 0.0101615088060498,0.0229801908135414,0.0135756079107523,0.0224668979644775,0.0134341223165393,0.0261847041547298 ,0.031180327758193,0.0206251200288534,0.00532444892451167,0.00404853792861104,0.0273718051612377,0.00240944442339242 ,0.0034473619889468,0.00143961887806654,0.00180354132317007,0.00161263684276491,0.00291394721716642,0.00918020773679018 ,0.0127796493470669,0.0143848909065127,0.383575648069382,0.356072396039963,0.468806743621826,0.480103701353073,0.499032914638519 ,0.461361408233643,0.467299968004227,0.476862788200378,0.464165151119232,0.463425189256668,0.472311437129974,0.0294841714203358 ,0.024617824703455,0.00234879832714796,0.00223406916484237,0.0408354513347149,0.0222049206495285,0.380914241075516 ,0.347071617841721,0.00238839536905289,0.00339022045955062,0.00366555782966316,0.00173941173125058,0.00441070273518562 ,0.0152303511276841,0.00406680861487985,0.00302362628281116,0.468955308198929 Transform: -0.3648617444586,0.690991822556432,0.624024157870216,0,-0.891041868342784,-0.453532336509674,-0.018781267598003,0 ,0.270037436703439,-0.562884245045661,0.781179267695882,0,21.400601210705,40.4969467539201,10.9593068147554,1 TransformLink: -0.364861773308025,-0.891041938796993,0.270037458055156,0,0.690991855433542,-0.453532358088559,-0.562884271827465 ,0,0.624024199120653,-0.0187812688395182,0.781179319334886,0,-27.0136717272842,37.6413386384827,8.45494659509225,1 } Deformer: "SubDeformer::Cluster_R_Middle3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6991,6992,6995,6996,6997,6998,6999,7000,7001,7002,7008,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021 ,7022,7023,7025,7026,7027,7028,7031,7043,7044,7046,7047,7048,7049,7050,7051,7126,7127,7162,7165,7168 Weights: 0.016761826351285,0.0327525436878204,0.0260655898600817,0.115334317088127,0.0583750233054161,0.0969952940940857,0.0520107224583626 ,0.0599400214850903,0.0216762609779835,0.0182991288602352,0.00387279852293432,0.0026070331223309,0.0157421063631773 ,0.0266785137355328,0.437584847211838,0.410475611686707,0.476766288280487,0.481962472200394,0.487495481967926,0.49189567565918 ,0.480631649494171,0.482351124286652,0.465472191572189,0.48048734664917,0.487918704748154,0.197620660066605,0.0147266173735261 ,0.0349608920514584,0.449677228927612,0.0217390302568674,0.0425560437142849,0.0204605255275965,0.00591357192024589 ,0.038311630487442,0.0179284252226353,0.00165145879145712,0.00414461409673095,0.0224138833582401,0.00393291655927897 ,0.00567780341953039,0.0500728152692318,0.480987906455994,0.0343999676406384 Transform: -0.481422785176836,0.779765319558555,0.40024746206003,0,-0.86102053658501,-0.506149284513552,-0.0495624164792142,0 ,0.163937923853037,-0.368481771624397,0.915065812642581,0,17.3434308995453,43.4950490005919,6.55023114588821,1 TransformLink: -0.481422830726269,-0.861020618049782,0.163937939363893,0,0.779765422628502,-0.506149351416733,-0.368481820330585 ,0,0.400247499891431,-0.0495624211638551,0.915065899134627,0,-28.1881253078821,37.2726877484919,7.18999535488276,1 } Deformer: "SubDeformer::Cluster_R_Ring3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6964,6965,6966,6969,6970,6971,6972,6973,6976,6982,6983,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996 ,6997,6998,6999,7000,7001,7002,7003,7004,7008,7012,7013,7014,7016,7017,7018,7019,7020,7022,7117,7158,7162,7165 Weights: 0.00131166935898364,0.0117081198841333,0.0238597877323627,0.0171741582453251,0.115294389426708,0.0155567303299904 ,0.0101941684260964,0.0685082525014877,0.0103107020258904,0.00144403614103794,0.00316327856853604,0.00744051160290837 ,0.00404223706573248,0.447492778301239,0.429092288017273,0.389249831438065,0.0174639020115137,0.484207719564438,0.478153556585312 ,0.499409109354019,0.489902287721634,0.479123532772064,0.434379041194916,0.463143467903137,0.442066639661789,0.463111817836761 ,0.410636335611343,0.0470488779246807,0.0328258499503136,0.00182847154792398,0.0277167167514563,0.00191423017531633 ,0.00806708075106144,0.0110489251092076,0.00255572586320341,0.0283467769622803,0.0148475430905819,0.00837578997015953 ,0.0282952189445496,0.0123175773769617,0.0165584031492472,0.00247255084104836,0.0448792017996311,0.467338800430298 ,0.0227938573807478 Transform: -0.446935126929394,0.875983205249199,0.181390072245155,0,-0.894507209233465,-0.439952904404043,-0.0793612976075897 ,0,0.0102839251840173,-0.197724083962654,0.980203758597428,0,20.6962879889423,42.5736113822138,2.63824437762395,1 TransformLink: -0.446935165289291,-0.894507286007929,0.0102839260666741,0,0.875983251368767,-0.439952927567088,-0.197724094372613 ,0,0.181390075467443,-0.0793612990173966,0.980203776010172,0,-28.522422974648,37.4527398650693,5.61897255820232,1 } Deformer: "SubDeformer::Cluster_R_Pinky3", "Cluster" { Version: 100 MultiLayer: 0 Type: "Cluster" Properties60: { Property: "SrcModel", "object", "" Property: "SrcModelReference", "object", "" } UserData: "", "" Indexes: 6940,6941,6946,6947,6948,6950,6951,6952,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969 ,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6989,6990,6991,6992,6994,6995,7005,7105 ,7114,7115,7117,7118,7119,7120,7131,7133,7158,7159,7160,7161,7164 Weights: 0.0029540981631726,0.00340022752061486,0.00514190411195159,0.00215059868060052,0.00547736883163452,0.0035235860850662 ,0.00184328865725547,0.0031976499594748,0.00340661476366222,0.00445797480642796,0.00196587364189327,0.00159703753888607 ,0.0202187430113554,0.00549371214583516,0.355474561452866,0.285276889801025,0.0310857817530632,0.371014595031738,0.486605674028397 ,0.479619711637497,0.495799422264099,0.493786364793777,0.482276678085327,0.43053936958313,0.448268443346024,0.47878086566925 ,0.454167634248734,0.055576641112566,0.0302723329514265,0.402357220649719,0.0076139303855598,0.0356811620295048,0.00618526106700301 ,0.00278126355260611,0.00223208218812943,0.00168520596344024,0.00120828486979008,0.00146028422750533,0.00699549773707986 ,0.0091273644939065,0.0148227522149682,0.0109403412789106,0.00498492131009698,0.0156873147934675,0.00253135734237731 ,0.00485804071649909,0.00442179199308157,0.00194254226516932,0.0086732842028141,0.0095840310677886,0.00492342142388225 ,0.00308714248239994,0.00303195556625724,0.00201294617727399,0.466875940561295,0.00367911183275282,0.00448152981698513 ,0.00220942520536482,0.00171917770057917 Transform: -0.482801733001442,0.873602557741718,-0.0609999574633026,0,-0.868441857024725,-0.486588658706075,-0.0950796906612072 ,0,-0.112743748995228,0.00707027705556755,0.9935989294111,0,20.0346283563877,43.0828852057132,-2.32465793019685,1 TransformLink: -0.48280176903813,-0.868441921845883,-0.112743757410506,0,0.873602609728157,-0.486588687662048,0.00707027747630639 ,0,-0.0609999589935695,-0.0950796930464106,0.993598954336881,0,-28.1063709762603,38.141527963791,4.26394901497251 ,1 } Video: "Video::character_anim:file2", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "head.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "head.tga" RelativeFilename: "head.tga" } Video: "Video::character_anim:file1", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "jacket.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "jacket.tga" RelativeFilename: "jacket.tga" } Video: "Video::character_anim:file6", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "pants.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "pants.tga" RelativeFilename: "pants.tga" } Video: "Video::character_anim:file8", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upBodyC.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upBodyC.tga" RelativeFilename: "upBodyC.tga" } Video: "Video::character_anim:file13", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upBodyC.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upBodyC.tga" RelativeFilename: "upBodyC.tga" } Video: "Video::character_anim:soldier_bindPose:file9", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "headS.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "headS.tga" RelativeFilename: "headS.tga" } Video: "Video::character_anim:file10", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "jacketS.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "jacketS.tga" RelativeFilename: "jacketS.tga" } Video: "Video::character_anim:file12", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "pantsS.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "pantsS.tga" RelativeFilename: "pantsS.tga" } Video: "Video::character_anim:file11", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upBodyS.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upBodyS.tga" RelativeFilename: "upBodyS.tga" } Video: "Video::character_anim:file15", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upBodyS.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upBodyS.tga" RelativeFilename: "upBodyS.tga" } Video: "Video::character_anim:file3", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "headN.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "headN.tga" RelativeFilename: "headN.tga" } Video: "Video::character_anim:file4", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "jacketN.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "jacketN.tga" RelativeFilename: "jacketN.tga" } Video: "Video::character_anim:file7", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "pantsN.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "pantsN.tga" RelativeFilename: "pantsN.tga" } Video: "Video::character_anim:file5", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upbodyN.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upbodyN.tga" RelativeFilename: "upbodyN.tga" } Video: "Video::character_anim:file14", "Clip" { Type: "Clip" Properties60: { Property: "FrameRate", "double", "",0 Property: "LastFrame", "int", "",0 Property: "Width", "int", "",0 Property: "Height", "int", "",0 Property: "Path", "charptr", "", "upbodyN.tga" Property: "StartFrame", "int", "",0 Property: "StopFrame", "int", "",0 Property: "PlaySpeed", "double", "",1 Property: "Offset", "KTime", "",0 Property: "InterlaceMode", "enum", "",0 Property: "FreeRunning", "bool", "",0 Property: "Loop", "bool", "",0 Property: "AccessMode", "enum", "",0 } UseMipMap: 0 Filename: "upbodyN.tga" RelativeFilename: "upbodyN.tga" } Texture: "Texture::character_anim:file2", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file2" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file2" FileName: "head.tga" RelativeFilename: "head.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file1", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file1" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file1" FileName: "jacket.tga" RelativeFilename: "jacket.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file6", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file6" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file6" FileName: "pants.tga" RelativeFilename: "pants.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file8", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file8" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file8" FileName: "upBodyC.tga" RelativeFilename: "upBodyC.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file13", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file13" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file13" FileName: "upBodyC.tga" RelativeFilename: "upBodyC.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:soldier_bindPose:file9", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:soldier_bindPose:file9" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:soldier_bindPose:file9" FileName: "headS.tga" RelativeFilename: "headS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file10", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file10" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file10" FileName: "jacketS.tga" RelativeFilename: "jacketS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file12", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file12" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file12" FileName: "pantsS.tga" RelativeFilename: "pantsS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file11", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file11" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file11" FileName: "upBodyS.tga" RelativeFilename: "upBodyS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file15", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file15" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file15" FileName: "upBodyS.tga" RelativeFilename: "upBodyS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file3", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file3" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file3" FileName: "headN.tga" RelativeFilename: "headN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file4", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file4" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file4" FileName: "jacketN.tga" RelativeFilename: "jacketN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file7", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file7" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file7" FileName: "pantsN.tga" RelativeFilename: "pantsN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file5", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file5" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file5" FileName: "upbodyN.tga" RelativeFilename: "upbodyN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: "Texture::character_anim:file14", "TextureVideoClip" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file14" Properties60: { Property: "Translation", "Vector", "A+",0,0,0 Property: "Rotation", "Vector", "A+",0,0,0 Property: "Scaling", "Vector", "A+",1,1,1 Property: "Texture alpha", "Number", "A+",1 Property: "TextureTypeUse", "enum", "",0 Property: "CurrentTextureBlendMode", "enum", "",0 Property: "UseMaterial", "bool", "",1 Property: "UseMipMap", "bool", "",0 Property: "CurrentMappingType", "enum", "",0 Property: "UVSwap", "bool", "",0 Property: "WrapModeU", "enum", "",0 Property: "WrapModeV", "enum", "",0 Property: "TextureRotationPivot", "Vector3D", "",0,0,0 Property: "TextureScalingPivot", "Vector3D", "",0,0,0 Property: "VideoProperty", "object", "" } Media: "Video::character_anim:file14" FileName: "upbodyN.tga" RelativeFilename: "upbodyN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } GlobalSettings: { Version: 1000 Properties60: { Property: "UpAxis", "int", "",1 Property: "UpAxisSign", "int", "",1 Property: "FrontAxis", "int", "",2 Property: "FrontAxisSign", "int", "",1 Property: "CoordAxis", "int", "",0 Property: "CoordAxisSign", "int", "",1 Property: "UnitScaleFactor", "double", "",1 } } } ; Object relations ;------------------------------------------------------------------ Relations: { Model: "Model::Root", "LimbNode" { } Model: "Model::Pelvis", "LimbNode" { } Model: "Model::Spine", "LimbNode" { } Model: "Model::Spine1", "LimbNode" { } Model: "Model::Spine2", "LimbNode" { } Model: "Model::Spine3", "LimbNode" { } Model: "Model::Neck", "LimbNode" { } Model: "Model::Head", "LimbNode" { } Model: "Model::L_eye_joint1", "LimbNode" { } Model: "Model::R_eye_joint", "LimbNode" { } Model: "Model::L_eyeBall_joint2", "LimbNode" { } Model: "Model::R_eyeBall_joint", "LimbNode" { } Model: "Model::L_Clavicle", "LimbNode" { } Model: "Model::L_UpperArm", "LimbNode" { } Model: "Model::L_Forearm", "LimbNode" { } Model: "Model::L_Hand", "LimbNode" { } Model: "Model::L_Thumb1", "LimbNode" { } Model: "Model::L_Thumb2", "LimbNode" { } Model: "Model::L_Thumb3", "LimbNode" { } Model: "Model::L_Index1", "LimbNode" { } Model: "Model::L_Index2", "LimbNode" { } Model: "Model::L_Index3", "LimbNode" { } Model: "Model::L_Middle1", "LimbNode" { } Model: "Model::L_Middle2", "LimbNode" { } Model: "Model::L_Middle3", "LimbNode" { } Model: "Model::L_Ring1", "LimbNode" { } Model: "Model::L_Ring2", "LimbNode" { } Model: "Model::L_Ring3", "LimbNode" { } Model: "Model::L_Pinky1", "LimbNode" { } Model: "Model::L_Pinky2", "LimbNode" { } Model: "Model::L_Pinky3", "LimbNode" { } Model: "Model::R_Clavicle", "LimbNode" { } Model: "Model::R_UpperArm", "LimbNode" { } Model: "Model::R_Forearm", "LimbNode" { } Model: "Model::R_Hand", "LimbNode" { } Model: "Model::R_Thumb1", "LimbNode" { } Model: "Model::R_Thumb2", "LimbNode" { } Model: "Model::R_Thumb3", "LimbNode" { } Model: "Model::R_Index1", "LimbNode" { } Model: "Model::R_Index2", "LimbNode" { } Model: "Model::R_Index3", "LimbNode" { } Model: "Model::R_Middle1", "LimbNode" { } Model: "Model::R_Middle2", "LimbNode" { } Model: "Model::R_Middle3", "LimbNode" { } Model: "Model::R_Ring1", "LimbNode" { } Model: "Model::R_Ring2", "LimbNode" { } Model: "Model::R_Ring3", "LimbNode" { } Model: "Model::R_Pinky1", "LimbNode" { } Model: "Model::R_Pinky2", "LimbNode" { } Model: "Model::R_Pinky3", "LimbNode" { } Model: "Model::L_Thigh1", "LimbNode" { } Model: "Model::L_Knee2", "LimbNode" { } Model: "Model::L_Ankle1", "LimbNode" { } Model: "Model::L_Ball", "LimbNode" { } Model: "Model::R_Thigh", "LimbNode" { } Model: "Model::R_Knee", "LimbNode" { } Model: "Model::R_Ankle", "LimbNode" { } Model: "Model::R_Ball", "LimbNode" { } Model: "Model::him", "Mesh" { } Model: "Model::Producer Perspective", "Camera" { } Model: "Model::Producer Top", "Camera" { } Model: "Model::Producer Bottom", "Camera" { } Model: "Model::Producer Front", "Camera" { } Model: "Model::Producer Back", "Camera" { } Model: "Model::Producer Right", "Camera" { } Model: "Model::Producer Left", "Camera" { } Model: "Model::Camera_Switcher", "CameraSwitcher" { } Material: "Material::character_anim:headM", "" { } Material: "Material::character_anim:jacketM", "" { } Material: "Material::character_anim:pantsM", "" { } Material: "Material::character_anim:upBodyM", "" { } Material: "Material::character_anim:eyeBallM", "" { } Texture: "Texture::character_anim:file2", "TextureVideoClip" { } Texture: "Texture::character_anim:file1", "TextureVideoClip" { } Texture: "Texture::character_anim:file6", "TextureVideoClip" { } Texture: "Texture::character_anim:file8", "TextureVideoClip" { } Texture: "Texture::character_anim:file13", "TextureVideoClip" { } Texture: "Texture::character_anim:soldier_bindPose:file9", "TextureVideoClip" { } Texture: "Texture::character_anim:file10", "TextureVideoClip" { } Texture: "Texture::character_anim:file12", "TextureVideoClip" { } Texture: "Texture::character_anim:file11", "TextureVideoClip" { } Texture: "Texture::character_anim:file15", "TextureVideoClip" { } Texture: "Texture::character_anim:file3", "TextureVideoClip" { } Texture: "Texture::character_anim:file4", "TextureVideoClip" { } Texture: "Texture::character_anim:file7", "TextureVideoClip" { } Texture: "Texture::character_anim:file5", "TextureVideoClip" { } Texture: "Texture::character_anim:file14", "TextureVideoClip" { } Video: "Video::character_anim:file2", "Clip" { } Video: "Video::character_anim:file1", "Clip" { } Video: "Video::character_anim:file6", "Clip" { } Video: "Video::character_anim:file8", "Clip" { } Video: "Video::character_anim:file13", "Clip" { } Video: "Video::character_anim:soldier_bindPose:file9", "Clip" { } Video: "Video::character_anim:file10", "Clip" { } Video: "Video::character_anim:file12", "Clip" { } Video: "Video::character_anim:file11", "Clip" { } Video: "Video::character_anim:file15", "Clip" { } Video: "Video::character_anim:file3", "Clip" { } Video: "Video::character_anim:file4", "Clip" { } Video: "Video::character_anim:file7", "Clip" { } Video: "Video::character_anim:file5", "Clip" { } Video: "Video::character_anim:file14", "Clip" { } Deformer: "Deformer::Skin_him", "Skin" { } Deformer: "SubDeformer::Cluster_Root", "Cluster" { } Deformer: "SubDeformer::Cluster_Pelvis", "Cluster" { } Deformer: "SubDeformer::Cluster_Spine", "Cluster" { } Deformer: "SubDeformer::Cluster_Spine1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Thigh1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Thigh", "Cluster" { } Deformer: "SubDeformer::Cluster_Spine2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Knee2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Knee", "Cluster" { } Deformer: "SubDeformer::Cluster_Spine3", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Ankle1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Ankle", "Cluster" { } Deformer: "SubDeformer::Cluster_Neck", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Ball", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Ball", "Cluster" { } Deformer: "SubDeformer::Cluster_Head", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Clavicle", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Clavicle", "Cluster" { } Deformer: "SubDeformer::Cluster_L_eye_joint1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_eye_joint", "Cluster" { } Deformer: "SubDeformer::Cluster_L_eyeBall_joint2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_eyeBall_joint", "Cluster" { } Deformer: "SubDeformer::Cluster_L_UpperArm", "Cluster" { } Deformer: "SubDeformer::Cluster_R_UpperArm", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Forearm", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Forearm", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Hand", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Hand", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Thumb1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Index1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Middle1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Ring1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Pinky1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Thumb1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Index1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Middle1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Ring1", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Pinky1", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Thumb2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Index2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Middle2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Ring2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Pinky2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Thumb2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Index2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Middle2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Ring2", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Pinky2", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Thumb3", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Index3", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Middle3", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Ring3", "Cluster" { } Deformer: "SubDeformer::Cluster_L_Pinky3", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Thumb3", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Index3", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Middle3", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Ring3", "Cluster" { } Deformer: "SubDeformer::Cluster_R_Pinky3", "Cluster" { } Pose: "Pose::skinCluster3", "BindPose" { } } ; Object connections ;------------------------------------------------------------------ Connections: { Connect: "OO", "Model::Root", "Model::Scene" Connect: "OO", "Model::him", "Model::Scene" Connect: "OO", "Model::Pelvis", "Model::Root" Connect: "OO", "Model::Spine", "Model::Pelvis" Connect: "OO", "Model::Spine1", "Model::Spine" Connect: "OO", "Model::L_Thigh1", "Model::Spine" Connect: "OO", "Model::R_Thigh", "Model::Spine" Connect: "OO", "Model::Spine2", "Model::Spine1" Connect: "OO", "Model::Spine3", "Model::Spine2" Connect: "OO", "Model::Neck", "Model::Spine3" Connect: "OO", "Model::Head", "Model::Neck" Connect: "OO", "Model::L_Clavicle", "Model::Neck" Connect: "OO", "Model::R_Clavicle", "Model::Neck" Connect: "OO", "Model::L_eye_joint1", "Model::Head" Connect: "OO", "Model::R_eye_joint", "Model::Head" Connect: "OO", "Model::L_eyeBall_joint2", "Model::Head" Connect: "OO", "Model::R_eyeBall_joint", "Model::Head" Connect: "OO", "Model::L_UpperArm", "Model::L_Clavicle" Connect: "OO", "Model::L_Forearm", "Model::L_UpperArm" Connect: "OO", "Model::L_Hand", "Model::L_Forearm" Connect: "OO", "Model::L_Thumb1", "Model::L_Hand" Connect: "OO", "Model::L_Index1", "Model::L_Hand" Connect: "OO", "Model::L_Middle1", "Model::L_Hand" Connect: "OO", "Model::L_Ring1", "Model::L_Hand" Connect: "OO", "Model::L_Pinky1", "Model::L_Hand" Connect: "OO", "Model::L_Thumb2", "Model::L_Thumb1" Connect: "OO", "Model::L_Thumb3", "Model::L_Thumb2" Connect: "OO", "Model::L_Index2", "Model::L_Index1" Connect: "OO", "Model::L_Index3", "Model::L_Index2" Connect: "OO", "Model::L_Middle2", "Model::L_Middle1" Connect: "OO", "Model::L_Middle3", "Model::L_Middle2" Connect: "OO", "Model::L_Ring2", "Model::L_Ring1" Connect: "OO", "Model::L_Ring3", "Model::L_Ring2" Connect: "OO", "Model::L_Pinky2", "Model::L_Pinky1" Connect: "OO", "Model::L_Pinky3", "Model::L_Pinky2" Connect: "OO", "Model::R_UpperArm", "Model::R_Clavicle" Connect: "OO", "Model::R_Forearm", "Model::R_UpperArm" Connect: "OO", "Model::R_Hand", "Model::R_Forearm" Connect: "OO", "Model::R_Thumb1", "Model::R_Hand" Connect: "OO", "Model::R_Index1", "Model::R_Hand" Connect: "OO", "Model::R_Middle1", "Model::R_Hand" Connect: "OO", "Model::R_Ring1", "Model::R_Hand" Connect: "OO", "Model::R_Pinky1", "Model::R_Hand" Connect: "OO", "Model::R_Thumb2", "Model::R_Thumb1" Connect: "OO", "Model::R_Thumb3", "Model::R_Thumb2" Connect: "OO", "Model::R_Index2", "Model::R_Index1" Connect: "OO", "Model::R_Index3", "Model::R_Index2" Connect: "OO", "Model::R_Middle2", "Model::R_Middle1" Connect: "OO", "Model::R_Middle3", "Model::R_Middle2" Connect: "OO", "Model::R_Ring2", "Model::R_Ring1" Connect: "OO", "Model::R_Ring3", "Model::R_Ring2" Connect: "OO", "Model::R_Pinky2", "Model::R_Pinky1" Connect: "OO", "Model::R_Pinky3", "Model::R_Pinky2" Connect: "OO", "Model::L_Knee2", "Model::L_Thigh1" Connect: "OO", "Model::L_Ankle1", "Model::L_Knee2" Connect: "OO", "Model::L_Ball", "Model::L_Ankle1" Connect: "OO", "Model::R_Knee", "Model::R_Thigh" Connect: "OO", "Model::R_Ankle", "Model::R_Knee" Connect: "OO", "Model::R_Ball", "Model::R_Ankle" Connect: "OO", "Material::character_anim:headM", "Model::him" Connect: "OO", "Material::character_anim:jacketM", "Model::him" Connect: "OO", "Material::character_anim:pantsM", "Model::him" Connect: "OO", "Material::character_anim:upBodyM", "Model::him" Connect: "OO", "Material::character_anim:eyeBallM", "Model::him" Connect: "OO", "Texture::character_anim:file2", "Model::him" Connect: "OO", "Texture::character_anim:file1", "Model::him" Connect: "OO", "Texture::character_anim:file6", "Model::him" Connect: "OO", "Texture::character_anim:file8", "Model::him" Connect: "OO", "Texture::character_anim:file13", "Model::him" Connect: "OO", "Texture::character_anim:soldier_bindPose:file9", "Model::him" Connect: "OO", "Texture::character_anim:file10", "Model::him" Connect: "OO", "Texture::character_anim:file12", "Model::him" Connect: "OO", "Texture::character_anim:file11", "Model::him" Connect: "OO", "Texture::character_anim:file15", "Model::him" Connect: "OO", "Texture::character_anim:file3", "Model::him" Connect: "OO", "Texture::character_anim:file4", "Model::him" Connect: "OO", "Texture::character_anim:file7", "Model::him" Connect: "OO", "Texture::character_anim:file5", "Model::him" Connect: "OO", "Texture::character_anim:file14", "Model::him" Connect: "OO", "Deformer::Skin_him", "Model::him" Connect: "OO", "SubDeformer::Cluster_Root", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Pelvis", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Spine", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Spine1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Thigh1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Thigh", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Spine2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Knee2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Knee", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Spine3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Ankle1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Ankle", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Neck", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Ball", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Ball", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_Head", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Clavicle", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Clavicle", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_eye_joint1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_eye_joint", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_eyeBall_joint2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_eyeBall_joint", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_UpperArm", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_UpperArm", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Forearm", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Forearm", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Hand", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Hand", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Thumb1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Index1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Middle1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Ring1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Pinky1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Thumb1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Index1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Middle1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Ring1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Pinky1", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Thumb2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Index2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Middle2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Ring2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Pinky2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Thumb2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Index2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Middle2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Ring2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Pinky2", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Thumb3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Index3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Middle3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Ring3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_L_Pinky3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Thumb3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Index3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Middle3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Ring3", "Deformer::Skin_him" Connect: "OO", "SubDeformer::Cluster_R_Pinky3", "Deformer::Skin_him" Connect: "OO", "Model::Root", "SubDeformer::Cluster_Root" Connect: "OO", "Model::Pelvis", "SubDeformer::Cluster_Pelvis" Connect: "OO", "Model::Spine", "SubDeformer::Cluster_Spine" Connect: "OO", "Model::Spine1", "SubDeformer::Cluster_Spine1" Connect: "OO", "Model::L_Thigh1", "SubDeformer::Cluster_L_Thigh1" Connect: "OO", "Model::R_Thigh", "SubDeformer::Cluster_R_Thigh" Connect: "OO", "Model::Spine2", "SubDeformer::Cluster_Spine2" Connect: "OO", "Model::L_Knee2", "SubDeformer::Cluster_L_Knee2" Connect: "OO", "Model::R_Knee", "SubDeformer::Cluster_R_Knee" Connect: "OO", "Model::Spine3", "SubDeformer::Cluster_Spine3" Connect: "OO", "Model::L_Ankle1", "SubDeformer::Cluster_L_Ankle1" Connect: "OO", "Model::R_Ankle", "SubDeformer::Cluster_R_Ankle" Connect: "OO", "Model::Neck", "SubDeformer::Cluster_Neck" Connect: "OO", "Model::L_Ball", "SubDeformer::Cluster_L_Ball" Connect: "OO", "Model::R_Ball", "SubDeformer::Cluster_R_Ball" Connect: "OO", "Model::Head", "SubDeformer::Cluster_Head" Connect: "OO", "Model::L_Clavicle", "SubDeformer::Cluster_L_Clavicle" Connect: "OO", "Model::R_Clavicle", "SubDeformer::Cluster_R_Clavicle" Connect: "OO", "Model::L_eye_joint1", "SubDeformer::Cluster_L_eye_joint1" Connect: "OO", "Model::R_eye_joint", "SubDeformer::Cluster_R_eye_joint" Connect: "OO", "Model::L_eyeBall_joint2", "SubDeformer::Cluster_L_eyeBall_joint2" Connect: "OO", "Model::R_eyeBall_joint", "SubDeformer::Cluster_R_eyeBall_joint" Connect: "OO", "Model::L_UpperArm", "SubDeformer::Cluster_L_UpperArm" Connect: "OO", "Model::R_UpperArm", "SubDeformer::Cluster_R_UpperArm" Connect: "OO", "Model::L_Forearm", "SubDeformer::Cluster_L_Forearm" Connect: "OO", "Model::R_Forearm", "SubDeformer::Cluster_R_Forearm" Connect: "OO", "Model::L_Hand", "SubDeformer::Cluster_L_Hand" Connect: "OO", "Model::R_Hand", "SubDeformer::Cluster_R_Hand" Connect: "OO", "Model::L_Thumb1", "SubDeformer::Cluster_L_Thumb1" Connect: "OO", "Model::L_Index1", "SubDeformer::Cluster_L_Index1" Connect: "OO", "Model::L_Middle1", "SubDeformer::Cluster_L_Middle1" Connect: "OO", "Model::L_Ring1", "SubDeformer::Cluster_L_Ring1" Connect: "OO", "Model::L_Pinky1", "SubDeformer::Cluster_L_Pinky1" Connect: "OO", "Model::R_Thumb1", "SubDeformer::Cluster_R_Thumb1" Connect: "OO", "Model::R_Index1", "SubDeformer::Cluster_R_Index1" Connect: "OO", "Model::R_Middle1", "SubDeformer::Cluster_R_Middle1" Connect: "OO", "Model::R_Ring1", "SubDeformer::Cluster_R_Ring1" Connect: "OO", "Model::R_Pinky1", "SubDeformer::Cluster_R_Pinky1" Connect: "OO", "Model::L_Thumb2", "SubDeformer::Cluster_L_Thumb2" Connect: "OO", "Model::L_Index2", "SubDeformer::Cluster_L_Index2" Connect: "OO", "Model::L_Middle2", "SubDeformer::Cluster_L_Middle2" Connect: "OO", "Model::L_Ring2", "SubDeformer::Cluster_L_Ring2" Connect: "OO", "Model::L_Pinky2", "SubDeformer::Cluster_L_Pinky2" Connect: "OO", "Model::R_Thumb2", "SubDeformer::Cluster_R_Thumb2" Connect: "OO", "Model::R_Index2", "SubDeformer::Cluster_R_Index2" Connect: "OO", "Model::R_Middle2", "SubDeformer::Cluster_R_Middle2" Connect: "OO", "Model::R_Ring2", "SubDeformer::Cluster_R_Ring2" Connect: "OO", "Model::R_Pinky2", "SubDeformer::Cluster_R_Pinky2" Connect: "OO", "Model::L_Thumb3", "SubDeformer::Cluster_L_Thumb3" Connect: "OO", "Model::L_Index3", "SubDeformer::Cluster_L_Index3" Connect: "OO", "Model::L_Middle3", "SubDeformer::Cluster_L_Middle3" Connect: "OO", "Model::L_Ring3", "SubDeformer::Cluster_L_Ring3" Connect: "OO", "Model::L_Pinky3", "SubDeformer::Cluster_L_Pinky3" Connect: "OO", "Model::R_Thumb3", "SubDeformer::Cluster_R_Thumb3" Connect: "OO", "Model::R_Index3", "SubDeformer::Cluster_R_Index3" Connect: "OO", "Model::R_Middle3", "SubDeformer::Cluster_R_Middle3" Connect: "OO", "Model::R_Ring3", "SubDeformer::Cluster_R_Ring3" Connect: "OO", "Model::R_Pinky3", "SubDeformer::Cluster_R_Pinky3" Connect: "OO", "Video::character_anim:file2", "Texture::character_anim:file2" Connect: "OO", "Video::character_anim:file1", "Texture::character_anim:file1" Connect: "OO", "Video::character_anim:file6", "Texture::character_anim:file6" Connect: "OO", "Video::character_anim:file8", "Texture::character_anim:file8" Connect: "OO", "Video::character_anim:file13", "Texture::character_anim:file13" Connect: "OO", "Video::character_anim:soldier_bindPose:file9", "Texture::character_anim:soldier_bindPose:file9" Connect: "OO", "Video::character_anim:file10", "Texture::character_anim:file10" Connect: "OO", "Video::character_anim:file12", "Texture::character_anim:file12" Connect: "OO", "Video::character_anim:file11", "Texture::character_anim:file11" Connect: "OO", "Video::character_anim:file15", "Texture::character_anim:file15" Connect: "OO", "Video::character_anim:file3", "Texture::character_anim:file3" Connect: "OO", "Video::character_anim:file4", "Texture::character_anim:file4" Connect: "OO", "Video::character_anim:file7", "Texture::character_anim:file7" Connect: "OO", "Video::character_anim:file5", "Texture::character_anim:file5" Connect: "OO", "Video::character_anim:file14", "Texture::character_anim:file14" } ;Takes and animation section ;---------------------------------------------------- Takes: { Current: "Take 001" Take: "Take 001" { FileName: "Take_001.tak" LocalTime: 1924423250,57732697500 ReferenceTime: 1924423250,57732697500 ;Models animation ;---------------------------------------------------- Model: "Model::Pelvis" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: -0.77721095085144 KeyVer: 4005 KeyCount: 39 Key: 0,-0.586211264133453,U,s,0.891356229782104,-0.783023536205292,a,0.329832986317342 ,0.989898998959688,1539538600,-0.584405720233917,U,s,-0.783023536205292,-1.83774936199188 ,a,0.989898998959688,0.989999008961604,3079077200,-0.638412833213806,U,s,-1.83774936199188 ,-2.22997069358826,a,0.989999008961604,0.989999008961604,4618615800,-0.706922352313995 ,U,s,-2.22997069358826,-1.59893095493317,a,0.989999008961604,0.989999008961604,6158154400 ,-0.78707754611969,U,s,-1.59893095493317,-0.599919855594635,a,0.989999008961604,0.989898998959688 ,7697693000,-0.81351774930954,U,s,-0.599919855594635,0.0918889045715332,a,0.989898998959688 ,0.989898998959688,9237231600,-0.827072203159332,U,s,0.0918889045715332,0.977147459983826 ,a,0.989898998959688,0.989898998959688,10776770200,-0.807391822338104,U,s,0.977147459983826 ,1.53036570549011,a,0.989898998959688,0.989999008961604,12316308800,-0.761929035186768 ,U,s,1.53036570549011,1.57329618930817,a,0.989999008961604,0.989898998959688,13855847400 ,-0.70536744594574,U,s,1.57329618930817,1.09736680984497,a,0.989898998959688,0.989898998959688 ,15395386000,-0.657042622566223,U,s,1.09736680984497,0.147239595651627,a,0.988698878936702 ,0.988698878936702,16927226907,-0.632291913032532,U,s,0.147239595651627,-1.29068064689636 ,a,0.989999008961604,0.989999008961604,18474463200,-0.647729754447937,U,s,-1.29068064689636 ,-3.26958799362183,a,0.989898998959688,0.989898998959688,20014001800,-0.718261241912842 ,U,s,-3.26958799362183,-5.00180864334106,a,0.989898998959688,0.989999008961604,21553540400 ,-0.865702271461487,U,s,-5.00180864334106,-4.28291749954224,a,0.989999008961604,0.989898998959688 ,23093079000,-1.05171513557434,U,s,-4.28291749954224,-0.809386909008026,a,0.989898998959688 ,0.989898998959688,24632617600,-1.15123009681702,U,s,-0.809386909008026,1.67561900615692 ,a,0.989898998959688,0.989898998959688,26172156200,-1.10567426681519,U,s,1.67561900615692 ,2.34441637992859,a,0.989898998959688,0.989898998959688,27711694800,-1.03952217102051 ,U,s,2.34441637992859,2.40952062606812,a,0.989898998959688,0.989898998959688,29251233400 ,-0.949379861354828,U,s,2.40952062606812,1.60205042362213,a,0.989898998959688,0.989898998959688 ,30790772000,-0.878887474536896,U,s,1.60205042362213,2.42144179344177,a,0.989898998959688 ,0.989898998959688,32330310599,-0.842576503753662,U,s,2.42144179344177,1.93180024623871 ,a,0.988698878936702,0.988698878936702,33862151507,-0.718515813350677,U,s,1.93180024623871 ,0.225274741649628,a,0.989999008961604,0.989999008961604,35409387800,-0.715310513973236 ,U,s,0.225274741649628,0.226091459393501,a,0.989898998959688,0.989898998959688,36948926400 ,-0.70350444316864,U,s,0.226091459393501,0.110689401626587,a,0.989898998959688,0.989898998959688 ,38488465000,-0.70023775100708,U,s,0.110689401626587,0.268695652484894,a,0.989898998959688 ,0.989898998959688,40028003600,-0.696125149726868,U,s,0.268695652484894,0.475359857082367 ,a,0.989898998959688,0.989898998959688,41567542200,-0.682324707508087,U,s,0.475359857082367 ,0.480681329965591,a,0.989898998959688,0.989898998959688,43107080800,-0.664434492588043 ,U,s,0.480681329965591,0.325607687234879,a,0.989898998959688,0.989898998959688,44646619400 ,-0.65027928352356,U,s,0.325607687234879,0.142082884907722,a,0.989898998959688,0.989898998959688 ,46186158000,-0.642727315425873,U,s,0.142082884907722,-0.195977404713631,a,0.989898998959688 ,0.989898998959688,47725696599,-0.640807092189789,U,s,-0.195977404713631,-0.954082429409027 ,a,0.989898998959688,0.989898998959688,49265235200,-0.655792474746704,U,s,-0.954082429409027 ,-1.98120319843292,a,0.989999008961604,0.989898998959688,50804773799,-0.704412579536438 ,U,s,-1.98120319843292,-1.21149754524231,a,0.989898998959688,0.989898998959688,52344312400 ,-0.787872672080994,U,s,-1.21149754524231,1.17007434368134,a,0.989999008961604,0.989898998959688 ,53883850999,-0.785179078578949,U,s,1.17007434368134,1.94099128246307,a,0.989898998959688 ,0.989898998959688,55423389600,-0.709867715835571,U,s,1.94099128246307,1.85406816005707 ,a,0.989898998959688,0.989898998959688,56962928200,-0.655779659748077,U,s,1.85406816005707 ,2.3169207572937,a,0.989898998959688,0.989898998959688,58502466800,-0.586263179779053 ,U,s,2.31692051887512,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.13318836688995 KeyVer: 4005 KeyCount: 39 Key: 0,-0.0680352821946144,U,s,0,0,n,1539538600,-0.484822779893875,U,b,0,0,n,3079077200 ,-0.896862685680389,U,b,0,0,n,4618615800,-1.29121971130371,U,b,0,0,n,6158154400,-1.61329710483551 ,U,b,0,0,n,7697693000,-1.81701695919037,U,b,0,0,n,9237231600,-1.96915543079376,U,b ,0,0,n,10776770200,-1.99336910247803,U,b,0,0,n,12316308800,-2.04106712341309,U,b,0 ,0,n,13855847400,-2.16073536872864,U,b,0,0,n,15395386000,-2.2587673664093,U,b,0,0 ,n,16934924599,-2.35977530479431,U,b,0,0,n,18474463200,-2.44943070411682,U,b,0,0,n ,20014001800,-2.52878975868225,U,b,0,0,n,21553540400,-2.56177806854248,U,b,0,0,n,23093079000 ,-2.52751469612122,U,b,0,0,n,24632617600,-2.400151014328,U,b,0,0,n,26172156200,-2.23361873626709 ,U,b,0,0,n,27711694800,-1.91174876689911,U,b,0,0,n,29251233400,-1.48990726470947,U ,b,0,0,n,30790772000,-1.02353608608246,U,b,0,0,n,32330310599,-0.647188246250153,U ,b,0,0,n,33869849199,-0.19083833694458,U,b,0,0,n,35409387800,0.168048664927483,U,b ,0,0,n,36948926400,0.385989785194397,U,b,0,0,n,38488465000,0.560447871685028,U,b,0 ,0,n,40028003600,0.701425850391388,U,b,0,0,n,41567542200,0.819226562976837,U,b,0,0 ,n,43107080800,0.924100160598755,U,b,0,0,n,44646619400,1.05119812488556,U,b,0,0,n ,46186158000,1.14897549152374,U,b,0,0,n,47725696599,1.19904029369354,U,b,0,0,n,49265235200 ,1.20627641677856,U,b,0,0,n,50804773799,1.20042335987091,U,b,0,0,n,52344312400,1.12073743343353 ,U,b,0,0,n,53883850999,0.937063157558441,U,b,0,0,n,55423389600,0.681434571743011,U ,b,0,0,n,56962928200,0.268267124891281,U,b,0,0,n,58502466800,-0.0679674819111824,U ,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.656980156898499 KeyVer: 4005 KeyCount: 39 Key: 0,-0.0685768127441406,U,s,0,0,n,1539538600,-0.0664628073573112,U,b,0,0,n,3079077200 ,-0.0538290292024612,U,b,0,0,n,4618615800,0.0590434558689594,U,b,0,0,n,6158154400 ,0.0739317536354065,U,b,0,0,n,7697693000,-0.0169619247317314,U,b,0,0,n,9237231600 ,0.131332248449326,U,b,0,0,n,10776770200,0.422134339809418,U,b,0,0,n,12316308800,0.662825345993042 ,U,b,0,0,n,13855847400,0.842476487159729,U,b,0,0,n,15395386000,1.00516140460968,U ,b,0,0,n,16934924599,1.07768261432648,U,b,0,0,n,18474463200,1.06222343444824,U,b,0 ,0,n,20014001800,0.982780933380127,U,b,0,0,n,21553540400,0.781412482261658,U,b,0,0 ,n,23093079000,0.445465862751007,U,b,0,0,n,24632617600,0.117520071566105,U,b,0,0,n ,26172156200,-0.154809415340424,U,b,0,0,n,27711694800,-0.283741056919098,U,b,0,0,n ,29251233400,-0.35413321852684,U,b,0,0,n,30790772000,-0.419941127300262,U,b,0,0,n ,32330310599,-0.580337226390839,U,b,0,0,n,33869849199,-0.660466730594635,U,b,0,0,n ,35409387800,-0.796723783016205,U,b,0,0,n,36948926400,-1.05828070640564,U,b,0,0,n ,38488465000,-1.06743264198303,U,b,0,0,n,40028003600,-0.767730951309204,U,b,0,0,n ,41567542200,-0.484414279460907,U,b,0,0,n,43107080800,-0.248645156621933,U,b,0,0,n ,44646619400,0.0259702987968922,U,b,0,0,n,46186158000,0.187835603952408,U,b,0,0,n ,47725696599,0.397310495376587,U,b,0,0,n,49265235200,0.597966015338898,U,b,0,0,n,50804773799 ,0.69969254732132,U,b,0,0,n,52344312400,0.64907044172287,U,b,0,0,n,53883850999,0.512211322784424 ,U,b,0,0,n,55423389600,0.352724701166153,U,b,0,0,n,56962928200,0.179142206907272,U ,b,0,0,n,58502466800,-0.0685265585780144,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 39.7229881286621 KeyVer: 4005 KeyCount: 39 Key: 0,42.5624885559082,U,s,0,0,n,1539538600,58.9101219177246,U,b,0,0,n,3079077200,73.3717346191406 ,U,b,0,0,n,4618615800,78.4863357543945,U,b,0,0,n,6158154400,126.048858642578,U,b,0 ,0,n,7697693000,157.502502441406,U,b,0,0,n,9237231600,160.312484741211,U,b,0,0,n,10776770200 ,169.266326904297,U,b,0,0,n,12316308800,160.485046386719,U,b,0,0,n,13855847400,164.456771850586 ,U,b,0,0,n,15395386000,154.204498291016,U,b,0,0,n,16934924599,143.332977294922,U,b ,0,0,n,18474463200,135.768539428711,U,b,0,0,n,20014001800,133.454193115234,U,b,0,0 ,n,21553540400,137.921951293945,U,b,0,0,n,23093079000,145.168930053711,U,b,0,0,n,24632617600 ,154.882476806641,U,b,0,0,n,26172156200,153.05793762207,U,b,0,0,n,27711694800,149.928756713867 ,U,b,0,0,n,29251233400,148.561538696289,U,b,0,0,n,30790772000,140.271331787109,U,b ,0,0,n,32330310599,137.499862670898,U,b,0,0,n,33869849199,123.417930603027,U,b,0,0 ,n,35409387800,71.790412902832,U,b,0,0,n,36948926400,17.6000232696533,U,b,0,0,n,38488465000 ,12.7495594024658,U,b,0,0,n,40028003600,7.17537069320679,U,b,0,0,n,41567542200,8.1723804473877 ,U,b,0,0,n,43107080800,5.18220710754395,U,b,0,0,n,44646619400,3.8655412197113,U,b ,0,0,n,46186158000,6.03672981262207,U,b,0,0,n,47725696599,17.8067798614502,U,b,0,0 ,n,49265235200,34.8303871154785,U,b,0,0,n,50804773799,46.3451385498047,U,b,0,0,n,52344312400 ,38.4966621398926,U,b,0,0,n,53883850999,27.1907367706299,U,b,0,0,n,55423389600,30.035099029541 ,U,b,0,0,n,56962928200,33.3133888244629,U,b,0,0,n,58502466800,42.5024452209473,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -93.1371078491211 KeyVer: 4005 KeyCount: 39 Key: 0,-92.9608688354492,U,s,0,0,n,1539538600,-92.3037109375,U,b,0,0,n,3079077200,-91.8646621704102 ,U,b,0,0,n,4618615800,-91.2107315063477,U,b,0,0,n,6158154400,-91.1477737426758,U,b ,0,0,n,7697693000,-92.1820831298828,U,b,0,0,n,9237231600,-92.546257019043,U,b,0,0 ,n,10776770200,-91.8497314453125,U,b,0,0,n,12316308800,-91.6086883544922,U,b,0,0,n ,13855847400,-91.9885635375977,U,b,0,0,n,15395386000,-92.2334899902344,U,b,0,0,n,16934924599 ,-92.4352035522461,U,b,0,0,n,18474463200,-92.852912902832,U,b,0,0,n,20014001800,-93.618522644043 ,U,b,0,0,n,21553540400,-94.3734664916992,U,b,0,0,n,23093079000,-95.2876892089844,U ,b,0,0,n,24632617600,-96.0415115356445,U,b,0,0,n,26172156200,-96.5568771362305,U,b ,0,0,n,27711694800,-96.4432373046875,U,b,0,0,n,29251233400,-95.8869171142578,U,b,0 ,0,n,30790772000,-94.9207763671875,U,b,0,0,n,32330310599,-93.9866485595703,U,b,0,0 ,n,33869849199,-92.4012680053711,U,b,0,0,n,35409387800,-91.2419815063477,U,b,0,0,n ,36948926400,-92.9509735107422,U,b,0,0,n,38488465000,-94.4393920898438,U,b,0,0,n,40028003600 ,-94.1270599365234,U,b,0,0,n,41567542200,-94.1195220947266,U,b,0,0,n,43107080800,-94.3053512573242 ,U,b,0,0,n,44646619400,-94.1212005615234,U,b,0,0,n,46186158000,-94.1551818847656,U ,b,0,0,n,47725696599,-93.4074020385742,U,b,0,0,n,49265235200,-93.0420074462891,U,b ,0,0,n,50804773799,-92.9979400634766,U,b,0,0,n,52344312400,-93.1628799438477,U,b,0 ,0,n,53883850999,-93.5466461181641,U,b,0,0,n,55423389600,-93.8350830078125,U,b,0,0 ,n,56962928200,-93.3850555419922,U,b,0,0,n,58502466800,-92.9633102416992,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 42.0879821777344 KeyVer: 4005 KeyCount: 39 Key: 0,38.731258392334,U,s,0,0,n,1539538600,22.2215995788574,U,b,0,0,n,3079077200,7.96535730361938 ,U,b,0,0,n,4618615800,2.2967631816864,U,b,0,0,n,6158154400,-46.0885543823242,U,b,0 ,0,n,7697693000,-78.1182403564453,U,b,0,0,n,9237231600,-80.9945831298828,U,b,0,0,n ,10776770200,-90.3858032226563,U,b,0,0,n,12316308800,-81.4422378540039,U,b,0,0,n,13855847400 ,-85.3753433227539,U,b,0,0,n,15395386000,-75.089225769043,U,b,0,0,n,16934924599,-64.0760955810547 ,U,b,0,0,n,18474463200,-56.303524017334,U,b,0,0,n,20014001800,-53.4196929931641,U ,b,0,0,n,21553540400,-57.2339668273926,U,b,0,0,n,23093079000,-63.9712257385254,U,b ,0,0,n,24632617600,-73.0183258056641,U,b,0,0,n,26172156200,-71.0355911254883,U,b,0 ,0,n,27711694800,-68.0635604858398,U,b,0,0,n,29251233400,-66.1372528076172,U,b,0,0 ,n,30790772000,-57.5177345275879,U,b,0,0,n,32330310599,-55.0261917114258,U,b,0,0,n ,33869849199,-41.1560554504395,U,b,0,0,n,35409387800,11.1745405197144,U,b,0,0,n,36948926400 ,65.7362442016602,U,b,0,0,n,38488465000,71.4870300292969,U,b,0,0,n,40028003600,76.9713668823242 ,U,b,0,0,n,41567542200,76.0979537963867,U,b,0,0,n,43107080800,78.8197174072266,U,b ,0,0,n,44646619400,79.5356521606445,U,b,0,0,n,46186158000,76.7964477539063,U,b,0,0 ,n,47725696599,64.4692001342773,U,b,0,0,n,49265235200,47.0431022644043,U,b,0,0,n,50804773799 ,35.4176902770996,U,b,0,0,n,52344312400,43.3232192993164,U,b,0,0,n,53883850999,54.767749786377 ,U,b,0,0,n,55423389600,51.6523208618164,U,b,0,0,n,56962928200,48.0519027709961,U,b ,0,0,n,58502466800,38.7908897399902,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::Spine1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.54331636428833 Color: 1,0,0 } Channel: "Y" { Default: -0.00359953427687287 Color: 0,1,0 } Channel: "Z" { Default: -1.3350340566376e-007 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.96879076957703 KeyVer: 4005 KeyCount: 39 Key: 0,4.24219846725464,U,s,0,0,n,1539538600,4.09500217437744,U,b,0,0,n,3079077200,3.75727224349976 ,U,b,0,0,n,4618615800,3.21977591514587,U,b,0,0,n,6158154400,2.98786306381226,U,b,0 ,0,n,7697693000,3.02787780761719,U,b,0,0,n,9237231600,2.58821439743042,U,b,0,0,n,10776770200 ,2.20839238166809,U,b,0,0,n,12316308800,1.65968203544617,U,b,0,0,n,13855847400,1.17191326618195 ,U,b,0,0,n,15395386000,0.650164425373077,U,b,0,0,n,16934924599,0.0350813679397106 ,U,b,0,0,n,18474463200,-0.611182034015656,U,b,0,0,n,20014001800,-1.36630296707153 ,U,b,0,0,n,21553540400,-2.08521461486816,U,b,0,0,n,23093079000,-2.74521613121033,U ,b,0,0,n,24632617600,-3.32405662536621,U,b,0,0,n,26172156200,-3.6505982875824,U,b ,0,0,n,27711694800,-3.64787554740906,U,b,0,0,n,29251233400,-3.85458874702454,U,b,0 ,0,n,30790772000,-4.04946231842041,U,b,0,0,n,32330310599,-4.01488494873047,U,b,0,0 ,n,33869849199,-3.89935493469238,U,b,0,0,n,35409387800,-3.8894522190094,U,b,0,0,n ,36948926400,-4.13314723968506,U,b,0,0,n,38488465000,-4.20187330245972,U,b,0,0,n,40028003600 ,-3.68334913253784,U,b,0,0,n,41567542200,-2.98915076255798,U,b,0,0,n,43107080800,-2.23437857627869 ,U,b,0,0,n,44646619400,-1.19385135173798,U,b,0,0,n,46186158000,-0.189459353685379 ,U,b,0,0,n,47725696599,0.899639129638672,U,b,0,0,n,49265235200,1.8381507396698,U,b ,0,0,n,50804773799,2.51898312568665,U,b,0,0,n,52344312400,3.05208849906921,U,b,0,0 ,n,53883850999,3.27331972122192,U,b,0,0,n,55423389600,3.50903797149658,U,b,0,0,n,56962928200 ,3.82337141036987,U,b,0,0,n,58502466800,4.24205255508423,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -0.549681961536407 KeyVer: 4005 KeyCount: 39 Key: 0,-1.0188729763031,U,s,0,0,n,1539538600,-0.706613957881927,U,b,0,0,n,3079077200,-0.498464226722717 ,U,b,0,0,n,4618615800,-0.510826349258423,U,b,0,0,n,6158154400,-1.25446689128876,U ,b,0,0,n,7697693000,-2.77893257141113,U,b,0,0,n,9237231600,-3.21131634712219,U,b,0 ,0,n,10776770200,-3.29442143440247,U,b,0,0,n,12316308800,-3.50326347351074,U,b,0,0 ,n,13855847400,-3.79705500602722,U,b,0,0,n,15395386000,-3.91211247444153,U,b,0,0,n ,16934924599,-3.87932634353638,U,b,0,0,n,18474463200,-3.95266246795654,U,b,0,0,n,20014001800 ,-4.12907981872559,U,b,0,0,n,21553540400,-4.55836009979248,U,b,0,0,n,23093079000,-5.19780969619751 ,U,b,0,0,n,24632617600,-5.86074018478394,U,b,0,0,n,26172156200,-5.68002367019653,U ,b,0,0,n,27711694800,-5.17586898803711,U,b,0,0,n,29251233400,-4.47586488723755,U,b ,0,0,n,30790772000,-3.99478769302368,U,b,0,0,n,32330310599,-3.67567181587219,U,b,0 ,0,n,33869849199,-2.0935046672821,U,b,0,0,n,35409387800,-0.309897571802139,U,b,0,0 ,n,36948926400,2.26589298248291,U,b,0,0,n,38488465000,3.79127883911133,U,b,0,0,n,40028003600 ,3.97652554512024,U,b,0,0,n,41567542200,4.17300510406494,U,b,0,0,n,43107080800,4.38630676269531 ,U,b,0,0,n,44646619400,3.81272101402283,U,b,0,0,n,46186158000,3.2877721786499,U,b ,0,0,n,47725696599,1.86536264419556,U,b,0,0,n,49265235200,0.483337074518204,U,b,0 ,0,n,50804773799,-0.597803354263306,U,b,0,0,n,52344312400,-0.540770590305328,U,b,0 ,0,n,53883850999,-0.0805377140641212,U,b,0,0,n,55423389600,-0.169987320899963,U,b ,0,0,n,56962928200,-0.527960360050201,U,b,0,0,n,58502466800,-1.01844823360443,U,s ,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -5.84038019180298 KeyVer: 4005 KeyCount: 39 Key: 0,-5.99660539627075,U,s,0,0,n,1539538600,-6.28699254989624,U,b,0,0,n,3079077200,-6.49149513244629 ,U,b,0,0,n,4618615800,-6.63033771514893,U,b,0,0,n,6158154400,-6.67092180252075,U,b ,0,0,n,7697693000,-6.54867601394653,U,b,0,0,n,9237231600,-6.52371501922607,U,b,0,0 ,n,10776770200,-6.38706922531128,U,b,0,0,n,12316308800,-6.25086688995361,U,b,0,0,n ,13855847400,-6.18417310714722,U,b,0,0,n,15395386000,-6.17102575302124,U,b,0,0,n,16934924599 ,-6.11461734771729,U,b,0,0,n,18474463200,-6.0587682723999,U,b,0,0,n,20014001800,-6.08407068252563 ,U,b,0,0,n,21553540400,-6.10600519180298,U,b,0,0,n,23093079000,-6.18422508239746,U ,b,0,0,n,24632617600,-6.18777847290039,U,b,0,0,n,26172156200,-6.25842952728271,U,b ,0,0,n,27711694800,-6.22124862670898,U,b,0,0,n,29251233400,-6.21349954605103,U,b,0 ,0,n,30790772000,-6.34050703048706,U,b,0,0,n,32330310599,-6.31043243408203,U,b,0,0 ,n,33869849199,-6.14738082885742,U,b,0,0,n,35409387800,-5.91470098495483,U,b,0,0,n ,36948926400,-5.68788385391235,U,b,0,0,n,38488465000,-5.62817096710205,U,b,0,0,n,40028003600 ,-5.64318656921387,U,b,0,0,n,41567542200,-5.70680856704712,U,b,0,0,n,43107080800,-5.78077697753906 ,U,b,0,0,n,44646619400,-5.82882928848267,U,b,0,0,n,46186158000,-5.85919094085693,U ,b,0,0,n,47725696599,-5.89719581604004,U,b,0,0,n,49265235200,-5.93372535705566,U,b ,0,0,n,50804773799,-5.89044189453125,U,b,0,0,n,52344312400,-5.83110952377319,U,b,0 ,0,n,53883850999,-5.82194566726685,U,b,0,0,n,55423389600,-5.91956281661987,U,b,0,0 ,n,56962928200,-5.92924785614014,U,b,0,0,n,58502466800,-5.99667501449585,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::Spine2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.54404973983765 Color: 1,0,0 } Channel: "Y" { Default: -0.00359953194856644 Color: 0,1,0 } Channel: "Z" { Default: 6.19496276499376e-008 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.77687907218933 KeyVer: 4005 KeyCount: 39 Key: 0,4.21171998977661,U,s,0,0,n,1539538600,4.2712836265564,U,b,0,0,n,3079077200,4.21304178237915 ,U,b,0,0,n,4618615800,4.13557195663452,U,b,0,0,n,6158154400,4.05944347381592,U,b,0 ,0,n,7697693000,3.62540078163147,U,b,0,0,n,9237231600,2.85986256599426,U,b,0,0,n,10776770200 ,2.18297958374023,U,b,0,0,n,12316308800,1.17655670642853,U,b,0,0,n,13855847400,0.347820192575455 ,U,b,0,0,n,15395386000,-0.366577237844467,U,b,0,0,n,16934924599,-1.09029531478882 ,U,b,0,0,n,18474463200,-1.74698579311371,U,b,0,0,n,20014001800,-2.44420027732849,U ,b,0,0,n,21553540400,-2.97867250442505,U,b,0,0,n,23093079000,-3.39718413352966,U,b ,0,0,n,24632617600,-3.89829802513123,U,b,0,0,n,26172156200,-4.24523448944092,U,b,0 ,0,n,27711694800,-4.61545133590698,U,b,0,0,n,29251233400,-5.1646728515625,U,b,0,0 ,n,30790772000,-5.51125335693359,U,b,0,0,n,32330310599,-5.47752332687378,U,b,0,0,n ,33869849199,-5.44819688796997,U,b,0,0,n,35409387800,-5.32071018218994,U,b,0,0,n,36948926400 ,-4.96187162399292,U,b,0,0,n,38488465000,-4.81472444534302,U,b,0,0,n,40028003600,-4.13895320892334 ,U,b,0,0,n,41567542200,-3.27768659591675,U,b,0,0,n,43107080800,-2.37439298629761,U ,b,0,0,n,44646619400,-1.28811514377594,U,b,0,0,n,46186158000,-0.288704723119736,U ,b,0,0,n,47725696599,0.67198520898819,U,b,0,0,n,49265235200,1.60916042327881,U,b,0 ,0,n,50804773799,2.30767464637756,U,b,0,0,n,52344312400,2.86376881599426,U,b,0,0,n ,53883850999,3.23078083992004,U,b,0,0,n,55423389600,3.68322896957397,U,b,0,0,n,56962928200 ,4.08369541168213,U,b,0,0,n,58502466800,4.21172285079956,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.67002356052399 KeyVer: 4005 KeyCount: 39 Key: 0,1.02220392227173,U,s,0,0,n,1539538600,0.167892381548882,U,b,0,0,n,3079077200,-0.637000322341919 ,U,b,0,0,n,4618615800,-0.925316989421844,U,b,0,0,n,6158154400,-1.36520564556122,U ,b,0,0,n,7697693000,-1.84533095359802,U,b,0,0,n,9237231600,-2.23502159118652,U,b,0 ,0,n,10776770200,-2.01210498809814,U,b,0,0,n,12316308800,-1.81131029129028,U,b,0,0 ,n,13855847400,-1.84087896347046,U,b,0,0,n,15395386000,-1.74684023857117,U,b,0,0,n ,16934924599,-1.53738188743591,U,b,0,0,n,18474463200,-1.4414336681366,U,b,0,0,n,20014001800 ,-1.29482781887054,U,b,0,0,n,21553540400,-1.30542862415314,U,b,0,0,n,23093079000,-1.32650983333588 ,U,b,0,0,n,24632617600,-1.40518617630005,U,b,0,0,n,26172156200,-1.25028300285339,U ,b,0,0,n,27711694800,-0.850792050361633,U,b,0,0,n,29251233400,-0.589711844921112,U ,b,0,0,n,30790772000,0.0867897123098373,U,b,0,0,n,32330310599,0.569887399673462,U ,b,0,0,n,33869849199,1.26170039176941,U,b,0,0,n,35409387800,1.79960250854492,U,b,0 ,0,n,36948926400,2.37976002693176,U,b,0,0,n,38488465000,2.57381725311279,U,b,0,0,n ,40028003600,2.38427472114563,U,b,0,0,n,41567542200,2.21694493293762,U,b,0,0,n,43107080800 ,2.23055410385132,U,b,0,0,n,44646619400,2.21480751037598,U,b,0,0,n,46186158000,2.36171722412109 ,U,b,0,0,n,47725696599,2.17892503738403,U,b,0,0,n,49265235200,1.92848348617554,U,b ,0,0,n,50804773799,1.6868542432785,U,b,0,0,n,52344312400,1.66690671443939,U,b,0,0 ,n,53883850999,1.72546064853668,U,b,0,0,n,55423389600,1.68861603736877,U,b,0,0,n,56962928200 ,1.40967237949371,U,b,0,0,n,58502466800,1.02225828170776,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 5.42585277557373 KeyVer: 4005 KeyCount: 39 Key: 0,4.80606698989868,U,s,0,0,n,1539538600,4.26464557647705,U,b,0,0,n,3079077200,3.94525647163391 ,U,b,0,0,n,4618615800,3.7967050075531,U,b,0,0,n,6158154400,3.74953985214233,U,b,0 ,0,n,7697693000,3.87530541419983,U,b,0,0,n,9237231600,3.94919872283936,U,b,0,0,n,10776770200 ,4.26064586639404,U,b,0,0,n,12316308800,4.54842376708984,U,b,0,0,n,13855847400,4.6888599395752 ,U,b,0,0,n,15395386000,4.71331167221069,U,b,0,0,n,16934924599,4.81206798553467,U,b ,0,0,n,18474463200,4.90908050537109,U,b,0,0,n,20014001800,4.85114526748657,U,b,0,0 ,n,21553540400,4.82134103775024,U,b,0,0,n,23093079000,4.70961236953735,U,b,0,0,n,24632617600 ,4.72870874404907,U,b,0,0,n,26172156200,4.50869178771973,U,b,0,0,n,27711694800,4.48198318481445 ,U,b,0,0,n,29251233400,4.35396671295166,U,b,0,0,n,30790772000,4.0003228187561,U,b ,0,0,n,32330310599,4.0010232925415,U,b,0,0,n,33869849199,4.12131357192993,U,b,0,0 ,n,35409387800,4.45102882385254,U,b,0,0,n,36948926400,4.70578002929688,U,b,0,0,n,38488465000 ,4.82036638259888,U,b,0,0,n,40028003600,4.94186496734619,U,b,0,0,n,41567542200,5.00629329681396 ,U,b,0,0,n,43107080800,5.04687213897705,U,b,0,0,n,44646619400,5.13646745681763,U,b ,0,0,n,46186158000,5.23398971557617,U,b,0,0,n,47725696599,5.24857759475708,U,b,0,0 ,n,49265235200,5.22112941741943,U,b,0,0,n,50804773799,5.31984567642212,U,b,0,0,n,52344312400 ,5.44548368453979,U,b,0,0,n,53883850999,5.50193071365356,U,b,0,0,n,55423389600,5.27972841262817 ,U,b,0,0,n,56962928200,5.16126871109009,U,b,0,0,n,58502466800,4.80600023269653,U,s ,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::Spine3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.5439600944519 Color: 1,0,0 } Channel: "Y" { Default: -0.00439895549789071 Color: 0,1,0 } Channel: "Z" { Default: 2.22052122467176e-007 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.87556838989258 KeyVer: 4005 KeyCount: 39 Key: 0,4.26669597625732,U,s,0,0,n,1539538600,4.27680253982544,U,b,0,0,n,3079077200,4.17009782791138 ,U,b,0,0,n,4618615800,4.07435750961304,U,b,0,0,n,6158154400,3.9749960899353,U,b,0 ,0,n,7697693000,3.52316498756409,U,b,0,0,n,9237231600,2.73670935630798,U,b,0,0,n,10776770200 ,2.0722713470459,U,b,0,0,n,12316308800,1.07881498336792,U,b,0,0,n,13855847400,0.249576792120934 ,U,b,0,0,n,15395386000,-0.458571910858154,U,b,0,0,n,16934924599,-1.17001628875732 ,U,b,0,0,n,18474463200,-1.82126951217651,U,b,0,0,n,20014001800,-2.50925016403198,U ,b,0,0,n,21553540400,-3.0449001789093,U,b,0,0,n,23093079000,-3.46653723716736,U,b ,0,0,n,24632617600,-3.97277998924255,U,b,0,0,n,26172156200,-4.3066520690918,U,b,0 ,0,n,27711694800,-4.65047311782837,U,b,0,0,n,29251233400,-5.1808910369873,U,b,0,0 ,n,30790772000,-5.4833869934082,U,b,0,0,n,32330310599,-5.42137479782104,U,b,0,0,n ,33869849199,-5.35843563079834,U,b,0,0,n,35409387800,-5.21149396896362,U,b,0,0,n,36948926400 ,-4.83615112304688,U,b,0,0,n,38488465000,-4.6847825050354,U,b,0,0,n,40028003600,-4.01465129852295 ,U,b,0,0,n,41567542200,-3.15834784507751,U,b,0,0,n,43107080800,-2.25137376785278,U ,b,0,0,n,44646619400,-1.16114020347595,U,b,0,0,n,46186158000,-0.149704769253731,U ,b,0,0,n,47725696599,0.802072882652283,U,b,0,0,n,49265235200,1.7240469455719,U,b,0 ,0,n,50804773799,2.4079372882843,U,b,0,0,n,52344312400,2.96216678619385,U,b,0,0,n ,53883850999,3.3323380947113,U,b,0,0,n,55423389600,3.78085255622864,U,b,0,0,n,56962928200 ,4.16305780410767,U,b,0,0,n,58502466800,4.26670169830322,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.50368475914001 KeyVer: 4005 KeyCount: 39 Key: 0,0.787933647632599,U,s,0,0,n,1539538600,-0.0718894153833389,U,b,0,0,n,3079077200 ,-0.876808941364288,U,b,0,0,n,4618615800,-1.16508829593658,U,b,0,0,n,6158154400,-1.60057973861694 ,U,b,0,0,n,7697693000,-2.04907512664795,U,b,0,0,n,9237231600,-2.39522051811218,U,b ,0,0,n,10776770200,-2.13475513458252,U,b,0,0,n,12316308800,-1.87663209438324,U,b,0 ,0,n,13855847400,-1.85837459564209,U,b,0,0,n,15395386000,-1.7230316400528,U,b,0,0 ,n,16934924599,-1.47123837471008,U,b,0,0,n,18474463200,-1.33587408065796,U,b,0,0,n ,20014001800,-1.14628183841705,U,b,0,0,n,21553540400,-1.12079334259033,U,b,0,0,n,23093079000 ,-1.1088809967041,U,b,0,0,n,24632617600,-1.14973270893097,U,b,0,0,n,26172156200,-0.975321590900421 ,U,b,0,0,n,27711694800,-0.558445692062378,U,b,0,0,n,29251233400,-0.272979378700256 ,U,b,0,0,n,30790772000,0.416422963142395,U,b,0,0,n,32330310599,0.89169704914093,U ,b,0,0,n,33869849199,1.56528568267822,U,b,0,0,n,35409387800,2.0847864151001,U,b,0 ,0,n,36948926400,2.63056588172913,U,b,0,0,n,38488465000,2.81273245811462,U,b,0,0,n ,40028003600,2.59515976905823,U,b,0,0,n,41567542200,2.38934993743896,U,b,0,0,n,43107080800 ,2.35858821868896,U,b,0,0,n,44646619400,2.28465604782104,U,b,0,0,n,46186158000,2.37341809272766 ,U,b,0,0,n,47725696599,2.13284397125244,U,b,0,0,n,49265235200,1.82704448699951,U,b ,0,0,n,50804773799,1.54720211029053,U,b,0,0,n,52344312400,1.4956259727478,U,b,0,0 ,n,53883850999,1.53234124183655,U,b,0,0,n,55423389600,1.47209131717682,U,b,0,0,n,56962928200 ,1.1745845079422,U,b,0,0,n,58502466800,0.787983417510986,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.25706577301025 KeyVer: 4005 KeyCount: 39 Key: 0,2.6328809261322,U,s,0,0,n,1539538600,2.08385896682739,U,b,0,0,n,3079077200,1.75937294960022 ,U,b,0,0,n,4618615800,1.60967719554901,U,b,0,0,n,6158154400,1.56865286827087,U,b,0 ,0,n,7697693000,1.71073079109192,U,b,0,0,n,9237231600,1.78903245925903,U,b,0,0,n,10776770200 ,2.10083317756653,U,b,0,0,n,12316308800,2.38934850692749,U,b,0,0,n,13855847400,2.52897930145264 ,U,b,0,0,n,15395386000,2.55087852478027,U,b,0,0,n,16934924599,2.64600205421448,U,b ,0,0,n,18474463200,2.73904800415039,U,b,0,0,n,20014001800,2.67513680458069,U,b,0,0 ,n,21553540400,2.63869524002075,U,b,0,0,n,23093079000,2.51980686187744,U,b,0,0,n,24632617600 ,2.52859234809875,U,b,0,0,n,26172156200,2.30488014221191,U,b,0,0,n,27711694800,2.27742004394531 ,U,b,0,0,n,29251233400,2.1473240852356,U,b,0,0,n,30790772000,1.79020631313324,U,b ,0,0,n,32330310599,1.79111814498901,U,b,0,0,n,33869849199,1.92334270477295,U,b,0,0 ,n,35409387800,2.27183723449707,U,b,0,0,n,36948926400,2.55550336837769,U,b,0,0,n,38488465000 ,2.68779468536377,U,b,0,0,n,40028003600,2.80555462837219,U,b,0,0,n,41567542200,2.86495971679688 ,U,b,0,0,n,43107080800,2.89918780326843,U,b,0,0,n,44646619400,2.97587370872498,U,b ,0,0,n,46186158000,3.06427073478699,U,b,0,0,n,47725696599,3.07335162162781,U,b,0,0 ,n,49265235200,3.04690766334534,U,b,0,0,n,50804773799,3.15141630172729,U,b,0,0,n,52344312400 ,3.27663040161133,U,b,0,0,n,53883850999,3.32874035835266,U,b,0,0,n,55423389600,3.10568165779114 ,U,b,0,0,n,56962928200,2.98690795898438,U,b,0,0,n,58502466800,2.63281226158142,U,s ,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1.00000011920929 Color: 1,0,0 } Channel: "Y" { Default: 1.00000011920929 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::Neck" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 5.53625154495239 Color: 1,0,0 } Channel: "Y" { Default: -0.00288246641866863 Color: 0,1,0 } Channel: "Z" { Default: 5.17475982064752e-008 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -6.63933753967285 KeyVer: 4005 KeyCount: 39 Key: 0,-6.50985336303711,U,s,0,0,n,1539538600,-6.34243774414063,U,b,0,0,n,3079077200,-6.17116498947144 ,U,b,0,0,n,4618615800,-5.87293672561646,U,b,0,0,n,6158154400,-5.55335283279419,U,b ,0,0,n,7697693000,-5.16724252700806,U,b,0,0,n,9237231600,-4.86049747467041,U,b,0,0 ,n,10776770200,-4.56406736373901,U,b,0,0,n,12316308800,-4.35878133773804,U,b,0,0,n ,13855847400,-4.1984076499939,U,b,0,0,n,15395386000,-4.01876831054688,U,b,0,0,n,16934924599 ,-3.94514966011047,U,b,0,0,n,18474463200,-3.90984058380127,U,b,0,0,n,20014001800,-3.87429475784302 ,U,b,0,0,n,21553540400,-3.91103887557983,U,b,0,0,n,23093079000,-3.95947742462158,U ,b,0,0,n,24632617600,-3.98367023468018,U,b,0,0,n,26172156200,-4.059006690979,U,b,0 ,0,n,27711694800,-4.12500429153442,U,b,0,0,n,29251233400,-4.20732021331787,U,b,0,0 ,n,30790772000,-4.26929712295532,U,b,0,0,n,32330310599,-4.3888988494873,U,b,0,0,n ,33869849199,-4.51629686355591,U,b,0,0,n,35409387800,-4.82515239715576,U,b,0,0,n,36948926400 ,-5.16099500656128,U,b,0,0,n,38488465000,-5.4272632598877,U,b,0,0,n,40028003600,-5.64088487625122 ,U,b,0,0,n,41567542200,-5.92425155639648,U,b,0,0,n,43107080800,-6.19848823547363,U ,b,0,0,n,44646619400,-6.3860936164856,U,b,0,0,n,46186158000,-6.53064870834351,U,b ,0,0,n,47725696599,-6.60066270828247,U,b,0,0,n,49265235200,-6.60256814956665,U,b,0 ,0,n,50804773799,-6.59214687347412,U,b,0,0,n,52344312400,-6.64807653427124,U,b,0,0 ,n,53883850999,-6.63038301467896,U,b,0,0,n,55423389600,-6.58388376235962,U,b,0,0,n ,56962928200,-6.55215167999268,U,b,0,0,n,58502466800,-6.50949907302856,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.94592773914337 KeyVer: 4005 KeyCount: 39 Key: 0,3.10782909393311,U,s,0,0,n,1539538600,3.15372705459595,U,b,0,0,n,3079077200,3.26352620124817 ,U,b,0,0,n,4618615800,3.30459785461426,U,b,0,0,n,6158154400,3.31880855560303,U,b,0 ,0,n,7697693000,3.29872751235962,U,b,0,0,n,9237231600,3.13967609405518,U,b,0,0,n,10776770200 ,2.92873477935791,U,b,0,0,n,12316308800,2.65748357772827,U,b,0,0,n,13855847400,2.3400297164917 ,U,b,0,0,n,15395386000,2.1075394153595,U,b,0,0,n,16934924599,1.84664964675903,U,b ,0,0,n,18474463200,1.65942215919495,U,b,0,0,n,20014001800,1.39008951187134,U,b,0,0 ,n,21553540400,1.17455327510834,U,b,0,0,n,23093079000,0.948708355426788,U,b,0,0,n ,24632617600,0.663798213005066,U,b,0,0,n,26172156200,0.37201651930809,U,b,0,0,n,27711694800 ,0.142322227358818,U,b,0,0,n,29251233400,-0.291439920663834,U,b,0,0,n,30790772000 ,-0.494728177785873,U,b,0,0,n,32330310599,-0.605236172676086,U,b,0,0,n,33869849199 ,-0.874600470066071,U,b,0,0,n,35409387800,-1.04559946060181,U,b,0,0,n,36948926400 ,-1.14511287212372,U,b,0,0,n,38488465000,-1.08204221725464,U,b,0,0,n,40028003600,-1.01589608192444 ,U,b,0,0,n,41567542200,-0.755206346511841,U,b,0,0,n,43107080800,-0.465363204479218 ,U,b,0,0,n,44646619400,-0.0203571431338787,U,b,0,0,n,46186158000,0.389585077762604 ,U,b,0,0,n,47725696599,0.828381180763245,U,b,0,0,n,49265235200,1.28664910793304,U ,b,0,0,n,50804773799,1.70117425918579,U,b,0,0,n,52344312400,1.99125242233276,U,b,0 ,0,n,53883850999,2.28074097633362,U,b,0,0,n,55423389600,2.57186055183411,U,b,0,0,n ,56962928200,2.87960648536682,U,b,0,0,n,58502466800,3.10924959182739,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 28.7092266082764 KeyVer: 4005 KeyCount: 39 Key: 0,28.8077507019043,U,s,0,0,n,1539538600,29.0686359405518,U,b,0,0,n,3079077200,29.230375289917 ,U,b,0,0,n,4618615800,29.4623489379883,U,b,0,0,n,6158154400,29.5202732086182,U,b,0 ,0,n,7697693000,29.3986206054688,U,b,0,0,n,9237231600,29.4671821594238,U,b,0,0,n,10776770200 ,29.613374710083,U,b,0,0,n,12316308800,29.572452545166,U,b,0,0,n,13855847400,29.5821571350098 ,U,b,0,0,n,15395386000,29.4724025726318,U,b,0,0,n,16934924599,29.2568225860596,U,b ,0,0,n,18474463200,28.9960174560547,U,b,0,0,n,20014001800,28.753662109375,U,b,0,0 ,n,21553540400,28.610689163208,U,b,0,0,n,23093079000,28.4758110046387,U,b,0,0,n,24632617600 ,28.5176010131836,U,b,0,0,n,26172156200,28.3947124481201,U,b,0,0,n,27711694800,28.2426300048828 ,U,b,0,0,n,29251233400,28.2624759674072,U,b,0,0,n,30790772000,28.4060916900635,U,b ,0,0,n,32330310599,28.5278511047363,U,b,0,0,n,33869849199,28.5773525238037,U,b,0,0 ,n,35409387800,28.598762512207,U,b,0,0,n,36948926400,28.4639167785645,U,b,0,0,n,38488465000 ,28.4530296325684,U,b,0,0,n,40028003600,28.7801837921143,U,b,0,0,n,41567542200,28.9436645507813 ,U,b,0,0,n,43107080800,29.1370334625244,U,b,0,0,n,44646619400,29.283561706543,U,b ,0,0,n,46186158000,29.2753925323486,U,b,0,0,n,47725696599,29.1297664642334,U,b,0,0 ,n,49265235200,28.9833030700684,U,b,0,0,n,50804773799,28.7680988311768,U,b,0,0,n,52344312400 ,28.6983242034912,U,b,0,0,n,53883850999,28.7783298492432,U,b,0,0,n,55423389600,28.7602767944336 ,U,b,0,0,n,56962928200,28.7654609680176,U,b,0,0,n,58502466800,28.807746887207,U,s ,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::Head" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 3.95389556884766 Color: 1,0,0 } Channel: "Y" { Default: 1.09085840449552e-006 Color: 0,1,0 } Channel: "Z" { Default: 9.73389049363504e-008 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.423987865448 KeyVer: 4005 KeyCount: 39 Key: 0,-1.80691289901733,U,s,0,0,n,1539538600,-1.97035908699036,U,b,0,0,n,3079077200,-1.99738276004791 ,U,b,0,0,n,4618615800,-1.61678695678711,U,b,0,0,n,6158154400,-1.11915063858032,U,b ,0,0,n,7697693000,-0.518654227256775,U,b,0,0,n,9237231600,0.552345931529999,U,b,0 ,0,n,10776770200,1.4349992275238,U,b,0,0,n,12316308800,2.70627760887146,U,b,0,0,n ,13855847400,3.98707342147827,U,b,0,0,n,15395386000,4.94014596939087,U,b,0,0,n,16934924599 ,6.09693002700806,U,b,0,0,n,18474463200,7.33829879760742,U,b,0,0,n,20014001800,8.36240577697754 ,U,b,0,0,n,21553540400,9.40591526031494,U,b,0,0,n,23093079000,10.5001678466797,U,b ,0,0,n,24632617600,11.5033760070801,U,b,0,0,n,26172156200,12.3442878723145,U,b,0,0 ,n,27711694800,13.1462364196777,U,b,0,0,n,29251233400,13.7641925811768,U,b,0,0,n,30790772000 ,14.2128038406372,U,b,0,0,n,32330310599,14.6460361480713,U,b,0,0,n,33869849199,14.5374450683594 ,U,b,0,0,n,35409387800,14.0290603637695,U,b,0,0,n,36948926400,13.5150384902954,U,b ,0,0,n,38488465000,12.9726638793945,U,b,0,0,n,40028003600,12.0242357254028,U,b,0,0 ,n,41567542200,10.7238969802856,U,b,0,0,n,43107080800,9.58399200439453,U,b,0,0,n,44646619400 ,8.19679546356201,U,b,0,0,n,46186158000,6.7331109046936,U,b,0,0,n,47725696599,5.37427806854248 ,U,b,0,0,n,49265235200,3.82038307189941,U,b,0,0,n,50804773799,2.52216649055481,U,b ,0,0,n,52344312400,1.22062146663666,U,b,0,0,n,53883850999,0.124715946614742,U,b,0 ,0,n,55423389600,-0.726902782917023,U,b,0,0,n,56962928200,-1.34747731685638,U,b,0 ,0,n,58502466800,-1.80652630329132,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -0.918177843093872 KeyVer: 4005 KeyCount: 39 Key: 0,-0.00161192461382598,U,s,0,0,n,1539538600,0.578881621360779,U,b,0,0,n,3079077200 ,1.42044842243195,U,b,0,0,n,4618615800,1.96717536449432,U,b,0,0,n,6158154400,2.79733824729919 ,U,b,0,0,n,7697693000,3.69697856903076,U,b,0,0,n,9237231600,4.48847103118896,U,b,0 ,0,n,10776770200,4.87794494628906,U,b,0,0,n,12316308800,4.99018144607544,U,b,0,0,n ,13855847400,5.06639528274536,U,b,0,0,n,15395386000,4.82608127593994,U,b,0,0,n,16934924599 ,4.55009651184082,U,b,0,0,n,18474463200,4.32160615921021,U,b,0,0,n,20014001800,3.79053521156311 ,U,b,0,0,n,21553540400,3.46875333786011,U,b,0,0,n,23093079000,2.92119479179382,U,b ,0,0,n,24632617600,2.32047009468079,U,b,0,0,n,26172156200,1.57333052158356,U,b,0,0 ,n,27711694800,0.525623679161072,U,b,0,0,n,29251233400,0.257216960191727,U,b,0,0,n ,30790772000,-0.402374744415283,U,b,0,0,n,32330310599,-0.882453620433807,U,b,0,0,n ,33869849199,-1.94104313850403,U,b,0,0,n,35409387800,-2.51266551017761,U,b,0,0,n,36948926400 ,-2.92598605155945,U,b,0,0,n,38488465000,-2.86707091331482,U,b,0,0,n,40028003600,-2.72080659866333 ,U,b,0,0,n,41567542200,-2.48648309707642,U,b,0,0,n,43107080800,-2.54744982719421,U ,b,0,0,n,44646619400,-2.4865415096283,U,b,0,0,n,46186158000,-2.50900363922119,U,b ,0,0,n,47725696599,-2.17134070396423,U,b,0,0,n,49265235200,-1.68576562404633,U,b,0 ,0,n,50804773799,-1.20596015453339,U,b,0,0,n,52344312400,-0.864884853363037,U,b,0 ,0,n,53883850999,-0.826086103916168,U,b,0,0,n,55423389600,-0.678050816059113,U,b,0 ,0,n,56962928200,-0.438873142004013,U,b,0,0,n,58502466800,-0.000742652104236186,U ,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -18.9311122894287 KeyVer: 4005 KeyCount: 39 Key: 0,-17.5020866394043,U,s,0,0,n,1539538600,-16.2671375274658,U,b,0,0,n,3079077200,-15.3190317153931 ,U,b,0,0,n,4618615800,-14.6331357955933,U,b,0,0,n,6158154400,-14.4730443954468,U,b ,0,0,n,7697693000,-14.6115694046021,U,b,0,0,n,9237231600,-14.9904623031616,U,b,0,0 ,n,10776770200,-15.3826704025269,U,b,0,0,n,12316308800,-16.064432144165,U,b,0,0,n ,13855847400,-16.074275970459,U,b,0,0,n,15395386000,-16.0850944519043,U,b,0,0,n,16934924599 ,-16.1272392272949,U,b,0,0,n,18474463200,-16.2498207092285,U,b,0,0,n,20014001800,-16.3057804107666 ,U,b,0,0,n,21553540400,-16.5470848083496,U,b,0,0,n,23093079000,-16.474048614502,U ,b,0,0,n,24632617600,-16.5594730377197,U,b,0,0,n,26172156200,-16.5632972717285,U,b ,0,0,n,27711694800,-16.7160797119141,U,b,0,0,n,29251233400,-16.4269790649414,U,b,0 ,0,n,30790772000,-15.9650468826294,U,b,0,0,n,32330310599,-15.7378406524658,U,b,0,0 ,n,33869849199,-15.3399515151978,U,b,0,0,n,35409387800,-15.4762744903564,U,b,0,0,n ,36948926400,-15.7865495681763,U,b,0,0,n,38488465000,-16.3693962097168,U,b,0,0,n,40028003600 ,-16.8539447784424,U,b,0,0,n,41567542200,-17.3382911682129,U,b,0,0,n,43107080800,-17.4360446929932 ,U,b,0,0,n,44646619400,-17.5780067443848,U,b,0,0,n,46186158000,-17.8373641967773,U ,b,0,0,n,47725696599,-18.1145343780518,U,b,0,0,n,49265235200,-18.5177230834961,U,b ,0,0,n,50804773799,-18.8919982910156,U,b,0,0,n,52344312400,-18.9383563995361,U,b,0 ,0,n,53883850999,-18.9389743804932,U,b,0,0,n,55423389600,-18.7123146057129,U,b,0,0 ,n,56962928200,-18.2596683502197,U,b,0,0,n,58502466800,-17.5019493103027,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1.00000011920929 Color: 1,0,0 } Channel: "Y" { Default: 1.00000011920929 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_eye_joint1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.22069501876831 Color: 1,0,0 } Channel: "Y" { Default: 1.4060525894165 Color: 0,1,0 } Channel: "Z" { Default: 1.39484596252441 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 3.26757836341858 KeyVer: 4005 KeyCount: 6 Key: 3848846500,3.71123075485229,U,s,58.4978866577148,0,n,9622116250,11.0234661102295,U ,s,0,0,n,15395386000,3.71123075485229,U,s,0,0,n,38488465000,3.71123075485229,U,s,0 ,0,n,44261734750,2,U,s,0,0,n,55808274250,3.71123075485229,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 Color: 0,1,0 } Channel: "Z" { Default: 0 Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_eye_joint" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.29626369476318 Color: 1,0,0 } Channel: "Y" { Default: 1.33319282531738 Color: 0,1,0 } Channel: "Z" { Default: -1.0660924911499 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 3.26757836341858 KeyVer: 4005 KeyCount: 6 Key: 3848846500,3.71123075485229,U,s,58.4978866577148,0,n,9622116250,11.0234661102295,U ,s,0,0,n,15395386000,3.71123075485229,U,s,0,0,n,38488465000,3.71123075485229,U,s,0 ,0,n,44261734750,2,U,s,0,0,n,55808274250,3.71123075485229,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 Color: 0,1,0 } Channel: "Z" { Default: 0 Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_eyeBall_joint2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.48259973526001 Color: 1,0,0 } Channel: "Y" { Default: 3.2479395866394 Color: 0,1,0 } Channel: "Z" { Default: 1.27459120750427 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.07939505577087 KeyVer: 4005 KeyCount: 9 Key: 0,4.6336350440979,U,s,0,0,n,3848846500,2.58416104316711,U,s,0,0,n,7697693000,2.18038606643677 ,U,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,1.6339545249939 ,U,s,0,-4.90186357498169,n,42337311500,-3.50988411903381,U,s,-4.90186357498169,24.4305572509766 ,n,50035004500,0,U,s,24.4305572509766,27.8018093109131,n,57732697500,4.6336350440979 ,U,s,27.8018093109131,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 KeyVer: 4005 KeyCount: 9 Key: 0,0,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,0,U,s,0,0,n,19244232500,0,U,s,0,0 ,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500,0,U,s,0,0,n,50035004500 ,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.00536951329559088 KeyVer: 4005 KeyCount: 9 Key: 0,0.0343648828566074,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,6.8687949180603,U ,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500 ,0,U,s,0,0,n,50035004500,0,U,s,0,0,n,57732697500,0.0343648828566074,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_eyeBall_joint" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.57700967788696 Color: 1,0,0 } Channel: "Y" { Default: 3.10706281661987 Color: 0,1,0 } Channel: "Z" { Default: -1.20767879486084 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 0.292065471410751 KeyVer: 4005 KeyCount: 9 Key: 0,1.86921894550323,U,s,0,0,n,3848846500,2.58416104316711,U,s,0,0,n,7697693000,2.18038606643677 ,U,s,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,1.6339545249939 ,U,s,0,-4.90186357498169,n,42337311500,-3.50988411903381,U,s,-4.90186357498169,0,n ,50035004500,0,U,s,0,0,n,57732697500,1.86921894550323,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0.0640802830457687 KeyVer: 4005 KeyCount: 9 Key: 0,0.41011381149292,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,0,U,s,0,0,n,19244232500 ,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500,0,U,s,0,0 ,n,50035004500,0,U,s,0,0,n,57732697500,0.41011381149292,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.30150443315506 KeyVer: 4005 KeyCount: 9 Key: 0,1.92962849140167,U,s,0,0,n,3848846500,0,U,s,0,0,n,7697693000,6.8687949180603,U,s ,0,0,n,19244232500,0,U,s,0,0,n,30790772000,0,U,s,0,0,n,34639618500,0,U,s,0,0,n,42337311500 ,0,U,s,0,0,n,50035004500,0,U,s,0,0,n,57732697500,1.92962849140167,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_UpperArm" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 6.71029043197632 KeyVer: 4005 KeyCount: 39 Key: 0,6.70492362976074,U,s,0,0,n,1539538600,6.71029472351074,U,b,0,0,n,3079077200,6.7145791053772 ,U,b,0,0,n,4618615800,6.72306871414185,U,b,0,0,n,6158154400,6.73136234283447,U,b,0 ,0,n,7697693000,6.74064540863037,U,b,0,0,n,9237231600,6.74988317489624,U,b,0,0,n,10776770200 ,6.75938081741333,U,b,0,0,n,12316308800,6.76633453369141,U,b,0,0,n,13855847400,6.77258920669556 ,U,b,0,0,n,15395386000,6.77790832519531,U,b,0,0,n,16934924599,6.78056287765503,U,b ,0,0,n,18474463200,6.78159475326538,U,b,0,0,n,20014001800,6.78307914733887,U,b,0,0 ,n,21553540400,6.78289890289307,U,b,0,0,n,23093079000,6.78241062164307,U,b,0,0,n,24632617600 ,6.78321647644043,U,b,0,0,n,26172156200,6.78207731246948,U,b,0,0,n,27711694800,6.78065013885498 ,U,b,0,0,n,29251233400,6.77971506118774,U,b,0,0,n,30790772000,6.77910661697388,U,b ,0,0,n,32330310599,6.77692222595215,U,b,0,0,n,33869849199,6.77424430847168,U,b,0,0 ,n,35409387800,6.766930103302,U,b,0,0,n,36948926400,6.75801753997803,U,b,0,0,n,38488465000 ,6.75124311447144,U,b,0,0,n,40028003600,6.74721002578735,U,b,0,0,n,41567542200,6.74049711227417 ,U,b,0,0,n,43107080800,6.7338342666626,U,b,0,0,n,44646619400,6.72872543334961,U,b ,0,0,n,46186158000,6.72364711761475,U,b,0,0,n,47725696599,6.71943998336792,U,b,0,0 ,n,49265235200,6.71657228469849,U,b,0,0,n,50804773799,6.71349239349365,U,b,0,0,n,52344312400 ,6.70969724655151,U,b,0,0,n,53883850999,6.70849370956421,U,b,0,0,n,55423389600,6.70741271972656 ,U,b,0,0,n,56962928200,6.70566749572754,U,b,0,0,n,58502466800,6.70491981506348,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0.844819128513336 KeyVer: 4005 KeyCount: 39 Key: 0,0.887522101402283,U,s,0,0,n,1539538600,0.863622903823853,U,b,0,0,n,3079077200,0.844627976417542 ,U,b,0,0,n,4618615800,0.804719626903534,U,b,0,0,n,6158154400,0.764341175556183,U,b ,0,0,n,7697693000,0.717564165592194,U,b,0,0,n,9237231600,0.669339299201965,U,b,0,0 ,n,10776770200,0.617936432361603,U,b,0,0,n,12316308800,0.578567922115326,U,b,0,0,n ,13855847400,0.541216611862183,U,b,0,0,n,15395386000,0.508421957492828,U,b,0,0,n,16934924599 ,0.489598900079727,U,b,0,0,n,18474463200,0.48047736287117,U,b,0,0,n,20014001800,0.466469615697861 ,U,b,0,0,n,21553540400,0.462405294179916,U,b,0,0,n,23093079000,0.459077715873718,U ,b,0,0,n,24632617600,0.445806592702866,U,b,0,0,n,26172156200,0.442016631364822,U,b ,0,0,n,27711694800,0.440998107194901,U,b,0,0,n,29251233400,0.427376478910446,U,b,0 ,0,n,30790772000,0.421175062656403,U,b,0,0,n,32330310599,0.427798241376877,U,b,0,0 ,n,33869849199,0.428231120109558,U,b,0,0,n,35409387800,0.457660555839539,U,b,0,0,n ,36948926400,0.497647345066071,U,b,0,0,n,38488465000,0.535084784030914,U,b,0,0,n,40028003600 ,0.559000313282013,U,b,0,0,n,41567542200,0.605636775493622,U,b,0,0,n,43107080800,0.651965856552124 ,U,b,0,0,n,44646619400,0.69654244184494,U,b,0,0,n,46186158000,0.736880421638489,U ,b,0,0,n,47725696599,0.77210545539856,U,b,0,0,n,49265235200,0.799710333347321,U,b ,0,0,n,50804773799,0.824783504009247,U,b,0,0,n,52344312400,0.848529458045959,U,b,0 ,0,n,53883850999,0.859884083271027,U,b,0,0,n,55423389600,0.86971640586853,U,b,0,0 ,n,56962928200,0.881754159927368,U,b,0,0,n,58502466800,0.88755214214325,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.0320546366274357 KeyVer: 4005 KeyCount: 39 Key: 0,-0.127745091915131,U,s,0,0,n,1539538600,-0.145422741770744,U,b,0,0,n,3079077200 ,-0.170472517609596,U,b,0,0,n,4618615800,-0.193888619542122,U,b,0,0,n,6158154400,-0.212876334786415 ,U,b,0,0,n,7697693000,-0.228747516870499,U,b,0,0,n,9237231600,-0.224704831838608,U ,b,0,0,n,10776770200,-0.214349955320358,U,b,0,0,n,12316308800,-0.189209207892418,U ,b,0,0,n,13855847400,-0.15633636713028,U,b,0,0,n,15395386000,-0.13415415585041,U,b ,0,0,n,16934924599,-0.10144080221653,U,b,0,0,n,18474463200,-0.0757490321993828,U,b ,0,0,n,20014001800,-0.0395854488015175,U,b,0,0,n,21553540400,-0.007827153429389,U ,b,0,0,n,23093079000,0.0257970038801432,U,b,0,0,n,24632617600,0.0636618435382843,U ,b,0,0,n,26172156200,0.107155330479145,U,b,0,0,n,27711694800,0.142453283071518,U,b ,0,0,n,29251233400,0.203028917312622,U,b,0,0,n,30790772000,0.230993941426277,U,b,0 ,0,n,32330310599,0.250197023153305,U,b,0,0,n,33869849199,0.29137721657753,U,b,0,0 ,n,35409387800,0.329647749662399,U,b,0,0,n,36948926400,0.361892372369766,U,b,0,0,n ,38488465000,0.367755472660065,U,b,0,0,n,40028003600,0.366333961486816,U,b,0,0,n,41567542200 ,0.345156729221344,U,b,0,0,n,43107080800,0.319288522005081,U,b,0,0,n,44646619400,0.269180327653885 ,U,b,0,0,n,46186158000,0.22319570183754,U,b,0,0,n,47725696599,0.171182468533516,U ,b,0,0,n,49265235200,0.113110974431038,U,b,0,0,n,50804773799,0.0609440170228481,U ,b,0,0,n,52344312400,0.02670475281775,U,b,0,0,n,53883850999,-0.0130311502143741,U ,b,0,0,n,55423389600,-0.0532764717936516,U,b,0,0,n,56962928200,-0.0952207893133163 ,U,b,0,0,n,58502466800,-0.127948939800262,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 9.80766296386719 KeyVer: 4005 KeyCount: 39 Key: 0,16.9826946258545,U,s,0,0,n,1539538600,15.2837333679199,U,b,0,0,n,3079077200,12.0478639602661 ,U,b,0,0,n,4618615800,8.41190242767334,U,b,0,0,n,6158154400,2.71401858329773,U,b,0 ,0,n,7697693000,-4.82485151290894,U,b,0,0,n,9237231600,-14.3338193893433,U,b,0,0,n ,10776770200,-23.7518463134766,U,b,0,0,n,12316308800,-31.0170440673828,U,b,0,0,n,13855847400 ,-34.6520652770996,U,b,0,0,n,15395386000,-36.7015991210938,U,b,0,0,n,16934924599,-37.3537254333496 ,U,b,0,0,n,18474463200,-36.9178771972656,U,b,0,0,n,20014001800,-36.8466300964355,U ,b,0,0,n,21553540400,-37.2962875366211,U,b,0,0,n,23093079000,-38.6570053100586,U,b ,0,0,n,24632617600,-40.3761177062988,U,b,0,0,n,26172156200,-41.8821411132813,U,b,0 ,0,n,27711694800,-43.0481491088867,U,b,0,0,n,29251233400,-42.8388023376465,U,b,0,0 ,n,30790772000,-42.094352722168,U,b,0,0,n,32330310599,-40.7864265441895,U,b,0,0,n ,33869849199,-38.3787155151367,U,b,0,0,n,35409387800,-35.8413162231445,U,b,0,0,n,36948926400 ,-32.3488426208496,U,b,0,0,n,38488465000,-28.7637310028076,U,b,0,0,n,40028003600,-25.234806060791 ,U,b,0,0,n,41567542200,-21.5375747680664,U,b,0,0,n,43107080800,-16.471170425415,U ,b,0,0,n,44646619400,-11.5995597839355,U,b,0,0,n,46186158000,-7.04941606521606,U,b ,0,0,n,47725696599,-1.98724484443665,U,b,0,0,n,49265235200,2.71954369544983,U,b,0 ,0,n,50804773799,6.87707614898682,U,b,0,0,n,52344312400,10.3503646850586,U,b,0,0,n ,53883850999,13.1687927246094,U,b,0,0,n,55423389600,15.5003986358643,U,b,0,0,n,56962928200 ,16.5852966308594,U,b,0,0,n,58502466800,16.984582901001,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 60.3215827941895 KeyVer: 4005 KeyCount: 39 Key: 0,55.3202247619629,U,s,0,0,n,1539538600,55.8422508239746,U,b,0,0,n,3079077200,57.1821212768555 ,U,b,0,0,n,4618615800,59.2548980712891,U,b,0,0,n,6158154400,61.8618850708008,U,b,0 ,0,n,7697693000,63.9062004089355,U,b,0,0,n,9237231600,64.3101577758789,U,b,0,0,n,10776770200 ,62.8249626159668,U,b,0,0,n,12316308800,59.9055480957031,U,b,0,0,n,13855847400,56.5925331115723 ,U,b,0,0,n,15395386000,53.1379661560059,U,b,0,0,n,16934924599,49.4230499267578,U,b ,0,0,n,18474463200,45.5307197570801,U,b,0,0,n,20014001800,42.5207977294922,U,b,0,0 ,n,21553540400,39.7794303894043,U,b,0,0,n,23093079000,38.4957427978516,U,b,0,0,n,24632617600 ,37.6857261657715,U,b,0,0,n,26172156200,37.6584358215332,U,b,0,0,n,27711694800,38.1105613708496 ,U,b,0,0,n,29251233400,39.090259552002,U,b,0,0,n,30790772000,41.0284881591797,U,b ,0,0,n,32330310599,43.6994552612305,U,b,0,0,n,33869849199,46.8158378601074,U,b,0,0 ,n,35409387800,49.7433662414551,U,b,0,0,n,36948926400,52.8002319335938,U,b,0,0,n,38488465000 ,55.3008880615234,U,b,0,0,n,40028003600,58.1388778686523,U,b,0,0,n,41567542200,60.3930511474609 ,U,b,0,0,n,43107080800,62.332691192627,U,b,0,0,n,44646619400,63.6795768737793,U,b ,0,0,n,46186158000,64.0322418212891,U,b,0,0,n,47725696599,63.7863159179688,U,b,0,0 ,n,49265235200,63.0327033996582,U,b,0,0,n,50804773799,61.553783416748,U,b,0,0,n,52344312400 ,60.0933990478516,U,b,0,0,n,53883850999,58.5298194885254,U,b,0,0,n,55423389600,57.0240211486816 ,U,b,0,0,n,56962928200,56.0361404418945,U,b,0,0,n,58502466800,55.3211936950684,U,s ,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 41.7058372497559 KeyVer: 4005 KeyCount: 39 Key: 0,55.2040405273438,U,s,0,0,n,1539538600,52.8664703369141,U,b,0,0,n,3079077200,48.1119689941406 ,U,b,0,0,n,4618615800,42.4333686828613,U,b,0,0,n,6158154400,33.6661376953125,U,b,0 ,0,n,7697693000,22.3993339538574,U,b,0,0,n,9237231600,9.23760795593262,U,b,0,0,n,10776770200 ,-4.42471551895142,U,b,0,0,n,12316308800,-15.7571239471436,U,b,0,0,n,13855847400,-22.9064769744873 ,U,b,0,0,n,15395386000,-28.384593963623,U,b,0,0,n,16934924599,-32.1765480041504,U ,b,0,0,n,18474463200,-34.3293991088867,U,b,0,0,n,20014001800,-36.0268135070801,U,b ,0,0,n,21553540400,-36.5310897827148,U,b,0,0,n,23093079000,-36.3647804260254,U,b,0 ,0,n,24632617600,-35.6887817382813,U,b,0,0,n,26172156200,-34.4839859008789,U,b,0,0 ,n,27711694800,-32.8246421813965,U,b,0,0,n,29251233400,-29.8716449737549,U,b,0,0,n ,30790772000,-27.3139991760254,U,b,0,0,n,32330310599,-24.8920955657959,U,b,0,0,n,33869849199 ,-22.1051235198975,U,b,0,0,n,35409387800,-20.3003692626953,U,b,0,0,n,36948926400,-17.1650848388672 ,U,b,0,0,n,38488465000,-13.7075223922729,U,b,0,0,n,40028003600,-10.035083770752,U ,b,0,0,n,41567542200,-5.99591302871704,U,b,0,0,n,43107080800,0.598311722278595,U,b ,0,0,n,44646619400,7.38008689880371,U,b,0,0,n,46186158000,14.5007495880127,U,b,0,0 ,n,47725696599,22.3570003509521,U,b,0,0,n,49265235200,29.7417755126953,U,b,0,0,n,50804773799 ,36.7603721618652,U,b,0,0,n,52344312400,42.6216659545898,U,b,0,0,n,53883850999,47.6522636413574 ,U,b,0,0,n,55423389600,51.803897857666,U,b,0,0,n,56962928200,54.003833770752,U,b,0 ,0,n,58502466800,55.2058143615723,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Forearm" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 13.1421842575073 Color: 1,0,0 } Channel: "Y" { Default: -1.00144292858317e-009 Color: 0,1,0 } Channel: "Z" { Default: -3.49096410445782e-007 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 33.6098442077637 KeyVer: 4005 KeyCount: 34 Key: 0,33.1224403381348,U,s,0,0,n,1539538600,32.457447052002,U,b,0,0,n,3079077200,31.5667266845703 ,U,b,0,0,n,4618615800,30.6230945587158,U,b,0,0,n,6158154400,29.1058235168457,U,b,0 ,0,n,7697693000,27.9974880218506,U,b,0,0,n,9237231600,26.9857597351074,U,b,0,0,n,10776770200 ,28.2865829467773,U,b,0,0,n,12316308800,28.7060928344727,U,b,0,0,n,13855847400,29.6066951751709 ,U,b,0,0,n,15395386000,30.2187213897705,U,b,0,0.291801244020462,n,16927226907,30.479700088501 ,U,b,0.291801244020462,0,n,16934924599,30.4797306060791,U,b,0,0,n,18474463200,30.3821811676025 ,U,b,0,0,n,20014001800,30.2519302368164,U,b,0,0,n,21553540400,32.4879837036133,U,b ,0,0,n,23093079000,34.8040733337402,U,b,0,0,n,24632617600,37.1908416748047,U,b,0,0 ,n,26172156200,39.7268104553223,U,b,0,0,n,27711694800,41.327465057373,U,b,0,0,n,29251233400 ,42.6436882019043,U,b,0,0,n,30790772000,43.6135673522949,U,b,0,0,n,32330310599,44.1939086914063 ,U,b,0,0.765070915222168,n,33862151507,44.8781661987305,U,b,0.765070915222168,0,n ,33869849199,44.878246307373,U,b,0,0,n,35409387800,45.6656455993652,U,b,0,0,n,36948926400 ,45.7556114196777,U,b,0,0,n,38488465000,44.8779182434082,U,b,0,0,n,43107080800,35.0560188293457 ,U,s,0,0,n,52344312400,33.6024856567383,U,b,0,0,n,53883850999,33.241039276123,U,b ,0,0,n,55423389600,33.156364440918,U,b,0,0,n,56962928200,33.0711517333984,U,b,0,0 ,n,58502466800,33.1224403381348,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 17.2327537536621 KeyVer: 4005 KeyCount: 34 Key: 0,15.9406099319458,U,s,0,0,n,1539538600,15.0744190216064,U,b,0,0,n,3079077200,14.4963121414185 ,U,b,0,0,n,4618615800,14.1559629440308,U,b,0,0,n,6158154400,13.4684705734253,U,b,0 ,0,n,7697693000,13.2306642532349,U,b,0,0,n,9237231600,13.6654262542725,U,b,0,0,n,10776770200 ,15.0204601287842,U,b,0,0,n,12316308800,16.6233959197998,U,b,0,0,n,13855847400,18.8415203094482 ,U,b,0,0,n,15395386000,21.0987339019775,U,b,0,2.51604461669922,n,16927226907,23.3490123748779 ,U,b,2.51604461669922,0,n,16934924599,23.3492755889893,U,b,0,0,n,18474463200,25.5145130157471 ,U,b,0,0,n,20014001800,26.8924980163574,U,b,0,0,n,21553540400,28.4013957977295,U,b ,0,0,n,23093079000,29.082836151123,U,b,0,0,n,24632617600,29.4776000976563,U,b,0,0 ,n,26172156200,30.0483322143555,U,b,0,0,n,27711694800,30.6130046844482,U,b,0,0,n,29251233400 ,32.0320091247559,U,b,0,0,n,30790772000,33.3066329956055,U,b,0,0,n,32330310599,34.1900024414063 ,U,b,0,0.681286036968231,n,33862151507,34.7993240356445,U,b,0.681286036968231,0,n ,33869849199,34.7993965148926,U,b,0,0,n,35409387800,34.4317779541016,U,b,0,0,n,36948926400 ,33.3744621276855,U,b,0,99.9999313354492,n,38488465000,31.6565208435059,U,p,100,-48.1283378601074 ,n,n,43107080800,23.2906723022461,U,s,-48.1283378601074,0,n,52344312400,17.2180194854736 ,U,b,0,0,n,53883850999,16.7862148284912,U,b,0,0,n,55423389600,16.5630378723145,U,b ,0,0,n,56962928200,16.2038249969482,U,b,0,0,n,58502466800,15.9406099319458,U,s,0,0 ,n Color: 0,1,0 } Channel: "Z" { Default: -13.2919816970825 KeyVer: 4005 KeyCount: 34 Key: 0,-11.7080917358398,U,s,25.1469478607178,14.2490406036377,a,0.329832986317342,0.989898998959688 ,1539538600,-11.0514917373657,U,s,14.2490406036377,3.51003432273865,a,0.989898998959688 ,0.329932996319258,3079077200,-10.7581558227539,U,s,3.51003432273865,0.856608271598816 ,a,0.329932996319258,0.329832986317342,4618615800,-10.8174896240234,U,s,0.856608271598816 ,-2.06585907936096,a,0.329832986317342,0.329832986317342,6158154400,-10.7010488510132 ,U,s,-2.06585907936096,-19.8205280303955,a,0.329832986317342,0.329832986317342,7697693000 ,-10.9552135467529,U,s,-19.8205280303955,-37.5635147094727,a,0.329832986317342,0.329832986317342 ,9237231600,-12.0224170684814,U,s,-37.5635147094727,-50.4399909973145,a,0.329832986317342 ,0.329832986317342,10776770200,-13.4594478607178,U,s,-50.4399909973145,-65.4337615966797 ,a,0.329832986317342,0.329932996319258,12316308800,-15.3850831985474,U,s,-65.4337615966797 ,-75.2507934570313,a,0.329932996319258,0.329932996319258,13855847400,-17.8216991424561 ,U,s,-75.2507934570313,-78.0096740722656,a,0.329932996319258,0.329832986317342,15395386000 ,-20.4018020629883,U,s,-78.0096740722656,-80.2831573486328,a,0.32943294630968,0.32943294630968 ,16927226907,-23.0058403015137,U,s,-80.2831573486328,-80.3789749145508,a,0.41224122789572 ,0.416641667980002,16934924599,-23.022575378418,U,s,-80.3789749145508,-77.584098815918 ,a,0.333333336384385,0.329832986317342,18474463200,-25.7554149627686,U,s,-77.584098815918 ,-67.3053665161133,a,0.329832986317342,0.329832986317342,20014001800,-28.1961002349854 ,U,s,-67.3053665161133,-59.4396514892578,a,0.329832986317342,0.329832986317342,21553540400 ,-30.2424392700195,U,s,-59.4396514892578,-52.189884185791,a,0.329832986317342,0.329832986317342 ,23093079000,-32.1587448120117,U,s,-52.189884185791,-39.6041717529297,a,0.329832986317342 ,0.329832986317342,24632617600,-33.7217636108398,U,s,-39.6041717529297,-30.695894241333 ,a,0.329832986317342,0.329832986317342,26172156200,-34.7990226745605,U,s,-30.695894241333 ,-27.6352214813232,a,0.329832986317342,0.329832986317342,27711694800,-35.7681579589844 ,U,s,-27.6352214813232,-13.5598373413086,a,0.329832986317342,0.329932996319258,29251233400 ,-36.6413688659668,U,s,-13.5598373413086,8.68964004516602,a,0.329932996319258,0.329832986317342 ,30790772000,-36.6721458435059,U,s,8.68964004516602,35.5419616699219,a,0.329832986317342 ,0.329932996319258,32330310599,-36.0620613098145,U,s,35.5419616699219,72.1478118896484 ,a,0.32943294630968,0.32943294630968,33862151507,-34.3172492980957,U,s,72.1478118896484 ,72.6112747192383,a,0.41224122789572,0.416641667980002,33869849199,-34.3021697998047 ,U,s,72.6112747192383,93.8272705078125,a,0.333333336384385,0.329832986317342,35409387800 ,-31.235876083374,U,s,93.8272705078125,92.1630859375,a,0.329832986317342,0.329932996319258 ,36948926400,-28.043363571167,U,s,92.1630859375,83.6906509399414,a,0.329932996319258 ,0.989999008961604,38488465000,-25.0916709899902,U,s,83.6906509399414,51.5209655761719 ,a,0.329932996319258,0.109910992105142,43107080800,-18.5216178894043,U,s,51.5209655761719 ,9.80166339874268,a,0.0549054910516134,0.0549054910516134,52344312400,-13.1216468811035 ,U,s,9.80166339874268,8.2679443359375,a,0.329832986317342,0.329932996319258,53883850999 ,-12.8299226760864,U,s,8.2679443359375,11.2652015686035,a,0.329932996319258,0.329932996319258 ,55423389600,-12.5704507827759,U,s,11.2652015686035,12.9353876113892,a,0.329932996319258 ,0.329832986317342,56962928200,-12.0789098739624,U,s,12.9353876113892,9.31368160247803 ,a,0.329832986317342,0.329832986317342,58502466800,-11.7080917358398,U,s,9.31368064880371 ,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Hand" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 10.8255519866943 Color: 1,0,0 } Channel: "Y" { Default: 5.22714969974913e-007 Color: 0,1,0 } Channel: "Z" { Default: 9.90214175544679e-007 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -82.1016998291016 KeyVer: 4005 KeyCount: 4 Key: 0,-74.1737670898438,U,s,0,0,n,28866348750,-72.7173690795898,U,s,0,-2.33024477958679 ,n,44261734750,-94.1353530883789,U,s,-2.33024477958679,0,n,57732697500,-74.1737670898438 ,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 2.46786618232727 KeyVer: 4005 KeyCount: 4 Key: 0,10.0695886611938,U,s,0,0,n,28866348750,-16.6371746063232,U,s,0,42.7308235168457 ,n,44261734750,-12.567925453186,U,s,42.7308235168457,0,n,57732697500,10.0695886611938 ,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.1264545917511 KeyVer: 4005 KeyCount: 4 Key: 0,3.06235289573669,U,s,0,0,n,28866348750,-10.0715522766113,U,s,0,0,n,44261734750,3.22521877288818 ,U,s,0,0,n,57732697500,3.06235289573669,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Thumb1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.62510848045349 Color: 1,0,0 } Channel: "Y" { Default: 0.626630425453186 Color: 0,1,0 } Channel: "Z" { Default: -1.67875993251801 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 119.229835510254 KeyVer: 4005 KeyCount: 3 Key: 0,118.393394470215,U,s,5.76857757568359,0,n,28866348750,121.998748779297,U,s,0,-5.76857757568359 ,n,57732697500,118.393394470215,U,s,-5.76857757568359,0,n Color: 1,0,0 } Channel: "Y" { Default: 30.9591827392578 KeyVer: 4005 KeyCount: 3 Key: 0,28.7888736724854,U,s,14.9676542282104,0,n,28866348750,38.1436576843262,U,s,0,-14.9676542282104 ,n,57732697500,28.7888736724854,U,s,-14.9676542282104,0,n Color: 0,1,0 } Channel: "Z" { Default: 19.9485893249512 KeyVer: 4005 KeyCount: 3 Key: 0,18.4379501342773,U,s,10.4181985855103,0,n,28866348750,24.9493236541748,U,s,0,-10.4181985855103 ,n,57732697500,18.4379501342773,U,s,-10.4181985855103,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Thumb2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.1404322385788 Color: 1,0,0 } Channel: "Y" { Default: 2.85936584987212e-006 KeyVer: 4005 KeyCount: 39 Key: 0,2.859354026441e-006,U,s,0,0,n,1539538600,2.85936357613537e-006,U,b,0,0,n,3079077200 ,2.85935880128818e-006,U,b,0,0,n,4618615800,2.85934333987825e-006,U,b,0,0,n,6158154400 ,2.85935334431997e-006,U,b,0,0,n,7697693000,2.85937585431384e-006,U,b,0,0,n,9237231600 ,2.85934697785706e-006,U,b,0,0,n,10776770200,2.85934856947279e-006,U,b,0,0,n,12316308800 ,2.85936812360887e-006,U,b,0,0,n,13855847400,2.85935698229878e-006,U,b,0,0,n,15395386000 ,2.85934765997808e-006,U,b,0,0,n,16934924599,2.8593317438208e-006,U,b,0,0,n,18474463200 ,2.85935857391451e-006,U,b,0,0,n,20014001800,2.85934129351517e-006,U,b,0,0,n,21553540400 ,2.85933947452577e-006,U,b,0,0,n,23093079000,2.85934697785706e-006,U,b,0,0,n,24632617600 ,2.85938244815043e-006,U,b,0,0,n,26172156200,2.85934675048338e-006,U,b,0,0,n,27711694800 ,2.85933879240474e-006,U,b,0,0,n,29251233400,2.85936357613537e-006,U,b,0,0,n,30790772000 ,2.85932924271037e-006,U,b,0,0,n,32330310599,2.85934129351517e-006,U,b,0,0,n,33869849199 ,2.85938540400821e-006,U,b,0,0,n,35409387800,2.85935652755143e-006,U,b,0,0,n,36948926400 ,2.85935902866186e-006,U,b,0,0,n,38488465000,2.85934970634116e-006,U,b,0,0,n,40028003600 ,2.85934561361501e-006,U,b,0,0,n,41567542200,2.85935470856202e-006,U,b,0,0,n,43107080800 ,2.85935061583587e-006,U,b,0,0,n,44646619400,2.85934856947279e-006,U,b,0,0,n,46186158000 ,2.85935107058322e-006,U,b,0,0,n,47725696599,2.85936084765126e-006,U,b,0,0,n,49265235200 ,2.85934606836236e-006,U,b,0,0,n,50804773799,2.85935948340921e-006,U,b,0,0,n,52344312400 ,2.8593669867405e-006,U,b,0,0,n,53883850999,2.85934493149398e-006,U,b,0,0,n,55423389600 ,2.85936107502494e-006,U,b,0,0,n,56962928200,2.85933651866799e-006,U,b,0,0,n,58502466800 ,2.85935630017775e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -1.81425923528877e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-1.81426310064126e-006,U,s,0,0,n,1539538600,-1.81425798473356e-006,U,b,0,0,n,3079077200 ,-1.81425969003612e-006,U,b,0,0,n,4618615800,-1.81426662493323e-006,U,b,0,0,n,6158154400 ,-1.81426025847031e-006,U,b,0,0,n,7697693000,-1.81425377832056e-006,U,b,0,0,n,9237231600 ,-1.8142668523069e-006,U,b,0,0,n,10776770200,-1.81427822099067e-006,U,b,0,0,n,12316308800 ,-1.81427958523273e-006,U,b,0,0,n,13855847400,-1.81426014478348e-006,U,b,0,0,n,15395386000 ,-1.8142668523069e-006,U,b,0,0,n,16934924599,-1.81426605649904e-006,U,b,0,0,n,18474463200 ,-1.8142650333175e-006,U,b,0,0,n,20014001800,-1.81426287326758e-006,U,b,0,0,n,21553540400 ,-1.81426423750963e-006,U,b,0,0,n,23093079000,-1.8142650333175e-006,U,b,0,0,n,24632617600 ,-1.81425798473356e-006,U,b,0,0,n,26172156200,-1.81426230483339e-006,U,b,0,0,n,27711694800 ,-1.81426526069117e-006,U,b,0,0,n,29251233400,-1.81426048584399e-006,U,b,0,0,n,30790772000 ,-1.81427037659887e-006,U,b,0,0,n,32330310599,-1.81426673862006e-006,U,b,0,0,n,33869849199 ,-1.81425264145219e-006,U,b,0,0,n,35409387800,-1.81426219114655e-006,U,b,0,0,n,36948926400 ,-1.81426025847031e-006,U,b,0,0,n,38488465000,-1.81426275958074e-006,U,b,0,0,n,40028003600 ,-1.81426435119647e-006,U,b,0,0,n,41567542200,-1.8142626458939e-006,U,b,0,0,n,43107080800 ,-1.81426059953083e-006,U,b,0,0,n,44646619400,-1.81426275958074e-006,U,b,0,0,n,46186158000 ,-1.81426389644912e-006,U,b,0,0,n,47725696599,-1.81425798473356e-006,U,b,0,0,n,49265235200 ,-1.81426423750963e-006,U,b,0,0,n,50804773799,-1.81426037215715e-006,U,b,0,0,n,52344312400 ,-1.8142590079151e-006,U,b,0,0,n,53883850999,-1.8142659428122e-006,U,b,0,0,n,55423389600 ,-1.81426457857015e-006,U,b,0,0,n,56962928200,-1.81426139533869e-006,U,b,0,0,n,58502466800 ,-1.81425775735988e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.84072734757501e-006 KeyVer: 4005 KeyCount: 3 Key: 0,2.84072734757501e-006,U,s,0,0,n,28866348750,2.84072734757501e-006,U,s,0,0,n,57732697500 ,2.84072734757501e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.12636920796194e-008 KeyVer: 4005 KeyCount: 3 Key: 0,-3.12636920796194e-008,U,s,0,0,n,28866348750,-3.12636920796194e-008,U,s,0,0,n,57732697500 ,-3.12636920796194e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 17.8534507751465 KeyVer: 4005 KeyCount: 3 Key: 0,17.8534507751465,U,s,0,0,n,28866348750,17.8534507751465,U,s,0,0,n,57732697500,17.8534507751465 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Thumb3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.38246870040894 Color: 1,0,0 } Channel: "Y" { Default: -7.17560169505305e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-7.17653620085912e-007,U,s,0,0,n,1539538600,-7.1756937813916e-007,U,b,0,0,n,3079077200 ,-7.17618945600407e-007,U,b,0,0,n,4618615800,-7.17691989393643e-007,U,b,0,0,n,6158154400 ,-7.17637703928631e-007,U,b,0,0,n,7697693000,-7.17514240022865e-007,U,b,0,0,n,9237231600 ,-7.17667546723533e-007,U,b,0,0,n,10776770200,-7.17693012575182e-007,U,b,0,0,n,12316308800 ,-7.17629006885545e-007,U,b,0,0,n,13855847400,-7.17605075806205e-007,U,b,0,0,n,15395386000 ,-7.17643956704705e-007,U,b,0,0,n,16934924599,-7.17697162144759e-007,U,b,0,0,n,18474463200 ,-7.17614057066385e-007,U,b,0,0,n,20014001800,-7.17667091976182e-007,U,b,0,0,n,21553540400 ,-7.17654870641127e-007,U,b,0,0,n,23093079000,-7.17643558800773e-007,U,b,0,0,n,24632617600 ,-7.17528223503905e-007,U,b,0,0,n,26172156200,-7.17642706149491e-007,U,b,0,0,n,27711694800 ,-7.1768266707295e-007,U,b,0,0,n,29251233400,-7.17556815743592e-007,U,b,0,0,n,30790772000 ,-7.17706939212803e-007,U,b,0,0,n,32330310599,-7.17659133897541e-007,U,b,0,0,n,33869849199 ,-7.1748956997908e-007,U,b,0,0,n,35409387800,-7.17618377166218e-007,U,b,0,0,n,36948926400 ,-7.17610532774415e-007,U,b,0,0,n,38488465000,-7.17649186299241e-007,U,b,0,0,n,40028003600 ,-7.17661009730364e-007,U,b,0,0,n,41567542200,-7.17626903679047e-007,U,b,0,0,n,43107080800 ,-7.17648504178214e-007,U,b,0,0,n,44646619400,-7.17653279025399e-007,U,b,0,0,n,46186158000 ,-7.17646344128298e-007,U,b,0,0,n,47725696599,-7.17615932899207e-007,U,b,0,0,n,49265235200 ,-7.17679540684912e-007,U,b,0,0,n,50804773799,-7.17594559773715e-007,U,b,0,0,n,52344312400 ,-7.17553803042392e-007,U,b,0,0,n,53883850999,-7.17685793460987e-007,U,b,0,0,n,55423389600 ,-7.17604962119367e-007,U,b,0,0,n,56962928200,-7.17740476829931e-007,U,b,0,0,n,58502466800 ,-7.17610760148091e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.67166808246111e-006 KeyVer: 4005 KeyCount: 39 Key: 0,3.67168331649737e-006,U,s,0,0,n,1539538600,3.67167922377121e-006,U,b,0,0,n,3079077200 ,3.6716903650813e-006,U,b,0,0,n,4618615800,3.6716644444823e-006,U,b,0,0,n,6158154400 ,3.67168991033395e-006,U,b,0,0,n,7697693000,3.67168536286044e-006,U,b,0,0,n,9237231600 ,3.67165307579853e-006,U,b,0,0,n,10776770200,3.67159896086378e-006,U,b,0,0,n,12316308800 ,3.67157917935401e-006,U,b,0,0,n,13855847400,3.67167763215548e-006,U,b,0,0,n,15395386000 ,3.67164307135681e-006,U,b,0,0,n,16934924599,3.67166194337187e-006,U,b,0,0,n,18474463200 ,3.6716514841828e-006,U,b,0,0,n,20014001800,3.67166967407684e-006,U,b,0,0,n,21553540400 ,3.67165966963512e-006,U,b,0,0,n,23093079000,3.67165739589836e-006,U,b,0,0,n,24632617600 ,3.67168718184985e-006,U,b,0,0,n,26172156200,3.67167149306624e-006,U,b,0,0,n,27711694800 ,3.67166012438247e-006,U,b,0,0,n,29251233400,3.67167262993462e-006,U,b,0,0,n,30790772000 ,3.67162942893629e-006,U,b,0,0,n,32330310599,3.67164807357767e-006,U,b,0,0,n,33869849199 ,3.67171492143825e-006,U,b,0,0,n,35409387800,3.67167103831889e-006,U,b,0,0,n,36948926400 ,3.67168286175001e-006,U,b,0,0,n,38488465000,3.67166921932949e-006,U,b,0,0,n,40028003600 ,3.67165853276674e-006,U,b,0,0,n,41567542200,3.67166921932949e-006,U,b,0,0,n,43107080800 ,3.67168422599207e-006,U,b,0,0,n,44646619400,3.67167217518727e-006,U,b,0,0,n,46186158000 ,3.67166489922965e-006,U,b,0,0,n,47725696599,3.67170014214935e-006,U,b,0,0,n,49265235200 ,3.67167422155035e-006,U,b,0,0,n,50804773799,3.67167444892402e-006,U,b,0,0,n,52344312400 ,3.67166694559273e-006,U,b,0,0,n,53883850999,3.67166671821906e-006,U,b,0,0,n,55423389600 ,3.67165603165631e-006,U,b,0,0,n,56962928200,3.67171014659107e-006,U,b,0,0,n,58502466800 ,3.67169059245498e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -7.58698934077984e-006 KeyVer: 4005 KeyCount: 3 Key: 0,-7.82498500484508e-006,U,s,0,0,n,28866348750,-5.53656627744203e-006,U,s,0,0,n,57732697500 ,-7.82498500484508e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.2017899229686e-006 KeyVer: 4005 KeyCount: 3 Key: 0,-2.85129135590978e-006,U,s,0,0,n,28866348750,-6.2214699028118e-006,U,s,0,0,n,57732697500 ,-2.85129135590978e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 8.96595764160156 KeyVer: 4005 KeyCount: 3 Key: 0,15.5345325469971,U,s,-45.3005142211914,0,n,28866348750,-12.7782897949219,U,s,0,45.3005142211914 ,n,57732697500,15.5345325469971,U,s,45.3005142211914,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1.00000011920929 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Index1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.34874391555786 Color: 1,0,0 } Channel: "Y" { Default: 0.0162533205002546 Color: 0,1,0 } Channel: "Z" { Default: -1.56133377552032 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 12.0142822265625 KeyVer: 4005 KeyCount: 3 Key: 0,12.0415687561035,U,s,0,0,n,28866348750,11.7792024612427,U,s,0,0,n,57732697500,12.0415687561035 ,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.66459441184998 KeyVer: 4005 KeyCount: 3 Key: 0,0.729777991771698,U,s,6.44700956344604,0,n,28866348750,4.75915908813477,U,s,0,-6.44700956344604 ,n,57732697500,0.729777991771698,U,s,-6.44700956344604,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.92592287063599 KeyVer: 4005 KeyCount: 3 Key: 0,4.65305233001709,U,s,-5.01468372344971,0,n,28866348750,1.51887476444244,U,s,0,5.01468372344971 ,n,57732697500,4.65305233001709,U,s,5.01468372344971,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Index2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.47369563579559 Color: 1,0,0 } Channel: "Y" { Default: 9.02053685081228e-008 KeyVer: 4005 KeyCount: 39 Key: 0,9.01809471542947e-008,U,s,0,0,n,1539538600,9.02013539416657e-008,U,b,0,0,n,3079077200 ,9.01859493751545e-008,U,b,0,0,n,4618615800,9.01821408660908e-008,U,b,0,0,n,6158154400 ,9.01852672541281e-008,U,b,0,0,n,7697693000,9.02065266927821e-008,U,b,0,0,n,9237231600 ,9.01911789696896e-008,U,b,0,0,n,10776770200,9.0199193891749e-008,U,b,0,0,n,12316308800 ,9.02173837857845e-008,U,b,0,0,n,13855847400,9.01934527064441e-008,U,b,0,0,n,15395386000 ,9.02007286640583e-008,U,b,0,0,n,16934924599,9.01750354387332e-008,U,b,0,0,n,18474463200 ,9.02003307601262e-008,U,b,0,0,n,20014001800,9.01879957382334e-008,U,b,0,0,n,21553540400 ,9.01891326066107e-008,U,b,0,0,n,23093079000,9.01899852578936e-008,U,b,0,0,n,24632617600 ,9.02112446965475e-008,U,b,0,0,n,26172156200,9.01916337170405e-008,U,b,0,0,n,27711694800 ,9.01825387700228e-008,U,b,0,0,n,29251233400,9.02052761375671e-008,U,b,0,0,n,30790772000 ,9.01858356883167e-008,U,b,0,0,n,32330310599,9.01923158380669e-008,U,b,0,0,n,33869849199 ,9.0205332980986e-008,U,b,0,0,n,35409387800,9.01928274288366e-008,U,b,0,0,n,36948926400 ,9.01924863683234e-008,U,b,0,0,n,38488465000,9.01877115211391e-008,U,b,0,0,n,40028003600 ,9.01918042472971e-008,U,b,0,0,n,41567542200,9.01911221262708e-008,U,b,0,0,n,43107080800 ,9.01843577594263e-008,U,b,0,0,n,44646619400,9.01877115211391e-008,U,b,0,0,n,46186158000 ,9.01908379091765e-008,U,b,0,0,n,47725696599,9.01838461686566e-008,U,b,0,0,n,49265235200 ,9.01811745279701e-008,U,b,0,0,n,50804773799,9.01978864931152e-008,U,b,0,0,n,52344312400 ,9.02067540664575e-008,U,b,0,0,n,53883850999,9.01823113963474e-008,U,b,0,0,n,55423389600 ,9.01991370483302e-008,U,b,0,0,n,56962928200,9.01576981959806e-008,U,b,0,0,n,58502466800 ,9.01910652828519e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 5.82350480726745e-007 KeyVer: 4005 KeyCount: 39 Key: 0,5.82326151743473e-007,U,s,0,0,n,1539538600,5.82349230171531e-007,U,b,0,0,n,3079077200 ,5.82332347676129e-007,U,b,0,0,n,4618615800,5.82336895149638e-007,U,b,0,0,n,6158154400 ,5.82340476285026e-007,U,b,0,0,n,7697693000,5.82341385779728e-007,U,b,0,0,n,9237231600 ,5.82342522648105e-007,U,b,0,0,n,10776770200,5.82314441999188e-007,U,b,0,0,n,12316308800 ,5.82295001549937e-007,U,b,0,0,n,13855847400,5.82351447064866e-007,U,b,0,0,n,15395386000 ,5.82351106004353e-007,U,b,0,0,n,16934924599,5.82377083446772e-007,U,b,0,0,n,18474463200 ,5.82343091082294e-007,U,b,0,0,n,20014001800,5.8235173128196e-007,U,b,0,0,n,21553540400 ,5.82367988499755e-007,U,b,0,0,n,23093079000,5.82358779865899e-007,U,b,0,0,n,24632617600 ,5.82318875785859e-007,U,b,0,0,n,26172156200,5.82356449285726e-007,U,b,0,0,n,27711694800 ,5.82357188250171e-007,U,b,0,0,n,29251233400,5.82354857669998e-007,U,b,0,0,n,30790772000 ,5.82372024382494e-007,U,b,0,0,n,32330310599,5.82362361001287e-007,U,b,0,0,n,33869849199 ,5.82329448661767e-007,U,b,0,0,n,35409387800,5.82343602673063e-007,U,b,0,0,n,36948926400 ,5.82338316235109e-007,U,b,0,0,n,38488465000,5.82341101562633e-007,U,b,0,0,n,40028003600 ,5.82344796384859e-007,U,b,0,0,n,41567542200,5.82344682698022e-007,U,b,0,0,n,43107080800 ,5.82339623633743e-007,U,b,0,0,n,44646619400,5.82343147925712e-007,U,b,0,0,n,46186158000 ,5.82340021537675e-007,U,b,0,0,n,47725696599,5.82328937070997e-007,U,b,0,0,n,49265235200 ,5.82332177145872e-007,U,b,0,0,n,50804773799,5.82350423883327e-007,U,b,0,0,n,52344312400 ,5.82350480726745e-007,U,b,0,0,n,53883850999,5.82337179366732e-007,U,b,0,0,n,55423389600 ,5.82336895149638e-007,U,b,0,0,n,56962928200,5.82324446440907e-007,U,b,0,0,n,58502466800 ,5.82345819566399e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 7.5388690845557e-008 KeyVer: 4005 KeyCount: 3 Key: 0,-3.31086305038752e-008,U,s,0,0,n,28866348750,1.01013483799761e-006,U,s,0,0,n,57732697500 ,-3.31086305038752e-008,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.20740196002589e-006 KeyVer: 4005 KeyCount: 3 Key: 0,-3.20717754220823e-006,U,s,0,0,n,28866348750,-3.20933622788289e-006,U,s,0,0,n,57732697500 ,-3.20717754220823e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 15.1926651000977 KeyVer: 4005 KeyCount: 3 Key: 0,16.6813163757324,U,s,-10.2665567398071,0,n,28866348750,10.2647180557251,U,s,0,10.2665567398071 ,n,57732697500,16.6813163757324,U,s,10.2665567398071,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Index3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.06284534931183 Color: 1,0,0 } Channel: "Y" { Default: 1.39810509836025e-007 KeyVer: 4005 KeyCount: 39 Key: 0,1.39732492243638e-007,U,s,0,0,n,1539538600,1.3980223911858e-007,U,b,0,0,n,3079077200 ,1.39752614813915e-007,U,b,0,0,n,4618615800,1.39736016535608e-007,U,b,0,0,n,6158154400 ,1.39755968575628e-007,U,b,0,0,n,7697693000,1.39812925681326e-007,U,b,0,0,n,9237231600 ,1.39759947614948e-007,U,b,0,0,n,10776770200,1.39741928251169e-007,U,b,0,0,n,12316308800 ,1.39762278195121e-007,U,b,0,0,n,13855847400,1.39782855512749e-007,U,b,0,0,n,15395386000 ,1.39791211495321e-007,U,b,0,0,n,16934924599,1.39762050821446e-007,U,b,0,0,n,18474463200 ,1.39785186092922e-007,U,b,0,0,n,20014001800,1.39765745643672e-007,U,b,0,0,n,21553540400 ,1.39783026043006e-007,U,b,0,0,n,23093079000,1.39776943797187e-007,U,b,0,0,n,24632617600 ,1.39798999043705e-007,U,b,0,0,n,26172156200,1.39775465868297e-007,U,b,0,0,n,27711694800 ,1.39756082262466e-007,U,b,0,0,n,29251233400,1.39815313104918e-007,U,b,0,0,n,30790772000 ,1.39769895213249e-007,U,b,0,0,n,32330310599,1.39782400765398e-007,U,b,0,0,n,33869849199 ,1.39803034926445e-007,U,b,0,0,n,35409387800,1.39772225793422e-007,U,b,0,0,n,36948926400 ,1.39768587814615e-007,U,b,0,0,n,38488465000,1.39760402362299e-007,U,b,0,0,n,40028003600 ,1.39764154027944e-007,U,b,0,0,n,41567542200,1.39769383622479e-007,U,b,0,0,n,43107080800 ,1.39751193728443e-007,U,b,0,0,n,44646619400,1.39759151807084e-007,U,b,0,0,n,46186158000 ,1.39761539230676e-007,U,b,0,0,n,47725696599,1.39746191507584e-007,U,b,0,0,n,49265235200 ,1.3973340173834e-007,U,b,0,0,n,50804773799,1.39792518893955e-007,U,b,0,0,n,52344312400 ,1.39813835176028e-007,U,b,0,0,n,53883850999,1.39737267090823e-007,U,b,0,0,n,55423389600 ,1.39780070185225e-007,U,b,0,0,n,56962928200,1.39676615162898e-007,U,b,0,0,n,58502466800 ,1.39774897434108e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 2.21882010009722e-006 KeyVer: 4005 KeyCount: 39 Key: 0,2.21871368921711e-006,U,s,0,0,n,1539538600,2.21881691686576e-006,U,b,0,0,n,3079077200 ,2.21874915951048e-006,U,b,0,0,n,4618615800,2.21872642214294e-006,U,b,0,0,n,6158154400 ,2.21876712203084e-006,U,b,0,0,n,7697693000,2.21881509787636e-006,U,b,0,0,n,9237231600 ,2.21874961425783e-006,U,b,0,0,n,10776770200,2.21863956539892e-006,U,b,0,0,n,12316308800 ,2.21860045712674e-006,U,b,0,0,n,13855847400,2.21880782191874e-006,U,b,0,0,n,15395386000 ,2.21878758566163e-006,U,b,0,0,n,16934924599,2.21884261009109e-006,U,b,0,0,n,18474463200 ,2.21877462536213e-006,U,b,0,0,n,20014001800,2.2187832655618e-006,U,b,0,0,n,21553540400 ,2.21883010453894e-006,U,b,0,0,n,23093079000,2.21880645767669e-006,U,b,0,0,n,24632617600 ,2.21875552597339e-006,U,b,0,0,n,26172156200,2.21879395212454e-006,U,b,0,0,n,27711694800 ,2.21878553929855e-006,U,b,0,0,n,29251233400,2.21883988160698e-006,U,b,0,0,n,30790772000 ,2.21880782191874e-006,U,b,0,0,n,32330310599,2.21880964090815e-006,U,b,0,0,n,33869849199 ,2.21880395656626e-006,U,b,0,0,n,35409387800,2.21877712647256e-006,U,b,0,0,n,36948926400 ,2.21876962314127e-006,U,b,0,0,n,38488465000,2.21876280193101e-006,U,b,0,0,n,40028003600 ,2.21876166506263e-006,U,b,0,0,n,41567542200,2.21877621697786e-006,U,b,0,0,n,43107080800 ,2.2187573449628e-006,U,b,0,0,n,44646619400,2.21876325667836e-006,U,b,0,0,n,46186158000 ,2.21875416173134e-006,U,b,0,0,n,47725696599,2.21874188355287e-006,U,b,0,0,n,49265235200 ,2.21872051042737e-006,U,b,0,0,n,50804773799,2.21880964090815e-006,U,b,0,0,n,52344312400 ,2.2188221464603e-006,U,b,0,0,n,53883850999,2.21872892325337e-006,U,b,0,0,n,55423389600 ,2.2187573449628e-006,U,b,0,0,n,56962928200,2.21868208427622e-006,U,b,0,0,n,58502466800 ,2.21879372475087e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -7.97497079929599e-007 KeyVer: 4005 KeyCount: 3 Key: 0,-7.97497079929599e-007,U,s,0,0,n,28866348750,-7.97497079929599e-007,U,s,0,0,n,57732697500 ,-7.97497079929599e-007,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 7.67177255056595e-007 KeyVer: 4005 KeyCount: 3 Key: 0,7.67177255056595e-007,U,s,0,0,n,28866348750,7.67177255056595e-007,U,s,0,0,n,57732697500 ,7.67177255056595e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -6.41338004925274e-008 KeyVer: 4005 KeyCount: 3 Key: 0,-6.41338004925274e-008,U,s,0,0,n,28866348750,-6.41338004925274e-008,U,s,0,0,n,57732697500 ,-6.41338004925274e-008,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Middle1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.35998678207397 Color: 1,0,0 } Channel: "Y" { Default: -0.000294537370791659 KeyVer: 4005 KeyCount: 32 Key: 0,-0.000294537399895489,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,-0.000294537370791659 ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-0.000294537399895489,U ,b,0,0,a,0.329832986317342,0.329832986317342,4618615800,-0.000294537399895489,U,b ,0,0,a,0.329832986317342,0.329832986317342,6158154400,-0.000294537370791659,U,s,0 ,0,a,0.329832986317342,0.329832986317342,7697693000,-0.000294537399895489,U,s,0,0 ,a,0.329832986317342,0.329832986317342,9237231600,-0.000294537370791659,U,b,0,0,a ,0.329832986317342,0.329832986317342,10776770200,-0.000294537370791659,U,b,0,0,a,0.329832986317342 ,0.329832986317342,12316308800,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342 ,13855847400,-0.000294537399895489,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000 ,-0.000294537370791659,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,-0.000294537399895489 ,U,b,0,0,a,0.33033303632692,0.989999008961604,18474463200,-0.000294537399895489,U ,b,0,0,a,0.989898998959688,0.329832986317342,20014001800,-0.000294537370791659,U,b ,0,0,a,0.329832986317342,0.329832986317342,21553540400,-0.000294537370791659,U,b,0 ,0,a,0.329832986317342,0.989898998959688,23093079000,-0.000294537399895489,U,b,0,0 ,a,0.989898998959688,0.329832986317342,24632617600,-0.000294537399895489,U,b,0,0,a ,0.329832986317342,0.989898998959688,26172156200,-0.000294537370791659,U,s,0,0,a,0.989898998959688 ,0.329832986317342,27711694800,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342 ,29251233400,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342,30790772000 ,-0.000294537399895489,U,b,0,0,a,0.329832986317342,0.329832986317342,32330310599,-0.000294537370791659 ,U,s,0,0,a,0.32943294630968,0.32943294630968,33862151507,-0.000294537399895489,U,b ,0,0,a,0.33033303632692,0.33033303632692,35409387800,-0.000294537399895489,U,b,0,0 ,a,0.329832986317342,0.989898998959688,43107080800,-0.000294537399895489,U,s,0,0,a ,0.989898998959688,0.329832986317342,44646619400,-0.000294537399895489,U,b,0,0,a,0.329832986317342 ,0.329832986317342,46186158000,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342 ,47725696599,-0.000294537370791659,U,b,0,0,a,0.329832986317342,0.329832986317342,53883850999 ,-0.000294537370791659,U,s,0,0,a,0.329832986317342,0.989898998959688,55423389600,-0.000294537370791659 ,U,b,0,0,a,0.989898998959688,0.329832986317342,56962928200,-0.000294537399895489,U ,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,-0.000294537370791659,U,s ,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -0.366859555244446 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.96983647346497 KeyVer: 4005 KeyCount: 3 Key: 0,2.01983451843262,U,s,0,0,n,28866348750,1.53908538818359,U,s,0,0,n,57732697500,2.01983451843262 ,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.10134339332581 KeyVer: 4005 KeyCount: 3 Key: 0,0.871148407459259,U,s,0,0,n,28866348750,3.08456206321716,U,s,0,0,n,57732697500,0.871148407459259 ,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 14.2388792037964 KeyVer: 4005 KeyCount: 3 Key: 0,16.4038619995117,U,s,-14.9309139251709,0,n,28866348750,7.07204008102417,U,s,0,14.9309139251709 ,n,57732697500,16.4038619995117,U,s,14.9309139251709,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Middle2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.52912437915802 Color: 1,0,0 } Channel: "Y" { Default: 7.80884704454365e-007 KeyVer: 4005 KeyCount: 39 Key: 0,7.80865661909047e-007,U,s,0,0,n,1539538600,7.8088197597026e-007,U,b,0,0,n,3079077200 ,7.8087049359965e-007,U,b,0,0,n,4618615800,7.80863388172293e-007,U,b,0,0,n,6158154400 ,7.80869470418111e-007,U,b,0,0,n,7697693000,7.80888228746335e-007,U,b,0,0,n,9237231600 ,7.8086998200888e-007,U,b,0,0,n,10776770200,7.80873051553499e-007,U,b,0,0,n,12316308800 ,7.80886580287188e-007,U,b,0,0,n,13855847400,7.80875041073159e-007,U,b,0,0,n,15395386000 ,7.80878281148034e-007,U,b,0,0,n,16934924599,7.80859750193486e-007,U,b,0,0,n,18474463200 ,7.80878735895385e-007,U,b,0,0,n,20014001800,7.80869243044435e-007,U,b,0,0,n,21553540400 ,7.80870550443069e-007,U,b,0,0,n,23093079000,7.80877428496751e-007,U,b,0,0,n,24632617600 ,7.8089044563967e-007,U,b,0,0,n,26172156200,7.80873165240337e-007,U,b,0,0,n,27711694800 ,7.80864638727508e-007,U,b,0,0,n,29251233400,7.80885727635905e-007,U,b,0,0,n,30790772000 ,7.80864979788021e-007,U,b,0,0,n,32330310599,7.80871971528541e-007,U,b,0,0,n,33869849199 ,7.8088896771078e-007,U,b,0,0,n,35409387800,7.8087401789162e-007,U,b,0,0,n,36948926400 ,7.8087447263897e-007,U,b,0,0,n,38488465000,7.80869129357598e-007,U,b,0,0,n,40028003600 ,7.8087100519042e-007,U,b,0,0,n,41567542200,7.80872596806148e-007,U,b,0,0,n,43107080800 ,7.80867594585288e-007,U,b,0,0,n,44646619400,7.80869356731273e-007,U,b,0,0,n,46186158000 ,7.8087151678119e-007,U,b,0,0,n,47725696599,7.80869299887854e-007,U,b,0,0,n,49265235200 ,7.80863956606481e-007,U,b,0,0,n,50804773799,7.80878679051966e-007,U,b,0,0,n,52344312400 ,7.80885841322743e-007,U,b,0,0,n,53883850999,7.80863786076225e-007,U,b,0,0,n,55423389600 ,7.80878451678291e-007,U,b,0,0,n,56962928200,7.80847301484755e-007,U,b,0,0,n,58502466800 ,7.80873790517944e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -3.64346448122888e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-3.64378536232834e-007,U,s,0,0,n,1539538600,-3.64348068160325e-007,U,b,0,0,n,3079077200 ,-3.64370009720005e-007,U,b,0,0,n,4618615800,-3.64367906513507e-007,U,b,0,0,n,6158154400 ,-3.64361767424271e-007,U,b,0,0,n,7697693000,-3.64355059900845e-007,U,b,0,0,n,9237231600 ,-3.64359834748029e-007,U,b,0,0,n,10776770200,-3.64392406027036e-007,U,b,0,0,n,12316308800 ,-3.64411050668423e-007,U,b,0,0,n,13855847400,-3.64347613412974e-007,U,b,0,0,n,15395386000 ,-3.6434880712477e-007,U,b,0,0,n,16934924599,-3.64324193924404e-007,U,b,0,0,n,18474463200 ,-3.64356480986316e-007,U,b,0,0,n,20014001800,-3.64349887149729e-007,U,b,0,0,n,21553540400 ,-3.64332493063557e-007,U,b,0,0,n,23093079000,-3.64343520686816e-007,U,b,0,0,n,24632617600 ,-3.64376035122405e-007,U,b,0,0,n,26172156200,-3.6434931871554e-007,U,b,0,0,n,27711694800 ,-3.64346362857759e-007,U,b,0,0,n,29251233400,-3.64340451142198e-007,U,b,0,0,n,30790772000 ,-3.64331924629369e-007,U,b,0,0,n,32330310599,-3.64338404779119e-007,U,b,0,0,n,33869849199 ,-3.64365348559659e-007,U,b,0,0,n,35409387800,-3.64356878890248e-007,U,b,0,0,n,36948926400 ,-3.64362335858459e-007,U,b,0,0,n,38488465000,-3.64361596894014e-007,U,b,0,0,n,40028003600 ,-3.64357163107343e-007,U,b,0,0,n,41567542200,-3.64356139925803e-007,U,b,0,0,n,43107080800 ,-3.64363359039999e-007,U,b,0,0,n,44646619400,-3.64359038940165e-007,U,b,0,0,n,46186158000 ,-3.64362222171621e-007,U,b,0,0,n,47725696599,-3.64374216133001e-007,U,b,0,0,n,49265235200 ,-3.64372738204111e-007,U,b,0,0,n,50804773799,-3.64348068160325e-007,U,b,0,0,n,52344312400 ,-3.64346135484084e-007,U,b,0,0,n,53883850999,-3.64367394922738e-007,U,b,0,0,n,55423389600 ,-3.64363529570255e-007,U,b,0,0,n,56962928200,-3.64385300599679e-007,U,b,0,0,n,58502466800 ,-3.643543209364e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 7.24273192531655e-008 KeyVer: 4005 KeyCount: 3 Key: 0,8.6035655044725e-008,U,s,0,0,n,28866348750,-4.48137171815688e-008,U,s,0,0,n,57732697500 ,8.6035655044725e-008,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 4.3645964069583e-006 KeyVer: 4005 KeyCount: 3 Key: 0,4.36437630924047e-006,U,s,0,0,n,28866348750,4.36649179391679e-006,U,s,0,0,n,57732697500 ,4.36437630924047e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 16.150936126709 KeyVer: 4005 KeyCount: 3 Key: 0,17.1974830627441,U,s,-7.21756458282471,0,n,28866348750,12.686505317688,U,s,0,7.21756458282471 ,n,57732697500,17.1974830627441,U,s,7.21756458282471,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Middle3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.52912795543671 Color: 1,0,0 } Channel: "Y" { Default: 7.2803447892511e-007 KeyVer: 4005 KeyCount: 39 Key: 0,7.2797962502591e-007,U,s,0,0,n,1539538600,7.28029647234507e-007,U,b,0,0,n,3079077200 ,7.27997132798919e-007,U,b,0,0,n,4618615800,7.27972462755133e-007,U,b,0,0,n,6158154400 ,7.27997928606783e-007,U,b,0,0,n,7697693000,7.28044085462898e-007,U,b,0,0,n,9237231600 ,7.27987355730875e-007,U,b,0,0,n,10776770200,7.27965300484357e-007,U,b,0,0,n,12316308800 ,7.27980989267962e-007,U,b,0,0,n,13855847400,7.280130489562e-007,U,b,0,0,n,15395386000 ,7.28010661532608e-007,U,b,0,0,n,16934924599,7.27989515780791e-007,U,b,0,0,n,18474463200 ,7.28010434158932e-007,U,b,0,0,n,20014001800,7.27995541183191e-007,U,b,0,0,n,21553540400 ,7.28005090877559e-007,U,b,0,0,n,23093079000,7.28003385574993e-007,U,b,0,0,n,24632617600 ,7.28034422081691e-007,U,b,0,0,n,26172156200,7.28005772998586e-007,U,b,0,0,n,27711694800 ,7.27986218862497e-007,U,b,0,0,n,29251233400,7.28039196928876e-007,U,b,0,0,n,30790772000 ,7.27985536741471e-007,U,b,0,0,n,32330310599,7.28002703453967e-007,U,b,0,0,n,33869849199 ,7.28046018139139e-007,U,b,0,0,n,35409387800,7.28004977190722e-007,U,b,0,0,n,36948926400 ,7.28005886685423e-007,U,b,0,0,n,38488465000,7.27993040072761e-007,U,b,0,0,n,40028003600 ,7.27993267446436e-007,U,b,0,0,n,41567542200,7.28000770777726e-007,U,b,0,0,n,43107080800 ,7.27991448457033e-007,U,b,0,0,n,44646619400,7.27992812699085e-007,U,b,0,0,n,46186158000 ,7.27994518001651e-007,U,b,0,0,n,47725696599,7.27994972749002e-007,U,b,0,0,n,49265235200 ,7.2797462280505e-007,U,b,0,0,n,50804773799,7.28021234408516e-007,U,b,0,0,n,52344312400 ,7.28036923192121e-007,U,b,0,0,n,53883850999,7.27973826997186e-007,U,b,0,0,n,55423389600 ,7.28007933048502e-007,U,b,0,0,n,56962928200,7.2794119887476e-007,U,b,0,0,n,58502466800 ,7.28010888906283e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 6.76120862408425e-007 KeyVer: 4005 KeyCount: 39 Key: 0,6.75938849781232e-007,U,s,0,0,n,1539538600,6.76115803344146e-007,U,b,0,0,n,3079077200 ,6.76003082844545e-007,U,b,0,0,n,4618615800,6.75943056194228e-007,U,b,0,0,n,6158154400 ,6.76024683343712e-007,U,b,0,0,n,7697693000,6.76129161547578e-007,U,b,0,0,n,9237231600 ,6.7598290343085e-007,U,b,0,0,n,10776770200,6.75802084515453e-007,U,b,0,0,n,12316308800 ,6.75761157253874e-007,U,b,0,0,n,13855847400,6.76091076456942e-007,U,b,0,0,n,15395386000 ,6.76045829095528e-007,U,b,0,0,n,16934924599,6.76112335895596e-007,U,b,0,0,n,18474463200 ,6.76036506774835e-007,U,b,0,0,n,20014001800,6.76036847835348e-007,U,b,0,0,n,21553540400 ,6.76105400998495e-007,U,b,0,0,n,23093079000,6.76072772876068e-007,U,b,0,0,n,24632617600 ,6.76042930081167e-007,U,b,0,0,n,26172156200,6.76061972626485e-007,U,b,0,0,n,27711694800 ,6.76030026625085e-007,U,b,0,0,n,29251233400,6.76153604217689e-007,U,b,0,0,n,30790772000 ,6.76049467074336e-007,U,b,0,0,n,32330310599,6.76072545502393e-007,U,b,0,0,n,33869849199 ,6.76126774123986e-007,U,b,0,0,n,35409387800,6.76039917379967e-007,U,b,0,0,n,36948926400 ,6.76034346724919e-007,U,b,0,0,n,38488465000,6.76010245115322e-007,U,b,0,0,n,40028003600 ,6.76003310218221e-007,U,b,0,0,n,41567542200,6.76035881497228e-007,U,b,0,0,n,43107080800 ,6.76006095545745e-007,U,b,0,0,n,44646619400,6.76010358802159e-007,U,b,0,0,n,46186158000 ,6.75997569032916e-007,U,b,0,0,n,47725696599,6.75995693200093e-007,U,b,0,0,n,49265235200 ,6.75940100336447e-007,U,b,0,0,n,50804773799,6.76096760798828e-007,U,b,0,0,n,52344312400 ,6.76125296195096e-007,U,b,0,0,n,53883850999,6.75948399475601e-007,U,b,0,0,n,55423389600 ,6.76012177791563e-007,U,b,0,0,n,56962928200,6.75872911415354e-007,U,b,0,0,n,58502466800 ,6.76072318128718e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 3.09046095026133e-006 KeyVer: 4005 KeyCount: 3 Key: 0,3.09046095026133e-006,U,s,0,0,n,28866348750,3.09046095026133e-006,U,s,0,0,n,57732697500 ,3.09046095026133e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -2.7093806238554e-006 KeyVer: 4005 KeyCount: 3 Key: 0,-2.7093806238554e-006,U,s,0,0,n,28866348750,-2.7093806238554e-006,U,s,0,0,n,57732697500 ,-2.7093806238554e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.80611896514893 KeyVer: 4005 KeyCount: 3 Key: 0,3.80611896514893,U,s,0,0,n,28866348750,3.80611896514893,U,s,0,0,n,57732697500,3.80611896514893 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Ring1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.29501485824585 Color: 1,0,0 } Channel: "Y" { Default: -0.0947425812482834 Color: 0,1,0 } Channel: "Z" { Default: 0.806466221809387 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -8.98741436004639 KeyVer: 4005 KeyCount: 3 Key: 0,-8.98537254333496,U,s,0,0,n,28866348750,-9.0050106048584,U,s,0,0,n,57732697500,-8.98537254333496 ,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -1.27314984798431 KeyVer: 4005 KeyCount: 3 Key: 0,-1.4012713432312,U,s,0,0,n,28866348750,-0.169334262609482,U,s,0,0,n,57732697500 ,-1.4012713432312,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 19.2985076904297 KeyVer: 4005 KeyCount: 3 Key: 0,20.5749187469482,U,s,-8.8028450012207,0,n,28866348750,15.0731420516968,U,s,0,8.8028450012207 ,n,57732697500,20.5749187469482,U,s,8.8028450012207,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Ring2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.40333545207977 Color: 1,0,0 } Channel: "Y" { Default: 1.16687704121432e-006 KeyVer: 4005 KeyCount: 39 Key: 0,1.16687192530662e-006,U,s,0,0,n,1539538600,1.16687738227483e-006,U,b,0,0,n,3079077200 ,1.16687454010389e-006,U,b,0,0,n,4618615800,1.16686840101465e-006,U,b,0,0,n,6158154400 ,1.16687408535654e-006,U,b,0,0,n,7697693000,1.16688136131415e-006,U,b,0,0,n,9237231600 ,1.16686965156987e-006,U,b,0,0,n,10776770200,1.16686828732782e-006,U,b,0,0,n,12316308800 ,1.16687283480132e-006,U,b,0,0,n,13855847400,1.16687408535654e-006,U,b,0,0,n,15395386000 ,1.16687328954868e-006,U,b,0,0,n,16934924599,1.1668670367726e-006,U,b,0,0,n,18474463200 ,1.16687465379073e-006,U,b,0,0,n,20014001800,1.16687101581192e-006,U,b,0,0,n,21553540400 ,1.16687112949876e-006,U,b,0,0,n,23093079000,1.16687226636714e-006,U,b,0,0,n,24632617600 ,1.16688249818253e-006,U,b,0,0,n,26172156200,1.1668739716697e-006,U,b,0,0,n,27711694800 ,1.16686874207517e-006,U,b,0,0,n,29251233400,1.16687988338526e-006,U,b,0,0,n,30790772000 ,1.16686578621739e-006,U,b,0,0,n,32330310599,1.16687078843825e-006,U,b,0,0,n,33869849199 ,1.16688488560612e-006,U,b,0,0,n,35409387800,1.1668739716697e-006,U,b,0,0,n,36948926400 ,1.16687510853808e-006,U,b,0,0,n,38488465000,1.16687147055927e-006,U,b,0,0,n,40028003600 ,1.16687090212508e-006,U,b,0,0,n,41567542200,1.16687272111449e-006,U,b,0,0,n,43107080800 ,1.16687226636714e-006,U,b,0,0,n,44646619400,1.16687101581192e-006,U,b,0,0,n,46186158000 ,1.16687249374081e-006,U,b,0,0,n,47725696599,1.16687328954868e-006,U,b,0,0,n,49265235200 ,1.16686976525671e-006,U,b,0,0,n,50804773799,1.16687579065911e-006,U,b,0,0,n,52344312400 ,1.166877268588e-006,U,b,0,0,n,53883850999,1.16686862838833e-006,U,b,0,0,n,55423389600 ,1.16687431273022e-006,U,b,0,0,n,56962928200,1.16686669571209e-006,U,b,0,0,n,58502466800 ,1.16687510853808e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -2.30216258501059e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-2.30247451327159e-007,U,s,0,0,n,1539538600,-2.30217693797385e-007,U,b,0,0,n,3079077200 ,-2.30238043741338e-007,U,b,0,0,n,4618615800,-2.30241511189888e-007,U,b,0,0,n,6158154400 ,-2.30232245712614e-007,U,b,0,0,n,7697693000,-2.3021996753414e-007,U,b,0,0,n,9237231600 ,-2.30233695219795e-007,U,b,0,0,n,10776770200,-2.30264788569912e-007,U,b,0,0,n,12316308800 ,-2.30277549917446e-007,U,b,0,0,n,13855847400,-2.30218802244053e-007,U,b,0,0,n,15395386000 ,-2.30223065500468e-007,U,b,0,0,n,16934924599,-2.30204392437372e-007,U,b,0,0,n,18474463200 ,-2.30227726660814e-007,U,b,0,0,n,20014001800,-2.3022445816423e-007,U,b,0,0,n,21553540400 ,-2.302089967543e-007,U,b,0,0,n,23093079000,-2.3021695483294e-007,U,b,0,0,n,24632617600 ,-2.3023744688544e-007,U,b,0,0,n,26172156200,-2.30221900210381e-007,U,b,0,0,n,27711694800 ,-2.30223179187306e-007,U,b,0,0,n,29251233400,-2.30209110441137e-007,U,b,0,0,n,30790772000 ,-2.30213430540971e-007,U,b,0,0,n,32330310599,-2.30214908469861e-007,U,b,0,0,n,33869849199 ,-2.30225282393803e-007,U,b,0,0,n,35409387800,-2.30227868769362e-007,U,b,0,0,n,36948926400 ,-2.30231506748169e-007,U,b,0,0,n,38488465000,-2.30231620435006e-007,U,b,0,0,n,40028003600 ,-2.30230966735689e-007,U,b,0,0,n,41567542200,-2.30227726660814e-007,U,b,0,0,n,43107080800 ,-2.30234576292787e-007,U,b,0,0,n,44646619400,-2.30231535169878e-007,U,b,0,0,n,46186158000 ,-2.30234121545436e-007,U,b,0,0,n,47725696599,-2.30240772225443e-007,U,b,0,0,n,49265235200 ,-2.3024441020425e-007,U,b,0,0,n,50804773799,-2.30219114882857e-007,U,b,0,0,n,52344312400 ,-2.30215732699435e-007,U,b,0,0,n,53883850999,-2.30240715382024e-007,U,b,0,0,n,55423389600 ,-2.30233240472444e-007,U,b,0,0,n,56962928200,-2.30257029443237e-007,U,b,0,0,n,58502466800 ,-2.30224657116196e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.20680271922902e-006 KeyVer: 4005 KeyCount: 3 Key: 0,2.20680271922902e-006,U,s,0,0,n,28866348750,2.20680271922902e-006,U,s,0,0,n,57732697500 ,2.20680271922902e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.11167731581463e-008 KeyVer: 4005 KeyCount: 3 Key: 0,-3.11167731581463e-008,U,s,0,0,n,28866348750,-3.11167731581463e-008,U,s,0,0,n,57732697500 ,-3.11167731581463e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 25.5660648345947 KeyVer: 4005 KeyCount: 3 Key: 0,25.5660648345947,U,s,0,0,n,28866348750,25.5660648345947,U,s,0,0,n,57732697500,25.5660648345947 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1.00000011920929 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Ring3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.38826143741608 Color: 1,0,0 } Channel: "Y" { Default: 2.13072965493666e-007 KeyVer: 4005 KeyCount: 39 Key: 0,2.13108478419599e-007,U,s,0,0,n,1539538600,2.13075622923498e-007,U,b,0,0,n,3079077200 ,2.13098815038393e-007,U,b,0,0,n,4618615800,2.13101998269849e-007,U,b,0,0,n,6158154400 ,2.13095404433261e-007,U,b,0,0,n,7697693000,2.13075736610335e-007,U,b,0,0,n,9237231600 ,2.1309097064659e-007,U,b,0,0,n,10776770200,2.13113480640459e-007,U,b,0,0,n,12316308800 ,2.13117459679779e-007,U,b,0,0,n,13855847400,2.1307801034709e-007,U,b,0,0,n,15395386000 ,2.13079715649656e-007,U,b,0,0,n,16934924599,2.13072439692041e-007,U,b,0,0,n,18474463200 ,2.13083581002138e-007,U,b,0,0,n,20014001800,2.13089151657186e-007,U,b,0,0,n,21553540400 ,2.13071189136826e-007,U,b,0,0,n,23093079000,2.13078692468116e-007,U,b,0,0,n,24632617600 ,2.13085058931028e-007,U,b,0,0,n,26172156200,2.1308198938641e-007,U,b,0,0,n,27711694800 ,2.13088128475647e-007,U,b,0,0,n,29251233400,2.13061184695107e-007,U,b,0,0,n,30790772000 ,2.13078465094441e-007,U,b,0,0,n,32330310599,2.13075736610335e-007,U,b,0,0,n,33869849199 ,2.13068688026397e-007,U,b,0,0,n,35409387800,2.13086309486243e-007,U,b,0,0,n,36948926400 ,2.13087560041458e-007,U,b,0,0,n,38488465000,2.13093130696507e-007,U,b,0,0,n,40028003600 ,2.13096996048989e-007,U,b,0,0,n,41567542200,2.13086195799406e-007,U,b,0,0,n,43107080800 ,2.13096541301638e-007,U,b,0,0,n,44646619400,2.13092675949156e-007,U,b,0,0,n,46186158000 ,2.13093017009669e-007,U,b,0,0,n,47725696599,2.13102111956687e-007,U,b,0,0,n,49265235200 ,2.13105749935494e-007,U,b,0,0,n,50804773799,2.13078237720765e-007,U,b,0,0,n,52344312400 ,2.1307198494469e-007,U,b,0,0,n,53883850999,2.13101770896174e-007,U,b,0,0,n,55423389600 ,2.13088128475647e-007,U,b,0,0,n,56962928200,2.13127236747823e-007,U,b,0,0,n,58502466800 ,2.13085854738893e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -2.23952710598496e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-2.24095174417016e-007,U,s,0,0,n,1539538600,-2.23953122713283e-007,U,b,0,0,n,3079077200 ,-2.24035488827212e-007,U,b,0,0,n,4618615800,-2.24123510861318e-007,U,b,0,0,n,6158154400 ,-2.24031509787892e-007,U,b,0,0,n,7697693000,-2.23915066044356e-007,U,b,0,0,n,9237231600 ,-2.24094833356503e-007,U,b,0,0,n,10776770200,-2.24237396651006e-007,U,b,0,0,n,12316308800 ,-2.24231115453222e-007,U,b,0,0,n,13855847400,-2.23988791958618e-007,U,b,0,0,n,15395386000 ,-2.24051007080561e-007,U,b,0,0,n,16934924599,-2.24029804485326e-007,U,b,0,0,n,18474463200 ,-2.24034835127895e-007,U,b,0,0,n,20014001800,-2.24052826069965e-007,U,b,0,0,n,21553540400 ,-2.24014740979328e-007,U,b,0,0,n,23093079000,-2.24029008677462e-007,U,b,0,0,n,24632617600 ,-2.23967106194323e-007,U,b,0,0,n,26172156200,-2.24020311634376e-007,U,b,0,0,n,27711694800 ,-2.24072493892891e-007,U,b,0,0,n,29251233400,-2.23925383124879e-007,U,b,0,0,n,30790772000 ,-2.24092957523681e-007,U,b,0,0,n,32330310599,-2.24042139507219e-007,U,b,0,0,n,33869849199 ,-2.23881215788424e-007,U,b,0,0,n,35409387800,-2.24027701278828e-007,U,b,0,0,n,36948926400 ,-2.24017753680528e-007,U,b,0,0,n,38488465000,-2.24060357822964e-007,U,b,0,0,n,40028003600 ,-2.24070646481778e-007,U,b,0,0,n,41567542200,-2.24038132046189e-007,U,b,0,0,n,43107080800 ,-2.24052456587742e-007,U,b,0,0,n,44646619400,-2.24061295739375e-007,U,b,0,0,n,46186158000 ,-2.24067832732544e-007,U,b,0,0,n,47725696599,-2.24032163487209e-007,U,b,0,0,n,49265235200 ,-2.24111090574297e-007,U,b,0,0,n,50804773799,-2.23979327529378e-007,U,b,0,0,n,52344312400 ,-2.2394777943191e-007,U,b,0,0,n,53883850999,-2.24117286506953e-007,U,b,0,0,n,55423389600 ,-2.24046431185343e-007,U,b,0,0,n,56962928200,-2.24157759021182e-007,U,b,0,0,n,58502466800 ,-2.23990554104603e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 9.02113819122314 KeyVer: 4005 KeyCount: 3 Key: 0,9.02113819122314,U,s,0,0,n,28866348750,9.02113819122314,U,s,0,0,n,57732697500,9.02113819122314 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Pinky1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 3.97267842292786 Color: 1,0,0 } Channel: "Y" { Default: 0.223487868905067 Color: 0,1,0 } Channel: "Z" { Default: 1.74283754825592 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -20.6544322967529 KeyVer: 4005 KeyCount: 3 Key: 0,-20.6544322967529,U,s,0,0,n,28866348750,-20.6544322967529,U,s,0,0,n,57732697500 ,-20.6544322967529,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -0.819446563720703 KeyVer: 4005 KeyCount: 3 Key: 0,-0.819446563720703,U,s,0,0,n,28866348750,-0.819446563720703,U,s,0,0,n,57732697500 ,-0.819446563720703,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 22.4568309783936 KeyVer: 4005 KeyCount: 3 Key: 0,22.4568309783936,U,s,0,0,n,28866348750,22.4568309783936,U,s,0,0,n,57732697500,22.4568309783936 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Pinky2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.13179302215576 Color: 1,0,0 } Channel: "Y" { Default: -2.16195689972665e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-2.16194939639536e-006,U,s,0,0,n,1539538600,-2.16195576285827e-006,U,b,0,0,n,3079077200 ,-2.16195098801109e-006,U,b,0,0,n,4618615800,-2.16195371649519e-006,U,b,0,0,n,6158154400 ,-2.16195167013211e-006,U,b,0,0,n,7697693000,-2.16195439861622e-006,U,b,0,0,n,9237231600 ,-2.16195667235297e-006,U,b,0,0,n,10776770200,-2.16195417124254e-006,U,b,0,0,n,12316308800 ,-2.16195280700049e-006,U,b,0,0,n,13855847400,-2.161957354474e-006,U,b,0,0,n,15395386000 ,-2.16195871871605e-006,U,b,0,0,n,16934924599,-2.16195985558443e-006,U,b,0,0,n,18474463200 ,-2.1619564449793e-006,U,b,0,0,n,20014001800,-2.16195485336357e-006,U,b,0,0,n,21553540400 ,-2.16195940083708e-006,U,b,0,0,n,23093079000,-2.16195712710032e-006,U,b,0,0,n,24632617600 ,-2.16195098801109e-006,U,b,0,0,n,26172156200,-2.16195576285827e-006,U,b,0,0,n,27711694800 ,-2.16195667235297e-006,U,b,0,0,n,29251233400,-2.16195712710032e-006,U,b,0,0,n,30790772000 ,-2.16196167457383e-006,U,b,0,0,n,32330310599,-2.16195962821075e-006,U,b,0,0,n,33869849199 ,-2.16195076063741e-006,U,b,0,0,n,35409387800,-2.16195439861622e-006,U,b,0,0,n,36948926400 ,-2.16195371649519e-006,U,b,0,0,n,38488465000,-2.16195462598989e-006,U,b,0,0,n,40028003600 ,-2.16195553548459e-006,U,b,0,0,n,41567542200,-2.16195553548459e-006,U,b,0,0,n,43107080800 ,-2.16195189750579e-006,U,b,0,0,n,44646619400,-2.16195439861622e-006,U,b,0,0,n,46186158000 ,-2.16195485336357e-006,U,b,0,0,n,47725696599,-2.16194939639536e-006,U,b,0,0,n,49265235200 ,-2.16195167013211e-006,U,b,0,0,n,50804773799,-2.16195599023195e-006,U,b,0,0,n,52344312400 ,-2.16195712710032e-006,U,b,0,0,n,53883850999,-2.16195508073724e-006,U,b,0,0,n,55423389600 ,-2.16195599023195e-006,U,b,0,0,n,56962928200,-2.16194598579023e-006,U,b,0,0,n,58502466800 ,-2.16195348912152e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -4.03594668796359e-008 KeyVer: 4005 KeyCount: 39 Key: 0,-4.03794615522202e-008,U,s,0,0,n,1539538600,-4.03593958253623e-008,U,b,0,0,n,3079077200 ,-4.03723561248626e-008,U,b,0,0,n,4618615800,-4.03788362746127e-008,U,b,0,0,n,6158154400 ,-4.03698550144327e-008,U,b,0,0,n,7697693000,-4.03582589569851e-008,U,b,0,0,n,9237231600 ,-4.03736066800775e-008,U,b,0,0,n,10776770200,-4.03946955884749e-008,U,b,0,0,n,12316308800 ,-4.03997546527535e-008,U,b,0,0,n,13855847400,-4.03613853450224e-008,U,b,0,0,n,15395386000 ,-4.03677518079348e-008,U,b,0,0,n,16934924599,-4.03571789320267e-008,U,b,0,0,n,18474463200 ,-4.03680360250291e-008,U,b,0,0,n,20014001800,-4.03675812776783e-008,U,b,0,0,n,21553540400 ,-4.03579178964719e-008,U,b,0,0,n,23093079000,-4.03600779463886e-008,U,b,0,0,n,24632617600 ,-4.03679791816103e-008,U,b,0,0,n,26172156200,-4.03641138291277e-008,U,b,0,0,n,27711694800 ,-4.0368092868448e-008,U,b,0,0,n,29251233400,-4.03520061809104e-008,U,b,0,0,n,30790772000 ,-4.03653075409238e-008,U,b,0,0,n,32330310599,-4.03625222133996e-008,U,b,0,0,n,33869849199 ,-4.03565536544193e-008,U,b,0,0,n,35409387800,-4.0368092868448e-008,U,b,0,0,n,36948926400 ,-4.03684339289612e-008,U,b,0,0,n,38488465000,-4.03713897867419e-008,U,b,0,0,n,40028003600 ,-4.03721287511871e-008,U,b,0,0,n,41567542200,-4.03679791816103e-008,U,b,0,0,n,43107080800 ,-4.03719582209305e-008,U,b,0,0,n,44646619400,-4.03732087761455e-008,U,b,0,0,n,46186158000 ,-4.03726403419569e-008,U,b,0,0,n,47725696599,-4.03721287511871e-008,U,b,0,0,n,49265235200 ,-4.03789499614504e-008,U,b,0,0,n,50804773799,-4.03620106226299e-008,U,b,0,0,n,52344312400 ,-4.03589979214303e-008,U,b,0,0,n,53883850999,-4.037298140247e-008,U,b,0,0,n,55423389600 ,-4.03709918828099e-008,U,b,0,0,n,56962928200,-4.03870785703475e-008,U,b,0,0,n,58502466800 ,-4.03644548896409e-008,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 0,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Pinky3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 0.858954668045044 Color: 1,0,0 } Channel: "Y" { Default: 6.74906289077626e-007 KeyVer: 4005 KeyCount: 39 Key: 0,6.74954435453401e-007,U,s,0,0,n,1539538600,6.74907767006516e-007,U,b,0,0,n,3079077200 ,6.74937950861931e-007,U,b,0,0,n,4618615800,6.74953241741605e-007,U,b,0,0,n,6158154400 ,6.74933858135773e-007,U,b,0,0,n,7697693000,6.74903787967196e-007,U,b,0,0,n,9237231600 ,6.7493999722501e-007,U,b,0,0,n,10776770200,6.749794465577e-007,U,b,0,0,n,12316308800 ,6.7498342559702e-007,U,b,0,0,n,13855847400,6.74913906095753e-007,U,b,0,0,n,15395386000 ,6.74924876875593e-007,U,b,0,0,n,16934924599,6.74912882914214e-007,U,b,0,0,n,18474463200 ,6.74925104249269e-007,U,b,0,0,n,20014001800,6.74933914979192e-007,U,b,0,0,n,21553540400 ,6.7491055233404e-007,U,b,0,0,n,23093079000,6.7491953359422e-007,U,b,0,0,n,24632617600 ,6.74912485010282e-007,U,b,0,0,n,26172156200,6.7492055677576e-007,U,b,0,0,n,27711694800 ,6.7493550659492e-007,U,b,0,0,n,29251233400,6.74885086482391e-007,U,b,0,0,n,30790772000 ,6.74931982302951e-007,U,b,0,0,n,32330310599,6.7491953359422e-007,U,b,0,0,n,33869849199 ,6.74878492645803e-007,U,b,0,0,n,35409387800,6.74924763188756e-007,U,b,0,0,n,36948926400 ,6.74919874654734e-007,U,b,0,0,n,38488465000,6.74940679346037e-007,U,b,0,0,n,40028003600 ,6.74937723488256e-007,U,b,0,0,n,41567542200,6.7493300548449e-007,U,b,0,0,n,43107080800 ,6.74938348765863e-007,U,b,0,0,n,44646619400,6.74937155054067e-007,U,b,0,0,n,46186158000 ,6.74937325584324e-007,U,b,0,0,n,47725696599,6.74940679346037e-007,U,b,0,0,n,49265235200 ,6.74954094392888e-007,U,b,0,0,n,50804773799,6.74913849252334e-007,U,b,0,0,n,52344312400 ,6.74904867992154e-007,U,b,0,0,n,53883850999,6.7495199118639e-007,U,b,0,0,n,55423389600 ,6.74932095989789e-007,U,b,0,0,n,56962928200,6.74976604386757e-007,U,b,0,0,n,58502466800 ,6.74920727306016e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 5.44045349215594e-007 KeyVer: 4005 KeyCount: 39 Key: 0,5.43983901479805e-007,U,s,0,0,n,1539538600,5.44046997674741e-007,U,b,0,0,n,3079077200 ,5.44012209502398e-007,U,b,0,0,n,4618615800,5.43964858934487e-007,U,b,0,0,n,6158154400 ,5.44011015790602e-007,U,b,0,0,n,7697693000,5.44067574992368e-007,U,b,0,0,n,9237231600 ,5.43977137112961e-007,U,b,0,0,n,10776770200,5.43919611573074e-007,U,b,0,0,n,12316308800 ,5.43934106644883e-007,U,b,0,0,n,13855847400,5.4402357818617e-007,U,b,0,0,n,15395386000 ,5.43990836376906e-007,U,b,0,0,n,16934924599,5.43996407031955e-007,U,b,0,0,n,18474463200 ,5.44006184099999e-007,U,b,0,0,n,20014001800,5.43995554380672e-007,U,b,0,0,n,21553540400 ,5.44007548342051e-007,U,b,0,0,n,23093079000,5.44003853519826e-007,U,b,0,0,n,24632617600 ,5.44050408279873e-007,U,b,0,0,n,26172156200,5.44012038972141e-007,U,b,0,0,n,27711694800 ,5.43983446732454e-007,U,b,0,0,n,29251233400,5.44058821105864e-007,U,b,0,0,n,30790772000 ,5.43966734767309e-007,U,b,0,0,n,32330310599,5.43995838597766e-007,U,b,0,0,n,33869849199 ,5.44094007182139e-007,U,b,0,0,n,35409387800,5.44010219982738e-007,U,b,0,0,n,36948926400 ,5.44018348591635e-007,U,b,0,0,n,38488465000,5.43995440693834e-007,U,b,0,0,n,40028003600 ,5.44022668691468e-007,U,b,0,0,n,41567542200,5.44001295565977e-007,U,b,0,0,n,43107080800 ,5.44000329227856e-007,U,b,0,0,n,44646619400,5.43994246982038e-007,U,b,0,0,n,46186158000 ,5.43992314305797e-007,U,b,0,0,n,47725696599,5.44014710612828e-007,U,b,0,0,n,49265235200 ,5.43974636002531e-007,U,b,0,0,n,50804773799,5.44031706795067e-007,U,b,0,0,n,52344312400 ,5.44047850326024e-007,U,b,0,0,n,53883850999,5.43968042165943e-007,U,b,0,0,n,55423389600 ,5.44003057711961e-007,U,b,0,0,n,56962928200,5.43954683962511e-007,U,b,0,0,n,58502466800 ,5.44030001492501e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -2.65944640887028e-006 KeyVer: 4005 KeyCount: 3 Key: 0,-2.65944640887028e-006,U,s,0,0,n,28866348750,-2.65944640887028e-006,U,s,0,0,n,57732697500 ,-2.65944640887028e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 2.59772286881343e-006 KeyVer: 4005 KeyCount: 3 Key: 0,2.59772286881343e-006,U,s,0,0,n,28866348750,2.59772286881343e-006,U,s,0,0,n,57732697500 ,2.59772286881343e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.87032294273376 KeyVer: 4005 KeyCount: 3 Key: 0,3.87032294273376,U,s,0,0,n,28866348750,3.87032294273376,U,s,0,0,n,57732697500,3.87032294273376 ,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_UpperArm" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 6.88650560379028 KeyVer: 4005 KeyCount: 39 Key: 0,6.88245630264282,U,s,0,0,n,1539538600,6.88259840011597,U,b,0,0,n,3079077200,6.88238525390625 ,U,b,0,0,n,4618615800,6.88271951675415,U,b,0,0,n,6158154400,6.8830771446228,U,b,0 ,0,n,7697693000,6.88339233398438,U,b,0,0,n,9237231600,6.88417434692383,U,b,0,0,n,10776770200 ,6.8849720954895,U,b,0,0,n,12316308800,6.88582515716553,U,b,0,0,n,13855847400,6.88667011260986 ,U,b,0,0,n,15395386000,6.88687133789063,U,b,0,0,n,16934924599,6.88717222213745,U,b ,0,0,n,18474463200,6.88726329803467,U,b,0,0,n,20014001800,6.88735723495483,U,b,0,0 ,n,21553540400,6.8875527381897,U,b,0,0,n,23093079000,6.88767910003662,U,b,0,0,n,24632617600 ,6.88765716552734,U,b,0,0,n,26172156200,6.88749742507935,U,b,0,0,n,27711694800,6.88721561431885 ,U,b,0,0,n,29251233400,6.8863377571106,U,b,0,0,n,30790772000,6.88587093353271,U,b ,0,0,n,32330310599,6.88577938079834,U,b,0,0,n,33869849199,6.88491153717041,U,b,0,0 ,n,35409387800,6.88456678390503,U,b,0,0,n,36948926400,6.88431692123413,U,b,0,0,n,38488465000 ,6.88466644287109,U,b,0,0,n,40028003600,6.88480854034424,U,b,0,0,n,41567542200,6.88560199737549 ,U,b,0,0,n,43107080800,6.88611030578613,U,b,0,0,n,44646619400,6.88689136505127,U,b ,0,0,n,46186158000,6.88726663589478,U,b,0,0,n,47725696599,6.88753175735474,U,b,0,0 ,n,49265235200,6.88752698898315,U,b,0,0,n,50804773799,6.88715219497681,U,b,0,0,n,52344312400 ,6.88638591766357,U,b,0,0,n,53883850999,6.88557863235474,U,b,0,0,n,55423389600,6.88470077514648 ,U,b,0,0,n,56962928200,6.8834753036499,U,b,0,0,n,58502466800,6.88245010375977,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -1.05879163742065 KeyVer: 4005 KeyCount: 39 Key: 0,-1.11210310459137,U,s,0,0,n,1539538600,-1.09878540039063,U,b,0,0,n,3079077200,-1.08663582801819 ,U,b,0,0,n,4618615800,-1.05570733547211,U,b,0,0,n,6158154400,-1.01684212684631,U,b ,0,0,n,7697693000,-0.963702917098999,U,b,0,0,n,9237231600,-0.916648924350739,U,b,0 ,0,n,10776770200,-0.869555950164795,U,b,0,0,n,12316308800,-0.82675576210022,U,b,0 ,0,n,13855847400,-0.788120031356812,U,b,0,0,n,15395386000,-0.749440610408783,U,b,0 ,0,n,16934924599,-0.720489740371704,U,b,0,0,n,18474463200,-0.699754238128662,U,b,0 ,0,n,20014001800,-0.674665689468384,U,b,0,0,n,21553540400,-0.663979589939117,U,b,0 ,0,n,23093079000,-0.654358148574829,U,b,0,0,n,24632617600,-0.641892373561859,U,b,0 ,0,n,26172156200,-0.632123947143555,U,b,0,0,n,27711694800,-0.624120116233826,U,b,0 ,0,n,29251233400,-0.609970092773438,U,b,0,0,n,30790772000,-0.609074056148529,U,b,0 ,0,n,32330310599,-0.620391249656677,U,b,0,0,n,33869849199,-0.622004628181458,U,b,0 ,0,n,35409387800,-0.651685118675232,U,b,0,0,n,36948926400,-0.685647010803223,U,b,0 ,0,n,38488465000,-0.722791314125061,U,b,0,0,n,40028003600,-0.760441720485687,U,b,0 ,0,n,41567542200,-0.814907848834991,U,b,0,0,n,43107080800,-0.870589911937714,U,b,0 ,0,n,44646619400,-0.923455595970154,U,b,0,0,n,46186158000,-0.965631067752838,U,b,0 ,0,n,47725696599,-0.997197389602661,U,b,0,0,n,49265235200,-1.02122688293457,U,b,0 ,0,n,50804773799,-1.03968989849091,U,b,0,0,n,52344312400,-1.06232905387878,U,b,0,0 ,n,53883850999,-1.07863926887512,U,b,0,0,n,55423389600,-1.08932709693909,U,b,0,0,n ,56962928200,-1.1033319234848,U,b,0,0,n,58502466800,-1.11214053630829,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.188849896192551 KeyVer: 4005 KeyCount: 39 Key: 0,0.0333683639764786,U,s,0,0,n,1539538600,0.0211677849292755,U,b,0,0,n,3079077200 ,-0.000747203070204705,U,b,0,0,n,4618615800,-0.0202529914677143,U,b,0,0,n,6158154400 ,-0.0397112108767033,U,b,0,0,n,7697693000,-0.0607960000634193,U,b,0,0,n,9237231600 ,-0.0570149980485439,U,b,0,0,n,10776770200,-0.0449538640677929,U,b,0,0,n,12316308800 ,-0.022233871743083,U,b,0,0,n,13855847400,0.00965593196451664,U,b,0,0,n,15395386000 ,0.0280408840626478,U,b,0,0,n,16934924599,0.0547827035188675,U,b,0,0,n,18474463200 ,0.0736185312271118,U,b,0,0,n,20014001800,0.103232830762863,U,b,0,0,n,21553540400 ,0.131252929568291,U,b,0,0,n,23093079000,0.161355525255203,U,b,0,0,n,24632617600,0.199970364570618 ,U,b,0,0,n,26172156200,0.240238711237907,U,b,0,0,n,27711694800,0.271609336137772,U ,b,0,0,n,29251233400,0.332380324602127,U,b,0,0,n,30790772000,0.363912492990494,U,b ,0,0,n,32330310599,0.386451750993729,U,b,0,0,n,33869849199,0.428943753242493,U,b,0 ,0,n,35409387800,0.468638628721237,U,b,0,0,n,36948926400,0.498659014701843,U,b,0,0 ,n,38488465000,0.505474805831909,U,b,0,0,n,40028003600,0.513310372829437,U,b,0,0,n ,41567542200,0.498017489910126,U,b,0,0,n,43107080800,0.478882491588593,U,b,0,0,n,44646619400 ,0.434307992458344,U,b,0,0,n,46186158000,0.389823317527771,U,b,0,0,n,47725696599,0.335614562034607 ,U,b,0,0,n,49265235200,0.274973213672638,U,b,0,0,n,50804773799,0.218344405293465,U ,b,0,0,n,52344312400,0.183387950062752,U,b,0,0,n,53883850999,0.146207123994827,U,b ,0,0,n,55423389600,0.10589012503624,U,b,0,0,n,56962928200,0.0645858347415924,U,b,0 ,0,n,58502466800,0.033165380358696,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 42.592903137207 KeyVer: 4005 KeyCount: 39 Key: 0,44.7109642028809,U,s,0,0,n,1539538600,44.272403717041,U,b,0,0,n,3079077200,43.291561126709 ,U,b,0,0,n,4618615800,43.3829116821289,U,b,0,0,n,6158154400,43.6068267822266,U,b,0 ,0,n,7697693000,43.4459953308105,U,b,0,0,n,9237231600,43.0552024841309,U,b,0,0,n,10776770200 ,41.6393737792969,U,b,0,0,n,12316308800,37.9690895080566,U,b,0,0,n,13855847400,31.3963508605957 ,U,b,0,0,n,15395386000,22.7831439971924,U,b,0,0,n,16934924599,13.964674949646,U,b ,0,0,n,18474463200,6.32410335540771,U,b,0,0,n,20014001800,0.700515985488892,U,b,0 ,0,n,21553540400,-2.7228217124939,U,b,0,0,n,23093079000,-5.49841022491455,U,b,0,0 ,n,24632617600,-7.20295286178589,U,b,0,0,n,26172156200,-8.62187576293945,U,b,0,0,n ,27711694800,-8.92302703857422,U,b,0,0,n,29251233400,-9.35063076019287,U,b,0,0,n,30790772000 ,-9.08850574493408,U,b,0,0,n,32330310599,-8.68125152587891,U,b,0,0,n,33869849199,-8.28847694396973 ,U,b,0,0,n,35409387800,-7.52204132080078,U,b,0,0,n,36948926400,-6.15359163284302,U ,b,0,0,n,38488465000,-1.47163212299347,U,b,0,0,n,40028003600,6.91400480270386,U,b ,0,0,n,41567542200,17.7424201965332,U,b,0,0,n,43107080800,26.93092918396,U,b,0,0,n ,44646619400,34.2462463378906,U,b,0,0,n,46186158000,38.5572624206543,U,b,0,0,n,47725696599 ,40.7695350646973,U,b,0,0,n,49265235200,41.7207336425781,U,b,0,0,n,50804773799,42.4444732666016 ,U,b,0,0,n,52344312400,42.6203880310059,U,b,0,0,n,53883850999,42.8334159851074,U,b ,0,0,n,55423389600,43.0791053771973,U,b,0,0,n,56962928200,43.5645904541016,U,b,0,0 ,n,58502466800,44.7094650268555,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -47.3313064575195 KeyVer: 4005 KeyCount: 39 Key: 0,-43.0158767700195,U,s,0,0,n,1539538600,-45.6029663085938,U,b,0,0,n,3079077200,-48.0605049133301 ,U,b,0,0,n,4618615800,-50.648006439209,U,b,0,0,n,6158154400,-53.4504776000977,U,b ,0,0,n,7697693000,-56.3326301574707,U,b,0,0,n,9237231600,-59.084415435791,U,b,0,0 ,n,10776770200,-61.5016593933105,U,b,0,0,n,12316308800,-63.4038963317871,U,b,0,0,n ,13855847400,-64.1003952026367,U,b,0,0,n,15395386000,-63.621452331543,U,b,0,0,n,16934924599 ,-62.5017356872559,U,b,0,0,n,18474463200,-61.0732574462891,U,b,0,0,n,20014001800,-59.551872253418 ,U,b,0,0,n,21553540400,-58.070556640625,U,b,0,0,n,23093079000,-56.5911140441895,U ,b,0,0,n,24632617600,-55.0813217163086,U,b,0,0,n,26172156200,-53.6943817138672,U,b ,0,0,n,27711694800,-52.849666595459,U,b,0,0,n,29251233400,-52.7011375427246,U,b,0 ,0,n,30790772000,-53.8000259399414,U,b,0,0,n,32330310599,-55.2822875976563,U,b,0,0 ,n,33869849199,-57.2988662719727,U,b,0,0,n,35409387800,-59.7174911499023,U,b,0,0,n ,36948926400,-62.4018516540527,U,b,0,0,n,38488465000,-65.99462890625,U,b,0,0,n,40028003600 ,-68.4427185058594,U,b,0,0,n,41567542200,-69.6117553710938,U,b,0,0,n,43107080800,-68.3976135253906 ,U,b,0,0,n,44646619400,-66.1394271850586,U,b,0,0,n,46186158000,-62.2528190612793,U ,b,0,0,n,47725696599,-57.9086112976074,U,b,0,0,n,49265235200,-53.8200759887695,U,b ,0,0,n,50804773799,-50.375431060791,U,b,0,0,n,52344312400,-46.767578125,U,b,0,0,n ,53883850999,-43.7340431213379,U,b,0,0,n,55423389600,-41.9834632873535,U,b,0,0,n,56962928200 ,-41.5572471618652,U,b,0,0,n,58502466800,-43.0149421691895,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -50.2629508972168 KeyVer: 4005 KeyCount: 39 Key: 0,-54.2321128845215,U,s,0,0,n,1539538600,-51.0129318237305,U,b,0,0,n,3079077200,-47.2773628234863 ,U,b,0,0,n,4618615800,-44.4629287719727,U,b,0,0,n,6158154400,-41.6325950622559,U,b ,0,0,n,7697693000,-38.3350219726563,U,b,0,0,n,9237231600,-34.9066696166992,U,b,0,0 ,n,10776770200,-30.7234077453613,U,b,0,0,n,12316308800,-25.2174110412598,U,b,0,0,n ,13855847400,-18.3443241119385,U,b,0,0,n,15395386000,-10.7217864990234,U,b,0,0,n,16934924599 ,-3.2672700881958,U,b,0,0,n,18474463200,3.68774342536926,U,b,0,0,n,20014001800,10.3418025970459 ,U,b,0,0,n,21553540400,16.7105865478516,U,b,0,0,n,23093079000,22.5491790771484,U,b ,0,0,n,24632617600,27.0719585418701,U,b,0,0,n,26172156200,30.8997974395752,U,b,0,0 ,n,27711694800,32.9091148376465,U,b,0,0,n,29251233400,34.8520469665527,U,b,0,0,n,30790772000 ,34.9141273498535,U,b,0,0,n,32330310599,34.3758888244629,U,b,0,0,n,33869849199,33.4146194458008 ,U,b,0,0,n,35409387800,31.3182525634766,U,b,0,0,n,36948926400,27.9123840332031,U,b ,0,0,n,38488465000,19.4038982391357,U,b,0,0,n,40028003600,7.27591276168823,U,b,0,0 ,n,41567542200,-7.29632997512817,U,b,0,0,n,43107080800,-19.9258899688721,U,b,0,0,n ,44646619400,-30.3807048797607,U,b,0,0,n,46186158000,-37.7786407470703,U,b,0,0,n,47725696599 ,-42.8919448852539,U,b,0,0,n,49265235200,-46.0507659912109,U,b,0,0,n,50804773799,-48.7455291748047 ,U,b,0,0,n,52344312400,-50.5439529418945,U,b,0,0,n,53883850999,-52.0665893554688,U ,b,0,0,n,55423389600,-53.0927314758301,U,b,0,0,n,56962928200,-53.7251434326172,U,b ,0,0,n,58502466800,-54.2313537597656,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1.00000011920929 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Forearm" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 13.1421842575073 Color: 1,0,0 } Channel: "Y" { Default: 9.03095610738092e-007 KeyVer: 4005 KeyCount: 39 Key: 0,9.03094473869714e-007,U,s,0,0,n,1539538600,9.03094303339458e-007,U,b,0,0,n,3079077200 ,9.03093734905269e-007,U,b,0,0,n,4618615800,9.0309367806185e-007,U,b,0,0,n,6158154400 ,9.03094473869714e-007,U,b,0,0,n,7697693000,9.03095894955186e-007,U,b,0,0,n,9237231600 ,9.03094530713133e-007,U,b,0,0,n,10776770200,9.0309168854219e-007,U,b,0,0,n,12316308800 ,9.03091461168515e-007,U,b,0,0,n,13855847400,9.03095269677578e-007,U,b,0,0,n,15395386000 ,9.0309470124339e-007,U,b,0,0,n,16934924599,9.03096463389375e-007,U,b,0,0,n,18474463200 ,9.03094303339458e-007,U,b,0,0,n,20014001800,9.03094985460484e-007,U,b,0,0,n,21553540400 ,9.03096406545956e-007,U,b,0,0,n,23093079000,9.03095326520997e-007,U,b,0,0,n,24632617600 ,9.03092427506635e-007,U,b,0,0,n,26172156200,9.03093450688175e-007,U,b,0,0,n,27711694800 ,9.03094360182877e-007,U,b,0,0,n,29251233400,9.03095610738092e-007,U,b,0,0,n,30790772000 ,9.03094928617065e-007,U,b,0,0,n,32330310599,9.0309418965262e-007,U,b,0,0,n,33869849199 ,9.03094758086809e-007,U,b,0,0,n,35409387800,9.03094132809201e-007,U,b,0,0,n,36948926400 ,9.03093621218432e-007,U,b,0,0,n,38488465000,9.03093962278945e-007,U,b,0,0,n,40028003600 ,9.03094758086809e-007,U,b,0,0,n,41567542200,9.03094303339458e-007,U,b,0,0,n,43107080800 ,9.03094246496039e-007,U,b,0,0,n,44646619400,9.03094417026296e-007,U,b,0,0,n,46186158000 ,9.03094530713133e-007,U,b,0,0,n,47725696599,9.03094246496039e-007,U,b,0,0,n,49265235200 ,9.03093223314499e-007,U,b,0,0,n,50804773799,9.03095497051254e-007,U,b,0,0,n,52344312400 ,9.03095610738092e-007,U,b,0,0,n,53883850999,9.03094758086809e-007,U,b,0,0,n,55423389600 ,9.03094019122364e-007,U,b,0,0,n,56962928200,9.03093621218432e-007,U,b,0,0,n,58502466800 ,9.03094132809201e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.16086266138882e-006 KeyVer: 4005 KeyCount: 39 Key: 0,3.16086016027839e-006,U,s,0,0,n,1539538600,3.16086334350985e-006,U,b,0,0,n,3079077200 ,3.16086152452044e-006,U,b,0,0,n,4618615800,3.16086061502574e-006,U,b,0,0,n,6158154400 ,3.16086152452044e-006,U,b,0,0,n,7697693000,3.16086129714677e-006,U,b,0,0,n,9237231600 ,3.16086129714677e-006,U,b,0,0,n,10776770200,3.16086084239942e-006,U,b,0,0,n,12316308800 ,3.16086016027839e-006,U,b,0,0,n,13855847400,3.16086061502574e-006,U,b,0,0,n,15395386000 ,3.16086084239942e-006,U,b,0,0,n,16934924599,3.16086129714677e-006,U,b,0,0,n,18474463200 ,3.16086197926779e-006,U,b,0,0,n,20014001800,3.16086311613617e-006,U,b,0,0,n,21553540400 ,3.16086220664147e-006,U,b,0,0,n,23093079000,3.16086106977309e-006,U,b,0,0,n,24632617600 ,3.16086311613617e-006,U,b,0,0,n,26172156200,3.16086243401514e-006,U,b,0,0,n,27711694800 ,3.16086061502574e-006,U,b,0,0,n,29251233400,3.16086334350985e-006,U,b,0,0,n,30790772000 ,3.16086016027839e-006,U,b,0,0,n,32330310599,3.16086038765206e-006,U,b,0,0,n,33869849199 ,3.16086425300455e-006,U,b,0,0,n,35409387800,3.16086197926779e-006,U,b,0,0,n,36948926400 ,3.16086084239942e-006,U,b,0,0,n,38488465000,3.16086152452044e-006,U,b,0,0,n,40028003600 ,3.16086061502574e-006,U,b,0,0,n,41567542200,3.16086288876249e-006,U,b,0,0,n,43107080800 ,3.16086129714677e-006,U,b,0,0,n,44646619400,3.16086152452044e-006,U,b,0,0,n,46186158000 ,3.16086129714677e-006,U,b,0,0,n,47725696599,3.16086152452044e-006,U,b,0,0,n,49265235200 ,3.16086061502574e-006,U,b,0,0,n,50804773799,3.16086197926779e-006,U,b,0,0,n,52344312400 ,3.16086266138882e-006,U,b,0,0,n,53883850999,3.16086016027839e-006,U,b,0,0,n,55423389600 ,3.16086084239942e-006,U,b,0,0,n,56962928200,3.16085993290471e-006,U,b,0,0,n,58502466800 ,3.16086288876249e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -31.568567276001 KeyVer: 4005 KeyCount: 39 Key: 0,-27.7261695861816,U,s,0,0,n,1539538600,-29.6609439849854,U,b,0,0,n,3079077200,-31.5949764251709 ,U,b,0,0,n,4618615800,-35.7342720031738,U,b,0,0,n,6158154400,-40.892707824707,U,b ,0,0,n,7697693000,-46.4121017456055,U,b,0,0,n,9237231600,-51.6381874084473,U,b,0,0 ,n,10776770200,-55.9239044189453,U,b,0,0,n,12316308800,-58.2801818847656,U,b,0,0,n ,13855847400,-57.1786880493164,U,b,0,0,n,15395386000,-53.5339889526367,U,b,0,0,n,16934924599 ,-48.9106674194336,U,b,0,0,n,18474463200,-44.8686256408691,U,b,0,0,n,20014001800,-41.754581451416 ,U,b,0,0,n,21553540400,-40.5539512634277,U,b,0,0,n,23093079000,-39.6324348449707,U ,b,0,0,n,24632617600,-39.1769638061523,U,b,0,0,n,26172156200,-38.9859313964844,U,b ,0,0,n,27711694800,-38.7443199157715,U,b,0,0,n,29251233400,-38.4244194030762,U,b,0 ,0,n,30790772000,-37.52294921875,U,b,0,0,n,32330310599,-36.308967590332,U,b,0,0,n ,33869849199,-35.0522346496582,U,b,0,0,n,35409387800,-34.0215034484863,U,b,0,0,n,36948926400 ,-33.4848518371582,U,b,0,0,n,38488465000,-34.0698165893555,U,b,0,0,n,40028003600,-35.2642517089844 ,U,b,0,0,n,41567542200,-35.4080848693848,U,b,0,0,n,43107080800,-36.1590576171875,U ,b,0,0,n,44646619400,-35.7662811279297,U,b,0,0,n,46186158000,-35.5249710083008,U,b ,0,0,n,47725696599,-35.0557327270508,U,b,0,0,n,49265235200,-33.7227058410645,U,b,0 ,0,n,50804773799,-32.1659545898438,U,b,0,0,n,52344312400,-31.4579391479492,U,b,0,0 ,n,53883850999,-30.8312454223633,U,b,0,0,n,55423389600,-29.9926071166992,U,b,0,0,n ,56962928200,-29.0235500335693,U,b,0,0,n,58502466800,-27.7261695861816,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -28.5609245300293 KeyVer: 4005 KeyCount: 39 Key: 0,-24.6704254150391,U,s,0,0,n,1539538600,-25.5822467803955,U,b,0,0,n,3079077200,-26.4931449890137 ,U,b,0,0,n,4618615800,-26.9835796356201,U,b,0,0,n,6158154400,-27.3237171173096,U,b ,0,0,n,7697693000,-27.5145320892334,U,b,0,0,n,9237231600,-27.5624809265137,U,b,0,0 ,n,10776770200,-27.4805736541748,U,b,0,0,n,12316308800,-27.0183219909668,U,b,0,0,n ,13855847400,-26.1534118652344,U,b,0,0,n,15395386000,-24.9254951477051,U,b,0,0,n,16934924599 ,-23.6142330169678,U,b,0,0,n,18474463200,-22.4983978271484,U,b,0,0,n,20014001800,-21.7781925201416 ,U,b,0,0,n,21553540400,-21.6476192474365,U,b,0,0,n,23093079000,-21.4602146148682,U ,b,0,0,n,24632617600,-21.2377166748047,U,b,0,0,n,26172156200,-20.916618347168,U,b ,0,0,n,27711694800,-20.1269855499268,U,b,0,0,n,29251233400,-18.7667579650879,U,b,0 ,0,n,30790772000,-17.314847946167,U,b,0,0,n,32330310599,-15.7393226623535,U,b,0,0 ,n,33869849199,-14.2488050460815,U,b,0,0,n,35409387800,-13.052116394043,U,b,0,0,n ,36948926400,-12.3581953048706,U,b,0,0,n,38488465000,-12.8951530456543,U,b,0,0,n,40028003600 ,-14.3822441101074,U,b,0,0,n,41567542200,-16.146312713623,U,b,0,0,n,43107080800,-19.2456340789795 ,U,b,0,0,n,44646619400,-21.8024406433105,U,b,0,0,n,46186158000,-24.5287075042725,U ,b,0,0,n,47725696599,-26.7379531860352,U,b,0,0,n,49265235200,-28.2615509033203,U,b ,0,0,n,50804773799,-28.4822025299072,U,b,0,0,n,52344312400,-28.5755023956299,U,b,0 ,0,n,53883850999,-28.2299671173096,U,b,0,0,n,55423389600,-27.2983951568604,U,b,0,0 ,n,56962928200,-26.1843681335449,U,b,0,0,n,58502466800,-24.6704254150391,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -47.7509155273438 KeyVer: 4005 KeyCount: 39 Key: 0,-49.6838607788086,U,s,0,0,n,1539538600,-50.6199417114258,U,b,0,0,n,3079077200,-51.557861328125 ,U,b,0,0,n,4618615800,-49.7577285766602,U,b,0,0,n,6158154400,-46.8222465515137,U,b ,0,0,n,7697693000,-43.2557334899902,U,b,0,0,n,9237231600,-39.5619697570801,U,b,0,0 ,n,10776770200,-36.2417984008789,U,b,0,0,n,12316308800,-33.3665580749512,U,b,0,0,n ,13855847400,-31.9531345367432,U,b,0,0,n,15395386000,-31.4414196014404,U,b,0,0,n,16934924599 ,-31.4410591125488,U,b,0,0,n,18474463200,-31.5651226043701,U,b,0,0,n,20014001800,-32.1318359375 ,U,b,0,0,n,21553540400,-32.7886123657227,U,b,0,0,n,23093079000,-33.3577423095703,U ,b,0,0,n,24632617600,-33.5156517028809,U,b,0,0,n,26172156200,-33.3990211486816,U,b ,0,0,n,27711694800,-32.8718185424805,U,b,0,0,n,29251233400,-31.8555145263672,U,b,0 ,0,n,30790772000,-30.9343128204346,U,b,0,0,n,32330310599,-30.0077571868896,U,b,0,0 ,n,33869849199,-29.1602630615234,U,b,0,0,n,35409387800,-28.4759864807129,U,b,0,0,n ,36948926400,-28.0388641357422,U,b,0,0,n,38488465000,-28.2292537689209,U,b,0,0,n,40028003600 ,-29.1356811523438,U,b,0,0,n,41567542200,-30.9728355407715,U,b,0,0,n,43107080800,-33.586296081543 ,U,b,0,0,n,44646619400,-36.4988479614258,U,b,0,0,n,46186158000,-39.3635520935059,U ,b,0,0,n,47725696599,-41.9775428771973,U,b,0,0,n,49265235200,-44.7888259887695,U,b ,0,0,n,50804773799,-46.8367042541504,U,b,0,0,n,52344312400,-47.9202156066895,U,b,0 ,0,n,53883850999,-48.5339088439941,U,b,0,0,n,55423389600,-48.9236145019531,U,b,0,0 ,n,56962928200,-49.3116493225098,U,b,0,0,n,58502466800,-49.6838607788086,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 0.99999988079071 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Hand" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 10.8255529403687 Color: 1,0,0 } Channel: "Y" { Default: 4.45484261035745e-007 KeyVer: 4005 KeyCount: 39 Key: 0,4.45505378365851e-007,U,s,0,0,n,1539538600,4.45480878852322e-007,U,b,0,0,n,3079077200 ,4.45492645440027e-007,U,b,0,0,n,4618615800,4.45506771029613e-007,U,b,0,0,n,6158154400 ,4.45494777068234e-007,U,b,0,0,n,7697693000,4.4548150412993e-007,U,b,0,0,n,9237231600 ,4.45501626700207e-007,U,b,0,0,n,10776770200,4.4552140820997e-007,U,b,0,0,n,12316308800 ,4.45524932501939e-007,U,b,0,0,n,13855847400,4.45494350742592e-007,U,b,0,0,n,15395386000 ,4.45504554136278e-007,U,b,0,0,n,16934924599,4.4548897903951e-007,U,b,0,0,n,18474463200 ,4.45495658141226e-007,U,b,0,0,n,20014001800,4.45494606537977e-007,U,b,0,0,n,21553540400 ,4.45495714984645e-007,U,b,0,0,n,23093079000,4.4549796029969e-007,U,b,0,0,n,24632617600 ,4.45481362021383e-007,U,b,0,0,n,26172156200,4.45497818191143e-007,U,b,0,0,n,27711694800 ,4.45486790567884e-007,U,b,0,0,n,29251233400,4.45498272938494e-007,U,b,0,0,n,30790772000 ,4.45500859314052e-007,U,b,0,0,n,32330310599,4.45495089707038e-007,U,b,0,0,n,33869849199 ,4.45491792788744e-007,U,b,0,0,n,35409387800,4.45492418066351e-007,U,b,0,0,n,36948926400 ,4.45490741185495e-007,U,b,0,0,n,38488465000,4.45487671640876e-007,U,b,0,0,n,40028003600 ,4.45500489831829e-007,U,b,0,0,n,41567542200,4.4549099698088e-007,U,b,0,0,n,43107080800 ,4.45490030642759e-007,U,b,0,0,n,44646619400,4.45496056045158e-007,U,b,0,0,n,46186158000 ,4.45506486812519e-007,U,b,0,0,n,47725696599,4.45496084466868e-007,U,b,0,0,n,49265235200 ,4.45508533175598e-007,U,b,0,0,n,50804773799,4.45484431566001e-007,U,b,0,0,n,52344312400 ,4.45484232614035e-007,U,b,0,0,n,53883850999,4.45510607960387e-007,U,b,0,0,n,55423389600 ,4.45500546675248e-007,U,b,0,0,n,56962928200,4.45514729108254e-007,U,b,0,0,n,58502466800 ,4.45485284217284e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -7.54761458665598e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-7.54803863856068e-007,U,s,0,0,n,1539538600,-7.54753614273795e-007,U,b,0,0,n,3079077200 ,-7.54783684442373e-007,U,b,0,0,n,4618615800,-7.54806421809917e-007,U,b,0,0,n,6158154400 ,-7.54783513912116e-007,U,b,0,0,n,7697693000,-7.54766801946971e-007,U,b,0,0,n,9237231600 ,-7.54789937218447e-007,U,b,0,0,n,10776770200,-7.54816198877961e-007,U,b,0,0,n,12316308800 ,-7.54819893700187e-007,U,b,0,0,n,13855847400,-7.54783172851603e-007,U,b,0,0,n,15395386000 ,-7.54783457068697e-007,U,b,0,0,n,16934924599,-7.54763050281326e-007,U,b,0,0,n,18474463200 ,-7.54781865452969e-007,U,b,0,0,n,20014001800,-7.54774191591423e-007,U,b,0,0,n,21553540400 ,-7.54764414523379e-007,U,b,0,0,n,23093079000,-7.54779023282026e-007,U,b,0,0,n,24632617600 ,-7.54793973101187e-007,U,b,0,0,n,26172156200,-7.54769530431076e-007,U,b,0,0,n,27711694800 ,-7.54784082346305e-007,U,b,0,0,n,29251233400,-7.54762993437907e-007,U,b,0,0,n,30790772000 ,-7.54784366563399e-007,U,b,0,0,n,32330310599,-7.54791642521013e-007,U,b,0,0,n,33869849199 ,-7.54766460886458e-007,U,b,0,0,n,35409387800,-7.54781979139807e-007,U,b,0,0,n,36948926400 ,-7.54798008983926e-007,U,b,0,0,n,38488465000,-7.54784423406818e-007,U,b,0,0,n,40028003600 ,-7.54786924517248e-007,U,b,0,0,n,41567542200,-7.54774703182193e-007,U,b,0,0,n,43107080800 ,-7.54783457068697e-007,U,b,0,0,n,44646619400,-7.54787436108018e-007,U,b,0,0,n,46186158000 ,-7.54795678403752e-007,U,b,0,0,n,47725696599,-7.547882887593e-007,U,b,0,0,n,49265235200 ,-7.54803807012649e-007,U,b,0,0,n,50804773799,-7.54765324018081e-007,U,b,0,0,n,52344312400 ,-7.54760719701153e-007,U,b,0,0,n,53883850999,-7.54806933400687e-007,U,b,0,0,n,55423389600 ,-7.54790960399987e-007,U,b,0,0,n,56962928200,-7.5481824524104e-007,U,b,0,0,n,58502466800 ,-7.54764414523379e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 71.1884765625 KeyVer: 4005 KeyCount: 3 Key: 0,70.2174301147461,U,s,6.69688367843628,0,n,28866348750,74.4029769897461,U,s,0,-6.69688367843628 ,n,57732697500,70.2174301147461,U,s,-6.69688367843628,0,n Color: 1,0,0 } Channel: "Y" { Default: 10.1721467971802 KeyVer: 4005 KeyCount: 3 Key: 0,13.6377296447754,U,s,-5.11763715744019,0,n,28866348750,-15.4095659255981,U,s,0,5.55830955505371 ,n,57732697500,13.6377296447754,U,s,1.81601226329803,0,n Color: 0,1,0 } Channel: "Z" { Default: -14.7731218338013 KeyVer: 4005 KeyCount: 3 Key: 0,-17.1805534362793,U,s,1.74017906188965,0,n,28866348750,4.56886625289917,U,s,0,-1.81865096092224 ,n,57732697500,-17.1805534362793,U,s,0.652443706989288,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Thumb1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.62510800361633 Color: 1,0,0 } Channel: "Y" { Default: 0.626631021499634 Color: 0,1,0 } Channel: "Z" { Default: 1.67876040935516 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -129.154998779297 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-128.393569946289,U,s,-5.62631416320801,0,n,28866348750,-131.675582885742 ,U,s,0,5.2512264251709,n,57732697500,-128.393569946289,U,s,5.2512264251709,0,n Color: 1,0,0 } Channel: "Y" { Default: -42.0322799682617 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-47.8535804748535,U,s,43.014533996582,0,n,28866348750,-22.7617683410645 ,U,s,0,-40.146900177002,n,57732697500,-47.8535804748535,U,s,-40.146900177002,0,n Color: 0,1,0 } Channel: "Z" { Default: 34.3628196716309 KeyVer: 4005 KeyCount: 3 Key: 1924423250,34.2815361022949,U,s,0,0,n,28866348750,35.0631332397461,U,s,0,0,n,57732697500 ,34.2815361022949,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Thumb2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.14043200016022 Color: 1,0,0 } Channel: "Y" { Default: -1.38291397888679e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-1.38295240503794e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,1539538600 ,-1.38291181883687e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-1.38293626150698e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,4618615800,-1.38295297347213e-006,U ,s,0,0,a,0.329832986317342,0.989898998959688,6158154400,-1.38293694362801e-006,U,s ,0,0,a,0.989898998959688,0.989898998959688,7697693000,-1.38291193252371e-006,U,s,0 ,0,a,0.989898998959688,0.329832986317342,9237231600,-1.3829402405463e-006,U,s,0,0 ,a,0.329832986317342,0.989898998959688,10776770200,-1.38297832563694e-006,U,s,0,0 ,a,0.989898998959688,0.329832986317342,12316308800,-1.38298469209985e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,13855847400,-1.38293171403348e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,15395386000,-1.38295069973537e-006,U,s,0,0 ,a,0.32943294630968,0.32943294630968,16927226907,-1.38291579787619e-006,U,s,0,0,a ,0.33033303632692,0.989999008961604,18474463200,-1.38293444251758e-006,U,s,0,0,a,0.989898998959688 ,0.329832986317342,20014001800,-1.38292796236783e-006,U,s,0,0,a,0.329832986317342 ,0.329832986317342,21553540400,-1.38292227802594e-006,U,s,0,0,a,0.329832986317342 ,0.989898998959688,23093079000,-1.3829333056492e-006,U,s,0,0,a,0.989898998959688,0.989898998959688 ,24632617600,-1.38293285090185e-006,U,s,0,0,a,0.989898998959688,0.989898998959688 ,26172156200,-1.38292602969159e-006,U,s,0,0,a,0.989898998959688,0.329832986317342 ,27711694800,-1.38293194140715e-006,U,s,0,0,a,0.329832986317342,0.989898998959688 ,29251233400,-1.38292261908646e-006,U,s,0,0,a,0.989898998959688,0.329832986317342 ,30790772000,-1.38293898999109e-006,U,s,0,0,a,0.329832986317342,0.989898998959688 ,32330310599,-1.38294194584887e-006,U,s,0,0,a,0.988698878936702,0.988698878936702 ,33862151507,-1.38292148221808e-006,U,s,0,0,a,0.989999008961604,0.33033303632692,35409387800 ,-1.38293353302288e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,36948926400 ,-1.38294376483827e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,38488465000 ,-1.38293160034664e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,40028003600 ,-1.38294240059622e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,41567542200 ,-1.38292568863108e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,43107080800 ,-1.38293376039655e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,44646619400 ,-1.38293557938596e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,46186158000 ,-1.382945356454e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,47725696599,-1.3829402405463e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,49265235200,-1.38295342821948e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,50804773799,-1.38292000428919e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,52344312400,-1.38291284201841e-006 ,U,s,0,0,a,0.329832986317342,0.989898998959688,53883850999,-1.38295456508786e-006 ,U,s,0,0,a,0.989898998959688,0.989898998959688,55423389600,-1.38294035423314e-006 ,U,s,0,0,a,0.989898998959688,0.329832986317342,56962928200,-1.38296331897436e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,-1.38291920848133e-006 ,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 7.55724443024519e-007 KeyVer: 4005 KeyCount: 39 Key: 0,7.55730525270337e-007,U,s,0,0,n,1539538600,7.55724158807425e-007,U,b,0,0,n,3079077200 ,7.55726432544179e-007,U,b,0,0,n,4618615800,7.55730070522986e-007,U,b,0,0,n,6158154400 ,7.55727796786232e-007,U,b,0,0,n,7697693000,7.55721202949644e-007,U,b,0,0,n,9237231600 ,7.55728706280934e-007,U,b,0,0,n,10776770200,7.55741666580434e-007,U,b,0,0,n,12316308800 ,7.55744167690864e-007,U,b,0,0,n,13855847400,7.55725750423153e-007,U,b,0,0,n,15395386000 ,7.55739165470004e-007,U,b,0,0,n,16934924599,7.55725523049477e-007,U,b,0,0,n,18474463200 ,7.55726432544179e-007,U,b,0,0,n,20014001800,7.55728024159907e-007,U,b,0,0,n,21553540400 ,7.55730297896662e-007,U,b,0,0,n,23093079000,7.5572938840196e-007,U,b,0,0,n,24632617600 ,7.55718019718188e-007,U,b,0,0,n,26172156200,7.55729843149311e-007,U,b,0,0,n,27711694800 ,7.55728478907258e-007,U,b,0,0,n,29251233400,7.5572938840196e-007,U,b,0,0,n,30790772000 ,7.55735527491197e-007,U,b,0,0,n,32330310599,7.55729843149311e-007,U,b,0,0,n,33869849199 ,7.55716882849811e-007,U,b,0,0,n,35409387800,7.55725295675802e-007,U,b,0,0,n,36948926400 ,7.55721657696995e-007,U,b,0,0,n,38488465000,7.5572938840196e-007,U,b,0,0,n,40028003600 ,7.55734617996495e-007,U,b,0,0,n,41567542200,7.55724840928451e-007,U,b,0,0,n,43107080800 ,7.55726659917855e-007,U,b,0,0,n,44646619400,7.55729161028285e-007,U,b,0,0,n,46186158000 ,7.55729843149311e-007,U,b,0,0,n,47725696599,7.5572938840196e-007,U,b,0,0,n,49265235200 ,7.55731434765039e-007,U,b,0,0,n,50804773799,7.55724613554776e-007,U,b,0,0,n,52344312400 ,7.557243861811e-007,U,b,0,0,n,53883850999,7.55731434765039e-007,U,b,0,0,n,55423389600 ,7.55728478907258e-007,U,b,0,0,n,56962928200,7.55733253754443e-007,U,b,0,0,n,58502466800 ,7.55725068302127e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 2.74146850642865e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,2.74146850642865e-006,U,s,0,0,n,28866348750,2.74146850642865e-006,U,s,0 ,0,n,57732697500,2.74146850642865e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.38374729835778e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-3.38374729835778e-006,U,s,0,0,n,28866348750,-3.38374729835778e-006,U,s ,0,0,n,57732697500,-3.38374729835778e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 32.0624504089355 KeyVer: 4005 KeyCount: 3 Key: 1924423250,32.0624504089355,U,s,0,0,n,28866348750,32.0624504089355,U,s,0,0,n,57732697500 ,32.0624504089355,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Thumb3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.38246870040894 Color: 1,0,0 } Channel: "Y" { Default: 3.77754112435014e-008 KeyVer: 4005 KeyCount: 39 Key: 0,3.76322191186773e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,1539538600,3.77719686639466e-008 ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,3.76808770852222e-008,U ,s,0,0,a,0.329832986317342,0.989898998959688,4618615800,3.76404045709933e-008,U,s ,0,0,a,0.989898998959688,0.329832986317342,6158154400,3.76873003915534e-008,U,s,0 ,0,a,0.329832986317342,0.329832986317342,7697693000,3.77729350020672e-008,U,s,0,0 ,a,0.329832986317342,0.989898998959688,9237231600,3.76847708594141e-008,U,s,0,0,a ,0.989898998959688,0.329832986317342,10776770200,3.75169122435182e-008,U,s,0,0,a,0.329832986317342 ,0.329832986317342,12316308800,3.74917590306723e-008,U,s,0,0,a,0.329832986317342,0.989898998959688 ,13855847400,3.77125957129465e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,15395386000 ,3.76077764485672e-008,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,3.77704338916374e-008 ,U,s,0,0,a,0.33033303632692,0.33033303632692,18474463200,3.76979301108804e-008,U,s ,0,0,a,0.329832986317342,0.329832986317342,20014001800,3.77237370230432e-008,U,s,0 ,0,a,0.329832986317342,0.329832986317342,21553540400,3.77505671167455e-008,U,s,0,0 ,a,0.329832986317342,0.329832986317342,23093079000,3.76988396055822e-008,U,s,0,0,a ,0.329832986317342,0.329832986317342,24632617600,3.76899436105305e-008,U,s,0,0,a,0.329832986317342 ,0.329832986317342,26172156200,3.77384026251093e-008,U,s,0,0,a,0.329832986317342,0.329832986317342 ,27711694800,3.76901709842059e-008,U,s,0,0,a,0.329832986317342,0.329832986317342,29251233400 ,3.77612821012008e-008,U,s,0,0,a,0.329832986317342,0.329832986317342,30790772000,3.76607545149454e-008 ,U,s,0,0,a,0.329832986317342,0.329832986317342,32330310599,3.7644809935955e-008,U ,s,0,0,a,0.32943294630968,0.32943294630968,33862151507,3.77930291506345e-008,U,s,0 ,0,a,0.33033303632692,0.33033303632692,35409387800,3.77034439225099e-008,U,s,0,0,a ,0.329832986317342,0.989898998959688,36948926400,3.76604702978511e-008,U,s,0,0,a,0.989898998959688 ,0.989898998959688,38488465000,3.76914215394208e-008,U,s,0,0,a,0.989898998959688,0.989898998959688 ,40028003600,3.76581397176778e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,41567542200 ,3.77330025003175e-008,U,s,0,0,a,0.989898998959688,0.329832986317342,43107080800,3.76886646336061e-008 ,U,s,0,0,a,0.329832986317342,0.989898998959688,44646619400,3.76871867047157e-008,U ,s,0,0,a,0.989898998959688,0.989898998959688,46186158000,3.76680588942691e-008,U,s ,0,0,a,0.989898998959688,0.989898998959688,47725696599,3.7665415675292e-008,U,s,0 ,0,a,0.989898998959688,0.989898998959688,49265235200,3.76342939034657e-008,U,s,0,0 ,a,0.989898998959688,0.989898998959688,50804773799,3.77455933175952e-008,U,s,0,0,a ,0.989898998959688,0.989898998959688,52344312400,3.77763456071989e-008,U,s,0,0,a,0.989898998959688 ,0.989898998959688,53883850999,3.76364823750919e-008,U,s,0,0,a,0.989898998959688,0.989898998959688 ,55423389600,3.76837476778746e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,56962928200 ,3.75963793430856e-008,U,s,0,0,a,0.989898998959688,0.989898998959688,58502466800,3.77501123693946e-008 ,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -3.12997121909575e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-3.12995462081744e-006,U,s,0,0,n,1539538600,-3.12996940010635e-006,U,b,0,0,n,3079077200 ,-3.12997303808515e-006,U,b,0,0,n,4618615800,-3.12995643980685e-006,U,b,0,0,n,6158154400 ,-3.12996394313814e-006,U,b,0,0,n,7697693000,-3.12998872686876e-006,U,b,0,0,n,9237231600 ,-3.12995712192787e-006,U,b,0,0,n,10776770200,-3.12989959638799e-006,U,b,0,0,n,12316308800 ,-3.12988913719892e-006,U,b,0,0,n,13855847400,-3.12997303808515e-006,U,b,0,0,n,15395386000 ,-3.12991028295073e-006,U,b,0,0,n,16934924599,-3.12996667162224e-006,U,b,0,0,n,18474463200 ,-3.12996667162224e-006,U,b,0,0,n,20014001800,-3.12994006890222e-006,U,b,0,0,n,21553540400 ,-3.12992960971314e-006,U,b,0,0,n,23093079000,-3.12995121021231e-006,U,b,0,0,n,24632617600 ,-3.13002465190948e-006,U,b,0,0,n,26172156200,-3.12993688567076e-006,U,b,0,0,n,27711694800 ,-3.12996917273267e-006,U,b,0,0,n,29251233400,-3.12992597173434e-006,U,b,0,0,n,30790772000 ,-3.12993211082357e-006,U,b,0,0,n,32330310599,-3.12996485263284e-006,U,b,0,0,n,33869849199 ,-3.12997326545883e-006,U,b,0,0,n,35409387800,-3.12996644424857e-006,U,b,0,0,n,36948926400 ,-3.1299957754527e-006,U,b,0,0,n,38488465000,-3.12996780849062e-006,U,b,0,0,n,40028003600 ,-3.12993620354973e-006,U,b,0,0,n,41567542200,-3.12996940010635e-006,U,b,0,0,n,43107080800 ,-3.12997099172208e-006,U,b,0,0,n,44646619400,-3.12996030515933e-006,U,b,0,0,n,46186158000 ,-3.12995121021231e-006,U,b,0,0,n,47725696599,-3.12995575768582e-006,U,b,0,0,n,49265235200 ,-3.12994984597026e-006,U,b,0,0,n,50804773799,-3.12997394757986e-006,U,b,0,0,n,52344312400 ,-3.1299707643484e-006,U,b,0,0,n,53883850999,-3.12994734485983e-006,U,b,0,0,n,55423389600 ,-3.12995848616993e-006,U,b,0,0,n,56962928200,-3.12994507112307e-006,U,b,0,0,n,58502466800 ,-3.12997190121678e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -7.38412791179144e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-7.46143268770538e-006,U,s,0,0,n,28866348750,-6.7181163103669e-006,U,s ,0,0,n,57732697500,-7.46143268770538e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 2.46886565946625e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,2.29402030527126e-006,U,s,0,0,n,28866348750,3.97522580897203e-006,U,s,0 ,0,n,57732697500,2.29402030527126e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 2.01478266716003 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-1.12266278266907,U,s,23.1830959320068,0,n,28866348750,12.4008083343506 ,U,s,0,-21.6375541687012,n,57732697500,-1.12266278266907,U,s,-21.6375541687012,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Index1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.34874391555786 Color: 1,0,0 } Channel: "Y" { Default: 0.0162522289901972 Color: 0,1,0 } Channel: "Z" { Default: 1.56133341789246 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -11.8456792831421 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-11.7885713577271,U,s,0,0,n,28866348750,-12.3376865386963,U,s,0,0,n,57732697500 ,-11.7885713577271,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -2.26736164093018 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-3.69511246681213,U,s,10.5498819351196,0,n,28866348750,2.45898532867432 ,U,s,0,-9.84655666351318,n,57732697500,-3.69511246681213,U,s,-9.84655666351318,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.35604390501976 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-4.27189636230469,U,s,34.196605682373,0,n,28866348750,15.6761236190796 ,U,s,0,-31.9168300628662,n,57732697500,-4.27189636230469,U,s,-31.9168300628662,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Index2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.47369468212128 Color: 1,0,0 } Channel: "Y" { Default: -3.31795149577374e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-3.31797764374642e-006,U,s,0,0,n,1539538600,-3.31794581143186e-006,U,b,0,0,n,3079077200 ,-3.31796331920486e-006,U,b,0,0,n,4618615800,-3.31798537445138e-006,U,b,0,0,n,6158154400 ,-3.31796832142572e-006,U,b,0,0,n,7697693000,-3.31795786223665e-006,U,b,0,0,n,9237231600 ,-3.31796582031529e-006,U,b,0,0,n,10776770200,-3.31798446495668e-006,U,b,0,0,n,12316308800 ,-3.31798082697787e-006,U,b,0,0,n,13855847400,-3.31796627506264e-006,U,b,0,0,n,15395386000 ,-3.31796877617307e-006,U,b,0,0,n,16934924599,-3.31795286001579e-006,U,b,0,0,n,18474463200 ,-3.31796627506264e-006,U,b,0,0,n,20014001800,-3.31796036334708e-006,U,b,0,0,n,21553540400 ,-3.31795081365271e-006,U,b,0,0,n,23093079000,-3.31796309183119e-006,U,b,0,0,n,24632617600 ,-3.31798560182506e-006,U,b,0,0,n,26172156200,-3.31795263264212e-006,U,b,0,0,n,27711694800 ,-3.31797605213069e-006,U,b,0,0,n,29251233400,-3.31794740304758e-006,U,b,0,0,n,30790772000 ,-3.31796877617307e-006,U,b,0,0,n,32330310599,-3.31797923536215e-006,U,b,0,0,n,33869849199 ,-3.31794944941066e-006,U,b,0,0,n,35409387800,-3.31796832142572e-006,U,b,0,0,n,36948926400 ,-3.31798378283565e-006,U,b,0,0,n,38488465000,-3.31797400576761e-006,U,b,0,0,n,40028003600 ,-3.31796991304145e-006,U,b,0,0,n,41567542200,-3.31796036334708e-006,U,b,0,0,n,43107080800 ,-3.31797264152556e-006,U,b,0,0,n,44646619400,-3.31797309627291e-006,U,b,0,0,n,46186158000 ,-3.3179712772835e-006,U,b,0,0,n,47725696599,-3.31796877617307e-006,U,b,0,0,n,49265235200 ,-3.31798082697787e-006,U,b,0,0,n,50804773799,-3.31795445163152e-006,U,b,0,0,n,52344312400 ,-3.31795104102639e-006,U,b,0,0,n,53883850999,-3.31798219121993e-006,U,b,0,0,n,55423389600 ,-3.31797218677821e-006,U,b,0,0,n,56962928200,-3.31798923980386e-006,U,b,0,0,n,58502466800 ,-3.31795627062093e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.01659298429513e-007 KeyVer: 4005 KeyCount: 39 Key: 0,3.01628602983328e-007,U,s,0,0,n,1539538600,3.01669331292942e-007,U,b,0,0,n,3079077200 ,3.01649805578563e-007,U,b,0,0,n,4618615800,3.01622179676997e-007,U,b,0,0,n,6158154400 ,3.01645826539243e-007,U,b,0,0,n,7697693000,3.01660492141309e-007,U,b,0,0,n,9237231600 ,3.016315304194e-007,U,b,0,0,n,10776770200,3.01623686027597e-007,U,b,0,0,n,12316308800 ,3.01620872278363e-007,U,b,0,0,n,13855847400,3.01640199040776e-007,U,b,0,0,n,15395386000 ,3.01651311929163e-007,U,b,0,0,n,16934924599,3.01649407674631e-007,U,b,0,0,n,18474463200 ,3.01641904343342e-007,U,b,0,0,n,20014001800,3.01647560263518e-007,U,b,0,0,n,21553540400 ,3.01648015010869e-007,U,b,0,0,n,23093079000,3.01643694911036e-007,U,b,0,0,n,24632617600 ,3.01651169820616e-007,U,b,0,0,n,26172156200,3.01642728572915e-007,U,b,0,0,n,27711694800 ,3.01659497381479e-007,U,b,0,0,n,29251233400,3.01642273825564e-007,U,b,0,0,n,30790772000 ,3.01646281286594e-007,U,b,0,0,n,32330310599,3.01648896083861e-007,U,b,0,0,n,33869849199 ,3.01636134736327e-007,U,b,0,0,n,35409387800,3.01647503420099e-007,U,b,0,0,n,36948926400 ,3.01643439115651e-007,U,b,0,0,n,38488465000,3.01656626788827e-007,U,b,0,0,n,40028003600 ,3.01643211741975e-007,U,b,0,0,n,41567542200,3.01647617106937e-007,U,b,0,0,n,43107080800 ,3.01652619327797e-007,U,b,0,0,n,44646619400,3.01642955946591e-007,U,b,0,0,n,46186158000 ,3.01625107113068e-007,U,b,0,0,n,47725696599,3.01644206501805e-007,U,b,0,0,n,49265235200 ,3.01624282883495e-007,U,b,0,0,n,50804773799,3.01660151080796e-007,U,b,0,0,n,52344312400 ,3.01659156320966e-007,U,b,0,0,n,53883850999,3.01618115372548e-007,U,b,0,0,n,55423389600 ,3.01633804156154e-007,U,b,0,0,n,56962928200,3.01613965802972e-007,U,b,0,0,n,58502466800 ,3.01659326851222e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 3.5970981571154e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,3.5970981571154e-006,U,s,0,0,n,28866348750,3.5970981571154e-006,U,s,0,0 ,n,57732697500,3.5970981571154e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 2.03909712581662e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,2.03909712581662e-006,U,s,0,0,n,28866348750,2.03909712581662e-006,U,s,0 ,0,n,57732697500,2.03909712581662e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 18.2982807159424 KeyVer: 4005 KeyCount: 3 Key: 1924423250,18.2982807159424,U,s,0,0,n,28866348750,18.2982807159424,U,s,0,0,n,57732697500 ,18.2982807159424,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Index3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.0628467798233 Color: 1,0,0 } Channel: "Y" { Default: -7.71003385580116e-008 KeyVer: 4005 KeyCount: 39 Key: 0,-7.71386226006143e-008,U,s,0,0,n,1539538600,-7.70982637732232e-008,U,b,0,0,n,3079077200 ,-7.71246106978651e-008,U,b,0,0,n,4618615800,-7.71447048464324e-008,U,b,0,0,n,6158154400 ,-7.71294992318872e-008,U,b,0,0,n,7697693000,-7.71144357258891e-008,U,b,0,0,n,9237231600 ,-7.71126451581949e-008,U,b,0,0,n,10776770200,-7.71653390074789e-008,U,b,0,0,n,12316308800 ,-7.71609336425172e-008,U,b,0,0,n,13855847400,-7.71170221014472e-008,U,b,0,0,n,15395386000 ,-7.71531176724238e-008,U,b,0,0,n,16934924599,-7.70924941662088e-008,U,b,0,0,n,18474463200 ,-7.7120574815126e-008,U,b,0,0,n,20014001800,-7.71129862187081e-008,U,b,0,0,n,21553540400 ,-7.70926931181748e-008,U,b,0,0,n,23093079000,-7.7117732644183e-008,U,b,0,0,n,24632617600 ,-7.71619284023473e-008,U,b,0,0,n,26172156200,-7.70921531056956e-008,U,b,0,0,n,27711694800 ,-7.71545956013142e-008,U,b,0,0,n,29251233400,-7.70800738791877e-008,U,b,0,0,n,30790772000 ,-7.71372867802711e-008,U,b,0,0,n,32330310599,-7.71590862314042e-008,U,b,0,0,n,33869849199 ,-7.70688473039627e-008,U,b,0,0,n,35409387800,-7.71287318457325e-008,U,b,0,0,n,36948926400 ,-7.7157551459095e-008,U,b,0,0,n,38488465000,-7.71487975725904e-008,U,b,0,0,n,40028003600 ,-7.71357804296713e-008,U,b,0,0,n,41567542200,-7.71094619267387e-008,U,b,0,0,n,43107080800 ,-7.71431132307043e-008,U,b,0,0,n,44646619400,-7.71366046592448e-008,U,b,0,0,n,46186158000 ,-7.71198926940997e-008,U,b,0,0,n,47725696599,-7.71329098370188e-008,U,b,0,0,n,49265235200 ,-7.71404984334367e-008,U,b,0,0,n,50804773799,-7.71092345530633e-008,U,b,0,0,n,52344312400 ,-7.70986900988646e-008,U,b,0,0,n,53883850999,-7.71377699493314e-008,U,b,0,0,n,55423389600 ,-7.71271402300044e-008,U,b,0,0,n,56962928200,-7.71527766119107e-008,U,b,0,0,n,58502466800 ,-7.71110535424668e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -3.79914951054161e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-3.79939081085467e-007,U,s,0,0,n,1539538600,-3.79892810542515e-007,U,b,0,0,n,3079077200 ,-3.79915803705444e-007,U,b,0,0,n,4618615800,-3.79951302420523e-007,U,b,0,0,n,6158154400 ,-3.79914297354844e-007,U,b,0,0,n,7697693000,-3.79913927872622e-007,U,b,0,0,n,9237231600 ,-3.79955338303262e-007,U,b,0,0,n,10776770200,-3.79888234647296e-007,U,b,0,0,n,12316308800 ,-3.79891218926787e-007,U,b,0,0,n,13855847400,-3.79943912776071e-007,U,b,0,0,n,15395386000 ,-3.79847961085034e-007,U,b,0,0,n,16934924599,-3.79937176830936e-007,U,b,0,0,n,18474463200 ,-3.79929417704261e-007,U,b,0,0,n,20014001800,-3.79914922632452e-007,U,b,0,0,n,21553540400 ,-3.79921345938783e-007,U,b,0,0,n,23093079000,-3.79919327997413e-007,U,b,0,0,n,24632617600 ,-3.79913245751595e-007,U,b,0,0,n,26172156200,-3.7993547152837e-007,U,b,0,0,n,27711694800 ,-3.79873171141298e-007,U,b,0,0,n,29251233400,-3.79941553774188e-007,U,b,0,0,n,30790772000 ,-3.79890224166957e-007,U,b,0,0,n,32330310599,-3.79885705115157e-007,U,b,0,0,n,33869849199 ,-3.79988108534235e-007,U,b,0,0,n,35409387800,-3.7991398471604e-007,U,b,0,0,n,36948926400 ,-3.79918958515191e-007,U,b,0,0,n,38488465000,-3.7988257872712e-007,U,b,0,0,n,40028003600 ,-3.79902758140815e-007,U,b,0,0,n,41567542200,-3.79926063942548e-007,U,b,0,0,n,43107080800 ,-3.79894345314824e-007,U,b,0,0,n,44646619400,-3.79919470105961e-007,U,b,0,0,n,46186158000 ,-3.79961505814208e-007,U,b,0,0,n,47725696599,-3.79910204628686e-007,U,b,0,0,n,49265235200 ,-3.79945703343765e-007,U,b,0,0,n,50804773799,-3.79904719238766e-007,U,b,0,0,n,52344312400 ,-3.79916855308693e-007,U,b,0,0,n,53883850999,-3.79959232077454e-007,U,b,0,0,n,55423389600 ,-3.79940843231452e-007,U,b,0,0,n,56962928200,-3.79954315121722e-007,U,b,0,0,n,58502466800 ,-3.79906310854494e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 6.12122676102445e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,6.12122676102445e-006,U,s,0,0,n,28866348750,6.12122676102445e-006,U,s,0 ,0,n,57732697500,6.12122676102445e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.18875880161795e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,1.18875880161795e-006,U,s,0,0,n,28866348750,1.18875880161795e-006,U,s,0 ,0,n,57732697500,1.18875880161795e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 13.211012840271 KeyVer: 4005 KeyCount: 3 Key: 1924423250,13.211012840271,U,s,0,0,n,28866348750,13.211012840271,U,s,0,0,n,57732697500 ,13.211012840271,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Middle1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.35998678207397 Color: 1,0,0 } Channel: "Y" { Default: -0.000293526856694371 KeyVer: 4005 KeyCount: 30 Key: 0,-0.000293526856694371,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,-0.00029352682759054 ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-0.000293526856694371,U ,b,0,0,a,0.329832986317342,0.329832986317342,4618615800,-0.000293526856694371,U,b ,0,0,a,0.329832986317342,0.329832986317342,6158154400,-0.00029352682759054,U,s,0,0 ,a,0.329832986317342,0.329832986317342,7697693000,-0.000293526856694371,U,b,0,0,a ,0.329832986317342,0.329832986317342,9237231600,-0.000293526856694371,U,b,0,0,a,0.329832986317342 ,0.989898998959688,13855847400,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342 ,15395386000,-0.000293526856694371,U,b,0,0,a,0.32943294630968,0.32943294630968,16927226907 ,-0.00029352682759054,U,b,0,0,a,0.33033303632692,0.33033303632692,18474463200,-0.00029352682759054 ,U,b,0,0,a,0.329832986317342,0.329832986317342,20014001800,-0.000293526856694371,U ,b,0,0,a,0.329832986317342,0.989898998959688,21553540400,-0.000293526856694371,U,b ,0,0,a,0.989898998959688,0.329832986317342,23093079000,-0.000293526856694371,U,b,0 ,0,a,0.329832986317342,0.329832986317342,24632617600,-0.00029352682759054,U,s,0,0 ,a,0.329832986317342,0.989898998959688,26172156200,-0.000293526856694371,U,b,0,0,a ,0.989898998959688,0.329832986317342,27711694800,-0.000293526856694371,U,b,0,0,a,0.329832986317342 ,0.989898998959688,38488465000,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342 ,40028003600,-0.000293526856694371,U,b,0,0,a,0.329832986317342,0.329832986317342,41567542200 ,-0.00029352682759054,U,s,0,0,a,0.329832986317342,0.329832986317342,43107080800,-0.000293526856694371 ,U,b,0,0,a,0.329832986317342,0.329832986317342,44646619400,-0.000293526856694371,U ,b,0,0,a,0.329832986317342,0.329832986317342,47725696599,-0.000293526856694371,U,s ,0,0,a,0.329832986317342,0.329832986317342,49265235200,-0.000293526856694371,U,b,0 ,0,a,0.329832986317342,0.989898998959688,50804773799,-0.00029352682759054,U,s,0,0 ,a,0.989898998959688,0.329832986317342,52344312400,-0.000293526856694371,U,b,0,0,a ,0.329832986317342,0.329832986317342,53883850999,-0.000293526856694371,U,b,0,0,a,0.329832986317342 ,0.989898998959688,55423389600,-0.000293526856694371,U,s,0,0,a,0.989898998959688,0.329832986317342 ,56962928200,-0.000293526856694371,U,b,0,0,a,0.329832986317342,0.989898998959688,58502466800 ,-0.00029352682759054,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.366859257221222 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -1.12324810028076 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-1.08737802505493,U,s,0,0,n,28866348750,-1.43228244781494,U,s,0,0,n,57732697500 ,-1.08737802505493,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -1.13205850124359 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-2.17822742462158,U,s,7.73031377792358,0,n,28866348750,2.33112192153931 ,U,s,0,-7.21495866775513,n,57732697500,-2.17822742462158,U,s,-7.21495866775513,0,n Color: 0,1,0 } Channel: "Z" { Default: 1.1130610704422 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-1.06622469425201,U,s,16.1030979156494,0,n,28866348750,8.32724857330322 ,U,s,0,-15.0295572280884,n,57732697500,-1.06622469425201,U,s,-15.0295572280884,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Middle2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.52912306785584 Color: 1,0,0 } Channel: "Y" { Default: -3.33934121954371e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-3.33935849994305e-006,U,s,0,0,n,1539538600,-3.33933348883875e-006,U,b,0,0,n,3079077200 ,-3.33934849550133e-006,U,b,0,0,n,4618615800,-3.33936213792185e-006,U,b,0,0,n,6158154400 ,-3.33935031449073e-006,U,b,0,0,n,7697693000,-3.33934099217004e-006,U,b,0,0,n,9237231600 ,-3.33934895024868e-006,U,b,0,0,n,10776770200,-3.33936941387947e-006,U,b,0,0,n,12316308800 ,-3.33936873175844e-006,U,b,0,0,n,13855847400,-3.3393478133803e-006,U,b,0,0,n,15395386000 ,-3.33935690832732e-006,U,b,0,0,n,16934924599,-3.33933689944388e-006,U,b,0,0,n,18474463200 ,-3.33934895024868e-006,U,b,0,0,n,20014001800,-3.33934440277517e-006,U,b,0,0,n,21553540400 ,-3.33933758156491e-006,U,b,0,0,n,23093079000,-3.33934735863295e-006,U,b,0,0,n,24632617600 ,-3.33936031893245e-006,U,b,0,0,n,26172156200,-3.33933894580696e-006,U,b,0,0,n,27711694800 ,-3.33935508933791e-006,U,b,0,0,n,29251233400,-3.33933553520183e-006,U,b,0,0,n,30790772000 ,-3.33935327034851e-006,U,b,0,0,n,32330310599,-3.33936009155877e-006,U,b,0,0,n,33869849199 ,-3.3393330340914e-006,U,b,0,0,n,35409387800,-3.33934985974338e-006,U,b,0,0,n,36948926400 ,-3.3393607736798e-006,U,b,0,0,n,38488465000,-3.33935372509586e-006,U,b,0,0,n,40028003600 ,-3.33935372509586e-006,U,b,0,0,n,41567542200,-3.33934326590679e-006,U,b,0,0,n,43107080800 ,-3.33935327034851e-006,U,b,0,0,n,44646619400,-3.33935395246954e-006,U,b,0,0,n,46186158000 ,-3.33935349772219e-006,U,b,0,0,n,47725696599,-3.33935213348013e-006,U,b,0,0,n,49265235200 ,-3.33936600327434e-006,U,b,0,0,n,50804773799,-3.33934099217004e-006,U,b,0,0,n,52344312400 ,-3.33934121954371e-006,U,b,0,0,n,53883850999,-3.33936100105348e-006,U,b,0,0,n,55423389600 ,-3.33935304297484e-006,U,b,0,0,n,56962928200,-3.33936714014271e-006,U,b,0,0,n,58502466800 ,-3.33934053742269e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 2.41871944695049e-009 KeyVer: 4005 KeyCount: 39 Key: 0,2.3942163807078e-009,U,s,0,0,n,1539538600,2.42808084749413e-009,U,b,0,0,n,3079077200 ,2.4102888573907e-009,U,b,0,0,n,4618615800,2.39039366078941e-009,U,b,0,0,n,6158154400 ,2.41043096593785e-009,U,b,0,0,n,7697693000,2.42268072270235e-009,U,b,0,0,n,9237231600 ,2.39428743498138e-009,U,b,0,0,n,10776770200,2.39342057284375e-009,U,b,0,0,n,12316308800 ,2.39033681737055e-009,U,b,0,0,n,13855847400,2.40321185174253e-009,U,b,0,0,n,15395386000 ,2.41988118432346e-009,U,b,0,0,n,16934924599,2.41068676132272e-009,U,b,0,0,n,18474463200 ,2.4056134861894e-009,U,b,0,0,n,20014001800,2.41136888234905e-009,U,b,0,0,n,21553540400 ,2.41017517055298e-009,U,b,0,0,n,23093079000,2.40761721670424e-009,U,b,0,0,n,24632617600 ,2.4178632429539e-009,U,b,0,0,n,26172156200,2.40468978063291e-009,U,b,0,0,n,27711694800 ,2.42715714193764e-009,U,b,0,0,n,29251233400,2.40325448430667e-009,U,b,0,0,n,30790772000 ,2.41257680499984e-009,U,b,0,0,n,32330310599,2.41657005517482e-009,U,b,0,0,n,33869849199 ,2.39467112805869e-009,U,b,0,0,n,35409387800,2.41227837705082e-009,U,b,0,0,n,36948926400 ,2.40983411003981e-009,U,b,0,0,n,38488465000,2.42387443449843e-009,U,b,0,0,n,40028003600 ,2.40905251303047e-009,U,b,0,0,n,41567542200,2.41102782183589e-009,U,b,0,0,n,43107080800 ,2.41894326791225e-009,U,b,0,0,n,44646619400,2.40780195781554e-009,U,b,0,0,n,46186158000 ,2.38799202634254e-009,U,b,0,0,n,47725696599,2.40974884491152e-009,U,b,0,0,n,49265235200 ,2.38901520788204e-009,U,b,0,0,n,50804773799,2.42150122176099e-009,U,b,0,0,n,52344312400 ,2.41820430346706e-009,U,b,0,0,n,53883850999,2.38571828958811e-009,U,b,0,0,n,55423389600 ,2.39909070387512e-009,U,b,0,0,n,56962928200,2.38347297454311e-009,U,b,0,0,n,58502466800 ,2.42098963099124e-009,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 3.29875911120325e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,3.29875911120325e-006,U,s,0,0,n,28866348750,3.29875911120325e-006,U,s,0 ,0,n,57732697500,3.29875911120325e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.02836747323454e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-3.02836747323454e-006,U,s,0,0,n,28866348750,-3.02836747323454e-006,U,s ,0,0,n,57732697500,-3.02836747323454e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 18.566930770874 KeyVer: 4005 KeyCount: 3 Key: 1924423250,18.566930770874,U,s,0,0,n,28866348750,18.566930770874,U,s,0,0,n,57732697500 ,18.566930770874,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Middle3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.529128074646 Color: 1,0,0 } Channel: "Y" { Default: -1.97209737962112e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-1.97213785213535e-006,U,s,0,0,n,1539538600,-1.97209669750009e-006,U,b,0,0,n,3079077200 ,-1.97211966224131e-006,U,b,0,0,n,4618615800,-1.97214194486151e-006,U,b,0,0,n,6158154400 ,-1.9721253465832e-006,U,b,0,0,n,7697693000,-1.97210192709463e-006,U,b,0,0,n,9237231600 ,-1.9721160242625e-006,U,b,0,0,n,10776770200,-1.9721799162653e-006,U,b,0,0,n,12316308800 ,-1.97217923414428e-006,U,b,0,0,n,13855847400,-1.9721132957784e-006,U,b,0,0,n,15395386000 ,-1.97216104425024e-006,U,b,0,0,n,16934924599,-1.97209419638966e-006,U,b,0,0,n,18474463200 ,-1.97211988961499e-006,U,b,0,0,n,20014001800,-1.9721151147678e-006,U,b,0,0,n,21553540400 ,-1.97210329133668e-006,U,b,0,0,n,23093079000,-1.97212057173601e-006,U,b,0,0,n,24632617600 ,-1.97213512365124e-006,U,b,0,0,n,26172156200,-1.97210283658933e-006,U,b,0,0,n,27711694800 ,-1.97213853425637e-006,U,b,0,0,n,29251233400,-1.97209647012642e-006,U,b,0,0,n,30790772000 ,-1.9721410353668e-006,U,b,0,0,n,32330310599,-1.97215013031382e-006,U,b,0,0,n,33869849199 ,-1.97207600649563e-006,U,b,0,0,n,35409387800,-1.97212352759379e-006,U,b,0,0,n,36948926400 ,-1.97213898900372e-006,U,b,0,0,n,38488465000,-1.97213489627757e-006,U,b,0,0,n,40028003600 ,-1.972137397388e-006,U,b,0,0,n,41567542200,-1.97210783881019e-006,U,b,0,0,n,43107080800 ,-1.97213284991449e-006,U,b,0,0,n,44646619400,-1.97213080355141e-006,U,b,0,0,n,46186158000 ,-1.97212557395687e-006,U,b,0,0,n,47725696599,-1.97212966668303e-006,U,b,0,0,n,49265235200 ,-1.97214262698253e-006,U,b,0,0,n,50804773799,-1.97210420083138e-006,U,b,0,0,n,52344312400 ,-1.97209601537907e-006,U,b,0,0,n,53883850999,-1.97213967112475e-006,U,b,0,0,n,55423389600 ,-1.97212602870422e-006,U,b,0,0,n,56962928200,-1.97215263142425e-006,U,b,0,0,n,58502466800 ,-1.97210692931549e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -3.19399333648107e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-3.19387453373565e-007,U,s,0,0,n,1539538600,-3.19370826673548e-007,U,b,0,0,n,3079077200 ,-3.19379097390993e-007,U,b,0,0,n,4618615800,-3.19400442094775e-007,U,b,0,0,n,6158154400 ,-3.193697750703e-007,U,b,0,0,n,7697693000,-3.19400896842126e-007,U,b,0,0,n,9237231600 ,-3.19428352213436e-007,U,b,0,0,n,10776770200,-3.19262795756003e-007,U,b,0,0,n,12316308800 ,-3.19261602044207e-007,U,b,0,0,n,13855847400,-3.19422412076165e-007,U,b,0,0,n,15395386000 ,-3.1923704568726e-007,U,b,0,0,n,16934924599,-3.19429517503522e-007,U,b,0,0,n,18474463200 ,-3.19394558800923e-007,U,b,0,0,n,20014001800,-3.1937526046022e-007,U,b,0,0,n,21553540400 ,-3.19389812375448e-007,U,b,0,0,n,23093079000,-3.19375601520733e-007,U,b,0,0,n,24632617600 ,-3.19380490054755e-007,U,b,0,0,n,26172156200,-3.19407860160936e-007,U,b,0,0,n,27711694800 ,-3.19307787322032e-007,U,b,0,0,n,29251233400,-3.19418973049324e-007,U,b,0,0,n,30790772000 ,-3.19315631713835e-007,U,b,0,0,n,32330310599,-3.19313130603405e-007,U,b,0,0,n,33869849199 ,-3.19509098289927e-007,U,b,0,0,n,35409387800,-3.19371935120216e-007,U,b,0,0,n,36948926400 ,-3.19376169954921e-007,U,b,0,0,n,38488465000,-3.19322651876064e-007,U,b,0,0,n,40028003600 ,-3.19338226972832e-007,U,b,0,0,n,41567542200,-3.19399305226398e-007,U,b,0,0,n,43107080800 ,-3.19340898613518e-007,U,b,0,0,n,44646619400,-3.19374862556288e-007,U,b,0,0,n,46186158000 ,-3.19427044814802e-007,U,b,0,0,n,47725696599,-3.1935778110892e-007,U,b,0,0,n,49265235200 ,-3.19390778713569e-007,U,b,0,0,n,50804773799,-3.19379608981762e-007,U,b,0,0,n,52344312400 ,-3.19402971626914e-007,U,b,0,0,n,53883850999,-3.19409821258887e-007,U,b,0,0,n,55423389600 ,-3.19402261084178e-007,U,b,0,0,n,56962928200,-3.1939069344844e-007,U,b,0,0,n,58502466800 ,-3.19379893198857e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -5.25195036971127e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-5.25195036971127e-006,U,s,0,0,n,28866348750,-5.25195036971127e-006,U,s ,0,0,n,57732697500,-5.25195036971127e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -6.89941970222208e-008 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-6.89941970222208e-008,U,s,0,0,n,28866348750,-6.89941970222208e-008,U,s ,0,0,n,57732697500,-6.89941970222208e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.59999227523804 KeyVer: 4005 KeyCount: 3 Key: 1924423250,3.59999227523804,U,s,0,0,n,28866348750,3.59999227523804,U,s,0,0,n,57732697500 ,3.59999227523804,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Ring1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 4.29501342773438 Color: 1,0,0 } Channel: "Y" { Default: -0.0947411805391312 Color: 0,1,0 } Channel: "Z" { Default: -0.806465566158295 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 9.92037773132324 KeyVer: 4005 KeyCount: 3 Key: 1924423250,9.83023166656494,U,s,0,0,n,28866348750,10.6970157623291,U,s,0,0,n,57732697500 ,9.83023166656494,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 6.50482177734375 KeyVer: 4005 KeyCount: 3 Key: 1924423250,7.67222261428833,U,s,-8.62611293792725,0,n,28866348750,2.64032316207886 ,U,s,0,8.05103969573975,n,57732697500,7.67222261428833,U,s,8.05103969573975,0,n Color: 0,1,0 } Channel: "Z" { Default: 12.5329875946045 KeyVer: 4005 KeyCount: 3 Key: 1924423250,10.9412078857422,U,s,11.7619199752808,0,n,28866348750,17.8023262023926 ,U,s,0,-10.9777908325195,n,57732697500,10.9412078857422,U,s,-10.9777908325195,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Ring2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.40333533287048 Color: 1,0,0 } Channel: "Y" { Default: 3.56238683707488e-006 KeyVer: 4005 KeyCount: 39 Key: 0,3.56237524101743e-006,U,s,0,0,n,1539538600,3.56238729182223e-006,U,b,0,0,n,3079077200 ,3.562381152733e-006,U,b,0,0,n,4618615800,3.56237478627008e-006,U,b,0,0,n,6158154400 ,3.56237978849094e-006,U,b,0,0,n,7697693000,3.56238683707488e-006,U,b,0,0,n,9237231600 ,3.56237978849094e-006,U,b,0,0,n,10776770200,3.56236432708101e-006,U,b,0,0,n,12316308800 ,3.56236432708101e-006,U,b,0,0,n,13855847400,3.56238138010667e-006,U,b,0,0,n,15395386000 ,3.56237069354393e-006,U,b,0,0,n,16934924599,3.56238524545915e-006,U,b,0,0,n,18474463200 ,3.56237978849094e-006,U,b,0,0,n,20014001800,3.562381152733e-006,U,b,0,0,n,21553540400 ,3.56238251697505e-006,U,b,0,0,n,23093079000,3.56237956111727e-006,U,b,0,0,n,24632617600 ,3.56238069798565e-006,U,b,0,0,n,26172156200,3.56238251697505e-006,U,b,0,0,n,27711694800 ,3.56238024323829e-006,U,b,0,0,n,29251233400,3.56238228960137e-006,U,b,0,0,n,30790772000 ,3.56237546839111e-006,U,b,0,0,n,32330310599,3.56237501364376e-006,U,b,0,0,n,33869849199 ,3.56238751919591e-006,U,b,0,0,n,35409387800,3.56238024323829e-006,U,b,0,0,n,36948926400 ,3.56237842424889e-006,U,b,0,0,n,38488465000,3.56238001586462e-006,U,b,0,0,n,40028003600 ,3.56237660525949e-006,U,b,0,0,n,41567542200,3.5623829717224e-006,U,b,0,0,n,43107080800 ,3.56238047061197e-006,U,b,0,0,n,44646619400,3.56237774212786e-006,U,b,0,0,n,46186158000 ,3.56237592313846e-006,U,b,0,0,n,47725696599,3.56237865162257e-006,U,b,0,0,n,49265235200 ,3.56237364940171e-006,U,b,0,0,n,50804773799,3.56238570020651e-006,U,b,0,0,n,52344312400 ,3.56238706444856e-006,U,b,0,0,n,53883850999,3.56237410414906e-006,U,b,0,0,n,55423389600 ,3.56237842424889e-006,U,b,0,0,n,56962928200,3.56237114829128e-006,U,b,0,0,n,58502466800 ,3.56238433596445e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 8.68510085183516e-007 KeyVer: 4005 KeyCount: 39 Key: 0,8.68497863848461e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,1539538600,8.68517304297711e-007 ,U,s,0,0,a,0.989898998959688,0.989898998959688,3079077200,8.68507527229667e-007,U ,s,0,0,a,0.989898998959688,0.989898998959688,4618615800,8.68494510086748e-007,U,s ,0,0,a,0.989898998959688,0.989898998959688,6158154400,8.68508038820437e-007,U,s,0 ,0,a,0.989898998959688,0.989898998959688,7697693000,8.68512643137365e-007,U,s,0,0 ,a,0.989898998959688,0.989898998959688,9237231600,8.68494453243329e-007,U,s,0,0,a ,0.989898998959688,0.989898998959688,10776770200,8.68507186169154e-007,U,s,0,0,a,0.989898998959688 ,0.989898998959688,12316308800,8.6850587877052e-007,U,s,0,0,a,0.989898998959688,0.989898998959688 ,13855847400,8.68500023898378e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,15395386000 ,8.68523216013273e-007,U,s,0,0,a,0.988698878936702,0.988698878936702,16927226907,8.68503150286415e-007 ,U,s,0,0,a,0.989999008961604,0.989999008961604,18474463200,8.68503605033766e-007,U ,s,0,0,a,0.989898998959688,0.989898998959688,20014001800,8.68507925133599e-007,U,s ,0,0,a,0.989898998959688,0.989898998959688,21553540400,8.68505537710007e-007,U,s,0 ,0,a,0.989898998959688,0.989898998959688,23093079000,8.68505765083682e-007,U,s,0,0 ,a,0.989898998959688,0.989898998959688,24632617600,8.68512302076851e-007,U,s,0,0,a ,0.989898998959688,0.989898998959688,26172156200,8.6850138814043e-007,U,s,0,0,a,0.989898998959688 ,0.989898998959688,27711694800,8.68522192831733e-007,U,s,0,0,a,0.989898998959688,0.989898998959688 ,29251233400,8.68499455464189e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,30790772000 ,8.68513211571553e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,32330310599,8.68516167429334e-007 ,U,s,0,0,a,0.988698878936702,0.988698878936702,33862151507,8.68488029936998e-007,U ,s,0,0,a,0.989999008961604,0.989999008961604,35409387800,8.68509005158558e-007,U,s ,0,0,a,0.989898998959688,0.989898998959688,36948926400,8.68508038820437e-007,U,s,0 ,0,a,0.989898998959688,0.989898998959688,38488465000,8.68519464347628e-007,U,s,0,0 ,a,0.989898998959688,0.989898998959688,40028003600,8.68509800966422e-007,U,s,0,0,a ,0.989898998959688,0.989898998959688,41567542200,8.68505992457358e-007,U,s,0,0,a,0.989898998959688 ,0.989898998959688,43107080800,8.68515201091213e-007,U,s,0,0,a,0.989898998959688,0.989898998959688 ,44646619400,8.68506162987615e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,46186158000 ,8.6849092895136e-007,U,s,0,0,a,0.989898998959688,0.989898998959688,47725696599,8.68509005158558e-007 ,U,s,0,0,a,0.989898998959688,0.989898998959688,49265235200,8.68495078520937e-007,U ,s,0,0,a,0.989898998959688,0.989898998959688,50804773799,8.68513495788648e-007,U,s ,0,0,a,0.989898998959688,0.989898998959688,52344312400,8.68509971496678e-007,U,s,0 ,0,a,0.989898998959688,0.989898998959688,53883850999,8.68491213168454e-007,U,s,0,0 ,a,0.989898998959688,0.989898998959688,55423389600,8.68499171247095e-007,U,s,0,0,a ,0.989898998959688,0.989898998959688,56962928200,8.68491838446062e-007,U,s,0,0,a,0.989898998959688 ,0.989898998959688,58502466800,8.68512927354459e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -8.52487929137169e-008 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-8.52487929137169e-008,U,s,0,0,n,28866348750,-8.52487929137169e-008,U,s ,0,0,n,57732697500,-8.52487929137169e-008,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -1.5643117876607e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-1.5643117876607e-006,U,s,0,0,n,28866348750,-1.5643117876607e-006,U,s,0 ,0,n,57732697500,-1.5643117876607e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 27.2881908416748 KeyVer: 4005 KeyCount: 3 Key: 1924423250,27.2881908416748,U,s,0,0,n,28866348750,27.2881908416748,U,s,0,0,n,57732697500 ,27.2881908416748,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Ring3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.38826143741608 Color: 1,0,0 } Channel: "Y" { Default: -2.60250772043946e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-2.60247333017105e-007,U,s,0,0,n,1539538600,-2.60244718219838e-007,U,b,0,0,n,3079077200 ,-2.60243240290947e-007,U,b,0,0,n,4618615800,-2.60250430983433e-007,U,b,0,0,n,6158154400 ,-2.60243410821204e-007,U,b,0,0,n,7697693000,-2.60244632954709e-007,U,b,0,0,n,9237231600 ,-2.60256229012157e-007,U,b,0,0,n,10776770200,-2.60231502124952e-007,U,b,0,0,n,12316308800 ,-2.60233861126835e-007,U,b,0,0,n,13855847400,-2.60253358419504e-007,U,b,0,0,n,15395386000 ,-2.60230706317088e-007,U,b,0,0,n,16934924599,-2.60254921613523e-007,U,b,0,0,n,18474463200 ,-2.60248157246679e-007,U,b,0,0,n,20014001800,-2.60247503547362e-007,U,b,0,0,n,21553540400 ,-2.6025406896224e-007,U,b,0,0,n,23093079000,-2.60248327776935e-007,U,b,0,0,n,24632617600 ,-2.60231558968371e-007,U,b,0,0,n,26172156200,-2.60256115325319e-007,U,b,0,0,n,27711694800 ,-2.60228944171104e-007,U,b,0,0,n,29251233400,-2.60260776485666e-007,U,b,0,0,n,30790772000 ,-2.60240426541714e-007,U,b,0,0,n,32330310599,-2.60233207427518e-007,U,b,0,0,n,33869849199 ,-2.60267484009091e-007,U,b,0,0,n,35409387800,-2.60242813965306e-007,U,b,0,0,n,36948926400 ,-2.60236191707008e-007,U,b,0,0,n,38488465000,-2.60231786342047e-007,U,b,0,0,n,40028003600 ,-2.60242131844279e-007,U,b,0,0,n,41567542200,-2.60248299355226e-007,U,b,0,0,n,43107080800 ,-2.60235907489914e-007,U,b,0,0,n,44646619400,-2.60243552929751e-007,U,b,0,0,n,46186158000 ,-2.60257479567372e-007,U,b,0,0,n,47725696599,-2.60240824445646e-007,U,b,0,0,n,49265235200 ,-2.60250033079501e-007,U,b,0,0,n,50804773799,-2.60245229810607e-007,U,b,0,0,n,52344312400 ,-2.60251795225486e-007,U,b,0,0,n,53883850999,-2.602575648325e-007,U,b,0,0,n,55423389600 ,-2.60250686778818e-007,U,b,0,0,n,56962928200,-2.60247873029584e-007,U,b,0,0,n,58502466800 ,-2.60245940353343e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 1.2035725660553e-007 KeyVer: 4005 KeyCount: 39 Key: 0,1.20449072937845e-007,U,s,0,0,n,1539538600,1.20370714284945e-007,U,b,0,0,n,3079077200 ,1.20411201010029e-007,U,b,0,0,n,4618615800,1.20444070716985e-007,U,b,0,0,n,6158154400 ,1.20422782856622e-007,U,b,0,0,n,7697693000,1.20343500498166e-007,U,b,0,0,n,9237231600 ,1.20395938552065e-007,U,b,0,0,n,10776770200,1.20617116294852e-007,U,b,0,0,n,12316308800 ,1.2062621124187e-007,U,b,0,0,n,13855847400,1.20375929668626e-007,U,b,0,0,n,15395386000 ,1.20569225714462e-007,U,b,0,0,n,16934924599,1.20345760024065e-007,U,b,0,0,n,18474463200 ,1.20406284054297e-007,U,b,0,0,n,20014001800,1.20415066362511e-007,U,b,0,0,n,21553540400 ,1.20401139724891e-007,U,b,0,0,n,23093079000,1.20426136618335e-007,U,b,0,0,n,24632617600 ,1.20381201895725e-007,U,b,0,0,n,26172156200,1.20394105351807e-007,U,b,0,0,n,27711694800 ,1.20455027285971e-007,U,b,0,0,n,29251233400,1.20384882507096e-007,U,b,0,0,n,30790772000 ,1.20493183430881e-007,U,b,0,0,n,32330310599,1.20480706300441e-007,U,b,0,0,n,33869849199 ,1.20285704952039e-007,U,b,0,0,n,35409387800,1.20415279525332e-007,U,b,0,0,n,36948926400 ,1.20412607884646e-007,U,b,0,0,n,38488465000,1.20445307061345e-007,U,b,0,0,n,40028003600 ,1.20471383979748e-007,U,b,0,0,n,41567542200,1.20383191415385e-007,U,b,0,0,n,43107080800 ,1.20435686312703e-007,U,b,0,0,n,44646619400,1.20424715532863e-007,U,b,0,0,n,46186158000 ,1.20417595894651e-007,U,b,0,0,n,47725696599,1.20441328022025e-007,U,b,0,0,n,49265235200 ,1.20457954722042e-007,U,b,0,0,n,50804773799,1.20376597578797e-007,U,b,0,0,n,52344312400 ,1.20353675470142e-007,U,b,0,0,n,53883850999,1.20445491802457e-007,U,b,0,0,n,55423389600 ,1.20414625826015e-007,U,b,0,0,n,56962928200,1.20476613574283e-007,U,b,0,0,n,58502466800 ,1.20379070267518e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.73695445937483e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,1.73695445937483e-006,U,s,0,0,n,28866348750,1.73695445937483e-006,U,s,0 ,0,n,57732697500,1.73695445937483e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -8.55293436075044e-009 KeyVer: 4005 KeyCount: 3 Key: 1924423250,-8.55293436075044e-009,U,s,0,0,n,28866348750,-8.55293436075044e-009,U,s ,0,0,n,57732697500,-8.55293436075044e-009,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 13.044979095459 KeyVer: 4005 KeyCount: 3 Key: 1924423250,13.044979095459,U,s,0,0,n,28866348750,13.044979095459,U,s,0,0,n,57732697500 ,13.044979095459,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Pinky1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 3.97267866134644 Color: 1,0,0 } Channel: "Y" { Default: 0.223486974835396 Color: 0,1,0 } Channel: "Z" { Default: -1.74283790588379 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 24.3684997558594 KeyVer: 4005 KeyCount: 3 Key: 1924423250,24.3867149353027,U,s,0,0,n,28866348750,24.2115783691406,U,s,0,0,n,57732697500 ,24.3867149353027,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 5.07718563079834 KeyVer: 4005 KeyCount: 3 Key: 1924423250,6.66169738769531,U,s,-11.7082147598267,0,n,28866348750,-0.168094426393509 ,U,s,0,10.9276666641235,n,57732697500,6.66169738769531,U,s,10.9276666641235,0,n Color: 0,1,0 } Channel: "Z" { Default: 23.8567218780518 KeyVer: 4005 KeyCount: 3 Key: 1924423250,24.572681427002,U,s,-5.29033708572388,0,n,28866348750,21.4866504669189 ,U,s,0,4.9376482963562,n,57732697500,24.572681427002,U,s,4.9376482963562,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Pinky2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 1.13179266452789 Color: 1,0,0 } Channel: "Y" { Default: -4.5721540118393e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-4.57215764981811e-006,U,s,0,0,n,1539538600,-4.5721531023446e-006,U,b,0,0,n,3079077200 ,-4.57215355709195e-006,U,b,0,0,n,4618615800,-4.57215855931281e-006,U,b,0,0,n,6158154400 ,-4.57215537608135e-006,U,b,0,0,n,7697693000,-4.5721512833552e-006,U,b,0,0,n,9237231600 ,-4.57215901406016e-006,U,b,0,0,n,10776770200,-4.57216219729162e-006,U,b,0,0,n,12316308800 ,-4.57216265203897e-006,U,b,0,0,n,13855847400,-4.57215628557606e-006,U,b,0,0,n,15395386000 ,-4.57215719507076e-006,U,b,0,0,n,16934924599,-4.57215628557606e-006,U,b,0,0,n,18474463200 ,-4.57215719507076e-006,U,b,0,0,n,20014001800,-4.57215628557606e-006,U,b,0,0,n,21553540400 ,-4.57215901406016e-006,U,b,0,0,n,23093079000,-4.57215719507076e-006,U,b,0,0,n,24632617600 ,-4.57214900961844e-006,U,b,0,0,n,26172156200,-4.57215901406016e-006,U,b,0,0,n,27711694800 ,-4.5721512833552e-006,U,b,0,0,n,29251233400,-4.57216128779692e-006,U,b,0,0,n,30790772000 ,-4.57215810456546e-006,U,b,0,0,n,32330310599,-4.57215446658665e-006,U,b,0,0,n,33869849199 ,-4.57215810456546e-006,U,b,0,0,n,35409387800,-4.572154921334e-006,U,b,0,0,n,36948926400 ,-4.57215173810255e-006,U,b,0,0,n,38488465000,-4.57215173810255e-006,U,b,0,0,n,40028003600 ,-4.57215719507076e-006,U,b,0,0,n,41567542200,-4.57215537608135e-006,U,b,0,0,n,43107080800 ,-4.5721531023446e-006,U,b,0,0,n,44646619400,-4.57215583082871e-006,U,b,0,0,n,46186158000 ,-4.57216083304957e-006,U,b,0,0,n,47725696599,-4.572154921334e-006,U,b,0,0,n,49265235200 ,-4.57215992355486e-006,U,b,0,0,n,50804773799,-4.5721521928499e-006,U,b,0,0,n,52344312400 ,-4.57215446658665e-006,U,b,0,0,n,53883850999,-4.57215992355486e-006,U,b,0,0,n,55423389600 ,-4.57215719507076e-006,U,b,0,0,n,56962928200,-4.57215946880751e-006,U,b,0,0,n,58502466800 ,-4.57215446658665e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -2.5465004682701e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-2.54649876296753e-007,U,s,0,0,n,1539538600,-2.54645897257433e-007,U,b,0,0,n,3079077200 ,-2.54647886777093e-007,U,b,0,0,n,4618615800,-2.54651922659832e-007,U,b,0,0,n,6158154400 ,-2.54646977282391e-007,U,b,0,0,n,7697693000,-2.54650160513847e-007,U,b,0,0,n,9237231600 ,-2.54654480613681e-007,U,b,0,0,n,10776770200,-2.5463407382631e-007,U,b,0,0,n,12316308800 ,-2.54633675922378e-007,U,b,0,0,n,13855847400,-2.54653343745304e-007,U,b,0,0,n,15395386000 ,-2.54631970619812e-007,U,b,0,0,n,16934924599,-2.54653741649236e-007,U,b,0,0,n,18474463200 ,-2.54649592079659e-007,U,b,0,0,n,20014001800,-2.54647375186323e-007,U,b,0,0,n,21553540400 ,-2.54649194175727e-007,U,b,0,0,n,23093079000,-2.54647602559999e-007,U,b,0,0,n,24632617600 ,-2.54647886777093e-007,U,b,0,0,n,26172156200,-2.54651354225643e-007,U,b,0,0,n,27711694800 ,-2.54638962360332e-007,U,b,0,0,n,29251233400,-2.54652775311115e-007,U,b,0,0,n,30790772000 ,-2.54640212915547e-007,U,b,0,0,n,32330310599,-2.54639815011615e-007,U,b,0,0,n,33869849199 ,-2.54664143994887e-007,U,b,0,0,n,35409387800,-2.54646977282391e-007,U,b,0,0,n,36948926400 ,-2.54647716246836e-007,U,b,0,0,n,38488465000,-2.54640667662898e-007,U,b,0,0,n,40028003600 ,-2.54643111929909e-007,U,b,0,0,n,41567542200,-2.54649933140172e-007,U,b,0,0,n,43107080800 ,-2.54643282460165e-007,U,b,0,0,n,44646619400,-2.54647829933674e-007,U,b,0,0,n,46186158000 ,-2.54654480613681e-007,U,b,0,0,n,47725696599,-2.54645271979825e-007,U,b,0,0,n,49265235200 ,-2.54650387887523e-007,U,b,0,0,n,50804773799,-2.5464754571658e-007,U,b,0,0,n,52344312400 ,-2.54650501574361e-007,U,b,0,0,n,53883850999,-2.54653286901885e-007,U,b,0,0,n,55423389600 ,-2.546515247559e-007,U,b,0,0,n,56962928200,-2.5465101316513e-007,U,b,0,0,n,58502466800 ,-2.54647375186323e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.28670376398077e-006 KeyVer: 4005 KeyCount: 3 Key: 1924423250,1.28670376398077e-006,U,s,0,0,n,28866348750,1.28670376398077e-006,U,s,0 ,0,n,57732697500,1.28670376398077e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 2.94697493075091e-008 KeyVer: 4005 KeyCount: 3 Key: 1924423250,2.94697493075091e-008,U,s,0,0,n,28866348750,2.94697493075091e-008,U,s,0 ,0,n,57732697500,2.94697493075091e-008,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 21.8681793212891 KeyVer: 4005 KeyCount: 3 Key: 1924423250,21.8681793212891,U,s,0,0,n,28866348750,21.8681793212891,U,s,0,0,n,57732697500 ,21.8681793212891,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Pinky3" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 0.858952879905701 Color: 1,0,0 } Channel: "Y" { Default: -2.68376516032731e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-2.68374424194917e-006,U,s,0,0,n,1539538600,-2.68375606538029e-006,U,b,0,0,n,3079077200 ,-2.68374810730165e-006,U,b,0,0,n,4618615800,-2.68374810730165e-006,U,b,0,0,n,6158154400 ,-2.68374515144387e-006,U,b,0,0,n,7697693000,-2.68376174972218e-006,U,b,0,0,n,9237231600 ,-2.68376129497483e-006,U,b,0,0,n,10776770200,-2.68370308731392e-006,U,b,0,0,n,12316308800 ,-2.68370990852418e-006,U,b,0,0,n,13855847400,-2.68376243184321e-006,U,b,0,0,n,15395386000 ,-2.68371172751358e-006,U,b,0,0,n,16934924599,-2.68376265921688e-006,U,b,0,0,n,18474463200 ,-2.68374992629106e-006,U,b,0,0,n,20014001800,-2.68374810730165e-006,U,b,0,0,n,21553540400 ,-2.68375447376457e-006,U,b,0,0,n,23093079000,-2.68374787992798e-006,U,b,0,0,n,24632617600 ,-2.68374219558609e-006,U,b,0,0,n,26172156200,-2.68375833911705e-006,U,b,0,0,n,27711694800 ,-2.68372855316557e-006,U,b,0,0,n,29251233400,-2.68376220446953e-006,U,b,0,0,n,30790772000 ,-2.68373150902335e-006,U,b,0,0,n,32330310599,-2.68372764367086e-006,U,b,0,0,n,33869849199 ,-2.68378425971605e-006,U,b,0,0,n,35409387800,-2.68374537881755e-006,U,b,0,0,n,36948926400 ,-2.68374219558609e-006,U,b,0,0,n,38488465000,-2.68373219114437e-006,U,b,0,0,n,40028003600 ,-2.68373696599156e-006,U,b,0,0,n,41567542200,-2.68375379164354e-006,U,b,0,0,n,43107080800 ,-2.68373673861788e-006,U,b,0,0,n,44646619400,-2.6837449240702e-006,U,b,0,0,n,46186158000 ,-2.68375765699602e-006,U,b,0,0,n,47725696599,-2.68374037659669e-006,U,b,0,0,n,49265235200 ,-2.68374424194917e-006,U,b,0,0,n,50804773799,-2.68375629275397e-006,U,b,0,0,n,52344312400 ,-2.68376675194304e-006,U,b,0,0,n,53883850999,-2.68374947154371e-006,U,b,0,0,n,55423389600 ,-2.68375333689619e-006,U,b,0,0,n,56962928200,-2.68373901235464e-006,U,b,0,0,n,58502466800 ,-2.68375606538029e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.09315595359294e-007 KeyVer: 4005 KeyCount: 39 Key: 0,3.09369966089434e-007,U,s,0,0,n,1539538600,3.09317897517758e-007,U,b,0,0,n,3079077200 ,3.09344557081204e-007,U,b,0,0,n,4618615800,3.09368999751314e-007,U,b,0,0,n,6158154400 ,3.09350127736252e-007,U,b,0,0,n,7697693000,3.09307495172106e-007,U,b,0,0,n,9237231600 ,3.09342908622057e-007,U,b,0,0,n,10776770200,3.09443464630021e-007,U,b,0,0,n,12316308800 ,3.09445852053614e-007,U,b,0,0,n,13855847400,3.09332733650081e-007,U,b,0,0,n,15395386000 ,3.09415440824523e-007,U,b,0,0,n,16934924599,3.09314202695532e-007,U,b,0,0,n,18474463200 ,3.09344272864109e-007,U,b,0,0,n,20014001800,3.0934671713112e-007,U,b,0,0,n,21553540400 ,3.09340407511627e-007,U,b,0,0,n,23093079000,3.09353765715059e-007,U,b,0,0,n,24632617600 ,3.09324718728021e-007,U,b,0,0,n,26172156200,3.0933824746171e-007,U,b,0,0,n,27711694800 ,3.09360814298998e-007,U,b,0,0,n,29251233400,3.09334041048714e-007,U,b,0,0,n,30790772000 ,3.09387246488768e-007,U,b,0,0,n,32330310599,3.09378435758845e-007,U,b,0,0,n,33869849199 ,3.09283734623023e-007,U,b,0,0,n,35409387800,3.09345580262743e-007,U,b,0,0,n,36948926400 ,3.09344386550947e-007,U,b,0,0,n,38488465000,3.09356778416259e-007,U,b,0,0,n,40028003600 ,3.09376218865509e-007,U,b,0,0,n,41567542200,3.09330630443583e-007,U,b,0,0,n,43107080800 ,3.09353879401897e-007,U,b,0,0,n,44646619400,3.0935274253352e-007,U,b,0,0,n,46186158000 ,3.09357460537285e-007,U,b,0,0,n,47725696599,3.0935819950173e-007,U,b,0,0,n,49265235200 ,3.09375309370807e-007,U,b,0,0,n,50804773799,3.09324320824089e-007,U,b,0,0,n,52344312400 ,3.09313975321857e-007,U,b,0,0,n,53883850999,3.09371444018325e-007,U,b,0,0,n,55423389600 ,3.09350582483603e-007,U,b,0,0,n,56962928200,3.09387701236119e-007,U,b,0,0,n,58502466800 ,3.09324605041184e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 1924423250,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 0 KeyVer: 4005 KeyCount: 3 Key: 1924423250,0,U,s,0,0,n,28866348750,0,U,s,0,0,n,57732697500,0,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 5.75897359848022 KeyVer: 4005 KeyCount: 3 Key: 1924423250,5.75897359848022,U,s,0,0,n,28866348750,5.75897359848022,U,s,0,0,n,57732697500 ,5.75897359848022,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Thigh1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: -3.76930594444275 Color: 1,0,0 } Channel: "Y" { Default: -0.355237752199173 Color: 0,1,0 } Channel: "Z" { Default: 3.4951446056366 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -14.2042036056519 KeyVer: 4005 KeyCount: 41 Key: 0,-13.2836256027222,U,s,0,0,n,1539538600,-12.2141666412354,U,b,0,0,n,3079077200,-11.8840589523315 ,U,b,0,0,n,4618615800,-12.0185041427612,U,b,0,0,n,6158154400,-12.0497541427612,U,b ,0,0,n,7697693000,-12.1892185211182,U,b,0,0,n,9237231600,-12.0069074630737,U,b,0,0 ,n,10776770200,-12.2866773605347,U,b,0,0,n,12316308800,-12.3045291900635,U,b,0,0,n ,13855847400,-12.0746250152588,U,b,0,0,n,15395386000,-11.8951368331909,U,b,0,0.138859555125237 ,n,16927226907,-11.7709445953369,U,b,0.138859555125237,0,n,16934924599,-11.7709302902222 ,U,b,0,0,n,18474463200,-11.5127363204956,U,b,0,0,n,20014001800,-11.1116437911987,U ,b,0,0,n,21553540400,-10.6088209152222,U,b,0,0,n,23093079000,-10.1082258224487,U,b ,0,0,n,24632617600,-9.36892223358154,U,b,0,0,n,26172156200,-8.69697093963623,U,b,0 ,0,n,27711694800,-9.10406017303467,U,b,0,0,n,29251233400,-9.87619972229004,U,b,0,0 ,n,30790772000,-11.4092969894409,U,b,0,0,n,32330310599,-12.5566968917847,U,b,0,-1.53721296787262 ,n,33862151507,-13.9315366744995,U,b,-1.53721296787262,0,n,33869849199,-13.9316968917847 ,U,b,0,0,n,35409387800,-14.9620933532715,U,b,0,0,n,36948926400,-14.8479108810425,U ,b,0,0,n,38488465000,-14.1059827804565,U,b,0,0,n,40028003600,-14.0971784591675,U,b ,0,0,n,41567542200,-13.7362461090088,U,b,0,0,n,43107080800,-13.3009443283081,U,b,0 ,0,n,44646619400,-13.7619428634644,U,b,0,0,n,46186158000,-13.6813917160034,U,b,0,0 ,n,47725696599,-14.1359052658081,U,b,0,0,n,49265235200,-14.410059928894,U,b,0,0,n ,50804773799,-14.497706413269,U,b,0,0,n,52344312400,-14.1498508453369,U,b,0,0,n,53883850999 ,-13.8505201339722,U,b,0,0,n,55423389600,-13.4876661300659,U,b,0,0,n,56962928200,-13.3948163986206 ,U,b,0,0,n,58502466800,-13.2835645675659,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -164.144622802734 KeyVer: 4005 KeyCount: 41 Key: 0,-168.131698608398,U,s,0,0,n,1539538600,-169.400680541992,U,b,0,0,n,3079077200,-171.672409057617 ,U,b,0,0,n,4618615800,-173.129058837891,U,b,0,0,n,6158154400,-174.804214477539,U,b ,0,0,n,7697693000,-176.701934814453,U,b,0,0,n,9237231600,-177.908096313477,U,b,0,0 ,n,10776770200,-177.560592651367,U,b,0,0,n,12316308800,-177.799987792969,U,b,0,0,n ,13855847400,-178.922256469727,U,b,0,0,n,15395386000,-179.568496704102,U,b,0,-0.446175903081894 ,n,16927226907,-179.967544555664,U,b,-0.446175903081894,0,n,16934924599,-179.967590332031 ,U,b,0,0,n,18474463200,-180.582260131836,U,b,0,0,n,20014001800,-181.524795532227,U ,b,0,0,n,21553540400,-182.733673095703,U,b,0,0,n,23093079000,-184.078094482422,U,b ,0,0,n,24632617600,-185.216995239258,U,b,0,0,n,26172156200,-185.507827758789,U,b,0 ,0,n,27711694800,-184.374404907227,U,b,0,0,n,29251233400,-182.320236206055,U,b,0,0 ,n,30790772000,-179.286239624023,U,b,0,0,n,32330310599,-177.198211669922,U,b,0,3.8426399230957 ,n,33862151507,-173.761459350586,U,b,3.8426399230957,0,n,33869849199,-173.76106262207 ,U,b,0,0,n,35409387800,-169.894729614258,U,b,0,0,n,36948926400,-166.017166137695,U ,b,0,0,n,38488465000,-162.788818359375,U,b,0,0,n,40028003600,-162.659088134766,U,b ,0,0,n,41567542200,-161.72607421875,U,b,0,0,n,43107080800,-159.943923950195,U,b,0 ,0,n,44646619400,-159.311767578125,U,b,0,0,n,46186158000,-158.277862548828,U,b,0,0 ,n,47725696599,-159.686279296875,U,b,0,0,n,49265235200,-161.404632568359,U,b,0,0,n ,50804773799,-163.537399291992,U,b,0,0,n,52344312400,-164.257064819336,U,b,0,0,n,53883850999 ,-164.530349731445,U,b,0,0,n,55423389600,-165.145874023438,U,b,0,0,n,56962928200,-166.572967529297 ,U,b,0,0,n,58502466800,-168.131164550781,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -29.484790802002 KeyVer: 4005 KeyCount: 41 Key: 0,-30.3268051147461,U,s,-16.2599067687988,30.8690700531006,a,0.329832986317342,0.989898998959688 ,1539538600,-30.0833187103271,U,s,30.8690700531006,52.7339057922363,a,0.989898998959688 ,0.989898998959688,3079077200,-28.2688674926758,U,s,52.7339057922363,47.5948524475098 ,a,0.989898998959688,0.989898998959688,4618615800,-26.5677261352539,U,s,47.5948524475098 ,40.2852516174316,a,0.989898998959688,0.329832986317342,6158154400,-25.0958766937256 ,U,s,40.2852516174316,51.1244087219238,a,0.329832986317342,0.329832986317342,7697693000 ,-23.8820419311523,U,s,51.1244087219238,86.3232574462891,a,0.329832986317342,0.329832986317342 ,9237231600,-21.6875839233398,U,s,86.3232574462891,94.9324188232422,a,0.329832986317342 ,0.329832986317342,10776770200,-18.1271591186523,U,s,94.9324188232422,88.7693023681641 ,a,0.329832986317342,0.329832986317342,12316308800,-15.3587560653687,U,s,88.7693023681641 ,87.2586822509766,a,0.329832986317342,0.329832986317342,13855847400,-12.2092046737671 ,U,s,87.2586822509766,74.8988418579102,a,0.329832986317342,0.989898998959688,15395386000 ,-9.54151058197021,U,s,74.8988418579102,64.3027648925781,a,0.988698878936702,0.988698878936702 ,16927226907,-7.2294225692749,U,s,64.3027648925781,64.1804428100586,a,0.989999008961604 ,0.437743778384174,16934924599,-7.21602773666382,U,s,64.1804428100586,57.4942398071289 ,a,0.333333336384385,0.329832986317342,18474463200,-5.25926876068115,U,s,57.4942398071289 ,60.7072525024414,a,0.329932996319258,0.329932996319258,20014001800,-3.38397908210754 ,U,s,60.7072525024414,71.6988296508789,a,0.329932996319258,0.329832986317342,21553540400 ,-1.21211922168732,U,s,71.6988296508789,102.656715393066,a,0.329832986317342,0.329832986317342 ,23093079000,1.39594352245331,U,s,102.656715393066,124.031280517578,a,0.329832986317342 ,0.329832986317342,24632617600,5.6316614151001,U,s,124.031280517578,93.2759857177734 ,a,0.329832986317342,0.329832986317342,26172156200,9.66469669342041,U,s,93.2759857177734 ,68.0053787231445,a,0.329832986317342,0.989999008961604,27711694800,11.8500604629517 ,U,s,68.0053787231445,50.909049987793,a,0.989999008961604,0.329832986317342,29251233400 ,14.1983880996704,U,s,50.909049987793,1.23435175418854,a,0.329832986317342,0.329832986317342 ,30790772000,15.2439975738525,U,s,1.23435175418854,-73.9931030273438,a,0.329832986317342 ,0.329832986317342,32330310599,14.2806787490845,U,s,-73.9931030273438,-154.180709838867 ,a,0.32943294630968,0.32943294630968,33862151507,10.345269203186,U,s,-154.180709838867 ,-155.0078125,a,0.41224122789572,0.416641667980002,33869849199,10.3130598068237,U ,s,-155.0078125,-194.773559570313,a,0.333233326382469,0.329832986317342,35409387800 ,3.97229838371277,U,s,-194.773559570313,-200.194900512695,a,0.329932996319258,0.329932996319258 ,36948926400,-2.67822957038879,U,s,-200.194900512695,-177.585296630859,a,0.329932996319258 ,0.989898998959688,38488465000,-9.37403011322021,U,s,-177.585296630859,-155.605087280273 ,a,0.989898998959688,0.989999008961604,40028003600,-14.5172500610352,U,s,-155.605087280273 ,-140.417861938477,a,0.989999008961604,0.989898998959688,41567542200,-19.7477035522461 ,U,s,-140.417861938477,-108.721839904785,a,0.989898998959688,0.329932996319258,43107080800 ,-23.8784408569336,U,s,-108.721839904785,-85.6574325561523,a,0.329932996319258,0.329932996319258 ,44646619400,-26.9958267211914,U,s,-85.6574325561523,-62.7225227355957,a,0.329932996319258 ,0.329932996319258,46186158000,-29.5889358520508,U,s,-62.7225227355957,-22.8538475036621 ,a,0.329932996319258,0.329932996319258,47725696599,-31.1773281097412,U,s,-22.8538475036621 ,20.2175846099854,a,0.329932996319258,0.989898998959688,49265235200,-31.1125259399414 ,U,s,20.2175846099854,25.5363693237305,a,0.989898998959688,0.329832986317342,50804773799 ,-29.8294887542725,U,s,25.5363693237305,10.4301090240479,a,0.329832986317342,0.329932996319258 ,52344312400,-29.4101009368896,U,s,10.4301090240479,-4.55454111099243,a,0.329932996319258 ,0.329832986317342,53883850999,-29.134147644043,U,s,-4.55454111099243,-10.3504514694214 ,a,0.329832986317342,0.329832986317342,55423389600,-29.713737487793,U,s,-10.3504514694214 ,-9.19140243530273,a,0.329832986317342,0.329932996319258,56962928200,-29.8241786956787 ,U,s,-9.19140243530273,-20.9477634429932,a,0.329932996319258,0.329832986317342,58502466800 ,-30.3264980316162,U,s,-20.9477634429932,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Knee2" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 18.257194519043 Color: 1,0,0 } Channel: "Y" { Default: -6.12689859735838e-007 KeyVer: 4005 KeyCount: 18 Key: 0,-6.12688950241136e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600 ,-6.12690030266094e-007,U,s,0,0,a,0.329832986317342,0.989898998959688,3079077200,-6.12690087109513e-007 ,U,s,0,0,a,0.989898998959688,0.329832986317342,4618615800,-6.12689973422675e-007,U ,s,0,0,a,0.329832986317342,0.329832986317342,6158154400,-6.12689575518743e-007,U,s ,0,0,a,0.329832986317342,0.329832986317342,7697693000,-6.12689404988487e-007,U,s,0 ,0,a,0.329832986317342,0.989898998959688,9237231600,-6.12690143952932e-007,U,b,0,0 ,a,0.989898998959688,0.329832986317342,10776770200,-6.12690143952932e-007,U,b,0,0 ,a,0.329832986317342,0.329832986317342,44646619400,-6.12689632362162e-007,U,b,0,0 ,a,0.329832986317342,0.329832986317342,46186158000,-6.12689632362162e-007,U,b,0,0 ,a,0.329832986317342,0.989898998959688,47725696599,-6.12690939760796e-007,U,s,0,0 ,a,0.989898998959688,0.329832986317342,49265235200,-6.12690143952932e-007,U,s,0,0 ,a,0.329832986317342,0.329832986317342,50804773799,-6.12690030266094e-007,U,s,0,0 ,a,0.329832986317342,0.329832986317342,52344312400,-6.12689859735838e-007,U,s,0,0 ,a,0.329832986317342,0.329832986317342,53883850999,-6.12689291301649e-007,U,s,0,0 ,a,0.329832986317342,0.989898998959688,55423389600,-6.12689859735838e-007,U,s,0,0 ,a,0.989898998959688,0.989898998959688,56962928200,-6.12689973422675e-007,U,s,0,0 ,a,0.989898998959688,0.329832986317342,58502466800,-6.12689575518743e-007,U,s,0,0 ,n Color: 0,1,0 } Channel: "Z" { Default: 1.20223648991669e-006 KeyVer: 4005 KeyCount: 11 Key: 0,1.2022368309772e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,1539538600,1.20223614885617e-006 ,U,s,0,0,a,0.989898998959688,0.329832986317342,3079077200,1.20223603516934e-006,U ,s,0,0,a,0.329832986317342,0.329832986317342,47725696599,1.2022359214825e-006,U,s ,0,0,a,0.329832986317342,0.329832986317342,49265235200,1.20223614885617e-006,U,s,0 ,0,a,0.329832986317342,0.989898998959688,50804773799,1.20223626254301e-006,U,s,0,0 ,a,0.989898998959688,0.329832986317342,52344312400,1.20223660360352e-006,U,s,0,0,a ,0.329832986317342,0.329832986317342,53883850999,1.20223717203771e-006,U,s,0,0,a,0.329832986317342 ,0.329832986317342,55423389600,1.20223660360352e-006,U,b,0,0,a,0.329832986317342,0.329832986317342 ,56962928200,1.20223660360352e-006,U,b,0,0,a,0.329832986317342,0.329832986317342,58502466800 ,1.20223614885617e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 9.30474472045898 KeyVer: 4005 KeyCount: 45 Key: 0,1.81418752670288,U,s,194.129928588867,52.9732894897461,a,0.329832986317342,0.329932996319258 ,1539538600,5.93257427215576,U,s,52.9732894897461,-24.1927452087402,a,0.329932996319258 ,0.989898998959688,3079077200,5.34574031829834,U,s,-24.1927452087402,-41.609748840332 ,a,0.989898998959688,0.329832986317342,4618615800,4.31972455978394,U,s,-41.609748840332 ,-48.0340309143066,a,0.329832986317342,0.329932996319258,6158154400,2.57175731658936 ,U,s,-48.0340309143066,-32.6010665893555,a,0.329932996319258,0.329832986317342,7697693000 ,1.11745595932007,U,s,-32.6010665893555,-7.37948131561279,a,0.329832986317342,0.329932996319258 ,9237231600,0.398352712392807,U,s,-7.37948131561279,7.84316921234131,a,0.329932996319258 ,0.329832986317342,10776770200,0.625490546226501,U,s,7.84316921234131,0.109712585806847 ,a,0.329832986317342,0.329832986317342,12316308800,0.921230614185333,U,s,0.109712585806847 ,-4.38973760604858,a,0.329832986317342,0.989999008961604,13855847400,0.632804691791534 ,U,s,-4.38973760604858,3.15626621246338,a,0.989999008961604,0.989999008961604,15395386000 ,0.628581464290619,U,s,3.15626621246338,3.77498412132263,a,0.988698878936702,0.32943294630968 ,16927226907,0.84120124578476,U,s,3.77498412132263,3.99858736991882,a,0.33033303632692 ,0.33033303632692,18474463200,0.878030121326447,U,s,3.99858736991882,6.27476596832275 ,a,0.329832986317342,0.329832986317342,20014001800,1.10740196704865,U,s,6.27476596832275 ,5.91541194915771,a,0.329832986317342,0.329832986317342,21553540400,1.29634785652161 ,U,s,5.91541194915771,11.4999532699585,a,0.329832986317342,0.329832986317342,23093079000 ,1.50176274776459,U,s,11.4999532699585,16.1096305847168,a,0.329832986317342,0.329832986317342 ,24632617600,2.06301116943359,U,s,16.1096305847168,24.2444667816162,a,0.329832986317342 ,0.989999008961604,26172156200,2.57573819160461,U,s,24.2444667816162,62.7332801818848 ,a,0.989999008961604,0.989999008961604,27711694800,3.67930889129639,U,s,62.7332801818848 ,105.38550567627,a,0.989999008961604,0.329832986317342,29251233400,6.75795698165894 ,U,s,105.38550567627,85.576286315918,a,0.329832986317342,0.329832986317342,30790772000 ,10.7050094604492,U,s,85.576286315918,30.2960338592529,a,0.329832986317342,0.329832986317342 ,32330310599,12.4630432128906,U,s,30.2960338592529,17.6096153259277,a,0.329032906302018 ,0.329032906302018,33092382207,12.7792701721191,U,s,17.6096153259277,11.2530336380005 ,a,0.329832986317342,0.329932996319258,33862151507,13.0456886291504,U,s,11.2530336380005 ,4.37883949279785,a,0.330733076334582,0.330733076334582,34639618500,13.1547317504883 ,U,s,4.37883949279785,-34.1706962585449,a,0.329832986317342,0.329832986317342,35409387800 ,13.1934251785278,U,s,-34.1706962585449,-84.1081161499023,a,0.329832986317342,0.329932996319258 ,36948926400,9.62158298492432,U,s,-84.1081161499023,-26.9458656311035,a,0.329932996319258 ,0.989898998959688,38488465000,7.58621692657471,U,s,-26.9458656311035,37.4692192077637 ,a,0.989898998959688,0.329932996319258,40028003600,7.82519245147705,U,s,37.4692192077637 ,90.2785415649414,a,0.329932996319258,0.329932996319258,41567542200,10.0841646194458 ,U,s,90.2785415649414,91.5232086181641,a,0.329932996319258,0.329932996319258,43107080800 ,13.8437623977661,U,s,91.5232086181641,67.8866882324219,a,0.329932996319258,0.329832986317342 ,44646619400,16.1857128143311,U,s,67.8866882324219,-8.14556312561035,a,0.329832986317342 ,0.329832986317342,46186158000,18.3695411682129,U,s,-8.14556312561035,-45.6888465881348 ,a,0.329832986317342,0.989898998959688,46955927300,17.619945526123,U,s,-45.6888465881348 ,-55.9278259277344,a,0.989898998959688,0.329932996319258,47725696599,16.8465805053711 ,U,s,-55.9278259277344,-66.6511077880859,a,0.329932996319258,0.329832986317342,48495465900 ,15.7556838989258,U,s,-66.6511077880859,-80.388801574707,a,0.329832986317342,0.329832986317342 ,49265235200,14.6248760223389,U,s,-80.388801574707,-94.2590789794922,a,0.329832986317342 ,0.329832986317342,50035004500,13.076057434082,U,s,-94.2590789794922,-91.139762878418 ,a,0.329832986317342,0.329832986317342,50804773799,11.4829072952271,U,s,-91.139762878418 ,-87.2333374023438,a,0.329832986317342,0.329832986317342,51574543100,10.038064956665 ,U,s,-87.2333374023438,-86.3350677490234,a,0.329832986317342,0.329932996319258,52344312400 ,8.57512950897217,U,s,-86.3350677490234,-64.0796279907227,a,0.329932996319258,0.329832986317342 ,53883850999,5.79336643218994,U,s,-64.0796279907227,-39.2254371643066,a,0.329832986317342 ,0.329832986317342,55423389600,4.30315446853638,U,s,-39.2254371643066,-37.3297080993652 ,a,0.329832986317342,0.329832986317342,56962928200,3.17833757400513,U,s,-37.3297080993652 ,-44.500114440918,a,0.329832986317342,0.329832986317342,58502466800,1.81450724601746 ,U,s,-44.500114440918,0,n Color: 1,0,0 } Channel: "Y" { Default: -0.54519647359848 KeyVer: 4005 KeyCount: 45 Key: 0,1.0333206653595,U,s,2.22026991844177,9.14059162139893,a,0.329832986317342,0.989999008961604 ,1539538600,1.22266829013824,U,s,9.14059162139893,21.6986980438232,a,0.989999008961604 ,0.329832986317342,3079077200,1.642693400383,U,s,21.6986980438232,27.1240997314453 ,a,0.329832986317342,0.329832986317342,4618615800,2.66924810409546,U,s,27.1240997314453 ,19.390588760376,a,0.329832986317342,0.329832986317342,6158154400,3.45096683502197 ,U,s,19.390588760376,11.624716758728,a,0.329832986317342,0.329832986317342,7697693000 ,3.96195411682129,U,s,11.624716758728,-0.127701058983803,a,0.329832986317342,0.989898998959688 ,9237231600,4.22594785690308,U,s,-0.127701058983803,-5.46230506896973,a,0.989898998959688 ,0.329832986317342,10776770200,3.95344066619873,U,s,-5.46230506896973,-5.22423696517944 ,a,0.329832986317342,0.329932996319258,12316308800,3.86179423332214,U,s,-5.22423696517944 ,-9.92412948608398,a,0.329932996319258,0.329832986317342,13855847400,3.60515832901001 ,U,s,-9.92412948608398,-12.0255632400513,a,0.329832986317342,0.329832986317342,15395386000 ,3.20018553733826,U,s,-12.0255632400513,-8.03401565551758,a,0.32943294630968,0.32943294630968 ,16927226907,2.805908203125,U,s,-8.03401565551758,-3.49452376365662,a,0.33033303632692 ,0.33033303632692,18474463200,2.66782855987549,U,s,-3.49452376365662,0.017708333209157 ,a,0.329832986317342,0.989999008961604,20014001800,2.57195353507996,U,s,0.017708333209157 ,1.28147387504578,a,0.989999008961604,0.989898998959688,21553540400,2.6690092086792 ,U,s,1.28147387504578,-4.58256483078003,a,0.989898998959688,0.989999008961604,23093079000 ,2.6573851108551,U,s,-4.58256483078003,-14.0580501556396,a,0.989999008961604,0.329932996319258 ,24632617600,2.3635048866272,U,s,-14.0580501556396,-24.4900951385498,a,0.329932996319258 ,0.329832986317342,26172156200,1.7201817035675,U,s,-24.4900951385498,-22.5931930541992 ,a,0.329832986317342,0.329932996319258,27711694800,0.730831742286682,U,s,-22.5931930541992 ,-10.0418930053711,a,0.329932996319258,0.329932996319258,29251233400,0.213968724012375 ,U,s,-10.0418930053711,9.95317649841309,a,0.329932996319258,0.989898998959688,30790772000 ,0.0613721869885921,U,s,9.95317649841309,29.2297325134277,a,0.989898998959688,0.329932996319258 ,32330310599,0.877513766288757,U,s,29.2297325134277,32.1885070800781,a,0.329032906302018 ,0.329032906302018,33092382207,1.39714980125427,U,s,32.1885070800781,41.177318572998 ,a,0.329932996319258,0.329832986317342,33862151507,1.94401609897614,U,s,41.177318572998 ,50.1457176208496,a,0.330733076334582,0.330733076334582,34639618500,2.78181314468384 ,U,s,50.1457176208496,47.9676322937012,a,0.329832986317342,0.329832986317342,35409387800 ,3.62578082084656,U,s,47.9676322937012,44.1055908203125,a,0.329832986317342,0.329832986317342 ,36948926400,5.04667377471924,U,s,44.1055908203125,18.5542163848877,a,0.329832986317342 ,0.329832986317342,38488465000,6.56615352630615,U,s,18.5542163848877,-17.2352771759033 ,a,0.329832986317342,0.329832986317342,40028003600,6.28362131118774,U,s,-17.2352771759033 ,-33.3809356689453,a,0.329832986317342,0.329832986317342,41567542200,5.4171347618103 ,U,s,-33.3809356689453,-39.7079734802246,a,0.329832986317342,0.329932996319258,43107080800 ,4.05822563171387,U,s,-39.7079734802246,-33.1259880065918,a,0.329932996319258,0.329932996319258 ,44646619400,2.76993680000305,U,s,-33.1259880065918,-21.7700099945068,a,0.329932996319258 ,0.989898998959688,46186158000,1.84982657432556,U,s,-21.7700099945068,-16.9209938049316 ,a,0.989898998959688,0.989898998959688,46955927300,1.53560388088226,U,s,-16.9209938049316 ,-19.8570499420166,a,0.989898998959688,0.329932996319258,47725696599,1.28579342365265 ,U,s,-19.8570499420166,-20.8969783782959,a,0.329932996319258,0.329832986317342,48495465900 ,0.873702108860016,U,s,-20.8969783782959,-22.1892337799072,a,0.329832986317342,0.329832986317342 ,49265235200,0.589227437973022,U,s,-22.1892337799072,-21.4657459259033,a,0.329832986317342 ,0.329932996319258,50035004500,0.134061023592949,U,s,-21.4657459259033,-16.9220371246338 ,a,0.329932996319258,0.329932996319258,50804773799,-0.12629745900631,U,s,-16.9220371246338 ,-15.0932025909424,a,0.329932996319258,0.329832986317342,51574543100,-0.430006891489029 ,U,s,-15.0932025909424,-7.58093118667603,a,0.329832986317342,0.329832986317342,52344312400 ,-0.629404246807098,U,s,-7.58093118667603,7.61642932891846,a,0.329832986317342,0.329832986317342 ,53883850999,-0.589907944202423,U,s,7.61642932891846,15.9369230270386,a,0.329832986317342 ,0.329832986317342,55423389600,-0.121642306447029,U,s,15.9369230270386,17.323673248291 ,a,0.329832986317342,0.329832986317342,56962928200,0.472553580999374,U,s,17.323673248291 ,16.3192653656006,a,0.329832986317342,0.329832986317342,58502466800,1.03326916694641 ,U,s,16.319263458252,0,n Color: 0,1,0 } Channel: "Z" { Default: -24.0315208435059 KeyVer: 4005 KeyCount: 45 Key: 0,-25.8006839752197,U,s,-130.330780029297,-65.4564056396484,a,0.329832986317342,0.989898998959688 ,1539538600,-29.0638046264648,U,s,-65.4564056396484,-92.7109680175781,a,0.989898998959688 ,0.989898998959688,3079077200,-30.1644439697266,U,s,-92.7109680175781,-127.378082275391 ,a,0.989898998959688,0.989999008961604,4618615800,-35.2445335388184,U,s,-127.378082275391 ,-91.8508148193359,a,0.989999008961604,0.329832986317342,6158154400,-38.6563148498535 ,U,s,-91.8508148193359,-46.246753692627,a,0.329832986317342,0.329832986317342,7697693000 ,-41.3679237365723,U,s,-46.246753692627,8.53437328338623,a,0.329832986317342,0.329832986317342 ,9237231600,-41.7394332885742,U,s,8.53437328338623,34.2648391723633,a,0.329832986317342 ,0.329832986317342,10776770200,-40.7989654541016,U,s,34.2648391723633,46.4164657592773 ,a,0.329832986317342,0.329832986317342,12316308800,-39.4551124572754,U,s,46.4164657592773 ,56.5433082580566,a,0.329832986317342,0.329932996319258,13855847400,-37.704532623291 ,U,s,56.5433082580566,52.8721351623535,a,0.329932996319258,0.329832986317342,15395386000 ,-35.6855583190918,U,s,52.8721351623535,39.1674118041992,a,0.32943294630968,0.32943294630968 ,16927226907,-34.1875419616699,U,s,39.1674118041992,33.5525894165039,a,0.33033303632692 ,0.33033303632692,18474463200,-33.079475402832,U,s,33.5525894165039,26.8174934387207 ,a,0.329832986317342,0.329832986317342,20014001800,-31.9439277648926,U,s,26.8174934387207 ,15.073938369751,a,0.329832986317342,0.329832986317342,21553540400,-31.2916412353516 ,U,s,15.073938369751,35.2768707275391,a,0.329832986317342,0.329832986317342,23093079000 ,-30.9389991760254,U,s,35.2768707275391,79.0143432617188,a,0.329832986317342,0.329932996319258 ,24632617600,-28.9398498535156,U,s,79.0143432617188,46.361213684082,a,0.329932996319258 ,0.329832986317342,26172156200,-25.6713752746582,U,s,46.361213684082,-21.644495010376 ,a,0.329832986317342,0.329932996319258,27711694800,-25.8491020202637,U,s,-21.644495010376 ,-69.0499038696289,a,0.329932996319258,0.329932996319258,29251233400,-27.1143417358398 ,U,s,-69.0499038696289,-163.921768188477,a,0.329932996319258,0.329832986317342,30790772000 ,-30.452428817749,U,s,-163.921768188477,-293.044891357422,a,0.329832986317342,0.329932996319258 ,32330310599,-38.0424613952637,U,s,-293.044891357422,-323.243774414063,a,0.329032906302018 ,0.329032906302018,33092382207,-43.3964958190918,U,s,-323.243774414063,-302.538848876953 ,a,0.329832986317342,0.329932996319258,33862151507,-48.7490463256836,U,s,-302.538848876953 ,-285.546569824219,a,0.330733076334582,0.330733076334582,34639618500,-53.5363502502441 ,U,s,-285.546569824219,-266.167053222656,a,0.329832986317342,0.329832986317342,35409387800 ,-58.325984954834,U,s,-266.167053222656,-217.637603759766,a,0.329832986317342,0.329832986317342 ,36948926400,-65.7841415405273,U,s,-217.637603759766,-176.96760559082,a,0.329832986317342 ,0.329832986317342,38488465000,-72.8351593017578,U,s,-176.96760559082,-96.6970367431641 ,a,0.329832986317342,0.329832986317342,40028003600,-77.5819854736328,U,s,-96.6970367431641 ,-4.47452545166016,a,0.329832986317342,0.329932996319258,41567542200,-79.281623840332 ,U,s,-4.47452545166016,77.028450012207,a,0.329932996319258,0.329832986317342,43107080800 ,-77.8802871704102,U,s,77.028450012207,153.994293212891,a,0.329832986317342,0.329932996319258 ,44646619400,-74.1464004516602,U,s,153.994293212891,259.077087402344,a,0.329932996319258 ,0.329832986317342,46186158000,-67.6139984130859,U,s,259.077087402344,290.722808837891 ,a,0.329832986317342,0.329932996319258,46955927300,-62.7701683044434,U,s,290.722808837891 ,342.586730957031,a,0.329932996319258,0.329832986317342,47725696599,-57.9232368469238 ,U,s,342.586730957031,394.540954589844,a,0.329832986317342,0.329832986317342,48495465900 ,-51.3506126403809,U,s,394.540954589844,410.081268310547,a,0.329832986317342,0.989999008961604 ,49265235200,-44.7718696594238,U,s,410.081268310547,425.72802734375,a,0.989999008961604 ,0.989898998959688,50035004500,-37.6812400817871,U,s,425.72802734375,336.179473876953 ,a,0.989898998959688,0.989898998959688,50804773799,-30.5809364318848,U,s,336.179473876953 ,246.536163330078,a,0.989898998959688,0.989898998959688,51574543100,-26.4752559661865 ,U,s,246.536163330078,183.887603759766,a,0.989898998959688,0.989898998959688,52344312400 ,-22.3630638122559,U,s,183.887603759766,11.3673486709595,a,0.989898998959688,0.989898998959688 ,53883850999,-20.42307472229,U,s,11.3673486709595,-51.8789176940918,a,0.989898998959688 ,0.989898998959688,55423389600,-21.6052417755127,U,s,-51.8789176940918,-62.925838470459 ,a,0.989898998959688,0.329832986317342,56962928200,-23.8816699981689,U,s,-62.925838470459 ,-52.1918067932129,a,0.329832986317342,0.989898998959688,58502466800,-25.8002967834473 ,U,s,-52.1918067932129,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Ankle1" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 15.4280042648315 Color: 1,0,0 } Channel: "Y" { Default: -1.32429221366692e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-1.32424702314893e-007,U,s,0,0,n,1539538600,-1.3243084140413e-007,U,b,0,0,n,3079077200 ,-1.32430699295583e-007,U,b,0,0,n,4618615800,-1.32429192944983e-007,U,b,0,0,n,6158154400 ,-1.32431296151481e-007,U,b,0,0,n,7697693000,-1.32427146581904e-007,U,b,0,0,n,9237231600 ,-1.32429562427205e-007,U,b,0,0,n,10776770200,-1.32428397137119e-007,U,b,0,0,n,12316308800 ,-1.32427530274981e-007,U,b,0,0,n,13855847400,-1.32429775590026e-007,U,b,0,0,n,15395386000 ,-1.32428525034811e-007,U,b,0,0,n,16934924599,-1.32427928178913e-007,U,b,0,0,n,18474463200 ,-1.32427615540109e-007,U,b,0,0,n,20014001800,-1.32427814492075e-007,U,b,0,0,n,21553540400 ,-1.32428681354213e-007,U,b,0,0,n,23093079000,-1.32428908727888e-007,U,b,0,0,n,24632617600 ,-1.32427601329255e-007,U,b,0,0,n,26172156200,-1.32430159283103e-007,U,b,0,0,n,27711694800 ,-1.32429676114043e-007,U,b,0,0,n,29251233400,-1.32428624510794e-007,U,b,0,0,n,30790772000 ,-1.32429747168317e-007,U,b,0,0,n,32330310599,-1.32428894517034e-007,U,b,0,0,n,33869849199 ,-1.32428525034811e-007,U,b,0,0,n,35409387800,-1.32429192944983e-007,U,b,0,0,n,36948926400 ,-1.32429448740368e-007,U,b,0,0,n,38488465000,-1.32429107679855e-007,U,b,0,0,n,40028003600 ,-1.32429249788402e-007,U,b,0,0,n,41567542200,-1.32428411347973e-007,U,b,0,0,n,43107080800 ,-1.32427601329255e-007,U,b,0,0,n,44646619400,-1.32429391896949e-007,U,b,0,0,n,46186158000 ,-1.32429079258145e-007,U,b,0,0,n,47725696599,-1.32428283450281e-007,U,b,0,0,n,49265235200 ,-1.32430670873873e-007,U,b,0,0,n,50804773799,-1.3243283092379e-007,U,b,0,0,n,52344312400 ,-1.32428553456521e-007,U,b,0,0,n,53883850999,-1.32427146581904e-007,U,b,0,0,n,55423389600 ,-1.32430443500198e-007,U,b,0,0,n,56962928200,-1.32430884036694e-007,U,b,0,0,n,58502466800 ,-1.32429462951222e-007,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 3.40772317031224e-007 KeyVer: 4005 KeyCount: 39 Key: 0,3.40773340212763e-007,U,s,0,0,n,1539538600,3.40769702233956e-007,U,b,0,0,n,3079077200 ,3.40771123319428e-007,U,b,0,0,n,4618615800,3.40771464379941e-007,U,b,0,0,n,6158154400 ,3.40771975970711e-007,U,b,0,0,n,7697693000,3.40773738116695e-007,U,b,0,0,n,9237231600 ,3.40771066476009e-007,U,b,0,0,n,10776770200,3.40770725415496e-007,U,b,0,0,n,12316308800 ,3.40770213824726e-007,U,b,0,0,n,13855847400,3.40773055995669e-007,U,b,0,0,n,15395386000 ,3.40772203344386e-007,U,b,0,0,n,16934924599,3.40773055995669e-007,U,b,0,0,n,18474463200 ,3.40771066476009e-007,U,b,0,0,n,20014001800,3.40770270668145e-007,U,b,0,0,n,21553540400 ,3.40771919127292e-007,U,b,0,0,n,23093079000,3.40770668572077e-007,U,b,0,0,n,24632617600 ,3.40771066476009e-007,U,b,0,0,n,26172156200,3.40772260187805e-007,U,b,0,0,n,27711694800 ,3.40772658091737e-007,U,b,0,0,n,29251233400,3.40769190643186e-007,U,b,0,0,n,30790772000 ,3.40772032814129e-007,U,b,0,0,n,32330310599,3.40772317031224e-007,U,b,0,0,n,33869849199 ,3.40768906426092e-007,U,b,0,0,n,35409387800,3.40769986451051e-007,U,b,0,0,n,36948926400 ,3.40772146500967e-007,U,b,0,0,n,38488465000,3.40771293849684e-007,U,b,0,0,n,40028003600 ,3.40771691753616e-007,U,b,0,0,n,41567542200,3.4077049804182e-007,U,b,0,0,n,43107080800 ,3.40771975970711e-007,U,b,0,0,n,44646619400,3.40771464379941e-007,U,b,0,0,n,46186158000 ,3.40770895945752e-007,U,b,0,0,n,47725696599,3.40772032814129e-007,U,b,0,0,n,49265235200 ,3.40771180162847e-007,U,b,0,0,n,50804773799,3.40771919127292e-007,U,b,0,0,n,52344312400 ,3.40772373874643e-007,U,b,0,0,n,53883850999,3.4077351074302e-007,U,b,0,0,n,55423389600 ,3.4077299915225e-007,U,b,0,0,n,56962928200,3.40771805440454e-007,U,b,0,0,n,58502466800 ,3.40770611728658e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -4.13260126113892 KeyVer: 4005 KeyCount: 41 Key: 0,-4.32539510726929,U,s,9.74764537811279,4.05216360092163,a,0.329832986317342,0.329832986317342 ,1539538600,-4.09539794921875,U,s,4.05216360092163,-2.47291088104248,a,0.329832986317342 ,0.989898998959688,3079077200,-4.05525064468384,U,s,-2.47291088104248,-3.71995997428894 ,a,0.989898998959688,0.329832986317342,4618615800,-4.26025867462158,U,s,-3.71995997428894 ,-1.77611613273621,a,0.329832986317342,0.329832986317342,6158154400,-4.30324792861938 ,U,s,-1.77611613273621,-2.0417697429657,a,0.329832986317342,0.329832986317342,7697693000 ,-4.37866640090942,U,s,-2.0417697429657,-1.22031581401825,a,0.329832986317342,0.329932996319258 ,9237231600,-4.43936586380005,U,s,-1.22031581401825,-0.52849018573761,a,0.329932996319258 ,0.329832986317342,10776770200,-4.46002101898193,U,s,-0.52849018573761,-0.346072882413864 ,a,0.329832986317342,0.329832986317342,12316308800,-4.47459888458252,U,s,-0.346072882413864 ,0.254544079303741,a,0.329832986317342,0.989999008961604,13855847400,-4.48309230804443 ,U,s,0.254544079303741,1.14349162578583,a,0.989999008961604,0.989898998959688,15395386000 ,-4.45762920379639,U,s,1.14349162578583,1.17684686183929,a,0.988698878936702,0.32943294630968 ,16927226907,-4.40725564956665,U,s,1.17684686183929,1.09380698204041,a,0.33033303632692 ,0.33033303632692,18474463200,-4.37946081161499,U,s,1.09380698204041,0.879288733005524 ,a,0.329932996319258,0.329832986317342,20014001800,-4.33421754837036,U,s,0.879288733005524 ,0.103470966219902,a,0.329832986317342,0.329932996319258,21553540400,-4.32084178924561 ,U,s,0.103470966219902,-0.147961094975472,a,0.329932996319258,0.329932996319258,23093079000 ,-4.32731914520264,U,s,-0.147961094975472,1.2626736164093,a,0.329932996319258,0.329832986317342 ,24632617600,-4.3307056427002,U,s,1.2626736164093,12.7735137939453,a,0.329832986317342 ,0.989898998959688,26172156200,-4.24314117431641,U,s,12.7735137939453,9.73235416412354 ,a,0.989898998959688,0.329832986317342,27711694800,-3.47913837432861,U,s,9.73235416412354 ,-4.947838306427,a,0.329832986317342,0.329932996319258,29251233400,-3.59431743621826 ,U,s,-4.947838306427,-4.38255453109741,a,0.329932996319258,0.329832986317342,30790772000 ,-3.80899429321289,U,s,-4.38255453109741,-1.2689870595932,a,0.329832986317342,0.329832986317342 ,32330310599,-3.88648772239685,U,s,-1.2689870595932,-4.06507015228271,a,0.32943294630968 ,0.32943294630968,33862151507,-3.89376759529114,U,s,-4.06507015228271,-4.99182987213135 ,a,0.330733076334582,0.330733076334582,34639618500,-3.99542260169983,U,s,-4.99182987213135 ,5.46055746078491,a,0.329832986317342,0.329832986317342,35409387800,-4.06162929534912 ,U,s,5.46055746078491,19.8186435699463,a,0.329832986317342,0.329832986317342,36179157100 ,-3.81340384483337,U,s,19.8186435699463,25.3652954101563,a,0.329832986317342,0.329832986317342 ,36948926400,-3.40100789070129,U,s,25.3652954101563,-0.754699647426605,a,0.329832986317342 ,0.329932996319258,38488465000,-2.51406288146973,U,s,-0.754699647426605,-18.140983581543 ,a,0.329932996319258,0.329832986317342,40028003600,-3.45132112503052,U,s,-18.140983581543 ,-4.29616785049438,a,0.329832986317342,0.329832986317342,41567542200,-3.72346186637878 ,U,s,-4.29616785049438,-5.04416275024414,a,0.329832986317342,0.329932996319258,43107080800 ,-3.73773217201233,U,s,-5.04416275024414,-7.36480903625488,a,0.329932996319258,0.329832986317342 ,44646619400,-4.05973958969116,U,s,-7.36480903625488,-4.57957124710083,a,0.329832986317342 ,0.329832986317342,46186158000,-4.22871971130371,U,s,-4.57957124710083,-2.90831589698792 ,a,0.329832986317342,0.989898998959688,47725696599,-4.36504411697388,U,s,-2.90831589698792 ,1.5592041015625,a,0.989898998959688,0.329832986317342,49265235200,-4.422607421875 ,U,s,1.5592041015625,4.79565095901489,a,0.329832986317342,0.329832986317342,50804773799 ,-4.26109743118286,U,s,4.79565095901489,2.64324450492859,a,0.329832986317342,0.329832986317342 ,52344312400,-4.10289716720581,U,s,2.64324450492859,-0.756991982460022,a,0.329832986317342 ,0.329932996319258,53883850999,-4.08488082885742,U,s,-0.756991982460022,-2.26865172386169 ,a,0.329932996319258,0.329932996319258,55423389600,-4.15336322784424,U,s,-2.26865172386169 ,-2.58092784881592,a,0.329932996319258,0.329832986317342,56962928200,-4.23612451553345 ,U,s,-2.58092784881592,-2.77712535858154,a,0.329832986317342,0.329832986317342,58502466800 ,-4.32542514801025,U,s,-2.77712512016296,0,n Color: 1,0,0 } Channel: "Y" { Default: -1.2486013174057 KeyVer: 4005 KeyCount: 41 Key: 0,-4.39260387420654,U,s,-141.690704345703,15.0195608139038,a,0.329932996319258,0.329832986317342 ,1539538600,-6.5037899017334,U,s,15.0195608139038,69.885856628418,a,0.329832986317342 ,0.329932996319258,3079077200,-3.39129996299744,U,s,69.885856628418,17.0479202270508 ,a,0.329932996319258,0.329832986317342,4618615800,-1.84473204612732,U,s,17.0479202270508 ,-13.2429885864258,a,0.329832986317342,0.329932996319258,6158154400,-2.25477194786072 ,U,s,-13.2429885864258,-10.4475107192993,a,0.329932996319258,0.329832986317342,7697693000 ,-2.72759819030762,U,s,-10.4475107192993,-1.36680102348328,a,0.329832986317342,0.329832986317342 ,9237231600,-2.95127272605896,U,s,-1.36680102348328,3.86600971221924,a,0.329832986317342 ,0.329832986317342,10776770200,-2.81871819496155,U,s,3.86600971221924,3.55171632766724 ,a,0.329832986317342,0.329932996319258,12316308800,-2.69353866577148,U,s,3.55171632766724 ,5.42495107650757,a,0.329932996319258,0.329832986317342,13855847400,-2.58193707466125 ,U,s,5.42495107650757,8.89757347106934,a,0.329832986317342,0.329932996319258,15395386000 ,-2.33187532424927,U,s,8.89757347106934,7.47240829467773,a,0.32943294630968,0.32943294630968 ,16927226907,-1.99119889736176,U,s,7.47240829467773,5.06358671188354,a,0.33033303632692 ,0.33033303632692,18474463200,-1.83607292175293,U,s,5.06358671188354,2.93787670135498 ,a,0.329932996319258,0.329932996319258,20014001800,-1.65275371074677,U,s,2.93787670135498 ,-0.644476354122162,a,0.329932996319258,0.329832986317342,21553540400,-1.64021444320679 ,U,s,-0.644476354122162,-1.21098136901855,a,0.329832986317342,0.329832986317342,23093079000 ,-1.69571876525879,U,s,-1.21098136901855,3.59024667739868,a,0.329832986317342,0.329832986317342 ,24632617600,-1.72094655036926,U,s,3.59024667739868,19.5544548034668,a,0.329832986317342 ,0.329832986317342,26172156200,-1.45636904239655,U,s,19.5544548034668,6.8838210105896 ,a,0.329832986317342,0.329832986317342,27711694800,-0.417316168546677,U,s,6.8838210105896 ,-23.6667728424072,a,0.329832986317342,0.989999008961604,29251233400,-0.997447669506073 ,U,s,-23.6667728424072,-27.6384887695313,a,0.989999008961604,0.329932996319258,30790772000 ,-1.99510109424591,U,s,-27.6384887695313,-20.6314907073975,a,0.329932996319258,0.329832986317342 ,32330310599,-2.84001350402832,U,s,-20.6314907073975,-14.4286499023438,a,0.32943294630968 ,0.32943294630968,33862151507,-3.36819434165955,U,s,-14.4286499023438,-14.1201543807983 ,a,0.330733076334582,0.330733076334582,34639618500,-3.59864139556885,U,s,-14.1201543807983 ,-44.0417213439941,a,0.329832986317342,0.329932996319258,35409387800,-3.84161567687988 ,U,s,-44.0417213439941,-72.1685180664063,a,0.329932996319258,0.329932996319258,36179157100 ,-5.06669902801514,U,s,-72.1685180664063,-92.2684020996094,a,0.329932996319258,0.329832986317342 ,36948926400,-6.24723291397095,U,s,-92.2684020996094,-10.7165861129761,a,0.329832986317342 ,0.329932996319258,38488465000,-10.7519359588623,U,s,-10.7165861129761,64.6330413818359 ,a,0.329932996319258,0.329832986317342,40028003600,-6.96167230606079,U,s,64.6330413818359 ,-23.8557739257813,a,0.329832986317342,0.329832986317342,41567542200,-6.44306659698486 ,U,s,-23.8557739257813,5.55087614059448,a,0.329832986317342,0.989898998959688,43107080800 ,-8.55205726623535,U,s,5.55087614059448,-7.78578901290894,a,0.989898998959688,0.329832986317342 ,44646619400,-6.07300806045532,U,s,-7.78578901290894,-29.1614742279053,a,0.329832986317342 ,0.329832986317342,46186158000,-9.07110977172852,U,s,-29.1614742279053,23.7467479705811 ,a,0.329832986317342,0.329932996319258,47725696599,-8.01710605621338,U,s,23.7467479705811 ,74.8689193725586,a,0.329932996319258,0.329832986317342,49265235200,-7.48799276351929 ,U,s,74.8689193725586,97.6885147094727,a,0.329832986317342,0.329832986317342,50804773799 ,-3.02584481239319,U,s,97.6885147094727,31.8904228210449,a,0.329832986317342,0.989898998959688 ,52344312400,-0.975425541400909,U,s,31.8904228210449,-13.7700748443604,a,0.989898998959688 ,0.329932996319258,53883850999,-0.899817049503326,U,s,-13.7700748443604,-34.2314033508301 ,a,0.329932996319258,0.329932996319258,55423389600,-1.89343047142029,U,s,-34.2314033508301 ,-37.491153717041,a,0.329932996319258,0.329832986317342,56962928200,-3.18191051483154 ,U,s,-37.491153717041,-35.1646728515625,a,0.329832986317342,0.329832986317342,58502466800 ,-4.39284086227417,U,s,-35.1646728515625,0,n Color: 0,1,0 } Channel: "Z" { Default: 7.7121057510376 KeyVer: 4005 KeyCount: 41 Key: 0,2.03562951087952,U,s,-161.67399597168,-118.380531311035,a,0.329932996319258,0.329932996319258 ,1539538600,-2.63194608688354,U,s,-118.380531311035,55.3296165466309,a,0.329932996319258 ,0.329832986317342,3079077200,-5.85640668869019,U,s,55.3296165466309,174.577880859375 ,a,0.329832986317342,0.329832986317342,4618615800,1.05669522285461,U,s,174.577880859375 ,129.264419555664,a,0.329832986317342,0.329832986317342,6158154400,5.78211784362793 ,U,s,129.264419555664,99.0617980957031,a,0.329832986317342,0.329832986317342,7697693000 ,9.6743221282959,U,s,99.0617980957031,72.8863754272461,a,0.329832986317342,0.329832986317342 ,9237231600,12.3862371444702,U,s,72.8863754272461,58.0020599365234,a,0.329832986317342 ,0.329932996319258,10776770200,14.5334129333496,U,s,58.0020599365234,48.2341804504395 ,a,0.329932996319258,0.329832986317342,12316308800,16.2530422210693,U,s,48.2341804504395 ,39.9828071594238,a,0.329832986317342,0.989898998959688,13855847400,17.7490253448486 ,U,s,39.9828071594238,38.2857398986816,a,0.989898998959688,0.329932996319258,15395386000 ,18.9185619354248,U,s,38.2857398986816,42.9545936584473,a,0.32943294630968,0.988698878936702 ,16927226907,20.2921028137207,U,s,42.9545936584473,44.3140602111816,a,0.989999008961604 ,0.33033303632692,18474463200,21.7834510803223,U,s,44.3140602111816,50.8310546875 ,a,0.329932996319258,0.329832986317342,20014001800,23.2556667327881,U,s,50.8310546875 ,64.5632171630859,a,0.329832986317342,0.329932996319258,21553540400,25.1721878051758 ,U,s,64.5632171630859,62.2702217102051,a,0.329932996319258,0.329832986317342,23093079000 ,27.5598812103271,U,s,62.2702217102051,35.573673248291,a,0.329832986317342,0.329832986317342 ,24632617600,29.3235359191895,U,s,35.573673248291,-14.324291229248,a,0.329832986317342 ,0.989898998959688,26172156200,29.9314594268799,U,s,-14.324291229248,-37.4581413269043 ,a,0.989898998959688,0.329932996319258,27711694800,28.3685836791992,U,s,-37.4581413269043 ,-35.560173034668,a,0.329932996319258,0.329832986317342,29251233400,27.4342517852783 ,U,s,-35.560173034668,-65.4666748046875,a,0.329832986317342,0.329832986317342,30790772000 ,25.9979038238525,U,s,-65.4666748046875,-165.275817871094,a,0.329832986317342,0.329832986317342 ,32330310599,23.0698051452637,U,s,-165.275817871094,-417.481628417969,a,0.32943294630968 ,0.32943294630968,33862151507,15.0461130142212,U,s,-417.481628417969,-510.007232666016 ,a,0.330733076334582,0.330733076334582,34639618500,6.49447965621948,U,s,-510.007232666016 ,-488.744293212891,a,0.329932996319258,0.329832986317342,35409387800,-2.05903577804565 ,U,s,-488.744293212891,-464.919006347656,a,0.329832986317342,0.329832986317342,36179157100 ,-9.79699802398682,U,s,-464.919006347656,-339.172912597656,a,0.329832986317342,0.329832986317342 ,36948926400,-17.5563354492188,U,s,-339.172912597656,38.9781265258789,a,0.329832986317342 ,0.329932996319258,38488465000,-20.4362754821777,U,s,38.9781265258789,146.666244506836 ,a,0.329932996319258,0.329932996319258,40028003600,-14.9577932357788,U,s,146.666244506836 ,103.148651123047,a,0.329932996319258,0.329832986317342,41567542200,-10.6585273742676 ,U,s,103.148651123047,100.493087768555,a,0.329832986317342,0.329932996319258,43107080800 ,-8.08121681213379,U,s,100.493087768555,107.79753112793,a,0.329932996319258,0.989898998959688 ,44646619400,-3.95898866653442,U,s,107.79753112793,78.6896133422852,a,0.989898998959688 ,0.329932996319258,46186158000,-0.894715130329132,U,s,78.6896133422852,48.7677841186523 ,a,0.329932996319258,0.989898998959688,47725696599,1.28698587417603,U,s,48.7677841186523 ,38.2192649841309,a,0.989898998959688,0.329832986317342,49265235200,2.35647058486938 ,U,s,38.2192649841309,94.5176086425781,a,0.329832986317342,0.329832986317342,50804773799 ,3.83493685722351,U,s,94.5176086425781,71.8776702880859,a,0.329832986317342,0.329832986317342 ,52344312400,8.6576452255249,U,s,71.8776702880859,-28.8926753997803,a,0.329832986317342 ,0.329832986317342,53883850999,8.62678146362305,U,s,-28.8926753997803,-66.4608917236328 ,a,0.329832986317342,0.329832986317342,55423389600,6.73146677017212,U,s,-66.4608917236328 ,-70.4398040771484,a,0.329832986317342,0.329932996319258,56962928200,4.19605588912964 ,U,s,-70.4398040771484,-59.1947631835938,a,0.329932996319258,0.329832986317342,58502466800 ,2.03547978401184,U,s,-59.1947631835938,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::L_Ball" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 5.25022077560425 Color: 1,0,0 } Channel: "Y" { Default: 6.27384853363037 Color: 0,1,0 } Channel: "Z" { Default: -7.13063798229996e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-7.13062263457687e-007,U,s,0,0,n,1539538600,-7.13064252977347e-007,U,b,0,0,n,3079077200 ,-7.13063059265551e-007,U,b,0,0,n,4618615800,-7.13062945578713e-007,U,b,0,0,n,6158154400 ,-7.13063741386577e-007,U,b,0,0,n,7697693000,-7.13062377144524e-007,U,b,0,0,n,9237231600 ,-7.13063514012902e-007,U,b,0,0,n,10776770200,-7.13061240276147e-007,U,b,0,0,n,12316308800 ,-7.13061808710336e-007,U,b,0,0,n,13855847400,-7.13062831891875e-007,U,b,0,0,n,15395386000 ,-7.13062263457687e-007,U,b,0,0,n,16934924599,-7.13064423507603e-007,U,b,0,0,n,18474463200 ,-7.13063741386577e-007,U,b,0,0,n,20014001800,-7.13062149770849e-007,U,b,0,0,n,21553540400 ,-7.13063229795807e-007,U,b,0,0,n,23093079000,-7.1306408244709e-007,U,b,0,0,n,24632617600 ,-7.13063855073415e-007,U,b,0,0,n,26172156200,-7.13062036084011e-007,U,b,0,0,n,27711694800 ,-7.13062831891875e-007,U,b,0,0,n,29251233400,-7.13063400326064e-007,U,b,0,0,n,30790772000 ,-7.13063172952388e-007,U,b,0,0,n,32330310599,-7.13062831891875e-007,U,b,0,0,n,33869849199 ,-7.13062888735294e-007,U,b,0,0,n,35409387800,-7.13064423507603e-007,U,b,0,0,n,36948926400 ,-7.13062377144524e-007,U,b,0,0,n,38488465000,-7.13062320301106e-007,U,b,0,0,n,40028003600 ,-7.13063627699739e-007,U,b,0,0,n,41567542200,-7.13063172952388e-007,U,b,0,0,n,43107080800 ,-7.13062831891875e-007,U,b,0,0,n,44646619400,-7.13062149770849e-007,U,b,0,0,n,46186158000 ,-7.1306311610897e-007,U,b,0,0,n,47725696599,-7.13062775048456e-007,U,b,0,0,n,49265235200 ,-7.13062263457687e-007,U,b,0,0,n,50804773799,-7.1306408244709e-007,U,b,0,0,n,52344312400 ,-7.13063741386577e-007,U,b,0,0,n,53883850999,-7.13062036084011e-007,U,b,0,0,n,55423389600 ,-7.13063059265551e-007,U,b,0,0,n,56962928200,-7.13063059265551e-007,U,b,0,0,n,58502466800 ,-7.13064764568117e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 5.08523999087629e-006 Color: 1,0,0 } Channel: "Y" { Default: -3.36317566507205e-006 Color: 0,1,0 } Channel: "Z" { Default: 104.594673156738 Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1.00000011920929 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Thigh" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: -3.76930618286133 Color: 1,0,0 } Channel: "Y" { Default: -0.355218410491943 Color: 0,1,0 } Channel: "Z" { Default: -3.49514603614807 Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 8.09784317016602 KeyVer: 4005 KeyCount: 39 Key: 0,8.13890838623047,U,s,0,0,n,1539538600,10.4559097290039,U,b,0,0,n,3079077200,12.6900405883789 ,U,b,0,0,n,4618615800,14.3592472076416,U,b,0,0,n,6158154400,14.9395666122437,U,b,0 ,0,n,7697693000,14.6955480575562,U,b,0,0,n,9237231600,14.6885299682617,U,b,0,0,n,10776770200 ,14.4477453231812,U,b,0,0,n,12316308800,13.5716781616211,U,b,0,0,n,13855847400,12.9075708389282 ,U,b,0,0,n,15395386000,12.3170547485352,U,b,0,0,n,16934924599,12.0576553344727,U,b ,0,0,n,18474463200,11.7479782104492,U,b,0,0,n,20014001800,11.6292343139648,U,b,0,0 ,n,21553540400,11.2741165161133,U,b,0,0,n,23093079000,10.9358444213867,U,b,0,0,n,24632617600 ,11.292366027832,U,b,0,0,n,26172156200,11.1135787963867,U,b,0,0,n,27711694800,10.4199151992798 ,U,b,0,0,n,29251233400,10.0009384155273,U,b,0,0,n,30790772000,9.50582122802734,U,b ,0,0,n,32330310599,9.31429290771484,U,b,0,0,n,33869849199,9.77639007568359,U,b,0,0 ,n,35409387800,10.2498245239258,U,b,0,0,n,36948926400,10.8965682983398,U,b,0,0,n,38488465000 ,11.3111343383789,U,b,0,0,n,40028003600,11.2807998657227,U,b,0,0,n,41567542200,11.2647018432617 ,U,b,0,0,n,43107080800,10.985710144043,U,b,0,0,n,44646619400,10.3349380493164,U,b ,0,0,n,46186158000,9.57946014404297,U,b,0,0,n,47725696599,8.78844451904297,U,b,0,0 ,n,49265235200,8.24538421630859,U,b,0,0,n,50804773799,8.02498626708984,U,b,0,0,n,52344312400 ,8.11133575439453,U,b,0,0,n,53883850999,8.28810882568359,U,b,0,0,n,55423389600,8.34142303466797 ,U,b,0,0,n,56962928200,8.20201873779297,U,b,0,0,n,58502466800,8.13889408111572,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 184.387466430664 KeyVer: 4005 KeyCount: 39 Key: 0,179.733291625977,U,s,0,0,n,1539538600,177.354415893555,U,b,0,0,n,3079077200,175.408050537109 ,U,b,0,0,n,4618615800,173.510025024414,U,b,0,0,n,6158154400,171.439361572266,U,b,0 ,0,n,7697693000,169.868743896484,U,b,0,0,n,9237231600,170.614151000977,U,b,0,0,n,10776770200 ,172.182434082031,U,b,0,0,n,12316308800,172.454177856445,U,b,0,0,n,13855847400,171.841583251953 ,U,b,0,0,n,15395386000,171.499893188477,U,b,0,0,n,16934924599,172.289947509766,U,b ,0,0,n,18474463200,172.611389160156,U,b,0,0,n,20014001800,172.557968139648,U,b,0,0 ,n,21553540400,171.321441650391,U,b,0,0,n,23093079000,169.995880126953,U,b,0,0,n,24632617600 ,169.60888671875,U,b,0,0,n,26172156200,170.620300292969,U,b,0,0,n,27711694800,172.555572509766 ,U,b,0,0,n,29251233400,173.827926635742,U,b,0,0,n,30790772000,175.786422729492,U,b ,0,0,n,32330310599,177.860076904297,U,b,0,0,n,33869849199,180.205993652344,U,b,0,0 ,n,35409387800,182.448120117188,U,b,0,0,n,36948926400,185.314956665039,U,b,0,0,n,38488465000 ,187.09130859375,U,b,0,0,n,40028003600,187.048217773438,U,b,0,0,n,41567542200,186.995986938477 ,U,b,0,0,n,43107080800,187.292724609375,U,b,0,0,n,44646619400,187.249710083008,U,b ,0,0,n,46186158000,187.398681640625,U,b,0,0,n,47725696599,186.483459472656,U,b,0,0 ,n,49265235200,185.469512939453,U,b,0,0,n,50804773799,184.599639892578,U,b,0,0,n,52344312400 ,184.348175048828,U,b,0,0,n,53883850999,184.17919921875,U,b,0,0,n,55423389600,183.276473999023 ,U,b,0,0,n,56962928200,181.455642700195,U,b,0,0,n,58502466800,179.733093261719,U,s ,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 0.917054355144501 KeyVer: 4005 KeyCount: 39 Key: 0,21.0498638153076,U,s,0,0,n,1539538600,20.9923229217529,U,b,0,0,n,3079077200,20.0640850067139 ,U,b,0,0,n,4618615800,14.9082317352295,U,b,0,0,n,6158154400,6.61269998550415,U,b,0 ,0,n,7697693000,-0.474900990724564,U,b,0,0,n,9237231600,-6.31338691711426,U,b,0,0 ,n,10776770200,-11.0324878692627,U,b,0,0,n,12316308800,-15.7814054489136,U,b,0,0,n ,13855847400,-19.5785846710205,U,b,0,0,n,15395386000,-23.0278339385986,U,b,0,0,n,16934924599 ,-25.4901599884033,U,b,0,0,n,18474463200,-27.0115375518799,U,b,0,0,n,20014001800,-27.1809406280518 ,U,b,0,0,n,21553540400,-27.8667469024658,U,b,0,0,n,23093079000,-29.4008769989014,U ,b,0,0,n,24632617600,-28.6771717071533,U,b,0,0,n,26172156200,-31.2101612091064,U,b ,0,0,n,27711694800,-34.6378364562988,U,b,0,0,n,29251233400,-35.1856231689453,U,b,0 ,0,n,30790772000,-34.0636138916016,U,b,0,0,n,32330310599,-33.1878089904785,U,b,0,0 ,n,33869849199,-32.1789131164551,U,b,0,0,n,35409387800,-30.6028327941895,U,b,0,0,n ,36948926400,-29.7387866973877,U,b,0,0,n,38488465000,-28.0667896270752,U,b,0,0,n,40028003600 ,-24.5129261016846,U,b,0,0,n,41567542200,-21.3655872344971,U,b,0,0,n,43107080800,-17.8813343048096 ,U,b,0,0,n,44646619400,-14.2252674102783,U,b,0,0,n,46186158000,-11.2198505401611,U ,b,0,0,n,47725696599,-8.8955249786377,U,b,0,0,n,49265235200,-6.28085517883301,U,b ,0,0,n,50804773799,-2.79683113098145,U,b,0,0,n,52344312400,1.60481095314026,U,b,0 ,0,n,53883850999,6.27302360534668,U,b,0,0,n,55423389600,10.420973777771,U,b,0,0,n ,56962928200,15.4698629379272,U,b,0,0,n,58502466800,21.0474834442139,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Knee" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 18.257194519043 Color: 1,0,0 } Channel: "Y" { Default: -1.20693221106194e-006 KeyVer: 4005 KeyCount: 22 Key: 0,-1.20693243843562e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600 ,-1.20693198368826e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,-1.20693175631459e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,4618615800,-1.20693198368826e-006,U ,s,0,0,a,0.329832986317342,0.329832986317342,7697693000,-1.20693266580929e-006,U,s ,0,0,a,0.329832986317342,0.989898998959688,9237231600,-1.2069330068698e-006,U,s,0 ,0,a,0.989898998959688,0.329832986317342,13855847400,-1.20693289318297e-006,U,s,0 ,0,a,0.329832986317342,0.329832986317342,15395386000,-1.20693277949613e-006,U,s,0 ,0,a,0.32943294630968,0.988698878936702,16927226907,-1.20693221106194e-006,U,s,0,0 ,a,0.989999008961604,0.330133016323089,20014001800,-1.20693255212245e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,21553540400,-1.20693312055664e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,23093079000,-1.20693346161715e-006,U,s,0,0 ,a,0.329832986317342,0.989898998959688,24632617600,-1.20693289318297e-006,U,s,0,0 ,a,0.989898998959688,0.329832986317342,26172156200,-1.20693255212245e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,32330310599,-1.20693277949613e-006,U,s,0,0 ,a,0.32943294630968,0.32943294630968,33862151507,-1.2069330068698e-006,U,s,0,0,a,0.33033303632692 ,0.33033303632692,35409387800,-1.20693152894091e-006,U,s,0,0,a,0.329832986317342,0.329832986317342 ,36948926400,-1.20693243843562e-006,U,s,0,0,a,0.329832986317342,0.329832986317342 ,38488465000,-1.20693232474878e-006,U,s,0,0,a,0.329832986317342,0.329832986317342 ,41567542200,-1.20693152894091e-006,U,b,0,0,a,0.329832986317342,0.329832986317342 ,43107080800,-1.20693152894091e-006,U,b,0,0,a,0.329832986317342,0.329832986317342 ,58502466800,-1.20693266580929e-006,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -1.28146643874061e-006 KeyVer: 4005 KeyCount: 39 Key: 0,-1.28146621136693e-006,U,s,0,0,n,1539538600,-1.28146643874061e-006,U,b,0,0,n,3079077200 ,-1.28146666611428e-006,U,b,0,0,n,4618615800,-1.28146677980112e-006,U,b,0,0,n,6158154400 ,-1.28146689348796e-006,U,b,0,0,n,7697693000,-1.28146712086163e-006,U,b,0,0,n,9237231600 ,-1.2814670071748e-006,U,b,0,0,n,10776770200,-1.28146723454847e-006,U,b,0,0,n,12316308800 ,-1.28146723454847e-006,U,b,0,0,n,13855847400,-1.28146734823531e-006,U,b,0,0,n,15395386000 ,-1.28146734823531e-006,U,b,0,0,n,16934924599,-1.28146734823531e-006,U,b,0,0,n,18474463200 ,-1.28146723454847e-006,U,b,0,0,n,20014001800,-1.28146734823531e-006,U,b,0,0,n,21553540400 ,-1.2814670071748e-006,U,b,0,0,n,23093079000,-1.28146689348796e-006,U,b,0,0,n,24632617600 ,-1.28146655242745e-006,U,b,0,0,n,26172156200,-1.28146632505377e-006,U,b,0,0,n,27711694800 ,-1.2814660976801e-006,U,b,0,0,n,29251233400,-1.28146587030642e-006,U,b,0,0,n,30790772000 ,-1.28146575661958e-006,U,b,0,0,n,32330310599,-1.28146552924591e-006,U,b,0,0,n,33869849199 ,-1.28146541555907e-006,U,b,0,0,n,35409387800,-1.28146564293274e-006,U,b,0,0,n,36948926400 ,-1.28146518818539e-006,U,b,0,0,n,38488465000,-1.28146530187223e-006,U,b,0,0,n,40028003600 ,-1.28146541555907e-006,U,b,0,0,n,41567542200,-1.28146564293274e-006,U,b,0,0,n,43107080800 ,-1.28146575661958e-006,U,b,0,0,n,44646619400,-1.28146598399326e-006,U,b,0,0,n,46186158000 ,-1.28146632505377e-006,U,b,0,0,n,47725696599,-1.28146632505377e-006,U,b,0,0,n,49265235200 ,-1.28146632505377e-006,U,b,0,0,n,50804773799,-1.28146643874061e-006,U,b,0,0,n,52344312400 ,-1.28146643874061e-006,U,b,0,0,n,53883850999,-1.28146655242745e-006,U,b,0,0,n,55423389600 ,-1.28146655242745e-006,U,b,0,0,n,56962928200,-1.28146655242745e-006,U,b,0,0,n,58502466800 ,-1.28146643874061e-006,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: -1.3035603761673 KeyVer: 4005 KeyCount: 46 Key: 0,-3.83886694908142,U,s,-65.4377517700195,-32.7567138671875,a,0.329832986317342,0.329832986317342 ,1539538600,-5.47544145584106,U,s,-32.7567138671875,-10.673171043396,a,0.329832986317342 ,0.329832986317342,3079077200,-6.02264785766602,U,s,-10.673171043396,-3.56411671638489 ,a,0.329832986317342,0.329832986317342,3848846500,-6.15267562866211,U,s,-3.56411671638489 ,12.7318000793457,a,0.329832986317342,0.329932996319258,4618615800,-6.14145183563232 ,U,s,12.7318000793457,30.8554954528809,a,0.329932996319258,0.329832986317342,5388385100 ,-5.72828197479248,U,s,30.8554954528809,41.5662994384766,a,0.329832986317342,0.329832986317342 ,6158154400,-5.1129355430603,U,s,41.5662994384766,97.7905349731445,a,0.329832986317342 ,0.329832986317342,7697693000,-3.41769289970398,U,s,97.7905349731445,67.737548828125 ,a,0.329832986317342,0.329932996319258,9237231600,1.4064337015152,U,s,67.737548828125 ,-34.1675758361816,a,0.329932996319258,0.989999008961604,10776770200,1.09814345836639 ,U,s,-34.1675758361816,-75.906608581543,a,0.989999008961604,0.329832986317342,12316308800 ,-0.871404409408569,U,s,-75.906608581543,-86.5799331665039,a,0.329832986317342,0.989999008961604 ,13855847400,-3.96229696273804,U,s,-86.5799331665039,-45.685417175293,a,0.989999008961604 ,0.329832986317342,15395386000,-6.64339971542358,U,s,-45.685417175293,-12.9293050765991 ,a,0.32943294630968,0.32943294630968,16927226907,-7.01290655136108,U,s,-12.9293050765991 ,-13.0051908493042,a,0.989999008961604,0.989999008961604,16934924599,-7.01560831069946 ,U,s,-13.0051908493042,-12.5258827209473,a,0.333233326382469,0.329732976315427,17704693900 ,-7.24634265899658,U,s,-12.5258827209473,-14.0146265029907,a,0.329932996319258,0.329832986317342 ,18474463200,-7.43358707427979,U,s,-14.0146265029907,-13.9197549819946,a,0.329832986317342 ,0.329832986317342,19244232500,-7.71349668502808,U,s,-13.9197549819946,-30.7581348419189 ,a,0.329832986317342,0.329832986317342,20014001800,-7.89757871627808,U,s,-30.7581348419189 ,-47.3696899414063,a,0.329832986317342,0.329832986317342,20783771100,-8.73876762390137 ,U,s,-47.3696899414063,-42.1735229492188,a,0.329832986317342,0.989898998959688,21553540400 ,-9.4765682220459,U,s,-42.1735229492188,3.36946868896484,a,0.989898998959688,0.329932996319258 ,23093079000,-10.7427177429199,U,s,3.36946868896484,54.3450241088867,a,0.329932996319258 ,0.329832986317342,24632617600,-9.25193691253662,U,s,54.3450241088867,51.5244369506836 ,a,0.329832986317342,0.329832986317342,26172156200,-7.11971664428711,U,s,51.5244369506836 ,1.43827128410339,a,0.329832986317342,0.329932996319258,27711694800,-5.81697463989258 ,U,s,1.43827128410339,-43.6094627380371,a,0.329932996319258,0.329932996319258,29251233400 ,-7.02383184432983,U,s,-43.6094627380371,23.64377784729,a,0.329932996319258,0.989898998959688 ,30790772000,-8.72427272796631,U,s,23.64377784729,79.5574951171875,a,0.989898998959688 ,0.329932996319258,32330310599,-5.44757986068726,U,s,79.5574951171875,65.8555603027344 ,a,0.32943294630968,0.32943294630968,33862151507,-3.42922854423523,U,s,65.8555603027344 ,66.0146560668945,a,0.427942798196455,0.427042708179215,33869849199,-3.41549158096313 ,U,s,66.0146560668945,67.9337921142578,a,0.333333336384385,0.329832986317342,35409387800 ,-1.05307996273041,U,s,67.9337921142578,59.9620399475098,a,0.329932996319258,0.329832986317342 ,36948926400,1.11505162715912,U,s,59.9620399475098,22.8400268554688,a,0.329832986317342 ,0.329832986317342,38488465000,2.94438982009888,U,s,22.8400268554688,-8.95402336120605 ,a,0.329832986317342,0.329832986317342,40028003600,2.63772010803223,U,s,-8.95402336120605 ,-9.99001502990723,a,0.329832986317342,0.329832986317342,41567542200,2.34745502471924 ,U,s,-9.99001502990723,-15.5926685333252,a,0.329832986317342,0.989898998959688,43107080800 ,1.97171902656555,U,s,-15.5926685333252,-15.0171041488647,a,0.989898998959688,0.329832986317342 ,44646619400,1.30794370174408,U,s,-15.0171041488647,-13.935583114624,a,0.329832986317342 ,0.329832986317342,46186158000,0.970578730106354,U,s,-13.935583114624,-19.2272720336914 ,a,0.329832986317342,0.329832986317342,47725696599,0.378904849290848,U,s,-19.2272720336914 ,-18.6979751586914,a,0.329832986317342,0.329832986317342,49265235200,-0.311239272356033 ,U,s,-18.6979751586914,-17.1783008575439,a,0.329832986317342,0.329832986317342,50804773799 ,-0.86762672662735,U,s,-17.1783008575439,-18.7269515991211,a,0.329832986317342,0.329932996319258 ,52344312400,-1.45645952224731,U,s,-18.7269515991211,-24.0576171875,a,0.329932996319258 ,0.329832986317342,53883850999,-2.1160900592804,U,s,-24.0576171875,-24.175199508667 ,a,0.329832986317342,0.329832986317342,55423389600,-3.06030058860779,U,s,-24.175199508667 ,-11.6847877502441,a,0.329832986317342,0.329932996319258,56962928200,-3.72777009010315 ,U,s,-11.6847877502441,4.99379825592041,a,0.329932996319258,0.329832986317342,58502466800 ,-3.83928656578064,U,s,4.99379825592041,0,n Color: 1,0,0 } Channel: "Y" { Default: -4.911376953125 KeyVer: 4005 KeyCount: 46 Key: 0,-0.228155642747879,U,s,0,0,n,1539538600,-0.811639308929443,U,b,0,0,n,3079077200 ,-1.64818203449249,U,b,0,-114.167961120605,n,3848846500,-2.9167149066925,U,b,-114.167961120605 ,0,n,4618615800,-4.18524789810181,U,b,0,-160.033386230469,n,5388385100,-5.96339702606201 ,U,b,-160.033386230469,0,n,6158154400,-7.74154567718506,U,b,0,0,n,7697693000,-10.2137126922607 ,U,b,0,0,n,9237231600,-12.423620223999,U,b,0,0,n,10776770200,-12.2334461212158,U,b ,0,0,n,12316308800,-10.8227052688599,U,b,0,0,n,13855847400,-9.4316291809082,U,b,0 ,0,n,15395386000,-7.97578763961792,U,b,0,0.914577424526215,n,16927226907,-7.15781545639038 ,U,b,0.914577424526215,0,n,16934924599,-7.15772008895874,U,b,0,53.3083877563477,n ,17704693900,-6.56540489196777,U,b,53.3083877563477,0,n,18474463200,-5.97308921813965 ,U,b,0,85.7711639404297,n,19244232500,-5.02007627487183,U,b,85.7711639404297,0,n,20014001800 ,-4.067063331604,U,b,0,110.031806945801,n,20783771100,-2.84448766708374,U,b,110.031806945801 ,0,n,21553540400,-1.62191212177277,U,b,0,0,n,23093079000,0.0515954382717609,U,b,0 ,0,n,24632617600,0.90336149930954,U,b,0,0,n,26172156200,-0.21460597217083,U,b,0,0 ,n,27711694800,-2.61649298667908,U,b,0,0,n,29251233400,-3.17312788963318,U,b,0,0,n ,30790772000,-3.04500341415405,U,b,0,0,n,32330310599,-4.89813137054443,U,b,0,-1.68756556510925 ,n,33862151507,-6.40744256973267,U,b,-1.68756556510925,0,n,33869849199,-6.40761852264404 ,U,b,0,0,n,35409387800,-7.69687986373901,U,b,0,0,n,36948926400,-8.72749900817871,U ,b,0,0,n,38488465000,-9.32710456848145,U,b,0,0,n,40028003600,-9.26736164093018,U,b ,0,0,n,41567542200,-8.86744499206543,U,b,0,0,n,43107080800,-8.46683788299561,U,b,0 ,0,n,44646619400,-7.87265777587891,U,b,0,0,n,46186158000,-7.40904760360718,U,b,0,0 ,n,47725696599,-6.88351774215698,U,b,0,0,n,49265235200,-6.23764181137085,U,b,0,0,n ,50804773799,-5.53875160217285,U,b,0,0,n,52344312400,-4.79519653320313,U,b,0,0,n,53883850999 ,-3.9627366065979,U,b,0,0,n,55423389600,-2.96677875518799,U,b,0,0,n,56962928200,-1.73351609706879 ,U,b,0,0,n,58502466800,-0.228413239121437,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -31.2710037231445 KeyVer: 4005 KeyCount: 46 Key: 0,-11.1023902893066,U,s,-136.703628540039,-179.398712158203,a,0.329932996319258,0.329832986317342 ,1539538600,-16.3707637786865,U,s,-179.398712158203,-321.511352539063,a,0.329832986317342 ,0.329832986317342,3079077200,-23.0623073577881,U,s,-321.511352539063,-382.070037841797 ,a,0.329832986317342,0.329832986317342,3848846500,-29.4272041320801,U,s,-382.070037841797 ,-383.119934082031,a,0.329832986317342,0.329832986317342,4618615800,-35.7979736328125 ,U,s,-383.119934082031,-385.101470947266,a,0.329832986317342,0.329832986317342,5388385100 ,-42.197868347168,U,s,-385.101470947266,-319.499084472656,a,0.329832986317342,0.329832986317342 ,6158154400,-48.6346893310547,U,s,-319.499084472656,-193.644668579102,a,0.329832986317342 ,0.329932996319258,7697693000,-54.8373107910156,U,s,-193.644668579102,-174.349456787109 ,a,0.329932996319258,0.329832986317342,9237231600,-61.5443344116211,U,s,-174.349456787109 ,-94.1779251098633,a,0.329832986317342,0.989999008961604,10776770200,-66.4606094360352 ,U,s,-94.1779251098633,1.92078578472137,a,0.989999008961604,0.329832986317342,12316308800 ,-67.8228607177734,U,s,1.92078578472137,78.1268463134766,a,0.329832986317342,0.329832986317342 ,13855847400,-66.3325576782227,U,s,78.1268463134766,154.451126098633,a,0.329832986317342 ,0.329932996319258,15395386000,-62.6144065856934,U,s,154.451126098633,239.89631652832 ,a,0.32943294630968,0.32943294630968,16927226907,-56.0858154296875,U,s,239.89631652832 ,240.929107666016,a,0.41224122789572,0.416641667980002,16934924599,-56.0357246398926 ,U,s,240.929107666016,263.124572753906,a,0.333333336384385,0.329732976315427,17704693900 ,-51.6695671081543,U,s,263.124572753906,303.863250732422,a,0.329832986317342,0.329832986317342 ,18474463200,-47.2607688903809,U,s,303.863250732422,342.831085205078,a,0.329832986317342 ,0.329832986317342,19244232500,-41.5407943725586,U,s,342.831085205078,315.467651367188 ,a,0.329832986317342,0.989898998959688,20014001800,-35.833065032959,U,s,315.467651367188 ,287.81201171875,a,0.989898998959688,0.329932996319258,20783771100,-31.0252056121826 ,U,s,287.81201171875,241.030059814453,a,0.329932996319258,0.989999008961604,21553540400 ,-26.239330291748,U,s,241.030059814453,135.619232177734,a,0.989999008961604,0.329832986317342 ,23093079000,-21.2798290252686,U,s,135.619232177734,19.1176490783691,a,0.329832986317342 ,0.329932996319258,24632617600,-17.1980495452881,U,s,19.1176490783691,-150.848510742188 ,a,0.329932996319258,0.329932996319258,26172156200,-20.0053195953369,U,s,-150.848510742188 ,-149.752151489258,a,0.329932996319258,0.329932996319258,27711694800,-27.25461769104 ,U,s,-149.752151489258,-41.52490234375,a,0.329932996319258,0.329832986317342,29251233400 ,-29.9887962341309,U,s,-41.52490234375,-49.0444793701172,a,0.329832986317342,0.989898998959688 ,30790772000,-30.0229434967041,U,s,-49.0444793701172,-142.539901733398,a,0.989898998959688 ,0.329832986317342,32330310599,-33.2584266662598,U,s,-142.539901733398,-159.207260131836 ,a,0.32943294630968,0.32943294630968,33862151507,-39.4770202636719,U,s,-159.207260131836 ,-158.648056030273,a,0.41224122789572,0.416641667980002,33869849199,-39.5101280212402 ,U,s,-158.648056030273,-117.724967956543,a,0.333233326382469,0.329832986317342,35409387800 ,-43.8483276367188,U,s,-117.724967956543,-73.9477920532227,a,0.329932996319258,0.329832986317342 ,36948926400,-47.355110168457,U,s,-73.9477920532227,-12.7894954681396,a,0.329832986317342 ,0.329832986317342,38488465000,-48.7781791687012,U,s,-12.7894954681396,26.1094913482666 ,a,0.329832986317342,0.989898998959688,40028003600,-48.2077407836914,U,s,26.1094913482666 ,39.9343223571777,a,0.989898998959688,0.329832986317342,41567542200,-47.0375480651855 ,U,s,39.9343223571777,55.9686050415039,a,0.329832986317342,0.329932996319258,43107080800 ,-45.5454521179199,U,s,55.9686050415039,61.9067649841309,a,0.329932996319258,0.329832986317342 ,44646619400,-43.3063049316406,U,s,61.9067649841309,61.1157836914063,a,0.329832986317342 ,0.329932996319258,46186158000,-41.4183349609375,U,s,61.1157836914063,74.0412902832031 ,a,0.329932996319258,0.329832986317342,47725696599,-39.2319221496582,U,s,74.0412902832031 ,85.5019149780273,a,0.329832986317342,0.329832986317342,49265235200,-36.482250213623 ,U,s,85.5019149780273,90.0004653930664,a,0.329832986317342,0.329832986317342,50804773799 ,-33.5317916870117,U,s,90.0004653930664,96.6699905395508,a,0.329832986317342,0.329832986317342 ,52344312400,-30.4822196960449,U,s,96.6699905395508,109.934501647949,a,0.329832986317342 ,0.989999008961604,53883850999,-27.0871276855469,U,s,109.934501647949,136.903701782227 ,a,0.989898998959688,0.329832986317342,55423389600,-23.1532516479492,U,s,136.903701782227 ,180.694869995117,a,0.329832986317342,0.329832986317342,56962928200,-17.9602127075195 ,U,s,180.694869995117,230.502288818359,a,0.329832986317342,0.329832986317342,58502466800 ,-11.1069278717041,U,s,230.50227355957,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Ankle" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 15.4280042648315 Color: 1,0,0 } Channel: "Y" { Default: 1.89655921190024e-007 KeyVer: 4005 KeyCount: 39 Key: 0,1.89654741689083e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,1.89656731208743e-007 ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,1.8965687331729e-007,U,s ,0,0,a,0.329832986317342,0.329832986317342,4618615800,1.8965587855746e-007,U,s,0,0 ,a,0.329832986317342,0.329832986317342,6158154400,1.89655708027203e-007,U,s,0,0,a ,0.329832986317342,0.329832986317342,7697693000,1.89655935400879e-007,U,s,0,0,a,0.329832986317342 ,0.329832986317342,9237231600,1.89656333304811e-007,U,s,0,0,a,0.329832986317342,0.329832986317342 ,10776770200,1.89656816473871e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,12316308800 ,1.89657413329769e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,13855847400,1.89658805993531e-007 ,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000,1.89657328064641e-007,U ,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,1.8965687331729e-007,U,s,0 ,0,a,0.33033303632692,0.33033303632692,18474463200,1.89657185956094e-007,U,s,0,0,a ,0.329832986317342,0.329832986317342,20014001800,1.89654599580535e-007,U,s,0,0,a,0.329832986317342 ,0.329832986317342,21553540400,1.8965337744703e-007,U,s,0,0,a,0.329832986317342,0.329832986317342 ,23093079000,1.89652041626687e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,24632617600 ,1.89653405868739e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,26172156200,1.89655054327886e-007 ,U,s,0,0,a,0.329832986317342,0.329832986317342,27711694800,1.8965286585626e-007,U ,s,0,0,a,0.329832986317342,0.329832986317342,29251233400,1.89655025906177e-007,U,s ,0,0,a,0.329832986317342,0.329832986317342,30790772000,1.89654485893698e-007,U,s,0 ,0,a,0.329832986317342,0.329832986317342,32330310599,1.89655736448913e-007,U,s,0,0 ,a,0.32943294630968,0.32943294630968,33862151507,1.89653462712158e-007,U,s,0,0,a,0.33033303632692 ,0.989999008961604,35409387800,1.89658663884984e-007,U,s,0,0,a,0.989898998959688,0.329832986317342 ,36948926400,1.89655736448913e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,38488465000 ,1.8965587855746e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,40028003600,1.89655935400879e-007 ,U,s,0,0,a,0.329832986317342,0.329832986317342,41567542200,1.8965639014823e-007,U ,s,0,0,a,0.329832986317342,0.329832986317342,43107080800,1.8965585013575e-007,U,s ,0,0,a,0.329832986317342,0.329832986317342,44646619400,1.8965536696669e-007,U,s,0 ,0,a,0.329832986317342,0.329832986317342,46186158000,1.8965587855746e-007,U,s,0,0 ,a,0.329832986317342,0.329832986317342,47725696599,1.89654826954211e-007,U,s,0,0,a ,0.329832986317342,0.989898998959688,49265235200,1.89654713267373e-007,U,s,0,0,a,0.989898998959688 ,0.989898998959688,50804773799,1.89655736448913e-007,U,s,0,0,a,0.989898998959688,0.329832986317342 ,52344312400,1.89656105931135e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,53883850999 ,1.89655537496947e-007,U,s,0,0,a,0.329832986317342,0.329832986317342,55423389600,1.89655111171305e-007 ,U,s,0,0,a,0.329832986317342,0.329832986317342,56962928200,1.89655281701562e-007,U ,s,0,0,a,0.329832986317342,0.329832986317342,58502466800,1.89655480653528e-007,U,s ,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 5.16880504619621e-007 KeyVer: 4005 KeyCount: 39 Key: 0,5.1687857194338e-007,U,s,0,0,n,1539538600,5.16879936185433e-007,U,b,0,0,n,3079077200 ,5.16879481438082e-007,U,b,0,0,n,4618615800,5.16878856160474e-007,U,b,0,0,n,6158154400 ,5.16878969847312e-007,U,b,0,0,n,7697693000,5.1688107305381e-007,U,b,0,0,n,9237231600 ,5.16877321388165e-007,U,b,0,0,n,10776770200,5.16877321388165e-007,U,b,0,0,n,12316308800 ,5.16877435075003e-007,U,b,0,0,n,13855847400,5.16879254064406e-007,U,b,0,0,n,15395386000 ,5.1688004987227e-007,U,b,0,0,n,16934924599,5.16880959366972e-007,U,b,0,0,n,18474463200 ,5.16878401413123e-007,U,b,0,0,n,20014001800,5.16877889822354e-007,U,b,0,0,n,21553540400 ,5.1687857194338e-007,U,b,0,0,n,23093079000,5.16879140377569e-007,U,b,0,0,n,24632617600 ,5.16880618306459e-007,U,b,0,0,n,26172156200,5.16878230882867e-007,U,b,0,0,n,27711694800 ,5.16878742473637e-007,U,b,0,0,n,29251233400,5.16876411893463e-007,U,b,0,0,n,30790772000 ,5.1687857194338e-007,U,b,0,0,n,32330310599,5.16879936185433e-007,U,b,0,0,n,33869849199 ,5.16878458256542e-007,U,b,0,0,n,35409387800,5.16878515099961e-007,U,b,0,0,n,36948926400 ,5.16880163559108e-007,U,b,0,0,n,38488465000,5.16880163559108e-007,U,b,0,0,n,40028003600 ,5.16878685630218e-007,U,b,0,0,n,41567542200,5.1687754876184e-007,U,b,0,0,n,43107080800 ,5.16878799317055e-007,U,b,0,0,n,44646619400,5.16879140377569e-007,U,b,0,0,n,46186158000 ,5.16878799317055e-007,U,b,0,0,n,47725696599,5.1687908353415e-007,U,b,0,0,n,49265235200 ,5.16878287726286e-007,U,b,0,0,n,50804773799,5.16879651968338e-007,U,b,0,0,n,52344312400 ,5.16880675149878e-007,U,b,0,0,n,53883850999,5.1687857194338e-007,U,b,0,0,n,55423389600 ,5.16880334089365e-007,U,b,0,0,n,56962928200,5.16876866640814e-007,U,b,0,0,n,58502466800 ,5.16879993028851e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 4.14072751998901 KeyVer: 4005 KeyCount: 39 Key: 0,4.35679054260254,U,s,0,0,n,1539538600,4.44680213928223,U,b,0,0,n,3079077200,4.17091608047485 ,U,b,0,0,n,4618615800,4.04248237609863,U,b,0,0,n,6158154400,4.12370872497559,U,b,0 ,0,n,7697693000,4.07194995880127,U,b,0,0,n,9237231600,3.9996132850647,U,b,0,0,n,10776770200 ,4.48966693878174,U,b,0,0,n,12316308800,4.31029891967773,U,b,0,0,n,13855847400,4.23501920700073 ,U,b,0,0,n,15395386000,4.17848873138428,U,b,0,0,n,16934924599,4.22898149490356,U,b ,0,0,n,18474463200,4.24592113494873,U,b,0,0,n,20014001800,4.25822877883911,U,b,0,0 ,n,21553540400,4.4825644493103,U,b,0,0,n,23093079000,4.84366750717163,U,b,0,0,n,24632617600 ,4.80804347991943,U,b,0,0,n,26172156200,4.36219692230225,U,b,0,0,n,27711694800,4.15001630783081 ,U,b,0,0,n,29251233400,4.13865327835083,U,b,0,0,n,30790772000,4.24137020111084,U,b ,0,0,n,32330310599,4.42545557022095,U,b,0,0,n,33869849199,4.25567150115967,U,b,0,0 ,n,35409387800,4.19248485565186,U,b,0,0,n,36948926400,4.22397708892822,U,b,0,0,n,38488465000 ,4.319167137146,U,b,0,0,n,40028003600,4.32930755615234,U,b,0,0,n,41567542200,4.32822227478027 ,U,b,0,0,n,43107080800,4.32375192642212,U,b,0,0,n,44646619400,4.27604341506958,U,b ,0,0,n,46186158000,4.25706911087036,U,b,0,0,n,47725696599,4.21590518951416,U,b,0,0 ,n,49265235200,4.17489862442017,U,b,0,0,n,50804773799,4.14333009719849,U,b,0,0,n,52344312400 ,4.14024543762207,U,b,0,0,n,53883850999,4.16894388198853,U,b,0,0,n,55423389600,4.19347047805786 ,U,b,0,0,n,56962928200,4.29721927642822,U,b,0,0,n,58502466800,4.35731649398804,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 1.20476734638214 KeyVer: 4005 KeyCount: 39 Key: 0,2.99853110313416,U,s,0,0,n,1539538600,3.20828461647034,U,b,0,0,n,3079077200,3.32988381385803 ,U,b,0,0,n,4618615800,2.93672728538513,U,b,0,0,n,6158154400,2.18759441375732,U,b,0 ,0,n,7697693000,2.19795346260071,U,b,0,0,n,9237231600,2.30332565307617,U,b,0,0,n,10776770200 ,-1.63251161575317,U,b,0,0,n,12316308800,0.016129607334733,U,b,0,0,n,13855847400,0.893061399459839 ,U,b,0,0,n,15395386000,2.35970544815063,U,b,0,0,n,16934924599,1.57121956348419,U,b ,0,0,n,18474463200,2.28286409378052,U,b,0,0,n,20014001800,1.54342901706696,U,b,0,0 ,n,21553540400,3.41273379325867,U,b,0,0,n,23093079000,5.18153429031372,U,b,0,0,n,24632617600 ,6.26558351516724,U,b,0,0,n,26172156200,5.24189281463623,U,b,0,0,n,27711694800,3.38173460960388 ,U,b,0,0,n,29251233400,0.934875428676605,U,b,0,0,n,30790772000,-0.950364351272583 ,U,b,0,0,n,32330310599,-1.64491772651672,U,b,0,0,n,33869849199,-1.14289402961731,U ,b,0,0,n,35409387800,-0.148089364171028,U,b,0,0,n,36948926400,0.957562983036041,U ,b,0,0,n,38488465000,1.99892556667328,U,b,0,0,n,40028003600,1.98226845264435,U,b,0 ,0,n,41567542200,1.89037907123566,U,b,0,0,n,43107080800,1.80209422111511,U,b,0,0,n ,44646619400,1.49238002300262,U,b,0,0,n,46186158000,1.38304305076599,U,b,0,0,n,47725696599 ,1.17027914524078,U,b,0,0,n,49265235200,1.01487386226654,U,b,0,0,n,50804773799,1.03787541389465 ,U,b,0,0,n,52344312400,1.2356733083725,U,b,0,0,n,53883850999,1.57354724407196,U,b ,0,0,n,55423389600,1.90853095054626,U,b,0,0,n,56962928200,2.5185649394989,U,b,0,0 ,n,58502466800,3.00181150436401,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 25.1047039031982 KeyVer: 4005 KeyCount: 39 Key: 0,24.1624279022217,U,s,0,0,n,1539538600,23.6075916290283,U,b,0,0,n,3079077200,21.5899677276611 ,U,b,0,0,n,4618615800,15.8137855529785,U,b,0,0,n,6158154400,2.50735831260681,U,b,0 ,0,n,7697693000,-14.5010004043579,U,b,0,0,n,9237231600,-12.909008026123,U,b,0,0,n ,10776770200,-7.25075197219849,U,b,0,0,n,12316308800,-5.14674043655396,U,b,0,0,n,13855847400 ,-3.33845448493958,U,b,0,0,n,15395386000,-0.0320573784410954,U,b,0,0,n,16934924599 ,2.53520441055298,U,b,0,0,n,18474463200,4.18526077270508,U,b,0,0,n,20014001800,5.50827693939209 ,U,b,0,0,n,21553540400,6.09051847457886,U,b,0,0,n,23093079000,11.2608890533447,U,b ,0,0,n,24632617600,18.9397392272949,U,b,0,0,n,26172156200,20.4814205169678,U,b,0,0 ,n,27711694800,16.4507923126221,U,b,0,0,n,29251233400,5.76726961135864,U,b,0,0,n,30790772000 ,-3.40555834770203,U,b,0,0,n,32330310599,-5.79667568206787,U,b,0,0,n,33869849199,0.831438004970551 ,U,b,0,0,n,35409387800,6.01630163192749,U,b,0,0,n,36948926400,10.1481599807739,U,b ,0,0,n,38488465000,13.3435354232788,U,b,0,0,n,40028003600,15.8721389770508,U,b,0,0 ,n,41567542200,17.9210548400879,U,b,0,0,n,43107080800,19.7113342285156,U,b,0,0,n,44646619400 ,20.9869022369385,U,b,0,0,n,46186158000,22.2164764404297,U,b,0,0,n,47725696599,22.8926696777344 ,U,b,0,0,n,49265235200,23.3938636779785,U,b,0,0,n,50804773799,24.2555408477783,U,b ,0,0,n,52344312400,25.2619552612305,U,b,0,0,n,53883850999,25.9738693237305,U,b,0,0 ,n,55423389600,26.2068958282471,U,b,0,0,n,56962928200,25.6610794067383,U,b,0,0,n,58502466800 ,24.1615524291992,U,s,0,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 0.999999940395355 Color: 1,0,0 } Channel: "Y" { Default: 0.999999940395355 Color: 0,1,0 } Channel: "Z" { Default: 0.999999940395355 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } Model: "Model::R_Ball" { Version: 1.1 Channel: "Transform" { Channel: "T" { Channel: "X" { Default: 5.25022077560425 KeyVer: 4005 KeyCount: 39 Key: 0,5.25022077560425,U,s,0,0,n,1539538600,5.25022125244141,U,b,0,0,n,3079077200,5.25022077560425 ,U,b,0,0,n,4618615800,5.25022077560425,U,b,0,0,n,6158154400,5.25022029876709,U,b,0 ,0,n,7697693000,5.25022077560425,U,b,0,0,n,9237231600,5.25022077560425,U,b,0,0,n,10776770200 ,5.25022029876709,U,b,0,0,n,12316308800,5.25022077560425,U,b,0,0,n,13855847400,5.25022125244141 ,U,b,0,0,n,15395386000,5.25022077560425,U,b,0,0,n,16934924599,5.25022077560425,U,b ,0,0,n,18474463200,5.25022077560425,U,b,0,0,n,20014001800,5.25022077560425,U,b,0,0 ,n,21553540400,5.25022077560425,U,b,0,0,n,23093079000,5.25022077560425,U,b,0,0,n,24632617600 ,5.25022125244141,U,b,0,0,n,26172156200,5.25022077560425,U,b,0,0,n,27711694800,5.25022077560425 ,U,b,0,0,n,29251233400,5.25022077560425,U,b,0,0,n,30790772000,5.25022077560425,U,b ,0,0,n,32330310599,5.24553966522217,U,b,0,0,n,33869849199,5.25022077560425,U,b,0,0 ,n,35409387800,5.25022077560425,U,b,0,0,n,36948926400,5.25022029876709,U,b,0,0,n,38488465000 ,5.25022125244141,U,b,0,0,n,40028003600,5.25022077560425,U,b,0,0,n,41567542200,5.25022125244141 ,U,b,0,0,n,43107080800,5.25022077560425,U,b,0,0,n,44646619400,5.25022077560425,U,b ,0,0,n,46186158000,5.25022077560425,U,b,0,0,n,47725696599,5.25022077560425,U,b,0,0 ,n,49265235200,5.25022077560425,U,b,0,0,n,50804773799,5.25022077560425,U,b,0,0,n,52344312400 ,5.25022077560425,U,b,0,0,n,53883850999,5.25025701522827,U,b,0,0,n,55423389600,5.25022077560425 ,U,b,0,0,n,56962928200,5.25022077560425,U,b,0,0,n,58502466800,5.25022077560425,U,s ,0,0,n Color: 1,0,0 } Channel: "Y" { Default: 6.27385330200195 KeyVer: 4005 KeyCount: 12 Key: 0,6.27384948730469,U,s,0,0,a,0.989898998959688,0.329932996319258,29251233400,6.27384948730469 ,U,s,0,0.0586938820779324,a,0.329832986317342,0.329932996319258,30790772000,6.27384948730469 ,U,s,0.0586938820779324,-0.000738290196750313,a,0.329932996319258,0.329832986317342 ,32330310599,6.2777624130249,U,s,-0.000738290196750313,-0.0594321824610233,a,0.32943294630968 ,0.32943294630968,33862151507,6.27384948730469,U,s,-0.0594321824610233,0,a,0.33033303632692 ,0.33033303632692,35409387800,6.27384948730469,U,s,0,0,a,0.329832986317342,0.329832986317342 ,50804773799,6.27384948730469,U,s,0,-0.000479221373097971,a,0.329832986317342,0.989898998959688 ,52344312400,6.27384948730469,U,s,-0.000479221373097971,0,a,0.989898998959688,0.329832986317342 ,53883850999,6.27381753921509,U,s,0,0.000479221343994141,a,0.329832986317342,0.329832986317342 ,55423389600,6.27384948730469,U,s,0.000479221343994141,0,a,0.329832986317342,0.989898998959688 ,56962928200,6.27384948730469,U,s,0,0,a,0.989898998959688,0.329832986317342,58502466800 ,6.27384948730469,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: -4.15015392718487e-007 KeyVer: 4005 KeyCount: 39 Key: 0,-4.15014994814555e-007,U,s,0,0,n,1539538600,-4.15016188526351e-007,U,b,0,0,n,3079077200 ,-4.1501525060994e-007,U,b,0,0,n,4618615800,-4.15015705357291e-007,U,b,0,0,n,6158154400 ,-4.15015023236265e-007,U,b,0,0,n,7697693000,-4.1501624536977e-007,U,b,0,0,n,9237231600 ,-4.15016302213189e-007,U,b,0,0,n,10776770200,-4.15014028476435e-007,U,b,0,0,n,12316308800 ,-4.15015591670453e-007,U,b,0,0,n,13855847400,-4.15015477983616e-007,U,b,0,0,n,15395386000 ,-4.15015108501393e-007,U,b,0,0,n,16934924599,-4.15016558008574e-007,U,b,0,0,n,18474463200 ,-4.15016046417804e-007,U,b,0,0,n,20014001800,-4.15015108501393e-007,U,b,0,0,n,21553540400 ,-4.15014909549427e-007,U,b,0,0,n,23093079000,-4.15016501165155e-007,U,b,0,0,n,24632617600 ,-4.15015676935582e-007,U,b,0,0,n,26172156200,-4.15014199006691e-007,U,b,0,0,n,27711694800 ,-4.15015449561906e-007,U,b,0,0,n,29251233400,-4.15015392718487e-007,U,b,0,0,n,30790772000 ,-4.15015591670453e-007,U,b,0,0,n,32330310599,-0.00437366124242544,U,b,0,0,n,33869849199 ,-4.15015477983616e-007,U,b,0,0,n,35409387800,-4.15016700117121e-007,U,b,0,0,n,36948926400 ,-4.15014625332333e-007,U,b,0,0,n,38488465000,-4.15014625332333e-007,U,b,0,0,n,40028003600 ,-4.15015222188231e-007,U,b,0,0,n,41567542200,-4.15015534827035e-007,U,b,0,0,n,43107080800 ,-4.15015392718487e-007,U,b,0,0,n,44646619400,-4.15014881127718e-007,U,b,0,0,n,46186158000 ,-4.15015108501393e-007,U,b,0,0,n,47725696599,-4.15015392718487e-007,U,b,0,0,n,49265235200 ,-4.15014113741563e-007,U,b,0,0,n,50804773799,-4.1501627379148e-007,U,b,0,0,n,52344312400 ,-4.15015222188231e-007,U,b,0,0,n,53883850999,0.00507054105401039,U,b,0,0,n,55423389600 ,-4.15015534827035e-007,U,b,0,0,n,56962928200,-4.1501476744088e-007,U,b,0,0,n,58502466800 ,-4.15016359056608e-007,U,s,0,0,n Color: 0,0,1 } LayerType: 1 } Channel: "R" { Channel: "X" { Default: 1.04748585272318e-006 KeyVer: 4005 KeyCount: 41 Key: 0,1.04740752249199e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,1539538600,1.0474093414814e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,3079077200,1.0474111604708e-006,U,s ,0,0,a,0.329832986317342,0.329832986317342,4618615800,1.04741309314704e-006,U,s,0 ,0,a,0.329832986317342,0.329832986317342,6158154400,1.04741502582328e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,7697693000,1.04741707218636e-006,U,s,0,0,a ,0.329832986317342,0.329832986317342,9237231600,1.04741889117577e-006,U,s,0,0,a,0.329832986317342 ,0.329832986317342,10776770200,1.04742093753885e-006,U,s,0,0,a,0.329832986317342,0.329832986317342 ,12316308800,1.04742287021509e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,13855847400 ,1.04742480289133e-006,U,s,0,0,a,0.329832986317342,0.329832986317342,15395386000,1.04742673556757e-006 ,U,s,0,0,a,0.32943294630968,0.32943294630968,16927226907,1.04742866824381e-006,U,b ,0,0,a,0.989999008961604,0.989999008961604,16934924599,1.04742866824381e-006,U,b,0 ,0,a,0.333333336384385,0.329832986317342,18474463200,1.04743048723321e-006,U,s,0,0 ,a,0.329832986317342,0.329832986317342,20014001800,1.04743219253578e-006,U,s,0,0,a ,0.329832986317342,0.329832986317342,21553540400,1.04743389783835e-006,U,s,0,0,a,0.329832986317342 ,0.329832986317342,23093079000,1.04743548945407e-006,U,s,0,0,a,0.329832986317342,0.329832986317342 ,24632617600,1.04743696738296e-006,U,s,0,0,a,0.329832986317342,0.989898998959688,26172156200 ,1.04743821793818e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,27711694800,1.04743946849339e-006 ,U,s,0,0,a,0.329832986317342,0.329832986317342,29251233400,1.04744049167493e-006,U ,s,0,0.259752601385117,a,0.329832986317342,0.989999008961604,30790772000,1.04744083273545e-006 ,U,s,0.259752601385117,0,a,0.989999008961604,0.989898998959688,32330310599,0.0173178873956203 ,U,s,0,-0.263019979000092,a,0.988698878936702,0.988698878936702,33862151507,1.04738626305334e-006 ,U,s,-0.263019979000092,0,a,0.989999008961604,0.989999008961604,33869849199,-5.36707411811221e-005 ,U,s,0,0,a,0.333333336384385,0.329832986317342,35409387800,1.04743332940416e-006,U ,s,0,0,a,0.329832986317342,0.329832986317342,36948926400,1.04745549833751e-006,U,s ,0,0,a,0.329832986317342,0.989898998959688,38488465000,1.04747243767633e-006,U,s,0 ,0,a,0.989898998959688,0.989898998959688,40028003600,1.04748460216797e-006,U,s,0,0 ,a,0.989898998959688,0.329832986317342,41567542200,1.04749278762029e-006,U,s,0,0,a ,0.329832986317342,0.329832986317342,43107080800,1.04749733509379e-006,U,s,0,0,a,0.329832986317342 ,0.989898998959688,44646619400,1.04749892670952e-006,U,s,0,0,a,0.989898998959688,0.989898998959688 ,46186158000,1.0474982445885e-006,U,s,0,0,a,0.989898998959688,0.989898998959688,47725696599 ,1.04749574347807e-006,U,s,0,0,a,0.989898998959688,0.329832986317342,49265235200,1.04749210549926e-006 ,U,s,0,0,a,0.329832986317342,0.989898998959688,50804773799,1.0474880127731e-006,U ,s,0,0,a,0.989898998959688,0.329832986317342,52344312400,1.04748369267327e-006,U,s ,0,0,a,0.329832986317342,0.329832986317342,53883850999,1.0474801683813e-006,U,s,0 ,0,a,0.329832986317342,0.989898998959688,55423389600,1.04747766727087e-006,U,s,0,0 ,a,0.989898998959688,0.329832986317342,56962928200,1.047476871463e-006,U,s,0,0,a,0.329832986317342 ,0.329832986317342,58502466800,1.04747857676557e-006,U,s,0,0,n Color: 1,0,0 } Channel: "Y" { Default: -3.46426012876044e-011 KeyVer: 4005 KeyCount: 41 Key: 0,0,U,s,0,0,n,1539538600,-1.62844401591783e-012,U,b,0,0,n,3079077200,-2.44266607808685e-012 ,U,b,0,0,n,4618615800,-3.6639992255505e-012,U,b,0,0,n,6158154400,-5.29244313304811e-012 ,U,b,0,0,n,7697693000,-6.51377606367132e-012,U,b,0,0,n,9237231600,-8.1422204048498e-012 ,U,b,0,0,n,10776770200,-9.77066431234741e-012,U,b,0,0,n,12316308800,-1.1399108219845e-011 ,U,b,0,0,n,13855847400,-1.26204411504682e-011,U,b,0,0,n,15395386000,-1.42488850579658e-011 ,U,b,0,0,n,16927226907,-1.50630116019235e-011,U,b,0,0,n,16934924599,-1.50631070117146e-011 ,U,b,0,0,n,18474463200,-1.66915509192123e-011,U,b,0,0,n,20014001800,-1.75057728729611e-011 ,U,b,0,0,n,21553540400,-1.83199948267099e-011,U,b,0,0,n,23093079000,-1.8727106670946e-011 ,U,b,0,0,n,24632617600,-1.91342167804587e-011,U,b,0,0,n,26172156200,-1.91342167804587e-011 ,U,b,0,0,n,27711694800,-1.91342167804587e-011,U,b,0,0,n,29251233400,-1.8727106670946e-011 ,U,b,0,0,n,30790772000,-1.66915509192123e-011,U,b,0,0,n,32330310599,0.0284744128584862 ,U,b,0,-0.0318336263298988,n,33862151507,3.32293461724475e-006,U,b,-0.0318336263298988 ,0,n,33869849199,-7.7351094279754e-012,U,b,0,0,n,35409387800,-2.56479924104491e-011 ,U,b,0,0,n,36948926400,-3.33831018384245e-011,U,b,0,0,n,38488465000,-3.90826572493896e-011 ,U,b,0,0,n,40028003600,-4.2746656908621e-011,U,b,0,0,n,41567542200,-4.51893210351439e-011 ,U,b,0,0,n,43107080800,-4.60035447236162e-011,U,b,0,0,n,44646619400,-4.55964328793801e-011 ,U,b,0,0,n,46186158000,-4.43751008161186e-011,U,b,0,0,n,47725696599,-4.19324332201487e-011 ,U,b,0,0,n,49265235200,-3.9896877468415e-011,U,b,0,0,n,50804773799,-3.70471014976559e-011 ,U,b,0,0,n,52344312400,-3.41973255268968e-011,U,b,0,0,n,53883850999,-3.13475460866908e-011 ,U,b,0,0,n,55423389600,-2.97191021791932e-011,U,b,0,0,n,56962928200,-2.84977701159317e-011 ,U,b,0,0,n,58502466800,-2.8090660006419e-011,U,s,0,0,n Color: 0,1,0 } Channel: "Z" { Default: 104.594665527344 KeyVer: 4005 KeyCount: 41 Key: 0,104.594665527344,U,s,0,0,a,0.329832986317342,0.333333336384385,1539538600,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.333333336384385,3079077200,104.594665527344,U,s,0,0 ,a,0.333333336384385,0.333333336384385,4618615800,104.594665527344,U,s,0,0,a,0.333333336384385 ,0.333333336384385,6158154400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385 ,7697693000,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,9237231600 ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,10776770200,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.333333336384385,12316308800,104.594665527344,U,s,0 ,0,a,0.333333336384385,0.333333336384385,13855847400,104.594665527344,U,s,0,0,a,0.333333336384385 ,0.333333336384385,15395386000,104.594665527344,U,s,0,0,a,0.332833286374807,0.332833286374807 ,16927226907,104.594665527344,U,s,0,0,a,0.989999008961604,0.989999008961604,16934924599 ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,18474463200,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.333333336384385,20014001800,104.594665527344,U,s,0 ,0,a,0.333333336384385,0.333333336384385,21553540400,104.594665527344,U,s,0,0,a,0.333333336384385 ,0.333333336384385,23093079000,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385 ,24632617600,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,26172156200 ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,27711694800,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.329832986317342,29251233400,104.594665527344,U,s,0 ,0.641149818897247,a,0.329832986317342,0.329832986317342,30790772000,104.594665527344 ,U,s,0.641149818897247,-0.00806480553001165,a,0.329832986317342,0.989898998959688 ,32330310599,104.637405395508,U,s,-0.00806480553001165,-0.649214625358582,a,0.988698878936702 ,0.32943294630968,33862151507,104.594665527344,U,s,-0.649214625358582,0,a,0.989999008961604 ,0.989999008961604,33869849199,104.594528198242,U,s,0,0,a,0.333233326382469,0.329832986317342 ,35409387800,104.594665527344,U,b,0,0,a,0.329832986317342,0.333333336384385,36948926400 ,104.594665527344,U,b,0,0,a,0.333333336384385,0.333333336384385,38488465000,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.333333336384385,40028003600,104.594665527344,U,s,0 ,0,a,0.333333336384385,0.333333336384385,41567542200,104.594665527344,U,s,0,0,a,0.333333336384385 ,0.333333336384385,43107080800,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385 ,44646619400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,46186158000 ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,47725696599,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.333333336384385,49265235200,104.594665527344,U,s,0 ,0,a,0.333333336384385,0.333333336384385,50804773799,104.594665527344,U,s,0,0,a,0.333333336384385 ,0.333333336384385,52344312400,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385 ,53883850999,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,55423389600 ,104.594665527344,U,s,0,0,a,0.333333336384385,0.333333336384385,56962928200,104.594665527344 ,U,s,0,0,a,0.333333336384385,0.329832986317342,58502466800,104.594665527344,U,s,0 ,0,n Color: 0,0,1 } LayerType: 2 } Channel: "S" { Channel: "X" { Default: 1 Color: 1,0,0 } Channel: "Y" { Default: 1.00000011920929 Color: 0,1,0 } Channel: "Z" { Default: 1 Color: 0,0,1 } LayerType: 3 } } Channel: "Visibility" { Default: 1 Color: 0.75,0,0 LayerType: 1 } Channel: "liw" { Default: 0 Color: 1,1,1 } } ;Generic nodes animation ;---------------------------------------------------- ;Textures animation ;---------------------------------------------------- ;Materials animation ;---------------------------------------------------- ;Constraints animation ;---------------------------------------------------- } } ;Version 5 settings ;------------------------------------------------------------------ Version5: { AmbientRenderSettings: { Version: 101 AmbientLightColor: 0.4,0.4,0.4,0 } FogOptions: { FlogEnable: 0 FogMode: 0 FogDensity: 0.002 FogStart: 0.3 FogEnd: 1000 FogColor: 1,1,1,1 } Settings: { FrameRate: "24" TimeFormat: 1 SnapOnFrames: 0 ReferenceTimeIndex: -1 TimeLineStartTime: 46186158000 TimeLineStopTime: 1385584740000 } RendererSetting: { DefaultCamera: "Producer Perspective" DefaultViewingMode: 0 } } ================================================ FILE: Tests/Assets/Models/Dude/dude_2011.fbx ================================================ ; FBX 7.1.0 project file ; Copyright (C) 1997-2010 Autodesk Inc. and/or its licensors. ; All rights reserved. ; ---------------------------------------------------- FBXHeaderExtension: { FBXHeaderVersion: 1003 FBXVersion: 7100 CreationTimeStamp: { Version: 1000 Year: 2018 Month: 1 Day: 18 Hour: 16 Minute: 31 Second: 31 Millisecond: 435 } Creator: "FBX SDK/FBX Plugins version 2013.3" SceneInfo: "SceneInfo::GlobalInfo", "UserData" { Type: "UserData" Version: 100 MetaData: { Version: 100 Title: "" Subject: "" Author: "" Keywords: "" Revision: "" Comment: "" } Properties70: { P: "DocumentUrl", "KString", "Url", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\FBX 2011\dude_2011.fbx" P: "SrcDocumentUrl", "KString", "Url", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\FBX 2011\dude_2011.fbx" P: "Original", "Compound", "", "" P: "Original|ApplicationVendor", "KString", "", "", "" P: "Original|ApplicationName", "KString", "", "", "" P: "Original|ApplicationVersion", "KString", "", "", "" P: "Original|DateTime_GMT", "DateTime", "", "", "" P: "Original|FileName", "KString", "", "", "" P: "LastSaved", "Compound", "", "" P: "LastSaved|ApplicationVendor", "KString", "", "", "" P: "LastSaved|ApplicationName", "KString", "", "", "" P: "LastSaved|ApplicationVersion", "KString", "", "", "" P: "LastSaved|DateTime_GMT", "DateTime", "", "", "" } } } GlobalSettings: { Version: 1000 Properties70: { P: "UpAxis", "int", "Integer", "",1 P: "UpAxisSign", "int", "Integer", "",1 P: "FrontAxis", "int", "Integer", "",2 P: "FrontAxisSign", "int", "Integer", "",1 P: "CoordAxis", "int", "Integer", "",0 P: "CoordAxisSign", "int", "Integer", "",1 P: "OriginalUpAxis", "int", "Integer", "",-1 P: "OriginalUpAxisSign", "int", "Integer", "",1 P: "UnitScaleFactor", "double", "Number", "",1 P: "OriginalUnitScaleFactor", "double", "Number", "",1 P: "AmbientColor", "ColorRGB", "Color", "",0.4,0.4,0.4 P: "DefaultCamera", "KString", "", "", "Producer Perspective" P: "TimeMode", "enum", "", "",11 P: "TimeSpanStart", "KTime", "Time", "",46186158000 P: "TimeSpanStop", "KTime", "Time", "",1385584740000 P: "CustomFrameRate", "double", "Number", "",-1 } } ; Documents Description ;------------------------------------------------------------------ Documents: { Count: 1 Document: 124844976, "", "Scene" { Properties70: { P: "SourceObject", "object", "", "" P: "ActiveAnimStackName", "KString", "", "", "Take 001" } RootNode: 0 } } ; Document References ;------------------------------------------------------------------ References: { } ; Object definitions ;------------------------------------------------------------------ Definitions: { Version: 100 Count: 710 ObjectType: "GlobalSettings" { Count: 1 } ObjectType: "Model" { Count: 60 PropertyTemplate: "FbxNode" { Properties70: { P: "QuaternionInterpolate", "enum", "", "",0 P: "RotationOffset", "Vector3D", "Vector", "",0,0,0 P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0 P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0 P: "TranslationActive", "bool", "", "",0 P: "TranslationMin", "Vector3D", "Vector", "",0,0,0 P: "TranslationMax", "Vector3D", "Vector", "",0,0,0 P: "TranslationMinX", "bool", "", "",0 P: "TranslationMinY", "bool", "", "",0 P: "TranslationMinZ", "bool", "", "",0 P: "TranslationMaxX", "bool", "", "",0 P: "TranslationMaxY", "bool", "", "",0 P: "TranslationMaxZ", "bool", "", "",0 P: "RotationOrder", "enum", "", "",0 P: "RotationSpaceForLimitOnly", "bool", "", "",0 P: "RotationStiffnessX", "double", "Number", "",0 P: "RotationStiffnessY", "double", "Number", "",0 P: "RotationStiffnessZ", "double", "Number", "",0 P: "AxisLen", "double", "Number", "",10 P: "PreRotation", "Vector3D", "Vector", "",0,0,0 P: "PostRotation", "Vector3D", "Vector", "",0,0,0 P: "RotationActive", "bool", "", "",0 P: "RotationMin", "Vector3D", "Vector", "",0,0,0 P: "RotationMax", "Vector3D", "Vector", "",0,0,0 P: "RotationMinX", "bool", "", "",0 P: "RotationMinY", "bool", "", "",0 P: "RotationMinZ", "bool", "", "",0 P: "RotationMaxX", "bool", "", "",0 P: "RotationMaxY", "bool", "", "",0 P: "RotationMaxZ", "bool", "", "",0 P: "InheritType", "enum", "", "",0 P: "ScalingActive", "bool", "", "",0 P: "ScalingMin", "Vector3D", "Vector", "",0,0,0 P: "ScalingMax", "Vector3D", "Vector", "",1,1,1 P: "ScalingMinX", "bool", "", "",0 P: "ScalingMinY", "bool", "", "",0 P: "ScalingMinZ", "bool", "", "",0 P: "ScalingMaxX", "bool", "", "",0 P: "ScalingMaxY", "bool", "", "",0 P: "ScalingMaxZ", "bool", "", "",0 P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0 P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0 P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1 P: "MinDampRangeX", "double", "Number", "",0 P: "MinDampRangeY", "double", "Number", "",0 P: "MinDampRangeZ", "double", "Number", "",0 P: "MaxDampRangeX", "double", "Number", "",0 P: "MaxDampRangeY", "double", "Number", "",0 P: "MaxDampRangeZ", "double", "Number", "",0 P: "MinDampStrengthX", "double", "Number", "",0 P: "MinDampStrengthY", "double", "Number", "",0 P: "MinDampStrengthZ", "double", "Number", "",0 P: "MaxDampStrengthX", "double", "Number", "",0 P: "MaxDampStrengthY", "double", "Number", "",0 P: "MaxDampStrengthZ", "double", "Number", "",0 P: "PreferedAngleX", "double", "Number", "",0 P: "PreferedAngleY", "double", "Number", "",0 P: "PreferedAngleZ", "double", "Number", "",0 P: "LookAtProperty", "object", "", "" P: "UpVectorProperty", "object", "", "" P: "Show", "bool", "", "",1 P: "NegativePercentShapeSupport", "bool", "", "",1 P: "DefaultAttributeIndex", "int", "Integer", "",-1 P: "Freeze", "bool", "", "",0 P: "LODBox", "bool", "", "",0 P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0 P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 P: "Visibility", "Visibility", "", "A",1 P: "Visibility Inheritance", "Visibility Inheritance", "", "",1 } } } ObjectType: "NodeAttribute" { Count: 59 PropertyTemplate: "FbxCameraSwitcher" { Properties70: { P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 P: "Camera Index", "Integer", "", "A",1 } } } ObjectType: "Geometry" { Count: 1 PropertyTemplate: "FbxMesh" { Properties70: { P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 P: "BBoxMin", "Vector3D", "Vector", "",0,0,0 P: "BBoxMax", "Vector3D", "Vector", "",0,0,0 P: "Primary Visibility", "bool", "", "",1 P: "Casts Shadows", "bool", "", "",1 P: "Receive Shadows", "bool", "", "",1 } } } ObjectType: "Texture" { Count: 15 PropertyTemplate: "FbxFileTexture" { Properties70: { P: "TextureTypeUse", "enum", "", "",0 P: "Texture alpha", "Number", "", "A",1 P: "CurrentMappingType", "enum", "", "",0 P: "WrapModeU", "enum", "", "",0 P: "WrapModeV", "enum", "", "",0 P: "UVSwap", "bool", "", "",0 P: "PremultiplyAlpha", "bool", "", "",1 P: "Translation", "Vector", "", "A",0,0,0 P: "Rotation", "Vector", "", "A",0,0,0 P: "Scaling", "Vector", "", "A",1,1,1 P: "TextureRotationPivot", "Vector3D", "Vector", "",0,0,0 P: "TextureScalingPivot", "Vector3D", "Vector", "",0,0,0 P: "CurrentTextureBlendMode", "enum", "", "",1 P: "UVSet", "KString", "", "", "default" P: "UseMaterial", "bool", "", "",0 P: "UseMipMap", "bool", "", "",0 } } } ObjectType: "Video" { Count: 15 PropertyTemplate: "FbxVideo" { Properties70: { P: "ImageSequence", "bool", "", "",0 P: "ImageSequenceOffset", "int", "Integer", "",0 P: "FrameRate", "double", "Number", "",0 P: "LastFrame", "int", "Integer", "",0 P: "Width", "int", "Integer", "",0 P: "Height", "int", "Integer", "",0 P: "Path", "KString", "XRefUrl", "", "" P: "StartFrame", "int", "Integer", "",0 P: "StopFrame", "int", "Integer", "",0 P: "PlaySpeed", "double", "Number", "",0 P: "Offset", "KTime", "Time", "",0 P: "InterlaceMode", "enum", "", "",0 P: "FreeRunning", "bool", "", "",0 P: "Loop", "bool", "", "",0 P: "AccessMode", "enum", "", "",0 } } } ObjectType: "Deformer" { Count: 59 } ObjectType: "Pose" { Count: 1 } ObjectType: "AnimationStack" { Count: 1 PropertyTemplate: "FbxAnimStack" { Properties70: { P: "Description", "KString", "", "", "" P: "LocalStart", "KTime", "Time", "",0 P: "LocalStop", "KTime", "Time", "",0 P: "ReferenceStart", "KTime", "Time", "",0 P: "ReferenceStop", "KTime", "Time", "",0 } } } ObjectType: "AnimationLayer" { Count: 1 PropertyTemplate: "FbxAnimLayer" { Properties70: { P: "Weight", "Number", "", "A",100 P: "Mute", "bool", "", "",0 P: "Solo", "bool", "", "",0 P: "Lock", "bool", "", "",0 P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 P: "BlendMode", "enum", "", "",0 P: "RotationAccumulationMode", "enum", "", "",0 P: "ScaleAccumulationMode", "enum", "", "",0 P: "BlendModeBypass", "ULongLong", "", "",0 } } } ObjectType: "AnimationCurveNode" { Count: 270 PropertyTemplate: "FbxAnimCurveNode" { Properties70: { P: "d", "Compound", "", "" } } } ObjectType: "AnimationCurve" { Count: 222 } ObjectType: "Material" { Count: 5 PropertyTemplate: "FbxSurfacePhong" { Properties70: { P: "ShadingModel", "KString", "", "", "Phong" P: "MultiLayer", "bool", "", "",0 P: "EmissiveColor", "Color", "", "A",0,0,0 P: "EmissiveFactor", "Number", "", "A",1 P: "AmbientColor", "Color", "", "A",0.2,0.2,0.2 P: "AmbientFactor", "Number", "", "A",1 P: "DiffuseColor", "Color", "", "A",0.8,0.8,0.8 P: "DiffuseFactor", "Number", "", "A",1 P: "Bump", "Vector3D", "Vector", "",0,0,0 P: "NormalMap", "Vector3D", "Vector", "",0,0,0 P: "BumpFactor", "double", "Number", "",1 P: "TransparentColor", "Color", "", "A",0,0,0 P: "TransparencyFactor", "Number", "", "A",0 P: "DisplacementColor", "ColorRGB", "Color", "",0,0,0 P: "DisplacementFactor", "double", "Number", "",1 P: "VectorDisplacementColor", "ColorRGB", "Color", "",0,0,0 P: "VectorDisplacementFactor", "double", "Number", "",1 P: "SpecularColor", "Color", "", "A",0.2,0.2,0.2 P: "SpecularFactor", "Number", "", "A",1 P: "ShininessExponent", "Number", "", "A",20 P: "ReflectionColor", "Color", "", "A",0,0,0 P: "ReflectionFactor", "Number", "", "A",1 } } } } ; Object properties ;------------------------------------------------------------------ Objects: { NodeAttribute: 125164624, "NodeAttribute::", "CameraSwitcher" { Properties70: { P: "Camera Index", "Integer", "", "A+",100 } Version: 101 Name: "Model::Camera Switcher" CameraId: 100 CameraName: 100 CameraIndexName: } NodeAttribute: 125067472, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125067824, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125064304, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125064656, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125290432, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125290784, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125288320, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125292192, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125285856, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125289728, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125286560, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125287968, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125286208, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125288672, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125291136, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125291488, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125284448, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125291840, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125284800, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125285152, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125285504, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125286912, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125289024, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125287264, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125287616, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125289376, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125290080, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125986480, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125984368, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125987888, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125988592, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125984016, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125982256, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125984720, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125986832, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125985776, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125988944, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125982608, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125981552, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125986128, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125989296, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125982960, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125988240, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125983312, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125983664, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125985072, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125987184, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125981904, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125985424, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 125987536, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126063936, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126064992, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126066048, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126071328, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126070976, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126069920, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126067104, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } NodeAttribute: 126065344, "NodeAttribute::", "LimbNode" { TypeFlags: "Skeleton" } Geometry: 125738640, "Geometry::", "Mesh" { Vertices: *34299 { a: 0.623793363571167,65.1128845214844,5.13387632369995,0.0422774255275726,64.9956970214844,5.01735305786133,-0.0264466553926468,64.9082183837891,5.00032997131348,-0.179756164550781,64.7790222167969,4.91852188110352,0.325537592172623,65.1139144897461,5.11669683456421,0.466457337141037,65.1115264892578,5.12619018554688,-0.251792371273041,64.6404418945313,4.83475875854492,1.17611312866211,64.9081497192383,4.99786615371704,1.229975938797,64.8112030029297,4.97873592376709,1.35875833034515,64.6602325439453,4.89207983016968,0.917911291122437,65.0681762695313,5.1065149307251,0.781586170196533,65.1051177978516,5.03205871582031,1.09732794761658,65.0128784179688,5.03322553634644,0.137362271547318,65.0869979858398,5.04972410202026,0.0620876252651215,64.8320541381836,4.96379709243774,0.140958309173584,64.8800735473633,4.98378229141235,-0.0571245849132538,64.7189102172852,4.92748022079468,0.228947132825851,64.8898010253906,5.00581216812134,0.316976398229599,64.8996047973633,5.02985382080078,0.452559441328049,64.906867980957,5.01395797729492,0.600856900215149,64.8984298706055,5.04465341567993,1.12346565723419,64.7505950927734,4.94624662399292,1.05264699459076,64.8100967407227,4.96849727630615,0.966790914535522,64.8332214355469,4.99361562728882,0.880976319313049,64.8564453125,5.02073812484741,0.747775435447693,64.8827056884766,5.01342105865479,0.0452732741832733,64.6292190551758,4.89672803878784,0.122229993343353,64.6522216796875,4.91772842407227,0.209659367799759,64.6546325683594,4.94005537033081,0.297129482030869,64.6571273803711,4.9643931388855,0.432055622339249,64.6558151245117,4.94884538650513,0.58029317855835,64.6465911865234,4.97957277297974,1.10663449764252,64.5475311279297,4.87918663024902,1.03390467166901,64.5820541381836,4.9024510383606,1.40576934814453,64.512451171875,4.80627107620239,0.947489738464355,64.5978851318359,4.92786550521851,0.861116051673889,64.6138000488281,4.9552845954895,0.727327466011047,64.6323776245117,4.94827938079834,1.01195073127747,64.3154525756836,4.82282686233521,1.45188724994659,64.3472137451172,4.66289949417114, 0.925535917282104,64.3312759399414,4.84824132919312,0.839162230491638,64.3471908569336,4.87565994262695,0.705373644828796,64.3657684326172,4.86865520477295,-0.177379310131073,64.5866241455078,4.86361455917358,0.0233194231987,64.3626098632813,4.81710386276245,0.100276112556458,64.385612487793,4.83810424804688,-0.327593684196472,64.4846115112305,4.69348287582397,0.187705457210541,64.3880233764648,4.86043071746826,0.275175601243973,64.3905181884766,4.88476848602295,0.410101801156998,64.3892059326172,4.86922121047974,0.558339357376099,64.3799819946289,4.89994859695435,1.08468067646027,64.2809219360352,4.79956245422363,1.06065464019775,70.8534545898438,4.76268863677979,1.13732481002808,72.418815612793,2.19126605987549,1.13400912284851,72.1023101806641,3.42027258872986,1.12417089939117,71.8792266845703,3.85004806518555,0.62932276725769,65.1465225219727,5.30447387695313,0.625903844833374,65.0976638793945,5.32506656646729,0.615944027900696,64.9603424072266,5.36244630813599,0.610984563827515,64.8877182006836,5.40017414093018,0.630598306655884,65.1751098632813,5.25026416778564,0.629361748695374,65.1725463867188,5.18983459472656,0.512664914131165,63.6718902587891,5.14163732528687,0.529050230979919,63.8910675048828,5.11033630371094,0.541939496994019,64.0722885131836,5.04615640640259,0.43946561217308,62.9340286254883,4.19746780395508,0.485344499349594,63.3730735778809,4.89445734024048,0.462659686803818,63.1349334716797,4.64441919326782,0.555222749710083,64.2537155151367,5.00397300720215,0.880172610282898,68.3598251342773,5.46416473388672,0.858006715774536,68.0974426269531,5.35318899154663,0.849440932273865,67.9892425537109,5.34090089797974,0.904710054397583,68.6925506591797,5.39708185195923,0.709403038024902,66.0338897705078,5.97735166549683,0.705547690391541,65.9931945800781,5.93586921691895,0.743143796920776,66.4381942749023,6.1241774559021,0.753129124641418,66.5676574707031,6.12357091903687,0.760891556739807,66.6766815185547,6.08543300628662,0.733507633209229,66.3163452148438,6.11094665527344,0.689875245094299,65.8638381958008,5.60512256622314, 0.624589085578918,65.1533660888672,4.99830102920532,0.62416410446167,65.1353530883789,5.05449390411377,0.624347448348999,65.1218795776367,5.12571716308594,0.638351678848267,65.2610092163086,5.3154878616333,0.634988903999329,65.2251205444336,5.28104448318481,0.631260514259338,65.1875839233398,5.23275852203369,0.798808693885803,67.2536087036133,5.69974708557129,0.791501402854919,67.1474075317383,5.75169134140015,0.781278014183044,66.9964904785156,5.83483648300171,0.590098738670349,64.6425552368164,5.28635549545288,0.601859569549561,64.7733993530273,5.38283586502075,0.571767449378967,64.4464263916016,5.10084295272827,0.664491891860962,65.6135482788086,5.25263929367065,0.646058797836304,65.3668518066406,5.2884316444397,0.308831185102463,61.5862121582031,2.65170550346375,0.278255134820938,61.2063217163086,2.57932591438293,0.24938228726387,60.845588684082,2.51997470855713,0.433875113725662,62.9745635986328,3.69008111953735,0.444906324148178,63.2859725952148,2.93291902542114,0.433557480573654,63.1402702331543,2.927166223526,0.810639500617981,67.4434204101563,5.53539562225342,0.770475149154663,66.8228073120117,5.98658132553101,0.680776953697205,65.8014297485352,5.35610294342041,0.67123281955719,65.692626953125,5.28961133956909,1.0142970085144,70.1763305664063,5.10739469528198,0.984624624252319,69.7768020629883,5.1758246421814,0.445801049470901,63.2715072631836,3.04997110366821,0.438935846090317,63.0870819091797,3.47903776168823,0.373842626810074,62.3733596801758,2.89807319641113,0.341937512159348,61.9855003356934,2.78416061401367,0.400814205408096,62.7189445495605,2.91482043266296,1.0299117565155,70.3926239013672,5.04423379898071,0.634009838104248,65.2811813354492,4.97222805023193,0.627241492271423,65.1924057006836,4.97727298736572,0.44109907746315,63.1557693481445,3.29633045196533,0.626932263374329,65.1415252685547,5.18783950805664,0.71958339214325,66.147705078125,6.05837154388428,0.449921995401382,63.0109786987305,4.46015787124634,0.432886034250259,62.927562713623,3.8436872959137,0.433378845453262,62.9117012023926,3.9436240196228, 0.837226748466492,67.8408203125,5.29701995849609,0.823479652404785,67.6511611938477,5.34922075271606,0.174876749515533,59.8354759216309,2.7228786945343,0.192694664001465,60.1533355712891,2.33161687850952,0.155011057853699,59.5214004516602,2.97793006896973,1.0879967212677,71.2529602050781,4.55878782272339,1.11250460147858,71.6562576293945,4.17292976379395,0.887781143188477,68.4619064331055,5.44826936721802,-2.06441426277161,63.4675140380859,-2.31350040435791,-1.87283957004547,63.8040542602539,-2.42601108551025,-2.28081321716309,63.8607978820801,-1.77618479728699,-2.41751766204834,63.5461616516113,-1.80403280258179,-1.77159559726715,64.1679763793945,-2.40934991836548,-2.17487287521362,64.1741485595703,-1.71712112426758,-2.34561896324158,64.0813293457031,-1.03868758678436,-2.43121266365051,63.8074989318848,-1.12634778022766,-2.62995195388794,63.5505790710449,-1.26813459396362,-2.32942581176758,63.1775054931641,-2.33953905105591,-2.68021106719971,63.3241882324219,-1.86289167404175,-2.83212876319885,63.293758392334,-1.41155290603638,0.339464277029037,63.2583236694336,-3.07789540290833,-0.0916713774204254,63.7588081359863,-2.953280210495,-0.233077645301819,63.389591217041,-2.97743105888367,-0.396398603916168,63.0210418701172,-2.96684408187866,0.161560475826263,62.8935432434082,-3.11426734924316,-1.12091016769409,63.6399192810059,-2.79150557518005,-1.32885909080505,63.2648010253906,-2.76139807701111,-0.939272999763489,64.0175476074219,-2.7674343585968,0.308333724737167,62.861701965332,-3.10737586021423,-2.79351949691772,60.0759315490723,2.50330710411072,-3.11513829231262,60.3012847900391,2.13080883026123,-1.4380030632019,66.2845840454102,-1.5249457359314,-1.68420386314392,65.8793869018555,-1.51027750968933,-1.19783592224121,65.8847274780273,-1.72575259208679,-0.887153267860413,66.2650299072266,-1.72689175605774,-1.93221962451935,65.4429626464844,-1.45040309429169,-1.56653869152069,65.4700698852539,-1.8891019821167,-0.951906085014343,65.4582290649414,-2.19403076171875,-0.684996604919434,65.8686676025391,-2.06346368789673, -0.501625418663025,66.2598571777344,-1.95176911354065,-0.157869458198547,65.8251113891602,-2.2592875957489,0.00298556685447693,66.1865081787109,-2.01925182342529,-0.445116281509399,65.395263671875,-2.4208869934082,0.129518032073975,65.4026107788086,-2.51539325714111,0.24567648768425,65.8147354125977,-2.35661506652832,0.578288197517395,66.160285949707,-2.21924948692322,-0.0176074653863907,64.1389007568359,-2.8841404914856,0.430291742086411,64.3759689331055,-2.81420874595642,0.00262081623077393,64.4665832519531,-2.74427199363709,-2.74265122413635,63.011302947998,-0.449708819389343,-2.96583390235901,62.7592010498047,-0.600131273269653,-2.93298935890198,63.1129875183105,-0.97790539264679,-2.72992539405823,63.3584899902344,-0.826003909111023,-2.22467613220215,63.7582168579102,-0.313466429710388,-2.49392008781433,63.3240051269531,-0.347863137722015,-2.49500870704651,63.6343879699707,-0.709853410720825,-2.28075981140137,63.9004173278809,-0.64413845539093,-2.03079032897949,66.0994262695313,-0.543434143066406,-2.02758860588074,65.6578598022461,-0.326893508434296,-1.99442374706268,65.7801361083984,-0.957743167877197,-1.86024069786072,66.2031021118164,-1.13348805904388,-2.09660172462463,65.1525650024414,-0.313202559947968,-2.14117383956909,65.3427810668945,-0.786990880966187,-1.98699486255646,66.6393585205078,-0.585755109786987,-1.73072242736816,66.7498626708984,-1.14894211292267,-1.34470677375793,66.7577743530273,-1.53486847877502,-1.89628708362579,69.1311111450195,2.62288928031921,0.461941629648209,71.0155410766602,4.6341404914856,0.769903659820557,70.9342880249023,4.7560338973999,0.393971890211105,71.3228454589844,4.3484320640564,0.694467186927795,71.2877655029297,4.4684100151062,-0.172988802194595,71.1251373291016,4.25246858596802,0.152568727731705,71.0860900878906,4.45920085906982,-0.184596970677376,71.4623413085938,3.89338612556458,0.116147547960281,71.3699722290039,4.17397785186768,0.357630580663681,71.639892578125,3.95606780052185,0.0574007332324982,71.5874862670898,3.90052580833435,-1.18433821201324,71.1008758544922,3.03325295448303, -1.36386454105377,70.8319702148438,2.79870414733887,-1.13077282905579,70.9053573608398,3.3064124584198,-1.276251912117,70.6632461547852,3.12109637260437,-1.31896269321442,70.2930374145508,3.04443264007568,-1.53664886951447,70.4180374145508,2.49737644195557,-0.924969553947449,71.0770645141602,3.52221941947937,-0.963448882102966,71.315803527832,3.27536654472351,-0.7299964427948,71.4047164916992,3.49164271354675,-0.738705515861511,71.1481018066406,3.73645663261414,-1.66465246677399,69.2676544189453,3.08997631072998,0.684095621109009,71.6607284545898,4.06998348236084,-2.09345149993896,68.400390625,1.93266224861145,-2.09846615791321,69.1359786987305,1.85471093654633,-1.77208375930786,68.6125183105469,2.84838652610779,-0.425840139389038,67.4173126220703,-2.12641859054565,-0.444946348667145,66.9872665405273,-2.04204487800598,0.0742237567901611,66.9431304931641,-2.1808226108551,0.0994564592838287,67.3768844604492,-2.27369236946106,-0.465237021446228,66.660774230957,-1.98393750190735,0.0518084764480591,66.6103744506836,-2.13401126861572,0.606598854064941,66.5368499755859,-2.26371574401855,0.63420832157135,66.8952255249023,-2.26730966567993,0.665441274642944,67.3235931396484,-2.37448167800903,-2.18526387214661,68.4904861450195,1.25674867630005,-2.20559358596802,69.1680679321289,1.06190967559814,-1.86733984947205,70.4976425170898,0.793606281280518,-1.86910903453827,70.4748077392578,0.210348963737488,-1.65718531608582,71.1225891113281,0.216397732496262,-1.72112834453583,71.1484146118164,0.786884486675262,-1.71093416213989,70.4660339355469,-0.419810354709625,-1.55366683006287,71.0983810424805,-0.377163052558899,-1.2832944393158,71.517448425293,-0.310984015464783,-1.39519059658051,71.5979537963867,0.232911288738251,-1.44035971164703,71.6525344848633,0.801234483718872,-1.27187788486481,71.34326171875,2.61364054679871,-1.01177322864532,71.6174545288086,2.77098083496094,-1.38939499855042,71.5504455566406,1.75797700881958,-1.08889937400818,71.8652496337891,1.81313228607178,-0.74492084980011,72.0827941894531,1.89287924766541,-0.679477095603943,71.8006057739258,3.0528781414032, -0.384253442287445,71.6459732055664,3.53229069709778,-0.736573576927185,71.5655136108398,3.30104160308838,-1.20245289802551,71.2317047119141,2.86649751663208,-0.984832644462585,71.4752960205078,3.08777546882629,-1.61843776702881,71.0413589477539,1.70116806030273,-1.44768965244293,70.9303665161133,2.50166463851929,-1.33164775371552,71.0731735229492,2.69956064224243,-1.78161239624023,70.4285507202148,1.67380654811859,-1.65697824954987,69.7183303833008,2.4452691078186,-1.93330693244934,69.7481460571289,1.73944473266602,-2.04953861236572,69.7643280029297,0.870465576648712,-2.0847156047821,69.6122741699219,0.240052491426468,-2.21328973770142,68.8860549926758,0.352373659610748,-2.15788102149963,69.0321273803711,-0.0473507642745972,-2.01036024093628,68.7924041748047,-0.596657037734985,-1.86665296554565,69.6412582397461,-0.480478763580322,-1.08253812789917,70.3630447387695,-1.48609256744385,-1.4549126625061,70.4271240234375,-1.00956308841705,-1.58159184455872,69.6048049926758,-1.11043727397919,-1.19795942306519,69.5328140258789,-1.60922169685364,-1.65997362136841,68.7545547485352,-1.16319763660431,-1.27194666862488,68.6893005371094,-1.65528035163879,0.884846210479736,70.1233215332031,-2.18640089035034,0.329216808080673,70.1774215698242,-2.13138198852539,0.246300905942917,69.3600082397461,-2.32711124420166,0.818426251411438,69.3075408935547,-2.38610339164734,-0.190193891525269,70.240478515625,-1.9975426197052,-0.287689328193665,69.4182357788086,-2.17903733253479,-0.364626199007034,68.5993804931641,-2.25770878791809,0.175294786691666,68.5530624389648,-2.41484355926514,0.754991292953491,68.5060806274414,-2.47641658782959,0.411148875951767,70.8600692749023,-1.84431052207947,-0.0863446593284607,70.9077682495117,-1.72282290458679,0.94322395324707,70.8149337768555,-1.89682793617249,0.993964195251465,71.3831176757813,-1.49712753295898,0.487515836954117,71.4137268066406,-1.4516818523407,0.0114119648933411,71.4324493408203,-1.35220336914063,0.171863883733749,72.4325866699219,0.866378843784332,0.166664987802505,72.3487548828125,0.250142991542816, 0.631345391273499,72.4095993041992,0.257073789834976,0.644669651985168,72.5073013305664,0.888128995895386,0.144611001014709,72.1218948364258,-0.340507626533508,0.603707551956177,72.1698837280273,-0.353997588157654,1.07387113571167,72.1656646728516,-0.363423585891724,1.10328590869904,72.4085540771484,0.256878972053528,1.12456631660461,72.5422897338867,0.894255757331848,-0.0688050091266632,71.7613525390625,3.57035827636719,-0.198761284351349,71.9391479492188,3.1220076084137,0.246166497468948,72.0193099975586,3.20735216140747,0.300596982240677,71.8274002075195,3.6315336227417,0.618768572807312,72.3814544677734,2.14557886123657,0.189862847328186,72.3270111083984,2.08805894851685,0.656815767288208,72.0691986083984,3.30047488212585,-1.24922847747803,67.0721435546875,-1.47265577316284,-1.64732575416565,67.085205078125,-1.07984530925751,-1.28425788879395,67.4800109863281,-1.55364918708801,-1.65446174144745,67.5020599365234,-1.08178448677063,-2.00189471244812,67.5220642089844,-0.539918541908264,-2.03291440010071,67.0123901367188,-0.627920508384705,-0.739609897136688,72.1798858642578,0.821248114109039,-1.10824263095856,71.9677429199219,0.809981882572174,-1.07681393623352,71.8874206542969,0.241177350282669,-0.721254944801331,72.0790863037109,0.241950035095215,-1.02308547496796,71.7721328735352,-0.268278181552887,-0.707126379013062,71.9153366088867,-0.297060012817383,0.666726231575012,71.8662490844727,3.73314380645752,-1.42754173278809,69.7128295898438,2.99285793304443,-0.794471621513367,71.4553451538086,-1.0209869146347,-1.09145736694336,71.4641647338867,-0.734061598777771,-1.28578495979309,71.0498123168945,-0.884373784065247,-0.933363318443298,71.0004043579102,-1.28397178649902,-0.954343557357788,71.6858749389648,-0.602074861526489,-0.709899842739105,71.7383422851563,-0.715290188789368,0.0906289517879486,71.8268127441406,-0.883029103279114,0.553733825683594,71.8441314697266,-0.939245700836182,1.03747177124023,71.8286056518555,-0.967041611671448,-0.291723728179932,72.2477798461914,2.00242471694946,-0.301306486129761,72.3543243408203,0.842659592628479, -0.295482009649277,72.2357177734375,0.245020747184753,-0.305113077163696,72.0344848632813,-0.321331322193146,-0.346078991889954,71.7884368896484,-0.808658123016357,-0.421383619308472,71.4455490112305,-1.21783924102783,-0.657468199729919,70.3004379272461,-1.796630859375,-0.534033060073853,70.9538116455078,-1.54974794387817,-0.76512598991394,69.4727096557617,-1.95073318481445,-0.843601584434509,68.6411819458008,-2.01231694221497,-0.889499425888062,67.033317565918,-1.82536506652832,-0.884638786315918,67.4514007568359,-1.89685273170471,-0.879774689674377,66.7174377441406,-1.74827265739441,-0.40679395198822,67.9422988891602,-2.22397255897522,0.129094123840332,67.9017868041992,-2.3778989315033,0.705568194389343,67.8573837280273,-2.43779754638672,-1.29681801795959,68.0120544433594,-1.62619566917419,-0.879484057426453,67.9764556884766,-1.98163914680481,-1.66664028167725,68.0569229125977,-1.13294267654419,-1.94688200950623,68.1262588500977,-0.687186002731323,-2.22190642356873,68.6718826293945,0.0814464390277863,-2.18926191329956,68.394660949707,-0.173482000827789,-2.06173467636108,66.306396484375,0.270789951086044,-2.03981709480286,65.7306137084961,0.327027827501297,-2.06686520576477,67.1133804321289,0.350221276283264,-2.01718997955322,66.6979598999023,0.292773723602295,-0.620941758155823,62.5681838989258,-3.13921141624451,-1.52735507488251,62.8993644714355,-2.7649040222168,-0.0263519883155823,62.3843193054199,-3.27164506912231,0.266734391450882,62.367244720459,-3.30643272399902,-1.37798225879669,68.0458755493164,4.30455589294434,-1.23890924453735,67.8901596069336,4.39161729812622,-1.43552124500275,68.0907287597656,4.22251605987549,-1.28076350688934,67.986457824707,4.39524173736572,0.377546519041061,66.1876831054688,5.38781976699829,0.33715084195137,66.2498168945313,5.33403825759888,0.493069380521774,66.3186111450195,5.56546497344971,0.470149666070938,66.2436141967773,5.58433151245117,0.451400071382523,66.16796875,5.62085103988647,0.535398364067078,66.2377853393555,5.81744813919067,0.593458414077759,66.2331314086914,5.81274890899658, 0.445247083902359,66.1955871582031,5.84110355377197,0.493781477212906,66.1784286499023,5.84145402908325,0.0803782045841217,66.1922836303711,5.48261594772339,0.106357663869858,66.206787109375,5.45738172531128,0.0774464905261993,66.1107559204102,5.32893705368042,0.0359638035297394,66.0874252319336,5.3862099647522,0.274233907461166,66.2866439819336,5.69237518310547,0.244374066591263,66.2979049682617,5.6972279548645,0.32149413228035,66.1605453491211,5.30414915084839,0.156754016876221,66.2658386230469,5.50283670425415,0.133003234863281,66.2512588500977,5.53825330734253,0.545724391937256,66.2574234008789,5.68059349060059,0.555025815963745,66.2231369018555,5.74878978729248,0.565698027610779,66.312385559082,5.67399978637695,0.387897282838821,66.275505065918,5.78750658035278,0.0725316107273102,68.0971984863281,4.81859064102173,0.186211168766022,67.9832305908203,4.79445362091064,0.0166653990745544,68.0633850097656,4.81086206436157,0.267844706773758,67.927001953125,4.79169082641602,0.178097784519196,67.8924331665039,4.82363080978394,0.105673998594284,67.9410552978516,4.81362056732178,-0.0145852118730545,68.1976623535156,4.87628984451294,-0.0746597349643707,68.1509475708008,4.83993434906006,-0.173541575670242,68.2407302856445,4.87500667572021,-0.127273947000504,68.3139801025391,4.9223108291626,-0.300742149353027,68.2938079833984,4.91189670562744,-0.443478852510452,68.3190078735352,4.9248104095459,-0.432409286499023,68.3772811889648,4.93697929382324,-0.277704924345016,68.3658905029297,4.93379592895508,0.210827171802521,67.8577880859375,4.80922031402588,0.16913914680481,67.867546081543,4.71750736236572,0.158061116933823,67.8893356323242,4.74556255340576,0.203786790370941,67.8361282348633,4.79896926879883,-1.1378835439682,67.9149475097656,4.43347692489624,0.0872756242752075,67.9351577758789,4.71599531173706,-0.00252395868301392,68.0402450561523,4.70042610168457,-0.0927540212869644,68.1412048339844,4.73561239242554,-0.0440879017114639,68.0379867553711,4.56870937347412,-1.09579980373383,67.8964080810547,4.44191598892212,-0.501146733760834,67.7124328613281,4.86643886566162, -0.306639730930328,67.7238540649414,4.85340309143066,-0.131456553936005,67.8459854125977,4.80462980270386,-0.219726994633675,67.845085144043,4.84498119354248,-0.0507929772138596,67.7854232788086,4.78806924819946,-0.183810830116272,67.7487487792969,4.83533430099487,-0.294530749320984,67.8366775512695,4.8951997756958,-0.000747025012969971,67.6982879638672,4.80181217193604,0.0821308493614197,67.8313140869141,4.79887533187866,0.170370429754257,67.7679824829102,4.79952669143677,0.257696539163589,67.78662109375,4.7972469329834,0.139520168304443,67.8359069824219,4.80803346633911,0.313444048166275,67.7976684570313,4.79915237426758,-0.940548300743103,67.803108215332,4.6640248298645,-1.05381369590759,67.7698516845703,4.51773548126221,-0.00845268368721008,67.8782958984375,4.77604341506958,0.0435402989387512,67.8875503540039,4.78089952468872,0.089642345905304,67.8812484741211,4.75279998779297,-0.296882510185242,67.5243301391602,4.80978488922119,-0.518619477748871,67.4850387573242,4.78477621078491,-0.707731544971466,67.7342910766602,4.82214641571045,-1.04207479953766,67.6393814086914,4.56365013122559,-0.153744623064995,67.6036682128906,4.81377696990967,0.103864789009094,67.4183578491211,4.80526781082153,-0.0238534063100815,67.3293762207031,4.79401826858521,-0.214757233858109,67.2739562988281,4.78187656402588,-0.880071043968201,67.9217834472656,4.74224853515625,-0.680235683917999,67.8459320068359,4.87497568130493,-0.492535322904587,67.8295288085938,4.89924955368042,0.221289843320847,67.7520599365234,4.79656267166138,0.282921820878983,67.7299575805664,4.8082160949707,-1.01416158676147,67.8835830688477,4.59305000305176,-1.03361797332764,67.9288711547852,4.50020408630371,-0.98690927028656,67.9790649414063,4.58982563018799,-0.954205393791199,67.9623489379883,4.6548285484314,-0.367387235164642,64.9672012329102,4.65457773208618,-0.376518785953522,64.9429931640625,4.59082984924316,-0.364164084196091,64.9272155761719,4.62442445755005,-0.387651979923248,64.9273834228516,4.52254867553711,-0.372781217098236,64.9137496948242,4.57795190811157, -0.325812309980392,64.9677581787109,4.66768264770508,-0.2934929728508,65.0070037841797,4.77406311035156,0.0896200835704803,65.1711578369141,5.16201257705688,0.0752068161964417,65.1293258666992,5.18869733810425,0.306521564722061,65.1608276367188,5.26091337203979,0.303164333105087,65.1222839355469,5.29255628585815,-0.403771758079529,64.9382934570313,4.73152828216553,-0.426909625530243,64.9066925048828,4.77113580703735,-0.482801020145416,64.9239120483398,4.67571449279785,-0.315706521272659,64.9495010375977,4.91079902648926,-0.352145075798035,64.8978958129883,4.89442443847656,-0.430014610290527,64.8176879882813,4.84076070785522,-0.612703680992126,64.8882446289063,4.68541955947876,0.140789210796356,65.1614990234375,5.06094169616699,0.117839068174362,65.1946105957031,5.10699844360352,0.0427363812923431,65.1752243041992,5.04936122894287,0.0711185038089752,65.1374664306641,5.01369571685791,-0.0689185112714767,65.1361846923828,5.03231048583984,-0.0299543887376785,65.1474304199219,4.98878335952759,-0.0116341114044189,65.0947113037109,4.97372961044312,-0.0863916128873825,65.1224822998047,4.91171884536743,-0.127361476421356,65.0179977416992,5.08845901489258,-0.254649817943573,65.0161056518555,4.95347929000854,-0.0846455544233322,65.1145553588867,5.05634784698486,0.277950078248978,64.9772415161133,5.3225359916687,0.228391140699387,64.8919067382813,5.34354543685913,0.0256715714931488,65.0050430297852,5.23427677154541,0.318023234605789,65.1712036132813,5.14985322952271,0.311097830533981,65.187873840332,5.2046685218811,0.455786734819412,65.1104125976563,5.31833410263062,0.458984225988388,65.1497344970703,5.28762722015381,-0.198425605893135,65.0952301025391,4.92032051086426,-0.166533440351486,65.0903778076172,4.88122797012329,0.442113250494003,64.9704818725586,5.35210371017456,0.426556438207626,64.891227722168,5.38417100906372,0.460857778787613,65.1714782714844,5.23062992095947,0.463440865278244,65.1675262451172,5.17260313034058,-0.0820308774709702,65.0459442138672,4.89202976226807,-0.136149242520332,65.0765151977539,4.83672428131104, -0.138348579406738,64.9979934692383,4.81805753707886,0.0212104022502899,63.1957321166992,4.60476016998291,0.014591783285141,63.4088325500488,4.82474660873413,0.0333658158779144,63.6850280761719,5.05261611938477,0.247710734605789,63.6851692199707,5.11107349395752,0.271986216306686,63.8935699462891,5.08359003067017,0.0659575760364532,63.8828468322754,5.03491592407227,0.112435579299927,64.0491027832031,4.98340797424316,0.306000739336014,64.0654220581055,5.02008056640625,-0.0462554842233658,64.1683197021484,4.87989664077759,0.19654643535614,64.2306365966797,4.95268440246582,0.0293864905834198,63.0530662536621,4.33955764770508,0.224212020635605,62.9917640686035,4.25159072875977,-0.765367031097412,63.3923377990723,3.83371591567993,-0.651477217674255,63.2802734375,3.78344511985779,-0.495274901390076,63.1926078796387,3.74888515472412,-0.151985064148903,63.9648361206055,4.85739088058472,-0.913377046585083,63.5252494812012,3.9269597530365,-1.02425754070282,63.6739387512207,3.92811274528503,-0.826150894165039,63.6318016052246,4.27187967300415,-0.730976521968842,63.445384979248,4.18613243103027,-0.600782513618469,63.3088493347168,4.06153249740601,0.226796835660934,63.3959312438965,4.87644529342651,0.219289809465408,63.1641044616699,4.63506507873535,-0.241868630051613,63.5709114074707,4.81857585906982,-0.229720890522003,63.7968864440918,4.90630340576172,0.355975478887558,64.2465591430664,4.98120021820068,0.790874361991882,68.2815475463867,5.40977621078491,0.601127862930298,68.0573806762695,5.25249767303467,0.596381306648254,68.1045684814453,5.25249910354614,0.711288332939148,68.1173934936523,5.32674694061279,0.709404587745667,68.0025939941406,5.31436395645142,0.730903506278992,68.6883010864258,5.42940425872803,0.527809977531433,68.0526580810547,5.16016721725464,0.48125085234642,68.0487747192383,5.05965137481689,0.497682601213455,68.1295394897461,5.09887170791626,0.553024291992188,66.0458145141602,5.9037504196167,0.543367385864258,66.0735397338867,5.94976902008057,0.608531594276428,66.0497436523438,5.96904802322388,0.615544080734253,66.0097961425781,5.92822217941284, 0.311814934015274,66.6080169677734,5.82792091369629,0.303657621145248,66.5355834960938,5.84635210037231,0.303891092538834,66.4423294067383,5.8451623916626,0.534069180488586,65.900146484375,5.59989976882935,0.445289999246597,66.0324401855469,5.63547468185425,0.19013500213623,65.9237213134766,5.27445840835571,0.248411864042282,66.0125198364258,5.31187200546265,0.355401009321213,66.0270233154297,5.45005798339844,0.36849918961525,65.9021224975586,5.36541795730591,0.468226164579391,66.4609451293945,6.06767511367798,0.398465186357498,66.4604797363281,5.99520444869995,0.403927952051163,66.5763702392578,6.01220273971558,0.481254249811172,66.5852890014648,6.07205533981323,0.423365563154221,66.67236328125,5.97987413406372,0.501110553741455,66.6854095458984,6.03886842727661,-0.108507618308067,66.4573135375977,5.36215257644653,-0.00540593266487122,66.5347900390625,5.43890762329102,0.0397471785545349,66.5337600708008,5.20846939086914,0.106978118419647,66.6758041381836,5.37109851837158,-0.0288374274969101,66.4802627563477,5.17677354812622,-0.13063670694828,66.3856201171875,5.25176382064819,-0.131238698959351,66.3111114501953,5.16853904724121,-0.0889036506414413,66.4072723388672,5.15994358062744,-0.0695089995861053,66.2565612792969,5.09908008575439,-0.0347457826137543,66.4038543701172,5.13775730133057,-0.111543387174606,66.0502624511719,5.29291200637817,-0.0859223157167435,66.0216064453125,5.22113990783691,-0.140995234251022,66.1301803588867,5.16212177276611,-0.176501885056496,66.1772994995117,5.22717523574829,-0.0662545412778854,66.0122299194336,5.10803079605103,-0.0630548298358917,66.1422271728516,5.06855535507202,-0.111702397465706,66.0850524902344,5.345139503479,-0.0245998352766037,66.0480041503906,5.36004734039307,-0.0117437839508057,66.0069274902344,5.31585597991943,-0.0957345366477966,66.1489410400391,5.40095901489258,-0.0271564722061157,66.0927505493164,5.40800809860229,0.048024594783783,66.0424957275391,5.34305477142334,0.0678019225597382,66.0012054443359,5.29897117614746,-0.0270158648490906,66.2692489624023,5.50255537033081, 0.0342166125774384,66.2017593383789,5.49587297439575,0.136669307947159,66.0409698486328,5.27193641662598,0.589970827102661,66.4517822265625,6.10982465744019,0.602482318878174,66.5799026489258,6.1108193397522,0.617652654647827,66.6855926513672,6.07464265823364,0.471429198980331,66.3372344970703,6.05087423324585,0.586342811584473,66.3283615112305,6.09568166732788,-0.170357286930084,66.2484970092773,5.29768991470337,-0.142111584544182,66.2994613647461,5.37951040267944,0.0933360159397125,66.2600784301758,5.55985736846924,0.0511030554771423,66.3218994140625,5.56224727630615,0.482154756784439,66.1159133911133,5.88775968551636,0.0899962484836578,66.5365219116211,5.51782989501953,0.0510095059871674,66.4304580688477,5.54727172851563,-0.040442943572998,66.3938293457031,5.48892450332642,0.604585409164429,65.8763122558594,5.60510492324829,0.315579742193222,66.3502731323242,5.83340358734131,0.344145625829697,66.2855911254883,5.81716537475586,0.427275151014328,66.0847091674805,5.59603023529053,0.216442435979843,66.3406295776367,5.69978904724121,0.212495654821396,66.3996963500977,5.69720506668091,-1.5725245475769,68.1800994873047,3.91071939468384,-1.50637865066528,68.1347732543945,4.07610607147217,0.656096935272217,68.4091491699219,5.44423151016235,0.637661695480347,68.2986373901367,5.434485912323,0.499500125646591,68.3267974853516,5.51218271255493,0.512825489044189,68.4433288574219,5.55519723892212,0.508580207824707,65.8326110839844,5.39012861251831,0.402165621519089,66.3396530151367,5.9828839302063,-1.81354486942291,64.5644378662109,2.97059988975525,-1.93136477470398,64.6418838500977,2.75137257575989,-1.95731270313263,64.8901138305664,2.83552479743958,-1.84961891174316,64.7845611572266,3.09832501411438,-2.01690983772278,64.6968231201172,2.52522659301758,-2.04829406738281,64.9380722045898,2.62030720710754,-2.02419638633728,65.1593399047852,2.70687079429626,-1.95266103744507,65.0892105102539,2.95585203170776,-1.81269764900208,65.0109481811523,3.18123745918274,-1.02156329154968,67.5455551147461,4.57637357711792,-0.764275670051575,67.4825820922852,4.73440980911255, -0.896280884742737,67.224853515625,4.66984891891479,-1.14410126209259,67.3386840820313,4.51541137695313,-0.55177116394043,67.267936706543,4.77729320526123,-1.1068480014801,67.7565994262695,4.48404884338379,-1.05273461341858,67.6993713378906,4.53898859024048,-0.111181184649467,65.4405899047852,5.10773086547852,-0.0561369508504868,65.3391342163086,5.14034557342529,0.125633955001831,65.4179916381836,5.23909091949463,0.113990187644959,65.3392562866211,5.24592781066895,0.111880213022232,65.2643585205078,5.20026922225952,-0.0477806478738785,65.2671127319336,5.10454702377319,0.174226105213165,65.2245025634766,4.97604894638062,0.157422542572021,65.2043838500977,5.00838422775269,0.0547326505184174,65.2380447387695,4.87922716140747,0.0697361826896667,65.1666259765625,4.91322135925293,0.0213787853717804,65.1525268554688,4.98430442810059,0.138899087905884,65.1861419677734,5.06382036209106,0.328762203454971,65.3688430786133,5.31849336624146,0.315944105386734,65.3194351196289,5.2904839515686,0.303560465574265,65.2702255249023,5.22354459762573,0.390564888715744,65.2960891723633,5.28231906890869,0.320711404085159,65.20703125,5.02729845046997,0.312472552061081,65.1896743774414,5.06831502914429,0.299265295267105,65.1769027709961,5.12665605545044,-0.210386320948601,65.280632019043,5.01384258270264,-0.183789789676666,65.1958465576172,4.99877452850342,0.523830056190491,65.1652374267578,5.00263690948486,0.525573372840881,65.1469955444336,5.05865240097046,0.525611877441406,65.1278686523438,5.12980985641479,-0.0135367214679718,65.2102432250977,4.81425046920776,-0.119428813457489,65.1035995483398,4.7038140296936,-0.0122914016246796,65.141471862793,4.82254409790039,-0.136682495474815,65.0725326538086,4.72591781616211,-0.164990901947021,65.0656280517578,4.78104448318481,-0.0685207843780518,65.1274337768555,4.88056612014771,0.534092545509338,65.2353057861328,5.28844594955444,0.529576301574707,65.1784286499023,5.25725317001343,0.536379456520081,65.2778472900391,5.3163046836853,-0.781278729438782,64.9023666381836,4.58818006515503,-0.683728218078613,65.082633972168,4.68330574035645, -0.550516605377197,65.0189590454102,4.68632316589355,-0.566328406333923,65.2899017333984,4.78666210174561,-0.518296241760254,65.1661224365234,4.75740098953247,-0.464072287082672,65.0068054199219,4.69205713272095,0.294271200895309,65.2052536010742,5.18574190139771,0.371871501207352,65.1948089599609,5.19161796569824,0.375409930944443,65.1688232421875,5.13242673873901,0.379584163427353,65.2474670410156,5.23729133605957,-0.277781784534454,65.0891571044922,4.89954948425293,-0.320617944002151,65.1713562011719,4.89474630355835,0.379270881414413,65.1757278442383,5.07146787643433,0.381683140993118,65.1935119628906,5.02361011505127,0.0217822194099426,67.9152297973633,4.67433166503906,-0.0366468280553818,67.9465713500977,4.53814792633057,-0.209568098187447,67.9163360595703,4.72592782974243,-0.185183897614479,67.8871536254883,4.76847219467163,-0.11489549279213,67.9430084228516,4.64322090148926,-0.07878278195858,67.9076614379883,4.70778560638428,-0.486432611942291,67.8622817993164,4.85848760604858,-0.479252845048904,67.8834075927734,4.80050659179688,-0.31166011095047,67.8833236694336,4.79053115844727,-0.302128821611404,67.8629302978516,4.8461799621582,-0.0699242502450943,67.9439544677734,4.58363962173462,-0.0321404486894608,67.9271011352539,4.68475675582886,-0.84839916229248,67.9442901611328,4.72416257858276,-0.817674279212952,67.9537811279297,4.68964529037476,-0.642622470855713,67.8963775634766,4.78840732574463,-0.66112619638443,67.8770141601563,4.84315013885498,-0.976640462875366,67.9922256469727,4.56396627426147,-0.922485947608948,67.9768447875977,4.64150190353394,-0.944518089294434,67.9910888671875,4.53432559967041,-0.890174746513367,67.9810943603516,4.61109304428101,-2.61214447021484,68.4235382080078,0.626309394836426,-2.61460733413696,68.2048645019531,0.565218269824982,-2.60449290275574,67.9082107543945,0.529542624950409,-2.41717648506165,67.9139709472656,0.834124386310577,-2.41839075088501,68.1474990844727,0.901697635650635,-2.40960621833801,68.3388442993164,0.98421710729599,-2.03543877601624,67.8588485717773,2.5323314666748, -1.99847674369812,68.0756683349609,2.65659737586975,-2.12697720527649,67.8789138793945,2.17562532424927,-2.1407904624939,68.0801773071289,2.15506458282471,-2.15716886520386,68.2771759033203,1.95663928985596,-1.9116598367691,68.2668304443359,2.82119727134705,-0.399414658546448,66.313850402832,4.90973949432373,-0.46922767162323,66.1981811523438,4.83644199371338,-0.541793346405029,66.0904388427734,4.79319524765015,-0.690685033798218,66.273811340332,4.80406522750854,-0.668297290802002,66.404541015625,4.84742307662964,-0.557000637054443,66.4967193603516,4.87973260879517,-1.25525510311127,64.6040115356445,3.93202066421509,-1.28677356243134,64.9492340087891,4.04414558410645,-0.452210426330566,66.988639831543,4.77221202850342,-0.407773971557617,66.8490829467773,4.83213043212891,-0.669095873832703,66.7760162353516,4.68708944320679,-0.744894623756409,66.9653625488281,4.75742101669312,-0.116209656000137,66.1586456298828,5.00018882751465,-0.166509792208672,66.2036666870117,4.95744848251343,-0.0504381358623505,66.3249435424805,5.04221248626709,-0.155897364020348,66.0759048461914,4.94396877288818,-0.219209671020508,66.0934219360352,4.89901351928711,-0.269795179367065,66.1559677124023,4.75622940063477,-0.206839874386787,66.2887268066406,4.83997058868408,-0.0960048139095306,66.4099960327148,4.98053693771362,-0.189794600009918,66.5924453735352,4.98823595046997,-0.292384445667267,66.4564895629883,4.94714450836182,-1.09283316135406,66.6220779418945,4.31481504440308,-1.11839640140533,66.4353790283203,4.1522331237793,-1.34252917766571,66.4763870239258,3.97234845161438,-1.34927034378052,66.656120300293,4.13074445724487,-1.31199634075165,65.4082412719727,3.95422267913818,-1.28974056243896,65.5870590209961,4.02625274658203,-1.25334906578064,65.7742919921875,4.101806640625,-1.00320780277252,66.3806610107422,4.33500385284424,-0.939937949180603,66.6072235107422,4.44677925109863,-1.02820551395416,65.3601608276367,4.4644570350647,-0.967733502388,65.5154876708984,4.53393268585205,-1.18165278434753,65.3615188598633,4.31486988067627,-1.10994076728821,65.5396423339844,4.38164329528809, -1.05721974372864,65.7129745483398,4.48102855682373,-0.89256489276886,65.6604461669922,4.60488033294678,-0.806287407875061,65.7862396240234,4.6733775138855,-0.966511964797974,65.8407745361328,4.56615924835205,-0.0335729718208313,66.6911773681641,5.04780769348145,0.0759113132953644,66.7483749389648,5.1440544128418,0.0238386392593384,66.4921112060547,5.08664512634277,-0.0408133268356323,66.8121566772461,5.04976224899292,0.081950843334198,66.860221862793,5.14150333404541,-0.171659141778946,66.7482986450195,4.98865556716919,-0.170493364334106,66.8839721679688,4.97727346420288,-0.0232710093259811,66.9545211791992,5.03047323226929,0.135811060667038,67.0183563232422,5.14650106430054,-0.0391866117715836,66.4145812988281,5.1172890663147,-1.37148487567902,65.4394378662109,3.73456621170044,-1.35712015628815,65.6117324829102,3.79800224304199,-1.32312762737274,65.7973327636719,3.86948752403259,0.0183311402797699,67.0959701538086,4.96626901626587,0.142358392477036,67.2082595825195,5.07538461685181,-0.140984281897545,67.0089492797852,4.90126895904541,0.185467749834061,67.3298034667969,4.99041795730591,-0.746942579746246,65.6734161376953,4.62390184402466,-0.359695255756378,66.0493392944336,4.73637294769287,-0.428380846977234,65.9834823608398,4.74483966827393,-1.16383278369904,64.5658493041992,4.12072086334229,-1.15625607967377,64.9629516601563,4.25756406784058,-1.20151329040527,65.9678268432617,4.16606521606445,-0.694171845912933,66.6185607910156,4.68004035949707,-0.820064544677734,66.4109878540039,4.66304492950439,-0.887491345405579,66.7378692626953,4.55708074569702,-0.371411561965942,66.5277709960938,4.95121288299561,-0.405768245458603,66.7212524414063,4.91648244857788,-0.558909773826599,66.6490173339844,4.81410980224609,-0.917269349098206,66.2333068847656,4.6307692527771,-1.25942957401276,66.0038757324219,3.94744896888733,-1.39873218536377,65.0957946777344,3.61290645599365,-1.39295423030853,64.7964248657227,3.55453634262085,-1.35852468013763,64.7153930664063,3.68139219284058,-1.3772064447403,65.0264739990234,3.76843571662903,-2.07197546958923,64.6383666992188,0.931430459022522, -2.08498668670654,65.0384979248047,0.906979918479919,-2.06042790412903,65.3805236816406,0.877483546733856,-2.05097699165344,65.1512985229492,1.2759302854538,-2.06015038490295,64.8550186157227,1.30809426307678,-2.02402448654175,64.4673690795898,1.37764811515808,-0.317405670881271,64.1438674926758,4.73388910293579,-0.199191853404045,64.3656463623047,4.92192602157593,0.0584587752819061,64.4125900268555,5.01743650436401,0.323728114366531,65.7889404296875,5.27015924453735,0.27680429816246,65.713134765625,5.23587036132813,0.100094795227051,65.8025588989258,5.14045476913452,0.16403341293335,65.8722991943359,5.20320177078247,0.672230005264282,68.5570983886719,5.43079471588135,-1.4498655796051,65.2241744995117,3.42291474342346,-1.47264587879181,64.8126754760742,3.36299705505371,-1.70768797397614,65.3423156738281,3.26869869232178,0.445904701948166,66.7886428833008,5.8851146697998,0.457289844751358,66.9578247070313,5.61104488372803,0.546737313270569,66.986572265625,5.79516410827637,0.524746656417847,66.8179473876953,5.94628763198853,0.32802876830101,66.7540588378906,5.70246267318726,0.559999704360962,67.1466827392578,5.70663118362427,0.664358973503113,67.1507263183594,5.74432706832886,0.65339183807373,67.0009765625,5.82805252075195,0.566108703613281,67.267822265625,5.64640045166016,0.671553015708923,67.2614898681641,5.68974256515503,-0.050879642367363,68.516845703125,5.41659116744995,0.0356159210205078,68.4701309204102,5.42639017105103,-0.0643284767866135,68.6498718261719,5.38900327682495,0.0299199819564819,68.5855102539063,5.41929721832275,-0.1483254134655,70.409065246582,4.80879259109497,-0.281782209873199,70.0384140014648,4.80547046661377,-0.274167895317078,70.3873748779297,4.66984558105469,-0.255148202180862,69.788200378418,4.88298845291138,-0.396128743886948,69.6997528076172,4.846275806427,-0.454765975475311,70.0203094482422,4.78745889663696,-0.442509591579437,70.3879318237305,4.53379154205322,-0.835795640945435,63.4386901855469,3.51720428466797,-0.953054666519165,63.552604675293,3.55810213088989,-0.67583042383194,63.3441200256348,3.49282073974609, 0.406194537878037,64.6415786743164,5.26836204528809,0.415552586317062,64.7716598510742,5.37029790878296,0.213078200817108,64.6159896850586,5.18863344192505,0.240144103765488,64.7654647827148,5.33822298049927,-2.11256265640259,66.0385513305664,0.873668432235718,-1.94346523284912,64.8523025512695,0.400435388088226,-2.05047631263733,65.3201141357422,0.366720616817474,-1.57476997375488,64.3679351806641,1.78875243663788,-1.07562649250031,63.6925163269043,3.55823540687561,-1.17126393318176,63.8498039245605,3.55429005622864,-0.390977293252945,70.8356475830078,4.3555736541748,-0.744130969047546,70.8145904541016,4.00300979614258,-2.03400230407715,65.742919921875,1.28652930259705,-1.8791264295578,66.3266220092773,2.87983322143555,-2.03246521949768,66.411979675293,2.61124539375305,-1.82173979282379,66.2470703125,3.17122912406921,-1.86850535869598,66.0474166870117,3.08610796928406,-1.98421514034271,66.1042938232422,2.81830239295959,-2.08096957206726,66.1626129150391,2.53493142127991,-1.84771418571472,67.1879348754883,2.95442819595337,-1.80135297775269,67.0301895141602,3.23959875106812,-1.76515674591064,66.785041809082,3.07056713104248,-1.87070560455322,66.8938522338867,2.78359508514404,-1.70357024669647,66.9201354980469,3.48094010353088,-1.69575119018555,66.6819305419922,3.3398289680481,-0.139177143573761,68.8369216918945,5.33272504806519,-0.0133581459522247,68.7448959350586,5.38222455978394,-0.509039878845215,63.362361907959,3.27057361602783,-0.262469559907913,63.2758140563965,3.27482867240906,-0.699285864830017,63.4942016601563,3.1197497844696,-0.683854222297668,63.4490356445313,3.25789666175842,-0.0951341688632965,65.6181488037109,5.05984973907471,-0.0582968145608902,65.8303070068359,5.02478265762329,0.124396234750748,65.5714721679688,5.22218894958496,-0.760870814323425,69.1461181640625,4.90825128555298,-0.785614848136902,69.2844390869141,4.80389881134033,-0.508977234363556,69.2027816772461,5.00977611541748,-1.54019856452942,63.1496925354004,1.83554863929749,-1.44083988666534,62.6188354492188,1.92539572715759,-1.33062088489532,62.0820846557617,2.01348876953125, -1.80600261688232,62.2738304138184,1.6899915933609,-1.88436985015869,62.8275032043457,1.60266172885895,-1.94922614097595,63.3644943237305,1.52231955528259,-0.0513340383768082,65.9179153442383,5.04434442520142,-0.19064649939537,65.8681106567383,4.94524908065796,-0.183843195438385,65.9644622802734,4.94034814834595,-0.808202028274536,68.6531295776367,5.0890908241272,-0.595443367958069,68.5742263793945,5.154221534729,-0.396508872509003,68.4809265136719,5.19436264038086,-1.70305275917053,64.4079360961914,2.08354473114014,-1.74098002910614,64.472038269043,1.84414160251617,-1.74135506153107,64.3974456787109,2.35125732421875,-1.59747552871704,64.2888259887695,2.34509325027466,-1.48897337913513,68.5760726928711,4.09610462188721,-1.40559566020966,68.6938400268555,4.24785947799683,-1.45287621021271,68.5857849121094,4.25322437286377,-1.34823858737946,68.7632751464844,4.3747091293335,-1.37033426761627,68.5849533081055,4.42276239395142,-2.09475660324097,65.2050933837891,2.49065113067627,-2.16352653503418,65.2407379150391,2.2720046043396,-2.13584589958191,65.6896286010742,2.43884897232056,-2.04241967201233,65.6157836914063,2.68238019943237,-1.98007988929749,65.5083999633789,2.85055589675903,-1.95554280281067,65.7304077148438,2.97573184967041,-2.04487562179565,65.7516098022461,2.72064995765686,-2.03574252128601,65.9118804931641,2.75876307487488,-1.91338920593262,65.8771209716797,3.0145218372345,-2.13501143455505,65.9259414672852,2.47491431236267,-1.25092124938965,64.1620712280273,3.57095456123352,-1.56101667881012,64.4123153686523,3.2118501663208,-1.47741937637329,64.2375869750977,3.20888209342957,-1.61829733848572,64.3333435058594,3.0396671295166,-1.41418766975403,64.1123580932617,3.13771891593933,-1.62954115867615,64.3046188354492,2.78890919685364,-0.808276295661926,69.8435897827148,4.60829305648804,-0.824947237968445,70.0887680053711,4.56946516036987,-0.813838243484497,70.4376373291016,4.31216812133789,-0.600288033485413,64.1812286376953,4.45011425018311,-0.505940973758698,63.940616607666,4.6615161895752,-0.783298969268799,64.0240707397461,4.29003620147705, -0.921410918235779,63.9113693237305,4.18760967254639,-0.941422820091248,64.3103332519531,4.20115423202515,-0.759661674499512,64.3785247802734,4.38072729110718,0.147928476333618,66.7239532470703,5.34744739532471,0.174289703369141,66.8014602661133,5.31767988204956,0.670596718788147,70.221435546875,5.0761866569519,0.670153975486755,69.8623809814453,5.15234136581421,0.674422025680542,69.5756072998047,5.2115650177002,0.440570801496506,69.6572647094727,5.20759725570679,0.42556032538414,69.9269866943359,5.12856292724609,0.430853515863419,70.2512741088867,5.03137493133545,-0.90849757194519,62.6430702209473,2.36282968521118,-0.947414755821228,63.0990028381348,2.35613656044006,-0.329749047756195,62.8400077819824,2.7103910446167,-0.315626204013824,62.4643325805664,2.68951559066772,0.263793796300888,64.4568786621094,5.05091381072998,0.403211146593094,64.4612045288086,5.07767200469971,-1.39945721626282,64.1531295776367,2.29242897033691,-0.207591384649277,70.7967300415039,4.52281379699707,0.0430980920791626,70.7885131835938,4.67768573760986,-0.101195529103279,64.6073379516602,5.09178304672241,-0.0652517527341843,64.7951049804688,5.23603582382202,-1.10083091259003,63.8160858154297,3.92026376724243,-1.13330459594727,63.9689064025879,3.88364458084106,-0.88843297958374,63.7760963439941,4.24809598922729,0.0729179680347443,65.9188919067383,5.20343208312988,0.0801597237586975,65.8802871704102,5.14752531051636,0.0183428525924683,65.8659210205078,5.08235120773315,0.0127083361148834,65.9394607543945,5.16200304031372,-1.93992030620575,67.2547225952148,2.58971214294434,-1.95857298374176,67.5483322143555,2.71937894821167,-1.93557977676392,67.5112228393555,3.04516434669495,-2.03416466712952,67.3294143676758,2.27365493774414,-2.02730870246887,67.6041946411133,2.41377878189087,-1.9924556016922,67.8220825195313,2.85915374755859,-1.96827554702759,67.7863311767578,3.1956627368927,-0.350411772727966,65.6730117797852,4.88298177719116,-0.356381922960281,65.5427932739258,4.86791706085205,-0.243584454059601,65.6547775268555,4.94647455215454,-0.254453182220459,65.4844512939453,4.99992895126343, -0.363168507814407,65.4404754638672,4.91674470901489,-0.272338837385178,63.1153030395508,3.72361707687378,-0.0289112478494644,63.0413627624512,3.70450663566589,-0.670747756958008,61.767951965332,2.3687744140625,-0.804776668548584,62.2013702392578,2.36921405792236,-0.259763211011887,62.0463714599609,2.62303972244263,-0.177231281995773,61.6228904724121,2.54752326011658,-1.9927704334259,66.9824752807617,2.5082311630249,-2.05750274658203,67.0365829467773,2.24574327468872,-0.17700007557869,69.483772277832,5.03800296783447,-0.298267304897308,69.5041885375977,4.97279596328735,-0.928951978683472,64.6156616210938,4.38640880584717,-0.891277432441711,64.9078826904297,4.47258186340332,-0.779518723487854,68.4324493408203,4.99159145355225,-1.02257990837097,68.3955917358398,4.80787563323975,0.34947481751442,68.0630874633789,4.85545587539673,0.423168927431107,68.0462036132813,4.90282201766968,0.342937141656876,70.5613250732422,4.89104413986206,0.147651463747025,70.5392761230469,4.86807298660278,-1.2157906293869,63.8193016052246,3.07285928726196,-1.10651934146881,63.7029571533203,3.07594728469849,-1.2298492193222,63.8758430480957,2.68809795379639,-1.44278490543365,64.0540924072266,2.70295476913452,-1.05901253223419,69.2478637695313,4.56301927566528,0.474990516901016,67.7075805664063,5.08277940750122,0.364992707967758,67.7215957641602,4.92603778839111,-1.09955096244812,70.7294235229492,3.56823682785034,-0.959166765213013,70.7751235961914,3.73905348777771,-0.93732762336731,70.4110260009766,4.03635215759277,-1.04437601566315,70.397331237793,3.90019869804382,-1.09157884120941,70.2968444824219,3.71844005584717,-0.315446317195892,63.432933807373,2.81047368049622,-0.31975319981575,63.3010559082031,2.76526927947998,-0.650783777236938,63.4768257141113,2.6024923324585,-0.637265503406525,63.5470428466797,2.6762809753418,-0.927510976791382,63.6720161437988,2.41135168075562,-0.933242917060852,63.7730255126953,2.48379826545715,-2.02392649650574,66.1573867797852,1.58263778686523,-2.07431602478027,66.1202239990234,1.66325640678406,-2.05163955688477,65.893913269043,1.64001560211182, -1.99583303928375,65.9085083007813,1.55370533466339,-2.12772655487061,66.1783981323242,1.76517724990845,-2.0209858417511,65.6275253295898,1.60138118267059,-1.98261296749115,65.6147766113281,1.51146507263184,-1.5341135263443,64.1635208129883,2.74776482582092,-1.312180519104,63.9692573547363,3.08655452728271,-1.15575242042542,69.7564849853516,4.01516532897949,-1.1415137052536,69.8439407348633,4.19292688369751,-1.14436554908752,69.5396728515625,4.26946496963501,-1.18450546264648,69.4577713012695,4.09269237518311,-1.07104623317719,69.8846588134766,4.34977245330811,-1.0616762638092,69.5953521728516,4.4445161819458,-1.24094617366791,69.2243041992188,4.1032886505127,-2.03621077537537,66.3975296020508,0.914780795574188,-2.04223775863647,66.7845764160156,0.975087583065033,-2.09031414985657,66.5847930908203,1.37293410301209,-2.02425837516785,66.1338958740234,1.3306941986084,-0.78000795841217,66.1221771240234,4.73541688919067,-0.623443305492401,65.9943084716797,4.75739336013794,-1.57149791717529,68.5909423828125,3.5501401424408,-1.6832492351532,68.5774765014648,3.2073016166687,-1.4975346326828,68.9557037353516,3.64432191848755,0.340592056512833,68.1518402099609,5.09618616104126,0.235334187746048,68.158561706543,5.09759378433228,0.41490575671196,68.1203460693359,4.91284275054932,0.264055222272873,68.1476898193359,4.90246868133545,0.128037631511688,68.2148361206055,4.91389608383179,0.0906608700752258,68.243896484375,5.10406923294067,0.314071863889694,67.8479843139648,4.79379749298096,0.562735438346863,67.48779296875,5.44729280471802,0.538991689682007,65.3839263916016,5.28918361663818,0.577238440513611,65.6157073974609,5.26028776168823,-1.06519198417664,64.5729827880859,4.26825094223022,-0.474201023578644,65.2277221679688,4.79333591461182,-0.499527037143707,65.3600311279297,4.80795907974243,0.416984349489212,65.6513366699219,5.29502534866333,0.347670465707779,65.46923828125,5.29197025299072,-1.80286026000977,64.601318359375,1.68279564380646,-1.7073689699173,64.5272598266602,1.6213926076889,-1.80837976932526,64.6741714477539,1.50764513015747, -1.8718740940094,64.7724533081055,1.58767604827881,-0.815224170684814,63.6127471923828,2.81109523773193,-2.26979184150696,68.4025268554688,1.87078094482422,-2.2208297252655,68.2557067871094,1.97225749492645,-2.37703514099121,68.6007461547852,1.66589772701263,-2.26262497901917,68.4405975341797,1.81961536407471,-1.03683507442474,64.9424285888672,4.38036823272705,-0.540904700756073,61.3368988037109,2.35497760772705,-0.41677650809288,60.9281539916992,2.3291540145874,-0.325470447540283,63.4140090942383,2.96501040458679,-0.594686388969421,63.5077323913574,2.89057016372681,-0.981541395187378,63.6064987182617,3.27650785446167,-1.10026836395264,63.7169075012207,3.26976680755615,0.526109218597412,68.14697265625,5.26719665527344,0.568230986595154,68.1727981567383,5.35188436508179,0.386983662843704,68.1658706665039,5.28233337402344,0.448243707418442,68.1876449584961,5.35850811004639,-0.532591819763184,65.5348815917969,4.79324674606323,-0.523976564407349,65.6869888305664,4.78611993789673,0.00548842549324036,60.8566741943359,2.45223522186279,-0.0831018388271332,61.2306098937988,2.49952602386475,0.0188752114772797,68.3327026367188,5.30487537384033,-0.0704790055751801,68.363037109375,5.28680944442749,-2.15657114982605,67.4172897338867,2.03161334991455,-2.16407775878906,67.4641799926758,1.9778904914856,-2.15711736679077,67.6560134887695,2.05931353569031,-2.13285875320435,67.6450576782227,2.12807035446167,-2.17298078536987,67.6296005249023,1.98325932025909,-2.14432954788208,67.4562301635742,1.92806100845337,-2.16967344284058,67.8814086914063,2.09683799743652,-2.21320962905884,67.8581390380859,2.04574823379517,-2.18964791297913,68.0818328857422,2.05832767486572,-1.10682272911072,68.3520812988281,4.70458507537842,-1.15601515769959,68.3128433227539,4.61932134628296,0.207888931035995,68.7812576293945,5.28072357177734,0.263615399599075,68.5072784423828,5.41212558746338,0.464819699525833,68.8843994140625,5.4324893951416,0.398692756891251,68.7625350952148,5.45540761947632,-1.25822556018829,70.451057434082,3.21246004104614,0.339573413133621,67.0314331054688,5.40791082382202, 0.345676153898239,67.1595001220703,5.31332588195801,0.257675498723984,66.9607238769531,5.37208271026611,0.27671816945076,67.0952606201172,5.29533100128174,-0.346919864416122,64.5955657958984,4.886794090271,-0.269924342632294,64.8229598999023,5.07238912582397,0.471486002206802,69.3630905151367,5.26161623001099,-1.0702668428421,68.2463302612305,4.70731925964355,-1.12266719341278,68.2153015136719,4.63162517547607,-0.994616150856018,68.2830963134766,4.80261564254761,-1.21383774280548,70.1628952026367,3.43133807182312,-1.29199075698853,70.0936126708984,3.19760370254517,-1.54211235046387,66.7447891235352,3.85741925239563,-1.62783098220825,66.8216247558594,3.68867087364197,-1.64418721199036,67.0815963745117,3.87778115272522,-1.56714427471161,66.9721908569336,4.04104709625244,-1.7402982711792,67.1906433105469,3.70685386657715,-1.69936990737915,67.5307006835938,4.00219488143921,-1.67731153964996,67.329833984375,4.1088399887085,-1.59077250957489,67.2291412353516,4.29393005371094,-1.95055508613586,65.1543350219727,1.46215105056763,-1.56346881389618,69.2975921630859,3.26897525787354,-1.4090815782547,69.4477081298828,3.40556597709656,-1.74627792835236,64.440071105957,1.54838252067566,-0.734020113945007,68.327018737793,4.86467933654785,-0.588288068771362,68.3583221435547,4.91467189788818,-0.612378001213074,68.3541793823242,5.02480363845825,-0.440865159034729,68.3609390258789,5.06021976470947,-0.777303099632263,68.3321228027344,4.97459363937378,-0.592226624488831,68.4283676147461,5.0551962852478,-0.553448915481567,64.6106491088867,4.63129711151123,-2.06321501731873,64.8149185180664,2.1156005859375,-1.96014213562012,64.6624221801758,2.01800656318665,-2.00579595565796,64.7556381225586,1.88240575790405,-2.09146332740784,64.8734741210938,1.97533786296844,-2.03775382041931,64.8883743286133,1.79650235176086,-2.08510828018188,64.9430160522461,1.88319373130798,-0.757157921791077,64.6142654418945,4.48394203186035,-0.614307522773743,68.9632034301758,5.11051034927368,-0.794221878051758,68.9102096557617,5.09240007400513,-0.80116593837738,69.030632019043,5.000319480896, -0.522611021995544,68.8117065429688,5.20736932754517,-0.591552793979645,68.7441177368164,5.20382118225098,0.17551189661026,69.9622344970703,5.07451820373535,0.165461927652359,70.2903289794922,4.94730806350708,0.194429904222488,69.6949996948242,5.19657707214355,-2.11258745193481,66.1687545776367,1.8726019859314,-2.16341876983643,65.9415130615234,1.83260381221771,-2.11326837539673,66.3250961303711,1.86445963382721,-2.12052845954895,66.2355880737305,2.01137447357178,-2.17510890960693,65.9578628540039,1.98067176342011,-2.17870330810547,65.7067718505859,1.92334616184235,-2.15139293670654,65.689697265625,1.78150403499603,-0.486087083816528,64.3405914306641,4.7109055519104,-2.1408896446228,66.2031402587891,2.26762771606445,-2.19596338272095,65.9495010375977,2.19994449615479,-2.20460176467896,65.7087783813477,2.1474175453186,-1.99888551235199,63.9207420349121,1.44241523742676,-1.61844539642334,63.6698875427246,1.73408043384552,-2.11890387535095,63.9976463317871,-0.342489182949066,-2.13630628585815,64.3602828979492,-0.346500098705292,-2.03976392745972,63.9575653076172,0.41189306974411,-2.06836891174316,63.4655876159668,0.399017214775085,-2.16437578201294,62.9744300842285,0.377947419881821,-2.14121961593628,65.2657470703125,1.87458062171936,-2.0932993888855,65.2478637695313,1.74254786968231,-1.51281440258026,64.6265411376953,3.29674959182739,-2.05109286308289,64.7572555541992,2.30762910842896,-1.933061003685,64.5889587402344,2.20823669433594,-1.90012407302856,64.5380249023438,2.43933463096619,-1.31578600406647,66.8648910522461,4.27143526077271,-1.30149531364441,67.0518417358398,4.42273664474487,-1.10101783275604,68.8673095703125,4.8091459274292,-1.07546055316925,69.011474609375,4.71746587753296,-1.42160642147064,65.5252685546875,3.52144980430603,-1.40683698654175,65.6822128295898,3.57834124565125,-1.58224856853485,65.6108703613281,3.29807591438293,-1.57773494720459,65.7677688598633,3.37011218070984,-1.54902422428131,65.9346160888672,3.42232990264893,-1.39247977733612,65.8589630126953,3.64873790740967,0.682592511177063,67.4627838134766,5.50372314453125, -0.0231511294841766,67.9797210693359,4.53457832336426,0.0689001083374023,67.9140777587891,4.6100025177002,-1.12562048435211,70.0753631591797,3.87472653388977,-1.07722532749176,70.1355972290039,4.04010963439941,-1.01903128623962,70.1703643798828,4.19287395477295,-2.32464599609375,68.0832672119141,2.01199150085449,-1.20537066459656,69.1091156005859,4.41851234436035,-1.26697885990143,69.1107482910156,4.23781585693359,-2.11697959899902,64.9762344360352,2.40753579139709,-2.1550624370575,65.013916015625,2.20364284515381,-1.74699115753174,64.4294586181641,2.85393071174622,-1.83707749843597,64.4808044433594,2.65622782707214,-1.74542367458344,64.3839721679688,2.58440184593201,0.461882144212723,65.7179183959961,5.31436204910278,-1.21816754341125,68.5262603759766,4.68819999694824,-1.1211758852005,68.6093826293945,4.88013124465942,-1.2851630449295,68.4350738525391,4.530442237854,0.635958552360535,66.828239440918,5.97853088378906,-1.26056778430939,68.8390579223633,4.57395887374878,-1.2935973405838,68.7086868286133,4.65042591094971,0.37334069609642,68.1957473754883,5.35311079025269,0.246664017438889,68.2045364379883,5.33756542205811,0.584861993789673,65.7197570800781,5.3216290473938,0.519932627677917,65.7092132568359,5.32898473739624,-0.447787255048752,63.2590141296387,3.48250794410706,-0.178221330046654,63.1808700561523,3.47902083396912,-1.355189204216,68.3519134521484,4.40949535369873,-0.941252827644348,67.045654296875,4.67198657989502,-1.01300930976868,66.9293823242188,4.6082558631897,0.459396570920944,65.6318435668945,5.29486227035522,0.576122164726257,65.8132858276367,5.38352203369141,-1.74535763263702,68.283805847168,3.39701509475708,-1.67534267902374,68.249870300293,3.62321925163269,-1.66290307044983,68.0045700073242,3.77771782875061,-1.77787244319916,68.0544128417969,3.52214884757996,-1.83792591094971,68.1034927368164,3.3171329498291,-2.01141786575317,62.4788932800293,1.08764457702637,-2.03550362586975,63.0831871032715,1.03389322757721,-2.08057498931885,63.6488494873047,0.996630012989044,-0.727405667304993,63.7856407165527,4.48693656921387, 0.403872281312943,65.4369735717773,5.29749917984009,0.212884962558746,66.9366912841797,5.31471633911133,-2.08154916763306,64.1719741821289,0.963233709335327,-1.63406300544739,61.1202850341797,1.91978907585144,-1.71581184864044,61.6675415039063,1.79084861278534,-1.21979427337646,61.5442085266113,2.10970258712769,-1.11507868766785,61.0497703552246,2.22066450119019,0.397110790014267,65.3379211425781,5.3165454864502,0.150394052267075,69.1584396362305,5.24437236785889,0.25466313958168,68.3417129516602,5.44970941543579,0.385993629693985,68.3356323242188,5.45527410507202,-1.99925017356873,64.411994934082,0.410330653190613,-1.75443303585052,65.9802856445313,3.32582831382751,-1.78535091876984,65.8136138916016,3.24826383590698,-1.83421552181244,65.6668930053711,3.21271967887878,-1.54078459739685,67.6767730712891,4.0923023223877,-1.53024888038635,67.7846069335938,4.08631801605225,-1.48656177520752,67.670166015625,4.18855333328247,-0.0336967706680298,68.2866058349609,5.11544227600098,-0.163565188646317,68.3031311035156,5.08582973480225,-0.0391643792390823,68.3049163818359,5.13495540618896,-1.37579870223999,67.9069976806641,4.26235771179199,-1.52683842182159,67.8808059692383,4.10175180435181,-1.481609582901,67.9332046508789,4.13464260101318,-1.81708836555481,67.308219909668,3.50301480293274,-1.89029633998871,67.4270095825195,3.34287810325623,-1.76982736587524,67.7455520629883,3.71983504295349,-1.77171719074249,67.5614318847656,3.75459861755371,-2.19584512710571,67.2965621948242,1.77712988853455,-2.24088382720947,67.2952575683594,1.7981219291687,-2.2440721988678,67.1937026977539,1.73284959793091,-2.19305682182312,67.1954498291016,1.71282660961151,-2.2493724822998,67.2783508300781,1.84175550937653,-2.2523455619812,67.1691207885742,1.77946817874908,-2.23360681533813,67.0472564697266,1.73493158817291,-2.22762441635132,67.0837478637695,1.69295918941498,-2.17817640304565,67.0792694091797,1.67337989807129,-2.20355939865112,66.9430236816406,1.71033716201782,-2.20649123191834,66.9891357421875,1.68191468715668,-2.15764904022217,66.8303604125977,1.69480717182159, -2.16480088233948,66.9624557495117,1.67032980918884,-2.06757593154907,66.5061492919922,2.32285475730896,-2.10238003730774,66.5130615234375,2.10629987716675,-2.09369444847107,66.5944900512695,1.94952178001404,-1.70596849918365,66.1777954101563,3.40870594978333,-1.55709671974182,66.1401290893555,3.50885915756226,-0.797003388404846,65.1296768188477,4.57803392410278,-0.741232514381409,65.3470916748047,4.63011360168457,-1.89674711227417,65.4108810424805,3.107266664505,-1.34887731075287,66.069221496582,3.7221884727478,-2.14270448684692,64.8188018798828,-0.334672451019287,-0.930856823921204,65.1602783203125,4.46657943725586,-0.869108200073242,65.3729095458984,4.52292776107788,-2.12190103530884,65.0732574462891,1.88043594360352,-2.15592980384827,65.0524444580078,2.02393579483032,-2.18910598754883,65.2617797851563,2.05802536010742,0.512521862983704,68.5822525024414,5.50223302841187,-1.98135113716125,65.1861190795898,1.54213905334473,-1.6288822889328,66.6003341674805,3.56421518325806,-1.55428493022919,66.532600402832,3.74061942100525,-2.1121072769165,66.5616455078125,1.80101943016052,-2.10204029083252,66.4258270263672,1.90585076808929,-2.13509225845337,66.374397277832,1.7990757226944,-2.35635566711426,67.3067321777344,0.812714219093323,-2.39229607582092,67.6440200805664,0.794500529766083,-2.57374215126038,67.5606384277344,0.517772197723389,-2.5351095199585,67.119384765625,0.561946094036102,-1.21843302249908,68.1966247558594,4.51577281951904,-1.88325524330139,67.767219543457,3.43066549301147,-1.81970810890198,67.9292221069336,3.48891401290894,-1.75683486461639,67.9004592895508,3.69498109817505,-1.8772451877594,67.9753952026367,3.26425886154175,-1.53521847724915,68.5107879638672,3.81524801254272,-1.3711564540863,68.828971862793,3.95661473274231,-1.41476547718048,68.9009323120117,3.81379532814026,-1.80806887149811,68.30419921875,3.1439528465271,-1.87774705886841,68.1662673950195,3.07762551307678,-2.6015841960907,68.5840148925781,0.712429046630859,-2.52507567405701,68.69482421875,0.882501721382141,-2.48019790649414,68.5404968261719,0.898567080497742, 0.500611424446106,68.1400527954102,5.193274974823,0.348428159952164,68.1519470214844,5.17658805847168,-2.0661473274231,65.0544357299805,1.75413143634796,-1.92961394786835,64.9724426269531,1.54710781574249,-1.90213859081268,64.9244155883789,1.46848058700562,-2.34519624710083,67.8858871459961,1.96922051906586,-2.38531565666199,68.0801696777344,1.97755885124207,-2.28863024711609,67.8838806152344,2.00988554954529,-2.44026684761047,68.2774887084961,1.92449355125427,-2.37290835380554,68.284049987793,1.94873142242432,-2.10232996940613,66.960578918457,1.67264628410339,-2.07494330406189,66.904296875,1.65739774703979,-2.05417490005493,66.9678649902344,1.66187787055969,-2.04683780670166,67.0705718994141,1.67697703838348,-2.11067008972168,66.8728408813477,1.66792440414429,-2.75847244262695,67.9617462158203,0.94255542755127,-2.73985648155212,67.7981796264648,0.92533802986145,-2.75659584999084,68.088752746582,0.982750296592712,-2.79887843132019,68.0288391113281,1.05075478553772,-2.77713751792908,67.9088439941406,0.994415462017059,-2.75649619102478,67.7685165405273,0.977071523666382,-2.35955667495728,67.7633590698242,1.34055125713348,-2.25957608222961,67.6356582641602,1.41453206539154,-2.37699103355408,67.6495971679688,1.24427485466003,-2.45081090927124,67.7506256103516,1.17347347736359,-2.36532330513,66.464485168457,1.54881620407104,-2.35082054138184,66.3426284790039,1.57185876369476,-2.27199625968933,66.5775146484375,1.62538266181946,-2.1869649887085,66.3295822143555,1.72240126132965,-2.29197859764099,66.1882400512695,1.61246955394745,-2.4648904800415,66.2750930786133,1.26518499851227,-2.49455857276917,66.4529876708984,1.30809855461121,-2.48511815071106,66.6359558105469,1.3474086523056,-2.27331113815308,67.9336547851563,1.74671864509583,-2.29868316650391,67.9050064086914,1.65444278717041,-2.34973835945129,67.957633972168,1.62568306922913,-2.36209845542908,68.0078201293945,1.64591896533966,-2.33179688453674,67.892692565918,1.55466496944427,-2.40474534034729,67.9688491821289,1.53484129905701,-2.4497275352478,68.0374603271484,1.53600335121155, -2.13426208496094,66.7055740356445,1.7371917963028,-2.18047690391541,66.6938400268555,1.68803453445435,-2.11631941795349,66.7367782592773,1.77710032463074,-2.17466807365417,66.7814331054688,1.65517473220825,-2.17853713035584,66.5098495483398,1.71980178356171,-2.24601554870605,66.6240310668945,1.63700735569,-2.23596453666687,66.7149353027344,1.61178421974182,-2.08406949043274,66.2603149414063,1.58167397975922,-2.12804293632507,66.2284851074219,1.63206398487091,-2.15880513191223,66.2021179199219,1.48221611976624,-2.20739459991455,66.1964111328125,1.55108535289764,-2.1796190738678,66.2102890014648,1.69114816188812,-2.51349091529846,68.4639205932617,1.8059241771698,-2.43427896499634,68.4770355224609,1.82119417190552,-2.59442925453186,68.6118392944336,1.63751804828644,-2.50176239013672,68.6313934326172,1.64476716518402,-2.73913168907166,68.7284088134766,1.22234892845154,-2.62747955322266,68.7517471313477,1.21627235412598,-2.47974514961243,68.7250289916992,1.15428924560547,-2.73278260231018,68.6157150268555,0.694849789142609,-2.74724912643433,68.4496536254883,0.59031093120575,-2.70658230781555,68.7177963256836,0.83696711063385,-2.81796073913574,68.6995697021484,0.851444661617279,-2.8422474861145,68.60498046875,0.71686464548111,-2.85389399528503,68.4456481933594,0.619735836982727,-2.82498502731323,67.9058685302734,0.533349275588989,-2.72819066047668,67.9063491821289,0.496379375457764,-2.7461109161377,68.2178268432617,0.52613776922226,-2.84833526611328,68.2153625488281,0.559641242027283,-2.59032201766968,66.4807510375977,0.928826689720154,-2.50743699073792,66.4137268066406,0.886127471923828,-2.57565426826477,66.6966857910156,0.700164079666138,-2.65918207168579,66.7431793212891,0.74626624584198,-2.42311024665833,66.4989776611328,0.856422662734985,-2.48622512817383,66.7392807006836,0.686086356639862,-2.63933992385864,67.0922927856445,0.552085697650909,-2.72536826133728,67.115592956543,0.598837077617645,-2.29795503616333,66.2649078369141,1.18770742416382,-2.3826699256897,66.2012023925781,1.22903323173523,-2.16459393501282,66.6759796142578,1.23249101638794, -2.24789547920227,66.8142013549805,1.06252408027649,-2.40808701515198,68.0817337036133,1.90571987628937,-2.46647810935974,68.26220703125,1.85624074935913,-2.36823225021362,67.9038314819336,1.90009796619415,-2.36028814315796,67.9237442016602,1.82882857322693,-2.3948814868927,68.0829315185547,1.82897078990936,-2.44945406913757,68.2431030273438,1.78114855289459,-2.54854297637939,68.42822265625,1.74963080883026,-2.6382532119751,68.5577239990234,1.59853911399841,-2.52954077720642,68.3862228393555,1.68799185752869,-2.62005686759949,68.4959335327148,1.55760312080383,-2.19158935546875,67.5043563842773,1.83474671840668,-2.2549786567688,67.5419082641602,1.82864689826965,-2.26400327682495,67.695068359375,1.94132459163666,-2.20915555953979,67.6728439331055,1.95828580856323,-2.30236792564392,67.5678024291992,1.79972159862518,-2.31646919250488,67.7085952758789,1.90358877182007,-2.34178495407104,67.745491027832,1.84141647815704,-2.3300633430481,67.6228179931641,1.74513912200928,-2.33315491676331,67.6771469116211,1.68879354000092,-2.34013700485229,67.7836227416992,1.77808821201324,-2.17727994918823,67.4078979492188,1.65498471260071,-2.1150004863739,67.3318939208984,1.61912786960602,-2.25076627731323,67.3621215820313,1.53202605247498,-2.26577138900757,67.4494552612305,1.69418442249298,-2.28935408592224,67.4065933227539,1.55708074569702,-2.3228223323822,67.4442901611328,1.53922665119171,-2.30612254142761,67.4830856323242,1.6766813993454,-2.34880518913269,67.5227890014648,1.49410128593445,-2.33438611030579,67.5519332885742,1.62673580646515,-2.35062432289124,67.5983047485352,1.4495689868927,-2.33806562423706,67.6189117431641,1.57298302650452,-2.07442927360535,67.3096008300781,1.71361863613129,-2.0579662322998,67.1960144042969,1.64540350437164,-2.10641956329346,67.2131118774414,1.55172228813171,-2.07167983055115,67.2885665893555,1.79033148288727,-2.05283141136169,67.1832122802734,1.72549331188202,-2.24906277656555,67.233528137207,1.46235346794128,-2.37582874298096,67.4185333251953,1.25283980369568,-2.39941954612732,67.5392837524414,1.22935318946838, -2.05542635917664,66.9686737060547,1.61104881763458,-2.07500028610229,66.8846893310547,1.63040161132813,-2.10767555236816,66.8996429443359,1.57998013496399,-2.08964848518372,66.9766006469727,1.54973709583282,-2.12712836265564,66.8336639404297,1.64053738117218,-2.16737270355225,66.848876953125,1.591912150383,-2.82919478416443,68.3537750244141,0.74912703037262,-2.82582116127014,68.1682891845703,0.711574137210846,-2.86528205871582,68.1946105957031,0.634979069232941,-2.870121717453,68.4046325683594,0.683867454528809,-2.8079206943512,67.9082412719727,0.69920939207077,-2.84394145011902,67.9072952270508,0.615303337574005,-2.7978687286377,68.5528030395508,0.910629868507385,-2.81523394584656,68.4792175292969,0.811958968639374,-2.85784006118774,68.5469284057617,0.763306260108948,-2.83717560768127,68.6300964355469,0.879186511039734,-2.68762493133545,68.2952194213867,0.798494935035706,-2.6736946105957,68.4139099121094,0.8592609167099,-2.65705442428589,68.4872665405273,0.95888340473175,-2.67805957794189,68.1334381103516,0.766467034816742,-2.65559458732605,67.9030075073242,0.76434600353241,-2.73749089241028,68.2249603271484,1.0578727722168,-2.69270253181458,68.3444595336914,1.16103792190552,-2.71204996109009,68.2930679321289,1.21945893764496,-2.77048492431641,68.175422668457,1.13487410545349,-2.63352560997009,67.5799560546875,1.02114772796631,-2.67514133453369,67.7353134155273,1.02102887630463,-2.57827067375183,67.3931198120117,1.05846285820007,-2.64737629890442,67.3829498291016,1.01509618759155,-2.7053394317627,67.5997467041016,0.976101994514465,-2.68225765228271,68.2328872680664,1.24680197238922,-2.45428347587585,67.5438613891602,1.13627517223358,-2.43049907684326,67.4107666015625,1.15062642097473,-2.47426509857178,67.6697387695313,1.13195335865021,-2.67037224769592,67.9171600341797,1.083904504776,-2.65577864646912,68.0389175415039,1.26876902580261,-2.57660245895386,67.9674682617188,1.26852560043335,-2.29113817214966,67.7997055053711,1.58391487598419,-2.31978893280029,67.7765121459961,1.46570944786072,-2.27869296073914,67.8374938964844,1.65944612026215, -2.26554083824158,67.7095642089844,1.63142323493958,-2.2527186870575,67.6555862426758,1.52753853797913,-2.26989126205444,67.8075942993164,1.70676386356354,-2.30208992958069,68.2076568603516,1.70677042007446,-2.28334522247314,68.0717086791992,1.74444186687469,-2.39567375183105,68.4204559326172,1.54522335529327,-2.3316535949707,68.3273010253906,1.6405383348465,-2.62854361534119,68.5050277709961,1.2722384929657,-2.76896858215332,68.5801391601563,1.22542345523834,-2.7824718952179,68.6579818725586,1.22165441513062,-2.6289496421814,66.6553268432617,0.996821522712708,-2.56351447105408,66.5315704345703,1.15648031234741,-2.52996206283569,66.344856262207,1.09837055206299,-2.62781405448914,66.8359298706055,1.06403136253357,-2.55787539482117,66.7241516113281,1.21213781833649,-2.69484448432922,66.8672332763672,0.824295282363892,-2.68732142448425,66.9964828491211,0.903414249420166,-2.75447058677673,67.180046081543,0.6838738322258,-2.73578643798828,67.2482757568359,0.771346628665924,-2.60194778442383,67.2986831665039,0.862867832183838,-2.57602429389954,67.0869674682617,0.987282276153564,-2.53736877441406,66.9584503173828,1.13130593299866,-2.40219926834106,66.7655639648438,1.39116287231445,-2.49304604530334,66.9413528442383,1.30590271949768,-2.31333184242249,66.832275390625,1.52665853500366,-2.34573650360107,68.098030090332,1.64575755596161,-2.55503010749817,68.0456085205078,1.40283942222595,-2.533766746521,68.2806854248047,1.38818860054016,-2.57358312606812,68.3652420043945,1.36234879493713,-2.39148902893066,68.3013381958008,1.52705693244934,-2.59726929664612,67.2168426513672,1.11286020278931,-2.60383558273315,67.1575469970703,1.05543875694275,-2.64444184303284,67.3427810668945,0.951573252677917,-2.54468846321106,67.0989074707031,1.23312520980835,-2.55772280693054,67.0329055786133,1.18720102310181,-2.47545433044434,66.8608551025391,1.26244115829468,-2.48018312454224,67.0151901245117,1.34009265899658,-2.49003434181213,67.9725036621094,1.40447103977203,-2.24871706962585,66.9028015136719,1.52435684204102,-2.17792510986328,66.9602737426758,1.51861321926117, -2.36117172241211,67.2902297973633,1.26231455802917,-2.40379786491394,67.3136672973633,1.18727135658264,-2.31025338172913,67.2599411010742,1.36735677719116,-2.31600856781006,67.3657836914063,1.38705325126648,-2.69393849372864,67.5986022949219,0.917282581329346,-2.62711954116821,67.6268463134766,0.791336178779602,-2.77453708648682,67.6083908081055,0.709925651550293,-2.80314612388611,67.5798187255859,0.621610939502716,-2.77983713150024,67.5536193847656,0.535829544067383,-2.68887400627136,67.546272277832,0.493257313966751,-2.15245199203491,67.48681640625,1.88970601558685,-2.61377906799316,68.4213485717773,1.28537845611572,-2.33221817016602,68.2851104736328,1.61027157306671,-2.52214312553406,67.2510299682617,1.14891350269318,-2.46499300003052,67.1464996337891,1.25916314125061,-2.4064736366272,67.0748901367188,1.35577189922333,-2.68517780303955,67.8506240844727,1.03942346572876,-2.09176898002625,67.2419281005859,2.0933837890625,-2.09170913696289,67.0456008911133,2.05867290496826,0.675862431526184,70.4403457641602,5.01316404342651,-2.48955917358398,67.7451782226563,1.12540864944458,-2.20359206199646,67.1085662841797,1.84291386604309,-2.19012713432312,66.9737243652344,1.79033398628235,-2.20991563796997,67.2426681518555,1.89791309833527,-2.09453439712524,66.6815643310547,1.84149312973022,-2.17911314964294,66.9004058837891,1.75177586078644,0.0687145888805389,65.3117828369141,4.87543821334839,0.18367612361908,65.2635955810547,4.96013975143433,0.192545831203461,65.3534393310547,4.95118999481201,0.0785710513591766,65.417350769043,4.88140153884888,0.336994379758835,65.3211212158203,4.9930853843689,0.327651888132095,65.2403335571289,5.00603055953979,0.534512162208557,65.2889404296875,4.97892236709595,0.526553988456726,65.2026748657227,4.98258638381958,-0.109990268945694,65.3372421264648,4.74806261062622,-0.00115635991096497,65.3187561035156,4.83178281784058,-0.054225817322731,65.5103607177734,4.83793926239014,-0.185681968927383,65.6051254272461,4.77223634719849,0.395980924367905,65.3078460693359,4.99508666992188,0.386684328317642,65.2271118164063,5.00326728820801, -0.205163270235062,64.9350357055664,4.734947681427,-0.203319564461708,65.0073699951172,4.75313425064087,-0.276345819234848,64.9634017944336,4.62664127349854,-0.323267042636871,64.8058090209961,4.59223985671997,-0.327579498291016,64.9277038574219,4.58566236495972,-0.50356388092041,65.0628128051758,4.19650650024414,-0.491817593574524,64.9390640258789,4.35416173934937,-0.443149298429489,64.9613342285156,4.3975830078125,-0.36993744969368,65.0640411376953,4.43474769592285,-0.364744365215302,64.9534912109375,4.50175857543945,-0.268373221158981,65.0690689086914,4.54617214202881,-0.576209306716919,64.7099075317383,4.22456932067871,-0.603554666042328,64.4508361816406,4.17889499664307,-0.479074120521545,64.1535491943359,4.31969261169434,-0.429672032594681,64.7676544189453,4.46571350097656,-0.998232007026672,65.2647399902344,2.62271499633789,-0.781265616416931,65.1804504394531,3.44368028640747,-0.752240419387817,65.5978240966797,3.42348694801331,-0.92962121963501,65.7276992797852,2.60776495933533,-0.58737176656723,65.4784240722656,4.08026075363159,-0.583475053310394,65.915657043457,4.0708703994751,-0.707480788230896,66.0363235473633,3.40916109085083,-0.830390572547913,66.1534271240234,2.60511755943298,-0.741786599159241,64.3012237548828,3.70394229888916,-0.827998399734497,64.4452972412109,3.46786713600159,-0.947544813156128,64.2723922729492,2.87818431854248,-0.822114109992981,65.5357513427734,4.56504726409912,-1.08950412273407,65.1832885742188,4.39228105545044,-1.21951842308044,65.1810684204102,4.22904491424561,-1.33032810688019,65.2273254394531,3.87632966041565,-1.38224756717682,65.2686386108398,3.67232608795166,-1.64987790584564,65.4768676757813,3.2867226600647,-1.43295180797577,65.376823425293,3.47241187095642,-1.85966444015503,65.5411682128906,3.15919160842896,-1.96488916873932,65.6133270263672,2.94387912750244,-0.973559021949768,68.2446670532227,4.70256948471069,-1.02049541473389,68.1897964477539,4.61681318283081,-1.06434941291809,68.1228103637695,4.53617668151855,-0.590007543563843,68.3077087402344,4.90223217010498,-0.72842800617218,68.2762680053711,4.84922885894775, -0.940981149673462,68.1581344604492,4.69737195968628,-0.995903253555298,68.117546081543,4.6331353187561,-1.03320860862732,68.069221496582,4.57753133773804,-1.09829914569855,68.0365753173828,4.47835111618042,-1.05841517448425,68.0265045166016,4.52373600006104,0.249237090349197,68.0983352661133,4.85169363021851,0.127800285816193,68.1846084594727,4.86725997924805,-2.44647169113159,66.2694778442383,1.05975723266602,-2.36160278320313,66.3522186279297,1.02327644824982,0.233039170503616,66.6890335083008,5.58757209777832,0.248356133699417,66.8787384033203,5.41538524627686,0.469486087560654,67.1167907714844,5.5086350440979,0.47046759724617,67.2418670654297,5.4121208190918,-1.22514951229095,67.2148361206055,4.48621845245361,-1.42725384235382,67.3811721801758,4.3224048614502,-1.33798241615295,67.4984664916992,4.35396575927734,-0.214410543441772,63.382080078125,4.57266569137573,-0.176733359694481,63.2210464477539,4.41520738601685,-1.18296527862549,67.8958969116211,4.41951560974121,-1.20839166641235,67.9621887207031,4.43898963928223,-0.409916251897812,68.4089508056641,5.10556697845459,-0.237362772226334,67.8769073486328,4.81267929077148,-0.255254685878754,67.897575378418,4.76290845870972,-1.02679443359375,67.9520568847656,4.46889686584473,-0.992527961730957,67.9447250366211,4.44149971008301,-1.00401294231415,67.9494171142578,4.40595436096191,-1.00196027755737,67.9380111694336,4.41646957397461,-1.04129183292389,67.9330291748047,4.43989944458008,-1.0483146905899,67.9335632324219,4.4260139465332,-1.06923139095306,67.9194717407227,4.45858764648438,-1.04573953151703,67.9483795166016,4.43263816833496,-1.0139251947403,68.0074691772461,4.50251865386963,-0.990009665489197,68.0527420043945,4.55499219894409,-0.947413086891174,68.0283889770508,4.5327730178833,-0.973318338394165,68.0027770996094,4.48081588745117,-0.956710577011108,68.104850769043,4.60656881332397,-0.907191634178162,68.1515960693359,4.66468477249146,-0.873238205909729,68.1471939086914,4.63191032409668,-0.917339205741882,68.0944900512695,4.57990694046021,-0.708987832069397,68.2673873901367,4.80131673812866, -0.689555525779724,68.2583999633789,4.75340509414673,-0.581971883773804,68.2942047119141,4.84593439102173,-0.447553277015686,68.3020629882813,4.86063146591187,-0.451622754335403,68.2851867675781,4.79645013809204,-0.573941111564636,68.2806396484375,4.78963708877563,-0.31475442647934,68.281120300293,4.83769607543945,-0.329124331474304,68.2647171020508,4.76704216003418,-0.193136766552925,68.2300796508789,4.79123258590698,-0.213612675666809,68.2171020507813,4.71035766601563,-0.112608820199966,68.1355895996094,4.6355185508728,-0.186013326048851,68.3514709472656,5.14183807373047,-0.18675434589386,68.4225311279297,5.23559284210205,-0.451187640428543,69.5371398925781,4.87085676193237,-1.18403208255768,67.5705947875977,4.4710865020752,-1.29267728328705,67.6782913208008,4.37641668319702,-1.38265776634216,67.6513671875,4.30017375946045,-1.4575617313385,67.609748840332,4.21382236480713,-1.39131927490234,67.705680847168,4.29635667800903,-1.29264390468597,67.7282791137695,4.37633895874023,-1.15236067771912,68.1383743286133,4.55469751358032,-1.13733613491058,67.862419128418,4.44054317474365,-1.11288726329803,67.8705215454102,4.4455680847168,-1.07821583747864,67.8209838867188,4.48720645904541,-1.09485197067261,67.8670425415039,4.45601940155029,-1.1000372171402,67.8218536376953,4.47205066680908,-1.22510802745819,67.8049926757813,4.39712762832642,-1.29998290538788,67.8019409179688,4.34031867980957,-0.259932279586792,65.0047607421875,4.60047054290771,-0.262750178575516,64.9955215454102,4.55957126617432,-0.244600981473923,65.0229721069336,4.71917581558228,-0.255681931972504,65.6577682495117,4.72834491729736,-0.179298251867294,65.3393096923828,4.6863489151001,-0.341047585010529,65.7184677124023,4.63478422164917,-0.267672032117844,65.3511581420898,4.59057331085205,-0.180459335446358,65.0894927978516,4.63350772857666,-0.457273423671722,65.7878799438477,4.44790649414063,-0.384857714176178,65.3761215209961,4.44260740280151,0.525668621063232,65.1329040527344,5.20273685455322,0.120540618896484,65.202507019043,5.13624382019043,-0.026151716709137,65.1853408813477,5.05632019042969, -0.124853268265724,65.1389312744141,4.94539880752563,-0.324009239673615,64.983528137207,4.84973907470703,-0.28112405538559,65.0180969238281,4.90463590621948,-0.242152556777,65.0598373413086,4.86043071746826,-0.213738337159157,65.0627899169922,4.83013391494751,-0.192905440926552,65.0304260253906,4.79355049133301,-0.191578432917595,64.9678497314453,4.7730507850647,-0.359162360429764,64.3923187255859,4.60463619232178,-0.376596063375473,64.8579635620117,4.55342674255371,-0.407346963882446,64.8546981811523,4.53383636474609,-0.5311678647995,64.8800201416016,4.31810760498047,-0.480386972427368,64.8527069091797,4.4069972038269,-0.707698166370392,64.8196716308594,3.99317455291748,-0.408344089984894,64.8723983764648,4.52740621566772,-0.209093883633614,65.0713348388672,4.83990383148193,0.216405957937241,66.4818344116211,5.68653631210327,0.236346572637558,66.556770324707,5.66543197631836,0.460717171430588,66.1719589233398,5.94584178924561,0.446475178003311,66.1731948852539,5.89363384246826,0.502419114112854,66.169075012207,6.01105356216431,0.594793558120728,66.1596145629883,6.04629945755005,-0.100737050175667,63.1172065734863,4.34412145614624,-0.500222563743591,63.2063865661621,3.99288964271545,-0.364104866981506,63.1175727844238,3.94540190696716,-0.141184508800507,63.0437088012695,3.90080761909485,0.0887111127376556,62.9745178222656,3.8652503490448,0.211537271738052,63.0444030761719,4.45856428146362,0.0237708687782288,63.0873718261719,4.4538459777832,-1.42223107814789,64.5043640136719,3.36612296104431,-1.38911879062653,64.3296508789063,3.35790133476257,-1.20891559123993,63.8583641052246,3.27533435821533,-1.28675091266632,64.0161285400391,3.29017400741577,-0.686650097370148,63.6125526428223,4.48471069335938,-0.600071787834167,63.4264526367188,4.32255554199219,-0.497820943593979,63.2878799438477,4.18092155456543,-0.407934963703156,63.1828956604004,4.10707521438599,-0.263942271471024,63.0995025634766,4.05776023864746,-0.026168629527092,63.0137100219727,4.01293087005615,0.200198352336884,62.9460601806641,3.96981835365295,-1.22186529636383,63.9980354309082,3.55282139778137, -1.34261906147003,64.1619567871094,3.33094644546509,-0.316497594118118,65.9085998535156,4.86637306213379,0.124538689851761,65.9196166992188,5.23827791213989,0.124102115631104,65.908805847168,5.19611930847168,-0.736087679862976,65.537353515625,4.63726377487183,-0.185255855321884,64.904670715332,5.07743406295776,-0.0432551503181458,64.882209777832,5.23776292800903,-0.257672071456909,65.0048141479492,4.55685949325562,-0.859925270080566,64.7443389892578,3.3762354850769,-1.01947462558746,64.7168502807617,2.64527273178101,-1.64008462429047,64.293586730957,2.55414342880249,0.23989400267601,68.1633071899414,5.17229270935059,0.0469035506248474,68.2709426879883,5.16547060012817,0.131891995668411,66.6772384643555,5.44688415527344,0.439351290464401,67.8868865966797,4.88458061218262,0.181970685720444,67.4981689453125,4.82476377487183,0.352258652448654,67.3958129882813,5.17973613739014,0.298032134771347,67.2773361206055,5.20969247817993,-0.398242056369781,68.650390625,5.26332569122314,-0.806961536407471,68.8160171508789,5.12768363952637,-1.12555575370789,68.7801895141602,4.8606653213501,-1.26904928684235,68.6233596801758,4.6575722694397,-1.32087528705597,68.4356689453125,4.48058128356934,0.723448395729065,67.8533172607422,5.28542041778564,0.634040713310242,67.8667144775391,5.23758697509766,0.533391118049622,67.8840103149414,5.0360255241394,0.425834208726883,67.9190979003906,4.88724946975708,0.256425350904465,67.8387145996094,4.80163764953613,0.577364087104797,67.875862121582,5.14433765411377,-1.19939863681793,67.7417373657227,4.43186807632446,-1.30322372913361,67.6050643920898,4.37825393676758,-1.37182521820068,67.6045379638672,4.31879234313965,-1.42154228687286,67.5515365600586,4.27276706695557,-1.18892192840576,67.6365585327148,4.45693063735962,-1.2075526714325,67.6961288452148,4.42678356170654,0.0146072804927826,68.2122268676758,4.87960386276245,0.367377370595932,66.2688446044922,5.80207395553589,0.444115966558456,66.1817398071289,5.86155652999878,0.470569044351578,66.1363906860352,5.86054944992065,0.456080108880997,66.0712661743164,5.70314168930054, 0.00119155645370483,65.9672470092773,5.24612140655518,0.0713672339916229,65.955696105957,5.25750255584717,0.105267703533173,66.0630264282227,5.28856992721558,0.207570225000381,66.2081146240234,5.21952438354492,0.196638345718384,66.1596984863281,5.1656756401062,0.251285821199417,66.159553527832,5.21587753295898,-1.52112138271332,67.4812774658203,4.2046365737915,-1.54435980319977,67.5658187866211,4.10998916625977,-1.40774393081665,67.797233581543,4.23939990997314,-1.69101858139038,67.6965103149414,3.9439685344696,-1.65526449680328,67.7714920043945,3.87997126579285,-1.92212677001953,68.0300598144531,2.96836996078491,-1.94505167007446,67.5534439086914,3.29091906547546,-1.6261522769928,67.8814544677734,3.90463185310364,-1.59110057353973,67.9744415283203,3.92852735519409,0.287541657686234,67.9501724243164,4.80866003036499,0.601750493049622,67.6797180175781,5.29253816604614,0.700850963592529,67.6643142700195,5.33945846557617,0.533695816993713,67.6939697265625,5.19175720214844,0.256553322076797,67.4606246948242,4.98889303207397,0.363055914640427,67.4773635864258,5.13336992263794,0.422433763742447,67.4761352539063,5.19667863845825,0.447697192430496,67.4347915649414,5.25947570800781,-0.234858900308609,68.7217788696289,5.30162906646729,-0.380013138055801,68.9322204589844,5.23441600799561,-0.19159409403801,68.5782623291016,5.33443927764893,0.611650705337524,69.025032043457,5.25725412368774,-0.0934067666530609,69.0297393798828,5.23564195632935,-0.236638098955154,69.0935440063477,5.12780380249023,0.242130964994431,69.4098815917969,5.304123878479,-0.791982531547546,69.6056900024414,4.68712282180786,0.67888879776001,69.3228073120117,5.25025939941406,-0.503783106803894,65.9258346557617,4.74787187576294,-0.290703296661377,66.0148468017578,4.86166954040527,-0.236907988786697,65.411262512207,5.0018482208252,-0.355312466621399,65.3383560180664,4.9142689704895,-1.17474091053009,68.0606689453125,4.50648593902588,-1.24219930171967,68.1220626831055,4.46310710906982,-1.37572658061981,68.2389984130859,4.36748313903809,-1.3957325220108,68.2586822509766,4.32999277114868, -1.38216733932495,68.4170150756836,4.36642837524414,-1.42205548286438,68.2507705688477,4.26028251647949,-1.41753029823303,68.4400863647461,4.31222629547119,-1.4866498708725,68.27197265625,4.11681365966797,-1.46908164024353,68.4764251708984,4.19546127319336,0.0572300851345062,69.4563446044922,5.22767162322998,-0.0102332234382629,69.7210998535156,5.15357160568237,-0.0220333337783813,70.0018997192383,5.02607250213623,-0.0343590080738068,70.2648239135742,4.93354511260986,0.344821780920029,69.0631103515625,5.3681001663208,-1.34608554840088,69.3578491210938,3.73755097389221,-1.37849032878876,69.7391204833984,3.18851804733276,-1.31606471538544,69.7685699462891,3.37895488739014,-1.25033664703369,69.8133697509766,3.59308171272278,-1.21369969844818,69.6207275390625,3.85165095329285,0.423030167818069,68.4400939941406,5.4689826965332,0.194957137107849,68.0033798217773,4.80440950393677,0.122356653213501,68.0959701538086,4.81445550918579,-0.838517904281616,66.8712310791016,4.67926502227783,-1.06327414512634,66.7840118408203,4.47974014282227,-2.60383653640747,62.1017799377441,0.254392862319946,-2.33156847953796,62.5004920959473,0.327738046646118,-2.05626964569092,61.8457069396973,1.17941951751709,-2.1639678478241,61.142276763916,1.32716286182404,-0.771766066551209,60.0984153747559,2.80394649505615,-0.939229965209961,60.3516654968262,2.50065851211548,-0.310370951890945,60.2703285217285,2.32014560699463,-1.56072759628296,60.1842727661133,2.62462735176086,-0.949292778968811,59.9602317810059,2.90389752388,-2.92457056045532,60.5393753051758,1.63607156276703,-2.75430107116699,61.2119789123535,0.789340019226074,-2.44197249412537,60.5091209411621,1.91451597213745,-1.59654784202576,60.4476547241211,2.28525972366333,-2.58778691291809,60.2590637207031,2.32570648193359,-2.91699957847595,61.8118133544922,0.140143811702728,-2.03705453872681,64.9678649902344,-1.31896328926086,-1.87585914134979,64.9871215820313,-1.8019540309906,-2.11881303787231,64.5967330932617,-1.20581030845642,-1.94959533214569,64.6411895751953,-1.80150365829468,-1.43170213699341,64.6117782592773,-2.23662328720093, -1.24593210220337,64.9559478759766,-2.24559617042542,-0.540337324142456,64.896110534668,-2.54498171806335,-0.671869218349457,64.5543212890625,-2.60237717628479,0.0126664638519287,64.8239212036133,-2.72488737106323,0.5079665184021,65.3369598388672,-2.61204290390015,0.546129822731018,65.7667388916016,-2.32232403755188,-2.20329976081848,64.9069519042969,-0.739322066307068,-2.18769431114197,64.462272644043,-0.677212119102478,0.463694781064987,64.7991104125977,-2.77165102958679,-2.27892565727234,64.3324508666992,-1.07254493236542,-2.0687301158905,64.4105453491211,-1.73562741279602,-1.58865058422089,64.3944396972656,-2.31272482872009,-0.803160071372986,64.3040618896484,-2.61304879188538,-2.17260718345642,64.1474533081055,-0.634068369865417,-2.23544073104858,68.3914413452148,1.6720415353775,-2.17444276809692,68.3635177612305,1.75480437278748,-2.36962985992432,68.4567031860352,1.23169255256653,-2.25269293785095,68.4188461303711,1.27125549316406,-2.42794322967529,68.6118011474609,1.21498787403107,-2.1344735622406,68.3156204223633,0.896306276321411,-2.11035704612732,68.1960906982422,0.642302989959717,-2.10437488555908,67.963981628418,0.454863429069519,-2.25228142738342,68.4410018920898,1.77542805671692,-2.1859073638916,68.3270263671875,1.83723652362823,-2.30826497077942,68.5220718383789,1.64130914211273,-2.2535080909729,68.2871856689453,0.984555840492249,-2.12622618675232,68.102180480957,0.832027614116669,-2.11575055122375,67.8841934204102,0.746406614780426,-2.07402586936951,67.2652893066406,0.737824559211731,-2.09191298484802,67.5917205810547,0.344757199287415,-2.14096450805664,67.9786911010742,-0.321571588516235,-2.25128054618835,68.1278533935547,0.880027770996094,-2.2435462474823,67.8972549438477,0.804336190223694,-2.21857976913452,67.6182479858398,0.770642638206482,-2.09578418731689,67.5765914916992,0.710018455982208,-2.18941140174866,67.295768737793,0.797770977020264,-2.33974528312683,67.0231170654297,0.866563677787781,-2.13609290122986,66.8364105224609,1.03708910942078,-2.11306619644165,66.7260665893555,1.1648668050766, -3.31807923316956,61.4019966125488,0.0489473938941956,-3.42274594306946,60.5364532470703,1.49111914634705,-3.62020564079285,60.3799934387207,2.00422358512878,0.210002303123474,61.6859016418457,-3.54641151428223,-0.353588879108429,61.750129699707,-3.50249814987183,-1.02169609069824,62.0449752807617,-3.41312146186829,-1.83803629875183,62.3993988037109,-2.93643712997437,-2.82967305183411,63.0794563293457,-2.32267451286316,-3.1057333946228,63.1476707458496,-1.548499584198,-3.29211664199829,62.7537803649902,-0.629818201065063,-1.75604820251465,67.4462509155273,3.88761067390442,0.336564511060715,66.9118804931641,5.50027084350586,-0.711230635643005,65.6814422607422,4.64888429641724,-0.645659685134888,65.7985458374023,4.70442295074463,-0.430258810520172,64.9535446166992,4.65565013885498,-0.261302918195724,65.0195770263672,4.75829744338989,0.369330316781998,63.6228065490723,-2.97760391235352,0.400962799787521,64.0273132324219,-2.9543445110321,-0.137128278613091,68.2986831665039,4.91825723648071,2.77166199684143,63.0941047668457,-2.39661741256714,2.63027358055115,63.4563598632813,-2.50340533256531,3.06407999992371,63.4481048583984,-1.86804676055908,3.14984703063965,63.1162910461426,-1.89971852302551,2.58670663833618,63.8314628601074,-2.48425579071045,3.00956273078918,63.7738456726074,-1.80622553825378,3.18711543083191,63.6541328430176,-1.13377809524536,3.22662782669067,63.3706436157227,-1.22358846664429,3.37862420082092,63.0866508483887,-1.37140333652496,2.98798322677612,62.7669372558594,-2.4309287071228,3.37319898605347,62.8567924499512,-1.96693086624146,3.53397512435913,62.8022232055664,-1.52096652984619,0.846301555633545,63.6863899230957,-2.96940112113953,0.928462862968445,63.2999114990234,-2.99739456176758,1.03355467319489,62.9106292724609,-2.99142003059387,0.457932859659195,62.870662689209,-3.11936116218567,1.85002052783966,63.4105224609375,-2.84256649017334,1.99884569644928,63.0078659057617,-2.81859064102173,1.72941708564758,63.8114891052246,-2.8133008480072,3.13575959205627,59.6181221008301,2.40139698982239,3.4752357006073,59.792423248291,2.01754117012024, 2.61229562759399,65.9718399047852,-1.594557762146,2.79375314712524,65.5336303710938,-1.58723974227905,2.30689334869385,65.6141204833984,-1.78598785400391,2.0583975315094,66.03759765625,-1.77751684188843,2.97375583648682,65.0641708374023,-1.53472137451172,2.6017963886261,65.1482315063477,-1.96074271202087,1.98257291316986,65.2316513061523,-2.24446511268616,1.78643119335175,65.677848815918,-2.10593962669373,1.66918849945068,66.0922393798828,-1.98907852172852,1.25248622894287,65.7162246704102,-2.283527135849,1.15729212760925,66.0973815917969,-2.03909087181091,1.46467399597168,65.2478103637695,-2.45371031761169,0.895084381103516,65.3434982299805,-2.52855086326599,0.849041104316711,65.7681503295898,-2.36698508262634,0.833850264549255,64.0731582641602,-2.89877438545227,0.868939161300659,64.3996887207031,-2.75916123390198,3.43512058258057,62.534309387207,-0.555885553359985,3.61170029640198,62.251335144043,-0.713178634643555,3.62065267562866,62.6069641113281,-1.09054219722748,3.46297883987427,62.8803291320801,-0.932440757751465,3.04286408424377,63.3514938354492,-0.403999030590057,3.24094867706299,62.8811912536621,-0.446427464485168,3.27729225158691,63.1887054443359,-0.809061408042908,3.10877823829651,63.4842834472656,-0.736767888069153,3.20282506942749,65.6953277587891,-0.633383631706238,3.13929629325867,65.258918762207,-0.415696263313293,3.10375952720642,65.3865051269531,-1.04536521434784,3.03015112876892,65.8255081176758,-1.21753859519959,3.13037347793579,64.7489776611328,-0.403037965297699,3.18739819526672,64.9313507080078,-0.878572702407837,3.24098968505859,66.2357025146484,-0.675608038902283,2.9856231212616,66.3857040405273,-1.23000144958496,2.59243869781494,66.4537811279297,-1.60253596305847,3.43516945838928,68.4953765869141,2.93542647361755,3.64341020584106,68.7033767700195,2.52767944335938,1.67240488529205,70.9220733642578,4.61333656311035,1.35996758937836,70.8887329101563,4.74589204788208,1.77693021297455,71.216064453125,4.3246636390686,1.47888708114624,71.2272033691406,4.45492839813232,2.30322051048279,70.9339447021484,4.20990991592407, 1.98278081417084,70.9447708129883,4.42774534225464,2.35416674613953,71.2663192749023,3.84975266456604,2.05257272720337,71.2204666137695,4.14069652557373,1.84807145595551,71.5248184204102,3.93045210838318,2.13462781906128,71.4271011352539,3.86482501029968,3.25662088394165,70.7579803466797,2.95692658424377,3.38463449478149,70.4653244018555,2.71709227561951,3.18304753303528,70.5722732543945,3.23227119445801,3.28323173522949,70.3111953735352,3.04273319244385,3.26597952842712,69.9390258789063,2.96563172340393,3.48145318031311,70.0305786132813,2.41113090515137,3.01352572441101,70.7729568481445,3.45452928543091,3.07973289489746,71.0036239624023,3.20587682723999,2.87021660804749,71.1267395019531,3.42976593971252,2.84779906272888,70.8711776733398,3.67481565475464,3.45156717300415,68.8726272583008,3.00204420089722,1.53275537490845,71.5952072143555,4.05539703369141,3.70240545272827,67.952880859375,1.83304941654205,3.81758189201355,68.67919921875,1.75303256511688,3.44886875152588,68.2093963623047,2.75865435600281,1.76600730419159,67.2480773925781,-2.16408967971802,1.72176253795624,66.8199768066406,-2.07928395271301,1.19753456115723,66.8563919067383,-2.20012879371643,1.23600828647614,67.2891235351563,-2.29322600364685,1.69368076324463,66.4940795898438,-2.02104258537292,1.17020428180695,66.5240249633789,-2.15323305130005,3.78381276130676,68.0296020507813,1.1541588306427,3.90121912956238,68.6965560913086,0.956952571868896,3.76204657554626,70.0629730224609,0.696854710578918,3.74036574363709,70.0416870117188,0.113939613103867,3.63069581985474,70.7143020629883,0.125515431165695,3.7172954082489,70.7285079956055,0.693414866924286,3.56128549575806,70.058952331543,-0.510423541069031,3.50447249412537,70.7078247070313,-0.464096665382385,3.30403637886047,71.1632614135742,-0.389826118946075,3.44547486305237,71.2241973876953,0.149715274572372,3.51787281036377,71.2697067260742,0.716017782688141,3.36593508720398,70.9851684570313,2.53393077850342,3.15651845932007,71.2956085205078,2.69934105873108,3.48455619812012,71.1741180419922,1.67420899868011, 3.23799276351929,71.5311584472656,1.73876643180847,2.93440222740173,71.7987060546875,1.82964313030243,2.86609172821045,71.5268402099609,2.99194097518921,2.56718611717224,71.4180908203125,3.48156476020813,2.8948769569397,71.2851181030273,3.23862838745117,3.28889083862305,70.8849182128906,2.78930521011353,3.1189181804657,71.1584320068359,3.01724481582642,3.63068342208862,70.6360549926758,1.61095190048218,3.47237133979797,70.5504837036133,2.41710424423218,3.38644814491272,70.7088851928711,2.6184709072113,3.69685077667236,70.0055541992188,1.57964885234833,3.49112677574158,69.3208389282227,2.35678911209106,3.74448370933533,69.3097534179688,1.64186108112335,3.83206868171692,69.3102035522461,0.769378960132599,3.82193875312805,69.1562118530273,0.138535410165787,3.87746357917786,68.6364898681641,0.55125892162323,3.84130167961121,68.4185638427734,0.248314082622528,3.79534506797791,68.5724639892578,-0.149668216705322,3.59410548210144,68.3596725463867,-0.692980408668518,3.58642220497131,69.22021484375,-0.574200391769409,2.88847541809082,70.0564346313477,-1.5543417930603,3.28233027458191,70.0613479614258,-1.09098148345947,3.27779316902161,69.229606628418,-1.19395482540131,2.87084484100342,69.2186584472656,-1.67915177345276,3.22291541099548,68.3775405883789,-1.24711942672729,2.81288981437683,68.3739013671875,-1.72548604011536,1.44374704360962,70.0913619995117,-2.15053725242615,1.39350318908691,69.2714309692383,-2.34682774543762,1.97094690799713,70.0736083984375,-2.03468585014343,1.93484580516815,69.2466201782227,-2.21723556518555,1.8824747800827,68.4258804321289,-2.29632949829102,1.33679258823395,68.46337890625,-2.43480634689331,1.47740232944489,70.7777404785156,-1.86263632774353,1.98017990589142,70.7482147216797,-1.75833988189697,1.50036382675171,71.3355255126953,-1.46908926963806,1.97681868076324,71.2807006835938,-1.38598275184631,2.04763340950012,72.2877502441406,0.834140300750732,2.01885151863098,72.2057418823242,0.218309640884399,1.56952464580536,72.337158203125,0.24094945192337,1.5929172039032,72.4340896606445,0.87183153629303, 1.98563992977142,71.9797439575195,-0.372149109840393,1.53915750980377,72.0976638793945,-0.370075106620789,2.27466726303101,71.5804061889648,3.53008103370667,2.41497802734375,71.7373428344727,3.0770857334137,1.99079954624176,71.8846054077148,3.17736721038818,1.92208516597748,71.7022018432617,3.60366559028625,1.64213752746582,72.3024368286133,2.12799048423767,2.05538964271545,72.182975769043,2.05599641799927,1.59609460830688,71.9966735839844,3.28433179855347,2.54851698875427,66.7789077758789,-1.53792715072632,2.95708656311035,66.7296829223633,-1.15898084640503,2.64293694496155,67.1767807006836,-1.62114572525024,3.02803945541382,67.140510559082,-1.16226232051849,3.39273285865784,67.1055374145508,-0.632635354995728,3.34214329719543,66.5973663330078,-0.720301151275635,2.90744972229004,71.8982849121094,0.758566498756409,3.2385573387146,71.6321182250977,0.735273957252502,3.17576289176941,71.5590744018555,0.16808870434761,2.85406494140625,71.8030242919922,0.18050143122673,3.08760619163513,71.4547348022461,-0.33892822265625,2.79656958580017,71.6448059082031,-0.357277631759644,1.56994235515594,71.796516418457,3.7176206111908,3.28240466117859,69.3491592407227,2.9119086265564,2.78750729560852,71.1787643432617,-1.08255004882813,3.09195494651794,71.1411590576172,-0.805961489677429,3.21514344215393,70.7022857666016,-0.961730718612671,2.84587121009827,70.7086029052734,-1.34892511367798,2.99508047103882,71.3809432983398,-0.669953227043152,2.75786018371582,71.4705963134766,-0.774890303611755,1.97513401508331,71.6813049316406,-0.915417790412903,1.51852643489838,71.7696380615234,-0.955827593803406,2.51590299606323,72.031005859375,1.95417010784149,2.50209856033325,72.1378707885742,0.794477701187134,2.45773005485535,72.0231399536133,0.197701543569565,2.41701221466064,71.8243026733398,-0.368116199970245,2.40306186676025,71.5761642456055,-0.855907320976257,2.41083145141602,71.2268676757813,-1.26651608943939,2.44847583770752,70.0606231689453,-1.85001230239868,2.43527793884277,70.7245407104492,-1.60078120231628,2.42250514030457,69.2265930175781,-2.00551891326904, 2.37029147148132,68.3930358886719,-2.06755375862122,2.1752552986145,66.7966842651367,-1.87803864479065,2.23217368125916,67.2107467651367,-1.95042085647583,2.11980867385864,66.4858322143555,-1.79982614517212,1.82443225383759,67.7700271606445,-2.26232051849365,1.28373324871063,67.8126373291016,-2.39774370193481,2.7345130443573,67.7007904052734,-1.69548153877258,2.30476355552673,67.7305908203125,-2.03636646270752,3.1234712600708,67.6870727539063,-1.21527004241943,3.42609477043152,67.7113952636719,-0.779530763626099,3.80768942832947,68.2063293457031,-0.0221836566925049,3.72419857978821,67.9380645751953,-0.275116086006165,3.29296040534973,65.8929443359375,0.178759336471558,3.18487477302551,65.3272018432617,0.237231612205505,3.42458319664001,66.6893692016602,0.255840361118317,3.30981183052063,66.2866516113281,0.201219111680985,1.17992103099823,62.429141998291,-3.17016243934631,2.13867163658142,62.6163024902344,-2.8279116153717,0.559984564781189,62.3390464782715,-3.28172254562378,3.02245187759399,67.7061004638672,4.22892618179321,2.86418676376343,67.5733489990234,4.32109785079956,3.08335709571838,67.7418212890625,4.144850730896,2.92042183876038,67.6620712280273,4.32303619384766,1.04059529304504,66.1364822387695,5.37642431259155,1.08818566799164,66.1918182373047,5.32113075256348,0.952670454978943,66.2831268310547,5.55756616592407,0.964439511299133,66.2054443359375,5.57583618164063,0.972594499588013,66.1277236938477,5.61189317703247,0.907071590423584,66.2090911865234,5.81105995178223,0.848858714103699,66.2134170532227,5.80835962295532,0.990434408187866,66.1534957885742,5.83173322677612,0.939881920814514,66.1439819335938,5.8337869644165,1.33801198005676,66.0951766967773,5.4610013961792,1.31371986865997,66.1135635375977,5.4366307258606,1.32314586639404,66.0145721435547,5.3075270652771,1.36248826980591,65.984992980957,5.36341142654419,1.16821324825287,66.2176132202148,5.67701053619385,1.19959616661072,66.2241516113281,5.68081045150757,1.08892726898193,66.1012878417969,5.29095935821533,1.27456474304199,66.1795272827148,5.48362493515015, 1.2969925403595,66.1613845825195,5.51824808120728,0.895212769508362,66.2304382324219,5.67458629608154,0.883696556091309,66.2878265380859,5.66853427886963,1.05750358104706,66.2238006591797,5.77599811553955,1.61541330814362,67.9780654907227,4.79207324981689,1.48483347892761,67.8829650878906,4.77213430404663,1.66513204574585,67.9361038208008,4.78252983093262,1.39549088478088,67.8399353027344,4.77230978012085,1.47990763187408,67.7919158935547,4.80125713348389,1.55855202674866,67.8288879394531,4.788649559021,1.7188355922699,68.0638198852539,4.84649801254272,1.76975238323212,68.0085372924805,4.80823421478271,1.88238084316254,68.0819931030273,4.83967161178589,1.84954607486725,68.1613540649414,4.88833522796631,2.01740455627441,68.1148223876953,4.87205505371094,2.16267466545105,68.1177825927734,4.88001871109009,2.16110157966614,68.1770324707031,4.89240455627441,2.0064640045166,68.1895217895508,4.89453840255737,1.44177711009979,67.7627487182617,4.78806447982788,1.45658624172211,67.7608642578125,4.72944355010986,1.49655413627625,67.7859954833984,4.72255802154541,1.44505512714386,67.7402877807617,4.77763557434082,1.50603425502777,67.7715835571289,4.66046762466431,2.81941747665405,67.6532592773438,4.37944507598877,2.80845141410828,67.7050094604492,4.4054799079895,2.76364207267761,67.6946411132813,4.37451553344727,2.76965069770813,67.6132354736328,4.3663182258606,1.57247996330261,67.8204727172852,4.69046926498413,1.67675852775574,67.9105834960938,4.67156410217285,1.78256213665009,67.9964065551758,4.70338153839111,1.71295940876007,67.9023132324219,4.53851175308228,2.72553372383118,67.6013565063477,4.37623929977417,2.71776938438416,67.6938323974609,4.41837549209595,2.12454390525818,67.5096969604492,4.82131147384644,1.93376386165619,67.5508728027344,4.81489753723145,1.80381166934967,67.7050094604492,4.75677299499512,1.75186026096344,67.6921310424805,4.78685522079468,1.86624801158905,67.6840209960938,4.80912971496582,1.68831598758698,67.6511459350586,4.75817966461182,1.81566560268402,67.594367980957,4.80096960067749,1.94054734706879,67.6641006469727,4.85678577423096, 1.6259890794754,67.5726852416992,4.77385330200195,1.56445646286011,67.7168655395508,4.77339839935303,1.46761655807495,67.6678161621094,4.77723121643066,1.38416063785553,67.6996536254883,4.77788639068604,1.50879895687103,67.7301864624023,4.78449964523315,1.33086597919464,67.719108581543,4.78166580200195,2.56548237800598,67.5324020385742,4.60376691818237,2.66723799705505,67.4825439453125,4.453782081604,1.63220357894897,67.7453384399414,4.76484489440918,1.57864618301392,67.7543640136719,4.77227354049683,1.68848466873169,67.7535629272461,4.72987937927246,1.64251971244812,67.7787399291992,4.73566055297852,1.58031296730042,67.7742691040039,4.69857931137085,1.54594111442566,67.7606811523438,4.75637054443359,1.89201819896698,67.3553237915039,4.77216386795044,2.10411429405212,67.2825393676758,4.7396993637085,2.33040165901184,67.4997177124023,4.76993036270142,2.63719081878662,67.3552932739258,4.50041532516479,1.76297199726105,67.4556732177734,4.78083467483521,1.47983765602112,67.3121185302734,4.78161907196045,1.59192776679993,67.2046203613281,4.76624822616577,1.77153718471527,67.1205902099609,4.74773836135864,2.52664160728455,67.6587448120117,4.68369770050049,2.32218456268311,67.6141052246094,4.82337379455566,2.13513088226318,67.6266403198242,4.85408782958984,1.41478621959686,67.6599044799805,4.77605009078979,1.35092687606812,67.6474914550781,4.78986024856567,2.64810514450073,67.6008148193359,4.53010749816895,2.67109847068787,67.642822265625,4.43653106689453,2.63573479652405,67.699348449707,4.52756357192993,2.60309267044067,67.6876831054688,4.59368944168091,1.56230914592743,64.7970581054688,4.62223815917969,1.57280242443085,64.7770004272461,4.55793142318726,1.53890252113342,64.7756271362305,4.5918984413147,1.5733095407486,64.7759780883789,4.48884582519531,1.55842363834381,64.7646331787109,4.54476022720337,1.52267169952393,64.8155517578125,4.6362829208374,1.50113117694855,64.8684310913086,4.74321937561035,1.16122794151306,65.0884170532227,5.14359521865845,1.16995275020599,65.044792175293,5.16988229751587,0.948817014694214,65.1112442016602,5.24987411499023, 0.9472975730896,65.0725479125977,5.28148555755615,1.59930920600891,64.80029296875,4.69645118713379,1.617396235466,64.7488555908203,4.73600006103516,1.67197442054749,64.7575378417969,4.63868093490601,1.54642188549042,64.7513046264648,4.86179351806641,1.6091810464859,64.6602401733398,4.80571365356445,1.79511940479279,64.7023315429688,4.64403676986694,1.10575973987579,65.0869903564453,5.04435682296753,1.13507974147797,65.1160659790039,5.089515209198,1.20430386066437,65.0855331420898,5.02939796447754,1.16926229000092,65.0526809692383,4.99482154846191,1.30799674987793,65.0298690795898,5.00864553451538,1.26975691318512,65.0470809936523,4.96644496917725,1.24305903911591,64.9978332519531,4.95216512680054,1.31903052330017,65.0139694213867,4.88756418228149,1.34949314594269,64.9039611816406,5.06307601928711,1.4702981710434,64.882926940918,4.92383337020874,1.32103002071381,65.0060195922852,5.0321888923645,0.950963616371155,64.9252700805664,5.31096935272217,0.987527966499329,64.8332901000977,5.33049821853638,1.20135700702667,64.9142684936523,5.21407079696655,0.935256481170654,65.1235504150391,5.13924503326416,0.946526408195496,65.1388092041016,5.19374752044678,0.79563307762146,65.0841751098633,5.31249284744263,0.797460436820984,65.1235961914063,5.28180932998657,1.42578208446503,64.9698181152344,4.89240550994873,1.39220714569092,64.9700241088867,4.85443782806396,0.792876124382019,64.9543151855469,5.34882354736328,0.793111681938171,64.8629302978516,5.37787103652954,0.797000050544739,65.1455230712891,5.22485256195068,0.791859984397888,65.1421661376953,5.16695880889893,1.30230617523193,64.9390640258789,4.86823749542236,1.35855317115784,64.9611053466797,4.81103515625,1.34803688526154,64.8832244873047,4.79251050949097,0.90659487247467,63.1273765563965,4.58954286575317,0.953348994255066,63.336353302002,4.80861186981201,0.984978079795837,63.6115493774414,5.0362606048584,0.775317549705505,63.6444320678711,5.10200548171997,0.782387137413025,63.8541603088379,5.0748176574707,0.982545137405396,63.8120765686035,5.01916217803955,0.960399866104126,63.9836273193359,4.968834400177, 0.77299952507019,64.0293655395508,5.01205444335938,1.13187718391418,64.0773544311523,4.85964822769165,0.904144406318665,64.1760025024414,4.94052267074585,0.867566585540771,62.9883422851563,4.32515239715576,0.662752270698547,62.9579086303711,4.24405288696289,1.68722319602966,63.2029724121094,3.79156351089478,1.55583417415619,63.1098403930664,3.74550795555115,1.38694024085999,63.0472755432129,3.71653580665588,1.20429515838623,63.8601112365723,4.8340802192688,1.8569747209549,63.3113479614258,3.87934565544128,1.98933351039886,63.4412536621094,3.87631845474243,1.79896724224091,63.4291114807129,4.22676181793213,1.67343926429749,63.2597351074219,4.14480829238892,1.51965522766113,63.1451263427734,4.02508878707886,0.743568658828735,63.356029510498,4.86756324768066,0.707159996032715,63.1264381408691,4.62668037414551,1.23128128051758,63.4571571350098,4.79325723648071,1.25696194171906,63.6821022033691,4.8807520866394,0.750115871429443,64.2161331176758,4.97442626953125,0.95448911190033,68.2689056396484,5.40696430206299,1.10210275650024,68.0186996459961,5.24388742446899,1.11403250694275,68.0646057128906,5.24360227584839,1.00505876541138,68.0947189331055,5.32169723510742,0.988877415657043,67.9810104370117,5.30956077575684,1.07680690288544,68.6615905761719,5.42346000671387,1.17063009738922,68.0030288696289,5.14911937713623,1.21258020401001,67.992301940918,5.04708242416382,1.21008718013763,68.0745315551758,5.08662796020508,0.863151907920837,66.0218658447266,5.8984203338623,0.878515362739563,66.0476531982422,5.94400930404663,0.811168670654297,66.0340957641602,5.96556520462036,0.796718120574951,65.9958038330078,5.92510843276978,1.18504989147186,66.5405960083008,5.81291246414185,1.18261909484863,66.4677200317383,5.83124494552612,1.16803658008575,66.3756103515625,5.83031034469604,0.849136829376221,65.8758163452148,5.59448528289795,0.958329796791077,65.9928283691406,5.62665700912476,1.18129503726959,65.8471908569336,5.25742292404175,1.13864850997925,65.9437789916992,5.29657173156738,1.03993558883667,65.9741668701172,5.43829298019409,1.00494194030762,65.8529815673828,5.35447978973389, 1.01620256900787,66.4186325073242,6.05825710296631,1.08254957199097,66.4076614379883,5.98344707489014,1.09551954269409,66.5229644775391,6.00031614303589,1.0225692987442,66.5434951782227,6.06275177001953,1.08995115756989,66.6208877563477,5.96841812133789,1.01719057559967,66.6455612182617,6.02999830245972,1.56110656261444,66.3283996582031,5.33345746994019,1.47379839420319,66.4205780029297,5.41348457336426,1.42117702960968,66.4270935058594,5.18472719192505,1.3821359872818,66.5773391723633,5.34918260574341,1.47961628437042,66.3637924194336,5.15084791183472,1.56818747520447,66.2544479370117,5.2225661277771,1.55450403690338,66.1809539794922,5.13956642150879,1.52715849876404,66.2824859619141,5.13216829299927,1.4827972650528,66.1366958618164,5.07240104675293,1.47239136695862,66.2874755859375,5.11185455322266,1.49927139282227,65.9258880615234,5.26522731781006,1.46711909770966,65.9016876220703,5.19444799423218,1.53615379333496,66.0006866455078,5.13329648971558,1.58067262172699,66.0416259765625,5.1969747543335,1.44239354133606,65.8957443237305,5.08210182189941,1.45783531665802,66.0247955322266,5.04241561889648,1.506551861763,65.9601058959961,5.31732654571533,1.41535568237305,65.9368209838867,5.33529901504517,1.39484643936157,65.898323059082,5.29168033599854,1.50249338150024,66.0255355834961,5.37349081039429,1.42638659477234,65.9805221557617,5.38302612304688,1.34220838546753,65.9425659179688,5.32081174850464,1.31483519077301,65.904914855957,5.27753877639771,1.45656311511993,66.1546936035156,5.47705745697021,1.38550686836243,66.0974273681641,5.47264814376831,1.25200283527374,65.9548492431641,5.25276708602905,0.896006941795349,66.4281616210938,6.10456466674805,0.90334677696228,66.5566787719727,6.10564804077148,0.903348088264465,66.6635284423828,6.06973218917847,0.993480682373047,66.2969284057617,6.0419020652771,0.880164980888367,66.3056716918945,6.09063196182251,1.58793973922729,66.1127395629883,5.2674708366394,1.57066059112549,66.1672134399414,5.35007286071777,1.33825790882111,66.163948059082,5.53846120834351,1.38953459262848,66.2185516357422,5.53924417495728, 0.943351864814758,66.0803070068359,5.87983322143555,1.38254451751709,66.4367218017578,5.49561500549316,1.40577471256256,66.3258514404297,5.52398777008057,1.48847639560699,66.2757797241211,5.46264743804932,0.776017904281616,65.8630752563477,5.60215854644775,1.1419643163681,66.2864685058594,5.81920003890991,1.10327231884003,66.2269744873047,5.80411815643311,0.982795000076294,66.0418167114258,5.58648300170898,1.23382449150085,66.262077331543,5.68230390548706,1.24669885635376,66.3198471069336,5.67943048477173,3.22172045707703,67.809928894043,3.82832098007202,3.15530824661255,67.8338470458984,4.00156021118164,3.15509080886841,67.7748489379883,3.99598979949951,3.07769012451172,67.8231201171875,4.18973302841187,1.10835039615631,68.3742294311523,5.43645858764648,1.10926449298859,68.2622299194336,5.42638063430786,1.25268363952637,68.2686462402344,5.49923801422119,1.25887644290924,68.3857269287109,5.54237508773804,0.856779098510742,65.8057250976563,5.38414430618286,1.05993151664734,66.2888641357422,5.97157907485962,2.87275648117065,64.2026062011719,2.89005708694458,2.99350666999817,64.2616271972656,2.66672921180725,3.06010127067566,64.5027084350586,2.74929118156433,2.94652581214905,64.4142456054688,3.01589393615723,3.07869410514832,64.3033828735352,2.43764901161194,3.14995956420898,64.5367050170898,2.53096532821655,3.16307401657104,64.7588119506836,2.61771774291992,3.09017300605774,64.6998519897461,2.86918115615845,2.94763731956482,64.6433868408203,3.09942221641541,2.60297060012817,67.2657012939453,4.51407909393311,2.34461688995361,67.2425384521484,4.6809778213501,2.4332230091095,66.9677734375,4.61262559890747,2.69015502929688,67.0426330566406,4.44951248168945,2.10328006744385,67.0629348754883,4.73166131973267,2.73677968978882,67.3821334838867,4.40822982788086,2.71642827987671,67.4613952636719,4.41833877563477,2.65608310699463,67.4130172729492,4.47524547576904,1.39902520179749,65.3239822387695,5.08177518844604,1.33020997047424,65.2320861816406,5.11651849746704,1.16617429256439,65.337646484375,5.22120761871338,1.16582405567169,65.2580413818359,5.22784996032715, 1.15485346317291,65.1838226318359,5.18234348297119,1.30968177318573,65.1623001098633,5.08121681213379,1.07950747013092,65.1546020507813,4.96049022674561,1.09411942958832,65.1320648193359,4.99228525161743,1.19628489017487,65.1498947143555,4.8596076965332,1.17167019844055,65.08154296875,4.89428281784058,1.21968996524811,65.0599975585938,4.96370887756348,1.11150693893433,65.1110458374023,5.0471043586731,0.960742354393005,65.3200454711914,5.3076319694519,0.964861273765564,65.2693252563477,5.27933168411255,0.967252373695374,65.2189712524414,5.2121376991272,0.887307524681091,65.2577362060547,5.27378177642822,0.933913707733154,65.1596832275391,5.01675939559937,0.940787792205811,65.1411590576172,5.05751657485962,0.953863739967346,65.1263656616211,5.11540555953979,1.46924197673798,65.1509399414063,4.98497533798218,1.42944991588593,65.0712814331055,4.97104835510254,0.726064443588257,65.1496200561523,4.99916076660156,0.723457217216492,65.1317138671875,5.055251121521,0.722915172576904,65.1126403808594,5.12641906738281,1.25722050666809,65.1121215820313,4.79240989685059,1.34165704250336,64.9907913208008,4.67870283126831,1.24571990966797,65.0443420410156,4.80092239379883,1.35468363761902,64.9573822021484,4.70028591156006,1.38346302509308,64.9460678100586,4.75443172454834,1.30107736587524,65.0216827392578,4.85702705383301,0.736445665359497,65.2196731567383,5.28496837615967,0.731112122535706,65.1628646850586,5.25378942489624,0.741668343544006,65.2620010375977,5.3127760887146,1.96044337749481,64.690673828125,4.54105854034424,1.89501965045929,64.8835220336914,4.63898515701294,1.75379693508148,64.8410415649414,4.64671897888184,1.81441962718964,65.1060791015625,4.74574422836304,1.74698913097382,64.9912109375,4.71846771240234,1.66675806045532,64.8422775268555,4.65543508529663,0.965164661407471,65.153450012207,5.1742115020752,0.887127876281738,65.155029296875,5.18276166915894,0.877623200416565,65.1300506591797,5.12379503250122,0.889152407646179,65.2081298828125,5.22853326797485,1.50251054763794,64.9516983032227,4.86895179748535,1.5572634935379,65.0263519287109,4.86247158050537, 0.872787117958069,65.1376190185547,5.06298589706421,0.871499061584473,65.1556854248047,5.01519203186035,1.63267862796783,67.7908554077148,4.64664506912231,1.69053792953491,67.8132095336914,4.50846290588379,1.86208045482636,67.7431945800781,4.69083738327026,1.83597791194916,67.7311019897461,4.73373460769653,1.76971423625946,67.7824783325195,4.61141586303711,1.73197448253632,67.7678527832031,4.67666387557983,2.13273811340332,67.6600494384766,4.81347227096558,2.12690806388855,67.6821746826172,4.75571489334106,1.96110379695892,67.7085876464844,4.75144004821777,1.95040476322174,67.6890106201172,4.80746603012085,1.72490096092224,67.7901763916016,4.55446481704712,1.68810820579529,67.7942810058594,4.65519142150879,2.49819946289063,67.6858901977539,4.66664505004883,2.4681339263916,67.7000732421875,4.63317203521729,2.28982353210449,67.6699523925781,4.73800802230835,2.30699634552002,67.6478424072266,4.79213714599609,2.62672972679138,67.713996887207,4.50203514099121,2.57353758811951,67.7069091796875,4.58141613006592,2.5938196182251,67.7178802490234,4.47351264953613,2.54124069213867,67.7161407470703,4.55211734771729,4.17357540130615,67.8996047973633,0.509683907032013,4.1403603553772,67.6832962036133,0.449121415615082,4.08362770080566,67.3917999267578,0.414594709873199,3.90992999076843,67.4254379272461,0.725381076335907,3.94927668571472,67.6558380126953,0.792257249355316,3.97278380393982,67.8460464477539,0.8745236992836,3.58249139785767,67.4250793457031,2.43577671051025,3.66378712654114,67.4318084716797,2.07610011100769,3.74723982810974,67.8212814331055,1.85516107082367,3.53273034095764,67.8464584350586,2.72762513160706,1.81092512607574,66.1431884765625,4.87175035476685,1.85961425304413,66.0183639526367,4.79641628265381,1.91326582431793,65.90087890625,4.75100040435791,2.08881855010986,66.059196472168,4.75629425048828,2.08825278282166,66.1917037963867,4.80004692077637,1.99359023571014,66.2997894287109,4.83589601516724,2.36032509803772,64.3248443603516,3.86987996101379,2.44826078414917,64.6608505249023,3.97995185852051,1.96192157268524,66.8022384643555,4.73072004318237, 1.8986679315567,66.6709976196289,4.79249000549316,2.14057230949402,66.5590744018555,4.63880014419556,2.24688816070557,66.7343597412109,4.70600175857544,1.51051247119904,66.0330352783203,4.97222995758057,1.56563603878021,66.0699157714844,4.92767810821533,1.4725159406662,66.2073516845703,5.01603746414185,1.53508925437927,65.9453430175781,4.91490650177002,1.59876596927643,65.9530487060547,4.86776781082153,1.6534435749054,66.0074615478516,4.72317504882813,1.61450529098511,66.1480941772461,4.80866765975952,1.52846145629883,66.2845687866211,4.95261716842651,1.64934742450714,66.4504470825195,4.95662689208984,1.72839331626892,66.3004608154297,4.91241359710693,2.52269864082336,66.3429107666016,4.25267505645752,2.51373910903931,66.1549377441406,4.08980846405029,2.73523330688477,66.1615371704102,3.90226435661316,2.77488350868225,66.3376922607422,4.05986309051514,2.54053902626038,65.1107788085938,3.88801002502441,2.54846215248108,65.2907028198242,3.96028590202332,2.5438380241394,65.4811019897461,4.03654479980469,2.39782929420471,66.1180648803711,4.27655076980591,2.37393355369568,66.3513565063477,4.38982439041138,2.27032828330994,65.1054763793945,4.40776538848877,2.23681831359863,65.2680511474609,4.47885704040527,2.41696572303772,65.0836639404297,4.25302076339722,2.37576246261597,65.2705078125,4.32173538208008,2.35369086265564,65.4496002197266,4.42240571975708,2.18725490570068,65.4226531982422,4.55194759368896,2.123694896698,65.5600128173828,4.6230206489563,2.28663229942322,65.5895919799805,4.51024770736694,1.51225531101227,66.5718231201172,5.021240234375,1.4161981344223,66.644889831543,5.12101936340332,1.42633509635925,66.3838272094727,5.06254053115845,1.53803825378418,66.6902465820313,5.0226263999939,1.42731106281281,66.7563400268555,5.11838150024414,1.65536999702454,66.6072387695313,4.95725440979004,1.67465090751648,66.7415084838867,4.94556093215942,1.54190278053284,66.8336715698242,5.00357246398926,1.39855873584747,66.9208526611328,5.12479829788208,1.47772538661957,66.2974624633789,5.09121799468994,2.59657120704651,65.133056640625,3.66636753082275, 2.6109926700592,65.3053436279297,3.72980260848999,2.60834908485413,65.493782043457,3.801917552948,1.52033245563507,66.9799957275391,4.94045448303223,1.41880643367767,67.1096954345703,5.0534462928772,1.66209173202515,66.8697357177734,4.87027931213379,1.3919837474823,67.2366409301758,4.96968173980713,2.00205206871033,65.6056671142578,4.64997816085815,2.04608273506165,65.457763671875,4.57589817047119,2.27062916755676,64.3006744384766,4.06169319152832,2.32876181602478,64.6938705444336,4.19766807556152,2.52454304695129,65.6801376342773,4.10202598571777,2.1409318447113,66.399658203125,4.63131332397461,2.23282361030579,66.1752700805664,4.6105751991272,2.34595704078674,66.4882125854492,4.50150775909424,1.81751644611359,66.3587646484375,4.91359186172485,1.87995064258575,66.5447616577148,4.87719774246216,2.01660585403442,66.4501571655273,4.7698450088501,2.30044889450073,65.9848556518555,4.57546710968018,2.57980298995972,65.7074432373047,3.88146424293518,2.5665864944458,64.7896194458008,3.54475498199463,2.51294469833374,64.4948425292969,3.4874062538147,2.47084093093872,64.4197158813477,3.61557745933533,2.54000449180603,64.7240219116211,3.70111060142517,3.06965947151184,64.2413635253906,0.843061864376068,3.14307951927185,64.6348190307617,0.817125797271729,3.17030668258667,64.9766464233398,0.787583470344543,3.13940739631653,64.7505416870117,1.18672370910645,3.10409641265869,64.4562759399414,1.21933686733246,3.01130676269531,64.0785903930664,1.29110634326935,1.39091527462006,64.0119705200195,4.70452880859375,1.31462967395782,64.2487564086914,4.89590787887573,1.07064962387085,64.3344345092773,5.00004005432129,1.02853214740753,65.7345199584961,5.25804567337036,1.06206750869751,65.6524963378906,5.22237396240234,1.24704384803772,65.713996887207,5.1207423210144,1.19674646854401,65.7925643920898,5.18545246124268,1.11466372013092,68.5229339599609,5.42319107055664,2.63029646873474,64.9091415405273,3.35278916358948,2.58759641647339,64.4991760253906,3.2932140827179,2.89777517318726,64.9867172241211,3.18954491615295,1.0823005437851,66.739501953125,5.87417697906494, 1.08765780925751,66.9091491699219,5.60021114349365,1.01002395153046,66.950798034668,5.78720188140869,1.01102554798126,66.7803955078125,5.93792963027954,1.1871634721756,66.6877212524414,5.68769645690918,1.01847362518311,67.1112899780273,5.6987509727478,0.917320609092712,67.1311950683594,5.73997926712036,0.90803050994873,66.9813232421875,5.82367610931396,1.02897262573242,67.2320785522461,5.63844585418701,0.925348520278931,67.2418899536133,5.68538045883179,1.82211816310883,68.3722305297852,5.38440036773682,1.72986388206482,68.3393173217773,5.39727163314819,1.85487186908722,68.5016860961914,5.35601806640625,1.75295293331146,68.4524688720703,5.38968372344971,2.18797636032104,70.2286682128906,4.76863861083984,2.26277923583984,69.8419494628906,4.76173734664917,2.30417919158936,70.1883010864258,4.6255316734314,2.20072603225708,69.5985870361328,4.84077930450439,2.32512545585632,69.4896392822266,4.79950618743896,2.43021702766418,69.7975463867188,4.73787498474121,2.46586561203003,70.1633682250977,4.48380565643311,1.7530769109726,63.2388000488281,3.47270965576172,1.88775670528412,63.3332633972168,3.50927734375,1.57975447177887,63.1699600219727,3.45405411720276,0.770951867103577,64.613410949707,5.26209306716919,0.785154342651367,64.7431182861328,5.36394596099854,0.955015659332275,64.5587005615234,5.17588186264038,0.956335425376892,64.7101593017578,5.32591438293457,3.32264757156372,65.618896484375,0.780253946781158,2.9574408531189,64.4738998413086,0.316204011440277,3.13376069068909,64.9198226928711,0.27761971950531,2.56642246246338,64.0481872558594,1.71757841110229,2.03027939796448,63.4526977539063,3.50485467910767,2.14873170852661,63.5934638977051,3.497230052948,2.46903705596924,70.7225952148438,4.26248502731323,2.84281134605408,70.6446990966797,3.84263586997986,3.21379804611206,65.3377227783203,1.1963357925415,3.20485281944275,65.93408203125,2.79245543479919,3.36020851135254,65.9955978393555,2.51856184005737,3.14592552185059,65.8635025024414,3.08585023880005,3.15856194496155,65.6592636108398,2.99970817565918,3.27241349220276,65.6984176635742,2.72795724868774, 3.36723446846008,65.7419509887695,2.44129371643066,3.30855917930603,66.7898025512695,2.86580801010132,3.24830770492554,66.6402893066406,3.15281105041504,3.16916584968567,66.4040451049805,2.98576140403748,3.28029775619507,66.4961318969727,2.69506525993347,3.14309644699097,66.5459136962891,3.3976411819458,3.09399890899658,66.3121109008789,3.25750803947449,1.95557272434235,68.6751861572266,5.29672241210938,1.81888711452484,68.6034317016602,5.35073375701904,1.41024601459503,63.2141647338867,3.23758721351624,1.15360486507416,63.1664695739746,3.25049090385437,1.5957545042038,63.2730178833008,3.21871757507324,1.40879082679749,65.5020294189453,5.03400230407715,1.4037721157074,65.717414855957,4.9996542930603,1.19037282466888,65.4891662597656,5.20386838912964,2.60248494148254,68.8864212036133,4.85044574737549,2.64458465576172,69.0195922851563,4.74494361877441,2.36588907241821,68.9808120727539,4.96036577224731,2.346923828125,62.8495674133301,1.76874101161957,2.17040228843689,62.3400039672852,1.86332964897156,1.98219120502472,61.8262977600098,1.95655155181885,2.47003626823425,61.9436645507813,1.61649990081787,2.62941479682922,62.4789848327637,1.5250837802887,2.77312874794006,62.999870300293,1.44115698337555,1.41100990772247,65.8050079345703,5.01921081542969,1.53756165504456,65.7346725463867,4.91554641723633,1.54546129703522,65.830940246582,4.91062641143799,2.57974934577942,68.3915405273438,5.03086280822754,2.35975360870361,68.3460540771484,5.10343074798584,2.15034532546997,68.2842788696289,5.15059041976929,2.70931816101074,64.0672454833984,2.00770950317383,2.74843382835388,64.1253967285156,1.76698267459869,2.80714631080627,64.0711135864258,2.29739952087402,2.70221138000488,64.0294647216797,2.25056958198547,2.59571003913879,63.9650650024414,2.27302551269531,3.20630860328674,68.2135391235352,4.01540756225586,3.14722442626953,68.3423080444336,4.16961050033569,3.1775176525116,68.2282562255859,4.17364263534546,3.08311438560486,68.6121978759766,4.19453144073486,3.10557079315186,68.4193954467773,4.29816150665283,3.10166668891907,68.2396621704102,4.34590244293213, 3.23239278793335,64.7937698364258,2.39909362792969,3.29830861091614,64.8190155029297,2.1781325340271,3.34556007385254,65.2663955688477,2.34464025497437,3.25028228759766,65.2071228027344,2.59141540527344,3.17798399925232,65.1101379394531,2.7619047164917,3.19209694862366,65.3329467773438,2.88725996017456,3.2748589515686,65.3408660888672,2.6292200088501,3.29173731803894,65.5005340576172,2.66720008850098,3.17430877685547,65.4842987060547,2.92708039283752,3.38223314285278,65.4999389648438,2.38008999824524,2.27588939666748,63.889762878418,3.51033973693848,2.60826468467712,64.0904006958008,3.14019298553467,2.49879050254822,63.9305763244629,3.14054346084595,2.41469717025757,63.8167266845703,3.07191205024719,2.6449613571167,63.9745788574219,2.7154438495636,2.74609088897705,69.5691452026367,4.54720497131348,2.79885339736938,69.8089599609375,4.50718355178833,2.83263349533081,70.1560897827148,4.24949645996094,1.66631972789764,64.006217956543,4.41115856170654,1.54344177246094,63.7823791503906,4.62629365921021,1.81746780872345,63.8232612609863,4.24533700942993,1.9330667257309,63.6909599304199,4.13855075836182,2.01452040672302,64.0820999145508,4.15035057067871,1.85161864757538,64.1769027709961,4.33584785461426,1.34827721118927,66.6312789916992,5.32681751251221,1.33312034606934,66.7119827270508,5.29776334762573,1.35957944393158,70.1682434082031,5.06434488296509,1.30751574039459,69.8131713867188,5.14138650894165,1.26131451129913,69.5302886962891,5.20147800445557,1.50465273857117,69.5750961303711,5.18930959701538,1.55817043781281,69.8395385742188,5.10909700393677,1.59938907623291,70.1610488891602,5.01129102706909,1.66334295272827,62.4444999694824,2.31862783432007,1.77151620388031,62.8890686035156,2.30940628051758,1.13388705253601,62.7269973754883,2.68523573875427,1.06157386302948,62.3579978942871,2.6658456325531,0.875809192657471,64.4096298217773,5.04039573669434,0.73970353603363,64.4352264404297,5.07188892364502,2.37753105163574,63.8615036010742,2.22751426696777,2.0526864528656,70.6333465576172,4.64314699172974,1.26074552536011,64.5021820068359,5.06837511062622, 1.25899064540863,64.6928482055664,5.21327638626099,2.08650135993958,63.5699844360352,3.86548352241516,2.14077305793762,63.7161102294922,3.82737326622009,1.88180673122406,63.562198638916,4.20048427581787,1.29388749599457,65.8246231079102,5.18244791030884,1.27890062332153,65.787727355957,5.12692308425903,1.33551824092865,65.7642211914063,5.05971336364746,1.35508978366852,65.8358154296875,5.13893175125122,3.39741015434265,66.8426208496094,2.49798011779785,3.46531867980957,67.1295471191406,2.62615919113159,3.44804573059082,67.0955429077148,2.95263624191284,3.49114727973938,66.9027862548828,2.17869186401367,3.53133225440979,67.1750030517578,2.31824254989624,3.54556512832642,67.3944778442383,2.76397252082825,3.52769446372986,67.3619766235352,3.10120415687561,1.66327261924744,65.5175399780273,4.84837293624878,1.6486691236496,65.3879776000977,4.83345651626587,1.55714344978333,65.515739440918,4.91552543640137,1.54356360435486,65.3456115722656,4.96902656555176,1.64133775234222,65.2857055664063,4.88229322433472,1.15404975414276,63.0051612854004,3.69910192489624,0.901649951934814,62.9695129394531,3.68851327896118,1.29445350170136,61.6162147521973,2.3349986076355,1.49334478378296,62.0239295959473,2.32971668243408,0.939993143081665,61.9537353515625,2.60241937637329,0.790918231010437,61.5481300354004,2.5308837890625,3.40503931045532,66.5657043457031,2.41545963287354,3.4683039188385,66.6099319458008,2.1507716178894,2.08212614059448,69.3093414306641,4.99917554855347,2.20279026031494,69.3110733032227,4.92981052398682,2.05538940429688,64.3852386474609,4.33511734008789,2.02214121818542,64.6891555786133,4.49180173873901,2.51422572135925,68.1781311035156,4.93498277664185,2.74233198165894,68.1048965454102,4.74316835403442,1.33793914318085,67.9867706298828,4.83846712112427,1.26418793201447,67.9812622070313,4.88836717605591,1.72899913787842,70.4542999267578,4.86722230911255,1.88850796222687,70.4923553466797,4.80114221572876,1.91768753528595,70.4026031494141,4.83765125274658,2.48615074157715,70.5057220458984,4.35005807876587,2.77934885025024,70.4354629516602,4.04117774963379, 2.17157745361328,63.5577545166016,3.01464104652405,2.0459156036377,63.459545135498,3.02176666259766,2.18099522590637,63.6124877929688,2.62947630882263,2.41914415359497,63.7559013366699,2.63658022880554,2.90074110031128,68.9421310424805,4.49496364593506,1.16719198226929,67.6541290283203,5.07088279724121,1.27261769771576,67.6515121459961,4.91043853759766,3.13415884971619,70.4025344848633,3.49547290802002,3.00836896896362,70.4687805175781,3.67086410522461,2.91557312011719,70.3788909912109,3.87965750694275,2.94108152389526,70.1115646362305,3.96969389915466,3.04004549980164,70.0819702148438,3.83000016212463,3.06503176689148,69.9759063720703,3.64700102806091,1.21417355537415,63.3148307800293,2.784184217453,1.19664418697357,63.1839752197266,2.73920702934265,1.54497134685516,63.3072853088379,2.56475400924683,1.544917345047,63.3785438537598,2.63877606391907,1.8416827917099,63.4582023620605,2.36375784873962,1.86531913280487,63.556941986084,2.4356997013092,3.27756834030151,65.7480545043945,1.49152147769928,3.32438254356384,65.7033843994141,1.57046961784363,3.2664635181427,65.4832916259766,1.54861390590668,3.21064281463623,65.5065155029297,1.46422207355499,3.38953733444214,65.7523956298828,1.67035269737244,3.1939902305603,65.2248687744141,1.5117518901825,3.15106582641602,65.218391418457,1.42323327064514,2.96880340576172,70.7074890136719,3.58743643760681,2.52766156196594,63.849910736084,2.67795538902283,2.29024934768677,63.691104888916,3.02464008331299,3.0556173324585,69.4313125610352,3.94278478622437,3.06104874610901,69.5194473266602,4.12069797515869,3.01978588104248,69.218147277832,4.19789600372314,3.04081892967224,69.1315231323242,4.02007246017456,3.00306487083435,69.5700912475586,4.27975177764893,2.95265007019043,69.285400390625,4.37552213668823,3.06109118461609,68.8921356201172,4.02935028076172,3.30373907089233,65.985221862793,0.823003649711609,3.37114906311035,66.3666000366211,0.88204824924469,3.40155816078186,66.1607513427734,1.27854585647583,3.2656843662262,65.7254486083984,1.23977637290955,2.15141582489014,65.8958358764648,4.68503475189209, 1.97792518138886,65.7934494018555,4.71268367767334,3.27143931388855,68.2170104980469,3.46690511703491,3.36802220344543,68.1874542236328,3.12048625946045,3.40568804740906,68.5598831176758,3.17628622055054,3.36138033866882,68.5961532592773,3.37867641448975,3.28634023666382,68.7167587280273,3.6459379196167,1.36855494976044,68.0724639892578,5.07851886749268,1.47358274459839,68.0629501342773,5.07631206512451,1.28406882286072,68.0532379150391,4.89790439605713,1.43688583374023,68.0571365356445,4.88231134414673,1.58190584182739,68.1025772094727,4.88890886306763,1.62977468967438,68.1250610351563,5.0776162147522,1.33778488636017,67.7689437866211,4.77620267868042,1.05926036834717,67.4494552612305,5.43875932693481,0.754440307617188,65.3672866821289,5.28548049926758,0.751253128051758,65.6022720336914,5.25729703903198,2.17934894561768,64.3224639892578,4.21248769760132,1.71412336826324,65.0587615966797,4.75572490692139,1.75993835926056,65.1855773925781,4.76912593841553,0.916168451309204,65.6128005981445,5.28644561767578,0.956570863723755,65.4222259521484,5.28150510787964,2.82387208938599,64.2440795898438,1.60327672958374,2.71610569953918,64.1857147216797,1.54536700248718,2.8345205783844,64.3156814575195,1.42784821987152,2.91504144668579,64.4028472900391,1.50540399551392,1.73535168170929,63.4158134460449,2.767258644104,3.87476706504822,67.928092956543,1.76517486572266,3.80734848976135,67.7902603149414,1.86865186691284,4.00409650802612,68.1080474853516,1.55622589588165,3.87178349494934,67.9669494628906,1.71418404579163,2.21187043190002,64.6915817260742,4.3245325088501,1.09960293769836,61.2102317810059,2.32678270339966,0.913408160209656,60.8254432678223,2.30629253387451,1.22644782066345,63.2941818237305,2.93833780288696,1.50415539741516,63.3456764221191,2.85449743270874,1.91454017162323,63.3828811645508,3.22673344612122,2.04850459098816,63.4737892150879,3.21564912796021,1.19043982028961,68.0956802368164,5.25577878952026,1.15569794178009,68.12744140625,5.34178733825684,1.33125197887421,68.0929641723633,5.26610374450684,1.27669787406921,68.1236801147461,5.34426927566528, 1.81892287731171,65.3533172607422,4.75283145904541,1.83351361751556,65.5049514770508,4.74560260772705,0.489630132913589,60.8192939758301,2.44391441345215,0.636119484901428,61.1750755310059,2.48716497421265,1.72115516662598,68.2012634277344,5.27561855316162,1.81343591213226,68.2175674438477,5.25443077087402,3.61724925041199,66.9714813232422,1.93237948417664,3.63002371788025,67.0168075561523,1.87830793857574,3.65537023544312,67.2072143554688,1.95941495895386,3.6320812702179,67.1999359130859,2.02898907661438,3.66461253166199,67.1989288330078,1.90811610221863,3.60759997367859,67.0121231079102,1.8292031288147,3.66415858268738,67.1588439941406,1.85774981975555,3.70364260673523,67.4279174804688,1.99589407444,3.74132084846497,67.3983764648438,1.94340825080872,3.75281167030334,67.6230087280273,1.95619535446167,2.81532144546509,68.0492401123047,4.63717555999756,2.85496854782104,68.0031509399414,4.55038499832153,1.60250473022461,68.6735763549805,5.25675439834595,1.5099128484726,68.4110488891602,5.39070510864258,1.36978161334991,68.8145217895508,5.41693639755249,1.41716694831848,68.6838989257813,5.43790340423584,3.23023343086243,70.1785354614258,3.18463897705078,1.2082679271698,66.9643630981445,5.39298105239868,1.21866321563721,67.0920944213867,5.29832220077515,1.27707099914551,66.8820114135742,5.35456275939941,1.27629065513611,67.0180816650391,5.278151512146,1.4946049451828,64.4533767700195,4.85514402389526,1.45980274677277,64.6893997192383,5.04266023635864,1.43082308769226,69.2890243530273,5.24512767791748,2.76308536529541,67.9503479003906,4.64143562316895,2.80748581886292,67.9118423461914,4.56407785415649,2.69727182388306,67.9980316162109,4.73916387557983,2.77209401130676,67.8514709472656,4.54306507110596,3.1554057598114,69.8255310058594,3.3562445640564,3.21396946907043,69.7456893920898,3.1201605796814,2.96959733963013,66.3964309692383,3.77987670898438,3.06027674674988,66.4596405029297,3.60809707641602,3.12278532981873,66.7135238647461,3.79585146903992,3.035489320755,66.616813659668,3.96194195747375,3.22859811782837,66.8069839477539,3.62145400047302, 3.25045347213745,67.1485061645508,3.91712236404419,3.20148730278015,66.953125,4.02498865127563,3.10689544677734,66.8664321899414,4.21319150924683,3.04706168174744,64.7684555053711,1.37625753879547,3.36234951019287,68.9172592163086,3.1843159198761,3.23758554458618,69.0889282226563,3.32570433616638,2.73865675926209,64.0937805175781,1.47130036354065,2.44877791404724,68.0812683105469,4.80997705459595,2.31137037277222,68.1344299316406,4.86483573913574,2.33828735351563,68.1263580322266,4.97409057617188,2.17115354537964,68.1592559814453,5.01532745361328,2.49606013298035,68.0793762207031,4.9183349609375,2.33080887794495,68.2026672363281,5.00495862960815,1.6921523809433,64.4372634887695,4.59270191192627,3.12855386734009,64.4140548706055,2.02637028694153,3.00002670288086,64.2794342041016,1.9327564239502,3.05478620529175,64.3649063110352,1.79543006420136,3.16064596176147,64.4679489135742,1.88507044315338,3.10378193855286,64.4913864135742,1.70813536643982,3.16189479827881,64.5378875732422,1.79301404953003,1.88884961605072,64.4099655151367,4.4384651184082,2.43658375740051,68.7276382446289,5.05807542800903,2.60550928115845,68.6477127075195,5.03396940231323,2.62770128250122,68.7658843994141,4.94138765335083,2.4056396484375,68.6070098876953,5.12689208984375,2.38367676734924,68.5143890380859,5.15268611907959,2.24653244018555,68.5764846801758,5.18992710113525,1.80867230892181,69.8361434936523,5.04644918441772,1.86460244655609,70.1591415405273,4.91810512542725,1.75314748287201,69.5746459960938,5.16978740692139,3.37677645683289,65.7449111938477,1.77825689315796,3.39073538780212,65.5126647949219,1.73714506626129,3.40116405487061,65.8993225097656,1.76968371868134,3.39961576461792,65.8093719482422,1.91650032997131,3.40984797477722,65.5266418457031,1.88468360900879,3.37290668487549,65.2781295776367,1.82793116569519,3.33846926689148,65.2658081054688,1.68715047836304,1.58690357208252,64.180534362793,4.67527723312378,3.42349815368652,65.7735061645508,2.17199325561523,3.43665051460266,65.5146026611328,2.10313749313354,3.40644407272339,65.2755355834961,2.05098104476929, 2.90480470657349,63.5421180725098,1.35813617706299,2.5005624294281,63.3518524169922,1.66328740119934,2.97416019439697,63.6044006347656,-0.43002325296402,3.04686117172241,63.9600830078125,-0.435582518577576,2.91562366485596,63.574951171875,0.32672530412674,2.86793184280396,63.0844421386719,0.314177632331848,2.88664984703064,62.5844268798828,0.291136026382446,3.26654148101807,64.8482055664063,1.78163802623749,3.21196222305298,64.8382339477539,1.65136682987213,2.5964367389679,64.3092498779297,3.22612452507019,3.11429333686829,64.3584213256836,2.21885251998901,2.96850609779358,64.2104949951172,2.12399363517761,2.93605613708496,64.1646041870117,2.3562159538269,2.7786602973938,66.5487518310547,4.20106410980225,2.79840517044067,66.7352828979492,4.35227203369141,2.8922290802002,68.5589828491211,4.74051427841187,2.88598251342773,68.7056045532227,4.64938116073608,2.65196180343628,65.2107467651367,3.4514377117157,2.66340517997742,65.3679428100586,3.5083863735199,2.81611132621765,65.2712554931641,3.22248196601868,2.83819365501404,65.4268035888672,3.29421615600586,2.83722853660584,65.595947265625,3.34694361686707,2.67875480651855,65.5446090698242,3.5787661075592,0.938983798027039,67.442985534668,5.49931669235229,1.68217599391937,67.8480529785156,4.50526905059814,1.58377194404602,67.7971115112305,4.58396673202515,3.06999850273132,69.7514114379883,3.80261707305908,3.03709864616394,69.8179168701172,3.96939754486084,2.99018239974976,69.8608093261719,4.12396812438965,3.88476777076721,67.6038284301758,1.9052711725235,3.01904988288879,68.7829437255859,4.34590721130371,3.07396841049194,68.7755737304688,4.16320896148682,3.2163782119751,64.5644302368164,2.31587195396423,3.25280594825745,64.5963668823242,2.11069822311401,2.78232908248901,64.0797348022461,2.77608585357666,2.87242197990417,64.1171722412109,2.57528614997864,2.76459431648254,64.0357437133789,2.5068883895874,0.882707834243774,65.685432434082,5.30712938308716,2.95145273208618,68.2043228149414,4.61653709411621,2.87497973442078,68.3008270263672,4.81145000457764,2.99823188781738,68.1043395996094,4.45682430267334, 0.903877377510071,66.8075485229492,5.97392654418945,3.03742647171021,68.507209777832,4.50008964538574,3.052649974823,68.3731079101563,4.57572746276855,1.35172784328461,68.1202011108398,5.33629560470581,1.47764658927917,68.1094818115234,5.31640863418579,0.76178765296936,65.7061004638672,5.31858825683594,0.824543237686157,65.6856994628906,5.32374954223633,1.34113502502441,63.1208915710449,3.45176196098328,1.06281006336212,63.0850524902344,3.45769143104553,3.0163848400116,68.0236511230469,4.37825489044189,3.0504937171936,68.0117492675781,4.33377456665039,2.45020818710327,66.7837905883789,4.61369800567627,2.50105261802673,66.6580581665039,4.54786014556885,0.871286630630493,65.6000442504883,5.2877836227417,0.786885976791382,65.7970123291016,5.37989950180054,3.39077138900757,67.8872375488281,3.30874085426331,3.32414698600769,67.8638610839844,3.53729343414307,3.27949452400208,67.6229629516602,3.69277310371399,3.39195346832275,67.6552505493164,3.43329548835754,3.45178842544556,67.695068359375,3.22621893882751,2.68379044532776,62.1163673400879,1.00694859027863,2.79847860336304,62.7099494934082,0.950812101364136,2.92852449417114,63.2620849609375,0.910539209842682,1.73240518569946,63.5957183837891,4.44465970993042,0.896305441856384,65.3989562988281,5.28903579711914,1.31565749645233,66.8515472412109,5.29576349258423,3.00862669944763,63.7789497375488,0.875749468803406,2.13105821609497,60.8295783996582,1.85507833957672,2.29136896133423,61.3581352233887,1.72197782993317,1.79348528385162,61.3115463256836,2.0579137802124,1.61798405647278,60.8387413024902,2.17369174957275,0.888431429862976,65.2999801635742,5.30810165405273,1.71592605113983,69.0375595092773,5.2174654006958,1.49462974071503,68.2459716796875,5.42839813232422,1.36418902873993,68.2601013183594,5.4384617805481,2.94529867172241,64.0302200317383,0.325349271297455,3.04379439353943,65.6097946166992,3.24336194992065,3.04610061645508,65.4405670166016,3.16522622108459,3.07062745094299,65.2881851196289,3.12842082977295,3.11933541297913,67.3169555664063,4.01220989227295,3.1252748966217,67.4251403808594,4.00630378723145, 3.06806111335754,67.3184967041016,4.11027336120605,1.75952875614166,68.1481475830078,5.08462238311768,1.88930642604828,68.1446228027344,5.05054712295532,1.76840484142303,68.1653518676758,5.10388898849487,2.99754190444946,67.5693283081055,4.18719387054443,3.12188291549683,67.479606628418,4.05562591552734,3.10169529914856,67.5793075561523,4.05587005615234,3.31551313400269,66.9119186401367,3.41480135917664,3.40057134628296,67.0184936523438,3.25194454193115,3.3433620929718,67.3507537841797,3.63195514678955,3.30712413787842,67.1692810058594,3.66730928421021,3.62881422042847,66.8468246459961,1.67702209949493,3.67381048202515,66.8385696411133,1.69646668434143,3.65914416313171,66.7378997802734,1.63139164447784,3.60834813117981,66.7475128173828,1.61311852931976,3.68108868598938,66.820442199707,1.7398294210434,3.66513466835022,66.7122192382813,1.6777651309967,3.57989692687988,66.4964752197266,1.61093735694885,3.58889770507813,66.5416641235352,1.58230996131897,3.51673626899719,66.3922271728516,1.59728240966797,3.54323554039001,66.521728515625,1.57222628593445,3.39948201179504,66.0840225219727,2.22889304161072,3.4275176525116,66.0860824584961,2.01125836372375,3.42608070373535,66.1682968139648,1.85465395450592,3.02907490730286,65.8121948242188,3.32732510566711,2.87969517707825,65.7975540161133,3.43260478973389,1.95452749729156,64.9040222167969,4.5913233757019,1.9281359910965,65.1237182617188,4.64037895202637,3.08949017524719,65.0258865356445,3.021568775177,2.67047142982483,65.7588806152344,3.65310835838318,3.12394952774048,64.4121551513672,-0.425189852714539,2.14358901977539,64.9229049682617,4.41373920440674,2.11716294288635,65.1423263549805,4.47160339355469,3.21812272071838,64.6609420776367,1.7886575460434,3.25343632698059,64.6347808837891,1.93096566200256,3.31948947906494,64.8364486694336,1.96334993839264,1.27868580818176,68.5230865478516,5.48906517028809,3.08508467674255,64.7949295043945,1.45506238937378,3.02310347557068,66.2411422729492,3.48426175117493,2.94506549835205,66.185188293457,3.66328954696655,3.43415141105652,66.1334075927734,1.70569670200348, 3.40694761276245,66.0004730224609,1.81116831302643,3.42804837226868,65.9448547363281,1.70346283912659,3.75594592094421,66.8347854614258,0.707662761211395,3.84257817268372,67.1626129150391,0.687342405319214,3.99951863288879,67.0531005859375,0.404798299074173,3.89515900611877,66.6228866577148,0.451429814100266,2.89523768424988,67.8790054321289,4.44507217407227,2.87735891342163,67.9539031982422,4.47966957092285,3.44882583618164,67.3555145263672,3.33902382850647,3.23236560821533,68.1426696777344,3.73330855369568,3.12400317192078,68.4818954467773,3.87935709953308,3.17323422431946,68.5466842651367,3.73494172096252,3.17530918121338,68.6816024780273,3.91267061233521,3.11129069328308,68.6374282836914,4.03024244308472,3.44718813896179,67.8984298706055,3.05363130569458,3.49256610870361,67.7516098022461,2.98532676696777,4.19071578979492,68.0595779418945,0.595690429210663,4.13797330856323,68.1803588867188,0.767984509468079,4.07051801681519,68.0346984863281,0.785980641841888,1.21203315258026,68.0851211547852,5.18104791641235,1.36357915401459,68.0735702514648,5.15914058685303,3.15585994720459,64.651237487793,1.66438138484955,3.00136947631836,64.5917129516602,1.46235930919647,2.96417832374573,64.5486755371094,1.38484394550323,1.9572046995163,65.494743347168,4.64888525009155,3.87331128120422,67.4057464599609,1.86234366893768,3.94303107261658,67.5915451049805,1.86879432201386,4.02576684951782,67.7782363891602,1.8133624792099,3.96108222007751,67.7949905395508,1.83986985683441,3.44512820243835,66.4780807495117,1.56252491474152,3.43452668190002,66.544075012207,1.56754410266876,4.16763210296631,67.3066482543945,0.752300679683685,4.20861339569092,67.4810333251953,0.767211616039276,4.22824621200562,67.6161880493164,0.803533613681793,4.31191396713257,67.4798049926758,0.92854231595993,4.27010297775269,67.3647155761719,0.873295187950134,4.22759103775024,67.2292633056641,0.857036769390106,3.96591925621033,67.3817825317383,1.17504632472992,3.84721398353577,67.2841262817383,1.23387622833252,3.73140645027161,67.1730880737305,1.3115656375885,3.84368395805359,67.1692886352539,1.13736081123352, 3.9296715259552,67.2579803466797,1.06381285190582,4.02764272689819,67.3290405273438,1.01120853424072,3.62845778465271,65.8809585571289,1.46909356117249,3.58848738670349,66.1250152587891,1.52465927600861,3.46977925300598,65.8928146362305,1.62517940998077,3.54804134368896,65.7373275756836,1.51209759712219,3.69628596305847,65.9059600830078,1.3513650894165,3.72170567512512,66.0722503662109,1.36401319503784,3.63475179672241,65.7507247924805,1.33598518371582,3.80204892158508,67.4645614624023,1.6423020362854,3.81955742835999,67.4326095581055,1.54928922653198,3.89767050743103,67.5244903564453,1.53833293914795,3.84696125984192,67.4156188964844,1.44847130775452,3.98500466346741,67.5406188964844,1.42541027069092,3.5180983543396,66.2538375854492,1.59009373188019,3.46437072753906,66.3058853149414,1.68118560314178,3.52468132972717,66.3413772583008,1.55722069740295,3.48903250694275,66.0722503662109,1.62239384651184,3.5735285282135,66.2663726806641,1.51193714141846,3.35272622108459,65.8405303955078,1.48823237419128,3.39298939704895,65.8021926879883,1.53717470169067,3.41420316696167,65.7718048095703,1.38643348217011,3.46366572380066,65.758544921875,1.45361733436584,3.44315075874329,65.7761459350586,1.59451007843018,4.12264156341553,67.9515380859375,1.69186997413635,4.04694747924805,67.9766082763672,1.70980203151703,4.21951961517334,68.0857162475586,1.5204074382782,4.13125371932983,68.1192398071289,1.530766248703,4.36612987518311,68.1797943115234,1.10023164749146,4.25924062728882,68.2200164794922,1.09791100025177,4.1071252822876,68.2164459228516,1.04108142852783,4.32454586029053,68.07080078125,0.573556303977966,4.3097767829895,67.9047622680664,0.469022572040558,4.31919193267822,68.1753234863281,0.716215848922729,4.42688226699829,68.1401824951172,0.726928353309631,4.43175458908081,68.043342590332,0.591847240924835,4.41548633575439,67.8843612670898,0.494797825813293,4.30114936828613,67.3556518554688,0.410873055458069,4.20437002182007,67.3710784912109,0.377230167388916,4.27088451385498,67.6760330200195,0.405537307262421,4.37260341644287,67.6578216552734,0.435535669326782, 3.8642098903656,65.9823837280273,0.817893385887146,3.77061247825623,65.9289932250977,0.778227150440216,3.87505173683167,66.1986083984375,0.589296579360962,3.96625018119812,66.2316131591797,0.632395684719086,3.69940090179443,66.0262451171875,0.751195728778839,3.79279160499573,66.2544708251953,0.578169524669647,3.9935986995697,66.5801467895508,0.438086152076721,4.08373022079468,66.5898590087891,0.481809765100479,3.54882621765137,65.7025451660156,1.30097436904907,3.47937512397766,65.772590637207,1.25227952003479,3.581782579422,66.3640899658203,0.962329745292664,3.96330523490906,67.5897827148438,1.79621553421021,4.04697608947754,67.7592926025391,1.7442946434021,3.89645266532898,67.4201278686523,1.79242742061615,3.8892285823822,67.4412078857422,1.7214183807373,3.94782614707947,67.5932006835938,1.7199592590332,4.02466678619385,67.7432250976563,1.66987860202789,4.1498556137085,67.9110260009766,1.63450610637665,4.2531623840332,68.0256195068359,1.48009717464447,4.12253856658936,67.8726043701172,1.5736631155014,4.22431135177612,67.9674606323242,1.43996977806091,3.6584689617157,67.0526580810547,1.73420250415802,3.70589375495911,67.2161331176758,1.85662436485291,3.77640986442566,67.0984420776367,1.69524645805359,3.81549096107483,67.2351303100586,1.79819941520691,3.84403109550476,67.2678833007813,1.73510146141052,3.81034016609192,67.1487045288086,1.63960492610931,3.81980538368225,67.2020645141602,1.58304333686829,3.8460910320282,67.3059692382813,1.67176628112793,3.62339448928833,66.9600143432617,1.55528903007507,3.54900121688843,66.8945693969727,1.52178120613098,3.6070408821106,66.8924865722656,1.46785020828247,3.68474149703979,66.9038314819336,1.43001317977905,3.76875758171082,66.9739532470703,1.43453121185303,3.76291394233704,67.0144805908203,1.57237350940704,3.80492234230042,67.0476531982422,1.38833773136139,3.79968523979187,67.0783081054688,1.52131009101868,3.81678700447083,67.1221084594727,1.34357035160065,3.81176257133484,67.1440734863281,1.46728658676147,3.50874066352844,66.8785171508789,1.61766111850739,3.4727201461792,66.7689819335938,1.55034828186035, 3.51999497413635,66.7786865234375,1.45502161979675,3.5054178237915,66.8579483032227,1.6944785118103,3.46841979026794,66.7569046020508,1.63060021400452,3.58814311027527,66.776741027832,1.40819585323334,3.807368516922,66.9411163330078,1.14656984806061,3.84839510917664,67.056884765625,1.12197256088257,3.43414974212646,66.544807434082,1.51670002937317,3.44125318527222,66.4587707519531,1.53559422492981,3.47409510612488,66.4686737060547,1.48404669761658,3.4670684337616,66.5475540161133,1.45423448085785,4.38141489028931,67.7970275878906,0.625199139118195,4.34833574295044,67.6143646240234,0.588272631168365,4.38872814178467,67.6345138549805,0.510305225849152,4.42740917205811,67.841178894043,0.558445572853088,4.2903265953064,67.3601684570313,0.577212631702423,4.32288837432861,67.3539276123047,0.49212783575058,4.38653898239136,67.9980850219727,0.787152171134949,4.38902473449707,67.9229583740234,0.688140153884888,4.43982934951782,67.9834518432617,0.637882053852081,4.43614435195923,68.0685043334961,0.75418084859848,4.23430633544922,67.7607574462891,0.679528534412384,4.24083995819092,67.8800277709961,0.740421533584595,4.23906660079956,67.9548034667969,0.840360522270203,4.19893836975098,67.6024551391602,0.648272752761841,4.14131736755371,67.3782043457031,0.647528231143951,4.23399543762207,67.748893737793,0.875052452087402,4.23211860656738,67.8589401245117,0.968259572982788,4.27247667312622,67.753776550293,1.0994166135788,4.31989812850952,67.6349105834961,0.991671323776245,4.02612638473511,67.1929244995117,0.955600678920746,3.97565674781799,67.0437240600586,0.957537412643433,3.90903830528259,66.8881912231445,0.988696575164795,4.06195783615112,66.8649139404297,0.899783492088318,4.15113639831543,67.0703430175781,0.85826051235199,4.23475360870361,67.6988067626953,1.12792015075684,4.17958831787109,67.5111541748047,1.15129017829895,3.79353785514832,67.3299026489258,1.47933793067932,3.81423401832581,67.3028945922852,1.36028480529785,3.78962540626526,67.3689498901367,1.5551506280899,3.90460419654846,67.3995056152344,1.31119799613953,3.75604748725891,67.24462890625,1.52793085575104, 3.7315526008606,67.1935272216797,1.42468738555908,3.77796149253845,67.3406295776367,1.60282015800476,3.87115454673767,67.7310028076172,1.6006715297699,3.8330671787262,67.5994567871094,1.63931965827942,3.99071335792542,67.9273452758789,1.4354612827301,3.91644883155823,67.8448715209961,1.53315281867981,4.22433996200562,67.9758987426758,1.1544588804245,4.37294626235962,68.028694152832,1.10267627239227,4.39809846878052,68.1035537719727,1.09824275970459,4.42650461196899,68.103515625,0.912913143634796,4.40633726119995,68.1802520751953,0.900287568569183,4.38934421539307,68.0283737182617,0.932290434837341,3.93147158622742,66.1487808227539,0.884068429470062,3.85331177711487,66.0361099243164,1.0461950302124,3.78953862190247,65.8569183349609,0.989757895469666,3.96036219596863,66.3272476196289,0.950800895690918,3.87919926643372,66.2271347045898,1.10150444507599,4.0231728553772,66.348518371582,0.708833396434784,4.03828191757202,66.4771881103516,0.78782194852829,4.12526702880859,66.6488571166992,0.565632522106171,4.12027359008789,66.7189025878906,0.653512239456177,3.99896168708801,66.7890167236328,0.74941873550415,3.94511961936951,66.5834579467773,0.875204086303711,3.89214205741882,66.4620132446289,1.02080261707306,3.65220642089844,66.1826477050781,1.42512059211731,3.6650333404541,66.3706741333008,1.42390918731689,3.8919985294342,67.7197341918945,1.52481913566589,4.08569812774658,67.5328598022461,1.28870582580566,4.10027456283569,67.7684555053711,1.27417016029358,4.15168952941895,67.8459701538086,1.24676203727722,3.9676787853241,67.8103256225586,1.41776275634766,3.99032139778137,66.7081985473633,0.999640047550201,3.92440438270569,66.5994186401367,1.12194168567657,3.82049965858459,66.3747329711914,1.15423321723938,3.85150742530823,66.5263061523438,1.23127043247223,3.55067896842957,66.5179595947266,1.42015624046326,3.77352738380432,66.8165588378906,1.15687823295593,3.78132176399231,66.7271575927734,1.16200530529022,3.8440535068512,66.7906646728516,1.06329357624054,3.72218108177185,66.7941589355469,1.26367807388306,3.72475647926331,66.6822204589844,1.25772345066071, 3.7447817325592,66.8978118896484,1.28288722038269,4.10149478912354,67.1040878295898,0.743085324764252,4.07173776626587,67.109619140625,0.676203727722168,4.21170806884766,67.068962097168,0.589853882789612,4.23256063461304,67.0365829467773,0.500688910484314,4.2025899887085,67.0144882202148,0.415823400020599,4.11017560958862,67.0213012695313,0.376402735710144,3.61900401115417,67.0411911010742,1.7905125617981,4.22887229919434,67.9261016845703,1.06965661048889,3.90949845314026,67.8031692504883,1.50299596786499,4.04360151290894,67.2837524414063,0.968169152736664,3.52845144271851,66.807975769043,1.99678945541382,3.49707794189453,66.6140747070313,1.96261894702911,1.38582074642181,70.3855285644531,5.0009617805481,3.60986256599426,66.6596984863281,1.74299871921539,3.63856530189514,66.7910919189453,1.79739606380463,3.55062937736511,66.4580001831055,1.65329933166504,1.19366502761841,65.2249298095703,4.85610389709473,1.0756311416626,65.1947250366211,4.9448094367981,1.08035385608673,65.2848892211914,4.93593168258667,1.20033538341522,65.3307418823242,4.86212158203125,0.934173107147217,65.275016784668,4.98282194137573,0.931443929672241,65.1937103271484,4.99565315246582,0.733690142631531,65.273567199707,4.97549915313721,0.728435397148132,65.1870880126953,4.97911643981934,1.36970221996307,65.2229843139648,4.72263145446777,1.26224589347839,65.2212066650391,4.81006860733032,1.34426963329315,65.4023818969727,4.81390333175659,1.48638927936554,65.4760208129883,4.74349927902222,0.87395191192627,65.2709426879883,4.98687171936035,0.871021270751953,65.1897125244141,4.9949426651001,1.40152037143707,64.8109817504883,4.70733404159546,1.41142177581787,64.882698059082,4.72538137435913,1.47247123718262,64.828369140625,4.59658479690552,1.47469854354858,64.7096939086914,4.5597128868103,1.49344825744629,64.6655349731445,4.56101655960083,1.51618897914886,64.7853393554688,4.55397367477417,1.69742560386658,64.8928680419922,4.15867900848389,1.67222082614899,64.7719802856445,4.31696891784668,1.6290580034256,64.8013305664063,4.36196804046631,1.57378756999969,64.9139556884766,4.40134048461914, 1.55398416519165,64.8053512573242,4.46878147125244,1.47806465625763,64.9342193603516,4.51615619659424,1.71596801280975,64.5329208374023,4.18517351150513,1.70165550708771,64.2728500366211,4.13927602767944,1.59862303733826,64.0150375366211,4.11862373352051,1.58835256099701,64.6118316650391,4.4310302734375,2.16316890716553,65.0206298828125,2.56838035583496,1.96401083469391,64.9684829711914,3.39649748802185,1.9987086057663,65.3854217529297,3.37620663642883,2.16594982147217,65.4886856079102,2.55456161499023,1.84000194072723,65.2910003662109,4.03854179382324,1.90293252468109,65.7236785888672,4.02813720703125,2.0213098526001,65.8256301879883,3.36226153373718,2.13319611549377,65.9246063232422,2.55418252944946,1.79898393154144,64.1050491333008,3.66027426719666,1.79431402683258,63.91064453125,3.43513488769531,1.89816915988922,64.2348022460938,3.42101287841797,1.96954953670502,64.0471496582031,2.82804870605469,2.09718370437622,65.3103561401367,4.51487350463867,2.30125498771667,64.9214782714844,4.33400440216064,2.42373561859131,64.8997650146484,4.166428565979,2.52821660041809,64.9293899536133,3.81001329421997,2.57886266708374,64.9627914428711,3.6042468547821,2.8619487285614,65.1285095214844,3.20917820930481,2.63870978355408,65.0624465942383,3.40243268013,3.07463717460632,65.1601791381836,3.07438635826111,3.18227171897888,65.2159042358398,2.85541558265686,2.66716241836548,67.9635620117188,4.63999700546265,2.70216584205627,67.9023666381836,4.55283260345459,2.73243880271912,67.8296508789063,4.47092199325562,2.30487561225891,68.0841827392578,4.85247802734375,2.43493890762329,68.0320129394531,4.79486036300659,2.62153291702271,67.8830718994141,4.63614368438721,2.66734838485718,67.8346939086914,4.57017517089844,2.69487380981445,67.781364440918,4.51345729827881,2.75075697898865,67.7393798828125,4.41219806671143,2.71137380599976,67.7354278564453,4.45894527435303,1.4422105550766,68.006217956543,4.83119010925293,1.57590889930725,68.0727996826172,4.84237146377563,4.24951314926147,67.9796752929688,0.988760828971863,4.14486789703369,68.2400207519531,0.891078293323517, 4.29771661758423,68.2195129394531,0.894079685211182,3.69419884681702,65.7953414916992,0.954218089580536,3.62183690071106,65.8902282714844,0.920439660549164,1.26706755161285,66.6091918945313,5.56980037689209,1.27517330646515,66.7994613647461,5.39773750305176,1.09651041030884,67.0683746337891,5.49785852432251,1.11143863201141,67.1923751831055,5.40110492706299,2.7501916885376,66.9078903198242,4.41789484024048,2.96971368789673,67.0416793823242,4.24683427810669,2.90063047409058,67.1711959838867,4.28111696243286,2.85137224197388,67.1216125488281,4.30856609344482,1.16678643226624,63.2754364013672,4.54892730712891,1.09948623180389,63.1225090026855,4.3932728767395,3.52014875411987,66.5681915283203,1.41023874282837,2.81077241897583,67.5875396728516,4.35087585449219,2.84671950340271,67.6490783691406,4.36929512023926,2.91685771942139,67.739143371582,4.34629249572754,2.14950728416443,68.2113342285156,5.06157875061035,1.88744533061981,67.7128448486328,4.7761607170105,1.90658605098724,67.7306594848633,4.72575330734253,2.66684770584106,67.666862487793,4.40541458129883,2.63094758987427,67.6649475097656,4.37922382354736,2.64179491996765,67.6679153442383,4.34329414367676,2.63837647438049,67.6569290161133,4.35390377044678,2.67725443840027,67.6459045410156,4.37598991394043,2.68379712104797,67.645393371582,4.36187076568604,2.70340514183044,67.6281814575195,4.39374732971191,2.68375492095947,67.6604156494141,4.36853933334351,2.63108110427856,67.6936798095703,4.37489652633667,2.67721843719482,67.6891937255859,4.39469718933105,2.66379165649414,67.723503112793,4.43931007385254,2.64891314506531,67.7717742919922,4.49245023727417,2.60378289222717,67.7730255126953,4.47100353240967,2.62222838401794,67.7251586914063,4.41901969909668,2.62578678131104,67.8282318115234,4.544997215271,2.58604288101196,67.8818740844727,4.60464668273926,2.55071640014648,67.8828201293945,4.57306337356567,2.58477163314819,67.8289108276367,4.51952791213989,2.41274118423462,68.0263519287109,4.7476634979248,2.39053511619568,68.0205841064453,4.70046854019165,2.29294395446777,68.0722198486328,4.79652309417725, 2.16190576553345,68.1005783081055,4.81578254699707,2.16114211082459,68.0834503173828,4.75154447555542,2.28100919723511,68.0602035522461,4.74056959152222,2.02676129341125,68.1003265380859,4.79745244979858,2.03602194786072,68.0820999145508,4.72639274597168,1.89723575115204,68.0686798095703,4.75530529022217,1.91270339488983,68.0529327392578,4.67381286621094,1.79788935184479,67.9880752563477,4.60268306732178,1.92080700397491,68.1887969970703,5.105628490448,1.93564641475677,68.258659362793,5.19911479949951,2.35538291931152,69.3204345703125,4.8226203918457,2.7937285900116,67.7508544921875,4.45168733596802,2.88425230979919,67.3557815551758,4.30462741851807,2.96637773513794,67.3155670166016,4.22542715072632,3.03101301193237,67.2631759643555,4.13667774200439,2.98313593864441,67.367919921875,4.22117328643799,2.8918879032135,67.4051818847656,4.30441951751709,2.82269477844238,67.8825607299805,4.52608156204224,2.82237696647644,67.8314743041992,4.48638391494751,2.84394216537476,67.7091445922852,4.39417934417725,2.76129055023193,67.5614013671875,4.37353801727295,2.81881189346313,67.542121887207,4.35720634460449,2.89298915863037,67.5231018066406,4.31164932250977,2.74356412887573,67.5781784057617,4.37403583526611,2.7083146572113,67.5445709228516,4.41160869598389,2.72057390213013,67.5724487304688,4.39044380187988,2.73355674743652,67.5681076049805,4.3847131729126,2.72890734672546,67.5457611083984,4.39651870727539,2.78715944290161,67.4943618774414,4.36204719543457,2.83767509460449,67.4912948608398,4.32730150222778,2.90921020507813,67.4769439697266,4.26797485351563,1.46171438694,64.871826171875,4.57088136672974,1.46168184280396,64.8623657226563,4.52993297576904,1.45342350006104,64.8918609619141,4.68999195098877,1.56209766864777,65.5174102783203,4.69710302352905,1.4363579750061,65.2145614624023,4.6585807800293,1.65252137184143,65.5645446777344,4.60052061080933,1.52217984199524,65.2129592895508,4.55981159210205,1.39736211299896,64.9676742553711,4.60638952255249,1.77157056331635,65.6157836914063,4.40959930419922,1.63668429851532,65.2200317382813,4.40786361694336, 0.726122140884399,65.1174240112305,5.19929122924805,1.13462257385254,65.1242065429688,5.11881446838379,1.27412569522858,65.0849456787109,5.03397226333618,1.36068820953369,65.0242233276367,4.91986703872681,1.5302517414093,64.8403625488281,4.81787014007568,1.49507963657379,64.8809509277344,4.87410831451416,1.46148920059204,64.9282989501953,4.8311505317688,1.43284630775452,64.9356536865234,4.80183410644531,1.40760779380798,64.9272537231445,4.76524639129639,1.39444208145142,64.8453903198242,4.74579191207886,1.5011979341507,64.1316986083984,4.44672012329102,1.55279195308685,64.7089920043945,4.52026653289795,1.58199083805084,64.7010955810547,4.49964618682861,1.70078897476196,64.7076950073242,4.27974700927734,1.64948379993439,64.6882553100586,4.37039136886597,1.85476243495941,64.6218185424805,3.94913387298584,1.58547294139862,64.7184600830078,4.49313879013062,1.42990434169769,64.9447860717773,4.81173467636108,1.25507736206055,66.4016342163086,5.6686840057373,1.24616432189941,66.4787979125977,5.64807605743408,0.97510838508606,66.1322402954102,5.9370002746582,0.987578868865967,66.1314163208008,5.88433408737183,0.935709834098816,66.1356201171875,6.00360631942749,0.844236493110657,66.1403579711914,6.04201221466064,1.00607120990753,63.0317497253418,4.32509899139404,1.40227580070496,63.0594825744629,3.96019172668457,1.25259900093079,62.9927406311035,3.91761565208435,1.01959240436554,62.9540824890137,3.88085770606995,0.780723452568054,62.9210891723633,3.85335659980774,0.690417647361755,63.0074348449707,4.45033359527588,0.882281303405762,63.0210838317871,4.43909072875977,2.49059963226318,64.2022399902344,3.29887342453003,2.43080735206604,64.0347061157227,3.29224872589111,2.17769908905029,63.5968742370605,3.21712899208069,2.27928495407104,63.7407913208008,3.22888469696045,1.66551721096039,63.4309310913086,4.4442834854126,1.5459178686142,63.2607612609863,4.28567314147949,1.41883444786072,63.139892578125,4.14798021316528,1.31143248081207,63.0501441955566,4.07752418518066,1.15474736690521,62.9899597167969,4.0333776473999,0.905233979225159,62.9417953491211,3.99692273139954, 0.669827342033386,62.909797668457,3.96174693107605,2.22140121459961,63.7321739196777,3.49364185333252,2.35822939872742,63.8762016296387,3.26734066009521,1.66536605358124,65.7555770874023,4.83231115341187,1.24421012401581,65.8331680297852,5.21903419494629,1.2415417432785,65.8225250244141,5.17691421508789,1.94282019138336,65.3339538574219,4.64607572555542,1.38889932632446,64.7831268310547,5.05037975311279,1.25069510936737,64.7823028564453,5.21552419662476,1.45800125598907,64.8723449707031,4.52737236022949,1.97246038913727,64.5256500244141,3.32755517959595,2.10083770751953,64.4759292602539,2.59164428710938,2.70098495483398,63.9992523193359,2.42093873023987,1.47236037254334,68.0681533813477,5.15111064910889,1.67923533916473,68.144905090332,5.13741636276245,1.36034119129181,66.582389831543,5.42577075958252,1.22313511371613,67.8263702392578,4.87110996246338,1.41561686992645,67.4029159545898,4.80356073379517,1.24386429786682,67.3269653320313,5.16441249847412,1.28025853633881,67.2014999389648,5.19281053543091,2.18041920661926,68.451286315918,5.21900701522827,2.60483956336975,68.5525817871094,5.06904554367065,2.90485191345215,68.4689865112305,4.79139518737793,3.01555633544922,68.2925415039063,4.58393335342407,3.03188824653625,68.0995864868164,4.40577125549316,3.07575488090515,68.1117324829102,4.32803773880005,3.11300373077393,68.1376419067383,4.27170753479004,0.951111435890198,67.8357391357422,5.28150749206543,1.03982937335968,67.8353805541992,5.23061275482178,1.1349960565567,67.8375625610352,5.02568531036377,1.24151837825775,67.8561248779297,4.87322998046875,1.39355981349945,67.7509155273438,4.78209352493286,1.0940203666687,67.8359756469727,5.13545799255371,2.80376482009888,67.4326477050781,4.36306619644165,2.88349223136902,67.2817993164063,4.30629730224609,2.94912886619568,67.2709045410156,4.24452877044678,2.98852252960205,67.2110366821289,4.19697189331055,2.77813315391541,67.3302536010742,4.38874912261963,2.80464458465576,67.3863372802734,4.357825756073,2.70970630645752,67.5081481933594,4.41629791259766,2.68796753883362,67.5142364501953,4.43299722671509, 1.6923543214798,68.0826873779297,4.85076808929443,1.07724368572235,66.2140274047852,5.78987312316895,0.990124940872192,66.1395797729492,5.85217237472534,0.957006216049194,66.0988311767578,5.85218954086304,0.955944538116455,66.0326766967773,5.69455099105835,1.37360000610352,65.8612747192383,5.2225341796875,1.30291390419006,65.8606109619141,5.23633575439453,1.28696703910828,65.9717864990234,5.26826047897339,1.2058436870575,66.1310348510742,5.20236778259277,1.2073700428009,66.081657409668,5.14830446243286,1.15509605407715,66.0897750854492,5.2003436088562,3.07375311851501,67.1264953613281,4.12566518783569,3.10644316673279,67.2067260742188,4.03005695343018,3.01146101951599,67.4560241699219,4.16344738006592,3.26566362380981,67.3137969970703,3.85877799987793,3.23967552185059,67.3935546875,3.79584240913391,3.00219583511353,67.4986190795898,4.20324993133545,3.23345947265625,67.4361953735352,3.82250928878784,3.47227358818054,67.1351623535156,3.1978120803833,3.20911312103271,67.6038055419922,3.84602642059326,1.38017463684082,67.8658065795898,4.78988122940063,1.04489850997925,67.6455078125,5.28492164611816,0.946268200874329,67.6453552246094,5.33524036407471,1.11085093021393,67.6494064331055,5.18183755874634,1.3418071269989,67.3768310546875,4.97024059295654,1.24413287639618,67.4093322753906,5.11822652816772,1.18746721744537,67.4170608520508,5.1835298538208,1.15831828117371,67.3799209594727,5.24726247787476,2.03133249282837,68.5468063354492,5.26267957687378,2.20468068122864,68.7326507568359,5.18999338150024,1.96770107746124,68.4115371704102,5.29732751846313,1.24037265777588,68.9764862060547,5.24644804000854,1.93664562702179,68.8729934692383,5.20075178146362,2.08420419692993,68.9143524169922,5.08791589736938,1.66595792770386,69.2999420166016,5.27965211868286,2.69618439674377,69.3363647460938,4.62717247009277,1.21942925453186,69.2810668945313,5.24096918106079,2.30219793319702,70.5151748657227,4.51481103897095,1.65603744983673,65.8645401000977,4.82821130752563,1.5150705575943,65.2759857177734,4.97173738479614,1.61782228946686,65.1860046386719,4.88035678863525, 2.83090734481812,67.7513885498047,4.43764114379883,2.90546679496765,67.8018112182617,4.39182186126709,3.05201172828674,67.8971252441406,4.29138422012329,3.07350969314575,67.9136047363281,4.25318050384521,3.08565521240234,68.0720443725586,4.28964042663574,3.09590840339661,67.9019241333008,4.18263244628906,3.12226796150208,68.0895614624023,4.23420143127441,3.15805292129517,67.9133453369141,4.03698539733887,1.85307800769806,69.3176803588867,5.19680690765381,1.95780122280121,69.5691375732422,5.11974716186523,2.00819277763367,69.8451461791992,4.99117994308472,2.05755305290222,70.1033020019531,4.89759159088135,1.51351356506348,68.9728775024414,5.34801340103149,3.17292428016663,69.0089263916016,3.65988326072693,3.24468231201172,69.3821563720703,3.10906028747559,3.19405722618103,69.4203338623047,3.30144023895264,3.1433367729187,69.4741287231445,3.5175678730011,3.16293168067932,68.8886337280273,3.85672426223755,3.23307037353516,68.7058258056641,3.79092526435852,1.34411311149597,68.3689804077148,5.45315217971802,1.47962760925293,67.904182434082,4.78232955932617,1.56587851047516,67.9845123291016,4.78964614868164,2.32223176956177,66.6271820068359,4.62494134902954,2.52399301528931,66.5070343017578,4.41808605194092,3.18077445030212,68.1741943359375,4.13968563079834,3.18250513076782,61.6550064086914,0.15494367480278,2.97731566429138,62.090576171875,0.236494928598404,2.63404870033264,61.4835586547852,1.09880757331848,2.63750290870667,60.7715454101563,1.24464046955109,1.15286767482758,59.9498062133789,2.77086806297302,1.34675312042236,60.1751556396484,2.46136975288391,0.707067012786865,60.1917724609375,2.30265927314758,1.93906819820404,59.9140472412109,2.56447672843933,1.31039726734161,59.7857666015625,2.86505627632141,3.30667567253113,60.0582466125488,1.52897572517395,3.21281981468201,60.7512435913086,0.686783790588379,2.83494830131531,60.101676940918,1.82382214069366,2.0032696723938,60.1697044372559,2.2233898639679,2.95462036132813,59.8311195373535,2.23044967651367,3.44337105751038,61.3207168579102,0.0308288335800171,3.00886535644531,64.578254699707,-1.40568685531616, 2.83613109588623,64.6232986450195,-1.88293862342834,3.03651714324951,64.1986770629883,-1.29441452026367,2.85587859153748,64.2701568603516,-1.88409495353699,2.3250470161438,64.3217086791992,-2.30119037628174,2.19409990310669,64.6903381347656,-2.30471992492676,1.47786962985992,64.7402801513672,-2.5796685218811,1.55335366725922,64.3825149536133,-2.64062190055847,0.9145188331604,64.7542877197266,-2.74038743972778,3.18349647521973,64.4910278320313,-0.831904411315918,3.10196471214294,64.0538482666016,-0.768124938011169,3.15863394737244,63.9126052856445,-1.1659996509552,2.94038534164429,64.0237808227539,-1.82171845436096,2.44409084320068,64.0830612182617,-2.38203501701355,1.64424133300781,64.1150970458984,-2.65511178970337,3.04022526741028,63.7449569702148,-0.723660707473755,3.83235144615173,67.9229354858398,1.56775510311127,3.77065491676331,67.9044799804688,1.65262651443481,3.95984673500061,67.9680023193359,1.12290859222412,3.83990359306335,67.9484176635742,1.16654276847839,4.05559206008911,68.0735244750977,0.94489711523056,4.04066514968872,68.1123504638672,1.10381245613098,3.96631550788879,67.9070129394531,0.998717308044434,3.69450688362122,67.8655624389648,0.79612410068512,3.64366936683655,67.7518081665039,0.54340922832489,3.59573769569397,67.5238571166992,0.356896281242371,3.86012148857117,67.9690551757813,1.670374751091,3.77919220924377,67.8664474487305,1.73471486568451,3.92326807975769,68.0409240722656,1.53420841693878,3.83544135093689,67.9114608764648,0.998802065849304,3.76413035392761,67.9968872070313,0.952667593955994,3.810711145401,67.8189544677734,0.880330681800842,3.65141010284424,67.6560745239258,0.732728004455566,3.60468745231628,67.442512512207,0.648090064525604,3.46820783615112,66.8373565673828,0.642570853233337,3.52254128456116,67.1582183837891,0.248262137174606,3.60760736465454,67.5348358154297,-0.420371651649475,3.78048825263977,67.6621246337891,0.776360392570496,3.73487710952759,67.4356536865234,0.701585710048676,3.66625213623047,67.1638641357422,0.669500708580017,3.53652048110962,67.141716003418,0.613216578960419, 3.58888530731201,66.8496170043945,0.698460042476654,3.69785666465759,66.5569381713867,0.76279604434967,3.47390913963318,66.4032516479492,0.940670549869537,3.77345776557922,60.8544502258301,-0.0729393362998962,3.79325795173645,59.9792976379395,1.36709403991699,3.981778383255,59.7930335998535,1.87356519699097,0.777940273284912,61.6627578735352,-3.52194452285767,1.48603999614716,61.8513412475586,-3.45622205734253,2.36290335655212,62.0750350952148,-3.00863814353943,3.46754050254822,62.5932464599609,-2.43091034889221,3.77708125114441,62.6162300109863,-1.66679668426514,3.93208146095276,62.1959915161133,-0.753983974456787,3.28955364227295,67.0566711425781,3.80089235305786,1.19604671001434,66.8455123901367,5.48549938201904,1.62394678592682,64.794921875,4.62034463882446,1.47073328495026,64.8858413696289,4.72852897644043,1.85679113864899,68.1447296142578,4.88398790359497,1.74986064434052,65.9342269897461,4.76275300979614,1.80883491039276,65.8382873535156,4.73427295684814,1.89601337909698,65.7000503540039,4.67515993118286,1.7078458070755,68.1302337646484,4.88863897323608,1.68416428565979,68.1078338623047,4.86055564880371,0.00038185715675354,68.2644119262695,4.91810369491577,0.00735509395599365,68.2456970214844,4.89325475692749,2.08362030982971,63.940242767334,4.07634019851685,2.23859047889709,63.9939613342285,3.83288836479187,2.36071610450745,64.0901718139648,3.55181813240051,-1.03999102115631,64.1953964233398,4.12683153152466,-1.18111038208008,64.2263336181641,3.89086365699768,-1.30252110958099,64.3730163574219,3.61477756500244,-1.02499151229858,65.8723907470703,4.46659708023071,2.35556626319885,65.6158218383789,4.39196586608887,0.873621225357056,68.2819519042969,5.43281412124634,-2.36207580566406,66.7793350219727,1.48702847957611,-1.83337068557739,67.5775299072266,3.52100348472595,-1.13330495357513,67.8164596557617,4.45990085601807,3.02833318710327,67.7973480224609,4.23777866363525,0.964009761810303,69.5016860961914,5.21233224868774,0.943135738372803,69.2242813110352,5.24404191970825,0.703629970550537,68.9851608276367,5.32800006866455, 0.921748876571655,68.9331893920898,5.30737543106079,1.14702486991882,68.9563522338867,5.31911516189575,-1.53307449817657,69.9197540283203,-1.07180321216583,0.652912974357605,65.5594787597656,4.85395431518555,0.656846284866333,65.6249160766602,4.75969839096069,0.658797264099121,65.6604156494141,4.71234512329102,0.661505103111267,65.7168884277344,4.6145977973938,0.665562868118286,65.8118057250977,4.4242901802063,0.674360871315002,66.0109024047852,4.04174327850342,0.671546220779419,66.1222076416016,3.37795090675354,0.651402831077576,66.0390167236328,2.57964992523193,0.60585629940033,65.5844116210938,1.97188603878021,0.570160269737244,65.118896484375,1.98627030849457,0.526925444602966,64.5698013305664,1.93749856948853,0.511002540588379,64.1597747802734,2.85311627388,0.493809551000595,64.1792678833008,3.5948166847229,0.525675535202026,64.0711288452148,4.17445087432861,0.541215419769287,64.1743774414063,4.63787937164307,0.250819176435471,65.5190734863281,4.86307859420776,0.228494554758072,65.5870208740234,4.76983070373535,0.196436315774918,65.6303787231445,4.72285842895508,0.15733814239502,65.6800079345703,4.62622213363647,0.099937379360199,65.7448501586914,4.43832969665527,0.0486626923084259,66.0053558349609,4.05459928512573,-0.0147473067045212,66.1213455200195,3.39184832572937,-0.0894939303398132,66.0962219238281,2.59238362312317,-0.161882400512695,65.6560592651367,2.28982543945313,-0.214036017656326,65.1918106079102,2.30449271202087,-0.246274381875992,64.6433258056641,2.29138565063477,-0.218271285295486,64.2160797119141,2.86565065383911,-0.174487501382828,64.2654724121094,3.5662088394165,-0.042945459485054,64.1155548095703,4.20135974884033,0.0312285125255585,64.2037506103516,4.64215660095215,1.04420983791351,65.4587783813477,4.85055589675903,1.07440137863159,65.5217056274414,4.7552924156189,1.11115729808807,65.5597534179688,4.70713710784912,1.15413916110992,65.6030502319336,4.60909032821655,1.21435952186584,65.6588134765625,4.41917610168457,1.29186642169952,65.9093704223633,4.03323268890381,1.34964776039124,66.015998840332,3.36839866638184, 1.39229929447174,65.9818115234375,2.56691646575928,1.3859030008316,65.5365524291992,2.26322388648987,1.36666464805603,65.0697708129883,2.27732515335083,1.3138815164566,64.5228652954102,2.26457142829895,1.24027609825134,64.1034622192383,2.84058260917664,1.16210687160492,64.0930633544922,3.62342405319214,1.10009157657623,64.0964889526367,4.17122077941895,1.0526248216629,64.1909713745117,4.50982093811035,1.89644730091095,67.7359085083008,4.67418622970581,1.81632149219513,67.7875213623047,4.61641120910645,2.12802863121033,67.6517791748047,4.72160243988037,1.98360979557037,67.7028198242188,4.71778392791748,1.77853500843048,67.8334732055664,4.57319593429565,1.75040686130524,67.8640594482422,4.5403995513916,2.42679309844971,67.6176147460938,4.63404083251953,2.54108619689941,67.6052627563477,4.51983451843262,2.48956918716431,67.6133270263672,4.57629919052124,1.74333274364471,67.8989181518555,4.53774070739746,1.93537843227386,67.7207946777344,4.6994047164917,2.57160806655884,67.5975723266602,4.45073556900024,2.5858838558197,67.6601409912109,4.42239618301392,2.58265948295593,67.6481552124023,4.43020439147949,2.57664966583252,67.6871948242188,4.4448299407959,2.55325865745544,67.770622253418,4.51302242279053,2.56909608840942,67.7202301025391,4.47619247436523,2.50709199905396,67.8812103271484,4.58537578582764,2.53704166412354,67.8295440673828,4.54725313186646,2.36653184890747,68.0211791992188,4.67595386505127,2.16523623466492,68.0977172851563,4.71221017837524,2.27045369148254,68.0672378540039,4.70446872711182,2.05515193939209,68.1021881103516,4.69430780410767,1.94643938541412,68.0781097412109,4.65700387954712,1.84540617465973,68.0238876342773,4.60649824142456,2.27108001708984,67.6280059814453,4.70892524719238,1.98273718357086,67.7163162231445,4.56902360916138,1.9115127325058,67.7589797973633,4.53995370864868,2.13523030281067,67.6635894775391,4.58285903930664,2.03138518333435,67.6998062133789,4.58159112930298,1.87199437618256,67.7949829101563,4.52198696136475,1.8542720079422,67.8257751464844,4.5079026222229,2.36474823951721,67.6484298706055,4.5119104385376, 2.31572771072388,67.6422805786133,4.5551061630249,1.86171853542328,67.868896484375,4.5054759979248,2.41878652572632,67.6660537719727,4.43914270401001,2.44726538658142,67.6855010986328,4.43181991577148,2.46289682388306,67.7375793457031,4.46374797821045,2.44555950164795,67.7956695556641,4.49104022979736,2.45723295211792,67.7605285644531,4.47634077072144,2.4117910861969,67.8728866577148,4.51987743377686,2.43361759185791,67.8368377685547,4.50457382202148,2.31002712249756,67.9707336425781,4.55646896362305,2.16502261161804,68.0245590209961,4.57177495956421,2.24073529243469,68.0030136108398,4.56828546524048,2.08600091934204,68.0280380249023,4.56502389907837,2.00812268257141,68.0116424560547,4.55059480667114,1.93588101863861,67.9740905761719,4.53102397918701,2.23815989494324,67.6467971801758,4.57702589035034,-0.212368905544281,67.8996810913086,4.63779544830322,-0.485981106758118,67.8154220581055,4.7144570350647,-0.314577341079712,67.8651428222656,4.70246028900146,-0.0699974000453949,67.9629440307617,4.49406051635742,-0.0349433273077011,67.9887771606445,4.4476261138916,-0.826956033706665,67.8586120605469,4.60484981536865,-0.956437468528748,67.8552551269531,4.4510293006897,-0.900565505027771,67.865234375,4.52698564529419,-0.0208806097507477,68.0293426513672,4.44375610351563,-0.258073717355728,67.8792419433594,4.67536354064941,-0.998348236083984,67.8886108398438,4.3549690246582,-1.00609660148621,67.9421310424805,4.31744146347046,-1.00461220741272,67.9233016967773,4.3282585144043,-0.949204087257385,68.0249328613281,4.44410514831543,-0.976211071014404,67.9849166870117,4.39273262023926,-0.874837517738342,68.1462326049805,4.54314088821411,-0.919130444526672,68.0910263061523,4.49123859405518,-0.689786434173584,68.2753372192383,4.66390991210938,-0.450264871120453,68.3228759765625,4.70611143112183,-0.573601424694061,68.3050308227539,4.69983911514282,-0.326902955770493,68.3137054443359,4.67624616622925,-0.210561603307724,68.2769317626953,4.61912107467651,-0.10955773293972,68.1954116821289,4.54428195953369,-0.650413751602173,67.8144989013672,4.70292139053345, -0.229091107845306,67.9318695068359,4.42529535293579,-0.494329631328583,67.8742752075195,4.40578269958496,-0.360107153654099,67.9088897705078,4.41941356658936,-0.122926339507103,67.9665222167969,4.44002151489258,-0.759347319602966,67.912353515625,4.40942287445068,-0.858121633529663,67.9182205200195,4.40049695968628,-0.81566846370697,67.9212646484375,4.40700912475586,-0.126330554485321,68.0354919433594,4.45229911804199,-0.893098115921021,67.9021987915039,4.38819122314453,-0.896688580513,67.9520492553711,4.40433549880981,-0.87952196598053,67.9892578125,4.42123937606812,-0.852579474449158,68.0385284423828,4.44430255889893,-0.796185731887817,68.1190872192383,4.48092985153198,-0.829913258552551,68.0828094482422,4.46386814117432,-0.65356719493866,68.2033767700195,4.52140235900879,-0.466939032077789,68.2333831787109,4.5374698638916,-0.563301205635071,68.2218780517578,4.53163146972656,-0.369929194450378,68.2275085449219,4.53461980819702,-0.277927368879318,68.2034759521484,4.52329397201538,-0.197574734687805,68.1487274169922,4.49941539764404,-0.622779250144959,67.8752670288086,4.40379571914673,-0.141183137893677,67.9313125610352,4.56592798233032,-0.105590149760246,67.9471282958984,4.52999401092529,-0.317027002573013,43.3981781005859,-4.17614793777466,-0.834381639957428,43.4859733581543,-4.23113298416138,-1.51100981235504,44.4054069519043,-4.25199365615845,-1.4732049703598,44.902889251709,-4.17614889144897,-0.0162359997630119,43.5158843994141,-4.1427001953125,-1.28199899196625,45.1632194519043,-4.1427001953125,0.158467993140221,43.6501235961914,-4.15208005905151,-1.10729598999023,45.2974548339844,-4.15208101272583,0.628645002841949,43.7916564941406,-4.30703783035278,0.32362699508667,43.5572891235352,-4.30703687667847,-1.15446102619171,45.4809532165527,-4.3070387840271,-0.849443018436432,45.7153167724609,-4.3070387840271,0.727638006210327,44.0849380493164,-4.165198802948,0.563943028450012,43.9616775512695,-4.165198802948,-0.701821029186249,45.6090087890625,-4.16520023345947,-0.538125991821289,45.7322692871094,-4.165198802948, 1.17372703552246,44.2080078125,-4.30703783035278,0.886372923851013,43.9871635437012,-4.30703783035278,-0.591714978218079,45.910831451416,-4.30703783035278,-0.304394006729126,46.1316452026367,-4.30703783035278,1.43661201000214,44.6284790039063,-4.19403791427612,1.11930799484253,44.3859214782715,-4.165198802948,-0.146456003189087,46.0332565307617,-4.16520023345947,0.170848995447159,46.2758102416992,-4.19403791427612,1.68137609958649,44.8160705566406,-3.78847002983093,1.56688797473907,44.7282600402832,-4.0851788520813,0.301124006509781,46.3755912780762,-4.0851788520813,0.415612012147903,46.4634017944336,-3.78847002983093,-1.59946060180664,44.3374443054199,-3.79821419715881,-0.914093196392059,43.419677734375,-3.78314900398254,-0.0272600017488003,43.5074119567871,-3.7880527973175,-1.29302394390106,45.1547470092773,-3.7880527973175,0.181598216295242,43.6708488464355,-3.79498100280762,-1.07914197444916,45.3190879821777,-3.79843235015869,-0.701821029186249,45.6090126037598,-3.81037211418152,0.563943028450012,43.9616775512695,-3.81037211418152,0.727638006210327,44.0849342346191,-3.81037211418152,-0.538125991821289,45.7322692871094,-3.81037211418152,-0.148130998015404,46.0319519042969,-3.81037211418152,1.11763298511505,44.3846168518066,-3.81037211418152,1.26549303531647,44.4971542358398,-3.82166981697083,-0.000269999989541247,46.1444854736328,-3.82167100906372,1.30914115905762,44.5305786132813,-3.86609816551209,0.0433779992163181,46.1779098510742,-3.8660991191864,-0.367087990045547,43.3597106933594,-3.78918409347534,0.378194004297256,43.486270904541,-3.92864799499512,0.683211982250214,43.7206382751465,-3.92864799499512,0.94093906879425,43.9161491394043,-3.92864799499512,1.228276014328,44.1369781494141,-3.92864799499512,0.443740993738174,43.4009666442871,-3.79230833053589,0.748758971691132,43.6353302001953,-3.79230904579163,1.2905980348587,44.0491600036621,-3.79230833053589,1.00648701190948,43.8308448791504,-3.79230833053589,1.37339198589325,44.5797996520996,-3.80079698562622,0.107629001140594,46.2271347045898,-3.80079770088196, -0.358994990587235,46.20263671875,-3.92864799499512,-0.646282017230988,45.9818458557129,-3.92864799499512,-0.904009938240051,45.7863349914551,-3.92864799499512,-1.20902800559998,45.5519676208496,-3.92864799499512,-1.52326595783234,44.8644218444824,-3.78918409347534,-0.427762001752853,46.2854347229004,-3.79230833053589,-0.711830019950867,46.0671539306641,-3.79230904579163,-0.969556987285614,45.8716430664063,-3.79230833053589,-1.27457499504089,45.6372756958008,-3.79230904579163,-13.6780347824097,1.56476700305939,-0.962452054023743,-13.5355319976807,2.28442907333374,-0.326824009418488,-13.7296142578125,1.90572786331177,0.0347840003669262,-13.8451042175293,1.28352797031403,-0.534878015518188,-13.2113485336304,3.41421222686768,0.780472993850708,-13.4375886917114,2.95067405700684,1.12730300426483,-12.3108987808228,4.26939582824707,1.75078189373016,-12.5499305725098,3.72543716430664,2.15108489990234,-10.9267930984497,4.62305116653442,2.39914608001709,-11.0607147216797,4.0776162147522,2.87612700462341,-13.7357864379883,1.83517897129059,0.0675569996237755,-13.4553098678589,2.88778805732727,1.16740500926971,-13.4221811294556,2.62378597259521,1.13361215591431,-13.659797668457,1.58253502845764,0.0165539998561144,-12.5724210739136,3.66829299926758,2.19642400741577,-12.595648765564,3.34137725830078,2.16981601715088,-11.067608833313,3.99253296852112,2.89867806434631,-11.0777006149292,3.67775297164917,2.90849208831787,-13.8719444274902,1.31002199649811,0.425152987241745,-13.8813171386719,0.922089993953705,-0.131953999400139,-13.7507238388062,1.20414614677429,-0.352847993373871,-13.7218284606934,2.18296194076538,1.73859214782715,-12.8380451202393,2.85210108757019,2.91106700897217,-11.2669439315796,3.18960094451904,3.69444298744202,-13.8856010437012,1.00176298618317,-0.627758979797363,-13.7876510620117,0.865270912647247,-1.45944786071777,-13.8358287811279,1.2590719461441,-0.456277012825012,-7.71573686599731,2.20191693305969,1.16589915752411,-7.56110048294067,1.46297514438629,0.62024998664856,-7.64086675643921,1.2053279876709,1.01679396629334, -7.77079105377197,1.89633202552795,1.61284804344177,-8.34208297729492,3.50494909286499,2.02134108543396,-8.44800853729248,3.08205199241638,2.58425903320313,-9.51651096343994,3.81002974510193,2.96585988998413,-9.35363388061523,4.35058403015137,2.47706699371338,-7.82847023010254,1.84765613079071,1.64134502410889,-7.96436500549316,1.67664396762848,1.67775213718414,-8.53395843505859,2.79537510871887,2.64249300956726,-8.46099376678467,3.02799868583679,2.64509105682373,-9.57126045227051,3.48190593719482,3.04697799682617,-9.54757595062256,3.76337790489197,3.0204439163208,-7.85036659240723,0.923666000366211,1.44919002056122,-7.84358215332031,1.19052505493164,1.1865119934082,-7.67029094696045,0.892737984657288,0.995962023735046,-7.72204780578613,0.665284991264343,1.10715901851654,-7.96370410919189,1.32437098026276,2.04898595809937,-8.62763500213623,2.38745093345642,3.37738871574402,-9.67886352539063,2.98630094528198,3.90722489356995,-7.50302839279175,0.0706660002470016,0.16516999900341,-7.65504312515259,0.57694798707962,1.02590584754944,-7.63006162643433,0.858869016170502,0.922900974750519,-7.45552921295166,0.293835997581482,-0.0636129975318909,-7.47746133804321,0.77325302362442,0.103377990424633,-7.6795711517334,1.16882801055908,1.05913496017456,-13.8515253067017,1.04447174072266,-0.519836008548737,-13.9187040328979,0.749768018722534,-0.385737001895905,-13.9613208770752,0.689105987548828,-0.524842023849487,-14.1618280410767,0.693732023239136,0.904721021652222,-14.2566156387329,0.201043993234634,1.2078560590744,-14.2272043228149,-0.0554590001702309,0.292737007141113,-14.1005353927612,0.453911006450653,0.102949999272823,-14.0750226974487,1.22226297855377,2.3223569393158,-14.1696844100952,0.757678985595703,2.74612402915955,-13.1613607406616,1.81473004817963,3.52351808547974,-13.3137845993042,1.41021299362183,4.07391881942749,-11.5029983520508,2.21419310569763,4.46008491516113,-11.6761035919189,1.73573398590088,5.00057792663574,-14.1197128295898,0.75049501657486,0.84908801317215,-13.9271574020386,0.81058794260025,0.591765999794006, -13.8647260665894,1.32616198062897,2.01072406768799,-13.9969501495361,1.2639479637146,2.23578906059265,-13.0012092590332,1.92415702342987,3.13362169265747,-13.0971918106079,1.85302400588989,3.45393371582031,-11.3908538818359,2.33619499206543,4.02878093719482,-11.4788293838501,2.24708294868469,4.36365699768066,-14.0445289611816,0.489760965108871,-0.225505992770195,-14.1171455383301,-0.207783997058868,-0.640401005744934,-14.0550327301025,0.529439985752106,0.105508998036385,-13.9215707778931,0.662356019020081,0.12636099755764,-7.83413791656494,-0.0283060017973185,1.913419008255,-8.06515884399414,0.286482006311417,2.91064691543579,-7.95277881622314,0.834507048130035,2.67236089706421,-7.780601978302,0.469280004501343,1.68146514892578,-8.78317642211914,1.03417301177979,4.53717422485352,-8.70439052581787,1.56782102584839,4.13548183441162,-9.94776630401611,1.60068798065186,5.2044620513916,-9.77998733520508,2.07577204704285,4.66377878189087,-7.95914030075073,0.885506987571716,2.59952688217163,-8.74676513671875,1.62127304077148,4.04322910308838,-8.78474044799805,1.72587299346924,3.80446791648865,-8.04425525665283,0.948602974414825,2.30370092391968,-9.76146507263184,2.11520910263062,4.5624737739563,-9.8388090133667,2.19951796531677,4.26146602630615,-7.76102113723755,0.52852201461792,1.38592100143433,-7.91985082626343,0.685284018516541,1.6529289484024,-7.53962087631226,-0.179324001073837,0.333211004734039,-7.71288299560547,0.445039004087448,1.31922614574432,-7.65219831466675,-0.232834994792938,0.904438018798828,-7.80965709686279,0.549328029155731,1.63786089420319,-13.9975500106812,0.58357697725296,-0.134222000837326,-14.0162773132324,-0.11387600004673,-1.19407498836517,-13.9406709671021,0.152143001556396,-1.3564670085907,-13.8613548278809,0.385596007108688,-1.58571898937225,-13.3260583877563,1.52340304851532,-0.926805019378662,-13.6498346328735,0.799180924892426,-0.197821021080017,-13.6360759735107,1.163419008255,0.459197998046875,-13.214916229248,2.19469499588013,-0.354411989450455,-13.3867931365967,1.8975909948349,1.65856885910034, -12.879186630249,3.26200866699219,0.666939973831177,-12.6128787994385,2.55630111694336,2.73621797561646,-12.0652027130127,4.01996278762817,1.44470298290253,-11.2527093887329,2.92929005622864,3.43369626998901,-10.8725614547729,4.34354496002197,2.04087495803833,-13.4099502563477,0.802688002586365,-1.48420095443726,-13.4805784225464,0.323792994022369,-1.59506595134735,-8.03701400756836,0.645461976528168,1.01014995574951,-7.90348291397095,1.52642500400543,0.427454024553299,-8.08730697631836,2.19412302970886,0.955696940422058,-8.23932838439941,1.26469194889069,1.94163298606873,-8.62477397918701,3.40587210655212,1.72736203670502,-8.85360431671143,2.13062691688538,3.05519890785217,-9.42286491394043,4.11251783370972,2.11699104309082,-9.80203533172607,2.76634788513184,3.57874298095703,-7.79784631729126,0.794174075126648,-0.103330008685589,-7.82158517837524,0.364942997694016,-0.290657997131348,-13.8217973709106,-0.170460999011993,0.398487001657486,-13.8654460906982,0.0600179992616177,1.26387298107147,-13.8260746002197,0.517706990242004,2.71623492240906,-13.1112518310547,1.06115102767944,3.8931291103363,-11.643946647644,1.41572594642639,4.7784481048584,-13.7150077819824,-0.346439003944397,-0.612541973590851,-13.6095657348633,-0.241651996970177,-1.15343594551086,-8.24737453460693,-0.15752400457859,1.85458099842072,-8.44620132446289,0.104812011122704,2.83339309692383,-9.08258628845215,0.769033014774323,4.3923487663269,-10.0709543228149,1.28220784664154,4.95027685165405,-8.06989288330078,-0.31148499250412,0.740787029266357,-7.96294832229614,-0.289009004831314,0.219812005758286,-13.4217224121094,2.3107750415802,-0.375806987285614,-13.5710763931274,1.59470999240875,-1.01851904392242,-13.103946685791,3.42879104614258,0.713451981544495,-12.2277145385742,4.27713680267334,1.65429794788361,-10.9000606536865,4.61849594116211,2.28014898300171,-13.5571355819702,-0.0426359996199608,-1.52019703388214,-13.7583179473877,0.376628011465073,-1.67076504230499,-13.8444566726685,-0.00786899961531162,-1.59044694900513,-13.687385559082,0.836558997631073,-1.54808294773102, -7.63128089904785,1.51451098918915,0.516359984874725,-7.79104614257813,2.23954701423645,1.06171703338623,-8.39723968505859,3.52309203147888,1.89859700202942,-9.36298179626465,4.34764623641968,2.35511302947998,-7.54345893859863,0.770093977451324,-0.0295189991593361,-7.52011299133301,0.315405994653702,-0.201513007283211,-7.88312101364136,-0.0476690009236336,-0.189381003379822,-7.54605770111084,-0.0761459991335869,-0.107980996370316,-14.1586351394653,-0.138848006725311,0.337846010923386,-14.1826257705688,0.10935901850462,1.25752902030945,-14.1024370193481,0.650152027606964,2.78769397735596,-13.2866096496582,1.29429996013641,4.09255599975586,-11.6883716583252,1.60427713394165,5.0113639831543,-13.9429140090942,-0.219302996993065,-1.2073849439621,-14.0385818481445,-0.306542009115219,-0.675978004932404,-8.16566753387451,0.194731995463371,2.91308689117432,-7.9301438331604,-0.113416999578476,1.92874503135681,-8.86132144927979,0.920903027057648,4.54089879989624,-10.0087671279907,1.47676694393158,5.21392393112183,-7.72993421554565,-0.324436992406845,0.821264028549194,-7.6232590675354,-0.286345988512039,0.279785007238388,-13.9344873428345,0.0526309981942177,-1.52636194229126,-7.47345447540283,-0.0321439988911152,-0.00272500002756715,13.6780347824097,1.56476700305939,-0.962452054023743,13.5355319976807,2.28442907333374,-0.326824009418488,13.7296142578125,1.90572786331177,0.0347840003669262,13.8451042175293,1.28352797031403,-0.534878015518188,13.2113485336304,3.41421222686768,0.780472993850708,13.4375886917114,2.95067405700684,1.12730300426483,12.3108987808228,4.26939582824707,1.75078189373016,12.5499305725098,3.72543716430664,2.15108489990234,10.9267930984497,4.62305116653442,2.39914608001709,11.0607147216797,4.0776162147522,2.87612700462341,13.7357864379883,1.83517897129059,0.0675569996237755,13.4553098678589,2.88778805732727,1.16740500926971,13.4221811294556,2.62378597259521,1.13361215591431,13.659797668457,1.58253502845764,0.0165539998561144,12.5724210739136,3.66829299926758,2.19642400741577,12.595648765564,3.34137725830078,2.16981601715088, 11.067608833313,3.99253296852112,2.89867806434631,11.0777006149292,3.67775297164917,2.90849208831787,13.8719444274902,1.31002199649811,0.425152987241745,13.8813171386719,0.922089993953705,-0.131953999400139,13.7507238388062,1.20414614677429,-0.352847993373871,13.7218284606934,2.18296194076538,1.73859214782715,12.8380451202393,2.85210108757019,2.91106700897217,11.2669439315796,3.18960094451904,3.69444298744202,13.8856010437012,1.00176298618317,-0.627758979797363,13.7876510620117,0.865270912647247,-1.45944786071777,13.8358287811279,1.2590719461441,-0.456277012825012,7.71573686599731,2.20191693305969,1.16589915752411,7.56110048294067,1.46297514438629,0.62024998664856,7.64086675643921,1.2053279876709,1.01679396629334,7.77079105377197,1.89633202552795,1.61284804344177,8.34208297729492,3.50494909286499,2.02134108543396,8.44800853729248,3.08205199241638,2.58425903320313,9.51651096343994,3.81002974510193,2.96585988998413,9.35363388061523,4.35058403015137,2.47706699371338,7.82847023010254,1.84765613079071,1.64134502410889,7.96436500549316,1.67664396762848,1.67775213718414,8.53395843505859,2.79537510871887,2.64249300956726,8.46099376678467,3.02799868583679,2.64509105682373,9.57126045227051,3.48190593719482,3.04697799682617,9.54757595062256,3.76337790489197,3.0204439163208,7.85036659240723,0.923666000366211,1.44919002056122,7.84358215332031,1.19052505493164,1.1865119934082,7.67029094696045,0.892737984657288,0.995962023735046,7.72204780578613,0.665284991264343,1.10715901851654,7.96370410919189,1.32437098026276,2.04898595809937,8.62763500213623,2.38745093345642,3.37738871574402,9.67886352539063,2.98630094528198,3.90722489356995,7.50302839279175,0.0706660002470016,0.16516999900341,7.65504312515259,0.57694798707962,1.02590584754944,7.63006162643433,0.858869016170502,0.922900974750519,7.45552921295166,0.293835997581482,-0.0636129975318909,7.47746133804321,0.77325302362442,0.103377990424633,7.6795711517334,1.16882801055908,1.05913496017456,13.8515253067017,1.04447174072266,-0.519836008548737,13.9187040328979,0.749768018722534,-0.385737001895905, 13.9613208770752,0.689105987548828,-0.524842023849487,14.1618280410767,0.693732023239136,0.904721021652222,14.2566156387329,0.201043993234634,1.2078560590744,14.2272043228149,-0.0554590001702309,0.292737007141113,14.1005353927612,0.453911006450653,0.102949999272823,14.0750226974487,1.22226297855377,2.3223569393158,14.1696844100952,0.757678985595703,2.74612402915955,13.1613607406616,1.81473004817963,3.52351808547974,13.3137845993042,1.41021299362183,4.07391881942749,11.5029983520508,2.21419310569763,4.46008491516113,11.6761035919189,1.73573398590088,5.00057792663574,14.1197128295898,0.75049501657486,0.84908801317215,13.9271574020386,0.81058794260025,0.591765999794006,13.8647260665894,1.32616198062897,2.01072406768799,13.9969501495361,1.2639479637146,2.23578906059265,13.0012092590332,1.92415702342987,3.13362169265747,13.0971918106079,1.85302400588989,3.45393371582031,11.3908538818359,2.33619499206543,4.02878093719482,11.4788293838501,2.24708294868469,4.36365699768066,14.0445289611816,0.489760965108871,-0.225505992770195,14.1171455383301,-0.207783997058868,-0.640401005744934,14.0550327301025,0.529439985752106,0.105508998036385,13.9215707778931,0.662356019020081,0.12636099755764,7.83413791656494,-0.0283060017973185,1.913419008255,8.06515884399414,0.286482006311417,2.91064691543579,7.95277881622314,0.834507048130035,2.67236089706421,7.780601978302,0.469280004501343,1.68146514892578,8.78317642211914,1.03417301177979,4.53717422485352,8.70439052581787,1.56782102584839,4.13548183441162,9.94776630401611,1.60068798065186,5.2044620513916,9.77998733520508,2.07577204704285,4.66377878189087,7.95914030075073,0.885506987571716,2.59952688217163,8.74676513671875,1.62127304077148,4.04322910308838,8.78474044799805,1.72587299346924,3.80446791648865,8.04425525665283,0.948602974414825,2.30370092391968,9.76146507263184,2.11520910263062,4.5624737739563,9.8388090133667,2.19951796531677,4.26146602630615,7.76102113723755,0.52852201461792,1.38592100143433,7.91985082626343,0.685284018516541,1.6529289484024,7.53962087631226,-0.179324001073837,0.333211004734039, 7.71288299560547,0.445039004087448,1.31922614574432,7.65219831466675,-0.232834994792938,0.904438018798828,7.80965709686279,0.549328029155731,1.63786089420319,13.9975500106812,0.58357697725296,-0.134222000837326,14.0162773132324,-0.11387600004673,-1.19407498836517,13.9406709671021,0.152143001556396,-1.3564670085907,13.8613548278809,0.385596007108688,-1.58571898937225,13.3260583877563,1.52340304851532,-0.926805019378662,13.6498346328735,0.799180924892426,-0.197821021080017,13.6360759735107,1.163419008255,0.459197998046875,13.214916229248,2.19469499588013,-0.354411989450455,13.3867931365967,1.8975909948349,1.65856885910034,12.879186630249,3.26200866699219,0.666939973831177,12.6128787994385,2.55630111694336,2.73621797561646,12.0652027130127,4.01996278762817,1.44470298290253,11.2527093887329,2.92929005622864,3.43369626998901,10.8725614547729,4.34354496002197,2.04087495803833,13.4099502563477,0.802688002586365,-1.48420095443726,13.4805784225464,0.323792994022369,-1.59506595134735,8.03701400756836,0.645461976528168,1.01014995574951,7.90348291397095,1.52642500400543,0.427454024553299,8.08730697631836,2.19412302970886,0.955696940422058,8.23932838439941,1.26469194889069,1.94163298606873,8.62477397918701,3.40587210655212,1.72736203670502,8.85360431671143,2.13062691688538,3.05519890785217,9.42286491394043,4.11251783370972,2.11699104309082,9.80203533172607,2.76634788513184,3.57874298095703,7.79784631729126,0.794174075126648,-0.103330008685589,7.82158517837524,0.364942997694016,-0.290657997131348,13.8217973709106,-0.170460999011993,0.398487001657486,13.8654460906982,0.0600179992616177,1.26387298107147,13.8260746002197,0.517706990242004,2.71623492240906,13.1112518310547,1.06115102767944,3.8931291103363,11.643946647644,1.41572594642639,4.7784481048584,13.7150077819824,-0.346439003944397,-0.612541973590851,13.6095657348633,-0.241651996970177,-1.15343594551086,8.24737453460693,-0.15752400457859,1.85458099842072,8.44620132446289,0.104812011122704,2.83339309692383,9.08258628845215,0.769033014774323,4.3923487663269,10.0709543228149,1.28220784664154,4.95027685165405, 8.06989288330078,-0.31148499250412,0.740787029266357,7.96294832229614,-0.289009004831314,0.219812005758286,13.4217224121094,2.3107750415802,-0.375806987285614,13.5710763931274,1.59470999240875,-1.01851904392242,13.103946685791,3.42879104614258,0.713451981544495,12.2277145385742,4.27713680267334,1.65429794788361,10.9000606536865,4.61849594116211,2.28014898300171,13.5571355819702,-0.0426359996199608,-1.52019703388214,13.7583179473877,0.376628011465073,-1.67076504230499,13.8444566726685,-0.00786899961531162,-1.59044694900513,13.687385559082,0.836558997631073,-1.54808294773102,7.63128089904785,1.51451098918915,0.516359984874725,7.79104614257813,2.23954701423645,1.06171703338623,8.39723968505859,3.52309203147888,1.89859700202942,9.36298179626465,4.34764623641968,2.35511302947998,7.54345893859863,0.770093977451324,-0.0295189991593361,7.52011299133301,0.315405994653702,-0.201513007283211,7.88312101364136,-0.0476690009236336,-0.189381003379822,7.54605770111084,-0.0761459991335869,-0.107980996370316,14.1586351394653,-0.138848006725311,0.337846010923386,14.1826257705688,0.10935901850462,1.25752902030945,14.1024370193481,0.650152027606964,2.78769397735596,13.2866096496582,1.29429996013641,4.09255599975586,11.6883716583252,1.60427713394165,5.0113639831543,13.9429140090942,-0.219302996993065,-1.2073849439621,14.0385818481445,-0.306542009115219,-0.675978004932404,8.16566753387451,0.194731995463371,2.91308689117432,7.9301438331604,-0.113416999578476,1.92874503135681,8.86132144927979,0.920903027057648,4.54089879989624,10.0087671279907,1.47676694393158,5.21392393112183,7.72993421554565,-0.324436992406845,0.821264028549194,7.6232590675354,-0.286345988512039,0.279785007238388,13.9344873428345,0.0526309981942177,-1.52636194229126,7.47345447540283,-0.0321439988911152,-0.00272500002756715,10.7124395370483,57.0556602478027,-6.04039001464844,11.3695554733276,57.217170715332,-5.78218126296997,11.4667978286743,56.4108619689941,-5.70864200592041,10.7735166549683,56.329948425293,-6.00628137588501,12.6069326400757,57.5657844543457,-4.83701992034912, 12.6863536834717,56.5795631408691,-4.74567937850952,13.3836278915405,57.7985610961914,-3.45969557762146,13.4556169509888,56.6929550170898,-3.40973043441772,13.5839586257935,57.8815231323242,-1.86121022701263,13.6550102233887,56.7342262268066,-1.84742498397827,12.3341121673584,57.7085723876953,-4.77183103561401,11.0727882385254,57.3072090148926,-5.68556499481201,13.0607481002808,57.9960670471191,-3.43343567848206,13.2453107833862,58.0991554260254,-1.88054573535919,10.4601907730103,57.1115608215332,-6.06003665924072,10.0851039886475,57.3179016113281,-6.09067630767822,10.4496412277222,57.3653335571289,-5.84987211227417,10.676438331604,57.221809387207,-5.81656265258789,11.0296907424927,57.836612701416,-5.64854335784912,11.9441976547241,58.6488418579102,-4.79833269119263,12.582670211792,59.116268157959,-3.46573519706726,12.736496925354,59.2816390991211,-1.91715252399445,10.4555358886719,58.6530647277832,-5.65306329727173,11.2547769546509,59.5086250305176,-4.84232950210571,11.7785902023315,60.1175575256348,-3.51702165603638,11.8950414657593,60.3289756774902,-1.96966993808746,9.57929134368896,56.9524612426758,-6.27373933792114,9.19234466552734,57.3395614624023,-6.29679536819458,9.7266731262207,57.8835411071777,-6.21597003936768,10.1856927871704,57.5712623596191,-6.24911499023438,9.97100353240967,56.2237091064453,-6.13345384597778,9.34849166870117,56.7671585083008,-6.17100095748901,10.2850532531738,58.4537925720215,-6.10226821899414,10.7824363708496,57.8354225158691,-6.08034324645996,8.88277912139893,58.869197845459,-6.15048742294312,8.15592193603516,58.9244689941406,-6.1637921333313,8.21378612518311,59.6352043151855,-5.90438842773438,9.02373790740967,59.5423164367676,-5.92333841323853,8.31526947021484,60.9121170043945,-5.008704662323,9.30575180053711,60.8378715515137,-5.03566408157349,8.3420991897583,61.7613945007324,-3.71743059158325,9.44917964935303,61.6983299255371,-3.69644641876221,8.28723239898682,62.0546913146973,-2.17042446136475,9.43372058868408,61.9951782226563,-2.1109459400177,9.44623279571533,60.5709953308105,-4.94560480117798, 9.10982704162598,59.2528686523438,-5.80368280410767,9.64699649810791,61.3797302246094,-3.63885402679443,9.65449810028076,61.658317565918,-2.09661841392517,9.19142436981201,58.6108055114746,-5.92598390579224,9.15252304077148,58.2418937683105,-6.14308214187622,8.9415225982666,58.6167831420898,-6.15146541595459,9.03530979156494,58.8484725952148,-5.91531658172607,10.3890905380249,60.1902389526367,-4.89191007614136,9.66245079040527,59.1945419311523,-5.73063850402832,10.7704238891602,60.9125442504883,-3.57478475570679,10.8405637741089,61.1608543395996,-2.03123736381531,8.80425930023193,57.7260208129883,-6.3200306892395,9.25882434844971,58.3663139343262,-6.24290418624878,8.73712539672852,57.6652565002441,-6.2053050994873,8.21891403198242,57.6878395080566,-6.23664903640747,8.06321239471436,58.1146774291992,-6.24825286865234,9.66301536560059,58.9449691772461,-6.14769983291626,9.12459373474121,57.2783203125,-6.17943382263184,9.51206493377686,56.8916168212891,-6.1587438583374,9.03224182128906,57.1845245361328,-6.18972444534302,8.61232662200928,57.4968490600586,-6.2152943611145,10.9453954696655,57.8632202148438,-5.74091577529907,10.350643157959,57.4555130004883,-5.97056674957275,10.3734855651855,58.5632514953613,-5.76876640319824,9.6894416809082,59.1076164245605,-5.81734275817871,9.28597164154053,58.5109214782715,-6.03513240814209,10.2982120513916,57.1268005371094,2.01532077789307,10.3618040084839,56.4006576538086,2.00044465065002,11.08203125,56.4769401550293,1.77409958839417,10.9784908294678,57.2843399047852,1.82306373119354,12.3940715789795,56.6297569274902,0.938472449779511,12.3065929412842,57.617374420166,1.00379812717438,13.2963943481445,56.7202949523926,-0.313323259353638,13.220666885376,57.826545715332,-0.290488749742508,12.0420293807983,57.7587356567383,0.908468961715698,10.6932783126831,57.3723831176758,1.69494712352753,12.9023599624634,58.0232734680176,-0.353199779987335,10.056619644165,57.4328308105469,1.79342937469482,9.66926383972168,57.3893241882324,1.99637413024902,10.0453290939331,57.1828155517578,2.00800490379334, 10.2855052947998,57.2889518737793,1.78608930110931,11.6523027420044,58.6989669799805,0.878273189067841,10.6546821594238,57.9010162353516,1.64438211917877,12.4245052337646,59.1434364318848,-0.389839947223663,10.9627838134766,59.5587730407715,0.836178302764893,10.0838317871094,58.7168960571289,1.57561039924622,11.6203145980835,60.1447372436523,-0.438937902450562,9.14701271057129,57.0266990661621,2.13300395011902,9.7873067855835,57.4932861328125,2.10201096534729,9.30038547515869,57.9567565917969,2.07426238059998,8.76009178161621,57.4137916564941,2.10942983627319,9.09187984466553,56.9637870788574,2.01281023025513,9.12253379821777,56.4475059509277,2.02332544326782,9.55038642883301,56.2959442138672,2.04649186134338,9.86799907684326,58.5254211425781,2.00840091705322,10.3644466400146,57.9072036743164,2.04850101470947,8.46854972839355,58.9403343200684,1.90522265434265,8.63267230987549,59.6094818115234,1.68190681934357,7.82902050018311,59.7012825012207,1.57835364341736,7.74421215057373,58.995174407959,1.84293389320374,9.00541400909424,60.8894577026367,0.805153012275696,8.02298831939697,60.9623184204102,0.675447344779968,9.28621673583984,61.7263221740723,-0.527239799499512,8.18287944793701,61.7887420654297,-0.621023893356323,9.15414905548096,60.621166229248,0.734693169593811,8.73031616210938,59.318042755127,1.57682824134827,9.48860740661621,61.4069328308105,-0.558619141578674,8.52665519714355,58.6880378723145,1.91666579246521,8.73706245422363,58.3132476806641,1.93657350540161,8.79835987091064,58.6783180236816,1.71814370155334,8.64437675476074,58.9156112670898,1.68733644485474,9.28746700286865,59.2589454650879,1.56188571453094,10.0971956253052,60.2403717041016,0.784696280956268,10.6122608184814,60.9397087097168,-0.498890727758408,8.37201976776123,57.8002471923828,2.08593034744263,8.83267974853516,58.4394950866699,2.04456353187561,8.31695175170898,57.7374114990234,1.96601176261902,7.79827928543091,57.7600860595703,1.94363927841187,7.64259576797485,58.1869201660156,1.93169260025024,9.24502658843994,59.0167579650879,1.98113739490509, 8.92779922485352,56.8394050598145,2.01041603088379,8.70467948913574,57.3504486083984,1.98683440685272,8.61167430877686,57.256763458252,1.98925125598907,8.19163417816162,57.5690956115723,1.96611356735229,9.94584655761719,57.525032043457,1.90172684192657,10.5613842010498,57.9291648864746,1.72713911533356,9.99026870727539,58.6290702819824,1.68385112285614,9.30534172058105,59.1735763549805,1.65241873264313,8.88112354278564,58.5804481506348,1.83815741539001,10.6770095825195,56.2945251464844,-5.6465892791748,11.2824172973633,56.3772201538086,-5.38556575775146,11.1279258728027,57.0764274597168,-5.44551849365234,10.5325889587402,56.9753379821777,-5.668053150177,12.4072904586792,56.5365180969238,-4.50114870071411,12.2783660888672,57.4414901733398,-4.57866668701172,13.107325553894,56.6325569152832,-3.28944134712219,12.956844329834,57.6888580322266,-3.33421206474304,13.288010597229,56.6680717468262,-1.86571216583252,13.1303119659424,57.7768707275391,-1.88361310958862,11.0010108947754,59.2677192687988,-4.5934591293335,9.69742584228516,57.7487487792969,-5.73776483535767,11.4663410186768,59.8099174499512,-3.39544725418091,11.5693311691284,59.9995307922363,-1.98350858688354,9.28171920776367,56.7352981567383,-5.80496978759766,9.47168254852295,56.3339920043945,-5.79171323776245,9.90828132629395,56.1729278564453,-5.76813793182373,8.86398029327393,59.3201179504395,-5.58211421966553,8.1619234085083,59.4702033996582,-5.57333850860596,8.09944534301758,58.8493728637695,-5.80169248580933,8.80362987518311,58.6593933105469,-5.7381386756897,9.16833877563477,60.5241088867188,-4.76580858230591,8.25944137573242,60.6478080749512,-4.75074100494385,8.2769718170166,61.420337677002,-3.58010292053223,9.33507061004639,61.2787055969238,-3.55214762687683,8.22487926483154,61.6865692138672,-2.1703794002533,9.33380794525146,61.5399169921875,-2.11206364631653,8.55876350402832,57.4518356323242,-5.84847402572632,8.15613555908203,57.6380157470703,-5.87087488174438,7.99083137512207,58.0734748840332,-5.88351821899414,10.7725353240967,57.1374664306641,1.46592569351196, 10.9317245483398,56.4374504089355,1.43446028232574,10.3026676177979,56.3588180541992,1.63343214988709,10.107006072998,57.0631408691406,1.5913724899292,12.0061445236206,57.4882507324219,0.715340316295624,12.1415195465088,56.5821571350098,0.667407095432281,12.9622240066528,56.6574783325195,-0.467617064714432,12.8089008331299,57.7142639160156,-0.457129806280136,9.50034141540527,58.1038665771484,1.45586562156677,10.7501258850098,59.2968711853027,0.63189959526062,11.3219013214111,59.834716796875,-0.586458146572113,8.89888954162598,56.8010444641113,1.64008665084839,9.08884716033936,56.3997383117676,1.65345370769501,9.52541637420654,56.2386856079102,1.67762064933777,7.7251033782959,58.9136619567871,1.47833013534546,7.81123399734497,59.5304336547852,1.24668753147125,8.50855350494385,59.381160736084,1.33006381988525,8.40606021881104,58.7755432128906,1.52266371250153,7.99366998672485,60.6934432983398,0.417815059423447,8.8961181640625,60.5708656311035,0.528197646141052,8.13187026977539,61.445255279541,-0.758278369903564,9.18712902069092,61.3041152954102,-0.675066649913788,8.17593479156494,57.517578125,1.59658348560333,7.7733006477356,57.7037582397461,1.57428932189941,7.60796737670898,58.1392364501953,1.5622410774231,10.763858795166,56.2821884155273,-5.95393514633179,11.4453239440918,56.3634719848633,-5.66015243530273,12.6503982543945,56.5307769775391,-4.70776414871216,13.4095573425293,56.6416015625,-3.391108751297,13.6064786911011,56.6820526123047,-1.84945964813232,9.93995380401611,56.1746597290039,-6.08649778366089,9.49487972259521,56.3378257751465,-6.11084508895874,8.1636962890625,59.6161727905273,-5.85762119293213,8.10515403747559,58.9174652099609,-6.11392068862915,8.26453495025635,60.8779907226563,-4.97167921066284,8.29004001617432,61.715991973877,-3.69916963577271,8.23561573028564,62.0055694580078,-2.1726450920105,8.01162910461426,58.0859870910645,-6.20253276824951,8.17909812927246,57.642017364502,-6.19002056121826,8.96710681915283,57.1409759521484,-5.82494354248047,8.99288368225098,57.1476135253906,-6.14383411407471,9.30475997924805,56.736442565918,-6.12413787841797, 8.5791015625,57.455696105957,-6.1678032875061,11.065601348877,56.4286880493164,1.72450625896454,10.3575248718262,56.3519821166992,1.9482342004776,12.3621492385864,56.5802879333496,0.897935330867767,13.2524452209473,56.668586730957,-0.335663348436356,9.52427101135254,56.2460517883301,1.99746978282928,9.07919597625732,56.4092216491699,1.97316372394562,7.6988205909729,58.9872550964355,1.78824877738953,7.7839732170105,59.6813888549805,1.52703857421875,7.9762864112854,60.9274864196777,0.634021580219269,8.13292789459229,61.742977142334,-0.643724203109741,7.59594821929932,58.1573753356934,1.88143527507782,7.76341438293457,57.7134094238281,1.89398753643036,8.58425617218018,57.2067337036133,1.62053740024567,8.88907718658447,56.8078346252441,1.95986318588257,8.57719612121582,57.2189979553223,1.94022345542908,8.16341876983643,57.5270957946777,1.91619777679443,9.54316806793213,56.3752670288086,-6.15696382522583,9.10171604156494,58.2966079711914,2.16415286064148,9.0726432800293,58.4523010253906,2.27199339866638,7.67046976089478,57.2544784545898,2.45488667488098,7.76439476013184,57.1340179443359,2.34261202812195,7.50693845748901,56.9871940612793,2.48459267616272,7.63928031921387,56.9295234680176,2.3653404712677,7.49976921081543,56.674201965332,2.51717662811279,7.63379526138306,56.6900596618652,2.3902690410614,7.65088319778442,56.3993949890137,2.54390692710876,7.74941062927246,56.4798049926758,2.41072201728821,7.91978979110718,56.236400604248,2.55762553215027,7.9551477432251,56.355094909668,2.4212167263031,8.23443508148193,56.228874206543,2.55465221405029,8.19587802886963,56.3493423461914,2.41894102096558,8.5105094909668,56.378849029541,2.53578400611877,8.40709781646729,56.4640884399414,2.40450549125671,9.80013942718506,57.6939811706543,2.34205198287964,9.65831279754639,57.7164344787598,2.21775436401367,9.80730724334717,58.006965637207,2.30946803092957,9.66379642486572,57.9558944702148,2.1928231716156,9.65619373321533,58.2817726135254,2.28273773193359,9.54818153381348,58.1661415100098,2.17237114906311,9.38728809356689,58.4447746276855,2.26901984214783, 9.34244537353516,58.2908554077148,2.16187739372253,9.04439544677734,58.5109443664551,2.0685338973999,7.60246086120605,57.2915229797363,2.25414371490479,7.41537761688232,56.9857330322266,2.28812718391418,7.40717649459839,56.6276779174805,2.32540369033813,7.58005428314209,56.3132934570313,2.35598564147949,7.8876895904541,56.1268119812012,2.37167835235596,8.24765110015869,56.1182098388672,2.36827683448792,8.56348419189453,56.2897834777832,2.34669184684753,9.87666797637939,57.6434135437012,2.1486828327179,9.88486957550049,58.0014686584473,2.11140513420105,9.711989402771,58.315860748291,2.08082342147827,9.40435600280762,58.5023384094238,2.06513118743896,7.89354467391968,57.5541725158691,2.19163465499878,7.53492975234985,57.3593597412109,2.21614170074463,7.32250690460205,57.012149810791,2.25473022460938,7.31319618225098,56.6055946350098,2.2970564365387,7.50949048995972,56.2486190795898,2.33177995681763,7.85879421234131,56.0368804931641,2.34959721565247,8.26751136779785,56.0271224975586,2.34573411941528,8.62612819671631,56.2219314575195,2.32122707366943,8.83854961395264,56.5691299438477,2.28263998031616,8.84786224365234,56.9756927490234,2.24031329154968,8.65156650543213,57.3326644897461,2.20558881759644,8.3022632598877,57.5444030761719,2.18777060508728,7.89016580581665,57.4804611206055,1.55401968955994,7.53544425964355,57.2877616882324,1.57826209068298,7.32532835006714,56.9443244934082,1.61643016338348,7.31611824035645,56.5421905517578,1.65829622745514,7.51028060913086,56.1890907287598,1.69264352321625,7.85579109191895,55.9796562194824,1.71026754379272,8.26007080078125,55.9699859619141,1.70644688606262,8.61478996276855,56.1626892089844,1.68220448493958,8.82490634918213,56.5061225891113,1.64403653144836,8.83411598205566,56.9082641601563,1.60216987133026,8.63995456695557,57.2613563537598,1.56782293319702,8.29444313049316,57.4707984924316,1.55019891262054,8.08557796478271,56.8008575439453,2.39255380630493,9.37066745758057,58.0004348754883,2.19909453392029,7.95090341567993,57.4940376281738,2.41830825805664,8.03185844421387,57.3665313720703,2.30692052841187, 8.34259605407715,57.040771484375,2.35386204719543,8.65734004974365,56.7145500183105,2.36715579032898,8.76843547821045,56.6418800354004,2.49703741073608,8.46897029876709,58.0325546264648,2.13008427619934,8.51177406311035,57.9731674194336,2.34515070915222,8.56678771972656,57.8315696716309,2.23553681373596,8.8566312789917,57.5205993652344,2.27647852897644,9.1578254699707,57.2154922485352,2.29245519638062,9.28428745269775,57.1679306030273,2.41954469680786,9.35760879516602,57.106273651123,2.21566128730774,9.41757202148438,58.2211647033691,-6.37134647369385,8.07729625701904,57.0513572692871,-6.45569038391113,7.98838758468628,57.1577568054199,-6.58496856689453,9.39362621307373,58.3627853393555,-6.49816751480103,7.95128870010376,56.8461570739746,-6.45800352096558,7.82368993759155,56.8895606994629,-6.58799409866333,7.94460821151733,56.6054725646973,-6.45401096343994,7.81495904922485,56.5749664306641,-6.58277559280396,8.05904579162598,56.3937911987305,-6.44478559494019,7.96453428268433,56.2982864379883,-6.57071495056152,8.26393795013428,56.267822265625,-6.43279695510864,8.23233413696289,56.1336479187012,-6.55504512786865,8.50438404083252,56.261344909668,-6.42125701904297,8.54660892486572,56.125171661377,-6.53996276855469,8.71595478057861,56.3760681152344,-6.41325855255127,8.82314300537109,56.2751235961914,-6.52950954437256,9.97066688537598,57.636344909668,-6.33459901809692,10.1165437698364,57.5984039306641,-6.45013761520386,9.97734546661377,57.8770370483398,-6.33859014511108,10.1252737045288,57.9129905700684,-6.45535469055176,9.86290836334229,58.0887222290039,-6.34781646728516,9.97570037841797,58.1896705627441,-6.46741533279419,9.6580171585083,58.2146797180176,-6.35980606079102,9.7078971862793,58.3543128967285,-6.48308515548706,7.91374015808105,57.219108581543,-6.39272308349609,9.35880374908447,58.445743560791,-6.30441761016846,7.72532224655151,56.9122772216797,-6.3961820602417,7.71533393859863,56.5523872375488,-6.39021348953247,7.88645076751709,56.2358589172363,-6.37641716003418,8.19282341003418,56.0475082397461,-6.35848951339722, 8.55235767364502,56.0378112792969,-6.34123420715332,8.86871910095215,56.2093658447266,-6.32927560806274,10.1858406066895,57.5712661743164,-6.24947023391724,10.1958293914795,57.9311676025391,-6.25543737411499,10.0247116088867,58.2476959228516,-6.26923513412476,9.71834087371826,58.4360466003418,-6.28716278076172,8.20472621917725,57.4861259460449,-6.35204792022705,7.84551382064819,57.2913436889648,-6.36562538146973,7.63157510757446,56.9429512023926,-6.36955308914185,7.62023305892944,56.534309387207,-6.36277627944946,7.814528465271,56.1749076843262,-6.34711170196533,8.16239833831787,55.9610481262207,-6.3267560005188,8.57063388824463,55.9500350952148,-6.30716323852539,8.92984580993652,56.1448211669922,-6.29358530044556,9.14378356933594,56.4932136535645,-6.28965759277344,9.15512657165527,56.90185546875,-6.29643392562866,8.96083068847656,57.2612571716309,-6.31209850311279,8.61295986175537,57.4751167297363,-6.33245468139648,7.82315683364868,57.2974548339844,-5.72415924072266,8.17846775054932,57.490119934082,-5.71072673797607,7.61154174804688,56.9528427124023,-5.72804355621338,7.60032320022583,56.548641204834,-5.72134017944336,7.79250907897949,56.1931419372559,-5.70584535598755,8.13660049438477,55.9816055297852,-5.68571043014526,8.54040145874023,55.9707107543945,-5.66633129119873,8.89571189880371,56.1633796691895,-5.65289926528931,9.10732746124268,56.5079917907715,-5.64901494979858,9.11854648590088,56.9122009277344,-5.65571737289429,8.92636108398438,57.2676963806152,-5.6712121963501,8.58226871490479,57.4792327880859,-5.69134712219238,8.39713573455811,56.7132110595703,-6.45354127883911,8.35801219940186,56.7312316894531,-5.65404605865479,9.10042572021484,56.5588111877441,-6.51249361038208,9.00266551971436,56.6640510559082,-6.39528465270996,8.68764209747314,56.9858283996582,-6.43258762359619,8.39200592041016,57.326042175293,-6.43588542938232,8.31364345550537,57.4366760253906,-6.5648775100708,9.71927833557129,57.9539375305176,-6.35817623138428,9.53972148895264,58.2807655334473,-6.29448080062866,9.78838539123535,58.0285758972168,-6.27875709533691, 9.99997234344482,57.7374534606934,-6.26315259933472,9.20345973968506,57.4698867797852,-6.39538192749023,9.48666667938232,57.1501922607422,-6.36494207382202,9.60848426818848,57.07861328125,-6.48131608963013,9.66481113433838,57.0322380065918,-6.26956367492676,9.57754898071289,57.319652557373,-6.27979326248169,9.37460803985596,57.6449127197266,-6.2954273223877,9.076340675354,57.8779449462891,-6.31346797943115,8.78176498413086,57.9659423828125,-6.32823324203491,8.85363483428955,57.899730682373,-6.53152275085449,8.90478801727295,57.7736015319824,-6.40361595153809,8.62180233001709,57.0199012756348,-6.05530881881714,8.20690155029297,57.2244300842285,-6.10898733139038,8.17655849456787,57.2355613708496,-5.83204317092896,8.59145927429199,57.0310325622559,-5.77836561203003,7.79200172424316,57.4289627075195,-6.16266393661499,7.76165914535522,57.4400939941406,-5.88572072982788,7.49404430389404,57.5786743164063,-6.40941333770752,7.46370267868042,57.5898094177246,-6.13247013092041,7.16427659988403,57.7414360046387,-6.46620416641235,7.13393402099609,57.7525672912598,-6.18926095962524,6.54581737518311,58.0482940673828,-6.54360771179199,6.51547479629517,58.0594291687012,-6.26666355133057,6.10629081726074,57.9500389099121,-6.57935810089111,6.07594680786133,57.9611740112305,-6.30241441726685,6.51593399047852,57.963924407959,-6.63410091400146,6.2043285369873,57.902961730957,-6.66317367553711,7.13439416885376,57.6570701599121,-6.55669927597046,7.46416234970093,57.494312286377,-6.49990797042847,7.76211929321289,57.344596862793,-6.25315952301025,8.1770191192627,57.1400680541992,-6.19948053359985,8.5919189453125,56.9355392456055,-6.14580249786377,7.687584400177,56.2433242797852,-5.8429012298584,7.2726845741272,56.4478530883789,-5.89657926559448,6.97472810745239,56.5975685119629,-6.1433277130127,6.64495849609375,56.760326385498,-6.200119972229,6.02649831771851,57.0671882629395,-6.27752161026001,5.82846117019653,57.4524879455566,-6.31333494186401,5.85880327224731,57.4413528442383,-6.59027910232544,5.95684099197388,57.3942832946777,-6.67409420013428, 6.10631132125854,57.1332359313965,-6.64275789260864,6.72477197647095,56.8263854980469,-6.56535577774048,7.05454254150391,56.6636238098145,-6.50856494903564,7.35249805450439,56.5139007568359,-6.26181602478027,7.7673978805542,56.3093719482422,-6.20813894271851,6.05684041976929,57.0560569763184,-6.55446577072144,6.67530250549316,56.749195098877,-6.47706317901611,7.00507020950317,56.5864448547363,-6.42027235031128,7.30302715301514,56.4367218017578,-6.17352294921875,7.7179274559021,56.2321929931641,-6.11984539031982,-3.61213994026184,63.0742874145508,0.9124436378479,-3.35697841644287,62.0683555603027,1.8799649477005,-3.08504390716553,62.3842697143555,2.03850078582764,-3.30717325210571,63.3338012695313,1.14116930961609,-2.58666610717773,62.4479675292969,1.94942438602448,-2.8619236946106,63.388801574707,1.0897604227066,-2.32412028312683,62.3157958984375,1.72282636165619,-2.54204511642456,63.1886177062988,0.857616245746613,-2.59025049209595,61.6884994506836,1.16627395153046,-2.85399842262268,62.5235786437988,0.263086229562759,-3.17207551002502,61.7568206787109,1.39954209327698,-3.43519830703735,62.611499786377,0.514534771442413,-3.63598537445068,63.2521781921387,0.69645893573761,-3.32681488990784,63.5149726867676,0.927509665489197,-3.29148149490356,64.2173690795898,-0.109086737036705,-3.62270712852478,63.9034881591797,-0.306464165449142,-2.8858904838562,63.5703086853027,0.875525891780853,-2.83971810340881,64.1814880371094,-0.0564945302903652,-2.55843424797058,63.3702926635742,0.642616629600525,-2.50405740737915,63.9123001098633,-0.123237006366253,-2.8638768196106,62.6970977783203,0.108471132814884,-2.77562379837036,63.1545944213867,-0.604941248893738,-3.46092629432678,62.7867164611816,0.294167369604111,-3.43210530281067,63.3568954467773,-0.579706788063049,-3.256014585495,64.5693740844727,-1.60241901874542,-3.58352303504944,64.0412521362305,-0.546477496623993,-3.24679207801819,64.355598449707,-0.348915934562683,-2.92236948013306,64.8243789672852,-1.32648360729218,-2.79290914535522,64.3191986083984,-0.297434836626053,-2.51000738143921,64.7322540283203,-1.14120411872864, -2.45186758041382,64.0473709106445,-0.362849801778793,-2.19106101989746,64.3612518310547,-1.09568011760712,-2.70859456062317,63.2933158874512,-0.840461909770966,-2.43458151817322,63.6225776672363,-1.45423483848572,-3.38490152359009,63.4919891357422,-0.821362257003784,-3.0491464138031,63.9436988830566,-1.78154337406158,-2.57595777511597,64.9778366088867,-2.6725537776947,-3.1440896987915,64.6701354980469,-1.83323156833649,-2.81245827674866,64.9234924316406,-1.55989825725555,-2.3226158618927,65.2118072509766,-2.34885287284851,-2.39819836616516,64.8362884521484,-1.37234389781952,-1.97928023338318,65.0992202758789,-2.01913595199585,-2.0773754119873,64.4590759277344,-1.32713222503662,-1.72631311416626,64.6864547729492,-1.87331461906433,-2.31362891197205,63.7234535217285,-1.68494808673859,-1.92199409008026,63.942066192627,-2.33426547050476,-2.93078923225403,64.038932800293,-2.01300573348999,-2.42004132270813,64.294548034668,-2.75134778022766,-2.39229536056519,65.0288314819336,-2.85661482810974,-2.14243960380554,65.269775390625,-2.53773021697998,-1.26141941547394,65.4044723510742,-3.14796590805054,-1.37994861602783,65.1316375732422,-3.55027008056641,-1.79749488830566,65.1639251708984,-2.20590353012085,-1.05894148349762,65.2965240478516,-2.71703100204468,-1.54621398448944,64.7531356811523,-2.05670237541199,-0.918171525001526,64.8731536865234,-2.47819972038269,-1.73880863189697,63.9987030029297,-2.52019095420837,-1.05267798900604,64.1080093383789,-2.95110249519348,-2.23095893859863,64.3469390869141,-2.93175864219666,-1.30283260345459,64.4658584594727,-3.51517343521118,-1.14292597770691,65.1440811157227,-3.65478587150574,-1.02547371387482,65.4231796264648,-3.2559015750885,0.13047032058239,65.4414825439453,-3.54996991157532,0.0952271744608879,65.1560363769531,-3.93723583221436,-0.822809159755707,65.3192520141602,-2.82474994659424,0.159597724676132,65.3439025878906,-3.07465958595276,-0.683079063892365,64.8978118896484,-2.58284640312195,0.165363445878029,64.9232025146484,-2.7937171459198,-0.813165485858917,64.1283264160156,-3.05124926567078, 0.108703263103962,64.14697265625,-3.26859927177429,-1.06255924701691,64.4810638427734,-3.61365294456482,0.0793721079826355,64.4871368408203,-3.85984587669373,-2.75332641601563,61.2146377563477,2.80682158470154,-3.02745985984802,62.1653861999512,2.20834875106812,-3.29413962364197,61.8534240722656,2.05397295951843,-2.98762607574463,60.9160995483398,2.68516731262207,-2.5285222530365,62.2322120666504,2.12074708938599,-2.30419564247131,61.3310317993164,2.74024105072021,-2.26474595069885,62.1056976318359,1.90227031707764,-2.0128014087677,61.2975273132324,2.49436450004578,-2.51925134658813,61.4904861450195,1.42052376270294,-2.23242950439453,60.658992767334,2.08475351333618,-2.83238387107849,60.6267929077148,2.28150844573975,-3.10810112953186,61.546142578125,1.58604788780212,-1.99876511096954,60.0553932189941,2.86955976486206,-2.24390172958374,61.076831817627,2.8048152923584,-2.69164276123047,60.940975189209,2.86721706390381,-2.63764548301697,59.9638633728027,2.75425934791565,-2.76606631278992,60.4017868041992,2.44312739372253,-2.16079878807068,60.4579582214355,2.27013802528381,-1.13655304908752,65.2722549438477,-3.20241522789001,-1.22373235225677,65.0585403442383,-3.51007008552551,-0.974662899971008,65.1921691894531,-2.87555885314941,-0.859975397586823,64.8638610839844,-2.68954801559448,-0.959364235401154,64.2740859985352,-3.04318070411682,-1.15380275249481,64.5525436401367,-3.47173738479614,-3.31022834777832,63.2359428405762,0.919619858264923,-3.53940153121948,63.0512771606445,0.743501126766205,-2.97155117988586,63.2838172912598,0.874339401721954,-2.72124218940735,63.1311111450195,0.687183558940887,-2.96068978309631,62.6333312988281,0.285006642341614,-3.40652298927307,62.6991806030273,0.436503946781158,-3.4934549331665,63.9235954284668,-0.430678248405457,-3.23643088340759,64.1706924438477,-0.287341684103012,-2.87822294235229,64.1393966674805,-0.254750579595566,-2.61495733261108,63.9441452026367,-0.299727559089661,-2.81512451171875,63.3578414916992,-0.668448567390442,-3.34042429924011,63.5154266357422,-0.633352518081665, -3.10319185256958,64.5544204711914,-1.68715798854828,-2.838214635849,64.7433624267578,-1.48133432865143,-2.51200199127197,64.6696395874023,-1.33998775482178,-2.25697326660156,64.3717269897461,-1.3023225069046,-2.43367147445679,63.8228034973145,-1.54456543922424,-2.92679381370544,64.0788040161133,-1.82429134845734,-2.22023415565491,65.1060409545898,-2.46578550338745,-2.41531682014465,64.9314041137695,-2.70062112808228,-1.94377982616425,65.021842956543,-2.21043109893799,-1.7426495552063,64.6985168457031,-2.09731411933899,-1.89084160327911,64.1259384155273,-2.44964075088501,-2.28149557113647,64.4059677124023,-2.76189875602722,-3.04034876823425,62.1378059387207,1.9870936870575,-3.23064041137695,61.8979263305664,1.89186644554138,-2.63217568397522,62.1806526184082,1.90964543819427,-2.44575428962708,62.0799980163574,1.75566875934601,-2.62495112419128,61.6172981262207,1.41981995105743,-3.0793662071228,61.6779861450195,1.53219282627106,-2.69351363182068,61.0704765319824,2.73514080047607,-2.83499526977539,60.821403503418,2.6821186542511,-2.32376790046692,61.1692924499512,2.68417191505432,-2.09564399719238,61.1407737731934,2.50819373130798,-2.24191975593567,60.6346855163574,2.28552436828613,-2.71739792823792,60.6012229919434,2.43733906745911,-2.911208152771,60.6353797912598,2.75616860389709,-1.96656572818756,61.0282936096191,2.59466052055359,4.28434991836548,62.8252143859863,0.3774034678936,4.02987480163574,63.1023750305176,0.644034564495087,3.87156915664673,62.1648445129395,1.56714284420013,4.09929990768433,61.8331680297852,1.37475287914276,3.58609437942505,63.185417175293,0.652862966060638,3.37072014808655,62.2600593566895,1.54577028751373,3.22592759132385,63.0066833496094,0.466796100139618,3.07226300239563,62.145580291748,1.35718357563019,3.4125759601593,62.3259162902832,-0.161517307162285,3.22108316421509,61.505199432373,0.772515833377838,4.02672004699707,62.3761367797852,0.0089394748210907,3.83216571807861,61.5358924865723,0.924957275390625,4.28998422622681,63.0021743774414,0.159421265125275,4.18255949020386,63.6572914123535,-0.835323393344879, 3.9013032913208,63.9904899597168,-0.596446633338928,4.03187084197998,63.2828521728516,0.428909122943878,3.45939421653748,63.9827995300293,-0.483302682638168,3.5923113822937,63.3659706115723,0.436583310365677,3.10158205032349,63.7354850769043,-0.503058195114136,3.22455739974976,63.1878814697266,0.250778764486313,3.25768327713013,62.9642868041992,-1.01373946666718,3.41239428520203,62.4991264343262,-0.316789388656616,3.92296314239502,63.1248970031738,-1.07806241512299,4.03345727920532,62.5503234863281,-0.213627681136131,3.68707180023193,64.3503799438477,-2.07286024093628,3.41031622886658,64.624626159668,-1.75556659698486,3.83346271514893,64.1322708129883,-0.828650236129761,4.12010908126831,63.7982597351074,-1.06845033168793,3.02172446250916,64.5577697753906,-1.51601755619049,3.3892765045166,64.1241989135742,-0.716319501399994,2.68918180465698,64.2073211669922,-1.42635130882263,3.02615571022034,63.874584197998,-0.734024167060852,2.83533811569214,63.4563522338867,-1.8113089799881,3.16836261749268,63.1079406738281,-1.23866653442383,3.41911268234253,63.7396774291992,-2.2198121547699,3.85219359397888,63.2637176513672,-1.31172442436218,2.89598488807678,64.8052444458008,-3.04331517219543,2.7037570476532,65.0532608032227,-2.68942427635193,3.27638959884644,64.7314376831055,-1.97245848178864,3.5516083240509,64.4589385986328,-2.28691077232361,2.40160512924194,64.9610366821289,-2.31597256660461,2.88653588294983,64.6695938110352,-1.73042178153992,2.14520502090454,64.564338684082,-2.13563776016235,2.55170559883118,64.3130645751953,-1.64078557491302,2.22989583015442,63.811107635498,-2.61558604240417,2.69096708297729,63.5655975341797,-2.02404379844666,2.688316822052,64.1334228515625,-3.09747505187988,3.27685332298279,63.8431282043457,-2.43361616134644,2.69275808334351,64.8684387207031,-3.20116209983826,1.60463094711304,65.0374984741211,-3.75249838829041,1.55874860286713,65.3155136108398,-3.33905458450317,2.50376582145691,65.1232223510742,-2.85254383087158,1.40982067584991,65.2186508178711,-2.88430953025818,2.20072984695435,65.0378112792969,-2.47681260108948, 1.27623987197876,64.8039398193359,-2.62688946723938,1.94657623767853,64.6429672241211,-2.29336524009705,1.29752290248871,64.0338745117188,-3.11034798622131,2.02724313735962,63.8799133300781,-2.7753689289093,1.4913341999054,64.3777236938477,-3.70449876785278,2.48030972480774,64.1983337402344,-3.25097990036011,1.35693752765656,65.0652313232422,-3.8241708278656,1.31205260753632,65.3494491577148,-3.41428828239441,1.16322147846222,65.2566070556641,-2.95932054519653,1.03120362758636,64.8437347412109,-2.69900345802307,1.04845011234283,64.0696029663086,-3.17738890647888,1.24141275882721,64.4083938598633,-3.76976609230042,3.57369923591614,61.0150680541992,2.37812209129334,3.77027344703674,60.702938079834,2.22727346420288,4.0471248626709,61.6218643188477,1.5565527677536,3.82378196716309,61.9492835998535,1.74413049221039,3.3227744102478,62.0476493835449,1.72428119182587,3.12788796424866,61.1596908569336,2.37217926979065,3.02454996109009,61.9388618469238,1.54388356208801,2.80449461936951,61.1455764770508,2.16795825958252,3.1727123260498,61.3109474182129,1.03485369682312,2.92642593383789,60.4962692260742,1.73520374298096,3.54420852661133,60.4256591796875,1.84945070743561,3.78081870079041,61.3288497924805,1.11927652359009,2.76325130462646,59.9051856994629,2.54690003395081,3.37375426292419,59.7742500305176,2.34694623947144,3.50367212295532,60.7455596923828,2.44744181632996,3.06101846694946,60.9095001220703,2.44536972045898,2.86796164512634,60.2993392944336,1.92940402030945,3.48629307746887,60.2045707702637,2.01948738098145,1.45098149776459,64.9741744995117,-3.69130253791809,1.41963732242584,65.1916275024414,-3.37561774253845,1.29856872558594,65.1204681396484,-3.02958917617798,1.18962597846985,64.7992172241211,-2.82842588424683,1.20325589179993,64.2058715820313,-3.18971633911133,1.35525119304657,64.4734039306641,-3.64174580574036,4.18821001052856,62.8075332641602,0.219903469085693,3.99690103530884,63.0054588317871,0.424512445926666,3.6588876247406,63.0746803283691,0.425081789493561,3.37655878067017,62.9387741088867,0.274015486240387, 3.52792119979858,62.4286651611328,-0.154641181230545,3.99334812164307,62.4657745361328,-0.0648872926831245,4.03926610946655,63.6859970092773,-0.941070854663849,3.81991457939148,63.9481201171875,-0.765456974506378,3.46811485290527,63.9392204284668,-0.684758543968201,3.18946385383606,63.761058807373,-0.693017423152924,3.30093741416931,63.1649284362793,-1.08285391330719,3.83501696586609,63.2890968322754,-1.11953735351563,3.5235903263092,64.3453979492188,-2.1361677646637,3.30114650726318,64.5497131347656,-1.89731824398041,2.99297952651978,64.4960021972656,-1.7129887342453,2.7271716594696,64.2145156860352,-1.64003252983093,2.83482527732849,63.656623840332,-1.90154302120209,3.3008348941803,63.8823738098145,-2.24625611305237,2.73043322563171,64.7690963745117,-3.04928207397461,2.58011960983276,64.9546203613281,-2.79104351997375,2.33586597442627,64.886848449707,-2.500408411026,2.13193011283875,64.576301574707,-2.35984539985657,2.19507622718811,63.9970550537109,-2.72649145126343,2.55687785148621,64.2533493041992,-3.0897331237793,3.80498099327087,61.9218826293945,1.52327609062195,3.96527743339539,61.6709518432617,1.40429544448853,3.39359378814697,61.9905891418457,1.50135791301727,3.18217921257019,61.9024810791016,1.37433695793152,3.28509950637817,61.4308815002441,1.01937413215637,3.7534167766571,61.4624671936035,1.06922543048859,3.49584770202637,60.8752517700195,2.31576895713806,3.61298704147339,60.6180191040039,2.24522376060486,3.12953925132751,60.9972839355469,2.31467223167419,2.87844681739807,60.9838790893555,2.17116379737854,2.96134185791016,60.4705619812012,1.93296670913696,3.44989609718323,60.4066925048828,2.01946258544922,3.68666195869446,60.4272689819336,2.30911779403687,2.7553985118866,60.8793525695801,2.27471375465393,7.27801418304443,38.8856239318848,2.99167585372925,7.27827167510986,38.9228096008301,2.99137020111084,7.23183059692383,38.9346237182617,2.94782590866089,7.23140668869019,38.8737411499023,2.948326587677,7.29706525802612,38.9548759460449,2.99014902114868,7.26260185241699,38.9871253967285,2.9458270072937, 7.32935428619385,38.9732360839844,2.9883394241333,7.31547117233276,39.0171813964844,2.94286394119263,7.36649465560913,38.972957611084,2.98642635345459,7.37627649307251,39.0167350769043,2.93973159790039,7.39852857589722,38.9541320800781,2.98492193222046,7.42872381210327,38.9859046936035,2.93726921081543,7.41687250137329,38.9217910766602,2.98422956466675,7.45876121520996,38.9329528808594,2.93613576889038,7.41661548614502,38.8846054077148,2.98453521728516,7.45833969116211,38.8720664978027,2.93663644790649,7.39782238006592,38.8525352478027,2.98575687408447,7.42757081985474,38.8195648193359,2.93863534927368,7.36553049087524,38.8341789245605,2.9875659942627,7.37470006942749,38.7895088195801,2.94159841537476,7.32839202880859,38.8344497680664,2.98947954177856,7.31389379501343,38.7899589538574,2.94473075866699,7.29635715484619,38.8532829284668,2.9909839630127,7.26144552230835,38.8207893371582,2.94719362258911,7.18508529663086,38.9275054931641,2.0414457321167,7.18466186523438,38.8666191101074,2.04194688796997,7.21585369110107,38.9800071716309,2.0394458770752,7.26872682571411,39.0100593566895,2.03648328781128,7.3295316696167,39.0096130371094,2.0333514213562,7.38197994232178,38.9787864685059,2.03088855743408,7.41201877593994,38.9258308410645,2.02975559234619,7.41159391403198,38.8649444580078,2.03025579452515,7.38082551956177,38.812442779541,2.03225469589233,7.32795286178589,38.7823905944824,2.03521823883057,7.26714944839478,38.7828369140625,2.0383505821228,7.21470022201538,38.8136672973633,2.04081296920776,7.22681045532227,38.9149703979492,1.99354636669159,7.22654962539673,38.8777847290039,1.99385249614716,7.24560308456421,38.9470405578613,1.9923255443573,7.27789306640625,38.9653968811035,1.99051570892334,7.31503295898438,38.9651222229004,1.9886029958725,7.34706735610962,38.9462890625,1.98709845542908,7.36541128158569,38.9139518737793,1.98640644550323,7.36515426635742,38.8767623901367,1.98671197891235,7.346360206604,38.8446960449219,1.98793375492096,7.31406831741333,38.8263397216797,1.9897426366806,7.276930809021,38.8266143798828,1.99165594577789, 7.24489736557007,38.8454437255859,1.99316024780273,7.34744358062744,38.9037055969238,2.98795223236084,7.29598045349121,38.895866394043,1.99012982845306,-9.78334426879883,33.6398735046387,4.95875310897827,-9.77644729614258,33.6859130859375,4.96339130401611,-9.73664379119873,33.7019157409668,4.89703321456909,-9.74793434143066,33.6265411376953,4.88943862915039,-9.76406002044678,33.7222595214844,4.98891019821167,-9.7163610458374,33.7614250183105,4.93881559371948,-9.74949932098389,33.7391777038574,5.02847194671631,-9.69252109527588,33.7891273498535,5.00358915328979,-9.73666667938232,33.7321357727051,5.07147693634033,-9.67151069641113,33.7775955200195,5.07400035858154,-9.72900199890137,33.7030143737793,5.1064019203186,-9.65896129608154,33.7299194335938,5.13118028640747,-9.72855758666992,33.6596221923828,5.12388706207275,-9.65823459625244,33.6588745117188,5.15980815887451,-9.73545360565186,33.613582611084,5.11924982070923,-9.66952514648438,33.58349609375,5.1522159576416,-9.74784278869629,33.5772361755371,5.09372901916504,-9.6898078918457,33.523983001709,5.11043310165405,-9.76240253448486,33.5603179931641,5.0541672706604,-9.71364879608154,33.4962844848633,5.04565811157227,-9.77523517608643,33.5673599243164,5.01116228103638,-9.73465728759766,33.5078163146973,4.97524881362915,-9.7829008102417,33.5964813232422,4.97623777389526,-9.74720764160156,33.555492401123,4.91806745529175,-8.68862438201904,33.5623207092285,4.5660605430603,-8.69991493225098,33.486946105957,4.55846548080444,-8.6683406829834,33.6218338012695,4.60784196853638,-8.64450073242188,33.6495361328125,4.67261600494385,-8.62349128723145,33.6380043029785,4.74302673339844,-8.61094093322754,33.5903282165527,4.80020713806152,-8.61021518707275,33.5192794799805,4.82883739471436,-8.62150573730469,33.443904876709,4.8212423324585,-8.6417875289917,33.384391784668,4.77945995330811,-8.66562843322754,33.3566932678223,4.71468496322632,-8.68663787841797,33.3682250976563,4.6442756652832,-8.69918727874756,33.415901184082,4.58709478378296,-8.62269496917725,33.5322341918945,4.59902667999268, -8.6295919418335,33.486198425293,4.59438753128052,-8.61030673980713,33.5685844421387,4.62454605102539,-8.59574604034424,33.5855026245117,4.66410827636719,-8.58291435241699,33.5784606933594,4.70711278915405,-8.57524967193604,33.5493392944336,4.74203681945801,-8.57480525970459,33.5059471130371,4.75952243804932,-8.58170127868652,33.4599075317383,4.75488424301147,-8.59408950805664,33.4235610961914,4.72936534881592,-8.60865020751953,33.4066429138184,4.68980169296265,-8.62148189544678,33.4136848449707,4.64679718017578,-8.62914752960205,33.4428062438965,4.61187362670898,-9.75595092773438,33.6497459411621,5.04131889343262,-8.60219860076904,33.4960746765137,4.67695474624634,-9.74101448059082,35.714599609375,3.85751342773438,-9.86602973937988,35.7726554870605,3.47347187995911,-9.97085666656494,35.6495018005371,3.47345089912415,-9.870774269104,35.5752906799316,3.83032155036926,-9.68454742431641,35.8668441772461,3.81067728996277,-9.79458618164063,35.8733024597168,3.47374320030212,-9.52666187286377,35.9182891845703,4.02155208587646,-9.62035369873047,35.9681434631348,3.76721882820129,-9.54553604125977,35.8229598999023,4.08965349197388,-9.4582986831665,35.9390258789063,4.01036548614502,-9.5352258682251,36.0346794128418,3.7266902923584,-9.4575366973877,35.8144416809082,4.11982440948486,-9.5669527053833,35.6657867431641,4.17208671569824,-9.62007713317871,35.4551315307617,4.32985925674438,-9.50944805145264,35.4093933105469,4.42615509033203,-9.46608638763428,35.6384925842285,4.23215818405151,-9.78408527374268,35.5054550170898,3.9941668510437,-9.63376522064209,36.0123100280762,3.45799255371094,-9.72309112548828,35.9531021118164,3.46987771987915,-9.35143184661865,35.9486656188965,3.99241375923157,-8.98878192901611,35.9121856689453,3.88087320327759,-9.06758308410645,36.0587348937988,3.56467628479004,-9.41837596893311,36.0752944946289,3.68297219276428,-9.3454122543335,35.8030281066895,4.13016843795776,-8.97745895385742,35.7535247802734,4.02928638458252,-9.35027408599854,35.6183891296387,4.25739240646362,-8.97404384613037,35.5641059875488,4.16093111038208, -9.37691307067871,35.3826560974121,4.46194314956665,-8.96559906005859,35.3266754150391,4.36308479309082,-9.16642284393311,36.040111541748,3.34176683425903,-9.50882720947266,36.0511817932129,3.43420505523682,-8.51512336730957,35.82080078125,3.67910408973694,-8.62055587768555,35.9603652954102,3.40104579925537,-8.49166774749756,35.6696319580078,3.80719947814941,-8.47049617767334,35.4844856262207,3.93344354629517,-8.40306663513184,35.2210350036621,4.14138460159302,-8.73949146270752,35.9448280334473,3.21085333824158,-10.2052211761475,33.757396697998,4.50592947006226,-9.97318077087402,34.9937400817871,4.2854528427124,-10.1497535705566,35.0821075439453,3.97291660308838,-10.4171237945557,33.715633392334,4.16602897644043,-10.0163803100586,33.7997207641602,4.9263710975647,-9.80999088287354,34.9454536437988,4.70469665527344,-9.86767196655273,33.8091239929199,5.06170845031738,-9.67784786224365,34.9037628173828,4.83877611160278,-9.66173553466797,33.803092956543,5.10906410217285,-9.48658180236816,34.878044128418,4.87704467773438,-9.1462287902832,33.7655029296875,5.0027813911438,-8.97988986968994,34.8264312744141,4.76251649856567,-8.54841613769531,33.7106056213379,4.77185153961182,-8.3776159286499,34.7554130554199,4.5395975112915,-9.95896339416504,35.483642578125,3.87343168258667,-9.84402561187744,35.3857116699219,4.11188650131226,-10.0861339569092,35.5603713989258,3.4769971370697,-9.69511127471924,35.3164482116699,4.50688219070435,-9.57850933074951,35.2590255737305,4.63353776931763,-9.41642093658447,35.2251739501953,4.67538499832153,-8.95109081268311,35.1678276062012,4.5689754486084,-8.36990261077881,35.0727005004883,4.36221933364868,-8.25675678253174,34.9143447875977,4.01728248596191,-8.8719654083252,33.5756645202637,3.51776742935181,-8.56477737426758,35.4037742614746,3.1792995929718,-8.38611030578613,35.3297424316406,3.55534768104553,-8.21022415161133,34.9344329833984,4.36779880523682,-8.22092342376709,34.7294998168945,4.4049391746521,-8.21338939666748,34.7530708312988,4.25973176956177,-8.21366500854492,34.9857864379883,4.27177286148071, -8.35896968841553,34.9792594909668,4.4604549407959,-8.40291786193848,35.7454528808594,3.54616498947144,-8.50260543823242,35.858699798584,3.32037091255188,-8.37730026245117,35.6140022277832,3.64707708358765,-8.41612148284912,35.5419960021973,3.4203827381134,-8.47990322113037,35.6955146789551,3.2742965221405,-8.34787940979004,35.4510459899902,3.76454997062683,-8.31959056854248,35.2991485595703,3.85887670516968,-8.59974193572998,35.8291664123535,3.16135144233704,-8.54978466033936,35.6963768005371,3.14328336715698,-8.39429187774658,33.6788864135742,4.62394094467163,-8.42716217041016,33.648307800293,4.40201473236084,-9.89840602874756,35.2682952880859,4.19409036636353,-10.0428628921509,35.3748893737793,3.91542863845825,-10.1934928894043,35.4644393920898,3.47839403152466,-10.3314628601074,35.1783294677734,3.44022393226624,-9.74534225463867,35.2012710571289,4.60747194290161,-9.62170696258545,35.1468811035156,4.74077701568604,-9.44297790527344,35.1148834228516,4.78078842163086,-8.95193004608154,35.0592346191406,4.66892528533936,-8.269118309021,35.1063690185547,4.06393909454346,-9.38967800140381,35.7668380737305,3.82832741737366,-9.42735767364502,35.4890785217285,4.0159912109375,-9.74074840545654,35.5043563842773,3.45244264602661,-9.52049541473389,35.7991027832031,3.45902061462402,-9.08410167694092,35.7472190856934,3.73782849311829,-9.07610988616943,35.4251823425293,3.9787495136261,-9.41947460174561,35.8356666564941,3.45036768913269,-9.18242740631104,35.8244323730469,3.40057396888733,-8.65144538879395,35.6751365661621,3.54329299926758,-8.60013294219971,35.4023666381836,3.74025058746338,-8.77639675140381,35.7341575622559,3.28729295730591,-9.52271366119385,35.0278701782227,4.49346399307251,-9.93948078155518,35.3462600708008,3.43713688850403,-9.04946708679199,34.9420700073242,4.46935939788818,-8.44690418243408,34.8676719665527,4.28323364257813,-8.76131248474121,35.4674453735352,3.30297207832336,-8.88348388671875,34.560848236084,3.4589376449585,-8.76171779632568,35.6798629760742,3.27803158760071,-10.0887289047241,33.6657524108887,4.40896081924438, -10.1630764007568,33.6840438842773,4.47010660171509,-10.3646583557129,33.6449432373047,4.14517593383789,-10.2802152633667,33.633186340332,4.11683940887451,-10.6405515670776,33.5438613891602,3.26456880569458,-10.4338436126709,33.516487121582,3.20561170578003,-10.4148750305176,33.5800399780273,3.67706537246704,-10.5326728820801,33.5909233093262,3.69249868392944,-9.90896511077881,33.709846496582,4.81917142868042,-9.97772789001465,33.7272644042969,4.88665962219238,-9.79854488372803,33.7178726196289,4.92589521408081,-9.84343433380127,33.7358093261719,5.00927448272705,-9.64190673828125,33.7133178710938,4.95843362808228,-9.6579065322876,33.7306976318359,5.05241680145264,-9.21004486083984,33.6847229003906,4.86349678039551,-9.17902374267578,33.6972389221191,4.95234203338623,-8.68776798248291,33.6452522277832,4.68041706085205,-8.61485767364502,33.6486396789551,4.73948431015015,-10.0402870178223,35.0881271362305,3.38248467445374,-10.6457843780518,33.6627044677734,3.13593530654907,-10.4437322616577,33.634449005127,3.07819509506226,-10.5912199020386,33.6596031188965,3.71049070358276,-10.6880941390991,33.6161956787109,3.30864119529724,-8.47219657897949,33.6223754882813,4.61491537094116,-8.46827793121338,33.6228790283203,4.40820407867432,-10.6944246292114,33.7458763122559,3.16912603378296,-0.122992999851704,43.4906578063965,6.96594190597534,-0.126481994986534,42.5673217773438,6.96594142913818,-0.126481994986534,42.5673217773438,6.38594198226929,-0.122992999851704,43.4906578063965,6.38594198226929,0.597185015678406,42.4653396606445,6.96594190597534,0.612924516201019,42.4631614685059,6.38594770431519,0.729595005512238,41.8761787414551,6.96593952178955,0.729551017284393,41.8645477294922,6.38594102859497,0.731296002864838,42.3263778686523,6.38594198226929,0.731275975704193,42.3209381103516,6.96594142913818,0.597548007965088,41.7322731018066,6.96594142913818,-0.129894003272057,41.6643905639648,6.96594190597534,-0.129894003272057,41.6643905639648,6.38594102859497,0.609617590904236,41.7334442138672,6.38594722747803,-0.133908003568649,40.6020469665527,6.96594142913818, -0.13390801846981,40.6020545959473,6.3859429359436,-0.234284996986389,40.5024223327637,6.96594190597534,-0.234284996986389,40.5024223327637,6.38594102859497,-0.261011004447937,41.7705078125,7.05283880233765,-0.265424996614456,40.6400299072266,7.05284023284912,0.462424010038376,41.8389549255371,7.05283880233765,0.60971999168396,42.2453231811523,7.05284023284912,0.608789026737213,41.9991340637207,7.05283832550049,-0.258341014385223,42.4770355224609,7.05283880233765,0.452903985977173,42.3955726623535,7.05283880233765,-0.254509001970291,43.4910354614258,7.05283880233765,-0.222614005208015,43.5910339355469,6.38594198226929,-0.222614005208015,43.5910339355469,6.96594142913818,-0.720449984073639,40.5042610168457,6.96594142913818,-0.720449984073639,40.5042610168457,6.38594198226929,-0.744120001792908,40.6419563293457,7.05283880233765,-2.12365031242371,39.5727958679199,6.96594142913818,-2.1295530796051,39.5666122436523,6.38594198226929,-2.12485098838806,39.7394599914551,7.05283880233765,-2.7805540561676,41.780948638916,7.05283880233765,-2.77405595779419,43.5006904602051,7.0528416633606,-2.77367949485779,43.6007080078125,6.96594858169556,-2.773677110672,43.6006736755371,6.38594198226929,-2.22244691848755,39.5865783691406,6.96594190597534,-3.35621309280396,41.3325271606445,6.96594142913818,-3.34770727157593,41.3433380126953,6.38594198226929,-2.21525001525879,39.5751762390137,6.38594198226929,-2.22836995124817,39.7522430419922,7.05283880233765,-3.29831385612488,41.4371223449707,7.05284023284912,-3.34866428375244,41.512393951416,6.96594190597534,-3.34866428375244,41.512393951416,6.38594198226929,-2.88055300712585,41.8218193054199,6.96594190597534,-2.87405395507813,43.5010528564453,6.96594190597534,-2.87405395507813,43.5010528564453,6.38594341278076,-2.88055300712585,41.8218193054199,6.38594198226929,-22.4020500183105,48.1817207336426,1.54338073730469,-21.9378795623779,47.5264930725098,0.964988231658936,-24.7054176330566,45.0436820983887,3.28460216522217,-24.3645610809326,44.4632720947266,2.86222863197327,-24.1518211364746,45.5265579223633,4.87630271911621, -24.5619010925293,45.4206123352051,4.05836725234985,-22.384069442749,48.530200958252,2.35600328445435,-22.1372318267822,48.7162055969238,3.37709856033325,-21.8083248138428,43.6105880737305,5.06077337265015,-19.1979789733887,46.1232490539551,4.08673620223999,-22.164608001709,44.1487350463867,5.74446392059326,-19.3826751708984,46.7098121643066,4.98189163208008,-21.5868129730225,48.536376953125,4.22997140884399,-23.6013107299805,45.3508186340332,5.63922548294067,-23.1435661315918,45.1739349365234,6.00655937194824,-20.9026660919189,48.1520385742188,4.80538845062256,-23.7835960388184,43.9319152832031,2.81814455986023,-21.0593452453613,46.5162734985352,0.742828786373138,-19.3185253143311,45.769229888916,3.21123647689819,-22.5982704162598,43.4730453491211,3.63622760772705,-19.7424182891846,45.6002197265625,1.78484308719635,-22.1106472015381,43.5050811767578,4.48459529876709,-23.2739486694336,43.5893974304199,2.90428400039673,-20.3708744049072,45.9203720092773,1.06325078010559,-22.7010631561279,44.7575988769531,6.06966114044189,-20.2916965484619,47.6790084838867,5.20238351821899,-21.4682216644287,48.5379943847656,4.07685518264771,-21.7997226715088,48.6303443908691,3.49851107597351,-22.1923599243164,48.2021217346191,1.5099401473999,-21.9199409484863,47.7049674987793,0.963749051094055,-19.2681007385254,46.0355033874512,3.33348369598389,-19.3146953582764,46.3306922912598,3.93647480010986,-23.4840717315674,45.0589866638184,5.87233924865723,-22.8347396850586,44.6621704101563,6.08595991134644,-24.4846878051758,44.5031890869141,3.10009932518005,-24.6617679595947,44.782642364502,3.41746973991394,-23.3162288665771,43.638298034668,3.18752980232239,-23.7745971679688,43.8534393310547,2.93733525276184,-20.3229217529297,46.124324798584,0.996055424213409,-19.7163581848145,45.8205032348633,1.76762294769287,-24.60475730896,45.2035064697266,3.98160099983215,-24.0964794158936,45.3257904052734,4.83113479614258,-24.1667976379395,44.1854057312012,2.91812348365784,-22.1245307922363,43.8912582397461,5.55091381072998,-22.0114917755127,43.6447410583496,5.10274362564087, -23.6671695709229,45.305061340332,5.63549709320068,-22.1414070129395,48.3773384094238,1.94118678569794,-22.1155433654785,48.4054985046387,2.18899011611938,-20.8544502258301,48.1285552978516,4.59779596328735,-22.8147830963135,43.5122756958008,3.69179534912109,-24.6724586486816,45.0163688659668,3.85816407203674,-22.255407333374,43.5268859863281,4.54903697967529,-19.7616958618164,47.168327331543,4.8857307434082,-20.1421985626221,47.6117973327637,5.04017925262451,-22.4245796203613,44.2923469543457,5.93594074249268,-19.41969871521,46.6725616455078,4.51129245758057,-19.3608703613281,45.8563117980957,2.67447733879089,-20.7665348052979,46.4529418945313,0.719281196594238,-21.1806507110596,46.8724899291992,0.734371244907379,-22.0227737426758,48.5846862792969,2.84799718856812,-21.5573883056641,47.3186416625977,0.904423534870148,-19.3374500274658,45.7312431335449,1.88695085048676,-19.5699977874756,45.7080688476563,1.2679615020752,-20.1725769042969,46.0857086181641,0.725336492061615,-20.6738948822021,46.4570732116699,0.412560313940048,-21.1447601318359,46.9291381835938,0.417648464441299,-21.5717449188232,47.4324417114258,0.604677438735962,-22.0146598815918,47.9422149658203,0.768847227096558,-22.2993946075439,48.4316864013672,1.26660573482513,-22.2835540771484,48.7297515869141,2.02767109870911,-22.1839542388916,48.9587860107422,2.82406663894653,-21.8414707183838,48.9177017211914,3.55330300331116,-21.4668483734131,48.8133392333984,4.20687675476074,-21.0063438415527,48.5632362365723,4.71491765975952,-20.5050296783447,48.1918716430664,5.02769327163696,-19.9782161712646,47.7596397399902,5.25458002090454,-19.5416946411133,47.2631225585938,5.10708808898926,-19.1298408508301,46.6791572570801,4.68784427642822,-18.939790725708,46.2231750488281,4.04214715957642,-18.9805450439453,45.9853324890137,3.3668098449707,-19.0853824615479,45.7828369140625,2.6220817565918,-18.1600589752197,46.6569938659668,1.37307822704315,-18.426139831543,46.6431617736816,0.695582926273346,-19.0699462890625,47.0431938171387,0.107480309903622,-19.6161346435547,47.4477996826172,-0.233294531702995, -20.1226425170898,47.9667549133301,-0.200760871171951,-20.5982398986816,48.5077171325684,-0.040066946297884,-21.0171203613281,49.0453948974609,0.249932289123535,-21.2495079040527,49.4981117248535,0.785253524780273,-21.3609409332275,49.9169731140137,1.53120338916779,-21.2518730163574,50.1637191772461,2.39346218109131,-20.8882293701172,50.1286926269531,3.18859696388245,-20.480073928833,50.0149917602539,3.90067601203918,-19.978343963623,49.7425003051758,4.45419454574585,-19.4052658081055,49.3570365905762,4.90646600723267,-18.8617305755615,48.8644409179688,5.02746105194092,-18.3861312866211,48.3234825134277,4.86676645278931,-17.9452476501465,47.6973037719727,4.41543531417847,-17.7366161346436,47.2030220031738,3.72183990478516,-17.7712059020996,46.9338340759277,2.98540925979614,-17.8854274749756,46.713207244873,2.17401576042175,-18.1495018005371,46.9325866699219,1.49883544445038,-17.9191188812256,47.0114860534668,2.24770545959473,-17.8125629425049,47.2173118591309,3.00464653968811,-17.7659759521484,47.3819618225098,3.36750364303589,-18.0165863037109,47.9198875427246,4.21446561813354,-18.3593807220459,48.4160575866699,4.58793210983276,-18.7763690948486,48.9096298217773,4.77557802200317,-19.2775058746338,49.3733863830566,4.68725728988647,-20.2334575653076,49.9592819213867,3.79440307617188,-20.6715030670166,50.0821533203125,3.03220653533936,-20.9079055786133,50.0307273864746,2.31216287612915,-20.9988117218018,49.7934913635254,1.50833106040955,-20.8822746276855,49.4387969970703,0.836857914924622,-20.654182434082,49.0165824890137,0.539040386676788,-20.2702236175537,48.5287246704102,0.225860998034477,-20.011625289917,48.1967315673828,0.169654786586761,-19.7482299804688,47.9482192993164,-0.0239475779235363,-18.9396018981934,47.2326812744141,0.31434291601181,-18.4715461730957,46.9784736633301,0.830715239048004,-21.0599403381348,50.2913818359375,3.28496885299683,-20.6517868041992,50.1776809692383,3.99704837799072,-21.423583984375,50.3264122009277,2.48983407020569,-21.5326519012451,50.079662322998,1.62757539749146,-22.4552669525146,48.8924407958984,2.12404298782349, -22.3556652069092,49.1214752197266,2.92043828964233,-22.0131816864014,49.080394744873,3.6496753692627,-21.6385593414307,48.9760284423828,4.3032488822937,-21.1780529022217,48.7259254455566,4.81128883361816,-20.1500568389893,49.9051895141602,4.55056667327881,-19.8145771026611,46.1965484619141,0.465458303689957,-19.2947864532471,46.6395530700684,0.164982780814171,-19.851354598999,46.3646507263184,0.545339286327362,-19.3213081359863,46.8249206542969,0.248330503702164,-18.4488430023193,46.8108177185059,0.76314902305603,-19.6774959564209,45.7687377929688,1.3232489824295,-18.8787593841553,45.8631553649902,3.38570284843445,-18.9835968017578,45.6606597900391,2.64097476005554,-17.7836418151855,46.5910263061523,2.1929087638855,-17.6694202423096,46.811653137207,3.00430226325989,-17.6151103973389,46.9004898071289,2.97250294685364,-17.7293338775635,46.6798629760742,2.16110944747925,-17.6784820556641,46.8914909362793,2.22928833961487,-17.5719261169434,47.0973129272461,2.98622941970825,-19.0120277404785,45.8349990844727,3.41211867332459,-19.1168651580811,45.6325035095215,2.66739082336426,-19.2995853424072,45.8851699829102,3.37879276275635,-19.3923530578613,45.7059783935547,2.71978616714478,-23.6020965576172,42.4886283874512,4.21740007400513,-24.0390434265137,42.5906944274902,3.76165699958801,-24.4657897949219,42.7697563171387,3.48394298553467,-24.9110813140869,43.0958671569824,3.48783564567566,-25.2296810150146,43.3942337036133,3.6277711391449,-25.4390163421631,43.6843681335449,3.91812968254089,-25.6448230743408,44.0140953063965,4.5360369682312,-25.4211101531982,44.173267364502,5.21521854400635,-25.0152473449707,44.1889839172363,5.87159967422485,-24.5331020355225,44.0858268737793,6.39444398880005,-24.2935276031494,43.9908142089844,6.32334661483765,-23.6125564575195,43.6142311096191,6.57493114471436,-23.1792774200439,43.2090682983398,6.38589477539063,-22.8766670227051,42.7984848022461,5.98477125167847,-22.8129253387451,42.4254875183105,5.29610729217529,-22.7085399627686,43.4084663391113,3.62266159057617,-23.2508773803711,43.5571594238281,3.10341167449951, -23.7290058135986,43.7791404724121,2.83729338645935,-24.2031059265137,44.1235504150391,2.83552932739258,-24.5413093566895,44.4444618225098,2.9929051399231,-24.7613124847412,44.7580223083496,3.31627941131592,-24.8992767333984,45.2632522583008,3.92786908149719,-24.6648254394531,45.4869651794434,4.45191526412964,-24.0667724609375,45.5779266357422,5.56209564208984,-23.6824283599854,45.3489074707031,5.97707366943359,-23.4934158325195,45.0926094055176,5.96880340576172,-22.7836380004883,44.6977272033691,6.22604417800903,-22.3307552337646,44.27001953125,6.01956701278687,-22.0103874206543,43.8350105285645,5.59420156478882,-21.9547653198242,43.440372467041,4.84743356704712,-23.7006778717041,42.5842094421387,4.29594802856445,-22.9873161315918,42.6391448974609,5.46495914459229,-23.060697555542,42.8498802185059,5.78238868713379,-23.2499942779541,43.226188659668,6.30128717422485,-23.6414680480957,43.5781860351563,6.44240856170654,-24.5210266113281,43.9476547241211,6.11971950531006,-24.898904800415,44.0220222473145,5.69627857208252,-25.2336368560791,44.0161056518555,5.16977643966675,-25.3931694030762,43.8623733520508,4.60062789916992,-25.4039688110352,43.7053184509277,4.01024484634399,-25.2397403717041,43.4337997436523,3.71354222297668,-24.8973350524902,43.1546020507813,3.67040634155273,-24.4386367797852,42.8376426696777,3.65668988227844,-24.0960559844971,42.6828956604004,3.8564293384552,-24.7833137512207,45.0106201171875,3.81515216827393,-25.447660446167,43.914134979248,4.38937330245972,-24.2597980499268,43.9135971069336,6.20571947097778,-25.4134788513184,43.8154411315918,4.35810327529907,-24.985466003418,44.268180847168,5.78709697723389,-24.8653507232666,44.1018943786621,5.61898374557495,-25.3341484069824,44.2546806335449,5.22318649291992,-25.1503314971924,44.096851348877,5.17074155807495,-24.1012134552002,45.5726890563965,5.49815893173218,-24.6343822479248,45.4915962219238,4.50843048095703,-25.2383289337158,44.3627853393555,5.23182153701782,-24.6551876068115,45.3935508728027,4.63619089126587,-24.9477596282959,44.3740348815918,5.70174646377563, -24.210880279541,45.461124420166,5.46096467971802,-25.0922203063965,44.3756713867188,5.19212770462036,-24.5868301391602,45.2690048217773,4.67591428756714,-24.840389251709,44.3854217529297,5.59939527511597,-24.2017631530762,45.327564239502,5.39071893692017,-21.8714790344238,43.4021072387695,4.89463138580322,-22.733699798584,42.3764038085938,5.31425333023071,-21.9884815216064,43.612491607666,5.1719913482666,-22.8765773773193,42.6221656799316,5.60099172592163,-21.8782711029053,43.5508041381836,5.19777011871338,-22.7452659606934,42.5296897888184,5.6197304725647,-23.5394515991211,43.6381874084473,6.61610221862793,-23.1375846862793,43.2624015808105,6.44077062606812,-22.3505821228027,44.2464332580566,6.10100269317627,-22.7706279754639,44.6431274414063,6.29250907897949,-22.7341136932373,44.7321548461914,6.18907356262207,-22.3140659332275,44.3354606628418,5.99756574630737,-22.3951377868652,44.3589134216309,5.93493366241455,-22.7750091552734,44.7120819091797,6.09634160995483,-23.6365718841553,43.5489616394043,6.58618783950806,-23.2347049713135,43.1731758117676,6.41085624694824,-23.6633892059326,43.5155258178711,6.46327352523804,-23.3002948760986,43.1890449523926,6.3323826789856,-23.2172451019287,42.6339797973633,5.04120302200317,-22.6529445648193,42.6419715881348,4.88354730606079,-22.7472667694092,42.721263885498,4.90590715408325,-22.4277858734131,43.1294479370117,4.67683029174805,-22.3620510101318,43.0246162414551,4.65405035018921,-22.1816253662109,43.4426612854004,4.50388669967651,-24.0265216827393,42.5450248718262,3.7071475982666,-24.4532699584961,42.7240867614746,3.42943382263184,-23.7164859771729,43.733470916748,2.78278398513794,-23.2383575439453,43.5114898681641,3.04890275001526,-23.2117614746094,43.6130676269531,3.0797917842865,-23.6898899078369,43.8350486755371,2.81367349624634,-23.735481262207,43.9093475341797,2.91371536254883,-23.2771129608154,43.694206237793,3.16390991210938,-24.0792198181152,42.5373382568359,3.78909802436829,-24.5059661865234,42.7164001464844,3.51138377189636,-24.13623046875,42.6295394897461,3.88387060165405, -24.4788150787354,42.7842864990234,3.68413090705872,-22.1667804718018,43.211009979248,5.33818578720093,-22.1515426635742,43.0689430236816,5.03093194961548,-22.385612487793,42.9532775878906,5.44468927383423,-22.3880958557129,42.7875366210938,5.14605522155762,-22.2405643463135,43.1241111755371,5.37409496307373,-22.1619033813477,43.16552734375,5.23982000350952,-22.1553688049316,43.1046142578125,5.10808849334717,-22.2210655212402,42.9862403869629,5.06476593017578,-22.3165550231934,42.8726425170898,5.11123847961426,-22.3873310089111,42.8386306762695,5.23811817169189,-22.3864707946777,42.8959579467773,5.34140396118164,-22.3239517211914,43.0259017944336,5.41468000411987,-22.3121013641357,42.9663772583008,5.27273082733154,-22.3124008178711,42.9463119506836,5.23658084869385,-22.2876300811768,42.9582099914551,5.19217300415039,-22.254207611084,42.997974395752,5.17590713500977,-22.2312145233154,43.0394058227539,5.19106960296631,-22.2335014343262,43.0607223510742,5.23717641830444,-22.2610340118408,43.0462265014648,5.28417253494263,-22.2902202606201,43.0118560791016,5.29837703704834,-22.2552661895752,42.9270706176758,5.29389572143555,-22.2555656433105,42.9070053100586,5.25774621963501,-22.2307929992676,42.9189071655273,5.21333789825439,-22.1973705291748,42.958667755127,5.19707250595093,-22.1743774414063,43.0000991821289,5.21223497390747,-22.1766662597656,43.0214157104492,5.25834131240845,-22.2041969299316,43.0069198608398,5.30533790588379,-22.2333831787109,42.9725532531738,5.3195424079895,-22.2273292541504,42.9329032897949,5.28440809249878,-22.2275142669678,42.9205322265625,5.26211595535278,-22.2122364044189,42.9278678894043,5.23473072052002,-22.1916275024414,42.9523849487305,5.22470045089722,-22.1774463653564,42.9779396057129,5.23405075073242,-22.178861618042,42.991081237793,5.26248359680176,-22.1958351135254,42.9821434020996,5.29146432876587,-22.2138366699219,42.9609489440918,5.30022382736206,-22.3022117614746,43.4858360290527,5.72577333450317,-22.6179618835449,43.9109115600586,6.1435604095459,-22.5559597015381,43.1822204589844,5.84017658233643, -22.868013381958,43.598258972168,6.25151443481445,-23.1094093322754,42.983512878418,6.14117527008057,0.0135970851406455,49.8888130187988,5.46461820602417,-0.0439089983701706,46.9334030151367,5.46729421615601,-0.181864738464355,56.3130836486816,-4.71527814865112,-0.172646686434746,57.6230239868164,-4.51124048233032,0.0305423717945814,61.7640762329102,-3.31285810470581,-0.0491822399199009,60.4813423156738,-3.89235258102417,-0.0625703707337379,51.1098365783691,-4.30081701278687,-0.0205972474068403,49.2944297790527,-3.22874736785889,-0.176884800195694,54.6524085998535,-4.77034664154053,1.17273511932581e-005,52.8985023498535,5.39261341094971,0.137227490544319,54.0256233215332,5.28923416137695,-0.136817902326584,52.6190414428711,-4.49335432052612,0.184443131089211,54.9490509033203,5.17759370803833,0.241316020488739,56.303783416748,4.55678033828735,-7.75623239065986e-017,44.6220588684082,5.95007181167603,-7.75623239065986e-017,44.1932983398438,-2.4703152179718,0.052837498486042,51.2362060546875,5.59731817245483,0.335718125104904,59.506462097168,2.47581624984741,0.318446129560471,58.4727668762207,3.11742997169495,-5.00296115875244,57.2223930358887,-5.05353212356567,-3.89901828765869,57.3001937866211,-4.94295692443848,-3.80570006370544,58.7004356384277,-5.00134325027466,-5.01546001434326,58.6748123168945,-4.51018762588501,-2.33792757987976,49.2690544128418,5.31126832962036,-3.19219017028809,46.8397331237793,5.11824417114258,-4.16545343399048,46.8441047668457,5.14115715026855,-4.33468294143677,48.3736190795898,4.74083423614502,-0.508937001228333,46.9681167602539,5.79316377639771,-0.459551274776459,49.8549499511719,5.72826194763184,-4.9380989074707,44.0710144042969,-0.0603329986333847,-5.70313310623169,45.5682716369629,-0.12718839943409,-6.18036985397339,45.2744522094727,1.05097448825836,-5.83846712112427,44.3852729797363,1.56467497348785,-5.37826013565063,46.895393371582,-1.29639673233032,-7.40615081787109,51.1274833679199,-0.183409884572029,-6.76184320449829,49.4113388061523,-0.870985507965088,-6.24649906158447,49.6185493469238,-1.80992066860199, -7.16691017150879,51.5537223815918,-1.74251294136047,-4.96109008789063,46.449836730957,4.62802600860596,-5.02808284759521,47.667839050293,4.1308741569519,-5.50866508483887,49.6626396179199,4.08968114852905,-4.43541669845581,49.9843826293945,4.87894105911255,-5.99175930023193,47.1326713562012,0.551007688045502,-6.54927587509155,49.1226081848145,-0.0480374731123447,-6.34458684921265,48.3535385131836,1.34890067577362,-6.20943117141724,46.6569442749023,1.74234962463379,-5.83220386505127,49.9621200561523,-2.57093405723572,-6.44042301177979,51.9786491394043,-3.23154377937317,-4.97103071212769,50.3766403198242,-3.72068238258362,-2.57297945022583,50.9226188659668,-4.10634851455688,-3.04856324195862,52.3631401062012,-4.5895528793335,-5.39983701705933,52.1313934326172,-4.45549535751343,-4.20102405548096,43.5664901733398,5.19080018997192,-5.09468984603882,43.6128387451172,4.61228513717651,-5.75057411193848,44.0617218017578,3.85488200187683,-6.00133609771729,46.3558654785156,3.68154311180115,-6.32964134216309,44.886531829834,2.16583490371704,-4.61951017379761,59.6811981201172,0.797900199890137,-5.18459749221802,60.2807922363281,0.704080522060394,-4.56298160552979,60.2502746582031,0.991760969161987,-4.66016292572021,59.2584419250488,1.81895363330841,-5.68881893157959,59.1940536499023,1.79819095134735,-5.18220567703247,60.3577499389648,0.0792717710137367,-4.42179536819458,60.3886947631836,0.423252910375595,-6.16989278793335,61.7052993774414,-2.4096360206604,-4.9240550994873,62.3232688903809,-2.90676879882813,-5.13821315765381,62.3888282775879,-1.62733566761017,-6.35365962982178,61.7394332885742,-1.29647183418274,-3.29271292686462,63.0202407836914,-1.85308480262756,-3.05310773849487,62.9706840515137,-2.64070582389832,-2.5487334728241,58.6095314025879,3.81683444976807,-2.42541718482971,55.9129295349121,5.45159578323364,-3.72787094116211,55.709228515625,5.43201351165771,-4.43703937530518,58.3423347473145,3.65203523635864,-4.73564958572388,60.7290840148926,-3.89975166320801,-3.89599299430847,60.6723747253418,-4.30670547485352,-4.26608657836914,47.8940963745117,-2.71014308929443, -2.33043313026428,48.7191696166992,-3.23936223983765,-2.05022978782654,57.4430694580078,-5.1027364730835,-1.96963977813721,55.880916595459,-5.11452007293701,-2.16026568412781,58.8478927612305,-4.83823204040527,-0.645922422409058,58.7460327148438,3.64485883712769,-0.68452650308609,56.2766342163086,5.19728088378906,-2.88014340400696,60.6445121765137,-4.31239032745361,-0.918300688266754,49.2085800170898,-3.41392731666565,-1.5696405172348,51.1897010803223,-4.15839719772339,-2.58754658699036,59.5622673034668,2.69001436233521,-4.594557762146,59.1206893920898,2.84920859336853,-1.72525858879089,54.378116607666,-4.8572883605957,-0.665218472480774,52.951229095459,5.54827356338501,-0.759148120880127,53.6747779846191,5.45814752578735,-5.81344699859619,47.5758666992188,3.06518507003784,-6.35021162033081,49.6599311828613,1.88136398792267,-6.05563068389893,58.0019264221191,3.26532244682312,-6.29915761947632,58.448902130127,2.8508608341217,-5.25224447250366,55.6491203308105,4.969970703125,-4.55231380462646,61.0196113586426,-0.239496752619743,-5.43997573852539,60.8021011352539,-0.191684767603874,-6.04992532730103,61.4153099060059,-0.325486749410629,-5.06683301925659,61.9652404785156,-0.78337424993515,-2.01689052581787,52.3396987915039,-4.56934595108032,-4.11964130401611,55.5003929138184,-5.05728578567505,-0.133614599704742,59.0669021606445,-4.4751033782959,-6.16877794265747,60.5145454406738,0.550737738609314,-5.96397542953491,60.5219535827637,-0.148668453097343,-6.5405535697937,60.81005859375,-0.272704929113388,-5.74670171737671,59.9476547241211,1.13532936573029,-6.77210903167725,60.3752555847168,1.38928270339966,-6.52460813522339,58.5361785888672,2.17649149894714,-6.68791389465332,58.7010536193848,2.22907447814941,-6.27624559402466,59.3210983276367,1.79491090774536,-7.46848487854004,59.7941474914551,2.08688426017761,-7.75415468215942,59.1501045227051,2.26238036155701,-7.81153011322021,61.3239059448242,-0.382952928543091,-7.29381418228149,61.1288414001465,-0.944032788276672,-7.46071624755859,60.8121109008789,1.02310824394226,-6.85135412216187,61.2363624572754,-0.92545074224472, -6.8177695274353,60.8522338867188,0.5522101521492,-6.40969181060791,55.401611328125,3.81819677352905,-6.88170289993286,57.552074432373,2.49769401550293,-6.20172452926636,53.3832397460938,2.31489658355713,-6.36324214935303,51.7953987121582,2.1042845249176,-7.04831647872925,52.6200332641602,0.252361595630646,-7.28402996063232,53.6452026367188,0.16018034517765,-0.694299697875977,54.651237487793,5.72144031524658,-3.57418870925903,54.2588043212891,5.43804931640625,-3.32706022262573,53.3785057067871,5.03736639022827,-4.77684831619263,53.3375396728516,4.4062705039978,-5.07331657409668,54.2058448791504,4.84667634963989,-2.14672422409058,53.4957542419434,5.21924448013306,-2.29173636436462,54.3981246948242,5.64961671829224,-5.99193096160889,54.214729309082,4.02423715591431,-6.32433986663818,54.4655952453613,3.40305590629578,-6.84397315979004,55.3699760437012,2.83058953285217,-5.94443607330322,51.708423614502,4.05636835098267,-2.04570722579956,52.4807548522949,5.54989433288574,-6.27668046951294,54.5082397460938,2.19852471351624,-6.68165445327759,55.0434265136719,2.18652367591858,-5.65278625488281,53.3934936523438,3.7850239276886,-4.87148952484131,51.864917755127,4.85457754135132,-3.16624927520752,52.145923614502,5.3819727897644,-2.62237215042114,50.6626281738281,5.40696811676025,-8.41484260559082,60.4155578613281,1.57534170150757,-8.83414459228516,61.0870361328125,0.103286720812321,-0.429187029600143,44.5688095092773,5.94135522842407,-3.39157700538635,43.7743873596191,5.51495599746704,-6.54397678375244,60.8124046325684,-3.20612573623657,-6.18393325805664,60.7584075927734,-3.15727949142456,-6.73055362701416,61.3397254943848,-1.89037048816681,-7.12801933288574,61.1413993835449,-2.07482528686523,-3.82461071014404,54.202262878418,-4.79300689697266,-7.56537818908691,61.2854270935059,-1.97838175296783,-3.41479253768921,62.6111488342285,-0.930265963077545,-7.66061592102051,60.9895057678223,-2.96556806564331,-7.23512315750122,60.0191764831543,-3.89410877227783,-6.22283267974854,59.731559753418,-4.06070184707642,-4.73881864547729,59.5047225952148,-4.55289316177368, -7.84283971786499,54.1470756530762,-2.38503170013428,-6.86101531982422,54.433349609375,-3.65812921524048,-7.79491281509399,53.7588539123535,-0.228861659765244,-2.26250076293945,44.192440032959,-2.14107060432434,-5.80761480331421,55.130687713623,-4.84916019439697,-5.7725682258606,54.2856330871582,-4.57562637329102,-7.54521226882935,56.7853012084961,-4.26201248168945,-7.75341081619263,55.0225067138672,-3.3477029800415,-7.28053140640259,55.2495574951172,-4.16975021362305,-6.94179582595825,57.1727485656738,-4.17385244369507,-3.07096242904663,44.1793899536133,-1.37161779403687,-0.431658685207367,51.0969543457031,5.59628582000732,-6.80107975006104,50.7735061645508,0.0954368412494659,-7.76311159133911,54.0241966247559,-0.301495224237442,-7.44548082351685,54.1859931945801,0.0743789598345757,-6.75493192672729,54.6499519348145,1.31245946884155,-7.18617343902588,58.267749786377,2.41894459724426,-6.98509931564331,58.0105361938477,2.40028405189514,-5.56892108917236,43.7037506103516,3.96434211730957,-9.09653759002686,61.2269897460938,-1.50791823863983,-7.51727819442749,57.9505767822266,-4.34716653823853,-6.89555788040161,58.792911529541,-4.38299942016602,-7.62991142272949,58.7892837524414,-4.1893367767334,-0.478152990341187,43.5242080688477,5.80299520492554,-3.50020909309387,43.5624122619629,5.78555011749268,-8.60066223144531,60.8792953491211,-2.64818215370178,-8.10863590240479,59.867431640625,-3.61165523529053,-7.92280101776123,54.623119354248,-2.55926966667175,-7.9593391418457,55.3963432312012,-2.68657779693604,-8.18213939666748,55.0373420715332,-2.67853426933289,-8.11448860168457,55.3380355834961,-3.37380743026733,-8.08938598632813,55.7524185180664,-3.29892182350159,-7.93057060241699,54.3846206665039,-0.261126399040222,-7.75561332702637,55.1170883178711,-1.67782986164093,-7.59425258636475,54.67236328125,-0.427858233451843,-6.79058885574341,55.7474899291992,1.87186169624329,-7.11697340011597,56.5882987976074,2.24229073524475,-7.24335622787476,55.9228935241699,2.49578619003296,-7.12432050704956,55.3387107849121,2.03639507293701, -7.1244478225708,54.9274826049805,0.763150691986084,-7.26573514938354,54.6200256347656,0.920579612255096,-7.5579628944397,54.5143737792969,0.165195435285568,-7.27818441390991,54.7909660339355,-0.0486234277486801,-7.35125160217285,57.4009628295898,2.53132128715515,-7.41011142730713,57.6769714355469,2.50238084793091,-8.53023815155029,59.0593490600586,2.27440071105957,-9.06899929046631,59.9608154296875,1.7973073720932,-8.88298988342285,60.295108795166,1.89493358135223,-8.21960163116455,59.1651039123535,2.56374311447144,-7.46124601364136,57.5798568725586,2.30548739433289,-7.6955394744873,57.913932800293,2.32873606681824,-7.51820802688599,57.9574584960938,2.49965953826904,-9.46251106262207,60.6362113952637,0.4064701795578,-9.31418800354004,61.0124816894531,0.382610023021698,-6.8989520072937,55.382080078125,1.36610519886017,-7.92569446563721,56.9639663696289,-4.34455442428589,-7.51057100296021,57.2705192565918,-4.31482410430908,-7.89591503143311,57.3142204284668,-4.40296173095703,-7.37515687942505,57.2835006713867,2.34248971939087,-7.30052852630615,56.7208023071289,2.55324769020081,-9.63988018035889,60.9473609924316,-1.19915819168091,-9.46856594085693,61.3043594360352,-1.2989444732666,-9.27958202362061,60.755500793457,-2.4731273651123,-9.07314586639404,61.0160331726074,-2.67641758918762,-7.95075511932373,57.947681427002,-4.51332521438599,-8.13483333587646,58.8517189025879,-4.33059501647949,-8.73000431060791,59.7835388183594,-3.44021344184875,-8.48867511749268,59.9324913024902,-3.72010040283203,-8.34878540039063,58.7928733825684,-4.02249336242676,-8.22158813476563,58.0632476806641,-4.18288135528564,-8.01778411865234,57.130428314209,-3.94697332382202,-8.05079460144043,57.4037895202637,-4.01655721664429,-5.67244100570679,44.0079154968262,1.06051099300385,-5.80713796615601,43.9371109008789,1.50510704517365,-7.45419216156006,56.1586456298828,-1.29048562049866,-8.28530311584473,56.6873512268066,-2.61842083930969,-8.6239013671875,57.5741500854492,-3.51662087440491,-7.06550312042236,56.9819793701172,0.424003332853317,-6.98706388473511,56.4588165283203,1.49204194545746, -7.16970539093018,55.3181915283203,-0.13018873333931,-7.15138053894043,55.2580871582031,0.648422956466675,-8.14474773406982,57.25341796875,1.78825891017914,-8.47859382629395,57.2579498291016,1.99721741676331,-9.05362892150879,58.1805534362793,2.35215330123901,-9.83308410644531,57.4026870727539,2.20573568344116,-9.64915084838867,59.5587844848633,1.99272048473358,-10.1421051025391,60.1832733154297,0.716989398002625,-9.10313892364502,56.9268455505371,1.638108253479,-10.6574897766113,56.644100189209,1.67002630233765,-7.56710195541382,57.1711387634277,1.84745657444,-8.48157787322998,55.0172271728516,-0.216014891862869,-7.0231614112854,56.4469947814941,-0.28096815943718,-7.16446113586426,56.3610076904297,-0.615244030952454,-8.39256477355957,54.9758796691895,-0.616515576839447,-8.50124835968018,55.7217483520508,1.73240280151367,-9.41024780273438,56.5547943115234,2.06916451454163,-7.88820028305054,56.8479080200195,1.19110143184662,-9.09678936004639,56.8670043945313,-3.44182705879211,-8.34248447418213,56.1166343688965,-2.58545112609863,-8.21704578399658,55.0028915405273,1.15598487854004,-9.90963077545166,55.8720932006836,-3.56037259101868,-9.06782722473145,54.9145317077637,-2.63912296295166,-8.62874794006348,54.9908294677734,-1.18219780921936,-7.649001121521,55.1071319580078,-0.538050770759583,-10.340726852417,58.6142463684082,1.99010813236237,-10.8593845367432,59.2226715087891,0.763373553752899,-11.012113571167,57.6644592285156,1.87140822410584,-11.2696666717529,59.1985969543457,-1.52713632583618,-10.6699409484863,59.8837432861328,-1.89451503753662,-10.8999452590942,59.7691764831543,-0.652961134910584,-11.4934072494507,58.7517471313477,-0.260973364114761,-9.99734973907471,60.7780532836914,-1.08868741989136,-10.6349620819092,58.9184379577637,-2.31953024864197,-9.99201107025146,59.2885208129883,-2.83282876014709,-9.1008825302124,59.7472343444824,-3.3547728061676,-9.48565769195557,60.6213226318359,-2.42824769020081,-9.63987922668457,58.4990463256836,-3.35429525375366,-10.0067596435547,58.0339851379395,-3.24089646339417,-8.68969440460205,58.21142578125,-3.91057538986206, -11.4933223724365,58.2437973022461,0.7555051445961,-14.079628944397,51.5313491821289,-1.75432026386261,-15.3577547073364,50.4500312805176,-1.08153355121613,-14.7907867431641,50.5980491638184,-0.796776831150055,-13.3921184539795,51.4282913208008,-0.533235013484955,-11.9978437423706,52.0623245239258,-0.24705570936203,-10.251615524292,53.4479827880859,0.0441180802881718,-10.1969766616821,53.3028335571289,-0.340612351894379,-11.9713344573975,51.9814376831055,-0.58304238319397,-13.6772937774658,51.6746406555176,1.87144458293915,-12.632607460022,52.1185760498047,2.51966714859009,-12.5650129318237,51.5652618408203,1.17271864414215,-13.7069854736328,51.3117408752441,1.151162981987,-11.374698638916,52.2686195373535,1.14971232414246,-11.4781999588013,52.9149055480957,2.49313879013062,-9.74384593963623,54.5315742492676,2.21795177459717,-13.9736175537109,52.368595123291,2.47570753097534,-13.1968288421631,52.962287902832,3.10246396064758,-14.8301277160645,52.6071395874023,2.11761546134949,-14.2657508850098,52.8922119140625,2.13393473625183,-14.4684648513794,52.1536636352539,2.14125990867615,-14.8657751083374,51.7047424316406,2.20066118240356,-14.8201179504395,53.070125579834,2.05547261238098,-14.1463689804077,53.445671081543,2.12267684936523,-15.0371074676514,52.2935600280762,-2.07219195365906,-16.2619514465332,51.1877555847168,-1.39485847949982,-15.8765563964844,50.9944725036621,-1.46031129360199,-14.5988140106201,51.8026733398438,-2.22906160354614,-17.1141986846924,50.1530723571777,-0.656818032264709,-16.1127605438232,49.9333915710449,-0.649384915828705,-15.7860059738159,49.9094886779785,-0.118252269923687,-14.3615608215332,51.0999221801758,1.76429009437561,-15.3237085342407,50.4653549194336,1.89021146297455,-18.9265270233154,52.0916786193848,2.08394813537598,-18.2440147399902,52.6426467895508,1.4875899553299,-17.8324413299561,52.9939117431641,2.0628867149353,-18.2371978759766,52.0618019104004,3.29557943344116,-15.5986242294312,49.897388458252,0.180025562644005,-16.1771202087402,48.9824981689453,0.648494422435761,-15.8943605422974,49.4016189575195,1.68389463424683, -15.0275983810425,50.1505317687988,1.01311051845551,-16.5464572906494,51.6605796813965,3.32884478569031,-15.4696502685547,50.710880279541,2.66894578933716,-17.7275943756104,51.8120422363281,3.08908557891846,-16.9035873413086,53.2870559692383,2.3514256477356,-15.8416471481323,52.9759292602539,2.68076205253601,-19.8595390319824,50.9323654174805,3.22305417060852,-18.8802871704102,50.6448135375977,4.20212316513062,-18.1262359619141,49.6349830627441,4.5990252494812,-20.3983383178711,50.4655838012695,1.90877258777618,-20.2319946289063,50.4357147216797,1.16225552558899,-20.1870269775391,50.027660369873,0.646689832210541,-19.9135608673096,49.7892875671387,0.368544578552246,-18.6255340576172,47.3748207092285,0.111035406589508,-17.3023681640625,48.6882209777832,-0.212918892502785,-18.8274440765381,48.9921684265137,-0.369614362716675,-11.2789144515991,52.7401924133301,-2.49145722389221,-12.936861038208,52.1631240844727,-2.09757351875305,-12.2275257110596,52.1928596496582,-0.912774920463562,-10.5374174118042,53.401309967041,-0.792993426322937,-16.3899230957031,48.9935150146484,0.133493438363075,-16.6946067810059,49.0124168395996,-0.605560779571533,-17.0542774200439,48.5133399963379,0.351435780525208,-18.2206153869629,47.0674438476563,0.796007394790649,-12.8616600036621,54.1305847167969,2.49924993515015,-12.0359754562378,53.8261222839355,2.99227213859558,-13.5405406951904,53.2507095336914,2.46743822097778,-10.4204120635986,55.5134124755859,2.56823205947876,-12.3428859710693,53.5515251159668,-3.40832281112671,-13.5257186889648,52.5651512145996,-2.6235671043396,-18.2112407684326,49.9638214111328,-0.76670640707016,-18.4898586273193,49.53125,-0.511448681354523,-17.11106300354,50.5295639038086,-0.92558091878891,-13.3685293197632,53.7153778076172,-2.68515563011169,-12.1484384536743,56.8107490539551,0.557642042636871,-12.1036748886108,56.5559844970703,0.99444192647934,-13.0235824584961,55.6834754943848,1.18073070049286,-13.4592247009277,55.5429267883301,0.952362835407257,-14.877911567688,54.3908309936523,1.14372169971466,-14.8840246200562,53.8452568054199,1.51513016223907, -14.330548286438,50.7510681152344,-0.0111402757465839,-16.7873268127441,48.4305381774902,1.50344741344452,-16.7642364501953,48.5701866149902,1.02926099300385,-16.5800800323486,48.3761558532715,1.93620872497559,-18.0195808410645,47.1744804382324,1.6593029499054,-11.1290073394775,57.0205192565918,-3.73677539825439,-11.8914222717285,58.0101776123047,-2.49101114273071,-12.6511726379395,57.3129272460938,-2.62014579772949,-12.0716953277588,56.2566299438477,-3.62442135810852,-14.2039346694946,55.8782081604004,-1.99054050445557,-14.2394742965698,54.8764915466309,-1.69854950904846,-13.3633728027344,54.7506828308105,-2.51998615264893,-12.8050441741943,55.4120407104492,-3.20260739326477,-15.5451545715332,54.3909187316895,-0.944691777229309,-15.6051340103149,53.6398811340332,-1.19103765487671,-18.6171264648438,50.7980270385742,-0.42991316318512,-18.7923183441162,50.4993553161621,-0.173323720693588,-18.8255710601807,49.7969970703125,-0.24158239364624,-15.4429044723511,52.9892845153809,-1.97211527824402,-17.1787643432617,52.7444152832031,-0.410667061805725,-17.0103073120117,52.2682647705078,-0.746182978153229,-14.5044660568237,55.9602584838867,-0.556629240512848,-15.4355049133301,54.7218017578125,0.240091517567635,-18.9051361083984,49.2556838989258,-0.212960779666901,-11.3375291824341,56.0898933410645,2.17179417610168,-11.0171632766724,54.711296081543,-3.56722521781921,-10.0315380096436,53.8144073486328,-2.67064666748047,-9.3803129196167,53.8204650878906,1.42993497848511,-9.84768962860107,53.8808174133301,-0.888922214508057,-9.65566444396973,53.9683685302734,-0.00864173006266356,-9.65421772003174,53.7139053344727,-0.368462741374969,-11.5770902633667,58.701343536377,-1.27429091930389,-11.7678966522217,58.0280494689941,-0.0459968149662018,-10.9296398162842,58.6693992614746,-2.24099469184875,-11.9043874740601,56.7409973144531,0.94693797826767,-11.4768314361572,56.4381294250488,1.56433737277985,-11.6599178314209,56.2103996276855,1.59167802333832,-11.4014825820923,56.7989845275879,1.64399898052216,-11.7768106460571,57.2847061157227,0.964253008365631, -11.8873796463013,57.0615272521973,0.340082973241806,-12.1598997116089,58.4843826293945,-1.42520177364349,-12.9499549865723,57.8103370666504,-1.27406144142151,-11.8083772659302,57.8043518066406,-0.143025532364845,-12.4767713546753,57.3775024414063,0.146502330899239,-13.7413520812988,55.7738189697266,0.647366166114807,-13.3479604721069,54.4060974121094,2.3595118522644,-16.6586666107178,51.6323089599609,-1.1572380065918,-12.2062034606934,55.6152458190918,1.59468448162079,-16.2585430145264,53.7987480163574,1.81818199157715,-15.4065914154053,53.470832824707,2.19790458679199,-16.9875087738037,53.5469665527344,0.917690515518188,-18.654182434082,51.5154151916504,0.383005619049072,-19.3796482086182,51.2564315795898,0.973189532756805,-19.3383960723877,50.9063301086426,0.826740324497223,-18.549898147583,51.0804443359375,0.245433732867241,-16.8411140441895,48.938648223877,3.71082305908203,-17.8749370574951,49.8132171630859,4.56413221359253,-16.6467800140381,48.3975677490234,2.77507829666138,-13.2260084152222,51.3968048095703,0.032488327473402,-20.513069152832,50.4961700439453,2.56306648254395,-19.5767478942871,49.4250297546387,-0.103127479553223,-19.1159076690674,50.2191734313965,-0.157384023070335,-19.263822555542,50.430233001709,0.27906745672226,-19.3878326416016,50.5774154663086,0.466669023036957,-19.7247257232666,49.628490447998,0.250612646341324,-19.1858215332031,50.315013885498,0.205716267228127,-17.4128494262695,53.1083679199219,1.88863396644592,-17.6651172637939,51.6837005615234,-0.421823114156723,-17.3898468017578,51.0755653381348,-0.691629111766815,-8.74059391021729,58.7906532287598,-3.90513944625854,-3.631098985672,59.8498306274414,1.73694729804993,-3.33879423141479,60.3737182617188,1.17213428020477,-3.50298547744751,60.2044410705566,1.69284284114838,-0.836800396442413,62.0290718078613,-3.44790577888489,-2.63942551612854,59.934383392334,2.14702224731445,-3.34576869010925,61.2543296813965,-0.264682769775391,-0.774065554141998,59.8994979858398,2.45401930809021,-2.98916459083557,60.147777557373,1.79330563545227,-10.2027149200439,53.1423873901367,1.3846652507782, -10.5530920028687,53.7772369384766,2.34635376930237,-11.2281942367554,54.6697654724121,2.78025221824646,-11.9775266647339,55.267162322998,2.30929613113403,-6.1092848777771,44.5726852416992,2.80859422683716,-6.12484836578369,46.5345611572266,2.53054237365723,-6.09523248672485,47.9618530273438,2.03063750267029,-6.58994388580322,50.2920265197754,0.863238930702209,-6.74691867828369,52.2777366638184,0.972675979137421,-6.81625986099243,53.5835075378418,1.24111199378967,-5.93246269226074,53.3926849365234,3.18568468093872,-6.16047334671021,51.7383117675781,3.05703854560852,-5.93553829193115,49.6501426696777,2.96717262268066,-4.85589504241943,45.5259628295898,-0.946087539196014,-3.58722996711731,45.8115081787109,-1.97504353523254,-2.34073543548584,46.1230392456055,-2.12600135803223,-0.0774050205945969,46.1967735290527,-2.60712957382202,5.56892108917236,43.7037506103516,3.96434211730957,4.48863840103149,56.9230079650879,-5.69664287567139,3.43093514442444,57.0666656494141,-5.43046188354492,3.40443229675293,58.473014831543,-5.48987340927124,4.66533231735229,58.3694610595703,-5.16612005233765,2.36688876152039,49.2839813232422,5.31314182281494,3.19219017028809,46.8397331237793,5.11824417114258,4.16545295715332,46.8440971374512,5.14115619659424,4.33468341827393,48.3736190795898,4.74083375930786,0.508937060832977,46.9681167602539,5.79316377639771,0.502217352390289,49.8629951477051,5.73104858398438,5.70313215255737,45.5682716369629,-0.127191007137299,6.14905118942261,45.2268676757813,0.909955978393555,5.83846712112427,44.3852729797363,1.56467497348785,5.37825775146484,46.895393371582,-1.29640114307404,4.25761890411377,44.1189155578613,-0.763117015361786,7.27880954742432,50.8724212646484,-0.798126339912415,6.68353366851807,49.3247604370117,-1.0536345243454,6.16005086898804,49.5483131408691,-1.94401621818542,6.86691427230835,51.265064239502,-2.45111012458801,4.96109008789063,46.449836730957,4.62802600860596,5.02808284759521,47.667839050293,4.1308741569519,5.53708267211914,49.6380195617676,4.03002834320068,4.46608209609985,49.9669990539551,4.83955383300781, 5.94960832595825,47.0691604614258,0.362407803535461,6.48950576782227,49.0330696105957,-0.268296957015991,6.3097038269043,48.253059387207,1.12767565250397,6.20942878723145,46.6569290161133,1.74234902858734,5.76492261886597,49.9179992675781,-2.65865802764893,6.17157793045044,51.7974472045898,-3.6365602016449,4.89619207382202,50.3520011901855,-3.80600094795227,2.45370006561279,50.8995170593262,-4.16592597961426,2.78574156761169,52.2776679992676,-4.72317218780518,5.22372245788574,52.0617218017578,-4.64406442642212,5.75057411193848,44.0617218017578,3.85488200187683,6.00133609771729,46.3558654785156,3.68154311180115,6.32964134216309,44.886531829834,2.16583490371704,5.0522313117981,59.3761291503906,0.142580911517143,5.63601207733154,59.9394836425781,-0.0290815383195877,5.05815505981445,59.9468002319336,0.339870452880859,5.20350742340088,58.9473190307617,1.15062999725342,6.21389818191528,58.8186149597168,0.991709470748901,5.55427598953247,60.0190963745117,-0.648190140724182,4.85060977935791,60.0962257385254,-0.205008938908577,6.28012418746948,61.3125953674316,-3.25320029258728,5.01990127563477,62.0096130371094,-3.58053207397461,5.4082088470459,62.0561714172363,-2.34191989898682,6.61399984359741,61.3304023742676,-2.17510962486267,3.59240055084229,62.8030700683594,-2.31959319114685,3.24620890617371,62.7719917297363,-3.06752300262451,3.27989220619202,58.4411926269531,3.45477151870728,2.94624018669128,55.8268890380859,5.22996759414673,4.4201488494873,55.4504318237305,4.97116231918335,5.11019134521484,58.0659942626953,3.06510710716248,4.59976577758789,60.4346237182617,-4.53228282928467,3.71103858947754,60.432430267334,-4.82212781906128,4.24048233032227,47.8875045776367,-2.74390602111816,2.2951455116272,48.7120323181152,-3.25419235229492,1.602987408638,57.3326644897461,-5.33708143234253,1.54593241214752,55.7688674926758,-5.29807567596436,1.80850923061371,58.7227096557617,-5.10714054107666,1.35066735744476,58.688549041748,3.52788400650024,1.20924663543701,56.2557487487793,5.11581087112427,2.70396065711975,60.468376159668,-4.69074726104736, 0.87622195482254,49.2063636779785,-3.42336797714233,1.4183566570282,51.2010498046875,-4.23545169830322,3.29036021232605,59.3768653869629,2.29175066947937,5.26882553100586,58.8095779418945,2.18090462684631,1.35060226917267,54.3036766052246,-4.98019742965698,0.850216865539551,52.9374542236328,5.52145624160767,1.05006265640259,53.6734428405762,5.41406202316284,5.81344699859619,47.5758666992188,3.06518483161926,6.34982872009277,49.6443710327148,1.84685409069061,6.69955635070801,57.5995979309082,2.40108251571655,6.91256666183472,58.0321769714355,1.95568668842316,5.89234447479248,55.3229560852051,4.32070875167847,4.9299464225769,60.7205200195313,-0.881977498531342,5.80054426193237,60.4475479125977,-0.953298270702362,6.42415618896484,61.0218505859375,-1.17068159580231,5.42477989196777,61.6343116760254,-1.49424481391907,1.71520781517029,52.2933311462402,-4.67891263961792,3.61277961730957,55.2839317321777,-5.49603891372681,6.60325908660889,60.111686706543,-0.314645409584045,6.30694484710693,60.1349029541016,-0.980097889900208,6.87847661972046,60.386791229248,-1.18192577362061,6.22908735275269,59.5699081420898,0.323896825313568,7.30415058135986,59.9312591552734,0.435530573129654,7.05011034011841,58.1080017089844,1.25672173500061,7.22903156280518,58.2620811462402,1.2861168384552,6.80232667922974,58.9085731506348,0.908758163452148,8.05034351348877,59.3046455383301,1.03538930416107,8.31608581542969,58.6432113647461,1.17352378368378,8.15271186828613,60.8203582763672,-1.46462738513947,7.55289936065674,60.6605415344238,-1.94998788833618,7.96316814422607,60.3256072998047,-0.0219536330550909,7.12460422515869,60.7955284118652,-1.8724068403244,7.26642370223999,60.4079856872559,-0.402079552412033,6.96106004714966,54.9798698425293,2.91225099563599,7.3847861289978,57.1020774841309,1.53105282783508,6.33556509017944,53.1691551208496,2.24800658226013,6.38739442825317,51.7313346862793,1.9785293340683,6.99435949325562,52.3350715637207,-0.392119348049164,7.24284791946411,53.2762145996094,-0.646061599254608,1.09672713279724,54.6509094238281,5.66392612457275, 3.91681504249573,54.1869354248047,5.21350336074829,3.56772255897522,53.3176498413086,4.87186765670776,4.99570178985596,53.2408180236816,4.15648555755615,5.41516971588135,54.0682334899902,4.48723363876343,2.40486001968384,53.4610290527344,5.10914897918701,2.67556929588318,54.3597373962402,5.49190044403076,6.34653997421265,53.9616470336914,3.4741063117981,6.76198863983154,54.0528297424316,2.51639223098755,7.25544500350952,54.9252510070801,1.87526834011078,6.03137254714966,51.6402435302734,3.89728951454163,2.19503688812256,52.4480400085449,5.4863452911377,6.55881500244141,54.1315307617188,1.74270081520081,6.97313547134399,54.627758026123,1.31097435951233,5.82921028137207,53.250675201416,3.49645662307739,5.00494384765625,51.803596496582,4.69906425476074,3.32392287254334,52.107292175293,5.27886629104614,2.70612764358521,50.6459274291992,5.35879135131836,8.95623588562012,59.8676338195801,0.398345559835434,9.21463108062744,60.5177345275879,-1.11962747573853,0.429187029600143,44.5688095092773,5.94135522842407,3.39157700538635,43.7743873596191,5.51495599746704,6.48670291900635,60.4013862609863,-4.08903360366821,6.13385438919067,60.3698768615723,-3.99188446998596,6.88159799575806,60.9103698730469,-2.81267642974854,7.23734951019287,60.6882858276367,-3.04816651344299,3.2792387008667,54.0415382385254,-5.19849443435669,7.69188165664673,60.8041801452637,-3.01215386390686,3.81181836128235,62.3832054138184,-1.41991281509399,7.63446426391602,60.5070648193359,-4.00190258026123,7.02769565582275,59.5692939758301,-4.86050128936768,5.98615837097168,59.3464622497559,-4.88793516159058,4.43807315826416,59.2152633666992,-5.17468309402466,7.48376131057739,53.6780166625977,-3.37918519973755,6.3647928237915,54.0280265808105,-4.5154709815979,7.6963939666748,53.3148078918457,-1.19267594814301,4.89050340652466,47.2557334899902,-1.76517140865326,2.20206737518311,44.176586151123,-2.11065602302551,5.20034837722778,54.7842864990234,-5.57468938827515,5.18321180343628,53.9617309570313,-5.2604660987854,7.08188724517822,56.3239288330078,-5.25308752059937, 7.30654048919678,54.5502128601074,-4.35706996917725,6.73623943328857,54.8074378967285,-5.11946773529053,6.52136135101318,56.7480926513672,-5.08606290817261,0.548441827297211,51.1162757873535,5.59805917739868,6.73783445358276,50.6204032897949,-0.270794987678528,7.66648387908936,53.5671539306641,-1.28985047340393,7.40937566757202,53.744556427002,-0.876519441604614,6.90980339050293,54.2402229309082,0.442960977554321,7.72015905380249,57.7975692749023,1.40894997119904,7.5026683807373,57.5535583496094,1.41864967346191,9.26576328277588,60.6478004455566,-2.75207567214966,7.11589050292969,57.489013671875,-5.33865261077881,6.54909181594849,58.3688354492188,-5.29395627975464,7.30115747451782,58.3183250427246,-5.20100736618042,3.58825278282166,44.1539001464844,-1.20879817008972,0.478152990341187,43.5242080688477,5.80299520492554,8.5999231338501,60.3367500305176,-3.81362628936768,7.92004871368408,59.3618507385254,-4.69769620895386,7.58691596984863,54.1857376098633,-3.51837372779846,7.62936019897461,54.9134559631348,-3.71389770507813,7.84505176544189,54.5696830749512,-3.6901912689209,7.6837592124939,54.8446426391602,-4.42535209655762,7.68500471115112,55.2548599243164,-4.36773157119751,7.85799980163574,53.9139366149902,-1.27666687965393,7.55024337768555,54.6720161437988,-2.64854741096497,7.51451921463013,54.1958045959473,-1.45155954360962,7.09713840484619,55.3094367980957,0.930883824825287,7.52256345748901,56.1265335083008,1.25037324428558,7.63995981216431,55.4534378051758,1.48735105991364,7.42369079589844,54.8798332214355,1.05067873001099,7.22643661499023,54.4748229980469,-0.209205031394959,7.36536359786987,54.1761131286621,-0.0283166989684105,7.55160713195801,54.0616989135742,-0.807652056217194,7.26050710678101,54.3323860168457,-1.03370535373688,7.84417057037354,56.9216651916504,1.50173914432526,7.91579103469849,57.1935577392578,1.46395790576935,9.0794734954834,58.5038986206055,1.08123564720154,9.6045093536377,59.3718109130859,0.532063603401184,9.45469379425049,59.7166938781738,0.652444005012512,8.81791400909424,58.6277008056641,1.40934801101685, 7.93373203277588,57.0942649841309,1.26238405704498,8.18951320648193,57.4128837585449,1.25242710113525,8.03991603851318,57.4667205810547,1.44550204277039,9.84859180450439,60.0270957946777,-0.901974380016327,9.72230529785156,60.4120292663574,-0.907228112220764,7.11321926116943,54.9401054382324,0.416695415973663,7.46061944961548,56.4794769287109,-5.38321113586426,7.07095384597778,56.8105850219727,-5.30281114578247,7.44288110733032,56.8303985595703,-5.44225835800171,7.83499431610107,56.8037376403809,1.31190943717957,7.75429630279541,56.2459411621094,1.5331916809082,9.8271369934082,60.3333282470703,-2.51816701889038,9.66667366027832,60.7007904052734,-2.59547328948975,9.28712558746338,60.169864654541,-3.73113465309143,9.07193183898926,60.4436950683594,-3.90585684776306,7.52197933197021,57.4596366882324,-5.56169700622559,7.78535032272339,58.3495597839355,-5.40928411483765,8.55235385894775,59.238410949707,-4.61119842529297,8.28533267974854,59.4034004211426,-4.85664129257202,8.03475379943848,58.2761001586914,-5.13257741928101,7.84158325195313,57.5565795898438,-5.27125883102417,7.61331510543823,56.6373863220215,-5.00607490539551,7.65373134613037,56.9084320068359,-5.08063411712646,5.80713796615601,43.9371109008789,1.50510704517365,7.3530068397522,55.691593170166,-2.29376339912415,8.03426742553711,56.1774253845215,-3.71008014678955,8.29852867126465,57.0403785705566,-4.66321849822998,7.24841451644897,56.5388069152832,-0.523982167243958,7.28487110137939,56.0086479187012,0.525032520294189,7.17531681060791,54.8657188415527,-1.1021511554718,7.25835037231445,54.8035736083984,-0.32792392373085,8.51945972442627,56.7277908325195,0.659157574176788,8.87804126739502,56.7104835510254,0.821199893951416,9.55239772796631,57.593677520752,1.09148192405701,10.2546634674072,56.7690773010254,0.844668745994568,10.179328918457,58.933349609375,0.649220526218414,10.5340662002563,59.5311012268066,-0.683946847915649,9.42648220062256,56.3423805236816,0.382613807916641,10.9501304626465,55.9625473022461,0.205978751182556,7.95104789733887,56.6816635131836,0.796007633209229, 8.44216823577881,54.4834175109863,-1.36270153522491,7.08089637756348,56.0021209716797,-1.23660385608673,7.17018461227417,55.9088592529297,-1.5865033864975,8.29757881164551,54.4494361877441,-1.74737429618835,8.76838493347168,55.1770248413086,0.562280178070068,9.76492881774902,55.9499664306641,0.769929647445679,8.15985107421875,56.3417167663574,0.103748373687267,8.7318811416626,56.3046493530273,-4.64982652664185,8.0565242767334,55.6012763977051,-3.69083595275879,8.36456489562988,54.4798698425293,0.0324799977242947,9.45730209350586,55.2612190246582,-4.87259960174561,8.68892574310303,54.3544425964355,-3.84225082397461,8.45584487915039,54.4519424438477,-2.33978295326233,7.58108425140381,54.6267395019531,-1.56997954845428,10.803614616394,57.9473037719727,0.557450473308563,11.1893653869629,58.5272026062012,-0.730563282966614,11.3919620513916,56.9577827453613,0.353395909070969,11.2849111557007,58.487174987793,-3.05534601211548,10.6853227615356,59.2101516723633,-3.341463804245,11.0728950500488,59.0761032104492,-2.14175462722778,11.6487598419189,58.0217895507813,-1.82899582386017,10.1849002838135,60.1414604187012,-2.45615744590759,10.5328998565674,58.2507591247559,-3.75378155708313,9.85113716125488,58.6626205444336,-4.17732286453247,8.92834758758545,59.1785507202148,-4.57636260986328,9.48854160308838,60.0228309631348,-3.71386504173279,9.38311672210693,57.8990173339844,-4.64321899414063,9.73202896118164,57.411376953125,-4.57831954956055,8.3504810333252,57.673942565918,-5.06515073776245,11.753791809082,57.5105323791504,-0.819628119468689,13.5520429611206,50.6597862243652,-3.62653398513794,14.8387975692749,49.4975662231445,-3.12753367424011,14.3257875442505,49.6796455383301,-2.76960182189941,13.0302572250366,50.5948715209961,-2.32351136207581,11.7298135757446,51.3138999938965,-1.85474872589111,10.1291513442993,52.8051300048828,-1.33680272102356,10.0141677856445,52.6653289794922,-1.71004021167755,11.653247833252,51.2362632751465,-2.18375134468079,13.6517715454102,50.8126182556152,0.0197342503815889,12.7338953018188,51.3184585571289,0.80093240737915, 12.4508266448975,50.7762031555176,-0.522256553173065,13.5613031387329,50.4516372680664,-0.696429312229156,11.3147611618042,51.5529403686523,-0.387636542320251,11.6386957168579,52.1857452392578,0.926828563213348,9.98794555664063,53.9091873168945,0.881002962589264,14.0697689056396,51.4840431213379,0.575597643852234,13.4233169555664,52.122631072998,1.29878723621368,14.883472442627,51.6699066162109,0.104338467121124,14.3454475402832,51.9897499084473,0.195351988077164,14.5005655288696,51.2399139404297,0.178431913256645,14.8733034133911,50.7667045593262,0.185657918453217,14.8942441940308,52.1328659057617,0.0421440452337265,14.2605962753296,52.5496520996094,0.197932198643684,14.5038642883301,51.3617706298828,-4.07377243041992,15.737006187439,50.1784324645996,-3.56298232078552,15.3349475860596,50.0099906921387,-3.57508039474487,14.0185060501099,50.9000205993652,-4.1680588722229,16.6143341064453,49.0891990661621,-2.94213104248047,15.6112413406372,48.932746887207,-2.79887890815735,15.3581924438477,48.9271278381348,-2.22846102714539,14.2779426574707,50.1965675354004,-0.176210388541222,15.2065629959106,49.5023574829102,-0.178400054574013,18.8974895477295,50.898624420166,-0.478858798742294,18.1767578125,51.4938545227051,-0.980138778686523,17.8693199157715,51.8677978515625,-0.356124639511108,18.3772220611572,50.9069023132324,0.814730048179626,15.2123289108276,48.9255409240723,-1.90760374069214,15.7901344299316,47.974178314209,-1.51748132705688,15.6763391494751,48.4058074951172,-0.455212146043777,14.7757940292358,49.2104644775391,-1.00625038146973,16.6845760345459,50.6124000549316,1.07724034786224,15.471227645874,49.734935760498,0.572513163089752,17.8297843933105,50.6904792785645,0.679857194423676,17.0080585479736,52.2174072265625,0.0537054538726807,15.982780456543,51.9721145629883,0.524463653564453,19.9009113311768,49.6782341003418,0.529042065143585,19.0464401245117,49.4485168457031,1.63235700130463,19.8845977783203,47.4652900695801,2.17451047897339,18.2908992767334,48.4863052368164,2.13154292106628,19.1496639251709,46.7251663208008,2.3065185546875, 20.3633670806885,48.2683410644531,1.22568118572235,20.227331161499,49.1841583251953,-0.843863546848297,21.2155895233154,48.3137245178223,-0.224301800131798,21.1416397094727,48.1011810302734,-1.18668389320374,19.9603595733643,49.1679573059082,-1.56102073192596,20.4522113800049,47.2690353393555,1.70770359039307,20.674388885498,47.2088775634766,1.5593044757843,20.6281108856201,48.3302116394043,0.792369723320007,21.6778507232666,47.1973571777344,0.721642732620239,21.0242614746094,48.3415603637695,0.267527908086777,20.9462394714355,48.3692169189453,0.526706457138062,21.4729061126709,47.2075042724609,1.10189342498779,21.5099945068359,46.11474609375,-1.94946956634521,20.4426021575928,47.4525527954102,-2.20505023002625,20.9361572265625,47.7230949401855,-1.9036910533905,22.1175422668457,46.4725112915039,-1.48421800136566,19.5445919036865,44.3666687011719,0.688282608985901,19.5302467346191,44.692985534668,1.52009499073029,17.8531379699707,46.0471343994141,1.05797076225281,17.7322750091553,45.8862266540527,0.195022255182266,20.5843486785889,45.6073188781738,2.28768253326416,20.9611434936523,45.4621658325195,2.34939908981323,22.9492454528809,44.9821395874023,1.39771020412445,22.6773262023926,44.8726272583008,1.98021054267883,22.6979026794434,44.490119934082,-1.13779997825623,23.2042541503906,44.9444885253906,-0.658016979694366,19.9612426757813,44.5874671936035,-1.609126329422,20.6078147888184,45.28662109375,-2.0672402381897,21.3356609344482,44.4521217346191,-1.30426454544067,21.6464214324951,43.5439834594727,-0.783927083015442,19.5299625396729,44.2604904174805,-0.854487121105194,20.8051986694336,43.4793281555176,-0.203381508588791,20.7594833374023,43.5421180725098,0.38550791144371,19.4293518066406,44.3882141113281,-0.0389625653624535,20.6675872802734,43.4807777404785,1.03413915634155,20.6311225891113,43.5597991943359,1.6413449048996,21.0593681335449,44.0559005737305,2.13398694992065,20.1234664916992,45.3325843811035,2.12659621238709,23.3103694915771,42.2877006530762,3.15818119049072,23.8232288360596,42.6492958068848,3.02135586738586, 22.3560600280762,44.6905479431152,2.43583106994629,21.6826972961426,44.3796463012695,2.56239581108093,23.9890842437744,42.8250274658203,2.72608661651611,24.3131427764893,43.0077095031738,2.03234481811523,24.4801712036133,42.9811019897461,0.232601284980774,24.1847267150879,42.6429634094238,-0.0108417542651296,22.0007915496826,43.8926124572754,-0.990081965923309,23.3663368225098,42.3684387207031,-0.0917138755321503,22.9723930358887,42.1976127624512,-0.0821428894996643,22.3297519683838,42.1772079467773,0.570432305335999,22.2577972412109,42.2479438781738,1.11369383335114,22.3680763244629,42.0717086791992,2.5445351600647,22.6504745483398,42.0502853393555,2.88002109527588,21.2856063842773,44.1733818054199,2.28947234153748,19.8208160400391,48.7657203674316,-2.06408476829529,19.4979515075684,48.5461578369141,-2.30182480812073,18.0380630493164,46.2183685302734,-2.37314629554749,19.1660690307617,46.720775604248,-2.66062784194946,16.7683372497559,47.6135559082031,-2.52141618728638,18.2744197845459,47.821891784668,-2.88349103927612,23.1817455291748,42.2414321899414,3.10395359992981,23.5672283172607,41.5250053405762,3.27665758132935,23.7341976165771,41.6387405395508,3.36136937141418,24.3066692352295,41.2696952819824,0.388287603855133,24.0551853179932,41.0985374450684,0.514059066772461,23.5084838867188,40.8745460510254,1.19112884998322,23.3923263549805,40.9361343383789,1.66240167617798,23.0847988128662,41.0231781005859,2.68329548835754,23.1890926361084,41.2674446105957,3.08469200134277,24.8623371124268,42.1539611816406,2.3654510974884,24.3057193756104,41.9787712097168,3.14068388938904,24.0696849822998,41.8692207336426,3.21461319923401,10.7589426040649,52.0450668334961,-3.98465609550476,12.4153480529785,51.3634567260742,-3.81533980369568,11.8754205703735,51.4325981140137,-2.54589605331421,10.2960405349731,52.7441749572754,-2.20458698272705,15.9318618774414,47.9740142822266,-2.05650401115417,16.1347522735596,47.9769058227539,-2.82994937896729,16.5880832672119,47.4521827697754,-1.92803871631622,17.7106666564941,45.9340896606445,-1.63855528831482, 23.7912216186523,40.9780197143555,0.784069895744324,22.7547168731689,42.299747467041,0.201494812965393,13.0838747024536,53.3122024536133,0.741282343864441,12.3147010803223,53.0580444335938,1.34236586093903,13.695728302002,52.3916130065918,0.622015416622162,10.765793800354,54.8451499938965,1.13273775577545,11.7384357452393,52.7919425964355,-5.03997898101807,12.9520015716553,51.7299842834473,-4.41759347915649,17.6725082397461,48.8319664001465,-3.19804859161377,17.9552898406982,48.3816871643066,-2.98082900047302,16.5986347198486,49.4662818908691,-3.20961785316467,12.8604173660278,52.8880577087402,-4.46232604980469,12.285062789917,56.0400619506836,-1.09787619113922,12.2836780548096,55.786750793457,-0.657949447631836,13.1637325286865,54.8574714660645,-0.593619048595428,13.5549449920654,54.6908378601074,-0.878011286258698,14.9113826751709,53.4512100219727,-0.874684035778046,14.9332523345947,52.9047508239746,-0.505171656608582,13.9861345291138,49.8578948974609,-1.92976760864258,16.4741477966309,47.3813934326172,-0.750219583511353,16.3961734771729,47.5242347717285,-1.21755838394165,16.3241100311279,47.3382835388184,-0.29325008392334,17.6349182128906,46.0498580932617,-0.756506145000458,10.711404800415,56.3316230773926,-5.2165961265564,11.6953134536743,57.2661972045898,-4.08915567398071,12.385479927063,56.5232162475586,-4.31653118133545,11.6108388900757,55.5096321105957,-5.22905683517456,13.9158315658569,54.9912452697754,-3.89582562446594,13.9274816513062,53.9880409240723,-3.60703206062317,12.9425249099731,53.9209365844727,-4.30237054824829,12.3398990631104,54.6189117431641,-4.90633010864258,15.2897844314575,53.4183158874512,-3.03394627571106,15.2687854766846,52.6660461425781,-3.28293323516846,18.1716041564941,49.6376266479492,-2.92257332801819,18.360689163208,49.327465057373,-2.69066572189331,18.3403129577637,48.6247024536133,-2.75979685783386,14.9622840881348,52.0302391052246,-4.03225135803223,16.8739185333252,51.6703147888184,-2.71794319152832,16.6322479248047,51.207103729248,-3.02567052841187,14.4114046096802,55.0481872558594,-2.51585531234741, 15.3617715835571,53.7503852844238,-1.84661114215851,22.0626430511475,47.1380500793457,0.312653362751007,23.082405090332,45.2025375366211,1.05454277992249,23.2344989776611,45.1784515380859,0.212265536189079,22.2545776367188,46.898063659668,-0.650525093078613,24.5121994018555,43.0798530578613,1.89935684204102,24.700626373291,43.029182434082,1.0951064825058,22.3342418670654,44.1472129821777,-0.985363841056824,23.7739334106445,42.4582595825195,0.0253795459866524,25.094820022583,42.0181274414063,0.63675594329834,24.8828163146973,41.7729644775391,0.360459506511688,18.3888912200928,48.079345703125,-2.7398579120636,19.6137313842773,46.7993927001953,-2.47372817993164,11.6554641723633,55.3646430969238,0.613879203796387,10.4787845611572,54.0332679748535,-5.02370643615723,9.56866645812988,53.1961708068848,-3.99867963790894,9.47764873504639,53.225643157959,0.15219347178936,9.63113117218018,53.2664108276367,-2.20873069763184,9.56535720825195,53.3620910644531,-1.31098282337189,9.49947357177734,53.1097564697266,-1.66624176502228,11.5917978286743,57.9705467224121,-2.84412407875061,11.9037704467773,57.2813911437988,-1.64989614486694,10.819263458252,57.9833908081055,-3.71461486816406,12.0918092727661,55.9841041564941,-0.678950130939484,11.7332038879395,55.7060317993164,-0.00828365050256252,11.9036540985107,55.4671478271484,-0.00489721540361643,11.692066192627,56.0705604553223,0.0792707055807114,12.0020923614502,56.5346641540527,-0.646912157535553,12.0133199691772,56.3076477050781,-1.27933478355408,12.1341848373413,57.7180938720703,-3.07127356529236,12.8935451507568,56.995174407959,-3.0251157283783,11.9166917800903,57.0560073852539,-1.75054311752319,12.5898990631104,56.586841583252,-1.55191695690155,13.8073215484619,54.9048728942871,-1.21922385692596,13.5632257461548,53.557258605957,0.536115407943726,16.1892242431641,50.5962142944336,-3.3828821182251,12.4069385528564,54.8388900756836,-0.0730054900050163,16.3304214477539,52.7708168029785,-0.389918386936188,15.5185346603394,52.4953842163086,0.102539211511612,16.9141445159912,52.4776306152344,-1.37935245037079, 18.3628005981445,50.3478164672852,-2.12511992454529,19.1434917449951,50.0413246154785,-1.63698732852936,19.0610008239746,49.695125579834,-1.77505218982697,18.2138481140137,49.9208297729492,-2.24553346633911,16.8566780090332,47.8757438659668,1.42759299278259,18.0488719940186,48.6800994873047,2.13007593154907,16.5044593811035,47.3519020080566,0.528880298137665,12.9402542114258,50.571460723877,-1.74043500423431,22.1152286529541,41.9466590881348,2.25192022323608,20.4308776855469,49.204704284668,-0.211134687066078,22.0665168762207,46.7259864807129,-0.941627204418182,21.0119819641113,47.8783187866211,-1.3603481054306,23.1058826446533,44.9971618652344,-0.0795651748776436,24.6004333496094,42.9618148803711,0.871560215950012,25.3450222015381,42.1090126037598,1.43619477748871,25.2234687805176,42.0636825561523,1.21761846542358,19.0784664154053,48.2057571411133,-2.72225308418274,19.8962860107422,47.0656585693359,-2.43542766571045,20.9766960144043,45.5458106994629,-1.92559599876404,24.6982593536377,40.952953338623,0.358907043933868,24.1927070617676,40.5977745056152,0.382595211267471,25.3028049468994,39.9894943237305,0.288388758897781,24.8059501647949,39.6957168579102,0.346591711044312,25.1876049041748,41.3445816040039,0.634206295013428,25.3709888458252,41.4191017150879,0.950496912002563,25.8578147888184,40.4478416442871,0.830263614654541,25.7993278503418,40.3204307556152,0.513917446136475,25.7801952362061,38.3923225402832,0.405306428670883,26.1005973815918,38.6033821105957,0.414937376976013,25.4721603393555,38.2417297363281,0.933774352073669,26.3225708007813,37.9900283813477,0.540673732757568,26.0681343078613,37.7213554382324,1.00822830200195,26.9082546234131,38.2915687561035,0.749213039875031,26.5941677093506,38.8570823669434,0.646034121513367,24.4965305328369,39.4820251464844,0.818610429763794,26.4576644897461,37.7728614807129,0.577100872993469,27.0060615539551,38.1100616455078,0.721827626228333,26.7886180877686,37.0538597106934,0.865942239761353,26.3225383758545,37.6534957885742,1.00922620296478,26.8767929077148,37.1728324890137,0.468527495861053, 27.3362140655518,37.5333251953125,0.568650424480438,26.9089126586914,36.9463882446289,0.83524751663208,27.2755012512207,36.5016174316406,0.330541372299194,27.1422691345215,36.4382171630859,0.698461651802063,27.4169120788574,37.3746147155762,0.559433698654175,27.6172657012939,36.7529067993164,0.433391004800797,27.6500587463379,35.8810615539551,0.272548139095306,27.4733486175537,35.7689361572266,0.551467180252075,27.1704921722412,36.2463798522949,0.662050426006317,27.6621761322021,36.5758056640625,0.369325369596481,27.8887329101563,36.0022964477539,0.326096922159195,27.7101459503174,35.7865028381348,0.795266091823578,27.417350769043,36.4184913635254,1.01918590068817,27.7454051971436,36.5266799926758,0.829174995422363,27.9386329650879,35.9596900939941,0.679637730121613,27.4934635162354,37.3412284851074,0.980259478092194,27.0495414733887,37.0782127380371,1.16021084785461,27.7116069793701,36.7087478637695,0.851239860057831,26.650333404541,37.6419792175293,1.37471866607666,27.4007320404053,37.5071411132813,1.03993594646454,27.0318088531494,38.0435752868652,1.17184197902679,26.4400997161865,37.4421005249023,2.04593300819397,26.6612987518311,37.5791244506836,1.56387555599213,27.5257396697998,36.7985382080078,1.59476542472839,27.252779006958,36.6252250671387,2.00045323371887,27.1135292053223,38.1128196716309,1.73599755764008,27.8796730041504,37.1851119995117,1.79905617237091,27.3627796173096,36.5155220031738,2.01364994049072,27.9746055603027,35.7752990722656,1.58363437652588,27.7661838531494,35.6817970275879,1.94547843933105,28.3251419067383,36.1039810180664,1.7449312210083,27.9955158233643,36.9921951293945,1.80444490909576,28.4029026031494,34.9839820861816,1.58109271526337,28.1856861114502,34.848575592041,1.88748633861542,27.7915382385254,35.4960746765137,1.9382655620575,28.4168186187744,35.9179153442383,1.75137233734131,28.6992263793945,35.1313018798828,1.7256453037262,28.3781414031982,34.8804969787598,2.25901389122009,27.9310855865479,35.6697311401367,2.39866852760315,28.6852798461914,35.0521774291992,2.21204161643982,28.3788299560547,35.8418731689453,2.34064173698425, 28.2824611663818,36.0258941650391,2.37827920913696,27.9731998443604,36.9341583251953,2.44280982017517,27.471607208252,36.6702003479004,2.49169683456421,26.5937404632568,37.5661163330078,2.55073118209839,27.8806591033936,37.1366653442383,2.46509552001953,27.0677833557129,38.1636085510254,2.43924880027771,26.1258983612061,37.3881416320801,3.04604911804199,26.5572929382324,37.5719413757324,2.62185740470886,27.3054351806641,36.6506423950195,2.89670968055725,26.9249095916748,36.5646018981934,3.28057646751404,26.9879112243652,38.1367683410645,2.92280745506287,27.6747379302979,37.1117057800293,3.17924690246582,27.7615966796875,36.9150314331055,3.23563146591187,28.2383708953857,35.9730453491211,3.32715606689453,27.871862411499,35.6653060913086,3.07638382911682,27.5263328552246,35.4128036499023,3.39707732200623,28.3017101287842,34.8627967834473,3.21868848800659,27.9842147827148,34.7188110351563,3.48127365112305,28.3142108917236,35.7948036193848,3.34757208824158,28.5679912567139,34.9831886291504,3.40694642066956,28.1073131561279,34.7972373962402,3.87777209281921,27.6106281280518,35.5863075256348,3.86808156967163,28.4313812255859,34.9209785461426,3.87717008590698,28.1370372772217,35.7406539916992,3.9042637348175,27.0665016174316,36.4050979614258,3.31043982505798,27.510648727417,35.5919876098633,3.40624260902405,27.0221843719482,36.6047554016113,3.79309582710266,27.5394611358643,36.8876075744629,3.83840227127075,28.0492992401123,35.9131050109863,3.90735578536987,26.6743221282959,38.1594886779785,3.67190909385681,26.1993770599365,37.6065101623535,3.60492968559265,27.4188442230225,37.0833053588867,3.8506007194519,26.3732204437256,38.1710357666016,3.81811428070068,26.1211948394775,37.6256675720215,3.729327917099,26.3689670562744,38.1229438781738,4.14238786697388,26.0806045532227,37.6261596679688,3.831378698349,25.6204929351807,37.5335235595703,4.13789939880371,26.5901908874512,36.8493919372559,4.29961729049683,26.0924530029297,36.7544097900391,4.50640773773193,26.8835201263428,37.3182640075684,4.58951425552368,26.2052230834961,36.6018562316895,4.58425235748291, 27.0373764038086,36.1325798034668,4.5937819480896,26.5271606445313,36.0083427429199,4.82670307159424,27.3855781555176,35.2786750793457,4.88182163238525,27.0250186920166,35.1469802856445,5.07152080535889,26.6071300506592,35.8096046447754,4.84630966186523,27.3304958343506,36.2740478515625,4.92522811889648,27.5788135528564,35.4574508666992,5.12497615814209,27.0628986358643,35.2529602050781,5.45621109008789,26.5958919525146,36.0889739990234,5.29514455795288,27.0041675567627,36.2450065612793,5.42881679534912,27.3649311065674,35.4346160888672,5.50301694869995,26.1548156738281,36.876579284668,5.06085157394409,25.5146293640137,37.8111763000488,4.68628072738647,26.5431079864502,37.3230209350586,5.13250923156738,25.9985046386719,38.1869125366211,4.74417495727539,25.8601264953613,38.4725189208984,4.65872764587402,25.379301071167,38.041332244873,4.60675239562988,24.8795471191406,38.6019477844238,4.33086013793945,24.8324947357178,38.3304977416992,4.05487537384033,25.2847557067871,37.7632865905762,4.32127714157104,24.2327289581299,39.4822654724121,4.69844198226929,24.5814819335938,39.0382881164551,4.36362171173096,24.5726547241211,39.3343391418457,4.62598991394043,24.3039608001709,39.6546897888184,4.67785024642944,24.988748550415,38.6693725585938,4.54520559310913,23.3804588317871,38.7108688354492,4.23522806167603,24.0566806793213,38.8694267272949,4.58743762969971,23.7426376342773,38.347526550293,5.05098819732666,23.1989231109619,38.1966209411621,4.90307235717773,23.9056186676025,38.6819915771484,5.32080602645874,23.1362209320068,37.7694129943848,5.23940420150757,23.7630577087402,38.2689514160156,5.09673023223877,23.7901935577393,37.8711585998535,5.49010467529297,23.9807529449463,38.3736877441406,5.77518558502197,23.5361366271973,37.5237312316895,6.10112524032593,23.0678863525391,37.4616851806641,5.86668682098389,23.7495536804199,37.8985443115234,6.32710599899292,23.2475433349609,37.5488967895508,6.44766569137573,22.8217315673828,37.5743827819824,6.23360919952393,23.3994960784912,37.9742126464844,6.59987640380859,23.0917453765869,38.1686515808105,6.06353569030762, 22.8577537536621,37.8568840026855,5.88337469100952,23.012113571167,37.7846069335938,6.54836654663086,23.4866733551025,38.3189849853516,6.24945592880249,23.0492630004883,38.7583618164063,5.61055421829224,22.8870544433594,38.4511108398438,5.23353481292725,23.5309505462646,38.9028968811035,5.63903284072876,23.0816688537598,38.9113273620605,5.43069744110107,22.903959274292,38.6048736572266,5.06207942962646,23.5692825317383,39.0464859008789,5.50390243530273,23.1787662506104,39.5135841369629,4.73982095718384,22.9653015136719,39.0761489868164,4.45135879516602,23.7099552154541,39.643383026123,4.94727754592896,23.1316452026367,39.6058540344238,4.39698171615601,23.2359008789063,39.7697334289551,4.56437253952026,23.8059616088867,39.9706344604492,4.65126800537109,22.8236141204834,40.5319900512695,3.22857236862183,23.2926731109619,40.7458877563477,3.48519134521484,23.3760948181152,41.0617523193359,3.17902445793152,23.8505458831787,41.1859550476074,3.43207764625549,23.7036972045898,41.0978317260742,3.33670973777771,23.6273307800293,40.8063163757324,3.54599738121033,23.8023815155029,40.8397178649902,3.72936797142029,23.864990234375,40.3513641357422,0.763435900211334,26.0925273895264,37.3577766418457,2.46653962135315,25.1522541046143,38.3267784118652,2.33084297180176,24.2588024139404,41.0395889282227,3.48043417930603,24.0651969909668,40.6324920654297,3.8392653465271,25.5185146331787,41.4591979980469,1.35679078102112,25.653772354126,41.5190391540527,1.6309654712677,25.9954280853271,40.7029228210449,1.54055678844452,25.8710231781006,40.5874977111816,1.27703082561493,26.0212421417236,40.74462890625,2.01458048820496,27.0484008789063,38.6537818908691,2.09933829307556,26.9103240966797,38.5200996398926,1.7544903755188,25.8416957855225,40.7435646057129,1.77245020866394,26.9660968780518,38.5935897827148,1.06645917892456,26.9331588745117,38.5272674560547,1.37321221828461,27.0709819793701,38.1172180175781,0.946545481681824,26.7614231109619,38.6556396484375,0.834723055362701,26.2733211517334,38.2470092773438,4.53884506225586,26.247579574585,38.6773948669434,4.36139822006226, 25.8889560699463,38.9593696594238,4.29162311553955,26.644458770752,37.085147857666,5.1886773109436,26.9800910949707,37.083366394043,4.67532682418823,26.9348583221436,36.4211692810059,5.37596225738525,27.2591381072998,36.4549560546875,4.88776636123657,26.5561027526855,38.6125755310059,3.46944952011108,26.9216537475586,38.2097854614258,3.33311867713928,26.8688983917236,38.6367416381836,3.23217034339905,26.8833427429199,38.5423469543457,2.40460467338562,25.8038959503174,40.8302612304688,2.23062658309937,27.186222076416,38.2038040161133,2.10988116264343,26.2264060974121,38.6139297485352,3.97575259208679,24.5834217071533,41.3079147338867,3.27626419067383,24.8852310180664,40.5095405578613,3.75876450538635,25.4011859893799,40.703010559082,3.19607472419739,25.1859474182129,41.5070991516113,2.65838599205017,25.6491737365723,40.8988571166992,2.67949414253235,25.6597290039063,40.8177680969238,3.02372980117798,25.122709274292,42.1687240600586,2.20631384849548,25.4116878509521,41.62255859375,2.47316360473633,18.6652545928955,49.0274696350098,-2.71728754043579,18.8835830688477,49.226978302002,-2.30565118789673,19.0407295227051,49.365291595459,-2.1370997428894,19.2852344512939,48.3980293273926,-2.39254927635193,18.7893352508545,49.1171913146973,-2.36733150482178,19.810115814209,48.9623527526855,-1.67176043987274,23.0315437316895,40.908805847168,2.42655611038208,17.4380874633789,52.009090423584,-0.472728759050369,18.2713642120361,46.4929962158203,1.71778869628906,18.4343547821045,46.4846496582031,1.90123617649078,25.4729385375977,41.5712852478027,2.26492691040039,25.2154121398926,42.1438407897949,1.88524603843689,25.9024715423584,40.8810386657715,2.52124524116516,25.5942573547363,41.5684204101563,2.04436349868774,25.6221370697021,41.5452880859375,1.8506965637207,26.7846965789795,38.5711326599121,2.87396049499512,24.2903747558594,39.2600364685059,2.27982521057129,23.56321144104,40.0693969726563,1.32033908367157,25.473295211792,39.0388641357422,4.46131086349487,24.5607967376709,39.9796295166016,4.38208770751953,24.531322479248,42.9018974304199,0.635185480117798, 25.1442775726318,41.987964630127,0.959975838661194,17.2868213653564,50.5812377929688,-2.79002928733826,16.9400997161865,49.9927215576172,-3.01769161224365,22.0741806030273,42.0393333435059,1.58685779571533,23.2135009765625,40.9123229980469,2.01415634155273,22.84716796875,40.2443580627441,2.65073156356812,8.43788433074951,58.2488059997559,-5.06908559799194,22.8853321075439,39.2420883178711,4.04786348342896,20.1032047271729,47.3067436218262,-2.26983070373535,27.8083629608154,35.7866897583008,0.489041179418564,26.5843887329102,37.6299057006836,1.49316310882568,26.2961502075195,37.4816856384277,1.81986856460571,26.9315319061279,38.103832244873,1.47392988204956,28.5599994659424,34.891429901123,1.93208718299866,25.8117942810059,37.4354019165039,3.28776264190674,26.7924709320068,38.083984375,2.64168548583984,28.3647136688232,34.7375602722168,3.58996033668518,25.9461326599121,37.5993270874023,3.64939475059509,25.5401210784912,37.5742073059082,3.82962965965271,27.3658351898193,35.2051162719727,5.2496919631958,23.554235458374,38.9353561401367,3.55190014839172,24.2575073242188,39.0156440734863,3.84028148651123,23.1536922454834,39.5488891601563,2.57533121109009,4.21192502975464,59.6024436950684,1.20553481578827,3.87961935997009,60.1460342407227,0.683042943477631,4.10153722763062,59.9645767211914,1.17759025096893,0.886674761772156,61.9747085571289,-3.56468176841736,3.29183435440063,59.7472953796387,1.7451434135437,3.74813604354858,61.0305709838867,-0.745337963104248,1.48638010025024,59.8282012939453,2.30086016654968,3.60340857505798,59.9398307800293,1.34661877155304,10.2422742843628,52.4975051879883,-0.000607038440648466,10.7581825256348,53.1050300598145,0.902385234832764,11.5402479171753,53.9515991210938,1.23755180835724,12.2552671432495,54.5028038024902,0.66737699508667,2.27535820007324,45.8665199279785,-2.50945448875427,3.42833256721497,45.5274429321289,-1.78932905197144,4.05796194076538,45.2589874267578,-1.40885472297668,4.60915374755859,44.9898719787598,-0.930403530597687,5.24233913421631,44.666446685791,-0.0869212374091148, -4.25761461257935,44.1189155578613,-0.763114631175995,-6.03212308883667,43.845027923584,2.36041808128357,-5.83559989929199,43.7850875854492,3.04091644287109,-5.30527019500732,44.0394668579102,0.50008898973465,3.50020909309387,43.5624122619629,5.78555011749268,5.09468984603882,43.6128387451172,4.61228513717651,4.20102405548096,43.5664901733398,5.19080018997192,4.9380989074707,44.0710144042969,-0.0603329986333847,6.03212308883667,43.845027923584,2.36041808128357,5.67244100570679,44.0079154968262,1.06051099300385,5.30527019500732,44.0394668579102,0.50008898973465,5.31654071807861,43.6553688049316,4.30916976928711,-7.75623239065986e-017,43.5387115478516,5.84340620040894,-5.27845695614815e-005,33.3007431030273,2.05420589447021,-8.22455185698345e-005,33.2863311767578,1.1840980052948,-3.33971934196597e-006,33.5464897155762,2.91496634483337,-0.0216123331338167,34.086296081543,4.46552181243896,-0.0209378246217966,36.0812835693359,5.91989803314209,0.0214357674121857,40.9322090148926,5.86233282089233,0.000330000009853393,43.5154304504395,6.32375717163086,0.0163603387773037,42.6093482971191,6.2076268196106,-7.75623239065986e-017,44.1866607666016,-2.73809719085693,-7.75623239065986e-017,43.0882110595703,-2.73308086395264,-7.75623239065986e-017,41.1124305725098,-3.11592626571655,-7.75623239065986e-017,38.7960510253906,-3.92060899734497,-7.75623239065986e-017,37.1677017211914,-4.09805393218994,-7.75623239065986e-017,35.5332374572754,-3.72692203521729,-7.75623239065986e-017,34.4388084411621,-2.60908508300781,-7.75623239065986e-017,33.9057998657227,-1.05233216285706,-7.75623239065986e-017,40.3612594604492,-3.36505818367004,-7.75623239065986e-017,40.9668617248535,-2.97700309753418,-0.021883649751544,34.9344253540039,5.3594274520874,0.0219422280788422,38.3137702941895,5.65279293060303,-2.06331396412907e-010,33.4434928894043,0.294710874557495,-7.75623239065986e-017,37.981876373291,-4.00933170318604,-7.75623239065986e-017,39.5786552429199,-3.6428337097168,0.016111932694912,36.9298248291016,5.72457551956177,-7.75623239065986e-017,36.350471496582,-3.91248798370361, 0.814909756183624,33.3780937194824,2.90381836891174,0.932765364646912,33.2268142700195,2.00603055953979,1.22708594799042,33.3489303588867,2.8274359703064,2.75687050819397,36.3014907836914,5.40374183654785,3.5030312538147,36.7397232055664,5.33827209472656,1.25800061225891,34.1628379821777,4.3538761138916,2.02382874488831,34.1971549987793,4.5708212852478,3.47264003753662,40.8046646118164,5.64674711227417,4.18744277954102,40.976692199707,5.10877799987793,5.14671087265015,41.2881736755371,4.74443769454956,1.62547600269318,40.8144302368164,6.03513288497925,5.77770185470581,43.7241973876953,4.21209239959717,5.29317903518677,43.5865287780762,4.95701169967651,5.08752679824829,42.6901473999023,5.04328632354736,4.34233283996582,43.5406455993652,5.61575651168823,4.17514419555664,42.6370620727539,5.60567569732666,3.46193909645081,42.6481056213379,5.76057195663452,3.47859120368958,43.5532836914063,5.99722957611084,3.43521809577942,42.6959381103516,5.98223733901978,1.42388653755188,36.1319541931152,5.72585105895996,3.40727496147156,40.9113006591797,5.82985496520996,1.57330799102783,42.6485214233398,6.22713947296143,1.58111011981964,43.5325012207031,6.25356292724609,5.83585691452026,39.4078598022461,4.92551565170288,7.0226731300354,39.7226982116699,1.82336485385895,6.7251763343811,40.6819534301758,1.25125098228455,5.85274076461792,38.5889129638672,-1.75322699546814,5.36832094192505,36.3024063110352,-3.52680969238281,5.2288670539856,34.9626655578613,-3.10190200805664,4.03269290924072,35.0155754089355,-3.88902568817139,3.9318573474884,36.8120727539063,-4.35974216461182,6.22724580764771,36.1577568054199,-1.94789063930511,5.26579904556274,39.0528678894043,-3.06897306442261,5.97235774993896,33.2114219665527,-2.53228330612183,4.39906072616577,32.8998641967773,-3.10125088691711,1.36317300796509,33.4801025390625,-1.84129047393799,1.09546613693237,34.4467086791992,-2.68856716156006,2.17296242713928,33.0436477661133,-2.6845920085907,0.895317554473877,33.7961120605469,-1.49867248535156,2.15257096290588,35.343318939209,-3.91910099983215,3.68432450294495,39.1226043701172,-3.77887201309204, 4.3945517539978,36.7878608703613,5.68821334838867,6.84634876251221,39.6859741210938,3.44338226318359,6.85820627212524,38.0219192504883,4.15880107879639,5.12256383895874,44.0850296020508,-0.662708640098572,5.07416200637817,43.1190338134766,-1.0839581489563,3.94724798202515,43.0901641845703,-1.78187119960785,4.41386079788208,44.1070861816406,-1.39090013504028,5.10807847976685,37.1020164489746,5.3708872795105,3.92581939697266,35.0171241760254,5.48070430755615,4.79267168045044,35.4377059936523,5.29423522949219,0.795329332351685,33.1274223327637,1.13712930679321,0.989203810691834,32.4371757507324,0.0683181583881378,3.06665587425232,32.5945091247559,4.35868883132935,1.45700669288635,40.4501914978027,-3.34169721603394,1.73029398918152,41.279899597168,-2.65792369842529,6.56671047210693,36.2014427185059,-1.10563158988953,5.91551494598389,41.8584251403809,0.232219994068146,6.44283723831177,41.8459777832031,1.37607705593109,6.03975009918213,40.6554222106934,-0.198134005069733,6.39490938186646,38.2275466918945,-0.677325069904327,6.91662931442261,39.7310752868652,2.6323184967041,1.83349096775055,37.0975799560547,-4.27652215957642,1.56641674041748,38.9513626098633,-3.91081118583679,3.50512456893921,40.6196136474609,-3.00334811210632,4.33383369445801,34.2510070800781,5.19123935699463,7.39133644104004,37.5306282043457,1.03786599636078,6.60190296173096,37.1033821105957,4.54294300079346,6.40375185012817,37.7048988342285,4.72016429901123,5.96765041351318,37.515453338623,5.11439895629883,5.89599943161011,36.2985420227051,5.10671806335449,7.37723875045776,38.6811370849609,3.11948132514954,5.88621282577515,44.0235214233398,0.907807588577271,5.91183280944824,43.0774421691895,0.39118629693985,6.32332801818848,43.0385551452637,1.20373177528381,6.07704210281372,43.9742317199707,1.41692113876343,6.26329946517944,43.8762435913086,2.40513157844543,6.55381441116333,42.9839019775391,2.05214643478394,6.02948570251465,42.7914657592773,3.67581176757813,2.12726092338562,43.1003265380859,-2.51028513908386,2.32953906059265,44.1899299621582,-2.3960747718811, 6.52310943603516,41.8832359313965,1.90106904506683,5.01420450210571,40.7571983337402,-2.03109741210938,3.62999892234802,41.6226119995117,-2.09058308601379,5.07654714584351,41.8539772033691,-1.2768919467926,1.74856305122375,41.446159362793,-2.7613410949707,6.6666374206543,41.9713020324707,1.90715312957764,6.58360290527344,41.9356079101563,1.37447500228882,5.17393112182617,41.9912605285645,-1.28132402896881,3.6604700088501,41.7834548950195,-2.16389107704163,6.04397821426392,41.9637260437012,0.200174003839493,7.44213581085205,36.6004333496094,1.16769206523895,7.92302513122559,32.6457328796387,-0.528758764266968,6.8061203956604,39.5952911376953,1.30259311199188,4.5844669342041,37.8577919006348,5.41912412643433,5.30243349075317,38.3342590332031,5.31651830673218,7.53545331954956,34.2902183532715,-0.67992115020752,7.87608909606934,36.6887588500977,1.07710671424866,4.71270799636841,34.922981262207,5.38027715682983,3.87385606765747,33.8004875183105,5.0019474029541,3.42617630958557,33.1789436340332,4.64112043380737,7.63047361373901,37.6648254394531,1.16357791423798,7.10544157028198,32.4796295166016,-1.40169179439545,6.13836097717285,32.2281188964844,-2.17795896530151,4.79551649093628,31.888032913208,-2.52016830444336,2.77830147743225,31.6644554138184,-2.11853051185608,1.35830628871918,31.4676284790039,-0.379713386297226,1.24095845222473,31.4523525238037,0.875401377677917,1.28563523292542,31.4966773986816,1.93234145641327,1.7512218952179,31.7267608642578,2.83344197273254,7.01957130432129,38.2649040222168,3.67450428009033,3.44437503814697,34.0655136108398,4.96053028106689,2.73415112495422,33.0613288879395,4.6151008605957,2.04167532920837,32.9766311645508,4.17566061019897,1.34300255775452,32.4887313842773,2.8340015411377,0.986135005950928,32.4462547302246,2.02241730690002,1.01812207698822,32.2924423217773,1.13504540920258,2.62103891372681,32.0797386169434,3.92770099639893,6.25751686096191,42.8987197875977,3.04582142829895,6.04216051101685,43.8070030212402,3.22801208496094,3.08791637420654,38.6117668151855,5.49701166152954,1.54153025150299,38.4154205322266,5.78113460540771, 1.47424268722534,36.9438629150391,5.92009258270264,2.93614816665649,37.1169738769531,5.52249622344971,3.87624454498291,37.4765739440918,5.41282415390015,1.34507369995117,35.0776443481445,5.1326584815979,2.54694414138794,35.6014175415039,5.09529161453247,1.67743611335754,38.09423828125,-4.09251165390015,3.87088441848755,38.1073760986328,-4.12555122375488,5.3170599937439,37.6776351928711,-3.29789161682129,6.11478328704834,37.1026458740234,-1.88399529457092,6.49657773971558,36.9398536682129,-0.926609635353088,5.82635879516602,39.6921195983887,-1.53293943405151,5.03867244720459,39.8959846496582,-2.59106040000916,3.54611992835999,39.9083786010742,-3.3810977935791,1.41777455806732,39.6628646850586,-3.62027859687805,5.54055452346802,40.7690849304199,-1.08194398880005,5.49603080749512,41.856201171875,-0.522336006164551,5.60895442962646,41.9774932861328,-0.54057502746582,5.49299716949463,43.0982360839844,-0.212771996855736,5.50438833236694,44.0542755126953,0.256163358688354,1.99303114414215,36.2204513549805,-4.09781169891357,3.98227500915527,35.9138259887695,-4.1243839263916,5.28660011291504,35.5719833374023,-3.34177470207214,7.44574117660522,35.3674850463867,-0.307296603918076,3.89755582809448,38.8450965881348,5.16094303131104,4.99822235107422,39.3205108642578,5.13173723220825,6.45847272872925,41.8677444458008,2.8785502910614,6.1457724571228,41.7619590759277,3.46116876602173,0.765930593013763,33.2394866943359,0.199775099754334,6.97464942932129,33.6411361694336,-1.5275069475174,3.34150075912476,35.9524040222168,5.1044602394104,2.66343665122986,34.5371398925781,4.79501628875732,6.34700489044189,39.5354843139648,4.11105871200562,5.79346656799316,41.582836151123,3.95337581634521,5.71175098419189,42.7628898620605,4.28730201721191,5.51993751525879,43.6509590148926,4.6083869934082,-0.815094530582428,33.3783988952637,2.90374517440796,-0.933338344097137,33.2275924682617,2.00579643249512,-1.2274729013443,33.3488845825195,2.82644486427307,-2.75376105308533,36.3082656860352,5.42266178131104,-1.25820052623749,34.1625328063965,4.3541407585144, -2.02781987190247,34.1995391845703,4.5605411529541,-3.47264003753662,40.8046646118164,5.64674711227417,-5.45668506622314,41.3959541320801,4.4593939781189,-4.58708095550537,41.1039962768555,4.92208909988403,-1.62547600269318,40.8144302368164,6.03513288497925,-5.4484691619873,42.7392082214355,4.79399728775024,-5.77770185470581,43.7241973876953,4.21209239959717,-5.29317903518677,43.5865287780762,4.95701169967651,-3.46193599700928,42.6480674743652,5.76056671142578,-3.47859120368958,43.5532836914063,5.99722957611084,-3.43521809577942,42.6959381103516,5.98223733901978,-1.42269885540009,36.1321029663086,5.72401666641235,-3.40727496147156,40.9113006591797,5.82985496520996,-1.57330799102783,42.6485214233398,6.22713947296143,-1.58111011981964,43.5325012207031,6.25356292724609,-3.66835045814514,36.4985618591309,5.38381719589233,-5.79204177856445,39.4113311767578,4.94667863845825,-7.0226731300354,39.7226982116699,1.82336485385895,-6.7251763343811,40.6819534301758,1.25125098228455,-5.85274076461792,38.419017791748,-1.75322699546814,-5.78756046295166,40.3183822631836,-1.30541849136353,-5.36832094192505,36.3024063110352,-3.52680969238281,-5.2288670539856,34.9626655578613,-3.10190200805664,-4.03269290924072,35.0155754089355,-3.88902568817139,-3.9318573474884,36.8120727539063,-4.35974216461182,-6.22724771499634,36.1577682495117,-1.94789123535156,-5.26579904556274,39.0528678894043,-3.06897306442261,-5.97415399551392,33.3147354125977,-2.52801775932312,-4.40103721618652,32.9904479980469,-3.09865427017212,-1.3545548915863,33.4727592468262,-1.85239458084106,-1.09546613693237,34.4467086791992,-2.68856716156006,-2.12230801582336,34.2555770874023,-2.91455101966858,-2.18139433860779,33.1093902587891,-2.68757343292236,-0.895317554473877,33.7961120605469,-1.49867248535156,-2.15257096290588,35.343318939209,-3.91910099983215,-6.99374008178711,38.9632263183594,1.23011684417725,-7.25476980209351,39.1672859191895,1.80217695236206,-3.68432450294495,39.1226043701172,-3.77887201309204,-7.03208589553833,38.9501571655273,3.54810166358948,-6.8550271987915,39.6846504211426,3.43728446960449, -6.85820627212524,38.0219192504883,4.15880107879639,-5.12256383895874,44.0850296020508,-0.662708640098572,-5.07416200637817,43.1190338134766,-1.0839581489563,-3.9472484588623,43.0901641845703,-1.7818706035614,-4.41386079788208,44.1070861816406,-1.39090013504028,-5.10153818130493,37.1012496948242,5.36786413192749,-4.79267168045044,35.4377059936523,5.29423522949219,-0.803963482379913,33.1355094909668,1.13691902160645,-0.989203810691834,32.4371757507324,0.0683181583881378,-3.37483978271484,34.7629356384277,5.09840297698975,-1.45700669288635,40.4501914978027,-3.34169721603394,-1.73029398918152,41.279899597168,-2.65792369842529,-6.56719064712524,36.2016067504883,-1.10578656196594,-5.91551494598389,41.8584251403809,0.232219994068146,-6.44283723831177,41.8459777832031,1.37607705593109,-6.03975009918213,40.6554222106934,-0.198134005069733,-6.20767879486084,39.6629943847656,-0.267598986625671,-7.23072290420532,39.1555252075195,2.58811020851135,-6.91986083984375,39.7321853637695,2.6331958770752,-1.83349096775055,37.0975799560547,-4.27652215957642,-1.56641674041748,38.9513626098633,-3.91081118583679,-3.50512456893921,40.6196136474609,-3.00334811210632,-6.30732154846191,31.5682735443115,-2.05524492263794,-7.18444347381592,31.8184814453125,-1.26540243625641,-4.33383369445801,34.2510070800781,5.19123935699463,-7.39133644104004,37.5306282043457,1.03786599636078,-6.60190296173096,37.1033821105957,4.54294300079346,-5.96765041351318,37.515453338623,5.11439895629883,-5.89599943161011,36.2985420227051,5.10671806335449,-7.37121391296387,37.4857940673828,1.52764689922333,-7.52424764633179,38.2782287597656,2.63499093055725,-5.88621282577515,44.0235214233398,0.64057981967926,-5.91183280944824,43.0774421691895,0.123958557844162,-6.32332801818848,43.0385551452637,1.20373177528381,-6.07704210281372,43.9742317199707,1.41692113876343,-6.26329946517944,43.8762435913086,2.40513157844543,-6.55381441116333,42.9839019775391,2.05214643478394,-6.02948570251465,42.7914657592773,3.67581176757813,-2.13525223731995,43.1005859375,-2.50097489356995,-2.32953906059265,44.1899299621582,-2.3960747718811, -6.52310943603516,41.8832359313965,1.90106904506683,-5.01420545578003,40.7571983337402,-2.03109574317932,-3.63676381111145,41.6236991882324,-2.08075261116028,-5.07654762268066,41.8539772033691,-1.27689123153687,-1.74856305122375,41.446159362793,-2.7613410949707,-6.6666374206543,41.9713020324707,1.90715312957764,-6.58360290527344,41.9356079101563,1.37447500228882,-5.17393159866333,41.9912605285645,-1.28132331371307,-3.66729927062988,41.7845306396484,-2.15401744842529,-6.04397821426392,41.9637260437012,0.200174003839493,-6.13817310333252,35.4240798950195,-2.05124926567078,-6.8061203956604,39.5952911376953,1.30259311199188,-3.89585041999817,37.3545570373535,5.36638212203979,-5.27055740356445,38.3294830322266,5.32894420623779,-5.80193281173706,38.5906982421875,5.0371413230896,-6.67177486419678,38.838623046875,4.1148796081543,-7.2227783203125,37.7002792358398,3.50522708892822,-4.71270799636841,34.922981262207,5.38027715682983,-3.87385606765747,33.8004875183105,5.0019474029541,-3.42617630958557,33.1789436340332,4.73271560668945,-7.10551691055298,32.4807167053223,-1.39546012878418,-6.13810777664185,32.2308578491211,-2.16028618812561,-4.80070447921753,31.8894596099854,-2.51312136650085,-2.77957320213318,31.6670188903809,-2.11773061752319,-1.35933804512024,31.468542098999,-0.381132036447525,-1.24095845222473,31.4523525238037,0.513632297515869,-1.28563523292542,31.4966773986816,1.93234145641327,-1.7512218952179,31.7267608642578,2.83344197273254,-7.01010322570801,38.2587280273438,3.45386791229248,-2.21827101707459,32.9870643615723,4.24474334716797,-1.34323954582214,32.4883155822754,2.83370661735535,-0.986135005950928,32.4462547302246,2.02241730690002,-1.01812207698822,32.2924423217773,1.3158106803894,-2.62103891372681,32.0797386169434,3.92770099639893,-6.25751686096191,42.8987197875977,3.04582142829895,-6.04216051101685,43.8070030212402,3.22801208496094,-3.0857834815979,38.6119651794434,5.49794054031372,-1.54153025150299,38.4154205322266,5.78113460540771,-1.47438716888428,36.9435920715332,5.92864465713501,-2.93922257423401,37.1136054992676,5.5228476524353, -1.34475648403168,35.0796165466309,5.12902164459229,-2.53913545608521,35.605598449707,5.09833669662476,-1.67743504047394,38.0942153930664,-4.0925087928772,-3.87088441848755,38.1073760986328,-4.12555122375488,-5.3170599937439,37.6776351928711,-3.29789161682129,-6.11478328704834,37.1026458740234,-1.88399529457092,-6.49664258956909,36.9398765563965,-0.926629424095154,-6.36891555786133,38.7568817138672,-0.362202167510986,-5.82635879516602,39.3835487365723,-1.53293943405151,-5.03867244720459,39.8959846496582,-2.59106040000916,-3.54611992835999,39.9083786010742,-3.3810977935791,-1.41777455806732,39.6628646850586,-3.62027859687805,-5.54055452346802,40.7690849304199,-1.08194398880005,-5.49603080749512,41.856201171875,-0.522336006164551,-5.60895442962646,41.9774932861328,-0.54057502746582,-5.49299716949463,43.0982360839844,-0.479999780654907,-5.50438833236694,44.0542755126953,-0.0110644111409783,-1.99303114414215,36.2204513549805,-4.09781169891357,-3.98227500915527,35.9138259887695,-4.1243839263916,-5.28660011291504,35.5719833374023,-3.34177470207214,-4.4788703918457,39.1287841796875,5.13459396362305,-6.45847272872925,41.784423828125,2.8785502910614,-6.1457724571228,41.6194610595703,3.46116876602173,-4.63133525848389,42.6636047363281,5.32448053359985,-4.75305843353271,43.5604667663574,5.33120679855347,-7.44574117660522,35.3674850463867,-0.307296603918076,-0.765930593013763,33.2394866943359,0.199775099754334,-6.56689834594727,35.3885688781738,-1.30802595615387,-6.95459890365601,33.9223136901855,-1.50603950023651,-7.33988666534424,37.5106315612793,2.67807340621948,-6.3889856338501,37.875617980957,-0.605510652065277,-7.2694787979126,37.9696998596191,1.09678852558136,-7.34313821792603,38.1378936767578,1.5938401222229,2.54588627815247,31.5141983032227,3.90785717964172,7.35676193237305,36.611213684082,0.0735180079936981,1.76136982440948,30.7708950042725,-0.30973556637764,1.99895298480988,31.0155296325684,3.09628009796143,4.97575998306274,31.3360900878906,-2.19620847702026,6.30475044250488,31.5676937103271,-2.05935525894165,1.4699159860611,30.8071784973145,2.04358291625977, 3.12279558181763,30.9744472503662,-1.80761325359344,7.18444299697876,31.8184814453125,-1.26540327072144,7.60904788970947,38.0021514892578,1.4394623041153,6.92367172241211,37.4992141723633,4.23017835617065,7.33489608764648,38.8762969970703,2.96697282791138,8.05961799621582,32.2336196899414,-0.364079624414444,7.2227783203125,37.7002792358398,3.50522708892822,7.99379205703735,36.6208305358887,1.01282215118408,7.57951307296753,37.86865234375,1.19116532802582,7.60626697540283,38.0132713317871,3.52246165275574,2.92987728118896,32.3107681274414,4.24027919769287,-2.54588627815247,31.5141983032227,3.90785717964172,-7.35676193237305,36.611213684082,0.0735180079936981,-1.76136982440948,30.7708950042725,-0.30973556637764,-1.99895298480988,31.0155296325684,3.09628009796143,-4.97575998306274,31.3360900878906,-2.19620823860168,-1.4699159860611,30.8071784973145,2.04358291625977,-3.12279558181763,30.9744472503662,-1.80761325359344,-6.92367172241211,37.4992141723633,4.23017835617065,-7.92302513122559,32.6457328796387,-0.429989874362946,-7.53545331954956,34.2902183532715,-0.679921090602875,-8.05961799621582,32.2336196899414,-0.364079624414444,-2.92987728118896,32.3107681274414,4.24027919769287,6.71319198608398,40.9277381896973,1.88174486160278,6.6584153175354,40.9530601501465,2.80434918403625,6.40892744064331,40.8210372924805,3.42478704452515,6.16580247879028,40.730842590332,4.11610317230225,5.24478960037231,40.4570274353027,5.07763576507568,4.09946584701538,40.003002166748,5.10969161987305,3.26685166358948,39.7574501037598,5.55594730377197,1.59205174446106,39.6368942260742,5.92203807830811,0.0218058526515961,39.6724739074707,5.78261089324951,-1.59205174446106,39.6368942260742,5.92203807830811,-3.26731586456299,39.7573318481445,5.55723333358765,-4.62337350845337,40.2267990112305,5.05230140686035,-5.74155473709106,40.6005477905273,4.75555038452148,-6.41632032394409,40.8238906860352,3.43074584007263,-6.66259670257568,40.9543685913086,2.805419921875,-6.71319198608398,40.9277381896973,1.88174486160278,6.96116399765015,37.8924865722656,0.236995846033096, 6.53837490081787,39.545482635498,0.625087022781372,6.49494075775146,40.6730422973633,0.764400660991669,6.71600389480591,35.0457725524902,-1.27530515193939,5.8884334564209,35.0911750793457,-2.19964599609375,6.23003673553467,39.5202827453613,-0.280717462301254,-4.23733997344971,33.8883094787598,-3.31580758094788,-5.55170154571533,34.1430282592773,-2.73199439048767,-6.73952388763428,34.6517181396484,-1.38723611831665,2.27997398376465,34.040943145752,-3.00337839126587,4.2042031288147,34.010986328125,-3.35272359848022,5.61063671112061,33.969596862793,-2.70036911964417,6.52647972106934,41.9636688232422,2.90919852256775,6.23724269866943,41.8537979125977,3.54334712028503,5.89144325256348,41.6963653564453,4.04102087020874,5.23887634277344,41.4213523864746,4.82535839080811,4.29452753067017,41.1218376159668,5.21275663375854,3.47159290313721,40.9850463867188,5.65788459777832,-6.54996919631958,41.8910331726074,2.9947304725647,-6.23255920410156,41.7566947937012,3.59965658187866,-5.5538182258606,41.5054779052734,4.59554147720337,-4.69729375839233,41.2445487976074,5.07512426376343,-3.47165608406067,40.9741363525391,5.65721082687378,-23.6263427734375,43.013599395752,6.47430896759033,-23.7729072570801,43.1372222900391,6.58026456832886,-24.7628192901611,42.8174591064453,3.71304368972778,-24.5079193115234,42.6303253173828,3.80450463294983,-23.8901023864746,42.3696022033691,4.40267133712769,-23.2607154846191,42.4850196838379,5.82348585128784,-23.2944355010986,42.733642578125,6.23423337936401,-24.9903984069824,43.7264289855957,5.74327707290649,-24.3464870452881,43.513370513916,6.43716669082642,-24.1099834442139,43.3889198303223,6.47907829284668,-24.2180614471436,42.4923400878906,4.03699064254761,-25.4617786407471,43.6127967834473,4.0622730255127,-25.304744720459,43.3559913635254,3.76097178459167,-25.5957698822021,43.7158012390137,4.88774299621582,-25.5078639984131,43.6638641357422,4.65497446060181,-25.1738891601563,42.5260353088379,3.73804807662964,-24.6930446624756,42.1397438049316,3.69490194320679,-25.8416652679443,41.6027069091797,3.753737449646, -25.3609161376953,41.2780914306641,3.74570178985596,-25.5961322784424,42.946418762207,4.07511329650879,-25.7301807403564,43.0309448242188,4.41291189193726,-26.2887325286865,42.0926628112793,4.36350917816162,-26.2815189361572,41.9631805419922,4.04271125793457,-26.3981914520264,40.0381469726563,3.94070935249329,-26.700496673584,40.2688484191895,3.99253249168396,-26.031810760498,39.866283416748,4.42348146438599,-26.9415378570557,39.6701011657715,4.1496410369873,-26.6437759399414,39.3840065002441,4.57978057861328,-27.4736957550049,40.0068969726563,4.43392086029053,-27.1415252685547,40.5520286560059,4.28695392608643,-25.0047302246094,41.0434036254883,4.17262172698975,-27.0838451385498,39.4616813659668,4.20486354827881,-27.5854930877686,39.8320007324219,4.42073726654053,-27.4173030853271,38.7636375427246,4.53872299194336,-26.8994770050049,39.3322372436523,4.61534118652344,-27.5505905151367,38.8895950317383,4.15631341934204,-27.9687995910645,39.2777709960938,4.31590127944946,-27.5471420288086,38.6640548706055,4.52497625350952,-28.0055732727051,38.2453079223633,4.07616996765137,-27.8282165527344,38.1721115112305,4.42304611206055,-28.0598011016846,39.1244735717773,4.31831836700439,-28.3139152526855,38.5171012878418,4.22306823730469,-28.4227142333984,37.6497230529785,4.07181930541992,-28.217414855957,37.5255508422852,4.32485485076904,-27.8730697631836,37.9825782775879,4.39158630371094,-28.3780708312988,38.3434410095215,4.16639280319214,-28.6439151763916,37.7854652404785,4.15652751922607,-28.4176254272461,37.5569000244141,4.59826374053955,-28.0582599639893,38.1683197021484,4.77799558639526,-28.4014892578125,38.297679901123,4.63346862792969,-28.6482925415039,37.744571685791,4.51374578475952,-28.0808868408203,39.0941696166992,4.7457594871521,-27.6341457366943,38.8030586242676,4.86536312103271,-28.3536701202393,38.4771766662598,4.65000343322754,-27.1750984191895,39.3397560119629,5.02171897888184,-27.9707336425781,39.2536811828613,4.79168939590454,-27.5544815063477,39.7653503417969,4.87039470672607,-26.8892860412598,39.1242294311523,5.65932321548462, -27.1643943786621,39.2769088745117,5.21089363098145,-28.0640392303467,38.5519676208496,5.3613109588623,-27.7503108978271,38.3601455688477,5.72724676132202,-27.5549240112305,39.8371887207031,5.44011735916138,-28.3622589111328,38.9591102600098,5.60978889465332,-27.8641948699951,38.2575073242188,5.75561332702637,-28.5736103057861,37.5589599609375,5.41511964797974,-28.3246059417725,37.4510269165039,5.74597024917603,-28.8778953552246,37.9082946777344,5.62078475952148,-28.4881896972656,38.7738189697266,5.63155937194824,-29.0471324920654,36.796085357666,5.47368192672729,-28.7995357513428,36.6460189819336,5.74858140945435,-28.3623027801514,37.2672958374023,5.74302959442139,-28.9793586730957,37.7283210754395,5.64031219482422,-29.3114433288574,36.9610900878906,5.65622091293335,-28.9377841949463,36.6883697509766,6.14251613616943,-28.4273624420166,37.4474029541016,6.21729612350464,-29.2370700836182,36.8791809082031,6.13663291931152,-28.8671531677246,37.6475410461426,6.21940517425537,-28.7552375793457,37.8249931335449,6.24292993545532,-28.3837375640869,38.711784362793,6.26133489608765,-27.8976879119873,38.416675567627,6.24330282211304,-26.9654140472412,39.2554931640625,6.17968940734863,-28.276517868042,38.9079895019531,6.27008581161499,-27.4117317199707,39.8820152282715,6.13056707382202,-26.4471855163574,39.0464172363281,6.60819530487061,-26.9194221496582,39.2587203979492,6.24522972106934,-27.6800098419189,38.385009765625,6.62230777740479,-27.2573795318604,38.2736320495605,6.9517560005188,-27.26926612854,39.8481636047363,6.59906101226807,-27.9782104492188,38.8671264648438,6.95007228851318,-28.0688438415527,38.6760520935059,7.01848316192627,-28.5870819091797,37.7654495239258,7.17742586135864,-28.2777462005615,37.4363899230957,6.88086128234863,-27.9086799621582,37.1613502502441,7.15313673019409,-28.7339859008789,36.6618309020996,7.08320379257202,-28.3936653137207,36.4971008300781,7.30121755599976,-28.6705112457275,37.592227935791,7.20863342285156,-28.9643859863281,36.7978897094727,7.30511474609375,-28.4570426940918,36.5814056396484,7.71035099029541, -27.9176807403564,37.3377952575684,7.63046169281006,-28.7698287963867,36.7252349853516,7.75289964675903,-28.4236831665039,37.5247077941895,7.73659610748291,-27.4033813476563,38.1232032775879,7.00110530853271,-27.8806934356689,37.3391571044922,7.15934276580811,-27.2819881439209,38.3176307678223,7.47253370285034,-27.7696685791016,38.6321830749512,7.5859317779541,-28.3256855010986,37.6912994384766,7.72710371017456,-26.8567867279053,39.8479804992676,7.2989673614502,-26.4308338165283,39.2665863037109,7.17094659805298,-27.6364707946777,38.8198776245117,7.58093309402466,-26.5386028289795,39.8399963378906,7.40321207046509,-26.3355560302734,39.2802734375,7.28359174728394,-26.4937152862549,39.7903518676758,7.72415590286255,-26.2816333770752,39.2777862548828,7.37923860549927,-25.7911376953125,39.1551628112793,7.62134981155396,-26.7711887359619,38.5325317382813,7.91517496109009,-26.2570724487305,38.405632019043,8.05340671539307,-26.9927787780762,39.0176429748535,8.23996162414551,-26.3676681518555,38.260124206543,8.14638519287109,-27.2187328338623,37.843936920166,8.26996326446533,-26.6905918121338,37.6869506835938,8.43252944946289,-27.5778198242188,37.0123481750488,8.60592555999756,-27.2039623260498,36.8574829101563,8.74586391448975,-26.7794971466064,37.493537902832,8.46357822418213,-27.455057144165,38.0021095275879,8.637282371521,-27.7249240875244,37.2018547058105,8.87214088439941,-27.182933807373,36.963996887207,9.13169574737549,-26.6903743743896,37.7697410583496,8.90561294555664,-27.0663108825684,37.950511932373,9.09242057800293,-27.4639053344727,37.1640396118164,9.21800422668457,-26.2363605499268,38.5291175842285,8.61067199707031,-25.5951328277588,39.4232940673828,8.14927768707275,-26.5826759338379,38.9987297058105,8.73210430145264,-26.0422592163086,39.8283958435059,8.27025318145752,-25.8990154266357,40.1051177978516,8.16572380065918,-25.4575862884521,39.6448440551758,8.05125999450684,-24.9653930664063,40.1741714477539,7.70815801620483,-24.9730854034424,39.9014778137207,7.42950582504272,-25.4200038909912,39.3626289367676,7.75683259963989, -24.2210006713867,41.0106048583984,7.98147630691528,-24.6388511657715,40.5908088684082,7.69859838485718,-24.576192855835,40.8846054077148,7.95612287521362,-24.2833976745605,41.1872444152832,7.96993923187256,-25.0402679443359,40.2473983764648,7.93497562408447,-23.489013671875,40.1892395019531,7.41091966629028,-24.1003112792969,40.3884086608887,7.85036611557007,-23.76003074646,39.8458709716797,8.26958274841309,-23.2517566680908,39.6617813110352,8.05038833618164,-23.8638591766357,40.1887512207031,8.5574779510498,-23.1712284088135,39.2300567626953,8.37701511383057,-23.7789897918701,39.7685356140137,8.3179931640625,-23.7777690887451,39.3715591430664,8.7131233215332,-23.8962688446045,39.8838386535645,9.01914501190186,-23.4659900665283,39.0062866210938,9.28580474853516,-23.0384254455566,38.9159851074219,8.99066925048828,-23.623067855835,39.3927841186523,9.53688907623291,-23.1323223114014,39.0118255615234,9.59018325805664,-22.7384910583496,39.0114517211914,9.32059097290039,-23.2353954315186,39.445182800293,9.75967407226563,-22.9911422729492,39.6222114562988,9.18593120574951,-22.8035850524902,39.2971458435059,8.97720813751221,-22.871150970459,39.2318687438965,9.65723705291748,-23.3471965789795,39.7962341308594,9.4227352142334,-22.9731788635254,40.2100143432617,8.72885417938232,-22.8828563690186,39.8947982788086,8.33472442626953,-23.4366111755371,40.3843574523926,8.82137107849121,-23.0198669433594,40.3654747009277,8.55435657501221,-22.9130306243896,40.0500450134277,8.16645908355713,-23.4837207794189,40.530647277832,8.69202995300293,-23.1712074279785,40.9755668640137,7.88031339645386,-23.0264263153076,40.5268325805664,7.56757783889771,-23.6603927612305,41.1375503540039,8.156907081604,-23.1650218963623,41.0661544799805,7.53386211395264,-23.235279083252,41.2355422973633,7.71307706832886,-23.774694442749,41.4714393615723,7.87514686584473,-22.9597644805908,41.9761009216309,6.33067464828491,-23.3756122589111,42.2179107666016,6.64725112915039,-23.4795513153076,42.5396881103516,6.35377931594849,-23.9068374633789,42.6923294067383,6.66793060302734, -23.7800006866455,42.5955772399902,6.5540189743042,-23.6945686340332,42.2989540100098,6.75234365463257,-23.8408679962158,42.3424911499023,6.9574875831604,-24.3331031799316,41.8716430664063,4.02914953231812,-26.4941844940186,39.0164794921875,6.02960872650146,-25.5218563079834,39.9251556396484,5.76432228088379,-24.3132247924805,42.571662902832,6.771484375,-24.0989532470703,42.1516990661621,7.10267925262451,-25.8187999725342,43.0784912109375,4.83520603179932,-25.9118518829346,43.1455383300781,5.12484979629517,-26.3130931854248,42.3528518676758,5.08477687835693,-26.2328262329102,42.2309722900391,4.80738353729248,-26.2721271514893,42.3940773010254,5.55777406692505,-27.4076194763184,40.3714485168457,5.78906440734863,-27.3259334564209,40.2308349609375,5.42932653427124,-26.127269744873,42.3827819824219,5.2936635017395,-27.4691963195801,40.310604095459,4.7547812461853,-27.3994464874268,40.2410430908203,5.05457639694214,-27.6189594268799,39.8422622680664,4.65212154388428,-27.294132232666,40.3606758117676,4.49731540679932,-26.3379230499268,39.9064865112305,8.10357666015625,-26.3093795776367,40.3351631164551,7.92245149612427,-25.9464550018311,40.5943756103516,7.80378723144531,-26.6902542114258,38.767448425293,8.80242824554443,-27.0914497375488,38.7889060974121,8.33900260925293,-26.9938430786133,38.1222038269043,9.0299596786499,-27.3781890869141,38.1783409118652,8.58977794647217,-26.7387390136719,40.2936134338379,7.08049869537354,-27.1438694000244,39.9151344299316,6.99638652801514,-27.078519821167,40.3383636474609,6.88743591308594,-27.2102470397949,40.2485847473145,6.06977415084839,-26.0227088928223,42.4649887084961,5.74219417572021,-27.5707168579102,39.9309616088867,5.81999683380127,-26.3443927764893,40.2721290588379,7.53774356842041,-24.6449184417725,42.8606872558594,6.61178350448608,-24.9284400939941,42.0807762145996,7.13394355773926,-25.5023517608643,42.3086242675781,6.64509868621826,-25.3115196228027,43.0999031066895,6.07989645004272,-25.8049125671387,42.5218391418457,6.16582107543945,-25.7740497589111,42.4401054382324,6.50868082046509, -25.2683982849121,43.7581748962402,5.62061786651611,-25.55246925354,43.2300834655762,5.92629480361938,-23.2498245239258,42.3686256408691,5.56239986419678,-25.6443176269531,43.1836395263672,5.72843170166016,-25.404899597168,43.7405166625977,5.31508016586304,-26.0778408050537,42.5206146240234,6.04322719573975,-25.7941913604736,43.1893310546875,5.52624320983887,-25.8493099212646,43.1688117980957,5.33820009231567,-27.0476417541504,40.2691268920898,6.52142858505249,-24.6178779602051,40.8027114868164,5.59365653991699,-23.9773197174072,41.5689315795898,4.54149913787842,-25.5075569152832,40.646915435791,7.91557359695435,-24.5568523406982,41.5289115905762,7.71010732650757,-25.4690227508545,43.5844230651855,4.3893346786499,-23.4851150512695,42.3853034973145,5.17827129364014,-23.0789699554443,41.6929740905762,5.76250648498535,-22.9913101196289,40.6891403198242,7.15628480911255,-28.5560054779053,37.5645484924316,4.30806970596313,-27.0946807861328,39.3230667114258,5.13024616241455,-26.7749156951904,39.1556663513184,5.41575574874878,-27.4108295440674,39.8179130554199,5.15595531463623,-29.1609916687012,36.7120780944824,5.84303522109985,-26.1010341644287,39.0728492736816,6.80517244338989,-27.1171913146973,39.7844200134277,6.29439306259155,-28.754114151001,36.5392189025879,7.46010780334473,-26.174861907959,39.2433433532715,7.18090915679932,-25.7506484985352,39.1920318603516,7.30489063262939,-27.5133361816406,36.9361305236816,8.96808910369873,-23.738862991333,40.4270858764648,6.7562952041626,-24.3904209136963,40.5501098632813,7.136474609375,-23.4358806610107,41.0184288024902,5.73205804824829,-25.4248676300049,43.9473648071289,4.77484750747681,-25.4191493988037,43.8811645507813,4.5657262802124,-24.9597187042236,43.013126373291,3.73045754432678,-10.3164577484131,31.3168678283691,5.01786422729492,-10.4693489074707,31.2689456939697,4.63314199447632,-10.5240421295166,31.170467376709,4.48853874206543,-10.660719871521,31.3138275146484,3.91740942001343,-10.77490234375,31.469934463501,3.34196209907532,-10.6482152938843,31.5425624847412,2.44958591461182, -10.7324857711792,30.8154754638672,2.55173945426941,-10.7644014358521,31.6591262817383,3.23164176940918,-10.2808208465576,30.2793865203857,5.12975692749023,-10.6183176040649,30.2281265258789,4.64286136627197,-10.7760057449341,30.1664028167725,4.10758399963379,-10.9403457641602,30.1010570526123,3.54219555854797,-10.7129125595093,30.5542430877686,2.78098440170288,-10.5687103271484,27.5677471160889,5.52671241760254,-10.8588371276855,27.1532573699951,5.07090520858765,-11.0879936218262,26.626407623291,4.60105657577515,-11.1306085586548,26.04709815979,4.08966159820557,-11.0336875915527,25.9920654296875,3.46891665458679,-10.1512355804443,31.335147857666,5.21716260910034,-10.1344223022461,30.2982311248779,5.32907390594482,-10.4207248687744,27.5892753601074,5.72850036621094,-10.5767116546631,26.8494491577148,5.02568817138672,-10.4960432052612,27.2717418670654,5.53186178207397,-10.8061676025391,26.3513717651367,4.55436325073242,-10.9394845962524,25.787410736084,4.06502723693848,-10.9920883178711,25.724142074585,3.48293972015381,-11.0105819702148,25.9963417053223,3.22727370262146,-10.8338022232056,29.7751216888428,2.6583685874939,-10.8335161209106,29.8614139556885,2.92862701416016,-10.7086763381958,30.6338901519775,2.42993354797363,-10.7769727706909,30.848165512085,2.06661295890808,-10.7256050109863,31.4149341583252,1.97352004051209,-10.5714511871338,32.3552322387695,2.34100723266602,-10.6839933395386,31.7842426300049,1.91300749778748,-9.78507804870605,31.3338642120361,5.21721887588501,-9.87252616882324,30.2970352172852,5.36267328262329,-10.1591758728027,27.5860157012939,5.76210689544678,-10.4396133422852,27.3521747589111,5.68618774414063,-10.1944417953491,27.2868728637695,5.69989347457886,-10.2716274261475,27.1709403991699,5.48325634002686,-10.3740825653076,26.7456321716309,4.97552013397217,-10.6062746047974,26.249885559082,4.5052752494812,-10.6482419967651,25.6966972351074,3.98919558525085,-10.8514442443848,25.6230316162109,3.45295071601868,-11.0032596588135,25.8384418487549,3.3116455078125,-10.8768291473389,25.7538566589355,3.20788168907166, -10.8864469528198,25.9693126678467,3.08493828773499,-10.7101306915283,29.7232685089111,2.51960349082947,-10.6073989868164,30.6013603210449,2.29236936569214,-10.6865501403809,30.8208541870117,1.92806482315063,-10.635461807251,31.3915271759033,1.83091568946838,-10.5932502746582,31.7602348327637,1.76836478710175,-9.30952262878418,27.6096858978271,5.51130199432373,-9.36321449279785,27.1908302307129,5.43078088760376,-9.49075031280518,27.0709991455078,5.24157238006592,-10.0877647399902,26.1372394561768,4.31180095672607,-10.194766998291,25.6682167053223,3.90583229064941,-10.329719543457,25.5889053344727,3.29478788375854,-10.3173160552979,25.7066307067871,3.03983330726624,-10.3007287979126,25.9241466522217,2.91840529441834,-9.58683490753174,30.544189453125,2.06859755516052,-9.49680805206299,30.7271423339844,1.58154821395874,-9.35418319702148,31.3025550842285,1.47600340843201,-9.26891422271729,31.6173439025879,1.4452668428421,-10.1851902008057,32.705379486084,4.81975841522217,-10.3326625823975,32.658447265625,4.44952201843262,-10.5901002883911,32.6262359619141,4.10170269012451,-10.6844825744629,32.5894355773926,3.782958984375,-10.7659769058228,31.854585647583,3.87953209877014,-10.6804103851318,31.72825050354,4.22633266448975,-10.767786026001,32.5557403564453,3.49398136138916,-10.8224496841431,31.9832763671875,3.56911110877991,-10.6785020828247,32.4997863769531,3.11047172546387,-10.0196094512939,32.7230186462402,5.0197606086731,-9.6869421005249,32.7223472595215,5.02937936782837,-10.0704555511475,33.6436462402344,4.67708396911621,-10.2198791503906,33.6019630432129,4.2960090637207,-10.4739217758179,33.5704498291016,3.95791888237,-10.5781259536743,33.525318145752,3.62588310241699,-10.6515369415283,33.4999389648438,3.3558030128479,-9.90494632720947,33.6611785888672,4.87709617614746,-9.5853099822998,33.6472320556641,4.89282941818237,-9.81949043273926,29.6289615631104,2.35337352752686,-10.4194192886353,32.6480674743652,4.33592128753662,-10.5391340255737,31.3583889007568,4.50618028640747,-10.6981973648071,31.5539741516113,3.89310121536255, -10.811616897583,31.6938400268555,3.3666524887085,-10.7361822128296,32.5229110717773,3.25604343414307,-10.6453189849854,33.4683799743652,3.12315583229065,-10.3043689727783,33.5925903320313,4.19207048416138,-10.6319732666016,33.4152908325195,3.01470398902893,-10.3322820663452,32.3530235290527,2.34796810150146,-10.4097709655762,31.530782699585,2.44121956825256,-10.4909515380859,31.4116535186768,2.01891303062439,-10.4493608474731,31.7783679962158,1.95387315750122,-9.30763244628906,31.3428630828857,1.69849765300751,-9.27701187133789,31.7112808227539,1.63962948322296,-10.4460687637329,32.5039863586426,3.1677417755127,-10.5314064025879,31.6679840087891,3.2867476940155,-10.0142679214478,33.5728530883789,4.17846965789795,-9.86453628540039,33.6150016784668,4.55991649627686,-9.97907161712646,32.6791954040527,4.70206594467163,-10.2583742141724,32.6154098510742,4.15401935577393,-10.3493843078613,33.5028266906738,3.56188273429871,-10.2622365951538,33.5427513122559,3.85136222839355,-10.4926147460938,32.5556602478027,3.59924221038818,-9.80005741119385,33.6264266967773,4.66476440429688,-9.81684875488281,32.6917915344238,4.80013179779053,-8.66097354888916,32.6172485351563,4.52869319915771,-9.61614990234375,33.617748260498,4.65667963027954,-8.78214836120605,33.6332511901855,4.21878576278687,-10.4077816009521,33.4588775634766,3.14650082588196,-10.4150419235229,33.4819145202637,3.32972025871277,-10.50719165802,32.5252380371094,3.34993386268616,-10.3950653076172,33.4113655090332,3.04695606231689,-10.6592054367065,32.8283767700195,2.68546414375305,-10.4200668334961,32.8382186889648,2.69870090484619,-10.1139011383057,33.5614242553711,4.05157613754272,-9.27635383605957,28.1130962371826,5.45821094512939,-8.77882862091064,32.6230430603027,4.73766326904297,-8.70695400238037,33.5800857543945,4.55812740325928,-8.99448394775391,31.0272312164307,5.08935070037842,-9.15069961547852,29.4090843200684,5.3089280128479,-8.69561290740967,32.595043182373,4.38728666305542,-9.04243087768555,32.6055297851563,3.77995300292969,-9.26224613189697,32.6090660095215,3.21469688415527, -9.35247230529785,32.4662780761719,2.86970043182373,-9.35247230529785,31.6366233825684,2.86970067024231,-9.52705860137939,31.4878177642822,2.16713285446167,-4.29888534545898,21.2389469146729,2.84800100326538,-3.93148970603943,21.6375637054443,2.01565790176392,-2.89970541000366,24.9143161773682,2.17081499099731,-2.62015056610107,26.2532806396484,2.3701069355011,-4.41971921920776,21.6550331115723,4.03259515762329,-8.20820713043213,24.2063522338867,5.04386711120605,-8.81881809234619,23.5065650939941,4.60944509506226,-9.62073135375977,24.0104999542236,1.51200270652771,-9.83751201629639,22.8306541442871,2.4107723236084,-9.29598808288574,23.2301254272461,4.08172798156738,-2.31491231918335,29.7624473571777,3.23570966720581,-2.28898024559021,28.4519901275635,2.82041788101196,-9.44373893737793,26.8204231262207,1.29200780391693,-9.5324125289917,25.5558605194092,1.46676802635193,-3.17484617233276,23.3372783660889,2.0396089553833,-7.73149299621582,25.2387638092041,5.56792831420898,-6.34912157058716,24.9886512756348,5.79081058502197,-6.1414589881897,23.8302707672119,5.62265491485596,-8.50175857543945,30.9236011505127,0.143369674682617,-8.91572570800781,29.3362884521484,0.629053473472595,-9.6224308013916,23.0851593017578,1.67339825630188,-9.57697582244873,22.9747257232666,3.24728608131409,-3.43016672134399,22.3351707458496,1.91197001934052,-5.56419515609741,22.756872177124,5.25122785568237,-4.97053909301758,22.3994827270508,4.87527322769165,-10.183985710144,24.0114269256592,1.48732244968414,-10.3995380401611,23.0030460357666,2.38215231895447,-10.1714305877686,23.2381954193115,1.69905114173889,-10.0658826828003,24.2001304626465,3.24561882019043,-10.1078948974609,23.1566581726074,3.35979390144348,-9.73544216156006,24.5126132965088,4.35015201568604,-9.77918720245361,23.3942604064941,4.31036186218262,-9.15197277069092,24.8433399200439,5.12198305130005,-9.17974853515625,23.6991958618164,5.01077795028687,-8.81389045715332,25.4027652740479,5.52354097366333,-8.11821174621582,25.076171875,6.03452777862549,-8.62082099914551,24.2555313110352,5.50145721435547, -4.94333648681641,24.0129108428955,6.1410551071167,-5.44337701797485,22.7728080749512,5.75631809234619,-6.00277996063232,23.6588459014893,6.15437316894531,-5.51579332351685,24.4081516265869,6.2461986541748,-4.21660566329956,23.4138717651367,5.43742179870605,-4.60753440856934,22.092170715332,5.30762243270874,-3.64753818511963,22.7981567382813,4.36176633834839,-3.97580409049988,21.4336051940918,4.30237817764282,-3.93899321556091,21.0546340942383,3.03482794761658,-3.00800609588623,22.134693145752,2.17809700965881,-3.47336459159851,21.4021892547607,2.19615602493286,-10.2548227310181,25.4462604522705,2.23816800117493,-10.0921211242676,25.3244571685791,1.40582799911499,-10.1016530990601,25.5772495269775,4.32744646072388,-9.49295043945313,25.6799545288086,5.24583053588867,-8.74037933349609,26.1106243133545,5.74385833740234,-7.91368246078491,26.0554676055908,6.26549863815308,-4.82580804824829,24.7727489471436,6.31932830810547,-3.97736215591431,24.154411315918,5.67784929275513,-3.38183975219727,23.6130828857422,4.72761106491089,-2.68674302101135,23.211181640625,2.26280474662781,-9.40937805175781,29.5380821228027,0.473168909549713,-9.00727462768555,31.0707683563232,0.0614502280950546,-9.27804946899414,31.2962856292725,1.37091720104218,-9.69148540496826,29.6239604949951,1.64869022369385,-8.30988502502441,32.8178291320801,5.27076625823975,-8.49545383453369,30.7285480499268,5.71441602706909,-7.65233707427979,30.4246578216553,6.46737289428711,-7.61286640167236,32.386043548584,6.16658735275269,-4.8137845993042,30.9995460510254,6.55148696899414,-5.17962551116943,29.5996227264404,6.77977800369263,-4.09050512313843,30.391019821167,6.23229169845581,-2.47493076324463,29.0429763793945,4.76166772842407,-2.26273012161255,28.844123840332,4.130455493927,-1.83292031288147,28.6096267700195,3.26814723014832,-8.04264640808105,34.5006980895996,-0.720708727836609,-7.95204257965088,35.5625,4.51369094848633,-7.40072584152222,35.2431945800781,5.5053391456604,-4.30788898468018,32.4267234802246,6.14424514770508,-3.70565128326416,31.6386547088623,5.78515100479126, -2.07473802566528,29.742862701416,4.24215078353882,-1.89405024051666,29.2105312347412,3.50888156890869,-7.91234683990479,36.6562614440918,0.0448120012879372,-7.69625759124756,37.7195739746094,3.7429211139679,-7.29021406173706,37.5362548828125,4.64640092849731,-6.16034173965454,36.3572311401367,5.5187726020813,-4.74860525131226,34.8689727783203,5.76224040985107,-3.77248501777649,33.7298736572266,5.60572528839111,-3.26117038726807,32.9967346191406,5.2520923614502,-6.08498001098633,25.5943832397461,6.55991077423096,-6.18661165237427,24.7244873046875,6.31633234024048,-10.0716009140015,24.0060024261475,1.4139244556427,-10.0697593688965,23.165225982666,1.6226841211319,-10.3156270980835,22.8844871520996,2.36132836341858,-10.029746055603,23.0400581359863,3.33455991744995,-9.70546817779541,23.283145904541,4.26745891571045,-9.1259241104126,23.5924777984619,4.93032312393188,-8.48777198791504,24.2007484436035,5.37533950805664,-7.91638708114624,25.1751689910889,5.94517946243286,-6.03314876556396,23.5322189331055,5.99998188018799,-5.52076005935669,22.6739807128906,5.62737798690796,-4.69226598739624,22.0745868682861,5.19560813903809,-4.09655714035034,21.4006404876709,4.22978782653809,-4.06289386749268,21.0164031982422,3.00006198883057,-3.60996341705322,21.3400974273682,2.08173608779907,-9.97756958007813,25.3492584228516,1.34460115432739,-3.06863784790039,22.1662006378174,2.02713704109192,-2.74755239486694,23.2384338378906,2.15618586540222,-8.82112979888916,31.0097255706787,-0.0560440123081207,-1.86797857284546,28.614429473877,3.1319215297699,-7.94068431854248,34.379695892334,-0.816163599491119,-1.89337337017059,29.1634712219238,3.36262130737305,-7.79942846298218,36.6775054931641,-0.0194739997386932,-7.60380077362061,37.7963676452637,3.67964386940002,-7.22692108154297,37.5835647583008,4.55090570449829,-6.1025857925415,36.4501762390137,5.41515636444092,-4.72125434875488,34.9616813659668,5.66096448898315,-3.76971030235291,33.8117027282715,5.53015184402466,-3.28945708274841,33.111946105957,5.19547367095947,-2.06053113937378,30.4330711364746,3.89472961425781, -2.10025668144226,30.606517791748,3.93692255020142,-6.30683612823486,24.863639831543,6.18582439422607,-6.11436796188354,23.6850185394287,6.04688310623169,-7.78097343444824,26.0277538299561,6.21321439743042,-9.29177093505859,29.477855682373,0.412787765264511,-2.07259583473206,30.3804836273193,4.01975345611572,-6.21463012695313,25.6692790985107,6.46301651000977,-7.55111742019653,30.3920917510986,6.39775085449219,-7.45050239562988,32.3329658508301,6.15083980560303,-7.27913808822632,35.1760787963867,5.55547094345093,-6.99305248260498,37.2315101623535,4.84737014770508,-6.91676378250122,37.2658882141113,4.76304244995117,-2.28811597824097,26.3853244781494,2.56221866607666,-2.23476219177246,26.3820266723633,2.68446254730225,-2.61036849021912,26.5165481567383,3.75161123275757,-2.90822100639343,26.7460823059082,4.73223924636841,-3.56000971794128,27.1050662994385,5.75402736663818,-4.27271509170532,27.3566989898682,6.4875373840332,-5.66520214080811,27.6100559234619,6.7059268951416,-5.7662296295166,27.5774803161621,6.57018709182739,-7.6766791343689,27.9425983428955,6.35362434387207,-7.80297374725342,27.9894924163818,6.4398775100708,-8.66915988922119,28.0921421051025,5.84028482437134,-9.87279415130615,26.798620223999,1.15454745292664,-9.99865055084229,26.792085647583,1.22897827625275,-10.1591415405273,26.8642349243164,2.07426524162292,-2.20996499061584,29.9731330871582,4.60764837265015,-2.10399508476257,30.5140609741211,4.07979536056519,-5.30119848251343,29.6463642120361,6.68332195281982,-4.92222452163696,31.0695972442627,6.47152519226074,-4.48160314559937,32.5191307067871,6.0656886100769,-4.14768695831299,34.1093292236328,5.51155948638916,-4.15120220184326,34.2035255432129,5.43701601028442,-1.98364222049713,27.8785266876221,2.93078923225403,-1.94235408306122,27.87815284729,3.06318759918213,-2.36977767944336,28.0997009277344,3.98143076896667,-2.63067173957825,28.2976512908936,4.7458701133728,-4.41857099533081,29.2386493682861,6.59666156768799,-7.56398439407349,30.5628261566162,6.71118402481079,-7.49685859680176,32.181510925293,6.48458242416382, -7.468101978302,32.5037994384766,6.4351601600647,-7.3045482635498,35.2156181335449,5.87828588485718,-6.73865842819214,32.2596702575684,6.63548994064331,-6.20531892776489,36.3156089782715,5.84047269821167,-7.05880689620972,37.1785850524902,5.21333408355713,-4.72433471679688,34.8476142883301,6.0802116394043,-6.41811656951904,34.4748916625977,6.24666404724121,-7.55984258651733,30.338529586792,6.73191165924072,-7.69254875183105,27.9261207580566,6.6812539100647,-7.82909297943115,26.0347461700439,6.52567291259766,-6.32481861114502,25.6593074798584,6.7205548286438,-7.95692873001099,25.1614246368408,6.27644300460815,-6.40386581420898,24.8511695861816,6.50110149383545,-5.83545446395874,27.5759601593018,6.88720178604126,-5.36732721328735,29.6078033447266,7.00625324249268,-4.96170663833618,31.019079208374,6.80995941162109,-5.2938666343689,29.7915210723877,6.99704647064209,-4.8523211479187,31.2468891143799,6.76324796676636,-4.41397762298584,32.6190986633301,6.37181329727173,-5.5450701713562,31.6847229003906,6.82576894760132,-5.13066625595093,33.2722244262695,6.48147821426392,-4.08279800415039,34.1065979003906,5.84938621520996,-8.26431655883789,35.4175186157227,0.438631266355515,-8.11979484558105,35.6021957397461,4.41319370269775,-8.47711849212646,32.8561134338379,5.23995113372803,-8.70630931854248,30.8051433563232,5.64721870422363,-8.90147686004639,28.0989265441895,5.80129289627075,-8.94633674621582,26.8793144226074,5.76223707199097,-8.9966287612915,26.0767917633057,5.69587278366089,-8.94582271575928,25.184455871582,5.4431848526001,-9.03204917907715,25.4176197052002,5.50921106338501,-9.29705619812012,25.0721836090088,5.14672422409058,-9.88245296478271,24.7685241699219,4.34585094451904,-10.1949939727783,24.4736366271973,3.25530242919922,-10.2092380523682,24.4950656890869,2.25282216072083,-10.2866735458374,24.5622482299805,2.40504479408264,-10.3208980560303,25.4584903717041,2.32878184318542,-10.2282390594482,26.8746757507324,2.19782257080078,-9.76998329162598,29.6250152587891,1.78370225429535,-8.92996597290039,33.1470336914063,1.12682414054871, -8.41434097290039,35.5315437316895,0.57951408624649,-8.01955699920654,36.6328430175781,0.68460077047348,-10.1855125427246,24.3762168884277,2.39254546165466,-4.88428688049316,27.5448017120361,6.62644290924072,-5.35536670684814,25.2809295654297,6.34503364562988,-2.41899251937866,31.5349407196045,4.39026832580566,-2.42222929000854,31.4518260955811,4.50084161758423,-2.70244908332825,30.6618022918701,5.13954162597656,-3.01469254493713,29.4937610626221,5.50692224502563,-3.18643069267273,28.6368103027344,5.63183641433716,-2.88213300704956,32.440502166748,4.80782842636108,-2.88537335395813,32.3740043640137,4.91404724121094,-3.25417995452881,31.2281646728516,5.60531949996948,-3.57900738716125,29.9968357086182,6.06741666793823,-3.84910750389099,29.0165786743164,6.32851791381836,-3.78587698936462,22.6147346496582,4.40958499908447,-4.40473413467407,23.2173252105713,5.3618688583374,-5.05243253707886,23.7748394012451,5.98046350479126,-5.15192556381226,23.9108238220215,6.03752183914185,-5.09901189804077,24.0283966064453,6.06259202957153,-4.98978471755981,24.8948726654053,6.22997379302979,-4.42884540557861,27.3927001953125,6.41243886947632,-3.99426865577698,29.0578422546387,6.27595472335815,-3.70775318145752,30.0652732849121,5.9921236038208,-3.36599230766296,31.2928047180176,5.52768707275391,-3.21600556373596,23.382287979126,3.66167640686035,-3.13256430625916,23.4489612579346,3.96262264251709,-2.60371732711792,26.5579433441162,3.99766564369202,-2.36950469017029,28.1366233825684,4.2071647644043,-2.27195620536804,28.888053894043,4.36787366867065,-2.10059666633606,29.8359222412109,4.44796895980835,-3.65240097045898,22.6352996826172,4.09371852874756,-3.45793771743774,22.3002586364746,3.45713114738464,-5.93335342407227,23.5488815307617,6.10497140884399,-3.43184065818787,31.3598518371582,5.57760047912598,-3.32914447784424,31.375696182251,5.48063993453979,-3.22046899795532,31.3329010009766,5.47011470794678,-2.69772386550903,30.7720069885254,4.98422145843506,-2.19492959976196,30.0498847961426,4.42499971389771,-8.23526859283447,35.5774803161621,4.07809209823608, -7.92610263824463,36.6413269042969,3.91050696372986,-8.87887573242188,32.999683380127,1.01147544384003,-8.57392024993896,32.4365539550781,-0.315257996320724,-8.39839649200439,32.313835144043,-0.395357549190521,-7.97919321060181,35.5220642089844,-0.356160432100296,-7.86904096603394,35.527904510498,-0.407945513725281,-1.97695231437683,29.7982711791992,3.62867569923401,-1.983323097229,29.7955074310303,3.76431751251221,-7.58679962158203,37.4158172607422,1.93770897388458,-7.68300867080688,37.3115768432617,1.93738102912903,-8.13943958282471,36.6269798278809,1.88212752342224,-8.5756254196167,35.5532608032227,1.8499995470047,-7.59529972076416,37.4961585998535,2.80867648124695,-7.67323303222656,37.3749008178711,2.84015107154846,-8.04368209838867,36.6341552734375,2.89631700515747,-8.44843769073486,35.5653686523438,2.96404600143433,-7.65189218521118,37.476619720459,0.7927166223526,-7.81682682037354,37.3234367370605,0.713629484176636,-7.95430898666382,36.6380043029785,0.543556153774261,-9.06007099151611,33.3199729919434,2.17655181884766,-8.49046039581299,34.5470542907715,4.30356645584106,-8.2700252532959,34.4476547241211,4.76078844070435,-8.10432147979736,34.3945121765137,4.835862159729,-10.2321319580078,26.9309692382813,2.76746225357056,-9.23867607116699,32.4755554199219,2.36720180511475,-9.01028919219971,33.5867919921875,3.4520092010498,-10.8878717422485,26.9042167663574,2.97664642333984,-11.0122699737549,26.9303855895996,3.1198832988739,-11.033429145813,26.9423446655273,3.3592324256897,-11.1435317993164,27.0207023620605,3.98125410079956,-11.048360824585,27.2650470733643,4.51753187179565,-10.8523368835449,27.507209777832,5.0268440246582,-10.5490579605103,27.7487545013428,5.500075340271,-10.4028263092041,27.7594146728516,5.7024450302124,-10.1423120498657,27.7449855804443,5.73791122436523,-6.21765995025635,31.8104839324951,6.43567132949829,-6.20972585678101,31.6967830657959,6.77317142486572,-6.41693687438965,30.1916389465332,6.91217041015625,-6.4039478302002,30.032678604126,6.60236120223999,-6.44509267807007,29.9831085205078,6.92495393753052, -6.80701875686646,27.7775402069092,6.78988933563232,-7.08851909637451,25.8666687011719,6.62717199325562,-7.16845560073853,25.0319118499756,6.39875030517578,-7.1069540977478,25.0596961975098,6.07496929168701,-7.04650259017944,25.1148319244385,5.67837047576904,-10.8846216201782,19.2333583831787,2.99382495880127,-10.8735446929932,18.8200950622559,3.42978501319885,-10.8541011810303,18.3279361724854,2.93692708015442,-10.8832063674927,18.8148536682129,2.53401899337769,-10.5200786590576,17.9692115783691,4.34590482711792,-10.4846277236938,17.3935279846191,3.72583603858948,-9.73058032989502,17.2792644500732,5.04154920578003,-8.62687110900879,16.9248275756836,5.41275405883789,-10.3979377746582,18.2120380401611,4.33148908615112,-10.7226848602295,19.0455799102783,3.37352299690247,-9.62259387969971,17.5917854309082,5.03659582138062,-8.54744338989258,17.1974773406982,5.40801620483398,-10.830249786377,19.4356498718262,2.91760802268982,-10.7492761611938,19.799617767334,2.88753604888916,-10.7113447189331,19.2958393096924,3.12222003936768,-10.6793050765991,19.3370323181152,3.71836709976196,-10.3031015396118,18.9596462249756,4.79261493682861,-9.37976932525635,18.4917240142822,5.57988595962524,-8.29885768890381,18.1507701873779,5.97931909561157,-10.5200023651123,20.1408176422119,4.01744413375854,-10.1408576965332,19.8712902069092,5.0645899772644,-9.1905345916748,19.5542163848877,5.89608812332153,-8.09999942779541,19.2621593475342,6.31005191802979,-10.6673736572266,20.3554096221924,2.97603225708008,-10.6598329544067,19.6969032287598,2.0004780292511,-10.7596883773804,19.3268871307373,2.08992290496826,-10.4535999298096,21.4124336242676,3.39937400817871,-10.2665662765503,21.9323348999023,3.11421298980713,-10.0877733230591,22.2021808624268,3.65796494483948,-10.3209276199341,21.613899230957,3.94974088668823,-9.45490837097168,22.599365234375,4.69469785690308,-9.74240303039551,21.900821685791,5.07761812210083,-8.51956844329834,22.74631690979,5.46489000320435,-8.80372142791748,21.9650821685791,5.91362905502319,-7.38228607177734,22.6113510131836,5.85867595672607, -7.64917707443237,21.797420501709,6.33266592025757,-9.71762371063232,21.6514225006104,4.97159385681152,-10.2602586746216,21.3834095001221,3.80861616134644,-8.81839847564697,21.6574687957764,5.79326295852661,-7.70153617858887,21.4740352630615,6.20392799377441,-10.3768091201782,21.0263004302979,3.39235901832581,-10.5269012451172,20.9093341827393,3.0945188999176,-10.4725208282471,21.2443161010742,3.25417709350586,-10.3247337341309,21.2503776550293,3.48597979545593,-9.9367561340332,20.8117370605469,5.13730812072754,-10.357063293457,20.9667377471924,4.0233039855957,-9.07955837249756,20.6500606536865,5.98157691955566,-7.97893238067627,20.4087715148926,6.39955759048462,-10.3478708267212,21.2740516662598,2.29400300979614,-10.3102588653564,21.5990142822266,2.51279091835022,-10.6137924194336,20.0307559967041,2.17805695533752,-10.5380973815918,20.4603633880615,2.3185830116272,-10.4403657913208,20.9075145721436,2.34123802185059,-10.5755195617676,19.6662559509277,3.11494088172913,-4.94140100479126,17.8739280700684,4.00129222869873,-4.97612380981445,17.4636917114258,3.53536009788513,-5.33359622955322,17.0651969909668,3.87273693084717,-5.26266002655029,17.5366821289063,4.38091611862183,-6.29105854034424,16.4343070983887,4.43670701980591,-6.21092700958252,16.9835529327393,5.07637119293213,-7.39537382125854,16.3496284484863,4.7204909324646,-7.39244985580444,16.7444496154785,5.43789577484131,-6.20721101760864,17.2534675598145,5.04187917709351,-5.27760076522827,17.8000946044922,4.29654598236084,-7.3501033782959,17.071985244751,5.42181491851807,-5.03394889831543,18.2387256622314,4.07053804397583,-4.78293418884277,18.4348983764648,3.89891910552979,-4.87793016433716,18.0741367340088,3.92661571502686,-5.10237407684326,18.0128650665283,4.07302713394165,-6.11509895324707,18.0017032623291,5.50254487991333,-5.29883909225464,18.1063289642334,4.63043785095215,-7.23719167709351,17.9726581573486,5.96456384658813,-5.95145320892334,18.9130210876465,5.77475690841675,-5.18693590164185,18.920955657959,4.92147922515869,-7.04634428024292,19.0347785949707,6.28103971481323, -4.6217041015625,18.9564056396484,4.13157510757446,-4.62470102310181,18.3164520263672,3.02352404594421,-4.7248101234436,17.9464931488037,3.11292791366577,-4.51037693023682,20.0530071258545,4.40684223175049,-4.71004295349121,20.3304882049561,4.90087223052979,-4.56726694107056,20.9394416809082,4.59377288818359,-4.35948419570923,20.5811710357666,4.11555480957031,-5.43325090408325,20.9151668548584,5.8080849647522,-5.26133918762207,21.6401462554932,5.40557098388672,-6.46559047698975,21.430269241333,6.30997800827026,-6.23515176773071,22.2238006591797,5.85213756561279,-5.52689790725708,20.6928539276123,5.68198585510254,-4.81517601013184,20.1379241943359,4.73164081573486,-6.54590797424316,21.1376686096191,6.1784839630127,-4.5201358795166,19.8827934265137,4.26319885253906,-4.56601285934448,19.5458679199219,4.10498094558716,-4.73723888397217,19.736328125,4.3483510017395,-4.71576499938965,19.9674053192139,4.4367880821228,-4.97689390182495,19.7361011505127,4.93532705307007,-5.74875497817993,19.8537902832031,5.84723806381226,-6.81026935577393,20.1309928894043,6.36625528335571,-4.31273984909058,19.8936004638672,3.31704807281494,-4.27538108825684,20.218620300293,3.53579592704773,-4.57782793045044,18.6501159667969,3.20124411582947,-4.50393390655518,19.0801334381104,3.34146690368652,-4.40440893173218,19.5268745422363,3.36442470550537,-10.8431606292725,18.7861003875732,2.44014716148376,-10.8136606216431,18.3081283569336,2.83754062652588,-10.4479379653931,17.3849391937256,3.61761784553528,-10.7177801132202,19.3129863739014,1.98497116565704,-10.6137723922729,19.7006969451904,1.89566814899445,-10.0405826568604,22.2164440155029,3.56492018699646,-10.2168340682983,21.952543258667,3.02945613861084,-9.41473770141602,22.6083793640137,4.58975505828857,-8.49272918701172,22.7543716430664,5.34907007217407,-7.37042284011841,22.621467590332,5.80231285095215,-10.2635154724121,21.6095638275146,2.41238903999329,-10.303807258606,21.2677593231201,2.18731999397278,-10.4946060180664,20.4584579467773,2.21803116798401,-10.568359375,20.0347576141357,2.07991313934326, -10.3974113464355,20.8989925384521,2.24075198173523,-5.01321506500244,17.4525814056396,3.42841100692749,-6.31224870681763,16.4389591217041,4.31868124008179,-7.50874900817871,16.3715438842773,4.59366989135742,-4.75371122360229,17.9487895965576,2.99597120285034,-4.64967203140259,18.3364906311035,2.90667319297791,-4.38688993453979,20.619026184082,4.01771926879883,-4.5924391746521,20.9702587127686,4.48846530914307,-5.2790470123291,21.6623973846436,5.2908182144165,-6.23852682113647,22.2387561798096,5.73119115829468,-4.29944610595703,20.2453670501709,3.42338895797729,-4.3397068977356,19.9035568237305,3.19832611083984,-4.6042652130127,18.6705570220947,3.09091997146606,-4.53046989440918,19.0942478179932,3.22904109954834,-4.43331813812256,19.5347919464111,3.25175809860229,-7.14405488967896,23.9239101409912,5.65244483947754,-7.72733306884766,24.1056079864502,5.47485208511353,-6.49145746231079,23.8214664459229,5.74526596069336,-6.57458209991455,23.7810745239258,5.88676261901855,-7.17207098007202,23.8744888305664,5.79700756072998,-6.33581447601318,22.3091201782227,5.86684417724609,-7.37212753295898,22.6595153808594,5.87273836135864,-8.39966011047363,22.7811946868896,5.51699161529541,-7.70609426498413,24.041223526001,5.63918304443359,-10.4553146362305,20.3231563568115,3.23345708847046,-4.8855938911438,18.9875259399414,4.20944452285767,-12.9825353622437,10.6990766525269,0.844066858291626,-9.8389253616333,9.49735069274902,3.17830562591553,-11.0604057312012,9.69466495513916,2.83606219291687,-12.2783145904541,10.1694393157959,2.32021045684814,-11.1309700012207,17.2452526092529,2.54634737968445,-6.70162296295166,9.45798778533936,2.01733946800232,-6.35541391372681,13.8766040802002,2.74241423606873,-10.977728843689,15.8941841125488,3.68716859817505,-10.7990818023682,16.9118976593018,3.76513743400574,-10.4266233444214,17.058614730835,3.71678614616394,-6.86694240570068,15.0654487609863,4.30618381500244,-6.77264976501465,16.0406074523926,4.2553129196167,-6.98142719268799,16.3520584106445,4.27755880355835,-7.20883512496948,14.8501043319702,4.19879293441772, -7.98394060134888,14.8931560516357,4.27120780944824,-7.44306898117065,13.9275770187378,4.12924718856812,-8.74346828460693,12.9331617355347,3.70751571655273,-9.87979412078857,12.9458312988281,3.54778790473938,-9.63815402984619,11.1837491989136,3.82065033912659,-10.0478620529175,13.1829557418823,3.4830207824707,-9.99559593200684,15.3371992111206,3.90790176391602,-10.7288208007813,15.5589847564697,3.66854119300842,-10.4732303619385,16.7847728729248,4.27841186523438,-10.7414121627808,16.6679668426514,3.98403811454773,-10.7801752090454,16.2029762268066,4.13446187973022,-10.5451440811157,16.0811061859131,4.50478982925415,-10.8121566772461,15.845027923584,3.79723620414734,-10.5918312072754,15.5369853973389,3.99283981323242,-9.8531322479248,16.5995903015137,4.68393802642822,-10.0126037597656,15.9286870956421,4.81835794448853,-9.79456615447998,16.833423614502,4.26952695846558,-10.0595607757568,15.3670091629028,4.39897203445435,-9.90972423553467,15.9085750579834,4.89311122894287,-9.76378726959229,16.6339874267578,4.74866676330566,-9.63790130615234,16.8885154724121,4.3174467086792,-10.073974609375,13.2618465423584,3.8615391254425,-10.0949974060059,13.3742513656616,4.06807279586792,-9.93121242523193,13.1100921630859,3.85573220252991,-9.93566513061523,13.3040990829468,4.16085386276245,-8.04547023773193,16.2815895080566,5.02835702896118,-7.9120717048645,16.4583759307861,4.65794610977173,-8.78007221221924,13.1069211959839,4.28314590454102,-8.10359859466553,15.5371837615967,5.12908601760864,-8.78834533691406,12.9926528930664,4.06723880767822,-7.94412708282471,16.2080841064453,4.99466705322266,-8.15055847167969,14.9756393432617,4.70975494384766,-7.21701669692993,16.1169757843018,4.808424949646,-6.93839693069458,15.8880319595337,4.60305595397949,-7.13570690155029,15.0910511016846,4.39565181732178,-7.50561809539795,14.9041223526001,4.49521207809448,-7.49339818954468,15.455249786377,5.00152015686035,-7.12892198562622,15.4541702270508,4.72877597808838,-11.960880279541,8.69771385192871,-0.577697277069092,-11.5644798278809,8.31119823455811,0.719232320785522, -9.98414611816406,7.77302694320679,2.08830571174622,-7.71604347229004,7.88915014266968,0.612167298793793,-7.12976217269897,8.13741683959961,-0.166500449180603,-5.55260038375854,13.8195657730103,2.01810598373413,-8.30417728424072,14.0667724609375,4.03354072570801,-8.42895317077637,14.1100664138794,4.42929649353027,-8.49184799194336,14.1423807144165,4.64357471466064,-9.92403411865234,14.4718418121338,4.48916864395142,-10.0594902038574,14.4750490188599,4.39139747619629,-10.0653839111328,14.5165367126465,4.18185234069824,-10.0170516967773,14.4528198242188,3.73347544670105,-10.6282987594604,14.4023456573486,3.52199649810791,-11.1519660949707,14.6864976882935,3.16790533065796,-6.0496187210083,16.210147857666,3.62929964065552,-5.52847290039063,16.432502746582,2.72674059867859,-5.1138014793396,16.7278308868408,1.33719766139984,-4.04904317855835,20.0559196472168,2.61531281471252,-2.9605450630188,24.8765544891357,1.97136247158051,-8.53282833099365,25.5782012939453,-0.167569786310196,-7.2937650680542,25.4874401092529,-1.2387101650238,-6.69637012481689,20.8182544708252,-0.437250256538391,-6.78883934020996,19.5983657836914,-0.931529581546783,-7.79493093490601,21.0932102203369,-0.550122499465942,-8.24923992156982,19.919095993042,-0.793532073497772,-9.85042095184326,21.1344356536865,1.4140750169754,-6.34611320495605,30.1234512329102,-2.03741860389709,-3.00656962394714,29.5073680877686,-1.64515149593353,-7.61297512054443,30.4295654296875,-1.03620731830597,-6.9022479057312,23.9386539459229,-0.779977381229401,-7.73476505279541,24.0522499084473,-0.513817012310028,-8.55404090881348,24.098482131958,-0.00429400010034442,-6.07827711105347,23.7995223999023,-0.819948017597198,-9.09116077423096,24.1179275512695,0.669364988803864,-8.82097244262695,21.1544666290283,-0.0337934046983719,-10.2090940475464,19.7163257598877,1.54994201660156,-4.55348634719849,20.4048652648926,0.333448827266693,-3.93064165115356,20.2453536987305,1.51111578941345,-9.47872734069824,19.8350925445557,-0.205843016505241,-4.6202917098999,19.166784286499,0.233948364853859, -4.28858947753906,18.9484272003174,1.52898347377777,-11.0581102371216,15.5564050674438,-2.05969452857971,-9.50326728820801,15.4665489196777,-3.09563803672791,-7.92887163162231,15.1350746154785,-3.01180362701416,-11.6202058792114,11.8649482727051,-3.26003575325012,-11.0205383300781,9.33058452606201,-3.03233504295349,-9.53904724121094,9.11799430847168,-3.27702498435974,-11.9436025619507,10.5540609359741,-3.18816900253296,-10.7425470352173,18.7471675872803,1.2680721282959,-8.49007797241211,11.4475383758545,-3.97062849998474,-5.36550998687744,17.0619297027588,3.7610821723938,-5.16892051696777,17.7754745483398,0.453923910856247,-5.31424140930176,17.0466690063477,0.200038015842438,-7.15298080444336,18.741907119751,-1.61566770076752,-7.37722444534302,17.8142032623291,-2.12625551223755,-9.97894859313965,18.9974765777588,-0.436901986598969,-10.341685295105,18.2764854431152,-0.9609055519104,-8.89304828643799,18.1247253417969,-2.02328205108643,-8.64704895019531,19.093147277832,-1.49808049201965,-13.1437149047852,9.83644771575928,-0.0898819267749786,-7.65170097351074,8.7472505569458,-2.73987889289856,-8.46947383880615,10.3621530532837,-4.15896272659302,-8.62954139709473,8.94725894927979,-3.22196006774902,-12.451057434082,9.42442798614502,1.84179270267487,-11.1691188812256,9.07114124298096,2.62692499160767,-9.90255355834961,8.8194408416748,2.72341012954712,-7.16649913787842,8.72556114196777,1.34422612190247,-5.3003306388855,17.4527645111084,2.83650398254395,-3.26730012893677,23.4545974731445,1.46349477767944,-8.75578308105469,16.6359462738037,4.55581665039063,-9.19984149932861,23.223331451416,0.919034540653229,-8.06709289550781,23.1356105804443,-0.251145720481873,-7.29653930664063,23.1012573242188,-0.328930914402008,-6.29547739028931,23.0096740722656,-0.55564147233963,-4.18616390228271,22.5705108642578,0.401069700717926,-3.58845591545105,22.4750595092773,1.47205495834351,-5.47275114059448,14.6036062240601,-0.850140690803528,-6.11708164215088,10.841118812561,-1.87295246124268,-6.24943923950195,9.87539100646973,-2.08078861236572, -7.33695316314697,8.59652614593506,-1.79107713699341,-5.08327388763428,17.59348487854,1.47210896015167,-4.16270542144775,20.8470230102539,2.31506681442261,-3.93086719512939,21.1655197143555,1.51504921913147,-4.44866847991943,21.3714351654053,0.426523655653,-6.53822183609009,21.7981338500977,-0.452313303947449,-7.59814071655273,22.0085067749023,-0.446690887212753,-8.50289535522461,22.029935836792,-0.0925770252943039,-9.50238704681396,22.0265922546387,1.2452974319458,-9.9237585067749,22.0253047943115,1.93845045566559,-10.0915231704712,22.1119232177734,2.2798593044281,-4.96741628646851,14.2409353256226,0.383612722158432,-5.56505680084229,10.3705987930298,-0.355221420526505,-5.70119285583496,9.17764377593994,-0.628493666648865,-12.0434112548828,15.1893663406372,1.87365484237671,-13.1068925857544,11.2270574569702,-0.273940622806549,-13.0960330963135,10.077766418457,-0.766599833965302,-11.8764390945435,9.0099458694458,-1.23530924320221,-11.2157173156738,17.9049034118652,1.06689035892487,-12.2845411300659,15.3625402450562,0.230948716402054,-8.41444396972656,9.42227172851563,2.86235332489014,-8.31547164916992,8.57957553863525,2.64106416702271,-8.73727798461914,7.74562072753906,1.61132657527924,-4.36162328720093,19.290943145752,2.58747148513794,-4.14960670471191,19.6016788482666,1.52699172496796,-4.56807804107666,19.7895317077637,0.255820155143738,-6.74493312835693,20.2061576843262,-0.660114347934723,-8.02211284637451,20.5025787353516,-0.674666404724121,-9.1498498916626,20.4374542236328,-0.119818203151226,-10.0297594070435,20.4253807067871,1.48200845718384,-4.66221380233765,18.1281929016113,2.47184419631958,-8.2876443862915,11.0393209457397,3.44339275360107,-6.68867588043213,11.1985206604004,2.32214212417603,-5.47720193862915,11.5189723968506,-0.246140405535698,-5.84426736831665,11.9166507720947,-1.67456555366516,-8.32313919067383,12.6680364608765,-3.58693480491638,-9.90711784362793,12.8571147918701,-3.5450963973999,-11.3485116958618,13.0391597747803,-2.74964785575867,-12.8485689163208,12.8292036056519,-0.356148988008499,-12.7300281524658,12.3465728759766,1.19345235824585, -11.7639751434326,11.9589366912842,2.69383668899536,-10.679515838623,11.5935859680176,3.43924808502197,-8.73316478729248,13.1642179489136,4.12282800674438,-9.32520866394043,12.4223680496216,3.61370396614075,-8.1046724319458,12.4125928878784,3.56111311912537,-8.73285865783691,13.2765378952026,4.34218788146973,-9.93310737609863,13.5609140396118,4.23305797576904,-10.0881977081299,13.585015296936,4.12997817993164,-10.072416305542,13.4894390106201,3.91964173316956,-4.44678640365601,18.7491111755371,2.5683581829071,-1.67838835716248,30.9184226989746,3.30307817459106,-1.89689028263092,29.7673435211182,3.16651940345764,-1.48467254638672,30.6766414642334,-0.48382967710495,-1.7151745557785,29.5061206817627,-0.388914227485657,-6.41028499603271,31.5402603149414,-2.31122922897339,-6.5544581413269,30.2641086578369,-2.10232305526733,-3.24189710617065,29.6542873382568,-1.98031175136566,-3.03120398521423,30.9302921295166,-2.10327386856079,-7.3973708152771,31.8299655914307,-1.48837494850159,-4.9675407409668,29.930456161499,-2.2727963924408,-4.79024934768677,31.2233638763428,-2.47925400733948,-9.770339012146,25.5654220581055,1.26073324680328,-9.85008811950684,24.02073097229,1.29150104522705,-9.17105197906494,25.6180114746094,0.238064646720886,-2.88398265838623,23.4223175048828,1.98747265338898,-2.61478137969971,24.807092666626,2.1091001033783,-2.56298756599426,24.7260589599609,1.49513530731201,-5.90561532974243,25.2055416107178,-1.69911050796509,-7.58888959884644,25.4344844818115,-1.33208465576172,-7.79577255249023,23.9981422424316,-0.78133100271225,-6.14341640472412,23.8105087280273,-1.14786982536316,-8.66501331329346,25.5624618530273,-0.423734158277512,-8.7342700958252,24.0813789367676,-0.242949396371841,-9.33136463165283,24.1186485290527,0.482575416564941,-8.29786491394043,32.2326049804688,-0.562160134315491,-8.68968200683594,30.9222812652588,-0.11330646276474,-7.68600034713745,30.5278968811035,-1.28661370277405,-2.92589402198792,23.4454593658447,1.46366250514984,-9.41505527496338,25.5495491027832,1.24658966064453,-4.78476047515869,29.7980289459229,-1.9929701089859, -5.70963573455811,25.2698745727539,-1.25907444953918,-4.05296611785889,24.9229850769043,-1.07812261581421,-1.94002258777618,29.5671463012695,2.09152460098267,-1.39111661911011,29.5243148803711,1.60391390323639,-1.16515398025513,30.6779403686523,1.79934179782867,-1.99050807952881,29.5482559204102,0.0322921723127365,-3.18263959884644,24.8409614562988,0.259835541248322,-3.07358360290527,24.7372646331787,-0.0272905211895704,-3.43370652198792,23.3883876800537,-0.0178845003247261,-3.67771339416504,23.4529304504395,0.146148890256882,-7.45057773590088,25.4977970123291,-1.47797501087189,-8.73250484466553,25.5885562896729,-0.433179765939713,-3.90392780303955,24.9208126068115,-1.19340264797211,-2.86472368240356,24.7657909393311,-0.011822797358036,-1.67441141605377,29.4105987548828,0.0618886798620224,-1.62392604351044,29.4356174468994,2.00085210800171,-1.67769014835358,29.4277153015137,-0.223505362868309,-2.7168333530426,29.4735317230225,-1.74457061290741,-6.49990940093994,30.0751152038574,-2.27876472473145,-7.80963659286499,30.3906288146973,-1.30389845371246,-6.38909339904785,30.0582504272461,-2.29767990112305,-4.85936498641968,29.7197151184082,-2.37516093254089,-4.67512845993042,29.6648483276367,-2.31193327903748,-2.94767832756042,29.4246482849121,-1.96411395072937,-7.28996992111206,25.404899597168,-1.47658205032349,-5.74078607559204,25.2103366851807,-1.61829805374146,-2.64102792739868,24.8287105560303,1.95682787895203,-2.86312246322632,24.7931175231934,0.245301082730293,-8.79531478881836,30.7474327087402,-0.181498900055885,-9.689621925354,25.6373138427734,1.0596616268158,-8.80739498138428,25.5922794342041,-0.354497760534287,-7.88753986358643,30.4436473846436,-1.22313511371613,-4.01765489578247,24.8804779052734,-1.40720963478088,-5.62358236312866,25.1768970489502,-1.58816146850586,-7.27921152114868,7.94315719604492,1.11295449733734,-8.45061302185059,7.78688621520996,2.35225319862366,-9.98027992248535,7.93115139007568,2.6541576385498,-11.047269821167,8.17732429504395,2.32532548904419,-12.2088813781738,8.54818725585938,1.43931353092194, -12.7967157363892,8.97920799255371,-0.303374022245407,-12.7254018783569,9.27799606323242,-1.02359855175018,-11.641375541687,9.70815277099609,-3.30064821243286,-8.47558498382568,9.39766216278076,-3.92700147628784,-6.57959508895874,8.94561100006104,-2.03293538093567,-6.16128015518188,8.42148208618164,-0.628806829452515,-5.90454864501953,11.2130336761475,1.26543307304382,-5.86439990997314,9.76661205291748,1.05129361152649,-6.4172043800354,8.82000827789307,0.554828345775604,-6.70876121520996,8.10266876220703,0.363239943981171,-11.5861968994141,9.22538471221924,-2.12491774559021,-12.200852394104,9.57963943481445,-2.46441507339478,-12.4662971496582,10.3750247955322,-2.37286257743835,-12.2984609603882,11.5450801849365,-1.93835651874542,-12.0142498016357,12.9365711212158,-1.61892592906952,-11.8456659317017,15.5341367721558,-1.05990767478943,-10.8601474761963,18.0437698364258,0.00694957328960299,-10.4829511642456,18.8434734344482,0.322913497686386,-9.9399585723877,19.8044834136963,0.532618045806885,-9.69186401367188,20.4600238800049,0.586481034755707,-9.4355001449585,21.1805152893066,0.577586591243744,-9.07950115203857,22.0507411956787,0.495223522186279,-8.69851875305176,23.1948986053467,0.245849296450615,-10.6943483352661,7.97740316390991,1.57557725906372,-13.0784387588501,3.61403799057007,-0.387950003147125,-12.8692493438721,4.23402261734009,-1.01961994171143,-13.2165336608887,2.53907871246338,-1.87767601013184,-13.5263395309448,2.08693170547485,-1.34906196594238,-12.6889476776123,3.79180359840393,-3.03223824501038,-12.6107130050659,5.16541290283203,-1.5162969827652,-7.36189794540405,2.22572088241577,-0.511403024196625,-7.24243593215942,1.49262166023254,-1.1971937417984,-7.38548421859741,2.73870873451233,-0.895566046237946,-10.3434047698975,5.47505474090576,1.90369594097137,-9.15979862213135,5.06887292861938,1.77098703384399,-10.1975927352905,6.29252099990845,1.84975600242615,-12.2415580749512,5.60246610641479,0.202421009540558,-12.090048789978,5.80620241165161,-0.00566900009289384,-12.0125188827515,5.61300611495972,-2.9149649143219, -12.4945268630981,5.89366149902344,-1.5122481584549,-12.288122177124,8.53469848632813,-0.661285996437073,-10.0408840179443,7.49992418289185,2.37230896949768,-10.8403167724609,7.73344993591309,1.77250003814697,-11.8306217193604,8.09218406677246,0.793708145618439,-12.4908933639526,4.76606798171997,0.651835978031158,-11.4628305435181,5.29583501815796,1.38202595710754,-11.2533559799194,6.22149276733398,1.20992994308472,-7.73828792572021,4.31135606765747,-0.0834570005536079,-7.36683702468872,5.3244800567627,-0.599408984184265,-7.6968674659729,5.50474500656128,0.0933770015835762,-8.26981353759766,3.98673677444458,1.2019350528717,-7.79680776596069,2.94683361053467,0.581601023674011,-7.7964768409729,3.48446178436279,0.153815001249313,-7.51640558242798,2.0345447063446,0.0756840035319328,-7.43048810958862,0.782142877578735,-0.238389015197754,-7.2607421875,0.956801772117615,-0.765235006809235,-6.80239152908325,7.91194725036621,-0.18758200109005,-7.47235488891602,7.62311172485352,0.697570025920868,-7.10959148406982,5.24039697647095,-1.22375595569611,-7.15163803100586,2.74867963790894,-1.48444199562073,-13.5382461547852,1.32446682453156,-2.14271998405457,-13.7687711715698,1.20945179462433,-1.80898201465607,-13.7865257263184,0.619542837142944,-1.92636489868164,-13.8336715698242,0.692019820213318,-1.84797203540802,-13.275411605835,1.67556774616241,-2.74921131134033,-7.40010452270508,0.384649813175201,-0.667990982532501,-7.50181102752686,0.383126795291901,-0.246661990880966,-7.4935622215271,0.295691817998886,-0.348820000886917,-12.5759296417236,3.31683683395386,-0.301581025123596,-13.0212831497192,1.85254681110382,-1.13734900951386,-12.1232957839966,3.64946269989014,-2.99026703834534,-9.45137023925781,4.73715019226074,1.26457500457764,-10.3113994598389,5.03661108016968,1.32882297039032,-11.0880308151245,4.88765811920166,1.00634694099426,-8.09423446655273,1.9600578546524,-0.0253519993275404,-7.59573745727539,2.73560667037964,-1.80734515190125,-7.79568910598755,1.32014381885529,-1.33666396141052,-8.01313209533691,0.81684684753418,-0.335142999887466, -13.0765466690063,0.547282814979553,-1.87284886837006,-13.2974462509155,1.06627893447876,-1.44371700286865,-13.384578704834,0.557447791099548,-1.44182395935059,-13.3176727294922,0.441362798213959,-1.55895602703094,-12.6973543167114,1.59488666057587,-2.65003705024719,-7.99213790893555,0.389781802892685,-0.759375989437103,-8.08319854736328,0.458545804023743,-0.323071002960205,-8.32713985443115,2.78943872451782,0.408313006162643,-11.4524984359741,5.48662090301514,-2.54562592506409,-11.9944133758545,4.41262006759644,0.512112021446228,-8.72068881988525,3.83208870887756,0.878419995307922,-7.89028644561768,4.91850280761719,-1.55553901195526,-8.07210922241211,0.331777811050415,-0.469390988349915,-13.578953742981,0.723118782043457,-2.18435406684875,-7.49672365188599,7.75520133972168,0.68902975320816,-6.83512830734253,8.03997993469238,-0.185473844408989,-7.51865577697754,7.76859617233276,0.681343555450439,-7.49779415130615,7.75494289398193,0.689776122570038,-10.035210609436,7.63272142410278,2.3439085483551,-10.8281936645508,7.86738109588623,1.75704264640808,-11.800537109375,8.24606800079346,0.791858673095703,-12.2553968429565,8.65648651123047,-0.652927100658417,-11.0982122421265,8.02239799499512,-3.42560195922852,-9.46175289154053,7.83151817321777,-3.76968502998352,-9.53649520874023,9.05328750610352,-3.69054698944092,-11.2665252685547,9.25102138519287,-3.36247611045837,-7.74278497695923,7.43448352813721,-2.94955992698669,-7.38186693191528,8.56259822845459,-3.01850891113281,-9.60508728027344,6.65043973922729,-3.84368181228638,-11.0673961639404,6.79414558410645,-3.49132299423218,-10.9090061187744,5.57353115081787,-3.57667922973633,-9.63772296905518,5.45862197875977,-3.88288307189941,-8.27865886688232,4.78107595443726,-0.436830013990402,-8.41143703460693,5.26224374771118,-3.16524219512939,-8.09701728820801,6.30043649673462,-3.07590699195862,-8.33622741699219,4.25156307220459,-0.654892027378082,-8.56227493286133,4.79242277145386,-0.544656991958618,-8.30243015289307,5.03695392608643,-2.40793538093567,-7.96504688262939,4.61126375198364,-2.47431945800781, -10.6739253997803,5.43777275085449,-3.33545923233032,-9.72132396697998,5.32747507095337,-3.48603796958923,-8.81702327728271,5.16764783859253,-2.94468188285828,-12.6551265716553,-1.1994891166687,-3.36292910575867,-12.6812009811401,-1.81898605823517,-3.45780301094055,-12.3639993667603,-1.8203901052475,-4.15120506286621,-12.3217802047729,-0.63344419002533,-4.16046380996704,-12.2639923095703,-0.401669174432755,8.50428581237793,-12.5707387924194,0.20113180577755,8.32594203948975,-10.8718614578247,0.0163587927818298,8.17275428771973,-10.9237976074219,-0.546308159828186,8.32784652709961,-14.7877540588379,-1.05375719070435,2.97234511375427,-14.9249362945557,-0.975921213626862,3.67831110954285,-14.9135770797729,-1.4562371969223,3.6388852596283,-14.836766242981,-1.48871624469757,3.06584906578064,-14.3331708908081,-1.00264811515808,1.14896094799042,-14.330602645874,-1.48213016986847,1.29319405555725,-13.8479719161987,-1.26087915897369,0.0456670001149178,-13.8695812225342,-0.733412146568298,0.03099500015378,-13.1961078643799,-0.682488203048706,-1.74533605575562,-13.2561845779419,-0.267994195222855,-1.52676200866699,-11.4108591079712,-0.704488158226013,-1.43015098571777,-12.3429641723633,-1.29646420478821,0.430689007043839,-11.3169937133789,-0.633855223655701,-5.43679094314575,-11.3333263397217,0.324207812547684,-5.34990787506104,-12.2897281646729,0.29148280620575,-4.15824413299561,-8.32677936553955,0.285849809646606,-4.91607284545898,-8.31762981414795,-0.635810136795044,-4.98647403717041,-7.6367335319519,-0.634946227073669,-3.36898493766785,-7.64520740509033,0.290466815233231,-3.37043809890747,-8.45136737823486,-0.397370189428329,-0.0700289979577065,-8.27342128753662,-0.602357149124146,-0.857776939868927,-8.65068626403809,-1.2792421579361,1.60765111446381,-8.70820045471191,-0.889460206031799,1.7451479434967,-8.64849853515625,-1.00339412689209,3.05018901824951,-8.62150001525879,-1.4825621843338,3.14198398590088,-9.57847595214844,-0.684286117553711,7.05243635177612,-9.74707221984863,-1.13764321804047,7.29845905303955,-9.13314819335938,-0.710844159126282,4.47330093383789, -8.91466617584229,-0.682887196540833,2.9658670425415,-8.77879047393799,-0.749664187431335,3.01093411445618,-8.95795822143555,-0.772237181663513,4.49947786331177,-8.83813381195068,-1.01499819755554,2.99324297904968,-8.99276161193848,-1.04494822025299,4.47025680541992,-9.83040523529053,-0.401700139045715,6.98186683654785,-9.82599067687988,-0.687571167945862,6.98602962493896,-10.9493865966797,-0.0893782079219818,7.89767122268677,-10.8741941452026,0.094377800822258,7.85318899154663,-10.0532426834106,-0.354868203401566,6.91146230697632,-10.897255897522,0.103166803717613,7.72143602371216,-14.7188110351563,-0.979119181632996,3.75472784042358,-14.6068019866943,-1.05330717563629,3.03254795074463,-14.5829191207886,-0.793511152267456,3.01690411567688,-14.697904586792,-0.660182237625122,3.76196217536926,-13.7142362594604,-0.10202220082283,7.11313772201538,-14.6809797286987,-0.7016361951828,5.42782211303711,-14.631495475769,-0.364508181810379,5.4440450668335,-13.6660346984863,0.0949728041887283,7.06012010574341,-14.3699359893799,-0.789545178413391,3.0537269115448,-14.5029563903809,-0.657171249389648,3.8249819278717,-14.4187536239624,-0.348812192678452,5.51281881332397,-13.6329202651978,0.0565158165991306,6.87230396270752,-14.1662549972534,-0.738821148872375,1.21650302410126,-14.1754846572876,-1.00521314144135,1.21228504180908,-13.6872749328613,-0.738984107971191,0.0732659995555878,-13.7096109390259,-0.471031188964844,0.033585999161005,-14.035943031311,-0.733028173446655,1.27240085601807,-13.4088859558105,-0.425395220518112,0.0608309991657734,-13.2755498886108,-0.115318208932877,-1.12270414829254,-13.0557823181152,-0.0804621875286102,-1.07290995121002,-13.068621635437,-0.272237211465836,-1.50460398197174,-12.1045236587524,0.593280792236328,-4.14091396331787,-12.1193447113037,0.299488812685013,-4.08871221542358,-11.7931108474731,0.634377837181091,-4.0986008644104,-11.2735862731934,0.719097793102264,-5.15583181381226,-11.0836772918701,0.714048802852631,-4.91463613510132,-11.2509965896606,0.347086817026138,-5.14843416213989,-9.70920753479004,0.712418794631958,-4.88926315307617, -9.66789436340332,0.723107814788818,-5.11510419845581,-8.42803859710693,0.688478827476501,-4.66739702224731,-8.63442325592041,0.710941791534424,-4.48368692398071,-9.70443153381348,0.322440803050995,-5.12207412719727,-8.41786479949951,0.301627814769745,-4.63700103759766,-8.54096221923828,1.32825684547424,-4.59067678451538,-8.0074405670166,1.22241985797882,-3.54224491119385,-8.04832363128662,3.33798861503601,-3.17081809043884,-8.67496490478516,3.68233776092529,-4.08474493026733,-7.8871545791626,0.281323790550232,-3.40791130065918,-7.85482978820801,0.642930805683136,-3.39109182357788,-8.13710689544678,0.850011765956879,-0.800619006156921,-8.28289604187012,2.25278782844543,-0.764258027076721,-8.43003940582275,-0.157711207866669,-0.858825087547302,-8.32692623138428,0.194879800081253,-0.860629975795746,-8.52881240844727,1.08460581302643,1.5599889755249,-8.53865146636963,1.25685679912567,0.95725691318512,-8.5357666015625,1.04977083206177,0.68256801366806,-8.56322479248047,0.566658794879913,1.55015695095062,-8.61183166503906,-0.425197243690491,-0.065311998128891,-8.89294719696045,-0.911311149597168,1.74111795425415,-8.79252433776855,-0.633555173873901,1.78056597709656,-8.5108757019043,-0.101994186639786,0.000698000018019229,-12.351466178894,0.262531816959381,7.76197957992554,-12.4312696456909,0.319948792457581,7.95019292831421,-12.4569158554077,0.0845468044281006,8.01053619384766,-13.8941841125488,0.467521786689758,3.5477340221405,-14.2799406051636,0.0541978180408478,3.53433966636658,-14.2880802154541,0.228603810071945,3.23221206665039,-13.9849233627319,0.619996786117554,3.28688502311707,-13.6181030273438,0.60854184627533,6.72478246688843,-14.4104146957397,0.390134811401367,5.51559019088745,-14.0933837890625,0.810905814170837,5.57533311843872,-13.5700387954712,0.956074774265289,6.39302587509155,-13.8625802993774,0.872631728649139,1.93436586856842,-13.1583271026611,1.43147194385529,2.3733389377594,-13.2172756195068,0.964958786964417,2.69189310073853,-13.7842702865601,0.587464809417725,2.18322610855103,-12.4318504333496,2.01933884620667,2.85682392120361, -12.5068588256836,1.38099682331085,3.19997715950012,-10.8144855499268,1.08549284934998,7.2902398109436,-12.2734613418579,1.22508585453033,7.33208894729614,-12.0701723098755,1.55995881557465,6.43063402175903,-10.6623516082764,1.37352383136749,6.64068698883057,-10.2347812652588,1.02646374702454,6.79868507385254,-9.9075870513916,0.466396808624268,6.90527582168579,-10.8436546325684,0.709422826766968,7.58692121505737,-9.14296531677246,0.764719843864441,4.57133388519287,-8.77550888061523,0.210297808051109,4.60690784454346,-9.33541011810303,1.13661181926727,5.08978414535522,-9.58052635192871,1.00581681728363,4.8911828994751,-9.13905906677246,1.31009376049042,4.46836519241333,-8.60823631286621,2.43657970428467,1.41375398635864,-9.29010486602783,2.85858273506165,1.81270503997803,-9.71137714385986,1.92487692832947,4.1512770652771,-10.0960521697998,3.6826000213623,1.92870700359344,-10.3535137176514,2.31923270225525,3.88383197784424,-11.0846672058105,3.66235661506653,1.6281658411026,-11.884204864502,3.3869047164917,1.2024530172348,-11.4515314102173,2.37581968307495,3.49674892425537,-12.5265493392944,2.84761667251587,0.686360001564026,-9.78671073913574,1.51062774658203,5.43640899658203,-10.3746118545532,1.4129958152771,4.93102598190308,-11.4895238876343,1.64424395561218,3.8477509021759,-12.6008195877075,2.62157368659973,-1.41014099121094,-12.6772747039795,2.34999775886536,-1.6421799659729,-11.6258430480957,3.59273362159729,-3.56614398956299,-11.6031827926636,3.99701476097107,-3.46526503562927,-12.4911642074585,2.62973380088806,-1.39286494255066,-11.5037336349487,4.0191216468811,-3.41252398490906,-11.6477117538452,4.7365288734436,-2.9123420715332,-10.6752662658691,5.05888700485229,-3.54006409645081,-10.7329788208008,4.73007202148438,-4.00870704650879,-10.6857452392578,4.2472767829895,-3.93189001083374,-9.69830322265625,4.9626088142395,-3.85036325454712,-8.79135131835938,4.77585315704346,-3.6133337020874,-9.78085136413574,4.31696367263794,-4.04107522964478,-8.89351463317871,4.26686573028564,-3.65700674057007,-8.9768648147583,4.52922391891479,-3.72932100296021, -9.71503639221191,4.64414882659912,-4.14905595779419,-8.40865230560303,3.99431371688843,-2.67772603034973,-8.20167064666748,4.30993890762329,-2.70235347747803,-8.29178237915039,3.96888780593872,-2.69999694824219,-8.25935554504395,3.6027410030365,-2.96513390541077,-8.38647270202637,2.6651337146759,-0.669996023178101,-10.858624458313,3.8950297832489,-4.24050617218018,-10.7416467666626,4.23215389251709,-4.03672790527344,-8.85915946960449,4.25843381881714,-3.7103579044342,-8.82767200469971,3.88678979873657,-3.7574679851532,-12.3203287124634,0.834373831748962,7.62035703659058,-9.93011093139648,3.94925880432129,-4.2280740737915,-9.87972068786621,4.26634979248047,-4.15164184570313,-12.9109563827515,2.17576670646667,-0.0332330018281937,-14.0064544677734,0.482846796512604,4.31903982162476,-14.3811511993408,0.0602388046681881,4.10731220245361,-13.4566841125488,0.878975749015808,4.61020994186401,-13.403115272522,1.2346738576889,5.79850912094116,-11.8692226409912,1.38857781887054,5.39097785949707,-10.4531908035278,1.27224385738373,5.82744979858398,-9.69781684875488,0.861148834228516,6.06470108032227,-9.44259929656982,0.973586857318878,5.75430202484131,-9.40438365936279,-0.639721155166626,5.52785587310791,-9.22590160369873,-0.697531223297119,5.58653020858765,-9.23768520355225,-0.931419134140015,5.58402299880981,-9.00774478912354,-0.931771218776703,5.6596360206604,-9.0374927520752,-1.4571191072464,5.59735012054443,-9.46249103546143,-1.257688164711,6.91396951675415,-13.292179107666,-1.68793714046478,5.62558317184448,-13.1693201065063,-1.85254228115082,4.26037883758545,-8.5069637298584,2.64702773094177,-0.68382602930069,-9.65490818023682,0.303108811378479,-5.39795684814453,-9.64590740203857,-0.636101245880127,-5.46976900100708,-13.3323211669922,0.870737791061401,0.106257990002632,-13.1983003616333,1.25750684738159,0.129934996366501,-14.1630382537842,0.0562498010694981,1.75165700912476,-11.8925170898438,1.22653579711914,-4.12294006347656,-11.7359161376953,3.29843640327454,-3.70321798324585,-12.968563079834,0.846431851387024,-1.85224604606628, -11.1305932998657,1.33086395263672,-5.03836584091187,-10.9273080825806,3.65749144554138,-4.48123788833618,-9.87257671356201,1.327556848526,-5.05620718002319,-9.91583061218262,3.76873588562012,-4.53192090988159,-8.98668956756592,-0.574045181274414,1.79792904853821,-8.65672206878662,-0.0279552042484283,-0.0313559994101524,-8.17943000793457,0.660911798477173,-3.50347018241882,-8.47450065612793,0.253890812397003,-0.846231997013092,-14.9321527481079,-0.684710144996643,5.33120679855347,-14.0031642913818,-0.023091197013855,7.31090211868286,-8.79455852508545,-1.03195118904114,4.34719085693359,-8.28165912628174,-0.135623186826706,-0.846274018287659,-9.4740161895752,0.293323814868927,6.17530202865601,-13.4723253250122,0.37716081738472,0.10164900124073,-8.48273468017578,0.658774793148041,0.337684005498886,-10.9609279632568,-1.51077425479889,7.06002187728882,-10.3187446594238,1.55065274238586,4.2269082069397,-9.59263896942139,3.9511775970459,-4.19415378570557,-9.63356876373291,4.28190660476685,-4.09221982955933,-13.0830707550049,1.09166383743286,4.85074090957642,-9.5009822845459,3.79010367393494,-4.45402717590332,-9.49314403533936,1.32746577262878,-4.98887491226196,-9.63443660736084,-1.82345807552338,-5.55305099487305,-9.14707946777344,-1.8240339756012,-5.37717390060425,-9.14474105834961,-1.13805913925171,-5.32897996902466,-10.1296558380127,-1.30436015129089,1.09980797767639,-9.15706825256348,-0.688938140869141,-1.10642194747925,-9.71644687652588,-0.692696213722229,-1.20543694496155,-11.7091445922852,-1.29876112937927,0.632021009922028,-10.6817436218262,-0.69933021068573,-1.29824805259705,-7.84287738800049,-1.89942610263824,-2.52330207824707,-8.77875328063965,-1.89924108982086,-2.67817401885986,-9.01303195953369,-1.89940023422241,-1.40217304229736,-8.07610702514648,-1.89954710006714,-1.25296998023987,-10.542236328125,-1.89899623394012,-2.25901699066162,-10.6337862014771,-1.89908516407013,-1.68281614780426,-9.75798606872559,-1.89925706386566,-1.52582097053528,-9.58230209350586,-1.8990843296051,-2.78612995147705,-8.86343860626221,-1.17721211910248,-2.69335007667542, -7.78657960891724,-1.1398001909256,-2.53283405303955,-9.17301654815674,-1.17705416679382,-3.33671307563782,-9.17317295074463,-1.82107496261597,-3.33675527572632,-10.0160961151123,-1.82078611850739,-4.27497577667236,-10.0307245254517,-1.17681121826172,-4.27237892150879,-8.3118782043457,-1.82325625419617,-5.07190084457397,-7.62548351287842,-1.82155406475067,-3.3740599155426,-8.46506309509277,-1.13791620731354,-5.08362579345703,-8.46026515960693,-1.82274115085602,-5.12706708908081,-11.4767608642578,-1.1769061088562,-3.52011871337891,-10.9006538391113,-1.23844015598297,-2.66865038871765,-11.4770784378052,-1.82114708423615,-3.52008390426636,-9.84247589111328,-1.1772221326828,-3.25193810462952,-9.96317100524902,-1.8214031457901,-3.27331566810608,-10.9190912246704,-1.82132935523987,-2.74039530754089,-10.428861618042,-1.1769951581955,-4.06018114089966,-10.4610366821289,-1.82123816013336,-4.06565284729004,-9.48378562927246,-1.17734205722809,-2.86669707298279,-10.6097259521484,-1.23897421360016,-2.20649099349976,-12.8990774154663,-1.20657515525818,-2.6168200969696,-13.1171998977661,-1.82286524772644,-2.07190489768982,-11.3591508865356,-1.82394111156464,-1.71986413002014,-11.2742357254028,-1.23886716365814,-2.35520100593567,-11.2741947174072,-1.82093739509583,-2.35528588294983,-11.9274044036865,-1.17659318447113,-3.287513256073,-11.9275131225586,-1.82061421871185,-3.28761601448059,-12.8821115493774,-1.82100307941437,-2.7364559173584,-11.2960643768311,-1.82078015804291,-5.52506399154663,-10.5416698455811,-1.17897522449493,-4.52999687194824,-10.5710735321045,-1.82089614868164,-4.57293176651001,-11.9882869720459,-1.82064211368561,-3.82067108154297,-11.9701585769653,-1.17954611778259,-3.78295111656189,-13.7229709625244,-1.85246515274048,4.07452917098999,-13.9891834259033,-1.68774104118347,5.40032720565796,-13.3896598815918,-1.89254415035248,2.17091298103333,-13.7069931030273,-1.89270734786987,3.45311307907104,-11.6803979873657,-1.17183661460876,6.71803712844849,-10.9550170898438,-1.17081785202026,6.93465709686279,-10.0661144256592,-1.52309918403625,3.26630568504334, -10.6154489517212,-1.52297914028168,3.08849000930786,-10.1624965667725,-1.52329015731812,4.62233781814575,-10.7236423492432,-1.30241513252258,6.45850467681885,-10.2997093200684,-1.48579919338226,5.18572616577148,-10.8345613479614,-1.48584806919098,5.01272392272949,-11.3562002182007,-1.30212819576263,6.27257680892944,-10.0881805419922,-1.51421213150024,2.65602207183838,-10.8880701065063,-1.30171120166779,0.885369002819061,-13.4678926467896,-1.15898716449738,6.16615104675293,-13.9943208694458,-1.15951919555664,5.99605989456177,-13.3655796051025,-1.30129718780518,5.60819101333618,-13.8941955566406,-1.30118119716644,5.4372501373291,-13.5430736541748,-1.52252817153931,3.4598650932312,-12.7836818695068,-1.5225031375885,2.36680197715759,-13.270396232605,-1.52238821983337,2.19731903076172,-12.9867782592773,-1.51305818557739,1.67463314533234,-10.7792692184448,-1.52316725254059,4.49874496459961,-13.0751523971558,-1.52264511585236,3.7069079875946,-13.1476764678955,-1.49484920501709,4.1362509727478,-10.7174825668335,-1.52064311504364,2.52428197860718,-12.4709463119507,-1.5205591917038,1.93447399139404,-13.6438522338867,-1.49474310874939,3.9940299987793,-12.8745965957642,-0.650946140289307,8.4034481048584,-13.9453248977661,-0.722079157829285,7.74784088134766,-13.9156303405762,-0.485151201486588,7.62993192672729,-12.8607053756714,-0.398309201002121,8.34536361694336,-13.4607906341553,-1.44669365882874,6.27358388900757,-11.708643913269,-1.46391832828522,6.78241014480591,-10.7793197631836,-1.82315039634705,4.49869823455811,-13.0701332092285,-1.82262897491455,3.70686101913452,-12.7837543487549,-1.82248628139496,2.36675405502319,-10.6154985427856,-1.82296216487885,3.08844399452209,-10.7160301208496,-1.82060623168945,2.52090001106262,-12.4723234176636,-1.8205281496048,1.93119895458221,-11.8795261383057,-1.81423282623291,1.03212344646454,-10.8229579925537,-1.80831921100616,1.30289947986603,-11.3640203475952,-1.61824405193329,6.26081991195679,-10.8520259857178,-1.78294909000397,5.05374383926392,-9.80314826965332,-1.43848013877869,7.41763782501221, -10.9754028320313,-0.861802220344543,8.42994117736816,-12.2961120605469,-0.648356199264526,8.61242866516113,-8.65401077270508,-1.82298004627228,3.72613310813904,-8.86539459228516,-1.82339334487915,5.04450702667236,-8.8872184753418,-1.48762512207031,5.0599570274353,-8.66806697845459,-1.48891818523407,3.69247674942017,-10.1625461578369,-1.82327306270599,4.62229013442993,-10.0661649703979,-1.82308197021484,3.26626110076904,-10.0813932418823,-1.82114517688751,2.65210604667664,-10.0750875473022,-1.81434404850006,1.47501397132874,-8.62293529510498,-1.80442404747009,2.03740906715393,-8.63533592224121,-1.81966722011566,3.12709999084473,-9.42062568664551,-1.61854815483093,6.85899353027344,-9.02965927124023,-1.78175115585327,5.64660120010376,-10.7314548492432,-1.61851632595062,6.44674682617188,-10.3171739578247,-1.78289532661438,5.22674703598022,-14.3864679336548,-0.906111121177673,7.10352420806885,-14.9273662567139,-1.45178020000458,5.79180288314819,-14.9044742584229,-1.14286315441132,5.70820713043213,-14.3360147476196,-0.648855209350586,7.0174560546875,-14.0326690673828,-1.44597220420837,6.05647897720337,-15.0419406890869,-1.61634719371796,5.06266784667969,-14.8922185897827,-1.7823361158371,3.67723703384399,-15.0164432525635,-1.25586915016174,5.13094186782837,-14.8399982452393,-1.82216322422028,3.04614806175232,-14.5743312835693,-1.8219473361969,1.77490186691284,-14.5593872070313,-1.48710322380066,1.7604968547821,-13.992299079895,-1.81486225128174,0.45016798377037,-14.2750339508057,-1.8190780878067,1.25383996963501,-12.6187791824341,-1.81137526035309,0.900829017162323,-13.035008430481,-1.82034909725189,1.6709531545639,-14.0747489929199,0.169742807745934,2.96360206604004,-14.34694480896,-0.806760251522064,2.41914296150208,-14.0129976272583,0.0151758203282952,1.98685896396637,-13.2320461273193,0.995352864265442,3.41252398490906,-13.8183240890503,0.575311779975891,3.10841703414917,-11.7101907730103,1.42806780338287,4.60914897918701,-12.8916282653809,1.14636778831482,4.1383581161499,-11.7699680328369,1.73828685283661,4.85970020294189, -9.52198696136475,1.08574879169464,4.41844892501831,-13.3160743713379,0.899752855300903,3.86537027359009,-13.3713436126709,1.15496385097504,4.15981292724609,-13.8948783874512,0.679575800895691,3.84310698509216,-12.9768419265747,1.39769685268402,4.42352294921875,-9.23659324645996,0.350918799638748,5.31175899505615,-9.15367317199707,0.277039796113968,5.81538581848145,-9.48372840881348,0.930315792560577,5.38133716583252,-14.5383815765381,-0.811367094516754,2.29166293144226,-14.5298585891724,-1.02179610729218,2.27179598808289,-14.6525802612305,-1.08479416370392,2.15895390510559,-13.2846403121948,1.05016481876373,3.67264294624329,-13.2940397262573,0.677316784858704,-0.52591997385025,-13.2968921661377,1.02870881557465,-0.218290001153946,-13.3114624023438,1.28549885749817,0.0937940031290054,-9.78981685638428,3.95010662078857,-4.1819109916687,-9.70335102081299,1.32425081729889,-4.92063999176025,-9.75296592712402,3.74058198928833,-4.40943193435669,-13.1841850280762,0.992721796035767,-0.190662994980812,-8.36301803588867,0.635875821113586,0.348857998847961,-8.41664695739746,1.24883985519409,0.968972980976105,-8.41362190246582,1.04680180549622,0.699701011180878,-7.68235921859741,-1.1401481628418,-3.09662795066834,-7.67167282104492,-1.82158994674683,-3.12445998191834,-13.410304069519,0.684789776802063,-0.563890993595123,-8.49754047393799,8.82586765289307,-3.57137799263,-8.56192398071289,7.63300037384033,-3.55192399024963,-8.88008213043213,6.491539478302,-3.68741536140442,-8.98423480987549,5.36043310165405,-3.71636414527893,-9.18995761871338,5.24069166183472,-3.38439154624939,-9.29192543029785,4.87892913818359,-3.74415731430054,-9.34595108032227,4.58668661117554,-3.93918871879578,-9.5681037902832,4.3049521446228,-3.94899106025696,-12.3848676681519,6.678795337677,-1.08676695823669,-12.0569562911987,6.41276931762695,0.186367496848106,-10.1192378997803,6.89622259140015,2.11103248596191,-7.58461141586304,6.56392812728882,0.395473510026932,-7.08461380004883,6.61821365356445,-0.39349552989006,-11.2925672531128,9.14094638824463,-3.39495158195496, -9.52544784545898,8.93857860565186,-3.73352289199829,-8.47273540496826,8.70798873901367,-3.6010115146637,-7.35740089416504,8.44426250457764,-3.02813529968262,-11.0158061981201,7.09106349945068,1.53347992897034,-11.9018383026123,7.38752317428589,0.497046887874603,-12.3512144088745,7.81623363494873,-0.921400249004364,-12.3507328033447,4.70240497589111,-2.97360157966614,-8.2618465423584,4.38370370864868,-1.30719125270844,-8.53772068023682,4.85830402374268,-1.03485834598541,-8.34664154052734,4.26936388015747,-1.26588129997253,-8.46986484527588,3.1554388999939,-1.43624365329742,-8.34628105163574,3.21852278709412,-1.53164660930634,-8.2733736038208,2.7988555431366,-1.6545318365097,-8.17590713500977,2.74774932861328,-1.86189317703247,-8.07227325439453,1.03621578216553,-2.17143201828003,-8.3486795425415,0.427448570728302,-1.97930431365967,-8.09087753295898,0.418905317783356,-2.12586092948914,-8.15859699249268,0.0618062913417816,-2.13336801528931,-7.8818793296814,0.132020547986031,-2.43179988861084,-7.8618049621582,-0.623425841331482,-2.48126220703125,-7.97514820098877,2.84113550186157,-0.698743879795074,-7.91939783096313,1.88133490085602,-0.698509812355042,-7.37556505203247,4.11418771743774,-0.738027811050415,-7.12800025939941,4.14944124221802,-1.3378928899765,-7.79018020629883,4.17661905288696,-1.64111828804016,-6.94105863571167,8.39327621459961,-1.99834716320038,-6.91890287399292,8.2821159362793,-2.00474405288696,-7.22366333007813,7.12326192855835,-1.87451314926147,-7.480544090271,5.81974315643311,-2.27981424331665,-7.95554208755493,5.07282066345215,-2.32199144363403,-12.2233734130859,8.90837287902832,-1.41941320896149,-12.2676200866699,8.78210067749023,-1.39806830883026,-12.2785034179688,7.96867084503174,-1.64899885654449,-12.2156171798706,6.74982690811157,-1.95364665985107,-12.2535228729248,5.75333404541016,-2.21360635757446,-12.4807224273682,4.93390893936157,-2.24494934082031,-12.7721185684204,3.99579477310181,-2.10383653640747,-8.63093948364258,7.60015678405762,1.80671334266663,-8.62113475799561,7.46664953231812,1.82989954948425, -8.63788414001465,6.70167589187622,1.52909469604492,-8.69423484802246,5.93398475646973,1.25737953186035,-8.65503120422363,4.89050817489624,1.31877195835114,-8.62190437316895,4.41484546661377,1.42706036567688,-9.01820659637451,4.20061016082764,1.03565382957459,-11.8353872299194,6.78268384933472,-2.71999740600586,-11.9059467315674,8.04110717773438,-2.52659678459167,-11.954478263855,9.0095157623291,-2.44830703735352,-11.9236574172974,9.11659240722656,-2.40354752540588,13.0784387588501,3.61403799057007,-0.387950003147125,12.8692493438721,4.23402261734009,-1.01961994171143,13.2165336608887,2.53907871246338,-1.87767601013184,13.5263395309448,2.08693170547485,-1.34906196594238,12.6889476776123,3.79180359840393,-3.03223824501038,12.6107130050659,5.16541290283203,-1.5162969827652,7.36189794540405,2.22572088241577,-0.511403024196625,7.24243593215942,1.49262166023254,-1.1971937417984,7.38548421859741,2.73870873451233,-0.895566046237946,10.3434047698975,5.47505474090576,1.90369594097137,9.15979862213135,5.06887292861938,1.77098703384399,10.1975927352905,6.29252099990845,1.84975600242615,12.2415580749512,5.60246610641479,0.202421009540558,12.090048789978,5.80620241165161,-0.00566900009289384,12.0125188827515,5.61300611495972,-2.9149649143219,12.4945268630981,5.89366149902344,-1.5122481584549,12.288122177124,8.53469848632813,-0.661285996437073,10.0408840179443,7.49992418289185,2.37230896949768,10.8403167724609,7.73344993591309,1.77250003814697,11.8306217193604,8.09218406677246,0.793708145618439,12.4908933639526,4.76606798171997,0.651835978031158,11.4628305435181,5.29583501815796,1.38202595710754,11.2533559799194,6.22149276733398,1.20992994308472,7.73828792572021,4.31135606765747,-0.0834570005536079,7.36683702468872,5.3244800567627,-0.599408984184265,7.6968674659729,5.50474500656128,0.0933770015835762,8.26981353759766,3.98673677444458,1.2019350528717,7.79680776596069,2.94683361053467,0.581601023674011,7.7964768409729,3.48446178436279,0.153815001249313,7.51640558242798,2.0345447063446,0.0756840035319328,7.43048810958862,0.782142877578735,-0.238389015197754, 7.2607421875,0.956801772117615,-0.765235006809235,6.80239152908325,7.91194725036621,-0.18758200109005,7.47235488891602,7.62311172485352,0.697570025920868,7.10959148406982,5.24039697647095,-1.22375595569611,7.15163803100586,2.74867963790894,-1.48444199562073,13.5382461547852,1.32446682453156,-2.14271998405457,13.7687711715698,1.20945179462433,-1.80898201465607,13.7865257263184,0.619542837142944,-1.92636489868164,13.8336715698242,0.692019820213318,-1.84797203540802,13.275411605835,1.67556774616241,-2.74921131134033,7.40010452270508,0.384649813175201,-0.667990982532501,7.50181102752686,0.383126795291901,-0.246661990880966,7.4935622215271,0.295691817998886,-0.348820000886917,12.5759296417236,3.31683683395386,-0.301581025123596,13.0212831497192,1.85254681110382,-1.13734900951386,12.1232957839966,3.64946269989014,-2.99026703834534,9.45137023925781,4.73715019226074,1.26457500457764,10.3113994598389,5.03661108016968,1.32882297039032,11.0880308151245,4.88765811920166,1.00634694099426,8.09423446655273,1.9600578546524,-0.0253519993275404,7.59573745727539,2.73560667037964,-1.80734515190125,7.79568910598755,1.32014381885529,-1.33666396141052,8.01313209533691,0.81684684753418,-0.335142999887466,13.0765466690063,0.547282814979553,-1.87284886837006,13.2974462509155,1.06627893447876,-1.44371700286865,13.384578704834,0.557447791099548,-1.44182395935059,13.3176727294922,0.441362798213959,-1.55895602703094,12.6973543167114,1.59488666057587,-2.65003705024719,7.99213790893555,0.389781802892685,-0.759375989437103,8.08319854736328,0.458545804023743,-0.323071002960205,8.32713985443115,2.78943872451782,0.408313006162643,11.4524984359741,5.48662090301514,-2.54562592506409,11.9944133758545,4.41262006759644,0.512112021446228,8.72068881988525,3.83208870887756,0.878419995307922,7.89028644561768,4.91850280761719,-1.55553901195526,8.07210922241211,0.331777811050415,-0.469390988349915,13.578953742981,0.723118782043457,-2.18435406684875,10.6943483352661,7.97740316390991,1.57557725906372,7.49672365188599,7.75520133972168,0.68902975320816,6.83512830734253,8.03997993469238,-0.185473844408989, 7.51865577697754,7.76859617233276,0.681343555450439,7.49779415130615,7.75494289398193,0.689776122570038,10.035210609436,7.63272142410278,2.3439085483551,10.8281936645508,7.86738109588623,1.75704264640808,11.800537109375,8.24606800079346,0.791858673095703,12.2553968429565,8.65648651123047,-0.652927100658417,11.0982122421265,8.02239799499512,-3.42560195922852,9.46175289154053,7.83151817321777,-3.76968502998352,9.53649520874023,9.05328750610352,-3.69054698944092,11.2665252685547,9.25102138519287,-3.36247611045837,7.74278497695923,7.43448352813721,-2.94955992698669,7.38186693191528,8.56259822845459,-3.01850891113281,9.60508728027344,6.65043973922729,-3.84368181228638,11.0673961639404,6.79414558410645,-3.49132299423218,10.9090061187744,5.57353115081787,-3.57667922973633,9.63772296905518,5.45862197875977,-3.88288307189941,8.27865886688232,4.78107595443726,-0.436830013990402,8.41143703460693,5.26224374771118,-3.16524219512939,8.09701728820801,6.30043649673462,-3.07590699195862,8.33622741699219,4.25156307220459,-0.654892027378082,8.56227493286133,4.79242277145386,-0.544656991958618,8.30243015289307,5.03695392608643,-2.40793538093567,7.96504688262939,4.61126375198364,-2.47431945800781,10.6739253997803,5.43777275085449,-3.33545923233032,9.72132396697998,5.32747507095337,-3.48603796958923,8.81702327728271,5.16764783859253,-2.94468188285828,12.6551265716553,-1.1994891166687,-3.36292910575867,12.6812009811401,-1.81898605823517,-3.45780301094055,12.3639993667603,-1.8203901052475,-4.15120506286621,12.3217802047729,-0.63344419002533,-4.16046380996704,12.2639923095703,-0.401669174432755,8.50428581237793,12.5707387924194,0.20113180577755,8.32594203948975,10.8718614578247,0.0163587927818298,8.17275428771973,10.9237976074219,-0.546308159828186,8.32784652709961,14.7877540588379,-1.05375719070435,2.97234511375427,14.9249362945557,-0.975921213626862,3.67831110954285,14.9135770797729,-1.4562371969223,3.6388852596283,14.836766242981,-1.48871624469757,3.06584906578064,14.3331708908081,-1.00264811515808,1.14896094799042,14.330602645874,-1.48213016986847,1.29319405555725, 13.8479719161987,-1.26087915897369,0.0456670001149178,13.8695812225342,-0.733412146568298,0.03099500015378,13.1961078643799,-0.682488203048706,-1.74533605575562,13.2561845779419,-0.267994195222855,-1.52676200866699,11.4108591079712,-0.704488158226013,-1.43015098571777,12.3429641723633,-1.29646420478821,0.430689007043839,11.3169937133789,-0.633855223655701,-5.43679094314575,11.3333263397217,0.324207812547684,-5.34990787506104,12.2897281646729,0.29148280620575,-4.15824413299561,8.32677936553955,0.285849809646606,-4.91607284545898,8.31762981414795,-0.635810136795044,-4.98647403717041,7.6367335319519,-0.634946227073669,-3.36898493766785,7.64520740509033,0.290466815233231,-3.37043809890747,8.45136737823486,-0.397370189428329,-0.0700289979577065,8.27342128753662,-0.602357149124146,-0.857776939868927,8.65068626403809,-1.2792421579361,1.60765111446381,8.70820045471191,-0.889460206031799,1.7451479434967,8.64849853515625,-1.00339412689209,3.05018901824951,8.62150001525879,-1.4825621843338,3.14198398590088,9.57847595214844,-0.684286117553711,7.05243635177612,9.74707221984863,-1.13764321804047,7.29845905303955,9.13314819335938,-0.710844159126282,4.47330093383789,8.91466617584229,-0.682887196540833,2.9658670425415,8.77879047393799,-0.749664187431335,3.01093411445618,8.95795822143555,-0.772237181663513,4.49947786331177,8.83813381195068,-1.01499819755554,2.99324297904968,8.99276161193848,-1.04494822025299,4.47025680541992,9.83040523529053,-0.401700139045715,6.98186683654785,9.82599067687988,-0.687571167945862,6.98602962493896,10.9493865966797,-0.0893782079219818,7.89767122268677,10.8741941452026,0.094377800822258,7.85318899154663,10.0532426834106,-0.354868203401566,6.91146230697632,10.897255897522,0.103166803717613,7.72143602371216,14.7188110351563,-0.979119181632996,3.75472784042358,14.6068019866943,-1.05330717563629,3.03254795074463,14.5829191207886,-0.793511152267456,3.01690411567688,14.697904586792,-0.660182237625122,3.76196217536926,13.7142362594604,-0.10202220082283,7.11313772201538,14.6809797286987,-0.7016361951828,5.42782211303711, 14.631495475769,-0.364508181810379,5.4440450668335,13.6660346984863,0.0949728041887283,7.06012010574341,14.3699359893799,-0.789545178413391,3.0537269115448,14.5029563903809,-0.657171249389648,3.8249819278717,14.4187536239624,-0.348812192678452,5.51281881332397,13.6329202651978,0.0565158165991306,6.87230396270752,14.1662549972534,-0.738821148872375,1.21650302410126,14.1754846572876,-1.00521314144135,1.21228504180908,13.6872749328613,-0.738984107971191,0.0732659995555878,13.7096109390259,-0.471031188964844,0.033585999161005,14.035943031311,-0.733028173446655,1.27240085601807,13.4088859558105,-0.425395220518112,0.0608309991657734,13.2755498886108,-0.115318208932877,-1.12270414829254,13.0557823181152,-0.0804621875286102,-1.07290995121002,13.068621635437,-0.272237211465836,-1.50460398197174,12.1045236587524,0.593280792236328,-4.14091396331787,12.1193447113037,0.299488812685013,-4.08871221542358,11.7931108474731,0.634377837181091,-4.0986008644104,11.2735862731934,0.719097793102264,-5.15583181381226,11.0836772918701,0.714048802852631,-4.91463613510132,11.2509965896606,0.347086817026138,-5.14843416213989,9.70920753479004,0.712418794631958,-4.88926315307617,9.66789436340332,0.723107814788818,-5.11510419845581,8.42803859710693,0.688478827476501,-4.66739702224731,8.63442325592041,0.710941791534424,-4.48368692398071,9.70443153381348,0.322440803050995,-5.12207412719727,8.41786479949951,0.301627814769745,-4.63700103759766,8.54096221923828,1.32825684547424,-4.59067678451538,8.0074405670166,1.22241985797882,-3.54224491119385,8.04832363128662,3.33798861503601,-3.17081809043884,8.67496490478516,3.68233776092529,-4.08474493026733,7.8871545791626,0.281323790550232,-3.40791130065918,7.85482978820801,0.642930805683136,-3.39109182357788,8.13710689544678,0.850011765956879,-0.800619006156921,8.28289604187012,2.25278782844543,-0.764258027076721,8.43003940582275,-0.157711207866669,-0.858825087547302,8.32692623138428,0.194879800081253,-0.860629975795746,8.52881240844727,1.08460581302643,1.5599889755249,8.53865146636963,1.25685679912567,0.95725691318512, 8.5357666015625,1.04977083206177,0.68256801366806,8.56322479248047,0.566658794879913,1.55015695095062,8.61183166503906,-0.425197243690491,-0.065311998128891,8.89294719696045,-0.911311149597168,1.74111795425415,8.79252433776855,-0.633555173873901,1.78056597709656,8.5108757019043,-0.101994186639786,0.000698000018019229,12.351466178894,0.262531816959381,7.76197957992554,12.4312696456909,0.319948792457581,7.95019292831421,12.4569158554077,0.0845468044281006,8.01053619384766,13.8941841125488,0.467521786689758,3.5477340221405,14.2799406051636,0.0541978180408478,3.53433966636658,14.2880802154541,0.228603810071945,3.23221206665039,13.9849233627319,0.619996786117554,3.28688502311707,13.6181030273438,0.60854184627533,6.72478246688843,14.4104146957397,0.390134811401367,5.51559019088745,14.0933837890625,0.810905814170837,5.57533311843872,13.5700387954712,0.956074774265289,6.39302587509155,13.8625802993774,0.872631728649139,1.93436586856842,13.1583271026611,1.43147194385529,2.3733389377594,13.2172756195068,0.964958786964417,2.69189310073853,13.7842702865601,0.587464809417725,2.18322610855103,12.4318504333496,2.01933884620667,2.85682392120361,12.5068588256836,1.38099682331085,3.19997715950012,10.8144855499268,1.08549284934998,7.2902398109436,12.2734613418579,1.22508585453033,7.33208894729614,12.0701723098755,1.55995881557465,6.43063402175903,10.6623516082764,1.37352383136749,6.64068698883057,10.2347812652588,1.02646374702454,6.79868507385254,9.9075870513916,0.466396808624268,6.90527582168579,10.8436546325684,0.709422826766968,7.58692121505737,9.14296531677246,0.764719843864441,4.57133388519287,8.77550888061523,0.210297808051109,4.60690784454346,9.33541011810303,1.13661181926727,5.08978414535522,9.58052635192871,1.00581681728363,4.8911828994751,9.13905906677246,1.31009376049042,4.46836519241333,8.60823631286621,2.43657970428467,1.41375398635864,9.29010486602783,2.85858273506165,1.81270503997803,9.71137714385986,1.92487692832947,4.1512770652771,10.0960521697998,3.6826000213623,1.92870700359344,10.3535137176514,2.31923270225525,3.88383197784424, 11.0846672058105,3.66235661506653,1.6281658411026,11.884204864502,3.3869047164917,1.2024530172348,11.4515314102173,2.37581968307495,3.49674892425537,12.5265493392944,2.84761667251587,0.686360001564026,9.78671073913574,1.51062774658203,5.43640899658203,10.3746118545532,1.4129958152771,4.93102598190308,11.4895238876343,1.64424395561218,3.8477509021759,12.6008195877075,2.62157368659973,-1.41014099121094,12.6772747039795,2.34999775886536,-1.6421799659729,11.6258430480957,3.59273362159729,-3.56614398956299,11.6031827926636,3.99701476097107,-3.46526503562927,12.4911642074585,2.62973380088806,-1.39286494255066,11.5037336349487,4.0191216468811,-3.41252398490906,11.6477117538452,4.7365288734436,-2.9123420715332,10.6752662658691,5.05888700485229,-3.54006409645081,10.7329788208008,4.73007202148438,-4.00870704650879,10.6857452392578,4.2472767829895,-3.93189001083374,9.69830322265625,4.9626088142395,-3.85036325454712,8.79135131835938,4.77585315704346,-3.6133337020874,9.78085136413574,4.31696367263794,-4.04107522964478,8.89351463317871,4.26686573028564,-3.65700674057007,8.9768648147583,4.52922391891479,-3.72932100296021,9.71503639221191,4.64414882659912,-4.14905595779419,8.40865230560303,3.99431371688843,-2.67772603034973,8.20167064666748,4.30993890762329,-2.70235347747803,8.29178237915039,3.96888780593872,-2.69999694824219,8.25935554504395,3.6027410030365,-2.96513390541077,8.38647270202637,2.6651337146759,-0.669996023178101,10.858624458313,3.8950297832489,-4.24050617218018,10.7416467666626,4.23215389251709,-4.03672790527344,8.85915946960449,4.25843381881714,-3.7103579044342,8.82767200469971,3.88678979873657,-3.7574679851532,12.3203287124634,0.834373831748962,7.62035703659058,9.93011093139648,3.94925880432129,-4.2280740737915,9.87972068786621,4.26634979248047,-4.15164184570313,12.9109563827515,2.17576670646667,-0.0332330018281937,14.0064544677734,0.482846796512604,4.31903982162476,14.3811511993408,0.0602388046681881,4.10731220245361,13.4566841125488,0.878975749015808,4.61020994186401,13.403115272522,1.2346738576889,5.79850912094116, 11.8692226409912,1.38857781887054,5.39097785949707,10.4531908035278,1.27224385738373,5.82744979858398,9.69781684875488,0.861148834228516,6.06470108032227,9.44259929656982,0.973586857318878,5.75430202484131,9.40438365936279,-0.639721155166626,5.52785587310791,9.22590160369873,-0.697531223297119,5.58653020858765,9.23768520355225,-0.931419134140015,5.58402299880981,9.00774478912354,-0.931771218776703,5.6596360206604,9.0374927520752,-1.4571191072464,5.59735012054443,9.46249103546143,-1.257688164711,6.91396951675415,13.292179107666,-1.68793714046478,5.62558317184448,13.1693201065063,-1.85254228115082,4.26037883758545,8.5069637298584,2.64702773094177,-0.68382602930069,9.65490818023682,0.303108811378479,-5.39795684814453,9.64590740203857,-0.636101245880127,-5.46976900100708,13.3323211669922,0.870737791061401,0.106257990002632,13.1983003616333,1.25750684738159,0.129934996366501,14.1630382537842,0.0562498010694981,1.75165700912476,11.8925170898438,1.22653579711914,-4.12294006347656,11.7359161376953,3.29843640327454,-3.70321798324585,12.968563079834,0.846431851387024,-1.85224604606628,11.1305932998657,1.33086395263672,-5.03836584091187,10.9273080825806,3.65749144554138,-4.48123788833618,9.87257671356201,1.327556848526,-5.05620718002319,9.91583061218262,3.76873588562012,-4.53192090988159,8.98668956756592,-0.574045181274414,1.79792904853821,8.65672206878662,-0.0279552042484283,-0.0313559994101524,8.17943000793457,0.660911798477173,-3.50347018241882,8.47450065612793,0.253890812397003,-0.846231997013092,14.9321527481079,-0.684710144996643,5.33120679855347,14.0031642913818,-0.023091197013855,7.31090211868286,8.79455852508545,-1.03195118904114,4.34719085693359,8.28165912628174,-0.135623186826706,-0.846274018287659,9.4740161895752,0.293323814868927,6.17530202865601,13.4723253250122,0.37716081738472,0.10164900124073,8.48273468017578,0.658774793148041,0.337684005498886,10.9609279632568,-1.51077425479889,7.06002187728882,10.3187446594238,1.55065274238586,4.2269082069397,9.59263896942139,3.9511775970459,-4.19415378570557,9.63356876373291,4.28190660476685,-4.09221982955933, 13.0830707550049,1.09166383743286,4.85074090957642,9.5009822845459,3.79010367393494,-4.45402717590332,9.49314403533936,1.32746577262878,-4.98887491226196,9.63443660736084,-1.82345807552338,-5.55305099487305,9.14707946777344,-1.8240339756012,-5.37717390060425,9.14474105834961,-1.13805913925171,-5.32897996902466,10.1296558380127,-1.30436015129089,1.09980797767639,9.15706825256348,-0.688938140869141,-1.10642194747925,9.71644687652588,-0.692696213722229,-1.20543694496155,11.7091445922852,-1.29876112937927,0.632021009922028,10.6817436218262,-0.69933021068573,-1.29824805259705,7.84287738800049,-1.89942610263824,-2.52330207824707,8.77875328063965,-1.89924108982086,-2.67817401885986,9.01303195953369,-1.89940023422241,-1.40217304229736,8.07610702514648,-1.89954710006714,-1.25296998023987,10.542236328125,-1.89899623394012,-2.25901699066162,10.6337862014771,-1.89908516407013,-1.68281614780426,9.75798606872559,-1.89925706386566,-1.52582097053528,9.58230209350586,-1.8990843296051,-2.78612995147705,8.86343860626221,-1.17721211910248,-2.69335007667542,7.78657960891724,-1.1398001909256,-2.53283405303955,9.17301654815674,-1.17705416679382,-3.33671307563782,9.17317295074463,-1.82107496261597,-3.33675527572632,10.0160961151123,-1.82078611850739,-4.27497577667236,10.0307245254517,-1.17681121826172,-4.27237892150879,8.3118782043457,-1.82325625419617,-5.07190084457397,7.62548351287842,-1.82155406475067,-3.3740599155426,8.46506309509277,-1.13791620731354,-5.08362579345703,8.46026515960693,-1.82274115085602,-5.12706708908081,11.4767608642578,-1.1769061088562,-3.52011871337891,10.9006538391113,-1.23844015598297,-2.66865038871765,11.4770784378052,-1.82114708423615,-3.52008390426636,9.84247589111328,-1.1772221326828,-3.25193810462952,9.96317100524902,-1.8214031457901,-3.27331566810608,10.9190912246704,-1.82132935523987,-2.74039530754089,10.428861618042,-1.1769951581955,-4.06018114089966,10.4610366821289,-1.82123816013336,-4.06565284729004,9.48378562927246,-1.17734205722809,-2.86669707298279,10.6097259521484,-1.23897421360016,-2.20649099349976, 12.8990774154663,-1.20657515525818,-2.6168200969696,13.1171998977661,-1.82286524772644,-2.07190489768982,11.3591508865356,-1.82394111156464,-1.71986413002014,11.2742357254028,-1.23886716365814,-2.35520100593567,11.2741947174072,-1.82093739509583,-2.35528588294983,11.9274044036865,-1.17659318447113,-3.287513256073,11.9275131225586,-1.82061421871185,-3.28761601448059,12.8821115493774,-1.82100307941437,-2.7364559173584,11.2960643768311,-1.82078015804291,-5.52506399154663,10.5416698455811,-1.17897522449493,-4.52999687194824,10.5710735321045,-1.82089614868164,-4.57293176651001,11.9882869720459,-1.82064211368561,-3.82067108154297,11.9701585769653,-1.17954611778259,-3.78295111656189,13.7229709625244,-1.85246515274048,4.07452917098999,13.9891834259033,-1.68774104118347,5.40032720565796,13.3896598815918,-1.89254415035248,2.17091298103333,13.7069931030273,-1.89270734786987,3.45311307907104,11.6803979873657,-1.17183661460876,6.71803712844849,10.9550170898438,-1.17081785202026,6.93465709686279,10.0661144256592,-1.52309918403625,3.26630568504334,10.6154489517212,-1.52297914028168,3.08849000930786,10.1624965667725,-1.52329015731812,4.62233781814575,10.7236423492432,-1.30241513252258,6.45850467681885,10.2997093200684,-1.48579919338226,5.18572616577148,10.8345613479614,-1.48584806919098,5.01272392272949,11.3562002182007,-1.30212819576263,6.27257680892944,10.0881805419922,-1.51421213150024,2.65602207183838,10.8880701065063,-1.30171120166779,0.885369002819061,13.4678926467896,-1.15898716449738,6.16615104675293,13.9943208694458,-1.15951919555664,5.99605989456177,13.3655796051025,-1.30129718780518,5.60819101333618,13.8941955566406,-1.30118119716644,5.4372501373291,13.5430736541748,-1.52252817153931,3.4598650932312,12.7836818695068,-1.5225031375885,2.36680197715759,13.270396232605,-1.52238821983337,2.19731903076172,12.9867782592773,-1.51305818557739,1.67463314533234,10.7792692184448,-1.52316725254059,4.49874496459961,13.0751523971558,-1.52264511585236,3.7069079875946,13.1476764678955,-1.49484920501709,4.1362509727478,10.7174825668335,-1.52064311504364,2.52428197860718, 12.4709463119507,-1.5205591917038,1.93447399139404,13.6438522338867,-1.49474310874939,3.9940299987793,12.8745965957642,-0.650946140289307,8.4034481048584,13.9453248977661,-0.722079157829285,7.74784088134766,13.9156303405762,-0.485151201486588,7.62993192672729,12.8607053756714,-0.398309201002121,8.34536361694336,13.4607906341553,-1.44669365882874,6.27358388900757,11.708643913269,-1.46391832828522,6.78241014480591,10.7793197631836,-1.82315039634705,4.49869823455811,13.0701332092285,-1.82262897491455,3.70686101913452,12.7837543487549,-1.82248628139496,2.36675405502319,10.6154985427856,-1.82296216487885,3.08844399452209,10.7160301208496,-1.82060623168945,2.52090001106262,12.4723234176636,-1.8205281496048,1.93119895458221,11.8795261383057,-1.81423282623291,1.03212344646454,10.8229579925537,-1.80831921100616,1.30289947986603,11.3640203475952,-1.61824405193329,6.26081991195679,10.8520259857178,-1.78294909000397,5.05374383926392,9.80314826965332,-1.43848013877869,7.41763782501221,10.9754028320313,-0.861802220344543,8.42994117736816,12.2961120605469,-0.648356199264526,8.61242866516113,8.65401077270508,-1.82298004627228,3.72613310813904,8.86539459228516,-1.82339334487915,5.04450702667236,8.8872184753418,-1.48762512207031,5.0599570274353,8.66806697845459,-1.48891818523407,3.69247674942017,10.1625461578369,-1.82327306270599,4.62229013442993,10.0661649703979,-1.82308197021484,3.26626110076904,10.0813932418823,-1.82114517688751,2.65210604667664,10.0750875473022,-1.81434404850006,1.47501397132874,8.62293529510498,-1.80442404747009,2.03740906715393,8.63533592224121,-1.81966722011566,3.12709999084473,9.42062568664551,-1.61854815483093,6.85899353027344,9.02965927124023,-1.78175115585327,5.64660120010376,10.7314548492432,-1.61851632595062,6.44674682617188,10.3171739578247,-1.78289532661438,5.22674703598022,14.3864679336548,-0.906111121177673,7.10352420806885,14.9273662567139,-1.45178020000458,5.79180288314819,14.9044742584229,-1.14286315441132,5.70820713043213,14.3360147476196,-0.648855209350586,7.0174560546875,14.0326690673828,-1.44597220420837,6.05647897720337, 15.0419406890869,-1.61634719371796,5.06266784667969,14.8922185897827,-1.7823361158371,3.67723703384399,15.0164432525635,-1.25586915016174,5.13094186782837,14.8399982452393,-1.82216322422028,3.04614806175232,14.5743312835693,-1.8219473361969,1.77490186691284,14.5593872070313,-1.48710322380066,1.7604968547821,13.992299079895,-1.81486225128174,0.45016798377037,14.2750339508057,-1.8190780878067,1.25383996963501,12.6187791824341,-1.81137526035309,0.900829017162323,13.035008430481,-1.82034909725189,1.6709531545639,14.0747489929199,0.169742807745934,2.96360206604004,14.34694480896,-0.806760251522064,2.41914296150208,14.0129976272583,0.0151758203282952,1.98685896396637,13.2320461273193,0.995352864265442,3.41252398490906,13.8183240890503,0.575311779975891,3.10841703414917,11.7101907730103,1.42806780338287,4.60914897918701,12.8916282653809,1.14636778831482,4.1383581161499,11.7699680328369,1.73828685283661,4.85970020294189,9.52198696136475,1.08574879169464,4.41844892501831,13.3160743713379,0.899752855300903,3.86537027359009,13.3713436126709,1.15496385097504,4.15981292724609,13.8948783874512,0.679575800895691,3.84310698509216,12.9768419265747,1.39769685268402,4.42352294921875,9.23659324645996,0.350918799638748,5.31175899505615,9.15367317199707,0.277039796113968,5.81538581848145,9.48372840881348,0.930315792560577,5.38133716583252,14.5383815765381,-0.811367094516754,2.29166293144226,14.5298585891724,-1.02179610729218,2.27179598808289,14.6525802612305,-1.08479416370392,2.15895390510559,13.2846403121948,1.05016481876373,3.67264294624329,13.2940397262573,0.677316784858704,-0.52591997385025,13.2968921661377,1.02870881557465,-0.218290001153946,13.3114624023438,1.28549885749817,0.0937940031290054,9.78981685638428,3.95010662078857,-4.1819109916687,9.70335102081299,1.32425081729889,-4.92063999176025,9.75296592712402,3.74058198928833,-4.40943193435669,13.1841850280762,0.992721796035767,-0.190662994980812,8.36301803588867,0.635875821113586,0.348857998847961,8.41664695739746,1.24883985519409,0.968972980976105,8.41362190246582,1.04680180549622,0.699701011180878, 7.68235921859741,-1.1401481628418,-3.09662795066834,7.67167282104492,-1.82158994674683,-3.12445998191834,13.410304069519,0.684789776802063,-0.563890993595123,8.49754047393799,8.82586765289307,-3.57137799263,8.56192398071289,7.63300037384033,-3.55192399024963,8.88008213043213,6.491539478302,-3.68741536140442,8.98423480987549,5.36043310165405,-3.71636414527893,9.18995761871338,5.24069166183472,-3.38439154624939,9.29192543029785,4.87892913818359,-3.74415731430054,9.34595108032227,4.58668661117554,-3.93918871879578,9.5681037902832,4.3049521446228,-3.94899106025696,12.3848676681519,6.678795337677,-1.08676695823669,12.0569562911987,6.41276931762695,0.186367496848106,10.1192378997803,6.89622259140015,2.11103248596191,7.58461141586304,6.56392812728882,0.395473510026932,7.08461380004883,6.61821365356445,-0.39349552989006,11.2925672531128,9.14094638824463,-3.39495158195496,9.52544784545898,8.93857860565186,-3.73352289199829,8.47273540496826,8.70798873901367,-3.6010115146637,7.35740089416504,8.44426250457764,-3.02813529968262,11.0158061981201,7.09106349945068,1.53347992897034,11.9018383026123,7.38752317428589,0.497046887874603,12.3512144088745,7.81623363494873,-0.921400249004364,12.3507328033447,4.70240497589111,-2.97360157966614,8.2618465423584,4.38370370864868,-1.30719125270844,8.53772068023682,4.85830402374268,-1.03485834598541,8.34664154052734,4.26936388015747,-1.26588129997253,8.46986484527588,3.1554388999939,-1.43624365329742,8.34628105163574,3.21852278709412,-1.53164660930634,8.2733736038208,2.7988555431366,-1.6545318365097,8.17590713500977,2.74774932861328,-1.86189317703247,8.07227325439453,1.03621578216553,-2.17143201828003,8.3486795425415,0.427448570728302,-1.97930431365967,8.09087753295898,0.418905317783356,-2.12586092948914,8.15859699249268,0.0618062913417816,-2.13336801528931,7.8818793296814,0.132020547986031,-2.43179988861084,7.8618049621582,-0.623425841331482,-2.48126220703125,7.97514820098877,2.84113550186157,-0.698743879795074,7.91939783096313,1.88133490085602,-0.698509812355042,7.37556505203247,4.11418771743774,-0.738027811050415, 7.12800025939941,4.14944124221802,-1.3378928899765,7.79018020629883,4.17661905288696,-1.64111828804016,6.94105863571167,8.39327621459961,-1.99834716320038,6.91890287399292,8.2821159362793,-2.00474405288696,7.22366333007813,7.12326192855835,-1.87451314926147,7.480544090271,5.81974315643311,-2.27981424331665,7.95554208755493,5.07282066345215,-2.32199144363403,12.2233734130859,8.90837287902832,-1.41941320896149,12.2676200866699,8.78210067749023,-1.39806830883026,12.2785034179688,7.96867084503174,-1.64899885654449,12.2156171798706,6.74982690811157,-1.95364665985107,12.2535228729248,5.75333404541016,-2.21360635757446,12.4807224273682,4.93390893936157,-2.24494934082031,12.7721185684204,3.99579477310181,-2.10383653640747,8.63093948364258,7.60015678405762,1.80671334266663,8.62113475799561,7.46664953231812,1.82989954948425,8.63788414001465,6.70167589187622,1.52909469604492,8.69423484802246,5.93398475646973,1.25737953186035,8.65503120422363,4.89050817489624,1.31877195835114,8.62190437316895,4.41484546661377,1.42706036567688,9.01820659637451,4.20061016082764,1.03565382957459,11.8353872299194,6.78268384933472,-2.71999740600586,11.9059467315674,8.04110717773438,-2.52659678459167,11.954478263855,9.0095157623291,-2.44830703735352,11.9236574172974,9.11659240722656,-2.40354752540588,11.960880279541,8.69771385192871,-0.577697277069092,11.5644798278809,8.31119823455811,0.719232320785522,9.98414611816406,7.77302694320679,2.08830571174622,7.71604347229004,7.88915014266968,0.612167298793793,7.12976217269897,8.13741683959961,-0.166500449180603,11.0205383300781,9.33058452606201,-3.03233504295349,9.53904724121094,9.11799430847168,-3.27702498435974,7.65170097351074,8.7472505569458,-2.73987889289856,8.62954139709473,8.94725894927979,-3.22196006774902,7.33695316314697,8.59652614593506,-1.79107713699341,11.8764390945435,9.0099458694458,-1.23530924320221,8.73727798461914,7.74562072753906,1.61132657527924,11.5861968994141,9.22538471221924,-2.12491774559021,10.8846216201782,19.2333583831787,2.99382495880127,10.8735446929932,18.8200950622559,3.42978501319885, 10.8541011810303,18.3279361724854,2.93692708015442,10.8832063674927,18.8148536682129,2.53401899337769,10.5200786590576,17.9692115783691,4.34590482711792,10.4846277236938,17.3935279846191,3.72583603858948,9.73058032989502,17.2792644500732,5.04154920578003,8.62687110900879,16.9248275756836,5.41275405883789,10.3979377746582,18.2120380401611,4.33148908615112,10.7226848602295,19.0455799102783,3.37352299690247,9.62259387969971,17.5917854309082,5.03659582138062,8.54744338989258,17.1974773406982,5.40801620483398,10.830249786377,19.4356498718262,2.91760802268982,10.7492761611938,19.799617767334,2.88753604888916,10.7113447189331,19.2958393096924,3.12222003936768,10.6793050765991,19.3370323181152,3.71836709976196,10.3031015396118,18.9596462249756,4.79261493682861,9.37976932525635,18.4917240142822,5.57988595962524,8.29885768890381,18.1507701873779,5.97931909561157,10.5200023651123,20.1408176422119,4.01744413375854,10.1408576965332,19.8712902069092,5.0645899772644,9.1905345916748,19.5542163848877,5.89608812332153,8.09999942779541,19.2621593475342,6.31005191802979,10.6673736572266,20.3554096221924,2.97603225708008,10.6598329544067,19.6969032287598,2.0004780292511,10.7596883773804,19.3268871307373,2.08992290496826,10.4535999298096,21.4124336242676,3.39937400817871,10.2665662765503,21.9323348999023,3.11421298980713,10.0877733230591,22.2021808624268,3.65796494483948,10.3209276199341,21.613899230957,3.94974088668823,9.45490837097168,22.599365234375,4.69469785690308,9.74240303039551,21.900821685791,5.07761812210083,8.51956844329834,22.74631690979,5.46489000320435,8.80372142791748,21.9650821685791,5.91362905502319,7.38228607177734,22.6113510131836,5.85867595672607,7.64917707443237,21.797420501709,6.33266592025757,9.71762371063232,21.6514225006104,4.97159385681152,10.2602586746216,21.3834095001221,3.80861616134644,8.81839847564697,21.6574687957764,5.79326295852661,7.70153617858887,21.4740352630615,6.20392799377441,10.3768091201782,21.0263004302979,3.39235901832581,10.5269012451172,20.9093341827393,3.0945188999176,10.4725208282471,21.2443161010742,3.25417709350586, 10.3247337341309,21.2503776550293,3.48597979545593,9.9367561340332,20.8117370605469,5.13730812072754,10.357063293457,20.9667377471924,4.0233039855957,9.07955837249756,20.6500606536865,5.98157691955566,7.97893238067627,20.4087715148926,6.39955759048462,10.3478708267212,21.2740516662598,2.29400300979614,10.3102588653564,21.5990142822266,2.51279091835022,10.6137924194336,20.0307559967041,2.17805695533752,10.5380973815918,20.4603633880615,2.3185830116272,10.4403657913208,20.9075145721436,2.34123802185059,10.5755195617676,19.6662559509277,3.11494088172913,4.94140291213989,17.8739356994629,4.00129413604736,4.97612380981445,17.4636917114258,3.53536009788513,5.33359622955322,17.0651969909668,3.87273693084717,5.26266002655029,17.5366821289063,4.38091611862183,6.29105854034424,16.4343070983887,4.43670701980591,6.21092700958252,16.9835529327393,5.07637119293213,7.39537382125854,16.3496284484863,4.7204909324646,7.39244985580444,16.7444496154785,5.43789577484131,6.20721101760864,17.2534675598145,5.04187917709351,5.27760076522827,17.8000946044922,4.29654598236084,7.3501033782959,17.071985244751,5.42181491851807,5.03394889831543,18.2387256622314,4.07053804397583,4.78293418884277,18.4348983764648,3.89891910552979,4.87793016433716,18.0741367340088,3.92661571502686,5.10237407684326,18.0128650665283,4.07302713394165,6.11509895324707,18.0017032623291,5.50254487991333,5.29883909225464,18.1063289642334,4.63043785095215,7.23719167709351,17.9726581573486,5.96456384658813,5.95145320892334,18.9130210876465,5.77475690841675,5.18693590164185,18.920955657959,4.92147922515869,7.04634428024292,19.0347785949707,6.28103971481323,4.6217041015625,18.9564056396484,4.13157510757446,4.62470102310181,18.3164520263672,3.02352404594421,4.7248101234436,17.9464931488037,3.11292791366577,4.51037693023682,20.0530071258545,4.40684223175049,4.71004295349121,20.3304882049561,4.90087223052979,4.56726694107056,20.9394416809082,4.59377288818359,4.35948419570923,20.5811710357666,4.11555480957031,5.43325090408325,20.9151668548584,5.8080849647522,5.26133918762207,21.6401462554932,5.40557098388672, 6.46559047698975,21.430269241333,6.30997800827026,6.23514795303345,22.2237873077393,5.85213422775269,5.52689790725708,20.6928539276123,5.68198585510254,4.81517601013184,20.1379241943359,4.73164081573486,6.54590797424316,21.1376686096191,6.1784839630127,4.5201358795166,19.8827934265137,4.26319885253906,4.56601285934448,19.5458679199219,4.10498094558716,4.73723888397217,19.736328125,4.3483510017395,4.71576499938965,19.9674053192139,4.4367880821228,4.97689390182495,19.7361011505127,4.93532705307007,5.74875497817993,19.8537902832031,5.84723806381226,6.81026935577393,20.1309928894043,6.36625528335571,4.31273984909058,19.8936004638672,3.31704807281494,4.27538108825684,20.218620300293,3.53579592704773,4.57782793045044,18.6501159667969,3.20124411582947,4.50393390655518,19.0801334381104,3.34146690368652,4.40440893173218,19.5268745422363,3.36442470550537,10.8431606292725,18.7861003875732,2.44014716148376,10.8136548995972,18.3081188201904,2.8375391960144,10.4479379653931,17.3849391937256,3.61761784553528,10.7177801132202,19.3129863739014,1.98497116565704,10.6137723922729,19.7006969451904,1.89566814899445,10.0405826568604,22.2164440155029,3.56492018699646,10.2168340682983,21.952543258667,3.02945613861084,9.41473770141602,22.6083793640137,4.58975505828857,8.49272918701172,22.7543716430664,5.34907007217407,7.37042284011841,22.621467590332,5.80231285095215,10.2635154724121,21.6095638275146,2.41238903999329,10.303807258606,21.2677593231201,2.18731999397278,10.4946060180664,20.4584579467773,2.21803116798401,10.568359375,20.0347576141357,2.07991313934326,10.3974113464355,20.8989925384521,2.24075198173523,5.01321506500244,17.4525814056396,3.42841100692749,6.31224870681763,16.4389591217041,4.31868124008179,7.50874900817871,16.3715438842773,4.59366989135742,4.75371122360229,17.9487895965576,2.99597120285034,4.64967203140259,18.3364906311035,2.90667319297791,4.38688993453979,20.619026184082,4.01771926879883,4.5924391746521,20.9702587127686,4.48846530914307,5.2790470123291,21.6623973846436,5.2908182144165,6.23852682113647,22.2387561798096,5.73119115829468, 4.29944610595703,20.2453670501709,3.42338895797729,4.3397068977356,19.9035568237305,3.19832611083984,4.60426807403564,18.6705703735352,3.09092211723328,4.53046989440918,19.0942478179932,3.22904109954834,4.43331813812256,19.5347919464111,3.25175809860229,6.38370084762573,22.9831581115723,5.70846033096313,7.14405488967896,23.9239101409912,5.65244483947754,7.72733306884766,24.1056079864502,5.47485208511353,6.49145746231079,23.8214664459229,5.74526596069336,6.57458209991455,23.7810745239258,5.88676261901855,7.17207098007202,23.8744888305664,5.79700756072998,6.33581447601318,22.3091201782227,5.86684417724609,7.37212753295898,22.6595153808594,5.87273836135864,8.39966011047363,22.7811946868896,5.51699161529541,7.70609426498413,24.041223526001,5.63918304443359,10.4553146362305,20.3231563568115,3.23345708847046,4.8855938911438,18.9875259399414,4.20944452285767,12.9825353622437,10.6990766525269,0.844066858291626,9.8389253616333,9.49735069274902,3.17830562591553,11.5044794082642,12.9690208435059,2.80792570114136,10.7127485275269,12.5645351409912,3.36476016044617,11.0604057312012,9.69466495513916,2.83606219291687,12.2644348144531,10.1694393157959,2.32021045684814,11.1309700012207,17.2452526092529,2.54634737968445,6.70162296295166,9.45798778533936,2.01733946800232,6.35549068450928,13.8766345977783,2.74235939979553,5.24501037597656,15.4749479293823,2.42005228996277,6.03702163696289,15.1854915618896,3.31086182594299,6.57275533676147,12.4051599502563,2.47686791419983,10.977728843689,15.8941841125488,3.68716859817505,10.7990818023682,16.9118976593018,3.76513743400574,10.4266233444214,17.058614730835,3.71678614616394,4.87146949768066,15.9931001663208,1.07368099689484,6.86694240570068,15.0654487609863,4.30618381500244,6.77264976501465,16.0406074523926,4.2553129196167,6.98142719268799,16.3520584106445,4.27755880355835,7.20883512496948,14.8501043319702,4.19879293441772,7.98394060134888,14.8931560516357,4.27120780944824,7.44306898117065,13.9275770187378,4.12924718856812,8.74346828460693,12.9331617355347,3.70751571655273,9.87979412078857,12.9458312988281,3.54778790473938, 9.6381721496582,11.1837501525879,3.82064890861511,10.0478620529175,13.1829557418823,3.4830207824707,9.99559593200684,15.3371992111206,3.90790176391602,10.7288208007813,15.5589847564697,3.66854119300842,6.74331283569336,16.3392333984375,4.03310918807983,10.4732303619385,16.7847728729248,4.27841186523438,10.7414121627808,16.6679668426514,3.98403811454773,10.7801752090454,16.2029762268066,4.13446187973022,10.5451440811157,16.0811061859131,4.50478982925415,10.8121566772461,15.845027923584,3.79723620414734,10.5918312072754,15.5369853973389,3.99283981323242,9.8531322479248,16.5995903015137,4.68393802642822,10.0126037597656,15.9286870956421,4.81835794448853,9.79456615447998,16.833423614502,4.26952695846558,10.0595607757568,15.3670091629028,4.39897203445435,9.90972423553467,15.9085750579834,4.89311122894287,9.76378726959229,16.6339874267578,4.74866676330566,9.63790130615234,16.8885154724121,4.3174467086792,10.073974609375,13.2618465423584,3.8615391254425,10.0949974060059,13.3742513656616,4.06807279586792,9.93121242523193,13.1100921630859,3.85573220252991,9.93567180633545,13.3041086196899,4.1608567237854,8.04547023773193,16.2815895080566,5.02835702896118,7.9120717048645,16.4583759307861,4.65794610977173,8.78007221221924,13.1069211959839,4.28314590454102,8.10359859466553,15.5371837615967,5.12908601760864,8.78834533691406,12.9926528930664,4.06723880767822,7.94412708282471,16.2080841064453,4.99466705322266,8.15055847167969,14.9756393432617,4.70975494384766,7.21701669692993,16.1169757843018,4.808424949646,6.93839693069458,15.8880319595337,4.60305595397949,7.13570690155029,15.0910511016846,4.39565181732178,7.50561809539795,14.9041223526001,4.49521207809448,7.49339818954468,15.455249786377,5.00152015686035,7.12892198562622,15.4541702270508,4.72877597808838,5.54436635971069,13.8168067932129,2.02238321304321,8.30417728424072,14.0667724609375,4.03354072570801,8.42895317077637,14.1100664138794,4.42929649353027,8.49184799194336,14.1423807144165,4.64357471466064,9.92403411865234,14.4718418121338,4.48916864395142,10.0594902038574,14.4750490188599,4.39139747619629, 10.0653839111328,14.5165367126465,4.18185234069824,10.0170516967773,14.4528198242188,3.73347544670105,10.6282987594604,14.4023456573486,3.52199649810791,11.1519660949707,14.6864976882935,3.16790533065796,6.04845094680786,16.2096138000488,3.63020849227905,5.52223777770996,16.4311771392822,2.7282702922821,5.10262775421143,16.7274036407471,1.33499121665955,4.29888534545898,21.2389469146729,2.84800100326538,3.93148970603943,21.6375637054443,2.01565790176392,2.9605450630188,24.8765544891357,1.97136247158051,2.89970541000366,24.9143161773682,2.17081499099731,2.62015056610107,26.2532806396484,2.3701069355011,4.41971921920776,21.6550331115723,4.03259515762329,8.53282833099365,25.5782012939453,-0.167569786310196,7.2937650680542,25.4874401092529,-1.2387101650238,6.69556617736816,20.8177394866943,-0.44059631228447,6.78883934020996,19.5983657836914,-0.931529581546783,8.20820713043213,24.2063522338867,5.04386711120605,8.81881809234619,23.5065650939941,4.60944509506226,4.55811882019043,23.5142288208008,-0.732890009880066,7.79413414001465,21.0973491668701,-0.54935747385025,8.24923992156982,19.919095993042,-0.793531358242035,9.85042095184326,21.1344356536865,1.4140750169754,9.62073135375977,24.0104999542236,1.51200270652771,9.83751201629639,22.8306541442871,2.4107723236084,9.29598808288574,23.2301254272461,4.08172798156738,2.31491231918335,29.7624473571777,3.23570966720581,6.26165246963501,30.276439666748,-2.03741860389709,2.92210912704468,29.6239356994629,-1.64515149593353,7.52851438522339,30.5461311340332,-1.03620731830597,2.28898024559021,28.4519901275635,2.82041788101196,9.5324125289917,25.5558605194092,1.46676802635193,7.73476505279541,24.0522499084473,-0.513817012310028,3.17484617233276,23.3372783660889,2.0396089553833,8.55404090881348,24.098482131958,-0.00429400010034442,6.07827711105347,23.7995223999023,-0.819948017597198,9.09116077423096,24.1179275512695,0.669364988803864,10.2090940475464,19.7163257598877,1.54994201660156,4.54618835449219,20.4038715362549,0.327896654605865,3.909832239151,20.236291885376,1.51313841342926, 4.62226486206055,19.1657886505127,0.235345333814621,4.29495668411255,18.9505310058594,1.53156208992004,7.73149299621582,25.2387638092041,5.56792831420898,6.34912157058716,24.9886512756348,5.79081058502197,6.1414589881897,23.8302707672119,5.62265491485596,9.50326728820801,15.4665489196777,-3.09563803672791,7.92887163162231,15.1350746154785,-3.01180362701416,9.81278514862061,13.9111709594727,-3.44924473762512,9.84451770782471,11.6013212203979,-3.94717597961426,9.64504241943359,10.5313568115234,-4.39961624145508,10.7425470352173,18.7471675872803,1.2680721282959,8.20433902740479,13.5760927200317,-3.37232685089111,8.49007797241211,11.4475383758545,-3.97062849998474,5.36550998687744,17.0619297027588,3.7610821723938,5.17229700088501,17.7759780883789,0.455138176679611,5.34495162963867,17.0478000640869,0.207327455282211,7.15298080444336,18.741907119751,-1.61566770076752,7.37722444534302,17.8142032623291,-2.12625551223755,8.89304828643799,18.1247253417969,-2.02328205108643,8.64704895019531,19.093147277832,-1.49808049201965,13.1437149047852,9.83644771575928,0.425810605287552,6.79427766799927,10.1194458007813,-3.59274291992188,8.46947383880615,10.3621530532837,-4.15896272659302,7.37660598754883,38.6802215576172,1.84768354892731,7.32925224304199,38.8696250915527,2.05189299583435,8.50175857543945,30.9236011505127,0.143369674682617,9.24204730987549,28.3038425445557,0.935694634914398,12.451057434082,9.42442798614502,1.84179270267487,11.1691188812256,9.07114124298096,2.62692499160767,9.90255355834961,8.8194408416748,2.72341012954712,7.16649913787842,8.72556114196777,1.34422612190247,5.30278015136719,17.4545993804932,2.83680200576782,3.26730012893677,23.4545974731445,1.46349477767944,8.75579071044922,16.6359596252441,4.55582046508789,9.6224308013916,23.0851593017578,1.67339825630188,9.57697582244873,22.9747257232666,3.24728608131409,9.19984149932861,23.223331451416,0.919034540653229,8.06709289550781,23.1356105804443,-0.251145720481873,6.29547739028931,23.0096740722656,-0.55564147233963,4.18616390228271,22.5705108642578,0.401069700717926, 3.58845591545105,22.4750595092773,1.47205495834351,3.43016672134399,22.3351707458496,1.91197001934052,5.4775652885437,14.6034002304077,-0.848178505897522,5.46263837814331,12.9252481460571,-1.43349719047546,6.11545467376709,10.8410673141479,-1.87363421916962,6.24943923950195,9.87539100646973,-2.08078861236572,5.08252668380737,17.5950775146484,1.47334945201874,5.56419515609741,22.756872177124,5.25122785568237,4.97053909301758,22.3994827270508,4.87527322769165,3.88732552528381,21.1598033905029,1.50911855697632,4.44807863235474,21.3713245391846,0.426176756620407,6.54054069519043,21.7982597351074,-0.450584977865219,8.50001525878906,22.0293464660645,-0.0887655019760132,9.50238704681396,22.0265922546387,1.2452974319458,9.9237585067749,22.0253047943115,1.93845045566559,10.0915231704712,22.1119232177734,2.2798593044281,4.97010898590088,14.2412166595459,0.382829368114471,5.13274669647217,12.6117677688599,-0.0833398848772049,5.56505680084229,10.3705987930298,-0.355221420526505,5.70119285583496,9.17764377593994,-0.628493666648865,5.30814981460571,16.3194942474365,-0.1225531026721,7.52781343460083,17.0894050598145,-2.39299297332764,9.06356906890869,17.390739440918,-2.41181421279907,12.0434112548828,15.1893663406372,1.87365484237671,12.5517129898071,13.4664974212646,1.38936769962311,13.1068925857544,11.2270574569702,-0.273940622806549,13.0960330963135,10.077766418457,-0.766599833965302,11.6978235244751,16.5182456970215,2.36682105064392,11.2157173156738,17.9049034118652,1.06689035892487,11.7930545806885,16.9751167297363,0.794650077819824,12.2942228317261,15.3654108047485,0.229736045002937,12.6215677261353,13.7141962051392,-0.279336333274841,8.41444396972656,9.42227172851563,2.86235332489014,8.31547164916992,8.57957553863525,2.64106416702271,4.13291549682617,19.6004199981689,1.52886092662811,4.56665515899658,19.7877254486084,0.25340074300766,6.74493312835693,20.2061576843262,-0.660114347934723,8.02215194702148,20.5025272369385,-0.674675583839417,10.0297594070435,20.4253807067871,1.48200845718384,4.66221380233765,18.1281929016113,2.47184419631958, 8.28762149810791,11.0393047332764,3.44345617294312,6.68867588043213,11.1985206604004,2.32214212417603,5.4771900177002,11.5190696716309,-0.246227294206619,5.85303068161011,11.9172916412354,-1.67039966583252,8.32313919067383,12.6680364608765,-3.58693480491638,9.90711784362793,12.8571147918701,-3.5450963973999,12.8485689163208,12.8292036056519,-0.356148988008499,12.7300281524658,12.3465728759766,1.19345235824585,11.7639751434326,11.9589366912842,2.69383668899536,10.6790237426758,11.5936756134033,3.43812823295593,8.73316478729248,13.1642179489136,4.12282800674438,9.32520294189453,12.4223604202271,3.61370158195496,8.1046724319458,12.4125928878784,3.56111311912537,8.73285865783691,13.2765378952026,4.34218788146973,9.93310737609863,13.5609140396118,4.23305797576904,10.0881977081299,13.585015296936,4.12997817993164,10.072416305542,13.4894390106201,3.91964173316956,1.67838835716248,30.9184226989746,3.30307817459106,1.89689028263092,29.7673435211182,3.16651940345764,1.48467254638672,30.6766414642334,-0.48382967710495,1.7151745557785,29.5061206817627,-0.388914227485657,6.41028499603271,31.5402603149414,-2.31122946739197,6.5544581413269,30.2641086578369,-2.10232305526733,3.24189710617065,29.6542873382568,-1.98031175136566,3.03120398521423,30.9302921295166,-2.10327386856079,7.3973708152771,31.8299655914307,-1.48837518692017,4.9675407409668,29.930456161499,-2.2727963924408,4.79024934768677,31.2233638763428,-2.47925400733948,9.770339012146,25.5654220581055,1.26073324680328,9.85008811950684,24.02073097229,1.29150104522705,2.88398265838623,23.4223175048828,1.98747265338898,2.61478137969971,24.807092666626,2.1091001033783,2.56298756599426,24.7260589599609,1.49513530731201,4.08464431762695,24.8278770446777,-1.19701743125916,4.46618032455444,23.4818077087402,-1.05908119678497,5.79780006408691,25.2055416107178,-1.48177099227905,7.58888959884644,25.4344844818115,-1.33208465576172,7.79577255249023,23.9981422424316,-0.78133100271225,6.17394542694092,23.8105087280273,-1.08923745155334,8.74819564819336,25.5624618530273,-0.352819919586182,8.8174524307251,24.0813789367676,-0.17203514277935, 8.29786491394043,32.2326049804688,-0.562160134315491,8.68968200683594,30.9222812652588,-0.11330646276474,7.68600034713745,30.5278968811035,-1.28661370277405,2.92589497566223,23.4454669952393,1.463662981987,10.183985710144,24.0114269256592,1.48732244968414,10.3995380401611,23.0030460357666,2.38215231895447,10.1714305877686,23.2381954193115,1.69905114173889,10.0658826828003,24.2001304626465,3.24561882019043,10.1078948974609,23.1566581726074,3.35979390144348,9.73544216156006,24.5126132965088,4.35015201568604,9.77918720245361,23.3942604064941,4.31036186218262,9.15197277069092,24.8433399200439,5.12198305130005,9.17974853515625,23.6991958618164,5.01077795028687,8.81389045715332,25.4027652740479,5.52354097366333,8.11821174621582,25.076171875,6.03452777862549,8.62082099914551,24.2555313110352,5.50145721435547,4.94333648681641,24.0129108428955,6.1410551071167,5.44337701797485,22.7728080749512,5.75631809234619,6.00277996063232,23.6588459014893,6.15437316894531,5.51579332351685,24.4081516265869,6.2461986541748,4.21660566329956,23.4138717651367,5.43742179870605,4.60753440856934,22.092170715332,5.30762243270874,3.64753818511963,22.7981567382813,4.36176633834839,3.97580409049988,21.4336051940918,4.30237817764282,3.93899321556091,21.0546340942383,3.03482794761658,3.00800609588623,22.134693145752,2.17809700965881,3.47336459159851,21.4021892547607,2.19615602493286,10.2548227310181,25.4462604522705,2.23816800117493,10.0921211242676,25.3244571685791,1.40582799911499,10.3297166824341,25.5889053344727,3.29478859901428,10.1016530990601,25.8635997772217,4.32744646072388,9.49295043945313,25.9888610839844,5.24583053588867,8.74037933349609,26.1106243133545,5.74385833740234,7.91368246078491,26.0554676055908,6.26549863815308,4.82580804824829,24.7727489471436,6.31932830810547,3.97736215591431,24.154411315918,5.67784929275513,3.38183975219727,23.6130828857422,4.72761106491089,2.68674302101135,23.211181640625,2.26280474662781,10.0458040237427,28.1991653442383,1.91037487983704,9.79188060760498,28.2899017333984,0.875848591327667,10.1743211746216,28.1533126831055,3.07424855232239, 10.0320882797241,28.1667823791504,4.24908638000488,8.97226333618164,31.0707683563232,-0.0124146156013012,9.27804946899414,31.2962856292725,1.37091720104218,8.99170207977295,33.3099365234375,1.86456072330475,9.47235774993896,31.3706016540527,2.61665606498718,8.30988502502441,32.8178291320801,5.27076625823975,8.49545383453369,30.7285480499268,5.71441602706909,9.12849426269531,31.0272274017334,5.08935260772705,8.80402851104736,33.1465034484863,4.67227029800415,7.65233707427979,30.4246578216553,6.46737289428711,7.61286640167236,32.386043548584,6.16658735275269,4.8137845993042,30.9995460510254,6.55148696899414,5.17962551116943,29.5996227264404,6.77977800369263,4.09050512313843,30.391019821167,6.23229169845581,2.47493076324463,29.0429763793945,4.76166772842407,2.26273012161255,28.844123840332,4.130455493927,1.83292031288147,28.6096267700195,3.26814723014832,8.04264640808105,34.5006980895996,-0.720708727836609,7.95204257965088,35.5625,4.51369094848633,7.40072584152222,35.2431945800781,5.5053391456604,4.30788898468018,32.4267234802246,6.14424514770508,3.70565128326416,31.6386547088623,5.78515100479126,2.07473659515381,29.7428436279297,4.24214792251587,1.89405024051666,29.2105312347412,3.50888156890869,7.91234683990479,36.6562614440918,0.0448120012879372,7.69625759124756,37.7195739746094,3.7429211139679,7.29021406173706,37.5362548828125,4.64640092849731,6.16034173965454,36.3572311401367,5.5187726020813,4.74860525131226,34.8689727783203,5.76224040985107,3.77248501777649,33.7298736572266,5.60572528839111,3.26117038726807,32.9967346191406,5.2520923614502,6.08498001098633,25.5943832397461,6.55991077423096,6.18661165237427,24.7244873046875,6.31633234024048,9.40803623199463,31.2745361328125,3.8881824016571,9.07090282440186,33.3454704284668,3.53791260719299,10.0716009140015,24.0060024261475,1.4139244556427,10.0697593688965,23.165225982666,1.6226841211319,10.3156270980835,22.8844871520996,2.36132836341858,10.029746055603,23.0400581359863,3.33455991744995,9.70546817779541,23.283145904541,4.26745891571045,9.1259241104126,23.5924777984619,4.93032312393188, 8.48777198791504,24.2007484436035,5.37533950805664,7.91638708114624,25.1751689910889,5.94517946243286,6.03314876556396,23.5322189331055,5.99998188018799,5.52076005935669,22.6739807128906,5.62737798690796,4.69226598739624,22.0745868682861,5.19560813903809,4.09655714035034,21.4006404876709,4.22978782653809,4.06289386749268,21.0164031982422,3.00006198883057,3.60996341705322,21.3400974273682,2.08173608779907,9.97756958007813,25.3492584228516,1.34460115432739,3.06863784790039,22.1662006378174,2.02713704109192,9.65499496459961,28.2802486419678,0.782940268516541,2.74755239486694,23.2384338378906,2.15618586540222,8.82112979888916,31.0097255706787,-0.0560440123081207,1.86797857284546,28.614429473877,3.1319215297699,7.94068431854248,34.379695892334,-0.816163599491119,1.89337337017059,29.1634712219238,3.36262130737305,7.79942846298218,36.6775054931641,-0.0194739997386932,7.60380077362061,37.7963676452637,3.67964386940002,7.22692108154297,37.5835647583008,4.55090570449829,6.1025857925415,36.3641624450684,5.41515636444092,4.72125434875488,34.9616813659668,5.66096448898315,3.76971030235291,33.8117027282715,5.53015184402466,3.28945708274841,33.111946105957,5.19547367095947,2.10025668144226,30.606517791748,3.93692255020142,6.30683612823486,24.863639831543,6.18582439422607,6.11436796188354,23.6850185394287,6.04688310623169,7.78097343444824,26.0277538299561,6.21321439743042,6.21463012695313,25.6692790985107,6.46301651000977,7.55111742019653,30.3920917510986,6.39775085449219,7.45050239562988,32.3329658508301,6.15083980560303,7.27913808822632,35.1760787963867,5.55547094345093,6.99305248260498,37.2315101623535,4.84737014770508,6.91676378250122,37.2658882141113,4.76304244995117,2.28811478614807,26.3853092193604,2.56221723556519,2.23476266860962,26.3820323944092,2.68446326255798,2.61036849021912,26.5165481567383,3.75161123275757,2.90822100639343,26.7460823059082,4.73223924636841,3.56000971794128,27.1050662994385,5.75402736663818,4.27271509170532,27.3566989898682,6.4875373840332,5.66520214080811,27.6100559234619,6.7059268951416,5.7662296295166,27.5774803161621,6.57018709182739, 7.6766791343689,27.9425983428955,6.35362434387207,7.80297374725342,27.9894924163818,6.4398775100708,8.66915988922119,28.0921421051025,5.84028482437134,9.47067070007324,28.122034072876,5.24188470840454,2.20996499061584,29.9731330871582,4.56600332260132,2.10399508476257,30.5140609741211,4.07979536056519,5.30119848251343,29.6463642120361,6.68332195281982,4.92222452163696,31.0695972442627,6.47152519226074,4.48160314559937,32.5191307067871,6.0656886100769,4.14768695831299,34.1093292236328,5.51155948638916,4.15120220184326,34.2035255432129,5.43701601028442,1.98364222049713,27.8785266876221,2.93078923225403,1.94235408306122,27.87815284729,3.06318759918213,2.36977767944336,28.0997009277344,3.98143076896667,2.63067173957825,28.2976512908936,4.7458701133728,4.41857099533081,29.2386493682861,6.59666156768799,7.56398439407349,30.5628261566162,6.71118402481079,7.49685859680176,32.181510925293,6.48458242416382,7.468101978302,32.5037994384766,6.4351601600647,7.3045482635498,35.2156181335449,5.87828588485718,6.73865842819214,32.2596702575684,6.63548994064331,6.20531892776489,36.3156089782715,5.84047269821167,7.05880689620972,37.1785850524902,5.21333408355713,4.72433471679688,34.8476142883301,6.0802116394043,6.41811656951904,34.4748916625977,6.24666404724121,7.55984258651733,30.338529586792,6.73191165924072,7.69254875183105,27.9261207580566,6.6812539100647,7.82909297943115,26.0347461700439,6.52567291259766,6.32481861114502,25.6593074798584,6.7205548286438,7.95692873001099,25.1614246368408,6.27644300460815,6.40386581420898,24.8511695861816,6.50110149383545,5.83545446395874,27.5759601593018,6.88720178604126,5.36732721328735,29.6078033447266,7.00625324249268,4.96170663833618,31.019079208374,6.80995941162109,5.2938666343689,29.7915210723877,6.99704647064209,4.8523211479187,31.2468891143799,6.76324796676636,4.41397762298584,32.6190986633301,6.37181329727173,5.5450701713562,31.6847229003906,6.82576894760132,5.13066625595093,33.2722244262695,6.48147821426392,4.08279800415039,34.1065979003906,5.84938621520996,8.26431655883789,35.4175186157227,0.438631266355515, 8.11979484558105,35.6021957397461,4.41319370269775,8.47711849212646,32.8561134338379,5.23995113372803,8.70630931854248,30.8051433563232,5.64721870422363,8.90147686004639,28.0989265441895,5.80129289627075,8.9966287612915,26.0767917633057,5.69587278366089,8.94582271575928,25.184455871582,5.4431848526001,9.03204917907715,25.4176197052002,5.50921106338501,9.29705619812012,25.0721836090088,5.14672422409058,9.88245296478271,24.7685241699219,4.34585094451904,10.1949939727783,24.4736366271973,3.25530242919922,10.2092380523682,24.4950656890869,2.25282216072083,10.2866735458374,24.5622482299805,2.40504479408264,10.3209056854248,25.4585094451904,2.32878351211548,10.1164855957031,28.1952266693115,2.0103747844696,9.35418319702148,31.3025550842285,1.47600424289703,8.92996597290039,33.1470336914063,1.12682414054871,8.36096000671387,35.5315437316895,0.640533804893494,7.96617650985718,36.6328430175781,0.68460077047348,10.1855125427246,24.3762168884277,2.39254546165466,4.88428688049316,27.5448017120361,6.62644290924072,5.35536670684814,25.2809295654297,6.34503364562988,2.41899251937866,31.5349407196045,4.39026832580566,2.42222929000854,31.4518260955811,4.50084161758423,2.73904395103455,30.6618022918701,5.13954162597656,3.01469254493713,29.4937610626221,5.50692224502563,3.18643069267273,28.6368103027344,5.63183641433716,2.88213300704956,32.440502166748,4.80782842636108,2.88537335395813,32.3740043640137,4.91404724121094,3.25417995452881,31.2281646728516,5.60531949996948,3.57900738716125,29.9968357086182,6.06741666793823,3.84910750389099,29.0165786743164,6.32851791381836,3.78587698936462,22.6147346496582,4.40958499908447,4.40473413467407,23.2173252105713,5.3618688583374,5.05243253707886,23.7748394012451,5.98046350479126,5.15192556381226,23.9108238220215,6.03752183914185,5.09901189804077,24.0283966064453,6.06259202957153,4.98978471755981,24.8948726654053,6.22997379302979,4.42884540557861,27.3927001953125,6.41243886947632,3.99426865577698,29.0578422546387,6.27595472335815,3.70775318145752,30.0652732849121,5.9921236038208,3.36599230766296,31.2928047180176,5.52768707275391, 3.21600556373596,23.382287979126,3.66167640686035,3.13256430625916,23.4489612579346,3.96262264251709,2.60371732711792,26.5579433441162,3.99766564369202,2.36950469017029,28.1366233825684,4.2071647644043,2.27195620536804,28.888053894043,4.36787366867065,2.10059666633606,29.8359222412109,4.44796895980835,3.65240097045898,22.6352996826172,4.09371852874756,3.45793771743774,22.3002586364746,3.45713114738464,5.93335342407227,23.5488815307617,6.10497140884399,8.28321838378906,35.4727020263672,4.0598840713501,8.21437072753906,35.5108833312988,3.94676041603088,8.23526859283447,35.5774803161621,4.07809209823608,8.98128318786621,33.3073310852051,1.50170826911926,8.80344772338867,33.7087898254395,1.31972646713257,8.37926006317139,35.5428810119629,0.895102500915527,9.05762958526611,33.3395156860352,3.25746941566467,8.79792022705078,33.7233619689941,3.65049529075623,8.32604217529297,35.6871376037598,0.887703597545624,8.37180233001709,35.6292266845703,1.01363062858582,7.92610263824463,36.6413269042969,3.91050696372986,9.65692615509033,34.4289665222168,3.45484137535095,9.65652179718018,34.4304313659668,1.51501369476318,9.64732360839844,36.1605224609375,1.23773038387299,9.6471118927002,36.1608505249023,3.73834991455078,8.90835475921631,36.0127983093262,4.05285596847534,8.04823875427246,38.801326751709,3.066978931427,8.04919147491455,38.7976417541504,1.90342044830322,8.91025924682617,36.0060348510742,0.912298798561096,8.98512554168701,35.85498046875,0.943507790565491,9.66490745544434,35.9975662231445,1.24367785453796,9.66507625579834,35.9963912963867,3.73160123825073,8.98733711242676,35.8529968261719,4.02006530761719,8.58648204803467,38.6790885925293,1.94465684890747,8.5863561630249,38.6800575256348,3.02977108955383,8.05947399139404,38.9483451843262,2.96082544326782,8.3496265411377,37.876407623291,1.19929134845734,9.70539474487305,34.3412780761719,3.23126864433289,9.09271430969238,37.9376640319824,3.39191293716431,9.04487419128418,37.9428787231445,3.58865451812744,9.60724449157715,34.5523490905762,3.56974840164185,9.73832893371582,35.9771957397461,3.46515989303589, 9.29694271087646,36.0857925415039,3.90996932983398,8.72676181793213,38.6951217651367,2.94520330429077,8.65796184539795,38.7216682434082,2.94792580604553,8.65403747558594,38.6301765441895,3.03623008728027,8.65191173553467,37.937370300293,1.26801216602325,8.31970977783203,38.7574996948242,1.91880691051483,8.65421104431152,38.628044128418,1.93424451351166,9.04490661621094,37.9410629272461,1.38660764694214,9.34207344055176,35.9353485107422,3.8918993473053,9.34069728851318,35.9380073547363,1.07297730445862,8.72695350646973,38.6949348449707,2.0697033405304,8.65809059143066,38.7215995788574,2.0669732093811,8.05986881256104,38.9483337402344,2.05407619476318,9.70482158660889,34.3420333862305,1.77387404441834,9.73829746246338,35.9785690307617,1.59816265106201,9.09149074554443,37.9406356811523,1.67303395271301,8.87478923797607,35.9269828796387,1.03641319274902,9.2094841003418,35.9949035644531,1.16528415679932,9.29795265197754,36.0840759277344,1.05569672584534,9.5132417678833,36.056079864502,1.33062779903412,9.62839031219482,36.0285873413086,1.6688996553421,9.74010372161865,36.1250686645508,1.59929883480072,9.6286153793335,36.0278968811035,3.39043879508972,9.74026870727539,36.1246604919434,3.46993517875671,9.51327228546143,36.0559005737305,3.64421725273132,9.20956325531006,35.9938201904297,3.79994034767151,8.87504005432129,35.9276924133301,3.92794609069824,8.37112808227539,38.8416557312012,2.06099200248718,8.37003135681152,38.8421287536621,2.9540810585022,8.31944561004639,38.7596626281738,3.05168437957764,8.65036487579346,37.9585037231445,3.69329905509949,8.33966159820557,37.9150276184082,3.76029419898987,9.63536262512207,34.6465492248535,3.56787443161011,9.71852207183838,34.5815124511719,3.4976921081543,9.76471328735352,34.5473899841309,3.26735043525696,9.76347923278809,34.56298828125,1.74737155437469,9.71766757965088,34.592529296875,1.47125852108002,9.63161945343018,34.6595687866211,1.3942711353302,9.60330772399902,34.5609931945801,1.39289259910584,8.2984733581543,38.0600166320801,1.24847328662872,8.60289287567139,38.0795478820801,1.30549657344818, 8.97101306915283,38.050895690918,1.3974621295929,9.00732898712158,38.0661354064941,1.67648065090179,9.00812816619873,38.0641098022461,3.38718843460083,8.97093868255615,38.052806854248,3.57767224311829,8.60173034667969,38.0949897766113,3.65988159179688,8.29121208190918,38.0429191589355,3.71564388275146,8.25728702545166,38.1638870239258,1.49070048332214,8.52094841003418,38.2038345336914,1.5344785451889,8.83392238616943,38.2279777526855,1.6033970117569,8.87556648254395,38.2440948486328,1.82842564582825,8.875901222229,38.2435035705566,3.21620106697083,8.83407974243164,38.2287864685059,3.36956572532654,8.52165985107422,38.2090759277344,3.43147039413452,8.25486278533936,38.1729011535645,3.47432494163513,8.57520580291748,36.9442749023438,1.05579495429993,8.92019557952881,37.056266784668,1.16185414791107,9.29137802124023,37.1757545471191,1.31216907501221,9.36106109619141,37.1578140258789,1.63616633415222,9.36175537109375,37.1561241149902,3.4309241771698,9.29125690460205,37.1768264770508,3.66350221633911,8.91891670227051,37.1471099853516,3.80163431167603,8.56927108764648,37.0888748168945,3.90657520294189,8.83453559875488,33.546947479248,1.04526650905609,8.76492404937744,33.456356048584,0.906054317951202,8.39243221282959,33.0780563354492,-0.461591124534607,8.27371215820313,32.9051399230957,-0.532841503620148,8.87887573242188,32.999683380127,1.01147544384003,8.57392024993896,32.4365539550781,-0.315257996320724,8.42005634307861,32.313835144043,-0.395357549190521,8.54056930541992,34.598030090332,3.85518980026245,9.29729080200195,35.2026748657227,3.79490661621094,9.48871803283691,35.2909469604492,3.72988700866699,9.69179916381836,35.2889518737793,3.61464691162109,9.75152111053467,35.2622909545898,3.36625528335571,9.75088977813721,35.2707824707031,1.672767162323,9.69128799438477,35.2950477600098,1.35746812820435,9.48615837097168,35.2987899780273,1.23362421989441,9.29421615600586,35.2079849243164,1.16820025444031,8.59135437011719,34.6258354187012,1.10741424560547,8.59774780273438,34.5392456054688,0.842900216579437,8.51461982727051,34.4369354248047,0.672342777252197, 8.21594047546387,33.7888870239258,-0.589591026306152,8.08582305908203,33.6414337158203,-0.667325794696808,7.97919321060181,35.5220642089844,-0.356160432100296,7.86904096603394,35.527904510498,-0.407945513725281,9.41505527496338,25.5495491027832,1.24658966064453,4.65747976303101,29.993688583374,-1.9929701089859,5.70963573455811,25.2698745727539,-1.25907444953918,4.05296611785889,24.9229850769043,-1.07812261581421,1.94002258777618,29.5671463012695,2.09152460098267,1.39111661911011,29.5243148803711,1.60391390323639,1.16515398025513,30.6779403686523,1.79934179782867,1.99050807952881,29.5482559204102,0.0322921723127365,3.18263959884644,24.8409614562988,0.259835541248322,3.07358360290527,24.7372646331787,-0.0272905211895704,3.43370652198792,23.3883876800537,-0.0178845003247261,3.67771339416504,23.4529304504395,0.146148890256882,7.49344301223755,25.4977970123291,-1.50432002544403,8.73250484466553,25.5885562896729,-0.433179765939713,3.90392780303955,24.9208126068115,-1.19340264797211,2.86472368240356,24.7657909393311,-0.011822797358036,1.67441141605377,29.4105987548828,0.0618886798620224,1.62392604351044,29.4356174468994,2.00085210800171,1.67769014835358,29.4277153015137,-0.223505362868309,2.7168333530426,29.4735317230225,-1.74457061290741,6.45831537246704,30.1916770935059,-2.30510973930359,7.7251763343811,30.5071926116943,-1.30389845371246,6.30463266372681,30.1748123168945,-2.29767990112305,4.73208427429199,29.9153747558594,-2.37516093254089,4.5478458404541,29.8604946136475,-2.31193232536316,2.86321783065796,29.5412120819092,-1.96411395072937,7.28996992111206,25.404899597168,-1.47658205032349,5.74078845977783,25.2103481292725,-1.61829876899719,2.64102792739868,24.8287105560303,1.95682787895203,2.86312246322632,24.7931175231934,0.245301082730293,8.77632522583008,30.8639965057373,-0.043558195233345,9.689621925354,25.6373138427734,1.0596616268158,8.80739498138428,25.5922794342041,-0.354497760534287,7.8030800819397,30.560209274292,-1.22313511371613,4.01765489578247,24.8804779052734,-1.40720963478088,5.62358236312866,25.1768970489502,-1.58816146850586, 1.97695231437683,29.7982711791992,3.62867569923401,1.983323097229,29.7955074310303,3.76431751251221,7.27921152114868,7.94315719604492,1.11295449733734,8.45061302185059,7.78688621520996,2.35225319862366,9.98027992248535,7.93115139007568,2.6541576385498,11.047269821167,8.17732429504395,2.32532548904419,12.2088813781738,8.54818725585938,1.43931353092194,12.7967157363892,8.97920799255371,-0.303374022245407,12.7254018783569,9.27799606323242,-1.02359855175018,9.60103511810303,9.58114910125732,-4.08662033081055,8.47558498382568,9.39766216278076,-3.92700147628784,7.04356861114502,9.15869903564453,-3.36116600036621,6.57959508895874,8.94561100006104,-2.03293538093567,6.16128015518188,8.42148208618164,-0.628806829452515,5.64768552780151,12.3261880874634,1.44831931591034,5.9045262336731,11.2130880355835,1.26543354988098,5.8640022277832,9.76654434204102,1.05148673057556,6.4172043800354,8.82000827789307,0.554828345775604,6.70876121520996,8.10266876220703,0.363239943981171,12.200852394104,9.57963943481445,-2.46441507339478,12.4662971496582,10.3750247955322,-2.37286257743835,12.2984609603882,11.5450801849365,-1.93835651874542,12.0142498016357,12.9365711212158,-1.61892592906952,11.9773483276367,13.8030195236206,-1.4678817987442,11.8417062759399,15.5326137542725,-1.05799794197083,11.2553758621216,17.1266117095947,-0.394293993711472,10.8601474761963,18.0437698364258,0.00694957328960299,10.4829511642456,18.8434734344482,0.322913497686386,9.9399585723877,19.8044834136963,0.532618045806885,9.69186401367188,20.4600238800049,0.586481034755707,9.4355001449585,21.1805152893066,0.577586591243744,9.07950115203857,22.0507411956787,0.495223522186279,8.69851875305176,23.1948986053467,0.245849296450615,6.16310691833496,31.7836303710938,6.44500494003296,7.04650259017944,25.1148319244385,5.67837047576904,7.1069540977478,25.0596961975098,6.07496929168701,7.16845560073853,25.0319118499756,6.39875030517578,7.08851909637451,25.8666687011719,6.62717199325562,6.80701875686646,27.7775402069092,6.78988933563232,6.44509267807007,29.9831085205078,6.92495393753052, 6.4039478302002,30.032678604126,6.60236120223999,6.41693687438965,30.1916389465332,6.91217041015625,6.20972585678101,31.6967830657959,6.77317142486572,-6.54231739044189,12.6112308502197,2.51405692100525,-5.62890911102295,12.6281480789185,1.56339108943939,-5.08411502838135,13.020073890686,0.0338337942957878,-5.60205984115601,13.3931608200073,-1.27092814445496,-8.1321964263916,13.9843788146973,-3.27790832519531,-9.74130058288574,14.2703952789307,-3.36757755279541,-11.2661638259888,14.2782869338989,-2.45767784118652,-11.9547777175903,14.0997133255005,-1.39795982837677,-12.5701141357422,13.9658508300781,-0.201430022716522,-12.4840297698975,13.6959028244019,1.45385241508484,-11.4584693908691,13.1931886672974,2.85491061210632,-10.697582244873,12.8946161270142,3.39300060272217,-6.09357261657715,14.955735206604,3.21051430702209,-5.30345153808594,15.0847148895264,2.32294702529907,-4.65844058990479,15.4953756332397,0.879150092601776,-5.3569164276123,15.7576780319214,-0.361837923526764,-7.63014793395996,16.5907344818115,-2.55088973045349,-9.18150901794434,16.8746166229248,-2.59523558616638,-10.7870645523071,16.9461994171143,-1.46924579143524,-11.3884553909302,16.7632884979248,-0.545281529426575,-11.8917779922485,16.6512069702148,0.681422531604767,-11.7337970733643,16.379919052124,2.31548643112183,-4.29751968383789,24.8999042510986,-1.23498022556305,-4.68551063537598,23.5386791229248,-1.07134437561035,-4.90844106674194,23.582426071167,-0.784929275512695,-5.06855154037476,22.799654006958,-0.584399402141571,-5.32814025878906,21.655574798584,-0.376716136932373,-5.36390161514282,20.6551761627197,-0.347969770431519,-5.5555419921875,20.0228042602539,-0.38139283657074,-5.59836912155151,19.3803081512451,-0.498663604259491,-5.93225002288818,18.2411861419678,-0.859450995922089,-6.02198886871338,17.4772243499756,-1.10206782817841,-6.18644666671753,16.2123355865479,-1.70700764656067,-6.38514518737793,14.8989009857178,-2.24836111068726,-6.56212663650513,13.678539276123,-2.60871553421021,-6.80606079101563,12.2707643508911,-2.95792460441589, -7.0539927482605,11.1793432235718,-3.29677653312683,-7.20544815063477,10.1790170669556,-3.73171949386597,-7.26315689086914,9.19534206390381,-3.44793200492859,-10.0475654602051,11.6314668655396,-4.09846067428589,-10.0540437698364,10.5353965759277,-4.18405389785767,-9.9586124420166,9.60340690612793,-3.94887590408325,11.2027616500854,9.68085098266602,-3.46960878372192,11.4367513656616,10.549054145813,-3.45530366897583,11.2972002029419,11.8169927597046,-3.32886862754822,11.1392621994019,13.012734413147,-2.86512422561646,11.1196727752686,13.9444828033447,-2.67804932594299,10.8612976074219,15.5450296401978,-2.19082450866699,10.4322099685669,17.3136310577393,-1.5093207359314,10.1309051513672,18.2544040679932,-1.11548435688019,9.73401069641113,19.0150680541992,-0.632054448127747,9.29386520385742,19.8477249145508,-0.29420593380928,9.02189445495605,20.4448375701904,-0.182775765657425,8.72895908355713,21.1493473052979,-0.079991951584816,7.38872718811035,21.8982887268066,-0.293966174125671,7.18128442764282,23.0726432800293,-0.403393626213074,4.94621467590332,22.7787132263184,-0.587266862392426,5.13886499404907,21.6332550048828,-0.364601194858551,5.25503253936768,20.6421451568604,-0.341791093349457,5.42467212677002,20.0016403198242,-0.356989920139313,5.51656103134155,19.3624057769775,-0.464608579874039,5.83164167404175,18.1995677947998,-0.796680629253387,5.99487543106079,17.471996307373,-1.08526873588562,6.09748268127441,16.7805137634277,-1.46871149539948,6.26286697387695,14.8802556991577,-2.18778109550476,6.45515012741089,13.1925020217896,-2.67920064926147,6.63633728027344,12.2249088287354,-2.88158559799194,6.9144926071167,11.1545562744141,-3.08205604553223,2.08748078346252,44.8266448974609,-3.61138391494751,1.88030695915222,44.8266448974609,-3.81855821609497,1.73669397830963,45.5486373901367,-3.81855821609497,1.92809784412384,45.6279182434082,-3.61138391494751,1.3277200460434,46.1607093811035,-3.81855821609497,1.47421503067017,46.307201385498,-3.61138391494751,0.715646982192993,46.5696830749512,-3.81855893135071,0.794929981231689,46.7610855102539,-3.61138391494751, -0.00634199986234307,46.7132949829102,-3.81855893135071,-0.00634199986234307,46.920467376709,-3.61138391494751,-0.728331029415131,46.5696830749512,-3.81855893135071,-0.807613015174866,46.7610855102539,-3.61138391494751,-1.34040415287018,46.1607093811035,-3.81855821609497,-1.48689794540405,46.307201385498,-3.61138391494751,-1.74937784671783,45.5486335754395,-3.81855893135071,-1.94078195095062,45.6279182434082,-3.61138391494751,-1.89299011230469,44.8266448974609,-3.81855893135071,-2.10016393661499,44.8266448974609,-3.61138391494751,-1.74937784671783,44.1046562194824,-3.81855821609497,-1.94078195095062,44.0253753662109,-3.61138391494751,-1.34040415287018,43.4925842285156,-3.81855821609497,-1.48689794540405,43.3460884094238,-3.61138510704041,-0.728331029415131,43.083610534668,-3.81855821609497,-0.807613015174866,42.8922080993652,-3.61138391494751,-0.00634100008755922,42.939998626709,-3.81855821609497,-0.00634100008755922,42.7328224182129,-3.61138272285461,0.715647995471954,43.083610534668,-3.81855821609497,0.794929981231689,42.8922080993652,-3.61138391494751,1.32772099971771,43.4925842285156,-3.81855821609497,1.47421503067017,43.3460922241211,-3.61138391494751,1.73669505119324,44.1046562194824,-3.81855821609497,1.92809915542603,44.0253753662109,-3.61138391494751,-0.0702939033508301,46.9095268249512,-2.83078742027283,-0.00634199986234307,44.8266448974609,-3.81855893135071,-0.00774500099942088,48.5321197509766,-4.27275657653809,-2.79399394989014,48.5291366577148,-4.25684595108032,-1.97193670272827,49.2199897766113,-4.70548629760742,-0.0079365773126483,49.2231712341309,-4.72618436813354,-3.93324613571167,48.1487579345703,-3.40063524246216,-2.86614584922791,49.3610649108887,-4.13264656066895,-2.95772695541382,48.5543785095215,-4.20622110366821,-3.24585890769959,47.8829612731934,-3.85739922523499,-3.16376090049744,46.6581039428711,-3.27878475189209,-3.93707990646362,48.0531578063965,-3.37293791770935,-3.2502818107605,47.7346115112305,-3.79583311080933,-2.82787704467773,46.7353248596191,-3.73126482963562,-3.13004899024963,46.5379753112793,-3.27038884162903, -2.78846979141235,46.5956077575684,-3.71025991439819,-2.77864789962769,44.5108299255371,-3.70978999137878,-3.10399317741394,44.4963989257813,-3.17587113380432,-0.00774674257263541,42.1210021972656,-3.3051495552063,-1.71360194683075,42.1770324707031,-3.16398596763611,-1.34515404701233,42.3104934692383,-3.69572424888611,-0.00774500146508217,42.3095550537109,-3.69797968864441,-2.17577815055847,49.2368698120117,-4.64067125320435,-1.4881579875946,50.2866439819336,-4.61767959594727,-1.25603806972504,49.8282089233398,-4.99077701568604,-1.59205400943756,46.349178314209,-3.77787971496582,-2.68635511398315,46.6700057983398,-3.77787971496582,-2.76875805854797,46.9001617431641,-3.77554607391357,-0.831133008003235,46.8742370605469,-3.77787899971008,-2.67803001403809,44.5424156188965,-3.77787899971008,-2.01448392868042,45.6905746459961,-3.77787899971008,-2.18441390991211,44.7907295227051,-3.77787899971008,-0.00948680471628904,50.4008445739746,-4.60829496383667,-0.00942133273929358,49.8690757751465,-5.05734491348267,-1.13300633430481,49.8691291809082,-5.00537014007568,-2.76524996757507,43.1158752441406,-3.17091298103333,-2.48791909217834,43.2134246826172,-3.70322799682617,-1.46523594856262,42.3661613464355,-3.70073199272156,-1.15198469161987,49.7354354858398,-5.01462888717651,-0.00865909457206726,49.7371101379395,-5.06615304946899,-0.00774500006809831,42.4267349243164,-3.77787899971008,-1.36082100868225,42.4239044189453,-3.77787899971008,-0.82917308807373,42.7932014465332,-3.77787899971008,-0.00774500006809831,42.6284027099609,-3.77787899971008,-0.00774500006809831,47.0389404296875,-3.80383110046387,-1.53621804714203,43.2656326293945,-3.77787899971008,-2.01435494422913,43.9812316894531,-3.77787899971008,-0.00774500006809831,47.7899284362793,-3.90835189819336,-2.88847088813782,48.390251159668,-4.16416501998901,-3.15139889717102,47.7899284362793,-3.85440111160278,-2.3965790271759,43.2774925231934,-3.77787899971008,-2.85712099075317,47.7899284362793,-3.90835189819336,-0.00774500006809831,44.4963836669922,-2.88441801071167,-0.00774500379338861,43.1158981323242,-2.87946343421936, 1.95598769187927,49.219898223877,-4.70561122894287,2.7785050868988,48.5291366577148,-4.25684595108032,3.93082571029663,48.1475028991699,-3.40081644058228,3.23036909103394,47.8829612731934,-3.85739922523499,2.94223666191101,48.5543785095215,-4.20622110366821,2.85060954093933,49.3610458374023,-4.13265657424927,3.15620064735413,46.6549911499023,-3.27752184867859,2.81238603591919,46.7353248596191,-3.73126459121704,3.23479199409485,47.7346115112305,-3.79583311080933,3.92158389091492,48.0531539916992,-3.37293839454651,2.76315808296204,44.5108299255371,-3.70978999137878,2.77297902107239,46.5956077575684,-3.71025967597961,3.13004899024963,46.537971496582,-3.27039289474487,3.08850169181824,44.4963836669922,-3.17586994171143,1.32966256141663,42.3104934692383,-3.69572329521179,1.66867196559906,42.1703910827637,-3.14673805236816,2.16000866889954,49.2367668151855,-4.64066600799561,1.23720574378967,49.8278503417969,-4.99131345748901,1.46432018280029,50.2877388000488,-4.62241172790527,1.57656502723694,46.349178314209,-3.77787971496582,0.815643012523651,46.8742370605469,-3.77787899971008,2.75326800346375,46.9001617431641,-3.77554607391357,2.67086505889893,46.6700057983398,-3.77787971496582,1.99899387359619,45.6905746459961,-3.77787899971008,2.66253995895386,44.5424156188965,-3.77787899971008,2.16892409324646,44.7907295227051,-3.77787899971008,1.11472451686859,49.868824005127,-5.00572633743286,2.74976110458374,43.1158752441406,-3.17091298103333,2.47242999076843,43.2134246826172,-3.70322799682617,1.44974386692047,42.3661613464355,-3.70073080062866,1.13459324836731,49.7351531982422,-5.01477098464966,0.813682913780212,42.7932014465332,-3.77787899971008,1.34533095359802,42.4239044189453,-3.77787899971008,1.52072787284851,43.2656326293945,-3.77787899971008,1.99886500835419,43.9812316894531,-3.77787899971008,2.87298202514648,48.390251159668,-4.16416501998901,3.13590908050537,47.7899284362793,-3.85440111160278,2.38108801841736,43.2774925231934,-3.77787899971008,2.84163093566895,47.7899284362793,-3.90835189819336,-4.58376359939575,63.043212890625,-0.74325555562973, -4.32382106781006,63.199146270752,-2.11853528022766,-5.61950731277466,62.6101608276367,-2.02238321304321,-5.5639181137085,62.6561889648438,-0.627221822738647,-3.81792235374451,61.6314811706543,1.93067765235901,-4.23066997528076,62.7958450317383,0.643227458000183,-4.50719594955444,62.3577041625977,0.684112071990967,-4.24381637573242,61.2449722290039,1.89936196804047,-4.83367252349854,60.567813873291,3.36426424980164,-4.02966737747192,60.8557052612305,3.31201100349426,-4.2675518989563,61.3561515808105,2.65948343276978,-5.05083751678467,61.1046981811523,2.70250844955444,-4.2227029800415,59.0873870849609,4.58839559555054,-3.1375093460083,59.3523139953613,4.54741859436035,-2.95601749420166,59.3083114624023,4.45222663879395,-1.78824007511139,59.4734725952148,4.38385057449341,-2.04711675643921,60.3847465515137,3.65144824981689,-3.29090762138367,60.1977424621582,3.68307900428772,0.571158766746521,60.8396873474121,5.0963306427002,-0.839762628078461,60.8675537109375,5.13892889022827,-0.867940545082092,59.7659683227539,5.27337598800659,0.544704496860504,59.7316017150879,5.23783779144287,-6.39116334915161,62.2082328796387,-0.568828225135803,-6.51852989196777,62.1134452819824,-1.99753320217133,-5.04658603668213,61.0131149291992,1.97637069225311,-5.38415002822876,62.0700721740723,0.693856477737427,-6.20381593704224,61.7258529663086,0.790133476257324,-5.95493364334106,60.6742477416992,2.05090570449829,-6.10866117477417,59.5777435302734,2.72402358055115,-5.58027458190918,59.5957260131836,2.72076964378357,-6.3722677230835,60.6542625427246,2.03971314430237,-2.61364102363586,58.3588180541992,5.07920122146606,-1.34503436088562,58.123950958252,5.24714374542236,-0.906973481178284,58.397289276123,5.45396566390991,0.50952011346817,58.3454170227051,5.40429639816284,-5.79731750488281,61.9858093261719,-3.4841206073761,-6.64396810531616,61.690299987793,-3.41667151451111,-6.98294544219971,60.5666580200195,1.96027648448944,-7.32416105270386,61.496711730957,0.851831436157227,-7.35325860977173,61.2873115539551,0.723838567733765,-6.97983884811401,60.3939323425293,1.76361238956451, -0.967165589332581,57.3445663452148,5.59643316268921,0.468669772148132,57.2876739501953,5.54235649108887,-7.52687740325928,56.2300033569336,3.33295869827271,-7.61058712005615,55.2209396362305,2.84668350219727,-7.5824499130249,55.3210792541504,3.7516176700592,-7.54807090759277,56.2279281616211,3.62562227249146,-7.93686151504517,58.7858695983887,-4.79697370529175,-8.15877056121826,58.8994178771973,-4.62168502807617,-8.16490364074707,58.9746856689453,-4.9071307182312,-7.90763759613037,58.8739242553711,-4.98211908340454,-7.96249437332153,53.4727363586426,1.87367284297943,-7.73882818222046,53.5761909484863,1.88744831085205,-8.21688365936279,53.0939102172852,0.0579092763364315,-8.36908531188965,53.0343475341797,0.124661922454834,-6.6935658454895,53.8076362609863,4.69332361221313,-7.47776079177856,55.1806678771973,3.96003985404968,-7.20041465759277,53.4745635986328,4.326331615448,-6.71329784393311,52.4803886413574,4.68359184265137,-6.11323595046997,55.6096496582031,-5.85344552993774,-5.36878347396851,53.065486907959,-5.65250778198242,-6.28663635253906,53.3525581359863,-5.50807046890259,-7.25142240524292,55.2232780456543,-5.57690858840942,-6.5656213760376,52.5676918029785,-4.90726852416992,-6.05972480773926,51.4805221557617,-4.63228845596313,-6.8934383392334,51.4382705688477,-4.08465576171875,-7.4780101776123,53.3036689758301,-4.63438510894775,-8.09913444519043,52.0839996337891,-1.7106853723526,-7.95109605789185,52.5316047668457,-3.3199098110199,-7.54325914382935,51.3055038452148,-3.03992581367493,-7.89064073562622,51.2711715698242,-1.57859110832214,-7.34243583679199,53.1391639709473,2.97148561477661,-7.72463750839233,52.8233032226563,1.86843764781952,-7.47193384170532,51.8114624023438,1.93101298809052,-6.97390651702881,52.0725975036621,3.13220763206482,-2.20823454856873,55.570972442627,6.08277320861816,-3.19988632202148,53.8476066589355,6.19407176971436,-1.59189522266388,52.2857933044434,6.59298801422119,0.0742019414901733,53.7155609130859,6.43243837356567,4.71617744857156e-010,52.2723007202148,6.92303466796875,-1.00653862953186,51.9871368408203,6.87207269668579, -4.69440269470215,51.794303894043,-5.06654739379883,-4.19027042388916,51.1079444885254,-4.80165195465088,-5.59660387039185,50.505672454834,-4.25932693481445,-6.42431688308716,50.2381935119629,-3.64198398590088,-7.11456871032715,50.1765480041504,-2.64489150047302,-7.54669952392578,50.2063140869141,-1.27075219154358,-7.87716817855835,51.4646224975586,0.311745405197144,-7.48381662368774,50.4245948791504,0.464674741029739,-7.13096857070923,50.6294746398926,2.01429176330566,-6.53003597259521,50.9027862548828,3.39372110366821,-6.73277521133423,52.2691230773926,4.57926988601685,-6.16375160217285,51.0633430480957,5.00885963439941,-3.75121450424194,50.402400970459,-4.5294942855835,-5.08280038833618,49.6628837585449,-3.84394526481628,-5.94112730026245,49.2127494812012,-3.15987420082092,-6.69155025482178,49.0641174316406,-2.19040656089783,-7.06008195877075,48.9655342102051,-0.943751931190491,-7.02285242080688,49.0458526611328,0.573255360126495,-6.71472215652466,49.3308906555176,2.09821772575378,-2.58982849121094,51.0738563537598,6.59774255752563,-3.55670809745789,49.7771186828613,6.5001277923584,-3.00732898712158,49.3212928771973,6.79382085800171,-2.01268601417542,50.7967338562012,6.85560035705566,-4.8608660697937,49.268138885498,-3.67571473121643,-5.84528207778931,48.3474311828613,-2.86911988258362,-6.37699604034424,48.1191711425781,-1.8216849565506,-6.74047231674194,48.0109062194824,-0.690343976020813,-6.82137680053711,47.9547233581543,0.649387001991272,-6.5790491104126,47.9910316467285,2.10321021080017,-6.25911617279053,49.4032783508301,3.64200615882874,-6.25825023651123,47.9997749328613,3.76795077323914,-6.06466388702393,49.4190444946289,4.19036960601807,-5.70988321304321,48.0457077026367,4.83566284179688,-5.44931507110596,49.5626525878906,5.51248121261597,-4.90697479248047,48.1723861694336,5.99959182739258,-6.3240818977356,46.956859588623,-1.68728196620941,-6.63816499710083,46.9563941955566,-0.538152992725372,-6.8033881187439,46.9570236206055,0.677780985832214,-6.67517471313477,46.9568824768066,2.0741720199585,-6.44183683395386,46.9564170837402,3.87416791915894, -5.754075050354,46.9542045593262,5.31309509277344,-4.68217277526855,46.987190246582,6.47571611404419,-6.23779010772705,46.8432464599609,-1.71466600894928,-5.16316509246826,46.4165267944336,-2.17705106735229,-6.20514297485352,46.4165267944336,-0.0732529982924461,-6.5817289352417,46.8283920288086,-0.480120033025742,-6.74122285842896,46.8339805603027,0.608999013900757,-6.32486486434937,46.4132232666016,2.05160284042358,-6.63257074356079,46.8119354248047,2.06915593147278,-6.11156702041626,46.4165267944336,3.76738452911377,-6.40335369110107,46.8159255981445,3.87055206298828,-5.7106761932373,46.8290824890137,5.30438184738159,-5.2943868637085,46.4165267944336,5.02039861679077,-5.7909722328186,52.3580474853516,5.50828695297241,-6.10384559631348,51.189281463623,5.15083789825439,-4.62400197982788,50.9104385375977,6.0946216583252,-5.3449330329895,49.7196502685547,5.73267936706543,-6.56144762039185,55.3431663513184,4.69130802154541,-7.36446571350098,56.6810684204102,3.84224009513855,-5.36580228805542,53.7305793762207,5.65301322937012,-3.89188385009766,52.3838729858398,6.17686653137207,-4.51043176651001,48.5544776916504,6.20510101318359,-5.98190259933472,56.9579467773438,4.80389547348022,-6.68937587738037,58.2481575012207,3.90044522285461,-4.60328149795532,55.290901184082,5.6990442276001,-4.99980068206787,57.5341339111328,4.98933744430542,-3.26686596870422,57.0321769714355,5.57355833053589,-3.75316452980042,58.0651702880859,5.14952659606934,-5.31166410446167,58.3614234924316,4.52154731750488,-6.15540170669556,58.9271240234375,3.77175760269165,-7.20317459106445,61.9830055236816,-1.89761126041412,-7.35737085342407,61.5284652709961,-3.30922079086304,-6.54331970214844,59.2050437927246,2.63021373748779,-6.27166366577148,58.902774810791,2.84936618804932,-6.29670572280884,58.9856071472168,2.92897891998291,-6.54550552368164,59.3159370422363,2.77967119216919,-1.39726603031158,60.5229339599609,3.58534479141235,-1.57510507106781,60.4082717895508,2.89312291145325,-2.00851607322693,60.4639854431152,3.49718189239502,-1.71285247802734,60.5445404052734,3.71867203712463, -1.78574860095978,60.459228515625,3.82921481132507,-1.48285102844238,59.5390167236328,4.49514532089233,-1.19663047790527,58.3662300109863,5.17178916931152,-3.87157917022705,47.958366394043,6.67540788650513,-0.636969029903412,60.8942604064941,4.83841991424561,-0.79024863243103,60.962833404541,5.07085466384888,0.457402557134628,60.361930847168,3.63983082771301,-1.26206767559052,60.3948707580566,3.71665692329407,-0.516775727272034,60.7121925354004,4.86698389053345,0.545945823192596,60.6655578613281,4.80527925491333,-1.90578651428223,50.7142028808594,6.84204292297363,-1.50750613212585,50.2555236816406,6.44407510757446,-0.874659955501556,51.203067779541,6.49364566802979,-0.924962282180786,51.8707618713379,6.86492204666138,-2.91349101066589,49.2260665893555,6.78605461120605,-3.75853896141052,47.8829345703125,6.66740846633911,-3.25709509849548,47.6898155212402,6.37078380584717,-2.45923495292664,48.8440284729004,6.41991806030273,-4.50668096542358,46.8707466125488,6.50796604156494,-4.11206912994385,46.4815940856934,6.28245401382446,-7.5585765838623,59.0654640197754,-5.5283989906311,-7.46995878219604,60.3856201171875,-4.44866323471069,-6.76721334457397,60.624568939209,-4.52078628540039,-6.14805173873901,58.5227699279785,-5.91488933563232,-8.05864524841309,60.3752021789551,-3.9132387638092,-8.06969451904297,60.5055313110352,-4.10362768173218,-0.00834100041538477,51.369815826416,6.50502157211304,1.2595011700256e-009,52.1202964782715,6.91541719436646,-5.90425300598145,46.973030090332,-2.72414398193359,-8.31435585021973,53.2308464050293,-2.7188241481781,-8.39944076538086,53.1169281005859,-2.95668482780457,-8.44471454620361,52.7640647888184,-1.54682695865631,-8.36096572875977,52.8903388977051,-1.48194587230682,-7.62678861618042,61.6284866333008,-0.48501443862915,-7.60568618774414,61.9373779296875,-0.485954850912094,-8.07814884185791,52.3394584655762,0.190092623233795,0.550290882587433,60.8882865905762,4.76571989059448,-1.7434366941452,50.909969329834,-5.18805742263794,-2.33943367004395,51.3982582092285,-5.23224210739136,-1.76871800422668,51.3153953552246,-5.25926828384399, -1.69533109664917,50.9382476806641,-5.19738101959229,-4.09396886825562,56.196460723877,-6.40887975692749,-3.05688333511353,52.6637115478516,-5.79943561553955,-4.14210891723633,52.8269729614258,-5.78603363037109,-5.18700265884399,55.8667755126953,-6.07534456253052,-5.05381393432617,60.7147941589355,-4.91381597518921,-5.34420251846313,58.4481544494629,-6.16356611251831,-5.99727916717529,60.7204170227051,-4.61755514144897,-4.70381879806519,62.4490394592285,-3.59227013587952,-1.3623218536377,64.8544158935547,-4.02434396743774,-2.69535136222839,64.7236633300781,-3.15585780143738,-2.63330173492432,64.7342224121094,-3.04266667366028,-1.30076444149017,64.8649139404297,-3.91433906555176,-2.93277454376221,64.6463317871094,-3.40469479560852,-1.52712595462799,64.7705841064453,-4.34073972702026,-1.74185812473297,63.4781951904297,-4.48097562789917,-3.31157374382019,63.4204177856445,-3.58641505241394,-7.94449377059937,61.180793762207,-3.00423622131348,-7.80348062515259,61.544132232666,-1.70561361312866,-7.8006796836853,61.8012619018555,-1.78784132003784,-7.95154476165771,61.3721466064453,-3.14195728302002,0.214391976594925,55.7572250366211,6.01338577270508,-3.25250649452209,49.7038879394531,-4.46880578994751,-4.53439283370972,48.4554710388184,-3.65794110298157,-4.01119709014893,48.0481262207031,-3.33346700668335,-7.51859521865845,58.8452682495117,-5.10757112503052,-6.20120143890381,58.3351211547852,-5.41772556304932,-6.19232892990112,57.6690216064453,-5.42325019836426,-7.71127843856812,56.8944816589355,-5.13498258590698,-6.16023826599121,57.5443153381348,-5.9100923538208,-5.33519744873047,57.9585075378418,-6.16003465652466,-1.66215860843658,50.8016624450684,-5.12652063369751,-4.62410402297974,48.569221496582,-3.68546104431152,-3.34473991394043,49.8112754821777,-4.51330900192261,-4.8910608291626,52.1097564697266,-5.17195892333984,-2.69803500175476,51.9790115356445,-5.39096403121948,-3.83595895767212,52.0539054870605,-5.2710337638855,-3.91096091270447,63.7480812072754,-0.699044585227966,-3.8998658657074,62.8821792602539,0.582818329334259, -3.79263281822205,62.8982276916504,0.564997851848602,-3.80441069602966,63.750545501709,-0.67096471786499,-3.5259120464325,61.7640151977539,1.78173208236694,-3.43862271308899,61.7851028442383,1.7415474653244,-3.04325079917908,60.1873435974121,2.77890586853027,-2.90677165985107,60.2012214660645,2.76055693626404,-5.70347547531128,60.2030410766602,3.3857159614563,-5.14836645126343,58.5717124938965,4.55252075195313,-5.91897249221802,60.7943534851074,2.75335693359375,-3.71688389778137,60.1887817382813,2.95689511299133,-3.28231477737427,60.2721557617188,3.00297999382019,-7.00085020065308,62.0723876953125,-0.526914358139038,-6.71971225738525,61.6056213378906,0.844036161899567,-5.56729745864868,59.691104888916,3.52987718582153,-5.71301651000977,59.4423065185547,3.64712882041931,-3.57847571372986,60.3826675415039,3.64219069480896,-3.41484713554382,60.31640625,3.62375426292419,-3.43720960617065,64.3827590942383,-2.05497550964355,-3.33806347846985,64.373649597168,-2.02164340019226,-7.5117359161377,56.8763389587402,-5.5517840385437,-7.51681709289551,55.0600738525391,-5.11080932617188,-8.18808746337891,56.4836807250977,-4.69205474853516,-8.17397975921631,56.5143508911133,-4.92143249511719,-8.42611789703369,56.3473014831543,-4.90101623535156,-8.42153263092041,56.3091087341309,-4.70873975753784,-4.25242900848389,63.668643951416,-0.809715628623962,-3.75736117362976,64.2761764526367,-2.15908741950989,-1.82880520820618,62.7808952331543,-4.68377876281738,-3.51832127571106,62.9156723022461,-3.66607904434204,-0.0918186083436012,61.6059226989746,-5.04513835906982,0.089295506477356,64.9278793334961,-3.91856741905212,-1.20361995697021,64.9284820556641,-3.66630864143372,-1.78249406814575,61.6841812133789,-4.69612216949463,-2.43641114234924,64.776237487793,-2.89365482330322,-3.68809533119202,61.2370948791504,-3.70195460319519,-3.11960220336914,64.4344711303711,-1.89050722122192,-4.29324579238892,61.4706230163574,-2.09579682350159,-4.03043651580811,60.6889381408691,-5.23682403564453,-3.69434881210327,62.3061599731445,-4.30991125106812,-1.99904704093933,61.890754699707,-5.26441860198975, -2.32371950149536,60.5881652832031,-6.12655019760132,-4.32064247131348,58.4800796508789,-6.37245512008667,-2.7642867565155,58.7345886230469,-7.30046129226685,-2.64850378036499,56.3666534423828,-6.92448711395264,-4.32152223587036,58.2924957275391,-6.41741704940796,-2.77837133407593,58.5525093078613,-7.33459043502808,-1.8128000497818,52.6286926269531,-5.84308671951294,-1.77487003803253,51.920768737793,-5.47106218338013,0.0356562063097954,64.7234802246094,-4.61506748199463,-1.38461744785309,64.9285125732422,-4.06673717498779,0.0609728880226612,64.8952407836914,-4.32138061523438,-2.71697616577148,64.7673110961914,-3.17705631256104,-3.46257162094116,64.443473815918,-2.06530833244324,-3.94199109077454,62.983268737793,0.581296861171722,-3.94407916069031,63.8352203369141,-0.665212631225586,-3.57530069351196,61.8030242919922,1.82063889503479,-3.06104803085327,60.3160057067871,2.79525184631348,-3.7186131477356,63.8903579711914,-0.602997303009033,-3.56484341621399,63.8104438781738,-0.593017041683197,-3.23749470710754,64.4939117431641,-1.95676457881927,-3.70114326477051,63.0644645690918,0.599607229232788,-3.36165261268616,61.9484100341797,1.65959894657135,-3.19595909118652,61.9603424072266,1.56978213787079,-3.56866765022278,63.0705299377441,0.546214044094086,-2.75167322158813,60.3334846496582,2.76962637901306,-2.56414723396301,60.1364898681641,2.75010204315186,0.0847144201397896,64.9677810668945,-4.00475406646729,-1.25541496276855,64.9892730712891,-3.77600860595703,-2.51733064651489,64.8335800170898,-2.96126484870911,0.0734657272696495,64.8587341308594,-4.12000608444214,-4.24810981750488,61.576530456543,-0.733366727828979,-3.94838953018188,61.1668014526367,0.518226802349091,-3.37294268608093,60.2822761535645,1.5179226398468,-2.91200637817383,59.3908653259277,2.5849940776825,-6.82584142684937,60.637638092041,2.02972936630249,-6.59677457809448,60.6480178833008,2.03354120254517,-6.9548020362854,61.5892181396484,0.870841264724731,-7.18994903564453,61.5924530029297,0.911215424537659,-7.22396469116211,62.0687561035156,-0.500075042247772, -7.47647523880005,62.0667533874512,-0.490093559026718,-7.61475467681885,61.5042686462402,-3.26833868026733,-7.74038124084473,60.527774810791,-4.30577659606934,-7.99301433563232,60.5206069946289,-4.27950382232666,-7.87079572677612,61.5232963562012,-3.24266457557678,-7.81935739517212,58.9824333190918,-5.09903573989868,-8.0924129486084,59.000919342041,-5.0706901550293,-7.83214282989502,58.866828918457,-5.02819395065308,-8.1098804473877,56.5675201416016,-4.97241449356079,-8.10898971557617,56.3552360534668,-5.11795043945313,-8.26838397979736,56.3286285400391,-5.13145208358765,-8.23261260986328,53.706787109375,-4.17268705368042,-8.0557107925415,53.6533622741699,-4.25916910171509,-8.14530372619629,52.7733764648438,-3.29093050956726,-8.30707454681396,52.8478546142578,-3.19642877578735,-8.27628803253174,52.3263549804688,-1.67589509487152,-8.42832279205322,52.4776878356934,-1.63117837905884,-8.18632793426514,52.5547828674316,0.146052852272987,-8.37635612487793,52.7546501159668,0.149770796298981,-7.51249170303345,53.3124504089355,2.78690814971924,-7.64465665817261,53.5720977783203,2.76785397529602,-7.95363235473633,53.2975158691406,1.8700042963028,-7.80556631088257,53.0341033935547,1.87100756168365,-6.48617029190063,59.484561920166,2.74641704559326,-6.29842090606689,59.5460929870605,2.73247408866882,-7.69457101821899,61.9715614318848,-1.835329413414,-8.43411827087402,55.0426902770996,-4.61854219436646,-8.34623622894287,55.1561393737793,-4.43017435073853,-7.64096307754517,60.1501045227051,-3.87785243988037,-7.49625825881958,61.0798950195313,-2.9828155040741,-7.35370254516602,61.4221534729004,-1.73613929748535,-7.17622709274292,61.5010375976563,-0.51791113615036,-6.91523408889771,61.202823638916,0.605588138103485,-6.57774353027344,60.3290176391602,1.66084718704224,-6.35670948028564,59.2731742858887,2.49360775947571,-7.50422096252441,53.8342018127441,2.74940204620361,-7.2566556930542,53.8614730834961,2.78290176391602,-7.49353122711182,53.6159477233887,1.90764617919922,-7.94503307342529,53.1864814758301,0.0282176788896322,-7.9549708366394,52.8700256347656,-1.50859487056732, -7.96328639984131,53.1706809997559,-2.78903388977051,-8.31184387207031,54.0695686340332,-3.66722226142883,-7.92632246017456,54.0190582275391,-3.66191935539246,-7.70141124725342,58.7751426696777,-4.54647636413574,-6.27638864517212,59.5400161743164,2.53925251960754,-6.50607967376709,60.5526657104492,1.92643594741821,-8.07038593292236,52.2434234619141,-1.69248294830322,-7.96759462356567,52.7209930419922,-3.31808614730835,-7.61819267272949,60.4214286804199,-4.24296760559082,-7.4810209274292,61.4227981567383,-3.22135496139526,-7.79561758041382,53.6034355163574,-4.36914300918579,-7.85904312133789,53.6684265136719,-4.26431846618652,-7.98485136032104,52.4866142272949,0.106641910970211,-7.42254686355591,53.2007141113281,2.78653001785278,-7.6494402885437,52.9461784362793,1.86628890037537,-7.57653474807739,58.8754005432129,-5.12168979644775,-7.72405338287354,58.9478569030762,-5.06216478347778,-7.11246538162231,61.9350814819336,-0.519005000591278,-7.32182884216309,61.8542060852051,-1.85933899879456,-6.84792947769165,61.4917144775391,0.795687735080719,-7.43170070648193,61.9802703857422,-1.8671942949295,-7.86005878448486,56.6191177368164,-5.02617025375366,-7.60842800140381,58.8298263549805,-5.02760219573975,-8.06415367126465,54.8332481384277,-4.83862638473511,-7.88765335083008,54.8009834289551,-4.77773761749268,-6.18232488632202,59.4378967285156,2.77493143081665,-7.85013294219971,56.4070434570313,-5.10472011566162,-7.81204700469971,54.7497901916504,-4.8719916343689,-7.95052146911621,56.4441223144531,-5.01730966567993,-8.27874279022217,54.9120445251465,-4.80373048782349,-8.25146007537842,56.3314056396484,-4.55567598342896,-7.93210744857788,54.9821128845215,-4.23069047927856,-7.95408296585083,56.4088516235352,-4.54346561431885,-7.97020149230957,56.5552177429199,-4.67629384994507,-7.72650098800659,58.7269325256348,-4.77987480163574,-7.64762830734253,53.7170715332031,2.75160121917725,-7.28203105926514,53.4123115539551,4.17407703399658,-4.18460321426392,46.4165229797363,6.23691034317017,-4.5854868888855,46.8244400024414,6.45518922805786, -8.3947172164917,53.9242362976074,-3.91152191162109,-7.25358581542969,53.5158271789551,2.94256782531738,-3.30491423606873,60.279857635498,3.50280833244324,-2.20571994781494,60.4498519897461,3.47556161880493,-5.74956703186035,59.5254211425781,3.4650239944458,-5.77024984359741,59.4889335632324,2.80213236808777,-5.85364294052124,46.8418388366699,-2.67328810691834,-6.75361680984497,58.3276672363281,3.71880674362183,-7.33256578445435,57.0262031555176,3.78657269477844,-6.23516368865967,58.9689674377441,3.59735703468323,-7.36459541320801,57.0623016357422,3.44520807266235,-7.56687450408936,56.1604690551758,2.89003968238831,-3.955890417099,56.2655372619629,2.80547332763672,-3.54599189758301,54.1063079833984,2.12714576721191,-6.78145313262939,58.3291358947754,3.44112706184387,-6.25753211975098,58.9583015441895,3.36031484603882,0.56591659784317,60.9374847412109,4.97343397140503,-3.91471815109253,60.7840843200684,-4.01472616195679,-4.06285715103149,59.9045066833496,-4.85574150085449,-4.18883037567139,53.0629119873047,-2.34154367446899,-4.15138673782349,53.1954498291016,-3.86174035072327,-4.19567823410034,53.9706230163574,-4.67239284515381,-4.24513530731201,54.9201240539551,-5.19692230224609,-4.33705139160156,56.3626861572266,-5.52872800827026,-4.16411161422729,58.473560333252,-5.76605749130249,-4.11923313140869,61.3103981018066,-2.24004507064819,-0.0120536936447024,63.4881744384766,-4.744140625,-0.0509749911725521,62.7385063171387,-4.96958208084106,-0.121715128421783,61.8404769897461,-5.5955662727356,-0.219929397106171,60.4644813537598,-6.40453100204468,-0.35008579492569,58.7120552062988,-7.50968503952026,-0.349118828773499,58.5352592468262,-7.54023218154907,-0.364377319812775,56.3196563720703,-7.08939933776855,-0.00144085090141743,52.6201858520508,-5.85287761688232,-1.02361262577233e-007,51.9188804626465,-5.5001220703125,-3.83015230909223e-006,51.363037109375,-5.26660108566284,-6.7137269070372e-005,50.9873809814453,-5.21520471572876,0.450963288545609,60.508602142334,3.4765157699585,0.404867559671402,60.425853729248,2.83471751213074, 0.0632549822330475,64.8636856079102,-4.27300882339478,-0.000179281443706714,50.8601722717285,-5.14019870758057,-3.47588324546814,61.0890274047852,0.217192783951759,-3.13839221000671,60.2152214050293,1.27245187759399,-3.94175624847412,61.3892822265625,-1.02181816101074,-2.91735887527466,59.1593780517578,2.10521245002747,-2.83891701698303,58.7850646972656,2.45940685272217,-3.85023283958435,57.039306640625,3.17870736122131,-3.35745644569397,58.208324432373,3.05376410484314,5.02010917663574,62.7402877807617,-1.39398121833801,5.98073148727417,62.2920417785645,-1.40944695472717,5.84480476379395,62.2485504150391,-2.79916501045227,4.58750486373901,62.9180603027344,-2.72233581542969,4.53454971313477,61.3680229187012,1.36474180221558,4.92724514007568,60.9556922912598,1.27796185016632,5.0937385559082,62.0548629760742,0.0335866399109364,4.84226131439209,62.5096626281738,0.0284772422164679,5.66547679901123,60.236644744873,2.65287804603577,5.82473182678223,60.7616577148438,1.96561753749847,5.06012487411499,61.0619354248047,2.02747178077698,4.88142251968384,60.5746269226074,2.7082257270813,4.07134485244751,59.1249313354492,4.05896949768066,5.13338470458984,58.7922744750977,3.95445871353149,3.87628078460693,59.0928039550781,3.98929190635681,4.1595983505249,59.9627342224121,3.17825675010681,2.93709421157837,60.2275314331055,3.31373262405396,2.72253322601318,59.331241607666,4.07821607589722,1.9496830701828,59.6775894165039,5.08236646652222,1.97389197349548,60.7787818908691,4.94828033447266,6.77855348587036,61.7928314208984,-1.46116161346436,6.70602655410767,61.6963119506836,-2.89358234405518,5.71692848205566,60.6736068725586,1.24707210063934,6.60397052764893,60.2781143188477,1.19995760917664,6.74615859985352,61.3173828125,-0.0873100385069847,5.94421911239624,61.7127494812012,-0.0737143903970718,6.7779107093811,59.1712684631348,1.85087597370148,7.01390647888184,60.2320327758789,1.13271343708038,6.25608396530151,59.2223815917969,1.91877949237823,3.5621395111084,58.1640663146973,4.66100358963013,2.31515717506409,58.0082550048828,4.99951696395874, 1.9252108335495,58.3083686828613,5.2624683380127,6.61228370666504,61.2721672058105,-4.31486797332764,5.78448820114136,61.620491027832,-4.26886224746704,7.6016001701355,60.1066246032715,0.972079873085022,7.56118869781494,59.9352760314941,0.778364241123199,7.84638595581055,60.8078804016113,-0.306033760309219,7.84799766540527,61.0181465148926,-0.17617954313755,1.84402525424957,57.2621192932129,5.42611074447632,7.84366416931152,56.018798828125,2.73109889030457,7.86818790435791,56.0672607421875,3.04531097412109,7.81051063537598,55.2174682617188,3.32655167579651,7.76036882400513,55.0956077575684,2.4961199760437,7.52259826660156,58.2982444763184,-5.84445095062256,7.47733116149902,58.3895835876465,-6.01985549926758,7.74510812759399,58.4728469848633,-5.98513507843018,7.77278757095337,58.396900177002,-5.70114850997925,8.0009765625,53.3985481262207,1.69253599643707,8.34988784790039,52.8600234985352,-0.242909118533134,8.18604564666748,52.8621520996094,-0.427325069904327,7.79039335250854,53.4825401306152,1.65745162963867,6.76972055435181,53.78125,4.58681106567383,6.74381017684937,52.4613380432129,4.63611125946045,7.25243473052979,53.4489440917969,4.23940467834473,7.68194818496704,55.0910224914551,3.6018500328064,5.40927171707153,55.2473602294922,-6.6052680015564,6.67838954925537,54.8764305114746,-6.32514047622681,6.1772665977478,53.3371505737305,-5.64527893066406,5.27864599227905,53.0355377197266,-5.73614311218262,6.51485586166382,52.558177947998,-4.9832935333252,7.3298282623291,53.212947845459,-4.86323070526123,6.85315132141113,51.4256782531738,-4.15692138671875,6.02868127822876,51.4665603637695,-4.66744089126587,8.04285430908203,51.997142791748,-1.87290894985199,7.8516902923584,51.2169647216797,-1.67703640460968,7.4989013671875,51.2678337097168,-3.12093544006348,7.84028339385986,52.4213790893555,-3.53092503547668,7.39905166625977,53.0712471008301,2.81852841377258,6.99802494049072,52.0388793945313,3.06340503692627,7.4852933883667,51.7712135314941,1.84239041805267,7.74805688858032,52.7701301574707,1.74453580379486,2.49818396568298,55.5261459350586,5.98455810546875, 1.59213578701019,52.2858848571777,6.59295415878296,3.31338953971863,53.8208084106445,6.13590621948242,1.00655484199524,51.987133026123,6.87206411361694,4.69296979904175,51.7932968139648,-5.0672492980957,5.59105348587036,50.501651763916,-4.26247692108154,4.19015407562256,51.1079292297363,-4.80176305770874,6.42200231552124,50.2364692687988,-3.64404988288879,7.53672075271606,50.1936721801758,-1.29669344425201,7.11090564727783,50.1742286682129,-2.65364718437195,7.1360936164856,50.606201171875,1.96596682071686,7.47889614105225,50.4056777954102,0.423853397369385,7.86668872833252,51.4170875549316,0.213643938302994,6.53962087631226,50.8843116760254,3.36214828491211,6.75999784469604,52.2459869384766,4.53328800201416,6.17791032791138,51.0448303222656,4.98255777359009,5.08084535598755,49.6625213623047,-3.84669017791748,3.74644875526428,50.4024467468262,-4.53450059890747,5.94028806686401,49.2121620178223,-3.16044616699219,7.05950546264648,48.9649200439453,-0.944683134555817,6.69013833999634,49.0631523132324,-2.19327402114868,6.71513605117798,49.3276290893555,2.09133768081665,7.02219152450562,49.0446014404297,0.570955514907837,2.5901517868042,51.0738487243652,6.59761619567871,2.01463341712952,50.7975616455078,6.85545969009399,3.00734329223633,49.3213005065918,6.79381513595581,3.55670809745789,49.7771186828613,6.50012254714966,5.84528207778931,48.3474311828613,-2.86912393569946,4.86086177825928,49.2681350708008,-3.67572164535522,6.74047231674194,48.0109100341797,-0.690348029136658,6.37699508666992,48.1191711425781,-1.82168889045715,6.5790491104126,47.9910316467285,2.10320591926575,6.82137680053711,47.9547271728516,0.649383008480072,6.2605767250061,49.3998908996582,3.63599109649658,6.25825023651123,47.9997749328613,3.76794600486755,6.0664758682251,49.4155921936035,4.18459320068359,5.70988321304321,48.045711517334,4.83565807342529,5.45038986206055,49.5616111755371,5.51070880889893,4.90697479248047,48.1723861694336,5.999587059021,6.63816022872925,46.9563903808594,-0.53816032409668,6.3240818977356,46.956859588623,-1.68728601932526, 6.67517042160034,46.9568786621094,2.07415676116943,6.80337762832642,46.9570121765137,0.677764475345612,6.44183683395386,46.9564170837402,3.87416291236877,5.754075050354,46.9542045593262,5.3130898475647,4.68217277526855,46.987190246582,6.47571086883545,6.23777198791504,46.8432350158691,-1.71467792987823,6.5817289352417,46.8283920288086,-0.480123966932297,6.20514297485352,46.4165267944336,-0.0732569992542267,5.16316509246826,46.4165267944336,-2.17705488204956,6.74122285842896,46.8339805603027,0.608995020389557,6.63257074356079,46.8119354248047,2.06915068626404,6.32486486434937,46.4132232666016,2.051598072052,6.40335369110107,46.8159294128418,3.8705472946167,6.11156702041626,46.4165267944336,3.76737928390503,5.7106761932373,46.8290863037109,5.30437707901001,5.29440116882324,46.4165306091309,5.02038335800171,5.82818698883057,52.3400382995605,5.46586132049561,6.11576223373413,51.1763458251953,5.13107061386108,4.62575817108154,50.9086380004883,6.09249019622803,5.34580421447754,49.7185516357422,5.73114681243896,6.88634872436523,55.2414398193359,4.26491832733154,7.81537961959839,56.4428901672363,3.10454225540161,5.42916774749756,53.7004776000977,5.59347772598267,3.90357780456543,52.3780746459961,6.16836404800415,4.51044845581055,48.5544815063477,6.20508909225464,6.60144710540771,56.7064781188965,4.13254833221436,7.42722702026367,57.8029670715332,2.94404196739197,4.89352321624756,55.1826019287109,5.48351907730103,5.78202342987061,57.2390213012695,4.32452249526978,4.67166042327881,57.801399230957,4.58475971221924,4.01073789596558,56.894344329834,5.16899347305298,6.15560865402222,57.9998016357422,3.74463558197021,6.92412900924683,58.5149536132813,2.88590669631958,7.38834810256958,61.5227546691895,-2.88627982139587,7.32209014892578,61.0654411315918,-4.30384731292725,7.17171764373779,58.7724380493164,1.70093142986298,7.20097732543945,58.8823394775391,1.84825837612152,6.95743131637573,58.6734466552734,2.02751755714417,6.91365003585815,58.4868774414063,1.95597612857819,2.29422402381897,60.406494140625,3.33521890640259,2.62562608718872,60.4076957702637,3.42470979690552, 2.8831045627594,60.3096923828125,3.16574025154114,2.35357308387756,60.2916717529297,2.62549471855164,2.43926358222961,59.4155426025391,4.22939109802246,2.70725798606873,60.3175086975098,3.5247802734375,2.17027854919434,58.2606430053711,4.94453430175781,3.87157917022705,47.958366394043,6.67540216445923,1.73453235626221,60.8194580078125,4.67773103713989,1.92173361778259,60.8772926330566,4.8870964050293,1.60810160636902,60.6451683044434,4.7230052947998,2.17018938064575,60.2866172790527,3.4840943813324,1.90597474575043,50.7140579223633,6.8419189453125,0.925008773803711,51.8707427978516,6.86490345001221,0.874659955501556,51.203067779541,6.4936408996582,1.50750613212585,50.2555236816406,6.44406890869141,2.91349101066589,49.2260704040527,6.78604793548584,2.45935893058777,48.8440933227539,6.41992044448853,3.25709509849548,47.6898155212402,6.37077903747559,3.75853896141052,47.8829345703125,6.66740322113037,4.11207056045532,46.4815940856934,6.2824501991272,4.50787830352783,46.8712158203125,6.50769376754761,7.06748962402344,58.6041259765625,-6.51940870285034,5.58650636672974,58.1526374816895,-6.70998191833496,6.5185112953186,60.2055053710938,-5.42098045349121,7.20817947387695,59.9226379394531,-5.44320011138916,7.85527229309082,60.0032234191895,-5.18264484405518,7.86182594299316,59.8730316162109,-4.99195289611816,5.90363550186157,46.9726486206055,-2.72434210777283,8.0023193359375,52.8689422607422,-3.46774172782898,8.18311977386475,52.5618095397949,-2.12080335617065,8.31355285644531,52.5244979858398,-2.01270055770874,8.17157459259033,52.8635215759277,-3.48772740364075,7.97537708282471,61.1363525390625,-1.54216086864471,7.97375965118408,61.4459686279297,-1.54156196117401,8.06719875335693,52.2686042785645,0.0422511026263237,1.74116504192352,50.9104499816895,-5.18946409225464,1.69455194473267,50.938419342041,-5.19785785675049,1.76796686649323,51.315559387207,-5.25972318649292,2.33868432044983,51.3983879089355,-5.23276329040527,3.34593772888184,55.9631690979004,-6.91077470779419,4.4542236328125,55.5674438476563,-6.72269487380981,4.11547374725342,52.8102531433105,-5.79912376403809, 3.04623699188232,52.662525177002,-5.80529499053955,4.7768440246582,60.404712677002,-5.57990789413452,5.75010442733765,60.3498764038086,-5.41351699829102,4.75339508056641,58.1296501159668,-6.84774398803711,4.71762418746948,62.1518669128418,-4.2306342124939,1.50592255592346,64.7639465332031,-4.21869039535522,1.46053183078766,64.7778167724609,-4.10143899917603,2.88753223419189,64.5600814819336,-3.41674184799194,2.93297648429871,64.5461273193359,-3.53721570968628,3.12937784194946,64.4551162719727,-3.81544661521912,3.40257287025452,63.2086334228516,-4.04134321212769,1.73337090015411,63.3685760498047,-4.71644878387451,1.62099945545197,64.6712875366211,-4.55404853820801,7.92197704315186,60.6803283691406,-4.07929086685181,7.9223952293396,60.8714447021484,-4.21751689910889,7.98260641098022,61.3034210205078,-2.85725903511047,7.9803261756897,61.0462760925293,-2.775066614151,3.25250363349915,49.7038879394531,-4.46881198883057,4.53436708450317,48.4554595947266,-3.65795111656189,4.00473260879517,48.0447540283203,-3.33397936820984,5.85138654708862,46.840446472168,-2.67395663261414,7.07243394851685,58.3854103088379,-6.09397554397583,7.17485189437866,56.4456405639648,-6.08475971221924,5.64443731307983,57.2957077026367,-6.22380256652832,5.69429159164429,57.9599113464355,-6.22372102737427,5.54111957550049,57.1751289367676,-6.69997549057007,4.7143702507019,57.6415023803711,-6.84087228775024,1.65925490856171,50.8022842407227,-5.12830448150635,4.62409734725952,48.5692176818848,-3.68546772003174,3.3447380065918,49.8112754821777,-4.51331520080566,4.89040231704712,52.1094703674316,-5.17248201370239,3.83429098129272,52.0528259277344,-5.27164268493652,2.69767594337463,51.9788131713867,-5.39102792739868,4.40495777130127,63.4857749938965,-1.2625036239624,4.30352926254272,63.4948043823242,-1.22033095359802,4.4049711227417,62.6396560668945,0.00955635961145163,4.5124077796936,62.6168365478516,0.012831655330956,4.14361429214478,61.5459403991699,1.22779977321625,4.23402643203735,61.5192489624023,1.25594413280487,3.65562963485718,59.9942283630371,2.31590938568115, 3.79219460487366,59.971736907959,2.31575870513916,6.50562334060669,59.8179397583008,2.55847120285034,6.01156568527222,58.2197151184082,3.79637217521667,6.67060565948486,60.3972473144531,1.90033161640167,4.06411933898926,60.0404319763184,2.50520944595337,4.48241949081421,59.9301567077637,2.40133738517761,7.37859296798706,61.6188278198242,-1.50121402740479,7.25604486465454,61.1647911071777,-0.102911353111267,6.50256204605103,59.056999206543,2.81944441795349,6.35826969146729,59.3149490356445,2.721843957901,4.45006227493286,60.1294288635254,3.09820365905762,4.2816104888916,60.0736389160156,3.10226726531982,3.69943690299988,64.1516723632813,-2.49848079681396,3.79356122016907,64.1546859741211,-2.54490923881531,6.93305683135986,56.4514427185059,-6.45735263824463,7.1187219619751,54.7801704406738,-5.70982217788696,7.65068674087524,55.986930847168,-5.7503662109375,7.90676307678223,55.8224563598633,-5.73489713668823,7.90906000137329,55.8690299987793,-5.89676713943481,7.6163010597229,56.0209197998047,-5.96489715576172,4.72273540496826,63.3855476379395,-1.41784250736237,4.089439868927,64.0286712646484,-2.69076085090637,1.74827790260315,62.6680641174316,-4.92615270614624,3.56462407112122,62.6922607421875,-4.14599704742432,1.63201665878296,61.5764808654785,-4.92748069763184,1.40187895298004,64.8462982177734,-3.8428521156311,3.62237238883972,61.0065078735352,-4.19728803634644,2.7155454158783,64.6137237548828,-3.24273586273193,3.50488996505737,64.2255172729492,-2.33936190605164,4.45189476013184,61.1947822570801,-2.68833804130554,3.71968483924866,60.4444808959961,-5.7619457244873,1.90570795536041,60.4547576904297,-6.41312456130981,1.78253972530365,61.7714767456055,-5.52064943313599,3.61369633674622,62.0756454467773,-4.80508089065552,3.71505951881409,58.2266159057617,-6.91692638397217,2.06690287590027,58.582202911377,-7.62780857086182,1.87300276756287,56.233268737793,-7.22203969955444,2.06480956077576,58.3997421264648,-7.66275072097778,3.69810247421265,58.0395393371582,-6.9608006477356,1.80736494064331,52.627140045166,-5.84420299530029, 1.77482128143311,51.9207649230957,-5.47108364105225,1.52690613269806,64.8366775512695,-4.26401567459106,2.95424270629883,64.5884246826172,-3.56131982803345,3.82105803489685,64.2137298583984,-2.55882334709167,4.44773387908936,63.5705223083496,-1.23381400108337,4.56020164489746,62.7150917053223,0.00521660875529051,4.29055643081665,61.5549163818359,1.28767418861389,3.820068359375,60.0989570617676,2.32900953292847,4.23661613464355,63.6394309997559,-1.14201641082764,3.61627316474915,64.2777328491211,-2.4211540222168,4.08088636398315,63.5692825317383,-1.11106669902802,4.32959079742432,62.8111572265625,0.0554711557924747,4.19177198410034,62.8257484436035,0.0203920770436525,3.89149308204651,61.7367897033691,1.08955907821655,4.06670093536377,61.7141036987305,1.15627789497375,3.31134176254272,59.9511604309082,2.35199689865112,3.51177382469177,60.1359214782715,2.34523463249207,1.44212925434113,64.9041900634766,-3.95878839492798,2.79005265235901,64.6661758422852,-3.32087755203247,4.59750556945801,61.2975196838379,-1.33271491527557,4.44407510757446,60.9020805358887,-0.050418708473444,3.9542498588562,60.0511589050293,1.02145600318909,3.58570837974548,59.1861000061035,2.14514493942261,7.46005249023438,60.1870269775391,1.06176793575287,7.72928524017334,61.1218643188477,-0.099658414721489,7.4911060333252,61.1335639953613,-0.107961818575859,7.23469543457031,60.211742401123,1.09636998176575,7.6026177406311,61.6010932922363,-1.50467109680176,7.85354232788086,61.5832023620605,-1.52880024909973,7.58060598373413,61.024974822998,-4.29792022705078,7.83845376968384,61.0277900695801,-4.30706691741943,7.75668811798096,60.0238265991211,-5.34664630889893,7.5037727355957,60.0469360351563,-5.33866596221924,7.37802457809448,58.5030746459961,-6.12875556945801,7.65302801132202,58.5042724609375,-6.13754463195801,7.5514497756958,56.0784530639648,-6.00459623336792,7.39580821990967,58.3873252868652,-6.05571556091309,7.56811094284058,55.8945083618164,-6.07503032684326,7.72437191009521,55.8604278564453,-6.10517883300781,7.94746828079224,53.4626121520996,-4.68562650680542, 8.12087535858154,52.6563034057617,-3.59320259094238,7.98409414291382,52.6108474731445,-3.61697459220886,7.79246187210083,53.4315605163574,-4.71312999725342,8.32955551147461,52.3089904785156,-1.95941710472107,8.19500160217285,52.1938438415527,-1.93116629123688,8.35969161987305,52.6222801208496,-0.128375396132469,8.17062091827393,52.446907043457,-0.0797580704092979,7.54251289367676,53.2749137878418,2.70170998573303,7.8333420753479,52.9743881225586,1.73005509376526,7.98573923110962,53.232494354248,1.71330320835114,7.67541980743408,53.5338287353516,2.68187379837036,7.14839839935303,59.0544967651367,1.82258713245392,6.9647159576416,59.127742767334,1.83381080627441,7.88196182250977,61.4802398681641,-2.89073824882507,7.88646030426025,54.7431411743164,-5.30194425582886,8.00986385345459,54.6648483276367,-5.39890146255493,7.4752779006958,60.6076583862305,-3.99723291397095,7.43943119049072,59.6744346618652,-4.89964628219604,7.51739263534546,61.0375709533691,-1.51349818706512,7.52377939224243,60.9528846740723,-2.7441828250885,7.14563941955566,59.8961524963379,0.73099958896637,7.39199209213257,60.7515411376953,-0.363818407058716,6.97304630279541,58.852725982666,1.59043073654175,7.54417419433594,53.7861213684082,2.64293193817139,7.55737066268921,53.504020690918,1.63623857498169,7.32090377807617,53.7854270935059,2.61769080162048,7.75661754608154,52.5243797302246,-2.16908431053162,7.91260290145874,52.9445953369141,-0.47870346903801,7.62479257583618,52.7934036254883,-3.5379102230072,7.93610763549805,53.7130928039551,-4.43796062469482,7.46001863479614,53.6113471984863,-4.54856824874878,7.32284927368164,58.3012428283691,-5.56446504592896,6.91650867462158,59.1238822937012,1.64534842967987,7.12459278106689,60.1227226257324,1.00286984443665,7.82696485519409,52.5805435180664,-3.59217143058777,8.0003719329834,52.1331100463867,-1.9022125005722,7.38473224639893,59.9482002258301,-5.25951147079468,7.44957780838013,60.9518547058105,-4.23299884796143,7.60987138748169,53.4526710510254,-4.67666912078857,7.62339115142822,53.471435546875,-4.66339111328125, 7.97040414810181,52.3984222412109,-0.0770895406603813,7.6742148399353,52.8929214477539,1.74059414863586,7.45490074157715,53.1620025634766,2.69405269622803,7.28658056259155,58.4743881225586,-6.07923126220703,7.12813520431519,58.4115791320801,-6.11802101135254,7.48142004013062,61.4747543334961,-1.50783348083496,7.50276231765747,61.386604309082,-2.86380004882813,7.36917638778687,61.0432739257813,-0.167612627148628,7.61826324462891,61.505558013916,-2.88692474365234,7.29809474945068,56.1448822021484,-6.0284366607666,7.17253828048706,58.3644065856934,-6.02467107772827,7.49792051315308,54.4862670898438,-5.41966819763184,7.64897298812866,54.4940605163574,-5.52677631378174,6.84884357452393,59.0268630981445,1.89198553562164,7.32031297683716,55.9670791625977,-6.02316665649414,7.46523427963257,54.4825439453125,-5.43019723892212,7.42112350463867,55.9880981445313,-5.96717405319214,7.85625123977661,54.5564002990723,-5.53066444396973,7.71944952011108,55.8298721313477,-5.62672662734985,7.40257692337036,54.5230598449707,-5.19606494903564,7.45128011703491,55.952320098877,-5.53696393966675,7.31318140029907,58.2525405883789,-5.79890871047974,7.67960977554321,53.6778106689453,2.66356253623962,7.33716917037964,53.3778991699219,4.07644844055176,4.58557033538818,46.8244705200195,6.45516347885132,4.18643522262573,46.4173583984375,6.2367730140686,8.0888032913208,53.643497467041,-4.51548433303833,7.30244922637939,53.4554786682129,2.81885719299316,4.15430736541748,60.0445747375488,2.99739599227905,3.07431745529175,60.2833061218262,3.11780214309692,6.51938056945801,59.1384315490723,2.63372302055359,6.42166137695313,59.0671195983887,1.94542253017426,7.88250541687012,56.670524597168,2.90646123886108,7.47096586227417,57.8794250488281,2.75547099113464,6.98250722885132,58.5520515441895,2.70177412033081,7.87610721588135,56.7039985656738,2.56541967391968,3.62003445625305,54.0705528259277,2.01497745513916,4.35950183868408,56.0360908508301,2.3617308139801,7.8411693572998,55.9505004882813,2.3005964756012,7.45279407501221,57.8907775878906,2.48846650123596, 6.97201442718506,58.5410118103027,2.4639265537262,3.77591037750244,60.54150390625,-4.53581762313843,3.75388956069946,59.6579475402832,-5.38537883758545,3.87403392791748,53.0283088684082,-4.10121250152588,4.05640459060669,52.9318008422852,-2.49800205230713,3.67261528968811,53.7791290283203,-5.10175609588623,3.76318836212158,56.1157188415527,-6.03812885284424,3.62933421134949,54.6652641296387,-5.69135808944702,3.64157605171204,58.2273483276367,-6.29494380950928,4.25032615661621,61.0464019775391,-2.80713868141174,3.93137216567993,60.8553848266602,-0.284698814153671,3.68501901626587,59.9999961853027,0.810119271278381,4.24393701553345,61.1310844421387,-1.57645356655121,3.51242613792419,58.9565696716309,1.66955041885376,3.45302963256836,58.5907211303711,2.03509664535522,4.39278316497803,56.8092651367188,2.67253184318542,3.99217295646667,57.9946212768555,2.56758642196655,-1.9451812505722,48.5540313720703,7.05008602142334,-2.88036394119263,47.2062530517578,6.9493350982666,2.00000022232416e-006,47.285816192627,7.22094917297363,3.21344077747199e-006,48.5572471618652,7.20578908920288,-3.66780614852905,46.4437103271484,6.73270893096924,-2.98246002197266,47.3362045288086,6.8494701385498,-3.29654788970947,45.2115325927734,6.20724058151245,-2.97479510307312,45.3718414306641,6.77764701843262,-3.66930103302002,46.3445625305176,6.72885417938232,-4.11189603805542,46.3690757751465,6.27710723876953,-2.94320297241211,43.8507385253906,6.76719856262207,-2.94428610801697,45.2708053588867,6.77928829193115,-3.26226568222046,45.0992164611816,6.20986461639404,-3.16876101493835,43.85009765625,6.33915233612061,-0.557020604610443,50.877254486084,6.89918661117554,3.89344168070238e-005,50.9400787353516,6.95981454849243,-2.1163113117218,48.5933418273926,6.94620084762573,-1.17099833488464,49.9643783569336,6.95489454269409,-2.84906697273254,45.4440536499023,6.8901515007019,1.99999999495049e-006,45.4150581359863,7.22095012664795,-0.468086004257202,50.7088088989258,7.01618194580078,-1.0025759935379,49.9190406799316,7.05751132965088,1.99999999495049e-006,49.9196815490723,7.15778112411499, 1.99999999495049e-006,50.7577705383301,7.07369613647461,-2.73341989517212,43.9191513061523,6.89355516433716,-2.80263996124268,45.261646270752,6.89093923568726,-2.79571104049683,43.9527893066406,6.89077138900757,-2.77869391441345,43.9286155700684,6.8909330368042,0.837190985679626,47.2849349975586,7.16878604888916,2.88017201423645,47.1976318359375,6.94976615905762,1.94533896446228,48.554027557373,7.05293798446655,0.838710308074951,48.5568695068359,7.1693868637085,2.98243093490601,47.3361625671387,6.84954833984375,3.54886031150818,46.446361541748,6.74474096298218,3.28606700897217,45.1828422546387,6.17913007736206,4.11189746856689,46.3690757751465,6.27710056304932,3.55020809173584,46.3415832519531,6.74072933197021,2.97079205513,45.372314453125,6.77908515930176,3.25704121589661,45.0800476074219,6.18504095077515,2.94356989860535,45.2685203552246,6.78080987930298,2.93479108810425,42.5988655090332,6.77791547775269,3.24675297737122,42.5850105285645,6.18504190444946,0.0936160013079643,40.4183006286621,6.31432294845581,1.80426895618439,40.7649269104004,6.17281484603882,1.56931388378143,40.8476257324219,6.78117704391479,0.0940760001540184,40.5215911865234,6.84962701797485,0.55705201625824,50.8772354125977,6.8991756439209,2.11631488800049,48.5933418273926,6.94620180130005,1.17104506492615,49.9643478393555,6.95486879348755,2.8494119644165,45.4549102783203,6.89148092269897,0.837190985679626,45.4196968078613,7.16878700256348,2.78077006340027,42.5592460632324,6.89321994781494,2.80284094810486,45.2339134216309,6.89408779144287,0.944576621055603,42.5303039550781,7.15080547332764,0.956659018993378,41.7727088928223,7.09940958023071,0.527495980262756,50.6699638366699,7.01148223876953,0.616011023521423,49.9191474914551,7.07405233383179,2.90801191329956,41.7502784729004,6.18008518218994,2.64309000968933,41.8141670227051,6.76414060592651,2.52337694168091,41.9013900756836,6.89366817474365,0.922152042388916,41.6571197509766,7.09069061279297,1.45313203334808,40.9517402648926,6.92551517486572,0.837190985679626,43.927433013916,7.16878604888916, 0.813260972499847,42.7279319763184,7.16479253768921,0.15913499891758,40.6518440246582,6.99034643173218,0.794148981571198,41.5362701416016,7.07269096374512,0.0887290015816689,41.374153137207,7.05423450469971,0.0941329970955849,40.6955986022949,6.99861001968384,-3.13838791847229,42.6130409240723,6.32387399673462,-3.26221466064453,44.0694198608398,6.23347902297974,-3.24675226211548,42.5850143432617,6.18504285812378,-0.0795200020074844,40.4146957397461,6.32123184204102,-1.88202798366547,40.7029190063477,6.31644296646118,-1.95030295848846,40.6417236328125,6.1728138923645,0.00137399998493493,40.3522758483887,6.19228601455688,-2.90801095962524,41.6718215942383,6.18008518218994,-2.80467009544373,41.7286109924316,6.31891775131226,-0.0565429963171482,41.5774726867676,6.41380262374878,0.183767005801201,42.8373527526855,6.46496486663818,0.766995012760162,41.7014617919922,6.38969039916992,0.779220998287201,42.5201301574707,6.412926197052,-2.65576696395874,43.816291809082,6.35690927505493,-2.28221297264099,44.7476234436035,6.38247966766357,0.492428988218308,43.7169036865234,6.50650691986084,-2.34957098960876,44.7631492614746,6.80527067184448,-2.63184905052185,43.9335823059082,6.77300977706909,-2.75362801551819,43.8020896911621,6.76373910903931,-2.85343503952026,43.7929992675781,6.7601056098938,-3.08508396148682,43.7641830444336,6.34934329986572,0.0073039997369051,40.5181350708008,6.33164548873901,0.00711399968713522,40.6192741394043,6.86009168624878,0.0021959999576211,41.4194297790527,6.92533683776855,0.0886150002479553,41.5416145324707,6.93843269348145,0.752610981464386,41.6465682983398,6.96640920639038,0.839954078197479,41.7378120422363,6.97836208343506,0.829775989055634,42.4621353149414,7.02978610992432,0.308362007141113,42.9499549865723,7.01195287704468,0.592455983161926,43.6637420654297,7.0512809753418,0.548740029335022,43.797119140625,7.05331707000732,-2.22960901260376,44.834888458252,6.81731414794922,1.00222396850586,49.9190101623535,7.05242395401001,0.712882995605469,43.7436065673828,7.17660188674927,0.436836034059525,42.993408203125,7.14151620864868, 0.44938200712204,42.8950881958008,7.1425633430481,0.760550975799561,42.5867233276367,7.03366994857788,0.349283695220947,42.8066101074219,7.01089096069336,-2.27854204177856,44.9713134765625,6.93464040756226,-2.4537980556488,44.838996887207,6.9288330078125,-2.66944789886475,43.828182220459,6.77966976165771,-3.48061609268188,46.3870391845703,6.85841941833496,3.36415982246399,46.3881607055664,6.86008977890015,0.129004999995232,41.4312324523926,7.06026840209961,0.650452017784119,43.8818321228027,7.17853546142578,0.00137400033418089,44.501277923584,6.19228839874268,-3.24675226211548,44.4756126403809,6.1850438117981,3.24675393104553,44.4756088256836,6.18504190444946,4.35723781585693,44.9269981384277,-3.06430101394653,4.20686101913452,44.5086288452148,-2.60326099395752,3.16264009475708,45.398624420166,-3.16831994056702,3.57114100456238,45.5947380065918,-3.45228695869446,5.55237007141113,43.980396270752,-2.19991302490234,6.67470979690552,43.9787368774414,-0.224023014307022,6.31194019317627,43.7362670898438,-0.0468970015645027,5.23977899551392,43.736270904541,-1.9288409948349,6.90005779266357,43.9754829406738,1.66610896587372,6.53845596313477,43.736270904541,1.6933468580246,6.47570991516113,43.9787483215332,3.77523016929626,6.11093282699585,43.736270904541,3.6173369884491,5.71423721313477,43.9800720214844,5.26094388961792,5.39516019821167,43.736270904541,5.00863409042358,4.5068302154541,43.0173568725586,6.71068477630615,3.8624849319458,44.0270805358887,6.72748899459839,3.86133074760437,43.2510986328125,6.73151302337646,4.1599760055542,43.0165672302246,6.75368595123291,4.41140079498291,45.0878067016602,-3.13809490203857,3.70397090911865,45.7253112792969,-3.48307609558105,3.6730170249939,46.5381202697754,-3.50487089157104,6.74866199493408,44.1178932189941,-0.262822985649109,5.61278676986694,44.1258735656738,-2.25409603118896,6.97845458984375,44.1179275512695,1.66033387184143,6.54842185974121,44.1179313659668,3.80660700798035,5.77661085128784,44.1179275512695,5.30757999420166,5.09513711929321,44.1158256530762,6.08221197128296, 4.96704292297363,46.6533241271973,-2.9723949432373,4.23939514160156,47.4797668457031,-3.46190404891968,5.6166729927063,46.0167655944824,-2.27231693267822,6.7576265335083,46.0249862670898,-0.307812005281448,6.98658800125122,46.0249862670898,1.64253485202789,6.54742813110352,46.023365020752,3.82207179069519,5.7770791053772,46.0249862670898,5.30545997619629,4.52522087097168,45.9979934692383,6.61583089828491,5.02412891387939,46.6864738464355,-2.82322406768799,4.2154974937439,47.717903137207,-3.42620491981506,6.68231153488159,46.1601257324219,-0.273110002279282,5.52933979034424,46.1710929870605,-2.25459098815918,6.90578651428223,46.1637344360352,1.66331815719604,6.4721794128418,46.1696243286133,3.81302690505981,5.71073007583618,46.1610069274902,5.26226902008057,5.20670795440674,43.9803771972656,5.83740520477295,5.0913519859314,43.7362670898438,5.42968511581421,4.50698804855347,44.0270805358887,6.71417999267578,3.87607789039612,44.9406585693359,6.71766185760498,4.46607112884521,46.162181854248,6.55947113037109,3.26401996612549,44.0270805358887,6.30392122268677,3.26221466064453,43.1915435791016,6.26908779144287,3.69603180885315,43.2056159973145,6.66914415359497,3.70050883293152,44.0270805358887,6.67167663574219,3.69871997833252,44.9089088439941,6.65976047515869,3.73038101196289,45.0226974487305,6.6564416885376,4.39459419250488,46.1120834350586,6.60449552536011,4.1795129776001,42.9080085754395,6.08973979949951,4.4638237953186,42.9240798950195,6.62885093688965,4.05561113357544,42.9231109619141,6.67985582351685,3.63112378120422,42.9080848693848,6.22523784637451,4.89740705490112,43.4067001342773,5.70116996765137,5.05598783493042,43.6971015930176,6.0030779838562,4.99314498901367,43.2068557739258,6.0667781829834,4.90012121200562,43.1914596557617,5.69916915893555,3.52447295188904,45.694995880127,-3.47522020339966,3.12204694747925,45.4987182617188,-3.1952600479126,3.47449827194214,46.5611686706543,-3.49852108955383,4.12536478042603,47.728214263916,-3.46878504753113,3.50353479385376,46.6779747009277,-3.49861788749695,4.75802898406982,42.9235229492188,6.33804559707642, 4.64909791946411,42.9079895019531,5.87496423721313,5.02522420883179,43.937801361084,6.16055011749268,4.76127290725708,43.0176582336426,6.45881605148315,4.95539808273315,43.2558250427246,6.22033405303955,6.31194019317627,46.048698425293,-0.0468959994614124,5.23977899551392,46.048698425293,-1.9288409948349,6.53845596313477,46.048698425293,1.69334900379181,6.11093282699585,46.048698425293,3.6173369884491,5.39516019821167,46.048698425293,5.00863313674927,4.20467329025269,46.8199806213379,-2.60328888893127,5.0913519859314,46.048698425293,5.42968320846558,4.64909791946411,45.2204208374023,5.87496185302734,3.63112378120422,45.220516204834,6.22523498535156,4.90012121200562,45.5038909912109,5.69916582107544,3.63112378120422,44.0643005371094,6.22523641586304,4.64909791946411,44.0360984802246,5.87496280670166,4.18724584579468,44.0952682495117,6.05039691925049,4.17664241790771,45.2204666137695,6.0375280380249,-4.35723781585693,44.9269981384277,-3.06429600715637,-3.57114100456238,45.5947341918945,-3.45228290557861,-3.16264033317566,45.3986282348633,-3.16831612586975,-4.20686149597168,44.5086250305176,-2.60325527191162,-5.55237007141113,43.980396270752,-2.1999089717865,-5.23977899551392,43.736270904541,-1.92883586883545,-6.31194114685059,43.7362670898438,-0.0468919984996319,-6.67470979690552,43.9787368774414,-0.224019005894661,-6.90005731582642,43.9754791259766,1.66611385345459,-6.53845596313477,43.7362670898438,1.69335186481476,-6.47570991516113,43.9787483215332,3.77523493766785,-6.11093282699585,43.736270904541,3.61734175682068,-5.71423721313477,43.9800682067871,5.26094913482666,-5.39516019821167,43.736270904541,5.00863885879517,-3.86133074760437,43.2510986328125,6.73151588439941,-3.8624849319458,44.0270805358887,6.72749376296997,-4.5068302154541,43.0173568725586,6.71069049835205,-4.1599760055542,43.0165634155273,6.75369119644165,-3.6730170249939,46.5381202697754,-3.50486707687378,-3.70397090911865,45.7253112792969,-3.48307180404663,-4.41140079498291,45.0878067016602,-3.13809108734131,-5.61278676986694,44.1258735656738,-2.25409197807312, -6.74866199493408,44.1178932189941,-0.262818992137909,-6.97845458984375,44.1179275512695,1.66033899784088,-6.54842185974121,44.1179275512695,3.80661201477051,-5.77661085128784,44.1179275512695,5.30758476257324,-5.09513711929321,44.1158256530762,6.08221578598022,-4.96704292297363,46.6533241271973,-2.97239089012146,-4.23939514160156,47.4797630310059,-3.46189999580383,-5.6166729927063,46.0167655944824,-2.27231311798096,-6.7576265335083,46.0249824523926,-0.307808011770248,-6.98658990859985,46.0249977111816,1.64253950119019,-6.5467529296875,46.0249862670898,3.82645010948181,-5.7770791053772,46.0249862670898,5.30546522140503,-4.52522087097168,45.997989654541,6.61583709716797,-4.21549797058105,47.717903137207,-3.42620134353638,-5.02412891387939,46.6864738464355,-2.82322001457214,-5.52933979034424,46.1710929870605,-2.25458693504334,-6.68231153488159,46.1601219177246,-0.273106008768082,-6.90578651428223,46.1637344360352,1.66332304477692,-6.4721794128418,46.1696243286133,3.81303095817566,-5.71073007583618,46.1610069274902,5.26227378845215,-5.0913519859314,43.7362670898438,5.42968893051147,-5.20670700073242,43.9803771972656,5.83740901947021,-4.50698804855347,44.0270805358887,6.71418523788452,-3.87607789039612,44.9406547546387,6.71766710281372,-4.46607112884521,46.162181854248,6.55947637557983,-3.70050883293152,44.0270805358887,6.67168140411377,-3.69603180885315,43.2056159973145,6.66914796829224,-3.26221466064453,43.1915435791016,6.26909208297729,-3.69871997833252,44.9089088439941,6.65976428985596,-4.39459419250488,46.1120834350586,6.60450220108032,-3.73038101196289,45.0226974487305,6.65644645690918,-4.1795129776001,42.9080085754395,6.08974409103394,-3.63112378120422,42.9080848693848,6.22524213790894,-4.05561113357544,42.9231109619141,6.67986106872559,-4.4638237953186,42.9240798950195,6.62885522842407,-4.89740705490112,43.4067001342773,5.70117378234863,-4.90012121200562,43.1914596557617,5.69917297363281,-4.99314498901367,43.2068557739258,6.06678199768066,-5.05598783493042,43.6970977783203,6.00308179855347,-3.52447295188904,45.6949920654297,-3.47521591186523, -3.47449827194214,46.5611686706543,-3.49851703643799,-3.12204694747925,45.4987144470215,-3.19525599479675,-3.50353479385376,46.6779747009277,-3.49861311912537,-4.12536478042603,47.728214263916,-3.46878027915955,-4.75802898406982,42.9235229492188,6.338050365448,-4.64909791946411,42.9079895019531,5.87496900558472,-4.76127290725708,43.0176582336426,6.45881986618042,-5.02522420883179,43.937801361084,6.16055393218994,-4.95539808273315,43.2558250427246,6.22033786773682,-6.31194114685059,46.048698425293,-0.0468919984996319,-5.23977947235107,46.048698425293,-1.92883563041687,-6.53845596313477,46.0486946105957,1.69335401058197,-6.11093282699585,46.048698425293,3.61734104156494,-5.39516019821167,46.048698425293,5.00863790512085,-4.21931791305542,46.8235893249512,-2.58396697044373,-5.0913519859314,46.048698425293,5.42968797683716,-4.64909791946411,45.2204170227051,5.87496709823608,-3.63112378120422,45.220516204834,6.2252402305603,-4.90012121200562,45.5038909912109,5.69917106628418,-3.26221466064453,45.2414894104004,6.18593168258667,2.03844881057739,68.1314392089844,4.71636962890625,2.05418825149536,68.0794219970703,4.76884031295776,2.12670016288757,68.0813217163086,4.76280927658081,2.13114523887634,68.1338043212891,4.70866203308105,2.19507813453674,68.0568237304688,4.75808525085449,2.25008773803711,68.0092468261719,4.75530862808228,2.28430032730103,67.9450073242188,4.75485610961914,2.29309630393982,67.8727798461914,4.75678539276123,2.27528381347656,67.8023223876953,4.76083755493164,2.32086563110352,67.7770233154297,4.70616626739502,2.23327350616455,67.7431411743164,4.76646614074707,2.26711440086365,67.701416015625,4.71336317062378,2.17273592948914,67.7032470703125,4.77291059494019,2.10184621810913,67.6880340576172,4.77929925918579,2.03018355369568,67.6995162963867,4.78476858139038,2.00745582580566,67.6458053588867,4.73675870895386,1.96742045879364,67.7361755371094,4.78858423233032,1.92725241184235,67.6927185058594,4.74163007736206,1.92203557491302,67.7930603027344,4.79022836685181,1.86928141117096,67.7654724121094,4.74372434616089, 1.90016043186188,67.8624725341797,4.78947591781616,1.84137117862701,67.8542327880859,4.74275922775269,1.90474617481232,67.9350509643555,4.78643226623535,1.847292304039,67.9470062255859,4.73886489868164,1.93517506122589,68.0009918212891,4.7815089225769,1.88624346256256,68.0312652587891,4.73256587982178,1.98733770847321,68.0513763427734,4.77536773681641,1.95296609401703,68.0956497192383,4.72471523284912,2.07810592651367,67.9858093261719,4.81110239028931,2.11499071121216,67.9867706298828,4.80803298950195,2.14977192878723,67.9743194580078,4.80562925338745,2.17775440216064,67.9501266479492,4.80421733856201,2.19515538215637,67.9174423217773,4.80398750305176,2.19962882995605,67.8806915283203,4.80496883392334,2.19057011604309,67.8448638916016,4.80702972412109,2.16919946670532,67.8147659301758,4.80989170074463,2.1384072303772,67.7944564819336,4.81317090988159,2.1023485660553,67.7867279052734,4.81642007827759,2.06589555740356,67.7925643920898,4.81920480728149,2.03397178649902,67.8112258911133,4.82114267349243,2.01088571548462,67.8401565551758,4.82197904586792,1.99975907802582,67.8754653930664,4.82159662246704,2.00209093093872,67.9123840332031,4.82005023956299,2.01756978034973,67.945930480957,4.81754398345947,2.04410243034363,67.9715576171875,4.81442022323608,2.26357483863831,68.1887893676758,4.60977554321289,2.14037084579468,68.2330932617188,4.61827802658081,2.21853685379028,68.1024398803711,4.70262718200684,2.36262941360474,68.1028823852539,4.60478496551514,2.28882169723511,68.0415725708008,4.69908380508423,2.42415642738342,67.9870071411133,4.60398387908936,2.33250641822815,67.9594192504883,4.69850826263428,2.43984627723694,67.8567886352539,4.60747480392456,2.34369158744812,67.8670883178711,4.70098161697388,2.40758061408997,67.7298278808594,4.61479139328003,2.33171582221985,67.6232604980469,4.62494516372681,2.22249889373779,67.5514907836914,4.63656139373779,2.18969225883484,67.6504592895508,4.72160148620605,2.0946786403656,67.5241928100586,4.6480770111084,2.09906029701233,67.6310577392578,4.72976684570313,1.96552002429962,67.5450668334961,4.65792894363403, 1.85246551036835,67.6113052368164,4.66479301452637,1.77078425884247,67.7139358520508,4.66774082183838,1.73150682449341,67.8391189575195,4.66637134552002,1.73993837833405,67.9699325561523,4.66087293624878,1.79494035243988,68.0887222290039,4.6519889831543,1.88908398151398,68.1794357299805,4.64091300964355,2.00965571403503,68.2298355102539,4.62914705276489,2.29062795639038,68.2429504394531,4.53268909454346,2.14468884468079,68.2954483032227,4.54275846481323,2.40796232223511,68.1412124633789,4.52677392959595,2.48084354400635,68.0039367675781,4.52582359313965,2.49942827224731,67.8496780395508,4.52996158599854,2.46120810508728,67.6992874145508,4.53862953186035,2.37134337425232,67.5730590820313,4.55065488815308,2.24197125434875,67.488037109375,4.56441736221313,2.0905647277832,67.4557037353516,4.57805633544922,1.93757116794586,67.4804458618164,4.5897274017334,1.80365431308746,67.5588989257813,4.59785890579224,1.70689928531647,67.6804809570313,4.60134840011597,1.66037392616272,67.8287658691406,4.59972667694092,1.67036104202271,67.9837188720703,4.59321308135986,1.7355135679245,68.1244354248047,4.58268737792969,1.84703052043915,68.2318878173828,4.56956911087036,1.98985159397125,68.2915802001953,4.55563402175903,2.30957412719727,68.2843017578125,4.44576740264893,2.1458683013916,68.3431777954102,4.45706796646118,2.44119143486023,68.170166015625,4.43913745880127,2.52294492721558,68.0161819458008,4.43807029724121,2.54379224777222,67.8431625366211,4.44271183013916,2.50091958045959,67.6744613647461,4.45243501663208,2.40011501312256,67.5328598022461,4.4659252166748,2.25499439239502,67.4374923706055,4.48136138916016,2.08515572547913,67.4012222290039,4.49665832519531,1.91353785991669,67.4289703369141,4.50975227355957,1.76331794261932,67.516975402832,4.51887226104736,1.65478467941284,67.6533584594727,4.52278709411621,1.60259556770325,67.8196868896484,4.52097129821777,1.61379909515381,67.9935073852539,4.51366329193115,1.68688297271729,68.1513519287109,4.50185585021973,1.81197583675385,68.2718963623047,4.48714160919189,1.97218191623688,68.3388442993164,4.47150850296021, 2.32086038589478,68.3233871459961,4.25451898574829,2.13876128196716,68.3888778686523,4.26708793640137,2.46726417541504,68.1964263916016,4.24714183807373,2.55820322036743,68.0251541137695,4.24595880508423,2.58139300346375,67.8326797485352,4.25111961364746,2.53370261192322,67.64501953125,4.26193523406982,2.4215726852417,67.4875183105469,4.27694129943848,2.26014852523804,67.3814315795898,4.29411125183105,2.07122921943665,67.3410949707031,4.31112957000732,1.88032972812653,67.3719635009766,4.32569408416748,1.71323370933533,67.4698486328125,4.33583784103394,1.59250628948212,67.6215515136719,4.34019422531128,1.53445327281952,67.8065719604492,4.33817100524902,1.54691541194916,67.9999160766602,4.33004283905029,1.62820971012115,68.1754989624023,4.31690883636475,1.7673567533493,68.3095779418945,4.30053997039795,1.94556367397308,68.3840560913086,4.28315162658691,2.10303449630737,67.8890228271484,4.85801267623901,-0.401673823595047,68.2626037597656,4.81145429611206,-0.333675175905228,68.2515182495117,4.80779314041138,-0.492083430290222,68.2955322265625,4.76572847366333,-0.469050973653793,68.2483596801758,4.81560564041138,-0.565762519836426,68.2473220825195,4.7709493637085,-0.526709139347076,68.210693359375,4.81968927383423,-0.566860020160675,68.1547012329102,4.82315301895142,-0.584085166454315,68.0879287719727,4.82552909851074,-0.6286860704422,68.0027618408203,4.7796425819397,-0.576050519943237,68.019416809082,4.82649564743042,-0.587471961975098,67.9247817993164,4.77890682220459,-0.54384970664978,67.9583969116211,4.82592344284058,-0.520929932594299,67.8669509887695,4.7763032913208,-0.491825878620148,67.9131240844727,4.82388973236084,-0.438049018383026,67.8370819091797,4.77218246459961,-0.427004039287567,67.8897171020508,4.82066822052002,-0.350022345781326,67.8391876220703,4.76710271835327,-0.358147501945496,67.8913116455078,4.81669425964355,-0.268739879131317,67.8729934692383,4.76174640655518,-0.29454579949379,67.917724609375,4.81250524520874,-0.205177009105682,67.9339447021484,4.75684022903442,-0.244792744517326,67.9653625488281,4.80866718292236, -0.167918771505356,68.0137939453125,4.75304555892944,-0.215609461069107,68.0278167724609,4.80569553375244,-0.210934340953827,68.0966186523438,4.80399560928345,-0.231399670243263,68.1625137329102,4.80379486083984,-0.243023544549942,68.2550659179688,4.75231981277466,-0.274243175983429,68.2165756225586,4.80512046813965,-0.397167980670929,68.1712265014648,4.85259628295898,-0.362578332424164,68.1655883789063,4.85073518753052,-0.431439906358719,68.1639862060547,4.85470724105835,-0.460768967866898,68.1448211669922,4.85678434371948,-0.481190860271454,68.1163482666016,4.85854816436768,-0.489952266216278,68.0823822021484,4.85975456237793,-0.485866904258728,68.0475311279297,4.8602466583252,-0.469486117362976,68.016487121582,4.85995531082153,-0.443025648593903,67.9934463500977,4.85892200469971,-0.410052180290222,67.981559753418,4.85728168487549,-0.375026494264603,67.9823760986328,4.85526323318481,-0.342675715684891,67.9958038330078,4.85312986373901,-0.317367970943451,68.0200347900391,4.85117816925049,-0.302523404359818,68.0517959594727,4.8496675491333,-0.30014505982399,68.086799621582,4.84880304336548,-0.310555160045624,68.1203155517578,4.84870004653931,-0.332347273826599,68.147819519043,4.84937334060669,-0.405963122844696,68.3137969970703,4.76042127609253,-0.413887143135071,68.4289398193359,4.67132329940796,-0.541986584663391,68.4016723632813,4.67922115325928,-0.65154641866684,68.3299026489258,4.68698501586914,-0.617045938968658,68.1757125854492,4.77537441253662,-0.727770805358887,68.2233047485352,4.69356727600098,-0.639008700847626,68.0903472900391,4.77840995788574,-0.760363519191742,68.0962982177734,4.69807577133179,-0.744924187660217,67.9660186767578,4.69990539550781,-0.68353796005249,67.8500595092773,4.69880676269531,-0.584494113922119,67.7640991210938,4.69492959976196,-0.461170017719269,67.7197189331055,4.68879699707031,-0.330221712589264,67.7229461669922,4.68123626708984,-0.209333449602127,67.773323059082,4.67326974868774,-0.114833027124405,67.8640441894531,4.66597318649292,-0.0594805926084518,67.9828796386719,4.66033124923706, -0.161998301744461,68.1017684936523,4.7508749961853,-0.0507552772760391,68.1137466430664,4.65710687637329,-0.188213258981705,68.1859817504883,4.7506217956543,-0.0898344367742538,68.2389984130859,4.65673589706421,-0.171438992023468,68.3417053222656,4.65926599502563,-0.319029599428177,68.2996673583984,4.75573968887329,-0.284548223018646,68.4080123901367,4.66435813903809,-0.419725298881531,68.4932861328125,4.59760236740112,-0.571463823318481,68.4609832763672,4.60695934295654,-0.70124226808548,68.3759689331055,4.61615180969238,-0.791532039642334,68.2497024536133,4.62395000457764,-0.830140590667725,68.099250793457,4.62929105758667,-0.811852097511292,67.9449310302734,4.63145875930786,-0.739137053489685,67.8075790405273,4.63015794754028,-0.621815919876099,67.7057495117188,4.62556457519531,-0.475735068321228,67.653190612793,4.6183009147644,-0.32062166929245,67.6569976806641,4.60934495925903,-0.17742520570755,67.716667175293,4.59990930557251,-0.0654841512441635,67.8241500854492,4.59126472473145,8.11517238616943e-005,67.9648971557617,4.58458089828491,0.0104170143604279,68.1199264526367,4.58076286315918,-0.0358732938766479,68.2682876586914,4.58032131195068,-0.132537245750427,68.3899536132813,4.58331823348999,-0.266519635915756,68.4684753417969,4.58935165405273,-0.425818026065826,68.5429992675781,4.51325798034668,-0.596028089523315,68.5067749023438,4.5237512588501,-0.741604566574097,68.4114074707031,4.53406715393066,-0.842885971069336,68.2697677612305,4.54281139373779,-0.886193156242371,68.1010131835938,4.54880475997925,-0.865679383277893,67.9279022216797,4.55123567581177,-0.784112572669983,67.7738265991211,4.54977703094482,-0.652509689331055,67.6595993041992,4.54462480545044,-0.488645672798157,67.6006393432617,4.53647327423096,-0.314649075269699,67.6049194335938,4.52642869949341,-0.154019773006439,67.6718597412109,4.51584339141846,-0.0284524857997894,67.7924118041992,4.50614738464355,0.045093297958374,67.9502868652344,4.49865293502808,0.0566878318786621,68.1241989135742,4.49436807632446,0.00476294755935669,68.2906188964844,4.49387311935425, -0.103666737675667,68.4271087646484,4.49723625183105,-0.253960758447647,68.5151901245117,4.50400161743164,-0.437931269407272,68.5923614501953,4.32444953918457,-0.627265989780426,68.5520629882813,4.33612251281738,-0.789196729660034,68.4459838867188,4.3475980758667,-0.901857972145081,68.2884292602539,4.35732746124268,-0.950031757354736,68.1007080078125,4.36399078369141,-0.92721152305603,67.9081573486328,4.36669635772705,-0.836480498313904,67.7367706298828,4.36507177352905,-0.690092802047729,67.6097183227539,4.35933971405029,-0.507818579673767,67.5441284179688,4.3502779006958,-0.314273238182068,67.5488815307617,4.33910369873047,-0.135598540306091,67.6233520507813,4.32732772827148,0.00407609343528748,67.757438659668,4.31654453277588,0.085885614156723,67.9330596923828,4.30820465087891,0.0987821817398071,68.1265029907227,4.30343818664551,0.0410231649875641,68.3116149902344,4.3028883934021,-0.0795898139476776,68.4634323120117,4.3066291809082,-0.246766522526741,68.5614242553711,4.31415462493896,-0.391969442367554,68.0767288208008,4.9009370803833 } PolygonVertexIndex: *46575 { a: 2,1,15,-15,3,2,14,-17,1,13,17,-16,4,5,19,-19,5,0,20,-20,6,3,16,-44,7,8,21,-23,21,8,9,-35,12,7,22,-24,11,10,24,-26,0,11,25,-21,10,12,23,-25,13,4,18,-18,14,15,27,-27,16,14,-27,15,17,28,-28,18,19,30,-30,19,20,31,-31,22,21,32,-34,21,34,-33,23,22,33,-36,25,24,36,-38,20,25,37,-32,24,23,35,-37,17,18,29,-29,26,27,45,-45,43,26,44,-47,27,28,47,-46,29,30,49,-49,30,31,50,-50,33,32,51,-39,32,34,39,-52,35,33,38,-41,37,36,41,-43,31,37,42,-51,36,35,40,-42,28,29,48,-48,128,131,130,-130,132,129,130,-134,134,133,130,-136,136,135,130,-132,138,137,1797,1798,-140,128,137,138,-132,136,131,138,-140,141,1806,140,-143,143,146,145,-143,141,142,145,-148,132,147,145,-130,128,129,145,-147,140,148,-145,151,154,153,-153,155,152,153,-157,157,156,153,-159,159,158,153,-155,159,161,160,-159,157,158,160,-163,163,162,160,-165,165,164,160,-162,166,168,167,-1808,169,172,171,-171,171,139,1798,1799,-171,136,139,171,-173,173,176,175,-175,169,174,175,-173,136,172,175,-136,134,135,175,-177,177,180,179,-179,181,178,179,-183,155,182,179,-153,151,152,179,-181,180,177,183,-185,180,184,185,-152,190,189,187,-189,190,188,52,-126,194,193,191,-193,194,192,187,-190,196,194,189,-196,193,194,-197,200,199,197,-199,200,198,202,-202,204,197,199,-204,204,203,206,-206,208,195,189,-191,208,190,125,-127,211,186,210,-210,212,215,214,-214,216,213,214,-218,218,217,214,-220,220,219,214,-216,222,221,209,-211,223,226,225,-225,227,224,225,-229,229,228,225,-231,231,230,225,-227,235,234,232,-234,235,233,237,-237,238,239,205,-194,237,239,-239,197,204,241,-241,232,240,241,-234,237,233,241,-240,205,239,241,-205,232,234,242,-244,242,245,202,-244,246,247,210,-187,202,245,247,-247,226,223,245,-243,226,242,234,-232,223,224,249,-249,249,251,250,222,-249,252,251,249,-254,227,253,249,-225,247,248,222,-211,245,223,248,-248,254,257,256,3506,-256,227,255,3506,256,-254,252,253,256,-259,259,258,256,-258,260,263,262,-262,264,261,262,-266,266,265,262,-268,268,267,262,-264,264,270,269,-262,260,261,269,-272,272,271,269,-274,274,273,269,-271,275,278,277,-277,279,276,277,-281,281,280,277, -283,283,282,277,-279,193,196,284,-239,237,238,284,-286,286,285,284,-288,195,287,284,-197,288,53,283,-279,288,278,275,-290,290,54,53,-289,290,288,289,-287,185,184,292,-292,293,291,292,-295,295,294,292,-297,183,296,292,-185,297,300,299,-299,231,298,299,-231,229,230,299,-302,302,301,299,-301,298,231,234,-236,298,235,236,-298,195,208,303,-288,286,287,303,-291,54,290,303,-56,126,55,303,-209,246,186,207,-305,246,304,201,-203,202,198,244,-244,232,244,-241,197,240,244,-199,193,205,206,-192,305,308,307,-307,229,306,307,-229,227,228,307,-256,254,255,307,-309,302,310,309,-302,229,301,309,-307,305,306,309,-311,279,280,312,-312,274,311,312,-274,272,273,312,-314,281,313,312,-281,285,286,289,-315,285,314,236,-238,314,289,275,-316,314,315,297,-237,279,317,316,-277,275,276,316,-316,297,315,316,-301,302,300,316,-318,279,311,318,-318,302,317,318,-311,305,310,318,-320,274,319,318,-312,254,308,321,-321,264,320,321,-271,274,270,321,-320,305,319,321,-309,264,265,322,-321,254,320,322,-258,259,257,322,-324,266,323,322,-266,293,325,324,-292,185,291,324,-327,216,326,324,-214,212,213,324,-326,266,267,328,-328,212,327,328,-216,220,215,328,-330,268,329,328,-268,259,323,331,-331,293,330,331,-326,212,325,331,-328,266,327,331,-324,293,294,332,-331,259,330,332,-259,252,258,332,-334,295,333,332,-295,250,251,-335,335,334,251,-253,336,183,177,-338,339,338,295,-297,183,336,339,-297,154,151,185,-327,154,326,216,-160,161,159,216,-218,161,217,218,-166,340,1795,1796,-342,143,340,341,-147,128,146,341,-138,341,1796,1797,-138,144,342,340,-144,342,1794,1795,-341,148,343,342,-145,343,1793,1794,-343,348,351,350,-350,356,355,353,-355,360,359,358,-358,349,363,-349,365,364,361,-363,357,358,364,-366,366,352,-368,352,366,-352,350,351,366,-369,369,353,-356,375,374,373,-372,376,1666,379,-1809,380,383,382,-382,379,383,-1809,374,386,385,-385,385,387,-385,372,390,389,-376,372,377,391,-391,374,375,389,-387,389,1112,385,-387,392,1111,1112,389,-391,399,397,400,-396,398,401,403,-403,405,404,406,-388,402,405,410,-410,387,411,410,-406,407,415,590,591,-415,399,416,401,-399,395, 412,416,-400,416,418,417,-402,419,418,416,-413,407,414,421,-421,395,400,422,-395,402,409,396,-399,404,403,-424,404,423,424,-407,423,403,401,417,-1647,425,428,427,-427,407,420,428,-426,432,430,431,-434,434,433,431,-436,439,438,436,-438,431,1804,-441,443,441,-445,441,1592,-441,441,442,446,445,-445,447,450,449,-449,449,452,451,436,-449,453,449,-451,453,454,452,-450,437,436,451,-458,439,437,460,-459,462,448,436,-439,447,448,462,-462,56,464,463,-58,438,439,463,-465,465,457,451,-467,456,455,457,-466,460,437,457,-456,459,468,467,-459,439,458,467,-464,463,467,58,-58,59,58,467,-469,56,60,469,-465,438,464,469,-463,461,462,469,-471,61,470,469,-61,454,453,-472,454,472,466,451,-453,473,472,454,-472,62,63,478,-478,476,477,478,-480,480,479,478,-482,64,481,478,-64,487,486,789,-789,488,487,788,-791,490,493,492,-492,494,493,490,-487,474,496,495,-476,476,475,495,-478,62,477,495,-67,67,66,495,-497,476,479,498,-498,498,479,480,-490,481,499,483,-481,68,499,481,-65,501,504,503,-503,500,503,70,-3497,71,70,503,-505,505,72,3504,-3504,505,763,127,-73,509,512,511,-511,74,73,511,-513,519,520,348,-364,521,520,519,-519,522,525,524,-524,523,524,514,-516,514,524,526,-514,527,526,524,-526,531,530,528,-530,533,528,530,-533,535,536,-535,536,535,-538,530,537,535,-533,538,541,540,-540,540,536,543,-543,540,542,-540,538,546,545,-545,547,544,545,-549,360,548,545,-550,550,549,545,-547,552,548,360,-358,547,548,552,-552,553,550,518,-520,75,76,555,-555,522,554,555,-526,527,525,555,-557,77,556,555,-77,522,557,558,-555,75,554,558,-79,534,541,559,-534,528,533,559,-561,547,560,559,-545,538,544,559,-542,357,365,561,-553,551,552,561,-563,529,566,565,-565,551,562,565,-567,560,547,551,-567,348,520,570,352,-352,570,520,521,-518,515,572,571,-569,568,571,362,-570,365,362,571,-562,561,571,572,-563,578,577,576,-576,516,517,521,-580,568,580,523,-516,522,523,580,-558,567,512,509,-517,74,512,567,-80,516,509,563,-518,581,584,583,-583,585,582,583,-587,587,586,583,-589,589,588,583,-585,593,592,591,-591,419,412,413,-595,600,599,597,-599,606,605,603,-605,606,604,608,-608,610,609, 599,-601,610,600,601,-612,604,603,613,-615,604,614,615,-609,598,616,617,-603,80,81,619,-619,82,620,619,-82,623,626,625,-625,83,629,627,-85,85,84,627,-629,633,631,632,-635,634,632,635,-985,615,638,637,-637,611,636,637,-640,638,642,619,-621,619,642,643,-619,613,643,642,-615,615,614,642,-639,385,411,-388,649,648,646,-648,649,647,396,-410,650,653,652,-652,422,400,653,-651,648,649,655,-655,645,654,655,-645,411,644,655,-411,409,410,655,-650,656,659,658,-658,420,421,659,-657,427,428,661,-661,662,660,661,-664,657,663,661,-657,420,656,661,-429,665,668,667,-667,669,668,665,-665,673,672,670,-672,673,671,675,-675,677,680,679,-679,681,680,677,-677,687,686,685,-685,536,690,689,-689,691,688,689,-693,695,694,689,-691,697,676,693,-695,700,699,698,-702,710,709,707,-709,710,708,712,-712,714,711,712,-714,716,719,718,-716,696,715,718,-721,721,720,718,-723,723,722,718,-720,536,537,724,-691,695,690,724,-718,530,717,724,-538,703,726,725,-703,727,726,703,-705,723,729,728,-723,721,722,728,-731,713,712,732,1802,-1804,736,683,682,-736,708,707,1203,-1498,680,738,739,-680,696,741,-698,741,696,720,-743,743,738,680,-682,703,702,709,-711,703,710,711,-705,737,745,727,-705,699,745,737,-706,749,746,747,-749,749,748,682,-684,751,754,753,-753,755,754,751,-751,758,757,756,-483,759,762,761,-761,521,518,762,-760,763,575,69,-128,766,589,765,-765,527,770,767,-527,769,774,773,-773,775,772,773,-777,86,776,773,-88,88,87,773,-775,779,777,778,-781,785,784,782,-787,787,786,782,-784,89,90,792,-792,793,791,792,-795,459,794,792,-469,59,468,792,-91,795,336,337,-753,797,751,752,-338,750,751,797,-797,191,206,802,-802,752,753,803,-796,807,806,804,-809,809,808,804,-806,810,813,812,-812,814,811,812,-816,815,812,804,-807,804,812,813,-806,779,780,817,-817,822,824,761,-824,829,832,831,-831,833,832,829,-829,823,834,836,-836,691,836,834,-543,840,843,-843,798,840,-842,848,847,845,-847,849,852,851,-851,853,852,849,-588,854,857,856,-856,851,855,856,-859,809,858,856,-809,807,808,856,-858,860,862,-862,861,862,864,-864,866,786,787,-868,785,786,866,-866,868,870,869,-757,871,870,872, -3492,873,872,870,-869,531,874,875,716,-531,877,880,879,-879,881,880,877,-877,885,884,883,-883,791,793,886,-888,791,887,91,-90,889,191,-802,892,891,793,-795,892,794,459,-1638,893,895,871,-895,491,492,895,-894,896,899,898,-898,898,823,-762,898,761,-898,823,898,-835,542,834,898,-900,810,902,901,-901,903,900,901,-905,670,904,901,-906,906,905,901,-903,908,910,909,-908,912,488,790,-1136,913,912,1135,-1137,915,916,885,-883,917,916,915,-915,903,919,918,-901,810,900,918,-814,630,923,-923,801,802,867,-788,822,823,835,-910,931,930,933,-933,939,938,-941,941,940,938,-938,942,945,944,-944,944,946,883,884,-944,947,946,944,-946,948,951,950,-950,954,953,950,-952,938,203,199,-938,203,938,802,-207,838,837,924,-1060,955,956,863,-865,933,930,956,-956,957,960,959,-959,961,958,959,-963,964,967,966,-966,795,803,967,-965,969,678,679,-969,969,968,714,-714,976,975,973,-975,976,974,978,-978,979,373,-375,982,981,93,-93,983,735,3491,-873,633,634,984,-986,824,987,986,-761,798,841,988,-990,990,989,988,-992,927,507,508,-976,674,996,993,-995,736,735,983,-998,818,1001,1000,-820,820,992,1001,818,-822,1001,945,942,-1001,992,947,945,-1002,789,1003,1002,-789,930,931,1002,-1004,1007,1006,1004,-1006,1007,1005,576,-578,95,1011,1010,-97,917,1011,95,-95,894,871,3491,-3493,1013,1012,778,-778,1014,1017,1016,-1016,1018,1019,-1017,1016,1019,-1016,1021,1018,1016,-1021,672,1020,1016,-1018,780,1026,1025,-818,201,1029,-201,629,83,93,-982,599,609,987,-825,891,892,1035,-1035,503,1005,1004,-503,797,178,181,-797,337,177,178,-798,1038,1037,1023,-1025,1023,1037,1039,-926,597,599,824,-823,1029,201,1041,-1041,1029,1040,941,-938,499,887,886,-484,91,887,499,-69,744,968,679,-740,1042,1045,1044,-1044,814,1043,1044,-1047,1047,1800,-1049,1049,1048,1044,-1046,748,747,1619,-3494,954,803,753,-1051,755,1053,-991,1057,1056,1055,-383,1055,1056,1058,-1055,107,97,913,-1137,1034,1035,445,-1061,1061,1064,1063,-1063,841,1062,1063,-989,988,1063,1065,-992,1066,1065,1063,-1065,1060,445,446,-1068,339,964,965,-339,1068,825,-1071,536,688,-544,543,688,691,-543,1076,1078,952,-1078,950,1077,952,-950, 1079,1076,1077,-1081,1081,1080,1077,-1083,1082,1077,950,-954,756,757,1083,-869,884,110,99,-944,98,942,943,-100,1079,1080,1085,-1085,809,1084,1085,-859,851,858,1085,-1087,1081,1086,1085,-1081,1011,998,999,-1011,917,914,998,-1012,975,508,-974,500,576,1005,-504,69,575,576,500,-3497,682,748,3493,-3493,735,682,3492,-3492,755,1087,1088,-1054,833,828,1088,-1088,1089,1092,1091,-1091,1093,1092,1089,-174,1081,1082,1095,-1095,714,968,744,-3495,705,744,739,-707,1096,584,581,-861,765,589,584,-1097,793,891,757,-759,1061,1062,1098,-1098,585,1097,1098,-1100,842,1099,1098,-841,840,1098,1062,-842,932,933,843,-889,1045,1042,701,-1101,1045,1100,1101,-1050,1070,1103,1102,-1070,1103,1070,825,826,-935,1107,1106,1104,-1106,1107,1105,1109,-1109,1110,100,121,-1689,1112,1111,645,-645,385,1112,644,-412,957,958,1114,-1114,941,1113,1114,-941,939,940,1114,-1116,961,1115,1114,-959,674,1022,-674,1022,674,-995,672,673,1022,-1021,959,1117,934,-963,963,1118,1117,959,-961,883,1088,828,-883,909,910,597,-823,1058,924,925,-1040,585,586,1119,-1098,1061,1097,1119,-1121,850,1120,1119,-850,587,849,1119,-587,581,582,1122,-1122,864,1121,1122,-1124,842,1123,1122,-1100,585,1099,1122,-583,1124,759,760,-987,579,521,759,-1125,951,967,803,-955,951,948,966,-968,1023,925,1126,-1126,873,1060,-1068,922,983,-873,1100,701,698,-1731,1023,1125,1127,-1025,527,556,1128,-771,77,101,1128,-557,1118,847,1129,-1118,1117,1129,1103,-935,1102,1103,1129,-1131,848,1130,1129,-848,1133,982,92,-104,1136,1135,818,-820,818,1135,790,-822,924,837,1126,-926,894,3492,3493,-860,1134,1140,982,-1134,986,1140,1134,-1125,579,1124,1134,-1142,102,1141,1134,-1134,915,829,830,-915,882,828,829,-916,798,947,-889,1143,1145,1144,-574,1146,1145,1143,-1143,1148,832,833,-1150,831,832,1148,-1148,871,1150,869,-871,793,758,-887,1151,1140,986,-988,875,719,-717,723,719,875,-1153,1087,1153,1149,-834,755,750,1153,-1088,946,947,798,-1054,883,946,1053,-1089,886,758,482,-484,1155,1156,830,-832,1157,1156,1155,-1155,1151,987,609,-1159,1151,1158,629,-982,938,939,867,-803,1028,1720,1159,-1026,1083,757,891,-1035,778,1160,1026, -781,1012,1132,1160,-779,877,105,104,-877,3501,105,877,-879,1153,1162,1091,-1150,750,796,1162,-1154,807,857,1164,-1164,1108,1163,1164,-1108,1106,1107,1164,-1166,854,1165,1164,-858,1047,1678,1166,-1681,1166,1168,-1168,1167,1681,1680,-1167,1166,1678,1567,-1169,866,1115,961,-866,867,939,1115,-867,1172,1174,-1174,814,1046,1175,-812,810,811,1175,-1177,1177,3498,-1179,922,872,873,-1068,1179,1182,1181,-1181,1183,1180,1181,-1185,1185,1184,1181,-1187,1187,1186,1181,-1183,1185,1186,1189,-1189,1190,1188,1189,-1192,1187,1191,1189,-1187,809,805,1192,-1085,1079,1084,1192,-1194,919,1193,1192,-919,918,1192,805,-814,1108,1196,1195,-1164,807,1163,1195,-807,1197,923,630,-632,1197,631,633,-1199,932,888,947,-993,588,1199,853,-588,589,766,1199,-589,1200,745,699,-701,745,1200,1109,-728,1201,1090,1091,-1163,922,923,997,-984,1202,997,923,-1198,1202,1197,1198,-1204,1066,1064,1205,-1205,1094,1204,1205,-1207,850,1206,1205,-1121,1061,1120,1205,-1065,1207,763,505,-1028,1207,578,575,-764,953,1208,1095,-1083,954,1050,1208,-954,98,106,1000,-943,814,815,1209,-1044,1042,1043,1209,-1211,1210,1209,1195,-1197,1195,1209,815,-807,998,1156,1157,-1000,914,830,1156,-999,1092,1148,1149,-1092,1147,1148,1092,-1094,916,109,108,-886,917,94,109,-917,1206,1086,1081,-1095,850,851,1086,-1207,885,108,110,-885,1211,1213,1078,-1213,1079,1212,1078,-1077,952,1078,-1214,1215,1216,666,-668,1217,1216,1215,-1215,1177,1221,1220,-1220,906,1219,1220,-1223,1146,1222,1220,-1146,1144,1145,1220,-1222,845,844,-847,970,1223,1224,-1226,1226,971,211,-676,970,971,1226,-1143,675,1227,-1227,1226,1227,1146,-1143,1143,1223,970,-1143,573,844,1223,-1144,1229,1230,-1229,1230,669,664,-1229,1232,973,508,-1232,1232,1231,1004,-1007,506,1231,508,-508,502,1004,1231,506,-502,1066,1204,1233,-1066,1094,1095,1233,-1205,1233,1234,991,-1066,990,991,1234,-1236,1050,1235,1234,-1209,1095,1208,1234,-1234,1236,1238,1116,-1238,1239,1237,1116,-1241,994,1240,1116,-1023,1116,1238,1021,-1023,1241,1244,1243,-1243,1245,1190,1241,-1243,1241,1191,1187,-1245,1241,1190,-1192,1249,1248,1246,-1251,1251,1250,1246,-1248,1252, 1255,1254,-1254,1257,1262,1261,-1261,1263,1262,1257,-1257,1264,1267,1266,-1266,1268,1265,1266,-1270,1270,1269,1266,-1268,1271,1273,1190,-1273,1272,1190,-1275,1211,1271,1272,-1276,1258,1275,1272,-1277,1277,1276,1272,-1275,948,949,1279,-1279,1280,1278,1279,-1282,1260,1281,1279,-1283,952,1282,1279,-950,1260,1282,1259,-1258,1259,1275,1258,-1257,1211,1275,1259,-1214,952,1213,1259,-1283,1239,1240,1284,-1284,1285,1283,1284,-1287,995,1286,1284,993,-997,993,1284,1240,-995,1288,1287,1285,-1287,1288,1286,995,-1290,664,1291,1290,-1229,1229,1228,1290,-1293,1293,1292,1290,-1295,1295,1294,1290,-1292,1296,1299,1298,-1298,666,1297,1298,-666,664,665,1298,-1292,1295,1291,1298,-1300,1300,1303,1302,-1302,1304,1301,1302,-1306,1217,1305,1302,-1307,1307,1306,1302,-1304,1305,1217,1214,-1788,1304,1305,-1788,1281,1309,1308,-1281,1260,1261,1309,-1282,966,1280,1308,-1311,1239,1313,1312,-1238,1236,1237,1312,-1315,1315,1314,1312,-1317,1317,1316,1312,-1314,1285,1319,1318,-1284,1239,1283,1318,-1314,1317,1313,1318,-1321,1321,1320,1318,-1320,1322,1325,1324,-1324,1326,1323,1324,-1328,1236,1327,1324,-1239,1021,1238,1324,-1326,1236,1314,1328,-1328,1326,1327,1328,-1330,1330,1329,1328,-1332,1315,1331,1328,-1315,1332,1333,-1323,1332,1334,-1334,1335,1336,1334,-1333,1337,1336,1335,-1339,1326,1338,1335,-1324,1322,1323,1335,-1333,1337,1338,1340,-1340,1341,1339,1340,-1343,1330,1342,1340,-1330,1326,1329,1340,-1339,1333,1345,1344,-1344,1346,1343,1344,-1348,1348,1345,1333,-1335,1350,1339,1341,-1255,1337,1339,1350,-1350,1344,1351,1243,1244,-1348,1242,1243,1351,-1353,1353,1352,1351,-1355,1345,1354,1351,-1345,1190,1245,1355,-1275,1277,1274,1355,-1357,1353,1356,1355,-1353,1242,1352,1355,-1246,1357,1360,1359,-1359,1361,1358,1359,-1363,1296,1362,1359,-1300,1295,1299,1359,-1361,1363,1366,1365,-1365,1357,1364,1365,-1361,1295,1360,1365,-1295,1293,1294,1365,-1367,1364,1357,1367,-1369,1364,1368,1369,-1364,1370,1358,1361,-1372,1367,1357,1358,-1371,1372,1375,1374,-1374,1249,1375,1372,-1249,1372,1368,1367,-1249,1369,1368,1372,-1374,1379,1378,1376,-1381,1251,1380,1376,-1378,1374, 1375,-1382,1383,1382,1376,-1379,1376,1382,1384,-1378,1254,1384,1382,-1351,1349,1350,1382,-1384,1385,1387,1386,-1250,1387,1385,1255,-1253,1388,1390,1268,-1390,1389,1253,1392,-1392,1389,1391,-1389,1253,1389,-1253,1392,1253,1341,-1343,1392,1342,1330,-1392,1393,1391,1330,-1332,1393,1331,1315,-1265,1264,1265,1390,-1394,1391,1393,1390,-1389,1268,1390,-1266,1316,1317,1394,-1396,1316,1395,1264,-1316,1320,1321,1396,-1398,1320,1397,1394,-1318,1398,1396,1321,-1400,1400,1366,1363,-1400,1293,1366,1400,-1288,1319,1285,1287,-1401,1319,1400,1399,-1322,1300,1403,1402,-1402,1404,1401,1402,-1406,1263,1405,1402,-1263,1261,1262,1402,-1404,1404,1407,1406,-1402,1300,1401,1406,-1304,1307,1303,1406,-1409,1409,1408,1406,-1408,1407,1411,1410,-1410,1412,1411,1407,-1405,1258,1276,1277,3497,-1414,1413,1263,1256,-1259,1416,1264,1395,-1395,1264,1416,-1268,1417,1418,1381,-1387,1374,1381,1418,-1420,1396,1419,1418,-1421,1270,1420,1418,-1418,1379,1423,1422,-1422,1424,1421,1422,-1426,1412,1425,1422,-1412,1410,1411,1422,-1424,1412,1426,1414,-1426,1424,1425,1414,-1428,1414,1426,1413,-3498,1270,1417,1428,-1270,1268,1269,1428,-1390,1387,1428,-1387,1386,1428,-1418,1277,1356,1429,-1416,1353,1430,1429,-1357,1349,1383,1432,-1432,1349,1431,1433,-1435,1334,1434,1433,-1349,1379,1380,1435,-1424,1251,1247,1435,-1381,1246,1370,1371,-1248,1248,1367,1370,-1247,1436,1435,1247,-1372,1435,1436,1410,-1424,1436,1437,1409,-1411,1371,1361,1437,-1437,1296,1439,1438,-1363,1361,1362,1438,-1438,1409,1437,1438,-1409,1307,1408,1438,-1440,1307,1439,1440,-1307,1217,1306,1440,-1217,666,1216,1440,-1298,1296,1297,1440,-1440,1015,1180,1183,-1015,1179,1180,1015,-1020,1347,1244,1187,-1183,1347,1182,1179,-1347,1343,1441,1322,-1334,1019,1441,1343,-1347,1442,1396,-1399,1396,1442,-1420,1374,1419,1442,-1374,1394,1397,1443,-1417,1416,1443,1420,1270,-1268,1396,1420,1443,-1398,1249,1386,-1376,1375,1386,-1382,1383,1378,1444,-1433,1432,1444,1445,-1432,1424,1445,1444,-1422,1379,1421,1444,-1379,1429,1446,1427,-1416,1424,1427,1446,-1446,1431,1445,1446,-1434,1430,1348,1433,1446,-1430,1251,1377,1447,-1251, 1249,1250,1447,-1386,1278,966,-949,1278,1280,-967,903,1448,1449,-920,1322,1441,1018,-1326,1021,1325,-1019,1019,1018,-1442,111,1450,876,-105,1253,1254,-1342,1377,1384,1451,-1448,1447,1451,1255,-1386,1254,1255,1451,-1385,1334,1336,1337,-1435,1434,1337,-1350,1185,1453,1452,-1185,1183,1184,1452,-1455,1454,1452,1449,-1449,1449,1452,1453,1455,-1195,1211,1455,1273,-1272,1455,1453,1456,-1274,1273,1456,1188,-1191,1185,1188,1456,-1454,1014,1183,-1455,1014,1454,-1449,1458,603,605,-1458,1458,1457,1460,-1460,1458,1459,1461,-1463,1458,1462,613,-604,112,113,1464,-1464,80,618,1464,-114,1466,621,622,-1466,1466,1465,1468,-1468,1464,1470,1469,-1464,1461,1469,1470,-1463,613,1462,1470,-644,618,643,1470,-1465,450,447,13,-2,450,1,2,-454,447,461,4,-14,1471,1473,-1473,1474,1473,-1472,434,1472,1473,-1476,1473,1474,-1476,5,470,61,-1,4,461,470,-6,471,453,2,-4,471,3,6,-474,1476,1479,1478,-1478,432,1477,1478,-1481,1481,1480,1478,-1480,1482,1485,1484,-1484,1484,1485,-1475,1486,1489,1488,-1488,1476,1487,1488,-1491,1491,1490,1488,-1493,1493,1492,1488,-1490,1484,1494,-1484,1482,1483,1494,-1496,1496,1495,-1495,1498,1202,1203,-708,1202,1498,736,-998,1499,683,736,-1499,1499,1498,707,-710,1499,709,702,-1501,1499,1500,749,-684,1500,1501,746,-750,702,725,1501,-1501,1503,1104,1106,-1503,1503,1502,766,-765,766,1502,1504,-1200,853,1199,1504,-1506,854,1505,1504,-1166,1106,1165,1504,-1503,852,1505,854,-856,851,852,-856,1037,1507,1506,-1040,1054,1058,1039,-1507,1055,1509,381,-383,1510,1509,1055,-1055,1054,1506,1511,-1511,1512,1511,1506,-1508,1512,1507,1508,-1514,1515,1513,1508,-1515,1515,1514,388,-394,1398,1399,1363,-1370,1369,1373,1442,-1399,1288,1289,1229,-1293,1288,1292,1293,-1288,1029,937,199,-201,114,819,1000,-107,819,114,107,-1137,1405,1426,1412,-1405,1263,1413,1426,-1406,1261,1403,1518,-1310,1308,1309,1518,-1520,1304,1519,1518,-1302,1300,1301,1518,-1404,674,675,211,-210,1346,1179,-1020,1017,904,670,-673,903,904,1017,1014,-1449,1521,1520,771,-1802,768,1522,1030,-1802,1030,1522,1523,-1032,775,1523,1522,-773,769,772,1522,-769,1524,1101,1139,-1139,1524,1138, 592,-594,490,799,789,-487,491,800,799,-491,476,497,1527,-476,475,1527,1528,-475,869,489,482,-757,1430,1354,1345,-1349,1353,1354,-1431,1530,347,345,-1530,1530,1529,-389,838,1059,1531,-840,1059,924,1058,-1057,396,647,1532,-398,400,397,1532,-654,652,653,1532,-1534,646,1533,1532,-648,1534,660,662,-1536,426,427,660,-1535,1536,1538,-1538,1538,1536,-1540,1535,1537,1538,-1535,426,1534,1538,-1541,393,1540,1538,-1540,1536,1541,-1540,1541,393,-1540,1541,1542,1515,-394,1513,1515,1542,-1544,1544,1543,1542,-1546,1536,1545,1542,-1542,1513,1543,1546,-1513,1511,1512,1546,-1548,1548,1547,1546,-1550,1544,1549,1546,-1544,1550,1510,1511,-1548,1550,1547,1548,-1552,1510,1550,1552,-1510,381,1509,1552,-1554,1554,1553,1552,-1556,1551,1555,1552,-1551,1554,1557,1556,-1554,381,1553,1556,-381,378,380,1556,-1559,1559,1558,1556,-1558,1559,1560,391,-1559,378,1558,391,-378,392,390,391,-1561,1057,382,383,379,-1171,1531,1057,1170,-1562,1531,1561,1562,-840,785,1563,-922,1565,1569,1568,-1567,1566,1568,1168,-1568,1572,388,-1572,1572,393,-389,393,1574,426,-1541,426,1574,-1574,1571,1575,-1573,393,1572,-1575,1573,1574,1572,-1576,1577,1576,1529,-346,432,1579,1578,-431,429,430,1578,-1581,625,1580,1578,-625,622,1578,-1580,1578,622,-625,1468,1465,1582,-1582,1583,1581,1582,-1585,1481,1584,1582,-1586,622,1585,1582,-1466,1583,1584,1587,-1587,1587,1479,1476,-1491,1481,1479,1587,-1585,641,635,1804,429,-641,446,442,635,-633,85,628,1588,-116,82,115,1588,-621,638,620,1588,-638,637,1588,628,-640,609,610,612,-1159,629,1158,612,-628,627,612,639,-629,1589,608,615,-637,1589,636,611,-602,1590,607,608,-1590,1590,1589,601,-603,1591,626,607,-1591,443,456,1593,-1593,1593,1594,435,-1593,1805,435,1594,-1596,466,1595,1594,-466,456,465,1594,-1594,1805,1595,1596,-1473,1471,1472,1596,-1598,473,1597,1596,-473,466,472,1596,-1596,1474,1471,1598,-1485,1474,1485,1599,-1476,434,1475,1599,-1601,1482,1600,1599,-1486,432,1602,1601,-1478,1601,1482,1603,-1477,1601,1476,-1478,1482,1601,-1603,434,1600,1604,-434,432,433,1604,-1603,1482,1602,1604,-1601,46,1598,1471,-1598,46,1597,473,-7,431,440,1592, -436,625,1605,-1581,1580,1605,640,-430,868,1083,-874,873,1083,1034,-1061,767,771,513,-527,562,572,1606,-566,565,1606,1607,-565,513,1607,1606,-515,514,1606,572,-516,771,1520,1607,-514,1609,1608,580,568,-570,580,1608,1610,-558,510,1610,-1609,510,1608,1609,563,-510,557,1610,1611,-559,558,1611,116,-79,116,1611,511,-74,511,1611,1610,-511,1613,487,488,-1615,494,486,487,-1614,1615,912,913,-1617,1614,488,912,-1616,474,1618,1617,-497,67,496,1617,-118,65,117,1617,-486,484,485,1617,-1619,1612,1618,474,-1529,484,1618,-1613,913,97,118,-1617,860,1620,1619,-1097,1622,1621,799,-801,799,1621,1003,-790,930,1003,1621,-957,863,956,1621,-1623,1150,871,-896,869,1150,498,-490,498,1150,1623,-498,492,1623,1150,-896,497,1623,1624,-1528,1527,1624,1625,-1529,494,1625,1624,-494,492,493,1624,-1624,1528,1625,1626,-1613,1612,1626,1627,-485,1614,1627,1626,-1614,494,1613,1626,-1626,484,1627,1628,-486,485,1628,1629,-66,1616,1629,1628,-1616,1614,1615,1628,-1628,65,1629,-120,1616,118,119,-1630,894,859,1630,-894,893,1630,800,-492,859,1620,1631,-1631,1630,1631,1622,-801,863,1622,1631,-862,860,861,1631,-1621,747,746,764,-766,1501,1503,764,-747,1104,1503,1501,-726,726,1105,1104,-726,727,1109,1105,-727,1196,1108,1109,-1201,1210,1196,1200,-701,1210,700,701,-1043,1619,747,765,-1097,859,3493,1619,-1621,1605,625,626,-1592,1605,1591,617,-641,641,640,617,-617,907,909,835,-1633,567,516,579,-1142,567,1141,102,-80,761,824,-761,896,897,1634,-1634,518,1633,1634,-763,761,762,1634,-898,1635,1497,1203,-1199,1635,1008,1009,-1803,1198,633,985,1008,-1636,630,922,1067,-447,1636,444,445,-1036,1637,460,455,-1637,1637,1636,1035,-893,606,607,626,-624,606,623,621,-606,1457,605,621,-1467,1457,1466,1467,-1461,622,1579,1638,-1586,1481,1585,1638,-1481,432,1480,1638,-1580,1476,1603,1639,-1488,1486,1487,1639,-1641,1496,1640,1639,-1496,1482,1495,1639,-1604,1169,3486,977,-979,366,354,-369,367,356,354,-367,931,820,821,-1003,1002,821,790,-789,1235,1050,753,-755,1235,754,755,-991,864,1641,-956,955,1641,843,-934,840,798,888,-844,864,862,-1122,862,860,581,-1122,864,1123,-1642,843,1641,1123, -843,973,1232,1642,-975,1132,1642,1232,1006,-1132,1012,1643,1642,-1133,978,1643,1171,-1170,1013,1171,1643,-1013,1644,531,529,-565,1644,564,1607,-1521,1033,1152,-1033,1656,1657,1645,936,-936,71,504,1654,-121,504,501,1655,-1655,506,507,1656,-1660,501,506,1659,-1656,875,874,1644,1520,-1522,874,531,-1645,423,1646,-425,1648,729,723,-1034,731,729,1648,-1648,1071,1072,-1650,1649,1072,838,-840,838,1072,1650,-838,1651,1126,837,-1651,1651,1650,1069,-1103,1102,1130,1652,-1652,1126,1651,1652,-1126,1125,1652,1653,-1128,848,1653,1652,-1131,1654,1655,1687,-1689,927,1657,1656,-508,1658,406,-980,387,1658,-385,979,374,384,-1659,1659,1656,935,-1690,413,412,395,-395,1576,1577,1569,-1661,1565,1566,1662,-1662,1526,1661,1662,-1664,1567,1663,1662,-1567,1526,1564,1664,-1662,1565,1661,1664,-1666,595,1660,-1666,1665,1660,1569,-1566,1575,1571,-3500,408,1573,1575,-596,3499,1571,1529,-1577,407,596,-416,1573,425,-427,408,407,425,-1574,1564,1526,593,-591,1524,593,1526,-1526,926,927,-976,1517,3487,1666,-1729,361,1667,569,-363,1667,1668,1609,-570,563,1609,1668,-1670,356,1668,-356,1668,356,-1670,369,355,1668,-1668,517,1670,352,-571,367,352,1670,-357,896,1672,1671,-900,542,899,1671,-540,538,539,1671,-547,550,546,1671,-1673,550,553,1673,-550,360,549,1673,-360,896,1633,-1673,518,550,1672,-1634,353,369,368,-355,358,1674,349,-365,358,359,-1675,1673,1675,1674,-360,349,1674,1675,-1677,553,1676,1675,-1674,349,1676,-364,553,519,363,-1677,356,1670,-1670,1669,1670,517,-564,1567,1678,1677,-1664,1526,1663,1677,-1526,1049,1525,1677,-1049,1047,1048,1677,-1679,1679,1167,1168,-1569,1679,1568,1569,-1578,1680,1177,1178,-1048,1177,1680,-1682,1679,1577,345,-1173,1167,1679,1172,-1174,906,1222,1682,-906,670,905,1682,-672,675,671,1682,-1228,1146,1227,1682,-1223,906,902,1683,-1220,1177,1219,1683,-3499,810,1176,1683,-903,1167,1173,1684,-1682,1681,1684,1221,-1178,1144,1221,1684,-1686,1174,1685,1684,-1174,574,1685,1174,-347,1144,1685,574,-574,1172,344,346,-1175,1686,373,1645,-1658,1645,373,-980,1645,979,406,424,-937,926,1686,1657,-928,1110,1688,1687,-981,1654,1688,121,-121,1689, 935,1691,-1693,935,936,1690,-1692,1033,1031,-1649,776,86,100,-1111,776,1110,980,-776,1691,1690,731,-1648,1647,1693,1692,-1692,1689,1692,1693,980,-1688,1523,775,980,-1694,1031,1523,1693,1647,-1649,1646,417,731,-1691,424,1646,1690,-937,728,729,731,417,-419,728,418,419,-731,816,1695,1694,-780,825,1068,1695,827,-827,1694,1695,1068,-1072,777,1696,1562,-1014,779,1694,1696,-778,1027,1720,-1029,920,1698,1159,-1717,1159,1698,817,-1026,817,1698,1699,-817,921,1699,1698,-921,816,1699,827,-1696,1563,827,1699,-922,1075,1700,1036,-880,962,1701,865,-962,826,1701,962,-935,1701,1563,785,-866,1563,1701,826,-828,878,1702,3502,-3502,1702,3503,3504,-3503,781,889,-784,787,783,889,-802,1450,187,192,-929,881,876,1450,-929,188,187,-1451,52,188,1450,-112,1649,1696,1694,-1072,839,1562,1696,-1650,1561,1171,1013,-1563,1171,1561,1170,-1170,1803,1703,969,-714,734,678,969,-1704,1009,1703,1803,-1803,836,1704,1632,-836,1008,908,907,-1010,985,911,908,-1009,1009,907,1632,734,-1704,1704,733,734,-1633,693,733,1704,-693,597,1705,616,-599,616,1705,1706,-642,641,1706,984,-636,984,1706,911,-986,1514,1707,1530,-389,1530,1707,1708,-348,1570,1218,1708,-1708,1708,1218,1137,-1710,1137,1711,1710,-1710,344,1709,1710,1712,-347,1713,1712,1710,-1712,346,1712,1714,-575,574,1714,-574,1714,1715,844,-574,1713,1715,1714,-1713,1508,1038,-1571,1570,1038,1024,-1219,1218,1024,1127,-1138,1075,1717,1716,-1701,784,1717,1718,-783,782,1718,1719,781,-784,1719,1718,1073,-1075,1073,1718,1717,-1076,1073,880,881,-1075,1075,879,880,-1074,878,879,1036,-1703,1159,1720,1700,-1717,1700,1720,1697,-1037,1036,1697,3503,-1703,1697,505,-3504,929,1074,881,-929,1719,1074,929,-782,781,929,890,-890,970,1052,1051,-972,971,1051,207,-212,972,1721,1052,-971,201,304,1722,-1042,1040,1041,1722,-1724,1052,1723,1722,-1052,207,1051,1722,-305,1040,1723,-1725,1052,1721,1724,-1724,957,1725,-961,963,960,1725,-1722,970,1225,-973,1113,941,1040,-1725,1725,1724,-1722,1028,1726,1207,-1028,1161,1726,1026,-1161,1007,577,1161,-1132,1006,1007,-1132,1207,1726,-579,963,1721,972,-1226,1118,1224,845,-848,1224,1118,963,-1226, 373,1686,1727,-372,370,371,1727,-1729,1516,976,977,-1518,926,975,976,-1517,1517,977,3486,-3488,1516,1727,1686,-927,1517,1728,1727,-1517,741,681,676,-698,743,681,741,-743,743,742,685,-687,684,685,721,-731,592,687,684,-595,594,413,591,-593,413,394,414,-592,394,422,421,-415,659,421,422,-651,659,650,651,-659,1729,687,1138,-1140,1138,687,-593,686,687,-1730,1100,1730,1139,-1102,698,706,740,-1731,1730,740,1729,-1140,1653,1711,1137,-1128,848,1713,1711,-1654,844,1715,-847,1211,1212,1194,-1456,1079,1193,1194,-1213,1734,1733,1732,-1732,1737,1736,-1736,1735,122,123,-1738,1731,1732,174,-170,1738,1739,-1736,1740,1741,1790,-1792,1740,1742,1734,-1742,1734,1743,-1155,1738,1743,1742,-1745,1744,149,1739,-1739,999,1157,1736,-1738,1736,1157,1154,-1744,1733,1155,831,-1148,1734,1154,1155,-1734,1735,1739,124,-123,1735,1736,1743,-1739,1734,1742,-1744,1745,1790,-1742,1734,1731,1745,-1742,1745,170,1799,-1791,1010,999,1737,-124,1010,123,-97,155,156,1747,-1747,1748,1746,1747,-1750,1750,1749,1747,-1752,157,1751,1747,-157,157,162,1752,-1752,1750,1751,1752,-1754,168,1753,1752,-1755,163,1754,1752,-163,1755,163,164,-1757,165,1756,-165,181,182,1757,-1202,1090,1201,1757,-1759,1748,1758,1757,-1747,155,1746,1757,-183,168,1754,1759,-168,1759,1754,163,-1756,1748,1749,1761,-1761,134,1760,1761,-134,132,133,1761,-1763,1750,1762,1761,-1750,1750,1753,1763,-1763,132,1762,1763,-148,141,147,1763,-167,168,166,1763,-1754,1090,1758,1764,-1090,173,1089,1764,-177,134,176,1764,-1761,1748,1760,1764,-1759,1768,1767,1765,-1767,1768,1766,209,-222,1767,669,1230,-1770,1771,1770,250,-335,1771,334,335,-1773,674,1774,1773,-997,995,996,1773,-1776,1765,1775,1773,-1775,1769,1289,995,-1776,1769,1775,1765,-1768,1766,1774,674,-210,1765,1774,-1767,1768,1776,669,-1768,1770,1776,1768,-222,222,250,1770,-222,1770,1771,-1778,1778,1777,1771,-1773,1779,338,-966,1780,1781,295,-339,335,1781,1780,-1773,295,1781,-334,335,252,333,-1782,1770,1777,1782,-1777,669,1776,1782,-669,667,668,1782,-1784,1778,1783,1782,-1778,1778,1785,1784,-1784,667,1783,1784,-1216,1214,1215,1784,-1787,1779,1786,1784,-1786, 1308,1519,1311,-1311,1304,1787,1311,-1520,1785,1778,1772,-1781,1785,1780,338,-1780,1788,1786,1779,-966,1787,1214,1786,1788,-1312,1789,965,-967,1789,966,-1311,965,1789,-1789,1311,1788,1789,-1311,211,207,-187,1791,1792,150,-1741,730,419,594,-685,696,697,694,-696,742,720,721,-686,3494,711,-715,1033,723,-1153,796,181,1201,-1163,174,1732,1093,-174,1732,1733,1147,-1094,1745,1731,169,-171,1524,1525,1049,-1102,1800,1046,1044,-1049,1178,1175,1046,-1801,1047,1178,-1801,1161,1160,1132,-1132,920,1716,1717,-785,785,921,920,-785,1069,1650,1072,-1072,1069,1071,1068,-1071,1059,1056,1057,-1532,535,534,533,-533,528,560,566,-530,1030,1032,1521,-1802,1030,1031,1033,-1033,1152,875,1521,-1033,768,1801,771,-768,769,768,767,-771,774,769,770,-1129,88,774,1128,-102,1449,1194,1193,-920,689,694,693,-693,732,1497,1635,-1803,708,1497,732,-713,734,733,677,-679,677,733,693,-677,696,695,717,-716,715,717,530,-717,440,1804,442,-442,635,442,-1805,600,598,602,-602,1591,1590,602,-618,611,639,612,-611,982,1140,1151,-982,102,1133,-104,1706,1705,910,-912,1705,597,-911,1637,459,458,-461,456,443,444,1636,-456,699,705,706,-699,738,686,1729,-741,706,739,738,-741,852,853,-1506,376,370,1728,-1667,372,375,371,-371,376,377,372,-371,1659,1689,1687,-1656,1658,387,-407,540,541,534,-537,350,361,364,-350,368,369,1667,361,-351,1726,1028,1025,-1027,482,489,480,-484,434,435,-1806,434,1805,-1473,339,336,795,-965,166,1807,1806,-142,144,143,142,-141,150,149,-1745,1740,150,1744,-1743,376,1808,378,-378,378,1808,383,-381,1508,1507,1037,-1039,1769,1230,1229,-1290,1491,1586,1587,-1491,623,624,622,-622,1809,1810,1811,-1813,1813,1814,1811,-1811,1815,1816,1811,-1815,1817,1812,1811,-1817,1809,1812,1819,-1819,1817,1820,1819,-1813,1819,1820,3474,3473,-1819,1821,1822,140,-1807,1823,1822,1825,-1827,1821,1827,1825,-1823,1813,1810,1825,-1828,1809,1826,1825,-1811,140,1824,-149,1828,1829,-3422,1830,1831,1832,-1834,1834,1835,1832,-1832,1836,1837,1832,-1836,1838,1833,1832,-1838,1838,1837,1839,-1841,1836,1841,1839,-1838,1842,1843,1839,-1842,165,1840,1839,-1844,1844,1807,167,-1846,1846,1847,1848, -1850,1848,1847,3475,3474,-1821,1817,1849,1848,-1821,1850,1851,1852,-1854,1846,1849,1852,-1852,1817,1816,1852,-1850,1815,1853,1852,-1817,1854,1855,1856,-1858,1858,1859,1856,-1856,1834,1831,1856,-1860,1830,1857,1856,-1832,1861,1860,1854,-1858,1861,1857,1830,-1863,1863,1864,-1886,1866,1865,1867,-1869,1866,1868,125,-53,1870,1869,1871,-1873,1870,1872,1867,-1866,1874,1873,1867,-1873,1871,1874,-1873,1876,1875,1877,-1879,1876,1878,1879,-1881,1881,1877,1875,-1883,1881,1882,1883,-1885,1868,1867,1873,-1887,1868,1886,126,-126,1887,1888,1864,-1890,1890,1891,1892,-1894,1894,1895,1892,-1892,218,219,1892,-1896,220,1893,1892,-220,1888,1887,1896,-1898,1898,1899,1900,-1902,1902,1903,1900,-1900,1904,1905,1900,-1904,1906,1901,1900,-1906,1908,1907,1909,-1911,1908,1910,1911,-1913,1913,1871,1883,-1915,1912,1913,-1915,1875,1915,1916,-1883,1907,1908,1916,-1916,1912,1914,1916,-1909,1883,1882,1916,-1915,1917,1909,1907,-1919,1918,1907,-1920,1917,1918,1880,-1921,1920,1880,1921,-1923,1921,1864,1888,-1923,1917,1920,1898,-1902,1917,1901,1906,-1910,1898,1923,1924,-1900,1897,1925,1924,-1924,1926,1927,1924,-1926,1928,1929,1924,-1928,1902,1899,1924,-1930,1898,1920,1922,-1924,1922,1888,1897,-1924,1930,1931,1932,-1934,1902,1929,1932,-1932,1928,1934,1932,-1930,1935,1933,1932,-1935,260,1936,1937,-264,1938,1939,1937,-1937,1940,1941,1937,-1940,268,263,1937,-1942,1938,1936,1942,-1944,260,271,1942,-1937,272,1944,1942,-272,1945,1943,1942,-1945,1946,1947,1948,-1950,1950,1951,1948,-1948,281,282,1948,-1952,283,1949,1948,-283,1871,1913,1952,-1875,1912,1953,1952,-1914,1954,1955,1952,-1954,1873,1874,1952,-1956,1949,283,53,-1957,1949,1956,1957,-1947,1956,53,54,-1959,1956,1958,1954,-1958,1862,1959,1960,-1862,1961,1962,1960,-1960,1963,1964,1960,-1963,1860,1861,1960,-1965,1965,1966,1967,-1969,1906,1905,1967,-1967,1904,1969,1967,-1906,1970,1968,1967,-1970,1910,1909,1906,-1967,1910,1966,1965,-1912,1873,1955,1971,-1887,1954,1958,1971,-1956,54,55,1971,-1959,126,1886,1971,-56,1972,1885,1864,-1922,1972,1921,1880,-1880,1880,1918,1919,-1877,1907,1915,-1920,1875,1876,1919,-1916, 1883,1871,1869,-1885,1973,1974,1975,-1977,1904,1903,1975,-1975,1902,1931,1975,-1904,1930,1976,1975,-1932,1970,1969,1977,-1979,1904,1974,1977,-1970,1973,1978,1977,-1975,1950,1979,1980,-1952,1945,1944,1980,-1980,272,313,1980,-1945,281,1951,1980,-314,1981,1957,1954,-1954,1981,1953,1912,-1912,1982,1946,1957,-1982,1982,1981,1911,-1966,1950,1947,1983,-1985,1946,1982,1983,-1948,1965,1968,1983,-1983,1970,1984,1983,-1969,1950,1984,1985,-1980,1970,1978,1985,-1985,1973,1986,1985,-1979,1945,1979,1985,-1987,1930,1987,1988,-1977,1938,1943,1988,-1988,1945,1986,1988,-1944,1973,1976,1988,-1987,1938,1987,1989,-1940,1930,1933,1989,-1988,1935,1990,1989,-1934,1940,1939,1989,-1991,1961,1959,1991,-1993,1862,1993,1991,-1960,1894,1891,1991,-1994,1890,1992,1991,-1892,1940,1994,1995,-1942,1890,1893,1995,-1995,220,329,1995,-1894,268,1941,1995,-330,1935,1996,1997,-1991,1961,1992,1997,-1997,1890,1994,1997,-1993,1940,1990,1997,-1995,1961,1996,1998,-1963,1935,1934,1998,-1997,1928,1999,1998,-1935,1963,1962,1998,-2000,1928,1927,2000,-2002,1926,2000,-1928,2003,1854,1860,-2003,2002,1860,1964,-2006,1993,1862,1830,-1834,1993,1833,1838,-1895,1895,1894,1838,-1841,1895,1840,165,-219,2006,2007,3472,-3472,1823,1826,2007,-2007,1809,1818,2007,-1827,2007,1818,3473,-3473,1824,1823,2006,-2009,2008,2006,3471,-3471,148,1824,2008,-344,343,2008,3470,-1794,2009,2012,2010,-2855,2011,2009,2854,-2857,2013,2016,2017,2242,-2193,2013,2014,2015,-2017,2018,2019,2032,-2034,2020,2018,-2034,2021,2019,2018,-2021,2022,2023,2024,-2026,2024,2023,-3351,2026,2027,2241,-3344,2027,2026,2029,-2031,2028,2013,2192,-2192,2014,2013,-2029,2023,2029,2014,-3351,2022,2030,2029,-2024,2031,2019,-2022,2017,2016,-2032,2015,2032,2031,-2017,2031,2032,-2020,2034,2035,2039,-2037,2035,2037,2038,-2040,2041,2040,2034,-2037,2041,2042,3480,-2041,2040,3480,2043,-3343,3480,2042,2044,-2048,2044,2045,2046,-2048,2043,3480,-2048,2038,2048,2049,-2051,2049,2051,-2085,2049,2048,-2052,2052,2049,2084,-2084,2050,2049,-2053,2054,2055,2056,-2054,2036,2039,2057,-2059,2036,2058,2059,-2042,2038,2050,2057,-2040,2057,2050,2052, -2794,2060,2058,2057,2793,-2793,2061,2056,2055,-2063,2063,2064,2085,-2087,2067,2065,-2067,2067,2069,2064,-2071,2074,2073,2072,-2076,2074,2075,2051,-2077,2077,2088,-2272,2078,2077,2271,-2271,2072,2079,2080,-2076,2081,2082,2080,-2080,2083,2084,2080,-2083,2051,2075,2080,-2085,2077,2087,2265,2264,-2089,2069,2068,2071,-2090,2064,2069,2089,-2086,2085,2089,2091,-2093,2089,2071,2090,-2092,2093,2094,2087,-2078,2070,2064,2063,-2096,2068,2066,2079,-2073,2065,2081,2079,-2067,2074,2076,2097,-2097,2073,2074,-2097,2096,2097,-3319,2093,2077,2098,-2102,2098,2099,2100,-2102,2102,2103,2104,2113,-3479,2105,2106,2104,-2104,2107,2108,2104,-2107,2104,2108,3264,-2114,2110,2109,2111,-2113,2110,2112,2130,-2133,2116,2114,3264,3265,-2129,2114,2116,2117,2118,-2116,2119,2120,2121,-2123,2121,2120,2109,2123,-2125,2125,2122,-2122,2125,2121,2124,-2127,2116,2128,2127,-3309,2127,2128,2137,-2130,2127,2129,2110,-2133,2129,2123,2109,-2111,3309,2132,2130,-2132,2133,2134,2120,-2120,2134,2111,2109,-2121,56,57,2135,-2137,2135,57,58,-2140,2130,2112,2135,-2140,2111,2136,2135,-2113,2137,2138,2123,-2130,3308,2127,2132,-3310,2131,2130,2139,-2141,59,2140,2139,-59,56,2136,2141,-61,2111,2134,2141,-2137,2133,2142,2141,-2135,61,60,2141,-2143,2126,2143,-2126,2126,2124,2123,2138,-2145,2145,2143,2126,-2145,2147,2146,3190,-3190,2148,2147,3189,-2170,62,2149,2150,-64,2148,2151,2150,-2150,2152,2153,2150,-2152,64,63,2150,-2154,2154,2155,2152,-2162,2157,65,3301,-3301,2156,2157,3300,-3300,2462,2460,2159,-2161,2159,2460,2461,-2159,2158,2162,2165,-2167,2162,2163,2164,-2166,2146,2147,2167,-2169,2148,2149,2167,-2148,62,66,2167,-2150,67,2168,2167,-67,2148,2169,2170,-2152,2170,2161,2152,-2152,68,64,2153,-2172,2153,2152,2155,-2172,69,3496,2172,2250,-2250,2172,2175,2683,-2251,2173,2174,2175,-2177,2175,2174,2682,-2684,71,2176,2175,-71,2174,2173,2178,2910,-2683,2178,2179,2180,-2911,2181,2182,2183,-2185,2183,2182,3282,-3284,116,73,2183,-3284,74,2184,2183,-74,2185,2186,3278,-3280,2186,2185,2198,-2197,2187,2186,2196,-2196,2186,2187,2244,-3279,2188,2189,2235,-2182,2190,2191,2192,-2194,2194, 2195,2196,-2198,2199,2197,2196,-2199,2201,2238,2232,-2201,2203,2201,2200,-2203,2204,2202,2200,-2206,2207,2204,2205,-2207,2207,2206,-2209,2208,2209,-2208,2202,2204,2207,-2210,2210,2211,2212,-2214,2212,2214,2215,-2209,2212,2211,-2215,2210,2216,2217,-2219,2219,2220,2217,-2217,2025,2221,2217,-2221,2222,2218,2217,-2222,2223,2224,2220,-2220,2224,2022,2025,-2221,2191,2225,3352,-2029,2191,2190,2222,-2226,75,2226,2227,-77,2194,2197,2227,-2227,2199,2228,2227,-2198,77,76,2227,-2229,2229,2230,3283,-3283,2194,2226,2230,-2230,75,78,2230,-2227,2230,78,116,-3284,2206,2205,2231,-2214,2200,2232,2231,-2206,2219,2216,2231,-2233,2210,2213,2231,-2217,2233,2234,2244,-2244,2027,2030,2233,-2244,2022,2224,2233,-2031,2223,2234,2233,-2225,2182,3280,-3283,2182,2181,2235,3281,-3281,2201,2236,2237,-2239,2237,2236,3279,-3279,2234,2237,3278,-2245,2223,2238,2237,-2235,74,79,2239,-2185,2239,2188,2181,-2185,2238,2223,2219,-2233,2240,2241,2027,-2244,2187,2240,2243,-2245,2240,2187,2195,-2255,2241,2240,2254,3280,-3282,2192,2242,2189,-2194,2245,2246,-2248,2247,2246,2248,-2012,2249,2250,2251,-2253,2683,2685,2251,-2251,2253,2193,2189,-2189,2254,2229,3282,-3281,2194,2229,2254,-2196,2255,2256,2257,-2259,2259,2260,2257,-2257,2261,2262,2257,-2261,2263,2258,2257,-2263,2264,2265,2266,-2268,2085,2092,2268,-2087,2269,2270,-2272,2269,2271,2088,-3339,2273,2272,2274,-2276,2273,2275,2276,-2278,2291,2273,2277,-2293,2279,2278,2280,-2282,2279,2281,2282,-2284,2275,2274,2284,-2286,2275,2285,2286,-2277,2289,2288,2278,-2280,2289,2279,2283,-2291,2272,2273,2291,-3382,80,2293,2294,-82,2294,2293,2318,-2318,2295,2294,2317,-2314,82,81,2294,-2296,2299,2298,2296,-2298,2299,2300,2301,-2299,2302,2303,2314,-2288,2304,2302,2287,-2841,83,84,2302,-2305,85,2303,2302,-85,2118,2305,2306,-2308,2308,2309,2307,-2307,2290,2311,2312,-2314,2286,2314,2312,-2312,2312,2314,2303,-3261,2295,2313,2312,-3261,2316,2315,2102,3478,-2311,2288,2289,2317,-2319,2290,2313,2317,-2290,2052,2083,2319,-2794,2322,2321,2323,-2325,2322,2324,2081,-2066,2070,2095,2325,-2329,2325,2326,2327,-2329,2323,2329,2330,-2325,2320, 2319,2330,-2330,2083,2082,2330,-2320,2081,2324,2330,-2083,2094,2093,2331,-2335,2331,2332,2333,-2335,2100,2335,2336,-2102,2337,2338,2336,-2336,2332,2331,2336,-2339,2093,2101,2336,-2332,2339,2340,2343,-2345,2340,2341,2342,-2344,2346,2347,2348,-2346,2349,2350,2353,-2355,2350,2351,2352,-2354,2420,2421,2356,-2356,2092,2403,2357,-2269,2357,2358,2359,-2361,2208,2361,2362,-2364,2364,2365,2362,-2362,2368,2363,2362,-2368,2369,2368,2367,-2371,2370,2367,2366,-2350,2372,2371,2379,-2379,2372,2378,2409,-2418,2373,2372,2417,-2880,2372,2373,2374,-2372,2376,2375,2398,-2400,2377,2376,2399,-2401,2383,2376,2377,-2385,2378,2379,2411,-2417,2381,2380,2382,-2384,2381,2383,2384,-2386,2386,2385,2384,-2388,2386,2387,2644,-2646,2369,2388,2390,-2369,2388,2389,2202,-2391,2389,2388,2391,-2393,2369,2393,2391,-2389,2394,2395,2391,-2394,2396,2392,2391,-2396,2208,2363,2397,-2210,2368,2390,2397,-2364,2202,2209,2397,-2391,2399,2398,2785,-2787,2790,2400,2399,-2787,2396,2395,2401,-2403,2394,2403,2401,-2396,2091,2401,2403,-2093,2386,2405,2406,-2386,3482,2351,2350,-3482,3481,2350,2349,-2367,2407,2355,2356,-2409,2409,2377,2400,-2418,2381,2385,2406,-3156,2381,3155,2882,-2381,2411,2379,2412,-2411,2369,2370,-2414,2413,2370,2349,-2355,2369,2413,2414,-2394,2393,2414,2358,-2395,2415,2354,2353,-2411,3495,2409,2378,-2417,2383,2382,2375,-2377,2879,2417,2400,-2791,2420,2419,2418,-2422,2418,2419,2437,-2437,2422,2423,2426,-2428,2423,2424,2425,-2427,2154,2428,2429,-2431,2190,2193,2431,-2435,2431,2432,2433,-2435,72,127,2435,-2178,2436,2437,2263,-2439,2439,2198,2185,-2444,3477,2440,2439,-2444,2442,2439,2440,-2442,2199,2198,2439,-2443,2443,2185,3279,-3182,2441,2444,2445,-2447,2447,2448,2445,-2445,86,87,2445,-2449,88,2446,2445,-88,2449,2450,2690,-2692,2451,2452,2450,-2450,2450,2452,2705,-2843,2690,2450,2842,-2814,2454,2455,2453,3394,-3394,2456,2454,3393,-3393,2457,2458,2454,-2457,2459,2455,2454,-2459,2680,2460,2462,-2493,2461,2460,2680,-2682,89,2463,2464,-91,2465,2466,2464,-2464,2131,2140,2464,-2467,59,90,2464,-2141,2424,2003,2002,-2468,2468,2469,2423,-2423,2469,2003,2424, -2424,2471,2461,2681,-3294,2472,2471,3293,-3295,1884,1869,2473,-2475,2425,2424,2467,-2476,2476,2477,2485,-2485,2478,2476,2484,-2488,2479,2480,2476,-2479,2481,2477,2476,-2481,2482,2483,2484,-2486,2486,2487,2484,-2484,2451,2488,2489,-2453,2489,2488,3375,-3375,2841,2704,2489,-3375,2452,2489,2704,-2706,2490,2491,2678,-2680,2492,2490,2679,-2671,2490,2492,2462,-2817,2491,2490,2816,-2818,2494,2433,2495,-2494,2498,2497,3377,-3230,2499,2500,2503,-2505,2500,2501,2502,-2504,2214,2505,2507,-2365,2505,2494,2506,-2508,2509,2508,3322,-2753,2510,2509,2752,-3322,2511,2512,2742,-2780,2513,2514,2511,2779,-2781,2470,2511,2515,-2561,2511,2514,-2516,2470,2512,-2512,2517,2518,2516,2900,-2902,2519,2520,2517,2901,-2905,2521,2518,2517,-2521,2261,2522,2525,-2527,2522,2523,2524,-2526,2527,2528,2529,-2531,2524,2531,2529,-2529,2481,2480,2529,-2532,2479,2530,2529,-2481,2533,2534,2802,-2256,2534,2535,2536,-2803,2537,2538,2458,-2458,2538,2539,2459,-2459,2428,2541,2542,-2541,2544,3488,2407,-2662,2540,2542,2544,-2546,2389,2547,2546,2203,-2203,2548,2549,2552,-2554,2549,2550,2551,-2553,2554,2555,2556,-2558,2619,2618,2556,2555,-2622,2559,2558,2465,-2464,2559,2463,89,-92,2470,2560,-2623,2473,1869,-2562,2466,2465,2562,-2564,2466,2563,3309,-2132,2164,2163,2564,-2567,2564,2565,2543,-2567,2567,2568,2569,-2571,2569,2433,-2495,2569,2568,-2434,2494,2505,-2570,2214,2570,2569,-2506,2482,2571,2572,-2574,2574,2575,2572,-2572,2345,2576,2572,-2576,2577,2573,2572,-2577,2579,2578,2580,-2582,2579,2581,-2583,2173,3329,3333,-2179,2178,3333,3330,-2180,2584,2817,2816,-2584,2583,2816,2462,-2161,2585,2586,2587,-2589,2586,2554,2557,-2588,2574,2571,2589,-2591,2482,2485,2589,-2572,2589,2485,2477,-2872,2590,2589,2871,-2873,2591,2456,3392,-3392,2592,2591,3374,-3376,2594,2593,2661,-2676,2718,2596,2595,-2739,2508,2595,2596,-2808,2597,2598,3331,-3363,3109,2599,1870,-1866,2601,2600,2599,2553,-2756,2599,2600,2561,1869,-1871,2474,2473,2602,-2604,2602,2459,2539,-2604,2494,2493,2580,-2507,3328,3364,3363,-3330,3328,120,121,-3365,2607,2604,2605,-2607,2497,2608,2638,-3378,2608,2497,2496,2750, -2785,2610,2609,3367,-3367,2474,2613,-2613,2614,2615,2612,-2614,2616,2611,2612,-2616,2617,2618,2619,-2621,2622,2620,2619,-2622,2623,2624,2625,-2627,2625,2624,2627,-2759,2628,2625,2758,-2764,2629,2626,2625,-2629,2630,2612,2611,1877,-1882,2630,1884,-2475,2630,1881,-1885,2474,2612,-2631,2739,2595,2508,-2510,2604,2607,2631,-2633,2631,2536,2535,-2633,2633,2634,2635,-2637,2637,2638,2635,-2635,2635,2638,2608,-2799,2639,2636,2635,2798,-2800,2475,2467,2640,-2644,2640,2641,2642,-2644,2644,2352,2351,-2646,2646,2647,2648,-2650,2647,1889,1863,-2649,2646,2649,-2651,2652,2651,2653,-2655,2652,2654,2655,-2657,2038,2037,-2658,3365,3363,2658,3369,-3369,3365,3368,3367,-2610,2822,2660,2659,-2834,2659,2660,92,-94,2662,2663,2582,-3383,2662,3382,2316,-2311,2309,2662,2310,-2308,2308,2663,2662,-2310,2432,2664,2665,-2496,2512,2666,2743,-2743,2470,2667,2666,-2513,2668,2669,2666,-2668,2666,2669,2745,-2744,2180,2179,2598,-2654,2555,2554,2499,-2770,2621,2555,2769,-2734,2606,2670,2622,-2561,2586,2585,2501,-2501,2554,2586,2500,-2500,2671,2672,2919,-2958,2673,2674,2671,2957,-2960,2347,2672,2671,-2675,2407,2408,2675,-2662,2676,2677,2839,-2839,2585,2676,2838,-2502,2622,2670,2679,-2621,2679,2678,2617,-2621,2605,2670,-2607,2604,2681,2680,-2606,2683,2682,2684,-2686,2579,2686,2687,-2579,2663,2686,2579,-2583,2686,2663,2308,2877,-3308,2687,2686,3307,-2916,94,95,2689,-2589,95,96,2688,-2690,2407,3488,3489,-2356,2690,2813,3314,-3316,2691,2690,3315,-2854,2692,2693,2694,-2696,2697,2696,2694,-2694,2699,2700,-2702,2346,2695,2694,-2700,3333,3329,3363,-3366,2702,2596,2718,-2717,2703,2702,2716,-2718,2702,2703,2808,-2807,2706,3395,-3374,2705,2704,2707,-3403,1878,2708,-1880,2840,2833,2659,-2305,2659,93,83,-2305,2495,2665,2284,-2275,2709,2710,3184,-3184,2563,2562,2713,-2715,1854,2003,2469,-1856,2469,2468,1858,-1856,3376,2715,3373,-3396,2551,2715,3376,-2757,2716,2718,3164,-3166,2719,2717,2716,3165,-3167,2493,2495,2274,-2273,2176,3328,3329,-2174,71,120,3328,-2177,2708,2720,2721,-1880,2611,2616,2720,-2709,91,68,2171,-2560,2171,2155,2558,-2560,2722,2723,2724,-2726,2486,2726, 2724,-2724,2727,2728,-3477,2729,2725,2724,-2729,3490,2420,2355,-3490,2425,2475,2629,-2731,2731,2732,2649,-2649,1863,1885,2731,-2649,2733,2427,-2669,2427,2733,2769,-2769,2735,2734,2738,-2737,2046,2735,2736,-2738,2736,2738,2595,-2740,2736,2739,3195,-2738,2817,2584,97,-108,2714,2713,2740,-2118,2741,2742,2743,-2745,2746,2744,2743,-2746,2117,2740,2747,-2119,2005,2004,2641,-2641,2005,2640,2467,-2003,2748,2750,-2497,2753,2751,-2749,2551,2756,2754,-2553,2754,2756,3392,-3394,2755,2754,3393,-3395,2208,2215,-2362,2361,2215,2214,-2365,2757,2758,2627,-2760,2760,2761,2758,-2758,2762,2763,2758,-2762,2429,2428,2540,-2765,98,99,2618,-2618,2760,2765,2766,-2762,2481,2531,2766,-2766,2524,2767,2766,-2532,2762,2761,2766,-2768,2585,2588,2689,-2677,2689,2688,2677,-2677,2180,2653,-2652,2499,2504,2768,-2770,1850,2770,2773,-2775,2770,2771,2772,-2774,2775,2776,2763,-2763,2628,2763,2776,-2888,2263,2437,2777,-2259,2777,2533,2255,-2259,2562,2465,2430,-2430,2741,2778,2779,-2743,2259,2780,2779,-2779,2607,2606,2560,-2516,2781,2374,2722,-2726,2781,2725,2729,-2783,2750,2749,2783,-2785,2786,2785,2787,-2789,2786,2788,2789,-2791,2791,3364,121,-101,2791,2658,3363,-3365,2633,2794,2795,-2635,2616,2615,2795,-2795,2614,2796,2795,-2616,2637,2634,2795,-2797,2701,2347,2346,-2700,2701,2672,-2348,2701,2700,-2798,2672,2701,2797,-2920,2798,2608,2784,-2811,2519,2799,2798,2810,-2521,2580,2493,2272,-2582,3164,2718,2738,-2735,2259,2778,2800,-2261,2741,2801,2800,-2779,2523,2522,2800,-2802,2261,2260,2800,-2523,2255,2802,2803,-2257,2536,2804,2803,-2803,2513,2780,2803,-2805,2259,2256,2803,-2781,2193,2253,2805,-2432,2805,2664,2432,-2432,2643,2626,2629,-2476,2643,2642,2623,-2627,2702,2806,2807,-2597,2747,2740,-2546,2544,2661,-2594,2781,2782,2821,-3407,2781,3406,2371,-2375,2806,2808,3325,-3325,2807,2806,3324,-3324,2199,2442,2809,-2229,2809,2442,2441,-2447,88,101,2809,-2447,77,2228,2809,-102,2783,2811,2810,-2785,2521,2520,2810,-2812,2843,2812,2813,-2843,2813,2812,2684,2911,-3315,2814,103,92,-2661,2815,2814,2660,-2823,3322,2508,2807,-3324,2818,2819,3387,-3327,2819,2818,2898,-2898, 2821,2820,2360,-3406,2820,2821,2782,-3186,2664,2805,2815,-2823,2253,2823,2815,-2806,102,2814,2815,-2824,2824,2825,2827,-2829,2825,2245,2826,-2828,2829,2830,2503,-2503,2830,2831,2504,-2504,2543,2542,2541,-2833,2465,2558,-2431,2822,2833,2665,-2665,2547,2389,-2393,2834,2547,2392,-2397,2422,2427,2768,-2836,2768,2504,2831,-2836,2836,2837,2838,-2840,2837,2502,2501,-2839,2840,2284,2665,-2834,2614,2613,2603,-2540,2474,2603,-2614,2841,3374,2591,-3392,2429,2764,2713,-2563,2550,2549,105,-3502,2549,2548,104,-106,2468,2422,2835,-2845,2835,2831,2772,-2845,2479,2845,2846,-2531,2789,2788,2846,-2846,2787,2847,2846,-2789,2527,2530,2846,-2848,2727,3356,2848,-3355,2848,2849,-2851,2849,2848,3356,-3358,2848,2850,3233,-3355,2614,2539,2538,-2797,2538,2537,2637,-2797,2852,2851,3484,-2044,2853,2851,2852,-3228,3358,2854,2010,-3242,2855,2856,2854,-3359,2486,2483,2857,-2727,2482,2858,2857,-2484,2859,2860,2857,-2859,2545,2544,2593,-2748,2861,2862,2863,-2865,2865,2866,2863,-2863,2863,2866,2867,-2869,2864,2863,2868,-2871,2869,2870,2868,-2868,2481,2765,2871,-2478,2760,2872,2871,-2766,2874,2478,2487,-2889,2875,2874,2888,-2890,2789,2845,2874,-2876,2479,2478,2874,-2846,2305,2594,2876,-2307,2876,2594,2675,-2882,2308,2306,2876,-2878,2438,2263,2262,-2879,2262,2261,2526,-2879,1858,2468,2844,-2881,2844,2772,2771,-2881,2876,2881,2882,-2878,2746,2883,2884,-2745,2775,2885,2884,-2884,2523,2801,2884,-2886,2741,2744,2884,-2802,2435,2886,2706,-2178,2435,2249,2252,-2887,2730,2629,2628,-2888,98,2617,2678,-107,2486,2723,2888,-2488,2722,2889,2888,-2724,114,106,2678,-2492,114,2491,2817,-108,2774,2773,2830,-2830,2773,2772,2831,-2831,94,2588,2587,-110,2587,2557,108,-110,2852,2043,2047,2046,-2738,2524,2523,2885,-2768,2885,2775,2762,-2768,108,2557,2556,-111,2556,2618,99,-111,2890,2891,2759,-2893,2760,2757,2759,-2892,2627,2892,-2760,2893,2894,2895,-2897,2894,2342,2341,-2896,2897,2898,3236,-3238,2859,2899,2827,-2827,2899,2577,2828,-2828,2646,2902,2901,-2901,2903,2904,2901,-2903,2824,2905,2647,-2647,2905,2348,1889,-2648,2348,2905,-2907,2906,2905,2824,-2829,2245,2825,2900,-2517, 2825,2824,2646,-2901,2909,2907,2339,-2345,2908,2907,-2910,2910,2180,2651,-2912,2910,2911,2684,-2683,2746,2745,2912,-2884,2912,2745,2669,-2914,2887,2776,2912,-2914,2775,2883,2912,-2777,2668,2914,2913,-2670,2730,2887,2913,-2915,2915,2406,-2406,3483,2405,2386,-2646,2687,2915,2405,-3484,2916,2917,2797,-2701,2918,2919,2797,-2918,2864,2870,2920,2921,-3017,2869,2920,-2871,2922,2923,2926,-2928,2923,2924,2925,-2927,2928,2929,2932,-2934,2929,2930,2931,-2933,2939,2934,-2939,2934,2936,-2938,2937,2940,2938,-2935,2938,2940,3069,-3069,2939,2938,3068,-3072,2941,2942,-2944,2943,2942,2944,-2946,2946,2869,-2948,2946,2948,-2870,2946,2950,-2949,2623,2951,2952,-2625,2953,2954,2952,-2952,2937,2955,2952,-2955,2627,2624,2952,-2956,2937,2936,-2956,2935,2949,-2937,2890,2892,2936,-2950,2627,2955,2936,-2893,2918,2956,2957,-2920,2958,2959,2957,-2957,2959,2958,2960,-2962,2959,2961,2962,-2674,2339,2907,2963,-2965,2908,2965,2963,-2908,2966,2967,2963,-2966,2968,2964,2963,-2968,2969,2970,2971,-2973,2341,2340,2971,-2971,2339,2964,2971,-2341,2968,2972,2971,-2965,2973,2974,2975,-2977,2977,2978,2975,-2975,2896,2979,2975,-2979,2980,2976,2975,-2980,2978,3465,2893,-2897,2937,2954,2981,-2941,2953,2982,2981,-2955,2981,2982,3180,-3180,2940,2981,3179,-3070,2642,2982,-2954,2642,2983,3180,-2983,2918,2917,2984,-2986,2916,2986,2984,-2918,2987,2988,2984,-2987,2989,2985,2984,-2989,2958,2956,2990,-2992,2918,2985,2990,-2957,2989,2992,2990,-2986,2993,2991,2990,-2993,2995,2994,2996,-2998,2995,2997,2916,-2701,2916,2997,2998,-2987,2996,2999,2998,-2998,3000,3001,2998,-3000,2987,2986,2998,-3002,3002,2994,-3004,3002,3003,3004,-3006,3002,3005,3006,-3008,3002,3007,2996,-2995,3006,3008,3009,-3008,3010,3011,3009,-3009,3000,2999,3009,-3012,2996,3007,3009,-3000,3003,3012,3013,-3015,3015,3016,3013,-3013,3013,3016,2921,-3021,3014,3013,3020,-3024,3017,3014,3023,-3192,3017,3191,3090,3095,-3095,3005,3004,3017,3094,-3097,3003,3014,3017,-3005,3018,3019,3008,-3007,3019,2931,3010,-3009,2920,3021,3020,-2922,3022,3023,3020,-3022,2920,2869,2948,-3022,2948,2950,3022,-3022,3024,3025,3026,-3028, 3028,3029,3026,-3026,2969,2972,3026,-3030,2968,3027,3026,-2973,3030,3031,3032,-3034,3024,3027,3032,-3032,2968,2967,3032,-3028,2966,3033,3032,-2968,3035,3034,3024,-3032,3035,3031,3030,-3037,3024,3034,3037,-3026,3037,3038,3028,-3026,2925,2924,3039,-3043,3040,3041,3042,-3040,3040,3039,3035,-3037,3039,2924,3034,-3036,3043,3044,3047,-2928,3044,3045,3046,-3048,3042,3048,3049,-2926,3041,3048,-3043,3045,3044,3019,-3019,3044,3043,2931,-3020,2928,2933,2925,-3050,3050,2944,-3053,3051,3055,2930,-2930,2928,3053,3051,-2930,3011,3010,2930,-3056,3011,3055,3054,-3001,3001,3000,3054,-3057,3001,3056,2941,-2988,2941,3056,3052,-2943,3054,3050,3052,-3057,2944,2942,-3053,3058,3057,2989,-2989,3058,2988,2987,-2942,3060,3059,2993,-2993,3060,2992,2989,-3058,3062,2993,3059,-3062,2960,3063,3064,-3066,3062,3066,3064,-3064,3030,3033,3064,-3067,2966,3065,3064,-3034,3063,2960,2958,-2992,3063,2991,2993,-3063,2973,3067,3068,-3070,3070,3071,3068,-3068,3070,3067,3072,-3074,2973,2976,3072,-3068,2980,3074,3072,-2977,3075,3073,3072,-3075,3070,3073,3077,-3079,3073,3075,3076,-3078,3089,3080,3079,-3089,3079,2939,3071,-3089,3079,2935,-2940,2943,2945,3085,3105,-3082,3058,2941,2943,3081,-3058,2945,3082,3083,-3086,3082,3049,3048,-3084,3041,3084,3083,-3049,3059,3085,3083,-3085,3046,3086,3077,-3077,3086,3087,3078,-3078,3088,3078,3087,-3090,3082,2945,2944,-3054,2928,3049,3082,-3054,3022,2950,3080,-3091,3090,3080,3089,-3096,3045,3018,3091,-3094,3092,3093,-3092,3092,3091,3094,-3096,3018,3096,3094,-3092,3047,3046,3076,-3098,3047,3097,2922,-2928,3034,2924,2923,-3038,2923,2922,3038,-3038,3098,3038,2922,-3098,3076,3098,-3098,3028,3038,3098,-3100,3098,3076,3075,-3100,2969,3029,3100,-3102,3028,3099,3100,-3030,3075,3074,3100,-3100,2980,3101,3100,-3075,2980,2979,3102,-3102,2896,2895,3102,-2980,2341,2970,3102,-2896,2969,3101,3102,-2971,2697,2693,2862,-2862,2693,2692,2865,-2863,2864,3016,3015,-2862,3015,3012,3103,-2698,3012,3003,2994,-3104,3061,3059,3084,-3105,3057,3081,3105,-3061,3059,3060,3105,-3086,3046,3045,3093,-3087,3093,3092,3087,-3087,3089,3087,3092,-3096,3043,2927,2926, -3107,2926,2925,2933,-3107,2951,2623,-2643,2951,2642,-2954,2574,2590,3108,-3108,3108,2590,2872,-2874,2994,2995,2698,-3104,2700,2696,2698,-2996,52,111,3109,-1867,111,104,2548,-3110,2930,3010,-2932,2931,3043,3106,-2933,2933,2932,-3107,3005,3096,-3007,3006,3096,-3019,2574,2692,2695,-2576,2692,3107,-3112,2867,2866,3110,-3113,2865,3111,3110,-2867,2890,2947,2873,-2892,2947,2869,2867,-3113,2947,3112,3110,3108,-2874,2692,3111,-2866,3113,2280,2278,-3115,3113,3114,3115,-3117,3118,3117,3115,-3115,3118,3114,2278,-2289,112,3119,3120,-114,3120,3119,3125,-3127,2318,2293,3120,-3127,80,113,3120,-2294,3121,2297,2296,-3123,3121,3122,3123,-3125,3117,3118,3126,-3126,2288,2318,3126,-3119,7,12,2119,-2123,7,2122,2125,-9,2133,2119,12,-11,3127,3128,-3130,3130,3127,3129,-3132,2107,3132,3129,-3129,3129,3132,-3132,2133,10,11,-2143,11,0,61,-2143,9,8,2125,-2144,9,2143,2145,-35,3133,3134,3135,-3137,2105,3137,3135,-3135,3138,3136,3135,-3138,3139,3140,3141,-3143,3142,3141,-3132,3143,3144,3145,-3147,3133,3147,3145,-3145,3148,3149,3145,-3148,3150,3146,3145,-3150,3141,3140,3151,-3153,3139,3153,3151,-3141,3154,3152,3151,-3154,2881,2675,2408,-3157,2881,3156,2380,-2883,3156,2408,2356,-3158,3156,3157,2382,-2381,3157,2356,2421,-3159,3157,3158,2375,-2383,3158,2421,2418,-3160,2398,2375,3158,-3160,3159,2418,2436,-3162,2398,3159,3161,-2786,3160,2787,2785,-3162,3160,3161,2436,-2439,2438,2878,3162,-3161,2526,3163,3162,-2879,2527,2847,3162,-3164,2787,3160,3162,-2848,2525,2528,2527,-3164,2524,2528,-2526,2734,2735,3167,-3169,2735,2046,2045,-3168,3164,2734,3168,-3170,3165,3164,3169,-3171,3165,3170,3171,-3167,3172,3166,3171,-3174,3172,3173,2062,-2056,3174,2597,3362,-3404,3175,3174,3403,-3405,3174,3175,2655,-2655,3176,3036,3030,-3067,3176,3066,3062,-3062,3040,3036,3176,-3105,3061,3104,-3177,2908,3177,3178,-2966,2962,2961,3178,-3178,2960,3065,3178,-2962,2966,2965,3178,-3066,3071,3070,3078,-3089,2977,2974,3179,-3181,2973,3069,3179,-2975,2348,2347,1887,-1890,2697,2861,-3016,2346,2345,2575,-2696,3182,3181,3316,2546,-2548,2443,3181,3182,-3478,2447,2444,3183,-3185,2441,2440, 3183,-2445,2820,2266,-2361,3186,3187,-3189,2012,2009,3500,-3195,2009,2011,2248,-3501,2169,3189,3296,-3296,3189,3190,3297,-3297,2532,2565,2564,-3303,2564,2163,2472,-3303,2472,2163,2162,-2472,2162,2158,2461,-2472,2170,2169,3295,-2833,2541,2161,2170,-2833,2161,2541,2428,-2155,3022,3090,3191,-3024,3192,2010,2012,-3194,3192,3193,2053,-2057,3193,2012,3194,-3239,2656,2851,2853,-3316,2065,2067,3196,-2323,2070,2328,3196,-2068,2327,3197,3196,-2329,2321,2322,3196,-3198,2100,2099,3198,-2336,3198,3199,2337,-2336,3200,3201,-3203,3202,3203,-3201,3199,3198,3202,-3202,2099,3204,3202,-3199,2061,3203,3202,-3205,3200,3203,-3206,3206,3200,-3206,3205,2061,2062,-3208,3205,3203,-2062,3205,3207,-3207,2062,3173,3208,-3208,3171,3209,3208,-3174,3210,3211,3208,-3210,3206,3207,3208,-3212,3171,3170,3212,-3210,3169,3213,3212,-3171,3214,3215,3212,-3214,3210,3209,3212,-3216,3213,3169,3168,-3217,3213,3216,3217,-3215,3168,3167,3218,-3217,2045,3219,3218,-3168,3220,3221,3218,-3220,3217,3216,3218,-3222,3220,3219,3222,-3224,2045,2044,3222,-3220,2042,3224,3222,-2045,3225,3223,3222,-3225,3225,3224,2059,-3227,2042,2041,2059,-3225,2060,3226,2059,-2059,3227,2852,2737,-3196,2510,3228,3227,-3196,3228,2691,2853,-3228,2449,2691,3228,-3373,2498,3229,2592,-3376,2457,2592,-3230,2055,2054,3230,-3173,3230,2719,3166,-3173,3338,2088,2264,3188,3187,-3336,3231,3232,3234,-3236,3232,3233,2850,-3235,2719,3237,-3237,3193,3238,2054,-2054,3239,3240,3192,-2057,3240,3241,2010,-3193,3242,3239,-2057,3242,2056,-2062,3243,3244,-2100,2061,3204,2099,-3245,3239,3242,3245,-3247,2061,3244,3245,-3243,3243,3246,3245,-3245,3247,3248,3240,-3240,3248,3249,3241,-3241,2105,2103,3250,-3252,2102,3252,3250,-2104,2300,2299,3250,-3253,2297,3251,-3251,3250,2299,-2298,3124,3253,3254,-3122,3255,3256,3254,-3254,3138,3257,3254,-3257,2297,3121,3254,-3258,3255,3258,3259,-3257,3259,3147,3133,-3137,3138,3256,3259,-3137,2118,2307,2310,-2116,85,115,3260,-2304,82,2295,3260,-116,2284,2840,2287,-2286,2311,2290,2283,-3262,2311,3261,2276,-2287,3261,2283,2282,-3263,3261,3262,2277,-2277,3262,2282,2301,-3264,3262,3263, 2292,-2278,3265,3264,2108,-3267,2137,2128,3265,-3267,3479,3267,3266,-2109,2138,2137,3266,-3268,3479,3128,3268,-3268,3127,3269,3268,-3129,2145,2144,3268,-3270,2138,3267,3268,-2145,3130,3131,3141,-3271,3127,39,-3270,3131,3132,3271,-3143,2107,3272,3271,-3133,3139,3142,3271,-3273,2105,3134,3273,-3275,3273,3133,3275,-3140,3273,3134,-3134,3139,3274,-3274,2107,2106,3276,-3273,2105,3274,3276,-2107,3139,3272,3276,-3275,3269,39,34,-2146,2300,3252,-3278,3277,3252,2102,-2316,2764,2540,-2546,2764,2545,2740,-2714,3181,3279,2236,-3317,3190,3284,3298,-3298,3284,2156,3299,-3299,2158,2166,3285,-2160,3285,3286,2160,-2160,2160,3286,3287,-2584,3287,3288,2584,-2584,3284,3190,2146,-3291,2156,3284,-3291,2146,2168,3289,-3291,67,117,3289,-2169,65,2157,3289,-118,2156,3290,3289,-2158,97,2584,3288,-119,2533,2777,3291,-3293,3291,2777,2437,-2420,3490,3291,2419,-2421,2604,2632,3293,-2682,2535,3294,3293,-2633,2832,2566,-2544,2164,2566,2832,-3296,2166,2165,3296,-3298,2164,3295,3296,-2166,3286,3285,3298,-3300,2166,3297,3298,-3286,3288,3287,3300,-3302,3286,3299,3300,-3288,118,3288,3301,-120,65,119,-3302,3302,2472,3294,-3304,3292,2532,3302,-3304,2535,2534,3303,-3295,2533,3292,3303,-2535,2879,2790,2789,-2876,2373,2879,2875,-2890,2373,2889,2722,-2375,3263,2301,2300,-3278,3263,3277,2315,-2293,2291,2292,2315,-2317,2291,2316,3382,-3382,3304,2506,2580,-2579,2823,2253,2188,-2240,2823,2239,79,-103,2495,2433,-2433,2567,3305,3306,-2569,2190,2434,3306,-3306,2433,2568,3306,-2435,3307,2877,2882,-3156,2406,2915,3307,-3156,2593,2305,2118,-2748,2116,3308,2714,-2118,3308,3309,2563,-2715,2298,2301,2282,-2282,2298,2281,2280,-2297,3122,2296,2280,-3114,3122,3113,3116,-3124,2297,3257,3310,-3252,3138,3137,3310,-3258,2105,3251,3310,-3138,3133,3144,3311,-3276,3143,3312,3311,-3145,3154,3153,3311,-3313,3139,3275,3311,-3154,2043,3485,-3343,2426,2425,2730,-2915,2426,2914,2668,-2428,2536,2631,3313,-2805,2631,2607,2515,-3314,3313,2514,2513,-2805,2651,2652,3314,-2912,3314,2652,2656,-3316,2236,2201,2203,-3317,2396,2712,-2835,2712,2711,-2835,3330,2609,2610,3317,-3332,2598,2179,3330,-3332, 2546,3316,-2204,2073,2096,3318,2090,-2072,3319,3320,2402,-2405,3320,2712,2396,-2403,2753,3321,2752,-2752,3322,3323,2783,-2750,2783,3323,3324,-2812,2521,2811,3324,-3326,2521,3325,3326,-3328,2818,3326,3325,-2809,3332,2657,-2077,2038,2657,3332,-2049,3332,2076,-2052,2051,2048,-3333,3334,3235,3249,-3249,3334,3248,3247,-2271,3231,3335,3336,-3233,3187,3337,3336,-3336,3233,3232,3336,-3338,3339,2269,3338,-3232,3338,3335,-3232,2270,2269,3339,-3335,3339,3231,3235,-3335,3340,2270,3239,-3247,2270,3340,-2079,3243,3341,3340,-3247,3340,3341,-2079,2270,3247,-3240,2077,2078,3341,-2099,3341,3243,2099,-2099,3188,2264,-2268,3186,3188,2267,-3186,3186,3185,2782,-2730,2247,2011,2856,-3362,2245,2247,3361,-2827,2597,2653,-2599,3175,3404,3342,-3486,3343,2241,3281,-3345,2020,2033,3343,-3345,2235,3345,3344,-3282,2021,2020,-3345,3344,3345,-2022,2031,2021,3346,-2018,2189,2242,2017,-3347,2567,2570,3347,-3349,2214,2211,3347,-2571,2210,2218,3347,-2212,2222,3348,3347,-2219,2222,2221,3349,-2226,2025,2024,3349,-2222,3349,2024,3350,-3352,2225,3349,3351,-3353,2222,2190,3305,-3349,2567,3348,-3306,2032,2015,2026,3343,-2034,2015,2014,2029,-2027,2014,3352,3351,-3351,2014,2028,-3353,3346,2021,-3346,3345,2235,2189,-3347,3233,3337,3353,-3355,3187,3186,3353,-3338,2729,2728,3353,-3187,2727,3354,3353,-2729,3234,2850,2849,-3356,3234,3355,3249,-3236,3356,2727,2860,-2860,2859,3357,-3357,3359,2855,2849,-3358,2859,3359,-3358,3241,3249,3355,-3359,3355,2849,2855,-3359,2828,2577,2576,-2907,2576,2345,2348,-2907,2577,2899,3360,-2574,2859,2858,3360,-2900,2482,2573,3360,-2859,2855,3359,3361,-2857,3359,2859,2826,-3362,3331,3317,2037,-3363,2037,3317,-2658,2657,3317,2610,2097,-2077,3333,3365,2609,-3331,3184,2710,3320,3319,-3370,2712,3320,-2711,2791,100,86,-2449,2791,2448,2447,-2659,3366,3367,3319,-2405,3319,3367,3368,-3370,3369,2658,2447,-3185,2610,3366,3318,-2098,3366,2404,2090,-3319,2091,2090,2404,2402,-2402,2488,3371,2498,-3376,2488,2451,3370,-3372,2753,2748,3371,-3371,3370,2451,2449,-3373,2706,3373,-2178,2841,3391,3376,-3396,2756,3376,3391,-3393,2638,2637,2537,-3378,3377,2537, 2457,-3230,2473,2561,3379,-2603,2453,2455,-3380,2453,3379,2600,-2602,2459,2602,3379,-2456,3228,2510,3321,-3373,3321,2753,3370,-3373,3483,2645,2351,-3483,2365,2364,2507,-3381,2507,2506,3304,-3381,3381,3382,2582,-2582,2054,3238,3383,-3231,3383,3238,3194,-3385,2897,3237,3383,-3385,2719,3230,3383,-3238,3385,3500,2248,3388,-3387,3384,3385,2819,-2898,2819,3385,3386,-3388,3389,3387,3386,-3389,2248,2246,3390,-3389,3390,2245,-2517,3390,2246,-2246,3390,2516,-3408,3389,3388,-3391,3389,3390,-3408,2719,3236,-2718,2703,2717,3236,-2899,2898,2818,2808,-2704,2553,2552,2754,-2756,2551,2550,3378,-2716,3373,2715,3378,-3506,2755,3394,2453,-2602,2650,2649,2732,-3397,1879,2721,3397,-1973,2720,3398,3397,-2722,2732,2731,3397,-3399,1885,1972,3397,-2732,3396,2732,3398,-3400,2720,3399,-3399,3400,3396,2633,-2637,2639,3400,-2637,3400,2639,2903,-3402,2646,2650,3401,-2903,2903,2902,-3402,2720,2616,2794,-3400,3399,2794,2633,-3397,2707,2706,2886,-3403,2251,2685,2812,-2844,2684,2812,-2686,2886,2252,-3403,2904,2903,2639,-2800,2519,2904,-2800,2037,2035,3403,-3363,2034,3404,3403,-2036,2653,2597,3174,-2655,3485,2043,-3485,2414,2413,2354,-2416,2414,2415,2359,-2359,2403,2394,2358,-2358,2266,2268,2357,-2361,2086,2268,2266,-2266,2063,2086,2265,-2088,2095,2063,2087,-2095,2325,2095,2094,-2335,2325,2334,2333,-2327,2359,3405,-2361,2379,2371,3406,-2413,3406,2821,3405,-2413,2518,2521,3327,-3408,2516,2518,-3408,3387,3389,3327,-3327,3327,3389,-3408,2733,2668,2667,-2471,2760,2891,2873,-2873,3408,3409,3410,-3412,3409,2774,2829,-3411,3410,2829,2502,-2838,3412,3413,-3415,122,3412,3414,-124,1846,1851,3409,-3409,3409,1851,1850,-2775,3412,3416,-3416,3418,3417,3468,-3468,3418,3411,3419,-3418,2836,3420,-3412,3420,3415,3421,-3420,3421,3415,3416,-1829,3417,3419,3421,-1830,3469,3468,3417,-1830,3414,3413,2839,-2678,2839,3413,3420,-2837,2836,3411,3410,-2838,3416,3412,122,-125,3415,3420,3413,-3413,3419,3411,-3421,3408,3411,3418,-3423,3422,3418,-3468,1847,1846,3408,-3423,1847,3422,3467,-3476,123,3414,2677,-2689,123,2688,-97,1834,3423,3424,-1836,3425,3426,3424,-3424,3427,3428,3424, -3427,1836,1835,3424,-3429,1836,3428,3429,-1842,3427,3430,3429,-3429,1845,3431,3429,-3431,1842,1841,3429,-3432,1755,1756,1843,-1843,165,1843,-1757,1858,2880,3432,-1860,2771,3433,3432,-2881,3425,3423,3432,-3434,1834,1859,3432,-3424,1845,167,1759,-3432,1759,1755,1842,-3432,3425,3434,3435,-3427,1815,1814,3435,-3435,1813,3436,3435,-1815,3427,3426,3435,-3437,3427,3436,3437,-3431,1813,1827,3437,-3437,1821,1844,3437,-1828,1845,3430,3437,-1845,2771,2770,3438,-3434,1850,1853,3438,-2771,1815,3434,3438,-1854,3425,3433,3438,-3435,3440,3439,3441,-3443,3440,3442,1896,-1888,2962,3177,3443,-3445,3441,3444,3443,-3446,3443,2909,2344,-3446,2000,1926,3446,-3448,2000,3447,3448,-2002,2347,2674,3449,-3451,2673,3451,3449,-2675,3439,3450,3449,-3452,3451,2673,2962,-3445,3451,3444,3441,-3440,3440,1887,2347,-3451,3439,3440,-3451,1896,3442,3452,-3454,3441,3445,3452,-3443,2344,3454,3452,-3446,3446,3453,3452,-3455,1925,1897,1896,-3454,3448,3447,3455,-3457,3446,3455,-3448,2641,2004,-3458,3458,2004,1963,-3460,1928,2001,3459,-2000,1963,1999,-3460,3446,3454,3460,-3456,2344,2343,3460,-3455,2342,3461,3460,-2344,3456,3455,3460,-3462,3456,3461,3462,-3464,2342,2894,3462,-3462,2893,3464,3462,-2895,3457,3463,3462,-3465,2977,3180,2983,-3466,3458,3448,3456,-3464,3458,3463,3457,-2005,3465,2983,3466,3464,-2894,3466,2641,3457,-3465,2642,2641,-3467,2642,3466,-2984,1863,1889,-1865,2353,2352,2411,-2411,2384,2377,2409,-3496,2834,2711,3182,-2548,2005,1964,1963,-2005,3476,2728,2724,-2727,2860,3476,2726,-2858,2727,3476,-2861,2843,2842,2705,-3403,3395,2707,2704,-2842,2457,2456,2591,-2593,2749,2751,2752,-3323,2749,2750,2748,-2752,2739,2509,2510,-3196,2496,2497,2498,3371,-2749,2709,3477,3182,-2712,3477,2709,3183,-2441,2709,2711,2712,-2711,2416,2411,2352,-2645,2362,2365,2366,-2368,2113,2114,2115,-3479,2310,3478,-2116,2286,2285,2287,-2315,102,103,-2815,3381,2581,-2273,2410,2359,-2416,2525,3163,-2527,2040,3342,3404,-2035,2212,2208,2206,-2214,2558,2155,2154,-2431,2107,3479,-2109,2107,3128,-3480,1844,1821,1806,-1808,1824,140,1822,-1824,2435,127,69,-2250,2793,2319,2320,-2793, 2977,3465,-2979,1925,3453,3446,-1927,2001,3448,3458,-3460,3443,3177,2908,-2910,3111,3107,3108,-3111,3148,3147,3259,-3259,1161,577,578,-1727,2843,3402,2252,-2252,2650,3396,3400,-3402,405,402,403,-405,2072,2073,2071,-2069,2708,1878,1877,-2612,692,1704,836,-692,2366,2365,-3381,910,908,-912,443,1592,-442,3264,2114,-2114,2935,3079,3080,-2951,3040,3104,3084,-3042,2946,2947,2890,-2950,2946,2949,2935,-2951,2944,3050,3051,-3054,3054,3055,3051,-3051,3380,3481,-2367,3304,3482,3481,-3381,2687,3483,3482,3304,-2579,738,743,-687,2412,3405,2359,-2411,1866,3109,-1866,3484,2851,2656,-2656,3175,3485,3484,-2656,1170,379,3486,-1170,3487,3486,-380,379,1666,-3488,1642,1643,978,-975,889,890,-192,2553,2599,3109,-2549,1113,1724,1725,-958,890,929,928,192,-192,505,1697,-1028,345,347,344,-1173,1708,1709,344,-348,846,1715,1713,-849,232,243,-245,1389,1428,1387,-1253,2700,2699,2694,-2697,3488,2544,2542,-2544,3489,3488,2543,-2566,2532,3490,3489,-2566,3292,3291,3490,-2533,3494,744,705,-738,704,711,3494,-738,2387,3495,2416,-2645,2384,3495,-2388,2172,3496,70,-2176,2698,2696,2697,-3104,2692,2574,-3108,1415,1427,1414,-3498,415,1564,-591,1508,1570,1707,-1515,1529,1571,-389,2067,2066,2068,-2070,399,398,396,-398,408,596,-408,3498,1683,-1177,1178,3498,1176,-1176,1664,1564,415,-597,596,408,-596,596,595,1665,-1665,595,3499,1576,-1661,1575,3499,-596,2593,2594,-2306,630,446,632,-632,1027,1697,-1721,2706,2707,-3396,3384,3194,3500,-3386,845,1224,1223,-845,2820,3185,2267,-2267,1020,1022,-1022,2550,3501,3502,-3379,3378,3502,3504,-3506,3505,3504,72,-2178,3373,3505,-2178,2600,3379,-2562,3148,3542,3543,-3150,3549,3550,3141,-3153,3548,3549,3152,-3155,3270,3551,51,-40,3141,3550,3551,-3271,3149,3543,3544,-3151,3255,3540,3541,-3259,3258,3541,3542,-3149,3124,3538,3539,-3254,3253,3539,3540,-3256,1460,1467,3522,1461,-1460,3123,3537,3538,-3125,3146,3150,3544,-3546,3143,3546,3547,-3313,3312,3547,3548,-3155,3146,3545,3546,-3144,3507,3522,3523,-3509,3509,3508,3523,-3525,3510,3509,3524,-3526,3511,3510,3525,-3527,3512,3511,3526,-3528,3513,3512,3527,-3529,3514,3513,3528,-3530,3515, 3514,3529,-3531,3516,3515,3530,-3532,3517,3516,3531,-3533,3518,3517,3532,-3534,3533,3534,3519,-3519,3534,3535,3520,-3520,3521,3520,3535,-3537,50,3521,3536,44,45,47,48,-50,112,3507,3537,3117,3125,-3120,3522,1467,1468,-3524,3524,3523,1468,-1582,3525,3524,1581,-1584,3526,3525,1583,-1587,3527,3526,1586,-1492,3528,3527,1491,-1493,3529,3528,1492,-1494,3530,3529,1493,-1490,3531,3530,1489,-1487,3532,3531,1486,-1641,3533,3532,1640,-1497,1496,1494,3534,-3534,1494,1484,3535,-3535,44,3536,1598,-47,1461,3522,3507,112,1463,-1470,3537,3507,3508,-3539,3539,3538,3508,-3510,3540,3539,3509,-3511,3541,3540,3510,-3512,3542,3541,3511,-3513,3543,3542,3512,-3514,3544,3543,3513,-3515,3545,3544,3514,-3516,3546,3545,3515,-3517,3547,3546,3516,-3518,3548,3547,3517,-3519,3518,3519,3549,-3549,3519,3520,3550,-3550,3551,3550,3520,-3522,51,3551,3521,50,42,41,40,-39,3117,3537,3123,3116,-3116,429,1804,431,-431,3127,3130,3270,-40,43,46,-7,1484,1598,3536,-3536,16,26,-44,2323,2321,3552,-3554,2327,2326,3554,-3556,2329,2323,3553,-3557,2792,2320,3556,-3558,2338,2337,3559,-3561,2332,2338,3560,-3559,2060,2792,3557,-3562,3197,2327,3555,-3563,2321,3197,3562,-3553,2337,3199,3563,-3560,3201,3200,3564,-3566,3199,3201,3565,-3564,3564,3200,3206,-3567,3211,3210,3567,-3569,3206,3211,3568,-3567,3215,3214,3569,-3571,3210,3215,3570,-3568,3214,3217,3571,-3570,3221,3220,3572,-3574,3217,3221,3573,-3572,3220,3223,3574,-3573,3223,3225,3575,-3575,3225,3226,3576,-3576,3576,3226,2060,-3562,2326,2333,3577,-3555,3577,2333,2332,-3559,3553,3552,3578,-3580,3555,3554,3580,-3582,3556,3553,3579,-3583,3557,3556,3582,-3584,3560,3559,-3585,3561,3557,3583,-3587,3562,3555,3581,-3579,3552,3562,-3579,3559,3563,3587,-3585,3565,3564,-3589,3563,3565,3588,-3588,3589,3588,3564,-3567,3568,3567,3590,-3592,3566,3568,3591,-3590,3570,3569,3592,-3594,3567,3570,3593,-3591,3569,3571,3594,-3593,3573,3572,3595,-3597,3571,3573,3596,-3595,3572,3574,3597,-3596,3574,3575,3598,-3598,3575,3576,3599,-3599,3586,3599,3576,-3562,3554,3577,3600,-3581,3585,3600,3577,-3559,3582,3579,3586,-3584,3584,3585,3558,-3561,3647, 654,645,-3605,651,652,3603,-3603,645,1111,3605,-3605,3606,657,658,-3625,662,663,3608,-3608,663,657,3606,-3609,1111,392,3609,-3606,3609,392,1560,-3624,652,1533,3610,-3604,1533,646,3601,-3611,1535,662,3607,-3612,1536,1537,3613,-3613,1537,1535,3611,-3614,1544,1545,3615,-3615,1548,1549,3617,-3617,1549,1544,3614,-3618,1551,1548,3616,-3619,1554,1555,3620,-3620,1555,1551,3618,-3621,1557,1554,3619,-3622,1559,1557,3621,-3623,1560,1559,3622,-3624,658,651,3602,-3625,3628,3646,-3648,3602,3603,3627,-3627,3604,3605,-3629,3629,3606,3624,-3646,3607,3608,3631,-3631,3608,3606,3629,-3632,3605,3609,3632,-3629,3632,3609,3623,-3645,3610,3627,-3604,3611,3607,3630,-3634,3612,3613,-3635,3613,3611,3633,-3635,3614,3615,3635,-3637,3635,3615,3612,-3635,3616,3617,3638,-3638,3617,3614,3636,-3639,3618,3616,3637,-3640,3619,3620,3641,-3641,3620,3618,3639,-3642,3621,3619,3640,-3643,3622,3621,3642,-3644,3623,3622,3643,-3645,3624,3602,3626,-3646,3625,3627,-3611,3625,3610,-3602,3625,3601,3646,-3629,3601,646,648,-3647,3646,648,654,-3648,3628,3647,-3605,2320,2329,-3557,2621,2733,2470,-2623,1053,798,989,-991,1536,3612,3615,-1546,931,932,992,-821,2934,2935,-2937,2935,2934,-2940,3497,1277,-1416,1259,1256,-1258,3313,2515,-2515,2605,2680,-2493,2605,2492,-2671,3648,3649,3650,-3652,3652,3648,3651,-3654,3654,3652,3653,-3656,3656,3657,3658,-3660,3660,3661,3662,-3664,3664,3665,3666,-3668,3668,3669,3670,-3672,3672,3673,3674,-3676,3677,3649,3648,-3693,3692,3648,3652,-3679,3680,3678,3652,-3655,3693,3657,3656,-3695,3683,3661,3660,-3685,3695,3665,3664,-3697,3690,3688,3669,-3669,3697,3693,3694,-3699,3699,3700,3695,-3697,3691,3671,3670,-3690,3703,3667,3666,-3705,3685,3663,3662,-3683,3705,3659,3658,-3707,3681,3655,3653,-3680,3707,3679,3653,-3652,3676,3707,3651,-3651,3708,3703,3704,-3710,3710,3705,3706,-3712,3676,3650,3649,-3678,3657,3654,3655,-3659,3706,3658,3655,-3682,3693,3680,3654,-3658,3694,3656,3661,-3684,3705,3682,3662,-3660,3659,3662,3661,-3657,3665,3660,3663,-3667,3704,3666,3663,-3686,3695,3684,3660,-3666,3696,3664,3669,-3688,3703,3686,3670,-3668,3667,3670,3669,-3665, 3673,3668,3671,-3675,3674,3671,3691,-3703,3673,3701,3690,-3669,3669,3688,-3688,3673,3672,-3702,3675,3674,-3703,3670,3686,-3690,3681,3711,-3707,3680,3693,-3698,3683,3698,-3695,3682,3705,-3711,3685,3709,-3705,3684,3695,-3701,3687,3699,-3697,3686,3703,-3709,3712,3715,3714,-3714,3713,3714,3717,-3717,3716,3717,3719,-3719,3718,3719,3721,-3721,3722,3725,3724,-3724,3723,3724,3727,-3727,3726,3727,3729,-3729,3725,3732,3731,-3731,3730,3733,3724,-3726,3733,3734,3727,-3725,3734,3735,3729,-3728,3736,3715,3712,-3738,3738,3732,3725,-3723,3739,3742,3741,-3741,3743,3744,3742,-3740,3743,3746,3745,-3745,3720,3721,3745,-3747,3747,3750,3749,-3749,3750,3752,3751,-3750,3752,3728,3729,-3752,3753,3756,3755,-3755,3749,3758,3757,-3749,3751,3759,3758,-3750,3729,3735,3759,-3752,3760,3763,3762,-3762,3762,3764,3740,-3742,3765,3747,3748,-3755,3748,3757,3753,-3755,3738,3722,3714,-3716,3723,3717,3714,-3723,3726,3719,3717,-3724,3728,3721,3719,-3727,3715,3736,3766,-3739,3736,3768,3767,-3767,3765,3741,3742,-3748,3747,3742,3744,-3751,3750,3744,3745,-3753,3752,3745,3721,-3729,3741,3765,3755,-3763,3762,3755,3756,-3762,3769,3772,3771,-3771,3770,3774,3773,-3770,3774,3776,3775,-3774,3776,3778,3777,-3776,3779,3782,3781,-3781,3782,3784,3783,-3782,3784,3786,3785,-3784,3781,3733,3730,-3781,3783,3734,3733,-3782,3785,3735,3734,-3784,3787,3788,3771,-3773,3789,3779,3780,-3791,3791,3794,3793,-3793,3792,3793,3796,-3796,3795,3796,3798,-3798,3797,3798,3777,-3779,3799,3802,3801,-3801,3800,3801,3804,-3804,3804,3785,3786,-3804,3805,3756,3753,-3807,3802,3757,3758,-3802,3801,3758,3759,-3805,3759,3735,3785,-3805,3761,3808,3807,-3761,3808,3794,3791,-3810,3810,3806,3802,-3800,3806,3753,3757,-3803,3772,3769,3779,-3790,3769,3773,3782,-3780,3773,3775,3784,-3783,3775,3777,3786,-3785,3772,3789,3811,-3788,3787,3811,3767,-3769,3799,3793,3794,-3811,3800,3796,3793,-3800,3803,3798,3796,-3801,3777,3798,3803,-3787,3805,3810,3794,-3809,3756,3805,3808,-3762,3787,3768,3813,-3813,3736,3814,3813,-3769,3815,3818,3817,-3817,3819,3817,3818,-3821,3821,3819,3820,-3823,3823,3821,3822,-3825,3816,3826, 3825,-3816,3827,3830,3829,-3829,3831,3829,3830,-3833,3833,3831,3832,-3835,3824,3833,3834,-3824,3835,3836,3827,-3829,3817,3838,3837,-3817,3819,3839,3838,-3818,3821,3840,3839,-3820,3841,3840,3821,-3824,3842,3843,3816,-3838,3844,3845,3830,-3828,3832,3830,3845,-3847,3834,3832,3846,-3848,3834,3847,3841,-3824,3827,3849,3848,-3845,3815,3851,3850,-3819,3820,3818,3850,-3853,3822,3820,3852,-3854,3824,3822,3853,-3855,3855,3857,3856,-3827,3825,3858,3851,-3816,3829,3860,3859,-3829,3831,3861,3860,-3830,3833,3862,3861,-3832,3824,3854,3862,-3834,3828,3859,3863,-3836,3836,3835,3863,-3865,3836,3864,3866,-3866,3837,3838,3868,-3868,3839,3869,3868,-3839,3840,3870,3869,-3840,3841,3871,3870,-3841,3855,3843,3872,-3858,3842,3837,3867,-3874,3845,3844,3875,-3875,3846,3845,3874,-3877,3847,3846,3876,-3878,3847,3877,3871,-3842,3844,3848,3878,-3876,3848,3849,3879,-3879,3849,3865,3866,-3880,3826,3856,3858,-3826,3843,3842,3873,-3873,3851,3712,3713,-3851,3713,3716,3852,-3851,3852,3716,3718,-3854,3718,3720,3854,-3854,3857,3880,3814,-3857,3737,3712,3851,-3859,3860,3739,3740,-3860,3861,3743,3739,-3861,3862,3746,3743,-3862,3854,3720,3746,-3863,3859,3740,3764,-3864,3863,3764,3763,-3865,3763,3881,3866,-3865,3770,3771,3867,-3869,3774,3770,3868,-3870,3776,3774,3869,-3871,3871,3778,3776,-3871,3812,3880,3857,-3873,3867,3771,3788,-3874,3875,3791,3792,-3875,3792,3795,3876,-3875,3876,3795,3797,-3878,3877,3797,3778,-3872,3809,3791,3875,-3879,3807,3809,3878,-3880,3866,3881,3807,-3880,3814,3737,3858,-3857,3873,3788,3812,-3873,3730,3731,3790,-3781,3731,3732,3766,-3768,3811,3790,3731,-3768,3813,3814,-3881,3765,3754,-3756,3762,3763,-3765,3760,3881,-3764,3813,3880,-3813,3810,3805,-3807,3808,3809,-3808,3760,3807,-3882,3814,3736,-3738,3787,3812,-3789,3827,3836,-3866,3865,3849,-3828,3843,3855,-3817,3816,3855,-3827,3738,3766,-3733,3790,3811,-3790,3882,3883,3884,-3886,3883,3886,3887,-3885,3886,3888,3889,-3888,3888,3890,3891,-3890,3892,3893,3894,-3896,3893,3896,3897,-3895,3896,3898,3899,-3898,3895,3900,3901,-3903,3900,3895,3894,-3904,3903,3894,3897,-3905,3904,3897,3899,-3906, 3906,3907,3882,-3886,3908,3892,3895,-3903,3909,3910,3911,-3913,3913,3909,3912,-3915,3913,3914,3915,-3917,3890,3916,3915,-3892,3917,3918,3919,-3921,3920,3919,3921,-3923,3922,3921,3899,-3899,3923,3924,3925,-3927,3919,3918,3927,-3929,3921,3919,3928,-3930,3899,3921,3929,-3906,3930,3931,3932,-3934,3932,3911,3910,-3935,3935,3924,3918,-3918,3918,3924,3923,-3928,3908,3885,3884,-3893,3893,3892,3884,-3888,3896,3893,3887,-3890,3898,3896,3889,-3892,3885,3908,3936,-3907,3906,3936,3937,-3939,3935,3917,3912,-3912,3917,3920,3914,-3913,3920,3922,3915,-3915,3922,3898,3891,-3916,3911,3932,3925,-3936,3932,3931,3926,-3926,3939,3940,3941,-3943,3940,3939,3943,-3945,3944,3943,3945,-3947,3946,3945,3947,-3949,3949,3950,3951,-3953,3952,3951,3953,-3955,3954,3953,3955,-3957,3951,3950,3900,-3904,3953,3951,3903,-3905,3955,3953,3904,-3906,3957,3942,3941,-3959,3959,3960,3950,-3950,3961,3962,3963,-3965,3962,3965,3966,-3964,3965,3967,3968,-3967,3967,3948,3947,-3969,3969,3970,3971,-3973,3970,3973,3974,-3972,3974,3973,3956,-3956,3975,3976,3923,-3927,3972,3971,3928,-3928,3971,3974,3929,-3929,3929,3974,3955,-3906,3931,3930,3977,-3979,3978,3979,3961,-3965,3980,3969,3972,-3977,3976,3972,3927,-3924,3942,3959,3949,-3940,3939,3949,3952,-3944,3943,3952,3954,-3946,3945,3954,3956,-3948,3942,3957,3981,-3960,3957,3938,3937,-3982,3969,3980,3964,-3964,3970,3969,3963,-3967,3973,3970,3966,-3969,3947,3956,3973,-3969,3975,3978,3964,-3981,3926,3931,3978,-3976,3957,3982,3983,-3939,3906,3938,3983,-3985,3985,3986,3987,-3989,3989,3990,3988,-3988,3991,3992,3990,-3990,3993,3994,3992,-3992,3986,3985,3995,-3997,3997,3998,3999,-4001,4001,4002,4000,-4000,4003,4004,4002,-4002,3994,3993,4004,-4004,4005,3998,3997,-4007,3987,3986,4007,-4009,3989,3987,4008,-4010,3991,3989,4009,-4011,4011,3993,3991,-4011,4012,4007,3986,-4014,4014,3997,4000,-4016,4002,4016,4015,-4001,4004,4017,4016,-4003,4004,3993,4011,-4018,3997,4014,4018,-4020,3985,3988,4020,-4022,3990,4022,4020,-3989,3992,4023,4022,-3991,3994,4024,4023,-3993,4025,3996,4026,-4028,3995,3985,4021,-4029,3999,3998,4029,-4031,4001,3999,4030, -4032,4003,4001,4031,-4033,3994,4003,4032,-4025,3998,4005,4033,-4030,4006,4034,4033,-4006,4006,4035,4036,-4035,4007,4037,4038,-4009,4009,4008,4038,-4040,4010,4009,4039,-4041,4011,4010,4040,-4042,4025,4027,4042,-4014,4012,4043,4037,-4008,4015,4044,4045,-4015,4016,4046,4044,-4016,4017,4047,4046,-4017,4017,4011,4041,-4048,4014,4045,4048,-4019,4018,4048,4049,-4020,4019,4049,4036,-4036,3996,3995,4028,-4027,4013,4042,4043,-4013,4021,4020,3883,-3883,3883,4020,4022,-3887,4022,4023,3888,-3887,3888,4023,4024,-3891,4027,4026,3984,-4051,3907,4028,4021,-3883,4030,4029,3910,-3910,4031,4030,3909,-3914,4032,4031,3913,-3917,4024,4032,3916,-3891,4029,4033,3934,-3911,4033,4034,3933,-3935,3933,4034,4036,-4052,3940,4038,4037,-3942,3944,4039,4038,-3941,3946,4040,4039,-3945,4041,4040,3946,-3949,3982,4042,4027,-4051,4037,4043,3958,-3942,4045,4044,3962,-3962,3962,4044,4046,-3966,4046,4047,3967,-3966,4047,4041,3948,-3968,3979,4048,4045,-3962,3977,4049,4048,-3980,4036,4049,3977,-4052,3984,4026,4028,-3908,4043,4042,3982,-3959,3900,3950,3960,-3902,3901,3937,3936,-3903,3981,3937,3901,-3961,3983,4050,-3985,3935,3925,-3925,3932,3934,-3934,3930,3933,-4052,3983,3982,-4051,3980,3976,-3976,3978,3977,-3980,3930,4051,-3978,3984,3907,-3907,3957,3958,-3983,3997,4035,-4007,4035,3997,-4020,4013,3986,-4026,3986,3996,-4026,3908,3902,-3937,3960,3959,-3982,4052,4053,4054,-4056,4053,4056,4057,-4055,4056,4058,4059,-4058,4058,4060,4061,-4060,4062,4056,4053,-4064,4064,4058,4056,-4063,4065,4060,4058,-4065,4066,4067,4068,-4070,4070,4071,4062,-4064,4071,4072,4064,-4063,4072,4073,4065,-4065,4074,4075,4071,-4071,4075,4076,4072,-4072,4076,4077,4073,-4073,4082,4083,4067,-4067,4055,4082,4066,-4053,4063,4053,4052,-4070,4068,4070,4063,-4070,4081,4080,4084,-4086,4086,4087,4088,-4090,4090,4091,4089,-4089,4092,4093,4091,-4091,4094,4095,4093,-4093,4096,4097,4089,-4092,4098,4096,4091,-4094,4099,4098,4093,-4096,4100,4101,4102,-4104,4096,4104,4105,-4098,4098,4106,4104,-4097,4099,4107,4106,-4099,4104,4075,4074,-4106,4106,4076,4075,-4105,4107,4077,4076,-4107,4108,4109,4080,-4080,4110, 4111,4102,-4102,4102,4112,4087,-4087,4097,4103,4086,-4090,4097,4105,4100,-4104,4084,4080,4109,-4114,4114,4115,4083,-4117,4114,4116,4117,-4111,4085,4118,4119,-4082,4085,4084,4120,-4119,4113,4121,4120,-4085,4113,4109,4122,-4122,4108,4110,4101,-4110,4108,4079,4114,-4111,4078,4081,4067,-4116,4118,4070,4068,-4120,4074,4070,4118,-4121,4100,4105,4121,-4123,4121,4105,4074,-4121,4123,4124,4125,-4127,4127,4128,4126,-4126,4129,4130,4128,-4128,4061,4060,4130,-4130,4131,4132,4126,-4129,4133,4131,4128,-4131,4065,4133,4130,-4061,4134,4135,4136,-4138,4131,4138,4139,-4133,4133,4140,4138,-4132,4065,4073,4140,-4134,4138,4141,4142,-4140,4140,4143,4141,-4139,4073,4077,4143,-4141,4144,4145,4146,-4148,4136,4135,4148,-4150,4124,4123,4136,-4151,4132,4137,4123,-4127,4132,4139,4134,-4138,4151,4146,4145,-4153,4153,4154,4155,-4157,4154,4157,4158,-4156,4157,4159,4160,-4159,4159,4095,4094,-4161,4161,4157,4154,-4163,4163,4159,4157,-4162,4099,4095,4159,-4164,4164,4165,4166,-4168,4168,4169,4161,-4163,4169,4170,4163,-4162,4170,4107,4099,-4164,4142,4141,4169,-4169,4141,4143,4170,-4170,4143,4077,4107,-4171,4171,4147,4146,-4173,4173,4165,4164,-4175,4164,4153,4156,-4176,4162,4154,4153,-4168,4166,4168,4162,-4168,4172,4146,4151,-4177,4177,4148,4178,-4180,4180,4179,4178,-4174,4152,4145,4181,-4183,4183,4151,4152,-4183,4176,4151,4183,-4185,4185,4172,4176,-4185,4165,4173,4171,-4173,4178,4147,4171,-4174,4148,4144,4147,-4179,4144,4148,4135,-4146,4134,4139,4182,-4182,4142,4183,4182,-4140,4166,4185,4184,-4169,4142,4168,4184,-4184,4186,4187,4188,-4190,4187,4190,4191,-4189,4191,4190,4192,-4194,4193,4192,4194,-4196,4188,4191,4196,-4198,4191,4193,4198,-4197,4193,4195,4199,-4199,4189,4197,4200,-4202,4189,4201,4202,-4187,4203,4204,4205,-4207,4204,4203,4207,-4209,4209,4208,4207,-4211,4211,4209,4210,-4213,4203,4197,4196,-4208,4207,4196,4198,-4211,4210,4198,4199,-4213,4213,4197,4206,-4215,4215,4214,4206,-4206,4216,4217,4218,-4220,4217,4216,4220,-4222,4222,4221,4220,-4224,4194,4222,4223,-4196,4216,4224,4225,-4221,4220,4225,4226,-4224,4223,4226,4199,-4196,4227,4224,4219,-4229, 4229,4228,4219,-4219,4230,4231,4232,-4234,4231,4234,4235,-4233,4235,4234,4236,-4238,4237,4236,4211,-4213,4232,4235,4225,-4225,4225,4235,4237,-4227,4237,4212,4199,-4227,4238,4239,4233,-4225,4240,4230,4233,-4240,4187,4186,4241,-4243,4190,4187,4242,-4244,4192,4190,4243,-4245,4194,4192,4244,-4246,4186,4202,4246,-4242,4202,4201,4247,-4247,4205,4204,4248,-4250,4208,4250,4248,-4205,4208,4209,4251,-4251,4209,4211,4252,-4252,4205,4249,4253,-4216,4215,4253,4254,-4215,4200,4255,4256,-4258,4200,4257,4247,-4202,4255,4213,4258,-4257,4213,4214,4254,-4259,4218,4217,4259,-4261,4221,4261,4259,-4218,4221,4222,4262,-4262,4222,4194,4245,-4263,4218,4260,4263,-4230,4229,4263,4264,-4229,4231,4230,4265,-4267,4234,4231,4266,-4268,4236,4234,4267,-4269,4211,4236,4268,-4253,4230,4240,4269,-4266,4240,4239,4270,-4270,4271,4227,4272,-4274,4227,4228,4264,-4273,4238,4271,4273,-4275,4238,4274,4270,-4240,4054,4242,4241,-4056,4057,4243,4242,-4055,4059,4244,4243,-4058,4061,4245,4244,-4060,4241,4246,4082,-4056,4246,4247,4275,-4083,4087,4249,4248,-4089,4088,4248,4250,-4091,4090,4250,4251,-4093,4092,4251,4252,-4095,4112,4253,4249,-4088,4111,4254,4253,-4113,4083,4257,4256,-4117,4275,4247,4257,-4084,4256,4258,4117,-4117,4258,4254,4111,-4118,4124,4260,4259,-4126,4125,4259,4261,-4128,4127,4261,4262,-4130,4129,4262,4245,-4062,4150,4263,4260,-4125,4149,4264,4263,-4151,4155,4266,4265,-4157,4158,4267,4266,-4156,4160,4268,4267,-4159,4094,4252,4268,-4161,4265,4269,4175,-4157,4269,4270,4174,-4176,4273,4272,4177,-4180,4272,4264,4149,-4178,4180,4274,4273,-4180,4174,4270,4274,-4181,4052,4066,-4070,4082,4275,-4084,4115,4067,-4084,4086,4103,-4103,4102,4111,-4113,4111,4110,-4118,4109,4101,-4123,4067,4081,-4120,4067,4119,-4069,4122,4101,-4101,4123,4137,-4137,4136,4149,-4151,4153,4164,-4168,4164,4175,-4175,4148,4177,-4150,4174,4180,-4174,4172,4185,-4166,4135,4181,-4146,4135,4134,-4182,4185,4166,-4166,4188,4197,-4190,4197,4203,-4207,4197,4255,-4201,4255,4197,-4214,4224,4216,-4220,4232,4224,-4234,4224,4227,-4272,4271,4238,-4225,4276,4277,4344,-4346,4279,4278,4280,-4282,4281, 4280,4282,-4284,4283,4282,4284,-4286,4285,4284,4286,-4288,4287,4286,4288,-4290,4289,4288,4290,-4292,4347,4348,4292,-4294,4293,4292,4294,-4296,4295,4294,4296,-4298,4297,4296,4298,-4300,4299,4298,4277,-4277,4277,4300,4343,-4345,4278,4301,4302,-4281,4280,4302,4303,-4283,4282,4303,4304,-4285,4284,4304,4305,-4287,4286,4305,4306,-4289,4288,4306,4307,-4291,4348,4349,4308,-4293,4292,4308,4309,-4295,4294,4309,4310,-4297,4296,4310,4311,-4299,4298,4311,4300,-4278,4301,4313,4314,-4303,4302,4314,4315,-4304,4303,4315,4316,-4305,4304,4316,4317,-4306,4305,4317,4318,-4307,4306,4318,4319,-4308,4307,4319,-4321,4312,4324,4325,-4314,4313,4325,4326,-4315,4314,4326,4327,-4316,4315,4327,4328,-4317,4316,4328,4329,-4318,4317,4329,4330,-4319,4318,4330,4331,-4320,4319,4331,4332,-4321,4320,4332,4333,-4322,4321,4333,4334,-4323,4322,4334,4335,-4324,4323,4335,4324,-4313,4336,4279,-4282,4336,4281,-4284,4336,4283,-4286,4336,4285,-4288,4336,4287,-4290,4336,4289,-4292,4346,4347,4293,-4338,4346,4337,4276,-4346,4337,4293,4295,-4298,4276,4337,4297,-4300,4312,4313,-4302,4338,4312,4301,-4279,4339,4338,4278,-4280,4336,4340,4339,-4280,4336,4291,4341,-4341,4291,4290,4342,-4342,4290,4307,4320,-4343,4344,4343,4312,-4339,4345,4344,4338,-4340,4340,4346,4345,-4340,4340,4341,4347,-4347,4341,4342,4348,-4348,4342,4320,4349,-4349,4430,4415,4416,-4430,4351,4354,4355,-4353,4354,4356,4357,-4356,4356,4358,4359,-4358,4358,4360,4361,-4360,4360,4362,4363,-4362,4362,4364,4365,-4364,4413,4422,4423,-4413,4366,4368,4369,-4368,4368,4370,4371,-4370,4370,4372,4373,-4372,4372,4350,4353,-4374,4428,4429,4416,-4387,4352,4355,4376,-4375,4355,4357,4377,-4377,4357,4359,4378,-4378,4359,4361,4379,-4379,4361,4363,4380,-4380,4363,4365,4381,-4381,4394,4412,4423,-4425,4367,4369,4383,-4383,4369,4371,4384,-4384,4371,4373,4385,-4385,4373,4353,4375,-4386,4374,4376,4388,-4388,4376,4377,4389,-4389,4377,4378,4390,-4390,4378,4379,4391,-4391,4379,4380,4392,-4392,4380,4381,4393,-4393,4381,4394,-4394,4382,4383,-4421,4383,4384,4419,-4421,4384,4385,4418,-4420,4385,4375,-4419,4386,4387,4398,-4400,4387,4388, 4400,-4399,4388,4389,4401,-4401,4389,4390,4402,-4402,4390,4391,4403,-4403,4391,4392,4404,-4404,4392,4393,4405,-4405,4393,4394,4406,-4406,4394,4395,4407,-4407,4395,4396,4408,-4408,4396,4397,4409,-4409,4397,4386,4399,-4410,4410,4354,-4352,4410,4356,-4355,4410,4358,-4357,4410,4360,-4359,4410,4362,-4361,4410,4364,-4363,4368,4366,4417,-4371,4372,4370,4417,-4351,4399,4398,-4412,4398,4400,-4412,4400,4401,-4412,4401,4402,-4412,4402,4403,-4412,4403,4404,-4412,4404,4405,-4412,4405,4406,-4412,4406,4407,-4412,4407,4408,-4412,4408,4409,-4412,4409,4399,-4412,4386,4374,-4388,4381,4365,4412,-4395,4364,4413,4412,-4366,4414,4413,4364,-4411,4415,4414,4410,-4352,4416,4415,4351,-4353,4386,4416,4352,-4375,4421,4422,4413,-4415,4430,4421,4414,-4416,4427,4428,4386,-4398,4426,4427,4397,-4397,4425,4426,4396,-4396,4424,4425,4395,-4395,4417,4366,4422,-4422,4423,4422,4366,-4368,4424,4423,4367,-4383,4382,4420,4425,-4425,4420,4419,4426,-4426,4419,4418,4427,-4427,4418,4375,4428,-4428,4375,4353,4429,-4429,4350,4430,4429,-4354,4350,4417,4421,-4431,4431,4432,4433,-4435,4432,4435,4436,-4434,4435,4437,4438,-4437,4437,4439,4440,-4439,4439,4441,4442,-4441,4442,4441,4443,-4445,4441,4445,4446,-4444,4441,4439,4447,-4446,4439,4437,4448,-4448,4437,4435,4449,-4449,4435,4432,4450,-4450,4432,4431,4451,-4451,4444,4443,4458,-4458,4443,4446,4459,-4459,4446,4445,4460,-4460,4445,4447,4461,-4461,4447,4448,4462,-4462,4448,4449,4463,-4463,4449,4450,4464,-4464,4457,4458,4465,-4457,4459,4460,4465,-4459,4460,4461,4466,-4466,4461,4462,4467,-4467,4462,4463,4468,-4468,4463,4464,4469,-4469,4465,4466,4455,-4457,4466,4467,4454,-4456,4467,4468,4453,-4455,4468,4469,4452,-4454,4470,4471,4472,-4474,4472,4474,4475,-4474,4474,4476,4477,-4476,4477,4476,4478,-4480,4479,4478,4480,-4482,4481,4480,4471,-4471,4482,4483,4484,-4486,4484,4483,4486,-4488,4487,4486,4488,-4490,4488,4490,4491,-4490,4490,4492,4493,-4492,4492,4482,4485,-4494,4494,4495,4496,-4498,4497,4496,4498,-4500,4498,4500,4501,-4500,4500,4502,4503,-4502,4502,4504,4505,-4504,4504,4495,4494,-4506,4506,4507,4508,-4510,4508,4510,4511, -4510,4510,4512,4513,-4512,4512,4514,4515,-4514,4515,4514,4516,-4518,4516,4507,4506,-4518,4518,4519,4520,-4522,4520,4519,4522,-4524,4523,4522,4524,-4526,4524,4526,4527,-4526,4526,4528,4529,-4528,4528,4518,4521,-4530,4530,4531,4532,-4534,4532,4531,4534,-4536,4535,4534,4536,-4538,4536,4538,4539,-4538,4538,4540,4541,-4540,4540,4530,4533,-4542,4542,4543,4544,-4546,4546,4543,4542,-4548,4548,4546,4547,-4550,4550,4548,4549,-4552,4552,4553,4550,-4552,4545,4544,4553,-4553,4554,4555,4556,-4558,4557,4558,4559,-4555,4521,4520,4560,-4562,4520,4523,4562,-4561,4523,4525,4563,-4563,4525,4527,4564,-4564,4564,4527,4529,-4566,4529,4521,4561,-4566,4560,4531,4530,-4562,4562,4534,4531,-4561,4563,4536,4534,-4563,4538,4536,4563,-4565,4540,4538,4564,-4566,4561,4530,4540,-4566,4470,4473,4566,-4568,4473,4475,4568,-4567,4568,4475,4477,-4570,4569,4477,4479,-4571,4570,4479,4481,-4572,4481,4470,4567,-4572,4572,4485,4484,-4574,4566,4483,4482,-4568,4484,4487,4574,-4574,4568,4486,4483,-4567,4487,4489,4575,-4575,4569,4488,4486,-4569,4489,4491,4576,-4576,4490,4488,4569,-4571,4576,4491,4493,-4578,4492,4490,4570,-4572,4493,4485,4572,-4578,4567,4482,4492,-4572,4578,4494,4497,-4580,4573,4496,4495,-4573,4497,4499,4580,-4580,4574,4498,4496,-4574,4499,4501,4581,-4581,4575,4500,4498,-4575,4501,4503,4582,-4582,4502,4500,4575,-4577,4582,4503,4505,-4584,4504,4502,4576,-4578,4505,4494,4578,-4584,4495,4504,4577,-4573,4506,4509,4584,-4586,4579,4508,4507,-4579,4509,4511,4586,-4585,4580,4510,4508,-4580,4511,4513,4587,-4587,4581,4512,4510,-4581,4587,4513,4515,-4589,4514,4512,4581,-4583,4588,4515,4517,-4590,4516,4514,4582,-4584,4517,4506,4585,-4590,4507,4516,4583,-4579,4584,4519,4518,-4586,4586,4522,4519,-4585,4587,4524,4522,-4587,4526,4524,4587,-4589,4528,4526,4588,-4590,4518,4528,4589,-4586,4590,4472,4471,-4592,4592,4474,4472,-4591,4476,4474,4592,-4594,4478,4476,4593,-4595,4480,4478,4594,-4596,4591,4471,4480,-4596,4596,4542,4545,-4598,4544,4543,4590,-4592,4598,4547,4542,-4597,4543,4546,4592,-4591,4599,4549,4547,-4599,4546,4548,4593,-4593,4551,4549,4599,-4601,4593,4548, 4550,-4595,4552,4551,4600,-4602,4594,4550,4553,-4596,4597,4545,4552,-4602,4553,4544,4591,-4596,4597,4602,4556,-4597,4556,4555,4598,-4597,4555,4603,4599,-4599,4603,4559,4600,-4600,4600,4559,4558,-4602,4601,4558,4602,-4598,4604,4605,4606,-4608,4606,4605,4608,-4610,4609,4608,4610,-4612,4610,4612,4613,-4612,4612,4614,4615,-4614,4614,4604,4607,-4616,4616,4617,4618,-4620,4618,4620,4621,-4620,4620,4622,4623,-4622,4623,4622,4624,-4626,4625,4624,4626,-4628,4627,4626,4617,-4617,4628,4629,4630,-4632,4629,4632,4633,-4631,4633,4632,4634,-4636,4635,4634,4636,-4638,4637,4636,4638,-4640,4639,4638,4628,-4632,4640,4641,4642,-4644,4642,4641,4644,-4646,4645,4644,4646,-4648,4647,4646,4648,-4650,4648,4650,4651,-4650,4651,4650,4640,-4644,4652,4653,4654,-4656,4654,4656,4657,-4656,4656,4658,4659,-4658,4659,4658,4660,-4662,4661,4660,4662,-4664,4663,4662,4653,-4653,4664,4533,4532,-4666,4532,4535,4666,-4666,4535,4537,4667,-4667,4667,4537,4539,-4669,4668,4539,4541,-4670,4669,4541,4533,-4665,4670,4671,4672,-4674,4674,4675,4670,-4674,4676,4677,4675,-4675,4678,4679,4677,-4677,4680,4679,4678,-4682,4671,4680,4681,-4673,4682,4683,4684,-4686,4683,4682,4686,-4688,4653,4688,4689,-4655,4654,4689,4690,-4657,4656,4690,4691,-4659,4658,4691,4692,-4661,4692,4693,4662,-4661,4662,4693,4688,-4654,4689,4688,4664,-4666,4690,4689,4665,-4667,4691,4690,4666,-4668,4668,4692,4691,-4668,4669,4693,4692,-4669,4688,4693,4669,-4665,4604,4694,4695,-4606,4605,4695,4696,-4609,4696,4697,4610,-4609,4697,4698,4612,-4611,4698,4699,4614,-4613,4614,4699,4694,-4605,4700,4701,4618,-4618,4695,4694,4616,-4620,4618,4701,4702,-4621,4696,4695,4619,-4622,4620,4702,4703,-4623,4697,4696,4621,-4624,4622,4703,4704,-4625,4625,4698,4697,-4624,4704,4705,4626,-4625,4627,4699,4698,-4626,4626,4705,4700,-4618,4694,4699,4627,-4617,4706,4707,4629,-4629,4701,4700,4631,-4631,4629,4707,4708,-4633,4702,4701,4630,-4634,4632,4708,4709,-4635,4703,4702,4633,-4636,4634,4709,4710,-4637,4637,4704,4703,-4636,4710,4711,4638,-4637,4639,4705,4704,-4638,4638,4711,4706,-4629,4631,4700,4705,-4640,4640,4712,4713,-4642,4707, 4706,4643,-4643,4641,4713,4714,-4645,4708,4707,4642,-4646,4644,4714,4715,-4647,4709,4708,4645,-4648,4715,4716,4648,-4647,4649,4710,4709,-4648,4716,4717,4650,-4649,4651,4711,4710,-4650,4650,4717,4712,-4641,4643,4706,4711,-4652,4713,4712,4652,-4656,4714,4713,4655,-4658,4715,4714,4657,-4660,4661,4716,4715,-4660,4663,4717,4716,-4662,4652,4712,4717,-4664,4718,4719,4607,-4607,4720,4718,4606,-4610,4611,4721,4720,-4610,4613,4722,4721,-4612,4615,4723,4722,-4614,4719,4723,4615,-4608,4724,4725,4671,-4671,4672,4719,4718,-4674,4726,4724,4670,-4676,4673,4718,4720,-4675,4727,4726,4675,-4678,4674,4720,4721,-4677,4679,4728,4727,-4678,4721,4722,4678,-4677,4680,4729,4728,-4680,4722,4723,4681,-4679,4725,4729,4680,-4672,4681,4723,4719,-4673,4725,4724,4684,-4731,4684,4724,4726,-4686,4685,4726,4727,-4732,4731,4727,4728,-4687,4728,4729,4687,-4687,4729,4725,4730,-4688,4602,4557,-4557,4555,4554,-4604,4603,4554,-4560,4558,4557,-4603,4730,4684,-4684,4685,4731,-4683,4731,4686,-4683,4687,4730,-4684,4732,4733,4734,-4736,4733,4736,4737,-4735,4736,4738,4739,-4738,4738,4740,4741,-4740,4740,4742,4743,-4742,4742,4744,4745,-4744,4744,4746,4747,-4746,4746,4748,4749,-4748,4748,4750,4751,-4750,4750,4752,4753,-4752,4752,4754,4755,-4754,4754,4732,4735,-4756,4735,4734,4756,-4758,4734,4737,4758,-4757,4737,4739,4759,-4759,4739,4741,4760,-4760,4741,4743,4761,-4761,4743,4745,4762,-4762,4745,4747,4763,-4763,4747,4749,4764,-4764,4749,4751,4765,-4765,4751,4753,4766,-4766,4753,4755,4767,-4767,4755,4735,4757,-4768,4757,4756,4768,-4770,4756,4758,4770,-4769,4758,4759,4771,-4771,4759,4760,4772,-4772,4760,4761,4773,-4773,4761,4762,4774,-4774,4762,4763,4775,-4775,4763,4764,4776,-4776,4764,4765,4777,-4777,4765,4766,4778,-4778,4766,4767,4779,-4779,4767,4757,4769,-4780,4780,4733,-4733,4780,4736,-4734,4780,4738,-4737,4780,4740,-4739,4780,4742,-4741,4780,4744,-4743,4780,4746,-4745,4780,4748,-4747,4780,4750,-4749,4780,4752,-4751,4780,4754,-4753,4780,4732,-4755,4769,4768,-4782,4768,4770,-4782,4770,4771,-4782,4771,4772,-4782,4772,4773,-4782,4773,4774,-4782,4774,4775,-4782,4775, 4776,-4782,4776,4777,-4782,4777,4778,-4782,4778,4779,-4782,4779,4769,-4782,4782,4783,4784,-4786,4783,4786,4787,-4785,4786,4788,4789,-4788,4788,4790,4791,-4790,4790,4792,4793,-4792,4792,4794,4795,-4794,4794,4796,4797,-4796,4796,4798,4799,-4798,4798,4800,4801,-4800,4800,4802,4803,-4802,4802,4804,4805,-4804,4804,4782,4785,-4806,4785,4784,4806,-4808,4784,4787,4808,-4807,4787,4789,4809,-4809,4789,4791,4810,-4810,4791,4793,4811,-4811,4793,4795,4812,-4812,4795,4797,4813,-4813,4797,4799,4814,-4814,4799,4801,4815,-4815,4801,4803,4816,-4816,4803,4805,4817,-4817,4805,4785,4807,-4818,4807,4806,4818,-4820,4806,4808,4820,-4819,4808,4809,4821,-4821,4809,4810,4822,-4822,4810,4811,4823,-4823,4811,4812,4824,-4824,4812,4813,4825,-4825,4813,4814,4826,-4826,4814,4815,4827,-4827,4815,4816,4828,-4828,4816,4817,4829,-4829,4817,4807,4819,-4830,4830,4783,-4783,4830,4786,-4784,4830,4788,-4787,4830,4790,-4789,4830,4792,-4791,4830,4794,-4793,4830,4796,-4795,4830,4798,-4797,4830,4800,-4799,4830,4802,-4801,4830,4804,-4803,4830,4782,-4805,4819,4818,-4832,4818,4820,-4832,4820,4821,-4832,4821,4822,-4832,4822,4823,-4832,4823,4824,-4832,4824,4825,-4832,4825,4826,-4832,4826,4827,-4832,4827,4828,-4832,4828,4829,-4832,4829,4819,-4832,4832,4833,4834,-4836,4832,4836,4837,-4834,4838,4839,4836,-4841,4838,4841,4842,-4840,4838,4840,4843,-4842,4844,4845,4846,-4848,4844,4832,4848,-4846,4844,4840,4836,-4833,4844,4847,4843,-4841,4839,4842,4849,-4851,4839,4850,4837,-4837,4851,4852,4853,-4855,4851,4855,4856,-4853,4851,4841,4843,-4856,4851,4854,4842,-4842,4857,4858,4856,-4856,4857,4859,4860,-4859,4857,4847,4846,-4860,4857,4855,4843,-4848,4854,4853,4861,-4863,4854,4862,4849,-4843,4852,4863,4864,-4854,4852,4856,4865,-4864,4858,4866,4865,-4857,4858,4860,4867,-4867,4853,4864,4868,-4862,4869,4870,4871,-4873,4873,4874,4870,-4870,4873,4875,4876,-4875,4877,4878,4876,-4876,4877,4879,4880,-4879,4879,4881,4882,-4881,4848,4835,4883,-4885,4835,4834,4885,-4884,4845,4886,4887,-4847,4845,4848,4884,-4887,4859,4888,4889,-4861,4859,4846,4887,-4889,4860,4889,4890,-4868,4891,4892,4893, -4895,4895,4896,4897,-4899,4895,4899,4882,-4897,4895,4898,4890,-4900,4900,4901,4864,-4864,4900,4902,4903,-4905,4900,4863,4865,-4903,4905,4902,4865,-4867,4905,4894,4903,-4903,4905,4866,4867,-4907,4901,4907,4868,-4865,4901,4904,4908,-4908,4909,4896,4882,-4882,4909,4910,4897,-4897,4911,4912,4871,-4871,4911,4884,4883,-4913,4912,4913,4914,-4872,4912,4883,4885,-4914,4915,4916,4887,-4887,4915,4874,4876,-4917,4915,4911,4870,-4875,4915,4886,4884,-4912,4917,4918,4889,-4889,4917,4878,4880,-4919,4917,4916,4876,-4879,4917,4888,4887,-4917,4918,4899,4890,-4890,4918,4880,4882,-4900,4919,4898,4897,-4892,4919,4867,4890,-4899,4920,4921,4922,-4924,4920,4924,4925,-4922,4920,4926,4927,-4925,4924,4928,4929,-4926,4924,4927,4930,-4929,4921,4931,4932,-4923,4921,4925,4933,-4932,4925,4929,4934,-4934,4934,4929,4935,-4937,4928,4937,4935,-4930,4833,4837,4923,-4923,4862,4926,4923,-4850,4862,4861,4927,-4927,4861,4868,4930,-4928,4938,4939,4940,-4942,4942,4943,4944,-4946,4944,4941,4940,-4946,4946,4947,4939,-4939,4946,4948,4949,-4948,4950,4951,4949,-4949,4950,4952,4953,-4952,4952,4954,4955,-4954,4834,4922,4932,-4886,4892,4936,4935,-4894,4893,4935,4937,-4909,4907,4908,4937,-4931,4913,4932,4956,-4915,4957,4958,4943,-4943,4869,4872,4940,-4940,4959,4945,4940,-4873,4959,4960,4942,-4946,4873,4947,4949,-4876,4873,4869,4939,-4948,4877,4951,4953,-4880,4877,4875,4949,-4952,4879,4953,4955,-4882,4961,4962,4910,-4910,4961,4909,4881,-4956,4963,4957,4942,-4961,4959,4872,4871,-4915,4963,4960,4959,-4915,4963,4914,4956,-4958,4897,4910,-4892,4910,4892,-4892,4893,4904,-4904,4893,4903,-4895,4908,4904,-4894,4867,4919,-4907,4894,4906,-4892,4891,4906,-4920,4904,4901,-4901,4906,4894,-4906,4923,4926,-4921,4930,4937,-4929,4922,4834,-4834,4923,4837,-4851,4923,4850,-4850,4957,4956,-4959,4930,4868,-4908,4885,4932,-4914,4835,4848,-4833,4943,4958,4956,4932,4931,4948,4946,4938,4941,-4945,4954,4934,4936,-4893,4950,4948,4931,4933,4934,4954,-4953,4964,4965,4966,-4968,4968,4969,4966,-4966,4970,4971,4972,-4974,4974,4975,4976,-4978,4975,4978,4979,-4977,4978,4980,4981,-4980,4975,4982,4983, -4979,4984,4982,4975,-4975,4973,4985,4986,-4971,4965,4987,4988,-4969,4989,4987,4965,-4965,4967,4990,4991,-4965,4980,4992,4993,-4982,4983,4994,4992,-4981,4988,4987,4982,-4985,4992,4995,4996,-4994,4997,4995,4992,-4995,4998,4997,4994,-4983,4987,4999,4998,-4983,5000,4999,4989,-4992,4990,5001,5000,-4992,5002,5003,5004,-5006,5006,5007,5003,-5003,5008,5009,5004,-5004,5010,5008,5007,-4999,4999,5011,5010,-4999,5001,5012,5011,-5001,5013,5009,5008,-5011,5012,5013,5010,-5012,4968,4973,4972,-4970,4970,4974,4977,-4972,4974,4970,4986,-4985,4968,4988,4985,-4974,4995,5002,5005,-4997,4997,5006,5002,-4996,5007,5006,4997,-4999,4986,4985,4988,-4985,4978,4983,-4981,4964,4991,-4990,4983,4982,-4995,4987,4989,-5000,5003,5007,-5009,4999,5000,-5012,5017,5016,5014,-5016,5020,5019,5018,-5022,5024,5022,5023,-5026,5018,5027,5026,-5022,5027,5028,5029,-5027,5030,5017,5015,-5032,5032,5035,5033,-5035,5022,5035,5032,-5024,5033,5036,5037,-5035,5030,5031,5037,-5037,5014,5016,5019,-5021,5024,5025,5039,-5039,5026,5040,5041,-5022,5042,5043,5015,-5015,5044,5045,5023,-5033,5046,5047,5038,-5029,5048,5049,5016,-5018,5050,5051,5030,-5037,5052,5053,5034,-5038,5054,5055,5018,-5020,5030,5051,5056,5048,-5018,5057,5058,5022,-5025,5027,5018,5055,-5060,5020,5061,5060,5042,-5015,5062,5040,5026,-5030,5059,5046,5028,-5028,5033,5063,5050,-5037,5016,5049,5064,5054,-5020,5035,5065,5063,-5034,5058,5065,5035,-5023,5039,5025,5066,-5068,5024,5068,-5058,5023,5045,5069,-5026,5032,5034,5053,5070,-5045,5071,5052,5037,-5032,5072,5071,-5032,5073,5061,-5021,5029,5039,5067,-5063,5038,5039,5029,-5029,5038,5047,5068,-5025,5025,5069,-5067,5041,5073,5020,-5022,5074,5072,5031,-5016,5043,5074,-5016,5075,5076,5096,-5096,5076,5144,5145,-5097,5077,5078,5098,5097,5147,-5147,5078,5079,5099,-5099,5079,5080,5100,-5100,5080,5081,5101,-5101,5081,5082,5102,-5102,5082,5083,5103,-5103,5139,5136,5137,-5139,5087,5088,5108,-5108,5088,5089,5109,-5109,5089,5090,5110,-5110,5090,5091,5111,-5111,5091,5092,5112,-5112,5112,5092,5093,-5114,5150,5151,5152,-5154,5094,5075,5095,-5115,5095,5096,-5149,5147,5148,5096, -5146,5097,5098,5131,-5133,5098,5099,5130,-5132,5099,5100,5129,-5131,5100,5101,5128,-5130,5101,5102,5127,-5129,5102,5103,5126,-5128,5103,5104,5125,-5127,5104,5105,5124,-5126,5105,5106,5123,-5125,5122,5123,5106,5107,-5109,5108,5109,5121,-5123,5109,5110,5120,-5122,5110,5111,5119,-5121,5111,5112,5118,-5120,5112,5113,5117,-5119,5154,5155,5156,-5158,5114,5095,5115,-5117,5075,5094,5070,-5054,5159,5158,5160,-5162,5093,5092,5045,-5045,5092,5091,5069,-5046,5091,5090,5066,-5070,5090,5089,5067,-5067,5089,5088,5062,-5068,5088,5087,-5063,5087,5086,5040,-5063,5086,5085,5041,-5041,5085,5084,5073,-5042,5084,5083,5061,-5074,5083,5082,5042,-5062,5082,5081,5043,-5043,5081,5080,5074,-5044,5080,5079,5072,-5075,5079,5078,5071,-5073,5078,5077,5052,-5072,5077,5149,5053,-5053,5149,5075,-5054,5106,5105,5134,-5136,5105,5104,5136,-5135,5104,5103,5137,-5137,5103,5083,5138,-5138,5083,5084,5139,-5139,5084,5085,5140,-5140,5085,5086,5141,-5141,5086,5087,5142,-5142,5087,5107,5143,-5143,5107,5106,5135,-5144,5135,5141,5142,-5144,5140,5134,5136,-5140,5135,5134,5140,-5142,5149,5146,5144,-5077,5146,5147,5145,-5145,5148,5097,5132,-5134,5095,5148,5133,-5116,5076,5075,-5150,5077,5146,-5150,5097,5148,-5148,5158,5150,-5094,5094,5114,5152,-5152,5113,5093,5150,-5154,5153,5154,-5114,5114,5116,5156,-5156,5116,5117,5157,-5157,5117,5113,5154,-5158,5093,5044,5160,-5159,5044,5070,5161,-5161,5070,5094,5159,-5162,5094,5151,-5160,5159,5151,5150,-5159,5152,5155,5154,-5154,5114,5155,-5153,5162,5163,5178,-5178,5248,5249,5250,-5252,5164,5165,5180,-5180,5165,5166,5181,-5181,5166,5167,5182,-5182,5207,5168,5183,-5207,5168,5169,5184,-5184,5169,5212,5215,-5185,5170,5171,5186,-5186,5187,5172,5173,-5189,5230,5231,5232,-5234,5174,5175,5298,-5300,5243,5244,5245,-5247,5245,5177,-5248,5177,5178,5050,-5064,5252,5253,5254,-5256,5179,5180,5056,-5052,5180,5181,5048,-5057,5181,5182,5049,-5049,5054,5064,5206,-5184,5183,5184,5055,-5055,5055,5184,5215,5214,-5186,5185,5186,5059,-5056,5186,5187,-5060,5234,5235,5236,-5238,5189,5190,5057,-5069,5226,5228,5224,-5192,5176,5242,5192,-5163,5176,5227, 5193,-5243,5175,5174,5195,5300,-5195,5239,5238,5240,-5242,5208,5172,-5198,5171,5170,5198,-5198,5170,5210,5211,-5199,5169,5168,5200,-5200,5200,5168,5207,-5210,5167,5166,5202,-5202,5166,5165,5203,-5203,5165,5164,5204,-5204,5257,5256,5258,-5260,5163,5162,5192,-5206,5058,5057,-5227,5167,5207,5206,-5183,5209,5207,5167,-5202,5187,5186,5171,-5173,5197,5172,-5172,5059,5187,-5047,5206,5064,5049,-5183,5047,5046,5187,-5189,5172,5208,5196,-5174,5210,5212,5213,-5212,5212,5169,5199,-5214,5214,5210,5170,-5186,5221,5220,5222,-5224,5215,5212,5216,-5218,5212,5210,5218,-5217,5210,5214,5219,-5219,5214,5215,5217,-5220,5217,5216,5220,-5222,5216,5218,5222,-5221,5218,5219,5223,-5223,5219,5217,5221,-5224,5260,5265,5266,5261,5224,-5229,5190,5228,5226,-5058,5175,5229,5262,-5299,5227,5229,5175,-5195,5238,5230,-5174,5174,5299,5297,5189,5232,-5232,5188,5173,5230,-5234,5233,5234,-5189,5189,5068,5236,-5236,5068,5047,5237,-5237,5047,5188,5234,-5238,5173,5196,5240,-5239,5196,5195,5241,-5241,5195,5174,5239,-5242,5174,5231,-5240,5232,5235,5234,-5234,5189,5235,-5233,5239,5231,5230,-5239,5227,5194,-5194,5225,5176,5244,-5244,5191,5224,5246,-5246,5224,5261,-5247,5191,5245,-5248,5065,5058,5226,5191,-5248,5227,5176,5225,-5230,5164,5249,-5258,5164,5179,5250,-5250,5178,5163,5248,-5252,5251,5252,-5179,5179,5051,5254,-5254,5051,5050,5255,-5255,5050,5178,5252,-5256,5163,5205,5258,-5257,5205,5204,5259,-5259,5204,5164,5257,-5260,5257,5249,5248,-5257,5256,5248,-5164,5179,5253,-5251,5250,5253,5252,-5252,5264,5265,-5261,5229,5225,5263,5269,5270,-5263,5266,5267,-5262,5269,5263,-5269,5262,5270,-5272,5288,5289,5290,5291,5292,5293,5294,-5296,5270,5269,5273,-5273,5269,5268,5274,-5274,5268,5267,5275,-5275,5267,5266,5276,-5276,5266,5265,5277,-5277,5265,5264,5278,-5278,5279,5278,5264,-5272,5271,5270,5272,-5280,5272,5273,5281,-5281,5273,5274,5282,-5282,5274,5275,5283,-5283,5275,5276,5284,-5284,5276,5277,5285,-5285,5277,5278,5286,-5286,5278,5279,5287,-5287,5279,5272,5280,-5288,5280,5281,5289,-5289,5281,5282,5290,-5290,5282,5283,5291,-5291,5283,5284,5292,-5292,5284,5285,5293, -5293,5285,5286,5294,-5294,5286,5287,5295,-5295,5287,5280,5288,-5296,5246,5261,5267,5268,5263,-5244,5243,5263,-5226,5296,5260,5228,-5191,5297,5296,5190,-5190,5298,5262,5271,5264,5260,-5297,5299,5298,5296,-5298,5063,5065,5247,-5178,5244,5176,-5163,5244,5162,5177,-5246,5320,5323,5322,-5322,5324,5327,5326,-5326,5301,5329,5328,-5303,5330,5333,5332,-5332,5335,5338,5337,-5337,5326,5327,5340,-5340,5327,5342,5341,-5341,5343,5346,5345,-5345,5347,5337,5338,-5349,5349,5352,5351,-5351,5339,5354,5353,-5327,5355,5354,5339,-5357,5346,5343,5332,-5358,5358,5362,5361,-5728,5359,5360,5364,-5364,5365,5368,5367,-5367,5360,5729,5728,-5365,5371,5374,5373,-5373,5360,5358,5727,-5730,5366,5370,5376,-5376,5349,5350,5378,-5378,5303,5380,5379,-5305,5381,5379,5321,-5323,5372,5383,5382,-5372,5730,5305,5306,-5385,5385,5386,5307,-5309,5731,5361,5388,-5388,5380,5303,5309,-5390,5310,5311,5391,-5391,5741,5345,5346,-5741,5392,5340,5341,-5748,5356,5339,5340,-5393,5388,5395,5394,-5375,5374,5394,5396,-5374,5728,5732,5397,-5365,5363,5364,5397,-5399,5398,5397,5400,-5400,5384,5376,5370,-5731,5389,5309,5312,-5402,5401,5312,5307,-5387,5321,5379,5380,-5403,5381,5403,5304,-5380,5363,5405,5404,-5360,5399,5406,5405,-5399,5409,5362,5411,-5411,5412,5413,5410,-5412,5415,5418,5406,-5418,5406,5418,5404,-5406,5408,5404,5418,-5417,5359,5404,5408,-5408,5419,5396,5394,-5421,5744,5424,5423,-5744,5311,5313,5425,-5392,5426,5429,5428,-5428,5391,5425,5431,-5431,5313,5314,5383,-5426,5425,5383,5372,-5432,5427,5430,5431,-5427,5419,5434,5433,-5433,5747,5341,5435,-5747,5390,5391,5430,-5437,5437,5433,5434,-5439,5431,5372,5373,-5427,5440,5342,5442,-5442,5440,5435,5341,-5343,5407,5411,5362,-5359,5412,5408,5416,-5444,5411,5407,5408,-5413,5444,5443,5416,-5415,5740,5346,5357,-5740,5388,5374,5371,-5388,5315,5302,5328,-5446,5353,5446,5325,-5327,5447,5450,5449,-5449,5342,5327,5324,-5443,5451,5402,5380,-5390,5361,5409,5395,-5389,5452,5414,5415,-5451,5417,5406,5399,-5369,5366,5375,5448,-5366,5449,5450,5415,-5418,5368,5399,5400,-5368,5439,5428,5429,-5433,5429,5426,5373,-5397,5432,5429,5396,-5420, 5454,5447,5456,-5456,5322,5376,5384,-5382,5457,5375,5376,-5323,5458,5459,5348,-5339,5338,5335,5460,-5459,5337,5334,-5337,5449,5417,5368,-5366,5461,5750,5751,-5317,5451,5463,5462,-5403,5464,5467,5466,-5466,5461,5468,5749,-5751,5350,5351,5401,-5387,5386,5385,5378,-5351,5320,5462,5466,-5468,5462,5463,5459,-5467,5347,5348,5352,-5350,5348,5459,5463,-5353,5451,5351,5352,-5464,5442,5469,5390,-5437,5328,5329,5324,-5326,5446,5445,5328,-5326,5301,5317,5469,-5330,5329,5469,5442,-5325,5423,5460,5335,-5471,5428,5439,5435,-5441,5440,5441,5427,-5429,5436,5430,5427,-5442,5745,5746,5435,-5440,5471,5460,5424,-5473,5470,5335,5336,-5345,5344,5336,5334,-5344,5423,5470,5742,-5744,5473,5472,5424,-5745,5470,5344,5345,-5743,5474,5475,5409,-5411,5475,5420,5395,-5410,6502,6503,5739,-5358,5400,5397,5732,-5454,5367,5400,5453,-5370,5366,5367,5369,-5371,5318,5733,5382,-5320,5382,5733,5387,-5372,5414,5452,5477,-5445,5478,5480,5479,-5468,5479,5455,5456,-5324,6513,5315,5445,-5482,5481,5445,5446,-5483,5454,5455,5484,-5484,5455,5479,5480,-5485,5458,5460,5471,-5486,5486,5489,5488,-5488,5490,5492,5491,-5488,5493,5496,5495,-5495,5497,5500,5499,-5499,5420,5475,5502,-5502,5503,5506,5505,-5505,5502,5509,5508,-5508,5510,5504,5505,-5512,5498,5496,5512,-5498,5492,5490,5499,-5501,5465,5485,5487,-5489,5464,5465,5488,-5514,5514,5464,5513,-5516,5472,5499,5490,-5472,5516,5494,5517,-5502,5508,5509,5506,-5504,5475,5474,5509,-5503,5518,5510,5511,-5520,5520,5518,5519,-5522,5478,5514,5515,-5523,5480,5478,5522,-5524,5524,5520,5521,-5526,5526,5524,5525,-5524,5507,5516,5501,-5503,5443,5505,5506,-5414,5443,5444,5511,-5506,5509,5474,5413,-5507,5444,5477,5519,-5512,5477,5483,5521,-5520,5527,5526,5523,-5523,5483,5484,5525,-5522,5484,5480,5523,-5526,5419,5420,5501,-5518,5419,5517,5495,-5435,5434,5495,5496,-5439,5473,5438,5496,-5499,5485,5471,5490,-5488,5513,5488,5489,-5529,5528,5529,5515,-5514,5529,5527,5522,-5516,5333,6502,5357,-5333,5323,5456,5457,-5323,5456,5447,5448,-5458,5317,5310,5390,-5470,5314,5319,5382,-5384,5532,5533,5486,-5492,5533,5534,5489,-5487,5512,5493,5536,-5536, 5500,5497,5538,-5538,5539,5507,5508,-5541,5541,5542,5540,-5509,5504,5510,5544,-5544,5542,5546,5545,-5541,5547,5535,5536,-5495,5548,5551,5550,-5550,5552,5554,5545,-5554,5555,5534,5533,-5557,5554,5552,5557,-5536,5556,5559,5558,-5556,5556,5532,5560,-5560,5549,5535,5557,-5549,5549,5537,5538,-5536,5500,5537,5561,-5493,5550,5561,5537,-5550,5551,5560,5532,-5551,5543,5544,5563,-5563,5543,5562,5541,-5504,5542,5541,5562,-5565,5565,5568,5567,-5567,5510,5518,5569,-5545,5566,5571,5570,-5566,5571,5566,5573,-5573,5574,5576,5534,-5576,5562,5563,5577,-5565,5578,5581,5580,-5580,5582,5585,5584,-5584,5586,5589,5588,-5588,5735,5684,5592,-5737,5593,5586,5587,-5595,5595,5598,5597,-5597,5599,5595,5596,-5601,5601,5604,5603,-5603,5603,5579,5606,-5606,5607,5606,5579,-5581,5598,5609,5608,-5598,5610,5613,5612,-5612,5614,5617,5616,-5616,5618,5619,5598,-5596,5618,5622,5621,-5621,5623,5624,5613,-5611,5122,5121,5625,-5625,5123,5122,5624,-5624,5626,5627,5126,-5126,5628,5629,5128,-5128,5132,5131,-5631,5630,5131,5632,-5632,5633,5636,5635,-5635,5637,5639,5631,-5639,5630,5631,5639,-5641,5132,5630,5640,-5134,5637,5638,5606,-5608,5641,5643,5594,-5643,5737,5736,5592,-5645,5590,5591,5587,-5589,5591,5642,5594,-5588,5634,5635,5581,-5579,5634,5646,5645,-5634,5647,5649,5605,-5649,5646,5604,5601,-5651,5651,5654,5653,-5653,5655,5656,5653,-5655,5617,5614,5657,-5590,5658,5659,5615,-5617,5660,5116,5661,-5659,5133,5640,5661,-5116,5662,5665,5664,-5664,5666,5669,5668,-5668,5667,5671,5670,-5667,5578,5579,5603,-5605,5647,5674,5673,-5673,5675,5668,5650,-5602,5671,5677,5676,-5671,5670,5679,5678,-5667,5680,5632,5131,-5131,5648,5638,5631,-5633,5646,5634,5578,-5605,5737,5644,5681,-5739,5559,5683,5682,-5559,5592,5684,5557,-5553,5685,5683,5559,-5561,5557,5684,5686,-5549,5553,5644,5592,-5553,5686,5687,5551,-5549,5558,5682,5665,-5663,5688,5689,5568,-5566,5565,5570,5690,-5689,5652,5693,5692,-5692,5564,5577,5695,-5695,5691,5696,5651,-5653,5694,5695,5691,-5693,5570,5574,5575,-5691,5575,5662,5663,-5691,5555,5558,5662,-5576,5564,5694,5546,-5543,5644,5553,5546,-5682,5663,5664,5698,-5698, 5518,5520,5573,-5570,5520,5524,5572,-5574,5699,5697,5698,-5701,5700,5698,5678,-5702,5701,5678,5679,-5656,5600,5702,5656,-5600,5667,5668,5675,-5672,5703,5675,5601,-5603,5645,5650,5668,-5670,5702,5600,5643,-5642,5702,5641,5704,-5654,5705,5706,5656,-5656,5670,5676,5707,-5680,5708,5711,5710,-5710,5596,5597,5593,-5644,5597,5608,5586,-5594,5618,5713,5712,-5620,5714,5609,5619,-5713,5689,5695,5577,-5569,5568,5577,5563,-5568,5705,5621,5622,-5707,5583,5686,5684,-5736,5582,5590,5588,-5716,5715,5588,5589,-5658,5130,5129,5717,-5681,5687,5685,5560,-5552,5585,5635,5636,-5585,5585,5715,5581,-5636,5674,5680,5717,-5719,5629,5628,5720,-5720,5721,5722,5718,-5718,5116,5115,-5662,5705,5707,5723,-5622,5118,5714,5712,-5120,5708,5709,5610,-5612,5716,5623,5610,-5710,5620,5723,5612,-5614,5713,5620,5613,-5626,5119,5713,5625,-5121,5627,5628,5127,-5127,5722,5721,5629,-5720,5677,5671,5675,-5704,5724,5711,5676,-5678,5724,5677,5703,-5726,5649,5725,5703,-5603,5649,5602,5603,-5606,5696,5691,5695,-5690,5569,5573,5566,-5568,5544,5569,5567,-5564,5706,5622,5595,-5600,5640,5639,5659,-5662,5574,5571,5572,-5727,5524,5526,5726,-5573,5714,5118,5117,-5661,5714,5660,5616,-5610,5704,5738,5681,-5694,5652,5653,5704,-5694,5698,5664,5666,-5679,5669,5666,5664,-5666,5682,5645,5669,-5666,5633,5645,5682,-5684,5636,5633,5683,-5686,5584,5636,5685,-5688,5583,5584,5687,-5687,5688,5690,5663,-5698,5721,5717,5129,5128,-5630,5639,5637,5615,-5660,5637,5607,5614,-5616,5580,5657,5614,-5608,5581,5715,5657,-5581,5700,5651,5696,-5700,5701,5654,5651,-5701,5507,5539,5547,-5517,5576,5726,5526,-5528,5534,5576,5527,-5530,5330,6504,5530,-5334,5333,5530,-5532,5333,5531,-6503,5394,5395,-5421,5361,5731,-5728,5361,5362,-5410,5337,5347,5377,-5335,5359,5407,5358,-5361,5306,5403,5381,-5385,5405,5363,-5399,5436,5441,-5443,5343,5331,-5333,5416,5418,5415,-5415,5448,5375,-5458,5459,5458,-5486,5466,5459,-5466,5460,5423,-5425,5452,5450,5447,-5455,5448,5449,-5366,5385,5308,-5752,5459,5485,-5466,5464,5514,-5468,5320,5321,5402,-5463,5401,5351,5451,-5390,5433,5745,5439,-5433,5421,5437,5473,-5745,5345,5741, 5393,-5743,5343,5334,-5332,5387,5733,-5732,5467,5479,5323,-5321,5514,5478,-5468,5476,5354,-5356,5353,5482,-5447,5443,5413,-5413,5413,5474,-5411,5454,5483,5477,-5453,5438,5473,-5438,5491,5486,-5488,5493,5512,-5497,5494,5495,-5518,5498,5499,-5473,5472,5473,-5499,5561,5532,-5492,5550,5532,-5562,5561,5491,-5493,5493,5494,-5537,5538,5512,-5536,5543,5503,-5505,5540,5545,-5540,5497,5512,-5539,5533,5532,-5557,5553,5545,-5547,5547,5539,5545,-5555,5494,5516,-5548,5508,5503,-5542,5681,5692,-5694,5646,5650,-5646,5617,5609,-5617,5619,5609,-5599,5648,5632,-5681,5120,5625,-5122,5643,5593,-5595,5585,5582,-5716,5707,5611,-5613,5660,5658,-5617,5711,5672,-5674,5673,5718,-5712,5707,5708,-5612,5720,5711,-5720,5605,5606,-5639,5716,5709,-5711,5546,5694,-5693,5555,5575,-5535,5692,5681,-5547,5576,5574,-5727,5707,5655,-5680,5702,5653,-5657,5643,5600,-5597,5722,5711,-5719,5125,5124,5716,-5627,5608,5589,-5587,5624,5625,-5614,5707,5705,-5656,5608,5609,-5618,5626,5716,-5711,5627,5626,-5711,5716,5124,5123,-5624,5674,5648,-5681,5673,5674,-5719,5627,5710,5720,-5629,5620,5621,-5724,5713,5618,-5621,5712,5713,-5120,5707,5711,-5709,5707,5612,-5724,5647,5725,-5650,5711,5724,-5673,5647,5648,-5675,5710,5711,-5721,5711,5722,-5720,5647,5672,-5726,5672,5724,-5726,5676,5711,-5708,5688,5699,-5690,5661,5659,-5659,5656,5706,-5600,5618,5595,-5623,5571,5574,-5571,5589,5608,-5618,5605,5638,-5649,5697,5699,-5689,5689,5699,-5697,5701,5655,-5655,5535,5547,-5555,5528,5489,-5535,5529,5528,-5535,5731,5734,5729,-5728,5583,5735,5590,-5583,5736,5591,5590,-5736,5642,5591,5736,-5738,5642,5737,5738,-5642,5704,5641,-5739,5355,5739,6503,-5477,5356,5740,5739,-5356,5392,5741,5740,-5357,5393,5741,5392,-5748,5743,5742,5393,-5423,5421,5744,5743,-5423,5437,5421,5745,-5434,5421,5422,5746,-5746,5393,5747,5746,-5423,5334,5748,-5332,5748,5334,5377,-5750,5750,5749,5377,-5379,5750,5378,5385,-5752,5753,5754,5755,-5757,5757,5758,5759,-5761,5301,5302,5761,-5763,6508,6500,5765,6510,-6512,6499,6500,6508,-5768,5768,5769,5770,-5772,5759,5772,5773,-5761,5760,5773,5774,-5776,5776,5777,5778,-5780,5780, 5781,5771,-5771,5782,5783,5784,-5786,5772,5759,6507,-6507,5786,5787,5772,-6507,5779,5788,5764,-5777,5790,5791,5789,-5838,5789,6484,5792,-5794,5790,5794,5795,-5792,5796,5797,5798,-5800,5791,5795,6485,-6487,5802,5803,5804,-5806,5791,6486,6484,-5790,5797,5806,5807,-5802,5782,5808,5809,-5784,5303,5304,5810,-5812,5812,5755,5754,-5811,5803,5802,5813,-5815,5305,6487,5815,-5307,5816,5308,5307,-5818,6488,5818,5819,-5793,5811,5820,5309,-5304,5310,5821,5822,-5312,5823,5787,5779,-5779,5823,5824,5774,-5774,5787,5823,5773,-5773,5819,5805,5825,-5827,5805,5804,5827,-5826,6485,5795,5828,-6490,5794,5829,5828,-5796,5829,5830,5831,-5829,5815,6487,5801,-5808,5820,5832,5312,-5310,5832,5817,5307,-5313,5754,5833,5811,-5811,5812,5810,5304,-5404,5794,5790,5834,-5836,5830,5829,5835,-5837,5790,5837,5838,-5835,5839,5840,5841,-5794,5842,5841,5840,-5844,5846,5844,5845,-5849,5845,5847,5836,-5849,5836,5835,5834,-5849,5838,5846,5848,-5835,5849,5850,5825,-5828,5851,5852,5853,-5855,5311,5822,5855,-5314,5856,5857,5858,-5860,5822,5860,5861,-5856,5313,5855,5814,-5315,5855,5861,5803,-5815,5857,5856,5861,-5861,5849,5862,5863,-5865,5824,5852,5865,-5775,5821,5866,5860,-5823,5867,5868,5864,-5864,5861,5856,5804,-5804,5863,5862,5869,-5868,5870,5871,5872,-5776,5870,5775,5774,-5866,5837,5789,5793,-5842,5842,5873,5846,-5839,5841,5842,5838,-5838,5874,5844,5846,-5874,5787,5786,5788,-5780,5819,5818,5802,-5806,5315,5875,5761,-5303,6507,5759,5758,-5877,5877,5878,5879,-5881,5816,5751,-5309,5775,5872,5757,-5761,5881,5820,5811,-5834,5792,5819,5826,-5840,5882,5880,5845,-5845,5847,5799,5830,-5837,5797,5796,5878,-5807,5879,5847,5845,-5881,5799,5798,5831,-5831,5869,5862,5859,-5859,5859,5827,5804,-5857,5862,5849,5827,-5860,5884,5885,5886,-5878,5755,5812,5815,-5808,5887,5755,5807,-5807,5888,5771,5781,-5890,5771,5888,5890,-5769,5770,5769,5766,-5892,5879,5796,5799,-5848,5815,5812,5403,-5307,5881,5833,5893,-5895,5895,5896,5897,-5899,6497,5892,-6497,5783,5817,5832,-5785,5817,5783,5809,-5817,5753,5898,5897,-5894,5893,5897,5889,-5895,5780,5782,5785,-5782,5780,5891,5808,-5783,5781,5785, 5894,-5890,5881,5894,5785,-5785,5872,5866,5821,-5900,5761,5758,5757,-5763,5876,5758,5761,-5876,5301,5762,5899,-5318,5762,5757,5872,-5900,5853,5900,5768,-5891,5858,5870,5865,-5870,5870,5858,5857,-5872,5866,5871,5857,-5861,5851,5869,5865,-5853,5901,5902,5854,-5891,5900,5777,5769,-5769,5777,5776,5766,-5770,5853,5852,5824,-5901,5903,5851,5854,-5903,5900,5824,5778,-5778,5904,5840,5839,-5906,5905,5839,5826,-5851,6509,5788,5786,-5753,5831,5883,6489,-5829,5798,5800,5883,-5832,5797,5801,5800,-5799,5318,5319,5813,-6491,5813,5802,5818,-6491,5844,5874,5906,-5883,5884,5882,5906,-5913,5907,5898,5908,-5910,5908,5756,5886,-5886,6498,6499,5767,-5911,6513,5911,5875,-5316,5911,6505,5876,-5876,5884,5912,5913,-5886,5885,5913,5909,-5909,5888,5914,5901,-5891,5915,5916,5917,-5919,5919,5916,5920,-5922,5922,5923,5924,-5926,5926,5927,5928,-5930,5850,5930,5931,-5906,5932,5933,5934,-5936,5931,5936,5937,-5939,5939,5940,5934,-5934,5927,5926,5941,-5926,5921,5929,5928,-5920,5896,5917,5916,-5915,5895,5942,5917,-5897,5943,5944,5942,-5896,5902,5901,5919,-5929,5945,5930,5946,-5924,5937,5932,5935,-5939,5905,5931,5938,-5905,5947,5948,5940,-5940,5949,5950,5948,-5948,5907,5951,5944,-5944,5909,5952,5951,-5908,5953,5954,5950,-5950,5955,5952,5954,-5954,5936,5931,5930,-5946,5873,5843,5935,-5935,5873,5934,5940,-5875,5938,5935,5843,-5905,5874,5940,5948,-5907,5906,5948,5950,-5913,5956,5951,5952,-5956,5912,5950,5954,-5914,5913,5954,5952,-5910,5849,5946,5930,-5851,5849,5864,5924,-5947,5864,5868,5925,-5925,5903,5927,5925,-5869,5914,5916,5919,-5902,5942,5957,5918,-5918,5957,5942,5944,-5959,5958,5944,5951,-5957,5765,5764,5788,-6510,5756,5755,5887,-5887,5886,5887,5878,-5878,5317,5899,5821,-5311,5314,5814,5813,-5320,5960,5920,5915,-5962,5961,5915,5918,-5963,5941,5963,5964,-5923,5929,5965,5966,-5927,5967,5968,5937,-5937,5969,5937,5968,-5971,5933,5971,5972,-5940,5970,5968,5973,-5975,5975,5923,5964,-5964,5976,5977,5978,-5980,5980,5981,5973,-5983,5983,5984,5961,-5963,5982,5963,5985,-5981,5984,5983,5986,-5988,5984,5987,5988,-5961,5977,5976,5985,-5964,5977,5963,5966,-5966,5929, 5921,5989,-5966,5978,5977,5965,-5990,5979,5978,5960,-5989,5971,5990,5991,-5973,5971,5932,5969,-5991,5970,5992,5990,-5970,5993,5994,5995,-5997,5939,5972,5997,-5948,5994,5993,5998,-6000,5999,6000,6001,-5995,6002,6003,5962,-6005,5990,5992,6005,-5992,6006,6007,6008,-6010,6010,6011,6012,-6014,6014,6015,6016,-6018,6492,6493,6020,-6193,6021,6022,6015,-6015,6023,6024,6025,-6027,6027,6028,6024,-6024,6029,6030,6031,-6033,6031,6033,6034,-6008,6035,6008,6007,-6035,6026,6025,6036,-6038,6038,6039,6040,-6042,6042,6043,6044,-6046,6046,6023,6026,-6048,6046,6048,6049,-6051,6051,6038,6041,-6053,6053,6052,6054,-6056,6056,6051,6052,-6054,6057,6058,6059,-6061,6056,6061,6062,-6064,6064,6065,6066,-6068,6068,6069,6070,-6072,6072,6073,6074,-6076,6076,6077,6062,-6062,6078,6064,6067,-6080,6080,6068,6071,-6082,6082,6083,6084,-6086,6086,6087,6088,-6090,6090,6091,6073,-6073,6092,6093,6073,-6092,6094,6095,6096,-6098,6098,6099,6078,-6080,6080,6081,6100,-6102,6085,6102,6103,-6105,6105,6106,6088,-6088,6107,6108,6109,-6093,6110,6070,6069,-6112,6082,6112,6113,-6084,6112,6114,6115,-6114,6094,6116,6117,-6119,6103,6119,6120,-6105,6106,6105,6121,-6123,6108,6107,6123,-6125,6125,6099,6098,-6127,6127,6095,6094,-6119,6128,6129,6130,-6132,6132,6133,6114,-6135,6112,6135,6134,-6115,6082,6086,6135,-6113,6087,6086,6082,-6086,6104,6120,6136,-6138,6132,6035,6034,-6134,6138,6139,6022,-6141,6494,6141,6020,-6494,6018,6016,6015,-6020,6019,6015,6022,-6140,6055,6093,6076,-6054,6129,6006,6009,-6131,6129,6128,6142,-6144,6144,6145,6033,-6147,6143,6147,6029,-6033,6148,6149,6150,-6152,6152,6151,6150,-6154,6045,6017,6154,-6043,6155,6044,6043,-6157,6157,6155,6158,-6076,6086,6089,6158,-6136,6159,6160,6161,-6163,6163,6164,6165,-6167,6164,6163,6167,-6169,6006,6032,6031,-6008,6144,6169,6170,-6172,6172,6029,6147,-6166,6168,6167,6173,-6175,6167,6163,6175,-6177,6177,6178,6179,-6181,6181,6182,6179,-6179,6103,6102,6183,-6185,6101,6100,6185,-6187,6187,6188,6113,-6116,6145,6115,6114,-6134,6143,6032,6006,-6130,6494,6495,6189,-6142,5987,5986,6190,-6192,6020,5980,5985,-6193,6193,5988,5987,-6192, 5985,5976,6194,-6193,5981,5980,6020,-6142,6194,5976,5979,-6196,5986,6159,6162,-6191,6196,5993,5996,-6198,5993,6196,6198,-5999,6149,6199,6200,-6202,5992,6202,6203,-6006,6199,6149,6148,-6205,6202,6200,6199,-6204,5998,6198,6003,-6003,6003,6198,6160,-6160,5983,6003,6159,-5987,5992,5970,5974,-6203,6141,6189,5974,-5982,6160,6205,6206,-6162,5947,5997,6001,-5950,5949,6001,6000,-5954,6207,6208,6206,-6206,6208,6209,6175,-6207,6209,6152,6176,-6176,6028,6027,6153,-6211,6164,6168,6172,-6166,6211,6030,6029,-6173,6142,6166,6165,-6148,6210,6138,6140,-6029,6210,6150,6212,-6139,6213,6152,6153,-6215,6167,6176,6215,-6174,6216,6217,6218,-6220,6024,6140,6021,-6026,6025,6021,6014,-6037,6046,6047,6220,-6222,6222,6220,6047,-6038,6197,5996,6005,-6204,5996,5995,5991,-6006,6213,6214,6050,-6050,6011,6492,6192,-6195,6010,6223,6016,-6019,6223,6154,6017,-6017,6077,6076,6092,-6110,6224,6107,6092,-6092,6058,6057,6225,-6066,6058,6065,6064,-6178,6064,6078,6178,-6178,6181,6178,6078,-6100,6059,6180,6226,-6228,6228,6226,6180,-6180,6179,6182,6229,-6229,6182,6230,6231,-6230,6067,6066,6063,-6063,6096,6079,6067,-6063,6096,6095,6098,-6080,6095,6127,6126,-6099,6188,6187,6232,-6234,6234,6068,6080,-6184,6184,6183,6080,-6102,6184,6101,6186,-6120,6120,6119,6235,-6237,6235,6237,6238,-6237,6239,6240,6241,-6243,6243,6238,6237,-6245,6245,6243,6246,-6248,6248,6246,6244,-6250,6238,6243,6245,-6251,6251,6246,6248,-6253,6253,6254,6251,-6256,6251,6252,6256,-6256,6257,6255,6258,-6260,6258,6255,6260,-6262,6258,6262,6263,-6265,6265,6266,6262,-6259,6264,6263,6267,-6269,6269,6268,6267,-6271,6271,6272,6268,-6274,6274,6254,6253,-6273,6275,6276,6274,-6273,6277,6278,6279,-6281,6278,6281,6282,-6280,6283,6279,6284,-6286,6286,6284,6279,-6288,6288,6289,6290,-6285,6288,6284,6291,-6293,6290,6289,6293,-6295,6293,6295,6296,-6295,6297,6298,6299,-6295,6280,6299,6300,-6278,6300,6299,6301,-6303,6303,6304,6305,-6307,6304,6307,6308,-6306,6309,6310,6311,-6306,6312,6311,6313,-6315,6313,6311,6315,-6317,6317,6318,6312,-6315,6317,6319,6320,-6319,6321,6322,6318,-6324,6324,6323,6318,-6326,6326,6327,6323, -6329,6327,6326,6329,-6331,6329,6331,6332,-6331,6333,6332,6334,-6336,6332,6331,6336,-6335,6337,6334,6338,-6340,6340,6341,6342,-6339,6340,6338,6343,-6345,6345,6346,6342,-6342,6347,6346,6345,-6349,6335,6349,6350,-6334,6350,6349,6351,-6353,6352,6353,6354,-6351,6354,6355,6356,-6358,6358,6359,6360,-6362,6359,6355,6362,-6361,6363,6364,6365,-6367,6367,6365,6364,-6359,6368,6366,6369,-6371,6369,6367,6371,-6371,6372,6373,6368,-6371,6370,6371,6374,-6373,6375,6376,6373,-6373,6374,6377,6375,-6373,6378,6379,6376,-6381,6378,6380,6377,-6382,6382,6383,6379,-6379,6378,6381,6384,-6383,6385,6386,6383,-6383,6385,6382,6384,-6388,6388,6389,6386,-6386,6387,6390,6388,-6386,6391,6389,6388,-6393,6390,6393,6392,-6389,6394,6395,6396,-6124,6397,6398,6399,-6401,6397,6118,6117,-6399,6379,6383,6366,-6369,6368,6373,6376,-6380,6386,6389,6363,-6367,6401,6236,6238,-6251,6247,6402,6403,-6246,6371,6367,6384,-6382,6381,6377,6374,-6372,6367,6358,6390,-6388,6393,6390,6358,-6362,6404,6397,6400,-6406,6397,6404,6127,-6119,6406,6231,6230,-6408,6406,6407,6408,-6410,6410,6411,6412,-6414,6414,6415,6276,-6417,6414,6416,6248,-6418,6353,6418,6419,-6421,6351,6421,6422,-6337,6423,6347,6343,-6425,6347,6348,6344,-6344,6425,6326,6426,-6428,6428,6411,6410,-6430,6328,6324,6309,-6309,6325,6310,6309,-6325,6325,6320,6315,-6311,6320,6319,6316,-6316,6430,6281,6412,-6412,6430,6411,6428,-6303,6287,6282,6301,-6299,6296,6291,6286,-6298,6292,6291,6296,-6296,6271,6260,6256,-6276,6261,6260,6271,-6274,6269,6265,6261,-6274,6419,6418,6331,-6432,6242,6237,6235,-6240,6244,6237,6242,-6250,6432,6433,6434,-6436,6435,6125,6126,-6433,6436,6437,6419,-6432,6181,6099,6125,-6439,6439,6438,6125,-6436,6435,6434,6437,-6440,6437,6434,6420,-6420,6195,5979,5988,-6194,6013,6012,6131,-6131,6013,6130,6009,-6224,6171,6440,6232,-6188,6111,6441,6442,-6111,6443,6232,6440,-6445,6445,6060,6059,-6228,6058,6177,6180,-6060,6107,6224,6446,-6124,6089,6088,6090,-6073,6075,6158,6089,-6073,6137,6136,6121,-6106,6085,6137,6105,-6088,6084,6234,6183,-6103,6213,6049,6447,-6216,6074,6448,6220,-6223,6216,6039,6038,-6218,6225,6217, 6038,-6052,6063,6225,6051,-6057,6048,6041,6040,-6448,6221,6054,6041,-6049,6448,6449,6054,-6222,6450,6451,6438,-6440,6439,6437,6436,-6451,6450,6452,6429,-6454,6452,6436,6425,-6428,6453,6410,6413,-6455,6408,6413,6415,-6415,6407,6454,6413,-6409,6454,6407,6230,-6452,6414,6417,6409,-6409,6452,6427,6455,-6430,6426,6307,6455,-6428,6403,6456,6250,-6246,6457,6401,6250,-6457,6136,6120,6236,-6402,6353,6458,6362,-6355,6360,6362,6458,-6460,6400,6392,6393,-6406,6445,6110,6442,-6219,6227,6070,6110,-6446,6226,6071,6070,-6228,6081,6071,6226,-6229,6228,6460,6100,-6082,6460,6461,6185,-6101,6239,6185,6461,-6241,6229,6231,6461,-6461,6240,6461,6231,-6407,6240,6406,6409,-6242,6409,6417,6249,-6242,6444,6441,6111,-6444,6174,6211,6172,-6169,6462,6174,6173,-6220,6462,6463,6211,-6175,6146,6030,6211,-6464,6146,6033,6031,-6031,6204,6197,6203,-6200,5997,5995,5994,-6002,5972,5991,5995,-5998,6090,6088,6106,-6465,6464,6106,6122,-6466,6121,6466,6465,-6123,6090,6464,6224,-6092,6224,6464,6465,-6447,6214,6027,6023,-6051,6135,6158,6156,-6135,6093,6055,6449,-6074,6002,6467,6000,-6000,5953,6000,6467,-5956,6222,6157,6075,-6075,6222,6037,6044,-6158,6083,6113,6188,-6235,6212,6201,6189,-6496,6149,6201,6212,-6151,6206,6175,6163,-6162,6166,6162,6161,-6164,6190,6162,6166,-6143,6128,6191,6190,-6143,6131,6193,6191,-6129,6012,6195,6193,-6132,6011,6194,6195,-6013,6196,6205,6160,-6199,6268,6272,6257,-6260,6283,6285,6294,-6300,6311,6322,6321,-6306,6323,6327,6303,-6307,6424,6338,6334,-6423,6337,6339,6346,-6350,6346,6423,6421,-6350,6421,6423,6424,-6423,6287,6298,6297,-6287,6265,6269,6270,-6267,6392,6400,6399,-6392,6124,6117,6116,-6109,6396,6398,6117,-6125,6399,6398,6396,-6396,6391,6395,6394,-6469,6459,6433,6405,-6394,6432,6126,6127,-6405,6096,6062,6077,-6098,6111,6069,6469,-6444,6068,6234,6469,-6070,6469,6233,6232,-6444,6109,6108,6116,-6098,6134,6156,6043,-6133,6132,6043,6042,-6036,6008,6035,6042,-6155,6009,6008,6154,-6224,6208,6207,6204,-6149,6209,6208,6148,-6152,5936,5945,5975,-5968,6004,5956,5955,-6468,5962,5958,5956,-6005,5765,5959,-6511,5765,6509,-5960,5825,5850,-5827, 5792,6484,-6489,5792,5839,-5794,5891,5780,-5771,5835,5829,-5795,5866,5872,-5872,5776,5764,-5764,5878,5887,-5807,5889,5914,-5889,5897,5896,-5890,5890,5854,-5854,5878,5796,-5880,5889,5896,-5915,5753,5893,5833,-5755,5898,5753,5756,-5909,5895,5898,-5944,5832,5820,5881,-5785,5869,5851,-5868,5867,5851,-5904,5778,5824,-5824,5776,5763,-5767,5818,6488,-6491,5943,5898,-5908,5752,5786,6506,-6513,6507,5876,-6506,5873,5842,-5844,5843,5840,-5905,5868,5867,-5904,5920,5916,-5916,5922,5925,-5942,5923,5946,-5925,5927,5902,-5929,5902,5927,-5904,5989,5920,-5961,5978,5989,-5961,5989,5921,-5921,5922,5964,-5924,5966,5963,-5942,5971,5933,-5933,5968,5967,-5974,5975,5982,5973,-5968,5926,5966,-5942,5961,5984,-5961,5981,5974,-5974,5923,5975,-5946,5937,5969,-5933,6189,6201,-6201,6143,6142,-6148,6045,6044,-6038,6047,6026,-6038,6145,6187,-6116,6449,6055,-6055,6184,6119,-6104,6137,6085,-6105,6140,6022,-6022,6013,6223,-6011,6215,6040,-6040,6076,6093,-6093,6157,6044,-6156,6219,6170,-6170,6170,6219,-6441,6215,6039,-6217,6442,6441,-6220,6083,6234,-6085,6033,6133,-6035,6225,6218,-6218,5974,6200,-6203,5983,5962,-6004,6200,5974,-6190,6004,6467,-6003,6215,6176,-6153,6210,6153,-6151,6140,6024,-6029,6444,6440,-6220,6225,6066,-6066,6036,6014,-6018,6052,6041,-6055,6215,6152,-6214,6036,6045,-6038,6057,6218,-6226,6060,6218,-6058,6225,6063,-6067,6171,6187,-6146,6234,6188,-6234,6239,6119,-6187,6239,6186,-6186,6246,6243,-6245,6251,6254,-6248,6247,6246,-6252,6257,6253,-6256,6255,6256,-6261,6261,6265,-6259,6262,6470,-6264,6266,6470,-6263,6470,6267,-6264,6270,6267,-6471,6266,6270,-6471,6264,6268,-6260,6268,6269,-6274,6272,6253,-6258,6271,6275,-6273,6276,6471,-6275,6277,6472,-6472,6471,6278,-6278,6473,6412,-6282,6281,6278,-6472,6472,6247,-6255,6254,6274,-6472,6473,6415,-6413,6283,6280,-6280,6279,6282,-6288,6284,6286,-6292,6290,6285,-6285,6288,6474,-6290,6292,6474,-6289,6474,6293,-6290,6295,6293,-6475,6474,6292,-6296,6294,6285,-6291,6296,6297,-6295,6280,6283,-6300,6298,6301,-6300,6303,6475,-6403,6402,6277,-6304,6476,6302,-6429,6302,6476,-6301,6304,6300,-6477,6307,6304, -6477,6455,6476,-6429,6303,6277,-6305,6304,6277,-6301,6321,6306,-6306,6305,6308,-6310,6311,6310,-6316,6312,6322,-6312,6313,6477,-6315,6316,6477,-6314,6477,6317,-6315,6319,6317,-6478,6477,6316,-6320,6318,6322,-6313,6320,6325,-6319,6306,6321,-6324,6328,6323,-6325,6327,6478,-6304,6478,6479,-6476,6475,6303,-6479,6478,6333,-6480,6333,6357,-6480,6478,6332,-6334,6337,6335,-6335,6422,6334,-6337,6338,6424,-6344,6342,6339,-6339,6340,6480,-6342,6344,6480,-6341,6480,6345,-6342,6348,6345,-6481,6480,6344,-6349,6346,6339,-6343,6347,6423,-6347,6349,6335,-6338,6421,6351,-6350,6357,6333,-6351,6350,6354,-6358,6356,6479,-6358,6362,6355,-6355,6363,6481,-6483,6482,6364,-6364,6358,6364,-6360,6359,6364,-6483,6482,6356,-6356,6355,6359,-6483,6365,6369,-6367,6367,6369,-6366,6375,6380,-6377,6377,6380,-6376,6394,6123,-6467,6396,6124,-6124,6383,6386,-6367,6468,6481,-6364,6363,6389,-6469,6483,6481,-6469,6468,6466,-6484,6466,6123,-6447,6121,6457,-6467,6457,6483,-6467,6401,6457,-6122,6483,6457,-6457,6456,6481,-6484,6481,6456,-6483,6472,6402,-6248,6479,6356,-6404,6403,6475,-6480,6403,6402,-6476,6402,6472,-6278,6356,6482,-6457,6456,6403,-6357,6367,6387,-6385,6241,6249,-6243,6417,6248,-6250,6418,6353,-6353,6353,6420,-6459,6458,6433,-6460,6252,6248,-6417,6331,6418,-6337,6351,6418,-6353,6331,6329,-6432,6329,6326,-6426,6433,6420,-6435,6426,6328,-6309,6328,6426,-6327,6420,6433,-6459,6256,6252,-6417,6282,6281,-6431,6430,6301,-6283,6301,6430,-6303,6472,6254,-6472,6308,6307,-6427,6351,6336,-6419,6181,6451,-6183,6454,6451,-6454,6453,6429,-6411,6136,6401,-6122,6170,6440,-6172,6445,6218,-6061,6085,6084,-6103,6048,6447,-6050,6221,6048,-6047,6220,6448,-6222,6215,6216,-6220,6215,6447,-6041,6453,6451,-6451,6429,6455,-6429,6182,6451,-6231,6181,6438,-6452,6450,6436,-6453,6425,6436,-6432,6329,6425,-6432,6307,6476,-6456,6415,6413,-6413,6473,6276,-6416,6275,6416,-6277,6256,6416,-6276,6471,6473,-6282,6276,6473,-6472,6330,6332,-6479,6327,6330,-6479,6235,6119,-6240,6468,6394,-6467,6361,6360,-6460,6393,6361,-6460,6144,6146,-6464,6219,6169,-6463,6144,6171,-6146,6218,6442,-6220, 6460,6228,-6230,6219,6441,-6445,6074,6073,-6449,6448,6073,-6450,6144,6463,-6170,6169,6463,-6463,6173,6215,-6220,6196,6197,-6208,6466,6446,-6466,6158,6155,-6157,6153,6027,-6215,6046,6050,-6024,5999,5998,-6003,6017,6045,-6037,6033,6145,-6134,6205,6196,-6208,6259,6258,-6265,6391,6399,-6396,6389,6391,-6469,6404,6405,-6434,6433,6432,-6405,6094,6097,-6117,6077,6109,-6098,6234,6233,-6470,6197,6204,-6208,6209,6151,-6153,6056,6053,-6062,6061,6053,-6077,5963,5982,-5976,5957,5962,-5919,5958,5962,-5958,6488,6484,6486,-6492,6011,6010,6018,-6493,6493,6492,6018,-6020,6139,6494,6493,-6020,6139,6138,6495,-6495,6212,6495,-6139,5316,5751,6496,-5893,6497,6496,5809,-5809,5891,6498,6497,-5809,5891,5766,6499,-6499,5766,5763,6500,-6500,5765,6500,5763,-5765,5660,5117,-5117,6515,6590,6540,-6515,6539,6516,6514,-6541,6540,6541,-6540,6659,6684,6889,-6891,6544,6517,6516,-6540,6545,6544,6539,-6542,6546,6547,6916,-6918,6693,6548,6888,-6888,6661,6662,6659,-6661,6915,6548,6693,-6915,6521,6519,6549,-6561,6548,6547,6889,-6889,6916,6547,6548,-6916,6552,6694,6695,-6552,6553,6554,6552,-6552,6505,6556,6557,-6556,6695,6512,6506,-6552,6532,6664,6558,-6519,6537,6661,6660,-6534,6891,6892,6533,-6661,6559,6549,-6547,6559,6546,-6918,6505,6555,6554,-6554,6560,6561,6520,-6522,6559,6557,6560,-6550,6561,6560,6557,-6557,6556,6505,5911,-6562,6671,6905,6599,-6566,6682,6567,6568,-6682,6566,6668,6669,-6571,6601,6526,6535,-6667,6680,6538,6526,-6602,6572,6573,6910,-6912,6576,6574,-6910,6577,6529,6528,-6576,6648,6656,6652,-6654,6648,6653,6654,-6648,6635,6631,6641,-6690,6632,6563,6863,-6606,6568,6578,6680,-6682,6910,6573,6576,-6910,6668,6566,6569,-6668,6582,6692,6562,-6608,6583,6584,6585,-6587,6587,6580,6588,-6590,6632,6605,6900,-6902,6576,6573,6643,-6645,6647,6654,6655,-6647,6591,6655,6590,-6689,6592,6651,6652,6656,-6872,6574,6576,6644,6645,-6592,6855,6900,6605,-6631,6570,6904,6682,-6567,6902,6597,-6565,6610,6865,6600,6581,-6650,6588,6580,6690,-6692,6577,6574,6591,-6689,6686,6687,6886,-6886,6569,6601,6666,-6668,6622,6603,6593,-6595,6618,6619,6586,-6586,6572,6642,6643,-6574, 6642,6572,6689,-6642,6589,6588,-6605,6606,6607,6608,-6610,6608,6587,6589,-6610,6864,6582,6607,-6607,6679,6611,6612,-6679,6613,6612,6611,-6615,6614,6615,6616,-6614,6658,6550,6617,-6658,6618,6523,6522,-6620,6619,6522,5316,-5893,6586,6619,5892,-5911,5767,6508,6583,-6587,6510,6611,6679,-6512,6614,6611,6510,-5960,6509,6615,6614,-5960,5752,6550,6658,6615,-6510,6563,6600,6865,-6864,6884,6885,6600,-6564,6564,6884,6563,-6633,6623,6621,6603,-6623,6628,6624,6618,-6586,6624,6524,6523,-6619,6625,6626,6613,-6617,6627,6628,6585,-6585,6612,6629,6677,-6679,6626,6629,6612,-6614,6594,6531,6524,-6625,6622,6594,6624,-6629,6627,6623,6622,-6629,6629,6596,6676,-6678,6626,6597,6596,-6630,6625,6620,6597,-6627,6621,6672,6673,-6604,6593,6603,6673,-6675,6593,6674,6536,-6531,6570,6669,6670,-6596,6620,6686,6885,-6885,6625,6912,6686,-6621,6507,6505,-6554,5911,6513,6520,-6562,6688,6534,6529,-6578,6562,6634,6587,-6609,6562,6608,-6608,6649,6582,6864,-6868,6609,6589,-6638,6676,6596,6598,-6676,6630,6605,6640,6868,-6637,6664,6665,6542,-6559,6593,6530,6531,-6595,6564,6632,6901,-6903,6634,6633,6580,-6588,6631,6866,6862,-6642,6862,6859,6642,-6642,6642,6859,6858,-6644,6643,6858,6861,-6645,6644,6861,6856,-6646,6646,6860,-6648,6648,6647,6860,-6858,6640,6605,6863,-6870,6637,6589,-6605,6604,6588,6650,-6639,6650,6588,6691,-6652,6652,6545,6541,-6654,6541,6540,6654,-6654,6590,6655,6654,-6541,6639,6651,-6593,6650,6651,6639,-6639,6610,6649,6867,-6871,6857,6854,6656,-6649,6871,6656,-6855,6615,6658,6657,-6617,6891,6660,6659,-6891,6518,6558,6661,-6538,6558,6542,6662,-6662,6663,6662,6542,-6544,6664,6532,6517,-6545,6665,6664,6544,-6546,6666,6535,6525,-6603,6666,6602,6579,-6668,6571,6668,6667,-6580,6668,6571,6565,-6670,6670,6669,6565,-6600,6571,6672,6671,-6566,6672,6571,6579,-6674,6673,6579,6602,-6675,6674,6602,6525,-6537,6888,6889,6684,-6686,6887,6888,6685,-6563,6885,6886,6581,-6601,6621,6675,6671,-6673,6677,6676,6623,-6628,6677,6627,6584,-6679,6583,6679,6678,-6585,6511,6679,6583,-6509,6623,6676,6675,-6622,6680,6601,6569,-6682,6566,6682,6681,-6570,6578,6527,6538,-6681, 6684,6659,6662,-6664,6684,6663,6633,-6686,6562,6685,6633,-6635,6687,6686,6912,-6914,6515,6534,6688,-6591,6855,6683,6903,-6596,6543,6542,6665,-6691,6690,6665,6545,-6692,6652,6651,6691,-6546,6633,6663,-6544,6581,6692,6582,-6650,6581,6886,6887,-6693,6687,6693,6887,-6887,6693,6687,6913,-6915,6550,6695,6694,-6618,6550,5752,6512,-6696,5482,6709,6711,-6711,6713,6702,-6706,6844,6709,5482,-6846,6713,6711,6709,6922,-6703,6817,6841,6793,-6821,6894,6895,6841,-6818,6895,6896,6717,-6842,6713,6705,6714,-6712,6715,6710,6711,-6715,6710,6715,5481,-5483,6829,6828,6757,-6722,6736,6737,6718,-6793,6808,6807,6812,-6812,6729,6733,6804,-6804,6735,6724,6839,-6839,6757,6828,6736,-6793,6736,6828,6851,-6853,6766,6827,6753,-6874,6739,6740,6759,-6759,6841,6717,6794,-6794,6759,6740,6897,-6899,6760,6823,6535,-6527,6760,6725,6824,-6824,6853,6737,6736,-6853,6879,6767,-6742,6837,6836,6773,-6773,6774,6775,6772,-6774,6775,6774,6777,-6777,6816,6815,6778,-6708,6779,6780,6522,-6524,6780,6779,6744,-6746,6522,6780,5461,-5317,6780,6745,6501,5468,-5462,5530,6504,6837,-6773,6775,5531,5530,-6773,6502,5531,6775,-6777,6503,6502,6776,-6817,6778,6815,6918,-6920,6785,6779,6523,-6525,6752,6785,6524,-6532,6783,6789,6785,-6753,6790,6835,6834,-6755,6786,6787,6755,-6782,6777,6774,6787,-6787,6773,6836,6835,-6791,6744,6779,6785,-6790,6751,6832,6831,-6763,6735,6838,6538,-6528,6726,6753,6827,-6827,6724,6735,-6733,6721,6757,6756,-6834,6898,6899,6718,-6760,6759,6718,6737,-6759,5481,6715,6520,-6514,6709,6844,6921,-6923,6717,6795,-6795,6809,6797,6879,-6742,6769,6798,-6748,6786,6781,6842,-6919,6815,6777,6786,-6919,6731,6734,6730,-6733,6793,6794,6746,-6717,6795,6768,6746,-6795,6768,6795,6796,-6742,6739,6809,6741,-6797,6849,6801,6880,-6882,6801,6764,6882,-6881,6803,6804,6878,-6877,6806,6874,-6806,6808,6875,6877,-6808,6808,6811,6810,-6815,6771,6809,6739,-6759,6798,6765,-6748,6750,6747,-6766,6810,6811,6698,-6702,6698,6811,6812,-6698,6748,6697,6812,-6814,6800,6883,6814,-6811,6872,6875,6808,-6815,6883,6872,-6815,6776,6777,6815,-6817,6893,6894,6817,-6819,6819,6818,6817,-6821,6821,6712, 6699,-6823,6701,6698,6696,-6701,6696,6697,6514,-6517,6521,6520,6715,-6715,6521,6714,6705,-6520,6537,6533,6818,-6820,6532,6518,6712,-6822,6700,6696,6516,-6518,6705,6702,6894,-6894,6519,6705,6893,-6893,6893,6818,6533,-6893,6712,6518,6537,-6820,6699,6712,6819,-6821,6535,6823,6761,-6526,6823,6824,6738,-6762,6720,6826,6827,-6852,6720,6851,6828,-6830,6831,6832,6761,-6739,6721,6833,-6783,6835,6788,6784,-6835,6835,6836,6743,-6789,6742,6743,6836,-6838,6504,5330,6742,-6838,6838,6760,6526,-6539,6838,6839,6725,-6761,6848,6908,-6847,6803,6876,6763,-6803,6729,6803,6802,-6729,6907,6723,6724,-6907,6839,6724,6723,-6841,6725,6839,6840,-6723,6824,6725,6722,-6826,6738,6824,6825,-6728,6831,6738,6727,-6831,6762,6831,6830,-6783,6789,6783,6784,-6789,6788,6743,6744,-6790,6745,6744,6743,-6743,5330,6501,6745,-6743,6700,6517,6532,-6822,6701,6700,6821,-6823,6920,6921,6844,-6707,6706,6844,6845,-6709,5353,5354,6708,-6846,6719,6899,6781,-6756,6833,6756,6754,-6835,6782,6833,6834,-6785,6784,6783,6762,-6783,6783,6752,6751,-6763,6751,6752,6531,-6531,6753,6726,6791,-6849,6846,6873,6753,-6849,6749,6847,6748,-6814,6804,6805,6874,-6879,6730,6749,6805,6804,-6734,6847,6749,6730,-6735,6751,6530,6536,-6833,6832,6536,6525,-6762,6735,6527,6528,-6732,6734,6731,6528,-6530,6847,6734,6529,-6535,6515,6748,6847,-6535,6515,6514,6697,-6749,6829,6721,6782,-6831,6720,6829,6830,-6728,6826,6720,6727,-6826,6726,6826,6825,-6723,6791,6726,6722,-6841,6791,6840,-6724,6801,6849,6728,-6803,6763,6764,6801,-6803,6848,6791,6723,6907,-6909,6750,6716,6746,-6748,6769,6747,6746,-6769,6822,6699,6793,-6717,6701,6822,6716,-6751,6701,6750,6799,6800,-6811,6820,6793,-6700,6739,6796,-6741,6896,6897,6740,-6718,6920,6706,6778,-6920,6707,6778,6706,-6709,5354,5476,6707,-6709,6756,6757,6792,-6720,6754,6756,6719,-6756,6790,6754,6755,-6788,6787,6774,6773,-6791,6758,6737,6853,-6772,6771,6850,6797,-6810,6770,6853,6852,-6767,6771,6853,6770,-6851,6852,6851,6827,-6767,6807,6806,6813,-6813,6546,6890,6889,-6548,6549,6891,6890,-6547,6519,6892,6891,-6550,6702,6704,6895,-6895,6704,6703,6896,-6896,6703,6843,6897, -6897,6842,6898,6897,-6844,6842,6781,6899,-6899,6750,6765,-6800,6646,6655,6591,-6646,6806,6805,6749,-6814,6597,6620,6884,-6565,6719,6792,6718,-6900,6670,6855,-6596,6900,6599,6905,-6902,6598,6596,6597,-6903,6900,6855,6670,-6600,6697,6696,-6699,6633,6543,6690,-6581,6887,6562,-6693,6768,6741,6767,-6770,6740,6796,6795,-6718,6595,6903,6904,-6571,6732,6730,-6734,6724,6732,-6907,6735,6731,-6733,6578,6575,6528,-6528,6689,6903,6683,-6636,6572,6911,6904,6903,-6690,6904,6567,-6683,6598,6905,6671,-6676,6901,6905,6598,-6903,6906,6732,6733,-6730,6728,6907,6906,-6730,6908,6907,6728,-6850,6846,6908,6849,-6882,6909,6574,6577,-6576,6568,6910,6909,-6579,6909,6575,-6579,6911,6910,6568,-6568,6904,6911,-6568,6657,6912,6625,-6617,6617,6913,6912,-6658,6694,6914,6913,-6618,6552,6915,6914,-6695,6554,6916,6915,-6553,6555,6917,6916,-6555,6559,6917,6555,-6558,6919,6918,6842,-6844,6703,6920,6919,-6844,6703,6704,6921,-6921,6922,6921,6704,-6703,6926,6939,6938,-6926,6938,6939,6941,-6941,6942,6945,6944,-6944,6946,6947,6940,-6942,6948,6950,6949,-6947,6951,6952,6947,-6950,6941,6953,6948,-6947,6954,6955,6951,-6950,6956,6958,6954,-6958,6954,6958,6959,-6956,6960,6962,6961,-6959,6961,6964,6963,-6959,6961,6967,6966,-6966,6968,6961,6965,-6970,6967,6971,6970,-6967,6972,6973,6970,-6972,6974,6976,6971,-6976,6977,6975,6956,-6958,6978,6975,6977,-6980,6980,6983,6982,-6982,6981,6982,6985,-6985,6986,6988,6987,-6983,6989,6990,6982,-6988,6991,6987,6993,-6993,6991,6995,6994,-6988,6993,6997,6996,-6993,6996,6997,6999,-6999,7000,6997,7002,-7002,6983,6980,7003,-7003,7003,7005,7004,-7003,7006,7009,7008,-7008,7007,7008,7011,-7011,7012,7008,7014,-7014,7015,7017,7016,-7015,7016,7019,7018,-7015,7020,7017,7015,-7022,7020,7021,7023,-7023,7024,7026,7021,-7026,7027,7028,7021,-7027,7029,7031,7026,-7031,7030,7033,7032,-7030,7032,7033,7035,-7035,7036,7038,7037,-7036,7035,7037,7039,-7035,7040,7042,7041,-7038,7043,7041,7045,-7045,7043,7047,7046,-7042,7048,7044,7045,-7050,7050,7051,7048,-7050,7038,7036,7053,-7053,7053,7055,7054,-7053,7055,7053,7057,-7057,7057,7060,7059,-7059,7061,7064, 7063,-7063,7062,7063,7065,-7059,7066,7069,7068,-7068,7070,7061,7067,-7069,7071,7073,7072,-7070,7072,7073,7074,-7071,7075,7073,7071,-7077,7073,7075,7077,-7075,7078,7075,7076,-7080,7077,7075,7078,-7081,7081,7083,7079,-7083,7081,7084,7080,-7084,7085,7081,7082,-7087,7081,7085,7087,-7085,7088,7085,7086,-7090,7088,7090,7087,-7086,7091,7088,7089,-7093,7090,7088,7091,-7094,7094,7095,7091,-7093,7093,7091,7095,-7097,7097,6928,7099,-7099,7100,7103,7102,-7102,7100,7101,6923,-6925,7082,7071,7069,-7087,7071,7082,7079,-7077,7089,7069,7066,-7093,7104,6953,6941,-6940,6950,6948,7106,-7106,7074,7084,7087,-7071,7084,7074,7077,-7081,7070,7090,7093,-7062,7096,7064,7061,-7094,7107,7108,7103,-7101,7100,6924,6932,-7108,7109,7110,6936,-6938,7109,7112,7111,-7111,7113,7116,7115,-7115,7117,7119,6979,-7119,7117,7120,6951,-7120,7056,7123,7122,-7122,7054,7039,7125,-7125,7126,7127,7046,-7051,7050,7046,7047,-7052,7128,7130,7129,-7030,7131,7132,7113,-7115,7031,7011,7012,-7028,7028,7027,7012,-7014,7028,7013,7018,-7024,7023,7018,7019,-7023,7133,7114,7115,-6985,7133,7005,7131,-7115,6990,7001,7004,-6986,6999,7000,6989,-6995,6995,6998,6999,-6995,6974,6978,6959,-6964,6964,6976,6974,-6964,6972,6976,6964,-6969,7122,7134,7034,-7122,6945,6942,6938,-6941,6947,6952,6945,-6941,7135,7138,7137,-7137,7138,7135,6931,-6931,7139,7134,7122,-7141,7142,7138,6930,-7142,7138,7142,7140,-7138,7140,7122,7123,-7138,7144,7142,7141,-7146,7142,7144,7139,-7141,7144,7147,7132,-7147,7146,7130,7128,-7140,7147,7148,7116,-7114,7111,7117,7118,-7117,7110,7111,7116,-7149,7148,7145,6936,-7111,7117,7111,7112,-7121,7146,7132,7149,-7131,7129,7130,7149,-7011,7106,6948,6953,-7151,7151,7150,6953,-7105,6933,7104,6939,-6927,7056,7057,7065,-7153,7063,7153,7152,-7066,7103,7108,7096,-7096,6942,6943,7154,-6935,6943,7109,6937,-7155,6943,6944,7112,-7110,7112,6944,6952,-7121,6927,7155,-7157,6971,6962,6960,-6976,6986,7002,6997,-6989,7014,7008,7024,-7026,7026,7009,7006,-7031,7127,7125,7037,-7042,7040,7052,7049,-7043,7049,7052,7124,-7127,7124,7125,7127,-7127,6990,6989,7000,-7002,6968,6969,6973,-6973,7095,7094, 7102,-7104,7099,6929,6923,-7102,7102,7098,7099,-7102,7094,7157,7097,-7099,7153,7096,7108,-7137,7135,7107,6932,-6932,6942,6934,-6936,6949,6947,-6947,6954,6950,-6958,6950,6954,-6950,6960,6958,-6957,6958,6963,-6960,6964,6961,-6969,6965,6966,-7159,6969,6965,-7159,7158,6966,-6971,6973,7158,-6971,6969,7158,-6974,6967,6962,-6972,6971,6976,-6973,6975,6960,-6957,6974,6975,-6979,6979,6977,-7160,6980,7159,-7161,7159,6980,-6982,7161,6984,-7116,6984,7159,-6982,7160,6957,-6951,6957,7159,-6978,7161,7115,-7119,6986,6982,-6984,6982,6990,-6986,6987,6994,-6990,6993,6987,-6989,6991,6992,-7163,6995,6991,-7163,7162,6992,-6997,6998,7162,-6997,7162,6998,-6996,6997,6993,-6989,6999,6997,-7001,6983,7002,-6987,7001,7002,-7005,7006,7105,-7164,7105,7006,-6981,7164,7131,-7006,7005,7003,-7165,7007,7164,-7004,7010,7164,-7008,7149,7131,-7165,7006,7007,-6981,7007,7003,-6981,7024,7008,-7010,7008,7012,-7012,7014,7018,-7014,7015,7014,-7026,7016,7017,-7166,7019,7016,-7166,7165,7017,-7021,7022,7165,-7021,7165,7022,-7020,7021,7015,-7026,7023,7021,-7029,7009,7026,-7025,7031,7027,-7027,7030,7006,-7167,7166,7163,-7168,7163,7166,-7007,7166,7167,-7037,7036,7167,-7061,7166,7036,-7036,7040,7037,-7039,7125,7039,-7038,7041,7046,-7128,7045,7041,-7043,7043,7044,-7169,7047,7043,-7169,7168,7044,-7049,7051,7168,-7049,7168,7051,-7048,7049,7045,-7043,7050,7049,-7127,7052,7040,-7039,7124,7052,-7055,7060,7053,-7037,7053,7060,-7058,7059,7060,-7168,7065,7057,-7059,7066,7170,-7170,7170,7066,-7068,7061,7062,-7068,7062,7170,-7068,7170,7058,-7060,7058,7170,-7063,7068,7069,-7073,7070,7068,-7073,7078,7079,-7084,7080,7078,-7084,7097,7156,-6929,7099,6928,-6930,7086,7069,-7090,7157,7066,-7170,7066,7157,-7093,7171,7157,-7170,7157,7171,-7157,7156,7143,-6929,6927,7156,-7152,7151,7156,-7172,7104,6927,-7152,7171,7150,-7152,7150,7171,-7170,7169,7170,-7151,7160,6950,-7106,7167,7106,-7060,7106,7167,-7164,7106,7163,-7106,7105,6980,-7161,7059,7150,-7171,7150,7059,-7107,7070,7087,-7091,6944,6945,-6953,7120,6952,-6952,7121,7055,-7057,7056,7152,-7124,7152,7153,-7137,6955,7119,-6952,7034,7039,-7122, 7054,7055,-7122,7034,7134,-7033,7032,7128,-7030,7136,7137,-7124,7129,7011,-7032,7031,7029,-7130,7123,7152,-7137,6959,7119,-6956,6985,7133,-6985,7133,6985,-7005,7004,7005,-7134,7160,7159,-6958,7011,7129,-7011,7054,7121,-7040,7148,7147,-7146,7147,7113,-7133,6933,6927,-7105,7147,7144,-7146,7132,7131,-7150,7144,7146,-7140,7128,7134,-7140,7032,7134,-7129,7010,7149,-7165,7118,7115,-7117,7161,7118,-6980,6978,6979,-7120,6959,6978,-7120,7159,6984,-7162,6979,7159,-7162,7033,7166,-7036,7030,7166,-7034,7174,6938,6942,-6936,7157,7156,-7098,7064,7153,-7064,7096,7153,-7065,7156,7155,-7144,6962,6967,-6962,7094,7098,-7103,7092,7157,-7095,7107,7136,-7109,7136,7107,-7136,5213,7141,6930,5198,-5212,5197,6931,-5209,5196,5208,6931,-6933,6923,5195,5196,-6925,5194,5300,6929,-6929,6928,7143,5193,-5195,7143,7155,5242,-5194,7155,6927,5192,-5243,5258,5205,5192,6927,-6934,5202,5203,7174,-6936,6935,6934,5201,-5203,5209,5201,6934,-7155,5199,7172,6936,-7146,5213,5199,7145,-7142,7172,7173,6937,-6937,7173,5209,7154,-6938,5196,6932,-6925,6930,6931,5197,-5199,6923,6929,5300,-5196,5259,5258,6933,-6927,6925,5204,5259,-6927,6925,6938,-7175,6925,7174,5203,-5205,6553,6551,6506,-6508,5482,5353,-6846,5476,6503,6816,-6708,5347,5349,-5378,6501,5330,5331,-5749,6501,5748,5749,-5469,5751,5816,5809,-6497,6586,5910,-5768,5892,6497,6498,-5911,7177,7184,7183,7175,-7177,7177,7178,7185,-7185,7178,7179,7186,-7186,7180,7181,7179,-7183,7181,7187,7186,-7180,7572,7573,7183,-7185,7571,7572,7184,-7186,7570,7571,7185,-7187,7569,7570,7186,-7204,7193,7175,7183,-7195,7183,7573,7574,-7195,7188,7189,7196,-7198,7196,7189,7190,-7199,7190,7191,7199,-7199,7191,7192,7200,-7200,7568,7569,7203,-7203,7202,7203,7187,-7205,7205,7181,7180,-7207,7206,7180,7207,-7209,7209,7193,7194,-7211,7194,7574,7575,-7211,7211,7195,7212,-7214,7213,7212,7197,-7215,7197,7196,7215,-7215,7215,7196,7198,-7217,7198,7199,7217,-7217,7217,7199,7200,-7219,7200,7219,7220,-7219,7220,7219,7201,-7222,7567,7568,7202,-7223,7222,7202,7204,-7224,7224,7205,7206,-7226,7225,7206,7208,-7227,7209,7296,7294,-7250,7227,7211,7213,-7229, 7213,7214,7229,-7229,7215,7229,-7215,7230,7216,7217,-7232,7231,7217,7218,-7233,7233,7220,7221,-7235,7221,7567,7564,-7235,7222,7223,7235,-7258,7236,7224,7225,-7238,7237,7225,7226,-7239,7175,7239,7240,-7177,7241,7242,7243,-7245,7242,7245,7246,-7244,7247,7207,7180,-7183,7193,7248,7239,-7176,7209,7249,7248,-7194,7239,7250,7251,-7241,7241,7252,7253,-7243,7242,7253,7254,-7246,7248,7255,7250,-7240,7249,7256,7255,-7249,7204,7181,-7206,7223,7204,7205,-7225,7258,7241,7244,-7260,7260,7259,7244,-7244,7260,7243,7246,-7262,7262,7261,7246,-7246,7245,7254,7263,-7263,7258,7264,7252,-7242,7258,7259,7176,-7241,7259,7260,7178,-7178,7260,7261,7179,-7179,7261,7262,7247,-7183,7264,7258,7240,-7252,7262,7263,7265,-7248,7266,7267,7268,-7270,7270,7271,7269,-7269,7267,7266,7272,-7274,7274,7275,7276,-7278,7278,7279,7277,-7281,7275,7281,7282,-7277,7283,7282,7284,-7286,7286,7287,7280,-7289,7289,7286,7288,-7273,7207,7266,7269,-7209,7250,7275,7274,-7252,7252,7279,7278,-7254,7253,7278,7287,-7255,7290,7291,7266,-7208,7265,7289,7291,-7291,7255,7281,7275,-7251,7256,7284,7281,-7256,7295,7285,7284,-7257,7264,7292,7279,-7253,7254,7287,7286,-7264,7251,7274,7292,-7265,7263,7286,7289,-7266,7256,7249,7294,-7296,7233,7232,7218,-7221,7224,7236,7235,-7224,7226,7271,-7239,7187,7203,-7187,7188,7212,-7196,7188,7197,-7213,7192,7219,-7201,7192,7201,-7220,7247,7290,-7208,7176,7259,-7178,7179,7261,-7183,7287,7278,-7281,7291,7289,-7273,7281,7284,-7283,7279,7292,-7278,7274,7277,-7293,7208,7269,-7227,7290,7247,-7266,7291,7272,-7267,7271,7226,-7270,7204,7187,-7182,7297,7296,7209,-7211,7293,7297,7210,-7576,7282,7283,7298,-7277,7276,7298,7299,-7278,7277,7299,7300,-7281,7288,7280,7300,7301,-7273,7272,7301,7302,-7274,7273,7302,7303,-7268,7267,7303,7270,-7269,7495,7329,7331,7330,-7504,7341,7520,7519,-7519,7517,7516,7347,-7346,7532,7347,-7517,7232,7494,7493,7354,-7232,7354,7493,7492,-7356,7505,7390,7391,-7345,7359,7358,7341,-7346,7360,7359,7345,-7348,7526,7527,7347,-7533,7498,7497,7233,-7235,7257,7499,7498,-7565,7376,7543,7542,-7484,7449,7371,7370,-7451,7524,7523,7515,-7515,7529, 7456,7374,-7531,7456,7455,7375,-7375,7467,7462,7461,-7464,7481,7467,7463,-7481,7379,7451,7450,-7371,7513,7525,7524,-7515,7531,7530,7374,-7382,7382,7381,7374,-7376,7537,7536,7525,-7514,7355,7489,7488,-7230,7370,7372,7380,-7380,7371,7458,7372,-7371,7311,7324,7393,-7393,7312,7325,7395,-7395,7313,7396,7395,-7326,7313,7310,7397,-7397,7319,7399,7398,-7310,7327,7401,7400,-7322,7328,7402,7401,-7328,7308,7403,7402,-7329,7308,7304,7404,-7404,7326,7407,7405,-7306,7311,7392,7406,-7318,7318,7408,7407,-7327,7317,7406,7444,-7317,7315,7410,-7455,7315,7314,7412,-7411,6873,6846,7546,-7414,6797,7414,7415,-6880,6767,7432,7416,-6770,6769,7416,7417,-6799,6799,6765,7453,-7419,6799,7418,7419,-6801,7310,7309,7398,-7398,7321,7423,7422,-7321,7331,7329,7392,-7394,7395,7333,7330,-7395,7396,7335,7333,-7396,7397,7337,7335,-7397,7339,7340,7398,-7400,7343,7423,7400,-7535,7346,7342,7401,-7403,7348,7346,7402,-7404,7349,7348,7403,-7405,7407,7350,7351,-7406,7392,7329,7353,-7407,7357,7339,7399,-7425,7361,7350,7407,-7409,7406,7353,7445,-7445,7362,7425,7444,-7446,7544,7543,7376,-7412,7410,7375,7455,-7455,7412,7382,7375,-7411,7545,7383,7413,-7547,7384,7385,7415,-7415,7431,7386,7416,-7433,7386,7387,7417,-7417,7452,7388,7418,-7454,7388,7389,7419,-7419,7420,7426,7548,-7548,7426,7420,7421,-7449,7442,7441,7428,-7369,7398,7340,7337,-7398,7440,7439,7371,-7450,7427,7390,7439,-7441,7422,7391,7390,-7428,7423,7343,7391,-7423,7499,7257,7235,-7237,7409,7425,7362,-7364,7323,7425,7409,-7323,7448,7539,7381,-7427,7434,7433,7454,-7456,7471,7474,7581,-7583,7355,7492,7491,-7490,7344,7391,-7344,7400,7423,-7322,7381,7382,7548,-7427,7368,7428,7429,-7370,7430,7378,7369,-7430,7385,7431,7432,-7416,6879,7415,7432,-6768,7306,7307,7433,7408,-7319,7433,7434,7361,-7409,7361,7434,7435,-7527,7435,7528,7527,-7527,7360,7436,7437,-7360,7359,7437,7438,-7359,7504,7439,7390,-7506,7441,7442,7357,-7425,7444,7425,7323,-7317,7394,7330,7331,-7394,7324,7312,7394,-7394,7404,7304,7305,-7406,7351,7349,7404,-7406,7447,7508,7509,-7374,7581,7474,7475,-7581,7578,7477,7476,-7578,7479,7481,7480,-7479,7387,7452, 7453,-7418,6765,6798,7417,-7454,7307,7315,7454,-7434,7434,7455,7456,-7436,7435,7456,7529,-7529,7438,7515,7523,-7523,7458,7371,7439,-7505,7428,7459,7460,-7430,7460,7577,7576,-7430,7578,7579,7449,-7478,7463,7461,7429,-7577,7429,7461,7462,-7431,7480,7576,7450,-7479,7431,7465,7464,-7387,7386,7464,7466,-7388,7468,7428,7441,-7470,7471,7427,7440,-7475,7399,7472,7470,-7425,7427,7471,7473,-7423,7422,7473,7583,-7585,7469,7441,7424,-7471,7474,7440,7449,-7476,7580,7475,7449,-7580,7476,7450,7576,-7578,7450,7476,7477,-7450,7451,7479,7478,-7451,7387,7466,7482,-7453,7473,7471,7582,-7584,7320,7422,7584,-7586,7377,7484,7562,-7564,7366,7485,7486,-7368,7367,7486,7487,-7444,7356,7443,7487,7488,-7490,7490,7338,-7492,7492,7336,7490,-7492,7493,7334,7336,-7493,7494,7332,7334,-7494,7495,7503,-7497,7497,7352,7495,-7497,7498,7446,7352,-7498,7498,7499,7365,-7447,7365,7499,7236,7237,-7365,7542,7500,7501,-7484,7483,7559,7383,-7546,7503,7332,7494,-7497,7338,7356,7489,-7492,7358,7438,7522,-7522,7358,7521,7520,-7342,7448,7421,7506,-7508,7447,7539,7538,-7509,7457,7373,7509,-7511,7457,7510,7437,-7437,7507,7506,7511,-7513,7508,7538,7537,-7514,7509,7508,7513,-7515,7515,7510,7509,-7515,7437,7510,7515,-7439,7536,7535,-7526,7527,7528,7436,-7361,7528,7529,7457,-7437,7457,7529,7530,-7374,7447,7373,7530,-7532,7539,7447,-7532,7527,7360,-7348,7526,7532,-7534,7533,7532,7516,7348,-7350,7369,7378,7377,7563,-7367,7368,7369,7366,-7368,7357,7442,7443,-7357,7339,7357,7356,-7339,7340,7339,7338,-7491,7337,7340,7490,-7337,7335,7337,7336,-7335,7333,7335,7334,-7333,7330,7333,7332,-7504,7483,7501,7502,-7560,7365,7364,7363,-7363,7446,7365,7362,-7446,7352,7446,7445,-7354,7495,7352,7353,-7330,7350,7361,7526,-7534,7349,7351,7350,-7534,7517,7346,7348,-7517,7342,7346,7517,-7519,7342,7534,7400,-7402,7534,7342,7518,-7520,7344,7343,7534,-7520,7344,7519,-7521,7505,7344,7520,-7522,7504,7505,7521,-7523,7458,7504,7522,-7524,7372,7458,7523,-7525,7535,7380,7372,7524,-7526,7419,7389,7512,-7512,6883,6800,7419,-7512,7539,7448,7507,-7539,7539,7531,-7382,7540,7561,7562,-7485,7384,7541,7484,-7378, 7384,7377,7378,-7386,7431,7385,7378,-7431,7465,7431,7430,-7463,7464,7465,7462,-7468,7466,7464,7467,-7482,7482,7466,7481,-7480,7452,7482,7479,-7452,7388,7452,7451,-7380,7389,7388,7379,-7381,7389,7380,7535,7536,-7513,7512,7536,-7538,7538,7507,7512,-7538,7484,7541,-7541,6881,6880,6882,7544,-7412,7542,7364,7237,7238,-7501,7363,7364,7542,-7544,7409,7363,7543,-7545,6882,7322,7409,-7545,7459,7428,7579,-7579,7511,7506,6872,-6884,7376,7545,7546,-7412,6846,6881,7411,-7547,7442,7368,7367,-7444,7548,7382,7412,-7548,7314,7547,-7413,7414,7553,7554,-7385,6797,6850,7553,-7415,7541,7384,7554,-7556,7540,7541,7555,-7557,7561,7540,7556,7566,-7286,7550,7549,7557,-7559,7502,7551,7550,-7559,7560,7552,7501,-7501,7549,6770,6766,-7558,7554,7553,7549,-7551,7555,7554,7550,-7552,7556,7555,7551,-7553,6766,6873,7413,-7558,7413,7383,7558,-7558,7558,7383,-7560,7502,7501,7552,-7552,7556,7552,7560,-7567,7271,7565,7560,-7501,7485,7562,7561,7295,-7295,7563,7562,7485,-7367,7231,7354,-7231,7229,7230,7354,-7356,7487,7293,-7228,7564,7498,-7235,7488,7228,-7230,7488,7487,7227,-7229,7232,7233,7497,7496,-7495,7487,7486,7296,7297,-7294,7303,7565,7271,-7271,7303,7302,7301,-7566,7561,7285,-7296,7283,7285,7566,7299,-7299,7566,7560,7565,-7300,7485,7294,7296,-7487,7565,7301,7300,-7300,7257,7564,7567,-7223,7221,7201,7568,-7568,7201,7192,7569,-7569,7570,7569,7192,-7192,7571,7570,7191,-7191,7189,7572,7571,-7191,7188,7573,7572,-7190,7574,7573,7188,-7196,7575,7574,7195,-7212,7227,7293,7575,-7212,7271,7500,-7239,7230,7229,7215,-7217,7576,7480,-7464,7459,7578,7577,-7461,7468,7580,7579,-7429,7469,7581,7580,-7469,7470,7582,7581,-7470,7472,7583,7582,-7471,7399,7584,7583,-7473,7319,7585,7584,-7400,7517,7345,7341,-7519,7549,7553,-6851,7549,6850,-6771,7586,7589,7588,-7588,7587,7588,7591,-7591,7590,7591,7761,-7593,7594,7595,7587,-7591,7596,7594,7590,-7593,7597,7596,7592,-7594,7600,7639,7599,-7599,7601,7595,7594,-7603,7602,7594,7596,-7604,7603,7596,7597,-7605,7605,7601,7602,-7607,7606,7602,7603,-7608,7607,7603,7604,-7609,7599,7636,7610,-7599,7589,7586,7598,-7612,7595,7600,7586,-7588, 7601,7639,7600,-7596,7612,7615,7614,-7614,7616,7614,7615,-7618,7618,7616,7617,-7620,7620,7618,7619,-7622,7622,7617,7615,-7624,7624,7619,7617,-7623,7625,7621,7619,-7625,7626,7629,7628,-7628,7622,7623,7631,-7631,7624,7622,7630,-7633,7625,7624,7632,-7634,7630,7631,7605,-7607,7632,7630,7606,-7608,7633,7632,7607,-7609,7634,7638,7627,-7629,7628,7612,7613,-7636,7623,7615,7612,-7630,7623,7629,7626,-7632,7626,7627,7609,-7726,7599,7609,7637,-7637,7637,7609,7627,-7639,7609,7599,7639,-7726,7640,7643,7642,-7642,7644,7642,7643,-7646,7646,7644,7645,-7648,7648,7645,7643,-7650,7650,7647,7645,-7649,7597,7593,7647,-7651,7651,7654,7653,-7653,7648,7649,7656,-7656,7650,7648,7655,-7658,7597,7650,7657,-7605,7655,7656,7659,-7659,7657,7655,7658,-7661,7604,7657,7660,-7609,7662,7684,7652,-7654,7641,7663,7653,-7641,7649,7643,7640,-7655,7649,7654,7651,-7657,7664,7667,7666,-7666,7668,7669,7671,-7671,7670,7671,7620,-7622,7672,7673,7665,-7669,7674,7672,7668,-7671,7625,7674,7670,-7622,7675,7678,7677,-7677,7679,7673,7672,-7681,7680,7672,7674,-7682,7681,7674,7625,-7634,7659,7679,7680,-7659,7658,7680,7681,-7661,7660,7681,7633,-7609,7676,7686,7682,-7676,7675,7683,7667,-7665,7673,7678,7664,-7666,7677,7678,7673,-7680,7685,7661,7652,-7685,7676,7661,7685,-7687,7588,7589,7687,-7689,7591,7588,7688,-7690,7687,7589,7611,-7691,7690,7611,7610,-7692,7613,7614,7692,-7694,7614,7616,7694,-7693,7616,7618,7695,-7695,7618,7620,7696,-7696,7635,7613,7693,-7698,7634,7635,7697,-7699,7636,7637,7699,-7701,7610,7636,7700,-7692,7699,7637,7638,-7702,7701,7638,7634,-7699,7641,7642,7830,-7703,7642,7644,7703,-7831,7644,7646,7704,-7704,7663,7641,7702,-7706,7662,7663,7705,-7707,7666,7667,7707,-7709,7669,7666,7708,-7710,7671,7669,7709,-7711,7620,7671,7710,-7697,7707,7667,7683,-7712,7711,7683,7682,-7713,7714,7685,7684,-7714,7713,7684,7662,-7707,7686,7685,7714,-7716,7682,7686,7715,-7713,7586,7600,-7599,7598,7610,-7612,7612,7628,-7630,7628,7635,-7635,7640,7653,-7655,7653,7663,-7663,7664,7678,-7676,7675,7682,-7684,7723,7722,7720,-7725,7716,7720,7719,-7719,7719,7721,7710,-7719,7710,7721, 7722,-7697,7696,7722,7723,-7696,7723,7724,7717,-7696,7717,7724,7720,-7717,7720,7722,7721,-7720,7725,7605,7631,-7627,7639,7601,7605,-7726,7661,7726,7651,-7653,7726,7659,7656,-7652,7677,7679,7659,-7727,7661,7676,7677,-7727,7665,7666,7669,-7669,9871,9872,7795,-7795,7890,7879,7732,-7892,7793,7792,7748,-7735,7900,7729,7728,-7746,7736,7731,-7736,7796,7795,9872,-9874,7749,7750,7751,-7753,7736,7735,7750,-7750,7753,7734,7748,-7755,7751,7753,7754,-7753,7755,7749,7752,-7757,7757,7736,7749,-7756,7754,7748,7747,-7759,7752,7754,7758,-7757,7755,7756,7759,-7761,7790,7758,7747,-7792,7789,7756,7758,-7791,7764,7762,7746,-7745,7765,7763,7762,-7765,7849,7766,-7768,7759,7788,7787,-7770,7764,7744,7743,-7771,7765,7764,7770,-7769,7766,7760,7759,7769,-7772,7704,7767,7766,-7772,7786,7785,7741,-7773,7787,7786,7772,-7770,7739,7773,7774,-7739,7775,7776,7740,-7738,7773,7777,7778,-7775,7778,7777,7776,-7776,7775,7737,7738,-7775,7759,7756,7789,-7789,7771,7769,7777,-7774,7776,7772,7741,-7741,7777,7769,7772,-7777,7753,7750,7735,-7735,7730,7729,7900,-7900,7745,7728,7879,-7891,7742,7740,7741,-7786,7792,7791,7747,-7749,7891,7732,7985,-7985,9860,7784,7733,-9860,7742,7903,9859,-7734,9880,7731,7877,-9880,7753,7751,-7751,7774,7778,-7776,7977,7843,7839,-7979,7976,7844,7843,-7978,7844,7976,7975,-7846,7845,7975,7974,-7881,7880,7974,7973,-7847,7782,7783,7987,-7974,7743,7903,7742,-7786,7901,7770,7743,7785,-7787,7904,7901,7786,-7788,7788,7905,7904,-7788,7789,7906,7905,-7789,7906,7789,7790,-7908,7746,7762,7907,7790,-7792,9870,7746,7791,-7793,7793,9869,9870,-7793,7793,7873,9868,-9870,7878,9867,9868,-7874,7908,7820,7883,-7883,7948,7848,7855,-7855,9887,9888,7802,-7886,7310,7694,7695,7717,-7310,7848,7318,7326,-7856,7812,9883,9884,-7854,7818,7996,7997,-7888,7802,7804,7886,-7886,7698,7868,7867,-7806,7868,7698,7697,-7870,7325,7312,7693,-7693,7911,7943,7942,-7913,7915,7916,7911,-7913,7913,7919,7918,-7915,7915,7918,7919,-7917,7914,7935,7917,-7914,7315,7307,7306,7798,7941,-7315,7322,7937,7317,7316,-7324,7920,7922,7932,-7922,7809,7852,7851,-7811,9883,7948,7854,-9885,7936,7925, 7924,-7924,7851,8000,7811,-7811,7866,7865,7803,-7815,7814,7998,7999,-7867,7867,7999,7998,-7806,7887,7886,7804,-7819,7712,7715,7714,7882,-7798,7862,7861,7797,-7818,7883,7820,7819,-7885,9885,9886,7801,-7865,7815,7700,-7889,7815,7996,7995,-7829,7925,7936,7947,-7947,7946,7947,9882,-9882,9881,9882,7929,-7927,7926,7929,7928,-7928,7931,7930,7927,-7929,7930,7931,7932,-7923,7585,7716,7718,-7321,6872,7506,7909,-6876,7896,7895,9898,-7825,9899,9900,7980,-7828,7897,7992,7991,-7875,7828,7995,7994,-7878,7824,7991,7992,-7897,7895,7894,7829,-9899,7889,7705,7847,-7861,7689,7688,7731,-7737,7738,7703,-7740,9890,7834,7833,-9890,7835,7838,7837,-7837,7836,7994,7995,-7836,7838,7833,7834,-7838,9863,7823,9892,-9894,7821,7822,9864,-9866,9865,9866,7993,-7822,7823,9863,9864,-7823,7829,7894,9894,-9896,7990,7989,7979,-7876,7980,7989,7990,-7828,7981,7841,9896,-9898,7995,7996,7818,-7836,7835,7818,7804,-7839,7838,7804,7802,-7834,7833,7802,9888,-9890,7827,7990,7991,-7825,7824,9898,9899,-7828,9896,7841,7829,-9896,7871,7872,7858,-7858,7690,7691,7815,-7829,7933,7917,7935,-7935,7310,7313,-7695,7717,7319,-7310,7718,7710,7327,-7322,7718,7321,-7321,7853,7852,7809,-7813,7865,7864,7801,-7804,9899,7841,7981,-9901,7839,7843,7730,-7728,7844,7729,7730,-7844,7729,7844,7845,-7729,7728,7845,7880,-7880,7879,7880,7846,-7733,7846,7986,7985,-7733,7796,7860,7847,-7796,7795,7847,7830,-7795,7703,7704,-7740,7862,7817,7816,-7864,7761,7760,-7850,7760,7766,-7850,7311,7813,7850,-7325,7694,7313,7325,-7693,7687,7828,7877,7731,-7689,7592,7761,7849,-7594,7593,7849,7767,7646,-7648,7773,7739,7704,-7772,7689,7736,7757,7761,-7592,7697,7693,-7870,7850,7867,7868,-7325,7866,7999,8000,-7852,7865,7866,7851,-7853,7864,7865,7852,-7854,9884,9885,7864,-7854,7862,7863,7854,-7856,7305,7855,-7327,7892,7871,7857,-7894,7856,7870,9861,-9863,7831,7832,9890,-9890,7819,7831,9889,-9889,7884,7819,9888,-9888,7856,9862,9893,-9893,7893,7857,9895,-9895,7831,7819,7820,-7861,7796,7832,7831,-7861,7711,7712,7797,-7862,7711,7861,7305,-7305,7308,7707,-7305,7708,7707,-7309,7328,7709,7708,-7309,7869,7324,-7869,7693, 7312,7324,-7870,7982,7858,7872,-7984,7832,7796,9873,-9875,7832,9874,9891,-9891,7834,9890,9891,-9876,7837,7834,9875,-9877,7836,7837,9876,-9878,7994,7836,9877,-9879,7875,7839,7727,-7875,7979,7978,7839,-7876,7730,7899,7898,-7728,9880,7734,7735,-7732,7874,7727,7898,-7898,7882,7883,7817,-7798,7817,7883,7884,-7817,9886,7816,7884,-9888,9886,9887,7885,-7802,7886,7803,7801,-7886,7814,7803,7886,-7888,7887,7997,7998,-7815,7714,7713,7908,-7883,7701,7805,-7889,7705,7889,-7707,7891,7984,9860,-9860,7898,7899,9869,-9869,7768,7770,-7902,7744,7902,-7744,7768,7901,-7905,7904,7905,7765,-7769,7906,7763,7765,-7906,7763,7906,7907,-7763,7702,7830,-7848,7706,7889,7908,-7714,7705,7702,-7848,7701,7698,-7806,7699,7701,-7889,7700,7699,-7889,7815,7691,-7701,7755,7760,7761,-7758,7767,7704,-7647,7912,7942,7941,-7945,7911,7916,6878,-6875,6876,7919,7913,-6764,7914,7918,7938,-7807,7943,6877,6875,-7910,7916,7919,6876,-6879,7808,7935,7914,-7807,7917,6764,6763,-7914,7915,7807,7938,-7919,7915,7912,7944,-7808,7317,7920,7921,-7312,7311,7921,7932,-7814,7848,7936,7923,-7319,7318,7923,7924,-7307,7306,7924,7925,-7799,7947,7936,7848,-7949,9882,7947,7948,-9884,7929,9882,9883,-7813,7800,7939,7926,-7928,7929,7809,7810,-7929,7927,7930,7799,-7801,7810,7811,7931,-7929,7922,7920,7317,7937,7799,-7931,7813,7932,7931,-7812,6882,7933,7934,-7323,7934,7935,7808,-7323,7933,6882,6764,-7918,7925,7946,7945,-7799,7421,7420,7547,7910,-7910,7319,7717,7716,-7586,7850,7813,7811,-8001,7999,7867,7850,-8001,7888,7805,7998,-7998,7815,7888,7997,-7997,9879,7877,7994,-9879,9867,7878,7993,-9867,7990,7875,7874,-7992,9881,7926,7939,-7941,7910,7314,7941,-7943,7943,7909,7910,-7943,7940,7945,7946,-9882,7799,7950,7949,-7801,7940,7951,7952,-7946,7953,7944,7941,-7955,7955,7956,7807,-7945,7957,7958,7808,-7807,7959,7806,7938,-7961,7961,7938,7807,-7963,7800,7963,7964,-7940,7954,7941,7798,-7966,7965,7798,7945,-7967,7322,7967,7968,-7938,7937,7968,7969,-7800,7808,7970,7967,-7323,7939,7972,7971,-7941,7314,7910,-7548,7506,7421,-7910,7968,7967,7970,-7970,7969,7970,7808,-7800,7799,7808,7958,-7951,7950,7958, 7957,-7950,7949,7957,7806,-7801,7800,7806,7959,-7964,7963,7959,7960,-7965,7964,7960,7938,-7940,7939,7938,7961,-7973,7972,7961,7962,-7972,7971,7962,7807,-7941,7940,7807,7956,-7952,7951,7956,7955,-7953,7952,7955,7944,-7946,7945,7944,7953,-7967,7966,7953,7954,-7966,7973,7974,7881,-7783,7974,7975,7781,-7882,7976,8001,7781,-7976,8001,7976,7977,-7781,7779,7780,7977,-7979,7876,7779,7978,-7980,7979,7989,7988,-7877,7825,7988,7989,-7981,7980,9900,7826,-7826,7981,7842,7826,-9901,7842,7981,9897,-7841,7973,7987,7986,-7847,7870,7784,9860,-9862,7985,7871,7892,-7985,7986,7872,7871,-7986,7983,7872,7986,-7988,7902,7903,-7744,7745,7890,7903,-7903,7828,7687,-7691,7860,7820,7908,-7890,7305,7862,-7856,8002,8003,8004,-8006,8007,8003,8014,-8016,8016,8492,8521,-8521,7781,8074,8523,-7882,8075,8001,7780,-8077,8022,8014,8003,-8003,8023,8024,8014,-8023,8074,7781,8001,-8076,8024,8023,8011,-8014,8018,8021,8076,-8078,8482,8489,8024,-8014,8015,8481,8480,-8018,8519,8530,8016,-8521,8526,8525,8482,-8014,8031,8032,8033,-8009,8509,8508,8010,-8038,8483,8525,8526,-8028,8038,8039,8005,-8005,8039,8038,8040,-8042,8004,8006,8042,-8039,8043,8032,8044,-8046,8010,8508,8025,-8031,8029,8031,8008,-8031,8047,8046,8002,-8006,8050,8049,8012,-8012,8016,8064,8243,-8493,8009,8054,8053,-8038,8046,8065,8022,-8003,8065,8051,8023,-8023,8051,8050,8011,-8024,8049,8529,8528,-8013,8066,8063,8029,-8029,8052,8055,8032,-8032,8053,8510,8509,-8038,8057,8047,8005,-8040,8056,8059,8040,-8070,8058,8057,8039,-8042,8060,8056,8069,-8043,8048,8060,8042,-8007,8055,8062,8044,-8033,8068,8061,8043,-8046,8063,8052,8031,-8030,8059,8058,8041,-8041,8062,8068,8045,-8045,8070,8035,8034,-8072,8004,8522,-8007,8526,8013,8011,8012,-8528,8009,8037,-8011,8024,8481,8015,-8015,7782,7881,8523,8073,-8073,8027,8526,8527,-8026,8015,8017,-8008,8069,8040,-8039,8042,8069,-8039,8033,8032,-8044,8009,8033,-8044,8009,8043,8061,-8055,8026,8484,8483,-8028,8072,8070,8071,7783,-7783,8073,8035,8070,-8073,8073,8523,8524,-8036,8074,8019,8524,-8524,8075,8020,8019,-8075,8020,8075,8076,-8022,8077,8076,7780,-7780,8081,8080,8486, -8486,8485,8532,8533,-8082,8078,8079,8084,-8086,8472,8083,8488,-8488,8090,8474,8473,-8083,8085,8530,8531,-8079,8036,8514,-8514,8085,8084,8087,-8087,8474,8090,8089,-8476,8086,8016,8530,-8086,8514,8036,8067,-8516,8493,8094,8093,-8495,8080,8081,7825,-7827,7783,8071,8511,-7860,7840,8083,8472,-7843,8016,8086,8095,-8065,8095,8086,8087,-8097,8475,8089,8097,-8477,8515,8067,8494,-8094,8098,8101,8100,-8100,8396,8391,8392,-8396,8102,8105,8104,-8104,8399,8400,8397,-8399,8106,8109,8108,-8108,8403,8404,8401,-8403,8110,8113,8112,-8112,8113,8115,8114,-8113,8117,8112,8114,-8117,8118,8101,8120,-8120,8121,8124,8123,-8123,8125,8128,8127,-8127,8129,8130,8127,-8129,8104,8105,8132,-8132,8133,8136,8135,-8135,8135,8136,8138,-8138,8139,8142,8141,-8141,8143,8144,8142,-8140,8145,8148,8147,-8147,8149,8152,8151,-8151,8153,8147,8148,-8155,8155,8151,8152,-8157,8157,8160,8159,-8159,8161,8162,8160,-8158,8162,8164,8163,-8161,8163,8165,8159,-8161,8166,8167,8165,-8164,8164,8168,8166,-8164,8169,8166,8168,-8171,8171,8167,8166,-8170,8172,8175,8174,-8174,8173,8174,8177,-8177,8181,8180,8179,-8179,8174,8183,8182,-8178,8499,8185,8184,-8501,8503,8502,8187,-8187,8188,8191,8190,-8190,8192,8195,8194,-8194,8194,8135,8137,-8194,8196,8156,8152,-8198,8198,8197,8152,-8150,8199,8202,8201,-8201,8203,8206,8205,-8205,8207,8210,8209,-8209,8208,8209,8212,-8212,8213,8216,8215,-8215,8217,8213,8219,-8219,8220,8223,8222,-8222,8224,8221,8188,-8226,8226,8227,8224,-8226,8529,8049,8228,-8227,8226,8228,8229,-8228,8230,8050,-8052,8230,8231,8211,-8233,8211,8231,8233,-8209,8223,8235,8234,-8223,8236,8232,8211,-8213,8237,8240,8239,-8239,8046,8243,8242,-8242,8245,8243,8064,8095,-8245,8246,8242,8243,-8246,8476,8097,8248,-8478,8479,8478,8251,-8251,8251,8254,8253,-8251,8097,8093,8094,-8249,8497,8257,8185,-8499,8258,8239,8240,-8260,8260,8255,8256,-8262,8219,8213,8214,-8263,8259,8264,8263,-8259,8265,8207,8208,-8234,8151,8155,8154,-8149,8266,8267,8204,-8206,8205,8269,8268,-8267,8216,8271,8270,-8216,8272,8273,8234,-8272,8274,8143,8139,-8276,8275,8139,8140,-8277,8277,8131,8279,-8279,8281,8406,8405, -8281,8150,8151,8148,-8146,8066,8225,8282,-8092,8282,8496,8495,-8092,8119,8283,8284,-8119,8285,8287,8207,-8287,8288,8290,8238,-8290,8291,8288,8289,-8293,8292,8294,8293,-8292,8194,8295,8134,-8136,8296,8295,8194,-8196,8501,8298,8187,-8503,8175,8297,8183,-8175,8120,8115,8165,-8168,8159,8165,8115,-8114,8158,8159,8113,-8111,8146,8106,8107,-8146,8145,8107,8299,-8151,8150,8299,8300,-8150,8149,8300,8103,-8199,8140,8141,8104,-8132,8276,8140,8131,-8278,8137,8138,8301,-8130,8137,8129,8128,-8194,8192,8193,8128,-8126,8302,8504,8503,-8187,8177,8182,8124,-8122,8176,8177,8121,-8284,8119,8120,8167,-8172,8143,8274,8303,-8219,8144,8143,8218,-8220,8196,8144,8219,-8263,8156,8203,8204,-8156,8155,8204,8267,-8155,8161,8287,8304,-8163,8168,8164,8290,-8289,8170,8168,8288,-8292,8291,8293,8172,-8171,8178,8179,8297,-8176,8501,8500,8184,-8299,8296,8305,8191,-8296,8134,8295,8191,-8222,8411,8414,8415,-8411,8417,8418,8419,-8417,8170,8172,8173,-8170,8169,8173,8176,-8172,8196,8197,8142,-8145,8197,8198,8141,-8143,8206,8214,8215,-8270,8228,8230,8232,-8230,8236,8307,8229,-8233,8244,8247,8252,-8246,8245,8252,8249,-8247,8203,8262,8214,-8207,8308,8309,8260,-8262,8270,8310,8269,-8216,8420,8422,8423,-8422,8311,8181,8178,-8313,8103,8104,8141,-8199,8171,8176,8283,-8120,8196,8262,8203,-8157,8172,8312,8178,-8176,8284,8315,8314,-8314,8319,8117,8116,-8321,8321,8324,8323,-8323,8341,8346,8343,-8345,8325,8328,8327,-8327,8359,8357,8313,-8315,8330,8321,8322,-8330,8329,8322,8323,-8318,8324,8126,8317,-8324,8126,8324,8321,-8331,8338,8333,8334,-8338,8331,8334,8333,-8333,8469,8331,8332,-8471,8122,8123,8336,-8336,8335,8338,8337,-8123,8341,8344,8340,-8340,8342,8340,8344,-8344,8345,8342,8343,-8347,8339,8345,8346,-8342,8328,8347,8318,-8328,8325,8348,8347,-8329,8326,8320,8348,-8326,8327,8318,8320,-8327,8349,8356,8350,-8115,8116,8114,8350,-8352,8352,8116,8351,-8354,8354,8352,8353,-8356,8349,8354,8355,-8357,8118,8284,8313,-8358,8357,8100,8101,-8119,8329,8331,8469,-8331,8329,8347,8342,8345,8334,-8332,8342,8347,8348,-8341,8340,8348,-8353,8334,8345,-8359,8353,8351,8350,-8357,8359,8314, 8315,-8359,8358,8361,8360,-8360,8359,8360,8100,-8358,8339,8354,8361,8358,-8346,8361,8098,8099,-8361,8361,8354,8349,-8099,8363,8429,8430,-8363,8365,8432,8433,-8365,8438,8436,8435,-8438,8367,8102,8394,-8367,8370,8385,8369,-8369,8371,8374,8373,-8373,8375,8388,8376,-8317,8377,8393,8427,-8379,8386,8387,8390,-8382,8319,8389,8384,-8118,8368,8375,8130,-8414,8385,8373,8387,-8387,8369,8382,8389,-8389,8367,8371,8279,-8133,8377,8378,-8380,8109,8381,8390,-8109,8384,8383,8434,-8112,8373,8385,-8371,8370,8372,-8374,8378,8426,8431,-8381,8391,8394,8393,-8393,8377,8395,8392,-8394,8395,8377,8366,-8397,8366,8394,8391,-8397,8385,8386,8398,-8398,8399,8398,8386,-8383,8369,8400,8399,-8383,8369,8385,8397,-8401,8388,8389,8402,-8402,8403,8402,8389,-8320,8376,8404,8403,-8320,8376,8388,8401,-8405,8281,8280,8379,-8388,8406,8281,8387,-8374,8405,8406,8373,-8375,8405,8374,8379,-8281,8407,8132,8105,-8409,8105,8102,8409,-8409,8367,8306,8409,-8103,8407,8306,8367,-8133,8410,8413,8412,-8412,8412,8370,8414,-8412,8370,8368,8415,-8415,8410,8415,8368,-8414,8416,8419,8130,-8376,8316,8417,8416,-8376,8316,8127,8418,-8418,8418,8127,8130,-8420,8420,8421,8278,-8280,8371,8422,8420,-8280,8422,8371,8372,-8424,8421,8423,8372,-8279,8424,8427,8426,-8426,8426,8378,8428,-8426,8378,8427,8424,-8429,8429,8431,8108,-8431,8362,8430,8108,-8391,8363,8380,8431,-8430,8109,8434,8433,-8433,8364,8433,8434,-8384,8381,8365,8364,-8384,8432,8365,8381,-8110,8435,8436,8111,-8113,8117,8437,8435,-8113,8437,8117,8384,-8439,8436,8438,8384,-8112,8318,8317,8316,-8377,8126,8127,8316,-8318,8413,8130,8129,-8302,8394,8103,8300,-8394,8427,8300,8299,-8427,8431,8299,8107,-8109,8439,8440,8153,-8202,8210,8207,8287,-8442,8209,8210,8443,-8443,8236,8212,8445,-8445,8235,8444,8446,-8235,8224,8447,8220,-8222,8307,8447,8227,-8230,8235,8223,8447,-8308,8444,8235,8307,-8237,8448,8199,8450,-8450,8445,8448,8449,-8452,8444,8445,8451,-8447,8452,8454,8273,-8454,8452,8221,8222,-8455,8133,8274,8275,-8137,8276,8138,8136,-8276,8277,8301,8138,-8277,8218,8303,8272,-8218,8133,8134,8221,-8453,8273,8272,8303,-8454,8271,8216,8217, -8273,8271,8234,8446,-8271,8270,8446,8451,-8311,8451,8449,8268,-8311,8274,8133,8453,-8304,8266,8268,8449,-8451,8267,8266,8450,-8201,8154,8267,8200,-8154,8147,8153,8440,-8456,8146,8147,8455,-8457,8457,8456,8158,-8111,8109,8106,8457,-8435,8455,8440,8161,-8158,8455,8157,8158,-8457,8456,8457,8106,-8147,8434,8457,8110,-8112,8439,8443,8210,-8442,8442,8445,8212,-8210,8458,8202,8199,-8449,8442,8443,8202,-8459,8439,8201,8202,-8444,8440,8439,8441,-8162,8301,8277,8412,-8414,8162,8304,8459,-8165,8460,8461,8237,-8239,8240,8237,8241,-8243,8259,8240,8242,-8247,8246,8249,8264,-8260,8264,8249,8462,-8264,8294,8464,8463,-8294,8465,8286,8461,-8461,8237,8461,8286,-8242,8186,8192,8125,-8303,8195,8192,8186,-8188,8298,8296,8195,-8188,8296,8298,8184,-8467,8467,8468,8185,-8258,8189,8282,8225,-8189,8309,8479,8250,-8261,8250,8253,8255,-8261,8497,8496,8282,-8258,8257,8282,8189,-8468,8468,8467,8189,-8191,8312,8463,8464,-8312,8464,8462,8308,-8312,8332,8333,8338,8335,8336,-8471,8356,8355,-8354,8099,8100,-8361,8408,8409,8306,-8408,8424,8425,-8429,8362,8390,8380,-8364,8098,8349,8114,-8102,8122,8337,8315,-8285,8505,8126,-8331,8336,8123,8469,-8471,8120,8101,8114,-8116,8284,8283,8121,-8123,8468,8190,8305,-8467,8185,8468,8466,-8185,8261,8256,8180,-8182,8308,8261,8181,-8312,8462,8249,8309,-8309,8263,8462,8464,-8295,8258,8263,8294,-8293,8292,8289,8239,-8259,8460,8238,8290,-8472,8459,8465,8460,-8472,8459,8304,8285,-8466,8505,8504,8302,-8127,8477,8248,8251,-8479,8248,8094,8254,-8252,8095,8096,8247,-8245,8533,7988,7825,-8082,8206,8269,-8206,8213,8217,-8217,8427,8393,-8301,8221,8191,-8189,8233,8231,-8066,8233,8065,-8047,8286,8207,-8266,8268,8269,-8311,8431,8426,-8300,8285,8286,-8466,8471,8290,-8165,8103,8394,-8103,8277,8278,-8413,8131,8132,-8280,8458,8448,-8446,8447,8224,-8228,8220,8447,-8224,8287,8161,-8442,8200,8450,-8200,8452,8453,-8134,8273,8454,-8235,8454,8222,-8235,8200,8201,-8154,8442,8458,-8446,8286,8265,-8242,8463,8172,-8294,8164,8459,-8472,8126,8302,-8126,8305,8296,-8467,8172,8463,-8313,8185,8499,-8499,8239,8289,-8239,8285,8304,-8288,8190,8191,-8306, 8091,8495,-8494,7842,8472,8080,-7827,8080,8472,8487,-8487,8079,8473,8474,-8085,8084,8474,8475,-8088,8087,8475,8476,-8097,8096,8476,8477,-8248,8247,8477,8478,-8253,8249,8252,8478,-8480,8309,8249,-8480,8491,8490,8021,-8019,8489,8020,8021,-8491,8482,8019,8020,-8490,8482,8525,8524,-8020,8035,8524,8525,-8484,8484,8034,8035,-8484,8484,8513,8512,-8035,8078,8531,8532,-8486,8485,8486,8079,-8079,8487,8473,8079,-8487,8488,8082,8473,-8488,8481,8490,8491,-8481,8489,8490,8481,-8025,8006,8522,8521,-8493,8492,8243,8048,-8007,8265,8233,8046,-8242,8051,8065,8231,-8231,8049,8050,-8229,8091,8493,8494,-8093,8495,8254,8094,-8494,8496,8253,8254,-8496,8255,8253,8496,-8498,8255,8497,8498,-8257,8499,8180,8256,-8499,8180,8499,8500,-8180,8297,8179,8500,-8502,8297,8501,8502,-8184,8182,8183,8502,-8504,8504,8124,8182,-8504,8123,8124,8504,-8506,8123,8505,8330,-8470,8054,8507,8506,-8054,8053,8506,8088,-8511,8055,8061,8068,-8063,8055,8052,8507,8054,-8062,8066,8506,8507,8052,-8064,8067,8088,8092,-8495,8506,8066,-8089,8092,8066,-8092,8060,8047,8057,-8057,8057,8058,8059,-8057,8047,8060,8048,8243,-8047,8066,8092,-8089,8025,8508,8026,-8028,8036,8026,8508,-8510,8509,8510,8067,-8037,8088,8067,-8511,8028,8029,-8031,8030,8008,-8011,8025,8527,8528,8028,-8031,8012,8528,-8528,8071,8034,8512,-8512,8511,8083,7840,-7860,8083,8511,8512,-8489,8488,8512,8513,-8083,8082,8513,8514,-8091,8090,8514,8515,-8090,8089,8515,8093,-8098,8077,7779,7876,-8517,8077,8516,8517,-8019,8518,8491,8018,-8518,8519,8480,8491,-8519,8520,8017,8480,-8520,8521,8007,8017,-8521,8522,8003,8007,-8522,8004,8003,-8523,8528,8529,8066,-8029,8226,8225,8066,-8530,7876,7988,8533,-8517,8517,8516,8533,-8533,8531,8518,8517,-8533,8519,8518,8531,-8531,8484,8026,8036,-8514,8379,8374,8366,-8378,8370,8412,8278,-8373,8009,8010,8008,-8034,8354,8339,8340,-8353,8390,8387,8379,-8381,8380,8379,-8379,8374,8371,8367,-8367,8388,8375,8368,-8370,8382,8383,8384,-8390,8382,8386,8381,-8384,8318,8376,8319,-8321,8116,8352,8348,-8321,8329,8317,8318,-8348,8334,8358,8315,-8338,8230,8228,-8051,7545,7376,-7484,7558,7559,-7503,8534, 8537,8536,-8536,8539,8547,8546,-8536,8548,9053,9054,-9026,9069,9078,9056,-8608,8608,8609,9068,-8603,8554,8534,8535,-8547,8555,8554,8546,-8557,8607,8608,8602,-9070,8556,8545,8543,-8556,8550,8610,8609,-8554,9015,8545,8556,-9023,8547,8549,9013,-9015,9052,9053,8548,-9064,9059,8545,9015,-9059,8563,8540,8565,-8565,9042,8569,8542,-9042,9016,8559,9059,-9059,8570,8536,8537,-8572,8571,8573,8572,-8571,8536,8570,8574,-8539,8575,8577,8576,-8565,8542,8562,8557,-9042,8561,8562,8540,-8564,8579,8537,8534,-8579,8582,8543,8544,-8582,8548,9025,8776,-8597,8541,8569,8585,-8587,8578,8534,8554,-8598,8597,8554,8555,-8584,8583,8555,8543,-8583,8581,8544,9061,-9063,8598,8560,8561,-8596,8584,8563,8564,-8588,8585,8569,9042,-9044,8589,8571,8537,-8580,8588,8601,8572,-8592,8590,8573,8571,-8590,8592,8574,8601,-8589,8580,8538,8574,-8593,8587,8564,8576,-8595,8600,8577,8575,-8594,8595,8561,8563,-8585,8591,8572,8573,-8591,8594,8576,8577,-8601,8603,8604,8566,-8568,8536,8538,-9056,9059,9060,8544,8543,-8546,8541,8542,-8570,8556,8546,8547,-9015,9070,8605,8606,9056,-9079,8559,8557,9060,-9060,8547,8539,-8550,8601,8570,-8573,8574,8570,-8602,8565,8575,-8565,8541,8575,-8566,8541,8586,8593,-8576,8558,8559,9016,-9018,8605,9070,9071,8604,-8604,8606,8605,8603,-8568,8606,8567,9057,-9057,8607,9056,9057,-8552,8608,8607,8551,-8553,8552,8553,8609,-8609,8610,9067,9068,-8610,8614,9018,9019,-8614,9018,8614,9066,-9066,8611,8618,8617,-8613,9005,9020,9021,-8617,8623,8615,9006,-9008,8618,8611,9064,-9064,8568,9046,-9048,8618,8619,8620,-8618,9007,9008,8622,-8624,8619,8618,9063,-8549,9047,9048,8599,-8569,9026,9027,8626,-8628,8613,9073,9072,-8615,9074,9075,9005,-8617,8548,8596,8628,-8620,8628,8629,8620,-8620,9008,9009,8630,-8623,9048,8626,9027,-8600,8631,8632,8633,-8635,8929,8928,8925,-8925,8635,8636,8637,-8639,8932,8931,8930,-8934,8639,8640,8641,-8643,8936,8935,8934,-8938,8643,8644,8645,-8647,8646,8645,8647,-8649,8650,8649,8647,-8646,8651,8652,8653,-8635,8654,8655,8656,-8658,8658,8659,8660,-8662,8662,8661,8660,-8664,8637,8664,8665,-8639,8666,8667,8668,-8670,8668,8670,8671,-8670, 8672,8673,8674,-8676,8676,8672,8675,-8678,8678,8679,8680,-8682,8682,8683,8684,-8686,8686,8687,8681,-8681,8688,8689,8685,-8685,8690,8691,8692,-8694,8694,8690,8693,-8696,8695,8693,8696,-8698,8696,8693,8692,-8699,8699,8696,8698,-8701,8697,8696,8699,-8702,8702,8703,8701,-8700,8704,8702,8699,-8701,8705,8706,8707,-8709,8706,8709,8710,-8708,8714,8711,8712,-8714,8707,8710,8715,-8717,9032,9033,8717,-8719,9036,8719,8720,-9036,8721,8722,8723,-8725,8725,8726,8727,-8729,8727,8726,8670,-8669,8729,8730,8685,-8690,8731,8682,8685,-8731,8732,8733,8734,-8736,8736,8737,8738,-8740,8740,8741,8742,-8744,8741,8744,8745,-8743,8746,8747,8748,-8750,8750,8751,8752,-8747,8753,8754,8755,-8757,8757,8758,8721,-8755,8759,8758,8757,-8761,9062,8759,8761,-8582,8759,8760,8762,-8762,8763,8583,-8583,8763,8765,8744,-8765,8744,8741,8766,-8765,8756,8755,8767,-8769,8769,8745,8744,-8766,8770,8771,8772,-8774,8578,8774,8775,-8777,8778,8777,8628,8596,-8777,8779,8778,8776,-8776,9009,9010,8781,-8631,9012,8783,8784,-9012,8784,8783,8786,-8788,8630,8781,8627,-8627,9030,9031,8718,-8791,8791,8792,8773,-8773,8793,8794,8789,-8789,8752,8795,8747,-8747,8792,8791,8796,-8798,8798,8766,8741,-8741,8684,8681,8687,-8689,8799,8738,8737,-8801,8738,8799,8801,-8803,8749,8748,8803,-8805,8805,8804,8767,-8807,8807,8808,8672,-8677,8808,8809,8673,-8673,8810,8811,8812,-8665,8814,8813,8938,-8940,8683,8678,8681,-8685,8598,8624,8815,-8759,8815,8624,9028,-9030,8652,8651,8817,-8817,8818,8819,8740,-8821,8821,8822,8771,-8824,8824,8825,8822,-8822,8825,8824,8826,-8828,8727,8668,8667,-8829,8829,8728,8727,-8829,9034,9035,8720,-8832,8708,8707,8716,-8831,8653,8700,8698,-8649,8692,8646,8648,-8699,8691,8643,8646,-8693,8679,8678,8640,-8640,8678,8683,8832,-8641,8683,8682,8833,-8833,8682,8731,8636,-8834,8673,8664,8637,-8675,8809,8810,8664,-8674,8670,8662,8834,-8672,8670,8726,8661,-8663,8725,8658,8661,-8727,8835,8719,9036,-9038,8710,8654,8657,-8716,8709,8816,8654,-8711,8652,8704,8700,-8654,8676,8751,8836,-8808,8677,8752,8751,-8677,8729,8795,8752,-8678,8689,8688,8737,-8737,8688,8687,8800,-8738,8694,8695,8837, -8821,8701,8821,8823,-8698,8703,8824,8821,-8702,8824,8703,8705,-8827,8711,8708,8830,-8713,9034,8831,8717,-9034,8829,8828,8724,-8839,8667,8754,8724,-8829,8944,8943,8948,-8948,8950,8949,8952,-8952,8703,8702,8706,-8706,8702,8704,8709,-8707,8729,8677,8675,-8731,8730,8675,8674,-8732,8739,8802,8748,-8748,8761,8762,8765,-8764,8769,8765,8762,-8841,8777,8778,8785,-8781,8778,8779,8782,-8786,8736,8739,8747,-8796,8841,8794,8793,-8843,8803,8748,8802,-8844,8953,8954,8956,-8956,8844,8845,8711,-8715,8636,8731,8674,-8638,8704,8652,8816,-8710,8729,8689,8736,-8796,8705,8708,8711,-8846,8817,8846,8847,-8849,8852,8853,8649,-8651,8854,8855,8856,-8858,8874,8877,8876,-8880,8858,8859,8860,-8862,8892,8847,8846,-8891,8863,8862,8855,-8855,8862,8850,8856,-8856,8857,8856,8850,-8660,8659,8863,8854,-8858,8871,8870,8867,-8867,8864,8865,8866,-8868,9002,9003,8865,-8865,8655,8868,8869,-8657,8868,8655,8870,-8872,8874,8872,8873,-8878,8875,8876,8877,-8874,8878,8879,8876,-8876,8872,8874,8879,-8879,8861,8860,8851,-8881,8858,8861,8880,-8882,8859,8858,8881,-8854,8860,8859,8853,-8852,8882,8647,8883,-8890,8649,8884,8883,-8648,8885,8886,8884,-8650,8887,8888,8886,-8886,8882,8889,8888,-8888,8651,8890,8846,-8818,8890,8651,8634,-8634,8862,8863,9002,-8865,8862,8864,8867,8878,8875,-8881,8875,8873,8881,-8881,8873,8885,-8882,8867,8891,-8879,8886,8889,8883,-8885,8892,8891,8848,-8848,8891,8892,8893,-8895,8892,8890,8633,-8894,8872,8878,8891,8894,-8888,8894,8893,8632,-8632,8894,8631,8882,-8888,8896,8895,8963,-8963,8898,8897,8966,-8966,8971,8970,8968,-8970,8900,8899,8927,-8636,8903,8901,8902,-8919,8904,8905,8906,-8908,8908,8849,8909,-8922,8910,8911,8960,-8927,8919,8914,8923,-8921,8852,8650,8917,-8923,8901,8946,8663,-8909,8918,8919,8920,-8907,8902,8921,8922,-8916,8900,8665,8812,-8905,8910,8912,-8912,8642,8641,8923,-8915,8917,8644,8967,-8917,8906,8903,-8919,8903,8906,-8906,8911,8913,8964,-8960,8924,8925,8926,-8928,8910,8926,8925,-8929,8928,8929,8899,-8911,8899,8929,8924,-8928,8918,8930,8931,-8920,8932,8915,8919,-8932,8902,8915,8932,-8934,8902,8933,8930,-8919,8921,8934,8935,-8923, 8936,8852,8922,-8936,8909,8852,8936,-8938,8909,8937,8934,-8922,8814,8920,8912,-8814,8939,8906,8920,-8815,8938,8907,8906,-8940,8938,8813,8912,-8908,8940,8941,8638,-8666,8638,8941,8942,-8636,8900,8635,8942,-8840,8940,8665,8900,-8840,8943,8944,8945,-8947,8945,8944,8947,-8904,8903,8947,8948,-8902,8943,8946,8901,-8949,8949,8908,8663,-8953,8849,8908,8949,-8951,8849,8950,8951,-8661,8951,8952,8663,-8661,8953,8812,8811,-8955,8904,8812,8953,-8956,8955,8956,8905,-8905,8954,8811,8905,-8957,8957,8958,8959,-8961,8959,8958,8961,-8912,8911,8961,8957,-8961,8962,8963,8641,-8965,8895,8923,8641,-8964,8896,8962,8964,-8914,8642,8965,8966,-8968,8897,8916,8967,-8967,8914,8916,8897,-8899,8965,8642,8914,-8899,8968,8645,8644,-8970,8650,8645,8968,-8971,8970,8971,8917,-8651,8969,8644,8917,-8972,8851,8909,8849,-8851,8659,8850,8849,-8661,8946,8834,8662,-8664,8927,8926,8833,-8637,8960,8959,8832,-8834,8964,8641,8640,-8833,8972,8734,8686,-8974,8743,8974,8820,-8741,8742,8975,8976,-8744,8769,8977,8978,-8746,8768,8767,8979,-8978,8757,8754,8753,-8981,8840,8762,8760,-8981,8768,8840,8980,-8757,8977,8769,8840,-8769,8981,8982,8983,-8733,8978,8984,8982,-8982,8977,8979,8984,-8979,8985,8986,8806,-8988,8985,8987,8755,-8755,8666,8669,8808,-8808,8809,8808,8669,-8672,8810,8809,8671,-8835,8751,8750,8805,-8837,8666,8985,8754,-8668,8806,8986,8836,-8806,8804,8805,8750,-8750,8804,8803,8979,-8768,8803,8843,8984,-8980,8984,8843,8801,-8983,8807,8836,8986,-8667,8799,8983,8982,-8802,8800,8733,8983,-8800,8687,8686,8733,-8801,8680,8988,8973,-8687,8679,8989,8988,-8681,8990,8643,8691,-8990,8642,8967,8990,-8640,8988,8690,8694,-8974,8988,8989,8691,-8691,8989,8679,8639,-8991,8967,8644,8643,-8991,8972,8974,8743,-8977,8975,8742,8745,-8979,8991,8981,8732,-8736,8975,8991,8735,-8977,8972,8976,8735,-8735,8973,8694,8974,-8973,8834,8946,8945,-8811,8695,8697,8992,-8838,8993,8771,8770,-8995,8773,8775,8774,-8771,8792,8779,8775,-8774,8779,8792,8797,-8783,8797,8796,8995,-8783,8827,8826,8996,-8998,8998,8993,8994,-8820,8770,8774,8819,-8995,8719,8835,8658,-8726,8728,8720,8719,-8726,8831,8720,8728, -8830,8829,8999,8717,-8832,9000,8790,8718,-9002,8722,8721,8758,-8816,8842,8793,8783,-9013,8783,8793,8788,-8787,9030,8790,8815,-9030,8790,9000,8722,-8816,9001,8723,8722,-9001,8845,8844,8997,-8997,8997,8844,8841,-8996,8865,9003,8869,8868,8871,-8867,8889,8886,-8889,8632,8893,-8634,8941,8940,8839,-8943,8957,8961,-8959,8895,8896,8913,-8924,8631,8634,8647,-8883,8655,8817,8848,-8871,9038,8863,-8660,8869,9003,9002,-8657,8653,8648,8647,-8635,8817,8655,8654,-8817,9001,8999,8838,-8724,8718,8717,8999,-9002,8794,8714,8713,-8790,8841,8844,8714,-8795,8995,8841,8842,-8783,8796,8827,8997,-8996,8791,8825,8827,-8797,8825,8791,8772,-8823,8993,9004,8823,-8772,8992,9004,8993,-8999,8992,8998,8818,-8838,9038,8659,8835,-9038,9010,9011,8784,-8782,8781,8784,8787,-8628,8628,8777,8780,-8630,9066,8614,9072,-9080,8739,8738,-8803,8746,8749,-8751,8960,8833,-8927,8754,8721,-8725,8766,8597,-8765,8766,8578,-8598,8819,8798,-8741,8801,8843,-8803,8964,8832,-8960,8818,8998,-8820,9004,8697,-8824,8636,8635,-8928,8810,8945,-8812,8664,8812,-8666,8991,8978,-8982,8980,8760,-8758,8753,8756,-8981,8820,8974,-8695,8733,8732,-8984,8985,8666,-8987,8806,8767,-8988,8987,8767,-8756,8733,8686,-8735,8975,8978,-8992,8819,8774,-8799,8996,8826,-8706,8697,9004,-8993,8659,8658,-8836,8838,8999,-8830,8705,8845,-8997,8718,9031,-9033,8772,8771,-8823,8818,8820,-8838,8723,8838,-8725,8624,9026,-9029,9075,9073,8613,-9006,8613,9019,9020,-9006,8612,8617,9007,-9007,8617,8620,9008,-9008,8620,8629,9009,-9009,8629,8780,9010,-9010,8780,8785,9011,-9011,8782,9012,9011,-8786,8842,9012,-8783,9024,8550,8553,-9024,9022,9023,8553,-8553,9015,9022,8552,-8552,9015,8551,9057,-9059,8567,9016,9058,-9058,9017,9016,8567,-8567,9017,8566,9045,-9047,8611,9018,9065,-9065,9018,8611,8612,-9020,9020,9019,8612,-9007,9021,9020,9006,-8616,9014,9013,9024,-9024,9022,8556,9014,-9024,8538,9025,9054,-9056,9025,8538,8580,-8777,8798,8774,8578,-8767,8583,8763,8764,-8598,8581,8761,-8583,8624,8625,9027,-9027,9028,9026,8627,-8788,9029,9028,8787,-8787,8788,9030,9029,-8787,8788,8789,9031,-9031,9032,9031,8789,-8714,8713,8712,9033, -9033,8830,9034,9033,-8713,8830,8716,9035,-9035,8715,9036,9035,-8717,9037,9036,8715,-8658,8656,9038,9037,-8658,8656,9002,8863,-9039,8586,8585,9039,-9041,8585,9043,8621,-9040,8587,8594,8600,-8594,8587,8593,8586,9040,-8585,8598,8595,8584,9040,-9040,8599,9027,8625,-8622,9039,8621,-8599,8625,8624,-8599,8592,8588,8589,-8580,8589,8588,8591,-8591,8579,8578,8776,8580,-8593,8598,8621,-8626,8557,8559,8558,-9042,8568,9042,9041,-8559,9042,8568,8599,-9044,8621,9043,-8600,8560,8562,-8562,8562,8542,-8541,8557,8562,8560,9061,-9061,8544,9060,-9062,8604,9044,9045,-8567,9044,9076,9074,-8617,8616,9021,9045,-9045,9021,8615,9046,-9046,8615,8623,9047,-9047,8623,8622,9048,-9048,8622,8630,8626,-9049,8610,9049,9077,-9068,8610,8550,9050,-9050,9051,9050,8550,-9025,9052,9051,9024,-9014,9053,9052,9013,-8550,9054,9053,8549,-8540,9055,9054,8539,-8536,8536,9055,-8536,9061,8560,8598,-9063,8759,9062,8598,-8759,9077,9049,9066,-9080,9050,9065,9066,-9050,9064,9065,9050,-9052,9052,9063,9064,-9052,9017,9046,8568,-8559,8912,8910,8899,-8908,8903,8905,8811,-8946,8541,8565,8540,-8543,8887,8885,8873,-8873,8923,8913,8912,-8921,8913,8911,-8913,8907,8899,8900,-8905,8921,8902,8901,-8909,8915,8922,8917,-8917,8915,8916,8914,-8920,8851,8853,8852,-8910,8649,8853,8881,-8886,8862,8880,8851,-8851,8867,8870,8848,-8892,8763,8582,-8762,9080,9081,9082,-9084,9081,9084,9085,-9083,9084,9086,9263,-9086,9088,9084,9081,-9090,9090,9086,9084,-9089,9091,9087,9086,-9091,9094,9092,9093,-9134,9095,9096,9088,-9090,9096,9097,9090,-9089,9097,9098,9091,-9091,9099,9100,9096,-9096,9100,9101,9097,-9097,9101,9102,9098,-9098,9093,9092,9104,-9131,9083,9105,9092,-9081,9089,9081,9080,-9095,9095,9089,9094,-9134,9106,9107,9108,-9110,9110,9111,9109,-9109,9112,9113,9111,-9111,9114,9115,9113,-9113,9116,9117,9109,-9112,9118,9116,9111,-9114,9119,9118,9113,-9116,9120,9121,9122,-9124,9116,9124,9125,-9118,9118,9126,9124,-9117,9119,9127,9126,-9119,9124,9100,9099,-9126,9126,9101,9100,-9125,9127,9102,9101,-9127,9128,9122,9121,-9133,9122,9129,9107,-9107,9117,9123,9106,-9110,9117,9125,9120,-9124,9120,9220,9103, -9122,9093,9130,9131,-9104,9131,9132,9121,-9104,9103,9220,9133,-9094,9134,9135,9136,-9138,9138,9139,9137,-9137,9140,9141,9139,-9139,9142,9143,9137,-9140,9144,9142,9139,-9142,9091,9144,9141,-9088,9145,9146,9147,-9149,9142,9149,9150,-9144,9144,9151,9149,-9143,9091,9098,9151,-9145,9149,9152,9153,-9151,9151,9154,9152,-9150,9098,9102,9154,-9152,9156,9147,9146,-9179,9135,9134,9147,-9158,9143,9148,9134,-9138,9143,9150,9145,-9149,9158,9159,9160,-9162,9162,9164,9165,-9164,9164,9115,9114,-9166,9166,9162,9159,-9168,9168,9164,9162,-9167,9119,9115,9164,-9169,9169,9170,9171,-9173,9173,9174,9166,-9168,9174,9175,9168,-9167,9175,9127,9119,-9169,9153,9152,9174,-9174,9152,9154,9175,-9175,9154,9102,9127,-9176,9170,9169,9176,-9181,9169,9158,9161,-9178,9167,9159,9158,-9173,9171,9173,9167,-9173,9179,9178,9146,-9156,9170,9180,9179,-9156,9082,9182,9181,-9084,9085,9183,9182,-9083,9181,9184,9105,-9084,9184,9185,9104,-9106,9107,9187,9186,-9109,9108,9186,9188,-9111,9110,9188,9189,-9113,9112,9189,9190,-9115,9129,9191,9187,-9108,9128,9192,9191,-9130,9130,9194,9193,-9132,9104,9185,9194,-9131,9193,9195,9132,-9132,9195,9192,9128,-9133,9135,9196,9340,-9137,9136,9340,9197,-9139,9138,9197,9198,-9141,9157,9199,9196,-9136,9156,9200,9199,-9158,9160,9202,9201,-9162,9163,9203,9202,-9161,9165,9204,9203,-9164,9114,9190,9204,-9166,9201,9205,9177,-9162,9205,9206,9176,-9178,9208,9207,9178,-9180,9207,9200,9156,-9179,9180,9209,9208,-9180,9176,9206,9209,-9181,9080,9092,-9095,9092,9105,-9105,9106,9123,-9123,9122,9128,-9130,9134,9148,-9148,9147,9156,-9158,9158,9169,-9173,9169,9177,-9177,9218,9219,9215,-9218,9211,9213,9214,-9216,9214,9213,9210,9204,-9217,9204,9190,9217,-9217,9190,9189,9218,-9218,9218,9189,9212,-9220,9212,9211,9215,-9220,9215,9214,9216,-9218,9220,9120,9125,-9100,9133,9220,9099,-9096,9155,9146,9145,-9222,9221,9145,9150,-9154,9171,9221,9153,-9174,9155,9221,9171,-9171,9159,9162,9163,-9161,9232,9231,9281,-9231,9407,9408,9229,-9400,9290,9234,9249,-9290,9239,9240,-9251,9416,9246,9223,-9227,9292,9231,9232,-9292,9241,9238,9232,9230,-9244,9236,9235,-9229,9293, 9237,9231,-9293,9251,9254,9253,-9253,9236,9251,9252,-9236,9255,9256,9249,-9235,9253,9254,9256,-9256,9257,9258,9254,-9252,9259,9257,9251,-9237,9256,9260,9248,-9250,9254,9258,9260,-9257,9257,9262,9261,-9259,9287,9288,9248,-9261,9286,9287,9260,-9259,9266,9245,9247,-9265,9267,9266,9264,-9266,9360,9269,-9269,9261,9271,9284,-9286,9266,9272,9244,-9246,9267,9270,9272,-9267,9268,9273,9271,9261,-9263,9198,9273,9268,-9270,9283,9274,9242,-9283,9284,9271,9274,-9284,9240,9239,9276,-9276,9277,9238,9241,-9279,9275,9276,9280,-9280,9280,9277,9278,-9280,9277,9276,9239,-9239,9261,9285,9286,-9259,9273,9275,9279,-9272,9278,9241,9242,-9275,9279,9278,9274,-9272,9255,9234,9235,-9253,9227,9415,9416,-9227,9246,9407,9399,-9224,9250,9291,9232,9238,-9240,9225,9418,9246,-9417,9243,9282,9242,-9242,9289,9249,9248,-9289,9231,9237,9383,-9282,9408,9831,9832,-9230,9830,9233,9230,-9282,9243,9230,9233,-9420,9395,9228,9394,-9397,9255,9252,-9254,9276,9277,-9281,9822,9823,9347,-9355,9821,9822,9354,-9356,9355,9356,9820,-9822,9356,9400,9819,-9821,9400,9357,9818,-9820,9070,9818,9834,-9072,9244,9282,9243,-9420,9417,9283,9282,9244,-9273,9420,9284,9283,-9418,9285,9284,9420,-9422,9286,9285,9421,-9423,9422,9423,9287,-9287,9247,9288,9287,9423,-9265,9225,9289,9288,-9248,9290,9289,9225,-9225,9290,9224,9391,-9391,9397,9390,9391,-9399,9203,9204,9374,-9376,9376,9295,-9368,9208,9401,9328,-9208,9791,9366,9367,-9360,9203,9375,9299,-9203,9402,9918,9919,-9328,9305,9189,-9189,9359,9367,9368,-9321,9306,9915,9366,-9792,9303,9403,9404,-9309,9192,9309,9380,-9382,9381,9382,-9192,9362,9186,9187,-9312,9426,9427,9785,-9787,9430,9427,9426,-9432,9428,9429,9433,-9435,9430,9431,9434,-9434,9429,9428,9432,-9451,9317,9313,9784,9296,9297,-9299,9352,9353,9318,-9781,9914,9319,-9365,9451,9437,9438,-9440,9364,9319,9321,-9849,9917,9325,9377,-9917,9380,9309,9846,-9848,9910,9911,9845,-9845,9401,9402,9327,-9329,9324,9405,-9195,9324,9337,9843,-9845,9439,9789,9790,-9452,9789,9440,9441,-9791,9442,9445,9441,-9441,9442,9443,9444,-9446,9447,9444,9443,-9447,9436,9447,9446,-9436,9850,9330,9213,-9212,9374,9210, 9213,-9332,6854,6857,9424,-9634,9906,9907,9841,-9841,9387,9922,9923,-9370,9903,9904,9838,-9838,9901,9902,9836,-9836,9413,9392,9837,-9839,9337,9395,9842,-9844,9332,9333,9388,-9390,9411,9412,9335,-9340,9406,9373,9358,-9200,9183,9236,9228,-9183,9340,9291,9250,-9198,9920,9921,9342,-9342,9908,9909,9843,-9843,9346,9345,9344,-9344,9369,9923,9924,-9371,9906,9840,9839,-9906,9333,9332,9334,-9339,9410,9925,9926,-9372,9836,9393,9824,-9836,9826,9827,9348,-9350,9910,9844,9843,-9910,9346,9343,9303,-9309,9327,9919,9920,-9342,9903,9837,9836,-9903,9336,9349,9339,-9336,9385,9371,9372,-9387,9184,9337,9324,-9186,9448,9449,9450,-9433,9305,9188,-9313,9212,9304,-9330,9213,9330,-9332,9846,9912,9379,-9848,9825,9826,9349,-9337,9347,9222,9227,-9355,9355,9354,9227,-9227,9226,9223,9356,-9356,9223,9399,9400,-9357,9399,9229,9357,-9401,9357,9229,9832,-9834,9293,9292,9358,-9374,9292,9291,9340,-9359,9197,9250,9240,-9199,9376,9377,9325,-9327,9263,9360,-9263,9262,9360,-9269,9310,9361,9363,-9324,9188,9186,9362,-9313,9181,9182,9228,9395,-9338,9086,9087,9360,-9264,9087,9141,9140,9269,-9361,9275,9273,9198,-9241,9183,9085,9263,9259,-9237,9191,9382,-9188,9363,9361,9381,-9381,9379,9364,9848,-9848,9364,9379,9913,-9915,9377,9366,9915,-9917,9376,9367,9366,-9378,9295,9368,-9368,9409,9410,9371,-9386,9369,9370,9384,-9384,9348,9372,9371,-9927,9372,9348,9827,-9829,9341,9373,9328,-9328,9293,9373,9341,-9343,9294,9205,-9202,9206,9205,9376,-9327,9382,9381,-9362,9187,9382,9361,-9312,9369,9383,9237,-9388,9828,9829,9386,-9373,9237,9293,9342,-9388,9342,9921,9922,-9388,9389,9388,9344,-9346,9908,9842,9841,-9908,9234,9394,9228,-9236,9393,9392,9222,-9348,9824,9393,9347,-9824,9227,9222,9414,-9416,9290,9390,9394,-9235,9394,9390,9397,-9397,9392,9413,9414,-9223,9206,9326,9401,9208,-9210,9326,9325,9402,-9402,9917,9918,9402,-9326,9404,9403,9302,-9308,9845,9911,9912,-9847,9195,9405,-9310,9199,9200,-9407,9233,9408,9407,-9420,9830,9831,9408,-9234,9384,9370,9410,-9410,9370,9924,9925,-9411,9338,9334,9412,-9412,9838,9904,9905,-9840,9398,9413,9838,-9840,9413,9398,9391,-9415,9414,9391,9224, -9416,9416,9415,9224,-9226,9270,9417,-9273,9245,9418,9225,-9248,9245,9244,-9419,9270,9420,-9418,9420,9270,9267,-9422,9422,9421,9267,-9266,9265,9264,9423,-9423,9196,9358,-9341,9199,9358,-9197,9195,9309,-9193,9193,9405,-9196,9194,9405,-9194,9324,9194,-9186,9257,9259,9263,-9263,9269,9140,-9199,9427,9787,9784,-9786,9426,6856,6861,-9432,6858,6859,9428,-9435,9429,9314,9781,-9434,9786,9424,6857,-6861,9431,6861,6858,-9435,9316,9314,9429,-9451,9432,9428,6859,-6863,9430,9433,9781,-9316,9430,9315,9787,-9428,9318,9310,9436,-9436,9436,9310,9323,9321,-9448,9359,9320,9437,-9452,9320,9297,9438,-9438,9297,9296,9439,-9439,9790,9791,9359,-9452,9441,9306,9791,-9791,9442,9440,9783,-9783,9441,9445,9322,-9307,9301,9443,9442,-9783,9445,9444,9319,-9323,9443,9301,9300,-9447,9319,9444,9447,-9322,9446,9300,9780,9318,-9436,6866,9352,9449,-9449,9449,9352,9316,-9451,9448,9432,6862,-6867,9439,9296,9788,-9790,9630,9455,9456,-9454,9455,9457,9458,-9457,9457,9459,9460,-9459,9617,9461,9462,-9464,9464,9645,9646,-9648,9644,9645,9464,-9469,9659,9643,-9471,9452,9476,9475,-9623,9477,9621,9623,-9625,9477,9478,9620,-9622,9478,9479,9619,-9621,9461,9480,9481,-9463,9632,9467,9521,-9521,9483,9468,9464,-9483,9484,9470,9468,-9484,9653,9659,9470,-9655,9476,9487,9486,-9476,9488,9477,9624,-9626,9478,9477,9488,-9490,9479,9478,9489,-9575,9480,9573,9572,-9482,9631,9632,9520,-9570,9483,9482,9568,-9568,9484,9483,9567,-9567,9487,9490,9491,-9487,9493,9488,9625,-9627,9496,9574,9489,-9523,9586,9631,9569,-9502,9584,9565,9655,-9657,9564,9565,9584,-9584,9627,9665,9492,9493,-9627,9613,9614,9496,-9498,9587,9588,9858,-9858,9857,9858,9604,-9606,9577,9578,9500,-9502,9651,9641,9642,-9651,9656,9657,9504,-9585,9584,9504,9505,-9584,9612,9662,-9665,9494,9507,9508,-9500,9595,9591,9589,-9591,9609,9608,9591,-9596,9509,9500,9578,-9580,9640,9641,9651,-9653,9658,9511,9504,-9658,9512,9505,9504,-9512,9514,9515,9508,-9508,9595,9590,9593,-9593,9609,9595,9592,-9595,9509,9579,9580,-9519,9510,9509,9518,-9520,9640,9652,-9640,9615,9616,9479,-9575,9614,9615,9574,-9497,9500,9509,9510,-9503,9501,9500,9502, -9587,9522,9523,9497,-9497,9497,9669,9764,-9663,9493,9668,9523,-9523,9489,9488,9493,-9523,9597,9596,9855,-9855,9854,9855,9603,-9603,9577,9501,9569,-9571,9585,9566,9567,-9638,9310,9524,9525,-9362,9311,9526,9527,-9363,9312,9362,9527,-9529,9312,9528,9529,-9306,9329,9304,9530,-9532,9374,9331,9532,-9534,9375,9374,9533,-9535,9299,9375,9534,-9536,9299,9535,9536,-9295,9368,9295,9537,-9540,9310,9318,9538,-9525,9320,9368,9539,-9542,9538,9318,9353,-9541,9297,9320,9541,9563,-9299,9317,9298,9563,-9583,9317,9582,-9544,9317,9543,9545,-9314,9546,6855,6630,-6637,6867,6864,9548,-9548,6606,6609,9549,-9563,6609,6637,9550,-9550,6638,9551,9581,-6605,6638,6639,9552,-9552,6592,9638,9552,-6640,9553,9424,9425,-9817,9305,9529,9530,-9305,9331,9330,9554,-9556,9454,9525,9524,-9453,9527,9526,9453,-9457,9528,9527,9456,-9459,9529,9528,9458,-9461,9462,9531,9530,-9464,9466,9661,9532,-9556,9469,9534,9533,-9466,9471,9535,9534,-9470,9472,9536,9535,-9472,9539,9537,9474,-9474,9524,9538,9476,-9453,9481,9556,9531,-9463,9485,9541,9539,-9474,9476,9538,9540,-9488,9556,9481,9572,-9572,9563,9541,9485,-9565,9487,9540,9542,-9491,9759,9762,9763,-9761,9543,9582,9583,-9506,9776,9777,9544,-9507,9545,9543,9505,-9513,9778,9779,9546,-9514,9514,9547,9548,-9516,9561,9562,9549,-9517,9516,9549,9550,-9518,9580,9581,9551,-9519,9518,9551,9552,-9520,9638,9639,9519,-9553,9553,9816,9817,-9577,9530,9529,9460,-9464,9554,9557,9520,-9522,9555,9554,9521,-9467,9353,9352,9542,-9541,9495,9494,9499,-9499,9600,9598,9853,-9853,9329,9531,9851,-9851,9479,9616,9618,-9620,9467,9466,-9522,9532,9331,-9556,9573,9495,9498,-9573,9572,9498,9558,-9572,9498,9499,9559,-9559,9560,9559,9499,-9509,9560,9508,9515,-9562,9515,9548,9562,-9562,6864,6606,9562,-9549,9570,9569,9520,-9558,9853,9854,9602,-9600,9598,9597,9854,-9854,9526,9525,9454,-9454,9361,9525,9526,-9312,9536,9537,9295,-9295,9474,9537,9536,-9473,9575,9503,9636,-9636,9607,9606,9608,-9610,9607,9609,9594,-9611,9517,9550,9581,-9581,6604,9581,9550,-6638,9564,9583,9582,-9564,9558,9559,9588,-9588,9588,9559,9849,-9859,9604,9858,9849,-9579,9559,9560,9590,-9590, 9591,9849,9559,-9590,9590,9560,9561,-9594,9561,9516,9592,-9594,9516,9517,9594,-9593,9596,9558,9856,-9856,9855,9856,9577,-9604,9597,9571,9558,-9597,9598,9556,9571,-9598,9531,9556,9598,-9601,9531,9600,9852,-9852,9557,9554,9601,-9600,9602,9570,9557,-9600,9602,9603,9577,-9571,9578,9577,9605,-9605,9857,9605,9577,-9857,9579,9578,9606,-9608,9608,9606,9578,-9850,9579,9607,9610,-9581,9517,9580,9610,-9595,9852,9853,9599,-9602,9851,9852,9601,-9555,9850,9851,9554,-9331,9777,6635,-9545,9611,9775,9776,-9507,9507,9612,9672,-9515,9507,9494,9613,-9613,9494,9495,9614,-9614,9573,9615,9614,-9496,9573,9480,9616,-9616,9617,9618,-9462,9619,9618,9617,-9460,9620,9619,9459,-9458,9621,9620,9457,-9456,9622,9623,-9631,9624,9623,9622,-9476,9624,9475,9486,-9626,9625,9486,9491,-9627,9627,9761,9758,-9758,9775,9611,9628,-9775,9778,9611,-9507,6636,9629,9513,-9547,9630,9623,9621,-9456,9461,9618,9616,-9481,9459,9617,9463,-9461,9642,9568,9649,-9651,9568,9482,9648,-9650,9482,9464,9647,-9649,9485,9653,9565,-9565,9576,9634,9633,-9554,9575,9635,9634,-9577,9585,9637,9636,-9504,9634,9639,9638,-9634,9635,9640,9639,-9635,9636,9641,9640,-9636,9642,9641,9636,-9638,9637,9567,9568,-9643,9469,9644,9643,-9472,9645,9644,9469,-9466,9646,9661,9466,-9468,9647,9646,-9468,9648,9647,9467,-9633,9649,9648,9632,-9632,9650,9649,9631,-9587,9651,9650,9586,-9503,9652,9651,9502,-9511,9519,9639,9652,-9511,9654,9484,9566,-9656,9655,9566,9585,-9657,9585,9503,9657,-9657,9575,9658,9657,-9504,9511,9576,9817,-9513,9654,9470,-9485,9653,9660,-9660,9660,9472,9471,9643,-9660,9629,9628,-9612,9758,9761,9762,-9760,9452,9622,9630,9453,-9455,9565,9653,9654,-9656,9473,9660,9653,-9486,9472,9660,9473,-9475,9646,9645,9465,-9662,9465,9533,9532,-9662,9628,9667,9773,-9775,9667,9670,-9672,6636,6868,-9630,9493,9492,-9669,9612,9613,9497,-9663,9523,9669,-9498,6868,9670,9667,9628,-9630,6865,6610,9678,-9688,9688,6640,6869,-9734,9753,9754,9676,-9718,9705,9696,9695,-9705,9772,9681,9703,-9772,9700,9685,9705,-9705,9713,9682,9703,-9712,9718,9683,9693,-9717,9694,9677,9720,-9720,9663,9720,9677,-9665,9699,9679,9706, -9722,9706,9687,9722,-9722,9750,9712,9680,-9750,9702,9766,9767,-9684,9693,9768,9769,-9709,9707,9674,9730,-9730,9730,9674,9732,-9732,9672,9664,9677,-9757,6865,9687,9706,-9352,9749,9680,9670,-6869,9689,9668,9492,-9708,9689,9673,9523,-9669,9752,9753,9717,-9716,9773,9667,9681,-9773,9669,9523,9673,-9693,9662,9764,9765,-9685,9694,9676,9754,-9756,9694,9755,9756,-9678,9696,9686,9697,-9696,9690,9737,9738,-9692,9736,9737,9690,-9710,9688,9733,9734,-9699,9698,9734,9735,-9702,9750,9751,9675,-9713,9703,9682,9770,-9772,9701,9735,9736,-9710,9706,9679,9350,-9352,9492,9665,9674,-9708,9770,9682,9708,-9770,9671,9670,9680,-9711,9671,9710,9681,-9668,9703,9681,9710,-9712,9710,9680,9712,-9712,9712,9675,9713,-9712,9708,9682,9713,-9715,9713,9675,9715,-9715,9714,9716,9693,-9709,9715,9717,9716,-9715,9717,9676,9718,-9717,9720,9684,9702,-9720,9702,9683,9718,-9720,9718,9676,9694,-9720,9663,9662,9684,-9721,9705,9685,9699,-9722,9687,9678,9723,-9723,9723,9686,9696,-9723,9721,9722,9696,-9706,9752,9715,9675,-9752,9724,9691,9738,-9740,9739,9740,9725,-9725,9514,9725,9740,-9548,9684,9765,9766,-9703,9692,9673,9727,-9727,9683,9767,9768,-9694,9727,9673,9689,-9729,9728,9689,9707,-9730,9732,9674,9665,-9667,9733,6869,6863,-9742,9734,9733,9741,-9743,9735,9734,9742,-9744,9736,9735,9743,-9745,9744,9745,9737,-9737,9738,9737,9745,-9747,9739,9738,9746,-9748,9747,9748,9740,-9740,9547,9740,9748,-6871,6863,9350,9679,-9742,9742,9741,9679,-9700,9743,9742,9699,9685,-9701,9744,9743,9700,-9705,9704,9695,9745,-9745,9746,9745,9695,-9698,9747,9746,9697,9686,-9724,9723,9678,9748,-9748,9748,9678,6610,-6871,9688,9749,6868,-6641,9698,9750,9749,-9689,9698,9701,9751,-9751,9709,9752,9751,-9702,9709,9690,9753,-9753,9690,9691,9754,-9754,9755,9754,9691,-9725,9756,9755,9724,-9726,9514,9672,9756,-9726,9612,9664,-9673,9627,9757,9666,-9666,6631,9760,9763,-6867,9761,9627,9626,-9492,9491,9490,9762,-9762,9542,9763,9762,-9491,6866,9763,9542,-9353,9764,9669,9692,-9766,9766,9765,9692,-9727,9767,9766,9726,-9728,9768,9767,9727,-9729,9769,9768,9728,-9730,9730,9770,9769,-9730,9771,9770,9730,-9732,9732, 9772,9771,-9732,9666,9773,9772,-9733,9774,9773,9666,-9758,9758,9775,9774,-9758,9775,9758,9759,-9777,9759,9760,9777,-9777,6870,6867,-9548,9329,9850,9211,-9213,9299,9294,9201,-9203,9638,6871,6854,-9634,9506,9544,9779,-9779,6683,9779,9544,-6636,9363,9848,9321,-9324,9847,9848,9363,-9381,9405,9845,9846,-9310,9324,9844,9845,-9406,9396,9841,9842,-9396,9840,9841,9396,-9398,9398,9839,9840,-9398,9836,9837,9392,-9394,9425,9785,9784,-9314,9786,9785,9425,-9425,9789,9788,9783,-9441,9300,9301,9792,-9794,9783,9788,9795,-9795,9796,9797,9784,-9788,9798,9787,9315,-9800,9800,9314,9316,-9802,9802,9803,9781,-9315,9804,9805,9315,-9782,9301,9782,9807,-9807,9797,9808,9296,-9785,9808,9809,9788,-9297,9352,9780,9811,-9811,9780,9300,9812,-9812,9316,9352,9810,-9814,9782,9783,9814,-9816,9313,9816,-9426,9817,9816,9545,-9513,9313,9545,-9817,9633,9424,-9554,9811,9812,9813,-9811,9812,9300,9316,-9814,9300,9793,9801,-9317,9793,9792,9800,-9802,9792,9301,9314,-9801,9301,9806,9802,-9315,9806,9807,9803,-9803,9807,9782,9781,-9804,9782,9815,9804,-9782,9815,9814,9805,-9805,9814,9783,9315,-9806,9783,9794,9799,-9316,9794,9795,9798,-9800,9795,9788,9787,-9799,9788,9809,9796,-9788,9809,9808,9797,-9797,9818,9070,9078,-9820,9819,9078,9069,-9821,9821,9820,9069,-8603,8602,9068,9822,-9822,9067,9823,9822,-9069,9077,9824,9823,-9068,9824,9077,9079,-9836,9072,9901,9835,-9080,9073,9075,9826,-9826,9075,9074,9827,-9827,9827,9074,9076,-9829,9818,9357,9833,-9835,9383,9384,9830,-9282,9831,9830,9384,-9410,9832,9831,9409,-9386,9833,9832,9385,-9387,9829,9834,9833,-9387,9829,9071,-9835,9849,9591,-9609,9587,9857,9856,-9559,9418,9244,-9420,9246,9418,9419,-9408,9337,9184,-9182,9328,9373,9406,9200,-9208,9629,9611,-9514,9644,9468,9470,-9644,9638,6592,-6872,9658,9575,-9577,9658,9576,-9512,9294,9295,9376,-9206,9374,9204,-9211,9305,9304,9212,-9190,9381,9191,-9193,6646,6645,-6857,6646,6856,-6861,9786,6860,6856,-9427,6806,6877,-6875,6806,6807,-6878,7911,6874,6877,-7944,7783,7983,-7988,7859,7982,7983,-7784,9076,9829,-9829,9076,9071,-9830,9044,8604,9071,-9077,9778,9513,-9612,6631,9777,-9761,6631, 6635,-9778,6683,6855,9546,-9780,9662,9663,-9665,7891,9859,7903,-7891,7892,9861,9860,-7985,7893,9862,9861,-7893,9862,7893,9894,-9894,9863,9893,9894,-7895,7895,9864,9863,-7895,9865,9864,7895,-7897,7992,9866,9865,-7897,7897,9867,9866,-7993,7898,9868,9867,-7898,7900,9870,9869,-7900,7746,9870,7902,-7745,7902,9870,7900,-7746,7740,7742,7733,-9872,9872,9871,7733,-7785,9873,9872,7784,-7871,7856,9874,9873,-7871,9874,7856,9892,-9892,9892,7823,9875,-9892,7822,9876,9875,-7824,9877,9876,7822,-7822,7821,7993,9878,-9878,7993,7878,9879,-9879,9880,9879,7878,-7874,7793,7734,9880,-7874,7737,9871,7794,-7739,7737,7740,-9872,7794,7830,7703,-7739,7863,9885,9884,-7855,9886,9885,7863,-7817,7858,9896,9895,-7858,7982,9897,9896,-7859,7840,9897,7982,-7860,7929,7812,-7810,9899,9898,7829,-7842,9901,9072,9073,-9826,9336,9902,9901,-9826,9903,9902,9336,-9336,9904,9903,9335,-9413,9905,9904,9412,-9335,9906,9905,9334,-9333,9907,9906,9332,-9390,9908,9907,9389,-9346,9909,9908,9345,-9347,9910,9909,9346,-9309,9911,9910,9308,-9405,9912,9911,9404,-9308,9913,9379,9912,-9308,9378,9913,9307,-9303,9914,9913,9378,-9366,9322,9319,-9915,9322,9914,-9366,7327,7710,7709,-7329,7711,7304,-7708,7305,7861,-7863,9322,9365,9915,-9307,9916,9915,9365,-9379,9917,9916,9378,-9303,9918,9917,9302,-9404,9919,9918,9403,-9304,9343,9920,9919,-9304,9921,9920,9343,-9345,9922,9921,9344,-9389,9923,9922,9388,-9334,9338,9924,9923,-9334,9925,9924,9338,-9412,9339,9926,9925,-9412,9348,9926,9339,-9350,5882,5884,5877,-5881,9927,9928,9929,-9931,9930,9929,9931,-9933,9932,9931,9933,-9935,9934,9933,9935,-9937,9936,9935,9937,-9939,9938,9937,9939,-9941,9940,9939,9941,-9943,9942,9941,9943,-9945,9944,9943,9945,-9947,9946,9945,9947,-9949,9948,9947,9949,-9951,9950,9949,9951,-9953,9952,9951,9953,-9955,9954,9953,9955,-9957,9956,9955,9957,-9959,9958,9957,9928,-9928,9960,9929,-9929,9960,9931,-9930,9960,9933,-9932,9960,9935,-9934,9960,9937,-9936,9960,9939,-9938,9960,9941,-9940,9960,9943,-9942,9960,9945,-9944,9960,9947,-9946,9960,9949,-9948,9960,9951,-9950,9960,9953,-9952,9960,9955,-9954,9960,9957,-9956,9960,9928, -9958,9961,9962,9963,-9965,9965,9966,9967,-9969,9969,9970,9971,-9973,9973,9974,9975,-9977,9977,9978,9979,-9981,9981,9966,9982,-9984,9984,9985,9986,-9988,9988,9985,9989,-9991,9991,9992,9993,-9983,9994,9976,9975,-9996,9995,9996,9978,-9995,9997,9998,9964,-9964,9999,10000,10001,-10003,9944,9990,9989,-9943,9942,9989,9984,-9941,9940,9984,9987,-9939,9987,10003,9936,-9939,9952,10002,10001,-9951,9950,10001,10004,-9949,9948,10004,10005,-9947,9946,10005,9990,-9945,10007,9962,9961,10006,-10011,9972,9986,9985,-9975,9970,9965,9968,-9972,9969,9972,9974,-9974,10007,10008,9968,-9968,9971,10008,9986,-9973,9981,9963,9962,-9968,9975,9988,10009,-9996,9996,9995,10009,-10001,9983,9997,9963,-9982,9998,9997,9993,-9993,9974,9985,9988,-9976,9979,10000,9999,-9981,10004,10001,10000,-10010,9988,9990,10005,-10010,10006,10003,9986,-10011,10011,9959,9973,-9977,10011,9976,9994,-10013,10012,9994,9978,-9978,10013,10014,9961,-9965,10015,10016,10017,-10019,10019,10020,10021,-10023,10023,10024,10025,-10027,10027,10028,9977,-9981,10029,10030,10031,-10019,10032,10033,10034,-10036,10036,10035,10037,-10039,9991,10031,10039,-9993,10040,10041,10023,-10027,10028,10042,10041,-10041,10043,10013,9964,-9999,10044,10045,9999,-10003,9927,9930,10036,-10039,9930,9932,10032,-10037,9932,9934,10033,-10033,9936,10003,10033,-9935,9952,9954,10044,-10003,9954,9956,10046,-10045,9956,9958,10047,-10047,9958,9927,10038,-10048,10006,9961,10014,10048,-10052,10035,10034,10020,-10025,10022,10021,10016,-10016,10024,10020,10019,-10026,10016,10049,10048,-10018,10021,10020,10034,-10050,10029,10017,10014,-10014,10023,10041,10050,-10038,10050,10041,10042,-10046,10030,10029,10013,-10044,10039,10043,9998,-9993,10024,10023,10037,-10036,10027,9980,9999,-10046,10045,10044,10046,-10051,10037,10050,10047,-10039,10034,10003,10006,-10052,10011,10026,10025,-9960,10040,10026,10011,-10013,10028,10040,10012,-9978,10008,10010,-9987,9981,9967,-9967,10008,10007,-10011,9971,9968,-10009,9962,10007,-9968,9983,9993,-9998,10000,9979,-9997,9982,9993,-9984,9978,9996,-9980,9989,9985,-9985,10004,10009,-10006,9987, 9986,-10004,10049,10034,-10052,10029,10018,-10018,10049,10051,-10049,10021,10049,-10017,10014,10017,-10049,10030,10043,-10040,10045,10042,-10028,10031,10030,-10040,10027,10042,-10029,10036,10032,-10036,10046,10047,-10051,10033,10003,-10035,10052,10053,10054,-10056,10056,10057,10058,-10060,10060,10061,10062,-10064,10061,10060,10064,-10066,10066,10067,10068,-10070,10070,10071,10072,-10074,10074,10055,10054,-10076,10076,10077,10078,-10080,10080,10081,10079,-10083,10083,10084,10067,-10067,10073,10072,10085,-10087,10075,10054,10087,-10089,10089,10090,10091,-10093,10086,10085,10093,-10095,10095,10096,10097,-10099,10099,10100,10101,-10103,10103,10104,10105,-10107,10107,10108,10109,-10111,10111,10112,10113,-10115,10115,10116,10117,-10119,10119,10120,10121,-10123,10123,10124,10125,-10127,10127,10128,10129,-10131,10131,10130,10129,-10133,10133,10134,10135,-10117,10117,10116,10135,-10137,10122,10121,10137,-10139,10125,10139,10140,-10142,10126,10125,10141,-10143,10143,10126,10142,-10145,10134,10145,10146,-10136,10136,10135,10146,-10148,10138,10137,10148,-10150,10141,10140,10150,-10152,10152,10153,10154,-10156,10147,10146,10156,-10158,10149,10148,10158,-10160,10150,10160,10161,-10152,10162,10151,10161,-10164,10164,10162,10163,-10166,10166,10164,10165,-10168,10159,10158,10168,-10170,10160,10170,10171,-10162,10163,10161,10171,-10173,10165,10163,10172,-10174,10167,10165,10173,-10175,10175,10176,10177,-10179,10179,10177,10180,-10182,10181,10180,10182,-10184,10184,10183,10182,-10186,10186,10107,10110,-10188,10188,10186,10187,-10190,10190,10191,10108,-10108,10192,10190,10107,-10187,10193,10192,10186,-10189,10153,10188,10189,-10195,10195,10196,10191,-10191,10128,10197,10192,-10194,10190,10192,10197,-10196,10152,10193,10188,-10154,10129,10128,10193,-10153,10198,10197,10199,-10201,10127,10199,10197,-10129,10201,10202,10196,-10196,10203,10075,10088,-10205,10205,10206,10207,-10209,10209,10210,10211,-10213,10071,10213,10214,-10073,10072,10214,10215,-10086,10155,10132,10129,-10153,10216,10194,10167,-10175,10217,10209,10212,-10219,10219,10220, 10221,-10223,10223,10224,10225,-10227,10227,10228,10229,-10231,10228,10231,10232,-10230,10233,10234,10235,-10237,10100,10237,10238,-10102,10226,10225,10239,-10241,10136,10137,10121,-10118,10147,10148,10137,-10137,10157,10158,10148,-10148,10241,10168,10158,-10158,10242,10243,10244,-10246,10246,10091,10090,-10248,10105,10245,10244,-10107,10248,10119,10122,-10140,10138,10140,10139,-10123,10149,10150,10140,-10139,10159,10160,10150,-10150,10169,10170,10160,-10160,10221,10217,10249,-10223,10220,10209,10217,-10222,10250,10251,10252,-10254,10254,10255,10256,-10258,10258,10259,10236,-10261,10258,10260,10087,-10262,10262,10263,10264,-10266,10266,10267,10268,-10270,10270,10271,10272,-10274,10065,10064,10200,-10084,10274,10093,10127,-10131,10275,9966,9965,-10277,10277,10176,10276,-9966,10278,10279,10280,-10282,10282,10283,10257,-10112,10112,10111,10257,-10257,9982,9966,10275,-10285,10157,10156,10285,-10242,10156,10145,10286,-10286,10286,10145,10251,-10251,10115,10113,10112,-10288,10255,10288,10289,-10257,10290,10291,10292,-10294,10291,10294,10295,-10293,10295,10294,10296,-10298,10298,10299,10064,-10061,10063,10300,10298,-10061,10056,10059,10301,-10303,10303,10074,10075,-10204,10082,10079,10078,-10305,10093,10084,10199,-10128,10200,10064,10299,-10199,10199,10084,10083,-10201,10299,10305,10306,-10202,10307,10066,10069,-10309,10067,10214,10213,-10069,10215,10214,10067,-10085,10264,10263,10309,-10311,10311,10282,10111,-10115,10281,10311,10114,-10313,10313,10314,10315,-10317,10283,10282,10236,-10260,10279,10236,10282,-10281,10280,10282,10311,-10282,10279,10278,10233,-10237,10052,10058,10057,-10318,10059,10058,10077,-10077,10269,10053,10318,-10267,10319,10320,10269,-10269,10321,10322,10323,-10325,10324,10323,10325,-10327,10327,10328,10326,-10326,10329,10330,10331,-10333,10333,10329,10332,-10335,10335,10254,10336,-10338,10255,10254,10335,-10339,10251,10288,10339,-10253,10259,10258,10329,-10334,10336,10283,10259,-10334,10254,10257,10283,-10337,10340,10267,10341,-10343,10343,10341,10267,-10267,10344,10343,10266,-10319,10317,10057,10345, -10347,10057,10056,10347,-10346,10056,10302,10348,-10348,10349,10350,10327,-10352,10352,10353,10354,-10356,10354,10353,10356,-10358,10358,10359,10323,-10323,10359,10360,10325,-10324,10360,10351,10327,-10326,10293,10292,10352,-10350,10264,10310,10351,-10361,10265,10264,10360,-10360,10361,10265,10359,-10359,10262,10341,10343,-10264,10263,10343,10344,-10310,10291,10290,10346,-10346,10290,10309,10344,-10347,10291,10345,10347,-10295,10294,10347,10348,-10297,10297,10296,10348,-10357,10295,10297,10356,-10354,10292,10295,10353,-10353,10350,10362,10328,-10328,10363,10355,10354,-10365,10364,10354,10357,-10366,10366,10367,10368,-10370,10370,10371,10369,-10369,10372,10373,10374,-10376,10376,10377,10374,-10374,10102,10378,10379,-10315,10380,10381,10314,-10380,10382,10383,10384,-10386,10385,10384,10386,-10388,10387,10386,10388,-10390,10390,10391,10392,-10394,10394,10395,10367,-10367,10089,10366,10369,-10091,10090,10369,10371,-10248,10273,10272,10396,-10376,10101,10238,10374,-10378,10315,10397,10398,-10317,10243,10385,10387,-10245,10244,10387,10389,-10107,10106,10389,10392,-10104,10237,10399,10400,-10271,10246,10271,10401,-10403,10092,10091,10403,-10405,10205,10092,10404,-10406,10406,10407,10408,-10105,10245,10105,10409,-10411,10242,10245,10410,-10412,10412,10242,10411,-10414,10100,10414,10399,-10238,10415,10080,10082,-10417,10120,10119,10417,-10419,10419,10420,10204,-10235,10421,10120,10418,-10423,10119,10248,10423,-10418,10124,10123,10424,-10426,10234,10426,10427,-10420,10428,10303,10203,-10430,10416,10082,10304,-10431,10430,10368,10367,-10417,10428,10370,10368,-10431,10420,10372,10431,-10430,10376,10373,10419,-10428,10432,10379,10378,-10434,10383,10434,10435,-10423,10386,10384,10418,-10418,10423,10388,10386,-10418,10393,10388,10423,-10426,10395,10436,10080,-10416,10102,10377,10376,-10379,10433,10378,10427,-10427,10437,10281,10312,-10439,10435,10439,10437,-10439,10380,10439,10435,-10435,10440,10381,10380,-10435,10441,10316,10398,-10443,10443,10444,10313,-10442,10099,10102,10314,-10314,10444,10445,10099,-10314,10058,10052,10055, -10078,10077,10055,10074,-10079,10271,10246,10247,-10273,10309,10290,10293,-10311,10074,10303,10304,-10079,10053,10052,10317,-10319,10318,10317,10346,-10345,10310,10293,10349,-10352,10247,10371,10396,-10273,10091,10246,10402,-10404,10303,10428,10430,-10305,10088,10087,10260,-10236,10104,10103,10446,-10407,10096,10123,10447,-10098,10447,10123,10126,-10144,10144,10142,10164,-10167,10204,10088,10235,-10235,10185,10448,10449,-10185,10261,10087,10054,-10054,10237,10270,10273,-10239,10330,10320,10319,-10332,10258,10261,10330,-10330,10372,10375,10396,-10432,10393,10392,10389,-10389,10238,10273,10375,-10375,10103,10392,10391,-10447,10271,10270,10400,-10402,10104,10408,10409,-10106,10203,10204,10420,-10430,10124,10425,10423,-10249,10373,10372,10420,-10420,10390,10393,10425,-10425,10125,10124,10248,-10140,10312,10115,10118,-10439,10120,10421,10117,-10122,10412,10450,10243,-10243,10113,10115,10312,-10115,10256,10289,10287,-10113,10288,10255,10338,-10340,10434,10383,10382,-10441,10450,10382,10385,-10244,10412,10413,10442,-10399,10438,10421,10422,-10436,10383,10422,10418,-10385,10289,10288,10134,-10134,10134,10288,10251,-10146,10362,10350,10355,-10364,10350,10349,10352,-10356,10370,10428,10429,-10432,10371,10370,10431,-10397,10287,10133,10116,-10116,10455,10081,10080,-10437,10092,10205,10208,-10090,10436,10395,10394,-10208,10089,10208,10394,-10367,10367,10395,10415,-10417,10224,10223,10227,-10231,10151,10162,10142,-10142,10390,10424,10123,-10452,10452,10453,10348,-10303,10062,10059,10076,-10064,10063,10076,10079,-10301,10300,10079,10081,-10299,10062,10061,10301,-10060,10454,10305,10081,-10456,10302,10301,10308,-10453,10210,10356,10453,-10212,10175,10168,10241,-10457,10179,10170,10169,-10179,10172,10171,10181,-10184,10173,10172,10183,-10185,10174,10173,10184,-10450,10132,10155,10223,-10227,10223,10155,10154,-10228,10227,10154,10216,-10229,10216,10174,10231,-10229,10131,10132,10226,-10241,10181,10171,10170,-10180,10275,10286,10250,-10285,10241,10285,10276,-10457,10285,10286,10275,-10277,10178,10169,10168,-10176,10196,10457,10458, -10192,10098,10108,10191,-10459,10108,10097,10447,-10110,10143,10144,10187,-10111,10166,10167,10194,-10190,10110,10109,10447,-10144,10189,10187,10144,-10167,10202,10459,10457,-10197,10306,10454,10459,-10203,10095,10098,10458,-10461,10096,10461,10462,-10464,10457,10464,10460,-10459,10459,10465,10464,-10458,10454,10455,10465,-10460,10070,10466,10218,-10072,10069,10068,10453,-10453,10218,10212,10213,-10072,10212,10211,10068,-10214,10467,10400,10399,-10469,10411,10410,10469,-10471,10413,10411,10470,-10472,10443,10442,10472,-10474,10468,10399,10414,-10475,10445,10444,10473,-10475,10475,10401,10400,-10468,10442,10413,10471,-10473,10337,10336,10333,-10335,10466,10249,10217,-10219,10267,10340,10476,-10269,10268,10476,10477,-10320,10331,10478,10479,-10333,10332,10479,10480,-10335,10481,10482,10335,-10338,10482,10483,10338,-10336,10484,10485,10252,-10340,10485,10486,10253,-10253,10209,10487,10488,-10211,10220,10219,10487,-10210,10265,10361,10489,-10263,10490,9991,9982,-10285,10262,10489,10342,-10342,10477,10478,10331,-10320,10483,10484,10339,-10339,10486,10490,10284,-10254,10480,10481,10337,-10335,10153,10194,10216,-10155,10448,10232,10231,-10450,10433,10278,10281,-10433,10491,10492,10404,-10404,10493,10491,10403,-10403,10492,10494,10405,-10405,10494,10495,10206,-10406,10496,10460,10464,-10498,10207,10464,-10466,10462,10095,10460,-10497,10493,10402,10401,-10476,10463,10469,10409,-10409,10398,10397,10450,-10413,10450,10397,10440,-10383,10315,10381,10440,-10398,10498,10499,10500,-10502,10502,10503,10504,-10506,10506,10507,10508,-10510,10509,10510,10511,-10507,10512,10513,10514,-10516,10070,10073,10516,-10518,10518,10519,10500,-10500,10520,10521,10522,-10524,10524,10525,10521,-10527,10527,10512,10515,-10529,10073,10086,10529,-10517,10519,10530,10531,-10501,10532,10533,10534,-10536,10086,10094,10536,-10530,10537,10538,10539,-10541,10541,10542,10543,-10545,10545,10546,10547,-10549,10549,10550,10551,-10553,10553,10554,10555,-10557,10557,10558,10559,-10561,10561,10562,10563,-10565,10565,10566,10567,-10569,10569,10130,10570,-10572, 10131,10572,10570,-10131,10573,10560,10574,-10576,10559,10576,10574,-10561,10562,10577,10578,-10564,10567,10579,10580,-10582,10566,10582,10579,-10568,10583,10584,10582,-10567,10575,10574,10585,-10587,10576,10587,10585,-10575,10577,10588,10589,-10579,10579,10590,10591,-10581,10592,10593,10594,-10596,10587,10596,10597,-10586,10588,10598,10599,-10590,10591,10590,10600,-10602,10602,10603,10600,-10591,10604,10605,10603,-10603,10606,10607,10605,-10605,10598,10608,10609,-10600,10601,10600,10610,-10612,10603,10612,10610,-10601,10605,10613,10612,-10604,10607,10614,10613,-10606,10615,10616,10617,-10619,10619,10620,10621,-10618,10620,10622,10623,-10622,10624,10625,10623,-10623,10626,10627,10550,-10550,10628,10629,10627,-10627,10630,10549,10552,-10632,10632,10626,10549,-10631,10633,10628,10626,-10633,10595,10634,10629,-10629,10635,10630,10631,-10637,10571,10633,10632,-10638,10630,10635,10637,-10633,10592,10595,10628,-10634,10570,10592,10633,-10572,10638,10639,10640,-10638,10569,10571,10637,-10641,10641,10635,10636,-10643,10643,10644,10530,-10520,10645,10646,10647,-10649,10649,10650,10651,-10653,10517,10516,10653,-10655,10516,10529,10655,-10654,10593,10592,10570,-10573,10656,10614,10607,-10635,10657,10658,10650,-10650,10219,10222,10659,-10661,10661,10662,10663,-10665,10665,10666,10667,-10669,10668,10667,10669,-10671,10671,10672,10673,-10675,10544,10543,10675,-10677,10662,10240,10239,-10664,10576,10559,10563,-10579,10587,10576,10578,-10590,10596,10587,10589,-10600,10677,10596,10599,-10610,10678,10679,10680,-10682,10682,10683,10535,-10535,10547,10546,10680,-10680,10684,10581,10562,-10562,10577,10562,10581,-10581,10588,10577,10580,-10592,10598,10588,10591,-10602,10608,10598,10601,-10612,10659,10222,10249,-10658,10660,10659,10657,-10650,10685,10686,10687,-10689,10689,10690,10691,-10693,10693,10694,10672,-10696,10693,10696,10531,-10695,10697,10698,10699,-10701,10701,10702,10703,-10705,10705,10706,10707,-10709,10510,10527,10639,-10512,10274,10130,10569,-10537,10709,10710,10015,-10019,10618,10711,10710,-10713,10713,10714,10715,-10717, 10717,10553,10690,-10719,10556,10691,10690,-10554,10031,10719,10709,-10019,10596,10677,10720,-10598,10597,10720,10721,-10587,10721,10685,10688,-10587,10557,10722,10556,-10556,10692,10691,10723,-10725,10725,10726,10727,-10729,10728,10727,10729,-10731,10729,10731,10732,-10731,10733,10506,10511,-10735,10507,10506,10733,-10736,10502,10736,10737,-10504,10738,10643,10519,-10519,10525,10739,10522,-10522,10536,10569,10640,-10529,10639,10638,10734,-10512,10640,10639,10527,-10529,10734,10641,10740,-10742,10513,10512,10742,-10744,10515,10514,10654,-10654,10655,10528,10515,-10654,10699,10744,10745,-10701,10746,10554,10553,-10718,10714,10747,10554,-10747,10748,10749,10750,-10752,10718,10695,10672,-10718,10716,10715,10717,-10673,10715,10714,10746,-10718,10716,10672,10671,-10714,10498,10752,10505,-10505,10503,10520,10523,-10505,10702,10701,10753,-10502,10754,10703,10702,-10756,10321,10756,10757,-10323,10756,10758,10759,-10758,10760,10759,10758,-10762,10762,10763,10764,-10766,10766,10767,10763,-10763,10768,10769,10770,-10690,10692,10771,10768,-10690,10688,10687,10772,-10725,10695,10766,10762,-10694,10770,10766,10695,-10719,10689,10770,10718,-10691,10340,10342,10773,-10705,10774,10701,10704,-10774,10775,10753,10701,-10775,10752,10776,10777,-10506,10505,10777,10778,-10503,10502,10778,10779,-10737,10780,10781,10760,-10783,10783,10784,10785,-10787,10785,10787,10788,-10787,10358,10322,10757,-10790,10789,10757,10759,-10791,10790,10759,10760,-10782,10726,10780,10783,-10728,10699,10790,10781,-10745,10698,10789,10790,-10700,10361,10358,10789,-10699,10697,10700,10774,-10774,10700,10745,10775,-10775,10725,10776,10775,-10746,10776,10725,10728,-10778,10728,10730,10778,-10778,10730,10732,10779,-10779,10731,10788,10779,-10733,10729,10786,10788,-10732,10727,10783,10786,-10730,10782,10760,10761,-10792,10792,10793,10785,-10785,10793,10794,10787,-10786,10795,10796,10797,-10799,10799,10797,10796,-10801,10801,10802,10803,-10805,10805,10804,10803,-10807,10542,10751,10807,-10809,10809,10807,10751,-10811,10811,10812,10813,-10815,10812,10815,10816,-10814, 10815,10817,10818,-10817,10819,10820,10821,-10823,10823,10795,10798,-10825,10532,10535,10796,-10796,10535,10683,10800,-10797,10706,10802,10825,-10708,10543,10806,10803,-10676,10750,10749,10826,-10828,10681,10680,10815,-10813,10680,10546,10817,-10816,10546,10545,10821,-10818,10676,10705,10828,-10830,10682,10830,10831,-10709,10533,10832,10833,-10535,10645,10834,10832,-10534,10835,10548,10836,-10838,10679,10838,10839,-10548,10678,10840,10838,-10680,10841,10842,10840,-10679,10544,10676,10829,-10844,10844,10845,10525,-10525,10564,10846,10847,-10562,10848,10674,10644,-10850,10850,10851,10846,-10565,10561,10847,10852,-10685,10568,10853,10854,-10566,10674,10848,10855,-10857,10857,10858,10643,-10739,10845,10859,10739,-10526,10859,10845,10798,-10798,10857,10859,10797,-10800,10849,10858,10860,-10802,10805,10855,10848,-10805,10861,10862,10808,-10808,10814,10851,10863,-10865,10816,10847,10846,-10814,10852,10847,10816,-10819,10820,10853,10852,-10819,10824,10844,10524,-10866,10542,10808,10805,-10807,10862,10856,10855,-10809,10866,10867,10747,-10715,10863,10867,10866,-10869,10809,10864,10863,-10869,10869,10864,10809,-10811,10870,10871,10826,-10750,10541,10748,10751,-10543,10504,10523,10499,-10499,10523,10522,10518,-10500,10708,10707,10683,-10683,10745,10744,10726,-10726,10518,10522,10739,-10739,10501,10753,10752,-10499,10753,10775,10776,-10753,10744,10781,10780,-10727,10683,10707,10825,-10801,10534,10833,10830,-10683,10738,10739,10859,-10858,10530,10673,10694,-10532,10548,10835,10874,-10546,10540,10539,10875,-10566,10875,10583,10566,-10566,10584,10606,10604,-10583,10644,10674,10673,-10531,10625,10624,10876,-10878,10696,10501,10500,-10532,10676,10675,10706,-10706,10765,10764,10754,-10756,10693,10762,10765,-10697,10801,10860,10825,-10803,10820,10818,10817,-10822,10675,10803,10802,-10707,10545,10874,10822,-10822,10708,10831,10828,-10706,10548,10547,10839,-10837,10643,10858,10849,-10645,10568,10684,10852,-10854,10804,10848,10849,-10802,10819,10854,10853,-10821,10567,10581,10684,-10569,10747,10867,10558,-10558,10559,10850,10564,-10564, 10841,10678,10681,-10879,10555,10554,10747,-10558,10691,10556,10722,-10724,10724,10772,10771,-10693,10864,10869,10811,-10815,10878,10681,10812,-10812,10841,10826,10871,-10843,10867,10863,10851,-10851,10814,10813,10846,-10852,10723,10573,10575,-10725,10575,10586,10688,-10725,10791,10792,10784,-10783,10782,10784,10783,-10781,10799,10860,10858,-10858,10800,10825,10860,-10800,10722,10557,10560,-10574,10647,10865,-10884,10533,10532,10646,-10646,10865,10647,10823,-10825,10532,10795,10823,-10647,10798,10845,10844,-10825,10664,10666,10665,-10662,10590,10579,10582,-10603,10819,10879,10565,-10855,10880,10736,10779,-10882,10508,10507,10520,-10504,10507,10735,10521,-10521,10735,10733,10526,-10522,10508,10503,10737,-10510,10882,10883,10526,-10742,10743,10737,10736,-10881,10652,10651,10881,-10789,10615,10712,10677,-10610,10619,10616,10608,-10612,10612,10622,10620,-10611,10613,10624,10622,-10613,10614,10876,10624,-10614,10572,10662,10661,-10594,10661,10665,10594,-10594,10665,10668,10656,-10595,10656,10668,10670,-10615,10131,10240,10662,-10573,10620,10619,10611,-10611,10709,10719,10685,-10722,10677,10712,10710,-10721,10720,10710,10709,-10722,10616,10615,10609,-10609,10636,10631,10884,-10886,10631,10552,10538,-10885,10552,10551,10875,-10540,10583,10550,10627,-10585,10606,10629,10634,-10608,10550,10583,10875,-10552,10629,10606,10584,-10628,10642,10636,10885,-10887,10740,10642,10886,-10883,10537,10887,10884,-10539,10540,10888,10889,-10891,10885,10884,10887,-10892,10886,10885,10891,-10893,10882,10886,10892,-10884,10070,10517,10658,-10467,10513,10880,10881,-10515,10658,10517,10654,-10651,10650,10654,10514,-10652,10893,10894,10829,-10829,10840,10895,10896,-10839,10842,10897,10895,-10841,10872,10898,10899,-10872,10894,10900,10843,-10830,10901,10893,10828,-10832,10871,10899,10897,-10843,10769,10767,10766,-10771,10466,10658,10657,-10250,10704,10703,10476,-10341,10703,10754,10477,-10477,10764,10763,10479,-10479,10763,10767,10480,-10480,10481,10769,10768,-10483,10482,10768,10771,-10484,10484,10772,10687,-10486,10485,10687,10686,-10487,10649, 10652,10488,-10488,10660,10649,10487,-10220,10698,10697,10489,-10362,10490,10719,10031,-9992,10697,10773,10342,-10490,10477,10754,10764,-10479,10483,10771,10772,-10485,10486,10686,10719,-10491,10480,10767,10769,-10482,10595,10594,10656,-10635,10877,10876,10670,-10670,10862,10861,10714,-10714,10902,10833,10832,-10904,10904,10830,10833,-10903,10903,10832,10834,-10906,10905,10834,10648,-10907,10907,10908,10891,-10888,10648,10891,10908,-10907,10889,10907,10887,-10538,10904,10901,10831,-10831,10888,10836,10839,-10897,10826,10841,10878,-10828,10878,10811,10869,-10828,10750,10827,10869,-10811,10306,10202,-10202,10260,10236,-10236,10093,10274,-10095,10162,10164,-10143,10156,10146,-10146,10215,10093,-10086,10438,10118,-10422,10179,10178,-10178,10276,10176,-10457,10234,10233,-10427,10133,10287,-10290,10201,10195,-10199,10198,10195,-10198,10305,10299,-10299,10065,10307,-10062,10083,10066,-10066,10065,10066,-10308,10299,10201,-10199,10215,10084,-10094,10281,10437,-10433,10053,10269,-10321,10443,10441,-10443,10414,10099,-10446,10314,10381,-10316,10394,10208,-10208,10441,10313,-10317,10414,10100,-10100,10439,10432,-10438,10379,10439,-10381,10427,10378,-10377,10377,10102,-10102,10379,10432,-10440,10320,10330,-10262,10118,10117,-10422,10405,10206,-10206,10390,10451,-10392,10406,10451,-10408,10446,10451,-10407,10096,10463,-10124,10391,10451,-10447,10053,10320,-10262,10175,10456,-10177,10356,10348,-10454,10081,10305,-10299,10307,10301,-10062,10307,10308,-10302,10250,10253,-10285,10306,10305,-10455,10097,10108,-10099,10095,10461,-10097,10069,10452,-10309,10068,10211,-10454,10278,10433,-10427,10278,10426,-10234,10445,10474,-10415,10443,10473,-10445,10174,10449,-10232,10461,10095,-10463,10408,10407,-10464,10451,10123,-10464,10410,10409,-10470,10407,10451,-10464,10740,10641,-10643,10694,10673,-10673,10536,10094,-10275,10602,10582,-10605,10597,10586,-10586,10655,10529,-10537,10867,10850,-10559,10619,10617,-10617,10710,10711,-10016,10674,10856,-10672,10573,10723,-10723,10641,10638,-10636,10638,10637,-10636,10741,10733,-10735,10510,10509, -10743,10527,10510,-10513,10510,10742,-10513,10734,10638,-10642,10655,10536,-10529,10714,10861,-10867,10501,10755,-10703,10872,10871,-10871,10843,10873,-10542,10751,10750,-10811,10823,10647,-10647,10870,10749,-10749,10843,10541,-10545,10868,10866,-10862,10807,10809,-10869,10855,10805,-10809,10806,10543,-10543,10807,10868,-10862,10755,10696,-10766,10558,10850,-10560,10834,10645,-10649,10819,10822,-10880,10835,10837,-10880,10874,10835,-10880,10540,10565,-10889,10822,10874,-10880,10501,10696,-10756,10615,10618,-10713,10883,10892,-10648,10788,10881,-10780,10526,10733,-10742,10742,10509,-10738,10742,10737,-10744,10685,10719,-10687,10740,10882,-10742,10539,10538,-10553,10537,10540,-10891,10513,10743,-10881,10514,10881,-10652,10713,10856,-10863,10713,10671,-10857,10873,10843,-10901,10614,10670,-10877,10890,10889,-10538,10836,10888,-10838,10879,10888,-10566,10838,10896,-10840,10837,10888,-10880,10909,10910,10911,-10913,10913,10914,10229,-10233,10915,10916,10917,-10919,10919,10920,10921,-10923,10923,10924,10239,-10226,10925,10926,10224,-10231,10925,10230,10229,-10915,10911,10910,10927,-10929,10929,10930,10931,-10933,10224,10926,10923,-10226,10930,10909,10912,-10932,10933,10934,10935,-10937,10937,10938,10939,-10941,10667,10941,10942,-10670,10943,10944,10945,-10947,10947,10948,10949,-10951,10951,10952,10953,-10955,10239,10924,10955,-10664,10956,10666,10664,-10958,10667,10666,10956,-10942,10958,10938,10937,-10960,10960,10961,10962,-10964,10964,10932,10931,-10966,10955,10957,10664,-10664,10965,10931,10912,-10941,10966,10950,10949,-10968,10968,10960,10969,-10971,10967,10953,10952,-10967,10962,10958,10971,-10973,10973,10974,10975,-10977,10977,10922,10978,-10980,10980,10981,10982,-10984,10984,10985,10977,-10980,10981,10986,10977,-10986,10982,10981,10985,-10985,10987,10986,10988,-10990,10986,10987,10990,-10978,10991,10990,10987,-10993,10991,10993,10994,-10991,10990,10995,10996,-10998,10986,10998,10999,-11001,10988,10986,11001,-11003,10989,10988,11003,-11005,10992,10987,11005,-11007,10992,11007,11008,-10992,10937,10940,10912,-10912, 10959,10937,10911,-10929,11009,10965,10940,-10940,10972,11010,11011,-11013,10974,10973,10970,-10970,10989,11013,11014,-10988,11015,10927,10934,-11017,11005,11014,11012,-11012,10998,10951,10954,-11000,10997,10996,10919,-10923,10927,10916,10920,-10935,10948,10946,10958,-10962,11017,10994,10933,-10996,11018,10910,10914,-10914,10916,10927,11018,-10918,10929,10932,10924,-10924,10910,10909,10925,-10915,10909,10930,10926,-10926,10926,10930,10929,-10924,10941,10938,11019,-10943,11019,10958,10946,-10946,10924,10932,10964,-10956,10956,10939,10938,-10942,10960,10968,10967,-10950,10953,10967,10968,-10971,10957,11009,10939,-10957,11004,11003,10963,-10963,10964,11009,10957,-10956,11002,11001,11020,-10975,11006,11005,11011,-11011,11008,11007,11021,-11016,10994,10993,11016,-10934,10961,10960,10949,-10949,10976,10975,11000,-11000,10920,10919,10935,-10935,10995,10933,10936,-10997,11012,11014,11013,-10973,10970,10973,10954,-10954,11015,11016,10993,-11009,11013,11004,10962,-10973,11010,11021,11007,-11007,11020,11001,11000,-10976,10999,10954,10973,-10977,11002,10974,10969,-11004,10935,10919,10996,-10937,10959,10928,11021,-10972,10913,10232,10918,-10918,10920,10916,10915,-10922,10669,10942,10945,-10945,10943,10946,10948,-10948,10986,10981,10980,-10999,11022,10983,10982,-11024,11022,11024,10952,-10984,10232,10448,-10919,11018,10927,-10911,10928,10927,-11016,11016,10934,-10934,11019,10938,-10959,10963,10969,-10961,10961,10958,-10963,11020,10975,-10975,11021,10928,-11016,10997,10922,-10978,10965,11009,-10965,10971,11010,-10973,10971,10958,-10960,10951,10983,-10953,10921,10978,-10923,11010,10971,-11022,11008,10993,-10992,11000,11001,-10987,11002,11003,-10989,11006,11007,-10993,11004,11013,-10990,10963,11003,-10970,10990,11017,-10996,10994,11017,-10991,11005,10987,-11015,10977,10990,-10998,11018,10913,-10918,11019,10945,-10943,10951,10998,-10981,10951,10980,-10984,10950,10966,-11025,10966,10952,-11025,10984,10979,-11024,10982,10984,-11024,11025,11026,11027,-11029,11029,11030,11031,-11033,11033,11034,11031,-11031,11035,11036,11034,-11034,11037, 11038,11036,-11036,11039,11040,11041,-11043,11043,11044,11053,-11053,11046,11047,11054,-11056,11048,11046,11055,-11057,11049,11048,11056,-11058,11050,11049,11057,-11059,11051,11050,11058,-11060,10711,10618,11060,-11062,10617,11062,11063,-10619,10617,10621,11064,-11063,10621,10623,11065,-11065,10623,10625,11066,-11066,11037,11067,11068,-11039,11070,11040,11069,-11060,10625,10877,11071,-11067,11072,11073,11074,-11076,11072,11075,11076,-10948,10944,10943,11077,-11079,11079,11080,11081,-11083,11083,11084,11085,-11087,11054,11047,11043,-11053,11029,11032,11026,-11026,11087,11088,10025,-11090,10022,11090,11091,-10020,11092,11080,11079,-11094,11094,11069,11095,-11097,11069,11051,-11060,11068,11067,11084,-11084,11074,11073,11082,-11082,11085,11092,11093,-11087,11043,11025,11028,-11045,11047,11046,11030,-11030,11048,11033,11030,-11047,11048,11049,11035,-11034,11049,11050,11037,-11036,11050,11051,11067,-11038,11087,11089,11045,-11045,11091,11090,11053,-11046,11060,11052,11053,-11062,11062,11055,11054,-11064,11062,11064,11056,-11056,11064,11065,11057,-11057,11065,11066,11058,-11058,11066,11071,11059,-11059,11075,11074,11041,-11041,11076,11075,11040,-11071,11059,11078,11077,-11071,11080,11039,11042,-11082,11084,11094,11096,-11086,11047,11029,11025,-11044,11063,11054,11052,-11061,11080,11092,11095,-11040,11041,11074,11081,-11043,11096,11095,11092,-11086,11067,11051,11094,-11085,11071,10877,10944,-11079,10947,11076,11077,-10944,11088,11087,11028,-11028,11090,10022,10711,-11062,10019,11091,11089,-10026,11097,11098,11032,-11032,11099,11097,11031,-11035,11100,11099,11034,-11037,11101,11100,11036,-11039,11098,11102,11026,-11033,11102,10025,11027,-11027,11103,11101,11038,-11069,11108,11093,11079,-11110,11108,11083,11086,-11094,11106,11103,11068,-11084,11107,11082,11073,-11073,11069,11040,-11040,10618,11063,-11061,11039,11095,-11070,11094,11051,-11070,11071,11078,-11060,11070,11077,-11077,10022,10015,-10712,11087,11044,-11029,11091,11045,-11090,11061,11053,-11091,11027,10025,-11089,11053,11044,-11046,10947,11105,11107,-11073,11104,11108, 11109,-11111,11104,11106,11083,-11109,11107,11109,11079,-11083,11105,11110,11109,-11108,11105,10947,-10944,11111,11112,11113,-11115,11115,11116,11117,-11119,11119,11118,11117,-11121,11121,11119,11120,-11123,11123,11121,11122,-11125,11125,11126,11127,-11129,11129,11131,-11139,11132,11133,11141,-11141,11133,11134,11142,-11142,11134,11135,11143,-11143,11135,11136,11144,-11144,11136,11137,11145,-11145,11138,11139,-11130,10277,11146,11147,-10177,10177,10176,11148,-11150,10177,11149,11150,-10181,10180,11150,11151,-10183,10182,11151,11152,-10186,11123,11124,11153,-11155,11155,11126,11156,-11146,10185,11152,11157,-10449,10978,11158,11159,-11161,10978,10921,11161,-11159,10918,11162,11163,-10916,11164,11165,11166,-11168,11168,11169,11170,-11172,11138,11131,11132,-11141,11115,11111,11114,-11117,11172,11173,9973,-11175,9970,9969,11175,-11177,11177,11178,11164,-11168,11179,11155,11180,-11182,11145,11137,-11156,11153,11168,11171,-11155,11159,11166,11165,-11161,11170,11169,11178,-11178,11131,11130,11112,-11112,11132,11115,11118,-11134,11134,11133,11118,-11120,11134,11119,11121,-11136,11135,11121,11123,-11137,11136,11123,11154,-11138,11172,11130,11129,-11174,11175,11129,11139,-11177,11147,11146,11139,-11139,11149,11148,11140,-11142,11149,11141,11142,-11151,11150,11142,11143,-11152,11151,11143,11144,-11153,11152,11144,11145,-11158,11158,11126,11125,-11160,11161,11156,11126,-11159,11145,11156,11163,-11163,11167,11166,11128,-11128,11171,11170,11181,-11181,11132,11131,11111,-11116,11148,11147,11138,-11141,11167,11127,11179,-11178,11125,11128,11166,-11160,11181,11170,11177,-11180,11154,11171,11180,-11138,11157,11162,10918,-10449,10921,10915,11163,-11162,11174,11113,11112,-11173,11176,11146,10277,-9971,9969,9973,11173,-11176,11182,11117,11116,-11184,11184,11120,11117,-11183,11185,11122,11120,-11185,11186,11124,11122,-11186,11183,11116,11114,-11188,11187,11114,11113,-9974,11188,11153,11124,-11187,11189,11190,11164,-11179,11189,11178,11169,-11192,11191,11168,11153,-11189,11190,11192,10978,11160,-11166,11155,11127,-11127,10176,11147,-11149, 11127,11155,-11180,11180,11155,-11138,11157,11145,-11163,11156,11161,-11164,9970,10277,-9966,11172,11112,-11131,11175,11173,-11130,11146,11176,-11140,11165,11164,-11191,11169,11168,-11192,11113,11174,-9974,11131,11129,-11131,10883,10865,10524,-10527,10648,10647,-10892,10207,10455,-10437,10455,10207,-10466,10206,10464,-10208,10495,10497,10464,-10207,10891,10647,-10893,11193,11194,11195,-11197,11196,11195,11197,-11241,11240,11197,11198,-11243,11242,11198,11199,-11245,11244,11199,11200,-11247,11246,11200,11201,-11203,11202,11201,11203,-11205,11204,11203,11205,-11251,11250,11205,11206,-11253,11252,11206,11207,-11209,11208,11207,11209,-11211,11210,11209,11211,-11213,11212,11211,11213,-11215,11214,11213,11215,-11217,11216,11215,11217,-11219,11218,11217,11219,-11221,11220,11219,11194,-11194,11194,11221,11222,-11196,11195,11222,11223,-11198,11197,11223,11224,-11199,11198,11224,11225,-11200,11199,11225,11226,-11201,11200,11226,11227,-11202,11201,11227,11228,-11204,11203,11228,11229,-11206,11205,11229,11230,-11207,11206,11230,11231,-11208,11207,11231,11232,-11210,11209,11232,11233,-11212,11211,11233,11234,-11214,11213,11234,11235,-11216,11215,11235,11236,-11218,11217,11236,11237,-11220,11219,11237,11221,-11195,11238,11239,11196,-11241,11241,11238,11240,-11243,11243,11241,11242,-11245,11245,11243,11244,-11247,11247,11245,11246,-11203,11248,11247,11202,-11205,11249,11248,11204,-11251,11251,11249,11250,-11253,11253,11251,11252,-11209,11254,11253,11208,-11211,11255,11254,11210,-11213,11256,11255,11212,-11215,11257,11256,11214,-11217,11258,11257,11216,-11219,11259,11258,11218,-11221,11260,11259,11220,-11194,11239,11260,11193,-11197,11261,11262,11239,-11239,11263,11261,11238,-11242,11264,11263,11241,-11244,11265,11264,11243,-11246,11266,11265,11245,-11248,11267,11266,11247,-11249,11268,11267,11248,-11250,11269,11268,11249,-11252,11270,11269,11251,-11254,11271,11270,11253,-11255,11272,11271,11254,-11256,11273,11272,11255,-11257,11274,11273,11256,-11258,11275,11274,11257,-11259,11276,11275,11258,-11260,11277,11276,11259,-11261,11262, 11277,11260,-11240,11278,11279,11262,-11262,11280,11278,11261,-11264,11281,11280,11263,-11265,11282,11281,11264,-11266,11283,11282,11265,-11267,11284,11283,11266,-11268,11285,11284,11267,-11269,11286,11285,11268,-11270,11287,11286,11269,-11271,11288,11287,11270,-11272,11289,11288,11271,-11273,11290,11289,11272,-11274,11291,11290,11273,-11275,11292,11291,11274,-11276,11293,11292,11275,-11277,11294,11293,11276,-11278,11279,11294,11277,-11263,11279,11278,11295,-11297,11278,11280,11297,-11296,11280,11281,11298,-11298,11281,11282,11299,-11299,11282,11283,11300,-11300,11283,11284,11301,-11301,11284,11285,11302,-11302,11285,11286,11303,-11303,11286,11287,11304,-11304,11287,11288,11305,-11305,11288,11289,11306,-11306,11289,11290,11307,-11307,11290,11291,11308,-11308,11291,11292,11309,-11309,11292,11293,11310,-11310,11293,11294,11311,-11311,11294,11279,11296,-11312,11312,11222,-11222,11312,11223,-11223,11312,11224,-11224,11312,11225,-11225,11312,11226,-11226,11312,11227,-11227,11312,11228,-11228,11312,11229,-11229,11312,11230,-11230,11312,11231,-11231,11312,11232,-11232,11312,11233,-11233,11312,11234,-11234,11312,11235,-11235,11312,11236,-11236,11312,11237,-11237,11312,11221,-11238,11358,11313,11314,-11380,11315,11316,11313,-11359,11317,11318,11316,-11316,11362,11319,11318,-11318,11364,11320,11319,-11363,11321,11322,11320,-11365,11323,11324,11322,-11322,11325,11326,11324,-11324,11327,11328,11326,-11326,11329,11330,11328,-11328,11331,11332,11330,-11330,11333,11334,11332,-11332,11335,11336,11334,-11334,11374,11337,11336,-11336,11376,11338,11337,-11375,11339,11340,11338,-11377,11379,11314,11340,-11340,11313,11341,11342,-11315,11316,11343,11341,-11314,11318,11344,11343,-11317,11319,11345,11344,-11319,11320,11346,11345,-11320,11322,11347,11346,-11321,11324,11348,11347,-11323,11326,11349,11348,-11325,11328,11350,11349,-11327,11330,11351,11350,-11329,11332,11352,11351,-11331,11334,11353,11352,-11333,11336,11354,11353,-11335,11337,11355,11354,-11337,11338,11356,11355,-11338,11340,11357,11356,-11339,11314,11342,11357,-11341,11315,11358, 11359,-11361,11317,11315,11360,-11362,11362,11317,11361,-11364,11364,11362,11363,-11366,11321,11364,11365,-11367,11323,11321,11366,-11368,11325,11323,11367,-11369,11327,11325,11368,-11370,11329,11327,11369,-11371,11331,11329,11370,-11372,11333,11331,11371,-11373,11335,11333,11372,-11374,11374,11335,11373,-11376,11376,11374,11375,-11378,11339,11376,11377,-11379,11379,11339,11378,-11381,11358,11379,11380,-11360,11360,11359,11381,-11383,11361,11360,11382,-11384,11363,11361,11383,-11385,11365,11363,11384,-11386,11366,11365,11385,-11387,11367,11366,11386,-11388,11368,11367,11387,-11389,11369,11368,11388,-11390,11370,11369,11389,-11391,11371,11370,11390,-11392,11372,11371,11391,-11393,11373,11372,11392,-11394,11375,11373,11393,-11395,11377,11375,11394,-11396,11378,11377,11395,-11397,11380,11378,11396,-11398,11359,11380,11397,-11382,11382,11381,11398,-11400,11383,11382,11399,-11401,11384,11383,11400,-11402,11385,11384,11401,-11403,11386,11385,11402,-11404,11387,11386,11403,-11405,11388,11387,11404,-11406,11389,11388,11405,-11407,11390,11389,11406,-11408,11391,11390,11407,-11409,11392,11391,11408,-11410,11393,11392,11409,-11411,11394,11393,11410,-11412,11395,11394,11411,-11413,11396,11395,11412,-11414,11397,11396,11413,-11415,11381,11397,11414,-11399,11399,11398,11415,-11417,11400,11399,11416,-11418,11401,11400,11417,-11419,11402,11401,11418,-11420,11403,11402,11419,-11421,11404,11403,11420,-11422,11405,11404,11421,-11423,11406,11405,11422,-11424,11407,11406,11423,-11425,11408,11407,11424,-11426,11409,11408,11425,-11427,11410,11409,11426,-11428,11411,11410,11427,-11429,11412,11411,11428,-11430,11413,11412,11429,-11431,11414,11413,11430,-11432,11398,11414,11431,-11416,11342,11341,-11433,11341,11343,-11433,11343,11344,-11433,11344,11345,-11433,11345,11346,-11433,11346,11347,-11433,11347,11348,-11433,11348,11349,-11433,11349,11350,-11433,11350,11351,-11433,11351,11352,-11433,11352,11353,-11433,11353,11354,-11433,11354,11355,-11433,11355,11356,-11433,11356,11357,-11433,11357,11342,-11433 } Edges: *23455 { a: 0,4,16,20,23,24,29,32,36,40,44,48,3,1,2,7,6,9,10,15,13,14,17,18,25,27,26,35,34,37,39,38,42,30,46,50,55,53,54,60,61,66,64,65,68,69,72,74,73,76,81,80,83,85,84,88,92,96,99,104,107,111,121,123,129,128,131,133,140,8,12,105,22,102,31,101,100,108,144,113,112,116,115,136,120,119,124,132,293,545,603,604,1099,1126,1128,1132,1147,1160,1175,1203,1204,1223,2486,1232,1242,4963,1248,1333,1348,1356,1441,1502,1509,1517,1518,1812,1813,1829,1844,1997,2179,2252,2249,2338,2450,2581,2709,2731,2867,2870,3067,4406,2377,3104,3108,2444,3120,4088,4166,4173,4225,4408,4763,4958,4991,4992,5008,5096,5187,5369,5744,6285,6332,6357,6739,4762,1791,149,148,147,146,153,152,150,157,156,154,161,158,162,169,167,174,166,178,873,182,181,180,179,186,185,189,187,194,197,196,195,6887,201,200,199,198,205,204,202,209,208,206,213,210,216,215,214,221,225,224,222,229,226,6449,176,231,230,237,236,235,234,238,246,250,249,248,247,253,251,257,262,266,265,264,263,270,269,267,273,271,278,282,281,280,284,285,6092,290,289,287,288,294,292,298,297,295,296,302,300,306,303,305,309,313,312,310,311,317,315,316,321,320,318,325,323,324,609,329,326,333,337,336,335,334,341,340,339,338,345,344,342,349,348,346,353,350,357,355,354,361,360,359,358,365,364,362,369,368,366,373,370,377,376,374,375,381,379,380,385,383,382,384,388,386,392,391,390,395,393,399,406,407,620,618,411,409,410,420,416,414,413,418,424,422,427,432,431,430,436,434,433,435,441,440,438,442,446,458,457,455,454,462,459,467,466,471,468,475,474,473,472,479,478,476,483,482,480,487,484,490,489,488,495,494,499,498,496,503,500,507,506,505,504,511,510,508,515,514,512,519,516,522,521,527,526,531,530,528,532,539,536,543,542,547,544,551,550,555,554,553,559,558,556,563,562,560,564,571,570,569,568,574,572,579,578,583,580,587,590,594,593,598,602,611,610,613,617,621,629,634,633,632,631,637,635,641,646,649,648,647,653,658,662,661,660,665,663,670,669,671,678,677,680,686,685,688,693,692,691,697,701,706,709,708,713,718,717,719,726,725,724,729,727,733,741,740,745,750,749,751,757,756,755,762,761,765,763,770,774,773,772,777, 775,782,781,783,790,789,788,793,791,797,805,804,809,814,813,815,825,821,820,822,826,829,828,830,831,835,841,844,849,852,857,860,858,864,871,870,879,878,5719,4507,13860,889,887,886,888,914,892,921,891,893,890,896,897,895,894,903,904,1255,899,898,902,901,906,908,911,910,909,913,918,917,5282,919,6172,925,924,922,923,947,6829,948,6837,4648,6895,4633,933,931,930,932,934,940,939,938,937,941,942,4512,946,945,950,954,964,4382,4381,5461,1013,965,4524,993,1016,968,966,967,969,970,1018,973,977,976,974,975,5510,980,979,978,982,981,1467,989,988,985,991,995,1005,999,998,1000,1002,1009,1008,1007,1012,1011,972,1015,1020,1019,1023,1022,1037,1033,1031,1030,1032,1035,4708,1039,1041,1040,1038,1045,1044,1042,1049,1048,1046,1047,1058,1059,6773,1055,1054,1053,1057,1062,1060,1061,1067,1066,1065,1064,1071,1069,1068,1070,1075,1073,1077,1076,1109,1108,4807,1083,1082,1087,1119,1086,1085,1094,1095,1091,1088,1098,1097,1096,1101,1103,1111,1107,1104,1106,1115,1118,1117,1116,1122,1125,1131,1134,1133,1138,1143,1142,1144,1150,1149,1152,1151,1159,1156,1195,1196,1163,1162,1161,1167,1166,1164,1171,1170,1168,1172,1218,2828,4996,4995,1176,1177,1180,4496,1214,1190,1191,1187,1185,1184,1186,1188,1194,1193,1192,1198,1202,1207,1210,1211,1215,1209,1217,1216,1220,1227,1226,1225,1224,1228,1229,1235,1236,3210,3206,2202,1247,1246,1245,1244,1249,1251,1271,1267,1266,1422,1258,1259,1253,1252,1256,1263,1262,1261,1260,1265,1270,1269,1275,1272,1276,1277,1279,1283,1282,1280,1286,1292,1360,1289,1288,1284,1290,1297,1296,1295,1294,1301,1300,1299,1298,1303,1357,1308,1307,1306,1305,1312,1311,1309,1316,1315,1313,1320,1317,1327,1328,1324,1321,1332,1329,1330,1336,1335,1334,1339,1337,1344,1343,1345,1350,1351,1349,1355,1359,1358,1364,1363,1367,1365,1379,1374,1375,1380,1443,1384,1383,1382,1381,1386,1388,1440,1437,1392,1409,1408,1405,4939,1394,1395,1401,1400,1404,1403,1402,1407,1412,1416,5716,5713,1420,1421,2245,1419,1418,1425,1424,1432,1426,1427,1434,1436,1444,1449,1448,1447,1446,1453,1452,1450,1457,1456,1454,1461,1458,1465,987,1463,1462,1469,1468,5505,1473,1472,1470,1471,1487,4801, 1477,1476,1474,1475,1481,1479,1480,1485,1482,1483,4776,1488,1493,1492,1491,1495,1496,1498,1499,1500,1505,1504,1503,1541,1507,1506,4175,5238,4720,1513,1512,1510,1511,1520,1515,1516,1514,1521,2993,1523,5220,1525,1524,1522,1527,1533,1532,1531,1530,1537,1536,1534,4773,4754,4753,1539,1538,1544,1543,1548,1546,1581,1580,1558,1560,1559,1557,1564,1562,1572,1567,1568,1566,1565,1570,1576,1575,1574,1579,1577,1583,1596,1591,1592,1590,1589,1594,1600,1599,1598,1604,1603,1601,1607,1605,1619,1620,1616,1614,1613,1615,1617,1624,1623,1621,1622,1628,1626,1627,1635,1636,1632,1630,1629,1631,1633,1723,1768,5802,6214,1640,1639,1637,1638,1644,1643,1642,1641,1648,5954,1645,1655,1650,1652,1649,1656,1653,1654,1736,1659,1658,1657,3014,1660,1746,1704,1708,1707,6250,1760,1664,1663,1661,1662,1668,1666,1667,1672,1671,1669,2165,1677,1676,1697,6766,1696,1675,1674,1673,1680,1679,1684,1683,1739,1688,1685,1691,1690,1695,1703,1702,1701,1705,1711,1710,1709,1716,1715,5397,1718,5922,5951,6757,5948,1725,1724,1722,1756,1759,1727,2521,1730,1735,1734,1740,6205,6209,1744,6207,2342,1751,1748,1754,1753,1762,1763,1764,1761,1766,1775,1776,1772,1770,1769,1771,1773,1780,1779,1778,1777,1788,1784,1782,1781,1783,1786,1240,1789,1790,1796,1795,1794,1793,1799,1798,4470,1797,4911,1804,1803,1802,1801,1808,1807,1805,1811,1809,1816,2261,1818,1820,1819,1817,1827,5882,1822,1824,1823,1821,1828,1825,1179,1178,1183,1182,2739,1832,1831,1830,1836,1835,1833,1839,1837,1845,1848,1847,1855,1856,1852,1849,4484,4480,5018,1860,1859,1858,1863,1862,1871,1884,1866,1868,1867,1865,1872,1869,1876,1875,1874,1873,1880,1879,1877,1882,1887,1892,1891,1890,2216,2221,2220,2736,1893,1896,1895,1894,2569,5848,1903,1904,1900,1898,1897,1899,1901,1911,1912,1908,1905,1907,1906,1909,2131,2130,5407,4515,1917,1915,1913,1914,1918,1916,1921,3159,2713,1920,1922,1919,1929,1930,1926,1924,1923,1925,1927,1934,1933,1932,1931,1938,1937,1935,1941,1939,1946,2748,1949,1948,1947,1953,1951,1952,1960,1961,1957,1954,1956,1962,1965,1964,1963,1966,1967,1973,1970,1974,1975,1976,1985,1986,1982,1980,1979,1981,1983,1989,1990,2108,1988, 1987,1994,1993,1992,1996,2775,2001,6084,13841,2005,2003,2002,2017,2013,2011,2010,2012,2015,2021,2020,2019,2018,2024,2022,2026,2029,2034,2038,2037,2036,2035,2042,2041,2039,2046,2045,2043,2050,2047,2054,2053,5939,6800,2055,2059,2069,2070,2066,2064,2063,2067,2073,2072,2071,2077,5843,4668,2081,2080,2079,2636,5522,5894,6077,2085,2083,2089,2088,2090,2091,2092,2571,2570,5751,5364,2099,2127,2096,2095,2094,2100,2097,2104,2103,2102,2101,2106,2105,2113,2110,2117,2116,2115,2114,2425,2438,2119,2121,2118,2124,2141,2137,2135,2134,2139,2145,2144,2143,2142,2149,2148,2146,2620,2626,2157,2153,2151,2150,2152,2155,2161,2160,2158,2163,3169,3166,6097,2169,2168,2166,2167,2173,2171,2172,5278,2176,2174,2177,2180,2178,2181,2184,1969,2187,1529,2188,2192,2191,2190,2189,2194,2196,2195,2200,2199,2197,2204,2203,2201,2226,2774,3002,2207,3362,2206,2208,2205,2212,2211,2472,2468,2217,2214,2213,2215,2218,2222,2224,2232,2231,2230,2235,2237,2241,2240,2238,2239,2243,5209,5936,5214,2253,2247,2246,2248,2250,2259,2258,2265,2264,2263,2262,2268,2267,2266,2270,2274,3250,2616,2272,2279,2276,2318,2314,2313,2281,2280,5827,2853,2285,2284,2290,2294,2292,4462,5360,5754,2298,2297,2296,2299,2301,2303,2305,5854,5855,2312,2311,2317,2316,6015,2322,2326,2325,2324,2328,2330,2331,2339,2346,2345,2344,2343,2350,2349,2347,2353,2355,2357,2354,2361,2364,2362,2365,6091,6087,2367,2366,2368,2376,2371,2372,2370,2369,2375,2374,4520,2635,2378,2384,2383,2382,2388,2387,2386,2385,2391,2389,2395,2394,2400,2397,2404,2403,2407,2566,2410,2409,5815,5401,6041,6049,6046,6042,2413,2422,2421,2420,2419,2423,2430,2429,2427,2434,2433,2431,2441,2440,2445,2447,2454,2453,2452,2457,2455,2462,2461,2463,2467,2469,2476,2490,2502,2495,2497,2496,2500,2509,2510,2506,2504,2503,2505,2507,2513,2514,2512,2519,2530,2526,2523,2525,2532,2534,2538,2537,2536,2542,2541,2539,2545,2543,2552,2554,2553,2558,2557,2556,2560,2561,2564,2563,2565,2575,2574,2572,2573,2579,2577,2578,2580,5741,2585,961,956,960,957,2595,2594,2593,2598,2596,2603,2602,2604,2609,2608,2613,3246,2619,2618,2623,2622,2629,2627,2638,2641,2640,2646,2645,2649, 2647,2658,2657,2656,2662,2661,2659,2665,2663,2678,2674,2671,2679,2684,2691,2693,2694,2696,2690,2689,2688,2703,2702,2707,2706,2710,2715,2714,2718,2724,2723,2725,6148,5337,5336,2764,2729,2752,2058,2057,2062,2061,2734,2742,5984,6212,6239,4473,4472,2749,2799,2755,2753,2760,2759,2761,2765,2767,2773,2782,2783,2779,2777,2776,2778,2780,2790,2791,2787,2784,2786,2793,2792,2797,2845,2802,2809,2808,2803,2811,2810,2815,2836,2837,2833,2831,2830,2834,2841,2840,2843,2847,2851,2857,2858,2863,2866,2868,2875,2874,2876,2879,2885,2884,2883,2888,2886,2893,2892,2894,2904,2903,2902,2913,2915,5916,5280,5344,5660,5665,2922,2921,2926,2925,2931,2930,2934,6673,13951,5653,2938,2942,2941,2940,2939,2946,2945,2943,2950,2949,2947,2954,2951,2958,2957,2956,2962,2961,2959,2963,2969,2968,2974,2973,2977,6274,2989,3082,2984,2985,2983,2994,2991,2998,2997,3004,3003,3008,3011,3016,3017,3022,3019,6401,3024,3030,3027,3034,3033,3038,3037,3036,3042,3041,3039,3045,3043,3051,3053,3055,3054,3060,3059,3064,3068,3073,3072,3078,3077,3080,3087,3089,2380,3102,3095,3103,3105,4656,3111,2443,3126,3125,3124,3123,3127,3133,3140,3141,3137,3135,3134,3138,5979,3145,3144,3143,3142,3149,3148,3146,3152,3150,3157,3185,3162,6161,3164,3163,3161,3171,3172,3168,3165,3167,3174,3173,3177,3180,3184,3193,3190,3191,3188,3198,3197,3195,3202,3200,3203,3214,3213,3217,3221,3220,3227,3226,3230,3228,1721,5210,3239,3238,3237,3236,3243,3242,3240,3244,3249,3255,3254,3253,3252,3259,3257,3256,3260,3262,3273,3268,3270,3269,3267,3274,3271,3695,3278,3276,3275,3277,3285,3340,3282,3286,3280,3279,3281,3283,3290,3289,3288,3287,3294,3293,3291,3298,3295,3302,3301,3300,3299,3305,3304,3309,3308,3306,3313,3312,3310,3317,3314,3321,3320,3319,3325,3324,3322,3329,3328,3326,3330,3335,3338,3344,3353,3352,3351,3357,3356,3354,3360,3358,3370,3367,3368,3374,3373,3377,3376,3375,3382,3381,3386,3385,3383,3390,3387,3394,3393,3392,3391,3397,3395,3401,3406,3410,3409,3408,3407,3414,3413,3411,3418,3417,3415,3422,3419,3431,3430,3432,3435,3441,6588,3438,3444,3443,3442,3449,3448,3453,3452,3450,3457,3454,3460,3459,3458,3464,3469,3468, 3473,3470,3477,3476,3475,3474,3481,3480,3478,3484,3482,3489,3492,3491,3497,3496,3501,3500,3498,3502,3508,3507,3506,3510,3509,3515,3513,3512,3519,3518,3516,3522,3520,3531,3530,3529,3535,3534,3532,3538,3536,3547,3546,3545,3544,3551,3550,3548,3567,3552,4052,3555,3562,3563,3559,3556,3558,3565,3564,3572,3571,3576,3575,3573,3577,3583,3582,3588,3587,3591,3589,3600,3599,3598,3597,3604,3603,3601,3607,3605,3612,3616,3615,3614,3613,3619,3617,3623,3628,3632,3631,3630,3634,3635,3644,3640,3637,3639,3651,3660,3647,3646,3645,3649,3653,3655,3667,3675,3662,3664,3663,3661,3668,3665,3670,3671,3673,3672,3678,3677,3682,3680,3687,3693,3691,3689,3688,3690,3699,3698,3697,3696,3703,3702,3701,3700,3705,3708,3713,3711,3716,3721,3718,3725,3724,3728,3727,3740,3739,3738,3742,3748,3747,3746,3750,3756,3755,3753,3763,3764,3760,3757,3759,3768,3776,3775,3774,3773,3780,3779,3777,3783,3781,3788,3791,3790,3789,3795,3800,3799,3804,3801,3812,3806,3805,3807,3809,3872,3817,3890,3818,3827,3825,3822,3844,3832,3831,3830,3829,3836,3835,3840,3839,3837,3841,3848,3847,3846,3845,3852,3851,3849,3855,3853,3860,3863,3862,3861,3868,3867,4042,3870,3875,3874,3879,3882,3889,3888,3892,3891,3898,3897,3896,3900,3902,3901,3905,3903,3909,3908,3912,3915,3917,3926,3923,3928,3932,3931,3936,3941,3940,3939,3945,3949,3954,3957,3956,3961,3965,3978,3971,3973,3982,3985,3994,3988,3987,3991,3997,3995,3999,4003,4007,4006,4010,4019,4026,4025,4030,4029,4034,4032,4041,4040,4046,4050,4059,4058,4063,4065,4072,4149,4073,4071,4077,4076,4086,4085,4094,4093,4097,4106,4113,4112,4111,4118,4117,4120,4125,4129,4128,4134,4133,4137,4146,4153,4152,4150,4156,4157,4155,4159,4161,4160,4163,4169,4168,4167,4184,4171,4177,4176,4174,4180,4181,4179,4183,4182,4188,4186,4192,4201,4199,4204,4207,4212,4211,4210,4215,4213,4219,4218,4216,4221,4223,4234,4237,4242,4241,4240,4239,4246,4245,4243,4250,4247,4254,4253,4252,4251,4256,4257,4261,4260,4259,4258,4265,4264,4262,4269,4268,4266,4273,4270,4275,4274,4280,4279,4283,4281,6748,1729,1728,4287,4284,4289,4295,4292,4299,4305,4303,4302,4309,4308,4313,4319,4318,4316,4323,4321, 4326,4325,4331,4330,4334,4332,4343,4348,4347,4349,4372,4354,4362,4356,4355,4359,4364,4365,4370,4367,4374,4373,4378,4377,4375,4380,6183,986,4386,4394,4392,4403,4411,4421,4420,4426,4425,4429,4427,4438,4442,4451,5357,4452,4456,4455,4461,4460,4465,4463,4474,4471,4478,5635,5520,4488,4492,4483,4479,4489,4493,4495,4499,4509,4508,4506,4511,2133,2132,4658,4523,4522,4527,4532,4531,4533,4544,4539,4540,4537,4547,4546,4545,4550,4549,4553,4551,4558,4557,4562,4559,4564,4563,4566,4570,4569,4576,4575,4580,4579,4577,4581,4587,4586,4592,4591,4596,4595,4593,4597,4604,4601,4607,4608,4611,4610,4616,4615,4620,4619,4617,4621,4627,4626,4625,4631,4636,4635,4640,4637,4643,4642,4641,949,4652,4657,4661,4660,5819,4663,4667,4666,5478,13928,4672,2911,4676,4674,4671,4669,4670,4703,4678,4679,4677,4680,4688,4689,4684,4683,4691,4690,4694,4699,4700,4701,4706,4705,4704,4711,4710,4714,4712,4718,4716,4725,4724,4723,4729,4728,4726,4733,4732,4730,4734,4741,4740,4739,6910,4742,4750,1528,4756,4761,4760,4765,4769,4784,4777,4781,4790,4787,4794,4798,4795,4802,4806,4803,4804,5170,4810,4809,4808,4813,4812,4811,6871,4817,4821,4819,4829,4828,4834,4833,4837,4835,4845,4844,4849,4848,4854,4853,4855,4861,4860,4859,4866,4865,4864,4863,4872,4875,4874,4879,4888,4885,4892,4898,4897,4901,4905,4912,4917,4916,4921,4920,4925,4923,4932,4936,4935,4942,4941,4946,4944,4949,4954,4953,4957,4961,5003,5006,4975,4971,4968,4970,4983,4979,4976,4978,4986,4985,4984,4990,4994,4999,5000,5009,5013,5012,5011,5109,5016,5015,5020,5025,5030,5033,5035,5040,5039,5042,5048,5047,5052,5051,5056,5054,5064,5063,5068,5067,5072,5070,5080,5079,5084,5083,5088,5086,5095,5103,5102,5106,5111,5110,5114,5119,5126,5128,5136,5129,5137,5148,5152,2359,5168,5171,5176,5180,5179,5184,5195,5194,5193,5198,5196,5207,5204,5208,5221,5227,5224,5228,5225,2009,5236,5239,5244,5247,5251,5250,5255,5263,5262,5268,5267,5271,5269,13832,5284,5281,5290,5288,5299,5305,5304,5308,5323,5331,5330,5333,5339,5338,5343,5353,5350,5395,5358,5359,5363,5383,5391,1028,1029,5399,5400,5396,5393,5440,5403,5402,5405,5410,5409,5417,5415,5412,5419,5422, 5421,5426,5430,5429,5432,5368,5367,5437,5372,5371,5362,5375,5446,5445,5444,5447,5448,5376,5377,994,990,5465,5464,5463,5486,5469,5468,5467,5473,5472,5470,5474,5485,5479,5480,5487,5498,5499,13967,5496,5504,5507,5515,5521,5524,927,5530,5529,5550,5534,5533,5540,5539,5542,5541,5545,5557,5552,5551,5561,5560,5559,5565,5569,5574,5577,5576,5581,5584,5595,5594,5599,5602,5601,5608,5607,5609,5614,5621,5629,5628,2910,5633,5637,2898,2899,5646,5643,5650,2900,2906,2905,2901,5651,5657,5668,5667,5672,5676,5712,5684,5683,5691,5696,5695,5699,5705,5704,5706,5710,5725,5722,5723,5728,5734,5740,5438,2583,5439,2582,5456,5777,5755,5760,5763,5752,5747,5768,5766,5748,5770,5769,5749,5775,5781,5790,5788,5799,5732,5805,5804,5806,5810,5816,5809,5818,5817,5822,6065,6071,5829,5828,5833,5838,5837,5840,5845,5853,5852,5857,5856,5860,5864,1239,5872,5881,5880,5889,5887,4664,5902,5910,5925,5918,5919,5926,5931,5930,5938,5934,5944,5947,5956,6799,5960,5961,5968,5964,5972,5971,5982,5977,5976,5980,5986,5985,5989,5988,5987,5994,5993,5999,5996,6002,6001,6005,6008,6007,6016,6020,6024,5830,6030,6027,6028,6026,6032,6031,6036,6035,6040,6047,6057,6060,2850,6074,6080,6095,6088,6086,6100,6099,6105,6104,6108,6106,6116,6115,6118,6126,6127,6122,6121,6129,6134,6154,6149,6147,6159,6160,6169,6170,6175,6174,5528,6176,6178,6188,6196,6203,6211,6215,6217,6221,6225,6231,6234,6237,6245,2699,2700,6247,6251,6252,6255,6258,6262,2821,4126,6270,4127,6279,6280,6289,6278,6277,6283,6282,6281,6284,6286,6291,6292,6293,6294,6295,6301,6299,6300,6303,6305,6304,6306,6307,6309,6308,6321,6311,6315,6317,6322,6331,6343,6348,6355,6362,6361,6360,6366,6365,6363,6370,6369,6367,6371,6377,6376,6382,6381,6386,6385,6383,6387,6394,6393,6395,6391,6400,6399,6405,6404,6408,6406,6416,6421,6415,6425,6424,6423,6428,6426,6433,6432,6434,6440,6439,6444,6448,6456,6455,6460,6464,6473,6472,6470,6471,6477,6475,6502,6481,6478,6485,6482,6489,6492,6491,6490,6497,6496,6501,6498,6505,6510,6524,6518,6517,6521,6535,6531,6530,6532,6536,6538,6545,6542,6540,6539,6543,6548,6556,6555,6560,6565,6564,6566,6572,6571,6570,6576,6581,6580, 6585,6582,6587,6591,3425,6597,6609,6605,6602,6613,6611,6616,6618,6350,6297,6627,6628,883,875,855,867,164,6296,6341,241,240,165,163,856,854,874,882,1681,1741,1757,2518,220,6654,6325,6345,833,2352,6676,6669,6236,2351,6064,2282,2862,2852,6143,6145,2859,6139,5831,6687,6695,2411,4516,5811,4514,1278,6713,4454,4458,4457,6712,5386,4453,6727,6731,6735,1732,1731,2975,1647,1719,5211,1720,6638,1977,1052,4752,1051,4751,1501,1489,2732,2750,2632,2052,5955,2008,2522,6821,4340,6179,926,5527,944,6836,5380,5365,5457,1285,5596,6852,5591,5361,6138,2333,4818,4815,4830,2405,6880,175,177,232,233,1241,2478,5661,2923,6298,6310,6889,6629,928,929,935,1554,2587,3426,3440,3429,6483,6488,6480,3189,4122,4745,2288,6797,5901,5098,5758,332,6918,6919,6920,6921,6922,6923,6925,6926,6927,6929,6930,6933,6936,6935,6937,6938,6939,6947,7648,6951,6952,6953,6954,6955,6956,6960,6962,6963,6967,6968,6970,6973,6974,6975,6976,6977,6978,6980,6981,6982,6984,6985,6988,6990,6991,6992,6993,6997,6998,7000,7001,7004,13394,7007,7008,7009,7010,7011,7012,7017,7018,7022,7023,7024,7025,7027,7029,7031,7034,7038,7039,7040,7041,7042,7043,7045,7047,7049,7050,7055,7054,7057,7060,7061,7062,7066,7065,7067,7068,7070,7072,7074,7073,7075,7076,7078,7080,7082,7081,7084,7085,7089,7088,7090,7091,7094,7093,7095,7096,7098,7099,7102,7101,7103,7064,7063,7106,7107,7109,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7123,7125,7127,7128,7133,7134,7135,7136,7137,7138,7139,7140,7141,7143,7144,7145,7147,7148,7151,7153,7152,7154,7155,7158,7157,7159,7161,7160,7162,7163,7164,7166,7167,7168,7169,7172,7174,7176,7183,7186,7188,7189,7192,7191,7193,7195,7198,7200,7196,7197,7203,7205,7208,7210,7211,7212,7214,7215,7217,7218,7219,7221,7222,7223,7225,7229,7232,7238,7239,7240,7241,7243,7245,7246,7247,7250,7253,7254,7255,7256,7258,7259,7261,7262,7263,7265,7269,7271,7272,7273,7275,7278,7279,7282,7285,7286,7287,7288,7289,7290,7291,7293,7295,7297,7298,7303,7304,7306,7307,7310,7311,7313,7317,537,7320,7321,7324,7323,7328,7329,7332,7331,7334,7335,7336,7338,7339,7341,7342,7343,7345,7349,7350,7351,7352,7353,7355,7357, 7358,7359,7362,7365,7369,7372,7375,7376,7379,7383,7390,7393,7397,7400,7403,7411,7413,7414,7415,7416,7418,7420,7422,7425,7430,7431,7432,7434,7437,7441,7442,7443,7446,7448,7450,7457,7460,7464,7465,7468,7472,7474,7475,7476,7478,7482,7485,7490,7491,7494,7497,7498,7504,7505,7506,7507,7510,7512,7514,7522,7523,7526,7529,7530,7536,7538,7539,7540,7541,7542,7546,7548,7549,7553,7554,7555,7558,7560,7562,7569,7570,7571,7574,7576,7578,7586,7587,7590,7593,7594,7600,7605,7602,7604,7603,7611,7608,7610,13504,9849,7615,7619,7622,7627,7632,7637,7639,7641,7650,7651,7658,7664,7668,7665,11808,7678,7677,7679,7672,7673,7681,7685,7688,7691,7692,7693,7695,7694,7699,7707,7713,7704,7705,7706,7714,7718,7727,7726,7728,7729,7682,7684,7687,7735,7738,7740,7739,7741,7736,7737,7743,7744,7746,7748,7747,7756,7760,7759,7761,7757,7765,7766,7767,7768,7769,7770,7774,7776,7782,7786,7783,7784,7785,7788,7789,7792,7796,7803,7808,7810,7811,7812,7817,7816,7859,7819,7883,7821,7820,7822,7860,7823,7825,7826,7829,7828,7830,7834,7838,7839,7840,7842,7843,7845,7778,7847,7849,7771,7815,7814,7854,7855,7831,7861,7865,7873,7868,7870,7869,7875,7876,7878,7881,7882,7884,7887,7886,7892,7894,7897,7893,7899,7902,7906,7905,7907,7903,7904,7909,7910,7914,7915,7917,7918,7919,7921,7927,7926,7928,7929,7931,13652,7943,13654,7934,7924,7941,7940,7942,7944,7945,7946,7947,7950,7949,7951,7952,7953,7955,7958,7959,7938,7961,7965,7967,7972,7969,7932,7978,7933,7980,7984,7981,7983,7989,7990,7991,7997,8000,8005,8004,7966,7971,7999,8014,8015,7995,7994,8016,8021,8022,8025,8028,8029,8035,8036,8037,8042,8043,8044,8047,8049,8048,8052,8056,8057,8058,8060,8061,8063,8064,8065,8067,8071,8074,8072,8073,8080,8076,8091,8087,8086,8075,8092,8097,8096,8098,8093,8095,8094,8101,8102,8103,8105,8109,8112,8055,8117,8120,8118,8130,8126,8127,8141,8142,8143,8144,8137,8151,8149,14013,8885,8154,8159,8158,8162,8163,8164,8165,8171,8174,8178,8183,8186,8194,8195,8198,7710,7676,7709,8201,8200,8202,8188,8204,8205,8185,8189,8184,8206,8209,8216,8217,8214,8218,8220,8221,8225,8222,8224,8229,8230,8228,8235,8236,8237,8238,8239,8240, 8241,8242,8243,8245,8314,8247,8248,8249,8250,8251,8252,8254,8255,8256,8258,8259,8262,8263,8267,8264,8266,8271,8276,8277,8279,8280,8281,8284,8286,8287,8288,8294,8295,8300,8302,8304,8312,8313,8212,8316,8320,8322,8327,8332,8336,8339,8196,8351,8352,8353,8210,8356,8359,8363,8368,8371,8211,8379,7700,8383,7674,7675,8398,8397,8382,8329,8191,8334,8330,8328,8400,8401,8402,8404,8406,8405,8135,8408,8139,8410,8409,8415,8418,8419,8390,8389,8197,8369,8427,8428,8429,8430,8431,8432,8434,8435,8436,8438,8439,8442,7856,8444,8445,8446,8448,8449,8451,7836,8453,7832,8459,8458,8460,8461,8464,8463,8466,8471,8470,8472,8473,8476,8475,8477,8479,8480,8481,8484,12117,8487,8486,8489,8492,8493,8468,8469,8498,8499,8500,8503,8506,8513,8516,8514,8515,8517,8519,8518,8520,8522,8526,8531,8533,8534,8539,8540,8538,8542,8543,8545,9530,8546,8547,8548,8549,8550,8551,8553,8523,8509,8563,8562,8505,8508,8504,8568,8570,8576,8599,8579,8581,8582,8580,8584,8586,8588,8591,8593,8589,8592,8590,8595,8596,8597,8600,8602,8604,8612,8615,8617,8613,8616,8614,8619,8620,8621,8623,8624,8626,8628,8630,8635,8640,8639,8641,8636,8638,8637,8646,8643,8644,8645,8647,8652,8651,8653,8648,8650,8649,8658,8657,8661,8664,8663,8665,8666,8667,8668,8669,8670,8671,13649,8674,8684,8677,8675,8678,8679,8686,8682,8687,8688,8695,8701,8700,8703,8704,8707,8716,8690,8692,8720,8719,8721,8722,8725,8714,8726,8727,8729,8730,8735,8740,8739,8741,8737,8744,8745,8746,8747,8748,8751,8752,8755,8758,8760,8761,8764,8705,8706,8709,8710,8780,8781,8782,8783,8784,8659,12546,8791,8792,8803,8805,8806,8807,8840,8824,8825,8831,8832,8836,8835,8838,13141,8717,8713,8847,8711,8809,8693,8856,8855,8854,8655,8656,8862,8867,8866,8868,8863,8865,8864,8870,8871,8872,8873,8875,8879,8878,8880,8876,8877,8884,8136,10447,8860,8887,8888,8889,8890,8894,8895,8901,8898,8900,8905,8893,8910,8911,8912,8913,8914,8915,8917,8919,8921,8922,8926,8930,8931,8933,8942,8943,8947,8951,8952,8954,8955,8958,8085,8089,8090,8084,8967,8968,8969,8971,8972,8974,8976,8978,8986,8983,8985,8987,8991,8988,8990,8999,8995,9004,9005,9006,9009,9010,9011,9012,9015,9019, 9020,9022,9023,9026,9027,9028,9013,9030,9031,9017,9034,9014,9018,9035,9036,9037,9051,9055,8961,9070,9068,9067,9069,9383,9075,9080,9079,9081,9076,9078,9077,9083,9088,9087,9089,9084,9086,9085,9091,9099,9103,9104,9108,9109,9113,9115,9118,9119,9123,9124,9128,9131,9132,9137,9136,9138,9133,9135,9134,9140,9141,9142,9143,9144,9145,9147,9149,9151,9152,12355,9156,9161,9160,9164,9169,9168,9165,9167,9175,9172,9173,9174,13885,9181,10211,9183,9182,9186,9185,9184,9189,9194,9193,9195,9190,9192,9191,9197,9198,9204,9200,9199,9207,9206,9209,9213,9111,9215,9218,9219,9221,9222,9223,9229,9233,9232,9234,9230,9231,9236,9237,9238,9239,9240,9242,9244,9247,9249,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265,9268,9270,9269,9274,9275,9291,9287,9292,9296,9298,9293,9295,9294,9301,9302,9303,9305,9320,11984,12430,10395,9329,9336,9346,9345,9344,9350,9355,9358,9360,9356,9357,9363,9364,9375,9377,9374,9378,9387,12529,9399,9391,9392,9393,9394,9395,9397,9398,9401,9402,9201,9404,9405,9202,9205,9406,9409,9410,9411,9412,9413,9415,9418,9422,9425,9428,9426,9430,9431,9433,9443,9332,9445,9448,9450,9446,9447,9452,9453,9454,9455,9456,9457,9459,9379,9464,9470,9473,9475,9471,9474,9472,9477,9479,8733,8734,8732,9481,9486,9485,9487,9482,9484,9483,9490,9491,9493,9492,9494,9495,9498,9497,9499,13821,9501,9502,9513,9517,9519,9179,9178,9520,9528,9532,9536,9537,9538,9539,9540,9544,9545,9548,9549,9551,9553,9559,9557,9558,9568,9569,9580,9584,9585,9589,9592,9594,9326,9601,9598,9597,9052,9053,9054,9058,9057,9610,9607,8959,8965,8966,9618,9616,9621,8147,9622,8411,8412,9624,9625,9628,9646,9647,9642,9644,9643,13889,8927,8928,8929,9661,9662,9663,9664,9666,11375,9668,9674,9670,9671,11374,9672,9675,9680,9684,9689,9049,8935,13100,9700,9704,9713,9711,9714,9715,12524,12860,9719,9720,9721,8146,8138,9727,9724,9734,9731,9683,9686,9687,9328,9682,9742,9750,9759,9760,9761,9764,9766,9769,13647,9775,9776,9777,9778,9779,9780,9782,9783,9788,9786,9789,9790,9797,9795,9796,9803,9798,9808,9807,9806,9814,9813,9817,9816,9819,9820,9815,9330,9827,9824,9830,9834,9835,9836,9837,9542,9839,9840,9541, 9100,9554,9841,9844,9846,9847,9850,9981,9384,9859,9861,12554,9860,9862,9871,9347,9737,9864,9876,9882,9416,9884,9885,9417,9886,9887,9889,9890,9420,9893,9421,9896,9897,9899,9901,9902,9903,9904,9907,9909,9910,9911,9917,9923,9920,9928,9930,9812,9566,9811,9562,9933,9938,9937,9939,9934,9936,9935,9941,9942,9947,9944,8718,9950,9953,9951,9159,9958,9960,9961,9962,9101,9965,9106,9968,9102,9107,9571,9110,9972,9974,9973,9976,9979,9980,9982,9983,9385,9386,9986,8773,9987,9988,9991,9990,8778,9996,9997,13707,7806,7802,7807,7801,10001,10002,10003,10006,10008,10009,10010,10016,10017,10021,10025,10026,9462,9463,10035,9467,9468,9563,9561,9331,10049,10050,10052,10053,10057,10059,9158,10065,10066,10068,10069,9162,10073,10075,10081,10084,10082,10093,10088,10102,10101,10105,9325,10107,9691,10097,9334,9690,10115,10123,10124,10129,10131,10034,10038,10033,10138,10139,10145,10146,10151,10191,10158,10159,9286,9061,9284,9065,9062,9066,9335,10172,10167,11753,10175,11774,10162,10184,10186,10187,10188,10194,9573,9575,9216,10195,10199,10201,10196,10200,10198,10197,10203,10208,10207,10204,10206,10213,10214,10216,9514,9515,10219,10225,10224,10228,10235,10231,10232,10237,10241,9603,10238,10240,9599,10245,9702,8529,10250,10252,10261,8937,10149,8940,10269,10265,10277,10278,10274,10275,10280,10281,10282,10285,10287,10288,10289,10295,10300,10301,10302,10316,10313,11818,10319,10323,7666,10331,7670,10336,10337,10339,10340,10343,10344,10346,12788,10349,10351,10352,10353,10354,10355,10356,10358,10360,10361,10362,10367,10365,10370,10366,10372,9310,10375,9314,9311,11368,10379,10383,10388,10390,10396,10397,10405,9634,10413,10409,10410,8698,8697,8775,8853,10421,10417,10418,9327,10401,10402,10425,10424,10427,10428,10429,10431,10432,10434,10436,10438,10445,10449,10443,10444,9948,10454,10457,10460,10381,10463,10385,10382,10386,9600,9832,10476,10478,10488,10485,10322,10498,10506,10512,10513,10514,10515,10519,10520,10523,10527,10529,10524,10526,10525,10174,10173,10532,10535,10540,10539,10536,10538,9120,9121,9122,10543,10544,10546,10547,9126,10550,9127,10551,10556,10555, 10552,10554,10560,10561,10565,10567,10569,10575,10578,10577,10580,8160,10583,10584,10152,8156,8155,10590,10591,10598,10595,10596,10605,10606,10600,10612,10615,9640,10624,10625,10628,10029,10631,9581,10627,10634,10637,10633,10640,10645,10644,10646,10641,10643,10642,10648,10653,10652,10654,10649,10651,10650,14733,10711,10661,10660,10657,10658,11170,10662,10663,10674,10675,10676,10679,10678,10680,10681,10682,10684,10685,10715,13783,11417,10709,10688,13775,10690,10691,10692,10694,10695,10697,10698,10699,10701,10705,10707,10710,10713,10720,10721,9582,10724,9587,10727,9583,9588,10729,10730,10731,10734,10733,10737,10738,10739,10740,10741,10744,10745,10747,10748,10751,10752,10753,10754,10755,10757,10759,10761,10764,10768,10769,10770,10771,10772,10773,10775,10776,10777,10779,10780,10783,10789,10790,10792,10793,10797,10807,10808,10804,10806,10812,10813,10814,10815,10816,10819,10820,10822,10823,10826,10828,10829,10830,10832,10835,10836,10839,10842,10844,10843,10845,10846,10848,10850,10852,10853,10855,10856,10859,10860,10862,10866,10867,10868,10869,10871,10872,10873,10876,10877,10875,10879,10882,10883,10884,10886,10887,10889,10891,10893,10898,10899,10900,10901,10902,10903,10905,10635,10914,10924,10932,10937,10936,10933,10935,10908,10909,10940,10941,10944,10912,10947,10913,10953,10950,10956,10957,10958,10959,10960,10961,10963,10965,10967,10968,10972,10973,10974,10975,10977,10979,10981,10984,10989,10988,10991,10994,10995,10997,11001,11000,10998,11005,11008,11011,11009,11006,11007,11017,11013,11015,11020,11025,11024,11026,11021,11023,11022,11028,11032,11040,11036,11038,11044,11030,11046,13789,11048,11049,11055,11212,11063,11051,11078,11053,11054,11059,11061,11064,11068,11069,11072,11071,11075,11076,11086,11085,11088,11092,11094,11093,11096,11100,11104,11101,11103,11105,11106,11107,11108,11109,11110,11112,11114,11116,11117,11124,11129,11130,10668,11132,11133,10672,11136,10669,10673,10667,11138,11139,11140,11142,11145,11146,11149,11152,11158,11159,11154,11156,11155,11169,11161,11219,11165,11176,11180,11182,11029,11186,11188,11183, 11190,11191,11194,11184,11197,11173,11198,11203,11202,11199,11201,11206,11208,11164,11163,11213,11220,11221,11227,11230,11228,11232,11229,11234,10921,11236,11237,10926,10922,10927,10920,11243,11244,11246,11254,11251,11257,11260,11261,11270,11266,11267,11273,11274,11275,11277,11281,11284,11289,11290,11293,11297,11309,11305,11307,10636,11314,11322,11317,11319,11318,11327,11692,11175,11330,11174,11341,11338,11224,11354,11350,11351,11358,11364,11406,11363,11365,11371,11372,11384,11379,11391,11397,11410,11413,11414,11427,11424,11411,11412,11408,11433,11435,11436,11438,11440,11439,11441,11444,11442,11448,11449,11450,11451,11458,11465,11467,11468,11470,11472,11471,11454,11455,11456,11474,11476,11460,11482,11484,11487,11492,11493,11494,11495,11496,11498,11499,11500,11501,11503,11505,11509,11518,11521,11523,11524,11525,11526,11527,11528,11530,11531,11534,11535,11536,11537,11538,11540,11541,11542,11543,11544,11545,11546,11547,11549,11550,11551,11553,11554,11557,11559,11560,11561,11562,11563,11566,11569,8817,8813,8814,8816,11573,11575,11572,11580,11581,11583,11588,11589,11591,11596,11597,11601,11610,11608,11613,11604,11617,11619,11620,11622,11623,11627,11629,11634,9740,9739,9746,9745,10047,11647,11642,11644,11643,11651,11652,11655,11656,11659,11658,11661,11663,11664,11666,11668,11669,7857,11681,11684,11688,11691,11696,11697,11698,11701,11703,11705,10470,11167,10799,10802,10798,11717,11719,11725,11404,11739,11735,8909,9717,11749,9716,11745,11747,10181,10182,12654,12659,11756,11755,11757,11764,8054,8050,11779,11784,8051,11794,10917,10919,10916,11806,11809,11811,11813,11761,11816,9440,11971,11823,11824,11827,11830,11831,11837,11839,11842,11840,11843,11846,11847,11848,11849,11850,11853,11855,11856,11857,11860,11863,11865,11866,11867,11869,11870,11872,11873,11878,11881,11882,11884,11885,11888,11889,11891,11895,11897,11898,11900,11901,11904,11905,11907,11911,11914,11915,11917,11918,11921,11922,11924,11925,11928,11929,11931,11935,11937,11938,11939,11941,11944,11945,11948,11951,11953,11954,11955,7793,11960,10495,10325,11967,11969,11972, 11978,9074,11981,11986,11988,11991,11989,11997,12001,10308,12005,12007,12002,12004,12003,12009,10533,12011,10534,11817,12013,12016,10329,12020,12017,12019,12024,12026,12029,12030,12031,12036,12032,12038,12039,12040,12042,12045,12049,12054,12053,12050,12052,12058,12059,12060,12061,12062,12066,12068,12069,12071,12075,12076,12077,12079,12080,12082,12083,12084,12086,12090,12091,12092,12093,13731,12098,8566,9527,12105,12108,8556,8561,8557,8524,8528,8525,12121,12122,12124,12129,12130,12132,12136,12137,12138,12140,7936,7937,7923,12145,12146,13687,12152,12150,12158,12160,12161,12163,12164,12168,12170,12177,12178,12183,12184,12186,12187,12193,12195,12196,12197,12198,12199,12200,12201,12205,12209,12210,12213,14035,12180,12225,12226,12230,12233,8892,8358,8192,8180,8179,8181,8908,8393,8349,8395,8298,8344,8343,8167,8348,8296,8168,8173,8169,12242,12246,12251,12255,12254,12252,12259,12263,12262,12260,12274,12275,12268,12278,12282,12272,12269,12291,12294,12295,12296,8998,9001,9002,8997,12306,12309,12313,11793,11769,11792,12319,11767,11768,11771,11772,12321,12323,12243,12244,8083,12248,12329,12331,8079,8082,8077,8078,12337,12339,12346,11776,11777,11780,12354,12358,12353,12360,8859,8861,11605,8772,8774,12370,12374,12300,12382,12385,12390,12398,12395,12402,12410,12411,12412,12415,12417,12425,9635,9639,9636,7962,7963,12435,7976,8011,9225,12445,12448,12453,12456,12459,12460,12463,12471,12472,12474,12475,12479,12481,12486,7722,7724,8962,12492,12498,12499,12503,12510,10153,9654,9655,9656,9659,12519,12240,11736,12521,12522,12525,11737,12541,7900,12544,12548,12545,12547,12552,9097,9094,9098,9092,9093,12559,10121,10166,12557,10120,12562,10117,10116,12567,10170,12569,12571,12570,9370,9751,9369,9276,12527,12530,9337,9282,12576,12577,12578,12585,12581,9281,9278,7813,7862,12590,12589,12592,12595,12596,12597,12598,12599,12601,12602,11999,12608,8457,8456,12609,12611,12612,12000,12618,12625,12624,12629,7837,12627,12631,12632,12636,7833,12643,12651,12655,7671,12668,7753,7701,7702,12680,12677,12678,12683,12684,12682,12689,12691,12694,12695,12700,12702, 12703,12704,12706,12710,12713,12718,12719,12722,12735,7716,7697,7698,12727,12728,12749,12731,8272,8273,12758,12764,12765,10309,12768,12772,10299,10298,12781,12782,12784,10297,10305,10306,10296,12790,12791,10330,10334,12795,12794,12797,12798,12803,12811,12818,12819,12822,12666,12830,12662,12663,12838,12839,9338,9339,12842,9679,9504,9367,9993,9366,9368,9372,9511,9503,12854,12864,12867,9390,9388,9389,12870,12872,9509,9506,12856,9507,9505,12857,12886,12882,8787,12846,12899,12900,12894,12895,12903,12905,11979,12909,12911,9046,9321,9042,9040,9041,9323,11983,9730,9736,12923,9380,9072,9073,13036,12930,12934,12935,12931,9341,9343,11968,12946,10326,12962,12958,13762,9626,9521,8496,12967,9525,12393,9522,9523,12969,12970,12977,12974,12975,12979,12989,12990,12988,12995,10168,12986,12987,12997,13000,13002,13003,13005,13007,13016,13021,13026,12575,10259,8950,9318,12914,9868,8946,8949,8944,8945,9870,9874,9865,13037,9733,12916,9348,12939,13049,9799,9801,13052,13053,13055,13056,13060,13062,13071,13069,13070,13075,13074,13077,13078,13082,13086,13087,13083,13112,9698,13105,13107,13084,13117,11671,13122,13125,11675,11676,11678,11680,11672,8829,13139,8660,13148,13155,13159,13163,13167,13170,10178,10176,13172,10111,10109,10108,8820,13177,13181,13185,13186,13012,10169,13191,13019,9567,11418,11419,11369,13205,13206,13208,13207,13217,13218,13219,13220,13222,13225,13227,13234,13232,13233,13235,13240,13239,13241,13245,13243,13244,13247,13246,13248,13249,13267,13263,13265,13216,13277,13287,13295,13303,13307,13308,13309,13311,13312,13314,13315,13316,13318,13322,13324,13325,13327,13328,13331,13332,13334,13338,13340,13342,13347,13348,13350,13351,13355,13357,13364,13370,13371,13372,13375,13377,13378,13379,13385,13387,13388,13391,13395,13403,13404,13407,13411,13419,13418,13420,13421,13423,13425,13429,13430,13436,13433,13440,13441,13443,13447,13448,13449,13450,13451,13454,13457,13461,13469,13474,13475,13476,13478,13481,13482,13485,13488,13492,13497,13494,13496,13495,13502,13501,13550,13503,13505,13506,13508,13509,13515,13516,13519,13522,13523,13529, 13531,13532,13533,13535,13538,13539,13542,13545,13548,10785,13553,13559,13563,13560,13569,13237,13258,13261,7662,7654,7634,7646,6944,7015,13238,13291,7014,13298,6943,6945,7633,7635,7655,8754,8841,8694,13906,6994,13209,13211,13288,7614,9784,13596,13595,10177,9785,9693,9044,8941,13607,9043,9696,10147,8936,13102,9319,9316,13615,9857,9095,9071,9826,8213,13585,11742,13632,8897,13635,13577,8822,9315,8672,10613,8793,10623,13799,13796,8685,8681,8736,7911,7913,7912,8565,8465,8483,10155,9512,10042,9271,8497,7979,8689,8821,11637,11673,7754,12672,7790,9277,8227,7715,12741,7683,12531,9697,9772,12151,12154,12159,9852,6950,6948,7005,8883,8134,10327,13236,13252,6972,6971,13257,7752,7749,7758,9741,7772,7779,8577,10784,13549,13439,13444,13427,13432,13428,13434,10574,11407,12095,6142,13606,13050,6094,971,7824,9699,5953,12959,2051,9272,1056,7935,11162,11326,10683,10687,11047,11050,7667,7185,8797,8802,8795,8798,10619,12955,10616,6818,13669,5897,11380,10321,10320,12674,13135,12487,13827,5277,5525,6186,5526,9660,5346,5342,11821,1999,9340,5890,2122,13094,6135,6083,13857,9694,6011,5718,5991,6267,408,3881,3648,9669,9177,9176,9651,9650,13890,9793,12301,2182,1968,2257,2256,2747,2489,2360,13901,2517,6643,8842,8845,13583,1230,1231,8133,9665,11402,13927,3816,5517,6017,5501,7818,12543,7872,5484,13946,2932,5688,2933,13959,5488,13962,5494,5503,5495,9324,8541,4758,5825,9692,13013,11760,12984,11759,3158,4476,11752,2275,5874,2873,10267,5878,5873,14004,5876,6068,1237,1238,13041,14008,13042,12937,456,14182,14031,14027,14204,14178,14020,14170,14044,14162,14052,14061,14032,14190,14194,14186,14150,14087,14088,14224,14089,14096,14093,14232,14097,14104,14101,14240,14105,14244,14109,14248,14113,14252,14117,14256,14121,14128,14125,14130,14131,14266,14135,14140,14137,14141,14149,14085,14157,14086,14092,14091,14166,14095,14100,14099,14174,14103,14108,14107,14112,14111,14116,14115,14120,14119,14124,14123,14198,14127,14200,14129,14134,14133,14139,14143,14062,14065,14219,14066,14054,14053,14228,14057,14046,14045,14236,14049,14022,14021,14042,14041,14072,14071,14073, 14082,14075,14074,14260,14078,14262,14028,14025,14024,14272,14037,14033,14151,1050,12179,14208,58,14305,14307,14306,14309,14311,14310,14317,14314,14319,14318,14327,14407,14321,14323,14322,14326,14331,14330,14399,14335,14334,14338,14341,14342,14345,14347,14346,14350,14354,14355,14357,14359,14358,14362,14365,14367,14366,14370,14373,14374,14377,14379,14378,14382,14385,14386,14389,14390,14393,14394,14401,14402,14409,14411,14410,14413,14415,14414,14419,14418,14423,14422,14509,14425,14426,14430,14429,14434,14433,14439,14440,14443,14444,14447,14449,14452,14454,14456,14455,14459,14462,14464,14463,14467,14470,14471,14474,14476,14475,14479,14482,14483,14486,14487,14490,14491,14493,14498,14499,14501,14506,14504,14550,14520,14518,14519,14515,14700,14522,14523,14525,14532,14530,14531,14535,14538,14539,14546,14547,14551,14556,14555,14560,14558,14559,14563,14654,14568,14566,14567,14572,14570,14571,14575,14580,14579,14584,14582,14583,14587,14592,14591,14596,14595,14543,14599,14544,14527,14603,14528,14698,14611,14609,14610,14614,14702,14613,14615,14622,14620,14621,14625,14628,14629,14693,14641,14640,14644,14643,14647,14656,14652,14650,14651,14660,14658,14659,14663,14668,14667,14672,14670,14671,14675,14680,14679,14684,14683,14633,14687,14634,14617,14691,14618,14635,14695,14606,14605,14705,14516,14513,14607,14315,13200,2820,9376,2093,10659,10656,3815,3341,3336,9157,12505,5316,14750,9613,14754,14755,14756,14757,14758,14760,14761,14762,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14861,14794,14841,14805,14833,14923,14932,14810,14825,14786,14788,14789,14792,14793,14797,14798,14800,14801,14802,14804,14806,14808,14809,14811,14813,14814,14816,14817,14818,14819,14821,14926,14930,14822,14824,14826,14828,14829,14830,14832,14834,14836,14837,14838,14840,14842,14845,14846,14849,14850,14852,14853,14854,14856,14857,14862,14864,14869,14870,14875,14877,14878,14880,14886,14888,14893,14894,14899,14900,14901,14902,14903,14904,14910,14912,14916,14917,14919,14918,14934, 14939,14940,14945,14946,14951,14952,14957,14961,14960,14959,14958,14965,14964,14963,14969,14968,14967,14973,14972,14971,14977,14976,14975,14974,14981,14980,14979,14985,14984,14983,14989,14988,14987,14986,14991,14990,14995,14994,14999,14998,15005,15004,15002,15009,15006,15013,15012,15011,15010,15017,15015,15014,15020,15019,15018,15025,15023,15029,15028,15027,15026,15032,15031,15030,15036,15034,15041,15040,15039,15038,15044,15043,15042,15047,15046,15051,15057,15056,15055,15054,15061,15059,15058,15065,15064,15062,15067,15073,15071,15074,15078,15082,15088,15087,15092,15091,15090,15096,15094,15100,15104,15112,15111,15116,15121,15120,15119,15118,15124,15123,15122,15128,15127,15126,15132,15131,15130,15137,15136,15135,15134,15140,15139,15138,15144,15143,15142,15148,15146,15150,15154,15161,15159,15158,15165,15164,15162,15169,15168,15167,15166,15173,15172,15171,15177,15176,15175,15181,15179,15185,15184,15183,15182,15189,15188,15187,15192,15190,15197,15196,15194,15200,15198,15204,15212,15211,15210,15217,15216,15214,15221,15219,15218,15229,15227,15231,15235,15239,15244,15243,15249,15247,15252,15250,15254,15258,15269,15266,15277,15276,15275,15279,15278,15285,15284,15283,15282,15289,15288,15286,15293,15292,15290,15297,15296,15294,15300,15299,15298,15305,15304,15303,15302,15309,15308,15306,15313,15312,15310,15316,15314,15321,15319,15318,15324,15323,15322,15327,15326,15331,15330,15337,15334,15341,15339,15338,15345,15343,15342,15349,15348,15353,15352,15355,15360,15359,15358,15364,15363,15362,15369,15368,15373,15372,15377,15376,15381,15380,15379,15378,15383,15382,15388,15387,15386,15391,15390,15395,15394,15399,15404,15403,15409,15408,15413,15412,15411,15417,15416,15415,15419,15418,15423,15422,15427,15426,15432,15431,15430,15437,15436,15441,15440,15439,15445,15444,15449,15448,15451,15456,15455,15460,15459,15464,15462,15467,15472,15476,15474,15479,15484,15487,15492,15491,15490,15497,15500,15498,15502,15506,15516,15520,15519,15523,15522,15529,15527,15533,15537,15538,15545,15542,15548,15552,15550,15555,15560,15569,15573,15570,15575,15578, 15583,15587,15593,15591,15594,15600,15607,15630,15635,15646,15647,15648,15649,15650,15651,15652,15654,15655,15656,15658,15659,15660,15662,15663,15664,15665,15666,15667,15668,15670,15671,15672,15674,15675,15676,15677,15680,15681,15684,15685,15688,15689,15690,15691,15693,15694,15697,15698,15699,15700,15701,15702,15704,15705,15707,15708,15709,15710,15712,15714,15715,15716,15717,15719,15720,15721,15723,15725,15726,15727,15728,15729,15731,15732,15733,15736,15737,15740,15742,15743,15744,15745,15746,15748,15749,15750,15751,15753,15756,15758,15760,15765,15769,15773,15775,15776,15779,15780,15781,15783,15785,15787,15791,15799,15800,15803,15806,15807,15808,15809,15811,15812,15813,15815,15816,15817,15819,15820,15821,15822,15823,15824,15825,15827,15828,15829,15831,15832,15833,15835,15837,15841,15845,15846,15848,15849,15850,15851,15853,15854,15855,15856,15857,15858,15859,15860,15862,15863,15864,15866,15868,15870,15871,15872,15873,15874,15875,15876,15879,15881,15882,15883,15885,15887,15889,15891,15899,15900,15901,15902,15903,15905,15906,15908,15909,15914,15916,15920,15924,15928,15931,15932,15934,15936,15939,15941,15945,15949,15954,15957,15962,15963,15964,15968,15969,15970,15971,15972,15973,15974,15975,15977,15978,15979,15981,15982,15983,15985,15987,15988,15989,15990,15991,15992,15993,15994,15995,15997,15998,15999,16001,16003,16005,16006,16008,16009,16011,16012,16013,16016,16017,16020,16021,16022,16025,16026,16028,16029,16030,16032,16033,16034,16035,16038,16039,16044,16047,16048,16049,16051,16052,16053,16054,16055,16058,16059,16062,16063,16066,16067,16068,16069,16072,16073,16075,16076,16077,16080,16081,16084,16085,16088,16091,16092,16094,16095,16098,16099,16100,16102,16103,16104,16108,16109,16112,16113,16116,16117,16119,16120,16121,16122,16123,16126,16127,16128,16130,16131,16134,16135,16140,16143,16144,16147,16148,16151,16153,16156,16159,16163,16165,16168,16171,16176,16179,16180,16181,16182,16187,16189,16193,16197,16203,16207,16208,16212,16213,16214,16216,16218,16222,16229,16230,16233,16235,16239,16241,16244,16247,16254,16258,16261, 16264,16269,16272,16276,16278,16280,16285,16286,16297,16316,16323,16334,16335,16336,16337,16338,16339,16340,16342,16343,16344,16346,16347,16348,16350,16352,16353,16354,16357,16358,16361,16362,16363,16364,16365,16366,16367,16369,16370,16371,16374,16375,16378,16379,16381,16382,16383,16386,16387,16468,16406,16522,16390,16391,16393,16394,16396,16400,16401,16402,16407,16408,16409,16410,16411,16412,16413,16414,16415,16417,16418,16419,16421,16422,16423,16425,16426,16427,16429,16430,16433,16434,16437,16438,16439,16440,16441,16442,16443,16444,16446,16447,16450,16451,16454,16456,16458,16462,16466,16467,16469,16470,16471,16473,16474,16475,16477,16478,16479,16483,16488,16489,16490,16491,16492,16493,16495,16496,16497,16498,16499,16500,16503,16504,16506,16507,16511,16512,16514,16516,16519,16525,16523,16524,16526,16528,16533,16535,16537,16542,16543,16544,16545,16546,16547,16549,16550,16551,16553,16555,16557,16558,16559,16561,16562,16565,16566,16570,16571,16572,16573,16574,16575,16576,16578,16579,16583,16586,16587,16588,16590,16591,16595,16598,16599,16600,16601,16603,16604,16605,16607,16608,16609,16610,16611,16615,16618,16620,16621,16622,16623,16624,16625,16626,16627,16628,16630,16631,16632,16634,16636,16638,16640,16641,16642,16645,16649,16650,16651,16652,16653,16654,16655,16657,16658,16659,16662,16667,16669,16671,16678,16680,16681,16682,16684,16685,16686,16688,16689,16692,16693,16694,16700,16701,16702,16703,16704,16705,16706,16708,16709,16711,16712,16713,16714,16717,16720,16721,16722,16725,16727,16729,16730,16734,16740,16743,16745,16746,16750,16752,16758,16759,16760,16761,16762,16763,16764,16767,16768,16769,16771,16772,16773,16775,16776,16777,16779,16780,16783,16784,16786,16787,16788,16789,16791,16792,16794,16795,16796,16797,16799,16800,16801,16802,16804,16805,16806,16808,16809,16810,16812,16816,16820,16822,16823,16824,16825,16826,16829,16830,16831,16832,16833,16835,16836,16837,16838,16840,16841,16842,16844,16846,16847,16848,16851,16852,16855,16858,16859,16860,16861,16862,16865,16866,16867,16868,16869,16870,16871,16872,16875,16876, 16877,16879,16881,16883,16885,16888,16894,16895,16896,16897,16898,16901,16903,16904,16905,16908,16909,16912,16913,16916,16917,16919,16920,16923,16924,16927,16928,16929,16930,16931,16935,16936,16939,16940,16943,16944,16947,16948,16950,16951,16952,16953,16955,16958,16959,16960,16964,16967,16968,16969,16970,16971,16975,16976,16980,16983,16984,16987,16988,16991,16992,16993,16996,16997,17000,17001,17004,17007,17008,17011,17012,17014,17015,17016,17017,17020,17022,17024,17025,17027,17030,17032,17034,17038,17042,17047,17051,17052,17054,17056,17060,17064,17068,17070,17074,17077,17078,17080,17085,17087,17092,17094,17096,17100,17104,17110,17114,17117,17118,17120,17122,17126,17135,17139,17140,17143,17145,17148,17150,17157,17177,17181,17207,17209,17224,17238,17242,17243,17246,17457,17247,17248,17249,17251,17252,17253,17255,17256,17257,17259,17260,17261,17263,17264,17265,17267,17268,17269,17467,17272,17273,17275,17276,17277,17279,17280,17281,17283,17284,17285,17287,17289,17290,17291,17294,17295,17296,17299,17300,17303,17304,17307,17308,17311,17312,17315,17316,17320,17323,17324,17327,17328,17331,17332,17335,17368,17338,17339,17340,17343,17344,17347,17348,17351,17352,17355,17356,17359,17360,17363,17400,17404,17408,17412,17365,17366,17367,17370,17371,17374,17375,17378,17379,17382,17383,17386,17387,17390,17391,17394,17395,17398,17399,17402,17403,17406,17407,17410,17413,17415,17418,17421,17424,17427,17430,17442,17434,17433,17436,17364,17449,17453,17450,17481,17454,17458,17459,17463,17464,17491,17468,17495,17472,17475,17477,17292,17245,17244,17482,17438,17487,17431,17271,17270,17319,17318,17828,17505,17767,17543,17502,17503,17504,17506,17507,17508,17510,17511,17512,17514,17515,17516,17518,17519,17520,17522,17523,17524,17752,17533,17803,17530,17531,17532,17534,17535,17536,17538,17539,17540,17542,17544,17553,17591,17551,17552,17555,17556,17559,17560,17563,17564,17567,17568,17571,17572,17581,17579,17580,17583,17584,17587,17588,17592,17549,17597,17635,17595,17596,17599,17600,17603,17604,17607,17608,17611,17612,17615,17616,17807,17619,17622, 17667,17625,17671,17629,17675,17679,17636,17637,17638,17640,17641,17644,17645,17648,17649,17652,17653,17656,17657,17660,17661,17664,17665,17668,17669,17672,17673,17676,17677,17681,17685,17683,17686,17689,17692,17695,17698,17759,17710,17711,17713,17716,17719,17722,17725,17728,17731,17734,17737,17740,17618,17745,17749,17574,17526,17529,17775,17756,17763,17760,17500,17499,17548,17703,17702,17707,17817,17633,17813,17630,17809,17626,17623,17799,17797,17772,17528,17527,17577,17576,17791,17792,17787,17788,17783,17784,17821,17780,17825,17546,17498,17501,17776,17836,17837,17838,17839,17840,17841,17842,17844,17845,17846,17848,17849,17850,17852,17853,17854,17857,17858,17859,17860,17861,17862,17865,17866,17869,17870,17873,17874,17877,17878,17881,17882,17950,17946,17942,17938,17887,17915,17885,17886,17889,17890,17893,17894,17897,17898,17901,17902,17905,17906,17909,17910,17913,17914,17917,17921,17922,17925,17926,17929,17930,17933,17934,17937,17941,17945,17949,17952,17953,17954,17955,17956,17957,17958,17960,17961,17962,17965,17966,17967,17969,17970,17971,17973,17975,17976,17977,17978,17979,17981,17982,17983,17985,17986,17987,17988,17989,17990,17992,17993,17994,17996,17998,18000,18001,18002,18003,18005,18006,18007,18008,18009,18010,18012,18013,18014,18016,18017,18018,18020,18022,18024,18025,18026,18027,18028,18029,18030,18032,18033,18034,18036,18037,18038,18041,18042,18043,18044,18046,18048,18049,18050,18051,18053,18054,18055,18057,18058,18059,18060,18061,18062,18064,18065,18066,18068,18070,18072,18073,18074,18075,18077,18078,18079,18081,18082,18083,18084,18085,18086,18088,18089,18090,18092,18094,18096,18097,18098,18099,18100,18102,18103,18104,18106,18107,18108,18110,18111,18112,18113,18115,18117,18119,18120,18121,18122,18123,18124,18125,18126,18129,18130,18131,18133,18134,18137,18138,18141,18142,18146,18147,18150,18152,18154,18156,18160,18167,18171,18177,18178,18179,18181,18182,18186,18187,18190,18191,18194,18195,18198,18200,18202,18203,18204,18206,18209,18210,18212,18217,18218,18220,18225,18226,18231,18234,18235,18239,18242,18248, 18250,18251,18252,18254,18257,18258,18260,18265,18266,18268,18273,18274,18279,18282,18283,18287,18290,18297,18298,18299,18300,18302,18305,18306,18308,18313,18314,18316,18322,18323,18327,18330,18331,18335,18338,18344,18346,18348,18352,18359,18363,18368,18370,18371,18372,18375,18378,18379,18382,18383,18386,18387,18391,18392,18394,18395,18397,18399,18400,18403,18405,18408,18411,18413,18418,18419,18422,18426,18427,18430,18435,18440,18441,18442,18445,18448,18449,18452,18453,18458,18461,18464,18465,18466,18467,18469,18470,18471,18473,18474,18475,18476,18477,18478,18480,18481,18482,18484,18486,18488,18489,18490,18491,18492,18493,18494,18496,18497,18498,18501,18502,18503,18505,18506,18507,18509,18511,18512,18513,18514,18515,18516,18517,18518,18521,18522,18523,18525,18526,18527,18529,18530,18531,18533,18535,18536,18537,18538,18539,18541,18542,18543,18545,18546,18547,18549,18550,18551,18552,18553,18554,18557,18559,18560,18561,18562,18563,18564,18565,18566,18568,18569,18570,18573,18574,18575,18577,18578,18579,18581,18583,18584,18586,18587,18589,18590,18593,18594,18598,18599,18602,18603,18607,18608,18609,18610,18611,18612,18613,18615,18616,18617,18619,18620,18621,18623,18624,18626,18627,18628,18630,18632,18633,18634,18635,18637,18638,18639,18640,18641,18642,18645,18646,18649,18650,18653,18654,18656,18657,18661,18665,18667,18671,18675,18676,18680,18688,18689,18690,18693,18694,18696,18697,18700,18701,18704,18705,18709,18712,18713,18715,18717,18719,18721,18722,18727,18729,18730,18735,18737,18738,18740,18744,18745,18748,18753,18760,18761,18763,18765,18767,18769,18770,18775,18777,18778,18783,18785,18786,18788,18792,18793,18796,18801,18808,18809,18810,18813,18815,18817,18818,18823,18825,18826,18831,18832,18833,18836,18840,18841,18844,18849,18857,18859,18863,18867,18868,18872,18880,18881,18883,18884,18887,18888,18889,18892,18893,18896,18897,18900,18904,18905,18907,18908,18910,18912,18915,18918,18920,18923,18926,18928,18929,18933,18936,18937,18941,18944,18953,18954,18955,18958,18962,18963,18966,18967,18969,18974,18976,18980,18990,18992, 19000,19001,19002,19003,19004,19005,19006,19008,19009,19010,19012,19013,19014,19016,19017,19018,19020,19021,19022,19024,19025,19026,19028,19029,19030,19032,19033,19034,19036,19037,19038,19040,19041,19042,19044,19046,19049,19050,19051,19053,19054,19057,19058,19061,19062,19065,19066,19069,19070,19073,19074,19077,19078,19081,19082,19085,19086,19089,19090,19094,19097,19098,19099,19101,19102,19105,19106,19109,19110,19113,19114,19117,19118,19121,19122,19125,19126,19129,19130,19133,19134,19137,19138,19142,19144,19146,19147,19150,19153,19156,19159,19162,19165,19168,19171,19174,19181,19182,19184,19187,19190,19193,19196,19199,19202,19205,19208,19211,19216,19217,19218,19219,19220,19221,19222,19224,19225,19226,19228,19229,19230,19232,19233,19234,19236,19237,19238,19240,19241,19242,19244,19245,19246,19248,19249,19250,19252,19253,19254,19256,19257,19258,19260,19262,19265,19266,19267,19269,19270,19273,19274,19277,19278,19281,19282,19285,19286,19289,19290,19293,19294,19297,19298,19301,19302,19305,19306,19310,19313,19314,19315,19317,19318,19321,19322,19325,19326,19329,19330,19333,19334,19337,19338,19341,19342,19345,19346,19349,19350,19353,19354,19358,19360,19362,19363,19366,19369,19372,19375,19378,19381,19384,19387,19390,19397,19398,19400,19403,19406,19409,19412,19415,19418,19421,19424,19427,19432,19433,19434,19435,19436,19437,19438,19440,19441,19442,19443,19444,19445,19446,19449,19450,19452,19453,19454,19455,19456,19457,19458,19460,19465,19469,19470,19471,19473,19476,19477,19478,19479,19480,19481,19482,19484,19486,19489,19492,19493,19495,19496,19497,19498,19500,19502,19509,19510,19511,19513,19516,19517,19518,19521,19522,19524,19525,19529,19530,19533,19534,19536,19537,19538,19539,19540,19541,19543,19544,19545,19546,19548,19549,19551,19552,19553,19554,19556,19557,19558,19560,19561,19562,19563,19565,19566,19568,19569,19570,19574,19576,19577,19578,19582,19585,19586,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19601,19602,19604,19605,19607,19608,19609,19610,19611,19614,19616,19619,19620,19621,19626,19627,19628,19629, 19632,19633,19634,19636,19639,19640,19641,19644,19645,19647,19648,19650,19652,19653,19654,19658,19660,19661,19663,19664,19666,19668,19676,19677,19679,19680,19682,19684,19692,19700,19702,19703,19704,19708,19709,19710,19711,19712,19713,19714,19716,19717,19718,19720,19721,19722,19725,19726,19728,19729,19730,19733,19734,19737,19738,19741,19742,19743,19744,19745,19749,19751,19752,19753,19754,19757,19761,19764,19765,19766,19767,19768,19769,19770,19771,19772,19774,19776,19777,19779,19780,19781,19782,19784,19785,19787,19788,19789,19790,19792,19793,19794,19796,19798,19800,19802,19806,19807,19810,19811,19812,19813,19814,19816,19817,19819,19821,19823,19824,19827,19828,19829,19832,19834,19840,19842,19850,19852,19853,19855,19859,19860,19863,19867,19871,19874,19877,19879,19882,19884,19892,19894,19895,19917,19922,19937,19946,19943,19954,19955,19956,19957,19958,19959,19961,19962,19963,19964,19965,19966,19967,19968,19969,19970,19971,19972,19974,19975,19976,19978,19979,19980,19982,19985,19986,19987,19988,19990,19991,19992,19994,19997,19998,19999,20000,20002,20003,20004,20006,20007,20009,20011,20013,20014,20015,20016,20018,20021,20022,20024,20025,20026,20027,20030,20031,20032,20033,20034,20035,20038,20039,20040,20041,20042,20043,20045,20046,20047,20049,20050,20051,20052,20053,20054,20055,20058,20059,20060,20062,20065,20066,20070,20072,20074,20076,20080,20083,20086,20088,20090,20122,20123,20121,20120,20127,20126,20125,20124,20130,20129,20128,20131,20134,20133,20132,20138,20137,20136,20140,20143,20142,20145,20144,20147,20146,20150,20148,20153,20154,20152,20159,20157,20161,20163,20167,20166,20165,20169,20168,20170,20172,20175,20173,20176,20179,20177,20180,20183,20182,20181,20184,20187,20185,20188,20191,20189,20192,20195,20193,20196,20199,20197,20201,20202,20205,20208,20206,20211,20212,20215,20214,20213,20218,20221,20222,20227,20226,20231,20232,20236,20235,20239,20245,20244,20246,20248,20247,20251,20252,20257,20256,20259,20262,20263,20265,20266,20268,20271,20269,20278,20282,20284,20288,20291,20292,20295,20303,20309,20313,20317,20321,20325, 20484,20480,20476,20472,20333,20337,20341,20345,20349,20354,20361,20297,20305,20311,20315,20319,20323,20327,20396,20400,20404,20410,20335,20339,20343,20347,20351,20356,20363,20298,20296,20304,20310,20314,20318,20322,20326,20336,20334,20338,20342,20350,20364,20438,20366,20375,20373,20377,20381,20385,20389,20393,20397,20401,20405,20412,20414,20418,20422,20426,20430,20440,20444,20442,20452,20450,20454,20458,20462,20466,20470,20473,20477,20481,20485,20489,20490,20493,20497,20501,20505,20509,20513,20439,20614,20431,20427,20423,20419,20415,20408,20406,20402,20398,20394,20390,20386,20382,20378,20374,20581,20585,20520,20522,20521,20524,20525,20528,20330,20532,20331,20536,20332,20540,20541,20544,20545,20548,20549,20552,20553,20557,20559,20563,20300,20299,20301,20306,20308,20572,20307,20371,20582,20579,20367,20574,20512,20516,20571,20368,20597,20602,20357,20600,20358,20606,20359,20360,20608,20613,20433,20611,20434,20615,20435,20436,20598,20631,20445,20623,20446,20627,20447,20448,20635,20596,20607,20641,20355,20346,20329,20648,20656,20660,20664,20814,20672,20676,20680,20824,20685,20692,20902,20758,20650,20658,20662,20666,20816,20674,20678,20682,20740,20687,20747,20898,20980,20651,20649,20659,20657,20661,20665,20669,20673,20683,20681,20686,20695,20693,20706,20704,20714,20712,20716,20720,20726,20728,20735,20737,20839,20750,20748,20757,20756,20767,20760,20764,20766,20842,20942,20778,20841,20776,20777,20786,20781,20784,20785,20794,20790,20792,20793,20796,20797,20800,20801,20810,21020,20809,20813,20670,20668,20671,20684,20773,20741,20724,20830,20774,20821,20772,20789,20779,20846,20780,20844,20850,20845,20734,20852,20733,20677,20861,20863,20862,20865,20866,20869,20870,20874,20877,20879,20856,20881,20857,20885,20858,20859,20753,20967,20895,20812,20909,20752,20751,20988,20897,20906,20911,20918,20688,20916,20689,20922,20690,20691,20924,20929,20743,20927,20744,20931,20745,20746,20912,20947,20768,20939,20769,20943,20770,20771,20910,20923,20953,20951,20965,20761,20755,20970,20968,20696,20974,20697,20972,20698,20699,20702,20754,20759,20998, 20990,20652,20994,20653,21000,20654,20655,21002,21007,20707,21005,20708,21009,20709,20710,21019,20992,20803,21017,20804,21021,20805,20806,20991,21030,21036,21001,21044,21052,20892,20903,21046,21049,20893,21042,20894,21076,21051,21055,21047,21056,21048,21059,21058,21071,21069,21070,21073,21074,21077,21078,21081,21082,21085,21086,21089,21090,21095,21092,21098,21103,21101,21102,21105,21106,21109,21110,21113,21114,21117,21118,21121,21122,21125,21126,21130,21135,21133,21060,21137,21061,21141,21062,21145,21063,21149,21064,21153,21065,21157,21066,21067,20976,21168,21176,21173,20915,21177,21186,20904,20914,20694,21094,20701,20765,20985,21197,20700,21213,21289,21299,21304,21311,21314,21355,21359,21410,21422,21486,21625,21704,21721,21913,21917,21205,21204,21203,21202,21209,21208,21207,21206,21212,21211,21210,21217,21216,21215,21214,22717,21221,21220,21219,21218,21225,21224,21223,21228,21227,21226,21233,21232,21231,21230,21237,21236,21234,21241,21240,21239,21238,21244,21243,21242,21249,21248,21246,21253,21252,21251,21258,21274,21256,21255,21254,21261,21260,21259,21265,21264,21263,21262,21699,21266,21273,21272,21271,21270,21281,21280,21279,21278,21285,21284,21283,21288,21287,21286,21293,21291,21290,21296,21295,21294,21301,21300,21298,21305,21303,21302,21309,21308,21307,21313,21312,21317,21316,21315,21329,23016,21318,23027,21322,21333,21332,21331,21330,21336,21335,21340,21345,21344,21349,21348,21347,21352,21350,21357,21356,21361,21365,21364,21367,21366,21372,21371,21370,21376,21375,21374,21401,21400,21381,21380,21379,21378,21385,21383,21382,21511,21476,21389,21388,21387,21386,21391,21397,21396,21394,21405,21404,21402,23035,23031,21407,21406,21412,21411,21417,21416,21415,21414,21421,21420,21419,21424,21423,21428,21432,21430,21437,21436,21435,21434,23030,23041,21439,21445,21444,21449,21448,21446,21452,21533,21457,21456,21455,21454,21458,21465,21462,21469,21468,21466,21477,21474,21484,21489,21488,21491,21490,21497,21496,21495,21494,21572,21500,21505,21502,21507,21506,21513,21512,21510,21517,21516,21520,21519,21525,21528,21695,21532, 21530,21537,21545,21544,21543,21542,21548,21546,21553,21550,21557,21555,21554,21560,21559,21563,21568,21590,23058,21575,21574,21573,21580,21579,21578,21577,23053,21581,21588,21586,21596,21594,21593,21599,21598,21604,21602,22645,21607,21609,21616,21614,21613,21620,21618,21621,21627,21626,21636,21635,21633,21640,21638,21642,21648,23037,21656,21655,21654,21653,21660,21659,21663,22714,21669,21680,21678,21677,21682,21681,21688,22731,23014,21692,21696,21703,21701,21711,21710,21716,21715,21714,21713,21720,21719,21717,21724,21723,21728,21727,21732,21731,21730,21735,21740,21739,21744,21743,21742,21741,21748,21747,21746,21745,21752,21751,21750,21749,21756,21755,21754,21753,21760,21759,21758,21764,21763,21762,21761,21768,21767,21766,21765,21772,21771,21769,21775,21774,21773,21780,21778,21784,21782,21781,21788,21787,21792,21791,21789,21795,21793,21800,21799,21798,21797,21804,21802,21806,21812,21811,21809,21816,21815,21813,21820,21819,21817,21824,21823,21828,21827,21825,21832,21831,21829,21833,21840,21839,21837,21842,21846,21850,21854,21853,21860,21857,21862,21872,21875,21874,21879,21884,21881,21892,21891,21894,21893,21897,21901,21906,21911,22624,21924,21923,21922,21921,21926,21925,21932,21931,21930,21929,21936,21935,21934,21940,21939,21937,21944,21942,21941,21948,21947,21946,21951,21950,21949,21956,21955,21953,21960,21959,21958,21957,21964,21963,21962,21961,21968,21967,21965,21972,21971,21970,21975,21974,21973,21979,21978,21977,21983,21981,21987,21985,21991,21990,21993,21999,21997,22004,22003,22002,22008,22007,22006,22012,22011,22016,22015,22014,22013,22019,22018,22023,22022,22021,22028,22027,22026,22032,22031,22030,22029,22035,22034,22040,22039,22038,22037,22044,22043,22042,22041,22048,22047,22046,22045,22152,22997,22056,22055,22053,22060,22059,22058,22057,22064,22063,22061,22068,22067,22066,22065,22072,22071,22070,22069,22076,22073,22079,22078,22077,22084,22083,22082,22081,22088,22087,22086,22085,22092,22090,22089,22096,22095,22094,22093,22100,22098,22097,22103,22102,22112,22109,22116,22113,22118,22123,22122,22121,22127,22126, 22125,22124,22131,22130,22129,22128,22135,22134,22143,22141,22147,22146,22145,22144,23004,22150,22156,22155,22153,22163,22161,22166,22165,22164,22171,22170,22169,22168,22175,22174,22172,22179,22178,22177,22176,22183,22181,22180,22187,22186,22185,22191,22189,22188,22195,22194,22193,22197,22203,22202,22201,22200,22207,22206,22205,22204,22210,22209,22208,22215,22219,22218,22217,22216,22223,22221,22220,22226,22225,22224,22230,22229,22228,22235,22232,22239,22236,23007,22245,22250,22249,22248,22255,22253,22050,22259,22256,22262,22261,22264,22269,22268,22275,22273,22279,22277,22276,22282,22281,22287,22286,22285,22284,22291,22290,22289,22293,22292,22299,22297,22302,22300,22306,22304,22311,22313,22318,22317,22323,22322,22321,22326,22325,22329,22335,22334,22332,22339,22338,22337,22343,22342,22346,22345,22344,22350,22355,22352,22359,22356,22363,22361,22367,22366,22365,22371,22369,22368,22374,22373,22379,22378,22377,22376,22383,22382,22381,22385,22390,22389,22388,22395,22393,22392,22398,22396,22402,22406,22404,22412,22415,22414,22419,22877,22422,22421,22424,22430,22428,22433,22432,22439,22438,22436,22443,22442,22441,22447,22445,22444,22453,22452,22451,22455,22462,22460,22466,22463,22470,22468,22467,22474,22473,22471,22475,22479,22908,22486,22484,22490,22494,22492,22491,22498,22497,22502,22499,22510,22514,22522,22520,22525,22524,22530,22529,22527,22532,22538,22541,22540,22546,22545,22552,22558,22559,22566,22570,22574,22408,22049,22582,22589,22593,22596,22606,22604,22608,22614,22613,22619,22616,22623,22688,22626,22630,22651,22661,22673,22675,22694,22708,22709,22729,22732,22759,22765,22763,22775,22782,22796,22803,22809,22817,22829,22827,22835,22833,22837,22836,22839,22843,22842,22847,22850,22853,22863,22872,22876,22879,22890,22893,22896,22901,22920,22926,22930,22942,22951,22950,22985,22638,21257,21276,21267,21268,21338,22720,21306,21339,21691,21702,21706,22990,22989,22994,22411,22051,22052,22151,22148,22246,22247,22543,21480,21686,21320,21481,23020,21321,22713,21666,21675,21408,21667,22711,21409,21672,21652,22704,21440,21649,21324, 21441,21325,22625,23048,21582,23054,21569,21583,21571,21570,23012,23049,25519,23110,23063,23064,23065,23066,23067,23068,23069,23070,23072,23073,23074,25463,23794,23083,23084,23085,23086,23087,23088,23089,23090,23093,23094,23095,23096,23097,23098,23099,23100,23101,23103,23104,23105,23106,23107,23111,23112,23113,23115,23116,23117,23118,23120,23121,23125,23126,23127,23128,23129,23130,23132,23133,23134,23135,23583,23139,23140,23141,23142,23143,23148,23149,23150,23151,23152,23153,23154,23157,23158,23159,23160,23162,23163,23165,23166,23167,23169,23170,23172,23174,23175,23176,23177,23178,23180,23181,23184,23185,23186,23188,23189,23191,23192,23193,23195,23200,23201,23202,23203,23205,23206,23209,23212,23213,23216,23217,23218,23221,23223,23224,23225,23228,23232,23233,23239,23241,23242,23243,23245,23246,23247,23123,23249,23252,23253,23254,23255,23256,23258,23259,23261,23260,23264,23265,23266,23262,23270,23272,23263,23250,23276,23277,23279,23280,23281,23282,23283,23285,23286,23288,23289,23290,23291,23292,23293,23294,23297,23298,23301,23305,23307,23308,23309,23310,23311,23312,23313,23314,23316,23317,23320,23321,23323,23325,23329,23330,23332,23333,23334,23335,23339,23122,23343,23344,23345,23347,23352,23355,23357,23361,23364,23365,23370,23372,23373,23374,23375,23380,23383,23386,23389,23390,23391,23392,23394,23395,23396,23400,23401,23403,23408,23579,23412,23414,23415,23423,23424,23425,23426,23428,23430,23431,23434,23435,23437,23438,23440,23441,23444,23445,23446,23447,23472,26338,23456,23457,23458,23459,23460,23461,23462,26340,23466,23468,23474,23476,23477,23479,23480,23482,23484,23486,23487,23491,23497,23498,23500,23501,23502,23504,23509,23511,23512,23518,23519,23521,23522,23524,23528,23530,23534,23538,23539,23540,23541,23542,23543,23547,23552,23554,23557,23559,23562,23564,23565,23568,23569,23570,23572,23573,23574,23578,23587,23589,23595,23596,23602,23603,23604,23605,23606,23607,23609,26341,23614,23615,23618,23619,23601,23623,23624,23627,23630,23631,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647, 23648,23649,23650,23651,23652,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23665,23667,23668,23669,23670,23672,23674,23676,23677,23678,23679,23682,23683,23685,23687,23689,23690,23691,23692,23693,23694,23696,23700,23702,23703,23705,23706,23707,23709,23710,23711,23713,23714,23715,23718,23719,23721,23722,23723,23725,23729,23730,23731,23733,23736,23740,23744,23748,23600,23750,23753,23756,23762,23767,23768,23771,23774,23777,23782,23783,23788,23789,23793,23797,23800,23803,25439,23814,23815,23816,23817,23820,23821,23822,23823,23824,23825,23826,23827,23828,23830,23831,23833,23834,23836,23837,23838,23839,23840,23843,23844,23845,23846,23847,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23861,23862,23863,23864,23867,23868,23869,23871,23872,23873,23875,23877,23879,23881,23883,23884,23889,23891,23893,23894,23895,23896,23898,23899,23900,23902,23903,23906,23907,23908,23909,23911,23912,23915,23916,23917,23918,23919,23920,23922,23923,23924,23925,23927,23928,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,24149,26321,23946,23947,23949,23950,23951,23952,23953,23954,23955,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23969,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24025,24026,24028,24029,24030,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24045,24046,24047,24049,24050,24051,24052,24053,24054,24055,24057,24059,24060,24061,24062,24063,24064,24065,24066,24067,24069,24070,24071,24072,24073,24074,24076,24077,24078,24079,24080,24082,24083,24084,24086,24087,24088,24089,24090,24091,24092,24095,24096,24097,24099,24100,24101,24102,24104,24105,24106,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24122,24123,24129,24131,24132,24133,24134,24136,24138,24139,24140,24141,26322,24143,24153, 24146,24148,24154,24155,24156,24158,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24173,24174,24175,24176,24177,24178,24180,24181,24182,24183,24184,24186,24188,24189,24190,24191,24192,24193,24195,24196,24198,24199,24200,24201,24202,24203,24204,24205,24207,24208,24209,24210,24214,24215,24216,24217,24218,24220,24221,24223,24224,24225,24227,24228,24229,24230,24231,24232,24233,24234,24235,24237,24239,24240,24241,24243,24244,24245,24246,24247,24249,24250,24253,26327,24260,24263,24264,24265,24266,24268,23944,24270,24273,24275,24276,24281,24284,24285,24286,24288,24290,24292,24293,24295,24296,24298,24299,24300,24301,24302,24303,24304,24308,24309,24310,24312,24315,24317,24319,24321,24322,24328,24331,24332,24334,24335,24336,24339,24340,24344,24346,24347,24349,24350,24351,24352,24354,24355,24359,24360,24361,24363,24366,24369,24370,24373,24374,24376,24378,24379,24380,24382,24384,24385,24387,24388,24390,24391,24392,24393,24394,24395,24396,24400,24403,24404,24405,24406,24408,24409,24411,24413,24415,24419,24421,24429,24426,24427,24430,24435,24437,24438,24441,24443,24444,24445,24448,24449,24451,24457,24458,24459,24460,24461,24462,24465,24467,24468,24470,24471,24472,24475,24477,24478,24481,24483,24487,24491,24492,24493,24494,24496,24497,24501,24504,24505,24507,24508,24509,24510,24511,24512,24514,24515,24516,24517,24518,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24532,24533,24534,24536,24537,24538,24539,24540,24541,24543,24544,24546,24547,24548,24549,24551,24552,24553,24554,24555,24556,24557,24558,24559,24561,24563,24564,24565,24566,24568,24569,24570,24571,24572,24573,24574,24576,24577,24578,24579,24581,24582,24583,24584,24585,24586,24587,24588,24590,24591,24592,24593,24594,24596,24597,24598,24599,24600,24601,24603,24604,24605,24607,24608,24609,24610,24611,24612,24614,24615,24616,24617,24618,24619,24620,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24634,24635,24636,24637,24638,24639,24640,24641,24643,24644,24645,24646,24647,24649,24650,24651,24652,24654,24655,24656,24657,24658,24660,24661, 24662,24663,24664,24665,24667,24668,24669,24670,24671,24672,24674,24675,24676,24677,24679,24680,24682,24683,24684,24685,24686,24687,24688,24689,24691,24692,24693,24694,24695,24697,24698,24700,24701,24702,24703,24704,24707,24708,24709,24710,24711,24712,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24726,24727,24728,24729,24730,24732,24733,24734,24735,24736,24737,24738,24739,24740,24742,24743,24745,24747,24748,24750,24751,24753,24754,24755,24758,24759,24760,24761,24763,24764,24765,24766,24767,24769,24771,24772,24774,24775,24777,24780,24781,24782,24783,24785,24786,24787,24790,24792,24793,24794,24795,24798,24799,24800,24801,24802,24803,24804,24805,24806,24808,24811,24813,24819,24821,24822,24825,24826,24827,24828,24831,24833,24839,24841,24845,24846,24848,24849,24851,24854,24856,24857,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24887,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24906,24907,24908,24911,24914,24915,24917,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24933,24934,24935,24936,24937,24941,24942,24943,24945,24947,24948,24949,24950,24952,24956,24958,24959,24960,24961,24962,24964,24966,24967,24969,24972,24973,24974,24977,24979,24980,24983,24989,24991,24993,24996,24997,24998,24999,25001,25002,25003,25004,25006,25008,25009,25010,25013,25019,25020,25023,25025,25031,25033,25034,25038,25041,25043,25044,25045,25046,25047,25049,25050,25052,25054,25057,25058,25062,25064,25065,25066,25067,25069,25070,25071,25073,25074,25075,25077,25080,25082,25083,25084,25085,25086,25087,25089,25090,25092,25093,25094,25095,25097,25098,25104,25105,25107,25111,25112,25114,25115,25118,25119,25122,25125,25129,25130,25131,25132,25136,25137,25138,25140,25142,25144,25145,25146,25150,25157,25158,25159,25162,25163,25166,25168,25171,25173,25177,25180,25183,25184,25186,25188,25190,25194,25196,25197,25198,25199,25202,25205,25210,25214,25224,25225,25228,25229,25230,25231,25235,25240, 25242,25244,25247,25248,25251,25252,25254,25255,25257,25260,25262,25267,25268,25272,25273,25274,25275,25284,25286,25293,25294,25298,25302,24425,23945,25310,25315,25317,25319,25321,25322,25324,25327,25329,25330,25332,25333,25335,25336,25337,25338,25339,25340,25352,25356,25358,25360,25362,25365,25369,25370,25372,25373,25374,25375,25377,25381,25384,25387,25388,25391,25394,25400,25401,25404,25408,25413,25419,25421,25425,25427,25428,25430,25433,25434,25522,25438,25464,25468,25472,25492,25499,25503,25541,25547,25549,25561,25566,25568,25589,25595,25599,25617,25619,25626,25628,25630,25631,25634,25636,25637,25641,25644,25647,25661,25670,25671,25676,25683,25686,25689,25697,25700,25701,25703,25711,25712,25716,25725,25726,25728,25731,25736,25742,25752,25753,25755,25756,25757,25758,25761,25763,25766,25767,25769,25772,25773,25774,25776,25785,25788,25789,25791,25794,25799,25815,25816,25817,25818,25819,25821,25823,25825,25827,25829,25832,25833,25835,25837,25842,25851,25854,25855,25857,25860,25865,25881,25882,25884,25885,25886,25890,25891,25893,25894,25896,25899,25908,25911,25912,25914,25917,25922,25940,25944,25950,25951,25952,25953,25957,25961,25962,25964,25968,25974,25981,25982,25989,25991,25993,25995,25997,25998,25999,26003,26004,26005,26007,26012,26015,26016,26020,26022,26026,26027,26028,26039,26054,26056,26058,26063,26065,26067,26071,26075,26076,26079,26081,26090,26093,26094,26109,26110,26113,26141,26162,26172,26175,26181,26189,26201,26207,26209,26224,26230,26239,26240,26276,26296,26304,25448,23124,23145,23138,23137,23211,23168,25511,23179,23210,23575,23588,23592,26312,26313,26316,24422,23943,23942,24142,24145,24259,24258,25277,25508,23464,26334,23465,23613,26342,26346,23610,26350,23080,23076,22477,22457,22537,22198,22138,22119,22114,22110,22108,22104,21685,22632,22629,25518,23109,23371,23079,23082,23075,23612,26336,25442,23078,23077,22192,26363,26430,26365,26646,26482,26715,27616,26766,26946,26801,26905,27012,26748,26368,26902,26903,26378,26382,26383,26387,27921,26403,27051,26414,26418,26415,27929,26384,26419,26420,26421,26669, 26425,26764,26907,26893,26369,26379,26798,26439,26441,26400,26364,26446,26449,26402,26401,26453,26454,26460,26463,26651,26508,26468,26568,26471,26521,26926,26476,26473,26486,26507,26489,26856,26878,26859,26512,26522,26923,26809,27035,26528,26530,26531,26532,26534,26535,26517,26541,26549,26361,26560,26561,26596,26491,27019,26731,26752,26957,26575,26774,26582,26679,26915,26595,26693,26829,26821,26837,26825,26816,26838,26877,26612,26511,26537,26613,26614,26617,26510,26621,26527,26574,26972,26626,26627,26629,26631,26632,26633,26634,26635,26671,26638,26639,26643,26598,26599,26759,26601,26648,26656,26654,26657,26664,26665,27053,26674,26571,26735,26594,26689,26698,26706,26707,26690,26691,26717,26597,26721,26722,26726,26727,26730,26734,26699,26701,26705,26484,26745,26917,26687,26738,26590,27905,26938,26960,26467,26753,26817,26822,26826,26830,26564,26550,26776,27026,26780,26495,26797,26685,27002,26773,26808,26526,26813,26786,26871,26849,26794,26504,26505,26602,26609,26543,26542,27792,26547,26503,26795,26792,26577,26783,26576,26785,26611,26847,26853,26854,26553,26499,26498,26502,26501,26546,26545,26848,26552,26866,26497,26496,26556,26886,26637,26640,26440,26429,26375,27754,26392,26438,26393,26394,26431,26897,26391,26999,26900,26428,26427,26796,26480,26918,26592,26920,26523,26475,26931,26751,26466,26932,26933,26740,26942,26744,26789,26961,26965,26967,26728,26970,26708,26625,26628,26659,26790,26513,26986,26514,26469,26472,27857,26603,26485,26470,26739,26702,26529,26372,26371,26951,26950,26954,26754,26586,27043,27011,26416,26757,26788,26686,27016,26585,26551,26360,26559,26914,26479,26494,26925,26474,26607,27018,26506,27022,26911,26533,26615,26579,27023,26581,26580,26852,27001,26525,26524,27041,26397,26411,26413,26412,26423,26572,26710,26422,26448,26770,27356,27390,27351,27417,27072,27084,27770,27766,27552,27062,27061,27060,27711,27555,27941,27431,27064,27065,27063,27409,27415,27066,27094,27088,27070,27089,27303,27091,27096,27188,27105,27451,27101,27504,27495,27116,27444,27508,27642,27493,27878,27299,27844,27602,27115,27256,27337, 27350,27368,27355,27104,27103,27111,27148,27131,27467,27527,27180,27302,27346,27360,27357,27147,27129,27717,27563,27259,27128,27134,27133,27132,27140,27301,27297,27142,27438,27437,27442,27246,27365,27331,27344,27126,27678,27832,27287,27305,27741,27151,27157,27311,27155,27342,27470,27160,27159,27165,27163,27162,27169,27168,27167,27205,27172,27171,27175,27174,27179,27181,27183,27187,27472,27194,27195,27202,27229,27559,27523,27569,27220,27227,27234,27525,27242,27238,27223,27725,27211,27215,27222,27219,27460,27226,27225,27228,27230,27232,27465,27617,27475,27243,27494,27520,27455,27457,27251,27657,27583,27289,27264,27268,27488,27327,27325,27329,27130,27591,27304,27369,27284,27282,27343,27296,27386,27122,27106,27716,27076,27680,27136,27137,27278,27279,27310,27309,27315,27553,27318,27689,27787,27320,27492,27114,27489,27112,27113,27599,27594,27330,27750,27107,27339,27281,27312,27286,27352,27364,27110,27336,27108,27109,27751,27359,27735,27338,27292,27173,27170,27385,27391,27389,27393,27271,27399,27402,27395,27078,27379,27378,27405,27380,27407,27435,27383,27384,27411,27545,27387,27143,27144,27441,27149,27512,27254,27646,27446,27253,27100,27102,27099,27516,27245,27517,27453,27244,27260,27261,27120,27461,27459,27224,27464,27236,27161,27158,27192,27118,27480,27117,27500,27487,27501,27505,27509,27513,27521,27533,27541,27080,27075,27085,27290,27940,27781,27774,27548,27946,27069,27561,27565,27571,27575,27654,27584,27590,27627,27598,27606,27214,27218,27581,27609,27146,27248,27250,27622,27626,27458,27638,27650,27661,27662,27485,27585,27659,27483,27316,27671,27673,27682,27686,27688,27077,27700,27703,27709,27721,27059,27068,27534,27734,27124,27447,27125,27740,27154,27732,27127,26362,26376,26895,26436,26399,26451,26450,27177,26642,26641,26694,26913,26478,26477,26993,26992,26493,26492,26749,26714,26434,26433,26769,26747,26481,26883,26868,26565,40223,26833,26814,26845,26616,26624,26619,26841,26509,26676,26782,26876,26573,26812,26875,26793,26842,26555,27361,27586,40230,27332,27596,27326,27333,27285,27738,27317,27322,27319,27321,27362,27890, 27744,26681,26589,26678,26587,26588,26390,27040,26388,26389,26404,26405,26374,26373,27758,26891,27423,26435,27419,27422,27082,27376,27767,27079,27771,27083,27775,27698,27778,27141,27263,27262,27348,26548,27593,26682,27558,27808,26562,26539,26538,27815,26806,26570,27805,26367,27392,27034,26955,27156,27696,26566,27298,27257,27618,27851,27855,27017,27839,26567,27864,27867,26465,27810,27496,27846,27879,27497,27886,27669,27484,27897,26490,27895,26519,27894,26488,26487,27860,26695,27909,26758,27913,27010,27917,27049,26395,26398,27925,26410,26386,26385,26444,27208,27291,27210,27209,27549,27705,27275,27546,27073,27276,29107,28255,29081,27956,29146,28860,29084,29069,28411,28298,28484,28581,28303,28578,29039,27955,27954,27953,27960,27959,27958,27964,27963,27962,27961,27968,27966,27965,27972,27971,27970,27969,27976,27975,27974,27973,27978,27977,27984,27982,27981,27988,27987,27986,27985,27991,27990,27996,27995,27994,27993,27999,27998,27997,28004,28003,28002,28001,28008,28007,28005,28011,28010,28009,28016,28014,28013,28020,28019,28018,28017,28024,28022,28021,28028,28027,28025,28032,28031,28030,28029,28036,28035,28034,28040,28039,28038,28037,28044,28042,28041,28048,28047,28046,28045,28051,28050,28049,28055,28054,28053,28060,28059,28058,28064,28063,28062,28061,28068,28067,28066,28071,28070,28069,28076,28075,28074,28073,28080,28079,28078,28084,28083,28082,28081,28088,28087,28086,28085,28091,28090,28089,28096,28095,28093,28100,28099,28098,28104,28103,28102,28101,28108,28106,28105,28112,28111,28110,28109,28115,28114,28113,28120,28119,28118,28124,28123,28122,28121,28127,28126,28132,28131,28130,28129,28136,28135,28134,28133,28139,28138,28137,28144,28143,28141,28148,28146,28145,28152,28151,28150,28155,28154,28153,28160,28159,28158,28164,28163,28162,28161,28168,28167,28166,28165,28172,28171,28170,28176,28175,28174,28173,28180,28178,28177,28184,28183,28182,28181,28188,28187,28186,28192,28191,28189,28195,28194,28200,28199,28197,28204,28203,28208,28207,28206,28205,28211,28210,28209,28216,28215,28213,28219,28218,28224,28223,28221,28226,28225, 28232,28231,28229,28236,28235,28240,28238,28237,28244,28243,28248,28247,28246,28245,28252,28251,28250,28249,28256,28254,28259,28257,28267,28265,28272,28269,28276,28275,28274,28279,28277,28287,28285,28289,28296,28294,28293,28299,28304,28302,28301,28307,28306,28305,28312,28311,28310,28309,28316,28315,28314,28313,28319,28318,28317,28324,28323,28322,28321,28328,28327,28326,28325,28332,28331,28330,28329,28335,28340,28339,28338,28337,28344,28342,28341,28348,28347,28346,28345,28352,28356,28355,28354,28359,28364,28363,28361,28366,28365,28372,28371,28370,28369,28376,28375,28374,28373,28377,28384,28383,28382,28381,28385,28392,28391,28389,28395,28394,28393,28400,28398,28402,28408,28407,28406,28405,28412,28410,28416,28415,28413,28419,29067,28420,28417,28423,28422,28427,28878,28991,28432,28431,28429,28434,28440,28439,28438,28437,28444,28443,28441,28448,28446,28445,28452,28451,28449,28456,28458,28457,28463,28467,28466,28472,28471,28476,28475,28480,28477,28481,28488,28487,28486,28490,28489,28496,28494,28499,28500,28498,28503,28501,28506,28511,28510,29092,28513,28515,28514,29050,28518,28516,28522,28520,28527,28525,28530,28528,28535,28533,28532,28538,28537,28536,28543,28542,28541,28553,28557,28561,28563,28560,28564,28571,28569,28568,28575,28574,28572,28576,28582,28587,28586,28594,28603,28602,28606,28609,28610,28616,28630,28629,28633,28632,28631,28636,28639,28637,28640,28645,28643,28646,28651,28650,28654,28663,28666,28665,28669,28672,28673,28693,28692,28691,28696,28695,28699,28697,28701,28705,28703,28706,28711,28709,28713,28720,28729,28732,28731,28735,28738,28739,28759,28758,28762,28761,28760,28768,28767,28771,28770,28774,28777,28786,28789,28788,28792,28795,28796,28814,28822,28828,28827,28826,28831,28833,28835,28840,28838,28846,28852,28857,28856,28867,28865,28869,28873,28871,28876,28875,28877,28882,28881,28885,28886,28889,28894,28896,28900,28902,28901,28906,28913,28928,28932,28936,28937,28941,28945,28947,28949,28954,28957,28955,28964,28967,28972,28986,29003,29017,29020,29026,29030,29043,29061,29073,29086,29088,29096,29109,29117,29116, 29119,29124,29125,29128,29115,29078,29072,29079,29103,29153,29105,29036,29147,27557,27206,21562,22644,29175,22689,23376,23463,26652,29194,29196,29200,29201,29204,29205,29206,29207,29193,29191,29192,29197,29198,29202,29208,29209,30767,29236,29241,29244,29248,29228,29230,29231,29574,30774,29237,29238,29239,29242,29243,29245,29246,29249,29250,29581,29254,29257,29258,29259,29260,29262,29263,29265,29266,29267,29268,29270,29271,29276,30778,29277,29278,29279,29281,29282,29283,29285,29286,29290,29291,29293,29294,29298,29299,29300,29301,29302,29305,29306,29307,29310,29314,29315,29316,29318,29319,29322,29323,29623,29328,29330,29331,29333,29334,29339,29341,29342,29345,29346,29347,29349,29350,29356,29357,29359,29361,29362,29365,29366,29367,29368,29369,29371,29372,29373,29374,29375,29376,29377,29379,29382,29383,29384,29327,29388,29391,29392,29393,29395,29396,29397,29400,29401,29403,29404,29407,29408,29413,29417,29215,29219,29223,29227,29255,29311,29358,29418,29420,29421,29422,29425,29428,29429,29430,29433,29435,29436,29438,29439,29443,29445,29447,29449,29451,29455,29457,29461,29463,29464,29466,29467,29468,29469,29470,29471,29473,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29490,29491,29492,29493,29494,29495,29496,29497,29498,29500,29501,29502,29504,29506,29508,29510,29512,29515,29516,29518,29519,29521,29522,29523,29525,29526,29530,29531,29534,29538,29539,29544,29547,29627,29326,29556,29537,29325,30693,29558,29563,29566,29567,29195,29226,29572,29578,29584,29598,29603,29609,29411,29324,29626,29632,29633,29636,29637,29640,29641,29645,29646,29649,29650,29653,29654,29657,30088,30042,29852,29769,29773,30119,29820,30046,29816,29999,30077,29812,29788,29792,29859,29824,29781,30083,29780,29808,29796,29800,30573,29662,29661,30404,29865,30256,30400,29869,30252,30396,29873,30388,29876,29668,30445,30018,29884,29691,29670,29888,29671,29892,29897,30091,30263,29901,30424,29676,30262,29678,29684,29683,30291,30384,29904,29690,29692,29689,29696,29693,30345,29908,29913,29994,30278,30272,30271,30059,30568,30234, 30233,30029,30028,30145,30148,29714,29713,30352,29722,29727,29726,30230,30031,30030,29740,29762,30476,29752,29747,29749,30585,30284,30503,29936,30034,29944,30111,29763,29952,30095,30243,29761,29685,29686,29687,29772,29771,29770,29776,29775,29774,29778,29777,29783,29782,29787,29786,29785,29791,29790,29789,29794,29793,29798,29797,29803,29802,29801,29807,29811,29810,29805,29813,29998,29821,30559,29923,29826,29825,29831,29830,29832,29834,29833,29838,29837,29842,29841,29847,29846,29850,29849,30599,30304,29854,29858,29857,29856,29863,29861,29866,29864,29868,29872,29879,29877,29885,29887,29891,29895,29806,29898,29896,29902,29907,29906,29911,29814,30074,29916,29995,29924,29922,29928,29933,29939,29937,29941,29945,29949,29953,30023,29956,29963,29969,29979,29976,29983,29980,29985,29880,29965,29961,29992,30002,30380,30248,29881,29967,29966,30027,30033,29940,30511,30036,29943,30005,30043,30048,30004,30052,30318,30055,30061,30060,30065,30064,30134,29973,29972,30072,29964,29917,30238,30237,29996,30082,30090,29818,29819,29919,29914,30267,30420,30266,29760,30239,29759,29977,30044,30357,30098,30307,29962,29975,29715,29716,29737,29738,29948,30531,30113,29951,29822,29823,30007,29926,30125,29725,30311,29721,30314,29766,29765,30139,30141,30140,30143,30152,29731,30157,29730,29735,29732,30165,29729,30163,30515,30164,30169,29733,30168,30171,30173,30174,30181,30194,30011,30175,30179,30180,30185,30184,30177,30009,30008,30197,30100,30101,30203,30149,30104,30103,30161,30211,30110,30109,29736,30107,30217,30527,30216,30188,30190,30226,30281,30227,30231,30228,30711,30232,30236,30241,29757,29758,30244,30014,30246,30247,30013,30251,29682,30255,29677,30289,30261,30265,29707,29701,29705,29706,30277,29991,30634,30410,30287,29664,30260,30245,29663,30067,30138,30070,29688,30320,30306,30305,30491,30097,30096,30331,30313,30316,30484,30322,30321,30326,30330,29744,29718,29719,30131,30369,29669,30444,30443,29667,30456,29665,29666,30298,30300,30467,30297,30471,30133,29720,29717,29741,29742,29754,29673,30054,29697,30343,30056,30347,30129,29723,29724,29748,29745, 29698,30365,29700,29675,30373,30376,30382,30392,30414,30416,29660,29712,30053,30432,30366,30371,30437,29883,30452,29882,30459,30463,30475,30340,30482,30543,30339,29756,29753,30309,30324,30000,30308,30360,30001,30499,30553,30500,30506,30519,30523,30535,30539,30547,30501,30560,30279,29710,30572,29920,30557,30280,29711,29709,30488,29932,30587,29935,29829,29959,29957,29958,30601,30604,30629,30636,30644,30625,30648,30630,30652,30651,30642,30609,30606,30605,30615,30614,30619,30618,30658,30626,30639,30628,30627,30632,30411,30283,30655,30633,30673,30496,30676,30497,30375,30229,29679,30686,30688,30692,29704,29353,29708,30563,30698,30694,29702,30728,30715,30672,30733,30678,30624,30622,30623,30670,30680,30721,29351,29352,30748,29308,30752,29252,30758,29224,30762,29220,30763,29216,29213,29212,29234,29233,29274,29273,29630,29336,30582,29845,29836,30160,30154,30159,30105,30580,30106,30578,30147,30797,30202,30801,30102,30805,30010,30809,30221,30813,30189,30817,30225,30144,29672,30827,30637,30834,30833,30832,30831,30838,30837,30836,30842,30841,30840,30853,30846,30844,30843,30850,30847,30854,30851,30857,30858,30862,30861,30859,30866,30865,30870,30869,30874,30873,30871,30878,30877,30882,30881,30885,30890,30889,30888,30892,30891,30902,30901,30900,30899,30906,30905,30903,30910,30909,30907,30914,30913,30911,30918,30917,30915,30922,30919,30926,30923,30930,30929,30928,30927,30934,30933,30932,30938,30937,30942,30941,30946,30944,30950,30954,30958,30956,30962,30961,30959,30966,30965,30969,30883,30977,30982,30972,30976,30975,30895,30855,30973,30990,30989,30988,30987,30994,30993,30991,30998,30997,30995,31008,31002,31001,30999,31006,31003,31010,31014,31013,31012,31011,31018,31017,31016,31022,31021,31025,31030,31029,31028,31034,31033,31037,31040,31042,31045,31044,31043,31050,31049,31053,31058,31057,31056,31055,31069,31059,31211,31062,31061,31060,31066,31064,31070,31068,31067,31074,31071,31075,31082,31081,31080,31079,31086,31085,31083,31090,31089,31094,31097,31095,31101,31109,31114,31112,31111,31116,31115,31122,31126,31129,31107,31127,31123,31133, 31137,31142,31146,31149,31153,31157,31161,31165,31169,31173,31177,31182,31186,31189,31193,31197,31201,31205,31209,31213,31217,31221,31226,31230,31234,31238,31241,31245,31134,31132,31138,31141,31145,31144,31150,31148,31152,31156,31160,31166,31170,31167,31174,31172,30884,31181,30955,31190,31188,31192,31196,31202,31206,31203,31210,31208,31214,31218,31225,31229,31228,31233,31231,31039,31242,31108,30856,31293,31281,31298,31278,31277,31275,31276,31280,31279,31285,31284,31289,31271,31292,31274,31273,31272,31303,30974,30985,31124,31312,31322,31315,31311,31912,31344,31478,31903,31336,31505,32158,31476,31347,31349,31455,31441,31468,31431,32166,31379,31341,31444,31414,31400,31345,31348,31904,31354,31355,31356,31357,31359,31361,31362,31364,31365,31366,31368,31370,31372,31373,31374,31377,31380,31381,31384,31387,31388,31389,31941,31566,31399,32176,31403,31398,31401,31402,31405,31409,31421,31407,31408,31420,32171,31412,31415,31416,31419,31425,31424,31426,31429,31432,31433,31436,31438,31439,31440,31442,31443,31445,31446,31447,31448,31451,31453,31457,31463,31465,31466,31474,32554,32514,32521,32512,31536,31342,31920,31499,31332,31486,31489,31548,31430,31411,31434,31410,31553,31394,31460,31390,31397,31392,31393,31573,31490,31339,31578,31334,31333,31350,32058,32049,31702,31653,32295,32131,31595,31601,31896,32133,31615,31622,31598,31628,31878,31658,31992,31668,31892,32310,31948,31947,31684,32150,31870,32366,31692,32118,31748,31886,31603,32092,32084,31806,40299,31760,32099,31820,31775,31785,31780,32016,32040,31790,31789,31796,31794,31793,31507,31955,31803,31801,31831,31518,32526,31898,31834,31708,31621,31705,32140,31847,31843,40348,31862,31856,31905,31880,32123,31610,31833,31516,31906,31521,31526,31527,31531,31534,31535,31922,31931,31928,31932,31935,31787,31590,31591,31938,31943,31406,31942,31983,31783,31962,31975,32062,31630,31949,31988,32339,31666,31667,31996,31890,31609,32002,32004,31592,31605,31824,32019,32015,31868,31867,32069,31517,32522,32039,32038,31926,32057,31704,31706,31703,31939,31940,31713,40383,31683,31894,31685,31682,31981, 31619,31620,32047,32051,31625,31626,31979,32012,31353,32558,31866,31865,32071,32076,31506,31585,32097,32100,32532,31827,31768,31769,31508,32357,31483,31916,32508,31530,31701,31587,31588,31709,31710,31596,32027,31616,31617,31614,31694,31717,31700,32199,32188,31778,32020,31839,31721,31335,31485,31337,31338,32008,31497,32010,32011,40291,32035,31774,31757,31754,31765,32107,32115,31481,32106,31343,31480,31346,31574,31579,31582,40292,32013,31502,31543,31544,32165,32576,32574,31552,31549,32173,31554,31557,31558,31563,31564,31569,31540,32186,31589,31586,32146,32153,31779,32149,32151,31716,31715,31966,31752,32368,32330,32220,31634,32223,31639,32228,31642,31633,32232,32218,31635,32241,32237,31647,31649,31643,32221,31645,31640,32245,31636,32253,32255,31665,31664,31662,32263,32261,31677,32267,31676,32271,31675,31733,32288,31737,32291,31736,31732,32294,31739,32298,31738,31741,31745,32259,31663,31743,32311,32313,31876,31873,31875,31648,31723,31674,31756,31809,31795,31696,31669,31735,32227,31641,34652,32125,32251,31638,32240,31680,31688,31613,31611,31799,31772,31770,32304,31657,32317,32246,32226,32285,32472,32286,32284,32376,32484,31655,31654,32371,32214,31631,31632,32229,32215,32216,32325,32496,31725,32324,31727,31724,31670,32276,31593,32382,32380,32452,32384,32386,32388,32390,32391,32395,32393,32392,32399,32397,32396,32400,32402,32403,32404,32406,32407,32468,32492,32408,32410,32409,32414,32418,32500,32420,32422,32421,32426,32428,32429,32434,32480,32432,32476,32433,32425,32381,32385,32419,32329,32331,31751,32488,32464,32460,32456,32448,32444,32415,31539,32507,31533,32511,31529,31520,31525,32520,31523,32525,31519,32529,32101,31826,32537,31759,32542,31836,40242,32072,32569,31498,32560,31495,31496,32562,31923,31538,32551,31537,32534,31829,32531,31828,31825,31764,31854,31762,31763,31815,40300,40357,31797,31720,31767,31718,31719,32347,31612,31686,32142,31690,31687,31678,31986,31679,31746,31340,32570,32167,31872,31781,32005,32515,32540,32543,32549,32587,32588,32589,32590,32768,32777,34636,32685,32642,32621,32593,32594,32592,32595,32792, 34690,32626,32828,32831,32838,32607,32610,32611,32614,32832,32620,32622,32628,34447,32630,34449,32634,32648,32813,32790,32709,32713,32678,32673,32643,32644,32645,32646,32819,34466,34621,32649,32650,32654,32655,32656,32658,32660,32661,32662,32663,32664,32665,32667,32668,32669,32670,32677,32675,32679,32683,32703,32692,32715,32731,32755,32727,32723,32739,32743,32808,32751,32687,32691,32695,32699,32707,32711,32719,32735,32747,32759,32680,32682,32686,32684,32742,32693,32694,32696,32700,32714,32712,32718,32716,32883,32726,32729,32730,32728,32734,32737,32738,32744,32748,32750,32805,32764,32796,32802,32605,32599,32786,32816,32763,32765,32766,32814,32785,32784,32827,32618,32624,32606,32603,34479,32843,32846,34419,34486,32855,32853,32873,32871,34591,34425,32875,32859,32878,32867,34520,34519,32887,32886,33245,32904,32908,32911,34429,34592,32921,32920,32919,32918,32929,32928,32927,32926,32937,32936,32935,32934,32945,32944,32943,32942,32948,32947,32946,32953,32954,32957,32955,32961,32959,32958,32965,32964,32963,32962,32969,32967,32966,32973,32972,32971,32977,32976,32975,32974,32981,32980,32979,32985,32984,32983,32982,32989,32987,32986,32993,32992,32991,32990,32997,32996,32995,32994,33001,33000,32998,33005,33004,33002,33009,33008,33007,33006,33013,33011,33010,33016,33015,33014,33019,33018,33025,33023,33022,33027,33026,33030,33033,33034,33037,33041,33040,33039,33038,33045,33044,33043,33047,33046,33049,33051,33050,34543,33055,33054,34556,33060,33059,33065,33064,33063,33062,33069,33068,33067,33066,33072,33070,33077,33076,33074,33081,33078,33085,33084,33083,33082,33089,33088,33087,33086,33093,33092,33091,33090,33097,33096,33095,33101,33100,33099,33098,33105,33104,33103,33102,33109,33108,33107,33106,33113,33112,33111,33110,33117,33115,33114,33120,33119,33124,33123,33129,34319,33132,33131,33130,33135,33134,33139,33138,33137,33144,33141,33148,33147,33146,33145,33152,33151,33150,33149,33156,33158,33161,34299,34433,33163,34442,33168,33167,33443,33171,33170,33187,34535,33179,33178,33185,33182,33186,33189,33193,33192,33195,33194,33201,33198, 33205,33203,33209,33207,33206,33212,33211,33210,33216,33215,33214,33221,33220,33219,33218,33225,33224,33222,33229,33228,33233,33232,33231,33230,33236,33237,33241,33244,33243,33242,33248,34525,33250,33251,33257,33256,33255,33254,33261,33260,33259,33258,33265,33262,33267,33266,33271,33270,33277,33274,33283,33279,33278,33282,33289,33287,33286,33293,33297,33300,33298,33304,33303,33308,33307,33312,33311,33317,33315,33321,33325,33324,33323,33328,33333,33337,33339,34557,33341,33345,33344,33349,33353,33352,33351,33357,33361,33358,33364,33362,33368,33372,33371,33370,33377,33375,33381,33383,33387,33389,33392,33396,33395,33394,33401,33400,33801,33419,33423,33429,33428,33426,33430,33432,33435,33434,33438,33157,33439,33446,33453,33451,33450,33455,33454,33465,33464,33462,33478,33485,33484,33483,33482,33913,33912,33489,33567,33493,33492,33491,33490,33501,33500,33499,33498,33513,33521,33529,33528,33523,33526,33537,33535,33540,33525,33538,33544,33545,33549,33496,33553,33563,33571,33577,33576,33581,33585,33589,33574,33597,33598,33602,33550,33617,33614,33546,33586,33607,33638,33609,33629,33632,33631,33630,33645,33639,33620,33653,33654,33657,33658,33666,33669,33670,33674,33673,33672,33671,33678,33677,33682,34216,34751,34764,33891,33486,33689,33698,33683,33701,33720,33667,33696,33675,33708,33687,32923,33730,33729,33728,32925,33738,33747,32932,33745,33751,33752,33763,32940,33761,33767,33771,33768,33779,33787,33783,33235,33795,33794,33792,33798,33797,33405,33810,33809,33808,33813,33403,33817,33827,33828,33407,33825,33833,33843,33841,33461,33459,33850,33844,33859,33858,33857,33856,33861,33652,33870,33869,33868,33883,33656,33881,33880,33887,33899,33897,33660,33662,33906,33900,33923,33693,33926,33924,33930,33928,33932,33939,33938,33937,33936,33943,33942,33947,33946,33945,33951,33950,33949,33954,33953,33952,33957,33956,33961,33960,33967,33965,33975,33974,33973,33972,33979,33978,33976,33982,33987,33986,33985,33984,33990,33988,33994,33992,33996,34000,34006,34005,34011,34014,34017,34022,34026,34030,34029,34033,34039,34043,34042,34046,34051,34050, 34055,34054,34059,34057,34056,34062,34061,34067,34065,33716,34083,34080,34084,34091,34088,34095,34093,34102,34105,34110,34109,34115,34113,34112,34119,34117,34123,34125,34130,34129,34134,34133,34132,34139,34137,34136,34142,34146,34144,34151,34152,34159,34158,34163,34161,34160,34164,34170,34259,34173,34178,34182,34187,34190,34188,34194,34193,34192,32952,32950,33832,33509,33604,33643,33649,33508,33512,33514,33506,33515,34200,33524,33522,33530,33533,33532,33497,33495,33554,33494,33560,33558,33562,33566,33559,33625,33575,33580,33584,33582,33588,33590,33592,33635,33502,33628,33505,34224,33681,33680,33679,33665,33664,33663,33712,33715,33717,33692,33694,33854,34343,33706,33705,33704,33726,33725,32922,32924,33737,32931,33668,32933,33750,33699,32930,32939,33676,32941,33777,33234,33778,33789,33804,33800,33404,33402,33812,33408,33406,33458,33460,33866,33724,33862,33651,33876,33655,33888,33710,33659,34221,34226,34231,34227,34245,34244,34243,34253,34251,34265,34269,34271,34277,34276,34281,34278,34284,34283,34288,32688,34291,34295,32891,32862,32903,32852,32854,34320,34379,34326,34338,34350,34367,34381,32938,33409,33661,34412,32900,32861,32858,34421,32860,32876,32877,32912,32913,33164,33165,34437,34293,33169,33166,34168,32633,32631,32632,34454,32640,34465,32810,32811,34477,34720,32844,34482,34417,32856,32857,34450,32627,34490,34453,34492,34446,34682,32778,32591,34501,34694,34503,32689,34323,33128,34515,34410,32888,32889,34521,34409,33246,33247,34532,34176,33180,33181,34537,34397,33056,33057,34548,33390,34551,33281,33061,33058,33334,33335,34564,34286,34229,34571,34569,34570,34574,34582,34577,32915,34586,34598,34603,34601,34596,34618,32672,34624,32647,34626,32720,34575,34634,32674,32789,32612,32895,32896,34650,34472,34648,34470,34471,34664,32868,32884,32885,32917,32625,32623,34677,34680,34679,34721,34685,34686,34689,32598,32638,32596,32597,34698,34499,32767,32600,32601,32825,32824,32651,34459,32653,32639,32773,32774,34640,34639,34706,32708,33121,34676,33503,33252,33416,33412,33384,33268,33196,33444,33440,32909,32872,32851,32845,33536, 32960,33052,33048,33188,33172,33176,33174,34668,34660,34656,32849,32863,33153,33184,33264,33032,32956,32635,32636,32865,32864,32847,34475,34715,32848,32869,33732,33709,33691,33721,33703,32803,33618,33685,33875,33684,33727,34734,33714,33688,33702,33700,33686,33695,33915,33488,33543,33606,33621,32842,32893,32898,32897,34302,33126,30675,30286,30663,34800,34799,34798,34797,34978,34985,36842,34894,34849,34830,34802,34801,34803,34808,35002,36899,34833,35039,35044,35045,34820,34817,34824,34821,35043,34831,34829,34839,36654,34837,36652,34841,34859,35020,34997,34918,34922,34885,34882,34856,34855,34854,34853,35032,36675,36830,34858,34857,34861,34868,34867,34865,34871,34870,34869,34876,34875,34874,34880,34879,34878,34877,34886,34888,34892,34896,34916,34903,34928,34944,34968,34940,34936,34952,34956,35017,34964,34900,34904,34908,34912,34920,34924,34932,34948,34960,34972,34891,34889,34893,34895,34949,34902,34901,34907,34911,34921,34923,34925,34927,35094,34933,34938,34937,34939,34941,34946,34945,34955,34959,34957,35013,34975,35004,35010,34814,34812,34827,34992,35026,34976,34974,34973,35028,34993,34994,35040,34825,34835,34813,34816,36686,35056,35053,36617,36628,36695,35068,35062,35080,35082,36800,36630,35086,35072,35091,35079,36723,36724,35098,35099,35448,35109,35113,35118,36634,36799,35124,35125,35126,35127,35132,35133,35134,35135,35140,35141,35142,35143,35148,35149,35150,35151,35153,35154,35155,35156,35163,35160,35162,35164,35166,35167,35168,35169,35170,35171,35172,35174,35175,35176,35177,35178,35180,35181,35182,35183,35184,35185,35186,35188,35189,35190,35191,35192,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35207,35208,35209,35211,35212,35213,35214,35215,35216,35218,35219,35221,35222,35223,35226,35227,35228,35230,35231,35234,35235,35239,35236,35243,35240,35244,35245,35246,35247,35248,35249,35250,35254,35255,35252,35258,35259,36748,35262,35263,36759,35265,35266,35268,35269,35270,35271,35272,35273,35274,35275,35277,35279,35280,35281,35283,35284,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296, 35297,35298,35299,35300,35301,35302,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35322,35323,35325,35326,35329,35330,35338,36525,35335,35336,35337,35340,35341,35344,35345,35346,35347,35350,35351,35352,35353,35354,35355,35356,35357,35358,35360,35367,35364,36506,36638,35370,36645,35373,35374,35650,35378,35379,35394,36740,35386,35387,35388,35391,35395,35392,35396,35397,35402,35403,35404,35407,35408,35410,35412,35414,35415,35417,35418,35419,35421,35422,35423,35424,35425,35426,35427,35428,35429,35431,35432,35433,35436,35437,35438,35439,35441,35440,35444,35449,35450,35451,35453,36734,35459,35458,35460,35461,35462,35463,35464,35465,35466,35467,35468,35471,35474,35475,35478,35479,35480,35483,35490,35486,35487,35491,35492,35494,35495,35496,35500,35505,35507,35509,35510,35513,35514,35517,35518,35520,35522,35524,35528,35529,35530,35533,35536,35540,35546,36766,35544,35548,35549,35552,35556,35557,35558,35560,35564,35567,35569,35571,35573,35577,35578,35579,35580,35582,35584,35590,35594,35592,35597,35601,35602,35603,35604,35605,36008,35626,35630,35632,35633,35635,35639,35637,35642,35643,35647,35359,35646,35655,35656,35658,35659,35662,35663,35668,35669,35671,35687,35688,35689,35690,35691,36120,36121,35692,35774,35696,35697,35698,35699,35704,35705,35706,35707,35716,35724,35732,35733,35730,35735,35740,35742,35745,35728,35747,35749,35748,35752,35701,35756,35770,35778,35780,35781,35784,35788,35792,35783,35800,35807,35811,35759,35823,35819,35755,35795,35816,35848,35814,35832,35837,35838,35839,35850,35847,35826,35858,35857,35862,35861,35869,35874,35873,35877,35878,35879,35880,35881,35882,35885,36423,36956,36973,36094,35695,35894,35901,35892,35906,35924,35876,35903,35884,35914,35896,35130,35935,35936,35937,35128,35943,35950,35137,35952,35954,35961,35966,35145,35968,35970,35974,35977,35982,35990,35986,35442,35998,35999,36001,36003,36004,35608,36015,36016,36017,36020,35610,36024,36030,36037,35614,36032,36040,36046,36048,35664,35666,36055,36053,36062,36063,36064,36065,36068,35859,36075, 36076,36077,36086,35863,36088,36089,36090,36102,36104,35867,35865,36111,36109,36126,35898,36131,36133,36135,36137,36141,36142,36143,36144,36145,36146,36147,36150,36151,36152,36154,36155,36156,36159,36160,36161,36164,36165,36168,36169,36170,36172,36178,36179,36180,36181,36182,36183,36185,36187,36190,36191,36192,36193,36195,36197,36199,36201,36205,36209,36211,36212,36214,36219,36224,36227,36231,36235,36236,36240,36242,36246,36247,36251,36254,36255,36258,36259,36262,36264,36265,36267,36268,36270,36272,35921,36286,36289,36293,36294,36297,36298,36300,36307,36312,36315,36316,36318,36320,36321,36322,36324,36326,36332,36335,36336,36339,36340,36341,36342,36344,36345,36347,36351,36353,36354,36361,36362,36363,36366,36368,36369,36373,36375,36466,36380,36383,36387,36390,36395,36397,36399,36400,36401,35157,35159,36041,35712,35809,35852,35854,35713,35717,35723,35715,35722,36403,35729,35731,35739,35736,35737,35700,35702,35763,35703,35765,35767,35771,35775,35766,35828,35782,35785,35789,35791,35793,35799,35797,35842,35711,35833,35708,36431,35886,35887,35888,35870,35871,35872,35917,35922,35920,35899,35897,36059,36549,35909,35910,35911,35931,35932,35131,35129,35944,35138,35875,35136,35955,35908,35139,35146,35883,35144,35984,35443,35983,35996,36013,36009,35609,35611,36021,35613,35615,35667,35665,36071,35933,36067,35860,36085,35864,36097,35919,35868,36426,36429,36438,36435,36448,36449,36450,36456,36458,36468,36472,36478,36480,36481,36484,36487,36489,36490,36493,34899,36498,36502,35102,35069,35110,35063,35061,36524,36585,36530,36542,36554,36573,36589,35147,35612,35866,36619,35105,35070,35065,36626,35071,35085,35084,35117,35116,35369,35368,36642,36496,35372,35375,36377,34842,34844,34843,36663,34851,36668,35023,35022,36680,36923,35055,36691,36622,35067,35066,36659,34840,36699,36656,36697,36655,36891,34991,34804,36704,36903,36710,34898,36527,35332,36721,36614,35097,35096,36730,36615,35455,35454,36735,36385,35385,35384,36746,36603,35261,35260,36751,35599,36756,35484,35264,35267,35543,35542,36767,36495,36433,36776,36778,36777,36781,36790,36786, 35122,36796,36806,36808,36810,36802,36825,34883,36827,34860,36833,34931,36780,36838,34881,34998,34823,36852,35104,36856,36859,36677,36853,36679,36678,36869,35078,35093,35092,35120,34834,34836,36880,36885,36886,36930,36888,36895,36892,34805,34845,34807,34806,36907,36706,34979,34811,34810,35034,35035,34864,36666,34862,34852,34981,34980,36846,36847,36913,34919,35324,36881,35710,35457,35621,35617,35589,35473,35401,35649,35645,35112,35081,35064,35054,35101,35741,35165,35257,35253,35393,35377,35381,35383,36873,36865,36861,35058,35076,35363,35389,35469,35237,35161,34848,34847,35074,35075,35060,36682,36920,35059,35077,35941,35913,35900,35929,35912,35015,35822,35890,36078,35891,35930,36941,35923,35895,35905,35907,35889,35904,36118,35693,35750,35817,35825,35050,35049,36882,34815,34809,35025,34996,36510,35100,35107,36857,36922,36511,35334,36997,36998,36999,37000,37001,37002,37003,37005,37006,37007,37018,37009,37011,37012,37013,37016,37017,37020,37022,37021,37025,37026,37028,37029,37030,37033,37034,37037,37038,37040,37041,37042,37045,37046,37050,37053,37054,37055,37059,37060,37065,37066,37067,37068,37069,37070,37072,37073,37074,37076,37077,37078,37080,37081,37082,37084,37085,37088,37089,37092,37093,37094,37095,37096,37097,37098,37099,37101,37102,37105,37106,37109,37111,37113,37117,37121,37123,37125,37126,37128,37129,37130,37134,37052,37142,37145,37139,37143,37144,37064,37024,37138,37153,37154,37155,37156,37157,37158,37160,37161,37162,37164,37175,37165,37166,37168,37169,37172,37173,37177,37178,37179,37180,37181,37182,37183,37185,37186,37190,37193,37194,37195,37197,37198,37202,37207,37205,37210,37211,37212,37213,37214,37218,37221,37222,37223,37224,37234,37228,37380,37225,37226,37227,37229,37231,37233,37235,37236,37237,37240,37244,37245,37246,37247,37248,37249,37250,37252,37253,37254,37257,37262,37264,37266,37274,37277,37279,37280,37283,37284,37285,37289,37294,37276,37296,37292,37298,37302,37305,37309,37314,37318,37322,37326,37330,37334,37338,37342,37345,37349,37354,37358,37362,37366,37370,37374,37378,37382,37386,37389,37393,37397, 37401,37406,37410,37297,37299,37301,37306,37310,37311,37313,37315,37319,37323,37327,37329,37333,37336,37337,37339,37051,37346,37124,37353,37355,37359,37363,37365,37369,37372,37373,37375,37377,37381,37390,37394,37395,37398,37400,37208,37405,37275,37023,37459,37447,37462,37446,37441,37442,37444,37443,37448,37449,37451,37452,37455,37440,37460,37437,37438,37439,37473,37137,37150,37291,37480,37486,37485,37481,38065,37673,37515,37660,38058,38310,37504,37498,37524,37691,37690,38276,37654,37528,37526,37635,37510,37646,37611,38319,37765,37559,37512,37507,37521,37511,37594,37578,37514,37768,37527,37517,37771,38057,37536,37535,37534,37533,37539,37537,37544,37542,37541,37548,37546,37552,37550,37549,37556,37553,37558,37557,37562,37567,37566,37565,38098,37760,37579,38336,37583,37580,37577,37584,37581,37591,37604,37586,37585,37596,38326,37588,37593,37592,37597,37600,37601,37608,37605,37610,37609,37614,37620,37619,37618,37624,37623,37621,37628,37627,37626,37631,37629,37633,37643,37641,37648,37656,37522,37684,40107,37506,38073,37500,37499,37530,37501,37525,37674,37736,37612,37589,37616,37590,37748,37576,37638,37572,37573,37570,37569,37762,37681,37509,37773,37519,37665,37520,37532,37529,39046,37850,37851,38452,38263,40505,38042,38837,38441,38264,38265,37815,37816,37803,38102,37825,37826,38040,37852,37855,37858,38419,38412,38104,38105,40457,38271,38033,38437,37873,38250,37916,37921,37806,37807,37952,40521,40429,37956,40131,38226,37951,37993,37957,37958,37963,37960,37973,38182,37974,37981,40513,37979,40445,37698,38114,37980,37982,38164,37709,38004,38023,38005,37882,39743,39514,39585,37817,38189,38012,38014,37954,38024,38026,37994,38056,37853,37854,38406,38043,38044,38255,37922,38046,40475,37847,38006,37711,38063,37714,37717,37716,37720,37725,37724,38079,38086,38081,37967,38090,37969,37792,37791,38094,38041,38096,37587,38097,38195,38137,38108,37965,38116,38130,38192,37823,38103,38140,39919,40468,37859,40487,38148,37784,37790,38156,37805,40530,37985,38207,37986,38027,38285,38028,38174,37710,38175,38176,38083,37780,37794,38183,37781,37919, 38095,37869,38092,40465,37870,40462,38139,37819,37818,38187,37795,37821,37820,38134,38166,37683,40155,38287,38029,38030,38202,37934,38199,38214,37931,38216,37953,40437,37699,37774,38228,38225,38000,38306,38238,38221,37948,37947,37700,37701,39942,38243,37776,38300,37663,38069,37721,37786,37785,37800,37880,37812,37797,37814,37813,40453,37884,38350,37962,38018,37887,37505,37661,37503,37502,38162,37686,37998,38159,38295,37995,38293,37955,40425,37943,38234,38246,37657,38235,37516,37658,37513,37769,37772,37777,37992,38165,37697,37732,37740,38316,37671,37670,38278,37696,37741,37744,38331,37747,37752,37751,37754,37753,37757,37735,38341,37787,38274,37961,38272,38270,37885,37886,38121,38464,37924,39954,38831,38370,37827,38375,37838,38378,37835,37828,38382,38372,37834,38397,38393,37846,37844,37842,38377,37840,37837,38401,37833,38409,38407,37914,37913,38416,38418,37860,38420,37861,38424,37862,37895,38431,37896,37902,37900,38443,37903,38448,37904,37899,38453,37909,38413,37910,37907,37911,38467,38465,38035,38038,38036,37845,37893,37863,39038,38845,38482,38484,38486,38488,38490,38494,38496,39408,38990,39326,38869,38502,38505,38873,38536,38877,38880,39051,38509,38507,38511,39228,38515,38516,38519,38520,38523,38525,38533,38531,38534,38535,38538,39351,38893,39231,38553,38554,38561,38559,38568,38575,38576,38577,38591,38574,39238,39833,38601,38582,38974,39196,38606,38607,38996,38976,39005,38618,38619,39342,39360,38626,38629,38630,39186,38635,38709,38637,38638,38636,39011,38647,38696,39346,38659,38656,38662,39247,39249,38664,38663,39014,38941,38678,39067,38682,38679,38681,39055,39204,38732,38697,38530,38529,38528,38702,38703,38586,38711,38713,38734,38735,38736,38738,38739,38740,38744,38745,38747,38748,38751,38752,38753,38755,38756,38757,38760,38761,38764,38765,38767,38768,38769,38771,38775,38776,38773,38784,38785,38781,38971,38797,39181,38919,38799,38800,38802,38927,38809,38807,38808,38811,38812,38815,38816,38818,38819,38823,38824,40023,39282,38835,38839,38840,38841,38842,38844,38847,38849,38853,38857,38858,38860,38868,38866,38870,38874, 38772,38879,38881,38883,38886,38887,38890,38780,38896,38908,38917,38920,38925,38928,38930,38932,38936,38940,38944,38948,39369,38960,38963,38962,38965,38968,38865,38585,39212,39175,37915,38864,38998,39001,39002,39081,39006,39008,38937,39017,38934,38793,38789,38904,38905,38595,38730,38592,38570,38573,38569,39265,38589,38728,38901,38900,38583,38579,38907,38560,38558,39199,38557,39036,39044,38543,38545,38547,39027,38565,38788,39363,39052,38957,38729,39113,38617,38616,38650,38649,38677,39065,38942,38796,38794,38598,38915,38597,39291,38594,38733,38700,38590,39079,39077,38608,38609,39091,38640,39089,38641,38644,38639,39101,38642,39098,38669,39105,38646,38670,38673,39108,38718,39116,38725,39120,39135,39031,39030,39127,38978,39133,39134,39171,39136,39032,39114,38724,38723,39087,39145,38614,38615,39153,39155,39056,39057,38643,39059,39162,38674,39062,39242,39187,39192,39193,38605,38604,38689,38690,38687,38686,38492,38987,39207,39213,38988,39217,38521,39221,38517,38512,39222,38514,38513,38550,38549,39235,38581,38599,38603,39414,39240,39382,38480,39224,39223,39208,38495,38566,38587,39330,38563,38527,39294,37926,39280,39281,39285,39053,39054,39307,39289,39292,38950,39296,38685,39300,38651,38622,38621,39264,39312,39313,38500,38497,38499,38498,39269,39274,39270,39266,38620,38623,38654,38653,38506,39276,38542,39353,39354,39357,38593,38625,38624,38655,38658,38541,39375,38539,38504,38977,38524,38493,38489,38485,38481,38483,39384,38544,38508,38510,39277,39398,39374,39377,39314,39319,38862,38863,39320,39323,39334,39338,38951,38827,39287,39431,39647,38634,39478,39507,38600,39705,39876,39420,39425,38710,38707,38706,39434,39419,39418,39189,38666,39015,38668,39063,38676,38684,39440,39584,39688,39499,39612,39573,39448,39449,39471,39656,39509,39479,39441,39745,39588,39472,39597,39455,39532,39456,39592,39467,39498,39494,39459,39460,39552,39451,39576,39541,39477,39483,39442,39443,39523,39524,39519,39558,39537,39538,39468,39543,39551,39767,39452,39553,39555,39652,39755,39566,39750,39570,39636,39464,39454,39462,39480,39513,39522,39521,39582,39759, 39453,39561,39516,39600,39598,39488,39463,39465,39605,39609,39466,39620,39618,39617,39621,39529,39632,39469,39623,39628,39470,39635,39473,39637,39641,39474,39475,39481,39654,39482,39659,39484,39657,39661,39485,39450,39790,39530,39781,39487,39676,39546,39671,39772,39677,39679,39855,39491,39690,39689,39495,39698,39697,39500,39501,39497,39702,39502,39504,39505,39457,39506,39706,39445,39446,39565,39564,39569,39568,39562,39580,39724,39559,39557,39556,39674,39673,39736,39675,39681,39742,39710,39709,39714,39713,39718,39717,39722,39721,39761,39723,39730,39729,39734,39733,39774,39735,39489,39518,39785,39490,39572,39571,39793,39670,39798,39527,39802,39447,39808,39545,39812,39548,39510,39188,39883,39821,39884,39239,39890,39388,38912,38913,39831,39237,38910,39386,39836,38911,39826,38708,39846,39540,39851,39684,39493,39492,39859,39692,39863,39496,39864,39594,39871,39577,39872,39458,39415,39534,39243,39416,39183,39244,38921,39184,39893,38918,38185,39907,38929,39912,38926,40414,38449,37905,38379,37836,38167,37868,38403,37831,38390,37865,38050,37879,37938,38460,37856,38469,38400,38380,38446,40061,38438,38440,39960,40073,37848,37849,39951,38368,37830,37829,38385,38436,38367,38366,38477,40085,37891,38478,37897,37892,37811,38427,37789,39964,39966,40041,39970,39968,39974,39972,39971,39975,39977,39978,39979,39981,39982,39986,39984,39983,39990,39988,39987,40057,40081,39994,39992,39993,39996,40000,40089,40006,40004,40005,40008,40014,40013,40016,40069,40018,40065,40017,40009,39965,39969,39999,38833,38832,38956,38955,38830,40019,37925,40077,40053,40049,40045,40037,40033,39995,37728,40098,37726,40102,37722,37715,37718,40109,37712,40112,37708,40116,38232,38001,38055,40129,38052,40133,38003,40138,38173,38201,40160,38820,38813,39824,39248,38805,39542,38633,38632,39422,39741,39915,40145,37693,40151,38280,37688,37687,40159,38078,37729,40142,37730,37942,40122,37999,37941,37944,38020,37946,37937,38303,38299,37930,37988,39935,37929,37978,38218,37888,37949,37890,37889,39927,37878,38269,37875,37874,37867,38142,37866,39086,39159,39092,38985,38983,38984, 38981,39130,38979,38980,38721,39028,38719,38720,39109,39110,38611,39151,38613,38610,37918,39082,37508,40176,38324,38031,37959,37783,40249,40190,38503,38826,40201,39367,37782,37779,37801,37822,40221,26832,27328,40229,40239,40246,40164,39245,39180,40259,31500,31503,32156,31501,40276,32556,40280,32014,31805,32029,31810,31818,31812,31811,31814,31813,40304,32359,32162,31583,32160,31580,40312,31575,31570,40317,40326,40327,40331,31331,40335,31352,40336,32075,40345,32078,32088,32087,40355,32091,32096,32095,40361,32355,40367,31509,32109,40374,40372,31786,31729,32367,31731,31728,31607,32280,31672,31608,31714,31997,31712,31711,31597,32128,32023,31594,31791,31851,32017,31792,32083,32079,32031,40342,31808,31807,31822,40286,32033,31823,40391,31864,40395,31835,32548,32289,31776,31755,31761,31858,31900,31758,32539,40413,40124,37940,37939,40421,38022,37936,37935,37989,38297,40433,37990,37928,37927,40441,38220,37976,37975,40449,38010,37877,37876,38048,38267,38049,38145,40461,40469,38146,37857,40472,31884,32053,32052,32584,37809,37808,40493,38150,40497,37871,40501,38258,37799,37798,40506,38016,37972,37971,40517,38210,37933,37932,40522,37984,40529,38289,37997,37996,38170,22683,23598,40542,40543,40544,40545,40547,40548,40549,40551,40552,40553,40555,40556,40557,40559,40560,40561,40563,40564,40565,40567,40568,40569,40571,40572,40573,40575,40576,40577,40579,40580,40581,40583,40584,40585,40587,40588,40589,40591,40592,40593,40595,40596,40597,40599,40600,40601,40603,40605,40606,40608,40609,40612,40615,40618,40621,40624,40627,40630,40633,40636,40639,40642,40645,40648,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40692,40693,40694,40695,40696,40698,40699,40701,40702,40703,40704,40705,40706,40708,40711,40712,40716,40718,40719,40722,40724,40727,40728,40731,40732,40735,40738,40740,40743,40745,40746,40747,40749,40754,40755,40756,40758,40759,40760,40763,40765,40766,40767,40768, 40769,40773,40774,40775,40780,40782,40787,40789,40794,40797,40799,40800,40801,40741,40803,40804,40806,40809,40810,40814,40815,40816,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40851,40852,40854,40855,40856,40858,40859,40862,40863,40864,40866,40868,40870,40872,40873,40876,40880,40884,40888,40889,40892,40893,40897,40901,40905,40906,40907,40909,40911,40914,40916,40917,40918,40922,40923,40924,40925,40927,40929,40930,40931,40934,40935,40939,40940,40951,40954,40957,40960,40903,40963,40964,40966,40971,40976,40742,40991,40995,41014,40902,41029,41031,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41087,41089,41090,41091,41093,41094,41095,41096,41097,41098,41099,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41142,41143,41144,41145,41146,41147,41150,41151,41153,41154,41155,41156,41157,41158,41159,41162,41163,41164,41166,41167,41168,41169,41170,41174,41175,41177,41178,41179,41181,41182,41183,41184,41185,41186,41187,41189,41190,41191,41193,41194,41195,41196,41197,41198,41200,41202,41203,41204,41206,41207,41208,41210,41211,41213,41214,41215,41216,41217,41218,41222,41223,41226,41227,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41241,41242,41243,41244,41246,41247,41248,41250,41251,41252,41254,41255,41256,41257,41259,41260,41263,41264,41267,41268,41270,41271,41272,41273,41275,41276,41277,41279,41282,41284,41291,41292,41293,41294,41295,41296,41300,41301,41303,41304,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41321,41322,41324,41328,41329,41331,41332,41334,41335,41336,41337,41338,41339,41340, 41341,41342,41343,41344,41345,41346,41347,41348,41349,41350,41352,41353,41354,41355,41356,41357,41358,41361,41362,41363,41364,41366,41368,41372,41376,41379,41380,41381,41382,41383,41384,41386,41387,41388,41390,41392,41394,41395,41396,41400,41404,41408,41412,41413,41414,41416,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41449,41450,41451,41452,41453,41455,41456,41458,41459,41460,41461,41463,41464,41465,41466,41467,41468,41469,41470,41471,41475,41478,41479,41481,41482,41484,41485,41486,41489,41491,41492,41494,41495,41496,41497,41498,41500,41501,41502,41503,41504,41505,41506,41509,41510,41511,41512,41513,41515,41516,41517,41521,41522,41523,41524,41527,41530,41531,41532,41533,41538,41544,41545,41546,41547,41548,41550,41551,41552,41554,41559,41561,41562,41563,41564,41567,41568,41570,41571,41572,41573,41574,41575,41577,41579,41580,41582,41589,41592,41594,41595,41597,41599,41600,41601,41602,41604,41605,41607,41608,41609,41610,41611,41613,41614,41615,41616,41617,41619,41620,41621,41622,41623,41624,41626,41627,41628,41629,41630,41631,41634,41635,41636,41637,41638,41641,41643,41644,41647,41652,41653,41654,41655,41656,41659,41660,41663,41665,41666,41667,41669,41670,41673,41674,41676,41677,41678,41679,41680,41681,41682,41683,41685,41686,41687,41688,41689,41691,41692,41693,41696,41701,41702,41703,41705,41707,41711,41712,41715,41716,41718,41722,41725,41727,41728,41730,41734,41738,41742,41743,41747,41752,41753,41756,41758,41759,41762,41763,41764,41765,41766,41767,41768,41769,41771,41772,41773,41774,41775,41776,41777,41779,41780,41781,41782,41783,41784,41785,41787,41788,41789,41790,41791,41793,41794,41795,41797,41798,41799,41800,41801,41802,41803,41804,41805,41807,41808,41810,41814,41817,41818,41819,41821,41823,41824,41825,41826,41828,41830,41834,41837,41838,41840,41841,41842,41843,41844,41845,41846,41847,41849,41850,41851,41852,41854,41855,41856,41857,41858,41859,41861,41862,41863,41866,41867,41868,41870,41871,41872, 41873,41876,41878,41879,41881,41882,41883,41884,41885,41886,41887,41888,41890,41891,41893,41894,41897,41898,41899,41900,41901,41902,41904,41906,41907,41910,41911,41912,41914,41916,41919,41920,41921,41922,41923,41925,41927,41928,41930,41931,41932,41933,41934,41935,41937,41939,41940,41944,41946,41947,41948,41949,41951,41952,41954,41957,41959,41960,41962,41963,41964,41965,41967,41968,41971,41972,41975,41976,41978,41979,41980,41981,41982,41983,41987,41988,41989,41994,41998,42002,42006,42009,42014,42025,42030,42038,42039,42041,42042,42044,42045,42046,42051,42053,42055,42060,42061,42062,42067,42070,42072,42074,42077,42082,42094,42098,42101,42111,42119,42124,42126,42129,42132,42133,42141,42146,42150,42152,42157,42159,42160,42169,42171,42177,42179,42187,42192,45641,42207,42202,42206,42209,42217,42219,42221,42226,42227,42228,42229,42231,42232,42234,42238,42242,42245,42248,42249,42196,42251,42253,42254,42256,42257,42258,42260,42262,42263,42264,42266,42267,42269,42271,42275,42279,42281,42283,42286,42289,42290,42293,42299,42304,42306,42309,42310,42320,42321,42322,42324,42327,42328,42330,42333,42335,42339,42348,42349,42352,42353,42355,42358,42359,42360,42361,42362,42363,42364,42365,42368,42369,42373,42376,42377,42378,42381,42383,42385,42389,42392,42394,42395,42397,42398,42399,42402,42403,42404,42405,42406,42407,42410,42411,42413,42414,42415,42416,42419,42422,42427,42428,42433,42434,42437,42438,42440,42441,42442,42445,42446,42448,42449,42451,42452,42453,42456,42457,42459,42460,42461,42464,42465,42466,42469,42473,42474,42476,42479,42481,42484,42488,42492,42494,42496,42504,42506,42508,42510,42512,42513,42515,42516,42519,42520,42521,42524,42525,42526,42528,42530,42531,45650,42535,42538,42542,42543,42544,42546,42548,42552,42555,42559,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42575,42576,42577,42578,42580,42581,42582,42583,42584,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42597,42598,42600,42601,42603,42604,42605,42607,42608,42609,42610,42612,42613,42615,42616,42617,42618,42619, 42620,42621,42622,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42655,42656,42657,42658,42659,42660,42663,42664,42665,42667,42668,42669,42670,42671,42672,42675,42676,42678,42680,42681,42682,42683,42684,42687,42688,42689,42691,42692,42693,42695,42696,42697,42698,42699,42700,42701,42703,42704,42705,42708,42709,42710,42711,42712,42714,42715,42716,42718,42719,42720,42722,42723,42724,42725,42728,42729,42730,42731,42732,42735,42736,42739,42740,42743,42744,42745,42746,42747,42748,42749,42750,42751,42752,42753,42755,42756,42758,42759,42760,42762,42763,42764,42766,42767,42769,42770,42771,42774,42775,42778,42779,42780,42782,42783,42785,42786,42787,42789,42790,42792,42798,42799,42803,42804,42805,42806,42810,42811,42813,42814,42815,42816,42818,42819,42820,42821,42822,42823,42824,42825,42826,42828,42829,42830,42832,42833,42838,42839,42841,42842,42843,42844,42846,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42860,42861,42862,42863,42864,42865,42866,42868,42869,42870,42871,42873,42876,42878,42882,42886,42887,42890,42891,42892,42893,42894,42895,42896,42898,42900,42902,42903,42904,42906,42910,42914,42918,42922,42925,42926,42930,42931,42932,42933,42934,42935,42936,42937,42938,42939,42940,42941,42942,42943,42944,42945,42947,42948,42949,42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961,42965,42966,42967,42968,42970,42971,42972,42973,42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42987,42988,42992,42993,42996,42997,42998,42999,43001,43003,43004,43006,43008,43009,43010,43011,43012,43013,43014,43016,43017,43018,43019,43020,43021,43023,43025,43026,43029,43030,43031,43032,43033,43035,43038,43039,43040,43045,43046,43048,43055,43056,43057,43058,43060,43061,43062,43064,43066,43067,43071,43072,43073,43075,43078,43079,43080,43082,43083,43084,43085,43086,43087,43089,43092,43094,43101,43103,43104,43106,43107,43109,43112,43113,43114,43115,43117,43118,43119,43120, 43121,43123,43124,43125,43127,43129,43130,43131,43132,43133,43134,43135,43136,43138,43139,43140,43141,43142,43143,43144,43148,43149,43150,43151,43153,43155,43158,43164,43165,43166,43167,43170,43171,43174,43175,43176,43177,43180,43181,43184,43185,43187,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43201,43202,43205,43206,43210,43211,43212,43213,43215,43217,43219,43226,43228,43230,43232,43235,43236,43238,43241,43244,43248,43251,43252,43255,43265,43266,43267,43268,43270,43271,43272,43275,43276,43277,43278,43279,43281,43282,43283,43284,43285,43286,43287,43289,43290,43291,43292,43293,43294,43295,43297,43298,43299,43300,43301,43302,43303,43304,43305,43307,43308,43309,43311,43312,43313,43314,43315,43317,43318,43320,43322,43324,43327,43328,43329,43331,43333,43336,43337,43338,43340,43342,43344,43348,43349,43351,43352,43353,43354,43355,43356,43357,43358,43359,43360,43361,43363,43364,43366,43367,43368,43369,43370,43371,43372,43373,43375,43376,43379,43380,43382,43385,43386,43387,43388,43390,43391,43392,43393,43395,43396,43397,43398,43399,43400,43402,43404,43405,43407,43408,43409,43412,43413,43414,43415,43416,43418,43419,43420,43424,43426,43427,43430,43431,43432,43433,43434,43435,43437,43439,43440,43442,43443,43444,43445,43446,43447,43449,43454,43455,43456,43458,43459,43461,43462,43464,43466,43467,43469,43471,43472,43474,43475,43477,43478,43479,43482,43483,43486,43487,43488,43490,44309,44321,43491,44311,43496,43500,43504,43508,43513,43516,43529,43532,43539,43540,43544,43545,43548,43549,43550,43551,43555,43557,43564,43565,43566,43567,43572,43576,43578,43581,43584,43596,43600,43605,43611,43619,43628,43630,43631,43637,43638,43645,43648,43652,43658,43659,43661,43666,43671,43673,43679,43681,43687,43698,43699,43703,43707,43712,43718,43720,43724,43726,43727,43730,43732,43733,43735,43737,43739,43743,43748,43750,43751,43752,43753,43754,43757,43759,43760,43761,43762,43763,43765,43766,43767,43769,43770,43772,43774,43778,43782,43784,43787,43791,43792,43796,43807,43809,43812,43823,43824,43825,43827,43828,43831,43833,43834,43836, 43838,43852,43853,43854,43856,43857,43858,43859,43862,43863,43864,43865,43868,43869,43872,43873,43876,43879,43880,43882,43884,43888,43892,43894,43895,43897,43898,43899,43900,43902,43903,43906,43907,43908,43909,43910,43911,44411,43914,43917,43919,43922,43931,43935,43939,43941,43943,43946,43948,43952,43954,43956,43960,43963,43965,43971,43974,43991,44003,44005,44007,44009,44010,44012,44013,44014,44017,44020,44021,44023,44024,44025,44026,44027,44029,44032,44034,44037,44038,44042,44044,44045,44048,44052,44057,44065,44073,44077,44083,44086,44092,44093,44099,44100,44101,44104,44116,44120,44124,44126,44139,44142,44156,44164,44166,44167,44169,44173,44190,44205,44216,44233,44237,44261,44263,44269,44272,44277,44278,44283,44287,44288,44290,44302,44304,44310,44312,44327,44330,44340,44350,44353,44354,44357,44359,44381,44396,44403,44419,44421,44430,44431,44432,44433,44434,44435,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44449,44450,44451,44453,44457,44459,44460,44461,44462,44463,44464,44465,44467,44470,44472,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44499,44500,44502,44504,44505,44508,44510,44512,44513,44514,44515,44516,44517,44518,44520,44521,44522,44528,44529,44530,44532,44533,44534,44535,44536,44537,44538,44540,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44561,44562,44563,44565,44569,44570,44571,44572,44573,44575,44576,44578,44580,44581,44582,44583,44584,44586,44587,44588,44589,44590,44591,44592,44593,44595,44596,44597,44599,44600,44601,44603,44604,44605,44606,44607,44608,44613,44617,44618,44621,44622,44623,44624,44625,44627,44629,44630,44631,44632,44634,44635,44636,44637,44638,44639,44641,44642,44644,44647,44649,44650,44651,44652,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44665,44667,44668,44671,44673,44675,44679,44686,44687,44688,44690,44693,44696,44698,44703,44705,44709,44710,44715,44717,44718,44723,44724,44725,44729,44731,44732, 44733,44735,44736,44743,44745,44747,44752,44756,44759,44764,44766,44770,44772,44775,44777,44784,44785,44791,44792,44793,44795,44797,44800,44803,44805,44809,44812,44814,44816,44817,44818,44819,44820,44823,44830,44837,44851,44855,44861,44864,44888,44908,44913,44914,44919,44920,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44935,44936,44937,44939,44940,44941,44943,44944,44945,44946,44947,44948,45089,44952,44953,44956,44960,44964,44968,44951,45093,44950,44954,44955,44959,44958,44962,44963,44966,44967,44970,44971,44973,44974,44975,44976,44977,44978,44981,44982,44985,44986,44989,44990,44992,44993,44994,44996,44997,45001,45002,45004,45005,45006,45007,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45025,45027,45029,45031,45032,45033,45034,45035,45036,45037,45038,45040,45042,45043,45044,45045,45046,45047,45048,45052,45054,45056,45058,45059,45061,45063,45065,45068,45070,45071,45076,45080,45084,45088,45090,45092,45094,45095,45097,45099,45101,45104,45108,45112,45116,45120,45122,45126,45127,45129,44999,45131,45133,45135,45137,45146,45148,45149,45160,45164,45166,45168,45172,45174,45176,45178,45180,45183,45184,45186,45187,45190,45191,45194,45195,45198,45199,45200,45203,45204,45207,45210,45267,45279,45271,45219,45222,45285,45229,44998,44949,45011,45223,45226,45211,45275,45215,45214,45213,45270,45269,45264,45263,45286,45287,45288,45289,45290,45291,45292,45293,45294,45296,45297,45298,45300,45301,45302,45304,45305,45306,45307,45308,45309,45452,45427,45311,45313,45317,45321,45325,45329,45330,45333,45334,45316,45314,45315,45319,45318,45322,45323,45326,45327,45331,45336,45337,45338,45341,45342,45343,45345,45346,45349,45350,45353,45354,45357,45358,45359,45360,45361,45365,45366,45368,45369,45370,45371,45373,45374,45376,45377,45378,45380,45381,45382,45383,45384,45385,45386,45387,45389,45391,45392,45394,45396,45397,45398,45399,45401,45402,45403,45404,45405,45407,45408,45409,45410,45411,45413,45415,45417,45419,45421,45424,45426,45428,45430,45431,45433,45438,45441,45445,45449,45451,45453,45455, 45457,45460,45462,45464,45466,45469,45473,45477,45481,45483,45485,45487,45362,45492,45494,45496,45498,45500,45502,45507,45512,45513,45525,45527,45533,45535,45537,45539,45541,45545,45547,45549,45550,45551,45554,45555,45558,45559,45562,45565,45566,45569,45570,45571,45574,45575,45576,45578,45581,45582,45583,45586,45587,45588,45591,45592,45363,45312,45310,43701,43700,44371,42199,42534,42532,45647,44030,45639,45657,45658,45659,45660,45662,45663,45666,45667,45670,45671,45674,45675,45678,45679,45680,45682,45683,45684,45686,45687,45690,45691,45694,45695,45696,45698,45699,45700,45702,45703,45704,45706,45707,45708,45710,45711,45712,45714,45715,45716,45718,45719,45720,45722,45724,45725,45726,45727,45730,45731,45734,45735,45738,45739,45742,45743,45746,45747,45750,45751,45754,45755,45758,45759,45762,45763,45766,45767,45770,45771,45774,45775,45778,45779,45782,45783,45786,45787,45790,45793,45794,45664,45796,45797,45668,45800,45801,45672,45804,45805,45676,45808,45809,45812,45813,45816,45817,45688,45820,45821,45692,45824,45825,45828,45829,45832,45833,45836,45837,45840,45841,45844,45845,45848,45849,45852,45853,45856,45857,45861,45862,45864,45865,45868,45869,45872,45873,45876,45877,45880,45881,45884,45885,45888,45889,45892,45893,45896,45897,45900,45901,45904,45905,45908,45909,45912,45913,45916,45917,45920,45921,45924,45925,45929,45930,45932,45933,45936,45937,45940,45941,45944,45945,45948,45949,45952,45953,45956,45957,45960,45961,45964,45965,45968,45969,45972,45973,45976,45977,45980,45981,45984,45985,45988,45989,45992,45993,45999,46000,45998,46003,46002,46007,46006,46011,46010,46015,46014,46019,46018,46023,46022,46027,46026,46031,46030,46035,46034,46039,46038,46043,46042,46047,46046,46051,46050,46055,46054,46059,46058,46063,46065,46067,46068,46071,46074,46077,46080,46083,46086,46089,46092,46095,46098,46101,46104,46107,46110,46116,46117,46118,46120,46121,46123,46124,46125,46127,46128,46129,46132,46133,46136,46137,46139,46140,46141,46143,46144,46145,46147,46148,46149,46151,46152,46153,46155,46156,46157,46159,46160,46161,46163,46164,46165, 46167,46168,46169,46171,46172,46173,46176,46177,46179,46181,46184,46185,46186,46188,46189,46192,46193,46196,46197,46200,46201,46204,46205,46208,46209,46212,46213,46216,46217,46220,46221,46224,46225,46228,46229,46232,46233,46236,46237,46240,46241,46244,46245,46249,46253,46254,46255,46258,46259,46131,46262,46263,46135,46266,46267,46270,46271,46274,46275,46278,46279,46282,46283,46286,46287,46290,46291,46294,46295,46298,46299,46302,46303,46175,46306,46307,46310,46311,46183,46314,46315,46119,46318,46321,46322,46323,46326,46327,46330,46331,46334,46335,46338,46339,46342,46343,46346,46347,46350,46351,46354,46355,46358,46359,46362,46363,46366,46367,46370,46371,46374,46375,46378,46379,46382,46383,46386,46389,46390,46391,46394,46395,46398,46399,46402,46403,46406,46407,46410,46411,46414,46415,46418,46419,46422,46423,46426,46427,46430,46431,46434,46435,46438,46439,46442,46443,46446,46447,46450,46451,46454,46457,46458,46459,46462,46463,46466,46467,46470,46471,46474,46475,46478,46479,46482,46483,46486,46487,46490,46491,46494,46495,46498,46499,46502,46503,46506,46507,46510,46511,46514,46515,46518,46519,46522,46525,46526,46528,46531,46534,46537,46540,46543,46546,46549,46552,46555,46558,46561,46564,46567,46570 } GeometryVersion: 124 LayerElementNormal: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "Direct" Normals: *139725 { a: 0.329279124736786,0.0702807679772377,-0.941613435745239,0.256420314311981,0.112910509109497,-0.959947824478149,0.103707693517208,0.287299185991287,-0.952210009098053,0.0421824865043163,0.312842935323715,-0.948867738246918,0.574346244335175,0.00941364839673042,-0.81855833530426,0.329279124736786,0.0702807679772377,-0.941613435745239,0.0421824865043163,0.312842935323715,-0.948867738246918,0.120905123651028,0.330013185739517,-0.936201512813568,0.256420314311981,0.112910509109497,-0.959947824478149,0.298426777124405,0.233343333005905,-0.925468742847443,0.208192959427834,0.283492356538773,-0.936102449893951,0.103707693517208,0.287299185991287,-0.952210009098053,0.171656653285027,0.421078413724899,-0.890632927417755,0.0610933229327202,0.52752286195755,-0.847341299057007,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0610933229327202,0.52752286195755,-0.847341299057007,-0.0717302039265633,0.599237322807312,-0.797351539134979,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0474854707717896,0.340129047632217,-0.939179122447968,0.74884694814682,0.0258232615888119,-0.662239730358124,0.574346244335175,0.00941364839673042,-0.81855833530426,0.120905123651028,0.330013185739517,-0.936201512813568,0.317967116832733,0.377013236284256,-0.869918346405029,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.191734448075294,0.31677782535553,-0.928918600082397,0.0384715124964714,0.615228533744812,-0.787409543991089, 0.00547882029786706,0.479039758443832,-0.877776086330414,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0384715124964714,0.615228533744812,-0.787409543991089,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.00547882029786706,0.479039758443832,-0.877776086330414,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0109683563932776,0.278000682592392,-0.96051824092865,0.298426777124405,0.233343333005905,-0.925468742847443,0.171656653285027,0.421078413724899,-0.890632927417755,0.0890781953930855,0.32302126288414,-0.942190170288086,0.208192959427834,0.283492356538773,-0.936102449893951,0.0421824865043163,0.312842935323715,-0.948867738246918,0.103707693517208,0.287299185991287,-0.952210009098053,0.188222825527191,0.266046136617661,-0.945405542850494,0.130089670419693,0.341309607028961,-0.930905163288116,0.120905123651028,0.330013185739517,-0.936201512813568,0.0421824865043163,0.312842935323715,-0.948867738246918,0.130089670419693,0.341309607028961,-0.930905163288116,0.103707693517208,0.287299185991287,-0.952210009098053,0.208192959427834,0.283492356538773,-0.936102449893951,0.236986353993416,0.25183042883873,-0.938306391239166,0.188222825527191,0.266046136617661,-0.945405542850494,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0474854707717896,0.340129047632217,-0.939179122447968,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0474854707717896,0.340129047632217,-0.939179122447968,-0.0542660467326641,0.303808957338333,-0.951186299324036,0.0191163346171379,0.267036914825439,-0.963496685028076,0.0502305738627911,0.265573531389236,-0.962781190872192,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.186463221907616,0.337504178285599,-0.922671318054199, -0.173782542347908,0.294062882661819,-0.939854621887207,-0.0625077188014984,0.356366664171219,-0.932253003120422,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.0895265564322472,0.301672667264938,-0.94919890165329,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0542660467326641,0.303808957338333,-0.951186299324036,-0.0330984629690647,0.245714232325554,-0.968777060508728,-0.0415995456278324,0.272834479808807,-0.961161196231842,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0109683563932776,0.278000682592392,-0.96051824092865,-0.191734448075294,0.31677782535553,-0.928918600082397,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.0734905749559402,0.278112560510635,-0.957733035087585,0.208192959427834,0.283492356538773,-0.936102449893951,0.0890781953930855,0.32302126288414,-0.942190170288086,0.0688691660761833,0.267364770174026,-0.961131155490875,0.236986353993416,0.25183042883873,-0.938306391239166,0.130089670419693,0.341309607028961,-0.930905163288116,0.188222825527191,0.266046136617661,-0.945405542850494,0.163174018263817,0.444838464260101,-0.880620777606964,0.243700608611107,0.544483065605164,-0.802588403224945,0.317967116832733,0.377013236284256,-0.869918346405029,0.130089670419693,0.341309607028961,-0.930905163288116,0.243700608611107,0.544483065605164,-0.802588403224945,0.735658526420593,0.230637982487679,-0.636877298355103,0.188222825527191,0.266046136617661,-0.945405542850494,0.236986353993416,0.25183042883873,-0.938306391239166,0.189078122377396,0.441867411136627,-0.87692791223526,0.163174018263817,0.444838464260101,-0.880620777606964,0.0688691660761833,0.267364770174026,-0.961131155490875, 0.0502305738627911,0.265573531389236,-0.962781190872192,0.057487852871418,0.456679046154022,-0.88777220249176,0.0718594193458557,0.455831170082092,-0.88716071844101,0.0502305738627911,0.265573531389236,-0.962781190872192,0.0191163346171379,0.267036914825439,-0.963496685028076,0.017586937174201,0.584774792194366,-0.811005055904388,0.057487852871418,0.456679046154022,-0.88777220249176,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.186463221907616,0.337504178285599,-0.922671318054199,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.173782542347908,0.294062882661819,-0.939854621887207,-0.147772952914238,0.520121157169342,-0.84121173620224,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.0191163346171379,0.267036914825439,-0.963496685028076,-0.0415995456278324,0.272834479808807,-0.961161196231842,-0.0419603176414967,0.516997694969177,-0.854957699775696,0.017586937174201,0.584774792194366,-0.811005055904388,-0.0734905749559402,0.278112560510635,-0.957733035087585,-0.22543403506279,0.28757056593895,-0.930850505828857,-0.175480470061302,0.520782589912415,-0.835459232330322,-0.0663426592946053,0.518996477127075,-0.85219794511795,0.236986353993416,0.25183042883873,-0.938306391239166,0.0688691660761833,0.267364770174026,-0.961131155490875,0.0718594193458557,0.455831170082092,-0.88716071844101,0.189078122377396,0.441867411136627,-0.87692791223526,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.716141760349274,0.576233267784119,-0.393822461366653, -0.844549179077148,0.385287135839462,-0.371874392032623,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.931051731109619,0.363819122314453,0.027898857370019,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.844549179077148,0.385287135839462,-0.371874392032623,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.716141760349274,0.576233267784119,-0.393822461366653,-0.539133667945862,0.764685809612274,-0.352973729372025,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.156535282731056,0.121644385159016,-0.980152726173401,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.156535282731056,0.121644385159016,-0.980152726173401, -0.304371774196625,0.115475252270699,-0.945528030395508,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.630987823009491,0.234253495931625,-0.739580750465393,-0.304371774196625,0.115475252270699,-0.945528030395508,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.000760512368287891,0.207898333668709,-0.978150188922882,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.450874269008636,0.429722338914871,-0.782336950302124,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.335503816604614,0.489175528287888,-0.805074214935303,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.257477760314941,0.382379919290543,-0.887406766414642, -0.127526223659515,0.388497859239578,-0.912582278251648,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.0627769380807877,0.434968650341034,-0.898254573345184,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0627769380807877,0.434968650341034,-0.898254573345184,-0.212418854236603,0.489984601736069,-0.845454514026642,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045,0.00121181993745267,0.232196122407913,-0.9726682305336,0.002942921128124,0.253444164991379,-0.967345535755157,-0.749469220638275,0.428192466497421,0.504922866821289,-0.803582847118378,0.542061448097229,0.245812878012657,-0.710639357566834,0.646875619888306,0.27666512131691,-0.617127954959869,0.561533391475677,0.551210701465607,-0.710639357566834,0.646875619888306,0.27666512131691,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.449203163385391,0.892682015895844,0.0365421921014786,-0.448102563619614,0.672870218753815,0.588599801063538,-0.617127954959869,0.561533391475677,0.551210701465607,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.60595041513443,0.795228064060211,-0.020889300853014,-0.710639357566834,0.646875619888306,0.27666512131691,-0.803582847118378,0.542061448097229,0.245812878012657,-0.844134092330933,0.36929926276207,0.388658910989761,-0.856849551200867,0.411835759878159,0.310161501169205,-0.817325711250305,0.505672991275787,0.276176601648331,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289,-0.767612516880035,0.418656378984451,0.485281258821487,-0.817325711250305,0.505672991275787,0.276176601648331,-0.803582847118378,0.542061448097229,0.245812878012657,-0.776123344898224,0.626794755458832,-0.0689988508820534,-0.803582847118378,0.542061448097229,0.245812878012657,-0.817325711250305,0.505672991275787,0.276176601648331,-0.87062680721283,0.491043627262115,-0.0297505091875792, -0.931051731109619,0.363819122314453,0.027898857370019,-0.87062680721283,0.491043627262115,-0.0297505091875792,-0.817325711250305,0.505672991275787,0.276176601648331,-0.856849551200867,0.411835759878159,0.310161501169205,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.679870665073395,0.332279711961746,-0.653732419013977,-0.941607177257538,0.224361434578896,-0.25107353925705,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.879830181598663,0.149797275662422,-0.451065003871918,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.142651379108429,0.65512877702713,0.741927802562714,-0.241419494152069,0.682447910308838,0.689914107322693,-0.229512825608253,0.568260371685028,0.790192425251007,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.142651379108429,0.65512877702713,0.741927802562714,-0.0943122506141663,0.53818953037262,0.837530434131622,0.0543623231351376,0.513473629951477,0.85638165473938,0.0616534538567066,0.625403761863709,0.777861833572388,-0.325974881649017,0.679336845874786,0.657451033592224, -0.429686725139618,0.66762501001358,0.607985317707062,-0.428986668586731,0.611180424690247,0.665153324604034,-0.279750615358353,0.610641419887543,0.74084860086441,-0.325974881649017,0.679336845874786,0.657451033592224,-0.279750615358353,0.610641419887543,0.74084860086441,-0.229512825608253,0.568260371685028,0.790192425251007,-0.241419494152069,0.682447910308838,0.689914107322693,-0.309171378612518,0.749882876873016,0.584883511066437,-0.325974881649017,0.679336845874786,0.657451033592224,-0.241419494152069,0.682447910308838,0.689914107322693,-0.237944751977921,0.77955037355423,0.579382002353668,-0.429686725139618,0.66762501001358,0.607985317707062,-0.325974881649017,0.679336845874786,0.657451033592224,-0.309171378612518,0.749882876873016,0.584883511066437,-0.928196668624878,0.146431341767311,0.342065423727036,-0.85773640871048,0.318832546472549,0.403279215097427,-0.856573581695557,0.327088385820389,0.399117648601532,-0.91119110584259,0.208402961492538,0.355385720729828,-0.928196668624878,0.146431341767311,0.342065423727036,-0.91119110584259,0.208402961492538,0.355385720729828,-0.930396974086761,0.1596420109272,0.329963505268097,-0.939980566501617,0.104119330644608,0.324954867362976,-0.759151995182037,0.445082813501358,0.474962621927261,-0.856573581695557,0.327088385820389,0.399117648601532,-0.85773640871048,0.318832546472549,0.403279215097427,-0.76142829656601,0.432304978370667,0.483052164316177,-0.759151995182037,0.445082813501358,0.474962621927261,-0.76142829656601,0.432304978370667,0.483052164316177,-0.637912154197693,0.524314641952515,0.564058721065521,-0.6037238240242,0.569068074226379,0.558282196521759,-0.183231085538864,0.776099979877472,0.603402972221375,-0.237944751977921,0.77955037355423,0.579382002353668,-0.241419494152069,0.682447910308838,0.689914107322693,-0.142651379108429,0.65512877702713,0.741927802562714,-0.183231085538864,0.776099979877472,0.603402972221375,-0.142651379108429,0.65512877702713,0.741927802562714,0.0616534538567066,0.625403761863709,0.777861833572388,0.0704773217439651,0.772313952445984,0.631319284439087, -0.933935105800629,0.157070308923721,0.321082711219788,-0.914615273475647,0.203247100114822,0.349527567625046,-0.961739301681519,0.162645190954208,0.22046323120594,-0.907475471496582,0.340031713247299,0.246711865067482,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.028486518189311,-0.148915618658066,-0.988439500331879,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.028486518189311,-0.148915618658066,-0.988439500331879,-0.23204942047596,-0.145845085382462,-0.961708009243011,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.907475471496582,0.340031713247299,0.246711865067482,-0.961739301681519,0.162645190954208,0.22046323120594,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.800187706947327,0.59970623254776,-0.00721557484939694, -0.766045868396759,0.61859118938446,-0.174696043133736,-0.908797442913055,0.389413625001907,-0.149814158678055,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.646523416042328,0.744809150695801,0.165126398205757,-0.824783802032471,0.538173019886017,0.173497721552849,-0.855047225952148,0.419915407896042,0.304245471954346,-0.702866315841675,0.640832006931305,0.30872842669487,-0.646523416042328,0.744809150695801,0.165126398205757,-0.702866315841675,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.458671659231186,0.872726500034332,0.167238742113113,-0.429586619138718,0.728146016597748,0.53409618139267,-0.583837151527405,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.429686725139618,0.66762501001358,0.607985317707062,-0.49023100733757,0.783868074417114,0.381083190441132,-0.583837151527405,0.631729662418365,0.509952783584595,-0.429586619138718,0.728146016597748,0.53409618139267,-0.856573581695557,0.327088385820389,0.399117648601532,-0.759151995182037,0.445082813501358,0.474962621927261,-0.74214094877243,0.521113991737366,0.421505630016327,-0.849531948566437,0.369736075401306,0.376285374164581,-0.855047225952148,0.419915407896042,0.304245471954346,-0.849531948566437,0.369736075401306,0.376285374164581,-0.74214094877243,0.521113991737366,0.421505630016327,-0.702866315841675,0.640832006931305,0.30872842669487,-0.49023100733757,0.783868074417114,0.381083190441132,-0.702866315841675,0.640832006931305,0.30872842669487,-0.74214094877243,0.521113991737366,0.421505630016327,-0.583837151527405,0.631729662418365,0.509952783584595,-0.6037238240242,0.569068074226379,0.558282196521759,-0.583837151527405,0.631729662418365,0.509952783584595,-0.74214094877243,0.521113991737366,0.421505630016327,-0.759151995182037,0.445082813501358,0.474962621927261,-0.855047225952148,0.419915407896042,0.304245471954346,-0.824783802032471,0.538173019886017,0.173497721552849,-0.932598233222961,0.310681849718094,0.183677315711975,-0.922844409942627,0.263350307941437,0.281078040599823, -0.932598233222961,0.310681849718094,0.183677315711975,-0.953923344612122,0.216998100280762,0.207224562764168,-0.930396974086761,0.1596420109272,0.329963505268097,-0.922844409942627,0.263350307941437,0.281078040599823,-0.896636784076691,0.291213989257813,0.333521902561188,-0.936677098274231,0.272290170192719,0.220213681459427,-0.961739301681519,0.162645190954208,0.22046323120594,-0.914615273475647,0.203247100114822,0.349527567625046,-0.930396974086761,0.1596420109272,0.329963505268097,-0.953923344612122,0.216998100280762,0.207224562764168,-0.936677098274231,0.272290170192719,0.220213681459427,-0.896636784076691,0.291213989257813,0.333521902561188,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.953923344612122,0.216998100280762,0.207224562764168,-0.932598233222961,0.310681849718094,0.183677315711975,-0.932697832584381,0.36027005314827,0.0167412776499987,-0.932598233222961,0.310681849718094,0.183677315711975,-0.824783802032471,0.538173019886017,0.173497721552849,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.958630919456482,0.250774264335632,-0.134681105613709,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.963100135326386,0.220396235585213,-0.154478579759598,-0.958630919456482,0.250774264335632,-0.134681105613709, -0.936677098274231,0.272290170192719,0.220213681459427,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.961739301681519,0.162645190954208,0.22046323120594,-0.953923344612122,0.216998100280762,0.207224562764168,-0.968225657939911,0.246022939682007,0.0448530614376068,-0.969021558761597,0.241314724087715,0.0525775291025639,-0.936677098274231,0.272290170192719,0.220213681459427,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.833487510681152,0.195669800043106,-0.516731977462769,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.910754382610321,0.198743000626564,-0.361977517604828,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.83020544052124,0.164738476276398,-0.532559931278229,-0.688417077064514,0.155676782131195,-0.708411395549774,0.00778961461037397,0.31232625246048,-0.949942946434021,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.164242103695869,0.181451722979546,-0.969587445259094, -0.186824142932892,0.0393546596169472,-0.981604754924774,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.164242103695869,0.181451722979546,-0.969587445259094,-0.00349890603683889,0.173883408308029,-0.984760046005249,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.135065674781799,0.320166707038879,-0.937683582305908,0.00778961461037397,0.31232625246048,-0.949942946434021,-0.135065674781799,0.320166707038879,-0.937683582305908,-0.1039934232831,0.492859244346619,-0.863872170448303,0.0223272144794464,0.483893781900406,-0.874841868877411,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0223272144794464,0.483893781900406,-0.874841868877411,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.1039934232831,0.492859244346619,-0.863872170448303,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.0524508766829968,0.905246913433075,-0.421636074781418,0.0622152015566826,0.901260554790497,-0.428787440061569,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0709519162774086,0.962512910366058,-0.261791497468948,0.0692925006151199,0.95879065990448,-0.27553403377533,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0692925006151199,0.95879065990448,-0.27553403377533,-0.0709519162774086,0.962512910366058,-0.261791497468948,-0.100280947983265,0.994407773017883,-0.0331186950206757, -0.429686725139618,0.66762501001358,0.607985317707062,-0.309171378612518,0.749882876873016,0.584883511066437,-0.291583627462387,0.822390556335449,0.488521039485931,-0.429586619138718,0.728146016597748,0.53409618139267,-0.49023100733757,0.783868074417114,0.381083190441132,-0.429586619138718,0.728146016597748,0.53409618139267,-0.291583627462387,0.822390556335449,0.488521039485931,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.291583627462387,0.822390556335449,0.488521039485931,-0.227190643548965,0.852716088294983,0.470382422208786,-0.237944751977921,0.77955037355423,0.579382002353668,-0.227190643548965,0.852716088294983,0.470382422208786,-0.291583627462387,0.822390556335449,0.488521039485931,-0.309171378612518,0.749882876873016,0.584883511066437,-0.126044631004334,0.975940346717834,0.177913352847099,0.0787876397371292,0.981232225894928,0.175999522209167,0.0761537179350853,0.996121823787689,-0.044066745787859,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.126044631004334,0.975940346717834,0.177913352847099,-0.100280947983265,0.994407773017883,-0.0331186950206757,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.175430566072464,0.967789888381958,0.180573478341103,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,0.0787876397371292,0.981232225894928,0.175999522209167,-0.126044631004334,0.975940346717834,0.177913352847099,-0.160089418292046,0.924165964126587,0.346826493740082,-0.126044631004334,0.975940346717834,0.177913352847099,-0.175430566072464,0.967789888381958,0.180573478341103,-0.205079987645149,0.915316820144653,0.346608310937881,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.676815629005432,0.0292502902448177,-0.735571205615997, -0.778471529483795,0.0903224870562553,-0.621147274971008,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.778471529483795,0.0903224870562553,-0.621147274971008,-0.804870903491974,0.166483357548714,-0.569619297981262,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.766045868396759,0.61859118938446,-0.174696043133736,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.566805422306061,0.799840569496155,-0.197450518608093,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.800187706947327,0.59970623254776,-0.00721557484939694,-0.824783802032471,0.538173019886017,0.173497721552849,-0.646523416042328,0.744809150695801,0.165126398205757,-0.604111194610596,0.796454071998596,-0.0266573838889599,-0.646523416042328,0.744809150695801,0.165126398205757,-0.458671659231186,0.872726500034332,0.167238742113113,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.237944751977921,0.77955037355423,0.579382002353668,-0.183231085538864,0.776099979877472,0.603402972221375,-0.184141546487808,0.85766065120697,0.480114668607712, -0.227190643548965,0.852716088294983,0.470382422208786,-0.205079987645149,0.915316820144653,0.346608310937881,-0.227190643548965,0.852716088294983,0.470382422208786,-0.184141546487808,0.85766065120697,0.480114668607712,-0.160089418292046,0.924165964126587,0.346826493740082,0.0780636146664619,0.932616472244263,0.352324455976486,-0.160089418292046,0.924165964126587,0.346826493740082,-0.184141546487808,0.85766065120697,0.480114668607712,0.0752492547035217,0.86371123790741,0.498337715864182,0.0704773217439651,0.772313952445984,0.631319284439087,0.0752492547035217,0.86371123790741,0.498337715864182,-0.184141546487808,0.85766065120697,0.480114668607712,-0.183231085538864,0.776099979877472,0.603402972221375,-0.896636784076691,0.291213989257813,0.333521902561188,-0.914615273475647,0.203247100114822,0.349527567625046,-0.90123462677002,0.253379285335541,0.351532429456711,-0.893953561782837,0.312333762645721,0.321394920349121,-0.896636784076691,0.291213989257813,0.333521902561188,-0.893953561782837,0.312333762645721,0.321394920349121,-0.939980566501617,0.104119330644608,0.324954867362976,-0.930396974086761,0.1596420109272,0.329963505268097,-0.930396974086761,0.1596420109272,0.329963505268097,-0.91119110584259,0.208402961492538,0.355385720729828,-0.897303998470306,0.274592310190201,0.345607608556747,-0.922844409942627,0.263350307941437,0.281078040599823,-0.855047225952148,0.419915407896042,0.304245471954346,-0.897303998470306,0.274592310190201,0.345607608556747,-0.849531948566437,0.369736075401306,0.376285374164581,-0.856573581695557,0.327088385820389,0.399117648601532,-0.849531948566437,0.369736075401306,0.376285374164581,-0.897303998470306,0.274592310190201,0.345607608556747,-0.91119110584259,0.208402961492538,0.355385720729828,-0.429686725139618,0.66762501001358,0.607985317707062,-0.6037238240242,0.569068074226379,0.558282196521759,-0.637912154197693,0.524314641952515,0.564058721065521,-0.428986668586731,0.611180424690247,0.665153324604034,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.555550515651703,0.455664992332459,-0.695509195327759, -0.735395610332489,0.421848356723785,-0.530318140983582,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.912788510322571,0.242469280958176,-0.328672856092453,-0.85549122095108,0.405467689037323,-0.32207253575325,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.811532735824585,0.254749119281769,-0.525849342346191,-0.735395610332489,0.421848356723785,-0.530318140983582,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.727810025215149,0.613442480564117,-0.306563049554825,-0.539688348770142,0.787357926368713,-0.297999978065491,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.622987747192383,0.608749032020569,-0.491234064102173,-0.509260535240173,0.751342058181763,-0.419688850641251,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0733590647578239,0.681655049324036,-0.727986812591553,0.0394280813634396,0.674713432788849,-0.737025916576386,-0.0733590647578239,0.681655049324036,-0.727986812591553,-0.0537863597273827,0.825741946697235,-0.561477720737457, 0.0535563454031944,0.82038402557373,-0.569299399852753,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0535563454031944,0.82038402557373,-0.569299399852753,-0.0537863597273827,0.825741946697235,-0.561477720737457,-0.0524508766829968,0.905246913433075,-0.421636074781418,-0.280090749263763,0.893176853656769,0.351829946041107,-0.205079987645149,0.915316820144653,0.346608310937881,-0.175430566072464,0.967789888381958,0.180573478341103,-0.275193452835083,0.944830358028412,0.177662998437881,-0.280090749263763,0.893176853656769,0.351829946041107,-0.275193452835083,0.944830358028412,0.177662998437881,-0.458671659231186,0.872726500034332,0.167238742113113,-0.49023100733757,0.783868074417114,0.381083190441132,-0.275193452835083,0.944830358028412,0.177662998437881,-0.175430566072464,0.967789888381958,0.180573478341103,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.275193452835083,0.944830358028412,0.177662998437881,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.458671659231186,0.872726500034332,0.167238742113113,-0.147578522562981,0.903031170368195,-0.403429329395294,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.164138689637184,0.985963463783264,-0.0305693503469229,-0.163341224193573,0.954490721225739,-0.249533846974373,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.433570116758347,0.900149524211884,-0.041807197034359,-0.272943913936615,0.961116194725037,-0.0419191792607307,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.395432621240616,0.890730679035187,-0.224124699831009,-0.265465080738068,0.932521402835846,-0.244810327887535,-0.236552119255066,0.898081064224243,-0.370801120996475, -0.147578522562981,0.903031170368195,-0.403429329395294,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.348707258701324,0.879463195800781,-0.323956280946732,-0.236552119255066,0.898081064224243,-0.370801120996475,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.350460797548294,0.80544102191925,-0.477956026792526,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.220167711377144,0.826383173465729,-0.518282771110535,-0.136522889137268,0.827674627304077,-0.544349312782288,-0.641130149364471,0.283854395151138,-0.713006854057312,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.163053512573242,0.683581054210663,-0.711428463459015,-0.217446804046631,0.495308041572571,-0.841062903404236,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.439841330051422,0.638896822929382,-0.63115006685257,-0.271187722682953,0.674484729766846,-0.686678647994995,-0.361643314361572,0.484801411628723,-0.796355247497559,-0.555550515651703,0.455664992332459,-0.695509195327759,-0.275409698486328,0.318414241075516,-0.907062232494354,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.443566411733627,0.305741757154465,-0.84247899055481,-0.641130149364471,0.283854395151138,-0.713006854057312, -0.443566411733627,0.305741757154465,-0.84247899055481,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.688417077064514,0.155676782131195,-0.708411395549774,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.504351913928986,0.166815713047981,-0.84723174571991,-0.325825273990631,0.178449675440788,-0.928436100482941,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.676815629005432,0.0292502902448177,-0.735571205615997,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.370549231767654,-0.159934684634209,-0.91493946313858,-0.545547187328339,-0.107077039778233,-0.831211686134338,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.221233636140823,-0.176490515470505,-0.959117710590363,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.221233636140823,-0.176490515470505,-0.959117710590363, -0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.0252742562443018,-0.106068439781666,-0.994037568569183,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.0252742562443018,-0.106068439781666,-0.994037568569183,-0.205821737647057,-0.0995028093457222,-0.973517656326294,-0.186824142932892,0.0393546596169472,-0.981604754924774,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.366272330284119,-0.16065938770771,-0.916533231735229,-0.562148034572601,-0.142533272504807,-0.814661800861359,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.35973909497261,0.0476123131811619,-0.931837379932404,-0.37091401219368,-0.0905782580375671,-0.924239337444305,-0.556710660457611,-0.0704807341098785,-0.82771110534668,-0.542270302772522,0.0508554428815842,-0.838663637638092,-0.718725085258484,-0.116646125912666,-0.685440003871918,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.713846147060394,0.0502549819648266,-0.698496997356415,-0.725374639034271,-0.054319828748703,-0.68620765209198,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.826241433620453,0.061872124671936,-0.559907972812653,-0.821527719497681,-0.041704885661602,-0.568641304969788,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.86995929479599,-0.0271206852048635,-0.492377251386642, -0.821527719497681,-0.041704885661602,-0.568641304969788,-0.800398170948029,-0.0439908429980278,-0.597852528095245,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.969310760498047,0.16829377412796,-0.179203346371651,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.970083713531494,0.0539310723543167,-0.236704483628273,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.950954496860504,0.0319492518901825,-0.307676523923874,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.574827253818512,0.158569574356079,-0.80276358127594,-0.586808562278748,0.13275733590126,-0.798768520355225,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.437141418457031,0.161669790744781,-0.88474303483963,-0.481821954250336,-0.034151516854763,-0.875603377819061,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.359791696071625,0.189065262675285,-0.913676202297211,-0.372676461935043,-0.122319355607033,-0.919864237308502,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.239463403820992,0.198724672198296,-0.950350344181061,-0.246918469667435,-0.124969840049744,-0.96094423532486,-0.0269717872142792,-0.128648608922958,-0.991323411464691, 0.000681107048876584,0.225692093372345,-0.974198460578918,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.568679571151733,0.357779324054718,-0.740673661231995,-0.317821115255356,0.189776733517647,-0.928964257240295,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.255872219800949,0.412295579910278,-0.874380767345428,-0.211731195449829,0.50760555267334,-0.835168540477753,-0.322734087705612,0.735918641090393,-0.5952028632164,-0.408612459897995,0.622275412082672,-0.667689442634583,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.178532913327217,0.211587846279144,-0.960914433002472,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.109456099569798,0.459850668907166,-0.881224572658539,-0.13601079583168,0.398971199989319,-0.906820297241211,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0102010685950518,0.341328680515289,-0.939888656139374,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.0685182884335518,0.227593377232552,-0.971342623233795,0.0102010685950518,0.341328680515289,-0.939888656139374,0.010585374198854,0.345912545919418,-0.938207030296326,-0.0301786828786135,0.377186805009842,-0.925645351409912,-0.0516404360532761,0.365945398807526,-0.929202437400818,-0.861315131187439,0.181052923202515,0.474716812372208,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.575954735279083,-0.540566444396973,0.613240599632263, -0.811837613582611,0.121092565357685,-0.571188449859619,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.485446602106094,-0.599754393100739,0.636110246181488,0.775241792201996,-0.45661398768425,0.436467438936234,0.615995168685913,-0.740946054458618,0.267486304044724,0.43514209985733,-0.748737931251526,0.500042855739594,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.743858754634857,0.1927819699049,0.639929115772247,-0.861315131187439,0.181052923202515,0.474716812372208,0.151796370744705,-0.893162906169891,0.423341274261475,0.315651625394821,-0.933804154396057,0.168445229530334,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.358404159545898,-0.845226526260376,0.396407097578049,0.43514209985733,-0.748737931251526,0.500042855739594,0.615995168685913,-0.740946054458618,0.267486304044724,0.315651625394821,-0.933804154396057,0.168445229530334,0.151796370744705,-0.893162906169891,0.423341274261475,-0.753281593322754,0.510852336883545,0.414242386817932,-0.864985883235931,0.37462642788887,0.333847969770432,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432,-0.753281593322754,0.510852336883545,0.414242386817932,-0.83081316947937,0.301315695047379,0.467929810285568,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.83081316947937,0.301315695047379,0.467929810285568,-0.753281593322754,0.510852336883545,0.414242386817932,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.00827599223703146,-0.428946763277054,0.903291881084442, 0.033345639705658,-0.401991754770279,0.915035903453827,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.758384525775909,0.243889003992081,0.604459345340729,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.758384525775909,0.243889003992081,0.604459345340729,-0.100514478981495,0.314375013113022,0.943962454795837,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.726677179336548,-0.644755423069,0.237130090594292,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.726677179336548,-0.644755423069,0.237130090594292,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.685877442359924,-0.687307178974152,0.239125445485115,-0.660850763320923,0.309517800807953,0.683721423149109,-0.758384525775909,0.243889003992081,0.604459345340729,-0.626258373260498,-0.747960209846497,0.21990005671978,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.852710962295532,0.37292954325676,0.365797132253647,-0.660850763320923,0.309517800807953,0.683721423149109,-0.685877442359924,-0.687307178974152,0.239125445485115, -0.726677179336548,-0.644755423069,0.237130090594292,0.255169302225113,-0.0558453612029552,0.965282320976257,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.134034633636475,-0.240539237856865,0.961340487003326,0.133207947015762,0.0763719230890274,0.988141179084778,0.0240508019924164,0.026220079511404,0.999366819858551,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.144208893179893,0.115719296038151,0.982757806777954,-0.100514478981495,0.314375013113022,0.943962454795837,-0.0475814715027809,0.0593862198293209,0.997100412845612,0.0266619008034468,0.262281715869904,0.964622974395752,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271,-0.100514478981495,0.314375013113022,0.943962454795837,0.24859219789505,0.926495909690857,0.282501816749573,0.0432916954159737,0.796547591686249,0.603023827075958,0.0266619008034468,0.262281715869904,0.964622974395752,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.401081025600433,-0.243629589676857,0.883050739765167,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0240508019924164,0.026220079511404,0.999366819858551,0.133207947015762,0.0763719230890274,0.988141179084778,0.134034633636475,-0.240539237856865,0.961340487003326,0.0174392946064472,-0.157727032899857,0.987328767776489,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.255169302225113,-0.0558453612029552,0.965282320976257,0.0791192501783371,-0.0643641576170921,0.994785130023956,-0.271942734718323,0.215774357318878,0.93781054019928,-0.402321964502335,0.279689967632294,0.871728479862213, 0.0240508019924164,0.026220079511404,0.999366819858551,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.271942734718323,0.215774357318878,0.93781054019928,0.0791192501783371,-0.0643641576170921,0.994785130023956,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.284841567277908,0.292440235614777,0.912876784801483,-0.498006135225296,0.389301002025604,0.77487713098526,0.134034633636475,-0.240539237856865,0.961340487003326,0.185406669974327,0.360577255487442,0.914116144180298,-0.0424226783216,0.296286582946777,0.954156458377838,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.069992259144783,0.555320203304291,0.828686058521271,0.187445163726807,0.511297464370728,0.838712811470032,0.133207947015762,0.0763719230890274,0.988141179084778,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0073667336255312,-0.00580848380923271,0.999956011772156,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.466067016124725,0.290591061115265,0.835666418075562,-0.144208893179893,0.115719296038151,0.982757806777954,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.0241487547755241,-0.0255803689360619,0.999381065368652,0.0240508019924164,0.026220079511404,0.999366819858551,-0.402321964502335,0.279689967632294,0.871728479862213,-0.474541217088699,0.29422801733017,0.829602658748627,-0.847861528396606,0.113259613513947,0.517979800701141,-0.602232098579407,0.563644886016846,0.565350294113159,-0.702935457229614,0.63435697555542,0.321672111749649,-0.807841360569,0.43371844291687,0.399099737405777,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.498006135225296,0.389301002025604,0.77487713098526,-0.602232098579407,0.563644886016846,0.565350294113159,-0.847861528396606,0.113259613513947,0.517979800701141, 0.792737483978271,-0.494514644145966,-0.356402337551117,0.759971797466278,-0.612702488899231,0.216883733868599,0.336174368858337,0.935995519161224,0.104399025440216,0.879603147506714,0.140207409858704,-0.454576879739761,-0.134053289890289,0.873388648033142,-0.468211501836777,0.879603147506714,0.140207409858704,-0.454576879739761,0.336174368858337,0.935995519161224,0.104399025440216,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.225193619728088,0.461788326501846,0.85792738199234,-0.13601952791214,0.794801294803619,0.591430127620697,-0.350341945886612,0.815486073493958,0.460698395967484,-0.450388491153717,0.534071862697601,0.715484082698822,0.336174368858337,0.935995519161224,0.104399025440216,0.279289931058884,0.161584615707397,0.94651335477829,-0.328838348388672,0.935817182064056,0.126931354403496,-0.761701762676239,0.421244710683823,0.492304056882858,-0.630214631557465,0.655408442020416,0.416256308555603,-0.673884630203247,0.467902958393097,0.571792244911194,-0.630214631557465,0.655408442020416,0.416256308555603,-0.702385485172272,0.688902199268341,0.179076477885246,-0.328838348388672,0.935817182064056,0.126931354403496,-0.630214631557465,0.655408442020416,0.416256308555603,-0.124414332211018,0.380547553300858,0.91635400056839,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.713547646999359,0.198780298233032,0.671815574169159,-0.673884630203247,0.467902958393097,0.571792244911194,0.327664911746979,0.551296949386597,-0.767272710800171,0.30904021859169,0.371187627315521,-0.875621974468231,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.120067529380322,0.82549375295639,-0.55149233341217,-0.0348765477538109,0.952687978744507,-0.301942437887192,-0.394997388124466,0.90861302614212,0.135644435882568,-0.350341945886612,0.815486073493958,0.460698395967484,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.532891869544983,0.203911662101746,-0.821246802806854,0.120067529380322,0.82549375295639,-0.55149233341217,0.30904021859169,0.371187627315521,-0.875621974468231, 0.532891869544983,0.203911662101746,-0.821246802806854,0.516829967498779,0.529717087745667,-0.67252254486084,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.120067529380322,0.82549375295639,-0.55149233341217,-0.450388491153717,0.534071862697601,0.715484082698822,-0.350341945886612,0.815486073493958,0.460698395967484,-0.394997388124466,0.90861302614212,0.135644435882568,-0.548773884773254,0.701416075229645,0.454821705818176,-0.225193619728088,0.461788326501846,0.85792738199234,-0.450388491153717,0.534071862697601,0.715484082698822,-0.484222084283829,0.366713851690292,0.794386506080627,-0.245125457644463,0.30829644203186,0.919166386127472,0.0420866049826145,0.997517287731171,0.0564619302749634,-0.0351283065974712,0.990967154502869,-0.12942211329937,-0.350341945886612,0.815486073493958,0.460698395967484,-0.13601952791214,0.794801294803619,0.591430127620697,0.327664911746979,0.551296949386597,-0.767272710800171,-0.0351283065974712,0.990967154502869,-0.12942211329937,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709,0.0685662999749184,0.738678991794586,0.670561015605927,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.0782447457313538,0.412172168493271,0.907739996910095,0.0410983338952065,0.381287395954132,0.923542559146881,-0.13601952791214,0.794801294803619,0.591430127620697,-0.225193619728088,0.461788326501846,0.85792738199234,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.523407638072968,0.841484844684601,0.133969098329544,-0.548773884773254,0.701416075229645,0.454821705818176,-0.394997388124466,0.90861302614212,0.135644435882568,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.728943645954132,0.505101680755615,0.462075144052505,-0.655175447463989,0.41560024023056,0.630889534950256,-0.548773884773254,0.701416075229645,0.454821705818176,-0.523407638072968,0.841484844684601,0.133969098329544,-0.484222084283829,0.366713851690292,0.794386506080627,-0.450388491153717,0.534071862697601,0.715484082698822, -0.548773884773254,0.701416075229645,0.454821705818176,-0.655175447463989,0.41560024023056,0.630889534950256,-0.261222988367081,0.14337170124054,0.954571664333344,-0.12591940164566,0.150871932506561,0.980500876903534,-0.101943291723728,0.319687753915787,0.942022979259491,-0.245125457644463,0.30829644203186,0.919166386127472,-0.225193619728088,0.461788326501846,0.85792738199234,-0.245125457644463,0.30829644203186,0.919166386127472,-0.101943291723728,0.319687753915787,0.942022979259491,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.0782447457313538,0.412172168493271,0.907739996910095,-0.101943291723728,0.319687753915787,0.942022979259491,0.0325647220015526,0.328354388475418,0.943993091583252,0.0410983338952065,0.381287395954132,0.923542559146881,0.0226862858980894,0.138102903962135,0.990158021450043,0.0325647220015526,0.328354388475418,0.943993091583252,-0.101943291723728,0.319687753915787,0.942022979259491,-0.12591940164566,0.150871932506561,0.980500876903534,0.0685662999749184,0.738678991794586,0.670561015605927,0.078812912106514,0.980074644088745,0.182324379682541,0.0115500893443823,0.988494396209717,0.150815844535828,-0.0397870242595673,0.770527541637421,0.636163771152496,-0.13601952791214,0.794801294803619,0.591430127620697,-0.0397870242595673,0.770527541637421,0.636163771152496,0.0115500893443823,0.988494396209717,0.150815844535828,0.0420866049826145,0.997517287731171,0.0564619302749634,0.201275274157524,0.759530663490295,-0.618547856807709,0.0420866049826145,0.997517287731171,0.0564619302749634,0.0115500893443823,0.988494396209717,0.150815844535828,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0115500893443823,0.988494396209717,0.150815844535828,0.078812912106514,0.980074644088745,0.182324379682541,0.516829967498779,0.529717087745667,-0.67252254486084,0.532891869544983,0.203911662101746,-0.821246802806854,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.516829967498779,0.529717087745667,-0.67252254486084, 0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.394997388124466,0.90861302614212,0.135644435882568,-0.0348765477538109,0.952687978744507,-0.301942437887192,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.26505383849144,0.683794975280762,-0.679831504821777,0.516829967498779,0.529717087745667,-0.67252254486084,0.784418284893036,-0.0482183061540127,-0.61835503578186,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.0352616421878338,0.240770235657692,0.969941377639771,-0.1695187240839,0.251378893852234,0.952928125858307,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.1695187240839,0.251378893852234,0.952928125858307,-0.375643879175186,0.212974905967712,0.901960849761963,-0.330226361751556,0.315774649381638,0.889514982700348,-0.375643879175186,0.212974905967712,0.901960849761963,-0.1695187240839,0.251378893852234,0.952928125858307,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255,-0.159210100769997,0.301312178373337,0.940139949321747,-0.1695187240839,0.251378893852234,0.952928125858307,0.0352616421878338,0.240770235657692,0.969941377639771,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.641941249370575,-0.68879646062851,0.336854338645935, -0.734584510326386,-0.658318638801575,0.16432324051857,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.35957869887352,-0.654971122741699,0.66461718082428,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.185788631439209,-0.25801420211792,0.948109328746796,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.0397491529583931,-0.678164541721344,0.733834326267242,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0397491529583931,-0.678164541721344,0.733834326267242,-0.163986459374428,-0.664933085441589,0.728678584098816,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.375643879175186,0.212974905967712,0.901960849761963,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.375643879175186,0.212974905967712,0.901960849761963,-0.330226361751556,0.315774649381638,0.889514982700348,-0.490771174430847,0.254273563623428,0.833359837532043,-0.159210100769997,0.301312178373337,0.940139949321747,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.330226361751556,0.315774649381638,0.889514982700348,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.159210100769997,0.301312178373337,0.940139949321747,0.0384946875274181,0.285418510437012,0.957629561424255,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.261337131261826,-0.401412606239319,0.877821683883667, -0.523851454257965,-0.504004776477814,0.686701416969299,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.0108760436996818,-0.349400758743286,0.936910271644592,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.00295650074258447,-0.253587752580643,0.967307865619659,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.360249727964401,-0.149908572435379,0.920732080936432,0.0744598954916,0.293609887361526,0.953020930290222,0.0348379723727703,0.239972576498985,0.970154345035553,0.0381993055343628,0.285694986581802,0.957558989524841,-0.109741598367691,0.221520185470581,0.968961119651794,0.0744598954916,0.293609887361526,0.953020930290222,0.205764874815941,0.144822359085083,0.967826068401337,0.026632534340024,0.124120466411114,0.991909682750702,0.0348379723727703,0.239972576498985,0.970154345035553,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.531166195869446,0.151813089847565,0.833555817604065,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.861315131187439,0.181052923202515,0.474716812372208,-0.743858754634857,0.1927819699049,0.639929115772247,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.531166195869446,0.151813089847565,0.833555817604065,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.481455624103546,0.182786270976067,0.857198715209961,-0.760103762149811,0.153783366084099,0.631342172622681,-0.775605142116547,-0.0662227943539619,0.627734959125519, -0.775605142116547,-0.0662227943539619,0.627734959125519,-0.760103762149811,0.153783366084099,0.631342172622681,-0.872271299362183,0.143087893724442,0.467620134353638,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.872271299362183,0.143087893724442,0.467620134353638,-0.760103762149811,0.153783366084099,0.631342172622681,-0.719690024852753,0.419174522161484,0.553479015827179,-0.849210619926453,0.33398848772049,0.409014731645584,-0.44353261590004,0.469896525144577,0.763201177120209,-0.719690024852753,0.419174522161484,0.553479015827179,-0.760103762149811,0.153783366084099,0.631342172622681,-0.481455624103546,0.182786270976067,0.857198715209961,-0.762500584125519,0.610563993453979,0.214019775390625,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.72613924741745,0.535442233085632,0.431304275989532,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.979476630687714,-0.044322844594717,0.196624115109444, -0.912571549415588,-0.364975243806839,0.184407845139503,-0.880486667156219,-0.258835464715958,-0.397174298763275,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.233076319098473,-0.804329991340637,0.546560764312744,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.151400625705719,-0.629788994789124,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,-0.151400625705719,-0.629788994789124,0.761868536472321,-0.162659510970116,-0.713988304138184,0.681001126766205,0.439482539892197,-0.499404758214951,0.74662572145462,0.0642944201827049,-0.547998011112213,0.834004998207092,0.439482539892197,-0.499404758214951,0.74662572145462,-0.162659510970116,-0.713988304138184,0.681001126766205,-0.233076319098473,-0.804329991340637,0.546560764312744,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.151400625705719,-0.629788994789124,0.761868536472321,0.485446602106094,-0.599754393100739,0.636110246181488,0.43514209985733,-0.748737931251526,0.500042855739594,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.151400625705719,-0.629788994789124,0.761868536472321,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.00470763072371483,0.279436647891998,0.960152566432953,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.531166195869446,0.151813089847565,0.833555817604065,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.0296379756182432,0.164347007870674,0.985957264900208,-0.186078935861588,0.178288474678993,0.966223537921906,-0.217106208205223,-0.0510895028710365,0.974810123443604,-0.522818684577942,-0.0568677671253681,0.850544929504395, -0.217106208205223,-0.0510895028710365,0.974810123443604,-0.186078935861588,0.178288474678993,0.966223537921906,-0.481455624103546,0.182786270976067,0.857198715209961,-0.44353261590004,0.469896525144577,0.763201177120209,-0.481455624103546,0.182786270976067,0.857198715209961,-0.186078935861588,0.178288474678993,0.966223537921906,-0.155023440718651,0.460458368062973,0.874039947986603,0.0497331917285919,0.445011228322983,0.894142985343933,-0.155023440718651,0.460458368062973,0.874039947986603,-0.186078935861588,0.178288474678993,0.966223537921906,0.0296379756182432,0.164347007870674,0.985957264900208,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.217106208205223,-0.0510895028710365,0.974810123443604,0.0126708010211587,-0.0581304989755154,0.99822860956192,-0.217106208205223,-0.0510895028710365,0.974810123443604,-0.239064574241638,-0.198313489556313,0.950536668300629,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.710427701473236,-0.480556935071945,0.514157176017761,-0.98546302318573,0.00408891588449478,0.169840902090073,-0.976188123226166,-0.133096665143967,-0.171295195817947,0.43514209985733,-0.748737931251526,0.500042855739594,0.151796370744705,-0.893162906169891,0.423341274261475, -0.34064969420433,-0.564744412899017,0.751679182052612,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.156405076384544,-0.596952438354492,0.786883294582367,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.72613924741745,0.535442233085632,0.431304275989532,-0.690247058868408,0.178245946764946,0.701275527477264,-0.639836966991425,0.246874988079071,0.727778375148773,-0.659900903701782,0.452796697616577,0.59958815574646,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.639836966991425,0.246874988079071,0.727778375148773,-0.690247058868408,0.178245946764946,0.701275527477264,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.649299025535584,-0.338454186916351,0.681072294712067,-0.559016168117523,-0.215597733855248,0.800636351108551,-0.690247058868408,0.178245946764946,0.701275527477264,-0.861315131187439,0.181052923202515,0.474716812372208,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.864985883235931,0.37462642788887,0.333847969770432,-0.83081316947937,0.301315695047379,0.467929810285568,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.844563007354736,0.0171194858849049,0.535182416439056,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.692233920097351,-0.67291522026062,0.260762959718704,0.151796370744705,-0.893162906169891,0.423341274261475,-0.358404159545898,-0.845226526260376,0.396407097578049, -0.647243857383728,-0.405161768198013,0.645692884922028,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.34064969420433,-0.564744412899017,0.751679182052612,-0.647243857383728,-0.405161768198013,0.645692884922028,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.14743447303772,-0.460478246212006,0.875341594219208,0.244968578219414,-0.0767860040068626,0.966485559940338,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.522818684577942,-0.0568677671253681,0.850544929504395,-0.775605142116547,-0.0662227943539619,0.627734959125519,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.331421911716461,-0.806994497776031,0.488793760538101,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.923407673835754,-0.172809228301048,0.342717438936234, -0.871014952659607,-0.424263268709183,0.247656226158142,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.923407673835754,-0.172809228301048,0.342717438936234,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.530206859111786,0.100595757365227,0.841879546642303,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.158640176057816,0.0965946391224861,0.982600033283234,0.0174392946064472,-0.157727032899857,0.987328767776489,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.53056800365448,-0.207617223262787,0.821822762489319,0.579925835132599,-0.717766225337982,-0.3853540122509,0.645713806152344,-0.220039650797844,-0.731188178062439,0.392777740955353,-0.563973963260651,-0.726401448249817,0.293798208236694,-0.882029175758362,-0.368384540081024,0.579925835132599,-0.717766225337982,-0.3853540122509,0.293798208236694,-0.882029175758362,-0.368384540081024,0.0681579038500786,-0.994212329387665,0.0830442756414413,0.161769852042198,-0.974958479404449,0.152598813176155,-0.218783125281334,-0.517780601978302,0.827065408229828,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.377197057008743,-0.298063486814499,0.876858353614807, -0.218783125281334,-0.517780601978302,0.827065408229828,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.188662573695183,-0.633236289024353,0.750611901283264,0.293798208236694,-0.882029175758362,-0.368384540081024,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0193124283105135,-0.74210524559021,-0.670005083084106,-0.0615345053374767,-0.946400821208954,-0.317078918218613,0.293798208236694,-0.882029175758362,-0.368384540081024,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972,0.0704923868179321,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.0787644907832146,-0.96135801076889,-0.263793289661407,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.65024209022522,-0.683634519577026,-0.331404685974121,0.24199965596199,-0.948591530323029,0.203986048698425,0.340434432029724,-0.915098071098328,0.216101616621017,0.626364231109619,-0.75530606508255,-0.192822501063347,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0353972837328911,-0.630800306797028,0.775137424468994,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.447912156581879,-0.140877023339272,0.882909059524536, -0.505191087722778,-0.124014981091022,0.854050517082214,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.169070288538933,-0.950376808643341,-0.261149764060974,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.0193124283105135,-0.74210524559021,-0.670005083084106,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.0615345053374767,-0.946400821208954,-0.317078918218613,-0.197991296648979,-0.942176342010498,-0.270376026630402,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.758384525775909,0.243889003992081,0.604459345340729,0.24859219789505,0.926495909690857,0.282501816749573,-0.100514478981495,0.314375013113022,0.943962454795837,0.00664448039606214,0.89234858751297,0.451297968626022,-0.109012864530087,0.977998495101929,0.177862659096718,-0.183847695589066,0.966428518295288,0.179488003253937, 0.12853179872036,0.854913532733917,0.502595722675323,0.00664448039606214,0.89234858751297,0.451297968626022,0.12853179872036,0.854913532733917,0.502595722675323,0.187445163726807,0.511297464370728,0.838712811470032,-0.069992259144783,0.555320203304291,0.828686058521271,0.0171615201979876,0.876817524433136,0.480516880750656,0.046251967549324,0.890573501586914,0.452481597661972,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.0424226783216,0.296286582946777,0.954156458377838,0.185406669974327,0.360577255487442,0.914116144180298,0.046251967549324,0.890573501586914,0.452481597661972,0.0171615201979876,0.876817524433136,0.480516880750656,-0.109012864530087,0.977998495101929,0.177862659096718,0.00664448039606214,0.89234858751297,0.451297968626022,0.080908939242363,0.956137537956238,0.281522214412689,0.00727432640269399,0.986923277378082,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,0.00727432640269399,0.986923277378082,0.161026418209076,0.080908939242363,0.956137537956238,0.281522214412689,0.171542316675186,0.957118153572083,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,0.171542316675186,0.957118153572083,0.233448192477226,0.080908939242363,0.956137537956238,0.281522214412689,0.0432916954159737,0.796547591686249,0.603023827075958,-0.069992259144783,0.555320203304291,0.828686058521271,0.0432916954159737,0.796547591686249,0.603023827075958,0.080908939242363,0.956137537956238,0.281522214412689,0.00664448039606214,0.89234858751297,0.451297968626022,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.00044033964513801,0.857838094234467,0.51391988992691,0.225808262825012,0.957561135292053,-0.179129242897034,0.438933074474335,0.880430459976196,-0.179387643933296,-0.498006135225296,0.389301002025604,0.77487713098526,-0.284841567277908,0.292440235614777,0.912876784801483,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.702935457229614,0.63435697555542,0.321672111749649, -0.602232098579407,0.563644886016846,0.565350294113159,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.323215007781982,0.943282067775726,0.0758355185389519,0.477838784456253,0.792661190032959,-0.378626853227615,-0.323215007781982,0.943282067775726,0.0758355185389519,-0.0831757560372353,0.939581155776978,0.33206781744957,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296,0.510045230388641,0.828637421131134,-0.230681270360947,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.498006135225296,0.389301002025604,0.77487713098526,-0.0443753078579903,0.882909715175629,0.467441201210022,-0.0831757560372353,0.939581155776978,0.33206781744957,-0.602232098579407,0.563644886016846,0.565350294113159,0.618943631649017,0.169027715921402,-0.767032206058502,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119,0.191680565476418,-0.884166955947876,0.590149700641632,0.106324933469296,-0.800261437892914,0.699705183506012,0.427644014358521,-0.572305202484131,0.486043959856033,0.298038214445114,-0.821543991565704,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631,-0.922386527061462,0.136373192071915,0.361393809318542,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.961905956268311,0.126988083124161,0.242096945643425,-0.922386527061462,0.136373192071915,0.361393809318542,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478,0.250758200883865,-0.482406258583069,0.640618324279785,0.597404718399048,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.514883160591125,0.0328956842422485,0.856628954410553, -0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.438263714313507,0.241573825478554,0.865775406360626,-0.281328231096268,0.118911549448967,0.952215552330017,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.899924099445343,0.231058403849602,0.369795471429825,-0.8117955327034,0.118040002882481,0.571886837482452,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.8117955327034,0.118040002882481,0.571886837482452,-0.739963114261627,0.167704880237579,0.651405930519104,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.8117955327034,0.118040002882481,0.571886837482452,-0.899924099445343,0.231058403849602,0.369795471429825,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.405952632427216,-0.25302666425705,0.878168523311615, -0.337558269500732,-0.222729057073593,0.914574325084686,-0.847808718681335,0.127517849206924,0.514742314815521,-0.755013465881348,0.127179101109505,0.64325749874115,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.383932620286942,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.383932620286942,0.132088497281075,0.913864493370056,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.585166156291962,0.298548936843872,0.753955662250519,-0.736577808856964,0.297644317150116,0.607339262962341,-0.585166156291962,0.298548936843872,0.753955662250519,-0.525971710681915,0.0807789713144302,0.846657276153564,-0.755013465881348,0.127179101109505,0.64325749874115,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.926096200942993,0.356152534484863,0.124503806233406,-0.899924099445343,0.231058403849602,0.369795471429825,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.899924099445343,0.231058403849602,0.369795471429825,-0.926096200942993,0.356152534484863,0.124503806233406,-0.849758863449097,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.849758863449097,0.226472169160843,0.476046502590179,-0.926096200942993,0.356152534484863,0.124503806233406,-0.700355410575867,0.465162545442581,-0.541411221027374,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.917545735836029,0.0924613624811172,0.386730790138245, -0.736577808856964,0.297644317150116,0.607339262962341,-0.701379120349884,0.42103236913681,0.575151324272156,-0.566419124603271,0.446817666292191,0.692476272583008,-0.585166156291962,0.298548936843872,0.753955662250519,-0.462802797555923,0.335958212614059,0.820332646369934,-0.585166156291962,0.298548936843872,0.753955662250519,-0.566419124603271,0.446817666292191,0.692476272583008,-0.389257401227951,0.367899239063263,0.844469547271729,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.670063674449921,0.104801684617996,0.734868168830872,-0.739276468753815,0.150933310389519,0.656269311904907,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.383932620286942,0.132088497281075,0.913864493370056,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677,0.74843692779541,-0.670063674449921,0.104801684617996,0.734868168830872,-0.514883160591125,0.0328956842422485,0.856628954410553,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.933271765708923,0.0356566943228245,0.357396692037582, -0.949614703655243,0.0149662410840392,0.313062191009521,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.933271765708923,0.0356566943228245,0.357396692037582,-0.813479363918304,-0.00906945671886206,0.581523001194,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.895226001739502,0.157463803887367,0.416863977909088,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.895226001739502,0.157463803887367,0.416863977909088,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.510507762432098,-0.444001197814941,0.736372709274292, -0.55286180973053,-0.0385416857898235,0.832381188869476,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.616519212722778,-0.455342262983322,0.642314195632935,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.456958532333374,-0.310317039489746,0.833601951599121,0.205764874815941,0.144822359085083,0.967826068401337,0.244968578219414,-0.0767860040068626,0.966485559940338,0.00927210599184036,-0.101372048258781,0.99480539560318,0.026632534340024,0.124120466411114,0.991909682750702,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.44353261590004,0.469896525144577,0.763201177120209,-0.487235128879547,0.602307498455048,0.632319211959839,-0.709937155246735,0.54696124792099,0.443646997213364,-0.719690024852753,0.419174522161484,0.553479015827179,-0.594367325305939,0.527927815914154,0.606646299362183,-0.16526772081852,0.578359544277191,0.798865914344788,-0.179719179868698,0.465985059738159,0.866348028182983,-0.654083967208862,0.394615858793259,0.64533132314682,-0.636985540390015,0.443951308727264,0.630203664302826,-0.654083967208862,0.394615858793259,0.64533132314682,-0.179719179868698,0.465985059738159,0.866348028182983,-0.162020102143288,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,-0.162020102143288,0.560337007045746,0.812263488769531,-0.179719179868698,0.465985059738159,0.866348028182983,0.0507387444376946,0.459851264953613,0.886545181274414,0.0581676289439201,0.571192860603333,0.818752288818359,0.0507387444376946,0.459851264953613,0.886545181274414,-0.179719179868698,0.465985059738159,0.866348028182983,-0.16526772081852,0.578359544277191,0.798865914344788,-0.298522680997849,0.122926026582718,0.946453094482422,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.0186418443918228,0.221836999058723,0.974905550479889, -0.409960985183716,0.234984055161476,0.881314098834991,-0.506407201290131,0.224265813827515,0.832620322704315,-0.49151623249054,0.284042507410049,0.823244571685791,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752,-0.37480103969574,0.327312290668488,0.867404639720917,-0.49151623249054,0.284042507410049,0.823244571685791,-0.593105614185333,0.348213493824005,0.725929081439972,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0135245211422443,-0.380902349948883,0.924516320228577,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.261222988367081,0.14337170124054,0.954571664333344,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.12591940164566,0.150871932506561,0.980500876903534,0.0226862858980894,0.138102903962135,0.990158021450043,-0.12591940164566,0.150871932506561,0.980500876903534,-0.129860892891884,-0.378767132759094,0.916335999965668,-0.0135245211422443,-0.380902349948883,0.924516320228577,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.99934709072113,-0.0248590148985386,-0.0262197498232126,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.428986668586731,0.611180424690247,0.665153324604034, -0.637912154197693,0.524314641952515,0.564058721065521,-0.664581894874573,0.481633543968201,0.571279287338257,-0.542732357978821,0.501746475696564,0.673566699028015,-0.999939262866974,0.00285967090167105,0.0106404405087233,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.926191806793213,0.116400174796581,0.35863596200943,-0.914867162704468,0.153272107243538,0.373531401157379,-0.910374224185944,0.148485288023949,0.3862264752388,-0.939631521701813,0.153399094939232,0.305877894163132,-0.910374224185944,0.148485288023949,0.3862264752388,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926795780658722,0.133818626403809,0.3509162068367,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.914867162704468,0.153272107243538,0.373531401157379,-0.926191806793213,0.116400174796581,0.35863596200943,-0.914867162704468,0.153272107243538,0.373531401157379,-0.958088934421539,-0.033353928476572,0.284522652626038,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.926795780658722,0.133818626403809,0.3509162068367,-0.298522680997849,0.122926026582718,0.946453094482422,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.235767140984535,0.346122115850449,0.908082246780396,-0.529072642326355,0.217875778675079,0.820129454135895,-0.392426759004593,0.205112621188164,0.896621465682983,-0.55286180973053,-0.0385416857898235,0.832381188869476, -0.563694715499878,0.0446579419076443,0.824775099754334,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.530328452587128,0.10359351336956,0.841439306735992,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.918760776519775,0.045384906232357,0.392197400331497,-0.921404659748077,0.300344526767731,0.246589884161949,-0.912839949131012,0.366738528013229,0.179516360163689,-0.938549876213074,0.168846443295479,0.301023334264755,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.894654810428619,0.0708979144692421,0.441096633672714, -0.927375435829163,0.0604105368256569,0.369222611188889,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.939631521701813,0.153399094939232,0.305877894163132,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.910374224185944,0.148485288023949,0.3862264752388,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.910374224185944,0.148485288023949,0.3862264752388,-0.927375435829163,0.0604105368256569,0.369222611188889,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.629563450813293,0.348871290683746,0.694218039512634,-0.37480103969574,0.327312290668488,0.867404639720917,-0.469541937112808,0.464283794164658,0.750979959964752,-0.639506042003632,0.483837932348251,0.597438633441925,-0.409960985183716,0.234984055161476,0.881314098834991,-0.37480103969574,0.327312290668488,0.867404639720917,-0.629563450813293,0.348871290683746,0.694218039512634,-0.590761244297028,0.21027672290802,0.778963983058929,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.669090986251831,0.108672223985195,0.735192239284515,-0.626672208309174,0.255842447280884,0.736088693141937,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.77647191286087,0.0245032440871,0.629675269126892,-0.669090986251831,0.108672223985195,0.735192239284515,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.653488278388977,-0.259704351425171,0.710989952087402, -0.573286294937134,-0.272017657756805,0.772883713245392,-0.669090986251831,0.108672223985195,0.735192239284515,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.762500584125519,0.610563993453979,0.214019775390625,-0.805146157741547,0.523773431777954,0.278210490942001,-0.859274387359619,0.29542076587677,0.417581170797348,-0.847808718681335,0.127517849206924,0.514742314815521,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0867536216974258,0.288804531097412,0.953449428081512,0.0307731032371521,0.261024415493011,0.964841604232788,0.0340906009078026,0.177746370434761,0.983485698699951,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.027668621391058,0.211265400052071,0.977037012577057,-0.0915354415774345,0.261345416307449,0.960895359516144,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.125742971897125,-0.662957012653351,0.738022148609161,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.52777773141861,0.480110883712769,0.700674116611481,-0.428986668586731,0.611180424690247,0.665153324604034,-0.542732357978821,0.501746475696564,0.673566699028015,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.253225147724152,-0.35441780090332,0.900147259235382,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.253225147724152,-0.35441780090332,0.900147259235382, -0.261222988367081,0.14337170124054,0.954571664333344,-0.498029559850693,0.248690649867058,0.830734312534332,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.77647191286087,0.0245032440871,0.629675269126892,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.680799663066864,-0.208428665995598,0.702188968658447,-0.635058343410492,-0.333720952272415,0.696657180786133,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.957215070724487,-0.128876686096191,0.259094893932343, -0.976993918418884,-0.160521164536476,0.140413165092468,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.978964686393738,0.106371738016605,0.174106821417809,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.976993918418884,-0.160521164536476,0.140413165092468,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.578717350959778,0.160483196377754,0.799582004547119,-0.619005084037781,0.113047316670418,0.777208507061005,-0.552518010139465,0.180195555090904,0.813789546489716,-0.522611916065216,0.119792513549328,0.844112873077393,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.968327283859253,-0.0703691765666008,0.239563062787056,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.571020781993866,-0.291943371295929,0.767270684242249, -0.542732357978821,0.501746475696564,0.673566699028015,-0.664581894874573,0.481633543968201,0.571279287338257,-0.639506042003632,0.483837932348251,0.597438633441925,-0.469541937112808,0.464283794164658,0.750979959964752,-0.529072642326355,0.217875778675079,0.820129454135895,-0.563694715499878,0.0446579419076443,0.824775099754334,-0.530328452587128,0.10359351336956,0.841439306735992,-0.552518010139465,0.180195555090904,0.813789546489716,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.788669764995575,0.415443122386932,0.453218460083008,-0.793161690235138,0.389079302549362,0.468520849943161,-0.867791414260864,0.325389176607132,0.375579476356506,-0.937809467315674,0.204933196306229,0.280206710100174,-0.867791414260864,0.325389176607132,0.375579476356506,-0.793161690235138,0.389079302549362,0.468520849943161,-0.891881763935089,0.246565267443657,0.379147052764893,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.599500894546509,-0.321622788906097,0.73291027545929,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.995428025722504,-0.0233537666499615,-0.0926159843802452, -0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.793161690235138,0.389079302549362,0.468520849943161,-0.76142829656601,0.432304978370667,0.483052164316177,-0.85773640871048,0.318832546472549,0.403279215097427,-0.891881763935089,0.246565267443657,0.379147052764893,-0.76142829656601,0.432304978370667,0.483052164316177,-0.793161690235138,0.389079302549362,0.468520849943161,-0.664581894874573,0.481633543968201,0.571279287338257,-0.637912154197693,0.524314641952515,0.564058721065521,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.974589943885803,0.150285556912422,0.166098326444626,-0.958487570285797,0.190219804644585,0.212409943342209,-0.940992951393127,0.168072536587715,0.293741136789322,-0.957204222679138,0.181513637304306,0.225416928529739,-0.8270303606987,0.233872473239899,0.511198997497559,-0.957204222679138,0.181513637304306,0.225416928529739,-0.940992951393127,0.168072536587715,0.293741136789322,-0.786397933959961,0.197700291872025,0.58522891998291,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.981885612010956,0.00184334872756153,0.189465641975403, -0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.489574462175369,-0.0383142903447151,0.871119320392609,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.20097516477108,-0.349854558706284,0.914992213249207,0.138299137353897,-0.216322302818298,0.966477155685425,0.0996207222342491,0.155612200498581,0.982782065868378,0.0314028672873974,0.188204348087311,0.981627702713013,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.194900542497635,-0.331308722496033,0.923172950744629,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.392426759004593,0.205112621188164,0.896621465682983,-0.129117503762245,0.13854855298996,0.981902718544006,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.384387612342834,0.0363270901143551,0.922456741333008, -0.740522086620331,-0.668854534626007,0.065273717045784,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.482406258583069,0.640618324279785,0.597404718399048,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728,0.00488457176834345,0.505567967891693,0.862772941589355,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.354942172765732,-0.909834563732147,-0.214981570839882,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.56955087184906,-0.768941879272461,0.290413826704025,-0.354942172765732,-0.909834563732147,-0.214981570839882, -0.716389060020447,-0.69769012928009,0.00390529190190136,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.0633096471428871,-0.774920701980591,0.62887978553772,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0737119764089584,-0.466615557670593,0.881383299827576,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.284990429878235,-0.166815251111984,0.943903148174286,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.77647191286087,0.0245032440871,0.629675269126892,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.884575426578522,-0.272238790988922,0.378698289394379, -0.933359444141388,0.180034801363945,-0.310527950525284,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.973323583602905,-0.0783669799566269,0.215637981891632,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.0186418443918228,0.221836999058723,0.974905550479889,-0.110501579940319,0.212603434920311,0.970870316028595,-0.215113177895546,0.235299572348595,0.947818756103516,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.939980566501617,0.104119330644608,0.324954867362976,-0.942853271961212,0.10562913864851,0.316022574901581,-0.928196668624878,0.146431341767311,0.342065423727036,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.00068405584897846,-0.208776980638504,0.977963030338287,0.0314028672873974,0.188204348087311,0.981627702713013,0.0996207222342491,0.155612200498581,0.982782065868378,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.129117503762245,0.13854855298996,0.981902718544006,-0.392426759004593,0.205112621188164,0.896621465682983,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.493602007627487,-0.18142081797123,0.850554823875427,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.261337131261826,-0.401412606239319,0.877821683883667,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.523851454257965,-0.504004776477814,0.686701416969299,-0.998352527618408,-0.0341868922114372,-0.0460811778903008, -0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.982630908489227,0.117604449391365,0.143546640872955,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.998964846134186,-0.000229320270591415,-0.0454886071383953,-0.989189743995667,0.0587216019630432,-0.134370610117912,-0.997379958629608,0.0722400844097137,-0.00381774920970201,-0.998352527618408,-0.0341868922114372,-0.0460811778903008,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.401645928621292,0.0858200713992119,0.911765038967133,-0.392426759004593,0.205112621188164,0.896621465682983,-0.529072642326355,0.217875778675079,0.820129454135895,-0.942853271961212,0.10562913864851,0.316022574901581,-0.939980566501617,0.104119330644608,0.324954867362976,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075,-0.942853271961212,0.10562913864851,0.316022574901581,-0.945931136608124,0.172555223107338,0.274661630392075,-0.937809467315674,0.204933196306229,0.280206710100174,-0.891881763935089,0.246565267443657,0.379147052764893,-0.15314356982708,-0.075783796608448,0.985293805599213,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.0301125477999449,-0.572418868541718,0.819408237934113,-0.136693820357323,-0.553743422031403,0.821390867233276,-0.15314356982708,-0.075783796608448,0.985293805599213,0.00911593530327082,-0.103348582983017,0.994603395462036,-0.787644863128662,0.107126019895077,0.606745064258575,-0.525317013263702,-0.0670165792107582,0.848263382911682, -0.489574462175369,-0.0383142903447151,0.871119320392609,-0.739276468753815,0.150933310389519,0.656269311904907,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.841734766960144,0.21214547753334,0.496464431285858,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.953642725944519,-0.152424976229668,0.259484380483627,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.0771657377481461,-0.907520055770874,-0.412859290838242, -0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.713547646999359,0.198780298233032,0.671815574169159,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.739374160766602,-0.61436802148819,-0.275459170341492,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.81877064704895,-0.518556773662567,-0.246401205658913,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.713547646999359,0.198780298233032,0.671815574169159,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.296029925346375,0.469678968191147,0.831725895404816,-0.406924575567245,0.55693382024765,0.724042177200317,-0.431310623884201,0.54215931892395,0.721134126186371,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.979476630687714,-0.044322844594717,0.196624115109444, -0.979476630687714,-0.044322844594717,0.196624115109444,-0.79594624042511,-0.000148868231917731,0.605367302894592,-0.720110774040222,-0.0107529554516077,0.693775773048401,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.96815037727356,0.0736105665564537,-0.239304021000862,-0.858656167984009,-0.00651147030293942,-0.512510657310486,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.397862493991852,-0.0639909207820892,0.915210664272308,0.0111285699531436,-0.0777815505862236,0.9969083070755,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.389989584684372,-0.185713946819305,0.901897132396698,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.389989584684372,-0.185713946819305,0.901897132396698,0.00655650394037366,-0.135652124881744,0.990734815597534,-0.989431083202362,0.138839796185493,-0.0418281517922878, -0.986240923404694,0.124055705964565,-0.109266042709351,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.979892313480377,0.170224979519844,0.104088805615902,-0.939631521701813,0.153399094939232,0.305877894163132,-0.979892313480377,0.170224979519844,0.104088805615902,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.958259165287018,0.0577557012438774,0.280006498098373,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.992385387420654,0.0998689383268356,0.0720929130911827,-0.986240923404694,0.124055705964565,-0.109266042709351,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.284990429878235,-0.166815251111984,0.943903148174286,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.0928481444716454,-0.394505769014359,0.914190590381622,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0633096471428871,-0.774920701980591,0.62887978553772,-0.261337131261826,-0.401412606239319,0.877821683883667,0.00927210599184036,-0.101372048258781,0.99480539560318,0.244968578219414,-0.0767860040068626,0.966485559940338,0.14743447303772,-0.460478246212006,0.875341594219208,-0.0928481444716454,-0.394505769014359,0.914190590381622,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.953642725944519,-0.152424976229668,0.259484380483627, -0.931119084358215,-0.21125616133213,0.297301381826401,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.791147410869598,-0.230280995368958,0.566618502140045,-0.905689835548401,-0.202472388744354,0.372465878725052,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.739293396472931,-0.211158558726311,0.639419496059418,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.960240244865417,0.158970504999161,0.229493051767349,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.910772800445557,0.214318007230759,0.352931588888168,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.525317013263702,-0.0670165792107582,0.848263382911682,-0.787644863128662,0.107126019895077,0.606745064258575,-0.82659912109375,0.121020883321762,0.549625158309937,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.787644863128662,0.107126019895077,0.606745064258575,-0.739276468753815,0.150933310389519,0.656269311904907,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.80333799123764,-0.434850186109543,0.406882554292679, -0.740851521492004,-0.347129315137863,0.575013279914856,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.785154461860657,-0.227399781346321,0.576039791107178,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.758769392967224,-0.645694494247437,-0.085717998445034,-0.779531359672546,-0.612799942493439,-0.129641994833946,-0.650723218917847,-0.735029816627502,-0.190500557422638,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.826374292373657,-0.387590408325195,0.408508449792862,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.749491930007935,-0.0978431180119514,0.654743134975433, -0.431310623884201,0.54215931892395,0.721134126186371,-0.704075336456299,0.454022943973541,0.546022951602936,-0.715115904808044,0.391270339488983,0.57923811674118,-0.451172351837158,0.441036701202393,0.775841593742371,-0.704075336456299,0.454022943973541,0.546022951602936,-0.431310623884201,0.54215931892395,0.721134126186371,-0.406924575567245,0.55693382024765,0.724042177200317,-0.530960738658905,0.402330845594406,0.74579530954361,-0.737271249294281,0.345291316509247,0.580693602561951,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.137671425938606,0.655901074409485,0.742186188697815,0.0635503008961678,0.655404150485992,0.752600014209747,0.0513622872531414,0.468802571296692,0.881808400154114,-0.185234054923058,0.48134982585907,0.856732606887817,-0.660850763320923,0.309517800807953,0.683721423149109,-0.852710962295532,0.37292954325676,0.365797132253647,-0.106629706919193,0.951739728450775,0.287787467241287,0.171542316675186,0.957118153572083,0.233448192477226,-0.758384525775909,0.243889003992081,0.604459345340729,-0.660850763320923,0.309517800807953,0.683721423149109,0.171542316675186,0.957118153572083,0.233448192477226,0.24859219789505,0.926495909690857,0.282501816749573,-0.974589943885803,0.150285556912422,0.166098326444626,-0.957204222679138,0.181513637304306,0.225416928529739,-0.924049556255341,0.299373358488083,0.237714126706123,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174,-0.960206747055054,0.212085798382759,0.18172125518322,-0.924049556255341,0.299373358488083,0.237714126706123,-0.867791414260864,0.325389176607132,0.375579476356506,-0.788669764995575,0.415443122386932,0.453218460083008, -0.867791414260864,0.325389176607132,0.375579476356506,-0.924049556255341,0.299373358488083,0.237714126706123,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559,-0.824751377105713,0.366082817316055,0.431008726358414,-0.924049556255341,0.299373358488083,0.237714126706123,-0.957204222679138,0.181513637304306,0.225416928529739,-0.482406258583069,0.640618324279785,0.597404718399048,-0.559565424919128,0.213157281279564,0.80090606212616,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616,-0.482406258583069,0.640618324279785,0.597404718399048,0.00488457176834345,0.505567967891693,0.862772941589355,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.922386527061462,0.136373192071915,0.361393809318542,-0.559565424919128,0.213157281279564,0.80090606212616,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.940992951393127,0.168072536587715,0.293741136789322,-0.88217681646347,0.30687540769577,0.357199609279633,-0.737271249294281,0.345291316509247,0.580693602561951,-0.786397933959961,0.197700291872025,0.58522891998291,-0.929433286190033,0.240452021360397,0.27988663315773,-0.938261330127716,0.284641981124878,0.196582421660423,-0.88217681646347,0.30687540769577,0.357199609279633,-0.940992951393127,0.168072536587715,0.293741136789322,-0.958487570285797,0.190219804644585,0.212409943342209,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.552518010139465,0.180195555090904,0.813789546489716,-0.619005084037781,0.113047316670418,0.777208507061005,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.529072642326355,0.217875778675079,0.820129454135895,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.35664427280426,-0.676209807395935,0.64462798833847, -0.892671883106232,-0.425682097673416,0.14809350669384,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.897795557975769,-0.43993416428566,0.0205198600888252,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.954627275466919,-0.0333360694348812,0.295931607484818,-0.965968608856201,-0.178311392664909,0.187375888228416,-0.949234426021576,-0.150814101099968,0.27606001496315,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.892671883106232,-0.425682097673416,0.14809350669384,-0.749754548072815,-0.661690354347229,-0.00583517225459218,-0.746228098869324,-0.656993210315704,0.107254423201084,-0.871014952659607,-0.424263268709183,0.247656226158142,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.386017560958862,-0.663375020027161,0.641033530235291, -0.616519212722778,-0.455342262983322,0.642314195632935,-0.456958532333374,-0.310317039489746,0.833601951599121,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.981885612010956,0.00184334872756153,0.189465641975403,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.973708033561707,-0.0501450300216675,-0.222211867570877,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.997315526008606,-0.0355834849178791,0.0639960467815399,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.573286294937134,-0.272017657756805,0.772883713245392,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.726376414299011,-0.322602510452271,0.606881320476532,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.44353261590004,0.469896525144577,0.763201177120209,-0.155023440718651,0.460458368062973,0.874039947986603,-0.148301675915718,0.617360651493073,0.772575199604034,-0.487235128879547,0.602307498455048,0.632319211959839,0.0497331917285919,0.445011228322983,0.894142985343933,0.0604556538164616,0.606487095355988,0.792791604995728,-0.148301675915718,0.617360651493073,0.772575199604034,-0.155023440718651,0.460458368062973,0.874039947986603, -0.938261330127716,0.284641981124878,0.196582421660423,-0.921404659748077,0.300344526767731,0.246589884161949,-0.854642570018768,0.365032374858856,0.369239091873169,-0.88217681646347,0.30687540769577,0.357199609279633,-0.88217681646347,0.30687540769577,0.357199609279633,-0.854642570018768,0.365032374858856,0.369239091873169,-0.704075336456299,0.454022943973541,0.546022951602936,-0.737271249294281,0.345291316509247,0.580693602561951,-0.715115904808044,0.391270339488983,0.57923811674118,-0.704075336456299,0.454022943973541,0.546022951602936,-0.854642570018768,0.365032374858856,0.369239091873169,-0.878912448883057,0.190948858857155,0.437094360589981,-0.918760776519775,0.045384906232357,0.392197400331497,-0.878912448883057,0.190948858857155,0.437094360589981,-0.854642570018768,0.365032374858856,0.369239091873169,-0.921404659748077,0.300344526767731,0.246589884161949,0.152057304978371,-0.511582612991333,0.845672428607941,0.138299137353897,-0.216322302818298,0.966477155685425,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.32945853471756,-0.893185019493103,-0.306068062782288,-0.319887846708298,-0.889229834079742,-0.327019929885864,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.619028568267822,-0.321996480226517,0.716325223445892,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.899289608001709,-0.225166246294975,0.374937802553177,-0.931119084358215,-0.21125616133213,0.297301381826401,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.00260085915215313,-0.437005490064621,0.899455070495605, 0.028565090149641,-0.175006538629532,0.984152793884277,0.138299137353897,-0.216322302818298,0.966477155685425,0.152057304978371,-0.511582612991333,0.845672428607941,-0.230118215084076,-0.0391505397856236,0.972374856472015,0.028565090149641,-0.175006538629532,0.984152793884277,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.29495570063591,-0.303489834070206,0.906032621860504,-0.00260085915215313,-0.437005490064621,0.899455070495605,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.00260085915215313,-0.437005490064621,0.899455070495605,0.152057304978371,-0.511582612991333,0.845672428607941,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.572961747646332,-0.0624557621777058,0.817198932170868,-0.615767419338226,0.0138289360329509,0.787806570529938,-0.58394068479538,-0.0111314477398992,0.811720013618469,-0.525046348571777,-0.114187583327293,0.843378603458405,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.913328051567078,0.257958859205246,0.315101653337479,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099,-0.927467882633209,0.10914921015501,0.357616752386093,-0.927535772323608,0.260400146245956,0.26808425784111,-0.898379147052765,0.257861793041229,0.355558961629868,-0.913328051567078,0.257958859205246,0.315101653337479,-0.899272859096527,0.337114810943604,0.278679043054581,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.838127374649048,0.00188649771735072,0.545471370220184, -0.996842920780182,-0.019830010831356,0.0768825337290764,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.823809504508972,-0.013852178119123,0.566697418689728,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.77647191286087,0.0245032440871,0.629675269126892,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.626672208309174,0.255842447280884,0.736088693141937,-0.669090986251831,0.108672223985195,0.735192239284515,-0.162437900900841,-0.62639182806015,0.762395679950714,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.10322830080986,-0.541345357894897,0.834439396858215,0.0824021622538567,0.119332544505596,0.98942893743515,0.028565090149641,-0.175006538629532,0.984152793884277,-0.230118215084076,-0.0391505397856236,0.972374856472015,-0.129117503762245,0.13854855298996,0.981902718544006,-0.859274387359619,0.29542076587677,0.417581170797348,-0.755013465881348,0.127179101109505,0.64325749874115,-0.847808718681335,0.127517849206924,0.514742314815521,-0.736577808856964,0.297644317150116,0.607339262962341,-0.755013465881348,0.127179101109505,0.64325749874115,-0.859274387359619,0.29542076587677,0.417581170797348,-0.808332681655884,0.323168575763702,0.49209788441658,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.838127374649048,0.00188649771735072,0.545471370220184,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999627947807312,0.018455671146512,0.020082326605916,-0.842230319976807,0.0367605164647102,0.53786313533783,-0.711766242980957,-0.226245254278183,0.664982616901398,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.603729546070099,-0.032661035656929,0.796519875526428,-0.711766242980957,-0.226245254278183,0.664982616901398, -0.702881813049316,-0.068748727440834,0.707976579666138,-0.623834013938904,0.0451370552182198,0.78025233745575,-0.10322830080986,-0.541345357894897,0.834439396858215,-0.166397944092751,-0.507038652896881,0.845708906650543,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.783675134181976,0.0171119719743729,0.620935142040253,-0.256247758865356,0.183180019259453,0.94909542798996,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.599762678146362,0.237867310643196,0.764005124568939,0.0824021622538567,0.119332544505596,0.98942893743515,-0.129117503762245,0.13854855298996,0.981902718544006,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.0553458705544472,-0.183565944433212,0.981448113918304,0.0824021622538567,0.119332544505596,0.98942893743515,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,0.0996207222342491,0.155612200498581,0.982782065868378,-0.793161690235138,0.389079302549362,0.468520849943161,-0.788669764995575,0.415443122386932,0.453218460083008,-0.639506042003632,0.483837932348251,0.597438633441925,-0.664581894874573,0.481633543968201,0.571279287338257,-0.38422480225563,0.137366592884064,0.912963151931763,-0.113911136984825,0.222564980387688,0.968240201473236,-0.365421146154404,0.118911430239677,0.923215806484222,-0.215113177895546,0.235299572348595,0.947818756103516,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.442632555961609,-0.414916336536407,0.794934511184692,-0.42670676112175,-0.452820241451263,0.782863438129425,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.110501579940319,0.212603434920311,0.970870316028595, -0.0186418443918228,0.221836999058723,0.974905550479889,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.245075523853302,-0.238657772541046,0.939670383930206,-0.027668621391058,0.211265400052071,0.977037012577057,0.0304032936692238,0.174695551395416,0.984152972698212,0.0344220362603664,0.22930283844471,0.972746253013611,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0284836571663618,0.148866042494774,0.988447070121765,0.0304032936692238,0.174695551395416,0.984152972698212,-0.027668621391058,0.211265400052071,0.977037012577057,0.0340906009078026,0.177746370434761,0.983485698699951,-0.999627947807312,0.018455671146512,0.020082326605916,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998331546783447,-0.0358092784881592,-0.0452967919409275,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.999627947807312,0.018455671146512,0.020082326605916,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.894654810428619,0.0708979144692421,0.441096633672714,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.658462405204773,-0.192036494612694,0.727701365947723,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.708954691886902,-0.0861286148428917,0.69997501373291,-0.894654810428619,0.0708979144692421,0.441096633672714, -0.841734766960144,0.21214547753334,0.496464431285858,-0.721355617046356,0.238694369792938,0.650131583213806,-0.772696316242218,0.194377049803734,0.604282975196838,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.807132244110107,0.16207791864872,0.567686796188354,-0.807132244110107,0.16207791864872,0.567686796188354,-0.800202667713165,0.314497977495193,0.510653257369995,-0.77285635471344,0.360512226819992,0.522229790687561,-0.772696316242218,0.194377049803734,0.604282975196838,-0.772696316242218,0.194377049803734,0.604282975196838,-0.721355617046356,0.238694369792938,0.650131583213806,-0.774853527545929,0.101396143436432,0.62395578622818,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.629563450813293,0.348871290683746,0.694218039512634,-0.824751377105713,0.366082817316055,0.431008726358414,-0.8270303606987,0.233872473239899,0.511198997497559,-0.590761244297028,0.21027672290802,0.778963983058929,-0.639506042003632,0.483837932348251,0.597438633441925,-0.788669764995575,0.415443122386932,0.453218460083008,-0.824751377105713,0.366082817316055,0.431008726358414,-0.629563450813293,0.348871290683746,0.694218039512634,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.830214977264404,0.100066982209682,0.548388242721558,-0.809095621109009,0.140354558825493,0.570670545101166,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.956733524799347,-0.225288674235344,0.18413570523262,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.903163015842438,0.185778304934502,0.387017965316772,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.571020781993866,-0.291943371295929,0.767270684242249, -0.573286294937134,-0.272017657756805,0.772883713245392,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.773173451423645,0.234929323196411,-0.589076459407806,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.687806069850922,-0.158765524625778,-0.708319365978241,-0.744009256362915,0.0031586263794452,-0.668161869049072,-0.939631521701813,0.153399094939232,0.305877894163132,-0.926795780658722,0.133818626403809,0.3509162068367,-0.97424703836441,0.120223365724087,0.190758988261223,-0.979892313480377,0.170224979519844,0.104088805615902,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.979892313480377,0.170224979519844,0.104088805615902, -0.97424703836441,0.120223365724087,0.190758988261223,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.97424703836441,0.120223365724087,0.190758988261223,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.959095060825348,0.0579339526593685,0.277092695236206,-0.97424703836441,0.120223365724087,0.190758988261223,-0.926795780658722,0.133818626403809,0.3509162068367,-0.948452949523926,0.0132069662213326,0.316642642021179,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.905668199062347,0.0821359232068062,0.415955275297165,-0.734256982803345,-0.130370453000069,0.666235864162445,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.926191806793213,0.116400174796581,0.35863596200943,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.505191087722778,-0.124014981091022,0.854050517082214,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.680589377880096,-0.727077186107636,0.0903155356645584,-0.450285315513611,-0.862574934959412,-0.230667769908905,-0.905433773994446,-0.0582202337682247,0.420476019382477,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.951001286506653,-0.02836849167943,0.307882815599442,-0.706978023052216,-0.108872137963772,0.698805391788483,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.838247179985046,-0.0138563737273216,0.54511433839798, -0.905433773994446,-0.0582202337682247,0.420476019382477,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.905333578586578,0.0703608244657516,0.418832272291183,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.629507005214691,-0.274495869874954,0.726892650127411,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.656185150146484,-0.0951608046889305,0.748575627803802,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.655879259109497,-0.0266539473086596,0.754395127296448,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.971085906028748,-0.227177411317825,0.0733662322163582, -0.890801727771759,-0.452551037073135,-0.0408632569015026,-0.971085906028748,-0.227177411317825,0.0733662322163582,-0.968295395374298,-0.216806933283806,-0.124091781675816,-0.905104517936707,-0.391508787870407,-0.165851414203644,-0.0374716036021709,0.192808955907822,0.98052054643631,0.205764874815941,0.144822359085083,0.967826068401337,0.0744598954916,0.293609887361526,0.953020930290222,0.139874473214149,0.332423865795136,0.932700097560883,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.069260835647583,0.0269219465553761,0.997235238552094,0.244968578219414,-0.0767860040068626,0.966485559940338,0.205764874815941,0.144822359085083,0.967826068401337,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.927130460739136,-0.0191504992544651,-0.374249011278152,-0.995428025722504,-0.0233537666499615,-0.0926159843802452,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.876246690750122,-0.00972981471568346,-0.481764525175095,-0.0528050363063812,-0.813004612922668,0.579857885837555,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.381353855133057,-0.796372532844543,0.469425201416016,-0.941334009170532,-0.241035461425781,0.236203595995903,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.929982125759125,-0.229528427124023,0.287140995264053,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.910947680473328,-0.114077113568783,0.396435052156448,-0.813457071781158,-0.0988521501421928,0.573162972927094,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.813457071781158,-0.0988521501421928,0.573162972927094, -0.910947680473328,-0.114077113568783,0.396435052156448,-0.958112895488739,-0.0412571057677269,0.28340345621109,-0.926191806793213,0.116400174796581,0.35863596200943,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.256247758865356,0.183180019259453,0.94909542798996,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.438927531242371,-0.110836811363697,0.891660153865814,-0.519543766975403,-0.00114526739344001,0.854443073272705,-0.42945921421051,0.0406228676438332,0.902172148227692,-0.335694938898087,-0.0845088064670563,0.938172280788422,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.996842920780182,-0.019830010831356,0.0768825337290764,-0.998881995677948,0.0170586127787828,0.0440875962376595,-0.946490168571472,0.0598345808684826,0.317137449979782,-0.986233770847321,-0.0181744769215584,0.164355054497719,-0.985882997512817,0.0816566720604897,0.146174341440201,-0.910772800445557,0.214318007230759,0.352931588888168,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.00449910387396812,-0.161412835121155,0.986876726150513,-0.394418269395828,-0.115748293697834,0.911612093448639,-0.313990563154221,-0.19352200627327,0.929494023323059,-0.00140566960908473,-0.234566405415535,0.97209906578064,-0.00386956869624555,-0.264760941267014,0.964306354522705,-0.3644839823246,-0.202188208699226,0.908994674682617,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.985641956329346,-0.0124337384477258,-0.168390318751335,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.978283286094666,-0.0603795535862446,0.198282822966576,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.999477684497833,-0.0109285833314061,0.0304120387881994,-0.99614292383194,-0.0721546709537506,-0.0499294139444828,-0.394418269395828,-0.115748293697834,0.911612093448639,0.00449910387396812,-0.161412835121155,0.986876726150513, 0.0111285699531436,-0.0777815505862236,0.9969083070755,-0.397862493991852,-0.0639909207820892,0.915210664272308,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.99179345369339,0.127844139933586,-0.0012682982487604,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.985770165920258,0.0388064943253994,0.163558095693588,-0.905546963214874,-0.0230849031358957,0.423617511987686,0.409033417701721,0.056328222155571,-0.910779237747192,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914,0.426036864519119,0.191680565476418,-0.884166955947876,0.52705591917038,-0.123320385813713,-0.840835392475128,0.555061399936676,0.0270265471190214,-0.831370174884796,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.903163015842438,0.185778304934502,0.387017965316772,-0.864785015583038,0.227262705564499,0.447770565748215,-0.907959640026093,0.246083408594131,0.339193552732468,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.978964686393738,0.106371738016605,0.174106821417809,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.907959640026093,0.246083408594131,0.339193552732468,-0.93869537115097,0.246357470750809,0.241161808371544,-0.927535772323608,0.260400146245956,0.26808425784111,-0.93869537115097,0.246357470750809,0.241161808371544,-0.907959640026093,0.246083408594131,0.339193552732468,-0.898379147052765,0.257861793041229,0.355558961629868,-0.873595476150513,0.228950142860413,0.429433107376099,-0.898379147052765,0.257861793041229,0.355558961629868,-0.907959640026093,0.246083408594131,0.339193552732468,-0.864785015583038,0.227262705564499,0.447770565748215, -0.912839949131012,0.366738528013229,0.179516360163689,-0.951293051242828,0.220237165689468,0.215724766254425,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917084217071533,0.247074887156487,0.312906622886658,-0.922440767288208,0.315537393093109,0.222573891282082,-0.930616736412048,0.324010014533997,0.170205876231194,-0.920456767082214,0.196246728301048,0.338003754615784,-0.90205317735672,0.348495870828629,0.25465789437294,-0.913878262042999,0.245342120528221,0.323471456766129,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92311555147171,0.291509866714478,0.250758200883865,-0.917084217071533,0.247074887156487,0.312906622886658,-0.913878262042999,0.245342120528221,0.323471456766129,-0.90205317735672,0.348495870828629,0.25465789437294,-0.899272859096527,0.337114810943604,0.278679043054581,-0.92311555147171,0.291509866714478,0.250758200883865,-0.935693740844727,0.265559196472168,0.232283264398575,-0.90205317735672,0.348495870828629,0.25465789437294,-0.90205317735672,0.348495870828629,0.25465789437294,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956,0.26808425784111,-0.899272859096527,0.337114810943604,0.278679043054581,-0.913328051567078,0.257958859205246,0.315101653337479,-0.922440767288208,0.315537393093109,0.222573891282082,-0.917084217071533,0.247074887156487,0.312906622886658,-0.899272859096527,0.337114810943604,0.278679043054581,-0.927467882633209,0.10914921015501,0.357616752386093,-0.951293051242828,0.220237165689468,0.215724766254425,-0.922440767288208,0.315537393093109,0.222573891282082,-0.913328051567078,0.257958859205246,0.315101653337479,0.636519849300385,0.647450149059296,-0.419107168912888,0.904918491840363,0.223670721054077,-0.362068980932236,0.611642181873322,0.428768634796143,-0.664869368076324,0.904918491840363,0.223670721054077,-0.362068980932236,0.699705183506012,0.427644014358521,-0.572305202484131,0.622634530067444,0.273028820753098,-0.733335912227631,0.611642181873322,0.428768634796143,-0.664869368076324,-0.111326843500137,-0.985514283180237,0.127937391400337, -0.118598200380802,-0.990273535251617,0.0727519541978836,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.669449508190155,-0.697340130805969,0.256035417318344,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.523851454257965,-0.504004776477814,0.686701416969299,-0.298621833324432,-0.860875487327576,0.411968946456909,-0.536415159702301,-0.78416246175766,0.312006503343582,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.905678987503052,-0.296837091445923,-0.302709937095642,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.961785852909088,-0.0866831690073013,-0.259719133377075,-0.908703505992889,-0.107983402907848,-0.403233885765076,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.933533489704132,-0.188960582017899,-0.304645866155624,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.855788469314575,-0.355743646621704,-0.375596284866333,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.843913793563843,-0.430510014295578,-0.320110350847244,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.906999528408051,-0.118946090340614,-0.403984785079956,-0.908703505992889,-0.107983402907848,-0.403233885765076, -0.906999528408051,-0.118946090340614,-0.403984785079956,-0.899797379970551,-0.265796363353729,-0.346001297235489,-0.88613361120224,-0.217736631631851,-0.40909406542778,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.233382239937782,0.37978932261467,0.8951495885849,0.00488457176834345,0.505567967891693,0.862772941589355,-0.233382239937782,0.37978932261467,0.8951495885849,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.559565424919128,0.213157281279564,0.80090606212616,-0.388118088245392,0.0798478573560715,0.918144166469574,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.559565424919128,0.213157281279564,0.80090606212616,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.168531179428101,0.0236741546541452,-0.985412001609802,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.234179049730301,-0.104612432420254,-0.966548681259155,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.91798335313797,-0.00180715974420309,-0.396614909172058, -0.948787927627563,-0.18914021551609,0.25303652882576,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.847999572753906,0.148594439029694,0.50874000787735,-0.933067381381989,0.178451672196388,0.312314331531525,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.767987847328186,-0.497150540351868,0.403777122497559,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.851623713970184,0.0635921731591225,0.520281732082367,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.812781035900116,0.145446926355362,0.564120769500732,-0.812781035900116,0.145446926355362,0.564120769500732,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.869927883148193,0.417829841375351,0.261999487876892,-0.917095720767975,0.0718847438693047,0.392132639884949, -0.851623713970184,0.0635921731591225,0.520281732082367,-0.812781035900116,0.145446926355362,0.564120769500732,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.725173890590668,0.124969810247421,0.677130281925201,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.812781035900116,0.145446926355362,0.564120769500732,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293,-0.737713038921356,0.159859821200371,0.655914902687073,-0.812781035900116,0.145446926355362,0.564120769500732,-0.869927883148193,0.417829841375351,0.261999487876892,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.00275634881108999,-0.768494009971619,-0.639851033687592,-0.189235538244247,-0.947714388370514,-0.256957918405533,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.531938970088959,-0.742404460906982,0.407279402017593,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.189235538244247,-0.947714388370514,-0.256957918405533,-0.794985055923462,-0.313673406839371,-0.519237637519836,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.789937257766724,-0.089169554412365,0.606669545173645,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.741121232509613,0.0951398462057114,0.664595901966095,-0.725173890590668,0.124969810247421,0.677130281925201,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.741121232509613,0.0951398462057114,0.664595901966095, -0.743901908397675,-0.0401553101837635,0.667081356048584,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.979986965656281,-0.191784739494324,0.0533309541642666,-0.905546963214874,-0.0230849031358957,0.423617511987686,-0.743901908397675,-0.0401553101837635,0.667081356048584,-0.63937246799469,-0.666334867477417,0.383667439222336,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.233382239937782,0.37978932261467,0.8951495885849,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.616599321365356,0.328253507614136,0.715580105781555,-0.570039451122284,0.607050001621246,0.553665339946747,-0.616599321365356,0.328253507614136,0.715580105781555,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.0990706533193588,0.626940011978149,0.772742688655853,0.0937898680567741,0.660230219364166,0.745184183120728,0.517754137516022,0.73391991853714,0.439650118350983,0.0937898680567741,0.660230219364166,0.745184183120728,-0.0990706533193588,0.626940011978149,0.772742688655853,-0.233382239937782,0.37978932261467,0.8951495885849,0.00488457176834345,0.505567967891693,0.862772941589355,-0.00293335225433111,0.995907425880432,0.0903318226337433,-0.58504182100296,0.777154207229614,0.23185633122921,-0.570039451122284,0.607050001621246,0.553665339946747,-0.0140273822471499,0.873466432094574,0.486682236194611,-0.00293335225433111,0.995907425880432,0.0903318226337433,-0.0140273822471499,0.873466432094574,0.486682236194611,0.545511066913605,0.803328096866608,0.238917589187622,0.61859929561615,0.783204674720764,-0.0626528933644295,0.622634530067444,0.273028820753098,-0.733335912227631,0.0131716737523675,0.392405301332474,-0.919698059558868,0.0255556665360928,0.675508499145508,-0.736909151077271,0.611642181873322,0.428768634796143,-0.664869368076324,0.636519849300385,0.647450149059296,-0.419107168912888,0.611642181873322,0.428768634796143,-0.664869368076324, 0.0255556665360928,0.675508499145508,-0.736909151077271,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,0.00320792081765831,0.937661468982697,-0.347535103559494,0.0255556665360928,0.675508499145508,-0.736909151077271,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.714973926544189,0.530257403850555,-0.455674588680267,0.0255556665360928,0.675508499145508,-0.736909151077271,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.0128433015197515,0.17829929292202,-0.983892500400543,-0.0574504472315311,0.0463431552052498,-0.997272133827209,0.590149700641632,0.106324933469296,-0.800261437892914,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.0128433015197515,0.17829929292202,-0.983892500400543,0.618943631649017,0.169027715921402,-0.767032206058502,0.622634530067444,0.273028820753098,-0.733335912227631,0.618943631649017,0.169027715921402,-0.767032206058502,-0.0128433015197515,0.17829929292202,-0.983892500400543,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.730222046375275,0.28398671746254,-0.621391415596008,0.0131716737523675,0.392405301332474,-0.919698059558868,-0.0128433015197515,0.17829929292202,-0.983892500400543,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.258316278457642,-0.4798983335495,-0.83843320608139,-0.236963242292404,-0.687786102294922,-0.686147749423981,0.614885807037354,-0.39096936583519,-0.684878408908844,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.258316278457642,-0.4798983335495,-0.83843320608139,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128,0.5450439453125,-0.288073390722275,-0.787363231182098,-0.258316278457642,-0.4798983335495,-0.83843320608139, -0.203820779919624,-0.25819143652916,-0.944348573684692,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.258316278457642,-0.4798983335495,-0.83843320608139,-0.849323332309723,-0.375679105520248,-0.37083026766777,0.5450439453125,-0.288073390722275,-0.787363231182098,0.52705591917038,-0.123320385813713,-0.840835392475128,0.482761442661285,-0.152583673596382,-0.862357020378113,0.725502192974091,-0.203444570302963,-0.657462477684021,0.614885807037354,-0.39096936583519,-0.684878408908844,0.5450439453125,-0.288073390722275,-0.787363231182098,0.725502192974091,-0.203444570302963,-0.657462477684021,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.531938970088959,-0.742404460906982,0.407279402017593,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.163463488221169,-0.986320674419403,-0.0212411060929298,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.675393164157867,-0.663666367530823,-0.321544677019119,0.652852118015289,-0.584342896938324,-0.482003599405289,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.764369487762451,-0.100322350859642,0.636926054954529,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.752913534641266,-0.48444265127182,-0.445462107658386, -0.824822843074799,-0.272803068161011,-0.495222896337509,-0.966121256351471,-0.245841488242149,0.0785600915551186,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.570039451122284,0.607050001621246,0.553665339946747,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.616599321365356,0.328253507614136,0.715580105781555,-0.698700249195099,0.0909521877765656,0.709609508514404,-0.616599321365356,0.328253507614136,0.715580105781555,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.943170547485352,-0.286243259906769,0.168802037835121,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.920156896114349,-0.239383384585381,0.309849739074707,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.493933469057083,-0.226954907178879,0.839357614517212,-0.522818982601166,-0.450362592935562,0.723763644695282,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.793903589248657,-0.248450830578804,0.554967820644379,-0.978256165981293,-0.198640391230583,0.0596392676234245, -0.982033252716064,-0.17078685760498,0.0802653878927231,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.803909718990326,-0.356574565172195,0.476008087396622,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.982033252716064,-0.17078685760498,0.0802653878927231,-0.978256165981293,-0.198640391230583,0.0596392676234245,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.51134991645813,-0.634139060974121,0.579990446567535,-0.527938961982727,-0.73660546541214,0.42272076010704,-0.464571386575699,-0.763281106948853,0.448971480131149,-0.868073582649231,-0.440582573413849,0.22876900434494, -0.848238348960876,-0.444671392440796,0.287678778171539,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.796527564525604,0.591128647327423,0.126928299665451,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.818643033504486,-0.423622965812683,0.387772023677826,-0.982640624046326,-0.149156004190445,0.110317416489124,-0.983909785747528,-0.122352637350559,0.130197182297707,-0.848238348960876,-0.444671392440796,0.287678778171539,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.796527564525604,0.591128647327423,0.126928299665451,-0.847999572753906,0.148594439029694,0.50874000787735,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.984983623027802,-0.0637645348906517,0.160440966486931,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.951689600944519,0.131448090076447,0.277503579854965, -0.913889706134796,0.158398613333702,-0.373785316944122,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.913889706134796,0.158398613333702,-0.373785316944122,-0.951689600944519,0.131448090076447,0.277503579854965,-0.827955782413483,0.533315181732178,0.173390194773674,-0.501976847648621,0.497314512729645,0.707599818706512,-0.827955782413483,0.533315181732178,0.173390194773674,-0.951689600944519,0.131448090076447,0.277503579854965,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.664353311061859,0.186838954687119,0.723689079284668,-0.951689600944519,0.131448090076447,0.277503579854965,-0.959667444229126,-0.14700148999691,0.239643514156342,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.869927883148193,0.417829841375351,0.261999487876892,-0.686445116996765,0.270512044429779,0.674993574619293,-0.869927883148193,0.417829841375351,0.261999487876892,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.492774546146393,0.528099179267883,0.691581189632416,-0.501976847648621,0.497314512729645,0.707599818706512,-0.492774546146393,0.528099179267883,0.691581189632416,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.827955782413483,0.533315181732178,0.173390194773674,-0.673958420753479,0.316827058792114,-0.66738349199295,-0.827955782413483,0.533315181732178,0.173390194773674,-0.738919854164124,0.67080682516098,0.0633690059185028,-0.664532780647278,0.444909423589706,-0.60037636756897,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.685857892036438,-0.122487917542458,0.717353284358978, -0.992319107055664,-0.0605176463723183,0.10789081454277,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.740453124046326,0.0817263871431351,-0.667120635509491,-0.992319107055664,-0.0605176463723183,0.10789081454277,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.730222046375275,0.28398671746254,-0.621391415596008,-0.988855719566345,-0.0235256738960743,0.147006422281265,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.714973926544189,0.530257403850555,-0.455674588680267,-0.982984185218811,-0.0105124665424228,0.18338917195797,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.708874583244324,-0.389509916305542,0.588029623031616,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.712439298629761,-0.0633224174380302,0.698870837688446, -0.946118652820587,-0.0995350033044815,0.308143347501755,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.683650732040405,-0.221590802073479,0.695355415344238,-0.685857892036438,-0.122487917542458,0.717353284358978,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.858525216579437,0.180895999073982,0.479803144931793,-0.924713611602783,0.349783033132553,0.150188326835632,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.901956975460052,-0.165996730327606,0.398646086454391,-0.946361243724823,0.305759787559509,-0.104457549750805,-0.924713611602783,0.349783033132553,0.150188326835632,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.858525216579437,0.180895999073982,0.479803144931793,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.534013271331787,-0.0607958026230335,0.843287467956543,-0.526414215564728,0.148685231804848,0.837126493453979,-0.534013271331787,-0.0607958026230335,0.843287467956543, -0.701859831809998,-0.0527861975133419,0.710356533527374,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.847999572753906,0.148594439029694,0.50874000787735,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.927756071090698,-0.0379538796842098,0.371252179145813,-0.701859831809998,-0.0527861975133419,0.710356533527374,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.933067381381989,0.178451672196388,0.312314331531525,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.933067381381989,0.178451672196388,0.312314331531525,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.766225039958954,-0.486649185419083,0.419609010219574,-0.838545083999634,0.518301904201508,-0.167944431304932,-0.933067381381989,0.178451672196388,0.312314331531525,-0.796527564525604,0.591128647327423,0.126928299665451,-0.87463504076004,0.473409682512283,-0.104387812316418, -0.838545083999634,0.518301904201508,-0.167944431304932,-0.87463504076004,0.473409682512283,-0.104387812316418,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.91761976480484,0.297895580530167,-0.263120055198669,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.917778551578522,0.114838451147079,-0.380124539136887,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.990018784999847,0.103214055299759,-0.095966711640358,-0.965933620929718,0.0850775167346001,-0.244405627250671,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.950445771217346,-0.194348081946373,0.24265544116497,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.942062139511108,-0.21296301484108,0.259163379669189,-0.8672034740448,-0.366803020238876,0.336769551038742,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.824822843074799,-0.272803068161011,-0.495222896337509,-0.878240346908569,-0.202826589345932,-0.433076530694962,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.883083939552307,-0.0672106146812439,-0.464376479387283,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.695510506629944,-0.654881238937378,-0.295627743005753,-0.854056000709534,-0.505750417709351,-0.121675431728363, -0.931157529354095,-0.304730832576752,-0.200211733579636,-0.752913534641266,-0.48444265127182,-0.445462107658386,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.984959959983826,0.0270913224667311,0.170645833015442,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.58504182100296,0.777154207229614,0.23185633122921,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.570039451122284,0.607050001621246,0.553665339946747,-0.58504182100296,0.777154207229614,0.23185633122921,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.921134054660797,-0.0515539050102234,0.385816305875778,-0.960481464862823,0.0760035738348961,0.267766177654266,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.707302629947662,-0.706726789474487,-0.0161320772022009,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.889755249023438,0.104038514196873,0.444422751665115,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.939273297786713,-0.163695856928825,0.301611185073853,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.908939778804779,-0.147546246647835,0.38994687795639,-0.939273297786713,-0.163695856928825,0.301611185073853, -0.866523861885071,-0.498106122016907,0.0320423804223537,-0.889755249023438,0.104038514196873,0.444422751665115,-0.880822539329529,0.116122722625732,0.458984851837158,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.964120924472809,-0.174769937992096,0.199815705418587,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.849323332309723,-0.375679105520248,-0.37083026766777,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.981129169464111,-0.164403110742569,0.101770125329494,-0.880822539329529,0.116122722625732,0.458984851837158,-0.880822539329529,0.116122722625732,0.458984851837158,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.880822539329529,0.116122722625732,0.458984851837158,-0.889755249023438,0.104038514196873,0.444422751665115,-0.725173890590668,0.124969810247421,0.677130281925201,-0.737713038921356,0.159859821200371,0.655914902687073,-0.686445116996765,0.270512044429779,0.674993574619293,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.838507175445557,0.0982540920376778,0.535958766937256,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.725173890590668,0.124969810247421,0.677130281925201,-0.824534773826599,0.090426079928875,0.558538734912872,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.878240346908569,-0.202826589345932,-0.433076530694962, -0.931157529354095,-0.304730832576752,-0.200211733579636,-0.991512477397919,-0.0911088734865189,0.09274772554636,-0.824534773826599,0.090426079928875,0.558538734912872,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.858525216579437,0.180895999073982,0.479803144931793,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.75360506772995,0.135660916566849,0.643176138401031,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.75360506772995,0.135660916566849,0.643176138401031,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.7187859416008,0.00215784600004554,0.695228099822998,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.828934848308563,0.145112335681915,0.540193796157837,-0.788419961929321,0.211842447519302,0.577509045600891,-0.828934848308563,0.145112335681915,0.540193796157837,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.953861713409424,0.00325301033444703,0.30022868514061,-0.974564790725708,-0.215875864028931,0.0601753368973732,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.93205326795578,-0.0207287091761827,0.361727833747864, -0.890300929546356,-0.0326753221452236,0.454198867082596,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.788419961929321,0.211842447519302,0.577509045600891,-0.947206735610962,-0.215480715036392,0.237418219447136,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.823492228984833,0.0713645666837692,0.56282114982605,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.831832468509674,-0.413072049617767,0.370710402727127,-0.731583058834076,-0.517640888690948,0.443659901618958,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.749832689762115,-0.240478411316872,0.616377413272858,-0.686445116996765,0.270512044429779,0.674993574619293,-0.492774546146393,0.528099179267883,0.691581189632416,-0.440651565790176,0.368113547563553,0.818729877471924,-0.596545398235321,0.216776832938194,0.772749245166779,-0.501976847648621,0.497314512729645,0.707599818706512,-0.438916772603989,0.289704263210297,0.850543081760406,-0.440651565790176,0.368113547563553,0.818729877471924,-0.492774546146393,0.528099179267883,0.691581189632416,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.683301508426666,0.245855435729027,0.687498509883881,-0.809978306293488,0.193161576986313,0.55373615026474, -0.916797280311584,-0.182094678282738,0.355421304702759,-0.809978306293488,0.193161576986313,0.55373615026474,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.895346403121948,-0.183571323752403,0.405778735876083,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946746110916138,0.159301742911339,-0.279812008142471,-0.904232740402222,-0.100814543664455,0.414969354867935,-0.926703691482544,-0.0945243984460831,0.363710582256317,-0.91798335313797,-0.00180715974420309,-0.396614909172058,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.897575080394745,-0.134165227413177,-0.419950813055038,-0.946118652820587,-0.0995350033044815,0.308143347501755,-0.922550320625305,-0.205608487129211,-0.326536417007446,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.966065168380737,-0.220243826508522,-0.134947344660759,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.959409058094025,-0.0255993846803904,0.280854016542435,-0.946118652820587,-0.0995350033044815,0.308143347501755, -0.712439298629761,-0.0633224174380302,0.698870837688446,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.957550466060638,-0.078297920525074,0.277428478002548,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.712439298629761,-0.0633224174380302,0.698870837688446,-0.991601943969727,-0.0970273390412331,0.0855057463049889,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.832877278327942,0.0686137080192566,0.549188137054443,-0.767573416233063,-0.0105870105326176,0.640873551368713,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.990067303180695,-0.131666883826256,0.0493005402386189,-0.991874754428864,-0.114014439284801,0.0564371794462204,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.808649599552155,-0.254309177398682,-0.530483365058899,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.203820779919624,-0.25819143652916,-0.944348573684692,0.52705591917038,-0.123320385813713,-0.840835392475128,-0.203820779919624,-0.25819143652916,-0.944348573684692,-0.120517827570438,-0.0717617943882942,-0.990113973617554,0.555061399936676,0.0270265471190214,-0.831370174884796,0.590149700641632,0.106324933469296,-0.800261437892914,0.555061399936676,0.0270265471190214,-0.831370174884796,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.754495441913605,-0.0462081357836723,-0.654676616191864,-0.0574504472315311,0.0463431552052498,-0.997272133827209,-0.120517827570438,-0.0717617943882942,-0.990113973617554,-0.774422824382782,-0.137291520833969,-0.617592334747314,-0.93372631072998,0.331273853778839,-0.13569375872612, -0.804162800312042,0.470207631587982,-0.363630294799805,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.804162800312042,0.470207631587982,-0.363630294799805,-0.93372631072998,0.331273853778839,-0.13569375872612,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.367316663265228,0.168655470013618,-0.914676904678345,-0.142514750361443,0.172804057598114,-0.974591374397278,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.704632818698883,0.278547644615173,-0.652613043785095,-0.127613544464111,0.432454884052277,-0.892579197883606,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.693302690982819,-0.558895230293274,0.454936742782593,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.919459879398346,-0.367317616939545,0.14025442302227,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.841246128082275,0.241770818829536,0.483582258224487,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.841246128082275,0.241770818829536,0.483582258224487,-0.75360506772995,0.135660916566849,0.643176138401031,-0.858525216579437,0.180895999073982,0.479803144931793,-0.75360506772995,0.135660916566849,0.643176138401031,-0.841246128082275,0.241770818829536,0.483582258224487,-0.924713611602783,0.349783033132553,0.150188326835632,-0.931157529354095,-0.304730832576752,-0.200211733579636,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.824534773826599,0.090426079928875,0.558538734912872, -0.824534773826599,0.090426079928875,0.558538734912872,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.789167404174805,-0.177452862262726,0.587984025478363,-0.799961805343628,-0.159910082817078,0.578350961208344,-0.821155369281769,-0.380202680826187,0.425616890192032,-0.77546626329422,0.00887077674269676,0.631326675415039,-0.869901895523071,0.0250669438391924,0.492587447166443,-0.854056000709534,-0.505750417709351,-0.121675431728363,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.934483289718628,0.0995288342237473,0.341811418533325,-0.743188083171844,-0.353264600038528,0.568221390247345,-0.74452930688858,-0.0343341082334518,0.666706323623657,-0.723646342754364,0.0320940800011158,0.689424395561218,-0.526414215564728,0.148685231804848,0.837126493453979,-0.535982131958008,0.386546611785889,0.750536382198334,-0.683301508426666,0.245855435729027,0.687498509883881,-0.683301508426666,0.245855435729027,0.687498509883881,-0.535982131958008,0.386546611785889,0.750536382198334,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474,-0.788419961929321,0.211842447519302,0.577509045600891,-0.588370680809021,0.464889794588089,0.661587059497833,-0.535982131958008,0.386546611785889,0.750536382198334,-0.828934848308563,0.145112335681915,0.540193796157837,-0.86247330904007,-0.0210732948035002,0.505663633346558,-0.828934848308563,0.145112335681915,0.540193796157837,-0.535982131958008,0.386546611785889,0.750536382198334,-0.526414215564728,0.148685231804848,0.837126493453979,-0.440651565790176,0.368113547563553,0.818729877471924,-0.571967780590057,0.37627837061882,0.728880941867828,-0.700570464134216,0.212181925773621,0.681307435035706,-0.596545398235321,0.216776832938194,0.772749245166779,-0.788419961929321,0.211842447519302,0.577509045600891,-0.700570464134216,0.212181925773621,0.681307435035706, -0.571967780590057,0.37627837061882,0.728880941867828,-0.588370680809021,0.464889794588089,0.661587059497833,-0.809978306293488,0.193161576986313,0.55373615026474,-0.588370680809021,0.464889794588089,0.661587059497833,-0.571967780590057,0.37627837061882,0.728880941867828,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.438916772603989,0.289704263210297,0.850543081760406,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.809293568134308,0.0818510949611664,0.581673681735992,-0.571967780590057,0.37627837061882,0.728880941867828,-0.440651565790176,0.368113547563553,0.818729877471924,-0.926066279411316,-0.206412896513939,0.315903395414352,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.943636775016785,-0.199052885174751,0.264438152313232,-0.948787927627563,-0.18914021551609,0.25303652882576,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.00275634881108999,-0.768494009971619,-0.639851033687592,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.83446329832077,-0.267112225294113,-0.481998056173325,-0.00275634881108999,-0.768494009971619,-0.639851033687592,0.675393164157867,-0.663666367530823,-0.321544677019119,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.61547714471817,-0.64069652557373,0.45901620388031,-0.899577915668488,-0.399587064981461,0.176322862505913,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.671594560146332,-0.181319773197174,0.718389809131622,-0.627654612064362,-0.419570088386536,0.655751943588257,-0.884575426578522,-0.272238790988922,0.378698289394379,-0.933359444141388,0.180034801363945,-0.310527950525284, -0.884575426578522,-0.272238790988922,0.378698289394379,-0.899577915668488,-0.399587064981461,0.176322862505913,0.045425571501255,0.382962375879288,0.922646403312683,-0.125368878245354,0.424985140562058,0.896476626396179,-0.0915354415774345,0.261345416307449,0.960895359516144,0.0344220362603664,0.22930283844471,0.972746253013611,-0.933067381381989,0.178451672196388,0.312314331531525,-0.847999572753906,0.148594439029694,0.50874000787735,-0.796527564525604,0.591128647327423,0.126928299665451,-0.517660737037659,-0.138916581869125,0.844233095645905,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.545637309551239,-0.291577398777008,0.785660624504089,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.618174970149994,-0.523447036743164,0.586398243904114,-0.847999572753906,0.148594439029694,0.50874000787735,-0.723476529121399,-0.368679702281952,0.583658277988434,-0.62365597486496,-0.228648245334625,0.747511327266693,-0.656521320343018,-0.0877665653824806,0.74918407201767,-0.631199538707733,-0.586718201637268,0.507295668125153,-0.61400443315506,-0.715833127498627,0.332537919282913,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.869600474834442,-0.362856715917587,0.334858238697052,-0.868073582649231,-0.440582573413849,0.22876900434494,-0.916797280311584,-0.182094678282738,0.355421304702759,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.983715057373047,-0.120028533041477,0.133782565593719,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.859187364578247,-0.159860625863075,0.486046999692917, -0.895342886447906,-0.199058875441551,0.398417770862579,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.895342886447906,-0.199058875441551,0.398417770862579,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.851623713970184,0.0635921731591225,0.520281732082367,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.93942403793335,-0.154625937342644,0.305897533893585,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.908852636814117,0.0105791445821524,-0.416983097791672,-0.974529683589935,-0.218805104494095,0.0491550303995609,-0.935810804367065,-0.306237637996674,-0.174575582146645,-0.929889261722565,-0.324548780918121,0.173130333423615,-0.926139116287231,-0.258693248033524,0.274488925933838,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.963089942932129,0.0112352445721626,0.268945276737213,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.859187364578247,-0.159860625863075,0.486046999692917,-0.910594463348389,-0.0996595025062561,0.401105612516403,0.401222288608551,-0.244348540902138,-0.882787883281708,0.392777740955353,-0.563973963260651,-0.726401448249817,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.401222288608551,-0.244348540902138,-0.882787883281708,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.387454837560654,-0.142215475440025,-0.910853147506714, 0.323159694671631,-0.226072624325752,-0.918944478034973,0.401222288608551,-0.244348540902138,-0.882787883281708,0.323159694671631,-0.226072624325752,-0.918944478034973,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.07368503510952,-0.326217710971832,-0.942418456077576,0.401222288608551,-0.244348540902138,-0.882787883281708,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.392777740955353,-0.563973963260651,-0.726401448249817,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0370321683585644,-0.265117049217224,-0.96350485086441,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.175090745091438,-0.752051889896393,-0.635422050952911,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.576868414878845,0.0959631279110909,-0.811180531978607,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.773029983043671,-0.340951681137085,-0.534954726696014,0.646651268005371,0.172121793031693,-0.743112564086914,0.576868414878845,0.0959631279110909,-0.811180531978607,0.646651268005371,0.172121793031693,-0.743112564086914,0.364371746778488,-0.284274369478226,-0.886803984642029,0.329197883605957,-0.229186490178108,-0.916025280952454,-0.1309574842453,-0.264535874128342,-0.955442786216736,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.0825362652540207,-0.192694559693336,-0.977781474590302,0.0849056839942932,-0.303190618753433,-0.949139893054962,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.139740735292435,-0.294080168008804,-0.945510149002075,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.0193124283105135,-0.74210524559021,-0.670005083084106,0.07368503510952,-0.326217710971832,-0.942418456077576,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.208596497774124,-0.74006187915802,-0.639371454715729, -0.175090745091438,-0.752051889896393,-0.635422050952911,-0.208596497774124,-0.74006187915802,-0.639371454715729,-0.139740735292435,-0.294080168008804,-0.945510149002075,-0.1309574842453,-0.264535874128342,-0.955442786216736,0.30904021859169,0.371187627315521,-0.875621974468231,0.327664911746979,0.551296949386597,-0.767272710800171,0.298426777124405,0.233343333005905,-0.925468742847443,0.256420314311981,0.112910509109497,-0.959947824478149,0.30904021859169,0.371187627315521,-0.875621974468231,0.256420314311981,0.112910509109497,-0.959947824478149,0.329279124736786,0.0702807679772377,-0.941613435745239,0.532891869544983,0.203911662101746,-0.821246802806854,0.327664911746979,0.551296949386597,-0.767272710800171,0.201275274157524,0.759530663490295,-0.618547856807709,0.171656653285027,0.421078413724899,-0.890632927417755,0.298426777124405,0.233343333005905,-0.925468742847443,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.66732919216156,0.285801827907562,-0.687742054462433,0.461978673934937,0.681396842002869,-0.567691802978516,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.66732919216156,0.285801827907562,-0.687742054462433,0.913814067840576,-0.0522273704409599,-0.402760744094849,-0.134053289890289,0.873388648033142,-0.468211501836777,0.461978673934937,0.681396842002869,-0.567691802978516,0.66732919216156,0.285801827907562,-0.687742054462433,0.260891646146774,0.576647460460663,-0.774217784404755,0.66732919216156,0.285801827907562,-0.687742054462433,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.260891646146774,0.576647460460663,-0.774217784404755,0.0610933229327202,0.52752286195755,-0.847341299057007,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0339763574302197,0.937289535999298,-0.346891850233078,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.171656653285027,0.421078413724899,-0.890632927417755,0.201275274157524,0.759530663490295,-0.618547856807709,0.0605678260326386,0.873000860214233,-0.483943223953247,0.0610933229327202,0.52752286195755,-0.847341299057007, 0.784418284893036,-0.0482183061540127,-0.61835503578186,0.532891869544983,0.203911662101746,-0.821246802806854,0.329279124736786,0.0702807679772377,-0.941613435745239,0.574346244335175,0.00941364839673042,-0.81855833530426,0.784418284893036,-0.0482183061540127,-0.61835503578186,0.574346244335175,0.00941364839673042,-0.81855833530426,0.74884694814682,0.0258232615888119,-0.662239730358124,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.894509136676788,-0.20981177687645,-0.394756108522415,0.8075070977211,-0.171400144696236,-0.564406096935272,0.704347848892212,-0.492557406425476,-0.511156857013702,0.777899026870728,-0.433716207742691,-0.454712390899658,0.792737483978271,-0.494514644145966,-0.356402337551117,0.777899026870728,-0.433716207742691,-0.454712390899658,0.704347848892212,-0.492557406425476,-0.511156857013702,0.648240566253662,-0.463475733995438,-0.604131102561951,0.713780462741852,-0.04316745698452,-0.699037969112396,0.648240566253662,-0.463475733995438,-0.604131102561951,0.704347848892212,-0.492557406425476,-0.511156857013702,0.8075070977211,-0.171400144696236,-0.564406096935272,0.886527955532074,0.0429748557507992,-0.460674852132797,0.75768917798996,0.1346725076437,-0.638569056987762,0.769487977027893,0.440927565097809,-0.462029308080673,0.910501658916473,0.0911831632256508,-0.403326570987701,0.769487977027893,0.440927565097809,-0.462029308080673,0.75768917798996,0.1346725076437,-0.638569056987762,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.890664577484131,-0.0774205401539803,0.448020815849304,0.849142253398895,-0.224129945039749,0.478250175714493,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.955755293369293,-0.11410153657198,-0.27113202214241,0.894509136676788,-0.20981177687645,-0.394756108522415,0.955755293369293,-0.11410153657198,-0.27113202214241,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.936679661273956,0.0184381268918514,-0.349701732397079,0.673712253570557,-0.610602140426636,-0.416265428066254,0.936679661273956,0.0184381268918514,-0.349701732397079, 0.966342151165009,-0.0820774585008621,-0.243815749883652,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755,-0.752050638198853,0.325740456581116,0.670762062072754,-0.708589673042297,-0.219041094183922,0.966342151165009,-0.0820774585008621,-0.243815749883652,0.849142253398895,-0.224129945039749,0.478250175714493,0.769487977027893,0.440927565097809,-0.462029308080673,0.771759808063507,0.606137216091156,-0.19231353700161,0.910501658916473,0.0911831632256508,-0.403326570987701,0.886527955532074,0.0429748557507992,-0.460674852132797,0.910501658916473,0.0911831632256508,-0.403326570987701,0.771759808063507,0.606137216091156,-0.19231353700161,0.959632039070129,0.0862699821591377,-0.267701029777527,0.76104062795639,0.645680010318756,0.0625654682517052,0.959632039070129,0.0862699821591377,-0.267701029777527,0.771759808063507,0.606137216091156,-0.19231353700161,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.55826473236084,-0.110289022326469,0.822299718856812,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.640290141105652,-0.147163778543472,0.753904044628143,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.76784873008728,-0.171090081334114,0.617362499237061,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.643834948539734,-0.15254844725132,0.74980366230011,-0.539783835411072,-0.133467569947243,0.831155717372894,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.877796113491058,-0.0535202585160732,0.476035296916962,-0.845083713531494,-0.00238247727975249,0.534628748893738,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.960874974727631,0.022131310775876,0.276096969842911,-0.877796113491058,-0.0535202585160732,0.476035296916962, -0.960874974727631,0.022131310775876,0.276096969842911,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.902801036834717,-0.117826566100121,0.413602739572525,-0.960874974727631,0.022131310775876,0.276096969842911,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.968861937522888,-0.0327458865940571,0.245426714420319,-0.949614703655243,0.0149662410840392,0.313062191009521,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.960874974727631,0.022131310775876,0.276096969842911,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.622180342674255,-0.0406685136258602,0.781816959381104,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.838247179985046,-0.0138563737273216,0.54511433839798,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.912092506885529,0.0284031052142382,0.408999383449554,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.621041119098663,-0.108981177210808,0.776164293289185,-0.696867048740387,-0.0488476939499378,0.715534925460815,-0.749224066734314,-0.0310621540993452,0.661587834358215,-0.588768899440765,-0.0135774537920952,0.808187425136566,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.935528755187988,-0.0541915111243725,0.349069029092789, -0.912092506885529,0.0284031052142382,0.408999383449554,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.960127711296082,-0.0503960475325584,0.274981826543808,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.941187500953674,-0.0369091406464577,0.335862815380096,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.35664427280426,-0.676209807395935,0.64462798833847,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0504920706152916,-0.793611586093903,0.60632598400116,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.149853184819222,-0.761297464370728,0.63084876537323,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.324567019939423,-0.694126486778259,0.642529904842377,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.365384161472321,-0.375545680522919,0.851739346981049, -0.292413383722305,-0.535299479961395,0.792432248592377,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.743763327598572,-0.65217137336731,0.14658996462822,-0.75563508272171,-0.5704665184021,0.321844130754471,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.910853445529938,-0.30947008728981,0.273082852363586,-0.924713611602783,0.349783033132553,0.150188326835632,-0.841246128082275,0.241770818829536,0.483582258224487,-0.816001713275909,-0.500939309597015,0.288445889949799,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.61859929561615,0.783204674720764,-0.0626528933644295,0.636519849300385,0.647450149059296,-0.419107168912888,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.00293335225433111,0.995907425880432,0.0903318226337433,0.00320792081765831,0.937661468982697,-0.347535103559494,-0.664545059204102,0.734579563140869,-0.137013539671898,-0.58504182100296,0.777154207229614,0.23185633122921,-0.942853271961212,0.10562913864851,0.316022574901581,-0.891881763935089,0.246565267443657,0.379147052764893,-0.85773640871048,0.318832546472549,0.403279215097427,-0.928196668624878,0.146431341767311,0.342065423727036,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.217122808098793,-0.945177376270294,-0.243920937180519,-0.0787478685379028,-0.96028345823288,-0.26768359541893,-0.208732545375824,-0.912394225597382,-0.352090239524841,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.0771657377481461,-0.907520055770874,-0.412859290838242,-0.212649196386337,-0.901985108852386,-0.375770092010498,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.93205326795578,-0.0207287091761827,0.361727833747864,-0.889755249023438,0.104038514196873,0.444422751665115,-0.838507175445557,0.0982540920376778,0.535958766937256, -0.823492228984833,0.0713645666837692,0.56282114982605,-0.890300929546356,-0.0326753221452236,0.454198867082596,-0.866600096225739,0.0923771783709526,0.490378141403198,-0.783477485179901,-0.59309047460556,0.185490429401398,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.093654952943325,-0.971795976161957,-0.216428592801094,0.652852118015289,-0.584342896938324,-0.482003599405289,-0.093654952943325,-0.971795976161957,-0.216428592801094,-0.184745773673058,-0.862863302230835,-0.470463544130325,0.664769351482391,-0.462521582841873,-0.586647689342499,0.614885807037354,-0.39096936583519,-0.684878408908844,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.875853359699249,-0.451781928539276,-0.169629007577896,-0.236963242292404,-0.687786102294922,-0.686147749423981,-0.184745773673058,-0.862863302230835,-0.470463544130325,-0.866523861885071,-0.498106122016907,0.0320423804223537,-0.482406258583069,0.640618324279785,0.597404718399048,-0.92311555147171,0.291509866714478,0.250758200883865,-0.933935105800629,0.157070308923721,0.321082711219788,-0.907475471496582,0.340031713247299,0.246711865067482,-0.68842089176178,0.279931843280792,-0.669114947319031,-0.157021999359131,0.633807837963104,-0.757384777069092,-0.933359444141388,0.180034801363945,-0.310527950525284,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.933428227901459,-0.0520526021718979,0.354968011379242,-0.958686172962189,-0.0430715903639793,0.281186193227768,-0.957215070724487,-0.128876686096191,0.259094893932343,-0.941332995891571,-0.0885210856795311,0.325662672519684,-0.927466154098511,-0.0275595653802156,0.372889995574951,-0.910594463348389,-0.0996595025062561,0.401105612516403,-0.773442804813385,0.436002254486084,0.460096001625061,-0.784657657146454,0.439340144395828,0.437370121479034, -0.776160657405853,0.480935424566269,0.407769232988358,-0.7086301445961,0.50186014175415,0.495963364839554,-0.764328002929688,0.478488236665726,0.432263433933258,-0.809970021247864,0.357101410627365,0.46521732211113,-0.684539437294006,0.44213280081749,0.57958984375,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375,-0.809970021247864,0.357101410627365,0.46521732211113,-0.803570151329041,0.341960042715073,0.487173795700073,-0.649461984634399,0.424084842205048,0.631150722503662,-0.636985540390015,0.443951308727264,0.630203664302826,-0.803570151329041,0.341960042715073,0.487173795700073,-0.809970021247864,0.357101410627365,0.46521732211113,-0.654083967208862,0.394615858793259,0.64533132314682,-0.594367325305939,0.527927815914154,0.606646299362183,-0.654083967208862,0.394615858793259,0.64533132314682,-0.809970021247864,0.357101410627365,0.46521732211113,-0.764328002929688,0.478488236665726,0.432263433933258,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.530206859111786,0.100595757365227,0.841879546642303,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.734584510326386,-0.658318638801575,0.16432324051857,-0.378661543130875,-0.325545430183411,0.866392314434052,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.35957869887352,-0.654971122741699,0.66461718082428, -0.35957869887352,-0.654971122741699,0.66461718082428,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.626672208309174,0.255842447280884,0.736088693141937,-0.490771174430847,0.254273563623428,0.833359837532043,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.566439986228943,-0.112269259989262,0.816419839859009,-0.438916772603989,0.289704263210297,0.850543081760406,-0.664353311061859,0.186838954687119,0.723689079284668,-0.735289394855499,-0.208703994750977,0.644819438457489,-0.649019360542297,-0.107299908995628,0.753167033195496,-0.501976847648621,0.497314512729645,0.707599818706512,-0.664353311061859,0.186838954687119,0.723689079284668,-0.438916772603989,0.289704263210297,0.850543081760406,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.43374091386795,-0.328518569469452,0.839013934135437,-0.194612219929695,-0.744307279586792,0.638852655887604,-0.0848771035671234,-0.827450573444366,0.55508691072464,0.187445163726807,0.511297464370728,0.838712811470032,0.12853179872036,0.854913532733917,0.502595722675323,0.133057877421379,0.867883086204529,0.478617310523987,0.330043107271194,0.436470597982407,0.83699756860733,0.185406669974327,0.360577255487442,0.914116144180298,0.330043107271194,0.436470597982407,0.83699756860733,0.133057877421379,0.867883086204529,0.478617310523987,0.046251967549324,0.890573501586914,0.452481597661972, -0.131636127829552,0.990942358970642,0.0265548899769783,0.046251967549324,0.890573501586914,0.452481597661972,0.133057877421379,0.867883086204529,0.478617310523987,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.201113522052765,0.971361815929413,0.126529023051262,0.133057877421379,0.867883086204529,0.478617310523987,0.12853179872036,0.854913532733917,0.502595722675323,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.323215007781982,0.943282067775726,0.0758355185389519,0.477838784456253,0.792661190032959,-0.378626853227615,0.466618627309799,0.783142864704132,-0.41104057431221,-0.807841360569,0.43371844291687,0.399099737405777,-0.702935457229614,0.63435697555542,0.321672111749649,-0.323215007781982,0.943282067775726,0.0758355185389519,-0.488124132156372,0.865501821041107,-0.112434260547161,0.772461295127869,-0.0374295972287655,0.633957862854004,-0.30469673871994,0.941659867763519,0.142956644296646,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,0.772461295127869,-0.0374295972287655,0.633957862854004,0.125634163618088,0.492520093917847,0.861185252666473,0.466618627309799,0.783142864704132,-0.41104057431221,0.727005004882813,0.68491542339325,0.0485247001051903,-0.30469673871994,0.941659867763519,0.142956644296646,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.807841360569,0.43371844291687,0.399099737405777,-0.488124132156372,0.865501821041107,-0.112434260547161,-0.30469673871994,0.941659867763519,0.142956644296646,-0.6800137758255,0.685604989528656,0.2598597407341,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.6800137758255,0.685604989528656,0.2598597407341,-0.30469673871994,0.941659867763519,0.142956644296646,0.125634163618088,0.492520093917847,0.861185252666473,0.772461295127869,-0.0374295972287655,0.633957862854004,0.450095027685165,-0.592146694660187,0.668413639068604,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604, -0.293433964252472,0.0976898819208145,0.950974881649017,0.125634163618088,0.492520093917847,0.861185252666473,0.450095027685165,-0.592146694660187,0.668413639068604,0.180472254753113,-0.782866299152374,0.595441102981567,-0.292413383722305,-0.535299479961395,0.792432248592377,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.450729221105576,-0.524441123008728,0.722360491752625,-0.292413383722305,-0.535299479961395,0.792432248592377,0.180472254753113,-0.782866299152374,0.595441102981567,0.066693402826786,-0.763606250286102,0.642228543758392,0.520344138145447,-0.759189605712891,0.390989869832993,0.066693402826786,-0.763606250286102,0.642228543758392,0.180472254753113,-0.782866299152374,0.595441102981567,0.493583381175995,-0.804481565952301,0.330431401729584,0.772461295127869,-0.0374295972287655,0.633957862854004,0.493583381175995,-0.804481565952301,0.330431401729584,0.180472254753113,-0.782866299152374,0.595441102981567,0.450095027685165,-0.592146694660187,0.668413639068604,-0.450729221105576,-0.524441123008728,0.722360491752625,0.066693402826786,-0.763606250286102,0.642228543758392,0.169332280755043,-0.786144733428955,0.594393014907837,-0.38851073384285,-0.590570747852325,0.707308709621429,-0.235374078154564,-0.676506876945496,0.697809040546417,-0.38851073384285,-0.590570747852325,0.707308709621429,0.169332280755043,-0.786144733428955,0.594393014907837,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083,0.246509581804276,-0.871231377124786,0.424486666917801,0.169332280755043,-0.786144733428955,0.594393014907837,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.593186497688293,-0.723713397979736,0.352659493684769,0.169332280755043,-0.786144733428955,0.594393014907837,0.066693402826786,-0.763606250286102,0.642228543758392,0.201723903417587,-0.93417751789093,0.294312417507172,-0.106017202138901,-0.707463800907135,0.698752701282501,-0.235374078154564,-0.676506876945496,0.697809040546417,0.246509581804276,-0.871231377124786,0.424486666917801, 0.201723903417587,-0.93417751789093,0.294312417507172,0.246509581804276,-0.871231377124786,0.424486666917801,0.506179451942444,-0.83683580160141,0.208538070321083,0.331354945898056,-0.940484642982483,0.0754489675164223,-0.106017202138901,-0.707463800907135,0.698752701282501,0.201723903417587,-0.93417751789093,0.294312417507172,0.0746458247303963,-0.967216193675995,0.242736130952835,-0.0717575997114182,-0.708433508872986,0.702120244503021,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.0717575997114182,-0.708433508872986,0.702120244503021,0.0746458247303963,-0.967216193675995,0.242736130952835,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,-0.044459342956543,-0.969122648239136,0.242537945508957,0.0746458247303963,-0.967216193675995,0.242736130952835,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.0746458247303963,-0.967216193675995,0.242736130952835,0.201723903417587,-0.93417751789093,0.294312417507172,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.0594102963805199,-0.704399049282074,0.707313537597656,-0.044459342956543,-0.969122648239136,0.242537945508957,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.209884941577911,-0.949742674827576,0.232243597507477,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.558743357658386,-0.822392702102661,-0.10712693631649, -0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.442988574504852,-0.869764268398285,0.217419594526291,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.726677179336548,-0.644755423069,0.237130090594292,-0.632458329200745,-0.745043694972992,0.211911231279373,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.0722988545894623,-0.821142494678497,0.566125333309174,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.409960985183716,0.234984055161476,0.881314098834991,-0.419355839490891,0.314480572938919,0.851611793041229,-0.427875101566315,0.308164179325104,0.849680960178375,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.595763564109802,0.13890865445137,0.791056394577026,-0.708662629127502,0.112244434654713,0.696561932563782,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.708662629127502,0.112244434654713,0.696561932563782,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.774853527545929,0.101396143436432,0.62395578622818,-0.31306853890419,0.294974654912949,0.902761340141296,-0.252474844455719,-0.0950261279940605,0.962926030158997, -0.35642284154892,0.221263155341148,0.907747387886047,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.589879870414734,0.320975691080093,0.740956366062164,-0.807841360569,0.43371844291687,0.399099737405777,-0.6800137758255,0.685604989528656,0.2598597407341,-0.807841360569,0.43371844291687,0.399099737405777,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.35642284154892,0.221263155341148,0.907747387886047,-0.419887959957123,0.29813814163208,0.857209324836731,-0.31306853890419,0.294974654912949,0.902761340141296,-0.293433964252472,0.0976898819208145,0.950974881649017,-0.31306853890419,0.294974654912949,0.902761340141296,-0.589879870414734,0.320975691080093,0.740956366062164,-0.711035132408142,0.199701055884361,0.674202144145966,-0.589879870414734,0.320975691080093,0.740956366062164,-0.31306853890419,0.294974654912949,0.902761340141296,-0.419887959957123,0.29813814163208,0.857209324836731,-0.615555763244629,0.148695304989815,0.773938477039337,-0.53751266002655,0.1327995210886,0.832733154296875,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.617874979972839,-0.144242078065872,0.772932589054108,0.792737483978271,-0.494514644145966,-0.356402337551117,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.759971797466278,-0.612702488899231,0.216883733868599,0.243047595024109,-0.82210099697113,0.514857113361359,0.759971797466278,-0.612702488899231,0.216883733868599,0.50261402130127,-0.863443076610565,0.0429561100900173,0.314814835786819,-0.921267867088318,0.228379368782043,0.340434432029724,-0.915098071098328,0.216101616621017,0.314814835786819,-0.921267867088318,0.228379368782043,0.50261402130127,-0.863443076610565,0.0429561100900173,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085,-0.534954726696014, 0.50261402130127,-0.863443076610565,0.0429561100900173,0.630495369434357,-0.750089466571808,-0.199602961540222,0.50261402130127,-0.863443076610565,0.0429561100900173,0.773029983043671,-0.340951681137085,-0.534954726696014,0.626364231109619,-0.75530606508255,-0.192822501063347,0.364371746778488,-0.284274369478226,-0.886803984642029,0.646651268005371,0.172121793031693,-0.743112564086914,0.706785917282104,0.185755431652069,-0.682604253292084,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027,-0.686818599700928,0.428298622369766,-0.365026712417603,-0.826629161834717,0.706785917282104,0.185755431652069,-0.682604253292084,0.770183801651001,0.157961666584015,-0.617952287197113,0.713780462741852,-0.04316745698452,-0.699037969112396,0.770183801651001,0.157961666584015,-0.617952287197113,0.706785917282104,0.185755431652069,-0.682604253292084,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.773029983043671,-0.340951681137085,-0.534954726696014,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.706785917282104,0.185755431652069,-0.682604253292084,0.646651268005371,0.172121793031693,-0.743112564086914,0.521451473236084,-0.506328523159027,-0.686818599700928,0.770183801651001,0.157961666584015,-0.617952287197113,0.853590905666351,0.0963327810168266,-0.511959493160248,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266,-0.511959493160248,0.8075070977211,-0.171400144696236,-0.564406096935272,0.894509136676788,-0.20981177687645,-0.394756108522415,0.936679661273956,0.0184381268918514,-0.349701732397079,0.713780462741852,-0.04316745698452,-0.699037969112396,0.8075070977211,-0.171400144696236,-0.564406096935272,0.853590905666351,0.0963327810168266,-0.511959493160248,0.770183801651001,0.157961666584015,-0.617952287197113,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.135216936469078,-0.381399750709534,0.914467394351959,0.279289931058884,0.161584615707397,0.94651335477829,0.243047595024109,-0.82210099697113,0.514857113361359, -0.188230976462364,-0.722290992736816,0.66548091173172,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.124414332211018,0.380547553300858,0.91635400056839,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.215691208839417,-0.974491059780121,0.062003456056118,-0.15943743288517,-0.987180471420288,-0.00737930601462722,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.269127756357193,-0.79069060087204,0.549889624118805,-0.119434364140034,-0.879600763320923,0.460475742816925,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.169794172048569,-0.0642365738749504,0.983383774757385,-0.218783125281334,-0.517780601978302,0.827065408229828,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.0389158241450787,-0.199694201350212,0.979085206985474,-0.0553458705544472,-0.183565944433212,0.981448113918304,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.125227466225624,-0.596286714076996,0.792944073677063,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.0895515978336334,-0.660540342330933,0.745430707931519,-0.166856274008751,-0.820909261703491,0.546138286590576,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.0973072052001953,-0.992754817008972,0.0704923868179321,-0.161499664187431,-0.785857558250427,0.596947073936462, -0.166856274008751,-0.820909261703491,0.546138286590576,-0.161499664187431,-0.785857558250427,0.596947073936462,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.174236983060837,-0.833520114421844,0.524295389652252,0.161769852042198,-0.974958479404449,0.152598813176155,0.0681579038500786,-0.994212329387665,0.0830442756414413,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.166856274008751,-0.820909261703491,0.546138286590576,-0.28600937128067,-0.592511594295502,0.753079414367676,-0.406814515590668,-0.530913829803467,0.743392527103424,0.0128951743245125,-0.862936913967133,0.505147039890289,0.24199965596199,-0.948591530323029,0.203986048698425,0.161769852042198,-0.974958479404449,0.152598813176155,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.761701762676239,0.421244710683823,0.492304056882858,-0.728943645954132,0.505101680755615,0.462075144052505,-0.741443395614624,0.635278224945068,0.216063171625137,-0.702385485172272,0.688902199268341,0.179076477885246,-0.741443395614624,0.635278224945068,0.216063171625137,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.702385485172272,0.688902199268341,0.179076477885246,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.169851988554001,0.888530313968658,-0.426220804452896,-0.262664377689362,0.933591663837433,-0.243749871850014,-0.169851988554001,0.888530313968658,-0.426220804452896,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.523407638072968,0.841484844684601,0.133969098329544,-0.728943645954132,0.505101680755615,0.462075144052505,-0.523407638072968,0.841484844684601,0.133969098329544,-0.543530166149139,0.835534155368805,-0.0803593844175339,-0.741443395614624,0.635278224945068,0.216063171625137,-0.152414619922638,0.895912230014801,-0.417266219854355, -0.169851988554001,0.888530313968658,-0.426220804452896,0.444303005933762,0.584981560707092,-0.678521454334259,0.461978673934937,0.681396842002869,-0.567691802978516,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.461978673934937,0.681396842002869,-0.567691802978516,0.444303005933762,0.584981560707092,-0.678521454334259,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.444303005933762,0.584981560707092,-0.678521454334259,0.26505383849144,0.683794975280762,-0.679831504821777,-0.262664377689362,0.933591663837433,-0.243749871850014,0.26505383849144,0.683794975280762,-0.679831504821777,0.444303005933762,0.584981560707092,-0.678521454334259,-0.169851988554001,0.888530313968658,-0.426220804452896,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.778522193431854,0.369191855192184,-0.507543742656708,0.769487977027893,0.440927565097809,-0.462029308080673,0.765603542327881,-0.000731433392502368,-0.643312335014343,0.75768917798996,0.1346725076437,-0.638569056987762,0.452028423547745,0.457834273576736,-0.765544295310974,0.260891646146774,0.576647460460663,-0.774217784404755,-0.134053289890289,0.873388648033142,-0.468211501836777,0.260891646146774,0.576647460460663,-0.774217784404755,0.452028423547745,0.457834273576736,-0.765544295310974,0.717603802680969,0.25128972530365,-0.649536907672882,0.886527955532074,0.0429748557507992,-0.460674852132797,0.717603802680969,0.25128972530365,-0.649536907672882,0.452028423547745,0.457834273576736,-0.765544295310974,0.75768917798996,0.1346725076437,-0.638569056987762,0.792737483978271,-0.494514644145966,-0.356402337551117,0.864245176315308,-0.12554919719696,-0.487152576446533,0.869438171386719,-0.191056177020073,-0.455603748559952,0.777899026870728,-0.433716207742691,-0.454712390899658,0.869438171386719,-0.191056177020073,-0.455603748559952,0.886527955532074,0.0429748557507992,-0.460674852132797, 0.928043901920319,-0.117735534906387,-0.3533735871315,0.894509136676788,-0.20981177687645,-0.394756108522415,0.869438171386719,-0.191056177020073,-0.455603748559952,0.894509136676788,-0.20981177687645,-0.394756108522415,0.777899026870728,-0.433716207742691,-0.454712390899658,0.886527955532074,0.0429748557507992,-0.460674852132797,0.869438171386719,-0.191056177020073,-0.455603748559952,0.864245176315308,-0.12554919719696,-0.487152576446533,-0.134053289890289,0.873388648033142,-0.468211501836777,0.717603802680969,0.25128972530365,-0.649536907672882,0.883733749389648,-0.197778105735779,-0.424144357442856,0.879603147506714,0.140207409858704,-0.454576879739761,0.792737483978271,-0.494514644145966,-0.356402337551117,0.879603147506714,0.140207409858704,-0.454576879739761,0.883733749389648,-0.197778105735779,-0.424144357442856,0.864245176315308,-0.12554919719696,-0.487152576446533,0.886527955532074,0.0429748557507992,-0.460674852132797,0.864245176315308,-0.12554919719696,-0.487152576446533,0.883733749389648,-0.197778105735779,-0.424144357442856,0.717603802680969,0.25128972530365,-0.649536907672882,0.735658526420593,0.230637982487679,-0.636877298355103,0.778522193431854,0.369191855192184,-0.507543742656708,0.913814067840576,-0.0522273704409599,-0.402760744094849,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.735658526420593,0.230637982487679,-0.636877298355103,0.892134130001068,-0.0444634817540646,-0.449577271938324,0.809963226318359,-0.0433770604431629,-0.584874391555786,0.74884694814682,0.0258232615888119,-0.662239730358124,0.336174368858337,0.935995519161224,0.104399025440216,-0.328838348388672,0.935817182064056,0.126931354403496,-0.702385485172272,0.688902199268341,0.179076477885246,-0.551566660404205,0.823827803134918,-0.13069823384285,0.340434432029724,-0.915098071098328,0.216101616621017,0.196581169962883,-0.892622411251068,0.405685991048813,0.314814835786819,-0.921267867088318,0.228379368782043,0.314814835786819,-0.921267867088318,0.228379368782043,0.196581169962883,-0.892622411251068,0.405685991048813, -0.188230976462364,-0.722290992736816,0.66548091173172,0.243047595024109,-0.82210099697113,0.514857113361359,-0.694061398506165,-0.1789870262146,0.697310864925385,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.653488278388977,-0.259704351425171,0.710989952087402,-0.684878885746002,-0.277860194444656,0.673598289489746,-0.695913255214691,-0.212267383933067,0.686037361621857,-0.696582138538361,-0.198639899492264,0.689431309700012,-0.709937155246735,0.54696124792099,0.443646997213364,-0.776160657405853,0.480935424566269,0.407769232988358,-0.849210619926453,0.33398848772049,0.409014731645584,-0.719690024852753,0.419174522161484,0.553479015827179,-0.586622297763824,-0.114799492061138,0.801682829856873,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.794279515743256,0.210044533014297,0.570088922977448,-0.639836966991425,0.246874988079071,0.727778375148773,-0.639836966991425,0.246874988079071,0.727778375148773,-0.794279515743256,0.210044533014297,0.570088922977448,-0.794037878513336,0.353904455900192,0.49422213435173,-0.659900903701782,0.452796697616577,0.59958815574646,-0.849210619926453,0.33398848772049,0.409014731645584,-0.794037878513336,0.353904455900192,0.49422213435173,-0.794279515743256,0.210044533014297,0.570088922977448,-0.872271299362183,0.143087893724442,0.467620134353638,-0.872271299362183,0.143087893724442,0.467620134353638,-0.794279515743256,0.210044533014297,0.570088922977448,-0.754464566707611,-0.0490087866783142,0.654508471488953,-0.847315430641174,-0.0547459907829762,0.528260707855225,-0.776160657405853,0.480935424566269,0.407769232988358,-0.784657657146454,0.439340144395828,0.437370121479034,-0.794037878513336,0.353904455900192,0.49422213435173,-0.849210619926453,0.33398848772049,0.409014731645584,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.789951264858246,-0.250378400087357,0.559721052646637,-0.80817985534668,-0.287789851427078,0.51383101940155,-0.692233920097351,-0.67291522026062,0.260762959718704, -0.789951264858246,-0.250378400087357,0.559721052646637,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.759531497955322,-0.491919815540314,0.425589978694916,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.6155686378479,-0.697471797466278,0.366890132427216,-0.556434690952301,-0.213731065392494,0.802931845188141,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.239064574241638,-0.198313489556313,0.950536668300629,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.0191204845905304,-0.446781009435654,0.894439041614532,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.0377944894134998,-0.657056510448456,0.752893269062042,-0.305121690034866,-0.661639988422394,0.684933066368103,-0.256741940975189,-0.440148830413818,0.860437452793121,-0.565922915935516,-0.460098385810852,0.684135019779205,-0.596664726734161,-0.639922559261322,0.484241992235184,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.663377344608307,-0.740112125873566,0.110292978584766,-0.594583511352539,-0.803299486637115,0.0343575030565262,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.309475094079971,-0.95003479719162,-0.0407320484519005, -0.317538052797318,-0.919425249099731,-0.232006043195724,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.430616140365601,-0.892966866493225,-0.131072074174881,-0.317538052797318,-0.919425249099731,-0.232006043195724,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.162915915250778,-0.763080775737762,0.625432789325714,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.0628481134772301,-0.906862795352936,0.416713327169418,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.1754040569067,-0.893526375293732,0.413332790136337,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.391194581985474,-0.718477785587311,0.57511430978775,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.355102092027664,-0.850307106971741,0.388433188199997,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.218511044979095,-0.922666072845459,-0.317710936069489,-0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.820191740989685,-0.246563538908958,0.51622861623764,-0.865981459617615,-0.173945933580399,0.468848556280136, -0.704794883728027,-0.197958365082741,0.681231737136841,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.798515379428864,-0.599305510520935,0.0566220432519913,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.716389060020447,-0.69769012928009,0.00390529190190136,-0.748992025852203,-0.659226596355438,0.0665672123432159,-0.748079419136047,-0.662436008453369,0.0394426696002483,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.798864305019379,-0.578265428543091,0.165604829788208,-0.819603979587555,-0.56017941236496,0.120201125741005,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.77647191286087,0.0245032440871,0.629675269126892,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.626672208309174,0.255842447280884,0.736088693141937,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.490771174430847,0.254273563623428,0.833359837532043,-0.563944399356842,0.0872281566262245,0.821192979812622,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.737583756446838,0.0348345339298248,0.674356520175934,-0.834424376487732,-0.133758425712585,0.534644365310669,-0.525489568710327,-0.438258349895477,0.729239583015442,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.477150738239288,-0.679907381534576,0.556824207305908,-0.477150738239288,-0.679907381534576,0.556824207305908, -0.525664925575256,-0.713997602462769,0.462475687265396,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.771885097026825,-0.442620873451233,0.456377178430557,-0.641941249370575,-0.68879646062851,0.336854338645935,-0.525664925575256,-0.713997602462769,0.462475687265396,-0.660281181335449,-0.462338596582413,0.591837644577026,-0.521853566169739,-0.69189864397049,0.498944044113159,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.476766884326935,-0.797545433044434,0.369614124298096,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.58669912815094,-0.765324294567108,0.264693915843964,-0.547457277774811,-0.812714397907257,0.199463784694672,-0.487741857767105,-0.807749330997467,0.331132739782333,-0.515831410884857,-0.748138308525085,0.417381137609482,-0.329490900039673,-0.914458751678467,0.234948962926865,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.218423113226891,-0.952777028083801,0.210967406630516,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.201314941048622,-0.978592693805695,0.0427633114159107, -0.274860739707947,-0.954389214515686,0.116588413715363,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.406780004501343,-0.911690473556519,0.0578830800950527,-0.309475094079971,-0.95003479719162,-0.0407320484519005,-0.274860739707947,-0.954389214515686,0.116588413715363,-0.363402187824249,-0.911391258239746,0.193144634366035,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.2219308167696,-0.96528422832489,-0.137742727994919,-0.0788524150848389,-0.974068284034729,-0.212069168686867,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.201314941048622,-0.978592693805695,0.0427633114159107,-0.904991507530212,-0.153763204813004,0.396670162677765,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.903494656085968,-0.23456384241581,0.358715981245041,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.84095025062561,-0.471284002065659,0.265883654356003,-0.928220152854919,-0.224693849682808,0.296513050794601,-0.820191740989685,-0.246563538908958,0.51622861623764,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.926413714885712,-0.295776426792145,0.232967585325241,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.883318901062012,-0.449568182229996,0.132801294326782,-0.784831345081329,-0.569146692752838,0.245176956057549,-0.847638964653015,-0.474602103233337,0.23719410598278,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.774548470973969,-0.470689743757248,0.422523230314255,-0.838545143604279,-0.366839319467545,0.402828723192215,-0.820191740989685,-0.246563538908958,0.51622861623764, -0.943083763122559,-0.101111672818661,0.316811382770538,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.804705798625946,-0.0350312180817127,0.5926393866539,-0.971317529678345,-0.00673383427783847,0.237690657377243,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.853425025939941,0.00471344357356429,0.521194279193878,-0.970579981803894,0.0114585794508457,0.240506216883659,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.897873997688293,-0.0343663021922112,0.438909232616425,-0.969451248645782,-0.00855130515992641,0.245134904980659,-0.948668837547302,0.0917229205369949,0.302678614854813,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.908266186714172,-0.0645692199468613,0.413380444049835,-0.964182317256927,0.0220649186521769,0.264321088790894,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.665728688240051,-0.201705411076546,0.718415081501007,-0.888188779354095,-0.0342079848051071,0.45820364356041,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.717062890529633,-0.251050710678101,0.650226414203644,-0.827720582485199,-0.146306499838829,0.541731595993042,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.814229547977448,-0.268942922353745,0.514490008354187,-0.727153897285461,-0.354736089706421,0.58771550655365,-0.683742940425873,-0.428563714027405,0.59061723947525,-0.852678954601288,-0.302188754081726,0.426169604063034,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.943083763122559,-0.101111672818661,0.316811382770538,-0.755345046520233,-0.113645695149899,0.645397901535034,-0.704794883728027,-0.197958365082741,0.681231737136841,-0.928220152854919,-0.224693849682808,0.296513050794601, -0.931119084358215,-0.21125616133213,0.297301381826401,-0.865981459617615,-0.173945933580399,0.468848556280136,-0.820191740989685,-0.246563538908958,0.51622861623764,0.196581169962883,-0.892622411251068,0.405685991048813,0.340434432029724,-0.915098071098328,0.216101616621017,0.24199965596199,-0.948591530323029,0.203986048698425,0.0128951743245125,-0.862936913967133,0.505147039890289,0.196581169962883,-0.892622411251068,0.405685991048813,0.0128951743245125,-0.862936913967133,0.505147039890289,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188230976462364,-0.722290992736816,0.66548091173172,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.188230976462364,-0.722290992736816,0.66548091173172,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.522611916065216,0.119792513549328,0.844112873077393,-0.552518010139465,0.180195555090904,0.813789546489716,-0.530328452587128,0.10359351336956,0.841439306735992,-0.543807446956635,0.220993861556053,0.809589505195618,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.523460209369659,-0.770274937152863,0.36423334479332,-0.386017560958862,-0.663375020027161,0.641033530235291,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.248584538698196,-0.9084592461586,0.33601713180542,-0.0971510037779808,-0.777255237102509,0.621639728546143,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.392426759004593,0.205112621188164,0.896621465682983,-0.384387612342834,0.0363270901143551,0.922456741333008,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.390473067760468,-0.682946801185608,0.617344677448273,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.403418689966202,-0.482175469398499,0.777663290500641,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.390473067760468,-0.682946801185608,0.617344677448273, -0.510507762432098,-0.444001197814941,0.736372709274292,-0.55286180973053,-0.0385416857898235,0.832381188869476,-0.510507762432098,-0.444001197814941,0.736372709274292,-0.390473067760468,-0.682946801185608,0.617344677448273,-0.493755489587784,-0.567426800727844,0.658963084220886,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.491244077682495,-0.115444600582123,0.863337576389313,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.640060782432556,0.00115585804451257,0.768323421478271,-0.447912156581879,-0.140877023339272,0.882909059524536,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.571020781993866,-0.291943371295929,0.767270684242249,-0.547281503677368,-0.332838475704193,0.767920255661011,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.671048521995544,0.370010554790497,0.642484307289124,-0.673884630203247,0.467902958393097,0.571792244911194,-0.713547646999359,0.198780298233032,0.671815574169159,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.498029559850693,0.248690649867058,0.830734312534332,-0.484222084283829,0.366713851690292,0.794386506080627,-0.655175447463989,0.41560024023056,0.630889534950256,-0.671048521995544,0.370010554790497,0.642484307289124,-0.498029559850693,0.248690649867058,0.830734312534332,-0.671048521995544,0.370010554790497,0.642484307289124,-0.72460925579071,0.0771455466747284,0.684828460216522,-0.493602007627487,-0.18142081797123,0.850554823875427,0.579925835132599,-0.717766225337982,-0.3853540122509,0.161769852042198,-0.974958479404449,0.152598813176155,0.24199965596199,-0.948591530323029,0.203986048698425, 0.65024209022522,-0.683634519577026,-0.331404685974121,0.579925835132599,-0.717766225337982,-0.3853540122509,0.65024209022522,-0.683634519577026,-0.331404685974121,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.645713806152344,-0.220039650797844,-0.731188178062439,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.645713806152344,-0.220039650797844,-0.731188178062439,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.576868414878845,0.0959631279110909,-0.811180531978607,0.5412717461586,-0.0628231391310692,-0.838497579097748,0.576868414878845,0.0959631279110909,-0.811180531978607,0.329197883605957,-0.229186490178108,-0.916025280952454,0.387454837560654,-0.142215475440025,-0.910853147506714,0.773029983043671,-0.340951681137085,-0.534954726696014,0.630495369434357,-0.750089466571808,-0.199602961540222,0.681055247783661,-0.346231341362,-0.645203530788422,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.713780462741852,-0.04316745698452,-0.699037969112396,0.708586275577545,-0.00218898337334394,-0.705620765686035,0.681055247783661,-0.346231341362,-0.645203530788422,0.648240566253662,-0.463475733995438,-0.604131102561951,0.792737483978271,-0.494514644145966,-0.356402337551117,0.648240566253662,-0.463475733995438,-0.604131102561951,0.681055247783661,-0.346231341362,-0.645203530788422,0.630495369434357,-0.750089466571808,-0.199602961540222,0.894509136676788,-0.20981177687645,-0.394756108522415,0.928043901920319,-0.117735534906387,-0.3533735871315,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.955755293369293,-0.11410153657198,-0.27113202214241,0.890664577484131,-0.0774205401539803,0.448020815849304,0.955755293369293,-0.11410153657198,-0.27113202214241,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639,0.645680010318756,0.0625654682517052,0.888973355293274,0.214637205004692,0.404545694589615,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.959632039070129,0.0862699821591377,-0.267701029777527, 0.886527955532074,0.0429748557507992,-0.460674852132797,0.959632039070129,0.0862699821591377,-0.267701029777527,0.962546825408936,-0.0445899739861488,-0.267423540353775,0.928043901920319,-0.117735534906387,-0.3533735871315,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.753281593322754,0.510852336883545,0.414242386817932,-0.890724420547485,-0.0131717119365931,-0.454352855682373,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.735505998134613,0.630867898464203,0.247055947780609,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.890724420547485,-0.0131717119365931,-0.454352855682373,-0.753281593322754,0.510852336883545,0.414242386817932,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.432196706533432,-0.877966165542603,-0.205867424607277,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.59330803155899,-0.795282304286957,-0.124545678496361,-0.423251867294312,-0.8652303814888,-0.268764227628708,-0.428953319787979,-0.860944986343384,-0.273446142673492,-0.603027641773224,-0.78847599029541,-0.121091783046722,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.992541193962097,-0.0816466435790062,0.0905306413769722,-0.959170579910278,-0.0044404505752027,0.282793402671814,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.947893738746643,-0.165305480360985,0.272344529628754,-0.913087010383606,-0.000645391584839672,0.407764256000519,-0.808385133743286,0.0124147878959775,0.588523030281067,-0.873597860336304,-0.23740328848362,0.424813508987427,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.787305235862732,-0.612785577774048,0.0681484714150429,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.635643780231476,-0.760042726993561,-0.135248005390167, -0.713391602039337,-0.697049975395203,-0.0720673725008965,-0.618224084377289,-0.776368081569672,-0.122684694826603,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.571418464183807,-0.794688820838928,-0.204818531870842,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.768178582191467,-0.575125515460968,0.281304657459259,-0.740851521492004,-0.347129315137863,0.575013279914856,-0.80333799123764,-0.434850186109543,0.406882554292679,-0.73885315656662,-0.641847014427185,0.205252081155777,-0.734221398830414,-0.668789088726044,0.116790995001793,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.635643780231476,-0.760042726993561,-0.135248005390167,-0.713214337825775,-0.70085734128952,-0.0111503517255187,-0.664591491222382,-0.746946513652802,0.01972521468997,-0.648963153362274,-0.756622016429901,-0.0798120051622391,-0.118598200380802,-0.990273535251617,0.0727519541978836,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.111326843500137,-0.985514283180237,0.127937391400337,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.450571924448013,-0.714681327342987,0.534991204738617, -0.347470790147781,-0.852081894874573,0.391433894634247,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.434661060571671,-0.742193758487701,0.5101158618927,-0.722620606422424,0.556017577648163,0.410687148571014,-0.762500584125519,0.610563993453979,0.214019775390625,-0.72613924741745,0.535442233085632,0.431304275989532,-0.659900903701782,0.452796697616577,0.59958815574646,-0.722620606422424,0.556017577648163,0.410687148571014,-0.659900903701782,0.452796697616577,0.59958815574646,-0.794037878513336,0.353904455900192,0.49422213435173,-0.784657657146454,0.439340144395828,0.437370121479034,-0.704894602298737,0.389235317707062,0.592975080013275,-0.808332681655884,0.323168575763702,0.49209788441658,-0.746036350727081,0.393973112106323,0.536856591701508,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.742441892623901,0.401161223649979,0.53651624917984,-0.766035974025726,0.399132251739502,0.503867447376251,0.00262317061424255,-0.184787794947624,0.982774972915649,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.299746423959732,0.0442999862134457,0.952989816665649,0.017973817884922,0.0102047342807055,0.999786376953125,-0.360249727964401,-0.149908572435379,0.920732080936432,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.664805889129639,0.056874256581068,0.74484795331955,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.910155653953552,-0.193675979971886,0.366205275058746,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.64180713891983,-0.25287389755249,0.723973989486694,-0.837247967720032,-0.308187961578369,0.451703399419785,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.664805889129639,0.056874256581068,0.74484795331955,-0.859274387359619,0.29542076587677,0.417581170797348,-0.805146157741547,0.523773431777954,0.278210490942001,-0.722620606422424,0.556017577648163,0.410687148571014, -0.784657657146454,0.439340144395828,0.437370121479034,-0.773442804813385,0.436002254486084,0.460096001625061,-0.805146157741547,0.523773431777954,0.278210490942001,-0.762500584125519,0.610563993453979,0.214019775390625,-0.722620606422424,0.556017577648163,0.410687148571014,-0.0658838152885437,0.0649923235177994,0.995708465576172,-0.474541217088699,0.29422801733017,0.829602658748627,-0.466067016124725,0.290591061115265,0.835666418075562,-0.674032330513,0.408573538064957,0.615425109863281,-0.701379120349884,0.42103236913681,0.575151324272156,-0.736577808856964,0.297644317150116,0.607339262962341,-0.704894602298737,0.389235317707062,0.592975080013275,-0.709671497344971,0.473905295133591,0.521325349807739,-0.701379120349884,0.42103236913681,0.575151324272156,-0.674032330513,0.408573538064957,0.615425109863281,-0.700818002223969,0.442935287952423,0.559162259101868,-0.265877991914749,0.261434108018875,0.927879869937897,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.367648780345917,-0.406335473060608,0.83649617433548,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.489892512559891,0.122311964631081,0.863159954547882,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.460973918437958,-0.302575647830963,0.834236800670624,-0.489892512559891,0.122311964631081,0.863159954547882,-0.736584484577179,0.13217331469059,0.66330498456955,-0.489892512559891,0.122311964631081,0.863159954547882,-0.451172351837158,0.441036701202393,0.775841593742371,-0.715115904808044,0.391270339488983,0.57923811674118,-0.715115904808044,0.391270339488983,0.57923811674118,-0.878912448883057,0.190948858857155,0.437094360589981,-0.847993731498718,-0.0830313712358475,0.523461937904358, -0.736584484577179,0.13217331469059,0.66330498456955,-0.664254903793335,-0.259532362222672,0.701005280017853,-0.736584484577179,0.13217331469059,0.66330498456955,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.767993330955505,-0.301860928535461,0.564859509468079,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.847993731498718,-0.0830313712358475,0.523461937904358,-0.878912448883057,0.190948858857155,0.437094360589981,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.664805889129639,0.056874256581068,0.74484795331955,-0.575338959693909,0.442981451749802,0.687570035457611,-0.185234054923058,0.48134982585907,0.856732606887817,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.910155653953552,-0.193675979971886,0.366205275058746,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.144208893179893,0.115719296038151,0.982757806777954,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.100514478981495,0.314375013113022,0.943962454795837,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.468296974897385,-0.39009964466095,0.792792677879334,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.20097516477108,-0.349854558706284,0.914992213249207,-0.468296974897385,-0.39009964466095,0.792792677879334,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.882139265537262,0.0501233264803886,0.468313992023468,-0.766035974025726,0.399132251739502,0.503867447376251,-0.782657444477081,0.380464553833008,0.4926398396492,-0.126811400055885,-0.181621968746185,0.975157618522644,0.0174392946064472,-0.157727032899857,0.987328767776489, 0.134034633636475,-0.240539237856865,0.961340487003326,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.53751266002655,0.1327995210886,0.832733154296875,-0.615555763244629,0.148695304989815,0.773938477039337,-0.595763564109802,0.13890865445137,0.791056394577026,-0.527163207530975,0.108157083392143,0.842852890491486,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.606947243213654,0.110988683998585,0.786953926086426,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.708724558353424,0.18108169734478,0.681849598884583,-0.774853527545929,0.101396143436432,0.62395578622818,-0.708724558353424,0.18108169734478,0.681849598884583,-0.701005637645721,0.0937562733888626,0.706965982913971,-0.703076124191284,0.0390988439321518,0.710038900375366,-0.606947243213654,0.110988683998585,0.786953926086426,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.582078754901886,0.152128055691719,0.798774898052216,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.626051127910614,0.0937396511435509,0.774127185344696,-0.582078754901886,0.152128055691719,0.798774898052216,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.518675327301025,0.170822575688362,0.837732374668121,-0.527163207530975,0.108157083392143,0.842852890491486,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.527163207530975,0.108157083392143,0.842852890491486,-0.595763564109802,0.13890865445137,0.791056394577026,-0.59487509727478,0.0656027272343636,0.801136672496796,-0.419887959957123,0.29813814163208,0.857209324836731,-0.35642284154892,0.221263155341148,0.907747387886047,-0.447176039218903,0.207748264074326,0.869985222816467,-0.692487776279449,0.122583940625191,0.71093875169754,-0.711035132408142,0.199701055884361,0.674202144145966, -0.419887959957123,0.29813814163208,0.857209324836731,-0.518675327301025,0.170822575688362,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.35642284154892,0.221263155341148,0.907747387886047,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.53751266002655,0.1327995210886,0.832733154296875,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.667788088321686,0.180951654911041,0.722021877765656,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.711035132408142,0.199701055884361,0.674202144145966,-0.847861528396606,0.113259613513947,0.517979800701141,-0.807841360569,0.43371844291687,0.399099737405777,-0.692487776279449,0.122583940625191,0.71093875169754,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.847861528396606,0.113259613513947,0.517979800701141,-0.711035132408142,0.199701055884361,0.674202144145966,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.606947243213654,0.110988683998585,0.786953926086426,-0.530206859111786,0.100595757365227,0.841879546642303,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.530206859111786,0.100595757365227,0.841879546642303,-0.606947243213654,0.110988683998585,0.786953926086426,-0.573864758014679,0.230327397584915,0.785893499851227,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.157473087310791,-0.645219802856445,0.747591853141785,0.033345639705658,-0.401991754770279,0.915035903453827,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.358404159545898,-0.845226526260376,0.396407097578049,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.561927437782288,-0.650319397449493,-0.511196792125702, -0.800594985485077,-0.588442921638489,0.113060474395752,-0.692233920097351,-0.67291522026062,0.260762959718704,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.800594985485077,-0.588442921638489,0.113060474395752,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.180075973272324,-0.610178112983704,-0.771527945995331,-0.561927437782288,-0.650319397449493,-0.511196792125702,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.963837623596191,0.235864251852036,0.124036490917206,-0.864985883235931,0.37462642788887,0.333847969770432,-0.936657905578613,0.0257524941116571,0.349297523498535,-0.735505998134613,0.630867898464203,0.247055947780609,-0.864985883235931,0.37462642788887,0.333847969770432,-0.963837623596191,0.235864251852036,0.124036490917206,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.912571549415588,-0.364975243806839,0.184407845139503,-0.569225609302521,-0.734513640403748,0.369421064853668,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.729740858078003,-0.632296204566956,0.260153472423553,-0.737712860107422,-0.674677968025208,0.0242776274681091,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.233076319098473,-0.804329991340637,0.546560764312744,0.0642944201827049,-0.547998011112213,0.834004998207092, -0.233076319098473,-0.804329991340637,0.546560764312744,-0.404658854007721,-0.851388573646545,0.33374947309494,-0.267043441534042,-0.793497562408447,0.546854078769684,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.00470763072371483,0.279436647891998,0.960152566432953,0.630376875400543,-0.0280195455998182,0.77578341960907,0.439482539892197,-0.499404758214951,0.74662572145462,0.485446602106094,-0.599754393100739,0.636110246181488,0.439482539892197,-0.499404758214951,0.74662572145462,0.630376875400543,-0.0280195455998182,0.77578341960907,0.775241792201996,-0.45661398768425,0.436467438936234,-0.331932127475739,-0.817436873912811,0.470763176679611,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.403418689966202,-0.482175469398499,0.777663290500641,0.0642944201827049,-0.547998011112213,0.834004998207092,-0.267043441534042,-0.793497562408447,0.546854078769684,-0.29678151011467,-0.786470353603363,0.541650354862213,-0.0667830258607864,-0.603913366794586,-0.794247210025787,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.890724420547485,-0.0131717119365931,-0.454352855682373,0.615995168685913,-0.740946054458618,0.267486304044724,0.408733516931534,-0.739542424678802,0.534802675247192,-0.575954735279083,-0.540566444396973,0.613240599632263,0.315651625394821,-0.933804154396057,0.168445229530334,0.615995168685913,-0.740946054458618,0.267486304044724,0.775241792201996,-0.45661398768425,0.436467438936234,0.408733516931534,-0.739542424678802,0.534802675247192,0.630376875400543,-0.0280195455998182,0.77578341960907,0.103311404585838,-0.0802608132362366,0.991405546665192,0.408733516931534,-0.739542424678802,0.534802675247192,0.775241792201996,-0.45661398768425,0.436467438936234,-0.575954735279083,-0.540566444396973,0.613240599632263,0.408733516931534,-0.739542424678802,0.534802675247192,0.103311404585838,-0.0802608132362366,0.991405546665192,-0.54303914308548,0.178987935185432,0.820409536361694, -0.00470763072371483,0.279436647891998,0.960152566432953,-0.54303914308548,0.178987935185432,0.820409536361694,0.103311404585838,-0.0802608132362366,0.991405546665192,0.630376875400543,-0.0280195455998182,0.77578341960907,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.54303914308548,0.178987935185432,0.820409536361694,-0.743858754634857,0.1927819699049,0.639929115772247,-0.00470763072371483,0.279436647891998,0.960152566432953,-0.531166195869446,0.151813089847565,0.833555817604065,-0.743858754634857,0.1927819699049,0.639929115772247,-0.54303914308548,0.178987935185432,0.820409536361694,-0.811837613582611,0.121092565357685,-0.571188449859619,-0.963837623596191,0.235864251852036,0.124036490917206,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.954180955886841,-0.122847504913807,-0.272850096225739,-0.963837623596191,0.235864251852036,0.124036490917206,-0.875780642032623,-0.343180775642395,0.339463174343109,-0.85713666677475,-0.480864852666855,0.184623166918755,-0.774853527545929,0.101396143436432,0.62395578622818,-0.721355617046356,0.238694369792938,0.650131583213806,-0.668299674987793,0.334984093904495,0.664199709892273,-0.708724558353424,0.18108169734478,0.681849598884583,-0.606947243213654,0.110988683998585,0.786953926086426,-0.708724558353424,0.18108169734478,0.681849598884583,-0.668299674987793,0.334984093904495,0.664199709892273,-0.573864758014679,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.573864758014679,0.230327397584915,0.785893499851227,-0.668299674987793,0.334984093904495,0.664199709892273,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.841734766960144,0.21214547753334,0.496464431285858,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.668299674987793,0.334984093904495,0.664199709892273,-0.721355617046356,0.238694369792938,0.650131583213806,-0.721025288105011,0.149201020598412,0.676654696464539,-0.807132244110107,0.16207791864872,0.567686796188354,-0.80397242307663,0.0757209435105324,0.589825987815857,-0.708662629127502,0.112244434654713,0.696561932563782, -0.721025288105011,0.149201020598412,0.676654696464539,-0.708662629127502,0.112244434654713,0.696561932563782,-0.595763564109802,0.13890865445137,0.791056394577026,-0.615555763244629,0.148695304989815,0.773938477039337,-0.77285635471344,0.360512226819992,0.522229790687561,-0.903163015842438,0.185778304934502,0.387017965316772,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.841734766960144,0.21214547753334,0.496464431285858,-0.903163015842438,0.185778304934502,0.387017965316772,-0.77285635471344,0.360512226819992,0.522229790687561,-0.800202667713165,0.314497977495193,0.510653257369995,-0.721025288105011,0.149201020598412,0.676654696464539,-0.615555763244629,0.148695304989815,0.773938477039337,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.807132244110107,0.16207791864872,0.567686796188354,-0.721025288105011,0.149201020598412,0.676654696464539,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.809095621109009,0.140354558825493,0.570670545101166,-0.978964686393738,0.106371738016605,0.174106821417809,-0.93869537115097,0.246357470750809,0.241161808371544,-0.959026336669922,0.206695169210434,0.193766981363297,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.973734021186829,-0.0321761183440685,0.225403621792793,-0.989297807216644,0.0386401489377022,0.140700981020927,-0.959026336669922,0.206695169210434,0.193766981363297,-0.961905956268311,0.126988083124161,0.242096945643425,-0.92311555147171,0.291509866714478,0.250758200883865,-0.961905956268311,0.126988083124161,0.242096945643425,-0.959026336669922,0.206695169210434,0.193766981363297,-0.935693740844727,0.265559196472168,0.232283264398575,-0.927535772323608,0.260400146245956,0.26808425784111,-0.935693740844727,0.265559196472168,0.232283264398575,-0.959026336669922,0.206695169210434,0.193766981363297,-0.93869537115097,0.246357470750809,0.241161808371544,-0.978964686393738,0.106371738016605,0.174106821417809,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.951185405254364,-0.150061026215553,0.2696812748909, -0.945830225944519,0.0969298705458641,0.309854567050934,-0.903163015842438,0.185778304934502,0.387017965316772,-0.945830225944519,0.0969298705458641,0.309854567050934,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.9692302942276,-0.185824662446976,0.161436811089516,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.979163587093353,-0.176672399044037,0.100127547979355,-0.807132244110107,0.16207791864872,0.567686796188354,-0.809095621109009,0.140354558825493,0.570670545101166,-0.845765233039856,0.182700246572495,0.501300096511841,-0.800202667713165,0.314497977495193,0.510653257369995,-0.800202667713165,0.314497977495193,0.510653257369995,-0.845765233039856,0.182700246572495,0.501300096511841,-0.864785015583038,0.227262705564499,0.447770565748215,-0.903163015842438,0.185778304934502,0.387017965316772,-0.873595476150513,0.228950142860413,0.429433107376099,-0.864785015583038,0.227262705564499,0.447770565748215,-0.845765233039856,0.182700246572495,0.501300096511841,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558,-0.868421196937561,0.174519643187523,0.46409860253334,-0.845765233039856,0.182700246572495,0.501300096511841,-0.809095621109009,0.140354558825493,0.570670545101166,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.868421196937561,0.174519643187523,0.46409860253334,-0.830214977264404,0.100066982209682,0.548388242721558,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.873595476150513,0.228950142860413,0.429433107376099,-0.868421196937561,0.174519643187523,0.46409860253334,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.927467882633209,0.10914921015501,0.357616752386093,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.830214977264404,0.100066982209682,0.548388242721558,-0.374559938907623,-0.262731373310089,0.889200270175934, -0.187731966376305,-0.0942238569259644,0.977690398693085,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.666117191314697,0.0638493075966835,0.743109107017517,-0.159300580620766,0.0403820462524891,0.98640388250351,-0.144208893179893,0.115719296038151,0.982757806777954,-0.466067016124725,0.290591061115265,0.835666418075562,-0.742441892623901,0.401161223649979,0.53651624917984,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.709384381771088,-0.0485099703073502,0.703150451183319,-0.748288989067078,-0.145342826843262,0.647255063056946,-0.137671425938606,0.655901074409485,0.742186188697815,-0.185234054923058,0.48134982585907,0.856732606887817,-0.575338959693909,0.442981451749802,0.687570035457611,-0.570384085178375,0.537651479244232,0.62096118927002,-0.299746423959732,0.0442999862134457,0.952989816665649,-0.185234054923058,0.48134982585907,0.856732606887817,0.0513622872531414,0.468802571296692,0.881808400154114,0.017973817884922,0.0102047342807055,0.999786376953125,-0.782657444477081,0.380464553833008,0.4926398396492,-0.766035974025726,0.399132251739502,0.503867447376251,-0.71884548664093,0.434318542480469,0.542796969413757,-0.724688529968262,0.437472999095917,0.532394528388977,-0.766035974025726,0.399132251739502,0.503867447376251,-0.742441892623901,0.401161223649979,0.53651624917984,-0.745189905166626,0.433578848838806,0.506657063961029,-0.71884548664093,0.434318542480469,0.542796969413757,-0.704894602298737,0.389235317707062,0.592975080013275,-0.649461984634399,0.424084842205048,0.631150722503662,-0.674032330513,0.408573538064957,0.615425109863281,-0.162020102143288,0.560337007045746,0.812263488769531,0.0571579374372959,0.555576980113983,0.829498171806335,0.0635503008961678,0.655404150485992,0.752600014209747,-0.137671425938606,0.655901074409485,0.742186188697815, -0.162020102143288,0.560337007045746,0.812263488769531,-0.137671425938606,0.655901074409485,0.742186188697815,-0.570384085178375,0.537651479244232,0.62096118927002,-0.636985540390015,0.443951308727264,0.630203664302826,-0.71884548664093,0.434318542480469,0.542796969413757,-0.745189905166626,0.433578848838806,0.506657063961029,-0.709671497344971,0.473905295133591,0.521325349807739,-0.700818002223969,0.442935287952423,0.559162259101868,-0.700818002223969,0.442935287952423,0.559162259101868,-0.75682544708252,0.389968425035477,0.524537801742554,-0.724688529968262,0.437472999095917,0.532394528388977,-0.71884548664093,0.434318542480469,0.542796969413757,-0.782657444477081,0.380464553833008,0.4926398396492,-0.724688529968262,0.437472999095917,0.532394528388977,-0.75682544708252,0.389968425035477,0.524537801742554,-0.570384085178375,0.537651479244232,0.62096118927002,-0.575338959693909,0.442981451749802,0.687570035457611,-0.803570151329041,0.341960042715073,0.487173795700073,-0.636985540390015,0.443951308727264,0.630203664302826,-0.570384085178375,0.537651479244232,0.62096118927002,-0.75682544708252,0.389968425035477,0.524537801742554,-0.649461984634399,0.424084842205048,0.631150722503662,-0.803570151329041,0.341960042715073,0.487173795700073,-0.75682544708252,0.389968425035477,0.524537801742554,-0.700818002223969,0.442935287952423,0.559162259101868,-0.674032330513,0.408573538064957,0.615425109863281,-0.474541217088699,0.29422801733017,0.829602658748627,-0.402321964502335,0.279689967632294,0.871728479862213,-0.709671497344971,0.473905295133591,0.521325349807739,-0.745189905166626,0.433578848838806,0.506657063961029,-0.466067016124725,0.290591061115265,0.835666418075562,-0.474541217088699,0.29422801733017,0.829602658748627,-0.745189905166626,0.433578848838806,0.506657063961029,-0.742441892623901,0.401161223649979,0.53651624917984,-0.566419124603271,0.446817666292191,0.692476272583008,-0.701379120349884,0.42103236913681,0.575151324272156,-0.709671497344971,0.473905295133591,0.521325349807739,-0.402321964502335,0.279689967632294,0.871728479862213, -0.271942734718323,0.215774357318878,0.93781054019928,-0.566419124603271,0.446817666292191,0.692476272583008,-0.271942734718323,0.215774357318878,0.93781054019928,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.389257401227951,0.367899239063263,0.844469547271729,-0.235767140984535,0.346122115850449,0.908082246780396,-0.313661307096481,0.354362040758133,0.88093364238739,-0.362064868211746,0.124421969056129,0.923811793327332,-0.298522680997849,0.122926026582718,0.946453094482422,-0.406924575567245,0.55693382024765,0.724042177200317,-0.296029925346375,0.469678968191147,0.831725895404816,-0.313661307096481,0.354362040758133,0.88093364238739,-0.319937378168106,0.457704126834869,0.829546272754669,-0.530960738658905,0.402330845594406,0.74579530954361,-0.362064868211746,0.124421969056129,0.923811793327332,-0.313661307096481,0.354362040758133,0.88093364238739,-0.296029925346375,0.469678968191147,0.831725895404816,-0.265877991914749,0.261434108018875,0.927879869937897,-0.410987347364426,-0.221517965197563,0.884318470954895,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.450571924448013,-0.714681327342987,0.534991204738617,-0.298522680997849,0.122926026582718,0.946453094482422,-0.362064868211746,0.124421969056129,0.923811793327332,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.410987347364426,-0.221517965197563,0.884318470954895,0.139874473214149,0.332423865795136,0.932700097560883,-0.113911136984825,0.222564980387688,0.968240201473236,-0.38422480225563,0.137366592884064,0.912963151931763,-0.496900916099548,0.22183683514595,0.838974297046661,-0.259019255638123,0.306849449872971,0.915834307670593,-0.365421146154404,0.118911430239677,0.923215806484222,-0.459187179803848,0.12899711728096,0.878923714160919,-0.365421146154404,0.118911430239677,0.923215806484222,-0.259019255638123,0.306849449872971,0.915834307670593,-0.0251229144632816,0.34635528922081,0.937766969203949,-0.215113177895546,0.235299572348595,0.947818756103516,-0.0251229144632816,0.34635528922081,0.937766969203949, -0.259019255638123,0.306849449872971,0.915834307670593,-0.284513026475906,0.431574016809464,0.856035172939301,-0.235767140984535,0.346122115850449,0.908082246780396,-0.427875101566315,0.308164179325104,0.849680960178375,-0.284513026475906,0.431574016809464,0.856035172939301,-0.259019255638123,0.306849449872971,0.915834307670593,-0.496900916099548,0.22183683514595,0.838974297046661,-0.235767140984535,0.346122115850449,0.908082246780396,-0.284513026475906,0.431574016809464,0.856035172939301,-0.319937378168106,0.457704126834869,0.829546272754669,-0.313661307096481,0.354362040758133,0.88093364238739,-0.419355839490891,0.314480572938919,0.851611793041229,-0.319937378168106,0.457704126834869,0.829546272754669,-0.284513026475906,0.431574016809464,0.856035172939301,-0.427875101566315,0.308164179325104,0.849680960178375,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.0748888924717903,0.185519590973854,0.979782700538635,0.0812274590134621,0.180781692266464,0.980163276195526,0.0307731032371521,0.261024415493011,0.964841604232788,-0.786397933959961,0.197700291872025,0.58522891998291,-0.548411548137665,0.270011872053146,0.791415393352509,-0.590761244297028,0.21027672290802,0.778963983058929,-0.8270303606987,0.233872473239899,0.511198997497559,-0.530960738658905,0.402330845594406,0.74579530954361,-0.548411548137665,0.270011872053146,0.791415393352509,-0.786397933959961,0.197700291872025,0.58522891998291,-0.737271249294281,0.345291316509247,0.580693602561951,-0.548411548137665,0.270011872053146,0.791415393352509,-0.419355839490891,0.314480572938919,0.851611793041229,-0.409960985183716,0.234984055161476,0.881314098834991,-0.590761244297028,0.21027672290802,0.778963983058929,-0.419355839490891,0.314480572938919,0.851611793041229,-0.548411548137665,0.270011872053146,0.791415393352509,-0.530960738658905,0.402330845594406,0.74579530954361,-0.319937378168106,0.457704126834869,0.829546272754669,0.0340906009078026,0.177746370434761,0.983485698699951,0.0145859681069851,0.146671071648598,0.989077806472778,0.0307504720985889,0.178748592734337,0.983414113521576, 0.0284836571663618,0.148866042494774,0.988447070121765,0.0145859681069851,0.146671071648598,0.989077806472778,-0.109741598367691,0.221520185470581,0.968961119651794,0.0381993055343628,0.285694986581802,0.957558989524841,0.0307504720985889,0.178748592734337,0.983414113521576,-0.521145462989807,0.365769624710083,0.771116077899933,-0.52777773141861,0.480110883712769,0.700674116611481,-0.593105614185333,0.348213493824005,0.725929081439972,-0.469541937112808,0.464283794164658,0.750979959964752,-0.593105614185333,0.348213493824005,0.725929081439972,-0.52777773141861,0.480110883712769,0.700674116611481,-0.542732357978821,0.501746475696564,0.673566699028015,-0.125368878245354,0.424985140562058,0.896476626396179,-0.229512825608253,0.568260371685028,0.790192425251007,-0.279750615358353,0.610641419887543,0.74084860086441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.16978645324707,0.304286330938339,0.937327265739441,-0.0915354415774345,0.261345416307449,0.960895359516144,-0.125368878245354,0.424985140562058,0.896476626396179,-0.20940063893795,0.453145354986191,0.866493284702301,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.229512825608253,0.568260371685028,0.790192425251007,-0.125368878245354,0.424985140562058,0.896476626396179,0.0543623231351376,0.513473629951477,0.85638165473938,-0.0943122506141663,0.53818953037262,0.837530434131622,-0.125368878245354,0.424985140562058,0.896476626396179,0.045425571501255,0.382962375879288,0.922646403312683,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.362064868211746,0.124421969056129,0.923811793327332,-0.265877991914749,0.261434108018875,0.927879869937897,-0.352154672145844,-0.530555903911591,0.771036624908447,-0.422395497560501,-0.639552056789398,0.642304599285126,-0.435046851634979,-0.178151845932007,0.882607579231262,-0.317165046930313,-0.11580903083086,0.941272854804993,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.450571924448013,-0.714681327342987,0.534991204738617, -0.422395497560501,-0.639552056789398,0.642304599285126,-0.347470790147781,-0.852081894874573,0.391433894634247,-0.29602313041687,-0.765856146812439,0.57081925868988,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.337558269500732,-0.222729057073593,0.914574325084686,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.196050360798836,-0.216366931796074,0.956425428390503,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.271065413951874,-0.201962277293205,0.941134810447693,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.628194212913513,0.287138849496841,0.723134398460388,-0.543807446956635,0.220993861556053,0.809589505195618,-0.530328452587128,0.10359351336956,0.841439306735992,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.578717350959778,0.160483196377754,0.799582004547119,-0.522611916065216,0.119792513549328,0.844112873077393,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.578717350959778,0.160483196377754,0.799582004547119,-0.544984936714172,0.0565603822469711,0.836535930633545,-0.511095225811005,0.0877900868654251,0.855028986930847,-0.522611916065216,0.119792513549328,0.844112873077393,-0.543807446956635,0.220993861556053,0.809589505195618,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.281761676073074,-0.0540490485727787,0.957960903644562,-0.628194212913513,0.287138849496841,0.723134398460388,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.251964539289474,0.00403303280472755,0.967728078365326, -0.543807446956635,0.220993861556053,0.809589505195618,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.628194212913513,0.287138849496841,0.723134398460388,-0.739963114261627,0.167704880237579,0.651405930519104,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.566845297813416,-0.21562035381794,0.795106470584869,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.545112073421478,-0.349918723106384,0.761846244335175,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.401082366704941,-0.279612392187119,0.872324407100677,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.500701189041138,-0.0503258183598518,0.864156007766724,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.330932438373566,-0.348879218101501,0.876793563365936,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.800495445728302,-0.125636011362076,0.586022734642029, -0.797025501728058,-0.136790543794632,0.588250517845154,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.886639893054962,-0.0635407567024231,0.458074539899826,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.874930620193481,-0.0546998046338558,0.481148958206177,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.906570792198181,0.0384938083589077,0.42029470205307,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.927467882633209,0.10914921015501,0.357616752386093,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.951293051242828,0.220237165689468,0.215724766254425,-0.927467882633209,0.10914921015501,0.357616752386093,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.924965918064117,-0.0129916705191135,0.379827976226807,-0.902154207229614,-0.0625928491353989,0.42684879899025,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.446160137653351,-0.556800782680511,0.700652599334717,-0.741787433624268,-0.27885103225708,0.609912693500519,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.704939186573029,-0.235216736793518,0.669129133224487,-0.741787433624268,-0.27885103225708,0.609912693500519, -0.785227119922638,-0.253755480051041,0.564824342727661,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.444485455751419,0.263989001512527,0.856003820896149,-0.459187179803848,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.506407201290131,0.224265813827515,0.832620322704315,-0.444485455751419,0.263989001512527,0.856003820896149,-0.409337908029556,0.315496683120728,0.856098294258118,-0.49151623249054,0.284042507410049,0.823244571685791,-0.49151623249054,0.284042507410049,0.823244571685791,-0.409337908029556,0.315496683120728,0.856098294258118,-0.352872759103775,0.327800124883652,0.87637197971344,-0.521145462989807,0.365769624710083,0.771116077899933,-0.593105614185333,0.348213493824005,0.725929081439972,-0.352872759103775,0.327800124883652,0.87637197971344,-0.409337908029556,0.315496683120728,0.856098294258118,-0.137076109647751,0.352542161941528,0.925701975822449,-0.197477996349335,0.340727478265762,0.919188320636749,-0.137076109647751,0.352542161941528,0.925701975822449,-0.409337908029556,0.315496683120728,0.856098294258118,-0.444485455751419,0.263989001512527,0.856003820896149,-0.0850988999009132,0.32578244805336,0.941607117652893,-0.137076109647751,0.352542161941528,0.925701975822449,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.16978645324707,0.304286330938339,0.937327265739441,-0.197477996349335,0.340727478265762,0.919188320636749,-0.0850988999009132,0.32578244805336,0.941607117652893,0.0307731032371521,0.261024415493011,0.964841604232788,-0.0867536216974258,0.288804531097412,0.953449428081512,-0.137076109647751,0.352542161941528,0.925701975822449,0.0340906009078026,0.177746370434761,0.983485698699951,0.0307731032371521,0.261024415493011,0.964841604232788,0.0812274590134621,0.180781692266464,0.980163276195526,0.0145859681069851,0.146671071648598,0.989077806472778,-0.365421146154404,0.118911430239677,0.923215806484222,-0.113911136984825,0.222564980387688,0.968240201473236,-0.0748888924717903,0.185519590973854,0.979782700538635, -0.459187179803848,0.12899711728096,0.878923714160919,-0.0748888924717903,0.185519590973854,0.979782700538635,-0.113911136984825,0.222564980387688,0.968240201473236,0.0879488736391068,0.341627478599548,0.935711324214935,0.0812274590134621,0.180781692266464,0.980163276195526,0.0812274590134621,0.180781692266464,0.980163276195526,0.0879488736391068,0.341627478599548,0.935711324214935,-0.109741598367691,0.221520185470581,0.968961119651794,0.0145859681069851,0.146671071648598,0.989077806472778,0.0879488736391068,0.341627478599548,0.935711324214935,0.0744598954916,0.293609887361526,0.953020930290222,-0.109741598367691,0.221520185470581,0.968961119651794,-0.273772716522217,0.454653739929199,0.847548484802246,-0.197477996349335,0.340727478265762,0.919188320636749,-0.16978645324707,0.304286330938339,0.937327265739441,-0.20940063893795,0.453145354986191,0.866493284702301,-0.352872759103775,0.327800124883652,0.87637197971344,-0.197477996349335,0.340727478265762,0.919188320636749,-0.273772716522217,0.454653739929199,0.847548484802246,-0.521145462989807,0.365769624710083,0.771116077899933,-0.521145462989807,0.365769624710083,0.771116077899933,-0.273772716522217,0.454653739929199,0.847548484802246,-0.346435993909836,0.570491790771484,0.744661808013916,-0.52777773141861,0.480110883712769,0.700674116611481,-0.917084217071533,0.247074887156487,0.312906622886658,-0.915071547031403,0.269603192806244,0.299930244684219,-0.893653392791748,0.274633705615997,0.354908317327499,-0.913878262042999,0.245342120528221,0.323471456766129,-0.913878262042999,0.245342120528221,0.323471456766129,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541,0.351532429456711,-0.933935105800629,0.157070308923721,0.321082711219788,-0.92679888010025,0.171274200081825,0.334228843450546,-0.919987142086029,0.260143458843231,0.293170690536499,-0.915071547031403,0.269603192806244,0.299930244684219,-0.917084217071533,0.247074887156487,0.312906622886658,-0.939980566501617,0.104119330644608,0.324954867362976,-0.893953561782837,0.312333762645721,0.321394920349121, -0.903283476829529,0.306006491184235,0.30073082447052,-0.946860730648041,0.157310754060745,0.280549645423889,-0.945931136608124,0.172555223107338,0.274661630392075,-0.946860730648041,0.157310754060745,0.280549645423889,-0.903283476829529,0.306006491184235,0.30073082447052,-0.921472430229187,0.268827170133591,0.280393421649933,-0.915071547031403,0.269603192806244,0.299930244684219,-0.921472430229187,0.268827170133591,0.280393421649933,-0.903283476829529,0.306006491184235,0.30073082447052,-0.893653392791748,0.274633705615997,0.354908317327499,-0.90123462677002,0.253379285335541,0.351532429456711,-0.893653392791748,0.274633705615997,0.354908317327499,-0.903283476829529,0.306006491184235,0.30073082447052,-0.893953561782837,0.312333762645721,0.321394920349121,-0.945931136608124,0.172555223107338,0.274661630392075,-0.921472430229187,0.268827170133591,0.280393421649933,-0.934037208557129,0.242426365613937,0.262305021286011,-0.915071547031403,0.269603192806244,0.299930244684219,-0.919987142086029,0.260143458843231,0.293170690536499,-0.934037208557129,0.242426365613937,0.262305021286011,-0.921472430229187,0.268827170133591,0.280393421649933,-0.974589943885803,0.150285556912422,0.166098326444626,-0.931853711605072,0.224255800247192,0.285233229398727,-0.958487570285797,0.190219804644585,0.212409943342209,-0.929433286190033,0.240452021360397,0.27988663315773,-0.958487570285797,0.190219804644585,0.212409943342209,-0.931853711605072,0.224255800247192,0.285233229398727,-0.919987142086029,0.260143458843231,0.293170690536499,-0.917084217071533,0.247074887156487,0.312906622886658,-0.920456767082214,0.196246728301048,0.338003754615784,-0.92679888010025,0.171274200081825,0.334228843450546,-0.960206747055054,0.212085798382759,0.18172125518322,-0.937809467315674,0.204933196306229,0.280206710100174,-0.945931136608124,0.172555223107338,0.274661630392075,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.934037208557129,0.242426365613937,0.262305021286011,-0.919987142086029,0.260143458843231,0.293170690536499, -0.38422480225563,0.137366592884064,0.912963151931763,-0.451660662889481,0.11085283011198,0.88527637720108,-0.0374716036021709,0.192808955907822,0.98052054643631,0.139874473214149,0.332423865795136,0.932700097560883,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.451660662889481,0.11085283011198,0.88527637720108,-0.110501579940319,0.212603434920311,0.970870316028595,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.11665827780962,-0.95351368188858,0.277853488922119,-0.104054369032383,-0.821656465530396,0.560404658317566,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.0374716036021709,0.192808955907822,0.98052054643631,-0.451660662889481,0.11085283011198,0.88527637720108,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.929433286190033,0.240452021360397,0.27988663315773,-0.919987142086029,0.260143458843231,0.293170690536499,-0.92679888010025,0.171274200081825,0.334228843450546,-0.920456767082214,0.196246728301048,0.338003754615784,-0.938261330127716,0.284641981124878,0.196582421660423,-0.930616736412048,0.324010014533997,0.170205876231194,-0.912839949131012,0.366738528013229,0.179516360163689,-0.921404659748077,0.300344526767731,0.246589884161949,-0.930616736412048,0.324010014533997,0.170205876231194,-0.938261330127716,0.284641981124878,0.196582421660423,-0.929433286190033,0.240452021360397,0.27988663315773,-0.920456767082214,0.196246728301048,0.338003754615784,-0.187731966376305,-0.0942238569259644,0.977690398693085,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0110307689756155,-0.0793537572026253,0.996785461902618,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.0569505728781223,-0.381698995828629,0.922530472278595, -0.251352518796921,-0.520119905471802,0.816270291805267,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.482243537902832,-0.699907302856445,0.526849985122681,-0.313734799623489,-0.862539172172546,0.396984457969666,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.382226258516312,-0.867592990398407,0.31809663772583,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.374559938907623,-0.262731373310089,0.889200270175934,-0.381201595067978,-0.312435179948807,0.870097458362579,-0.237282007932663,-0.615076303482056,0.751916527748108,-0.0569505728781223,-0.381698995828629,0.922530472278595,-0.1817886531353,-0.326981544494629,0.927381277084351,-0.251352518796921,-0.520119905471802,0.816270291805267,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.611212015151978,0.257414042949677,0.74843692779541,-0.444255501031876,0.0529395937919617,0.894334673881531,-0.296231538057327,-0.0182613059878349,0.95494157075882,-0.447645485401154,0.239924728870392,0.861423015594482,-0.611212015151978,0.257414042949677,0.74843692779541,-0.447645485401154,0.239924728870392,0.861423015594482,-0.438263714313507,0.241573825478554,0.865775406360626,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.281328231096268,0.118911549448967,0.952215552330017,-0.438263714313507,0.241573825478554,0.865775406360626,-0.462802797555923,0.335958212614059,0.820332646369934,-0.389257401227951,0.367899239063263,0.844469547271729,-0.365840524435043,0.0561637468636036,0.928981363773346, -0.316211640834808,-0.127585977315903,0.94007021188736,-0.281328231096268,0.118911549448967,0.952215552330017,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.126811400055885,-0.181621968746185,0.975157618522644,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.395585596561432,-0.109408371150494,0.911889135837555,-0.0849227532744408,-0.304428428411484,0.948742032051086,-0.0424226783216,0.296286582946777,0.954156458377838,-0.284841567277908,0.292440235614777,0.912876784801483,-0.401081025600433,-0.243629589676857,0.883050739765167,-0.00044033964513801,0.857838094234467,0.51391988992691,-0.284841567277908,0.292440235614777,0.912876784801483,-0.0424226783216,0.296286582946777,0.954156458377838,0.0171615201979876,0.876817524433136,0.480516880750656,-0.00044033964513801,0.857838094234467,0.51391988992691,0.0171615201979876,0.876817524433136,0.480516880750656,-0.004028111230582,0.993554711341858,-0.113281942903996,0.225808262825012,0.957561135292053,-0.179129242897034,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.473101943731308,-0.0187131706625223,0.88080894947052,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.365840524435043,0.0561637468636036,0.928981363773346,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.316211640834808,-0.127585977315903,0.94007021188736,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.665225088596344,-0.442761093378067,0.601197302341461,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.602755010128021,-0.2416090965271,0.760467886924744, -0.623706221580505,-0.429783433675766,0.652898728847504,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.559306979179382,-0.466573625802994,0.685189545154572,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.538346290588379,-0.311954945325851,0.782858490943909,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.797025501728058,-0.136790543794632,0.588250517845154,-0.785227119922638,-0.253755480051041,0.564824342727661,-0.918760776519775,0.045384906232357,0.392197400331497,-0.896919310092926,-0.0747082084417343,0.435837626457214,-0.873239040374756,-0.0713295936584473,0.482043266296387,-0.857923269271851,-0.161368548870087,0.487778455018997,-0.951293051242828,0.220237165689468,0.215724766254425,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.938549876213074,0.168846443295479,0.301023334264755,-0.917095720767975,0.0718847438693047,0.392132639884949,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.968760967254639,-0.0961536914110184,0.228597268462181,-0.989431083202362,0.138839796185493,-0.0418281517922878,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994882166385651,0.0616574659943581,0.0800485610961914,-0.6051185131073,0.474284201860428,0.639441967010498,-0.854055345058441,0.17005829513073,0.4915991127491,-0.800284266471863,0.299557894468308,0.519432485103607,-0.694730341434479,0.390507906675339,0.604030907154083,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,0.103844970464706,0.731326162815094,0.674075841903687,0.103844970464706,0.731326162815094,0.674075841903687,0.0662719309329987,0.700039923191071,0.711021840572357,0.0294170621782541,0.161411821842194,0.986448585987091, 0.116292431950569,0.478548794984818,0.870325863361359,-0.694730341434479,0.390507906675339,0.604030907154083,-0.800284266471863,0.299557894468308,0.519432485103607,-0.767612516880035,0.418656378984451,0.485281258821487,-0.749469220638275,0.428192466497421,0.504922866821289,-0.11088390648365,0.737395942211151,0.666297197341919,-0.012057981453836,0.63969749212265,0.76853221654892,0.103844970464706,0.731326162815094,0.674075841903687,-0.204512879252434,0.857547581195831,0.472002804279327,-0.476352840662003,0.646627724170685,0.595785677433014,-0.452526926994324,0.608857274055481,0.651546001434326,-0.156580075621605,0.884556114673615,0.439366787672043,-0.204512879252434,0.857547581195831,0.472002804279327,-0.219483211636543,0.80230712890625,0.55509489774704,-0.6051185131073,0.474284201860428,0.639441967010498,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498,-0.314458668231964,0.629549622535706,0.710480868816376,-0.599762678146362,0.237867310643196,0.764005124568939,-0.11088390648365,0.737395942211151,0.666297197341919,-0.314458668231964,0.629549622535706,0.710480868816376,-0.219483211636543,0.80230712890625,0.55509489774704,-0.142908409237862,0.800538897514343,0.581991970539093,-0.142908409237862,0.800538897514343,0.581991970539093,-0.147507503628731,0.729519248008728,0.667864620685577,-0.012057981453836,0.63969749212265,0.76853221654892,-0.11088390648365,0.737395942211151,0.666297197341919,-0.164747953414917,-0.0155069231987,0.986213803291321,-0.256247758865356,0.183180019259453,0.94909542798996,-0.0183928888291121,0.5789715051651,0.815140306949615,0.116292431950569,0.478548794984818,0.870325863361359,-0.0183928888291121,0.5789715051651,0.815140306949615,-0.256247758865356,0.183180019259453,0.94909542798996,-0.599762678146362,0.237867310643196,0.764005124568939,-0.314458668231964,0.629549622535706,0.710480868816376,-0.854055345058441,0.17005829513073,0.4915991127491,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.783675134181976,0.0171119719743729,0.620935142040253, -0.946490168571472,0.0598345808684826,0.317137449979782,-0.6051185131073,0.474284201860428,0.639441967010498,-0.599762678146362,0.237867310643196,0.764005124568939,-0.708063185214996,0.0871675312519073,0.700748383998871,-0.854055345058441,0.17005829513073,0.4915991127491,0.103844970464706,0.731326162815094,0.674075841903687,-0.012057981453836,0.63969749212265,0.76853221654892,0.0579896494746208,0.56835275888443,0.820738911628723,0.0662719309329987,0.700039923191071,0.711021840572357,0.103844970464706,0.731326162815094,0.674075841903687,-0.0183928888291121,0.5789715051651,0.815140306949615,-0.314458668231964,0.629549622535706,0.710480868816376,-0.11088390648365,0.737395942211151,0.666297197341919,-0.6051185131073,0.474284201860428,0.639441967010498,-0.219483211636543,0.80230712890625,0.55509489774704,-0.314458668231964,0.629549622535706,0.710480868816376,-0.58455902338028,0.465762704610825,0.664346158504486,-0.452526926994324,0.608857274055481,0.651546001434326,-0.476352840662003,0.646627724170685,0.595785677433014,-0.6051185131073,0.474284201860428,0.639441967010498,-0.694730341434479,0.390507906675339,0.604030907154083,-0.58455902338028,0.465762704610825,0.664346158504486,-0.476352840662003,0.646627724170685,0.595785677433014,-0.58455902338028,0.465762704610825,0.664346158504486,-0.617127954959869,0.561533391475677,0.551210701465607,-0.448102563619614,0.672870218753815,0.588599801063538,-0.452526926994324,0.608857274055481,0.651546001434326,-0.250480443239212,-0.173854321241379,0.952383458614349,-0.164747953414917,-0.0155069231987,0.986213803291321,0.116292431950569,0.478548794984818,0.870325863361359,0.0294170621782541,0.161411821842194,0.986448585987091,-0.250480443239212,-0.173854321241379,0.952383458614349,0.0294170621782541,0.161411821842194,0.986448585987091,-0.000449120096163824,-0.222807794809341,0.974862277507782,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.939923703670502,0.145416438579559,-0.308864831924438, -0.962794303894043,0.225805953145027,-0.148454576730728,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.750347912311554,0.23514324426651,-0.617807149887085,-0.588195145130157,0.405691057443619,-0.699600756168365,-0.387834370136261,0.406677484512329,-0.827162563800812,-0.257477760314941,0.382379919290543,-0.887406766414642,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.456911891698837,0.255145311355591,-0.852134048938751,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.296208798885345,0.254752188920975,-0.920522511005402,-0.257477760314941,0.382379919290543,-0.887406766414642,0.0148119395598769,0.396181702613831,-0.918052673339844,-0.127526223659515,0.388497859239578,-0.912582278251648,-0.0627769380807877,0.434968650341034,-0.898254573345184,0.012098491191864,0.36400181055069,-0.931319653987885,0.000681107048876584,0.225692093372345,-0.974198460578918,0.012098491191864,0.36400181055069,-0.931319653987885,-0.0627769380807877,0.434968650341034,-0.898254573345184,-0.982630908489227,0.117604449391365,0.143546640872955,-0.973341524600983,0.209714606404305,-0.0928762331604958, -0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.837151050567627,0.303785771131516,-0.454854130744934,-0.939923703670502,0.145416438579559,-0.308864831924438,-0.996462404727936,0.0726892575621605,-0.0421773195266724,-0.973341524600983,0.209714606404305,-0.0928762331604958,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.00121181993745267,0.232196122407913,-0.9726682305336,-0.00138723512645811,0.200112879276276,-0.979771912097931,-0.172267556190491,0.224487066268921,-0.959129512310028,-0.127526223659515,0.388497859239578,-0.912582278251648,0.0148119395598769,0.396181702613831,-0.918052673339844,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.80251806974411,0.311771512031555,-0.508687853813171,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.931051731109619,0.363819122314453,0.027898857370019,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.854649007320404,0.375557482242584,-0.358513176441193,-0.808901607990265,0.421495854854584,-0.409901708364487,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.808901607990265,0.421495854854584,-0.409901708364487, -0.80251806974411,0.311771512031555,-0.508687853813171,-0.49577060341835,0.312520623207092,-0.810272991657257,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.562859117984772,0.4129618704319,-0.715997278690338,-0.496117979288101,0.475835919380188,-0.726255536079407,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.242920428514481,0.314263701438904,-0.917729794979095,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.1575877815485,0.232581928372383,-0.959724843502045,-0.127602562308311,0.294543892145157,-0.947080492973328,-0.241452381014824,0.395862460136414,-0.885998725891113,-0.293546974658966,0.266818583011627,-0.917953193187714,-0.989446640014648,-0.00150133995339274,0.144889995455742,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.939561665058136,0.24427318572998,0.239905118942261,-0.960240244865417,0.158970504999161,0.229493051767349,-0.844134092330933,0.36929926276207,0.388658910989761,-0.960240244865417,0.158970504999161,0.229493051767349,-0.939561665058136,0.24427318572998,0.239905118942261,-0.856849551200867,0.411835759878159,0.310161501169205,-0.931051731109619,0.363819122314453,0.027898857370019,-0.856849551200867,0.411835759878159,0.310161501169205,-0.939561665058136,0.24427318572998,0.239905118942261,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.962794303894043,0.225805953145027,-0.148454576730728,-0.940674006938934,0.339310526847839,0.000872477365192026,-0.939561665058136,0.24427318572998,0.239905118942261,-0.996125161647797,0.0665269121527672,0.0575226061046124,-0.195909768342972,0.965728640556335,-0.170257449150085,0.695661246776581,0.682053446769714,-0.225518316030502,0.590233266353607,0.805784702301025,0.0483287125825882,-0.363503694534302,0.891945838928223,0.26888245344162, -0.195909768342972,0.965728640556335,-0.170257449150085,-0.363503694534302,0.891945838928223,0.26888245344162,-0.907475471496582,0.340031713247299,0.246711865067482,-0.927974164485931,0.372219532728195,-0.0177929922938347,0.695661246776581,0.682053446769714,-0.225518316030502,0.699705183506012,0.427644014358521,-0.572305202484131,0.904918491840363,0.223670721054077,-0.362068980932236,0.912925958633423,0.3648841381073,-0.182827115058899,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997999429702759,-0.00234658480621874,-0.0631792545318604,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.482406258583069,0.640618324279785,0.597404718399048,0.300904870033264,0.919037222862244,0.254611104726791,0.821504950523376,0.569011390209198,0.0368196852505207,0.517754137516022,0.73391991853714,0.439650118350983,0.545511066913605,0.803328096866608,0.238917589187622,0.517754137516022,0.73391991853714,0.439650118350983,0.821504950523376,0.569011390209198,0.0368196852505207,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607,0.805784702301025,0.0483287125825882,0.855710446834564,0.513507485389709,-0.0637943744659424,0.821504950523376,0.569011390209198,0.0368196852505207,0.300904870033264,0.919037222862244,0.254611104726791,0.912925958633423,0.3648841381073,-0.182827115058899,0.61859929561615,0.783204674720764,-0.0626528933644295,0.545511066913605,0.803328096866608,0.238917589187622,0.855710446834564,0.513507485389709,-0.0637943744659424,0.912925958633423,0.3648841381073,-0.182827115058899,0.855710446834564,0.513507485389709,-0.0637943744659424,0.590233266353607,0.805784702301025,0.0483287125825882,0.695661246776581,0.682053446769714,-0.225518316030502,-0.363503694534302,0.891945838928223,0.26888245344162, 0.300904870033264,0.919037222862244,0.254611104726791,-0.482406258583069,0.640618324279785,0.597404718399048,-0.907475471496582,0.340031713247299,0.246711865067482,0.590233266353607,0.805784702301025,0.0483287125825882,0.300904870033264,0.919037222862244,0.254611104726791,-0.363503694534302,0.891945838928223,0.26888245344162,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,0.695661246776581,0.682053446769714,-0.225518316030502,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.195909768342972,0.965728640556335,-0.170257449150085,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.993082284927368,0.103076130151749,0.0562400594353676,-0.999242901802063,0.033017348498106,-0.020579107105732,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.927974164485931,0.372219532728195,-0.0177929922938347,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.99766343832016,-0.0678676217794418,-0.00785017758607864,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.933456838130951,-0.0391703061759472,-0.356544464826584,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.933456838130951,-0.0391703061759472,-0.356544464826584, -0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.987662672996521,-0.0305646266788244,-0.153584524989128,-0.908903479576111,0.0964279100298882,-0.405704379081726,-0.86995929479599,-0.0271206852048635,-0.492377251386642,-0.966982245445251,-0.0721902102231979,-0.24440510571003,-0.937249541282654,0.196521490812302,-0.28799757361412,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.189944684505463,0.677020668983459,-0.711030244827271,0.699705183506012,0.427644014358521,-0.572305202484131,-0.189944684505463,0.677020668983459,-0.711030244827271,-0.21810856461525,0.364344894886017,-0.905362606048584,0.486043959856033,0.298038214445114,-0.821543991565704,0.426036864519119,0.191680565476418,-0.884166955947876,0.486043959856033,0.298038214445114,-0.821543991565704,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.21810856461525,0.364344894886017,-0.905362606048584,-0.816640257835388,0.191052094101906,-0.544607877731323,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.292363196611404,0.000483309850096703,-0.956307232379913,-0.250867486000061,0.201503813266754,-0.946816623210907,0.426036864519119,0.191680565476418,-0.884166955947876,-0.250867486000061,0.201503813266754,-0.946816623210907,-0.292363196611404,0.000483309850096703,-0.956307232379913,0.409033417701721,0.056328222155571,-0.910779237747192,0.482761442661285,-0.152583673596382,-0.862357020378113,0.409033417701721,0.056328222155571,-0.910779237747192,-0.292363196611404,0.000483309850096703,-0.956307232379913,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.292363196611404,0.000483309850096703,-0.956307232379913, -0.846078813076019,-0.0403724387288094,-0.531526803970337,0.652852118015289,-0.584342896938324,-0.482003599405289,0.664769351482391,-0.462521582841873,-0.586647689342499,0.527362644672394,-0.438462257385254,-0.72776335477829,0.496177941560745,-0.590101897716522,-0.636857271194458,0.614885807037354,-0.39096936583519,-0.684878408908844,0.725502192974091,-0.203444570302963,-0.657462477684021,0.527362644672394,-0.438462257385254,-0.72776335477829,0.664769351482391,-0.462521582841873,-0.586647689342499,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.818911194801331,0.102228388190269,-0.564742267131805,-0.997772693634033,-0.0664616152644157,0.00569661194458604,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.846078813076019,-0.0403724387288094,-0.531526803970337,-0.996078908443451,-0.0863966718316078,-0.0190386082977057,-0.997032284736633,-0.0711089670658112,-0.0294978637248278,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.294507533311844,-0.613352715969086,-0.73284637928009,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.872599542140961,-0.185326799750328,-0.451911568641663,-0.878421425819397,-0.363578677177429,-0.310139209032059,0.725502192974091,-0.203444570302963,-0.657462477684021,0.482761442661285,-0.152583673596382,-0.862357020378113,-0.269831538200378,-0.272859454154968,-0.923438489437103,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394,-0.438462257385254,-0.72776335477829,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.367999702692032,-0.664126336574554,-0.650778293609619,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.367999702692032,-0.664126336574554,-0.650778293609619,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.878421425819397,-0.363578677177429,-0.310139209032059,-0.304955780506134,-0.78030651807785,-0.546007096767426,-0.294507533311844,-0.613352715969086,-0.73284637928009,0.527362644672394,-0.438462257385254,-0.72776335477829,-0.294507533311844,-0.613352715969086,-0.73284637928009, -0.304955780506134,-0.78030651807785,-0.546007096767426,0.496177941560745,-0.590101897716522,-0.636857271194458,-0.933935105800629,0.157070308923721,0.321082711219788,-0.90123462677002,0.253379285335541,0.351532429456711,-0.914615273475647,0.203247100114822,0.349527567625046,-0.156580075621605,0.884556114673615,0.439366787672043,-0.0257334969937801,0.934201776981354,0.355815708637238,-0.109931223094463,0.875869393348694,0.469859391450882,-0.204512879252434,0.857547581195831,0.472002804279327,-0.389257401227951,0.367899239063263,0.844469547271729,-0.158640176057816,0.0965946391224861,0.982600033283234,-0.176067680120468,0.0148913562297821,0.984265387058258,-0.281328231096268,0.118911549448967,0.952215552330017,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.105134896934032,-0.328432708978653,0.938657879829407,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.447645485401154,0.239924728870392,0.861423015594482,-0.383932620286942,0.132088497281075,0.913864493370056,-0.462802797555923,0.335958212614059,0.820332646369934,-0.438263714313507,0.241573825478554,0.865775406360626,-0.82659912109375,0.121020883321762,0.549625158309937,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.66099351644516,-0.00236556818708777,0.750387847423553,-0.704894602298737,0.389235317707062,0.592975080013275,-0.736577808856964,0.297644317150116,0.607339262962341,-0.808332681655884,0.323168575763702,0.49209788441658,-0.999919414520264,0.000697914510965347,-0.012677663937211,-0.982630908489227,0.117604449391365,0.143546640872955,-0.980100452899933,0.0712500065565109,0.185274243354797,-0.996856987476349,0.0654792115092278,0.0445937626063824,-0.767612516880035,0.418656378984451,0.485281258821487,-0.800284266471863,0.299557894468308,0.519432485103607,-0.910772800445557,0.214318007230759,0.352931588888168,-0.844134092330933,0.36929926276207,0.388658910989761,-0.800284266471863,0.299557894468308,0.519432485103607,-0.854055345058441,0.17005829513073,0.4915991127491,-0.946490168571472,0.0598345808684826,0.317137449979782, -0.910772800445557,0.214318007230759,0.352931588888168,-0.58455902338028,0.465762704610825,0.664346158504486,-0.694730341434479,0.390507906675339,0.604030907154083,-0.749469220638275,0.428192466497421,0.504922866821289,-0.617127954959869,0.561533391475677,0.551210701465607,-0.51600193977356,0.0798369869589806,0.852858781814575,-0.573864758014679,0.230327397584915,0.785893499851227,-0.749491930007935,-0.0978431180119514,0.654743134975433,-0.602755010128021,-0.2416090965271,0.760467886924744,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.918955624103546,-0.301046788692474,0.254737854003906,-0.87983900308609,0.0556478500366211,0.47200283408165,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.941886365413666,-0.24503418803215,0.229800596833229,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.841734766960144,0.21214547753334,0.496464431285858,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.95811140537262,-0.0200627520680428,0.285692185163498,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.180914804339409,-0.246753722429276,0.952041208744049,-0.305121660232544,-0.789030134677887,0.533228099346161,-0.173821628093719,-0.808952331542969,0.561588943004608,-0.496900916099548,0.22183683514595,0.838974297046661,-0.459187179803848,0.12899711728096,0.878923714160919,-0.444485455751419,0.263989001512527,0.856003820896149,-0.506407201290131,0.224265813827515,0.832620322704315,-0.409960985183716,0.234984055161476,0.881314098834991,-0.427875101566315,0.308164179325104,0.849680960178375,-0.496900916099548,0.22183683514595,0.838974297046661,-0.506407201290131,0.224265813827515,0.832620322704315,-0.451172351837158,0.441036701202393,0.775841593742371,-0.489892512559891,0.122311964631081,0.863159954547882,-0.314933896064758,-0.0157290305942297,0.948983252048492,-0.265877991914749,0.261434108018875,0.927879869937897,-0.451172351837158,0.441036701202393,0.775841593742371,-0.265877991914749,0.261434108018875,0.927879869937897, -0.296029925346375,0.469678968191147,0.831725895404816,-0.431310623884201,0.54215931892395,0.721134126186371,-0.309603661298752,-0.439581990242004,0.843156754970551,-0.0848771035671234,-0.827450573444366,0.55508691072464,-0.170729905366898,-0.910779476165771,0.375941574573517,-0.284212023019791,-0.62719339132309,0.725156545639038,-0.522650301456451,0.406982094049454,-0.749134302139282,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.884765982627869,0.444219619035721,-0.140918776392937,-0.600471079349518,0.626567959785461,-0.496837079524994,-0.840847790241241,0.534673869609833,0.0842547118663788,-0.881412923336029,0.0769286975264549,0.466039925813675,-0.690247058868408,0.178245946764946,0.701275527477264,-0.72613924741745,0.535442233085632,0.431304275989532,-0.684539437294006,0.44213280081749,0.57958984375,-0.746036350727081,0.393973112106323,0.536856591701508,-0.773442804813385,0.436002254486084,0.460096001625061,-0.7086301445961,0.50186014175415,0.495963364839554,-0.684539437294006,0.44213280081749,0.57958984375,-0.649461984634399,0.424084842205048,0.631150722503662,-0.704894602298737,0.389235317707062,0.592975080013275,-0.746036350727081,0.393973112106323,0.536856591701508,-0.808332681655884,0.323168575763702,0.49209788441658,-0.859274387359619,0.29542076587677,0.417581170797348,-0.773442804813385,0.436002254486084,0.460096001625061,-0.746036350727081,0.393973112106323,0.536856591701508,-0.764328002929688,0.478488236665726,0.432263433933258,-0.7086301445961,0.50186014175415,0.495963364839554,-0.776160657405853,0.480935424566269,0.407769232988358,-0.709937155246735,0.54696124792099,0.443646997213364,-0.594367325305939,0.527927815914154,0.606646299362183,-0.764328002929688,0.478488236665726,0.432263433933258,-0.709937155246735,0.54696124792099,0.443646997213364,-0.487235128879547,0.602307498455048,0.632319211959839,-0.16526772081852,0.578359544277191,0.798865914344788,-0.594367325305939,0.527927815914154,0.606646299362183,-0.487235128879547,0.602307498455048,0.632319211959839,-0.148301675915718,0.617360651493073,0.772575199604034, 0.0581676289439201,0.571192860603333,0.818752288818359,-0.16526772081852,0.578359544277191,0.798865914344788,-0.148301675915718,0.617360651493073,0.772575199604034,0.0604556538164616,0.606487095355988,0.792791604995728,-0.960677444934845,-0.0662661194801331,0.269643515348434,-0.993900120258331,-0.00187443883623928,0.110267803072929,-0.994474828243256,0.0728728324174881,0.0755601078271866,-0.978295981884003,0.0417908765375614,0.202954426407814,-0.8117955327034,0.118040002882481,0.571886837482452,-0.525420844554901,-0.165615484118462,0.834568381309509,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.739963114261627,0.167704880237579,0.651405930519104,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.617321014404297,0.0253577381372452,0.78630256652832,-0.490864455699921,-0.0663091167807579,0.868708908557892,-0.463877707719803,-0.190486788749695,0.865177571773529,-0.42745703458786,-0.154648303985596,0.890710055828094,-0.314864873886108,-0.263603270053864,0.911796808242798,-0.405952632427216,-0.25302666425705,0.878168523311615,-0.251964539289474,0.00403303280472755,0.967728078365326,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.0580175220966339,-0.274829417467117,0.959740996360779,-0.0213382132351398,-0.34595787525177,0.938007354736328,-0.308251351118088,0.00680266646668315,0.951280653476715,-0.407193839550018,-0.126338601112366,0.904561638832092,-0.0252015665173531,-0.364970922470093,0.930677771568298,-0.305669218301773,-0.129191845655441,0.943332314491272,-0.662640571594238,-0.0052980799227953,0.748918831348419,-0.849758863449097,0.226472169160843,0.476046502590179,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.611043751239777,-0.00789655186235905,0.791557371616364,-0.849758863449097,0.226472169160843,0.476046502590179,-0.81624835729599,0.569451749324799,-0.0972798392176628,-0.847808718681335,0.127517849206924,0.514742314815521,-0.328838348388672,0.935817182064056,0.126931354403496, 0.279289931058884,0.161584615707397,0.94651335477829,-0.124414332211018,0.380547553300858,0.91635400056839,-0.630214631557465,0.655408442020416,0.416256308555603,-0.135216936469078,-0.381399750709534,0.914467394351959,-0.124414332211018,0.380547553300858,0.91635400056839,0.279289931058884,0.161584615707397,0.94651335477829,-0.377197057008743,-0.298063486814499,0.876858353614807,-0.53056800365448,-0.207617223262787,0.821822762489319,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.28600937128067,-0.592511594295502,0.753079414367676,0.0128951743245125,-0.862936913967133,0.505147039890289,-0.174236983060837,-0.833520114421844,0.524295389652252,-0.406814515590668,-0.530913829803467,0.743392527103424,-0.329664051532745,-0.557146191596985,0.762174308300018,-0.188662573695183,-0.633236289024353,0.750611901283264,-0.280322819948196,-0.610130190849304,0.741053521633148,-0.23735885322094,-0.585129797458649,0.775424957275391,-0.218783125281334,-0.517780601978302,0.827065408229828,0.138299137353897,-0.216322302818298,0.966477155685425,0.028565090149641,-0.175006538629532,0.984152793884277,0.0824021622538567,0.119332544505596,0.98942893743515,0.0996207222342491,0.155612200498581,0.982782065868378,-0.0433456413447857,-0.716439366340637,0.696301460266113,0.152057304978371,-0.511582612991333,0.845672428607941,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.59464293718338,-0.168359830975533,0.786164581775665,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.619005084037781,0.113047316670418,0.777208507061005,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.604022920131683,-0.106749713420868,0.789785325527191,-0.56518691778183,0.0673309490084648,0.822210609912872,-0.619005084037781,0.113047316670418,0.777208507061005,-0.498029559850693,0.248690649867058,0.830734312534332,-0.261222988367081,0.14337170124054,0.954571664333344,-0.245125457644463,0.30829644203186,0.919166386127472,-0.484222084283829,0.366713851690292,0.794386506080627,-0.728943645954132,0.505101680755615,0.462075144052505,-0.761701762676239,0.421244710683823,0.492304056882858, -0.673884630203247,0.467902958393097,0.571792244911194,-0.671048521995544,0.370010554790497,0.642484307289124,-0.655175447463989,0.41560024023056,0.630889534950256,-0.788007020950317,-0.198835611343384,0.582674324512482,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.623706221580505,-0.429783433675766,0.652898728847504,-0.670063674449921,0.104801684617996,0.734868168830872,-0.483639568090439,-0.0787182152271271,0.871720254421234,-0.417269796133041,-0.358331203460693,0.835155487060547,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.749392926692963,-0.121673375368118,0.650850057601929,-0.739276468753815,0.150933310389519,0.656269311904907,-0.670063674449921,0.104801684617996,0.734868168830872,-0.554198384284973,-0.301848381757736,0.775726556777954,-0.947903215885162,-0.069373294711113,0.310912847518921,-0.948079526424408,-0.0349823534488678,0.316103518009186,-0.935528755187988,-0.0541915111243725,0.349069029092789,-0.00827599223703146,-0.428946763277054,0.903291881084442,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.0569505728781223,-0.381698995828629,0.922530472278595,0.033345639705658,-0.401991754770279,0.915035903453827,-0.426155984401703,-0.544485569000244,0.722444832324982,-0.393669724464417,-0.396909922361374,0.829148173332214,-0.0110307689756155,-0.0793537572026253,0.996785461902618,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.426155984401703,-0.544485569000244,0.722444832324982,0.0270153284072876,-0.276360064744949,0.960674405097961,-0.865811467170715,0.0343829169869423,0.499187588691711,-0.782657444477081,0.380464553833008,0.4926398396492,-0.575338959693909,0.442981451749802,0.687570035457611,-0.664805889129639,0.056874256581068,0.74484795331955,0.0440349131822586,-0.167181059718132,0.984942317008972,-0.100514478981495,0.314375013113022,0.943962454795837,-0.144208893179893,0.115719296038151,0.982757806777954, -0.880486667156219,-0.258835464715958,-0.397174298763275,-0.976188123226166,-0.133096665143967,-0.171295195817947,-0.841533124446869,0.268320113420486,-0.468856424093246,-0.934884548187256,0.137223497033119,-0.327353954315186,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.0115164406597614,-0.997357308864594,0.0717345252633095,0.315651625394821,-0.933804154396057,0.168445229530334,-0.575954735279083,-0.540566444396973,0.613240599632263,-0.816609680652618,-0.561123669147491,0.135236501693726,-0.0942904129624367,-0.823370099067688,-0.55961686372757,-0.366043508052826,-0.907773017883301,-0.204842254519463,-0.0115164406597614,-0.997357308864594,0.0717345252633095,-0.628413081169128,-0.649794220924377,0.427626639604568,-0.451660662889481,0.11085283011198,0.88527637720108,-0.38422480225563,0.137366592884064,0.912963151931763,-0.215113177895546,0.235299572348595,0.947818756103516,-0.110501579940319,0.212603434920311,0.970870316028595,-0.354619354009628,-0.125306099653244,0.926576197147369,-0.490771174430847,0.254273563623428,0.833359837532043,-0.330226361751556,0.315774649381638,0.889514982700348,-0.231002777814865,-0.0802000537514687,0.969642043113709,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.551566660404205,0.823827803134918,-0.13069823384285,-0.152414619922638,0.895912230014801,-0.417266219854355,-0.134053289890289,0.873388648033142,-0.468211501836777,-0.152414619922638,0.895912230014801,-0.417266219854355,0.461978673934937,0.681396842002869,-0.567691802978516,-0.999627530574799,0.0187976788729429,-0.0197845976799726,-0.998881757259369,0.0267399735748768,-0.0389897488057613,-0.998166382312775,0.0398845337331295,0.0455306805670261,-0.999442994594574,0.0280166734009981,0.0181336086243391,-0.127602562308311,0.294543892145157,-0.947080492973328,0.002942921128124,0.253444164991379,-0.967345535755157,-0.00542618287727237,0.149814411997795,-0.98869925737381,-0.119406081736088,0.202409043908119,-0.97199422121048,-0.0685182884335518,0.227593377232552,-0.971342623233795,-0.178532913327217,0.211587846279144,-0.960914433002472, -0.156535282731056,0.121644385159016,-0.980152726173401,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.109931223094463,0.875869393348694,0.469859391450882,-0.147507503628731,0.729519248008728,0.667864620685577,-0.142908409237862,0.800538897514343,0.581991970539093,-0.204512879252434,0.857547581195831,0.472002804279327,-0.109931223094463,0.875869393348694,0.469859391450882,-0.142908409237862,0.800538897514343,0.581991970539093,-0.219483211636543,0.80230712890625,0.55509489774704,-0.00827599223703146,-0.428946763277054,0.903291881084442,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.403298109769821,-0.683849096298218,0.608030438423157,-0.30313828587532,-0.739410519599915,0.601148247718811,-0.0295225456357002,-0.382050126791,0.923669934272766,-0.0656469166278839,-0.584858000278473,0.808474898338318,-0.129767522215843,-0.742323935031891,0.657354950904846,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.482923626899719,-0.587090194225311,0.649699866771698,-0.455979406833649,-0.609841763973236,0.648209691047668,-0.446160137653351,-0.556800782680511,0.700652599334717,0.912925958633423,0.3648841381073,-0.182827115058899,0.904918491840363,0.223670721054077,-0.362068980932236,0.636519849300385,0.647450149059296,-0.419107168912888,0.61859929561615,0.783204674720764,-0.0626528933644295,0.673712253570557,-0.610602140426636,-0.416265428066254,0.593445479869843,-0.55176454782486,-0.585984945297241,0.853590905666351,0.0963327810168266,-0.511959493160248,0.936679661273956,0.0184381268918514,-0.349701732397079,0.65024209022522,-0.683634519577026,-0.331404685974121,0.626364231109619,-0.75530606508255,-0.192822501063347,0.773029983043671,-0.340951681137085,-0.534954726696014,0.699126958847046,-0.0890455171465874,-0.709431052207947,0.591210007667542,0.268222451210022,-0.760609924793243,0.633826375007629,0.136593535542488,-0.761318802833557,0.880469501018524,0.252094835042953,-0.401524186134338,0.782209396362305,0.460544377565384,-0.419579923152924, 0.594776809215546,0.323577910661697,-0.735892593860626,0.889407336711884,0.240895375609398,-0.388489335775375,0.880469501018524,0.252094835042953,-0.401524186134338,0.633826375007629,0.136593535542488,-0.761318802833557,0.97625857591629,0.21655336022377,-0.00488529354333878,0.934138953685761,0.351697504520416,-0.0607721395790577,0.880469501018524,0.252094835042953,-0.401524186134338,0.889407336711884,0.240895375609398,-0.388489335775375,0.860303461551666,0.500444173812866,-0.0971267074346542,0.782209396362305,0.460544377565384,-0.419579923152924,0.880469501018524,0.252094835042953,-0.401524186134338,0.934138953685761,0.351697504520416,-0.0607721395790577,0.591210007667542,0.268222451210022,-0.760609924793243,0.782209396362305,0.460544377565384,-0.419579923152924,0.637716591358185,0.673823416233063,-0.373201817274094,0.476214468479156,0.553961336612701,-0.682895720005035,0.860303461551666,0.500444173812866,-0.0971267074346542,0.719738006591797,0.692870736122131,-0.0436733961105347,0.637716591358185,0.673823416233063,-0.373201817274094,0.782209396362305,0.460544377565384,-0.419579923152924,0.637716591358185,0.673823416233063,-0.373201817274094,0.719738006591797,0.692870736122131,-0.0436733961105347,0.581854581832886,0.813074886798859,0.0188271906226873,0.411318093538284,0.679248511791229,-0.607814848423004,0.476214468479156,0.553961336612701,-0.682895720005035,0.115779966115952,0.184250295162201,-0.976036310195923,0.139773815870285,0.0987650603055954,-0.985245525836945,-0.00773082999512553,0.120841763913631,-0.992641687393188,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.17595848441124,0.184216767549515,-0.967007160186768,0.139773815870285,0.0987650603055954,-0.985245525836945,0.286009520292282,0.0698904916644096,-0.955674588680267,0.311260253190994,0.141205564141274,-0.93977552652359,0.115779966115952,0.184250295162201,-0.976036310195923,0.256779372692108,0.275679916143417,-0.926317930221558,0.286009520292282,0.0698904916644096,-0.955674588680267,0.139773815870285,0.0987650603055954,-0.985245525836945, 0.594776809215546,0.323577910661697,-0.735892593860626,0.633826375007629,0.136593535542488,-0.761318802833557,0.286009520292282,0.0698904916644096,-0.955674588680267,0.256779372692108,0.275679916143417,-0.926317930221558,0.591210007667542,0.268222451210022,-0.760609924793243,0.311260253190994,0.141205564141274,-0.93977552652359,0.286009520292282,0.0698904916644096,-0.955674588680267,0.633826375007629,0.136593535542488,-0.761318802833557,-0.00773082999512553,0.120841763913631,-0.992641687393188,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.280443012714386,0.696482062339783,0.660503208637238,0.259025126695633,0.847382187843323,0.463518500328064,0.283866882324219,0.767588019371033,0.574654817581177,0.564589977264404,0.0705946907401085,-0.822346925735474,0.7000772356987,0.225735083222389,-0.67744779586792,0.484490036964417,0.357505440711975,-0.798410475254059,0.426292926073074,0.0950048267841339,-0.899582326412201,0.857822477817535,0.172914609313011,-0.483984649181366,0.61924135684967,0.312463909387589,-0.72035163640976,0.484490036964417,0.357505440711975,-0.798410475254059,0.7000772356987,0.225735083222389,-0.67744779586792,0.417167514562607,0.344521790742874,-0.840997040271759,0.378902137279511,0.434016942977905,-0.8173508644104,0.484490036964417,0.357505440711975,-0.798410475254059,0.61924135684967,0.312463909387589,-0.72035163640976,0.35312095284462,0.134023457765579,-0.925928354263306,0.426292926073074,0.0950048267841339,-0.899582326412201,0.484490036964417,0.357505440711975,-0.798410475254059,0.378902137279511,0.434016942977905,-0.8173508644104,0.35312095284462,0.134023457765579,-0.925928354263306,0.378902137279511,0.434016942977905,-0.8173508644104,0.256089895963669,0.453810095787048,-0.853507101535797,0.23451641201973,0.162132352590561,-0.958496332168579,0.417167514562607,0.344521790742874,-0.840997040271759,0.282642304897308,0.340673059225082,-0.896691262722015,0.256089895963669,0.453810095787048,-0.853507101535797,0.378902137279511,0.434016942977905,-0.8173508644104, 0.154383972287178,0.366727441549301,-0.917429327964783,0.0980598703026772,0.422548413276672,-0.901020050048828,0.256089895963669,0.453810095787048,-0.853507101535797,0.282642304897308,0.340673059225082,-0.896691262722015,0.000681107048876584,0.225692093372345,-0.974198460578918,0.23451641201973,0.162132352590561,-0.958496332168579,0.256089895963669,0.453810095787048,-0.853507101535797,0.0980598703026772,0.422548413276672,-0.901020050048828,0.138864398002625,0.273968666791916,-0.951660573482513,0.002942921128124,0.253444164991379,-0.967345535755157,0.00121181993745267,0.232196122407913,-0.9726682305336,0.158535957336426,0.208172604441643,-0.96515828371048,0.823107242584229,0.306770831346512,0.477897584438324,0.714458644390106,0.458717465400696,0.528324842453003,0.810526788234711,0.52942031621933,0.250520348548889,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.714458644390106,0.458717465400696,0.528324842453003,0.565896391868591,0.594577431678772,0.571173310279846,0.581854581832886,0.813074886798859,0.0188271906226873,0.719738006591797,0.692870736122131,-0.0436733961105347,0.860303461551666,0.500444173812866,-0.0971267074346542,0.885173201560974,0.411667943000793,0.216789960861206,0.810526788234711,0.52942031621933,0.250520348548889,0.719738006591797,0.692870736122131,-0.0436733961105347,0.903585314750671,0.234351992607117,0.35862609744072,0.838887810707092,0.294615089893341,0.457677990198135,0.894195675849915,0.373524785041809,0.246765822172165,0.919988930225372,0.274642944335938,0.279627621173859,0.823107242584229,0.306770831346512,0.477897584438324,0.885173201560974,0.411667943000793,0.216789960861206,0.894195675849915,0.373524785041809,0.246765822172165,0.838887810707092,0.294615089893341,0.457677990198135,0.860303461551666,0.500444173812866,-0.0971267074346542,0.934138953685761,0.351697504520416,-0.0607721395790577,0.894195675849915,0.373524785041809,0.246765822172165,0.885173201560974,0.411667943000793,0.216789960861206,0.97625857591629,0.21655336022377,-0.00488529354333878, 0.919988930225372,0.274642944335938,0.279627621173859,0.894195675849915,0.373524785041809,0.246765822172165,0.934138953685761,0.351697504520416,-0.0607721395790577,0.981309294700623,-0.093424528837204,-0.168237790465355,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.955751359462738,0.0778623446822166,-0.283684283494949,0.876467704772949,0.014190330170095,-0.48125147819519,0.993362247943878,-0.0349664911627769,0.109584823250771,0.99024760723114,0.0581013411283493,-0.126625210046768,0.955751359462738,0.0778623446822166,-0.283684283494949,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.857822477817535,0.172914609313011,-0.483984649181366,0.7000772356987,0.225735083222389,-0.67744779586792,0.955751359462738,0.0778623446822166,-0.283684283494949,0.99024760723114,0.0581013411283493,-0.126625210046768,0.564589977264404,0.0705946907401085,-0.822346925735474,0.876467704772949,0.014190330170095,-0.48125147819519,0.955751359462738,0.0778623446822166,-0.283684283494949,0.7000772356987,0.225735083222389,-0.67744779586792,0.800951898097992,0.0424955785274506,-0.597218692302704,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.981309294700623,-0.093424528837204,-0.168237790465355,0.876467704772949,0.014190330170095,-0.48125147819519,0.800951898097992,0.0424955785274506,-0.597218692302704,0.876467704772949,0.014190330170095,-0.48125147819519,0.564589977264404,0.0705946907401085,-0.822346925735474,0.572597026824951,0.0432385914027691,-0.818695962429047,0.945727825164795,-0.098081186413765,0.309804677963257,0.944782853126526,0.0188948940485716,0.327151775360107,0.941311419010162,0.140633046627045,0.30684706568718,0.20434632897377,0.515124678611755,0.832399606704712,0.340864300727844,0.524212896823883,0.780392467975616,0.366717875003815,0.635487914085388,0.679465293884277,0.266760617494583,0.623513042926788,0.734894752502441,0.20434632897377,0.515124678611755,0.832399606704712,0.266760617494583,0.623513042926788,0.734894752502441,0.0616534538567066,0.625403761863709,0.777861833572388,0.0543623231351376,0.513473629951477,0.85638165473938, 0.395363062620163,0.562560498714447,0.726094901561737,0.524678170681,0.559116363525391,0.641951441764832,0.547570884227753,0.592168509960175,0.591187477111816,0.448636323213577,0.619527339935303,0.644136130809784,0.395363062620163,0.562560498714447,0.726094901561737,0.448636323213577,0.619527339935303,0.644136130809784,0.366717875003815,0.635487914085388,0.679465293884277,0.340864300727844,0.524212896823883,0.780392467975616,0.440387338399887,0.692013561725616,0.571993172168732,0.374413341283798,0.732271254062653,0.568852782249451,0.366717875003815,0.635487914085388,0.679465293884277,0.448636323213577,0.619527339935303,0.644136130809784,0.547570884227753,0.592168509960175,0.591187477111816,0.440387338399887,0.692013561725616,0.571993172168732,0.448636323213577,0.619527339935303,0.644136130809784,0.943980097770691,0.0651601999998093,0.323505431413651,0.909750938415527,0.190706014633179,0.368760675191879,0.908929646015167,0.18951641023159,0.371389836072922,0.951365828514099,0.00983366928994656,0.30790650844574,0.943980097770691,0.0651601999998093,0.323505431413651,0.951365828514099,0.00983366928994656,0.30790650844574,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.835932672023773,0.318577855825424,0.446905732154846,0.908929646015167,0.18951641023159,0.371389836072922,0.909750938415527,0.190706014633179,0.368760675191879,0.834239661693573,0.322053194046021,0.447577893733978,0.835932672023773,0.318577855825424,0.446905732154846,0.834239661693573,0.322053194046021,0.447577893733978,0.702617406845093,0.468200266361237,0.535833239555359,0.744709670543671,0.422629773616791,0.516518652439117,0.266760617494583,0.623513042926788,0.734894752502441,0.366717875003815,0.635487914085388,0.679465293884277,0.374413341283798,0.732271254062653,0.568852782249451,0.320665568113327,0.737191736698151,0.594745278358459,0.266760617494583,0.623513042926788,0.734894752502441,0.320665568113327,0.737191736698151,0.594745278358459,0.0704773217439651,0.772313952445984,0.631319284439087, 0.0616534538567066,0.625403761863709,0.777861833572388,0.956802248954773,0.196078270673752,0.214668840169907,0.982270240783691,0.0125455530360341,0.187050387263298,0.944782853126526,0.0188948940485716,0.327151775360107,0.966708958148956,-0.002308584516868,0.255868047475815,0.305753350257874,-0.212547421455383,-0.92808324098587,0.310143738985062,-0.212492153048515,-0.926638007164001,0.173930779099464,-0.177192866802216,-0.96868509054184,0.158634498715401,-0.20582041144371,-0.96564644575119,0.31784787774086,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.173930779099464,-0.177192866802216,-0.96868509054184,0.310143738985062,-0.212492153048515,-0.926638007164001,-0.0269717872142792,-0.128648608922958,-0.991323411464691,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.173930779099464,-0.177192866802216,-0.96868509054184,0.191843032836914,-0.158846795558929,-0.968485355377197,-0.0315490290522575,-0.190183460712433,-0.981241524219513,0.158634498715401,-0.20582041144371,-0.96564644575119,0.173930779099464,-0.177192866802216,-0.96868509054184,-0.028486518189311,-0.148915618658066,-0.988439500331879,0.982270240783691,0.0125455530360341,0.187050387263298,0.956802248954773,0.196078270673752,0.214668840169907,0.976279318332672,0.215815082192421,0.0173952374607325,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.995472311973572,0.0944016128778458,0.0111022079363465,0.980593264102936,0.101042859256268,-0.168009653687477,0.952138841152191,0.245724052190781,-0.181800335645676,0.976959228515625,0.212819382548332,-0.0160801913589239,0.927419364452362,0.100383616983891,-0.36030051112175,0.896075665950775,0.270221561193466,-0.352177083492279,0.952138841152191,0.245724052190781,-0.181800335645676,0.980593264102936,0.101042859256268,-0.168009653687477,0.802429139614105,0.495289087295532,-0.332860708236694,0.84548145532608,0.494162082672119,-0.202397987246513,0.952138841152191,0.245724052190781,-0.181800335645676,0.896075665950775,0.270221561193466,-0.352177083492279,0.882022321224213,0.469820559024811,-0.0361285507678986, 0.976959228515625,0.212819382548332,-0.0160801913589239,0.952138841152191,0.245724052190781,-0.181800335645676,0.84548145532608,0.494162082672119,-0.202397987246513,0.803016126155853,0.524560868740082,0.282844364643097,0.919247984886169,0.28292128443718,0.273749440908432,0.903041958808899,0.404765665531158,0.143805220723152,0.758423209190369,0.636332154273987,0.140980765223503,0.803016126155853,0.524560868740082,0.282844364643097,0.758423209190369,0.636332154273987,0.140980765223503,0.592619299888611,0.791549921035767,0.149167820811272,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435,0.51718670129776,0.547570884227753,0.592168509960175,0.591187477111816,0.702617406845093,0.468200266361237,0.535833239555359,0.690945386886597,0.533301711082459,0.488040715456009,0.617453694343567,0.698337316513062,0.362044125795364,0.554235219955444,0.652181923389435,0.51718670129776,0.690945386886597,0.533301711082459,0.488040715456009,0.909750938415527,0.190706014633179,0.368760675191879,0.908561766147614,0.233992353081703,0.346068024635315,0.827282428741455,0.399940013885498,0.394527286291122,0.834239661693573,0.322053194046021,0.447577893733978,0.919247984886169,0.28292128443718,0.273749440908432,0.803016126155853,0.524560868740082,0.282844364643097,0.827282428741455,0.399940013885498,0.394527286291122,0.908561766147614,0.233992353081703,0.346068024635315,0.617453694343567,0.698337316513062,0.362044125795364,0.690945386886597,0.533301711082459,0.488040715456009,0.827282428741455,0.399940013885498,0.394527286291122,0.803016126155853,0.524560868740082,0.282844364643097,0.702617406845093,0.468200266361237,0.535833239555359,0.834239661693573,0.322053194046021,0.447577893733978,0.827282428741455,0.399940013885498,0.394527286291122,0.690945386886597,0.533301711082459,0.488040715456009,0.974952936172485,0.16339498758316,0.150893643498421,0.903041958808899,0.404765665531158,0.143805220723152,0.919247984886169,0.28292128443718,0.273749440908432,0.961383461952209,0.117865592241287,0.248695820569992, 0.961383461952209,0.117865592241287,0.248695820569992,0.919247984886169,0.28292128443718,0.273749440908432,0.94008880853653,0.132723599672318,0.314034193754196,0.974952936172485,0.16339498758316,0.150893643498421,0.961383461952209,0.117865592241287,0.248695820569992,0.954596400260925,0.0140978172421455,0.297568470239639,0.98244035243988,0.067487895488739,0.173943564295769,0.98244035243988,0.067487895488739,0.173943564295769,0.954596400260925,0.0140978172421455,0.297568470239639,0.941569864749908,0.149283602833748,0.301928132772446,0.974337458610535,0.124738365411758,0.187368124723434,0.941569864749908,0.149283602833748,0.301928132772446,0.944782853126526,0.0188948940485716,0.327151775360107,0.982270240783691,0.0125455530360341,0.187050387263298,0.974337458610535,0.124738365411758,0.187368124723434,0.974952936172485,0.16339498758316,0.150893643498421,0.98244035243988,0.067487895488739,0.173943564295769,0.995472311973572,0.0944016128778458,0.0111022079363465,0.976959228515625,0.212819382548332,-0.0160801913589239,0.974952936172485,0.16339498758316,0.150893643498421,0.976959228515625,0.212819382548332,-0.0160801913589239,0.882022321224213,0.469820559024811,-0.0361285507678986,0.903041958808899,0.404765665531158,0.143805220723152,0.995472311973572,0.0944016128778458,0.0111022079363465,0.994647562503815,0.10004199296236,0.0258419681340456,0.983511805534363,0.0664925277233124,-0.168176248669624,0.980593264102936,0.101042859256268,-0.168009653687477,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994647562503815,0.10004199296236,0.0258419681340456,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.974936366081238,0.00979904364794493,-0.222267970442772,0.983511805534363,0.0664925277233124,-0.168176248669624,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.917562901973724,0.0575754530727863,-0.393399685621262,0.983511805534363,0.0664925277233124,-0.168176248669624, 0.974936366081238,0.00979904364794493,-0.222267970442772,0.927419364452362,0.100383616983891,-0.36030051112175,0.980593264102936,0.101042859256268,-0.168009653687477,0.983511805534363,0.0664925277233124,-0.168176248669624,0.917562901973724,0.0575754530727863,-0.393399685621262,0.995472311973572,0.0944016128778458,0.0111022079363465,0.98244035243988,0.067487895488739,0.173943564295769,0.974337458610535,0.124738365411758,0.187368124723434,0.994647562503815,0.10004199296236,0.0258419681340456,0.974337458610535,0.124738365411758,0.187368124723434,0.982270240783691,0.0125455530360341,0.187050387263298,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.994647562503815,0.10004199296236,0.0258419681340456,0.652361810207367,0.183982044458389,-0.735237896442413,0.822571158409119,0.128576725721359,-0.553935706615448,0.826969504356384,0.0367851555347443,-0.561042189598084,0.679547071456909,0.0500539317727089,-0.731922388076782,0.927419364452362,0.100383616983891,-0.36030051112175,0.917562901973724,0.0575754530727863,-0.393399685621262,0.826969504356384,0.0367851555347443,-0.561042189598084,0.822571158409119,0.128576725721359,-0.553935706615448,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.806335091590881,-0.064182311296463,-0.587966322898865,0.826969504356384,0.0367851555347443,-0.561042189598084,0.917562901973724,0.0575754530727863,-0.393399685621262,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.679547071456909,0.0500539317727089,-0.731922388076782,0.826969504356384,0.0367851555347443,-0.561042189598084,0.806335091590881,-0.064182311296463,-0.587966322898865,0.00778961461037397,0.31232625246048,-0.949942946434021,0.150489449501038,0.298117339611053,-0.942591607570648,0.156925246119499,0.156653806567192,-0.975107192993164,-0.00349890603683889,0.173883408308029,-0.984760046005249,0.289862871170044,0.274766653776169,-0.91677850484848,0.317441433668137,0.128782093524933,-0.939492464065552,0.156925246119499,0.156653806567192,-0.975107192993164,0.150489449501038,0.298117339611053,-0.942591607570648, 0.330739557743073,-0.00570091884583235,-0.943704843521118,0.157008796930313,0.0128065068274736,-0.987514197826386,0.156925246119499,0.156653806567192,-0.975107192993164,0.317441433668137,0.128782093524933,-0.939492464065552,-0.0150691494345665,0.027319710701704,-0.999513149261475,-0.00349890603683889,0.173883408308029,-0.984760046005249,0.156925246119499,0.156653806567192,-0.975107192993164,0.157008796930313,0.0128065068274736,-0.987514197826386,0.289862871170044,0.274766653776169,-0.91677850484848,0.150489449501038,0.298117339611053,-0.942591607570648,0.148825243115425,0.473339468240738,-0.868216991424561,0.262024700641632,0.458286553621292,-0.849303483963013,0.00778961461037397,0.31232625246048,-0.949942946434021,0.0223272144794464,0.483893781900406,-0.874841868877411,0.148825243115425,0.473339468240738,-0.868216991424561,0.150489449501038,0.298117339611053,-0.942591607570648,0.0394280813634396,0.674713432788849,-0.737025916576386,0.152186512947083,0.664242565631866,-0.731861352920532,0.148825243115425,0.473339468240738,-0.868216991424561,0.0223272144794464,0.483893781900406,-0.874841868877411,0.241631746292114,0.652338445186615,-0.718379199504852,0.262024700641632,0.458286553621292,-0.849303483963013,0.148825243115425,0.473339468240738,-0.868216991424561,0.152186512947083,0.664242565631866,-0.731861352920532,0.312359720468521,0.949172854423523,-0.0387601368129253,0.299265414476395,0.918772161006927,-0.257483899593353,0.208839908242226,0.94090873003006,-0.266601979732513,0.250509142875671,0.967322170734406,-0.0391524843871593,0.270549148321152,0.870745658874512,-0.410615533590317,0.176319569349289,0.887581884860992,-0.425570040941238,0.208839908242226,0.94090873003006,-0.266601979732513,0.299265414476395,0.918772161006927,-0.257483899593353,0.0622152015566826,0.901260554790497,-0.428787440061569,0.0692925006151199,0.95879065990448,-0.27553403377533,0.208839908242226,0.94090873003006,-0.266601979732513,0.176319569349289,0.887581884860992,-0.425570040941238,0.0761537179350853,0.996121823787689,-0.044066745787859,0.250509142875671,0.967322170734406,-0.0391524843871593, 0.208839908242226,0.94090873003006,-0.266601979732513,0.0692925006151199,0.95879065990448,-0.27553403377533,0.547570884227753,0.592168509960175,0.591187477111816,0.554235219955444,0.652181923389435,0.51718670129776,0.43085303902626,0.76660943031311,0.476104646921158,0.440387338399887,0.692013561725616,0.571993172168732,0.617453694343567,0.698337316513062,0.362044125795364,0.425699532032013,0.838678896427155,0.339702278375626,0.43085303902626,0.76660943031311,0.476104646921158,0.554235219955444,0.652181923389435,0.51718670129776,0.354833543300629,0.872086048126221,0.336985319852829,0.371298015117645,0.806507170200348,0.460091233253479,0.43085303902626,0.76660943031311,0.476104646921158,0.425699532032013,0.838678896427155,0.339702278375626,0.374413341283798,0.732271254062653,0.568852782249451,0.440387338399887,0.692013561725616,0.571993172168732,0.43085303902626,0.76660943031311,0.476104646921158,0.371298015117645,0.806507170200348,0.460091233253479,0.250509142875671,0.967322170734406,-0.0391524843871593,0.0761537179350853,0.996121823787689,-0.044066745787859,0.0787876397371292,0.981232225894928,0.175999522209167,0.280323714017868,0.944564402103424,0.170928910374641,0.250509142875671,0.967322170734406,-0.0391524843871593,0.280323714017868,0.944564402103424,0.170928910374641,0.32793140411377,0.928926110267639,0.171922340989113,0.312359720468521,0.949172854423523,-0.0387601368129253,0.280323714017868,0.944564402103424,0.170928910374641,0.0787876397371292,0.981232225894928,0.175999522209167,0.0780636146664619,0.932616472244263,0.352324455976486,0.311769247055054,0.887734949588776,0.338713079690933,0.280323714017868,0.944564402103424,0.170928910374641,0.311769247055054,0.887734949588776,0.338713079690933,0.354833543300629,0.872086048126221,0.336985319852829,0.32793140411377,0.928926110267639,0.171922340989113,0.572597026824951,0.0432385914027691,-0.818695962429047,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.800951898097992,0.0424955785274506,-0.597218692302704, 0.668470501899719,-0.223753660917282,-0.709282398223877,0.763271033763886,-0.164724439382553,-0.624726474285126,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.903657674789429,-0.181017354130745,-0.38811793923378,0.933521032333374,-0.113554745912552,-0.340064376592636,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.763271033763886,-0.164724439382553,-0.624726474285126,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.800951898097992,0.0424955785274506,-0.597218692302704,0.761432945728302,-0.0285751447081566,-0.64761358499527,0.933521032333374,-0.113554745912552,-0.340064376592636,0.564893007278442,0.823054492473602,-0.0589678697288036,0.717910170555115,0.69438225030899,-0.049378827214241,0.675751328468323,0.703905045986176,-0.218810006976128,0.51955384016037,0.820082247257233,-0.239851862192154,0.882022321224213,0.469820559024811,-0.0361285507678986,0.84548145532608,0.494162082672119,-0.202397987246513,0.675751328468323,0.703905045986176,-0.218810006976128,0.717910170555115,0.69438225030899,-0.049378827214241,0.802429139614105,0.495289087295532,-0.332860708236694,0.643622934818268,0.695999085903168,-0.318331331014633,0.675751328468323,0.703905045986176,-0.218810006976128,0.84548145532608,0.494162082672119,-0.202397987246513,0.468265026807785,0.816386163234711,-0.337996363639832,0.51955384016037,0.820082247257233,-0.239851862192154,0.675751328468323,0.703905045986176,-0.218810006976128,0.643622934818268,0.695999085903168,-0.318331331014633,0.758423209190369,0.636332154273987,0.140980765223503,0.903041958808899,0.404765665531158,0.143805220723152,0.882022321224213,0.469820559024811,-0.0361285507678986,0.717910170555115,0.69438225030899,-0.049378827214241,0.758423209190369,0.636332154273987,0.140980765223503,0.717910170555115,0.69438225030899,-0.049378827214241,0.564893007278442,0.823054492473602,-0.0589678697288036,0.592619299888611,0.791549921035767,0.149167820811272,0.374413341283798,0.732271254062653,0.568852782249451,0.371298015117645,0.806507170200348,0.460091233253479, 0.329870194196701,0.817974448204041,0.471278518438339,0.320665568113327,0.737191736698151,0.594745278358459,0.354833543300629,0.872086048126221,0.336985319852829,0.311769247055054,0.887734949588776,0.338713079690933,0.329870194196701,0.817974448204041,0.471278518438339,0.371298015117645,0.806507170200348,0.460091233253479,0.0780636146664619,0.932616472244263,0.352324455976486,0.0752492547035217,0.86371123790741,0.498337715864182,0.329870194196701,0.817974448204041,0.471278518438339,0.311769247055054,0.887734949588776,0.338713079690933,0.0704773217439651,0.772313952445984,0.631319284439087,0.320665568113327,0.737191736698151,0.594745278358459,0.329870194196701,0.817974448204041,0.471278518438339,0.0752492547035217,0.86371123790741,0.498337715864182,0.941746175289154,0.170597404241562,0.289845913648605,0.941311419010162,0.140633046627045,0.30684706568718,0.944782853126526,0.0188948940485716,0.327151775360107,0.941569864749908,0.149283602833748,0.301928132772446,0.941746175289154,0.170597404241562,0.289845913648605,0.941569864749908,0.149283602833748,0.301928132772446,0.954596400260925,0.0140978172421455,0.297568470239639,0.955479383468628,-0.0429471768438816,0.291915565729141,0.954596400260925,0.0140978172421455,0.297568470239639,0.961383461952209,0.117865592241287,0.248695820569992,0.94008880853653,0.132723599672318,0.314034193754196,0.943980097770691,0.0651601999998093,0.323505431413651,0.919247984886169,0.28292128443718,0.273749440908432,0.908561766147614,0.233992353081703,0.346068024635315,0.94008880853653,0.132723599672318,0.314034193754196,0.909750938415527,0.190706014633179,0.368760675191879,0.943980097770691,0.0651601999998093,0.323505431413651,0.94008880853653,0.132723599672318,0.314034193754196,0.908561766147614,0.233992353081703,0.346068024635315,0.702617406845093,0.468200266361237,0.535833239555359,0.547570884227753,0.592168509960175,0.591187477111816,0.524678170681,0.559116363525391,0.641951441764832,0.744709670543671,0.422629773616791,0.516518652439117,0.510853886604309,0.565487027168274,-0.647497296333313, 0.691879332065582,0.507222592830658,-0.513836801052094,0.772872805595398,0.305390149354935,-0.55624133348465,0.594810545444489,0.366844743490219,-0.715279877185822,0.802429139614105,0.495289087295532,-0.332860708236694,0.896075665950775,0.270221561193466,-0.352177083492279,0.772872805595398,0.305390149354935,-0.55624133348465,0.691879332065582,0.507222592830658,-0.513836801052094,0.927419364452362,0.100383616983891,-0.36030051112175,0.822571158409119,0.128576725721359,-0.553935706615448,0.772872805595398,0.305390149354935,-0.55624133348465,0.896075665950775,0.270221561193466,-0.352177083492279,0.652361810207367,0.183982044458389,-0.735237896442413,0.594810545444489,0.366844743490219,-0.715279877185822,0.772872805595398,0.305390149354935,-0.55624133348465,0.822571158409119,0.128576725721359,-0.553935706615448,0.468265026807785,0.816386163234711,-0.337996363639832,0.643622934818268,0.695999085903168,-0.318331331014633,0.603891670703888,0.66539740562439,-0.438817948102951,0.453374654054642,0.743375957012177,-0.491775959730148,0.802429139614105,0.495289087295532,-0.332860708236694,0.691879332065582,0.507222592830658,-0.513836801052094,0.603891670703888,0.66539740562439,-0.438817948102951,0.643622934818268,0.695999085903168,-0.318331331014633,0.510853886604309,0.565487027168274,-0.647497296333313,0.453374654054642,0.743375957012177,-0.491775959730148,0.603891670703888,0.66539740562439,-0.438817948102951,0.691879332065582,0.507222592830658,-0.513836801052094,0.270549148321152,0.870745658874512,-0.410615533590317,0.243253543972969,0.798352062702179,-0.550873577594757,0.160658344626427,0.809181571006775,-0.565167307853699,0.176319569349289,0.887581884860992,-0.425570040941238,0.241631746292114,0.652338445186615,-0.718379199504852,0.152186512947083,0.664242565631866,-0.731861352920532,0.160658344626427,0.809181571006775,-0.565167307853699,0.243253543972969,0.798352062702179,-0.550873577594757,0.0394280813634396,0.674713432788849,-0.737025916576386,0.0535563454031944,0.82038402557373,-0.569299399852753,0.160658344626427,0.809181571006775,-0.565167307853699, 0.152186512947083,0.664242565631866,-0.731861352920532,0.0622152015566826,0.901260554790497,-0.428787440061569,0.176319569349289,0.887581884860992,-0.425570040941238,0.160658344626427,0.809181571006775,-0.565167307853699,0.0535563454031944,0.82038402557373,-0.569299399852753,0.422840595245361,0.890932738780975,0.165664300322533,0.32793140411377,0.928926110267639,0.171922340989113,0.354833543300629,0.872086048126221,0.336985319852829,0.425699532032013,0.838678896427155,0.339702278375626,0.422840595245361,0.890932738780975,0.165664300322533,0.425699532032013,0.838678896427155,0.339702278375626,0.617453694343567,0.698337316513062,0.362044125795364,0.592619299888611,0.791549921035767,0.149167820811272,0.415615051984787,0.907950639724731,-0.0537562556564808,0.312359720468521,0.949172854423523,-0.0387601368129253,0.32793140411377,0.928926110267639,0.171922340989113,0.422840595245361,0.890932738780975,0.165664300322533,0.415615051984787,0.907950639724731,-0.0537562556564808,0.422840595245361,0.890932738780975,0.165664300322533,0.592619299888611,0.791549921035767,0.149167820811272,0.564893007278442,0.823054492473602,-0.0589678697288036,0.270549148321152,0.870745658874512,-0.410615533590317,0.299265414476395,0.918772161006927,-0.257483899593353,0.396910279989243,0.88137674331665,-0.256197690963745,0.358765363693237,0.85211443901062,-0.381035953760147,0.312359720468521,0.949172854423523,-0.0387601368129253,0.415615051984787,0.907950639724731,-0.0537562556564808,0.396910279989243,0.88137674331665,-0.256197690963745,0.299265414476395,0.918772161006927,-0.257483899593353,0.564893007278442,0.823054492473602,-0.0589678697288036,0.51955384016037,0.820082247257233,-0.239851862192154,0.396910279989243,0.88137674331665,-0.256197690963745,0.415615051984787,0.907950639724731,-0.0537562556564808,0.468265026807785,0.816386163234711,-0.337996363639832,0.358765363693237,0.85211443901062,-0.381035953760147,0.396910279989243,0.88137674331665,-0.256197690963745,0.51955384016037,0.820082247257233,-0.239851862192154,0.270549148321152,0.870745658874512,-0.410615533590317, 0.358765363693237,0.85211443901062,-0.381035953760147,0.326544016599655,0.784170210361481,-0.527679860591888,0.243253543972969,0.798352062702179,-0.550873577594757,0.468265026807785,0.816386163234711,-0.337996363639832,0.453374654054642,0.743375957012177,-0.491775959730148,0.326544016599655,0.784170210361481,-0.527679860591888,0.358765363693237,0.85211443901062,-0.381035953760147,0.510853886604309,0.565487027168274,-0.647497296333313,0.347870439291,0.626684665679932,-0.697318077087402,0.326544016599655,0.784170210361481,-0.527679860591888,0.453374654054642,0.743375957012177,-0.491775959730148,0.241631746292114,0.652338445186615,-0.718379199504852,0.243253543972969,0.798352062702179,-0.550873577594757,0.326544016599655,0.784170210361481,-0.527679860591888,0.347870439291,0.626684665679932,-0.697318077087402,0.652361810207367,0.183982044458389,-0.735237896442413,0.456190079450607,0.236269950866699,-0.857943534851074,0.404344618320465,0.425657629966736,-0.809518992900848,0.594810545444489,0.366844743490219,-0.715279877185822,0.289862871170044,0.274766653776169,-0.91677850484848,0.262024700641632,0.458286553621292,-0.849303483963013,0.404344618320465,0.425657629966736,-0.809518992900848,0.456190079450607,0.236269950866699,-0.857943534851074,0.241631746292114,0.652338445186615,-0.718379199504852,0.347870439291,0.626684665679932,-0.697318077087402,0.404344618320465,0.425657629966736,-0.809518992900848,0.262024700641632,0.458286553621292,-0.849303483963013,0.510853886604309,0.565487027168274,-0.647497296333313,0.594810545444489,0.366844743490219,-0.715279877185822,0.404344618320465,0.425657629966736,-0.809518992900848,0.347870439291,0.626684665679932,-0.697318077087402,0.289862871170044,0.274766653776169,-0.91677850484848,0.456190079450607,0.236269950866699,-0.857943534851074,0.494736820459366,0.0896743088960648,-0.8644038438797,0.317441433668137,0.128782093524933,-0.939492464065552,0.652361810207367,0.183982044458389,-0.735237896442413,0.679547071456909,0.0500539317727089,-0.731922388076782,0.494736820459366,0.0896743088960648,-0.8644038438797, 0.456190079450607,0.236269950866699,-0.857943534851074,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.514681279659271,-0.030753742903471,-0.856829822063446,0.494736820459366,0.0896743088960648,-0.8644038438797,0.679547071456909,0.0500539317727089,-0.731922388076782,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.317441433668137,0.128782093524933,-0.939492464065552,0.494736820459366,0.0896743088960648,-0.8644038438797,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.493934065103531,-0.187336564064026,-0.849078416824341,0.505452334880829,-0.224964916706085,-0.8330118060112,0.572597026824951,0.0432385914027691,-0.818695962429047,0.440676689147949,-0.105378225445747,-0.891459226608276,0.493934065103531,-0.187336564064026,-0.849078416824341,0.647758185863495,-0.0730211958289146,-0.758338510990143,0.31784787774086,-0.175634980201721,-0.931732296943665,0.310143738985062,-0.212492153048515,-0.926638007164001,0.493934065103531,-0.187336564064026,-0.849078416824341,0.440676689147949,-0.105378225445747,-0.891459226608276,0.305753350257874,-0.212547421455383,-0.92808324098587,0.505452334880829,-0.224964916706085,-0.8330118060112,0.493934065103531,-0.187336564064026,-0.849078416824341,0.310143738985062,-0.212492153048515,-0.926638007164001,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.320828467607498,-0.143988654017448,-0.936128377914429,0.154737427830696,-0.127341821789742,-0.979714453220367,0.157008796930313,0.0128065068274736,-0.987514197826386,0.305753350257874,-0.212547421455383,-0.92808324098587,0.158634498715401,-0.20582041144371,-0.96564644575119,0.154737427830696,-0.127341821789742,-0.979714453220367,0.320828467607498,-0.143988654017448,-0.936128377914429,-0.0315490290522575,-0.190183460712433,-0.981241524219513,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.154737427830696,-0.127341821789742,-0.979714453220367,0.158634498715401,-0.20582041144371,-0.96564644575119, -0.0150691494345665,0.027319710701704,-0.999513149261475,0.157008796930313,0.0128065068274736,-0.987514197826386,0.154737427830696,-0.127341821789742,-0.979714453220367,-0.0252742562443018,-0.106068439781666,-0.994037568569183,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.684577643871307,-0.163184806704521,-0.710439383983612,0.510694682598114,-0.152896985411644,-0.846057593822479,0.514681279659271,-0.030753742903471,-0.856829822063446,0.668470501899719,-0.223753660917282,-0.709282398223877,0.505452334880829,-0.224964916706085,-0.8330118060112,0.510694682598114,-0.152896985411644,-0.846057593822479,0.684577643871307,-0.163184806704521,-0.710439383983612,0.305753350257874,-0.212547421455383,-0.92808324098587,0.320828467607498,-0.143988654017448,-0.936128377914429,0.510694682598114,-0.152896985411644,-0.846057593822479,0.505452334880829,-0.224964916706085,-0.8330118060112,0.330739557743073,-0.00570091884583235,-0.943704843521118,0.514681279659271,-0.030753742903471,-0.856829822063446,0.510694682598114,-0.152896985411644,-0.846057593822479,0.320828467607498,-0.143988654017448,-0.936128377914429,0.668470501899719,-0.223753660917282,-0.709282398223877,0.684577643871307,-0.163184806704521,-0.710439383983612,0.78548675775528,-0.165785521268845,-0.596259772777557,0.763271033763886,-0.164724439382553,-0.624726474285126,0.688820779323578,-0.0580477155745029,-0.722603917121887,0.806335091590881,-0.064182311296463,-0.587966322898865,0.78548675775528,-0.165785521268845,-0.596259772777557,0.684577643871307,-0.163184806704521,-0.710439383983612,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.838157534599304,-0.159007966518402,-0.521735966205597,0.78548675775528,-0.165785521268845,-0.596259772777557,0.806335091590881,-0.064182311296463,-0.587966322898865,0.903657674789429,-0.181017354130745,-0.38811793923378,0.763271033763886,-0.164724439382553,-0.624726474285126,0.78548675775528,-0.165785521268845,-0.596259772777557,0.838157534599304,-0.159007966518402,-0.521735966205597,0.898539185523987,-0.0431283302605152,-0.436769187450409, 0.974936366081238,0.00979904364794493,-0.222267970442772,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.965442478656769,-0.181367635726929,-0.187153950333595,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974936366081238,0.00979904364794493,-0.222267970442772,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.981309294700623,-0.093424528837204,-0.168237790465355,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.958209931850433,-0.0949564725160599,-0.269846349954605,0.933521032333374,-0.113554745912552,-0.340064376592636,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.440676689147949,-0.105378225445747,-0.891459226608276,0.572597026824951,0.0432385914027691,-0.818695962429047,0.564589977264404,0.0705946907401085,-0.822346925735474,0.426292926073074,0.0950048267841339,-0.899582326412201,0.440676689147949,-0.105378225445747,-0.891459226608276,0.426292926073074,0.0950048267841339,-0.899582326412201,0.35312095284462,0.134023457765579,-0.925928354263306,0.31784787774086,-0.175634980201721,-0.931732296943665,0.191843032836914,-0.158846795558929,-0.968485355377197,0.31784787774086,-0.175634980201721,-0.931732296943665,0.35312095284462,0.134023457765579,-0.925928354263306,0.23451641201973,0.162132352590561,-0.958496332168579,0.191843032836914,-0.158846795558929,-0.968485355377197,0.23451641201973,0.162132352590561,-0.958496332168579,0.000681107048876584,0.225692093372345,-0.974198460578918,-0.0269717872142792,-0.128648608922958,-0.991323411464691,0.164569541811943,0.375759840011597,-0.911987602710724,0.286092400550842,0.370450645685196,-0.883695363998413,0.258463323116302,0.471300333738327,-0.843251287937164,0.148562401533127,0.439921736717224,-0.885662496089935,0.17595848441124,0.184216767549515,-0.967007160186768,0.311260253190994,0.141205564141274,-0.93977552652359,0.286092400550842,0.370450645685196,-0.883695363998413, 0.164569541811943,0.375759840011597,-0.911987602710724,0.591210007667542,0.268222451210022,-0.760609924793243,0.476214468479156,0.553961336612701,-0.682895720005035,0.286092400550842,0.370450645685196,-0.883695363998413,0.311260253190994,0.141205564141274,-0.93977552652359,0.286092400550842,0.370450645685196,-0.883695363998413,0.476214468479156,0.553961336612701,-0.682895720005035,0.411318093538284,0.679248511791229,-0.607814848423004,0.258463323116302,0.471300333738327,-0.843251287937164,0.0694107115268707,0.216942340135574,-0.973713636398315,0.17595848441124,0.184216767549515,-0.967007160186768,0.164569541811943,0.375759840011597,-0.911987602710724,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0754155963659287,0.356131970882416,-0.931387424468994,0.164569541811943,0.375759840011597,-0.911987602710724,0.148562401533127,0.439921736717224,-0.885662496089935,0.0560689158737659,0.370522946119308,-0.927129447460175,-0.000760512368287891,0.207898333668709,-0.978150188922882,0.0694107115268707,0.216942340135574,-0.973713636398315,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0102010685950518,0.341328680515289,-0.939888656139374,0.0754155963659287,0.356131970882416,-0.931387424468994,0.0560689158737659,0.370522946119308,-0.927129447460175,0.010585374198854,0.345912545919418,-0.938207030296326,0.75023740530014,-0.238408371806145,0.616688966751099,0.616745948791504,-0.290956258773804,0.731415688991547,0.628606140613556,-0.0929744690656662,0.77214640378952,0.76386970281601,-0.0586191527545452,0.642702758312225,0.855076372623444,-0.165702432394028,0.491311639547348,0.75023740530014,-0.238408371806145,0.616688966751099,0.76386970281601,-0.0586191527545452,0.642702758312225,0.85496574640274,-0.0235987044870853,0.518147349357605,0.89460563659668,0.0454745329916477,0.444536596536636,0.882708728313446,0.169010564684868,0.438475489616394,0.941748380661011,0.168847903609276,0.290861427783966,0.940892815589905,-0.119216494262218,0.317030221223831,0.854965507984161,-0.114104993641377,0.505978286266327, 0.89460563659668,0.0454745329916477,0.444536596536636,0.506778419017792,-0.624182820320129,0.594618737697601,0.535486578941345,-0.739663183689117,0.407618075609207,0.882708728313446,0.169010564684868,0.438475489616394,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.868690371513367,-0.108423709869385,-0.483343929052353,0.724950075149536,-0.680160522460938,0.108761206269264,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.053869191557169,-0.604926705360413,-0.794456899166107,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.801777124404907,0.00266337930224836,-0.597617149353027,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.053869191557169,-0.604926705360413,-0.794456899166107,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.712912499904633,-0.638341963291168,0.290302157402039,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.237821668386459,-0.891240954399109,0.386174082756042,0.589298963546753,-0.771825730800629,0.238771393895149,0.2151879966259,-0.952648401260376,-0.214837476611137,0.237821668386459,-0.891240954399109,0.386174082756042,-0.139181971549988,-0.98750239610672,0.0739418119192123,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.272507458925247,-0.860418200492859,0.430604517459869,0.786046326160431,0.0746424272656441,0.613644540309906,0.89460563659668,0.0454745329916477,0.444536596536636,0.854965507984161,-0.114104993641377,0.505978286266327,0.576319634914398,0.0662916451692581,0.814531207084656,0.506778419017792,-0.624182820320129,0.594618737697601,0.89460563659668,0.0454745329916477,0.444536596536636,0.786046326160431,0.0746424272656441,0.613644540309906, -0.712912499904633,-0.638341963291168,0.290302157402039,-0.449249923229218,-0.874760508537292,0.181572452187538,0.506778419017792,-0.624182820320129,0.594618737697601,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.272507458925247,-0.860418200492859,0.430604517459869,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.712912499904633,-0.638341963291168,0.290302157402039,0.844061017036438,0.391468346118927,0.366488069295883,0.868690371513367,-0.108423709869385,-0.483343929052353,0.801777124404907,0.00266337930224836,-0.597617149353027,0.941748380661011,0.168847903609276,0.290861427783966,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883,0.535486578941345,-0.739663183689117,0.407618075609207,0.724950075149536,-0.680160522460938,0.108761206269264,0.844061017036438,0.391468346118927,0.366488069295883,0.882708728313446,0.169010564684868,0.438475489616394,0.844061017036438,0.391468346118927,0.366488069295883,0.724950075149536,-0.680160522460938,0.108761206269264,0.868690371513367,-0.108423709869385,-0.483343929052353,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.032781969755888,-0.0827890038490295,0.996027767658234,0.356171637773514,-0.454808622598648,0.816266417503357,0.361973732709885,-0.605334222316742,0.708904445171356,0.032781969755888,-0.0827890038490295,0.996027767658234,0.204357400536537,-0.124537408351898,0.97094202041626,0.17069847881794,-0.387216597795486,0.906049311161041,0.356171637773514,-0.454808622598648,0.816266417503357,0.314119011163712,-0.739236891269684,0.595699608325958,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.361973732709885,-0.605334222316742,0.708904445171356,0.314119011163712,-0.739236891269684,0.595699608325958,0.206430405378342,-0.778748571872711,0.592399477958679,0.00206050439737737,-0.384430259466171,0.923151731491089,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0268061328679323,-0.427482962608337,0.903625905513763, 0.00206050439737737,-0.384430259466171,0.923151731491089,0.0454688854515553,-0.765503704547882,0.641822934150696,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.00206050439737737,-0.384430259466171,0.923151731491089,0.206430405378342,-0.778748571872711,0.592399477958679,0.0366746000945568,-0.755166232585907,0.654506683349609,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0366746000945568,-0.755166232585907,0.654506683349609,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.00267285062000155,-0.590106904506683,0.807320654392242,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00206050439737737,-0.384430259466171,0.923151731491089,0.00267285062000155,-0.590106904506683,0.807320654392242,0.17069847881794,-0.387216597795486,0.906049311161041,0.458961844444275,-0.463801801204681,0.757787525653839,0.835841596126556,0.145906612277031,0.529225945472717,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717,0.190371856093407,0.256429195404053,0.947629988193512,-0.0904141515493393,0.920958995819092,0.379024863243103,0.835841596126556,0.145906612277031,0.529225945472717,0.458961844444275,-0.463801801204681,0.757787525653839,0.190371856093407,0.256429195404053,0.947629988193512,0.680179119110107,0.270307511091232,0.681388378143311,0.835841596126556,0.145906612277031,0.529225945472717,-0.0904141515493393,0.920958995819092,0.379024863243103,-0.111705176532269,0.976534187793732,0.18412746489048,0.513224720954895,-0.832203328609467,0.209852293133736,0.835841596126556,0.145906612277031,0.529225945472717,0.680179119110107,0.270307511091232,0.681388378143311,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.168070778250694,-0.457133919000626,0.873373210430145,0.192558065056801,-0.101361930370331,0.976036429405212,0.0599219687283039,-0.361293613910675,0.93052476644516,0.361973732709885,-0.605334222316742,0.708904445171356,0.356171637773514,-0.454808622598648,0.816266417503357, 0.578862547874451,-0.786143362522125,0.216556489467621,0.626789748668671,-0.749257385730743,0.213887751102448,0.361973732709885,-0.605334222316742,0.708904445171356,0.626789748668671,-0.749257385730743,0.213887751102448,0.517510056495667,-0.833824872970581,0.192144423723221,0.314119011163712,-0.739236891269684,0.595699608325958,0.17069847881794,-0.387216597795486,0.906049311161041,0.513224720954895,-0.832203328609467,0.209852293133736,0.578862547874451,-0.786143362522125,0.216556489467621,0.356171637773514,-0.454808622598648,0.816266417503357,0.578862547874451,-0.786143362522125,0.216556489467621,0.513224720954895,-0.832203328609467,0.209852293133736,0.680179119110107,0.270307511091232,0.681388378143311,0.714891254901886,0.201140508055687,0.669681310653687,0.360629975795746,-0.702259659767151,0.613821983337402,0.626789748668671,-0.749257385730743,0.213887751102448,0.578862547874451,-0.786143362522125,0.216556489467621,0.714891254901886,0.201140508055687,0.669681310653687,-0.0101526426151395,0.0385068021714687,0.999206781387329,0.315801054239273,0.0731089860200882,0.946004629135132,0.192558065056801,-0.101361930370331,0.976036429405212,0.168070778250694,-0.457133919000626,0.873373210430145,0.139593034982681,-0.543097734451294,0.827984690666199,0.0695574581623077,-0.316367268562317,0.946083247661591,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.130675092339516,-0.201507270336151,0.9707310795784,-0.204613357782364,0.564212739467621,0.799873352050781,0.026754243299365,0.843723058700562,0.53611159324646,-0.046717431396246,0.464232265949249,0.884480595588684,-0.204613357782364,0.564212739467621,0.799873352050781,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.0965566337108612,0.382317036390305,0.918972492218018,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0361802279949188,0.15255069732666,0.987633168697357, 0.0405396111309528,-0.00950155965983868,0.999132752418518,0.0361802279949188,0.15255069732666,0.987633168697357,0.190371856093407,0.256429195404053,0.947629988193512,0.193743079900742,0.0896209701895714,0.976950228214264,0.724869191646576,-0.144625514745712,0.673534035682678,0.668389976024628,-0.0383556596934795,0.742821395397186,0.729625582695007,0.0742557868361473,0.679803311824799,0.712920248508453,0.00929267052561045,0.701183557510376,0.724869191646576,-0.144625514745712,0.673534035682678,0.729625582695007,0.0742557868361473,0.679803311824799,0.621637463569641,0.0923129394650459,0.77784651517868,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.162078380584717,0.332254558801651,0.929159581661224,0.0823612809181213,0.629497587680817,0.772624969482422,0.0361802279949188,0.15255069732666,0.987633168697357,0.256553143262863,0.759260475635529,0.598083674907684,0.118274427950382,0.894158720970154,0.431846410036087,0.0823612809181213,0.629497587680817,0.772624969482422,0.162078380584717,0.332254558801651,0.929159581661224,-0.111705176532269,0.976534187793732,0.18412746489048,-0.0904141515493393,0.920958995819092,0.379024863243103,0.0823612809181213,0.629497587680817,0.772624969482422,0.118274427950382,0.894158720970154,0.431846410036087,0.190371856093407,0.256429195404053,0.947629988193512,0.0361802279949188,0.15255069732666,0.987633168697357,0.0823612809181213,0.629497587680817,0.772624969482422,-0.0904141515493393,0.920958995819092,0.379024863243103,0.724869191646576,-0.144625514745712,0.673534035682678,0.388869285583496,-0.304632723331451,0.869470834732056,0.405026167631149,-0.171226277947426,0.898128807544708,0.593307375907898,-0.0775594636797905,0.801230847835541,0.668389976024628,-0.0383556596934795,0.742821395397186,-0.218910127878189,-0.0667930841445923,0.973456263542175,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.136446863412857,-0.21966315805912,0.965986728668213,-0.218910127878189,-0.0667930841445923,0.973456263542175, -0.0540277659893036,-0.0540848448872566,0.997073590755463,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.00769979506731033,-0.155788585543633,0.987760424613953,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.333709418773651,0.169013321399689,0.927400946617126,0.205060333013535,0.0685160234570503,0.976348161697388,-0.0540277659893036,-0.0540848448872566,0.997073590755463,0.0144113004207611,0.0269631575793028,0.999532520771027,0.470013290643692,0.212332352995873,0.856739461421967,0.333709418773651,0.169013321399689,0.927400946617126,0.578032433986664,0.306231528520584,0.756373405456543,0.357361167669296,0.242811009287834,0.901851356029511,0.388869285583496,-0.304632723331451,0.869470834732056,0.724869191646576,-0.144625514745712,0.673534035682678,-0.0965566337108612,0.382317036390305,0.918972492218018,-0.136446863412857,-0.21966315805912,0.965986728668213,0.0695574581623077,-0.316367268562317,0.946083247661591,0.119953289628029,0.283690631389618,0.951383650302887,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.046717431396246,0.464232265949249,0.884480595588684,0.162078380584717,0.332254558801651,0.929159581661224,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.026754243299365,0.843723058700562,0.53611159324646,0.256553143262863,0.759260475635529,0.598083674907684,0.162078380584717,0.332254558801651,0.929159581661224,-0.046717431396246,0.464232265949249,0.884480595588684,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.193743079900742,0.0896209701895714,0.976950228214264,0.533409833908081,0.213411912322044,0.818492114543915,0.109049446880817,0.0514820925891399,0.992702305316925,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0405396111309528,-0.00950155965983868,0.999132752418518,0.109049446880817,0.0514820925891399,0.992702305316925,0.109049446880817,0.0514820925891399,0.992702305316925,0.533409833908081,0.213411912322044,0.818492114543915,0.54212898015976,0.215727955102921,0.812131583690643,0.578032433986664,0.306231528520584,0.756373405456543, 0.724869191646576,-0.144625514745712,0.673534035682678,0.858066916465759,-0.0402064435184002,0.511961579322815,0.700553953647614,0.463066458702087,0.542949020862579,0.858066916465759,-0.0402064435184002,0.511961579322815,0.875872433185577,0.296488851308823,0.38071221113205,0.802525162696838,0.518118143081665,0.295815676450729,0.700553953647614,0.463066458702087,0.542949020862579,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.212925776839256,0.972887873649597,-0.0902870893478394,0.480981200933456,0.871001183986664,0.100070223212242,0.13062296807766,0.400416731834412,0.906975269317627,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597,-0.0902870893478394,-0.994033694267273,0.107649877667427,-0.0175654906779528,0.370056182146072,0.811048626899719,-0.453054636716843,0.713096976280212,0.68854147195816,-0.131921663880348,0.212925776839256,0.972887873649597,-0.0902870893478394,-0.817673206329346,0.400343358516693,-0.413685619831085,0.212925776839256,0.972887873649597,-0.0902870893478394,0.713096976280212,0.68854147195816,-0.131921663880348,0.778178691864014,0.616257607936859,0.121097095310688,0.480981200933456,0.871001183986664,0.100070223212242,0.551189541816711,0.456701904535294,0.698293268680573,0.486871391534805,0.750825703144073,0.446337312459946,0.276492714881897,0.762958288192749,0.584334194660187,0.326813966035843,0.423467636108398,0.844906985759735,0.551189541816711,0.456701904535294,0.698293268680573,0.326813966035843,0.423467636108398,0.844906985759735,0.329012274742126,0.260547906160355,0.907670497894287,0.561613619327545,0.285967856645584,0.776409983634949,0.7577885389328,0.376234740018845,0.533107817173004,0.739092469215393,0.541533410549164,0.400604367256165,0.778178691864014,0.616257607936859,0.121097095310688,0.827663242816925,0.523418128490448,0.202501967549324,0.804373443126678,0.392295897006989,0.446191996335983,0.739092469215393,0.541533410549164,0.400604367256165, 0.7577885389328,0.376234740018845,0.533107817173004,0.758135914802551,0.0851427242159843,0.646514236927032,0.443391680717468,-0.0999263972043991,0.89074045419693,0.252335846424103,0.330343335866928,0.909505307674408,-0.26518127322197,0.597104549407959,-0.757063448429108,0.182353228330612,0.97417688369751,-0.133141815662384,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.182353228330612,0.97417688369751,-0.133141815662384,0.486871391534805,0.750825703144073,0.446337312459946,0.534174799919128,0.836855232715607,0.119710274040699,0.170329049229622,0.936843514442444,-0.305470585823059,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.0107070477679372,0.835606217384338,-0.549224615097046,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.0107070477679372,0.835606217384338,-0.549224615097046,0.170329049229622,0.936843514442444,-0.305470585823059,-0.452081710100174,0.604530513286591,-0.655869662761688,0.7577885389328,0.376234740018845,0.533107817173004,0.804373443126678,0.392295897006989,0.446191996335983,0.731819272041321,0.307825177907944,0.608016610145569,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.804373443126678,0.392295897006989,0.446191996335983,0.650610029697418,0.750839710235596,0.113781958818436,0.665128111839294,0.607672452926636,0.433980166912079,0.731819272041321,0.307825177907944,0.608016610145569,0.665128111839294,0.607672452926636,0.433980166912079,0.551189541816711,0.456701904535294,0.698293268680573,0.561613619327545,0.285967856645584,0.776409983634949,0.665128111839294,0.607672452926636,0.433980166912079,0.534174799919128,0.836855232715607,0.119710274040699,0.486871391534805,0.750825703144073,0.446337312459946,0.551189541816711,0.456701904535294,0.698293268680573,0.558381021022797,0.167118594050407,0.812577426433563,0.561613619327545,0.285967856645584,0.776409983634949, 0.329012274742126,0.260547906160355,0.907670497894287,0.315978825092316,0.0904445722699165,0.944445431232452,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.113433599472046,0.992009460926056,0.0552276223897934,0.182353228330612,0.97417688369751,-0.133141815662384,-0.26518127322197,0.597104549407959,-0.757063448429108,0.113433599472046,0.992009460926056,0.0552276223897934,0.276492714881897,0.762958288192749,0.584334194660187,0.486871391534805,0.750825703144073,0.446337312459946,0.182353228330612,0.97417688369751,-0.133141815662384,0.0685662999749184,0.738678991794586,0.670561015605927,0.0410983338952065,0.381287395954132,0.923542559146881,0.172223508358002,0.402292132377625,0.899166345596313,0.179263070225716,0.753637075424194,0.632373213768005,0.172223508358002,0.402292132377625,0.899166345596313,0.0410983338952065,0.381287395954132,0.923542559146881,0.0325647220015526,0.328354388475418,0.943993091583252,0.181231990456581,0.289873003959656,0.939749240875244,0.329012274742126,0.260547906160355,0.907670497894287,0.326813966035843,0.423467636108398,0.844906985759735,0.172223508358002,0.402292132377625,0.899166345596313,0.181231990456581,0.289873003959656,0.939749240875244,0.276492714881897,0.762958288192749,0.584334194660187,0.179263070225716,0.753637075424194,0.632373213768005,0.172223508358002,0.402292132377625,0.899166345596313,0.326813966035843,0.423467636108398,0.844906985759735,0.650610029697418,0.750839710235596,0.113781958818436,0.401338756084442,0.891479909420013,-0.210216000676155,0.534174799919128,0.836855232715607,0.119710274040699,0.665128111839294,0.607672452926636,0.433980166912079,0.740872263908386,0.260281056165695,0.619162321090698,0.731819272041321,0.307825177907944,0.608016610145569,0.561613619327545,0.285967856645584,0.776409983634949,0.558381021022797,0.167118594050407,0.812577426433563,0.315978825092316,0.0904445722699165,0.944445431232452,0.329012274742126,0.260547906160355,0.907670497894287,0.181231990456581,0.289873003959656,0.939749240875244,0.178787171840668,0.10878062993288,0.977855801582336, 0.0226862858980894,0.138102903962135,0.990158021450043,0.178787171840668,0.10878062993288,0.977855801582336,0.181231990456581,0.289873003959656,0.939749240875244,0.0325647220015526,0.328354388475418,0.943993091583252,0.0685662999749184,0.738678991794586,0.670561015605927,0.179263070225716,0.753637075424194,0.632373213768005,0.145434200763702,0.978163301944733,0.14847719669342,0.078812912106514,0.980074644088745,0.182324379682541,0.276492714881897,0.762958288192749,0.584334194660187,0.113433599472046,0.992009460926056,0.0552276223897934,0.145434200763702,0.978163301944733,0.14847719669342,0.179263070225716,0.753637075424194,0.632373213768005,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.103339314460754,0.947827875614166,-0.301568180322647,0.145434200763702,0.978163301944733,0.14847719669342,0.113433599472046,0.992009460926056,0.0552276223897934,0.0339763574302197,0.937289535999298,-0.346891850233078,0.078812912106514,0.980074644088745,0.182324379682541,0.145434200763702,0.978163301944733,0.14847719669342,0.103339314460754,0.947827875614166,-0.301568180322647,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.452081710100174,0.604530513286591,-0.655869662761688,0.170329049229622,0.936843514442444,-0.305470585823059,0.534174799919128,0.836855232715607,0.119710274040699,0.401338756084442,0.891479909420013,-0.210216000676155,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.452081710100174,0.604530513286591,-0.655869662761688,-0.19065423309803,0.753101229667664,-0.629674077033997,0.277289211750031,-0.704152882099152,0.653666138648987,0.295715004205704,-0.771513819694519,0.56331080198288,0.426225006580353,-0.76509952545166,0.482654064893723,0.385886758565903,-0.746556282043457,0.541982591152191,0.353581786155701,-0.382090777158737,0.853807151317596,0.277289211750031,-0.704152882099152,0.653666138648987, 0.385886758565903,-0.746556282043457,0.541982591152191,0.476604402065277,-0.515640795230865,0.712013244628906,-0.00443782517686486,-0.271711438894272,0.962368547916412,0.176269888877869,-0.285972148180008,0.941885769367218,0.238539665937424,0.21987047791481,0.945915341377258,0.0352616421878338,0.240770235657692,0.969941377639771,0.353581786155701,-0.382090777158737,0.853807151317596,0.434465974569321,0.150427758693695,0.888037621974945,0.238539665937424,0.21987047791481,0.945915341377258,0.176269888877869,-0.285972148180008,0.941885769367218,0.40496814250946,0.259010583162308,0.87687760591507,0.235586777329445,0.270827025175095,0.933355033397675,0.238539665937424,0.21987047791481,0.945915341377258,0.434465974569321,0.150427758693695,0.888037621974945,0.0384946875274181,0.285418510437012,0.957629561424255,0.0352616421878338,0.240770235657692,0.969941377639771,0.238539665937424,0.21987047791481,0.945915341377258,0.235586777329445,0.270827025175095,0.933355033397675,0.362627446651459,-0.180693462491035,0.914249002933502,0.248945504426956,-0.117258243262768,0.961393058300018,0.40496814250946,0.259010583162308,0.87687760591507,0.552154183387756,0.173749193549156,0.815436661243439,0.0766859278082848,-0.975562393665314,0.205905899405479,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.128954827785492,-0.985570788383484,0.109639815986156,0.193085044622421,-0.95480340719223,0.225983783602715,0.0766859278082848,-0.975562393665314,0.205905899405479,0.128954827785492,-0.985570788383484,0.109639815986156,0.225613579154015,-0.956868171691895,0.183034926652908,0.282156497240067,-0.915852665901184,-0.285659939050674,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.470402508974075,-0.871353209018707,-0.139517307281494,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.545321881771088,-0.833433032035828,0.0895174741744995, 0.545321881771088,-0.833433032035828,0.0895174741744995,0.630033671855927,-0.76368510723114,0.140863940119743,0.539758801460266,-0.780041754245758,0.316536396741867,0.471000701189041,-0.846986770629883,0.246519237756729,0.630033671855927,-0.76368510723114,0.140863940119743,0.767249822616577,-0.595458924770355,0.23823593556881,0.70995169878006,-0.557043075561523,0.430896311998367,0.539758801460266,-0.780041754245758,0.316536396741867,0.295715004205704,-0.771513819694519,0.56331080198288,0.277289211750031,-0.704152882099152,0.653666138648987,0.0847999006509781,-0.684147000312805,0.724397599697113,0.0651562884449959,-0.780692636966705,0.62150913476944,0.353581786155701,-0.382090777158737,0.853807151317596,0.176269888877869,-0.285972148180008,0.941885769367218,0.0847999006509781,-0.684147000312805,0.724397599697113,0.277289211750031,-0.704152882099152,0.653666138648987,-0.00443782517686486,-0.271711438894272,0.962368547916412,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.0847999006509781,-0.684147000312805,0.724397599697113,0.176269888877869,-0.285972148180008,0.941885769367218,-0.0491818785667419,-0.776791214942932,0.627834796905518,0.0651562884449959,-0.780692636966705,0.62150913476944,0.0847999006509781,-0.684147000312805,0.724397599697113,-0.0397491529583931,-0.678164541721344,0.733834326267242,0.353581786155701,-0.382090777158737,0.853807151317596,0.476604402065277,-0.515640795230865,0.712013244628906,0.598369121551514,-0.00250658229924738,0.801216602325439,0.434465974569321,0.150427758693695,0.888037621974945,0.598369121551514,-0.00250658229924738,0.801216602325439,0.552154183387756,0.173749193549156,0.815436661243439,0.40496814250946,0.259010583162308,0.87687760591507,0.434465974569321,0.150427758693695,0.888037621974945,0.00911593530327082,-0.103348582983017,0.994603395462036,0.0384946875274181,0.285418510437012,0.957629561424255,0.235586777329445,0.270827025175095,0.933355033397675,0.173270419239998,-0.100987397134304,0.979683041572571,0.235586777329445,0.270827025175095,0.933355033397675,0.40496814250946,0.259010583162308,0.87687760591507, 0.248945504426956,-0.117258243262768,0.961393058300018,0.173270419239998,-0.100987397134304,0.979683041572571,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.0108760436996818,-0.349400758743286,0.936910271644592,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.186361730098724,-0.434708625078201,0.881077587604523,-0.220686122775078,-0.040834903717041,0.974489688873291,0.0623843558132648,-0.406503170728683,0.911517083644867,0.226468428969383,-0.439074218273163,0.869439959526062,-0.0349236838519573,-0.777106523513794,0.62839937210083,-0.186361730098724,-0.434708625078201,0.881077587604523,0.61975085735321,-0.35027813911438,0.702292025089264,0.463432401418686,-0.580224633216858,0.66975349187851,0.226468428969383,-0.439074218273163,0.869439959526062,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383,-0.439074218273163,0.869439959526062,0.463432401418686,-0.580224633216858,0.66975349187851,0.176858365535736,-0.897578120231628,0.403824985027313,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.00262317061424255,-0.184787794947624,0.982774972915649,0.364222437143326,-0.205845013260841,0.908278524875641,0.226468428969383,-0.439074218273163,0.869439959526062,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.463432401418686,-0.580224633216858,0.66975349187851,0.61975085735321,-0.35027813911438,0.702292025089264,0.794963598251343,-0.434218406677246,0.423659265041351,0.420062124729156,-0.858003616333008,0.295596987009048,0.176858365535736,-0.897578120231628,0.403824985027313,0.794963598251343,-0.434218406677246,0.423659265041351,0.881620466709137,-0.332029432058334,0.335412949323654,0.562851548194885,-0.792488932609558,0.23486053943634,0.420062124729156,-0.858003616333008,0.295596987009048,0.513407528400421,-0.784644782543182,0.347484111785889,0.507576704025269,-0.725169718265533,0.465290039777756,0.223161399364471,-0.702425539493561,0.675867795944214,0.220125123858452,-0.84959089756012,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,0.507576704025269,-0.725169718265533,0.465290039777756, 0.511638343334198,-0.543274581432343,0.665641725063324,0.215388640761375,-0.476592898368835,0.852330327033997,-0.0191204845905304,-0.446781009435654,0.894439041614532,-0.0377944894134998,-0.657056510448456,0.752893269062042,0.223161399364471,-0.702425539493561,0.675867795944214,0.215388640761375,-0.476592898368835,0.852330327033997,-0.055518988519907,-0.839309513568878,0.540811538696289,0.220125123858452,-0.84959089756012,0.479312241077423,0.223161399364471,-0.702425539493561,0.675867795944214,-0.0377944894134998,-0.657056510448456,0.752893269062042,0.903869867324829,0.198627322912216,0.37890163064003,0.899348855018616,0.00629356363788247,0.437186509370804,0.836100995540619,0.0841564238071442,0.542081892490387,0.855352699756622,0.226547658443451,0.46588408946991,0.899348855018616,0.00629356363788247,0.437186509370804,0.903869867324829,0.198627322912216,0.37890163064003,0.793976366519928,0.302302360534668,0.527460694313049,0.795822381973267,0.0336451791226864,0.604594647884369,0.846422255039215,-0.185521140694618,0.499150514602661,0.899348855018616,0.00629356363788247,0.437186509370804,0.795822381973267,0.0336451791226864,0.604594647884369,0.777246952056885,-0.186122506856918,0.60103702545166,0.899348855018616,0.00629356363788247,0.437186509370804,0.846422255039215,-0.185521140694618,0.499150514602661,0.759909570217133,-0.165927812457085,0.628494560718536,0.836100995540619,0.0841564238071442,0.542081892490387,0.411182582378387,-0.842439949512482,0.348172098398209,0.823821365833282,-0.474406152963638,0.310253411531448,0.778993248939514,-0.607196033000946,0.156468689441681,0.513407528400421,-0.784644782543182,0.347484111785889,0.350974529981613,-0.540442049503326,0.764682471752167,0.576319634914398,0.0662916451692581,0.814531207084656,0.854965507984161,-0.114104993641377,0.505978286266327,0.560910940170288,-0.546258211135864,0.622077882289886,0.536651909351349,-0.138671860098839,0.832331001758575,0.777246952056885,-0.186122506856918,0.60103702545166,0.795822381973267,0.0336451791226864,0.604594647884369,0.532816469669342,0.10447982698679,0.83975625038147, 0.536214470863342,0.394264131784439,0.746344327926636,0.532816469669342,0.10447982698679,0.83975625038147,0.795822381973267,0.0336451791226864,0.604594647884369,0.793976366519928,0.302302360534668,0.527460694313049,0.814013004302979,0.416528642177582,0.404829293489456,0.73296993970871,0.0683575123548508,0.676817834377289,0.898182094097137,-0.0604765526950359,0.435443967580795,0.915319561958313,0.399081766605377,0.0540725849568844,0.854046881198883,0.485713124275208,0.186243653297424,0.814013004302979,0.416528642177582,0.404829293489456,0.915319561958313,0.399081766605377,0.0540725849568844,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.890166699886322,0.437690794467926,-0.12660938501358,0.915319561958313,0.399081766605377,0.0540725849568844,0.93711906671524,0.303550958633423,-0.172234460711479,0.552991390228271,0.323919504880905,-0.767643570899963,0.672172069549561,0.528298437595367,-0.518734514713287,0.93711906671524,0.303550958633423,-0.172234460711479,0.856223344802856,0.13723511993885,-0.498044282197952,0.552991390228271,0.323919504880905,-0.767643570899963,0.856223344802856,0.13723511993885,-0.498044282197952,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.744540750980377,0.353585213422775,-0.566247820854187,0.552991390228271,0.323919504880905,-0.767643570899963,0.890166699886322,0.437690794467926,-0.12660938501358,0.672172069549561,0.528298437595367,-0.518734514713287,0.552991390228271,0.323919504880905,-0.767643570899963,0.744540750980377,0.353585213422775,-0.566247820854187,0.632524311542511,-0.737463712692261,0.236770406365395,0.625836908817291,-0.779953479766846,0.000855531019624323,0.816257119178772,-0.389834344387054,-0.426325589418411,0.93777334690094,-0.280869245529175,-0.204190224409103,0.816257119178772,-0.389834344387054,-0.426325589418411,0.851511597633362,-0.5011847615242,0.154083982110024,0.967206120491028,-0.19463723897934,0.163182899355888,0.933138132095337,-0.0070160455070436,-0.359449595212936, 0.816257119178772,-0.389834344387054,-0.426325589418411,0.625836908817291,-0.779953479766846,0.000855531019624323,0.851511597633362,-0.5011847615242,0.154083982110024,0.632524311542511,-0.737463712692261,0.236770406365395,0.645412087440491,-0.585248291492462,0.490843862295151,0.0743590220808983,-0.732295691967011,0.676914930343628,0.125414818525314,-0.832001984119415,0.540410816669464,0.612550616264343,-0.435902178287506,0.659371674060822,0.078930102288723,-0.647568047046661,0.757908701896667,0.0743590220808983,-0.732295691967011,0.676914930343628,0.645412087440491,-0.585248291492462,0.490843862295151,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.485137194395065,-0.428027123212814,0.762518644332886,0.0743590220808983,-0.732295691967011,0.676914930343628,0.078930102288723,-0.647568047046661,0.757908701896667,-0.119093708693981,-0.53387188911438,0.837136447429657,0.125414818525314,-0.832001984119415,0.540410816669464,0.0743590220808983,-0.732295691967011,0.676914930343628,-0.485137194395065,-0.428027123212814,0.762518644332886,0.546313166618347,-0.300951540470123,0.781645774841309,0.0897415652871132,-0.61595892906189,0.782649993896484,0.078930102288723,-0.647568047046661,0.757908701896667,0.612550616264343,-0.435902178287506,0.659371674060822,0.0897415652871132,-0.61595892906189,0.782649993896484,-0.527550399303436,-0.67441987991333,0.51657372713089,-0.549701511859894,-0.519823312759399,0.653920412063599,0.078930102288723,-0.647568047046661,0.757908701896667,0.576319634914398,0.0662916451692581,0.814531207084656,0.0803298726677895,0.272869914770126,0.958691358566284,0.591780304908752,0.0913430228829384,0.8009073138237,0.786046326160431,0.0746424272656441,0.613644540309906,0.576319634914398,0.0662916451692581,0.814531207084656,0.350974529981613,-0.540442049503326,0.764682471752167,-0.119093708693981,-0.53387188911438,0.837136447429657,0.0803298726677895,0.272869914770126,0.958691358566284,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.239867821335793,-0.0863698795437813,0.966955900192261,0.244136393070221,0.145083606243134,0.95882648229599, 0.0296379756182432,0.164347007870674,0.985957264900208,0.536651909351349,-0.138671860098839,0.832331001758575,0.532816469669342,0.10447982698679,0.83975625038147,0.244136393070221,0.145083606243134,0.95882648229599,0.239867821335793,-0.0863698795437813,0.966955900192261,0.536214470863342,0.394264131784439,0.746344327926636,0.253624588251114,0.428919792175293,0.867007732391357,0.244136393070221,0.145083606243134,0.95882648229599,0.532816469669342,0.10447982698679,0.83975625038147,0.0497331917285919,0.445011228322983,0.894142985343933,0.0296379756182432,0.164347007870674,0.985957264900208,0.244136393070221,0.145083606243134,0.95882648229599,0.253624588251114,0.428919792175293,0.867007732391357,0.544139504432678,-0.298705726861954,0.784019768238068,0.238130986690521,-0.235158920288086,0.942334294319153,0.215388640761375,-0.476592898368835,0.852330327033997,0.511638343334198,-0.543274581432343,0.665641725063324,0.536651909351349,-0.138671860098839,0.832331001758575,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521,-0.235158920288086,0.942334294319153,0.544139504432678,-0.298705726861954,0.784019768238068,0.0126708010211587,-0.0581304989755154,0.99822860956192,0.000908877176698297,-0.206076413393021,0.97853547334671,0.238130986690521,-0.235158920288086,0.942334294319153,0.239867821335793,-0.0863698795437813,0.966955900192261,0.238130986690521,-0.235158920288086,0.942334294319153,0.000908877176698297,-0.206076413393021,0.97853547334671,-0.0191204845905304,-0.446781009435654,0.894439041614532,0.215388640761375,-0.476592898368835,0.852330327033997,0.856223344802856,0.13723511993885,-0.498044282197952,0.93711906671524,0.303550958633423,-0.172234460711479,0.979637861251831,-0.147638529539108,0.136060565710068,0.93777334690094,-0.280869245529175,-0.204190224409103,0.915319561958313,0.399081766605377,0.0540725849568844,0.898182094097137,-0.0604765526950359,0.435443967580795,0.979637861251831,-0.147638529539108,0.136060565710068,0.93711906671524,0.303550958633423,-0.172234460711479,0.612550616264343,-0.435902178287506,0.659371674060822, 0.645412087440491,-0.585248291492462,0.490843862295151,0.979637861251831,-0.147638529539108,0.136060565710068,0.898182094097137,-0.0604765526950359,0.435443967580795,0.632524311542511,-0.737463712692261,0.236770406365395,0.93777334690094,-0.280869245529175,-0.204190224409103,0.979637861251831,-0.147638529539108,0.136060565710068,0.645412087440491,-0.585248291492462,0.490843862295151,0.275395423173904,-0.612316191196442,0.741097986698151,0.589075446128845,-0.205572411417961,0.781492233276367,0.759909570217133,-0.165927812457085,0.628494560718536,0.59905880689621,-0.501385033130646,0.624292850494385,0.237821668386459,-0.891240954399109,0.386174082756042,-0.272507458925247,-0.860418200492859,0.430604517459869,0.275395423173904,-0.612316191196442,0.741097986698151,0.59905880689621,-0.501385033130646,0.624292850494385,-0.527550399303436,-0.67441987991333,0.51657372713089,0.0897415652871132,-0.61595892906189,0.782649993896484,0.275395423173904,-0.612316191196442,0.741097986698151,-0.272507458925247,-0.860418200492859,0.430604517459869,0.546313166618347,-0.300951540470123,0.781645774841309,0.589075446128845,-0.205572411417961,0.781492233276367,0.275395423173904,-0.612316191196442,0.741097986698151,0.0897415652871132,-0.61595892906189,0.782649993896484,0.507576704025269,-0.725169718265533,0.465290039777756,0.689145267009735,-0.603762626647949,0.400686323642731,0.511638343334198,-0.543274581432343,0.665641725063324,0.507576704025269,-0.725169718265533,0.465290039777756,0.513407528400421,-0.784644782543182,0.347484111785889,0.778993248939514,-0.607196033000946,0.156468689441681,0.704199492931366,-0.704627811908722,0.0871931314468384,0.689145267009735,-0.603762626647949,0.400686323642731,0.814013004302979,0.416528642177582,0.404829293489456,0.741662085056305,0.344577699899673,0.575502872467041,0.694613039493561,0.143838599324226,0.704856872558594,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561,0.143838599324226,0.704856872558594,0.741662085056305,0.344577699899673,0.575502872467041,0.855352699756622,0.226547658443451,0.46588408946991, 0.836100995540619,0.0841564238071442,0.542081892490387,0.589075446128845,-0.205572411417961,0.781492233276367,0.694613039493561,0.143838599324226,0.704856872558594,0.836100995540619,0.0841564238071442,0.542081892490387,0.759909570217133,-0.165927812457085,0.628494560718536,0.546313166618347,-0.300951540470123,0.781645774841309,0.73296993970871,0.0683575123548508,0.676817834377289,0.694613039493561,0.143838599324226,0.704856872558594,0.589075446128845,-0.205572411417961,0.781492233276367,-0.055518988519907,-0.839309513568878,0.540811538696289,-0.0675294324755669,-0.945460379123688,0.318660378456116,0.117540158331394,-0.936730265617371,0.329728245735168,0.220125123858452,-0.84959089756012,0.479312241077423,0.117540158331394,-0.936730265617371,0.329728245735168,0.411182582378387,-0.842439949512482,0.348172098398209,0.513407528400421,-0.784644782543182,0.347484111785889,0.220125123858452,-0.84959089756012,0.479312241077423,0.73296993970871,0.0683575123548508,0.676817834377289,0.546313166618347,-0.300951540470123,0.781645774841309,0.612550616264343,-0.435902178287506,0.659371674060822,0.898182094097137,-0.0604765526950359,0.435443967580795,0.771526336669922,-0.409758031368256,0.486667722463608,0.589298963546753,-0.771825730800629,0.238771393895149,0.237821668386459,-0.891240954399109,0.386174082756042,0.59905880689621,-0.501385033130646,0.624292850494385,0.846422255039215,-0.185521140694618,0.499150514602661,0.771526336669922,-0.409758031368256,0.486667722463608,0.59905880689621,-0.501385033130646,0.624292850494385,0.759909570217133,-0.165927812457085,0.628494560718536,0.771526336669922,-0.409758031368256,0.486667722463608,0.846422255039215,-0.185521140694618,0.499150514602661,0.777246952056885,-0.186122506856918,0.60103702545166,0.760827541351318,-0.370115906000137,0.53306257724762,0.589298963546753,-0.771825730800629,0.238771393895149,0.771526336669922,-0.409758031368256,0.486667722463608,0.760827541351318,-0.370115906000137,0.53306257724762,0.689145267009735,-0.603762626647949,0.400686323642731,0.704199492931366,-0.704627811908722,0.0871931314468384, 0.854965507984161,-0.114104993641377,0.505978286266327,0.940892815589905,-0.119216494262218,0.317030221223831,0.823821365833282,-0.474406152963638,0.310253411531448,0.560910940170288,-0.546258211135864,0.622077882289886,0.937154471874237,-0.0475939512252808,0.345653474330902,0.917503833770752,-0.132210671901703,0.375109404325485,0.916658163070679,-0.0698241367936134,0.393525570631027,0.916658163070679,-0.0698241367936134,0.393525570631027,0.917503833770752,-0.132210671901703,0.375109404325485,0.872779548168182,-0.198945015668869,0.445731669664383,0.855076372623444,-0.165702432394028,0.491311639547348,-0.220686122775078,-0.040834903717041,0.974489688873291,-0.186361730098724,-0.434708625078201,0.881077587604523,0.0312842912971973,-0.474717557430267,0.879582047462463,0.106603257358074,0.0133492052555084,0.994212031364441,-0.0349236838519573,-0.777106523513794,0.62839937210083,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0312842912971973,-0.474717557430267,0.879582047462463,-0.186361730098724,-0.434708625078201,0.881077587604523,0.301303088665009,-0.716448962688446,0.629219651222229,0.560910940170288,-0.546258211135864,0.622077882289886,0.823821365833282,-0.474406152963638,0.310253411531448,0.411182582378387,-0.842439949512482,0.348172098398209,0.760827541351318,-0.370115906000137,0.53306257724762,0.544139504432678,-0.298705726861954,0.784019768238068,0.511638343334198,-0.543274581432343,0.665641725063324,0.689145267009735,-0.603762626647949,0.400686323642731,0.536651909351349,-0.138671860098839,0.832331001758575,0.544139504432678,-0.298705726861954,0.784019768238068,0.760827541351318,-0.370115906000137,0.53306257724762,0.777246952056885,-0.186122506856918,0.60103702545166,0.742792665958405,-0.550313711166382,0.381331622600555,0.803535997867584,-0.553550720214844,0.2188870459795,0.897108614444733,-0.31337758898735,0.311433225870132,0.760169208049774,-0.346720576286316,0.549479365348816,0.821304857730865,-0.558016240596771,0.118643142282963,0.923712968826294,-0.295430272817612,0.243875607848167,0.897108614444733,-0.31337758898735,0.311433225870132, 0.803535997867584,-0.553550720214844,0.2188870459795,0.945337653160095,-0.174788698554039,0.275292009115219,0.899602174758911,-0.197590529918671,0.389453411102295,0.897108614444733,-0.31337758898735,0.311433225870132,0.923712968826294,-0.295430272817612,0.243875607848167,0.705349028110504,-0.217919707298279,0.674532234668732,0.760169208049774,-0.346720576286316,0.549479365348816,0.897108614444733,-0.31337758898735,0.311433225870132,0.899602174758911,-0.197590529918671,0.389453411102295,0.593307375907898,-0.0775594636797905,0.801230847835541,0.405026167631149,-0.171226277947426,0.898128807544708,0.401639640331268,-0.00309631112031639,0.915792524814606,0.577744483947754,0.0458397567272186,0.814929485321045,-0.00769979506731033,-0.155788585543633,0.987760424613953,0.205060333013535,0.0685160234570503,0.976348161697388,0.209787964820862,-0.0149007942527533,0.977633357048035,0.130675092339516,-0.201507270336151,0.9707310795784,0.613882482051849,0.099590003490448,0.783090114593506,0.621637463569641,0.0923129394650459,0.77784651517868,0.729625582695007,0.0742557868361473,0.679803311824799,0.613882482051849,0.099590003490448,0.783090114593506,0.729625582695007,0.0742557868361473,0.679803311824799,0.668389976024628,-0.0383556596934795,0.742821395397186,0.615384101867676,0.0611244365572929,0.785853803157806,0.520175099372864,-0.288751989603043,0.803766191005707,0.596563339233398,-0.0223739240318537,0.8022540807724,0.440964937210083,0.0207586232572794,0.897284269332886,0.356722086668015,-0.354729324579239,0.86424332857132,0.520175099372864,-0.288751989603043,0.803766191005707,0.356722086668015,-0.354729324579239,0.86424332857132,0.217255920171738,-0.631381034851074,0.744417786598206,0.34566730260849,-0.589025497436523,0.73045402765274,0.553863286972046,-0.30215710401535,0.77584570646286,0.520175099372864,-0.288751989603043,0.803766191005707,0.34566730260849,-0.589025497436523,0.73045402765274,0.266091585159302,-0.603160440921783,0.751926004886627,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.499244570732117,-0.495106011629105,-0.711073040962219, -0.696429193019867,-0.116415850818157,-0.708119869232178,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.356722086668015,-0.354729324579239,0.86424332857132,0.440964937210083,0.0207586232572794,0.897284269332886,0.191416949033737,-0.0921172648668289,0.977176547050476,0.164827063679695,-0.547387719154358,0.820486903190613,0.356722086668015,-0.354729324579239,0.86424332857132,0.164827063679695,-0.547387719154358,0.820486903190613,0.114735066890717,-0.656680226325989,0.745390474796295,0.217255920171738,-0.631381034851074,0.744417786598206,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.0952682122588158,-0.943798363208771,-0.316494256258011,-0.438083231449127,-0.825523734092712,-0.355800002813339,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.05385497584939,-0.996109485626221,0.06975357234478,0.596563339233398,-0.0223739240318537,0.8022540807724,0.520175099372864,-0.288751989603043,0.803766191005707,0.553863286972046,-0.30215710401535,0.77584570646286,0.607095539569855,-0.200262412428856,0.768979847431183,-0.070097453892231,-0.765305280685425,-0.639839172363281,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0121895968914032,-0.964383244514465,-0.26422792673111,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.0417160429060459,-0.96068263053894,-0.274497121572495, 0.0655759945511818,-0.996207714080811,0.0571834556758404,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,-0.0787644907832146,-0.96135801076889,-0.263793289661407,0.0121895968914032,-0.964383244514465,-0.26422792673111,0.00571701768785715,-0.999931693077087,-0.0101942336186767,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.758401393890381,-0.574856221675873,-0.307193249464035,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0125365713611245,-0.668434202671051,0.743665635585785,0.208488672971725,-0.647888123989105,0.732648193836212,0.171075537800789,-0.616661608219147,0.768415033817291,0.0412249267101288,-0.205861806869507,0.977712333202362,0.0592443346977234,-0.610537111759186,0.789768636226654,0.171075537800789,-0.616661608219147,0.768415033817291,0.0600041374564171,-0.192453533411026,0.979469835758209,0.00068405584897846,-0.208776980638504,0.977963030338287,-0.0353972837328911,-0.630800306797028,0.775137424468994,0.0592443346977234,-0.610537111759186,0.789768636226654,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0406640991568565,-0.687796175479889,0.724763989448547,0.0125365713611245,-0.668434202671051,0.743665635585785,0.0592443346977234,-0.610537111759186,0.789768636226654,-0.0353972837328911,-0.630800306797028,0.775137424468994,0.443391680717468,-0.0999263972043991,0.89074045419693,0.511712968349457,-0.26713839173317,0.816570222377777,0.477897197008133,-0.208041027188301,0.853424370288849,0.164051368832588,-0.273042142391205,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.173163160681725,-0.359727561473846,0.916848182678223,0.164051368832588,-0.273042142391205,0.947910964488983,0.477897197008133,-0.208041027188301,0.853424370288849, -0.05385497584939,-0.996109485626221,0.06975357234478,0.0592407323420048,-0.802932441234589,0.593118906021118,0.163204148411751,-0.824093818664551,0.542433202266693,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.114735066890717,-0.656680226325989,0.745390474796295,0.208488672971725,-0.647888123989105,0.732648193836212,0.163204148411751,-0.824093818664551,0.542433202266693,0.0592407323420048,-0.802932441234589,0.593118906021118,0.163204148411751,-0.824093818664551,0.542433202266693,0.208488672971725,-0.647888123989105,0.732648193836212,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.00571701768785715,-0.999931693077087,-0.0101942336186767,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.163204148411751,-0.824093818664551,0.542433202266693,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.525104641914368,-0.419060587882996,0.740711390972137,0.0940685495734215,-0.732769310474396,0.673943758010864,-0.474541693925858,-0.67278927564621,0.567595541477203,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399,0.912039756774902,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.0417160429060459,-0.96068263053894,-0.274497121572495,0.0705975443124771,-0.761587023735046,-0.644205927848816,-0.05385497584939,-0.996109485626221,0.06975357234478,0.0655759945511818,-0.996207714080811,0.0571834556758404,0.0417160429060459,-0.96068263053894,-0.274497121572495,-0.0952682122588158,-0.943798363208771,-0.316494256258011,0.680179119110107,0.270307511091232,0.681388378143311,-0.111705176532269,0.976534187793732,0.18412746489048,0.0118562933057547,0.974313676357269,0.224883005023003,0.714891254901886,0.201140508055687,0.669681310653687,0.0228955876082182,0.892617464065552,0.450233042240143,0.143662974238396,0.945594608783722,0.29191067814827,0.00479412823915482,0.900386512279511,0.435064554214478,0.221466824412346,0.900687992572784,0.373782753944397, 0.0228955876082182,0.892617464065552,0.450233042240143,0.221466824412346,0.900687992572784,0.373782753944397,0.256553143262863,0.759260475635529,0.598083674907684,0.026754243299365,0.843723058700562,0.53611159324646,-0.0965566337108612,0.382317036390305,0.918972492218018,0.119953289628029,0.283690631389618,0.951383650302887,0.134373739361763,0.867044448852539,0.479768335819244,0.104800805449486,0.884988248348236,0.453665733337402,0.134373739361763,0.867044448852539,0.479768335819244,0.138274729251862,0.981688380241394,-0.131026938557625,0.234877377748489,0.967058181762695,0.0981385260820389,0.104800805449486,0.884988248348236,0.453665733337402,0.00479412823915482,0.900386512279511,0.435064554214478,-0.194994285702705,0.859172344207764,0.473075121641159,0.161482572555542,0.960672616958618,0.225901573896408,0.221466824412346,0.900687992572784,0.373782753944397,-0.258119583129883,0.745032370090485,0.615061819553375,0.0118562933057547,0.974313676357269,0.224883005023003,0.161482572555542,0.960672616958618,0.225901573896408,-0.194994285702705,0.859172344207764,0.473075121641159,-0.111705176532269,0.976534187793732,0.18412746489048,0.118274427950382,0.894158720970154,0.431846410036087,0.161482572555542,0.960672616958618,0.225901573896408,0.0118562933057547,0.974313676357269,0.224883005023003,0.256553143262863,0.759260475635529,0.598083674907684,0.221466824412346,0.900687992572784,0.373782753944397,0.161482572555542,0.960672616958618,0.225901573896408,0.118274427950382,0.894158720970154,0.431846410036087,0.357361167669296,0.242811009287834,0.901851356029511,0.578032433986664,0.306231528520584,0.756373405456543,0.195265397429466,0.864439308643341,0.463266789913177,0.149628981947899,0.846252083778381,0.511339902877808,0.195265397429466,0.864439308643341,0.463266789913177,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.0952406078577042,0.956162750720978,-0.276915192604065,0.149628981947899,0.846252083778381,0.511339902877808,0.802525162696838,0.518118143081665,0.295815676450729,0.466519266366959,0.882316112518311,0.0622739568352699, 0.237646877765656,0.914831399917603,0.326507955789566,0.700553953647614,0.463066458702087,0.542949020862579,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.457484602928162,0.835335671901703,-0.304831385612488,0.237646877765656,0.914831399917603,0.326507955789566,0.466519266366959,0.882316112518311,0.0622739568352699,-0.357527554035187,0.888932764530182,-0.286308616399765,0.195265397429466,0.864439308643341,0.463266789913177,0.237646877765656,0.914831399917603,0.326507955789566,-0.457484602928162,0.835335671901703,-0.304831385612488,0.578032433986664,0.306231528520584,0.756373405456543,0.700553953647614,0.463066458702087,0.542949020862579,0.237646877765656,0.914831399917603,0.326507955789566,0.195265397429466,0.864439308643341,0.463266789913177,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.462323904037476,0.371266037225723,-0.805244147777557,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.611508309841156,0.264030992984772,-0.7458855509758,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.462323904037476,0.371266037225723,-0.805244147777557,0.897598922252655,-0.0851877480745316,0.432503432035446,0.534866094589233,0.53300929069519,0.655606091022491,0.970540165901184,0.124821022152901,0.206086173653603,0.971762239933014,-0.143596902489662,0.187237858772278,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.0532905422151089,-0.321431696414948,0.945432066917419,0.542791187763214,-0.0487677082419395,0.838450610637665,0.477409869432449,-0.0182194709777832,0.878491818904877,0.0532905422151089,-0.321431696414948,0.945432066917419,0.124305054545403,-0.308796167373657,0.942970395088196,0.507363021373749,-0.115291275084019,0.853985190391541,0.542791187763214,-0.0487677082419395,0.838450610637665,0.927076876163483,-0.29800683259964,0.227421119809151,0.960171759128571,-0.181689232587814,0.212271526455879,0.887619376182556,-0.256067276000977,0.382833331823349,0.875984609127045,-0.341396063566208,0.340734094381332, 0.205060333013535,0.0685160234570503,0.976348161697388,0.469725012779236,0.301579147577286,0.829703807830811,0.328607112169266,0.0718188062310219,0.941732108592987,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.499466627836227,0.169172704219818,0.849655032157898,0.495325356721878,-0.15430523455143,0.854893386363983,0.32480525970459,-0.177078545093536,0.929055869579315,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.806693911552429,-0.123899839818478,0.577835381031036,0.839345693588257,-0.00945493672043085,0.543515801429749,0.936820507049561,0.0892298817634583,0.338238596916199,0.733202934265137,-0.122967794537544,0.668799161911011,0.785013139247894,0.0451312512159348,0.617832958698273,0.839345693588257,-0.00945493672043085,0.543515801429749,0.806693911552429,-0.123899839818478,0.577835381031036,0.679168462753296,-0.108902141451836,0.725858509540558,0.936820507049561,0.0892298817634583,0.338238596916199,0.839345693588257,-0.00945493672043085,0.543515801429749,0.52197939157486,-0.246480882167816,0.816568851470947,0.314269214868546,-0.177054598927498,0.932677090167999,0.679168462753296,-0.108902141451836,0.725858509540558,0.52197939157486,-0.246480882167816,0.816568851470947,0.0854972749948502,-0.343144297599792,0.935383439064026,0.0854972749948502,-0.343144297599792,0.935383439064026,0.52197939157486,-0.246480882167816,0.816568851470947,0.36207702755928,0.0357636697590351,0.931461870670319,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.767594814300537,-0.318948030471802,0.555940985679626,0.572291314601898,-0.52212518453598,0.632351100444794,0.743626773357391,-0.236951321363449,0.625198543071747,0.883507072925568,-0.0658736377954483,0.463762849569321,0.767594814300537,-0.318948030471802,0.555940985679626,0.883507072925568,-0.0658736377954483,0.463762849569321,0.922792911529541,0.0174659602344036,0.384900212287903,0.91918009519577,-0.0705135017633438,0.387473553419113,0.683746695518494,-0.463673830032349,0.563468754291534,0.767594814300537,-0.318948030471802,0.555940985679626, 0.91918009519577,-0.0705135017633438,0.387473553419113,0.813478171825409,-0.273027837276459,0.513526141643524,0.767594814300537,-0.318948030471802,0.555940985679626,0.683746695518494,-0.463673830032349,0.563468754291534,0.629647791385651,-0.52997088432312,0.568044483661652,0.572291314601898,-0.52212518453598,0.632351100444794,0.939345419406891,-0.108932219445705,0.325213760137558,0.950795531272888,-0.131767466664314,0.280401825904846,0.964455902576447,-0.157870531082153,0.211900100111961,0.964605271816254,-0.126861244440079,0.231177195906639,0.93361908197403,-0.0509388744831085,0.354627430438995,0.939345419406891,-0.108932219445705,0.325213760137558,0.964605271816254,-0.126861244440079,0.231177195906639,0.961285889148712,-0.0557491593062878,0.269854545593262,0.821834087371826,-0.135336369276047,0.55341911315918,0.939345419406891,-0.108932219445705,0.325213760137558,0.93361908197403,-0.0509388744831085,0.354627430438995,0.800939977169037,-0.0900113806128502,0.59194016456604,0.883507072925568,-0.0658736377954483,0.463762849569321,0.743626773357391,-0.236951321363449,0.625198543071747,0.775663673877716,0.0339613817632198,0.630232095718384,0.817228376865387,-0.0154423741623759,0.576107025146484,0.458424359560013,-0.261700868606567,0.849329054355621,0.540978610515594,-0.216916099190712,0.812582015991211,0.852472126483917,-0.133455187082291,0.505451321601868,0.821834087371826,-0.135336369276047,0.55341911315918,0.458424359560013,-0.261700868606567,0.849329054355621,0.821834087371826,-0.135336369276047,0.55341911315918,0.800939977169037,-0.0900113806128502,0.59194016456604,0.373029977083206,-0.317807883024216,0.871691942214966,0.288555771112442,-0.2911037504673,0.912137150764465,0.373029977083206,-0.317807883024216,0.871691942214966,0.800939977169037,-0.0900113806128502,0.59194016456604,0.680521726608276,-0.105455316603184,0.725099503993988,0.288555771112442,-0.2911037504673,0.912137150764465,0.680521726608276,-0.105455316603184,0.725099503993988,0.54023802280426,-0.148879259824753,0.828237771987915,0.189583629369736,-0.286395132541656,0.939167618751526, 0.314269214868546,-0.177054598927498,0.932677090167999,0.629274904727936,-0.103665113449097,0.770238041877747,0.890204846858978,0.0921151489019394,0.446150302886963,0.679168462753296,-0.108902141451836,0.725858509540558,0.629274904727936,-0.103665113449097,0.770238041877747,0.874416053295136,-0.00546242296695709,0.485146045684814,0.890166699886322,0.437690794467926,-0.12660938501358,0.890204846858978,0.0921151489019394,0.446150302886963,0.874416053295136,-0.00546242296695709,0.485146045684814,0.629274904727936,-0.103665113449097,0.770238041877747,0.560746312141418,-0.00312843848951161,0.827981770038605,0.787108600139618,0.00810690317302942,0.616761207580566,0.314269214868546,-0.177054598927498,0.932677090167999,0.430652797222137,0.0691945105791092,0.89986127614975,0.560746312141418,-0.00312843848951161,0.827981770038605,0.629274904727936,-0.103665113449097,0.770238041877747,0.536631107330322,0.258791983127594,0.803152441978455,0.649454653263092,0.203223869204521,0.732740581035614,0.560746312141418,-0.00312843848951161,0.827981770038605,0.430652797222137,0.0691945105791092,0.89986127614975,0.793840944766998,0.179479137063026,0.581036806106567,0.787108600139618,0.00810690317302942,0.616761207580566,0.560746312141418,-0.00312843848951161,0.827981770038605,0.649454653263092,0.203223869204521,0.732740581035614,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.936820507049561,0.0892298817634583,0.338238596916199,0.97348940372467,0.2094656676054,0.0918834507465363,0.744540750980377,0.353585213422775,-0.566247820854187,0.679168462753296,-0.108902141451836,0.725858509540558,0.890204846858978,0.0921151489019394,0.446150302886963,0.97348940372467,0.2094656676054,0.0918834507465363,0.936820507049561,0.0892298817634583,0.338238596916199,0.890166699886322,0.437690794467926,-0.12660938501358,0.744540750980377,0.353585213422775,-0.566247820854187,0.97348940372467,0.2094656676054,0.0918834507465363,0.890204846858978,0.0921151489019394,0.446150302886963,0.964605271816254,-0.126861244440079,0.231177195906639,0.964455902576447,-0.157870531082153,0.211900100111961, 0.896426856517792,-0.172908827662468,0.408070415258408,0.901179313659668,-0.204281270503998,0.382289171218872,0.887543320655823,-0.171314582228661,0.427689343690872,0.961285889148712,-0.0557491593062878,0.269854545593262,0.964605271816254,-0.126861244440079,0.231177195906639,0.901179313659668,-0.204281270503998,0.382289171218872,0.793840944766998,0.179479137063026,0.581036806106567,0.649454653263092,0.203223869204521,0.732740581035614,0.651595652103424,0.352775752544403,0.671544790267944,0.776918292045593,0.306892603635788,0.549740731716156,0.536631107330322,0.258791983127594,0.803152441978455,0.469725012779236,0.301579147577286,0.829703807830811,0.651595652103424,0.352775752544403,0.671544790267944,0.649454653263092,0.203223869204521,0.732740581035614,0.333709418773651,0.169013321399689,0.927400946617126,0.651595652103424,0.352775752544403,0.671544790267944,0.469725012779236,0.301579147577286,0.829703807830811,0.205060333013535,0.0685160234570503,0.976348161697388,0.288555771112442,-0.2911037504673,0.912137150764465,0.288461953401566,-0.251531571149826,0.923862278461456,0.345462441444397,-0.298967152833939,0.889536023139954,0.373029977083206,-0.317807883024216,0.871691942214966,0.295946687459946,-0.143637612462044,0.944343090057373,0.124305054545403,-0.308796167373657,0.942970395088196,0.0532905422151089,-0.321431696414948,0.945432066917419,0.103208005428314,-0.00969436671584845,0.994612574577332,0.103208005428314,-0.00969436671584845,0.994612574577332,0.0532905422151089,-0.321431696414948,0.945432066917419,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.36207702755928,0.0357636697590351,0.931461870670319,0.765106797218323,-0.350072890520096,0.540426254272461,0.875984609127045,-0.341396063566208,0.340734094381332,0.887619376182556,-0.256067276000977,0.382833331823349,0.75313264131546,-0.288527101278305,0.591221868991852,0.922792911529541,0.0174659602344036,0.384900212287903,0.93361908197403,-0.0509388744831085,0.354627430438995,0.961285889148712,-0.0557491593062878,0.269854545593262,0.91918009519577,-0.0705135017633438,0.387473553419113, 0.458424359560013,-0.261700868606567,0.849329054355621,0.373029977083206,-0.317807883024216,0.871691942214966,0.345462441444397,-0.298967152833939,0.889536023139954,0.421490222215652,-0.217597857117653,0.880339205265045,0.458424359560013,-0.261700868606567,0.849329054355621,0.421490222215652,-0.217597857117653,0.880339205265045,0.501314342021942,-0.180266559123993,0.846278846263886,0.540978610515594,-0.216916099190712,0.812582015991211,0.775663673877716,0.0339613817632198,0.630232095718384,0.743626773357391,-0.236951321363449,0.625198543071747,0.527478218078613,-0.385366201400757,0.757139086723328,0.702920734882355,-0.00120963365770876,0.711267173290253,0.314269214868546,-0.177054598927498,0.932677090167999,0.0854972749948502,-0.343144297599792,0.935383439064026,0.322372585535049,-0.0660212859511375,0.944307744503021,0.322372585535049,-0.0660212859511375,0.944307744503021,0.0854972749948502,-0.343144297599792,0.935383439064026,-0.00456069782376289,-0.34082293510437,0.940116465091705,0.477409869432449,-0.0182194709777832,0.878491818904877,0.314269214868546,-0.177054598927498,0.932677090167999,0.322372585535049,-0.0660212859511375,0.944307744503021,0.508330583572388,0.166116118431091,0.844988405704498,0.430652797222137,0.0691945105791092,0.89986127614975,0.430652797222137,0.0691945105791092,0.89986127614975,0.508330583572388,0.166116118431091,0.844988405704498,0.499466627836227,0.169172704219818,0.849655032157898,0.536631107330322,0.258791983127594,0.803152441978455,0.668687582015991,0.158593982458115,0.726432919502258,0.477409869432449,-0.0182194709777832,0.878491818904877,0.542791187763214,-0.0487677082419395,0.838450610637665,0.702920734882355,-0.00120963365770876,0.711267173290253,0.85576856136322,-0.00803003925830126,0.517296552658081,0.922792911529541,0.0174659602344036,0.384900212287903,0.883507072925568,-0.0658736377954483,0.463762849569321,0.817228376865387,-0.0154423741623759,0.576107025146484,0.821834087371826,-0.135336369276047,0.55341911315918,0.852472126483917,-0.133455187082291,0.505451321601868,0.950795531272888,-0.131767466664314,0.280401825904846, 0.939345419406891,-0.108932219445705,0.325213760137558,0.813478171825409,-0.273027837276459,0.513526141643524,0.91918009519577,-0.0705135017633438,0.387473553419113,0.961285889148712,-0.0557491593062878,0.269854545593262,0.887543320655823,-0.171314582228661,0.427689343690872,0.927076876163483,-0.29800683259964,0.227421119809151,0.926659166812897,-0.245477139949799,0.284681916236877,0.966324627399445,-0.156342566013336,0.204386278986931,0.960171759128571,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.926659166812897,-0.245477139949799,0.284681916236877,0.750554323196411,-0.229917243123055,0.619521021842957,0.809566378593445,-0.159671008586884,0.564895987510681,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.915560901165009,-0.141839787364006,0.376337260007858,0.820341229438782,-0.113342881202698,0.560529828071594,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.956220626831055,-0.152332276105881,0.249873846769333,0.915560901165009,-0.141839787364006,0.376337260007858,0.362627446651459,-0.180693462491035,0.914249002933502,0.570054233074188,-0.200027942657471,0.796885788440704,0.400608420372009,-0.480024576187134,0.780441761016846,0.11539563536644,-0.528798937797546,0.840865969657898,0.350974529981613,-0.540442049503326,0.764682471752167,0.560910940170288,-0.546258211135864,0.622077882289886,0.432139188051224,-0.378973364830017,0.818312227725983,0.461174815893173,-0.519026458263397,0.719673037528992,0.432139188051224,-0.378973364830017,0.818312227725983,0.416703939437866,-0.0255245417356491,0.908683836460114,0.56849592924118,-0.125116035342216,0.813116490840912,0.461174815893173,-0.519026458263397,0.719673037528992,0.0348379723727703,0.239972576498985,0.970154345035553,0.026632534340024,0.124120466411114,0.991909682750702,-0.147914990782738,0.17213037610054,0.973905682563782,0.00455546798184514,0.298394352197647,0.954431772232056,0.809566378593445,-0.159671008586884,0.564895987510681, 0.750554323196411,-0.229917243123055,0.619521021842957,0.705349028110504,-0.217919707298279,0.674532234668732,0.634909212589264,-0.137729376554489,0.760211110115051,0.800201892852783,0.430362582206726,0.417690068483353,0.793976366519928,0.302302360534668,0.527460694313049,0.903869867324829,0.198627322912216,0.37890163064003,0.854240536689758,0.355053037405014,0.379750460386276,0.793774306774139,0.385858178138733,0.470144480466843,0.843018114566803,0.354378879070282,0.404643177986145,0.800201892852783,0.430362582206726,0.417690068483353,0.854240536689758,0.355053037405014,0.379750460386276,0.595219552516937,0.51872980594635,0.613704323768616,0.800201892852783,0.430362582206726,0.417690068483353,0.843018114566803,0.354378879070282,0.404643177986145,0.688724040985107,0.428849041461945,0.584591865539551,0.536214470863342,0.394264131784439,0.746344327926636,0.793976366519928,0.302302360534668,0.527460694313049,0.800201892852783,0.430362582206726,0.417690068483353,0.595219552516937,0.51872980594635,0.613704323768616,0.854240536689758,0.355053037405014,0.379750460386276,0.903869867324829,0.198627322912216,0.37890163064003,0.855352699756622,0.226547658443451,0.46588408946991,0.857260406017303,0.312566876411438,0.409153461456299,0.688724040985107,0.428849041461945,0.584591865539551,0.728551387786865,0.287864476442337,0.621568083763123,0.278584688901901,0.430597722530365,0.858473181724548,0.279262810945511,0.544022977352142,0.791234016418457,0.718716561794281,0.339281320571899,0.60690575838089,0.27374255657196,0.526692390441895,0.804773390293121,0.278584688901901,0.430597722530365,0.858473181724548,0.728551387786865,0.287864476442337,0.621568083763123,0.0571579374372959,0.555576980113983,0.829498171806335,0.0507387444376946,0.459851264953613,0.886545181274414,0.278584688901901,0.430597722530365,0.858473181724548,0.27374255657196,0.526692390441895,0.804773390293121,0.0581676289439201,0.571192860603333,0.818752288818359,0.279262810945511,0.544022977352142,0.791234016418457,0.278584688901901,0.430597722530365,0.858473181724548, 0.0507387444376946,0.459851264953613,0.886545181274414,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.332773357629776,-0.801452815532684,0.49692577123642,0.353568494319916,-0.776771426200867,0.521167457103729,0.346010982990265,0.0731605663895607,0.935373663902283,0.0857556685805321,0.213776871562004,0.973111212253571,0.237495303153992,-0.275904625654221,0.931382119655609,0.402090311050415,-0.284287929534912,0.870346903800964,0.237495303153992,-0.275904625654221,0.931382119655609,0.0857556685805321,0.213776871562004,0.973111212253571,0.174916133284569,0.190565213561058,0.965965449810028,0.173318073153496,-0.274096310138702,0.945955634117126,0.332773357629776,-0.801452815532684,0.49692577123642,0.237495303153992,-0.275904625654221,0.931382119655609,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579,0.524562180042267,0.557120144367218,0.203072413802147,0.805219650268555,0.663587033748627,0.242647290229797,0.707654237747192,0.594232082366943,0.290724605321884,0.749911665916443,0.428730636835098,0.26745393872261,0.862935900688171,0.481910198926926,0.246677935123444,0.840780913829803,0.562969863414764,0.141692653298378,0.81424081325531,0.557120144367218,0.203072413802147,0.805219650268555,0.481910198926926,0.246677935123444,0.840780913829803,0.508710622787476,0.190386489033699,0.839622795581818,0.471029788255692,0.166954964399338,0.86617374420166,0.450006783008575,0.263622760772705,0.853227376937866,0.557120144367218,0.203072413802147,0.805219650268555,0.562969863414764,0.141692653298378,0.81424081325531,0.556747674942017,0.38243293762207,0.737412452697754,0.663587033748627,0.242647290229797,0.707654237747192,0.557120144367218,0.203072413802147,0.805219650268555,0.450006783008575,0.263622760772705,0.853227376937866,0.465027630329132,-0.875830411911011,-0.129113703966141,0.470402508974075,-0.871353209018707,-0.139517307281494,0.282156497240067,-0.915852665901184,-0.285659939050674,0.28289994597435,-0.924392461776733,-0.255863577127457, 0.600540995597839,-0.799374520778656,-0.0187329761683941,0.470402508974075,-0.871353209018707,-0.139517307281494,0.465027630329132,-0.875830411911011,-0.129113703966141,0.638466238975525,-0.769491136074066,0.0156274978071451,-0.0377323105931282,-0.656355738639832,0.753507435321808,0.0476435497403145,-0.676355302333832,0.73503303527832,0.101414501667023,-0.396623194217682,0.912362396717072,-0.0135245211422443,-0.380902349948883,0.924516320228577,0.0903236120939255,-0.645915448665619,0.758046746253967,0.226432472467422,-0.391454815864563,0.891903281211853,0.101414501667023,-0.396623194217682,0.912362396717072,0.0476435497403145,-0.676355302333832,0.73503303527832,0.315978825092316,0.0904445722699165,0.944445431232452,0.178787171840668,0.10878062993288,0.977855801582336,0.101414501667023,-0.396623194217682,0.912362396717072,0.226432472467422,-0.391454815864563,0.891903281211853,0.0226862858980894,0.138102903962135,0.990158021450043,-0.0135245211422443,-0.380902349948883,0.924516320228577,0.101414501667023,-0.396623194217682,0.912362396717072,0.178787171840668,0.10878062993288,0.977855801582336,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.993429064750671,-0.113890402019024,0.0113009223714471,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.982208073139191,-0.177859634160995,-0.0602763295173645,0.698544383049011,-0.714900195598602,0.0308788027614355,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.638466238975525,-0.769491136074066,0.0156274978071451,0.727549016475677,-0.679640352725983,0.0936024785041809,0.807879209518433,-0.580146849155426,0.103734038770199, 0.698544383049011,-0.714900195598602,0.0308788027614355,0.727549016475677,-0.679640352725983,0.0936024785041809,0.772367715835571,-0.599683940410614,0.209349811077118,0.744709670543671,0.422629773616791,0.516518652439117,0.524678170681,0.559116363525391,0.641951441764832,0.623485326766968,0.449957937002182,0.639377772808075,0.773433268070221,0.347118884325027,0.53038614988327,0.956220626831055,-0.152332276105881,0.249873846769333,0.988306105136871,-0.150656268000603,-0.0235306043177843,0.993429064750671,-0.113890402019024,0.0113009223714471,0.976429760456085,-0.14936164021492,0.155807659029961,0.93977153301239,0.0100719593465328,0.341654866933823,0.947793483734131,-0.0109208915382624,0.318697780370712,0.949501037597656,-0.133338466286659,0.284022271633148,0.950774133205414,-0.180742517113686,0.25171560049057,0.94478839635849,-0.0280621573328972,0.326477229595184,0.93977153301239,0.0100719593465328,0.341654866933823,0.950774133205414,-0.180742517113686,0.25171560049057,0.949546575546265,-0.188553437590599,0.250617027282715,0.921219646930695,-0.0589233264327049,0.384554862976074,0.93503212928772,0.00599651364609599,0.354512244462967,0.93977153301239,0.0100719593465328,0.341654866933823,0.94478839635849,-0.0280621573328972,0.326477229595184,0.961935639381409,0.00657567568123341,0.273196935653687,0.947793483734131,-0.0109208915382624,0.318697780370712,0.93977153301239,0.0100719593465328,0.341654866933823,0.93503212928772,0.00599651364609599,0.354512244462967,0.934174954891205,-0.332788705825806,0.128719761967659,0.916550815105438,-0.369929283857346,0.151943743228912,0.950774133205414,-0.180742517113686,0.25171560049057,0.949501037597656,-0.133338466286659,0.284022271633148,0.900704562664032,-0.383264392614365,0.204547420144081,0.949546575546265,-0.188553437590599,0.250617027282715,0.950774133205414,-0.180742517113686,0.25171560049057,0.916550815105438,-0.369929283857346,0.151943743228912,0.346010982990265,0.0731605663895607,0.935373663902283,0.316976845264435,0.303443849086761,0.898580849170685,0.109994232654572,0.335926622152328,0.935443520545959, 0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328,0.935443520545959,0.316976845264435,0.303443849086761,0.898580849170685,0.37644562125206,0.38054347038269,0.844674706459045,0.33416548371315,0.26105335354805,0.905640423297882,0.410660326480865,0.0589907094836235,0.909878134727478,0.280919551849365,0.197001457214355,0.939294755458832,0.109994232654572,0.335926622152328,0.935443520545959,0.33416548371315,0.26105335354805,0.905640423297882,0.0857556685805321,0.213776871562004,0.973111212253571,0.109994232654572,0.335926622152328,0.935443520545959,0.280919551849365,0.197001457214355,0.939294755458832,0.174916133284569,0.190565213561058,0.965965449810028,0.174435555934906,-0.932725489139557,-0.315587401390076,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.200176298618317,-0.953467607498169,-0.225452929735184,0.28289994597435,-0.924392461776733,-0.255863577127457,0.174435555934906,-0.932725489139557,-0.315587401390076,0.200176298618317,-0.953467607498169,-0.225452929735184,0.304112553596497,-0.921620965003967,-0.241102367639542,0.174435555934906,-0.932725489139557,-0.315587401390076,0.28289994597435,-0.924392461776733,-0.255863577127457,0.282156497240067,-0.915852665901184,-0.285659939050674,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.174435555934906,-0.932725489139557,-0.315587401390076,0.168268576264381,-0.926923274993896,-0.335408568382263,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.591701328754425,-0.0445454604923725,0.804925620555878,0.56849592924118,-0.125116035342216,0.813116490840912,0.44965198636055,0.140096634626389,0.882148504257202,0.583943843841553,0.131935343146324,0.801001012325287,0.414541780948639,0.400993496179581,0.816920638084412,0.611575484275818,0.314111411571503,0.726160764694214,0.610058009624481,0.18056558072567,0.771508455276489,0.491490423679352,0.244152218103409,0.835958659648895,0.637141883373261,-0.082910381257534,0.766274154186249, 0.602697968482971,-0.102753959596157,0.791325986385345,0.830796539783478,-0.141607835888863,0.538260519504547,0.846625864505768,-0.12819692492485,0.516517341136932,0.602697968482971,-0.102753959596157,0.791325986385345,0.542096614837646,-0.0831166654825211,0.836195468902588,0.797767400741577,-0.104994267225266,0.593753576278687,0.830796539783478,-0.141607835888863,0.538260519504547,0.851511597633362,-0.5011847615242,0.154083982110024,0.664332985877991,-0.312286198139191,0.679072141647339,0.642606198787689,-0.0799093768000603,0.762018263339996,0.733202934265137,-0.122967794537544,0.668799161911011,0.664332985877991,-0.312286198139191,0.679072141647339,0.591701328754425,-0.0445454604923725,0.804925620555878,0.568371534347534,0.0187626089900732,0.822558045387268,0.642606198787689,-0.0799093768000603,0.762018263339996,0.329291462898254,-0.460140645503998,0.824522733688354,0.437306433916092,-0.371932566165924,0.818797469139099,0.533053755760193,0.0411353260278702,0.845080852508545,0.351316899061203,-0.0729207322001457,0.933412551879883,0.292688071727753,-0.580336809158325,0.759962379932404,0.329291462898254,-0.460140645503998,0.824522733688354,0.351316899061203,-0.0729207322001457,0.933412551879883,0.335490047931671,-0.171642184257507,0.926275014877319,0.490798503160477,-0.859692454338074,-0.141582772135735,0.523316979408264,-0.825681805610657,-0.210686638951302,0.671372294425964,-0.724817991256714,-0.15459018945694,0.645513415336609,-0.755210697650909,-0.113882429897785,0.537862658500671,-0.839294493198395,-0.0793002098798752,0.499172002077103,-0.857490539550781,-0.124648600816727,0.490798503160477,-0.859692454338074,-0.141582772135735,0.645513415336609,-0.755210697650909,-0.113882429897785,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.630890548229218,-0.774750173091888,0.0417049825191498,0.490798503160477,-0.859692454338074,-0.141582772135735,0.501666784286499,-0.849441289901733,-0.163646027445793,0.435357719659805,-0.872423410415649,-0.222128495573998,0.490798503160477,-0.859692454338074,-0.141582772135735, 0.499172002077103,-0.857490539550781,-0.124648600816727,0.501666784286499,-0.849441289901733,-0.163646027445793,0.630890548229218,-0.774750173091888,0.0417049825191498,0.523316979408264,-0.825681805610657,-0.210686638951302,0.490798503160477,-0.859692454338074,-0.141582772135735,0.965503036975861,0.206421509385109,0.158726423978806,0.967272758483887,0.0499838180840015,0.248767033219337,0.980852127075195,0.00218713283538818,0.194741636514664,0.96669465303421,0.168093785643578,0.192991986870766,0.980899035930634,0.0846881344914436,0.175114318728447,0.975037813186646,0.14565335214138,0.167589843273163,0.965288519859314,0.151292905211449,0.212904900312424,0.965503036975861,0.206421509385109,0.158726423978806,0.980899035930634,0.0846881344914436,0.175114318728447,0.974559843540192,0.0402764715254307,0.220478907227516,0.926979184150696,-0.0986248403787613,0.36191537976265,0.967272758483887,0.0499838180840015,0.248767033219337,0.965503036975861,0.206421509385109,0.158726423978806,0.965288519859314,0.151292905211449,0.212904900312424,0.945337653160095,-0.174788698554039,0.275292009115219,0.947748720645905,-0.180222257971764,0.263234436511993,0.936089217662811,-0.214836105704308,0.278536230325699,0.941718637943268,-0.180898189544678,0.283622801303864,0.947748720645905,-0.180222257971764,0.263234436511993,0.96362441778183,-0.210319370031357,0.16490513086319,0.949846565723419,-0.197867274284363,0.242157250642776,0.936089217662811,-0.214836105704308,0.278536230325699,0.9190753698349,-0.11298330873251,0.377538323402405,0.935290277004242,-0.181792959570885,0.303617179393768,0.937723875045776,-0.0835999995470047,0.337171912193298,0.909473538398743,-0.0684049502015114,0.410095930099487,0.949846565723419,-0.197867274284363,0.242157250642776,0.964770019054413,-0.0907266810536385,0.246956452727318,0.937723875045776,-0.0835999995470047,0.337171912193298,0.935290277004242,-0.181792959570885,0.303617179393768,0.961935639381409,0.00657567568123341,0.273196935653687,0.93503212928772,0.00599651364609599,0.354512244462967,0.937723875045776,-0.0835999995470047,0.337171912193298, 0.964770019054413,-0.0907266810536385,0.246956452727318,0.921219646930695,-0.0589233264327049,0.384554862976074,0.909473538398743,-0.0684049502015114,0.410095930099487,0.937723875045776,-0.0835999995470047,0.337171912193298,0.93503212928772,0.00599651364609599,0.354512244462967,0.684517562389374,-0.439017295837402,0.581978976726532,0.689838171005249,-0.617681860923767,0.377614080905914,0.657656788825989,-0.727221310138702,0.196562394499779,0.742792665958405,-0.550313711166382,0.381331622600555,0.689838171005249,-0.617681860923767,0.377614080905914,0.693672001361847,-0.686315536499023,0.218609541654587,0.639384806156158,-0.761013865470886,0.109749406576157,0.657656788825989,-0.727221310138702,0.196562394499779,0.642289221286774,0.115071445703506,0.757775127887726,0.698984086513519,0.246289730072021,0.671388566493988,0.450006783008575,0.263622760772705,0.853227376937866,0.471029788255692,0.166954964399338,0.86617374420166,0.698984086513519,0.246289730072021,0.671388566493988,0.720846891403198,0.393656641244888,0.570450901985168,0.556747674942017,0.38243293762207,0.737412452697754,0.450006783008575,0.263622760772705,0.853227376937866,0.570054233074188,-0.200027942657471,0.796885788440704,0.683284997940063,0.154697299003601,0.713575720787048,0.702580511569977,0.00276018492877483,0.711598932743073,0.681784629821777,-0.285219341516495,0.673661351203918,0.550090253353119,-0.357467710971832,0.754730105400085,0.719567954540253,-0.322717130184174,0.614878535270691,0.765106797218323,-0.350072890520096,0.540426254272461,0.613220632076263,-0.373373091220856,0.696098387241364,0.681784629821777,-0.285219341516495,0.673661351203918,0.702580511569977,0.00276018492877483,0.711598932743073,0.550090253353119,-0.357467710971832,0.754730105400085,0.629800915718079,-0.358788877725601,0.68892765045166,0.874416053295136,-0.00546242296695709,0.485146045684814,0.908188223838806,0.15894940495491,0.387206882238388,0.885035216808319,0.393218964338303,0.249181613326073,0.854046881198883,0.485713124275208,0.186243653297424,0.890166699886322,0.437690794467926,-0.12660938501358, 0.163330301642418,0.241669088602066,0.956514120101929,0.0931223928928375,0.201938465237617,0.97496110200882,0.16256257891655,0.269552499055862,0.949165344238281,0.245724827051163,0.276487857103348,0.929071426391602,0.0931223928928375,0.201938465237617,0.97496110200882,0.0272070206701756,0.178279355168343,0.983603715896606,0.0426242314279079,0.260108649730682,0.964638113975525,0.16256257891655,0.269552499055862,0.949165344238281,0.584166944026947,-0.151799350976944,0.797311663627625,0.618419706821442,-0.127026095986366,0.775513648986816,0.414358675479889,-0.126704558730125,0.901250720024109,0.402891218662262,-0.177310451865196,0.897908508777618,0.567721784114838,-0.411755472421646,0.712845981121063,0.387449771165848,-0.245748713612556,0.888532638549805,0.414358675479889,-0.126704558730125,0.901250720024109,0.618419706821442,-0.127026095986366,0.775513648986816,0.690909028053284,-0.334549605846405,0.640875399112701,0.0780740827322006,-0.57033497095108,0.817693412303925,0.047360323369503,-0.552981853485107,0.831846177577972,0.0903236120939255,-0.645915448665619,0.758046746253967,0.0476435497403145,-0.676355302333832,0.73503303527832,0.0780740827322006,-0.57033497095108,0.817693412303925,0.0476435497403145,-0.676355302333832,0.73503303527832,-0.0377323105931282,-0.656355738639832,0.753507435321808,-0.0301125477999449,-0.572418868541718,0.819408237934113,0.630890548229218,-0.774750173091888,0.0417049825191498,0.435357719659805,-0.872423410415649,-0.222128495573998,0.563636422157288,-0.823141872882843,0.0689310654997826,0.623485326766968,0.449957937002182,0.639377772808075,0.524678170681,0.559116363525391,0.641951441764832,0.497093498706818,0.456073582172394,0.738169968128204,0.226432472467422,-0.391454815864563,0.891903281211853,0.0903236120939255,-0.645915448665619,0.758046746253967,0.378649204969406,-0.51500403881073,0.769022524356842,0.488678455352783,-0.257274806499481,0.833668410778046,0.226432472467422,-0.391454815864563,0.891903281211853,0.488678455352783,-0.257274806499481,0.833668410778046,0.558381021022797,0.167118594050407,0.812577426433563, 0.315978825092316,0.0904445722699165,0.944445431232452,0.70995169878006,-0.557043075561523,0.430896311998367,0.767249822616577,-0.595458924770355,0.23823593556881,0.868513345718384,-0.371388286352158,0.328260958194733,0.821784615516663,-0.261638671159744,0.506177127361298,0.868513345718384,-0.371388286352158,0.328260958194733,0.883809387683868,-0.290479838848114,0.366745710372925,0.792236804962158,-0.0960670188069344,0.602604329586029,0.821784615516663,-0.261638671159744,0.506177127361298,0.218448147177696,-0.859921038150787,0.461320102214813,0.423061966896057,-0.638191282749176,0.643218815326691,0.599736154079437,-0.429048538208008,0.675450921058655,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655,0.56849592924118,-0.125116035342216,0.813116490840912,0.591701328754425,-0.0445454604923725,0.804925620555878,0.599736154079437,-0.429048538208008,0.675450921058655,0.423061966896057,-0.638191282749176,0.643218815326691,0.56849592924118,-0.125116035342216,0.813116490840912,0.591701328754425,-0.0445454604923725,0.804925620555878,0.664332985877991,-0.312286198139191,0.679072141647339,0.599736154079437,-0.429048538208008,0.675450921058655,0.851511597633362,-0.5011847615242,0.154083982110024,0.462026834487915,-0.814152240753174,0.351692080497742,0.599736154079437,-0.429048538208008,0.675450921058655,0.664332985877991,-0.312286198139191,0.679072141647339,0.934174954891205,-0.332788705825806,0.128719761967659,0.953670024871826,-0.218769177794456,0.206527322530746,0.945006668567657,-0.308922052383423,0.107375629246235,0.94329446554184,-0.325108468532562,0.0670826062560081,0.938213586807251,-0.216931000351906,0.269622415304184,0.935753345489502,-0.270965844392776,0.225705921649933,0.945006668567657,-0.308922052383423,0.107375629246235,0.953670024871826,-0.218769177794456,0.206527322530746,0.971762239933014,-0.143596902489662,0.187237858772278,0.988696813583374,-0.11085943877697,0.10093978792429,0.945006668567657,-0.308922052383423,0.107375629246235,0.935753345489502,-0.270965844392776,0.225705921649933, 0.987058341503143,-0.0681737512350082,0.145148620009422,0.94329446554184,-0.325108468532562,0.0670826062560081,0.945006668567657,-0.308922052383423,0.107375629246235,0.988696813583374,-0.11085943877697,0.10093978792429,0.623457431793213,0.0676653161644936,0.778923749923706,0.565106153488159,0.017743531614542,0.824827373027802,0.601098597049713,0.0911194980144501,0.793963313102722,0.655191659927368,0.0146637577563524,0.755320370197296,0.623457431793213,0.0676653161644936,0.778923749923706,0.655191659927368,0.0146637577563524,0.755320370197296,0.633589863777161,-0.0252969916909933,0.773255407810211,0.61975085735321,-0.35027813911438,0.702292025089264,0.690708041191101,-0.0477886833250523,0.721552908420563,0.877371370792389,-0.100216217339039,0.469229310750961,0.794963598251343,-0.434218406677246,0.423659265041351,0.794963598251343,-0.434218406677246,0.423659265041351,0.877371370792389,-0.100216217339039,0.469229310750961,0.894858956336975,-0.0870964974164963,0.437768936157227,0.881620466709137,-0.332029432058334,0.335412949323654,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.168268576264381,-0.926923274993896,-0.335408568382263,0.164555922150612,-0.956649422645569,-0.240298211574554,0.164555922150612,-0.956649422645569,-0.240298211574554,0.168268576264381,-0.926923274993896,-0.335408568382263,0.282156497240067,-0.915852665901184,-0.285659939050674,0.283746033906937,-0.948122382164001,-0.143360316753387,0.44691988825798,-0.179234355688095,0.876434624195099,0.529802799224854,-0.195633217692375,0.825249433517456,0.359973400831223,-0.258122891187668,0.896544337272644,0.312136799097061,-0.241864830255508,0.918733894824982,0.529802799224854,-0.195633217692375,0.825249433517456,0.584166944026947,-0.151799350976944,0.797311663627625,0.402891218662262,-0.177310451865196,0.897908508777618,0.359973400831223,-0.258122891187668,0.896544337272644,0.938213586807251,-0.216931000351906,0.269622415304184,0.953670024871826,-0.218769177794456,0.206527322530746,0.965523362159729,-0.0906704962253571,0.24401530623436, 0.979475617408752,-0.109372921288013,0.169307827949524,0.934174954891205,-0.332788705825806,0.128719761967659,0.949501037597656,-0.133338466286659,0.284022271633148,0.965523362159729,-0.0906704962253571,0.24401530623436,0.953670024871826,-0.218769177794456,0.206527322530746,0.965523362159729,-0.0906704962253571,0.24401530623436,0.949501037597656,-0.133338466286659,0.284022271633148,0.947793483734131,-0.0109208915382624,0.318697780370712,0.987097263336182,-0.0312144737690687,0.157049849629402,0.979475617408752,-0.109372921288013,0.169307827949524,0.965523362159729,-0.0906704962253571,0.24401530623436,0.987097263336182,-0.0312144737690687,0.157049849629402,0.995871722698212,-0.0808055028319359,0.041352104395628,0.55342048406601,0.140735372900963,0.820925891399384,0.562969863414764,0.141692653298378,0.81424081325531,0.508710622787476,0.190386489033699,0.839622795581818,0.503296196460724,0.0546823143959045,0.862382054328918,0.498867928981781,0.236602708697319,0.833756506443024,0.55342048406601,0.140735372900963,0.820925891399384,0.33416548371315,0.26105335354805,0.905640423297882,0.37644562125206,0.38054347038269,0.844674706459045,0.630171060562134,-0.220097869634628,0.744608163833618,0.523068964481354,-0.400331109762192,0.752418637275696,0.613220632076263,-0.373373091220856,0.696098387241364,0.662703216075897,-0.235535204410553,0.710878074169159,0.270446568727493,-0.724654376506805,0.633825421333313,0.586388051509857,-0.415063470602036,0.695608615875244,0.406590580940247,-0.393400549888611,0.824572682380676,0.0997758805751801,-0.76704877614975,0.633782982826233,0.437306433916092,-0.371932566165924,0.818797469139099,0.406590580940247,-0.393400549888611,0.824572682380676,0.586388051509857,-0.415063470602036,0.695608615875244,0.640114009380341,-0.360243141651154,0.678585946559906,0.358242690563202,-0.369526594877243,0.857386887073517,0.738801121711731,-0.260166734457016,0.6216801404953,0.717148721218109,-0.158668875694275,0.678617656230927,0.359977900981903,-0.319483041763306,0.876553773880005,0.219657093286514,0.398345082998276,0.890545904636383, 0.305438488721848,0.421940237283707,0.853623926639557,0.395363062620163,0.562560498714447,0.726094901561737,0.340864300727844,0.524212896823883,0.780392467975616,0.370492875576019,0.369821041822433,0.852037250995636,0.416927576065063,0.413195610046387,0.809592962265015,0.305438488721848,0.421940237283707,0.853623926639557,0.245724827051163,0.276487857103348,0.929071426391602,0.278009802103043,0.308251172304153,0.909775674343109,0.305438488721848,0.421940237283707,0.853623926639557,0.416927576065063,0.413195610046387,0.809592962265015,0.497093498706818,0.456073582172394,0.738169968128204,0.524678170681,0.559116363525391,0.641951441764832,0.395363062620163,0.562560498714447,0.726094901561737,0.773433268070221,0.347118884325027,0.53038614988327,0.623485326766968,0.449957937002182,0.639377772808075,0.649705529212952,0.341418325901031,0.679202735424042,0.750506460666656,0.343903452157974,0.564331829547882,0.649705529212952,0.341418325901031,0.679202735424042,0.556747674942017,0.38243293762207,0.737412452697754,0.720846891403198,0.393656641244888,0.570450901985168,0.750506460666656,0.343903452157974,0.564331829547882,0.591701328754425,-0.0445454604923725,0.804925620555878,0.583943843841553,0.131935343146324,0.801001012325287,0.601098597049713,0.0911194980144501,0.793963313102722,0.568371534347534,0.0187626089900732,0.822558045387268,0.335370063781738,-0.00474565383046865,0.942074537277222,0.286056965589523,0.444956660270691,0.848637104034424,0.65963888168335,0.347626268863678,0.666357636451721,0.690708041191101,-0.0477886833250523,0.721552908420563,0.335370063781738,-0.00474565383046865,0.942074537277222,0.017973817884922,0.0102047342807055,0.999786376953125,0.0513622872531414,0.468802571296692,0.881808400154114,0.286056965589523,0.444956660270691,0.848637104034424,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.640791594982147,-0.766526699066162,0.0426960773766041,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.430644094944,-0.871794462203979,-0.233495324850082,0.611575484275818,0.314111411571503,0.726160764694214, 0.800925850868225,0.226523146033287,0.554260790348053,0.826946556568146,0.0731306597590446,0.557504594326019,0.610058009624481,0.18056558072567,0.771508455276489,0.800925850868225,0.226523146033287,0.554260790348053,0.611575484275818,0.314111411571503,0.726160764694214,0.512064158916473,0.485980182886124,0.708246827125549,0.535205781459808,0.472302228212357,0.700346648693085,0.783647418022156,0.339152276515961,0.520454108715057,0.813101530075073,0.281051158905029,0.509780466556549,0.834977984428406,0.275511413812637,0.47634568810463,0.79509973526001,0.317423015832901,0.516777575016022,0.819765686988831,0.312743216753006,0.479766517877579,0.773433268070221,0.347118884325027,0.53038614988327,0.821655750274658,0.296962469816208,0.486513197422028,0.855628609657288,0.255288362503052,0.450252771377563,0.85977029800415,0.296936422586441,0.415480256080627,0.922278165817261,0.183078601956367,0.340419232845306,0.855628609657288,0.255288362503052,0.450252771377563,0.821655750274658,0.296962469816208,0.486513197422028,0.966420710086823,0.0570991300046444,0.250540882349014,0.930171310901642,0.112328357994556,0.34951913356781,0.855628609657288,0.255288362503052,0.450252771377563,0.922278165817261,0.183078601956367,0.340419232845306,0.270428031682968,-0.84670215845108,0.458218395709991,0.387449771165848,-0.245748713612556,0.888532638549805,0.567721784114838,-0.411755472421646,0.712845981121063,0.454382866621017,-0.848002672195435,0.272814393043518,0.563636422157288,-0.823141872882843,0.0689310654997826,0.454382866621017,-0.848002672195435,0.272814393043518,0.567721784114838,-0.411755472421646,0.712845981121063,0.690909028053284,-0.334549605846405,0.640875399112701,0.766620635986328,-0.390746057033539,-0.509519696235657,0.719214975833893,-0.430595219135284,-0.545268356800079,0.829468905925751,-0.13685368001461,-0.5415278673172,0.946312725543976,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.719214975833893,-0.430595219135284,-0.545268356800079,0.940188527107239,-0.340047240257263,0.0203306917101145, 0.959231495857239,-0.07520642131567,-0.272431552410126,0.847399115562439,-0.142815440893173,-0.511388719081879,0.829468905925751,-0.13685368001461,-0.5415278673172,0.959231495857239,-0.07520642131567,-0.272431552410126,0.899878442287445,-0.160217583179474,-0.405646592378616,0.976300895214081,-0.175593838095665,-0.126504495739937,0.946312725543976,-0.198392629623413,-0.255210876464844,0.829468905925751,-0.13685368001461,-0.5415278673172,0.847399115562439,-0.142815440893173,-0.511388719081879,0.824678778648376,0.331173717975616,0.458507210016251,0.855628609657288,0.255288362503052,0.450252771377563,0.930171310901642,0.112328357994556,0.34951913356781,0.908929646015167,0.18951641023159,0.371389836072922,0.835932672023773,0.318577855825424,0.446905732154846,0.824678778648376,0.331173717975616,0.458507210016251,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.824678778648376,0.331173717975616,0.458507210016251,0.835932672023773,0.318577855825424,0.446905732154846,0.744709670543671,0.422629773616791,0.516518652439117,0.773433268070221,0.347118884325027,0.53038614988327,0.855628609657288,0.255288362503052,0.450252771377563,0.824678778648376,0.331173717975616,0.458507210016251,0.267092674970627,-0.484114617109299,0.833243370056152,0.406590580940247,-0.393400549888611,0.824572682380676,0.437306433916092,-0.371932566165924,0.818797469139099,0.329291462898254,-0.460140645503998,0.824522733688354,0.640791594982147,-0.766526699066162,0.0426960773766041,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.65738570690155,-0.752218425273895,0.0448495484888554,0.705848097801209,-0.694441199302673,0.13974928855896,0.65738570690155,-0.752218425273895,0.0448495484888554,0.639384806156158,-0.761013865470886,0.109749406576157,0.693672001361847,-0.686315536499023,0.218609541654587,0.705848097801209,-0.694441199302673,0.13974928855896,0.985209882259369,0.0516813509166241,0.163372397422791,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453,0.0208978541195393,0.260981827974319, 0.962778627872467,0.0666173547506332,0.261953175067902,0.870097935199738,0.102833516895771,0.482032060623169,0.826946556568146,0.0731306597590446,0.557504594326019,0.965117514133453,0.0208978541195393,0.260981827974319,0.980856478214264,0.0318705588579178,0.192106366157532,0.965117514133453,0.0208978541195393,0.260981827974319,0.826946556568146,0.0731306597590446,0.557504594326019,0.800925850868225,0.226523146033287,0.554260790348053,0.933462917804718,0.164250507950783,0.318855404853821,0.920523226261139,0.14191623032093,0.36400106549263,0.962778627872467,0.0666173547506332,0.261953175067902,0.965117514133453,0.0208978541195393,0.260981827974319,0.933462917804718,0.164250507950783,0.318855404853821,0.966257035732269,0.139943510293961,0.216247826814651,0.976429760456085,-0.14936164021492,0.155807659029961,0.993429064750671,-0.113890402019024,0.0113009223714471,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.981637835502625,-0.188382476568222,0.0299864616245031,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.858178198337555,-0.416941344738007,-0.299483120441437,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.981637835502625,-0.188382476568222,0.0299864616245031,0.54023802280426,-0.148879259824753,0.828237771987915,0.507363021373749,-0.115291275084019,0.853985190391541,0.124305054545403,-0.308796167373657,0.942970395088196,0.189583629369736,-0.286395132541656,0.939167618751526,0.94987964630127,-0.0038351418916136,0.312592297792435,0.972302615642548,0.043654702603817,0.229612305760384,0.964095413684845,-0.0113426633179188,0.265313804149628,0.956782042980194,0.0500060208141804,0.286474347114563,0.972302615642548,0.043654702603817,0.229612305760384,0.966708958148956,-0.002308584516868,0.255868047475815,0.945727825164795,-0.098081186413765,0.309804677963257,0.964095413684845,-0.0113426633179188,0.265313804149628,0.94987964630127,-0.0038351418916136,0.312592297792435,0.956782042980194,0.0500060208141804,0.286474347114563,0.937608182430267,0.0460146591067314,0.344635367393494,0.155652940273285,-0.987067878246307,0.0383299365639687, -0.032355971634388,-0.99692964553833,0.0713044255971909,0.386847853660584,-0.767014622688293,0.511895835399628,0.191021859645844,-0.901510059833527,0.388317227363586,0.155652940273285,-0.987067878246307,0.0383299365639687,0.191021859645844,-0.901510059833527,0.388317227363586,0.255019038915634,-0.916801631450653,0.307311117649078,0.279211044311523,-0.955691933631897,0.093242421746254,0.17069847881794,-0.387216597795486,0.906049311161041,0.204357400536537,-0.124537408351898,0.97094202041626,0.197210118174553,0.0128493588417768,0.980277061462402,0.848142683506012,0.254542678594589,0.464609563350677,0.65963888168335,0.347626268863678,0.666357636451721,0.667004644870758,0.442110657691956,0.59970235824585,0.825178265571594,0.267818719148636,0.497346937656403,0.801001727581024,0.319669455289841,0.506169617176056,0.848142683506012,0.254542678594589,0.464609563350677,0.801001727581024,0.319669455289841,0.506169617176056,0.79509973526001,0.317423015832901,0.516777575016022,0.834977984428406,0.275511413812637,0.47634568810463,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,-0.136760428547859,-0.195085763931274,0.971204459667206,0.0031939682085067,-0.177682086825371,0.984082758426666,0.0314028672873974,0.188204348087311,0.981627702713013,0.382985174655914,-0.340148031711578,0.858849048614502,0.514656662940979,-0.124439902603626,0.848317861557007,0.633589863777161,-0.0252969916909933,0.773255407810211,0.588271081447601,-0.259690821170807,0.765831470489502,0.382985174655914,-0.340148031711578,0.858849048614502,0.588271081447601,-0.259690821170807,0.765831470489502,0.525104641914368,-0.419060587882996,0.740711390972137,0.121470481157303,-0.391699403524399,0.912039756774902,0.173163160681725,-0.359727561473846,0.916848182678223,0.382985174655914,-0.340148031711578,0.858849048614502,0.121470481157303,-0.391699403524399,0.912039756774902, 0.164051368832588,-0.273042142391205,0.947910964488983,0.443824082612991,-0.204101487994194,0.872561037540436,0.514656662940979,-0.124439902603626,0.848317861557007,0.382985174655914,-0.340148031711578,0.858849048614502,0.173163160681725,-0.359727561473846,0.916848182678223,0.416703939437866,-0.0255245417356491,0.908683836460114,0.254473268985748,-0.0765668898820877,0.964044034481049,0.182319968938828,0.114501133561134,0.976549506187439,0.44965198636055,0.140096634626389,0.882148504257202,0.523316979408264,-0.825681805610657,-0.210686638951302,0.626487195491791,-0.719823837280273,-0.298943966627121,0.720593869686127,-0.637408852577209,-0.272863417863846,0.671372294425964,-0.724817991256714,-0.15459018945694,0.630890548229218,-0.774750173091888,0.0417049825191498,0.755779623985291,-0.654822111129761,0.00226114504039288,0.626487195491791,-0.719823837280273,-0.298943966627121,0.523316979408264,-0.825681805610657,-0.210686638951302,0.840808868408203,-0.369773417711258,0.395358175039291,0.756419658660889,-0.554076313972473,-0.347604215145111,0.626487195491791,-0.719823837280273,-0.298943966627121,0.755779623985291,-0.654822111129761,0.00226114504039288,0.626487195491791,-0.719823837280273,-0.298943966627121,0.756419658660889,-0.554076313972473,-0.347604215145111,0.777718842029572,-0.48187255859375,-0.403673440217972,0.720593869686127,-0.637408852577209,-0.272863417863846,0.562851548194885,-0.792488932609558,0.23486053943634,0.881620466709137,-0.332029432058334,0.335412949323654,0.738801121711731,-0.260166734457016,0.6216801404953,0.386847853660584,-0.767014622688293,0.511895835399628,0.618419706821442,-0.127026095986366,0.775513648986816,0.584166944026947,-0.151799350976944,0.797311663627625,0.637141883373261,-0.082910381257534,0.766274154186249,0.649656236171722,-0.0531920231878757,0.758364915847778,0.690909028053284,-0.334549605846405,0.640875399112701,0.618419706821442,-0.127026095986366,0.775513648986816,0.649656236171722,-0.0531920231878757,0.758364915847778,0.707773089408875,-0.177667543292046,0.683733463287354,0.430644094944,-0.871794462203979,-0.233495324850082, 0.304112553596497,-0.921620965003967,-0.241102367639542,0.563636422157288,-0.823141872882843,0.0689310654997826,0.435357719659805,-0.872423410415649,-0.222128495573998,0.529802799224854,-0.195633217692375,0.825249433517456,0.44691988825798,-0.179234355688095,0.876434624195099,0.542096614837646,-0.0831166654825211,0.836195468902588,0.602697968482971,-0.102753959596157,0.791325986385345,0.584166944026947,-0.151799350976944,0.797311663627625,0.529802799224854,-0.195633217692375,0.825249433517456,0.602697968482971,-0.102753959596157,0.791325986385345,0.637141883373261,-0.082910381257534,0.766274154186249,0.0341533571481705,0.664829432964325,0.746214032173157,0.102224595844746,0.498050421476364,0.861101567745209,0.31933718919754,0.337111681699753,0.885652005672455,0.220439016819,0.602273344993591,0.767250597476959,-0.407276064157486,0.876896381378174,0.255301624536514,-0.38366886973381,0.80352109670639,0.455139607191086,0.0341533571481705,0.664829432964325,0.746214032173157,0.220439016819,0.602273344993591,0.767250597476959,0.164532527327538,0.859674274921417,0.483620911836624,0.534866094589233,0.53300929069519,0.655606091022491,0.102224595844746,0.498050421476364,0.861101567745209,0.0341533571481705,0.664829432964325,0.746214032173157,-0.38366886973381,0.80352109670639,0.455139607191086,0.765106797218323,-0.350072890520096,0.540426254272461,0.75313264131546,-0.288527101278305,0.591221868991852,0.662703216075897,-0.235535204410553,0.710878074169159,0.613220632076263,-0.373373091220856,0.696098387241364,0.35059866309166,-0.137498125433922,0.926377296447754,0.194007128477097,-0.0432056449353695,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.46117314696312,-0.0281441453844309,0.886863708496094,0.44691988825798,-0.179234355688095,0.876434624195099,0.35059866309166,-0.137498125433922,0.926377296447754,0.46117314696312,-0.0281441453844309,0.886863708496094,0.542096614837646,-0.0831166654825211,0.836195468902588,0.563636422157288,-0.823141872882843,0.0689310654997826,0.304112553596497,-0.921620965003967,-0.241102367639542, 0.200176298618317,-0.953467607498169,-0.225452929735184,0.454382866621017,-0.848002672195435,0.272814393043518,0.200176298618317,-0.953467607498169,-0.225452929735184,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.270428031682968,-0.84670215845108,0.458218395709991,0.454382866621017,-0.848002672195435,0.272814393043518,0.327757924795151,-0.912954866886139,-0.243080645799637,0.304112553596497,-0.921620965003967,-0.241102367639542,0.430644094944,-0.871794462203979,-0.233495324850082,0.640791594982147,-0.766526699066162,0.0426960773766041,0.638466238975525,-0.769491136074066,0.0156274978071451,0.465027630329132,-0.875830411911011,-0.129113703966141,0.494663387537003,-0.866621494293213,-0.0653853639960289,-0.0349236838519573,-0.777106523513794,0.62839937210083,0.176858365535736,-0.897578120231628,0.403824985027313,-0.021647073328495,-0.960853159427643,0.276211261749268,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.623457431793213,0.0676653161644936,0.778923749923706,0.574505984783173,-0.027739129960537,0.818030178546906,0.535101175308228,-0.00626787729561329,0.844764709472656,0.565106153488159,0.017743531614542,0.824827373027802,0.514656662940979,-0.124439902603626,0.848317861557007,0.574505984783173,-0.027739129960537,0.818030178546906,0.623457431793213,0.0676653161644936,0.778923749923706,0.633589863777161,-0.0252969916909933,0.773255407810211,0.574505984783173,-0.027739129960537,0.818030178546906,0.514656662940979,-0.124439902603626,0.848317861557007,0.443824082612991,-0.204101487994194,0.872561037540436,0.655753970146179,-0.0819050073623657,0.750518679618835,0.633136808872223,-0.0669011846184731,0.771143317222595,0.535101175308228,-0.00626787729561329,0.844764709472656,0.574505984783173,-0.027739129960537,0.818030178546906,0.633136808872223,-0.0669011846184731,0.771143317222595,0.578185617923737,-0.0845057815313339,0.811517179012299,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.00247630476951599,-0.186591759324074,0.982434391975403,0.288086891174316,-0.211062774062157,0.934054851531982, 0.312136799097061,-0.241864830255508,0.918733894824982,0.00247630476951599,-0.186591759324074,0.982434391975403,-0.000449120096163824,-0.222807794809341,0.974862277507782,0.253216534852982,-0.212744683027267,0.943727254867554,0.288086891174316,-0.211062774062157,0.934054851531982,0.765106797218323,-0.350072890520096,0.540426254272461,0.719567954540253,-0.322717130184174,0.614878535270691,0.866469502449036,-0.361488610506058,0.344320476055145,0.875984609127045,-0.341396063566208,0.340734094381332,0.332773357629776,-0.801452815532684,0.49692577123642,0.198447287082672,-0.827921032905579,0.524562180042267,0.168408244848251,-0.974918007850647,0.145511314272881,0.304768770933151,-0.92969423532486,0.206844300031662,0.353568494319916,-0.776771426200867,0.521167457103729,0.332773357629776,-0.801452815532684,0.49692577123642,0.304768770933151,-0.92969423532486,0.206844300031662,0.225757539272308,-0.896350860595703,0.381560862064362,0.918502330780029,-0.196233198046684,0.343287169933319,0.989523768424988,0.120242863893509,-0.0799020603299141,0.941014289855957,-0.231837883591652,0.246461525559425,0.928443729877472,-0.228811115026474,0.292639285326004,0.925993382930756,0.073547326028347,-0.370306611061096,0.903722703456879,-0.336785912513733,0.26431143283844,0.941014289855957,-0.231837883591652,0.246461525559425,0.989523768424988,0.120242863893509,-0.0799020603299141,0.804244041442871,-0.107830874621868,0.584434807300568,0.64728707075119,-0.269912004470825,0.712858319282532,0.43553838133812,0.174102976918221,0.883172988891602,0.897598922252655,-0.0851877480745316,0.432503432035446,0.928443729877472,-0.228811115026474,0.292639285326004,0.941014289855957,-0.231837883591652,0.246461525559425,0.804244041442871,-0.107830874621868,0.584434807300568,0.877371370792389,-0.100216217339039,0.469229310750961,0.690708041191101,-0.0477886833250523,0.721552908420563,0.65963888168335,0.347626268863678,0.666357636451721,0.848142683506012,0.254542678594589,0.464609563350677,0.688574373722076,-0.431850165128708,0.58255535364151,0.586388051509857,-0.415063470602036,0.695608615875244, 0.270446568727493,-0.724654376506805,0.633825421333313,0.333747088909149,-0.66472852230072,0.668392717838287,0.731125593185425,-0.405815303325653,0.548424422740936,0.688574373722076,-0.431850165128708,0.58255535364151,0.333747088909149,-0.66472852230072,0.668392717838287,0.535029828548431,-0.536747872829437,0.652414619922638,0.688574373722076,-0.431850165128708,0.58255535364151,0.731125593185425,-0.405815303325653,0.548424422740936,0.73811411857605,-0.426667273044586,0.522630453109741,0.731416404247284,-0.417625606060028,0.539090871810913,-0.0552638620138168,0.347488284111023,0.936054348945618,0.179719522595406,0.199890360236168,0.963195025920868,-0.00221070507541299,0.348074615001678,0.937464237213135,0.174916133284569,0.190565213561058,0.965965449810028,0.280919551849365,0.197001457214355,0.939294755458832,0.431708127260208,0.0743667632341385,0.898942530155182,0.493298023939133,0.0378949381411076,0.8690345287323,0.951365828514099,0.00983366928994656,0.30790650844574,0.958109974861145,-0.0344467237591743,0.284321486949921,0.955479383468628,-0.0429471768438816,0.291915565729141,0.0600041374564171,-0.192453533411026,0.979469835758209,-0.0292664598673582,0.127957031130791,0.991347789764404,-0.0409326404333115,0.16646908223629,0.985196709632874,0.0412249267101288,-0.205861806869507,0.977712333202362,-0.0409326404333115,0.16646908223629,0.985196709632874,0.0314028672873974,0.188204348087311,0.981627702713013,0.00068405584897846,-0.208776980638504,0.977963030338287,0.0412249267101288,-0.205861806869507,0.977712333202362,0.44965198636055,0.140096634626389,0.882148504257202,0.182319968938828,0.114501133561134,0.976549506187439,0.191416949033737,-0.0921172648668289,0.977176547050476,0.440964937210083,0.0207586232572794,0.897284269332886,0.763672888278961,0.330310761928558,0.554705798625946,0.728024780750275,0.317726284265518,0.607478320598602,0.862693786621094,0.213308542966843,0.458539962768555,0.87058699131012,0.227341398596764,0.436341762542725,0.488678455352783,-0.257274806499481,0.833668410778046,0.378649204969406,-0.51500403881073,0.769022524356842, 0.678119361400604,-0.318360239267349,0.662420451641083,0.750837445259094,-0.0367836877703667,0.659461975097656,0.981309294700623,-0.093424528837204,-0.168237790465355,0.984952390193939,-0.153410941362381,-0.0795853585004807,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.979115843772888,-0.186871707439423,-0.0800699964165688,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.993362247943878,-0.0349664911627769,0.109584823250771,0.995931923389435,-0.0816682651638985,-0.0380769334733486,0.135898023843765,0.169247582554817,0.976159334182739,-0.0196372587233782,0.188453316688538,0.98188579082489,-0.00221070507541299,0.348074615001678,0.937464237213135,0.179719522595406,0.199890360236168,0.963195025920868,0.0426242314279079,0.260108649730682,0.964638113975525,-0.0196372587233782,0.188453316688538,0.98188579082489,0.135898023843765,0.169247582554817,0.976159334182739,0.166202440857887,0.306374847888947,0.937289237976074,0.333747088909149,-0.66472852230072,0.668392717838287,0.270446568727493,-0.724654376506805,0.633825421333313,0.235940769314766,-0.737428665161133,0.632875144481659,0.363939642906189,-0.646557629108429,0.670455992221832,0.189460039138794,-0.647004544734955,0.738572955131531,0.535029828548431,-0.536747872829437,0.652414619922638,0.333747088909149,-0.66472852230072,0.668392717838287,0.363939642906189,-0.646557629108429,0.670455992221832,0.286647915840149,-0.584438979625702,0.759120643138886,0.583943843841553,0.131935343146324,0.801001012325287,0.44965198636055,0.140096634626389,0.882148504257202,0.440964937210083,0.0207586232572794,0.897284269332886,0.596563339233398,-0.0223739240318537,0.8022540807724,0.364222437143326,-0.205845013260841,0.908278524875641,0.335370063781738,-0.00474565383046865,0.942074537277222,0.690708041191101,-0.0477886833250523,0.721552908420563,0.61975085735321,-0.35027813911438,0.702292025089264,0.00262317061424255,-0.184787794947624,0.982774972915649,0.017973817884922,0.0102047342807055,0.999786376953125,0.335370063781738,-0.00474565383046865,0.942074537277222, 0.364222437143326,-0.205845013260841,0.908278524875641,0.958109974861145,-0.0344467237591743,0.284321486949921,0.969503223896027,0.0232477653771639,0.243973404169083,0.968910753726959,0.00811574142426252,0.247277289628983,0.955479383468628,-0.0429471768438816,0.291915565729141,0.930171310901642,0.112328357994556,0.34951913356781,0.966420710086823,0.0570991300046444,0.250540882349014,0.969503223896027,0.0232477653771639,0.243973404169083,0.958109974861145,-0.0344467237591743,0.284321486949921,-0.0301125477999449,-0.572418868541718,0.819408237934113,0.00911593530327082,-0.103348582983017,0.994603395462036,0.173270419239998,-0.100987397134304,0.979683041572571,0.0780740827322006,-0.57033497095108,0.817693412303925,0.173270419239998,-0.100987397134304,0.979683041572571,0.248945504426956,-0.117258243262768,0.961393058300018,0.047360323369503,-0.552981853485107,0.831846177577972,0.0780740827322006,-0.57033497095108,0.817693412303925,0.810256838798523,-0.430587977170944,0.397590130567551,0.893001258373261,-0.370285004377365,0.255807995796204,0.870028138160706,-0.439180076122284,0.223990917205811,0.770568072795868,-0.510897517204285,0.381062299013138,0.900704562664032,-0.383264392614365,0.204547420144081,0.903808772563934,-0.380508303642273,0.19581413269043,0.870028138160706,-0.439180076122284,0.223990917205811,0.893001258373261,-0.370285004377365,0.255807995796204,0.886316955089569,0.0816843584179878,0.455817818641663,0.89356255531311,-0.0812801718711853,0.441519498825073,0.959026873111725,-0.148191750049591,0.241467580199242,0.747522175312042,-0.213430538773537,0.629013538360596,0.770568072795868,-0.510897517204285,0.381062299013138,0.870028138160706,-0.439180076122284,0.223990917205811,0.89356255531311,-0.0812801718711853,0.441519498825073,0.897057175636292,-0.352101475000381,0.267044723033905,0.927076876163483,-0.29800683259964,0.227421119809151,0.875984609127045,-0.341396063566208,0.340734094381332,0.866469502449036,-0.361488610506058,0.344320476055145,0.956220626831055,-0.152332276105881,0.249873846769333,0.976429760456085,-0.14936164021492,0.155807659029961, 0.976300895214081,-0.175593838095665,-0.126504495739937,0.970759510993958,-0.233238592743874,0.056795421987772,0.935715436935425,0.19026754796505,0.297043561935425,0.938729107379913,0.213661849498749,0.270437210798264,0.956782042980194,0.0500060208141804,0.286474347114563,0.964095413684845,-0.0113426633179188,0.265313804149628,0.945727825164795,-0.098081186413765,0.309804677963257,0.941311419010162,0.140633046627045,0.30684706568718,0.935715436935425,0.19026754796505,0.297043561935425,0.964095413684845,-0.0113426633179188,0.265313804149628,0.707773089408875,-0.177667543292046,0.683733463287354,0.820341229438782,-0.113342881202698,0.560529828071594,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.707773089408875,-0.177667543292046,0.683733463287354,0.649656236171722,-0.0531920231878757,0.758364915847778,0.855769634246826,-0.0943452939391136,0.508681952953339,-0.0512008517980576,-0.79354852437973,0.606349110603333,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0997758805751801,-0.76704877614975,0.633782982826233,-0.0242012590169907,-0.832133829593658,0.554046511650085,-0.0352796316146851,-0.824001550674438,0.565488159656525,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.0416775047779083,-0.927180886268616,0.372288316488266,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.0997758805751801,-0.76704877614975,0.633782982826233,0.406590580940247,-0.393400549888611,0.824572682380676,0.267092674970627,-0.484114617109299,0.833243370056152,-0.0242012590169907,-0.832133829593658,0.554046511650085,0.267092674970627,-0.484114617109299,0.833243370056152,0.209196627140045,-0.665287017822266,0.716679811477661,0.0416775047779083,-0.927180886268616,0.372288316488266,0.0587443448603153,-0.922947645187378,-0.380416542291641,0.0633370503783226,-0.944429814815521,-0.322553485631943,-0.0777209997177124,-0.922415435314178,-0.378297746181488,-0.0771657377481461,-0.907520055770874,-0.412859290838242, 0.750837445259094,-0.0367836877703667,0.659461975097656,0.678119361400604,-0.318360239267349,0.662420451641083,0.680992484092712,-0.305005490779877,0.665748357772827,0.758135914802551,0.0851427242159843,0.646514236927032,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.671372294425964,-0.724817991256714,-0.15459018945694,0.720593869686127,-0.637408852577209,-0.272863417863846,0.828101873397827,-0.525332391262054,-0.195635288953781,0.838521242141724,-0.431514054536819,-0.332682609558105,0.828101873397827,-0.525332391262054,-0.195635288953781,0.720593869686127,-0.637408852577209,-0.272863417863846,0.777718842029572,-0.48187255859375,-0.403673440217972,0.758135914802551,0.0851427242159843,0.646514236927032,0.680992484092712,-0.305005490779877,0.665748357772827,0.515636503696442,-0.41490975022316,0.749645829200745,0.443391680717468,-0.0999263972043991,0.89074045419693,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.858178198337555,-0.416941344738007,-0.299483120441437,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.991932511329651,-0.125741600990295,-0.0160924699157476,0.993429064750671,-0.113890402019024,0.0113009223714471,0.989231050014496,-0.126766130328178,-0.0731591805815697,0.371347606182098,0.418176740407944,0.82899284362793,0.535205781459808,0.472302228212357,0.700346648693085,0.512064158916473,0.485980182886124,0.708246827125549,0.328961253166199,0.182314842939377,0.92657744884491,0.314301073551178,0.320888847112656,0.893445670604706,0.371347606182098,0.418176740407944,0.82899284362793,0.0426242314279079,0.260108649730682,0.964638113975525,0.166202440857887,0.306374847888947,0.937289237976074,0.221095889806747,0.32488140463829,0.919548094272614,0.16256257891655,0.269552499055862,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.166202440857887,0.306374847888947,0.937289237976074,0.508710622787476,0.190386489033699,0.839622795581818,0.481910198926926,0.246677935123444,0.840780913829803, 0.278009802103043,0.308251172304153,0.909775674343109,0.221095889806747,0.32488140463829,0.919548094272614,0.481910198926926,0.246677935123444,0.840780913829803,0.428730636835098,0.26745393872261,0.862935900688171,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.967206120491028,-0.19463723897934,0.163182899355888,0.806693911552429,-0.123899839818478,0.577835381031036,0.806693911552429,-0.123899839818478,0.577835381031036,0.967206120491028,-0.19463723897934,0.163182899355888,0.851511597633362,-0.5011847615242,0.154083982110024,0.733202934265137,-0.122967794537544,0.668799161911011,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.959231495857239,-0.07520642131567,-0.272431552410126,0.940188527107239,-0.340047240257263,0.0203306917101145,0.985052049160004,-0.113364338874817,0.129696041345596,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.959231495857239,-0.07520642131567,-0.272431552410126,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.965724050998688,-0.163102030754089,-0.201927617192268,0.899878442287445,-0.160217583179474,-0.405646592378616,0.959231495857239,-0.07520642131567,-0.272431552410126,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.400608420372009,-0.480024576187134,0.780441761016846,0.570054233074188,-0.200027942657471,0.796885788440704,0.681784629821777,-0.285219341516495,0.673661351203918,0.656731724739075,-0.381447851657867,0.650538980960846,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.00655650394037366,-0.135652124881744,0.990734815597534,0.387449771165848,-0.245748713612556,0.888532638549805,0.270428031682968,-0.84670215845108,0.458218395709991,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.997385084629059,0.0175571031868458,0.0701054036617279,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.961935639381409,0.00657567568123341,0.273196935653687,0.964770019054413,-0.0907266810536385,0.246956452727318, 0.997832834720612,-0.0537990741431713,0.0378856025636196,0.997385084629059,0.0175571031868458,0.0701054036617279,0.949846565723419,-0.197867274284363,0.242157250642776,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.964770019054413,-0.0907266810536385,0.246956452727318,0.965724050998688,-0.163102030754089,-0.201927617192268,0.989280700683594,-0.0284773074090481,-0.143222585320473,0.997832834720612,-0.0537990741431713,0.0378856025636196,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.44691988825798,-0.179234355688095,0.876434624195099,0.312136799097061,-0.241864830255508,0.918733894824982,0.288086891174316,-0.211062774062157,0.934054851531982,0.35059866309166,-0.137498125433922,0.926377296447754,0.288086891174316,-0.211062774062157,0.934054851531982,0.253216534852982,-0.212744683027267,0.943727254867554,0.194007128477097,-0.0432056449353695,0.98004823923111,0.35059866309166,-0.137498125433922,0.926377296447754,0.562851548194885,-0.792488932609558,0.23486053943634,0.386847853660584,-0.767014622688293,0.511895835399628,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.637141883373261,-0.082910381257534,0.766274154186249,0.846625864505768,-0.12819692492485,0.516517341136932,0.855769634246826,-0.0943452939391136,0.508681952953339,0.649656236171722,-0.0531920231878757,0.758364915847778,0.903585314750671,0.234351992607117,0.35862609744072,0.98053389787674,0.00911934021860361,0.196137949824333,0.991146802902222,-0.0709943845868111,0.112195692956448,0.944392323493958,0.0710759162902832,0.321047365665436,0.98053389787674,0.00911934021860361,0.196137949824333,0.98186069726944,-0.153709232807159,0.111008986830711,0.990583539009094,-0.136551707983017,0.0098949521780014,0.991146802902222,-0.0709943845868111,0.112195692956448,0.927650630474091,-0.232570663094521,-0.292190253734589,0.867056906223297,-0.245093911886215,-0.433752596378326,0.899878442287445,-0.160217583179474,-0.405646592378616,0.965724050998688,-0.163102030754089,-0.201927617192268, 0.847399115562439,-0.142815440893173,-0.511388719081879,0.899878442287445,-0.160217583179474,-0.405646592378616,0.867056906223297,-0.245093911886215,-0.433752596378326,0.863667845726013,-0.255664467811584,-0.434411734342575,0.705349028110504,-0.217919707298279,0.674532234668732,0.750554323196411,-0.229917243123055,0.619521021842957,0.688922643661499,-0.305572867393494,0.657275319099426,0.760169208049774,-0.346720576286316,0.549479365348816,0.688922643661499,-0.305572867393494,0.657275319099426,0.684517562389374,-0.439017295837402,0.581978976726532,0.742792665958405,-0.550313711166382,0.381331622600555,0.760169208049774,-0.346720576286316,0.549479365348816,0.378649204969406,-0.51500403881073,0.769022524356842,0.0903236120939255,-0.645915448665619,0.758046746253967,0.11539563536644,-0.528798937797546,0.840865969657898,0.400608420372009,-0.480024576187134,0.780441761016846,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.645513415336609,-0.755210697650909,-0.113882429897785,0.671372294425964,-0.724817991256714,-0.15459018945694,0.821304857730865,-0.558016240596771,0.118643142282963,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.645513415336609,-0.755210697650909,-0.113882429897785,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.430644094944,-0.871794462203979,-0.233495324850082,0.435357719659805,-0.872423410415649,-0.222128495573998,0.501666784286499,-0.849441289901733,-0.163646027445793,0.609544932842255,-0.541187822818756,0.579284608364105,0.629647791385651,-0.52997088432312,0.568044483661652,0.810256838798523,-0.430587977170944,0.397590130567551,0.770568072795868,-0.510897517204285,0.381062299013138,0.609544932842255,-0.541187822818756,0.579284608364105,0.770568072795868,-0.510897517204285,0.381062299013138,0.747522175312042,-0.213430538773537,0.629013538360596,0.584165692329407,-0.333255082368851,0.740061819553375,0.535205781459808,0.472302228212357,0.700346648693085,0.542900562286377,0.367345452308655,0.755192875862122, 0.786049902439117,0.275353401899338,0.553449213504791,0.783647418022156,0.339152276515961,0.520454108715057,0.901179313659668,-0.204281270503998,0.382289171218872,0.896426856517792,-0.172908827662468,0.408070415258408,0.623109459877014,-0.205047786235809,0.754778146743774,0.645662844181061,-0.29273384809494,0.705284595489502,0.901179313659668,-0.204281270503998,0.382289171218872,0.645662844181061,-0.29273384809494,0.705284595489502,0.651034355163574,-0.303375482559204,0.695785582065582,0.887543320655823,-0.171314582228661,0.427689343690872,0.261966973543167,0.625043272972107,0.735319077968597,0.286056965589523,0.444956660270691,0.848637104034424,0.0513622872531414,0.468802571296692,0.881808400154114,0.0635503008961678,0.655404150485992,0.752600014209747,0.261966973543167,0.625043272972107,0.735319077968597,0.667004644870758,0.442110657691956,0.59970235824585,0.65963888168335,0.347626268863678,0.666357636451721,0.286056965589523,0.444956660270691,0.848637104034424,0.985209882259369,0.0516813509166241,0.163372397422791,0.985529184341431,0.0794467255473137,0.149734541773796,0.96662175655365,0.153387770056725,0.205218374729156,0.980856478214264,0.0318705588579178,0.192106366157532,0.966420710086823,0.0570991300046444,0.250540882349014,0.922278165817261,0.183078601956367,0.340419232845306,0.96662175655365,0.153387770056725,0.205218374729156,0.985529184341431,0.0794467255473137,0.149734541773796,0.85977029800415,0.296936422586441,0.415480256080627,0.885397613048553,0.234036833047867,0.401618927717209,0.96662175655365,0.153387770056725,0.205218374729156,0.922278165817261,0.183078601956367,0.340419232845306,0.870097935199738,0.102833516895771,0.482032060623169,0.980856478214264,0.0318705588579178,0.192106366157532,0.96662175655365,0.153387770056725,0.205218374729156,0.885397613048553,0.234036833047867,0.401618927717209,0.43553838133812,0.174102976918221,0.883172988891602,0.534866094589233,0.53300929069519,0.655606091022491,0.897598922252655,-0.0851877480745316,0.432503432035446,0.804244041442871,-0.107830874621868,0.584434807300568, 0.43553838133812,0.174102976918221,0.883172988891602,0.102224595844746,0.498050421476364,0.861101567745209,0.534866094589233,0.53300929069519,0.655606091022491,0.43553838133812,0.174102976918221,0.883172988891602,0.64728707075119,-0.269912004470825,0.712858319282532,0.409548729658127,0.024171682074666,0.911967992782593,0.102224595844746,0.498050421476364,0.861101567745209,0.43553838133812,0.174102976918221,0.883172988891602,0.409548729658127,0.024171682074666,0.911967992782593,0.31933718919754,0.337111681699753,0.885652005672455,0.933462917804718,0.164250507950783,0.318855404853821,0.800925850868225,0.226523146033287,0.554260790348053,0.783647418022156,0.339152276515961,0.520454108715057,0.915872991085052,0.226020276546478,0.33180034160614,0.975037813186646,0.14565335214138,0.167589843273163,0.966257035732269,0.139943510293961,0.216247826814651,0.933462917804718,0.164250507950783,0.318855404853821,0.915872991085052,0.226020276546478,0.33180034160614,0.965288519859314,0.151292905211449,0.212904900312424,0.601098597049713,0.0911194980144501,0.793963313102722,0.583943843841553,0.131935343146324,0.801001012325287,0.596563339233398,-0.0223739240318537,0.8022540807724,0.655191659927368,0.0146637577563524,0.755320370197296,0.235940769314766,-0.737428665161133,0.632875144481659,0.270446568727493,-0.724654376506805,0.633825421333313,0.0997758805751801,-0.76704877614975,0.633782982826233,0.0527103617787361,-0.77695095539093,0.627350628376007,0.821304857730865,-0.558016240596771,0.118643142282963,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.93299263715744,-0.32493382692337,0.154734432697296,0.923712968826294,-0.295430272817612,0.243875607848167,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.926652431488037,-0.373704701662064,0.0407436527311802,0.93299263715744,-0.32493382692337,0.154734432697296,0.819821655750275,-0.572548151016235,-0.00900870002806187,0.96362441778183,-0.210319370031357,0.16490513086319,0.947748720645905,-0.180222257971764,0.263234436511993,0.93299263715744,-0.32493382692337,0.154734432697296, 0.926652431488037,-0.373704701662064,0.0407436527311802,0.945337653160095,-0.174788698554039,0.275292009115219,0.923712968826294,-0.295430272817612,0.243875607848167,0.93299263715744,-0.32493382692337,0.154734432697296,0.947748720645905,-0.180222257971764,0.263234436511993,0.742792665958405,-0.550313711166382,0.381331622600555,0.657656788825989,-0.727221310138702,0.196562394499779,0.64417177438736,-0.7592693567276,0.0924808010458946,0.803535997867584,-0.553550720214844,0.2188870459795,0.639384806156158,-0.761013865470886,0.109749406576157,0.575045108795166,-0.818020403385162,0.0128742791712284,0.64417177438736,-0.7592693567276,0.0924808010458946,0.657656788825989,-0.727221310138702,0.196562394499779,0.537862658500671,-0.839294493198395,-0.0793002098798752,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.64417177438736,-0.7592693567276,0.0924808010458946,0.575045108795166,-0.818020403385162,0.0128742791712284,0.821304857730865,-0.558016240596771,0.118643142282963,0.803535997867584,-0.553550720214844,0.2188870459795,0.64417177438736,-0.7592693567276,0.0924808010458946,0.642173051834106,-0.76616907119751,-0.0244695600122213,0.560910940170288,-0.546258211135864,0.622077882289886,0.301303088665009,-0.716448962688446,0.629219651222229,0.275670319795609,-0.347558110952377,0.896219432353973,0.432139188051224,-0.378973364830017,0.818312227725983,0.275670319795609,-0.347558110952377,0.896219432353973,0.254473268985748,-0.0765668898820877,0.964044034481049,0.416703939437866,-0.0255245417356491,0.908683836460114,0.432139188051224,-0.378973364830017,0.818312227725983,0.981637835502625,-0.188382476568222,0.0299864616245031,0.946312725543976,-0.198392629623413,-0.255210876464844,0.976300895214081,-0.175593838095665,-0.126504495739937,0.976429760456085,-0.14936164021492,0.155807659029961,0.981637835502625,-0.188382476568222,0.0299864616245031,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.766620635986328,-0.390746057033539,-0.509519696235657,0.946312725543976,-0.198392629623413,-0.255210876464844,0.688574373722076,-0.431850165128708,0.58255535364151, 0.731416404247284,-0.417625606060028,0.539090871810913,0.640114009380341,-0.360243141651154,0.678585946559906,0.586388051509857,-0.415063470602036,0.695608615875244,0.515636503696442,-0.41490975022316,0.749645829200745,0.680992484092712,-0.305005490779877,0.665748357772827,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119,-0.357467710971832,0.754730105400085,0.613220632076263,-0.373373091220856,0.696098387241364,0.523068964481354,-0.400331109762192,0.752418637275696,0.609544932842255,-0.541187822818756,0.579284608364105,0.584165692329407,-0.333255082368851,0.740061819553375,0.510522961616516,-0.392942905426025,0.764828205108643,0.504154682159424,-0.548682808876038,0.666914701461792,0.609544932842255,-0.541187822818756,0.579284608364105,0.504154682159424,-0.548682808876038,0.666914701461792,0.572291314601898,-0.52212518453598,0.632351100444794,0.629647791385651,-0.52997088432312,0.568044483661652,0.731416404247284,-0.417625606060028,0.539090871810913,0.73811411857605,-0.426667273044586,0.522630453109741,0.831848502159119,-0.322033703327179,0.452020287513733,0.842584788799286,-0.21356026828289,0.494411617517471,0.640114009380341,-0.360243141651154,0.678585946559906,0.731416404247284,-0.417625606060028,0.539090871810913,0.842584788799286,-0.21356026828289,0.494411617517471,0.770362615585327,0.0158082563430071,0.63740998506546,0.536214470863342,0.394264131784439,0.746344327926636,0.595219552516937,0.51872980594635,0.613704323768616,0.267601639032364,0.585238754749298,0.765431225299835,0.253624588251114,0.428919792175293,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.595219552516937,0.51872980594635,0.613704323768616,0.688724040985107,0.428849041461945,0.584591865539551,0.279262810945511,0.544022977352142,0.791234016418457,0.0581676289439201,0.571192860603333,0.818752288818359,0.0604556538164616,0.606487095355988,0.792791604995728,0.267601639032364,0.585238754749298,0.765431225299835,0.279262810945511,0.544022977352142,0.791234016418457,0.0497331917285919,0.445011228322983,0.894142985343933, 0.253624588251114,0.428919792175293,0.867007732391357,0.267601639032364,0.585238754749298,0.765431225299835,0.0604556538164616,0.606487095355988,0.792791604995728,0.786049902439117,0.275353401899338,0.553449213504791,0.912213087081909,0.0526493825018406,0.406319200992584,0.915872991085052,0.226020276546478,0.33180034160614,0.783647418022156,0.339152276515961,0.520454108715057,0.926979184150696,-0.0986248403787613,0.36191537976265,0.965288519859314,0.151292905211449,0.212904900312424,0.915872991085052,0.226020276546478,0.33180034160614,0.912213087081909,0.0526493825018406,0.406319200992584,0.289565563201904,-0.362892955541611,0.885697722434998,0.0666661337018013,-0.827535629272461,0.557440996170044,0.198447287082672,-0.827921032905579,0.524562180042267,0.173318073153496,-0.274096310138702,0.945955634117126,0.198447287082672,-0.827921032905579,0.524562180042267,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.021647073328495,-0.960853159427643,0.276211261749268,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647,0.145511314272881,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0233143605291843,-0.495335191488266,0.868389010429382,0.0031939682085067,-0.177682086825371,0.984082758426666,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.136760428547859,-0.195085763931274,0.971204459667206,-0.0214409474283457,-0.17113696038723,0.985013961791992,0.533053755760193,0.0411353260278702,0.845080852508545,0.437306433916092,-0.371932566165924,0.818797469139099,0.640114009380341,-0.360243141651154,0.678585946559906,0.770362615585327,0.0158082563430071,0.63740998506546,0.754335284233093,-0.305042564868927,0.581315159797668,0.771643459796906,-0.219248831272125,0.597073137760162,0.861247181892395,-0.192313641309738,0.470392137765884,0.838417947292328,-0.244426995515823,0.487145572900772,0.771643459796906,-0.219248831272125,0.597073137760162,0.754335284233093,-0.305042564868927,0.581315159797668, 0.71972918510437,-0.325454443693161,0.613244891166687,0.677804887294769,-0.293700158596039,0.674033224582672,0.510522961616516,-0.392942905426025,0.764828205108643,0.494429767131805,-0.0934201404452324,0.864182770252228,0.32480525970459,-0.177078545093536,0.929055869579315,0.385615348815918,-0.420324206352234,0.821357607841492,0.494429767131805,-0.0934201404452324,0.864182770252228,0.510522961616516,-0.392942905426025,0.764828205108643,0.584165692329407,-0.333255082368851,0.740061819553375,0.550924062728882,0.0100475419312716,0.834494948387146,0.254473268985748,-0.0765668898820877,0.964044034481049,0.275670319795609,-0.347558110952377,0.896219432353973,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.0214409474283457,-0.17113696038723,0.985013961791992,0.301303088665009,-0.716448962688446,0.629219651222229,-0.00210810895077884,-0.784596800804138,0.620002746582031,-0.0337620861828327,-0.434601843357086,0.899989664554596,0.275670319795609,-0.347558110952377,0.896219432353973,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.199777901172638,-0.484420716762543,0.851719081401825,-0.0337620861828327,-0.434601843357086,0.899989664554596,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.949343860149384,0.194382473826408,0.246904209256172,0.952320516109467,0.113910689949989,0.283037096261978,0.935723841190338,0.105225577950478,0.336672723293304,0.960835516452789,0.146968066692352,0.234937101602554,0.952320516109467,0.113910689949989,0.283037096261978,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916476547718048,0.0582267269492149,0.395828783512115,0.935723841190338,0.105225577950478,0.336672723293304,0.954735457897186,-0.0869630351662636,0.284460365772247,0.976793885231018,-0.16974413394928,0.13061648607254,0.830796539783478,-0.141607835888863,0.538260519504547,0.797767400741577,-0.104994267225266,0.593753576278687,0.976793885231018,-0.16974413394928,0.13061648607254,0.984028935432434,-0.172777280211449,0.042837880551815,0.846625864505768,-0.12819692492485,0.516517341136932,0.830796539783478,-0.141607835888863,0.538260519504547, 0.792236804962158,-0.0960670188069344,0.602604329586029,0.702580511569977,0.00276018492877483,0.711598932743073,0.683284997940063,0.154697299003601,0.713575720787048,0.756793797016144,-0.0805434510111809,0.64867240190506,0.0903236120939255,-0.645915448665619,0.758046746253967,0.047360323369503,-0.552981853485107,0.831846177577972,0.11539563536644,-0.528798937797546,0.840865969657898,-0.0214409474283457,-0.17113696038723,0.985013961791992,-0.0292664598673582,0.127957031130791,0.991347789764404,0.182319968938828,0.114501133561134,0.976549506187439,0.254473268985748,-0.0765668898820877,0.964044034481049,0.908188223838806,0.15894940495491,0.387206882238388,0.874416053295136,-0.00546242296695709,0.485146045684814,0.787108600139618,0.00810690317302942,0.616761207580566,0.864675521850586,0.193993464112282,0.46336030960083,0.908188223838806,0.15894940495491,0.387206882238388,0.787108600139618,0.00810690317302942,0.616761207580566,0.793840944766998,0.179479137063026,0.581036806106567,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.820341229438782,-0.113342881202698,0.560529828071594,0.855769634246826,-0.0943452939391136,0.508681952953339,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.855769634246826,-0.0943452939391136,0.508681952953339,0.846625864505768,-0.12819692492485,0.516517341136932,0.984028935432434,-0.172777280211449,0.042837880551815,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.65490597486496,0.140991285443306,0.742441654205322,0.736574053764343,-0.0243753399699926,0.675917506217957,0.46117314696312,-0.0281441453844309,0.886863708496094,0.313594281673431,0.139182701706886,0.939301192760468,0.736574053764343,-0.0243753399699926,0.675917506217957,0.797767400741577,-0.104994267225266,0.593753576278687,0.542096614837646,-0.0831166654825211,0.836195468902588,0.46117314696312,-0.0281441453844309,0.886863708496094,0.0600041374564171,-0.192453533411026,0.979469835758209,0.191416949033737,-0.0921172648668289,0.977176547050476,0.182319968938828,0.114501133561134,0.976549506187439,-0.0292664598673582,0.127957031130791,0.991347789764404, 0.85977029800415,0.296936422586441,0.415480256080627,0.821655750274658,0.296962469816208,0.486513197422028,0.750506460666656,0.343903452157974,0.564331829547882,0.720846891403198,0.393656641244888,0.570450901985168,0.773433268070221,0.347118884325027,0.53038614988327,0.750506460666656,0.343903452157974,0.564331829547882,0.821655750274658,0.296962469816208,0.486513197422028,0.410660326480865,0.0589907094836235,0.909878134727478,0.33416548371315,0.26105335354805,0.905640423297882,0.55342048406601,0.140735372900963,0.820925891399384,0.503296196460724,0.0546823143959045,0.862382054328918,0.400608420372009,-0.480024576187134,0.780441761016846,0.656731724739075,-0.381447851657867,0.650538980960846,0.678119361400604,-0.318360239267349,0.662420451641083,0.378649204969406,-0.51500403881073,0.769022524356842,0.0272070206701756,0.178279355168343,0.983603715896606,0.0931223928928375,0.201938465237617,0.97496110200882,0.0304032936692238,0.174695551395416,0.984152972698212,0.0284836571663618,0.148866042494774,0.988447070121765,0.0931223928928375,0.201938465237617,0.97496110200882,0.163330301642418,0.241669088602066,0.956514120101929,0.0344220362603664,0.22930283844471,0.972746253013611,0.0304032936692238,0.174695551395416,0.984152972698212,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.978873014450073,-0.188474208116531,-0.0792786628007889,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.990714609622955,-0.135222300887108,-0.0141245061531663,0.984028935432434,-0.172777280211449,0.042837880551815,0.990583539009094,-0.136551707983017,0.0098949521780014,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.921219646930695,-0.0589233264327049,0.384554862976074,0.727879226207733,-0.243267610669136,0.641102731227875,0.710833370685577,-0.195758193731308,0.675569832324982,0.909473538398743,-0.0684049502015114,0.410095930099487,0.651034355163574,-0.303375482559204,0.695785582065582,0.645662844181061,-0.29273384809494,0.705284595489502,0.710833370685577,-0.195758193731308,0.675569832324982, 0.727879226207733,-0.243267610669136,0.641102731227875,0.623109459877014,-0.205047786235809,0.754778146743774,0.705142974853516,-0.157100901007652,0.691442430019379,0.710833370685577,-0.195758193731308,0.675569832324982,0.645662844181061,-0.29273384809494,0.705284595489502,0.9190753698349,-0.11298330873251,0.377538323402405,0.909473538398743,-0.0684049502015114,0.410095930099487,0.710833370685577,-0.195758193731308,0.675569832324982,0.705142974853516,-0.157100901007652,0.691442430019379,0.886316955089569,0.0816843584179878,0.455817818641663,0.841468989849091,0.227338507771492,0.490150064229965,0.813554108142853,0.0718955099582672,0.577027499675751,0.771234273910522,0.123447246849537,0.62446653842926,0.813554108142853,0.0718955099582672,0.577027499675751,0.832460403442383,-0.0762069076299667,0.548818945884705,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.813554108142853,0.0718955099582672,0.577027499675751,0.841468989849091,0.227338507771492,0.490150064229965,0.853365004062653,0.0768043100833893,0.515625178813934,0.813554108142853,0.0718955099582672,0.577027499675751,0.825742661952972,-0.0501102656126022,0.561816692352295,0.802095234394073,-0.0203569829463959,0.596849083900452,0.771234273910522,0.123447246849537,0.62446653842926,0.85977029800415,0.296936422586441,0.415480256080627,0.720846891403198,0.393656641244888,0.570450901985168,0.698984086513519,0.246289730072021,0.671388566493988,0.885397613048553,0.234036833047867,0.401618927717209,0.698984086513519,0.246289730072021,0.671388566493988,0.642289221286774,0.115071445703506,0.757775127887726,0.870097935199738,0.102833516895771,0.482032060623169,0.885397613048553,0.234036833047867,0.401618927717209,0.115422785282135,-0.952069759368896,0.283268004655838,0.164180904626846,-0.958690702915192,0.232285901904106,0.171536713838577,-0.946371257305145,0.273782074451447,0.0454688854515553,-0.765503704547882,0.641822934150696,0.225757539272308,-0.896350860595703,0.381560862064362,0.164180904626846,-0.958690702915192,0.232285901904106, 0.115422785282135,-0.952069759368896,0.283268004655838,0.194313436746597,-0.80370157957077,0.562410891056061,0.72280216217041,-0.137790024280548,0.677178680896759,0.76386970281601,-0.0586191527545452,0.642702758312225,0.628606140613556,-0.0929744690656662,0.77214640378952,0.605580151081085,-0.127637818455696,0.785481572151184,0.826119303703308,-0.120154865086079,0.550535798072815,0.85496574640274,-0.0235987044870853,0.518147349357605,0.76386970281601,-0.0586191527545452,0.642702758312225,0.72280216217041,-0.137790024280548,0.677178680896759,0.900704562664032,-0.383264392614365,0.204547420144081,0.916550815105438,-0.369929283857346,0.151943743228912,0.933318138122559,-0.313118785619736,0.175709679722786,0.903808772563934,-0.380508303642273,0.19581413269043,0.934174954891205,-0.332788705825806,0.128719761967659,0.926874995231628,-0.321304202079773,0.194078236818314,0.933318138122559,-0.313118785619736,0.175709679722786,0.916550815105438,-0.369929283857346,0.151943743228912,0.918524086475372,-0.00282709067687392,0.395354956388474,0.96756237745285,-0.0955442041158676,0.233868315815926,0.933318138122559,-0.313118785619736,0.175709679722786,0.926874995231628,-0.321304202079773,0.194078236818314,0.629800915718079,-0.358788877725601,0.68892765045166,0.550090253353119,-0.357467710971832,0.754730105400085,0.523068964481354,-0.400331109762192,0.752418637275696,0.515636503696442,-0.41490975022316,0.749645829200745,0.226486593484879,0.604172766208649,-0.76398891210556,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791,0.152718812227249,0.346232503652573,-0.925634920597076,0.962022840976715,-0.137412339448929,0.235859960317612,0.952154934406281,-0.291899025440216,0.0905317366123199,0.76568216085434,0.0699278339743614,-0.639406681060791,0.853913903236389,0.342162936925888,-0.392116755247116,0.76568216085434,0.0699278339743614,-0.639406681060791,0.952154934406281,-0.291899025440216,0.0905317366123199,0.888055205345154,-0.428246527910233,-0.167221024632454,0.658207952976227,-0.19222703576088,-0.727881193161011, 0.152718812227249,0.346232503652573,-0.925634920597076,0.76568216085434,0.0699278339743614,-0.639406681060791,0.658207952976227,-0.19222703576088,-0.727881193161011,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.941693007946014,-0.139167279005051,-0.30634418129921,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.658207952976227,-0.19222703576088,-0.727881193161011,0.888055205345154,-0.428246527910233,-0.167221024632454,0.961935639381409,0.00657567568123341,0.273196935653687,0.997385084629059,0.0175571031868458,0.0701054036617279,0.987097263336182,-0.0312144737690687,0.157049849629402,0.947793483734131,-0.0109208915382624,0.318697780370712,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.995871722698212,-0.0808055028319359,0.041352104395628,0.987097263336182,-0.0312144737690687,0.157049849629402,0.997385084629059,0.0175571031868458,0.0701054036617279,0.807750403881073,-0.224028185009956,0.545298755168915,0.94478839635849,-0.0280621573328972,0.326477229595184,0.949546575546265,-0.188553437590599,0.250617027282715,0.895655035972595,-0.253568202257156,0.365383625030518,0.691827952861786,-0.359834015369415,0.626013994216919,0.807750403881073,-0.224028185009956,0.545298755168915,0.895655035972595,-0.253568202257156,0.365383625030518,0.780404269695282,-0.392066359519959,0.487086415290833,0.651034355163574,-0.303375482559204,0.695785582065582,0.727879226207733,-0.243267610669136,0.641102731227875,0.807750403881073,-0.224028185009956,0.545298755168915,0.691827952861786,-0.359834015369415,0.626013994216919,0.921219646930695,-0.0589233264327049,0.384554862976074,0.94478839635849,-0.0280621573328972,0.326477229595184,0.807750403881073,-0.224028185009956,0.545298755168915,0.727879226207733,-0.243267610669136,0.641102731227875,0.511712968349457,-0.26713839173317,0.816570222377777,0.630171060562134,-0.220097869634628,0.744608163833618,0.663574039936066,-0.114788979291916,0.739251613616943,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943, 0.630171060562134,-0.220097869634628,0.744608163833618,0.662703216075897,-0.235535204410553,0.710878074169159,0.585816919803619,-0.176041945815086,0.791092753410339,0.443824082612991,-0.204101487994194,0.872561037540436,0.477897197008133,-0.208041027188301,0.853424370288849,0.663574039936066,-0.114788979291916,0.739251613616943,0.655753970146179,-0.0819050073623657,0.750518679618835,0.634909212589264,-0.137729376554489,0.760211110115051,0.705349028110504,-0.217919707298279,0.674532234668732,0.899602174758911,-0.197590529918671,0.389453411102295,0.844319820404053,-0.143771529197693,0.51619154214859,0.899602174758911,-0.197590529918671,0.389453411102295,0.945337653160095,-0.174788698554039,0.275292009115219,0.941718637943268,-0.180898189544678,0.283622801303864,0.844319820404053,-0.143771529197693,0.51619154214859,0.993362247943878,-0.0349664911627769,0.109584823250771,0.987157821655273,-0.152729243040085,-0.0468318425118923,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.98517507314682,-0.0804919600486755,0.151496455073357,0.996031820774078,-0.0883952453732491,0.0103418976068497,0.990583539009094,-0.136551707983017,0.0098949521780014,0.98186069726944,-0.153709232807159,0.111008986830711,0.98517507314682,-0.0804919600486755,0.151496455073357,0.663574039936066,-0.114788979291916,0.739251613616943,0.585816919803619,-0.176041945815086,0.791092753410339,0.501314342021942,-0.180266559123993,0.846278846263886,0.655753970146179,-0.0819050073623657,0.750518679618835,0.838521242141724,-0.431514054536819,-0.332682609558105,0.882519364356995,-0.329183042049408,-0.335854291915894,0.918742716312408,-0.362510144710541,-0.15651923418045,0.828101873397827,-0.525332391262054,-0.195635288953781,0.927650630474091,-0.232570663094521,-0.292190253734589,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.918742716312408,-0.362510144710541,-0.15651923418045,0.882519364356995,-0.329183042049408,-0.335854291915894,0.96362441778183,-0.210319370031357,0.16490513086319,0.926652431488037,-0.373704701662064,0.0407436527311802,0.918742716312408,-0.362510144710541,-0.15651923418045, 0.970975339412689,-0.224040895700455,-0.0837406069040298,0.80888158082962,-0.583779513835907,-0.0700862184166908,0.828101873397827,-0.525332391262054,-0.195635288953781,0.918742716312408,-0.362510144710541,-0.15651923418045,0.926652431488037,-0.373704701662064,0.0407436527311802,-0.147914990782738,0.17213037610054,0.973905682563782,0.100095093250275,0.182193845510483,0.978154599666595,-0.0552638620138168,0.347488284111023,0.936054348945618,0.00455546798184514,0.298394352197647,0.954431772232056,-0.147914990782738,0.17213037610054,0.973905682563782,-0.220686122775078,-0.040834903717041,0.974489688873291,0.106603257358074,0.0133492052555084,0.994212031364441,0.100095093250275,0.182193845510483,0.978154599666595,0.970759510993958,-0.233238592743874,0.056795421987772,0.976300895214081,-0.175593838095665,-0.126504495739937,0.847399115562439,-0.142815440893173,-0.511388719081879,0.863667845726013,-0.255664467811584,-0.434411734342575,-0.0528050363063812,-0.813004612922668,0.579857885837555,0.270428031682968,-0.84670215845108,0.458218395709991,0.0610353648662567,-0.966653764247894,-0.248707070946693,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.900704562664032,-0.383264392614365,0.204547420144081,0.893001258373261,-0.370285004377365,0.255807995796204,0.895655035972595,-0.253568202257156,0.365383625030518,0.949546575546265,-0.188553437590599,0.250617027282715,0.810256838798523,-0.430587977170944,0.397590130567551,0.780404269695282,-0.392066359519959,0.487086415290833,0.895655035972595,-0.253568202257156,0.365383625030518,0.893001258373261,-0.370285004377365,0.255807995796204,-0.0776756703853607,-0.921032607555389,-0.381661415100098,-0.0787478685379028,-0.96028345823288,-0.26768359541893,0.0610353648662567,-0.966653764247894,-0.248707070946693,0.0540894381701946,-0.932692110538483,-0.35659471154213,-0.0776756703853607,-0.921032607555389,-0.381661415100098,0.0540894381701946,-0.932692110538483,-0.35659471154213,0.0587443448603153,-0.922947645187378,-0.380416542291641,-0.0771657377481461,-0.907520055770874,-0.412859290838242, 0.944392323493958,0.0710759162902832,0.321047365665436,0.991146802902222,-0.0709943845868111,0.112195692956448,0.976793885231018,-0.16974413394928,0.13061648607254,0.954735457897186,-0.0869630351662636,0.284460365772247,0.991146802902222,-0.0709943845868111,0.112195692956448,0.990583539009094,-0.136551707983017,0.0098949521780014,0.984028935432434,-0.172777280211449,0.042837880551815,0.976793885231018,-0.16974413394928,0.13061648607254,-0.00140566960908473,-0.234566405415535,0.97209906578064,0.312136799097061,-0.241864830255508,0.918733894824982,0.359973400831223,-0.258122891187668,0.896544337272644,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.359973400831223,-0.258122891187668,0.896544337272644,0.402891218662262,-0.177310451865196,0.897908508777618,0.00449910387396812,-0.161412835121155,0.986876726150513,-0.00386956869624555,-0.264760941267014,0.964306354522705,0.115422785282135,-0.952069759368896,0.283268004655838,0.0454688854515553,-0.765503704547882,0.641822934150696,0.00267285062000155,-0.590106904506683,0.807320654392242,-0.0352796316146851,-0.824001550674438,0.565488159656525,0.0416775047779083,-0.927180886268616,0.372288316488266,0.949846565723419,-0.197867274284363,0.242157250642776,0.96362441778183,-0.210319370031357,0.16490513086319,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.970975339412689,-0.224040895700455,-0.0837406069040298,0.927650630474091,-0.232570663094521,-0.292190253734589,0.965724050998688,-0.163102030754089,-0.201927617192268,0.986409723758698,-0.164261862635612,-0.00372203509323299,0.00449910387396812,-0.161412835121155,0.986876726150513,0.402891218662262,-0.177310451865196,0.897908508777618,0.414358675479889,-0.126704558730125,0.901250720024109,0.0111285699531436,-0.0777815505862236,0.9969083070755,0.414358675479889,-0.126704558730125,0.901250720024109,0.387449771165848,-0.245748713612556,0.888532638549805,0.00655650394037366,-0.135652124881744,0.990734815597534,0.0111285699531436,-0.0777815505862236,0.9969083070755, 0.928761661052704,-0.0844941884279251,0.360918909311295,0.993277549743652,-0.10496261715889,0.0488112159073353,0.985052049160004,-0.113364338874817,0.129696041345596,0.90520966053009,-0.162895515561104,0.392505496740341,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.99903529882431,-0.0258715786039829,-0.035483431071043,0.985052049160004,-0.113364338874817,0.129696041345596,0.993277549743652,-0.10496261715889,0.0488112159073353,0.940188527107239,-0.340047240257263,0.0203306917101145,0.90520966053009,-0.162895515561104,0.392505496740341,0.985052049160004,-0.113364338874817,0.129696041345596,-0.529633462429047,-0.0744152963161469,-0.844956040382385,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.572411417961121,0.114080429077148,-0.81199187040329,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.426414966583252,0.120833218097687,-0.896420419216156,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.572411417961121,0.114080429077148,-0.81199187040329,0.677804887294769,-0.293700158596039,0.674033224582672,0.71972918510437,-0.325454443693161,0.613244891166687,0.659502923488617,-0.421348959207535,0.622511804103851,0.598259091377258,-0.415802270174026,0.684977769851685,0.918524086475372,-0.00282709067687392,0.395354956388474,0.952345132827759,-0.057124700397253,0.299625486135483,0.935723841190338,0.105225577950478,0.336672723293304,0.916476547718048,0.0582267269492149,0.395828783512115,0.952345132827759,-0.057124700397253,0.299625486135483,0.987058341503143,-0.0681737512350082,0.145148620009422,0.960835516452789,0.146968066692352,0.234937101602554,0.935723841190338,0.105225577950478,0.336672723293304,0.94987964630127,-0.0038351418916136,0.312592297792435,0.910945057868958,-0.218233183026314,0.35007631778717,0.980899035930634,0.0846881344914436,0.175114318728447,0.96669465303421,0.168093785643578,0.192991986870766,0.928288996219635,-0.0903030559420586,0.360728323459625,0.974559843540192,0.0402764715254307,0.220478907227516,0.980899035930634,0.0846881344914436,0.175114318728447, 0.910945057868958,-0.218233183026314,0.35007631778717,0.949343860149384,0.194382473826408,0.246904209256172,0.953015685081482,0.205261945724487,0.222774803638458,0.972302615642548,0.043654702603817,0.229612305760384,0.94987964630127,-0.0038351418916136,0.312592297792435,0.953015685081482,0.205261945724487,0.222774803638458,0.970540165901184,0.124821022152901,0.206086173653603,0.966708958148956,-0.002308584516868,0.255868047475815,0.972302615642548,0.043654702603817,0.229612305760384,0.970540165901184,0.124821022152901,0.206086173653603,0.953015685081482,0.205261945724487,0.222774803638458,0.974692046642303,0.140635088086128,0.17377345263958,0.974692046642303,0.140635088086128,0.17377345263958,0.953015685081482,0.205261945724487,0.222774803638458,0.949343860149384,0.194382473826408,0.246904209256172,0.960835516452789,0.146968066692352,0.234937101602554,0.937154471874237,-0.0475939512252808,0.345653474330902,0.952320516109467,0.113910689949989,0.283037096261978,0.96669465303421,0.168093785643578,0.192991986870766,0.980852127075195,0.00218713283538818,0.194741636514664,0.952320516109467,0.113910689949989,0.283037096261978,0.949343860149384,0.194382473826408,0.246904209256172,0.94987964630127,-0.0038351418916136,0.312592297792435,0.96669465303421,0.168093785643578,0.192991986870766,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.560936093330383,0.519313037395477,-0.644720613956451,-0.875516295433044,0.353666007518768,-0.329228729009628,0.420062124729156,-0.858003616333008,0.295596987009048,0.562851548194885,-0.792488932609558,0.23486053943634,-0.032355971634388,-0.99692964553833,0.0713044255971909,-0.036917757242918,-0.99125212430954,0.126713573932648,0.420062124729156,-0.858003616333008,0.295596987009048,-0.036917757242918,-0.99125212430954,0.126713573932648,-0.021647073328495,-0.960853159427643,0.276211261749268, 0.176858365535736,-0.897578120231628,0.403824985027313,0.838521242141724,-0.431514054536819,-0.332682609558105,0.777718842029572,-0.48187255859375,-0.403673440217972,0.82772159576416,-0.350066870450974,-0.438554704189301,0.882519364356995,-0.329183042049408,-0.335854291915894,0.82772159576416,-0.350066870450974,-0.438554704189301,0.777718842029572,-0.48187255859375,-0.403673440217972,0.756419658660889,-0.554076313972473,-0.347604215145111,0.836000919342041,-0.399822771549225,-0.375824630260468,0.863667845726013,-0.255664467811584,-0.434411734342575,0.867056906223297,-0.245093911886215,-0.433752596378326,0.82772159576416,-0.350066870450974,-0.438554704189301,0.836000919342041,-0.399822771549225,-0.375824630260468,0.927650630474091,-0.232570663094521,-0.292190253734589,0.882519364356995,-0.329183042049408,-0.335854291915894,0.82772159576416,-0.350066870450974,-0.438554704189301,0.867056906223297,-0.245093911886215,-0.433752596378326,0.840808868408203,-0.369773417711258,0.395358175039291,0.920036554336548,-0.30953249335289,0.240254893898964,0.836000919342041,-0.399822771549225,-0.375824630260468,0.756419658660889,-0.554076313972473,-0.347604215145111,0.970759510993958,-0.233238592743874,0.056795421987772,0.863667845726013,-0.255664467811584,-0.434411734342575,0.836000919342041,-0.399822771549225,-0.375824630260468,0.920036554336548,-0.30953249335289,0.240254893898964,0.578185617923737,-0.0845057815313339,0.811517179012299,0.345462441444397,-0.298967152833939,0.889536023139954,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483,0.288461953401566,-0.251531571149826,0.923862278461456,0.288555771112442,-0.2911037504673,0.912137150764465,0.189583629369736,-0.286395132541656,0.939167618751526,0.535101175308228,-0.00626787729561329,0.844764709472656,0.578185617923737,-0.0845057815313339,0.811517179012299,0.288461953401566,-0.251531571149826,0.923862278461456,0.285702854394913,-0.151269629597664,0.946304082870483,0.748473048210144,-0.374994337558746,0.546961903572083, 0.755906164646149,-0.2192542552948,0.616873919963837,0.409548729658127,0.024171682074666,0.911967992782593,0.64728707075119,-0.269912004470825,0.712858319282532,0.728204727172852,-0.0192169677466154,0.685090184211731,0.31933718919754,0.337111681699753,0.885652005672455,0.409548729658127,0.024171682074666,0.911967992782593,0.755906164646149,-0.2192542552948,0.616873919963837,0.152718812227249,0.346232503652573,-0.925634920597076,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.611288368701935,0.178437694907188,-0.771029531955719,0.88115268945694,0.072045162320137,-0.467310845851898,0.710636675357819,0.109640218317509,-0.694963693618774,0.941693007946014,-0.139167279005051,-0.30634418129921,0.611288368701935,0.178437694907188,-0.771029531955719,0.266787320375443,-0.0615599937736988,-0.961787343025208,0.849067807197571,-0.235355824232101,-0.472960323095322,0.898844718933105,-0.132514029741287,-0.417753785848618,0.930897831916809,-0.328699737787247,0.15932896733284,0.922981798648834,-0.320070415735245,0.213681027293205,0.898844718933105,-0.132514029741287,-0.417753785848618,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.921016693115234,-0.344745218753815,0.181325793266296,0.930897831916809,-0.328699737787247,0.15932896733284,0.619684100151062,-0.672098994255066,0.405307918787003,0.749665677547455,-0.55081570148468,0.366883426904678,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621,0.749665677547455,-0.55081570148468,0.366883426904678,0.924175441265106,0.249484479427338,0.28923562169075,0.849923014640808,0.0266168173402548,0.526234149932861,0.710340082645416,-0.399401605129242,0.57956475019455,0.837971806526184,-0.0177910327911377,0.545423448085785,0.812450289726257,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257,-0.238335385918617,0.532090902328491,0.718032777309418,-0.160360962152481,0.677283763885498,0.442805558443069,-0.711188673973084,0.546016395092011,0.442805558443069,-0.711188673973084,0.546016395092011, 0.648021519184113,-0.726138114929199,0.229764148592949,0.877821445465088,-0.28317603468895,0.386317104101181,0.812450289726257,-0.238335385918617,0.532090902328491,0.877821445465088,-0.28317603468895,0.386317104101181,0.648021519184113,-0.726138114929199,0.229764148592949,0.770939111709595,-0.636473119258881,0.0235556345432997,0.908649146556854,-0.308447659015656,0.281454712152481,0.837971806526184,-0.0177910327911377,0.545423448085785,0.877821445465088,-0.28317603468895,0.386317104101181,0.908649146556854,-0.308447659015656,0.281454712152481,0.883517026901245,-0.041202936321497,0.46658331155777,0.955420434474945,-0.273161262273788,-0.112047769129276,0.819948792457581,-0.482310354709625,0.308319211006165,0.81360274553299,-0.323832809925079,0.482890188694,0.81360274553299,-0.323832809925079,0.482890188694,0.819948792457581,-0.482310354709625,0.308319211006165,0.776369571685791,-0.530167698860168,0.340840935707092,0.770434737205505,-0.328132152557373,0.546589076519012,0.856838226318359,0.0312061347067356,0.514640152454376,0.941693007946014,-0.139167279005051,-0.30634418129921,0.928679704666138,-0.214017242193222,0.30290362238884,0.856838226318359,0.0312061347067356,0.514640152454376,0.930178761482239,0.315359890460968,0.187924444675446,0.941693007946014,-0.139167279005051,-0.30634418129921,0.856838226318359,0.0312061347067356,0.514640152454376,0.732805073261261,0.230000048875809,0.640387892723084,0.930178761482239,0.315359890460968,0.187924444675446,0.766620635986328,-0.390746057033539,-0.509519696235657,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.719214975833893,-0.430595219135284,-0.545268356800079,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.361367613077164,-0.930869936943054,0.0538017079234123,0.0326823741197586,-0.96485161781311,-0.260755002498627,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.442805558443069,-0.711188673973084,0.546016395092011,0.494343549013138,-0.783010900020599,0.377516150474548,0.0326823741197586,-0.96485161781311,-0.260755002498627, -0.361367613077164,-0.930869936943054,0.0538017079234123,0.940188527107239,-0.340047240257263,0.0203306917101145,0.719214975833893,-0.430595219135284,-0.545268356800079,0.0326823741197586,-0.96485161781311,-0.260755002498627,0.494343549013138,-0.783010900020599,0.377516150474548,0.442805558443069,-0.711188673973084,0.546016395092011,0.718032777309418,-0.160360962152481,0.677283763885498,0.494343549013138,-0.783010900020599,0.377516150474548,0.746549785137177,0.0205342527478933,0.665012657642365,0.785623669624329,-0.0282825529575348,0.61805784702301,0.718032777309418,-0.160360962152481,0.677283763885498,0.928761661052704,-0.0844941884279251,0.360918909311295,0.90520966053009,-0.162895515561104,0.392505496740341,0.718032777309418,-0.160360962152481,0.677283763885498,0.785623669624329,-0.0282825529575348,0.61805784702301,0.940188527107239,-0.340047240257263,0.0203306917101145,0.494343549013138,-0.783010900020599,0.377516150474548,0.718032777309418,-0.160360962152481,0.677283763885498,0.90520966053009,-0.162895515561104,0.392505496740341,0.728204727172852,-0.0192169677466154,0.685090184211731,0.683746635913849,0.227861896157265,0.693231225013733,0.220439016819,0.602273344993591,0.767250597476959,0.31933718919754,0.337111681699753,0.885652005672455,0.675026595592499,0.510915398597717,0.532263576984406,0.164532527327538,0.859674274921417,0.483620911836624,0.220439016819,0.602273344993591,0.767250597476959,0.683746635913849,0.227861896157265,0.693231225013733,0.164532527327538,0.859674274921417,0.483620911836624,0.675026595592499,0.510915398597717,0.532263576984406,0.689203560352325,0.677581548690796,0.256674349308014,0.168165519833565,0.971532881259918,0.166865915060043,0.164532527327538,0.859674274921417,0.483620911836624,0.168165519833565,0.971532881259918,0.166865915060043,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.407276064157486,0.876896381378174,0.255301624536514,-0.598032653331757,0.367280632257462,-0.712363600730896,-0.560936093330383,0.519313037395477,-0.644720613956451,0.0532629415392876,0.673361361026764,-0.737392425537109, 0.0157992169260979,0.392201274633408,-0.919743716716766,-0.534112751483917,0.714107155799866,-0.452520221471787,0.130885064601898,0.893452942371368,-0.429663747549057,0.0532629415392876,0.673361361026764,-0.737392425537109,-0.560936093330383,0.519313037395477,-0.644720613956451,0.771966874599457,0.597103416919708,-0.218024387955666,0.77188766002655,0.415448874235153,-0.481239676475525,0.0532629415392876,0.673361361026764,-0.737392425537109,0.130885064601898,0.893452942371368,-0.429663747549057,0.743491053581238,0.170196279883385,-0.64672577381134,0.0157992169260979,0.392201274633408,-0.919743716716766,0.0532629415392876,0.673361361026764,-0.737392425537109,0.77188766002655,0.415448874235153,-0.481239676475525,0.715653717517853,-0.159719884395599,-0.679948031902313,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.00643475539982319,0.176812067627907,-0.984223604202271,0.720991909503937,-0.0311141833662987,-0.692244589328766,-0.593829154968262,0.197740450501442,-0.77991384267807,-0.611508309841156,0.264030992984772,-0.7458855509758,0.00643475539982319,0.176812067627907,-0.984223604202271,0.0297790002077818,0.0396078526973724,-0.99877142906189,-0.598032653331757,0.367280632257462,-0.712363600730896,0.0157992169260979,0.392201274633408,-0.919743716716766,0.00643475539982319,0.176812067627907,-0.984223604202271,-0.611508309841156,0.264030992984772,-0.7458855509758,0.743491053581238,0.170196279883385,-0.64672577381134,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.00643475539982319,0.176812067627907,-0.984223604202271,0.0157992169260979,0.392201274633408,-0.919743716716766,0.789831042289734,-0.580399453639984,-0.198251023888588,0.10502952337265,-0.714195668697357,-0.692021250724792,0.152815148234367,-0.51164585351944,-0.845497488975525,0.768442690372467,-0.500588834285736,-0.398631006479263,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.152815148234367,-0.51164585351944,-0.845497488975525,0.10502952337265,-0.714195668697357,-0.692021250724792, -0.568153619766235,-0.0387567244470119,-0.822009384632111,0.129408821463585,-0.283919304609299,-0.950075387954712,0.152815148234367,-0.51164585351944,-0.845497488975525,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.741453766822815,-0.373992174863815,-0.557114124298096,0.768442690372467,-0.500588834285736,-0.398631006479263,0.152815148234367,-0.51164585351944,-0.845497488975525,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.609373271465302,-0.198937028646469,-0.767520844936371,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.529633462429047,-0.0744152963161469,-0.844956040382385,-0.568153619766235,-0.0387567244470119,-0.822009384632111,0.442805558443069,-0.711188673973084,0.546016395092011,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.648021519184113,-0.726138114929199,0.229764148592949,-0.797735512256622,-0.550144195556641,-0.246899589896202,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.13529472053051,-0.983780562877655,-0.117775782942772,-0.361367613077164,-0.930869936943054,0.0538017079234123,-0.13529472053051,-0.983780562877655,-0.117775782942772,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.748543560504913,-0.365974009037018,-0.55294269323349,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.648021519184113,-0.726138114929199,0.229764148592949,-0.13529472053051,-0.983780562877655,-0.117775782942772,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.773767530918121,-0.490831345319748,-0.400460213422775,-0.797735512256622,-0.550144195556641,-0.246899589896202,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.621009290218353,-0.361309498548508,-0.695559442043304,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.773767530918121,-0.490831345319748,-0.400460213422775,0.728204727172852,-0.0192169677466154,0.685090184211731,0.755906164646149,-0.2192542552948,0.616873919963837, 0.91906201839447,-0.39140060544014,0.0461581349372864,0.893281400203705,-0.428035885095596,0.137235671281815,0.748473048210144,-0.374994337558746,0.546961903572083,0.937642931938171,-0.346572607755661,0.0267044957727194,0.91906201839447,-0.39140060544014,0.0461581349372864,0.755906164646149,-0.2192542552948,0.616873919963837,0.845922708511353,-0.200713187456131,-0.494094133377075,0.75577849149704,-0.394848763942719,-0.52239191532135,0.91906201839447,-0.39140060544014,0.0461581349372864,0.937642931938171,-0.346572607755661,0.0267044957727194,0.653988599777222,-0.593074798583984,-0.469639420509338,0.893281400203705,-0.428035885095596,0.137235671281815,0.91906201839447,-0.39140060544014,0.0461581349372864,0.75577849149704,-0.394848763942719,-0.52239191532135,0.675026595592499,0.510915398597717,0.532263576984406,0.683746635913849,0.227861896157265,0.693231225013733,0.882562458515167,-0.37857860326767,0.278857797384262,0.914948225021362,-0.193324074149132,0.354253560304642,0.728204727172852,-0.0192169677466154,0.685090184211731,0.893281400203705,-0.428035885095596,0.137235671281815,0.882562458515167,-0.37857860326767,0.278857797384262,0.683746635913849,0.227861896157265,0.693231225013733,0.653988599777222,-0.593074798583984,-0.469639420509338,0.576260924339294,-0.753080308437347,-0.317479759454727,0.882562458515167,-0.37857860326767,0.278857797384262,0.893281400203705,-0.428035885095596,0.137235671281815,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.914948225021362,-0.193324074149132,0.354253560304642,0.882562458515167,-0.37857860326767,0.278857797384262,0.576260924339294,-0.753080308437347,-0.317479759454727,0.625812768936157,-0.514012217521667,0.586642861366272,0.568605542182922,-0.712091386318207,0.411841779947281,0.699254095554352,-0.603147983551025,0.383739799261093,0.726148188114166,-0.493182122707367,0.479040950536728,0.625812768936157,-0.514012217521667,0.586642861366272,0.726148188114166,-0.493182122707367,0.479040950536728,0.748473048210144,-0.374994337558746,0.546961903572083,0.64728707075119,-0.269912004470825,0.712858319282532, 0.748473048210144,-0.374994337558746,0.546961903572083,0.726148188114166,-0.493182122707367,0.479040950536728,0.946356475353241,-0.319671094417572,0.0471152737736702,0.937642931938171,-0.346572607755661,0.0267044957727194,0.699254095554352,-0.603147983551025,0.383739799261093,0.951302230358124,-0.298469483852386,0.0770719945430756,0.946356475353241,-0.319671094417572,0.0471152737736702,0.726148188114166,-0.493182122707367,0.479040950536728,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.946356475353241,-0.319671094417572,0.0471152737736702,0.951302230358124,-0.298469483852386,0.0770719945430756,0.845922708511353,-0.200713187456131,-0.494094133377075,0.937642931938171,-0.346572607755661,0.0267044957727194,0.946356475353241,-0.319671094417572,0.0471152737736702,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.433967679738998,-0.800836622714996,0.412713944911957,0.568605542182922,-0.712091386318207,0.411841779947281,0.620464503765106,-0.659890949726105,0.42375436425209,0.433967679738998,-0.800836622714996,0.412713944911957,0.620464503765106,-0.659890949726105,0.42375436425209,0.552745521068573,-0.585487604141235,0.593023300170898,0.54015976190567,-0.714601397514343,0.444490998983383,0.433967679738998,-0.800836622714996,0.412713944911957,0.54015976190567,-0.714601397514343,0.444490998983383,0.764377176761627,-0.598457217216492,0.239951074123383,0.693809986114502,-0.652198612689972,0.305392682552338,0.433967679738998,-0.800836622714996,0.412713944911957,0.693809986114502,-0.652198612689972,0.305392682552338,0.699254095554352,-0.603147983551025,0.383739799261093,0.568605542182922,-0.712091386318207,0.411841779947281,0.764377176761627,-0.598457217216492,0.239951074123383,0.968429863452911,-0.214592844247818,0.126860067248344,0.957345426082611,-0.272242695093155,0.0968175828456879,0.693809986114502,-0.652198612689972,0.305392682552338,0.881676495075226,0.461544960737228,0.0980962067842484,0.932843506336212,0.333851307630539,-0.135448768734932,0.957345426082611,-0.272242695093155,0.0968175828456879, 0.968429863452911,-0.214592844247818,0.126860067248344,0.942937254905701,0.154236450791359,-0.295093923807144,0.951302230358124,-0.298469483852386,0.0770719945430756,0.957345426082611,-0.272242695093155,0.0968175828456879,0.932843506336212,0.333851307630539,-0.135448768734932,0.699254095554352,-0.603147983551025,0.383739799261093,0.693809986114502,-0.652198612689972,0.305392682552338,0.957345426082611,-0.272242695093155,0.0968175828456879,0.951302230358124,-0.298469483852386,0.0770719945430756,0.620464503765106,-0.659890949726105,0.42375436425209,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327,0.743466079235077,-0.337065368890762,0.577620208263397,0.699970245361328,0.172705575823784,-0.692975103855133,0.710636675357819,0.109640218317509,-0.694963693618774,0.937653958797455,-0.289538353681564,0.192282542586327,0.856441259384155,-0.50444495677948,0.10974358022213,0.937653958797455,-0.289538353681564,0.192282542586327,0.710636675357819,0.109640218317509,-0.694963693618774,0.88115268945694,0.072045162320137,-0.467310845851898,0.973303020000458,-0.0122882071882486,0.229194864630699,0.743466079235077,-0.337065368890762,0.577620208263397,0.937653958797455,-0.289538353681564,0.192282542586327,0.973303020000458,-0.0122882071882486,0.229194864630699,0.740522563457489,0.0606227926909924,0.6692915558815,0.636911451816559,-0.300338536500931,0.71002858877182,0.743466079235077,-0.337065368890762,0.577620208263397,0.740522563457489,0.0606227926909924,0.6692915558815,0.590947866439819,0.059150405228138,0.804538309574127,0.636911451816559,-0.300338536500931,0.71002858877182,0.590947866439819,0.059150405228138,0.804538309574127,0.520368456840515,0.258096873760223,0.814004063606262,0.686343193054199,0.200842931866646,0.698995769023895,0.810089349746704,-0.185254707932472,0.556269705295563,0.54015976190567,-0.714601397514343,0.444490998983383,0.552745521068573,-0.585487604141235,0.593023300170898,0.636911451816559,-0.300338536500931,0.71002858877182,0.810089349746704,-0.185254707932472,0.556269705295563, 0.772665083408356,-0.529866874217987,0.349613666534424,0.620464503765106,-0.659890949726105,0.42375436425209,0.743466079235077,-0.337065368890762,0.577620208263397,0.636911451816559,-0.300338536500931,0.71002858877182,0.552745521068573,-0.585487604141235,0.593023300170898,0.870513737201691,-0.304842829704285,0.386363327503204,0.89732414484024,-0.179725483059883,0.403122931718826,0.968429863452911,-0.214592844247818,0.126860067248344,0.764377176761627,-0.598457217216492,0.239951074123383,0.89732414484024,-0.179725483059883,0.403122931718826,0.849923014640808,0.0266168173402548,0.526234149932861,0.881676495075226,0.461544960737228,0.0980962067842484,0.968429863452911,-0.214592844247818,0.126860067248344,0.611288368701935,0.178437694907188,-0.771029531955719,0.930164098739624,0.356697469949722,0.0869576334953308,0.973303020000458,-0.0122882071882486,0.229194864630699,0.88115268945694,0.072045162320137,-0.467310845851898,0.66197681427002,0.379794925451279,0.646175265312195,0.740522563457489,0.0606227926909924,0.6692915558815,0.973303020000458,-0.0122882071882486,0.229194864630699,0.930164098739624,0.356697469949722,0.0869576334953308,0.611288368701935,0.178437694907188,-0.771029531955719,0.941693007946014,-0.139167279005051,-0.30634418129921,0.930178761482239,0.315359890460968,0.187924444675446,0.930164098739624,0.356697469949722,0.0869576334953308,0.930178761482239,0.315359890460968,0.187924444675446,0.732805073261261,0.230000048875809,0.640387892723084,0.66197681427002,0.379794925451279,0.646175265312195,0.930164098739624,0.356697469949722,0.0869576334953308,0.664898633956909,-0.325722575187683,0.672171533107758,0.683038532733917,-0.228187322616577,0.693821907043457,0.974376916885376,-0.212370634078979,0.0740836188197136,0.977968633174896,-0.17539019882679,0.113206177949905,0.717738389968872,-0.173748686909676,0.674287021160126,0.967301428318024,-0.248277440667152,0.0518288649618626,0.974376916885376,-0.212370634078979,0.0740836188197136,0.683038532733917,-0.228187322616577,0.693821907043457,0.715653717517853,-0.159719884395599,-0.679948031902313, 0.720991909503937,-0.0311141833662987,-0.692244589328766,0.974376916885376,-0.212370634078979,0.0740836188197136,0.967301428318024,-0.248277440667152,0.0518288649618626,0.743491053581238,0.170196279883385,-0.64672577381134,0.977968633174896,-0.17539019882679,0.113206177949905,0.974376916885376,-0.212370634078979,0.0740836188197136,0.720991909503937,-0.0311141833662987,-0.692244589328766,0.661345362663269,-0.681172966957092,0.314047187566757,0.66036581993103,-0.495232194662094,0.564501583576202,0.975407660007477,-0.161730393767357,0.149743661284447,0.979921102523804,-0.156960278749466,0.122955821454525,0.664898633956909,-0.325722575187683,0.672171533107758,0.977968633174896,-0.17539019882679,0.113206177949905,0.975407660007477,-0.161730393767357,0.149743661284447,0.66036581993103,-0.495232194662094,0.564501583576202,0.743491053581238,0.170196279883385,-0.64672577381134,0.77188766002655,0.415448874235153,-0.481239676475525,0.975407660007477,-0.161730393767357,0.149743661284447,0.977968633174896,-0.17539019882679,0.113206177949905,0.771966874599457,0.597103416919708,-0.218024387955666,0.979921102523804,-0.156960278749466,0.122955821454525,0.975407660007477,-0.161730393767357,0.149743661284447,0.77188766002655,0.415448874235153,-0.481239676475525,0.834912359714508,-0.36245208978653,0.414185792207718,0.84412956237793,-0.267634004354477,0.464561402797699,0.664898633956909,-0.325722575187683,0.672171533107758,0.66036581993103,-0.495232194662094,0.564501583576202,0.834912359714508,-0.36245208978653,0.414185792207718,0.66036581993103,-0.495232194662094,0.564501583576202,0.661345362663269,-0.681172966957092,0.314047187566757,0.813187956809998,-0.535195648670197,0.228672236204147,0.664898633956909,-0.325722575187683,0.672171533107758,0.84412956237793,-0.267634004354477,0.464561402797699,0.873907625675201,-0.238707512617111,0.423443168401718,0.683038532733917,-0.228187322616577,0.693821907043457,0.873907625675201,-0.238707512617111,0.423443168401718,0.905476927757263,-0.224815160036087,0.359957873821259,0.717738389968872,-0.173748686909676,0.674287021160126, 0.683038532733917,-0.228187322616577,0.693821907043457,0.921016693115234,-0.344745218753815,0.181325793266296,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.982178807258606,0.114838123321533,-0.148785173892975,0.987944602966309,0.0211450234055519,0.153357028961182,0.991854608058929,0.119089640676975,0.0451894104480743,0.919128894805908,0.0630135238170624,0.388884782791138,0.987944602966309,0.0211450234055519,0.153357028961182,0.982178807258606,0.114838123321533,-0.148785173892975,0.991854608058929,0.119089640676975,0.0451894104480743,0.982178807258606,0.114838123321533,-0.148785173892975,0.834912359714508,-0.36245208978653,0.414185792207718,0.813187956809998,-0.535195648670197,0.228672236204147,0.982178807258606,0.114838123321533,-0.148785173892975,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.84412956237793,-0.267634004354477,0.464561402797699,0.834912359714508,-0.36245208978653,0.414185792207718,0.597383677959442,-0.186877384781837,0.779877960681915,0.636335551738739,-0.147832229733467,0.757114708423615,0.906243920326233,-0.301860004663467,0.29597732424736,0.922981798648834,-0.320070415735245,0.213681027293205,0.636335551738739,-0.147832229733467,0.757114708423615,0.671223521232605,-0.0201855413615704,0.74098014831543,0.900076270103455,-0.156032308936119,0.406837373971939,0.906243920326233,-0.301860004663467,0.29597732424736,0.987944602966309,0.0211450234055519,0.153357028961182,0.7646564245224,-0.170687139034271,0.62142288684845,0.699551403522491,-0.470909416675568,0.537468254566193,0.921016693115234,-0.344745218753815,0.181325793266296,0.919128894805908,0.0630135238170624,0.388884782791138,0.7646564245224,-0.170687139034271,0.62142288684845,0.987944602966309,0.0211450234055519,0.153357028961182,0.671223521232605,-0.0201855413615704,0.74098014831543,0.636335551738739,-0.147832229733467,0.757114708423615,0.89732414484024,-0.179725483059883,0.403122931718826,0.870513737201691,-0.304842829704285,0.386363327503204,0.636335551738739,-0.147832229733467,0.757114708423615,0.597383677959442,-0.186877384781837,0.779877960681915, 0.849923014640808,0.0266168173402548,0.526234149932861,0.89732414484024,-0.179725483059883,0.403122931718826,0.619684100151062,-0.672098994255066,0.405307918787003,0.590675473213196,-0.574259579181671,0.566858351230621,0.921016693115234,-0.344745218753815,0.181325793266296,0.699551403522491,-0.470909416675568,0.537468254566193,0.878716766834259,-0.421581953763962,0.223887145519257,0.776369571685791,-0.530167698860168,0.340840935707092,0.906263113021851,-0.354522317647934,0.230219781398773,0.805564939975739,-0.533806264400482,0.257130265235901,0.988399267196655,0.136643067002296,-0.0662992894649506,0.924175441265106,0.249484479427338,0.28923562169075,0.749665677547455,-0.55081570148468,0.366883426904678,0.619684100151062,-0.672098994255066,0.405307918787003,0.67726731300354,-0.631388366222382,0.377700597047806,0.805564939975739,-0.533806264400482,0.257130265235901,0.749665677547455,-0.55081570148468,0.366883426904678,0.932843506336212,0.333851307630539,-0.135448768734932,0.881676495075226,0.461544960737228,0.0980962067842484,0.924175441265106,0.249484479427338,0.28923562169075,0.988399267196655,0.136643067002296,-0.0662992894649506,0.932843506336212,0.333851307630539,-0.135448768734932,0.988399267196655,0.136643067002296,-0.0662992894649506,0.975082695484161,0.0550070591270924,-0.214913904666901,0.942937254905701,0.154236450791359,-0.295093923807144,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.942937254905701,0.154236450791359,-0.295093923807144,0.975082695484161,0.0550070591270924,-0.214913904666901,0.958627998828888,-0.06352149695158,-0.277483999729156,0.911007940769196,-0.0263682082295418,-0.411545008420944,0.958627998828888,-0.06352149695158,-0.277483999729156,0.955420434474945,-0.273161262273788,-0.112047769129276,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788,-0.112047769129276,0.958627998828888,-0.06352149695158,-0.277483999729156,0.906263113021851,-0.354522317647934,0.230219781398773,0.819948792457581,-0.482310354709625,0.308319211006165,0.975082695484161,0.0550070591270924,-0.214913904666901, 0.878716766834259,-0.421581953763962,0.223887145519257,0.906263113021851,-0.354522317647934,0.230219781398773,0.958627998828888,-0.06352149695158,-0.277483999729156,0.776369571685791,-0.530167698860168,0.340840935707092,0.819948792457581,-0.482310354709625,0.308319211006165,0.906263113021851,-0.354522317647934,0.230219781398773,0.831347465515137,-0.304245948791504,-0.465076088905334,0.855084657669067,-0.451219111680985,-0.255404502153397,0.653988599777222,-0.593074798583984,-0.469639420509338,0.75577849149704,-0.394848763942719,-0.52239191532135,0.831347465515137,-0.304245948791504,-0.465076088905334,0.75577849149704,-0.394848763942719,-0.52239191532135,0.845922708511353,-0.200713187456131,-0.494094133377075,0.955420434474945,-0.273161262273788,-0.112047769129276,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731,0.300438493490219,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.576260924339294,-0.753080308437347,-0.317479759454727,0.739733874797821,-0.650235652923584,-0.173168674111366,0.576260924339294,-0.753080308437347,-0.317479759454727,0.653988599777222,-0.593074798583984,-0.469639420509338,0.855084657669067,-0.451219111680985,-0.255404502153397,0.654792129993439,-0.747980833053589,0.108498655259609,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.718589425086975,-0.627188920974731,0.300438493490219,0.726504981517792,-0.654014825820923,0.210843905806541,0.689203560352325,0.677581548690796,0.256674349308014,0.966807126998901,-0.0426941066980362,0.251915037631989,0.989448130130768,-0.0820280760526657,0.119431190192699,0.732895731925964,0.679829776287079,0.0263686496764421,0.654792129993439,-0.747980833053589,0.108498655259609,0.673599064350128,-0.729973196983337,0.115772970020771,0.989448130130768,-0.0820280760526657,0.119431190192699,0.966807126998901,-0.0426941066980362,0.251915037631989,0.661345362663269,-0.681172966957092,0.314047187566757,0.979921102523804,-0.156960278749466,0.122955821454525,0.989448130130768,-0.0820280760526657,0.119431190192699, 0.673599064350128,-0.729973196983337,0.115772970020771,0.771966874599457,0.597103416919708,-0.218024387955666,0.732895731925964,0.679829776287079,0.0263686496764421,0.989448130130768,-0.0820280760526657,0.119431190192699,0.979921102523804,-0.156960278749466,0.122955821454525,0.966807126998901,-0.0426941066980362,0.251915037631989,0.689203560352325,0.677581548690796,0.256674349308014,0.675026595592499,0.510915398597717,0.532263576984406,0.914948225021362,-0.193324074149132,0.354253560304642,0.966807126998901,-0.0426941066980362,0.251915037631989,0.914948225021362,-0.193324074149132,0.354253560304642,0.589496672153473,-0.806856513023376,-0.0384224876761436,0.654792129993439,-0.747980833053589,0.108498655259609,0.789831042289734,-0.580399453639984,-0.198251023888588,0.932135164737701,-0.321184366941452,0.167226210236549,0.908649146556854,-0.308447659015656,0.281454712152481,0.770939111709595,-0.636473119258881,0.0235556345432997,0.909835636615753,-0.0349062643945217,0.413498103618622,0.883517026901245,-0.041202936321497,0.46658331155777,0.908649146556854,-0.308447659015656,0.281454712152481,0.932135164737701,-0.321184366941452,0.167226210236549,0.909835636615753,-0.0349062643945217,0.413498103618622,0.932135164737701,-0.321184366941452,0.167226210236549,0.947174549102783,-0.313290327787399,0.0686262398958206,0.903367161750793,-0.021636750549078,0.428321927785873,0.789831042289734,-0.580399453639984,-0.198251023888588,0.768442690372467,-0.500588834285736,-0.398631006479263,0.947174549102783,-0.313290327787399,0.0686262398958206,0.932135164737701,-0.321184366941452,0.167226210236549,0.741453766822815,-0.373992174863815,-0.557114124298096,0.959232211112976,-0.282177299261093,0.015797957777977,0.947174549102783,-0.313290327787399,0.0686262398958206,0.768442690372467,-0.500588834285736,-0.398631006479263,0.85181188583374,-0.0614667385816574,0.52022910118103,0.903367161750793,-0.021636750549078,0.428321927785873,0.947174549102783,-0.313290327787399,0.0686262398958206,0.959232211112976,-0.282177299261093,0.015797957777977,0.909835636615753,-0.0349062643945217,0.413498103618622, 0.903367161750793,-0.021636750549078,0.428321927785873,0.936789333820343,-0.0987404808402061,0.335672438144684,0.917440295219421,-0.101929731667042,0.384595423936844,0.903367161750793,-0.021636750549078,0.428321927785873,0.85181188583374,-0.0614667385816574,0.52022910118103,0.96601414680481,-0.199814081192017,0.163984462618828,0.936789333820343,-0.0987404808402061,0.335672438144684,0.788077771663666,0.0518888607621193,0.61338484287262,0.669167935848236,0.129631534218788,0.731717109680176,0.808598875999451,0.0304549541324377,0.587571620941162,0.869269788265228,-0.0789045765995979,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.837971806526184,-0.0177910327911377,0.545423448085785,0.883517026901245,-0.041202936321497,0.46658331155777,0.869269788265228,-0.0789045765995979,0.488000065088272,0.808598875999451,0.0304549541324377,0.587571620941162,0.746549785137177,0.0205342527478933,0.665012657642365,0.837971806526184,-0.0177910327911377,0.545423448085785,0.81360274553299,-0.323832809925079,0.482890188694,0.770434737205505,-0.328132152557373,0.546589076519012,0.78486180305481,-0.111138336360455,0.60962301492691,0.883532881736755,-0.151341363787651,0.443244278430939,0.886961340904236,-0.0727596655488014,0.456076264381409,0.831347465515137,-0.304245948791504,-0.465076088905334,0.955420434474945,-0.273161262273788,-0.112047769129276,0.81360274553299,-0.323832809925079,0.482890188694,0.886961340904236,-0.0727596655488014,0.456076264381409,0.855084657669067,-0.451219111680985,-0.255404502153397,0.770434737205505,-0.328132152557373,0.546589076519012,0.724820017814636,-0.392161190509796,0.566432297229767,0.733931958675385,-0.110008127987385,0.670255243778229,0.78486180305481,-0.111138336360455,0.60962301492691,0.724820017814636,-0.392161190509796,0.566432297229767,0.699551403522491,-0.470909416675568,0.537468254566193,0.7646564245224,-0.170687139034271,0.62142288684845,0.733931958675385,-0.110008127987385,0.670255243778229,0.919128894805908,0.0630135238170624,0.388884782791138,0.815926849842072,-0.0521769113838673,0.575795948505402, 0.733931958675385,-0.110008127987385,0.670255243778229,0.7646564245224,-0.170687139034271,0.62142288684845,0.718589425086975,-0.627188920974731,0.300438493490219,0.78486180305481,-0.111138336360455,0.60962301492691,0.733931958675385,-0.110008127987385,0.670255243778229,0.815926849842072,-0.0521769113838673,0.575795948505402,0.900076270103455,-0.156032308936119,0.406837373971939,0.889522910118103,-0.00140424643177539,0.456888437271118,0.936789333820343,-0.0987404808402061,0.335672438144684,0.96601414680481,-0.199814081192017,0.163984462618828,0.889522910118103,-0.00140424643177539,0.456888437271118,0.867614150047302,0.0466058775782585,0.495049089193344,0.917440295219421,-0.101929731667042,0.384595423936844,0.936789333820343,-0.0987404808402061,0.335672438144684,0.869269788265228,-0.0789045765995979,0.488000065088272,0.917440295219421,-0.101929731667042,0.384595423936844,0.867614150047302,0.0466058775782585,0.495049089193344,0.788077771663666,0.0518888607621193,0.61338484287262,0.724820017814636,-0.392161190509796,0.566432297229767,0.770434737205505,-0.328132152557373,0.546589076519012,0.776369571685791,-0.530167698860168,0.340840935707092,0.67726731300354,-0.631388366222382,0.377700597047806,0.619684100151062,-0.672098994255066,0.405307918787003,0.699551403522491,-0.470909416675568,0.537468254566193,0.724820017814636,-0.392161190509796,0.566432297229767,0.67726731300354,-0.631388366222382,0.377700597047806,0.66197681427002,0.379794925451279,0.646175265312195,0.732805073261261,0.230000048875809,0.640387892723084,0.669167935848236,0.129631534218788,0.731717109680176,0.520368456840515,0.258096873760223,0.814004063606262,0.520368456840515,0.258096873760223,0.814004063606262,0.669167935848236,0.129631534218788,0.731717109680176,0.788077771663666,0.0518888607621193,0.61338484287262,0.686343193054199,0.200842931866646,0.698995769023895,0.671223521232605,-0.0201855413615704,0.74098014831543,0.870513737201691,-0.304842829704285,0.386363327503204,0.858721911907196,-0.0560792721807957,0.509364068508148,0.698842525482178,0.18292909860611,0.691488325595856, 0.74112343788147,0.26722252368927,0.615896224975586,0.698842525482178,0.18292909860611,0.691488325595856,0.858721911907196,-0.0560792721807957,0.509364068508148,0.74112343788147,0.26722252368927,0.615896224975586,0.858721911907196,-0.0560792721807957,0.509364068508148,0.810089349746704,-0.185254707932472,0.556269705295563,0.686343193054199,0.200842931866646,0.698995769023895,0.870513737201691,-0.304842829704285,0.386363327503204,0.772665083408356,-0.529866874217987,0.349613666534424,0.810089349746704,-0.185254707932472,0.556269705295563,0.858721911907196,-0.0560792721807957,0.509364068508148,0.906243920326233,-0.301860004663467,0.29597732424736,0.900076270103455,-0.156032308936119,0.406837373971939,0.96601414680481,-0.199814081192017,0.163984462618828,0.854979157447815,-0.303726255893707,-0.420429587364197,0.906243920326233,-0.301860004663467,0.29597732424736,0.854979157447815,-0.303726255893707,-0.420429587364197,0.849067807197571,-0.235355824232101,-0.472960323095322,0.922981798648834,-0.320070415735245,0.213681027293205,0.84412956237793,-0.267634004354477,0.464561402797699,0.954277276992798,-0.00887809786945581,-0.298790961503983,0.898844718933105,-0.132514029741287,-0.417753785848618,0.873907625675201,-0.238707512617111,0.423443168401718,0.898844718933105,-0.132514029741287,-0.417753785848618,0.849067807197571,-0.235355824232101,-0.472960323095322,0.905476927757263,-0.224815160036087,0.359957873821259,0.873907625675201,-0.238707512617111,0.423443168401718,0.934250891208649,-0.198644295334816,0.296168446540833,0.905476927757263,-0.224815160036087,0.359957873821259,0.849067807197571,-0.235355824232101,-0.472960323095322,0.854979157447815,-0.303726255893707,-0.420429587364197,0.96601414680481,-0.199814081192017,0.163984462618828,0.934250891208649,-0.198644295334816,0.296168446540833,0.854979157447815,-0.303726255893707,-0.420429587364197,0.717738389968872,-0.173748686909676,0.674287021160126,0.905476927757263,-0.224815160036087,0.359957873821259,0.934250891208649,-0.198644295334816,0.296168446540833,0.778299868106842,-0.129949271678925,0.614298403263092, 0.934250891208649,-0.198644295334816,0.296168446540833,0.96601414680481,-0.199814081192017,0.163984462618828,0.85181188583374,-0.0614667385816574,0.52022910118103,0.778299868106842,-0.129949271678925,0.614298403263092,0.715653717517853,-0.159719884395599,-0.679948031902313,0.967301428318024,-0.248277440667152,0.0518288649618626,0.963969707489014,-0.265031158924103,0.0228220708668232,0.722632110118866,-0.252884060144424,-0.643313705921173,0.717738389968872,-0.173748686909676,0.674287021160126,0.778299868106842,-0.129949271678925,0.614298403263092,0.963969707489014,-0.265031158924103,0.0228220708668232,0.967301428318024,-0.248277440667152,0.0518288649618626,0.85181188583374,-0.0614667385816574,0.52022910118103,0.959232211112976,-0.282177299261093,0.015797957777977,0.963969707489014,-0.265031158924103,0.0228220708668232,0.778299868106842,-0.129949271678925,0.614298403263092,0.741453766822815,-0.373992174863815,-0.557114124298096,0.722632110118866,-0.252884060144424,-0.643313705921173,0.963969707489014,-0.265031158924103,0.0228220708668232,0.959232211112976,-0.282177299261093,0.015797957777977,0.741453766822815,-0.373992174863815,-0.557114124298096,0.129408821463585,-0.283919304609299,-0.950075387954712,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.722632110118866,-0.252884060144424,-0.643313705921173,-0.568153619766235,-0.0387567244470119,-0.822009384632111,-0.572411417961121,0.114080429077148,-0.81199187040329,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.129408821463585,-0.283919304609299,-0.950075387954712,-0.593829154968262,0.197740450501442,-0.77991384267807,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.0741845220327377,-0.0867956131696701,-0.993460237979889,-0.572411417961121,0.114080429077148,-0.81199187040329,0.715653717517853,-0.159719884395599,-0.679948031902313,0.722632110118866,-0.252884060144424,-0.643313705921173,0.0741845220327377,-0.0867956131696701,-0.993460237979889,0.0297790002077818,0.0396078526973724,-0.99877142906189,0.925993382930756,0.073547326028347,-0.370306611061096, 0.989523768424988,0.120242863893509,-0.0799020603299141,0.853913903236389,0.342162936925888,-0.392116755247116,0.226486593484879,0.604172766208649,-0.76398891210556,0.989523768424988,0.120242863893509,-0.0799020603299141,0.918502330780029,-0.196233198046684,0.343287169933319,0.962022840976715,-0.137412339448929,0.235859960317612,0.853913903236389,0.342162936925888,-0.392116755247116,0.152718812227249,0.346232503652573,-0.925634920597076,0.710636675357819,0.109640218317509,-0.694963693618774,0.699970245361328,0.172705575823784,-0.692975103855133,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133,0.856441259384155,-0.50444495677948,0.10974358022213,0.819883346557617,-0.543677628040314,0.179460227489471,0.925993382930756,0.073547326028347,-0.370306611061096,0.856441259384155,-0.50444495677948,0.10974358022213,0.620464503765106,-0.659890949726105,0.42375436425209,0.568605542182922,-0.712091386318207,0.411841779947281,0.819883346557617,-0.543677628040314,0.179460227489471,0.726504981517792,-0.654014825820923,0.210843905806541,0.718589425086975,-0.627188920974731,0.300438493490219,0.815926849842072,-0.0521769113838673,0.575795948505402,0.965819001197815,-0.0271366275846958,0.257793039083481,0.855084657669067,-0.451219111680985,-0.255404502153397,0.886961340904236,-0.0727596655488014,0.456076264381409,0.883532881736755,-0.151341363787651,0.443244278430939,0.739733874797821,-0.650235652923584,-0.173168674111366,0.718589425086975,-0.627188920974731,0.300438493490219,0.739733874797821,-0.650235652923584,-0.173168674111366,0.883532881736755,-0.151341363787651,0.443244278430939,0.78486180305481,-0.111138336360455,0.60962301492691,0.900076270103455,-0.156032308936119,0.406837373971939,0.671223521232605,-0.0201855413615704,0.74098014831543,0.698842525482178,0.18292909860611,0.691488325595856,0.889522910118103,-0.00140424643177539,0.456888437271118,0.698842525482178,0.18292909860611,0.691488325595856,0.74112343788147,0.26722252368927,0.615896224975586,0.867614150047302,0.0466058775782585,0.495049089193344, 0.889522910118103,-0.00140424643177539,0.456888437271118,0.788077771663666,0.0518888607621193,0.61338484287262,0.867614150047302,0.0466058775782585,0.495049089193344,0.74112343788147,0.26722252368927,0.615896224975586,0.686343193054199,0.200842931866646,0.698995769023895,0.597383677959442,-0.186877384781837,0.779877960681915,0.922981798648834,-0.320070415735245,0.213681027293205,0.930897831916809,-0.328699737787247,0.15932896733284,0.575946867465973,-0.330290824174881,0.74779224395752,0.930897831916809,-0.328699737787247,0.15932896733284,0.921016693115234,-0.344745218753815,0.181325793266296,0.590675473213196,-0.574259579181671,0.566858351230621,0.575946867465973,-0.330290824174881,0.74779224395752,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.766620635986328,-0.390746057033539,-0.509519696235657,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.137073755264282,-0.758140206336975,-0.637521922588348,0.0486728809773922,-0.68095201253891,-0.730708718299866,-0.797735512256622,-0.550144195556641,-0.246899589896202,0.938213586807251,-0.216931000351906,0.269622415304184,0.979475617408752,-0.109372921288013,0.169307827949524,0.948027610778809,-0.215131908655167,0.234439536929131,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.979475617408752,-0.109372921288013,0.169307827949524,0.995871722698212,-0.0808055028319359,0.041352104395628,0.982620000839233,-0.16903156042099,0.076722227036953,0.568605542182922,-0.712091386318207,0.411841779947281,0.625812768936157,-0.514012217521667,0.586642861366272,0.819252371788025,-0.448852121829987,0.356871604919434,0.819883346557617,-0.543677628040314,0.179460227489471,0.64728707075119,-0.269912004470825,0.712858319282532,0.903722703456879,-0.336785912513733,0.26431143283844,0.819252371788025,-0.448852121829987,0.356871604919434,0.625812768936157,-0.514012217521667,0.586642861366272,0.0543623231351376,0.513473629951477,0.85638165473938,0.045425571501255,0.382962375879288,0.922646403312683,0.219657093286514,0.398345082998276,0.890545904636383, 0.20434632897377,0.515124678611755,0.832399606704712,0.045425571501255,0.382962375879288,0.922646403312683,0.0344220362603664,0.22930283844471,0.972746253013611,0.163330301642418,0.241669088602066,0.956514120101929,0.219657093286514,0.398345082998276,0.890545904636383,0.924175441265106,0.249484479427338,0.28923562169075,0.881676495075226,0.461544960737228,0.0980962067842484,0.849923014640808,0.0266168173402548,0.526234149932861,0.849923014640808,0.0266168173402548,0.526234149932861,0.597383677959442,-0.186877384781837,0.779877960681915,0.575946867465973,-0.330290824174881,0.74779224395752,0.710340082645416,-0.399401605129242,0.57956475019455,0.590675473213196,-0.574259579181671,0.566858351230621,0.710340082645416,-0.399401605129242,0.57956475019455,0.575946867465973,-0.330290824174881,0.74779224395752,0.54015976190567,-0.714601397514343,0.444490998983383,0.772665083408356,-0.529866874217987,0.349613666534424,0.764377176761627,-0.598457217216492,0.239951074123383,0.764377176761627,-0.598457217216492,0.239951074123383,0.772665083408356,-0.529866874217987,0.349613666534424,0.870513737201691,-0.304842829704285,0.386363327503204,0.938213586807251,-0.216931000351906,0.269622415304184,0.918502330780029,-0.196233198046684,0.343287169933319,0.928443729877472,-0.228811115026474,0.292639285326004,0.935753345489502,-0.270965844392776,0.225705921649933,0.918502330780029,-0.196233198046684,0.343287169933319,0.891989231109619,-0.254739731550217,0.373447239398956,0.840574324131012,-0.291103184223175,0.456830143928528,0.888055205345154,-0.428246527910233,-0.167221024632454,0.952154934406281,-0.291899025440216,0.0905317366123199,0.869891345500946,-0.342425405979156,0.355012476444244,0.887078821659088,-0.412128984928131,0.207944288849831,0.962022840976715,-0.137412339448929,0.235859960317612,0.840574324131012,-0.291103184223175,0.456830143928528,0.869891345500946,-0.342425405979156,0.355012476444244,0.952154934406281,-0.291899025440216,0.0905317366123199,0.928761661052704,-0.0844941884279251,0.360918909311295,0.928679704666138,-0.214017242193222,0.30290362238884, 0.982620000839233,-0.16903156042099,0.076722227036953,0.993277549743652,-0.10496261715889,0.0488112159073353,0.928679704666138,-0.214017242193222,0.30290362238884,0.941693007946014,-0.139167279005051,-0.30634418129921,0.888055205345154,-0.428246527910233,-0.167221024632454,0.887078821659088,-0.412128984928131,0.207944288849831,0.928679704666138,-0.214017242193222,0.30290362238884,0.887078821659088,-0.412128984928131,0.207944288849831,0.869891345500946,-0.342425405979156,0.355012476444244,0.948027610778809,-0.215131908655167,0.234439536929131,0.982620000839233,-0.16903156042099,0.076722227036953,0.918502330780029,-0.196233198046684,0.343287169933319,0.840574324131012,-0.291103184223175,0.456830143928528,0.962022840976715,-0.137412339448929,0.235859960317612,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.385834068059921,-0.169429570436478,-0.906876862049103,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.385834068059921,-0.169429570436478,-0.906876862049103,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.463894098997116,-0.177543491125107,-0.867917358875275,-0.499244570732117,-0.495106011629105,-0.711073040962219,-0.117666520178318,-0.734499752521515,-0.668329775333405,-0.0362379811704159,-0.262005388736725,-0.964385807514191,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.0560902766883373,-0.278950154781342,-0.958666086196899,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.00530779222026467,-0.225043326616287,-0.974334299564362, 0.060580100864172,-0.309540450572968,-0.948954582214355,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.0357764922082424,-0.768304586410522,-0.639083802700043,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.070097453892231,-0.765305280685425,-0.639839172363281,-0.0370321683585644,-0.265117049217224,-0.96350485086441,0.0560902766883373,-0.278950154781342,-0.958666086196899,0.0357764922082424,-0.768304586410522,-0.639083802700043,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.155012637376785,-0.308559864759445,-0.938489139080048,0.060580100864172,-0.309540450572968,-0.948954582214355,0.00530779222026467,-0.225043326616287,-0.974334299564362,-0.117666520178318,-0.734499752521515,-0.668329775333405,0.0705975443124771,-0.761587023735046,-0.644205927848816,0.060580100864172,-0.309540450572968,-0.948954582214355,-0.155012637376785,-0.308559864759445,-0.938489139080048,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.289194285869598,0.281266182661057,-0.915016949176788,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.268979072570801,0.152991950511932,-0.950917303562164,-0.278109550476074,0.416547179222107,-0.865530788898468,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.0239754971116781,0.848645508289337,-0.528418362140656,-0.26518127322197,0.597104549407959,-0.757063448429108,-0.289194285869598,0.281266182661057,-0.915016949176788,0.00547882029786706,0.479039758443832,-0.877776086330414, -0.914143800735474,0.108810022473335,-0.390514433383942,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.749875366687775,0.181030079722404,-0.636329352855682,0.370056182146072,0.811048626899719,-0.453054636716843,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.578557550907135,0.442773431539536,-0.684998393058777,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.0239754971116781,0.848645508289337,-0.528418362140656,0.00547882029786706,0.479039758443832,-0.877776086330414,0.0384715124964714,0.615228533744812,-0.787409543991089,0.103339314460754,0.947827875614166,-0.301568180322647,0.0384715124964714,0.615228533744812,-0.787409543991089,-0.0717302039265633,0.599237322807312,-0.797351539134979,0.0339763574302197,0.937289535999298,-0.346891850233078,0.103339314460754,0.947827875614166,-0.301568180322647,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.334298700094223,0.1620884090662,-0.92842435836792,-0.523017466068268,0.285451769828796,-0.803100228309631,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.677631020545959,0.0696527808904648,-0.732096076011658,-0.803184449672699,0.0743702203035355,-0.591069996356964,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.788628935813904,-0.377316504716873,-0.485486000776291,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.788628935813904,-0.377316504716873,-0.485486000776291, -0.850321054458618,-0.308020442724228,-0.426705420017242,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.788628935813904,-0.377316504716873,-0.485486000776291,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.975248992443085,0.0678367093205452,-0.210446119308472,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.945308268070221,0.226358875632286,-0.234848886728287,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.880580544471741,0.26120713353157,-0.395409554243088,-0.634040713310242,0.756764888763428,0.159057512879372, -0.467009961605072,0.872948586940765,-0.140934243798256,-0.92544549703598,0.271544277667999,-0.264224141836166,-0.945308268070221,0.226358875632286,-0.234848886728287,0.585816919803619,-0.176041945815086,0.791092753410339,0.662703216075897,-0.235535204410553,0.710878074169159,0.75313264131546,-0.288527101278305,0.591221868991852,0.638028085231781,-0.251523166894913,0.727774858474731,0.585816919803619,-0.176041945815086,0.791092753410339,0.638028085231781,-0.251523166894913,0.727774858474731,0.540978610515594,-0.216916099190712,0.812582015991211,0.501314342021942,-0.180266559123993,0.846278846263886,0.638028085231781,-0.251523166894913,0.727774858474731,0.75313264131546,-0.288527101278305,0.591221868991852,0.887619376182556,-0.256067276000977,0.382833331823349,0.874927282333374,-0.188851833343506,0.44591161608696,0.638028085231781,-0.251523166894913,0.727774858474731,0.874927282333374,-0.188851833343506,0.44591161608696,0.852472126483917,-0.133455187082291,0.505451321601868,0.540978610515594,-0.216916099190712,0.812582015991211,0.874927282333374,-0.188851833343506,0.44591161608696,0.887619376182556,-0.256067276000977,0.382833331823349,0.960171759128571,-0.181689232587814,0.212271526455879,0.961752712726593,-0.126318529248238,0.243054285645485,0.874927282333374,-0.188851833343506,0.44591161608696,0.961752712726593,-0.126318529248238,0.243054285645485,0.950795531272888,-0.131767466664314,0.280401825904846,0.852472126483917,-0.133455187082291,0.505451321601868,0.961752712726593,-0.126318529248238,0.243054285645485,0.960171759128571,-0.181689232587814,0.212271526455879,0.966324627399445,-0.156342566013336,0.204386278986931,0.968484222888947,-0.138258457183838,0.207178428769112,0.964455902576447,-0.157870531082153,0.211900100111961,0.950795531272888,-0.131767466664314,0.280401825904846,0.961752712726593,-0.126318529248238,0.243054285645485,0.968484222888947,-0.138258457183838,0.207178428769112,0.968484222888947,-0.138258457183838,0.207178428769112,0.966324627399445,-0.156342566013336,0.204386278986931,0.809566378593445,-0.159671008586884,0.564895987510681, 0.861340701580048,-0.127685099840164,0.491720139980316,0.964455902576447,-0.157870531082153,0.211900100111961,0.968484222888947,-0.138258457183838,0.207178428769112,0.861340701580048,-0.127685099840164,0.491720139980316,0.896426856517792,-0.172908827662468,0.408070415258408,0.606970250606537,-0.105902783572674,0.787636816501617,0.623109459877014,-0.205047786235809,0.754778146743774,0.896426856517792,-0.172908827662468,0.408070415258408,0.861340701580048,-0.127685099840164,0.491720139980316,0.606970250606537,-0.105902783572674,0.787636816501617,0.861340701580048,-0.127685099840164,0.491720139980316,0.809566378593445,-0.159671008586884,0.564895987510681,0.634909212589264,-0.137729376554489,0.760211110115051,0.634909212589264,-0.137729376554489,0.760211110115051,0.844319820404053,-0.143771529197693,0.51619154214859,0.757737696170807,-0.147417977452278,0.635689795017242,0.606970250606537,-0.105902783572674,0.787636816501617,0.941718637943268,-0.180898189544678,0.283622801303864,0.92750072479248,-0.198037564754486,0.31705442070961,0.757737696170807,-0.147417977452278,0.635689795017242,0.844319820404053,-0.143771529197693,0.51619154214859,0.9190753698349,-0.11298330873251,0.377538323402405,0.705142974853516,-0.157100901007652,0.691442430019379,0.757737696170807,-0.147417977452278,0.635689795017242,0.92750072479248,-0.198037564754486,0.31705442070961,0.623109459877014,-0.205047786235809,0.754778146743774,0.606970250606537,-0.105902783572674,0.787636816501617,0.757737696170807,-0.147417977452278,0.635689795017242,0.705142974853516,-0.157100901007652,0.691442430019379,0.936089217662811,-0.214836105704308,0.278536230325699,0.935290277004242,-0.181792959570885,0.303617179393768,0.9190753698349,-0.11298330873251,0.377538323402405,0.92750072479248,-0.198037564754486,0.31705442070961,0.949846565723419,-0.197867274284363,0.242157250642776,0.935290277004242,-0.181792959570885,0.303617179393768,0.936089217662811,-0.214836105704308,0.278536230325699,0.0527103617787361,-0.77695095539093,0.627350628376007,-0.0512008517980576,-0.79354852437973,0.606349110603333, -0.0138667495921254,-0.712914168834686,0.701114177703857,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0512008517980576,-0.79354852437973,0.606349110603333,-0.0352796316146851,-0.824001550674438,0.565488159656525,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0138667495921254,-0.712914168834686,0.701114177703857,0.235940769314766,-0.737428665161133,0.632875144481659,0.0527103617787361,-0.77695095539093,0.627350628376007,0.0200271289795637,-0.717210829257965,0.696568429470062,0.152485489845276,-0.706423759460449,0.691168308258057,0.363939642906189,-0.646557629108429,0.670455992221832,0.235940769314766,-0.737428665161133,0.632875144481659,0.152485489845276,-0.706423759460449,0.691168308258057,0.317214041948318,-0.645033359527588,0.695202946662903,0.363939642906189,-0.646557629108429,0.670455992221832,0.317214041948318,-0.645033359527588,0.695202946662903,0.389301151037216,-0.589295387268066,0.707937479019165,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.286647915840149,-0.584438979625702,0.759120643138886,0.389301151037216,-0.589295387268066,0.707937479019165,0.34683957695961,-0.624991238117218,0.699348449707031,0.184710487723351,-0.617817997932434,0.764318585395813,0.34683957695961,-0.624991238117218,0.699348449707031,0.139593034982681,-0.543097734451294,0.827984690666199,0.168070778250694,-0.457133919000626,0.873373210430145,0.196283534169197,-0.554668664932251,0.808588564395905,0.358242690563202,-0.369526594877243,0.857386887073517,0.359977900981903,-0.319483041763306,0.876553773880005,0.161047965288162,-0.353496670722961,0.921468198299408,0.16572479903698,-0.647090375423431,0.744183719158173,0.196283534169197,-0.554668664932251,0.808588564395905,0.161047965288162,-0.353496670722961,0.921468198299408,0.0293192863464355,-0.389476090669632,0.920569777488709,0.196283534169197,-0.554668664932251,0.808588564395905,0.16572479903698,-0.647090375423431,0.744183719158173,0.255019038915634,-0.916801631450653,0.307311117649078,0.191021859645844,-0.901510059833527,0.388317227363586, 0.771733045578003,-0.627318918704987,0.104398690164089,0.813187956809998,-0.535195648670197,0.228672236204147,0.661345362663269,-0.681172966957092,0.314047187566757,0.673599064350128,-0.729973196983337,0.115772970020771,0.771733045578003,-0.627318918704987,0.104398690164089,0.673599064350128,-0.729973196983337,0.115772970020771,0.654792129993439,-0.747980833053589,0.108498655259609,0.726504981517792,-0.654014825820923,0.210843905806541,0.991854608058929,0.119089640676975,0.0451894104480743,0.813187956809998,-0.535195648670197,0.228672236204147,0.771733045578003,-0.627318918704987,0.104398690164089,0.965819001197815,-0.0271366275846958,0.257793039083481,0.726504981517792,-0.654014825820923,0.210843905806541,0.965819001197815,-0.0271366275846958,0.257793039083481,0.771733045578003,-0.627318918704987,0.104398690164089,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.515466570854187,0.838185369968414,-0.178155809640884,0.190385565161705,0.977179288864136,-0.0942017361521721,0.130885064601898,0.893452942371368,-0.429663747549057,-0.482280492782593,0.875927150249481,0.0125399529933929,0.168165519833565,0.971532881259918,0.166865915060043,0.190385565161705,0.977179288864136,-0.0942017361521721,-0.515466570854187,0.838185369968414,-0.178155809640884,0.689203560352325,0.677581548690796,0.256674349308014,0.732895731925964,0.679829776287079,0.0263686496764421,0.190385565161705,0.977179288864136,-0.0942017361521721,0.168165519833565,0.971532881259918,0.166865915060043,0.771966874599457,0.597103416919708,-0.218024387955666,0.130885064601898,0.893452942371368,-0.429663747549057,0.190385565161705,0.977179288864136,-0.0942017361521721,0.732895731925964,0.679829776287079,0.0263686496764421,0.883517026901245,-0.041202936321497,0.46658331155777,0.909835636615753,-0.0349062643945217,0.413498103618622,0.917440295219421,-0.101929731667042,0.384595423936844,0.869269788265228,-0.0789045765995979,0.488000065088272,-0.690630912780762,-0.290166169404984,-0.662444412708282,0.10502952337265,-0.714195668697357,-0.692021250724792,0.0209639705717564,-0.893982887268066,-0.44761049747467, -0.748543560504913,-0.365974009037018,-0.55294269323349,0.789831042289734,-0.580399453639984,-0.198251023888588,0.770939111709595,-0.636473119258881,0.0235556345432997,0.0209639705717564,-0.893982887268066,-0.44761049747467,0.10502952337265,-0.714195668697357,-0.692021250724792,0.970540165901184,0.124821022152901,0.206086173653603,0.534866094589233,0.53300929069519,0.655606091022491,0.956802248954773,0.196078270673752,0.214668840169907,0.966708958148956,-0.002308584516868,0.255868047475815,0.925993382930756,0.073547326028347,-0.370306611061096,0.226486593484879,0.604172766208649,-0.76398891210556,0.699970245361328,0.172705575823784,-0.692975103855133,0.897598922252655,-0.0851877480745316,0.432503432035446,0.971762239933014,-0.143596902489662,0.187237858772278,0.935753345489502,-0.270965844392776,0.225705921649933,0.928443729877472,-0.228811115026474,0.292639285326004,0.846449613571167,0.310930520296097,0.432256042957306,0.857260406017303,0.312566876411438,0.409153461456299,0.813006162643433,0.437411576509476,0.384307235479355,0.885035216808319,0.393218964338303,0.249181613326073,0.908188223838806,0.15894940495491,0.387206882238388,0.854240536689758,0.355053037405014,0.379750460386276,0.857260406017303,0.312566876411438,0.409153461456299,0.846449613571167,0.310930520296097,0.432256042957306,0.793774306774139,0.385858178138733,0.470144480466843,0.718716561794281,0.339281320571899,0.60690575838089,0.728551387786865,0.287864476442337,0.621568083763123,0.87058699131012,0.227341398596764,0.436341762542725,0.862693786621094,0.213308542966843,0.458539962768555,0.688724040985107,0.428849041461945,0.584591865539551,0.843018114566803,0.354378879070282,0.404643177986145,0.87058699131012,0.227341398596764,0.436341762542725,0.728551387786865,0.287864476442337,0.621568083763123,0.494429767131805,-0.0934201404452324,0.864182770252228,0.401639640331268,-0.00309631112031639,0.915792524814606,0.32480525970459,-0.177078545093536,0.929055869579315,0.59909462928772,0.124072253704071,0.791006743907928,0.61716902256012,-0.00506624486297369,0.786814272403717, 0.578135192394257,0.0218988731503487,0.815647065639496,0.616745948791504,-0.290956258773804,0.731415688991547,0.75023740530014,-0.238408371806145,0.616688966751099,0.775085091590881,-0.264017641544342,0.574053823947906,0.666223108768463,-0.303315341472626,0.681283056735992,0.75023740530014,-0.238408371806145,0.616688966751099,0.855076372623444,-0.165702432394028,0.491311639547348,0.872779548168182,-0.198945015668869,0.445731669664383,0.775085091590881,-0.264017641544342,0.574053823947906,0.476604402065277,-0.515640795230865,0.712013244628906,0.385886758565903,-0.746556282043457,0.541982591152191,0.425350964069366,-0.787436366081238,0.446117222309113,0.601338624954224,-0.55975753068924,0.570143282413483,0.385886758565903,-0.746556282043457,0.541982591152191,0.426225006580353,-0.76509952545166,0.482654064893723,0.408859342336655,-0.819536507129669,0.401489645242691,0.425350964069366,-0.787436366081238,0.446117222309113,0.892324268817902,-0.364589005708694,0.266143202781677,0.883809387683868,-0.290479838848114,0.366745710372925,0.868513345718384,-0.371388286352158,0.328260958194733,0.8774573802948,-0.435060352087021,0.201967760920525,0.868513345718384,-0.371388286352158,0.328260958194733,0.767249822616577,-0.595458924770355,0.23823593556881,0.807879209518433,-0.580146849155426,0.103734038770199,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199,0.767249822616577,-0.595458924770355,0.23823593556881,0.630033671855927,-0.76368510723114,0.140863940119743,0.698544383049011,-0.714900195598602,0.0308788027614355,0.630033671855927,-0.76368510723114,0.140863940119743,0.545321881771088,-0.833433032035828,0.0895174741744995,0.600540995597839,-0.799374520778656,-0.0187329761683941,0.698544383049011,-0.714900195598602,0.0308788027614355,0.598369121551514,-0.00250658229924738,0.801216602325439,0.476604402065277,-0.515640795230865,0.712013244628906,0.601338624954224,-0.55975753068924,0.570143282413483,0.756793797016144,-0.0805434510111809,0.64867240190506,0.683284997940063,0.154697299003601,0.713575720787048, 0.552154183387756,0.173749193549156,0.815436661243439,0.598369121551514,-0.00250658229924738,0.801216602325439,0.756793797016144,-0.0805434510111809,0.64867240190506,0.552154183387756,0.173749193549156,0.815436661243439,0.683284997940063,0.154697299003601,0.713575720787048,0.570054233074188,-0.200027942657471,0.796885788440704,0.362627446651459,-0.180693462491035,0.914249002933502,0.66197681427002,0.379794925451279,0.646175265312195,0.520368456840515,0.258096873760223,0.814004063606262,0.590947866439819,0.059150405228138,0.804538309574127,0.740522563457489,0.0606227926909924,0.6692915558815,0.399795055389404,-0.131603688001633,0.907107710838318,0.628606140613556,-0.0929744690656662,0.77214640378952,0.616745948791504,-0.290956258773804,0.731415688991547,0.381202667951584,-0.36025732755661,0.851410090923309,0.399795055389404,-0.131603688001633,0.907107710838318,0.381202667951584,-0.36025732755661,0.851410090923309,0.0599219687283039,-0.361293613910675,0.93052476644516,0.192558065056801,-0.101361930370331,0.976036429405212,0.381202667951584,-0.36025732755661,0.851410090923309,0.616745948791504,-0.290956258773804,0.731415688991547,0.666223108768463,-0.303315341472626,0.681283056735992,0.462689489126205,-0.42478209733963,0.778125107288361,0.279211044311523,-0.955691933631897,0.093242421746254,0.164180904626846,-0.958690702915192,0.232285901904106,0.225757539272308,-0.896350860595703,0.381560862064362,0.304768770933151,-0.92969423532486,0.206844300031662,0.026754243299365,0.843723058700562,0.53611159324646,-0.204613357782364,0.564212739467621,0.799873352050781,-0.00705753592774272,0.88813054561615,0.45953705906868,0.0228955876082182,0.892617464065552,0.450233042240143,-0.0965566337108612,0.382317036390305,0.918972492218018,0.104800805449486,0.884988248348236,0.453665733337402,-0.00705753592774272,0.88813054561615,0.45953705906868,-0.204613357782364,0.564212739467621,0.799873352050781,0.234877377748489,0.967058181762695,0.0981385260820389,0.216771319508553,0.955569624900818,0.199742004275322,-0.00705753592774272,0.88813054561615,0.45953705906868, 0.104800805449486,0.884988248348236,0.453665733337402,0.143662974238396,0.945594608783722,0.29191067814827,0.0228955876082182,0.892617464065552,0.450233042240143,-0.00705753592774272,0.88813054561615,0.45953705906868,0.216771319508553,0.955569624900818,0.199742004275322,0.802525162696838,0.518118143081665,0.295815676450729,0.875872433185577,0.296488851308823,0.38071221113205,0.611026585102081,0.780639052391052,-0.131336376070976,0.466519266366959,0.882316112518311,0.0622739568352699,0.611026585102081,0.780639052391052,-0.131336376070976,0.123842000961304,0.97543865442276,-0.182160839438438,-0.427035480737686,0.790110290050507,-0.439734488725662,0.466519266366959,0.882316112518311,0.0622739568352699,0.247720703482628,0.139039516448975,0.95880264043808,0.463392287492752,0.731873750686646,0.499628275632858,0.450289756059647,0.883358836174011,0.130062907934189,0.450289756059647,0.883358836174011,0.130062907934189,-0.0188573095947504,0.503645062446594,0.863704860210419,0.247720703482628,0.139039516448975,0.95880264043808,0.123842000961304,0.97543865442276,-0.182160839438438,0.611026585102081,0.780639052391052,-0.131336376070976,0.450289756059647,0.883358836174011,0.130062907934189,0.463392287492752,0.731873750686646,0.499628275632858,0.875872433185577,0.296488851308823,0.38071221113205,0.785606920719147,0.572498440742493,0.234664186835289,0.450289756059647,0.883358836174011,0.130062907934189,0.611026585102081,0.780639052391052,-0.131336376070976,0.315801054239273,0.0731089860200882,0.946004629135132,-0.0188573095947504,0.503645062446594,0.863704860210419,0.450289756059647,0.883358836174011,0.130062907934189,0.785606920719147,0.572498440742493,0.234664186835289,0.247720703482628,0.139039516448975,0.95880264043808,-0.0188573095947504,0.503645062446594,0.863704860210419,-0.505003929138184,-0.526722073554993,0.683765232563019,0.101962603628635,-0.729668021202087,0.676156997680664,0.247720703482628,0.139039516448975,0.95880264043808,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.505003929138184,-0.526722073554993,0.683765232563019, 0.315801054239273,0.0731089860200882,0.946004629135132,0.139593034982681,-0.543097734451294,0.827984690666199,-0.350690484046936,-0.68567168712616,0.637863993644714,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.0188573095947504,0.503645062446594,0.863704860210419,0.315801054239273,0.0731089860200882,0.946004629135132,-0.505003929138184,-0.526722073554993,0.683765232563019,-0.350690484046936,-0.68567168712616,0.637863993644714,0.101962603628635,-0.729668021202087,0.676156997680664,0.139593034982681,-0.543097734451294,0.827984690666199,0.34683957695961,-0.624991238117218,0.699348449707031,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.350690484046936,-0.68567168712616,0.637863993644714,0.389301151037216,-0.589295387268066,0.707937479019165,-0.243915364146233,-0.739838838577271,0.627011835575104,-0.219358518719673,-0.771041095256805,0.597810626029968,0.34683957695961,-0.624991238117218,0.699348449707031,0.154463171958923,-0.632704854011536,0.758831799030304,0.220668077468872,-0.699356377124786,0.679857552051544,-0.219358518719673,-0.771041095256805,0.597810626029968,-0.243915364146233,-0.739838838577271,0.627011835575104,0.101962603628635,-0.729668021202087,0.676156997680664,-0.350690484046936,-0.68567168712616,0.637863993644714,-0.219358518719673,-0.771041095256805,0.597810626029968,0.220668077468872,-0.699356377124786,0.679857552051544,0.389301151037216,-0.589295387268066,0.707937479019165,0.317214041948318,-0.645033359527588,0.695202946662903,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.243915364146233,-0.739838838577271,0.627011835575104,0.152485489845276,-0.706423759460449,0.691168308258057,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.307040005922318,-0.765494167804718,0.565460085868835,0.317214041948318,-0.645033359527588,0.695202946662903,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.307040005922318,-0.765494167804718,0.565460085868835,-0.368264228105545,-0.82679408788681,0.425197541713715,0.154463171958923,-0.632704854011536,0.758831799030304, -0.243915364146233,-0.739838838577271,0.627011835575104,-0.307040005922318,-0.765494167804718,0.565460085868835,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.368264228105545,-0.82679408788681,0.425197541713715,0.152485489845276,-0.706423759460449,0.691168308258057,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.368264228105545,-0.82679408788681,0.425197541713715,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.15265741944313,-0.753475069999695,0.639508426189423,0.0200271289795637,-0.717210829257965,0.696568429470062,-0.0138667495921254,-0.712914168834686,0.701114177703857,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.0252817086875439,-0.707010686397552,0.706750750541687,-0.0965530276298523,-0.965101063251495,0.243428528308868,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0138667495921254,-0.712914168834686,0.701114177703857,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.0965530276298523,-0.965101063251495,0.243428528308868,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.332527428865433,-0.892948389053345,0.303428173065186,-0.213873416185379,-0.944955408573151,0.24762362241745,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.0965530276298523,-0.965101063251495,0.243428528308868,0.0694410875439644,-0.971313714981079,0.227437034249306,0.139529138803482,-0.986220002174377,-0.0888914614915848,-0.0252817086875439,-0.707010686397552,0.706750750541687,0.0366746000945568,-0.755166232585907,0.654506683349609,0.0694410875439644,-0.971313714981079,0.227437034249306,-0.0965530276298523,-0.965101063251495,0.243428528308868,0.206430405378342,-0.778748571872711,0.592399477958679,0.311435610055923,-0.928014516830444,0.204443141818047, 0.0694410875439644,-0.971313714981079,0.227437034249306,0.0366746000945568,-0.755166232585907,0.654506683349609,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.0694410875439644,-0.971313714981079,0.227437034249306,0.311435610055923,-0.928014516830444,0.204443141818047,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.311435610055923,-0.928014516830444,0.204443141818047,0.517510056495667,-0.833824872970581,0.192144423723221,0.494486898183823,-0.83785080909729,0.231276199221611,0.206430405378342,-0.778748571872711,0.592399477958679,0.314119011163712,-0.739236891269684,0.595699608325958,0.517510056495667,-0.833824872970581,0.192144423723221,0.311435610055923,-0.928014516830444,0.204443141818047,0.360629975795746,-0.702259659767151,0.613821983337402,0.494486898183823,-0.83785080909729,0.231276199221611,0.517510056495667,-0.833824872970581,0.192144423723221,0.626789748668671,-0.749257385730743,0.213887751102448,0.194313436746597,-0.80370157957077,0.562410891056061,0.115422785282135,-0.952069759368896,0.283268004655838,0.0416775047779083,-0.927180886268616,0.372288316488266,0.209196627140045,-0.665287017822266,0.716679811477661,0.292688071727753,-0.580336809158325,0.759962379932404,0.340945303440094,-0.698488175868988,0.629182457923889,0.194313436746597,-0.80370157957077,0.562410891056061,0.209196627140045,-0.665287017822266,0.716679811477661,0.340945303440094,-0.698488175868988,0.629182457923889,0.353568494319916,-0.776771426200867,0.521167457103729,0.225757539272308,-0.896350860595703,0.381560862064362,0.194313436746597,-0.80370157957077,0.562410891056061,0.402090311050415,-0.284287929534912,0.870346903800964,0.353568494319916,-0.776771426200867,0.521167457103729,0.340945303440094,-0.698488175868988,0.629182457923889,0.431166082620621,-0.246951669454575,0.867819547653198,0.414541780948639,0.400993496179581,0.816920638084412,0.491490423679352,0.244152218103409,0.835958659648895,0.498867928981781,0.236602708697319,0.833756506443024,0.37644562125206,0.38054347038269,0.844674706459045, 0.471029788255692,0.166954964399338,0.86617374420166,0.498867928981781,0.236602708697319,0.833756506443024,0.491490423679352,0.244152218103409,0.835958659648895,0.168070778250694,-0.457133919000626,0.873373210430145,-0.00835443940013647,-0.52916145324707,0.848480045795441,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.184710487723351,-0.617817997932434,0.764318585395813,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.189460039138794,-0.647004544734955,0.738572955131531,0.286647915840149,-0.584438979625702,0.759120643138886,0.184710487723351,-0.617817997932434,0.764318585395813,0.615384101867676,0.0611244365572929,0.785853803157806,0.668389976024628,-0.0383556596934795,0.742821395397186,0.593307375907898,-0.0775594636797905,0.801230847835541,0.578135192394257,0.0218988731503487,0.815647065639496,0.61716902256012,-0.00506624486297369,0.786814272403717,0.652630388736725,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.724583506584167,-0.0711281225085258,0.685506820678711,0.740868389606476,0.000323399232001975,0.671650171279907,0.636694431304932,0.0437434837222099,0.769874513149261,0.724583506584167,-0.0711281225085258,0.685506820678711,0.802095234394073,-0.0203569829463959,0.596849083900452,0.825742661952972,-0.0501102656126022,0.561816692352295,0.740868389606476,0.000323399232001975,0.671650171279907,0.189460039138794,-0.647004544734955,0.738572955131531,0.598259091377258,-0.415802270174026,0.684977769851685,0.659502923488617,-0.421348959207535,0.622511804103851,0.381202667951584,-0.36025732755661,0.851410090923309,0.462689489126205,-0.42478209733963,0.778125107288361,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.0599219687283039,-0.361293613910675,0.93052476644516,0.41924661397934,0.116037733852863,0.90042632818222,0.452132165431976,-0.0737369656562805,0.888897836208344,0.399795055389404,-0.131603688001633,0.907107710838318,0.192558065056801,-0.101361930370331,0.976036429405212,0.452132165431976,-0.0737369656562805,0.888897836208344, 0.605580151081085,-0.127637818455696,0.785481572151184,0.628606140613556,-0.0929744690656662,0.77214640378952,0.399795055389404,-0.131603688001633,0.907107710838318,0.321778655052185,0.226275533437729,0.919379055500031,0.41924661397934,0.116037733852863,0.90042632818222,0.192558065056801,-0.101361930370331,0.976036429405212,0.321778655052185,0.226275533437729,0.919379055500031,0.192558065056801,-0.101361930370331,0.976036429405212,0.315801054239273,0.0731089860200882,0.946004629135132,0.720236837863922,0.181686788797379,0.669513881206512,0.656306624412537,0.257158219814301,0.709317445755005,0.875872433185577,0.296488851308823,0.38071221113205,0.315801054239273,0.0731089860200882,0.946004629135132,0.785606920719147,0.572498440742493,0.234664186835289,0.875872433185577,0.296488851308823,0.38071221113205,0.656306624412537,0.257158219814301,0.709317445755005,0.41924661397934,0.116037733852863,0.90042632818222,0.321778655052185,0.226275533437729,0.919379055500031,0.479255974292755,0.34857839345932,0.805485486984253,0.528464257717133,0.246433109045029,0.812401533126831,0.315801054239273,0.0731089860200882,0.946004629135132,0.656306624412537,0.257158219814301,0.709317445755005,0.479255974292755,0.34857839345932,0.805485486984253,0.321778655052185,0.226275533437729,0.919379055500031,0.720236837863922,0.181686788797379,0.669513881206512,0.528464257717133,0.246433109045029,0.812401533126831,0.479255974292755,0.34857839345932,0.805485486984253,0.656306624412537,0.257158219814301,0.709317445755005,0.525402009487152,0.0301267635077238,0.85032057762146,0.529063761234283,-0.0630637779831886,0.846235513687134,0.452132165431976,-0.0737369656562805,0.888897836208344,0.41924661397934,0.116037733852863,0.90042632818222,0.529063761234283,-0.0630637779831886,0.846235513687134,0.627576470375061,-0.135800153017044,0.766619920730591,0.605580151081085,-0.127637818455696,0.785481572151184,0.452132165431976,-0.0737369656562805,0.888897836208344,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.994033694267273,0.107649877667427,-0.0175654906779528, -0.655008316040039,-0.755039751529694,0.029649443924427,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.474541693925858,-0.67278927564621,0.567595541477203,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.994033694267273,0.107649877667427,-0.0175654906779528,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.655008316040039,-0.755039751529694,0.029649443924427,-0.741096556186676,-0.649701416492462,-0.169304147362709,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.637578308582306,0.271278858184814,-0.721042096614838,-0.692808628082275,0.293822556734085,-0.658547282218933,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044, -0.934147357940674,0.162888333201408,-0.317546963691711,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.843048751354218,-0.0439708046615124,-0.536036670207977,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.757471144199371,0.2759148478508,-0.591699600219727,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.843048751354218,-0.0439708046615124,-0.536036670207977,0.443391680717468,-0.0999263972043991,0.89074045419693,0.164051368832588,-0.273042142391205,0.947910964488983,0.121470481157303,-0.391699403524399,0.912039756774902,0.252335846424103,0.330343335866928,0.909505307674408,-0.0406640991568565,-0.687796175479889,0.724763989448547,-0.0613121353089809,-0.89322817325592,0.445403426885605,-0.00129488680977374,-0.888734400272369,0.458420634269714,0.0125365713611245,-0.668434202671051,0.743665635585785,-0.0773185193538666,-0.996781229972839,-0.0211918447166681,0.00571701768785715,-0.999931693077087,-0.0101942336186767,-0.00129488680977374,-0.888734400272369,0.458420634269714,-0.0613121353089809,-0.89322817325592,0.445403426885605,0.191416949033737,-0.0921172648668289,0.977176547050476,0.0600041374564171,-0.192453533411026,0.979469835758209,0.171075537800789,-0.616661608219147,0.768415033817291,0.164827063679695,-0.547387719154358,0.820486903190613,0.0592407323420048,-0.802932441234589,0.593118906021118,-0.05385497584939,-0.996109485626221,0.06975357234478,-0.217067420482636,-0.972187459468842,0.0879386737942696,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0592407323420048,-0.802932441234589,0.593118906021118,0.0574505962431431,-0.838245630264282,0.542257905006409,0.217255920171738,-0.631381034851074,0.744417786598206,0.114735066890717,-0.656680226325989,0.745390474796295,0.0574505962431431,-0.838245630264282,0.542257905006409,-0.217067420482636,-0.972187459468842,0.0879386737942696,-0.304188013076782,-0.938978254795074,0.160591080784798,0.0620634108781815,-0.851760566234589,0.520242273807526,0.0574505962431431,-0.838245630264282,0.542257905006409,0.0620634108781815,-0.851760566234589,0.520242273807526, 0.34566730260849,-0.589025497436523,0.73045402765274,0.217255920171738,-0.631381034851074,0.744417786598206,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.127903699874878,-0.852072358131409,0.507556319236755,0.0620634108781815,-0.851760566234589,0.520242273807526,-0.127903699874878,-0.852072358131409,0.507556319236755,0.266091585159302,-0.603160440921783,0.751926004886627,0.34566730260849,-0.589025497436523,0.73045402765274,0.827663242816925,0.523418128490448,0.202501967549324,0.778178691864014,0.616257607936859,0.121097095310688,0.713096976280212,0.68854147195816,-0.131921663880348,0.662245333194733,0.742432057857513,-0.101122446358204,0.650610029697418,0.750839710235596,0.113781958818436,0.804373443126678,0.392295897006989,0.446191996335983,0.827663242816925,0.523418128490448,0.202501967549324,0.662245333194733,0.742432057857513,-0.101122446358204,0.33390274643898,0.823867678642273,-0.457985788583755,0.35404372215271,0.848205924034119,-0.393953949213028,0.662245333194733,0.742432057857513,-0.101122446358204,0.713096976280212,0.68854147195816,-0.131921663880348,0.401338756084442,0.891479909420013,-0.210216000676155,0.650610029697418,0.750839710235596,0.113781958818436,0.662245333194733,0.742432057857513,-0.101122446358204,0.35404372215271,0.848205924034119,-0.393953949213028,0.33390274643898,0.823867678642273,-0.457985788583755,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.325168341398239,0.677460372447968,-0.659782588481903,0.35404372215271,0.848205924034119,-0.393953949213028,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.299774140119553,0.750125706195831,-0.589446246623993,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.903453350067139,0.0792897418141365,-0.421289950609207, 0.401338756084442,0.891479909420013,-0.210216000676155,0.35404372215271,0.848205924034119,-0.393953949213028,-0.325168341398239,0.677460372447968,-0.659782588481903,-0.19065423309803,0.753101229667664,-0.629674077033997,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.749875366687775,0.181030079722404,-0.636329352855682,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.719125330448151,0.296634525060654,-0.628384232521057,0.370056182146072,0.811048626899719,-0.453054636716843,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.144558519124985,0.63954085111618,-0.755043268203735,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.719125330448151,0.296634525060654,-0.628384232521057,-0.384992688894272,0.544456601142883,-0.745216548442841,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.903518497943878,-0.0541667006909847,-0.425112038850784,-0.850321054458618,-0.308020442724228,-0.426705420017242,-0.929068803787231,-0.0690155401825905,-0.363411635160446,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903518497943878,-0.0541667006909847,-0.425112038850784, 0.370056182146072,0.811048626899719,-0.453054636716843,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.817673206329346,0.400343358516693,-0.413685619831085,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.683461725711823,0.378082811832428,-0.624446511268616,-0.914967000484467,-0.0528537072241306,-0.400052279233933,-0.889417350292206,0.00984347611665726,-0.456990003585815,-0.903453350067139,0.0792897418141365,-0.421289950609207,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.563491344451904,0.231473565101624,-0.793030619621277,-0.835774898529053,0.0728342235088348,-0.54422003030777,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.493718534708023,-0.839366674423218,0.227388679981232,-0.474541693925858,-0.67278927564621,0.567595541477203,0.0940685495734215,-0.732769310474396,0.673943758010864,0.656731724739075,-0.381447851657867,0.650538980960846,0.681784629821777,-0.285219341516495,0.673661351203918,0.629800915718079,-0.358788877725601,0.68892765045166,0.656731724739075,-0.381447851657867,0.650538980960846,0.629800915718079,-0.358788877725601,0.68892765045166,0.680992484092712,-0.305005490779877,0.665748357772827,0.678119361400604,-0.318360239267349,0.662420451641083,0.857260406017303,0.312566876411438,0.409153461456299,0.855352699756622,0.226547658443451,0.46588408946991,0.741662085056305,0.344577699899673,0.575502872467041,0.813006162643433,0.437411576509476,0.384307235479355,0.426225006580353,-0.76509952545166,0.482654064893723,0.361090242862701,-0.862221240997314,0.355229914188385,0.369030982255936,-0.873893618583679,0.316427052021027, 0.408859342336655,-0.819536507129669,0.401489645242691,0.361090242862701,-0.862221240997314,0.355229914188385,0.193085044622421,-0.95480340719223,0.225983783602715,0.225613579154015,-0.956868171691895,0.183034926652908,0.369030982255936,-0.873893618583679,0.316427052021027,0.545321881771088,-0.833433032035828,0.0895174741744995,0.471000701189041,-0.846986770629883,0.246519237756729,0.42274335026741,-0.887621939182281,0.182798534631729,0.465096980333328,-0.885112583637238,0.016138968989253,0.42274335026741,-0.887621939182281,0.182798534631729,0.263781130313873,-0.963467478752136,0.0463673323392868,0.283746033906937,-0.948122382164001,-0.143360316753387,0.465096980333328,-0.885112583637238,0.016138968989253,0.283746033906937,-0.948122382164001,-0.143360316753387,0.263781130313873,-0.963467478752136,0.0463673323392868,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.164555922150612,-0.956649422645569,-0.240298211574554,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.164555922150612,-0.956649422645569,-0.240298211574554,0.361090242862701,-0.862221240997314,0.355229914188385,0.426225006580353,-0.76509952545166,0.482654064893723,0.295715004205704,-0.771513819694519,0.56331080198288,0.233462005853653,-0.895743429660797,0.378337532281876,0.193085044622421,-0.95480340719223,0.225983783602715,0.361090242862701,-0.862221240997314,0.355229914188385,0.233462005853653,-0.895743429660797,0.378337532281876,0.295715004205704,-0.771513819694519,0.56331080198288,0.0651562884449959,-0.780692636966705,0.62150913476944,0.050213560461998,-0.91094309091568,0.409464567899704,0.233462005853653,-0.895743429660797,0.378337532281876,-0.0491818785667419,-0.776791214942932,0.627834796905518,-0.0628481134772301,-0.906862795352936,0.416713327169418,0.050213560461998,-0.91094309091568,0.409464567899704,0.0651562884449959,-0.780692636966705,0.62150913476944,-0.0727874711155891,-0.98180228471756,0.1754030585289,0.0766859278082848,-0.975562393665314,0.205905899405479, 0.050213560461998,-0.91094309091568,0.409464567899704,-0.0628481134772301,-0.906862795352936,0.416713327169418,0.193085044622421,-0.95480340719223,0.225983783602715,0.233462005853653,-0.895743429660797,0.378337532281876,0.050213560461998,-0.91094309091568,0.409464567899704,0.0766859278082848,-0.975562393665314,0.205905899405479,-0.0777209997177124,-0.922415435314178,-0.378297746181488,0.0633370503783226,-0.944429814815521,-0.322553485631943,0.0663259923458099,-0.98754096031189,-0.14270156621933,-0.0788524150848389,-0.974068284034729,-0.212069168686867,0.684517562389374,-0.439017295837402,0.581978976726532,0.688922643661499,-0.305572867393494,0.657275319099426,0.844530344009399,-0.306019067764282,0.4394551217556,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.688922643661499,-0.305572867393494,0.657275319099426,0.750554323196411,-0.229917243123055,0.619521021842957,0.926659166812897,-0.245477139949799,0.284681916236877,0.897057175636292,-0.352101475000381,0.267044723033905,0.844530344009399,-0.306019067764282,0.4394551217556,0.926659166812897,-0.245477139949799,0.284681916236877,0.927076876163483,-0.29800683259964,0.227421119809151,0.640791594982147,-0.766526699066162,0.0426960773766041,0.705848097801209,-0.694441199302673,0.13974928855896,0.727549016475677,-0.679640352725983,0.0936024785041809,0.638466238975525,-0.769491136074066,0.0156274978071451,0.693672001361847,-0.686315536499023,0.218609541654587,0.772367715835571,-0.599683940410614,0.209349811077118,0.727549016475677,-0.679640352725983,0.0936024785041809,0.705848097801209,-0.694441199302673,0.13974928855896,0.756793797016144,-0.0805434510111809,0.64867240190506,0.821784615516663,-0.261638671159744,0.506177127361298,0.792236804962158,-0.0960670188069344,0.602604329586029,0.70995169878006,-0.557043075561523,0.430896311998367,0.821784615516663,-0.261638671159744,0.506177127361298,0.756793797016144,-0.0805434510111809,0.64867240190506,0.601338624954224,-0.55975753068924,0.570143282413483,0.471000701189041,-0.846986770629883,0.246519237756729, 0.539758801460266,-0.780041754245758,0.316536396741867,0.425350964069366,-0.787436366081238,0.446117222309113,0.408859342336655,-0.819536507129669,0.401489645242691,0.70995169878006,-0.557043075561523,0.430896311998367,0.601338624954224,-0.55975753068924,0.570143282413483,0.425350964069366,-0.787436366081238,0.446117222309113,0.539758801460266,-0.780041754245758,0.316536396741867,0.263781130313873,-0.963467478752136,0.0463673323392868,0.42274335026741,-0.887621939182281,0.182798534631729,0.369030982255936,-0.873893618583679,0.316427052021027,0.225613579154015,-0.956868171691895,0.183034926652908,0.471000701189041,-0.846986770629883,0.246519237756729,0.408859342336655,-0.819536507129669,0.401489645242691,0.369030982255936,-0.873893618583679,0.316427052021027,0.42274335026741,-0.887621939182281,0.182798534631729,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.158431231975555,-0.986164569854736,-0.0487753190100193,0.128954827785492,-0.985570788383484,0.109639815986156,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.263781130313873,-0.963467478752136,0.0463673323392868,0.225613579154015,-0.956868171691895,0.183034926652908,0.128954827785492,-0.985570788383484,0.109639815986156,0.158431231975555,-0.986164569854736,-0.0487753190100193,-0.0788524150848389,-0.974068284034729,-0.212069168686867,0.0663259923458099,-0.98754096031189,-0.14270156621933,0.0500960312783718,-0.998004376888275,0.0384394414722919,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,-0.0727874711155891,-0.98180228471756,0.1754030585289,-0.0773368552327156,-0.996767818927765,-0.0217481888830662,0.0500960312783718,-0.998004376888275,0.0384394414722919,0.8774573802948,-0.435060352087021,0.201967760920525,0.807879209518433,-0.580146849155426,0.103734038770199,0.772367715835571,-0.599683940410614,0.209349811077118,0.785579741001129,-0.492246091365814,0.374910920858383,0.789786696434021,-0.370871901512146,0.488560140132904,0.892324268817902,-0.364589005708694,0.266143202781677,0.8774573802948,-0.435060352087021,0.201967760920525, 0.785579741001129,-0.492246091365814,0.374910920858383,0.693672001361847,-0.686315536499023,0.218609541654587,0.689838171005249,-0.617681860923767,0.377614080905914,0.785579741001129,-0.492246091365814,0.374910920858383,0.772367715835571,-0.599683940410614,0.209349811077118,0.684517562389374,-0.439017295837402,0.581978976726532,0.789786696434021,-0.370871901512146,0.488560140132904,0.785579741001129,-0.492246091365814,0.374910920858383,0.689838171005249,-0.617681860923767,0.377614080905914,0.813478171825409,-0.273027837276459,0.513526141643524,0.887543320655823,-0.171314582228661,0.427689343690872,0.651034355163574,-0.303375482559204,0.695785582065582,0.691827952861786,-0.359834015369415,0.626013994216919,0.683746695518494,-0.463673830032349,0.563468754291534,0.813478171825409,-0.273027837276459,0.513526141643524,0.691827952861786,-0.359834015369415,0.626013994216919,0.780404269695282,-0.392066359519959,0.487086415290833,0.683746695518494,-0.463673830032349,0.563468754291534,0.780404269695282,-0.392066359519959,0.487086415290833,0.810256838798523,-0.430587977170944,0.397590130567551,0.629647791385651,-0.52997088432312,0.568044483661652,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.469266027212143,-0.852578699588776,0.229997724294662,-0.339177936315537,-0.843130052089691,0.417241036891937,-0.127903699874878,-0.852072358131409,0.507556319236755,-0.339177936315537,-0.843130052089691,0.417241036891937,0.0940685495734215,-0.732769310474396,0.673943758010864,0.266091585159302,-0.603160440921783,0.751926004886627,0.553863286972046,-0.30215710401535,0.77584570646286,0.266091585159302,-0.603160440921783,0.751926004886627,0.0940685495734215,-0.732769310474396,0.673943758010864,0.525104641914368,-0.419060587882996,0.740711390972137,0.553863286972046,-0.30215710401535,0.77584570646286,0.525104641914368,-0.419060587882996,0.740711390972137,0.588271081447601,-0.259690821170807,0.765831470489502,0.607095539569855,-0.200262412428856,0.768979847431183,0.546967387199402,0.0579036511480808,0.835148990154266, 0.568371534347534,0.0187626089900732,0.822558045387268,0.601098597049713,0.0911194980144501,0.793963313102722,0.565106153488159,0.017743531614542,0.824827373027802,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.301303088665009,-0.716448962688446,0.629219651222229,0.411182582378387,-0.842439949512482,0.348172098398209,0.117540158331394,-0.936730265617371,0.329728245735168,-0.00210810895077884,-0.784596800804138,0.620002746582031,0.117540158331394,-0.936730265617371,0.329728245735168,-0.0675294324755669,-0.945460379123688,0.318660378456116,-0.0433456413447857,-0.716439366340637,0.696301460266113,0.44965198636055,0.140096634626389,0.882148504257202,0.56849592924118,-0.125116035342216,0.813116490840912,0.416703939437866,-0.0255245417356491,0.908683836460114,0.218448147177696,-0.859921038150787,0.461320102214813,0.190928906202316,-0.824125647544861,0.533257067203522,0.301912575960159,-0.736388921737671,0.605458617210388,0.423061966896057,-0.638191282749176,0.643218815326691,0.350974529981613,-0.540442049503326,0.764682471752167,0.461174815893173,-0.519026458263397,0.719673037528992,0.301912575960159,-0.736388921737671,0.605458617210388,0.190928906202316,-0.824125647544861,0.533257067203522,0.56849592924118,-0.125116035342216,0.813116490840912,0.423061966896057,-0.638191282749176,0.643218815326691,0.301912575960159,-0.736388921737671,0.605458617210388,0.461174815893173,-0.519026458263397,0.719673037528992,0.633136808872223,-0.0669011846184731,0.771143317222595,0.655753970146179,-0.0819050073623657,0.750518679618835,0.501314342021942,-0.180266559123993,0.846278846263886,0.421490222215652,-0.217597857117653,0.880339205265045,0.345462441444397,-0.298967152833939,0.889536023139954,0.578185617923737,-0.0845057815313339,0.811517179012299,0.633136808872223,-0.0669011846184731,0.771143317222595,0.421490222215652,-0.217597857117653,0.880339205265045,0.523068964481354,-0.400331109762192,0.752418637275696,0.511712968349457,-0.26713839173317,0.816570222377777,0.443391680717468,-0.0999263972043991,0.89074045419693,0.515636503696442,-0.41490975022316,0.749645829200745, 0.7577885389328,0.376234740018845,0.533107817173004,0.740872263908386,0.260281056165695,0.619162321090698,0.750837445259094,-0.0367836877703667,0.659461975097656,0.758135914802551,0.0851427242159843,0.646514236927032,0.740872263908386,0.260281056165695,0.619162321090698,0.558381021022797,0.167118594050407,0.812577426433563,0.488678455352783,-0.257274806499481,0.833668410778046,0.750837445259094,-0.0367836877703667,0.659461975097656,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.377608895301819,-0.90075010061264,0.214617609977722,-0.304188013076782,-0.938978254795074,0.160591080784798,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.758401393890381,-0.574856221675873,-0.307193249464035,-0.696032464504242,-0.619228482246399,-0.363448590040207,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.728337526321411,0.0211671013385057,-0.684891521930695,-0.696429193019867,-0.116415850818157,-0.708119869232178,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.582670152187347,0.185491189360619,-0.791257560253143,-0.572831332683563,0.0232040770351887,-0.819344758987427,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.834057211875916,-0.216860771179199,-0.50726717710495,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.735399723052979,0.0687208324670792,-0.674139976501465,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.72423392534256,0.108453460037708,-0.680972158908844,-0.878701210021973,-0.298690170049667,-0.372382044792175,-0.749779462814331,-0.631075918674469,-0.198931902647018,-0.74769788980484,-0.235805436968803,-0.620760560035706,-0.731875240802765,-0.356860965490341,-0.580524682998657,-0.929068803787231,-0.0690155401825905,-0.363411635160446, -0.970641255378723,0.0346399769186974,-0.238024458289146,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.83115953207016,0.347447574138641,0.434112966060638,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.970641255378723,0.0346399769186974,-0.238024458289146,-0.634040713310242,0.756764888763428,0.159057512879372,-0.945308268070221,0.226358875632286,-0.234848886728287,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.83115953207016,0.347447574138641,0.434112966060638,-0.877584159374237,0.190617814660072,-0.439898729324341,-0.946641564369202,0.0270117726176977,-0.321154475212097,-0.966554343700409,0.104357771575451,-0.234269455075264,-0.945308268070221,0.226358875632286,-0.234848886728287,0.0454688854515553,-0.765503704547882,0.641822934150696,0.0821766927838326,-0.66467010974884,0.742603957653046,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.915560901165009,-0.141839787364006,0.376337260007858,0.956220626831055,-0.152332276105881,0.249873846769333,0.970759510993958,-0.233238592743874,0.056795421987772,0.920036554336548,-0.30953249335289,0.240254893898964,0.915560901165009,-0.141839787364006,0.376337260007858,0.920036554336548,-0.30953249335289,0.240254893898964,0.840808868408203,-0.369773417711258,0.395358175039291,0.820341229438782,-0.113342881202698,0.560529828071594,0.639384806156158,-0.761013865470886,0.109749406576157,0.65738570690155,-0.752218425273895,0.0448495484888554,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.575045108795166,-0.818020403385162,0.0128742791712284,0.65738570690155,-0.752218425273895,0.0448495484888554,0.586100876331329,-0.804308116436005,-0.0978478193283081,0.501666784286499,-0.849441289901733,-0.163646027445793,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.499172002077103,-0.857490539550781,-0.124648600816727,0.537862658500671,-0.839294493198395,-0.0793002098798752, 0.575045108795166,-0.818020403385162,0.0128742791712284,-0.032355971634388,-0.99692964553833,0.0713044255971909,0.155652940273285,-0.987067878246307,0.0383299365639687,0.168408244848251,-0.974918007850647,0.145511314272881,-0.036917757242918,-0.99125212430954,0.126713573932648,0.168408244848251,-0.974918007850647,0.145511314272881,0.155652940273285,-0.987067878246307,0.0383299365639687,0.279211044311523,-0.955691933631897,0.093242421746254,0.304768770933151,-0.92969423532486,0.206844300031662,0.741662085056305,0.344577699899673,0.575502872467041,0.814013004302979,0.416528642177582,0.404829293489456,0.854046881198883,0.485713124275208,0.186243653297424,0.813006162643433,0.437411576509476,0.384307235479355,0.793840944766998,0.179479137063026,0.581036806106567,0.776109874248505,0.274881482124329,0.567532956600189,0.864675521850586,0.193993464112282,0.46336030960083,0.776109874248505,0.274881482124329,0.567532956600189,0.815548717975616,0.273398518562317,0.510032892227173,0.864675521850586,0.193993464112282,0.46336030960083,0.894858956336975,-0.0870964974164963,0.437768936157227,0.834977984428406,0.275511413812637,0.47634568810463,0.813101530075073,0.281051158905029,0.509780466556549,0.693030059337616,-0.0411044172942638,0.71973592042923,0.717148721218109,-0.158668875694275,0.678617656230927,0.738801121711731,-0.260166734457016,0.6216801404953,0.881620466709137,-0.332029432058334,0.335412949323654,0.894858956336975,-0.0870964974164963,0.437768936157227,0.717148721218109,-0.158668875694275,0.678617656230927,0.885035216808319,0.393218964338303,0.249181613326073,0.813006162643433,0.437411576509476,0.384307235479355,0.854046881198883,0.485713124275208,0.186243653297424,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.109049446880817,0.0514820925891399,0.992702305316925,0.54212898015976,0.215727955102921,0.812131583690643,0.470013290643692,0.212332352995873,0.856739461421967,0.0144113004207611,0.0269631575793028,0.999532520771027,0.779178857803345,0.328662276268005,0.533724129199982,0.749379277229309,0.298672914505005,0.590952754020691, 0.776918292045593,0.306892603635788,0.549740731716156,0.791379868984222,0.358002513647079,0.495532125234604,0.749379277229309,0.298672914505005,0.590952754020691,0.776109874248505,0.274881482124329,0.567532956600189,0.793840944766998,0.179479137063026,0.581036806106567,0.776918292045593,0.306892603635788,0.549740731716156,0.328961253166199,0.182314842939377,0.92657744884491,0.335490047931671,-0.171642184257507,0.926275014877319,0.351316899061203,-0.0729207322001457,0.933412551879883,0.314301073551178,0.320888847112656,0.893445670604706,0.533053755760193,0.0411353260278702,0.845080852508545,0.770362615585327,0.0158082563430071,0.63740998506546,0.786049902439117,0.275353401899338,0.553449213504791,0.542900562286377,0.367345452308655,0.755192875862122,0.786049902439117,0.275353401899338,0.553449213504791,0.770362615585327,0.0158082563430071,0.63740998506546,0.842584788799286,-0.21356026828289,0.494411617517471,0.912213087081909,0.0526493825018406,0.406319200992584,0.926979184150696,-0.0986248403787613,0.36191537976265,0.912213087081909,0.0526493825018406,0.406319200992584,0.842584788799286,-0.21356026828289,0.494411617517471,0.831848502159119,-0.322033703327179,0.452020287513733,0.926979184150696,-0.0986248403787613,0.36191537976265,0.831848502159119,-0.322033703327179,0.452020287513733,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.754335284233093,-0.305042564868927,0.581315159797668,0.838417947292328,-0.244426995515823,0.487145572900772,0.831848502159119,-0.322033703327179,0.452020287513733,0.73811411857605,-0.426667273044586,0.522630453109741,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.197210118174553,0.0128493588417768,0.980277061462402,0.193743079900742,0.0896209701895714,0.976950228214264,0.17069847881794,-0.387216597795486,0.906049311161041,0.197210118174553,0.0128493588417768,0.980277061462402,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135, 0.193743079900742,0.0896209701895714,0.976950228214264,0.190371856093407,0.256429195404053,0.947629988193512,0.190371856093407,0.256429195404053,0.947629988193512,0.458961844444275,-0.463801801204681,0.757787525653839,-0.0354966223239899,-0.161021754145622,0.986312329769135,0.573087453842163,0.0656763836741447,0.816858232021332,0.636694431304932,0.0437434837222099,0.769874513149261,0.627576470375061,-0.135800153017044,0.766619920730591,0.529063761234283,-0.0630637779831886,0.846235513687134,0.573087453842163,0.0656763836741447,0.816858232021332,0.529063761234283,-0.0630637779831886,0.846235513687134,0.525402009487152,0.0301267635077238,0.85032057762146,0.621637463569641,0.0923129394650459,0.77784651517868,0.620820641517639,-0.00240864953957498,0.783948957920074,0.652630388736725,-0.0358134843409061,0.756829559803009,0.730820298194885,-0.016795739531517,0.682363271713257,0.724583506584167,-0.0711281225085258,0.685506820678711,0.61716902256012,-0.00506624486297369,0.786814272403717,0.750991225242615,0.0683757290244102,0.656762480735779,0.730820298194885,-0.016795739531517,0.682363271713257,0.652630388736725,-0.0358134843409061,0.756829559803009,0.802095234394073,-0.0203569829463959,0.596849083900452,0.724583506584167,-0.0711281225085258,0.685506820678711,0.730820298194885,-0.016795739531517,0.682363271713257,0.750991225242615,0.0683757290244102,0.656762480735779,0.56373119354248,0.0243276692926884,0.825599908828735,0.613882482051849,0.099590003490448,0.783090114593506,0.615384101867676,0.0611244365572929,0.785853803157806,0.620820641517639,-0.00240864953957498,0.783948957920074,0.615384101867676,0.0611244365572929,0.785853803157806,0.652630388736725,-0.0358134843409061,0.756829559803009,0.620820641517639,-0.00240864953957498,0.783948957920074,0.621637463569641,0.0923129394650459,0.77784651517868,0.613882482051849,0.099590003490448,0.783090114593506,0.56373119354248,0.0243276692926884,0.825599908828735,0.573087453842163,0.0656763836741447,0.816858232021332,0.56373119354248,0.0243276692926884,0.825599908828735,0.620820641517639,-0.00240864953957498,0.783948957920074, 0.636694431304932,0.0437434837222099,0.769874513149261,0.573087453842163,0.0656763836741447,0.816858232021332,0.598116338253021,0.120038144290447,0.792368412017822,0.621637463569641,0.0923129394650459,0.77784651517868,0.41924661397934,0.116037733852863,0.90042632818222,0.528464257717133,0.246433109045029,0.812401533126831,0.621637463569641,0.0923129394650459,0.77784651517868,0.598116338253021,0.120038144290447,0.792368412017822,0.712920248508453,0.00929267052561045,0.701183557510376,0.720236837863922,0.181686788797379,0.669513881206512,0.751433670520782,0.0212495382875204,0.659466326236725,0.598116338253021,0.120038144290447,0.792368412017822,0.528464257717133,0.246433109045029,0.812401533126831,0.598116338253021,0.120038144290447,0.792368412017822,0.751433670520782,0.0212495382875204,0.659466326236725,0.712920248508453,0.00929267052561045,0.701183557510376,0.621637463569641,0.0923129394650459,0.77784651517868,0.525402009487152,0.0301267635077238,0.85032057762146,0.41924661397934,0.116037733852863,0.90042632818222,0.724869191646576,-0.144625514745712,0.673534035682678,0.712920248508453,0.00929267052561045,0.701183557510376,0.751433670520782,0.0212495382875204,0.659466326236725,0.858066916465759,-0.0402064435184002,0.511961579322815,0.751433670520782,0.0212495382875204,0.659466326236725,0.720236837863922,0.181686788797379,0.669513881206512,0.875872433185577,0.296488851308823,0.38071221113205,0.858066916465759,-0.0402064435184002,0.511961579322815,0.578135192394257,0.0218988731503487,0.815647065639496,0.593307375907898,-0.0775594636797905,0.801230847835541,0.577744483947754,0.0458397567272186,0.814929485321045,0.59909462928772,0.124072253704071,0.791006743907928,0.578135192394257,0.0218988731503487,0.815647065639496,0.577744483947754,0.0458397567272186,0.814929485321045,0.550924062728882,0.0100475419312716,0.834494948387146,0.59909462928772,0.124072253704071,0.791006743907928,0.550924062728882,0.0100475419312716,0.834494948387146,0.584165692329407,-0.333255082368851,0.740061819553375,0.747522175312042,-0.213430538773537,0.629013538360596, 0.916658163070679,-0.0698241367936134,0.393525570631027,0.855076372623444,-0.165702432394028,0.491311639547348,0.85496574640274,-0.0235987044870853,0.518147349357605,0.903705775737762,0.0166217982769012,0.427831262350082,0.937154471874237,-0.0475939512252808,0.345653474330902,0.916658163070679,-0.0698241367936134,0.393525570631027,0.903705775737762,0.0166217982769012,0.427831262350082,0.916476547718048,0.0582267269492149,0.395828783512115,0.358242690563202,-0.369526594877243,0.857386887073517,0.386847853660584,-0.767014622688293,0.511895835399628,0.738801121711731,-0.260166734457016,0.6216801404953,0.16572479903698,-0.647090375423431,0.744183719158173,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.0821766927838326,-0.66467010974884,0.742603957653046,0.2151879966259,-0.952648401260376,-0.214837476611137,0.589298963546753,-0.771825730800629,0.238771393895149,0.704199492931366,-0.704627811908722,0.0871931314468384,0.43766725063324,-0.727506041526794,-0.528377115726471,0.0578227378427982,-0.628531396389008,-0.775631904602051,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.2151879966259,-0.952648401260376,-0.214837476611137,0.43766725063324,-0.727506041526794,-0.528377115726471,0.778993248939514,-0.607196033000946,0.156468689441681,0.914134383201599,-0.267116606235504,-0.304970562458038,0.43766725063324,-0.727506041526794,-0.528377115726471,0.704199492931366,-0.704627811908722,0.0871931314468384,0.801777124404907,0.00266337930224836,-0.597617149353027,0.0578227378427982,-0.628531396389008,-0.775631904602051,0.43766725063324,-0.727506041526794,-0.528377115726471,0.43766725063324,-0.727506041526794,-0.528377115726471,0.914134383201599,-0.267116606235504,-0.304970562458038,0.801777124404907,0.00266337930224836,-0.597617149353027,0.844061017036438,0.391468346118927,0.366488069295883,0.801777124404907,0.00266337930224836,-0.597617149353027,0.993568658828735,0.0655909031629562,0.0922989472746849,0.941748380661011,0.168847903609276,0.290861427783966, 0.823821365833282,-0.474406152963638,0.310253411531448,0.940892815589905,-0.119216494262218,0.317030221223831,0.941748380661011,0.168847903609276,0.290861427783966,0.993568658828735,0.0655909031629562,0.0922989472746849,0.218448147177696,-0.859921038150787,0.461320102214813,0.462026834487915,-0.814152240753174,0.351692080497742,0.280335813760757,-0.904288768768311,0.321983903646469,0.160614088177681,-0.826539099216461,0.539477705955505,0.851511597633362,-0.5011847615242,0.154083982110024,0.625836908817291,-0.779953479766846,0.000855531019624323,0.280335813760757,-0.904288768768311,0.321983903646469,0.462026834487915,-0.814152240753174,0.351692080497742,0.632524311542511,-0.737463712692261,0.236770406365395,0.125414818525314,-0.832001984119415,0.540410816669464,0.280335813760757,-0.904288768768311,0.321983903646469,0.625836908817291,-0.779953479766846,0.000855531019624323,-0.119093708693981,-0.53387188911438,0.837136447429657,0.160614088177681,-0.826539099216461,0.539477705955505,0.280335813760757,-0.904288768768311,0.321983903646469,0.125414818525314,-0.832001984119415,0.540410816669464,-0.119093708693981,-0.53387188911438,0.837136447429657,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403,0.796926200389862,0.0803298726677895,0.272869914770126,0.958691358566284,-0.549701511859894,-0.519823312759399,0.653920412063599,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.485137194395065,-0.428027123212814,0.762518644332886,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.820776700973511,-0.333373188972473,0.463883489370346,-0.498864650726318,-0.669482290744781,0.550388514995575,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.0803298726677895,0.272869914770126,0.958691358566284,-0.600347876548767,0.0670153573155403,0.796926200389862,-0.0804867446422577,-0.0660979077219963,0.994561672210693,0.591780304908752,0.0913430228829384,0.8009073138237,-0.119093708693981,-0.53387188911438,0.837136447429657, 0.350974529981613,-0.540442049503326,0.764682471752167,0.190928906202316,-0.824125647544861,0.533257067203522,0.160614088177681,-0.826539099216461,0.539477705955505,0.218448147177696,-0.859921038150787,0.461320102214813,0.160614088177681,-0.826539099216461,0.539477705955505,0.190928906202316,-0.824125647544861,0.533257067203522,0.724950075149536,-0.680160522460938,0.108761206269264,0.535486578941345,-0.739663183689117,0.407618075609207,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.2151879966259,-0.952648401260376,-0.214837476611137,-0.0524128936231136,-0.826581239700317,-0.560371577739716,0.535486578941345,-0.739663183689117,0.407618075609207,0.506778419017792,-0.624182820320129,0.594618737697601,-0.449249923229218,-0.874760508537292,0.181572452187538,-0.139181971549988,-0.98750239610672,0.0739418119192123,0.506778419017792,-0.624182820320129,0.594618737697601,0.591780304908752,0.0913430228829384,0.8009073138237,-0.0804867446422577,-0.0660979077219963,0.994561672210693,-0.498864650726318,-0.669482290744781,0.550388514995575,0.506778419017792,-0.624182820320129,0.594618737697601,0.786046326160431,0.0746424272656441,0.613644540309906,0.591780304908752,0.0913430228829384,0.8009073138237,0.993568658828735,0.0655909031629562,0.0922989472746849,0.801777124404907,0.00266337930224836,-0.597617149353027,0.914134383201599,-0.267116606235504,-0.304970562458038,0.914134383201599,-0.267116606235504,-0.304970562458038,0.778993248939514,-0.607196033000946,0.156468689441681,0.823821365833282,-0.474406152963638,0.310253411531448,0.993568658828735,0.0655909031629562,0.0922989472746849,0.802095234394073,-0.0203569829463959,0.596849083900452,0.750991225242615,0.0683757290244102,0.656762480735779,0.734094381332397,0.226703405380249,0.640086710453033,0.771234273910522,0.123447246849537,0.62446653842926,0.61716902256012,-0.00506624486297369,0.786814272403717,0.59909462928772,0.124072253704071,0.791006743907928,0.734094381332397,0.226703405380249,0.640086710453033,0.750991225242615,0.0683757290244102,0.656762480735779,0.747522175312042,-0.213430538773537,0.629013538360596, 0.89356255531311,-0.0812801718711853,0.441519498825073,0.734094381332397,0.226703405380249,0.640086710453033,0.59909462928772,0.124072253704071,0.791006743907928,0.886316955089569,0.0816843584179878,0.455817818641663,0.771234273910522,0.123447246849537,0.62446653842926,0.734094381332397,0.226703405380249,0.640086710453033,0.89356255531311,-0.0812801718711853,0.441519498825073,0.740868389606476,0.000323399232001975,0.671650171279907,0.825742661952972,-0.0501102656126022,0.561816692352295,0.832460403442383,-0.0762069076299667,0.548818945884705,0.732703268527985,-0.161094918847084,0.661206722259521,0.740868389606476,0.000323399232001975,0.671650171279907,0.732703268527985,-0.161094918847084,0.661206722259521,0.627576470375061,-0.135800153017044,0.766619920730591,0.636694431304932,0.0437434837222099,0.769874513149261,0.841468989849091,0.227338507771492,0.490150064229965,0.886316955089569,0.0816843584179878,0.455817818641663,0.96756237745285,-0.0955442041158676,0.233868315815926,0.918524086475372,-0.00282709067687392,0.395354956388474,0.918524086475372,-0.00282709067687392,0.395354956388474,0.853365004062653,0.0768043100833893,0.515625178813934,0.841468989849091,0.227338507771492,0.490150064229965,0.868124186992645,-0.0820373073220253,0.48952043056488,0.826119303703308,-0.120154865086079,0.550535798072815,0.832460403442383,-0.0762069076299667,0.548818945884705,0.853365004062653,0.0768043100833893,0.515625178813934,0.918524086475372,-0.00282709067687392,0.395354956388474,0.868124186992645,-0.0820373073220253,0.48952043056488,0.853365004062653,0.0768043100833893,0.515625178813934,0.605580151081085,-0.127637818455696,0.785481572151184,0.627576470375061,-0.135800153017044,0.766619920730591,0.732703268527985,-0.161094918847084,0.661206722259521,0.72280216217041,-0.137790024280548,0.677178680896759,0.732703268527985,-0.161094918847084,0.661206722259521,0.832460403442383,-0.0762069076299667,0.548818945884705,0.826119303703308,-0.120154865086079,0.550535798072815,0.72280216217041,-0.137790024280548,0.677178680896759,0.960835516452789,0.146968066692352,0.234937101602554, 0.987058341503143,-0.0681737512350082,0.145148620009422,0.988696813583374,-0.11085943877697,0.10093978792429,0.974692046642303,0.140635088086128,0.17377345263958,0.988696813583374,-0.11085943877697,0.10093978792429,0.971762239933014,-0.143596902489662,0.187237858772278,0.970540165901184,0.124821022152901,0.206086173653603,0.974692046642303,0.140635088086128,0.17377345263958,0.987058341503143,-0.0681737512350082,0.145148620009422,0.952345132827759,-0.057124700397253,0.299625486135483,0.939327776432037,-0.292384117841721,0.17937345802784,0.94329446554184,-0.325108468532562,0.0670826062560081,0.918524086475372,-0.00282709067687392,0.395354956388474,0.926874995231628,-0.321304202079773,0.194078236818314,0.939327776432037,-0.292384117841721,0.17937345802784,0.952345132827759,-0.057124700397253,0.299625486135483,0.934174954891205,-0.332788705825806,0.128719761967659,0.94329446554184,-0.325108468532562,0.0670826062560081,0.939327776432037,-0.292384117841721,0.17937345802784,0.926874995231628,-0.321304202079773,0.194078236818314,0.826119303703308,-0.120154865086079,0.550535798072815,0.868124186992645,-0.0820373073220253,0.48952043056488,0.903705775737762,0.0166217982769012,0.427831262350082,0.85496574640274,-0.0235987044870853,0.518147349357605,0.868124186992645,-0.0820373073220253,0.48952043056488,0.918524086475372,-0.00282709067687392,0.395354956388474,0.916476547718048,0.0582267269492149,0.395828783512115,0.903705775737762,0.0166217982769012,0.427831262350082,0.717148721218109,-0.158668875694275,0.678617656230927,0.693030059337616,-0.0411044172942638,0.71973592042923,0.204357400536537,-0.124537408351898,0.97094202041626,0.359977900981903,-0.319483041763306,0.876553773880005,0.204357400536537,-0.124537408351898,0.97094202041626,0.693030059337616,-0.0411044172942638,0.71973592042923,0.197210118174553,0.0128493588417768,0.980277061462402,0.197210118174553,0.0128493588417768,0.980277061462402,0.693030059337616,-0.0411044172942638,0.71973592042923,0.813101530075073,0.281051158905029,0.509780466556549,0.533409833908081,0.213411912322044,0.818492114543915, 0.193743079900742,0.0896209701895714,0.976950228214264,0.877371370792389,-0.100216217339039,0.469229310750961,0.848142683506012,0.254542678594589,0.464609563350677,0.834977984428406,0.275511413812637,0.47634568810463,0.894858956336975,-0.0870964974164963,0.437768936157227,0.862693786621094,0.213308542966843,0.458539962768555,0.728024780750275,0.317726284265518,0.607478320598602,0.749379277229309,0.298672914505005,0.590952754020691,0.779178857803345,0.328662276268005,0.533724129199982,0.825178265571594,0.267818719148636,0.497346937656403,0.776109874248505,0.274881482124329,0.567532956600189,0.749379277229309,0.298672914505005,0.590952754020691,0.728024780750275,0.317726284265518,0.607478320598602,0.261966973543167,0.625043272972107,0.735319077968597,0.0635503008961678,0.655404150485992,0.752600014209747,0.0571579374372959,0.555576980113983,0.829498171806335,0.27374255657196,0.526692390441895,0.804773390293121,0.261966973543167,0.625043272972107,0.735319077968597,0.27374255657196,0.526692390441895,0.804773390293121,0.718716561794281,0.339281320571899,0.60690575838089,0.667004644870758,0.442110657691956,0.59970235824585,0.819765686988831,0.312743216753006,0.479766517877579,0.79509973526001,0.317423015832901,0.516777575016022,0.779178857803345,0.328662276268005,0.533724129199982,0.791379868984222,0.358002513647079,0.495532125234604,0.779178857803345,0.328662276268005,0.533724129199982,0.79509973526001,0.317423015832901,0.516777575016022,0.801001727581024,0.319669455289841,0.506169617176056,0.825178265571594,0.267818719148636,0.497346937656403,0.825178265571594,0.267818719148636,0.497346937656403,0.667004644870758,0.442110657691956,0.59970235824585,0.718716561794281,0.339281320571899,0.60690575838089,0.862693786621094,0.213308542966843,0.458539962768555,0.813101530075073,0.281051158905029,0.509780466556549,0.819765686988831,0.312743216753006,0.479766517877579,0.54212898015976,0.215727955102921,0.812131583690643,0.533409833908081,0.213411912322044,0.818492114543915,0.819765686988831,0.312743216753006,0.479766517877579,0.791379868984222,0.358002513647079,0.495532125234604, 0.470013290643692,0.212332352995873,0.856739461421967,0.54212898015976,0.215727955102921,0.812131583690643,0.333709418773651,0.169013321399689,0.927400946617126,0.470013290643692,0.212332352995873,0.856739461421967,0.791379868984222,0.358002513647079,0.495532125234604,0.776918292045593,0.306892603635788,0.549740731716156,0.651595652103424,0.352775752544403,0.671544790267944,0.316976845264435,0.303443849086761,0.898580849170685,0.397927284240723,0.292557120323181,0.869519531726837,0.414541780948639,0.400993496179581,0.816920638084412,0.37644562125206,0.38054347038269,0.844674706459045,0.316976845264435,0.303443849086761,0.898580849170685,0.346010982990265,0.0731605663895607,0.935373663902283,0.410090506076813,0.0557969398796558,0.910336434841156,0.397927284240723,0.292557120323181,0.869519531726837,0.328961253166199,0.182314842939377,0.92657744884491,0.371347606182098,0.418176740407944,0.82899284362793,0.397927284240723,0.292557120323181,0.869519531726837,0.410090506076813,0.0557969398796558,0.910336434841156,0.410090506076813,0.0557969398796558,0.910336434841156,0.346010982990265,0.0731605663895607,0.935373663902283,0.402090311050415,-0.284287929534912,0.870346903800964,0.431166082620621,-0.246951669454575,0.867819547653198,-0.0552638620138168,0.347488284111023,0.936054348945618,-0.00221070507541299,0.348074615001678,0.937464237213135,0.00455546798184514,0.298394352197647,0.954431772232056,0.410660326480865,0.0589907094836235,0.909878134727478,0.503296196460724,0.0546823143959045,0.862382054328918,0.135898023843765,0.169247582554817,0.976159334182739,0.179719522595406,0.199890360236168,0.963195025920868,0.166202440857887,0.306374847888947,0.937289237976074,0.135898023843765,0.169247582554817,0.976159334182739,0.503296196460724,0.0546823143959045,0.862382054328918,0.508710622787476,0.190386489033699,0.839622795581818,0.826946556568146,0.0731306597590446,0.557504594326019,0.870097935199738,0.102833516895771,0.482032060623169,0.642289221286774,0.115071445703506,0.757775127887726,0.610058009624481,0.18056558072567,0.771508455276489, 0.610058009624481,0.18056558072567,0.771508455276489,0.642289221286774,0.115071445703506,0.757775127887726,0.471029788255692,0.166954964399338,0.86617374420166,0.491490423679352,0.244152218103409,0.835958659648895,0.623485326766968,0.449957937002182,0.639377772808075,0.497093498706818,0.456073582172394,0.738169968128204,0.620209395885468,0.316063761711121,0.717944324016571,0.649705529212952,0.341418325901031,0.679202735424042,0.594232082366943,0.290724605321884,0.749911665916443,0.663587033748627,0.242647290229797,0.707654237747192,0.620209395885468,0.316063761711121,0.717944324016571,0.594232082366943,0.290724605321884,0.749911665916443,0.620209395885468,0.316063761711121,0.717944324016571,0.416927576065063,0.413195610046387,0.809592962265015,0.370492875576019,0.369821041822433,0.852037250995636,0.556747674942017,0.38243293762207,0.737412452697754,0.649705529212952,0.341418325901031,0.679202735424042,0.620209395885468,0.316063761711121,0.717944324016571,0.663587033748627,0.242647290229797,0.707654237747192,0.340945303440094,-0.698488175868988,0.629182457923889,0.292688071727753,-0.580336809158325,0.759962379932404,0.335490047931671,-0.171642184257507,0.926275014877319,0.431166082620621,-0.246951669454575,0.867819547653198,0.335490047931671,-0.171642184257507,0.926275014877319,0.328961253166199,0.182314842939377,0.92657744884491,0.410090506076813,0.0557969398796558,0.910336434841156,0.431166082620621,-0.246951669454575,0.867819547653198,0.285702854394913,-0.151269629597664,0.946304082870483,0.189583629369736,-0.286395132541656,0.939167618751526,0.124305054545403,-0.308796167373657,0.942970395088196,0.295946687459946,-0.143637612462044,0.944343090057373,0.785013139247894,0.0451312512159348,0.617832958698273,0.733202934265137,-0.122967794537544,0.668799161911011,0.642606198787689,-0.0799093768000603,0.762018263339996,0.563811004161835,0.228632539510727,0.793627321720123,0.642606198787689,-0.0799093768000603,0.762018263339996,0.568371534347534,0.0187626089900732,0.822558045387268,0.546967387199402,0.0579036511480808,0.835148990154266, 0.563811004161835,0.228632539510727,0.793627321720123,0.607095539569855,-0.200262412428856,0.768979847431183,0.588271081447601,-0.259690821170807,0.765831470489502,0.633589863777161,-0.0252969916909933,0.773255407810211,0.655191659927368,0.0146637577563524,0.755320370197296,-0.00835443940013647,-0.52916145324707,0.848480045795441,0.462689489126205,-0.42478209733963,0.778125107288361,0.521133065223694,-0.480470329523087,0.705385446548462,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087,0.705385446548462,0.462689489126205,-0.42478209733963,0.778125107288361,0.666223108768463,-0.303315341472626,0.681283056735992,0.670062482357025,-0.367128610610962,0.645161092281342,0.677804887294769,-0.293700158596039,0.674033224582672,0.598259091377258,-0.415802270174026,0.684977769851685,0.521133065223694,-0.480470329523087,0.705385446548462,0.670062482357025,-0.367128610610962,0.645161092281342,0.189460039138794,-0.647004544734955,0.738572955131531,-0.0357322469353676,-0.667304396629334,0.743927419185638,0.521133065223694,-0.480470329523087,0.705385446548462,0.598259091377258,-0.415802270174026,0.684977769851685,0.788963615894318,-0.297772616147995,0.537464380264282,0.775085091590881,-0.264017641544342,0.574053823947906,0.872779548168182,-0.198945015668869,0.445731669664383,0.888771831989288,-0.233848795294762,0.394207358360291,0.873168885707855,-0.228458538651466,0.430561006069183,0.670062482357025,-0.367128610610962,0.645161092281342,0.788963615894318,-0.297772616147995,0.537464380264282,0.771643459796906,-0.219248831272125,0.597073137760162,0.677804887294769,-0.293700158596039,0.674033224582672,0.771643459796906,-0.219248831272125,0.597073137760162,0.788963615894318,-0.297772616147995,0.537464380264282,0.873168885707855,-0.228458538651466,0.430561006069183,0.861247181892395,-0.192313641309738,0.470392137765884,0.890117168426514,-0.206235691905022,0.40639665722847,0.861247181892395,-0.192313641309738,0.470392137765884,0.873168885707855,-0.228458538651466,0.430561006069183,0.888771831989288,-0.233848795294762,0.394207358360291, 0.872779548168182,-0.198945015668869,0.445731669664383,0.917503833770752,-0.132210671901703,0.375109404325485,0.92565244436264,-0.184836938977242,0.330155730247498,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.937154471874237,-0.0475939512252808,0.345653474330902,0.980852127075195,0.00218713283538818,0.194741636514664,0.92565244436264,-0.184836938977242,0.330155730247498,0.917503833770752,-0.132210671901703,0.375109404325485,0.937154471874237,-0.0475939512252808,0.345653474330902,0.92565244436264,-0.184836938977242,0.330155730247498,0.980852127075195,0.00218713283538818,0.194741636514664,0.938709080219269,-0.156169772148132,0.307304710149765,0.890117168426514,-0.206235691905022,0.40639665722847,0.888771831989288,-0.233848795294762,0.394207358360291,0.92565244436264,-0.184836938977242,0.330155730247498,0.890117168426514,-0.206235691905022,0.40639665722847,0.92565244436264,-0.184836938977242,0.330155730247498,0.938709080219269,-0.156169772148132,0.307304710149765,0.189460039138794,-0.647004544734955,0.738572955131531,0.659502923488617,-0.421348959207535,0.622511804103851,0.535029828548431,-0.536747872829437,0.652414619922638,0.731125593185425,-0.405815303325653,0.548424422740936,0.535029828548431,-0.536747872829437,0.652414619922638,0.659502923488617,-0.421348959207535,0.622511804103851,0.71972918510437,-0.325454443693161,0.613244891166687,0.71972918510437,-0.325454443693161,0.613244891166687,0.754335284233093,-0.305042564868927,0.581315159797668,0.73811411857605,-0.426667273044586,0.522630453109741,0.731125593185425,-0.405815303325653,0.548424422740936,0.245724827051163,0.276487857103348,0.929071426391602,0.16256257891655,0.269552499055862,0.949165344238281,0.221095889806747,0.32488140463829,0.919548094272614,0.278009802103043,0.308251172304153,0.909775674343109,0.0426242314279079,0.260108649730682,0.964638113975525,0.0272070206701756,0.178279355168343,0.983603715896606,0.0412900410592556,0.144470527768135,0.988647282123566,-0.0196372587233782,0.188453316688538,0.98188579082489, -0.00221070507541299,0.348074615001678,0.937464237213135,-0.0196372587233782,0.188453316688538,0.98188579082489,0.0412900410592556,0.144470527768135,0.988647282123566,0.17553049325943,0.198497295379639,0.964255094528198,0.278009802103043,0.308251172304153,0.909775674343109,0.428730636835098,0.26745393872261,0.862935900688171,0.594232082366943,0.290724605321884,0.749911665916443,0.370492875576019,0.369821041822433,0.852037250995636,0.937608182430267,0.0460146591067314,0.344635367393494,0.956782042980194,0.0500060208141804,0.286474347114563,0.938729107379913,0.213661849498749,0.270437210798264,0.950939536094666,0.19349630177021,0.241398423910141,0.955479383468628,-0.0429471768438816,0.291915565729141,0.968910753726959,0.00811574142426252,0.247277289628983,0.949283540248871,0.162967398762703,0.2688909471035,0.941746175289154,0.170597404241562,0.289845913648605,0.969503223896027,0.0232477653771639,0.243973404169083,0.960846960544586,0.123489730060101,0.248039066791534,0.949283540248871,0.162967398762703,0.2688909471035,0.968910753726959,0.00811574142426252,0.247277289628983,0.938729107379913,0.213661849498749,0.270437210798264,0.935715436935425,0.19026754796505,0.297043561935425,0.949283540248871,0.162967398762703,0.2688909471035,0.960846960544586,0.123489730060101,0.248039066791534,0.941311419010162,0.140633046627045,0.30684706568718,0.941746175289154,0.170597404241562,0.289845913648605,0.949283540248871,0.162967398762703,0.2688909471035,0.935715436935425,0.19026754796505,0.297043561935425,0.950939536094666,0.19349630177021,0.241398423910141,0.938729107379913,0.213661849498749,0.270437210798264,0.960846960544586,0.123489730060101,0.248039066791534,0.973029315471649,0.0977980643510818,0.208924487233162,0.969503223896027,0.0232477653771639,0.243973404169083,0.973029315471649,0.0977980643510818,0.208924487233162,0.960846960544586,0.123489730060101,0.248039066791534,0.900685906410217,0.180543556809425,0.395182073116302,0.950939536094666,0.19349630177021,0.241398423910141,0.985209882259369,0.0516813509166241,0.163372397422791, 0.962778627872467,0.0666173547506332,0.261953175067902,0.920523226261139,0.14191623032093,0.36400106549263,0.900685906410217,0.180543556809425,0.395182073116302,0.962778627872467,0.0666173547506332,0.261953175067902,0.900685906410217,0.180543556809425,0.395182073116302,0.920523226261139,0.14191623032093,0.36400106549263,0.928288996219635,-0.0903030559420586,0.360728323459625,0.905692398548126,-0.0579960867762566,0.419949680566788,0.94987964630127,-0.0038351418916136,0.312592297792435,0.937608182430267,0.0460146591067314,0.344635367393494,0.905692398548126,-0.0579960867762566,0.419949680566788,0.910945057868958,-0.218233183026314,0.35007631778717,0.928288996219635,-0.0903030559420586,0.360728323459625,0.910945057868958,-0.218233183026314,0.35007631778717,0.905692398548126,-0.0579960867762566,0.419949680566788,0.969503223896027,0.0232477653771639,0.243973404169083,0.966420710086823,0.0570991300046444,0.250540882349014,0.985529184341431,0.0794467255473137,0.149734541773796,0.973029315471649,0.0977980643510818,0.208924487233162,0.973029315471649,0.0977980643510818,0.208924487233162,0.985529184341431,0.0794467255473137,0.149734541773796,0.985209882259369,0.0516813509166241,0.163372397422791,0.950939536094666,0.19349630177021,0.241398423910141,0.431708127260208,0.0743667632341385,0.898942530155182,-0.0552638620138168,0.347488284111023,0.936054348945618,0.100095093250275,0.182193845510483,0.978154599666595,0.493298023939133,0.0378949381411076,0.8690345287323,0.0312842912971973,-0.474717557430267,0.879582047462463,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.0666661337018013,-0.827535629272461,0.557440996170044,0.289565563201904,-0.362892955541611,0.885697722434998,-0.021647073328495,-0.960853159427643,0.276211261749268,0.0666661337018013,-0.827535629272461,0.557440996170044,-0.00421709613874555,-0.829368829727173,0.558685541152954,0.100095093250275,0.182193845510483,0.978154599666595,0.106603257358074,0.0133492052555084,0.994212031364441,0.493298023939133,0.0378949381411076,0.8690345287323,0.974559843540192,0.0402764715254307,0.220478907227516, 0.928288996219635,-0.0903030559420586,0.360728323459625,0.920523226261139,0.14191623032093,0.36400106549263,0.966257035732269,0.139943510293961,0.216247826814651,0.975037813186646,0.14565335214138,0.167589843273163,0.974559843540192,0.0402764715254307,0.220478907227516,0.966257035732269,0.139943510293961,0.216247826814651,0.204357400536537,-0.124537408351898,0.97094202041626,0.032781969755888,-0.0827890038490295,0.996027767658234,0.161047965288162,-0.353496670722961,0.921468198299408,0.359977900981903,-0.319483041763306,0.876553773880005,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.0293192863464355,-0.389476090669632,0.920569777488709,0.161047965288162,-0.353496670722961,0.921468198299408,0.032781969755888,-0.0827890038490295,0.996027767658234,0.386847853660584,-0.767014622688293,0.511895835399628,0.358242690563202,-0.369526594877243,0.857386887073517,0.196283534169197,-0.554668664932251,0.808588564395905,0.191021859645844,-0.901510059833527,0.388317227363586,0.0821766927838326,-0.66467010974884,0.742603957653046,0.0454688854515553,-0.765503704547882,0.641822934150696,0.171536713838577,-0.946371257305145,0.273782074451447,0.508330583572388,0.166116118431091,0.844988405704498,0.322372585535049,-0.0660212859511375,0.944307744503021,0.477409869432449,-0.0182194709777832,0.878491818904877,0.668687582015991,0.158593982458115,0.726432919502258,0.508330583572388,0.166116118431091,0.844988405704498,0.668687582015991,0.158593982458115,0.726432919502258,0.495325356721878,-0.15430523455143,0.854893386363983,0.499466627836227,0.169172704219818,0.849655032157898,0.469725012779236,0.301579147577286,0.829703807830811,0.536631107330322,0.258791983127594,0.803152441978455,0.499466627836227,0.169172704219818,0.849655032157898,0.328607112169266,0.0718188062310219,0.941732108592987,0.401639640331268,-0.00309631112031639,0.915792524814606,0.209787964820862,-0.0149007942527533,0.977633357048035,0.328607112169266,0.0718188062310219,0.941732108592987,0.32480525970459,-0.177078545093536,0.929055869579315,0.130675092339516,-0.201507270336151,0.9707310795784, 0.209787964820862,-0.0149007942527533,0.977633357048035,0.401639640331268,-0.00309631112031639,0.915792524814606,0.405026167631149,-0.171226277947426,0.898128807544708,0.0695574581623077,-0.316367268562317,0.946083247661591,0.130675092339516,-0.201507270336151,0.9707310795784,0.405026167631149,-0.171226277947426,0.898128807544708,0.388869285583496,-0.304632723331451,0.869470834732056,0.119953289628029,0.283690631389618,0.951383650302887,0.0695574581623077,-0.316367268562317,0.946083247661591,0.388869285583496,-0.304632723331451,0.869470834732056,0.357361167669296,0.242811009287834,0.901851356029511,0.134373739361763,0.867044448852539,0.479768335819244,0.119953289628029,0.283690631389618,0.951383650302887,0.357361167669296,0.242811009287834,0.901851356029511,0.149628981947899,0.846252083778381,0.511339902877808,0.134373739361763,0.867044448852539,0.479768335819244,0.149628981947899,0.846252083778381,0.511339902877808,-0.0952406078577042,0.956162750720978,-0.276915192604065,0.138274729251862,0.981688380241394,-0.131026938557625,0.495325356721878,-0.15430523455143,0.854893386363983,0.385615348815918,-0.420324206352234,0.821357607841492,0.32480525970459,-0.177078545093536,0.929055869579315,0.743626773357391,-0.236951321363449,0.625198543071747,0.572291314601898,-0.52212518453598,0.632351100444794,0.504154682159424,-0.548682808876038,0.666914701461792,0.527478218078613,-0.385366201400757,0.757139086723328,0.504154682159424,-0.548682808876038,0.666914701461792,0.510522961616516,-0.392942905426025,0.764828205108643,0.385615348815918,-0.420324206352234,0.821357607841492,0.527478218078613,-0.385366201400757,0.757139086723328,0.967272758483887,0.0499838180840015,0.248767033219337,0.926979184150696,-0.0986248403787613,0.36191537976265,0.875677406787872,-0.203340858221054,0.437997281551361,0.938709080219269,-0.156169772148132,0.307304710149765,0.980852127075195,0.00218713283538818,0.194741636514664,0.967272758483887,0.0499838180840015,0.248767033219337,0.938709080219269,-0.156169772148132,0.307304710149765,0.861247181892395,-0.192313641309738,0.470392137765884, 0.890117168426514,-0.206235691905022,0.40639665722847,0.875677406787872,-0.203340858221054,0.437997281551361,0.838417947292328,-0.244426995515823,0.487145572900772,0.875677406787872,-0.203340858221054,0.437997281551361,0.890117168426514,-0.206235691905022,0.40639665722847,0.938709080219269,-0.156169772148132,0.307304710149765,0.707773089408875,-0.177667543292046,0.683733463287354,0.840808868408203,-0.369773417711258,0.395358175039291,0.755779623985291,-0.654822111129761,0.00226114504039288,0.630890548229218,-0.774750173091888,0.0417049825191498,0.997004151344299,-0.0145358238369226,-0.075969785451889,0.993277549743652,-0.10496261715889,0.0488112159073353,0.982620000839233,-0.16903156042099,0.076722227036953,0.995871722698212,-0.0808055028319359,0.041352104395628,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483,0.886324822902679,0.0356802977621555,0.461687415838242,0.692221164703369,0.374112457036972,0.61714643239975,0.854045331478119,0.171825125813484,0.491001784801483,0.944392323493958,0.0710759162902832,0.321047365665436,0.954735457897186,-0.0869630351662636,0.284460365772247,0.886324822902679,0.0356802977621555,0.461687415838242,0.886324822902679,0.0356802977621555,0.461687415838242,0.954735457897186,-0.0869630351662636,0.284460365772247,0.797767400741577,-0.104994267225266,0.593753576278687,0.736574053764343,-0.0243753399699926,0.675917506217957,0.03270548209548,0.73682564496994,0.675291240215302,0.134861305356026,0.567138254642487,0.812506437301636,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0662719309329987,0.700039923191071,0.711021840572357,0.03270548209548,0.73682564496994,0.675291240215302,-0.0116734821349382,0.488428175449371,0.872525990009308,0.0294170621782541,0.161411821842194,0.986448585987091,0.823107242584229,0.306770831346512,0.477897584438324,0.838887810707092,0.294615089893341,0.457677990198135,0.854045331478119,0.171825125813484,0.491001784801483,0.766651809215546,0.277672499418259,0.578915357589722,0.854045331478119,0.171825125813484,0.491001784801483, 0.838887810707092,0.294615089893341,0.457677990198135,0.903585314750671,0.234351992607117,0.35862609744072,0.944392323493958,0.0710759162902832,0.321047365665436,0.03270548209548,0.73682564496994,0.675291240215302,0.136332333087921,0.628257870674133,0.765967071056366,0.245428472757339,0.709896266460419,0.660160720348358,0.590013384819031,0.564291477203369,0.577459335327148,0.34969162940979,0.814756572246552,0.462479740381241,0.305379688739777,0.8488889336586,0.431428849697113,0.562591254711151,0.530478656291962,0.634100556373596,0.590013384819031,0.564291477203369,0.577459335327148,0.692221164703369,0.374112457036972,0.61714643239975,0.358841747045517,0.757651388645172,0.545157730579376,0.34969162940979,0.814756572246552,0.462479740381241,0.65490597486496,0.140991285443306,0.742441654205322,0.431429743766785,0.571957051753998,0.697662889957428,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.245428472757339,0.709896266460419,0.660160720348358,0.283866882324219,0.767588019371033,0.574654817581177,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.245428472757339,0.709896266460419,0.660160720348358,0.136332333087921,0.628257870674133,0.765967071056366,0.280443012714386,0.696482062339783,0.660503208637238,0.34969162940979,0.814756572246552,0.462479740381241,0.358841747045517,0.757651388645172,0.545157730579376,0.283866882324219,0.767588019371033,0.574654817581177,0.259025126695633,0.847382187843323,0.463518500328064,0.180923089385033,0.918246328830719,0.352264821529388,0.305379688739777,0.8488889336586,0.431428849697113,0.34969162940979,0.814756572246552,0.462479740381241,0.259025126695633,0.847382187843323,0.463518500328064,-0.0116734821349382,0.488428175449371,0.872525990009308,0.134861305356026,0.567138254642487,0.812506437301636,0.313594281673431,0.139182701706886,0.939301192760468,0.194007128477097,-0.0432056449353695,0.98004823923111,0.313594281673431,0.139182701706886,0.939301192760468,0.134861305356026,0.567138254642487,0.812506437301636, 0.431429743766785,0.571957051753998,0.697662889957428,0.65490597486496,0.140991285443306,0.742441654205322,0.65490597486496,0.140991285443306,0.742441654205322,0.692221164703369,0.374112457036972,0.61714643239975,0.886324822902679,0.0356802977621555,0.461687415838242,0.736574053764343,-0.0243753399699926,0.675917506217957,0.136332333087921,0.628257870674133,0.765967071056366,0.03270548209548,0.73682564496994,0.675291240215302,0.0662719309329987,0.700039923191071,0.711021840572357,0.0579896494746208,0.56835275888443,0.820738911628723,0.245428472757339,0.709896266460419,0.660160720348358,0.431429743766785,0.571957051753998,0.697662889957428,0.134861305356026,0.567138254642487,0.812506437301636,0.03270548209548,0.73682564496994,0.675291240215302,0.358841747045517,0.757651388645172,0.545157730579376,0.692221164703369,0.374112457036972,0.61714643239975,0.431429743766785,0.571957051753998,0.697662889957428,0.766651809215546,0.277672499418259,0.578915357589722,0.692221164703369,0.374112457036972,0.61714643239975,0.590013384819031,0.564291477203369,0.577459335327148,0.671461880207062,0.368781983852386,0.642758727073669,0.671461880207062,0.368781983852386,0.642758727073669,0.590013384819031,0.564291477203369,0.577459335327148,0.562591254711151,0.530478656291962,0.634100556373596,0.714458644390106,0.458717465400696,0.528324842453003,0.823107242584229,0.306770831346512,0.477897584438324,0.766651809215546,0.277672499418259,0.578915357589722,0.671461880207062,0.368781983852386,0.642758727073669,0.714458644390106,0.458717465400696,0.528324842453003,0.671461880207062,0.368781983852386,0.642758727073669,0.562591254711151,0.530478656291962,0.634100556373596,0.565896391868591,0.594577431678772,0.571173310279846,0.0294170621782541,0.161411821842194,0.986448585987091,-0.0116734821349382,0.488428175449371,0.872525990009308,0.194007128477097,-0.0432056449353695,0.98004823923111,0.253216534852982,-0.212744683027267,0.943727254867554,0.0294170621782541,0.161411821842194,0.986448585987091,0.253216534852982,-0.212744683027267,0.943727254867554, -0.000449120096163824,-0.222807794809341,0.974862277507782,0.857822477817535,0.172914609313011,-0.483984649181366,0.93999981880188,0.000262991350609809,-0.341174811124802,0.755998075008392,0.118834607303143,-0.643696546554565,0.61924135684967,0.312463909387589,-0.72035163640976,0.980402529239655,0.0757675468921661,-0.181852087378502,0.8230060338974,0.186259508132935,-0.536626935005188,0.755998075008392,0.118834607303143,-0.643696546554565,0.93999981880188,0.000262991350609809,-0.341174811124802,0.509885489940643,0.234869077801704,-0.827558636665344,0.461275607347488,0.184249937534332,-0.867915213108063,0.755998075008392,0.118834607303143,-0.643696546554565,0.8230060338974,0.186259508132935,-0.536626935005188,0.417167514562607,0.344521790742874,-0.840997040271759,0.61924135684967,0.312463909387589,-0.72035163640976,0.755998075008392,0.118834607303143,-0.643696546554565,0.461275607347488,0.184249937534332,-0.867915213108063,0.417167514562607,0.344521790742874,-0.840997040271759,0.461275607347488,0.184249937534332,-0.867915213108063,0.300174236297607,0.20870378613472,-0.93077290058136,0.282642304897308,0.340673059225082,-0.896691262722015,0.509885489940643,0.234869077801704,-0.827558636665344,0.299484491348267,0.221028134226799,-0.928146302700043,0.300174236297607,0.20870378613472,-0.93077290058136,0.461275607347488,0.184249937534332,-0.867915213108063,0.158535957336426,0.208172604441643,-0.96515828371048,0.171811878681183,0.197920143604279,-0.965043187141418,0.300174236297607,0.20870378613472,-0.93077290058136,0.299484491348267,0.221028134226799,-0.928146302700043,0.154383972287178,0.366727441549301,-0.917429327964783,0.282642304897308,0.340673059225082,-0.896691262722015,0.300174236297607,0.20870378613472,-0.93077290058136,0.171811878681183,0.197920143604279,-0.965043187141418,0.0148119395598769,0.396181702613831,-0.918052673339844,0.012098491191864,0.36400181055069,-0.931319653987885,0.0980598703026772,0.422548413276672,-0.901020050048828,0.154383972287178,0.366727441549301,-0.917429327964783,0.000681107048876584,0.225692093372345,-0.974198460578918, 0.0980598703026772,0.422548413276672,-0.901020050048828,0.012098491191864,0.36400181055069,-0.931319653987885,0.993362247943878,-0.0349664911627769,0.109584823250771,0.98517507314682,-0.0804919600486755,0.151496455073357,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.99024760723114,0.0581013411283493,-0.126625210046768,0.98186069726944,-0.153709232807159,0.111008986830711,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.98517507314682,-0.0804919600486755,0.151496455073357,0.980402529239655,0.0757675468921661,-0.181852087378502,0.93999981880188,0.000262991350609809,-0.341174811124802,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.857822477817535,0.172914609313011,-0.483984649181366,0.99024760723114,0.0581013411283493,-0.126625210046768,0.993784368038177,-0.0809814259409904,-0.0763846710324287,0.93999981880188,0.000262991350609809,-0.341174811124802,0.158535957336426,0.208172604441643,-0.96515828371048,0.00121181993745267,0.232196122407913,-0.9726682305336,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.171811878681183,0.197920143604279,-0.965043187141418,-0.00138723512645811,0.200112879276276,-0.979771912097931,0.0148119395598769,0.396181702613831,-0.918052673339844,0.154383972287178,0.366727441549301,-0.917429327964783,0.171811878681183,0.197920143604279,-0.965043187141418,0.980402529239655,0.0757675468921661,-0.181852087378502,0.981077253818512,0.19092746078968,-0.0321571119129658,0.849523603916168,0.293443530797958,-0.438406825065613,0.8230060338974,0.186259508132935,-0.536626935005188,0.97625857591629,0.21655336022377,-0.00488529354333878,0.889407336711884,0.240895375609398,-0.388489335775375,0.849523603916168,0.293443530797958,-0.438406825065613,0.981077253818512,0.19092746078968,-0.0321571119129658,0.594776809215546,0.323577910661697,-0.735892593860626,0.538163602352142,0.395974457263947,-0.744032382965088,0.849523603916168,0.293443530797958,-0.438406825065613, 0.889407336711884,0.240895375609398,-0.388489335775375,0.509885489940643,0.234869077801704,-0.827558636665344,0.8230060338974,0.186259508132935,-0.536626935005188,0.849523603916168,0.293443530797958,-0.438406825065613,0.538163602352142,0.395974457263947,-0.744032382965088,0.509885489940643,0.234869077801704,-0.827558636665344,0.538163602352142,0.395974457263947,-0.744032382965088,0.268934428691864,0.356452435255051,-0.894771456718445,0.299484491348267,0.221028134226799,-0.928146302700043,0.594776809215546,0.323577910661697,-0.735892593860626,0.256779372692108,0.275679916143417,-0.926317930221558,0.268934428691864,0.356452435255051,-0.894771456718445,0.538163602352142,0.395974457263947,-0.744032382965088,0.115779966115952,0.184250295162201,-0.976036310195923,0.138864398002625,0.273968666791916,-0.951660573482513,0.268934428691864,0.356452435255051,-0.894771456718445,0.256779372692108,0.275679916143417,-0.926317930221558,0.158535957336426,0.208172604441643,-0.96515828371048,0.299484491348267,0.221028134226799,-0.928146302700043,0.268934428691864,0.356452435255051,-0.894771456718445,0.138864398002625,0.273968666791916,-0.951660573482513,0.98186069726944,-0.153709232807159,0.111008986830711,0.98053389787674,0.00911934021860361,0.196137949824333,0.973558664321899,0.0965578630566597,0.207026869058609,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.903585314750671,0.234351992607117,0.35862609744072,0.919988930225372,0.274642944335938,0.279627621173859,0.973558664321899,0.0965578630566597,0.207026869058609,0.98053389787674,0.00911934021860361,0.196137949824333,0.97625857591629,0.21655336022377,-0.00488529354333878,0.981077253818512,0.19092746078968,-0.0321571119129658,0.973558664321899,0.0965578630566597,0.207026869058609,0.919988930225372,0.274642944335938,0.279627621173859,0.980402529239655,0.0757675468921661,-0.181852087378502,0.995911478996277,-0.0872819051146507,0.0232853442430496,0.973558664321899,0.0965578630566597,0.207026869058609,0.981077253818512,0.19092746078968,-0.0321571119129658,0.505010664463043,0.824910163879395,0.253943711519241, -0.457634329795837,0.886664032936096,0.066315270960331,-0.560799777507782,0.808064699172974,-0.180374935269356,0.401338547468185,0.912790596485138,-0.075766921043396,0.505010664463043,0.824910163879395,0.253943711519241,0.401338547468185,0.912790596485138,-0.075766921043396,0.976279318332672,0.215815082192421,0.0173952374607325,0.956802248954773,0.196078270673752,0.214668840169907,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.560632228851318,0.74455463886261,-0.362394601106644,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.875516295433044,0.353666007518768,-0.329228729009628,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.560632228851318,0.74455463886261,-0.362394601106644,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.934603452682495,0.00426531257107854,-0.355665951967239,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.983070194721222,-0.155307233333588,-0.0972249284386635,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.965442478656769,-0.181367635726929,-0.187153950333595,0.534866094589233,0.53300929069519,0.655606091022491,-0.38366886973381,0.80352109670639,0.455139607191086,-0.722711741924286,0.688240706920624,0.0633445307612419,-0.14746518433094,0.953655540943146,0.262288182973862,-0.407276064157486,0.876896381378174,0.255301624536514,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.722711741924286,0.688240706920624,0.0633445307612419,-0.38366886973381,0.80352109670639,0.455139607191086,-0.457634329795837,0.886664032936096,0.066315270960331,-0.14746518433094,0.953655540943146,0.262288182973862, -0.722711741924286,0.688240706920624,0.0633445307612419,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.407276064157486,0.876896381378174,0.255301624536514,-0.482280492782593,0.875927150249481,0.0125399529933929,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.76844048500061,0.638914406299591,-0.0358826071023941,-0.846736192703247,0.50926685333252,-0.153899610042572,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395,0.253943711519241,0.956802248954773,0.196078270673752,0.214668840169907,0.534866094589233,0.53300929069519,0.655606091022491,-0.14746518433094,0.953655540943146,0.262288182973862,-0.457634329795837,0.886664032936096,0.066315270960331,0.505010664463043,0.824910163879395,0.253943711519241,-0.14746518433094,0.953655540943146,0.262288182973862,0.976279318332672,0.215815082192421,0.0173952374607325,0.401338547468185,0.912790596485138,-0.075766921043396,0.382399499416351,0.801903128623962,-0.459044635295868,0.961685180664063,0.152435541152954,-0.227870747447014,-0.560799777507782,0.808064699172974,-0.180374935269356,-0.560632228851318,0.74455463886261,-0.362394601106644,0.382399499416351,0.801903128623962,-0.459044635295868,0.401338547468185,0.912790596485138,-0.075766921043396,-0.621643662452698,0.524245023727417,-0.582001924514771,0.301987856626511,0.555173337459564,-0.774974763393402,0.382399499416351,0.801903128623962,-0.459044635295868,-0.560632228851318,0.74455463886261,-0.362394601106644,0.934603452682495,0.00426531257107854,-0.355665951967239,0.961685180664063,0.152435541152954,-0.227870747447014,0.382399499416351,0.801903128623962,-0.459044635295868,0.301987856626511,0.555173337459564,-0.774974763393402,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.999161183834076,-0.0292985811829567,0.0286098290234804,0.976279318332672,0.215815082192421,0.0173952374607325,0.961685180664063,0.152435541152954,-0.227870747447014,0.97535902261734,-0.218811824917793,-0.0282160099595785, 0.974573373794556,-0.220145642757416,-0.0417446494102478,0.817201495170593,0.0648972690105438,-0.572686731815338,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.934603452682495,0.00426531257107854,-0.355665951967239,0.817201495170593,0.0648972690105438,-0.572686731815338,0.974573373794556,-0.220145642757416,-0.0417446494102478,0.858178198337555,-0.416941344738007,-0.299483120441437,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.817870736122131,-0.315850645303726,-0.480963379144669,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.903657674789429,-0.181017354130745,-0.38811793923378,0.935528516769409,-0.219087332487106,-0.277104824781418,0.898539185523987,-0.0431283302605152,-0.436769187450409,0.965442478656769,-0.181367635726929,-0.187153950333595,0.935528516769409,-0.219087332487106,-0.277104824781418,0.838157534599304,-0.159007966518402,-0.521735966205597,0.903657674789429,-0.181017354130745,-0.38811793923378,0.838157534599304,-0.159007966518402,-0.521735966205597,0.935528516769409,-0.219087332487106,-0.277104824781418,0.934603452682495,0.00426531257107854,-0.355665951967239,0.301987856626511,0.555173337459564,-0.774974763393402,0.240385457873344,0.328945428133011,-0.913241326808929,0.817201495170593,0.0648972690105438,-0.572686731815338,-0.621643662452698,0.524245023727417,-0.582001924514771,-0.462323904037476,0.371266037225723,-0.805244147777557,0.240385457873344,0.328945428133011,-0.913241326808929,0.301987856626511,0.555173337459564,-0.774974763393402,-0.421522259712219,0.257120847702026,-0.869602143764496,0.246327593922615,0.163114905357361,-0.955361843109131,0.240385457873344,0.328945428133011,-0.913241326808929,-0.462323904037476,0.371266037225723,-0.805244147777557,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.817201495170593,0.0648972690105438,-0.572686731815338,0.240385457873344,0.328945428133011,-0.913241326808929,0.246327593922615,0.163114905357361,-0.955361843109131,0.805123388767242,-0.0231669675558805,-0.592654705047607, 0.246327593922615,0.163114905357361,-0.955361843109131,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.811204135417938,-0.168334782123566,-0.560010075569153,-0.421522259712219,0.257120847702026,-0.869602143764496,-0.426414966583252,0.120833218097687,-0.896420419216156,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.246327593922615,0.163114905357361,-0.955361843109131,-0.529633462429047,-0.0744152963161469,-0.844956040382385,0.193057999014854,-0.308601260185242,-0.931393504142761,0.256132781505585,-0.0418680384755135,-0.965734481811523,-0.426414966583252,0.120833218097687,-0.896420419216156,0.817870736122131,-0.315850645303726,-0.480963379144669,0.811204135417938,-0.168334782123566,-0.560010075569153,0.256132781505585,-0.0418680384755135,-0.965734481811523,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.748543560504913,-0.365974009037018,-0.55294269323349,-0.621009290218353,-0.361309498548508,-0.695559442043304,-0.77015894651413,-0.0879611894488335,-0.631757915019989,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.805123388767242,-0.0231669675558805,-0.592654705047607,0.811204135417938,-0.168334782123566,-0.560010075569153,0.969782054424286,-0.238185256719589,-0.0528260990977287,0.811204135417938,-0.168334782123566,-0.560010075569153,0.817870736122131,-0.315850645303726,-0.480963379144669,0.972712695598602,-0.223196312785149,-0.0633513405919075,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.158295571804047,-0.666025876998901,-0.72893899679184,0.193057999014854,-0.308601260185242,-0.931393504142761,-0.529633462429047,-0.0744152963161469,-0.844956040382385,0.158295571804047,-0.666025876998901,-0.72893899679184,0.858178198337555,-0.416941344738007,-0.299483120441437,0.817870736122131,-0.315850645303726,-0.480963379144669,0.193057999014854,-0.308601260185242,-0.931393504142761,0.0486728809773922,-0.68095201253891,-0.730708718299866, 0.858178198337555,-0.416941344738007,-0.299483120441437,0.158295571804047,-0.666025876998901,-0.72893899679184,0.0486728809773922,-0.68095201253891,-0.730708718299866,0.158295571804047,-0.666025876998901,-0.72893899679184,-0.621009290218353,-0.361309498548508,-0.695559442043304,0.945727825164795,-0.098081186413765,0.309804677963257,0.966708958148956,-0.002308584516868,0.255868047475815,0.944782853126526,0.0188948940485716,0.327151775360107,0.542791187763214,-0.0487677082419395,0.838450610637665,0.507363021373749,-0.115291275084019,0.853985190391541,0.775663673877716,0.0339613817632198,0.630232095718384,0.702920734882355,-0.00120963365770876,0.711267173290253,0.800939977169037,-0.0900113806128502,0.59194016456604,0.93361908197403,-0.0509388744831085,0.354627430438995,0.922792911529541,0.0174659602344036,0.384900212287903,0.85576856136322,-0.00803003925830126,0.517296552658081,0.864675521850586,0.193993464112282,0.46336030960083,0.815548717975616,0.273398518562317,0.510032892227173,0.846449613571167,0.310930520296097,0.432256042957306,0.908188223838806,0.15894940495491,0.387206882238388,0.989404678344727,-0.134779617190361,-0.0539703145623207,0.933521032333374,-0.113554745912552,-0.340064376592636,0.903657674789429,-0.181017354130745,-0.38811793923378,0.972712695598602,-0.223196312785149,-0.0633513405919075,0.959026873111725,-0.148191750049591,0.241467580199242,0.89356255531311,-0.0812801718711853,0.441519498825073,0.870028138160706,-0.439180076122284,0.223990917205811,0.903808772563934,-0.380508303642273,0.19581413269043,0.96756237745285,-0.0955442041158676,0.233868315815926,0.959026873111725,-0.148191750049591,0.241467580199242,0.903808772563934,-0.380508303642273,0.19581413269043,0.933318138122559,-0.313118785619736,0.175709679722786,0.886316955089569,0.0816843584179878,0.455817818641663,0.959026873111725,-0.148191750049591,0.241467580199242,0.96756237745285,-0.0955442041158676,0.233868315815926,0.289565563201904,-0.362892955541611,0.885697722434998,0.173318073153496,-0.274096310138702,0.945955634117126,0.174916133284569,0.190565213561058,0.965965449810028, 0.493298023939133,0.0378949381411076,0.8690345287323,0.179719522595406,0.199890360236168,0.963195025920868,0.431708127260208,0.0743667632341385,0.898942530155182,0.280919551849365,0.197001457214355,0.939294755458832,0.410660326480865,0.0589907094836235,0.909878134727478,0.471029788255692,0.166954964399338,0.86617374420166,0.562969863414764,0.141692653298378,0.81424081325531,0.55342048406601,0.140735372900963,0.820925891399384,0.498867928981781,0.236602708697319,0.833756506443024,0.542900562286377,0.367345452308655,0.755192875862122,0.314301073551178,0.320888847112656,0.893445670604706,0.351316899061203,-0.0729207322001457,0.933412551879883,0.533053755760193,0.0411353260278702,0.845080852508545,0.542900562286377,0.367345452308655,0.755192875862122,0.535205781459808,0.472302228212357,0.700346648693085,0.371347606182098,0.418176740407944,0.82899284362793,0.314301073551178,0.320888847112656,0.893445670604706,0.267092674970627,-0.484114617109299,0.833243370056152,0.329291462898254,-0.460140645503998,0.824522733688354,0.292688071727753,-0.580336809158325,0.759962379932404,0.209196627140045,-0.665287017822266,0.716679811477661,0.512064158916473,0.485980182886124,0.708246827125549,0.611575484275818,0.314111411571503,0.726160764694214,0.414541780948639,0.400993496179581,0.816920638084412,0.397927284240723,0.292557120323181,0.869519531726837,0.371347606182098,0.418176740407944,0.82899284362793,0.763672888278961,0.330310761928558,0.554705798625946,0.793774306774139,0.385858178138733,0.470144480466843,0.846449613571167,0.310930520296097,0.432256042957306,0.815548717975616,0.273398518562317,0.510032892227173,0.793774306774139,0.385858178138733,0.470144480466843,0.763672888278961,0.330310761928558,0.554705798625946,0.87058699131012,0.227341398596764,0.436341762542725,0.843018114566803,0.354378879070282,0.404643177986145,0.763672888278961,0.330310761928558,0.554705798625946,0.815548717975616,0.273398518562317,0.510032892227173,0.776109874248505,0.274881482124329,0.567532956600189,0.728024780750275,0.317726284265518,0.607478320598602, 0.817228376865387,-0.0154423741623759,0.576107025146484,0.775663673877716,0.0339613817632198,0.630232095718384,0.507363021373749,-0.115291275084019,0.853985190391541,0.54023802280426,-0.148879259824753,0.828237771987915,0.839345693588257,-0.00945493672043085,0.543515801429749,0.785013139247894,0.0451312512159348,0.617832958698273,0.36207702755928,0.0357636697590351,0.931461870670319,0.52197939157486,-0.246480882167816,0.816568851470947,0.480981200933456,0.871001183986664,0.100070223212242,0.739092469215393,0.541533410549164,0.400604367256165,0.252335846424103,0.330343335866928,0.909505307674408,0.13062296807766,0.400416731834412,0.906975269317627,0.121470481157303,-0.391699403524399,0.912039756774902,0.13062296807766,0.400416731834412,0.906975269317627,0.252335846424103,0.330343335866928,0.909505307674408,0.114735066890717,-0.656680226325989,0.745390474796295,0.164827063679695,-0.547387719154358,0.820486903190613,0.171075537800789,-0.616661608219147,0.768415033817291,0.208488672971725,-0.647888123989105,0.732648193836212,-0.0433456413447857,-0.716439366340637,0.696301460266113,-0.0233143605291843,-0.495335191488266,0.868389010429382,-0.199777901172638,-0.484420716762543,0.851719081401825,0.607095539569855,-0.200262412428856,0.768979847431183,0.655191659927368,0.0146637577563524,0.755320370197296,0.596563339233398,-0.0223739240318537,0.8022540807724,0.702920734882355,-0.00120963365770876,0.711267173290253,0.495325356721878,-0.15430523455143,0.854893386363983,0.668687582015991,0.158593982458115,0.726432919502258,0.936089217662811,-0.214836105704308,0.278536230325699,0.92750072479248,-0.198037564754486,0.31705442070961,0.941718637943268,-0.180898189544678,0.283622801303864,-0.0268061328679323,-0.427482962608337,0.903625905513763,-0.0632589310407639,-0.395606756210327,0.916238844394684,0.0293192863464355,-0.389476090669632,0.920569777488709,-0.0362738110125065,-0.271473735570908,0.961762070655823,0.816257119178772,-0.389834344387054,-0.426325589418411,0.933138132095337,-0.0070160455070436,-0.359449595212936,0.856223344802856,0.13723511993885,-0.498044282197952, 0.93777334690094,-0.280869245529175,-0.204190224409103,0.047360323369503,-0.552981853485107,0.831846177577972,0.248945504426956,-0.117258243262768,0.961393058300018,0.362627446651459,-0.180693462491035,0.914249002933502,0.11539563536644,-0.528798937797546,0.840865969657898,0.370056182146072,0.811048626899719,-0.453054636716843,0.33390274643898,0.823867678642273,-0.457985788583755,0.713096976280212,0.68854147195816,-0.131921663880348,0.370056182146072,0.811048626899719,-0.453054636716843,-0.299774140119553,0.750125706195831,-0.589446246623993,0.33390274643898,0.823867678642273,-0.457985788583755,0.138864398002625,0.273968666791916,-0.951660573482513,0.115779966115952,0.184250295162201,-0.976036310195923,-0.00542618287727237,0.149814411997795,-0.98869925737381,0.002942921128124,0.253444164991379,-0.967345535755157,0.0694107115268707,0.216942340135574,-0.973713636398315,-0.00773082999512553,0.120841763913631,-0.992641687393188,0.139773815870285,0.0987650603055954,-0.985245525836945,0.17595848441124,0.184216767549515,-0.967007160186768,-0.147914990782738,0.17213037610054,0.973905682563782,0.026632534340024,0.124120466411114,0.991909682750702,0.00927210599184036,-0.101372048258781,0.99480539560318,-0.220686122775078,-0.040834903717041,0.974489688873291,0.714891254901886,0.201140508055687,0.669681310653687,0.0118562933057547,0.974313676357269,0.224883005023003,-0.258119583129883,0.745032370090485,0.615061819553375,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.690630912780762,-0.290166169404984,-0.662444412708282,-0.77015894651413,-0.0879611894488335,-0.631757915019989,-0.609373271465302,-0.198937028646469,-0.767520844936371,0.994307160377502,-0.0864710509777069,-0.0622573494911194,0.961685180664063,0.152435541152954,-0.227870747447014,0.934603452682495,0.00426531257107854,-0.355665951967239,0.989281177520752,-0.130912706255913,-0.0646882206201553,0.965442478656769,-0.181367635726929,-0.187153950333595,0.97535902261734,-0.218811824917793,-0.0282160099595785,0.969782054424286,-0.238185256719589,-0.0528260990977287, 0.935528516769409,-0.219087332487106,-0.277104824781418,-0.888915956020355,0.416312962770462,-0.191081121563911,-0.515466570854187,0.838185369968414,-0.178155809640884,-0.534112751483917,0.714107155799866,-0.452520221471787,-0.875516295433044,0.353666007518768,-0.329228729009628,0.840574324131012,-0.291103184223175,0.456830143928528,0.891989231109619,-0.254739731550217,0.373447239398956,0.948027610778809,-0.215131908655167,0.234439536929131,0.869891345500946,-0.342425405979156,0.355012476444244,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.934147357940674,0.162888333201408,-0.317546963691711,-0.84568065404892,0.227536335587502,-0.482753932476044,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.311408758163452,-0.316491156816483,0.896023392677307,-0.0737119764089584,-0.466615557670593,0.881383299827576,-0.069260835647583,0.0269219465553761,0.997235238552094,-0.451660662889481,0.11085283011198,0.88527637720108,0.289565563201904,-0.362892955541611,0.885697722434998,0.493298023939133,0.0378949381411076,0.8690345287323,0.106603257358074,0.0133492052555084,0.994212031364441,0.0312842912971973,-0.474717557430267,0.879582047462463,0.937608182430267,0.0460146591067314,0.344635367393494,0.950939536094666,0.19349630177021,0.241398423910141,0.900685906410217,0.180543556809425,0.395182073116302,0.905692398548126,-0.0579960867762566,0.419949680566788,0.0266619008034468,0.262281715869904,0.964622974395752,-0.0475814715027809,0.0593862198293209,0.997100412845612,-0.0241487547755241,-0.0255803689360619,0.999381065368652,-0.0073667336255312,-0.00580848380923271,0.999956011772156,0.0505779199302197,-0.0635379478335381,0.996696949005127,0.0540597923099995,-0.0316095426678658,0.998037278652191,0.0144113004207611,0.0269631575793028,0.999532520771027,-0.104829348623753,-0.0149719836190343,0.994377493858337,0.958109974861145,-0.0344467237591743,0.284321486949921,0.951365828514099,0.00983366928994656,0.30790650844574,0.908929646015167,0.18951641023159,0.371389836072922,0.930171310901642,0.112328357994556,0.34951913356781, -0.739963114261627,0.167704880237579,0.651405930519104,-0.628194212913513,0.287138849496841,0.723134398460388,-0.620847463607788,0.0176430195569992,0.783732831478119,-0.720110774040222,-0.0107529554516077,0.693775773048401,0.36207702755928,0.0357636697590351,0.931461870670319,0.785013139247894,0.0451312512159348,0.617832958698273,0.563811004161835,0.228632539510727,0.793627321720123,-0.619005084037781,0.113047316670418,0.777208507061005,-0.578717350959778,0.160483196377754,0.799582004547119,-0.603184819221497,0.0701910704374313,0.794506967067719,-0.761701762676239,0.421244710683823,0.492304056882858,-0.702385485172272,0.688902199268341,0.179076477885246,-0.630214631557465,0.655408442020416,0.416256308555603,0.778178691864014,0.616257607936859,0.121097095310688,0.739092469215393,0.541533410549164,0.400604367256165,0.480981200933456,0.871001183986664,0.100070223212242,0.746549785137177,0.0205342527478933,0.665012657642365,0.808598875999451,0.0304549541324377,0.587571620941162,0.669167935848236,0.129631534218788,0.731717109680176,0.732805073261261,0.230000048875809,0.640387892723084,0.991854608058929,0.119089640676975,0.0451894104480743,0.965819001197815,-0.0271366275846958,0.257793039083481,0.815926849842072,-0.0521769113838673,0.575795948505402,0.919128894805908,0.0630135238170624,0.388884782791138,0.856838226318359,0.0312061347067356,0.514640152454376,0.928679704666138,-0.214017242193222,0.30290362238884,0.928761661052704,-0.0844941884279251,0.360918909311295,0.785623669624329,-0.0282825529575348,0.61805784702301,0.856838226318359,0.0312061347067356,0.514640152454376,0.785623669624329,-0.0282825529575348,0.61805784702301,0.746549785137177,0.0205342527478933,0.665012657642365,0.732805073261261,0.230000048875809,0.640387892723084,0.776369571685791,-0.530167698860168,0.340840935707092,0.878716766834259,-0.421581953763962,0.223887145519257,0.805564939975739,-0.533806264400482,0.257130265235901,0.67726731300354,-0.631388366222382,0.377700597047806,0.975082695484161,0.0550070591270924,-0.214913904666901,0.988399267196655,0.136643067002296,-0.0662992894649506, 0.805564939975739,-0.533806264400482,0.257130265235901,0.878716766834259,-0.421581953763962,0.223887145519257,0.563811004161835,0.228632539510727,0.793627321720123,0.103208005428314,-0.00969436671584845,0.994612574577332,0.36207702755928,0.0357636697590351,0.931461870670319,0.546967387199402,0.0579036511480808,0.835148990154266,0.295946687459946,-0.143637612462044,0.944343090057373,0.103208005428314,-0.00969436671584845,0.994612574577332,0.563811004161835,0.228632539510727,0.793627321720123,0.535101175308228,-0.00626787729561329,0.844764709472656,0.285702854394913,-0.151269629597664,0.946304082870483,0.295946687459946,-0.143637612462044,0.944343090057373,0.546967387199402,0.0579036511480808,0.835148990154266,0.565106153488159,0.017743531614542,0.824827373027802,-0.670063674449921,0.104801684617996,0.734868168830872,-0.611212015151978,0.257414042949677,0.74843692779541,-0.483639568090439,-0.0787182152271271,0.871720254421234,0.527478218078613,-0.385366201400757,0.757139086723328,0.385615348815918,-0.420324206352234,0.821357607841492,0.495325356721878,-0.15430523455143,0.854893386363983,0.702920734882355,-0.00120963365770876,0.711267173290253,0.20434632897377,0.515124678611755,0.832399606704712,0.219657093286514,0.398345082998276,0.890545904636383,0.340864300727844,0.524212896823883,0.780392467975616,0.171536713838577,-0.946371257305145,0.273782074451447,0.164180904626846,-0.958690702915192,0.232285901904106,0.279211044311523,-0.955691933631897,0.093242421746254,0.255019038915634,-0.916801631450653,0.307311117649078,0.16572479903698,-0.647090375423431,0.744183719158173,0.0821766927838326,-0.66467010974884,0.742603957653046,0.171536713838577,-0.946371257305145,0.273782074451447,0.255019038915634,-0.916801631450653,0.307311117649078,-0.24947227537632,-0.924226999282837,0.289081335067749,-0.139739543199539,-0.751490116119385,0.644775569438934,-0.304556578397751,-0.909958362579346,0.281462401151657,-0.30062210559845,-0.923126101493835,0.239717543125153,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.304556578397751,-0.909958362579346,0.281462401151657, -0.139739543199539,-0.751490116119385,0.644775569438934,-0.139739543199539,-0.751490116119385,0.644775569438934,0.033345639705658,-0.401991754770279,0.915035903453827,-0.157473087310791,-0.645219802856445,0.747591853141785,-0.310964792966843,-0.937908291816711,0.153716951608658,-0.436592847108841,-0.8724405169487,0.219622910022736,-0.419383674860001,-0.901702642440796,0.105117149651051,-0.303882002830505,-0.951589345932007,0.046188946813345,-0.52777773141861,0.480110883712769,0.700674116611481,-0.346435993909836,0.570491790771484,0.744661808013916,-0.428986668586731,0.611180424690247,0.665153324604034,0.245724827051163,0.276487857103348,0.929071426391602,0.305438488721848,0.421940237283707,0.853623926639557,0.219657093286514,0.398345082998276,0.890545904636383,0.163330301642418,0.241669088602066,0.956514120101929,-0.960206747055054,0.212085798382759,0.18172125518322,-0.934037208557129,0.242426365613937,0.262305021286011,-0.931853711605072,0.224255800247192,0.285233229398727,-0.974589943885803,0.150285556912422,0.166098326444626,-0.346435993909836,0.570491790771484,0.744661808013916,-0.273772716522217,0.454653739929199,0.847548484802246,-0.20940063893795,0.453145354986191,0.866493284702301,-0.279750615358353,0.610641419887543,0.74084860086441,-0.428986668586731,0.611180424690247,0.665153324604034,0.0744598954916,0.293609887361526,0.953020930290222,0.0879488736391068,0.341627478599548,0.935711324214935,0.139874473214149,0.332423865795136,0.932700097560883,-0.617874979972839,-0.144242078065872,0.772932589054108,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.74636310338974,-0.0243592355400324,0.665093064308167,-0.671271145343781,-0.219168946146965,0.708067834377289,-0.800495445728302,-0.125636011362076,0.586022734642029,-0.780423760414124,-0.171599060297012,0.601242482662201,-0.633282124996185,-0.25443509221077,0.730901181697845,-0.938549876213074,0.168846443295479,0.301023334264755,-0.939677178859711,-0.021852383390069,0.341363847255707,-0.896919310092926,-0.0747082084417343,0.435837626457214, -0.918760776519775,0.045384906232357,0.392197400331497,-0.855047225952148,0.419915407896042,0.304245471954346,-0.922844409942627,0.263350307941437,0.281078040599823,-0.897303998470306,0.274592310190201,0.345607608556747,-0.855356216430664,-0.409418344497681,0.317399442195892,-0.680772840976715,-0.570546209812164,0.459374964237213,-0.658224046230316,-0.61687958240509,0.431509733200073,-0.766225039958954,-0.486649185419083,0.419609010219574,0.64728707075119,-0.269912004470825,0.712858319282532,0.804244041442871,-0.107830874621868,0.584434807300568,0.941014289855957,-0.231837883591652,0.246461525559425,0.903722703456879,-0.336785912513733,0.26431143283844,0.719567954540253,-0.322717130184174,0.614878535270691,0.550090253353119,-0.357467710971832,0.754730105400085,0.702580511569977,0.00276018492877483,0.711598932743073,0.792236804962158,-0.0960670188069344,0.602604329586029,0.866469502449036,-0.361488610506058,0.344320476055145,0.719567954540253,-0.322717130184174,0.614878535270691,0.792236804962158,-0.0960670188069344,0.602604329586029,0.883809387683868,-0.290479838848114,0.366745710372925,0.892324268817902,-0.364589005708694,0.266143202781677,0.897057175636292,-0.352101475000381,0.267044723033905,0.866469502449036,-0.361488610506058,0.344320476055145,0.883809387683868,-0.290479838848114,0.366745710372925,0.789786696434021,-0.370871901512146,0.488560140132904,0.844530344009399,-0.306019067764282,0.4394551217556,0.897057175636292,-0.352101475000381,0.267044723033905,0.892324268817902,-0.364589005708694,0.266143202781677,-0.82659912109375,0.121020883321762,0.549625158309937,-0.787644863128662,0.107126019895077,0.606745064258575,-0.866631507873535,0.0684041753411293,0.49423748254776,-0.895226001739502,0.157463803887367,0.416863977909088,-0.917545735836029,0.0924613624811172,0.386730790138245,-0.784394800662994,0.0327747240662575,0.61939537525177,-0.82659912109375,0.121020883321762,0.549625158309937,-0.895226001739502,0.157463803887367,0.416863977909088,0.680521726608276,-0.105455316603184,0.725099503993988,0.85576856136322,-0.00803003925830126,0.517296552658081, 0.817228376865387,-0.0154423741623759,0.576107025146484,0.54023802280426,-0.148879259824753,0.828237771987915,0.800939977169037,-0.0900113806128502,0.59194016456604,0.85576856136322,-0.00803003925830126,0.517296552658081,0.680521726608276,-0.105455316603184,0.725099503993988,0.0623843558132648,-0.406503170728683,0.911517083644867,-0.0108760436996818,-0.349400758743286,0.936910271644592,-0.00295650074258447,-0.253587752580643,0.967307865619659,0.226468428969383,-0.439074218273163,0.869439959526062,0.819252371788025,-0.448852121829987,0.356871604919434,0.903722703456879,-0.336785912513733,0.26431143283844,0.925993382930756,0.073547326028347,-0.370306611061096,0.819883346557617,-0.543677628040314,0.179460227489471,0.918502330780029,-0.196233198046684,0.343287169933319,0.938213586807251,-0.216931000351906,0.269622415304184,0.891989231109619,-0.254739731550217,0.373447239398956,-0.596545398235321,0.216776832938194,0.772749245166779,-0.700570464134216,0.212181925773621,0.681307435035706,-0.890684902667999,-0.186281442642212,0.414704352617264,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.554021298885345,-0.0054763276129961,0.832484483718872,-0.377908736467361,-0.53636372089386,0.754651606082916,-0.352613061666489,-0.495931386947632,0.793546497821808,-0.323468834161758,-0.409916341304779,0.85284024477005,-0.365384161472321,-0.375545680522919,0.851739346981049,-0.419774144887924,-0.091299757361412,0.903024911880493,-0.35642284154892,0.221263155341148,0.907747387886047,-0.252474844455719,-0.0950261279940605,0.962926030158997,-0.204613357782364,0.564212739467621,0.799873352050781,-0.046717431396246,0.464232265949249,0.884480595588684,-0.104829348623753,-0.0149719836190343,0.994377493858337,-0.218910127878189,-0.0667930841445923,0.973456263542175,0.255169302225113,-0.0558453612029552,0.965282320976257,0.133207947015762,0.0763719230890274,0.988141179084778,0.187445163726807,0.511297464370728,0.838712811470032, 0.330043107271194,0.436470597982407,0.83699756860733,-0.692487776279449,0.122583940625191,0.71093875169754,-0.667788088321686,0.180951654911041,0.722021877765656,-0.725494682788849,-0.035611480474472,0.687305808067322,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.951185405254364,-0.150061026215553,0.2696812748909,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.960161685943604,0.0413071177899837,0.276375204324722,-0.933361113071442,-0.067049466073513,0.35262069106102,-0.95017421245575,-0.209271758794785,0.231028690934181,-0.961850166320801,-0.179731413722038,0.20625451207161,-0.582078754901886,0.152128055691719,0.798774898052216,-0.578490018844604,0.0704870000481606,0.812638223171234,-0.629961490631104,0.0401515737175941,0.775587737560272,-0.667788088321686,0.180951654911041,0.722021877765656,-0.667788088321686,0.180951654911041,0.722021877765656,-0.692487776279449,0.122583940625191,0.71093875169754,-0.518675327301025,0.170822575688362,0.837732374668121,-0.667788088321686,0.180951654911041,0.722021877765656,-0.518675327301025,0.170822575688362,0.837732374668121,-0.538357496261597,0.0919485241174698,0.837685286998749,-0.582078754901886,0.152128055691719,0.798774898052216,-0.518675327301025,0.170822575688362,0.837732374668121,-0.447176039218903,0.207748264074326,0.869985222816467,-0.53751266002655,0.1327995210886,0.832733154296875,-0.527163207530975,0.108157083392143,0.842852890491486,-0.419887959957123,0.29813814163208,0.857209324836731,-0.447176039218903,0.207748264074326,0.869985222816467,-0.518675327301025,0.170822575688362,0.837732374668121,0.523068964481354,-0.400331109762192,0.752418637275696,0.630171060562134,-0.220097869634628,0.744608163833618,0.511712968349457,-0.26713839173317,0.816570222377777,-0.576066911220551,-0.146876826882362,0.804098308086395,-0.422783136367798,-0.0330428369343281,0.905628323554993,-0.17153462767601,-0.247131928801537,0.953677952289581,-0.505191087722778,-0.124014981091022,0.854050517082214,0.139874473214149,0.332423865795136,0.932700097560883,0.0879488736391068,0.341627478599548,0.935711324214935, -0.113911136984825,0.222564980387688,0.968240201473236,-0.0552638620138168,0.347488284111023,0.936054348945618,0.431708127260208,0.0743667632341385,0.898942530155182,0.179719522595406,0.199890360236168,0.963195025920868,0.670062482357025,-0.367128610610962,0.645161092281342,0.666223108768463,-0.303315341472626,0.681283056735992,0.775085091590881,-0.264017641544342,0.574053823947906,0.788963615894318,-0.297772616147995,0.537464380264282,-0.912839949131012,0.366738528013229,0.179516360163689,-0.930616736412048,0.324010014533997,0.170205876231194,-0.922440767288208,0.315537393093109,0.222573891282082,-0.951293051242828,0.220237165689468,0.215724766254425,0.494429767131805,-0.0934201404452324,0.864182770252228,0.550924062728882,0.0100475419312716,0.834494948387146,0.577744483947754,0.0458397567272186,0.814929485321045,0.401639640331268,-0.00309631112031639,0.915792524814606,-0.863483607769012,-0.064167745411396,0.500278532505035,-0.559565424919128,0.213157281279564,0.80090606212616,-0.671594560146332,-0.181319773197174,0.718389809131622,0.0272070206701756,0.178279355168343,0.983603715896606,0.0284836571663618,0.148866042494774,0.988447070121765,0.0307504720985889,0.178748592734337,0.983414113521576,0.0412900410592556,0.144470527768135,0.988647282123566,0.0412900410592556,0.144470527768135,0.988647282123566,0.0307504720985889,0.178748592734337,0.983414113521576,0.0381993055343628,0.285694986581802,0.957558989524841,0.17553049325943,0.198497295379639,0.964255094528198,0.17553049325943,0.198497295379639,0.964255094528198,0.0381993055343628,0.285694986581802,0.957558989524841,0.0348379723727703,0.239972576498985,0.970154345035553,0.00455546798184514,0.298394352197647,0.954431772232056,-0.00221070507541299,0.348074615001678,0.937464237213135,0.17553049325943,0.198497295379639,0.964255094528198,0.00455546798184514,0.298394352197647,0.954431772232056,0.416927576065063,0.413195610046387,0.809592962265015,0.620209395885468,0.316063761711121,0.717944324016571,0.497093498706818,0.456073582172394,0.738169968128204,-0.773259878158569,-0.498874604701996,-0.39139911532402, -0.203441798686981,-0.920203626155853,-0.334419906139374,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.778645157814026,-0.596678197383881,-0.194131031632423,0.140199616551399,0.988947510719299,0.0482386760413647,0.0780868381261826,0.989874243736267,-0.118538655340672,-0.623760402202606,0.624061942100525,-0.470605611801147,-0.467009961605072,0.872948586940765,-0.140934243798256,0.0402784161269665,0.935566067695618,0.350847274065018,0.140199616551399,0.988947510719299,0.0482386760413647,-0.467009961605072,0.872948586940765,-0.140934243798256,-0.634040713310242,0.756764888763428,0.159057512879372,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.812742531299591,0.259539633989334,-0.521621286869049,-0.623760402202606,0.624061942100525,-0.470605611801147,0.0780868381261826,0.989874243736267,-0.118538655340672,-0.0320936106145382,0.92166805267334,-0.386649638414383,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.778645157814026,-0.596678197383881,-0.194131031632423,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.616132795810699,-0.418477803468704,-0.667275547981262,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.690762042999268,-0.452603310346603,-0.563913226127625,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.773259878158569,-0.498874604701996,-0.39139911532402,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.507226884365082,-0.292785495519638,-0.810553848743439,-0.139869406819344,-0.803301215171814,-0.578915953636169, -0.149305984377861,-0.898303508758545,-0.413229376077652,-0.616132795810699,-0.418477803468704,-0.667275547981262,0.387454837560654,-0.142215475440025,-0.910853147506714,0.329197883605957,-0.229186490178108,-0.916025280952454,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.323159694671631,-0.226072624325752,-0.918944478034973,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.434588700532913,-0.223728343844414,-0.872398018836975,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.67014467716217,-0.656066417694092,0.347106426954269,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.243391394615173,0.450631767511368,0.858889758586884,-0.83115953207016,0.347447574138641,0.434112966060638,-0.83115953207016,0.347447574138641,0.434112966060638,-0.243391394615173,0.450631767511368,0.858889758586884,0.0402784161269665,0.935566067695618,0.350847274065018,-0.634040713310242,0.756764888763428,0.159057512879372,-0.856640636920929,-0.0924222394824028,0.507567644119263,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.876164734363556,0.0590006411075592,0.478387147188187,-0.0625194534659386,-0.652953445911407,-0.754813313484192,0.046584777534008,-0.616905212402344,-0.785657584667206,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.070786252617836,-0.7830451130867,-0.617923676967621,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0729037374258041,-0.816932082176209,-0.572107493877411, -0.00492077972739935,-0.813752949237823,-0.58119010925293,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0045230402611196,-0.909497022628784,-0.415685802698135,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0762164741754532,-0.884903132915497,-0.459497004747391,0.016590029001236,-0.906809270381927,-0.421214610338211,0.0482706017792225,-0.93963760137558,-0.338749468326569,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0781072080135345,-0.934095561504364,-0.348374396562576,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.0264394171535969,-0.995756030082703,-0.0881528109312058,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.0696752369403839,-0.881582498550415,0.46685928106308,-0.0141258565708995,-0.388077318668365,0.921518564224243,-0.0632308647036552,-0.910096168518066,0.409544676542282,0.0696752369403839,-0.881582498550415,0.46685928106308,0.26997372508049,-0.290317326784134,0.91805773973465,0.0160026121884584,-0.0152897713705897,0.999755024909973,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.26997372508049,-0.290317326784134,0.91805773973465,0.385292500257492,-0.029097318649292,0.922335624694824,0.0535399168729782,0.501161873340607,0.863695681095123,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.385292500257492,-0.029097318649292,0.922335624694824,0.338861733675003,0.40567883849144,0.848880112171173,0.0919129848480225,0.966963589191437,0.237767487764359,0.0535399168729782,0.501161873340607,0.863695681095123,0.338861733675003,0.40567883849144,0.848880112171173,0.157188326120377,0.944919049739838,0.287088453769684,0.157188326120377,0.944919049739838,0.287088453769684,0.098090648651123,0.992740631103516,0.0696010887622833,0.0886319801211357,0.994267225265503,0.0598079860210419, 0.0919129848480225,0.966963589191437,0.237767487764359,0.098090648651123,0.992740631103516,0.0696010887622833,0.125102162361145,0.989620208740234,-0.0707194358110428,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.0886319801211357,0.994267225265503,0.0598079860210419,0.00503939157351851,0.912464261054993,-0.409125357866287,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.125102162361145,0.989620208740234,-0.0707194358110428,0.188163548707962,0.840512216091156,-0.5080686211586,0.017586937174201,0.584774792194366,-0.811005055904388,0.00503939157351851,0.912464261054993,-0.409125357866287,0.188163548707962,0.840512216091156,-0.5080686211586,0.243700608611107,0.544483065605164,-0.802588403224945,0.163174018263817,0.444838464260101,-0.880620777606964,0.189078122377396,0.441867411136627,-0.87692791223526,0.0718594193458557,0.455831170082092,-0.88716071844101,0.057487852871418,0.456679046154022,-0.88777220249176,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.162789091467857,-0.282180637121201,-0.945448994636536,0.00530779222026467,-0.225043326616287,-0.974334299564362,0.0193276759237051,-0.199849098920822,-0.979636013507843,0.046584777534008,-0.616905212402344,-0.785657584667206,0.329197883605957,-0.229186490178108,-0.916025280952454,0.364371746778488,-0.284274369478226,-0.886803984642029,0.0190247669816017,-0.745713531970978,-0.665995001792908,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.0190247669816017,-0.745713531970978,-0.665995001792908,0.364371746778488,-0.284274369478226,-0.886803984642029,0.428298622369766,-0.365026712417603,-0.826629161834717,-0.0045230402611196,-0.909497022628784,-0.415685802698135,-0.00492077972739935,-0.813752949237823,-0.58119010925293,0.428298622369766,-0.365026712417603,-0.826629161834717,0.521451473236084,-0.506328523159027,-0.686818599700928,0.016590029001236,-0.906809270381927,-0.421214610338211,-0.0045230402611196,-0.909497022628784,-0.415685802698135, 0.521451473236084,-0.506328523159027,-0.686818599700928,0.593445479869843,-0.55176454782486,-0.585984945297241,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.016590029001236,-0.906809270381927,-0.421214610338211,0.593445479869843,-0.55176454782486,-0.585984945297241,0.673712253570557,-0.610602140426636,-0.416265428066254,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.0482706017792225,-0.93963760137558,-0.338749468326569,0.673712253570557,-0.610602140426636,-0.416265428066254,0.670762062072754,-0.708589673042297,-0.219041094183922,0.0696752369403839,-0.881582498550415,0.46685928106308,0.0264394171535969,-0.995756030082703,-0.0881528109312058,0.670762062072754,-0.708589673042297,-0.219041094183922,0.572986006736755,-0.752050638198853,0.325740456581116,0.26997372508049,-0.290317326784134,0.91805773973465,0.0696752369403839,-0.881582498550415,0.46685928106308,0.572986006736755,-0.752050638198853,0.325740456581116,0.849142253398895,-0.224129945039749,0.478250175714493,0.385292500257492,-0.029097318649292,0.922335624694824,0.26997372508049,-0.290317326784134,0.91805773973465,0.849142253398895,-0.224129945039749,0.478250175714493,0.890664577484131,-0.0774205401539803,0.448020815849304,0.338861733675003,0.40567883849144,0.848880112171173,0.385292500257492,-0.029097318649292,0.922335624694824,0.890664577484131,-0.0774205401539803,0.448020815849304,0.888973355293274,0.214637205004692,0.404545694589615,0.157188326120377,0.944919049739838,0.287088453769684,0.338861733675003,0.40567883849144,0.848880112171173,0.888973355293274,0.214637205004692,0.404545694589615,0.76104062795639,0.645680010318756,0.0625654682517052,0.76104062795639,0.645680010318756,0.0625654682517052,0.771759808063507,0.606137216091156,-0.19231353700161,0.098090648651123,0.992740631103516,0.0696010887622833,0.157188326120377,0.944919049739838,0.287088453769684,0.771759808063507,0.606137216091156,-0.19231353700161,0.769487977027893,0.440927565097809,-0.462029308080673,0.125102162361145,0.989620208740234,-0.0707194358110428,0.098090648651123,0.992740631103516,0.0696010887622833, 0.243700608611107,0.544483065605164,-0.802588403224945,0.188163548707962,0.840512216091156,-0.5080686211586,0.778522193431854,0.369191855192184,-0.507543742656708,0.735658526420593,0.230637982487679,-0.636877298355103,0.0849056839942932,-0.303190618753433,-0.949139893054962,0.046584777534008,-0.616905212402344,-0.785657584667206,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.0362379811704159,-0.262005388736725,-0.964385807514191,-0.0825362652540207,-0.192694559693336,-0.977781474590302,-0.0723719522356987,-0.219757899641991,-0.972866296768188,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.0625194534659386,-0.652953445911407,-0.754813313484192,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.156271457672119,-0.733824193477631,-0.661121249198914,-0.070786252617836,-0.7830451130867,-0.617923676967621,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.139869406819344,-0.803301215171814,-0.578915953636169,-0.0729037374258041,-0.816932082176209,-0.572107493877411,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.149305984377861,-0.898303508758545,-0.413229376077652,-0.0765528976917267,-0.892704427242279,-0.444092899560928,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.169935211539268,-0.892408609390259,-0.418005883693695,-0.0762164741754532,-0.884903132915497,-0.459497004747391,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.181932657957077,-0.979667663574219,-0.0845683068037033,-0.203441798686981,-0.920203626155853,-0.334419906139374,-0.0781072080135345,-0.934095561504364,-0.348374396562576,-0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.181932657957077,-0.979667663574219,-0.0845683068037033, -0.0777258798480034,-0.995770275592804,-0.0489919558167458,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.188150137662888,-0.861675441265106,0.471290737390518,-0.0632308647036552,-0.910096168518066,0.409544676542282,-0.0141258565708995,-0.388077318668365,0.921518564224243,-0.353458434343338,0.0279432106763124,0.935032784938812,-0.279808014631271,-0.247867569327354,0.927506923675537,-0.0141258565708995,-0.388077318668365,0.921518564224243,0.0160026121884584,-0.0152897713705897,0.999755024909973,-0.243391394615173,0.450631767511368,0.858889758586884,-0.353458434343338,0.0279432106763124,0.935032784938812,0.0160026121884584,-0.0152897713705897,0.999755024909973,0.0535399168729782,0.501161873340607,0.863695681095123,0.0402784161269665,0.935566067695618,0.350847274065018,-0.243391394615173,0.450631767511368,0.858889758586884,0.0535399168729782,0.501161873340607,0.863695681095123,0.0919129848480225,0.966963589191437,0.237767487764359,0.0919129848480225,0.966963589191437,0.237767487764359,0.0886319801211357,0.994267225265503,0.0598079860210419,0.140199616551399,0.988947510719299,0.0482386760413647,0.0402784161269665,0.935566067695618,0.350847274065018,0.0886319801211357,0.994267225265503,0.0598079860210419,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.0780868381261826,0.989874243736267,-0.118538655340672,0.140199616551399,0.988947510719299,0.0482386760413647,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.0780868381261826,0.989874243736267,-0.118538655340672,0.0366231761872768,0.998422920703888,-0.0425488464534283,0.00503939157351851,0.912464261054993,-0.409125357866287,-0.164236485958099,0.647006809711456,-0.744586169719696,-0.0320936106145382,0.92166805267334,-0.386649638414383,0.00503939157351851,0.912464261054993,-0.409125357866287,0.017586937174201,0.584774792194366,-0.811005055904388,-0.0419603176414967,0.516997694969177,-0.854957699775696,-0.0663426592946053,0.518996477127075,-0.85219794511795,-0.175480470061302,0.520782589912415,-0.835459232330322, -0.147772952914238,0.520121157169342,-0.84121173620224,-0.162789091467857,-0.282180637121201,-0.945448994636536,-0.16799932718277,-0.600783705711365,-0.781559407711029,-0.392845422029495,-0.17293743789196,-0.903197169303894,-0.43607622385025,-0.0767353698611259,-0.896632134914398,-0.385834068059921,-0.169429570436478,-0.906876862049103,0.243047595024109,-0.82210099697113,0.514857113361359,0.279289931058884,0.161584615707397,0.94651335477829,0.336174368858337,0.935995519161224,0.104399025440216,0.759971797466278,-0.612702488899231,0.216883733868599,-0.914143800735474,0.108810022473335,-0.390514433383942,-0.891642391681671,0.0772087872028351,-0.446108311414719,-0.631305754184723,0.608145177364349,-0.481261342763901,-0.812742531299591,0.259539633989334,-0.521621286869049,0.317967116832733,0.377013236284256,-0.869918346405029,0.735658526420593,0.230637982487679,-0.636877298355103,0.74884694814682,0.0258232615888119,-0.662239730358124,0.769487977027893,0.440927565097809,-0.462029308080673,0.778522193431854,0.369191855192184,-0.507543742656708,0.188163548707962,0.840512216091156,-0.5080686211586,0.125102162361145,0.989620208740234,-0.0707194358110428,0.120905123651028,0.330013185739517,-0.936201512813568,0.130089670419693,0.341309607028961,-0.930905163288116,0.317967116832733,0.377013236284256,-0.869918346405029,0.00479412823915482,0.900386512279511,0.435064554214478,0.143662974238396,0.945594608783722,0.29191067814827,0.288045525550842,0.936091125011444,0.201898843050003,0.167652994394302,0.863424003124237,0.475806176662445,0.234877377748489,0.967058181762695,0.0981385260820389,0.138274729251862,0.981688380241394,-0.131026938557625,0.199432492256165,0.944634437561035,-0.260561794042587,0.310655295848846,0.949596464633942,-0.0419514440000057,-0.194994285702705,0.859172344207764,0.473075121641159,0.00479412823915482,0.900386512279511,0.435064554214478,0.167652994394302,0.863424003124237,0.475806176662445,-0.143396884202957,0.656446933746338,0.74061781167984,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.258119583129883,0.745032370090485,0.615061819553375, -0.143396884202957,0.656446933746338,0.74061781167984,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.427035480737686,0.790110290050507,-0.439734488725662,-0.413909703493118,0.867565214633942,-0.27569791674614,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.457484602928162,0.835335671901703,-0.304831385612488,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.298668056726456,0.872490286827087,-0.386727452278137,0.360629975795746,-0.702259659767151,0.613821983337402,-0.0101526426151395,0.0385068021714687,0.999206781387329,-0.0197913087904453,0.212507590651512,0.976958990097046,0.130621984601021,-0.367120236158371,0.920956373214722,0.216771319508553,0.955569624900818,0.199742004275322,0.234877377748489,0.967058181762695,0.0981385260820389,0.310655295848846,0.949596464633942,-0.0419514440000057,0.314175516366959,0.947196781635284,0.0641251429915428,0.143662974238396,0.945594608783722,0.29191067814827,0.216771319508553,0.955569624900818,0.199742004275322,0.314175516366959,0.947196781635284,0.0641251429915428,0.288045525550842,0.936091125011444,0.201898843050003,-0.427035480737686,0.790110290050507,-0.439734488725662,0.123842000961304,0.97543865442276,-0.182160839438438,0.0281898751854897,0.814052581787109,0.580106735229492,-0.413909703493118,0.867565214633942,-0.27569791674614,0.463392287492752,0.731873750686646,0.499628275632858,0.247720703482628,0.139039516448975,0.95880264043808,0.503155887126923,-0.0240856502205133,0.863860011100769,0.413316607475281,0.417648822069168,0.809159338474274,0.123842000961304,0.97543865442276,-0.182160839438438,0.463392287492752,0.731873750686646,0.499628275632858,0.413316607475281,0.417648822069168,0.809159338474274,0.0281898751854897,0.814052581787109,0.580106735229492,0.503155887126923,-0.0240856502205133,0.863860011100769,0.247720703482628,0.139039516448975,0.95880264043808,0.101962603628635,-0.729668021202087,0.676156997680664,0.345502704381943,-0.548628091812134,0.761337697505951, 0.220668077468872,-0.699356377124786,0.679857552051544,0.154463171958923,-0.632704854011536,0.758831799030304,0.176707834005356,-0.49970081448555,0.847981989383698,0.259503424167633,-0.571858525276184,0.778226017951965,0.101962603628635,-0.729668021202087,0.676156997680664,0.220668077468872,-0.699356377124786,0.679857552051544,0.259503424167633,-0.571858525276184,0.778226017951965,0.345502704381943,-0.548628091812134,0.761337697505951,0.0443188734352589,-0.657264351844788,0.752355933189392,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.142644554376602,-0.667072474956512,0.7312091588974,0.0566699393093586,-0.541294038295746,0.83892148733139,0.154463171958923,-0.632704854011536,0.758831799030304,0.0443188734352589,-0.657264351844788,0.752355933189392,0.0566699393093586,-0.541294038295746,0.83892148733139,0.176707834005356,-0.49970081448555,0.847981989383698,-0.15265741944313,-0.753475069999695,0.639508426189423,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.100898645818233,-0.993996679782867,-0.0423085056245327,-0.137277618050575,-0.987909972667694,0.0720329731702805,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.298746109008789,-0.881751596927643,0.365054726600647,-0.261559337377548,-0.96132493019104,0.086262010037899,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.100898645818233,-0.993996679782867,-0.0423085056245327,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.10157036036253,-0.993610143661499,0.0492179282009602,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.139529138803482,-0.986220002174377,-0.0888914614915848,0.390757709741592,-0.919032633304596,-0.0518401972949505,0.318193823099136,-0.936122417449951,0.149758413434029,0.10157036036253,-0.993610143661499,0.0492179282009602,0.390757709741592,-0.919032633304596,-0.0518401972949505, 0.494486898183823,-0.83785080909729,0.231276199221611,0.336078584194183,-0.770137906074524,0.542161226272583,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583,0.494486898183823,-0.83785080909729,0.231276199221611,0.360629975795746,-0.702259659767151,0.613821983337402,0.130621984601021,-0.367120236158371,0.920956373214722,0.138274729251862,0.981688380241394,-0.131026938557625,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.0502913668751717,0.914079129695892,-0.402405440807343,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.0952406078577042,0.956162750720978,-0.276915192604065,-0.357527554035187,0.888932764530182,-0.286308616399765,-0.298668056726456,0.872490286827087,-0.386727452278137,0.167652994394302,0.863424003124237,0.475806176662445,0.288045525550842,0.936091125011444,0.201898843050003,0.353775978088379,0.927305817604065,0.122255511581898,0.256664752960205,0.744389593601227,0.616447329521179,0.310655295848846,0.949596464633942,-0.0419514440000057,0.199432492256165,0.944634437561035,-0.260561794042587,0.249470040202141,0.963651180267334,0.0956092849373817,0.31928414106369,0.943383932113647,0.0899131372570992,-0.143396884202957,0.656446933746338,0.74061781167984,0.167652994394302,0.863424003124237,0.475806176662445,0.256664752960205,0.744389593601227,0.616447329521179,0.268563270568848,0.657460391521454,0.704002559185028,-0.0197913087904453,0.212507590651512,0.976958990097046,-0.143396884202957,0.656446933746338,0.74061781167984,0.268563270568848,0.657460391521454,0.704002559185028,0.17468436062336,0.368205070495605,0.913186967372894,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.413909703493118,0.867565214633942,-0.27569791674614,0.225631609559059,0.960186958312988,0.164716094732285,0.130621984601021,-0.367120236158371,0.920956373214722,-0.0197913087904453,0.212507590651512,0.976958990097046,0.17468436062336,0.368205070495605,0.913186967372894,0.0710558071732521,-0.106974616646767,0.991719484329224, 0.314175516366959,0.947196781635284,0.0641251429915428,0.310655295848846,0.949596464633942,-0.0419514440000057,0.31928414106369,0.943383932113647,0.0899131372570992,0.353775978088379,0.927305817604065,0.122255511581898,0.288045525550842,0.936091125011444,0.201898843050003,0.314175516366959,0.947196781635284,0.0641251429915428,0.353775978088379,0.927305817604065,0.122255511581898,-0.413909703493118,0.867565214633942,-0.27569791674614,0.0281898751854897,0.814052581787109,0.580106735229492,0.218661069869995,0.707967698574066,0.671542286872864,0.225631609559059,0.960186958312988,0.164716094732285,0.413316607475281,0.417648822069168,0.809159338474274,0.503155887126923,-0.0240856502205133,0.863860011100769,0.0616627000272274,0.104778632521629,0.992582082748413,0.0281898751854897,0.814052581787109,0.580106735229492,0.413316607475281,0.417648822069168,0.809159338474274,0.0616627000272274,0.104778632521629,0.992582082748413,0.218661069869995,0.707967698574066,0.671542286872864,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0616627000272274,0.104778632521629,0.992582082748413,0.503155887126923,-0.0240856502205133,0.863860011100769,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965,0.176707834005356,-0.49970081448555,0.847981989383698,-0.284435749053955,-0.519317030906677,0.805857360363007,-0.218292459845543,-0.596042931079865,0.77271032333374,0.345502704381943,-0.548628091812134,0.761337697505951,0.259503424167633,-0.571858525276184,0.778226017951965,-0.218292459845543,-0.596042931079865,0.77271032333374,-0.133871212601662,-0.598869144916534,0.789578497409821,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.142644554376602,-0.667072474956512,0.7312091588974,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.347446411848068,-0.559259712696075,0.75266832113266,0.176707834005356,-0.49970081448555,0.847981989383698,0.0566699393093586,-0.541294038295746,0.83892148733139,-0.347446411848068,-0.559259712696075,0.75266832113266,-0.284435749053955,-0.519317030906677,0.805857360363007, -0.142644554376602,-0.667072474956512,0.7312091588974,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.389427453279495,-0.677065253257751,0.624442875385284,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.137277618050575,-0.987909972667694,0.0720329731702805,-0.159446969628334,-0.872670114040375,0.461544692516327,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.303393453359604,-0.824807524681091,0.477121531963348,-0.289635807275772,-0.935811340808868,0.200918629765511,-0.251093715429306,-0.850699782371521,0.461802780628204,-0.346875548362732,-0.780973374843597,0.519382238388062,-0.137277618050575,-0.987909972667694,0.0720329731702805,0.10157036036253,-0.993610143661499,0.0492179282009602,-0.0293050315231085,-0.867081463336945,0.497303605079651,-0.159446969628334,-0.872670114040375,0.461544692516327,0.10157036036253,-0.993610143661499,0.0492179282009602,0.318193823099136,-0.936122417449951,0.149758413434029,0.0979375094175339,-0.812688946723938,0.574408352375031,-0.0293050315231085,-0.867081463336945,0.497303605079651,0.318193823099136,-0.936122417449951,0.149758413434029,0.336078584194183,-0.770137906074524,0.542161226272583,0.195375472307205,-0.65039587020874,0.73403924703598,0.0979375094175339,-0.812688946723938,0.574408352375031,0.0710558071732521,-0.106974616646767,0.991719484329224,0.195375472307205,-0.65039587020874,0.73403924703598,0.336078584194183,-0.770137906074524,0.542161226272583,0.130621984601021,-0.367120236158371,0.920956373214722,0.199432492256165,0.944634437561035,-0.260561794042587,-0.0502913668751717,0.914079129695892,-0.402405440807343,0.141909137368202,0.983762621879578,0.109876543283463,0.249470040202141,0.963651180267334,0.0956092849373817,0.127965569496155,0.980436325073242,0.149564117193222,0.141909137368202,0.983762621879578,0.109876543283463,-0.0502913668751717,0.914079129695892,-0.402405440807343,-0.298668056726456,0.872490286827087,-0.386727452278137,0.268563270568848,0.657460391521454,0.704002559185028, 0.256664752960205,0.744389593601227,0.616447329521179,0.0710558071732521,-0.106974616646767,0.991719484329224,0.17468436062336,0.368205070495605,0.913186967372894,0.225631609559059,0.960186958312988,0.164716094732285,0.127965569496155,0.980436325073242,0.149564117193222,-0.298668056726456,0.872490286827087,-0.386727452278137,-0.390900999307632,0.84614360332489,-0.362267166376114,-0.140541449189186,0.973841786384583,0.178550481796265,0.00727432640269399,0.986923277378082,0.161026418209076,-0.106629706919193,0.951739728450775,0.287787467241287,-0.261545598506927,0.922910153865814,0.282543420791626,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.106629706919193,0.951739728450775,0.287787467241287,-0.852710962295532,0.37292954325676,0.365797132253647,-0.632225632667542,0.537100076675415,0.558403313159943,-0.261545598506927,0.922910153865814,0.282543420791626,0.41320937871933,0.88689249753952,-0.206590741872787,0.438933074474335,0.880430459976196,-0.179387643933296,0.225808262825012,0.957561135292053,-0.179129242897034,0.220753118395805,0.94330245256424,-0.247888132929802,0.477838784456253,0.792661190032959,-0.378626853227615,0.510045230388641,0.828637421131134,-0.230681270360947,0.379621177911758,0.902513563632965,-0.203364074230194,0.377052932977676,0.915556311607361,-0.139956220984459,0.510045230388641,0.828637421131134,-0.230681270360947,0.438933074474335,0.880430459976196,-0.179387643933296,0.41320937871933,0.88689249753952,-0.206590741872787,0.379621177911758,0.902513563632965,-0.203364074230194,-0.852710962295532,0.37292954325676,0.365797132253647,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.632225632667542,0.537100076675415,0.558403313159943,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.887657046318054,-0.456045299768448,0.063934437930584,-0.762853384017944,-0.64490020275116,-0.0464594550430775, -0.609397828578949,-0.718622922897339,0.334985673427582,-0.131636127829552,0.990942358970642,0.0265548899769783,-0.201113522052765,0.971361815929413,0.126529023051262,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.201113522052765,0.971361815929413,0.126529023051262,-0.183847695589066,0.966428518295288,0.179488003253937,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.294077008962631,0.955018162727356,0.0381973087787628,0.466618627309799,0.783142864704132,-0.41104057431221,0.477838784456253,0.792661190032959,-0.378626853227615,0.377052932977676,0.915556311607361,-0.139956220984459,0.536845266819,0.771515130996704,0.341411113739014,0.772461295127869,-0.0374295972287655,0.633957862854004,0.727005004882813,0.68491542339325,0.0485247001051903,0.483564585447311,0.417995601892471,0.769054591655731,0.456143170595169,-0.412308812141418,0.788628458976746,0.727005004882813,0.68491542339325,0.0485247001051903,0.466618627309799,0.783142864704132,-0.41104057431221,0.536845266819,0.771515130996704,0.341411113739014,0.483564585447311,0.417995601892471,0.769054591655731,0.520344138145447,-0.759189605712891,0.390989869832993,0.493583381175995,-0.804481565952301,0.330431401729584,0.347713977098465,-0.788004815578461,0.508078157901764,0.519531428813934,-0.689787209033966,0.504262566566467,0.506179451942444,-0.83683580160141,0.208538070321083,0.593186497688293,-0.723713397979736,0.352659493684769,0.59520959854126,-0.673711001873016,0.437994301319122,0.501122713088989,-0.80717408657074,0.312003254890442,0.593186497688293,-0.723713397979736,0.352659493684769,0.520344138145447,-0.759189605712891,0.390989869832993,0.519531428813934,-0.689787209033966,0.504262566566467,0.59520959854126,-0.673711001873016,0.437994301319122,0.331354945898056,-0.940484642982483,0.0754489675164223,0.506179451942444,-0.83683580160141,0.208538070321083,0.501122713088989,-0.80717408657074,0.312003254890442,0.32907634973526,-0.925415575504303,0.187922358512878,-0.0488644652068615,-0.996573328971863,-0.0667372941970825, 0.13556943833828,-0.990667700767517,-0.0140880616381764,0.15561980009079,-0.982760071754456,0.0998257622122765,0.000309223076328635,-0.998522400856018,0.054340984672308,0.13556943833828,-0.990667700767517,-0.0140880616381764,0.331354945898056,-0.940484642982483,0.0754489675164223,0.32907634973526,-0.925415575504303,0.187922358512878,0.15561980009079,-0.982760071754456,0.0998257622122765,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.0488644652068615,-0.996573328971863,-0.0667372941970825,0.000309223076328635,-0.998522400856018,0.054340984672308,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.294042885303497,-0.950065493583679,-0.104471661150455,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.443623483181,-0.884970426559448,0.141511723399162,-0.762853384017944,-0.64490020275116,-0.0464594550430775,-0.558743357658386,-0.822392702102661,-0.10712693631649,-0.443623483181,-0.884970426559448,0.141511723399162,-0.609397828578949,-0.718622922897339,0.334985673427582,0.225808262825012,0.957561135292053,-0.179129242897034,-0.004028111230582,0.993554711341858,-0.113281942903996,-0.096912607550621,0.976125478744507,-0.194388866424561,0.220753118395805,0.94330245256424,-0.247888132929802,-0.21051436662674,0.861303210258484,0.462428838014603,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.140541449189186,0.973841786384583,0.178550481796265,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.233783647418022,0.9701207280159,-0.0648916512727737,-0.199626341462135,0.962749063968658,0.182382985949516,-0.136555016040802,0.971848607063293,0.191997408866882,-0.261545598506927,0.922910153865814,0.282543420791626,-0.632225632667542,0.537100076675415,0.558403313159943,-0.21051436662674,0.861303210258484,0.462428838014603,0.0513934716582298,0.959308326244354,0.277644217014313,0.41320937871933,0.88689249753952,-0.206590741872787,0.220753118395805,0.94330245256424,-0.247888132929802,0.0820492878556252,0.971076488494873,0.224228322505951, 0.377052932977676,0.915556311607361,-0.139956220984459,0.379621177911758,0.902513563632965,-0.203364074230194,-0.207352936267853,0.936322927474976,0.283379822969437,-0.321906387805939,0.894509375095367,0.310208320617676,0.379621177911758,0.902513563632965,-0.203364074230194,0.41320937871933,0.88689249753952,-0.206590741872787,0.0513934716582298,0.959308326244354,0.277644217014313,-0.207352936267853,0.936322927474976,0.283379822969437,-0.632225632667542,0.537100076675415,0.558403313159943,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.0247958675026894,-0.292493909597397,0.95594584941864,-0.21051436662674,0.861303210258484,0.462428838014603,-0.0247958675026894,-0.292493909597397,0.95594584941864,-0.712755918502808,-0.37744277715683,0.591198742389679,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.0917615294456482,-0.593113124370575,0.799872934818268,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.199626341462135,0.962749063968658,0.182382985949516,-0.233783647418022,0.9701207280159,-0.0648916512727737,0.536845266819,0.771515130996704,0.341411113739014,0.377052932977676,0.915556311607361,-0.139956220984459,-0.321906387805939,0.894509375095367,0.310208320617676,-0.44193634390831,0.542223930358887,0.714622557163239,0.456143170595169,-0.412308812141418,0.788628458976746,0.483564585447311,0.417995601892471,0.769054591655731,-0.522650837898254,-0.0699307844042778,0.849673926830292,0.483564585447311,0.417995601892471,0.769054591655731,0.536845266819,0.771515130996704,0.341411113739014,-0.44193634390831,0.542223930358887,0.714622557163239,-0.522650837898254,-0.0699307844042778,0.849673926830292,0.519531428813934,-0.689787209033966,0.504262566566467,0.347713977098465,-0.788004815578461,0.508078157901764,-0.209563195705414,-0.620633363723755,0.755577564239502,0.0385516360402107,-0.591684639453888,0.805247187614441,-0.209563195705414,-0.620633363723755,0.755577564239502,0.347713977098465,-0.788004815578461,0.508078157901764,0.456143170595169,-0.412308812141418,0.788628458976746,-0.522650837898254,-0.0699307844042778,0.849673926830292, 0.501122713088989,-0.80717408657074,0.312003254890442,0.59520959854126,-0.673711001873016,0.437994301319122,0.177197024226189,-0.632450103759766,0.754061043262482,0.239427268505096,-0.754494905471802,0.611074507236481,0.59520959854126,-0.673711001873016,0.437994301319122,0.519531428813934,-0.689787209033966,0.504262566566467,0.0385516360402107,-0.591684639453888,0.805247187614441,0.177197024226189,-0.632450103759766,0.754061043262482,0.32907634973526,-0.925415575504303,0.187922358512878,0.501122713088989,-0.80717408657074,0.312003254890442,0.239427268505096,-0.754494905471802,0.611074507236481,0.182993903756142,-0.84755676984787,0.498157352209091,0.000309223076328635,-0.998522400856018,0.054340984672308,0.15561980009079,-0.982760071754456,0.0998257622122765,0.0988316684961319,-0.885145425796509,0.454697638750076,0.053495068103075,-0.879860281944275,0.472212016582489,0.15561980009079,-0.982760071754456,0.0998257622122765,0.32907634973526,-0.925415575504303,0.187922358512878,0.182993903756142,-0.84755676984787,0.498157352209091,0.0988316684961319,-0.885145425796509,0.454697638750076,-0.217681989073753,-0.974551320075989,0.0535187609493732,0.000309223076328635,-0.998522400856018,0.054340984672308,0.053495068103075,-0.879860281944275,0.472212016582489,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.443623483181,-0.884970426559448,0.141511723399162,-0.217681989073753,-0.974551320075989,0.0535187609493732,-0.0185150001198053,-0.84597235918045,0.532905161380768,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.609397828578949,-0.718622922897339,0.334985673427582,-0.443623483181,-0.884970426559448,0.141511723399162,-0.0868597701191902,-0.755090534687042,0.649841248989105,-0.0917615294456482,-0.593113124370575,0.799872934818268,0.220753118395805,0.94330245256424,-0.247888132929802,-0.096912607550621,0.976125478744507,-0.194388866424561,-0.136555016040802,0.971848607063293,0.191997408866882,0.0820492878556252,0.971076488494873,0.224228322505951,-0.251987457275391,0.951171100139618,0.178257703781128,-0.199626341462135,0.962749063968658,0.182382985949516, -0.294077008962631,0.955018162727356,0.0381973087787628,-0.251987457275391,0.951171100139618,0.178257703781128,-0.294077008962631,0.955018162727356,0.0381973087787628,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.251987457275391,0.951171100139618,0.178257703781128,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.21051436662674,0.861303210258484,0.462428838014603,-0.373619109392166,0.927157580852509,0.0280638355761766,-0.183847695589066,0.966428518295288,0.179488003253937,-0.109012864530087,0.977998495101929,0.177862659096718,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.266566455364227,0.959463894367218,0.0914947912096977,-0.109012864530087,0.977998495101929,0.177862659096718,0.00727432640269399,0.986923277378082,0.161026418209076,-0.140541449189186,0.973841786384583,0.178550481796265,-0.21051436662674,0.861303210258484,0.462428838014603,-0.140541449189186,0.973841786384583,0.178550481796265,-0.261545598506927,0.922910153865814,0.282543420791626,-0.258119583129883,0.745032370090485,0.615061819553375,-0.194994285702705,0.859172344207764,0.473075121641159,-0.143396884202957,0.656446933746338,0.74061781167984,0.690909028053284,-0.334549605846405,0.640875399112701,0.707773089408875,-0.177667543292046,0.683733463287354,0.630890548229218,-0.774750173091888,0.0417049825191498,0.563636422157288,-0.823141872882843,0.0689310654997826,-0.702881813049316,-0.068748727440834,0.707976579666138,-0.740522086620331,-0.668854534626007,0.065273717045784,-0.846795618534088,-0.531082570552826,0.0298077315092087,-0.873597860336304,-0.23740328848362,0.424813508987427,0.772461295127869,-0.0374295972287655,0.633957862854004,0.456143170595169,-0.412308812141418,0.788628458976746,0.347713977098465,-0.788004815578461,0.508078157901764,0.493583381175995,-0.804481565952301,0.330431401729584,-0.580071687698364,-0.808331191539764,-0.100586168467999,-0.563221275806427,-0.79902458190918,-0.210574418306351,-0.450285315513611,-0.862574934959412,-0.230667769908905, -0.432196706533432,-0.877966165542603,-0.205867424607277,0.733389377593994,-0.0344664603471756,0.678934574127197,0.746549785137177,0.0205342527478933,0.665012657642365,0.718032777309418,-0.160360962152481,0.677283763885498,0.746549785137177,0.0205342527478933,0.665012657642365,0.733389377593994,-0.0344664603471756,0.678934574127197,0.837971806526184,-0.0177910327911377,0.545423448085785,-0.803527772426605,-0.0332267098128796,0.59433925151825,-0.686445116996765,0.270512044429779,0.674993574619293,-0.596545398235321,0.216776832938194,0.772749245166779,-0.672767162322998,0.059370718896389,0.737468242645264,-0.755824446678162,0.0775531530380249,0.650165319442749,-0.789937257766724,-0.089169554412365,0.606669545173645,0.55375200510025,-0.828931510448456,-0.0789381936192513,0.501666784286499,-0.849441289901733,-0.163646027445793,0.499172002077103,-0.857490539550781,-0.124648600816727,0.494663387537003,-0.866621494293213,-0.0653853639960289,0.465027630329132,-0.875830411911011,-0.129113703966141,0.28289994597435,-0.924392461776733,-0.255863577127457,0.297710686922073,-0.932827949523926,-0.202978670597076,0.28289994597435,-0.924392461776733,-0.255863577127457,0.304112553596497,-0.921620965003967,-0.241102367639542,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.550425469875336,0.323076784610748,-0.769839704036713,0.371378809213638,-0.592879414558411,-0.714543044567108,0.175545483827591,-0.61814421415329,-0.766212463378906,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.274789333343506,-0.803769111633301,-0.527679860591888,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.847938656806946,-0.0612146966159344,-0.526548087596893,0.810995221138,0.0803924724459648,-0.579503059387207,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.803069472312927,-0.0576225444674492,-0.593092858791351, 0.28655207157135,0.762932240962982,-0.579501807689667,-0.264983803033829,-0.798545002937317,-0.540471494197845,0.851555109024048,0.0737949088215828,-0.519045412540436,0.294900387525558,0.804033398628235,-0.516298413276672,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.798945486545563,0.0567517168819904,-0.598719775676727,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.797584235668182,-0.0538384169340134,-0.600800156593323,0.260495960712433,0.757402241230011,-0.598735094070435,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.0163767393678427,0.894915819168091,-0.445934444665909,-0.303038567304611,0.683238506317139,-0.66434383392334,0.934951305389404,-0.173643231391907,-0.309376925230026,0.852502286434174,-0.25280287861824,-0.457526594400406,-0.023583659902215,0.889200866222382,-0.456908762454987,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.355053901672363,-0.683800160884857,-0.637459099292755,0.175545483827591,-0.61814421415329,-0.766212463378906,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.131819605827332,-0.987344026565552,-0.0881783813238144,0.175545483827591,-0.61814421415329,-0.766212463378906,0.371378809213638,-0.592879414558411,-0.714543044567108,0.503014385700226,-0.864195764064789,-0.0119248116388917,-0.294909566640854,-0.954956710338593,-0.0329544395208359,0.503014385700226,-0.864195764064789,-0.0119248116388917,0.371378809213638,-0.592879414558411,-0.714543044567108,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.810995221138,0.0803924724459648,-0.579503059387207,0.932336986064911,-0.159625917673111,-0.324449211359024,0.9972323179245,0.045465212315321,-0.0588272288441658,0.851555109024048,0.0737949088215828,-0.519045412540436,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.270147889852524,-0.960107445716858,-0.0722062140703201, -0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.798945486545563,0.0567517168819904,-0.598719775676727,0.929458439350128,-0.182677119970322,-0.320524662733078,0.60779196023941,-0.794095873832703,-0.000789706071373075,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.867282569408417,-0.217768251895905,-0.447658270597458,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.155517369508743,-0.869324624538422,-0.469136536121368,-0.081024631857872,-0.948496878147125,-0.30624932050705,0.932336986064911,-0.159625917673111,-0.324449211359024,0.874620616436005,-0.089490108191967,-0.476476937532425,0.875138163566589,-0.110415413975716,-0.471106797456741,-0.116839110851288,-0.866200923919678,-0.485844105482101,-0.0602938197553158,-0.94219297170639,-0.329601436853409,0.929458439350128,-0.182677119970322,-0.320524662733078,-0.607791721820831,0.794096052646637,0.000804367766249925,-0.303038567304611,0.683238506317139,-0.66434383392334,0.0163767393678427,0.894915819168091,-0.445934444665909,-0.606431722640991,0.795135319232941,0.000614068820141256,0.0626835599541664,0.945166885852814,-0.320515751838684,0.260495960712433,0.757402241230011,-0.598735094070435,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.838329255580902,-0.0461989641189575,-0.543203234672546,0.294900387525558,0.804033398628235,-0.516298413276672,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896,-0.324451416730881,0.28655207157135,0.762932240962982,-0.579501807689667,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.707223176956177,0.706861138343811,-0.0135142952203751,-0.921080887317657,0.378857254981995,-0.089873306453228, -0.707223176956177,0.706861138343811,-0.0135142952203751,-0.478178977966309,0.510015189647675,-0.715003073215485,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.947175621986389,-0.247870579361916,-0.203515365719795,-0.921080887317657,0.378857254981995,-0.089873306453228,-0.550425469875336,0.323076784610748,-0.769839704036713,-0.752854526042938,-0.165658488869667,-0.636998772621155,0.118536964058876,0.87408572435379,-0.471087127923965,0.0626835599541664,0.945166885852814,-0.320515751838684,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.867111802101135,0.110181644558907,-0.485774785280228,0.138788193464279,0.868160247802734,-0.476482480764389,0.085883192718029,0.94199538230896,-0.324451416730881,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.947175621986389,-0.247870579361916,-0.203515365719795,-0.752854526042938,-0.165658488869667,-0.636998772621155,-0.355053901672363,-0.683800160884857,-0.637459099292755,-0.492102652788162,-0.846493780612946,-0.203182756900787,-0.260734766721725,-0.760901808738709,-0.594176650047302,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.803069472312927,-0.0576225444674492,-0.593092858791351,-0.847938656806946,-0.0612146966159344,-0.526548087596893,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.274789333343506,-0.803769111633301,-0.527679860591888,-0.260734766721725,-0.760901808738709,-0.594176650047302,0.932336986064911,-0.159625917673111,-0.324449211359024,0.810995221138,0.0803924724459648,-0.579503059387207,0.851555109024048,0.0737949088215828,-0.519045412540436,0.9972323179245,0.045465212315321,-0.0588272288441658,0.085883192718029,0.94199538230896,-0.324451416730881,0.305213630199432,0.950488805770874,-0.0584435798227787, 0.294900387525558,0.804033398628235,-0.516298413276672,0.28655207157135,0.762932240962982,-0.579501807689667,0.28655207157135,0.762932240962982,-0.579501807689667,0.294900387525558,0.804033398628235,-0.516298413276672,0.851555109024048,0.0737949088215828,-0.519045412540436,0.810995221138,0.0803924724459648,-0.579503059387207,-0.25739848613739,-0.756804287433624,-0.600827217102051,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.838329255580902,-0.0461989641189575,-0.543203234672546,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.797584235668182,-0.0538384169340134,-0.600800156593323,-0.838329255580902,-0.0461989641189575,-0.543203234672546,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.264983803033829,-0.798545002937317,-0.540471494197845,-0.25739848613739,-0.756804287433624,-0.600827217102051,0.929458439350128,-0.182677119970322,-0.320524662733078,0.798945486545563,0.0567517168819904,-0.598719775676727,0.867282569408417,-0.217768251895905,-0.447658270597458,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.0626835599541664,0.945166885852814,-0.320515751838684,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0163767393678427,0.894915819168091,-0.445934444665909,0.260495960712433,0.757402241230011,-0.598735094070435,0.260495960712433,0.757402241230011,-0.598735094070435,0.0163767393678427,0.894915819168091,-0.445934444665909,0.867282569408417,-0.217768251895905,-0.447658270597458,0.798945486545563,0.0567517168819904,-0.598719775676727,0.852502286434174,-0.25280287861824,-0.457526594400406,0.579808115959167,-0.470308184623718,-0.665306448936462,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.303038567304611,0.683238506317139,-0.66434383392334,-0.607791721820831,0.794096052646637,0.000804367766249925, -0.608507454395294,0.793548166751862,0.000247186981141567,0.852502286434174,-0.25280287861824,-0.457526594400406,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.60779196023941,-0.794095873832703,-0.000789706071373075,0.579808115959167,-0.470308184623718,-0.665306448936462,0.867282569408417,-0.217768251895905,-0.447658270597458,0.606442928314209,-0.795126736164093,-0.000603582069743425,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.852502286434174,-0.25280287861824,-0.457526594400406,0.934951305389404,-0.173643231391907,-0.309376925230026,0.608506679534912,-0.793548703193665,-0.000247475487412885,0.0738223046064377,0.948160707950592,-0.309097975492477,-0.023583659902215,0.889200866222382,-0.456908762454987,-0.608507454395294,0.793548166751862,0.000247186981141567,0.0163767393678427,0.894915819168091,-0.445934444665909,0.271794468164444,0.960521817207336,-0.0593764595687389,-0.606431722640991,0.795135319232941,0.000614068820141256,-0.998532772064209,-0.0460729710757732,-0.0284526403993368,-0.881957292556763,0.0677927955985069,-0.466428458690643,-0.939117789268494,0.162155643105507,-0.302924692630768,-0.294909566640854,-0.954956710338593,-0.0329544395208359,-0.081024631857872,-0.948496878147125,-0.30624932050705,-0.155517369508743,-0.869324624538422,-0.469136536121368,0.9972323179245,0.045465212315321,-0.0588272288441658,0.874620616436005,-0.089490108191967,-0.476476937532425,0.932336986064911,-0.159625917673111,-0.324449211359024,0.305213630199432,0.950488805770874,-0.0584435798227787,0.085883192718029,0.94199538230896,-0.324451416730881,0.138788193464279,0.868160247802734,-0.476482480764389,-0.997315406799316,-0.0089312419295311,-0.0726793855428696,-0.867111802101135,0.110181644558907,-0.485774785280228,-0.925963163375854,0.184349000453949,-0.329556822776794,-0.270147889852524,-0.960107445716858,-0.0722062140703201,-0.0602938197553158,-0.94219297170639,-0.329601436853409,-0.116839110851288,-0.866200923919678,-0.485844105482101,0.99813711643219,0.0131128579378128,-0.0595852471888065,0.875138163566589,-0.110415413975716,-0.471106797456741, 0.929458439350128,-0.182677119970322,-0.320524662733078,0.271794468164444,0.960521817207336,-0.0593764595687389,0.0626835599541664,0.945166885852814,-0.320515751838684,0.118536964058876,0.87408572435379,-0.471087127923965,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.898221433162689,0.418351918458939,0.134833067655563,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.898221433162689,0.418351918458939,0.134833067655563,-0.654416978359222,0.561667382717133,0.506229400634766,-0.521776258945465,0.845166325569153,0.115945540368557,-0.521776258945465,0.845166325569153,0.115945540368557,-0.654416978359222,0.561667382717133,0.506229400634766,-0.214515462517738,0.588520050048828,0.779504477977753,-0.117615908384323,0.926379323005676,0.357753843069077,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.926552474498749,0.207176357507706,0.313972115516663,-0.910864353179932,0.099295899271965,0.400582611560822,-0.910864353179932,0.099295899271965,0.400582611560822,-0.926552474498749,0.207176357507706,0.313972115516663,-0.666352272033691,0.406804174184799,0.624888002872467,-0.658345222473145,0.235575124621391,0.714902698993683,-0.658345222473145,0.235575124621391,0.714902698993683,-0.666352272033691,0.406804174184799,0.624888002872467,-0.245068669319153,0.507136404514313,0.826289296150208,-0.250782161951065,0.269851088523865,0.929671287536621,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.962221920490265,0.251950860023499,-0.103197500109673, -0.912259876728058,0.390434086322784,0.123867250978947,-0.926552474498749,0.207176357507706,0.313972115516663,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.912259876728058,0.390434086322784,0.123867250978947,-0.660027086734772,0.561297416687012,0.499309033155441,-0.666352272033691,0.406804174184799,0.624888002872467,-0.926552474498749,0.207176357507706,0.313972115516663,-0.660027086734772,0.561297416687012,0.499309033155441,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245068669319153,0.507136404514313,0.826289296150208,-0.666352272033691,0.406804174184799,0.624888002872467,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.98439222574234,0.0485405139625072,0.16916187107563,-0.952755749225616,-0.0757631734013557,0.294136703014374,0.935190200805664,0.351279437541962,-0.044966459274292,0.898469209671021,-0.0272972695529461,0.438187032938004,0.912912726402283,-0.113555498421192,0.392040193080902,0.96645724773407,0.233678266406059,-0.106558986008167,0.804791152477264,0.576125502586365,0.142795473337173,0.761282086372375,0.311987817287445,0.568430483341217,0.898469209671021,-0.0272972695529461,0.438187032938004,0.935190200805664,0.351279437541962,-0.044966459274292,0.804791152477264,0.576125502586365,0.142795473337173,0.42239049077034,0.834542334079742,0.353730529546738,0.335851162672043,0.562229573726654,0.755712866783142,0.761282086372375,0.311987817287445,0.568430483341217,-0.117615908384323,0.926379323005676,0.357753843069077,-0.214515462517738,0.588520050048828,0.779504477977753,0.335851162672043,0.562229573726654,0.755712866783142,0.42239049077034,0.834542334079742,0.353730529546738,0.706884205341339,-0.28878253698349,0.645692944526672,0.630046010017395,0.0436474196612835,0.775330185890198,0.717575788497925,0.177658915519714,0.673440635204315, 0.870358824729919,-0.102341800928116,0.481665521860123,0.630046010017395,0.0436474196612835,0.775330185890198,0.228427618741989,0.282149314880371,0.931779265403748,0.267084360122681,0.455141335725784,0.849418818950653,0.717575788497925,0.177658915519714,0.673440635204315,0.228427618741989,0.282149314880371,0.931779265403748,-0.250782161951065,0.269851088523865,0.929671287536621,-0.245068669319153,0.507136404514313,0.826289296150208,0.267084360122681,0.455141335725784,0.849418818950653,0.961451351642609,0.0904497504234314,0.259673148393631,0.90546315908432,0.186478093266487,0.381264179944992,0.819937825202942,-0.00659102853387594,0.572414636611938,0.845280110836029,-0.0974530875682831,0.525361180305481,0.717575788497925,0.177658915519714,0.673440635204315,0.791133522987366,0.342469990253448,0.506776094436646,0.962417662143707,0.0915835499763489,0.255665153264999,0.870358824729919,-0.102341800928116,0.481665521860123,0.267084360122681,0.455141335725784,0.849418818950653,0.301605939865112,0.609322726726532,0.733321011066437,0.791133522987366,0.342469990253448,0.506776094436646,0.717575788497925,0.177658915519714,0.673440635204315,-0.245068669319153,0.507136404514313,0.826289296150208,-0.249163046479225,0.650838494300842,0.717165946960449,0.301605939865112,0.609322726726532,0.733321011066437,0.267084360122681,0.455141335725784,0.849418818950653,0.982547283172607,-0.0194747932255268,0.184990763664246,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.942662239074707,-0.0168874561786652,0.333320707082748,0.947061896324158,0.0981694161891937,0.305673807859421,0.942662239074707,-0.0168874561786652,0.333320707082748,0.982214033603668,0.146134316921234,-0.117899708449841,0.96645724773407,0.233678266406059,-0.106558986008167,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.706884205341339,-0.28878253698349,0.645692944526672,0.870358824729919,-0.102341800928116,0.481665521860123,0.845280110836029,-0.0974530875682831,0.525361180305481,0.870358824729919,-0.102341800928116,0.481665521860123, 0.962417662143707,0.0915835499763489,0.255665153264999,0.961451351642609,0.0904497504234314,0.259673148393631,0.845280110836029,-0.0974530875682831,0.525361180305481,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.910864353179932,0.099295899271965,0.400582611560822,-0.898221433162689,0.418351918458939,0.134833067655563,-0.968085289001465,0.249152198433876,-0.0270941611379385,-0.952755749225616,-0.0757631734013557,0.294136703014374,-0.658345222473145,0.235575124621391,0.714902698993683,-0.654416978359222,0.561667382717133,0.506229400634766,-0.898221433162689,0.418351918458939,0.134833067655563,-0.910864353179932,0.099295899271965,0.400582611560822,-0.250782161951065,0.269851088523865,0.929671287536621,-0.214515462517738,0.588520050048828,0.779504477977753,-0.654416978359222,0.561667382717133,0.506229400634766,-0.658345222473145,0.235575124621391,0.714902698993683,-0.984016895294189,0.178066939115524,-0.00170839997008443,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.952685832977295,0.144979551434517,0.26715275645256,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.958563566207886,0.284186273813248,-0.0198515504598618,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.952685832977295,0.144979551434517,0.26715275645256,0.698522806167603,-0.278597444295883,0.659127771854401,0.912912726402283,-0.113555498421192,0.392040193080902,0.898469209671021,-0.0272972695529461,0.438187032938004,0.706884205341339,-0.28878253698349,0.645692944526672,0.706884205341339,-0.28878253698349,0.645692944526672,0.898469209671021,-0.0272972695529461,0.438187032938004,0.761282086372375,0.311987817287445,0.568430483341217,0.630046010017395,0.0436474196612835,0.775330185890198,0.630046010017395,0.0436474196612835,0.775330185890198,0.761282086372375,0.311987817287445,0.568430483341217, 0.335851162672043,0.562229573726654,0.755712866783142,0.228427618741989,0.282149314880371,0.931779265403748,0.228427618741989,0.282149314880371,0.931779265403748,0.335851162672043,0.562229573726654,0.755712866783142,-0.214515462517738,0.588520050048828,0.779504477977753,-0.250782161951065,0.269851088523865,0.929671287536621,0.912912726402283,-0.113555498421192,0.392040193080902,0.698522806167603,-0.278597444295883,0.659127771854401,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707,-0.0168874561786652,0.333320707082748,0.942662239074707,-0.0168874561786652,0.333320707082748,0.819937825202942,-0.00659102853387594,0.572414636611938,0.90546315908432,0.186478093266487,0.381264179944992,0.947061896324158,0.0981694161891937,0.305673807859421,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.707790970802307,0.336063861846924,0.621363818645477,-0.544086277484894,0.801831424236298,0.247055679559708,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.707790970802307,0.336063861846924,0.621363818645477,-0.297837793827057,0.470342427492142,0.830704927444458,-0.19909605383873,0.874440908432007,0.442395597696304,-0.544086277484894,0.801831424236298,0.247055679559708,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809, -0.432487457990646,0.89841216802597,0.0762243419885635,-0.147313103079796,0.957895338535309,0.246445491909981,-0.245548605918884,0.755104780197144,0.607883751392365,-0.619584679603577,0.676743805408478,0.397658914327621,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.912259876728058,0.390434086322784,0.123867250978947,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.619584679603577,0.676743805408478,0.397658914327621,-0.660027086734772,0.561297416687012,0.499309033155441,-0.912259876728058,0.390434086322784,0.123867250978947,-0.828120172023773,0.556849658489227,0.0643076002597809,-0.245548605918884,0.755104780197144,0.607883751392365,-0.249163046479225,0.650838494300842,0.717165946960449,-0.660027086734772,0.561297416687012,0.499309033155441,-0.619584679603577,0.676743805408478,0.397658914327621,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.866115570068359,0.494783669710159,-0.0709429755806923,0.87403529882431,-0.400045335292816,0.275728017091751,0.975419282913208,0.160561114549637,0.150921493768692,0.949690341949463,0.234604075551033,0.207482814788818,0.854402661323547,-0.324486196041107,0.405838400125504,0.854402661323547,-0.324486196041107,0.405838400125504,0.949690341949463,0.234604075551033,0.207482814788818,0.757872521877289,0.513580203056335,0.402324080467224,0.717831492424011,-0.054539829492569,0.694077372550964,0.717831492424011,-0.054539829492569,0.694077372550964,0.757872521877289,0.513580203056335,0.402324080467224,0.302653968334198,0.791418790817261,0.531090319156647,0.249009624123573,0.325980126857758,0.911992967128754,0.249009624123573,0.325980126857758,0.911992967128754,0.302653968334198,0.791418790817261,0.531090319156647, -0.19909605383873,0.874440908432007,0.442395597696304,-0.297837793827057,0.470342427492142,0.830704927444458,0.832433819770813,0.553277313709259,0.030629251152277,0.924078166484833,0.34885248541832,0.156145676970482,0.746821939945221,0.530121684074402,0.401531994342804,0.654044508934021,0.736575365066528,0.172286093235016,0.654044508934021,0.736575365066528,0.172286093235016,0.746821939945221,0.530121684074402,0.401531994342804,0.281799226999283,0.728858947753906,0.623982191085815,0.284114360809326,0.91420567035675,0.288975805044174,0.281799226999283,0.728858947753906,0.623982191085815,-0.245548605918884,0.755104780197144,0.607883751392365,-0.147313103079796,0.957895338535309,0.246445491909981,0.284114360809326,0.91420567035675,0.288975805044174,0.894311189651489,0.387113749980927,0.224389031529427,0.90546315908432,0.186478093266487,0.381264179944992,0.961451351642609,0.0904497504234314,0.259673148393631,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832,0.156145676970482,0.962417662143707,0.0915835499763489,0.255665153264999,0.791133522987366,0.342469990253448,0.506776094436646,0.746821939945221,0.530121684074402,0.401531994342804,0.746821939945221,0.530121684074402,0.401531994342804,0.791133522987366,0.342469990253448,0.506776094436646,0.301605939865112,0.609322726726532,0.733321011066437,0.281799226999283,0.728858947753906,0.623982191085815,0.301605939865112,0.609322726726532,0.733321011066437,-0.249163046479225,0.650838494300842,0.717165946960449,-0.245548605918884,0.755104780197144,0.607883751392365,0.281799226999283,0.728858947753906,0.623982191085815,0.947061896324158,0.0981694161891937,0.305673807859421,0.96901547908783,0.136607244610786,0.205785036087036,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.96901547908783,0.136607244610786,0.205785036087036,0.975419282913208,0.160561114549637,0.150921493768692,0.87403529882431,-0.400045335292816,0.275728017091751,0.900647282600403,-0.388538032770157,0.194609194993973, 0.867212951183319,0.49559211730957,0.0482721738517284,0.923258781433105,0.354574829339981,0.147884577512741,0.924078166484833,0.34885248541832,0.156145676970482,0.832433819770813,0.553277313709259,0.030629251152277,0.923258781433105,0.354574829339981,0.147884577512741,0.961451351642609,0.0904497504234314,0.259673148393631,0.962417662143707,0.0915835499763489,0.255665153264999,0.924078166484833,0.34885248541832,0.156145676970482,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.915837526321411,0.379801750183105,-0.130354270339012,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.719024538993835,0.657704889774323,-0.224561721086502,-0.805534958839417,0.59233832359314,0.0157723147422075,-0.544086277484894,0.801831424236298,0.247055679559708,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.613491356372833,0.78081339597702,-0.118147142231464,-0.544086277484894,0.801831424236298,0.247055679559708,-0.19909605383873,0.874440908432007,0.442395597696304,-0.147313103079796,0.957895338535309,0.246445491909981,-0.432487457990646,0.89841216802597,0.0762243419885635,-0.929124534130096,0.342707455158234,-0.138849511742592,-0.771193385124207,0.619839727878571,-0.145118817687035,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.832433819770813,0.553277313709259,0.030629251152277,0.949690341949463,0.234604075551033,0.207482814788818,0.975419282913208,0.160561114549637,0.150921493768692,0.867212951183319,0.49559211730957,0.0482721738517284,0.654044508934021,0.736575365066528,0.172286093235016,0.757872521877289,0.513580203056335,0.402324080467224, 0.949690341949463,0.234604075551033,0.207482814788818,0.832433819770813,0.553277313709259,0.030629251152277,0.284114360809326,0.91420567035675,0.288975805044174,0.302653968334198,0.791418790817261,0.531090319156647,0.757872521877289,0.513580203056335,0.402324080467224,0.654044508934021,0.736575365066528,0.172286093235016,-0.19909605383873,0.874440908432007,0.442395597696304,0.302653968334198,0.791418790817261,0.531090319156647,0.284114360809326,0.91420567035675,0.288975805044174,-0.147313103079796,0.957895338535309,0.246445491909981,0.894311189651489,0.387113749980927,0.224389031529427,0.867212951183319,0.49559211730957,0.0482721738517284,0.975419282913208,0.160561114549637,0.150921493768692,0.96901547908783,0.136607244610786,0.205785036087036,0.90546315908432,0.186478093266487,0.381264179944992,0.894311189651489,0.387113749980927,0.224389031529427,0.96901547908783,0.136607244610786,0.205785036087036,0.947061896324158,0.0981694161891937,0.305673807859421,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.958563566207886,0.284186273813248,-0.0198515504598618,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.958563566207886,0.284186273813248,-0.0198515504598618,0.895804822444916,0.195413783192635,-0.399183094501495,0.886481404304504,0.177040234208107,-0.427559942007065,0.964801907539368,-0.255219370126724,0.0634067207574844,0.977060616016388,-0.163682118058205,0.136237412691116,0.901520609855652,-0.411151170730591,-0.134964123368263,0.964801907539368,-0.255219370126724,0.0634067207574844,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746,0.666584491729736,-0.599533498287201,-0.44297257065773,0.901520609855652,-0.411151170730591,-0.134964123368263,0.787978410720825,0.121628329157829,-0.603569865226746,0.571970582008362,0.0312800444662571,-0.819677472114563, 0.241922825574875,-0.699652969837189,-0.672279000282288,0.666584491729736,-0.599533498287201,-0.44297257065773,0.571970582008362,0.0312800444662571,-0.819677472114563,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.977060616016388,-0.163682118058205,0.136237412691116,0.832494258880615,-0.151082515716553,-0.53303599357605,0.693842947483063,0.221262499690056,-0.685291826725006,0.895804822444916,0.195413783192635,-0.399183094501495,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.536711573600769,0.454791516065598,-0.710707664489746,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.416003495454788,0.214769661426544,-0.883637428283691,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.266431361436844,-0.0175890251994133,-0.963693380355835,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.351745277643204,-0.619295239448547,-0.701960563659668,0.241922825574875,-0.699652969837189,-0.672279000282288,-0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.536711573600769,0.454791516065598,-0.710707664489746,0.964801907539368,-0.255219370126724,0.0634067207574844,0.552583754062653,-0.801110565662384,0.229941368103027,0.598017036914825,-0.77135705947876,0.217678412795067,0.977060616016388,-0.163682118058205,0.136237412691116,0.901520609855652,-0.411151170730591,-0.134964123368263,0.446152597665787,-0.869332015514374,0.212625667452812,0.552583754062653,-0.801110565662384,0.229941368103027,0.964801907539368,-0.255219370126724,0.0634067207574844,0.666584491729736,-0.599533498287201,-0.44297257065773, 0.292398184537888,-0.949960947036743,0.10989760607481,0.446152597665787,-0.869332015514374,0.212625667452812,0.901520609855652,-0.411151170730591,-0.134964123368263,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.292398184537888,-0.949960947036743,0.10989760607481,0.666584491729736,-0.599533498287201,-0.44297257065773,0.241922825574875,-0.699652969837189,-0.672279000282288,0.356895834207535,-0.932965636253357,0.0469100996851921,0.682462096214294,-0.715959489345551,-0.147131055593491,0.977060616016388,-0.163682118058205,0.136237412691116,0.598017036914825,-0.77135705947876,0.217678412795067,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.954547107219696,-0.0926553905010223,-0.283292710781097,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.807687342166901,-0.332686811685562,-0.486786007881165,-0.515369832515717,-0.855204343795776,0.0549499057233334,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.351745277643204,-0.619295239448547,-0.701960563659668,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0585855022072792,-0.997730076313019,-0.0332028940320015,0.241922825574875,-0.699652969837189,-0.672279000282288,-0.980031192302704,0.046081081032753,-0.19343064725399,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.704459130764008,-0.709129512310028,0.0295414477586746,0.895804822444916,0.195413783192635,-0.399183094501495,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.0356711931526661,0.684221088886261,-0.728401660919189,0.886481404304504,0.177040234208107,-0.427559942007065,0.787978410720825,0.121628329157829,-0.603569865226746,0.886481404304504,0.177040234208107,-0.427559942007065, -0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215,0.571970582008362,0.0312800444662571,-0.819677472114563,0.787978410720825,0.121628329157829,-0.603569865226746,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.571970582008362,0.0312800444662571,-0.819677472114563,-0.0719253867864609,0.846214473247528,-0.527965664863586,0.0788120701909065,0.901525735855103,-0.42548793554306,0.777539789676666,-0.479580610990524,-0.406736135482788,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.207446113228798,0.0645331293344498,-0.976115584373474,0.832494258880615,-0.151082515716553,-0.53303599357605,0.693842947483063,0.221262499690056,-0.685291826725006,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.0514890588819981,0.630368947982788,-0.774586260318756,0.895804822444916,0.195413783192635,-0.399183094501495,-0.533322870731354,0.362958401441574,-0.764086365699768,0.541287243366241,0.601404964923859,-0.587639510631561,0.570469558238983,0.551836013793945,-0.608310341835022,-0.536711573600769,0.454791516065598,-0.710707664489746,-0.416003495454788,0.214769661426544,-0.883637428283691,0.492161780595779,0.702208399772644,-0.514470756053925,0.541287243366241,0.601404964923859,-0.587639510631561,-0.533322870731354,0.362958401441574,-0.764086365699768,-0.121472828090191,0.0532774887979031,-0.991163909435272,0.315746545791626,0.845299899578094,-0.431012988090515,0.492161780595779,0.702208399772644,-0.514470756053925,-0.416003495454788,0.214769661426544,-0.883637428283691,0.266431361436844,-0.0175890251994133,-0.963693380355835,0.0788120701909065,0.901525735855103,-0.42548793554306,0.315746545791626,0.845299899578094,-0.431012988090515,-0.121472828090191,0.0532774887979031,-0.991163909435272,-0.536711573600769,0.454791516065598,-0.710707664489746,0.570469558238983,0.551836013793945,-0.608310341835022,0.622039020061493,0.415303707122803,-0.663769721984863, -0.185644939541817,0.470028698444366,-0.862907290458679,-0.540148377418518,0.0994914695620537,-0.83566814661026,-0.185644939541817,0.470028698444366,-0.862907290458679,0.622039020061493,0.415303707122803,-0.663769721984863,0.643028497695923,0.0408206060528755,-0.764753580093384,-0.540148377418518,0.0994914695620537,-0.83566814661026,0.643028497695923,0.0408206060528755,-0.764753580093384,0.564797043800354,-0.561121165752411,-0.605101108551025,-0.639358460903168,-0.36973437666893,-0.674178957939148,0.598017036914825,-0.77135705947876,0.217678412795067,0.552583754062653,-0.801110565662384,0.229941368103027,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.503399014472961,-0.851141691207886,0.148819476366043,0.446152597665787,-0.869332015514374,0.212625667452812,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.549799084663391,-0.796860456466675,0.250468283891678,0.552583754062653,-0.801110565662384,0.229941368103027,0.292398184537888,-0.949960947036743,0.10989760607481,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.599539399147034,-0.652060031890869,0.464079976081848,0.446152597665787,-0.869332015514374,0.212625667452812,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.502160012722015,-0.455851703882217,0.734870433807373,0.292398184537888,-0.949960947036743,0.10989760607481,0.777539789676666,-0.479580610990524,-0.406736135482788,0.682462096214294,-0.715959489345551,-0.147131055593491,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.33768093585968,-0.49410879611969,-0.801141738891602,0.356895834207535,-0.932965636253357,0.0469100996851921,0.598017036914825,-0.77135705947876,0.217678412795067,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.626312673091888,-0.775286138057709,0.0816323086619377,-0.704459130764008,-0.709129512310028,0.0295414477586746,0.375612527132034,-0.880971193313599,0.287758558988571,0.426156967878342,-0.793524563312531,0.434406518936157, -0.515369832515717,-0.855204343795776,0.0549499057233334,-0.626312673091888,-0.775286138057709,0.0816323086619377,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973,-0.270284593105316,-0.962110757827759,-0.0359042175114155,-0.515369832515717,-0.855204343795776,0.0549499057233334,0.342554897069931,-0.64288204908371,0.685097694396973,0.0474529080092907,-0.46172571182251,0.885752558708191,-0.270284593105316,-0.962110757827759,-0.0359042175114155,0.0474529080092907,-0.46172571182251,0.885752558708191,-0.272433489561081,-0.386231929063797,0.881251931190491,0.0585855022072792,-0.997730076313019,-0.0332028940320015,-0.704459130764008,-0.709129512310028,0.0295414477586746,-0.456256777048111,-0.889221489429474,-0.0333887115120888,0.376423925161362,-0.91814798116684,0.12373098731041,0.375612527132034,-0.880971193313599,0.287758558988571,-0.456256777048111,-0.889221489429474,-0.0333887115120888,-0.699954152107239,-0.637360692024231,-0.322235196828842,0.438194841146469,-0.882847785949707,-0.169011816382408,0.376423925161362,-0.91814798116684,0.12373098731041,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.639358460903168,-0.36973437666893,-0.674178957939148,0.564797043800354,-0.561121165752411,-0.605101108551025,0.438194841146469,-0.882847785949707,-0.169011816382408,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.13019323348999,0.440476208925247,-0.88827383518219,0.693842947483063,0.221262499690056,-0.685291826725006,0.682462096214294,-0.715959489345551,-0.147131055593491,0.356895834207535,-0.932965636253357,0.0469100996851921,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.739788293838501,0.545380115509033,-0.394047945737839,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.739788293838501,0.545380115509033,-0.394047945737839, -0.704140067100525,0.675374805927277,-0.219215899705887,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.0356711931526661,0.684221088886261,-0.728401660919189,-0.0853337571024895,0.746294736862183,-0.660122990608215,-0.704140067100525,0.675374805927277,-0.219215899705887,-0.521776258945465,0.845166325569153,0.115945540368557,-0.0719253867864609,0.846214473247528,-0.527965664863586,-0.521776258945465,0.845166325569153,0.115945540368557,-0.117615908384323,0.926379323005676,0.357753843069077,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.0719253867864609,0.846214473247528,-0.527965664863586,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.76156884431839,0.476596713066101,-0.439167976379395,-0.0514890588819981,0.630368947982788,-0.774586260318756,-0.13019323348999,0.440476208925247,-0.88827383518219,0.541287243366241,0.601404964923859,-0.587639510631561,0.935190200805664,0.351279437541962,-0.044966459274292,0.96645724773407,0.233678266406059,-0.106558986008167,0.570469558238983,0.551836013793945,-0.608310341835022,0.492161780595779,0.702208399772644,-0.514470756053925,0.804791152477264,0.576125502586365,0.142795473337173,0.935190200805664,0.351279437541962,-0.044966459274292,0.541287243366241,0.601404964923859,-0.587639510631561,0.315746545791626,0.845299899578094,-0.431012988090515,0.42239049077034,0.834542334079742,0.353730529546738,0.804791152477264,0.576125502586365,0.142795473337173,0.492161780595779,0.702208399772644,-0.514470756053925,0.0788120701909065,0.901525735855103,-0.42548793554306,-0.117615908384323,0.926379323005676,0.357753843069077,0.42239049077034,0.834542334079742,0.353730529546738,0.315746545791626,0.845299899578094,-0.431012988090515,0.570469558238983,0.551836013793945,-0.608310341835022,0.96645724773407,0.233678266406059,-0.106558986008167,0.982214033603668,0.146134316921234,-0.117899708449841, 0.622039020061493,0.415303707122803,-0.663769721984863,0.622039020061493,0.415303707122803,-0.663769721984863,0.982214033603668,0.146134316921234,-0.117899708449841,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.643028497695923,0.0408206060528755,-0.764753580093384,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.564797043800354,-0.561121165752411,-0.605101108551025,0.643028497695923,0.0408206060528755,-0.764753580093384,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.978413343429565,-0.195419788360596,0.0672191008925438,-0.549799084663391,-0.796860456466675,0.250468283891678,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.707790970802307,0.336063861846924,0.621363818645477,-0.952633440494537,0.0169817637652159,0.303646564483643,-0.599539399147034,-0.652060031890869,0.464079976081848,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.272433489561081,-0.386231929063797,0.881251931190491,-0.297837793827057,0.470342427492142,0.830704927444458,-0.707790970802307,0.336063861846924,0.621363818645477,-0.502160012722015,-0.455851703882217,0.734870433807373,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.33768093585968,-0.49410879611969,-0.801141738891602,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.503399014472961,-0.851141691207886,0.148819476366043,-0.9717116355896,-0.234629422426224,-0.0269353594630957,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.492518663406372,-0.867294549942017,-0.0722879022359848,0.375612527132034,-0.880971193313599,0.287758558988571,0.87403529882431,-0.400045335292816,0.275728017091751,0.854402661323547,-0.324486196041107,0.405838400125504,0.426156967878342,-0.793524563312531,0.434406518936157, 0.854402661323547,-0.324486196041107,0.405838400125504,0.717831492424011,-0.054539829492569,0.694077372550964,0.342554897069931,-0.64288204908371,0.685097694396973,0.426156967878342,-0.793524563312531,0.434406518936157,0.342554897069931,-0.64288204908371,0.685097694396973,0.717831492424011,-0.054539829492569,0.694077372550964,0.249009624123573,0.325980126857758,0.911992967128754,0.0474529080092907,-0.46172571182251,0.885752558708191,0.0474529080092907,-0.46172571182251,0.885752558708191,0.249009624123573,0.325980126857758,0.911992967128754,-0.297837793827057,0.470342427492142,0.830704927444458,-0.272433489561081,-0.386231929063797,0.881251931190491,0.900647282600403,-0.388538032770157,0.194609194993973,0.87403529882431,-0.400045335292816,0.275728017091751,0.375612527132034,-0.880971193313599,0.287758558988571,0.376423925161362,-0.91814798116684,0.12373098731041,0.951126515865326,-0.290161103010178,0.105663925409317,0.900647282600403,-0.388538032770157,0.194609194993973,0.376423925161362,-0.91814798116684,0.12373098731041,0.438194841146469,-0.882847785949707,-0.169011816382408,0.564797043800354,-0.561121165752411,-0.605101108551025,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.951126515865326,-0.290161103010178,0.105663925409317,0.438194841146469,-0.882847785949707,-0.169011816382408,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.13019323348999,0.440476208925247,-0.88827383518219,-0.207446113228798,0.0645331293344498,-0.976115584373474,-0.492518663406372,-0.867294549942017,-0.0722879022359848,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.442046195268631,-0.813259303569794,-0.378423690795898,-0.962221920490265,0.251950860023499,-0.103197500109673,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.872991740703583,0.465614497661591,-0.14521898329258,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.96112471818924,0.0701068416237831,0.267066061496735, -0.952685832977295,0.144979551434517,0.26715275645256,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.958588540554047,0.28219923377037,-0.0383618324995041,-0.93208372592926,0.354399085044861,0.0749747157096863,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.905734241008759,-0.0415813475847244,-0.421801447868347,0.698522806167603,-0.278597444295883,0.659127771854401,0.845280110836029,-0.0974530875682831,0.525361180305481,0.819937825202942,-0.00659102853387594,0.572414636611938,0.942662239074707,-0.0168874561786652,0.333320707082748,0.997464418411255,-0.00418182462453842,-0.0710434243083,0.982214033603668,0.146134316921234,-0.117899708449841,0.982547283172607,-0.0194747932255268,0.184990763664246,0.972557067871094,-0.221615329384804,-0.0708476528525352,0.997464418411255,-0.00418182462453842,-0.0710434243083,-0.971478700637817,0.187489047646523,-0.145179241895676,-0.905734241008759,-0.0415813475847244,-0.421801447868347,-0.964038372039795,-0.105999648571014,-0.243709042668343,0.867212951183319,0.49559211730957,0.0482721738517284,0.894311189651489,0.387113749980927,0.224389031529427,0.923258781433105,0.354574829339981,0.147884577512741,0.96901547908783,0.136607244610786,0.205785036087036,0.900647282600403,-0.388538032770157,0.194609194993973,0.951126515865326,-0.290161103010178,0.105663925409317,0.982547283172607,-0.0194747932255268,0.184990763664246,0.951126515865326,-0.290161103010178,0.105663925409317,0.972557067871094,-0.221615329384804,-0.0708476528525352,-0.88679826259613,0.179964601993561,-0.42567777633667,-0.980856895446777,0.194233447313309,-0.0138956038281322,-0.809617698192596,0.346473306417465,-0.473788410425186,-0.945275783538818,0.311140537261963,-0.0982102751731873,-0.964038372039795,-0.105999648571014,-0.243709042668343,-0.965696513652802,-0.217925488948822,-0.141204655170441,-0.980031192302704,0.046081081032753,-0.19343064725399, -0.540148377418518,0.0994914695620537,-0.83566814661026,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.639358460903168,-0.36973437666893,-0.674178957939148,-0.699954152107239,-0.637360692024231,-0.322235196828842,-0.980031192302704,0.046081081032753,-0.19343064725399,0.682462096214294,-0.715959489345551,-0.147131055593491,0.777539789676666,-0.479580610990524,-0.406736135482788,0.977060616016388,-0.163682118058205,0.136237412691116,0.977060616016388,-0.163682118058205,0.136237412691116,0.777539789676666,-0.479580610990524,-0.406736135482788,0.832494258880615,-0.151082515716553,-0.53303599357605,-0.924136519432068,-0.0825221389532089,0.373043924570084,-0.952685832977295,0.144979551434517,0.26715275645256,-0.96112471818924,0.0701068416237831,0.267066061496735,-0.866115570068359,0.494783669710159,-0.0709429755806923,-0.861001670360565,0.508598923683167,-0.00179795478470623,-0.771193385124207,0.619839727878571,-0.145118817687035,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648,0.968085885047913,0.249149695038795,-0.0270941667258739,0.984016954898834,0.178066745400429,-0.00170838471967727,0.739788413047791,0.545380234718323,-0.394047558307648,0.704140186309814,0.675374627113342,-0.21921606361866,0.898221969604492,0.418350785970688,0.134832948446274,0.968085885047913,0.249149695038795,-0.0270941667258739,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.654416561126709,0.56166809797287,0.506229162216187,0.898221969604492,0.418350785970688,0.134832948446274,0.521775901317596,0.845166563987732,0.11594570428133,0.117615856230259,0.926379323005676,0.357753992080688,0.214515626430511,0.588520109653473,0.779504418373108,0.654416561126709,0.56166809797287,0.506229162216187,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866,0.0992951467633247,0.400582402944565,0.926552355289459,0.207176983356476,0.31397208571434,0.98439222574234,0.0485407151281834,0.169161930680275,0.910864531993866,0.0992951467633247,0.400582402944565, 0.658345222473145,0.235576301813126,0.714902341365814,0.666352212429047,0.406804502010345,0.624887824058533,0.926552355289459,0.207176983356476,0.31397208571434,0.658345222473145,0.235576301813126,0.714902341365814,0.250782340764999,0.269851475954056,0.929671168327332,0.245068743824959,0.507136464118958,0.826289236545563,0.666352212429047,0.406804502010345,0.624887824058533,0.98439222574234,0.0485407151281834,0.169161930680275,0.962221920490265,0.251950919628143,-0.103197492659092,0.958588719367981,0.282198518514633,-0.0383618138730526,0.96112471818924,0.0701063796877861,0.267066121101379,0.962221920490265,0.251950919628143,-0.103197492659092,0.98439222574234,0.0485407151281834,0.169161930680275,0.926552355289459,0.207176983356476,0.31397208571434,0.912259817123413,0.390434235334396,0.123867250978947,0.912259817123413,0.390434235334396,0.123867250978947,0.926552355289459,0.207176983356476,0.31397208571434,0.666352212429047,0.406804502010345,0.624887824058533,0.660027027130127,0.561297476291656,0.499309003353119,0.660027027130127,0.561297476291656,0.499309003353119,0.666352212429047,0.406804502010345,0.624887824058533,0.245068743824959,0.507136464118958,0.826289236545563,0.249163061380386,0.650838553905487,0.717165887355804,0.980856955051422,0.194233074784279,-0.0138955730944872,0.80961799621582,0.346472293138504,-0.473788559436798,0.761568784713745,0.476597040891647,-0.439167678356171,0.984016954898834,0.178066745400429,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952755630016327,-0.0757652819156647,0.294136583805084,0.98439222574234,0.0485407151281834,0.169161930680275,0.96112471818924,0.0701063796877861,0.267066121101379,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.804790914058685,0.576125860214233,0.142795518040657,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.898469209671021,-0.0272952988743782,0.43818724155426, -0.761282026767731,0.31198838353157,0.568430244922638,-0.804790914058685,0.576125860214233,0.142795518040657,-0.761282026767731,0.31198838353157,0.568430244922638,-0.335850954055786,0.562229692935944,0.755712807178497,-0.422390103340149,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.422390103340149,0.834542691707611,0.353730261325836,-0.335850954055786,0.562229692935944,0.755712807178497,0.214515626430511,0.588520109653473,0.779504418373108,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.71757584810257,0.177658542990685,0.67344069480896,-0.63004606962204,0.043647576123476,0.775330185890198,-0.63004606962204,0.043647576123476,0.775330185890198,-0.71757584810257,0.177658542990685,0.67344069480896,-0.267084181308746,0.455141216516495,0.849418938159943,-0.22842738032341,0.282149195671082,0.931779384613037,-0.22842738032341,0.282149195671082,0.931779384613037,-0.267084181308746,0.455141216516495,0.849418938159943,0.245068743824959,0.507136464118958,0.826289236545563,0.250782340764999,0.269851475954056,0.929671168327332,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.905462920665741,0.186479464173317,0.38126415014267,-0.71757584810257,0.177658542990685,0.67344069480896,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.791133582592011,0.342469930648804,0.506776034832001,-0.267084181308746,0.455141216516495,0.849418938159943,-0.71757584810257,0.177658542990685,0.67344069480896,-0.791133582592011,0.342469930648804,0.506776034832001,-0.30160591006279,0.609322607517242,0.733321130275726,0.245068743824959,0.507136464118958,0.826289236545563,-0.267084181308746,0.455141216516495,0.849418938159943,-0.30160591006279,0.609322607517242,0.733321130275726,0.249163061380386,0.650838553905487,0.717165887355804,-0.982547223567963,-0.0194754991680384,0.184990763664246, -0.947061836719513,0.0981702655553818,0.305673837661743,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.870358943939209,-0.102341398596764,0.481665462255478,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.962417662143707,0.0915835052728653,0.255665123462677,0.924136519432068,-0.0825216323137283,0.373044043779373,0.984016954898834,0.178066745400429,-0.00170838471967727,0.968085885047913,0.249149695038795,-0.0270941667258739,0.952755630016327,-0.0757652819156647,0.294136583805084,0.910864531993866,0.0992951467633247,0.400582402944565,0.952755630016327,-0.0757652819156647,0.294136583805084,0.968085885047913,0.249149695038795,-0.0270941667258739,0.898221969604492,0.418350785970688,0.134832948446274,0.658345222473145,0.235576301813126,0.714902341365814,0.910864531993866,0.0992951467633247,0.400582402944565,0.898221969604492,0.418350785970688,0.134832948446274,0.654416561126709,0.56166809797287,0.506229162216187,0.250782340764999,0.269851475954056,0.929671168327332,0.658345222473145,0.235576301813126,0.714902341365814,0.654416561126709,0.56166809797287,0.506229162216187,0.214515626430511,0.588520109653473,0.779504418373108,0.984016954898834,0.178066745400429,-0.00170838471967727,0.924136519432068,-0.0825216323137283,0.373044043779373,0.952685952186584,0.144979014992714,0.267152786254883,0.980856955051422,0.194233074784279,-0.0138955730944872,0.980856955051422,0.194233074784279,-0.0138955730944872,0.952685952186584,0.144979014992714,0.267152786254883, 0.932084560394287,0.354396849870682,0.074974812567234,0.958563983440399,0.284184783697128,-0.0198514685034752,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.706884801387787,-0.288780331611633,0.645693302154541,-0.63004606962204,0.043647576123476,0.775330185890198,-0.761282026767731,0.31198838353157,0.568430244922638,-0.898469209671021,-0.0272952988743782,0.43818724155426,-0.63004606962204,0.043647576123476,0.775330185890198,-0.22842738032341,0.282149195671082,0.931779384613037,-0.335850954055786,0.562229692935944,0.755712807178497,-0.761282026767731,0.31198838353157,0.568430244922638,-0.22842738032341,0.282149195671082,0.931779384613037,0.250782340764999,0.269851475954056,0.929671168327332,0.214515626430511,0.588520109653473,0.779504418373108,-0.335850954055786,0.562229692935944,0.755712807178497,-0.912912726402283,-0.113554358482361,0.392040550708771,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.905462920665741,0.186479464173317,0.38126415014267,-0.819937765598297,-0.00659000594168901,0.572414755821228,0.915838539600372,0.379799336194992,-0.13035449385643,0.97841340303421,-0.195419549942017,0.0672191828489304,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.929125070571899,0.342706054449081,-0.138849601149559,0.97841340303421,-0.195419549942017,0.0672191828489304,0.915838539600372,0.379799336194992,-0.13035449385643,0.805536329746246,0.592336535453796,0.01577203348279,0.952633321285248,0.0169839523732662,0.303646683692932,0.952633321285248,0.0169839523732662,0.303646683692932,0.805536329746246,0.592336535453796,0.01577203348279,0.544086754322052,0.801831126213074,0.247055530548096,0.707790434360504,0.336065679788589,0.621363461017609, 0.707790434360504,0.336065679788589,0.621363461017609,0.544086754322052,0.801831126213074,0.247055530548096,0.199096158146858,0.874440908432007,0.442395567893982,0.29783770442009,0.470342755317688,0.830704748630524,0.719026386737823,0.657702744007111,-0.224562168121338,0.872992157936096,0.465613692998886,-0.145219102501869,0.828120410442352,0.556849300861359,0.0643075108528137,0.613492965698242,0.780812084674835,-0.118147522211075,0.613492965698242,0.780812084674835,-0.118147522211075,0.828120410442352,0.556849300861359,0.0643075108528137,0.619584619998932,0.676743865013123,0.397658854722977,0.432487845420837,0.898411989212036,0.076224185526371,0.432487845420837,0.898411989212036,0.076224185526371,0.619584619998932,0.676743865013123,0.397658854722977,0.245548591017723,0.755104839801788,0.60788369178772,0.147313222289085,0.957895278930664,0.246445551514626,0.828120410442352,0.556849300861359,0.0643075108528137,0.872992157936096,0.465613692998886,-0.145219102501869,0.962221920490265,0.251950919628143,-0.103197492659092,0.912259817123413,0.390434235334396,0.123867250978947,0.619584619998932,0.676743865013123,0.397658854722977,0.828120410442352,0.556849300861359,0.0643075108528137,0.912259817123413,0.390434235334396,0.123867250978947,0.660027027130127,0.561297476291656,0.499309003353119,0.245548591017723,0.755104839801788,0.60788369178772,0.619584619998932,0.676743865013123,0.397658854722977,0.660027027130127,0.561297476291656,0.499309003353119,0.249163061380386,0.650838553905487,0.717165887355804,0.945276021957397,0.311139762401581,-0.0982102602720261,0.929125070571899,0.342706054449081,-0.138849601149559,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.965696275234222,-0.217926412820816,-0.141204699873924,0.77119505405426,0.619837582111359,-0.14511901140213,0.866116344928741,0.494782358407974,-0.0709430351853371,0.872992157936096,0.465613692998886,-0.145219102501869,0.719026386737823,0.657702744007111,-0.224562168121338,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181, -0.949690282344818,0.234604343771935,0.20748282968998,-0.975419044494629,0.160562738776207,0.150921478867531,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.75787228345871,0.513580441474915,0.402324169874191,-0.949690282344818,0.234604343771935,0.20748282968998,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.24900957942009,0.325979948043823,0.911993026733398,-0.302653342485428,0.791418969631195,0.531090319156647,-0.75787228345871,0.513580441474915,0.402324169874191,-0.24900957942009,0.325979948043823,0.911993026733398,0.29783770442009,0.470342755317688,0.830704748630524,0.199096158146858,0.874440908432007,0.442395567893982,-0.302653342485428,0.791418969631195,0.531090319156647,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.654044389724731,0.736575484275818,0.172286108136177,-0.746822059154511,0.530121624469757,0.401531904935837,-0.924078285694122,0.348852246999741,0.156145602464676,-0.654044389724731,0.736575484275818,0.172286108136177,-0.284113943576813,0.914205729961395,0.288975954055786,-0.281799405813217,0.728858828544617,0.62398225069046,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046,-0.284113943576813,0.914205729961395,0.288975954055786,0.147313222289085,0.957895278930664,0.246445551514626,0.245548591017723,0.755104839801788,0.60788369178772,-0.894310534000397,0.387115389108658,0.224388927221298,-0.92325884103775,0.354574739933014,0.14788456261158,-0.961451351642609,0.0904500335454941,0.259673148393631,-0.905462920665741,0.186479464173317,0.38126415014267,-0.924078285694122,0.348852246999741,0.156145602464676,-0.746822059154511,0.530121624469757,0.401531904935837,-0.791133582592011,0.342469930648804,0.506776034832001,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.746822059154511,0.530121624469757,0.401531904935837,-0.281799405813217,0.728858828544617,0.62398225069046,-0.30160591006279,0.609322607517242,0.733321130275726,-0.791133582592011,0.342469930648804,0.506776034832001, -0.30160591006279,0.609322607517242,0.733321130275726,-0.281799405813217,0.728858828544617,0.62398225069046,0.245548591017723,0.755104839801788,0.60788369178772,0.249163061380386,0.650838553905487,0.717165887355804,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.96901535987854,0.136607885360718,0.205785036087036,-0.96901535987854,0.136607885360718,0.205785036087036,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.924078285694122,0.348852246999741,0.156145602464676,-0.92325884103775,0.354574739933014,0.14788456261158,-0.92325884103775,0.354574739933014,0.14788456261158,-0.924078285694122,0.348852246999741,0.156145602464676,-0.962417662143707,0.0915835052728653,0.255665123462677,-0.961451351642609,0.0904500335454941,0.259673148393631,0.929125070571899,0.342706054449081,-0.138849601149559,0.77119505405426,0.619837582111359,-0.14511901140213,0.719026386737823,0.657702744007111,-0.224562168121338,0.915838539600372,0.379799336194992,-0.13035449385643,0.915838539600372,0.379799336194992,-0.13035449385643,0.719026386737823,0.657702744007111,-0.224562168121338,0.613492965698242,0.780812084674835,-0.118147522211075,0.805536329746246,0.592336535453796,0.01577203348279,0.805536329746246,0.592336535453796,0.01577203348279,0.613492965698242,0.780812084674835,-0.118147522211075,0.432487845420837,0.898411989212036,0.076224185526371,0.544086754322052,0.801831126213074,0.247055530548096,0.544086754322052,0.801831126213074,0.247055530548096,0.432487845420837,0.898411989212036,0.076224185526371,0.147313222289085,0.957895278930664,0.246445551514626,0.199096158146858,0.874440908432007,0.442395567893982,0.929125070571899,0.342706054449081,-0.138849601149559,0.945276021957397,0.311139762401581,-0.0982102602720261, 0.861002922058105,0.508596777915955,-0.00179798470344394,0.77119505405426,0.619837582111359,-0.14511901140213,0.945276021957397,0.311139762401581,-0.0982102602720261,0.958563983440399,0.284184783697128,-0.0198514685034752,0.932084560394287,0.354396849870682,0.074974812567234,0.861002922058105,0.508596777915955,-0.00179798470344394,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.867211997509003,0.495593756437302,0.048272043466568,-0.975419044494629,0.160562738776207,0.150921478867531,-0.949690282344818,0.234604343771935,0.20748282968998,-0.654044389724731,0.736575484275818,0.172286108136177,-0.832433760166168,0.553277373313904,0.0306292269378901,-0.949690282344818,0.234604343771935,0.20748282968998,-0.75787228345871,0.513580441474915,0.402324169874191,-0.284113943576813,0.914205729961395,0.288975954055786,-0.654044389724731,0.736575484275818,0.172286108136177,-0.75787228345871,0.513580441474915,0.402324169874191,-0.302653342485428,0.791418969631195,0.531090319156647,0.199096158146858,0.874440908432007,0.442395567893982,0.147313222289085,0.957895278930664,0.246445551514626,-0.284113943576813,0.914205729961395,0.288975954055786,-0.302653342485428,0.791418969631195,0.531090319156647,-0.894310534000397,0.387115389108658,0.224388927221298,-0.96901535987854,0.136607885360718,0.205785036087036,-0.975419044494629,0.160562738776207,0.150921478867531,-0.867211997509003,0.495593756437302,0.048272043466568,-0.905462920665741,0.186479464173317,0.38126415014267,-0.947061836719513,0.0981702655553818,0.305673837661743,-0.96901535987854,0.136607885360718,0.205785036087036,-0.894310534000397,0.387115389108658,0.224388927221298,0.945276021957397,0.311139762401581,-0.0982102602720261,0.96403831243515,-0.105999603867531,-0.243709176778793,0.971478760242462,0.187488585710526,-0.145179286599159,0.958563983440399,0.284184783697128,-0.0198514685034752,0.980856955051422,0.194233074784279,-0.0138955730944872,0.958563983440399,0.284184783697128,-0.0198514685034752,0.971478760242462,0.187488585710526,-0.145179286599159,0.886798441410065,0.179963767528534,-0.42567777633667, -0.895804762840271,0.195414647459984,-0.399182796478271,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.83249443769455,-0.151082009077072,-0.53303587436676,0.980031192302704,0.0460809320211411,-0.19343064725399,0.536711633205414,0.454791337251663,-0.710707724094391,0.533322811126709,0.362958133220673,-0.764086484909058,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.416003495454788,0.214769378304482,-0.883637487888336,0.807687342166901,-0.332686930894852,-0.486785978078842,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.533322811126709,0.362958133220673,-0.764086484909058,0.121472798287869,0.0532773099839687,-0.991163909435272,0.351745188236237,-0.619295418262482,-0.701960504055023,0.807687342166901,-0.332686930894852,-0.486785978078842,0.416003495454788,0.214769378304482,-0.883637487888336,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.241922900080681,-0.699652969837189,-0.672279000282288,0.351745188236237,-0.619295418262482,-0.701960504055023,0.121472798287869,0.0532773099839687,-0.991163909435272,0.185644999146461,0.47002848982811,-0.862907350063324, 0.536711633205414,0.454791337251663,-0.710707724094391,0.980031192302704,0.0460809320211411,-0.19343064725399,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.964801907539368,-0.255219370126724,0.0634067133069038,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.901520729064941,-0.411150813102722,-0.134964138269424,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.241922900080681,-0.699652969837189,-0.672279000282288,-0.666584610939026,-0.599533259868622,-0.442972719669342,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.356896013021469,-0.932965517044067,0.0469101071357727,-0.598017156124115,-0.77135694026947,0.217678472399712,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.704459071159363,-0.709129512310028,0.0295416153967381,0.980031192302704,0.0460809320211411,-0.19343064725399,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.626312613487244,-0.775286138057709,0.0816323310136795,0.807687342166901,-0.332686930894852,-0.486785978078842,0.515369713306427,-0.855204403400421,0.0549497418105602,0.626312613487244,-0.775286138057709,0.0816323310136795,0.954547107219696,-0.0926554873585701,-0.283292710781097,0.351745188236237,-0.619295418262482,-0.701960504055023,0.270284384489059,-0.962110817432404,-0.0359043404459953,0.515369713306427,-0.855204403400421,0.0549497418105602,0.807687342166901,-0.332686930894852,-0.486785978078842,0.351745188236237,-0.619295418262482,-0.701960504055023,-0.241922900080681,-0.699652969837189,-0.672279000282288, -0.058585699647665,-0.997730076313019,-0.0332027748227119,0.270284384489059,-0.962110817432404,-0.0359043404459953,0.980031192302704,0.0460809320211411,-0.19343064725399,0.704459071159363,-0.709129512310028,0.0295416153967381,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.895804762840271,0.195414647459984,-0.399182796478271,-0.886481404304504,0.177040040493011,-0.427559942007065,0.0356707610189915,0.684221625328064,-0.728401243686676,0.0514887571334839,0.63036984205246,-0.774585545063019,-0.78797847032547,0.121628470718861,-0.603569746017456,0.085333488881588,0.746294617652893,-0.66012316942215,0.0356707610189915,0.684221625328064,-0.728401243686676,-0.886481404304504,0.177040040493011,-0.427559942007065,-0.571970641613007,0.0312801524996758,-0.819677472114563,0.0719250813126564,0.846214592456818,-0.527965605258942,0.085333488881588,0.746294617652893,-0.66012316942215,-0.78797847032547,0.121628470718861,-0.603569746017456,-0.266431421041489,-0.0175891108810902,-0.963693380355835,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.571970641613007,0.0312801524996758,-0.819677472114563,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.83249443769455,-0.151082009077072,-0.53303587436676,0.207446232438087,0.064531996846199,-0.976115584373474,0.337681114673615,-0.494108825922012,-0.801141619682312,-0.693842947483063,0.221263691782951,-0.685291409492493,-0.895804762840271,0.195414647459984,-0.399182796478271,0.0514887571334839,0.63036984205246,-0.774585545063019,0.13019335269928,0.440476208925247,-0.88827383518219,0.533322811126709,0.362958133220673,-0.764086484909058,0.536711633205414,0.454791337251663,-0.710707724094391,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.541287541389465,0.6014044880867,-0.587639689445496,0.416003495454788,0.214769378304482,-0.883637487888336,0.533322811126709,0.362958133220673,-0.764086484909058,-0.541287541389465,0.6014044880867,-0.587639689445496, -0.492161601781845,0.702208459377289,-0.514470815658569,0.121472798287869,0.0532773099839687,-0.991163909435272,0.416003495454788,0.214769378304482,-0.883637487888336,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.266431421041489,-0.0175891108810902,-0.963693380355835,0.121472798287869,0.0532773099839687,-0.991163909435272,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.536711633205414,0.454791337251663,-0.710707724094391,0.185644999146461,0.47002848982811,-0.862907350063324,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.570469677448273,0.551836013793945,-0.608310282230377,0.540148317813873,0.0994915440678597,-0.83566814661026,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.622039020061493,0.415303826332092,-0.663769662380219,0.185644999146461,0.47002848982811,-0.862907350063324,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.598017156124115,-0.77135694026947,0.217678472399712,0.50339812040329,-0.851142287254334,0.148819401860237,0.54979944229126,-0.796860158443451,0.250468462705612,-0.552583634853363,-0.801110625267029,0.229941442608833,-0.446152657270432,-0.869331896305084,0.212626039981842,-0.552583634853363,-0.801110625267029,0.229941442608833,0.54979944229126,-0.796860158443451,0.250468462705612,0.599540710449219,-0.652058064937592,0.464081108570099,-0.292398482561111,-0.949960827827454,0.109898090362549,-0.446152657270432,-0.869331896305084,0.212626039981842,0.599540710449219,-0.652058064937592,0.464081108570099,0.502160549163818,-0.455849409103394,0.734871506690979,-0.058585699647665,-0.997730076313019,-0.0332027748227119,-0.292398482561111,-0.949960827827454,0.109898090362549,0.502160549163818,-0.455849409103394,0.734871506690979,0.272433400154114,-0.386231541633606,0.88125205039978, -0.777539730072021,-0.479580640792847,-0.406736254692078,0.337681114673615,-0.494108825922012,-0.801141619682312,0.442046135663986,-0.813259184360504,-0.378423988819122,-0.682462215423584,-0.715959310531616,-0.147131323814392,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.50339812040329,-0.851142287254334,0.148819401860237,-0.598017156124115,-0.77135694026947,0.217678472399712,0.626312613487244,-0.775286138057709,0.0816323310136795,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.375613301992416,-0.88097071647644,0.287758976221085,0.704459071159363,-0.709129512310028,0.0295416153967381,0.515369713306427,-0.855204403400421,0.0549497418105602,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.426157087087631,-0.793524503707886,0.434406518936157,0.626312613487244,-0.775286138057709,0.0816323310136795,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.342554897069931,-0.642882287502289,0.685097455978394,0.515369713306427,-0.855204403400421,0.0549497418105602,0.270284384489059,-0.962110817432404,-0.0359043404459953,-0.058585699647665,-0.997730076313019,-0.0332027748227119,0.272433400154114,-0.386231541633606,0.88125205039978,-0.0474530011415482,-0.461726039648056,0.885752379894257,0.704459071159363,-0.709129512310028,0.0295416153967381,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.376423895359039,-0.918147921562195,0.123731203377247,0.456256777048111,-0.889221549034119,-0.0333885848522186,0.456256777048111,-0.889221549034119,-0.0333885848522186,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.438194215297699,-0.882848083972931,-0.169011920690537,0.699954152107239,-0.637360692024231,-0.322235226631165,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.564797222614288,-0.561120748519897,-0.60510128736496,0.639358460903168,-0.369733929634094,-0.674179136753082,-0.83249443769455,-0.151082009077072,-0.53303587436676, -0.693842947483063,0.221263691782951,-0.685291409492493,0.13019335269928,0.440476208925247,-0.88827383518219,0.207446232438087,0.064531996846199,-0.976115584373474,-0.682462215423584,-0.715959310531616,-0.147131323814392,0.442046135663986,-0.813259184360504,-0.378423988819122,0.49251726269722,-0.867295384407043,-0.0722877904772758,-0.356896013021469,-0.932965517044067,0.0469101071357727,0.0514887571334839,0.63036984205246,-0.774585545063019,0.0356707610189915,0.684221625328064,-0.728401243686676,0.739788413047791,0.545380234718323,-0.394047558307648,0.761568784713745,0.476597040891647,-0.439167678356171,0.739788413047791,0.545380234718323,-0.394047558307648,0.0356707610189915,0.684221625328064,-0.728401243686676,0.085333488881588,0.746294617652893,-0.66012316942215,0.704140186309814,0.675374627113342,-0.21921606361866,0.085333488881588,0.746294617652893,-0.66012316942215,0.0719250813126564,0.846214592456818,-0.527965605258942,0.521775901317596,0.845166563987732,0.11594570428133,0.704140186309814,0.675374627113342,-0.21921606361866,0.521775901317596,0.845166563987732,0.11594570428133,0.0719250813126564,0.846214592456818,-0.527965605258942,-0.0788121968507767,0.901525676250458,-0.425488084554672,0.117615856230259,0.926379323005676,0.357753992080688,0.337681114673615,-0.494108825922012,-0.801141619682312,0.207446232438087,0.064531996846199,-0.976115584373474,0.886798441410065,0.179963767528534,-0.42567777633667,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.80961799621582,0.346472293138504,-0.473788559436798,0.13019335269928,0.440476208925247,-0.88827383518219,0.0514887571334839,0.63036984205246,-0.774585545063019,0.761568784713745,0.476597040891647,-0.439167678356171,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.935190379619598,0.351279079914093,-0.0449664331972599,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.541287541389465,0.6014044880867,-0.587639689445496,-0.935190379619598,0.351279079914093,-0.0449664331972599, -0.804790914058685,0.576125860214233,0.142795518040657,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.492161601781845,0.702208459377289,-0.514470815658569,-0.804790914058685,0.576125860214233,0.142795518040657,-0.422390103340149,0.834542691707611,0.353730261325836,-0.0788121968507767,0.901525676250458,-0.425488084554672,-0.31574621796608,0.845299959182739,-0.431013107299805,-0.422390103340149,0.834542691707611,0.353730261325836,0.117615856230259,0.926379323005676,0.357753992080688,-0.570469677448273,0.551836013793945,-0.608310282230377,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.966457307338715,0.233678236603737,-0.106558948755264,-0.622039020061493,0.415303826332092,-0.663769662380219,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.643028497695923,0.0408206768333912,-0.764753520488739,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.97841340303421,-0.195419549942017,0.0672191828489304,0.54979944229126,-0.796860158443451,0.250468462705612,0.50339812040329,-0.851142287254334,0.148819401860237,0.971711337566376,-0.234630659222603,-0.0269353967159987,0.952633321285248,0.0169839523732662,0.303646683692932,0.599540710449219,-0.652058064937592,0.464081108570099,0.54979944229126,-0.796860158443451,0.250468462705612,0.97841340303421,-0.195419549942017,0.0672191828489304,0.707790434360504,0.336065679788589,0.621363461017609,0.502160549163818,-0.455849409103394,0.734871506690979,0.599540710449219,-0.652058064937592,0.464081108570099,0.952633321285248,0.0169839523732662,0.303646683692932,0.272433400154114,-0.386231541633606,0.88125205039978,0.502160549163818,-0.455849409103394,0.734871506690979,0.707790434360504,0.336065679788589,0.621363461017609,0.29783770442009,0.470342755317688,0.830704748630524, 0.96403831243515,-0.105999603867531,-0.243709176778793,0.442046135663986,-0.813259184360504,-0.378423988819122,0.337681114673615,-0.494108825922012,-0.801141619682312,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.50339812040329,-0.851142287254334,0.148819401860237,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.965696275234222,-0.217926412820816,-0.141204699873924,0.971711337566376,-0.234630659222603,-0.0269353967159987,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.854402720928192,-0.324486047029495,0.405838370323181,-0.426157087087631,-0.793524503707886,0.434406518936157,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.342554897069931,-0.642882287502289,0.685097455978394,-0.0474530011415482,-0.461726039648056,0.885752379894257,-0.24900957942009,0.325979948043823,0.911993026733398,-0.717831492424011,-0.054540041834116,0.69407731294632,-0.0474530011415482,-0.461726039648056,0.885752379894257,0.272433400154114,-0.386231541633606,0.88125205039978,0.29783770442009,0.470342755317688,0.830704748630524,-0.24900957942009,0.325979948043823,0.911993026733398,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.375613301992416,-0.88097071647644,0.287758976221085,-0.874035537242889,-0.400044828653336,0.275728106498718,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.376423895359039,-0.918147921562195,0.123731203377247,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.564797222614288,-0.561120748519897,-0.60510128736496,-0.438194215297699,-0.882848083972931,-0.169011920690537,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.886798441410065,0.179963767528534,-0.42567777633667, 0.207446232438087,0.064531996846199,-0.976115584373474,0.13019335269928,0.440476208925247,-0.88827383518219,0.80961799621582,0.346472293138504,-0.473788559436798,0.49251726269722,-0.867295384407043,-0.0722877904772758,0.442046135663986,-0.813259184360504,-0.378423988819122,0.96403831243515,-0.105999603867531,-0.243709176778793,0.965696275234222,-0.217926412820816,-0.141204699873924,0.962221920490265,0.251950919628143,-0.103197492659092,0.872992157936096,0.465613692998886,-0.145219102501869,0.866116344928741,0.494782358407974,-0.0709430351853371,0.958588719367981,0.282198518514633,-0.0383618138730526,0.958588719367981,0.282198518514633,-0.0383618138730526,0.932084560394287,0.354396849870682,0.074974812567234,0.952685952186584,0.144979014992714,0.267152786254883,0.96112471818924,0.0701063796877861,0.267066121101379,0.861002922058105,0.508596777915955,-0.00179798470344394,0.932084560394287,0.354396849870682,0.074974812567234,0.958588719367981,0.282198518514633,-0.0383618138730526,0.866116344928741,0.494782358407974,-0.0709430351853371,0.971478760242462,0.187488585710526,-0.145179286599159,0.905734241008759,-0.0415820777416229,-0.421801388263702,0.886798441410065,0.179963767528534,-0.42567777633667,-0.698523104190826,-0.278595626354218,0.659128189086914,-0.819937765598297,-0.00659000594168901,0.572414755821228,-0.845280170440674,-0.0974520891904831,0.525361299514771,-0.942662239074707,-0.0168870743364096,0.333320766687393,-0.982214033603668,0.1461341381073,-0.117899678647518,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.997464418411255,-0.00418218318372965,-0.0710434541106224,-0.972556948661804,-0.221615761518478,-0.070847675204277,0.971478760242462,0.187488585710526,-0.145179286599159,0.96403831243515,-0.105999603867531,-0.243709176778793,0.905734241008759,-0.0415820777416229,-0.421801388263702,-0.867211997509003,0.495593756437302,0.048272043466568,-0.92325884103775,0.354574739933014,0.14788456261158,-0.894310534000397,0.387115389108658,0.224388927221298, -0.96901535987854,0.136607885360718,0.205785036087036,-0.951126158237457,-0.290162175893784,0.105663880705833,-0.900646984577179,-0.388538599014282,0.194609254598618,-0.982547223567963,-0.0194754991680384,0.184990763664246,-0.972556948661804,-0.221615761518478,-0.070847675204277,-0.951126158237457,-0.290162175893784,0.105663880705833,0.886798441410065,0.179963767528534,-0.42567777633667,0.80961799621582,0.346472293138504,-0.473788559436798,0.980856955051422,0.194233074784279,-0.0138955730944872,0.945276021957397,0.311139762401581,-0.0982102602720261,0.965696275234222,-0.217926412820816,-0.141204699873924,0.96403831243515,-0.105999603867531,-0.243709176778793,0.980031192302704,0.0460809320211411,-0.19343064725399,0.639358460903168,-0.369733929634094,-0.674179136753082,0.540148317813873,0.0994915440678597,-0.83566814661026,0.639358460903168,-0.369733929634094,-0.674179136753082,0.980031192302704,0.0460809320211411,-0.19343064725399,0.699954152107239,-0.637360692024231,-0.322235226631165,-0.682462215423584,-0.715959310531616,-0.147131323814392,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.777539730072021,-0.479580640792847,-0.406736254692078,-0.977060735225677,-0.163681700825691,0.136237412691116,-0.83249443769455,-0.151082009077072,-0.53303587436676,-0.777539730072021,-0.479580640792847,-0.406736254692078,0.924136519432068,-0.0825216323137283,0.373044043779373,0.96112471818924,0.0701063796877861,0.267066121101379,0.952685952186584,0.144979014992714,0.267152786254883,0.866116344928741,0.494782358407974,-0.0709430351853371,0.77119505405426,0.619837582111359,-0.14511901140213,0.861002922058105,0.508596777915955,-0.00179798470344394,0.220404133200645,0.441583395004272,-0.869727611541748,0.345912396907806,0.450473189353943,-0.823054373264313,0.499523967504501,-0.410259157419205,-0.762996256351471,0.291362255811691,-0.415095657110214,-0.861860573291779,0.345912396907806,0.450473189353943,-0.823054373264313,0.596955060958862,0.477591276168823,-0.644632637500763,0.719791650772095,-0.389199703931808,-0.574824810028076, 0.499523967504501,-0.410259157419205,-0.762996256351471,0.596955060958862,0.477591276168823,-0.644632637500763,0.801617920398712,0.503292322158813,-0.322653979063034,0.89153379201889,-0.356688916683197,-0.279178351163864,0.719791650772095,-0.389199703931808,-0.574824810028076,0.801617920398712,0.503292322158813,-0.322653979063034,0.856007039546967,0.515455603599548,0.039463996887207,0.93902975320816,-0.33998966217041,0.0512847155332565,0.89153379201889,-0.356688916683197,-0.279178351163864,0.531617403030396,0.581484317779541,-0.615840017795563,0.596955060958862,0.477591276168823,-0.644632637500763,0.345912396907806,0.450473189353943,-0.823054373264313,0.28382807970047,0.520071446895599,-0.805585086345673,0.709659159183502,0.635841906070709,-0.303461521863937,0.801617920398712,0.503292322158813,-0.322653979063034,0.596955060958862,0.477591276168823,-0.644632637500763,0.531617403030396,0.581484317779541,-0.615840017795563,0.755816400051117,0.653946995735168,0.0330889187753201,0.856007039546967,0.515455603599548,0.039463996887207,0.801617920398712,0.503292322158813,-0.322653979063034,0.709659159183502,0.635841906070709,-0.303461521863937,0.238343358039856,0.387237757444382,-0.890639841556549,0.568823277950287,-0.359092324972153,-0.739927589893341,0.49908322095871,-0.0296989660710096,-0.866044998168945,0.249522879719734,0.613189935684204,-0.749490737915039,0.528623342514038,0.140339240431786,-0.837175190448761,0.64734548330307,0.346664369106293,-0.678798675537109,0.531617403030396,0.581484317779541,-0.615840017795563,0.28382807970047,0.520071446895599,-0.805585086345673,0.64734548330307,0.346664369106293,-0.678798675537109,0.815433382987976,0.474987715482712,-0.330839991569519,0.709659159183502,0.635841906070709,-0.303461521863937,0.531617403030396,0.581484317779541,-0.615840017795563,0.815433382987976,0.474987715482712,-0.330839991569519,0.855934202671051,0.515577018260956,0.0394590422511101,0.755816400051117,0.653946995735168,0.0330889187753201,0.709659159183502,0.635841906070709,-0.303461521863937,0.495009750127792,0.455467730760574,-0.739942193031311, 0.532988548278809,0.496355772018433,-0.685240209102631,0.64734548330307,0.346664369106293,-0.678798675537109,0.528623342514038,0.140339240431786,-0.837175190448761,0.532988548278809,0.496355772018433,-0.685240209102631,0.672445952892303,0.657832205295563,-0.339224457740784,0.815433382987976,0.474987715482712,-0.330839991569519,0.64734548330307,0.346664369106293,-0.678798675537109,0.672445952892303,0.657832205295563,-0.339224457740784,0.702748596668243,0.710811495780945,0.0298582091927528,0.855934202671051,0.515577018260956,0.0394590422511101,0.815433382987976,0.474987715482712,-0.330839991569519,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.568823277950287,-0.359092324972153,-0.739927589893341,0.238343358039856,0.387237757444382,-0.890639841556549,0.291362255811691,-0.415095657110214,-0.861860573291779,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.238343358039856,0.387237757444382,-0.890639841556549,0.220404133200645,0.441583395004272,-0.869727611541748,0.28382807970047,0.520071446895599,-0.805585086345673,0.345912396907806,0.450473189353943,-0.823054373264313,0.220404133200645,0.441583395004272,-0.869727611541748,0.249522879719734,0.613189935684204,-0.749490737915039,0.49908322095871,-0.0296989660710096,-0.866044998168945,0.528623342514038,0.140339240431786,-0.837175190448761,0.28382807970047,0.520071446895599,-0.805585086345673,0.249522879719734,0.613189935684204,-0.749490737915039,0.531679213047028,-0.524689078330994,-0.664844751358032,0.122271165251732,0.0883934944868088,-0.988552689552307,0.449340283870697,0.427763402462006,-0.784290611743927,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.491910099983215,0.172478601336479,-0.853390634059906,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.366778641939163,0.448393434286118,-0.815117657184601,0.497087746858597,0.30063185095787,-0.813955903053284,-0.358708292245865,0.679778933525085,-0.639710068702698,0.511581122875214,0.562213659286499,-0.64976966381073,0.497087746858597,0.30063185095787,-0.813955903053284, -0.366778641939163,0.448393434286118,-0.815117657184601,-0.345371842384338,0.869300365447998,-0.353603094816208,0.516282200813293,0.786112189292908,-0.339823931455612,0.511581122875214,0.562213659286499,-0.64976966381073,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.349057763814926,0.936734259128571,-0.0262219123542309,0.506098926067352,0.862278997898102,0.0184080004692078,0.516282200813293,0.786112189292908,-0.339823931455612,-0.345371842384338,0.869300365447998,-0.353603094816208,0.614878416061401,0.498528629541397,-0.611059486865997,0.567450106143951,0.238805204629898,-0.788018047809601,0.497087746858597,0.30063185095787,-0.813955903053284,0.511581122875214,0.562213659286499,-0.64976966381073,0.64806866645813,0.696889817714691,-0.307167142629623,0.614878416061401,0.498528629541397,-0.611059486865997,0.511581122875214,0.562213659286499,-0.64976966381073,0.516282200813293,0.786112189292908,-0.339823931455612,0.645423412322998,0.763367056846619,0.0264460854232311,0.64806866645813,0.696889817714691,-0.307167142629623,0.516282200813293,0.786112189292908,-0.339823931455612,0.506098926067352,0.862278997898102,0.0184080004692078,0.0124354995787144,0.454871088266373,-0.890470445156097,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432,0.655558884143829,0.209355428814888,-0.725543141365051,0.614878416061401,0.498528629541397,-0.611059486865997,0.383456945419312,0.608026206493378,-0.695172548294067,0.186724796891212,0.483126193284988,-0.855408072471619,0.567450106143951,0.238805204629898,-0.788018047809601,0.64806866645813,0.696889817714691,-0.307167142629623,0.488431423902512,0.799107253551483,-0.350517243146896,0.383456945419312,0.608026206493378,-0.695172548294067,0.614878416061401,0.498528629541397,-0.611059486865997,0.645423412322998,0.763367056846619,0.0264460854232311,0.506222486495972,0.862206280231476,0.0184154994785786,0.488431423902512,0.799107253551483,-0.350517243146896,0.64806866645813,0.696889817714691,-0.307167142629623,0.383456945419312,0.608026206493378,-0.695172548294067, 0.532988548278809,0.496355772018433,-0.685240209102631,0.495009750127792,0.455467730760574,-0.739942193031311,0.186724796891212,0.483126193284988,-0.855408072471619,0.488431423902512,0.799107253551483,-0.350517243146896,0.672445952892303,0.657832205295563,-0.339224457740784,0.532988548278809,0.496355772018433,-0.685240209102631,0.383456945419312,0.608026206493378,-0.695172548294067,0.506222486495972,0.862206280231476,0.0184154994785786,0.702748596668243,0.710811495780945,0.0298582091927528,0.672445952892303,0.657832205295563,-0.339224457740784,0.488431423902512,0.799107253551483,-0.350517243146896,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.559110403060913,0.469017684459686,-0.683679699897766,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128493547439575,-0.169293120503426,-0.977153658866882,0.368004411458969,0.153596758842468,-0.917050004005432,-0.348750114440918,0.540946424007416,-0.765343248844147,0.368004411458969,0.153596758842468,-0.917050004005432,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.36416107416153,0.234637573361397,-0.901294589042664,0.491910099983215,0.172478601336479,-0.853390634059906,0.567450106143951,0.238805204629898,-0.788018047809601,0.655558884143829,0.209355428814888,-0.725543141365051,0.491910099983215,0.172478601336479,-0.853390634059906,0.497087746858597,0.30063185095787,-0.813955903053284,0.567450106143951,0.238805204629898,-0.788018047809601,0.186724796891212,0.483126193284988,-0.855408072471619,0.0124354995787144,0.454871088266373,-0.890470445156097,0.655558884143829,0.209355428814888,-0.725543141365051,0.449340283870697,0.427763402462006,-0.784290611743927,0.122271165251732,0.0883934944868088,-0.988552689552307,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.143515676259995,-0.203022330999374,-0.968599617481232,0.508907198905945,-0.553594052791595,-0.659201860427856, -0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.143515676259995,-0.203022330999374,-0.968599617481232,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.566836953163147,-0.543319463729858,-0.619273662567139,0.531679213047028,-0.524689078330994,-0.664844751358032,0.623004376888275,-0.00750839477404952,-0.782182335853577,0.449340283870697,0.427763402462006,-0.784290611743927,0.614906549453735,0.590024650096893,-0.523221671581268,0.755403220653534,-0.0362841933965683,-0.654254853725433,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.614906549453735,0.590024650096893,-0.523221671581268,0.449340283870697,0.427763402462006,-0.784290611743927,-0.0200252141803503,0.64056408405304,-0.767643511295319,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.348750114440918,0.540946424007416,-0.765343248844147,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.57543957233429,0.0254972595721483,-0.817446708679199,-0.247235804796219,-0.304136991500854,-0.919986486434937,-0.143515676259995,-0.203022330999374,-0.968599617481232,-0.286835759878159,0.0198002532124519,-0.957775115966797,0.627847135066986,-0.674039661884308,-0.389202296733856,0.531679213047028,-0.524689078330994,-0.664844751358032,0.568823277950287,-0.359092324972153,-0.739927589893341,0.508907198905945,-0.553594052791595,-0.659201860427856,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.528623342514038,0.140339240431786,-0.837175190448761,0.49908322095871,-0.0296989660710096,-0.866044998168945, 0.566836953163147,-0.543319463729858,-0.619273662567139,0.495009750127792,0.455467730760574,-0.739942193031311,0.528623342514038,0.140339240431786,-0.837175190448761,0.755403220653534,-0.0362841933965683,-0.654254853725433,0.614906549453735,0.590024650096893,-0.523221671581268,0.0124354995787144,0.454871088266373,-0.890470445156097,0.186724796891212,0.483126193284988,-0.855408072471619,-0.0195061750710011,0.763988316059113,-0.644935190677643,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.0195061750710011,0.763988316059113,-0.644935190677643,0.186724796891212,0.483126193284988,-0.855408072471619,0.495009750127792,0.455467730760574,-0.739942193031311,0.614906549453735,0.590024650096893,-0.523221671581268,0.130445152521133,0.457035809755325,0.879830837249756,0.20105354487896,-0.399605453014374,0.894367337226868,0.418255031108856,-0.396321922540665,0.817307531833649,0.260075956583023,0.465220808982849,0.84612649679184,0.656683743000031,-0.378395289182663,0.652367532253265,0.528121531009674,0.489418476819992,0.693943202495575,0.260075956583023,0.465220808982849,0.84612649679184,0.418255031108856,-0.396321922540665,0.817307531833649,0.857872784137726,-0.350929707288742,0.375369966030121,0.76475590467453,0.509621679782867,0.39425140619278,0.528121531009674,0.489418476819992,0.693943202495575,0.656683743000031,-0.378395289182663,0.652367532253265,0.93902975320816,-0.33998966217041,0.0512847155332565,0.856007039546967,0.515455603599548,0.039463996887207,0.76475590467453,0.509621679782867,0.39425140619278,0.857872784137726,-0.350929707288742,0.375369966030121,0.466174960136414,0.592728853225708,0.656774938106537,0.200175419449806,0.534444093704224,0.821157276630402,0.260075956583023,0.465220808982849,0.84612649679184,0.528121531009674,0.489418476819992,0.693943202495575,0.675370097160339,0.64173036813736,0.363397032022476,0.466174960136414,0.592728853225708,0.656774938106537,0.528121531009674,0.489418476819992,0.693943202495575,0.76475590467453,0.509621679782867,0.39425140619278,0.755816400051117,0.653946995735168,0.0330889187753201, 0.675370097160339,0.64173036813736,0.363397032022476,0.76475590467453,0.509621679782867,0.39425140619278,0.856007039546967,0.515455603599548,0.039463996887207,0.407602995634079,-0.0139898108318448,0.913052082061768,0.505278706550598,-0.368258208036423,0.78043532371521,0.111461341381073,0.330251514911652,0.937288820743561,0.17189884185791,0.626526415348053,0.760207533836365,0.466174960136414,0.592728853225708,0.656774938106537,0.574624836444855,0.359153598546982,0.735401213169098,0.440102815628052,0.155542016029358,0.884373366832733,0.200175419449806,0.534444093704224,0.821157276630402,0.675370097160339,0.64173036813736,0.363397032022476,0.777630627155304,0.481480687856674,0.404310435056686,0.574624836444855,0.359153598546982,0.735401213169098,0.466174960136414,0.592728853225708,0.656774938106537,0.755816400051117,0.653946995735168,0.0330889187753201,0.855934202671051,0.515577018260956,0.0394590422511101,0.777630627155304,0.481480687856674,0.404310435056686,0.675370097160339,0.64173036813736,0.363397032022476,0.574624836444855,0.359153598546982,0.735401213169098,0.460348039865494,0.508830428123474,0.727441608905792,0.416925370693207,0.468881458044052,0.778667747974396,0.440102815628052,0.155542016029358,0.884373366832733,0.777630627155304,0.481480687856674,0.404310435056686,0.634704053401947,0.664313793182373,0.394763141870499,0.460348039865494,0.508830428123474,0.727441608905792,0.574624836444855,0.359153598546982,0.735401213169098,0.855934202671051,0.515577018260956,0.0394590422511101,0.702748596668243,0.710811495780945,0.0298582091927528,0.634704053401947,0.664313793182373,0.394763141870499,0.777630627155304,0.481480687856674,0.404310435056686,-0.00422305008396506,-0.606499910354614,0.795072376728058,0.434695482254028,-0.572132110595703,0.695488810539246,0.014976161532104,0.0756698846817017,0.997020423412323,-0.341256439685822,-0.287500321865082,0.894923210144043,0.111461341381073,0.330251514911652,0.937288820743561,0.505278706550598,-0.368258208036423,0.78043532371521,-0.0179628469049931,-0.326483070850372,0.945032358169556, -0.208328202366829,-0.172579661011696,0.962712645530701,0.20105354487896,-0.399605453014374,0.894367337226868,0.130445152521133,0.457035809755325,0.879830837249756,0.111461341381073,0.330251514911652,0.937288820743561,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.200175419449806,0.534444093704224,0.821157276630402,0.17189884185791,0.626526415348053,0.760207533836365,0.130445152521133,0.457035809755325,0.879830837249756,0.260075956583023,0.465220808982849,0.84612649679184,0.200175419449806,0.534444093704224,0.821157276630402,0.440102815628052,0.155542016029358,0.884373366832733,0.407602995634079,-0.0139898108318448,0.913052082061768,0.17189884185791,0.626526415348053,0.760207533836365,0.368747025728226,0.423022657632828,0.827694058418274,0.014976161532104,0.0756698846817017,0.997020423412323,0.434695482254028,-0.572132110595703,0.695488810539246,0.589323878288269,-0.0393206179141998,0.806939482688904,0.401947200298309,0.187930881977081,0.896169900894165,0.411258369684219,0.315371930599213,0.855223417282104,-0.448035717010498,0.462348014116287,0.765178620815277,-0.454463303089142,0.250147342681885,0.85492068529129,0.411258369684219,0.315371930599213,0.855223417282104,0.442751318216324,0.574035108089447,0.688806891441345,-0.42182531952858,0.69061017036438,0.587470054626465,-0.448035717010498,0.462348014116287,0.765178620815277,0.442751318216324,0.574035108089447,0.688806891441345,0.479419261217117,0.792443513870239,0.377081513404846,-0.37904354929924,0.875075936317444,0.300945341587067,-0.42182531952858,0.69061017036438,0.587470054626465,0.479419261217117,0.792443513870239,0.377081513404846,0.506098926067352,0.862278997898102,0.0184080004692078,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.37904354929924,0.875075936317444,0.300945341587067,0.549417436122894,0.509770929813385,0.662022709846497,0.442751318216324,0.574035108089447,0.688806891441345,0.411258369684219,0.315371930599213,0.855223417282104,0.483853906393051,0.253162741661072,0.83773148059845,0.613779723644257,0.702778577804565,0.359689712524414, 0.479419261217117,0.792443513870239,0.377081513404846,0.442751318216324,0.574035108089447,0.688806891441345,0.549417436122894,0.509770929813385,0.662022709846497,0.645423412322998,0.763367056846619,0.0264460854232311,0.506098926067352,0.862278997898102,0.0184080004692078,0.479419261217117,0.792443513870239,0.377081513404846,0.613779723644257,0.702778577804565,0.359689712524414,0.27214840054512,0.170062497258186,0.947108268737793,-0.424899607896805,0.554023623466492,0.715903759002686,-0.0785331204533577,0.470493257045746,0.878901958465576,0.577877700328827,0.222700744867325,0.785150766372681,0.0984512493014336,0.498287439346313,0.861404061317444,0.310688972473145,0.620523273944855,0.720016121864319,0.549417436122894,0.509770929813385,0.662022709846497,0.483853906393051,0.253162741661072,0.83773148059845,0.310688972473145,0.620523273944855,0.720016121864319,0.450630962848663,0.805599272251129,0.384631723165512,0.613779723644257,0.702778577804565,0.359689712524414,0.549417436122894,0.509770929813385,0.662022709846497,0.450630962848663,0.805599272251129,0.384631723165512,0.506222486495972,0.862206280231476,0.0184154994785786,0.645423412322998,0.763367056846619,0.0264460854232311,0.613779723644257,0.702778577804565,0.359689712524414,0.416925370693207,0.468881458044052,0.778667747974396,0.460348039865494,0.508830428123474,0.727441608905792,0.310688972473145,0.620523273944855,0.720016121864319,0.0984512493014336,0.498287439346313,0.861404061317444,0.460348039865494,0.508830428123474,0.727441608905792,0.634704053401947,0.664313793182373,0.394763141870499,0.450630962848663,0.805599272251129,0.384631723165512,0.310688972473145,0.620523273944855,0.720016121864319,0.634704053401947,0.664313793182373,0.394763141870499,0.702748596668243,0.710811495780945,0.0298582091927528,0.506222486495972,0.862206280231476,0.0184154994785786,0.450630962848663,0.805599272251129,0.384631723165512,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.341256439685822,-0.287500321865082,0.894923210144043,0.014976161532104,0.0756698846817017,0.997020423412323, -0.625847578048706,0.480478763580322,0.614373624324799,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.424899607896805,0.554023623466492,0.715903759002686,0.27214840054512,0.170062497258186,0.947108268737793,-0.228187650442123,-0.152172490954399,0.961651682853699,0.27214840054512,0.170062497258186,0.947108268737793,0.401947200298309,0.187930881977081,0.896169900894165,-0.454463303089142,0.250147342681885,0.85492068529129,-0.408599942922592,0.0173157677054405,0.912549316883087,0.483853906393051,0.253162741661072,0.83773148059845,0.411258369684219,0.315371930599213,0.855223417282104,0.401947200298309,0.187930881977081,0.896169900894165,0.577877700328827,0.222700744867325,0.785150766372681,-0.0785331204533577,0.470493257045746,0.878901958465576,0.0984512493014336,0.498287439346313,0.861404061317444,0.483853906393051,0.253162741661072,0.83773148059845,0.577877700328827,0.222700744867325,0.785150766372681,-0.625847578048706,0.480478763580322,0.614373624324799,0.014976161532104,0.0756698846817017,0.997020423412323,0.368747025728226,0.423022657632828,0.827694058418274,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.383537352085114,0.0364017225801945,0.922807693481445,0.589323878288269,-0.0393206179141998,0.806939482688904,0.434695482254028,-0.572132110595703,0.695488810539246,0.535627126693726,-0.624319195747375,0.568620383739471,0.718368828296661,-0.0318839028477669,0.694931387901306,0.558537840843201,0.599707722663879,0.57304984331131,0.368747025728226,0.423022657632828,0.827694058418274,0.589323878288269,-0.0393206179141998,0.806939482688904,0.718368828296661,-0.0318839028477669,0.694931387901306,-0.0980732291936874,0.653969585895538,0.750136971473694, 0.368747025728226,0.423022657632828,0.827694058418274,0.558537840843201,0.599707722663879,0.57304984331131,-0.0848502963781357,0.77521288394928,0.625975549221039,-0.671684086322784,0.576999366283417,0.464663535356522,-0.625847578048706,0.480478763580322,0.614373624324799,-0.0980732291936874,0.653969585895538,0.750136971473694,-0.0848502963781357,0.77521288394928,0.625975549221039,-0.424899607896805,0.554023623466492,0.715903759002686,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.625847578048706,0.480478763580322,0.614373624324799,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.656222641468048,0.0393575765192509,0.753540217876434,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.0179628469049931,-0.326483070850372,0.945032358169556,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.341256439685822,-0.287500321865082,0.894923210144043,-0.354196131229401,-0.301204055547714,0.885336756706238,-0.00422305008396506,-0.606499910354614,0.795072376728058,-0.0179628469049931,-0.326483070850372,0.945032358169556,0.505278706550598,-0.368258208036423,0.78043532371521,0.434695482254028,-0.572132110595703,0.695488810539246,0.407602995634079,-0.0139898108318448,0.913052082061768,0.440102815628052,0.155542016029358,0.884373366832733,0.718368828296661,-0.0318839028477669,0.694931387901306,0.535627126693726,-0.624319195747375,0.568620383739471,0.416925370693207,0.468881458044052,0.778667747974396,0.558537840843201,0.599707722663879,0.57304984331131,0.718368828296661,-0.0318839028477669,0.694931387901306,0.440102815628052,0.155542016029358,0.884373366832733,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0848502963781357,0.77521288394928,0.625975549221039,0.0984512493014336,0.498287439346313,0.861404061317444,0.416925370693207,0.468881458044052,0.778667747974396,0.0984512493014336,0.498287439346313,0.861404061317444,-0.0848502963781357,0.77521288394928,0.625975549221039, 0.558537840843201,0.599707722663879,0.57304984331131,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.28100323677063,-0.703339219093323,0.652955651283264,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.68051141500473,-0.254610985517502,0.687078893184662,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.882811486721039,-0.336694210767746,0.327537626028061,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0911645293235779,-0.702602386474609,0.705718696117401, -0.202346414327621,-0.358685582876205,0.911263167858124,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.291014969348907,-0.640561819076538,0.71062707901001,-0.52898645401001,-0.491417169570923,0.691868841648102,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.34972295165062,-0.865084648132324,0.359614223241806,-0.674269676208496,-0.660174071788788,0.330954134464264,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.319179713726044,-0.172680079936981,-0.931829333305359, -0.199148803949356,-0.719600260257721,-0.665218114852905,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.612231731414795,-0.260206639766693,-0.746635675430298,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.846806704998016,-0.342166721820831,-0.407234936952591,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.928562819957733,-0.368498861789703,-0.0444939211010933,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.671101152896881,-0.0684311091899872,-0.738200783729553, -0.67170912027359,-0.26042515039444,-0.693531274795532,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.456670939922333,-0.504286706447601,-0.732902884483337,-0.210457310080528,-0.658140003681183,-0.722882747650146,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.311080545186996,-0.873001515865326,-0.375629216432571,-0.358602106571198,-0.933434844017029,-0.010197676718235,-0.702749192714691,-0.710810780525208,-0.0298604443669319,-0.639376401901245,-0.667583346366882,-0.381484389305115,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.28100323677063,-0.703339219093323,0.652955651283264, -0.0911645293235779,-0.702602386474609,0.705718696117401,0.206373274326324,-0.932199418544769,-0.29734542965889,0.265233933925629,-0.933141052722931,-0.242690622806549,-0.468802720308304,-0.729726076126099,0.497718721628189,-0.28100323677063,-0.703339219093323,0.652955651283264,0.265233933925629,-0.933141052722931,-0.242690622806549,0.333554297685623,-0.926460325717926,-0.174392700195313,-0.6035475730896,-0.760226249694824,0.240387856960297,-0.468802720308304,-0.729726076126099,0.497718721628189,0.333554297685623,-0.926460325717926,-0.174392700195313,0.393486231565475,-0.915565848350525,-0.0831127688288689,-0.634244203567505,-0.772702574729919,-0.0257883872836828,-0.6035475730896,-0.760226249694824,0.240387856960297,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.414534240961075,-0.909560441970825,0.0293457116931677,-0.0911645293235779,-0.702602386474609,0.705718696117401,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.147581502795219,-0.881406664848328,0.448711484670639,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.0544524416327477,-0.920815229415894,-0.386179000139236,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.744288861751556,-0.234780222177505,0.625229835510254,-0.755199730396271,-0.445887237787247,0.480476796627045,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.769146144390106,-0.596087396144867,0.230421498417854,-0.76525092124939,-0.642850756645203,-0.0336732342839241, -0.912554860115051,0.405823320150375,-0.0505079813301563,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.75330114364624,-0.0430446080863476,0.656265556812286,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.909932374954224,-0.128417745232582,0.394375443458557,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.528953433036804,-0.511403381824493,0.677255392074585,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.556144297122955,-0.497788280248642,0.665515065193176,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.00627111084759235,-0.725264191627502,-0.688442051410675,-0.199148803949356,-0.719600260257721,-0.665218114852905,0.238087520003319,-0.928487598896027,0.285000205039978,0.173939555883408,-0.926637887954712,0.333297610282898,-0.415939480066299,-0.73881071805954,-0.530238687992096,0.313057601451874,-0.922951817512512,0.223952934145927,0.238087520003319,-0.928487598896027,0.285000205039978,-0.199148803949356,-0.719600260257721,-0.665218114852905,-0.415939480066299,-0.73881071805954,-0.530238687992096,-0.576395452022552,-0.764892399311066,-0.287589907646179,0.382047444581985,-0.913609445095062,0.139131292700768, 0.313057601451874,-0.922951817512512,0.223952934145927,-0.576395452022552,-0.764892399311066,-0.287589907646179,-0.634244203567505,-0.772702574729919,-0.0257883872836828,0.414534240961075,-0.909560441970825,0.0293457116931677,0.382047444581985,-0.913609445095062,0.139131292700768,-0.00627111084759235,-0.725264191627502,-0.688442051410675,0.173939555883408,-0.926637887954712,0.333297610282898,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.100533246994019,-0.893698990345001,-0.437258720397949,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.94632351398468,0.183760270476341,0.265902101993561,-0.945695042610168,0.244873836636543,0.21377021074295,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.67170912027359,-0.26042515039444,-0.693531274795532,-0.945695042610168,0.244873836636543,0.21377021074295,-0.936998605728149,0.316089689731598,0.14873118698597,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.702341377735138,-0.454965353012085,-0.547469735145569,-0.936998605728149,0.316089689731598,0.14873118698597,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.76525092124939,-0.642850756645203,-0.0336732342839241,-0.741996705532074,-0.600749731063843,-0.297557651996613,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.671101152896881,-0.0684311091899872,-0.738200783729553,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.94632351398468,0.183760270476341,0.265902101993561,-0.859895944595337,-0.137679204344749,-0.49155205488205,-0.498913466930389,-0.494338691234589,-0.711838901042938,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.935486495494843,-0.0804866030812263,0.344074010848999, -0.507410705089569,-0.552135229110718,-0.66157466173172,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.60280579328537,-0.423473596572876,-0.676236093044281,-0.452344924211502,-0.552772045135498,-0.699876546859741,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.498913466930389,-0.494338691234589,-0.711838901042938,0.499523967504501,-0.410259157419205,-0.762996256351471,0.265233933925629,-0.933141052722931,-0.242690622806549,0.206373274326324,-0.932199418544769,-0.29734542965889,0.291362255811691,-0.415095657110214,-0.861860573291779,0.719791650772095,-0.389199703931808,-0.574824810028076,0.333554297685623,-0.926460325717926,-0.174392700195313,0.265233933925629,-0.933141052722931,-0.242690622806549,0.499523967504501,-0.410259157419205,-0.762996256351471,0.89153379201889,-0.356688916683197,-0.279178351163864,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.333554297685623,-0.926460325717926,-0.174392700195313,0.719791650772095,-0.389199703931808,-0.574824810028076,0.93902975320816,-0.33998966217041,0.0512847155332565,0.414534240961075,-0.909560441970825,0.0293457116931677,0.393486231565475,-0.915565848350525,-0.0831127688288689,0.89153379201889,-0.356688916683197,-0.279178351163864,0.206373274326324,-0.932199418544769,-0.29734542965889,-0.0544524416327477,-0.920815229415894,-0.386179000139236,0.0635582432150841,-0.298091143369675,-0.952418982982636,0.291362255811691,-0.415095657110214,-0.861860573291779,-0.0544524416327477,-0.920815229415894,-0.386179000139236, -0.576637268066406,-0.666932582855225,-0.471900790929794,-0.250289469957352,-0.339470773935318,-0.906705439090729,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.366778641939163,0.448393434286118,-0.815117657184601,-0.918562531471252,0.240213423967361,-0.313911467790604,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.358708292245865,0.679778933525085,-0.639710068702698,-0.916511356830597,0.31258288025856,-0.249597251415253,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.345371842384338,0.869300365447998,-0.353603094816208,-0.911587297916412,0.377997100353241,-0.161637872457504,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.913896083831787,0.178190380334854,-0.36474946141243,-0.36416107416153,0.234637573361397,-0.901294589042664,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.895336210727692,-0.087383933365345,-0.436734586954117,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.250289469957352,-0.339470773935318,-0.906705439090729,-0.576637268066406,-0.666932582855225,-0.471900790929794,-0.751205563545227,-0.478883922100067,-0.454269051551819,-0.0507657080888748,-0.284880071878433,-0.957217931747437,-0.616970300674438,-0.649450302124023,-0.444479376077652,-0.445206075906754,-0.782184541225433,-0.435865759849548, -0.128973305225372,-0.305629998445511,-0.943374931812286,-0.195326372981071,-0.254561126232147,-0.947125256061554,-0.445206075906754,-0.782184541225433,-0.435865759849548,-0.633082926273346,-0.611027598381042,-0.475238174200058,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.128973305225372,-0.305629998445511,-0.943374931812286,0.20105354487896,-0.399605453014374,0.894367337226868,0.173939555883408,-0.926637887954712,0.333297610282898,0.238087520003319,-0.928487598896027,0.285000205039978,0.418255031108856,-0.396321922540665,0.817307531833649,0.418255031108856,-0.396321922540665,0.817307531833649,0.238087520003319,-0.928487598896027,0.285000205039978,0.313057601451874,-0.922951817512512,0.223952934145927,0.656683743000031,-0.378395289182663,0.652367532253265,0.656683743000031,-0.378395289182663,0.652367532253265,0.313057601451874,-0.922951817512512,0.223952934145927,0.382047444581985,-0.913609445095062,0.139131292700768,0.857872784137726,-0.350929707288742,0.375369966030121,0.857872784137726,-0.350929707288742,0.375369966030121,0.382047444581985,-0.913609445095062,0.139131292700768,0.414534240961075,-0.909560441970825,0.0293457116931677,0.93902975320816,-0.33998966217041,0.0512847155332565,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.0946064740419388,-0.913934707641602,0.394680887460709,0.173939555883408,-0.926637887954712,0.333297610282898,0.20105354487896,-0.399605453014374,0.894367337226868,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.0946064740419388,-0.913934707641602,0.394680887460709,-0.0351529642939568,-0.352832555770874,0.935025930404663,-0.448035717010498,0.462348014116287,0.765178620815277,-0.945695042610168,0.244873836636543,0.21377021074295,-0.94632351398468,0.183760270476341,0.265902101993561,-0.454463303089142,0.250147342681885,0.85492068529129,-0.42182531952858,0.69061017036438,0.587470054626465,-0.936998605728149,0.316089689731598,0.14873118698597,-0.945695042610168,0.244873836636543,0.21377021074295,-0.448035717010498,0.462348014116287,0.765178620815277, -0.37904354929924,0.875075936317444,0.300945341587067,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.936998605728149,0.316089689731598,0.14873118698597,-0.42182531952858,0.69061017036438,0.587470054626465,-0.349057763814926,0.936734259128571,-0.0262219123542309,-0.912554860115051,0.405823320150375,-0.0505079813301563,-0.923020243644714,0.379948437213898,0.0606035329401493,-0.37904354929924,0.875075936317444,0.300945341587067,-0.94632351398468,0.183760270476341,0.265902101993561,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.454463303089142,0.250147342681885,0.85492068529129,-0.935486495494843,-0.0804866030812263,0.344074010848999,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.794270694255829,-0.471489399671555,0.383186310529709,-0.622603535652161,-0.659051358699799,0.42191955447197,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.659892737865448,-0.642082750797272,0.390219569206238,-0.291664242744446,-0.238015905022621,0.926434218883514,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.679035544395447,-0.603133201599121,0.418498605489731,-0.48826989531517,-0.774789869785309,0.40161320567131,-0.225328087806702,-0.289088577032089,0.930405855178833,0.220404133200645,0.441583395004272,-0.869727611541748,0.238343358039856,0.387237757444382,-0.890639841556549,0.249522879719734,0.613189935684204,-0.749490737915039,0.0635582432150841,-0.298091143369675,-0.952418982982636,-0.250289469957352,-0.339470773935318,-0.906705439090729, -0.0507657080888748,-0.284880071878433,-0.957217931747437,0.508907198905945,-0.553594052791595,-0.659201860427856,0.568823277950287,-0.359092324972153,-0.739927589893341,-0.0507657080888748,-0.284880071878433,-0.957217931747437,0.491910099983215,0.172478601336479,-0.853390634059906,0.655558884143829,0.209355428814888,-0.725543141365051,0.368004411458969,0.153596758842468,-0.917050004005432,0.368004411458969,0.153596758842468,-0.917050004005432,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.312836438417435,0.000868286821059883,-0.94980663061142,-0.128493547439575,-0.169293120503426,-0.977153658866882,-0.286835759878159,0.0198002532124519,-0.957775115966797,-0.128973305225372,-0.305629998445511,-0.943374931812286,-0.559110403060913,0.469017684459686,-0.683679699897766,-0.348750114440918,0.540946424007416,-0.765343248844147,-0.619978547096252,0.568114936351776,-0.541176497936249,0.568823277950287,-0.359092324972153,-0.739927589893341,0.531679213047028,-0.524689078330994,-0.664844751358032,0.566836953163147,-0.543319463729858,-0.619273662567139,0.568823277950287,-0.359092324972153,-0.739927589893341,0.566836953163147,-0.543319463729858,-0.619273662567139,0.49908322095871,-0.0296989660710096,-0.866044998168945,-0.619978547096252,0.568114936351776,-0.541176497936249,-0.348750114440918,0.540946424007416,-0.765343248844147,0.0124354995787144,0.454871088266373,-0.890470445156097,0.130445152521133,0.457035809755325,0.879830837249756,0.17189884185791,0.626526415348053,0.760207533836365,0.111461341381073,0.330251514911652,0.937288820743561,0.111461341381073,0.330251514911652,0.937288820743561,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.0351529642939568,-0.352832555770874,0.935025930404663,0.401947200298309,0.187930881977081,0.896169900894165,0.27214840054512,0.170062497258186,0.947108268737793,0.577877700328827,0.222700744867325,0.785150766372681,0.27214840054512,0.170062497258186,0.947108268737793,-0.408599942922592,0.0173157677054405,0.912549316883087,-0.228187650442123,-0.152172490954399,0.961651682853699, -0.0179628469049931,-0.326483070850372,0.945032358169556,-0.343363374471664,-0.172115311026573,0.92329728603363,-0.208328202366829,-0.172579661011696,0.962712645530701,-0.228187650442123,-0.152172490954399,0.961651682853699,-0.225328087806702,-0.289088577032089,0.930405855178833,-0.383537352085114,0.0364017225801945,0.922807693481445,-0.625847578048706,0.480478763580322,0.614373624324799,-0.671684086322784,0.576999366283417,0.464663535356522,-0.424899607896805,0.554023623466492,0.715903759002686,0.505278706550598,-0.368258208036423,0.78043532371521,0.535627126693726,-0.624319195747375,0.568620383739471,0.434695482254028,-0.572132110595703,0.695488810539246,0.505278706550598,-0.368258208036423,0.78043532371521,0.407602995634079,-0.0139898108318448,0.913052082061768,0.535627126693726,-0.624319195747375,0.568620383739471,-0.671684086322784,0.576999366283417,0.464663535356522,-0.0785331204533577,0.470493257045746,0.878901958465576,-0.424899607896805,0.554023623466492,0.715903759002686,-0.431291252374649,-0.167436838150024,0.88653975725174,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.227215021848679,-0.0811199173331261,0.970460176467896,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.202346414327621,-0.358685582876205,0.911263167858124,-0.132480919361115,-0.155877292156219,0.978851914405823,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.660988688468933,-0.379635334014893,0.647279620170593,-0.551568567752838,-0.516851603984833,0.654703378677368,-0.216712310910225,-0.169844657182693,0.961347281932831,-0.411167025566101,-0.631594717502594,0.657289743423462,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.319179713726044,-0.172680079936981,-0.931829333305359,-0.107617132365704,-0.122167520225048,-0.986657798290253,-0.122947707772255,-0.396816700696945,-0.909626483917236,-0.151893243193626,-0.205408811569214,-0.966817259788513,-0.0616781376302242,-0.181977167725563,-0.981366455554962,-0.151893243193626,-0.205408811569214,-0.966817259788513, -0.60280579328537,-0.423473596572876,-0.676236093044281,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.507410705089569,-0.552135229110718,-0.66157466173172,-0.381634205579758,-0.640459716320038,-0.666458308696747,-0.151893243193626,-0.205408811569214,-0.966817259788513,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.105160817503929,0.278431057929993,0.954681813716888,0.263650745153427,-0.157535120844841,0.951667487621307,0.272030591964722,-0.10613701492548,0.956417441368103,-0.142246410250664,0.246101453900337,0.958749234676361,-0.179838627576828,0.158750206232071,0.970801949501038,0.326879501342773,0.00586882513016462,0.945047795772552,0.326879501342773,0.00586882513016462,0.945047795772552,-0.179838627576828,0.158750206232071,0.970801949501038,-0.172908544540405,0.0579710826277733,0.983230412006378,0.334599673748016,0.175780311226845,0.925820887088776,0.334599673748016,0.175780311226845,0.925820887088776,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.122078433632851,-0.0250803548842669,0.992203533649445,0.253547221422195,0.327525943517685,0.910187065601349,0.253547221422195,0.327525943517685,0.910187065601349,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.105446070432663,0.417101114988327,0.902722418308258,0.105446070432663,0.417101114988327,0.902722418308258,-0.040074922144413,-0.0765580385923386,0.996259450912476,0.0589041672646999,-0.0861395671963692,0.994540214538574,-0.067083902657032,0.418874800205231,0.90556263923645,-0.067083902657032,0.418874800205231,0.90556263923645,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.153722941875458,-0.0543801262974739,0.986616492271423,-0.182103842496872,0.370986968278885,0.910607993602753,-0.233089491724968,0.366702735424042,0.900665521621704,0.179733082652092,-0.0269720479846001,0.983345568180084,0.213143289089203,0.0353558585047722,0.976381063461304,-0.283145189285278,0.239479392766953,0.928697168827057, -0.283145189285278,0.239479392766953,0.928697168827057,0.213143289089203,0.0353558585047722,0.976381063461304,0.233963787555695,0.155204430222511,0.959777355194092,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.418653875589371,-0.0103639494627714,0.908086717128754,0.233963787555695,0.155204430222511,0.959777355194092,0.180598795413971,0.261213630437851,0.948236048221588,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.224078983068466,-0.125485673546791,0.96645849943161,0.180598795413971,0.261213630437851,0.948236048221588,0.0773428529500961,0.322050452232361,0.943557918071747,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.112397000193596,-0.326285779476166,0.938565135002136,0.0773428529500961,0.322050452232361,0.943557918071747,-0.0433657057583332,0.308572441339493,0.950211763381958,0.136130660772324,-0.198970586061478,0.970504581928253,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.299070537090302,0.902828752994537,0.308961302042007,-0.590794920921326,0.744754731655121,0.310325294733047,-0.105160817503929,0.278431057929993,0.954681813716888,-0.142246410250664,0.246101453900337,0.958749234676361,-0.486762404441834,0.520327687263489,0.70165628194809,-0.624243855476379,0.262774765491486,0.73570990562439,-0.179838627576828,0.158750206232071,0.970801949501038,-0.179838627576828,0.158750206232071,0.970801949501038,-0.624243855476379,0.262774765491486,0.73570990562439,-0.629434466362,-0.076258510351181,0.773302555084229,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.172908544540405,0.0579710826277733,0.983230412006378,-0.629434466362,-0.076258510351181,0.773302555084229,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.122078433632851,-0.0250803548842669,0.992203533649445,-0.466201931238174,-0.373760640621185,0.801847040653229,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.040074922144413,-0.0765580385923386,0.996259450912476,-0.176110938191414,-0.553461611270905,0.814042508602142, 0.167152568697929,-0.567055284976959,0.806540906429291,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.0589041672646999,-0.0861395671963692,0.994540214538574,0.167152568697929,-0.567055284976959,0.806540906429291,0.439817190170288,-0.44538602232933,0.779866755008698,0.153722941875458,-0.0543801262974739,0.986616492271423,0.179733082652092,-0.0269720479846001,0.983345568180084,0.676802039146423,-0.601036489009857,0.425081342458725,0.85341203212738,-0.31018790602684,0.418893098831177,0.213143289089203,0.0353558585047722,0.976381063461304,0.213143289089203,0.0353558585047722,0.976381063461304,0.85341203212738,-0.31018790602684,0.418893098831177,0.902406454086304,0.256440877914429,0.346266776323318,0.233963787555695,0.155204430222511,0.959777355194092,0.233963787555695,0.155204430222511,0.959777355194092,0.902406454086304,0.256440877914429,0.346266776323318,0.674272358417511,0.674698412418365,0.300231248140335,0.180598795413971,0.261213630437851,0.948236048221588,0.180598795413971,0.261213630437851,0.948236048221588,0.674272358417511,0.674698412418365,0.300231248140335,0.264634191989899,0.922052919864655,0.282466232776642,0.0773428529500961,0.322050452232361,0.943557918071747,0.0773428529500961,0.322050452232361,0.943557918071747,0.264634191989899,0.922052919864655,0.282466232776642,-0.299070537090302,0.902828752994537,0.308961302042007,-0.0433657057583332,0.308572441339493,0.950211763381958,-0.486762404441834,0.520327687263489,0.70165628194809,-0.549692809581757,0.641294836997986,0.535330533981323,-0.767678797245026,0.2869873046875,0.572981357574463,-0.624243855476379,0.262774765491486,0.73570990562439,-0.624243855476379,0.262774765491486,0.73570990562439,-0.767678797245026,0.2869873046875,0.572981357574463,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.629434466362,-0.076258510351181,0.773302555084229,-0.629434466362,-0.076258510351181,0.773302555084229,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.466201931238174,-0.373760640621185,0.801847040653229, -0.466201931238174,-0.373760640621185,0.801847040653229,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.176110938191414,-0.553461611270905,0.814042508602142,-0.220708161592484,-0.714994132518768,0.663378715515137,0.199516177177429,-0.725585639476776,0.658573269844055,0.167152568697929,-0.567055284976959,0.806540906429291,0.167152568697929,-0.567055284976959,0.806540906429291,0.199516177177429,-0.725585639476776,0.658573269844055,0.568061590194702,-0.524848997592926,0.633908152580261,0.439817190170288,-0.44538602232933,0.779866755008698,0.439817190170288,-0.44538602232933,0.779866755008698,0.568061590194702,-0.524848997592926,0.633908152580261,0.88259881734848,-0.254938364028931,0.395000904798508,-0.246941313147545,0.924433410167694,0.290590465068817,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.549692809581757,0.641294836997986,0.535330533981323,-0.549692809581757,0.641294836997986,0.535330533981323,-0.690867304801941,0.718407988548279,-0.0811932682991028,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.767678797245026,0.2869873046875,0.572981357574463,-0.767678797245026,0.2869873046875,0.572981357574463,-0.959779977798462,0.278704285621643,-0.0338585041463375,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.778753936290741,-0.129268735647202,0.61386626958847,-0.971564769744873,-0.236011743545532,0.0189810190349817,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.578869938850403,-0.496298432350159,0.646991074085236,-0.723084032535553,-0.687865734100342,0.0631685853004456,-0.28089165687561,-0.955799043178558,0.086879275739193,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.220708161592484,-0.714994132518768,0.663378715515137,-0.28089165687561,-0.955799043178558,0.086879275739193, 0.236541092395782,-0.968005061149597,0.0837526917457581,0.199516177177429,-0.725585639476776,0.658573269844055,0.199516177177429,-0.725585639476776,0.658573269844055,0.236541092395782,-0.968005061149597,0.0837526917457581,0.690576732158661,-0.721194446086884,0.0546111837029457,0.568061590194702,-0.524848997592926,0.633908152580261,0.568061590194702,-0.524848997592926,0.633908152580261,0.690576732158661,-0.721194446086884,0.0546111837029457,0.959537088871002,-0.28148826956749,0.00727332010865211,0.88259881734848,-0.254938364028931,0.395000904798508,0.88259881734848,-0.254938364028931,0.395000904798508,0.959537088871002,-0.28148826956749,0.00727332010865211,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.971341848373413,0.233277097344399,-0.045571681112051,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.722835063934326,0.685165286064148,-0.0897666588425636,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,0.280602157115936,0.953093111515045,-0.113472364842892,-0.236852958798409,0.965259969234467,-0.110334932804108,-0.246941313147545,0.924433410167694,0.290590465068817,0.00198204442858696,0.093896672129631,0.995579957962036,0.272030591964722,-0.10613701492548,0.956417441368103,0.326879501342773,0.00586882513016462,0.945047795772552,0.00198204442858696,0.093896672129631,0.995579957962036,0.326879501342773,0.00586882513016462,0.945047795772552,0.334599673748016,0.175780311226845,0.925820887088776,0.00198204442858696,0.093896672129631,0.995579957962036,0.334599673748016,0.175780311226845,0.925820887088776,0.253547221422195,0.327525943517685,0.910187065601349,0.00198204442858696,0.093896672129631,0.995579957962036,0.253547221422195,0.327525943517685,0.910187065601349,0.105446070432663,0.417101114988327,0.902722418308258, 0.00198204442858696,0.093896672129631,0.995579957962036,0.105446070432663,0.417101114988327,0.902722418308258,-0.067083902657032,0.418874800205231,0.90556263923645,0.00198204442858696,0.093896672129631,0.995579957962036,-0.067083902657032,0.418874800205231,0.90556263923645,-0.182103842496872,0.370986968278885,0.910607993602753,0.0314320400357246,0.12189869582653,0.992044746875763,-0.233089491724968,0.366702735424042,0.900665521621704,-0.283145189285278,0.239479392766953,0.928697168827057,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.0314320400357246,0.12189869582653,0.992044746875763,0.136130660772324,-0.198970586061478,0.970504581928253,0.263650745153427,-0.157535120844841,0.951667487621307,0.028663007542491,0.119241014122963,0.992451548576355,-0.283145189285278,0.239479392766953,0.928697168827057,-0.418653875589371,-0.0103639494627714,0.908086717128754,-0.224078983068466,-0.125485673546791,0.96645849943161,0.136130660772324,-0.198970586061478,0.970504581928253,0.028663007542491,0.119241014122963,0.992451548576355,-0.224078983068466,-0.125485673546791,0.96645849943161,-0.112397000193596,-0.326285779476166,0.938565135002136,-0.246941313147545,0.924433410167694,0.290590465068817,-0.549692809581757,0.641294836997986,0.535330533981323,-0.486762404441834,0.520327687263489,0.70165628194809,-0.114203341305256,0.279921561479568,0.953205943107605,-0.587047100067139,0.73501044511795,0.339316010475159,-0.486762404441834,0.520327687263489,0.70165628194809,-0.142246410250664,0.246101453900337,0.958749234676361,0.245040863752365,-0.134970381855965,0.960071861743927,-0.114203341305256,0.279921561479568,0.953205943107605,-0.142246410250664,0.246101453900337,0.958749234676361,0.272030591964722,-0.10613701492548,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036,0.0316664315760136,0.122062407433987,0.992017149925232,0.245040863752365,-0.134970381855965,0.960071861743927,0.272030591964722,-0.10613701492548,0.956417441368103,0.00198204442858696,0.093896672129631,0.995579957962036, -0.182103842496872,0.370986968278885,0.910607993602753,-0.211337894201279,0.346838146448135,0.91380500793457,0.0316664315760136,0.122062407433987,0.992017149925232,-0.182103842496872,0.370986968278885,0.910607993602753,0.153722941875458,-0.0543801262974739,0.986616492271423,0.196472957730293,-0.029518248513341,0.980064809322357,-0.211337894201279,0.346838146448135,0.91380500793457,0.153722941875458,-0.0543801262974739,0.986616492271423,0.439817190170288,-0.44538602232933,0.779866755008698,0.680254757404327,-0.584707081317902,0.44200798869133,0.196472957730293,-0.029518248513341,0.980064809322357,-0.106244966387749,0.278917253017426,0.954419791698456,-0.58428555727005,0.74019581079483,0.332746803760529,-0.58428555727005,0.74019581079483,0.332746803760529,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,-0.106244966387749,0.278917253017426,0.954419791698456,-0.106244966387749,0.278917253017426,0.954419791698456,0.252784311771393,-0.144343972206116,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,0.0315654873847961,0.122002728283405,0.992027699947357,0.252784311771393,-0.144343972206116,0.956694781780243,0.252784311771393,-0.144343972206116,0.956694781780243,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,-0.220397889614105,0.355129688978195,0.908464431762695,0.0315654873847961,0.122002728283405,0.992027699947357,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.189345061779022,-0.0369042716920376,0.981216847896576,-0.220397889614105,0.355129688978195,0.908464431762695,0.189345061779022,-0.0369042716920376,0.981216847896576,0.676772654056549,-0.6009920835495,0.4251908659935,0.676772654056549,-0.6009920835495,0.4251908659935,0.189345061779022,-0.0369042716920376,0.981216847896576,0.285419285297394,-0.260888695716858,-0.922210872173309,0.285419285297394,-0.260888695716858,-0.922210872173309,-0.0701178461313248,0.161541283130646,-0.984371840953827, -0.0701178461313248,0.161541283130646,-0.984371840953827,0.304495304822922,-0.222503274679184,-0.926161408424377,0.359685301780701,-0.109944850206375,-0.926573574542999,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.106314696371555,0.128722757101059,-0.985965311527252,0.359685301780701,-0.109944850206375,-0.926573574542999,0.368203610181808,0.0610124915838242,-0.92774111032486,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.144488215446472,0.0409091152250767,-0.988660514354706,0.368203610181808,0.0610124915838242,-0.92774111032486,0.287971884012222,0.213878870010376,-0.933449566364288,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.137990683317184,-0.0606634132564068,-0.988573968410492,0.287971884012222,0.213878870010376,-0.933449566364288,0.140473276376724,0.304339796304703,-0.942148923873901,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0875953435897827,-0.144417569041252,-0.985632121562958,0.140473276376724,0.304339796304703,-0.942148923873901,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.147164434194565,0.259054154157639,-0.954585552215576,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0928165391087532,-0.206099733710289,-0.974119126796722,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,-0.248975187540054,0.126625880599022,-0.960196435451508,-0.387186944484711,-0.118426606059074,-0.914363980293274,0.268629968166351,0.0369143784046173,-0.962535858154297,0.247289061546326,-0.083899550139904,-0.965302526950836,-0.387186944484711,-0.118426606059074,-0.914363980293274,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.215820819139481,0.143767416477203,-0.965791046619415,0.268629968166351,0.0369143784046173,-0.962535858154297, -0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.112991258502007,0.205170169472694,-0.972182154655457,0.215820819139481,0.143767416477203,-0.965791046619415,-0.0825225338339806,-0.437338262796402,-0.895502805709839,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.00743300467729568,0.191485971212387,-0.981467187404633,0.112991258502007,0.205170169472694,-0.972182154655457,-0.563491702079773,0.64732563495636,0.513270497322083,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.0701178461313248,0.161541283130646,-0.984371840953827,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.144488215446472,0.0409091152250767,-0.988660514354706,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.137990683317184,-0.0606634132564068,-0.988573968410492,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.0875953435897827,-0.144417569041252,-0.985632121562958,-0.00595734408125281,-0.196369305253029,-0.980511903762817,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.00595734408125281,-0.196369305253029,-0.980511903762817,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.190285310149193,-0.661201238632202,-0.725675106048584,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.0928165391087532,-0.206099733710289,-0.974119126796722,0.187471479177475,-0.174140021204948,-0.9667107462883,0.462890416383743,-0.538564682006836,-0.704045832157135,0.190285310149193,-0.661201238632202,-0.725675106048584,0.897243618965149,-0.439534097909927,-0.0419950634241104, 0.222749635577202,-0.155833333730698,-0.962340116500854,0.222749635577202,-0.155833333730698,-0.962340116500854,0.562596559524536,-0.566279470920563,0.602339327335358,0.247289061546326,-0.083899550139904,-0.965302526950836,0.268629968166351,0.0369143784046173,-0.962535858154297,0.765360236167908,0.200960800051689,0.611423313617706,0.713191151618958,-0.304302185773849,0.631473302841187,0.268629968166351,0.0369143784046173,-0.962535858154297,0.215820819139481,0.143767416477203,-0.965791046619415,0.56377899646759,0.570771217346191,0.596970200538635,0.765360236167908,0.200960800051689,0.611423313617706,0.215820819139481,0.143767416477203,-0.965791046619415,0.112991258502007,0.205170169472694,-0.972182154655457,0.205752313137054,0.791630685329437,0.575314521789551,0.56377899646759,0.570771217346191,0.596970200538635,0.112991258502007,0.205170169472694,-0.972182154655457,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.294516265392303,0.773154675960541,0.56168669462204,0.205752313137054,0.791630685329437,0.575314521789551,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.595909535884857,0.174546733498573,-0.783852875232697,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.602712452411652,-0.166520953178406,-0.780389904975891,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.441163808107376,-0.466001093387604,-0.766953408718109,-0.152386710047722,-0.647121250629425,-0.747002243995667,-0.203609570860863,-0.789041042327881,-0.579618275165558,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.152386710047722,-0.647121250629425,-0.747002243995667,0.190285310149193,-0.661201238632202,-0.725675106048584, 0.216090649366379,-0.800804913043976,-0.558584153652191,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.190285310149193,-0.661201238632202,-0.725675106048584,0.462890416383743,-0.538564682006836,-0.704045832157135,0.585278213024139,-0.600160777568817,-0.54521232843399,0.216090649366379,-0.800804913043976,-0.558584153652191,0.462890416383743,-0.538564682006836,-0.704045832157135,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.585278213024139,-0.600160777568817,-0.54521232843399,0.713191151618958,-0.304302185773849,0.631473302841187,0.765360236167908,0.200960800051689,0.611423313617706,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.765360236167908,0.200960800051689,0.611423313617706,0.56377899646759,0.570771217346191,0.596970200538635,-0.0524273775517941,0.0131540298461914,0.998538076877594,-0.0554697476327419,0.0163222346454859,0.9983269572258,0.56377899646759,0.570771217346191,0.596970200538635,0.205752313137054,0.791630685329437,0.575314521789551,-0.049451969563961,0.00981415808200836,0.998728275299072,-0.0524273775517941,0.0131540298461914,0.998538076877594,0.205752313137054,0.791630685329437,0.575314521789551,-0.294516265392303,0.773154675960541,0.56168669462204,-0.049451969563961,0.00981415808200836,0.998728275299072,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.518197417259216,0.525039672851563,0.675133109092712,-0.197243928909302,0.699767708778381,0.686600387096405,-0.525119662284851,0.574203789234161,-0.628123641014099,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.708945393562317,0.213501617312431,0.672170698642731,-0.518197417259216,0.525039672851563,0.675133109092712,-0.74471515417099,0.218894854187965,-0.630463659763336,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.708945393562317,0.213501617312431,0.672170698642731,-0.757954597473145,-0.199201464653015,-0.621147036552429,-0.560215413570404,-0.568411111831665,-0.602550804615021, -0.54542750120163,-0.47233721613884,0.692391753196716,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.560215413570404,-0.568411111831665,-0.602550804615021,-0.203609570860863,-0.789041042327881,-0.579618275165558,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.203609570860863,-0.789041042327881,-0.579618275165558,0.216090649366379,-0.800804913043976,-0.558584153652191,0.129999682307243,-0.674115300178528,0.727096021175385,-0.234902039170265,-0.663679361343384,0.710176527500153,0.216090649366379,-0.800804913043976,-0.558584153652191,0.585278213024139,-0.600160777568817,-0.54521232843399,0.451691657304764,-0.500417768955231,0.738618135452271,0.129999682307243,-0.674115300178528,0.727096021175385,0.585278213024139,-0.600160777568817,-0.54521232843399,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.64369797706604,-0.188760459423065,0.741634964942932,0.451691657304764,-0.500417768955231,0.738618135452271,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.634316861629486,0.173373848199844,0.753381490707397,0.654116809368134,0.177300214767456,0.735320270061493,0.64369797706604,-0.188760459423065,0.741634964942932,0.634316861629486,0.173373848199844,0.753381490707397,0.465378105640411,0.486588507890701,0.739361107349396,0.479970723390579,0.499263644218445,0.72136253118515,0.654116809368134,0.177300214767456,0.735320270061493,0.465378105640411,0.486588507890701,0.739361107349396,0.161993652582169,0.672100722789764,0.722522437572479,0.168181717395782,0.690484523773193,0.703523993492126,0.479970723390579,0.499263644218445,0.72136253118515,0.161993652582169,0.672100722789764,0.722522437572479,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.197243928909302,0.699767708778381,0.686600387096405,0.168181717395782,0.690484523773193,0.703523993492126,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.359685301780701,-0.109944850206375,-0.926573574542999,0.304495304822922,-0.222503274679184,-0.926161408424377,0.037516862154007,-0.0272734649479389,-0.998923718929291, 0.368203610181808,0.0610124915838242,-0.92774111032486,0.359685301780701,-0.109944850206375,-0.926573574542999,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.287971884012222,0.213878870010376,-0.933449566364288,0.368203610181808,0.0610124915838242,-0.92774111032486,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.140473276376724,0.304339796304703,-0.942148923873901,0.287971884012222,0.213878870010376,-0.933449566364288,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.0318344980478287,0.306514382362366,-0.951333522796631,0.140473276376724,0.304339796304703,-0.942148923873901,0.037516862154007,-0.0272734649479389,-0.998923718929291,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.0318344980478287,0.306514382362366,-0.951333522796631,-0.387186944484711,-0.118426606059074,-0.914363980293274,-0.248975187540054,0.126625880599022,-0.960196435451508,0.0634305104613304,-0.00267115444876254,-0.997982680797577,-0.191727757453918,-0.240914106369019,-0.951420426368713,-0.0825225338339806,-0.437338262796402,-0.895502805709839,-0.191727757453918,-0.240914106369019,-0.951420426368713,0.0634305104613304,-0.00267115444876254,-0.997982680797577,0.168216422200203,-0.316025346517563,-0.933719038963318,-0.197243928909302,0.699767708778381,0.686600387096405,-0.518197417259216,0.525039672851563,0.675133109092712,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.518197417259216,0.525039672851563,0.675133109092712,-0.708945393562317,0.213501617312431,0.672170698642731,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.708945393562317,0.213501617312431,0.672170698642731,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.718839228153229,-0.15140588581562,0.678488373756409,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.54542750120163,-0.47233721613884,0.692391753196716,-0.234902039170265,-0.663679361343384,0.710176527500153,-0.0474429130554199,0.0178848132491112,0.998713791370392, -0.234902039170265,-0.663679361343384,0.710176527500153,0.129999682307243,-0.674115300178528,0.727096021175385,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.129999682307243,-0.674115300178528,0.727096021175385,0.451691657304764,-0.500417768955231,0.738618135452271,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.451691657304764,-0.500417768955231,0.738618135452271,0.64369797706604,-0.188760459423065,0.741634964942932,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.64369797706604,-0.188760459423065,0.741634964942932,0.654116809368134,0.177300214767456,0.735320270061493,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.654116809368134,0.177300214767456,0.735320270061493,0.479970723390579,0.499263644218445,0.72136253118515,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.479970723390579,0.499263644218445,0.72136253118515,0.168181717395782,0.690484523773193,0.703523993492126,-0.0474429130554199,0.0178848132491112,0.998713791370392,0.168181717395782,0.690484523773193,0.703523993492126,-0.197243928909302,0.699767708778381,0.686600387096405,-0.0474429130554199,0.0178848132491112,0.998713791370392,-0.376014769077301,0.9161736369133,-0.138703793287277,-0.457403212785721,0.433727949857712,-0.776313304901123,-0.525119662284851,0.574203789234161,-0.628123641014099,0.462890416383743,-0.538564682006836,-0.704045832157135,0.187471479177475,-0.174140021204948,-0.9667107462883,0.230113714933395,-0.14894126355648,-0.961698591709137,0.690046310424805,-0.637357771396637,-0.342944711446762,-0.147164434194565,0.259054154157639,-0.954585552215576,-0.176630616188049,0.235003083944321,-0.955811262130737,0.230113714933395,-0.14894126355648,-0.961698591709137,0.187471479177475,-0.174140021204948,-0.9667107462883,0.0672855526208878,0.000956431380473077,-0.997733294963837,-0.176630616188049,0.235003083944321,-0.955811262130737,-0.147164434194565,0.259054154157639,-0.954585552215576,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.277595341205597,-0.251689046621323,-0.92714262008667, 0.0672855526208878,0.000956431380473077,-0.997733294963837,0.037516862154007,-0.0272734649479389,-0.998923718929291,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.0779055655002594,0.162667319178581,-0.983600556850433,0.277595341205597,-0.251689046621323,-0.92714262008667,0.304495304822922,-0.222503274679184,-0.926161408424377,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.568253636360168,0.691138505935669,-0.446559488773346,-0.0779055655002594,0.162667319178581,-0.983600556850433,-0.106314696371555,0.128722757101059,-0.985965311527252,-0.457403212785721,0.433727949857712,-0.776313304901123,0.0672584101557732,0.000950529880356044,-0.997735142707825,-0.186045140028,0.244106322526932,-0.951734900474548,-0.186045140028,0.244106322526932,-0.951734900474548,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.0672584101557732,0.000950529880356044,-0.997735142707825,0.285419285297394,-0.260888695716858,-0.922210872173309,-0.0494545698165894,0.00981395319104195,0.998728156089783,-0.563491702079773,0.64732563495636,0.513270497322083,-0.376014769077301,0.9161736369133,-0.138703793287277,0.161993652582169,0.672100722789764,0.722522437572479,-0.0524277351796627,0.0131527418270707,0.998538076877594,-0.0494545698165894,0.00981395319104195,0.998728156089783,0.161993652582169,0.672100722789764,0.722522437572479,0.465378105640411,0.486588507890701,0.739361107349396,-0.0554704740643501,0.0163217782974243,0.998326897621155,-0.0524277351796627,0.0131527418270707,0.998538076877594,0.465378105640411,0.486588507890701,0.739361107349396,0.634316861629486,0.173373848199844,0.753381490707397,0.562596559524536,-0.566279470920563,0.602339327335358,-0.0554704740643501,0.0163217782974243,0.998326897621155,0.634316861629486,0.173373848199844,0.753381490707397,0.897243618965149,-0.439534097909927,-0.0419950634241104,0.0671186223626137,0.000861435197293758,-0.997744619846344,-0.248975187540054,0.126625880599022,-0.960196435451508, -0.198622241616249,0.25632917881012,-0.945962250232697,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.213518917560577,-0.146410331130028,-0.965905606746674,-0.198622241616249,0.25632917881012,-0.945962250232697,-0.248975187540054,0.126625880599022,-0.960196435451508,0.247289061546326,-0.083899550139904,-0.965302526950836,0.562577784061432,-0.566266417503357,0.602369129657745,0.213518917560577,-0.146410331130028,-0.965905606746674,0.247289061546326,-0.083899550139904,-0.965302526950836,0.713191151618958,-0.304302185773849,0.631473302841187,0.713191151618958,-0.304302185773849,0.631473302841187,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.0554691106081009,0.016322173178196,0.9983269572258,0.562577784061432,-0.566266417503357,0.602369129657745,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0554691106081009,0.016322173178196,0.9983269572258,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.052426990121603,0.0131535343825817,0.998538136482239,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204,-0.559975147247314,0.642372965812683,0.523244559764862,-0.0494528710842133,0.00981275457888842,0.998728215694427,-0.294516265392303,0.773154675960541,0.56168669462204,-0.00743300467729568,0.191485971212387,-0.981467187404633,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.559975147247314,0.642372965812683,0.523244559764862,0.168216422200203,-0.316025346517563,-0.933719038963318,0.295631766319275,-0.272996246814728,-0.915464341640472,-0.0692261606454849,0.161251112818718,-0.984482526779175,-0.00743300467729568,0.191485971212387,-0.981467187404633,0.168216422200203,-0.316025346517563,-0.933719038963318,0.0671186223626137,0.000861435197293758,-0.997744619846344,0.0671186223626137,0.000861435197293758,-0.997744619846344, 0.295631766319275,-0.272996246814728,-0.915464341640472,0.448934882879257,0.813904881477356,-0.368803858757019,0.44893816113472,0.813904583454132,-0.368800550699234,0.440851420164108,0.897496819496155,0.0122249089181423,0.440847247838974,0.897498905658722,0.0122235044836998,0.44893816113472,0.813904583454132,-0.368800550699234,0.539011299610138,0.767137050628662,-0.347803890705109,0.440850377082825,0.897497296333313,0.0122277606278658,0.440851420164108,0.897496819496155,0.0122249089181423,0.539011299610138,0.767137050628662,-0.347803890705109,0.545111775398254,0.763338685035706,-0.346651464700699,0.440852701663971,0.897496223449707,0.012224905192852,0.440850377082825,0.897497296333313,0.0122277606278658,0.545111775398254,0.763338685035706,-0.346651464700699,0.455776125192642,0.810517728328705,-0.367871195077896,0.442016541957855,0.896921515464783,0.012377162463963,0.440852701663971,0.897496223449707,0.012224905192852,0.455776125192642,0.810517728328705,-0.367871195077896,0.142660588026047,0.912153422832489,-0.384218811988831,0.122088372707367,0.992165386676788,-0.0265009626746178,0.442016541957855,0.896921515464783,0.012377162463963,0.122088372707367,0.992165386676788,-0.0265009626746178,0.142660588026047,0.912153422832489,-0.384218811988831,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.61342579126358,0.783559501171112,-0.0987081080675125,0.142660588026047,0.912153422832489,-0.384218811988831,0.137940660119057,0.361901491880417,-0.921954274177551,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.513519883155823,0.72038060426712,-0.466207087039948,0.142660588026047,0.912153422832489,-0.384218811988831,0.455776125192642,0.810517728328705,-0.367871195077896,0.283052384853363,0.298188000917435,-0.911572933197021,0.137940660119057,0.361901491880417,-0.921954274177551,0.455776125192642,0.810517728328705,-0.367871195077896,0.545111775398254,0.763338685035706,-0.346651464700699,0.492568016052246,0.186314031481743,-0.850096344947815,0.283052384853363,0.298188000917435,-0.911572933197021,0.545111775398254,0.763338685035706,-0.346651464700699, 0.539011299610138,0.767137050628662,-0.347803890705109,0.478817075490952,0.194986343383789,-0.85598748922348,0.492568016052246,0.186314031481743,-0.850096344947815,0.539011299610138,0.767137050628662,-0.347803890705109,0.44893816113472,0.813904583454132,-0.368800550699234,0.316425144672394,0.418457597494125,-0.851333260536194,0.478817075490952,0.194986343383789,-0.85598748922348,0.44893816113472,0.813904583454132,-0.368800550699234,0.448934882879257,0.813904881477356,-0.368803858757019,0.388678818941116,0.606405913829803,-0.693686246871948,0.316425144672394,0.418457597494125,-0.851333260536194,-0.61342579126358,0.783559501171112,-0.0987081080675125,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.513519883155823,0.72038060426712,-0.466207087039948,-0.202121838927269,0.379350662231445,-0.902906358242035,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.202121838927269,0.379350662231445,-0.902906358242035,0.137940660119057,0.361901491880417,-0.921954274177551,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.407863765954971,-0.0665257051587105,-0.910615980625153,0.137940660119057,0.361901491880417,-0.921954274177551,0.283052384853363,0.298188000917435,-0.911572933197021,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.18805918097496,-0.322835922241211,-0.927583277225494,0.283052384853363,0.298188000917435,-0.911572933197021,0.492568016052246,0.186314031481743,-0.850096344947815,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.492568016052246,0.186314031481743,-0.850096344947815,0.478817075490952,0.194986343383789,-0.85598748922348,0.145911514759064,-0.481736391782761,-0.864083230495453,0.161093965172768,-0.487442761659622,-0.858165621757507,0.478817075490952,0.194986343383789,-0.85598748922348,0.316425144672394,0.418457597494125,-0.851333260536194, -0.0688509345054626,-0.381582528352737,-0.921766996383667,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.994015336036682,-0.013940011151135,-0.108347617089748,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.698107659816742,-0.714397788047791,-0.0477649942040443,-0.407863765954971,-0.0665257051587105,-0.910615980625153,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.877225399017334,-0.0474915951490402,-0.477723956108093,-0.18805918097496,-0.322835922241211,-0.927583277225494,-0.0553795695304871,-0.388206869363785,-0.919906795024872,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.0553795695304871,-0.388206869363785,-0.919906795024872,0.161093965172768,-0.487442761659622,-0.858165621757507,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.360949605703354,-0.846770226955414,-0.390762716531754,0.161093965172768,-0.487442761659622,-0.858165621757507,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.267079532146454,-0.890150487422943,-0.36918917298317,0.145911514759064,-0.481736391782761,-0.864083230495453,-0.0688509345054626,-0.381582528352737,-0.921766996383667,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.617421507835388,-0.677755653858185,-0.399296700954437,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.698107659816742,-0.714397788047791,-0.0477649942040443,-0.360949605703354,-0.846770226955414,-0.390762716531754,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.442009299993515,-0.896925032138824,-0.0123796230182052,-0.267079532146454,-0.890150487422943,-0.36918917298317,-0.273802310228348,-0.887621462345123,-0.370351791381836, -0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.440844893455505,-0.897499859333038,-0.0122388359159231,-0.273802310228348,-0.887621462345123,-0.370351791381836,-0.365646749734879,-0.844457924365997,-0.391399145126343,-0.440847545862198,-0.897498548030853,-0.0122386990115047,-0.440846532583237,-0.897499084472656,-0.0122378673404455,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.235922157764435,0.199316576123238,0.951111793518066,-0.421170502901077,0.887910008430481,0.185016736388206,-0.235922157764435,0.199316576123238,0.951111793518066,0.433050602674484,0.2669917345047,0.860919594764709,0.224865674972534,0.969921231269836,0.0932112112641335,-0.421170502901077,0.887910008430481,0.185016736388206,0.433050602674484,0.2669917345047,0.860919594764709,0.957085728645325,-0.0379634574055672,0.287307798862457,0.726850271224976,0.572953879833221,-0.378698468208313,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976,0.572953879833221,-0.378698468208313,0.957085728645325,-0.0379634574055672,0.287307798862457,0.456055998802185,-0.77651709318161,-0.434780597686768,0.24622069299221,-0.288397252559662,-0.925312042236328,0.24622069299221,-0.288397252559662,-0.925312042236328,0.456055998802185,-0.77651709318161,-0.434780597686768,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.370245814323425,0.399501115083694,0.838639914989471,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.370245814323425,0.399501115083694,0.838639914989471,0.375980079174042,0.371540576219559,0.848879635334015, 0.369482100009918,0.916309058666229,0.154469192028046,0.369482100009918,0.916309058666229,0.154469192028046,0.375980079174042,0.371540576219559,0.848879635334015,0.894815683364868,-0.12337201833725,0.429050445556641,0.928892433643341,0.347320407629013,-0.128558844327927,0.894815683364868,-0.12337201833725,0.429050445556641,0.416108936071396,-0.85736757516861,-0.302942514419556,0.484689444303513,-0.474302530288696,-0.734923958778381,0.928892433643341,0.347320407629013,-0.128558844327927,0.416108936071396,-0.85736757516861,-0.302942514419556,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.60913348197937,-0.356543242931366,-0.708401918411255,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.688949525356293,-0.657936096191406,-0.304086625576019,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.968230009078979,0.101840510964394,0.228383734822273,-0.409153193235397,0.62424099445343,0.665519952774048,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.409153193235397,0.62424099445343,0.665519952774048,0.232475742697716,0.544684231281281,0.805775463581085,0.487440526485443,0.864142239093781,0.125139698386192,0.232475742697716,0.544684231281281,0.805775463581085,0.731430292129517,-0.0698081851005554,0.678333699703217,0.977178752422333,0.20803302526474,0.0429406240582466,0.487440526485443,0.864142239093781,0.125139698386192,0.731430292129517,-0.0698081851005554,0.678333699703217,0.338283896446228,-0.929607927799225,0.146263748407364,0.618484795093536,-0.605106949806213,-0.501320481300354,0.977178752422333,0.20803302526474,0.0429406240582466,0.338283896446228,-0.929607927799225,0.146263748407364,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.411054730415344,-0.414192497730255,-0.812082886695862,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.681281208992004,-0.719342052936554,-0.135657235980034, -0.968230009078979,0.101840510964394,0.228383734822273,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.469395011663437,0.732399642467499,0.493212997913361,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.469395011663437,0.732399642467499,0.493212997913361,0.0926875099539757,0.587645053863525,0.803792417049408,0.554872810840607,0.810436189174652,0.187907695770264,0.00481484783813357,0.982931971549988,-0.183906376361847,0.0926875099539757,0.587645053863525,0.803792417049408,0.564271926879883,-0.0617093704640865,0.823279500007629,0.960403800010681,0.128028109669685,0.247453689575195,0.554872810840607,0.810436189174652,0.187907695770264,0.564271926879883,-0.0617093704640865,0.823279500007629,0.173397973179817,-0.937193632125854,0.302656918764114,0.640678882598877,-0.692017734050751,-0.33262899518013,0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013,0.173397973179817,-0.937193632125854,0.302656918764114,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.490928202867508,0.838506758213043,0.236423268914223,0.226359263062477,0.93932580947876,-0.257737308740616,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876,-0.257737308740616,-0.490928202867508,0.838506758213043,0.236423268914223,-0.0895224064588547,0.63932603597641,0.763706743717194,0.57053416967392,0.761871993541718,0.306662291288376,0.57053416967392,0.761871993541718,0.306662291288376,-0.0895224064588547,0.63932603597641,0.763706743717194,0.200342118740082,-0.0948356613516808,0.975125253200531, 0.818824291229248,0.0307636950165033,0.573219299316406,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.106568887829781,-0.917000472545624,0.384386867284775,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.818824291229248,0.0307636950165033,0.573219299316406,-0.106568887829781,-0.917000472545624,0.384386867284775,-0.688571929931641,-0.57403826713562,-0.443112581968308,0.0145619604736567,-0.473971128463745,-0.880419969558716,0.603054106235504,-0.796112895011902,-0.0502992123365402,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.471161872148514,0.881984531879425,-0.010475798510015,0.0175805017352104,0.980271637439728,-0.196871712803841,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.272446572780609,0.69793826341629,0.662310421466827,0.0640470013022423,0.825317442417145,0.561025023460388,0.0640470013022423,0.825317442417145,0.561025023460388,-0.272446572780609,0.69793826341629,0.662310421466827,-0.156113177537918,-0.0394117124378681,0.986952602863312,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.156113177537918,-0.0394117124378681,0.986952602863312,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.0483600646257401,0.41675278544426,-0.907732546329498,-0.0737737640738487,-0.545523285865784,-0.834842383861542, -0.126118883490562,0.0425354726612568,0.991102814674377,-0.488242149353027,0.767777740955353,0.414893865585327,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.693171083927155,-0.380507975816727,0.612149894237518,0.21278840303421,0.936659038066864,0.278192192316055,-0.488242149353027,0.767777740955353,0.414893865585327,-0.126118883490562,0.0425354726612568,0.991102814674377,0.426090598106384,0.13983453810215,0.89380818605423,0.732098400592804,0.597899973392487,-0.32641613483429,0.21278840303421,0.936659038066864,0.278192192316055,0.426090598106384,0.13983453810215,0.89380818605423,0.951123833656311,-0.0359408818185329,0.306711047887802,0.300222218036652,-0.191066533327103,-0.934537410736084,0.732098400592804,0.597899973392487,-0.32641613483429,0.951123833656311,-0.0359408818185329,0.306711047887802,0.565304636955261,-0.708869636058807,-0.421822786331177,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.686947405338287,-0.371219843626022,-0.624739229679108,0.300222218036652,-0.191066533327103,-0.934537410736084,0.565304636955261,-0.708869636058807,-0.421822786331177,-0.693171083927155,-0.380507975816727,0.612149894237518,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.513763785362244,-0.837060868740082,-0.188084691762924,0.839519679546356,-0.36930912733078,0.398519098758698,0.256522864103317,0.500971019268036,0.826573669910431,-0.378572434186935,0.294946253299713,0.877319574356079,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.622146844863892,-0.293455481529236,-0.725821733474731,0.408187568187714,-0.202498286962509,-0.890155792236328,0.839519679546356,-0.36930912733078,0.398519098758698,-0.0640924125909805,0.448149740695953,-0.891658008098602,0.226359263062477,0.93932580947876,-0.257737308740616,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.361195623874664,0.398085296154022,-0.843247175216675,0.226359263062477,0.93932580947876,-0.257737308740616,0.57053416967392,0.761871993541718,0.306662291288376, 0.158035054802895,0.827060580253601,0.539440214633942,-0.129192128777504,0.97855806350708,-0.160416796803474,0.57053416967392,0.761871993541718,0.306662291288376,0.818824291229248,0.0307636950165033,0.573219299316406,0.379477560520172,-0.0227062478661537,0.924922287464142,0.158035054802895,0.827060580253601,0.539440214633942,0.818824291229248,0.0307636950165033,0.573219299316406,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.143845021724701,-0.97483503818512,0.170309022068977,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,0.603054106235504,-0.796112895011902,-0.0502992123365402,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.282981604337692,-0.529688954353333,-0.799594283103943,0.0145619604736567,-0.473971128463745,-0.880419969558716,-0.0640924125909805,0.448149740695953,-0.891658008098602,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.282981604337692,-0.529688954353333,-0.799594283103943,-0.129192128777504,0.97855806350708,-0.160416796803474,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.361195623874664,0.398085296154022,-0.843247175216675,0.158035054802895,0.827060580253601,0.539440214633942,-0.272446572780609,0.69793826341629,0.662310421466827,-0.471161872148514,0.881984531879425,-0.010475798510015,-0.129192128777504,0.97855806350708,-0.160416796803474,0.379477560520172,-0.0227062478661537,0.924922287464142,-0.156113177537918,-0.0394117124378681,0.986952602863312,-0.272446572780609,0.69793826341629,0.662310421466827,0.158035054802895,0.827060580253601,0.539440214633942,-0.344938427209854,-0.869564116001129,0.353377550840378,-0.156113177537918,-0.0394117124378681,0.986952602863312,0.379477560520172,-0.0227062478661537,0.924922287464142,0.143845021724701,-0.97483503818512,0.170309022068977,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.344938427209854,-0.869564116001129,0.353377550840378,0.143845021724701,-0.97483503818512,0.170309022068977, -0.282981604337692,-0.529688954353333,-0.799594283103943,-0.361195623874664,0.398085296154022,-0.843247175216675,-0.636273860931396,0.352563947439194,-0.686188161373138,-0.560525834560394,-0.537862956523895,-0.629693746566772,-0.282981604337692,-0.529688954353333,-0.799594283103943,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.421170502901077,0.887910008430481,0.185016736388206,-0.466424465179443,0.73600161075592,0.490662693977356,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.421170502901077,0.887910008430481,0.185016736388206,0.224865674972534,0.969921231269836,0.0932112112641335,0.32935905456543,0.802997291088104,0.496707141399384,-0.466424465179443,0.73600161075592,0.490662693977356,0.32935905456543,0.802997291088104,0.496707141399384,0.224865674972534,0.969921231269836,0.0932112112641335,0.726850271224976,0.572953879833221,-0.378698468208313,0.955747485160828,0.277235507965088,-0.0984230935573578,0.955747485160828,0.277235507965088,-0.0984230935573578,0.726850271224976,0.572953879833221,-0.378698468208313,0.24622069299221,-0.288397252559662,-0.925312042236328,0.266901016235352,-0.573494374752045,-0.774511456489563,0.266901016235352,-0.573494374752045,-0.774511456489563,0.24622069299221,-0.288397252559662,-0.925312042236328,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.732778429985046,-0.419793635606766,-0.535545647144318,-0.961783766746521,0.263442039489746,-0.0746343955397606,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.349220633506775,0.932596325874329,0.0911537334322929,-0.408735007047653,0.821314215660095,0.397968202829361,-0.466424465179443,0.73600161075592,0.490662693977356,-0.370245814323425,0.399501115083694,0.838639914989471,-0.944567203521729,-0.0448826812207699,0.32523587346077,-0.991045475006104,0.116085380315781,0.0659778565168381, -0.349220633506775,0.932596325874329,0.0911537334322929,0.369482100009918,0.916309058666229,0.154469192028046,0.314681202173233,0.790566682815552,0.525338053703308,-0.408735007047653,0.821314215660095,0.397968202829361,0.32935905456543,0.802997291088104,0.496707141399384,0.375980079174042,0.371540576219559,0.848879635334015,-0.370245814323425,0.399501115083694,0.838639914989471,-0.466424465179443,0.73600161075592,0.490662693977356,0.369482100009918,0.916309058666229,0.154469192028046,0.928892433643341,0.347320407629013,-0.128558844327927,0.935888707637787,0.150985181331635,0.318301498889923,0.314681202173233,0.790566682815552,0.525338053703308,0.955747485160828,0.277235507965088,-0.0984230935573578,0.894815683364868,-0.12337201833725,0.429050445556641,0.375980079174042,0.371540576219559,0.848879635334015,0.32935905456543,0.802997291088104,0.496707141399384,0.928892433643341,0.347320407629013,-0.128558844327927,0.484689444303513,-0.474302530288696,-0.734923958778381,0.477653324604034,-0.817450523376465,-0.321903645992279,0.935888707637787,0.150985181331635,0.318301498889923,0.416108936071396,-0.85736757516861,-0.302942514419556,0.894815683364868,-0.12337201833725,0.429050445556641,0.955747485160828,0.277235507965088,-0.0984230935573578,0.266901016235352,-0.573494374752045,-0.774511456489563,0.477653324604034,-0.817450523376465,-0.321903645992279,0.484689444303513,-0.474302530288696,-0.734923958778381,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.688949525356293,-0.657936096191406,-0.304086625576019,0.416108936071396,-0.85736757516861,-0.302942514419556,0.266901016235352,-0.573494374752045,-0.774511456489563,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.60913348197937,-0.356543242931366,-0.708401918411255,-0.884408414363861,0.372294396162033,-0.281458079814911,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.991045475006104,0.116085380315781,0.0659778565168381,-0.944567203521729,-0.0448826812207699,0.32523587346077, -0.688949525356293,-0.657936096191406,-0.304086625576019,-0.733418405056,-0.496127247810364,-0.464709877967834,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.1602942943573,0.98438024520874,-0.0728094503283501,-0.327859699726105,0.917791128158569,0.223981082439423,-0.408735007047653,0.821314215660095,0.397968202829361,-0.409153193235397,0.62424099445343,0.665519952774048,-0.968230009078979,0.101840510964394,0.228383734822273,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.1602942943573,0.98438024520874,-0.0728094503283501,0.487440526485443,0.864142239093781,0.125139698386192,0.318696260452271,0.794055461883545,0.517598927021027,-0.327859699726105,0.917791128158569,0.223981082439423,0.314681202173233,0.790566682815552,0.525338053703308,0.232475742697716,0.544684231281281,0.805775463581085,-0.409153193235397,0.62424099445343,0.665519952774048,-0.408735007047653,0.821314215660095,0.397968202829361,0.487440526485443,0.864142239093781,0.125139698386192,0.977178752422333,0.20803302526474,0.0429406240582466,0.865680992603302,0.0555743537843227,0.497501730918884,0.318696260452271,0.794055461883545,0.517598927021027,0.935888707637787,0.150985181331635,0.318301498889923,0.731430292129517,-0.0698081851005554,0.678333699703217,0.232475742697716,0.544684231281281,0.805775463581085,0.314681202173233,0.790566682815552,0.525338053703308,0.977178752422333,0.20803302526474,0.0429406240582466,0.618484795093536,-0.605106949806213,-0.501320481300354,0.482842773199081,-0.868827641010284,-0.109550587832928,0.865680992603302,0.0555743537843227,0.497501730918884,0.338283896446228,-0.929607927799225,0.146263748407364,0.731430292129517,-0.0698081851005554,0.678333699703217,0.935888707637787,0.150985181331635,0.318301498889923,0.477653324604034,-0.817450523376465,-0.321903645992279,0.482842773199081,-0.868827641010284,-0.109550587832928,0.618484795093536,-0.605106949806213,-0.501320481300354,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.610901474952698,-0.556556701660156,-0.563066601753235, -0.681281208992004,-0.719342052936554,-0.135657235980034,0.338283896446228,-0.929607927799225,0.146263748407364,0.477653324604034,-0.817450523376465,-0.321903645992279,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.411054730415344,-0.414192497730255,-0.812082886695862,-0.71156644821167,0.465114206075668,-0.52663266658783,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.968230009078979,0.101840510964394,0.228383734822273,-0.681281208992004,-0.719342052936554,-0.135657235980034,-0.699752986431122,-0.557938694953918,-0.446150362491608,-0.969522476196289,0.24116288125515,-0.043204452842474,-0.46152138710022,0.495068192481995,-0.73614227771759,0.00481484783813357,0.982931971549988,-0.183906376361847,-0.258809417486191,0.965757608413696,0.0181634556502104,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.327859699726105,0.917791128158569,0.223981082439423,-0.469395011663437,0.732399642467499,0.493212997913361,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.878820657730103,0.367129892110825,-0.304778426885605,0.00481484783813357,0.982931971549988,-0.183906376361847,0.554872810840607,0.810436189174652,0.187907695770264,0.248662516474724,0.809659063816071,0.531619369983673,-0.258809417486191,0.965757608413696,0.0181634556502104,0.318696260452271,0.794055461883545,0.517598927021027,0.0926875099539757,0.587645053863525,0.803792417049408,-0.469395011663437,0.732399642467499,0.493212997913361,-0.327859699726105,0.917791128158569,0.223981082439423,0.554872810840607,0.810436189174652,0.187907695770264,0.960403800010681,0.128028109669685,0.247453689575195,0.678723812103271,-0.00691590458154678,0.734361052513123,0.248662516474724,0.809659063816071,0.531619369983673,0.865680992603302,0.0555743537843227,0.497501730918884,0.564271926879883,-0.0617093704640865,0.823279500007629,0.0926875099539757,0.587645053863525,0.803792417049408,0.318696260452271,0.794055461883545,0.517598927021027,0.678723812103271,-0.00691590458154678,0.734361052513123, 0.960403800010681,0.128028109669685,0.247453689575195,0.640678882598877,-0.692017734050751,-0.33262899518013,0.291824638843536,-0.956135869026184,0.0253480579704046,0.173397973179817,-0.937193632125854,0.302656918764114,0.564271926879883,-0.0617093704640865,0.823279500007629,0.865680992603302,0.0555743537843227,0.497501730918884,0.482842773199081,-0.868827641010284,-0.109550587832928,0.291824638843536,-0.956135869026184,0.0253480579704046,0.640678882598877,-0.692017734050751,-0.33262899518013,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.733310759067535,-0.636212587356567,-0.239768356084824,0.173397973179817,-0.937193632125854,0.302656918764114,0.482842773199081,-0.868827641010284,-0.109550587832928,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.267235428094864,-0.431134343147278,-0.861805319786072,-0.46152138710022,0.495068192481995,-0.73614227771759,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.971816718578339,0.234788149595261,-0.0211378261446953,-0.733310759067535,-0.636212587356567,-0.239768356084824,-0.610901474952698,-0.556556701660156,-0.563066601753235,-0.878820657730103,0.367129892110825,-0.304778426885605,-0.258809417486191,0.965757608413696,0.0181634556502104,-0.490928202867508,0.838506758213043,0.236423268914223,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.672615647315979,0.435778170824051,-0.598068177700043,0.248662516474724,0.809659063816071,0.531619369983673,-0.0895224064588547,0.63932603597641,0.763706743717194,-0.490928202867508,0.838506758213043,0.236423268914223,-0.258809417486191,0.965757608413696,0.0181634556502104,0.678723812103271,-0.00691590458154678,0.734361052513123,0.200342118740082,-0.0948356613516808,0.975125253200531,-0.0895224064588547,0.63932603597641,0.763706743717194,0.248662516474724,0.809659063816071,0.531619369983673,-0.106568887829781,-0.917000472545624,0.384386867284775,0.200342118740082,-0.0948356613516808,0.975125253200531, 0.678723812103271,-0.00691590458154678,0.734361052513123,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.106568887829781,-0.917000472545624,0.384386867284775,0.291824638843536,-0.956135869026184,0.0253480579704046,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.853244364261627,0.346652209758759,-0.389623284339905,-0.688571929931641,-0.57403826713562,-0.443112581968308,-0.507272720336914,-0.507041871547699,-0.696837842464447,-0.672615647315979,0.435778170824051,-0.598068177700043,-0.41831374168396,0.542322099208832,0.728629112243652,-0.235922157764435,0.199316576123238,0.951111793518066,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.374769628047943,0.711422443389893,0.594496309757233,0.433050602674484,0.2669917345047,0.860919594764709,-0.235922157764435,0.199316576123238,0.951111793518066,-0.41831374168396,0.542322099208832,0.728629112243652,0.957085728645325,-0.0379634574055672,0.287307798862457,0.433050602674484,0.2669917345047,0.860919594764709,0.374769628047943,0.711422443389893,0.594496309757233,0.948985993862152,0.294174909591675,-0.113519780337811,0.456055998802185,-0.77651709318161,-0.434780597686768,0.957085728645325,-0.0379634574055672,0.287307798862457,0.948985993862152,0.294174909591675,-0.113519780337811,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.634028613567352,-0.730724096298218,-0.253081113100052,0.456055998802185,-0.77651709318161,-0.434780597686768,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.845829725265503,-0.252385228872299,0.469972103834152,-0.634028613567352,-0.730724096298218,-0.253081113100052,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.238327190279961,0.167034506797791,0.956712901592255,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.693171083927155,-0.380507975816727,0.612149894237518, -0.871865928173065,-0.182605341076851,0.454428285360336,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.488242149353027,0.767777740955353,0.414893865585327,-0.41831374168396,0.542322099208832,0.728629112243652,-0.976834237575531,-0.0582810156047344,0.205908060073853,0.359920799732208,0.294513046741486,0.88527911901474,0.426090598106384,0.13983453810215,0.89380818605423,-0.126118883490562,0.0425354726612568,0.991102814674377,-0.238327190279961,0.167034506797791,0.956712901592255,-0.488242149353027,0.767777740955353,0.414893865585327,0.21278840303421,0.936659038066864,0.278192192316055,0.374769628047943,0.711422443389893,0.594496309757233,-0.41831374168396,0.542322099208832,0.728629112243652,0.971750199794769,0.155082061886787,0.177907571196556,0.951123833656311,-0.0359408818185329,0.306711047887802,0.426090598106384,0.13983453810215,0.89380818605423,0.359920799732208,0.294513046741486,0.88527911901474,0.21278840303421,0.936659038066864,0.278192192316055,0.732098400592804,0.597899973392487,-0.32641613483429,0.948985993862152,0.294174909591675,-0.113519780337811,0.374769628047943,0.711422443389893,0.594496309757233,0.565304636955261,-0.708869636058807,-0.421822786331177,0.951123833656311,-0.0359408818185329,0.306711047887802,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.948985993862152,0.294174909591675,-0.113519780337811,0.732098400592804,0.597899973392487,-0.32641613483429,0.300222218036652,-0.191066533327103,-0.934537410736084,0.373983144760132,-0.495919108390808,-0.783709645271301,-0.513763785362244,-0.837060868740082,-0.188084691762924,0.565304636955261,-0.708869636058807,-0.421822786331177,0.502565324306488,-0.459530532360077,-0.732297599315643,-0.632987320423126,-0.605237662792206,-0.482715725898743,0.373983144760132,-0.495919108390808,-0.783709645271301,0.300222218036652,-0.191066533327103,-0.934537410736084,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065,-0.182605341076851,0.454428285360336, -0.693171083927155,-0.380507975816727,0.612149894237518,-0.513763785362244,-0.837060868740082,-0.188084691762924,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.686947405338287,-0.371219843626022,-0.624739229679108,-0.985833287239075,0.163165256381035,0.0388573855161667,-0.976834237575531,-0.0582810156047344,0.205908060073853,-0.678203999996185,-0.559847712516785,-0.476035594940186,-0.871865928173065,-0.182605341076851,0.454428285360336,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.378572434186935,0.294946253299713,0.877319574356079,-0.238327190279961,0.167034506797791,0.956712901592255,-0.378572434186935,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.359920799732208,0.294513046741486,0.88527911901474,-0.238327190279961,0.167034506797791,0.956712901592255,0.256522864103317,0.500971019268036,0.826573669910431,0.916088342666626,0.400877177715302,0.00892047397792339,0.971750199794769,0.155082061886787,0.177907571196556,0.359920799732208,0.294513046741486,0.88527911901474,0.916088342666626,0.400877177715302,0.00892047397792339,0.408187568187714,-0.202498286962509,-0.890155792236328,0.502565324306488,-0.459530532360077,-0.732297599315643,0.971750199794769,0.155082061886787,0.177907571196556,0.502565324306488,-0.459530532360077,-0.732297599315643,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.632987320423126,-0.605237662792206,-0.482715725898743,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.871865928173065,-0.182605341076851,0.454428285360336,0.957568049430847,0.202899873256683,-0.204682797193527,0.497125834226608,0.858945310115814,0.122795671224594,0.373975813388824,0.180082246661186,0.909787058830261,0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,0.497125834226608,0.858945310115814,0.122795671224594, -0.14895835518837,0.98171204328537,0.118544928729534,-0.295474290847778,0.289970576763153,0.910281300544739,-0.295474290847778,0.289970576763153,0.910281300544739,-0.14895835518837,0.98171204328537,0.118544928729534,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.558293402194977,-0.744525730609894,-0.366046398878098,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.386270940303802,-0.268448829650879,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.547039151191711,-0.767979085445404,-0.333100914955139,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.626136362552643,-0.462657570838928,-0.627615451812744,0.957568049430847,0.202899873256683,-0.204682797193527,0.883933007717133,-0.306944608688354,0.352771013975143,0.547039151191711,-0.767979085445404,-0.333100914955139,0.975085556507111,-0.105434238910675,0.195171296596527,0.86001181602478,0.317273110151291,-0.399646580219269,0.416134297847748,0.908453166484833,0.0393080599606037,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,-0.287073612213135,0.937016367912292,0.198970049619675,-0.234096929430962,0.390781313180923,0.890218317508698,0.50421130657196,0.371916502714157,0.779390156269073,-0.287073612213135,0.937016367912292,0.198970049619675,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.608099102973938,-0.439832001924515,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.484535843133926,-0.391038775444031,-0.782504737377167, 0.599041819572449,-0.698567867279053,-0.391346126794815,0.599041819572449,-0.698567867279053,-0.391346126794815,0.484535843133926,-0.391038775444031,-0.782504737377167,0.86001181602478,0.317273110151291,-0.399646580219269,0.975085556507111,-0.105434238910675,0.195171296596527,0.661870062351227,0.421795666217804,-0.619690597057343,0.210457503795624,0.972685754299164,-0.0979291051626205,0.533453047275543,0.59451025724411,0.601652204990387,0.994639039039612,0.0399277433753014,0.0953883677721024,0.210457503795624,0.972685754299164,-0.0979291051626205,-0.410943269729614,0.892482936382294,0.186010345816612,-0.0871332660317421,0.554765582084656,0.827431499958038,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.947485268115997,0.26874190568924,0.1733478307724,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.717132270336151,-0.562979400157928,-0.410822957754135,0.271069228649139,-0.435710102319717,-0.858299553394318,0.610304296016693,-0.760079562664032,-0.223176524043083,0.610304296016693,-0.760079562664032,-0.223176524043083,0.271069228649139,-0.435710102319717,-0.858299553394318,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612,0.0399277433753014,0.0953883677721024,0.38824450969696,0.468270719051361,-0.793718278408051,0.0321094393730164,0.982071399688721,-0.185754418373108,0.576588332653046,0.699405252933502,0.422348409891129,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164,0.982071399688721,-0.185754418373108,-0.472547024488449,0.842842221260071,0.257519453763962,0.0535213947296143,0.588878512382507,0.806447505950928,0.0535213947296143,0.588878512382507,0.806447505950928, -0.472547024488449,0.842842221260071,0.257519453763962,-0.908354461193085,0.186973229050636,0.374076366424561,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.908354461193085,0.186973229050636,0.374076366424561,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.721794605255127,-0.649047315120697,-0.240312546491623,0.121086686849594,-0.443384885787964,-0.888114750385284,0.652944087982178,-0.679937779903412,-0.333689540624619,-0.189478844404221,-0.925744891166687,0.327252507209778,0.652944087982178,-0.679937779903412,-0.333689540624619,0.121086686849594,-0.443384885787964,-0.888114750385284,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672,0.173448488116264,-0.15290105342865,0.813007533550262,0.294095903635025,-0.502519965171814,-0.0286615137010813,0.447031855583191,-0.894058763980865,-0.199642360210419,0.952765345573425,-0.228869169950485,0.569939315319061,0.805042445659637,0.164547294378281,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.475066125392914,0.794856011867523,0.37751305103302,0.231555417180061,0.629199266433716,0.741950392723084,0.569939315319061,0.805042445659637,0.164547294378281,-0.475066125392914,0.794856011867523,0.37751305103302,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.231555417180061,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.65307891368866,-0.756489455699921,0.0348084531724453,0.0996505841612816,-0.92350834608078,0.370408058166504,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.65307891368866,-0.756489455699921,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.585191905498505,-0.614215075969696,-0.529424488544464,0.585191905498505,-0.614215075969696,-0.529424488544464,-0.162778183817863,-0.468375027179718,-0.86840546131134, -0.0286615137010813,0.447031855583191,-0.894058763980865,0.813007533550262,0.294095903635025,-0.502519965171814,0.558855295181274,0.314870893955231,-0.767161726951599,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.0175805017352104,0.980271637439728,-0.196871712803841,0.519844651222229,0.850727140903473,-0.0776200741529465,0.0175805017352104,0.980271637439728,-0.196871712803841,0.0640470013022423,0.825317442417145,0.561025023460388,0.402456730604172,0.676650583744049,0.616581320762634,0.519844651222229,0.850727140903473,-0.0776200741529465,0.0640470013022423,0.825317442417145,0.561025023460388,0.0680289566516876,0.0137546937912703,0.997588515281677,0.284913867712021,-0.0533209033310413,0.957068920135498,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.0680289566516876,0.0137546937912703,0.997588515281677,-0.0146371489390731,-0.971577882766724,0.236267194151878,0.334185361862183,-0.890982747077942,0.307359427213669,0.334185361862183,-0.890982747077942,0.307359427213669,-0.0146371489390731,-0.971577882766724,0.236267194151878,-0.0737737640738487,-0.545523285865784,-0.834842383861542,0.435699939727783,-0.569284319877625,-0.697195053100586,0.435699939727783,-0.569284319877625,-0.697195053100586,-0.0737737640738487,-0.545523285865784,-0.834842383861542,-0.0483600646257401,0.41675278544426,-0.907732546329498,0.558855295181274,0.314870893955231,-0.767161726951599,0.260944664478302,0.0303234942257404,0.964877367019653,0.744088768959045,-0.425844013690948,0.514770567417145,0.990352332592011,0.100834503769875,-0.0950506180524826,0.586896598339081,0.733868896961212,0.342036306858063,-0.114175498485565,0.946973264217377,0.300342559814453,-0.292137324810028,0.162486374378204,0.942472279071808,0.260944664478302,0.0303234942257404,0.964877367019653,0.586896598339081,0.733868896961212,0.342036306858063,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.292137324810028,0.162486374378204,0.942472279071808, -0.114175498485565,0.946973264217377,0.300342559814453,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.571836888790131,-0.410920888185501,-0.710032820701599,0.744088768959045,-0.425844013690948,0.514770567417145,0.430197030305862,-0.866838395595551,-0.252034991979599,0.571836888790131,-0.410920888185501,-0.710032820701599,0.990352332592011,0.100834503769875,-0.0950506180524826,-0.799655735492706,-0.317605823278427,0.509585380554199,0.612414479255676,-0.645280599594116,0.456685394048691,0.511097252368927,0.266881614923477,0.817039608955383,-0.110857367515564,0.512554824352264,0.85146826505661,0.612414479255676,-0.645280599594116,0.456685394048691,-0.799655735492706,-0.317605823278427,0.509585380554199,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.268526494503021,0.378220826387405,-0.885913372039795,0.167536497116089,0.969197690486908,-0.18051965534687,-0.199642360210419,0.952765345573425,-0.228869169950485,-0.199642360210419,0.952765345573425,-0.228869169950485,0.167536497116089,0.969197690486908,-0.18051965534687,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.475066125392914,0.794856011867523,0.37751305103302,-0.475066125392914,0.794856011867523,0.37751305103302,-0.0316924452781677,0.833044230937958,0.55229789018631,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.730549097061157,0.0796399638056755,0.67820018529892,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.65307891368866,-0.756489455699921,0.0348084531724453, -0.18044501543045,-0.964608788490295,0.19227434694767,0.138857930898666,-0.542990744113922,-0.828178465366364,-0.162778183817863,-0.468375027179718,-0.86840546131134,-0.65307891368866,-0.756489455699921,0.0348084531724453,-0.162778183817863,-0.468375027179718,-0.86840546131134,0.138857930898666,-0.542990744113922,-0.828178465366364,0.268526494503021,0.378220826387405,-0.885913372039795,-0.0286615137010813,0.447031855583191,-0.894058763980865,0.167536497116089,0.969197690486908,-0.18051965534687,0.268526494503021,0.378220826387405,-0.885913372039795,0.558855295181274,0.314870893955231,-0.767161726951599,0.519844651222229,0.850727140903473,-0.0776200741529465,-0.0316924452781677,0.833044230937958,0.55229789018631,0.167536497116089,0.969197690486908,-0.18051965534687,0.519844651222229,0.850727140903473,-0.0776200741529465,0.402456730604172,0.676650583744049,0.616581320762634,-0.25203549861908,-0.00277848681434989,0.967713952064514,-0.0316924452781677,0.833044230937958,0.55229789018631,0.402456730604172,0.676650583744049,0.616581320762634,0.284913867712021,-0.0533209033310413,0.957068920135498,0.334185361862183,-0.890982747077942,0.307359427213669,-0.18044501543045,-0.964608788490295,0.19227434694767,-0.25203549861908,-0.00277848681434989,0.967713952064514,0.284913867712021,-0.0533209033310413,0.957068920135498,0.435699939727783,-0.569284319877625,-0.697195053100586,0.138857930898666,-0.542990744113922,-0.828178465366364,-0.18044501543045,-0.964608788490295,0.19227434694767,0.334185361862183,-0.890982747077942,0.307359427213669,0.268526494503021,0.378220826387405,-0.885913372039795,0.138857930898666,-0.542990744113922,-0.828178465366364,0.435699939727783,-0.569284319877625,-0.697195053100586,0.558855295181274,0.314870893955231,-0.767161726951599,0.957568049430847,0.202899873256683,-0.204682797193527,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.573537588119507,0.703198969364166,0.420197457075119,0.497125834226608,0.858945310115814,0.122795671224594,0.497125834226608,0.858945310115814,0.122795671224594,0.573537588119507,0.703198969364166,0.420197457075119, -0.208385854959488,0.819956362247467,0.533148169517517,-0.14895835518837,0.98171204328537,0.118544928729534,-0.208385854959488,0.819956362247467,0.533148169517517,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.14895835518837,0.98171204328537,0.118544928729534,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.386270940303802,-0.268448829650879,-0.88245677947998,-0.733866095542908,0.619026124477386,-0.279727041721344,-0.404285073280334,-0.552336990833282,-0.72902500629425,0.631527423858643,-0.539189040660858,-0.557178795337677,0.626136362552643,-0.462657570838928,-0.627615451812744,-0.386270940303802,-0.268448829650879,-0.88245677947998,0.626136362552643,-0.462657570838928,-0.627615451812744,0.631527423858643,-0.539189040660858,-0.557178795337677,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.957568049430847,0.202899873256683,-0.204682797193527,0.968059420585632,0.180046543478966,-0.17448265850544,0.509348154067993,0.792352139949799,0.335771501064301,0.416134297847748,0.908453166484833,0.0393080599606037,0.86001181602478,0.317273110151291,-0.399646580219269,0.573537588119507,0.703198969364166,0.420197457075119,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.975085556507111,-0.105434238910675,0.195171296596527,0.50421130657196,0.371916502714157,0.779390156269073,0.416134297847748,0.908453166484833,0.0393080599606037,0.509348154067993,0.792352139949799,0.335771501064301,-0.190792232751846,0.806503474712372,0.559598445892334,-0.287073612213135,0.937016367912292,0.198970049619675,-0.208385854959488,0.819956362247467,0.533148169517517,0.573537588119507,0.703198969364166,0.420197457075119,0.50421130657196,0.371916502714157,0.779390156269073,-0.234096929430962,0.390781313180923,0.890218317508698,-0.287073612213135,0.937016367912292,0.198970049619675,-0.190792232751846,0.806503474712372,0.559598445892334,-0.873119652271271,0.208043858408928,0.440885275602341,-0.91410881280899,0.405452340841293,-0.00367248360998929, -0.941002309322357,0.337059259414673,0.0300944726914167,-0.208385854959488,0.819956362247467,0.533148169517517,-0.234096929430962,0.390781313180923,0.890218317508698,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.91410881280899,0.405452340841293,-0.00367248360998929,-0.873119652271271,0.208043858408928,0.440885275602341,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.608099102973938,-0.439832001924515,-0.660880744457245,-0.506093978881836,-0.828284025192261,-0.240446254611015,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.941002309322357,0.337059259414673,0.0300944726914167,-0.834793627262115,-0.068818561732769,0.546245038509369,-0.567008674144745,-0.784497559070587,-0.251126945018768,0.596852362155914,-0.598833739757538,-0.534008800983429,0.484535843133926,-0.391038775444031,-0.782504737377167,-0.608099102973938,-0.439832001924515,-0.660880744457245,0.599041819572449,-0.698567867279053,-0.391346126794815,0.631527423858643,-0.539189040660858,-0.557178795337677,-0.404285073280334,-0.552336990833282,-0.72902500629425,-0.506093978881836,-0.828284025192261,-0.240446254611015,0.484535843133926,-0.391038775444031,-0.782504737377167,0.596852362155914,-0.598833739757538,-0.534008800983429,0.968059420585632,0.180046543478966,-0.17448265850544,0.86001181602478,0.317273110151291,-0.399646580219269,0.996209383010864,0.0533985421061516,-0.0686690136790276,0.631527423858643,-0.539189040660858,-0.557178795337677,0.599041819572449,-0.698567867279053,-0.391346126794815,0.975085556507111,-0.105434238910675,0.195171296596527,0.851017236709595,0.312567472457886,-0.421984851360321,0.411976963281631,0.894454181194305,0.173858374357224,0.210457503795624,0.972685754299164,-0.0979291051626205,0.661870062351227,0.421795666217804,-0.619690597057343,0.509348154067993,0.792352139949799,0.335771501064301,0.968059420585632,0.180046543478966,-0.17448265850544,0.994639039039612,0.0399277433753014,0.0953883677721024,0.533453047275543,0.59451025724411,0.601652204990387,0.210457503795624,0.972685754299164,-0.0979291051626205, 0.411976963281631,0.894454181194305,0.173858374357224,-0.195588424801826,0.810276031494141,0.552447199821472,-0.410943269729614,0.892482936382294,0.186010345816612,-0.190792232751846,0.806503474712372,0.559598445892334,0.509348154067993,0.792352139949799,0.335771501064301,0.533453047275543,0.59451025724411,0.601652204990387,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.410943269729614,0.892482936382294,0.186010345816612,-0.195588424801826,0.810276031494141,0.552447199821472,-0.785535871982574,0.107658803462982,0.60937911272049,-0.947485268115997,0.26874190568924,0.1733478307724,-0.873119652271271,0.208043858408928,0.440885275602341,-0.190792232751846,0.806503474712372,0.559598445892334,-0.0871332660317421,0.554765582084656,0.827431499958038,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.947485268115997,0.26874190568924,0.1733478307724,-0.785535871982574,0.107658803462982,0.60937911272049,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.717132270336151,-0.562979400157928,-0.410822957754135,-0.373132437467575,-0.907169759273529,0.194461092352867,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.873119652271271,0.208043858408928,0.440885275602341,-0.636269569396973,-0.0266684051603079,0.771005690097809,-0.546746909618378,-0.836352705955505,-0.0397748313844204,0.493326157331467,-0.591391324996948,-0.637875854969025,0.271069228649139,-0.435710102319717,-0.858299553394318,-0.717132270336151,-0.562979400157928,-0.410822957754135,0.610304296016693,-0.760079562664032,-0.223176524043083,0.596852362155914,-0.598833739757538,-0.534008800983429,-0.567008674144745,-0.784497559070587,-0.251126945018768,-0.373132437467575,-0.907169759273529,0.194461092352867,0.271069228649139,-0.435710102319717,-0.858299553394318,0.493326157331467,-0.591391324996948,-0.637875854969025,0.851017236709595,0.312567472457886,-0.421984851360321,0.661870062351227,0.421795666217804,-0.619690597057343,0.994639039039612,0.0399277433753014,0.0953883677721024,0.968059420585632,0.180046543478966,-0.17448265850544, 0.596852362155914,-0.598833739757538,-0.534008800983429,0.610304296016693,-0.760079562664032,-0.223176524043083,0.38824450969696,0.468270719051361,-0.793718278408051,0.611883342266083,0.395266950130463,-0.685100555419922,0.318963170051575,0.947534799575806,-0.0209827292710543,0.0321094393730164,0.982071399688721,-0.185754418373108,0.411976963281631,0.894454181194305,0.173858374357224,0.851017236709595,0.312567472457886,-0.421984851360321,0.972901284694672,0.173448488116264,-0.15290105342865,0.576588332653046,0.699405252933502,0.422348409891129,0.0321094393730164,0.982071399688721,-0.185754418373108,0.318963170051575,0.947534799575806,-0.0209827292710543,-0.12346463650465,0.82139652967453,0.556834042072296,-0.472547024488449,0.842842221260071,0.257519453763962,-0.195588424801826,0.810276031494141,0.552447199821472,0.411976963281631,0.894454181194305,0.173858374357224,0.576588332653046,0.699405252933502,0.422348409891129,0.0535213947296143,0.588878512382507,0.806447505950928,-0.472547024488449,0.842842221260071,0.257519453763962,-0.12346463650465,0.82139652967453,0.556834042072296,-0.572655022144318,0.03255345672369,0.819149851799011,-0.908354461193085,0.186973229050636,0.374076366424561,-0.785535871982574,0.107658803462982,0.60937911272049,-0.195588424801826,0.810276031494141,0.552447199821472,0.0535213947296143,0.588878512382507,0.806447505950928,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.572655022144318,0.03255345672369,0.819149851799011,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.721794605255127,-0.649047315120697,-0.240312546491623,-0.908354461193085,0.186973229050636,0.374076366424561,-0.189478844404221,-0.925744891166687,0.327252507209778,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.785535871982574,0.107658803462982,0.60937911272049,-0.450931012630463,-0.0296851322054863,0.892065048217773,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.375919848680496,-0.534900844097137,-0.756680428981781,0.121086686849594,-0.443384885787964,-0.888114750385284,-0.721794605255127,-0.649047315120697,-0.240312546491623, 0.652944087982178,-0.679937779903412,-0.333689540624619,0.493326157331467,-0.591391324996948,-0.637875854969025,-0.546746909618378,-0.836352705955505,-0.0397748313844204,-0.189478844404221,-0.925744891166687,0.327252507209778,0.121086686849594,-0.443384885787964,-0.888114750385284,0.375919848680496,-0.534900844097137,-0.756680428981781,0.611883342266083,0.395266950130463,-0.685100555419922,0.38824450969696,0.468270719051361,-0.793718278408051,0.972901284694672,0.173448488116264,-0.15290105342865,0.851017236709595,0.312567472457886,-0.421984851360321,0.493326157331467,-0.591391324996948,-0.637875854969025,0.652944087982178,-0.679937779903412,-0.333689540624619,0.318963170051575,0.947534799575806,-0.0209827292710543,0.611883342266083,0.395266950130463,-0.685100555419922,0.813007533550262,0.294095903635025,-0.502519965171814,0.569939315319061,0.805042445659637,0.164547294378281,-0.12346463650465,0.82139652967453,0.556834042072296,0.318963170051575,0.947534799575806,-0.0209827292710543,0.569939315319061,0.805042445659637,0.164547294378281,0.231555417180061,0.629199266433716,0.741950392723084,-0.572655022144318,0.03255345672369,0.819149851799011,-0.12346463650465,0.82139652967453,0.556834042072296,0.231555417180061,0.629199266433716,0.741950392723084,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.0996505841612816,-0.92350834608078,0.370408058166504,-0.345148712396622,-0.936045050621033,0.0684986561536789,-0.572655022144318,0.03255345672369,0.819149851799011,-0.0726617649197578,-0.0862219110131264,0.993622660636902,0.585191905498505,-0.614215075969696,-0.529424488544464,0.375919848680496,-0.534900844097137,-0.756680428981781,-0.345148712396622,-0.936045050621033,0.0684986561536789,0.0996505841612816,-0.92350834608078,0.370408058166504,0.813007533550262,0.294095903635025,-0.502519965171814,0.611883342266083,0.395266950130463,-0.685100555419922,0.375919848680496,-0.534900844097137,-0.756680428981781,0.585191905498505,-0.614215075969696,-0.529424488544464,0.545881569385529,0.511918663978577,0.663289248943329,0.990075051784515,-0.120317794382572,0.0726294368505478, 0.883933007717133,-0.306944608688354,0.352771013975143,0.373975813388824,0.180082246661186,0.909787058830261,-0.245863825082779,0.731000900268555,0.636544346809387,0.545881569385529,0.511918663978577,0.663289248943329,0.373975813388824,0.180082246661186,0.909787058830261,-0.295474290847778,0.289970576763153,0.910281300544739,-0.910116851329803,0.0209306813776493,0.413822680711746,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.245863825082779,0.731000900268555,0.636544346809387,-0.295474290847778,0.289970576763153,0.910281300544739,-0.558293402194977,-0.744525730609894,-0.366046398878098,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.910116851329803,0.0209306813776493,0.413822680711746,0.547039151191711,-0.767979085445404,-0.333100914955139,0.571398973464966,-0.599262952804565,-0.560702323913574,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.558293402194977,-0.744525730609894,-0.366046398878098,0.990075051784515,-0.120317794382572,0.0726294368505478,0.571398973464966,-0.599262952804565,-0.560702323913574,0.547039151191711,-0.767979085445404,-0.333100914955139,0.883933007717133,-0.306944608688354,0.352771013975143,0.375081390142441,0.14768061041832,0.915152668952942,0.911960899829865,-0.238872826099396,0.333567291498184,0.744088768959045,-0.425844013690948,0.514770567417145,0.260944664478302,0.0303234942257404,0.964877367019653,0.990352332592011,0.100834503769875,-0.0950506180524826,0.990075051784515,-0.120317794382572,0.0726294368505478,0.545881569385529,0.511918663978577,0.663289248943329,0.586896598339081,0.733868896961212,0.342036306858063,-0.218149244785309,0.312739759683609,0.924448370933533,0.375081390142441,0.14768061041832,0.915152668952942,0.260944664478302,0.0303234942257404,0.964877367019653,-0.292137324810028,0.162486374378204,0.942472279071808,0.586896598339081,0.733868896961212,0.342036306858063,0.545881569385529,0.511918663978577,0.663289248943329,-0.245863825082779,0.731000900268555,0.636544346809387,-0.114175498485565,0.946973264217377,0.300342559814453, -0.927251279354095,0.214977368712425,0.306577533483505,-0.218149244785309,0.312739759683609,0.924448370933533,-0.292137324810028,0.162486374378204,0.942472279071808,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.114175498485565,0.946973264217377,0.300342559814453,-0.245863825082779,0.731000900268555,0.636544346809387,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.730445027351379,0.644031345844269,-0.227318435907364,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.927251279354095,0.214977368712425,0.306577533483505,-0.901480376720428,0.0224926322698593,0.432235211133957,-0.935286819934845,0.353607445955276,0.0141536435112357,-0.506552457809448,-0.468146800994873,-0.724046409130096,-0.434810429811478,-0.167877942323685,-0.884735524654388,-0.730445027351379,0.644031345844269,-0.227318435907364,0.430197030305862,-0.866838395595551,-0.252034991979599,0.522938787937164,-0.641703903675079,-0.561026811599731,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.660339951515198,-0.670212745666504,-0.338771462440491,-0.506552457809448,-0.468146800994873,-0.724046409130096,0.571398973464966,-0.599262952804565,-0.560702323913574,0.571836888790131,-0.410920888185501,-0.710032820701599,-0.434810429811478,-0.167877942323685,-0.884735524654388,0.911960899829865,-0.238872826099396,0.333567291498184,0.522938787937164,-0.641703903675079,-0.561026811599731,0.430197030305862,-0.866838395595551,-0.252034991979599,0.744088768959045,-0.425844013690948,0.514770567417145,0.571836888790131,-0.410920888185501,-0.710032820701599,0.571398973464966,-0.599262952804565,-0.560702323913574,0.990075051784515,-0.120317794382572,0.0726294368505478,0.990352332592011,0.100834503769875,-0.0950506180524826,0.911960899829865,-0.238872826099396,0.333567291498184,0.375081390142441,0.14768061041832,0.915152668952942,0.511097252368927,0.266881614923477,0.817039608955383,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383, 0.375081390142441,0.14768061041832,0.915152668952942,-0.218149244785309,0.312739759683609,0.924448370933533,-0.110857367515564,0.512554824352264,0.85146826505661,-0.110857367515564,0.512554824352264,0.85146826505661,-0.218149244785309,0.312739759683609,0.924448370933533,-0.927251279354095,0.214977368712425,0.306577533483505,-0.879560232162476,0.457515209913254,0.130589336156845,-0.879560232162476,0.457515209913254,0.130589336156845,-0.927251279354095,0.214977368712425,0.306577533483505,-0.624496459960938,-0.423985540866852,-0.655927181243896,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.624496459960938,-0.423985540866852,-0.655927181243896,0.522938787937164,-0.641703903675079,-0.561026811599731,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.536313056945801,-0.172707200050354,-0.826160073280334,0.522938787937164,-0.641703903675079,-0.561026811599731,0.911960899829865,-0.238872826099396,0.333567291498184,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.49901670217514,-0.328819900751114,-0.801785349845886,-0.976081073284149,0.0319094844162464,0.215052559971809,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.378572434186935,0.294946253299713,0.877319574356079,0.256522864103317,0.500971019268036,0.826573669910431,0.839519679546356,-0.36930912733078,0.398519098758698,0.916088342666626,0.400877177715302,0.00892047397792339,0.916088342666626,0.400877177715302,0.00892047397792339,0.839519679546356,-0.36930912733078,0.398519098758698,0.408187568187714,-0.202498286962509,-0.890155792236328,-0.622146844863892,-0.293455481529236,-0.725821733474731,-0.584547698497772,-0.607527673244476,0.537786364555359,-0.976081073284149,0.0319094844162464,0.215052559971809,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.511097252368927,0.266881614923477,0.817039608955383,0.612414479255676,-0.645280599594116,0.456685394048691,-0.110857367515564,0.512554824352264,0.85146826505661,-0.879560232162476,0.457515209913254,0.130589336156845,-0.799655735492706,-0.317605823278427,0.509585380554199, -0.879560232162476,0.457515209913254,0.130589336156845,-0.536313056945801,-0.172707200050354,-0.826160073280334,-0.799655735492706,-0.317605823278427,0.509585380554199,0.49901670217514,-0.328819900751114,-0.801785349845886,0.996219396591187,-0.0303011108189821,0.0814168974757195,0.612414479255676,-0.645280599594116,0.456685394048691,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.31753671169281,0.108130596578121,0.942060589790344,-0.868339955806732,0.248359262943268,0.429305762052536,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.31753671169281,0.108130596578121,0.942060589790344,-0.218334898352623,0.277430087327957,0.93560802936554,-0.627032935619354,0.660118401050568,0.413610130548477,-0.868339955806732,0.248359262943268,0.429305762052536,-0.218334898352623,0.277430087327957,0.93560802936554,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.21239410340786,0.895821630954742,0.390374630689621,-0.627032935619354,0.660118401050568,0.413610130548477,-0.0478470139205456,0.374339252710342,0.926056563854218,0.148238986730576,0.372900396585464,0.91595333814621,0.264493584632874,0.892315626144409,0.365808635950089,-0.21239410340786,0.895821630954742,0.390374630689621,0.148238986730576,0.372900396585464,0.91595333814621,0.317363291978836,0.27348119020462,0.908013522624969,0.675838232040405,0.650524258613586,0.346498042345047,0.264493584632874,0.892315626144409,0.365808635950089,0.317363291978836,0.27348119020462,0.908013522624969,0.414219319820404,0.102734677493572,0.90436053276062,0.911416888237,0.235228717327118,0.337619215250015,0.675838232040405,0.650524258613586,0.346498042345047,0.414219319820404,0.102734677493572,0.90436053276062,0.412851452827454,-0.0935835912823677,0.905977785587311,0.908100605010986,-0.24227574467659,0.341549009084702,0.911416888237,0.235228717327118,0.337619215250015,0.412851452827454,-0.0935835912823677,0.905977785587311,0.313630968332291,-0.262897282838821,0.912425696849823,0.666783571243286,-0.654056191444397,0.357225596904755,0.908100605010986,-0.24227574467659,0.341549009084702, 0.313630968332291,-0.262897282838821,0.912425696849823,0.143147274851799,-0.359821945428848,0.921974539756775,0.252132117748261,-0.889766812324524,0.380452841520309,0.666783571243286,-0.654056191444397,0.357225596904755,0.143147274851799,-0.359821945428848,0.921974539756775,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.224753618240356,-0.886253476142883,0.405019313097,0.252132117748261,-0.889766812324524,0.380452841520309,-0.0529243946075439,-0.358375370502472,0.932076215744019,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.224753618240356,-0.886253476142883,0.405019313097,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.868339955806732,0.248359262943268,0.429305762052536,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.868339955806732,0.248359262943268,0.429305762052536,-0.627032935619354,0.660118401050568,0.413610130548477,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.627032935619354,0.660118401050568,0.413610130548477,-0.21239410340786,0.895821630954742,0.390374630689621,-0.252133041620255,0.889771401882172,-0.380441606044769,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.21239410340786,0.895821630954742,0.390374630689621,0.264493584632874,0.892315626144409,0.365808635950089,0.224738791584969,0.886259078979492,-0.405015259981155,-0.252133041620255,0.889771401882172,-0.380441606044769,0.264493584632874,0.892315626144409,0.365808635950089,0.675838232040405,0.650524258613586,0.346498042345047,0.636084914207459,0.644462466239929,-0.42433974146843,0.224738791584969,0.886259078979492,-0.405015259981155,0.675838232040405,0.650524258613586,0.346498042345047,0.911416888237,0.235228717327118,0.337619215250015, 0.871663808822632,0.22916416823864,-0.433227360248566,0.636084914207459,0.644462466239929,-0.42433974146843,0.911416888237,0.235228717327118,0.337619215250015,0.908100605010986,-0.24227574467659,0.341549009084702,0.868341326713562,-0.248342737555504,-0.429312497377396,0.871663808822632,0.22916416823864,-0.433227360248566,0.908100605010986,-0.24227574467659,0.341549009084702,0.666783571243286,-0.654056191444397,0.357225596904755,0.627018570899963,-0.660117030143738,-0.413634151220322,0.868341326713562,-0.248342737555504,-0.429312497377396,0.666783571243286,-0.654056191444397,0.357225596904755,0.252132117748261,-0.889766812324524,0.380452841520309,0.212370932102203,-0.895820319652557,-0.390390157699585,0.627018570899963,-0.660117030143738,-0.413634151220322,0.252132117748261,-0.889766812324524,0.380452841520309,-0.224753618240356,-0.886253476142883,0.405019313097,-0.264504671096802,-0.892306506633759,-0.365822821855545,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.224753618240356,-0.886253476142883,0.405019313097,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.636087536811829,-0.644459784030914,0.42433974146843,-0.871661067008972,-0.229165747761726,0.433232098817825,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.908097684383392,0.242292806506157,-0.341544687747955,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.66677725315094,0.654064834117889,-0.35722154378891,-0.252133041620255,0.889771401882172,-0.380441606044769,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.313630282878876,0.262905478477478,-0.912423551082611, -0.252133041620255,0.889771401882172,-0.380441606044769,0.224738791584969,0.886259078979492,-0.405015259981155,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.14314316213131,0.359831392765045,-0.921971440315247,0.224738791584969,0.886259078979492,-0.405015259981155,0.636084914207459,0.644462466239929,-0.42433974146843,0.222044736146927,0.258958548307419,-0.940019488334656,0.0529278218746185,0.358382165431976,-0.932073414325714,0.636084914207459,0.644462466239929,-0.42433974146843,0.871663808822632,0.22916416823864,-0.433227360248566,0.318903893232346,0.0882057771086693,-0.943673670291901,0.222044736146927,0.258958548307419,-0.940019488334656,0.871663808822632,0.22916416823864,-0.433227360248566,0.868341326713562,-0.248342737555504,-0.429312497377396,0.317530363798141,-0.108123689889908,-0.942063570022583,0.318903893232346,0.0882057771086693,-0.943673670291901,0.868341326713562,-0.248342737555504,-0.429312497377396,0.627018570899963,-0.660117030143738,-0.413634151220322,0.218313500285149,-0.277421027421951,-0.935615718364716,0.317530363798141,-0.108123689889908,-0.942063570022583,0.627018570899963,-0.660117030143738,-0.413634151220322,0.212370932102203,-0.895820319652557,-0.390390157699585,0.0478369519114494,-0.374329477548599,-0.926061034202576,0.218313500285149,-0.277421027421951,-0.935615718364716,0.212370932102203,-0.895820319652557,-0.390390157699585,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.148233711719513,-0.372886508703232,-0.91595983505249,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.264504671096802,-0.892306506633759,-0.365822821855545,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.675834715366364,-0.650523722171783,-0.346505790948868,-0.911418378353119,-0.235225573182106,-0.337617367506027,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.317355632781982,-0.273479759693146,-0.908016622066498,0.0515071414411068,0.00784654170274735,0.998641788959503, -0.31753671169281,0.108130596578121,0.942060589790344,-0.318901360034943,-0.0882023423910141,0.943674862384796,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.218334898352623,0.277430087327957,0.93560802936554,-0.31753671169281,0.108130596578121,0.942060589790344,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0478470139205456,0.374339252710342,0.926056563854218,-0.218334898352623,0.277430087327957,0.93560802936554,0.0515071414411068,0.00784654170274735,0.998641788959503,0.148238986730576,0.372900396585464,0.91595333814621,-0.0478470139205456,0.374339252710342,0.926056563854218,0.0515071414411068,0.00784654170274735,0.998641788959503,0.317363291978836,0.27348119020462,0.908013522624969,0.148238986730576,0.372900396585464,0.91595333814621,0.0515071414411068,0.00784654170274735,0.998641788959503,0.414219319820404,0.102734677493572,0.90436053276062,0.317363291978836,0.27348119020462,0.908013522624969,0.0515071414411068,0.00784654170274735,0.998641788959503,0.412851452827454,-0.0935835912823677,0.905977785587311,0.414219319820404,0.102734677493572,0.90436053276062,0.0515071414411068,0.00784654170274735,0.998641788959503,0.313630968332291,-0.262897282838821,0.912425696849823,0.412851452827454,-0.0935835912823677,0.905977785587311,0.0515071414411068,0.00784654170274735,0.998641788959503,0.143147274851799,-0.359821945428848,0.921974539756775,0.313630968332291,-0.262897282838821,0.912425696849823,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.143147274851799,-0.359821945428848,0.921974539756775,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.0529243946075439,-0.358375370502472,0.932076215744019,0.0515071414411068,0.00784654170274735,0.998641788959503,-0.318901360034943,-0.0882023423910141,0.943674862384796,-0.222048029303551,-0.258952558040619,0.940020382404327,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.412847608327866,0.093598335981369,-0.90597802400589, -0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.412847608327866,0.093598335981369,-0.90597802400589,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.313630282878876,0.262905478477478,-0.912423551082611,-0.14314316213131,0.359831392765045,-0.921971440315247,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.14314316213131,0.359831392765045,-0.921971440315247,0.0529278218746185,0.358382165431976,-0.932073414325714,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0529278218746185,0.358382165431976,-0.932073414325714,0.222044736146927,0.258958548307419,-0.940019488334656,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.222044736146927,0.258958548307419,-0.940019488334656,0.318903893232346,0.0882057771086693,-0.943673670291901,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.318903893232346,0.0882057771086693,-0.943673670291901,0.317530363798141,-0.108123689889908,-0.942063570022583,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.317530363798141,-0.108123689889908,-0.942063570022583,0.218313500285149,-0.277421027421951,-0.935615718364716,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.218313500285149,-0.277421027421951,-0.935615718364716,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,0.0478369519114494,-0.374329477548599,-0.926061034202576,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.148233711719513,-0.372886508703232,-0.91595983505249,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.317355632781982,-0.273479759693146,-0.908016622066498,-0.414216488599777,-0.102731600403786,-0.904362142086029,-0.0515034012496471,-0.00784700363874435,-0.998641967773438,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.966661691665649,0.248886108398438,-0.0601741522550583, -0.58228075504303,0.397593438625336,-0.709132254123688,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.851284623146057,0.473647087812424,0.225771903991699,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.851284623146057,0.473647087812424,0.225771903991699,-0.79402083158493,0.444575279951096,0.414588689804077,-0.158385679125786,0.879829466342926,0.448122888803482,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.79402083158493,0.444575279951096,0.414588689804077,-0.759445428848267,0.323628008365631,0.564364731311798,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.158385679125786,0.879829466342926,0.448122888803482,-0.759445428848267,0.323628008365631,0.564364731311798,-0.757242918014526,0.146255627274513,0.636547327041626,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.757242918014526,0.146255627274513,0.636547327041626,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.152521103620529,-0.309242963790894,0.938672542572021,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.581832349300385,-0.785723686218262,-0.210022509098053, -0.447622418403625,-0.858233511447906,0.251136243343353,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,-0.58228075504303,0.397593438625336,-0.709132254123688,0.15252123773098,0.30924791097641,-0.938670873641968,0.0762772560119629,-0.147341594099998,-0.986140072345734,-0.58228075504303,0.397593438625336,-0.709132254123688,-0.453953713178635,0.773242294788361,-0.442744106054306,0.288539916276932,0.679925382137299,-0.674126207828522,0.15252123773098,0.30924791097641,-0.938670873641968,-0.453953713178635,0.773242294788361,-0.442744106054306,-0.297669261693954,0.954544186592102,-0.0154400775209069,0.447615385055542,0.858229279518127,-0.251163244247437,0.288539916276932,0.679925382137299,-0.674126207828522,-0.297669261693954,0.954544186592102,-0.0154400775209069,-0.158385679125786,0.879829466342926,0.448122888803482,0.581838190555573,0.785721182823181,0.210015803575516,0.447615385055542,0.858229279518127,-0.251163244247437,-0.158385679125786,0.879829466342926,0.448122888803482,-0.0778716132044792,0.579540431499481,0.811214447021484,0.654724836349487,0.490438729524612,0.57515674829483,0.581838190555573,0.785721182823181,0.210015803575516,-0.0778716132044792,0.579540431499481,0.811214447021484,-0.0762700662016869,0.147347286343575,0.98613977432251,0.653687477111816,0.0610029399394989,0.754301846027374,0.654724836349487,0.490438729524612,0.57515674829483,-0.0762700662016869,0.147347286343575,0.98613977432251,-0.152521103620529,-0.309242963790894,0.938672542572021,0.582287847995758,-0.397587060928345,0.709130048751831,0.653687477111816,0.0610029399394989,0.754301846027374, -0.152521103620529,-0.309242963790894,0.938672542572021,-0.288555532693863,-0.679946959018707,0.674097776412964,0.453961431980133,-0.773255228996277,0.442713648080826,0.582287847995758,-0.397587060928345,0.709130048751831,-0.288555532693863,-0.679946959018707,0.674097776412964,-0.447622418403625,-0.858233511447906,0.251136243343353,0.297663301229477,-0.954546689987183,0.0153974173590541,0.453961431980133,-0.773255228996277,0.442713648080826,-0.447622418403625,-0.858233511447906,0.251136243343353,-0.581832349300385,-0.785723686218262,-0.210022509098053,0.158382549881935,-0.879823446273804,-0.448135793209076,0.297663301229477,-0.954546689987183,0.0153974173590541,-0.581832349300385,-0.785723686218262,-0.210022509098053,-0.654718458652496,-0.490442901849747,-0.575160443782806,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.158382549881935,-0.879823446273804,-0.448135793209076,-0.654718458652496,-0.490442901849747,-0.575160443782806,-0.653685986995697,-0.0610022284090519,-0.754303216934204,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.15252123773098,0.30924791097641,-0.938670873641968,0.787807643413544,0.0407794341444969,-0.614569902420044,0.757250845432281,-0.146252647042274,-0.636538565158844,0.15252123773098,0.30924791097641,-0.938670873641968,0.288539916276932,0.679925382137299,-0.674126207828522,0.842750906944275,0.189622536301613,-0.503799676895142,0.787807643413544,0.0407794341444969,-0.614569902420044,0.288539916276932,0.679925382137299,-0.674126207828522,0.447615385055542,0.858229279518127,-0.251163244247437,0.906708478927612,0.260196477174759,-0.331930011510849,0.842750906944275,0.189622536301613,-0.503799676895142,0.447615385055542,0.858229279518127,-0.251163244247437,0.581838190555573,0.785721182823181,0.210015803575516,0.961666405200958,0.232534736394882,-0.145345583558083,0.906708478927612,0.260196477174759,-0.331930011510849,0.581838190555573,0.785721182823181,0.210015803575516, 0.654724836349487,0.490438729524612,0.57515674829483,0.993358135223389,0.114954985678196,0.00499376095831394,0.961666405200958,0.232534736394882,-0.145345583558083,0.654724836349487,0.490438729524612,0.57515674829483,0.653687477111816,0.0610029399394989,0.754301846027374,0.9949631690979,-0.0604812912642956,0.079939104616642,0.993358135223389,0.114954985678196,0.00499376095831394,0.653687477111816,0.0610029399394989,0.754301846027374,0.582287847995758,-0.397587060928345,0.709130048751831,0.966662883758545,-0.248881489038467,0.0601733289659023,0.9949631690979,-0.0604812912642956,0.079939104616642,0.582287847995758,-0.397587060928345,0.709130048751831,0.453961431980133,-0.773255228996277,0.442713648080826,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.966662883758545,-0.248881489038467,0.0601733289659023,0.453961431980133,-0.773255228996277,0.442713648080826,0.297663301229477,-0.954546689987183,0.0153974173590541,0.851288199424744,-0.473640650510788,-0.225771829485893,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.297663301229477,-0.954546689987183,0.0153974173590541,0.158382549881935,-0.879823446273804,-0.448135793209076,0.794022977352142,-0.44456884264946,-0.414591461420059,0.851288199424744,-0.473640650510788,-0.225771829485893,0.158382549881935,-0.879823446273804,-0.448135793209076,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.759444773197174,-0.323628276586533,-0.564365446567535,0.794022977352142,-0.44456884264946,-0.414591461420059,0.0778705626726151,-0.57954204082489,-0.811213433742523,0.0762772560119629,-0.147341594099998,-0.986140072345734,0.757250845432281,-0.146252647042274,-0.636538565158844,0.759444773197174,-0.323628276586533,-0.564365446567535,-0.947113156318665,0.111555203795433,0.300885528326035,-0.966661691665649,0.248886108398438,-0.0601741522550583,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.947113156318665,0.111555203795433,0.300885528326035,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.966661691665649,0.248886108398438,-0.0601741522550583, -0.947113156318665,0.111555203795433,0.300885528326035,-0.851284623146057,0.473647087812424,0.225771903991699,-0.914616882801056,0.401076018810272,0.0511271618306637,-0.947113156318665,0.111555203795433,0.300885528326035,-0.79402083158493,0.444575279951096,0.414588689804077,-0.851284623146057,0.473647087812424,0.225771903991699,-0.947113156318665,0.111555203795433,0.300885528326035,-0.759445428848267,0.323628008365631,0.564364731311798,-0.79402083158493,0.444575279951096,0.414588689804077,-0.947113156318665,0.111555203795433,0.300885528326035,-0.757242918014526,0.146255627274513,0.636547327041626,-0.759445428848267,0.323628008365631,0.564364731311798,-0.947113156318665,0.111555203795433,0.300885528326035,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.757242918014526,0.146255627274513,0.636547327041626,-0.947113156318665,0.111555203795433,0.300885528326035,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.787810683250427,-0.0407748445868492,0.614566326141357,-0.947113156318665,0.111555203795433,0.300885528326035,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.84276008605957,-0.189629122614861,0.503781855106354,-0.947113156318665,0.111555203795433,0.300885528326035,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.90670782327652,-0.260194718837738,0.331933170557022,-0.947113156318665,0.111555203795433,0.300885528326035,-0.99335777759552,-0.114957891404629,-0.00500302389264107,-0.961663961410522,-0.232538834214211,0.14535491168499,-0.947113156318665,0.111555203795433,0.300885528326035,-0.994962155818939,0.0604930706322193,-0.0799432098865509,-0.99335777759552,-0.114957891404629,-0.00500302389264107,0.757250845432281,-0.146252647042274,-0.636538565158844,0.787807643413544,0.0407794341444969,-0.614569902420044,0.947114884853363,-0.111551322042942,-0.300881564617157,0.787807643413544,0.0407794341444969,-0.614569902420044,0.842750906944275,0.189622536301613,-0.503799676895142,0.947114884853363,-0.111551322042942,-0.300881564617157,0.842750906944275,0.189622536301613,-0.503799676895142, 0.906708478927612,0.260196477174759,-0.331930011510849,0.947114884853363,-0.111551322042942,-0.300881564617157,0.906708478927612,0.260196477174759,-0.331930011510849,0.961666405200958,0.232534736394882,-0.145345583558083,0.947114884853363,-0.111551322042942,-0.300881564617157,0.961666405200958,0.232534736394882,-0.145345583558083,0.993358135223389,0.114954985678196,0.00499376095831394,0.947114884853363,-0.111551322042942,-0.300881564617157,0.993358135223389,0.114954985678196,0.00499376095831394,0.9949631690979,-0.0604812912642956,0.079939104616642,0.947114884853363,-0.111551322042942,-0.300881564617157,0.9949631690979,-0.0604812912642956,0.079939104616642,0.966662883758545,-0.248881489038467,0.0601733289659023,0.947114884853363,-0.111551322042942,-0.300881564617157,0.966662883758545,-0.248881489038467,0.0601733289659023,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.947114884853363,-0.111551322042942,-0.300881564617157,0.914616823196411,-0.401075154542923,-0.0511355213820934,0.851288199424744,-0.473640650510788,-0.225771829485893,0.947114884853363,-0.111551322042942,-0.300881564617157,0.851288199424744,-0.473640650510788,-0.225771829485893,0.794022977352142,-0.44456884264946,-0.414591461420059,0.947114884853363,-0.111551322042942,-0.300881564617157,0.794022977352142,-0.44456884264946,-0.414591461420059,0.759444773197174,-0.323628276586533,-0.564365446567535,0.947114884853363,-0.111551322042942,-0.300881564617157,0.759444773197174,-0.323628276586533,-0.564365446567535,0.757250845432281,-0.146252647042274,-0.636538565158844,0.947114884853363,-0.111551322042942,-0.300881564617157,-0.751705825328827,0.499238789081573,0.430927991867065,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.613819122314453,0.653787076473236,0.442480057477951,-0.751705825328827,0.499238789081573,0.430927991867065,-0.777491211891174,0.513072729110718,0.363680928945541,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.67541229724884,0.485521674156189,-0.555055737495422, -0.439152985811234,0.717960596084595,0.540071547031403,-0.615385949611664,0.731114089488983,0.294571459293365,-0.777491211891174,0.513072729110718,0.363680928945541,-0.517933547496796,0.54983514547348,0.655306160449982,-0.439152985811234,0.717960596084595,0.540071547031403,-0.152461975812912,0.801973640918732,0.577575623989105,-0.341462641954422,0.911851763725281,0.227880761027336,-0.615385949611664,0.731114089488983,0.294571459293365,-0.439152985811234,0.717960596084595,0.540071547031403,-0.517933547496796,0.54983514547348,0.655306160449982,-0.115547746419907,0.596075415611267,0.794570803642273,-0.152461975812912,0.801973640918732,0.577575623989105,-0.554732620716095,0.528954327106476,0.642245292663574,-0.468677580356598,0.695621490478516,0.544474124908447,-0.133603423833847,0.738610506057739,0.660760641098022,-0.180301427841187,0.592643916606903,0.785025238990784,-0.554732620716095,0.528954327106476,0.642245292663574,-0.751705825328827,0.499238789081573,0.430927991867065,-0.617351293563843,0.618397295475006,0.486273765563965,-0.468677580356598,0.695621490478516,0.544474124908447,-0.554732620716095,0.528954327106476,0.642245292663574,-0.517933547496796,0.54983514547348,0.655306160449982,-0.777491211891174,0.513072729110718,0.363680928945541,-0.751705825328827,0.499238789081573,0.430927991867065,-0.554732620716095,0.528954327106476,0.642245292663574,-0.180301427841187,0.592643916606903,0.785025238990784,-0.115547746419907,0.596075415611267,0.794570803642273,-0.517933547496796,0.54983514547348,0.655306160449982,-0.615385949611664,0.731114089488983,0.294571459293365,-0.341462641954422,0.911851763725281,0.227880761027336,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.615385949611664,0.731114089488983,0.294571459293365,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.777491211891174,0.513072729110718,0.363680928945541,0.100666761398315,0.823356568813324,0.558524966239929,0.303691446781158,0.796526610851288,0.522797167301178, 0.173411548137665,0.978560149669647,0.111123643815517,-0.0562314540147781,0.983582377433777,0.171474948525429,0.100666761398315,0.823356568813324,0.558524966239929,0.137634456157684,0.618980467319489,0.773252785205841,0.349911212921143,0.597250580787659,0.721702098846436,0.303691446781158,0.796526610851288,0.522797167301178,0.100666761398315,0.823356568813324,0.558524966239929,-0.152461975812912,0.801973640918732,0.577575623989105,-0.115547746419907,0.596075415611267,0.794570803642273,0.137634456157684,0.618980467319489,0.773252785205841,0.100666761398315,0.823356568813324,0.558524966239929,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.341462641954422,0.911851763725281,0.227880761027336,-0.152461975812912,0.801973640918732,0.577575623989105,0.111760005354881,0.6034294962883,0.789545774459839,0.3438441157341,0.581315696239471,0.73745733499527,0.349911212921143,0.597250580787659,0.721702098846436,0.137634456157684,0.618980467319489,0.773252785205841,0.111760005354881,0.6034294962883,0.789545774459839,0.115875713527203,0.724421501159668,0.679548561573029,0.311594694852829,0.703108549118042,0.639176845550537,0.3438441157341,0.581315696239471,0.73745733499527,0.111760005354881,0.6034294962883,0.789545774459839,-0.180301427841187,0.592643916606903,0.785025238990784,-0.133603423833847,0.738610506057739,0.660760641098022,0.115875713527203,0.724421501159668,0.679548561573029,0.111760005354881,0.6034294962883,0.789545774459839,0.137634456157684,0.618980467319489,0.773252785205841,-0.115547746419907,0.596075415611267,0.794570803642273,-0.180301427841187,0.592643916606903,0.785025238990784,-0.0562314540147781,0.983582377433777,0.171474948525429,0.173411548137665,0.978560149669647,0.111123643815517,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0562314540147781,0.983582377433777,0.171474948525429,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.341462641954422,0.911851763725281,0.227880761027336, 0.303691446781158,0.796526610851288,0.522797167301178,0.573039770126343,0.718792796134949,0.393652617931366,0.427761524915695,0.903279960155487,-0.0332473926246166,0.173411548137665,0.978560149669647,0.111123643815517,0.303691446781158,0.796526610851288,0.522797167301178,0.349911212921143,0.597250580787659,0.721702098846436,0.619265675544739,0.530689239501953,0.578687310218811,0.573039770126343,0.718792796134949,0.393652617931366,0.3438441157341,0.581315696239471,0.73745733499527,0.614433944225311,0.529466807842255,0.584923803806305,0.619265675544739,0.530689239501953,0.578687310218811,0.349911212921143,0.597250580787659,0.721702098846436,0.3438441157341,0.581315696239471,0.73745733499527,0.311594694852829,0.703108549118042,0.639176845550537,0.595157265663147,0.650768876075745,0.471473932266235,0.614433944225311,0.529466807842255,0.584923803806305,0.173411548137665,0.978560149669647,0.111123643815517,0.427761524915695,0.903279960155487,-0.0332473926246166,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.838148951530457,0.305466830730438,0.451880872249603,-0.84395432472229,0.306451618671417,0.440259546041489,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.765394926071167,0.3244788646698,0.555773317813873,-0.838148951530457,0.305466830730438,0.451880872249603,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.402393966913223,0.337146878242493,0.85112339258194,-0.765394926071167,0.3244788646698,0.555773317813873,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.0376495942473412,0.290562659502029,0.956115007400513,-0.402393966913223,0.337146878242493,0.85112339258194,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.0118078086525202,-0.230731546878815,0.972945809364319,0.254925400018692,-0.255845844745636,0.932499825954437, 0.298023343086243,0.239961877465248,0.923904955387115,0.0376495942473412,0.290562659502029,0.956115007400513,0.254925400018692,-0.255845844745636,0.932499825954437,0.46340024471283,-0.317235618829727,0.827418744564056,0.511566936969757,0.168196827173233,0.842620372772217,0.298023343086243,0.239961877465248,0.923904955387115,-0.617351293563843,0.618397295475006,0.486273765563965,-0.613819122314453,0.653787076473236,0.442480057477951,-0.565762281417847,0.699094772338867,0.437240809202194,-0.580900967121124,0.676747918128967,0.452290087938309,-0.613819122314453,0.653787076473236,0.442480057477951,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.565762281417847,0.699094772338867,0.437240809202194,-0.468677580356598,0.695621490478516,0.544474124908447,-0.464684039354324,0.73650199174881,0.491562396287918,-0.136432588100433,0.76638126373291,0.62773072719574,-0.133603423833847,0.738610506057739,0.660760641098022,-0.468677580356598,0.695621490478516,0.544474124908447,-0.617351293563843,0.618397295475006,0.486273765563965,-0.580900967121124,0.676747918128967,0.452290087938309,-0.464684039354324,0.73650199174881,0.491562396287918,0.115875713527203,0.724421501159668,0.679548561573029,0.114413313567638,0.738645255565643,0.664313733577728,0.288802593946457,0.72074019908905,0.630179822444916,0.311594694852829,0.703108549118042,0.639176845550537,0.115875713527203,0.724421501159668,0.679548561573029,-0.133603423833847,0.738610506057739,0.660760641098022,-0.136432588100433,0.76638126373291,0.62773072719574,0.114413313567638,0.738645255565643,0.664313733577728,0.311594694852829,0.703108549118042,0.639176845550537,0.288802593946457,0.72074019908905,0.630179822444916,0.483360201120377,0.719882130622864,0.498129189014435,0.595157265663147,0.650768876075745,0.471473932266235,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.551096558570862,-0.25121533870697,-0.795728206634521,0.553836524486542,-0.170769691467285,-0.814925014972687,0.950989067554474,-0.0476415567100048,-0.305532544851303, 0.825739741325378,0.310847252607346,0.470667392015457,0.913910686969757,0.00122638128232211,0.405913442373276,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.903454899787903,0.395046651363373,0.166455298662186,0.825739741325378,0.310847252607346,0.470667392015457,0.491690248250961,0.47496309876442,0.72982931137085,0.511566936969757,0.168196827173233,0.842620372772217,0.913910686969757,0.00122638128232211,0.405913442373276,0.825739741325378,0.310847252607346,0.470667392015457,0.903454899787903,0.395046651363373,0.166455298662186,0.483360201120377,0.719882130622864,0.498129189014435,0.491690248250961,0.47496309876442,0.72982931137085,0.911615371704102,0.410868912935257,-0.0120057743042707,0.777296364307404,0.555617034435272,-0.295127332210541,0.427761524915695,0.903279960155487,-0.0332473926246166,0.573039770126343,0.718792796134949,0.393652617931366,0.911615371704102,0.410868912935257,-0.0120057743042707,0.954911112785339,0.274276524782181,0.113653682172298,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.909277319908142,0.0840957164764404,-0.407606035470963,0.911615371704102,0.410868912935257,-0.0120057743042707,0.573039770126343,0.718792796134949,0.393652617931366,0.619265675544739,0.530689239501953,0.578687310218811,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299,0.954911112785339,0.274276524782181,0.113653682172298,0.619265675544739,0.530689239501953,0.578687310218811,0.614433944225311,0.529466807842255,0.584923803806305,0.955691754817963,0.266970068216324,0.124017179012299,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.954911112785339,0.274276524782181,0.113653682172298,0.955691754817963,0.266970068216324,0.124017179012299,0.614433944225311,0.529466807842255,0.584923803806305,0.595157265663147,0.650768876075745,0.471473932266235,0.959389328956604,0.278238892555237,0.0464239455759525,0.777296364307404,0.555617034435272,-0.295127332210541,0.0935691148042679,0.299101799726486,-0.949622511863709, -0.0669071823358536,0.486191123723984,-0.87128734588623,0.427761524915695,0.903279960155487,-0.0332473926246166,0.777296364307404,0.555617034435272,-0.295127332210541,0.909277319908142,0.0840957164764404,-0.407606035470963,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709,0.781544268131256,-0.494354426860809,0.380528897047043,0.913910686969757,0.00122638128232211,0.405913442373276,0.511566936969757,0.168196827173233,0.842620372772217,0.46340024471283,-0.317235618829727,0.827418744564056,0.781544268131256,-0.494354426860809,0.380528897047043,0.895158112049103,-0.394557535648346,-0.207403689622879,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.913910686969757,0.00122638128232211,0.405913442373276,-0.731446206569672,0.503581285476685,0.459774166345596,-0.717735588550568,0.527478277683258,0.454557299613953,-0.84395432472229,0.306451618671417,0.440259546041489,-0.838148951530457,0.305466830730438,0.451880872249603,-0.731446206569672,0.503581285476685,0.459774166345596,-0.580900967121124,0.676747918128967,0.452290087938309,-0.565762281417847,0.699094772338867,0.437240809202194,-0.717735588550568,0.527478277683258,0.454557299613953,-0.717735588550568,0.527478277683258,0.454557299613953,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.84395432472229,0.306451618671417,0.440259546041489,-0.717735588550568,0.527478277683258,0.454557299613953,-0.565762281417847,0.699094772338867,0.437240809202194,-0.553338885307312,0.652364552021027,-0.517915606498718,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.645979166030884,0.542717456817627,0.53681343793869,-0.283104240894318,0.575908482074738,0.766929864883423,-0.136432588100433,0.76638126373291,0.62773072719574,-0.464684039354324,0.73650199174881,0.491562396287918,-0.645979166030884,0.542717456817627,0.53681343793869,-0.765394926071167,0.3244788646698,0.555773317813873,-0.402393966913223,0.337146878242493,0.85112339258194,-0.283104240894318,0.575908482074738,0.766929864883423, -0.645979166030884,0.542717456817627,0.53681343793869,-0.731446206569672,0.503581285476685,0.459774166345596,-0.838148951530457,0.305466830730438,0.451880872249603,-0.765394926071167,0.3244788646698,0.555773317813873,-0.645979166030884,0.542717456817627,0.53681343793869,-0.464684039354324,0.73650199174881,0.491562396287918,-0.580900967121124,0.676747918128967,0.452290087938309,-0.731446206569672,0.503581285476685,0.459774166345596,0.0814845785498619,0.534461736679077,0.84125554561615,0.300524145364761,0.497426092624664,0.813788950443268,0.288802593946457,0.72074019908905,0.630179822444916,0.114413313567638,0.738645255565643,0.664313733577728,0.0814845785498619,0.534461736679077,0.84125554561615,0.0376495942473412,0.290562659502029,0.956115007400513,0.298023343086243,0.239961877465248,0.923904955387115,0.300524145364761,0.497426092624664,0.813788950443268,0.0814845785498619,0.534461736679077,0.84125554561615,-0.283104240894318,0.575908482074738,0.766929864883423,-0.402393966913223,0.337146878242493,0.85112339258194,0.0376495942473412,0.290562659502029,0.956115007400513,0.0814845785498619,0.534461736679077,0.84125554561615,0.114413313567638,0.738645255565643,0.664313733577728,-0.136432588100433,0.76638126373291,0.62773072719574,-0.283104240894318,0.575908482074738,0.766929864883423,0.300524145364761,0.497426092624664,0.813788950443268,0.491690248250961,0.47496309876442,0.72982931137085,0.483360201120377,0.719882130622864,0.498129189014435,0.288802593946457,0.72074019908905,0.630179822444916,0.300524145364761,0.497426092624664,0.813788950443268,0.298023343086243,0.239961877465248,0.923904955387115,0.511566936969757,0.168196827173233,0.842620372772217,0.491690248250961,0.47496309876442,0.72982931137085,0.914809167385101,0.392747074365616,0.0942015051841736,0.903454899787903,0.395046651363373,0.166455298662186,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.914809167385101,0.392747074365616,0.0942015051841736,0.595157265663147,0.650768876075745,0.471473932266235, 0.483360201120377,0.719882130622864,0.498129189014435,0.903454899787903,0.395046651363373,0.166455298662186,0.225880712270737,-0.859437644481659,-0.458633750677109,0.29811355471611,-0.682091355323792,-0.667742192745209,0.311078637838364,-0.216382816433907,-0.925423443317413,0.16324470937252,-0.308202177286148,-0.937210023403168,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.282306700944901,-0.637052953243256,-0.717263162136078,0.29811355471611,-0.682091355323792,-0.667742192745209,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.260857611894608,-0.829145133495331,-0.494440793991089,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.29811355471611,-0.682091355323792,-0.667742192745209,0.264597475528717,-0.737169206142426,-0.621747314929962,0.115910343825817,-0.0576019249856472,-0.991588056087494,0.311078637838364,-0.216382816433907,-0.925423443317413,0.29811355471611,-0.682091355323792,-0.667742192745209,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.247060716152191,-0.702493846416473,-0.667430460453033,0.264597475528717,-0.737169206142426,-0.621747314929962,-0.282306700944901,-0.637052953243256,-0.717263162136078,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.901528060436249,-0.393501937389374,-0.180009379982948,-0.247060716152191,-0.702493846416473,-0.667430460453033,-0.901528060436249,-0.393501937389374,-0.180009379982948,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.955415546894073,0.030608743429184,-0.293673634529114, -0.957066535949707,0.0726807713508606,-0.280608594417572,-0.810647666454315,-0.584102094173431,-0.0409278348088264,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.905829727649689,-0.366898268461227,-0.21179735660553,-0.67541229724884,0.485521674156189,-0.555055737495422,-0.671055376529694,0.46099641919136,-0.580660879611969,0.16324470937252,-0.308202177286148,-0.937210023403168,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.241613432765007,0.616148710250854,-0.749655723571777,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0423314645886421,-0.689121425151825,-0.723408401012421,-0.149124965071678,0.574361085891724,-0.804904401302338,-0.0669071823358536,0.486191123723984,-0.87128734588623,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.268338412046433,-0.713256895542145,-0.647502183914185,-0.0990582183003426,-0.981914699077606,0.161341309547424,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.0823863819241524,-0.986806333065033,0.139376148581505,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0823863819241524,-0.986806333065033,0.139376148581505,-0.0841861814260483,-0.983832597732544,0.158069923520088,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.0981104820966721,-0.982542932033539,0.158062309026718,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.0990582183003426,-0.981914699077606,0.161341309547424, -0.0981104820966721,-0.982542932033539,0.158062309026718,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0490679740905762,-0.984484553337097,0.168471187353134,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.0767614245414734,-0.98267537355423,0.168691396713257,-0.0490679740905762,-0.984484553337097,0.168471187353134,-0.0325715281069279,-0.988623857498169,0.14683997631073,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.0472139939665794,-0.860794186592102,0.506758570671082,-0.0325715281069279,-0.988623857498169,0.14683997631073,-0.0330409817397594,-0.990994393825531,0.129762962460518,0.212042272090912,-0.828755676746368,0.517882287502289,0.0744497627019882,-0.870341658592224,0.486788034439087,-0.574179291725159,0.614476501941681,-0.541051506996155,0.311078637838364,-0.216382816433907,-0.925423443317413,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.553338885307312,0.652364552021027,-0.517915606498718,0.551096558570862,-0.25121533870697,-0.795728206634521,-0.957066535949707,0.0726807713508606,-0.280608594417572,-0.955415546894073,0.030608743429184,-0.293673634529114,0.553836524486542,-0.170769691467285,-0.814925014972687,0.553836524486542,-0.170769691467285,-0.814925014972687,-0.955415546894073,0.030608743429184,-0.293673634529114,-0.942904889583588,-0.124770976603031,-0.308808296918869,0.223619028925896,0.0197683665901423,-0.974476158618927,0.0935691148042679,0.299101799726486,-0.949622511863709,0.223619028925896,0.0197683665901423,-0.974476158618927,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.677798688411713,0.543503999710083,-0.49516898393631,0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.462465226650238,-0.184937626123428,-0.867135524749756, -0.29739573597908,-0.262825429439545,-0.917866349220276,-0.202129036188126,-0.938186347484589,-0.280980914831162,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.402248114347458,-0.864168643951416,0.302339196205139,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.42183855175972,-0.87651139497757,0.231905207037926,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.784946858882904,-0.199270412325859,0.586642801761627,-0.852979302406311,-0.200469166040421,0.481911212205887,-0.417831748723984,-0.851728618144989,0.316188275814056,-0.384289085865021,-0.85367888212204,0.351502865552902,-0.0118078086525202,-0.230731546878815,0.972945809364319,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.0744497627019882,-0.870341658592224,0.486788034439087,0.254925400018692,-0.255845844745636,0.932499825954437,-0.0118078086525202,-0.230731546878815,0.972945809364319,-0.444218367338181,-0.208816647529602,0.871243715286255,-0.232284545898438,-0.856678247451782,0.460593432188034,-0.0472139939665794,-0.860794186592102,0.506758570671082,0.254925400018692,-0.255845844745636,0.932499825954437,0.0744497627019882,-0.870341658592224,0.486788034439087,0.212042272090912,-0.828755676746368,0.517882287502289,0.46340024471283,-0.317235618829727,0.827418744564056,0.509586453437805,-0.79888927936554,0.319527089595795,0.566634595394135,-0.823737919330597,0.0195191036909819, 0.895158112049103,-0.394557535648346,-0.207403689622879,0.781544268131256,-0.494354426860809,0.380528897047043,0.509586453437805,-0.79888927936554,0.319527089595795,0.781544268131256,-0.494354426860809,0.380528897047043,0.46340024471283,-0.317235618829727,0.827418744564056,0.212042272090912,-0.828755676746368,0.517882287502289,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.573512434959412,-0.801527380943298,-0.169225797057152,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.85843151807785,-0.220211803913116,0.46325159072876,-0.84395432472229,0.306451618671417,0.440259546041489,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.949202537536621,-0.309859663248062,0.0547863356769085,-0.916306138038635,-0.243330180644989,0.318077772855759,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.879374027252197,0.0191096197813749,-0.475748002529144,-0.880555152893066,0.364310264587402,-0.303151249885559,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.462465226650238,-0.184937626123428,-0.867135524749756,0.985759019851685,-0.0950566306710243,-0.138720765709877,0.895158112049103,-0.394557535648346,-0.207403689622879,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.895158112049103,-0.394557535648346,-0.207403689622879,0.551096558570862,-0.25121533870697,-0.795728206634521,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.553836524486542,-0.170769691467285,-0.814925014972687,0.909277319908142,0.0840957164764404,-0.407606035470963,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.553836524486542,-0.170769691467285,-0.814925014972687,0.937605857849121,-0.0351583212614059,-0.345917791128159,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.223619028925896,0.0197683665901423,-0.974476158618927,0.909277319908142,0.0840957164764404,-0.407606035470963,0.553836524486542,-0.170769691467285,-0.814925014972687, 0.595157265663147,0.650768876075745,0.471473932266235,0.914809167385101,0.392747074365616,0.0942015051841736,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.959389328956604,0.278238892555237,0.0464239455759525,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.953060507774353,-0.0791450366377831,-0.292252898216248,0.959389328956604,0.278238892555237,0.0464239455759525,0.914809167385101,0.392747074365616,0.0942015051841736,0.909277319908142,0.0840957164764404,-0.407606035470963,0.777296364307404,0.555617034435272,-0.295127332210541,0.911615371704102,0.410868912935257,-0.0120057743042707,0.959389328956604,0.278238892555237,0.0464239455759525,0.950989067554474,-0.0476415567100048,-0.305532544851303,0.955691754817963,0.266970068216324,0.124017179012299,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.0423314645886421,-0.689121425151825,-0.723408401012421,0.225880712270737,-0.859437644481659,-0.458633750677109,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.942904889583588,-0.124770976603031,-0.308808296918869,-0.810647666454315,-0.584102094173431,-0.0409278348088264,0.311078637838364,-0.216382816433907,-0.925423443317413,-0.574179291725159,0.614476501941681,-0.541051506996155,-0.67541229724884,0.485521674156189,-0.555055737495422,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.671055376529694,0.46099641919136,-0.580660879611969,-0.562178492546082,0.54021954536438,-0.626193344593048,0.16324470937252,-0.308202177286148,-0.937210023403168,-0.562178492546082,0.54021954536438,-0.626193344593048,-0.399629831314087,0.611662745475769,-0.682762563228607,-0.462465226650238,-0.184937626123428,-0.867135524749756,-0.157777264714241,0.23123687505722,-0.960018694400787,-0.29739573597908,-0.262825429439545,-0.917866349220276,-0.638520240783691,-0.465828388929367,-0.612613916397095,-0.0669071823358536,0.486191123723984,-0.87128734588623,0.0935691148042679,0.299101799726486,-0.949622511863709,-0.553338885307312,0.652364552021027,-0.517915606498718, 0.115910343825817,-0.0576019249856472,-0.991588056087494,-0.677798688411713,0.543503999710083,-0.49516898393631,-0.613819122314453,0.653787076473236,0.442480057477951,-0.617351293563843,0.618397295475006,0.486273765563965,-0.751705825328827,0.499238789081573,0.430927991867065,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,0.887108027935028,-0.311221390962601,-0.340852707624435,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.951028227806091,0.154145792126656,0.267926096916199,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,-0.22176705300808,-0.273640364408493,-0.935916841030121,0.813896775245667,0.349610984325409,0.464051961898804,0.614185929298401,0.569629371166229,0.546166718006134,0.756061971187592,0.654500067234039,2.3479871742893e-005,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.391825526952744,0.788023412227631,0.474859833717346,0.470227479934692,0.88252204656601,0.00639821914955974,0.756061971187592,0.654500067234039,2.3479871742893e-005,0.614185929298401,0.569629371166229,0.546166718006134,0.801087200641632,-0.297826498746872,0.519190430641174,0.931309640407562,-0.364154070615768,0.00736169191077352,0.934493005275726,0.355923593044281,0.00642255879938602, 0.806965947151184,0.306465566158295,0.504861176013947,0.367402404546738,-0.773531317710876,0.516395926475525,0.596734344959259,-0.558585286140442,0.576099514961243,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.44488126039505,-0.89555948972702,0.00733880698680878,0.596734344959259,-0.558585286140442,0.576099514961243,0.800876438617706,-0.339855968952179,0.493046551942825,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.737963557243347,-0.674840569496155,-2.56854491453851e-005,0.800876438617706,-0.339855968952179,0.493046551942825,0.334624856710434,-0.800290584564209,0.497555166482925,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.922433912754059,-0.386155009269714,-2.86983799924201e-006,0.596734344959259,-0.558585286140442,0.576099514961243,0.106314092874527,-0.103658013045788,0.988914728164673,0.257298767566681,-0.254731476306915,0.932153046131134,0.800876438617706,-0.339855968952179,0.493046551942825,0.101462937891483,-0.233674854040146,0.967006385326386,0.106314092874527,-0.103658013045788,0.988914728164673,0.596734344959259,-0.558585286140442,0.576099514961243,0.367402404546738,-0.773531317710876,0.516395926475525,0.806965947151184,0.306465566158295,0.504861176013947,0.331482470035553,0.125218272209167,0.935114860534668,0.318617641925812,-0.106823146343231,0.941844820976257,0.801087200641632,-0.297826498746872,0.519190430641174,0.614185929298401,0.569629371166229,0.546166718006134,0.136184617877007,0.141381427645683,0.980543255805969,0.119092851877213,0.270987540483475,0.955187201499939,0.391825526952744,0.788023412227631,0.474859833717346,0.283706575632095,0.309986978769302,0.907424211502075,0.136184617877007,0.141381427645683,0.980543255805969,0.614185929298401,0.569629371166229,0.546166718006134,0.813896775245667,0.349610984325409,0.464051961898804,0.925318360328674,0.379191190004349,1.48290735069168e-006,0.386173337697983,0.922426223754883,-1.33558714878745e-005,0.350653737783432,0.829828143119812,0.434081971645355,0.813896775245667,0.349610984325409,0.464051961898804, 0.334624856710434,-0.800290584564209,0.497555166482925,0.249570056796074,-0.831263303756714,0.496705174446106,0.287294447422028,-0.95784193277359,0.000848318391945213,0.379204839468002,-0.925312757492065,-1.92532752407715e-006,0.257298767566681,-0.254731476306915,0.932153046131134,0.0777146592736244,-0.258388966321945,0.962909936904907,0.249570056796074,-0.831263303756714,0.496705174446106,0.334624856710434,-0.800290584564209,0.497555166482925,0.119092851877213,0.270987540483475,0.955187201499939,0.136184617877007,0.141381427645683,0.980543255805969,0.106314092874527,-0.103658013045788,0.988914728164673,0.101462937891483,-0.233674854040146,0.967006385326386,0.249570056796074,-0.831263303756714,0.496705174446106,0.202535301446915,-0.827068865299225,0.524343967437744,0.230931788682938,-0.972930014133453,0.00881298631429672,0.287294447422028,-0.95784193277359,0.000848318391945213,0.0620995722711086,-0.238982826471329,0.969036042690277,0.202535301446915,-0.827068865299225,0.524343967437744,0.249570056796074,-0.831263303756714,0.496705174446106,0.0777146592736244,-0.258388966321945,0.962909936904907,-0.224501311779022,0.125647932291031,0.966339349746704,0.0620995722711086,-0.238982826471329,0.969036042690277,0.0777146592736244,-0.258388966321945,0.962909936904907,0.106314092874527,-0.103658013045788,0.988914728164673,0.136184617877007,0.141381427645683,0.980543255805969,-0.267910957336426,0.269903123378754,0.924865424633026,-0.224501311779022,0.125647932291031,0.966339349746704,0.106314092874527,-0.103658013045788,0.988914728164673,-0.359729558229446,0.842673659324646,0.400619268417358,-0.267910957336426,0.269903123378754,0.924865424633026,0.283706575632095,0.309986978769302,0.907424211502075,0.350653737783432,0.829828143119812,0.434081971645355,0.386173337697983,0.922426223754883,-1.33558714878745e-005,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.359729558229446,0.842673659324646,0.400619268417358,0.350653737783432,0.829828143119812,0.434081971645355,-0.484778821468353,-0.720648169517517,0.495636761188507, -0.907637715339661,-0.237347409129143,0.34620800614357,-0.961853384971619,-0.273398995399475,-0.00954078417271376,-0.530582964420319,-0.847630381584167,0.00210796948522329,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.82353150844574,0.433955609798431,0.365346997976303,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.961853384971619,-0.273398995399475,-0.00954078417271376,-0.907637715339661,-0.237347409129143,0.34620800614357,-0.784685611724854,0.430022925138474,0.446484923362732,-0.82353150844574,0.433955609798431,0.365346997976303,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.224501311779022,0.125647932291031,0.966339349746704,-0.267910957336426,0.269903123378754,0.924865424633026,-0.839977502822876,0.365999639034271,0.400602132081985,-0.784685611724854,0.430022925138474,0.446484923362732,-0.224501311779022,0.125647932291031,0.966339349746704,-0.379228323698044,0.925303101539612,-2.7772266548709e-005,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.839977502822876,0.365999639034271,0.400602132081985,-0.359729558229446,0.842673659324646,0.400619268417358,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.876223564147949,0.481887936592102,-0.00404113344848156,-0.82353150844574,0.433955609798431,0.365346997976303,-0.784685611724854,0.430022925138474,0.446484923362732,-0.922426700592041,0.386172264814377,-1.29236177599523e-005,-0.879828155040741,0.475291937589645,4.95063375183236e-007,-0.784685611724854,0.430022925138474,0.446484923362732,-0.839977502822876,0.365999639034271,0.400602132081985,0.391825526952744,0.788023412227631,0.474859833717346,0.806965947151184,0.306465566158295,0.504861176013947,0.934493005275726,0.355923593044281,0.00642255879938602,0.470227479934692,0.88252204656601,0.00639821914955974,0.801087200641632,-0.297826498746872,0.519190430641174,0.367402404546738,-0.773531317710876,0.516395926475525, 0.44488126039505,-0.89555948972702,0.00733880698680878,0.931309640407562,-0.364154070615768,0.00736169191077352,0.367402404546738,-0.773531317710876,0.516395926475525,0.801087200641632,-0.297826498746872,0.519190430641174,0.318617641925812,-0.106823146343231,0.941844820976257,0.101462937891483,-0.233674854040146,0.967006385326386,0.391825526952744,0.788023412227631,0.474859833717346,0.119092851877213,0.270987540483475,0.955187201499939,0.331482470035553,0.125218272209167,0.935114860534668,0.806965947151184,0.306465566158295,0.504861176013947,0.202535301446915,-0.827068865299225,0.524343967437744,-0.484778821468353,-0.720648169517517,0.495636761188507,-0.530582964420319,-0.847630381584167,0.00210796948522329,0.230931788682938,-0.972930014133453,0.00881298631429672,0.0620995722711086,-0.238982826471329,0.969036042690277,-0.223055556416512,-0.293780386447906,0.929483354091644,-0.484778821468353,-0.720648169517517,0.495636761188507,0.202535301446915,-0.827068865299225,0.524343967437744,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.223055556416512,-0.293780386447906,0.929483354091644,0.0620995722711086,-0.238982826471329,0.969036042690277,-0.224501311779022,0.125647932291031,0.966339349746704,0.318617641925812,-0.106823146343231,0.941844820976257,0.331482470035553,0.125218272209167,0.935114860534668,0.119092851877213,0.270987540483475,0.955187201499939,0.101462937891483,-0.233674854040146,0.967006385326386,0.800876438617706,-0.339855968952179,0.493046551942825,0.257298767566681,-0.254731476306915,0.932153046131134,0.334624856710434,-0.800290584564209,0.497555166482925,0.813896775245667,0.349610984325409,0.464051961898804,0.350653737783432,0.829828143119812,0.434081971645355,0.283706575632095,0.309986978769302,0.907424211502075,0.257298767566681,-0.254731476306915,0.932153046131134,0.106314092874527,-0.103658013045788,0.988914728164673,0.0777146592736244,-0.258388966321945,0.962909936904907,0.136184617877007,0.141381427645683,0.980543255805969,0.283706575632095,0.309986978769302,0.907424211502075,-0.267910957336426,0.269903123378754,0.924865424633026, -0.907637715339661,-0.237347409129143,0.34620800614357,-0.516254961490631,0.0715761184692383,0.85343873500824,-0.82353150844574,0.433955609798431,0.365346997976303,-0.267910957336426,0.269903123378754,0.924865424633026,-0.359729558229446,0.842673659324646,0.400619268417358,-0.839977502822876,0.365999639034271,0.400602132081985,-0.715936124324799,-0.265720427036285,-0.645622253417969,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.94429612159729,0.285850405693054,0.163077712059021,-0.838626086711884,0.269073814153671,0.473609089851379,-0.28647455573082,0.941656053066254,0.176681011915207,0.444880247116089,-0.370750695466995,0.815245687961578,0.441483318805695,-0.799440860748291,0.407414764165878,0.971585929393768,-0.201965615153313,0.123412564396858,0.867507219314575,0.29306098818779,0.401928424835205,-0.838626086711884,0.269073814153671,0.473609089851379,-0.593102335929871,0.413477510213852,0.690844416618347,-0.093751385807991,0.893021583557129,0.440139919519424,-0.28647455573082,0.941656053066254,0.176681011915207,-0.593102335929871,0.413477510213852,0.690844416618347,-0.287397742271423,0.360831707715988,0.887244582176209,0.16777765750885,0.800705552101135,0.57508373260498,-0.093751385807991,0.893021583557129,0.440139919519424,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.715936124324799,-0.265720427036285,-0.645622253417969,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.188246309757233,-0.278920531272888,-0.941682875156403,0.862523198127747,-0.491381734609604,-0.120820865035057,0.275533765554428,-0.959253966808319,0.0625537186861038,0.1276044100523,-0.98238742351532,-0.136499106884003,0.669596016407013,-0.609213531017303,-0.424853086471558,0.441483318805695,-0.799440860748291,0.407414764165878,0.275533765554428,-0.959253966808319,0.0625537186861038,0.862523198127747,-0.491381734609604,-0.120820865035057,0.971585929393768,-0.201965615153313,0.123412564396858, 0.1276044100523,-0.98238742351532,-0.136499106884003,-0.157730147242546,-0.903618812561035,-0.398238956928253,0.234486192464828,-0.579630196094513,-0.780413389205933,0.669596016407013,-0.609213531017303,-0.424853086471558,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.188246309757233,-0.278920531272888,-0.941682875156403,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.94429612159729,0.285850405693054,0.163077712059021,-0.280009269714355,0.941216468811035,-0.18896122276783,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.477360427379608,0.551516830921173,0.684073209762573,0.125939533114433,0.102134250104427,0.986766338348389,-0.093751385807991,0.893021583557129,0.440139919519424,-0.48685422539711,0.635573267936707,0.599182426929474,-0.644909203052521,0.686387538909912,0.336101531982422,-0.28647455573082,0.941656053066254,0.176681011915207,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.590422987937927,0.577111005783081,-0.564219415187836,0.430329024791718,-0.429309993982315,0.794046521186829,0.698819696903229,-0.628040254116058,0.342368811368942,0.971585929393768,-0.201965615153313,0.123412564396858,0.862523198127747,-0.491381734609604,-0.120820865035057,0.311042487621307,0.756668508052826,0.575069785118103,-0.000230645935516804,0.945964872837067,0.324269145727158,0.125939533114433,0.102134250104427,0.986766338348389,-0.287397742271423,0.360831707715988,0.887244582176209,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.196220353245735,-0.529779434204102,0.82512503862381, -0.890061616897583,0.000229601078899577,-0.455840140581131,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.174817264080048,-0.965653240680695,-0.192231014370918,0.669596016407013,-0.609213531017303,-0.424853086471558,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.838626086711884,0.269073814153671,0.473609089851379,-0.94429612159729,0.285850405693054,0.163077712059021,-0.456121265888214,-0.623351812362671,-0.635126709938049,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.15072038769722,0.436317950487137,-0.887079477310181,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.715936124324799,-0.265720427036285,-0.645622253417969,0.932197749614716,0.288106322288513,0.219093680381775,0.938903152942657,-0.259861499071121,0.225683227181435,0.441483318805695,-0.799440860748291,0.407414764165878,0.444880247116089,-0.370750695466995,0.815245687961578,-0.593102335929871,0.413477510213852,0.690844416618347,-0.838626086711884,0.269073814153671,0.473609089851379,-0.118636824190617,0.992627620697021,0.0248145386576653,0.353509962558746,0.865797221660614,0.354155212640762,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.0224729143083096,0.939465522766113,-0.341905742883682,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.590422987937927,0.577111005783081,-0.564219415187836,-0.45841521024704,0.236967280507088,0.856564044952393,-0.48685422539711,0.635573267936707,0.599182426929474,-0.093751385807991,0.893021583557129,0.440139919519424,0.16777765750885,0.800705552101135,0.57508373260498,0.353509962558746,0.865797221660614,0.354155212640762,0.311042487621307,0.756668508052826,0.575069785118103,-0.287397742271423,0.360831707715988,0.887244582176209,-0.593102335929871,0.413477510213852,0.690844416618347, 0.1276044100523,-0.98238742351532,-0.136499106884003,0.712573170661926,-0.434123963117599,-0.551158607006073,0.196220353245735,-0.529779434204102,0.82512503862381,-0.157730147242546,-0.903618812561035,-0.398238956928253,-0.942690014839172,0.129888460040092,-0.307350814342499,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.94429612159729,0.285850405693054,0.163077712059021,0.275533765554428,-0.959253966808319,0.0625537186861038,0.825049936771393,-0.453089714050293,-0.337642371654511,0.712573170661926,-0.434123963117599,-0.551158607006073,0.1276044100523,-0.98238742351532,-0.136499106884003,0.938903152942657,-0.259861499071121,0.225683227181435,0.825049936771393,-0.453089714050293,-0.337642371654511,0.275533765554428,-0.959253966808319,0.0625537186861038,0.441483318805695,-0.799440860748291,0.407414764165878,0.477360427379608,0.551516830921173,0.684073209762573,0.867507219314575,0.29306098818779,0.401928424835205,0.458260357379913,-0.0337133072316647,0.888178408145905,0.131552502512932,0.257139623165131,0.957378268241882,0.444880247116089,-0.370750695466995,0.815245687961578,0.963503360748291,0.0733285918831825,-0.257457196712494,0.932197749614716,0.288106322288513,0.219093680381775,0.971585929393768,-0.201965615153313,0.123412564396858,0.698819696903229,-0.628040254116058,0.342368811368942,0.710298955440521,-0.332644939422607,0.620340883731842,0.867507219314575,0.29306098818779,0.401928424835205,0.862523198127747,-0.491381734609604,-0.120820865035057,0.669596016407013,-0.609213531017303,-0.424853086471558,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.430329024791718,-0.429309993982315,0.794046521186829,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.0995239168405533,-0.824471116065979,-0.55708384513855,0.234486192464828,-0.579630196094513,-0.780413389205933,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.564248859882355,-0.400254756212235,-0.72209370136261, -0.39165410399437,-0.637071013450623,-0.663888275623322,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.280009269714355,0.941216468811035,-0.18896122276783,0.16777765750885,0.800705552101135,0.57508373260498,0.477360427379608,0.551516830921173,0.684073209762573,0.131552502512932,0.257139623165131,0.957378268241882,-0.45841521024704,0.236967280507088,0.856564044952393,0.125939533114433,0.102134250104427,0.986766338348389,0.477360427379608,0.551516830921173,0.684073209762573,0.16777765750885,0.800705552101135,0.57508373260498,-0.287397742271423,0.360831707715988,0.887244582176209,0.125939533114433,0.102134250104427,0.986766338348389,-0.000230645935516804,0.945964872837067,0.324269145727158,0.963503360748291,0.0733285918831825,-0.257457196712494,0.444880247116089,-0.370750695466995,0.815245687961578,0.867507219314575,0.29306098818779,0.401928424835205,0.710298955440521,-0.332644939422607,0.620340883731842,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.644909203052521,0.686387538909912,0.336101531982422,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.280009269714355,0.941216468811035,-0.18896122276783,-0.28647455573082,0.941656053066254,0.176681011915207,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.188246309757233,-0.278920531272888,-0.941682875156403,-0.425395786762238,0.0713668540120125,-0.902189075946808,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.425395786762238,0.0713668540120125,-0.902189075946808,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.734102785587311,-0.292018711566925,-0.613040089607239,0.912895321846008,-0.237331077456474,-0.332108557224274,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.554785251617432,-0.486120134592056,-0.675204038619995, 0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.734102785587311,-0.292018711566925,-0.613040089607239,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.416033059358597,-0.68202668428421,-0.60146164894104,0.245215684175491,0.0387152023613453,-0.968695223331451,0.550641417503357,-0.21704863011837,-0.806029736995697,0.0798471421003342,-0.235298857092857,-0.968637645244598,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.631522357463837,-0.462838768959045,-0.622060894966125,0.0447333157062531,0.253253638744354,-0.966365098953247,0.245215684175491,0.0387152023613453,-0.968695223331451,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.692777395248413,-0.369596987962723,-0.619239509105682,0.014613856561482,0.369894355535507,-0.928958892822266,0.0447333157062531,0.253253638744354,-0.966365098953247,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.109934903681278,0.544603824615479,-0.831457078456879,0.014613856561482,0.369894355535507,-0.928958892822266,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.109934903681278,0.544603824615479,-0.831457078456879,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.492600291967392,-0.0365926474332809,0.869486033916473,0.168574303388596,0.687315046787262,0.706527233123779,0.379244118928909,0.687416434288025,0.6193807721138,-0.492600291967392,-0.0365926474332809,0.869486033916473, -0.26186203956604,-0.22778545320034,0.937839031219482,0.452623516321182,0.438722670078278,0.776308119297028,0.168574303388596,0.687315046787262,0.706527233123779,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.694800972938538,0.194172203540802,0.692494571208954,0.452623516321182,0.438722670078278,0.776308119297028,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.11012527346611,-0.683853626251221,0.72126042842865,0.860161125659943,-0.0221190489828587,0.509542524814606,0.694800972938538,0.194172203540802,0.692494571208954,0.11012527346611,-0.683853626251221,0.72126042842865,0.185537919402123,-0.862958252429962,0.469977349042892,0.939531803131104,-0.259159535169601,0.223866790533066,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.185537919402123,-0.862958252429962,0.469977349042892,0.152538388967514,-0.224785834550858,0.962394595146179,0.536905825138092,-0.0598908923566341,0.841513633728027,0.402792274951935,-0.430315464735031,0.807828545570374,0.213872507214546,-0.799906253814697,-0.560721397399902,0.431525766849518,-0.644686222076416,-0.631003320217133,0.620412230491638,-0.276802182197571,0.7338045835495,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.912895321846008,-0.237331077456474,-0.332108557224274,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.734102785587311,-0.292018711566925,-0.613040089607239,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.773750245571136,0.0814331769943237,-0.62823498249054,0.734102785587311,-0.292018711566925,-0.613040089607239,0.0883260667324066,-0.0597434565424919,-0.994298338890076,0.550641417503357,-0.21704863011837,-0.806029736995697,0.245215684175491,0.0387152023613453,-0.968695223331451,0.518284618854523,0.496293634176254,-0.69647228717804,0.708127677440643,0.316911339759827,-0.6309694647789, 0.245215684175491,0.0387152023613453,-0.968695223331451,0.0447333157062531,0.253253638744354,-0.966365098953247,0.452985435724258,0.593249797821045,-0.665476441383362,0.518284618854523,0.496293634176254,-0.69647228717804,0.0447333157062531,0.253253638744354,-0.966365098953247,0.014613856561482,0.369894355535507,-0.928958892822266,0.495889782905579,0.643950700759888,-0.582598328590393,0.452985435724258,0.593249797821045,-0.665476441383362,0.014613856561482,0.369894355535507,-0.928958892822266,-0.109934903681278,0.544603824615479,-0.831457078456879,0.408554971218109,0.713565170764923,-0.569128751754761,0.495889782905579,0.643950700759888,-0.582598328590393,-0.109934903681278,0.544603824615479,-0.831457078456879,-0.262595504522324,0.756710708141327,-0.598692297935486,0.298005253076553,0.807478785514832,-0.509088277816772,0.408554971218109,0.713565170764923,-0.569128751754761,-0.262595504522324,0.756710708141327,-0.598692297935486,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.261479198932648,0.892048358917236,-0.368616729974747,0.298005253076553,0.807478785514832,-0.509088277816772,-0.0453839227557182,0.813610911369324,-0.579635679721832,0.434583961963654,0.868087708950043,-0.239917635917664,0.274172246456146,0.939159333705902,-0.206904113292694,0.261479198932648,0.892048358917236,-0.368616729974747,0.434583961963654,0.868087708950043,-0.239917635917664,0.432530790567398,0.890540361404419,-0.140907749533653,0.244631126523018,0.968607366085052,-0.0442199148237705,0.274172246456146,0.939159333705902,-0.206904113292694,0.432530790567398,0.890540361404419,-0.140907749533653,0.473273813724518,0.879378318786621,-0.0520168133080006,0.308822751045227,0.945434510707855,0.103837110102177,0.244631126523018,0.968607366085052,-0.0442199148237705,0.493666648864746,0.825041174888611,0.274955064058304,0.308822751045227,0.945434510707855,0.103837110102177,0.473273813724518,0.879378318786621,-0.0520168133080006,0.379244118928909,0.687416434288025,0.6193807721138,0.168574303388596,0.687315046787262,0.706527233123779,0.168574303388596,0.687315046787262,0.706527233123779, 0.452623516321182,0.438722670078278,0.776308119297028,0.684545934200287,0.646372973918915,0.337044298648834,0.493666648864746,0.825041174888611,0.274955064058304,0.452623516321182,0.438722670078278,0.776308119297028,0.694800972938538,0.194172203540802,0.692494571208954,0.821635723114014,0.506255805492401,0.261953771114349,0.684545934200287,0.646372973918915,0.337044298648834,0.694800972938538,0.194172203540802,0.692494571208954,0.860161125659943,-0.0221190489828587,0.509542524814606,0.910674393177032,0.388812184333801,0.139632686972618,0.821635723114014,0.506255805492401,0.261953771114349,0.860161125659943,-0.0221190489828587,0.509542524814606,0.939531803131104,-0.259159535169601,0.223866790533066,0.978960454463959,0.203055590391159,-0.0201213043183088,0.910674393177032,0.388812184333801,0.139632686972618,0.939531803131104,-0.259159535169601,0.223866790533066,0.536905825138092,-0.0598908923566341,0.841513633728027,0.808023393154144,0.485407531261444,0.333882838487625,0.978960454463959,0.203055590391159,-0.0201213043183088,0.716321706771851,-0.189274966716766,0.671608626842499,0.633299946784973,-0.263623267412186,-0.727622151374817,0.655673146247864,0.429177463054657,-0.621208012104034,0.8587726354599,0.351541489362717,0.372730553150177,0.34168353676796,-0.250584989786148,-0.90579217672348,0.912895321846008,-0.237331077456474,-0.332108557224274,0.917431473731995,0.173299670219421,-0.358171314001083,0.560299038887024,0.522571742534637,-0.642638146877289,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.0529462173581123,-0.663012385368347,-0.746733784675598,-0.324506491422653,-0.76884526014328,-0.550974130630493,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.118618525564671,-0.856628596782684,-0.502112627029419,0.0447756871581078,-0.48030561208725,0.875957548618317,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.785106539726257,-0.527087867259979,-0.325247794389725,0.152538388967514,-0.224785834550858,0.962394595146179,0.185537919402123,-0.862958252429962,0.469977349042892,0.698819696903229,-0.628040254116058,0.342368811368942, 0.430329024791718,-0.429309993982315,0.794046521186829,0.185537919402123,-0.862958252429962,0.469977349042892,0.11012527346611,-0.683853626251221,0.72126042842865,0.710298955440521,-0.332644939422607,0.620340883731842,0.698819696903229,-0.628040254116058,0.342368811368942,0.11012527346611,-0.683853626251221,0.72126042842865,-0.0175823662430048,-0.464624613523483,0.885333180427551,0.458260357379913,-0.0337133072316647,0.888178408145905,0.710298955440521,-0.332644939422607,0.620340883731842,-0.0175823662430048,-0.464624613523483,0.885333180427551,-0.26186203956604,-0.22778545320034,0.937839031219482,0.131552502512932,0.257139623165131,0.957378268241882,0.458260357379913,-0.0337133072316647,0.888178408145905,-0.26186203956604,-0.22778545320034,0.937839031219482,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.45841521024704,0.236967280507088,0.856564044952393,0.131552502512932,0.257139623165131,0.957378268241882,-0.492600291967392,-0.0365926474332809,0.869486033916473,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.45841521024704,0.236967280507088,0.856564044952393,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.48685422539711,0.635573267936707,0.599182426929474,-0.45841521024704,0.236967280507088,0.856564044952393,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.644909203052521,0.686387538909912,0.336101531982422,-0.48685422539711,0.635573267936707,0.599182426929474,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.644909203052521,0.686387538909912,0.336101531982422,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.732633888721466,0.678043484687805,0.0591999553143978,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.967885553836823,0.0332815907895565,-0.2491784542799, -0.896995723247528,0.227888956665993,-0.378768175840378,-0.803242444992065,0.584271669387817,-0.115879893302917,-0.967885553836823,0.0332815907895565,-0.2491784542799,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.896995723247528,0.227888956665993,-0.378768175840378,-0.816524565219879,-0.212788254022598,-0.536664545536041,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.726660370826721,-0.194792434573174,-0.658802449703217,-0.692777395248413,-0.369596987962723,-0.619239509105682,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.590430736541748,-0.351442277431488,-0.726553440093994,-0.631522357463837,-0.462838768959045,-0.622060894966125,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.564248859882355,-0.400254756212235,-0.72209370136261,-0.416033059358597,-0.68202668428421,-0.60146164894104,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.39165410399437,-0.637071013450623,-0.663888275623322,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.174817264080048,-0.965653240680695,-0.192231014370918,-0.0995239168405533,-0.824471116065979,-0.55708384513855,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.0485654957592487,-0.998615622520447,0.0202043671160936,0.174817264080048,-0.965653240680695,-0.192231014370918,0.473273813724518,0.879378318786621,-0.0520168133080006,0.432530790567398,0.890540361404419,-0.140907749533653,-0.0387217588722706,0.991758227348328,0.122131980955601,0.0474359504878521,0.963465213775635,0.263599425554276,0.432530790567398,0.890540361404419,-0.140907749533653,0.434583961963654,0.868087708950043,-0.239917635917664,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0387217588722706,0.991758227348328,0.122131980955601, 0.434583961963654,0.868087708950043,-0.239917635917664,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.0453839227557182,0.813610911369324,-0.579635679721832,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.361907035112381,0.692692756652832,-0.623859047889709,-0.961901783943176,-0.240396350622177,-0.130209416151047,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.939602613449097,-0.0850153714418411,-0.33154085278511,-0.767853438854218,-0.571131825447083,0.290188789367676,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.950904071331024,-0.10767637193203,0.290150344371796,-0.774236679077148,-0.53553432226181,0.337284058332443,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.745286226272583,-0.551344156265259,0.374924063682556,-0.507395565509796,-0.316553086042404,0.801463544368744,-0.356422990560532,-0.175295606255531,0.917733132839203,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.507395565509796,-0.316553086042404,0.801463544368744,0.379244118928909,0.687416434288025,0.6193807721138,0.281729221343994,0.614752173423767,0.736687481403351,-0.356422990560532,-0.175295606255531,0.917733132839203,0.379244118928909,0.687416434288025,0.6193807721138,0.473273813724518,0.879378318786621,-0.0520168133080006,0.0474359504878521,0.963465213775635,0.263599425554276,0.281729221343994,0.614752173423767,0.736687481403351,0.0474359504878521,0.963465213775635,0.263599425554276,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.356422990560532,-0.175295606255531,0.917733132839203,0.281729221343994,0.614752173423767,0.736687481403351,-0.888648450374603,-0.0919873118400574,0.449268519878387, -0.0387217588722706,0.991758227348328,0.122131980955601,-0.114330105483532,0.989368736743927,-0.0898787155747414,-0.950904071331024,-0.10767637193203,0.290150344371796,0.0474359504878521,0.963465213775635,0.263599425554276,-0.0387217588722706,0.991758227348328,0.122131980955601,-0.888648450374603,-0.0919873118400574,0.449268519878387,-0.82242077589035,-0.122631624341011,0.555504739284515,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.554785251617432,-0.486120134592056,-0.675204038619995,-0.125359445810318,-0.967730283737183,-0.218593493103981,-0.382183432579041,-0.525775790214539,-0.759931325912476,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0883260667324066,-0.0597434565424919,-0.994298338890076,-0.554785251617432,-0.486120134592056,-0.675204038619995,0.773750245571136,0.0814331769943237,-0.62823498249054,0.550641417503357,-0.21704863011837,-0.806029736995697,0.708127677440643,0.316911339759827,-0.6309694647789,0.834144115447998,0.219395592808723,-0.506032764911652,0.912895321846008,-0.237331077456474,-0.332108557224274,0.773750245571136,0.0814331769943237,-0.62823498249054,0.834144115447998,0.219395592808723,-0.506032764911652,0.917431473731995,0.173299670219421,-0.358171314001083,-0.125359445810318,-0.967730283737183,-0.218593493103981,0.0485654957592487,-0.998615622520447,0.0202043671160936,-0.397501945495605,-0.911328136920929,-0.10711282491684,-0.184634819626808,-0.868635058403015,-0.459764152765274,-0.382183432579041,-0.525775790214539,-0.759931325912476,-0.397501945495605,-0.911328136920929,-0.10711282491684,0.550641417503357,-0.21704863011837,-0.806029736995697,0.773750245571136,0.0814331769943237,-0.62823498249054,0.0798471421003342,-0.235298857092857,-0.968637645244598,0.0447756871581078,-0.48030561208725,0.875957548618317,0.402792274951935,-0.430315464735031,0.807828545570374,0.152538388967514,-0.224785834550858,0.962394595146179,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.34168353676796,-0.250584989786148,-0.90579217672348, 0.431525766849518,-0.644686222076416,-0.631003320217133,0.213872507214546,-0.799906253814697,-0.560721397399902,0.536905825138092,-0.0598908923566341,0.841513633728027,0.152538388967514,-0.224785834550858,0.962394595146179,0.402792274951935,-0.430315464735031,0.807828545570374,0.620412230491638,-0.276802182197571,0.7338045835495,0.620412230491638,-0.276802182197571,0.7338045835495,0.716321706771851,-0.189274966716766,0.671608626842499,0.536905825138092,-0.0598908923566341,0.841513633728027,0.34168353676796,-0.250584989786148,-0.90579217672348,0.560299038887024,0.522571742534637,-0.642638146877289,0.655673146247864,0.429177463054657,-0.621208012104034,0.633299946784973,-0.263623267412186,-0.727622151374817,0.560299038887024,0.522571742534637,-0.642638146877289,0.808023393154144,0.485407531261444,0.333882838487625,0.8587726354599,0.351541489362717,0.372730553150177,0.655673146247864,0.429177463054657,-0.621208012104034,0.808023393154144,0.485407531261444,0.333882838487625,0.536905825138092,-0.0598908923566341,0.841513633728027,0.716321706771851,-0.189274966716766,0.671608626842499,0.8587726354599,0.351541489362717,0.372730553150177,0.152538388967514,-0.224785834550858,0.962394595146179,0.430329024791718,-0.429309993982315,0.794046521186829,-0.665691614151001,-0.224520370364189,0.711649715900421,0.0447756871581078,-0.48030561208725,0.875957548618317,0.430329024791718,-0.429309993982315,0.794046521186829,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.665691614151001,-0.224520370364189,0.711649715900421,-0.324506491422653,-0.76884526014328,-0.550974130630493,-0.0529462173581123,-0.663012385368347,-0.746733784675598,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.785106539726257,-0.527087867259979,-0.325247794389725,-0.0529462173581123,-0.663012385368347,-0.746733784675598,0.213872507214546,-0.799906253814697,-0.560721397399902,-0.118618525564671,-0.856628596782684,-0.502112627029419,-0.118618525564671,-0.856628596782684,-0.502112627029419, 0.213872507214546,-0.799906253814697,-0.560721397399902,0.402792274951935,-0.430315464735031,0.807828545570374,0.0447756871581078,-0.48030561208725,0.875957548618317,0.431525766849518,-0.644686222076416,-0.631003320217133,0.633299946784973,-0.263623267412186,-0.727622151374817,0.716321706771851,-0.189274966716766,0.671608626842499,0.620412230491638,-0.276802182197571,0.7338045835495,0.34168353676796,-0.250584989786148,-0.90579217672348,0.633299946784973,-0.263623267412186,-0.727622151374817,0.431525766849518,-0.644686222076416,-0.631003320217133,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.619437336921692,-0.682137429714203,0.38856914639473,0.944702625274658,-0.242696091532707,0.22053462266922,0.783942937850952,-0.186095729470253,-0.59228527545929,0.563710689544678,-0.825831174850464,-0.0152685670182109,-0.622635543346405,-0.330902069807053,-0.709104180335999,-0.345263749361038,0.0585285425186157,-0.936678886413574,0.860051214694977,-0.450541734695435,-0.239424526691437,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.636468827724457,-0.680911600589752,-0.362307667732239,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.204246431589127,0.468568325042725,-0.859492361545563,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.218518972396851,0.973436176776886,-0.0683486759662628, -0.28282842040062,0.665716886520386,-0.690528094768524,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.68883353471756,0.240426927804947,0.68388831615448,-0.515329539775848,0.822090923786163,0.242078438401222,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.362409710884094,-0.350539416074753,0.86358630657196,0.421934872865677,0.754051804542542,0.503365516662598,-0.0888755843043327,0.982992351055145,0.160708159208298,0.647586286067963,0.657160103321075,0.385710477828979,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.681038498878479,0.23202945291996,0.694513380527496,-0.194348111748695,0.853331387042999,0.483791589736938,-0.186525732278824,0.166592419147491,0.968222677707672,0.557236135005951,-0.528833091259003,0.640174508094788,0.84937584400177,-0.117848217487335,0.514463245868683,0.147361263632774,0.536922037601471,0.83066201210022,0.492649406194687,-0.832895398139954,0.252154290676117,0.117170162498951,-0.72569465637207,0.677966356277466,0.688185930252075,-0.329065650701523,0.646618843078613,0.740381181240082,-0.407373487949371,0.53467983007431,0.128620937466621,-0.731338679790497,-0.669776320457459,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.409443646669388,-0.535873591899872,-0.738373458385468,0.39375701546669,-0.458273440599442,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468,0.783942937850952,-0.186095729470253,-0.59228527545929,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253,-0.59228527545929,0.944702625274658,-0.242696091532707,0.22053462266922,0.196220353245735,-0.529779434204102,0.82512503862381,0.712573170661926,-0.434123963117599,-0.551158607006073,0.990355789661407,0.138366982340813,0.0070703998208046,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.270774930715561,0.961904466152191,-0.0376923382282257,0.524228572845459,0.571583867073059,0.631249785423279,-0.559645414352417,0.337002664804459,-0.757117092609406,0.0350158661603928,0.28818079829216,-0.956935584545136, 0.15072038769722,0.436317950487137,-0.887079477310181,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.0350158661603928,0.28818079829216,-0.956935584545136,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.393206983804703,0.276302039623261,-0.876952350139618,0.15072038769722,0.436317950487137,-0.887079477310181,-0.204246431589127,0.468568325042725,-0.859492361545563,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.393206983804703,0.276302039623261,-0.876952350139618,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.28282842040062,0.665716886520386,-0.690528094768524,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.642236828804016,0.662946939468384,-0.384750843048096,-0.118636824190617,0.992627620697021,0.0248145386576653,-0.218518972396851,0.973436176776886,-0.0683486759662628,-0.515329539775848,0.822090923786163,0.242078438401222,-0.544045865535736,0.806812047958374,0.230365887284279,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.0888755843043327,0.982992351055145,0.160708159208298,0.421934872865677,0.754051804542542,0.503365516662598,0.353509962558746,0.865797221660614,0.354155212640762,-0.118636824190617,0.992627620697021,0.0248145386576653,0.421934872865677,0.754051804542542,0.503365516662598,0.647586286067963,0.657160103321075,0.385710477828979,0.353509962558746,0.865797221660614,0.354155212640762,0.186152040958405,0.93400251865387,0.304937154054642,0.962971687316895,0.234042793512344,-0.133826553821564,0.376616507768631,0.266982734203339,-0.887062668800354,-0.115848742425442,0.797249376773834,-0.592429339885712,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.922376871109009,0.332838177680969,0.19606027007103,0.932197749614716,0.288106322288513,0.219093680381775, 0.963503360748291,0.0733285918831825,-0.257457196712494,0.656768381595612,0.692223727703094,-0.299134790897369,0.974745631217957,0.220444723963737,0.0357081368565559,0.86196494102478,-0.1180724427104,-0.493026673793793,0.675891757011414,0.290058821439743,-0.677522122859955,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.576983273029327,-0.730052053928375,0.366216242313385,-0.560702860355377,-0.742602586746216,0.366270005702972,0.0984330475330353,-0.979092538356781,-0.178013265132904,-0.423463702201843,-0.905563116073608,0.0251786317676306,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.570909857749939,-0.742268860340118,0.350854486227036,-0.576983273029327,-0.730052053928375,0.366216242313385,0.117170162498951,-0.72569465637207,0.677966356277466,0.492649406194687,-0.832895398139954,0.252154290676117,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.432871133089066,-0.797651648521423,0.419969528913498,-0.525343060493469,-0.763313293457031,0.375988662242889,0.146697908639908,-0.919724345207214,0.364124774932861,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.362409710884094,-0.350539416074753,0.86358630657196,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.938455939292908,0.222387745976448,0.26428034901619,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.845608711242676,-0.529381453990936,-0.0685647577047348,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.61448472738266,-0.769321084022522,0.174795731902123,-0.258471637964249,-0.55105721950531,0.793428242206573, -0.61448472738266,-0.769321084022522,0.174795731902123,-0.936240494251251,-0.336361736059189,-0.101560480892658,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.74268364906311,-0.662175238132477,0.099724605679512,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.704847455024719,-0.653521716594696,0.275861263275146,-0.812022507190704,-0.510543346405029,-0.282780736684799,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.585366904735565,-0.749170899391174,0.309981554746628,-0.636468827724457,-0.680911600589752,-0.362307667732239,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.563165187835693,-0.765297174453735,0.311713248491287,-0.940216422080994,-0.294904381036758,-0.170365795493126,0.274054676294327,-0.837668061256409,0.472447067499161,0.122500397264957,-0.675016582012177,0.727561831474304,-0.971858441829681,-0.121235102415085,0.201973125338554,0.619437336921692,-0.682137429714203,0.38856914639473,0.0984330475330353,-0.979092538356781,-0.178013265132904,-0.560702860355377,-0.742602586746216,0.366270005702972,0.129642620682716,-0.699265003204346,0.703008711338043,0.938903152942657,-0.259861499071121,0.225683227181435,0.932197749614716,0.288106322288513,0.219093680381775,0.656768381595612,0.692223727703094,-0.299134790897369,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.74268364906311,-0.662175238132477,0.099724605679512,-0.927430391311646,-0.277426600456238,-0.25081342458725,-0.964417695999146,-0.242346316576004,-0.10567332059145,-0.704847455024719,-0.653521716594696,0.275861263275146,0.647586286067963,0.657160103321075,0.385710477828979,0.421934872865677,0.754051804542542,0.503365516662598, -0.362409710884094,-0.350539416074753,0.86358630657196,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.349028646945953,-0.834601283073425,0.426168650388718,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.362409710884094,-0.350539416074753,0.86358630657196,0.353509962558746,0.865797221660614,0.354155212640762,0.647586286067963,0.657160103321075,0.385710477828979,0.311042487621307,0.756668508052826,0.575069785118103,-0.348378151655197,0.573172330856323,-0.741691410541534,-0.279853761196136,0.736617624759674,-0.615691781044006,-0.587697565555573,0.621326804161072,-0.518232226371765,-0.372533112764359,0.706867277622223,-0.601296663284302,-0.000230645935516804,0.945964872837067,0.324269145727158,0.311042487621307,0.756668508052826,0.575069785118103,0.647586286067963,0.657160103321075,0.385710477828979,-0.194348111748695,0.853331387042999,0.483791589736938,-0.231773406267166,-0.521698236465454,0.821043252944946,-0.411500960588455,-0.813480317592621,0.410994797945023,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.681038498878479,0.23202945291996,0.694513380527496,-0.938455939292908,0.222387745976448,0.26428034901619,-0.68883353471756,0.240426927804947,0.68388831615448,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.845512986183167,-0.529565334320068,-0.0683253705501556,-0.68883353471756,0.240426927804947,0.68388831615448,-0.714399695396423,0.0904595702886581,0.693866074085236,-0.258471637964249,-0.55105721950531,0.793428242206573,-0.25869232416153,-0.551353573799133,0.793150365352631,-0.544045865535736,0.806812047958374,0.230365887284279,-0.938455939292908,0.222387745976448,0.26428034901619,-0.948863983154297,0.0798187553882599,0.305427759885788,-0.0888755843043327,0.982992351055145,0.160708159208298,-0.582318484783173,0.299308508634567,0.755856871604919,-0.241258025169373,0.814110457897186,0.528222262859344,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.963154852390289,0.258741587400436,0.073385939002037,-0.515329539775848,0.822090923786163,0.242078438401222,-0.68883353471756,0.240426927804947,0.68388831615448, -0.384408742189407,0.77344286441803,0.504000067710876,-0.646622598171234,0.407719850540161,0.644704401493073,-0.68883353471756,0.240426927804947,0.68388831615448,-0.938455939292908,0.222387745976448,0.26428034901619,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.384408742189407,0.77344286441803,0.504000067710876,-0.938455939292908,0.222387745976448,0.26428034901619,-0.544045865535736,0.806812047958374,0.230365887284279,-0.915725409984589,0.365749269723892,0.166356295347214,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.544045865535736,0.806812047958374,0.230365887284279,-0.515329539775848,0.822090923786163,0.242078438401222,-0.646622598171234,0.407719850540161,0.644704401493073,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073,-0.384408742189407,0.77344286441803,0.504000067710876,-0.241258025169373,0.814110457897186,0.528222262859344,-0.582318484783173,0.299308508634567,0.755856871604919,-0.384408742189407,0.77344286441803,0.504000067710876,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.241258025169373,0.814110457897186,0.528222262859344,-0.660113751888275,0.749479293823242,0.0503051020205021,-0.915725409984589,0.365749269723892,0.166356295347214,-0.963154852390289,0.258741587400436,0.073385939002037,-0.608640491962433,0.785175085067749,-0.114266492426395,-0.915725409984589,0.365749269723892,0.166356295347214,-0.646622598171234,0.407719850540161,0.644704401493073,-0.582318484783173,0.299308508634567,0.755856871604919,-0.963154852390289,0.258741587400436,0.073385939002037,0.768967747688293,-0.480744570493698,0.421394437551498,0.786129951477051,-0.545342028141022,0.290863931179047,0.786934494972229,-0.544415593147278,0.290423303842545,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.86196494102478,-0.1180724427104,-0.493026673793793,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103,0.974745631217957,0.220444723963737,0.0357081368565559, 0.656768381595612,0.692223727703094,-0.299134790897369,0.932197749614716,0.288106322288513,0.219093680381775,0.117170162498951,-0.72569465637207,0.677966356277466,0.130088999867439,-0.835984408855438,0.533110618591309,0.767808198928833,-0.477225512266159,0.427465051412582,0.688185930252075,-0.329065650701523,0.646618843078613,-0.570683121681213,-0.742836952209473,0.350019991397858,0.130088999867439,-0.835984408855438,0.533110618591309,0.117170162498951,-0.72569465637207,0.677966356277466,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.186525732278824,0.166592419147491,0.968222677707672,-0.681038498878479,0.23202945291996,0.694513380527496,0.492649406194687,-0.832895398139954,0.252154290676117,0.740381181240082,-0.407373487949371,0.53467983007431,0.740420699119568,-0.407449632883072,0.53456711769104,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.84937584400177,-0.117848217487335,0.514463245868683,0.557236135005951,-0.528833091259003,0.640174508094788,-0.194348111748695,0.853331387042999,0.483791589736938,-0.681038498878479,0.23202945291996,0.694513380527496,-0.186525732278824,0.166592419147491,0.968222677707672,0.147361263632774,0.536922037601471,0.83066201210022,0.147361263632774,0.536922037601471,0.83066201210022,0.186152040958405,0.93400251865387,0.304937154054642,-0.194348111748695,0.853331387042999,0.483791589736938,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.963503360748291,0.0733285918831825,-0.257457196712494,0.376616507768631,0.266982734203339,-0.887062668800354,0.962971687316895,0.234042793512344,-0.133826553821564,0.963503360748291,0.0733285918831825,-0.257457196712494,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.115848742425442,0.797249376773834,-0.592429339885712,0.376616507768631,0.266982734203339,-0.887062668800354,-0.000230645935516804,0.945964872837067,0.324269145727158,-0.194348111748695,0.853331387042999,0.483791589736938,0.186152040958405,0.93400251865387,0.304937154054642,-0.115848742425442,0.797249376773834,-0.592429339885712, -0.681038498878479,0.23202945291996,0.694513380527496,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.938751816749573,-0.267549335956573,-0.2171690762043,-0.263038337230682,-0.85704118013382,-0.443047612905502,-0.319790989160538,-0.818331360816956,-0.47756415605545,-0.939789652824402,-0.260946482419968,-0.220685958862305,-0.263038337230682,-0.85704118013382,-0.443047612905502,0.492649406194687,-0.832895398139954,0.252154290676117,0.146697908639908,-0.919724345207214,0.364124774932861,-0.319790989160538,-0.818331360816956,-0.47756415605545,0.492649406194687,-0.832895398139954,0.252154290676117,0.557236135005951,-0.528833091259003,0.640174508094788,0.146697908639908,-0.919724345207214,0.364124774932861,0.84937584400177,-0.117848217487335,0.514463245868683,0.962971687316895,0.234042793512344,-0.133826553821564,0.186152040958405,0.93400251865387,0.304937154054642,0.147361263632774,0.536922037601471,0.83066201210022,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.962971687316895,0.234042793512344,-0.133826553821564,0.84937584400177,-0.117848217487335,0.514463245868683,0.146697908639908,-0.919724345207214,0.364124774932861,0.557236135005951,-0.528833091259003,0.640174508094788,-0.186525732278824,0.166592419147491,0.968222677707672,-0.673596203327179,-0.148960739374161,0.723932862281799,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.525343060493469,-0.763313293457031,0.375988662242889,-0.570909857749939,-0.742268860340118,0.350854486227036,0.143902435898781,-0.987122178077698,-0.0698700472712517,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.128620937466621,-0.731338679790497,-0.669776320457459,0.675891757011414,0.290058821439743,-0.677522122859955,0.86196494102478,-0.1180724427104,-0.493026673793793,0.39375701546669,-0.458273440599442,-0.796831786632538,0.409443646669388,-0.535873591899872,-0.738373458385468, 0.86196494102478,-0.1180724427104,-0.493026673793793,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.39375701546669,-0.458273440599442,-0.796831786632538,0.675891757011414,0.290058821439743,-0.677522122859955,0.409443646669388,-0.535873591899872,-0.738373458385468,0.851781845092773,0.0115588782355189,-0.523769080638886,0.825049936771393,-0.453089714050293,-0.337642371654511,0.938903152942657,-0.259861499071121,0.225683227181435,0.656768381595612,0.692223727703094,-0.299134790897369,0.675891757011414,0.290058821439743,-0.677522122859955,0.851781845092773,0.0115588782355189,-0.523769080638886,-0.570683121681213,-0.742836952209473,0.350019991397858,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.130088999867439,-0.835984408855438,0.533110618591309,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.622635543346405,-0.330902069807053,-0.709104180335999,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.944702625274658,-0.242696091532707,0.22053462266922,0.619437336921692,-0.682137429714203,0.38856914639473,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.860051214694977,-0.450541734695435,-0.239424526691437,0.860051214694977,-0.450541734695435,-0.239424526691437,0.990355789661407,0.138366982340813,0.0070703998208046,0.944702625274658,-0.242696091532707,0.22053462266922,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.890061616897583,0.000229601078899577,-0.455840140581131,-0.270774930715561,0.961904466152191,-0.0376923382282257,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.890061616897583,0.000229601078899577,-0.455840140581131,0.196220353245735,-0.529779434204102,0.82512503862381,0.524228572845459,0.571583867073059,0.631249785423279,-0.270774930715561,0.961904466152191,-0.0376923382282257, 0.196220353245735,-0.529779434204102,0.82512503862381,0.944702625274658,-0.242696091532707,0.22053462266922,0.990355789661407,0.138366982340813,0.0070703998208046,0.524228572845459,0.571583867073059,0.631249785423279,0.619437336921692,-0.682137429714203,0.38856914639473,0.129642620682716,-0.699265003204346,0.703008711338043,0.122500397264957,-0.675016582012177,0.727561831474304,0.274054676294327,-0.837668061256409,0.472447067499161,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.208573296666145,0.566935956478119,0.796919584274292,-0.974008142948151,-0.145383641123772,0.173700094223022,-0.899655342102051,0.0265117771923542,-0.435795217752457,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.971858441829681,-0.121235102415085,0.201973125338554,-0.940216422080994,-0.294904381036758,-0.170365795493126,-0.622635543346405,-0.330902069807053,-0.709104180335999,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.274054676294327,-0.837668061256409,0.472447067499161,0.274054676294327,-0.837668061256409,0.472447067499161,0.563710689544678,-0.825831174850464,-0.0152685670182109,0.619437336921692,-0.682137429714203,0.38856914639473,-0.559645414352417,0.337002664804459,-0.757117092609406,-0.182028561830521,0.561503648757935,-0.80720454454422,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.345263749361038,0.0585285425186157,-0.936678886413574,-0.182028561830521,0.561503648757935,-0.80720454454422,0.990355789661407,0.138366982340813,0.0070703998208046,0.860051214694977,-0.450541734695435,-0.239424526691437,0.779076516628265,-0.514032542705536,0.35890144109726,0.786129951477051,-0.545342028141022,0.290863931179047,0.768967747688293,-0.480744570493698,0.421394437551498,0.130088999867439,-0.835984408855438,0.533110618591309,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.76507031917572,-0.643946468830109,0.000624333799351007,0.786640048027039,-0.542381346225739,0.294991344213486, 0.785886585712433,-0.543201982975006,0.295489281415939,0.767808198928833,-0.477225512266159,0.427465051412582,0.786934494972229,-0.544415593147278,0.290423303842545,0.78587132692337,-0.599782109260559,0.150557950139046,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.786640048027039,-0.542381346225739,0.294991344213486,0.76507031917572,-0.643946468830109,0.000624333799351007,0.785931706428528,-0.599372208118439,0.151869475841522,0.767808198928833,-0.477225512266159,0.427465051412582,0.785886585712433,-0.543201982975006,0.295489281415939,0.778943240642548,-0.513350427150726,0.360164850950241,0.517825782299042,-0.683434009552002,0.514562368392944,0.543316781520844,-0.79720413684845,0.263196527957916,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.818628549575806,-0.56630539894104,-0.095631942152977,0.936200797557831,-0.349729657173157,0.0348892845213413,0.927894592285156,-0.210005521774292,0.308073401451111,0.795584321022034,-0.263417273759842,0.545579493045807,0.623724460601807,-0.472118139266968,0.622954428195953,0.785886585712433,-0.543201982975006,0.295489281415939,0.786640048027039,-0.542381346225739,0.294991344213486,0.207798928022385,-0.957674980163574,0.199194043874741,0.171830341219902,-0.731816828250885,0.659483432769775,0.786640048027039,-0.542381346225739,0.294991344213486,0.785931706428528,-0.599372208118439,0.151869475841522,0.451574474573135,-0.847453653812408,-0.279110699892044,0.207798928022385,-0.957674980163574,0.199194043874741,0.785931706428528,-0.599372208118439,0.151869475841522,0.78587132692337,-0.599782109260559,0.150557950139046,0.737974345684052,-0.506336569786072,-0.446113437414169,0.451574474573135,-0.847453653812408,-0.279110699892044,0.78587132692337,-0.599782109260559,0.150557950139046,0.786934494972229,-0.544415593147278,0.290423303842545,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.737974345684052,-0.506336569786072,-0.446113437414169,0.786934494972229,-0.544415593147278,0.290423303842545,0.786129951477051,-0.545342028141022,0.290863931179047,0.947726309299469,0.160956501960754,0.275513887405396, 0.967499911785126,-0.0959258452057838,-0.233970403671265,0.786129951477051,-0.545342028141022,0.290863931179047,0.779076516628265,-0.514032542705536,0.35890144109726,0.694981157779694,0.0461361445486546,0.717546284198761,0.947726309299469,0.160956501960754,0.275513887405396,0.382880628108978,-0.336864858865738,0.860188663005829,0.694981157779694,0.0461361445486546,0.717546284198761,0.779076516628265,-0.514032542705536,0.35890144109726,0.778943240642548,-0.513350427150726,0.360164850950241,0.778943240642548,-0.513350427150726,0.360164850950241,0.785886585712433,-0.543201982975006,0.295489281415939,0.171830341219902,-0.731816828250885,0.659483432769775,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,0.207798928022385,-0.957674980163574,0.199194043874741,-0.0772176012396812,-0.989201128482819,0.124573387205601,-0.119434408843517,-0.692093312740326,0.711858332157135,0.207798928022385,-0.957674980163574,0.199194043874741,0.451574474573135,-0.847453653812408,-0.279110699892044,0.227369338274002,-0.840859830379486,-0.491180092096329,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.451574474573135,-0.847453653812408,-0.279110699892044,0.737974345684052,-0.506336569786072,-0.446113437414169,0.589757025241852,-0.405549645423889,-0.698366761207581,0.227369338274002,-0.840859830379486,-0.491180092096329,0.737974345684052,-0.506336569786072,-0.446113437414169,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.893790304660797,0.11711710691452,-0.432923167943954,0.589757025241852,-0.405549645423889,-0.698366761207581,0.967499911785126,-0.0959258452057838,-0.233970403671265,0.947726309299469,0.160956501960754,0.275513887405396,0.865549385547638,0.446460962295532,0.226929157972336,0.893790304660797,0.11711710691452,-0.432923167943954,0.947726309299469,0.160956501960754,0.275513887405396,0.694981157779694,0.0461361445486546,0.717546284198761,0.539613544940948,0.300762385129929,0.786358177661896,0.865549385547638,0.446460962295532,0.226929157972336,0.694981157779694,0.0461361445486546,0.717546284198761, 0.382880628108978,-0.336864858865738,0.860188663005829,0.137372449040413,-0.188157200813293,0.972484290599823,0.539613544940948,0.300762385129929,0.786358177661896,0.382880628108978,-0.336864858865738,0.860188663005829,0.171830341219902,-0.731816828250885,0.659483432769775,-0.119434408843517,-0.692093312740326,0.711858332157135,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.543316781520844,-0.79720413684845,0.263196527957916,0.517825782299042,-0.683434009552002,0.514562368392944,-0.0772176012396812,-0.989201128482819,0.124573387205601,0.227369338274002,-0.840859830379486,-0.491180092096329,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.543316781520844,-0.79720413684845,0.263196527957916,0.227369338274002,-0.840859830379486,-0.491180092096329,0.589757025241852,-0.405549645423889,-0.698366761207581,0.818628549575806,-0.56630539894104,-0.095631942152977,0.664069056510925,-0.747671186923981,-0.00021937265410088,0.589757025241852,-0.405549645423889,-0.698366761207581,0.893790304660797,0.11711710691452,-0.432923167943954,0.936200797557831,-0.349729657173157,0.0348892845213413,0.818628549575806,-0.56630539894104,-0.095631942152977,0.893790304660797,0.11711710691452,-0.432923167943954,0.865549385547638,0.446460962295532,0.226929157972336,0.927894592285156,-0.210005521774292,0.308073401451111,0.936200797557831,-0.349729657173157,0.0348892845213413,0.865549385547638,0.446460962295532,0.226929157972336,0.539613544940948,0.300762385129929,0.786358177661896,0.795584321022034,-0.263417273759842,0.545579493045807,0.927894592285156,-0.210005521774292,0.308073401451111,0.539613544940948,0.300762385129929,0.786358177661896,0.137372449040413,-0.188157200813293,0.972484290599823,0.623724460601807,-0.472118139266968,0.622954428195953,0.795584321022034,-0.263417273759842,0.545579493045807,0.137372449040413,-0.188157200813293,0.972484290599823,-0.119434408843517,-0.692093312740326,0.711858332157135,0.517825782299042,-0.683434009552002,0.514562368392944, 0.623724460601807,-0.472118139266968,0.622954428195953,0.39375701546669,-0.458273440599442,-0.796831786632538,0.764481008052826,-0.644642233848572,-0.00227227224968374,0.78587132692337,-0.599782109260559,0.150557950139046,0.785931706428528,-0.599372208118439,0.151869475841522,0.76507031917572,-0.643946468830109,0.000624333799351007,0.128620937466621,-0.731338679790497,-0.669776320457459,0.128620937466621,-0.731338679790497,-0.669776320457459,0.76507031917572,-0.643946468830109,0.000624333799351007,0.143902435898781,-0.987122178077698,-0.0698700472712517,0.689465761184692,-0.331197649240494,0.64416229724884,0.768967747688293,-0.480744570493698,0.421394437551498,0.974745631217957,0.220444723963737,0.0357081368565559,0.922376871109009,0.332838177680969,0.19606027007103,0.740420699119568,-0.407449632883072,0.53456711769104,0.689465761184692,-0.331197649240494,0.64416229724884,0.922376871109009,0.332838177680969,0.19606027007103,0.981993198394775,-0.177747964859009,-0.0639918148517609,0.688185930252075,-0.329065650701523,0.646618843078613,0.767808198928833,-0.477225512266159,0.427465051412582,0.778943240642548,-0.513350427150726,0.360164850950241,0.779076516628265,-0.514032542705536,0.35890144109726,0.768967747688293,-0.480744570493698,0.421394437551498,0.689465761184692,-0.331197649240494,0.64416229724884,0.740381181240082,-0.407373487949371,0.53467983007431,0.688185930252075,-0.329065650701523,0.646618843078613,0.689465761184692,-0.331197649240494,0.64416229724884,0.740420699119568,-0.407449632883072,0.53456711769104,0.712573170661926,-0.434123963117599,-0.551158607006073,0.825049936771393,-0.453089714050293,-0.337642371654511,0.851781845092773,0.0115588782355189,-0.523769080638886,0.783942937850952,-0.186095729470253,-0.59228527545929,0.0479290783405304,-0.711503028869629,-0.701046526432037,-0.423463702201843,-0.905563116073608,0.0251786317676306,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.0479290783405304,-0.711503028869629,-0.701046526432037,0.0984330475330353,-0.979092538356781,-0.178013265132904,0.783942937850952,-0.186095729470253,-0.59228527545929, 0.409443646669388,-0.535873591899872,-0.738373458385468,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.437538176774979,0.011323343962431,0.899128556251526,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717,0.999922931194305,0.109445370733738,0.0023056548088789,0.993990123271942,0.111529469490051,0.0670560151338577,0.99149614572525,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.437538176774979,0.011323343962431,0.899128556251526,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.669797301292419,0.132067054510117,0.730705082416534,-0.437538176774979,0.011323343962431,0.899128556251526,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.730700254440308,-0.321549147367477,-0.602231919765472, -0.373749554157257,-0.424562931060791,-0.824656069278717,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.669797301292419,0.132067054510117,0.730705082416534,-0.559998273849487,0.512845575809479,0.65068531036377,-0.285846680402756,0.740470588207245,0.608272194862366,-0.412358522415161,0.0925682708621025,0.906306564807892,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.559998273849487,0.512845575809479,0.65068531036377,-0.669797301292419,0.132067054510117,0.730705082416534,-0.880525827407837,0.119760677218437,0.458619266748428,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163037300109863,0.519588589668274,0.838717222213745,0.0445509292185307,0.65805971622467,0.751646637916565,-0.265586584806442,0.827619135379791,0.494479835033417,-0.415858834981918,0.554817199707031,0.720582604408264,0.135322481393814,0.847399234771729,0.513422191143036,-0.244644120335579,0.685302138328552,0.685937523841858,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.528733134269714,0.826087534427643,0.194988861680031,-0.36407133936882,0.919048547744751,0.151002898812294,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.244644120335579,0.685302138328552,0.685937523841858,-0.408989250659943,0.558586657047272,0.721601545810699,-0.198288127779961,0.888361811637878,0.414119631052017,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0639016851782799,0.636703133583069,0.768456697463989,-0.207234025001526,0.598978042602539,0.773485243320465,-0.217426031827927,0.259526431560516,0.940942049026489,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.244644120335579,0.685302138328552,0.685937523841858, -0.163037300109863,0.519588589668274,0.838717222213745,-0.415858834981918,0.554817199707031,0.720582604408264,-0.408989250659943,0.558586657047272,0.721601545810699,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.187158063054085,0.75642067193985,-0.626737236976624,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103162460029125,0.213912323117256,-0.971390247344971,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.0469610393047333,0.340933084487915,0.938913881778717,0.269015103578568,0.393741130828857,0.878975987434387,0.228596761822701,0.602607667446136,0.764596283435822,-0.0639016851782799,0.636703133583069,0.768456697463989,0.0754682123661041,0.474540889263153,-0.876992285251617,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.051368486136198,0.366652280092239,-0.928938865661621,0.0849071517586708,0.404431521892548,-0.910618424415588,0.0357786677777767,-0.332784980535507,-0.942323744297028,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.251114159822464,0.744844555854797,0.618181467056274,-0.265586584806442,0.827619135379791,0.494479835033417,-0.264517962932587,0.829988181591034,0.491070061922073,-0.126853466033936,0.814248085021973,0.566487669944763,0.0858502238988876,-0.0293905436992645,-0.995874464511871,-0.0545569509267807,0.00619251187890768,-0.99849146604538, -0.044108722358942,-0.104566030204296,-0.993539333343506,0.053296934813261,-0.126089468598366,-0.99058610200882,0.025994973257184,0.100541830062866,0.99459320306778,0.0350599996745586,0.0215551313012838,0.999152719974518,0.105945765972137,-0.0333648808300495,0.993811964988709,0.0329285115003586,0.095338836312294,0.994900107383728,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.880525827407837,0.119760677218437,0.458619266748428,-0.669797301292419,0.132067054510117,0.730705082416534,-0.730253517627716,0.0695252642035484,0.679629266262054,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.264517962932587,0.829988181591034,0.491070061922073,-0.54696398973465,0.598231494426727,0.585618793964386,-0.523228526115417,0.410001486539841,0.747081458568573,-0.207234025001526,0.598978042602539,0.773485243320465,-0.207234025001526,0.598978042602539,0.773485243320465,-0.523228526115417,0.410001486539841,0.747081458568573,-0.531731903553009,0.138175398111343,0.835564970970154,-0.217426031827927,0.259526431560516,0.940942049026489,-0.198288127779961,0.888361811637878,0.414119631052017,-0.175527319312096,0.630527257919312,0.756059229373932,-0.129651710391045,0.577601253986359,0.805957317352295,-0.18195928633213,0.86905300617218,0.460040956735611,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.18195928633213,0.86905300617218,0.460040956735611,-0.129651710391045,0.577601253986359,0.805957317352295,-0.101806551218033,0.422118037939072,0.900806188583374,-0.101806551218033,0.422118037939072,0.900806188583374,-0.129651710391045,0.577601253986359,0.805957317352295,-0.163592055439949,0.697549223899841,0.697612106800079,-0.235576257109642,0.590675473213196,0.771755337715149, 0.0849071517586708,0.404431521892548,-0.910618424415588,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0754682123661041,0.474540889263153,-0.876992285251617,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0333343744277954,-0.188492000102997,-0.981508851051331,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0198883153498173,-0.203020170331001,-0.978972554206848,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0222764182835817,-0.332656174898148,-0.942785024642944,0.0145233506336808,-0.332326263189316,-0.943052649497986,-0.0663832724094391,0.0673947036266327,-0.995515525341034,0.103274650871754,0.0756512358784676,-0.991771757602692,0.0858502238988876,-0.0293905436992645,-0.995874464511871,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.103162460029125,0.213912323117256,-0.971390247344971,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.0605181753635406,0.0956659987568855,-0.993572115898132,0.103274650871754,0.0756512358784676,-0.991771757602692,-0.0757151022553444,0.839400827884674,0.53821325302124,0.124407894909382,0.762849271297455,0.634494781494141,0.32895365357399,0.891276717185974,0.312114208936691,0.135322481393814,0.847399234771729,0.513422191143036,-0.235576257109642,0.590675473213196,0.771755337715149,0.007120281457901,0.824189305305481,0.566269636154175,0.124407894909382,0.762849271297455,0.634494781494141,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130890280008316,0.562183797359467,0.816588640213013,0.0445509292185307,0.65805971622467,0.751646637916565,0.288280248641968,0.458255499601364,0.840771317481995,0.227748140692711,0.261638969182968,0.937910318374634,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824,0.911067366600037,0.227748140692711,0.261638969182968,0.937910318374634,0.288280248641968,0.458255499601364,0.840771317481995,0.127348259091377,0.984222948551178,0.1228316873312, 0.320210188627243,0.913715243339539,0.250179767608643,0.007120281457901,0.824189305305481,0.566269636154175,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901,0.824189305305481,0.566269636154175,0.320210188627243,0.913715243339539,0.250179767608643,0.32895365357399,0.891276717185974,0.312114208936691,0.124407894909382,0.762849271297455,0.634494781494141,0.287634700536728,0.718605816364288,0.633144497871399,0.32895365357399,0.891276717185974,0.312114208936691,0.320210188627243,0.913715243339539,0.250179767608643,0.167783945798874,0.880431950092316,0.443495273590088,0.135322481393814,0.847399234771729,0.513422191143036,0.32895365357399,0.891276717185974,0.312114208936691,0.287634700536728,0.718605816364288,0.633144497871399,0.267442584037781,0.554580211639404,0.787981748580933,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.531731903553009,0.138175398111343,0.835564970970154,-0.523228526115417,0.410001486539841,0.747081458568573,-0.541739642620087,0.290830105543137,0.788629233837128,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.943021297454834,-0.0914337635040283,0.31992295384407,0.0350599996745586,0.0215551313012838,0.999152719974518,0.0415807291865349,0.144025474786758,0.988700032234192,0.227037891745567,0.0226937420666218,0.973621487617493,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.26172998547554,-0.1111850887537,0.958715438842773,0.105945765972137,-0.0333648808300495,0.993811964988709,0.227037891745567,0.0226937420666218,0.973621487617493,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.125138372182846,-0.0807519108057022,0.988847553730011,0.0415807291865349,0.144025474786758,0.988700032234192,0.051253791898489,0.460094302892685,0.886389493942261,0.269015103578568,0.393741130828857,0.878975987434387, 0.227037891745567,0.0226937420666218,0.973621487617493,0.227037891745567,0.0226937420666218,0.973621487617493,0.269015103578568,0.393741130828857,0.878975987434387,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.26172998547554,-0.1111850887537,0.958715438842773,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.959401249885559,0.00467001460492611,0.282005965709686,0.0329285115003586,0.095338836312294,0.994900107383728,0.105945765972137,-0.0333648808300495,0.993811964988709,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.130024403333664,0.107345074415207,0.985682845115662,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.0597144067287445,-0.130844533443451,0.98960292339325,-0.0469610393047333,0.340933084487915,0.938913881778717,-0.217426031827927,0.259526431560516,0.940942049026489,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.243838042020798,0.106035023927689,0.964001834392548,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.771451115608215,-0.12942261993885,0.622987151145935,-0.420480906963348,-0.101670697331429,0.901586890220642, 0.267442584037781,0.554580211639404,0.787981748580933,0.288280248641968,0.458255499601364,0.840771317481995,0.0445509292185307,0.65805971622467,0.751646637916565,-0.163037300109863,0.519588589668274,0.838717222213745,0.128257870674133,0.488565057516098,0.863049328327179,0.287634700536728,0.718605816364288,0.633144497871399,0.167783945798874,0.880431950092316,0.443495273590088,0.0469380915164948,0.75044322013855,0.659266114234924,0.288280248641968,0.458255499601364,0.840771317481995,0.267442584037781,0.554580211639404,0.787981748580933,0.287634700536728,0.718605816364288,0.633144497871399,0.128257870674133,0.488565057516098,0.863049328327179,-0.0117101557552814,0.969888210296631,0.243268758058548,0.0469380915164948,0.75044322013855,0.659266114234924,0.167783945798874,0.880431950092316,0.443495273590088,0.118423573672771,0.978543698787689,0.168606325984001,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.998369693756104,-0.0149935530498624,0.055073969066143,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.264517962932587,0.829988181591034,0.491070061922073,-0.207234025001526,0.598978042602539,0.773485243320465,-0.0639016851782799,0.636703133583069,0.768456697463989,-0.126853466033936,0.814248085021973,0.566487669944763,0.00678820535540581,0.00935708172619343,0.999933183193207,0.0177117679268122,0.0767069831490517,0.996896326541901,0.111529469490051,0.0670560151338577,0.99149614572525,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.285846680402756,0.740470588207245,0.608272194862366,-0.233475670218468,0.295215666294098,0.926464676856995,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.412358522415161,0.0925682708621025,0.906306564807892,0.00109092053025961,0.832261800765991,-0.554381728172302,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.420480906963348,-0.101670697331429,0.901586890220642,-0.437538176774979,0.011323343962431,0.899128556251526, -0.2064258903265,-0.0007158950320445,0.978461980819702,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.0474926419556141,-0.104372285306454,-0.993403673171997,0.0858502238988876,-0.0293905436992645,-0.995874464511871,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.265586584806442,0.827619135379791,0.494479835033417,-0.130890280008316,0.562183797359467,0.816588640213013,-0.54696398973465,0.598231494426727,0.585618793964386,-0.264517962932587,0.829988181591034,0.491070061922073,0.0620061531662941,0.990111231803894,-0.125837221741676,0.118423573672771,0.978543698787689,0.168606325984001,0.127348259091377,0.984222948551178,0.1228316873312,0.0272185504436493,0.988011002540588,-0.151965260505676,-0.373853147029877,0.908021092414856,0.189027920365334,0.007120281457901,0.824189305305481,0.566269636154175,-0.235576257109642,0.590675473213196,0.771755337715149,-0.528733134269714,0.826087534427643,0.194988861680031,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.498037964105606,0.826278984546661,-0.263099282979965,0.0272185504436493,0.988011002540588,-0.151965260505676,0.127348259091377,0.984222948551178,0.1228316873312,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.235576257109642,0.590675473213196,0.771755337715149,-0.163592055439949,0.697549223899841,0.697612106800079,-0.36407133936882,0.919048547744751,0.151002898812294,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.217947199940681,-0.245030641555786,0.944700479507446,-0.217426031827927,0.259526431560516,0.940942049026489,-0.531731903553009,0.138175398111343,0.835564970970154, -0.767262578010559,-0.329318106174469,0.550325155258179,-0.487847238779068,-0.305343925952911,0.817783713340759,-0.531731903553009,0.138175398111343,0.835564970970154,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.0938221365213394,0.828937470912933,-0.551416397094727,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.10327572375536,0.46809983253479,-0.877619862556458,0.0849071517586708,0.404431521892548,-0.910618424415588,0.103162460029125,0.213912323117256,-0.971390247344971,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.10327572375536,0.46809983253479,-0.877619862556458,-0.146824181079865,0.202549442648888,-0.968202650547028,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.870969414710999,-0.301988989114761,-0.387575656175613,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.373853147029877,0.908021092414856,0.189027920365334,-0.528733134269714,0.826087534427643,0.194988861680031,-0.630419492721558,0.671314060688019,-0.389754712581635,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.361107349395752,-0.274716913700104,-0.891140937805176, -0.273301541805267,-0.178375348448753,-0.945245206356049,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.0261400658637285,-0.230357423424721,-0.972754895687103,0.0198883153498173,-0.203020170331001,-0.978972554206848,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0145233506336808,-0.332326263189316,-0.943052649497986,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.0170070379972458,-0.356290400028229,-0.934220492839813,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.273301541805267,-0.178375348448753,-0.945245206356049,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.730700254440308,-0.321549147367477,-0.602231919765472,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.396053969860077,-0.291344702243805,-0.870781004428864,-0.045579582452774,-0.167653381824493,-0.98479175567627,-0.0261400658637285,-0.230357423424721,-0.972754895687103, -0.396053969860077,-0.291344702243805,-0.870781004428864,-0.361107349395752,-0.274716913700104,-0.891140937805176,-0.168258428573608,-0.0454077981412411,0.984696507453918,0.0502381287515163,0.0132010383531451,0.998650014400482,0.0329285115003586,0.095338836312294,0.994900107383728,-0.130024403333664,0.107345074415207,0.985682845115662,0.111529469490051,0.0670560151338577,0.99149614572525,0.109445370733738,0.0023056548088789,0.993990123271942,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.205622598528862,0.0701295286417007,0.976115345954895,-0.233475670218468,0.295215666294098,0.926464676856995,-0.0027873576618731,0.0608935356140137,0.998140394687653,0.111529469490051,0.0670560151338577,0.99149614572525,-0.205622598528862,0.0701295286417007,0.976115345954895,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0105779552832246,0.0432977452874184,0.99900621175766,0.0502381287515163,0.0132010383531451,0.998650014400482,0.109445370733738,0.0023056548088789,0.993990123271942,0.109445370733738,0.0023056548088789,0.993990123271942,0.0502381287515163,0.0132010383531451,0.998650014400482,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.2064258903265,-0.0007158950320445,0.978461980819702,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.457065612077713,0.0828292146325111,0.885567843914032,-0.243838042020798,0.106035023927689,0.964001834392548,-0.26172998547554,-0.1111850887537,0.958715438842773,-0.493893593549728,-0.127556279301643,0.8601154088974,-0.130024403333664,0.107345074415207,0.985682845115662,-0.125138372182846,-0.0807519108057022,0.988847553730011,-0.26172998547554,-0.1111850887537,0.958715438842773, -0.243838042020798,0.106035023927689,0.964001834392548,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.813670039176941,0.0365244150161743,0.580178439617157,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.934549152851105,-0.271674513816834,0.229805961251259,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.916449964046478,-0.370115518569946,-0.152098655700684,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.797964632511139,-0.0603525713086128,0.599674940109253,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.885262668132782,-0.178442940115929,0.429497480392456,-0.958365261554718,-0.274972796440125,0.0769802629947662,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.971830129623413,-0.100029721856117,0.213401570916176,0.242353484034538,0.171934008598328,0.954831659793854,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.130890280008316,0.562183797359467,0.816588640213013,0.227748140692711,0.261638969182968,0.937910318374634,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.541739642620087,0.290830105543137,0.788629233837128,-0.54696398973465,0.598231494426727,0.585618793964386,-0.130890280008316,0.562183797359467,0.816588640213013, -0.885142028331757,0.459607869386673,-0.072692796587944,-0.721357464790344,0.650649428367615,0.237273663282394,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.163592055439949,0.697549223899841,0.697612106800079,-0.129651710391045,0.577601253986359,0.805957317352295,-0.175527319312096,0.630527257919312,0.756059229373932,-0.191041514277458,0.700716555118561,0.6873859167099,-0.36407133936882,0.919048547744751,0.151002898812294,-0.163592055439949,0.697549223899841,0.697612106800079,-0.191041514277458,0.700716555118561,0.6873859167099,-0.309881597757339,0.939583599567413,0.145451411604881,-0.388724118471146,0.781137049198151,-0.488588243722916,-0.36407133936882,0.919048547744751,0.151002898812294,-0.309881597757339,0.939583599567413,0.145451411604881,-0.187158063054085,0.75642067193985,-0.626737236976624,0.0682389214634895,0.656387150287628,0.751331746578217,0.0917807519435883,0.740839779376984,0.665381610393524,0.228596761822701,0.602607667446136,0.764596283435822,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822,0.0917807519435883,0.740839779376984,0.665381610393524,-0.126853466033936,0.814248085021973,0.566487669944763,-0.0639016851782799,0.636703133583069,0.768456697463989,0.118423573672771,0.978543698787689,0.168606325984001,0.0620061531662941,0.990111231803894,-0.125837221741676,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.0117101557552814,0.969888210296631,0.243268758058548,0.206769347190857,0.0198965240269899,-0.978187382221222,0.076873891055584,0.283797085285187,-0.955797910690308,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.20303450524807,0.175852552056313,-0.963251233100891,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.00678820535540581,0.00935708172619343,0.999933183193207, -0.0027873576618731,0.0608935356140137,0.998140394687653,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0027873576618731,0.0608935356140137,0.998140394687653,-0.233475670218468,0.295215666294098,0.926464676856995,-0.431082636117935,0.669595658779144,0.604821860790253,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.173114001750946,0.483975678682327,-0.857787311077118,-0.158792361617088,0.191556662321091,-0.968550980091095,0.076873891055584,0.283797085285187,-0.955797910690308,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.960404455661774,0.118234008550644,0.252277553081512,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.900862991809845,0.205661669373512,0.382294595241547,-0.823818027973175,0.437958568334579,0.359883517026901,-0.929829955101013,0.272868812084198,0.246898397803307,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.935231983661652,0.339124768972397,0.10166396945715,-0.830669224262238,0.464176833629608,0.307454913854599,-0.873635351657867,0.199546694755554,0.44378200173378,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.541739642620087,0.290830105543137,0.788629233837128,-0.0389007441699505,0.220736414194107,0.974557399749756,-0.439444810152054,-0.112185478210449,0.89123660326004, -0.775276005268097,0.0246404502540827,0.631141781806946,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.151422306895256,0.167262390255928,0.974214851856232,-0.325357735157013,0.61151111125946,0.721246421337128,-0.516382813453674,0.465612560510635,0.718716740608215,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.670227468013763,0.653629958629608,0.351515263319016,-0.516382813453674,0.465612560510635,0.718716740608215,-0.325357735157013,0.61151111125946,0.721246421337128,-0.482889622449875,0.809686243534088,0.333505302667618,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.935231983661652,0.339124768972397,0.10166396945715,-0.823818027973175,0.437958568334579,0.359883517026901,-0.900862991809845,0.205661669373512,0.382294595241547,-0.873635351657867,0.199546694755554,0.44378200173378,-0.830669224262238,0.464176833629608,0.307454913854599,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.636381566524506,-0.215738385915756,-0.74059122800827,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.0765343606472015,-0.228869631886482,-0.970443785190582,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.873635351657867,0.199546694755554,0.44378200173378,-0.900862991809845,0.205661669373512,0.382294595241547,-0.887102901935577,-0.248076841235161,0.389238119125366, -0.869328856468201,-0.380869299173355,0.314969629049301,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.275725185871124,-0.367643237113953,0.888152062892914,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.151422306895256,0.167262390255928,0.974214851856232,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.0389007441699505,0.220736414194107,0.974557399749756,0.242353484034538,0.171934008598328,0.954831659793854,-0.225912064313889,-0.13972570002079,0.964074909687042,-0.439444810152054,-0.112185478210449,0.89123660326004,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.670227468013763,0.653629958629608,0.351515263319016,-0.482889622449875,0.809686243534088,0.333505302667618,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.386267960071564,0.732354819774628,-0.560761570930481,0.206769347190857,0.0198965240269899,-0.978187382221222,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.339145213365555,-0.0408404320478439,-0.939847111701965,0.076873891055584,0.283797085285187,-0.955797910690308,0.206769347190857,0.0198965240269899,-0.978187382221222,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.58198344707489,-0.50494521856308,0.637436747550964, -0.869328856468201,-0.380869299173355,0.314969629049301,-0.775276005268097,0.0246404502540827,0.631141781806946,-0.439444810152054,-0.112185478210449,0.89123660326004,0.0469380915164948,0.75044322013855,0.659266114234924,-0.325357735157013,0.61151111125946,0.721246421337128,-0.151422306895256,0.167262390255928,0.974214851856232,0.182602807879448,0.369611233472824,0.911067366600037,0.0469380915164948,0.75044322013855,0.659266114234924,-0.0117101557552814,0.969888210296631,0.243268758058548,-0.482889622449875,0.809686243534088,0.333505302667618,-0.325357735157013,0.61151111125946,0.721246421337128,-0.225912064313889,-0.13972570002079,0.964074909687042,0.242353484034538,0.171934008598328,0.954831659793854,0.182602807879448,0.369611233472824,0.911067366600037,-0.151422306895256,0.167262390255928,0.974214851856232,-0.0117101557552814,0.969888210296631,0.243268758058548,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.482889622449875,0.809686243534088,0.333505302667618,0.00345755694434047,0.996382415294647,-0.0849123671650887,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.474048495292664,0.878205180168152,-0.0635117962956429,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.00375068746507168,0.864742159843445,-0.502202033996582,-0.0149039337411523,0.576608240604401,-0.816884815692902,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.386267960071564,0.732354819774628,-0.560761570930481,-0.0149039337411523,0.576608240604401,-0.816884815692902,0.076873891055584,0.283797085285187,-0.955797910690308,-0.309495180845261,0.256983548402786,-0.915517449378967,-0.319942742586136,0.472043305635452,-0.821469247341156,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.541739642620087,0.290830105543137,0.788629233837128, -0.775276005268097,0.0246404502540827,0.631141781806946,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.764665424823761,-0.00892197620123625,0.644365727901459,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.864759087562561,-0.407921642065048,0.292902112007141,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.887102901935577,-0.248076841235161,0.389238119125366,-0.900862991809845,0.205661669373512,0.382294595241547,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.882290184497833,-0.257993787527084,-0.393704503774643,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.636381566524506,-0.215738385915756,-0.74059122800827,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.339145213365555,-0.0408404320478439,-0.939847111701965,-0.447565525770187,-0.178849518299103,-0.876183688640594,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.990118980407715,-0.139986857771873,-0.00824637804180384,-0.92103111743927,-0.215036183595657,-0.324747800827026,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.121267899870873,0.453522175550461,-0.882956266403198,-0.277610629796982,0.394662648439407,-0.875884532928467, -0.146824181079865,0.202549442648888,-0.968202650547028,-0.121267899870873,0.453522175550461,-0.882956266403198,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.277610629796982,0.394662648439407,-0.875884532928467,0.0105779552832246,0.0432977452874184,0.99900621175766,0.025994973257184,0.100541830062866,0.99459320306778,0.0329285115003586,0.095338836312294,0.994900107383728,0.0502381287515163,0.0132010383531451,0.998650014400482,0.051253791898489,0.460094302892685,0.886389493942261,0.0630034655332565,0.605371952056885,0.793445229530334,0.228596761822701,0.602607667446136,0.764596283435822,0.269015103578568,0.393741130828857,0.878975987434387,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.960404455661774,0.118234008550644,0.252277553081512,-0.929829955101013,0.272868812084198,0.246898397803307,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.960404455661774,0.118234008550644,0.252277553081512,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599,-0.935231983661652,0.339124768972397,0.10166396945715,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.926227867603302,0.166116192936897,0.338389337062836,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.275725185871124,-0.367643237113953,0.888152062892914,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.097216323018074,-0.329928547143936,0.938986778259277,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.275725185871124,-0.367643237113953,0.888152062892914, -0.516382813453674,0.465612560510635,0.718716740608215,-0.670227468013763,0.653629958629608,0.351515263319016,-0.563040912151337,0.733509361743927,0.380721718072891,-0.333576679229736,0.525787591934204,0.782479405403137,-0.097216323018074,-0.329928547143936,0.938986778259277,-0.154075160622597,0.221347615122795,0.962946593761444,0.198109984397888,-0.381663233041763,0.902820944786072,0.0822462737560272,-0.665926337242126,0.741469919681549,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.944353520870209,-0.253018736839294,-0.21018548309803,0.729846894741058,-0.679405450820923,0.0757084339857101,0.704946756362915,-0.708129465579987,-0.040034044533968,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.22399939596653,-0.804867208003998,0.549557149410248,0.568926751613617,-0.0644996538758278,0.819854915142059,0.493679195642471,-0.48221343755722,0.723706424236298,0.198109984397888,-0.381663233041763,0.902820944786072,0.165526703000069,0.46548119187355,0.869441270828247,0.311660826206207,-0.127051904797554,-0.941660940647125,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.355119854211807,-0.655639946460724,-0.666352868080139,0.707368016242981,-0.349391609430313,-0.614455819129944,0.493679195642471,-0.48221343755722,0.723706424236298,0.568926751613617,-0.0644996538758278,0.819854915142059,0.780032634735107,-0.518629193305969,0.350104093551636,-0.594531655311584,-0.698622703552246,0.398068368434906,0.707368016242981,-0.349391609430313,-0.614455819129944,0.644391298294067,-0.53528618812561,-0.546103060245514,0.298700571060181,-0.161740928888321,-0.94054126739502,0.311660826206207,-0.127051904797554,-0.941660940647125,0.707368016242981,-0.349391609430313,-0.614455819129944,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.692149817943573,-0.677433252334595,-0.249023765325546,0.644391298294067,-0.53528618812561,-0.546103060245514,-0.22399939596653,-0.804867208003998,0.549557149410248, -0.594531655311584,-0.698622703552246,0.398068368434906,0.780032634735107,-0.518629193305969,0.350104093551636,0.729846894741058,-0.679405450820923,0.0757084339857101,-0.22399939596653,-0.804867208003998,0.549557149410248,-0.926227867603302,0.166116192936897,0.338389337062836,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.830669224262238,0.464176833629608,0.307454913854599,-0.926227867603302,0.166116192936897,0.338389337062836,-0.915170788764954,0.197068557143211,0.351605415344238,-0.823818027973175,0.437958568334579,0.359883517026901,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.915170788764954,0.197068557143211,0.351605415344238,-0.926227867603302,0.166116192936897,0.338389337062836,-0.22399939596653,-0.804867208003998,0.549557149410248,0.704946756362915,-0.708129465579987,-0.040034044533968,0.692149817943573,-0.677433252334595,-0.249023765325546,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.333576679229736,0.525787591934204,0.782479405403137,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743195831775665,0.547327280044556,0.384828329086304,-0.496076285839081,0.322463065385818,0.806179821491241,-0.333576679229736,0.525787591934204,0.782479405403137,-0.496076285839081,0.322463065385818,0.806179821491241,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.097216323018074,-0.329928547143936,0.938986778259277,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.496076285839081,0.322463065385818,0.806179821491241,-0.549624145030975,0.147533476352692,0.822281718254089,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.866790115833282,0.482820779085159,0.124735727906227,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.670227468013763,0.653629958629608,0.351515263319016,-0.736354291439056,0.674543976783752,-0.0526571460068226, -0.612874746322632,0.790095686912537,-0.011550584807992,-0.563040912151337,0.733509361743927,0.380721718072891,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.841190576553345,0.42979621887207,-0.328136563301086,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.496076285839081,0.322463065385818,0.806179821491241,-0.743195831775665,0.547327280044556,0.384828329086304,-0.819946527481079,0.416022598743439,0.393208384513855,-0.549624145030975,0.147533476352692,0.822281718254089,0.314551591873169,-0.777825355529785,-0.544100165367126,0.445018202066422,-0.841427505016327,-0.306526601314545,0.480990260839462,-0.836049139499664,-0.263951063156128,0.233872562646866,-0.770340859889984,-0.593193531036377,0.552962005138397,-0.830714046955109,0.064398355782032,0.518121659755707,-0.845738351345062,-0.127579480409622,0.602230906486511,-0.791486024856567,-0.104248508810997,0.624863624572754,-0.775575757026672,0.0895971804857254,0.158797964453697,-0.752626359462738,0.639012277126312,0.477273166179657,-0.844216048717499,0.243945851922035,0.392137885093689,-0.898935735225677,0.195300936698914,0.22346855700016,-0.725432455539703,0.651006579399109,0.631202757358551,-0.748089611530304,0.204804703593254,0.679318964481354,-0.681169748306274,0.273008167743683,0.484550148248672,-0.283617049455643,0.827509820461273,0.470721006393433,-0.417188495397568,0.777415871620178,-0.425698101520538,-0.165044084191322,0.889686226844788,0.158797964453697,-0.752626359462738,0.639012277126312,0.22346855700016,-0.725432455539703,0.651006579399109, -0.331690967082977,-0.041898600757122,0.94245719909668,0.305413067340851,0.121777974069119,0.944400906562805,0.509250044822693,-0.170650407671928,0.843529999256134,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.28887614607811,0.124025739729404,0.949298799037933,0.117293141782284,0.336978107690811,0.934177756309509,0.305413067340851,0.121777974069119,0.944400906562805,-0.28887614607811,0.124025739729404,0.949298799037933,-0.357071965932846,0.176186710596085,0.917310118675232,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.158167138695717,-0.488490730524063,-0.858114242553711,0.233872562646866,-0.770340859889984,-0.593193531036377,0.309054106473923,-0.602658152580261,-0.735723257064819,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.603177964687347,-0.730402767658234,-0.320449888706207,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233872562646866,-0.770340859889984,-0.593193531036377,0.480990260839462,-0.836049139499664,-0.263951063156128,0.509250044822693,-0.170650407671928,0.843529999256134,0.744553029537201,-0.501156628131866,0.4410021007061,0.443388015031815,-0.641468644142151,0.626039206981659,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.270709186792374,0.893246471881866,0.35892516374588,-0.65559720993042,0.741017520427704,-0.145207911729813,0.64731752872467,-0.742053866386414,-0.174172759056091,0.668083667755127,-0.706556260585785,0.233329057693481,0.779800176620483,-0.625844657421112,0.0151696130633354,0.668628990650177,-0.726897060871124,-0.156703382730484,0.323112219572067,0.289230555295944,0.901079475879669,0.771257698535919,-0.18939545750618,0.607693135738373,0.509250044822693,-0.170650407671928,0.843529999256134,0.305413067340851,0.121777974069119,0.944400906562805, 0.323112219572067,0.289230555295944,0.901079475879669,0.235387146472931,0.430203825235367,0.871503055095673,-0.34545773267746,0.720738053321838,0.600995540618896,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.633037269115448,0.653608679771423,0.414800643920898,-0.217019572854042,0.53657478094101,0.815469205379486,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.245442464947701,0.425341755151749,0.871115624904633,0.174675241112709,0.124651238322258,0.976703941822052,0.279203683137894,0.224120020866394,0.933710634708405,-0.217019572854042,0.53657478094101,0.815469205379486,-0.599866449832916,0.551924109458923,0.57925820350647,-0.245442464947701,0.425341755151749,0.871115624904633,-0.217019572854042,0.53657478094101,0.815469205379486,-0.633037269115448,0.653608679771423,0.414800643920898,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.733746409416199,0.676492989063263,-0.0630356669425964,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.521965801715851,0.298950701951981,-0.798861801624298,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.0413625538349152,-0.756104946136475,-0.653141975402832,-0.266530960798264,-0.246738225221634,-0.931708931922913,0.130334496498108,-0.649341344833374,-0.749245464801788,0.130334496498108,-0.649341344833374,-0.749245464801788,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.349483400583267,-0.0788575559854507,-0.933618187904358,0.241232365369797,-0.621889412403107,-0.745023787021637,0.420848518610001,-0.797750890254974,-0.431833386421204,0.545369505882263,-0.785522282123566,-0.292449623346329,0.446416854858398,-0.828317999839783,-0.338528007268906,0.319416075944901,-0.833531200885773,-0.450776189565659,0.606213510036469,-0.729506313800812,-0.316742390394211,0.558507144451141,-0.773075938224792,-0.30070486664772, 0.241232365369797,-0.621889412403107,-0.745023787021637,0.233110591769218,-0.47022944688797,-0.851201355457306,0.130334496498108,-0.649341344833374,-0.749245464801788,0.241232365369797,-0.621889412403107,-0.745023787021637,0.558507144451141,-0.773075938224792,-0.30070486664772,0.54656720161438,-0.7532879114151,-0.365816354751587,-0.0413625538349152,-0.756104946136475,-0.653141975402832,0.130334496498108,-0.649341344833374,-0.749245464801788,0.54656720161438,-0.7532879114151,-0.365816354751587,0.431472927331924,-0.822143793106079,-0.371363341808319,0.606213510036469,-0.729506313800812,-0.316742390394211,0.233110591769218,-0.47022944688797,-0.851201355457306,0.309054106473923,-0.602658152580261,-0.735723257064819,0.603177964687347,-0.730402767658234,-0.320449888706207,-0.39349702000618,0.476447492837906,0.786230206489563,-0.523556113243103,0.279740929603577,0.804757118225098,-0.331690967082977,-0.041898600757122,0.94245719909668,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689,0.470721006393433,-0.417188495397568,0.777415871620178,0.484550148248672,-0.283617049455643,0.827509820461273,0.115986511111259,0.227630436420441,0.966815114021301,0.564540684223175,-0.811680018901825,0.149898007512093,0.463100373744965,-0.535968005657196,0.705886960029602,0.22346855700016,-0.725432455539703,0.651006579399109,0.392137885093689,-0.898935735225677,0.195300936698914,0.463100373744965,-0.535968005657196,0.705886960029602,-0.0139366090297699,0.110060036182404,0.993827223777771,-0.331690967082977,-0.041898600757122,0.94245719909668,0.22346855700016,-0.725432455539703,0.651006579399109,0.319416075944901,-0.833531200885773,-0.450776189565659,0.446416854858398,-0.828317999839783,-0.338528007268906,0.445018202066422,-0.841427505016327,-0.306526601314545,0.314551591873169,-0.777825355529785,-0.544100165367126,0.319416075944901,-0.833531200885773,-0.450776189565659,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.420848518610001,-0.797750890254974,-0.431833386421204, -0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.328695803880692,0.662784039974213,0.672812342643738,-0.402240663766861,0.592356264591217,0.698080539703369,-0.420263022184372,0.62258517742157,0.660126268863678,-0.485478460788727,0.644360303878784,0.590855658054352,-0.341495484113693,0.750590026378632,0.565681397914886,-0.175726309418678,0.623865723609924,0.761519432067871,-0.420263022184372,0.62258517742157,0.660126268863678,-0.402240663766861,0.592356264591217,0.698080539703369,0.668083667755127,-0.706556260585785,0.233329057693481,0.64731752872467,-0.742053866386414,-0.174172759056091,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.477273166179657,-0.844216048717499,0.243945851922035,0.692083477973938,-0.68414306640625,-0.23014922440052,0.657974064350128,-0.742551565170288,-0.125249087810516,0.668628990650177,-0.726897060871124,-0.156703382730484,0.779800176620483,-0.625844657421112,0.0151696130633354,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.788194417953491,-0.590478122234344,-0.173450663685799,0.742225170135498,-0.630128085613251,-0.228123426437378,0.692083477973938,-0.68414306640625,-0.23014922440052,0.431472927331924,-0.822143793106079,-0.371363341808319,0.54656720161438,-0.7532879114151,-0.365816354751587,0.742225170135498,-0.630128085613251,-0.228123426437378,0.816579103469849,-0.529018878936768,-0.230949223041534,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.337419033050537,0.179084926843643,-0.924162864685059,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.742188274860382,0.281538933515549,-0.608187794685364, -0.566018283367157,0.00991705991327763,-0.824333071708679,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.742188274860382,0.281538933515549,-0.608187794685364,0.314551591873169,-0.777825355529785,-0.544100165367126,0.233872562646866,-0.770340859889984,-0.593193531036377,-0.158167138695717,-0.488490730524063,-0.858114242553711,-0.122526675462723,-0.422631919384003,-0.897980749607086,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.388193219900131,-0.0462160408496857,-0.920418441295624,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.653796315193176,0.736424326896667,0.173866480588913,-0.728628396987915,0.670947968959808,0.137584701180458,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.266530960798264,-0.246738225221634,-0.931708931922913,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.353154391050339,-0.159876078367233,-0.92180347442627,0.233110591769218,-0.47022944688797,-0.851201355457306,0.241232365369797,-0.621889412403107,-0.745023787021637,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.175627052783966,-0.391306757926941,-0.903346061706543,0.319416075944901,-0.833531200885773,-0.450776189565659, 0.314551591873169,-0.777825355529785,-0.544100165367126,-0.122526675462723,-0.422631919384003,-0.897980749607086,0.0628950372338295,0.12239508330822,0.990486621856689,0.115986511111259,0.227630436420441,0.966815114021301,-0.397168695926666,0.623658359050751,0.673280954360962,-0.467934727668762,0.514274716377258,0.718720138072968,0.644391298294067,-0.53528618812561,-0.546103060245514,0.57789820432663,-0.655906856060028,-0.485612899065018,0.143241554498672,-0.263150751590729,-0.954061627388,0.298700571060181,-0.161740928888321,-0.94054126739502,0.484550148248672,-0.283617049455643,0.827509820461273,0.679318964481354,-0.681169748306274,0.273008167743683,0.780032634735107,-0.518629193305969,0.350104093551636,0.568926751613617,-0.0644996538758278,0.819854915142059,0.617175698280334,-0.749861061573029,-0.238332808017731,0.57789820432663,-0.655906856060028,-0.485612899065018,0.644391298294067,-0.53528618812561,-0.546103060245514,0.692149817943573,-0.677433252334595,-0.249023765325546,0.780032634735107,-0.518629193305969,0.350104093551636,0.679318964481354,-0.681169748306274,0.273008167743683,0.669889271259308,-0.735676348209381,0.100143387913704,0.729846894741058,-0.679405450820923,0.0757084339857101,0.165526703000069,0.46548119187355,0.869441270828247,0.115986511111259,0.227630436420441,0.966815114021301,0.484550148248672,-0.283617049455643,0.827509820461273,0.568926751613617,-0.0644996538758278,0.819854915142059,0.669889271259308,-0.735676348209381,0.100143387913704,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.704946756362915,-0.708129465579987,-0.040034044533968,0.729846894741058,-0.679405450820923,0.0757084339857101,0.298700571060181,-0.161740928888321,-0.94054126739502,0.143241554498672,-0.263150751590729,-0.954061627388,-0.337419033050537,0.179084926843643,-0.924162864685059,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.866790115833282,0.482820779085159,0.124735727906227,-0.841190576553345,0.42979621887207,-0.328136563301086, -0.841190576553345,0.42979621887207,-0.328136563301086,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.485478460788727,0.644360303878784,0.590855658054352,-0.559439122676849,0.572440028190613,0.599449932575226,-0.524893045425415,0.430009782314301,0.734560310840607,-0.751098394393921,0.448982089757919,0.484010636806488,-0.549624145030975,0.147533476352692,0.822281718254089,-0.819946527481079,0.416022598743439,0.393208384513855,-0.896193027496338,0.243554174900055,0.370836079120636,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.751098394393921,0.448982089757919,0.484010636806488,-0.737871766090393,0.512266218662262,0.439463973045349,-0.328695803880692,0.662784039974213,0.672812342643738,-0.485478460788727,0.644360303878784,0.590855658054352,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.896193027496338,0.243554174900055,0.370836079120636,-0.751098394393921,0.448982089757919,0.484010636806488,-0.524893045425415,0.430009782314301,0.734560310840607,-0.676622211933136,0.280620872974396,-0.680760145187378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.52191436290741,0.573753893375397,-0.631198763847351,0.311660826206207,-0.127051904797554,-0.941660940647125,0.298700571060181,-0.161740928888321,-0.94054126739502,-0.150649160146713,0.343712389469147,-0.926912426948547,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.549624145030975,0.147533476352692,0.822281718254089,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.154075160622597,0.221347615122795,0.962946593761444,-0.097216323018074,-0.329928547143936,0.938986778259277,0.115986511111259,0.227630436420441,0.966815114021301, 0.165526703000069,0.46548119187355,0.869441270828247,-0.154075160622597,0.221347615122795,0.962946593761444,-0.397168695926666,0.623658359050751,0.673280954360962,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.665791451931,0.744200885295868,0.053728986531496,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.736354291439056,0.674543976783752,-0.0526571460068226,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.677062809467316,0.519408404827118,-0.521345198154449,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.676421940326691,0.591155827045441,0.439304113388062,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.665791451931,0.744200885295868,0.053728986531496,-0.345012873411179,0.660347282886505,0.667013943195343,-0.345012873411179,0.660347282886505,0.667013943195343,-0.665791451931,0.744200885295868,0.053728986531496,-0.728628396987915,0.670947968959808,0.137584701180458,-0.458523720502853,0.614238142967224,0.642236292362213,-0.458523720502853,0.614238142967224,0.642236292362213,-0.728628396987915,0.670947968959808,0.137584701180458,-0.653796315193176,0.736424326896667,0.173866480588913,-0.341495484113693,0.750590026378632,0.565681397914886,-0.357071965932846,0.176186710596085,0.917310118675232,-0.396970868110657,0.459579348564148,0.794481575489044,-0.175726309418678,0.623865723609924,0.761519432067871,0.117293141782284,0.336978107690811,0.934177756309509,-0.627143085002899,0.109072089195251,-0.771229445934296,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.388193219900131,-0.0462160408496857,-0.920418441295624, -0.409174174070358,-0.167213842272758,-0.897003948688507,-0.238952934741974,-0.279697000980377,-0.929876923561096,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.602150559425354,0.09493388235569,-0.792718291282654,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.396970868110657,0.459579348564148,0.794481575489044,-0.357071965932846,0.176186710596085,0.917310118675232,-0.523556113243103,0.279740929603577,0.804757118225098,-0.39349702000618,0.476447492837906,0.786230206489563,-0.396970868110657,0.459579348564148,0.794481575489044,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739,-0.420263022184372,0.62258517742157,0.660126268863678,-0.207436442375183,0.874366402626038,0.438695192337036,0.293660908937454,0.577858746051788,0.761473953723907,-0.175726309418678,0.623865723609924,0.761519432067871,-0.341495484113693,0.750590026378632,0.565681397914886,-0.708205878734589,0.435963183641434,-0.555320203304291,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.653796315193176,0.736424326896667,0.173866480588913,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.28887614607811,0.124025739729404,0.949298799037933,-0.047230526804924,-0.147780075669289,0.987891852855682,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.523556113243103,0.279740929603577,0.804757118225098,-0.047230526804924,-0.147780075669289,0.987891852855682,0.443388015031815,-0.641468644142151,0.626039206981659,0.158797964453697,-0.752626359462738,0.639012277126312,-0.425698101520538,-0.165044084191322,0.889686226844788,0.323112219572067,0.289230555295944,0.901079475879669,0.406247109174728,0.174616456031799,0.896923840045929,0.70347386598587,-0.284948945045471,0.651098012924194,0.771257698535919,-0.18939545750618,0.607693135738373,0.792802751064301,-0.543330252170563,0.276144862174988, 0.744553029537201,-0.501156628131866,0.4410021007061,0.771257698535919,-0.18939545750618,0.607693135738373,0.70347386598587,-0.284948945045471,0.651098012924194,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.896193027496338,0.243554174900055,0.370836079120636,-0.819946527481079,0.416022598743439,0.393208384513855,-0.866790115833282,0.482820779085159,0.124735727906227,-0.866790115833282,0.482820779085159,0.124735727906227,-0.819946527481079,0.416022598743439,0.393208384513855,-0.743195831775665,0.547327280044556,0.384828329086304,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.207436442375183,0.874366402626038,0.438695192337036,-0.34545773267746,0.720738053321838,0.600995540618896,0.235387146472931,0.430203825235367,0.871503055095673,0.293660908937454,0.577858746051788,0.761473953723907,0.624863624572754,-0.775575757026672,0.0895971804857254,0.669889271259308,-0.735676348209381,0.100143387913704,0.679318964481354,-0.681169748306274,0.273008167743683,0.631202757358551,-0.748089611530304,0.204804703593254,0.552962005138397,-0.830714046955109,0.064398355782032,0.564540684223175,-0.811680018901825,0.149898007512093,0.392137885093689,-0.898935735225677,0.195300936698914,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.392137885093689,-0.898935735225677,0.195300936698914,0.477273166179657,-0.844216048717499,0.243945851922035,0.505315124988556,-0.859342753887177,-0.0786550119519234,-0.391994029283524,0.0455844439566135,-0.91883772611618,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.617175698280334,-0.749861061573029,-0.238332808017731,0.692149817943573,-0.677433252334595,-0.249023765325546,0.704946756362915,-0.708129465579987,-0.040034044533968,0.518121659755707,-0.845738351345062,-0.127579480409622,0.446416854858398,-0.828317999839783,-0.338528007268906,0.545369505882263,-0.785522282123566,-0.292449623346329, 0.602230906486511,-0.791486024856567,-0.104248508810997,0.518121659755707,-0.845738351345062,-0.127579480409622,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.445018202066422,-0.841427505016327,-0.306526601314545,0.446416854858398,-0.828317999839783,-0.338528007268906,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.471282690763474,0.177316069602966,-0.863974332809448,0.788194417953491,-0.590478122234344,-0.173450663685799,0.816579103469849,-0.529018878936768,-0.230949223041534,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.207436442375183,0.874366402626038,0.438695192337036,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.24271634221077,0.841442763805389,0.482765853404999,-0.34545773267746,0.720738053321838,0.600995540618896,0.722802340984344,-0.617218017578125,0.310803234577179,0.792802751064301,-0.543330252170563,0.276144862174988,0.70347386598587,-0.284948945045471,0.651098012924194,0.592092573642731,-0.300796002149582,0.747628331184387,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.633037269115448,0.653608679771423,0.414800643920898,-0.661741137504578,0.744016170501709,0.0924049317836761,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.0371899753808975,0.612780451774597,0.789377629756927, -0.24271634221077,0.841442763805389,0.482765853404999,-0.270709186792374,0.893246471881866,0.35892516374588,-0.0627354606986046,0.701922833919525,0.709484755992889,0.406247109174728,0.174616456031799,0.896923840045929,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.0627354606986046,0.701922833919525,0.709484755992889,0.279203683137894,0.224120020866394,0.933710634708405,0.592092573642731,-0.300796002149582,0.747628331184387,0.406247109174728,0.174616456031799,0.896923840045929,0.279203683137894,0.224120020866394,0.933710634708405,0.420396059751511,-0.116494543850422,0.899831175804138,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.599522888660431,0.463965177536011,-0.652156889438629,-0.685906887054443,0.655823826789856,-0.315320372581482,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.480240970849991,0.318685859441757,-0.817195177078247,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.598774611949921,0.291624635457993,-0.745938360691071,-0.546689867973328,0.213103443384171,-0.809763610363007,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.624755680561066,0.281536430120468,-0.728297710418701,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.572875738143921,0.11709675937891,-0.811234712600708,-0.409174174070358,-0.167213842272758,-0.897003948688507,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.409174174070358,-0.167213842272758,-0.897003948688507, -0.158167138695717,-0.488490730524063,-0.858114242553711,-0.0411282703280449,-0.362414002418518,-0.931109309196472,-0.737871766090393,0.512266218662262,0.439463973045349,-0.751098394393921,0.448982089757919,0.484010636806488,-0.896193027496338,0.243554174900055,0.370836079120636,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.558412373065948,0.662734746932983,-0.498957246541977,-0.743281781673431,0.522458851337433,-0.417814522981644,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.563040912151337,0.733509361743927,0.380721718072891,-0.612874746322632,0.790095686912537,-0.011550584807992,-0.775943994522095,0.628167152404785,0.0575932897627354,-0.743195831775665,0.547327280044556,0.384828329086304,0.293660908937454,0.577858746051788,0.761473953723907,0.235387146472931,0.430203825235367,0.871503055095673,0.305413067340851,0.121777974069119,0.944400906562805,0.117293141782284,0.336978107690811,0.934177756309509,0.54656720161438,-0.7532879114151,-0.365816354751587,0.558507144451141,-0.773075938224792,-0.30070486664772,0.657974064350128,-0.742551565170288,-0.125249087810516,0.742225170135498,-0.630128085613251,-0.228123426437378,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.449016630649567,0.427696466445923,-0.784512460231781,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.580101191997528,0.322207540273666,-0.748107552528381,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.449016630649567,0.427696466445923,-0.784512460231781,0.792802751064301,-0.543330252170563,0.276144862174988,0.722802340984344,-0.617218017578125,0.310803234577179,0.71945708990097,-0.687020063400269,0.101906716823578,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.792802751064301,-0.543330252170563,0.276144862174988,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.779800176620483,-0.625844657421112,0.0151696130633354, 0.744553029537201,-0.501156628131866,0.4410021007061,-0.482590168714523,0.598400712013245,0.639549314975739,-0.467934727668762,0.514274716377258,0.718720138072968,-0.397168695926666,0.623658359050751,0.673280954360962,-0.559439122676849,0.572440028190613,0.599449932575226,-0.485478460788727,0.644360303878784,0.590855658054352,-0.420263022184372,0.62258517742157,0.660126268863678,-0.482590168714523,0.598400712013245,0.639549314975739,-0.559439122676849,0.572440028190613,0.599449932575226,-0.665791451931,0.744200885295868,0.053728986531496,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.728628396987915,0.670947968959808,0.137584701180458,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.742188274860382,0.281538933515549,-0.608187794685364,-0.626471102237701,0.537168443202972,-0.564786732196808,-0.337419033050537,0.179084926843643,-0.924162864685059,0.143241554498672,-0.263150751590729,-0.954061627388,-0.238952934741974,-0.279697000980377,-0.929876923561096,-0.566018283367157,0.00991705991327763,-0.824333071708679,-0.337419033050537,0.179084926843643,-0.924162864685059,0.420848518610001,-0.797750890254974,-0.431833386421204,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.143241554498672,-0.263150751590729,-0.954061627388,0.57789820432663,-0.655906856060028,-0.485612899065018,0.545369505882263,-0.785522282123566,-0.292449623346329,0.420848518610001,-0.797750890254974,-0.431833386421204,0.57789820432663,-0.655906856060028,-0.485612899065018,0.617175698280334,-0.749861061573029,-0.238332808017731,0.602230906486511,-0.791486024856567,-0.104248508810997,0.545369505882263,-0.785522282123566,-0.292449623346329,0.617175698280334,-0.749861061573029,-0.238332808017731,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.624863624572754,-0.775575757026672,0.0895971804857254,0.602230906486511,-0.791486024856567,-0.104248508810997,0.646031558513641,-0.763022661209106,-0.0209675077348948,0.669889271259308,-0.735676348209381,0.100143387913704, -0.793548226356506,0.599173665046692,-0.106170132756233,-0.52191436290741,0.573753893375397,-0.631198763847351,-0.438523173332214,0.694159924983978,-0.570823431015015,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.581943690776825,0.351140558719635,-0.733513355255127,-0.471282690763474,0.177316069602966,-0.863974332809448,-0.405150681734085,0.0784264355897903,-0.910879909992218,-0.521965801715851,0.298950701951981,-0.798861801624298,-0.480240970849991,0.318685859441757,-0.817195177078247,0.558507144451141,-0.773075938224792,-0.30070486664772,0.606213510036469,-0.729506313800812,-0.316742390394211,0.668628990650177,-0.726897060871124,-0.156703382730484,0.657974064350128,-0.742551565170288,-0.125249087810516,0.606213510036469,-0.729506313800812,-0.316742390394211,0.603177964687347,-0.730402767658234,-0.320449888706207,0.64731752872467,-0.742053866386414,-0.174172759056091,0.668628990650177,-0.726897060871124,-0.156703382730484,0.480990260839462,-0.836049139499664,-0.263951063156128,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.64731752872467,-0.742053866386414,-0.174172759056091,0.603177964687347,-0.730402767658234,-0.320449888706207,0.445018202066422,-0.841427505016327,-0.306526601314545,0.45007735490799,-0.890308558940887,-0.0691446214914322,0.505315124988556,-0.859342753887177,-0.0786550119519234,0.480990260839462,-0.836049139499664,-0.263951063156128,-0.345012873411179,0.660347282886505,0.667013943195343,-0.328695803880692,0.662784039974213,0.672812342643738,-0.737871766090393,0.512266218662262,0.439463973045349,-0.676421940326691,0.591155827045441,0.439304113388062,-0.458523720502853,0.614238142967224,0.642236292362213,-0.402240663766861,0.592356264591217,0.698080539703369,-0.328695803880692,0.662784039974213,0.672812342643738,-0.345012873411179,0.660347282886505,0.667013943195343,-0.58198344707489,-0.50494521856308,0.637436747550964,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.869328856468201,-0.380869299173355,0.314969629049301, -0.498203843832016,-0.171885296702385,-0.849851965904236,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.596588253974915,0.134587496519089,-0.791181802749634,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.705084800720215,-0.161029234528542,-0.690597534179688,-0.805109977722168,-0.249997183680534,-0.537865459918976,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.917147397994995,-0.128003314137459,-0.377433180809021,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.523228526115417,0.410001486539841,0.747081458568573,-0.54696398973465,0.598231494426727,0.585618793964386,-0.541739642620087,0.290830105543137,0.788629233837128,-0.265586584806442,0.827619135379791,0.494479835033417,-0.251114159822464,0.744844555854797,0.618181467056274,-0.415858834981918,0.554817199707031,0.720582604408264,-0.265586584806442,0.827619135379791,0.494479835033417,0.0445509292185307,0.65805971622467,0.751646637916565,-0.130890280008316,0.562183797359467,0.816588640213013,-0.777965724468231,-0.355387061834335,-0.518140316009521,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.776331782341003,-0.346262842416763,-0.526698231697083,0.135322481393814,0.847399234771729,0.513422191143036,0.267442584037781,0.554580211639404,0.787981748580933,-0.163037300109863,0.519588589668274,0.838717222213745,-0.244644120335579,0.685302138328552,0.685937523841858,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0573794208467007,0.242892846465111,-0.968354642391205, 0.103162460029125,0.213912323117256,-0.971390247344971,0.0849071517586708,0.404431521892548,-0.910618424415588,0.124407894909382,0.762849271297455,0.634494781494141,-0.0757151022553444,0.839400827884674,0.53821325302124,-0.101806551218033,0.422118037939072,0.900806188583374,-0.130024403333664,0.107345074415207,0.985682845115662,-0.243838042020798,0.106035023927689,0.964001834392548,-0.168258428573608,-0.0454077981412411,0.984696507453918,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.92103111743927,-0.215036183595657,-0.324747800827026,0.167783945798874,0.880431950092316,0.443495273590088,0.320210188627243,0.913715243339539,0.250179767608643,0.127348259091377,0.984222948551178,0.1228316873312,0.118423573672771,0.978543698787689,0.168606325984001,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.322016537189484,0.469987332820892,-0.821837723255157,-0.277610629796982,0.394662648439407,-0.875884532928467,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.91446441411972,-0.237356558442116,-0.32774493098259,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.529427289962769,-0.308612763881683,-0.790230929851532,-0.659155488014221,-0.442682504653931,-0.607903122901917,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.856729030609131,-0.0895993784070015,0.507924556732178,-0.803666055202484,-0.115168422460556,0.583829700946808,-0.797964632511139,-0.0603525713086128,0.599674940109253,0.0620061531662941,0.990111231803894,-0.125837221741676,0.0272185504436493,0.988011002540588,-0.151965260505676,0.00109092053025961,0.832261800765991,-0.554381728172302,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.373621255159378,0.625036597251892,-0.685373187065125,-0.498037964105606,0.826278984546661,-0.263099282979965,-0.630419492721558,0.671314060688019,-0.389754712581635,0.0357786677777767,-0.332784980535507,-0.942323744297028,-0.0104440562427044,-0.319070518016815,-0.947673439979553,-0.0340137556195259,-0.196621879935265,-0.979889214038849, -0.659155488014221,-0.442682504653931,-0.607903122901917,-0.821968972682953,-0.468651831150055,-0.323623836040497,-0.534069001674652,-0.533251285552979,-0.656058967113495,-0.0765343606472015,-0.228869631886482,-0.970443785190582,0.230162009596825,-0.0996426865458488,-0.968037605285645,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.218962535262108,0.084364540874958,-0.972079277038574,-0.0663832724094391,0.0673947036266327,-0.995515525341034,-0.0474926419556141,-0.104372285306454,-0.993403673171997,-0.273301541805267,-0.178375348448753,-0.945245206356049,0.0198883153498173,-0.203020170331001,-0.978972554206848,-0.0261400658637285,-0.230357423424721,-0.972754895687103,-0.045579582452774,-0.167653381824493,-0.98479175567627,0.053296934813261,-0.126089468598366,-0.99058610200882,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.806973397731781,-0.133313298225403,0.575344681739807,-0.767262578010559,-0.329318106174469,0.550325155258179,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.987909078598022,-0.100733421742916,0.117849096655846,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.967698454856873,-0.123798668384552,-0.219621583819389,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.126853466033936,0.814248085021973,0.566487669944763,0.0917807519435883,0.740839779376984,0.665381610393524,-0.251114159822464,0.744844555854797,0.618181467056274,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.158792361617088,0.191556662321091,-0.968550980091095,-0.20303450524807,0.175852552056313,-0.963251233100891,-0.218962535262108,0.084364540874958,-0.972079277038574,0.230162009596825,-0.0996426865458488,-0.968037605285645, 0.206769347190857,0.0198965240269899,-0.978187382221222,-0.130246058106422,-0.0256487857550383,-0.99114990234375,-0.658022820949554,0.640722334384918,0.395576566457748,-0.559998273849487,0.512845575809479,0.65068531036377,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.285846680402756,0.740470588207245,0.608272194862366,-0.431082636117935,0.669595658779144,0.604821860790253,-0.233475670218468,0.295215666294098,0.926464676856995,0.0469380915164948,0.75044322013855,0.659266114234924,0.182602807879448,0.369611233472824,0.911067366600037,0.128257870674133,0.488565057516098,0.863049328327179,0.182602807879448,0.369611233472824,0.911067366600037,0.242353484034538,0.171934008598328,0.954831659793854,0.227748140692711,0.261638969182968,0.937910318374634,-0.0938221365213394,0.828937470912933,-0.551416397094727,-0.00375068746507168,0.864742159843445,-0.502202033996582,0.00345755694434047,0.996382415294647,-0.0849123671650887,0.0620061531662941,0.990111231803894,-0.125837221741676,-0.72789990901947,-0.628487348556519,0.274163037538528,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.929829955101013,0.272868812084198,0.246898397803307,-0.960404455661774,0.118234008550644,0.252277553081512,-0.992305636405945,0.0944509729743004,0.0800536796450615,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.9968541264534,-0.0452842265367508,-0.0650477930903435,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.972549617290497,-0.208768278360367,-0.102776825428009,-0.982743322849274,-0.0388989634811878,0.180837959051132,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.873635351657867,0.199546694755554,0.44378200173378,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.727636575698853,-0.347527086734772,0.591413497924805,-0.730858027935028,-0.478023678064346,0.487175494432449,-0.905158758163452,-0.227180346846581,0.359272450208664,-0.915170788764954,0.197068557143211,0.351605415344238, -0.484471023082733,-0.813864707946777,-0.320799201726913,-0.929829955101013,0.272868812084198,0.246898397803307,-0.237173914909363,-0.706752181053162,0.666520714759827,-0.484471023082733,-0.813864707946777,-0.320799201726913,-0.915170788764954,0.197068557143211,0.351605415344238,-0.915170788764954,0.197068557143211,0.351605415344238,-0.929829955101013,0.272868812084198,0.246898397803307,-0.823818027973175,0.437958568334579,0.359883517026901,-0.970666527748108,0.0689158514142036,-0.230341240763664,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.938947200775146,-0.340274900197983,-0.0509038865566254,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.333576679229736,0.525787591934204,0.782479405403137,-0.304660886526108,0.0813428908586502,0.948981106281281,-0.516382813453674,0.465612560510635,0.718716740608215,0.0822462737560272,-0.665926337242126,0.741469919681549,0.198109984397888,-0.381663233041763,0.902820944786072,-0.0524283163249493,-0.77048397064209,0.635299742221832,-0.935231983661652,0.339124768972397,0.10166396945715,-0.969261229038239,0.233877912163734,0.0763790160417557,-0.980707883834839,0.0803700610995293,0.178192809224129,-0.355119854211807,-0.655639946460724,-0.666352868080139,-0.484471023082733,-0.813864707946777,-0.320799201726913,0.707368016242981,-0.349391609430313,-0.614455819129944,0.165526703000069,0.46548119187355,0.869441270828247,0.198109984397888,-0.381663233041763,0.902820944786072,-0.154075160622597,0.221347615122795,0.962946593761444,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.0524283163249493,-0.77048397064209,0.635299742221832,0.198109984397888,-0.381663233041763,0.902820944786072,0.493679195642471,-0.48221343755722,0.723706424236298,-0.944353520870209,-0.253018736839294,-0.21018548309803,-0.869328856468201,-0.380869299173355,0.314969629049301,-0.407216638326645,-0.806287288665771,0.429040133953094,-0.275725185871124,-0.367643237113953,0.888152062892914, -0.304660886526108,0.0813428908586502,0.948981106281281,-0.0998818427324295,-0.0102633228525519,0.994946360588074,-0.397168695926666,0.623658359050751,0.673280954360962,-0.524893045425415,0.430009782314301,0.734560310840607,-0.559439122676849,0.572440028190613,0.599449932575226,-0.175627052783966,-0.391306757926941,-0.903346061706543,-0.486891210079193,0.021690109744668,-0.873193264007568,-0.238952934741974,-0.279697000980377,-0.929876923561096,0.668083667755127,-0.706556260585785,0.233329057693481,0.744553029537201,-0.501156628131866,0.4410021007061,0.779800176620483,-0.625844657421112,0.0151696130633354,0.771257698535919,-0.18939545750618,0.607693135738373,0.744553029537201,-0.501156628131866,0.4410021007061,0.509250044822693,-0.170650407671928,0.843529999256134,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.349483400583267,-0.0788575559854507,-0.933618187904358,-0.458829164505005,0.0783318057656288,-0.885064899921417,0.420396059751511,-0.116494543850422,0.899831175804138,0.279203683137894,0.224120020866394,0.933710634708405,0.174675241112709,0.124651238322258,0.976703941822052,-0.523556113243103,0.279740929603577,0.804757118225098,-0.425698101520538,-0.165044084191322,0.889686226844788,-0.331690967082977,-0.041898600757122,0.94245719909668,0.518121659755707,-0.845738351345062,-0.127579480409622,0.552962005138397,-0.830714046955109,0.064398355782032,0.45007735490799,-0.890308558940887,-0.0691446214914322,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.270709186792374,0.893246471881866,0.35892516374588,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.692083477973938,-0.68414306640625,-0.23014922440052,0.779800176620483,-0.625844657421112,0.0151696130633354,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.537661731243134,0.416983306407928,-0.732833385467529, -0.628251135349274,0.515080809593201,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.65559720993042,0.741017520427704,-0.145207911729813,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.309054106473923,-0.602658152580261,-0.735723257064819,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.771010756492615,0.4459428191185,-0.4546177983284,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.154075160622597,0.221347615122795,0.962946593761444,-0.532302677631378,-0.016792556270957,0.846387565135956,-0.524893045425415,0.430009782314301,0.734560310840607,0.311660826206207,-0.127051904797554,-0.941660940647125,-0.288306564092636,0.196774065494537,-0.937101542949677,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.524893045425415,0.430009782314301,0.734560310840607,-0.397168695926666,0.623658359050751,0.673280954360962,-0.154075160622597,0.221347615122795,0.962946593761444,-0.498203843832016,-0.171885296702385,-0.849851965904236,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.446121543645859,0.174870699644089,-0.877721965312958,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.341495484113693,0.750590026378632,0.565681397914886,-0.653796315193176,0.736424326896667,0.173866480588913,-0.396970868110657,0.459579348564148,0.794481575489044,-0.420263022184372,0.62258517742157,0.660126268863678,-0.175726309418678,0.623865723609924,0.761519432067871,-0.523556113243103,0.279740929603577,0.804757118225098,-0.357071965932846,0.176186710596085,0.917310118675232,-0.28887614607811,0.124025739729404,0.949298799037933,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.537661731243134,0.416983306407928,-0.732833385467529, -0.733746409416199,0.676492989063263,-0.0630356669425964,-0.751343011856079,0.620160222053528,0.225576862692833,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.62176638841629,0.776679754257202,-0.100871689617634,0.443388015031815,-0.641468644142151,0.626039206981659,0.477273166179657,-0.844216048717499,0.243945851922035,0.158797964453697,-0.752626359462738,0.639012277126312,-0.217019572854042,0.53657478094101,0.815469205379486,0.279203683137894,0.224120020866394,0.933710634708405,-0.0627354606986046,0.701922833919525,0.709484755992889,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.207436442375183,0.874366402626038,0.438695192337036,-0.341495484113693,0.750590026378632,0.565681397914886,0.443388015031815,-0.641468644142151,0.626039206981659,0.744553029537201,-0.501156628131866,0.4410021007061,0.668083667755127,-0.706556260585785,0.233329057693481,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.62176638841629,0.776679754257202,-0.100871689617634,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.769570112228394,0.63578873872757,-0.0594516098499298,-0.751343011856079,0.620160222053528,0.225576862692833,-0.599866449832916,0.551924109458923,0.57925820350647,-0.633037269115448,0.653608679771423,0.414800643920898,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.458829164505005,0.0783318057656288,-0.885064899921417,-0.662047147750854,0.339645981788635,-0.668082535266876,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.537661731243134,0.416983306407928,-0.732833385467529,-0.616043865680695,0.713367164134979,-0.334061741828918,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.563096046447754,0.501788794994354,-0.656605541706085,-0.0371899753808975,0.612780451774597,0.789377629756927,-0.34545773267746,0.720738053321838,0.600995540618896, -0.24271634221077,0.841442763805389,0.482765853404999,0.406247109174728,0.174616456031799,0.896923840045929,0.323112219572067,0.289230555295944,0.901079475879669,-0.0371899753808975,0.612780451774597,0.789377629756927,0.70347386598587,-0.284948945045471,0.651098012924194,0.406247109174728,0.174616456031799,0.896923840045929,0.592092573642731,-0.300796002149582,0.747628331184387,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.550443887710571,0.485175997018814,-0.679423153400421,-0.535080850124359,0.838914573192596,-0.0995529592037201,-0.270709186792374,0.893246471881866,0.35892516374588,-0.24271634221077,0.841442763805389,0.482765853404999,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.229133352637291,-0.201160058379173,-0.952382564544678,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.473940014839172,0.0295314248651266,-0.880061805248261,-0.643109500408173,0.5986048579216,-0.477579742670059,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.521023571491241,0.56111478805542,-0.64318323135376,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.590115070343018,0.449753820896149,-0.670436978340149,-0.428541034460068,0.378491044044495,-0.820424914360046,-0.379977285861969,-0.0195776931941509,-0.924788594245911,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.637764096260071,0.392574012279511,-0.662678360939026,-0.586480021476746,0.39526778459549,-0.706968545913696,-0.385445684194565,0.201349288225174,-0.900494337081909,-0.714342832565308,0.493795871734619,-0.495862871408463,-0.628251135349274,0.515080809593201,-0.583088576793671,-0.535080850124359,0.838914573192596,-0.0995529592037201, -0.793548226356506,0.599173665046692,-0.106170132756233,-0.676421940326691,0.591155827045441,0.439304113388062,-0.959632217884064,0.26953399181366,0.0803584158420563,0.742225170135498,-0.630128085613251,-0.228123426437378,0.657974064350128,-0.742551565170288,-0.125249087810516,0.692083477973938,-0.68414306640625,-0.23014922440052,-0.175726309418678,0.623865723609924,0.761519432067871,0.293660908937454,0.577858746051788,0.761473953723907,0.117293141782284,0.336978107690811,0.934177756309509,0.323112219572067,0.289230555295944,0.901079475879669,0.305413067340851,0.121777974069119,0.944400906562805,0.235387146472931,0.430203825235367,0.871503055095673,-0.638818860054016,0.281881213188171,-0.715858519077301,-0.567850172519684,0.0910008028149605,-0.81808614730835,-0.676622211933136,0.280620872974396,-0.680760145187378,0.477273166179657,-0.844216048717499,0.243945851922035,0.443388015031815,-0.641468644142151,0.626039206981659,0.668083667755127,-0.706556260585785,0.233329057693481,-0.0411282703280449,-0.362414002418518,-0.931109309196472,0.233110591769218,-0.47022944688797,-0.851201355457306,-0.353154391050339,-0.159876078367233,-0.92180347442627,-0.51726096868515,0.854504764080048,0.0475671775639057,-0.676421940326691,0.591155827045441,0.439304113388062,-0.793548226356506,0.599173665046692,-0.106170132756233,-0.959632217884064,0.26953399181366,0.0803584158420563,-0.676421940326691,0.591155827045441,0.439304113388062,-0.737871766090393,0.512266218662262,0.439463973045349,-0.458523720502853,0.614238142967224,0.642236292362213,-0.341495484113693,0.750590026378632,0.565681397914886,-0.402240663766861,0.592356264591217,0.698080539703369,-0.594531655311584,-0.698622703552246,0.398068368434906,-0.407216638326645,-0.806287288665771,0.429040133953094,0.493679195642471,-0.48221343755722,0.723706424236298,-0.868559181690216,-0.156194493174553,-0.470327794551849,-0.985974311828613,-0.0694569125771523,-0.151757627725601,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.805109977722168,-0.249997183680534,-0.537865459918976, -0.868559181690216,-0.156194493174553,-0.470327794551849,-0.513277769088745,-0.317918360233307,-0.797166168689728,-0.251114159822464,0.744844555854797,0.618181467056274,-0.291274279356003,0.469944089651108,0.833253800868988,-0.408989250659943,0.558586657047272,0.721601545810699,-0.415858834981918,0.554817199707031,0.720582604408264,0.624863624572754,-0.775575757026672,0.0895971804857254,0.631202757358551,-0.748089611530304,0.204804703593254,0.564540684223175,-0.811680018901825,0.149898007512093,0.552962005138397,-0.830714046955109,0.064398355782032,0.470721006393433,-0.417188495397568,0.777415871620178,0.463100373744965,-0.535968005657196,0.705886960029602,0.564540684223175,-0.811680018901825,0.149898007512093,0.631202757358551,-0.748089611530304,0.204804703593254,-0.0139366090297699,0.110060036182404,0.993827223777771,0.463100373744965,-0.535968005657196,0.705886960029602,0.470721006393433,-0.417188495397568,0.777415871620178,0.0628950372338295,0.12239508330822,0.990486621856689,-0.0139366090297699,0.110060036182404,0.993827223777771,0.0628950372338295,0.12239508330822,0.990486621856689,-0.467934727668762,0.514274716377258,0.718720138072968,-0.39349702000618,0.476447492837906,0.786230206489563,-0.482590168714523,0.598400712013245,0.639549314975739,-0.39349702000618,0.476447492837906,0.786230206489563,-0.467934727668762,0.514274716377258,0.718720138072968,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.721357464790344,0.650649428367615,0.237273663282394,-0.658022820949554,0.640722334384918,0.395576566457748,-0.880525827407837,0.119760677218437,0.458619266748428,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.96703976392746,-0.131514891982079,0.218031987547874,-0.888843476772308,-0.151014879345894,0.43261045217514,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.969365537166595,0.00907830987125635,0.245454847812653,-0.973214685916901,0.0593582727015018,0.22210305929184,-0.880525827407837,0.119760677218437,0.458619266748428,-0.961413502693176,-0.0763644799590111,0.264296323060989, -0.969365537166595,0.00907830987125635,0.245454847812653,-0.903727471828461,0.0786926299333572,0.420813679695129,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.971830129623413,-0.100029721856117,0.213401570916176,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.902310907840729,-0.0581778958439827,0.427142024040222,-0.943021297454834,-0.0914337635040283,0.31992295384407,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.90759688615799,-0.3472660779953,0.235953688621521,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.907991111278534,-0.362916141748428,0.209389582276344,-0.947871088981628,-0.0393517799675465,0.316214770078659,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.962112545967102,-0.0959249585866928,0.255221039056778,-0.961413502693176,-0.0763644799590111,0.264296323060989,-0.934313356876373,-0.104866981506348,0.340678036212921,-0.959401249885559,0.00467001460492611,0.282005965709686,-0.954078018665314,-0.0208575874567032,0.298831254243851,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.776331782341003,-0.346262842416763,-0.526698231697083,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.0572102777659893,-0.363048881292343,-0.930012106895447,-0.184474796056747,-0.243975773453712,-0.952073991298676,-0.0572102777659893,-0.363048881292343,-0.930012106895447,0.0357786677777767,-0.332784980535507,-0.942323744297028, -0.0340137556195259,-0.196621879935265,-0.979889214038849,0.079964205622673,0.0645997598767281,-0.994702279567719,-0.0752750188112259,0.0473053678870201,-0.996040105819702,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0810841843485832,0.166241332888603,-0.982745766639709,0.213752746582031,0.00495887640863657,0.976875185966492,0.206305459141731,0.0686478838324547,0.976076602935791,0.412932306528091,0.0920658186078072,0.906096458435059,0.443167895078659,0.0182685311883688,0.896252453327179,0.0116670094430447,0.00425092596560717,0.999922931194305,0.0177117679268122,0.0767069831490517,0.996896326541901,-0.0938338041305542,0.0678655132651329,0.993272125720978,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.667598783969879,0.599002242088318,-0.442163020372391,0.751961290836334,-0.373251110315323,-0.543357908725739,0.901673018932343,-0.243753165006638,-0.357169687747955,0.694567322731018,0.687739253044128,-0.211165577173233,0.428307920694351,0.88731974363327,-0.170926719903946,0.587996542453766,-0.370855212211609,-0.718836843967438,0.751961290836334,-0.373251110315323,-0.543357908725739,0.667598783969879,0.599002242088318,-0.442163020372391,0.550657391548157,0.552472710609436,-0.625739872455597,0.957330107688904,-0.260764896869659,0.124582171440125,0.898464798927307,-0.377257645130157,-0.224583357572556,0.720091462135315,-0.402850449085236,-0.56496000289917,0.797747611999512,-0.370718449354172,-0.475569725036621,0.412932306528091,0.0920658186078072,0.906096458435059,0.669797122478485,0.132066950201988,0.730705201625824,0.740497648715973,0.0785514339804649,0.6674525141716,0.443167895078659,0.0182685311883688,0.896252453327179,0.443167895078659,0.0182685311883688,0.896252453327179,0.740497648715973,0.0785514339804649,0.6674525141716,0.789331138134003,-0.10905522108078,0.604204714298248,0.436154782772064,-0.0844674557447433,0.895898580551147,0.963335692882538,-0.129456236958504,-0.235001027584076,0.964883267879486,-0.257389277219772,0.0524501986801624,0.991177558898926,-0.0885100439190865,0.0986559465527534, 0.999219238758087,-0.0126819871366024,0.0374175347387791,0.641741633415222,-0.441758394241333,-0.626910865306854,0.631867706775665,-0.394274353981018,-0.66730123758316,0.797747611999512,-0.370718449354172,-0.475569725036621,0.720091462135315,-0.402850449085236,-0.56496000289917,0.340316504240036,-0.448403626680374,-0.826510012149811,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.316583722829819,-0.383378833532333,-0.867637872695923,0.669797122478485,0.132066950201988,0.730705201625824,0.412932306528091,0.0920658186078072,0.906096458435059,0.291106730699539,0.735121071338654,0.612253129482269,0.562915802001953,0.509836494922638,0.650532484054565,0.889242053031921,-0.13137923181057,0.438164442777634,0.88209742307663,0.116333372890949,0.456476300954819,0.669797122478485,0.132066950201988,0.730705201625824,0.562915802001953,0.509836494922638,0.650532484054565,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.911918580532074,-0.233281582593918,-0.33761540055275,0.963335692882538,-0.129456236958504,-0.235001027584076,-0.0114694014191628,0.852027952671051,0.523370683193207,0.377356678247452,0.665678739547729,0.643796324729919,0.306847393512726,0.504767894744873,0.806879222393036,-0.123493202030659,0.566911935806274,0.814469277858734,0.306847393512726,0.504767894744873,0.806879222393036,0.543150007724762,0.5245680809021,0.65560382604599,0.381191462278366,0.807218015193939,0.450657457113266,0.0985177978873253,0.656356811523438,0.747990608215332,-0.0114694014191628,0.852027952671051,0.523370683193207,0.200062945485115,0.83070033788681,0.519530355930328,0.296454012393951,0.853960573673248,0.42762878537178,0.377356678247452,0.665678739547729,0.643796324729919,0.613006412982941,0.632095158100128,-0.474003076553345,0.367568165063858,0.757281005382538,-0.539832472801209,0.438032209873199,0.893748044967651,0.0966554135084152,0.600959360599518,0.790454268455505,0.118447989225388,0.377356678247452,0.665678739547729,0.643796324729919, 0.296454012393951,0.853960573673248,0.42762878537178,0.307623445987701,0.872403740882874,0.379841536283493,0.536732196807861,0.528757095336914,0.657521426677704,0.198797062039375,0.642942130565643,0.739665627479553,0.167321741580963,0.36504065990448,0.915832281112671,0.345328092575073,0.282600909471512,0.894921898841858,0.349903911352158,0.592323482036591,0.725754916667938,0.377356678247452,0.665678739547729,0.643796324729919,0.536732196807861,0.528757095336914,0.657521426677704,0.543150007724762,0.5245680809021,0.65560382604599,0.306847393512726,0.504767894744873,0.806879222393036,0.367568165063858,0.757281005382538,-0.539832472801209,0.237173900008202,0.452350407838821,-0.85972535610199,0.0132267400622368,0.464425086975098,-0.885513663291931,0.148073747754097,0.745845675468445,-0.649452328681946,0.340316504240036,-0.448403626680374,-0.826510012149811,0.365317970514297,-0.409484475851059,-0.835981607437134,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.0545569509267807,0.00619251187890768,-0.99849146604538,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.219784289598465,0.21984101831913,-0.950455009937286,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.228578105568886,0.0637626796960831,-0.971435189247131,0.167321741580963,0.36504065990448,0.915832281112671,0.198797062039375,0.642942130565643,0.739665627479553,-0.103646658360958,0.632546961307526,0.767555713653564,-0.169371664524078,0.433557659387589,0.88506555557251,-0.0510855726897717,0.371638625860214,-0.926970899105072,-0.163042917847633,0.482063621282578,-0.86083197593689,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0104440562427044,-0.319070518016815,-0.947673439979553, -0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0440147742629051,-0.354229003190994,-0.934122323989868,0.378357648849487,0.724991083145142,0.575528800487518,0.250419557094574,0.807709574699402,0.533755779266357,0.380377441644669,0.814519464969635,0.438030809164047,0.381191462278366,0.807218015193939,0.450657457113266,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0545569509267807,0.00619251187890768,-0.99849146604538,0.025994973257184,0.100541830062866,0.99459320306778,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.0350599996745586,0.0215551313012838,0.999152719974518,0.922331035137177,0.0571805983781815,0.382146298885345,0.88209742307663,0.116333372890949,0.456476300954819,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.922331035137177,0.0571805983781815,0.382146298885345,0.964077115058899,-0.108696304261684,0.242364108562469,0.789331138134003,-0.10905522108078,0.604204714298248,0.740497648715973,0.0785514339804649,0.6674525141716,0.88209742307663,0.116333372890949,0.456476300954819,0.922331035137177,0.0571805983781815,0.382146298885345,0.740497648715973,0.0785514339804649,0.6674525141716,0.669797122478485,0.132066950201988,0.730705201625824,0.380377441644669,0.814519464969635,0.438030809164047,0.349903911352158,0.592323482036591,0.725754916667938,0.645817458629608,0.37744864821434,0.66366583108902,0.659283638000488,0.56208461523056,0.499405652284622,0.349903911352158,0.592323482036591,0.725754916667938,0.345328092575073,0.282600909471512,0.894921898841858,0.634893178939819,0.130881890654564,0.761433184146881,0.645817458629608,0.37744864821434,0.66366583108902,0.307623445987701,0.872403740882874,0.379841536283493,0.296454012393951,0.853960573673248,0.42762878537178,0.273056983947754,0.564899086952209,0.778671264648438,0.31501841545105,0.615055680274963,0.722820818424225, 0.200062945485115,0.83070033788681,0.519530355930328,0.248548656702042,0.411066323518753,0.877067863941193,0.273056983947754,0.564899086952209,0.778671264648438,0.296454012393951,0.853960573673248,0.42762878537178,0.248548656702042,0.411066323518753,0.877067863941193,0.374015629291534,0.57144570350647,0.730453372001648,0.299544423818588,0.682939231395721,0.666233539581299,0.273056983947754,0.564899086952209,0.778671264648438,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.163042917847633,0.482063621282578,-0.86083197593689,0.148073747754097,0.745845675468445,-0.649452328681946,0.0132267400622368,0.464425086975098,-0.885513663291931,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.044108722358942,-0.104566030204296,-0.993539333343506,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0222764182835817,-0.332656174898148,-0.942785024642944,-0.0333343744277954,-0.188492000102997,-0.981508851051331,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.109398990869522,-0.127084732055664,-0.985840439796448,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.228578105568886,0.0637626796960831,-0.971435189247131,-0.0605181753635406,0.0956659987568855,-0.993572115898132,-0.0573794208467007,0.242892846465111,-0.968354642391205,0.200062945485115,0.83070033788681,0.519530355930328,-0.0114694014191628,0.852027952671051,0.523370683193207,-0.22732575237751,0.908823013305664,0.349805355072021,0.0103344274684787,0.766447365283966,0.642223954200745,0.374015629291534,0.57144570350647,0.730453372001648,0.248548656702042,0.411066323518753,0.877067863941193,0.0103344274684787,0.766447365283966,0.642223954200745,0.120974369347095,0.820596933364868,0.558556973934174,-0.0114694014191628,0.852027952671051,0.523370683193207, -0.123493202030659,0.566911935806274,0.814469277858734,-0.154036402702332,0.732537567615509,0.663069784641266,-0.22732575237751,0.908823013305664,0.349805355072021,0.274746268987656,0.549388289451599,0.789105176925659,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.14302770793438,0.47186079621315,0.869994521141052,0.0985177978873253,0.656356811523438,0.747990608215332,0.0201202612370253,0.491976112127304,0.870376169681549,-0.14302770793438,0.47186079621315,0.869994521141052,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.22561714053154,0.930931448936462,0.287164628505707,-0.0476368367671967,0.9897421002388,0.134689643979073,0.4521364569664,0.881967127323151,0.133066028356552,0.120974369347095,0.820596933364868,0.558556973934174,-0.22561714053154,0.930931448936462,0.287164628505707,0.120974369347095,0.820596933364868,0.558556973934174,0.0103344274684787,0.766447365283966,0.642223954200745,-0.22732575237751,0.908823013305664,0.349805355072021,-0.22561714053154,0.930931448936462,0.287164628505707,-0.154036402702332,0.732537567615509,0.663069784641266,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.22561714053154,0.930931448936462,0.287164628505707,-0.22732575237751,0.908823013305664,0.349805355072021,0.834282159805298,-0.0577300190925598,0.548307001590729,0.659731268882751,0.252948880195618,0.70765209197998,0.645817458629608,0.37744864821434,0.66366583108902,0.634893178939819,0.130881890654564,0.761433184146881,0.954777777194977,-0.0263348873704672,0.296151697635651,0.967678904533386,-0.0477387942373753,0.247625812888145,0.890053927898407,-0.0586380586028099,0.452068090438843,0.888165593147278,-0.00891786906868219,0.459437042474747,0.0350599996745586,0.0215551313012838,0.999152719974518,-0.0463824793696404,-0.00737064564600587,0.998896598815918,-0.152715757489204,0.0582166723906994,0.986553966999054, 0.0415807291865349,0.144025474786758,0.988700032234192,0.295928508043289,-0.207367569208145,0.932429611682892,0.307560920715332,-0.091851145029068,0.947084844112396,0.534165501594543,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.171966776251793,-0.0650009214878082,0.982955873012543,0.135682836174965,-0.100586615502834,0.985633075237274,-0.152715757489204,0.0582166723906994,0.986553966999054,0.0415807291865349,0.144025474786758,0.988700032234192,-0.152715757489204,0.0582166723906994,0.986553966999054,-0.169371664524078,0.433557659387589,0.88506555557251,0.051253791898489,0.460094302892685,0.886389493942261,-0.152715757489204,0.0582166723906994,0.986553966999054,0.135682836174965,-0.100586615502834,0.985633075237274,0.167321741580963,0.36504065990448,0.915832281112671,-0.169371664524078,0.433557659387589,0.88506555557251,0.307560920715332,-0.091851145029068,0.947084844112396,0.295928508043289,-0.207367569208145,0.932429611682892,0.135682836174965,-0.100586615502834,0.985633075237274,0.171966776251793,-0.0650009214878082,0.982955873012543,0.834282159805298,-0.0577300190925598,0.548307001590729,0.774369955062866,-0.461647033691406,0.432704478502274,0.801247537136078,-0.596114218235016,0.0514810234308243,0.858235716819763,-0.482136696577072,0.175999104976654,0.964077115058899,-0.108696304261684,0.242364108562469,0.967678904533386,-0.0477387942373753,0.247625812888145,0.831483364105225,0.0368483774363995,0.554326236248016,0.789331138134003,-0.10905522108078,0.604204714298248,0.0116106020286679,0.109513640403748,0.993917465209961,0.169032081961632,0.119583055377007,0.978329241275787,0.171966776251793,-0.0650009214878082,0.982955873012543,-0.0463824793696404,-0.00737064564600587,0.998896598815918,0.888511061668396,-0.437404543161392,0.138655453920364,0.727367699146271,-0.668511748313904,0.15501070022583,0.858235716819763,-0.482136696577072,0.175999104976654,0.801247537136078,-0.596114218235016,0.0514810234308243,0.135682836174965,-0.100586615502834,0.985633075237274, 0.295928508043289,-0.207367569208145,0.932429611682892,0.345328092575073,0.282600909471512,0.894921898841858,0.167321741580963,0.36504065990448,0.915832281112671,0.801247537136078,-0.596114218235016,0.0514810234308243,0.774369955062866,-0.461647033691406,0.432704478502274,0.859270870685577,-0.205668747425079,0.468352407217026,0.888511061668396,-0.437404543161392,0.138655453920364,0.486142605543137,0.105355285108089,0.867505431175232,0.2811399102211,0.126565098762512,0.951284229755402,0.19136768579483,-0.0293898787349463,0.981078326702118,0.436154782772064,-0.0844674557447433,0.895898580551147,0.486142605543137,0.105355285108089,0.867505431175232,0.436154782772064,-0.0844674557447433,0.895898580551147,0.789331138134003,-0.10905522108078,0.604204714298248,0.831483364105225,0.0368483774363995,0.554326236248016,-0.123493202030659,0.566911935806274,0.814469277858734,0.306847393512726,0.504767894744873,0.806879222393036,0.0985177978873253,0.656356811523438,0.747990608215332,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0509213022887707,0.887329638004303,0.458315491676331,-0.154036402702332,0.732537567615509,0.663069784641266,-0.14302770793438,0.47186079621315,0.869994521141052,0.0201202612370253,0.491976112127304,0.870376169681549,-0.154036402702332,0.732537567615509,0.663069784641266,-0.123493202030659,0.566911935806274,0.814469277858734,0.105207018554211,0.966200411319733,0.235347032546997,-0.0329985395073891,0.983319759368896,0.178866878151894,-0.0509213022887707,0.887329638004303,0.458315491676331,0.0895038321614265,0.749099910259247,0.65638279914856,0.88209742307663,0.116333372890949,0.456476300954819,0.889242053031921,-0.13137923181057,0.438164442777634,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.999219238758087,-0.0126819871366024,0.0374175347387791,0.380377441644669,0.814519464969635,0.438030809164047,0.250419557094574,0.807709574699402,0.533755779266357,0.198797062039375,0.642942130565643,0.739665627479553, 0.349903911352158,0.592323482036591,0.725754916667938,0.00678820535540581,0.00935708172619343,0.999933183193207,0.00949578825384378,0.0594539344310761,0.998185873031616,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.0177117679268122,0.0767069831490517,0.996896326541901,0.291106730699539,0.735121071338654,0.612253129482269,0.412932306528091,0.0920658186078072,0.906096458435059,0.206305459141731,0.0686478838324547,0.976076602935791,0.233477383852005,0.295218259096146,0.926463425159454,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.316321402788162,0.603275775909424,-0.732119560241699,0.508885145187378,0.79451996088028,-0.331321537494659,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0743019878864288,-0.318207800388336,-0.945104777812958,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0104440562427044,-0.319070518016815,-0.947673439979553,0.436154782772064,-0.0844674557447433,0.895898580551147,0.19136768579483,-0.0293898787349463,0.981078326702118,0.213752746582031,0.00495887640863657,0.976875185966492,0.443167895078659,0.0182685311883688,0.896252453327179,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.208209201693535,-0.0487155094742775,-0.976870357990265,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.381191462278366,0.807218015193939,0.450657457113266,0.380377441644669,0.814519464969635,0.438030809164047,0.659283638000488,0.56208461523056,0.499405652284622,0.274746268987656,0.549388289451599,0.789105176925659,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0145869944244623,0.988409578800201,-0.151108130812645,-0.0476368367671967,0.9897421002388,0.134689643979073,-0.0329985395073891,0.983319759368896,0.178866878151894,0.4521364569664,0.881967127323151,0.133066028356552,0.600959360599518,0.790454268455505,0.118447989225388,0.374015629291534,0.57144570350647,0.730453372001648,0.120974369347095,0.820596933364868,0.558556973934174,0.367568165063858,0.757281005382538,-0.539832472801209, 0.613006412982941,0.632095158100128,-0.474003076553345,0.316321402788162,0.603275775909424,-0.732119560241699,0.237173900008202,0.452350407838821,-0.85972535610199,0.508885145187378,0.79451996088028,-0.331321537494659,0.4521364569664,0.881967127323151,0.133066028356552,-0.0476368367671967,0.9897421002388,0.134689643979073,0.0145869944244623,0.988409578800201,-0.151108130812645,0.600959360599518,0.790454268455505,0.118447989225388,0.438032209873199,0.893748044967651,0.0966554135084152,0.299544423818588,0.682939231395721,0.666233539581299,0.374015629291534,0.57144570350647,0.730453372001648,0.859270870685577,-0.205668747425079,0.468352407217026,0.774369955062866,-0.461647033691406,0.432704478502274,0.550590097904205,-0.295528441667557,0.780713438987732,0.534165501594543,-0.113752603530884,0.837691783905029,0.550590097904205,-0.295528441667557,0.780713438987732,0.634893178939819,0.130881890654564,0.761433184146881,0.345328092575073,0.282600909471512,0.894921898841858,0.295928508043289,-0.207367569208145,0.932429611682892,0.774369955062866,-0.461647033691406,0.432704478502274,0.834282159805298,-0.0577300190925598,0.548307001590729,0.634893178939819,0.130881890654564,0.761433184146881,0.550590097904205,-0.295528441667557,0.780713438987732,0.0704744011163712,0.82375580072403,-0.562547504901886,0.0859579145908356,0.475804299116135,-0.875340759754181,0.0293854102492332,0.448770761489868,-0.893163621425629,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0261680763214827,0.194867521524429,-0.980480432510376,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.181298598647118,0.412835657596588,-0.892579138278961,0.0132267400622368,0.464425086975098,-0.885513663291931,0.181251630187035,0.380190223455429,-0.906974792480469,0.0261680763214827,0.194867521524429,-0.980480432510376,0.0132267400622368,0.464425086975098,-0.885513663291931,0.237173900008202,0.452350407838821,-0.85972535610199,0.85130912065506,-0.28415909409523,-0.441051483154297,0.797747611999512,-0.370718449354172,-0.475569725036621,0.631867706775665,-0.394274353981018,-0.66730123758316, 0.544504523277283,-0.49831086397171,-0.674685955047607,0.797747611999512,-0.370718449354172,-0.475569725036621,0.85130912065506,-0.28415909409523,-0.441051483154297,0.934587121009827,-0.0746875330805779,0.347805470228195,0.957330107688904,-0.260764896869659,0.124582171440125,0.720091462135315,-0.402850449085236,-0.56496000289917,0.898464798927307,-0.377257645130157,-0.224583357572556,0.778241097927094,-0.324259251356125,-0.53777015209198,0.599293649196625,-0.39963087439537,-0.693644165992737,0.508885145187378,0.79451996088028,-0.331321537494659,0.613006412982941,0.632095158100128,-0.474003076553345,0.600959360599518,0.790454268455505,0.118447989225388,0.4521364569664,0.881967127323151,0.133066028356552,-0.181298598647118,0.412835657596588,-0.892579138278961,-0.219784289598465,0.21984101831913,-0.950455009937286,-0.0573794208467007,0.242892846465111,-0.968354642391205,-0.051368486136198,0.366652280092239,-0.928938865661621,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.109398990869522,-0.127084732055664,-0.985840439796448,0.111387610435486,-0.211319342255592,-0.9710493683815,0.223528057336807,-0.361992210149765,-0.904984474182129,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.415907889604568,-0.581008851528168,-0.699606537818909,0.394706159830093,-0.349102348089218,-0.84990268945694,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.427927106618881,-0.320324927568436,-0.845145165920258,0.339142799377441,0.423890322446823,-0.839820921421051,0.205058068037033,-0.244612783193588,-0.947689712047577,-0.000479655718663707,-0.389120310544968,-0.921186804771423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.03669124096632,-0.316752940416336,-0.947798132896423,-0.0440147742629051,-0.354229003190994,-0.934122323989868,-0.000479655718663707,-0.389120310544968,-0.921186804771423,0.0686725899577141,-0.344746232032776,-0.936180591583252,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.079964205622673,0.0645997598767281,-0.994702279567719, -0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.394706159830093,-0.349102348089218,-0.84990268945694,0.111387610435486,-0.211319342255592,-0.9710493683815,0.111387610435486,-0.211319342255592,-0.9710493683815,0.394706159830093,-0.349102348089218,-0.84990268945694,0.544504523277283,-0.49831086397171,-0.674685955047607,0.223528057336807,-0.361992210149765,-0.904984474182129,0.641741633415222,-0.441758394241333,-0.626910865306854,0.340316504240036,-0.448403626680374,-0.826510012149811,0.316583722829819,-0.383378833532333,-0.867637872695923,0.631867706775665,-0.394274353981018,-0.66730123758316,0.641741633415222,-0.441758394241333,-0.626910865306854,0.599293649196625,-0.39963087439537,-0.693644165992737,0.365317970514297,-0.409484475851059,-0.835981607437134,0.340316504240036,-0.448403626680374,-0.826510012149811,0.631867706775665,-0.394274353981018,-0.66730123758316,0.316583722829819,-0.383378833532333,-0.867637872695923,0.223528057336807,-0.361992210149765,-0.904984474182129,0.544504523277283,-0.49831086397171,-0.674685955047607,-0.0851698592305183,-0.236632868647575,-0.967858970165253,0.223528057336807,-0.361992210149765,-0.904984474182129,0.316583722829819,-0.383378833532333,-0.867637872695923,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.19136768579483,-0.0293898787349463,0.981078326702118,0.169032081961632,0.119583055377007,0.978329241275787,0.0116106020286679,0.109513640403748,0.993917465209961,-0.0284342020750046,0.0239462200552225,0.999308824539185,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.206305459141731,0.0686478838324547,0.976076602935791,0.213752746582031,0.00495887640863657,0.976875185966492,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.233477383852005,0.295218259096146,0.926463425159454,0.206305459141731,0.0686478838324547,0.976076602935791,-0.0938338041305542,0.0678655132651329,0.993272125720978,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0116670094430447,0.00425092596560717,0.999922931194305,-0.0935027524828911,0.0115412008017302,0.995552122592926, -0.0284342020750046,0.0239462200552225,0.999308824539185,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0935027524828911,0.0115412008017302,0.995552122592926,0.213752746582031,0.00495887640863657,0.976875185966492,0.19136768579483,-0.0293898787349463,0.981078326702118,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.890053927898407,-0.0586380586028099,0.452068090438843,0.929404556751251,-0.130073204636574,0.345381230115891,0.957330107688904,-0.260764896869659,0.124582171440125,0.934587121009827,-0.0746875330805779,0.347805470228195,0.534165501594543,-0.113752603530884,0.837691783905029,0.486142605543137,0.105355285108089,0.867505431175232,0.831483364105225,0.0368483774363995,0.554326236248016,0.859270870685577,-0.205668747425079,0.468352407217026,0.486142605543137,0.105355285108089,0.867505431175232,0.534165501594543,-0.113752603530884,0.837691783905029,0.307560920715332,-0.091851145029068,0.947084844112396,0.2811399102211,0.126565098762512,0.951284229755402,0.169032081961632,0.119583055377007,0.978329241275787,0.2811399102211,0.126565098762512,0.951284229755402,0.307560920715332,-0.091851145029068,0.947084844112396,0.171966776251793,-0.0650009214878082,0.982955873012543,0.954777777194977,-0.0263348873704672,0.296151697635651,0.859270870685577,-0.205668747425079,0.468352407217026,0.831483364105225,0.0368483774363995,0.554326236248016,0.967678904533386,-0.0477387942373753,0.247625812888145,0.926999032497406,-0.273295104503632,0.256870836019516,0.799426317214966,-0.355103880167007,0.484581023454666,0.888165593147278,-0.00891786906868219,0.459437042474747,0.934587121009827,-0.0746875330805779,0.347805470228195,0.929404556751251,-0.130073204636574,0.345381230115891,0.964883267879486,-0.257389277219772,0.0524501986801624,0.898464798927307,-0.377257645130157,-0.224583357572556,0.957330107688904,-0.260764896869659,0.124582171440125,0.964883267879486,-0.257389277219772,0.0524501986801624,0.963335692882538,-0.129456236958504,-0.235001027584076,0.778241097927094,-0.324259251356125,-0.53777015209198,0.898464798927307,-0.377257645130157,-0.224583357572556, 0.890053927898407,-0.0586380586028099,0.452068090438843,0.967678904533386,-0.0477387942373753,0.247625812888145,0.964077115058899,-0.108696304261684,0.242364108562469,0.929404556751251,-0.130073204636574,0.345381230115891,0.789399027824402,-0.501962423324585,0.353387653827667,0.954777777194977,-0.0263348873704672,0.296151697635651,0.888165593147278,-0.00891786906868219,0.459437042474747,0.799426317214966,-0.355103880167007,0.484581023454666,0.929404556751251,-0.130073204636574,0.345381230115891,0.964077115058899,-0.108696304261684,0.242364108562469,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964883267879486,-0.257389277219772,0.0524501986801624,-0.10020349919796,0.182739198207855,0.978041768074036,-0.0824126973748207,0.271421998739243,0.958925545215607,0.274746268987656,0.549388289451599,0.789105176925659,0.183646157383919,0.213717266917229,0.959478497505188,0.183646157383919,0.213717266917229,0.959478497505188,0.274746268987656,0.549388289451599,0.789105176925659,0.659283638000488,0.56208461523056,0.499405652284622,0.659731268882751,0.252948880195618,0.70765209197998,0.891434013843536,0.447212874889374,-0.0731168016791344,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.889242053031921,-0.13137923181057,0.438164442777634,0.648516714572906,0.651950538158417,0.392920613288879,0.299544423818588,0.682939231395721,0.666233539581299,0.325509399175644,0.684422254562378,0.652387738227844,0.31501841545105,0.615055680274963,0.722820818424225,0.273056983947754,0.564899086952209,0.778671264648438,0.438032209873199,0.893748044967651,0.0966554135084152,0.384984284639359,0.917665719985962,0.0983701795339584,0.325509399175644,0.684422254562378,0.652387738227844,0.299544423818588,0.682939231395721,0.666233539581299,0.367568165063858,0.757281005382538,-0.539832472801209,0.148073747754097,0.745845675468445,-0.649452328681946,0.384984284639359,0.917665719985962,0.0983701795339584,0.438032209873199,0.893748044967651,0.0966554135084152,0.0682389214634895,0.656387150287628,0.751331746578217,0.0630034655332565,0.605371952056885,0.793445229530334, -0.103646658360958,0.632546961307526,0.767555713653564,0.0415897369384766,0.750063896179199,0.660056412220001,-0.103646658360958,0.632546961307526,0.767555713653564,0.198797062039375,0.642942130565643,0.739665627479553,0.250419557094574,0.807709574699402,0.533755779266357,0.0415897369384766,0.750063896179199,0.660056412220001,-0.0329985395073891,0.983319759368896,0.178866878151894,0.105207018554211,0.966200411319733,0.235347032546997,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0476450361311436,0.994988679885864,-0.0879064798355103,-0.00971746817231178,0.864930868148804,-0.501796960830688,-0.335044384002686,0.0369866825640202,-0.941476106643677,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0859579145908356,0.475804299116135,-0.875340759754181,0.500678837299347,-0.355485200881958,-0.789272427558899,0.587996542453766,-0.370855212211609,-0.718836843967438,0.550657391548157,0.552472710609436,-0.625739872455597,0.454949915409088,0.569741904735565,-0.6844083070755,-7.2909109860575e-009,0.660060167312622,0.751212775707245,0.042865764349699,0.703626394271851,0.709275960922241,0.00949578825384378,0.0594539344310761,0.998185873031616,0.00678820535540581,0.00935708172619343,0.999933183193207,0.042865764349699,0.703626394271851,0.709275960922241,0.404132395982742,0.670274078845978,0.622422397136688,0.233477383852005,0.295218259096146,0.926463425159454,0.00949578825384378,0.0594539344310761,0.998185873031616,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.00971746817231178,0.864930868148804,-0.501796960830688,-0.0591709204018116,0.578005433082581,-0.813884854316711, 0.0859579145908356,0.475804299116135,-0.875340759754181,0.0859579145908356,0.475804299116135,-0.875340759754181,-0.0591709204018116,0.578005433082581,-0.813884854316711,-0.187019199132919,0.292121440172195,-0.937917292118073,0.0385239869356155,0.185332536697388,-0.981920421123505,0.85130912065506,-0.28415909409523,-0.441051483154297,0.751560986042023,-0.51889967918396,-0.407307237386703,0.926999032497406,-0.273295104503632,0.256870836019516,0.934587121009827,-0.0746875330805779,0.347805470228195,0.98869800567627,0.0949656590819359,0.116007700562477,0.997147977352142,0.063211515545845,-0.0412334688007832,0.81435614824295,-0.302029103040695,-0.495582967996597,0.95084285736084,-0.116525217890739,-0.286914199590683,0.95027631521225,0.169706359505653,0.261102795600891,0.997147977352142,0.063211515545845,-0.0412334688007832,0.961808860301971,0.241085827350616,0.129620164632797,0.88108503818512,0.403870642185211,0.246125221252441,0.932883560657501,0.00894892401993275,-0.36006686091423,0.88943737745285,-0.310296326875687,-0.335585117340088,0.933888673782349,-0.271616876125336,-0.232542887330055,0.97384238243103,-0.111237548291683,-0.198134258389473,0.958027005195618,0.285412758588791,-0.0269038528203964,0.930458664894104,-0.278987765312195,0.237513080239296,0.932736575603485,0.169303506612778,0.31833752989769,0.883106589317322,0.432061642408371,0.182881161570549,0.659731268882751,0.252948880195618,0.70765209197998,0.853261947631836,-0.0267263799905777,0.520797252655029,0.547626852989197,-0.143319010734558,0.824356973171234,0.183646157383919,0.213717266917229,0.959478497505188,0.434262931346893,0.0580337457358837,0.898914754390717,0.636708438396454,0.429240256547928,0.640589714050293,0.4572993516922,0.58682519197464,0.668216645717621,0.291518121957779,0.153290659189224,0.944202899932861,0.547626852989197,-0.143319010734558,0.824356973171234,0.629741132259369,-0.543165504932404,0.555335402488709,0.369285374879837,-0.387989014387131,0.844448208808899,0.344554513692856,-0.157719656825066,0.925422430038452,0.751155555248261,0.608797609806061,0.255207538604736, 0.573260188102722,0.776374936103821,0.261944144964218,0.4572993516922,0.58682519197464,0.668216645717621,0.636708438396454,0.429240256547928,0.640589714050293,0.930458664894104,-0.278987765312195,0.237513080239296,0.958027005195618,0.285412758588791,-0.0269038528203964,0.983769476413727,0.170430228114128,-0.0561354644596577,0.97384238243103,-0.111237548291683,-0.198134258389473,0.88108503818512,0.403870642185211,0.246125221252441,0.883106589317322,0.432061642408371,0.182881161570549,0.932736575603485,0.169303506612778,0.31833752989769,0.95027631521225,0.169706359505653,0.261102795600891,0.415907889604568,-0.581008851528168,-0.699606537818909,0.81435614824295,-0.302029103040695,-0.495582967996597,0.997147977352142,0.063211515545845,-0.0412334688007832,0.751560986042023,-0.51889967918396,-0.407307237386703,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.523119628429413,-0.252469837665558,-0.814005434513092,0.81435614824295,-0.302029103040695,-0.495582967996597,0.415907889604568,-0.581008851528168,-0.699606537818909,-0.362747877836227,-0.08218814432621,-0.928255915641785,0.315108418464661,-0.203955173492432,-0.926881313323975,0.523119628429413,-0.252469837665558,-0.814005434513092,-0.0618164576590061,-0.231827840209007,-0.970790684223175,0.799426317214966,-0.355103880167007,0.484581023454666,0.926999032497406,-0.273295104503632,0.256870836019516,0.95027631521225,0.169706359505653,0.261102795600891,0.932736575603485,0.169303506612778,0.31833752989769,0.878222644329071,-0.435990631580353,0.196563258767128,0.853261947631836,-0.0267263799905777,0.520797252655029,0.993755042552948,-0.10124122351408,0.0469168499112129,0.88943737745285,-0.310296326875687,-0.335585117340088,0.369285374879837,-0.387989014387131,0.844448208808899,0.434262931346893,0.0580337457358837,0.898914754390717,0.291518121957779,0.153290659189224,0.944202899932861,0.344554513692856,-0.157719656825066,0.925422430038452,0.183646157383919,0.213717266917229,0.959478497505188,0.547626852989197,-0.143319010734558,0.824356973171234,0.344554513692856,-0.157719656825066,0.925422430038452, -0.10020349919796,0.182739198207855,0.978041768074036,0.763394236564636,0.627238869667053,-0.154274553060532,0.51531445980072,0.84699958562851,-0.130547553300858,0.573260188102722,0.776374936103821,0.261944144964218,0.751155555248261,0.608797609806061,0.255207538604736,0.631870806217194,0.478121697902679,-0.61003190279007,0.352353453636169,0.709057629108429,-0.610806286334991,0.51531445980072,0.84699958562851,-0.130547553300858,0.763394236564636,0.627238869667053,-0.154274553060532,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.315108418464661,-0.203955173492432,-0.926881313323975,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.187019199132919,0.292121440172195,-0.937917292118073,0.198803246021271,0.240951344370842,-0.949957728385925,0.206161767244339,-0.0580398291349411,-0.976795136928558,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.493055760860443,0.288357526063919,-0.820820271968842,0.235302045941353,0.454530268907547,-0.859089732170105,0.352353453636169,0.709057629108429,-0.610806286334991,0.631870806217194,0.478121697902679,-0.61003190279007,0.491784423589706,0.100257873535156,-0.864925682544708,0.198803246021271,0.240951344370842,-0.949957728385925,0.235302045941353,0.454530268907547,-0.859089732170105,0.493055760860443,0.288357526063919,-0.820820271968842,0.629741132259369,-0.543165504932404,0.555335402488709,0.547626852989197,-0.143319010734558,0.824356973171234,0.853261947631836,-0.0267263799905777,0.520797252655029,0.878222644329071,-0.435990631580353,0.196563258767128,0.0895038321614265,0.749099910259247,0.65638279914856,-0.0346120446920395,0.37646210193634,0.9257852435112,0.291518121957779,0.153290659189224,0.944202899932861,0.4572993516922,0.58682519197464,0.668216645717621,0.0895038321614265,0.749099910259247,0.65638279914856,0.4572993516922,0.58682519197464,0.668216645717621,0.573260188102722,0.776374936103821,0.261944144964218,0.105207018554211,0.966200411319733,0.235347032546997,0.344554513692856,-0.157719656825066,0.925422430038452, 0.291518121957779,0.153290659189224,0.944202899932861,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.10020349919796,0.182739198207855,0.978041768074036,0.105207018554211,0.966200411319733,0.235347032546997,0.573260188102722,0.776374936103821,0.261944144964218,0.51531445980072,0.84699958562851,-0.130547553300858,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.0476450361311436,0.994988679885864,-0.0879064798355103,0.51531445980072,0.84699958562851,-0.130547553300858,0.352353453636169,0.709057629108429,-0.610806286334991,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.594084918498993,-0.202006503939629,-0.778624713420868,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.198803246021271,0.240951344370842,-0.949957728385925,0.491784423589706,0.100257873535156,-0.864925682544708,-0.00971746817231178,0.864930868148804,-0.501796960830688,0.352353453636169,0.709057629108429,-0.610806286334991,0.235302045941353,0.454530268907547,-0.859089732170105,-0.0591709204018116,0.578005433082581,-0.813884854316711,-0.0591709204018116,0.578005433082581,-0.813884854316711,0.235302045941353,0.454530268907547,-0.859089732170105,0.198803246021271,0.240951344370842,-0.949957728385925,-0.187019199132919,0.292121440172195,-0.937917292118073,0.834282159805298,-0.0577300190925598,0.548307001590729,0.993755042552948,-0.10124122351408,0.0469168499112129,0.853261947631836,-0.0267263799905777,0.520797252655029,0.659731268882751,0.252948880195618,0.70765209197998,0.834282159805298,-0.0577300190925598,0.548307001590729,0.858235716819763,-0.482136696577072,0.175999104976654,0.933888673782349,-0.271616876125336,-0.232542887330055,0.993755042552948,-0.10124122351408,0.0469168499112129,0.858235716819763,-0.482136696577072,0.175999104976654,0.727367699146271,-0.668511748313904,0.15501070022583,0.97384238243103,-0.111237548291683,-0.198134258389473,0.933888673782349,-0.271616876125336,-0.232542887330055,0.789399027824402,-0.501962423324585,0.353387653827667,0.930458664894104,-0.278987765312195,0.237513080239296,0.97384238243103,-0.111237548291683,-0.198134258389473, 0.727367699146271,-0.668511748313904,0.15501070022583,0.751560986042023,-0.51889967918396,-0.407307237386703,0.997147977352142,0.063211515545845,-0.0412334688007832,0.95027631521225,0.169706359505653,0.261102795600891,0.926999032497406,-0.273295104503632,0.256870836019516,0.523119628429413,-0.252469837665558,-0.814005434513092,0.786963045597076,-0.207125172019005,-0.581195652484894,0.95084285736084,-0.116525217890739,-0.286914199590683,0.81435614824295,-0.302029103040695,-0.495582967996597,0.786963045597076,-0.207125172019005,-0.581195652484894,0.523119628429413,-0.252469837665558,-0.814005434513092,0.315108418464661,-0.203955173492432,-0.926881313323975,0.708127498626709,-0.297497063875198,-0.640352189540863,0.708127498626709,-0.297497063875198,-0.640352189540863,0.315108418464661,-0.203955173492432,-0.926881313323975,0.206161767244339,-0.0580398291349411,-0.976795136928558,0.594084918498993,-0.202006503939629,-0.778624713420868,0.901673018932343,-0.243753165006638,-0.357169687747955,0.911918580532074,-0.233281582593918,-0.33761540055275,0.98511666059494,-0.171194240450859,-0.0154188685119152,0.891434013843536,0.447212874889374,-0.0731168016791344,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0261680763214827,0.194867521524429,-0.980480432510376,0.181251630187035,0.380190223455429,-0.906974792480469,0.0293854102492332,0.448770761489868,-0.893163621425629,0.0293854102492332,0.448770761489868,-0.893163621425629,0.181251630187035,0.380190223455429,-0.906974792480469,0.316321402788162,0.603275775909424,-0.732119560241699,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0105779552832246,0.0432977452874184,0.99900621175766,-0.0284342020750046,0.0239462200552225,0.999308824539185,0.0116106020286679,0.109513640403748,0.993917465209961,0.025994973257184,0.100541830062866,0.99459320306778,0.051253791898489,0.460094302892685,0.886389493942261,-0.169371664524078,0.433557659387589,0.88506555557251,-0.103646658360958,0.632546961307526,0.767555713653564,0.0630034655332565,0.605371952056885,0.793445229530334, 0.400240421295166,-0.835451424121857,-0.376601278781891,0.961808860301971,0.241085827350616,0.129620164632797,0.98869800567627,0.0949656590819359,0.116007700562477,0.21975277364254,-0.661429107189178,-0.717091500759125,0.21975277364254,-0.661429107189178,-0.717091500759125,0.98869800567627,0.0949656590819359,0.116007700562477,0.95084285736084,-0.116525217890739,-0.286914199590683,0.379243552684784,-0.345731914043427,-0.858279526233673,0.983769476413727,0.170430228114128,-0.0561354644596577,0.600287616252899,-0.73423707485199,0.317097216844559,0.900146186351776,-0.397185921669006,-0.178830027580261,0.932883560657501,0.00894892401993275,-0.36006686091423,0.883106589317322,0.432061642408371,0.182881161570549,0.971705734729767,0.10692148655653,0.21060810983181,0.998818516731262,0.0184048507362604,0.0449758432805538,0.958027005195618,0.285412758588791,-0.0269038528203964,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.369285374879837,-0.387989014387131,0.844448208808899,0.629741132259369,-0.543165504932404,0.555335402488709,0.232206523418427,-0.020738473162055,0.972445428371429,0.369285374879837,-0.387989014387131,0.844448208808899,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.201975762844086,-0.339365005493164,0.918714940547943,0.636708438396454,0.429240256547928,0.640589714050293,0.468301683664322,0.50049239397049,0.728148937225342,0.654108226299286,0.695117294788361,0.298252135515213,0.751155555248261,0.608797609806061,0.255207538604736,0.201975762844086,-0.339365005493164,0.918714940547943,-0.0231866482645273,-0.662597954273224,0.748616278171539,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.296016186475754,0.207150265574455,0.932450115680695,0.410484403371811,-0.832323789596558,0.372477740049362,0.88943737745285,-0.310296326875687,-0.335585117340088,0.900146186351776,-0.397185921669006,-0.178830027580261,0.600287616252899,-0.73423707485199,0.317097216844559,-0.75411182641983,-0.632700145244598,0.176084950566292,0.245737388730049,-0.81788432598114,0.52026754617691, 0.280021280050278,-0.723065078258514,0.631478428840637,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.0981862172484398,-0.372313976287842,0.922898590564728,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.80677717924118,-0.297363102436066,-0.510573983192444,0.21975277364254,-0.661429107189178,-0.717091500759125,0.379243552684784,-0.345731914043427,-0.858279526233673,-0.418209999799728,-0.452997386455536,0.787333309650421,0.600287616252899,-0.73423707485199,0.317097216844559,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.80677717924118,-0.297363102436066,-0.510573983192444,-0.446602612733841,-0.102232590317726,-0.888872683048248,-0.432995676994324,-0.138490244746208,-0.890693664550781,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.80677717924118,-0.297363102436066,-0.510573983192444,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.760693609714508,-0.63129860162735,-0.151021003723145,0.400240421295166,-0.835451424121857,-0.376601278781891,0.245737388730049,-0.81788432598114,0.52026754617691,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.755255520343781,-0.470546215772629,0.456262409687042,0.600287616252899,-0.73423707485199,0.317097216844559,0.245737388730049,-0.81788432598114,0.52026754617691,0.600287616252899,-0.73423707485199,0.317097216844559,0.998818516731262,0.0184048507362604,0.0449758432805538,0.971705734729767,0.10692148655653,0.21060810983181,0.883106589317322,0.432061642408371,0.182881161570549,0.88108503818512,0.403870642185211,0.246125221252441,0.963078618049622,0.14069077372551,0.229533597826958,0.971705734729767,0.10692148655653,0.21060810983181,0.280021280050278,-0.723065078258514,0.631478428840637,0.245737388730049,-0.81788432598114,0.52026754617691,0.971705734729767,0.10692148655653,0.21060810983181,0.963078618049622,0.14069077372551,0.229533597826958, -0.74693363904953,-0.662334084510803,0.0583409406244755,0.280021280050278,-0.723065078258514,0.631478428840637,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.760693609714508,-0.63129860162735,-0.151021003723145,0.468301683664322,0.50049239397049,0.728148937225342,0.619435131549835,0.287277430295944,0.730596840381622,0.821134924888611,0.497984498739243,0.278834909200668,0.654108226299286,0.695117294788361,0.298252135515213,0.468301683664322,0.50049239397049,0.728148937225342,0.434262931346893,0.0580337457358837,0.898914754390717,0.232206523418427,-0.020738473162055,0.972445428371429,0.619435131549835,0.287277430295944,0.730596840381622,0.201975762844086,-0.339365005493164,0.918714940547943,0.663583517074585,0.109266623854637,0.740079581737518,0.619435131549835,0.287277430295944,0.730596840381622,0.232206523418427,-0.020738473162055,0.972445428371429,0.814588725566864,0.377569645643234,-0.440325260162354,0.711495399475098,0.476572155952454,-0.516384780406952,0.814492523670197,0.578000962734222,-0.0501683428883553,0.904258787631989,0.426958590745926,0.00473785446956754,0.751155555248261,0.608797609806061,0.255207538604736,0.654108226299286,0.695117294788361,0.298252135515213,0.654076218605042,0.750132322311401,-0.097395233809948,0.763394236564636,0.627238869667053,-0.154274553060532,0.711495399475098,0.476572155952454,-0.516384780406952,0.814588725566864,0.377569645643234,-0.440325260162354,0.594970345497131,0.240510985255241,-0.766918957233429,0.552935898303986,0.244290605187416,-0.796607792377472,0.552935898303986,0.244290605187416,-0.796607792377472,0.365138918161392,0.402016133069992,-0.83967649936676,0.52654629945755,0.6285120844841,-0.572469711303711,0.711495399475098,0.476572155952454,-0.516384780406952,0.457004487514496,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.379243552684784,-0.345731914043427,-0.858279526233673,0.367359757423401,-0.19918592274189,-0.908499717712402,0.619435131549835,0.287277430295944,0.730596840381622,0.663583517074585,0.109266623854637,0.740079581737518, 0.889924466609955,0.362089574337006,0.277354598045349,0.821134924888611,0.497984498739243,0.278834909200668,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.677714884281158,-0.638366103172302,0.364953815937042,0.530508995056152,-0.19520378112793,0.824897408485413,0.452383905649185,-0.0666286796331406,0.889330863952637,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.167113959789276,0.136682227253914,0.976417362689972,0.421373724937439,0.10162215679884,0.901175439357758,0.170562490820885,-0.154649093747139,0.97313517332077,-0.400625139474869,-0.141950860619545,0.905179262161255,0.0310389213263988,0.339698702096939,0.940021991729736,0.487773865461349,0.149537533521652,0.860066950321198,0.421373724937439,0.10162215679884,0.901175439357758,-0.167113959789276,0.136682227253914,0.976417362689972,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.273258209228516,-0.188740387558937,-0.943242788314819,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.442572265863419,-0.578949928283691,-0.684796929359436, -0.359539449214935,-0.751623332500458,-0.552986204624176,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.359539449214935,-0.751623332500458,-0.552986204624176,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.400625139474869,-0.141950860619545,0.905179262161255,0.170562490820885,-0.154649093747139,0.97313517332077,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.708291888237,-0.455330967903137,0.539440810680389,0.713517069816589,0.700637459754944,-0.000777124951127917,0.675231993198395,0.699040055274963,-0.235382169485092,0.372105628252029,0.872971594333649,0.315369695425034,0.20168174803257,0.693581879138947,0.691569745540619,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.179948955774307,0.305097907781601,0.935165047645569,-0.167113959789276,0.136682227253914,0.976417362689972,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.179948955774307,0.305097907781601,0.935165047645569,0.181594237685204,0.605878710746765,0.774554371833801,0.467824161052704,0.695085167884827,0.545891225337982,-0.0883399024605751,0.440414160490036,0.89343798160553,0.727736592292786,0.600477695465088,0.331400126218796,0.713517069816589,0.700637459754944,-0.000777124951127917,0.20168174803257,0.693581879138947,0.691569745540619,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.361584514379501,0.504137456417084,0.78428441286087,-0.214763179421425,0.201751604676247,0.955600917339325,-0.188908159732819,-0.0821763500571251,0.978550314903259,0.70020192861557,0.436750024557114,0.564771354198456,0.727736592292786,0.600477695465088,0.331400126218796,0.361584514379501,0.504137456417084,0.78428441286087,0.445416361093521,0.291170030832291,0.846654772758484,0.633797287940979,0.754054367542267,-0.172345638275146, 0.755062222480774,0.655636370182037,0.00468770461156964,0.704874277114868,0.496488779783249,-0.506607472896576,0.571536600589752,0.54747611284256,-0.611241221427917,0.70020192861557,0.436750024557114,0.564771354198456,0.587356448173523,0.37003019452095,0.719784736633301,0.420910388231277,0.458904504776001,0.782458364963531,0.598974168300629,0.55623596906662,0.576048195362091,0.713795185089111,0.560950756072998,0.419321686029434,0.758696973323822,0.616848468780518,0.209467962384224,0.621278166770935,0.634226977825165,0.460184365510941,0.626114845275879,0.552237331867218,0.550467252731323,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.318814963102341,0.117576964199543,-0.94049596786499,0.626918852329254,0.478092342615128,-0.615142643451691,0.752733170986176,0.386990457773209,-0.532570421695709,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.699702382087708,-0.709872841835022,0.080604575574398,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.11764945089817,0.119960054755211,0.985783040523529,0.420910388231277,0.458904504776001,0.782458364963531,0.587356448173523,0.37003019452095,0.719784736633301,0.632134556770325,0.566209673881531,0.52897310256958,0.713795185089111,0.560950756072998,0.419321686029434,0.626114845275879,0.552237331867218,0.550467252731323,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.752733170986176,0.386990457773209,-0.532570421695709,0.833262026309967,0.342827558517456,-0.433755338191986,-0.16471865773201,-0.673515558242798,-0.720586240291595,0.25180572271347,-0.338099181652069,-0.906798124313354,0.204112648963928,-0.444034606218338,-0.872451305389404,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.592759191989899,-0.802146971225739,-0.0720886588096619, -0.617271184921265,-0.786646604537964,0.0127817206084728,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.173014774918556,0.150903835892677,0.973290264606476,0.284897238016129,0.421358793973923,0.860982179641724,0.315255045890808,0.464517712593079,0.827549159526825,-0.24175851047039,0.0892980098724365,0.966218769550323,0.575458467006683,0.549589157104492,0.605639576911926,0.5494784116745,0.570390999317169,0.610514163970947,0.632134556770325,0.566209673881531,0.52897310256958,0.611269116401672,0.567333459854126,0.551799595355988,0.413307309150696,-0.19144606590271,-0.890239000320435,0.833262026309967,0.342827558517456,-0.433755338191986,0.827770292758942,0.364258110523224,-0.426746338605881,0.39981883764267,-0.144185781478882,-0.905182480812073,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.123677581548691,-0.415960758924484,-0.900933146476746,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.471450448036194,-0.245001286268234,0.847176969051361,0.553665459156036,0.525177180767059,-0.646253407001495,0.626918852329254,0.478092342615128,-0.615142643451691,0.318814963102341,0.117576964199543,-0.94049596786499,0.330627292394638,0.250829428434372,-0.909818768501282, -0.16471865773201,-0.673515558242798,-0.720586240291595,-0.350332707166672,-0.557033061981201,-0.752981543540955,0.152081519365311,-0.148781135678291,-0.977105617523193,0.25180572271347,-0.338099181652069,-0.906798124313354,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.37796476483345,-0.602357983589172,-0.703070044517517,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.152081519365311,-0.148781135678291,-0.977105617523193,-0.173014774918556,0.150903835892677,0.973290264606476,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.190007403492928,0.150082901120186,0.970243453979492,0.170904099941254,-0.332066059112549,-0.9276442527771,0.129470959305763,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.622686505317688,-0.240481927990913,0.744600534439087,0.5100998878479,0.534974932670593,0.673498272895813,0.5494784116745,0.570390999317169,0.610514163970947,0.575458467006683,0.549589157104492,0.605639576911926,0.490533232688904,0.463574707508087,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.284897238016129,0.421358793973923,0.860982179641724,-0.173014774918556,0.150903835892677,0.973290264606476,-0.190007403492928,0.150082901120186,0.970243453979492,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.687927067279816,-0.688686609268188,-0.229057043790817, -0.374727010726929,-0.451056748628616,-0.810016989707947,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.350332707166672,-0.557033061981201,-0.752981543540955,-0.476104736328125,-0.838325619697571,-0.265583217144012,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.16471865773201,-0.673515558242798,-0.720586240291595,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477,-0.701685011386871,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.442572265863419,-0.578949928283691,-0.684796929359436,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.524966239929199,0.447477400302887,0.72399890422821,0.154613956809044,0.104744024574757,0.982406854629517,0.452383905649185,-0.0666286796331406,0.889330863952637,0.64373791217804,0.242922231554985,0.725665390491486,0.078959085047245,0.121888175606728,0.989398181438446,0.0298695340752602,0.230346247553825,0.972650170326233,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.178765639662743,-0.712745010852814,0.678260564804077,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.396454155445099,-0.508855581283569,0.764127016067505,-0.178765639662743,-0.712745010852814,0.678260564804077, 0.452383905649185,-0.0666286796331406,0.889330863952637,0.154613956809044,0.104744024574757,0.982406854629517,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.281839609146118,-0.242576912045479,0.92829030752182,0.0771664902567863,0.0724747255444527,0.994380593299866,0.445416361093521,0.291170030832291,0.846654772758484,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.428903788328171,-0.809928238391876,-0.400072306394577,-0.524412930011749,-0.76793509721756,-0.367786258459091,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.256946176290512,-0.0665651634335518,-0.964130580425262,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.457292228937149,0.637990713119507,0.619557559490204,0.600133121013641,0.610116124153137,0.517299294471741,0.543609440326691,0.5921830534935,0.594817638397217,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.529006600379944,0.562984585762024,0.63498067855835,0.543609440326691,0.5921830534935,0.594817638397217,0.315534800291061,0.608373045921326,0.728230714797974,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.727918982505798,-0.682847082614899,-0.0620787553489208, -0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.508835017681122,-0.825367450714111,-0.244653806090355,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.663558781147003,-0.701492488384247,-0.259996235370636,0.0456269159913063,0.337521076202393,-0.940211534500122,0.400274157524109,0.667701542377472,-0.627658545970917,0.577099621295929,0.499205440282822,-0.646335780620575,0.220365136861801,0.161491006612778,-0.961956262588501,0.669646203517914,0.237006261944771,-0.703847944736481,0.523088097572327,0.0727911219000816,-0.849164426326752,0.494590252637863,0.0603402629494667,-0.867029130458832,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.523088097572327,0.0727911219000816,-0.849164426326752,0.669646203517914,0.237006261944771,-0.703847944736481,0.652852237224579,0.393031805753708,-0.647541463375092,0.509894669055939,0.256654620170593,-0.821057736873627,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.0263592731207609,-0.425665766000748,-0.904496490955353,0.0101248463615775,-0.493800461292267,-0.869516313076019,-0.359539449214935,-0.751623332500458,-0.552986204624176,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.351930469274521,0.00348040298558772,-0.936019718647003,0.444862186908722,0.181827828288078,-0.876947104930878,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.494590252637863,0.0603402629494667,-0.867029130458832,0.509894669055939,0.256654620170593,-0.821057736873627,0.652852237224579,0.393031805753708,-0.647541463375092,0.670561790466309,0.450112581253052,-0.589699506759644,0.537330985069275,0.244881898164749,-0.807036757469177, 0.652852237224579,0.393031805753708,-0.647541463375092,0.669646203517914,0.237006261944771,-0.703847944736481,0.781165838241577,0.623325526714325,0.0352878011763096,0.716162204742432,0.693212687969208,0.0810423269867897,0.771716117858887,0.588264167308807,0.241659909486771,0.721818268299103,0.577692627906799,0.381116211414337,0.8706374168396,0.436955988407135,-0.225964426994324,0.833557188510895,0.43537425994873,-0.340046495199203,0.684045433998108,0.607819020748138,0.403283834457397,0.839346766471863,0.531246542930603,-0.115212969481945,0.8706374168396,0.436955988407135,-0.225964426994324,0.721818268299103,0.577692627906799,0.381116211414337,0.170904099941254,-0.332066059112549,-0.9276442527771,0.123677581548691,-0.415960758924484,-0.900933146476746,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.827770292758942,0.364258110523224,-0.426746338605881,0.833576500415802,0.26908865571022,-0.482432901859283,0.474989861249924,-0.106995098292828,-0.873462498188019,0.340121984481812,0.0539852678775787,-0.938830494880676,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.152081519365311,-0.148781135678291,-0.977105617523193,0.213511228561401,-0.0973462760448456,-0.972078502178192,0.214979261159897,-0.17779715359211,-0.96029794216156,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.37796476483345,-0.602357983589172,-0.703070044517517,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.0273940563201904,-0.397710710763931,-0.917101860046387,-0.0263592731207609,-0.425665766000748,-0.904496490955353,-0.43317574262619,-0.754240989685059,-0.493436217308044,-0.428903788328171,-0.809928238391876,-0.400072306394577,0.078959085047245,0.121888175606728,0.989398181438446,0.591853797435761,0.480847299098969,0.646911799907684,0.522614181041718,0.594646036624908,0.610958755016327,0.0298695340752602,0.230346247553825,0.972650170326233,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.432995676994324,-0.138490244746208,-0.890693664550781, -0.286727339029312,-0.249588027596474,-0.924928784370422,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.385445386171341,-0.256175637245178,0.886456966400146,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.744997620582581,-0.490750849246979,-0.451820939779282,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.755255520343781,-0.470546215772629,0.456262409687042,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.0173206701874733,0.471247583627701,0.881830871105194,-0.453907251358032,-0.0319928824901581,0.890474379062653,-0.385445386171341,-0.256175637245178,0.886456966400146,0.0298695340752602,0.230346247553825,0.972650170326233,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.75411182641983,-0.632700145244598,0.176084950566292,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.0456269159913063,0.337521076202393,-0.940211534500122,0.220365136861801,0.161491006612778,-0.961956262588501,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.808014631271362,0.548655688762665,-0.214684262871742,0.814588725566864,0.377569645643234,-0.440325260162354,0.904258787631989,0.426958590745926,0.00473785446956754,0.976709187030792,0.208457589149475,-0.050838902592659,0.814588725566864,0.377569645643234,-0.440325260162354,0.808014631271362,0.548655688762665,-0.214684262871742,0.467050135135651,0.542557895183563,-0.698208510875702,0.594970345497131,0.240510985255241,-0.766918957233429,0.600133121013641,0.610116124153137,0.517299294471741,0.836146891117096,0.398915261030197,0.376463830471039,0.645030558109283,0.393106490373611,0.655288398265839, 0.669920027256012,0.533662140369415,0.516151010990143,0.663583517074585,0.109266623854637,0.740079581737518,0.639394581317902,-0.0537512600421906,0.766997635364532,0.951489508152008,0.185274630784988,0.245644211769104,0.889924466609955,0.362089574337006,0.277354598045349,0.836146891117096,0.398915261030197,0.376463830471039,0.600133121013641,0.610116124153137,0.517299294471741,0.457292228937149,0.637990713119507,0.619557559490204,0.821033596992493,0.463092446327209,0.333840012550354,0.639394581317902,-0.0537512600421906,0.766997635364532,0.645030558109283,0.393106490373611,0.655288398265839,0.836146891117096,0.398915261030197,0.376463830471039,0.951489508152008,0.185274630784988,0.245644211769104,0.594970345497131,0.240510985255241,-0.766918957233429,0.467050135135651,0.542557895183563,-0.698208510875702,0.171164497733116,0.182280600070953,-0.968233704566956,0.457004487514496,0.0586743913590908,-0.887526988983154,0.171164497733116,0.182280600070953,-0.968233704566956,0.467050135135651,0.542557895183563,-0.698208510875702,0.400274157524109,0.667701542377472,-0.627658545970917,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.446602612733841,-0.102232590317726,-0.888872683048248,0.171164497733116,0.182280600070953,-0.968233704566956,0.0456269159913063,0.337521076202393,-0.940211534500122,-0.432995676994324,-0.138490244746208,-0.890693664550781,0.663583517074585,0.109266623854637,0.740079581737518,0.201975762844086,-0.339365005493164,0.918714940547943,0.296016186475754,0.207150265574455,0.932450115680695,0.639394581317902,-0.0537512600421906,0.766997635364532,0.0298695340752602,0.230346247553825,0.972650170326233,0.522614181041718,0.594646036624908,0.610958755016327,0.296016186475754,0.207150265574455,0.932450115680695,-0.0173206701874733,0.471247583627701,0.881830871105194,0.400274157524109,0.667701542377472,-0.627658545970917,0.571531593799591,0.820161521434784,-0.026204576715827,0.712321758270264,0.700732469558716,-0.0396451056003571,0.577099621295929,0.499205440282822,-0.646335780620575,0.763394236564636,0.627238869667053,-0.154274553060532, 0.654076218605042,0.750132322311401,-0.097395233809948,0.52654629945755,0.6285120844841,-0.572469711303711,0.631870806217194,0.478121697902679,-0.61003190279007,0.631870806217194,0.478121697902679,-0.61003190279007,0.52654629945755,0.6285120844841,-0.572469711303711,0.365138918161392,0.402016133069992,-0.83967649936676,0.493055760860443,0.288357526063919,-0.820820271968842,0.765193700790405,0.545681536197662,0.341628700494766,0.472492724657059,0.634560942649841,0.611623287200928,0.712321758270264,0.700732469558716,-0.0396451056003571,0.571531593799591,0.820161521434784,-0.026204576715827,0.472492724657059,0.634560942649841,0.611623287200928,0.578510701656342,0.581528306007385,0.571970403194427,0.781165838241577,0.623325526714325,0.0352878011763096,0.712321758270264,0.700732469558716,-0.0396451056003571,0.578510701656342,0.581528306007385,0.571970403194427,0.461020469665527,0.72527813911438,0.511303961277008,0.716162204742432,0.693212687969208,0.0810423269867897,0.781165838241577,0.623325526714325,0.0352878011763096,0.487773865461349,0.149537533521652,0.860066950321198,0.0310389213263988,0.339698702096939,0.940021991729736,0.315534800291061,0.608373045921326,0.728230714797974,0.528455495834351,0.430389046669006,0.731778681278229,0.523088097572327,0.0727911219000816,-0.849164426326752,0.509894669055939,0.256654620170593,-0.821057736873627,0.444862186908722,0.181827828288078,-0.876947104930878,0.494590252637863,0.0603402629494667,-0.867029130458832,0.464535415172577,0.0843750312924385,-0.881525814533234,0.273258209228516,-0.188740387558937,-0.943242788314819,0.256946176290512,-0.0665651634335518,-0.964130580425262,0.444862186908722,0.181827828288078,-0.876947104930878,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.494590252637863,0.0603402629494667,-0.867029130458832,0.365171790122986,-0.00518579035997391,-0.930925726890564,0.528455495834351,0.430389046669006,0.731778681278229,0.524966239929199,0.447477400302887,0.72399890422821,0.64373791217804,0.242922231554985,0.725665390491486, 0.487773865461349,0.149537533521652,0.860066950321198,0.528455495834351,0.430389046669006,0.731778681278229,0.543609440326691,0.5921830534935,0.594817638397217,0.600953817367554,0.56422370672226,0.566132545471191,0.524966239929199,0.447477400302887,0.72399890422821,0.319102138280869,0.857758343219757,0.403019160032272,0.461020469665527,0.72527813911438,0.511303961277008,0.315534800291061,0.608373045921326,0.728230714797974,-0.151531577110291,0.591902196407318,0.791637539863586,0.652852237224579,0.393031805753708,-0.647541463375092,0.716162204742432,0.693212687969208,0.0810423269867897,0.56834876537323,0.804110050201416,-0.174317732453346,0.670561790466309,0.450112581253052,-0.589699506759644,0.483205556869507,0.452571898698807,-0.749460518360138,0.729157328605652,0.398623704910278,-0.556263148784637,0.598047912120819,0.525615990161896,-0.605034232139587,0.575007021427155,0.477127492427826,-0.664617359638214,0.421373724937439,0.10162215679884,0.901175439357758,0.64373791217804,0.242922231554985,0.725665390491486,0.530508995056152,-0.19520378112793,0.824897408485413,0.170562490820885,-0.154649093747139,0.97313517332077,0.170562490820885,-0.154649093747139,0.97313517332077,0.530508995056152,-0.19520378112793,0.824897408485413,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.179948955774307,0.305097907781601,0.935165047645569,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.28609374165535,0.17817023396492,0.941491186618805,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.708291888237,-0.455330967903137,0.539440810680389,0.976709187030792,0.208457589149475,-0.050838902592659,0.904258787631989,0.426958590745926,0.00473785446956754,0.889924466609955,0.362089574337006,0.277354598045349,0.951489508152008,0.185274630784988,0.245644211769104,0.904258787631989,0.426958590745926,0.00473785446956754, 0.814492523670197,0.578000962734222,-0.0501683428883553,0.821134924888611,0.497984498739243,0.278834909200668,0.889924466609955,0.362089574337006,0.277354598045349,0.319102138280869,0.857758343219757,0.403019160032272,-0.151531577110291,0.591902196407318,0.791637539863586,-0.0883399024605751,0.440414160490036,0.89343798160553,0.467824161052704,0.695085167884827,0.545891225337982,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.677714884281158,-0.638366103172302,0.364953815937042,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.417856335639954,-0.873386740684509,0.250183314085007,-0.11764945089817,0.119960054755211,0.985783040523529,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.684738636016846,-0.554822146892548,0.472551971673965,0.755062222480774,0.655636370182037,0.00468770461156964,0.633797287940979,0.754054367542267,-0.172345638275146,0.75712126493454,0.653194308280945,0.0102259330451488,0.758696973323822,0.616848468780518,0.209467962384224,0.755062222480774,0.655636370182037,0.00468770461156964,0.758696973323822,0.616848468780518,0.209467962384224,0.713795185089111,0.560950756072998,0.419321686029434,0.771716117858887,0.588264167308807,0.241659909486771,0.713795185089111,0.560950756072998,0.419321686029434,0.632134556770325,0.566209673881531,0.52897310256958, 0.721818268299103,0.577692627906799,0.381116211414337,0.771716117858887,0.588264167308807,0.241659909486771,0.684045433998108,0.607819020748138,0.403283834457397,0.721818268299103,0.577692627906799,0.381116211414337,0.632134556770325,0.566209673881531,0.52897310256958,0.5494784116745,0.570390999317169,0.610514163970947,0.704874277114868,0.496488779783249,-0.506607472896576,0.833557188510895,0.43537425994873,-0.340046495199203,0.803746700286865,0.434959292411804,-0.405957728624344,0.673612415790558,0.488613814115524,-0.554529428482056,0.853050053119659,0.432356089353561,-0.292187958955765,0.803746700286865,0.434959292411804,-0.405957728624344,0.833557188510895,0.43537425994873,-0.340046495199203,0.8706374168396,0.436955988407135,-0.225964426994324,0.8706374168396,0.436955988407135,-0.225964426994324,0.839346766471863,0.531246542930603,-0.115212969481945,0.811299920082092,0.393999367952347,-0.431922435760498,0.853050053119659,0.432356089353561,-0.292187958955765,0.839346766471863,0.531246542930603,-0.115212969481945,0.862522184848785,0.47530135512352,-0.17362080514431,0.830814361572266,0.356648951768875,-0.427257508039474,0.811299920082092,0.393999367952347,-0.431922435760498,0.626114845275879,0.552237331867218,0.550467252731323,0.621278166770935,0.634226977825165,0.460184365510941,0.598974168300629,0.55623596906662,0.576048195362091,0.420910388231277,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.611269116401672,0.567333459854126,0.551799595355988,0.626114845275879,0.552237331867218,0.550467252731323,0.420910388231277,0.458904504776001,0.782458364963531,0.315255045890808,0.464517712593079,0.827549159526825,0.284897238016129,0.421358793973923,0.860982179641724,0.575458467006683,0.549589157104492,0.605639576911926,0.611269116401672,0.567333459854126,0.551799595355988,0.284897238016129,0.421358793973923,0.860982179641724,0.21572470664978,0.340408891439438,0.915196537971497,0.490533232688904,0.463574707508087,0.73788595199585,0.575458467006683,0.549589157104492,0.605639576911926, 0.293987482786179,-0.0222472082823515,-0.955550312995911,0.340121984481812,0.0539852678775787,-0.938830494880676,0.406537264585495,0.167056277394295,-0.898231387138367,0.391682207584381,0.0344884172081947,-0.919453978538513,0.320780336856842,-0.177296921610832,-0.930411577224731,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.413307309150696,-0.19144606590271,-0.890239000320435,0.184821337461472,-0.38211777806282,-0.905443012714386,0.204352244734764,-0.29480442404747,-0.933450877666473,0.184821337461472,-0.38211777806282,-0.905443012714386,0.413307309150696,-0.19144606590271,-0.890239000320435,0.39981883764267,-0.144185781478882,-0.905182480812073,0.204352244734764,-0.29480442404747,-0.933450877666473,0.39981883764267,-0.144185781478882,-0.905182480812073,0.474989861249924,-0.106995098292828,-0.873462498188019,0.129470959305763,-0.140533372759819,-0.981574058532715,-0.407645702362061,-0.312832653522491,-0.857881546020508,0.129470959305763,-0.140533372759819,-0.981574058532715,0.0502891913056374,0.172818437218666,-0.98366904258728,-0.437055885791779,-0.11311361938715,-0.892293393611908,0.0502891913056374,0.172818437218666,-0.98366904258728,0.139374434947968,0.0775641202926636,-0.98719733953476,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.437055885791779,-0.11311361938715,-0.892293393611908,0.595824003219604,0.198742762207985,-0.778135597705841,0.85837733745575,0.37276965379715,-0.352464318275452,0.84142130613327,0.443432748317719,-0.30883252620697,0.609626173973084,0.347123831510544,-0.712643682956696,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.361765921115875,-0.279954940080643,-0.889241635799408,0.139374434947968,0.0775641202926636,-0.98719733953476,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.424547016620636,-0.828336775302887,-0.365538060665131,0.690612375736237,0.305584073066711,-0.655494391918182, -0.0785726085305214,-0.289755910634995,-0.953869938850403,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.736901640892029,0.310691028833389,-0.600372433662415,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.272565364837646,-0.405919879674912,-0.872317135334015,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.0785726085305214,-0.289755910634995,-0.953869938850403,0.690612375736237,0.305584073066711,-0.655494391918182,0.568666934967041,0.406713992357254,-0.714983642101288,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.353174358606339,-0.401916116476059,-0.844826221466064,0.568666934967041,0.406713992357254,-0.714983642101288,0.67058277130127,0.452658027410507,-0.587724030017853,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.417728811502457,-0.903412997722626,-0.0966832265257835,-0.926164984703064,-0.361916661262512,0.105994082987309,0.633565187454224,0.343504458665848,-0.693253099918365,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.0629069060087204,-0.574297785758972,-0.81622588634491,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.417728811502457,-0.903412997722626,-0.0966832265257835, 0.21460884809494,-0.781227350234985,0.586196959018707,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769,0.163093075156212,0.441786974668503,-0.128134071826935,-0.277867317199707,0.952035427093506,0.21460884809494,-0.781227350234985,0.586196959018707,0.928486943244934,-0.278761386871338,0.24536520242691,0.838517308235168,0.23515185713768,0.491520494222641,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.128134071826935,-0.277867317199707,0.952035427093506,0.874470949172974,0.181272923946381,0.449934005737305,0.221149787306786,-0.755684494972229,0.616468727588654,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.113240525126457,-0.398993462324142,0.909934520721436,0.823110163211823,0.325570344924927,0.465288698673248,0.88580310344696,-0.0711137056350708,0.458580136299133,0.221149787306786,-0.755684494972229,0.616468727588654,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.744133472442627,0.145097494125366,-0.652082920074463,0.728366911411285,0.471724718809128,-0.496948093175888,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.953828155994415,-0.279060304164886,-0.111072786152363,0.779201686382294,0.334656059741974,-0.529952883720398,-0.286078542470932,-0.0728482380509377,-0.955433011054993,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.769174098968506,0.351543009281158,-0.533656001091003,0.11994443833828,-0.617316663265228,-0.77751749753952,-0.383375316858292,-0.909262895584106,-0.162062838673592,-0.94000107049942,-0.321145743131638,-0.115166857838631, -0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828,-0.617316663265228,-0.77751749753952,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.780810236930847,0.338432997465134,-0.525165200233459,0.867587566375732,-0.240597397089005,-0.435206592082977,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.441486179828644,-0.275298207998276,0.853991091251373,0.0104025090113282,-0.818762242794037,0.574038505554199,0.824216485023499,-0.374453365802765,0.42479619383812,0.694519758224487,0.188186302781105,0.694426536560059,-0.441486179828644,-0.275298207998276,0.853991091251373,0.682577550411224,0.201181307435036,0.702576637268066,0.677649199962616,0.231181770563126,0.698102116584778,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.391219317913055,-0.370447516441345,0.842446446418762,0.284337043762207,-0.628438115119934,0.724029004573822,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.391219317913055,-0.370447516441345,0.842446446418762,0.67560875415802,0.409798443317413,0.612876892089844,0.628294765949249,0.216130942106247,0.747350692749023,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.569195508956909,-0.757238268852234,-0.320322901010513,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.569195508956909,-0.757238268852234,-0.320322901010513,0.869658291339874,0.203361555933952,-0.449820637702942,0.874346256256104,0.418091505765915,-0.246410429477692,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.877589702606201,0.353748112916946,-0.323571652173996,0.864371955394745,0.365095496177673,-0.345783799886703,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.000683139485772699,-0.280447483062744,-0.959869146347046, -0.899728536605835,-0.311181008815765,-0.30603089928627,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908,-0.622352182865143,-0.743058264255524,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.246053159236908,-0.622352182865143,-0.743058264255524,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.886669814586639,0.303469926118851,-0.348887741565704,0.927240550518036,-0.288017064332962,-0.239313811063766,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.366940021514893,-0.90958160161972,-0.194977775216103,-0.16863539814949,-0.750330984592438,0.639191269874573,0.669099032878876,-0.368822127580643,0.645195066928864,0.524607241153717,0.204550698399544,0.826405644416809,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844,0.270657926797867,0.835567474365234,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.591978549957275,-0.234647616744041,0.771039485931396,0.484563320875168,0.265936732292175,0.833352267742157,0.460785627365112,0.218516558408737,0.860190212726593,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.460785627365112,0.218516558408737,0.860190212726593,0.853275120258331,-0.0167487524449825,0.521191954612732,0.45549151301384,-0.838008761405945,0.300447642803192,0.853275120258331,-0.0167487524449825,0.521191954612732,0.982857048511505,0.136188626289368,-0.124276459217072,0.437012165784836,-0.816920578479767,-0.376378893852234,0.45549151301384,-0.838008761405945,0.300447642803192,-0.36907297372818,-0.926835656166077,-0.0689988732337952, 0.437012165784836,-0.816920578479767,-0.376378893852234,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.437012165784836,-0.816920578479767,-0.376378893852234,0.982857048511505,0.136188626289368,-0.124276459217072,0.914490401744843,0.386459112167358,-0.119819387793541,0.260752469301224,-0.303326517343521,-0.91651576757431,-0.684952914714813,-0.620533168315887,-0.381808966398239,0.260752469301224,-0.303326517343521,-0.91651576757431,0.258395105600357,-0.170487090945244,-0.950876474380493,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.48573312163353,-0.643503189086914,-0.591580092906952,-0.27993255853653,-0.94170469045639,-0.18662802875042,-0.768858969211578,-0.468379706144333,-0.435288727283478,0.258395105600357,-0.170487090945244,-0.950876474380493,0.48573312163353,-0.643503189086914,-0.591580092906952,0.258395105600357,-0.170487090945244,-0.950876474380493,0.941704988479614,0.318803399801254,-0.107499539852142,0.974766612052917,-0.217580199241638,0.0498894527554512,-0.248893335461617,-0.684883832931519,0.684825658798218,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.768858969211578,-0.468379706144333,-0.435288727283478,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.287435591220856,0.297283440828323,0.910496234893799,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.248893335461617,-0.684883832931519,0.684825658798218,0.527618527412415,-0.248120784759521,0.812437534332275,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.705930113792419,-0.207728907465935,0.677134692668915,0.307352930307388,0.437818199396133,0.844896078109741,0.0841809809207916,0.380945682525635,0.920757293701172,0.0841809809207916,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966, -0.589905083179474,-0.166010066866875,0.790223181247711,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.701657354831696,-0.649943113327026,0.291977494955063,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.183004111051559,-0.709960997104645,0.680047690868378,0.0199296418577433,-0.141455933451653,0.989743947982788,0.323202461004257,0.213562965393066,0.921917021274567,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.392839103937149,-0.172498524188995,0.903283834457397,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.571861207485199,-0.818909585475922,0.0485987178981304,0.735555529594421,-0.454784423112869,-0.502124667167664,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.735555529594421,-0.454784423112869,-0.502124667167664,0.571861207485199,-0.818909585475922,0.0485987178981304,0.567480087280273,-0.0757819190621376,0.819892346858978,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.691691398620605,-0.350874394178391,-0.631229043006897,0.703052580356598,-0.608254909515381,-0.368433207273483,0.691691398620605,-0.350874394178391,-0.631229043006897,0.957826614379883,0.161021858453751,0.237991765141487,0.943321526050568,0.150219425559044,0.295936793088913,0.703052580356598,-0.608254909515381,-0.368433207273483,0.503020167350769,-0.85257089138031,0.141751810908318,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.340475767850876,-0.728246688842773,-0.594754576683044,0.703052580356598,-0.608254909515381,-0.368433207273483,0.703052580356598,-0.608254909515381,-0.368433207273483,0.943321526050568,0.150219425559044,0.295936793088913,0.813535928726196,-0.204780623316765,0.544264793395996, 0.503020167350769,-0.85257089138031,0.141751810908318,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.238497838377953,-0.942050397396088,-0.235923483967781,0.503020167350769,-0.85257089138031,0.141751810908318,0.813535928726196,-0.204780623316765,0.544264793395996,0.245743036270142,0.103760361671448,0.963765621185303,0.0493573248386383,-0.726132214069366,0.685781180858612,0.503020167350769,-0.85257089138031,0.141751810908318,-0.688713252544403,0.550716757774353,0.471577256917953,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.688713252544403,0.550716757774353,0.471577256917953,-0.56933456659317,0.0568463616073132,0.820138216018677,0.245743036270142,0.103760361671448,0.963765621185303,0.0954181030392647,0.715005815029144,0.69257640838623,-0.683180570602417,0.540656507015228,0.490871548652649,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.688713252544403,0.550716757774353,0.471577256917953,-0.688713252544403,0.550716757774353,0.471577256917953,0.0954181030392647,0.715005815029144,0.69257640838623,0.18985190987587,0.684443712234497,0.703912675380707,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725,0.431969791650772,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.683180570602417,0.540656507015228,0.490871548652649,-0.688493669033051,0.582562029361725,0.431969791650772,-0.683180570602417,0.540656507015228,0.490871548652649,0.18985190987587,0.684443712234497,0.703912675380707,0.199689194560051,0.642064154148102,0.740187704563141,-0.701637983322144,0.54883086681366,0.454410493373871,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.688493669033051,0.582562029361725,0.431969791650772, 0.199689194560051,0.642064154148102,0.740187704563141,0.0676127597689629,0.604031264781952,0.7940873503685,-0.701637983322144,0.54883086681366,0.454410493373871,-0.688493669033051,0.582562029361725,0.431969791650772,-0.763029158115387,0.474885076284409,0.438486844301224,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.701637983322144,0.54883086681366,0.454410493373871,-0.60441780090332,0.615803182125092,0.505436062812805,0.0676127597689629,0.604031264781952,0.7940873503685,0.0691882893443108,0.630300760269165,0.773261845111847,-0.60441780090332,0.615803182125092,0.505436062812805,-0.701637983322144,0.54883086681366,0.454410493373871,-0.911145687103271,0.362300097942352,0.196347072720528,-0.505132853984833,0.614961266517639,0.605527400970459,-0.633555710315704,0.25967600941658,0.728817939758301,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.255626708269119,0.402414381504059,0.879043579101563,-0.513125777244568,0.318144857883453,0.797173619270325,-0.519362270832062,0.62650853395462,0.581162631511688,-0.394463092088699,0.67669689655304,0.621675312519073,-0.255626708269119,0.402414381504059,0.879043579101563,-0.190007403492928,0.150082901120186,0.970243453979492,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.513125777244568,0.318144857883453,0.797173619270325,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.340475767850876,-0.728246688842773,-0.594754576683044,-0.238497838377953,-0.942050397396088,-0.235923483967781,-0.765611350536346,-0.587060868740082,0.263056576251984,-0.998530864715576,0.000625132001005113,-0.0541816689074039,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.754156410694122,-0.292590618133545,-0.587910532951355, -0.437055885791779,-0.11311361938715,-0.892293393611908,-0.361765921115875,-0.279954940080643,-0.889241635799408,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.648254215717316,-0.664977610111237,-0.370905965566635,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.18985190987587,0.684443712234497,0.703912675380707,0.0954181030392647,0.715005815029144,0.69257640838623,0.0954181030392647,0.715005815029144,0.69257640838623,0.245743036270142,0.103760361671448,0.963765621185303,0.813535928726196,-0.204780623316765,0.544264793395996,0.943321526050568,0.150219425559044,0.295936793088913,0.957826614379883,0.161021858453751,0.237991765141487,0.567480087280273,-0.0757819190621376,0.819892346858978,0.0676127597689629,0.604031264781952,0.7940873503685,0.199689194560051,0.642064154148102,0.740187704563141,0.0691882893443108,0.630300760269165,0.773261845111847,0.0676127597689629,0.604031264781952,0.7940873503685,0.567480087280273,-0.0757819190621376,0.819892346858978,0.323202461004257,0.213562965393066,0.921917021274567,0.148562759160995,0.479341596364975,0.864962875843048,-0.255626708269119,0.402414381504059,0.879043579101563,-0.394463092088699,0.67669689655304,0.621675312519073,0.0911808460950851,0.673339366912842,0.733689427375793,-0.255626708269119,0.402414381504059,0.879043579101563,0.148562759160995,0.479341596364975,0.864962875843048,0.21572470664978,0.340408891439438,0.915196537971497,-0.190007403492928,0.150082901120186,0.970243453979492,0.842374086380005,0.358164042234421,-0.402646720409393,0.830814361572266,0.356648951768875,-0.427257508039474,0.862522184848785,0.47530135512352,-0.17362080514431,0.908332526683807,0.395048230886459,-0.137364193797112,0.842374086380005,0.358164042234421,-0.402646720409393,0.908332526683807,0.395048230886459,-0.137364193797112,0.909188210964203,0.403158754110336,-0.104114137589931, 0.822202026844025,0.427274346351624,-0.376059085130692,0.899213671684265,0.427792370319366,0.0916977524757385,0.910323619842529,0.411990493535995,0.0396831221878529,0.905055105686188,0.328626185655594,-0.269963204860687,0.922886550426483,0.384252488613129,-0.0251074023544788,0.922377347946167,0.359061807394028,-0.142459228634834,0.960252404212952,0.207041427493095,0.18721416592598,0.88580310344696,-0.0711137056350708,0.458580136299133,0.894895136356354,0.433114320039749,-0.107586048543453,0.922377347946167,0.359061807394028,-0.142459228634834,0.894895136356354,0.433114320039749,-0.107586048543453,0.690612375736237,0.305584073066711,-0.655494391918182,0.820404410362244,0.42123407125473,-0.386650294065475,0.190256670117378,0.381372839212418,0.904630959033966,0.693649888038635,0.505129396915436,0.513511538505554,0.768445134162903,0.434675455093384,0.469626784324646,0.394909024238586,0.532412230968475,0.748721599578857,0.307352930307388,0.437818199396133,0.844896078109741,0.272435218095779,0.357738167047501,0.893197894096375,0.927422702312469,0.341609179973602,-0.152283608913422,0.914490401744843,0.386459112167358,-0.119819387793541,0.251297831535339,0.359561949968338,0.89864593744278,0.287435591220856,0.297283440828323,0.910496234893799,0.941704988479614,0.318803399801254,-0.107499539852142,0.92225056886673,0.365326255559921,-0.126453906297684,0.287435591220856,0.297283440828323,0.910496234893799,0.527618527412415,-0.248120784759521,0.812437534332275,0.974766612052917,-0.217580199241638,0.0498894527554512,0.941704988479614,0.318803399801254,-0.107499539852142,0.646180808544159,0.374157816171646,0.665173888206482,0.460785627365112,0.218516558408737,0.860190212726593,0.820957541465759,0.472796261310577,0.320144385099411,0.868437707424164,0.397741049528122,0.296003401279449,0.834237515926361,0.296865254640579,0.464670658111572,0.910323619842529,0.411990493535995,0.0396831221878529,0.899213671684265,0.427792370319366,0.0916977524757385,0.890609622001648,0.401651859283447,0.213284432888031,0.503586828708649,0.359971582889557,0.785379409790039, 0.478091299533844,0.270657926797867,0.835567474365234,0.877589702606201,0.353748112916946,-0.323571652173996,0.874346256256104,0.418091505765915,-0.246410429477692,0.484563320875168,0.265936732292175,0.833352267742157,0.864371955394745,0.365095496177673,-0.345783799886703,0.877589702606201,0.353748112916946,-0.323571652173996,0.478091299533844,0.270657926797867,0.835567474365234,0.484563320875168,0.265936732292175,0.833352267742157,0.524607241153717,0.204550698399544,0.826405644416809,0.886669814586639,0.303469926118851,-0.348887741565704,0.864371955394745,0.365095496177673,-0.345783799886703,0.524607241153717,0.204550698399544,0.826405644416809,0.669099032878876,-0.368822127580643,0.645195066928864,0.927240550518036,-0.288017064332962,-0.239313811063766,0.886669814586639,0.303469926118851,-0.348887741565704,0.853837490081787,0.519237220287323,0.0367999672889709,0.744133472442627,0.145097494125366,-0.652082920074463,0.905055105686188,0.328626185655594,-0.269963204860687,0.910323619842529,0.411990493535995,0.0396831221878529,0.853837490081787,0.519237220287323,0.0367999672889709,0.910323619842529,0.411990493535995,0.0396831221878529,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.769174098968506,0.351543009281158,-0.533656001091003,0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844,0.677649199962616,0.231181770563126,0.698102116584778,0.694519758224487,0.188186302781105,0.694426536560059,0.780810236930847,0.338432997465134,-0.525165200233459,0.779201686382294,0.334656059741974,-0.529952883720398,0.682577550411224,0.201181307435036,0.702576637268066,0.867587566375732,-0.240597397089005,-0.435206592082977,0.780810236930847,0.338432997465134,-0.525165200233459,0.694519758224487,0.188186302781105,0.694426536560059,0.824216485023499,-0.374453365802765,0.42479619383812,0.838517308235168,0.23515185713768,0.491520494222641,0.623998522758484,0.368696242570877,-0.68897670507431,0.67058277130127,0.452658027410507,-0.587724030017853, 0.823110163211823,0.325570344924927,0.465288698673248,0.621371865272522,0.365546494722366,-0.6930171251297,0.623998522758484,0.368696242570877,-0.68897670507431,0.838517308235168,0.23515185713768,0.491520494222641,0.874470949172974,0.181272923946381,0.449934005737305,0.882170557975769,0.163093075156212,0.441786974668503,0.633565187454224,0.343504458665848,-0.693253099918365,0.621371865272522,0.365546494722366,-0.6930171251297,0.874470949172974,0.181272923946381,0.449934005737305,0.768445134162903,0.434675455093384,0.469626784324646,0.693649888038635,0.505129396915436,0.513511538505554,0.982857048511505,0.136188626289368,-0.124276459217072,0.936653733253479,0.265634030103683,0.228294312953949,0.609626173973084,0.347123831510544,-0.712643682956696,0.139374434947968,0.0775641202926636,-0.98719733953476,0.0502891913056374,0.172818437218666,-0.98366904258728,0.595824003219604,0.198742762207985,-0.778135597705841,0.218467608094215,-0.0307074077427387,-0.975360929965973,0.139374434947968,0.0775641202926636,-0.98719733953476,0.609626173973084,0.347123831510544,-0.712643682956696,0.736901640892029,0.310691028833389,-0.600372433662415,0.366583049297333,0.495457142591476,0.787489116191864,0.340076804161072,0.586851418018341,0.734815061092377,0.39249575138092,0.576124608516693,0.716957092285156,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.5100998878479,0.534974932670593,0.673498272895813,0.490533232688904,0.463574707508087,0.73788595199585,0.366583049297333,0.495457142591476,0.787489116191864,0.787978947162628,0.441818922758102,0.428818345069885,0.723389148712158,0.50640881061554,0.469316840171814,0.768445134162903,0.434675455093384,0.469626784324646,0.936653733253479,0.265634030103683,0.228294312953949,0.684045433998108,0.607819020748138,0.403283834457397,0.5494784116745,0.570390999317169,0.610514163970947,0.5100998878479,0.534974932670593,0.673498272895813,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879, 0.642198443412781,0.582559704780579,0.498202055692673,0.5100998878479,0.534974932670593,0.673498272895813,0.442981511354446,0.554243564605713,0.70468533039093,0.442981511354446,0.554243564605713,0.70468533039093,0.39249575138092,0.576124608516693,0.716957092285156,0.723389148712158,0.50640881061554,0.469316840171814,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.39249575138092,0.576124608516693,0.716957092285156,0.394909024238586,0.532412230968475,0.748721599578857,0.768445134162903,0.434675455093384,0.469626784324646,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.74693363904953,-0.662334084510803,0.0583409406244755,-0.760693609714508,-0.63129860162735,-0.151021003723145,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.539040088653564,-0.79723459482193,-0.271758705377579,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.510247528553009,-0.860017955303192,-0.00407588528469205,0.351930469274521,0.00348040298558772,-0.936019718647003,0.459090322256088,0.385543048381805,-0.800370275974274,0.406537264585495,0.167056277394295,-0.898231387138367,0.340121984481812,0.0539852678775787,-0.938830494880676,0.330627292394638,0.250829428434372,-0.909818768501282,0.33696186542511,0.354342758655548,-0.87229460477829,0.494146823883057,0.54429703950882,-0.677908360958099,0.553665459156036,0.525177180767059,-0.646253407001495,0.475114166736603,0.274622708559036,-0.835971832275391,0.406537264585495,0.167056277394295,-0.898231387138367,0.459090322256088,0.385543048381805,-0.800370275974274,0.521424174308777,0.414691746234894,-0.745753049850464,0.564947247505188,0.481012016534805,-0.670419335365295,0.571536600589752,0.54747611284256,-0.611241221427917,0.704874277114868,0.496488779783249,-0.506607472896576, 0.673612415790558,0.488613814115524,-0.554529428482056,0.755062222480774,0.655636370182037,0.00468770461156964,0.771716117858887,0.588264167308807,0.241659909486771,0.833557188510895,0.43537425994873,-0.340046495199203,0.704874277114868,0.496488779783249,-0.506607472896576,-0.680057168006897,-0.347443431615829,0.645604610443115,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.617271184921265,-0.786646604537964,0.0127817206084728,-0.647555708885193,-0.75584751367569,0.0967788398265839,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.576924562454224,-0.750419557094574,-0.322534501552582,-0.476104736328125,-0.838325619697571,-0.265583217144012,0.204112648963928,-0.444034606218338,-0.872451305389404,0.320780336856842,-0.177296921610832,-0.930411577224731,0.184821337461472,-0.38211777806282,-0.905443012714386,0.123677581548691,-0.415960758924484,-0.900933146476746,0.319102138280869,0.857758343219757,0.403019160032272,0.467824161052704,0.695085167884827,0.545891225337982,0.357862263917923,0.82249915599823,0.442074358463287,0.56834876537323,0.804110050201416,-0.174317732453346,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.77697879076004,-0.497155666351318,0.386186748743057, 0.483205556869507,0.452571898698807,-0.749460518360138,0.675231993198395,0.699040055274963,-0.235382169485092,0.713517069816589,0.700637459754944,-0.000777124951127917,0.729157328605652,0.398623704910278,-0.556263148784637,0.75712126493454,0.653194308280945,0.0102259330451488,0.729157328605652,0.398623704910278,-0.556263148784637,0.713517069816589,0.700637459754944,-0.000777124951127917,0.727736592292786,0.600477695465088,0.331400126218796,0.598974168300629,0.55623596906662,0.576048195362091,0.75712126493454,0.653194308280945,0.0102259330451488,0.727736592292786,0.600477695465088,0.331400126218796,0.70020192861557,0.436750024557114,0.564771354198456,0.181594237685204,0.605878710746765,0.774554371833801,0.20168174803257,0.693581879138947,0.691569745540619,0.372105628252029,0.872971594333649,0.315369695425034,0.357862263917923,0.82249915599823,0.442074358463287,-0.28609374165535,0.17817023396492,0.941491186618805,-0.214763179421425,0.201751604676247,0.955600917339325,0.20168174803257,0.693581879138947,0.691569745540619,0.181594237685204,0.605878710746765,0.774554371833801,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.214763179421425,0.201751604676247,0.955600917339325,-0.28609374165535,0.17817023396492,0.941491186618805,0.816755056381226,0.501944601535797,0.284539580345154,0.801483035087585,0.569443702697754,0.182643905282021,0.642198443412781,0.582559704780579,0.498202055692673,0.674923956394196,0.549656689167023,0.492295831441879,0.674923956394196,0.549656689167023,0.492295831441879,0.723389148712158,0.50640881061554,0.469316840171814,0.787978947162628,0.441818922758102,0.428818345069885,0.816755056381226,0.501944601535797,0.284539580345154,0.816755056381226,0.501944601535797,0.284539580345154,0.807778179645538,0.493730574846268,0.322062909603119,0.890609622001648,0.401651859283447,0.213284432888031,0.862821519374847,0.482879310846329,0.149554565548897,0.807778179645538,0.493730574846268,0.322062909603119,0.787978947162628,0.441818922758102,0.428818345069885, 0.646180808544159,0.374157816171646,0.665173888206482,0.868437707424164,0.397741049528122,0.296003401279449,0.862821519374847,0.482879310846329,0.149554565548897,0.899213671684265,0.427792370319366,0.0916977524757385,0.922886550426483,0.384252488613129,-0.0251074023544788,0.891873419284821,0.448944300413132,0.0548712648451328,0.909188210964203,0.403158754110336,-0.104114137589931,0.922886550426483,0.384252488613129,-0.0251074023544788,0.960252404212952,0.207041427493095,0.18721416592598,0.922377347946167,0.359061807394028,-0.142459228634834,0.908332526683807,0.395048230886459,-0.137364193797112,0.891873419284821,0.448944300413132,0.0548712648451328,0.922886550426483,0.384252488613129,-0.0251074023544788,0.909188210964203,0.403158754110336,-0.104114137589931,0.891873419284821,0.448944300413132,0.0548712648451328,0.908332526683807,0.395048230886459,-0.137364193797112,0.862522184848785,0.47530135512352,-0.17362080514431,0.801483035087585,0.569443702697754,0.182643905282021,0.922377347946167,0.359061807394028,-0.142459228634834,0.820404410362244,0.42123407125473,-0.386650294065475,0.822202026844025,0.427274346351624,-0.376059085130692,0.909188210964203,0.403158754110336,-0.104114137589931,0.807778179645538,0.493730574846268,0.322062909603119,0.868437707424164,0.397741049528122,0.296003401279449,0.957878828048706,0.257844924926758,-0.126428335905075,0.890609622001648,0.401651859283447,0.213284432888031,0.820957541465759,0.472796261310577,0.320144385099411,0.869658291339874,0.203361555933952,-0.449820637702942,0.957878828048706,0.257844924926758,-0.126428335905075,0.868437707424164,0.397741049528122,0.296003401279449,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.648254215717316,-0.664977610111237,-0.370905965566635,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.66791182756424,-0.591369688510895,-0.451858043670654,-0.507598042488098,-0.818433046340942,-0.269279778003693, -0.671412885189056,-0.393651962280273,-0.627887606620789,-0.407645702362061,-0.312832653522491,-0.857881546020508,-0.437055885791779,-0.11311361938715,-0.892293393611908,-0.754156410694122,-0.292590618133545,-0.587910532951355,0.190256670117378,0.381372839212418,0.904630959033966,0.30104210972786,0.404300183057785,0.863663733005524,-0.392839103937149,-0.172498524188995,0.903283834457397,-0.589905083179474,-0.166010066866875,0.790223181247711,0.0199296418577433,-0.141455933451653,0.989743947982788,-0.392839103937149,-0.172498524188995,0.903283834457397,0.30104210972786,0.404300183057785,0.863663733005524,0.356225103139877,0.46585413813591,0.809989869594574,-0.394463092088699,0.67669689655304,0.621675312519073,-0.60441780090332,0.615803182125092,0.505436062812805,0.0691882893443108,0.630300760269165,0.773261845111847,0.0911808460950851,0.673339366912842,0.733689427375793,0.564947247505188,0.481012016534805,-0.670419335365295,0.553665459156036,0.525177180767059,-0.646253407001495,0.494146823883057,0.54429703950882,-0.677908360958099,0.598047912120819,0.525615990161896,-0.605034232139587,0.673612415790558,0.488613814115524,-0.554529428482056,0.626918852329254,0.478092342615128,-0.615142643451691,0.553665459156036,0.525177180767059,-0.646253407001495,0.564947247505188,0.481012016534805,-0.670419335365295,0.803746700286865,0.434959292411804,-0.405957728624344,0.752733170986176,0.386990457773209,-0.532570421695709,0.626918852329254,0.478092342615128,-0.615142643451691,0.673612415790558,0.488613814115524,-0.554529428482056,0.833262026309967,0.342827558517456,-0.433755338191986,0.752733170986176,0.386990457773209,-0.532570421695709,0.803746700286865,0.434959292411804,-0.405957728624344,0.853050053119659,0.432356089353561,-0.292187958955765,0.853050053119659,0.432356089353561,-0.292187958955765,0.845363795757294,0.50351881980896,-0.178406670689583,0.827770292758942,0.364258110523224,-0.426746338605881,0.833262026309967,0.342827558517456,-0.433755338191986,0.845363795757294,0.50351881980896,-0.178406670689583,0.8753382563591,0.393582403659821,-0.280848383903503, 0.833576500415802,0.26908865571022,-0.482432901859283,0.827770292758942,0.364258110523224,-0.426746338605881,0.595824003219604,0.198742762207985,-0.778135597705841,0.833576500415802,0.26908865571022,-0.482432901859283,0.8753382563591,0.393582403659821,-0.280848383903503,0.85837733745575,0.37276965379715,-0.352464318275452,0.811299920082092,0.393999367952347,-0.431922435760498,0.830814361572266,0.356648951768875,-0.427257508039474,0.8753382563591,0.393582403659821,-0.280848383903503,0.845363795757294,0.50351881980896,-0.178406670689583,0.85837733745575,0.37276965379715,-0.352464318275452,0.8753382563591,0.393582403659821,-0.280848383903503,0.830814361572266,0.356648951768875,-0.427257508039474,0.842374086380005,0.358164042234421,-0.402646720409393,0.85837733745575,0.37276965379715,-0.352464318275452,0.842374086380005,0.358164042234421,-0.402646720409393,0.822202026844025,0.427274346351624,-0.376059085130692,0.84142130613327,0.443432748317719,-0.30883252620697,0.822202026844025,0.427274346351624,-0.376059085130692,0.820404410362244,0.42123407125473,-0.386650294065475,0.736901640892029,0.310691028833389,-0.600372433662415,0.84142130613327,0.443432748317719,-0.30883252620697,0.521424174308777,0.414691746234894,-0.745753049850464,0.33696186542511,0.354342758655548,-0.87229460477829,0.330627292394638,0.250829428434372,-0.909818768501282,0.475114166736603,0.274622708559036,-0.835971832275391,0.537330985069275,0.244881898164749,-0.807036757469177,0.464535415172577,0.0843750312924385,-0.881525814533234,0.444862186908722,0.181827828288078,-0.876947104930878,0.509894669055939,0.256654620170593,-0.821057736873627,0.509490370750427,0.360699236392975,-0.781226992607117,0.537330985069275,0.244881898164749,-0.807036757469177,0.670561790466309,0.450112581253052,-0.589699506759644,0.575007021427155,0.477127492427826,-0.664617359638214,0.509490370750427,0.360699236392975,-0.781226992607117,0.272443890571594,0.180597811937332,-0.945070743560791,0.464535415172577,0.0843750312924385,-0.881525814533234,0.537330985069275,0.244881898164749,-0.807036757469177, 0.0856246650218964,-0.211089760065079,-0.973709166049957,0.273258209228516,-0.188740387558937,-0.943242788314819,0.464535415172577,0.0843750312924385,-0.881525814533234,0.272443890571594,0.180597811937332,-0.945070743560791,0.0856246650218964,-0.211089760065079,-0.973709166049957,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.0101248463615775,-0.493800461292267,-0.869516313076019,0.273258209228516,-0.188740387558937,-0.943242788314819,0.821033596992493,0.463092446327209,0.333840012550354,0.976709187030792,0.208457589149475,-0.050838902592659,0.951489508152008,0.185274630784988,0.245644211769104,0.836146891117096,0.398915261030197,0.376463830471039,0.654076218605042,0.750132322311401,-0.097395233809948,0.814492523670197,0.578000962734222,-0.0501683428883553,0.711495399475098,0.476572155952454,-0.516384780406952,0.52654629945755,0.6285120844841,-0.572469711303711,0.654108226299286,0.695117294788361,0.298252135515213,0.821134924888611,0.497984498739243,0.278834909200668,0.814492523670197,0.578000962734222,-0.0501683428883553,0.654076218605042,0.750132322311401,-0.097395233809948,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.592759191989899,-0.802146971225739,-0.0720886588096619,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.645101189613342,-0.736709177494049,-0.202741235494614,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.843225598335266,-0.434366077184677,-0.316696554422379,-0.649092614650726,-0.759154498577118,-0.0486132241785526,-0.64864593744278,-0.723939120769501,-0.234884113073349,-0.749038457870483,-0.580160796642303,0.319929391145706,-0.684738636016846,-0.554822146892548,0.472551971673965,-0.749038457870483,-0.580160796642303,0.319929391145706, -0.64864593744278,-0.723939120769501,-0.234884113073349,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.151531577110291,0.591902196407318,0.791637539863586,0.0310389213263988,0.339698702096939,0.940021991729736,-0.167113959789276,0.136682227253914,0.976417362689972,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.663558781147003,-0.701492488384247,-0.259996235370636,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.597946286201477,-0.554786086082459,0.578508973121643,0.457004487514496,0.0586743913590908,-0.887526988983154,0.333853751420975,0.150268703699112,-0.930570244789124,0.365138918161392,0.402016133069992,-0.83967649936676,0.552935898303986,0.244290605187416,-0.796607792377472,0.493055760860443,0.288357526063919,-0.820820271968842,0.365138918161392,0.402016133069992,-0.83967649936676,0.333853751420975,0.150268703699112,-0.930570244789124,0.491784423589706,0.100257873535156,-0.864925682544708,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.699702382087708,-0.709872841835022,0.080604575574398,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.77697879076004,-0.497155666351318,0.386186748743057,-0.708291888237,-0.455330967903137,0.539440810680389,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.799912631511688,-0.600115418434143,-0.00112808460835367,0.25180572271347,-0.338099181652069,-0.906798124313354,0.152081519365311,-0.148781135678291,-0.977105617523193,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.320780336856842,-0.177296921610832,-0.930411577224731,0.600953817367554,0.56422370672226,0.566132545471191,0.669920027256012,0.533662140369415,0.516151010990143, 0.522614181041718,0.594646036624908,0.610958755016327,0.591853797435761,0.480847299098969,0.646911799907684,0.600133121013641,0.610116124153137,0.517299294471741,0.669920027256012,0.533662140369415,0.516151010990143,0.600953817367554,0.56422370672226,0.566132545471191,0.543609440326691,0.5921830534935,0.594817638397217,0.712321758270264,0.700732469558716,-0.0396451056003571,0.781165838241577,0.623325526714325,0.0352878011763096,0.669646203517914,0.237006261944771,-0.703847944736481,0.577099621295929,0.499205440282822,-0.646335780620575,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.220365136861801,0.161491006612778,-0.961956262588501,0.577099621295929,0.499205440282822,-0.646335780620575,0.669646203517914,0.237006261944771,-0.703847944736481,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.220365136861801,0.161491006612778,-0.961956262588501,0.449265569448471,-0.0221075545996428,-0.893124639987946,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.286727339029312,-0.249588027596474,-0.924928784370422,0.0934423208236694,-0.290181279182434,-0.952398717403412,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.678066968917847,-0.616290330886841,-0.400513917207718,-0.524412930011749,-0.76793509721756,-0.367786258459091,-0.659241914749146,-0.751696407794952,-0.0187781285494566,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.689479112625122,-0.7086461186409,-0.149797007441521,-0.628000319004059,-0.748511612415314,-0.212945908308029,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.69510406255722,-0.692621827125549,0.192627400159836,-0.689547598361969,-0.720895409584045,0.069526307284832,-0.659241914749146,-0.751696407794952,-0.0187781285494566,0.808014631271362,0.548655688762665,-0.214684262871742,0.571531593799591,0.820161521434784,-0.026204576715827,0.400274157524109,0.667701542377472,-0.627658545970917, 0.467050135135651,0.542557895183563,-0.698208510875702,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.760593712329865,-0.590625822544098,-0.269552141427994,0.000683139485772699,-0.280447483062744,-0.959869146347046,-0.559872090816498,-0.363111883401871,0.744777143001556,-0.0734389647841454,-0.75235915184021,0.654646813869476,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.92225056886673,0.365326255559921,-0.126453906297684,0.258395105600357,-0.170487090945244,-0.950876474380493,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469,0.341609179973602,-0.152283608913422,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.708140134811401,-0.189787998795509,0.68008679151535,0.251297831535339,0.359561949968338,0.89864593744278,0.272435218095779,0.357738167047501,0.893197894096375,-0.705930113792419,-0.207728907465935,0.677134692668915,0.272435218095779,0.357738167047501,0.893197894096375,0.251297831535339,0.359561949968338,0.89864593744278,0.92225056886673,0.365326255559921,-0.126453906297684,0.927422702312469,0.341609179973602,-0.152283608913422,0.769174098968506,0.351543009281158,-0.533656001091003,0.677649199962616,0.231181770563126,0.698102116584778,0.682577550411224,0.201181307435036,0.702576637268066,0.779201686382294,0.334656059741974,-0.529952883720398, 0.633565187454224,0.343504458665848,-0.693253099918365,0.882170557975769,0.163093075156212,0.441786974668503,0.928486943244934,-0.278761386871338,0.24536520242691,0.765720903873444,-0.195053040981293,-0.61288321018219,-0.60441780090332,0.615803182125092,0.505436062812805,-0.394463092088699,0.67669689655304,0.621675312519073,-0.519362270832062,0.62650853395462,0.581162631511688,-0.763029158115387,0.474885076284409,0.438486844301224,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.633555710315704,0.25967600941658,0.728817939758301,-0.513125777244568,0.318144857883453,0.797173619270325,-0.44155490398407,-0.0105606326833367,0.897172093391418,-0.622686505317688,-0.240481927990913,0.744600534439087,-0.519362270832062,0.62650853395462,0.581162631511688,-0.513125777244568,0.318144857883453,0.797173619270325,-0.633555710315704,0.25967600941658,0.728817939758301,-0.505132853984833,0.614961266517639,0.605527400970459,-0.763029158115387,0.474885076284409,0.438486844301224,-0.505132853984833,0.614961266517639,0.605527400970459,-0.911145687103271,0.362300097942352,0.196347072720528,-0.942745447158813,-0.331097900867462,-0.040066309273243,0.356225103139877,0.46585413813591,0.809989869594574,0.340076804161072,0.586851418018341,0.734815061092377,0.0911808460950851,0.673339366912842,0.733689427375793,0.0691882893443108,0.630300760269165,0.773261845111847,0.366583049297333,0.495457142591476,0.787489116191864,0.490533232688904,0.463574707508087,0.73788595199585,0.21572470664978,0.340408891439438,0.915196537971497,0.148562759160995,0.479341596364975,0.864962875843048,0.315255045890808,0.464517712593079,0.827549159526825,0.420910388231277,0.458904504776001,0.782458364963531,-0.11764945089817,0.119960054755211,0.985783040523529,-0.24175851047039,0.0892980098724365,0.966218769550323,0.330627292394638,0.250829428434372,-0.909818768501282,0.318814963102341,0.117576964199543,-0.94049596786499, 0.387060284614563,0.0985353216528893,-0.916774332523346,0.475114166736603,0.274622708559036,-0.835971832275391,0.376012861728668,-0.0599821247160435,-0.924670994281769,0.320780336856842,-0.177296921610832,-0.930411577224731,0.387060284614563,0.0985353216528893,-0.916774332523346,0.318814963102341,0.117576964199543,-0.94049596786499,0.387060284614563,0.0985353216528893,-0.916774332523346,0.391682207584381,0.0344884172081947,-0.919453978538513,0.406537264585495,0.167056277394295,-0.898231387138367,0.475114166736603,0.274622708559036,-0.835971832275391,-0.489890843629837,-0.162440925836563,0.856516182422638,-0.583746492862701,-0.193907052278519,0.788441598415375,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.24175851047039,0.0892980098724365,0.966218769550323,-0.641323387622833,-0.735230326652527,-0.219409838318825,-0.714125990867615,-0.699272274971008,-0.0322852060198784,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.687927067279816,-0.688686609268188,-0.229057043790817,-0.727918982505798,-0.682847082614899,-0.0620787553489208,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.685480773448944,-0.689756214618683,-0.233136162161827,-0.710149168968201,-0.699236750602722,-0.0821955949068069,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.534167528152466,-0.810541450977325,-0.240182310342789,-0.563665211200714,-0.803098201751709,-0.19317039847374,-0.564210891723633,-0.825607478618622,-0.0061880461871624,-0.510247528553009,-0.860017955303192,-0.00407588528469205,0.472492724657059,0.634560942649841,0.611623287200928,0.765193700790405,0.545681536197662,0.341628700494766,0.821033596992493,0.463092446327209,0.333840012550354,0.457292228937149,0.637990713119507,0.619557559490204,0.578510701656342,0.581528306007385,0.571970403194427,0.472492724657059,0.634560942649841,0.611623287200928,0.457292228937149,0.637990713119507,0.619557559490204, 0.529006600379944,0.562984585762024,0.63498067855835,0.629741132259369,-0.543165504932404,0.555335402488709,0.878222644329071,-0.435990631580353,0.196563258767128,0.410484403371811,-0.832323789596558,0.372477740049362,0.0891242697834969,-0.774946451187134,0.625711500644684,0.367359757423401,-0.19918592274189,-0.908499717712402,0.594084918498993,-0.202006503939629,-0.778624713420868,0.491784423589706,0.100257873535156,-0.864925682544708,0.333853751420975,0.150268703699112,-0.930570244789124,0.379243552684784,-0.345731914043427,-0.858279526233673,0.708127498626709,-0.297497063875198,-0.640352189540863,0.594084918498993,-0.202006503939629,-0.778624713420868,0.367359757423401,-0.19918592274189,-0.908499717712402,0.901673018932343,-0.243753165006638,-0.357169687747955,0.672885239124298,0.731690943241119,-0.1088752374053,0.694567322731018,0.687739253044128,-0.211165577173233,0.901673018932343,-0.243753165006638,-0.357169687747955,0.891434013843536,0.447212874889374,-0.0731168016791344,0.672885239124298,0.731690943241119,-0.1088752374053,0.645817458629608,0.37744864821434,0.66366583108902,0.659731268882751,0.252948880195618,0.70765209197998,0.659283638000488,0.56208461523056,0.499405652284622,0.381191462278366,0.807218015193939,0.450657457113266,0.543150007724762,0.5245680809021,0.65560382604599,0.378357648849487,0.724991083145142,0.575528800487518,0.381191462278366,0.807218015193939,0.450657457113266,0.274746268987656,0.549388289451599,0.789105176925659,0.0985177978873253,0.656356811523438,0.747990608215332,0.599293649196625,-0.39963087439537,-0.693644165992737,0.641741633415222,-0.441758394241333,-0.626910865306854,0.720091462135315,-0.402850449085236,-0.56496000289917,0.0103344274684787,0.766447365283966,0.642223954200745,0.248548656702042,0.411066323518753,0.877067863941193,0.200062945485115,0.83070033788681,0.519530355930328,0.169032081961632,0.119583055377007,0.978329241275787,0.19136768579483,-0.0293898787349463,0.981078326702118,0.2811399102211,0.126565098762512,0.951284229755402,0.963335692882538,-0.129456236958504,-0.235001027584076, 0.911918580532074,-0.233281582593918,-0.33761540055275,0.853671669960022,-0.248006701469421,-0.457970976829529,0.316321402788162,0.603275775909424,-0.732119560241699,0.181251630187035,0.380190223455429,-0.906974792480469,0.237173900008202,0.452350407838821,-0.85972535610199,0.544504523277283,-0.49831086397171,-0.674685955047607,0.751560986042023,-0.51889967918396,-0.407307237386703,0.85130912065506,-0.28415909409523,-0.441051483154297,0.394706159830093,-0.349102348089218,-0.84990268945694,0.415907889604568,-0.581008851528168,-0.699606537818909,0.544504523277283,-0.49831086397171,-0.674685955047607,0.934587121009827,-0.0746875330805779,0.347805470228195,0.888165593147278,-0.00891786906868219,0.459437042474747,0.890053927898407,-0.0586380586028099,0.452068090438843,0.316321402788162,0.603275775909424,-0.732119560241699,0.613006412982941,0.632095158100128,-0.474003076553345,0.508885145187378,0.79451996088028,-0.331321537494659,0.544504523277283,-0.49831086397171,-0.674685955047607,0.415907889604568,-0.581008851528168,-0.699606537818909,0.751560986042023,-0.51889967918396,-0.407307237386703,0.079964205622673,0.0645997598767281,-0.994702279567719,0.111387610435486,-0.211319342255592,-0.9710493683815,-0.109398990869522,-0.127084732055664,-0.985840439796448,-0.0752750188112259,0.0473053678870201,-0.996040105819702,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,0.079964205622673,0.0645997598767281,-0.994702279567719,0.0810841843485832,0.166241332888603,-0.982745766639709,0.0385239869356155,0.185332536697388,-0.981920421123505,-0.0618164576590061,-0.231827840209007,-0.970790684223175,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.0863703861832619,-0.238449081778526,-0.967306673526764,-0.160292729735374,-0.153213784098625,-0.975106060504913,-0.0851698592305183,-0.236632868647575,-0.967858970165253,-0.03669124096632,-0.316752940416336,-0.947798132896423,0.859270870685577,-0.205668747425079,0.468352407217026,0.954777777194977,-0.0263348873704672,0.296151697635651, 0.888511061668396,-0.437404543161392,0.138655453920364,0.888511061668396,-0.437404543161392,0.138655453920364,0.954777777194977,-0.0263348873704672,0.296151697635651,0.789399027824402,-0.501962423324585,0.353387653827667,0.991177558898926,-0.0885100439190865,0.0986559465527534,0.964077115058899,-0.108696304261684,0.242364108562469,0.922331035137177,0.0571805983781815,0.382146298885345,0.963335692882538,-0.129456236958504,-0.235001027584076,0.853671669960022,-0.248006701469421,-0.457970976829529,0.778241097927094,-0.324259251356125,-0.53777015209198,0.250419557094574,0.807709574699402,0.533755779266357,0.378357648849487,0.724991083145142,0.575528800487518,0.0415897369384766,0.750063896179199,0.660056412220001,-0.362747877836227,-0.08218814432621,-0.928255915641785,-0.00605733366683126,-0.0303982496261597,-0.999519467353821,-0.335044384002686,0.0369866825640202,-0.941476106643677,0.648516714572906,0.651950538158417,0.392920613288879,0.889242053031921,-0.13137923181057,0.438164442777634,0.562915802001953,0.509836494922638,0.650532484054565,0.29329439997673,0.882676124572754,0.367234617471695,0.291106730699539,0.735121071338654,0.612253129482269,0.233477383852005,0.295218259096146,0.926463425159454,0.404132395982742,0.670274078845978,0.622422397136688,0.0895038321614265,0.749099910259247,0.65638279914856,0.0201202612370253,0.491976112127304,0.870376169681549,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0346120446920395,0.37646210193634,0.9257852435112,-0.0824126973748207,0.271421998739243,0.958925545215607,-0.10020349919796,0.182739198207855,0.978041768074036,0.727367699146271,-0.668511748313904,0.15501070022583,0.888511061668396,-0.437404543161392,0.138655453920364,0.789399027824402,-0.501962423324585,0.353387653827667,0.961808860301971,0.241085827350616,0.129620164632797,0.997147977352142,0.063211515545845,-0.0412334688007832,0.98869800567627,0.0949656590819359,0.116007700562477,0.932883560657501,0.00894892401993275,-0.36006686091423,0.97384238243103,-0.111237548291683,-0.198134258389473,0.983769476413727,0.170430228114128,-0.0561354644596577, 0.88943737745285,-0.310296326875687,-0.335585117340088,0.993755042552948,-0.10124122351408,0.0469168499112129,0.933888673782349,-0.271616876125336,-0.232542887330055,0.930458664894104,-0.278987765312195,0.237513080239296,0.799426317214966,-0.355103880167007,0.484581023454666,0.932736575603485,0.169303506612778,0.31833752989769,0.799426317214966,-0.355103880167007,0.484581023454666,0.930458664894104,-0.278987765312195,0.237513080239296,0.789399027824402,-0.501962423324585,0.353387653827667,0.963078618049622,0.14069077372551,0.229533597826958,0.961808860301971,0.241085827350616,0.129620164632797,0.400240421295166,-0.835451424121857,-0.376601278781891,0.280021280050278,-0.723065078258514,0.631478428840637,0.963078618049622,0.14069077372551,0.229533597826958,0.400240421295166,-0.835451424121857,-0.376601278781891,0.963078618049622,0.14069077372551,0.229533597826958,0.88108503818512,0.403870642185211,0.246125221252441,0.961808860301971,0.241085827350616,0.129620164632797,0.932883560657501,0.00894892401993275,-0.36006686091423,0.900146186351776,-0.397185921669006,-0.178830027580261,0.88943737745285,-0.310296326875687,-0.335585117340088,0.998818516731262,0.0184048507362604,0.0449758432805538,0.600287616252899,-0.73423707485199,0.317097216844559,0.983769476413727,0.170430228114128,-0.0561354644596577,0.468301683664322,0.50049239397049,0.728148937225342,0.636708438396454,0.429240256547928,0.640589714050293,0.434262931346893,0.0580337457358837,0.898914754390717,-0.0231866482645273,-0.662597954273224,0.748616278171539,0.0891242697834969,-0.774946451187134,0.625711500644684,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.410484403371811,-0.832323789596558,0.372477740049362,-0.418209999799728,-0.452997386455536,0.787333309650421,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.0891242697834969,-0.774946451187134,0.625711500644684,0.958027005195618,0.285412758588791,-0.0269038528203964,0.998818516731262,0.0184048507362604,0.0449758432805538,0.983769476413727,0.170430228114128,-0.0561354644596577,0.21975277364254,-0.661429107189178,-0.717091500759125, -0.80677717924118,-0.297363102436066,-0.510573983192444,0.400240421295166,-0.835451424121857,-0.376601278781891,-0.0173206701874733,0.471247583627701,0.881830871105194,0.296016186475754,0.207150265574455,0.932450115680695,-0.0981862172484398,-0.372313976287842,0.922898590564728,0.88943737745285,-0.310296326875687,-0.335585117340088,0.410484403371811,-0.832323789596558,0.372477740049362,0.878222644329071,-0.435990631580353,0.196563258767128,0.369285374879837,-0.387989014387131,0.844448208808899,0.232206523418427,-0.020738473162055,0.972445428371429,0.434262931346893,0.0580337457358837,0.898914754390717,0.522614181041718,0.594646036624908,0.610958755016327,0.669920027256012,0.533662140369415,0.516151010990143,0.645030558109283,0.393106490373611,0.655288398265839,0.0273940563201904,-0.397710710763931,-0.917101860046387,0.0934423208236694,-0.290181279182434,-0.952398717403412,0.365171790122986,-0.00518579035997391,-0.930925726890564,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.708291888237,-0.455330967903137,0.539440810680389,-0.692679047584534,-0.143219769001007,0.706883192062378,-0.400625139474869,-0.141950860619545,0.905179262161255,-0.708291888237,-0.455330967903137,0.539440810680389,0.214979261159897,-0.17779715359211,-0.96029794216156,0.340121984481812,0.0539852678775787,-0.938830494880676,0.213511228561401,-0.0973462760448456,-0.972078502178192,-0.504859209060669,-0.313114404678345,0.804410696029663,-0.188908159732819,-0.0821763500571251,0.978550314903259,-0.214763179421425,0.201751604676247,0.955600917339325,0.204352244734764,-0.29480442404747,-0.933450877666473,0.129470959305763,-0.140533372759819,-0.981574058532715,0.170904099941254,-0.332066059112549,-0.9276442527771,-0.495001792907715,-0.723142206668854,-0.481703817844391,-0.190189674496651,-0.685347437858582,-0.702941536903381,-0.302494555711746,-0.645085394382477,-0.701685011386871,0.64373791217804,0.242922231554985,0.725665390491486,0.452383905649185,-0.0666286796331406,0.889330863952637, 0.530508995056152,-0.19520378112793,0.824897408485413,-0.582614302635193,-0.811018943786621,-0.0529977157711983,-0.510247528553009,-0.860017955303192,-0.00407588528469205,-0.590254783630371,-0.794654071331024,0.141859948635101,0.56834876537323,0.804110050201416,-0.174317732453346,0.372105628252029,0.872971594333649,0.315369695425034,0.675231993198395,0.699040055274963,-0.235382169485092,0.0771664902567863,0.0724747255444527,0.994380593299866,-0.281839609146118,-0.242576912045479,0.92829030752182,-0.471450448036194,-0.245001286268234,0.847176969051361,-0.799912631511688,-0.600115418434143,-0.00112808460835367,-0.808354198932648,-0.575751066207886,0.122776761651039,-0.755765080451965,-0.64697390794754,-0.101212374866009,0.575007021427155,0.477127492427826,-0.664617359638214,0.585969090461731,0.300280570983887,-0.752643227577209,0.56600546836853,0.354604989290237,-0.744239985942841,0.585969090461731,0.300280570983887,-0.752643227577209,0.575007021427155,0.477127492427826,-0.664617359638214,0.459090322256088,0.385543048381805,-0.800370275974274,0.56834876537323,0.804110050201416,-0.174317732453346,0.675231993198395,0.699040055274963,-0.235382169485092,0.483205556869507,0.452571898698807,-0.749460518360138,0.494146823883057,0.54429703950882,-0.677908360958099,0.33696186542511,0.354342758655548,-0.87229460477829,0.575007021427155,0.477127492427826,-0.664617359638214,0.25180572271347,-0.338099181652069,-0.906798124313354,0.320780336856842,-0.177296921610832,-0.930411577224731,0.204112648963928,-0.444034606218338,-0.872451305389404,-0.107540838420391,-0.360320240259171,-0.926609039306641,-0.374727010726929,-0.451056748628616,-0.810016989707947,-0.442572265863419,-0.578949928283691,-0.684796929359436,0.75712126493454,0.653194308280945,0.0102259330451488,0.598047912120819,0.525615990161896,-0.605034232139587,0.729157328605652,0.398623704910278,-0.556263148784637,0.296016186475754,0.207150265574455,0.932450115680695,0.645030558109283,0.393106490373611,0.655288398265839,0.639394581317902,-0.0537512600421906,0.766997635364532, -0.446602612733841,-0.102232590317726,-0.888872683048248,0.379243552684784,-0.345731914043427,-0.858279526233673,0.171164497733116,0.182280600070953,-0.968233704566956,0.645030558109283,0.393106490373611,0.655288398265839,0.296016186475754,0.207150265574455,0.932450115680695,0.522614181041718,0.594646036624908,0.610958755016327,0.367359757423401,-0.19918592274189,-0.908499717712402,0.333853751420975,0.150268703699112,-0.930570244789124,0.457004487514496,0.0586743913590908,-0.887526988983154,0.56834876537323,0.804110050201416,-0.174317732453346,0.716162204742432,0.693212687969208,0.0810423269867897,0.461020469665527,0.72527813911438,0.511303961277008,0.528455495834351,0.430389046669006,0.731778681278229,0.315534800291061,0.608373045921326,0.728230714797974,0.543609440326691,0.5921830534935,0.594817638397217,0.64373791217804,0.242922231554985,0.725665390491486,0.421373724937439,0.10162215679884,0.901175439357758,0.487773865461349,0.149537533521652,0.860066950321198,0.521424174308777,0.414691746234894,-0.745753049850464,0.459090322256088,0.385543048381805,-0.800370275974274,0.575007021427155,0.477127492427826,-0.664617359638214,0.75712126493454,0.653194308280945,0.0102259330451488,0.621278166770935,0.634226977825165,0.460184365510941,0.758696973323822,0.616848468780518,0.209467962384224,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.118136525154114,-0.743892669677734,0.65777462720871,-0.492057383060455,-0.813641428947449,0.309624224901199,0.361584514379501,0.504137456417084,0.78428441286087,0.20168174803257,0.693581879138947,0.691569745540619,-0.214763179421425,0.201751604676247,0.955600917339325,0.56834876537323,0.804110050201416,-0.174317732453346,0.461020469665527,0.72527813911438,0.511303961277008,0.319102138280869,0.857758343219757,0.403019160032272,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.708291888237,-0.455330967903137,0.539440810680389,0.633797287940979,0.754054367542267,-0.172345638275146,0.598047912120819,0.525615990161896,-0.605034232139587, 0.75712126493454,0.653194308280945,0.0102259330451488,0.571536600589752,0.54747611284256,-0.611241221427917,0.598047912120819,0.525615990161896,-0.605034232139587,0.633797287940979,0.754054367542267,-0.172345638275146,0.75712126493454,0.653194308280945,0.0102259330451488,0.598974168300629,0.55623596906662,0.576048195362091,0.621278166770935,0.634226977825165,0.460184365510941,0.351930469274521,0.00348040298558772,-0.936019718647003,0.340121984481812,0.0539852678775787,-0.938830494880676,0.214979261159897,-0.17779715359211,-0.96029794216156,0.320780336856842,-0.177296921610832,-0.930411577224731,0.293987482786179,-0.0222472082823515,-0.955550312995911,0.391682207584381,0.0344884172081947,-0.919453978538513,0.595824003219604,0.198742762207985,-0.778135597705841,0.129470959305763,-0.140533372759819,-0.981574058532715,0.474989861249924,-0.106995098292828,-0.873462498188019,0.595824003219604,0.198742762207985,-0.778135597705841,0.474989861249924,-0.106995098292828,-0.873462498188019,0.833576500415802,0.26908865571022,-0.482432901859283,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.272565364837646,-0.405919879674912,-0.872317135334015,0.218467608094215,-0.0307074077427387,-0.975360929965973,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.0785726085305214,-0.289755910634995,-0.953869938850403,-0.353174358606339,-0.401916116476059,-0.844826221466064,-0.768422484397888,-0.629524946212769,0.115000896155834,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.45667690038681,-0.210856854915619,-0.864283263683319,-0.45667690038681,-0.210856854915619,-0.864283263683319,0.67058277130127,0.452658027410507,-0.587724030017853,0.623998522758484,0.368696242570877,-0.68897670507431,0.621371865272522,0.365546494722366,-0.6930171251297,0.633565187454224,0.343504458665848,-0.693253099918365,-0.494617521762848,-0.0259672924876213,-0.86872273683548, -0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.765720903873444,-0.195053040981293,-0.61288321018219,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.0629069060087204,-0.574297785758972,-0.81622588634491,0.463766068220139,-0.858605027198792,-0.218445509672165,0.21460884809494,-0.781227350234985,0.586196959018707,-0.417728811502457,-0.903412997722626,-0.0966832265257835,0.928486943244934,-0.278761386871338,0.24536520242691,0.21460884809494,-0.781227350234985,0.586196959018707,0.463766068220139,-0.858605027198792,-0.218445509672165,0.765720903873444,-0.195053040981293,-0.61288321018219,0.928486943244934,-0.278761386871338,0.24536520242691,0.463766068220139,-0.858605027198792,-0.218445509672165,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.128134071826935,-0.277867317199707,0.952035427093506,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.128134071826935,-0.277867317199707,0.952035427093506,0.882170557975769,0.163093075156212,0.441786974668503,0.874470949172974,0.181272923946381,0.449934005737305,-0.113240525126457,-0.398993462324142,0.909934520721436,-0.715266227722168,-0.692378520965576,0.0949009582400322,-0.768422484397888,-0.629524946212769,0.115000896155834,0.838517308235168,0.23515185713768,0.491520494222641,0.823110163211823,0.325570344924927,0.465288698673248,-0.113240525126457,-0.398993462324142,0.909934520721436,0.88580310344696,-0.0711137056350708,0.458580136299133,0.463198840618134,-0.858536601066589,-0.219913169741631,0.221149787306786,-0.755684494972229,0.616468727588654,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.00839155726134777,-0.974679827690125,-0.223447620868683,0.463198840618134,-0.858536601066589,-0.219913169741631,0.463198840618134,-0.858536601066589,-0.219913169741631,-0.00699111027643085,-0.506333768367767,-0.862309277057648,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.987558305263519,-0.14246828854084,-0.0665680542588234, 0.905055105686188,0.328626185655594,-0.269963204860687,0.744133472442627,0.145097494125366,-0.652082920074463,0.744133472442627,0.145097494125366,-0.652082920074463,-0.00699111027643085,-0.506333768367767,-0.862309277057648,0.463198840618134,-0.858536601066589,-0.219913169741631,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.299353003501892,-0.946574151515961,-0.119938470423222,-0.299353003501892,-0.946574151515961,-0.119938470423222,0.221149787306786,-0.755684494972229,0.616468727588654,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.960252404212952,0.207041427493095,0.18721416592598,0.905055105686188,0.328626185655594,-0.269963204860687,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.209620162844658,-0.216750532388687,-0.953456163406372,-0.209620162844658,-0.216750532388687,-0.953456163406372,0.728366911411285,0.471724718809128,-0.496948093175888,0.769174098968506,0.351543009281158,-0.533656001091003,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.779201686382294,0.334656059741974,-0.529952883720398,0.780810236930847,0.338432997465134,-0.525165200233459,-0.94000107049942,-0.321145743131638,-0.115166857838631,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.286078542470932,-0.0728482380509377,-0.955433011054993,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.867587566375732,-0.240597397089005,-0.435206592082977,0.470961600542068,-0.874415993690491,-0.116584025323391,0.11994443833828,-0.617316663265228,-0.77751749753952,0.470961600542068,-0.874415993690491,-0.116584025323391,0.0104025090113282,-0.818762242794037,0.574038505554199,-0.383375316858292,-0.909262895584106,-0.162062838673592,0.824216485023499,-0.374453365802765,0.42479619383812,0.0104025090113282,-0.818762242794037,0.574038505554199, 0.470961600542068,-0.874415993690491,-0.116584025323391,0.470961600542068,-0.874415993690491,-0.116584025323391,0.867587566375732,-0.240597397089005,-0.435206592082977,0.824216485023499,-0.374453365802765,0.42479619383812,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.953828155994415,-0.279060304164886,-0.111072786152363,-0.94000107049942,-0.321145743131638,-0.115166857838631,0.694519758224487,0.188186302781105,0.694426536560059,0.682577550411224,0.201181307435036,0.702576637268066,-0.441486179828644,-0.275298207998276,0.853991091251373,-0.691875457763672,-0.711835026741028,-0.120827160775661,-0.809780776500702,-0.571567296981812,-0.132536545395851,-0.391219317913055,-0.370447516441345,0.842446446418762,0.677649199962616,0.231181770563126,0.698102116584778,0.67560875415802,0.409798443317413,0.612876892089844,-0.391219317913055,-0.370447516441345,0.842446446418762,-0.0565342605113983,-0.994561314582825,0.087474100291729,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.964045107364655,-0.123944662511349,0.23506323993206,0.628294765949249,0.216130942106247,0.747350692749023,0.834237515926361,0.296865254640579,0.464670658111572,0.628294765949249,0.216130942106247,0.747350692749023,0.964045107364655,-0.123944662511349,0.23506323993206,0.284337043762207,-0.628438115119934,0.724029004573822,0.569195508956909,-0.757238268852234,-0.320322901010513,0.284337043762207,-0.628438115119934,0.724029004573822,0.964045107364655,-0.123944662511349,0.23506323993206,0.869658291339874,0.203361555933952,-0.449820637702942,0.569195508956909,-0.757238268852234,-0.320322901010513,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.964045107364655,-0.123944662511349,0.23506323993206,0.834237515926361,0.296865254640579,0.464670658111572,-0.0565342605113983,-0.994561314582825,0.087474100291729, -0.0514638796448708,-0.993651986122131,-0.100036129355431,0.569195508956909,-0.757238268852234,-0.320322901010513,0.569195508956909,-0.757238268852234,-0.320322901010513,-0.0514638796448708,-0.993651986122131,-0.100036129355431,0.284337043762207,-0.628438115119934,0.724029004573822,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.695965886116028,-0.67816036939621,-0.236071988940239,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.000683139485772699,-0.280447483062744,-0.959869146347046,0.874346256256104,0.418091505765915,-0.246410429477692,0.877589702606201,0.353748112916946,-0.323571652173996,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.864371955394745,0.365095496177673,-0.345783799886703,0.886669814586639,0.303469926118851,-0.348887741565704,-0.899728536605835,-0.311181008815765,-0.30603089928627,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.0460331737995148,-0.0997519120573998,-0.99394690990448,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.927240550518036,-0.288017064332962,-0.239313811063766,0.416420161724091,-0.908685982227325,0.0297335833311081,0.246053159236908,-0.622352182865143,-0.743058264255524,0.416420161724091,-0.908685982227325,0.0297335833311081,-0.16863539814949,-0.750330984592438,0.639191269874573,-0.366940021514893,-0.90958160161972,-0.194977775216103,0.669099032878876,-0.368822127580643,0.645195066928864,-0.16863539814949,-0.750330984592438,0.639191269874573,0.416420161724091,-0.908685982227325,0.0297335833311081,0.416420161724091,-0.908685982227325,0.0297335833311081,0.927240550518036,-0.288017064332962,-0.239313811063766,0.669099032878876,-0.368822127580643,0.645195066928864,-0.591978549957275,-0.234647616744041,0.771039485931396,-0.903714656829834,-0.299481302499771,-0.305958777666092,-0.899728536605835,-0.311181008815765,-0.30603089928627,0.524607241153717,0.204550698399544,0.826405644416809,0.484563320875168,0.265936732292175,0.833352267742157, -0.591978549957275,-0.234647616744041,0.771039485931396,-0.695965886116028,-0.67816036939621,-0.236071988940239,-0.760593712329865,-0.590625822544098,-0.269552141427994,-0.559872090816498,-0.363111883401871,0.744777143001556,0.503586828708649,0.359971582889557,0.785379409790039,-0.559872090816498,-0.363111883401871,0.744777143001556,0.478091299533844,0.270657926797867,0.835567474365234,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.0565342605113983,-0.994561314582825,0.087474100291729,0.119874052703381,-0.978117644786835,0.170047551393509,0.119874052703381,-0.978117644786835,0.170047551393509,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.468902409076691,-0.882473528385162,-0.0370272994041443,0.119874052703381,-0.978117644786835,0.170047551393509,0.437012165784836,-0.816920578479767,-0.376378893852234,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.684952914714813,-0.620533168315887,-0.381808966398239,-0.665418803691864,-0.653117716312408,-0.361462414264679,0.260752469301224,-0.303326517343521,-0.91651576757431,0.927422702312469,0.341609179973602,-0.152283608913422,0.260752469301224,-0.303326517343521,-0.91651576757431,0.914490401744843,0.386459112167358,-0.119819387793541,0.258395105600357,-0.170487090945244,-0.950876474380493,0.92225056886673,0.365326255559921,-0.126453906297684,0.941704988479614,0.318803399801254,-0.107499539852142,-0.768858969211578,-0.468379706144333,-0.435288727283478,-0.767736911773682,-0.476170718669891,-0.428767383098602,0.258395105600357,-0.170487090945244,-0.950876474380493, 0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.974766612052917,-0.217580199241638,0.0498894527554512,0.480270147323608,-0.844779372215271,0.235983863472939,0.48573312163353,-0.643503189086914,-0.591580092906952,0.480270147323608,-0.844779372215271,0.235983863472939,-0.248893335461617,-0.684883832931519,0.684825658798218,-0.27993255853653,-0.94170469045639,-0.18662802875042,0.527618527412415,-0.248120784759521,0.812437534332275,-0.248893335461617,-0.684883832931519,0.684825658798218,0.480270147323608,-0.844779372215271,0.235983863472939,0.480270147323608,-0.844779372215271,0.235983863472939,0.974766612052917,-0.217580199241638,0.0498894527554512,0.527618527412415,-0.248120784759521,0.812437534332275,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.767736911773682,-0.476170718669891,-0.428767383098602,-0.768858969211578,-0.468379706144333,-0.435288727283478,0.287435591220856,0.297283440828323,0.910496234893799,0.251297831535339,0.359561949968338,0.89864593744278,-0.708140134811401,-0.189787998795509,0.68008679151535,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.665418803691864,-0.653117716312408,-0.361462414264679,-0.684952914714813,-0.620533168315887,-0.381808966398239,0.272435218095779,0.357738167047501,0.893197894096375,0.307352930307388,0.437818199396133,0.844896078109741,-0.705930113792419,-0.207728907465935,0.677134692668915,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.36907297372818,-0.926835656166077,-0.0689988732337952,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.633391082286835,-0.307917952537537,0.709931194782257,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.701657354831696,-0.649943113327026,0.291977494955063,-0.392839103937149,-0.172498524188995,0.903283834457397, -0.725724279880524,-0.448904931545258,0.521352767944336,-0.589905083179474,-0.166010066866875,0.790223181247711,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.229229316115379,-0.896437346935272,-0.379280924797058,0.567480087280273,-0.0757819190621376,0.819892346858978,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.183004111051559,-0.709960997104645,0.680047690868378,0.571861207485199,-0.818909585475922,0.0485987178981304,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.725724279880524,-0.448904931545258,0.521352767944336,-0.183004111051559,-0.709960997104645,0.680047690868378,-0.223597481846809,-0.973583161830902,0.046260129660368,0.735555529594421,-0.454784423112869,-0.502124667167664,0.691691398620605,-0.350874394178391,-0.631229043006897,-0.279823988676071,-0.630851566791534,-0.723688364028931,0.957826614379883,0.161021858453751,0.237991765141487,0.691691398620605,-0.350874394178391,-0.631229043006897,0.735555529594421,-0.454784423112869,-0.502124667167664,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.56933456659317,0.0568463616073132,0.820138216018677,-0.765611350536346,-0.587060868740082,0.263056576251984,0.245743036270142,0.103760361671448,0.963765621185303,-0.56933456659317,0.0568463616073132,0.820138216018677,0.0493573248386383,-0.726132214069366,0.685781180858612,-0.911145687103271,0.362300097942352,0.196347072720528,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.633555710315704,0.25967600941658,0.728817939758301,-0.622686505317688,-0.240481927990913,0.744600534439087, -0.930138111114502,-0.0125236622989178,0.366996258497238,-0.993846356868744,-0.0301143601536751,-0.106595493853092,-0.982938468456268,-0.0543373562395573,-0.17572546005249,-0.279823988676071,-0.630851566791534,-0.723688364028931,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.229229316115379,-0.896437346935272,-0.379280924797058,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.930138111114502,-0.0125236622989178,0.366996258497238,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.844545185565948,-0.263896226882935,-0.465942233800888,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.755157172679901,-0.459198147058487,-0.46784046292305,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.630859076976776,-0.676938772201538,-0.379171073436737,-0.237416341900826,-0.918983161449432,-0.314806878566742,-0.507598042488098,-0.818433046340942,-0.269279778003693, -0.223597481846809,-0.973583161830902,0.046260129660368,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.424547016620636,-0.828336775302887,-0.365538060665131,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.468902409076691,-0.882473528385162,-0.0370272994041443,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.245216280221939,-0.962543606758118,-0.115666791796684,-0.260551959276199,-0.96073442697525,0.0954045951366425,-0.245216280221939,-0.962543606758118,-0.115666791796684,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.0514638796448708,-0.993651986122131,-0.100036129355431,-0.784540235996246,-0.611652791500092,0.10187029838562,-0.223597481846809,-0.973583161830902,0.046260129660368,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.507598042488098,-0.818433046340942,-0.269279778003693,-0.714628040790558,-0.682467877864838,-0.153441905975342,-0.784540235996246,-0.611652791500092,0.10187029838562,0.957826614379883,0.161021858453751,0.237991765141487,0.199689194560051,0.642064154148102,0.740187704563141,0.18985190987587,0.684443712234497,0.703912675380707,0.84142130613327,0.443432748317719,-0.30883252620697,0.736901640892029,0.310691028833389,-0.600372433662415,0.609626173973084,0.347123831510544,-0.712643682956696,0.820404410362244,0.42123407125473,-0.386650294065475,0.690612375736237,0.305584073066711,-0.655494391918182,0.736901640892029,0.310691028833389,-0.600372433662415,0.693649888038635,0.505129396915436,0.513511538505554,0.190256670117378,0.381372839212418,0.904630959033966,0.0841809809207916,0.380945682525635,0.920757293701172,0.190256670117378,0.381372839212418,0.904630959033966,0.394909024238586,0.532412230968475,0.748721599578857,0.30104210972786,0.404300183057785,0.863663733005524, 0.30104210972786,0.404300183057785,0.863663733005524,0.340076804161072,0.586851418018341,0.734815061092377,0.356225103139877,0.46585413813591,0.809989869594574,0.568666934967041,0.406713992357254,-0.714983642101288,0.690612375736237,0.305584073066711,-0.655494391918182,0.894895136356354,0.433114320039749,-0.107586048543453,0.982857048511505,0.136188626289368,-0.124276459217072,0.693649888038635,0.505129396915436,0.513511538505554,0.914490401744843,0.386459112167358,-0.119819387793541,0.307352930307388,0.437818199396133,0.844896078109741,0.693649888038635,0.505129396915436,0.513511538505554,0.0841809809207916,0.380945682525635,0.920757293701172,0.982857048511505,0.136188626289368,-0.124276459217072,0.853275120258331,-0.0167487524449825,0.521191954612732,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331,-0.0167487524449825,0.521191954612732,0.460785627365112,0.218516558408737,0.860190212726593,0.646180808544159,0.374157816171646,0.665173888206482,0.340076804161072,0.586851418018341,0.734815061092377,0.394909024238586,0.532412230968475,0.748721599578857,0.39249575138092,0.576124608516693,0.716957092285156,0.820957541465759,0.472796261310577,0.320144385099411,0.503586828708649,0.359971582889557,0.785379409790039,0.874346256256104,0.418091505765915,-0.246410429477692,0.503586828708649,0.359971582889557,0.785379409790039,0.820957541465759,0.472796261310577,0.320144385099411,0.460785627365112,0.218516558408737,0.860190212726593,0.394909024238586,0.532412230968475,0.748721599578857,0.340076804161072,0.586851418018341,0.734815061092377,0.30104210972786,0.404300183057785,0.863663733005524,0.67058277130127,0.452658027410507,-0.587724030017853,0.568666934967041,0.406713992357254,-0.714983642101288,0.894895136356354,0.433114320039749,-0.107586048543453,0.728366911411285,0.471724718809128,-0.496948093175888,0.744133472442627,0.145097494125366,-0.652082920074463,0.853837490081787,0.519237220287323,0.0367999672889709,0.853837490081787,0.519237220287323,0.0367999672889709,0.67560875415802,0.409798443317413,0.612876892089844, 0.728366911411285,0.471724718809128,-0.496948093175888,0.67560875415802,0.409798443317413,0.612876892089844,0.853837490081787,0.519237220287323,0.0367999672889709,0.628294765949249,0.216130942106247,0.747350692749023,0.00839155726134777,-0.974679827690125,-0.223447620868683,-0.299353003501892,-0.946574151515961,-0.119938470423222,0.463198840618134,-0.858536601066589,-0.219913169741631,0.874346256256104,0.418091505765915,-0.246410429477692,0.869658291339874,0.203361555933952,-0.449820637702942,0.820957541465759,0.472796261310577,0.320144385099411,0.307352930307388,0.437818199396133,0.844896078109741,0.914490401744843,0.386459112167358,-0.119819387793541,0.693649888038635,0.505129396915436,0.513511538505554,0.684045433998108,0.607819020748138,0.403283834457397,0.801483035087585,0.569443702697754,0.182643905282021,0.839346766471863,0.531246542930603,-0.115212969481945,0.891873419284821,0.448944300413132,0.0548712648451328,0.801483035087585,0.569443702697754,0.182643905282021,0.862821519374847,0.482879310846329,0.149554565548897,0.862821519374847,0.482879310846329,0.149554565548897,0.890609622001648,0.401651859283447,0.213284432888031,0.899213671684265,0.427792370319366,0.0916977524757385,-0.671412885189056,-0.393651962280273,-0.627887606620789,-0.754156410694122,-0.292590618133545,-0.587910532951355,-0.844545185565948,-0.263896226882935,-0.465942233800888,0.585969090461731,0.300280570983887,-0.752643227577209,0.459090322256088,0.385543048381805,-0.800370275974274,0.351930469274521,0.00348040298558772,-0.936019718647003,0.564947247505188,0.481012016534805,-0.670419335365295,0.598047912120819,0.525615990161896,-0.605034232139587,0.571536600589752,0.54747611284256,-0.611241221427917,-0.190189674496651,-0.685347437858582,-0.702941536903381,0.204112648963928,-0.444034606218338,-0.872451305389404,0.123677581548691,-0.415960758924484,-0.900933146476746,0.181594237685204,0.605878710746765,0.774554371833801,0.357862263917923,0.82249915599823,0.442074358463287,0.467824161052704,0.695085167884827,0.545891225337982,-0.28609374165535,0.17817023396492,0.941491186618805, 0.181594237685204,0.605878710746765,0.774554371833801,-0.179948955774307,0.305097907781601,0.935165047645569,-0.613032460212708,-0.252606987953186,0.748585939407349,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.28609374165535,0.17817023396492,0.941491186618805,0.56834876537323,0.804110050201416,-0.174317732453346,0.483205556869507,0.452571898698807,-0.749460518360138,0.575007021427155,0.477127492427826,-0.664617359638214,0.56834876537323,0.804110050201416,-0.174317732453346,0.357862263917923,0.82249915599823,0.442074358463287,0.372105628252029,0.872971594333649,0.315369695425034,0.862821519374847,0.482879310846329,0.149554565548897,0.801483035087585,0.569443702697754,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.890609622001648,0.401651859283447,0.213284432888031,0.957878828048706,0.257844924926758,-0.126428335905075,0.834237515926361,0.296865254640579,0.464670658111572,0.839346766471863,0.531246542930603,-0.115212969481945,0.801483035087585,0.569443702697754,0.182643905282021,0.862522184848785,0.47530135512352,-0.17362080514431,0.684045433998108,0.607819020748138,0.403283834457397,0.642198443412781,0.582559704780579,0.498202055692673,0.801483035087585,0.569443702697754,0.182643905282021,0.816755056381226,0.501944601535797,0.284539580345154,0.787978947162628,0.441818922758102,0.428818345069885,0.807778179645538,0.493730574846268,0.322062909603119,0.646180808544159,0.374157816171646,0.665173888206482,0.787978947162628,0.441818922758102,0.428818345069885,0.936653733253479,0.265634030103683,0.228294312953949,0.853275120258331,-0.0167487524449825,0.521191954612732,0.646180808544159,0.374157816171646,0.665173888206482,0.936653733253479,0.265634030103683,0.228294312953949,0.869658291339874,0.203361555933952,-0.449820637702942,0.964045107364655,-0.123944662511349,0.23506323993206,0.957878828048706,0.257844924926758,-0.126428335905075,0.960252404212952,0.207041427493095,0.18721416592598,0.922886550426483,0.384252488613129,-0.0251074023544788,0.905055105686188,0.328626185655594,-0.269963204860687, 0.987558305263519,-0.14246828854084,-0.0665680542588234,0.88580310344696,-0.0711137056350708,0.458580136299133,0.960252404212952,0.207041427493095,0.18721416592598,0.823110163211823,0.325570344924927,0.465288698673248,0.894895136356354,0.433114320039749,-0.107586048543453,0.88580310344696,-0.0711137056350708,0.458580136299133,0.67058277130127,0.452658027410507,-0.587724030017853,0.894895136356354,0.433114320039749,-0.107586048543453,0.823110163211823,0.325570344924927,0.465288698673248,0.463198840618134,-0.858536601066589,-0.219913169741631,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.744133472442627,0.145097494125366,-0.652082920074463,0.88580310344696,-0.0711137056350708,0.458580136299133,0.987558305263519,-0.14246828854084,-0.0665680542588234,0.463198840618134,-0.858536601066589,-0.219913169741631,0.45549151301384,-0.838008761405945,0.300447642803192,0.437012165784836,-0.816920578479767,-0.376378893852234,0.119874052703381,-0.978117644786835,0.170047551393509,-0.0734389647841454,-0.75235915184021,0.654646813869476,0.45549151301384,-0.838008761405945,0.300447642803192,0.119874052703381,-0.978117644786835,0.170047551393509,0.0502891913056374,0.172818437218666,-0.98366904258728,0.129470959305763,-0.140533372759819,-0.981574058532715,0.595824003219604,0.198742762207985,-0.778135597705841,-0.942745447158813,-0.331097900867462,-0.040066309273243,-0.911145687103271,0.362300097942352,0.196347072720528,-0.965597808361053,0.00630215974524617,-0.259963750839233,0.323202461004257,0.213562965393066,0.921917021274567,0.0199296418577433,-0.141455933451653,0.989743947982788,0.356225103139877,0.46585413813591,0.809989869594574,0.0691882893443108,0.630300760269165,0.773261845111847,0.323202461004257,0.213562965393066,0.921917021274567,0.356225103139877,0.46585413813591,0.809989869594574,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.0856246650218964,-0.211089760065079,-0.973709166049957,0.272443890571594,0.180597811937332,-0.945070743560791,0.575007021427155,0.477127492427826,-0.664617359638214,0.56600546836853,0.354604989290237,-0.744239985942841, 0.509490370750427,0.360699236392975,-0.781226992607117,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.351930469274521,0.00348040298558772,-0.936019718647003,0.214979261159897,-0.17779715359211,-0.96029794216156,0.598047912120819,0.525615990161896,-0.605034232139587,0.494146823883057,0.54429703950882,-0.677908360958099,0.575007021427155,0.477127492427826,-0.664617359638214,0.845363795757294,0.50351881980896,-0.178406670689583,0.853050053119659,0.432356089353561,-0.292187958955765,0.811299920082092,0.393999367952347,-0.431922435760498,0.575007021427155,0.477127492427826,-0.664617359638214,0.33696186542511,0.354342758655548,-0.87229460477829,0.521424174308777,0.414691746234894,-0.745753049850464,-0.667661368846893,-0.595950901508331,0.446173489093781,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.558849096298218,-0.377615302801132,0.73830509185791,-0.597946286201477,-0.554786086082459,0.578508973121643,-0.504859209060669,-0.313114404678345,0.804410696029663,0.249904245138168,-0.0394469499588013,-0.967466652393341,0.272443890571594,0.180597811937332,-0.945070743560791,0.56600546836853,0.354604989290237,-0.744239985942841,0.56600546836853,0.354604989290237,-0.744239985942841,0.272443890571594,0.180597811937332,-0.945070743560791,0.509490370750427,0.360699236392975,-0.781226992607117,0.670561790466309,0.450112581253052,-0.589699506759644,0.56834876537323,0.804110050201416,-0.174317732453346,0.575007021427155,0.477127492427826,-0.664617359638214,0.808014631271362,0.548655688762665,-0.214684262871742,0.976709187030792,0.208457589149475,-0.050838902592659,0.765193700790405,0.545681536197662,0.341628700494766,-0.965597808361053,0.00630215974524617,-0.259963750839233,-0.974218130111694,-0.223903805017471,0.0276783686131239,-0.875506162643433,-0.298629522323608,-0.379880726337433,-0.721217155456543,-0.691242814064026,-0.0450457334518433,-0.755765080451965,-0.64697390794754,-0.101212374866009,-0.714125990867615,-0.699272274971008,-0.0322852060198784, 0.315534800291061,0.608373045921326,0.728230714797974,0.0310389213263988,0.339698702096939,0.940021991729736,-0.151531577110291,0.591902196407318,0.791637539863586,-0.179948955774307,0.305097907781601,0.935165047645569,-0.0883399024605751,0.440414160490036,0.89343798160553,-0.167113959789276,0.136682227253914,0.976417362689972,0.552935898303986,0.244290605187416,-0.796607792377472,0.594970345497131,0.240510985255241,-0.766918957233429,0.457004487514496,0.0586743913590908,-0.887526988983154,-0.492057383060455,-0.813641428947449,0.309624224901199,-0.673542857170105,-0.664238333702087,0.324233591556549,-0.394339233636856,-0.615044772624969,0.682800531387329,-0.107540838420391,-0.360320240259171,-0.926609039306641,0.214979261159897,-0.17779715359211,-0.96029794216156,-0.374727010726929,-0.451056748628616,-0.810016989707947,0.571531593799591,0.820161521434784,-0.026204576715827,0.808014631271362,0.548655688762665,-0.214684262871742,0.765193700790405,0.545681536197662,0.341628700494766,-0.928529560565948,-0.339161455631256,0.15100422501564,-0.494617521762848,-0.0259672924876213,-0.86872273683548,-0.926164984703064,-0.361916661262512,0.105994082987309,-0.763029158115387,0.474885076284409,0.438486844301224,-0.519362270832062,0.62650853395462,0.581162631511688,-0.505132853984833,0.614961266517639,0.605527400970459,-0.999070584774017,-0.0414997637271881,0.0116504887118936,-0.763029158115387,0.474885076284409,0.438486844301224,-0.942745447158813,-0.331097900867462,-0.040066309273243,0.148562759160995,0.479341596364975,0.864962875843048,0.0911808460950851,0.673339366912842,0.733689427375793,0.340076804161072,0.586851418018341,0.734815061092377,0.340076804161072,0.586851418018341,0.734815061092377,0.366583049297333,0.495457142591476,0.787489116191864,0.148562759160995,0.479341596364975,0.864962875843048,-0.173014774918556,0.150903835892677,0.973290264606476,-0.24175851047039,0.0892980098724365,0.966218769550323,-0.415114998817444,-0.0299451891332865,0.909276008605957,-0.11764945089817,0.119960054755211,0.985783040523529,-0.489890843629837,-0.162440925836563,0.856516182422638, -0.24175851047039,0.0892980098724365,0.966218769550323,0.320780336856842,-0.177296921610832,-0.930411577224731,0.391682207584381,0.0344884172081947,-0.919453978538513,0.387060284614563,0.0985353216528893,-0.916774332523346,0.976709187030792,0.208457589149475,-0.050838902592659,0.821033596992493,0.463092446327209,0.333840012550354,0.765193700790405,0.545681536197662,0.341628700494766,0.578510701656342,0.581528306007385,0.571970403194427,0.529006600379944,0.562984585762024,0.63498067855835,0.461020469665527,0.72527813911438,0.511303961277008,0.70020192861557,0.436750024557114,0.564771354198456,0.445416361093521,0.291170030832291,0.846654772758484,0.587356448173523,0.37003019452095,0.719784736633301,0.587356448173523,0.37003019452095,0.719784736633301,0.445416361093521,0.291170030832291,0.846654772758484,0.0771664902567863,0.0724747255444527,0.994380593299866,0.600287616252899,-0.73423707485199,0.317097216844559,-0.418209999799728,-0.452997386455536,0.787333309650421,0.410484403371811,-0.832323789596558,0.372477740049362,0.786963045597076,-0.207125172019005,-0.581195652484894,0.379243552684784,-0.345731914043427,-0.858279526233673,0.95084285736084,-0.116525217890739,-0.286914199590683,0.708127498626709,-0.297497063875198,-0.640352189540863,0.379243552684784,-0.345731914043427,-0.858279526233673,0.786963045597076,-0.207125172019005,-0.581195652484894,0.378357648849487,0.724991083145142,0.575528800487518,0.543150007724762,0.5245680809021,0.65560382604599,0.536732196807861,0.528757095336914,0.657521426677704,0.429811149835587,0.447204560041428,0.784391760826111,-0.654502868652344,-0.735222280025482,0.176278829574585,-0.590254783630371,-0.794654071331024,0.141859948635101,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.643522143363953,-0.70788186788559,0.291174322366714,-0.588989198207855,-0.775294840335846,0.228056281805038,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757,0.982406854629517, 0.078959085047245,0.121888175606728,0.989398181438446,-0.386899769306183,-0.390137135982513,0.83552473783493,-0.396454155445099,-0.508855581283569,0.764127016067505,0.154613956809044,0.104744024574757,0.982406854629517,0.524966239929199,0.447477400302887,0.72399890422821,0.591853797435761,0.480847299098969,0.646911799907684,0.078959085047245,0.121888175606728,0.989398181438446,0.600953817367554,0.56422370672226,0.566132545471191,0.591853797435761,0.480847299098969,0.646911799907684,0.524966239929199,0.447477400302887,0.72399890422821,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.0340137556195259,-0.196621879935265,-0.979889214038849,0.205058068037033,-0.244612783193588,-0.947689712047577,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881,-0.320324927568436,-0.845145165920258,0.205058068037033,-0.244612783193588,-0.947689712047577,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625,-0.39963087439537,-0.693644165992737,0.500678837299347,-0.355485200881958,-0.789272427558899,0.427927106618881,-0.320324927568436,-0.845145165920258,0.365317970514297,-0.409484475851059,-0.835981607437134,0.599293649196625,-0.39963087439537,-0.693644165992737,0.778241097927094,-0.324259251356125,-0.53777015209198,0.587996542453766,-0.370855212211609,-0.718836843967438,0.500678837299347,-0.355485200881958,-0.789272427558899,0.778241097927094,-0.324259251356125,-0.53777015209198,0.853671669960022,-0.248006701469421,-0.457970976829529,0.751961290836334,-0.373251110315323,-0.543357908725739,0.587996542453766,-0.370855212211609,-0.718836843967438,0.901673018932343,-0.243753165006638,-0.357169687747955,0.751961290836334,-0.373251110315323,-0.543357908725739,0.853671669960022,-0.248006701469421,-0.457970976829529,0.911918580532074,-0.233281582593918,-0.33761540055275,0.753405332565308,-0.651543796062469,-0.0887193456292152,0.71945708990097,-0.687020063400269,0.101906716823578,0.788194417953491,-0.590478122234344,-0.173450663685799, -0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.0595608800649643,-0.947182178497314,0.315116405487061,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00150869158096612,-0.98975282907486,0.142783313989639,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.0595608800649643,-0.947182178497314,0.315116405487061,0.274910867214203,-0.0151522560045123,0.961350321769714,0.152735993266106,0.0633700788021088,0.986233234405518,0.292623817920685,0.00810971390455961,0.956193268299103,0.359952032566071,-0.103429064154625,0.927219986915588,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.00152458809316158,-0.818883240222931,0.573958158493042,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.288185745477676,-0.458648860454559,0.840589225292206,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.0595608800649643,-0.947182178497314,0.315116405487061,-0.58903169631958,-0.6592817902565,0.467321366071701,0.536377429962158,-0.345477372407913,0.770029008388519,0.454795598983765,-0.290122002363205,0.842015504837036,0.477317273616791,-0.364241302013397,0.79968523979187,0.777780055999756,-0.164350166916847,0.606668949127197,0.833742022514343,-0.228465765714645,0.502670586109161,0.571900844573975,-0.259421706199646,0.778222262859344,0.335281848907471,0.203614771366119,0.919851660728455,0.742353081703186,0.249405577778816,0.621859073638916,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.225532427430153,-0.0723189786076546,0.971547782421112,0.274910867214203,-0.0151522560045123,0.961350321769714,0.058000672608614,-0.0229690801352263,0.998052299022675,0.63869446516037,-0.424023747444153,0.642085075378418,0.571900844573975,-0.259421706199646,0.778222262859344, 0.833742022514343,-0.228465765714645,0.502670586109161,0.804235875606537,-0.38592141866684,0.451961606740952,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.571900844573975,-0.259421706199646,0.778222262859344,0.454795598983765,-0.290122002363205,0.842015504837036,0.292623817920685,0.00810971390455961,0.956193268299103,0.335281848907471,0.203614771366119,0.919851660728455,0.477317273616791,-0.364241302013397,0.79968523979187,0.454795598983765,-0.290122002363205,0.842015504837036,0.571900844573975,-0.259421706199646,0.778222262859344,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079,0.824855744838715,-0.0143105983734131,0.565162122249603,0.537741303443909,0.6980841755867,0.472771346569061,0.458152443170547,0.667493462562561,0.586982846260071,0.280117779970169,0.669322490692139,0.688143491744995,0.403074562549591,-0.0995079353451729,0.909741222858429,0.658608675003052,-0.082901194691658,0.747905075550079,0.458152443170547,0.667493462562561,0.586982846260071,0.404132395982742,0.670274078845978,0.622422397136688,0.607683002948761,0.504087805747986,0.61369115114212,0.691345393657684,-0.0592475160956383,0.720091164112091,0.748501777648926,-0.0708362907171249,0.659338533878326,0.537741303443909,0.6980841755867,0.472771346569061,0.29329439997673,0.882676124572754,0.367234617471695,0.562915802001953,0.509836494922638,0.650532484054565,0.458152443170547,0.667493462562561,0.586982846260071,-0.0034278747625649,-0.586137890815735,0.810204088687897,0.157182320952415,-0.535330414772034,0.829888582229614,0.174659475684166,-0.296808987855911,0.938828229904175,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.058000672608614,-0.0229690801352263,0.998052299022675,-0.000558733532670885,-0.012703550979495,0.999919176101685, 0.0589314736425877,-0.0994917079806328,0.993291735649109,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.000558733532670885,-0.012703550979495,0.999919176101685,0.058000672608614,-0.0229690801352263,0.998052299022675,0.682068586349487,-0.309287667274475,0.662663996219635,0.0599330253899097,-0.274288892745972,0.95977795124054,0.536377429962158,-0.345477372407913,0.770029008388519,0.682068586349487,-0.309287667274475,0.662663996219635,0.536377429962158,-0.345477372407913,0.770029008388519,0.777780055999756,-0.164350166916847,0.606668949127197,0.404132395982742,0.670274078845978,0.622422397136688,0.748501777648926,-0.0708362907171249,0.659338533878326,0.403074562549591,-0.0995079353451729,0.909741222858429,0.280117779970169,0.669322490692139,0.688143491744995,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.0500486679375172,0.682355880737305,0.729304850101471,6.54090908938088e-005,0.672398924827576,0.740189015865326,-0.000327471556374803,-0.115864381194115,0.993264973163605,0.682068586349487,-0.309287667274475,0.662663996219635,0.691345393657684,-0.0592475160956383,0.720091164112091,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0500486679375172,0.682355880737305,0.729304850101471,0.0532422475516796,-0.0883512496948242,0.994665443897247,0.691345393657684,-0.0592475160956383,0.720091164112091,0.607683002948761,0.504087805747986,0.61369115114212,0.607683002948761,0.504087805747986,0.61369115114212,0.404132395982742,0.670274078845978,0.622422397136688,0.042865764349699,0.703626394271851,0.709275960922241,0.0500486679375172,0.682355880737305,0.729304850101471,0.875346660614014,0.271785736083984,-0.399875849485397,0.908465981483459,0.211989372968674,-0.360208302736282,0.889020264148712,0.213740766048431,-0.404917031526566,0.903672158718109,0.187046512961388,-0.385214596986771,0.66176563501358,-0.249233901500702,-0.707070529460907,0.656103849411011,-0.195678874850273,-0.728860437870026,0.205762028694153,-0.343506038188934,-0.91633266210556, 0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.727709889411926,0.17916151881218,-0.662072122097015,0.9054034948349,0.148057624697685,-0.397898882627487,0.881142616271973,0.0315838828682899,-0.471794605255127,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-0.0289378985762596,0.188017979264259,-0.981739223003387,-0.0764778554439545,-0.225456923246384,-0.971246778964996,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.101892530918121,-0.302259355783463,-0.947764337062836,0.142389953136444,-0.3092340528965,-0.940265595912933,0.605917453765869,-0.0272433757781982,-0.795060873031616,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.481532573699951,-0.766164124011993,-0.425580739974976,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.927966833114624,-0.267184227705002,0.25978872179985,0.74054491519928,0.170902013778687,-0.649912059307098,0.746655583381653,0.0161054637283087,-0.665015816688538,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.71757835149765,0.116429716348648,-0.686677098274231,0.893347382545471,0.219659432768822,-0.392020732164383, 0.942655086517334,0.280740022659302,-0.180517137050629,0.578336894512177,0.572735607624054,-0.580947756767273,0.561173915863037,0.357189118862152,-0.74665904045105,0.205762028694153,-0.343506038188934,-0.91633266210556,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.213652655482292,-0.249391734600067,-0.94454026222229,0.142389953136444,-0.3092340528965,-0.940265595912933,0.101892530918121,-0.302259355783463,-0.947764337062836,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.412438809871674,-0.450837343931198,-0.791605889797211,0.727709889411926,0.17916151881218,-0.662072122097015,0.712960124015808,-0.033335629850626,-0.700411677360535,0.238241225481033,-0.0322869308292866,-0.970669209957123,0.258906006813049,0.225121974945068,-0.939301729202271,0.798646211624146,0.188777849078178,0.571425557136536,0.810771644115448,0.203989744186401,0.54866886138916,0.562908291816711,0.161133006215096,0.810660421848297,0.694722712039948,0.104215458035469,0.711687743663788,0.516355931758881,0.769888043403625,-0.375031918287277,0.744332075119019,0.174594134092331,-0.644582509994507,0.460788071155548,0.137184977531433,-0.876843571662903,0.296686768531799,0.847575604915619,-0.439991503953934,0.306774467229843,-0.0150404367595911,0.951663374900818,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.0692291632294655,-0.189661636948586,0.97940582036972,0.054814163595438,-0.00857834424823523,0.998459756374359,0.893347382545471,0.219659432768822,-0.392020732164383,0.561173915863037,0.357189118862152,-0.74665904045105,0.892053008079529,0.256361722946167,-0.372182875871658,0.904940068721771,0.195454493165016,-0.377996027469635,-0.501008868217468,-0.341375559568405,-0.795269012451172,0.101892530918121,-0.302259355783463,-0.947764337062836,0.080341137945652,-0.401152580976486,-0.912481188774109,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.942177176475525,-0.23178243637085,0.242031067609787, -0.967553913593292,-0.25226628780365,0.0141822574660182,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.162544935941696,-0.482564568519592,0.860645413398743,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.5846186876297,-0.21980345249176,0.780965745449066,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.501008868217468,-0.341375559568405,-0.795269012451172,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.911426484584808,-0.347711831331253,-0.219996020197868,0.839759349822998,0.221470341086388,-0.495736926794052,0.892053008079529,0.256361722946167,-0.372182875871658,0.561173915863037,0.357189118862152,-0.74665904045105,0.602514207363129,0.114386186003685,-0.789868593215942,0.881142616271973,0.0315838828682899,-0.471794605255127,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.66176563501358,-0.249233901500702,-0.707070529460907,0.712960124015808,-0.033335629850626,-0.700411677360535,0.898882806301117,0.175670132040977,-0.401434540748596,0.927110075950623,-0.224742949008942,-0.299929141998291,0.939878582954407,0.179825350642204,-0.290329366922379,0.647473335266113,0.339982986450195,0.682048261165619,0.910265743732452,0.359647780656815,0.205109089612961,0.935757219791412,0.300309896469116,0.184857651591301,0.865987479686737,0.269352704286575,0.421324998140335,0.762866199016571,0.277735590934753,0.583864748477936,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.072829432785511,0.0172536037862301,0.99719512462616,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.481532573699951,-0.766164124011993,-0.425580739974976, -0.748518824577332,-0.407584488391876,-0.523062586784363,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.661673307418823,-0.718335151672363,-0.214902579784393,0.923468410968781,-0.310481667518616,0.225404515862465,0.8788041472435,-0.274041712284088,0.390646249055862,0.871811747550964,0.251815319061279,0.420158743858337,0.952159941196442,0.220857203006744,0.211219072341919,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.0648035630583763,-0.03354711830616,-0.997334003448486,-0.0289378985762596,0.188017979264259,-0.981739223003387,0.258906006813049,0.225121974945068,-0.939301729202271,0.38853245973587,0.0891766548156738,-0.917109608650208,0.25152114033699,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.216437473893166,0.0472434125840664,-0.975152730941772,0.248540058732033,0.104038745164871,-0.96301805973053,0.194792345166206,0.732599914073944,-0.65219122171402,0.296686768531799,0.847575604915619,-0.439991503953934,0.460788071155548,0.137184977531433,-0.876843571662903,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.492029935121536,-0.177097424864769,-0.852374970912933,0.080341137945652,-0.401152580976486,-0.912481188774109,0.101892530918121,-0.302259355783463,-0.947764337062836,0.492029935121536,-0.177097424864769,-0.852374970912933,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.71757835149765,0.116429716348648,-0.686677098274231,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.226662054657936,-0.126468449831009,0.965727686882019,0.682208895683289,0.033966027200222,0.730367958545685,0.694722712039948,0.104215458035469,0.711687743663788,0.489940017461777,0.0234622322022915,0.871440351009369,0.335014045238495,0.0223999582231045,0.941946804523468,0.489940017461777,0.0234622322022915,0.871440351009369,0.306774467229843,-0.0150404367595911,0.951663374900818,0.054814163595438,-0.00857834424823523,0.998459756374359, 0.335014045238495,0.0223999582231045,0.941946804523468,0.811995446681976,0.143728405237198,0.565690279006958,0.798646211624146,0.188777849078178,0.571425557136536,0.694722712039948,0.104215458035469,0.711687743663788,0.682208895683289,0.033966027200222,0.730367958545685,0.556707918643951,0.787832021713257,-0.263433039188385,0.530404925346375,0.817605495452881,-0.224035635590553,0.857278525829315,0.230919152498245,-0.460162937641144,0.856384754180908,0.207969963550568,-0.472603112459183,0.923292398452759,0.235370382666588,-0.303532481193542,0.857278525829315,0.230919152498245,-0.460162937641144,0.530404925346375,0.817605495452881,-0.224035635590553,0.535478115081787,0.838915288448334,-0.0973878055810928,0.535478115081787,0.838915288448334,-0.0973878055810928,0.539530575275421,0.836876928806305,0.092432402074337,0.97637003660202,0.214487105607986,0.0263973921537399,0.923292398452759,0.235370382666588,-0.303532481193542,0.771463513374329,0.571617126464844,0.279460042715073,0.560579180717468,0.758218228816986,0.332950711250305,0.897881627082825,0.0853674784302711,0.4318807721138,0.940263509750366,0.158270344138145,0.301421761512756,0.248540058732033,0.104038745164871,-0.96301805973053,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000970269029494375,0.721597969532013,-0.692311644554138,0.194792345166206,0.732599914073944,-0.65219122171402,0.194792345166206,0.732599914073944,-0.65219122171402,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.0328970178961754,0.677300930023193,-0.734970211982727,0.339142799377441,0.423890322446823,-0.839820921421051,0.296686768531799,0.847575604915619,-0.439991503953934,0.194792345166206,0.732599914073944,-0.65219122171402,0.339142799377441,0.423890322446823,-0.839820921421051,0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436,-0.625739872455597,0.667598783969879,0.599002242088318,-0.442163020372391,0.516355931758881,0.769888043403625,-0.375031918287277,0.296686768531799,0.847575604915619,-0.439991503953934,0.694567322731018,0.687739253044128,-0.211165577173233, 0.530404925346375,0.817605495452881,-0.224035635590553,0.556707918643951,0.787832021713257,-0.263433039188385,0.428307920694351,0.88731974363327,-0.170926719903946,0.535478115081787,0.838915288448334,-0.0973878055810928,0.530404925346375,0.817605495452881,-0.224035635590553,0.694567322731018,0.687739253044128,-0.211165577173233,0.672885239124298,0.731690943241119,-0.1088752374053,0.891434013843536,0.447212874889374,-0.0731168016791344,0.539530575275421,0.836876928806305,0.092432402074337,0.535478115081787,0.838915288448334,-0.0973878055810928,0.672885239124298,0.731690943241119,-0.1088752374053,0.648516714572906,0.651950538158417,0.392920613288879,0.560579180717468,0.758218228816986,0.332950711250305,0.771463513374329,0.571617126464844,0.279460042715073,0.539530575275421,0.836876928806305,0.092432402074337,0.891434013843536,0.447212874889374,-0.0731168016791344,0.942655086517334,0.280740022659302,-0.180517137050629,0.935757219791412,0.300309896469116,0.184857651591301,0.910265743732452,0.359647780656815,0.205109089612961,0.578336894512177,0.572735607624054,-0.580947756767273,0.977872133255005,0.203673675656319,-0.0477813258767128,0.952159941196442,0.220857203006744,0.211219072341919,0.935757219791412,0.300309896469116,0.184857651591301,0.942655086517334,0.280740022659302,-0.180517137050629,0.939878582954407,0.179825350642204,-0.290329366922379,0.977872133255005,0.203673675656319,-0.0477813258767128,0.942655086517334,0.280740022659302,-0.180517137050629,0.893347382545471,0.219659432768822,-0.392020732164383,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.633589029312134,0.43701559305191,-0.638421773910522,0.25152114033699,0.52830183506012,-0.810946524143219,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.280981153249741,-0.215777322649956,-0.935141563415527,0.248540058732033,0.104038745164871,-0.96301805973053,0.460788071155548,0.137184977531433,-0.876843571662903,0.280981153249741,-0.215777322649956,-0.935141563415527,-0.000504601746797562,-0.248110130429268,-0.968731701374054, -0.000922495266422629,0.0980329513549805,-0.995182752609253,0.248540058732033,0.104038745164871,-0.96301805973053,0.924298286437988,-0.381513595581055,0.0109577048569918,0.876497626304626,-0.393738061189651,-0.276987820863724,0.923292398452759,0.235370382666588,-0.303532481193542,0.97637003660202,0.214487105607986,0.0263973921537399,0.706851065158844,-0.181566014885902,-0.683663189411163,0.434906035661697,-0.159671977162361,-0.886206328868866,0.460788071155548,0.137184977531433,-0.876843571662903,0.744332075119019,0.174594134092331,-0.644582509994507,0.857278525829315,0.230919152498245,-0.460162937641144,0.829558193683624,-0.330268114805222,-0.450284510850906,0.837246775627136,-0.256030231714249,-0.483183532953262,0.856384754180908,0.207969963550568,-0.472603112459183,0.876497626304626,-0.393738061189651,-0.276987820863724,0.829558193683624,-0.330268114805222,-0.450284510850906,0.857278525829315,0.230919152498245,-0.460162937641144,0.923292398452759,0.235370382666588,-0.303532481193542,0.216437473893166,0.0472434125840664,-0.975152730941772,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.000504601746797562,-0.248110130429268,-0.968731701374054,0.280981153249741,-0.215777322649956,-0.935141563415527,0.38853245973587,0.0891766548156738,-0.917109608650208,0.216437473893166,0.0472434125840664,-0.975152730941772,0.280981153249741,-0.215777322649956,-0.935141563415527,0.434906035661697,-0.159671977162361,-0.886206328868866,0.706851065158844,-0.181566014885902,-0.683663189411163,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.38853245973587,0.0891766548156738,-0.917109608650208,0.434906035661697,-0.159671977162361,-0.886206328868866,0.829558193683624,-0.330268114805222,-0.450284510850906,0.848333179950714,-0.297908991575241,-0.43769970536232,0.849871397018433,-0.222601994872093,-0.477668255567551,0.837246775627136,-0.256030231714249,-0.483183532953262,0.876497626304626,-0.393738061189651,-0.276987820863724,0.927110075950623,-0.224742949008942,-0.299929141998291,0.848333179950714,-0.297908991575241,-0.43769970536232, 0.829558193683624,-0.330268114805222,-0.450284510850906,0.924298286437988,-0.381513595581055,0.0109577048569918,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.876497626304626,-0.393738061189651,-0.276987820863724,0.633589029312134,0.43701559305191,-0.638421773910522,0.644856452941895,0.422154635190964,-0.637138664722443,0.240688636898994,0.458865791559219,-0.85528427362442,0.25152114033699,0.52830183506012,-0.810946524143219,0.0464195013046265,0.499532669782639,-0.865050494670868,0.25152114033699,0.52830183506012,-0.810946524143219,0.240688636898994,0.458865791559219,-0.85528427362442,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0464195013046265,0.499532669782639,-0.865050494670868,0.0252151377499104,0.378374934196472,-0.9253089427948,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,0.881142616271973,0.0315838828682899,-0.471794605255127,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577,0.830685615539551,0.156212329864502,-0.53437727689743,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.923468410968781,-0.310481667518616,0.225404515862465,0.952159941196442,0.220857203006744,0.211219072341919,0.977872133255005,0.203673675656319,-0.0477813258767128,0.924298286437988,-0.381513595581055,0.0109577048569918,0.911828219890594,-0.323383867740631,0.252966731786728,0.923468410968781,-0.310481667518616,0.225404515862465,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.291106730699539,0.735121071338654,0.612253129482269,0.404132395982742,0.670274078845978,0.622422397136688,0.280117779970169,0.669322490692139,0.688143491744995,0.042865764349699,0.703626394271851,0.709275960922241,-7.2909109860575e-009,0.660060167312622,0.751212775707245,6.54090908938088e-005,0.672398924827576,0.740189015865326,0.0500486679375172,0.682355880737305,0.729304850101471,-0.661673307418823,-0.718335151672363,-0.214902579784393, -0.00160102033987641,-0.972155630588531,-0.234330713748932,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,-0.481532573699951,-0.766164124011993,-0.425580739974976,0.562908291816711,0.161133006215096,0.810660421848297,0.237323373556137,0.127464771270752,0.963031828403473,0.306774467229843,-0.0150404367595911,0.951663374900818,0.489940017461777,0.0234622322022915,0.871440351009369,0.562908291816711,0.161133006215096,0.810660421848297,0.489940017461777,0.0234622322022915,0.871440351009369,0.694722712039948,0.104215458035469,0.711687743663788,0.762866199016571,0.277735590934753,0.583864748477936,0.798646211624146,0.188777849078178,0.571425557136536,0.811995446681976,0.143728405237198,0.565690279006958,0.67109352350235,0.25623893737793,0.695683181285858,0.335014045238495,0.0223999582231045,0.941946804523468,0.054814163595438,-0.00857834424823523,0.998459756374359,-0.372333556413651,0.209001079201698,0.904260098934174,0.849871397018433,-0.222601994872093,-0.477668255567551,0.848333179950714,-0.297908991575241,-0.43769970536232,0.888135969638824,0.229056358337402,-0.3984315097332,0.847342550754547,0.298378229141235,-0.439296066761017,0.602514207363129,0.114386186003685,-0.789868593215942,0.561173915863037,0.357189118862152,-0.74665904045105,-0.239916190505028,0.291067600250244,-0.926131665706635,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,-0.0240183379501104,-0.0193977113813162,-0.999523282051086,0.157182320952415,-0.535330414772034,0.829888582229614,0.130942046642303,-0.413219839334488,0.901167869567871,0.235934317111969,-0.318644911050797,0.918041586875916,0.174659475684166,-0.296808987855911,0.938828229904175,0.0464195013046265,0.499532669782639,-0.865050494670868,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,0.216437473893166,0.0472434125840664,-0.975152730941772,0.939878582954407,0.179825350642204,-0.290329366922379,0.893347382545471,0.219659432768822,-0.392020732164383,0.904940068721771,0.195454493165016,-0.377996027469635, 0.898882806301117,0.175670132040977,-0.401434540748596,0.237323373556137,0.127464771270752,0.963031828403473,-0.00901283789426088,0.0965975746512413,0.995282709598541,-0.072829432785511,0.0172536037862301,0.99719512462616,0.306774467229843,-0.0150404367595911,0.951663374900818,0.746655583381653,0.0161054637283087,-0.665015816688538,0.730062305927277,-0.0445751175284386,-0.681925296783447,0.691866219043732,-0.034970335662365,-0.721178352832794,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.691866219043732,-0.034970335662365,-0.721178352832794,0.45493283867836,-0.156170472502708,-0.876725077629089,0.492029935121536,-0.177097424864769,-0.852374970912933,0.708321094512939,-0.0154764745384455,-0.705720722675323,0.492029935121536,-0.177097424864769,-0.852374970912933,0.45493283867836,-0.156170472502708,-0.876725077629089,0.0628172904253006,-0.389361083507538,-0.918940663337708,0.080341137945652,-0.401152580976486,-0.912481188774109,0.080341137945652,-0.401152580976486,-0.912481188774109,0.0628172904253006,-0.389361083507538,-0.918940663337708,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.439750492572784,-0.494966864585876,-0.749418020248413,-0.380791038274765,-0.516843378543854,-0.766727566719055,-0.772903144359589,-0.524522066116333,-0.357067674398422,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.804567158222198,-0.249711319804192,0.538809776306152,-0.927966833114624,-0.267184227705002,0.25978872179985,-0.941800832748413,-0.200851738452911,0.269573330879211,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.239916190505028,0.291067600250244,-0.926131665706635,0.561173915863037,0.357189118862152,-0.74665904045105,0.578336894512177,0.572735607624054,-0.580947756767273,-0.420213580131531,0.558342278003693,-0.715314149856567,-0.372333556413651,0.209001079201698,0.904260098934174, 0.054814163595438,-0.00857834424823523,0.998459756374359,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.226662054657936,-0.126468449831009,0.965727686882019,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.132603287696838,-0.345454096794128,0.929019808769226,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.0692291632294655,-0.189661636948586,0.97940582036972,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.58903169631958,-0.6592817902565,0.467321366071701,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.831283092498779,-0.274196267127991,0.483512967824936,-0.696818470954895,-0.717234194278717,0.00436395406723022,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.942177176475525,-0.23178243637085,0.242031067609787,-0.551685750484467,-0.802535355091095,0.227111890912056,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.162544935941696,-0.482564568519592,0.860645413398743,-0.197339624166489,-0.302571266889572,0.932473957538605,-0.230195790529251,-0.346913009881973,0.909209132194519,-0.0282435193657875,-0.397893935441971,0.916996598243713,-0.132603287696838,-0.345454096794128,0.929019808769226,0.647473335266113,0.339982986450195,0.682048261165619,0.762866199016571,0.277735590934753,0.583864748477936,0.67109352350235,0.25623893737793,0.695683181285858,0.355668604373932,0.293017596006393,0.887491166591644,-0.840525031089783,-0.0687118694186211,0.537397801876068,-0.771387696266174,0.0395333021879196,0.635136306285858,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.804567158222198,-0.249711319804192,0.538809776306152, -0.5846186876297,-0.21980345249176,0.780965745449066,-0.67518013715744,-0.23394076526165,0.699573814868927,-0.771387696266174,0.0395333021879196,0.635136306285858,0.539530575275421,0.836876928806305,0.092432402074337,0.771463513374329,0.571617126464844,0.279460042715073,0.940263509750366,0.158270344138145,0.301421761512756,0.97637003660202,0.214487105607986,0.0263973921537399,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.058000672608614,-0.0229690801352263,0.998052299022675,0.274910867214203,-0.0151522560045123,0.961350321769714,0.359952032566071,-0.103429064154625,0.927219986915588,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.174659475684166,-0.296808987855911,0.938828229904175,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.000567267881706357,0.0375262796878815,0.999295473098755,0.174659475684166,-0.296808987855911,0.938828229904175,0.235934317111969,-0.318644911050797,0.918041586875916,0.225532427430153,-0.0723189786076546,0.971547782421112,0.0951899439096451,-0.0263954158872366,0.995109081268311,0.099254384636879,-0.0100136240944266,0.995011687278748,0.225532427430153,-0.0723189786076546,0.971547782421112,0.235934317111969,-0.318644911050797,0.918041586875916,0.0292022190988064,-0.160741657018662,0.98656439781189,0.157182320952415,-0.535330414772034,0.829888582229614,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00152458809316158,-0.818883240222931,0.573958158493042,0.0370258577167988,-0.771627187728882,0.63499653339386,0.130942046642303,-0.413219839334488,0.901167869567871,0.157182320952415,-0.535330414772034,0.829888582229614,0.0370258577167988,-0.771627187728882,0.63499653339386,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.0289378985762596,0.188017979264259,-0.981739223003387,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,-0.00141350529156625,0.303659945726395,-0.952779412269592,-0.0289378985762596,0.188017979264259,-0.981739223003387,-0.00141350529156625,0.303659945726395,-0.952779412269592, 0.234113991260529,0.373340249061584,-0.89766788482666,0.258906006813049,0.225121974945068,-0.939301729202271,0.696373343467712,0.309285789728165,-0.647616028785706,0.727709889411926,0.17916151881218,-0.662072122097015,0.258906006813049,0.225121974945068,-0.939301729202271,0.234113991260529,0.373340249061584,-0.89766788482666,0.727709889411926,0.17916151881218,-0.662072122097015,0.696373343467712,0.309285789728165,-0.647616028785706,0.903672158718109,0.187046512961388,-0.385214596986771,0.9054034948349,0.148057624697685,-0.397898882627487,0.862718880176544,0.197039529681206,-0.465716183185577,0.9054034948349,0.148057624697685,-0.397898882627487,0.903672158718109,0.187046512961388,-0.385214596986771,0.889020264148712,0.213740766048431,-0.404917031526566,0.696373343467712,0.309285789728165,-0.647616028785706,0.644856452941895,0.422154635190964,-0.637138664722443,0.875346660614014,0.271785736083984,-0.399875849485397,0.903672158718109,0.187046512961388,-0.385214596986771,0.644856452941895,0.422154635190964,-0.637138664722443,0.696373343467712,0.309285789728165,-0.647616028785706,0.234113991260529,0.373340249061584,-0.89766788482666,0.240688636898994,0.458865791559219,-0.85528427362442,0.240688636898994,0.458865791559219,-0.85528427362442,0.234113991260529,0.373340249061584,-0.89766788482666,-0.00141350529156625,0.303659945726395,-0.952779412269592,0.0252151377499104,0.378374934196472,-0.9253089427948,0.0252151377499104,0.378374934196472,-0.9253089427948,-0.00141350529156625,0.303659945726395,-0.952779412269592,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,9.78030900711246e-009,0.344052970409393,-0.93895024061203,0.335281848907471,0.203614771366119,0.919851660728455,0.292623817920685,0.00810971390455961,0.956193268299103,0.152735993266106,0.0633700788021088,0.986233234405518,0.144889816641808,0.162904694676399,0.975945174694061,0.742353081703186,0.249405577778816,0.621859073638916,0.335281848907471,0.203614771366119,0.919851660728455,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297, 0.952159941196442,0.220857203006744,0.211219072341919,0.871811747550964,0.251815319061279,0.420158743858337,0.865987479686737,0.269352704286575,0.421324998140335,0.935757219791412,0.300309896469116,0.184857651591301,0.633589029312134,0.43701559305191,-0.638421773910522,0.847342550754547,0.298378229141235,-0.439296066761017,0.875346660614014,0.271785736083984,-0.399875849485397,0.644856452941895,0.422154635190964,-0.637138664722443,0.837246775627136,-0.256030231714249,-0.483183532953262,0.849871397018433,-0.222601994872093,-0.477668255567551,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.706851065158844,-0.181566014885902,-0.683663189411163,0.837246775627136,-0.256030231714249,-0.483183532953262,0.706851065158844,-0.181566014885902,-0.683663189411163,0.744332075119019,0.174594134092331,-0.644582509994507,0.856384754180908,0.207969963550568,-0.472603112459183,0.516355931758881,0.769888043403625,-0.375031918287277,0.556707918643951,0.787832021713257,-0.263433039188385,0.856384754180908,0.207969963550568,-0.472603112459183,0.744332075119019,0.174594134092331,-0.644582509994507,0.428307920694351,0.88731974363327,-0.170926719903946,0.556707918643951,0.787832021713257,-0.263433039188385,0.516355931758881,0.769888043403625,-0.375031918287277,0.667598783969879,0.599002242088318,-0.442163020372391,0.711495935916901,-0.0537417083978653,-0.700632095336914,0.849871397018433,-0.222601994872093,-0.477668255567551,0.847342550754547,0.298378229141235,-0.439296066761017,0.633589029312134,0.43701559305191,-0.638421773910522,-0.0764778554439545,-0.225456923246384,-0.971246778964996,-0.0648035630583763,-0.03354711830616,-0.997334003448486,0.238241225481033,-0.0322869308292866,-0.970669209957123,0.213652655482292,-0.249391734600067,-0.94454026222229,0.712960124015808,-0.033335629850626,-0.700411677360535,0.66176563501358,-0.249233901500702,-0.707070529460907,0.213652655482292,-0.249391734600067,-0.94454026222229,0.238241225481033,-0.0322869308292866,-0.970669209957123,-0.154773816466331,-0.473390430212021,-0.867148518562317, 1.08000335785619e-007,-0.503708183765411,-0.863873839378357,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,-0.0764778554439545,-0.225456923246384,-0.971246778964996,0.152735993266106,0.0633700788021088,0.986233234405518,0.274910867214203,-0.0151522560045123,0.961350321769714,0.225532427430153,-0.0723189786076546,0.971547782421112,0.099254384636879,-0.0100136240944266,0.995011687278748,0.152735993266106,0.0633700788021088,0.986233234405518,0.099254384636879,-0.0100136240944266,0.995011687278748,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.144889816641808,0.162904694676399,0.975945174694061,0.562908291816711,0.161133006215096,0.810660421848297,0.144889816641808,0.162904694676399,0.975945174694061,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.237323373556137,0.127464771270752,0.963031828403473,0.8788041472435,-0.274041712284088,0.390646249055862,0.923468410968781,-0.310481667518616,0.225404515862465,0.911828219890594,-0.323383867740631,0.252966731786728,0.86302787065506,-0.341093569993973,0.372609823942184,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.661673307418823,-0.718335151672363,-0.214902579784393,-0.696818470954895,-0.717234194278717,0.00436395406723022,0.839759349822998,0.221470341086388,-0.495736926794052,0.737981557846069,0.239907741546631,-0.630735695362091,0.754355251789093,0.176875531673431,-0.632189214229584,0.830685615539551,0.156212329864502,-0.53437727689743,0.0292022190988064,-0.160741657018662,0.98656439781189,0.235934317111969,-0.318644911050797,0.918041586875916,0.130942046642303,-0.413219839334488,0.901167869567871,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.176305994391441,-0.141984179615974,0.974041402339935,0.130942046642303,-0.413219839334488,0.901167869567871,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.314308881759644,-0.16680882871151,0.934550523757935,-0.594752132892609,-0.34540992975235,0.725921392440796,-0.230195790529251,-0.346913009881973,0.909209132194519, -0.314308881759644,-0.16680882871151,0.934550523757935,-0.288185745477676,-0.458648860454559,0.840589225292206,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.099254384636879,-0.0100136240944266,0.995011687278748,0.0292022190988064,-0.160741657018662,0.98656439781189,0.865987479686737,0.269352704286575,0.421324998140335,0.810771644115448,0.203989744186401,0.54866886138916,0.798646211624146,0.188777849078178,0.571425557136536,0.762866199016571,0.277735590934753,0.583864748477936,0.865987479686737,0.269352704286575,0.421324998140335,0.871811747550964,0.251815319061279,0.420158743858337,0.742353081703186,0.249405577778816,0.621859073638916,0.810771644115448,0.203989744186401,0.54866886138916,0.8788041472435,-0.274041712284088,0.390646249055862,0.833742022514343,-0.228465765714645,0.502670586109161,0.742353081703186,0.249405577778816,0.621859073638916,0.871811747550964,0.251815319061279,0.420158743858337,0.833742022514343,-0.228465765714645,0.502670586109161,0.8788041472435,-0.274041712284088,0.390646249055862,0.86302787065506,-0.341093569993973,0.372609823942184,0.804235875606537,-0.38592141866684,0.451961606740952,0.560579180717468,0.758218228816986,0.332950711250305,0.537741303443909,0.6980841755867,0.472771346569061,0.824855744838715,-0.0143105983734131,0.565162122249603,0.897881627082825,0.0853674784302711,0.4318807721138,0.560579180717468,0.758218228816986,0.332950711250305,0.648516714572906,0.651950538158417,0.392920613288879,0.29329439997673,0.882676124572754,0.367234617471695,0.537741303443909,0.6980841755867,0.472771346569061,-0.431082636117935,0.669595658779144,0.604821860790253,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.60768449306488,0.504088938236237,0.613688766956329,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.775685489177704,-0.0603891722857952,0.628223836421967, -0.431082636117935,0.669595658779144,0.604821860790253,-0.324628859758377,0.674010813236237,0.663570284843445,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.300837725400925,0.085910752415657,0.949797868728638,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.300837725400925,0.085910752415657,0.949797868728638,-0.542048811912537,0.261238425970078,0.79870992898941,-0.46170049905777,0.186353012919426,0.867240011692047,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.517962217330933,-0.411119759082794,0.750130414962769,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.60768449306488,0.504088938236237,0.613688766956329,-0.690265357494354,-0.0591067634522915,0.721138119697571,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.60768449306488,0.504088938236237,0.613688766956329,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.431082636117935,0.669595658779144,0.604821860790253,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.927313208580017,0.3043152987957,-0.217904642224312, -0.945763826370239,0.294518440961838,-0.137075424194336,-0.907857835292816,0.213884130120277,-0.360621273517609,0.804645359516144,-0.23887425661087,0.543585240840912,0.928109109401703,-0.270218104124069,0.256116449832916,0.942616164684296,-0.229998171329498,0.242023915052414,0.821004927158356,-0.27689054608345,0.499282002449036,-0.0987945944070816,-0.283014118671417,-0.95401394367218,0.498120248317719,-0.335890352725983,-0.799408435821533,0.437422394752502,-0.487632155418396,-0.755563676357269,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.129383936524391,-0.521730244159698,-0.843242168426514,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.213652208447456,-0.249391779303551,-0.944540321826935,0.0764780566096306,-0.225457280874252,-0.971246659755707,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.762536406517029,0.295603901147842,-0.57546204328537,-0.896749377250671,0.217612341046333,0.3853380382061,-0.857216417789459,0.268806040287018,0.43923032283783,-0.937493622303009,0.316276133060455,0.145172759890556,-0.947259664535522,0.288537085056305,0.139446943998337,-0.168157458305359,0.0816780477762222,0.982370495796204,-0.46170049905777,0.186353012919426,0.867240011692047,-0.19649812579155,0.101020708680153,0.975286245346069,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.937493622303009,0.316276133060455,0.145172759890556,-0.857216417789459,0.268806040287018,0.43923032283783,-0.856140553951263,0.267054259777069,0.442386031150818, -0.949352085590363,0.231479719281197,0.21248009800911,0.0648036450147629,-0.0335458181798458,-0.997334063053131,0.0289377775043249,0.188017472624779,-0.981739282608032,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.258904993534088,0.225121468305588,-0.939302146434784,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.879550158977509,0.255253672599792,-0.401543378829956,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.756916880607605,0.234977602958679,0.609805166721344,-0.623560965061188,0.103526078164577,0.774889707565308,-0.76946359872818,0.151790544390678,0.620391309261322,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.937403380870819,0.166482493281364,0.305873274803162,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.560215890407562,0.757637023925781,0.334879487752914,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.199406370520592,0.723391234874725,-0.66101610660553, -0.249231114983559,0.10294646769762,-0.962956845760345,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.000970269029494375,0.721597969532013,-0.692311644554138,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.0328970178961754,0.677300930023193,-0.734970211982727,-0.199406370520592,0.723391234874725,-0.66101610660553,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.224544212222099,0.65578031539917,-0.720785677433014,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.595847427845001,0.771685659885406,-0.222411975264549,-0.560297548770905,0.801149368286133,-0.210300549864769,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.677902281284332,0.724911689758301,-0.122276462614536,-0.557936251163483,0.826133012771606,-0.0788124948740005,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.721357464790344,0.650649428367615,0.237273663282394,-0.885142028331757,0.459607869386673,-0.072692796587944,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.557555019855499,0.7959104180336,0.235921680927277,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.937403380870819,0.166482493281364,0.305873274803162,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.000922495266422629,0.0980329513549805,-0.995182752609253,-0.000504601746797562,-0.248110130429268,-0.968731701374054,-0.217749357223511,0.0478734634816647,-0.974829912185669, -0.282345056533813,-0.215331554412842,-0.934833467006683,-0.000504601746797562,-0.248110130429268,-0.968731701374054,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.249231114983559,0.10294646769762,-0.962956845760345,-0.282345056533813,-0.215331554412842,-0.934833467006683,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.251288145780563,0.529204964637756,-0.810429751873016,0.129383936524391,-0.521730244159698,-0.843242168426514,0.0764780566096306,-0.225457280874252,-0.971246659755707,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.847580134868622,0.196702495217323,-0.492865085601807, -0.869192600250244,0.256745725870132,-0.422594249248505,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.122972406446934,-0.410810470581055,-0.903389453887939,0.129383936524391,-0.521730244159698,-0.843242168426514,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.949352085590363,0.231479719281197,0.21248009800911,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.937493622303009,0.316276133060455,0.145172759890556,-0.937493622303009,0.316276133060455,0.145172759890556,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.947259664535522,0.288537085056305,0.139446943998337,-0.0428657233715057,0.703625798225403,0.709276556968689,-0.0499880313873291,0.682301819324493,0.72935962677002,6.54090908938088e-005,0.672398924827576,0.740189015865326,-7.2909109860575e-009,0.660060167312622,0.751212775707245,-0.775685489177704,-0.0603891722857952,0.628223836421967,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.46170049905777,0.186353012919426,0.867240011692047,-0.56521064043045,0.138002142310143,0.813321769237518,-0.19649812579155,0.101020708680153,0.975286245346069,-0.916763663291931,0.137710228562355,0.374940365552902,-0.91884845495224,0.158920049667358,0.361195176839828,-0.756916880607605,0.234977602958679,0.609805166721344,-0.76946359872818,0.151790544390678,0.620391309261322,-0.34188050031662,0.0427594222128391,0.938770115375519,0.372333496809006,0.209000527858734,0.904260218143463,0.119991220533848,0.0380257852375507,0.992046475410461,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.934890508651733,-0.354153573513031,-0.0235587190836668, -0.930424094200134,-0.303478807210922,0.205454647541046,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.937403380870819,0.166482493281364,0.305873274803162,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.924633741378784,-0.380622237920761,-0.0133865028619766,-0.918076574802399,-0.319764405488968,0.234277844429016,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536,0.734110653400421,-0.4181247651577,-0.535026371479034,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.19649812579155,0.101020708680153,0.975286245346069,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.56521064043045,0.138002142310143,0.813321769237518,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.19649812579155,0.101020708680153,0.975286245346069,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.56521064043045,0.138002142310143,0.813321769237518,-0.791948556900024,0.189529091119766,0.580427587032318,-0.76946359872818,0.151790544390678,0.620391309261322,-0.896749377250671,0.217612341046333,0.3853380382061,-0.916763663291931,0.137710228562355,0.374940365552902,-0.76946359872818,0.151790544390678,0.620391309261322,-0.791948556900024,0.189529091119766,0.580427587032318,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.747396409511566,0.179795786738396,-0.639587461948395,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.693207740783691,0.00517747504636645,-0.720719218254089,-0.736777663230896,0.0245511569082737,-0.675689220428467,-0.757742166519165,0.0436116605997086,-0.6510950922966,-0.0824775397777557,-0.385316282510757,-0.919091284275055,0.437422394752502,-0.487632155418396,-0.755563676357269,0.381186455488205,-0.513081967830658,-0.769053816795349, -0.0642701610922813,-0.378672003746033,-0.923296749591827,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.767184436321259,-0.520890653133392,-0.374300688505173,0.834830164909363,-0.436789900064468,-0.335072010755539,0.804645359516144,-0.23887425661087,0.543585240840912,0.840525209903717,-0.068711943924427,0.537397503852844,0.943277299404144,-0.202248081564903,0.263293832540512,0.928109109401703,-0.270218104124069,0.256116449832916,0.804645359516144,-0.23887425661087,0.543585240840912,0.821004927158356,-0.27689054608345,0.499282002449036,0.555963099002838,-0.328692525625229,0.76345682144165,0.6691654920578,-0.191945850849152,0.717895746231079,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.916763663291931,0.137710228562355,0.374940365552902,-0.896749377250671,0.217612341046333,0.3853380382061,-0.947259664535522,0.288537085056305,0.139446943998337,0.372333496809006,0.209000527858734,0.904260218143463,0.369765430688858,-0.00654551573097706,0.929102063179016,0.119991220533848,0.0380257852375507,0.992046475410461,0.166143178939819,-0.158774629235268,0.973235368728638,0.119991220533848,0.0380257852375507,0.992046475410461,0.369765430688858,-0.00654551573097706,0.929102063179016,0.555963099002838,-0.328692525625229,0.76345682144165,0.821004927158356,-0.27689054608345,0.499282002449036,0.569704055786133,-0.669814586639404,0.476220279932022,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022,0.821004927158356,-0.27689054608345,0.499282002449036,0.942616164684296,-0.229998171329498,0.242023915052414,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535,0.00657681748270988,0.552965581417084,-0.801727950572968,0.226851031184196,0.942616164684296,-0.229998171329498,0.242023915052414,0.969441294670105,-0.244898587465286,0.0144304987043142,0.320217043161392,-0.31071874499321,0.894938468933105,0.571035802364349,-0.157328203320503,0.805708348751068,0.6691654920578,-0.191945850849152,0.717895746231079,0.555963099002838,-0.328692525625229,0.76345682144165, 0.771388173103333,0.0395334213972092,0.63513571023941,0.840525209903717,-0.068711943924427,0.537397503852844,0.804645359516144,-0.23887425661087,0.543585240840912,0.6691654920578,-0.191945850849152,0.717895746231079,0.571035802364349,-0.157328203320503,0.805708348751068,0.771388173103333,0.0395334213972092,0.63513571023941,0.6691654920578,-0.191945850849152,0.717895746231079,-0.539918065071106,0.836612343788147,0.0925649628043175,-0.975579440593719,0.218437165021896,0.0230220295488834,-0.937403380870819,0.166482493281364,0.305873274803162,-0.557555019855499,0.7959104180336,0.235921680927277,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.23646841943264,-0.0167027618736029,0.971495628356934,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.29104819893837,-0.456484824419022,0.840780913829803,0.569704055786133,-0.669814586639404,0.476220279932022,0.0579886250197887,-0.947378635406494,0.314819037914276,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276,0.552965581417084,-0.801727950572968,0.226851031184196,-0.00150869158096612,-0.98975282907486,0.142783313989639,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.000327471556374803,-0.115864381194115,0.993264973163605,6.54090908938088e-005,0.672398924827576,0.740189015865326,-0.0499880313873291,0.682301819324493,0.72935962677002,-0.0535679198801517,-0.0883782878518105,0.994645535945892,-0.000327471556374803,-0.115864381194115,0.993264973163605,-0.0535679198801517,-0.0883782878518105,0.994645535945892, -0.0607370398938656,-0.274085581302643,0.959785461425781,-0.00104101200122386,-0.114976294338703,0.993367731571198,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.00127162621356547,-0.241362497210503,0.970434188842773,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0412573479115963,-0.771816492080688,0.634505391120911,0.0579886250197887,-0.947378635406494,0.314819037914276,-7.15617352398112e-005,-0.950459361076355,0.310848772525787,-0.00152458809316158,-0.818883240222931,0.573958158493042,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.296950221061707,-0.0679281502962112,0.952473819255829,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.0607370398938656,-0.274085581302643,0.959785461425781,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.0599461607635021,-0.0994156152009964,0.993238627910614,-0.0589147843420506,-0.0217308606952429,0.998026490211487,-0.000558733532670885,-0.012703550979495,0.999919176101685,-0.00124295917339623,-0.0901384949684143,0.995928466320038,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.00127162621356547,-0.241362497210503,0.970434188842773,0.000567267881706357,0.0375262796878815,0.999295473098755,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.173607736825943,-0.299605935811996,0.938134670257568,-0.0940853953361511,-0.0260460525751114,0.995223343372345,-0.223823264241219,-0.0781873688101768,0.971488475799561,-9.64683522397536e-007,0.150016367435455,-0.988683521747589,0.0289377775043249,0.188017472624779,-0.981739282608032, 0.00141346117015928,0.303658157587051,-0.95278000831604,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,0.0289377775043249,0.188017472624779,-0.981739282608032,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.234113723039627,0.373339533805847,-0.897668302059174,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.911240935325623,0.185407862067223,-0.367782354354858,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.0252151340246201,0.378374934196472,-0.9253089427948,0.00141346117015928,0.303658157587051,-0.95278000831604,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.81538712978363,-0.2979336977005,-0.496366053819656,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.832928359508514,0.179307460784912,-0.523525714874268,-0.535965800285339,0.788156151771545,-0.30257323384285,-0.336488217115402,0.925924956798553,-0.17157706618309,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.535965800285339,0.788156151771545,-0.30257323384285, 0.0764780566096306,-0.225457280874252,-0.971246659755707,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-3.70855048004159e-007,-0.0389081388711929,-0.999242782592773,1.25483495594381e-007,-0.219631806015968,-0.975582838058472,0.0764780566096306,-0.225457280874252,-0.971246659755707,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.238240316510201,-0.0322862826287746,-0.970669448375702,0.0648036450147629,-0.0335458181798458,-0.997334063053131,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.0642701610922813,-0.378672003746033,-0.923296749591827,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.0824775397777557,-0.385316282510757,-0.919091284275055,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.11159410327673,-0.287050694227219,-0.951393008232117,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.122972406446934,-0.410810470581055,-0.903389453887939,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.213652208447456,-0.249391779303551,-0.944540321826935,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.258904993534088,0.225121468305588,-0.939302146434784,-0.238240316510201,-0.0322862826287746,-0.970669448375702,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.234113723039627,0.373339533805847,-0.897668302059174, -0.258904993534088,0.225121468305588,-0.939302146434784,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.234113723039627,0.373339533805847,-0.897668302059174,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.240688547492027,0.458865880966187,-0.855284214019775,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.690211474895477,-0.193527087569237,-0.69724839925766,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.434679806232452,-0.159963503479958,-0.886264741420746,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.460297226905823,0.136182025074959,-0.877257645130157,-0.706996381282806,0.174120202660561,-0.685447514057159,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.363279938697815,0.743713617324829,-0.561175346374512,-0.486983984708786,0.772737681865692,-0.407090991735458,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.00152458809316158,-0.818883240222931,0.573958158493042,-0.0034278747625649,-0.586137890815735,0.810204088687897,-0.160209238529205,-0.537021696567535,0.828215360641479,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0412573479115963,-0.771816492080688,0.634505391120911,-0.160209238529205,-0.537021696567535,0.828215360641479,-0.0504573062062263,-0.359267920255661,0.931869447231293,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.51021933555603,-0.415738612413406,0.752886176109314, -0.459984451532364,-0.0801213979721069,0.884304702281952,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.459984451532364,-0.0801213979721069,0.884304702281952,-0.324628859758377,0.674010813236237,0.663570284843445,-0.47534304857254,0.696664929389954,0.537314653396606,-0.285846680402756,0.740470588207245,0.608272194862366,-0.559998273849487,0.512845575809479,0.65068531036377,-0.47534304857254,0.696664929389954,0.537314653396606,-0.324628859758377,0.674010813236237,0.663570284843445,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.834647357463837,0.36496365070343,-0.412511020898819,-0.849872410297394,-0.222603037953377,-0.477665901184082,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.710737705230713,-0.0530968047678471,-0.701450347900391,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.388578176498413,0.0904658958315849,-0.916963994503021,-0.217749357223511,0.0478734634816647,-0.974829912185669,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.251288145780563,0.529204964637756,-0.810429751873016,-0.0466683618724346,0.500033855438232,-0.864747524261475,-0.217749357223511,0.0478734634816647,-0.974829912185669,1.06040135960939e-006,-0.00336454622447491,-0.999994337558746,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.836360037326813,-0.0850801542401314,-0.541537880897522, -0.798387050628662,0.133906185626984,-0.587066650390625,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.762536406517029,0.295603901147842,-0.57546204328537,-0.847580134868622,0.196702495217323,-0.492865085601807,-0.798387050628662,0.133906185626984,-0.587066650390625,0.913829922676086,-0.341083079576492,-0.220402225852013,0.663747429847717,-0.717649459838867,-0.210757240653038,0.698322951793671,-0.715752601623535,0.00657681748270988,0.969441294670105,-0.244898587465286,0.0144304987043142,0.437422394752502,-0.487632155418396,-0.755563676357269,0.834830164909363,-0.436789900064468,-0.335072010755539,0.767184436321259,-0.520890653133392,-0.374300688505173,0.381186455488205,-0.513081967830658,-0.769053816795349,0.734110653400421,-0.4181247651577,-0.535026371479034,0.913829922676086,-0.341083079576492,-0.220402225852013,0.834830164909363,-0.436789900064468,-0.335072010755539,0.437422394752502,-0.487632155418396,-0.755563676357269,0.498120248317719,-0.335890352725983,-0.799408435821533,0.663747429847717,-0.717649459838867,-0.210757240653038,0.913829922676086,-0.341083079576492,-0.220402225852013,0.734110653400421,-0.4181247651577,-0.535026371479034,0.471433281898499,-0.76721602678299,-0.434891045093536,-0.0466683618724346,0.500033855438232,-0.864747524261475,-1.63649360729323e-008,0.470822811126709,-0.882227778434753,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-0.0252151340246201,0.378374934196472,-0.9253089427948,-0.0252151340246201,0.378374934196472,-0.9253089427948,9.78030900711246e-009,0.344052970409393,-0.93895024061203,-5.31019793470477e-007,0.257037252187729,-0.966401517391205,0.00141346117015928,0.303658157587051,-0.95278000831604,0.129383936524391,-0.521730244159698,-0.843242168426514,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,0.252460122108459,-0.750463306903839,-0.61079353094101,0.471433281898499,-0.76721602678299,-0.434891045093536,0.252460122108459,-0.750463306903839,-0.61079353094101,3.42403474462571e-008,-0.837808728218079,-0.545963823795319, -7.64812035924933e-009,-0.930018723011017,-0.367512226104736,0.663747429847717,-0.717649459838867,-0.210757240653038,0.471433281898499,-0.76721602678299,-0.434891045093536,-7.64812035924933e-009,-0.930018723011017,-0.367512226104736,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,0.698322951793671,-0.715752601623535,0.00657681748270988,0.663747429847717,-0.717649459838867,-0.210757240653038,-0.00160102033987641,-0.972155630588531,-0.234330713748932,-0.00293796602636576,-0.999473214149475,-0.0323209837079048,-0.00150869158096612,-0.98975282907486,0.142783313989639,0.552965581417084,-0.801727950572968,0.226851031184196,0.698322951793671,-0.715752601623535,0.00657681748270988,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.851074159145355,0.339823096990585,-0.400241255760193,-0.654150426387787,0.449408560991287,-0.608374178409576,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.889981806278229,0.204838335514069,-0.407398611307144,-0.6525519490242,0.396776258945465,-0.645557582378387,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.909943282604218,0.190858140587807,-0.368207067251205,-0.705344617366791,0.3143090903759,-0.635372936725616,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.908670663833618,0.161942407488823,-0.384827554225922,-0.729262590408325,0.181498125195503,-0.659723043441772,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.893712103366852,0.0450193509459496,-0.446376502513886,-0.710200548171997,-0.0193932019174099,-0.703732252120972,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.658169209957123,-0.236423432826996,-0.714784801006317,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.714573800563812,0.00537209678441286,-0.699539422988892, -0.715955674648285,0.135700687766075,-0.684830486774445,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.453366041183472,-0.142135575413704,-0.879918575286865,-0.693207740783691,0.00517747504636645,-0.720719218254089,-0.714573800563812,0.00537209678441286,-0.699539422988892,-0.493558466434479,-0.160849839448929,-0.854708909988403,-0.798387050628662,0.133906185626984,-0.587066650390625,-0.836360037326813,-0.0850801542401314,-0.541537880897522,-0.647741854190826,-0.201575800776482,-0.7347092628479,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.721792817115784,0.204645067453384,-0.661162257194519,0.166143178939819,-0.158774629235268,0.973235368728638,0.0323158428072929,-0.124152012169361,0.991736829280853,-0.14869236946106,-0.0228312611579895,0.988619923591614,0.119991220533848,0.0380257852375507,0.992046475410461,-0.34188050031662,0.0427594222128391,0.938770115375519,0.119991220533848,0.0380257852375507,0.992046475410461,-0.14869236946106,-0.0228312611579895,0.988619923591614,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.0504573062062263,-0.359267920255661,0.931869447231293,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.0969914272427559,-0.0219030473381281,0.99504417181015,0.0323158428072929,-0.124152012169361,0.991736829280853,0.29104819893837,-0.456484824419022,0.840780913829803,-0.0504573062062263,-0.359267920255661,0.931869447231293,0.0323158428072929,-0.124152012169361,0.991736829280853,0.166143178939819,-0.158774629235268,0.973235368728638,0.29104819893837,-0.456484824419022,0.840780913829803,0.166143178939819,-0.158774629235268,0.973235368728638,0.244560360908508,-0.223172500729561,0.943601787090302,0.320217043161392,-0.31071874499321,0.894938468933105,0.555963099002838,-0.328692525625229,0.76345682144165,-0.223823264241219,-0.0781873688101768,0.971488475799561,-0.0969914272427559,-0.0219030473381281,0.99504417181015,-0.201071664690971,-0.27305468916893,0.940750420093536,-0.896749377250671,0.217612341046333,0.3853380382061, -0.791948556900024,0.189529091119766,0.580427587032318,-0.857216417789459,0.268806040287018,0.43923032283783,-0.542048811912537,0.261238425970078,0.79870992898941,-0.856140553951263,0.267054259777069,0.442386031150818,-0.857216417789459,0.268806040287018,0.43923032283783,-0.46170049905777,0.186353012919426,0.867240011692047,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.560215890407562,0.757637023925781,0.334879487752914,-0.89384138584137,0.0922480821609497,0.438791304826736,-0.722804188728333,-0.031068803742528,0.690354108810425,-0.47534304857254,0.696664929389954,0.537314653396606,-0.559998273849487,0.512845575809479,0.65068531036377,-0.658022820949554,0.640722334384918,0.395576566457748,-0.560215890407562,0.757637023925781,0.334879487752914,-0.47534304857254,0.696664929389954,0.537314653396606,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.915939331054688,0.209013342857361,-0.342590838670731,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.889225006103516,0.236249953508377,-0.391745924949646,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.848252356052399,-0.297393381595612,-0.438206702470779,-0.898467183113098,-0.361167401075363,-0.249629408121109,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.876467823982239,-0.40311262011528,-0.263257294893265,-0.938374042510986,0.216587886214256,-0.269339561462402,-0.882979989051819,0.18293422460556,-0.432297796010971,-0.822116851806641,-0.369756579399109,-0.432901799678802,-0.947259664535522,0.288537085056305,0.139446943998337,-0.927313208580017,0.3043152987957,-0.217904642224312,-0.981611013412476,0.117763727903366,-0.150238215923309, -0.985917925834656,0.0740947499871254,0.149919137358665,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.988040089607239,-0.0323765277862549,0.150760009884834,-0.91884845495224,0.158920049667358,0.361195176839828,-0.916763663291931,0.137710228562355,0.374940365552902,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.890709757804871,0.27239003777504,-0.363922744989395,-0.985917925834656,0.0740947499871254,0.149919137358665,-0.981611013412476,0.117763727903366,-0.150238215923309,-0.997650623321533,0.0179209169000387,-0.0661220476031303,-0.988040089607239,-0.0323765277862549,0.150760009884834,-0.91725742816925,0.217973545193672,-0.333356142044067,-0.894481837749481,0.206879526376724,-0.396362364292145,-0.869192600250244,0.256745725870132,-0.422594249248505,-0.890709757804871,0.27239003777504,-0.363922744989395,0.928109109401703,-0.270218104124069,0.256116449832916,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.969441294670105,-0.244898587465286,0.0144304987043142,0.942616164684296,-0.229998171329498,0.242023915052414,0.536377429962158,-0.345477372407913,0.770029008388519,0.359952032566071,-0.103429064154625,0.927219986915588,0.292623817920685,0.00810971390455961,0.956193268299103,0.454795598983765,-0.290122002363205,0.842015504837036,0.0599330253899097,-0.274288892745972,0.95977795124054,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.359952032566071,-0.103429064154625,0.927219986915588,0.536377429962158,-0.345477372407913,0.770029008388519,-0.00104101200122386,-0.114976294338703,0.993367731571198,-0.00124295917339623,-0.0901384949684143,0.995928466320038,0.0589314736425877,-0.0994917079806328,0.993291735649109,0.0599330253899097,-0.274288892745972,0.95977795124054,-0.526136100292206,-0.358043670654297,0.77135306596756,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.300837725400925,0.085910752415657,0.949797868728638,-0.296950221061707,-0.0679281502962112,0.952473819255829, -0.480668127536774,-0.309450268745422,0.820486843585968,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.542048811912537,0.261238425970078,0.79870992898941,-0.300837725400925,0.085910752415657,0.949797868728638,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.856140553951263,0.267054259777069,0.442386031150818,-0.542048811912537,0.261238425970078,0.79870992898941,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.949352085590363,0.231479719281197,0.21248009800911,-0.856140553951263,0.267054259777069,0.442386031150818,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.934890508651733,-0.354153573513031,-0.0235587190836668,-0.977315187454224,0.206456959247589,-0.0472285002470016,-0.949352085590363,0.231479719281197,0.21248009800911,0.166143178939819,-0.158774629235268,0.973235368728638,0.369765430688858,-0.00654551573097706,0.929102063179016,0.244560360908508,-0.223172500729561,0.943601787090302,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.967553913593292,-0.25226628780365,0.0141822574660182,-0.911426484584808,-0.347711831331253,-0.219996020197868,-0.837089002132416,-0.441800951957703,-0.322635918855667,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.834830164909363,-0.436789900064468,-0.335072010755539,0.913829922676086,-0.341083079576492,-0.220402225852013,0.969441294670105,-0.244898587465286,0.0144304987043142,0.927110075950623,-0.224742949008942,-0.299929141998291,0.935387670993805,-0.353589057922363,-0.0049727950245142,0.977872133255005,0.203673675656319,-0.0477813258767128,0.939878582954407,0.179825350642204,-0.290329366922379,-0.939296424388886,0.188786894083023,-0.286498993635178,-0.907857835292816,0.213884130120277,-0.360621273517609,-0.945763826370239,0.294518440961838,-0.137075424194336,-0.977315187454224,0.206456959247589,-0.0472285002470016,0.862718880176544,0.197039529681206,-0.465716183185577,0.839759349822998,0.221470341086388,-0.495736926794052, 0.830685615539551,0.156212329864502,-0.53437727689743,0.892053008079529,0.256361722946167,-0.372182875871658,0.889020264148712,0.213740766048431,-0.404917031526566,0.908465981483459,0.211989372968674,-0.360208302736282,0.904940068721771,0.195454493165016,-0.377996027469635,0.888135969638824,0.229056358337402,-0.3984315097332,0.848333179950714,-0.297908991575241,-0.43769970536232,0.927110075950623,-0.224742949008942,-0.299929141998291,0.898882806301117,0.175670132040977,-0.401434540748596,0.892053008079529,0.256361722946167,-0.372182875871658,0.839759349822998,0.221470341086388,-0.495736926794052,0.862718880176544,0.197039529681206,-0.465716183185577,0.889020264148712,0.213740766048431,-0.404917031526566,0.552965581417084,-0.801727950572968,0.226851031184196,0.0579886250197887,-0.947378635406494,0.314819037914276,0.569704055786133,-0.669814586639404,0.476220279932022,-0.00901283789426088,0.0965975746512413,0.995282709598541,0.0292022190988064,-0.160741657018662,0.98656439781189,-0.176305994391441,-0.141984179615974,0.974041402339935,-0.072829432785511,0.0172536037862301,0.99719512462616,0.742353081703186,0.249405577778816,0.621859073638916,0.562908291816711,0.161133006215096,0.810660421848297,0.810771644115448,0.203989744186401,0.54866886138916,-0.504790067672729,0.0473182201385498,0.861944317817688,-0.76946359872818,0.151790544390678,0.620391309261322,-0.623560965061188,0.103526078164577,0.774889707565308,-0.34188050031662,0.0427594222128391,0.938770115375519,-0.857216417789459,0.268806040287018,0.43923032283783,-0.791948556900024,0.189529091119766,0.580427587032318,-0.56521064043045,0.138002142310143,0.813321769237518,-0.46170049905777,0.186353012919426,0.867240011692047,0.830685615539551,0.156212329864502,-0.53437727689743,0.754355251789093,0.176875531673431,-0.632189214229584,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.881142616271973,0.0315838828682899,-0.471794605255127,0.355752408504486,-0.498135715723038,-0.790759801864624,0.734110653400421,-0.4181247651577,-0.535026371479034,0.498120248317719,-0.335890352725983,-0.799408435821533, -0.122972406446934,-0.410810470581055,-0.903389453887939,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.129383936524391,-0.521730244159698,-0.843242168426514,0.252460122108459,-0.750463306903839,-0.61079353094101,0.355752408504486,-0.498135715723038,-0.790759801864624,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.295105874538422,-0.732439458370209,-0.613551139831543,3.42403474462571e-008,-0.837808728218079,-0.545963823795319,1.08000335785619e-007,-0.503708183765411,-0.863873839378357,0.71757835149765,0.116429716348648,-0.686677098274231,0.754355251789093,0.176875531673431,-0.632189214229584,0.737981557846069,0.239907741546631,-0.630735695362091,0.74054491519928,0.170902013778687,-0.649912059307098,0.543910622596741,-0.0741649866104126,-0.835859358310699,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.754355251789093,0.176875531673431,-0.632189214229584,0.71757835149765,0.116429716348648,-0.686677098274231,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.656103849411011,-0.195678874850273,-0.728860437870026,0.66176563501358,-0.249233901500702,-0.707070529460907,0.888135969638824,0.229056358337402,-0.3984315097332,0.908465981483459,0.211989372968674,-0.360208302736282,0.875346660614014,0.271785736083984,-0.399875849485397,0.847342550754547,0.298378229141235,-0.439296066761017,0.904940068721771,0.195454493165016,-0.377996027469635,0.908465981483459,0.211989372968674,-0.360208302736282,0.888135969638824,0.229056358337402,-0.3984315097332,0.898882806301117,0.175670132040977,-0.401434540748596,-0.11159410327673,-0.287050694227219,-0.951393008232117,0.355752408504486,-0.498135715723038,-0.790759801864624,0.498120248317719,-0.335890352725983,-0.799408435821533,-0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.11159410327673,-0.287050694227219,-0.951393008232117, -0.0987945944070816,-0.283014118671417,-0.95401394367218,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.595030784606934,-0.0228520985692739,-0.80337792634964,-0.539451956748962,-0.0545219406485558,-0.840249359607697,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.73286509513855,0.247602537274361,-0.633720517158508,-0.721792817115784,0.204645067453384,-0.661162257194519,-0.715955674648285,0.135700687766075,-0.684830486774445,-0.747396409511566,0.179795786738396,-0.639587461948395,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.748518824577332,-0.407584488391876,-0.523062586784363,-0.481532573699951,-0.766164124011993,-0.425580739974976,-0.295105874538422,-0.732439458370209,-0.613551139831543,0.205762028694153,-0.343506038188934,-0.91633266210556,0.142389953136444,-0.3092340528965,-0.940265595912933,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.154773816466331,-0.473390430212021,-0.867148518562317,-0.412438809871674,-0.450837343931198,-0.791605889797211,-0.295105874538422,-0.732439458370209,-0.613551139831543,-0.154773816466331,-0.473390430212021,-0.867148518562317,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.142389953136444,-0.3092340528965,-0.940265595912933,0.205762028694153,-0.343506038188934,-0.91633266210556,0.656103849411011,-0.195678874850273,-0.728860437870026,0.808351874351501,-0.0360210724174976,-0.587596535682678,0.605917453765869,-0.0272433757781982,-0.795060873031616,0.656103849411011,-0.195678874850273,-0.728860437870026,0.940263509750366,0.158270344138145,0.301421761512756,0.911828219890594,-0.323383867740631,0.252966731786728,0.924298286437988,-0.381513595581055,0.0109577048569918,0.97637003660202,0.214487105607986,0.0263973921537399,0.897881627082825,0.0853674784302711,0.4318807721138,0.86302787065506,-0.341093569993973,0.372609823942184,0.911828219890594,-0.323383867740631,0.252966731786728,0.940263509750366,0.158270344138145,0.301421761512756,0.824855744838715,-0.0143105983734131,0.565162122249603,0.804235875606537,-0.38592141866684,0.451961606740952, 0.86302787065506,-0.341093569993973,0.372609823942184,0.897881627082825,0.0853674784302711,0.4318807721138,0.658608675003052,-0.082901194691658,0.747905075550079,0.63869446516037,-0.424023747444153,0.642085075378418,0.804235875606537,-0.38592141866684,0.451961606740952,0.824855744838715,-0.0143105983734131,0.565162122249603,0.403074562549591,-0.0995079353451729,0.909741222858429,0.477317273616791,-0.364241302013397,0.79968523979187,0.63869446516037,-0.424023747444153,0.642085075378418,0.658608675003052,-0.082901194691658,0.747905075550079,0.748501777648926,-0.0708362907171249,0.659338533878326,0.777780055999756,-0.164350166916847,0.606668949127197,0.477317273616791,-0.364241302013397,0.79968523979187,0.403074562549591,-0.0995079353451729,0.909741222858429,0.682068586349487,-0.309287667274475,0.662663996219635,0.777780055999756,-0.164350166916847,0.606668949127197,0.748501777648926,-0.0708362907171249,0.659338533878326,0.691345393657684,-0.0592475160956383,0.720091164112091,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.918076574802399,-0.319764405488968,0.234277844429016,-0.930424094200134,-0.303478807210922,0.205454647541046,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.85723865032196,-0.337598741054535,0.388804644346237,-0.871616542339325,-0.254917442798615,0.418690472841263,-0.683673858642578,-0.293579787015915,0.668132424354553,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.695749223232269,-0.452543646097183,0.557796776294708,-0.697653412818909,-0.241543143987656,0.674489855766296,-0.51021933555603,-0.415738612413406,0.752886176109314,-0.480668127536774,-0.309450268745422,0.820486843585968,-0.526136100292206,-0.358043670654297,0.77135306596756,0.198349118232727,-0.359346985816956,-0.911881268024445,0.304857552051544,-0.136514157056808,-0.942563354969025,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.085550844669342,-0.179267361760139,-0.980073630809784, -0.183117777109146,0.0588014125823975,-0.981330871582031,0.304857552051544,-0.136514157056808,-0.942563354969025,0.220349878072739,-0.298315703868866,-0.928683817386627,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.872953355312347,0.427382349967957,-0.235152706503868,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.265993624925613,0.0903498530387878,-0.959731340408325,0.220349878072739,-0.298315703868866,-0.928683817386627,0.5493523478508,-0.702752709388733,-0.452051609754562,0.318604946136475,-0.851775884628296,-0.415895074605942,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.126519411802292,-0.418506681919098,-0.899358093738556,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.220349878072739,-0.298315703868866,-0.928683817386627,0.56249988079071,-0.630179584026337,-0.535226583480835,0.5493523478508,-0.702752709388733,-0.452051609754562,0.126519411802292,-0.418506681919098,-0.899358093738556,0.210187539458275,-0.419684708118439,-0.882998287677765,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.0690199434757233,-0.290056854486465,-0.954517304897308,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713,0.210187539458275,-0.419684708118439,-0.882998287677765,0.220480233430862,-0.962971389293671,-0.155160069465637,0.210187539458275,-0.419684708118439,-0.882998287677765,0.321904927492142,-0.23541721701622,-0.917036533355713,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.633183777332306,0.444622397422791,-0.6335529088974,0.735884010791779,-0.676981329917908,0.0130754383280873, 0.917286098003387,-0.397383034229279,0.0259414706379175,0.370425969362259,-0.053249154239893,-0.927334427833557,0.321904927492142,-0.23541721701622,-0.917036533355713,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.6867835521698,0.410039186477661,-0.600163519382477,0.321904927492142,-0.23541721701622,-0.917036533355713,0.370425969362259,-0.053249154239893,-0.927334427833557,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.698399066925049,0.385518401861191,-0.603004395961761,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.852042078971863,-0.144021943211555,-0.503271222114563,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.237571656703949,-0.289404422044754,0.92725658416748,-0.182237774133682,-0.768710494041443,0.613085329532623,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.802604734897614,0.216235384345055,0.55593866109848,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.182237774133682,-0.768710494041443,0.613085329532623,0.237571656703949,-0.289404422044754,0.92725658416748,-0.748213112354279,0.285198539495468,0.599031686782837,-0.792753040790558,0.233859673142433,0.562896311283112,0.237571656703949,-0.289404422044754,0.92725658416748,0.209573119878769,-0.409179538488388,0.888060390949249,-0.183022558689117,-0.742925465106964,0.643866777420044,0.209573119878769,-0.409179538488388,0.888060390949249,0.676666736602783,-0.736289203166962,0.000588160357438028,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.730839848518372,0.374586492776871,0.570576965808868,0.209573119878769,-0.409179538488388,0.888060390949249,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.623242735862732,-0.753325045108795,-0.209928289055824, 0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.141052380204201,-0.502090394496918,-0.853234708309174,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.814637243747711,0.194269418716431,-0.546466410160065,0.747061431407928,-0.62068235874176,-0.238018155097961,0.910755693912506,-0.337876051664352,-0.237410709261894,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.810490429401398,0.401368230581284,-0.426624894142151,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.262113600969315,-0.605265080928802,-0.751631915569305,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.893890082836151,-0.378993809223175,-0.239424884319305,0.300238430500031,-0.930824100971222,-0.208382621407509,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.821675598621368,0.388978660106659,-0.416587084531784,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.893890082836151,-0.378993809223175,-0.239424884319305,0.534395098686218,-0.306080341339111,0.787868499755859,0.0157063417136669,-0.81893128156662,0.573676645755768,0.300238430500031,-0.930824100971222,-0.208382621407509,0.0157063417136669,-0.81893128156662,0.573676645755768,0.534395098686218,-0.306080341339111,0.787868499755859,-0.581417798995972,0.228432759642601,0.780878841876984,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.567694067955017,0.240619167685509,0.787290215492249,0.534395098686218,-0.306080341339111,0.787868499755859,0.477158278226852,-0.397838234901428,0.783610045909882,-0.56154191493988,0.270268112421036,0.782065093517303,0.623242735862732,-0.753325045108795,-0.209928289055824,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.223028287291527,-0.612437725067139,0.758405148983002, 0.477158278226852,-0.397838234901428,0.783610045909882,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.507044553756714,0.251941651105881,0.824276208877563,-0.559803783893585,0.448765695095062,0.696583867073059,0.477158278226852,-0.397838234901428,0.783610045909882,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068,0.279529839754105,-0.929970979690552,-0.238782465457916,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.205829456448555,-0.762141346931458,0.613819897174835,0.279529839754105,-0.929970979690552,-0.238782465457916,0.828972637653351,-0.365704894065857,-0.423159956932068,0.674587190151215,-0.27459716796875,0.685221493244171,0.205829456448555,-0.762141346931458,0.613819897174835,0.674587190151215,-0.27459716796875,0.685221493244171,-0.394580245018005,0.233544617891312,0.888686299324036,-0.597855687141418,-0.328857451677322,0.731041252613068,0.678764045238495,-0.636029005050659,-0.367078334093094,0.631237089633942,-0.400684475898743,0.664072096347809,0.674587190151215,-0.27459716796875,0.685221493244171,0.833657681941986,-0.354278296232224,-0.423676431179047, -0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197,0.674587190151215,-0.27459716796875,0.685221493244171,0.631237089633942,-0.400684475898743,0.664072096347809,-0.326038300991058,0.243334606289864,0.913502752780914,-0.36957174539566,0.387512475252151,0.844541788101196,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461,0.113647989928722,-0.758261322975159,0.641968786716461,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.326038300991058,0.243334606289864,0.913502752780914,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.980141282081604,0.198108091950417,0.00872699916362762,0.297526687383652,-0.947863459587097,-0.114161059260368,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.534125924110413,-0.786291003227234,-0.310573488473892,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.980141282081604,0.198108091950417,0.00872699916362762,0.586962282657623,-0.660651743412018,-0.467989921569824,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.672275424003601,-0.513835847377777,-0.532933831214905,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.295449286699295,-0.702050924301147,0.647946059703827, 0.192592486739159,-0.95661062002182,-0.21864178776741,0.672275424003601,-0.513835847377777,-0.532933831214905,0.78001469373703,-0.23672841489315,0.579255342483521,-0.142891898751259,0.310856729745865,0.939654171466827,-0.427836775779724,-0.217984616756439,0.877176403999329,0.295449286699295,-0.702050924301147,0.647946059703827,0.78001469373703,-0.23672841489315,0.579255342483521,0.568342566490173,-0.692033231258392,-0.445058077573776,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221,0.776305437088013,-0.254482686519623,0.576704740524292,0.702709794044495,-0.35005995631218,0.619400501251221,0.0647351443767548,0.381562024354935,0.922073602676392,-0.162613198161125,0.452644348144531,0.876738309860229,0.776305437088013,-0.254482686519623,0.576704740524292,0.0647351443767548,0.381562024354935,0.922073602676392,0.702709794044495,-0.35005995631218,0.619400501251221,0.679429173469543,-0.206046029925346,0.704216599464417,-0.0423084795475006,0.388709634542465,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.692436456680298,-0.693914532661438,0.197520568966866,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.181978538632393,0.229496166110039,0.956146061420441,0.10479624569416,-0.144131794571877,0.983993768692017,0.228076592087746,-0.722928047180176,0.652193248271942,0.228076592087746,-0.722928047180176,0.652193248271942,0.10479624569416,-0.144131794571877,0.983993768692017,0.499378323554993,-0.200641006231308,0.842831194400787,0.759757459163666,-0.495759963989258,0.42070260643959,0.119333148002625,-0.907433569431305,-0.402894467115402,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.90501195192337,0.21977810561657,0.364212721586227,-0.455443143844604,-0.0435190759599209,0.889200568199158,-0.610331058502197,-0.781622171401978,0.128696575760841, -0.823581099510193,-0.405602097511292,-0.396485984325409,0.210858762264252,-0.745639085769653,-0.632108330726624,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.791083514690399,-0.304101139307022,-0.53076297044754,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.883537590503693,0.207842156291008,0.419717639684677,-0.90501195192337,0.21977810561657,0.364212721586227,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.783048808574677,-0.561382532119751,-0.267739146947861,0.210858762264252,-0.745639085769653,-0.632108330726624,0.144954472780228,-0.95414674282074,-0.261901140213013,-0.783048808574677,-0.561382532119751,-0.267739146947861,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.883537590503693,0.207842156291008,0.419717639684677,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.531814455986023,-0.819929480552673,0.211870223283768,0.144954472780228,-0.95414674282074,-0.261901140213013,0.755722880363464,-0.635050356388092,0.159981176257133,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.531814455986023,-0.819929480552673,0.211870223283768,-0.00195049878675491,-0.724513411521912,0.689257919788361,-0.10662803798914,0.114874452352524,0.987640738487244,0.779160380363464,0.504416584968567,0.372119605541229,0.677094995975494,0.017529908567667,0.735686838626862,0.755722880363464,-0.635050356388092,0.159981176257133,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.779160380363464,0.504416584968567,0.372119605541229,0.0438288599252701,0.716634690761566,0.696070194244385,-0.10662803798914,0.114874452352524,0.987640738487244,0.677094995975494,0.017529908567667,0.735686838626862,0.775657951831818,0.494642019271851,0.39202556014061,0.779160380363464,0.504416584968567,0.372119605541229,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.966551244258881,-0.0919508412480354,-0.239423617720604, 0.779160380363464,0.504416584968567,0.372119605541229,0.775657951831818,0.494642019271851,0.39202556014061,-0.0499426536262035,0.692004799842834,0.720163226127625,0.0438288599252701,0.716634690761566,0.696070194244385,0.775603353977203,0.536381304264069,0.332768052816391,0.775657951831818,0.494642019271851,0.39202556014061,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.944929540157318,-0.11514762789011,-0.306348145008087,0.775603353977203,0.536381304264069,0.332768052816391,-0.057441920042038,0.650170862674713,0.75761353969574,-0.0499426536262035,0.692004799842834,0.720163226127625,0.775657951831818,0.494642019271851,0.39202556014061,0.789509534835815,0.501795709133148,0.353377729654312,0.775603353977203,0.536381304264069,0.332768052816391,0.944929540157318,-0.11514762789011,-0.306348145008087,0.986938416957855,-0.10414332151413,-0.122909314930439,-0.057441920042038,0.650170862674713,0.75761353969574,0.775603353977203,0.536381304264069,0.332768052816391,0.789509534835815,0.501795709133148,0.353377729654312,0.0780415087938309,0.603700041770935,0.793382465839386,0.843434154987335,0.424213349819183,0.329638987779617,0.704449236392975,0.57451719045639,0.416750878095627,0.789509534835815,0.501795709133148,0.353377729654312,0.986938416957855,-0.10414332151413,-0.122909314930439,0.0780415087938309,0.603700041770935,0.793382465839386,0.789509534835815,0.501795709133148,0.353377729654312,0.704449236392975,0.57451719045639,0.416750878095627,0.075324609875679,0.630104899406433,0.772848010063171,0.950212061405182,0.303586721420288,0.0702292993664742,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.619699597358704,0.579480230808258,0.529315650463104,0.396490722894669,0.381844133138657,0.834859371185303,0.516311764717102,0.647967755794525,0.559964299201965,0.631212413311005,0.590215682983398,0.503206074237823,0.634808242321014,0.281936556100845,0.719395816326141,0.396490722894669,0.381844133138657,0.834859371185303,0.634808242321014,0.281936556100845,0.719395816326141, 0.540099084377289,-0.0461409948766232,0.840335667133331,0.280613332986832,0.159042209386826,0.946552574634552,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.210858762264252,-0.745639085769653,-0.632108330726624,0.139615654945374,-0.644082069396973,-0.752107560634613,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.210858762264252,-0.745639085769653,-0.632108330726624,0.980175495147705,-0.0617897920310497,-0.188249826431274,0.755722880363464,-0.635050356388092,0.159981176257133,0.144954472780228,-0.95414674282074,-0.261901140213013,0.944929540157318,-0.11514762789011,-0.306348145008087,0.139615654945374,-0.644082069396973,-0.752107560634613,0.119333148002625,-0.907433569431305,-0.402894467115402,0.986938416957855,-0.10414332151413,-0.122909314930439,0.648194909095764,-0.336823225021362,-0.682930052280426,0.56249988079071,-0.630179584026337,-0.535226583480835,0.220349878072739,-0.298315703868866,-0.928683817386627,0.304857552051544,-0.136514157056808,-0.942563354969025,0.318604946136475,-0.851775884628296,-0.415895074605942,0.5493523478508,-0.702752709388733,-0.452051609754562,0.643197417259216,-0.725296139717102,-0.245443657040596,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.883537590503693,0.207842156291008,0.419717639684677,0.0438288599252701,0.716634690761566,0.696070194244385,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.90501195192337,0.21977810561657,0.364212721586227,0.0438288599252701,0.716634690761566,0.696070194244385,-0.883537590503693,0.207842156291008,0.419717639684677,-0.743999242782593,-0.155652806162834,0.649797976016998,-0.10662803798914,0.114874452352524,0.987640738487244,-0.90501195192337,0.21977810561657,0.364212721586227,-0.057441920042038,0.650170862674713,0.75761353969574,0.0780415087938309,0.603700041770935,0.793382465839386,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.075324609875679,0.630104899406433,0.772848010063171,-0.181978538632393,0.229496166110039,0.956146061420441,-0.455443143844604,-0.0435190759599209,0.889200568199158, 0.0780415087938309,0.603700041770935,0.793382465839386,-0.000278991181403399,0.484035164117813,0.875048518180847,0.0509466230869293,0.674606919288635,0.73641699552536,0.516311764717102,0.647967755794525,0.559964299201965,0.396490722894669,0.381844133138657,0.834859371185303,0.396490722894669,0.381844133138657,0.834859371185303,0.280613332986832,0.159042209386826,0.946552574634552,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.850029647350311,0.48296907544136,0.210215270519257,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.869016945362091,0.468115001916885,0.160243302583694,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.911366164684296,0.266076982021332,0.31402975320816,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.256222367286682,0.552950799465179,0.792840123176575,-0.6693514585495,0.480027586221695,0.567046880722046,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.126598969101906,0.370326429605484,0.920234203338623, -0.104846432805061,0.370796233415604,0.922776997089386,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.142891898751259,0.310856729745865,0.939654171466827,-0.142891898751259,0.310856729745865,0.939654171466827,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.525893211364746,0.411127626895905,0.744587421417236,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453,0.425844460725784,-0.326038300991058,0.243334606289864,0.913502752780914,-0.743728399276733,0.346636980772018,0.571586310863495,-0.826775729656219,0.455823004245758,0.329647213220596,-0.850029647350311,0.48296907544136,0.210215270519257,-0.869016945362091,0.468115001916885,0.160243302583694,-0.36957174539566,0.387512475252151,0.844541788101196,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.343200415372849,0.296563923358917,0.891214549541473,-0.350194752216339,0.292267352342606,0.889912009239197,-0.343200415372849,0.296563923358917,0.891214549541473,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.878461718559265,0.420071333646774,-0.22769521176815,-0.350194752216339,0.292267352342606,0.889912009239197,-0.878461718559265,0.420071333646774,-0.22769521176815,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.394580245018005,0.233544617891312,0.888686299324036,-0.394580245018005,0.233544617891312,0.888686299324036,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.597855687141418,-0.328857451677322,0.731041252613068,-0.806818068027496,0.571618735790253,0.149320676922798,-0.869016945362091,0.468115001916885,0.160243302583694,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.806818068027496,0.571618735790253,0.149320676922798, -0.507044553756714,0.251941651105881,0.824276208877563,-0.743728399276733,0.346636980772018,0.571586310863495,-0.869016945362091,0.468115001916885,0.160243302583694,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.56154191493988,0.270268112421036,0.782065093517303,-0.559803783893585,0.448765695095062,0.696583867073059,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.581417798995972,0.228432759642601,0.780878841876984,-0.567694067955017,0.240619167685509,0.787290215492249,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.581417798995972,0.228432759642601,0.780878841876984,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.748213112354279,0.285198539495468,0.599031686782837,-0.730839848518372,0.374586492776871,0.570576965808868,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.792753040790558,0.233859673142433,0.562896311283112,-0.748213112354279,0.285198539495468,0.599031686782837,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.802604734897614,0.216235384345055,0.55593866109848,-0.792753040790558,0.233859673142433,0.562896311283112,-0.684927523136139,0.406749725341797,-0.604507207870483,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.6693514585495,0.480027586221695,0.567046880722046,-0.878819167613983,0.322898685932159,0.351302325725555,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.585053384304047,0.545464694499969,0.600150644779205,-0.677114307880402,0.387711197137833,-0.625456809997559,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.349404841661453,-0.0127950254827738,-0.936884522438049,-0.790130019187927,0.358856797218323,-0.496906787157059, -0.677114307880402,0.387711197137833,-0.625456809997559,-0.265993624925613,0.0903498530387878,-0.959731340408325,-0.225308075547218,0.514127254486084,0.827592551708221,-0.308326691389084,0.577942073345184,0.755590915679932,-0.25537496805191,0.596560716629028,0.760854065418243,-0.200460329651833,0.603900372982025,0.771440207958221,-0.308326691389084,0.577942073345184,0.755590915679932,-0.225308075547218,0.514127254486084,0.827592551708221,-0.313503563404083,0.434664905071259,0.844264149665833,-0.506461322307587,0.506999313831329,0.697458744049072,-0.693721890449524,0.488555252552032,0.529210448265076,-0.878819167613983,0.322898685932159,0.351302325725555,-0.6693514585495,0.480027586221695,0.567046880722046,-0.6203373670578,0.548794507980347,0.560362577438354,-0.566602885723114,0.588818848133087,0.576414406299591,-0.308326691389084,0.577942073345184,0.755590915679932,-0.506461322307587,0.506999313831329,0.697458744049072,-0.601623058319092,0.623578310012817,0.499199062585831,-0.308326691389084,0.577942073345184,0.755590915679932,-0.566602885723114,0.588818848133087,0.576414406299591,-0.6203373670578,0.548794507980347,0.560362577438354,-0.25537496805191,0.596560716629028,0.760854065418243,-0.6203373670578,0.548794507980347,0.560362577438354,-0.6693514585495,0.480027586221695,0.567046880722046,-0.256222367286682,0.552950799465179,0.792840123176575,-0.25537496805191,0.596560716629028,0.760854065418243,-0.737847745418549,0.550981104373932,0.389872461557388,-0.566602885723114,0.588818848133087,0.576414406299591,-0.601623058319092,0.623578310012817,0.499199062585831,-0.73642486333847,0.608879089355469,0.294863820075989,-0.566602885723114,0.588818848133087,0.576414406299591,-0.737847745418549,0.550981104373932,0.389872461557388,-0.693721890449524,0.488555252552032,0.529210448265076,-0.6203373670578,0.548794507980347,0.560362577438354,-0.737847745418549,0.550981104373932,0.389872461557388,-0.802789449691772,0.535418033599854,0.26240548491478,-0.826775729656219,0.455823004245758,0.329647213220596,-0.724430322647095,0.542059719562531,0.425877869129181, -0.724430322647095,0.542059719562531,0.425877869129181,-0.79394793510437,0.450177043676376,0.408640831708908,-0.525893211364746,0.411127626895905,0.744587421417236,-0.693721890449524,0.488555252552032,0.529210448265076,-0.802789449691772,0.535418033599854,0.26240548491478,-0.846407413482666,0.503773093223572,0.17264749109745,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.850029647350311,0.48296907544136,0.210215270519257,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.911366164684296,0.266076982021332,0.31402975320816,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.846407413482666,0.503773093223572,0.17264749109745,-0.846407413482666,0.503773093223572,0.17264749109745,-0.73642486333847,0.608879089355469,0.294863820075989,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.891970098018646,0.451832711696625,-0.0153782712295651,-0.908803284168243,0.416819602251053,-0.018383901566267,-0.887826502323151,0.459839731454849,0.0176490340381861,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.724430322647095,0.542059719562531,0.425877869129181,-0.826775729656219,0.455823004245758,0.329647213220596,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.79394793510437,0.450177043676376,0.408640831708908,-0.739033222198486,0.522002279758453,0.425844460725784,-0.79394793510437,0.450177043676376,0.408640831708908,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.907855153083801,0.259428709745407,-0.329386949539185,0.643197417259216,-0.725296139717102,-0.245443657040596,0.5493523478508,-0.702752709388733,-0.452051609754562,0.56249988079071,-0.630179584026337,-0.535226583480835,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018, 0.56249988079071,-0.630179584026337,-0.535226583480835,0.648194909095764,-0.336823225021362,-0.682930052280426,0.515248417854309,-0.441880226135254,-0.734343886375427,0.648194909095764,-0.336823225021362,-0.682930052280426,0.304857552051544,-0.136514157056808,-0.942563354969025,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.0423084795475006,0.388709634542465,0.920388400554657,0.679429173469543,-0.206046029925346,0.704216599464417,0.499378323554993,-0.200641006231308,0.842831194400787,-0.155946508049965,0.418714195489883,0.894627928733826,0.10479624569416,-0.144131794571877,0.983993768692017,-0.213889330625534,0.483835697174072,0.848619103431702,-0.155946508049965,0.418714195489883,0.894627928733826,0.499378323554993,-0.200641006231308,0.842831194400787,0.516311764717102,0.647967755794525,0.559964299201965,0.0509466230869293,0.674606919288635,0.73641699552536,0.075324609875679,0.630104899406433,0.772848010063171,0.704449236392975,0.57451719045639,0.416750878095627,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.872953355312347,0.427382349967957,-0.235152706503868,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.864807367324829,0.412012696266174,-0.286973506212235,-0.836941063404083,0.479608535766602,-0.263638645410538,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,0.745758533477783,-0.330089628696442,-0.578692495822906,0.810982346534729,-0.364237248897552,-0.457863301038742,0.919881999492645,-0.0601645521819592,-0.387552946805954, 0.237571656703949,-0.289404422044754,0.92725658416748,0.917286098003387,-0.397383034229279,0.0259414706379175,0.735884010791779,-0.676981329917908,0.0130754383280873,0.209573119878769,-0.409179538488388,0.888060390949249,0.747061431407928,-0.62068235874176,-0.238018155097961,0.477158278226852,-0.397838234901428,0.783610045909882,0.534395098686218,-0.306080341339111,0.787868499755859,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.147622227668762,-0.275771498680115,-0.94981986284256,0.678764045238495,-0.636029005050659,-0.367078334093094,0.833657681941986,-0.354278296232224,-0.423676431179047,0.631237089633942,-0.400684475898743,0.664072096347809,0.613874554634094,-0.719477951526642,-0.324822306632996,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.113647989928722,-0.758261322975159,0.641968786716461,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.586962282657623,-0.660651743412018,-0.467989921569824,0.776305437088013,-0.254482686519623,0.576704740524292,0.78001469373703,-0.23672841489315,0.579255342483521,0.671555638313293,-0.521569073200226,-0.526287734508514,0.78001469373703,-0.23672841489315,0.579255342483521,0.776305437088013,-0.254482686519623,0.576704740524292,-0.126598969101906,0.370326429605484,0.920234203338623,-0.104846432805061,0.370796233415604,0.922776997089386,-0.126598969101906,0.370326429605484,0.920234203338623,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.906125068664551,0.423002034425735,-0.00257390737533569,-0.104846432805061,0.370796233415604,0.922776997089386,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.820966601371765,0.385130524635315,-0.421530872583389,-0.567694067955017,0.240619167685509,0.787290215492249,-0.56154191493988,0.270268112421036,0.782065093517303,-0.698399066925049,0.385518401861191,-0.603004395961761, -0.852042078971863,-0.144021943211555,-0.503271222114563,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.802604734897614,0.216235384345055,0.55593866109848,0.704449236392975,0.57451719045639,0.416750878095627,0.843434154987335,0.424213349819183,0.329638987779617,0.631212413311005,0.590215682983398,0.503206074237823,0.516311764717102,0.647967755794525,0.559964299201965,0.741024434566498,0.216318398714066,0.635680079460144,0.716558694839478,-0.309423923492432,0.625140368938446,0.540099084377289,-0.0461409948766232,0.840335667133331,0.634808242321014,0.281936556100845,0.719395816326141,0.631212413311005,0.590215682983398,0.503206074237823,0.619699597358704,0.579480230808258,0.529315650463104,0.741024434566498,0.216318398714066,0.635680079460144,0.634808242321014,0.281936556100845,0.719395816326141,0.843434154987335,0.424213349819183,0.329638987779617,0.906101286411285,-0.389416426420212,-0.165334045886993,0.950212061405182,0.303586721420288,0.0702292993664742,0.619699597358704,0.579480230808258,0.529315650463104,-0.213889330625534,0.483835697174072,0.848619103431702,0.075324609875679,0.630104899406433,0.772848010063171,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221,-0.225308075547218,0.514127254486084,0.827592551708221,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.0354647859930992,0.343396455049515,0.938520729541779,-0.313503563404083,0.434664905071259,0.844264149665833,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.0690199434757233,-0.290056854486465,-0.954517304897308,-0.349404841661453,-0.0127950254827738,-0.936884522438049,0.126519411802292,-0.418506681919098,-0.899358093738556,0.210187539458275,-0.419684708118439,-0.882998287677765,0.318604946136475,-0.851775884628296,-0.415895074605942,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942,0.210187539458275,-0.419684708118439,-0.882998287677765, -0.0690199434757233,-0.290056854486465,-0.954517304897308,0.735884010791779,-0.676981329917908,0.0130754383280873,0.321904927492142,-0.23541721701622,-0.917036533355713,0.676666736602783,-0.736289203166962,0.000588160357438028,0.321904927492142,-0.23541721701622,-0.917036533355713,-0.6867835521698,0.410039186477661,-0.600163519382477,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.684927523136139,0.406749725341797,-0.604507207870483,0.370425969362259,-0.053249154239893,-0.927334427833557,-0.698399066925049,0.385518401861191,-0.603004395961761,-0.0838128700852394,-0.573638498783112,-0.814809322357178,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.0838128700852394,-0.573638498783112,-0.814809322357178,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.541915059089661,-0.82688319683075,-0.150307148694992,0.343388766050339,-0.92741858959198,-0.148252636194229,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.902596533298492,-0.221002161502838,0.369428634643555,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.182237774133682,-0.768710494041443,0.613085329532623,-0.852042078971863,-0.144021943211555,-0.503271222114563,-0.541915059089661,-0.82688319683075,-0.150307148694992,-0.902596533298492,-0.221002161502838,0.369428634643555,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.917286098003387,-0.397383034229279,0.0259414706379175,0.237571656703949,-0.289404422044754,0.92725658416748,0.237571656703949,-0.289404422044754,0.92725658416748,-0.792753040790558,0.233859673142433,0.562896311283112,-0.802604734897614,0.216235384345055,0.55593866109848,0.209573119878769,-0.409179538488388,0.888060390949249,0.735884010791779,-0.676981329917908,0.0130754383280873,0.676666736602783,-0.736289203166962,0.000588160357438028,-0.748213112354279,0.285198539495468,0.599031686782837,0.209573119878769,-0.409179538488388,0.888060390949249,-0.730839848518372,0.374586492776871,0.570576965808868, -0.818624794483185,-0.0173483304679394,0.574066698551178,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.141052380204201,-0.502090394496918,-0.853234708309174,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.220480233430862,-0.962971389293671,-0.155160069465637,0.318604946136475,-0.851775884628296,-0.415895074605942,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.183022558689117,-0.742925465106964,0.643866777420044,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.911366164684296,0.266076982021332,0.31402975320816,0.747061431407928,-0.62068235874176,-0.238018155097961,0.0652027949690819,-0.225424140691757,-0.972076416015625,0.623242735862732,-0.753325045108795,-0.209928289055824,0.0652027949690819,-0.225424140691757,-0.972076416015625,-0.810490429401398,0.401368230581284,-0.426624894142151,-0.757650375366211,0.518597006797791,-0.39626133441925,0.1495750695467,-0.0865894258022308,-0.984951555728912,-0.821675598621368,0.388978660106659,-0.416587084531784,-0.820966601371765,0.385130524635315,-0.421530872583389,0.893890082836151,-0.378993809223175,-0.239424884319305,0.1495750695467,-0.0865894258022308,-0.984951555728912,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.262113600969315,-0.605265080928802,-0.751631915569305, 0.300238430500031,-0.930824100971222,-0.208382621407509,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.931690096855164,-0.183842733502388,-0.31329756975174,-0.262113600969315,-0.605265080928802,-0.751631915569305,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.300238430500031,-0.930824100971222,-0.208382621407509,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.536295533180237,-0.842644929885864,-0.0483388155698776,0.0157063417136669,-0.81893128156662,0.573676645755768,-0.536295533180237,-0.842644929885864,-0.0483388155698776,-0.781307756900787,-0.323809385299683,0.533578157424927,-0.931690096855164,-0.183842733502388,-0.31329756975174,0.534395098686218,-0.306080341339111,0.787868499755859,0.893890082836151,-0.378993809223175,-0.239424884319305,0.910755693912506,-0.337876051664352,-0.237410709261894,-0.581417798995972,0.228432759642601,0.780878841876984,0.534395098686218,-0.306080341339111,0.787868499755859,-0.567694067955017,0.240619167685509,0.787290215492249,0.623242735862732,-0.753325045108795,-0.209928289055824,0.477158278226852,-0.397838234901428,0.783610045909882,0.747061431407928,-0.62068235874176,-0.238018155097961,-0.56154191493988,0.270268112421036,0.782065093517303,0.477158278226852,-0.397838234901428,0.783610045909882,-0.559803783893585,0.448765695095062,0.696583867073059,0.00529748247936368,-0.99651163816452,0.0832859799265862,0.166518494486809,-0.975531220436096,-0.14356318116188,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.743728399276733,0.346636980772018,0.571586310863495,-0.507044553756714,0.251941651105881,0.824276208877563,-0.507044553756714,0.251941651105881,0.824276208877563,-0.223028287291527,-0.612437725067139,0.758405148983002, -0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.743728399276733,0.346636980772018,0.571586310863495,-0.929436683654785,-0.0642196834087372,0.36335015296936,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.653539955615997,-0.718670427799225,-0.237483367323875,-0.223028287291527,-0.612437725067139,0.758405148983002,-0.024921914562583,-0.994488954544067,-0.101836577057838,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.147622227668762,-0.275771498680115,-0.94981986284256,0.613874554634094,-0.719477951526642,-0.324822306632996,-0.147622227668762,-0.275771498680115,-0.94981986284256,-0.889254033565521,0.409474760293961,-0.203856900334358,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,-0.904796302318573,0.359979897737503,-0.227504059672356,-0.878461718559265,0.420071333646774,-0.22769521176815,0.828972637653351,-0.365704894065857,-0.423159956932068,-0.0946790054440498,-0.0982154458761215,-0.99065113067627,0.833657681941986,-0.354278296232224,-0.423676431179047,-0.382496774196625,-0.602528691291809,-0.700468003749847,0.279529839754105,-0.929970979690552,-0.238782465457916,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.967258095741272,-0.228260591626167,-0.110945627093315,-0.382496774196625,-0.602528691291809,-0.700468003749847,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.279529839754105,-0.929970979690552,-0.238782465457916,0.205829456448555,-0.762141346931458,0.613819897174835, -0.597855687141418,-0.328857451677322,0.731041252613068,-0.464792013168335,-0.880890548229218,0.0894443169236183,0.205829456448555,-0.762141346931458,0.613819897174835,-0.464792013168335,-0.880890548229218,0.0894443169236183,-0.597855687141418,-0.328857451677322,0.731041252613068,-0.967258095741272,-0.228260591626167,-0.110945627093315,0.674587190151215,-0.27459716796875,0.685221493244171,0.828972637653351,-0.365704894065857,-0.423159956932068,0.833657681941986,-0.354278296232224,-0.423676431179047,-0.394580245018005,0.233544617891312,0.888686299324036,0.674587190151215,-0.27459716796875,0.685221493244171,-0.350194752216339,0.292267352342606,0.889912009239197,0.613874554634094,-0.719477951526642,-0.324822306632996,0.631237089633942,-0.400684475898743,0.664072096347809,0.678764045238495,-0.636029005050659,-0.367078334093094,-0.36957174539566,0.387512475252151,0.844541788101196,-0.343200415372849,0.296563923358917,0.891214549541473,0.631237089633942,-0.400684475898743,0.664072096347809,0.113647989928722,-0.758261322975159,0.641968786716461,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.156990006566048,-0.969383895397186,0.188809439539909,0.210238441824913,-0.975585281848907,0.0635072365403175,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175,-0.156990006566048,-0.969383895397186,0.188809439539909,0.00529748247936368,-0.99651163816452,0.0832859799265862,-0.156990006566048,-0.969383895397186,0.188809439539909,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.297526687383652,-0.947863459587097,-0.114161059260368,0.297526687383652,-0.947863459587097,-0.114161059260368,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.692436456680298,-0.693914532661438,0.197520568966866,-0.156990006566048,-0.969383895397186,0.188809439539909,0.297526687383652,-0.947863459587097,-0.114161059260368,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.586962282657623,-0.660651743412018,-0.467989921569824, -0.400393456220627,-0.282469868659973,-0.8717200756073,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.916209638118744,0.399763643741608,-0.0273665990680456,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.400393456220627,-0.282469868659973,-0.8717200756073,-0.394356489181519,-0.149896875023842,-0.906649768352509,-0.925728321075439,0.377710282802582,0.0190277993679047,-0.906125068664551,0.423002034425735,-0.00257390737533569,0.672275424003601,-0.513835847377777,-0.532933831214905,-0.394356489181519,-0.149896875023842,-0.906649768352509,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.600427627563477,-0.609243273735046,-0.517985820770264,0.192592486739159,-0.95661062002182,-0.21864178776741,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.970863342285156,-0.156214520335197,0.181717962026596,-0.600427627563477,-0.609243273735046,-0.517985820770264,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.496130347251892,-0.8139808177948,0.302142232656479,0.192592486739159,-0.95661062002182,-0.21864178776741,0.295449286699295,-0.702050924301147,0.647946059703827,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.496130347251892,-0.8139808177948,0.302142232656479,0.295449286699295,-0.702050924301147,0.647946059703827,-0.496130347251892,-0.8139808177948,0.302142232656479,-0.427836775779724,-0.217984616756439,0.877176403999329,-0.970863342285156,-0.156214520335197,0.181717962026596,0.78001469373703,-0.23672841489315,0.579255342483521,0.672275424003601,-0.513835847377777,-0.532933831214905,0.671555638313293,-0.521569073200226,-0.526287734508514,-0.142891898751259,0.310856729745865,0.939654171466827,0.78001469373703,-0.23672841489315,0.579255342483521,-0.104846432805061,0.370796233415604,0.922776997089386,0.776305437088013,-0.254482686519623,0.576704740524292,0.586962282657623,-0.660651743412018,-0.467989921569824,0.568342566490173,-0.692033231258392,-0.445058077573776,-0.126598969101906,0.370326429605484,0.920234203338623,0.776305437088013,-0.254482686519623,0.576704740524292, -0.162613198161125,0.452644348144531,0.876738309860229,0.692436456680298,-0.693914532661438,0.197520568966866,0.702709794044495,-0.35005995631218,0.619400501251221,0.297526687383652,-0.947863459587097,-0.114161059260368,0.702709794044495,-0.35005995631218,0.619400501251221,0.692436456680298,-0.693914532661438,0.197520568966866,0.679429173469543,-0.206046029925346,0.704216599464417,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.692436456680298,-0.693914532661438,0.197520568966866,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.499378323554993,-0.200641006231308,0.842831194400787,0.679429173469543,-0.206046029925346,0.704216599464417,0.759757459163666,-0.495759963989258,0.42070260643959,0.119333148002625,-0.907433569431305,-0.402894467115402,0.166270598769188,-0.985880434513092,0.0198450349271297,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297,0.119333148002625,-0.907433569431305,-0.402894467115402,-0.610331058502197,-0.781622171401978,0.128696575760841,-0.455443143844604,-0.0435190759599209,0.889200568199158,0.228076592087746,-0.722928047180176,0.652193248271942,-0.610331058502197,-0.781622171401978,0.128696575760841,0.228076592087746,-0.722928047180176,0.652193248271942,0.166270598769188,-0.985880434513092,0.0198450349271297,-0.610331058502197,-0.781622171401978,0.128696575760841,0.166270598769188,-0.985880434513092,0.0198450349271297,0.759757459163666,-0.495759963989258,0.42070260643959,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.759757459163666,-0.495759963989258,0.42070260643959,0.166270598769188,-0.985880434513092,0.0198450349271297,0.228076592087746,-0.722928047180176,0.652193248271942,-0.823581099510193,-0.405602097511292,-0.396485984325409,0.139615654945374,-0.644082069396973,-0.752107560634613,-0.791083514690399,-0.304101139307022,-0.53076297044754,-0.90501195192337,0.21977810561657,0.364212721586227,-0.823581099510193,-0.405602097511292,-0.396485984325409,-0.791083514690399,-0.304101139307022,-0.53076297044754, -0.00195049878675491,-0.724513411521912,0.689257919788361,0.755722880363464,-0.635050356388092,0.159981176257133,0.677094995975494,0.017529908567667,0.735686838626862,-0.10662803798914,0.114874452352524,0.987640738487244,-0.00195049878675491,-0.724513411521912,0.689257919788361,0.677094995975494,0.017529908567667,0.735686838626862,0.950212061405182,0.303586721420288,0.0702292993664742,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.977863430976868,-0.0681029558181763,0.197851315140724,0.741024434566498,0.216318398714066,0.635680079460144,0.977863430976868,-0.0681029558181763,0.197851315140724,0.716558694839478,-0.309423923492432,0.625140368938446,0.966551244258881,-0.0919508412480354,-0.239423617720604,0.139615654945374,-0.644082069396973,-0.752107560634613,0.944929540157318,-0.11514762789011,-0.306348145008087,0.906101286411285,-0.389416426420212,-0.165334045886993,0.119333148002625,-0.907433569431305,-0.402894467115402,0.134703695774078,-0.930721879005432,-0.340017199516296,0.119333148002625,-0.907433569431305,-0.402894467115402,0.906101286411285,-0.389416426420212,-0.165334045886993,0.986938416957855,-0.10414332151413,-0.122909314930439,0.530287146568298,-0.713563740253448,-0.457845360040665,0.906101286411285,-0.389416426420212,-0.165334045886993,0.134703695774078,-0.930721879005432,-0.340017199516296,0.906101286411285,-0.389416426420212,-0.165334045886993,0.530287146568298,-0.713563740253448,-0.457845360040665,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.946987807750702,-0.279256701469421,-0.158838823437691,0.977863430976868,-0.0681029558181763,0.197851315140724,0.745758533477783,-0.330089628696442,-0.578692495822906,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.65491396188736,-0.503674864768982,-0.563382029533386,0.65491396188736,-0.503674864768982,-0.563382029533386,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.530287146568298,-0.713563740253448,-0.457845360040665,0.648194909095764,-0.336823225021362,-0.682930052280426, 0.745758533477783,-0.330089628696442,-0.578692495822906,0.65491396188736,-0.503674864768982,-0.563382029533386,0.530287146568298,-0.713563740253448,-0.457845360040665,0.414326965808868,-0.847513318061829,-0.331744402647018,0.65491396188736,-0.503674864768982,-0.563382029533386,0.414326965808868,-0.847513318061829,-0.331744402647018,0.530287146568298,-0.713563740253448,-0.457845360040665,0.134703695774078,-0.930721879005432,-0.340017199516296,0.134703695774078,-0.930721879005432,-0.340017199516296,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.318604946136475,-0.851775884628296,-0.415895074605942,0.166518494486809,-0.975531220436096,-0.14356318116188,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.643197417259216,-0.725296139717102,-0.245443657040596,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.643197417259216,-0.725296139717102,-0.245443657040596,0.403339564800262,-0.909987509250641,-0.0961246117949486,0.210238441824913,-0.975585281848907,0.0635072365403175,0.643197417259216,-0.725296139717102,-0.245443657040596,0.210238441824913,-0.975585281848907,0.0635072365403175,0.166518494486809,-0.975531220436096,-0.14356318116188,0.166518494486809,-0.975531220436096,-0.14356318116188,-0.024921914562583,-0.994488954544067,-0.101836577057838,-0.0995585918426514,-0.971274793148041,-0.216132834553719,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.414326965808868,-0.847513318061829,-0.331744402647018,0.166270598769188,-0.985880434513092,0.0198450349271297,0.414326965808868,-0.847513318061829,-0.331744402647018,0.751181125640869,-0.660092532634735,-0.00218340824358165,0.643197417259216,-0.725296139717102,-0.245443657040596,-0.90501195192337,0.21977810561657,0.364212721586227,-0.0499426536262035,0.692004799842834,0.720163226127625,-0.057441920042038,0.650170862674713,0.75761353969574,-0.845873475074768,0.496655136346817,-0.194503962993622,-0.677114307880402,0.387711197137833,-0.625456809997559, -0.790130019187927,0.358856797218323,-0.496906787157059,-0.836970150470734,0.473509907722473,-0.274352669715881,-0.790130019187927,0.358856797218323,-0.496906787157059,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.585053384304047,0.545464694499969,0.600150644779205,0.0647351443767548,0.381562024354935,0.922073602676392,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.0423084795475006,0.388709634542465,0.920388400554657,-0.155946508049965,0.418714195489883,0.894627928733826,-0.256222367286682,0.552950799465179,0.792840123176575,-0.155946508049965,0.418714195489883,0.894627928733826,-0.213889330625534,0.483835697174072,0.848619103431702,-0.200460329651833,0.603900372982025,0.771440207958221,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.752102732658386,0.351088106632233,-0.557744264602661,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.585053384304047,0.545464694499969,0.600150644779205,-0.162613198161125,0.452644348144531,0.876738309860229,0.0647351443767548,0.381562024354935,0.922073602676392,-0.585053384304047,0.545464694499969,0.600150644779205,-0.980141282081604,0.198108091950417,0.00872699916362762,-0.878819167613983,0.322898685932159,0.351302325725555,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.525893211364746,0.411127626895905,0.744587421417236,-0.326038300991058,0.243334606289864,0.913502752780914,-0.200460329651833,0.603900372982025,0.771440207958221,-0.25537496805191,0.596560716629028,0.760854065418243,-0.256222367286682,0.552950799465179,0.792840123176575,-0.739033222198486,0.522002279758453,0.425844460725784,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.36957174539566,0.387512475252151,0.844541788101196,-0.36957174539566,0.387512475252151,0.844541788101196,-0.326038300991058,0.243334606289864,0.913502752780914,-0.739033222198486,0.522002279758453,0.425844460725784,-0.256222367286682,0.552950799465179,0.792840123176575, -0.155946508049965,0.418714195489883,0.894627928733826,-0.200460329651833,0.603900372982025,0.771440207958221,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.633183777332306,0.444622397422791,-0.6335529088974,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.806818068027496,0.571618735790253,0.149320676922798,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.806818068027496,0.571618735790253,0.149320676922798,-0.757650375366211,0.518597006797791,-0.39626133441925,-0.559803783893585,0.448765695095062,0.696583867073059,-0.559803783893585,0.448765695095062,0.696583867073059,-0.507044553756714,0.251941651105881,0.824276208877563,-0.806818068027496,0.571618735790253,0.149320676922798,-0.0995585918426514,-0.971274793148041,-0.216132834553719,-0.541550755500793,-0.826843023300171,-0.151833668351173,0.220480233430862,-0.962971389293671,-0.155160069465637,-0.871611714363098,0.473160296678543,-0.128110930323601,-0.739033222198486,0.522002279758453,0.425844460725784,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.162613198161125,0.452644348144531,0.876738309860229,-0.585053384304047,0.545464694499969,0.600150644779205,-0.896232187747955,0.443575948476791,0.00286618177779019,-0.846407413482666,0.503773093223572,0.17264749109745,-0.802789449691772,0.535418033599854,0.26240548491478,-0.73642486333847,0.608879089355469,0.294863820075989,-0.802789449691772,0.535418033599854,0.26240548491478,-0.850029647350311,0.48296907544136,0.210215270519257,-0.826775729656219,0.455823004245758,0.329647213220596,0.515248417854309,-0.441880226135254,-0.734343886375427,0.745758533477783,-0.330089628696442,-0.578692495822906,0.648194909095764,-0.336823225021362,-0.682930052280426,-0.802789449691772,0.535418033599854,0.26240548491478,-0.737847745418549,0.550981104373932,0.389872461557388,-0.73642486333847,0.608879089355469,0.294863820075989,-0.826775729656219,0.455823004245758,0.329647213220596,-0.743728399276733,0.346636980772018,0.571586310863495,-0.948099076747894,0.317963510751724,0.00271255942061543, -0.737847745418549,0.550981104373932,0.389872461557388,-0.724430322647095,0.542059719562531,0.425877869129181,-0.693721890449524,0.488555252552032,0.529210448265076,-0.525893211364746,0.411127626895905,0.744587421417236,-0.878819167613983,0.322898685932159,0.351302325725555,-0.693721890449524,0.488555252552032,0.529210448265076,-0.774610698223114,0.0345993041992188,0.631491184234619,-0.878819167613983,0.322898685932159,0.351302325725555,-0.525893211364746,0.411127626895905,0.744587421417236,-0.907855153083801,0.259428709745407,-0.329386949539185,-0.948099076747894,0.317963510751724,0.00271255942061543,-0.929436683654785,-0.0642196834087372,0.36335015296936,-0.911366164684296,0.266076982021332,0.31402975320816,-0.910764098167419,0.385902374982834,-0.146928876638412,-0.891911506652832,0.441495150327683,0.0978566035628319,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.911366164684296,0.266076982021332,0.31402975320816,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.730839848518372,0.374586492776871,0.570576965808868,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.713936686515808,0.496329486370087,-0.493914365768433,-0.730839848518372,0.374586492776871,0.570576965808868,-0.872280597686768,0.488854855298996,0.0121469330042601,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.814637243747711,0.194269418716431,-0.546466410160065,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.818624794483185,-0.0173483304679394,0.574066698551178,-0.541550755500793,-0.826843023300171,-0.151833668351173,-0.994495153427124,-0.0799508094787598,0.0677299797534943,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.534125924110413,-0.786291003227234,-0.310573488473892,0.113647989928722,-0.758261322975159,0.641968786716461,-0.156990006566048,-0.969383895397186,0.188809439539909,-0.462510108947754,-0.809054553508759,0.362650156021118,-0.273908197879791,-0.125118911266327,-0.953582465648651, -0.183117777109146,0.0588014125823975,-0.981330871582031,-0.735660195350647,0.260931700468063,-0.625074982643127,-0.629925072193146,0.0149115975946188,-0.776512682437897,0.906101286411285,-0.389416426420212,-0.165334045886993,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.950212061405182,0.303586721420288,0.0702292993664742,-0.181978538632393,0.229496166110039,0.956146061420441,-0.213889330625534,0.483835697174072,0.848619103431702,0.10479624569416,-0.144131794571877,0.983993768692017,0.075324609875679,0.630104899406433,0.772848010063171,-0.213889330625534,0.483835697174072,0.848619103431702,-0.181978538632393,0.229496166110039,0.956146061420441,0.919881999492645,-0.0601645521819592,-0.387552946805954,0.810982346534729,-0.364237248897552,-0.457863301038742,0.946987807750702,-0.279256701469421,-0.158838823437691,0.917286098003387,-0.397383034229279,0.0259414706379175,0.907455027103424,-0.419752985239029,-0.0182434022426605,0.370425969362259,-0.053249154239893,-0.927334427833557,0.843434154987335,0.424213349819183,0.329638987779617,0.619699597358704,0.579480230808258,0.529315650463104,0.631212413311005,0.590215682983398,0.503206074237823,0.986938416957855,-0.10414332151413,-0.122909314930439,0.906101286411285,-0.389416426420212,-0.165334045886993,0.843434154987335,0.424213349819183,0.329638987779617,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.200460329651833,0.603900372982025,0.771440207958221,0.0509466230869293,0.674606919288635,0.73641699552536,-0.200460329651833,0.603900372982025,0.771440207958221,-0.000278991181403399,0.484035164117813,0.875048518180847,-0.225308075547218,0.514127254486084,0.827592551708221,-0.646084487438202,0.634681701660156,0.423973977565765,-0.601623058319092,0.623578310012817,0.499199062585831,-0.506461322307587,0.506999313831329,0.697458744049072,-0.636041522026062,0.455239772796631,0.623063385486603,-0.569389760494232,0.625551760196686,0.533366978168488,-0.458326160907745,0.410590946674347,0.788258969783783,-0.313503563404083,0.434664905071259,0.844264149665833, -0.126709908246994,0.488826990127563,0.863129615783691,0.126011043787003,0.287478059530258,0.949461758136749,-0.126709908246994,0.488826990127563,0.863129615783691,-0.313503563404083,0.434664905071259,0.844264149665833,-0.0354647859930992,0.343396455049515,0.938520729541779,0.540099084377289,-0.0461409948766232,0.840335667133331,0.498305976390839,-0.0497501380741596,0.865572690963745,0.126011043787003,0.287478059530258,0.949461758136749,0.280613332986832,0.159042209386826,0.946552574634552,0.809420764446259,-0.470037072896957,0.351998805999756,0.72262305021286,-0.326216995716095,0.609424650669098,0.716558694839478,-0.309423923492432,0.625140368938446,0.977863430976868,-0.0681029558181763,0.197851315140724,0.977863430976868,-0.0681029558181763,0.197851315140724,0.946987807750702,-0.279256701469421,-0.158838823437691,0.741691589355469,-0.67026162147522,0.0253561399877071,0.809420764446259,-0.470037072896957,0.351998805999756,0.946987807750702,-0.279256701469421,-0.158838823437691,0.810982346534729,-0.364237248897552,-0.457863301038742,0.582424879074097,-0.744178652763367,-0.327077031135559,0.741691589355469,-0.67026162147522,0.0253561399877071,0.810982346534729,-0.364237248897552,-0.457863301038742,0.745758533477783,-0.330089628696442,-0.578692495822906,0.508804976940155,-0.739443361759186,-0.440841227769852,0.582424879074097,-0.744178652763367,-0.327077031135559,0.284903138875961,-0.719545781612396,-0.633311986923218,0.416897594928741,-0.716307580471039,-0.559553265571594,0.508804976940155,-0.739443361759186,-0.440841227769852,0.745758533477783,-0.330089628696442,-0.578692495822906,0.515248417854309,-0.441880226135254,-0.734343886375427,-0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.629925072193146,0.0149115975946188,-0.776512682437897,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.897937893867493,0.273350894451141,-0.344944715499878, -0.589546144008636,-0.0253028552979231,-0.807338297367096,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.897937893867493,0.273350894451141,-0.344944715499878,-0.893975257873535,0.250766932964325,-0.371381372213364,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.720763742923737,0.630777835845947,0.28743514418602,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.73642486333847,0.608879089355469,0.294863820075989,-0.646084487438202,0.634681701660156,0.423973977565765,-0.720763742923737,0.630777835845947,0.28743514418602,-0.73642486333847,0.608879089355469,0.294863820075989,-0.601623058319092,0.623578310012817,0.499199062585831,-0.847473680973053,0.530733585357666,-0.0104993488639593,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.899121463298798,0.345348745584488,-0.268914222717285,-0.860682129859924,0.507934510707855,-0.0350551940500736,-0.918838560581207,0.321084290742874,-0.229435324668884,-0.95041960477829,0.288634985685349,-0.115725472569466,-0.931574642658234,0.319444477558136,-0.173562213778496,-0.899121463298798,0.345348745584488,-0.268914222717285,0.126011043787003,0.287478059530258,0.949461758136749,-0.0354647859930992,0.343396455049515,0.938520729541779,0.280613332986832,0.159042209386826,0.946552574634552,-0.506461322307587,0.506999313831329,0.697458744049072,-0.313503563404083,0.434664905071259,0.844264149665833,-0.458326160907745,0.410590946674347,0.788258969783783,-0.636041522026062,0.455239772796631,0.623063385486603,0.540099084377289,-0.0461409948766232,0.840335667133331,0.716558694839478,-0.309423923492432,0.625140368938446,0.72262305021286,-0.326216995716095,0.609424650669098,0.498305976390839,-0.0497501380741596,0.865572690963745,-0.000557535502593964,-0.634240567684174,-0.773135602474213,0.284903138875961,-0.719545781612396,-0.633311986923218,0.515248417854309,-0.441880226135254,-0.734343886375427,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784, -0.178665772080421,-0.378166645765305,-0.908332824707031,-0.000557535502593964,-0.634240567684174,-0.773135602474213,0.198349118232727,-0.359346985816956,-0.911881268024445,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.183117777109146,0.0588014125823975,-0.981330871582031,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.085550844669342,-0.179267361760139,-0.980073630809784,-0.273908197879791,-0.125118911266327,-0.953582465648651,-0.266710460186005,-0.229353681206703,-0.936088860034943,-0.178665772080421,-0.378166645765305,-0.908332824707031,0.280117779970169,0.669322490692139,0.688143491744995,0.458152443170547,0.667493462562561,0.586982846260071,0.562915802001953,0.509836494922638,0.650532484054565,0.291106730699539,0.735121071338654,0.612253129482269,-0.431082636117935,0.669595658779144,0.604821860790253,-0.285846680402756,0.740470588207245,0.608272194862366,-0.324628859758377,0.674010813236237,0.663570284843445,-0.658022820949554,0.640722334384918,0.395576566457748,-0.721357464790344,0.650649428367615,0.237273663282394,-0.557555019855499,0.7959104180336,0.235921680927277,-0.560215890407562,0.757637023925781,0.334879487752914,-0.677088737487793,-0.402109175920486,-0.616327106952667,-0.373749554157257,-0.424562931060791,-0.824656069278717,-0.405299872159958,-0.415835052728653,-0.814133405685425,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.737501204013824,0.475387096405029,-0.479686439037323,-0.826433479785919,-0.267859846353531,-0.495236098766327,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.535482585430145,0.550125539302826,-0.640796601772308,-0.579810619354248,-0.395008951425552,-0.71259218454361,-0.369074016809464,-0.353648155927658,-0.859486699104309,-0.453488618135452,0.205984279513359,-0.867132365703583,-0.0340137556195259,-0.196621879935265,-0.979889214038849,-0.0743019878864288,-0.318207800388336,-0.945104777812958,0.0686725899577141,-0.344746232032776,-0.936180591583252,0.205058068037033,-0.244612783193588,-0.947689712047577,0.296686768531799,0.847575604915619,-0.439991503953934, 0.454949915409088,0.569741904735565,-0.6844083070755,0.550657391548157,0.552472710609436,-0.625739872455597,0.339142799377441,0.423890322446823,-0.839820921421051,0.427927106618881,-0.320324927568436,-0.845145165920258,0.500678837299347,-0.355485200881958,-0.789272427558899,0.454949915409088,0.569741904735565,-0.6844083070755,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.915072500705719,0.126962244510651,0.382783114910126,-0.833327293395996,0.113953985273838,0.540906727313995,-0.850330471992493,0.108354985713959,0.514973104000092,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.95991450548172,0.12906339764595,0.248810708522797,-0.915072500705719,0.126962244510651,0.382783114910126,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.95991450548172,0.12906339764595,0.248810708522797,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.90544730424881,0.119117729365826,0.407401740550995,-0.830910623073578,0.150519490242004,0.535659790039063,-0.833327293395996,0.113953985273838,0.540906727313995,-0.915072500705719,0.126962244510651,0.382783114910126,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.90544730424881,0.119117729365826,0.407401740550995,-0.915072500705719,0.126962244510651,0.382783114910126,-0.95991450548172,0.12906339764595,0.248810708522797,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.96833336353302,0.0874056592583656,0.23386062681675, -0.95991450548172,0.12906339764595,0.248810708522797,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.446692645549774,0.129568219184875,0.885255753993988,-0.850330471992493,0.108354985713959,0.514973104000092,-0.833327293395996,0.113953985273838,0.540906727313995,-0.484486788511276,0.136127799749374,0.864142179489136,-0.833327293395996,0.113953985273838,0.540906727313995,-0.830910623073578,0.150519490242004,0.535659790039063,-0.504776954650879,0.179731994867325,0.844332098960876,-0.484486788511276,0.136127799749374,0.864142179489136,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.992459714412689,0.0535954684019089,-0.110232837498188, -0.961289465427399,-0.197325810790062,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.615352869033813,0.61141961812973,-0.497500658035278,0.103712424635887,0.131697446107864,0.985849618911743,-0.446692645549774,0.129568219184875,0.885255753993988,-0.484486788511276,0.136127799749374,0.864142179489136,0.0677588582038879,0.127564132213593,0.989513099193573,-0.484486788511276,0.136127799749374,0.864142179489136,-0.504776954650879,0.179731994867325,0.844332098960876,0.0673240348696709,0.131959661841393,0.988966166973114,0.0677588582038879,0.127564132213593,0.989513099193573,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.508872270584106,0.031244209036231,0.860274851322174,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.361082255840302,-0.597368240356445,0.716080188751221,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.282705783843994,-0.5980544090271,0.749938905239105,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.00733196083456278,-0.679022014141083,0.734081327915192, -0.0927847772836685,-0.869047880172729,0.485949277877808,-0.52260547876358,-0.713823437690735,0.466196954250336,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.935397446155548,0.0250490680336952,-0.352709710597992,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.972792744636536,0.0608477629721165,-0.223543986678123,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.280504614114761,0.75769966840744,-0.58924388885498,0.103712424635887,0.131697446107864,0.985849618911743,-0.3530093729496,0.178218960762024,0.918489158153534,-0.342477291822433,0.228350877761841,0.911353468894959,0.142002120614052,0.141973868012428,0.979631960391998,-0.203233033418655,-0.00871946662664413,0.979091584682465,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.0107409534975886,-0.582138001918793,0.813019037246704,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0107409534975886,-0.582138001918793,0.813019037246704, -0.0782936215400696,-0.811185777187347,0.579523682594299,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0782936215400696,-0.811185777187347,0.579523682594299,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.0927847772836685,-0.869047880172729,0.485949277877808,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.596441090106964,-0.0567259602248669,-0.800649881362915,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.850330471992493,0.108354985713959,0.514973104000092,-0.85614150762558,0.16506227850914,0.489669442176819,-0.866834819316864,0.162685200572014,0.471307665109634, -0.88858425617218,0.0664631873369217,0.453872948884964,-0.887829720973969,0.160652026534081,0.431218415498734,-0.954534351825714,0.144535258412361,0.260717809200287,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.954534351825714,0.144535258412361,0.260717809200287,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.995226204395294,0.0964939147233963,-0.0146211665123701,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.446692645549774,0.129568219184875,0.885255753993988,-0.4341821372509,0.175567016005516,0.883550822734833,-0.85614150762558,0.16506227850914,0.489669442176819,-0.850330471992493,0.108354985713959,0.514973104000092,0.103712424635887,0.131697446107864,0.985849618911743,0.142002120614052,0.141973868012428,0.979631960391998,-0.4341821372509,0.175567016005516,0.883550822734833,-0.446692645549774,0.129568219184875,0.885255753993988,-0.85614150762558,0.16506227850914,0.489669442176819,-0.542121350765228,0.80557918548584,0.239053606987,-0.545656681060791,0.805297791957855,0.23184959590435,-0.866834819316864,0.162685200572014,0.471307665109634,-0.887829720973969,0.160652026534081,0.431218415498734,-0.567242085933685,0.801439464092255,0.189555287361145,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.954534351825714,0.144535258412361,0.260717809200287,-0.954534351825714,0.144535258412361,0.260717809200287,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.4341821372509,0.175567016005516,0.883550822734833,-0.252021908760071,0.83885395526886,0.482502818107605,-0.542121350765228,0.80557918548584,0.239053606987,-0.85614150762558,0.16506227850914,0.489669442176819,0.142002120614052,0.141973868012428,0.979631960391998, 0.134743452072144,0.77269721031189,0.620308935642242,-0.252021908760071,0.83885395526886,0.482502818107605,-0.4341821372509,0.175567016005516,0.883550822734833,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.959655940532684,-0.217719197273254,-0.177929356694222,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.795754730701447,0.170272067189217,0.58118999004364,-0.887829720973969,0.160652026534081,0.431218415498734,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.934069633483887,0.0233576260507107,0.356326133012772,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.976888537406921,-0.0332014113664627,0.211155027151108,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.996626496315002,0.00991271808743477,0.0814704447984695,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.991207242012024,0.115119017660618,0.0652364492416382,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.795754730701447,0.170272067189217,0.58118999004364,-0.502963840961456,0.808468639850616,0.305623710155487,-0.567242085933685,0.801439464092255,0.189555287361145,-0.887829720973969,0.160652026534081,0.431218415498734,-0.795754730701447,0.170272067189217,0.58118999004364,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.88858425617218,0.0664631873369217,0.453872948884964, -0.866834819316864,0.162685200572014,0.471307665109634,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.970968067646027,-0.16826631128788,0.1700219810009,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.975045323371887,0.00311258574947715,0.221984133124352,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.971041917800903,0.0163660850375891,-0.238347947597504,-0.502963840961456,0.808468639850616,0.305623710155487,-0.795754730701447,0.170272067189217,0.58118999004364,-0.866834819316864,0.162685200572014,0.471307665109634,-0.545656681060791,0.805297791957855,0.23184959590435,-0.973434746265411,0.0614772625267506,-0.220556899905205,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.640371739864349,0.527525365352631,-0.558248162269592,-0.982470035552979,0.0214608013629913,-0.185180932283401,0.859614074230194,0.295270681381226,-0.416987895965576,0.727284967899323,0.664062142372131,-0.173430144786835,0.739424109458923,0.592256605625153,0.320131361484528,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.440291285514832,0.870396435260773,0.220348998904228,-0.696859955787659,0.71514618396759,-0.0543340221047401,0.480490952730179,0.872772097587585,-0.0860075280070305,0.739424109458923,0.592256605625153,0.320131361484528,0.727284967899323,0.664062142372131,-0.173430144786835,0.859614074230194,0.295270681381226,-0.416987895965576,0.95859158039093,0.227282658219337,-0.171594634652138,0.452183425426483,0.585657775402069,-0.672707319259644,0.663050174713135,0.587917149066925,-0.463376611471176,0.618651807308197,0.59744918346405,-0.510219931602478,0.606457710266113,0.614539504051209,-0.504529714584351,0.818660914897919,0.313737779855728,-0.481002062559128, 0.726223528385162,0.613508462905884,-0.310172140598297,0.668675601482391,0.60236382484436,-0.435925096273422,0.818660914897919,0.313737779855728,-0.481002062559128,0.837498724460602,0.478580474853516,-0.263735711574554,0.618651807308197,0.59744918346405,-0.510219931602478,0.266915023326874,0.622528493404388,-0.735672950744629,0.107837736606598,0.170556277036667,-0.979429244995117,0.606457710266113,0.614539504051209,-0.504529714584351,-0.745452880859375,0.509112060070038,-0.430238157510757,0.107837736606598,0.170556277036667,-0.979429244995117,-0.112059034407139,0.629188656806946,-0.769132256507874,-0.907228708267212,0.420285493135452,-0.0172105636447668,0.760291457176209,0.640448451042175,-0.108548037707806,0.754503428936005,0.630674540996552,-0.181587845087051,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.786859929561615,0.489207118749619,-0.376201838254929,0.760291457176209,0.640448451042175,-0.108548037707806,0.913363456726074,0.407031029462814,0.00964442919939756,0.95859158039093,0.227282658219337,-0.171594634652138,-0.793882787227631,0.349916815757751,-0.497301042079926,0.859614074230194,0.295270681381226,-0.416987895965576,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.615352869033813,0.61141961812973,-0.497500658035278,-0.542121350765228,0.80557918548584,0.239053606987,0.618651807308197,0.59744918346405,-0.510219931602478,0.663050174713135,0.587917149066925,-0.463376611471176,-0.545656681060791,0.805297791957855,0.23184959590435,-0.567242085933685,0.801439464092255,0.189555287361145,0.668675601482391,0.60236382484436,-0.435925096273422,0.726223528385162,0.613508462905884,-0.310172140598297,-0.613154649734497,0.784870028495789,0.0895571559667587,-0.613154649734497,0.784870028495789,0.0895571559667587,0.726223528385162,0.613508462905884,-0.310172140598297,0.754503428936005,0.630674540996552,-0.181587845087051,-0.63306587934494,0.773617923259735,-0.0272569861263037,-0.672253370285034,0.372103184461594,-0.640011370182037,0.739069283008575,0.399415373802185,-0.542442619800568, 0.859614074230194,0.295270681381226,-0.416987895965576,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.640371739864349,0.527525365352631,-0.558248162269592,0.786859929561615,0.489207118749619,-0.376201838254929,0.739069283008575,0.399415373802185,-0.542442619800568,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.252021908760071,0.83885395526886,0.482502818107605,0.266915023326874,0.622528493404388,-0.735672950744629,0.618651807308197,0.59744918346405,-0.510219931602478,-0.542121350765228,0.80557918548584,0.239053606987,0.134743452072144,0.77269721031189,0.620308935642242,-0.112059034407139,0.629188656806946,-0.769132256507874,0.266915023326874,0.622528493404388,-0.735672950744629,-0.252021908760071,0.83885395526886,0.482502818107605,-0.500255882740021,0.598247230052948,0.625974655151367,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.112059034407139,0.629188656806946,-0.769132256507874,0.134743452072144,0.77269721031189,0.620308935642242,-0.502963840961456,0.808468639850616,0.305623710155487,0.617954909801483,0.584929347038269,-0.525346875190735,0.668675601482391,0.60236382484436,-0.435925096273422,-0.567242085933685,0.801439464092255,0.189555287361145,-0.63306587934494,0.773617923259735,-0.0272569861263037,0.754503428936005,0.630674540996552,-0.181587845087051,0.760291457176209,0.640448451042175,-0.108548037707806,-0.632741153240204,0.704046428203583,-0.322424083948135,-0.545656681060791,0.805297791957855,0.23184959590435,0.663050174713135,0.587917149066925,-0.463376611471176,0.617954909801483,0.584929347038269,-0.525346875190735,-0.502963840961456,0.808468639850616,0.305623710155487,-0.632741153240204,0.704046428203583,-0.322424083948135,0.760291457176209,0.640448451042175,-0.108548037707806,0.786859929561615,0.489207118749619,-0.376201838254929,-0.640371739864349,0.527525365352631,-0.558248162269592,0.134743452072144,0.77269721031189,0.620308935642242,0.142002120614052,0.141973868012428,0.979631960391998,-0.342477291822433,0.228350877761841,0.911353468894959,-0.500255882740021,0.598247230052948,0.625974655151367, -0.802371442317963,-0.439784169197083,-0.403472363948822,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.332114219665527,-0.935638904571533,-0.119498759508133,-0.496702879667282,-0.638544976711273,-0.587832093238831,-0.567457735538483,-0.508834183216095,-0.647363483905792,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.520528793334961,-0.54434335231781,-0.657829761505127,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.988875865936279,0.0939552411437035,-0.115312464535236,-0.995317578315735,0.0929132029414177,-0.0266464799642563,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.508872270584106,0.031244209036231,0.860274851322174,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.536516189575195,-0.591317057609558,0.602075219154358,-0.588486015796661,-0.357772886753082,0.725039839744568,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.802422821521759,-0.594593703746796,-0.0507543347775936,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.895039916038513,-0.34432727098465,-0.283447057008743,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.793882787227631,0.349916815757751,-0.497301042079926,-0.88858425617218,0.0664631873369217,0.453872948884964,-0.914398610591888,-0.029835456982255,0.403714030981064,-0.940154373645782,-0.000986201339401305,0.34074741601944,-0.999095141887665,-0.00423012021929026,-0.0423198379576206,-0.992125034332275,-0.0701997056603432,-0.103729829192162,-0.971041917800903,0.0163660850375891,-0.238347947597504,0.754503428936005,0.630674540996552,-0.181587845087051,0.726223528385162,0.613508462905884,-0.310172140598297, 0.837498724460602,0.478580474853516,-0.263735711574554,0.739069283008575,0.399415373802185,-0.542442619800568,0.786859929561615,0.489207118749619,-0.376201838254929,0.95859158039093,0.227282658219337,-0.171594634652138,0.266915023326874,0.622528493404388,-0.735672950744629,-0.112059034407139,0.629188656806946,-0.769132256507874,0.107837736606598,0.170556277036667,-0.979429244995117,0.668675601482391,0.60236382484436,-0.435925096273422,0.617954909801483,0.584929347038269,-0.525346875190735,0.818660914897919,0.313737779855728,-0.481002062559128,0.663050174713135,0.587917149066925,-0.463376611471176,0.818660914897919,0.313737779855728,-0.481002062559128,0.617954909801483,0.584929347038269,-0.525346875190735,-0.615352869033813,0.61141961812973,-0.497500658035278,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.280504614114761,0.75769966840744,-0.58924388885498,-0.672253370285034,0.372103184461594,-0.640011370182037,-0.982470035552979,0.0214608013629913,-0.185180932283401,-0.640371739864349,0.527525365352631,-0.558248162269592,0.739069283008575,0.399415373802185,-0.542442619800568,0.95859158039093,0.227282658219337,-0.171594634652138,0.859614074230194,0.295270681381226,-0.416987895965576,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.280504614114761,0.75769966840744,-0.58924388885498,0.480490952730179,0.872772097587585,-0.0860075280070305,-0.961289465427399,-0.197325810790062,-0.192315071821213,-0.992459714412689,0.0535954684019089,-0.110232837498188,-0.999439835548401,-0.0108993193134665,-0.0316409841179848,-0.128415614366531,0.132796317338943,0.982789158821106,-0.3530093729496,0.178218960762024,0.918489158153534,0.103712424635887,0.131697446107864,0.985849618911743,0.0677588582038879,0.127564132213593,0.989513099193573,-0.271919548511505,0.128996223211288,0.953635036945343,-0.128415614366531,0.132796317338943,0.982789158821106,0.0677588582038879,0.127564132213593,0.989513099193573,0.0673240348696709,0.131959661841393,0.988966166973114,0.107837736606598,0.170556277036667,-0.979429244995117,-0.745452880859375,0.509112060070038,-0.430238157510757, -0.394719243049622,0.916350066661835,0.0670766159892082,0.606457710266113,0.614539504051209,-0.504529714584351,0.606457710266113,0.614539504051209,-0.504529714584351,-0.394719243049622,0.916350066661835,0.0670766159892082,-0.514610290527344,0.855887234210968,0.0513155348598957,0.818660914897919,0.313737779855728,-0.481002062559128,0.818660914897919,0.313737779855728,-0.481002062559128,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.0310307368636131,0.989131927490234,-0.14371882379055,0.837498724460602,0.478580474853516,-0.263735711574554,0.913363456726074,0.407031029462814,0.00964442919939756,0.837498724460602,0.478580474853516,-0.263735711574554,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.484726011753082,0.737569272518158,-0.470140665769577,0.95859158039093,0.227282658219337,-0.171594634652138,0.95859158039093,0.227282658219337,-0.171594634652138,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.6479212641716,0.534398972988129,-0.542785227298737,0.452183425426483,0.585657775402069,-0.672707319259644,0.452183425426483,0.585657775402069,-0.672707319259644,-0.6479212641716,0.534398972988129,-0.542785227298737,-0.621815145015717,0.744533002376556,-0.24293327331543,0.727284967899323,0.664062142372131,-0.173430144786835,0.727284967899323,0.664062142372131,-0.173430144786835,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.440291285514832,0.870396435260773,0.220348998904228,0.739424109458923,0.592256605625153,0.320131361484528,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.0231689736247063,-0.380177617073059,0.924623250961304,-0.109985366463661,-0.239039614796638,0.964760720729828,0.0760682299733162,-0.295749306678772,0.952232122421265,0.15866231918335,-0.379611045122147,0.91143935918808,0.52398556470871,-0.396742969751358,0.753680408000946, 0.790293097496033,-0.395322471857071,0.468142062425613,0.755637884140015,-0.506735622882843,0.415006548166275,0.481494694948196,-0.484542727470398,0.730329513549805,0.871467053890228,-0.412256300449371,0.265687584877014,0.755637884140015,-0.506735622882843,0.415006548166275,0.790293097496033,-0.395322471857071,0.468142062425613,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.815638482570648,-0.327178388834,0.477166801691055,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.815638482570648,-0.327178388834,0.477166801691055,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.730245351791382,-0.126696899533272,0.671334207057953,0.184660375118256,-0.167485639452934,0.968426108360291,-0.326030820608139,-0.10023545473814,0.940030157566071,-0.378116965293884,-0.19206166267395,0.905615746974945,0.141510874032974,-0.212751299142838,0.9668048620224,0.641422510147095,-0.270272105932236,0.718004286289215,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.481494694948196,-0.484542727470398,0.730329513549805,0.817183673381805,-0.296553581953049,0.494233578443527,0.641422510147095,-0.270272105932236,0.718004286289215,0.481494694948196,-0.484542727470398,0.730329513549805,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.925617933273315,-0.33330973982811,0.179265230894089,0.755637884140015,-0.506735622882843,0.415006548166275,0.871467053890228,-0.412256300449371,0.265687584877014,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.941830277442932,0.142349690198898,-0.30445408821106, -0.97038471698761,0.0723681449890137,-0.230469912290573,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.883178770542145,0.174471154808998,-0.435379177331924,0.279067039489746,0.00181126198731363,0.960269927978516,-0.192327111959457,0.128940626978874,0.972822964191437,0.0315546318888664,0.227497383952141,0.973267316818237,0.421088457107544,0.0603364557027817,0.905010521411896,0.176409095525742,0.258731871843338,0.949703991413116,0.128309071063995,0.135050594806671,0.982495903968811,0.228005558252335,0.109595686197281,0.967472076416016,0.239963844418526,0.229667663574219,0.943223297595978,0.952021479606628,-0.172354578971863,0.252881437540054,0.951565146446228,-0.195825412869453,0.237015143036842,0.941856145858765,-0.193580731749535,0.27465158700943,0.931146800518036,-0.184283837676048,0.31465071439743,0.951565146446228,-0.195825412869453,0.237015143036842,0.98254132270813,-0.173451960086823,0.0672831237316132,0.987110912799835,-0.0946229994297028,0.129068180918694,0.941856145858765,-0.193580731749535,0.27465158700943,-0.114197492599487,0.229852318763733,0.966502368450165,-0.810181975364685,0.20594097673893,0.548811018466949,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.328887611627579,-0.327985614538193,0.885583639144897,0.169450357556343,0.192077651619911,0.966639935970306,-0.114197492599487,0.229852318763733,0.966502368450165,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.200362399220467,-0.34291222691536,0.917750597000122,0.234150499105453,0.240436136722565,0.941999971866608,0.708682000637054,0.0549906380474567,0.703381717205048,0.421088457107544,0.0603364557027817,0.905010521411896,0.0315546318888664,0.227497383952141,0.973267316818237,0.383701860904694,0.4597148001194,0.800896465778351,0.307897627353668,0.368194788694382,0.877286553382874,0.176409095525742,0.258731871843338,0.949703991413116,0.239963844418526,0.229667663574219,0.943223297595978, 0.96482926607132,0.118159219622612,0.23482520878315,0.931146800518036,-0.184283837676048,0.31465071439743,0.941856145858765,-0.193580731749535,0.27465158700943,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006,0.974241256713867,0.0409249700605869,0.221763730049133,0.941856145858765,-0.193580731749535,0.27465158700943,0.987110912799835,-0.0946229994297028,0.129068180918694,0.522907495498657,0.438181906938553,0.731139063835144,0.459321737289429,0.336945086717606,0.821882903575897,0.307897627353668,0.368194788694382,0.877286553382874,0.383701860904694,0.4597148001194,0.800896465778351,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.405384927988052,-0.526269018650055,0.747465074062347,0.0315546318888664,0.227497383952141,0.973267316818237,0.537278115749359,0.0936880186200142,0.838185369968414,0.618959546089172,0.0886023566126823,0.780409336090088,0.234150499105453,0.240436136722565,0.941999971866608,-0.192327111959457,0.128940626978874,0.972822964191437,0.414723992347717,0.00967027805745602,0.909895896911621,0.537278115749359,0.0936880186200142,0.838185369968414,0.0315546318888664,0.227497383952141,0.973267316818237,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.696337580680847,-0.401266604661942,0.595062255859375,-0.383682757616043,-0.370396196842194,0.845928013324738, 0.0664144828915596,-0.803862929344177,0.591095209121704,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.127582266926765,-0.6490518450737,0.749969661235809,0.0995035693049431,-0.912259519100189,0.397343188524246,0.453684121370316,-0.692796587944031,0.560538649559021,-0.0757445394992828,-0.423881083726883,0.902545094490051,-0.248274028301239,-0.562410414218903,0.788704335689545,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.689171850681305,-0.406394809484482,0.599904477596283,0.0119833052158356,-0.684736132621765,0.728692531585693,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.248274028301239,-0.562410414218903,0.788704335689545,0.588976085186005,-0.561100006103516,0.58161324262619,-0.405343025922775,-0.871097385883331,0.277284026145935,-0.4933140873909,-0.832423627376556,0.252412617206573,0.0119833052158356,-0.684736132621765,0.728692531585693,0.588976085186005,-0.561100006103516,0.58161324262619,0.80362457036972,-0.592847883701324,0.052143108099699,-0.182750031352043,-0.981905281543732,-0.0496434457600117,-0.405343025922775,-0.871097385883331,0.277284026145935,0.586520791053772,-0.278485208749771,-0.760551989078522,0.557888448238373,-0.237554967403412,-0.795190632343292,0.250409841537476,-0.715217471122742,-0.652502000331879,0.815547049045563,-0.485381871461868,-0.315099239349365,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.38756388425827,0.403812289237976,-0.82869166135788,0.722857892513275,-0.480003207921982,-0.497064769268036,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.557888448238373,-0.237554967403412,-0.795190632343292,0.586520791053772,-0.278485208749771,-0.760551989078522,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0894739627838135,-0.183631375432014,-0.978914678096771, -0.0492830350995064,-0.186444014310837,-0.981228709220886,0.733602523803711,0.10412222892046,-0.671554863452911,0.827176570892334,0.131099432706833,-0.546435594558716,0.785422801971436,0.0201532933861017,-0.618631482124329,0.733602523803711,0.10412222892046,-0.671554863452911,0.784134984016418,-0.509350836277008,-0.354533582925797,0.873561680316925,0.247193098068237,-0.419267863035202,0.827176570892334,0.131099432706833,-0.546435594558716,0.313923090696335,0.485718756914139,-0.815799951553345,0.310650020837784,0.28316468000412,-0.907366693019867,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0705952271819115,0.538945734500885,-0.839377045631409,0.163023561239243,0.98268049955368,-0.0881040766835213,-0.237061515450478,0.971401154994965,-0.0134798940271139,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744,0.217398658394814,0.611826419830322,0.748416423797607,0.256010234355927,0.461327522993088,0.762120604515076,0.454256683588028,0.551901042461395,0.718475461006165,0.423318117856979,0.692905008792877,0.710618555545807,0.122081570327282,0.692905008792877,0.710618555545807,0.122081570327282,0.551901042461395,0.718475461006165,0.423318117856979,0.744250357151031,0.605297327041626,0.282323569059372,0.765731871128082,0.635692894458771,-0.0977200418710709,0.72797954082489,0.659762263298035,-0.1864393055439,0.727798700332642,0.645059943199158,-0.232823416590691,0.737480342388153,0.641140997409821,0.212275862693787,0.749618530273438,0.631173431873322,0.199228778481483,0.72797954082489,0.659762263298035,-0.1864393055439,0.749618530273438,0.631173431873322,0.199228778481483,0.857426404953003,0.506103038787842,0.0931651070713997,0.787813723087311,0.593129634857178,-0.165972396731377,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.453684121370316,-0.692796587944031,0.560538649559021,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.877826690673828,-0.373566150665283,0.299780994653702, -0.552228093147278,-0.748099327087402,0.367955982685089,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.845922648906708,-0.233836725354195,-0.47930708527565,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.437478572130203,-0.839489638805389,0.32228809595108,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.437478572130203,-0.839489638805389,0.32228809595108,0.0664144828915596,-0.803862929344177,0.591095209121704,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.295072466135025,-0.836212396621704,0.462256520986557,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.188842684030533,-0.479351043701172,0.857065320014954,0.453684121370316,-0.692796587944031,0.560538649559021,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.187207087874413,-0.466673582792282,0.864389538764954,0.215633437037468,-0.617008090019226,0.756837606430054,-0.0384488701820374,-0.525311648845673,0.850040793418884,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.4933140873909,-0.832423627376556,0.252412617206573,0.505574882030487,-0.704972505569458,0.497401028871536,0.215633437037468,-0.617008090019226,0.756837606430054,-0.4933140873909,-0.832423627376556,0.252412617206573,-0.405343025922775,-0.871097385883331,0.277284026145935,0.648859202861786,-0.732072532176971,0.207488730549812,0.505574882030487,-0.704972505569458,0.497401028871536,-0.405343025922775,-0.871097385883331,0.277284026145935, -0.182750031352043,-0.981905281543732,-0.0496434457600117,0.557888448238373,-0.237554967403412,-0.795190632343292,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.724748253822327,-0.680762588977814,-0.106311939656734,0.250409841537476,-0.715217471122742,-0.652502000331879,-0.198073670268059,-0.129640847444534,-0.97157609462738,-0.854438602924347,-0.0391707941889763,-0.518073618412018,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0816480964422226,-0.362786769866943,0.928288400173187,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.584700465202332,-0.0801375582814217,0.80728143453598,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.557888448238373,-0.237554967403412,-0.795190632343292,0.661856412887573,-0.0551184453070164,-0.747601568698883,-0.115532882511616,-0.0797315537929535,-0.990098476409912,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.12953394651413,0.104335330426693,-0.986070513725281,0.827176570892334,0.131099432706833,-0.546435594558716,0.987110912799835,-0.0946229994297028,0.129068180918694,0.98254132270813,-0.173451960086823,0.0672831237316132,0.785422801971436,0.0201532933861017,-0.618631482124329,0.873561680316925,0.247193098068237,-0.419267863035202,0.991360425949097,0.041219849139452,0.124520778656006,0.987110912799835,-0.0946229994297028,0.129068180918694,0.827176570892334,0.131099432706833,-0.546435594558716, -0.751268684864044,0.274677604436874,-0.60012298822403,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.816423416137695,0.517423629760742,0.256369888782501,-0.317345827817917,0.649519979953766,0.69095253944397,0.24549475312233,0.895091116428375,0.372215270996094,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.0108341164886951,0.764748215675354,0.644238173961639,0.533803761005402,0.725452780723572,0.434478789567947,0.551901042461395,0.718475461006165,0.423318117856979,0.461327522993088,0.762120604515076,0.454256683588028,0.533803761005402,0.725452780723572,0.434478789567947,0.713100373744965,0.617973983287811,0.331052958965302,0.744250357151031,0.605297327041626,0.282323569059372,0.551901042461395,0.718475461006165,0.423318117856979,0.744611740112305,0.447527796030045,0.495249718427658,0.514605224132538,0.383560210466385,0.766852676868439,0.749618530273438,0.631173431873322,0.199228778481483,0.737480342388153,0.641140997409821,0.212275862693787,0.514605224132538,0.383560210466385,0.766852676868439,0.787412106990814,0.238013699650764,0.568622589111328,0.857426404953003,0.506103038787842,0.0931651070713997,0.749618530273438,0.631173431873322,0.199228778481483,0.976662814617157,0.0512243360280991,0.208580628037453,0.972417175769806,0.114111065864563,0.203429251909256,0.990084290504456,0.101971529424191,0.0966169014573097,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.972417175769806,0.114111065864563,0.203429251909256,0.976662814617157,0.0512243360280991,0.208580628037453,0.942203402519226,0.0765308514237404,0.326183587312698,0.936010003089905,0.160365864634514,0.313317894935608,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.460758477449417,0.108215481042862,0.880903542041779,-0.120599381625652,0.0903127938508987,0.988584518432617,0.453684121370316,-0.692796587944031,0.560538649559021,-0.188842684030533,-0.479351043701172,0.857065320014954, -0.485520303249359,-0.413982003927231,0.769992828369141,0.0664144828915596,-0.803862929344177,0.591095209121704,0.243934661149979,-0.119537994265556,0.962396264076233,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.192327111959457,0.128940626978874,0.972822964191437,0.279067039489746,0.00181126198731363,0.960269927978516,0.204974547028542,-0.221624046564102,0.953345775604248,-0.326030820608139,-0.10023545473814,0.940030157566071,-0.309459805488586,0.0171791967004538,0.950757324695587,0.243934661149979,-0.119537994265556,0.962396264076233,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.326030820608139,-0.10023545473814,0.940030157566071,0.204974547028542,-0.221624046564102,0.953345775604248,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.618749499320984,-0.411593735218048,-0.669133543968201,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.936010003089905,0.160365864634514,0.313317894935608,0.913795173168182,0.295857787132263,0.278292179107666,0.974241256713867,0.0409249700605869,0.221763730049133,0.972417175769806,0.114111065864563,0.203429251909256,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.785422801971436,0.0201532933861017,-0.618631482124329, 0.98254132270813,-0.173451960086823,0.0672831237316132,0.501740634441376,-0.243245840072632,0.830113112926483,0.549654603004456,-0.190786004066467,0.8133145570755,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.395515620708466,-0.150387838482857,0.906063437461853,0.141510874032974,-0.212751299142838,0.9668048620224,-0.378116965293884,-0.19206166267395,0.905615746974945,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.877826690673828,-0.373566150665283,0.299780994653702,-0.689171850681305,-0.406394809484482,0.599904477596283,0.974241256713867,0.0409249700605869,0.221763730049133,0.991360425949097,0.041219849139452,0.124520778656006,0.990084290504456,0.101971529424191,0.0966169014573097,0.972417175769806,0.114111065864563,0.203429251909256,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.460758477449417,0.108215481042862,0.880903542041779,-0.565971076488495,0.169359281659126,0.806842088699341,-0.3249591588974,0.21022142469883,0.922067523002625,-0.778803586959839,0.240923523902893,0.579155206680298,-0.509689390659332,0.284962147474289,0.811796367168427,-0.3249591588974,0.21022142469883,0.922067523002625,-0.565971076488495,0.169359281659126,0.806842088699341,-0.317345827817917,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,0.461327522993088,0.762120604515076,0.454256683588028,0.24549475312233,0.895091116428375,0.372215270996094,0.460725337266922,0.860505640506744,0.217398658394814,0.24549475312233,0.895091116428375,0.372215270996094,0.461327522993088,0.762120604515076,0.454256683588028,0.611826419830322,0.748416423797607,0.256010234355927,0.931353688240051,0.363742500543594,0.0164845213294029,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.725508868694305,-0.0050850510597229,-0.68819397687912, 0.661856412887573,-0.0551184453070164,-0.747601568698883,0.722857892513275,-0.480003207921982,-0.497064769268036,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.661856412887573,-0.0551184453070164,-0.747601568698883,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.967770040035248,-0.190110430121422,0.165164038538933,0.92842835187912,-0.2966628074646,0.223633676767349,0.967770040035248,-0.190110430121422,0.165164038538933,0.969397664070129,-0.16740058362484,0.179569631814957,0.925617933273315,-0.33330973982811,0.179265230894089,0.92842835187912,-0.2966628074646,0.223633676767349,0.817183673381805,-0.296553581953049,0.494233578443527,0.858429610729218,-0.151253923773766,0.490123331546783,0.736215591430664,-0.133181810379028,0.663512766361237,0.641422510147095,-0.270272105932236,0.718004286289215,0.641422510147095,-0.270272105932236,0.718004286289215,0.736215591430664,-0.133181810379028,0.663512766361237,0.15244060754776,-0.0132473884150386,0.988223850727081,0.0331840701401234,-0.163069397211075,0.986056387424469,0.27410614490509,-0.107289530336857,0.955695986747742,-0.309459805488586,0.0171791967004538,0.950757324695587,-0.326030820608139,-0.10023545473814,0.940030157566071,0.184660375118256,-0.167485639452934,0.968426108360291,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.0894739627838135,-0.183631375432014,-0.978914678096771,-0.0854111611843109,-0.252843081951141,-0.963729918003082,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.845922648906708,-0.233836725354195,-0.47930708527565, -0.385900318622589,-0.542145550251007,-0.746430933475494,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.495511651039124,-0.864618480205536,-0.0830851569771767,-0.385900318622589,-0.542145550251007,-0.746430933475494,-0.182750031352043,-0.981905281543732,-0.0496434457600117,0.80362457036972,-0.592847883701324,0.052143108099699,0.815547049045563,-0.485381871461868,-0.315099239349365,0.250409841537476,-0.715217471122742,-0.652502000331879,0.724748253822327,-0.680762588977814,-0.106311939656734,0.648859202861786,-0.732072532176971,0.207488730549812,-0.182750031352043,-0.981905281543732,-0.0496434457600117,0.250409841537476,-0.715217471122742,-0.652502000331879,0.876565277576447,0.158835455775261,0.4543177485466,0.81756728887558,0.216796487569809,0.533463180065155,0.744038224220276,-0.0333225503563881,0.667305529117584,0.807695090770721,-0.134995654225349,0.573938012123108,-0.129216328263283,-0.0478254519402981,0.990462481975555,0.549654603004456,-0.190786004066467,0.8133145570755,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,-0.251838445663452,-0.440982908010483,0.861458897590637,0.337114036083221,-0.517145156860352,0.786711513996124,0.69356244802475,0.349522531032562,0.629924654960632,0.179207041859627,0.602162182331085,0.778000950813293,0.840604901313782,-0.077635869383812,0.536056041717529,0.169450357556343,0.192077651619911,0.966639935970306,-0.200362399220467,-0.34291222691536,0.917750597000122,0.417133778333664,-0.483815759420395,0.769364476203918,0.713100373744965,0.617973983287811,0.331052958965302,0.744611740112305,0.447527796030045,0.495249718427658,0.737480342388153,0.641140997409821,0.212275862693787,0.744250357151031,0.605297327041626,0.282323569059372,0.727798700332642,0.645059943199158,-0.232823416590691,0.765731871128082,0.635692894458771,-0.0977200418710709,0.744250357151031,0.605297327041626,0.282323569059372,0.737480342388153,0.641140997409821,0.212275862693787,0.747647821903229,-0.00706117879599333,-0.664057850837708, 0.733602523803711,0.10412222892046,-0.671554863452911,0.785422801971436,0.0201532933861017,-0.618631482124329,0.725508868694305,-0.0050850510597229,-0.68819397687912,0.987223386764526,-0.158934772014618,-0.0113900080323219,0.98254132270813,-0.173451960086823,0.0672831237316132,0.951565146446228,-0.195825412869453,0.237015143036842,0.967770040035248,-0.190110430121422,0.165164038538933,0.967770040035248,-0.190110430121422,0.165164038538933,0.951565146446228,-0.195825412869453,0.237015143036842,0.952021479606628,-0.172354578971863,0.252881437540054,0.969397664070129,-0.16740058362484,0.179569631814957,0.15244060754776,-0.0132473884150386,0.988223850727081,0.228005558252335,0.109595686197281,0.967472076416016,0.128309071063995,0.135050594806671,0.982495903968811,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,-0.192327111959457,0.128940626978874,0.972822964191437,-0.309459805488586,0.0171791967004538,0.950757324695587,0.27410614490509,-0.107289530336857,0.955695986747742,-0.460758477449417,0.108215481042862,0.880903542041779,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.471319168806076,0.566682040691376,0.675817847251892,-0.565971076488495,0.169359281659126,0.806842088699341,-0.471319168806076,0.566682040691376,0.675817847251892,0.179207041859627,0.602162182331085,0.778000950813293,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.251838445663452,-0.440982908010483,0.861458897590637,-0.0749797448515892,0.161466658115387,0.984025657176971,0.279067039489746,0.00181126198731363,0.960269927978516,0.337114036083221,-0.517145156860352,0.786711513996124,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.565971076488495,0.169359281659126,0.806842088699341,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.565971076488495,0.169359281659126,0.806842088699341,-0.743342161178589,-0.232909336686134,0.627053201198578,-0.810181975364685,0.20594097673893,0.548811018466949, -0.778803586959839,0.240923523902893,0.579155206680298,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.24122528731823,-0.215426832437515,0.946256637573242,0.421088457107544,0.0603364557027817,0.905010521411896,0.417133778333664,-0.483815759420395,0.769364476203918,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.382766902446747,0.693923592567444,0.609884858131409,0.353388279676437,0.625863969326019,0.695277690887451,0.533803761005402,0.725452780723572,0.434478789567947,0.533803761005402,0.725452780723572,0.434478789567947,0.353388279676437,0.625863969326019,0.695277690887451,0.596079111099243,0.546218872070313,0.588502049446106,0.713100373744965,0.617973983287811,0.331052958965302,-0.509491384029388,0.564497232437134,0.649431586265564,-0.460758477449417,0.108215481042862,0.880903542041779,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.778017282485962,0.0114750172942877,0.628138065338135,0.501740634441376,-0.243245840072632,0.830113112926483,0.204974547028542,-0.221624046564102,0.953345775604248,0.243934661149979,-0.119537994265556,0.962396264076233,0.549654603004456,-0.190786004066467,0.8133145570755,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.584700465202332,-0.0801375582814217,0.80728143453598,0.204974547028542,-0.221624046564102,0.953345775604248,0.501740634441376,-0.243245840072632,0.830113112926483,0.274976700544357,-0.741329073905945,0.612224638462067,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.552228093147278,-0.748099327087402,0.367955982685089,0.274976700544357,-0.741329073905945,0.612224638462067,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.528048157691956,-0.00915560126304626,0.849165081977844,-0.584700465202332,-0.0801375582814217,0.80728143453598,-0.801663935184479,-0.0182420816272497,0.597496509552002,0.549654603004456,-0.190786004066467,0.8133145570755, 0.243934661149979,-0.119537994265556,0.962396264076233,0.279067039489746,0.00181126198731363,0.960269927978516,0.611190438270569,0.347120821475983,0.711303949356079,0.110788695514202,0.611092865467072,0.783767402172089,0.611190438270569,0.347120821475983,0.711303949356079,0.279067039489746,0.00181126198731363,0.960269927978516,-0.0749797448515892,0.161466658115387,0.984025657176971,0.69356244802475,0.349522531032562,0.629924654960632,0.421088457107544,0.0603364557027817,0.905010521411896,-0.24122528731823,-0.215426832437515,0.946256637573242,0.179207041859627,0.602162182331085,0.778000950813293,0.421088457107544,0.0603364557027817,0.905010521411896,0.69356244802475,0.349522531032562,0.629924654960632,0.337114036083221,-0.517145156860352,0.786711513996124,0.279067039489746,0.00181126198731363,0.960269927978516,0.708682000637054,0.0549906380474567,0.703381717205048,0.840604901313782,-0.077635869383812,0.536056041717529,0.417133778333664,-0.483815759420395,0.769364476203918,0.421088457107544,0.0603364557027817,0.905010521411896,0.713100373744965,0.617973983287811,0.331052958965302,0.596079111099243,0.546218872070313,0.588502049446106,0.924569427967072,0.246832609176636,0.290249824523926,0.744611740112305,0.447527796030045,0.495249718427658,0.274976700544357,-0.741329073905945,0.612224638462067,0.501740634441376,-0.243245840072632,0.830113112926483,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.552228093147278,-0.748099327087402,0.367955982685089,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.706475257873535,0.284995973110199,0.647819399833679,-0.768386900424957,0.31679978966713,0.556075036525726,-0.617434501647949,0.298396319150925,0.727828443050385,-0.471209764480591,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.566947221755981,0.26147249341011,0.781154930591583,-0.551642179489136,0.164528906345367,0.817692577838898, -0.439302027225494,0.130682304501534,0.888783395290375,-0.439302027225494,0.130682304501534,0.888783395290375,-0.551642179489136,0.164528906345367,0.817692577838898,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.38883912563324,0.0112887192517519,0.921236515045166,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.38883912563324,0.0112887192517519,0.921236515045166,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.333558112382889,-0.317182183265686,0.887769341468811,-0.815638482570648,-0.327178388834,0.477166801691055,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.631689548492432,-0.334710896015167,0.699240267276764,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.815638482570648,-0.327178388834,0.477166801691055,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.97038471698761,0.0723681449890137,-0.230469912290573, -0.941830277442932,0.142349690198898,-0.30445408821106,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.941830277442932,0.142349690198898,-0.30445408821106,-0.728761196136475,-0.219147056341171,-0.648753881454468,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.395515620708466,-0.150387838482857,0.906063437461853,-0.333558112382889,-0.317182183265686,0.887769341468811,0.0331840701401234,-0.163069397211075,0.986056387424469,0.15244060754776,-0.0132473884150386,0.988223850727081,-0.00481649860739708,-0.00974023062735796,0.999940991401672,-0.125947520136833,-0.109786510467529,0.985943257808685,0.0331840701401234,-0.163069397211075,0.986056387424469,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.936010003089905,0.160365864634514,0.313317894935608,0.942203402519226,0.0765308514237404,0.326183587312698,0.888628959655762,0.438762068748474,0.133515372872353,0.886933207511902,0.205319285392761,0.413755267858505,0.876565277576447,0.158835455775261,0.4543177485466, 0.913795173168182,0.295857787132263,0.278292179107666,0.839090466499329,0.267581433057785,0.473632037639618,0.81756728887558,0.216796487569809,0.533463180065155,0.835870265960693,-0.162916868925095,0.524193644523621,0.807695090770721,-0.134995654225349,0.573938012123108,0.744038224220276,-0.0333225503563881,0.667305529117584,0.754620671272278,-0.10168993473053,0.648233592510223,0.835870265960693,-0.162916868925095,0.524193644523621,0.754620671272278,-0.10168993473053,0.648233592510223,0.736215591430664,-0.133181810379028,0.663512766361237,0.858429610729218,-0.151253923773766,0.490123331546783,0.886933207511902,0.205319285392761,0.413755267858505,0.888628959655762,0.438762068748474,0.133515372872353,0.884826481342316,0.464208155870438,0.0399109348654747,0.7496537566185,0.27985754609108,0.599749088287354,0.81756728887558,0.216796487569809,0.533463180065155,0.839090466499329,0.267581433057785,0.473632037639618,0.522907495498657,0.438181906938553,0.731139063835144,0.383701860904694,0.4597148001194,0.800896465778351,0.744038224220276,-0.0333225503563881,0.667305529117584,0.81756728887558,0.216796487569809,0.533463180065155,0.383701860904694,0.4597148001194,0.800896465778351,0.239963844418526,0.229667663574219,0.943223297595978,0.228005558252335,0.109595686197281,0.967472076416016,0.754620671272278,-0.10168993473053,0.648233592510223,0.744038224220276,-0.0333225503563881,0.667305529117584,0.239963844418526,0.229667663574219,0.943223297595978,0.736215591430664,-0.133181810379028,0.663512766361237,0.754620671272278,-0.10168993473053,0.648233592510223,0.228005558252335,0.109595686197281,0.967472076416016,0.15244060754776,-0.0132473884150386,0.988223850727081,0.459321737289429,0.336945086717606,0.821882903575897,0.665011644363403,0.0966486409306526,0.740552842617035,0.307897627353668,0.368194788694382,0.877286553382874,0.925617933273315,-0.33330973982811,0.179265230894089,0.969397664070129,-0.16740058362484,0.179569631814957,0.858429610729218,-0.151253923773766,0.490123331546783,0.817183673381805,-0.296553581953049,0.494233578443527, 0.969397664070129,-0.16740058362484,0.179569631814957,0.952021479606628,-0.172354578971863,0.252881437540054,0.835870265960693,-0.162916868925095,0.524193644523621,0.858429610729218,-0.151253923773766,0.490123331546783,0.835870265960693,-0.162916868925095,0.524193644523621,0.952021479606628,-0.172354578971863,0.252881437540054,0.931146800518036,-0.184283837676048,0.31465071439743,0.807695090770721,-0.134995654225349,0.573938012123108,0.876565277576447,0.158835455775261,0.4543177485466,0.807695090770721,-0.134995654225349,0.573938012123108,0.931146800518036,-0.184283837676048,0.31465071439743,0.96482926607132,0.118159219622612,0.23482520878315,0.913795173168182,0.295857787132263,0.278292179107666,0.876565277576447,0.158835455775261,0.4543177485466,0.96482926607132,0.118159219622612,0.23482520878315,0.925617933273315,-0.33330973982811,0.179265230894089,0.817183673381805,-0.296553581953049,0.494233578443527,0.755637884140015,-0.506735622882843,0.415006548166275,0.92842835187912,-0.2966628074646,0.223633676767349,0.871467053890228,-0.412256300449371,0.265687584877014,0.881475806236267,-0.330746680498123,0.337056457996368,0.881475806236267,-0.330746680498123,0.337056457996368,0.871467053890228,-0.412256300449371,0.265687584877014,0.790293097496033,-0.395322471857071,0.468142062425613,0.505574882030487,-0.704972505569458,0.497401028871536,0.648859202861786,-0.732072532176971,0.207488730549812,-0.3249591588974,0.21022142469883,0.922067523002625,-0.509689390659332,0.284962147474289,0.811796367168427,-0.706475257873535,0.284995973110199,0.647819399833679,-0.471209764480591,0.287038415670395,0.834008574485779,-0.485232472419739,0.239207372069359,0.84102874994278,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.3249591588974,0.21022142469883,0.922067523002625,-0.485232472419739,0.239207372069359,0.84102874994278,-0.439302027225494,0.130682304501534,0.888783395290375,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.38883912563324,0.0112887192517519,0.921236515045166, -0.35503289103508,-0.122166983783245,0.926837027072906,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.0752630904316902,-0.163290411233902,0.983703076839447,-0.35503289103508,-0.122166983783245,0.926837027072906,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.0816480964422226,-0.362786769866943,0.928288400173187,-0.353479325771332,-0.210106566548347,0.911541342735291,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.188842684030533,-0.479351043701172,0.857065320014954,-0.477214306592941,-0.241928458213806,0.844829678535461,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.485520303249359,-0.413982003927231,0.769992828369141,-0.660951018333435,-0.242743968963623,0.710083901882172,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.780203819274902,-0.321271508932114,0.536718428134918,-0.836283564567566,-0.213887989521027,0.504858076572418,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.966925442218781,-0.254910856485367,-0.00869623944163322,-0.905556201934814,-0.270013034343719,0.327201753854752,-0.952340602874756,-0.189112782478333,0.239340081810951,-0.98088002204895,-0.192411512136459,-0.0291934106498957,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.916346251964569,0.129433929920197,-0.378888338804245,-0.806906938552856,0.030128238722682,-0.589909672737122,-0.806990265846252,-0.00711527280509472,-0.590521931648254, -0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.928009748458862,0.0632824525237083,-0.367142021656036,-0.806990265846252,-0.00711527280509472,-0.590521931648254,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.960245311260223,-0.113252125680447,-0.255152612924576,-0.939613878726959,-0.00117565772961825,-0.342234462499619,-0.822551071643829,-0.00935472548007965,-0.568614363670349,-0.854438602924347,-0.0391707941889763,-0.518073618412018,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.977448880672455,-0.204650849103928,-0.0520743951201439,0.92842835187912,-0.2966628074646,0.223633676767349,0.881475806236267,-0.330746680498123,0.337056457996368,0.648859202861786,-0.732072532176971,0.207488730549812,0.724748253822327,-0.680762588977814,-0.106311939656734,0.913924276828766,-0.399497181177139,-0.0717244148254395,0.881475806236267,-0.330746680498123,0.337056457996368,0.52398556470871,-0.396742969751358,0.753680408000946,0.215633437037468,-0.617008090019226,0.756837606430054,0.505574882030487,-0.704972505569458,0.497401028871536,0.790293097496033,-0.395322471857071,0.468142062425613,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.215633437037468,-0.617008090019226,0.756837606430054,0.52398556470871,-0.396742969751358,0.753680408000946,0.15866231918335,-0.379611045122147,0.91143935918808,-0.0384488701820374,-0.525311648845673,0.850040793418884,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.776257455348969,-0.559176445007324,0.291111826896667,-0.631964385509491,-0.724000751972198,0.276484966278076,-0.187207087874413,-0.466673582792282,0.864389538764954,-0.0384488701820374,-0.525311648845673,0.850040793418884,0.15866231918335,-0.379611045122147,0.91143935918808,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974,-0.212751299142838,0.9668048620224,-0.322146862745285,-0.331865698099136,0.886615216732025,-0.187207087874413,-0.466673582792282,0.864389538764954,0.0760682299733162,-0.295749306678772,0.952232122421265,0.141510874032974,-0.212751299142838,0.9668048620224, 0.0760682299733162,-0.295749306678772,0.952232122421265,-0.109985366463661,-0.239039614796638,0.964760720729828,0.184660375118256,-0.167485639452934,0.968426108360291,0.141510874032974,-0.212751299142838,0.9668048620224,-0.109985366463661,-0.239039614796638,0.964760720729828,-0.125947520136833,-0.109786510467529,0.985943257808685,0.27410614490509,-0.107289530336857,0.955695986747742,0.184660375118256,-0.167485639452934,0.968426108360291,-0.125947520136833,-0.109786510467529,0.985943257808685,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.414723992347717,0.00967027805745602,0.909895896911621,0.27410614490509,-0.107289530336857,0.955695986747742,-0.00481649860739708,-0.00974023062735796,0.999940991401672,0.128309071063995,0.135050594806671,0.982495903968811,0.537278115749359,0.0936880186200142,0.838185369968414,0.414723992347717,0.00967027805745602,0.909895896911621,0.128309071063995,0.135050594806671,0.982495903968811,0.176409095525742,0.258731871843338,0.949703991413116,0.665011644363403,0.0966486409306526,0.740552842617035,0.618959546089172,0.0886023566126823,0.780409336090088,0.537278115749359,0.0936880186200142,0.838185369968414,0.176409095525742,0.258731871843338,0.949703991413116,0.307897627353668,0.368194788694382,0.877286553382874,0.857426404953003,0.506103038787842,0.0931651070713997,0.787412106990814,0.238013699650764,0.568622589111328,0.7496537566185,0.27985754609108,0.599749088287354,0.884826481342316,0.464208155870438,0.0399109348654747,0.818305492401123,0.54065877199173,-0.195100545883179,0.787813723087311,0.593129634857178,-0.165972396731377,0.857426404953003,0.506103038787842,0.0931651070713997,0.884826481342316,0.464208155870438,0.0399109348654747,0.913795173168182,0.295857787132263,0.278292179107666,0.936010003089905,0.160365864634514,0.313317894935608,0.886933207511902,0.205319285392761,0.413755267858505,0.839090466499329,0.267581433057785,0.473632037639618,0.913795173168182,0.295857787132263,0.278292179107666,0.96482926607132,0.118159219622612,0.23482520878315,0.974241256713867,0.0409249700605869,0.221763730049133, -0.917055070400238,0.301483958959579,0.260993033647537,-0.898983955383301,0.272523552179337,0.342868447303772,-0.617434501647949,0.298396319150925,0.727828443050385,-0.768386900424957,0.31679978966713,0.556075036525726,-0.816423416137695,0.517423629760742,0.256369888782501,-0.911110818386078,0.327579766511917,0.250137090682983,-0.768386900424957,0.31679978966713,0.556075036525726,-0.706475257873535,0.284995973110199,0.647819399833679,-0.816423416137695,0.517423629760742,0.256369888782501,-0.706475257873535,0.284995973110199,0.647819399833679,-0.509689390659332,0.284962147474289,0.811796367168427,-0.317345827817917,0.649519979953766,0.69095253944397,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.317345827817917,0.649519979953766,0.69095253944397,-0.509689390659332,0.284962147474289,0.811796367168427,-0.778803586959839,0.240923523902893,0.579155206680298,-0.382766902446747,0.693923592567444,0.609884858131409,-0.0108341164886951,0.764748215675354,0.644238173961639,-0.778803586959839,0.240923523902893,0.579155206680298,-0.810181975364685,0.20594097673893,0.548811018466949,0.353388279676437,0.625863969326019,0.695277690887451,-0.382766902446747,0.693923592567444,0.609884858131409,-0.810181975364685,0.20594097673893,0.548811018466949,-0.114197492599487,0.229852318763733,0.966502368450165,0.596079111099243,0.546218872070313,0.588502049446106,0.353388279676437,0.625863969326019,0.695277690887451,-0.114197492599487,0.229852318763733,0.966502368450165,0.169450357556343,0.192077651619911,0.966639935970306,0.924569427967072,0.246832609176636,0.290249824523926,0.596079111099243,0.546218872070313,0.588502049446106,0.169450357556343,0.192077651619911,0.966639935970306,0.840604901313782,-0.077635869383812,0.536056041717529,0.744611740112305,0.447527796030045,0.495249718427658,0.924569427967072,0.246832609176636,0.290249824523926,0.840604901313782,-0.077635869383812,0.536056041717529,0.708682000637054,0.0549906380474567,0.703381717205048,0.514605224132538,0.383560210466385,0.766852676868439,0.744611740112305,0.447527796030045,0.495249718427658, 0.708682000637054,0.0549906380474567,0.703381717205048,0.234150499105453,0.240436136722565,0.941999971866608,0.787412106990814,0.238013699650764,0.568622589111328,0.514605224132538,0.383560210466385,0.766852676868439,0.234150499105453,0.240436136722565,0.941999971866608,0.618959546089172,0.0886023566126823,0.780409336090088,0.787412106990814,0.238013699650764,0.568622589111328,0.618959546089172,0.0886023566126823,0.780409336090088,0.665011644363403,0.0966486409306526,0.740552842617035,0.459321737289429,0.336945086717606,0.821882903575897,0.7496537566185,0.27985754609108,0.599749088287354,0.7496537566185,0.27985754609108,0.599749088287354,0.459321737289429,0.336945086717606,0.821882903575897,0.522907495498657,0.438181906938553,0.731139063835144,0.839090466499329,0.267581433057785,0.473632037639618,0.886933207511902,0.205319285392761,0.413755267858505,0.7496537566185,0.27985754609108,0.599749088287354,0.522907495498657,0.438181906938553,0.731139063835144,-0.768386900424957,0.31679978966713,0.556075036525726,-0.911110818386078,0.327579766511917,0.250137090682983,-0.917055070400238,0.301483958959579,0.260993033647537,0.260435909032822,0.0412507019937038,-0.964609503746033,0.159143656492233,-0.20932050049305,-0.964809954166412,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.609844028949738,0.00468328595161438,-0.792507588863373,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.911869525909424,0.153217226266861,-0.380812793970108,-0.896334648132324,0.12926284968853,-0.424117147922516,-0.791375637054443,0.071151964366436,-0.607175409793854,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.797997057437897,0.0611037090420723,-0.599555671215057,-0.791375637054443,0.071151964366436,-0.607175409793854, -0.183688193559647,-0.183951675891876,-0.965619206428528,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.118591584265232,-0.24912066757679,-0.961184144020081,-0.183688193559647,-0.183951675891876,-0.965619206428528,-0.709648728370667,-0.32101958990097,0.627172350883484,-0.460758477449417,0.108215481042862,0.880903542041779,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.251838445663452,-0.440982908010483,0.861458897590637,0.884826481342316,0.464208155870438,0.0399109348654747,0.888628959655762,0.438762068748474,0.133515372872353,0.66844254732132,0.71253913640976,-0.213242888450623,0.818305492401123,0.54065877199173,-0.195100545883179,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.12953394651413,0.104335330426693,-0.986070513725281,0.310650020837784,0.28316468000412,-0.907366693019867,0.260435909032822,0.0412507019937038,-0.964609503746033,-0.12953394651413,0.104335330426693,-0.986070513725281,-0.0699166879057884,0.326290905475616,-0.942680180072784,-0.0489721186459064,-0.0354297049343586,0.99817156791687,-0.120599381625652,0.0903127938508987,0.988584518432617,-0.439302027225494,0.130682304501534,0.888783395290375,-0.38883912563324,0.0112887192517519,0.921236515045166,0.990084290504456,0.101971529424191,0.0966169014573097,0.991360425949097,0.041219849139452,0.124520778656006,0.873561680316925,0.247193098068237,-0.419267863035202,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.784134984016418,-0.509350836277008,-0.354533582925797,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.873561680316925,0.247193098068237,-0.419267863035202,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.816423416137695,0.517423629760742,0.256369888782501,0.163023561239243,0.98268049955368,-0.0881040766835213, -0.149312153458595,0.980366826057434,-0.128789886832237,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.237061515450478,0.971401154994965,-0.0134798940271139,-0.911110818386078,0.327579766511917,0.250137090682983,-0.816423416137695,0.517423629760742,0.256369888782501,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.917055070400238,0.301483958959579,0.260993033647537,-0.911110818386078,0.327579766511917,0.250137090682983,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.942716598510742,0.31031545996666,0.12243277579546,-0.898983955383301,0.272523552179337,0.342868447303772,-0.917055070400238,0.301483958959579,0.260993033647537,-0.942716598510742,0.31031545996666,0.12243277579546,-0.966511785984039,0.186886444687843,0.175864636898041,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.278325170278549,0.959965646266937,0.0316396243870258,0.0602656826376915,0.93876701593399,-0.339241087436676,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.86081600189209,0.504893720149994,-0.0638600736856461,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.923302352428436,0.378709852695465,0.0639655441045761, -0.86081600189209,0.504893720149994,-0.0638600736856461,-0.825409948825836,0.564256370067596,0.0176955871284008,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546,-0.923302352428436,0.378709852695465,0.0639655441045761,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.955984711647034,0.292123109102249,-0.0275191478431225,0.0602656826376915,0.93876701593399,-0.339241087436676,0.313923090696335,0.485718756914139,-0.815799951553345,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.0705952271819115,0.538945734500885,-0.839377045631409,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.297451019287109,0.894863903522491,-0.33277839422226,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.780570030212402,0.394561380147934,-0.484800666570663,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712,-0.887756943702698,0.223847806453705,-0.402218580245972,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.909005224704742,0.416743367910385,0.00586836272850633,-0.942716598510742,0.31031545996666,0.12243277579546,-0.955984711647034,0.292123109102249,-0.0275191478431225,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.966511785984039,0.186886444687843,0.175864636898041,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.566947221755981,0.26147249341011,0.781154930591583,-0.617434501647949,0.298396319150925,0.727828443050385,-0.898983955383301,0.272523552179337,0.342868447303772,-0.500255882740021,0.598247230052948,0.625974655151367,-0.342477291822433,0.228350877761841,0.911353468894959,-0.471209764480591,0.287038415670395,0.834008574485779,-0.617434501647949,0.298396319150925,0.727828443050385, -0.566947221755981,0.26147249341011,0.781154930591583,-0.485232472419739,0.239207372069359,0.84102874994278,-0.632588505744934,-0.619191765785217,0.465224027633667,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.904579520225525,-0.0986718684434891,0.414728611707687,-0.730245351791382,-0.126696899533272,0.671334207057953,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.271919548511505,0.128996223211288,0.953635036945343,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.97038471698761,0.0723681449890137,-0.230469912290573,-0.807790637016296,-0.143092095851898,-0.571838200092316,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.553619503974915,-0.0878534093499184,0.828122735023499,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.295709520578384,-0.414570212364197,0.860632002353668,-0.716924250125885,-0.697136282920837,0.00454333378002048,-0.802371442317963,-0.439784169197083,-0.403472363948822,-0.965311110019684,-0.0178779885172844,-0.260489523410797,-0.947529137134552,-0.270958930253983,-0.16961669921875,-0.940018057823181,-0.288679718971252,0.181741818785667,-0.501954138278961,0.0510877333581448,0.863384068012238,-0.551642179489136,0.164528906345367,0.817692577838898,-0.3530093729496,0.178218960762024,0.918489158153534,-0.128415614366531,0.132796317338943,0.982789158821106,-0.271919548511505,0.128996223211288,0.953635036945343,-0.621815145015717,0.744533002376556,-0.24293327331543,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.440291285514832,0.870396435260773,0.220348998904228,-0.621815145015717,0.744533002376556,-0.24293327331543, -0.6479212641716,0.534398972988129,-0.542785227298737,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.898983955383301,0.272523552179337,0.342868447303772,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.500255882740021,0.598247230052948,0.625974655151367,-0.745452880859375,0.509112060070038,-0.430238157510757,-0.907228708267212,0.420285493135452,-0.0172105636447668,-0.966511785984039,0.186886444687843,0.175864636898041,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.394719243049622,0.916350066661835,0.0670766159892082,-0.966511785984039,0.186886444687843,0.175864636898041,-0.981271386146545,0.187864378094673,-0.0425844676792622,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.566947221755981,0.26147249341011,0.781154930591583,-0.342477291822433,0.228350877761841,0.911353468894959,-0.3530093729496,0.178218960762024,0.918489158153534,-0.551642179489136,0.164528906345367,0.817692577838898,-0.907434463500977,0.401591062545776,-0.123642094433308,-0.484726011753082,0.737569272518158,-0.470140665769577,-0.0310307368636131,0.989131927490234,-0.14371882379055,-0.514610290527344,0.855887234210968,0.0513155348598957,-0.760540843009949,0.00420303363353014,-0.649276435375214,-0.785466253757477,-0.00865362863987684,-0.618843913078308,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.526416659355164,-0.125638738274574,-0.840892672538757,-0.543579876422882,-0.26823478937149,-0.795343339443207,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.534743189811707,-0.0985642895102501,-0.839246511459351,-0.916571378707886,-0.142677664756775,-0.373550534248352,-0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.992392778396606,0.0152386799454689,-0.122165411710739,-0.924877762794495,-0.0230817683041096,-0.379563301801682,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.992392778396606,0.0152386799454689,-0.122165411710739, -0.987079083919525,-0.140233889222145,-0.0775200128555298,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.999233186244965,0.0380166918039322,-0.00937180034816265,-0.948758661746979,-0.259771883487701,0.179931968450546,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.90544730424881,0.119117729365826,0.407401740550995,-0.96833336353302,0.0874056592583656,0.23386062681675,-0.801825046539307,-0.262576133012772,0.536777794361115,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.830910623073578,0.150519490242004,0.535659790039063,-0.90544730424881,0.119117729365826,0.407401740550995,-0.776555001735687,-0.203016772866249,0.59644490480423,-0.504776954650879,0.179731994867325,0.844332098960876,-0.830910623073578,0.150519490242004,0.535659790039063,-0.826611280441284,-0.0826262384653091,0.556674718856812,-0.508872270584106,0.031244209036231,0.860274851322174,0.0673240348696709,0.131959661841393,0.988966166973114,-0.504776954650879,0.179731994867325,0.844332098960876,-0.508872270584106,0.031244209036231,0.860274851322174,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.203233033418655,-0.00871946662664413,0.979091584682465,-0.271919548511505,0.128996223211288,0.953635036945343,0.0673240348696709,0.131959661841393,0.988966166973114,0.0816235020756722,-0.0377316474914551,0.995948731899261,-0.696859955787659,0.71514618396759,-0.0543340221047401,-0.939192354679108,0.142906233668327,-0.312242686748505,-0.679527759552002,0.357755899429321,-0.64050966501236,-0.536318302154541,-0.443965286016464,0.717814385890961,-0.405384927988052,-0.526269018650055,0.747465074062347,-0.0444819778203964,-0.725194454193115,0.687105774879456,-0.00733196083456278,-0.679022014141083,0.734081327915192,-0.24122528731823,-0.215426832437515,0.946256637573242,-0.200362399220467,-0.34291222691536,0.917750597000122,-0.328887611627579,-0.327985614538193,0.885583639144897,-0.709648728370667,-0.32101958990097,0.627172350883484, -0.251838445663452,-0.440982908010483,0.861458897590637,0.179207041859627,0.602162182331085,0.778000950813293,-0.471319168806076,0.566682040691376,0.675817847251892,-0.509491384029388,0.564497232437134,0.649431586265564,0.110788695514202,0.611092865467072,0.783767402172089,-0.0749797448515892,0.161466658115387,0.984025657176971,-0.460758477449417,0.108215481042862,0.880903542041779,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.129216328263283,-0.0478254519402981,0.990462481975555,0.110788695514202,0.611092865467072,0.783767402172089,-0.509491384029388,0.564497232437134,0.649431586265564,-0.801663935184479,-0.0182420816272497,0.597496509552002,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.129216328263283,-0.0478254519402981,0.990462481975555,-0.778017282485962,0.0114750172942877,0.628138065338135,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.159226596355438,-0.153975084424019,0.975160777568817,-0.801663935184479,-0.0182420816272497,0.597496509552002,0.0995035693049431,-0.912259519100189,0.397343188524246,-0.164029136300087,-0.974515855312347,-0.15301413834095,-0.23681703209877,-0.796483516693115,0.556355774402618,-0.713192403316498,-0.572692215442657,0.404203116893768,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.164029136300087,-0.974515855312347,-0.15301413834095,0.0995035693049431,-0.912259519100189,0.397343188524246,0.52398556470871,-0.396742969751358,0.753680408000946,0.481494694948196,-0.484542727470398,0.730329513549805,-0.0231689736247063,-0.380177617073059,0.924623250961304,0.15866231918335,-0.379611045122147,0.91143935918808,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.468789458274841,0.865421831607819,-0.176865667104721,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.457298666238785,0.889312863349915,0.000723629433196038,-0.149312153458595,0.980366826057434,-0.128789886832237,-0.278325170278549,0.959965646266937,0.0316396243870258, -0.901924610137939,0.307412892580032,0.303363412618637,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.899024248123169,0.213699862360954,0.382214277982712,-0.899024248123169,0.213699862360954,0.382214277982712,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.761745274066925,0.099917359650135,0.640125453472137,-0.857412815093994,0.318779051303864,0.404008865356445,-0.899024248123169,0.213699862360954,0.382214277982712,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.761745274066925,0.099917359650135,0.640125453472137,-0.817979872226715,-0.0342942997813225,0.574223697185516,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.777440845966339,0.387861520051956,0.495125383138657,-0.921807289123535,0.190687090158463,0.337505161762238,-0.943840563297272,0.1807881295681,0.276551336050034,-0.938613772392273,0.27569842338562,0.207351386547089,-0.9817014336586,0.106130860745907,0.158109441399574,-0.857412815093994,0.318779051303864,0.404008865356445,-0.761745274066925,0.099917359650135,0.640125453472137,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.761745274066925,0.099917359650135,0.640125453472137,-0.51681649684906,-0.0720630958676338,0.85305780172348,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.565454542636871,-0.235293716192245,0.790504932403564, -0.51681649684906,-0.0720630958676338,0.85305780172348,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.973640561103821,0.150163590908051,0.171682626008987,-0.9817014336586,0.106130860745907,0.158109441399574,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.849806487560272,-0.0963084548711777,0.51822155714035,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.565454542636871,-0.235293716192245,0.790504932403564,-0.235414087772369,-0.349107921123505,0.90703022480011,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.943840563297272,0.1807881295681,0.276551336050034,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.938613772392273,0.27569842338562,0.207351386547089,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.901924610137939,0.307412892580032,0.303363412618637,-0.938613772392273,0.27569842338562,0.207351386547089,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.857412815093994,0.318779051303864,0.404008865356445,-0.777440845966339,0.387861520051956,0.495125383138657,-0.901924610137939,0.307412892580032,0.303363412618637,-0.899024248123169,0.213699862360954,0.382214277982712,-0.9817014336586,0.106130860745907,0.158109441399574,-0.921807289123535,0.190687090158463,0.337505161762238,-0.777440845966339,0.387861520051956,0.495125383138657,-0.857412815093994,0.318779051303864,0.404008865356445,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.54743480682373,0.804430425167084,0.230666100978851,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.938417971134186,0.0142068117856979,0.345209956169128, -0.798004448413849,0.101907536387444,0.593972861766815,-0.250951796770096,0.864163637161255,0.436170101165771,-0.54743480682373,0.804430425167084,0.230666100978851,-0.798004448413849,0.101907536387444,0.593972861766815,-0.507640421390533,0.139722898602486,0.85016393661499,0.0952272266149521,0.827912211418152,0.552714347839355,-0.250951796770096,0.864163637161255,0.436170101165771,-0.507640421390533,0.139722898602486,0.85016393661499,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.798004448413849,0.101907536387444,0.593972861766815,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.507640421390533,0.139722898602486,0.85016393661499,-0.798004448413849,0.101907536387444,0.593972861766815,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.146061703562737,0.0914116725325584,0.985043108463287,-0.507640421390533,0.139722898602486,0.85016393661499,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.97012186050415,0.115440957248211,0.213394016027451,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.952853083610535,0.227692499756813,0.200567036867142,-0.799672305583954,0.218887090682983,0.559117794036865,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.793523073196411,-0.0159704424440861,0.608330607414246,-0.799672305583954,0.218887090682983,0.559117794036865,-0.508204877376556,0.144576609134674,0.849014341831207,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.516035139560699,-0.0156707875430584,0.85642409324646,-0.508204877376556,0.144576609134674,0.849014341831207,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.799672305583954,0.218887090682983,0.559117794036865, -0.952853083610535,0.227692499756813,0.200567036867142,-0.973640561103821,0.150163590908051,0.171682626008987,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.508204877376556,0.144576609134674,0.849014341831207,-0.799672305583954,0.218887090682983,0.559117794036865,-0.823427438735962,0.0464033856987953,0.565520942211151,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.508204877376556,0.144576609134674,0.849014341831207,-0.53584623336792,-0.0723051279783249,0.841213822364807,-0.199428826570511,-0.151153653860092,0.968184232711792,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.97012186050415,0.115440957248211,0.213394016027451,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.938417971134186,0.0142068117856979,0.345209956169128,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.93721479177475,-0.0726321637630463,0.34110552072525,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.97012186050415,0.115440957248211,0.213394016027451,-0.960990250110626,0.131045117974281,0.243567124009132,-0.948896527290344,0.107380069792271,0.296757221221924,-0.943840563297272,0.1807881295681,0.276551336050034,-0.960990250110626,0.131045117974281,0.243567124009132,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.960990250110626,0.131045117974281,0.243567124009132, -0.97012186050415,0.115440957248211,0.213394016027451,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.960990250110626,0.131045117974281,0.243567124009132,-0.943840563297272,0.1807881295681,0.276551336050034,-0.921807289123535,0.190687090158463,0.337505161762238,-0.948896527290344,0.107380069792271,0.296757221221924,0.801646828651428,-0.0831208676099777,0.591991007328033,0.734746038913727,-0.160801336169243,0.659007728099823,0.70257967710495,-0.699933767318726,0.128352925181389,0.841358840465546,-0.538884103298187,0.0414636693894863,0.401816725730896,-0.892981171607971,0.202800214290619,0.70257967710495,-0.699933767318726,0.128352925181389,0.734746038913727,-0.160801336169243,0.659007728099823,0.503881454467773,-0.329790472984314,0.798336863517761,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.401816725730896,-0.892981171607971,0.202800214290619,0.503881454467773,-0.329790472984314,0.798336863517761,0.107415564358234,-0.480258971452713,0.870524644851685,0.498356074094772,-0.197405740618706,0.844199180603027,0.503881454467773,-0.329790472984314,0.798336863517761,0.734746038913727,-0.160801336169243,0.659007728099823,0.73037314414978,-0.078302189707756,0.678545415401459,0.147659823298454,-0.24711586534977,0.957669198513031,0.107415564358234,-0.480258971452713,0.870524644851685,0.503881454467773,-0.329790472984314,0.798336863517761,0.498356074094772,-0.197405740618706,0.844199180603027,-0.208346873521805,-0.195467934012413,0.95832347869873,-0.26332488656044,-0.487629622220993,0.832392573356628,0.107415564358234,-0.480258971452713,0.870524644851685,0.147659823298454,-0.24711586534977,0.957669198513031,0.751119554042816,-0.269360929727554,0.602713882923126,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633,-0.151919424533844,0.490823149681091,0.808899104595184,-0.271903991699219,0.521296918392181,0.498356074094772,-0.197405740618706,0.844199180603027,0.73037314414978,-0.078302189707756,0.678545415401459,0.806595623493195,-0.339085549116135,0.484173983335495,0.540686428546906,-0.418503105640411,0.729735136032104, 0.147659823298454,-0.24711586534977,0.957669198513031,0.498356074094772,-0.197405740618706,0.844199180603027,0.540686428546906,-0.418503105640411,0.729735136032104,0.155815690755844,-0.419202774763107,0.894421875476837,-0.208346873521805,-0.195467934012413,0.95832347869873,0.147659823298454,-0.24711586534977,0.957669198513031,0.155815690755844,-0.419202774763107,0.894421875476837,-0.235414087772369,-0.349107921123505,0.90703022480011,0.540686428546906,-0.418503105640411,0.729735136032104,0.806595623493195,-0.339085549116135,0.484173983335495,0.82207328081131,-0.257045179605484,0.508058369159698,0.566346645355225,-0.257577836513519,0.782882571220398,0.155815690755844,-0.419202774763107,0.894421875476837,0.540686428546906,-0.418503105640411,0.729735136032104,0.566346645355225,-0.257577836513519,0.782882571220398,0.190858632326126,-0.215845569968224,0.957592666149139,-0.235414087772369,-0.349107921123505,0.90703022480011,0.155815690755844,-0.419202774763107,0.894421875476837,0.190858632326126,-0.215845569968224,0.957592666149139,-0.199428826570511,-0.151153653860092,0.968184232711792,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.808899104595184,-0.271903991699219,0.521296918392181,0.857912063598633,-0.151919424533844,0.490823149681091,0.841358840465546,-0.538884103298187,0.0414636693894863,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.857912063598633,-0.151919424533844,0.490823149681091,0.801646828651428,-0.0831208676099777,0.591991007328033,0.73037314414978,-0.078302189707756,0.678545415401459,0.734746038913727,-0.160801336169243,0.659007728099823,0.801646828651428,-0.0831208676099777,0.591991007328033,0.685023248195648,0.00244083511643112,0.728517115116119,0.73037314414978,-0.078302189707756,0.678545415401459,0.685023248195648,0.00244083511643112,0.728517115116119,0.751119554042816,-0.269360929727554,0.602713882923126,0.806595623493195,-0.339085549116135,0.484173983335495,0.733399391174316,-0.42873340845108,0.527553796768188,0.972478210926056,0.193684622645378,0.129508212208748, 0.895388960838318,0.358975827693939,0.263467311859131,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.730379700660706,0.544567286968231,0.412300884723663,0.44217050075531,0.718546867370605,0.536819994449615,0.224035635590553,-0.0279745738953352,0.97417938709259,0.224035635590553,-0.0279745738953352,0.97417938709259,0.44217050075531,0.718546867370605,0.536819994449615,0.0952272266149521,0.827912211418152,0.552714347839355,-0.146061703562737,0.0914116725325584,0.985043108463287,0.476951867341995,-0.307240515947342,0.823480546474457,0.658827781677246,-0.438512951135635,0.611271023750305,0.69538801908493,-0.360292613506317,0.621791541576386,0.535216987133026,-0.203684195876122,0.819789946079254,0.163414120674133,-0.171451970934868,0.971545219421387,0.476951867341995,-0.307240515947342,0.823480546474457,0.535216987133026,-0.203684195876122,0.819789946079254,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.182312056422234,-0.0702576190233231,0.98072737455368,0.163414120674133,-0.171451970934868,0.971545219421387,0.224035635590553,-0.0279745738953352,0.97417938709259,-0.146061703562737,0.0914116725325584,0.985043108463287,0.817899644374847,-0.355826288461685,0.452137023210526,0.585005819797516,-0.507527828216553,0.632600724697113,0.754743993282318,-0.253586798906326,0.605024993419647,0.814589738845825,-0.243902504444122,0.526265263557434,0.839219391345978,-0.174447894096375,0.515052139759064,0.658827781677246,-0.438512951135635,0.611271023750305,0.476951867341995,-0.307240515947342,0.823480546474457,0.605567514896393,-0.0923454314470291,0.790417790412903,0.605567514896393,-0.0923454314470291,0.790417790412903,0.476951867341995,-0.307240515947342,0.823480546474457,0.163414120674133,-0.171451970934868,0.971545219421387,0.2394889742136,-0.0051474985666573,0.970885455608368,0.2394889742136,-0.0051474985666573,0.970885455608368,0.163414120674133,-0.171451970934868,0.971545219421387,-0.182312056422234,-0.0702576190233231,0.98072737455368,-0.14939372241497,0.0765637531876564,0.985809028148651, 0.82207328081131,-0.257045179605484,0.508058369159698,0.839219391345978,-0.174447894096375,0.515052139759064,0.605567514896393,-0.0923454314470291,0.790417790412903,0.566346645355225,-0.257577836513519,0.782882571220398,0.566346645355225,-0.257577836513519,0.782882571220398,0.605567514896393,-0.0923454314470291,0.790417790412903,0.2394889742136,-0.0051474985666573,0.970885455608368,0.190858632326126,-0.215845569968224,0.957592666149139,0.190858632326126,-0.215845569968224,0.957592666149139,0.2394889742136,-0.0051474985666573,0.970885455608368,-0.14939372241497,0.0765637531876564,0.985809028148651,-0.199428826570511,-0.151153653860092,0.968184232711792,0.814589738845825,-0.243902504444122,0.526265263557434,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.983128607273102,-0.182582512497902,-0.011036628857255,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685,0.452137023210526,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.972478210926056,0.193684622645378,0.129508212208748,0.733399391174316,-0.42873340845108,0.527553796768188,0.658827781677246,-0.438512951135635,0.611271023750305,0.585005819797516,-0.507527828216553,0.632600724697113,0.733399391174316,-0.42873340845108,0.527553796768188,0.69538801908493,-0.360292613506317,0.621791541576386,0.754743993282318,-0.253586798906326,0.605024993419647,0.585005819797516,-0.507527828216553,0.632600724697113,0.658827781677246,-0.438512951135635,0.611271023750305,0.839219391345978,-0.174447894096375,0.515052139759064,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.809050917625427,-0.256973832845688,0.528583943843842,0.808899104595184,-0.271903991699219,0.521296918392181,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.814589738845825,-0.243902504444122,0.526265263557434,0.809050917625427,-0.256973832845688,0.528583943843842,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.9765744805336,-0.21293817460537,-0.0309777203947306,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.977742493152618,-0.0699509307742119,-0.197804138064384, -0.985335469245911,0.0123848039656878,-0.170178011059761,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.955119252204895,-0.281733334064484,-0.0915070921182632,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.977742493152618,-0.0699509307742119,-0.197804138064384,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.734350621700287,0.677913844585419,0.0340877436101437,-0.54743480682373,0.804430425167084,0.230666100978851,-0.639851093292236,0.713299214839935,0.28599801659584,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.54743480682373,0.804430425167084,0.230666100978851,-0.250951796770096,0.864163637161255,0.436170101165771,-0.615591168403625,0.608454763889313,0.500829696655273,-0.639851093292236,0.713299214839935,0.28599801659584,-0.250951796770096,0.864163637161255,0.436170101165771,0.0952272266149521,0.827912211418152,0.552714347839355,-0.139664217829704,0.122649051249027,0.982573747634888,-0.615591168403625,0.608454763889313,0.500829696655273,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.837948083877563,0.531638741493225,-0.123301722109318,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.874023795127869,0.388026893138886,-0.292433828115463, -0.866832733154297,0.233201399445534,-0.440701872110367,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.932059943675995,0.251615643501282,-0.260679513216019,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.934666931629181,0.235346302390099,-0.266476780176163,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.940755069255829,0.217000797390938,-0.260558128356934,-0.938012957572937,0.237204626202583,-0.252716571092606,-0.866832733154297,0.233201399445534,-0.440701872110367,0.841358840465546,-0.538884103298187,0.0414636693894863,0.70257967710495,-0.699933767318726,0.128352925181389,0.685771405696869,-0.727804124355316,0.00433491868898273,0.682205855846405,-0.688040673732758,-0.247376576066017,0.70257967710495,-0.699933767318726,0.128352925181389,0.401816725730896,-0.892981171607971,0.202800214290619,0.301932573318481,-0.883707880973816,0.357627093791962,0.685771405696869,-0.727804124355316,0.00433491868898273,0.401816725730896,-0.892981171607971,0.202800214290619,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.289558619260788,-0.713769853115082,0.637721240520477,0.301932573318481,-0.883707880973816,0.357627093791962,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.841358840465546,-0.538884103298187,0.0414636693894863,0.682205855846405,-0.688040673732758,-0.247376576066017,0.846972167491913,-0.511904895305634,-0.14349739253521,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.846972167491913,-0.511904895305634,-0.14349739253521,0.973673224449158,-0.222424849867821,-0.0498761273920536, 0.895388960838318,0.358975827693939,0.263467311859131,0.972478210926056,0.193684622645378,0.129508212208748,0.960353672504425,0.263352990150452,0.0914659649133682,0.898760318756104,0.357274115085602,0.254135996103287,0.730379700660706,0.544567286968231,0.412300884723663,0.895388960838318,0.358975827693939,0.263467311859131,0.898760318756104,0.357274115085602,0.254135996103287,0.750469028949738,0.503480017185211,0.42814028263092,0.44217050075531,0.718546867370605,0.536819994449615,0.730379700660706,0.544567286968231,0.412300884723663,0.750469028949738,0.503480017185211,0.42814028263092,0.626252830028534,0.308739811182022,0.715882003307343,0.0952272266149521,0.827912211418152,0.552714347839355,0.44217050075531,0.718546867370605,0.536819994449615,0.626252830028534,0.308739811182022,0.715882003307343,-0.139664217829704,0.122649051249027,0.982573747634888,0.960353672504425,0.263352990150452,0.0914659649133682,0.972478210926056,0.193684622645378,0.129508212208748,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.991423904895782,0.113214619457722,0.0652767568826675,0.991423904895782,0.113214619457722,0.0652767568826675,0.999559164047241,-0.0022999900393188,0.0296008456498384,0.983128607273102,-0.182582512497902,-0.011036628857255,0.992731213569641,-0.118552401661873,0.0207367613911629,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.986363470554352,-0.161528527736664,-0.0315533950924873,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.9765744805336,-0.21293817460537,-0.0309777203947306,0.981736898422241,-0.184043049812317,-0.0481746941804886,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.983128607273102,-0.182582512497902,-0.011036628857255,0.9765744805336,-0.21293817460537,-0.0309777203947306, 0.962084114551544,-0.260001808404922,-0.0824210941791534,0.992731213569641,-0.118552401661873,0.0207367613911629,-0.901924610137939,0.307412892580032,0.303363412618637,-0.777440845966339,0.387861520051956,0.495125383138657,-0.938613772392273,0.27569842338562,0.207351386547089,-0.938613772392273,0.27569842338562,0.207351386547089,-0.939433455467224,0.230843335390091,-0.253330230712891,-0.961426258087158,0.114839658141136,-0.249942779541016,-0.970218658447266,-0.038191806524992,0.239200875163078,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.910413384437561,-0.164701506495476,0.379500925540924,-0.987499535083771,0.0581443458795547,0.146505534648895,-0.904506981372833,0.363090604543686,-0.223679021000862,-0.938012957572937,0.237204626202583,-0.252716571092606,0.801646828651428,-0.0831208676099777,0.591991007328033,0.857912063598633,-0.151919424533844,0.490823149681091,0.685023248195648,0.00244083511643112,0.728517115116119,0.857912063598633,-0.151919424533844,0.490823149681091,0.933255016803741,-0.359124660491943,-0.00803234614431858,0.980303883552551,-0.197100415825844,-0.0124758314341307,0.733399391174316,-0.42873340845108,0.527553796768188,0.585005819797516,-0.507527828216553,0.632600724697113,0.817899644374847,-0.355826288461685,0.452137023210526,0.817899644374847,-0.355826288461685,0.452137023210526,0.983128607273102,-0.182582512497902,-0.011036628857255,0.999559164047241,-0.0022999900393188,0.0296008456498384,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022,0.599665939807892,0.800044298171997,0.381472051143646,0.46587747335434,0.798396646976471,0.390523910522461,0.243563205003738,0.88778829574585,0.381472051143646,0.46587747335434,0.798396646976471,0.241816222667694,-0.361797332763672,0.900348603725433,0.626252830028534,0.308739811182022,0.715882003307343, 0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,0.241816222667694,-0.361797332763672,0.900348603725433,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.139664217829704,0.122649051249027,0.982573747634888,-0.139664217829704,0.122649051249027,0.982573747634888,-0.268051534891129,-0.524246156215668,0.808278679847717,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.615591168403625,0.608454763889313,0.500829696655273,-0.633089065551758,-0.179430231451988,0.75299608707428,-0.398783475160599,0.608131349086761,0.686402201652527,-0.541773617267609,0.383253455162048,0.748062908649445,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609,0.383253455162048,0.748062908649445,-0.398783475160599,0.608131349086761,0.686402201652527,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.0181612316519022,0.599665939807892,0.800044298171997,-0.268051534891129,-0.524246156215668,0.808278679847717,0.241816222667694,-0.361797332763672,0.900348603725433,0.381472051143646,0.46587747335434,0.798396646976471,-0.948896527290344,0.107380069792271,0.296757221221924,-0.973640561103821,0.150163590908051,0.171682626008987,-0.952853083610535,0.227692499756813,0.200567036867142,-0.95304924249649,0.0933544263243675,0.288066118955612,-0.921807289123535,0.190687090158463,0.337505161762238,-0.9817014336586,0.106130860745907,0.158109441399574,-0.973640561103821,0.150163590908051,0.171682626008987,-0.948896527290344,0.107380069792271,0.296757221221924,0.809050917625427,-0.256973832845688,0.528583943843842,0.743283569812775,-0.261148244142532,0.615898609161377,0.751119554042816,-0.269360929727554,0.602713882923126,0.808899104595184,-0.271903991699219,0.521296918392181,0.743283569812775,-0.261148244142532,0.615898609161377,0.82207328081131,-0.257045179605484,0.508058369159698,0.806595623493195,-0.339085549116135,0.484173983335495,0.751119554042816,-0.269360929727554,0.602713882923126,0.754743993282318,-0.253586798906326,0.605024993419647, 0.839219391345978,-0.174447894096375,0.515052139759064,0.82207328081131,-0.257045179605484,0.508058369159698,0.743283569812775,-0.261148244142532,0.615898609161377,0.809050917625427,-0.256973832845688,0.528583943843842,0.814589738845825,-0.243902504444122,0.526265263557434,0.754743993282318,-0.253586798906326,0.605024993419647,0.743283569812775,-0.261148244142532,0.615898609161377,0.69538801908493,-0.360292613506317,0.621791541576386,0.895388960838318,0.358975827693939,0.263467311859131,0.730379700660706,0.544567286968231,0.412300884723663,0.535216987133026,-0.203684195876122,0.819789946079254,0.78125125169754,-0.138539433479309,0.608648777008057,0.878065228462219,-0.00301950192078948,0.47853147983551,0.930242419242859,-0.158916160464287,0.330748707056046,0.805302381515503,-0.358387529850006,0.472277879714966,0.370588421821594,-0.193350583314896,0.908449113368988,0.340047508478165,-0.388343751430511,0.856479287147522,0.640090823173523,-0.393064320087433,0.660139560699463,0.660678803920746,-0.179935500025749,0.728784441947937,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.542648077011108,0.604446232318878,0.583247661590576,-0.828080534934998,0.439521878957748,0.347998708486557,-0.678687632083893,0.530943989753723,0.507426381111145,0.998525857925415,0.0400822311639786,0.0366002470254898,0.930242419242859,-0.158916160464287,0.330748707056046,0.878065228462219,-0.00301950192078948,0.47853147983551,0.977894842624664,0.203556552529335,0.0478159449994564,-0.478552311658859,0.59250408411026,0.648017406463623,-0.839360475540161,0.300623118877411,0.452879399061203,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.723428726196289,-0.0725482106208801,0.686576724052429, -0.542648077011108,0.604446232318878,0.583247661590576,-0.678687632083893,0.530943989753723,0.507426381111145,-0.839360475540161,0.300623118877411,0.452879399061203,-0.478552311658859,0.59250408411026,0.648017406463623,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.419204741716385,0.619329035282135,0.66385155916214,-0.478552311658859,0.59250408411026,0.648017406463623,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.454762816429138,0.657830238342285,0.60037499666214,-0.542648077011108,0.604446232318878,0.583247661590576,-0.478552311658859,0.59250408411026,0.648017406463623,-0.419204741716385,0.619329035282135,0.66385155916214,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.562524795532227,-0.508337914943695,0.652041733264923,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.723428726196289,-0.0725482106208801,0.686576724052429,-0.679585158824921,-0.597024917602539,0.426292538642883,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.419204741716385,0.619329035282135,0.66385155916214,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.211948931217194,0.670887529850006,0.710624814033508,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.88222748041153,-0.112881354987621,0.457091361284256, -0.713757753372192,-0.0291265603154898,0.699786782264709,-0.882178366184235,-0.427934050559998,0.196554735302925,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.0997487902641296,0.343725502490997,0.933757483959198,0.129296213388443,0.717355608940125,0.684604585170746,0.051387831568718,-0.174088895320892,0.983388185501099,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.381502002477646,-0.250341862440109,0.889823138713837,0.44838610291481,-0.404915183782578,0.796864807605743,0.225461423397064,-0.225655317306519,0.947758853435516,-0.450191855430603,-0.821828484535217,0.349177956581116,-0.388236194849014,-0.50770115852356,0.769098341464996,0.147943705320358,-0.468890011310577,0.870778322219849,0.477010041475296,-0.793651044368744,0.377596825361252,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.450191855430603,-0.821828484535217,0.349177956581116,0.477010041475296,-0.793651044368744,0.377596825361252,0.519910156726837,-0.607850134372711,0.600176334381104,0.129296213388443,0.717355608940125,0.684604585170746,-0.211948931217194,0.670887529850006,0.710624814033508,-0.380323052406311,-0.00781864393502474,0.9248206615448,0.225461423397064,-0.225655317306519,0.947758853435516,0.214603096246719,0.506344735622406,0.835200905799866,0.289558619260788,-0.713769853115082,0.637721240520477,0.051387831568718,-0.174088895320892,0.983388185501099,0.129296213388443,0.717355608940125,0.684604585170746,0.214603096246719,0.506344735622406,0.835200905799866,0.870778322219849,-0.383099019527435,0.308188676834106,0.491936594247818,-0.382108181715012,0.782299041748047, 0.332508742809296,-0.680451035499573,0.653011798858643,0.518838703632355,-0.706463396549225,0.481368720531464,0.44838610291481,-0.404915183782578,0.796864807605743,0.870778322219849,-0.383099019527435,0.308188676834106,0.518838703632355,-0.706463396549225,0.481368720531464,0.225461423397064,-0.225655317306519,0.947758853435516,0.423083633184433,0.0620496086776257,0.903963565826416,0.508102118968964,0.373251259326935,0.776218891143799,0.786464095115662,-0.0169835668057203,0.61740243434906,0.605372726917267,0.000812157464679331,0.795941710472107,0.650932729244232,-0.458716839551926,0.604868113994598,0.245217740535736,-0.767790734767914,0.591916918754578,0.319739699363709,-0.689254701137543,0.650149524211884,0.602446496486664,-0.488442957401276,0.631254017353058,0.508102118968964,0.373251259326935,0.776218891143799,0.395677745342255,-0.301782160997391,0.867390692234039,0.703794419765472,-0.329490423202515,0.629372298717499,0.786464095115662,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.395677745342255,-0.301782160997391,0.867390692234039,0.245217740535736,-0.767790734767914,0.591916918754578,0.650932729244232,-0.458716839551926,0.604868113994598,0.650932729244232,-0.458716839551926,0.604868113994598,0.602446496486664,-0.488442957401276,0.631254017353058,0.605372726917267,0.000812157464679331,0.795941710472107,0.786464095115662,-0.0169835668057203,0.61740243434906,-0.380323052406311,-0.00781864393502474,0.9248206615448,-0.713757753372192,-0.0291265603154898,0.699786782264709,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.381502002477646,-0.250341862440109,0.889823138713837,0.214603096246719,0.506344735622406,0.835200905799866,0.225461423397064,-0.225655317306519,0.947758853435516,0.395677745342255,-0.301782160997391,0.867390692234039,0.508102118968964,0.373251259326935,0.776218891143799,0.245217740535736,-0.767790734767914,0.591916918754578,0.518838703632355,-0.706463396549225,0.481368720531464,0.332508742809296,-0.680451035499573,0.653011798858643,0.319739699363709,-0.689254701137543,0.650149524211884, 0.395677745342255,-0.301782160997391,0.867390692234039,0.225461423397064,-0.225655317306519,0.947758853435516,0.518838703632355,-0.706463396549225,0.481368720531464,0.245217740535736,-0.767790734767914,0.591916918754578,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.839360475540161,0.300623118877411,0.452879399061203,-0.678687632083893,0.530943989753723,0.507426381111145,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.0499088205397129,-0.128681614995003,0.990429282188416,-0.0792728736996651,-0.368663102388382,0.926176726818085,0.340047508478165,-0.388343751430511,0.856479287147522,0.370588421821594,-0.193350583314896,0.908449113368988,0.329437464475632,-0.321430414915085,0.887780070304871,0.319739699363709,-0.689254701137543,0.650149524211884,0.332508742809296,-0.680451035499573,0.653011798858643,0.491936594247818,-0.382108181715012,0.782299041748047,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.769319355487823,-0.500670492649078,0.396833389997482,-0.562524795532227,-0.508337914943695,0.652041733264923,0.660678803920746,-0.179935500025749,0.728784441947937,0.640090823173523,-0.393064320087433,0.660139560699463,0.867793679237366,-0.309993803501129,0.38837856054306,0.884072363376617,-0.159779712557793,0.439188450574875,0.831244945526123,-0.225508287549019,0.508112013339996,0.82292628288269,-0.280684322118759,0.493972301483154,0.668613970279694,-0.338565081357956,0.662064254283905,0.654389500617981,-0.325742691755295,0.682397305965424,0.329437464475632,-0.321430414915085,0.887780070304871,0.280544310808182,-0.2230264544487,0.933570623397827,0.654389500617981,-0.325742691755295,0.682397305965424,0.668613970279694,-0.338565081357956,0.662064254283905,-0.866685390472412,0.374831438064575,0.329177558422089,-0.828080534934998,0.439521878957748,0.347998708486557, -0.894487380981445,0.445400327444077,-0.0388705171644688,-0.871505856513977,0.489616960287094,-0.0274355374276638,-0.904659032821655,-0.172026187181473,0.389870524406433,-0.931710779666901,0.00594112882390618,0.363152533769608,-0.839360475540161,0.300623118877411,0.452879399061203,0.786464095115662,-0.0169835668057203,0.61740243434906,0.703794419765472,-0.329490423202515,0.629372298717499,0.650932729244232,-0.458716839551926,0.604868113994598,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.139990076422691,-0.714202582836151,0.685796916484833,0.289891242980957,-0.786550641059875,0.545253336429596,0.378215909004211,-0.383805245161057,0.842405080795288,0.378215909004211,-0.383805245161057,0.842405080795288,0.289891242980957,-0.786550641059875,0.545253336429596,0.526285588741302,-0.789061844348907,0.316867232322693,0.665505409240723,-0.470593899488449,0.579347848892212,0.175360679626465,-0.976183235645294,-0.127730026841164,0.175360679626465,-0.976183235645294,-0.127730026841164,0.562327146530151,-0.809826016426086,0.167242258787155,0.526285588741302,-0.789061844348907,0.316867232322693,0.147943705320358,-0.468890011310577,0.870778322219849,0.280544310808182,-0.2230264544487,0.933570623397827,0.329437464475632,-0.321430414915085,0.887780070304871,0.491936594247818,-0.382108181715012,0.782299041748047,0.913633346557617,-0.352534860372543,0.202467978000641, 0.477010041475296,-0.793651044368744,0.377596825361252,0.147943705320358,-0.468890011310577,0.870778322219849,0.491936594247818,-0.382108181715012,0.782299041748047,0.870778322219849,-0.383099019527435,0.308188676834106,0.505195319652557,-0.403650730848312,0.762786865234375,0.913633346557617,-0.352534860372543,0.202467978000641,0.870778322219849,-0.383099019527435,0.308188676834106,0.44838610291481,-0.404915183782578,0.796864807605743,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.369073897600174,-0.252177625894547,0.89453387260437,0.505195319652557,-0.403650730848312,0.762786865234375,0.44838610291481,-0.404915183782578,0.796864807605743,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.381502002477646,-0.250341862440109,0.889823138713837,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.88222748041153,-0.112881354987621,0.457091361284256,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.938492894172668,-0.335133403539658,0.0831665322184563,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.998829364776611,0.0265166759490967,-0.0404574386775494,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.829398572444916,-0.0672809854149818,0.554591119289398,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.703214585781097,0.00478603458032012,0.710961520671844,-0.400434404611588,-0.0879500508308411,0.91209489107132,-0.417631775140762,-0.138686746358871,0.897969722747803,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.927268087863922,0.115808911621571,0.356036812067032,-0.918597161769867,0.136136829853058,0.37100675702095,-0.703214585781097,0.00478603458032012,0.710961520671844, -0.957767188549042,0.271569937467575,-0.094508096575737,-0.967624545097351,0.222042396664619,-0.119999624788761,-0.918597161769867,0.136136829853058,0.37100675702095,-0.927268087863922,0.115808911621571,0.356036812067032,0.949489533901215,-0.288099020719528,0.124372407793999,0.943572819232941,-0.310979694128037,-0.113850839436054,0.968242347240448,-0.211912021040916,-0.132665053009987,0.951669454574585,-0.257042765617371,0.168090030550957,0.353731364011765,-0.88641881942749,-0.298556119203568,0.536804795265198,-0.812591671943665,-0.227014124393463,0.891479134559631,-0.356151014566422,-0.280038207769394,0.746579051017761,-0.327975332736969,-0.578836619853973,0.422129124403,0.115602806210518,-0.899134576320648,0.541264474391937,0.0936620086431503,-0.835619688034058,0.233156397938728,0.373372942209244,-0.897903501987457,0.156071558594704,0.248666033148766,-0.955932438373566,-0.383682757616043,-0.370396196842194,0.845928013324738,-0.639851093292236,0.713299214839935,0.28599801659584,-0.615591168403625,0.608454763889313,0.500829696655273,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.536804795265198,-0.812591671943665,-0.227014124393463,0.722857892513275,-0.480003207921982,-0.497064769268036,0.586520791053772,-0.278485208749771,-0.760551989078522,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.176827967166901,-0.795711040496826,-0.579288959503174,0.056479137390852,-0.856393754482269,-0.513224899768829,0.318273335695267,-0.280295252799988,-0.905613958835602,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.59022468328476,0.354267239570618,-0.725347936153412,0.233156397938728,0.373372942209244,-0.897903501987457,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.184135809540749,0.315396666526794,-0.930923700332642,0.156071558594704,0.248666033148766,-0.955932438373566, -0.866832733154297,0.233201399445534,-0.440701872110367,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.713566780090332,0.700178563594818,0.0239257458597422,0.776516377925873,0.531664490699768,-0.338164389133453,0.865038812160492,0.500161468982697,0.0393240377306938,0.610888957977295,-0.781325817108154,0.127846196293831,0.559202313423157,-0.768743932247162,-0.310363441705704,0.277932703495026,-0.692557215690613,-0.665670990943909,0.467275589704514,0.564712345600128,-0.680259943008423,0.776516377925873,0.531664490699768,-0.338164389133453,0.559202313423157,-0.768743932247162,-0.310363441705704,-0.153365463018417,0.631252944469452,-0.760262310504913,0.136670753359795,0.566407382488251,-0.812713861465454,-0.0725360587239265,-0.598356962203979,-0.797939538955688,-0.398402363061905,-0.552445113658905,-0.732174813747406,0.277932703495026,-0.692557215690613,-0.665670990943909,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.136670753359795,0.566407382488251,-0.812713861465454,0.467275589704514,0.564712345600128,-0.680259943008423,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.153365463018417,0.631252944469452,-0.760262310504913,0.733602523803711,0.10412222892046,-0.671554863452911,0.747647821903229,-0.00706117879599333,-0.664057850837708,0.931353688240051,0.363742500543594,0.0164845213294029,0.809532463550568,0.353956818580627,0.468371391296387,0.639626801013947,-0.543238401412964,0.543847024440765, 0.784134984016418,-0.509350836277008,-0.354533582925797,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.983289659023285,0.179070711135864,0.032787948846817,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.0492830350995064,-0.186444014310837,-0.981228709220886,-0.0222479663789272,-0.27899968624115,-0.960033416748047,-0.795176029205322,0.587453246116638,0.150312438607216,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.299906134605408,-0.817314743995667,-0.491988658905029,0.056479137390852,-0.856393754482269,-0.513224899768829,0.353731364011765,-0.88641881942749,-0.298556119203568,0.746579051017761,-0.327975332736969,-0.578836619853973,0.318273335695267,-0.280295252799988,-0.905613958835602,0.604855418205261,-0.787497401237488,-0.118312001228333,0.855425655841827,0.486632764339447,-0.177300468087196,0.802787482738495,0.346281617879868,0.485408395528793,0.624463975429535,-0.657274067401886,0.421942621469498,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.796081125736237,0.269071251153946,-0.542084395885468, -0.854514360427856,0.214296534657478,-0.473161995410919,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.613127768039703,0.486845344305038,-0.622138202190399,0.992731213569641,-0.118552401661873,0.0207367613911629,0.962084114551544,-0.260001808404922,-0.0824210941791534,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.951669454574585,-0.257042765617371,0.168090030550957,0.971294820308685,-0.11888038367033,0.206043228507042,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.972172915935516,-0.00723095051944256,0.234152868390083,0.971294820308685,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448,-0.211912021040916,-0.132665053009987,0.943572819232941,-0.310979694128037,-0.113850839436054,0.821827530860901,-0.195920065045357,-0.53499048948288,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.368462383747101,-0.106815822422504,-0.923485696315765,0.383778035640717,0.0243120118975639,-0.923105239868164,0.0997140929102898,0.107741750776768,-0.989165723323822,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.904132783412933,0.388770788908005,-0.177203923463821,0.855425655841827,0.486632764339447,-0.177300468087196,0.604855418205261,-0.787497401237488,-0.118312001228333,0.441250443458557,-0.840362787246704,-0.314783275127411,0.785753786563873,0.386755406856537,-0.482712358236313,0.785753786563873,0.386755406856537,-0.482712358236313,0.441250443458557,-0.840362787246704,-0.314783275127411,0.138132452964783,-0.828281044960022,-0.54301929473877,0.505264282226563,0.378391265869141,-0.775582432746887, 0.505264282226563,0.378391265869141,-0.775582432746887,0.138132452964783,-0.828281044960022,-0.54301929473877,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.077034167945385,0.455207884311676,-0.88704651594162,0.077034167945385,0.455207884311676,-0.88704651594162,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.0315269827842712,0.564418613910675,0.824886441230774,0.390523910522461,0.243563205003738,0.88778829574585,-0.419215679168701,-0.523534297943115,0.741734504699707,0.66844254732132,0.71253913640976,-0.213242888450623,0.888628959655762,0.438762068748474,0.133515372872353,0.886778235435486,0.377031594514847,0.267341554164886,0.399906992912292,0.90941196680069,-0.11421176046133,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.676543116569519,-0.0153456926345825,-0.73624312877655,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.904132783412933,0.388770788908005,-0.177203923463821, -0.801694869995117,0.527419447898865,-0.281272232532501,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.196683183312416,0.297644048929214,-0.934196829795837,0.243145853281021,0.221795409917831,-0.944291710853577,0.24560159444809,0.232358887791634,-0.941110610961914,-0.187843710184097,0.254132181406021,-0.948752641677856,0.900178790092468,-0.431453764438629,0.0593785345554352,0.846972167491913,-0.511904895305634,-0.14349739253521,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.92520534992218,-0.376655071973801,-0.0461085550487041,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.828080534934998,0.439521878957748,0.347998708486557,-0.542648077011108,0.604446232318878,0.583247661590576,0.605372726917267,0.000812157464679331,0.795941710472107,0.301932573318481,-0.883707880973816,0.357627093791962,0.423083633184433,0.0620496086776257,0.903963565826416,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.314953178167343,0.413695752620697,-0.854201555252075,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.233997270464897,0.489457190036774,-0.840045750141144,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.625715851783752,0.58097767829895,-0.520523428916931,-0.217736855149269,0.594750702381134,-0.773861885070801,0.314953178167343,0.413695752620697,-0.854201555252075,0.333965450525284,0.337952494621277,-0.879917681217194, -0.233997270464897,0.489457190036774,-0.840045750141144,0.268678843975067,0.187903970479965,-0.944724142551422,0.286524504423141,0.225191175937653,-0.931231796741486,0.676566541194916,0.144181370735168,-0.722128391265869,0.655851304531097,0.12275330722332,-0.744842708110809,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.214722737669945,0.271103382110596,-0.938294768333435,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.663710594177246,0.281592607498169,-0.692960262298584,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.653601109981537,0.351934164762497,-0.670035779476166,0.286524504423141,0.225191175937653,-0.931231796741486,0.268678843975067,0.187903970479965,-0.944724142551422,-0.214722737669945,0.271103382110596,-0.938294768333435,-0.214377388358116,0.321097940206528,-0.922463238239288,0.24560159444809,0.232358887791634,-0.941110610961914,0.243145853281021,0.221795409917831,-0.944291710853577,0.639175117015839,0.0817547887563705,-0.764703452587128,0.653478145599365,0.112765118479729,-0.748498737812042,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.442950963973999,-0.635696709156036,-0.632205784320831,-0.801694869995117,0.527419447898865,-0.281272232532501,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.625715851783752,0.58097767829895,-0.520523428916931, -0.625715851783752,0.58097767829895,-0.520523428916931,-0.613127768039703,0.486845344305038,-0.622138202190399,-0.206791058182716,0.492802500724792,-0.845211863517761,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.217736855149269,0.594750702381134,-0.773861885070801,-0.206791058182716,0.492802500724792,-0.845211863517761,0.233156397938728,0.373372942209244,-0.897903501987457,0.314953178167343,0.413695752620697,-0.854201555252075,0.314953178167343,0.413695752620697,-0.854201555252075,0.233156397938728,0.373372942209244,-0.897903501987457,0.541264474391937,0.0936620086431503,-0.835619688034058,0.69469678401947,0.0795350298285484,-0.714891970157623,-0.676543116569519,-0.0153456926345825,-0.73624312877655,-0.892978370189667,-0.00842274446040392,-0.450020730495453,-0.876750707626343,0.238855347037315,-0.417440205812454,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.682030558586121,0.27886825799942,-0.676067173480988,-0.187843710184097,0.254132181406021,-0.948752641677856,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.676543116569519,-0.0153456926345825,-0.73624312877655,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.24560159444809,0.232358887791634,-0.941110610961914,0.653478145599365,0.112765118479729,-0.748498737812042,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.93778657913208,-0.340576171875,-0.0675588026642799,0.872841775417328,-0.161784738302231,-0.460405200719833,0.892382204532623,-0.0374441854655743,-0.449724316596985,-0.924062490463257,0.166337832808495,-0.344151526689529,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.343562453985214,0.683792293071747,-0.643733561038971,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.383682757616043,-0.370396196842194,0.845928013324738, -0.696337580680847,-0.401266604661942,0.595062255859375,-0.639851093292236,0.713299214839935,0.28599801659584,-0.541773617267609,0.383253455162048,0.748062908649445,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.0757445394992828,-0.423881083726883,0.902545094490051,0.390523910522461,0.243563205003738,0.88778829574585,0.626252830028534,0.308739811182022,0.715882003307343,-0.248274028301239,-0.562410414218903,0.788704335689545,-0.689171850681305,-0.406394809484482,0.599904477596283,0.390523910522461,0.243563205003738,0.88778829574585,-0.689171850681305,-0.406394809484482,0.599904477596283,-0.419215679168701,-0.523534297943115,0.741734504699707,-0.0838983133435249,-0.180199861526489,-0.980045437812805,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.177617996931076,0.0687198787927628,-0.981697201728821,0.00292694312520325,-0.0230234544724226,-0.99973064661026,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.170505315065384,0.193187981843948,-0.96623307466507,-0.217101514339447,-0.0525678582489491,-0.974732518196106,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.775201201438904,-0.315398722887039,0.547345161437988,-0.408054858446121,-0.272179991006851,0.871440947055817,-0.398905754089355,-0.33735454082489,0.852681756019592,-0.0704309269785881,-0.316668570041656,0.945917785167694,-0.0792728736996651,-0.368663102388382,0.926176726818085,-0.0792728736996651,-0.368663102388382,0.926176726818085, -0.0704309269785881,-0.316668570041656,0.945917785167694,0.378215909004211,-0.383805245161057,0.842405080795288,0.340047508478165,-0.388343751430511,0.856479287147522,0.340047508478165,-0.388343751430511,0.856479287147522,0.378215909004211,-0.383805245161057,0.842405080795288,0.665505409240723,-0.470593899488449,0.579347848892212,0.640090823173523,-0.393064320087433,0.660139560699463,0.665505409240723,-0.470593899488449,0.579347848892212,0.78835541009903,-0.474211633205414,0.391942739486694,0.867793679237366,-0.309993803501129,0.38837856054306,0.640090823173523,-0.393064320087433,0.660139560699463,0.998525857925415,0.0400822311639786,0.0366002470254898,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.930242419242859,-0.158916160464287,0.330748707056046,0.930242419242859,-0.158916160464287,0.330748707056046,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.685771405696869,-0.727804124355316,0.00433491868898273,0.805302381515503,-0.358387529850006,0.472277879714966,0.301932573318481,-0.883707880973816,0.357627093791962,0.289558619260788,-0.713769853115082,0.637721240520477,0.423083633184433,0.0620496086776257,0.903963565826416,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.981179654598236,-0.112972341477871,-0.156600564718246,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.78181403875351,-0.124027468264103,-0.611051499843597,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.211948931217194,0.670887529850006,0.710624814033508,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.211948931217194,0.670887529850006,0.710624814033508,0.129296213388443,0.717355608940125,0.684604585170746,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.639851093292236,0.713299214839935,0.28599801659584, -0.696337580680847,-0.401266604661942,0.595062255859375,-0.828140676021576,-0.416389226913452,0.375237315893173,-0.713566780090332,0.700178563594818,0.0239257458597422,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.828080534934998,0.439521878957748,0.347998708486557,-0.9922234416008,-0.1217075958848,0.0260745380073786,-0.572269916534424,-0.327977895736694,0.751623332500458,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.0997487902641296,0.343725502490997,0.933757483959198,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.26332488656044,-0.487629622220993,0.832392573356628,-0.0997487902641296,0.343725502490997,0.933757483959198,0.051387831568718,-0.174088895320892,0.983388185501099,-0.0260992348194122,-0.974703729152679,0.221971705555916,0.107415564358234,-0.480258971452713,0.870524644851685,0.508102118968964,0.373251259326935,0.776218891143799,0.423083633184433,0.0620496086776257,0.903963565826416,0.289558619260788,-0.713769853115082,0.637721240520477,0.214603096246719,0.506344735622406,0.835200905799866,-0.903217494487762,-0.152761682868004,0.401076048612595,-0.542648077011108,0.604446232318878,0.583247661590576,-0.454762816429138,0.657830238342285,0.60037499666214,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.882815718650818,-0.369268298149109,0.290305644273758,-0.874023795127869,0.388026893138886,-0.292433828115463,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.863866031169891,0.184018969535828,-0.468905657529831,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.441881209611893,-0.050617303699255,-0.89564436674118, -0.177617996931076,0.0687198787927628,-0.981697201728821,-0.512617945671082,0.132903546094894,-0.848268508911133,-0.441881209611893,-0.050617303699255,-0.89564436674118,-0.193201750516891,-0.134490892291069,-0.971897780895233,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.177617996931076,0.0687198787927628,-0.981697201728821,-0.193201750516891,-0.134490892291069,-0.971897780895233,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.318273335695267,-0.280295252799988,-0.905613958835602,0.368462383747101,-0.106815822422504,-0.923485696315765,0.00292694312520325,-0.0230234544724226,-0.99973064661026,-0.0838983133435249,-0.180199861526489,-0.980045437812805,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.78181403875351,-0.124027468264103,-0.611051499843597,0.746579051017761,-0.327975332736969,-0.578836619853973,0.891479134559631,-0.356151014566422,-0.280038207769394,0.815547049045563,-0.485381871461868,-0.315099239349365,0.891479134559631,-0.356151014566422,-0.280038207769394,0.586520791053772,-0.278485208749771,-0.760551989078522,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881715893745422,0.054974939674139,-0.468566834926605,0.991608023643494,-0.114275835454464,-0.060452651232481,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.885001957416534,0.0480887815356255,-0.463097155094147,0.897607445716858,-0.182163774967194,-0.401394128799438,0.932035446166992,0.0906825214624405,-0.350836962461472,0.752377092838287,0.158552542328835,-0.639366745948792,0.69469678401947,0.0795350298285484,-0.714891970157623,0.821827530860901,-0.195920065045357,-0.53499048948288,0.897607445716858,-0.182163774967194,-0.401394128799438,0.69469678401947,0.0795350298285484,-0.714891970157623,0.541264474391937,0.0936620086431503,-0.835619688034058,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.821827530860901,-0.195920065045357,-0.53499048948288, 0.541264474391937,0.0936620086431503,-0.835619688034058,0.422129124403,0.115602806210518,-0.899134576320648,0.881715893745422,0.054974939674139,-0.468566834926605,0.885001957416534,0.0480887815356255,-0.463097155094147,0.655851304531097,0.12275330722332,-0.744842708110809,0.676566541194916,0.144181370735168,-0.722128391265869,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.653478145599365,0.112765118479729,-0.748498737812042,0.639175117015839,0.0817547887563705,-0.764703452587128,0.897607445716858,-0.182163774967194,-0.401394128799438,0.821827530860901,-0.195920065045357,-0.53499048948288,0.943572819232941,-0.310979694128037,-0.113850839436054,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.998525857925415,0.0400822311639786,0.0366002470254898,0.932035446166992,0.0906825214624405,-0.350836962461472,0.897607445716858,-0.182163774967194,-0.401394128799438,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.991423904895782,0.113214619457722,0.0652767568826675,0.992731213569641,-0.118552401661873,0.0207367613911629,0.971294820308685,-0.11888038367033,0.206043228507042,0.972172915935516,-0.00723095051944256,0.234152868390083,0.991423904895782,0.113214619457722,0.0652767568826675,0.972172915935516,-0.00723095051944256,0.234152868390083,0.815547049045563,-0.485381871461868,-0.315099239349365,0.80362457036972,-0.592847883701324,0.052143108099699,0.588976085186005,-0.561100006103516,0.58161324262619,0.995399534702301,0.0302368272095919,0.0909145176410675,0.80362457036972,-0.592847883701324,0.052143108099699,0.898760318756104,0.357274115085602,0.254135996103287,0.960353672504425,0.263352990150452,0.0914659649133682,0.588976085186005,-0.561100006103516,0.58161324262619,0.0119833052158356,-0.684736132621765,0.728692531585693,0.750469028949738,0.503480017185211,0.42814028263092,0.898760318756104,0.357274115085602,0.254135996103287,0.588976085186005,-0.561100006103516,0.58161324262619,-0.924443244934082,0.266406655311584,-0.272822648286819,-0.757972836494446,-0.133171454071999,-0.63854718208313, -0.863866031169891,0.184018969535828,-0.468905657529831,-0.843237459659576,0.525120079517365,-0.114889100193977,-0.883931934833527,-0.461925148963928,-0.0727287381887436,-0.757972836494446,-0.133171454071999,-0.63854718208313,-0.924443244934082,0.266406655311584,-0.272822648286819,0.603638291358948,-0.670441269874573,-0.431427150964737,0.872841775417328,-0.161784738302231,-0.460405200719833,0.93778657913208,-0.340576171875,-0.0675588026642799,0.581761598587036,-0.790978848934174,-0.189488589763641,0.932035446166992,0.0906825214624405,-0.350836962461472,0.998525857925415,0.0400822311639786,0.0366002470254898,0.977894842624664,0.203556552529335,0.0478159449994564,0.904317140579224,0.203987643122673,-0.3749660551548,0.932035446166992,0.0906825214624405,-0.350836962461472,0.904317140579224,0.203987643122673,-0.3749660551548,0.74667090177536,0.1879021525383,-0.638102948665619,0.752377092838287,0.158552542328835,-0.639366745948792,0.333965450525284,0.337952494621277,-0.879917681217194,0.752377092838287,0.158552542328835,-0.639366745948792,0.74667090177536,0.1879021525383,-0.638102948665619,0.32976895570755,0.307349354028702,-0.892630279064178,-0.233997270464897,0.489457190036774,-0.840045750141144,0.333965450525284,0.337952494621277,-0.879917681217194,0.32976895570755,0.307349354028702,-0.892630279064178,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.233997270464897,0.489457190036774,-0.840045750141144,-0.232812166213989,0.426294058561325,-0.874112010002136,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.657665491104126,0.524985373020172,-0.540246665477753,-0.671548306941986,0.466394305229187,-0.575759708881378,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.689231038093567,-0.628963589668274,-0.359674036502838, -0.719066202640533,-0.680389881134033,-0.14146888256073,-0.971879303455353,-0.208401709794998,0.109632924199104,-0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.740283310413361,-0.113353177905083,0.662670135498047,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.93060040473938,0.126688674092293,0.343413561582565,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.866685390472412,0.374831438064575,0.329177558422089,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.678687632083893,0.530943989753723,0.507426381111145,-0.828080534934998,0.439521878957748,0.347998708486557,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.96207994222641,0.0375091098248959,0.270176410675049,-0.93060040473938,0.126688674092293,0.343413561582565,-0.964663922786713,0.191057458519936,-0.18144017457962,0.951669454574585,-0.257042765617371,0.168090030550957,0.968242347240448,-0.211912021040916,-0.132665053009987,0.981179654598236,-0.112972341477871,-0.156600564718246,0.971294820308685,-0.11888038367033,0.206043228507042,0.981179654598236,-0.112972341477871,-0.156600564718246,0.968242347240448,-0.211912021040916,-0.132665053009987,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.383778035640717,0.0243120118975639,-0.923105239868164,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.789554059505463,-0.0690156519412994,-0.609787821769714,0.422129124403,0.115602806210518,-0.899134576320648,0.383778035640717,0.0243120118975639,-0.923105239868164,0.422129124403,0.115602806210518,-0.899134576320648,0.156071558594704,0.248666033148766,-0.955932438373566,0.0997140929102898,0.107741750776768,-0.989165723323822,-0.184135809540749,0.315396666526794,-0.930923700332642,-0.170505315065384,0.193187981843948,-0.96623307466507,0.0997140929102898,0.107741750776768,-0.989165723323822,0.156071558594704,0.248666033148766,-0.955932438373566,-0.566148936748505,0.251458436250687,-0.785012185573578,-0.170505315065384,0.193187981843948,-0.96623307466507, -0.184135809540749,0.315396666526794,-0.930923700332642,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.59022468328476,0.354267239570618,-0.725347936153412,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.566148936748505,0.251458436250687,-0.785012185573578,0.97999119758606,-0.199000805616379,-0.00398476235568523,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.949489533901215,-0.288099020719528,0.124372407793999,0.951669454574585,-0.257042765617371,0.168090030550957,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.850323617458344,0.228136301040649,-0.474239945411682,0.846972167491913,-0.511904895305634,-0.14349739253521,0.900178790092468,-0.431453764438629,0.0593785345554352,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.660678803920746,-0.179935500025749,0.728784441947937,0.884072363376617,-0.159779712557793,0.439188450574875,0.861376106739044,-0.246860504150391,0.443949490785599,0.664143323898315,-0.190197542309761,0.72300660610199,-0.93060040473938,0.126688674092293,0.343413561582565,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.924485385417938,0.137891575694084,0.355404943227768,0.519910156726837,-0.607850134372711,0.600176334381104,0.477010041475296,-0.793651044368744,0.377596825361252,0.913633346557617,-0.352534860372543,0.202467978000641,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.147943705320358,-0.468890011310577,0.870778322219849,0.519910156726837,-0.607850134372711,0.600176334381104,0.913633346557617,-0.352534860372543,0.202467978000641,0.505195319652557,-0.403650730848312,0.762786865234375,0.505195319652557,-0.403650730848312,0.762786865234375,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.415356457233429,-0.555049777030945,0.720693230628967,0.519910156726837,-0.607850134372711,0.600176334381104, -0.901903212070465,-0.103399723768234,0.419379383325577,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.415356457233429,-0.555049777030945,0.720693230628967,-0.369073897600174,-0.252177625894547,0.89453387260437,-0.845879793167114,-0.333898961544037,0.415931314229965,-0.901903212070465,-0.103399723768234,0.419379383325577,-0.996204435825348,0.0376567244529724,-0.0784778669476509,-0.938492894172668,-0.335133403539658,0.0831665322184563,0.682205855846405,-0.688040673732758,-0.247376576066017,0.685771405696869,-0.727804124355316,0.00433491868898273,0.816507577896118,-0.574229061603546,-0.0598032623529434,0.973673224449158,-0.222424849867821,-0.0498761273920536,0.900178790092468,-0.431453764438629,0.0593785345554352,0.949489533901215,-0.288099020719528,0.124372407793999,0.98767364025116,-0.155731916427612,-0.0157585926353931,0.846972167491913,-0.511904895305634,-0.14349739253521,0.682205855846405,-0.688040673732758,-0.247376576066017,0.816507577896118,-0.574229061603546,-0.0598032623529434,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.866832733154297,0.233201399445534,-0.440701872110367,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.863597929477692,0.181174650788307,-0.470504373311996,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.850903332233429,0.254370987415314,-0.459629088640213,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.798423051834106,0.345685392618179,-0.492972820997238,-0.796034395694733,0.305417150259018,-0.522541463375092,-0.419204741716385,0.619329035282135,0.66385155916214,-0.211948931217194,0.670887529850006,0.710624814033508,-0.665158569812775,0.0713190585374832,0.743288397789001,-0.454762816429138,0.657830238342285,0.60037499666214,0.051387831568718,-0.174088895320892,0.983388185501099,0.289558619260788,-0.713769853115082,0.637721240520477,-0.0260992348194122,-0.974703729152679,0.221971705555916, 0.559202313423157,-0.768743932247162,-0.310363441705704,0.610888957977295,-0.781325817108154,0.127846196293831,0.639626801013947,-0.543238401412964,0.543847024440765,0.91938704252243,-0.184946089982986,-0.347163438796997,0.776516377925873,0.531664490699768,-0.338164389133453,0.467275589704514,0.564712345600128,-0.680259943008423,0.228658348321915,0.96535587310791,-0.125711753964424,0.287440627813339,0.955214440822601,-0.070308543741703,0.182189047336578,0.963832557201386,-0.194509625434875,0.136670753359795,0.566407382488251,-0.812713861465454,-0.153365463018417,0.631252944469452,-0.760262310504913,0.158467367291451,0.970077335834503,-0.183951318264008,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.865038812160492,0.500161468982697,0.0393240377306938,0.332606196403503,0.942266285419464,-0.0388250686228275,0.399906992912292,0.90941196680069,-0.11421176046133,0.886778235435486,0.377031594514847,0.267341554164886,0.467275589704514,0.564712345600128,-0.680259943008423,0.136670753359795,0.566407382488251,-0.812713861465454,0.182189047336578,0.963832557201386,-0.194509625434875,0.228658348321915,0.96535587310791,-0.125711753964424,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.398402363061905,-0.552445113658905,-0.732174813747406,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.343562453985214,0.683792293071747,-0.643733561038971,0.191059574484825,0.965591907501221,-0.17643266916275,0.158467367291451,0.970077335834503,-0.183951318264008,-0.153365463018417,0.631252944469452,-0.760262310504913,0.277932703495026,-0.692557215690613,-0.665670990943909,0.505863070487976,-0.10451452434063,-0.856258869171143,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.0725360587239265,-0.598356962203979,-0.797939538955688,0.277932703495026,-0.692557215690613,-0.665670990943909, 0.559202313423157,-0.768743932247162,-0.310363441705704,0.91938704252243,-0.184946089982986,-0.347163438796997,0.505863070487976,-0.10451452434063,-0.856258869171143,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.795176029205322,0.587453246116638,0.150312438607216,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.439218908548355,-0.51500540971756,-0.736108779907227,-0.845747351646423,-0.528353095054626,0.0745282098650932,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.549123287200928,-0.730513632297516,-0.405972242355347,0.536804795265198,-0.812591671943665,-0.227014124393463,0.604855418205261,-0.787497401237488,-0.118312001228333,0.624463975429535,-0.657274067401886,0.421942621469498,0.722857892513275,-0.480003207921982,-0.497064769268036,0.722857892513275,-0.480003207921982,-0.497064769268036,0.624463975429535,-0.657274067401886,0.421942621469498,0.802787482738495,0.346281617879868,0.485408395528793,0.931353688240051,0.363742500543594,0.0164845213294029,0.931353688240051,0.363742500543594,0.0164845213294029,0.802787482738495,0.346281617879868,0.485408395528793,0.855425655841827,0.486632764339447,-0.177300468087196,0.809532463550568,0.353956818580627,0.468371391296387,0.441250443458557,-0.840362787246704,-0.314783275127411,0.604855418205261,-0.787497401237488,-0.118312001228333,0.536804795265198,-0.812591671943665,-0.227014124393463,0.353731364011765,-0.88641881942749,-0.298556119203568,0.138132452964783,-0.828281044960022,-0.54301929473877,0.441250443458557,-0.840362787246704,-0.314783275127411,0.353731364011765,-0.88641881942749,-0.298556119203568,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.136814370751381,-0.897029936313629,-0.42026075720787,0.138132452964783,-0.828281044960022,-0.54301929473877,0.056479137390852,-0.856393754482269,-0.513224899768829,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.0855581760406494,-0.201314404606819,-0.975782930850983, 0.077034167945385,0.455207884311676,-0.88704651594162,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.136814370751381,-0.897029936313629,-0.42026075720787,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.28214168548584,0.541098833084106,-0.792217254638672,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.299906134605408,-0.817314743995667,-0.491988658905029,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.302752912044525,-0.830289721488953,-0.467931240797043,-0.728462755680084,0.461005359888077,-0.506770253181458,-0.795176029205322,0.587453246116638,0.150312438607216,-0.38756388425827,0.403812289237976,-0.82869166135788,-0.983289659023285,0.179070711135864,0.032787948846817,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.490713983774185,0.668629288673401,-0.558690071105957,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.562491774559021,-0.71064704656601,-0.422591775655746,-0.479781299829483,-0.760774612426758,-0.437072038650513,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.0330419652163982,0.483641624450684,-0.874642193317413,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.968307256698608,-0.249105870723724,-0.0180926471948624,-0.658661007881165,-0.541524648666382,-0.52241438627243,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.633183360099792,0.75979870557785,-0.147596448659897,-0.0330419652163982,0.483641624450684,-0.874642193317413,0.191059574484825,0.965591907501221,-0.17643266916275,-0.343562453985214,0.683792293071747,-0.643733561038971,0.855425655841827,0.486632764339447,-0.177300468087196, 0.785753786563873,0.386755406856537,-0.482712358236313,0.843447089195251,-0.319755733013153,-0.431686460971832,0.809532463550568,0.353956818580627,0.468371391296387,0.942203402519226,0.0765308514237404,0.326183587312698,0.976662814617157,0.0512243360280991,0.208580628037453,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.606497347354889,-0.734818637371063,0.303648799657822,0.886778235435486,0.377031594514847,0.267341554164886,-0.127582266926765,-0.6490518450737,0.749969661235809,-0.541773617267609,0.383253455162048,0.748062908649445,-0.0315269827842712,0.564418613910675,0.824886441230774,-0.261260628700256,-0.761488914489746,0.593192636966705,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.549123287200928,-0.730513632297516,-0.405972242355347,-0.481908857822418,-0.755593657493591,-0.443668872117996,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.769991517066956,0.178484797477722,-0.612581610679626,-0.847418308258057,0.181933835148811,-0.498780846595764,-0.839367032051086,0.0223368648439646,-0.543105900287628,-0.725547671318054,0.0196763575077057,-0.687890529632568,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.854514360427856,0.214296534657478,-0.473161995410919,-0.796081125736237,0.269071251153946,-0.542084395885468,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.804398477077484,0.375305235385895,-0.460531324148178,-0.850323617458344,0.228136301040649,-0.474239945411682,-0.829805314540863,0.320066124200821,-0.457144170999527,-0.826255619525909,0.440138310194016,-0.351539462804794,-0.871505856513977,0.489616960287094,-0.0274355374276638,-0.894487380981445,0.445400327444077,-0.0388705171644688,-0.81437873840332,0.501368820667267,-0.292261153459549,-0.820989012718201,0.473643779754639,-0.318808138370514,-0.967624545097351,0.222042396664619,-0.119999624788761,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.85853385925293,0.234514445066452,-0.455985277891159,-0.892978370189667,-0.00842274446040392,-0.450020730495453, -0.967361629009247,-0.0953836515545845,-0.234762668609619,-0.975552141666412,0.149593591690063,-0.16099639236927,-0.876750707626343,0.238855347037315,-0.417440205812454,0.505264282226563,0.378391265869141,-0.775582432746887,0.077034167945385,0.455207884311676,-0.88704651594162,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.585620284080505,-0.30219754576683,-0.752147257328033,0.606497347354889,-0.734818637371063,0.303648799657822,0.784134984016418,-0.509350836277008,-0.354533582925797,0.639626801013947,-0.543238401412964,0.543847024440765,0.610888957977295,-0.781325817108154,0.127846196293831,0.865038812160492,0.500161468982697,0.0393240377306938,0.886778235435486,0.377031594514847,0.267341554164886,0.606497347354889,-0.734818637371063,0.303648799657822,0.610888957977295,-0.781325817108154,0.127846196293831,0.585620284080505,-0.30219754576683,-0.752147257328033,0.843447089195251,-0.319755733013153,-0.431686460971832,0.785753786563873,0.386755406856537,-0.482712358236313,0.505264282226563,0.378391265869141,-0.775582432746887,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.879797160625458,-0.457895129919052,-0.127628490328789,0.0757457762956619,-0.699936747550964,-0.710176825523376,-0.371980756521225,-0.111040212213993,-0.921574950218201,0.585620284080505,-0.30219754576683,-0.752147257328033,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.66748982667923,-0.736912310123444,0.106852844357491,0.843447089195251,-0.319755733013153,-0.431686460971832,0.735480666160584,0.34406366944313,-0.583685159683228,0.91938704252243,-0.184946089982986,-0.347163438796997,0.639626801013947,-0.543238401412964,0.543847024440765,0.807643234729767,0.341063499450684,0.481028109788895,0.930141091346741,0.365344673395157,0.0368896275758743,0.272457927465439,0.39542019367218,-0.877159953117371,0.505863070487976,-0.10451452434063,-0.856258869171143,0.91938704252243,-0.184946089982986,-0.347163438796997,0.162468671798706,0.414035111665726,-0.89564436674118,-0.719203293323517,0.653926372528076,-0.234791070222855, -0.682009935379028,0.101576536893845,-0.724254548549652,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822,0.553657293319702,-0.675496935844421,-0.285298675298691,0.0749257579445839,-0.95550549030304,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.594993591308594,0.323719650506973,-0.735654950141907,-0.316894441843033,0.476865291595459,-0.819864273071289,0.0861517861485481,0.0155389430001378,-0.996160864830017,0.505863070487976,-0.10451452434063,-0.856258869171143,0.728234827518463,0.325270414352417,-0.603219032287598,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.712427794933319,-0.549001693725586,-0.437085568904877,0.435323119163513,-0.758436143398285,-0.485044747591019,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.807643234729767,0.341063499450684,0.481028109788895,0.639626801013947,-0.543238401412964,0.543847024440765,0.809532463550568,0.353956818580627,0.468371391296387,0.521454632282257,-0.681395709514618,0.513599991798401,0.521454632282257,-0.681395709514618,0.513599991798401,0.809532463550568,0.353956818580627,0.468371391296387,0.843447089195251,-0.319755733013153,-0.431686460971832,0.454940408468246,-0.69178706407547,-0.560767233371735,-0.809815943241119,-0.0024391699116677,-0.586678981781006,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.983289659023285,0.179070711135864,0.032787948846817,-0.983289659023285,0.179070711135864,0.032787948846817,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.809815943241119,-0.0024391699116677,-0.586678981781006,0.0855581760406494,-0.201314404606819,-0.975782930850983,-0.555338084697723,-0.543631553649902,-0.629336416721344,0.512858152389526,-0.774301767349243,-0.370719999074936, 0.585620284080505,-0.30219754576683,-0.752147257328033,0.784134984016418,-0.509350836277008,-0.354533582925797,0.606497347354889,-0.734818637371063,0.303648799657822,0.989238142967224,-0.144198939204216,-0.0247913636267185,0.888628959655762,0.438762068748474,0.133515372872353,0.942203402519226,0.0765308514237404,0.326183587312698,0.886778235435486,0.377031594514847,0.267341554164886,-0.917265832424164,-0.397978872060776,0.0153695549815893,-0.756093859672546,0.644391119480133,-0.114376991987228,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.205607205629349,-0.621804177761078,-0.755701839923859,-0.132126957178116,0.383346885442734,-0.914104819297791,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.706070244312286,0.00520930625498295,-0.708122611045837,-0.682009935379028,0.101576536893845,-0.724254548549652,-0.719203293323517,0.653926372528076,-0.234791070222855,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.879797160625458,-0.457895129919052,-0.127628490328789,-0.719203293323517,0.653926372528076,-0.234791070222855,0.162468671798706,0.414035111665726,-0.89564436674118,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.0757457762956619,-0.699936747550964,-0.710176825523376,0.162468671798706,0.414035111665726,-0.89564436674118,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.371980756521225,-0.111040212213993,-0.921574950218201,-0.285298675298691,0.0749257579445839,-0.95550549030304,-0.486998409032822,0.553657293319702,-0.675496935844421,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.712427794933319,-0.549001693725586,-0.437085568904877,-0.486998409032822,0.553657293319702,-0.675496935844421,0.594993591308594,0.323719650506973,-0.735654950141907,0.435323119163513,-0.758436143398285,-0.485044747591019,0.435323119163513,-0.758436143398285,-0.485044747591019,0.594993591308594,0.323719650506973,-0.735654950141907, 0.0861517861485481,0.0155389430001378,-0.996160864830017,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0855581760406494,-0.201314404606819,-0.975782930850983,0.0861517861485481,0.0155389430001378,-0.996160864830017,-0.316894441843033,0.476865291595459,-0.819864273071289,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.555338084697723,-0.543631553649902,-0.629336416721344,-0.316894441843033,0.476865291595459,-0.819864273071289,0.728234827518463,0.325270414352417,-0.603219032287598,0.512858152389526,-0.774301767349243,-0.370719999074936,0.512858152389526,-0.774301767349243,-0.370719999074936,0.728234827518463,0.325270414352417,-0.603219032287598,0.505863070487976,-0.10451452434063,-0.856258869171143,0.585620284080505,-0.30219754576683,-0.752147257328033,0.585620284080505,-0.30219754576683,-0.752147257328033,0.505863070487976,-0.10451452434063,-0.856258869171143,0.272457927465439,0.39542019367218,-0.877159953117371,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.0887269154191017,-0.638365030288696,-0.764602899551392,0.272457927465439,0.39542019367218,-0.877159953117371,0.930141091346741,0.365344673395157,0.0368896275758743,0.66748982667923,-0.736912310123444,0.106852844357491,0.66748982667923,-0.736912310123444,0.106852844357491,0.930141091346741,0.365344673395157,0.0368896275758743,0.91938704252243,-0.184946089982986,-0.347163438796997,0.843447089195251,-0.319755733013153,-0.431686460971832,0.843447089195251,-0.319755733013153,-0.431686460971832,0.91938704252243,-0.184946089982986,-0.347163438796997,0.735480666160584,0.34406366944313,-0.583685159683228,0.454940408468246,-0.69178706407547,-0.560767233371735,0.454940408468246,-0.69178706407547,-0.560767233371735,0.735480666160584,0.34406366944313,-0.583685159683228,0.807643234729767,0.341063499450684,0.481028109788895,0.521454632282257,-0.681395709514618,0.513599991798401,0.526285588741302,-0.789061844348907,0.316867232322693,0.289891242980957,-0.786550641059875,0.545253336429596,0.133638396859169,-0.991028487682343,-0.00182732508983463, 0.133638396859169,-0.991028487682343,-0.00182732508983463,0.289891242980957,-0.786550641059875,0.545253336429596,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.0176914222538471,-0.987810254096985,0.154654189944267,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.316983908414841,-0.933099091053009,0.169844955205917,-0.139990076422691,-0.714202582836151,0.685796916484833,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.43298476934433,-0.720436811447144,0.541751801967621,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.355301171541214,-0.934036552906036,0.0365622416138649,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.39702296257019,-0.910409450531006,-0.116307184100151,-0.63077574968338,-0.739016532897949,0.236593529582024,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.387578904628754,-0.825659334659576,-0.40996253490448,-0.719066202640533,-0.680389881134033,-0.14146888256073,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.689231038093567,-0.628963589668274,-0.359674036502838,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.347473174333572,-0.882382750511169,-0.317274332046509,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.348667085170746,-0.872639775276184,-0.341951847076416,-0.65434330701828,-0.613166451454163,-0.442562788724899,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.501005291938782,-0.576619863510132,-0.645370602607727,-0.211497768759727,-0.562794804573059,-0.799081146717072,-0.227143570780754,-0.829574823379517,-0.51010924577713,-0.227143570780754,-0.829574823379517,-0.51010924577713,0.0649978742003441,-0.592735111713409,-0.802770435810089,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.113406293094158,-0.831756949424744,-0.543432950973511,-0.211497768759727,-0.562794804573059,-0.799081146717072, 0.0696519389748573,-0.853706240653992,-0.516075789928436,0.0649978742003441,-0.592735111713409,-0.802770435810089,0.442950963973999,-0.635696709156036,-0.632205784320831,0.219755545258522,-0.882318615913391,-0.416198641061783,0.526285588741302,-0.789061844348907,0.316867232322693,0.562327146530151,-0.809826016426086,0.167242258787155,0.78835541009903,-0.474211633205414,0.391942739486694,0.665505409240723,-0.470593899488449,0.579347848892212,0.991608023643494,-0.114275835454464,-0.060452651232481,0.82292628288269,-0.280684322118759,0.493972301483154,0.831244945526123,-0.225508287549019,0.508112013339996,0.995975911617279,-0.0798337981104851,-0.0407244116067886,0.867793679237366,-0.309993803501129,0.38837856054306,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.884072363376617,-0.159779712557793,0.439188450574875,0.78835541009903,-0.474211633205414,0.391942739486694,0.93778657913208,-0.340576171875,-0.0675588026642799,0.987106621265411,-0.147132456302643,-0.0630284249782562,0.867793679237366,-0.309993803501129,0.38837856054306,0.581761598587036,-0.790978848934174,-0.189488589763641,0.93778657913208,-0.340576171875,-0.0675588026642799,0.78835541009903,-0.474211633205414,0.391942739486694,0.562327146530151,-0.809826016426086,0.167242258787155,-0.0647715702652931,-0.0269695688039064,0.997535645961761,0.280544310808182,-0.2230264544487,0.933570623397827,0.147943705320358,-0.468890011310577,0.870778322219849,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.370588421821594,-0.193350583314896,0.908449113368988,0.280544310808182,-0.2230264544487,0.933570623397827,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.904132783412933,0.388770788908005,-0.177203923463821,-0.985335469245911,0.0123848039656878,-0.170178011059761,-0.924062490463257,0.166337832808495,-0.344151526689529,0.92520534992218,-0.376655071973801,-0.0461085550487041,0.943572819232941,-0.310979694128037,-0.113850839436054,0.949489533901215,-0.288099020719528,0.124372407793999, 0.900178790092468,-0.431453764438629,0.0593785345554352,0.815547049045563,-0.485381871461868,-0.315099239349365,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.891479134559631,-0.356151014566422,-0.280038207769394,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.877985596656799,0.347244709730148,0.329488188028336,-0.939527928829193,0.186541080474854,0.287210255861282,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.923067510128021,0.218861386179924,-0.316300690174103,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0218884665518999,0.60806405544281,0.793586194515228,0.432919770479202,0.554768323898315,0.710501611232758,0.272088974714279,0.83392196893692,0.480147629976273,-0.402506142854691,0.589897632598877,0.70000684261322,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.147527620196342,0.908096194267273,0.391914486885071,-0.551313877105713,0.631630659103394,0.545064926147461,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.877985596656799,0.347244709730148,0.329488188028336,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.697896897792816,0.111968666315079,0.707391619682312,-0.877985596656799,0.347244709730148,0.329488188028336,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.0218884665518999,0.60806405544281,0.793586194515228,0.0640611723065376,0.868370652198792,0.491760730743408,-0.0960818529129028,0.882192492485046,0.460982292890549,-0.402506142854691,0.589897632598877,0.70000684261322,-0.697896897792816,0.111968666315079,0.707391619682312, -0.45111495256424,-0.252489358186722,0.856004893779755,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.976002871990204,0.137454673647881,0.168892458081245,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.551313877105713,0.631630659103394,0.545064926147461,-0.683505356311798,0.663009881973267,0.305349379777908,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.697896897792816,0.111968666315079,0.707391619682312,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.939527928829193,0.186541080474854,0.287210255861282,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.805570960044861,0.0887086465954781,-0.585820972919464,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.923067510128021,0.218861386179924,-0.316300690174103,0.568327903747559,-0.132913276553154,0.811995983123779,0.503679692745209,-0.333046585321426,0.797111511230469,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.0958455428481102,-0.0575050786137581,0.993733763694763,0.560331284999847,-0.197167843580246,0.804458677768707,0.681288719177246,-0.155398637056351,0.715329945087433,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.969195008277893,0.116620995104313,0.216934517025948,0.934698820114136,0.0468888580799103,-0.352334558963776,0.909544348716736,-0.0496345721185207,0.412632375955582,0.953069984912872,0.0484385639429092,0.298849850893021,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.76161140203476,-0.261901050806046,0.592752873897552,0.503679692745209,-0.333046585321426,0.797111511230469,0.568327903747559,-0.132913276553154,0.811995983123779,0.807208120822906,-0.16038890182972,0.568058490753174,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.964133560657501,0.11603681743145,0.238708838820457, -0.922418296337128,0.0309104230254889,0.384953290224075,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.964133560657501,0.11603681743145,0.238708838820457,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.928708910942078,-0.245197176933289,0.278169125318527,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.892664194107056,0.187903389334679,-0.409686326980591,0.801601529121399,-0.550374329090118,-0.233501866459847,0.681288719177246,-0.155398637056351,0.715329945087433,0.293806612491608,-0.416160941123962,0.860515952110291,0.364783316850662,-0.883516609668732,0.293822199106216,0.953069984912872,0.0484385639429092,0.298849850893021,0.909544348716736,-0.0496345721185207,0.412632375955582,0.871833384037018,0.0184005852788687,0.489456832408905,0.928847432136536,0.162274017930031,0.333030939102173,0.546681344509125,-0.221680983901024,0.807463347911835,0.560331284999847,-0.197167843580246,0.804458677768707,0.969195008277893,0.116620995104313,0.216934517025948,0.928847432136536,0.162274017930031,0.333030939102173,0.332680404186249,-0.441110402345657,0.833513855934143,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.0511878095567226,-0.230872601270676,0.971636593341827,0.161164596676826,-0.331503033638,0.929586827754974,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.482705980539322,0.267842918634415,-0.833819627761841,0.890334188938141,-0.2436583340168,-0.384624063968658,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.383484423160553,-0.10283836722374,-0.917803883552551, 0.942743897438049,-0.0672791972756386,-0.326661080121994,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.850938260555267,-0.0678398907184601,0.520866394042969,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.45111495256424,-0.252489358186722,0.856004893779755,-0.675129354000092,-0.135668352246284,0.725116848945618,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.136431202292442,-0.35848480463028,0.923512399196625,-0.45111495256424,-0.252489358186722,0.856004893779755,0.0511878095567226,-0.230872601270676,0.971636593341827,0.152829229831696,-0.222570449113846,0.962863266468048,0.30596736073494,-0.302397102117538,0.902740240097046,0.161164596676826,-0.331503033638,0.929586827754974,0.118139639496803,-0.728867173194885,0.67438542842865,-0.583520650863647,-0.523498177528381,0.620848834514618,0.546681344509125,-0.221680983901024,0.807463347911835,0.456334859132767,-0.263855695724487,0.849787414073944,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.828753769397736,-0.00401695584878325,0.559599041938782,0.681288719177246,-0.155398637056351,0.715329945087433,0.560331284999847,-0.197167843580246,0.804458677768707,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.934698820114136,0.0468888580799103,-0.352334558963776,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.202261254191399,-0.191956058144569,0.960334956645966,0.332680404186249,-0.441110402345657,0.833513855934143,-0.922418296337128,0.0309104230254889,0.384953290224075,-0.964133560657501,0.11603681743145,0.238708838820457,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.543925106525421,-0.442455142736435,-0.713006973266602, -0.201129660010338,-0.411518931388855,0.888931393623352,0.202261254191399,-0.191956058144569,0.960334956645966,-0.964133560657501,0.11603681743145,0.238708838820457,-0.928708910942078,-0.245197176933289,0.278169125318527,0.751028060913086,-0.474978506565094,-0.458641737699509,0.691331505775452,-0.716019809246063,-0.0968316718935966,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.56893402338028,-0.144464939832687,-0.809594929218292,0.505280077457428,-0.213028207421303,-0.836248159408569,0.751028060913086,-0.474978506565094,-0.458641737699509,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.650360941886902,-0.2744460105896,0.708314895629883,0.293806612491608,-0.416160941123962,0.860515952110291,0.681288719177246,-0.155398637056351,0.715329945087433,-0.587613880634308,-0.804071664810181,0.0904360190033913,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.801601529121399,-0.550374329090118,-0.233501866459847,0.364783316850662,-0.883516609668732,0.293822199106216,-0.583520650863647,-0.523498177528381,0.620848834514618,-0.812033832073212,-0.319456815719604,0.488414168357849,0.560331284999847,-0.197167843580246,0.804458677768707,0.546681344509125,-0.221680983901024,0.807463347911835,0.0923520997166634,-0.948987245559692,0.301486879587173,-0.201129660010338,-0.411518931388855,0.888931393623352,-0.928708910942078,-0.245197176933289,0.278169125318527,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.587613880634308,-0.804071664810181,0.0904360190033913,0.364783316850662,-0.883516609668732,0.293822199106216,0.293806612491608,-0.416160941123962,0.860515952110291,0.563132643699646,0.445763438940048,0.695827960968018,0.717245042324066,0.0185855161398649,0.696573138237,0.961548805236816,-0.0192979723215103,0.273955345153809,0.709949553012848,0.601409435272217,0.366440117359161,-0.937970280647278,0.291287869215012,-0.188050955533981, -0.949256777763367,0.266638487577438,-0.166779711842537,-0.713874757289886,0.186937421560287,-0.674860894680023,0.568327903747559,-0.132913276553154,0.811995983123779,-0.0958455428481102,-0.0575050786137581,0.993733763694763,-0.136431202292442,-0.35848480463028,0.923512399196625,0.161164596676826,-0.331503033638,0.929586827754974,0.714491784572601,0.142257153987885,0.685028791427612,0.890334188938141,-0.2436583340168,-0.384624063968658,0.942743897438049,-0.0672791972756386,-0.326661080121994,0.953069984912872,0.0484385639429092,0.298849850893021,-0.697896897792816,0.111968666315079,0.707391619682312,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.939527928829193,0.186541080474854,0.287210255861282,-0.877985596656799,0.347244709730148,0.329488188028336,0.320462375879288,0.819697320461273,0.474763184785843,0.272088974714279,0.83392196893692,0.480147629976273,0.432919770479202,0.554768323898315,0.710501611232758,0.543301939964294,0.448152214288712,0.709917306900024,0.406093060970306,0.667463958263397,0.624163687229156,0.807208120822906,-0.16038890182972,0.568058490753174,0.568327903747559,-0.132913276553154,0.811995983123779,0.714491784572601,0.142257153987885,0.685028791427612,0.871833384037018,0.0184005852788687,0.489456832408905,-0.939527928829193,0.186541080474854,0.287210255861282,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.775554835796356,-0.490125626325607,-0.397858709096909,-0.892664194107056,0.187903389334679,-0.409686326980591,-0.56893402338028,-0.144464939832687,-0.809594929218292,-0.543925106525421,-0.442455142736435,-0.713006973266602,-0.892664194107056,0.187903389334679,-0.409686326980591,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.681288719177246,-0.155398637056351,0.715329945087433,0.801601529121399,-0.550374329090118,-0.233501866459847,0.890334188938141,-0.2436583340168,-0.384624063968658,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.801601529121399,-0.550374329090118,-0.233501866459847, 0.890334188938141,-0.2436583340168,-0.384624063968658,0.801601529121399,-0.550374329090118,-0.233501866459847,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.47929310798645,-0.284916669130325,-0.830120861530304,0.928275108337402,-0.108704164624214,0.355652451515198,0.949140191078186,-0.201623901724815,0.241827890276909,0.76161140203476,-0.261901050806046,0.592752873897552,0.807208120822906,-0.16038890182972,0.568058490753174,0.406093060970306,0.667463958263397,0.624163687229156,0.563132643699646,0.445763438940048,0.695827960968018,0.709949553012848,0.601409435272217,0.366440117359161,0.380683273077011,0.860944807529449,0.337422966957092,0.320462375879288,0.819697320461273,0.474763184785843,0.543301939964294,0.448152214288712,0.709917306900024,0.717245042324066,0.0185855161398649,0.696573138237,0.563132643699646,0.445763438940048,0.695827960968018,0.406093060970306,0.667463958263397,0.624163687229156,0.543301939964294,0.448152214288712,0.709917306900024,0.432919770479202,0.554768323898315,0.710501611232758,0.538123428821564,-0.0776133164763451,0.839285016059875,0.717245042324066,0.0185855161398649,0.696573138237,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.538123428821564,-0.0776133164763451,0.839285016059875,0.432919770479202,0.554768323898315,0.710501611232758,-0.402506142854691,0.589897632598877,0.70000684261322,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.0218884665518999,0.60806405544281,0.793586194515228,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.402506142854691,0.589897632598877,0.70000684261322,-0.551313877105713,0.631630659103394,0.545064926147461,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.683505356311798,0.663009881973267,0.305349379777908,-0.551313877105713,0.631630659103394,0.545064926147461,-0.147527620196342,0.908096194267273,0.391914486885071,-0.258647561073303,0.909015476703644,0.326790869235992,-0.331648796796799,0.794523477554321,-0.508666396141052, 0.0982041954994202,0.744845330715179,-0.659970700740814,0.00497482251375914,0.164960786700249,-0.986287593841553,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.505583822727203,0.0150259397923946,-0.862646639347076,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.34263151884079,0.695380985736847,-0.631703197956085,0.632241547107697,0.646320283412933,-0.427247822284698,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.341541588306427,0.10033044219017,-0.934496164321899,0.71175479888916,-0.136520832777023,-0.689033508300781,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.70794689655304,-0.166302517056465,-0.686407029628754,-0.459000378847122,0.0631367489695549,-0.886189818382263,-0.805570960044861,0.0887086465954781,-0.585820972919464,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.938030481338501,-0.164544522762299,-0.304998099803925,0.820765018463135,-0.278661012649536,-0.4986911714077,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.459000378847122,0.0631367489695549,-0.886189818382263,0.00533884158357978,0.0413248725235462,-0.999131500720978,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.379301369190216,-0.56307464838028,-0.734218895435333,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.71175479888916,-0.136520832777023,-0.689033508300781,0.471586465835571,-0.672621011734009,-0.570251822471619,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.805570960044861,0.0887086465954781,-0.585820972919464, -0.459000378847122,0.0631367489695549,-0.886189818382263,0.820765018463135,-0.278661012649536,-0.4986911714077,0.938030481338501,-0.164544522762299,-0.304998099803925,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.433943748474121,-0.801411271095276,-0.411622196435928,0.985846102237701,-0.106943093240261,0.129114612936974,0.97103625535965,0.0917741134762764,-0.2206040173769,0.850343227386475,-0.422914385795593,-0.313145011663437,0.846594989299774,-0.529064953327179,0.0580276139080524,0.0982041954994202,0.744845330715179,-0.659970700740814,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.0896633565425873,0.986825108528137,-0.134672433137894,0.149676010012627,0.966882228851318,-0.20672644674778,0.380683273077011,0.860944807529449,0.337422966957092,0.709949553012848,0.601409435272217,0.366440117359161,0.785880386829376,0.614527404308319,-0.0689060613512993,0.462400853633881,0.884378015995026,0.0637255683541298,0.404174894094467,0.903538584709167,-0.142339900135994,0.632241547107697,0.646320283412933,-0.427247822284698,0.34263151884079,0.695380985736847,-0.631703197956085,0.26786082983017,0.938322722911835,-0.218634366989136,-0.652326703071594,-0.073212519288063,-0.754393696784973,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.379301369190216,-0.56307464838028,-0.734218895435333,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.282903432846069,-0.614905893802643,-0.736109018325806,0.471586465835571,-0.672621011734009,-0.570251822471619,0.642500996589661,-0.273710608482361,-0.715733826160431,0.383173555135727,-0.262150347232819,-0.885694801807404,0.433943748474121,-0.801411271095276,-0.411622196435928,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.846594989299774,-0.529064953327179,0.0580276139080524,0.850343227386475,-0.422914385795593,-0.313145011663437, -0.798132300376892,-0.595748007297516,0.0898284390568733,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.348949372768402,-0.852245092391968,0.389759749174118,0.645033359527588,-0.763978242874146,0.0164063423871994,0.085636705160141,-0.288859754800797,0.95353364944458,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.306766450405121,-0.118458941578865,0.944384336471558,0.441097766160965,0.233705207705498,0.866495609283447,0.390775859355927,0.856176912784576,0.338016718626022,-0.15803237259388,0.792331874370575,0.589267313480377,-0.395615994930267,-0.602470278739929,-0.693193674087524,0.709003627300262,-0.541708946228027,-0.451514393091202,0.415498226881027,-0.625033438205719,0.660828590393066,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.282899647951126,-0.764817118644714,-0.578811287879944,0.557026505470276,-0.731577336788177,-0.393085300922394,0.466174304485321,-0.668626964092255,0.579326808452606,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.68010026216507,-0.471441000699997,-0.561433076858521,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.445575803518295,0.0603601969778538,-0.89320707321167, -0.885131180286407,0.0417930334806442,-0.4634610414505,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.305622786283493,0.734605431556702,-0.605763673782349,0.462542772293091,0.739023745059967,-0.489793956279755,0.671855986118317,0.740681707859039,-0.000314049131702632,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.627128839492798,0.0574354380369186,-0.776795089244843,0.596383929252625,0.731881856918335,0.329659104347229,0.615696132183075,0.768994271755219,0.171947747468948,0.9074946641922,-0.352809637784958,-0.227988600730896,0.918069958686829,-0.187106743454933,0.3494833111763,0.638639688491821,0.766668796539307,0.0660171657800674,0.900666058063507,-0.271470785140991,0.339270144701004,0.9074946641922,-0.352809637784958,-0.227988600730896,0.615696132183075,0.768994271755219,0.171947747468948,0.390775859355927,0.856176912784576,0.338016718626022,0.441097766160965,0.233705207705498,0.866495609283447,0.812849104404449,-0.351107835769653,0.464757591485977,0.748181462287903,0.587628960609436,0.308085650205612,0.916947364807129,0.362371891736984,0.167015478014946,0.847357213497162,0.513431668281555,0.135549768805504,0.882211685180664,0.466362744569778,0.0648712962865829,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.847357213497162,0.513431668281555,0.135549768805504,0.729536890983582,0.676141858100891,0.102995507419109,0.755123436450958,0.652067601680756,0.0677972882986069,0.719103455543518,0.620088696479797,0.313656240701675,0.416522979736328,0.747589826583862,0.517318189144135,0.382025003433228,0.832321524620056,0.401618927717209,0.661795139312744,0.713703632354736,0.229465380311012,0.732339978218079,0.57999724149704,0.356765180826187,0.404268801212311,0.753554701805115,0.518384099006653,0.416522979736328,0.747589826583862,0.517318189144135,0.719103455543518,0.620088696479797,0.313656240701675,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.676983892917633,0.720325946807861,-0.15107399225235, -0.709426164627075,0.694045186042786,-0.1225391253829,-0.471274226903915,0.860716223716736,0.192531064152718,-0.508786559104919,0.827320158481598,0.238070502877235,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.508786559104919,0.827320158481598,0.238070502877235,-0.52653956413269,0.801656424999237,0.283024877309799,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.774571657180786,0.617025077342987,-0.138992056250572,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.789477050304413,0.597959935665131,-0.138455465435982,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.789477050304413,0.597959935665131,-0.138455465435982, -0.320632964372635,0.735152721405029,-0.597281336784363,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.704592347145081,0.645622909069061,-0.294483691453934,-0.320632964372635,0.735152721405029,-0.597281336784363,0.177267909049988,0.365930050611496,-0.91360342502594,0.546093285083771,0.623855233192444,-0.559094548225403,0.500399529933929,0.708592414855957,-0.497490793466568,0.139554411172867,0.707306206226349,-0.692995309829712,0.139554411172867,0.707306206226349,-0.692995309829712,0.500399529933929,0.708592414855957,-0.497490793466568,0.483161181211472,0.7082759141922,-0.514684855937958,0.143811240792274,0.67733633518219,-0.721480309963226,0.627380788326263,0.542527794837952,-0.558620572090149,0.926415085792542,0.366669327020645,-0.085490919649601,0.968909800052643,-0.119059138000011,-0.21688424050808,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.500399529933929,0.708592414855957,-0.497490793466568,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.483161181211472,0.7082759141922,-0.514684855937958,0.947628259658813,0.256551682949066,0.190215542912483,0.970879018306732,0.17382837831974,0.164856374263763,0.975513935089111,-0.202585577964783,0.0856255367398262,0.981737434864044,-0.183587238192558,0.0498724691569805,0.713916897773743,0.653736352920532,0.250901371240616,0.793782532215118,0.557114601135254,0.24399308860302,0.855198323726654,0.434896290302277,0.281959295272827,0.72310745716095,0.620889782905579,0.302673995494843,0.996930718421936,0.0329510122537613,0.0710170343518257,0.991389572620392,-0.125116944313049,0.0386327914893627,0.655400395393372,-0.538768291473389,0.52931934595108,0.814328134059906,-0.0162655059248209,0.580176770687103,0.738506376743317,0.594660043716431,0.317785710096359,0.878546118736267,0.378491014242172,0.291378289461136, 0.896252334117889,0.421274542808533,0.138778761029243,0.767313122749329,0.622622787952423,0.153530031442642,0.896252334117889,0.421274542808533,0.138778761029243,0.882211685180664,0.466362744569778,0.0648712962865829,0.755123436450958,0.652067601680756,0.0677972882986069,0.767313122749329,0.622622787952423,0.153530031442642,-0.144893556833267,0.857636988162994,0.493421375751495,-0.52653956413269,0.801656424999237,0.283024877309799,-0.508786559104919,0.827320158481598,0.238070502877235,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863,-0.128903239965439,0.870382308959961,0.475203812122345,-0.508786559104919,0.827320158481598,0.238070502877235,-0.471274226903915,0.860716223716736,0.192531064152718,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.713882029056549,0.360403180122375,0.60040158033371,-0.576912403106689,0.718079209327698,0.389274090528488,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.911553025245667,0.36151385307312,0.195905029773712,-0.909857094287872,0.391187280416489,0.138320609927177,-0.816486001014709,0.512708961963654,0.265480846166611,-0.660224080085754,0.688790798187256,0.299451798200607,-0.752071261405945,0.531812846660614,0.389312088489532,-0.752071261405945,0.531812846660614,0.389312088489532,-0.660224080085754,0.688790798187256,0.299451798200607,-0.563141465187073,0.729207098484039,0.388752728700638,-0.646896600723267,0.568207919597626,0.508590757846832,0.320559591054916,0.729658484458923,0.6040198802948,0.311181455850601,0.925608515739441,0.215441450476646,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.202111601829529,0.805501878261566,0.557061612606049,0.614538609981537,0.667141020298004,0.421028733253479,0.320559591054916,0.729658484458923,0.6040198802948,0.367227405309677,0.346865594387054,0.86303436756134,0.764663100242615,0.188213542103767,0.616332709789276, 0.520070433616638,0.75630134344101,0.396906822919846,0.522960782051086,0.842813670635223,-0.127189323306084,0.764615535736084,0.640312492847443,0.0732326954603195,0.941741049289703,0.116148002445698,0.315647602081299,0.413430035114288,0.428488910198212,0.803413271903992,0.941741049289703,0.116148002445698,0.315647602081299,0.996930718421936,0.0329510122537613,0.0710170343518257,0.910823285579681,0.270006626844406,0.312245815992355,0.602918326854706,0.515652477741241,0.608762681484222,0.229550704360008,0.575565576553345,0.784876227378845,0.413430035114288,0.428488910198212,0.803413271903992,0.910823285579681,0.270006626844406,0.312245815992355,0.152829229831696,-0.222570449113846,0.962863266468048,0.0511878095567226,-0.230872601270676,0.971636593341827,0.187374159693718,0.57430511713028,0.796909391880035,0.602918326854706,0.515652477741241,0.608762681484222,0.602918326854706,0.515652477741241,0.608762681484222,0.187374159693718,0.57430511713028,0.796909391880035,0.00418568449094892,0.628182590007782,0.778054714202881,0.229550704360008,0.575565576553345,0.784876227378845,-0.407288640737534,0.570921063423157,0.712857007980347,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.407288640737534,0.570921063423157,0.712857007980347,-0.659538865089417,0.541105389595032,0.521740794181824,-0.646896600723267,0.568207919597626,0.508590757846832,-0.402498841285706,0.624280869960785,0.669528245925903,-0.646896600723267,0.568207919597626,0.508590757846832,-0.659538865089417,0.541105389595032,0.521740794181824,-0.861413061618805,0.450139373540878,0.235249027609825,-0.752071261405945,0.531812846660614,0.389312088489532,0.522960782051086,0.842813670635223,-0.127189323306084,0.261382073163986,0.943598508834839,-0.203227162361145,0.505573332309723,0.856702566146851,0.102256514132023,0.764615535736084,0.640312492847443,0.0732326954603195,-0.33124178647995,0.767114698886871,0.549375951290131,-0.402498841285706,0.624280869960785,0.669528245925903,-0.646896600723267,0.568207919597626,0.508590757846832, -0.563141465187073,0.729207098484039,0.388752728700638,-0.699552893638611,0.686573624610901,0.19809702038765,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.802868485450745,0.579959869384766,0.138017445802689,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.246746554970741,-0.163683891296387,-0.95515638589859,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.397901207208633,0.642866194248199,-0.654520928859711,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.421845138072968,0.35173299908638,-0.835661768913269,0.383173555135727,-0.262150347232819,-0.885694801807404,0.642500996589661,-0.273710608482361,-0.715733826160431,0.633863806724548,0.397778630256653,-0.663316547870636,0.398143172264099,0.565787017345428,-0.722057580947876,0.390601873397827,0.504608035087585,-0.769935667514801,0.432219922542572,0.089619405567646,-0.897303879261017,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.605724632740021,0.555329561233521,-0.569830477237701,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.886820495128632,-0.356388479471207,-0.294171094894409,0.859436631202698,0.509184420108795,0.0458242334425449,0.605724632740021,0.555329561233521,-0.569830477237701,0.642500996589661,-0.273710608482361,-0.715733826160431,0.850343227386475,-0.422914385795593,-0.313145011663437,0.97103625535965,0.0917741134762764,-0.2206040173769,0.633863806724548,0.397778630256653,-0.663316547870636,0.654246509075165,0.624168276786804,0.427054405212402,0.599660396575928,0.629723131656647,0.493817895650864,0.970879018306732,0.17382837831974,0.164856374263763, 0.933142781257629,0.297380536794662,0.202013194561005,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.305637359619141,0.797389090061188,-0.520342588424683,0.525696158409119,0.742150247097015,-0.41576024889946,0.723603904247284,0.683222591876984,0.0980009809136391,0.906324923038483,0.41602036356926,-0.0741765573620796,0.627528429031372,0.574077785015106,-0.525968432426453,0.367227405309677,0.346865594387054,0.86303436756134,0.320559591054916,0.729658484458923,0.6040198802948,-0.202111601829529,0.805501878261566,0.557061612606049,-0.27060467004776,0.441340714693069,0.855565011501312,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.193036586046219,0.594731748104095,-0.780404388904572,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.909857094287872,0.391187280416489,0.138320609927177,-0.752071261405945,0.531812846660614,0.389312088489532,-0.861413061618805,0.450139373540878,0.235249027609825,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.911553025245667,0.36151385307312,0.195905029773712,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.664968252182007,0.74531364440918,0.0482159554958344,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.686884999275208,0.723168194293976,-0.0722270086407661,0.311181455850601,0.925608515739441,0.215441450476646,0.227211803197861,0.921236932277679,0.315748870372772,-0.127702474594116,0.976085126399994,0.175925895571709,-0.0790780931711197,0.992485880851746,0.0933722108602524,0.597852408885956,0.634572505950928,0.489785879850388, 0.780855357646942,0.547496914863586,0.30085226893425,0.505573332309723,0.856702566146851,0.102256514132023,0.227211803197861,0.921236932277679,0.315748870372772,0.826885938644409,0.48306405544281,0.287938833236694,0.732339978218079,0.57999724149704,0.356765180826187,0.719103455543518,0.620088696479797,0.313656240701675,0.796578645706177,0.576386570930481,0.182321041822433,0.796578645706177,0.576386570930481,0.182321041822433,0.719103455543518,0.620088696479797,0.313656240701675,0.661795139312744,0.713703632354736,0.229465380311012,0.703840851783752,0.696332156658173,0.140461936593056,0.819103598594666,0.554179012775421,0.148171901702881,0.748181462287903,0.587628960609436,0.308085650205612,0.665187358856201,-0.279087334871292,0.692557573318481,0.939882814884186,-0.341329634189606,0.010694270953536,-0.384443581104279,-0.766654908657074,-0.514240622520447,0.685397624969482,-0.694671988487244,-0.218313813209534,0.317059487104416,-0.547120809555054,0.774681925773621,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.644031703472137,0.764946818351746,0.00891846232116222,-0.66072803735733,0.731441617012024,-0.168616935610771,-0.640394568443298,0.754049122333527,-0.145961567759514,0.118139639496803,-0.728867173194885,0.67438542842865,0.910823285579681,0.270006626844406,0.312245815992355,0.807652294635773,0.443565875291824,0.388519138097763,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.807652294635773,0.443565875291824,0.388519138097763,0.762879073619843,0.502556324005127,0.406758666038513,0.914847433567047,-0.40378075838089,0.00391693273559213,0.993199586868286,-5.2900577429682e-006,0.1164241284132,-0.305622786283493,0.734605431556702,-0.605763673782349,0.121350355446339,0.714234948158264,-0.68930584192276,0.198126867413521,0.0765141919255257,-0.977185368537903,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.909857094287872,0.391187280416489,0.138320609927177, -0.957430243492126,0.286320626735687,0.0367132313549519,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.426684230566025,0.00725271692499518,-0.904371619224548,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979,-0.751902282238007,0.239434629678726,0.547067284584045,-0.802115023136139,0.324593335390091,0.033190730959177,-0.945271134376526,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.896252334117889,0.421274542808533,0.138778761029243,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977,0.422671288251877,0.150480911135674,0.882211685180664,0.466362744569778,0.0648712962865829,0.797426402568817,0.177674129605293,0.57666540145874,0.891313195228577,0.424902439117432,0.158173009753227,0.896252334117889,0.421274542808533,0.138778761029243,0.878546118736267,0.378491014242172,0.291378289461136,0.870848119258881,0.464649528264999,0.160388246178627,0.908547043800354,0.339474141597748,0.243515089154243,0.855198323726654,0.434896290302277,0.281959295272827,0.793782532215118,0.557114601135254,0.24399308860302,0.546093285083771,0.623855233192444,-0.559094548225403,0.809562027454376,0.57842743396759,-0.100154921412468,0.74566113948822,0.665992856025696,-0.021046232432127,0.500399529933929,0.708592414855957,-0.497490793466568,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.749007999897003,0.651602983474731,-0.120002493262291,-0.702043056488037,0.707515060901642,-0.0809816271066666,-0.717040240764618,0.690781652927399,-0.0931341797113419, -0.727224290370941,0.663318395614624,-0.176503553986549,-0.734271168708801,0.669210433959961,-0.114031746983528,-0.717040240764618,0.690781652927399,-0.0931341797113419,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.640394568443298,0.754049122333527,-0.145961567759514,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.602886259555817,0.797378957271576,-0.026737067848444,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.599858164787292,0.75833535194397,0.255142569541931,-0.471274226903915,0.860716223716736,0.192531064152718,-0.471274226903915,0.860716223716736,0.192531064152718,-0.599858164787292,0.75833535194397,0.255142569541931,-0.15803237259388,0.792331874370575,0.589267313480377,-0.13026924431324,0.905642747879028,0.403535783290863,0.661795139312744,0.713703632354736,0.229465380311012,0.382025003433228,0.832321524620056,0.401618927717209,0.390775859355927,0.856176912784576,0.338016718626022,0.748181462287903,0.587628960609436,0.308085650205612,0.703840851783752,0.696332156658173,0.140461936593056,0.661795139312744,0.713703632354736,0.229465380311012,0.748181462287903,0.587628960609436,0.308085650205612,0.819103598594666,0.554179012775421,0.148171901702881,0.755123436450958,0.652067601680756,0.0677972882986069,0.729536890983582,0.676141858100891,0.102995507419109,0.658155202865601,0.750174701213837,0.0637934505939484,0.638639688491821,0.766668796539307,0.0660171657800674,0.755123436450958,0.652067601680756,0.0677972882986069,0.638639688491821,0.766668796539307,0.0660171657800674,0.615696132183075,0.768994271755219,0.171947747468948,0.767313122749329,0.622622787952423,0.153530031442642,0.738506376743317,0.594660043716431,0.317785710096359,0.767313122749329,0.622622787952423,0.153530031442642, 0.615696132183075,0.768994271755219,0.171947747468948,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589,0.632348001003265,0.720907807350159,0.283598184585571,0.713916897773743,0.653736352920532,0.250901371240616,0.72310745716095,0.620889782905579,0.302673995494843,0.483161181211472,0.7082759141922,-0.514684855937958,0.711231529712677,0.702188611030579,-0.0328761637210846,0.671855986118317,0.740681707859039,-0.000314049131702632,0.462542772293091,0.739023745059967,-0.489793956279755,0.143811240792274,0.67733633518219,-0.721480309963226,0.483161181211472,0.7082759141922,-0.514684855937958,0.462542772293091,0.739023745059967,-0.489793956279755,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.678524672985077,0.663206458091736,-0.315850287675858,-0.300025343894959,0.704358756542206,-0.643322288990021,0.732339978218079,0.57999724149704,0.356765180826187,0.826885938644409,0.48306405544281,0.287938833236694,0.854411005973816,0.0699176639318466,0.514872193336487,0.764663100242615,0.188213542103767,0.616332709789276,0.404268801212311,0.753554701805115,0.518384099006653,0.732339978218079,0.57999724149704,0.356765180826187,0.764663100242615,0.188213542103767,0.616332709789276,0.367227405309677,0.346865594387054,0.86303436756134,-0.144893556833267,0.857636988162994,0.493421375751495,0.404268801212311,0.753554701805115,0.518384099006653,0.367227405309677,0.346865594387054,0.86303436756134,-0.27060467004776,0.441340714693069,0.855565011501312,-0.52653956413269,0.801656424999237,0.283024877309799,-0.713882029056549,0.360403180122375,0.60040158033371,-0.911553025245667,0.36151385307312,0.195905029773712,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.66440737247467,0.746931433677673,0.0256171077489853,-0.911553025245667,0.36151385307312,0.195905029773712,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.632999122142792,0.753636598587036,-0.177042424678802, -0.834402322769165,0.550801813602448,0.0197510607540607,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.350197345018387,0.671358823776245,-0.653176188468933,-0.721381545066834,0.602611720561981,-0.341273695230484,-0.842867016792297,-0.00614785309880972,-0.538086771965027,-0.426684230566025,0.00725271692499518,-0.904371619224548,-0.426684230566025,0.00725271692499518,-0.904371619224548,0.324593335390091,0.033190730959177,-0.945271134376526,0.177267909049988,0.365930050611496,-0.91360342502594,-0.350197345018387,0.671358823776245,-0.653176188468933,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.968909800052643,-0.119059138000011,-0.21688424050808,0.809562027454376,0.57842743396759,-0.100154921412468,0.546093285083771,0.623855233192444,-0.559094548225403,0.870848119258881,0.464649528264999,0.160388246178627,0.981737434864044,-0.183587238192558,0.0498724691569805,0.975513935089111,-0.202585577964783,0.0856255367398262,0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.592115879058838,-0.487801223993301,0.641442716121674,0.991389572620392,-0.125116944313049,0.0386327914893627,0.891313195228577,0.424902439117432,0.158173009753227,0.893702685832977,0.422671288251877,0.150480911135674,0.891313195228577,0.424902439117432,0.158173009753227,0.991389572620392,-0.125116944313049,0.0386327914893627,0.941741049289703,0.116148002445698,0.315647602081299,0.413176476955414,-0.602903485298157,0.682489991188049,-0.695957362651825,-0.547607123851776,0.464510262012482,-0.430106282234192,-0.644480228424072,-0.632181823253632,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.360958158969879,-0.844728171825409,-0.395149976015091, 0.595698297023773,-0.718034982681274,-0.359957337379456,0.450368106365204,-0.655529201030731,0.606176614761353,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.350197345018387,0.671358823776245,-0.653176188468933,0.177267909049988,0.365930050611496,-0.91360342502594,0.139554411172867,0.707306206226349,-0.692995309829712,-0.320632964372635,0.735152721405029,-0.597281336784363,-0.320632964372635,0.735152721405029,-0.597281336784363,0.139554411172867,0.707306206226349,-0.692995309829712,0.143811240792274,0.67733633518219,-0.721480309963226,-0.300025343894959,0.704358756542206,-0.643322288990021,-0.144893556833267,0.857636988162994,0.493421375751495,-0.128903239965439,0.870382308959961,0.475203812122345,0.416522979736328,0.747589826583862,0.517318189144135,0.404268801212311,0.753554701805115,0.518384099006653,-0.128903239965439,0.870382308959961,0.475203812122345,-0.13026924431324,0.905642747879028,0.403535783290863,0.382025003433228,0.832321524620056,0.401618927717209,0.416522979736328,0.747589826583862,0.517318189144135,-0.576912403106689,0.718079209327698,0.389274090528488,-0.202111601829529,0.805501878261566,0.557061612606049,-0.0790780931711197,0.992485880851746,0.0933722108602524,-0.392663925886154,0.918741226196289,-0.0415882430970669,0.187374159693718,0.57430511713028,0.796909391880035,-0.407288640737534,0.570921063423157,0.712857007980347,-0.402498841285706,0.624280869960785,0.669528245925903,0.00418568449094892,0.628182590007782,0.778054714202881,-0.33124178647995,0.767114698886871,0.549375951290131,0.0206130910664797,0.755090355873108,0.655296623706818,0.00418568449094892,0.628182590007782,0.778054714202881,-0.402498841285706,0.624280869960785,0.669528245925903,-0.272203058004379,0.658502340316772,-0.701626777648926,0.12256808578968,0.664539575576782,-0.737132430076599,0.180026173591614,0.22968553006649,-0.956470131874084,-0.421845138072968,0.35173299908638,-0.835661768913269,-0.421845138072968,0.35173299908638,-0.835661768913269,0.180026173591614,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481, -0.397901207208633,0.642866194248199,-0.654520928859711,-0.713882029056549,0.360403180122375,0.60040158033371,-0.27060467004776,0.441340714693069,0.855565011501312,-0.202111601829529,0.805501878261566,0.557061612606049,-0.576912403106689,0.718079209327698,0.389274090528488,0.128622680902481,0.604616940021515,-0.786062717437744,0.178336277604103,0.738516449928284,-0.650222778320313,0.525696158409119,0.742150247097015,-0.41576024889946,0.627528429031372,0.574077785015106,-0.525968432426453,-0.127702474594116,0.976085126399994,0.175925895571709,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.0790780931711197,0.992485880851746,0.0933722108602524,0.330185920000076,-0.571054816246033,0.751580774784088,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786,0.0794514417648315,0.574801087379456,-0.814426898956299,0.627380788326263,0.542527794837952,-0.558620572090149,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.0525061227381229,0.0318809561431408,-0.998111546039581,-0.15803237259388,0.792331874370575,0.589267313480377,0.390775859355927,0.856176912784576,0.338016718626022,0.382025003433228,0.832321524620056,0.401618927717209,-0.13026924431324,0.905642747879028,0.403535783290863,-0.300025343894959,0.704358756542206,-0.643322288990021,0.143811240792274,0.67733633518219,-0.721480309963226,0.121350355446339,0.714234948158264,-0.68930584192276,-0.305622786283493,0.734605431556702,-0.605763673782349,-0.144893556833267,0.857636988162994,0.493421375751495,-0.27060467004776,0.441340714693069,0.855565011501312,-0.713882029056549,0.360403180122375,0.60040158033371,-0.52653956413269,0.801656424999237,0.283024877309799,0.177267909049988,0.365930050611496,-0.91360342502594,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.674115300178528,-0.0423769503831863,-0.737409472465515,0.546093285083771,0.623855233192444,-0.559094548225403,0.198126867413521,0.0765141919255257,-0.977185368537903, 0.648241341114044,-0.506932139396667,-0.568157494068146,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.147367149591446,-0.401798576116562,-0.903792500495911,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.312811404466629,-0.918802380561829,-0.240730464458466,0.248996675014496,-0.917850255966187,0.309114098548889,-0.32362487912178,-0.91464102268219,0.242278203368187,0.671025335788727,-0.589844524860382,-0.449230968952179,0.412575602531433,-0.667341530323029,0.62002956867218,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.773792386054993,-0.604486167430878,-0.189319148659706,0.195960283279419,-0.584128737449646,-0.787650465965271,0.724370837211609,-0.668023765087128,0.170385256409645,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.349896669387817,-0.784230947494507,-0.512400388717651,0.437470436096191,-0.700090229511261,0.564352095127106,-0.581261277198792,-0.682450115680695,0.443167269229889,0.326672673225403,-0.732156872749329,0.597688257694244,-0.308205217123032,-0.725507915019989,-0.615343630313873,0.147367149591446,-0.401798576116562,-0.903792500495911,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.671025335788727,-0.589844524860382,-0.449230968952179,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.459699749946594,-0.614600539207459,-0.641047835350037,-0.596454918384552,-0.699760973453522,0.393161654472351,-0.303018301725388,-0.938679337501526,0.164502337574959,0.412575602531433,-0.667341530323029,0.62002956867218,0.918069958686829,-0.187106743454933,0.3494833111763,-0.303018301725388,-0.938679337501526,0.164502337574959,-0.596454918384552,-0.699760973453522,0.393161654472351,0.918069958686829,-0.187106743454933,0.3494833111763,0.412575602531433,-0.667341530323029,0.62002956867218, 0.671025335788727,-0.589844524860382,-0.449230968952179,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.0517404824495316,-0.448792159557343,-0.892137050628662,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.0855752229690552,-0.285937607288361,-0.954419493675232,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.414378970861435,-0.48013111948967,0.773152112960815,0.739399373531342,-0.377425998449326,0.557528674602509,-0.311763912439346,-0.736566066741943,0.600228011608124,-0.414378970861435,-0.48013111948967,0.773152112960815,0.474026173353195,-0.576446056365967,0.665589272975922,0.627128839492798,0.0574354380369186,-0.776795089244843,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.628591895103455,-0.444956034421921,-0.637876510620117,0.628591895103455,-0.444956034421921,-0.637876510620117,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.0855752229690552,-0.285937607288361,-0.954419493675232,0.627128839492798,0.0574354380369186,-0.776795089244843,-0.773792386054993,-0.604486167430878,-0.189319148659706,-0.180837586522102,-0.611773490905762,0.770085096359253,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.518468379974365,-0.848432958126068,0.106546200811863,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.180837586522102,-0.611773490905762,0.770085096359253,0.724370837211609,-0.668023765087128,0.170385256409645,0.106877602636814,-0.900658130645752,-0.421179473400116,0.518468379974365,-0.848432958126068,0.106546200811863,0.724370837211609,-0.668023765087128,0.170385256409645,0.195960283279419,-0.584128737449646,-0.787650465965271,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.106877602636814,-0.900658130645752,-0.421179473400116,0.195960283279419,-0.584128737449646,-0.787650465965271, -0.773792386054993,-0.604486167430878,-0.189319148659706,0.349896669387817,-0.784230947494507,-0.512400388717651,0.149650126695633,-0.977229058742523,-0.150426715612412,0.259535193443298,-0.932749152183533,0.250240802764893,0.437470436096191,-0.700090229511261,0.564352095127106,-0.72308760881424,-0.507770538330078,-0.468309044837952,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.149650126695633,-0.977229058742523,-0.150426715612412,0.349896669387817,-0.784230947494507,-0.512400388717651,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.72308760881424,-0.507770538330078,-0.468309044837952,0.437470436096191,-0.700090229511261,0.564352095127106,0.259535193443298,-0.932749152183533,0.250240802764893,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.581261277198792,-0.682450115680695,0.443167269229889,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.551329076290131,-0.707401514053345,-0.4422886967659,-0.63175368309021,-0.695993006229401,0.341293066740036,-0.94776064157486,-0.269029259681702,-0.171385675668716,0.248996675014496,-0.917850255966187,0.309114098548889,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.63175368309021,-0.695993006229401,0.341293066740036,0.438560783863068,-0.682490229606628,0.584697782993317,0.50744092464447,-0.861680567264557,0.00320711638778448,0.248996675014496,-0.917850255966187,0.309114098548889,0.438560783863068,-0.682490229606628,0.584697782993317,0.663442254066467,-0.730678737163544,-0.161099433898926,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.50744092464447,-0.861680567264557,0.00320711638778448,0.663442254066467,-0.730678737163544,-0.161099433898926,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.810118317604065,-0.284595668315887,-0.512555956840515,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.165543153882027,-0.540197908878326,-0.825094938278198,-0.551329076290131,-0.707401514053345,-0.4422886967659, -0.445575803518295,0.0603601969778538,-0.89320707321167,0.198126867413521,0.0765141919255257,-0.977185368537903,0.147367149591446,-0.401798576116562,-0.903792500495911,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.445575803518295,0.0603601969778538,-0.89320707321167,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.311763912439346,-0.736566066741943,0.600228011608124,0.739399373531342,-0.377425998449326,0.557528674602509,0.964107513427734,-0.248898878693581,-0.0924450159072876,-0.259815841913223,-0.928046464920044,-0.266881018877029,0.149650126695633,-0.977229058742523,-0.150426715612412,0.518468379974365,-0.848432958126068,0.106546200811863,0.106877602636814,-0.900658130645752,-0.421179473400116,-0.370716333389282,-0.925935029983521,-0.0722066015005112,-0.311763912439346,-0.736566066741943,0.600228011608124,0.518468379974365,-0.848432958126068,0.106546200811863,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.0959864854812622,-0.913586139678955,0.395154267549515,-0.464242279529572,-0.87283843755722,-0.150440096855164,0.50744092464447,-0.861680567264557,0.00320711638778448,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.106877602636814,-0.900658130645752,-0.421179473400116,0.262460827827454,-0.84521484375,0.465538591146469,0.663442254066467,-0.730678737163544,-0.161099433898926,0.438560783863068,-0.682490229606628,0.584697782993317,-0.63175368309021,-0.695993006229401,0.341293066740036,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.326672673225403,-0.732156872749329,0.597688257694244,0.635097622871399,-0.770463764667511,-0.0551052875816822,0.648241341114044,-0.506932139396667,-0.568157494068146,0.262460827827454,-0.84521484375,0.465538591146469,0.262460827827454,-0.84521484375,0.465538591146469, 0.33387279510498,-0.734721720218658,0.590519189834595,0.323404222726822,-0.738465547561646,0.591674208641052,0.326672673225403,-0.732156872749329,0.597688257694244,0.326672673225403,-0.732156872749329,0.597688257694244,0.323404222726822,-0.738465547561646,0.591674208641052,-0.620602905750275,-0.69584184885025,-0.361463844776154,-0.308205217123032,-0.725507915019989,-0.615343630313873,-0.542883276939392,-0.826726615428925,-0.147651329636574,0.0872491523623466,-0.891694486141205,-0.444149285554886,0.33387279510498,-0.734721720218658,0.590519189834595,0.262460827827454,-0.84521484375,0.465538591146469,0.106877602636814,-0.900658130645752,-0.421179473400116,0.33387279510498,-0.734721720218658,0.590519189834595,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.348949372768402,-0.852245092391968,0.389759749174118,0.323404222726822,-0.738465547561646,0.591674208641052,0.33387279510498,-0.734721720218658,0.590519189834595,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.798132300376892,-0.595748007297516,0.0898284390568733,0.301147431135178,-0.680567443370819,0.667935729026794,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.478905022144318,-0.688271999359131,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,0.296216726303101,-0.720275163650513,0.627263367176056,-0.75092750787735,-0.519762337207794,0.407375782728195,-0.420935481786728,-0.595206379890442,-0.684501767158508,0.593356251716614,-0.709651470184326,-0.379898846149445,0.310219675302505,-0.605204224586487,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.338333308696747,-0.796955823898315,-0.500391840934753,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.181093856692314,-0.00969438999891281,0.983418047428131,0.261419922113419,-0.95404326915741,0.146496027708054,-0.306935518980026,-0.919691741466522,0.244862422347069, 0.191650301218033,-0.911473155021667,0.363987505435944,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.40076744556427,-0.847734689712524,0.347464174032211,0.118260912597179,-0.832547545433044,0.541182935237885,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.362296253442764,-0.902348458766937,0.233470991253853,0.230480119585991,-0.946770370006561,0.224732518196106,0.334644615650177,-0.86758428812027,-0.367845684289932,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228,0.699605226516724,0.192425221204758,-0.974552154541016,0.114980839192867,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.314595818519592,-0.93869549036026,-0.140997156500816,0.148850917816162,-0.924228250980377,0.351632624864578,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.180372029542923,-0.916134834289551,0.357998490333557,0.312811404466629,-0.918802380561829,-0.240730464458466,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.362296253442764,-0.902348458766937,0.233470991253853,0.900666058063507,-0.271470785140991,0.339270144701004,0.956566870212555,-0.244721978902817,-0.15840108692646,0.191650301218033,-0.911473155021667,0.363987505435944,0.262365132570267,-0.963967680931091,-0.0439422130584717,-0.211911574006081,-0.951958775520325,-0.221061065793037,-0.395999372005463,-0.883323132991791,0.250847965478897,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.339713484048843,-0.93720954656601,0.0789492130279541,0.230480119585991,-0.946770370006561,0.224732518196106,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.40076744556427,-0.847734689712524,0.347464174032211, 0.665187358856201,-0.279087334871292,0.692557573318481,0.812849104404449,-0.351107835769653,0.464757591485977,-0.295633107423782,-0.949930131435394,-0.10116221010685,0.192425221204758,-0.974552154541016,0.114980839192867,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.958362400531769,-0.256493717432022,0.125509053468704,0.148850917816162,-0.924228250980377,0.351632624864578,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.180372029542923,-0.916134834289551,0.357998490333557,0.326997041702271,-0.921505868434906,-0.209522947669029,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.931363523006439,-0.361005514860153,-0.0472965724766254,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.191650301218033,-0.911473155021667,0.363987505435944,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.192425221204758,-0.974552154541016,0.114980839192867,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,0.124663800001144,-0.874086201190948,0.469502121210098,0.085636705160141,-0.288859754800797,0.95353364944458,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.826135456562042,-0.335000514984131,0.453072637319565,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.480840772390366,-0.73974883556366,-0.470705687999725,-0.295633107423782,-0.949930131435394,-0.10116221010685,0.261419922113419,-0.95404326915741,0.146496027708054,0.645033359527588,-0.763978242874146,0.0164063423871994,0.261419922113419,-0.95404326915741,0.146496027708054,-0.181093856692314,-0.00969438999891281,0.983418047428131, 0.085636705160141,-0.288859754800797,0.95353364944458,0.645033359527588,-0.763978242874146,0.0164063423871994,0.191650301218033,-0.911473155021667,0.363987505435944,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.722061336040497,-0.559728622436523,0.406609505414963,0.415498226881027,-0.625033438205719,0.660828590393066,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.722061336040497,-0.559728622436523,0.406609505414963,-0.395999372005463,-0.883323132991791,0.250847965478897,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.709003627300262,-0.541708946228027,-0.451514393091202,-0.395615994930267,-0.602470278739929,-0.693193674087524,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.389462053775787,-0.886311709880829,-0.250541061162949,0.191650301218033,-0.911473155021667,0.363987505435944,0.415498226881027,-0.625033438205719,0.660828590393066,0.709003627300262,-0.541708946228027,-0.451514393091202,0.230480119585991,-0.946770370006561,0.224732518196106,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.705482065677643,-0.662965536117554,0.250542938709259,0.466174304485321,-0.668626964092255,0.579326808452606,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.705482065677643,-0.662965536117554,0.250542938709259,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.557026505470276,-0.731577336788177,-0.393085300922394,-0.282899647951126,-0.764817118644714,-0.578811287879944,-0.112518116831779,-0.874383687973022,-0.47200945019722,0.334644615650177,-0.86758428812027,-0.367845684289932,0.230480119585991,-0.946770370006561,0.224732518196106,0.466174304485321,-0.668626964092255,0.579326808452606,0.557026505470276,-0.731577336788177,-0.393085300922394,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.666895866394043,-0.560438930988312,0.491078555583954,-0.339781731367111,-0.868737757205963,0.360337555408478, -0.211911574006081,-0.951958775520325,-0.221061065793037,0.685397624969482,-0.694671988487244,-0.218313813209534,-0.384443581104279,-0.766654908657074,-0.514240622520447,-0.211911574006081,-0.951958775520325,-0.221061065793037,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.317059487104416,-0.547120809555054,0.774681925773621,0.685397624969482,-0.694671988487244,-0.218313813209534,0.262365132570267,-0.963967680931091,-0.0439422130584717,0.118260912597179,-0.832547545433044,0.541182935237885,0.317059487104416,-0.547120809555054,0.774681925773621,0.118260912597179,-0.832547545433044,0.541182935237885,-0.339781731367111,-0.868737757205963,0.360337555408478,-0.666895866394043,-0.560438930988312,0.491078555583954,0.610170483589172,-0.773055613040924,0.17342720925808,0.812849104404449,-0.351107835769653,0.464757591485977,0.441097766160965,0.233705207705498,0.866495609283447,0.343847304582596,-0.196072638034821,0.918327033519745,0.441097766160965,0.233705207705498,0.866495609283447,-0.306766450405121,-0.118458941578865,0.944384336471558,-0.545982420444489,-0.58450835943222,0.600210964679718,0.343847304582596,-0.196072638034821,0.918327033519745,-0.207811191678047,-0.962575137615204,-0.173964604735374,-0.314526081085205,-0.770808577537537,-0.554010331630707,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.306766450405121,-0.118458941578865,0.944384336471558,0.610170483589172,-0.773055613040924,0.17342720925808,-0.314526081085205,-0.770808577537537,-0.554010331630707,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.812849104404449,-0.351107835769653,0.464757591485977,0.712531208992004,-0.546411454677582,-0.440152049064636,0.956566870212555,-0.244721978902817,-0.15840108692646,0.810173988342285,-0.314327269792557,0.494789332151413,0.413176476955414,-0.602903485298157,0.682489991188049,0.810173988342285,-0.314327269792557,0.494789332151413,-0.306935518980026,-0.919691741466522,0.244862422347069,-0.695957362651825,-0.547607123851776,0.464510262012482,0.413176476955414,-0.602903485298157,0.682489991188049, -0.306935518980026,-0.919691741466522,0.244862422347069,-0.201402932405472,-0.92625367641449,-0.318576455116272,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.695957362651825,-0.547607123851776,0.464510262012482,0.712531208992004,-0.546411454677582,-0.440152049064636,-0.430106282234192,-0.644480228424072,-0.632181823253632,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.956566870212555,-0.244721978902817,-0.15840108692646,-0.668817758560181,-0.562513589859009,0.486067175865173,0.450368106365204,-0.655529201030731,0.606176614761353,0.900666058063507,-0.271470785140991,0.339270144701004,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.360958158969879,-0.844728171825409,-0.395149976015091,-0.668817758560181,-0.562513589859009,0.486067175865173,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.9074946641922,-0.352809637784958,-0.227988600730896,0.595698297023773,-0.718034982681274,-0.359957337379456,-0.360958158969879,-0.844728171825409,-0.395149976015091,0.595698297023773,-0.718034982681274,-0.359957337379456,0.9074946641922,-0.352809637784958,-0.227988600730896,0.900666058063507,-0.271470785140991,0.339270144701004,0.450368106365204,-0.655529201030731,0.606176614761353,0.330185920000076,-0.571054816246033,0.751580774784088,0.717249751091003,-0.62588095664978,-0.306309938430786,0.939882814884186,-0.341329634189606,0.010694270953536,0.665187358856201,-0.279087334871292,0.692557573318481,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.705251336097717,-0.583878993988037,0.402126729488373,0.330185920000076,-0.571054816246033,0.751580774784088,0.665187358856201,-0.279087334871292,0.692557573318481,-0.705251336097717,-0.583878993988037,0.402126729488373,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.207801997661591,-0.930255532264709,-0.302395343780518,-0.391103744506836,-0.641536116600037,-0.659900963306427,0.717249751091003,-0.62588095664978,-0.306309938430786, -0.391103744506836,-0.641536116600037,-0.659900963306427,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.939882814884186,-0.341329634189606,0.010694270953536,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.623616337776184,-0.765475332736969,-0.158588007092476,-0.970349133014679,-0.239411488175392,0.0332369618117809,0.192425221204758,-0.974552154541016,0.114980839192867,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.192425221204758,-0.974552154541016,0.114980839192867,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.0837006717920303,-0.567485928535461,0.819117784500122,0.668955624103546,-0.737108647823334,-0.0957559272646904,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.478905022144318,-0.688271999359131,-0.544914305210114,0.598684668540955,-0.729470372200012,-0.330831676721573,-0.478905022144318,-0.688271999359131,-0.544914305210114,-0.863033890724182,-0.335786253213882,-0.377385854721069,0.314595818519592,-0.93869549036026,-0.140997156500816,0.301147431135178,-0.680567443370819,0.667935729026794,0.124663800001144,-0.874086201190948,0.469502121210098,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.691426277160645,-0.534520924091339,0.486021667718887,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.75092750787735,-0.519762337207794,0.407375782728195,0.593356251716614,-0.709651470184326,-0.379898846149445,-0.420935481786728,-0.595206379890442,-0.684501767158508,-0.794416427612305,-0.305552929639816,-0.524919033050537,0.326997041702271,-0.921505868434906,-0.209522947669029,0.148850917816162,-0.924228250980377,0.351632624864578,0.296216726303101,-0.720275163650513,0.627263367176056, 0.593356251716614,-0.709651470184326,-0.379898846149445,0.326997041702271,-0.921505868434906,-0.209522947669029,-0.75092750787735,-0.519762337207794,0.407375782728195,0.296216726303101,-0.720275163650513,0.627263367176056,0.148850917816162,-0.924228250980377,0.351632624864578,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.69564962387085,-0.635027050971985,0.335875362157822,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.312811404466629,-0.918802380561829,-0.240730464458466,0.522674977779388,-0.842709720134735,-0.129039421677589,-0.338333308696747,-0.796955823898315,-0.500391840934753,-0.68010026216507,-0.471441000699997,-0.561433076858521,0.522674977779388,-0.842709720134735,-0.129039421677589,0.312811404466629,-0.918802380561829,-0.240730464458466,0.180372029542923,-0.916134834289551,0.357998490333557,0.310219675302505,-0.605204224586487,0.733138203620911,-0.69564962387085,-0.635027050971985,0.335875362157822,0.310219675302505,-0.605204224586487,0.733138203620911,0.180372029542923,-0.916134834289551,0.357998490333557,-0.931363523006439,-0.361005514860153,-0.0472965724766254,0.259535193443298,-0.932749152183533,0.250240802764893,-0.303018301725388,-0.938679337501526,0.164502337574959,-0.128298670053482,-0.92551976442337,-0.356304109096527,0.334644615650177,-0.86758428812027,-0.367845684289932,0.918069958686829,-0.187106743454933,0.3494833111763,0.9074946641922,-0.352809637784958,-0.227988600730896,-0.128298670053482,-0.92551976442337,-0.356304109096527,-0.303018301725388,-0.938679337501526,0.164502337574959,0.956566870212555,-0.244721978902817,-0.15840108692646,0.900666058063507,-0.271470785140991,0.339270144701004,0.638639688491821,0.766668796539307,0.0660171657800674,0.658155202865601,0.750174701213837,0.0637934505939484,-0.181093856692314,-0.00969438999891281,0.983418047428131,-0.15803237259388,0.792331874370575,0.589267313480377,-0.599858164787292,0.75833535194397,0.255142569541931, -0.814851105213165,-0.0293110944330692,0.578928768634796,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.599858164787292,0.75833535194397,0.255142569541931,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.650463998317719,0.74002069234848,-0.171072840690613,-0.863033890724182,-0.335786253213882,-0.377385854721069,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.816486001014709,0.512708961963654,0.265480846166611,-0.909857094287872,0.391187280416489,0.138320609927177,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.968974888324738,0.149660646915436,0.196696102619171,-0.660224080085754,0.688790798187256,0.299451798200607,-0.816486001014709,0.512708961963654,0.265480846166611,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.33124178647995,0.767114698886871,0.549375951290131,-0.563141465187073,0.729207098484039,0.388752728700638,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.00761284260079265,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,-0.00761284260079265,0.965830504894257,-0.259062647819519,-0.049139030277729,0.993503928184509,-0.10264165699482,0.505573332309723,0.856702566146851,0.102256514132023,0.413430035114288,0.428488910198212,0.803413271903992,0.158631011843681,0.588066816329956,0.793103754520416,0.520070433616638,0.75630134344101,0.396906822919846,0.941741049289703,0.116148002445698,0.315647602081299,0.0206130910664797,0.755090355873108,0.655296623706818,0.158631011843681,0.588066816329956,0.793103754520416,0.229550704360008,0.575565576553345,0.784876227378845,0.00418568449094892,0.628182590007782,0.778054714202881, 0.261382073163986,0.943598508834839,-0.203227162361145,0.522960782051086,0.842813670635223,-0.127189323306084,0.158631011843681,0.588066816329956,0.793103754520416,0.0206130910664797,0.755090355873108,0.655296623706818,-0.00761284260079265,0.965830504894257,-0.259062647819519,0.261382073163986,0.943598508834839,-0.203227162361145,0.0206130910664797,0.755090355873108,0.655296623706818,-0.33124178647995,0.767114698886871,0.549375951290131,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.00761284260079265,0.965830504894257,-0.259062647819519,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.049139030277729,0.993503928184509,-0.10264165699482,0.980522811412811,0.123100526630878,0.153040006756783,0.894985616207123,0.383079379796982,0.228584766387939,0.780855357646942,0.547496914863586,0.30085226893425,0.962031662464142,0.166659101843834,0.216147840023041,0.980522811412811,0.123100526630878,0.153040006756783,0.941741049289703,0.116148002445698,0.315647602081299,0.764615535736084,0.640312492847443,0.0732326954603195,0.894985616207123,0.383079379796982,0.228584766387939,0.916947364807129,0.362371891736984,0.167015478014946,0.826885938644409,0.48306405544281,0.287938833236694,0.796578645706177,0.576386570930481,0.182321041822433,0.847357213497162,0.513431668281555,0.135549768805504,0.703840851783752,0.696332156658173,0.140461936593056,0.729536890983582,0.676141858100891,0.102995507419109,0.847357213497162,0.513431668281555,0.135549768805504,0.796578645706177,0.576386570930481,0.182321041822433,0.819103598594666,0.554179012775421,0.148171901702881,0.658155202865601,0.750174701213837,0.0637934505939484, 0.729536890983582,0.676141858100891,0.102995507419109,0.703840851783752,0.696332156658173,0.140461936593056,0.764663100242615,0.188213542103767,0.616332709789276,0.854411005973816,0.0699176639318466,0.514872193336487,0.597852408885956,0.634572505950928,0.489785879850388,0.614538609981537,0.667141020298004,0.421028733253479,0.916947364807129,0.362371891736984,0.167015478014946,0.893702685832977,0.422671288251877,0.150480911135674,0.941741049289703,0.116148002445698,0.315647602081299,0.980522811412811,0.123100526630878,0.153040006756783,0.780855357646942,0.547496914863586,0.30085226893425,0.597852408885956,0.634572505950928,0.489785879850388,0.854411005973816,0.0699176639318466,0.514872193336487,0.962031662464142,0.166659101843834,0.216147840023041,0.227211803197861,0.921236932277679,0.315748870372772,0.311181455850601,0.925608515739441,0.215441450476646,0.614538609981537,0.667141020298004,0.421028733253479,0.597852408885956,0.634572505950928,0.489785879850388,0.227211803197861,0.921236932277679,0.315748870372772,0.505573332309723,0.856702566146851,0.102256514132023,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.127702474594116,0.976085126399994,0.175925895571709,-0.127702474594116,0.976085126399994,0.175925895571709,-0.049139030277729,0.993503928184509,-0.10264165699482,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.303004384040833,0.934939086437225,-0.184599980711937,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.410511583089828,0.907221853733063,0.0918080508708954,0.826885938644409,0.48306405544281,0.287938833236694,0.916947364807129,0.362371891736984,0.167015478014946,0.962031662464142,0.166659101843834,0.216147840023041,0.854411005973816,0.0699176639318466,0.514872193336487,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.470422893762589,0.855190873146057,-0.217602774500847,-0.64732962846756,0.721940577030182,-0.244471192359924, -0.905105233192444,0.409709483385086,-0.113677680492401,-0.686884999275208,0.723168194293976,-0.0722270086407661,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.632999122142792,0.753636598587036,-0.177042424678802,-0.905105233192444,0.409709483385086,-0.113677680492401,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.676983892917633,0.720325946807861,-0.15107399225235,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.958362400531769,-0.256493717432022,0.125509053468704,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.794416427612305,-0.305552929639816,-0.524919033050537,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.694885432720184,0.706956088542938,-0.131709337234497,-0.719631135463715,0.672992944717407,-0.170913591980934,-0.727224290370941,0.663318395614624,-0.176503553986549,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.749487936496735,0.64631062746048,-0.143354147672653,-0.745954036712646,0.638815999031067,-0.188326075673103,-0.712907791137695,0.682124972343445,-0.162689983844757,-0.709426164627075,0.694045186042786,-0.1225391253829,-0.794416427612305,-0.305552929639816,-0.524919033050537, -0.745954036712646,0.638815999031067,-0.188326075673103,-0.733190715312958,0.653582453727722,-0.187780037522316,-0.931363523006439,-0.361005514860153,-0.0472965724766254,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.816486001014709,0.512708961963654,0.265480846166611,-0.968974888324738,0.149660646915436,0.196696102619171,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.258335679769516,0.945306420326233,-0.199144259095192,-0.563141465187073,0.729207098484039,0.388752728700638,-0.660224080085754,0.688790798187256,0.299451798200607,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.669141829013824,0.742036163806915,-0.0403926707804203,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.667403042316437,0.744478642940521,-0.0180177688598633,-0.63100528717041,0.719355642795563,-0.290447652339935,-0.600557804107666,0.788931846618652,-0.13006503880024,-0.864171028137207,0.408056378364563,-0.294445961713791,-0.968974888324738,0.149660646915436,0.196696102619171,-0.834402322769165,0.550801813602448,0.0197510607540607,0.658155202865601,0.750174701213837,0.0637934505939484,0.819103598594666,0.554179012775421,0.148171901702881,0.810173988342285,-0.314327269792557,0.494789332151413,0.956566870212555,-0.244721978902817,-0.15840108692646,-0.752022266387939,0.649503409862518,-0.112284816801548,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.785715341567993,0.180996224284172,0.591516494750977, -0.699552893638611,0.686573624610901,0.19809702038765,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699552893638611,0.686573624610901,0.19809702038765,-0.802868485450745,0.579959869384766,0.138017445802689,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.305637359619141,0.797389090061188,-0.520342588424683,-0.633913338184357,0.759061396121979,-0.148255288600922,-0.699533343315125,0.693202495574951,-0.173561066389084,-0.397901207208633,0.642866194248199,-0.654520928859711,-0.397901207208633,0.642866194248199,-0.654520928859711,0.154303297400475,0.424244195222855,-0.892304539680481,0.133048385381699,0.622710466384888,-0.771057546138763,-0.305637359619141,0.797389090061188,-0.520342588424683,0.133048385381699,0.622710466384888,-0.771057546138763,0.154303297400475,0.424244195222855,-0.892304539680481,0.15365432202816,0.571211695671082,-0.806292474269867,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,0.160101726651192,0.546482443809509,-0.822024524211884,0.192081093788147,0.0805686637759209,-0.978066265583038,0.324593335390091,0.033190730959177,-0.945271134376526,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.785715341567993,0.180996224284172,0.591516494750977,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.699552893638611,0.686573624610901,0.19809702038765,-0.785715341567993,0.180996224284172,0.591516494750977,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.802868485450745,0.579959869384766,0.138017445802689,0.72310745716095,0.620889782905579,0.302673995494843,0.738506376743317,0.594660043716431,0.317785710096359,0.596383929252625,0.731881856918335,0.329659104347229,0.613771736621857,0.718874037265778,0.326349973678589,0.878546118736267,0.378491014242172,0.291378289461136,0.738506376743317,0.594660043716431,0.317785710096359,0.72310745716095,0.620889782905579,0.302673995494843,0.855198323726654,0.434896290302277,0.281959295272827, 0.908547043800354,0.339474141597748,0.243515089154243,0.797426402568817,0.177674129605293,0.57666540145874,0.878546118736267,0.378491014242172,0.291378289461136,0.855198323726654,0.434896290302277,0.281959295272827,0.797426402568817,0.177674129605293,0.57666540145874,0.908547043800354,0.339474141597748,0.243515089154243,0.975513935089111,-0.202585577964783,0.0856255367398262,0.543871879577637,-0.524204134941101,0.655296385288239,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.970879018306732,0.17382837831974,0.164856374263763,0.599660396575928,0.629723131656647,0.493817895650864,0.814328134059906,-0.0162655059248209,0.580176770687103,0.807652294635773,0.443565875291824,0.388519138097763,0.910823285579681,0.270006626844406,0.312245815992355,0.996930718421936,0.0329510122537613,0.0710170343518257,0.178336277604103,0.738516449928284,-0.650222778320313,0.390601873397827,0.504608035087585,-0.769935667514801,0.605724632740021,0.555329561233521,-0.569830477237701,0.525696158409119,0.742150247097015,-0.41576024889946,0.605724632740021,0.555329561233521,-0.569830477237701,0.859436631202698,0.509184420108795,0.0458242334425449,0.723603904247284,0.683222591876984,0.0980009809136391,0.525696158409119,0.742150247097015,-0.41576024889946,0.654246509075165,0.624168276786804,0.427054405212402,0.762879073619843,0.502556324005127,0.406758666038513,0.807652294635773,0.443565875291824,0.388519138097763,0.599660396575928,0.629723131656647,0.493817895650864,0.599660396575928,0.629723131656647,0.493817895650864,0.807652294635773,0.443565875291824,0.388519138097763,0.814328134059906,-0.0162655059248209,0.580176770687103,0.494092851877213,0.035261906683445,0.868693768978119,0.633758366107941,-0.479115188121796,0.607288181781769,0.494092851877213,0.035261906683445,0.868693768978119,0.814328134059906,-0.0162655059248209,0.580176770687103,0.655400395393372,-0.538768291473389,0.52931934595108,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.192081093788147,0.0805686637759209,-0.978066265583038, 0.160101726651192,0.546482443809509,-0.822024524211884,0.0794514417648315,0.574801087379456,-0.814426898956299,0.160101726651192,0.546482443809509,-0.822024524211884,0.15365432202816,0.571211695671082,-0.806292474269867,0.128622680902481,0.604616940021515,-0.786062717437744,0.0794514417648315,0.574801087379456,-0.814426898956299,-0.414378970861435,-0.48013111948967,0.773152112960815,-0.76872593164444,-0.625621676445007,-0.132883220911026,-0.0517404824495316,-0.448792159557343,-0.892137050628662,0.628591895103455,-0.444956034421921,-0.637876510620117,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.474026173353195,-0.576446056365967,0.665589272975922,-0.551329076290131,-0.707401514053345,-0.4422886967659,0.165543153882027,-0.540197908878326,-0.825094938278198,0.663442254066467,-0.730678737163544,-0.161099433898926,-0.348949372768402,-0.852245092391968,0.389759749174118,-0.620602905750275,-0.69584184885025,-0.361463844776154,0.323404222726822,-0.738465547561646,0.591674208641052,0.343847304582596,-0.196072638034821,0.918327033519745,-0.545982420444489,-0.58450835943222,0.600210964679718,-0.314526081085205,-0.770808577537537,-0.554010331630707,0.610170483589172,-0.773055613040924,0.17342720925808,-0.0837006717920303,-0.567485928535461,0.819117784500122,-0.623616337776184,-0.765475332736969,-0.158588007092476,0.668955624103546,-0.737108647823334,-0.0957559272646904,0.598684668540955,-0.729470372200012,-0.330831676721573,0.314595818519592,-0.93869549036026,-0.140997156500816,0.124663800001144,-0.874086201190948,0.469502121210098,0.301147431135178,-0.680567443370819,0.667935729026794,-0.798132300376892,-0.595748007297516,0.0898284390568733,-0.810118317604065,-0.284595668315887,-0.512555956840515,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.885131180286407,0.0417930334806442,-0.4634610414505,0.627128839492798,0.0574354380369186,-0.776795089244843,0.0855752229690552,-0.285937607288361,-0.954419493675232,0.648241341114044,-0.506932139396667,-0.568157494068146,0.198126867413521,0.0765141919255257,-0.977185368537903, 0.969612717628479,0.0529157817363739,0.238853618502617,0.918069958686829,-0.187106743454933,0.3494833111763,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.887380838394165,-0.451604127883911,-0.0927843973040581,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.739399373531342,-0.377425998449326,0.557528674602509,0.474026173353195,-0.576446056365967,0.665589272975922,-0.647231996059418,0.709673702716827,-0.278305560350418,-0.885131180286407,0.0417930334806442,-0.4634610414505,-0.94776064157486,-0.269029259681702,-0.171385675668716,-0.702043056488037,0.707515060901642,-0.0809816271066666,0.198126867413521,0.0765141919255257,-0.977185368537903,0.121350355446339,0.714234948158264,-0.68930584192276,0.462542772293091,0.739023745059967,-0.489793956279755,0.627128839492798,0.0574354380369186,-0.776795089244843,0.633758366107941,-0.479115188121796,0.607288181781769,0.655400395393372,-0.538768291473389,0.52931934595108,0.592115879058838,-0.487801223993301,0.641442716121674,0.543871879577637,-0.524204134941101,0.655296385288239,0.970879018306732,0.17382837831974,0.164856374263763,0.633758366107941,-0.479115188121796,0.607288181781769,0.543871879577637,-0.524204134941101,0.655296385288239,0.975513935089111,-0.202585577964783,0.0856255367398262,0.627528429031372,0.574077785015106,-0.525968432426453,0.906324923038483,0.41602036356926,-0.0741765573620796,0.926415085792542,0.366669327020645,-0.085490919649601,0.627380788326263,0.542527794837952,-0.558620572090149,0.128622680902481,0.604616940021515,-0.786062717437744,0.627528429031372,0.574077785015106,-0.525968432426453,0.627380788326263,0.542527794837952,-0.558620572090149,0.0794514417648315,0.574801087379456,-0.814426898956299,0.15365432202816,0.571211695671082,-0.806292474269867,0.154303297400475,0.424244195222855,-0.892304539680481,0.178336277604103,0.738516449928284,-0.650222778320313,0.128622680902481,0.604616940021515,-0.786062717437744,0.193036586046219,0.594731748104095,-0.780404388904572,0.15365432202816,0.571211695671082,-0.806292474269867,0.160101726651192,0.546482443809509,-0.822024524211884, 0.239434629678726,0.547067284584045,-0.802115023136139,-0.393562406301498,0.580699265003204,-0.71266895532608,0.193036586046219,0.594731748104095,-0.780404388904572,0.239434629678726,0.547067284584045,-0.802115023136139,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.430813580751419,0.499041646718979,-0.751902282238007,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.393562406301498,0.580699265003204,-0.71266895532608,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.90586119890213,-0.279545783996582,0.31822881102562,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.921413004398346,-0.24597555398941,0.300822287797928,0.969612717628479,0.0529157817363739,0.238853618502617,0.632348001003265,0.720907807350159,0.283598184585571,0.613771736621857,0.718874037265778,0.326349973678589,0.918069958686829,-0.187106743454933,0.3494833111763,0.398143172264099,0.565787017345428,-0.722057580947876,0.633863806724548,0.397778630256653,-0.663316547870636,0.62652999162674,-0.0954440459609032,-0.773531258106232,0.432219922542572,0.089619405567646,-0.897303879261017,0.633863806724548,0.397778630256653,-0.663316547870636,0.97103625535965,0.0917741134762764,-0.2206040173769,0.886820495128632,-0.356388479471207,-0.294171094894409,0.62652999162674,-0.0954440459609032,-0.773531258106232,-0.458068251609802,-0.324115723371506,-0.827721238136292,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.12256808578968,0.664539575576782,-0.737132430076599,-0.272203058004379,0.658502340316772,-0.701626777648926,-0.656110644340515,0.732090890407562,-0.183198615908623, -0.308493584394455,0.950873613357544,0.02590411901474,-0.0896633565425873,0.986825108528137,-0.134672433137894,-0.331648796796799,0.794523477554321,-0.508666396141052,-0.576912403106689,0.718079209327698,0.389274090528488,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.664968252182007,0.74531364440918,0.0482159554958344,0.320559591054916,0.729658484458923,0.6040198802948,0.614538609981537,0.667141020298004,0.421028733253479,0.311181455850601,0.925608515739441,0.215441450476646,-0.706917762756348,-0.104018487036228,0.699605226516724,-0.814851105213165,-0.0293110944330692,0.578928768634796,-0.599858164787292,0.75833535194397,0.255142569541931,0.941741049289703,0.116148002445698,0.315647602081299,0.991389572620392,-0.125116944313049,0.0386327914893627,0.996930718421936,0.0329510122537613,0.0710170343518257,-0.861413061618805,0.450139373540878,0.235249027609825,-0.659538865089417,0.541105389595032,0.521740794181824,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.861413061618805,0.450139373540878,0.235249027609825,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.909857094287872,0.391187280416489,0.138320609927177,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.559431493282318,0.828812479972839,0.0103096449747682,-0.392663925886154,0.918741226196289,-0.0415882430970669,-0.410511583089828,0.907221853733063,0.0918080508708954,-0.912856221199036,-0.241108059883118,0.329485028982162,-0.970349133014679,-0.239411488175392,0.0332369618117809,-0.752064287662506,0.658552467823029,-0.0266082808375359,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.957430243492126,0.286320626735687,0.0367132313549519,-0.921413004398346,-0.24597555398941,0.300822287797928,-0.858353078365326,-0.409084886312485,0.309644252061844,-0.936574637889862,0.00382737815380096,-0.350447237491608,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.15803237259388,0.792331874370575,0.589267313480377, -0.181093856692314,-0.00969438999891281,0.983418047428131,-0.306766450405121,-0.118458941578865,0.944384336471558,0.819103598594666,0.554179012775421,0.148171901702881,0.939882814884186,-0.341329634189606,0.010694270953536,0.810173988342285,-0.314327269792557,0.494789332151413,0.748181462287903,0.587628960609436,0.308085650205612,0.812849104404449,-0.351107835769653,0.464757591485977,0.665187358856201,-0.279087334871292,0.692557573318481,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.494772285223007,0.860163271427155,-0.123772047460079,-0.258335679769516,0.945306420326233,-0.199144259095192,0.158631011843681,0.588066816329956,0.793103754520416,0.413430035114288,0.428488910198212,0.803413271903992,0.229550704360008,0.575565576553345,0.784876227378845,0.520070433616638,0.75630134344101,0.396906822919846,0.158631011843681,0.588066816329956,0.793103754520416,0.522960782051086,0.842813670635223,-0.127189323306084,-0.99501496553421,0.0992259010672569,-0.00997005868703127,-0.834402322769165,0.550801813602448,0.0197510607540607,-0.968974888324738,0.149660646915436,0.196696102619171,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.64732962846756,0.721940577030182,-0.244471192359924,-0.669141829013824,0.742036163806915,-0.0403926707804203,0.980522811412811,0.123100526630878,0.153040006756783,0.962031662464142,0.166659101843834,0.216147840023041,0.916947364807129,0.362371891736984,0.167015478014946,0.780855357646942,0.547496914863586,0.30085226893425,0.894985616207123,0.383079379796982,0.228584766387939,0.505573332309723,0.856702566146851,0.102256514132023,0.894985616207123,0.383079379796982,0.228584766387939,0.764615535736084,0.640312492847443,0.0732326954603195,0.505573332309723,0.856702566146851,0.102256514132023,-0.891578018665314,0.451290994882584,-0.0377500951290131,-0.906549394130707,0.409386157989502,-0.102816209197044,-0.740322589874268,0.65516471862793,-0.150604158639908,-0.359505951404572,0.919594466686249,-0.15843440592289,-0.472927123308182,0.876888871192932,0.0860569700598717,-0.258335679769516,0.945306420326233,-0.199144259095192, -0.957430243492126,0.286320626735687,0.0367132313549519,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.802868485450745,0.579959869384766,0.138017445802689,0.192081093788147,0.0805686637759209,-0.978066265583038,0.177267909049988,0.365930050611496,-0.91360342502594,0.324593335390091,0.033190730959177,-0.945271134376526,-0.972268521785736,0.233539238572121,0.0123817138373852,-0.875641226768494,-0.338847458362579,0.344143718481064,-0.858353078365326,-0.409084886312485,0.309644252061844,0.918069958686829,-0.187106743454933,0.3494833111763,0.613771736621857,0.718874037265778,0.326349973678589,0.596383929252625,0.731881856918335,0.329659104347229,0.592115879058838,-0.487801223993301,0.641442716121674,0.797426402568817,0.177674129605293,0.57666540145874,0.543871879577637,-0.524204134941101,0.655296385288239,0.177267909049988,0.365930050611496,-0.91360342502594,0.192081093788147,0.0805686637759209,-0.978066265583038,0.0525061227381229,0.0318809561431408,-0.998111546039581,0.970879018306732,0.17382837831974,0.164856374263763,0.947628259658813,0.256551682949066,0.190215542912483,0.933142781257629,0.297380536794662,0.202013194561005,-0.800276517868042,0.427208811044693,-0.420773267745972,-0.828169226646423,0.35357066988945,-0.434883296489716,-0.923372864723206,0.289372861385345,-0.252281367778778,-0.906213700771332,0.328242093324661,-0.266521811485291,-0.939418137073517,0.146129980683327,-0.310063809156418,-0.99501496553421,0.0992259010672569,-0.00997005868703127,0.655400395393372,-0.538768291473389,0.52931934595108,0.991389572620392,-0.125116944313049,0.0386327914893627,0.592115879058838,-0.487801223993301,0.641442716121674,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.914847433567047,-0.40378075838089,0.00391693273559213,0.985846102237701,-0.106943093240261,0.129114612936974,0.26786082983017,0.938322722911835,-0.218634366989136,0.34263151884079,0.695380985736847,-0.631703197956085,0.0982041954994202,0.744845330715179,-0.659970700740814,0.149676010012627,0.966882228851318,-0.20672644674778,0.0982041954994202,0.744845330715179,-0.659970700740814, 0.34263151884079,0.695380985736847,-0.631703197956085,0.341541588306427,0.10033044219017,-0.934496164321899,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.00533884158357978,0.0413248725235462,-0.999131500720978,0.433557748794556,-0.0273693483322859,-0.900710046291351,0.282903432846069,-0.614905893802643,-0.736109018325806,-0.0723040401935577,-0.562818825244904,-0.823411822319031,-0.0723040401935577,-0.562818825244904,-0.823411822319031,0.282903432846069,-0.614905893802643,-0.736109018325806,0.383173555135727,-0.262150347232819,-0.885694801807404,-0.03597491979599,-0.262611389160156,-0.964230835437775,-0.03597491979599,-0.262611389160156,-0.964230835437775,0.383173555135727,-0.262150347232819,-0.885694801807404,0.398143172264099,0.565787017345428,-0.722057580947876,0.12256808578968,0.664539575576782,-0.737132430076599,0.12256808578968,0.664539575576782,-0.737132430076599,0.398143172264099,0.565787017345428,-0.722057580947876,0.432219922542572,0.089619405567646,-0.897303879261017,0.180026173591614,0.22968553006649,-0.956470131874084,0.154303297400475,0.424244195222855,-0.892304539680481,0.180026173591614,0.22968553006649,-0.956470131874084,0.432219922542572,0.089619405567646,-0.897303879261017,0.390601873397827,0.504608035087585,-0.769935667514801,0.178336277604103,0.738516449928284,-0.650222778320313,0.154303297400475,0.424244195222855,-0.892304539680481,0.390601873397827,0.504608035087585,-0.769935667514801,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.850299119949341,0.0502048023045063,0.523899674415588,-0.976002871990204,0.137454673647881,0.168892458081245,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.850299119949341,0.0502048023045063,0.523899674415588, -0.878947675228119,-0.045041237026453,0.47478649020195,-0.147625342011452,-0.322125315666199,0.935116052627563,-0.141525283455849,-0.0639705210924149,0.987865567207336,-0.652125775814056,-0.00108898046892136,0.758109986782074,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.147625342011452,-0.322125315666199,0.935116052627563,0.503679692745209,-0.333046585321426,0.797111511230469,0.538123428821564,-0.0776133164763451,0.839285016059875,-0.141525283455849,-0.0639705210924149,0.987865567207336,0.717245042324066,0.0185855161398649,0.696573138237,0.538123428821564,-0.0776133164763451,0.839285016059875,0.503679692745209,-0.333046585321426,0.797111511230469,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815,0.241827890276909,0.961548805236816,-0.0192979723215103,0.273955345153809,0.717245042324066,0.0185855161398649,0.696573138237,0.76161140203476,-0.261901050806046,0.592752873897552,0.949140191078186,-0.201623901724815,0.241827890276909,0.941822648048401,-0.153352871537209,-0.299086838960648,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.961548805236816,-0.0192979723215103,0.273955345153809,-0.505583822727203,0.0150259397923946,-0.862646639347076,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.522813379764557,0.17926724255085,-0.833384335041046,-0.522813379764557,0.17926724255085,-0.833384335041046,0.00497482251375914,0.164960786700249,-0.986287593841553,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,-0.505583822727203,0.0150259397923946,-0.862646639347076,0.341541588306427,0.10033044219017,-0.934496164321899,0.377974539995193,-0.0538287870585918,-0.924249827861786,-5.02178700116929e-005,0.0272602327167988,-0.999628365039825,0.00497482251375914,0.164960786700249,-0.986287593841553,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.70794689655304,-0.166302517056465,-0.686407029628754,0.377974539995193,-0.0538287870585918,-0.924249827861786,0.341541588306427,0.10033044219017,-0.934496164321899, -0.903742134571075,0.0408328101038933,0.426125347614288,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.668019652366638,-0.146763682365417,0.729527354240417,-0.878947675228119,-0.045041237026453,0.47478649020195,-0.903742134571075,0.0408328101038933,0.426125347614288,-0.697896897792816,0.111968666315079,0.707391619682312,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.482705980539322,0.267842918634415,-0.833819627761841,-0.244611799716949,0.194430083036423,-0.949927389621735,0.505280077457428,-0.213028207421303,-0.836248159408569,-0.713874757289886,0.186937421560287,-0.674860894680023,-0.929460346698761,0.35161367058754,-0.111674793064594,-0.861413061618805,0.450139373540878,0.235249027609825,-0.837489604949951,-0.137019082903862,0.528996169567108,-0.802868485450745,0.579959869384766,0.138017445802689,-0.389561533927917,-0.191748484969139,0.900818705558777,-0.652578115463257,-0.0296747144311666,0.757140159606934,-0.659538865089417,0.541105389595032,0.521740794181824,-0.407288640737534,0.570921063423157,0.712857007980347,0.0511878095567226,-0.230872601270676,0.971636593341827,-0.213112205266953,-0.0906345173716545,0.972814738750458,0.187374159693718,0.57430511713028,0.796909391880035,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.985846102237701,-0.106943093240261,0.129114612936974,0.846594989299774,-0.529064953327179,0.0580276139080524,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.914847433567047,-0.40378075838089,0.00391693273559213,0.886820495128632,-0.356388479471207,-0.294171094894409,0.97103625535965,0.0917741134762764,-0.2206040173769,0.985846102237701,-0.106943093240261,0.129114612936974,0.762879073619843,0.502556324005127,0.406758666038513,0.859436631202698,0.509184420108795,0.0458242334425449, 0.886820495128632,-0.356388479471207,-0.294171094894409,0.914847433567047,-0.40378075838089,0.00391693273559213,0.723603904247284,0.683222591876984,0.0980009809136391,0.859436631202698,0.509184420108795,0.0458242334425449,0.762879073619843,0.502556324005127,0.406758666038513,0.654246509075165,0.624168276786804,0.427054405212402,0.723603904247284,0.683222591876984,0.0980009809136391,0.654246509075165,0.624168276786804,0.427054405212402,0.933142781257629,0.297380536794662,0.202013194561005,0.906324923038483,0.41602036356926,-0.0741765573620796,0.947628259658813,0.256551682949066,0.190215542912483,0.926415085792542,0.366669327020645,-0.085490919649601,0.906324923038483,0.41602036356926,-0.0741765573620796,0.933142781257629,0.297380536794662,0.202013194561005,0.926415085792542,0.366669327020645,-0.085490919649601,0.947628259658813,0.256551682949066,0.190215542912483,0.981737434864044,-0.183587238192558,0.0498724691569805,0.968909800052643,-0.119059138000011,-0.21688424050808,0.809562027454376,0.57842743396759,-0.100154921412468,0.968909800052643,-0.119059138000011,-0.21688424050808,0.981737434864044,-0.183587238192558,0.0498724691569805,0.870848119258881,0.464649528264999,0.160388246178627,0.809562027454376,0.57842743396759,-0.100154921412468,0.870848119258881,0.464649528264999,0.160388246178627,0.793782532215118,0.557114601135254,0.24399308860302,0.74566113948822,0.665992856025696,-0.021046232432127,0.711231529712677,0.702188611030579,-0.0328761637210846,0.74566113948822,0.665992856025696,-0.021046232432127,0.793782532215118,0.557114601135254,0.24399308860302,0.713916897773743,0.653736352920532,0.250901371240616,0.632348001003265,0.720907807350159,0.283598184585571,0.671855986118317,0.740681707859039,-0.000314049131702632,0.711231529712677,0.702188611030579,-0.0328761637210846,0.713916897773743,0.653736352920532,0.250901371240616,0.999210178852081,0.0289647411555052,-0.0272047873586416,0.671855986118317,0.740681707859039,-0.000314049131702632,0.632348001003265,0.720907807350159,0.283598184585571,0.969612717628479,0.0529157817363739,0.238853618502617, 0.999210178852081,0.0289647411555052,-0.0272047873586416,0.969612717628479,0.0529157817363739,0.238853618502617,0.964107513427734,-0.248898878693581,-0.0924450159072876,0.739399373531342,-0.377425998449326,0.557528674602509,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.383484423160553,-0.10283836722374,-0.917803883552551,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.698255062103271,-0.555874645709991,-0.451046735048294,-0.382079601287842,0.0211677625775337,-0.923886954784393,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.653040766716003,-0.484619319438934,-0.581963837146759,-0.587613880634308,-0.804071664810181,0.0904360190033913,-0.650360941886902,-0.2744460105896,0.708314895629883,-0.828753769397736,-0.00401695584878325,0.559599041938782,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.47929310798645,-0.284916669130325,-0.830120861530304,-0.653040766716003,-0.484619319438934,-0.581963837146759,0.118139639496803,-0.728867173194885,0.67438542842865,-0.944391250610352,-0.0824343115091324,-0.3183234333992,-0.964972972869873,-0.0338398963212967,-0.260157763957977,-0.812033832073212,-0.319456815719604,0.488414168357849,-0.583520650863647,-0.523498177528381,0.620848834514618,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.846594989299774,-0.529064953327179,0.0580276139080524,-0.944391250610352,-0.0824343115091324,-0.3183234333992,0.118139639496803,-0.728867173194885,0.67438542842865,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.867540001869202,-0.48896712064743,-0.0910244435071945,0.118139639496803,-0.728867173194885,0.67438542842865,0.993199586868286,-5.2900577429682e-006,0.1164241284132,0.751028060913086,-0.474978506565094,-0.458641737699509, 0.332680404186249,-0.441110402345657,0.833513855934143,0.202261254191399,-0.191956058144569,0.960334956645966,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.202261254191399,-0.191956058144569,0.960334956645966,-0.201129660010338,-0.411518931388855,0.888931393623352,0.0923520997166634,-0.948987245559692,0.301486879587173,0.691331505775452,-0.716019809246063,-0.0968316718935966,0.332680404186249,-0.441110402345657,0.833513855934143,0.751028060913086,-0.474978506565094,-0.458641737699509,0.505280077457428,-0.213028207421303,-0.836248159408569,-0.244611799716949,0.194430083036423,-0.949927389621735,-0.837489604949951,-0.137019082903862,0.528996169567108,0.118139639496803,-0.728867173194885,0.67438542842865,0.867540001869202,-0.48896712064743,-0.0910244435071945,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.871833384037018,0.0184005852788687,0.489456832408905,0.909544348716736,-0.0496345721185207,0.412632375955582,0.928275108337402,-0.108704164624214,0.355652451515198,0.807208120822906,-0.16038890182972,0.568058490753174,0.938030481338501,-0.164544522762299,-0.304998099803925,0.928275108337402,-0.108704164624214,0.355652451515198,0.909544348716736,-0.0496345721185207,0.412632375955582,0.934698820114136,0.0468888580799103,-0.352334558963776,0.934698820114136,0.0468888580799103,-0.352334558963776,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.0390605479478836,-0.798295617103577,-0.600997805595398,0.938030481338501,-0.164544522762299,-0.304998099803925,-0.698255062103271,-0.555874645709991,-0.451046735048294,0.0390605479478836,-0.798295617103577,-0.600997805595398,-0.382079601287842,0.0211677625775337,-0.923886954784393,0.456334859132767,-0.263855695724487,0.849787414073944,0.546681344509125,-0.221680983901024,0.807463347911835,0.928847432136536,0.162274017930031,0.333030939102173,0.928847432136536,0.162274017930031,0.333030939102173,0.969195008277893,0.116620995104313,0.216934517025948,0.953069984912872,0.0484385639429092,0.298849850893021,0.871833384037018,0.0184005852788687,0.489456832408905, 0.714491784572601,0.142257153987885,0.685028791427612,0.30596736073494,-0.302397102117538,0.902740240097046,0.456334859132767,-0.263855695724487,0.849787414073944,0.928847432136536,0.162274017930031,0.333030939102173,0.161164596676826,-0.331503033638,0.929586827754974,0.30596736073494,-0.302397102117538,0.902740240097046,0.714491784572601,0.142257153987885,0.685028791427612,0.709949553012848,0.601409435272217,0.366440117359161,0.961548805236816,-0.0192979723215103,0.273955345153809,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.785880386829376,0.614527404308319,-0.0689060613512993,0.785880386829376,0.614527404308319,-0.0689060613512993,0.632241547107697,0.646320283412933,-0.427247822284698,0.404174894094467,0.903538584709167,-0.142339900135994,0.462400853633881,0.884378015995026,0.0637255683541298,0.632241547107697,0.646320283412933,-0.427247822284698,0.785880386829376,0.614527404308319,-0.0689060613512993,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.733689785003662,-0.00598063552752137,-0.679458260536194,0.967416942119598,-0.0268917102366686,-0.251756459474564,0.941822648048401,-0.153352871537209,-0.299086838960648,0.70794689655304,-0.166302517056465,-0.686407029628754,0.70794689655304,-0.166302517056465,-0.686407029628754,0.941822648048401,-0.153352871537209,-0.299086838960648,0.820765018463135,-0.278661012649536,-0.4986911714077,0.71175479888916,-0.136520832777023,-0.689033508300781,0.71175479888916,-0.136520832777023,-0.689033508300781,0.820765018463135,-0.278661012649536,-0.4986911714077,0.433943748474121,-0.801411271095276,-0.411622196435928,0.471586465835571,-0.672621011734009,-0.570251822471619,0.471586465835571,-0.672621011734009,-0.570251822471619,0.433943748474121,-0.801411271095276,-0.411622196435928,0.850343227386475,-0.422914385795593,-0.313145011663437,0.642500996589661,-0.273710608482361,-0.715733826160431,-0.683505356311798,0.663009881973267,0.305349379777908,-0.258647561073303,0.909015476703644,0.326790869235992,-0.343125730752945,0.914759814739227,0.213258653879166, -0.722104966640472,0.687272310256958,0.0788739323616028,-0.683505356311798,0.663009881973267,0.305349379777908,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.976002871990204,0.137454673647881,0.168892458081245,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.976002871990204,0.137454673647881,0.168892458081245,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.995019972324371,0.0198635049164295,0.0976764634251595,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.99804013967514,0.0525207407772541,0.0340211354196072,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.990444839000702,0.137596040964127,-0.00929243210703135,-0.923067510128021,0.218861386179924,-0.316300690174103,-0.949256777763367,0.266638487577438,-0.166779711842537,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.967456996440887,0.251362770795822,-0.0290456227958202,-0.932169854640961,0.263871490955353,-0.247853130102158,-0.937970280647278,0.291287869215012,-0.188050955533981,-0.94812422990799,0.313342124223709,-0.0536391511559486,-0.949256777763367,0.266638487577438,-0.166779711842537,0.30596736073494,-0.302397102117538,0.902740240097046,0.152829229831696,-0.222570449113846,0.962863266468048,0.118139639496803,-0.728867173194885,0.67438542842865,0.456334859132767,-0.263855695724487,0.849787414073944,0.602918326854706,0.515652477741241,0.608762681484222,0.910823285579681,0.270006626844406,0.312245815992355,0.118139639496803,-0.728867173194885,0.67438542842865,0.152829229831696,-0.222570449113846,0.962863266468048,-0.343125730752945,0.914759814739227,0.213258653879166, -0.308493584394455,0.950873613357544,0.02590411901474,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.722104966640472,0.687272310256958,0.0788739323616028,-0.656110644340515,0.732090890407562,-0.183198615908623,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.973912477493286,0.184166118502617,-0.132579416036606,-0.886800348758698,0.175986841320992,-0.427333265542984,-0.946598649024963,0.101268656551838,-0.306097477674484,-0.970708966255188,0.0394217669963837,-0.23700213432312,-0.853118479251862,0.0149602368474007,-0.521502673625946,-0.805570960044861,0.0887086465954781,-0.585820972919464,0.949140191078186,-0.201623901724815,0.241827890276909,0.928275108337402,-0.108704164624214,0.355652451515198,0.938030481338501,-0.164544522762299,-0.304998099803925,0.941822648048401,-0.153352871537209,-0.299086838960648,-0.339781731367111,-0.868737757205963,0.360337555408478,0.118260912597179,-0.832547545433044,0.541182935237885,0.261419922113419,-0.95404326915741,0.146496027708054,-0.295633107423782,-0.949930131435394,-0.10116221010685,-0.306935518980026,-0.919691741466522,0.244862422347069,0.810173988342285,-0.314327269792557,0.494789332151413,0.939882814884186,-0.341329634189606,0.010694270953536,-0.207801997661591,-0.930255532264709,-0.302395343780518,0.890334188938141,-0.2436583340168,-0.384624063968658,0.953069984912872,0.0484385639429092,0.298849850893021,0.969195008277893,0.116620995104313,0.216934517025948,0.991721928119659,-0.0987398326396942,0.0820856466889381,0.0872491523623466,-0.891694486141205,-0.444149285554886,-0.542883276939392,-0.826726615428925,-0.147651329636574,-0.0959864854812622,-0.913586139678955,0.395154267549515,0.50744092464447,-0.861680567264557,0.00320711638778448,0.314595818519592,-0.93869549036026,-0.140997156500816,-0.211911574006081,-0.951958775520325,-0.221061065793037, -0.339781731367111,-0.868737757205963,0.360337555408478,0.124663800001144,-0.874086201190948,0.469502121210098,0.124663800001144,-0.874086201190948,0.469502121210098,-0.339781731367111,-0.868737757205963,0.360337555408478,0.192425221204758,-0.974552154541016,0.114980839192867,0.118260912597179,-0.832547545433044,0.541182935237885,-0.40076744556427,-0.847734689712524,0.347464174032211,-0.207811191678047,-0.962575137615204,-0.173964604735374,0.261419922113419,-0.95404326915741,0.146496027708054,0.230480119585991,-0.946770370006561,0.224732518196106,-0.362296253442764,-0.902348458766937,0.233470991253853,-0.201402932405472,-0.92625367641449,-0.318576455116272,0.389462053775787,-0.886311709880829,-0.250541061162949,-0.200983807444572,-0.912257611751556,-0.356919497251511,0.326997041702271,-0.921505868434906,-0.209522947669029,0.180372029542923,-0.916134834289551,0.357998490333557,-0.339713484048843,-0.93720954656601,0.0789492130279541,-0.200983807444572,-0.912257611751556,-0.356919497251511,-0.395999372005463,-0.883323132991791,0.250847965478897,0.148850917816162,-0.924228250980377,0.351632624864578,0.326997041702271,-0.921505868434906,-0.209522947669029,0.259535193443298,-0.932749152183533,0.250240802764893,0.334644615650177,-0.86758428812027,-0.367845684289932,-0.112518116831779,-0.874383687973022,-0.47200945019722,-0.32362487912178,-0.91464102268219,0.242278203368187,0.248996675014496,-0.917850255966187,0.309114098548889,0.50744092464447,-0.861680567264557,0.00320711638778448,-0.464242279529572,-0.87283843755722,-0.150440096855164,-0.32362487912178,-0.91464102268219,0.242278203368187,-0.259815841913223,-0.928046464920044,-0.266881018877029,-0.303018301725388,-0.938679337501526,0.164502337574959,0.259535193443298,-0.932749152183533,0.250240802764893,0.149650126695633,-0.977229058742523,-0.150426715612412,-0.370716333389282,-0.925935029983521,-0.0722066015005112,0.262460827827454,-0.84521484375,0.465538591146469,0.648241341114044,-0.506932139396667,-0.568157494068146,0.0855752229690552,-0.285937607288361,-0.954419493675232, -0.407288640737534,0.570921063423157,0.712857007980347,0.187374159693718,0.57430511713028,0.796909391880035,-0.213112205266953,-0.0906345173716545,0.972814738750458,-0.751268684864044,0.274677604436874,-0.60012298822403,-0.765880882740021,0.172275647521019,-0.61947363615036,-0.883178770542145,0.174471154808998,-0.435379177331924,-0.838867545127869,0.499842166900635,-0.215543583035469,-0.905240058898926,0.247854217886925,-0.345121324062347,-0.888693332672119,0.348883032798767,-0.297497481107712,0.850938260555267,-0.0678395256400108,0.520866513252258,0.922418177127838,0.0309108179062605,0.384953439235687,0.937970161437988,0.291288256645203,-0.188050866127014,0.9481241106987,0.313342481851578,-0.053639143705368,0.967456996440887,0.251362919807434,-0.0290456917136908,0.939527928829193,0.186540976166725,0.287210315465927,0.877985596656799,0.347244620323181,0.32948824763298,0.9481241106987,0.313342481851578,-0.053639143705368,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.923067450523376,0.21886146068573,-0.316300749778748,0.932169795036316,0.263871729373932,-0.24785327911377,0.482705801725388,0.267842918634415,-0.833819687366486,-0.0640612170100212,0.868370532989502,0.491760909557343,-0.272089272737503,0.833921611309052,0.480148106813431,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165,0.793586194515228,0.402506083250046,0.589897155761719,0.700007259845734,0.551314413547516,0.63163036108017,0.545064687728882,0.147527933120728,0.908096134662628,0.391914397478104,0.0960818827152252,0.882192432880402,0.460982412099838,0.675129354000092,-0.135668084025383,0.725116908550262,0.850938260555267,-0.0678395256400108,0.520866513252258,0.9481241106987,0.313342481851578,-0.053639143705368,0.877985596656799,0.347244620323181,0.32948824763298,0.451114922761917,-0.252489298582077,0.856004953384399,0.675129354000092,-0.135668084025383,0.725116908550262,0.877985596656799,0.347244620323181,0.32948824763298,0.697896838188171,0.111968606710434,0.707391738891602,0.0218879040330648,0.608063995838165,0.793586194515228, 0.402506083250046,0.589897155761719,0.700007259845734,0.0960818827152252,0.882192432880402,0.460982412099838,-0.0640612170100212,0.868370532989502,0.491760909557343,0.697896838188171,0.111968606710434,0.707391738891602,0.095845490694046,-0.0575048215687275,0.993733823299408,0.136431142687798,-0.358484745025635,0.923512399196625,0.451114922761917,-0.252489298582077,0.856004953384399,0.97600269317627,0.13745604455471,0.168892234563828,0.683504700660706,0.663010776042938,0.305349051952362,0.551314413547516,0.63163036108017,0.545064687728882,0.85029935836792,0.0502043291926384,0.523899376392365,0.147625222802162,-0.322124987840652,0.935116171836853,0.095845490694046,-0.0575048215687275,0.993733823299408,0.697896838188171,0.111968606710434,0.707391738891602,0.668019592761993,-0.146763533353806,0.729527413845062,0.939527928829193,0.186540976166725,0.287210315465927,0.990444839000702,0.137596189975739,-0.00929253362119198,0.99804013967514,0.0525208227336407,0.0340210981667042,0.903742134571075,0.0408325865864754,0.426125437021255,0.946598649024963,0.101268604397774,-0.306097507476807,0.923067450523376,0.21886146068573,-0.316300749778748,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.568327784538269,-0.132913276553154,0.811996042728424,0.095845490694046,-0.0575048215687275,0.993733823299408,0.147625222802162,-0.322124987840652,0.935116171836853,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.969194948673248,0.11662120372057,0.21693454682827,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.942743897438049,-0.067279078066349,-0.326661109924316,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.568327784538269,-0.132913276553154,0.811996042728424, -0.503679633140564,-0.333046585321426,0.797111511230469,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014,0.922418177127838,0.0309108179062605,0.384953439235687,0.964133620262146,0.116036243736744,0.238708943128586,0.964133620262146,0.116036243736744,0.238708943128586,0.928708553314209,-0.245198935270309,0.278168857097626,0.775554299354553,-0.490126490592957,-0.397858679294586,0.892664194107056,0.187903523445129,-0.409686356782913,0.937970161437988,0.291288256645203,-0.188050866127014,0.892664194107056,0.187903523445129,-0.409686356782913,0.568934082984924,-0.144464790821075,-0.809594869613647,0.713874757289886,0.186937391757965,-0.674860894680023,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.364783376455307,-0.883516609668732,0.293822169303894,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.928847432136536,0.162273854017258,0.333030939102173,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173,-0.969194948673248,0.11662120372057,0.21693454682827,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.332680583000183,-0.441110253334045,0.833513855934143,0.922418177127838,0.0309108179062605,0.384953439235687,0.850938260555267,-0.0678395256400108,0.520866513252258,0.837489545345306,-0.137019574642181,0.528996109962463,0.21311217546463,-0.0906343460083008,0.972814798355103,0.136431142687798,-0.358484745025635,0.923512399196625,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.0511879175901413,-0.230872392654419,0.971636593341827,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.482705801725388,0.267842918634415,-0.833819687366486,0.244611874222755,0.194429770112038,-0.949927449226379,0.246746584773064,-0.163684040307999,-0.955156326293945, -0.890334248542786,-0.243657946586609,-0.384624123573303,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.383484452962875,-0.102838270366192,-0.917803883552551,0.479293167591095,-0.284916758537292,-0.830120801925659,0.837489545345306,-0.137019574642181,0.528996109962463,0.850938260555267,-0.0678395256400108,0.520866513252258,0.675129354000092,-0.135668084025383,0.725116908550262,0.652578055858612,-0.0296747293323278,0.757140219211578,0.652578055858612,-0.0296747293323278,0.757140219211578,0.675129354000092,-0.135668084025383,0.725116908550262,0.451114922761917,-0.252489298582077,0.856004953384399,0.389561533927917,-0.19174836575985,0.900818705558777,0.389561533927917,-0.19174836575985,0.900818705558777,0.451114922761917,-0.252489298582077,0.856004953384399,0.136431142687798,-0.358484745025635,0.923512399196625,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.54668140411377,-0.221681281924248,0.807463228702545,0.583520710468292,-0.523498058319092,0.620848894119263,0.812033891677856,-0.31945663690567,0.488414198160172,-0.560331225395203,-0.197167724370956,0.804458677768707,-0.681288778781891,-0.15539838373661,0.715329945087433,0.828753769397736,-0.00401723757386208,0.559598922729492,0.383484452962875,-0.102838270366192,-0.917803883552551,-0.942743897438049,-0.067279078066349,-0.326661109924316,-0.934698820114136,0.0468888208270073,-0.352334499359131,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.202261313796043,-0.191956117749214,0.960334956645966,0.964133620262146,0.116036243736744,0.238708943128586,0.922418177127838,0.0309108179062605,0.384953439235687,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.691331505775452,-0.716019868850708,-0.0968314781785011, 0.543925285339355,-0.442454695701599,-0.713007152080536,0.775554299354553,-0.490126490592957,-0.397858679294586,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.201128974556923,-0.41152036190033,0.888930916786194,0.928708553314209,-0.245198935270309,0.278168857097626,0.964133620262146,0.116036243736744,0.238708943128586,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.568934082984924,-0.144464790821075,-0.809594869613647,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.713874757289886,0.186937391757965,-0.674860894680023,0.568934082984924,-0.144464790821075,-0.809594869613647,-0.751028060913086,-0.474978417158127,-0.458641856908798,0.828753769397736,-0.00401723757386208,0.559598922729492,-0.681288778781891,-0.15539838373661,0.715329945087433,-0.293806701898575,-0.416160970926285,0.860515952110291,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.364783376455307,-0.883516609668732,0.293822169303894,-0.801601707935333,-0.550374031066895,-0.23350191116333,0.653040647506714,-0.484619528055191,-0.581963717937469,0.583520710468292,-0.523498058319092,0.620848894119263,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.560331225395203,-0.197167724370956,0.804458677768707,0.812033891677856,-0.31945663690567,0.488414198160172,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.775554299354553,-0.490126490592957,-0.397858679294586,0.928708553314209,-0.245198935270309,0.278168857097626,0.201128974556923,-0.41152036190033,0.888930916786194,0.650361001491547,-0.274446427822113,0.708314716815948,-0.293806701898575,-0.416160970926285,0.860515952110291,-0.364783376455307,-0.883516609668732,0.293822169303894,0.587613701820374,-0.80407178401947,0.0904358923435211,-0.563137769699097,0.445758104324341,0.69582724571228,-0.709949254989624,0.60140985250473,0.366439938545227, -0.961548864841461,-0.0192971937358379,0.273955136537552,-0.717246651649475,0.0185818821191788,0.696571588516235,0.937970161437988,0.291288256645203,-0.188050866127014,0.713874757289886,0.186937391757965,-0.674860894680023,0.949256718158722,0.266638696193695,-0.166779711842537,-0.568327784538269,-0.132913276553154,0.811996042728424,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974,0.136431142687798,-0.358484745025635,0.923512399196625,0.095845490694046,-0.0575048215687275,0.993733823299408,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.942743897438049,-0.067279078066349,-0.326661109924316,0.697896838188171,0.111968606710434,0.707391738891602,0.877985596656799,0.347244620323181,0.32948824763298,0.939527928829193,0.186540976166725,0.287210315465927,0.903742134571075,0.0408325865864754,0.426125437021255,-0.320462554693222,0.819696664810181,0.474764227867126,-0.406098872423172,0.667459309101105,0.624164879322052,-0.5433070063591,0.448145478963852,0.709917664527893,-0.432919979095459,0.554767727851868,0.710501968860626,-0.272089272737503,0.833921611309052,0.480148106813431,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.714491605758667,0.14225697517395,0.685028970241547,-0.568327784538269,-0.132913276553154,0.811996042728424,0.939527928829193,0.186540976166725,0.287210315465927,0.967456996440887,0.251362919807434,-0.0290456917136908,0.990444839000702,0.137596189975739,-0.00929253362119198,0.543925285339355,-0.442454695701599,-0.713007152080536,0.892664194107056,0.187903523445129,-0.409686356782913,0.775554299354553,-0.490126490592957,-0.397858679294586,0.568934082984924,-0.144464790821075,-0.809594869613647,0.892664194107056,0.187903523445129,-0.409686356782913,0.543925285339355,-0.442454695701599,-0.713007152080536,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.801601707935333,-0.550374031066895,-0.23350191116333, -0.681288778781891,-0.15539838373661,0.715329945087433,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.890334248542786,-0.243657946586609,-0.384624123573303,0.479293167591095,-0.284916758537292,-0.830120801925659,0.653040647506714,-0.484619528055191,-0.581963717937469,-0.801601707935333,-0.550374031066895,-0.23350191116333,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.406098872423172,0.667459309101105,0.624164879322052,-0.320462554693222,0.819696664810181,0.474764227867126,-0.380683273077011,0.86094468832016,0.337423235177994,-0.709949254989624,0.60140985250473,0.366439938545227,-0.563137769699097,0.445758104324341,0.69582724571228,-0.5433070063591,0.448145478963852,0.709917664527893,-0.406098872423172,0.667459309101105,0.624164879322052,-0.563137769699097,0.445758104324341,0.69582724571228,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.5433070063591,0.448145478963852,0.709917664527893,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.432919979095459,0.554767727851868,0.710501968860626,0.0218879040330648,0.608063995838165,0.793586194515228,-0.432919979095459,0.554767727851868,0.710501968860626,-0.538123428821564,-0.0776136741042137,0.839285016059875,0.141524657607079,-0.0639704838395119,0.987865626811981,0.402506083250046,0.589897155761719,0.700007259845734,0.0218879040330648,0.608063995838165,0.793586194515228,0.141524657607079,-0.0639704838395119,0.987865626811981,0.652125597000122,-0.00108946568798274,0.758110165596008,0.652125597000122,-0.00108946568798274,0.758110165596008,0.85029935836792,0.0502043291926384,0.523899376392365,0.551314413547516,0.63163036108017,0.545064687728882,0.402506083250046,0.589897155761719,0.700007259845734,0.683504700660706,0.663010776042938,0.305349051952362, 0.258648008108139,0.909015238285065,0.326791137456894,0.147527933120728,0.908096134662628,0.391914397478104,0.551314413547516,0.63163036108017,0.545064687728882,0.331649243831635,0.794523119926453,-0.508666634559631,0.522813856601715,0.179267287254334,-0.833384037017822,-0.00497461529448628,0.164960891008377,-0.986287593841553,-0.0982039347290993,0.744844913482666,-0.659971237182617,0.522813856601715,0.179267287254334,-0.833384037017822,0.331649243831635,0.794523119926453,-0.508666634559631,0.656110465526581,0.732090950012207,-0.183199197053909,0.886800289154053,0.175987064838409,-0.427333384752274,0.505583882331848,0.0150260468944907,-0.862646579742432,0.459000468254089,0.0631367564201355,-0.886189818382263,-0.00533877313137054,0.0413248650729656,-0.999131500720978,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.459000468254089,0.0631367564201355,-0.886189818382263,0.505583882331848,0.0150260468944907,-0.862646579742432,0.853118479251862,0.0149601250886917,-0.521502673625946,0.805570960044861,0.0887085422873497,-0.585820972919464,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.82076495885849,-0.278661072254181,-0.498691141605377,0.459000468254089,0.0631367564201355,-0.886189818382263,0.379301398992538,-0.563074827194214,-0.734218776226044,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.00533877313137054,0.0413248650729656,-0.999131500720978,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.471586525440216,-0.672621071338654,-0.570251703262329, -0.711754858493805,-0.136520877480507,-0.689033389091492,0.379301398992538,-0.563074827194214,-0.734218776226044,0.459000468254089,0.0631367564201355,-0.886189818382263,0.805570960044861,0.0887085422873497,-0.585820972919464,0.652326643466949,-0.0732125490903854,-0.754393696784973,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.149676010012627,0.966881930828094,-0.206727981567383,0.0896634757518768,0.986824929714203,-0.134673669934273,0.331649243831635,0.794523119926453,-0.508666634559631,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.632241010665894,0.646320343017578,-0.427248448133469,0.652326643466949,-0.0732125490903854,-0.754393696784973,0.246746584773064,-0.163684040307999,-0.955156326293945,0.458068341016769,-0.324115723371506,-0.827721178531647,0.379301398992538,-0.563074827194214,-0.734218776226044,0.458068341016769,-0.324115723371506,-0.827721178531647,0.0359749346971512,-0.262611299753189,-0.964230835437775,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.379301398992538,-0.563074827194214,-0.734218776226044,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.0390606410801411,-0.798295676708221,-0.600997745990753, 0.798132300376892,-0.595748007297516,0.0898283571004868,0.348949402570724,-0.852244853973389,0.389760226011276,0.620603084564209,-0.695841789245605,-0.361463725566864,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.64503401517868,-0.763977766036987,0.0164064429700375,0.480840384960175,-0.739749372005463,-0.470705211162567,0.826135098934174,-0.33500149846077,0.453072637319565,-0.0856366232037544,-0.288858771324158,0.953533947467804,0.306766599416733,-0.118459150195122,0.944384276866913,0.15803250670433,0.792331993579865,0.589267194271088,-0.390775978565216,0.856176793575287,0.33801680803299,-0.441097885370255,0.233705267310143,0.866495549678802,0.395615637302399,-0.602471053600311,-0.693193197250366,0.722060799598694,-0.55972957611084,0.406609207391739,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.709003865718842,-0.541708588600159,-0.451514542102814,0.712908089160919,0.682124614715576,-0.162689983844757,0.650463998317719,0.740020751953125,-0.17107281088829,0.863034009933472,-0.335786014795303,-0.377385854721069,0.958362102508545,-0.256494760513306,0.125509008765221,0.282899409532547,-0.764817476272583,-0.578811049461365,0.705481588840485,-0.662966072559357,0.250542849302292,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.557026326656342,-0.731577575206757,-0.393085092306137,0.733190476894379,0.653582632541656,-0.187780305743217,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.680100440979004,-0.471440553665161,-0.56143319606781,0.717039883136749,0.690781950950623,-0.093134693801403,0.717039883136749,0.690781950950623,-0.093134693801403,0.680100440979004,-0.471440553665161,-0.56143319606781,0.94776064157486,-0.269029140472412,-0.171385690569878,0.702042996883392,0.707515120506287,-0.0809817835688591,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.248996630311012,-0.917850255966187,0.309114128351212,0.94776064157486,-0.269029140472412,-0.171385690569878,0.680100440979004,-0.471440553665161,-0.56143319606781,0.445575773715973,0.0603602342307568,-0.89320707321167, 0.305622786283493,0.734605193138123,-0.605763852596283,0.647232055664063,0.709673702716827,-0.278305619955063,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.596384108066559,0.73188179731369,0.329658985137939,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.615695953369141,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.615695953369141,0.768994450569153,0.171947792172432,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.390775978565216,0.856176793575287,0.33801680803299,-0.748181462287903,0.587628781795502,0.308085918426514,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802,-0.916947364807129,0.362371772527695,0.167015537619591,-0.893702745437622,0.422671109437943,0.150480940937996,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.847357213497162,0.513431549072266,0.135549783706665,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.755123674869537,0.652067303657532,0.067797377705574,-0.729536950588226,0.676141858100891,0.102995604276657,-0.847357213497162,0.513431549072266,0.135549783706665,-0.719103634357452,0.620088398456573,0.313656359910965,-0.661795377731323,0.713703334331512,0.229465648531914,-0.382025182247162,0.832321286201477,0.401619255542755,-0.416523069143295,0.747589528560638,0.517318487167358,-0.732339918613434,0.57999724149704,0.356765151023865,-0.719103634357452,0.620088398456573,0.313656359910965,-0.416523069143295,0.747589528560638,0.517318487167358,-0.404268890619278,0.753554701805115,0.518383979797363,0.640394508838654,0.754049122333527,-0.145961552858353,0.709426641464233,0.694044709205627,-0.122539132833481, 0.676984488964081,0.720325291156769,-0.15107424557209,0.660727977752686,0.731441617012024,-0.168617248535156,0.471274465322495,0.860716044902802,0.192531242966652,0.602886617183685,0.797378718852997,-0.0267372038215399,0.644031763076782,0.764946699142456,0.00891874358057976,0.508786737918854,0.827319860458374,0.238071173429489,0.740322411060333,0.655164897441864,-0.150604203343391,0.632998824119568,0.753636837005615,-0.177042677998543,0.660727977752686,0.731441617012024,-0.168617248535156,0.676984488964081,0.720325291156769,-0.15107424557209,0.664407253265381,0.746931552886963,0.0256172958761454,0.526539385318756,0.801656424999237,0.283025234937668,0.508786737918854,0.827319860458374,0.238071173429489,0.644031763076782,0.764946699142456,0.00891874358057976,0.719630718231201,0.67299348115921,-0.170913383364677,0.727223694324493,0.663318991661072,-0.176503792405128,0.73427015542984,0.669211447238922,-0.114032231271267,0.774570941925049,0.617026031017303,-0.138991788029671,0.834402143955231,0.550802052021027,0.0197512619197369,0.719630718231201,0.67299348115921,-0.170913383364677,0.774570941925049,0.617026031017303,-0.138991788029671,0.75202214717865,0.649503469467163,-0.112284608185291,0.75202214717865,0.649503469467163,-0.112284608185291,0.774570941925049,0.617026031017303,-0.138991788029671,0.789476454257965,0.597960650920868,-0.13845556974411,0.972268581390381,0.233539223670959,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.774570941925049,0.617026031017303,-0.138991788029671,0.73427015542984,0.669211447238922,-0.114032231271267,0.749007403850555,0.651603639125824,-0.120002605021,0.704592168331146,0.64562314748764,-0.294483780860901,0.789476454257965,0.597960650920868,-0.13845556974411,0.749007403850555,0.651603639125824,-0.120002605021,0.678524672985077,0.663206517696381,-0.31585019826889,0.972268581390381,0.233539223670959,0.0123813217505813,0.789476454257965,0.597960650920868,-0.13845556974411,0.704592168331146,0.64562314748764,-0.294483780860901,0.721381485462189,0.602611780166626,-0.341273874044418, 0.320632994174957,0.735152721405029,-0.597281336784363,0.350197345018387,0.67135888338089,-0.653176128864288,0.721381485462189,0.602611780166626,-0.341273874044418,0.704592168331146,0.64562314748764,-0.294483780860901,0.300025343894959,0.704358696937561,-0.643322348594666,0.320632994174957,0.735152721405029,-0.597281336784363,0.704592168331146,0.64562314748764,-0.294483780860901,0.678524672985077,0.663206517696381,-0.31585019826889,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.947628021240234,0.25655260682106,0.190215468406677,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.970878839492798,0.173829272389412,0.164856299757957,-0.713916778564453,0.653736412525177,0.250901401042938,-0.723107695579529,0.620889544487,0.302673906087875,-0.855198562145233,0.434895634651184,0.281959563493729,-0.793782532215118,0.557114601135254,0.243993073701859,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.738506555557251,0.594659924507141,0.317785561084747, -0.767313361167908,0.622622489929199,0.153530210256577,-0.896252572536469,0.421273946762085,0.13877908885479,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479,-0.767313361167908,0.622622489929199,0.153530210256577,-0.755123674869537,0.652067303657532,0.067797377705574,-0.882212042808533,0.466362148523331,0.0648713782429695,0.144893497228622,0.857636988162994,0.493421345949173,0.128903344273567,0.870382189750671,0.475203901529312,0.508786737918854,0.827319860458374,0.238071173429489,0.526539385318756,0.801656424999237,0.283025234937668,0.130269169807434,0.905642747879028,0.403535813093185,0.471274465322495,0.860716044902802,0.192531242966652,0.508786737918854,0.827319860458374,0.238071173429489,0.128903344273567,0.870382189750671,0.475203901529312,0.669141590595245,0.742036402225494,-0.0403924956917763,0.891577959060669,0.451291143894196,-0.0377500578761101,0.906549096107483,0.409386813640594,-0.10281577706337,0.667402267456055,0.744479417800903,-0.0180171187967062,0.71388167142868,0.36040398478508,0.60040146112442,0.911552846431732,0.361514419317245,0.195904940366745,0.664968013763428,0.745313882827759,0.0482159033417702,0.57691216468811,0.718079447746277,0.389273971319199,0.909856855869293,0.391187816858292,0.138320595026016,0.752071380615234,0.531812727451324,0.389312088489532,0.660223960876465,0.688790857791901,0.299451887607574,0.816485822200775,0.512709319591522,0.265480846166611,0.752071380615234,0.531812727451324,0.389312088489532,0.646896421909332,0.568208158016205,0.508590698242188,0.563141405582428,0.729207217693329,0.388752609491348,0.660223960876465,0.688790857791901,0.299451887607574,-0.320559352636337,0.729658544063568,0.604019939899445,0.202111423015594,0.805501997470856,0.557061493396759,0.0790780261158943,0.992485880851746,0.0933722630143166,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,-0.76466292142868,0.188213840126991,0.616332828998566,-0.367227405309677,0.346865743398666,0.863034307956696, -0.320559352636337,0.729658544063568,0.604019939899445,-0.520070433616638,0.75630134344101,0.396906822919846,-0.941741049289703,0.11614803224802,0.315647661685944,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.413429826498032,0.428489029407501,0.803413331508636,-0.910823285579681,0.270006507635117,0.312245815992355,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.941741049289703,0.11614803224802,0.315647661685944,-0.602918326854706,0.515652418136597,0.608762681484222,-0.910823285579681,0.270006507635117,0.312245815992355,-0.413429826498032,0.428489029407501,0.803413331508636,-0.229550525546074,0.57556563615799,0.784876227378845,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.187374100089073,0.574305176734924,0.796909391880035,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.602918326854706,0.515652418136597,0.608762681484222,-0.229550525546074,0.57556563615799,0.784876227378845,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.187374100089073,0.574305176734924,0.796909391880035,0.407288730144501,0.570921003818512,0.712857067584991,0.389561533927917,-0.19174836575985,0.900818705558777,0.21311217546463,-0.0906343460083008,0.972814798355103,0.407288730144501,0.570921003818512,0.712857067584991,0.402498751878738,0.624280869960785,0.669528305530548,0.646896421909332,0.568208158016205,0.508590698242188,0.659538865089417,0.541105449199677,0.521740734577179,0.646896421909332,0.568208158016205,0.508590698242188,0.752071380615234,0.531812727451324,0.389312088489532,0.861413061618805,0.450139224529266,0.23524908721447,0.659538865089417,0.541105449199677,0.521740734577179,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.505573391914368,0.856702506542206,0.102256529033184,-0.261382013559341,0.943598508834839,-0.203227147459984,0.331241726875305,0.767114758491516,0.549375832080841,0.563141405582428,0.729207217693329,0.388752609491348, 0.646896421909332,0.568208158016205,0.508590698242188,0.402498751878738,0.624280869960785,0.669528305530548,0.699552476406097,0.686574220657349,0.198096364736557,0.923372685909271,0.289373397827148,-0.252281337976456,0.800276219844818,0.427209228277206,-0.420773357152939,0.633913099765778,0.759061396121979,-0.14825627207756,0.837489545345306,-0.137019574642181,0.528996109962463,0.80286830663681,0.57996016740799,0.138016909360886,0.69953316450119,0.693202435970306,-0.173562079668045,0.244611874222755,0.194429770112038,-0.949927449226379,0.421845316886902,0.35173287987709,-0.835661768913269,0.272203177213669,0.658502519130707,-0.701626539230347,0.458068341016769,-0.324115723371506,-0.827721178531647,0.246746584773064,-0.163684040307999,-0.955156326293945,0.244611874222755,0.194429770112038,-0.949927449226379,0.397901266813278,0.642865896224976,-0.65452116727829,0.421845316886902,0.35173287987709,-0.835661768913269,0.244611874222755,0.194429770112038,-0.949927449226379,0.69953316450119,0.693202435970306,-0.173562079668045,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.859436213970184,0.509185254573822,0.04582304880023,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.65424633026123,0.624168395996094,0.42705449461937,-0.93314254283905,0.297381490468979,0.20201313495636,-0.970878839492798,0.173829272389412,0.164856299757957, -0.599660336971283,0.629722774028778,0.493818551301956,0.393562316894531,0.580699145793915,-0.71266907453537,0.305637389421463,0.797388851642609,-0.520342946052551,0.633913099765778,0.759061396121979,-0.14825627207756,0.800276219844818,0.427209228277206,-0.420773357152939,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.723603487014771,0.683223187923431,0.098000094294548,-0.367227405309677,0.346865743398666,0.863034307956696,0.270604372024536,0.441341161727905,0.855564832687378,0.202111423015594,0.805501997470856,0.557061493396759,-0.320559352636337,0.729658544063568,0.604019939899445,0.305637389421463,0.797388851642609,-0.520342946052551,0.393562316894531,0.580699145793915,-0.71266907453537,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.13304828107357,0.622710764408112,-0.771057367324829,0.929460346698761,0.351613759994507,-0.111674785614014,0.861413061618805,0.450139224529266,0.23524908721447,0.752071380615234,0.531812727451324,0.389312088489532,0.909856855869293,0.391187816858292,0.138320595026016,0.644031763076782,0.764946699142456,0.00891874358057976,0.660727977752686,0.731441617012024,-0.168617248535156,0.632998824119568,0.753636837005615,-0.177042677998543,0.664407253265381,0.746931552886963,0.0256172958761454,0.686884999275208,0.723168194293976,-0.0722270235419273,0.664968013763428,0.745313882827759,0.0482159033417702,0.911552846431732,0.361514419317245,0.195904940366745,0.905105113983154,0.409709811210632,-0.113677680492401,0.664968013763428,0.745313882827759,0.0482159033417702,0.686884999275208,0.723168194293976,-0.0722270235419273,0.559431314468384,0.828812599182129,0.0103096608072519,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.311181366443634,0.925608515739441,0.215441450476646,0.0790780261158943,0.992485880851746,0.0933722630143166,0.127702310681343,0.976085126399994,0.17592579126358,-0.227211818099022,0.921236872673035,0.315748959779739,-0.597852468490601,0.634572565555573,0.48978579044342, -0.227211818099022,0.921236872673035,0.315748959779739,-0.505573391914368,0.856702506542206,0.102256529033184,-0.780855476856232,0.547496676445007,0.300852298736572,-0.826885998249054,0.483063906431198,0.287938833236694,-0.796578586101532,0.576386690139771,0.182320937514305,-0.719103634357452,0.620088398456573,0.313656359910965,-0.732339918613434,0.57999724149704,0.356765151023865,-0.796578586101532,0.576386690139771,0.182320937514305,-0.703840732574463,0.696332275867462,0.140461906790733,-0.661795377731323,0.713703334331512,0.229465648531914,-0.719103634357452,0.620088398456573,0.313656359910965,-0.819103717803955,0.554178774356842,0.148171976208687,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.748181462287903,0.587628781795502,0.308085918426514,0.384443372488022,-0.766655147075653,-0.514240384101868,0.666895627975464,-0.56043928861618,0.491078466176987,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.685397565364838,-0.694672048091888,-0.21831376850605,0.602886617183685,0.797378718852997,-0.0267372038215399,0.640394508838654,0.754049122333527,-0.145961552858353,0.660727977752686,0.731441617012024,-0.168617248535156,0.644031763076782,0.764946699142456,0.00891874358057976,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.807652175426483,0.443565607070923,0.388519644737244,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483,0.443565607070923,0.388519644737244,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.762878954410553,0.502556443214417,0.40675875544548,0.305622786283493,0.734605193138123,-0.605763852596283,0.445575773715973,0.0603602342307568,-0.89320707321167,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.1213503703475,0.714234888553619,-0.689305901527405,0.906213641166687,0.328242212533951,-0.266521811485291,0.957429826259613,0.286321878433228,0.0367136411368847, 0.909856855869293,0.391187816858292,0.138320595026016,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.828168988227844,0.353571265935898,-0.434883326292038,0.923372685909271,0.289373397827148,-0.252281337976456,0.936574637889862,0.00382779608480632,-0.350447237491608,0.426684230566025,0.0072528044693172,-0.904371619224548,0.430813550949097,0.499041706323624,-0.751902282238007,0.828168988227844,0.353571265935898,-0.434883326292038,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.430813550949097,0.499041706323624,-0.751902282238007,0.426684230566025,0.0072528044693172,-0.904371619224548,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.896252572536469,0.421273946762085,0.13877908885479,-0.882212042808533,0.466362148523331,0.0648713782429695,-0.893702745437622,0.422671109437943,0.150480940937996,-0.891313374042511,0.424901962280273,0.158173263072968,-0.797426640987396,0.177673250436783,0.576665341854095,-0.878546297550201,0.378490209579468,0.291378676891327,-0.896252572536469,0.421273946762085,0.13877908885479,-0.891313374042511,0.424901962280273,0.158173263072968,-0.870848000049591,0.464649707078934,0.160388261079788,-0.793782532215118,0.557114601135254,0.243993073701859,-0.855198562145233,0.434895634651184,0.281959563493729,-0.908547103404999,0.339473843574524,0.243515312671661,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.500399649143219,0.708592295646667,-0.497490882873535,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.809561967849731,0.578427612781525,-0.10015495121479,0.647232055664063,0.709673702716827,-0.278305619955063,0.678524672985077,0.663206517696381,-0.31585019826889,0.749007403850555,0.651603639125824,-0.120002605021,0.702042996883392,0.707515120506287,-0.0809817835688591,0.73427015542984,0.669211447238922,-0.114032231271267,0.717039883136749,0.690781950950623,-0.093134693801403,0.702042996883392,0.707515120506287,-0.0809817835688591,0.749007403850555,0.651603639125824,-0.120002605021, 0.727223694324493,0.663318991661072,-0.176503792405128,0.733190476894379,0.653582632541656,-0.187780305743217,0.717039883136749,0.690781950950623,-0.093134693801403,0.73427015542984,0.669211447238922,-0.114032231271267,0.709426641464233,0.694044709205627,-0.122539132833481,0.640394508838654,0.754049122333527,-0.145961552858353,0.650463998317719,0.740020751953125,-0.17107281088829,0.712908089160919,0.682124614715576,-0.162689983844757,0.640394508838654,0.754049122333527,-0.145961552858353,0.602886617183685,0.797378718852997,-0.0267372038215399,0.752064108848572,0.658552646636963,-0.0266083907335997,0.650463998317719,0.740020751953125,-0.17107281088829,0.602886617183685,0.797378718852997,-0.0267372038215399,0.471274465322495,0.860716044902802,0.192531242966652,0.599858105182648,0.75833523273468,0.255142837762833,0.752064108848572,0.658552646636963,-0.0266083907335997,0.471274465322495,0.860716044902802,0.192531242966652,0.130269169807434,0.905642747879028,0.403535813093185,0.15803250670433,0.792331993579865,0.589267194271088,0.599858105182648,0.75833523273468,0.255142837762833,-0.661795377731323,0.713703334331512,0.229465648531914,-0.748181462287903,0.587628781795502,0.308085918426514,-0.390775978565216,0.856176793575287,0.33801680803299,-0.382025182247162,0.832321286201477,0.401619255542755,-0.703840732574463,0.696332275867462,0.140461906790733,-0.819103717803955,0.554178774356842,0.148171976208687,-0.748181462287903,0.587628781795502,0.308085918426514,-0.661795377731323,0.713703334331512,0.229465648531914,-0.755123674869537,0.652067303657532,0.067797377705574,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.729536950588226,0.676141858100891,0.102995604276657,-0.755123674869537,0.652067303657532,0.067797377705574,-0.767313361167908,0.622622489929199,0.153530210256577,-0.615695953369141,0.768994450569153,0.171947792172432,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.738506555557251,0.594659924507141,0.317785561084747,-0.596384108066559,0.73188179731369,0.329658985137939, -0.615695953369141,0.768994450569153,0.171947792172432,-0.767313361167908,0.622622489929199,0.153530210256577,-0.613772094249725,0.718873798847198,0.326349943876266,-0.723107695579529,0.620889544487,0.302673906087875,-0.713916778564453,0.653736412525177,0.250901401042938,-0.63234806060791,0.720907807350159,0.283598214387894,-0.483161300420761,0.708275854587555,-0.514684855937958,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.483161300420761,0.708275854587555,-0.514684855937958,0.305622786283493,0.734605193138123,-0.605763852596283,0.300025343894959,0.704358696937561,-0.643322348594666,0.678524672985077,0.663206517696381,-0.31585019826889,0.647232055664063,0.709673702716827,-0.278305619955063,-0.732339918613434,0.57999724149704,0.356765151023865,-0.76466292142868,0.188213840126991,0.616332828998566,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.826885998249054,0.483063906431198,0.287938833236694,-0.404268890619278,0.753554701805115,0.518383979797363,-0.367227405309677,0.346865743398666,0.863034307956696,-0.76466292142868,0.188213840126991,0.616332828998566,-0.732339918613434,0.57999724149704,0.356765151023865,0.144893497228622,0.857636988162994,0.493421345949173,0.270604372024536,0.441341161727905,0.855564832687378,-0.367227405309677,0.346865743398666,0.863034307956696,-0.404268890619278,0.753554701805115,0.518383979797363,0.526539385318756,0.801656424999237,0.283025234937668,0.664407253265381,0.746931552886963,0.0256172958761454,0.911552846431732,0.361514419317245,0.195904940366745,0.71388167142868,0.36040398478508,0.60040146112442,0.664407253265381,0.746931552886963,0.0256172958761454,0.632998824119568,0.753636837005615,-0.177042677998543,0.905105113983154,0.409709811210632,-0.113677680492401,0.911552846431732,0.361514419317245,0.195904940366745, 0.834402143955231,0.550802052021027,0.0197512619197369,0.75202214717865,0.649503469467163,-0.112284608185291,0.939418137073517,0.146130084991455,-0.310063809156418,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.721381485462189,0.602611780166626,-0.341273874044418,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.936574637889862,0.00382779608480632,-0.350447237491608,0.972268581390381,0.233539223670959,0.0123813217505813,0.350197345018387,0.67135888338089,-0.653176128864288,0.426684230566025,0.0072528044693172,-0.904371619224548,0.842867076396942,-0.00614791456609964,-0.538086712360382,0.721381485462189,0.602611780166626,-0.341273874044418,0.426684230566025,0.0072528044693172,-0.904371619224548,0.350197345018387,0.67135888338089,-0.653176128864288,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.870848000049591,0.464649707078934,0.160388261079788,-0.908547103404999,0.339473843574524,0.243515312671661,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.797426640987396,0.177673250436783,0.576665341854095,-0.891313374042511,0.424901962280273,0.158173263072968,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.893702745437622,0.422671109437943,0.150480940937996,-0.941741049289703,0.11614803224802,0.315647661685944,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.891313374042511,0.424901962280273,0.158173263072968,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.712531268596649,-0.546411395072937,-0.440152049064636,0.43010625243187,-0.644480228424072,-0.632181823253632,0.695957362651825,-0.547607183456421,0.464510202407837,0.360958188772202,-0.844728171825409,-0.395149946212769, 0.668817698955536,-0.562513530254364,0.486067235469818,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.595698416233063,-0.718034863471985,-0.359957367181778,0.350197345018387,0.67135888338089,-0.653176128864288,0.320632994174957,0.735152721405029,-0.597281336784363,-0.139554515480995,0.707306146621704,-0.692995369434357,-0.177267998456955,0.365929782390594,-0.913603544235229,0.320632994174957,0.735152721405029,-0.597281336784363,0.300025343894959,0.704358696937561,-0.643322348594666,-0.143811345100403,0.67733633518219,-0.721480309963226,-0.139554515480995,0.707306146621704,-0.692995369434357,0.144893497228622,0.857636988162994,0.493421345949173,-0.404268890619278,0.753554701805115,0.518383979797363,-0.416523069143295,0.747589528560638,0.517318487167358,0.128903344273567,0.870382189750671,0.475203901529312,0.128903344273567,0.870382189750671,0.475203901529312,-0.416523069143295,0.747589528560638,0.517318487167358,-0.382025182247162,0.832321286201477,0.401619255542755,0.130269169807434,0.905642747879028,0.403535813093185,0.57691216468811,0.718079447746277,0.389273971319199,0.392663985490799,0.918741226196289,-0.0415881127119064,0.0790780261158943,0.992485880851746,0.0933722630143166,0.202111423015594,0.805501997470856,0.557061493396759,-0.187374100089073,0.574305176734924,0.796909391880035,-0.00418555224314332,0.628182470798492,0.77805483341217,0.402498751878738,0.624280869960785,0.669528305530548,0.407288730144501,0.570921003818512,0.712857067584991,0.331241726875305,0.767114758491516,0.549375832080841,0.402498751878738,0.624280869960785,0.669528305530548,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.0206129420548677,0.755090236663818,0.655296742916107,0.272203177213669,0.658502519130707,-0.701626539230347,0.421845316886902,0.35173287987709,-0.835661768913269,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.122567981481552,0.664539813995361,-0.737132251262665,0.421845316886902,0.35173287987709,-0.835661768913269,0.397901266813278,0.642865896224976,-0.65452116727829,-0.154303342103958,0.42424476146698,-0.892304241657257, -0.180025935173035,0.229685723781586,-0.956470131874084,0.71388167142868,0.36040398478508,0.60040146112442,0.57691216468811,0.718079447746277,0.389273971319199,0.202111423015594,0.805501997470856,0.557061493396759,0.270604372024536,0.441341161727905,0.855564832687378,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.178336516022682,0.738517105579376,-0.650221943855286,0.127702310681343,0.976085126399994,0.17592579126358,0.0790780261158943,0.992485880851746,0.0933722630143166,0.392663985490799,0.918741226196289,-0.0415881127119064,0.410511314868927,0.907221972942352,0.0918079540133476,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.391103774309158,-0.641535997390747,-0.659901022911072,0.705251514911652,-0.583878755569458,0.402126759290695,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.627380669116974,0.542527735233307,-0.558620691299438,0.15803250670433,0.792331993579865,0.589267194271088,0.130269169807434,0.905642747879028,0.403535813093185,-0.382025182247162,0.832321286201477,0.401619255542755,-0.390775978565216,0.856176793575287,0.33801680803299,0.300025343894959,0.704358696937561,-0.643322348594666,0.305622786283493,0.734605193138123,-0.605763852596283,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.143811345100403,0.67733633518219,-0.721480309963226,0.144893497228622,0.857636988162994,0.493421345949173,0.526539385318756,0.801656424999237,0.283025234937668,0.71388167142868,0.36040398478508,0.60040146112442,0.270604372024536,0.441341161727905,0.855564832687378,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.546093344688416,0.623855113983154,-0.559094667434692,-0.674115240573883,-0.0423770807683468,-0.73740953207016,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.198126822710037,0.0765142217278481,-0.977185368537903, -0.147367119789124,-0.401798576116562,-0.903792500495911,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.648241400718689,-0.506932020187378,-0.568157553672791,0.11251799762249,-0.874383747577667,-0.472009360790253,0.323624908924103,-0.91464102268219,0.242278248071671,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.459699690341949,-0.614600598812103,-0.641047835350037,0.596454858779907,-0.699761033058167,0.393161594867706,-0.412575572729111,-0.667341589927673,0.620029509067535,0.773792564868927,-0.604486048221588,-0.189318999648094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.724370777606964,-0.668023824691772,0.170385435223579,-0.195960268378258,-0.58412891626358,-0.787650287151337,0.723087668418884,-0.507770240306854,-0.468309193849564,0.581261336803436,-0.682449996471405,0.443167299032211,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.147367119789124,-0.401798576116562,-0.903792500495911,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.964107573032379,-0.248898640275002,-0.0924450159072876,0.259815812110901,-0.928046464920044,-0.266881018877029,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.671025335788727,-0.589844524860382,-0.449230968952179,0.259815812110901,-0.928046464920044,-0.266881018877029,0.303018242120743,-0.938679337501526,0.164502277970314,0.596454858779907,-0.699761033058167,0.393161594867706,0.459699690341949,-0.614600598812103,-0.641047835350037,-0.412575572729111,-0.667341589927673,0.620029509067535,0.596454858779907,-0.699761033058167,0.393161594867706,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.964107573032379,-0.248898640275002,-0.0924450159072876, -0.671025335788727,-0.589844524860382,-0.449230968952179,-0.412575572729111,-0.667341589927673,0.620029509067535,0.0517410226166248,-0.448791861534119,-0.892137169837952,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.37071630358696,-0.925935029983521,-0.0722067281603813,0.768725872039795,-0.625621736049652,-0.132883325219154,0.311763882637024,-0.736566185951233,0.600227952003479,0.414378970861435,-0.480131238698959,0.773152053356171,0.768725872039795,-0.625621736049652,-0.132883325219154,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.47402635216713,-0.576445937156677,0.665589272975922,0.414378970861435,-0.480131238698959,0.773152053356171,0.311763882637024,-0.736566185951233,0.600227952003479,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.628591358661652,-0.444956004619598,-0.637876987457275,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.0855747610330582,-0.285937398672104,-0.954419612884521,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.773792564868927,-0.604486048221588,-0.189318999648094,0.542883396148682,-0.82672655582428,-0.147651195526123,0.0959865897893906,-0.91358608007431,0.395154505968094,0.180837735533714,-0.611773073673248,0.770085334777832,-0.518468260765076,-0.848432958126068,0.106546267867088,-0.724370777606964,-0.668023824691772,0.170385435223579,0.180837735533714,-0.611773073673248,0.770085334777832,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.195960268378258,-0.58412891626358,-0.787650287151337,-0.724370777606964,-0.668023824691772,0.170385435223579,-0.518468260765076,-0.848432958126068,0.106546267867088,0.542883396148682,-0.82672655582428,-0.147651195526123,0.773792564868927,-0.604486048221588,-0.189318999648094,-0.195960268378258,-0.58412891626358,-0.787650287151337, -0.106877580285072,-0.900658130645752,-0.421179503202438,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.437470376491547,-0.700090348720551,0.564352035522461,-0.259535163640976,-0.932749211788177,0.250240743160248,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.723087668418884,-0.507770240306854,-0.468309193849564,-0.349896788597107,-0.784230768680573,-0.512400567531586,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.464242339134216,-0.872838377952576,-0.150440022349358,0.581261336803436,-0.682449996471405,0.443167299032211,0.723087668418884,-0.507770240306854,-0.468309193849564,0.464242339134216,-0.872838377952576,-0.150440022349358,0.323624908924103,-0.91464102268219,0.242278248071671,-0.437470376491547,-0.700090348720551,0.564352035522461,0.581261336803436,-0.682449996471405,0.443167299032211,0.323624908924103,-0.91464102268219,0.242278248071671,-0.259535163640976,-0.932749211788177,0.250240743160248,0.810118317604065,-0.284595668315887,-0.51255601644516,0.94776064157486,-0.269029140472412,-0.171385690569878,0.631753981113434,-0.695992708206177,0.341293185949326,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.438560724258423,-0.682490348815918,0.584697723388672,0.631753981113434,-0.695992708206177,0.341293185949326,0.94776064157486,-0.269029140472412,-0.171385690569878,-0.507440745830536,-0.861680686473846,0.00320725026540458,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.248996630311012,-0.917850255966187,0.309114128351212,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.810118317604065,-0.284595668315887,-0.51255601644516,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.165543153882027,-0.540198087692261,-0.825094819068909,-0.0872491747140884,-0.891694486141205,-0.444149196147919, 0.445575773715973,0.0603602342307568,-0.89320707321167,0.308205276727676,-0.725507915019989,-0.615343689918518,-0.147367119789124,-0.401798576116562,-0.903792500495911,-0.198126822710037,0.0765142217278481,-0.977185368537903,0.308205276727676,-0.725507915019989,-0.615343689918518,0.445575773715973,0.0603602342307568,-0.89320707321167,0.885131120681763,0.0417929887771606,-0.463461130857468,0.620603084564209,-0.695841789245605,-0.361463725566864,0.259815812110901,-0.928046464920044,-0.266881018877029,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.739399552345276,-0.3774254322052,0.557528793811798,0.311763882637024,-0.736566185951233,0.600227952003479,0.259815812110901,-0.928046464920044,-0.266881018877029,0.311763882637024,-0.736566185951233,0.600227952003479,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.518468260765076,-0.848432958126068,0.106546267867088,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.518468260765076,-0.848432958126068,0.106546267867088,0.0959865897893906,-0.91358608007431,0.395154505968094,0.464242339134216,-0.872838377952576,-0.150440022349358,-0.149650141596794,-0.977229058742523,-0.150426745414734,0.0959865897893906,-0.91358608007431,0.395154505968094,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.464242339134216,-0.872838377952576,-0.150440022349358,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.262460768222809,-0.84521484375,0.465538620948792,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.663442015647888,-0.730678915977478,-0.161099418997765,0.551329076290131,-0.7074014544487,-0.442288815975189,0.631753981113434,-0.695992708206177,0.341293185949326,-0.438560724258423,-0.682490348815918,0.584697723388672,-0.326672613620758,-0.732156813144684,0.597688376903534,-0.262460768222809,-0.84521484375,0.465538620948792,-0.648241400718689,-0.506932020187378,-0.568157553672791,-0.635097622871399,-0.770463764667511,-0.0551051236689091,-0.262460768222809,-0.84521484375,0.465538620948792, -0.326672613620758,-0.732156813144684,0.597688376903534,-0.3234041929245,-0.738465428352356,0.591674447059631,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.326672613620758,-0.732156813144684,0.597688376903534,0.308205276727676,-0.725507915019989,-0.615343689918518,0.620603084564209,-0.695841789245605,-0.361463725566864,-0.3234041929245,-0.738465428352356,0.591674447059631,0.542883396148682,-0.82672655582428,-0.147651195526123,-0.106877580285072,-0.900658130645752,-0.421179503202438,-0.262460768222809,-0.84521484375,0.465538620948792,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.333872824907303,-0.734721601009369,0.590519309043884,-0.3234041929245,-0.738465428352356,0.591674447059631,0.348949402570724,-0.852244853973389,0.389760226011276,0.798132300376892,-0.595748007297516,0.0898283571004868,-0.333872824907303,-0.734721601009369,0.590519309043884,0.798132300376892,-0.595748007297516,0.0898283571004868,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.598684787750244,-0.729470372200012,-0.330831557512283,0.478905141353607,-0.688271880149841,-0.544914424419403,0.691426575183868,-0.534520328044891,0.486021935939789,-0.29621621966362,-0.72027575969696,0.627262949943542,-0.593355655670166,-0.709652066230774,-0.379898726940155,0.420935273170471,-0.595206916332245,-0.68450140953064,0.750927150249481,-0.519762933254242,0.407375574111938,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.522674918174744,-0.84270977973938,-0.129039376974106,0.338333457708359,-0.796955585479736,-0.500392079353333,0.695649981498718,-0.635026633739471,0.335875421762466,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.261420041322708,-0.954043209552765,0.146496221423149,0.181094169616699,-0.00969368312507868,0.983417987823486,0.306766599416733,-0.118459150195122,0.944384276866913,0.306935548782349,-0.919691801071167,0.244862332940102, 0.201402872800827,-0.92625367641449,-0.318576484918594,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.191650345921516,-0.911473035812378,0.363987594842911,0.400767505168915,-0.84773463010788,0.347464233636856,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.118260890245438,-0.832547545433044,0.541182935237885,0.362296313047409,-0.902348458766937,0.233470931649208,0.128298655152321,-0.92551976442337,-0.356304168701172,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.23048010468483,-0.946770489215851,0.224732384085655,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.192425131797791,-0.974552154541016,0.114980764687061,0.706917345523834,-0.10402026027441,0.699605345726013,0.814850926399231,-0.0293116569519043,0.57892906665802,0.395999073982239,-0.883323311805725,0.250847846269608,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.211911484599113,-0.951958835124969,-0.221060931682587,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.312811404466629,-0.918802440166473,-0.240730464458466,-0.18037211894989,-0.916134774684906,0.357998490333557,0.339713275432587,-0.937209665775299,0.0789491534233093,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.900666117668152,-0.271470487117767,0.339270144701004,0.362296313047409,-0.902348458766937,0.233470931649208,-0.191650345921516,-0.911473035812378,0.363987594842911,0.395999073982239,-0.883323311805725,0.250847846269608,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.23048010468483,-0.946770489215851,0.224732384085655,0.339713275432587,-0.937209665775299,0.0789491534233093,0.200983673334122,-0.912257730960846,-0.356919288635254,0.207811132073402,-0.962575078010559,-0.173964589834213,-0.812849164009094,-0.351107835769653,0.46475750207901, -0.665187239646912,-0.279087424278259,0.692557692527771,0.400767505168915,-0.84773463010788,0.347464233636856,0.295632928609848,-0.949930250644684,-0.101162008941174,0.339781612157822,-0.868737816810608,0.360337436199188,-0.192425131797791,-0.974552154541016,0.114980764687061,0.958362102508545,-0.256494760513306,0.125509008765221,0.863034009933472,-0.335786014795303,-0.377385854721069,-0.314595848321915,-0.93869549036026,-0.140997022390366,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.18037211894989,-0.916134774684906,0.357998490333557,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.306935548782349,-0.919691801071167,0.244862332940102,-0.191650345921516,-0.911473035812378,0.363987594842911,0.306935548782349,-0.919691801071167,0.244862332940102,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.124663934111595,-0.874086141586304,0.469502240419388,0.912856459617615,-0.241107016801834,0.329485177993774,0.970349192619324,-0.239411205053329,0.0332370884716511,-0.0856366232037544,-0.288858771324158,0.953533947467804,0.826135098934174,-0.33500149846077,0.453072637319565,0.814850926399231,-0.0293116569519043,0.57892906665802,0.181094169616699,-0.00969368312507868,0.983417987823486,0.295632928609848,-0.949930250644684,-0.101162008941174,0.814850926399231,-0.0293116569519043,0.57892906665802,0.826135098934174,-0.33500149846077,0.453072637319565,0.480840384960175,-0.739749372005463,-0.470705211162567,0.480840384960175,-0.739749372005463,-0.470705211162567,-0.64503401517868,-0.763977766036987,0.0164064429700375,-0.261420041322708,-0.954043209552765,0.146496221423149,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.64503401517868,-0.763977766036987,0.0164064429700375, -0.0856366232037544,-0.288858771324158,0.953533947467804,0.181094169616699,-0.00969368312507868,0.983417987823486,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.415498435497284,-0.625033140182495,0.660828769207001,0.722060799598694,-0.55972957611084,0.406609207391739,0.395999073982239,-0.883323311805725,0.250847846269608,0.395615637302399,-0.602471053600311,-0.693193197250366,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395999073982239,-0.883323311805725,0.250847846269608,0.722060799598694,-0.55972957611084,0.406609207391739,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.200983673334122,-0.912257730960846,-0.356919288635254,0.395615637302399,-0.602471053600311,-0.693193197250366,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.389462172985077,-0.886311650276184,-0.250541120767593,-0.709003865718842,-0.541708588600159,-0.451514542102814,-0.415498435497284,-0.625033140182495,0.660828769207001,-0.191650345921516,-0.911473035812378,0.363987594842911,-0.23048010468483,-0.946770489215851,0.224732384085655,-0.466174095869064,-0.668627381324768,0.579326450824738,0.705481588840485,-0.662966072559357,0.250542849302292,0.339713275432587,-0.937209665775299,0.0789491534233093,0.282899409532547,-0.764817476272583,-0.578811049461365,0.11251799762249,-0.874383747577667,-0.472009360790253,0.339713275432587,-0.937209665775299,0.0789491534233093,0.705481588840485,-0.662966072559357,0.250542849302292,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.11251799762249,-0.874383747577667,-0.472009360790253,0.282899409532547,-0.764817476272583,-0.578811049461365,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.557026326656342,-0.731577575206757,-0.393085092306137,-0.466174095869064,-0.668627381324768,0.579326450824738,-0.23048010468483,-0.946770489215851,0.224732384085655,0.384443372488022,-0.766655147075653,-0.514240384101868,0.211911484599113,-0.951958835124969,-0.221060931682587,0.339781612157822,-0.868737816810608,0.360337436199188, 0.666895627975464,-0.56043928861618,0.491078466176987,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.262365102767944,-0.963967621326447,-0.0439423173666,0.211911484599113,-0.951958835124969,-0.221060931682587,0.384443372488022,-0.766655147075653,-0.514240384101868,-0.317059487104416,-0.547120869159698,0.774681866168976,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.262365102767944,-0.963967621326447,-0.0439423173666,-0.685397565364838,-0.694672048091888,-0.21831376850605,-0.317059487104416,-0.547120869159698,0.774681866168976,0.666895627975464,-0.56043928861618,0.491078466176987,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.610171139240265,-0.773055195808411,0.173426955938339,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.441097885370255,0.233705267310143,0.866495549678802,-0.812849164009094,-0.351107835769653,0.46475750207901,-0.441097885370255,0.233705267310143,0.866495549678802,-0.343847513198853,-0.196072369813919,0.918327033519745,0.545981824398041,-0.584509074687958,0.600210785865784,0.306766599416733,-0.118459150195122,0.944384276866913,0.207811132073402,-0.962575078010559,-0.173964589834213,0.306766599416733,-0.118459150195122,0.944384276866913,0.545981824398041,-0.584509074687958,0.600210785865784,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.610171139240265,-0.773055195808411,0.173426955938339,-0.812849164009094,-0.351107835769653,0.46475750207901,0.207811132073402,-0.962575078010559,-0.173964589834213,0.314525902271271,-0.770808696746826,-0.554010331630707,-0.712531268596649,-0.546411395072937,-0.440152049064636,-0.413176447153091,-0.602903425693512,0.682490050792694,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.413176447153091,-0.602903425693512,0.682490050792694,0.695957362651825,-0.547607183456421,0.464510202407837,0.306935548782349,-0.919691801071167,0.244862332940102, 0.306935548782349,-0.919691801071167,0.244862332940102,0.695957362651825,-0.547607183456421,0.464510202407837,0.43010625243187,-0.644480228424072,-0.632181823253632,0.201402872800827,-0.92625367641449,-0.318576484918594,-0.712531268596649,-0.546411395072937,-0.440152049064636,-0.956566870212555,-0.244721978902817,-0.158401101827621,0.201402872800827,-0.92625367641449,-0.318576484918594,0.43010625243187,-0.644480228424072,-0.632181823253632,0.668817698955536,-0.562513530254364,0.486067235469818,0.362296313047409,-0.902348458766937,0.233470931649208,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.450368136167526,-0.655528962612152,0.606176793575287,0.128298655152321,-0.92551976442337,-0.356304168701172,0.362296313047409,-0.902348458766937,0.233470931649208,0.668817698955536,-0.562513530254364,0.486067235469818,0.360958188772202,-0.844728171825409,-0.395149946212769,0.128298655152321,-0.92551976442337,-0.356304168701172,0.360958188772202,-0.844728171825409,-0.395149946212769,-0.595698416233063,-0.718034863471985,-0.359957367181778,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.595698416233063,-0.718034863471985,-0.359957367181778,-0.450368136167526,-0.655528962612152,0.606176793575287,-0.900666117668152,-0.271470487117767,0.339270144701004,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.330185979604721,-0.571054816246033,0.751580774784088,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.717249631881714,-0.625881135463715,-0.306309938430786,0.400767505168915,-0.84773463010788,0.347464233636856,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.330185979604721,-0.571054816246033,0.751580774784088,0.705251514911652,-0.583878755569458,0.402126759290695,0.705251514911652,-0.583878755569458,0.402126759290695,0.391103774309158,-0.641535997390747,-0.659901022911072,0.207801967859268,-0.930255472660065,-0.302395612001419,0.400767505168915,-0.84773463010788,0.347464233636856,-0.717249631881714,-0.625881135463715,-0.306309938430786, -0.939882695674896,-0.341330021619797,0.0106942849233747,0.207801967859268,-0.930255472660065,-0.302395612001419,0.391103774309158,-0.641535997390747,-0.659901022911072,0.0837007611989975,-0.567488670349121,0.819115877151489,0.623615741729736,-0.765475749969482,-0.158588528633118,0.970349192619324,-0.239411205053329,0.0332370884716511,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329,0.0332370884716511,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.668955087661743,-0.737109065055847,-0.0957564637064934,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.192425131797791,-0.974552154541016,0.114980764687061,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.0837007611989975,-0.567488670349121,0.819115877151489,0.706917345523834,-0.10402026027441,0.699605345726013,0.691426575183868,-0.534520328044891,0.486021935939789,0.478905141353607,-0.688271880149841,-0.544914424419403,0.863034009933472,-0.335786014795303,-0.377385854721069,0.912856459617615,-0.241107016801834,0.329485177993774,-0.598684787750244,-0.729470372200012,-0.330831557512283,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.863034009933472,-0.335786014795303,-0.377385854721069,0.478905141353607,-0.688271880149841,-0.544914424419403,-0.301147669553757,-0.68056708574295,0.667935967445374,0.691426575183868,-0.534520328044891,0.486021935939789,0.912856459617615,-0.241107016801834,0.329485177993774,-0.124663934111595,-0.874086141586304,0.469502240419388,0.958362102508545,-0.256494760513306,0.125509008765221,0.750927150249481,-0.519762933254242,0.407375574111938,0.420935273170471,-0.595206916332245,-0.68450140953064,0.794416069984436,-0.305554151535034,-0.524918794631958,-0.593355655670166,-0.709652066230774,-0.379898726940155,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.794416069984436,-0.305554151535034,-0.524918794631958,0.420935273170471,-0.595206916332245,-0.68450140953064,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.326996743679047,-0.921505987644196,-0.209522947669029, -0.593355655670166,-0.709652066230774,-0.379898726940155,-0.29621621966362,-0.72027575969696,0.627262949943542,0.750927150249481,-0.519762933254242,0.407375574111938,0.958362102508545,-0.256494760513306,0.125509008765221,-0.148850679397583,-0.924228370189667,0.351632446050644,-0.29621621966362,-0.72027575969696,0.627262949943542,0.338333457708359,-0.796955585479736,-0.500392079353333,0.680100440979004,-0.471440553665161,-0.56143319606781,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.695649981498718,-0.635026633739471,0.335875421762466,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.680100440979004,-0.471440553665161,-0.56143319606781,0.338333457708359,-0.796955585479736,-0.500392079353333,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.522674918174744,-0.84270977973938,-0.129039376974106,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.312811404466629,-0.918802440166473,-0.240730464458466,0.695649981498718,-0.635026633739471,0.335875421762466,0.931363761425018,-0.361004918813705,-0.0472966246306896,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.310219794511795,-0.605204045772552,0.733138263225555,-0.259535163640976,-0.932749211788177,0.250240743160248,-0.334644585847855,-0.867584347724915,-0.367845624685287,0.128298655152321,-0.92551976442337,-0.356304168701172,0.303018242120743,-0.938679337501526,0.164502277970314,-0.918069899082184,-0.187107101082802,0.349483251571655,0.303018242120743,-0.938679337501526,0.164502277970314,0.128298655152321,-0.92551976442337,-0.356304168701172,-0.907494783401489,-0.352809280157089,-0.22798864543438,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.638639569282532,0.766668856143951,0.0660171955823898,-0.900666117668152,-0.271470487117767,0.339270144701004,0.181094169616699,-0.00969368312507868,0.983417987823486,0.814850926399231,-0.0293116569519043,0.57892906665802,0.599858105182648,0.75833523273468,0.255142837762833, 0.15803250670433,0.792331993579865,0.589267194271088,0.706917345523834,-0.10402026027441,0.699605345726013,0.970349192619324,-0.239411205053329,0.0332370884716511,0.752064108848572,0.658552646636963,-0.0266083907335997,0.599858105182648,0.75833523273468,0.255142837762833,0.912856459617615,-0.241107016801834,0.329485177993774,0.863034009933472,-0.335786014795303,-0.377385854721069,0.650463998317719,0.740020751953125,-0.17107281088829,0.752064108848572,0.658552646636963,-0.0266083907335997,0.864170670509338,0.408057361841202,-0.2944455742836,0.906549096107483,0.409386813640594,-0.10281577706337,0.740322411060333,0.655164897441864,-0.150604203343391,0.600557744503021,0.788931846618652,-0.130065008997917,0.816485822200775,0.512709319591522,0.265480846166611,0.968974769115448,0.149661242961884,0.196696132421494,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.909856855869293,0.391187816858292,0.138320595026016,0.660223960876465,0.688790857791901,0.299451887607574,0.359505623579025,0.919594645500183,-0.158434361219406,0.631004393100739,0.719356596469879,-0.29044708609581,0.816485822200775,0.512709319591522,0.265480846166611,0.331241726875305,0.767114758491516,0.549375832080841,0.00761288125067949,0.965830504894257,-0.259062767028809,0.258335798978806,0.945306360721588,-0.199144557118416,0.563141405582428,0.729207217693329,0.388752609491348,-0.261382013559341,0.943598508834839,-0.203227147459984,-0.505573391914368,0.856702506542206,0.102256529033184,0.0491388663649559,0.993503928184509,-0.102641858160496,0.00761288125067949,0.965830504894257,-0.259062767028809,-0.413429826498032,0.428489029407501,0.803413331508636,-0.941741049289703,0.11614803224802,0.315647661685944,-0.520070433616638,0.75630134344101,0.396906822919846,-0.158630818128586,0.588066816329956,0.793103873729706,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.00418555224314332,0.628182470798492,0.77805483341217,-0.229550525546074,0.57556563615799,0.784876227378845,-0.158630818128586,0.588066816329956,0.793103873729706,-0.261382013559341,0.943598508834839,-0.203227147459984, -0.0206129420548677,0.755090236663818,0.655296742916107,-0.158630818128586,0.588066816329956,0.793103873729706,-0.522960901260376,0.842813611030579,-0.127189248800278,0.00761288125067949,0.965830504894257,-0.259062767028809,0.331241726875305,0.767114758491516,0.549375832080841,-0.0206129420548677,0.755090236663818,0.655296742916107,-0.261382013559341,0.943598508834839,-0.203227147459984,0.494772255420685,0.860163271427155,-0.123772226274014,0.470422744750977,0.855190873146057,-0.217602953314781,0.647329449653625,0.721940755844116,-0.244471147656441,0.669141590595245,0.742036402225494,-0.0403924956917763,0.258335798978806,0.945306360721588,-0.199144557118416,0.303004235029221,0.934939086437225,-0.184600368142128,0.470422744750977,0.855190873146057,-0.217602953314781,0.494772255420685,0.860163271427155,-0.123772226274014,0.00761288125067949,0.965830504894257,-0.259062767028809,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128,0.258335798978806,0.945306360721588,-0.199144557118416,-0.980522751808167,0.123100936412811,0.153040006756783,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572,-0.894985496997833,0.383079677820206,0.228584602475166,-0.980522751808167,0.123100936412811,0.153040006756783,-0.894985496997833,0.383079677820206,0.228584602475166,-0.76461535692215,0.640312731266022,0.0732325837016106,-0.941741049289703,0.11614803224802,0.315647661685944,-0.916947364807129,0.362371772527695,0.167015537619591,-0.847357213497162,0.513431549072266,0.135549783706665,-0.796578586101532,0.576386690139771,0.182320937514305,-0.826885998249054,0.483063906431198,0.287938833236694,-0.703840732574463,0.696332275867462,0.140461906790733,-0.796578586101532,0.576386690139771,0.182320937514305,-0.847357213497162,0.513431549072266,0.135549783706665,-0.729536950588226,0.676141858100891,0.102995604276657,-0.819103717803955,0.554178774356842,0.148171976208687,-0.703840732574463,0.696332275867462,0.140461906790733,-0.729536950588226,0.676141858100891,0.102995604276657, -0.658155262470245,0.750174641609192,0.0637935549020767,-0.76466292142868,0.188213840126991,0.616332828998566,-0.614538252353668,0.667141258716583,0.421028852462769,-0.597852468490601,0.634572565555573,0.48978579044342,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.916947364807129,0.362371772527695,0.167015537619591,-0.980522751808167,0.123100936412811,0.153040006756783,-0.941741049289703,0.11614803224802,0.315647661685944,-0.893702745437622,0.422671109437943,0.150480940937996,-0.780855476856232,0.547496676445007,0.300852298736572,-0.962031662464142,0.166659042239189,0.216147810220718,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.597852468490601,0.634572565555573,0.48978579044342,-0.227211818099022,0.921236872673035,0.315748959779739,-0.597852468490601,0.634572565555573,0.48978579044342,-0.614538252353668,0.667141258716583,0.421028852462769,-0.311181366443634,0.925608515739441,0.215441450476646,-0.227211818099022,0.921236872673035,0.315748959779739,0.127702310681343,0.976085126399994,0.17592579126358,0.0491388663649559,0.993503928184509,-0.102641858160496,-0.505573391914368,0.856702506542206,0.102256529033184,0.127702310681343,0.976085126399994,0.17592579126358,0.410511314868927,0.907221972942352,0.0918079540133476,0.303004235029221,0.934939086437225,-0.184600368142128,0.0491388663649559,0.993503928184509,-0.102641858160496,0.303004235029221,0.934939086437225,-0.184600368142128,0.410511314868927,0.907221972942352,0.0918079540133476,0.559431314468384,0.828812599182129,0.0103096608072519,0.470422744750977,0.855190873146057,-0.217602953314781,-0.826885998249054,0.483063906431198,0.287938833236694,-0.854411065578461,0.0699175223708153,0.514872133731842,-0.962031662464142,0.166659042239189,0.216147810220718,-0.916947364807129,0.362371772527695,0.167015537619591,0.686884999275208,0.723168194293976,-0.0722270235419273,0.647329449653625,0.721940755844116,-0.244471147656441,0.470422744750977,0.855190873146057,-0.217602953314781,0.559431314468384,0.828812599182129,0.0103096608072519,0.905105113983154,0.409709811210632,-0.113677680492401, 0.891577959060669,0.451291143894196,-0.0377500578761101,0.647329449653625,0.721940755844116,-0.244471147656441,0.686884999275208,0.723168194293976,-0.0722270235419273,0.632998824119568,0.753636837005615,-0.177042677998543,0.740322411060333,0.655164897441864,-0.150604203343391,0.891577959060669,0.451291143894196,-0.0377500578761101,0.905105113983154,0.409709811210632,-0.113677680492401,0.676984488964081,0.720325291156769,-0.15107424557209,0.694885969161987,0.706955552101135,-0.131709426641464,0.600557744503021,0.788931846618652,-0.130065008997917,0.740322411060333,0.655164897441864,-0.150604203343391,0.709426641464233,0.694044709205627,-0.122539132833481,0.749488353729248,0.646310150623322,-0.143354311585426,0.694885969161987,0.706955552101135,-0.131709426641464,0.676984488964081,0.720325291156769,-0.15107424557209,0.74595445394516,0.638815522193909,-0.188326209783554,0.733190476894379,0.653582632541656,-0.187780305743217,0.727223694324493,0.663318991661072,-0.176503792405128,0.749488353729248,0.646310150623322,-0.143354311585426,0.958362102508545,-0.256494760513306,0.125509008765221,0.794416069984436,-0.305554151535034,-0.524918794631958,0.74595445394516,0.638815522193909,-0.188326209783554,0.712908089160919,0.682124614715576,-0.162689983844757,0.694885969161987,0.706955552101135,-0.131709426641464,0.719630718231201,0.67299348115921,-0.170913383364677,0.834402143955231,0.550802052021027,0.0197512619197369,0.600557744503021,0.788931846618652,-0.130065008997917,0.694885969161987,0.706955552101135,-0.131709426641464,0.749488353729248,0.646310150623322,-0.143354311585426,0.727223694324493,0.663318991661072,-0.176503792405128,0.719630718231201,0.67299348115921,-0.170913383364677,0.749488353729248,0.646310150623322,-0.143354311585426,0.709426641464233,0.694044709205627,-0.122539132833481,0.712908089160919,0.682124614715576,-0.162689983844757,0.74595445394516,0.638815522193909,-0.188326209783554,0.794416069984436,-0.305554151535034,-0.524918794631958,0.931363761425018,-0.361004918813705,-0.0472966246306896,0.733190476894379,0.653582632541656,-0.187780305743217, 0.74595445394516,0.638815522193909,-0.188326209783554,0.864170670509338,0.408057361841202,-0.2944455742836,0.968974769115448,0.149661242961884,0.196696132421494,0.816485822200775,0.512709319591522,0.265480846166611,0.631004393100739,0.719356596469879,-0.29044708609581,0.359505623579025,0.919594645500183,-0.158434361219406,0.660223960876465,0.688790857791901,0.299451887607574,0.563141405582428,0.729207217693329,0.388752609491348,0.258335798978806,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.494772255420685,0.860163271427155,-0.123772226274014,0.669141590595245,0.742036402225494,-0.0403924956917763,0.667402267456055,0.744479417800903,-0.0180171187967062,0.359505623579025,0.919594645500183,-0.158434361219406,0.47292697429657,0.876888990402222,0.0860569775104523,0.667402267456055,0.744479417800903,-0.0180171187967062,0.631004393100739,0.719356596469879,-0.29044708609581,0.864170670509338,0.408057361841202,-0.2944455742836,0.631004393100739,0.719356596469879,-0.29044708609581,0.667402267456055,0.744479417800903,-0.0180171187967062,0.906549096107483,0.409386813640594,-0.10281577706337,0.600557744503021,0.788931846618652,-0.130065008997917,0.834402143955231,0.550802052021027,0.0197512619197369,0.968974769115448,0.149661242961884,0.196696132421494,0.864170670509338,0.408057361841202,-0.2944455742836,-0.658155262470245,0.750174641609192,0.0637935549020767,-0.956566870212555,-0.244721978902817,-0.158401101827621,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.819103717803955,0.554178774356842,0.148171976208687,0.75202214717865,0.649503469467163,-0.112284608185291,0.972268581390381,0.233539223670959,0.0123813217505813,0.875641047954559,-0.338848143815994,0.34414342045784,0.939418137073517,0.146130084991455,-0.310063809156418,0.905861377716064,-0.279544115066528,0.318229824304581,0.923372685909271,0.289373397827148,-0.252281337976456,0.699552476406097,0.686574220657349,0.198096364736557,0.785714864730835,0.180998295545578,0.591516494750977,0.633913099765778,0.759061396121979,-0.14825627207756, 0.69953316450119,0.693202435970306,-0.173562079668045,0.80286830663681,0.57996016740799,0.138016909360886,0.699552476406097,0.686574220657349,0.198096364736557,0.305637389421463,0.797388851642609,-0.520342946052551,0.397901266813278,0.642865896224976,-0.65452116727829,0.69953316450119,0.693202435970306,-0.173562079668045,0.633913099765778,0.759061396121979,-0.14825627207756,0.397901266813278,0.642865896224976,-0.65452116727829,0.305637389421463,0.797388851642609,-0.520342946052551,-0.13304828107357,0.622710764408112,-0.771057367324829,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.13304828107357,0.622710764408112,-0.771057367324829,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.160101562738419,0.546482741832733,-0.822024405002594,0.921413123607636,-0.245974183082581,0.300823181867599,0.905861377716064,-0.279544115066528,0.318229824304581,0.785714864730835,0.180998295545578,0.591516494750977,0.957429826259613,0.286321878433228,0.0367136411368847,0.699552476406097,0.686574220657349,0.198096364736557,0.80286830663681,0.57996016740799,0.138016909360886,0.957429826259613,0.286321878433228,0.0367136411368847,0.785714864730835,0.180998295545578,0.591516494750977,-0.723107695579529,0.620889544487,0.302673906087875,-0.613772094249725,0.718873798847198,0.326349943876266,-0.596384108066559,0.73188179731369,0.329658985137939,-0.738506555557251,0.594659924507141,0.317785561084747,-0.878546297550201,0.378490209579468,0.291378676891327,-0.855198562145233,0.434895634651184,0.281959563493729,-0.723107695579529,0.620889544487,0.302673906087875,-0.738506555557251,0.594659924507141,0.317785561084747,-0.908547103404999,0.339473843574524,0.243515312671661,-0.855198562145233,0.434895634651184,0.281959563493729,-0.878546297550201,0.378490209579468,0.291378676891327, -0.797426640987396,0.177673250436783,0.576665341854095,-0.797426640987396,0.177673250436783,0.576665341854095,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.908547103404999,0.339473843574524,0.243515312671661,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.599660336971283,0.629722774028778,0.493818551301956,-0.970878839492798,0.173829272389412,0.164856299757957,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.910823285579681,0.270006507635117,0.312245815992355,-0.807652175426483,0.443565607070923,0.388519644737244,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.605723857879639,0.555330216884613,-0.569830656051636,-0.525695741176605,0.742150485515594,-0.415760308504105,-0.723603487014771,0.683223187923431,0.098000094294548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.65424633026123,0.624168395996094,0.42705449461937,-0.599660336971283,0.629722774028778,0.493818551301956,-0.807652175426483,0.443565607070923,0.388519644737244,-0.762878954410553,0.502556443214417,0.40675875544548,-0.599660336971283,0.629722774028778,0.493818551301956,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.807652175426483,0.443565607070923,0.388519644737244,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.814327895641327,-0.0162655301392078,0.580177187919617,-0.494092434644699,0.0352621860802174,0.868693947792053,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.192081272602081,0.0805686637759209,-0.978066205978394, -0.160101562738419,0.546482741832733,-0.822024405002594,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.153654128313065,0.571211874485016,-0.806292414665222,0.414378970861435,-0.480131238698959,0.773152053356171,-0.47402635216713,-0.576445937156677,0.665589272975922,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.628591358661652,-0.444956004619598,-0.637876987457275,0.0517410226166248,-0.448791861534119,-0.892137169837952,0.768725872039795,-0.625621736049652,-0.132883325219154,0.551329076290131,-0.7074014544487,-0.442288815975189,-0.663442015647888,-0.730678915977478,-0.161099418997765,-0.165543153882027,-0.540198087692261,-0.825094819068909,0.348949402570724,-0.852244853973389,0.389760226011276,-0.3234041929245,-0.738465428352356,0.591674447059631,0.620603084564209,-0.695841789245605,-0.361463725566864,-0.343847513198853,-0.196072369813919,0.918327033519745,-0.610171139240265,-0.773055195808411,0.173426955938339,0.314525902271271,-0.770808696746826,-0.554010331630707,0.545981824398041,-0.584509074687958,0.600210785865784,0.0837007611989975,-0.567488670349121,0.819115877151489,-0.668955087661743,-0.737109065055847,-0.0957564637064934,0.623615741729736,-0.765475749969482,-0.158588528633118,-0.598684787750244,-0.729470372200012,-0.330831557512283,-0.301147669553757,-0.68056708574295,0.667935967445374,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.314595848321915,-0.93869549036026,-0.140997022390366,0.798132300376892,-0.595748007297516,0.0898283571004868,0.885131120681763,0.0417929887771606,-0.463461130857468,0.94776064157486,-0.269029140472412,-0.171385690569878,0.810118317604065,-0.284595668315887,-0.51255601644516,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.648241400718689,-0.506932020187378,-0.568157553672791,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.964107573032379,-0.248898640275002,-0.0924450159072876, -0.918069899082184,-0.187107101082802,0.349483251571655,-0.887380957603455,-0.451603919267654,-0.09278454631567,-0.47402635216713,-0.576445937156677,0.665589272975922,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.999210119247437,0.0289651956409216,-0.0272048581391573,0.647232055664063,0.709673702716827,-0.278305619955063,0.702042996883392,0.707515120506287,-0.0809817835688591,0.94776064157486,-0.269029140472412,-0.171385690569878,0.885131120681763,0.0417929887771606,-0.463461130857468,-0.198126822710037,0.0765142217278481,-0.977185368537903,-0.627128541469574,0.0574355758726597,-0.776795268058777,-0.462542802095413,0.739023745059967,-0.48979389667511,-0.1213503703475,0.714234888553619,-0.689305901527405,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.970878839492798,0.173829272389412,0.164856299757957,-0.975513935089111,-0.202585533261299,0.085625521838665,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.633758366107941,-0.479114800691605,0.607288539409637,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.079451210796833,0.574800968170166,-0.814427018165588,-0.627380669116974,0.542527735233307,-0.558620691299438,-0.627528488636017,0.574077665805817,-0.525968492031097,-0.153654128313065,0.571211874485016,-0.806292414665222,-0.128622829914093,0.604616820812225,-0.786062777042389,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.193036198616028,0.594731986522675,-0.780404329299927,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.160101562738419,0.546482741832733,-0.822024405002594,-0.153654128313065,0.571211874485016,-0.806292414665222, 0.393562316894531,0.580699145793915,-0.71266907453537,0.430813550949097,0.499041706323624,-0.751902282238007,-0.239434540271759,0.547067582607269,-0.80211478471756,-0.193036198616028,0.594731986522675,-0.780404329299927,0.430813550949097,0.499041706323624,-0.751902282238007,0.393562316894531,0.580699145793915,-0.71266907453537,0.800276219844818,0.427209228277206,-0.420773357152939,0.828168988227844,0.353571265935898,-0.434883326292038,0.905861377716064,-0.279544115066528,0.318229824304581,0.858353197574615,-0.409084677696228,0.309644132852554,0.936574637889862,0.00382779608480632,-0.350447237491608,0.923372685909271,0.289373397827148,-0.252281337976456,0.875641047954559,-0.338848143815994,0.34414342045784,0.858353197574615,-0.409084677696228,0.309644132852554,0.905861377716064,-0.279544115066528,0.318229824304581,0.921413123607636,-0.245974183082581,0.300823181867599,0.875641047954559,-0.338848143815994,0.34414342045784,0.921413123607636,-0.245974183082581,0.300823181867599,0.906213641166687,0.328242212533951,-0.266521811485291,0.939418137073517,0.146130084991455,-0.310063809156418,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.613772094249725,0.718873798847198,0.326349943876266,-0.63234806060791,0.720907807350159,0.283598214387894,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.633863687515259,0.397778928279877,-0.663316428661346,-0.626530051231384,-0.095443420112133,-0.773531317710876,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.971036195755005,0.0917746424674988,-0.220604136586189,0.458068341016769,-0.324115723371506,-0.827721178531647,0.272203177213669,0.658502519130707,-0.701626539230347,-0.122567981481552,0.664539813995361,-0.737132251262665,0.0359749346971512,-0.262611299753189,-0.964230835437775,0.656110465526581,0.732090950012207,-0.183199197053909, 0.331649243831635,0.794523119926453,-0.508666634559631,0.0896634757518768,0.986824929714203,-0.134673669934273,0.308493763208389,0.950873613357544,0.0259031727910042,0.57691216468811,0.718079447746277,0.389273971319199,0.664968013763428,0.745313882827759,0.0482159033417702,0.392663985490799,0.918741226196289,-0.0415881127119064,-0.320559352636337,0.729658544063568,0.604019939899445,-0.311181366443634,0.925608515739441,0.215441450476646,-0.614538252353668,0.667141258716583,0.421028852462769,0.706917345523834,-0.10402026027441,0.699605345726013,0.599858105182648,0.75833523273468,0.255142837762833,0.814850926399231,-0.0293116569519043,0.57892906665802,-0.941741049289703,0.11614803224802,0.315647661685944,-0.996930718421936,0.0329507254064083,0.0710170492529869,-0.991389513015747,-0.125117510557175,0.038632795214653,0.861413061618805,0.450139224529266,0.23524908721447,0.652578055858612,-0.0296747293323278,0.757140219211578,0.659538865089417,0.541105449199677,0.521740734577179,0.861413061618805,0.450139224529266,0.23524908721447,0.837489545345306,-0.137019574642181,0.528996109962463,0.652578055858612,-0.0296747293323278,0.757140219211578,0.957429826259613,0.286321878433228,0.0367136411368847,0.929460346698761,0.351613759994507,-0.111674785614014,0.909856855869293,0.391187816858292,0.138320595026016,0.559431314468384,0.828812599182129,0.0103096608072519,0.410511314868927,0.907221972942352,0.0918079540133476,0.392663985490799,0.918741226196289,-0.0415881127119064,0.912856459617615,-0.241107016801834,0.329485177993774,0.752064108848572,0.658552646636963,-0.0266083907335997,0.970349192619324,-0.239411205053329,0.0332370884716511,0.906213641166687,0.328242212533951,-0.266521811485291,0.921413123607636,-0.245974183082581,0.300823181867599,0.957429826259613,0.286321878433228,0.0367136411368847,0.858353197574615,-0.409084677696228,0.309644132852554,0.972268581390381,0.233539223670959,0.0123813217505813,0.936574637889862,0.00382779608480632,-0.350447237491608,0.15803250670433,0.792331993579865,0.589267194271088,0.306766599416733,-0.118459150195122,0.944384276866913, 0.181094169616699,-0.00969368312507868,0.983417987823486,-0.819103717803955,0.554178774356842,0.148171976208687,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.748181462287903,0.587628781795502,0.308085918426514,-0.665187239646912,-0.279087424278259,0.692557692527771,-0.812849164009094,-0.351107835769653,0.46475750207901,0.47292697429657,0.876888990402222,0.0860569775104523,0.258335798978806,0.945306360721588,-0.199144557118416,0.494772255420685,0.860163271427155,-0.123772226274014,-0.158630818128586,0.588066816329956,0.793103873729706,-0.229550525546074,0.57556563615799,0.784876227378845,-0.413429826498032,0.428489029407501,0.803413331508636,-0.520070433616638,0.75630134344101,0.396906822919846,-0.522960901260376,0.842813611030579,-0.127189248800278,-0.158630818128586,0.588066816329956,0.793103873729706,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.968974769115448,0.149661242961884,0.196696132421494,0.834402143955231,0.550802052021027,0.0197512619197369,0.891577959060669,0.451291143894196,-0.0377500578761101,0.669141590595245,0.742036402225494,-0.0403924956917763,0.647329449653625,0.721940755844116,-0.244471147656441,-0.980522751808167,0.123100936412811,0.153040006756783,-0.916947364807129,0.362371772527695,0.167015537619591,-0.962031662464142,0.166659042239189,0.216147810220718,-0.780855476856232,0.547496676445007,0.300852298736572,-0.505573391914368,0.856702506542206,0.102256529033184,-0.894985496997833,0.383079677820206,0.228584602475166,-0.894985496997833,0.383079677820206,0.228584602475166,-0.505573391914368,0.856702506542206,0.102256529033184,-0.76461535692215,0.640312731266022,0.0732325837016106,0.891577959060669,0.451291143894196,-0.0377500578761101,0.740322411060333,0.655164897441864,-0.150604203343391,0.906549096107483,0.409386813640594,-0.10281577706337,0.359505623579025,0.919594645500183,-0.158434361219406,0.258335798978806,0.945306360721588,-0.199144557118416,0.47292697429657,0.876888990402222,0.0860569775104523,0.957429826259613,0.286321878433228,0.0367136411368847, 0.80286830663681,0.57996016740799,0.138016909360886,0.929460346698761,0.351613759994507,-0.111674785614014,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.324593514204025,0.0331906899809837,-0.945271074771881,-0.177267998456955,0.365929782390594,-0.913603544235229,0.972268581390381,0.233539223670959,0.0123813217505813,0.858353197574615,-0.409084677696228,0.309644132852554,0.875641047954559,-0.338848143815994,0.34414342045784,-0.918069899082184,-0.187107101082802,0.349483251571655,-0.596384108066559,0.73188179731369,0.329658985137939,-0.613772094249725,0.718873798847198,0.326349943876266,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.543871939182281,-0.524204313755035,0.655296266078949,-0.797426640987396,0.177673250436783,0.576665341854095,-0.177267998456955,0.365929782390594,-0.913603544235229,-0.0525061003863811,0.0318809561431408,-0.998111546039581,-0.192081272602081,0.0805686637759209,-0.978066205978394,-0.970878839492798,0.173829272389412,0.164856299757957,-0.93314254283905,0.297381490468979,0.20201313495636,-0.947628021240234,0.25655260682106,0.190215468406677,0.800276219844818,0.427209228277206,-0.420773357152939,0.923372685909271,0.289373397827148,-0.252281337976456,0.828168988227844,0.353571265935898,-0.434883326292038,0.906213641166687,0.328242212533951,-0.266521811485291,0.995014905929565,0.0992267951369286,-0.00996995531022549,0.939418137073517,0.146130084991455,-0.310063809156418,-0.655400156974792,-0.538768410682678,0.529319524765015,-0.592115700244904,-0.487801969051361,0.64144229888916,-0.991389513015747,-0.125117510557175,0.038632795214653,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.267860978841782,0.938322484493256,-0.218635410070419,-0.149676010012627,0.966881930828094,-0.206727981567383,-0.0982039347290993,0.744844913482666,-0.659971237182617,-0.342631131410599,0.695380508899689,-0.631703972816467,-0.0982039347290993,0.744844913482666,-0.659971237182617, -0.00497461529448628,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.342631131410599,0.695380508899689,-0.631703972816467,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00533877313137054,0.0413248650729656,-0.999131500720978,-0.433557718992233,-0.0273692850023508,-0.900710046291351,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.00533877313137054,0.0413248650729656,-0.999131500720978,0.0723040029406548,-0.562818944454193,-0.823411762714386,-0.282903432846069,-0.614905774593353,-0.73610907793045,-0.433557718992233,-0.0273692850023508,-0.900710046291351,0.0723040029406548,-0.562818944454193,-0.823411762714386,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.282903432846069,-0.614905774593353,-0.73610907793045,0.0359749346971512,-0.262611299753189,-0.964230835437775,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.383173704147339,-0.262150138616562,-0.885694742202759,-0.122567981481552,0.664539813995361,-0.737132251262665,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.398143172264099,0.565787076950073,-0.722057461738586,-0.154303342103958,0.42424476146698,-0.892304241657257,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.432219624519348,0.0896197631955147,-0.897303998470306,-0.180025935173035,0.229685723781586,-0.956470131874084,-0.178336516022682,0.738517105579376,-0.650221943855286,-0.390601694583893,0.504609107971191,-0.769935011863709,-0.154303342103958,0.42424476146698,-0.892304241657257,0.995019972324371,0.0198635533452034,0.0976764634251595,0.97600269317627,0.13745604455471,0.168892234563828,0.85029935836792,0.0502043291926384,0.523899376392365,0.878947734832764,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.878947734832764,-0.0450414381921291,0.474786430597305,0.85029935836792,0.0502043291926384,0.523899376392365, 0.652125597000122,-0.00108946568798274,0.758110165596008,0.147625222802162,-0.322124987840652,0.935116171836853,0.668019592761993,-0.146763533353806,0.729527413845062,0.652125597000122,-0.00108946568798274,0.758110165596008,0.141524657607079,-0.0639704838395119,0.987865626811981,0.147625222802162,-0.322124987840652,0.935116171836853,0.141524657607079,-0.0639704838395119,0.987865626811981,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.503679633140564,-0.333046585321426,0.797111511230469,-0.538123428821564,-0.0776136741042137,0.839285016059875,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.761611342430115,-0.261901050806046,0.592752873897552,-0.717246651649475,0.0185818821191788,0.696571588516235,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.941822648048401,-0.153352990746498,-0.29908686876297,0.505583882331848,0.0150260468944907,-0.862646579742432,0.522813856601715,0.179267287254334,-0.833384037017822,0.886800289154053,0.175987064838409,-0.427333384752274,0.853118479251862,0.0149601250886917,-0.521502673625946,0.522813856601715,0.179267287254334,-0.833384037017822,0.505583882331848,0.0150260468944907,-0.862646579742432,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.00497461529448628,0.164960891008377,-0.986287593841553,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.00497461529448628,0.164960891008377,-0.986287593841553,5.02940274600405e-005,0.0272602122277021,-0.999628365039825,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.341541200876236,0.100330114364624,-0.934496402740479,-0.377974569797516,-0.0538287982344627,-0.924249827861786,-0.707946956157684,-0.166302591562271,-0.686406970024109, 0.903742134571075,0.0408325865864754,0.426125437021255,0.99804013967514,0.0525208227336407,0.0340210981667042,0.995019972324371,0.0198635533452034,0.0976764634251595,0.878947734832764,-0.0450414381921291,0.474786430597305,0.668019592761993,-0.146763533353806,0.729527413845062,0.697896838188171,0.111968606710434,0.707391738891602,0.903742134571075,0.0408325865864754,0.426125437021255,0.878947734832764,-0.0450414381921291,0.474786430597305,0.713874757289886,0.186937391757965,-0.674860894680023,0.482705801725388,0.267842918634415,-0.833819687366486,0.932169795036316,0.263871729373932,-0.24785327911377,0.949256718158722,0.266638696193695,-0.166779711842537,0.482705801725388,0.267842918634415,-0.833819687366486,0.713874757289886,0.186937391757965,-0.674860894680023,-0.505279898643494,-0.213028356432915,-0.836248219013214,0.244611874222755,0.194429770112038,-0.949927449226379,0.929460346698761,0.351613759994507,-0.111674785614014,0.80286830663681,0.57996016740799,0.138016909360886,0.837489545345306,-0.137019574642181,0.528996109962463,0.861413061618805,0.450139224529266,0.23524908721447,0.389561533927917,-0.19174836575985,0.900818705558777,0.407288730144501,0.570921003818512,0.712857067584991,0.659538865089417,0.541105449199677,0.521740734577179,0.652578055858612,-0.0296747293323278,0.757140219211578,-0.0511879175901413,-0.230872392654419,0.971636593341827,-0.187374100089073,0.574305176734924,0.796909391880035,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.914847791194916,-0.403779864311218,0.00391686055809259,-0.985846221446991,-0.106942415237427,0.1291144490242,-0.971036195755005,0.0917746424674988,-0.220604136586189,-0.886820614337921,-0.356388121843338,-0.294171214103699,-0.762878954410553,0.502556443214417,0.40675875544548,-0.914847791194916,-0.403779864311218,0.00391686055809259, -0.886820614337921,-0.356388121843338,-0.294171214103699,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431,0.098000094294548,-0.65424633026123,0.624168395996094,0.42705449461937,-0.762878954410553,0.502556443214417,0.40675875544548,-0.859436213970184,0.509185254573822,0.04582304880023,-0.723603487014771,0.683223187923431,0.098000094294548,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.93314254283905,0.297381490468979,0.20201313495636,-0.65424633026123,0.624168395996094,0.42705449461937,-0.947628021240234,0.25655260682106,0.190215468406677,-0.93314254283905,0.297381490468979,0.20201313495636,-0.906325161457062,0.416019886732101,-0.074176587164402,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.926415205001831,0.366669058799744,-0.0854909643530846,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.947628021240234,0.25655260682106,0.190215468406677,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.870848000049591,0.464649707078934,0.160388261079788,-0.981737494468689,-0.183587089180946,0.0498724691569805,-0.968909800052643,-0.119058966636658,-0.216884210705757,-0.809561967849731,0.578427612781525,-0.10015495121479,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.793782532215118,0.557114601135254,0.243993073701859,-0.870848000049591,0.464649707078934,0.160388261079788,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.713916778564453,0.653736412525177,0.250901401042938,-0.793782532215118,0.557114601135254,0.243993073701859,-0.745661020278931,0.66599303483963,-0.0210462994873524,-0.63234806060791,0.720907807350159,0.283598214387894,-0.713916778564453,0.653736412525177,0.250901401042938,-0.711231410503387,0.702188730239868,-0.0328762196004391,-0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.969612717628479,0.0529158711433411,0.238853633403778,-0.63234806060791,0.720907807350159,0.283598214387894, -0.671855926513672,0.740681767463684,-0.000314092845655978,-0.999210119247437,0.0289651956409216,-0.0272048581391573,-0.739399552345276,-0.3774254322052,0.557528793811798,-0.964107573032379,-0.248898640275002,-0.0924450159072876,-0.969612717628479,0.0529158711433411,0.238853633403778,0.479293167591095,-0.284916758537292,-0.830120801925659,0.383484452962875,-0.102838270366192,-0.917803883552551,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.383484452962875,-0.102838270366192,-0.917803883552551,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.828753769397736,-0.00401723757386208,0.559598922729492,0.650361001491547,-0.274446427822113,0.708314716815948,0.587613701820374,-0.80407178401947,0.0904358923435211,0.653040647506714,-0.484619528055191,-0.581963717937469,0.828753769397736,-0.00401723757386208,0.559598922729492,0.653040647506714,-0.484619528055191,-0.581963717937469,0.479293167591095,-0.284916758537292,-0.830120801925659,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.812033891677856,-0.31945663690567,0.488414198160172,-0.1181396022439,-0.72886723279953,0.674385368824005,0.583520710468292,-0.523498058319092,0.620848894119263,0.812033891677856,-0.31945663690567,0.488414198160172,0.964972972869873,-0.0338397771120071,-0.260157763957977,0.944391191005707,-0.0824342668056488,-0.318323493003845,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.846594870090485,-0.529065132141113,0.0580275692045689,-0.867540001869202,-0.488967150449753,-0.0910245105624199,0.698255121707916,-0.555874645709991,-0.451046764850616,0.944391191005707,-0.0824342668056488,-0.318323493003845,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.993199586868286,-4.69008500658674e-006,0.116424031555653,-0.1181396022439,-0.72886723279953,0.674385368824005, -0.751028060913086,-0.474978417158127,-0.458641856908798,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.332680583000183,-0.441110253334045,0.833513855934143,-0.202261313796043,-0.191956117749214,0.960334956645966,-0.691331505775452,-0.716019868850708,-0.0968314781785011,-0.0923527628183365,-0.948987364768982,0.301486223936081,0.201128974556923,-0.41152036190033,0.888930916786194,-0.332680583000183,-0.441110253334045,0.833513855934143,0.837489545345306,-0.137019574642181,0.528996109962463,0.244611874222755,0.194429770112038,-0.949927449226379,-0.505279898643494,-0.213028356432915,-0.836248219013214,-0.751028060913086,-0.474978417158127,-0.458641856908798,-0.1181396022439,-0.72886723279953,0.674385368824005,0.698255121707916,-0.555874645709991,-0.451046764850616,-0.867540001869202,-0.488967150449753,-0.0910245105624199,-0.871833384037018,0.0184007696807384,0.489456802606583,-0.807208120822906,-0.160388857126236,0.568058490753174,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.909544348716736,-0.0496344491839409,0.412632405757904,-0.928275108337402,-0.108704075217247,0.35565248131752,-0.934698820114136,0.0468888208270073,-0.352334499359131,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.0390606410801411,-0.798295676708221,-0.600997745990753,0.382079660892487,0.0211679134517908,-0.923886954784393,0.698255121707916,-0.555874645709991,-0.451046764850616,0.382079660892487,0.0211679134517908,-0.923886954784393,-0.0390606410801411,-0.798295676708221,-0.600997745990753,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.928847432136536,0.162273854017258,0.333030939102173,-0.54668140411377,-0.221681281924248,0.807463228702545,-0.928847432136536,0.162273854017258,0.333030939102173,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.969194948673248,0.11662120372057,0.21693454682827, -0.871833384037018,0.0184007696807384,0.489456802606583,-0.928847432136536,0.162273854017258,0.333030939102173,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.714491605758667,0.14225697517395,0.685028970241547,-0.161164477467537,-0.331503093242645,0.929586827754974,-0.714491605758667,0.14225697517395,0.685028970241547,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.709949254989624,0.60140985250473,0.366439938545227,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.961548864841461,-0.0192971937358379,0.273955136537552,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.462400823831558,0.884378015995026,0.0637255012989044,-0.404175013303757,0.903538525104523,-0.142339885234833,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.632241010665894,0.646320343017578,-0.427248448133469,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.733689248561859,-0.00598060339689255,-0.679458796977997,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.967416822910309,-0.0268912296742201,-0.251756906509399,-0.707946956157684,-0.166302591562271,-0.686406970024109,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.711754858493805,-0.136520877480507,-0.689033389091492,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.433943778276443,-0.801411330699921,-0.411621987819672,-0.82076495885849,-0.278661072254181,-0.498691141605377,-0.471586525440216,-0.672621071338654,-0.570251703262329,-0.642501175403595,-0.273710697889328,-0.715733766555786,-0.85034316778183,-0.422914505004883,-0.313145041465759,-0.433943778276443,-0.801411330699921,-0.411621987819672,0.683504700660706,0.663010776042938,0.305349051952362, 0.722103536128998,0.687273919582367,0.0788736194372177,0.343125909566879,0.914759755134583,0.213258594274521,0.258648008108139,0.909015238285065,0.326791137456894,0.683504700660706,0.663010776042938,0.305349051952362,0.97600269317627,0.13745604455471,0.168892234563828,0.973912060260773,0.184168219566345,-0.132579684257507,0.722103536128998,0.687273919582367,0.0788736194372177,0.970708966255188,0.0394216887652874,-0.237002193927765,0.973912060260773,0.184168219566345,-0.132579684257507,0.97600269317627,0.13745604455471,0.168892234563828,0.995019972324371,0.0198635533452034,0.0976764634251595,0.946598649024963,0.101268604397774,-0.306097507476807,0.970708966255188,0.0394216887652874,-0.237002193927765,0.995019972324371,0.0198635533452034,0.0976764634251595,0.99804013967514,0.0525208227336407,0.0340210981667042,0.923067450523376,0.21886146068573,-0.316300749778748,0.946598649024963,0.101268604397774,-0.306097507476807,0.99804013967514,0.0525208227336407,0.0340210981667042,0.990444839000702,0.137596189975739,-0.00929253362119198,0.932169795036316,0.263871729373932,-0.24785327911377,0.923067450523376,0.21886146068573,-0.316300749778748,0.990444839000702,0.137596189975739,-0.00929253362119198,0.967456996440887,0.251362919807434,-0.0290456917136908,0.949256718158722,0.266638696193695,-0.166779711842537,0.932169795036316,0.263871729373932,-0.24785327911377,0.967456996440887,0.251362919807434,-0.0290456917136908,0.9481241106987,0.313342481851578,-0.053639143705368,0.937970161437988,0.291288256645203,-0.188050866127014,0.949256718158722,0.266638696193695,-0.166779711842537,0.9481241106987,0.313342481851578,-0.053639143705368,-0.305967152118683,-0.302397131919861,0.902740299701691,-0.456334859132767,-0.263855904340744,0.849787354469299,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.602918326854706,0.515652418136597,0.608762681484222,-0.152829229831696,-0.222570538520813,0.962863206863403,-0.1181396022439,-0.72886723279953,0.674385368824005,-0.910823285579681,0.270006507635117,0.312245815992355, 0.343125909566879,0.914759755134583,0.213258594274521,0.722103536128998,0.687273919582367,0.0788736194372177,0.656110465526581,0.732090950012207,-0.183199197053909,0.308493763208389,0.950873613357544,0.0259031727910042,0.973912060260773,0.184168219566345,-0.132579684257507,0.886800289154053,0.175987064838409,-0.427333384752274,0.656110465526581,0.732090950012207,-0.183199197053909,0.722103536128998,0.687273919582367,0.0788736194372177,0.853118479251862,0.0149601250886917,-0.521502673625946,0.886800289154053,0.175987064838409,-0.427333384752274,0.973912060260773,0.184168219566345,-0.132579684257507,0.970708966255188,0.0394216887652874,-0.237002193927765,0.946598649024963,0.101268604397774,-0.306097507476807,0.805570960044861,0.0887085422873497,-0.585820972919464,0.853118479251862,0.0149601250886917,-0.521502673625946,0.970708966255188,0.0394216887652874,-0.237002193927765,-0.949140191078186,-0.201623931527138,0.24182790517807,-0.941822648048401,-0.153352990746498,-0.29908686876297,-0.938030481338501,-0.164544627070427,-0.304998099803925,-0.928275108337402,-0.108704075217247,0.35565248131752,0.339781612157822,-0.868737816810608,0.360337436199188,0.295632928609848,-0.949930250644684,-0.101162008941174,-0.261420041322708,-0.954043209552765,0.146496221423149,-0.118260890245438,-0.832547545433044,0.541182935237885,0.306935548782349,-0.919691801071167,0.244862332940102,0.207801967859268,-0.930255472660065,-0.302395612001419,-0.939882695674896,-0.341330021619797,0.0106942849233747,-0.810173809528351,-0.314327657222748,0.494789302349091,-0.890334248542786,-0.243657946586609,-0.384624123573303,-0.991721987724304,-0.09873928129673,0.0820856168866158,-0.969194948673248,0.11662120372057,0.21693454682827,-0.953069984912872,0.0484387166798115,0.298849910497665,-0.0872491747140884,-0.891694486141205,-0.444149196147919,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.0959865897893906,-0.91358608007431,0.395154505968094,0.542883396148682,-0.82672655582428,-0.147651195526123,-0.314595848321915,-0.93869549036026,-0.140997022390366, -0.124663934111595,-0.874086141586304,0.469502240419388,0.339781612157822,-0.868737816810608,0.360337436199188,0.211911484599113,-0.951958835124969,-0.221060931682587,-0.124663934111595,-0.874086141586304,0.469502240419388,-0.192425131797791,-0.974552154541016,0.114980764687061,0.339781612157822,-0.868737816810608,0.360337436199188,-0.118260890245438,-0.832547545433044,0.541182935237885,-0.261420041322708,-0.954043209552765,0.146496221423149,0.207811132073402,-0.962575078010559,-0.173964589834213,0.400767505168915,-0.84773463010788,0.347464233636856,-0.23048010468483,-0.946770489215851,0.224732384085655,-0.389462172985077,-0.886311650276184,-0.250541120767593,0.201402872800827,-0.92625367641449,-0.318576484918594,0.362296313047409,-0.902348458766937,0.233470931649208,0.200983673334122,-0.912257730960846,-0.356919288635254,0.339713275432587,-0.937209665775299,0.0789491534233093,-0.18037211894989,-0.916134774684906,0.357998490333557,-0.326996743679047,-0.921505987644196,-0.209522947669029,0.200983673334122,-0.912257730960846,-0.356919288635254,-0.326996743679047,-0.921505987644196,-0.209522947669029,-0.148850679397583,-0.924228370189667,0.351632446050644,0.395999073982239,-0.883323311805725,0.250847846269608,-0.259535163640976,-0.932749211788177,0.250240743160248,0.323624908924103,-0.91464102268219,0.242278248071671,0.11251799762249,-0.874383747577667,-0.472009360790253,-0.334644585847855,-0.867584347724915,-0.367845624685287,-0.248996630311012,-0.917850255966187,0.309114128351212,0.323624908924103,-0.91464102268219,0.242278248071671,0.464242339134216,-0.872838377952576,-0.150440022349358,-0.507440745830536,-0.861680686473846,0.00320725026540458,0.259815812110901,-0.928046464920044,-0.266881018877029,-0.149650141596794,-0.977229058742523,-0.150426745414734,-0.259535163640976,-0.932749211788177,0.250240743160248,0.303018242120743,-0.938679337501526,0.164502277970314,0.37071630358696,-0.925935029983521,-0.0722067281603813,-0.0855747610330582,-0.285937398672104,-0.954419612884521,-0.648241400718689,-0.506932020187378,-0.568157553672791, -0.262460768222809,-0.84521484375,0.465538620948792,0.407288730144501,0.570921003818512,0.712857067584991,0.21311217546463,-0.0906343460083008,0.972814798355103,-0.187374100089073,0.574305176734924,0.796909391880035,0.90192449092865,0.307413011789322,0.303363531827927,0.899024188518524,0.213700130581856,0.382214337587357,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.899024188518524,0.213700130581856,0.382214337587357,0.817979574203491,-0.0342949964106083,0.574224054813385,0.882815957069397,-0.369267553091049,0.290305823087692,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.817979574203491,-0.0342949964106083,0.574224054813385,0.572269201278687,-0.327979475259781,0.751623213291168,0.665161728858948,0.0713187083601952,0.743285655975342,0.882815957069397,-0.369267553091049,0.290305823087692,0.761745095252991,0.0999165698885918,0.640125811100006,0.817979574203491,-0.0342949964106083,0.574224054813385,0.899024188518524,0.213700130581856,0.382214337587357,0.857412695884705,0.318779200315475,0.404009103775024,0.516816318035126,-0.0720634460449219,0.85305792093277,0.572269201278687,-0.327979475259781,0.751623213291168,0.817979574203491,-0.0342949964106083,0.574224054813385,0.761745095252991,0.0999165698885918,0.640125811100006,0.208346754312515,-0.195467948913574,0.95832347869873,0.263325154781342,-0.487631261348724,0.832391500473022,0.572269201278687,-0.327979475259781,0.751623213291168,0.516816318035126,-0.0720634460449219,0.85305792093277,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154,0.943840563297272,0.180788546800613,0.276551008224487,0.921807408332825,0.190687164664268,0.337504833936691,0.981701374053955,0.106130957603455,0.158109560608864,0.849806606769562,-0.0963085368275642,0.518221437931061,0.761745095252991,0.0999165698885918,0.640125811100006,0.857412695884705,0.318779200315475,0.404009103775024,0.849806606769562,-0.0963085368275642,0.518221437931061,0.56545478105545,-0.235293805599213,0.79050475358963, 0.516816318035126,-0.0720634460449219,0.85305792093277,0.761745095252991,0.0999165698885918,0.640125811100006,0.56545478105545,-0.235293805599213,0.79050475358963,0.235414057970047,-0.349107831716537,0.907030284404755,0.208346754312515,-0.195467948913574,0.95832347869873,0.516816318035126,-0.0720634460449219,0.85305792093277,0.973640501499176,0.150164008140564,0.171682879328728,0.823427438735962,0.0464031770825386,0.565521001815796,0.849806606769562,-0.0963085368275642,0.518221437931061,0.981701374053955,0.106130957603455,0.158109560608864,0.823427438735962,0.0464031770825386,0.565521001815796,0.535846352577209,-0.072305366396904,0.841213762760162,0.56545478105545,-0.235293805599213,0.79050475358963,0.849806606769562,-0.0963085368275642,0.518221437931061,0.535846352577209,-0.072305366396904,0.841213762760162,0.199428960680962,-0.151153594255447,0.968184232711792,0.235414057970047,-0.349107831716537,0.907030284404755,0.56545478105545,-0.235293805599213,0.79050475358963,0.943840563297272,0.180788546800613,0.276551008224487,0.938613653182983,0.275698870420456,0.207351207733154,0.939432919025421,0.230844467878342,-0.253331035375595,0.932059586048126,0.251616179943085,-0.260680228471756,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.961426019668579,0.11484207212925,-0.249942690134048,0.938613653182983,0.275698870420456,0.207351207733154,0.90192449092865,0.307413011789322,0.303363531827927,0.857412695884705,0.318779200315475,0.404009103775024,0.899024188518524,0.213700130581856,0.382214337587357,0.90192449092865,0.307413011789322,0.303363531827927,0.777440786361694,0.387861609458923,0.495125412940979,0.981701374053955,0.106130957603455,0.158109560608864,0.857412695884705,0.318779200315475,0.404009103775024,0.777440786361694,0.387861609458923,0.495125412940979,0.921807408332825,0.190687164664268,0.337504833936691,0.970218658447266,-0.0381909385323524,0.239201232790947,0.837947964668274,0.531638920307159,-0.123301580548286,0.734350562095642,0.677913904190063,0.0340876169502735,0.938418209552765,0.0142068490386009,0.345209211111069, 0.547434866428375,0.804429769515991,0.230668216943741,0.79800420999527,0.101907514035702,0.593973159790039,0.938418209552765,0.0142068490386009,0.345209211111069,0.734350562095642,0.677913904190063,0.0340876169502735,0.250951588153839,0.864162683486938,0.436172097921371,0.507640182971954,0.139722838997841,0.85016405582428,0.79800420999527,0.101907514035702,0.593973159790039,0.547434866428375,0.804429769515991,0.230668216943741,-0.0952283963561058,0.827900111675262,0.552732229232788,0.146060764789581,0.0914121642708778,0.985043168067932,0.507640182971954,0.139722838997841,0.85016405582428,0.250951588153839,0.864162683486938,0.436172097921371,0.793522596359253,-0.0159706063568592,0.608331143856049,0.937215089797974,-0.0726325064897537,0.341104626655579,0.938418209552765,0.0142068490386009,0.345209211111069,0.79800420999527,0.101907514035702,0.593973159790039,0.516034662723541,-0.0156709868460894,0.856424331665039,0.793522596359253,-0.0159706063568592,0.608331143856049,0.79800420999527,0.101907514035702,0.593973159790039,0.507640182971954,0.139722838997841,0.85016405582428,0.182312279939651,-0.0702581331133842,0.980727314949036,0.516034662723541,-0.0156709868460894,0.856424331665039,0.507640182971954,0.139722838997841,0.85016405582428,0.146060764789581,0.0914121642708778,0.985043168067932,0.95304924249649,0.093354158103466,0.288066178560257,0.970121920108795,0.115440391004086,0.213393971323967,0.987499356269836,0.0581452213227749,0.146506309509277,0.910413324832916,-0.164700835943222,0.379501283168793,0.793522596359253,-0.0159706063568592,0.608331143856049,0.799672067165375,0.218886733055115,0.559118211269379,0.952853143215179,0.227692276239395,0.200567096471787,0.937215089797974,-0.0726325064897537,0.341104626655579,0.516034662723541,-0.0156709868460894,0.856424331665039,0.508204519748688,0.144576266407967,0.849014639854431,0.799672067165375,0.218886733055115,0.559118211269379,0.793522596359253,-0.0159706063568592,0.608331143856049,0.182312279939651,-0.0702581331133842,0.980727314949036,0.149393752217293,0.076563760638237,0.985809028148651, 0.508204519748688,0.144576266407967,0.849014639854431,0.516034662723541,-0.0156709868460894,0.856424331665039,0.799672067165375,0.218886733055115,0.559118211269379,0.823427438735962,0.0464031770825386,0.565521001815796,0.973640501499176,0.150164008140564,0.171682879328728,0.952853143215179,0.227692276239395,0.200567096471787,0.508204519748688,0.144576266407967,0.849014639854431,0.535846352577209,-0.072305366396904,0.841213762760162,0.823427438735962,0.0464031770825386,0.565521001815796,0.799672067165375,0.218886733055115,0.559118211269379,0.149393752217293,0.076563760638237,0.985809028148651,0.199428960680962,-0.151153594255447,0.968184232711792,0.535846352577209,-0.072305366396904,0.841213762760162,0.508204519748688,0.144576266407967,0.849014639854431,0.938012719154358,0.237205043435097,-0.252717018127441,0.987499356269836,0.0581452213227749,0.146506309509277,0.970121920108795,0.115440391004086,0.213393971323967,0.940755069255829,0.217000737786293,-0.260558247566223,0.987499356269836,0.0581452213227749,0.146506309509277,0.904506981372833,0.363091230392456,-0.223677977919579,0.837947964668274,0.531638920307159,-0.123301580548286,0.970218658447266,-0.0381909385323524,0.239201232790947,0.937215089797974,-0.0726325064897537,0.341104626655579,0.910413324832916,-0.164700835943222,0.379501283168793,0.970218658447266,-0.0381909385323524,0.239201232790947,0.938418209552765,0.0142068490386009,0.345209211111069,0.937215089797974,-0.0726325064897537,0.341104626655579,0.952853143215179,0.227692276239395,0.200567096471787,0.95304924249649,0.093354158103466,0.288066178560257,0.910413324832916,-0.164700835943222,0.379501283168793,0.95304924249649,0.093354158103466,0.288066178560257,0.948896646499634,0.107380241155624,0.296756833791733,0.960990369319916,0.131044924259186,0.24356672167778,0.970121920108795,0.115440391004086,0.213393971323967,0.943840563297272,0.180788546800613,0.276551008224487,0.932059586048126,0.251616179943085,-0.260680228471756,0.934666991233826,0.235346615314484,-0.26647624373436,0.960990369319916,0.131044924259186,0.24356672167778, 0.934666991233826,0.235346615314484,-0.26647624373436,0.940755069255829,0.217000737786293,-0.260558247566223,0.970121920108795,0.115440391004086,0.213393971323967,0.960990369319916,0.131044924259186,0.24356672167778,0.960990369319916,0.131044924259186,0.24356672167778,0.948896646499634,0.107380241155624,0.296756833791733,0.921807408332825,0.190687164664268,0.337504833936691,0.943840563297272,0.180788546800613,0.276551008224487,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.702580034732819,-0.699933290481567,0.128353402018547,0.026099681854248,-0.974704563617706,0.221968054771423,-0.10741464048624,-0.480259567499161,0.87052446603775,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.503881514072418,-0.329790264368057,0.798336923122406,-0.10741464048624,-0.480259567499161,0.87052446603775,0.208346754312515,-0.195467948913574,0.95832347869873,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.10741464048624,-0.480259567499161,0.87052446603775,0.263325154781342,-0.487631261348724,0.832391500473022,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.49835604429245,-0.197405397891998,0.844199240207672,-0.540686428546906,-0.418503016233444,0.729735136032104, -0.806595921516418,-0.339085519313812,0.484173595905304,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.49835604429245,-0.197405397891998,0.844199240207672,0.208346754312515,-0.195467948913574,0.95832347869873,0.235414057970047,-0.349107831716537,0.907030284404755,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.14765976369381,-0.247115641832352,0.957669258117676,-0.540686428546906,-0.418503016233444,0.729735136032104,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.540686428546906,-0.418503016233444,0.729735136032104,0.235414057970047,-0.349107831716537,0.907030284404755,0.199428960680962,-0.151153594255447,0.968184232711792,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.155815601348877,-0.419202566146851,0.894421994686127,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.734745264053345,-0.160798713564873,0.659009218215942,-0.730372190475464,-0.0783009603619576,0.678546547889709,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.75111985206604,-0.269361168146133,0.602713465690613, -0.685021758079529,0.00244438671506941,0.728518545627594,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.895388603210449,0.358975976705551,0.26346829533577,-0.972477912902832,0.193684712052345,0.12951023876667,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.442167282104492,0.71852970123291,0.536845564842224,-0.730377912521362,0.544562876224518,0.412309736013412,-0.224036976695061,-0.0279729403555393,0.974179148674011,0.146060764789581,0.0914121642708778,0.985043168067932,-0.0952283963561058,0.827900111675262,0.552732229232788,-0.442167282104492,0.71852970123291,0.536845564842224,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.476952195167542,-0.30724024772644,0.823480427265167,0.182312279939651,-0.0702581331133842,0.980727314949036,0.146060764789581,0.0914121642708778,0.985043168067932,-0.224036976695061,-0.0279729403555393,0.974179148674011,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.476952195167542,-0.30724024772644,0.823480427265167,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.476952195167542,-0.30724024772644,0.823480427265167, -0.239489018917084,-0.00514746597036719,0.970885396003723,0.149393752217293,0.076563760638237,0.985809028148651,0.182312279939651,-0.0702581331133842,0.980727314949036,-0.163414344191551,-0.171452105045319,0.971545159816742,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.566346526145935,-0.257577747106552,0.782882690429688,-0.190858513116837,-0.215845420956612,0.957592725753784,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.605567634105682,-0.0923453718423843,0.790417671203613,-0.190858513116837,-0.215845420956612,0.957592725753784,0.199428960680962,-0.151153594255447,0.968184232711792,0.149393752217293,0.076563760638237,0.985809028148651,-0.239489018917084,-0.00514746597036719,0.970885396003723,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.972477912902832,0.193684712052345,0.12951023876667,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.658827900886536,-0.438512802124023,0.61127108335495,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.81458967924118,-0.243902236223221,0.526265501976013, -0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.809050858020782,-0.2569739818573,0.528584063053131,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.992223381996155,-0.121708244085312,0.0260738711804152,0.985335350036621,0.0123839350417256,-0.170178771018982,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.882815957069397,-0.369267553091049,0.290305823087692,0.903218030929565,-0.152758419513702,0.401076167821884,0.992223381996155,-0.121708244085312,0.0260738711804152,0.955118477344513,-0.28173553943634,-0.0915084630250931,0.985335350036621,0.0123839350417256,-0.170178771018982,0.924062311649323,0.166339710354805,-0.344151109457016,0.961426019668579,0.11484207212925,-0.249942690134048,0.97774213552475,-0.0699520856142044,-0.19780558347702,0.924062311649323,0.166339710354805,-0.344151109457016,0.798422634601593,0.345685362815857,-0.49297359585762,0.939432919025421,0.230844467878342,-0.253331035375595,0.961426019668579,0.11484207212925,-0.249942690134048,0.837947964668274,0.531638920307159,-0.123301580548286,0.843237340450287,0.525120317935944,-0.114888966083527,0.713566720485687,0.700178623199463,0.0239254627376795,0.734350562095642,0.677913904190063,0.0340876169502735,0.734350562095642,0.677913904190063,0.0340876169502735,0.713566720485687,0.700178623199463,0.0239254627376795,0.625909388065338,0.726224660873413,0.284315198659897,0.547434866428375,0.804429769515991,0.230668216943741,0.547434866428375,0.804429769515991,0.230668216943741,0.625909388065338,0.726224660873413,0.284315198659897,0.628335058689117,0.550278067588806,0.549899160861969,0.250951588153839,0.864162683486938,0.436172097921371,0.250951588153839,0.864162683486938,0.436172097921371,0.628335058689117,0.550278067588806,0.549899160861969,0.139649003744125,0.122624859213829,0.982578873634338,-0.0952283963561058,0.827900111675262,0.552732229232788,0.904506981372833,0.363091230392456,-0.223677977919579,0.87714958190918,0.359215557575226,-0.318704843521118,0.843237340450287,0.525120317935944,-0.114888966083527, 0.837947964668274,0.531638920307159,-0.123301580548286,0.938012719154358,0.237205043435097,-0.252717018127441,0.868426561355591,0.2465450912714,-0.430175423622131,0.87714958190918,0.359215557575226,-0.318704843521118,0.904506981372833,0.363091230392456,-0.223677977919579,0.932059586048126,0.251616179943085,-0.260680228471756,0.796033978462219,0.30541729927063,-0.522541999816895,0.850903332233429,0.254371464252472,-0.459628790616989,0.934666991233826,0.235346615314484,-0.26647624373436,0.939432919025421,0.230844467878342,-0.253331035375595,0.798422634601593,0.345685362815857,-0.49297359585762,0.796033978462219,0.30541729927063,-0.522541999816895,0.932059586048126,0.251616179943085,-0.260680228471756,0.850903332233429,0.254371464252472,-0.459628790616989,0.863597810268402,0.181175544857979,-0.470504224300385,0.940755069255829,0.217000737786293,-0.260558247566223,0.934666991233826,0.235346615314484,-0.26647624373436,0.863597810268402,0.181175544857979,-0.470504224300385,0.868426561355591,0.2465450912714,-0.430175423622131,0.938012719154358,0.237205043435097,-0.252717018127441,0.940755069255829,0.217000737786293,-0.260558247566223,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.702580034732819,-0.699933290481567,0.128353402018547,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.401816695928574,-0.892981469631195,0.202799007296562,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.293226510286331,-0.722825050354004,0.625733315944672,0.026099681854248,-0.974704563617706,0.221968054771423,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.680876314640045,-0.688694536685944,-0.249213308095932,-0.84135890007019,-0.538883864879608,0.041464950889349,-0.980304419994354,-0.197097584605217,-0.0124787287786603, -0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.895388603210449,0.358975976705551,0.26346829533577,-0.912629246711731,0.357585817575455,0.198091477155685,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.972477912902832,0.193684712052345,0.12951023876667,-0.730377912521362,0.544562876224518,0.412309736013412,-0.750467360019684,0.503474771976471,0.428149402141571,-0.912629246711731,0.357585817575455,0.198091477155685,-0.895388603210449,0.358975976705551,0.26346829533577,-0.442167282104492,0.71852970123291,0.536845564842224,-0.644507586956024,0.336329728364944,0.686652958393097,-0.750467360019684,0.503474771976471,0.428149402141571,-0.730377912521362,0.544562876224518,0.412309736013412,-0.0952283963561058,0.827900111675262,0.552732229232788,0.139649003744125,0.122624859213829,0.982578873634338,-0.644507586956024,0.336329728364944,0.686652958393097,-0.442167282104492,0.71852970123291,0.536845564842224,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.972477912902832,0.193684712052345,0.12951023876667,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.986363708972931,-0.161525458097458,-0.0315617434680462,-0.976574420928955,-0.212938129901886,-0.0309790316969156,-0.961961030960083,-0.248708829283714,-0.113026410341263, -0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.981736660003662,-0.184043005108833,-0.0481799468398094,-0.983128547668457,-0.182582557201386,-0.011038308031857,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.976574420928955,-0.212938129901886,-0.0309790316969156,0.90192449092865,0.307413011789322,0.303363531827927,0.938613653182983,0.275698870420456,0.207351207733154,0.777440786361694,0.387861609458923,0.495125412940979,0.938613653182983,0.275698870420456,0.207351207733154,0.961426019668579,0.11484207212925,-0.249942690134048,0.939432919025421,0.230844467878342,-0.253331035375595,0.970218658447266,-0.0381909385323524,0.239201232790947,0.910413324832916,-0.164700835943222,0.379501283168793,0.987499356269836,0.0581452213227749,0.146506309509277,0.987499356269836,0.0581452213227749,0.146506309509277,0.938012719154358,0.237205043435097,-0.252717018127441,0.904506981372833,0.363091230392456,-0.223677977919579,-0.80164510011673,-0.0831164047122002,0.591993927955627,-0.685021758079529,0.00244438671506941,0.728518545627594,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.857911825180054,-0.151918008923531,0.490824013948441,-0.980304419994354,-0.197097584605217,-0.0124787287786603,-0.933254837989807,-0.359125286340714,-0.00803146045655012,-0.733399271965027,-0.428732603788376,0.527554571628571,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.585005640983582,-0.507526874542236,0.632601678371429,-0.817899703979492,-0.355825662612915,0.452137291431427,-0.999559104442596,-0.0023001697845757,0.0296011492609978,-0.983128547668457,-0.182582557201386,-0.011038308031857,0.633086621761322,-0.179429575800896,0.752998232841492,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931,0.268051654100418,-0.524244606494904,0.808279573917389,0.0315268374979496,0.564418375492096,0.824886620044708,-0.397260129451752,0.234844520688057,0.887148499488831,-0.414126962423325,0.480852067470551,0.772839069366455, 0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.397260129451752,0.234844520688057,0.887148499488831,-0.642944931983948,0.0801258310675621,0.761709690093994,-0.644507586956024,0.336329728364944,0.686652958393097,-0.278751373291016,-0.37135124206543,0.88566130399704,-0.644507586956024,0.336329728364944,0.686652958393097,0.139649003744125,0.122624859213829,0.982578873634338,0.268051654100418,-0.524244606494904,0.808279573917389,-0.278751373291016,-0.37135124206543,0.88566130399704,0.139649003744125,0.122624859213829,0.982578873634338,0.628335058689117,0.550278067588806,0.549899160861969,0.633086621761322,-0.179429575800896,0.752998232841492,0.268051654100418,-0.524244606494904,0.808279573917389,0.633086621761322,-0.179429575800896,0.752998232841492,0.628335058689117,0.550278067588806,0.549899160861969,0.54774808883667,0.373568952083588,0.74861091375351,0.398782223463058,0.608129858970642,0.686404287815094,0.54774808883667,0.373568952083588,0.74861091375351,0.0315268374979496,0.564418375492096,0.824886620044708,0.0181612763553858,0.599665701389313,0.800044476985931,0.398782223463058,0.608129858970642,0.686404287815094,0.0181612763553858,0.599665701389313,0.800044476985931,-0.414126962423325,0.480852067470551,0.772839069366455,-0.278751373291016,-0.37135124206543,0.88566130399704,0.268051654100418,-0.524244606494904,0.808279573917389,0.948896646499634,0.107380241155624,0.296756833791733,0.95304924249649,0.093354158103466,0.288066178560257,0.952853143215179,0.227692276239395,0.200567096471787,0.973640501499176,0.150164008140564,0.171682879328728,0.921807408332825,0.190687164664268,0.337504833936691,0.948896646499634,0.107380241155624,0.296756833791733,0.973640501499176,0.150164008140564,0.171682879328728,0.981701374053955,0.106130957603455,0.158109560608864,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.808899223804474,-0.271904230117798,0.521296620368958,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.743283689022064,-0.261148422956467,0.615898430347443, -0.743283689022064,-0.261148422956467,0.615898430347443,-0.75111985206604,-0.269361168146133,0.602713465690613,-0.806595921516418,-0.339085519313812,0.484173595905304,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.822073340415955,-0.257045239210129,0.508058190345764,-0.839219510555267,-0.174447998404503,0.515052020549774,-0.809050858020782,-0.2569739818573,0.528584063053131,-0.743283689022064,-0.261148422956467,0.615898430347443,-0.754743993282318,-0.253586679697037,0.605025053024292,-0.81458967924118,-0.243902236223221,0.526265501976013,-0.695387840270996,-0.360292494297028,0.621791779994965,-0.535216987133026,-0.203683137893677,0.819790184497833,-0.730377912521362,0.544562876224518,0.412309736013412,-0.895388603210449,0.358975976705551,0.26346829533577,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.340044319629669,-0.38835272192955,0.856476545333862,0.71001797914505,-0.0603355132043362,0.701593995094299,0.799828112125397,-0.075599230825901,0.595449209213257,0.562524676322937,-0.508338332176209,0.652041435241699,0.415581941604614,-0.137492552399635,0.899103701114655,-0.738620281219482,0.158259704709053,0.655281603336334,-0.664949595928192,0.242700353264809,0.706355810165405,-0.635453879833221,-0.442719787359238,0.632611691951752,0.41880676150322,-0.0415473021566868,0.907124400138855,0.0549214817583561,-0.121100522577763,0.991119742393494,0.0793883204460144,-0.368574857711792,0.926201999187469,0.409103959798813,-0.270957797765732,0.8713299036026,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.879705667495728,-0.112221792340279,0.462086796760559, -0.734731197357178,-0.22553177177906,0.639769911766052,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.323071241378784,-0.339786946773529,0.883272171020508,0.542647838592529,0.604447543621063,0.583246529102325,0.674828827381134,0.533339440822601,0.510054051876068,0.817657768726349,0.451825648546219,0.356776267290115,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.938033282756805,-0.126567348837852,0.322605550289154,0.478552430868149,0.592504560947418,0.648016929626465,0.723428726196289,-0.0725484043359756,0.686576724052429,0.931710660457611,0.00594053184613585,0.363152772188187,0.83936071395874,0.300622671842575,0.452879250049591,0.542647838592529,0.604447543621063,0.583246529102325,0.478552430868149,0.592504560947418,0.648016929626465,0.83936071395874,0.300622671842575,0.452879250049591,0.674828827381134,0.533339440822601,0.510054051876068,0.904658854007721,-0.172026917338371,0.389870554208755,0.679584980010986,-0.597025573253632,0.426291733980179,0.562524676322937,-0.508338332176209,0.652041435241699,0.799828112125397,-0.075599230825901,0.595449209213257,0.931710660457611,0.00594053184613585,0.363152772188187,0.723428726196289,-0.0725484043359756,0.686576724052429,0.679584980010986,-0.597025573253632,0.426291733980179,0.904658854007721,-0.172026917338371,0.389870554208755,0.419204384088516,0.619329214096069,0.663851618766785,0.713757336139679,-0.0291267577558756,0.699787139892578,0.723428726196289,-0.0725484043359756,0.686576724052429,0.478552430868149,0.592504560947418,0.648016929626465,0.454763680696487,0.657829880714417,0.600374758243561,0.419204384088516,0.619329214096069,0.663851618766785,0.478552430868149,0.592504560947418,0.648016929626465,0.542647838592529,0.604447543621063,0.583246529102325, 0.679584980010986,-0.597025573253632,0.426291733980179,0.88217830657959,-0.427934646606445,0.19655367732048,0.769319772720337,-0.500670611858368,0.396832406520844,0.562524676322937,-0.508338332176209,0.652041435241699,0.723428726196289,-0.0725484043359756,0.686576724052429,0.713757336139679,-0.0291267577558756,0.699787139892578,0.88217830657959,-0.427934646606445,0.19655367732048,0.679584980010986,-0.597025573253632,0.426291733980179,0.419204384088516,0.619329214096069,0.663851618766785,0.211952582001686,0.670883417129517,0.710627555847168,0.380322515964508,-0.00781834218651056,0.924820899963379,0.713757336139679,-0.0291267577558756,0.699787139892578,0.998829364776611,0.0265165809541941,-0.040457472205162,0.828034996986389,-0.0658707618713379,0.556793570518494,0.769319772720337,-0.500670611858368,0.396832406520844,0.88217830657959,-0.427934646606445,0.19655367732048,0.882227420806885,-0.112881802022457,0.457091331481934,0.998829364776611,0.0265165809541941,-0.040457472205162,0.88217830657959,-0.427934646606445,0.19655367732048,0.713757336139679,-0.0291267577558756,0.699787139892578,0.45019194483757,-0.821827292442322,0.349180638790131,0.392352849245071,-0.511246860027313,0.764647543430328,0.717177391052246,-0.236680090427399,0.655468583106995,0.938493072986603,-0.335132718086243,0.0831675454974175,0.415358334779739,-0.555045127868652,0.720695734024048,0.45019194483757,-0.821827292442322,0.349180638790131,0.938493072986603,-0.335132718086243,0.0831675454974175,0.845881640911102,-0.333893984556198,0.415931522846222,0.0997511595487595,0.3437180519104,0.933759927749634,-0.0513959974050522,-0.174092352390289,0.983387172222137,-0.129297733306885,0.717350006103516,0.68461012840271,0.380322515964508,-0.00781834218651056,0.924820899963379,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.448386162519455,-0.404915392398834,0.796864748001099,0.381502151489258,-0.250341862440109,0.889823019504547,0.45019194483757,-0.821827292442322,0.349180638790131,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.147943556308746,-0.468891173601151,0.870777666568756, 0.392352849245071,-0.511246860027313,0.764647543430328,0.415358334779739,-0.555045127868652,0.720695734024048,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.47701033949852,-0.793649733066559,0.377599358558655,0.45019194483757,-0.821827292442322,0.349180638790131,-0.129297733306885,0.717350006103516,0.68461012840271,-0.214603140950203,0.506344437599182,0.835201025009155,-0.225461483001709,-0.22565546631813,0.947758793830872,0.380322515964508,-0.00781834218651056,0.924820899963379,0.211952582001686,0.670883417129517,0.710627555847168,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.214603140950203,0.506344437599182,0.835201025009155,-0.129297733306885,0.717350006103516,0.68461012840271,-0.0513959974050522,-0.174092352390289,0.983387172222137,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.518838763237,-0.706463754177094,0.481368243694305,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.518838763237,-0.706463754177094,0.481368243694305,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.664949595928192,0.242700353264809,0.706355810165405,-0.738620281219482,0.158259704709053,0.655281603336334,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.508101880550385,0.373251050710678,0.776219129562378,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.508101880550385,0.373251050710678,0.776219129562378,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.703794181346893,-0.329490482807159,0.629372477531433,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.395677655935287,-0.301782429218292,0.867390632629395, -0.650932431221008,-0.45871701836586,0.604868352413177,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.738620281219482,0.158259704709053,0.655281603336334,-0.644040644168854,-0.339113295078278,0.685721397399902,0.380322515964508,-0.00781834218651056,0.924820899963379,0.381502151489258,-0.250341862440109,0.889823019504547,0.882227420806885,-0.112881802022457,0.457091331481934,0.713757336139679,-0.0291267577558756,0.699787139892578,-0.214603140950203,0.506344437599182,0.835201025009155,-0.508101880550385,0.373251050710678,0.776219129562378,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.225461483001709,-0.22565546631813,0.947758793830872,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.279380530118942,-0.650672852993011,0.706095814704895,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.518838763237,-0.706463754177094,0.481368243694305,-0.395677655935287,-0.301782429218292,0.867390632629395,-0.245217561721802,-0.767791271209717,0.59191632270813,-0.518838763237,-0.706463754177094,0.481368243694305,-0.225461483001709,-0.22565546631813,0.947758793830872,0.904658854007721,-0.172026917338371,0.389870554208755,0.799828112125397,-0.075599230825901,0.595449209213257,0.674828827381134,0.533339440822601,0.510054051876068,0.83936071395874,0.300622671842575,0.452879250049591,0.728648900985718,-0.0937679037451744,0.678438127040863,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.409103959798813,-0.270957797765732,0.8713299036026,0.0549214817583561,-0.121100522577763,0.991119742393494,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.340044319629669,-0.38835272192955,0.856476545333862,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.734731197357178,-0.22553177177906,0.639769911766052,-0.644040644168854,-0.339113295078278,0.685721397399902,-0.738620281219482,0.158259704709053,0.655281603336334,0.358441174030304,0.000843510264530778,0.933551967144012, 0.072246678173542,-0.0245807897299528,0.997083842754364,0.0549214817583561,-0.121100522577763,0.991119742393494,0.41880676150322,-0.0415473021566868,0.907124400138855,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.332508891820908,-0.680451393127441,0.65301126241684,-0.279380530118942,-0.650672852993011,0.706095814704895,0.415581941604614,-0.137492552399635,0.899103701114655,0.562524676322937,-0.508338332176209,0.652041435241699,0.769319772720337,-0.500670611858368,0.396832406520844,0.828034996986389,-0.0658707618713379,0.556793570518494,-0.879705667495728,-0.112221792340279,0.462086796760559,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.66814124584198,-0.354110926389694,0.654364347457886,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.280184537172318,-0.219449639320374,0.934525847434998,0.883821845054626,0.46681609749794,-0.0306868441402912,0.817657768726349,0.451825648546219,0.356776267290115,0.900879740715027,0.256662726402283,0.350056976079941,0.901214420795441,0.431201189756393,-0.0433364585042,0.904658854007721,-0.172026917338371,0.389870554208755,0.83936071395874,0.300622671842575,0.452879250049591,0.931710660457611,0.00594053184613585,0.363152772188187,-0.786463916301727,-0.0169835556298494,0.617402672767639,-0.650932431221008,-0.45871701836586,0.604868352413177,-0.703794181346893,-0.329490482807159,0.629372477531433, 0.617214262485504,-0.750285804271698,0.236891880631447,0.713743150234222,-0.689680516719818,-0.122112594544888,0.969275593757629,-0.197328850626946,0.146854087710381,0.76043301820755,-0.311322569847107,0.569929718971252,0.432984858751297,-0.720436871051788,0.541751623153687,0.617214262485504,-0.750285804271698,0.236891880631447,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.399355500936508,-0.336066722869873,0.85297966003418,0.0704309046268463,-0.316668450832367,0.945917844772339,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.289891123771667,-0.78655070066452,0.545253217220306,0.139990121126175,-0.714202702045441,0.685796797275543,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.175360560417175,-0.976183235645294,-0.127729922533035,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.323071241378784,-0.339786946773529,0.883272171020508,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.491936564445496,-0.3821080327034,0.782299101352692,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.47701033949852,-0.793649733066559,0.377599358558655,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.870778322219849,-0.383099049329758,0.308188587427139,-0.913633704185486,-0.352534234523773,0.202467292547226, 0.381502151489258,-0.250341862440109,0.889823019504547,-0.448386162519455,-0.404915392398834,0.796864748001099,-0.505195796489716,-0.403650432825089,0.762786626815796,0.369075655937195,-0.252174496650696,0.894534051418304,0.882227420806885,-0.112881802022457,0.457091331481934,0.381502151489258,-0.250341862440109,0.889823019504547,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.901904165744781,-0.103395886719227,0.419378310441971,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.998829364776611,0.0265165809541941,-0.040457472205162,0.882227420806885,-0.112881802022457,0.457091331481934,0.717177391052246,-0.236680090427399,0.655468583106995,0.828034996986389,-0.0658707618713379,0.556793570518494,0.998829364776611,0.0265165809541941,-0.040457472205162,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.938493072986603,-0.335132718086243,0.0831675454974175,0.358441174030304,0.000843510264530778,0.933551967144012,0.415581941604614,-0.137492552399635,0.899103701114655,0.828034996986389,-0.0658707618713379,0.556793570518494,0.717177391052246,-0.236680090427399,0.655468583106995,0.71001797914505,-0.0603355132043362,0.701593995094299,0.415581941604614,-0.137492552399635,0.899103701114655,0.358441174030304,0.000843510264530778,0.933551967144012,0.698577165603638,0.0347565114498138,0.714690029621124,0.71001797914505,-0.0603355132043362,0.701593995094299,0.698577165603638,0.0347565114498138,0.714690029621124,0.922343671321869,0.13623221218586,0.361556380987167,0.927353084087372,0.117294065654278,0.355328530073166,0.956080257892609,0.274207085371017,-0.103542387485504,0.927353084087372,0.117294065654278,0.355328530073166,0.922343671321869,0.13623221218586,0.361556380987167,0.962835073471069,0.210140570998192,-0.169674947857857,-0.750467360019684,0.503474771976471,0.428149402141571,-0.644507586956024,0.336329728364944,0.686652958393097,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.993737041950226,-0.103920765221119,-0.041074700653553, -0.727824807167053,-0.528583109378815,-0.436887800693512,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.979109942913055,-0.187053516507149,-0.0797165557742119,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.750467360019684,0.503474771976471,0.428149402141571,-0.011982899159193,-0.684736132621765,0.728692591190338,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.912629246711731,0.357585817575455,0.198091477155685,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.826197624206543,-0.211467355489731,-0.522186815738678,0.495204418897629,-0.163849160075188,0.853185832500458,0.628335058689117,0.550278067588806,0.549899160861969,0.625909388065338,0.726224660873413,0.284315198659897,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.154521003365517,0.240299493074417,-0.958321154117584,0.184527859091759,0.31499707698822,-0.930981338024139,0.204966142773628,0.497180044651031,-0.843090057373047,0.868426561355591,0.2465450912714,-0.430175423622131,0.854514420032501,0.21429717540741,-0.473161548376083,0.847418010234833,0.181933760643005,-0.49878141283989,0.86673891544342,0.195172861218452,-0.458989411592484, 0.86673891544342,0.195172861218452,-0.458989411592484,0.924738705158234,0.24395327270031,-0.29213884472847,0.87714958190918,0.359215557575226,-0.318704843521118,0.828140437602997,-0.416388809680939,0.375238239765167,0.713566720485687,0.700178623199463,0.0239254627376795,0.843237340450287,0.525120317935944,-0.114888966083527,0.883931815624237,-0.461925357580185,-0.0727289691567421,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.467275679111481,0.564712703227997,-0.680259525775909,0.153497099876404,0.630856812000275,-0.76056444644928,0.387114733457565,-0.80674409866333,-0.446437150239944,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.136648282408714,0.56611156463623,-0.812923669815063,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.136648282408714,0.56611156463623,-0.812923669815063,0.141500309109688,-0.856403529644012,-0.496538639068604,0.387114733457565,-0.80674409866333,-0.446437150239944,0.153497099876404,0.630856812000275,-0.76056444644928,0.343719273805618,0.683673620223999,-0.643775939941406,0.582785487174988,-0.706441342830658,-0.40162381529808,-0.733602643013,0.104122340679169,-0.671554684638977,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.809531450271606,0.353956669569016,0.468373239040375,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.747647523880005,-0.00706110056489706,-0.664058268070221,0.794842600822449,-0.0390454083681107,-0.605558216571808,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.370678871870041,0.354065299034119,-0.858623862266541,0.985135495662689,0.16939789056778,0.0285019427537918, 0.181528016924858,-0.138318374752998,-0.973609566688538,0.287791073322296,-0.680340945720673,-0.67402708530426,0.412972420454025,-0.0658904165029526,-0.908356904983521,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.802786946296692,0.346281349658966,0.485409408807755,-0.855425894260406,0.486632615327835,-0.177299648523331,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.287791073322296,-0.680340945720673,-0.67402708530426,0.445772647857666,-0.772406101226807,-0.452410876750946,0.725067377090454,0.0188654419034719,-0.688419461250305,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.847418010234833,0.181933760643005,-0.49878141283989,0.854514420032501,0.21429717540741,-0.473161548376083,0.788738131523132,0.260696917772293,-0.556712925434113,0.767102777957916,0.172567009925842,-0.617878556251526,0.711101770401001,0.454571276903152,-0.536375999450684,0.700349986553192,0.341331839561462,-0.626899063587189,0.817859530448914,0.310457706451416,-0.484480977058411,0.811875224113464,0.435735166072845,-0.388578832149506,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.944730460643768,-0.313157916069031,-0.0970383062958717,0.804398238658905,0.375304967164993,-0.460531920194626,0.850323617458344,0.228136360645294,-0.474239885807037,0.796033978462219,0.30541729927063,-0.522541999816895,0.804398238658905,0.375304967164993,-0.460531920194626,0.904132843017578,0.38877084851265,-0.177203312516212,0.783251345157623,0.53278785943985,-0.320397257804871,0.811875224113464,0.435735166072845,-0.388578832149506,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.461797803640366,-0.839399814605713,-0.286619544029236, -0.604859709739685,-0.787493765354156,-0.118314750492573,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.135029509663582,-0.80270379781723,-0.580890357494354,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.0736050382256508,0.39994078874588,-0.913580656051636,0.247284039855003,0.510108411312103,-0.823796093463898,0.286900162696838,-0.815463900566101,-0.502699613571167,0.135029509663582,-0.80270379781723,-0.580890357494354,0.468129217624664,-0.774566531181335,-0.425325512886047,0.286900162696838,-0.815463900566101,-0.502699613571167,0.247284039855003,0.510108411312103,-0.823796093463898,0.525159299373627,0.660153150558472,-0.537034034729004,0.821175813674927,-0.555518984794617,0.130648210644722,0.468129217624664,-0.774566531181335,-0.425325512886047,0.525159299373627,0.660153150558472,-0.537034034729004,0.81356155872345,0.572328507900238,0.102750584483147,0.261260062456131,-0.761487662792206,0.593194544315338,0.419214755296707,-0.523533642292023,0.741735517978668,-0.397260129451752,0.234844520688057,0.887148499488831,0.0315268374979496,0.564418375492096,0.824886620044708,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.642944931983948,0.0801258310675621,0.761709690093994,-0.397260129451752,0.234844520688057,0.887148499488831,0.689028441905975,-0.416694343090057,0.592963397502899,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.886275291442871,0.375701189041138,0.270859181880951,-0.888629198074341,0.438762098550797,0.133514106273651,0.749106764793396,0.343264579772949,-0.56657612323761,0.741937816143036,0.455005794763565,-0.492440849542618,0.797342956066132,0.463364690542221,-0.386700719594955,0.825478971004486,0.333341240882874,-0.455486595630646, -0.917498290538788,0.153388485312462,-0.36697256565094,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.903565168380737,0.0908703580498695,-0.418703347444534,0.784849643707275,0.264893710613251,-0.560216426849365,0.808817446231842,0.214464277029037,-0.547557651996613,0.833951056003571,0.203840136528015,-0.512810707092285,0.841212332248688,0.233560338616371,-0.487659126520157,0.582049369812012,-0.552822172641754,-0.596327304840088,0.750801265239716,0.03514039888978,-0.659592807292938,0.847964406013489,0.0018927511991933,-0.530049800872803,0.632658183574677,-0.595792829990387,-0.494746923446655,0.964388489723206,0.187021419405937,-0.187023624777794,0.974583148956299,0.15406733751297,-0.162637546658516,0.841212332248688,0.233560338616371,-0.487659126520157,0.833951056003571,0.203840136528015,-0.512810707092285,0.904132843017578,0.38877084851265,-0.177203312516212,0.883821845054626,0.46681609749794,-0.0306868441402912,0.789179563522339,0.518753051757813,-0.328771829605103,0.783251345157623,0.53278785943985,-0.320397257804871,0.215944558382034,0.319608330726624,-0.922614991664886,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.323528319597244,0.300020337104797,-0.89739465713501,0.224338784813881,0.414775222539902,-0.881835401058197,-0.233401030302048,0.186044618487358,-0.954416751861572,0.2085961997509,0.239187613129616,-0.948302090167999,0.168669149279594,0.29014664888382,-0.942000865936279,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.846266686916351,-0.512883901596069,-0.144162610173225,0.903218030929565,-0.152758419513702,0.401076167821884,0.542647838592529,0.604447543621063,0.583246529102325,0.817657768726349,0.451825648546219,0.356776267290115,0.992223381996155,-0.121708244085312,0.0260738711804152,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.787253379821777,-0.358191251754761,0.501927375793457, -0.635453879833221,-0.442719787359238,0.632611691951752,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.740222573280334,0.520439863204956,-0.4256911277771,0.7084801197052,0.54767894744873,-0.445088446140289,0.783251345157623,0.53278785943985,-0.320397257804871,0.789179563522339,0.518753051757813,-0.328771829605103,0.216972485184669,0.595779240131378,-0.773285210132599,0.233416378498077,0.501707494258881,-0.832950413227081,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.894527077674866,-0.0458483695983887,-0.444656252861023,0.749106764793396,0.343264579772949,-0.56657612323761,0.825478971004486,0.333341240882874,-0.455486595630646,0.83752965927124,0.20064052939415,-0.508219838142395,0.794304847717285,0.190871343016624,-0.576756417751312,-0.28614467382431,0.227497309446335,-0.930787920951843,0.215944558382034,0.319608330726624,-0.922614991664886,0.222743824124336,0.213152140378952,-0.951289296150208,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.907213628292084,-0.0245506521314383,-0.419953256845474,0.847964406013489,0.0018927511991933,-0.530049800872803,0.971639752388,-0.0853487625718117,-0.220526039600372,0.698415637016296,-0.626996219158173,-0.345096111297607,0.632658183574677,-0.595792829990387,-0.494746923446655,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.700080990791321,-0.0367838852107525,-0.713115334510803, -0.255131036043167,0.019106624647975,-0.966717660427094,0.711101770401001,0.454571276903152,-0.536375999450684,0.811875224113464,0.435735166072845,-0.388578832149506,0.783251345157623,0.53278785943985,-0.320397257804871,0.7084801197052,0.54767894744873,-0.445088446140289,0.216972485184669,0.595779240131378,-0.773285210132599,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.232910394668579,0.366851598024368,-0.900651276111603,0.204966142773628,0.497180044651031,-0.843090057373047,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.897854268550873,-0.19834990799427,-0.393083959817886,0.784849643707275,0.264893710613251,-0.560216426849365,0.841212332248688,0.233560338616371,-0.487659126520157,0.847964406013489,0.0018927511991933,-0.530049800872803,0.750801265239716,0.03514039888978,-0.659592807292938,0.156650885939598,0.00669354572892189,-0.987631380558014,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.261592835187912,0.265700459480286,-0.927886009216309,0.168669149279594,0.29014664888382,-0.942000865936279,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.937702357769012,-0.340810507535934,-0.0675463825464249,0.924062311649323,0.166339710354805,-0.344151109457016,0.904132843017578,0.38877084851265,-0.177203312516212,0.804398238658905,0.375304967164993,-0.460531920194626,0.798422634601593,0.345685362815857,-0.49297359585762,0.633183419704437,0.759799301624298,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.582785487174988,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.495204418897629,-0.163849160075188,0.853185832500458,0.625909388065338,0.726224660873413,0.284315198659897,0.69633674621582,-0.401266545057297,0.595063328742981,0.54774808883667,0.373568952083588,0.74861091375351,0.0833947658538818,-0.437338054180145,0.895422101020813, 0.127582147717476,-0.649050772190094,0.749970614910126,-0.397260129451752,0.234844520688057,0.887148499488831,0.419214755296707,-0.523533642292023,0.741735517978668,0.689028441905975,-0.416694343090057,0.592963397502899,0.788738131523132,0.260696917772293,-0.556712925434113,0.680371522903442,0.248313769698143,-0.689517855644226,0.468770742416382,0.121921703219414,-0.874865233898163,0.767102777957916,0.172567009925842,-0.617878556251526,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.255131036043167,0.019106624647975,-0.966717660427094,0.156650885939598,0.00669354572892189,-0.987631380558014,0.969275593757629,-0.197328850626946,0.146854087710381,0.955532789230347,0.0592790879309177,0.288865029811859,0.728648900985718,-0.0937679037451744,0.678438127040863,0.76043301820755,-0.311322569847107,0.569929718971252,0.399355500936508,-0.336066722869873,0.85297966003418,0.76043301820755,-0.311322569847107,0.569929718971252,0.728648900985718,-0.0937679037451744,0.678438127040863,0.409103959798813,-0.270957797765732,0.8713299036026,0.409103959798813,-0.270957797765732,0.8713299036026,0.0793883204460144,-0.368574857711792,0.926201999187469,0.0704309046268463,-0.316668450832367,0.945917844772339,0.399355500936508,-0.336066722869873,0.85297966003418,0.0793883204460144,-0.368574857711792,0.926201999187469,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.378215819597244,-0.383805155754089,0.842405080795288,0.0704309046268463,-0.316668450832367,0.945917844772339,-0.340044319629669,-0.38835272192955,0.856476545333862,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.378215819597244,-0.383805155754089,0.842405080795288,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.640028655529022,-0.393081039190292,0.660189807415009,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.938033282756805,-0.126567348837852,0.322605550289154, -0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.938033282756805,-0.126567348837852,0.322605550289154,-0.787253379821777,-0.358191251754761,0.501927375793457,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.298704415559769,-0.948391199111938,0.106441475450993,-0.635453879833221,-0.442719787359238,0.632611691951752,-0.664949595928192,0.242700353264809,0.706355810165405,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.665161728858948,0.0713187083601952,0.743285655975342,0.0997511595487595,0.3437180519104,0.933759927749634,0.211952582001686,0.670883417129517,0.710627555847168,0.211952582001686,0.670883417129517,0.710627555847168,0.0997511595487595,0.3437180519104,0.933759927749634,-0.129297733306885,0.717350006103516,0.68461012840271,0.433499962091446,-0.540944635868073,-0.720733463764191,0.757972776889801,-0.133172035217285,-0.63854718208313,0.839367091655731,0.0223367810249329,-0.543105840682983,0.698725283145905,-0.511526346206665,-0.500123798847198,0.625909388065338,0.726224660873413,0.284315198659897,0.713566720485687,0.700178623199463,0.0239254627376795,0.828140437602997,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.985335350036621,0.0123839350417256,-0.170178771018982,0.992223381996155,-0.121708244085312,0.0260738711804152,0.817657768726349,0.451825648546219,0.356776267290115,0.883821845054626,0.46681609749794,-0.0306868441402912,0.904132843017578,0.38877084851265,-0.177203312516212,0.572269201278687,-0.327979475259781,0.751623213291168,0.263325154781342,-0.487631261348724,0.832391500473022,0.0997511595487595,0.3437180519104,0.933759927749634,0.665161728858948,0.0713187083601952,0.743285655975342, 0.263325154781342,-0.487631261348724,0.832391500473022,-0.10741464048624,-0.480259567499161,0.87052446603775,0.026099681854248,-0.974704563617706,0.221968054771423,-0.0513959974050522,-0.174092352390289,0.983387172222137,0.0997511595487595,0.3437180519104,0.933759927749634,-0.508101880550385,0.373251050710678,0.776219129562378,-0.214603140950203,0.506344437599182,0.835201025009155,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.664949595928192,0.242700353264809,0.706355810165405,0.903218030929565,-0.152758419513702,0.401076167821884,0.882815957069397,-0.369267553091049,0.290305823087692,0.665161728858948,0.0713187083601952,0.743285655975342,0.454763680696487,0.657829880714417,0.600374758243561,0.542647838592529,0.604447543621063,0.583246529102325,0.87714958190918,0.359215557575226,-0.318704843521118,0.924738705158234,0.24395327270031,-0.29213884472847,0.843237340450287,0.525120317935944,-0.114888966083527,0.839367091655731,0.0223367810249329,-0.543105840682983,0.757972776889801,-0.133172035217285,-0.63854718208313,0.86673891544342,0.195172861218452,-0.458989411592484,0.847418010234833,0.181933760643005,-0.49878141283989,0.468770742416382,0.121921703219414,-0.874865233898163,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.725067377090454,0.0188654419034719,-0.688419461250305,0.767102777957916,0.172567009925842,-0.617878556251526,0.412972420454025,-0.0658904165029526,-0.908356904983521,0.468770742416382,0.121921703219414,-0.874865233898163,0.236234411597252,0.0899422541260719,-0.967524528503418,0.181528016924858,-0.138318374752998,-0.973609566688538,-0.802456378936768,-0.12530305981636,-0.583406329154968,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.771207451820374,-0.338145196437836,-0.539348602294922,-0.802456378936768,-0.12530305981636,-0.583406329154968, -0.727824807167053,-0.528583109378815,-0.436887800693512,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.896283984184265,-0.348051100969315,-0.274837076663971,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.907213628292084,-0.0245506521314383,-0.419953256845474,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.826197624206543,-0.211467355489731,-0.522186815738678,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.897854268550873,-0.19834990799427,-0.393083959817886,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.994358837604523,0.088942214846611,0.0577910803258419,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.980311870574951,-0.142144083976746,-0.137053519487381,0.924738705158234,0.24395327270031,-0.29213884472847,0.86673891544342,0.195172861218452,-0.458989411592484, 0.757972776889801,-0.133172035217285,-0.63854718208313,0.843237340450287,0.525120317935944,-0.114888966083527,0.924738705158234,0.24395327270031,-0.29213884472847,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185,-0.0727289691567421,-0.903565168380737,0.0908703580498695,-0.418703347444534,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.901192605495453,-0.155655428767204,-0.404503762722015,-0.996665477752686,0.0815145745873451,0.0036500059068203,-0.997882843017578,0.0525476969778538,0.0383221693336964,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.917498290538788,0.153388485312462,-0.36697256565094,-0.94291615486145,0.0813095048069954,-0.322951853275299,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.917498290538788,0.153388485312462,-0.36697256565094,0.224338784813881,0.414775222539902,-0.881835401058197,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.337705463171005,0.352743804454803,-0.872655034065247,0.233416378498077,0.501707494258881,-0.832950413227081,0.740222573280334,0.520439863204956,-0.4256911277771,0.789179563522339,0.518753051757813,-0.328771829605103,0.797342956066132,0.463364690542221,-0.386700719594955,0.741937816143036,0.455005794763565,-0.492440849542618,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283,0.350056976079941,0.817657768726349,0.451825648546219,0.356776267290115,0.674828827381134,0.533339440822601,0.510054051876068,0.971639752388,-0.0853487625718117,-0.220526039600372,0.974583148956299,0.15406733751297,-0.162637546658516,0.955532789230347,0.0592790879309177,0.288865029811859,0.969275593757629,-0.197328850626946,0.146854087710381, 0.698415637016296,-0.626996219158173,-0.345096111297607,0.971639752388,-0.0853487625718117,-0.220526039600372,0.969275593757629,-0.197328850626946,0.146854087710381,0.713743150234222,-0.689680516719818,-0.122112594544888,0.728648900985718,-0.0937679037451744,0.678438127040863,0.955532789230347,0.0592790879309177,0.288865029811859,0.93097060918808,0.125499755144119,0.342846184968948,0.700942933559418,0.0266663283109665,0.712718665599823,0.71001797914505,-0.0603355132043362,0.701593995094299,0.927353084087372,0.117294065654278,0.355328530073166,0.900879740715027,0.256662726402283,0.350056976079941,0.799828112125397,-0.075599230825901,0.595449209213257,0.900879740715027,0.256662726402283,0.350056976079941,0.927353084087372,0.117294065654278,0.355328530073166,0.956080257892609,0.274207085371017,-0.103542387485504,0.901214420795441,0.431201189756393,-0.0433364585042,0.974583148956299,0.15406733751297,-0.162637546658516,0.964388489723206,0.187021419405937,-0.187023624777794,0.93097060918808,0.125499755144119,0.342846184968948,0.955532789230347,0.0592790879309177,0.288865029811859,-0.988070666790009,-0.152181640267372,-0.0236044656485319,-0.980311870574951,-0.142144083976746,-0.137053519487381,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.978760063648224,-0.199930444359779,-0.0453491657972336,-0.961961030960083,-0.248708829283714,-0.113026410341263,-0.980311870574951,-0.142144083976746,-0.137053519487381,-0.794891834259033,-0.0708803534507751,-0.602596819400787,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.972312390804291,-0.209807604551315,-0.102904692292213,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.797184348106384,-0.0889851674437523,-0.597142159938812,-0.794891834259033,-0.0708803534507751,-0.602596819400787,0.184527859091759,0.31499707698822,-0.930981338024139,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.152592211961746,0.243283241987228,-0.957877278327942, 0.817859530448914,0.310457706451416,-0.484480977058411,0.700349986553192,0.341331839561462,-0.626899063587189,0.680371522903442,0.248313769698143,-0.689517855644226,0.788738131523132,0.260696917772293,-0.556712925434113,0.863597810268402,0.181175544857979,-0.470504224300385,0.850323617458344,0.228136360645294,-0.474239885807037,0.854514420032501,0.21429717540741,-0.473161548376083,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.371589094400406,-0.191971749067307,0.908332765102386,-0.280184537172318,-0.219449639320374,0.934525847434998,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.663156628608704,-0.176363825798035,0.727405726909637,-0.662939727306366,-0.253610551357269,0.70440936088562,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.894527077674866,-0.0458483695983887,-0.444656252861023,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.880043566226959,-0.142866209149361,-0.452893614768982,-0.243201240897179,0.169641554355621,-0.955026090145111,0.222743824124336,0.213152140378952,-0.951289296150208,0.2085961997509,0.239187613129616,-0.948302090167999,-0.233401030302048,0.186044618487358,-0.954416751861572,0.833951056003571,0.203840136528015,-0.512810707092285,0.808817446231842,0.214464277029037,-0.547557651996613,0.794304847717285,0.190871343016624,-0.576756417751312,0.83752965927124,0.20064052939415,-0.508219838142395,0.962835073471069,0.210140570998192,-0.169674947857857,0.964388489723206,0.187021419405937,-0.187023624777794,0.833951056003571,0.203840136528015,-0.512810707092285, 0.83752965927124,0.20064052939415,-0.508219838142395,0.964388489723206,0.187021419405937,-0.187023624777794,0.962835073471069,0.210140570998192,-0.169674947857857,0.922343671321869,0.13623221218586,0.361556380987167,0.93097060918808,0.125499755144119,0.342846184968948,0.93097060918808,0.125499755144119,0.342846184968948,0.922343671321869,0.13623221218586,0.361556380987167,0.698577165603638,0.0347565114498138,0.714690029621124,0.700942933559418,0.0266663283109665,0.712718665599823,0.41880676150322,-0.0415473021566868,0.907124400138855,0.700942933559418,0.0266663283109665,0.712718665599823,0.698577165603638,0.0347565114498138,0.714690029621124,0.358441174030304,0.000843510264530778,0.933551967144012,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.47701033949852,-0.793649733066559,0.377599358558655,0.392352849245071,-0.511246860027313,0.764647543430328,0.072246678173542,-0.0245807897299528,0.997083842754364,0.358441174030304,0.000843510264530778,0.933551967144012,0.717177391052246,-0.236680090427399,0.655468583106995,0.392352849245071,-0.511246860027313,0.764647543430328,-0.147943556308746,-0.468891173601151,0.870777666568756,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.519910514354706,-0.607847154140472,0.600179076194763,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.913633704185486,-0.352534234523773,0.202467292547226,-0.505195796489716,-0.403650432825089,0.762786626815796,-0.519910514354706,-0.607847154140472,0.600179076194763,0.415358334779739,-0.555045127868652,0.720695734024048,0.369075655937195,-0.252174496650696,0.894534051418304,0.901904165744781,-0.103395886719227,0.419378310441971,0.369075655937195,-0.252174496650696,0.894534051418304,0.415358334779739,-0.555045127868652,0.720695734024048,0.845881640911102,-0.333893984556198,0.415931522846222,0.845881640911102,-0.333893984556198,0.415931522846222,0.938493072986603,-0.335132718086243,0.0831675454974175,0.996204316616058,0.0376579239964485,-0.0784778967499733,0.901904165744781,-0.103395886719227,0.419378310441971, -0.680876314640045,-0.688694536685944,-0.249213308095932,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.657594680786133,-0.753369987010956,0.00171860994305462,-0.846266686916351,-0.512883901596069,-0.144162610173225,-0.817072033882141,-0.573431372642517,-0.0597474798560143,-0.680876314640045,-0.688694536685944,-0.249213308095932,0.863597810268402,0.181175544857979,-0.470504224300385,0.854514420032501,0.21429717540741,-0.473161548376083,0.868426561355591,0.2465450912714,-0.430175423622131,0.850903332233429,0.254371464252472,-0.459628790616989,0.850323617458344,0.228136360645294,-0.474239885807037,0.863597810268402,0.181175544857979,-0.470504224300385,0.796033978462219,0.30541729927063,-0.522541999816895,0.850323617458344,0.228136360645294,-0.474239885807037,0.850903332233429,0.254371464252472,-0.459628790616989,0.804398238658905,0.375304967164993,-0.460531920194626,0.796033978462219,0.30541729927063,-0.522541999816895,0.798422634601593,0.345685362815857,-0.49297359585762,0.419204384088516,0.619329214096069,0.663851618766785,0.454763680696487,0.657829880714417,0.600374758243561,0.665161728858948,0.0713187083601952,0.743285655975342,0.211952582001686,0.670883417129517,0.710627555847168,-0.0513959974050522,-0.174092352390289,0.983387172222137,0.026099681854248,-0.974704563617706,0.221968054771423,-0.293226510286331,-0.722825050354004,0.625733315944672,-0.506913185119629,-0.816672563552856,-0.275835067033768,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.776516318321228,0.531664490699768,-0.33816459774971,-0.28744050860405,0.955214440822601,-0.0703088492155075,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.158186048269272,0.96994811296463,-0.184872642159462,0.153497099876404,0.630856812000275,-0.76056444644928,-0.136648282408714,0.56611156463623,-0.812923669815063,0.387114733457565,-0.80674409866333,-0.446437150239944, 0.450898140668869,-0.00387678225524724,-0.892566978931427,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.886275291442871,0.375701189041138,0.270859181880951,-0.39990708231926,0.909411907196045,-0.114211864769459,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.467275679111481,0.564712703227997,-0.680259525775909,-0.22865828871727,0.9653559923172,-0.125710710883141,-0.182223752140999,0.96368795633316,-0.195192277431488,-0.136648282408714,0.56611156463623,-0.812923669815063,0.752802550792694,0.00600722571834922,-0.658219039440155,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.387114733457565,-0.80674409866333,-0.446437150239944,0.582785487174988,-0.706441342830658,-0.40162381529808,0.343719273805618,0.683673620223999,-0.643775939941406,0.153497099876404,0.630856812000275,-0.76056444644928,-0.158186048269272,0.96994811296463,-0.184872642159462,-0.190744638442993,0.965611159801483,-0.176667913794518,-0.191050976514816,-0.840808987617493,-0.50649756193161,0.141500309109688,-0.856403529644012,-0.496538639068604,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.191050976514816,-0.840808987617493,-0.50649756193161,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.506913185119629,-0.816672563552856,-0.275835067033768,0.370678871870041,0.354065299034119,-0.858623862266541,0.433499962091446,-0.540944635868073,-0.720733463764191,0.821175813674927,-0.555518984794617,0.130648210644722,0.81356155872345,0.572328507900238,0.102750584483147,0.821175813674927,-0.555518984794617,0.130648210644722,0.433499962091446,-0.540944635868073,-0.720733463764191,0.698725283145905,-0.511526346206665,-0.500123798847198,0.445772647857666,-0.772406101226807,-0.452410876750946,0.468129217624664,-0.774566531181335,-0.425325512886047,-0.536809802055359,-0.812587976455688,-0.227015629410744, -0.722859144210815,-0.480000674724579,-0.497065395116806,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.802786946296692,0.346281349658966,0.485409408807755,-0.624468743801117,-0.657272636890411,0.421937793493271,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.809531450271606,0.353956669569016,0.468373239040375,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.802786946296692,0.346281349658966,0.485409408807755,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.536809802055359,-0.812587976455688,-0.227015629410744,-0.604859709739685,-0.787493765354156,-0.118314750492573,-0.140064582228661,-0.834803938865662,-0.532432377338409,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.36346247792244,-0.894582808017731,-0.260031878948212,-0.461797803640366,-0.839399814605713,-0.286619544029236,-0.0736050382256508,0.39994078874588,-0.913580656051636,-0.478379726409912,0.39488697052002,-0.784357786178589,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.140064582228661,-0.834803938865662,-0.532432377338409,0.135029509663582,-0.80270379781723,-0.580890357494354,0.183815449476242,-0.694319665431976,-0.695795953273773,-0.0776953548192978,-0.877335965633392,-0.473545104265213,0.3254614174366,-0.149335280060768,-0.933688282966614,0.247284039855003,0.510108411312103,-0.823796093463898,-0.0736050382256508,0.39994078874588,-0.913580656051636,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.135029509663582,-0.80270379781723,-0.580890357494354,0.286900162696838,-0.815463900566101,-0.502699613571167,0.287791073322296,-0.680340945720673,-0.67402708530426,0.183815449476242,-0.694319665431976,-0.695795953273773,0.247284039855003,0.510108411312103,-0.823796093463898,0.3254614174366,-0.149335280060768,-0.933688282966614, 0.727754414081573,0.0140857892110944,-0.685693144798279,0.525159299373627,0.660153150558472,-0.537034034729004,0.287791073322296,-0.680340945720673,-0.67402708530426,0.286900162696838,-0.815463900566101,-0.502699613571167,0.468129217624664,-0.774566531181335,-0.425325512886047,0.445772647857666,-0.772406101226807,-0.452410876750946,0.525159299373627,0.660153150558472,-0.537034034729004,0.727754414081573,0.0140857892110944,-0.685693144798279,0.985135495662689,0.16939789056778,0.0285019427537918,0.370678871870041,0.354065299034119,-0.858623862266541,0.81356155872345,0.572328507900238,0.102750584483147,0.179054066538811,0.451375037431717,-0.8741854429245,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.949472963809967,-0.307868123054504,0.0609782487154007,0.633183419704437,0.759799301624298,-0.14759349822998,0.949472963809967,-0.307868123054504,0.0609782487154007,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.752802550792694,0.00600722571834922,-0.658219039440155,0.582785487174988,-0.706441342830658,-0.40162381529808,0.633183419704437,0.759799301624298,-0.14759349822998,0.343719273805618,0.683673620223999,-0.643775939941406,-0.190744638442993,0.965611159801483,-0.176667913794518,0.179054066538811,0.451375037431717,-0.8741854429245,-0.855425894260406,0.486632615327835,-0.177299648523331,-0.809531450271606,0.353956669569016,0.468373239040375,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.794855117797852,0.412983626127243,-0.444578289985657,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.952340543270111,-0.189113721251488,0.239339768886566,0.905556082725525,-0.270015031099319,0.327200382947922,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.952340543270111,-0.189113721251488,0.239339768886566,0.836283266544342,-0.213887274265289,0.504858911037445,0.780203700065613,-0.321272552013397,0.53671795129776,0.905556082725525,-0.270015031099319,0.327200382947922,0.836283266544342,-0.213887274265289,0.504858911037445,0.660950601100922,-0.242743700742722,0.71008437871933,0.485521018505096,-0.413983583450317,0.769991517066956, 0.780203700065613,-0.321272552013397,0.53671795129776,0.477214813232422,-0.241928040981293,0.844829499721527,0.353479385375977,-0.210105717182159,0.911541521549225,0.081648163497448,-0.362786680459976,0.928288400173187,0.188842624425888,-0.479352325201035,0.857064664363861,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.158661097288132,-0.379611909389496,0.911439180374146,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.109986312687397,-0.239039734005928,0.964760601520538,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.158661097288132,-0.379611909389496,0.911439180374146,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.75563770532608,-0.50673520565033,0.415007293224335,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960243940353394,-0.113252773880959,-0.255157649517059,0.992983877658844,-0.0297704339027405,0.114441238343716,0.939164042472839,-0.287473499774933,0.187962368130684,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.992983877658844,-0.0297704339027405,0.114441238343716,0.915004968643188,-0.0659479200839996,0.398016005754471,0.821053445339203,-0.304968655109406,0.482561200857162,0.939164042472839,-0.287473499774933,0.187962368130684,0.915004968643188,-0.0659479200839996,0.398016005754471,0.755727231502533,-0.0899055525660515,0.648685872554779,0.658008575439453,-0.304749071598053,0.688587427139282,0.821053445339203,-0.304968655109406,0.482561200857162,0.353479385375977,-0.210105717182159,0.911541521549225,0.365955173969269,-0.121213011443615,0.922704815864563,0.0752642378211021,-0.163290247321129,0.983702957630157,0.081648163497448,-0.362786680459976,0.928288400173187,-0.184660717844963,-0.167485594749451,0.968426048755646, -0.141511112451553,-0.212750777602196,0.966804921627045,0.37811690568924,-0.192061543464661,0.90561580657959,0.326031237840652,-0.100235551595688,0.940030038356781,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.481494218111038,-0.48454275727272,0.730329811573029,0.0231705605983734,-0.380178421735764,0.924622893333435,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.925617933273315,-0.333309531211853,0.179265692830086,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.79849648475647,0.00311785028316081,-0.601991355419159,0.906778931617737,0.0885622203350067,-0.412199825048447,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.989881575107574,0.137960970401764,0.0331847853958607,0.992983877658844,-0.0297704339027405,0.114441238343716,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.937741100788116,0.0962117910385132,-0.333743721246719,0.915004968643188,-0.0659479200839996,0.398016005754471,0.992983877658844,-0.0297704339027405,0.114441238343716,0.989881575107574,0.137960970401764,0.0331847853958607,0.948979258537292,0.121414266526699,0.291027426719666,0.755727231502533,-0.0899055525660515,0.648685872554779,0.915004968643188,-0.0659479200839996,0.398016005754471,0.948979258537292,0.121414266526699,0.291027426719666,0.808870196342468,0.0797994136810303,0.582547068595886,0.365955173969269,-0.121213011443615,0.922704815864563,0.399412155151367,0.0118926726281643,0.916694343090057,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.0752642378211021,-0.163290247321129,0.983702957630157,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.184660717844963,-0.167485594749451,0.968426048755646, 0.326031237840652,-0.100235551595688,0.940030038356781,0.309460699558258,0.0171790830790997,0.950757026672363,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.0331847779452801,-0.163069307804108,0.986056327819824,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.641422271728516,-0.270271867513657,0.718004584312439,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.858429491519928,-0.151253908872604,0.490123569965363,0.79849648475647,0.00311785028316081,-0.601991355419159,0.770998120307922,0.0437404066324234,-0.63533353805542,0.899548053741455,0.145640388131142,-0.411827832460403,0.906778931617737,0.0885622203350067,-0.412199825048447,0.978495180606842,0.204968735575676,-0.0231311116367579,0.989881575107574,0.137960970401764,0.0331847853958607,0.937741100788116,0.0962117910385132,-0.333743721246719,0.927813827991486,0.152230933308601,-0.340569078922272,0.854383409023285,0.179303303360939,0.487728714942932,0.808870196342468,0.0797994136810303,0.582547068595886,0.948979258537292,0.121414266526699,0.291027426719666,0.961814522743225,0.194339916110039,0.1927300542593,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.274106293916702,-0.107289478182793,0.955695927143097,0.309460699558258,0.0171790830790997,0.950757026672363,0.192327603697777,0.12894095480442,0.972822844982147,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.926154136657715,0.165854901075363,-0.3387191593647,0.922853767871857,-0.106967732310295,-0.369998395442963,0.978555917739868,-0.185044288635254,-0.090481773018837, 0.978495180606842,0.204968735575676,-0.0231311116367579,0.927813827991486,0.152230933308601,-0.340569078922272,0.548670411109924,0.271492123603821,0.790729284286499,0.501937747001648,0.161304622888565,0.849728941917419,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804,0.36308279633522,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605,-0.180715546011925,0.601944923400879,0.77782016992569,0.251838862895966,-0.440983474254608,0.861458539962769,0.251838862895966,-0.440983474254608,0.861458539962769,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729,0.632033944129944,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.0315550751984119,0.227497562766075,0.973267257213593,0.192327603697777,0.12894095480442,0.972822844982147,-0.17640919983387,0.25873214006424,0.949703872203827,-0.244612783193588,0.231081768870354,0.941682457923889,-0.228005513548851,0.109595887362957,0.967472076416016,-0.128308832645416,0.135050818324089,0.982495844364166,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.951565086841583,-0.195825457572937,0.237015262246132,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.982540905475616,-0.173452958464623,0.0672866627573967,0.777039647102356,0.333707332611084,0.533712267875671,0.65978866815567,0.352559685707092,0.663611769676209,0.760879397392273,0.00385691528208554,0.648881912231445,0.501708924770355,0.238893568515778,0.831395208835602,0.690571069717407,0.287569731473923,0.66363787651062,0.509689807891846,0.284962385892868,0.811796009540558,0.324959099292755,0.210221484303474,0.922067523002625,0.114197269082069,0.229852244257927,0.96650242805481, 0.328837275505066,-0.326990753412247,0.885970175266266,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173,-0.169450506567955,0.19207775592804,0.966639876365662,0.199919357895851,-0.342281520366669,0.918082594871521,0.328837275505066,-0.326990753412247,0.885970175266266,0.114197269082069,0.229852244257927,0.96650242805481,-0.234150588512421,0.240435913205147,0.942000031471252,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.284107565879822,0.352843284606934,0.891506910324097,-0.244612783193588,0.231081768870354,0.941682457923889,-0.17640919983387,0.25873214006424,0.949703872203827,-0.224652707576752,0.331979662179947,0.91614443063736,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.941855192184448,-0.19358217716217,0.274653851985931,-0.973927080631256,-0.0629245564341545,0.217960059642792,0.405990958213806,0.468467801809311,0.784671425819397,0.317346751689911,0.64952027797699,0.690951824188232,0.509689807891846,0.284962385892868,0.811796009540558,0.690571069717407,0.287569731473923,0.66363787651062,0.114197269082069,0.229852244257927,0.96650242805481,0.810181796550751,0.205940678715706,0.548811316490173,0.382766664028168,0.693922400474548,0.609886407852173,-0.353388220071793,0.625863552093506,0.695278108119965,-0.169450506567955,0.19207775592804,0.966639876365662,0.114197269082069,0.229852244257927,0.96650242805481,-0.353388220071793,0.625863552093506,0.695278108119965,-0.596078813076019,0.546218574047089,0.588502645492554,-0.234150588512421,0.240435913205147,0.942000031471252,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.744610011577606,0.447527408599854,0.49525260925293, -0.514606833457947,0.383561730384827,0.766850829124451,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.234150588512421,0.240435913205147,0.942000031471252,-0.514606833457947,0.383561730384827,0.766850829124451,-0.78737735748291,0.23807966709137,0.568643093109131,-0.284107565879822,0.352843284606934,0.891506910324097,-0.224652707576752,0.331979662179947,0.91614443063736,-0.702946484088898,0.346591114997864,0.621080338954926,0.47508293390274,0.0346805192530155,0.879257321357727,0.4305479824543,-0.135443344712257,0.89234721660614,0.755727231502533,-0.0899055525660515,0.648685872554779,0.808870196342468,0.0797994136810303,0.582547068595886,0.501937747001648,0.161304622888565,0.849728941917419,0.47508293390274,0.0346805192530155,0.879257321357727,0.808870196342468,0.0797994136810303,0.582547068595886,0.854383409023285,0.179303303360939,0.487728714942932,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.234150588512421,0.240435913205147,0.942000031471252,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.537278592586517,0.0936881303787231,0.83818507194519,0.192327603697777,0.12894095480442,0.972822844982147,-0.0315550751984119,0.227497562766075,0.973267257213593,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.414724171161652,0.00967030972242355,0.909895837306976,0.961814522743225,0.194339916110039,0.1927300542593,0.922054708003998,0.046831239014864,0.384216070175171,0.882719457149506,0.298290461301804,0.36308279633522,0.854383409023285,0.179303303360939,0.487728714942932,0.882719457149506,0.298290461301804,0.36308279633522,0.7165766954422,0.119066134095192,0.687270760536194,0.564793407917023,-0.0494600534439087,0.823748826980591,0.65978866815567,0.352559685707092,0.663611769676209,0.978495180606842,0.204968735575676,-0.0231311116367579,0.983711898326874,-0.176273837685585,0.0351918712258339,0.922054708003998,0.046831239014864,0.384216070175171,0.961814522743225,0.194339916110039,0.1927300542593,0.948979258537292,0.121414266526699,0.291027426719666,0.989881575107574,0.137960970401764,0.0331847853958607, 0.978495180606842,0.204968735575676,-0.0231311116367579,0.961814522743225,0.194339916110039,0.1927300542593,0.778017222881317,0.0114749372005463,0.62813812494278,0.509491503238678,0.564498364925385,0.649430513381958,-0.110789246857166,0.611093282699585,0.78376704454422,0.129216074943542,-0.0478254444897175,0.990462481975555,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.110789246857166,0.611093282699585,0.78376704454422,-0.611190378665924,0.347120583057404,0.711304187774658,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.279066264629364,0.00181216315831989,0.96027010679245,0.192327603697777,0.12894095480442,0.972822844982147,0.309460699558258,0.0171790830790997,0.950757026672363,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.754620730876923,-0.101689904928207,0.648233532905579,0.433499962091446,-0.540944635868073,-0.720733463764191,0.198074012994766,-0.129640698432922,-0.971576035022736,0.385900169610977,-0.542145550251007,-0.746431052684784,0.757972776889801,-0.133172035217285,-0.63854718208313,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.437477648258209,-0.839490532875061,0.322287112474442,0.828140437602997,-0.416388809680939,0.375238239765167,0.69633674621582,-0.401266545057297,0.595063328742981,0.828140437602997,-0.416388809680939,0.375238239765167,0.437477648258209,-0.839490532875061,0.322287112474442,0.295071959495544,-0.836212575435638,0.462256461381912,0.69633674621582,-0.401266545057297,0.595063328742981,0.295071959495544,-0.836212575435638,0.462256461381912,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.495204418897629,-0.163849160075188,0.853185832500458,0.127582147717476,-0.649050772190094,0.749970614910126,0.0833947658538818,-0.437338054180145,0.895422101020813,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0995030105113983,-0.912258505821228,0.39734560251236, 0.00337490346282721,-0.386369347572327,0.92233794927597,0.689028441905975,-0.416694343090057,0.592963397502899,0.776257395744324,-0.559177398681641,0.291110157966614,0.631964325904846,-0.724000632762909,0.276485413312912,-0.011982899159193,-0.684736132621765,0.728692591190338,0.00337490346282721,-0.386369347572327,0.92233794927597,0.631964325904846,-0.724000632762909,0.276485413312912,0.4933140873909,-0.832423627376556,0.252412617206573,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.011982899159193,-0.684736132621765,0.728692591190338,0.4933140873909,-0.832423627376556,0.252412617206573,0.405342906713486,-0.871097266674042,0.277284443378448,-0.227918326854706,-0.765941560268402,0.601154506206512,0.405342906713486,-0.871097266674042,0.277284443378448,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.557889223098755,-0.23755519092083,-0.7951899766922,0.433499962091446,-0.540944635868073,-0.720733463764191,0.370678871870041,0.354065299034119,-0.858623862266541,0.116842739284039,-0.105540536344051,-0.987526714801788,0.198074012994766,-0.129640698432922,-0.971576035022736,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.586520671844482,-0.278485208749771,-0.760552048683167,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.661859035491943,-0.0551192909479141,-0.747599124908447,0.116842739284039,-0.105540536344051,-0.987526714801788,0.370678871870041,0.354065299034119,-0.858623862266541,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.0670028999447823,-0.229776233434677,-0.970934331417084,-0.931353390216827,0.363743156194687,0.0164867397397757,-0.722859144210815,-0.480000674724579,-0.497065395116806,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.725514113903046,-0.0050869844853878,-0.688188493251801,-0.747647523880005,-0.00706110056489706,-0.664058268070221, -0.733602643013,0.104122340679169,-0.671554684638977,-0.747647523880005,-0.00706110056489706,-0.664058268070221,-0.725514113903046,-0.0050869844853878,-0.688188493251801,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.733602643013,0.104122340679169,-0.671554684638977,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.733602643013,0.104122340679169,-0.671554684638977,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.784134566783905,-0.509350836277008,-0.354534596204758,0.11270098388195,0.815884530544281,-0.567125082015991,-0.277701437473297,0.780102908611298,-0.56064373254776,-0.171155840158463,0.985165357589722,0.0124461855739355,0.227652028203011,0.973727345466614,-0.0054389201104641,-0.423373013734818,0.789847135543823,0.443730562925339,-0.460725039243698,0.8605055809021,0.217399582266808,-0.245494201779366,0.895091235637665,0.372215330600739,-0.1829604357481,0.769297182559967,0.61213344335556,-0.594437062740326,0.745864152908325,0.300551623106003,-0.664495587348938,0.716933071613312,0.210837796330452,-0.590883314609528,0.718779802322388,0.366350263357162,-0.498491138219833,0.755745649337769,0.424682348966599,-0.664495587348938,0.716933071613312,0.210837796330452,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.744540989398956,0.615887403488159,0.257568180561066,-0.590883314609528,0.718779802322388,0.366350263357162,-0.727959036827087,0.661616802215576,-0.179830119013786,-0.748579859733582,0.631325542926788,0.202623516321182,-0.737479329109192,0.641141176223755,0.212278604507446,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.727959036827087,0.661616802215576,-0.179830119013786,-0.793396532535553,0.592922508716583,-0.137712955474854,-0.856980979442596,0.504014492034912,0.107484914362431,-0.748579859733582,0.631325542926788,0.202623516321182,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.856980979442596,0.504014492034912,0.107484914362431, -0.793396532535553,0.592922508716583,-0.137712955474854,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.886275291442871,0.375701189041138,0.270859181880951,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989869713783264,-0.139774799346924,-0.0249191801995039,0.495204418897629,-0.163849160075188,0.853185832500458,-0.0664141848683357,-0.803863763809204,0.591094017028809,-0.453684002161026,-0.692797005176544,0.560538291931152,0.0833947658538818,-0.437338054180145,0.895422101020813,0.689028441905975,-0.416694343090057,0.592963397502899,0.419214755296707,-0.523533642292023,0.741735517978668,0.552227675914764,-0.748098790645599,0.367957681417465,0.877826869487762,-0.373567342758179,0.299778997898102,0.845922589302063,-0.233836695551872,-0.479307234287262,0.385900169610977,-0.542145550251007,-0.746431052684784,0.198074012994766,-0.129640698432922,-0.971576035022736,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.437477648258209,-0.839490532875061,0.322287112474442,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.905556082725525,-0.270015031099319,0.327200382947922,0.295071959495544,-0.836212575435638,0.462256461381912,0.437477648258209,-0.839490532875061,0.322287112474442,0.905556082725525,-0.270015031099319,0.327200382947922,0.780203700065613,-0.321272552013397,0.53671795129776,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.295071959495544,-0.836212575435638,0.462256461381912,0.780203700065613,-0.321272552013397,0.53671795129776,0.485521018505096,-0.413983583450317,0.769991517066956,0.081648163497448,-0.362786680459976,0.928288400173187,-0.0995030105113983,-0.912258505821228,0.39734560251236,-0.453684002161026,-0.692797005176544,0.560538291931152,0.188842624425888,-0.479352325201035,0.857064664363861,0.322147607803345,-0.331866294145584,0.886614739894867,0.187207460403442,-0.466673761606216,0.864389359951019,0.776257395744324,-0.559177398681641,0.291110157966614,0.877826869487762,-0.373567342758179,0.299778997898102, -0.215633437037468,-0.617008090019226,0.756837606430054,0.4933140873909,-0.832423627376556,0.252412617206573,0.631964325904846,-0.724000632762909,0.276485413312912,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.505574762821198,-0.704972326755524,0.49740144610405,0.405342906713486,-0.871097266674042,0.277284443378448,0.4933140873909,-0.832423627376556,0.252412617206573,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.648859262466431,-0.732072472572327,0.20748870074749,0.182749971747398,-0.981905281543732,-0.0496433302760124,0.405342906713486,-0.871097266674042,0.277284443378448,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.198074012994766,-0.129640698432922,-0.971576035022736,0.116842739284039,-0.105540536344051,-0.987526714801788,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.0752642378211021,-0.163290247321129,0.983702957630157,0.584701359272003,-0.0801372230052948,0.807280838489532,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.081648163497448,-0.362786680459976,0.928288400173187,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.557889223098755,-0.23755519092083,-0.7951899766922,-0.913924396038055,-0.399497091770172,-0.0717232823371887,0.824556231498718,-0.0130053572356701,-0.565630555152893,0.116842739284039,-0.105540536344051,-0.987526714801788,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.79849648475647,0.00311785028316081,-0.601991355419159,0.584701359272003,-0.0801372230052948,0.807280838489532,0.0752642378211021,-0.163290247321129,0.983702957630157,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.528049111366272,-0.00915573351085186,0.849164485931396,-0.725514113903046,-0.0050869844853878,-0.688188493251801, -0.661859035491943,-0.0551192909479141,-0.747599124908447,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.987223207950592,-0.158936277031899,-0.0113820992410183,0.79849648475647,0.00311785028316081,-0.601991355419159,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.770998120307922,0.0437404066324234,-0.63533353805542,0.784979939460754,0.0750055387616158,-0.614963889122009,0.772511541843414,0.0615992993116379,-0.632005870342255,0.214329496026039,-0.204933792352676,-0.95502096414566,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.982540905475616,-0.173452958464623,0.0672866627573967,-0.98711097240448,-0.0946236401796341,0.129067301750183,0.798663914203644,0.0795769542455673,-0.596492648124695,0.265012234449387,-0.116133384406567,-0.957225978374481,0.119323797523975,0.10215725004673,-0.987585842609406,0.775733590126038,0.173521965742111,-0.606735110282898,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.827176213264465,0.131099432706833,-0.546436131000519,-0.98711097240448,-0.0946236401796341,0.129067301750183,-0.991252839565277,0.0431834943592548,0.124711617827415,0.73961067199707,0.263024806976318,-0.619511127471924,0.0699164718389511,0.326290965080261,-0.942680180072784,0.11270098388195,0.815884530544281,-0.567125082015991,0.792211890220642,0.491865277290344,-0.361204653978348,0.405990958213806,0.468467801809311,0.784671425819397,-0.1829604357481,0.769297182559967,0.61213344335556,-0.245494201779366,0.895091235637665,0.372215330600739,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.498491138219833,0.755745649337769,0.424682348966599,-0.590883314609528,0.718779802322388,0.366350263357162,-0.594345927238464,0.730467915534973,0.336406856775284,-0.594345927238464,0.730467915534973,0.336406856775284,-0.590883314609528,0.718779802322388,0.366350263357162, -0.744540989398956,0.615887403488159,0.257568180561066,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293,-0.737479329109192,0.641141176223755,0.212278604507446,-0.748579859733582,0.631325542926788,0.202623516321182,-0.514606833457947,0.383561730384827,0.766850829124451,-0.514606833457947,0.383561730384827,0.766850829124451,-0.748579859733582,0.631325542926788,0.202623516321182,-0.856980979442596,0.504014492034912,0.107484914362431,-0.78737735748291,0.23807966709137,0.568643093109131,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.702946484088898,0.346591114997864,0.621080338954926,-0.78737735748291,0.23807966709137,0.568643093109131,-0.856980979442596,0.504014492034912,0.107484914362431,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.953436672687531,0.152786508202553,0.260028511285782,-0.453684002161026,-0.692797005176544,0.560538291931152,-0.0664141848683357,-0.803863763809204,0.591094017028809,0.485521018505096,-0.413983583450317,0.769991517066956,0.188842624425888,-0.479352325201035,0.857064664363861,0.552227675914764,-0.748098790645599,0.367957681417465,-0.204973682761192,-0.221624344587326,0.953345894813538,0.326031237840652,-0.100235551595688,0.940030038356781,0.37811690568924,-0.192061543464661,0.90561580657959,0.877826869487762,-0.373567342758179,0.299778997898102,0.552227675914764,-0.748098790645599,0.367957681417465,0.37811690568924,-0.192061543464661,0.90561580657959,0.322147607803345,-0.331866294145584,0.886614739894867,-0.00303205195814371,-0.243413895368576,-0.969917774200439,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.0670028999447823,-0.229776233434677,-0.970934331417084,0.439302206039429,0.130682423710823,0.888783276081085,0.501708924770355,0.238893568515778,0.831395208835602,0.324959099292755,0.210221484303474,0.922067523002625,0.120599403977394,0.0903128907084465,0.988584518432617, 0.713191568851471,-0.57269150018692,0.404205650091171,0.801663935184479,-0.0182420387864113,0.597496569156647,0.159226432442665,-0.153974950313568,0.975160837173462,0.236816734075546,-0.796482741832733,0.556356966495514,0.127582147717476,-0.649050772190094,0.749970614910126,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.164029166102409,-0.97451639175415,-0.153010532259941,0.261260062456131,-0.761487662792206,0.593194544315338,0.755727231502533,-0.0899055525660515,0.648685872554779,0.4305479824543,-0.135443344712257,0.89234721660614,0.356381446123123,-0.306900352239609,0.882498979568481,0.658008575439453,-0.304749071598053,0.688587427139282,-0.141511112451553,-0.212750777602196,0.966804921627045,0.322147607803345,-0.331866294145584,0.886614739894867,0.37811690568924,-0.192061543464661,0.90561580657959,0.776257395744324,-0.559177398681641,0.291110157966614,0.689028441905975,-0.416694343090057,0.592963397502899,0.877826869487762,-0.373567342758179,0.299778997898102,0.399412155151367,0.0118926726281643,0.916694343090057,0.439302206039429,0.130682423710823,0.888783276081085,0.120599403977394,0.0903128907084465,0.988584518432617,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.0489731431007385,-0.0354295633733273,0.998171508312225,0.120599403977394,0.0903128907084465,0.988584518432617,0.460760354995728,0.108215063810349,0.880902588367462,0.528049111366272,-0.00915573351085186,0.849164485931396,0.120599403977394,0.0903128907084465,0.988584518432617,0.324959099292755,0.210221484303474,0.922067523002625,0.565941989421844,0.17062908411026,0.806594908237457,0.460760354995728,0.108215063810349,0.880902588367462,0.778803884983063,0.240923345088959,0.579154968261719,0.565941989421844,0.17062908411026,0.806594908237457,0.324959099292755,0.210221484303474,0.922067523002625,0.509689807891846,0.284962385892868,0.811796009540558,0.778803884983063,0.240923345088959,0.579154968261719,0.509689807891846,0.284962385892868,0.811796009540558,0.317346751689911,0.64952027797699,0.690951824188232,-0.0522431507706642,0.792317688465118,0.607867777347565, 0.317346751689911,0.64952027797699,0.690951824188232,-0.245494201779366,0.895091235637665,0.372215330600739,-0.498491138219833,0.755745649337769,0.424682348966599,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.460725039243698,0.8605055809021,0.217399582266808,-0.594437062740326,0.745864152908325,0.300551623106003,-0.498491138219833,0.755745649337769,0.424682348966599,-0.245494201779366,0.895091235637665,0.372215330600739,-0.243933483958244,-0.119538404047489,0.962396502494812,0.309460699558258,0.0171790830790997,0.950757026672363,0.326031237840652,-0.100235551595688,0.940030038356781,-0.204973682761192,-0.221624344587326,0.953345894813538,0.159226432442665,-0.153974950313568,0.975160837173462,0.129216074943542,-0.0478254444897175,0.990462481975555,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.501740396022797,-0.243245616555214,0.830113351345062,0.801663935184479,-0.0182420387864113,0.597496569156647,0.778017222881317,0.0114749372005463,0.62813812494278,0.129216074943542,-0.0478254444897175,0.990462481975555,0.159226432442665,-0.153974950313568,0.975160837173462,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.385900169610977,-0.542145550251007,-0.746431052684784,0.845922589302063,-0.233836695551872,-0.479307234287262,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.757972776889801,-0.133172035217285,-0.63854718208313,0.385900169610977,-0.542145550251007,-0.746431052684784,0.495510667562485,-0.864618837833405,-0.0830870270729065,0.883931815624237,-0.461925357580185,-0.0727289691567421,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.250410139560699,-0.715217709541321,-0.65250164270401,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.250410139560699,-0.715217709541321,-0.65250164270401,0.182749971747398,-0.981905281543732,-0.0496433302760124,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.829591572284698,0.0585402958095074,0.555293500423431, -0.806389153003693,-0.12540277838707,0.577936589717865,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.417345523834229,-0.483428627252579,0.769492983818054,0.199919357895851,-0.342281520366669,0.918082594871521,-0.169450506567955,0.19207775592804,0.966639876365662,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.169450506567955,0.19207775592804,0.966639876365662,-0.596078813076019,0.546218574047089,0.588502645492554,-0.924569010734558,0.246832668781281,0.290251165628433,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744540989398956,0.615887403488159,0.257568180561066,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744610011577606,0.447527408599854,0.49525260925293,-0.727798759937286,0.645060181617737,-0.232822522521019,-0.737479329109192,0.641141176223755,0.212278604507446,-0.744540989398956,0.615887403488159,0.257568180561066,-0.759507477283478,0.648222267627716,-0.0543712638318539,-0.987223207950592,-0.158936277031899,-0.0113820992410183,-0.982540905475616,-0.173452958464623,0.0672866627573967,-0.785425186157227,0.0201522056013346,-0.61862850189209,-0.725514113903046,-0.0050869844853878,-0.688188493251801,0.460760354995728,0.108215063810349,0.880902588367462,0.565941989421844,0.17062908411026,0.806594908237457,0.47046023607254,0.569419384002686,0.674113273620605,0.709650099277496,-0.321021109819412,0.627169966697693,0.47046023607254,0.569419384002686,0.674113273620605,0.565941989421844,0.17062908411026,0.806594908237457,0.238703370094299,-0.21425598859787,0.947161555290222,-0.180715546011925,0.601944923400879,0.77782016992569,-0.692504823207855,0.347807645797729,0.632033944129944,-0.180715546011925,0.601944923400879,0.77782016992569,0.238703370094299,-0.21425598859787,0.947161555290222,-0.420417785644531,0.0594633929431438,0.905380010604858,0.565941989421844,0.17062908411026,0.806594908237457,0.778803884983063,0.240923345088959,0.579154968261719,0.810181796550751,0.205940678715706,0.548811316490173, 0.743318140506744,-0.232130751013756,0.627370238304138,0.328837275505066,-0.326990753412247,0.885970175266266,0.238703370094299,-0.21425598859787,0.947161555290222,0.565941989421844,0.17062908411026,0.806594908237457,0.743318140506744,-0.232130751013756,0.627370238304138,0.810181796550751,0.205940678715706,0.548811316490173,0.778803884983063,0.240923345088959,0.579154968261719,-0.0522431507706642,0.792317688465118,0.607867777347565,0.382766664028168,0.693922400474548,0.609886407852173,-0.0522431507706642,0.792317688465118,0.607867777347565,-0.594345927238464,0.730467915534973,0.336406856775284,-0.353388220071793,0.625863552093506,0.695278108119965,0.382766664028168,0.693922400474548,0.609886407852173,-0.594345927238464,0.730467915534973,0.336406856775284,-0.724499702453613,0.627744674682617,0.284669786691666,-0.596078813076019,0.546218574047089,0.588502645492554,-0.353388220071793,0.625863552093506,0.695278108119965,0.509491503238678,0.564498364925385,0.649430513381958,0.460760354995728,0.108215063810349,0.880902588367462,0.0749799236655235,0.161466613411903,0.984025657176971,-0.110789246857166,0.611093282699585,0.78376704454422,-0.110789246857166,0.611093282699585,0.78376704454422,0.0749799236655235,0.161466613411903,0.984025657176971,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.611190378665924,0.347120583057404,0.711304187774658,0.778017222881317,0.0114749372005463,0.62813812494278,0.528049111366272,-0.00915573351085186,0.849164485931396,0.460760354995728,0.108215063810349,0.880902588367462,0.509491503238678,0.564498364925385,0.649430513381958,0.801663935184479,-0.0182420387864113,0.597496569156647,0.584701359272003,-0.0801372230052948,0.807280838489532,0.528049111366272,-0.00915573351085186,0.849164485931396,0.778017222881317,0.0114749372005463,0.62813812494278,-0.0995030105113983,-0.912258505821228,0.39734560251236,0.584701359272003,-0.0801372230052948,0.807280838489532,0.801663935184479,-0.0182420387864113,0.597496569156647,0.713191568851471,-0.57269150018692,0.404205650091171,-0.0995030105113983,-0.912258505821228,0.39734560251236, 0.713191568851471,-0.57269150018692,0.404205650091171,0.236816734075546,-0.796482741832733,0.556356966495514,0.164029166102409,-0.97451639175415,-0.153010532259941,-0.204973682761192,-0.221624344587326,0.953345894813538,0.552227675914764,-0.748098790645599,0.367957681417465,-0.274976640939713,-0.741328597068787,0.612225234508514,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.204973682761192,-0.221624344587326,0.953345894813538,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.549654603004456,-0.190786048769951,0.8133145570755,-0.611190378665924,0.347120583057404,0.711304187774658,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.243933483958244,-0.119538404047489,0.962396502494812,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.279066264629364,0.00181216315831989,0.96027010679245,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.692504823207855,0.347807645797729,0.632033944129944,0.251838862895966,-0.440983474254608,0.861458539962769,-0.337113708257675,-0.517143785953522,0.78671258687973,-0.279066264629364,0.00181216315831989,0.96027010679245,0.0749799236655235,0.161466613411903,0.984025657176971,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.420417785644531,0.0594633929431438,0.905380010604858,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.840604901313782,-0.077635757625103,0.536056041717529,0.199919357895851,-0.342281520366669,0.918082594871521,-0.417345523834229,-0.483428627252579,0.769492983818054,-0.420417785644531,0.0594633929431438,0.905380010604858,0.238703370094299,-0.21425598859787,0.947161555290222,-0.708681702613831,0.0549901239573956,0.703382074832916,-0.840604901313782,-0.077635757625103,0.536056041717529,-0.924569010734558,0.246832668781281,0.290251165628433,-0.744610011577606,0.447527408599854,0.49525260925293,-0.724499702453613,0.627744674682617,0.284669786691666,-0.744610011577606,0.447527408599854,0.49525260925293,-0.924569010734558,0.246832668781281,0.290251165628433, -0.596078813076019,0.546218574047089,0.588502645492554,0.236816734075546,-0.796482741832733,0.556356966495514,0.159226432442665,-0.153974950313568,0.975160837173462,-0.501740396022797,-0.243245616555214,0.830113351345062,-0.274976640939713,-0.741328597068787,0.612225234508514,0.164029166102409,-0.97451639175415,-0.153010532259941,0.236816734075546,-0.796482741832733,0.556356966495514,-0.274976640939713,-0.741328597068787,0.612225234508514,0.552227675914764,-0.748098790645599,0.367957681417465,0.261260062456131,-0.761487662792206,0.593194544315338,0.164029166102409,-0.97451639175415,-0.153010532259941,0.552227675914764,-0.748098790645599,0.367957681417465,0.419214755296707,-0.523533642292023,0.741735517978668,0.265012234449387,-0.116133384406567,-0.957225978374481,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.119323797523975,0.10215725004673,-0.987585842609406,0.917835712432861,0.197176292538643,-0.344527393579483,0.90627920627594,0.138545647263527,-0.399328351020813,0.798663914203644,0.0795769542455673,-0.596492648124695,0.775733590126038,0.173521965742111,-0.606735110282898,0.690571069717407,0.287569731473923,0.66363787651062,0.777039647102356,0.333707332611084,0.533712267875671,0.457932114601135,0.272002577781677,0.846352636814117,0.405990958213806,0.468467801809311,0.784671425819397,0.690571069717407,0.287569731473923,0.66363787651062,0.501708924770355,0.238893568515778,0.831395208835602,0.548670411109924,0.271492123603821,0.790729284286499,0.777039647102356,0.333707332611084,0.533712267875671,0.501708924770355,0.238893568515778,0.831395208835602,0.439302206039429,0.130682423710823,0.888783276081085,0.501937747001648,0.161304622888565,0.849728941917419,0.548670411109924,0.271492123603821,0.790729284286499,0.399412155151367,0.0118926726281643,0.916694343090057,0.47508293390274,0.0346805192530155,0.879257321357727,0.501937747001648,0.161304622888565,0.849728941917419,0.439302206039429,0.130682423710823,0.888783276081085,0.399412155151367,0.0118926726281643,0.916694343090057,0.365955173969269,-0.121213011443615,0.922704815864563, 0.4305479824543,-0.135443344712257,0.89234721660614,0.47508293390274,0.0346805192530155,0.879257321357727,0.477214813232422,-0.241928040981293,0.844829499721527,0.356381446123123,-0.306900352239609,0.882498979568481,0.353479385375977,-0.210105717182159,0.911541521549225,0.658008575439453,-0.304749071598053,0.688587427139282,0.356381446123123,-0.306900352239609,0.882498979568481,0.477214813232422,-0.241928040981293,0.844829499721527,0.660950601100922,-0.242743700742722,0.71008437871933,0.821053445339203,-0.304968655109406,0.482561200857162,0.658008575439453,-0.304749071598053,0.688587427139282,0.660950601100922,-0.242743700742722,0.71008437871933,0.836283266544342,-0.213887274265289,0.504858911037445,0.939164042472839,-0.287473499774933,0.187962368130684,0.821053445339203,-0.304968655109406,0.482561200857162,0.836283266544342,-0.213887274265289,0.504858911037445,0.952340543270111,-0.189113721251488,0.239339768886566,0.960243940353394,-0.113252773880959,-0.255157649517059,0.946958303451538,-0.273756355047226,-0.168307527899742,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.946958303451538,-0.273756355047226,-0.168307527899742,0.960243940353394,-0.113252773880959,-0.255157649517059,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.960284650325775,-0.0229552984237671,-0.278076320886612,0.932186603546143,-9.77104355115443e-006,-0.361978143453598,0.906778931617737,0.0885622203350067,-0.412199825048447,0.937741100788116,0.0962117910385132,-0.333743721246719,0.937741100788116,0.0962117910385132,-0.333743721246719,0.906778931617737,0.0885622203350067,-0.412199825048447,0.899548053741455,0.145640388131142,-0.411827832460403,0.927813827991486,0.152230933308601,-0.340569078922272,0.926154136657715,0.165854901075363,-0.3387191593647,0.902734816074371,0.140678882598877,-0.406545639038086,0.904744982719421,0.140758752822876,-0.402024179697037,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527,-0.399328351020813,0.917835712432861,0.197176292538643,-0.344527393579483, 0.920450210571289,0.249687507748604,-0.300711780786514,0.946711003780365,0.167055711150169,-0.275373607873917,0.73961067199707,0.263024806976318,-0.619511127471924,0.917835712432861,0.197176292538643,-0.344527393579483,0.775733590126038,0.173521965742111,-0.606735110282898,0.227652028203011,0.973727345466614,-0.0054389201104641,0.781636536121368,0.602840006351471,-0.160088449716568,0.792211890220642,0.491865277290344,-0.361204653978348,0.11270098388195,0.815884530544281,-0.567125082015991,0.980879783630371,-0.19241227209568,-0.0291947238147259,0.946958303451538,-0.273756355047226,-0.168307527899742,0.939164042472839,-0.287473499774933,0.187962368130684,0.952340543270111,-0.189113721251488,0.239339768886566,0.353479385375977,-0.210105717182159,0.911541521549225,0.356381446123123,-0.306900352239609,0.882498979568481,0.4305479824543,-0.135443344712257,0.89234721660614,0.365955173969269,-0.121213011443615,0.922704815864563,0.660950601100922,-0.242743700742722,0.71008437871933,0.477214813232422,-0.241928040981293,0.844829499721527,0.188842624425888,-0.479352325201035,0.857064664363861,0.485521018505096,-0.413983583450317,0.769991517066956,-0.228005513548851,0.109595887362957,0.967472076416016,-0.152441054582596,-0.013247330673039,0.988223791122437,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.128308832645416,0.135050818324089,0.982495844364166,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.125946626067162,-0.109786443412304,0.985943377017975,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.0331847779452801,-0.163069307804108,0.986056327819824,0.0231705605983734,-0.380178421735764,0.924622893333435,0.109986312687397,-0.239039734005928,0.964760601520538,0.125946626067162,-0.109786443412304,0.985943377017975,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.987223207950592,-0.158936277031899,-0.0113820992410183, -0.953436672687531,0.152786508202553,0.260028511285782,-0.890410006046295,0.22136127948761,0.397704929113388,-0.888629198074341,0.438762098550797,0.133514106273651,-0.948116004467011,0.0624199733138084,0.311736673116684,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.890410006046295,0.22136127948761,0.397704929113388,-0.953436672687531,0.152786508202553,0.260028511285782,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.890410006046295,0.22136127948761,0.397704929113388,-0.702946484088898,0.346591114997864,0.621080338954926,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.888629198074341,0.438762098550797,0.133514106273651,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.284107565879822,0.352843284606934,0.891506910324097,-0.702946484088898,0.346591114997864,0.621080338954926,-0.890410006046295,0.22136127948761,0.397704929113388,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.244612783193588,0.231081768870354,0.941682457923889,-0.284107565879822,0.352843284606934,0.891506910324097,-0.784406840801239,0.0822488218545914,0.614769160747528,-0.228005513548851,0.109595887362957,0.967472076416016,-0.244612783193588,0.231081768870354,0.941682457923889,-0.749682486057281,-0.0273894388228655,0.661230683326721,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.754620730876923,-0.101689904928207,0.648233532905579,-0.736215531826019,-0.133181735873222,0.663512825965881,-0.152441054582596,-0.013247330673039,0.988223791122437,-0.228005513548851,0.109595887362957,0.967472076416016,-0.215633437037468,-0.617008090019226,0.756837606430054,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.158661097288132,-0.379611909389496,0.911439180374146, -0.52398544549942,-0.396743208169937,0.753680348396301,-0.215633437037468,-0.617008090019226,0.756837606430054,0.0384484939277172,-0.525311291217804,0.850041031837463,-0.0760671570897102,-0.295749187469482,0.952232241630554,0.187207460403442,-0.466673761606216,0.864389359951019,0.322147607803345,-0.331866294145584,0.886614739894867,-0.141511112451553,-0.212750777602196,0.966804921627045,0.109986312687397,-0.239039734005928,0.964760601520538,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.141511112451553,-0.212750777602196,0.966804921627045,0.125946626067162,-0.109786443412304,0.985943377017975,0.109986312687397,-0.239039734005928,0.964760601520538,-0.141511112451553,-0.212750777602196,0.966804921627045,-0.184660717844963,-0.167485594749451,0.968426048755646,0.00481598870828748,-0.00974012352526188,0.999940931797028,0.125946626067162,-0.109786443412304,0.985943377017975,-0.184660717844963,-0.167485594749451,0.968426048755646,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.128308832645416,0.135050818324089,0.982495844364166,0.00481598870828748,-0.00974012352526188,0.999940931797028,-0.274106293916702,-0.107289478182793,0.955695927143097,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.17640919983387,0.25873214006424,0.949703872203827,-0.128308832645416,0.135050818324089,0.982495844364166,-0.414724171161652,0.00967030972242355,0.909895837306976,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.224652707576752,0.331979662179947,0.91614443063736,-0.17640919983387,0.25873214006424,0.949703872203827,-0.537278592586517,0.0936881303787231,0.83818507194519,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.78737735748291,0.23807966709137,0.568643093109131,-0.702946484088898,0.346591114997864,0.621080338954926,-0.224652707576752,0.331979662179947,0.91614443063736,-0.618925273418427,0.0886659994721413,0.780429303646088,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.858429491519928,-0.151253908872604,0.490123569965363, -0.96939754486084,-0.16740058362484,0.179570108652115,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.858429491519928,-0.151253908872604,0.490123569965363,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.835869967937469,-0.162916868925095,0.524194180965424,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.952021241188049,-0.172354578971863,0.252882182598114,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.929407715797424,-0.180255636572838,0.322039186954498,-0.806389153003693,-0.12540277838707,0.577936589717865,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.953436672687531,0.152786508202553,0.260028511285782,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.817183375358582,-0.296553403139114,0.494234204292297,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.871467232704163,-0.412255734205246,0.265687882900238,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.505574762821198,-0.704972326755524,0.49740144610405,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.871467232704163,-0.412255734205246,0.265687882900238,0.781636536121368,0.602840006351471,-0.160088449716568,0.920450210571289,0.249687507748604,-0.300711780786514,0.917835712432861,0.197176292538643,-0.344527393579483,0.904744982719421,0.140758752822876,-0.402024179697037,0.902734816074371,0.140678882598877,-0.406545639038086,0.772511541843414,0.0615992993116379,-0.632005870342255,0.784979939460754,0.0750055387616158,-0.614963889122009,0.854438722133636,-0.0391706973314285,-0.518073558807373,0.960243940353394,-0.113252773880959,-0.255157649517059, 0.980879783630371,-0.19241227209568,-0.0291947238147259,0.966925024986267,-0.254912257194519,-0.00869798846542835,0.845922589302063,-0.233836695551872,-0.479307234287262,-0.967770040035248,-0.190110400319099,0.165164142847061,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.925617933273315,-0.333309531211853,0.179265692830086,-0.96939754486084,-0.16740058362484,0.179570108652115,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.928428411483765,-0.296662479639053,0.223633751273155,-0.977448999881744,-0.204651221632957,-0.0520704686641693,-0.648859262466431,-0.732072472572327,0.20748870074749,-0.881475806236267,-0.330746591091156,0.337056517601013,-0.913924396038055,-0.399497091770172,-0.0717232823371887,-0.724748373031616,-0.680762529373169,-0.106311395764351,-0.0760671570897102,-0.295749187469482,0.952232241630554,-0.158661097288132,-0.379611909389496,0.911439180374146,0.0384484939277172,-0.525311291217804,0.850041031837463,0.187207460403442,-0.466673761606216,0.864389359951019,0.0384484939277172,-0.525311291217804,0.850041031837463,0.631964325904846,-0.724000632762909,0.276485413312912,0.776257395744324,-0.559177398681641,0.291110157966614,0.187207460403442,-0.466673761606216,0.864389359951019,0.920450210571289,0.249687507748604,-0.300711780786514,0.754057705402374,0.374476611614227,-0.539596378803253,0.769950747489929,0.0194198340177536,-0.637807726860046,0.946711003780365,0.167055711150169,-0.275373607873917,0.754057705402374,0.374476611614227,-0.539596378803253,0.806110441684723,0.0128834620118141,-0.591624915599823,0.626454889774323,0.131802603602409,-0.768233299255371,0.227652028203011,0.973727345466614,-0.0054389201104641,0.485665678977966,0.51228803396225,-0.708300650119781,0.781636536121368,0.602840006351471,-0.160088449716568,0.978495180606842,0.204968735575676,-0.0231311116367579,0.978555917739868,-0.185044288635254,-0.090481773018837,0.983711898326874,-0.176273837685585,0.0351918712258339,0.777039647102356,0.333707332611084,0.533712267875671, 0.548670411109924,0.271492123603821,0.790729284286499,0.882719457149506,0.298290461301804,0.36308279633522,0.65978866815567,0.352559685707092,0.663611769676209,0.922054708003998,0.046831239014864,0.384216070175171,0.7165766954422,0.119066134095192,0.687270760536194,0.882719457149506,0.298290461301804,0.36308279633522,0.485665678977966,0.51228803396225,-0.708300650119781,0.806110441684723,0.0128834620118141,-0.591624915599823,0.754057705402374,0.374476611614227,-0.539596378803253,0.920450210571289,0.249687507748604,-0.300711780786514,0.781636536121368,0.602840006351471,-0.160088449716568,-0.085037998855114,0.891525149345398,0.444917380809784,-0.0469878204166889,0.559723138809204,0.827346444129944,0.0470689907670021,0.582839369773865,0.811222970485687,0.101348482072353,0.892875194549561,0.438750922679901,0.0935290157794952,0.208944618701935,-0.973444640636444,0.0038525490090251,0.171840533614159,-0.985117256641388,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.933896422386169,0.335515409708023,0.123558923602104,0.693666994571686,0.300759524106979,0.654499650001526,0.698169589042664,-0.369514137506485,0.613203525543213,0.942301154136658,-0.286070376634598,0.173874363303185,0.378664463758469,0.883253812789917,-0.276542812585831,0.368075758218765,0.856088101863861,0.362813085317612,0.639892160892487,0.694699466228485,0.328528076410294,0.675914883613586,0.694170355796814,-0.247520759701729,0.309483885765076,-0.163968995213509,-0.936661064624786,0.0866431072354317,0.348724126815796,-0.933211922645569,0.29194575548172,0.445136368274689,-0.846534848213196,0.452584743499756,-0.12309543043375,-0.883184313774109,0.472137004137039,0.668477177619934,-0.574651956558228,0.306242048740387,0.731363773345947,-0.609362602233887,0.378664463758469,0.883253812789917,-0.276542812585831,0.675914883613586,0.694170355796814,-0.247520759701729,0.768324851989746,0.0888023898005486,-0.63386994600296,0.638194561004639,0.569729268550873,-0.517799377441406,0.29194575548172,0.445136368274689,-0.846534848213196, 0.40653070807457,0.0205510575324297,-0.913405954837799,0.723759770393372,0.0808410197496414,0.685300350189209,0.622246146202087,0.559013962745667,0.548008322715759,0.826591491699219,0.555592954158783,0.0897942036390305,0.976288020610809,0.129569977521896,0.173416510224342,0.411225825548172,-0.383013069629669,0.8271604180336,0.330161929130554,-0.399422317743301,0.855251371860504,0.245776325464249,-0.0611284077167511,0.967397153377533,0.390471458435059,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.245776325464249,-0.0611284077167511,0.967397153377533,0.330161929130554,-0.399422317743301,0.855251371860504,0.760879397392273,0.00385691528208554,0.648881912231445,0.206741601228714,0.69427889585495,-0.689372718334198,0.0479706004261971,0.64763480424881,-0.760439336299896,0.0983121022582054,0.926145672798157,-0.364127546548843,0.324993640184402,0.89479660987854,-0.306134164333344,0.0983121022582054,0.926145672798157,-0.364127546548843,0.101348482072353,0.892875194549561,0.438750922679901,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.282659292221069,0.205503165721893,-0.936948299407959,0.413956999778748,-0.385759115219116,-0.824517726898193,0.319176852703094,-0.387702465057373,-0.864761769771576,0.114235505461693,0.174652293324471,-0.977980971336365,0.283178418874741,0.436211496591568,0.854124963283539,0.439386487007141,-0.126929730176926,0.889285326004028,0.800352692604065,-0.0664194524288177,0.595838904380798,0.622246146202087,0.559013962745667,0.548008322715759,0.826591491699219,0.555592954158783,0.0897942036390305,0.993047595024109,0.00499473372474313,0.117607519030571,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.827589094638824,0.557050704956055,-0.069215714931488,0.897543668746948,-0.428973793983459,-0.101964816451073,0.747824549674988,-0.399453073740005,-0.530278921127319,0.821371793746948,-0.202065214514732,-0.533402323722839,0.983732461929321,-0.14598248898983,-0.104687921702862,0.821371793746948,-0.202065214514732,-0.533402323722839, 0.747824549674988,-0.399453073740005,-0.530278921127319,0.426769316196442,-0.235881611704826,-0.873056590557098,0.517105877399445,-0.187926828861237,-0.835035920143127,0.457932114601135,0.272002577781677,0.846352636814117,0.760879397392273,0.00385691528208554,0.648881912231445,0.330161929130554,-0.399422317743301,0.855251371860504,0.088567815721035,0.174428701400757,0.980678558349609,-0.085037998855114,0.891525149345398,0.444917380809784,0.101348482072353,0.892875194549561,0.438750922679901,0.0983121022582054,0.926145672798157,-0.364127546548843,-0.0940461307764053,0.921943545341492,-0.37573316693306,0.114235505461693,0.174652293324471,-0.977980971336365,0.319176852703094,-0.387702465057373,-0.864761769771576,0.806110441684723,0.0128834620118141,-0.591624915599823,0.485665678977966,0.51228803396225,-0.708300650119781,0.897991716861725,-0.426986217498779,0.106271713972092,0.983711898326874,-0.176273837685585,0.0351918712258339,0.978555917739868,-0.185044288635254,-0.090481773018837,0.897543668746948,-0.428973793983459,-0.101964816451073,0.897991716861725,-0.426986217498779,0.106271713972092,0.729263663291931,-0.375070512294769,0.572273194789886,0.922054708003998,0.046831239014864,0.384216070175171,0.983711898326874,-0.176273837685585,0.0351918712258339,0.937979876995087,0.334741920232773,-0.0902306362986565,0.933896422386169,0.335515409708023,0.123558923602104,0.942301154136658,-0.286070376634598,0.173874363303185,0.95092248916626,-0.279943495988846,-0.131825938820839,0.769950747489929,0.0194198340177536,-0.637807726860046,0.754057705402374,0.374476611614227,-0.539596378803253,0.0866431072354317,0.348724126815796,-0.933211922645569,0.309483885765076,-0.163968995213509,-0.936661064624786,0.7165766954422,0.119066134095192,0.687270760536194,0.922054708003998,0.046831239014864,0.384216070175171,0.729263663291931,-0.375070512294769,0.572273194789886,0.397319257259369,-0.209660559892654,0.893409132957459,0.65978866815567,0.352559685707092,0.663611769676209,0.564793407917023,-0.0494600534439087,0.823748826980591,0.302472561597824,-0.163718789815903,0.938992261886597, 0.0738702192902565,0.343476206064224,0.936251699924469,0.411225825548172,-0.383013069629669,0.8271604180336,0.698169589042664,-0.369514137506485,0.613203525543213,0.693666994571686,0.300759524106979,0.654499650001526,0.286839812994003,0.207817569375038,0.935165643692017,0.411225825548172,-0.383013069629669,0.8271604180336,0.286839812994003,0.207817569375038,0.935165643692017,0.088567815721035,0.174428701400757,0.980678558349609,0.330161929130554,-0.399422317743301,0.855251371860504,0.368075758218765,0.856088101863861,0.362813085317612,0.274606496095657,0.656895995140076,0.702195703983307,0.401270300149918,0.638443887233734,0.65678882598877,0.639892160892487,0.694699466228485,0.328528076410294,0.888468742370605,0.446394234895706,0.106561981141567,0.784074723720551,0.612660884857178,0.0993655025959015,0.522062003612518,0.681964814662933,0.512225747108459,0.648745238780975,0.392575055360794,0.651931345462799,0.794647932052612,0.60278457403183,-0.072009839117527,0.784074723720551,0.612660884857178,0.0993655025959015,0.888468742370605,0.446394234895706,0.106561981141567,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0935290157794952,0.208944618701935,-0.973444640636444,-0.0126510011032224,0.631483376026154,-0.775286257266998,0.143443211913109,0.633186459541321,-0.760591149330139,0.231918528676033,0.24745686352253,-0.940733194351196,0.231918528676033,0.24745686352253,-0.940733194351196,0.143443211913109,0.633186459541321,-0.760591149330139,0.545021951198578,0.680707216262817,-0.489478081464767,0.670513987541199,0.40045166015625,-0.624539375305176,0.282659292221069,0.205503165721893,-0.936948299407959,0.71557879447937,0.306318610906601,-0.62778651714325,0.7308149933815,-0.370514005422592,-0.573261618614197,0.413956999778748,-0.385759115219116,-0.824517726898193,0.29194575548172,0.445136368274689,-0.846534848213196,0.638194561004639,0.569729268550873,-0.517799377441406,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.452584743499756,-0.12309543043375,-0.883184313774109,0.670513987541199,0.40045166015625,-0.624539375305176, 0.545021951198578,0.680707216262817,-0.489478081464767,0.794647932052612,0.60278457403183,-0.072009839117527,0.891878128051758,0.445774257183075,-0.0764117166399956,0.0983121022582054,0.926145672798157,-0.364127546548843,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0566258281469345,0.623355150222778,-0.779885828495026,-0.0940461307764053,0.921943545341492,-0.37573316693306,0.978555917739868,-0.185044288635254,-0.090481773018837,0.922853767871857,-0.106967732310295,-0.369998395442963,0.747824549674988,-0.399453073740005,-0.530278921127319,0.897543668746948,-0.428973793983459,-0.101964816451073,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.638194561004639,0.569729268550873,-0.517799377441406,0.827589094638824,0.557050704956055,-0.069215714931488,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.626454889774323,0.131802603602409,-0.768233299255371,0.806110441684723,0.0128834620118141,-0.591624915599823,0.319176852703094,-0.387702465057373,-0.864761769771576,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.626454889774323,0.131802603602409,-0.768233299255371,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.0866431072354317,0.348724126815796,-0.933211922645569,0.754057705402374,0.374476611614227,-0.539596378803253,0.29194575548172,0.445136368274689,-0.846534848213196,0.0866431072354317,0.348724126815796,-0.933211922645569,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.40653070807457,0.0205510575324297,-0.913405954837799,0.227507263422012,-0.0530111268162727,-0.972332358360291,0.319176852703094,-0.387702465057373,-0.864761769771576,0.413956999778748,-0.385759115219116,-0.824517726898193,0.40653070807457,0.0205510575324297,-0.913405954837799,0.413956999778748,-0.385759115219116,-0.824517726898193,0.7308149933815,-0.370514005422592,-0.573261618614197,0.768324851989746,0.0888023898005486,-0.63386994600296,0.40653070807457,0.0205510575324297,-0.913405954837799,0.827589094638824,0.557050704956055,-0.069215714931488,0.638194561004639,0.569729268550873,-0.517799377441406, 0.768324851989746,0.0888023898005486,-0.63386994600296,0.98238343000412,0.131090134382248,-0.133184969425201,0.768324851989746,0.0888023898005486,-0.63386994600296,0.7308149933815,-0.370514005422592,-0.573261618614197,0.95092248916626,-0.279943495988846,-0.131825938820839,0.98238343000412,0.131090134382248,-0.133184969425201,0.98238343000412,0.131090134382248,-0.133184969425201,0.976288020610809,0.129569977521896,0.173416510224342,0.826591491699219,0.555592954158783,0.0897942036390305,0.827589094638824,0.557050704956055,-0.069215714931488,0.95092248916626,-0.279943495988846,-0.131825938820839,0.942301154136658,-0.286070376634598,0.173874363303185,0.976288020610809,0.129569977521896,0.173416510224342,0.98238343000412,0.131090134382248,-0.133184969425201,0.942301154136658,-0.286070376634598,0.173874363303185,0.698169589042664,-0.369514137506485,0.613203525543213,0.723759770393372,0.0808410197496414,0.685300350189209,0.976288020610809,0.129569977521896,0.173416510224342,0.245776325464249,-0.0611284077167511,0.967397153377533,0.0738702192902565,0.343476206064224,0.936251699924469,0.283178418874741,0.436211496591568,0.854124963283539,0.390471458435059,0.0208971817046404,0.920377850532532,0.283178418874741,0.436211496591568,0.854124963283539,0.622246146202087,0.559013962745667,0.548008322715759,0.723759770393372,0.0808410197496414,0.685300350189209,0.390471458435059,0.0208971817046404,0.920377850532532,0.723759770393372,0.0808410197496414,0.685300350189209,0.698169589042664,-0.369514137506485,0.613203525543213,0.411225825548172,-0.383013069629669,0.8271604180336,0.390471458435059,0.0208971817046404,0.920377850532532,0.15211121737957,-0.123818121850491,0.980576992034912,0.65978866815567,0.352559685707092,0.663611769676209,0.0738702192902565,0.343476206064224,0.936251699924469,0.245776325464249,-0.0611284077167511,0.967397153377533,0.378664463758469,0.883253812789917,-0.276542812585831,0.306242048740387,0.731363773345947,-0.609362602233887,0.206741601228714,0.69427889585495,-0.689372718334198,0.324993640184402,0.89479660987854,-0.306134164333344, 0.101348482072353,0.892875194549561,0.438750922679901,0.0470689907670021,0.582839369773865,0.811222970485687,0.190875470638275,0.632551431655884,0.750629842281342,0.320414483547211,0.864260375499725,0.387799590826035,0.190875470638275,0.632551431655884,0.750629842281342,0.274606496095657,0.656895995140076,0.702195703983307,0.368075758218765,0.856088101863861,0.362813085317612,0.320414483547211,0.864260375499725,0.387799590826035,0.324993640184402,0.89479660987854,-0.306134164333344,0.320414483547211,0.864260375499725,0.387799590826035,0.368075758218765,0.856088101863861,0.362813085317612,0.378664463758469,0.883253812789917,-0.276542812585831,0.937979876995087,0.334741920232773,-0.0902306362986565,0.95092248916626,-0.279943495988846,-0.131825938820839,0.7308149933815,-0.370514005422592,-0.573261618614197,0.71557879447937,0.306318610906601,-0.62778651714325,0.223221242427826,0.259100526571274,0.939701676368713,0.648745238780975,0.392575055360794,0.651931345462799,0.522062003612518,0.681964814662933,0.512225747108459,0.1247773244977,0.633714616298676,0.763437211513519,0.1247773244977,0.633714616298676,0.763437211513519,-0.0781158208847046,0.611012876033783,0.787757039070129,0.0274804774671793,0.267909824848175,0.963052034378052,0.223221242427826,0.259100526571274,0.939701676368713,0.405990958213806,0.468467801809311,0.784671425819397,0.0274804774671793,0.267909824848175,0.963052034378052,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.1829604357481,0.769297182559967,0.61213344335556,0.0738702192902565,0.343476206064224,0.936251699924469,0.302472561597824,-0.163718789815903,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.283178418874741,0.436211496591568,0.854124963283539,0.397319257259369,-0.209660559892654,0.893409132957459,0.729263663291931,-0.375070512294769,0.572273194789886,0.796823620796204,-0.217323467135429,0.563775300979614,0.500088214874268,-0.193674385547638,0.844039142131805,0.622246146202087,0.559013962745667,0.548008322715759,0.800352692604065,-0.0664194524288177,0.595838904380798, 0.993047595024109,0.00499473372474313,0.117607519030571,0.826591491699219,0.555592954158783,0.0897942036390305,0.796823620796204,-0.217323467135429,0.563775300979614,0.729263663291931,-0.375070512294769,0.572273194789886,0.897991716861725,-0.426986217498779,0.106271713972092,0.979334354400635,-0.157389283180237,0.127015009522438,0.979334354400635,-0.157389283180237,0.127015009522438,0.897991716861725,-0.426986217498779,0.106271713972092,0.897543668746948,-0.428973793983459,-0.101964816451073,0.983732461929321,-0.14598248898983,-0.104687921702862,0.426769316196442,-0.235881611704826,-0.873056590557098,0.747824549674988,-0.399453073740005,-0.530278921127319,0.922853767871857,-0.106967732310295,-0.369998395442963,0.795709431171417,0.00568865891546011,-0.605651795864105,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.103621512651443,0.603616952896118,-0.790511965751648,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.143443211913109,0.633186459541321,-0.760591149330139,-0.0126510011032224,0.631483376026154,-0.775286257266998,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843,-0.645456671714783,0.545021951198578,0.680707216262817,-0.489478081464767,0.143443211913109,0.633186459541321,-0.760591149330139,0.103472903370857,0.756755590438843,-0.645456671714783,0.484853446483612,0.730157256126404,-0.481443136930466,0.794647932052612,0.60278457403183,-0.072009839117527,0.545021951198578,0.680707216262817,-0.489478081464767,0.484853446483612,0.730157256126404,-0.481443136930466,0.826110124588013,0.547678649425507,-0.132628157734871,0.826110124588013,0.547678649425507,-0.132628157734871,0.794824659824371,0.578912436962128,0.181972846388817,0.784074723720551,0.612660884857178,0.0993655025959015,0.794647932052612,0.60278457403183,-0.072009839117527,0.522062003612518,0.681964814662933,0.512225747108459,0.784074723720551,0.612660884857178,0.0993655025959015,0.794824659824371,0.578912436962128,0.181972846388817,0.430720508098602,0.740847587585449,0.515387892723084, 0.1247773244977,0.633714616298676,0.763437211513519,0.522062003612518,0.681964814662933,0.512225747108459,0.430720508098602,0.740847587585449,0.515387892723084,0.0950676947832108,0.75424587726593,0.649673223495483,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.0781158208847046,0.611012876033783,0.787757039070129,0.1247773244977,0.633714616298676,0.763437211513519,-0.1829604357481,0.769297182559967,0.61213344335556,-0.0781158208847046,0.611012876033783,0.787757039070129,-0.0567072629928589,0.694658160209656,0.717101395130157,-0.245767340064049,0.604095578193665,0.758067905902863,-0.122300885617733,0.731758713722229,-0.670501053333282,-0.0566258281469345,0.623355150222778,-0.779885828495026,0.0479706004261971,0.64763480424881,-0.760439336299896,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.103472903370857,0.756755590438843,-0.645456671714783,-0.0417431555688381,0.749460160732269,-0.66073215007782,0.0479706004261971,0.64763480424881,-0.760439336299896,0.206741601228714,0.69427889585495,-0.689372718334198,0.484853446483612,0.730157256126404,-0.481443136930466,0.103472903370857,0.756755590438843,-0.645456671714783,0.206741601228714,0.69427889585495,-0.689372718334198,0.306242048740387,0.731363773345947,-0.609362602233887,0.472137004137039,0.668477177619934,-0.574651956558228,0.826110124588013,0.547678649425507,-0.132628157734871,0.484853446483612,0.730157256126404,-0.481443136930466,0.472137004137039,0.668477177619934,-0.574651956558228,0.675914883613586,0.694170355796814,-0.247520759701729,0.675914883613586,0.694170355796814,-0.247520759701729,0.639892160892487,0.694699466228485,0.328528076410294,0.794824659824371,0.578912436962128,0.181972846388817,0.826110124588013,0.547678649425507,-0.132628157734871,0.430720508098602,0.740847587585449,0.515387892723084,0.794824659824371,0.578912436962128,0.181972846388817,0.639892160892487,0.694699466228485,0.328528076410294,0.401270300149918,0.638443887233734,0.65678882598877,0.0950676947832108,0.75424587726593,0.649673223495483, 0.430720508098602,0.740847587585449,0.515387892723084,0.401270300149918,0.638443887233734,0.65678882598877,0.274606496095657,0.656895995140076,0.702195703983307,0.190875470638275,0.632551431655884,0.750629842281342,0.190875470638275,0.632551431655884,0.750629842281342,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0567072629928589,0.694658160209656,0.717101395130157,0.0950676947832108,0.75424587726593,0.649673223495483,-0.0567072629928589,0.694658160209656,0.717101395130157,0.0470689907670021,0.582839369773865,0.811222970485687,-0.0469878204166889,0.559723138809204,0.827346444129944,-0.245767340064049,0.604095578193665,0.758067905902863,0.0935290157794952,0.208944618701935,-0.973444640636444,0.114235505461693,0.174652293324471,-0.977980971336365,0.485665678977966,0.51228803396225,-0.708300650119781,0.0038525490090251,0.171840533614159,-0.985117256641388,0.231918528676033,0.24745686352253,-0.940733194351196,0.282659292221069,0.205503165721893,-0.936948299407959,0.114235505461693,0.174652293324471,-0.977980971336365,0.0935290157794952,0.208944618701935,-0.973444640636444,0.231918528676033,0.24745686352253,-0.940733194351196,0.670513987541199,0.40045166015625,-0.624539375305176,0.71557879447937,0.306318610906601,-0.62778651714325,0.282659292221069,0.205503165721893,-0.936948299407959,0.891878128051758,0.445774257183075,-0.0764117166399956,0.937979876995087,0.334741920232773,-0.0902306362986565,0.71557879447937,0.306318610906601,-0.62778651714325,0.670513987541199,0.40045166015625,-0.624539375305176,0.891878128051758,0.445774257183075,-0.0764117166399956,0.888468742370605,0.446394234895706,0.106561981141567,0.933896422386169,0.335515409708023,0.123558923602104,0.937979876995087,0.334741920232773,-0.0902306362986565,0.888468742370605,0.446394234895706,0.106561981141567,0.648745238780975,0.392575055360794,0.651931345462799,0.693666994571686,0.300759524106979,0.654499650001526,0.933896422386169,0.335515409708023,0.123558923602104,0.286839812994003,0.207817569375038,0.935165643692017,0.693666994571686,0.300759524106979,0.654499650001526, 0.648745238780975,0.392575055360794,0.651931345462799,0.223221242427826,0.259100526571274,0.939701676368713,0.088567815721035,0.174428701400757,0.980678558349609,0.286839812994003,0.207817569375038,0.935165643692017,0.223221242427826,0.259100526571274,0.939701676368713,0.0274804774671793,0.267909824848175,0.963052034378052,0.405990958213806,0.468467801809311,0.784671425819397,0.457932114601135,0.272002577781677,0.846352636814117,0.088567815721035,0.174428701400757,0.980678558349609,0.0274804774671793,0.267909824848175,0.963052034378052,0.777039647102356,0.333707332611084,0.533712267875671,0.760879397392273,0.00385691528208554,0.648881912231445,0.457932114601135,0.272002577781677,0.846352636814117,0.926154136657715,0.165854901075363,-0.3387191593647,0.93531322479248,0.178703308105469,-0.305375546216965,0.795709431171417,0.00568865891546011,-0.605651795864105,0.922853767871857,-0.106967732310295,-0.369998395442963,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.320743799209595,-0.127513855695724,-0.938543379306793,0.214329496026039,-0.204933792352676,-0.95502096414566,0.179054066538811,0.451375037431717,-0.8741854429245,0.902734816074371,0.140678882598877,-0.406545639038086,0.926154136657715,0.165854901075363,-0.3387191593647,0.927813827991486,0.152230933308601,-0.340569078922272,0.899548053741455,0.145640388131142,-0.411827832460403,0.899548053741455,0.145640388131142,-0.411827832460403,0.770998120307922,0.0437404066324234,-0.63533353805542,0.772511541843414,0.0615992993116379,-0.632005870342255,0.902734816074371,0.140678882598877,-0.406545639038086,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.214329496026039,-0.204933792352676,-0.95502096414566,0.772511541843414,0.0615992993116379,-0.632005870342255,0.770998120307922,0.0437404066324234,-0.63533353805542,0.179054066538811,0.451375037431717,-0.8741854429245,0.214329496026039,-0.204933792352676,-0.95502096414566,0.0755608975887299,-0.262402594089508,-0.961995542049408,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.564793407917023,-0.0494600534439087,0.823748826980591, 0.7165766954422,0.119066134095192,0.687270760536194,0.397319257259369,-0.209660559892654,0.893409132957459,0.302472561597824,-0.163718789815903,0.938992261886597,0.439386487007141,-0.126929730176926,0.889285326004028,0.302472561597824,-0.163718789815903,0.938992261886597,0.397319257259369,-0.209660559892654,0.893409132957459,0.500088214874268,-0.193674385547638,0.844039142131805,0.800352692604065,-0.0664194524288177,0.595838904380798,0.439386487007141,-0.126929730176926,0.889285326004028,0.500088214874268,-0.193674385547638,0.844039142131805,0.796823620796204,-0.217323467135429,0.563775300979614,0.993047595024109,0.00499473372474313,0.117607519030571,0.800352692604065,-0.0664194524288177,0.595838904380798,0.796823620796204,-0.217323467135429,0.563775300979614,0.979334354400635,-0.157389283180237,0.127015009522438,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.993047595024109,0.00499473372474313,0.117607519030571,0.979334354400635,-0.157389283180237,0.127015009522438,0.983732461929321,-0.14598248898983,-0.104687921702862,0.821371793746948,-0.202065214514732,-0.533402323722839,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.995611786842346,0.0103343157097697,-0.0930073782801628,0.983732461929321,-0.14598248898983,-0.104687921702862,0.452584743499756,-0.12309543043375,-0.883184313774109,0.823152184486389,-0.0570015087723732,-0.564952492713928,0.821371793746948,-0.202065214514732,-0.533402323722839,0.517105877399445,-0.187926828861237,-0.835035920143127,0.426769316196442,-0.235881611704826,-0.873056590557098,0.309483885765076,-0.163968995213509,-0.936661064624786,0.452584743499756,-0.12309543043375,-0.883184313774109,0.517105877399445,-0.187926828861237,-0.835035920143127,0.795709431171417,0.00568865891546011,-0.605651795864105,0.769950747489929,0.0194198340177536,-0.637807726860046,0.309483885765076,-0.163968995213509,-0.936661064624786,0.426769316196442,-0.235881611704826,-0.873056590557098,0.946711003780365,0.167055711150169,-0.275373607873917,0.769950747489929,0.0194198340177536,-0.637807726860046, 0.795709431171417,0.00568865891546011,-0.605651795864105,0.93531322479248,0.178703308105469,-0.305375546216965,0.904744982719421,0.140758752822876,-0.402024179697037,0.90627920627594,0.138545647263527,-0.399328351020813,0.946711003780365,0.167055711150169,-0.275373607873917,0.93531322479248,0.178703308105469,-0.305375546216965,0.90627920627594,0.138545647263527,-0.399328351020813,0.904744982719421,0.140758752822876,-0.402024179697037,0.784979939460754,0.0750055387616158,-0.614963889122009,0.798663914203644,0.0795769542455673,-0.596492648124695,0.784979939460754,0.0750055387616158,-0.614963889122009,0.320743799209595,-0.127513855695724,-0.938543379306793,0.265012234449387,-0.116133384406567,-0.957225978374481,0.798663914203644,0.0795769542455673,-0.596492648124695,-0.245767340064049,0.604095578193665,0.758067905902863,-0.423373013734818,0.789847135543823,0.443730562925339,-0.1829604357481,0.769297182559967,0.61213344335556,0.127582147717476,-0.649050772190094,0.749970614910126,0.261260062456131,-0.761487662792206,0.593194544315338,0.0315268374979496,0.564418375492096,0.824886620044708,0.54774808883667,0.373568952083588,0.74861091375351,-0.227918326854706,-0.765941560268402,0.601154506206512,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.964486479759216,0.261449635028839,0.0375484488904476,-0.912629246711731,0.357585817575455,0.198091477155685,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.844159960746765,0.49836453795433,-0.197551965713501,-0.668442606925964,0.712539076805115,-0.213242903351784,-0.888629198074341,0.438762098550797,0.133514106273651,0.775733590126038,0.173521965742111,-0.606735110282898,0.119323797523975,0.10215725004673,-0.987585842609406,0.0699164718389511,0.326290965080261,-0.942680180072784,0.73961067199707,0.263024806976318,-0.619511127471924,-0.310650229454041,0.283165037631989,-0.907366514205933,0.0699164718389511,0.326290965080261,-0.942680180072784,0.119323797523975,0.10215725004673,-0.987585842609406,-0.313530147075653,0.0253957733511925,-0.94923859834671,0.839367091655731,0.0223367810249329,-0.543105840682983, 0.725067377090454,0.0188654419034719,-0.688419461250305,0.445772647857666,-0.772406101226807,-0.452410876750946,0.698725283145905,-0.511526346206665,-0.500123798847198,0.767102777957916,0.172567009925842,-0.617878556251526,0.725067377090454,0.0188654419034719,-0.688419461250305,0.839367091655731,0.0223367810249329,-0.543105840682983,0.847418010234833,0.181933760643005,-0.49878141283989,0.850323617458344,0.228136360645294,-0.474239885807037,0.817859530448914,0.310457706451416,-0.484480977058411,0.788738131523132,0.260696917772293,-0.556712925434113,0.854514420032501,0.21429717540741,-0.473161548376083,0.804398238658905,0.375304967164993,-0.460531920194626,0.811875224113464,0.435735166072845,-0.388578832149506,0.817859530448914,0.310457706451416,-0.484480977058411,0.850323617458344,0.228136360645294,-0.474239885807037,0.901214420795441,0.431201189756393,-0.0433364585042,0.797342956066132,0.463364690542221,-0.386700719594955,0.789179563522339,0.518753051757813,-0.328771829605103,0.883821845054626,0.46681609749794,-0.0306868441402912,0.825478971004486,0.333341240882874,-0.455486595630646,0.797342956066132,0.463364690542221,-0.386700719594955,0.901214420795441,0.431201189756393,-0.0433364585042,0.956080257892609,0.274207085371017,-0.103542387485504,0.962835073471069,0.210140570998192,-0.169674947857857,0.83752965927124,0.20064052939415,-0.508219838142395,0.825478971004486,0.333341240882874,-0.455486595630646,0.956080257892609,0.274207085371017,-0.103542387485504,0.847964406013489,0.0018927511991933,-0.530049800872803,0.841212332248688,0.233560338616371,-0.487659126520157,0.974583148956299,0.15406733751297,-0.162637546658516,0.971639752388,-0.0853487625718117,-0.220526039600372,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.61088901758194,-0.78132575750351,0.127846345305443,-0.603576362133026,-0.735800743103027,0.307071357965469, -0.886275291442871,0.375701189041138,0.270859181880951,-0.794855117797852,0.412983626127243,-0.444578289985657,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.478379726409912,0.39488697052002,-0.784357786178589,0.727754414081573,0.0140857892110944,-0.685693144798279,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.889379680156708,-0.442159056663513,-0.116185612976551,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.807643473148346,0.341063529253006,0.481027781963348,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.106276124715805,0.407822400331497,-0.906855165958405,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.752802550792694,0.00600722571834922,-0.658219039440155,0.727935612201691,0.64398717880249,-0.23535118997097,0.488869249820709,0.539150297641754,-0.685801565647125,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.294517815113068,0.487916797399521,-0.821703374385834,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.3254614174366,-0.149335280060768,-0.933688282966614,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.434757024049759,-0.760941982269287,-0.481615632772446,0.709877908229828,-0.542047500610352,-0.44973087310791, -0.807643473148346,0.341063529253006,0.481027781963348,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.809531450271606,0.353956669569016,0.468373239040375,-0.639626681804657,-0.543238401412964,0.543847143650055,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.809531450271606,0.353956669569016,0.468373239040375,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.985135495662689,0.16939789056778,0.0285019427537918,0.902499437332153,-0.42168003320694,0.0876398980617523,0.707824647426605,0.70638644695282,-0.00156357116065919,0.985135495662689,0.16939789056778,0.0285019427537918,0.727754414081573,0.0140857892110944,-0.685693144798279,0.209208816289902,-0.618555307388306,-0.757377743721008,0.902499437332153,-0.42168003320694,0.0876398980617523,0.752802550792694,0.00600722571834922,-0.658219039440155,0.794842600822449,-0.0390454083681107,-0.605558216571808,0.707824647426605,0.70638644695282,-0.00156357116065919,0.113118633627892,0.424383550882339,-0.898388981819153,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.509106159210205,-0.777470827102661,-0.369256019592285,0.556583344936371,-0.535031855106354,-0.635575234889984,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.603576362133026,-0.735800743103027,0.307071357965469,-0.989299476146698,0.112728737294674,0.0926214382052422,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.991252839565277,0.0431834943592548,0.124711617827415,-0.784134566783905,-0.509350836277008,-0.354534596204758,-0.87356162071228,0.247192814946175,-0.419268190860748,-0.989869713783264,-0.139774799346924,-0.0249191801995039,-0.888629198074341,0.438762098550797,0.133514106273651,-0.886275291442871,0.375701189041138,0.270859181880951,-0.948116004467011,0.0624199733138084,0.311736673116684, 0.902499437332153,-0.42168003320694,0.0876398980617523,0.209208816289902,-0.618555307388306,-0.757377743721008,0.113118633627892,0.424383550882339,-0.898388981819153,0.707824647426605,0.70638644695282,-0.00156357116065919,0.209208816289902,-0.618555307388306,-0.757377743721008,0.727754414081573,0.0140857892110944,-0.685693144798279,0.752802550792694,0.00600722571834922,-0.658219039440155,0.113118633627892,0.424383550882339,-0.898388981819153,0.727754414081573,0.0140857892110944,-0.685693144798279,0.889379680156708,-0.442159056663513,-0.116185612976551,0.727935612201691,0.64398717880249,-0.23535118997097,0.752802550792694,0.00600722571834922,-0.658219039440155,0.889379680156708,-0.442159056663513,-0.116185612976551,-0.0490232147276402,-0.692386627197266,-0.71985936164856,-0.106276124715805,0.407822400331497,-0.906855165958405,0.727935612201691,0.64398717880249,-0.23535118997097,-0.0490232147276402,-0.692386627197266,-0.71985936164856,0.3254614174366,-0.149335280060768,-0.933688282966614,0.450898140668869,-0.00387678225524724,-0.892566978931427,-0.106276124715805,0.407822400331497,-0.906855165958405,0.3254614174366,-0.149335280060768,-0.933688282966614,0.709877908229828,-0.542047500610352,-0.44973087310791,0.488869249820709,0.539150297641754,-0.685801565647125,0.450898140668869,-0.00387678225524724,-0.892566978931427,0.709877908229828,-0.542047500610352,-0.44973087310791,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.571620225906372,0.314757347106934,-0.757745385169983,0.488869249820709,0.539150297641754,-0.685801565647125,-0.434757024049759,-0.760941982269287,-0.481615632772446,-0.0602304749190807,-0.267121762037277,-0.961778700351715,-0.247537314891815,0.00721516087651253,-0.968851506710052,-0.571620225906372,0.314757347106934,-0.757745385169983,-0.0602304749190807,-0.267121762037277,-0.961778700351715,0.556583344936371,-0.535031855106354,-0.635575234889984,0.294517815113068,0.487916797399521,-0.821703374385834,-0.247537314891815,0.00721516087651253,-0.968851506710052,0.556583344936371,-0.535031855106354,-0.635575234889984, -0.509106159210205,-0.777470827102661,-0.369256019592285,-0.74421751499176,0.314032524824142,-0.589511573314667,0.294517815113068,0.487916797399521,-0.821703374385834,-0.509106159210205,-0.777470827102661,-0.369256019592285,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.74421751499176,0.314032524824142,-0.589511573314667,-0.515371859073639,-0.300769984722137,-0.802452027797699,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.633409440517426,-0.235751509666443,-0.737030327320099,-0.0535960160195827,-0.641778349876404,-0.765015006065369,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.319865703582764,0.368970960378647,-0.872666239738464,-0.667489945888519,-0.736912131309509,0.106853626668453,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.952590048313141,0.304238706827164,-0.00332731963135302,-0.86350291967392,-0.290329337120056,-0.412397265434265,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.91961681842804,-0.250545829534531,-0.302542001008987,-0.454940319061279,-0.69178706407547,-0.560767292976379,-0.521454632282257,-0.681395828723907,0.513599872589111,-0.807643473148346,0.341063529253006,0.481027781963348,-0.735480487346649,0.344063550233841,-0.583685457706451,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.133638396859169,-0.991028487682343,-0.00182775978464633,-0.289891123771667,-0.78655070066452,0.545253217220306,-0.289891123771667,-0.78655070066452,0.545253217220306,0.017691396176815,-0.98781031370163,0.15465372800827,0.017691396176815,-0.98781031370163,0.15465372800827,0.139990121126175,-0.714202702045441,0.685796797275543,0.432984858751297,-0.720436871051788,0.541751623153687,0.139990121126175,-0.714202702045441,0.685796797275543, 0.316983908414841,-0.933099210262299,0.169844269752502,0.316983908414841,-0.933099210262299,0.169844269752502,0.355301350355148,-0.934036493301392,0.0365620106458664,0.355301350355148,-0.934036493301392,0.0365620106458664,0.617214262485504,-0.750285804271698,0.236891880631447,0.432984858751297,-0.720436871051788,0.541751623153687,0.397023230791092,-0.910409390926361,-0.116307109594345,0.713743150234222,-0.689680516719818,-0.122112594544888,0.617214262485504,-0.750285804271698,0.236891880631447,0.397023230791092,-0.910409390926361,-0.116307109594345,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607,0.713743150234222,-0.689680516719818,-0.122112594544888,0.387578755617142,-0.825659155845642,-0.409962981939316,0.698415637016296,-0.626996219158173,-0.345096111297607,0.347473055124283,-0.882382750511169,-0.31727460026741,0.347473055124283,-0.882382750511169,-0.31727460026741,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228,0.582049369812012,-0.552822172641754,-0.596327304840088,0.632658183574677,-0.595792829990387,-0.494746923446655,0.366124451160431,-0.844667136669159,-0.390500038862228,0.0932797566056252,-0.850050926208496,-0.518374681472778,0.0932797566056252,-0.850050926208496,-0.518374681472778,-0.107030250132084,-0.605656087398529,-0.788495600223541,0.16710638999939,-0.594872176647186,-0.786258578300476,-0.0686139315366745,-0.854096055030823,-0.515569627285004,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.107030250132084,-0.605656087398529,-0.788495600223541,-0.451495438814163,-0.670070111751556,-0.589201033115387,-0.207464292645454,-0.894959568977356,-0.394975960254669,-0.3389513194561,-0.904059052467346,-0.260363727807999,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.526285529136658,-0.789061963558197,0.316867142915726,-0.66546767950058,-0.470633089542389,0.579359292984009,-0.788328349590302,-0.474288523197174,0.39190411567688, -0.562327146530151,-0.809826016426086,0.167242348194122,-0.997484087944031,-0.0642545074224472,-0.0299487132579088,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.840797781944275,-0.253655642271042,0.478244692087173,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.848265528678894,-0.243028342723846,0.47051340341568,-0.983820915222168,-0.177888512611389,-0.0212618205696344,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.884543001651764,-0.164741396903992,0.436398863792419,-0.982089936733246,-0.183242216706276,-0.0438368730247021,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.867790400981903,-0.310010522603989,0.388372659683228,-0.987256348133087,-0.145976811647415,-0.063369482755661,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.562327146530151,-0.809826016426086,0.167242348194122,-0.788328349590302,-0.474288523197174,0.39190411567688,-0.937702357769012,-0.340810507535934,-0.0675463825464249,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.182520136237144,-0.960930228233337,-0.208085164427757,-0.562327146530151,-0.809826016426086,0.167242348194122,0.238703370094299,-0.21425598859787,0.947161555290222,0.328837275505066,-0.326990753412247,0.885970175266266,0.199919357895851,-0.342281520366669,0.918082594871521,0.709650099277496,-0.321021109819412,0.627169966697693,0.251838862895966,-0.440983474254608,0.861458539962769,0.0749799236655235,0.161466613411903,0.984025657176971,0.460760354995728,0.108215063810349,0.880902588367462,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.147943556308746,-0.468891173601151,0.870777666568756,-0.280184537172318,-0.219449639320374,0.934525847434998,0.0549214817583561,-0.121100522577763,0.991119742393494,0.072246678173542,-0.0245807897299528,0.997083842754364,-0.280184537172318,-0.219449639320374,0.934525847434998, -0.371589094400406,-0.191971749067307,0.908332765102386,0.904132843017578,0.38877084851265,-0.177203312516212,0.924062311649323,0.166339710354805,-0.344151109457016,0.985335350036621,0.0123839350417256,-0.170178771018982,-0.944730460643768,-0.313157916069031,-0.0970383062958717,-0.930256605148315,-0.364659577608109,-0.0405716709792614,-0.89118105173111,-0.452543765306473,0.0316311828792095,-0.965022444725037,-0.244066029787064,-0.0957262590527534,-0.979109942913055,-0.187053516507149,-0.0797165557742119,0.781636536121368,0.602840006351471,-0.160088449716568,0.917835712432861,0.197176292538643,-0.344527393579483,0.792211890220642,0.491865277290344,-0.361204653978348,-0.52398544549942,-0.396743208169937,0.753680348396301,-0.481494218111038,-0.48454275727272,0.730329811573029,-0.75563770532608,-0.50673520565033,0.415007293224335,-0.790293157100677,-0.395322173833847,0.468142211437225,-0.882953405380249,0.46945133805275,0.00294615048915148,-0.833821058273315,0.528545200824738,-0.159318462014198,-0.844159960746765,0.49836453795433,-0.197551965713501,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.829591572284698,0.0585402958095074,0.555293500423431,-0.953436672687531,0.152786508202553,0.260028511285782,-0.941641628742218,-0.00888281501829624,0.336499899625778,-0.953436672687531,0.152786508202553,0.260028511285782,-0.973927080631256,-0.0629245564341545,0.217960059642792,-0.805050849914551,-0.582361280918121,0.112909138202667,-0.727824807167053,-0.528583109378815,-0.436887800693512,-0.993737041950226,-0.103920765221119,-0.041074700653553,-0.994358837604523,0.088942214846611,0.0577910803258419,0.00337490346282721,-0.386369347572327,0.92233794927597,-0.644507586956024,0.336329728364944,0.686652958393097,-0.642944931983948,0.0801258310675621,0.761709690093994,0.495204418897629,-0.163849160075188,0.853185832500458,0.0833947658538818,-0.437338054180145,0.895422101020813,0.54774808883667,0.373568952083588,0.74861091375351,0.628335058689117,0.550278067588806,0.549899160861969,0.86673891544342,0.195172861218452,-0.458989411592484, 0.87714958190918,0.359215557575226,-0.318704843521118,0.868426561355591,0.2465450912714,-0.430175423622131,-0.941869378089905,-0.335682570934296,-0.0141169847920537,-0.837089002132416,-0.441800951957703,-0.322635918855667,-0.772903144359589,-0.524522066116333,-0.357067674398422,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.866889953613281,-0.48840057849884,-0.0998335108160973,-0.865038812160492,0.500161468982697,0.0393235273659229,-0.332606077194214,0.942266285419464,-0.0388254560530186,-0.28744050860405,0.955214440822601,-0.0703088492155075,-0.776516318321228,0.531664490699768,-0.33816459774971,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.843789756298065,-0.527951836585999,-0.0963620916008949,0.942102074623108,-0.334151595830917,-0.0280432906001806,0.928109109401703,-0.270218104124069,0.256116449832916,0.943277299404144,-0.202248081564903,0.263293832540512,0.776516377925873,0.531664490699768,-0.338164389133453,0.287440627813339,0.955214440822601,-0.070308543741703,0.332606196403503,0.942266285419464,-0.0388250686228275,0.865038812160492,0.500161468982697,0.0393240377306938,0.182520046830177,-0.960930287837982,-0.208085060119629,0.581761598587036,-0.790978848934174,-0.189488589763641,0.562327146530151,-0.809826016426086,0.167242258787155,0.198757439851761,-0.919363081455231,-0.339509904384613,0.603638291358948,-0.670441269874573,-0.431427150964737,0.581761598587036,-0.790978848934174,-0.189488589763641,0.198757439851761,-0.919363081455231,-0.339509904384613,-0.272133141756058,-0.872126579284668,-0.406618744134903,-0.599566876888275,-0.77289891242981,-0.207718148827553,-0.621575772762299,-0.674482524394989,-0.398392915725708,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.141517594456673,-0.947756111621857,-0.285886585712433,-0.785880029201508,0.614527881145477,-0.0689065307378769,-0.709949254989624,0.60140985250473,0.366439938545227, -0.380683273077011,0.86094468832016,0.337423235177994,-0.462400823831558,0.884378015995026,0.0637255012989044,0.73961067199707,0.263024806976318,-0.619511127471924,0.792211890220642,0.491865277290344,-0.361204653978348,0.917835712432861,0.197176292538643,-0.344527393579483,0.0910219326615334,-0.210485890507698,-0.97335022687912,0.265012234449387,-0.116133384406567,-0.957225978374481,0.320743799209595,-0.127513855695724,-0.938543379306793,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.116710253059864,-0.118150681257248,-0.986113131046295,-0.310650229454041,0.283165037631989,-0.907366514205933,-0.277701437473297,0.780102908611298,-0.56064373254776,0.11270098388195,0.815884530544281,-0.567125082015991,0.0699164718389511,0.326290965080261,-0.942680180072784,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.825562000274658,0.439345568418503,-0.354150801897049,0.660678803920746,-0.179935500025749,0.728784441947937,0.664143323898315,-0.190197542309761,0.72300660610199,0.280544310808182,-0.2230264544487,0.933570623397827,0.370588421821594,-0.193350583314896,0.908449113368988,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.861376106739044,-0.246860504150391,0.443949490785599,0.884072363376617,-0.159779712557793,0.439188450574875,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.978282392024994,-0.200846880674362,-0.0512255467474461,0.988763093948364,-0.140536084771156,-0.0509620234370232,0.881938695907593,-0.0529328174889088,-0.468382596969604,0.883630573749542,-0.0664602965116501,-0.463443666696548,0.639175117015839,0.0817547887563705,-0.764703452587128,0.632078886032104,0.0873222127556801,-0.769968271255493,0.230421900749207,0.163790717720985,-0.95920717716217,0.632078886032104,0.0873222127556801,-0.769968271255493,0.639175117015839,0.0817547887563705,-0.764703452587128, 0.243145853281021,0.221795409917831,-0.944291710853577,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.227913439273834,0.190211743116379,-0.954921424388886,0.230421900749207,0.163790717720985,-0.95920717716217,0.243145853281021,0.221795409917831,-0.944291710853577,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.227913439273834,0.190211743116379,-0.954921424388886,-0.196683183312416,0.297644048929214,-0.934196829795837,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.686836779117584,0.183132573962212,-0.703361690044403,-0.673633635044098,0.289073169231415,-0.680187046527863,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.850684106349945,0.180962756276131,-0.493547379970551,-0.857439279556274,0.218963667750359,-0.465674519538879,-0.93060040473938,0.126688674092293,0.343413561582565,-0.924485385417938,0.137891575694084,0.355404943227768,-0.958607912063599,0.205605447292328,-0.196970209479332,-0.964663922786713,0.191057458519936,-0.18144017457962,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.389621406793594,0.0748821347951889,0.917925834655762,-0.698271632194519,0.0533006526529789,0.713845789432526,-0.703129649162292,0.0220469851046801,0.710719764232636,-0.716449618339539,-0.232984632253647,0.657585084438324,-0.1855189204216,-0.00743514811620116,0.982612550258636,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.388236194849014,-0.50770115852356,0.769098341464996,-0.0647715702652931,-0.0269695688039064,0.997535645961761,-0.389621406793594,0.0748821347951889,0.917925834655762,-0.415467321872711,-0.0540936067700386,0.907998204231262,-0.0499088205397129,-0.128681614995003,0.990429282188416,0.319739699363709,-0.689254701137543,0.650149524211884,0.329437464475632,-0.321430414915085,0.887780070304871,0.668613970279694,-0.338565081357956,0.662064254283905,0.68229067325592,-0.351099163293839,0.641255617141724, 0.811961233615875,-0.33458149433136,0.478303402662277,0.68229067325592,-0.351099163293839,0.641255617141724,0.668613970279694,-0.338565081357956,0.662064254283905,0.82292628288269,-0.280684322118759,0.493972301483154,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.811961233615875,-0.33458149433136,0.478303402662277,0.82292628288269,-0.280684322118759,0.493972301483154,0.991608023643494,-0.114275835454464,-0.060452651232481,0.881715893745422,0.054974939674139,-0.468566834926605,0.878365039825439,0.0618300177156925,-0.473974645137787,0.98552018404007,-0.14923769235611,-0.0804868638515472,0.991608023643494,-0.114275835454464,-0.060452651232481,0.878365039825439,0.0618300177156925,-0.473974645137787,0.881715893745422,0.054974939674139,-0.468566834926605,0.676566541194916,0.144181370735168,-0.722128391265869,0.696259915828705,0.165328323841095,-0.6984903216362,0.676566541194916,0.144181370735168,-0.722128391265869,0.286524504423141,0.225191175937653,-0.931231796741486,0.3039411008358,0.26229527592659,-0.915871679782867,0.696259915828705,0.165328323841095,-0.6984903216362,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.213439926505089,0.370307356119156,-0.904055237770081,0.3039411008358,0.26229527592659,-0.915871679782867,0.286524504423141,0.225191175937653,-0.931231796741486,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.213439926505089,0.370307356119156,-0.904055237770081,-0.214377388358116,0.321097940206528,-0.922463238239288,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.653601109981537,0.351934164762497,-0.670035779476166,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.639900922775269,0.420081675052643,-0.643473565578461,-0.843356728553772,0.326204419136047,-0.427013009786606,-0.957767188549042,0.271569937467575,-0.094508096575737,-0.944865584373474,0.320159882307053,-0.0687510371208191,-0.820141792297363,0.414948493242264,-0.393935561180115,-0.935219764709473,0.0955542922019959,0.340930134057999,-0.944865584373474,0.320159882307053,-0.0687510371208191, -0.957767188549042,0.271569937467575,-0.094508096575737,-0.927268087863922,0.115808911621571,0.356036812067032,-0.709845840930939,-0.0613325238227844,0.701681673526764,-0.801453590393066,-0.0788522064685822,0.592835962772369,-0.935219764709473,0.0955542922019959,0.340930134057999,-0.927268087863922,0.115808911621571,0.356036812067032,0.602446496486664,-0.488442957401276,0.631254017353058,0.78125125169754,-0.138539433479309,0.608648777008057,0.805302381515503,-0.358387529850006,0.472277879714966,0.605372726917267,0.000812157464679331,0.795941710472107,0.602446496486664,-0.488442957401276,0.631254017353058,0.319739699363709,-0.689254701137543,0.650149524211884,0.408358931541443,-0.833707392215729,0.371718913316727,0.805302381515503,-0.358387529850006,0.472277879714966,0.685771405696869,-0.727804124355316,0.00433491868898273,0.301932573318481,-0.883707880973816,0.357627093791962,0.622698485851288,-0.640293836593628,0.44974485039711,0.78181403875351,-0.124027468264103,-0.611051499843597,0.368462383747101,-0.106815822422504,-0.923485696315765,0.318273335695267,-0.280295252799988,-0.905613958835602,0.746579051017761,-0.327975332736969,-0.578836619853973,0.383778035640717,0.0243120118975639,-0.923105239868164,0.368462383747101,-0.106815822422504,-0.923485696315765,0.78181403875351,-0.124027468264103,-0.611051499843597,0.780589640140533,-0.0567772276699543,-0.622459769248962,0.872841775417328,-0.161784738302231,-0.460405200719833,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.653478145599365,0.112765118479729,-0.748498737812042,0.892382204532623,-0.0374441854655743,-0.449724316596985,0.603638291358948,-0.670441269874573,-0.431427150964737,0.442950963973999,-0.635696709156036,-0.632205784320831,0.645673513412476,-0.0602749027311802,-0.761231005191803,0.872841775417328,-0.161784738302231,-0.460405200719833,0.219755545258522,-0.882318615913391,-0.416198641061783,0.442950963973999,-0.635696709156036,-0.632205784320831,0.603638291358948,-0.670441269874573,-0.431427150964737,0.362535744905472,-0.881527543067932,-0.302451580762863, -0.136814370751381,-0.897029936313629,-0.42026075720787,-0.176827967166901,-0.795711040496826,-0.579288959503174,-0.203037455677986,-0.825956046581268,-0.52590149641037,-0.217101514339447,-0.0525678582489491,-0.974732518196106,-0.187843710184097,0.254132181406021,-0.948752641677856,0.24560159444809,0.232358887791634,-0.941110610961914,0.194131925702095,-0.0336651504039764,-0.980397582054138,0.345599442720413,-0.564565002918243,-0.74955141544342,0.224707394838333,-0.83567225933075,-0.501157164573669,0.224707394838333,-0.83567225933075,-0.501157164573669,0.16710638999939,-0.594872176647186,-0.786258578300476,0.156650885939598,0.00669354572892189,-0.987631380558014,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.345599442720413,-0.564565002918243,-0.74955141544342,0.16710638999939,-0.594872176647186,-0.786258578300476,0.394656956195831,0.265770107507706,-0.879552245140076,0.422739714384079,7.39172464818694e-005,-0.906251132488251,0.156650885939598,0.00669354572892189,-0.987631380558014,0.168669149279594,0.29014664888382,-0.942000865936279,0.431132704019547,0.237300783395767,-0.870524525642395,0.394656956195831,0.265770107507706,-0.879552245140076,0.168669149279594,0.29014664888382,-0.942000865936279,0.2085961997509,0.239187613129616,-0.948302090167999,0.491525501012802,0.22898742556572,-0.840218663215637,0.431132704019547,0.237300783395767,-0.870524525642395,0.2085961997509,0.239187613129616,-0.948302090167999,0.222743824124336,0.213152140378952,-0.951289296150208,0.502497434616089,0.354075133800507,-0.788750350475311,0.491525501012802,0.22898742556572,-0.840218663215637,0.222743824124336,0.213152140378952,-0.951289296150208,0.215944558382034,0.319608330726624,-0.922614991664886,0.500628232955933,0.440243989229202,-0.745356738567352,0.502497434616089,0.354075133800507,-0.788750350475311,0.215944558382034,0.319608330726624,-0.922614991664886,0.224338784813881,0.414775222539902,-0.881835401058197,0.49361053109169,0.523924946784973,-0.694155097007751,0.500628232955933,0.440243989229202,-0.745356738567352,0.224338784813881,0.414775222539902,-0.881835401058197, 0.233416378498077,0.501707494258881,-0.832950413227081,0.471412837505341,0.597895562648773,-0.648298442363739,0.49361053109169,0.523924946784973,-0.694155097007751,0.233416378498077,0.501707494258881,-0.832950413227081,0.216972485184669,0.595779240131378,-0.773285210132599,0.44583061337471,0.492900937795639,-0.747183859348297,0.471412837505341,0.597895562648773,-0.648298442363739,0.216972485184669,0.595779240131378,-0.773285210132599,0.204966142773628,0.497180044651031,-0.843090057373047,0.424920648336411,0.331089466810226,-0.842509508132935,0.44583061337471,0.492900937795639,-0.747183859348297,0.204966142773628,0.497180044651031,-0.843090057373047,0.184527859091759,0.31499707698822,-0.930981338024139,0.354670226573944,0.281918495893478,-0.89147686958313,0.424920648336411,0.331089466810226,-0.842509508132935,0.184527859091759,0.31499707698822,-0.930981338024139,0.152592211961746,0.243283241987228,-0.957877278327942,0.236234411597252,0.0899422541260719,-0.967524528503418,0.468770742416382,0.121921703219414,-0.874865233898163,0.354670226573944,0.281918495893478,-0.89147686958313,0.152592211961746,0.243283241987228,-0.957877278327942,0.0293396916240454,-0.0204683300107718,-0.999359905719757,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.152592211961746,0.243283241987228,-0.957877278327942,-0.0849575996398926,0.129486069083214,-0.9879350066185,0.181899905204773,-0.161402761936188,-0.969980180263519,0.0897360891103745,0.0411871410906315,-0.995113611221313,0.0293396916240454,-0.0204683300107718,-0.999359905719757,0.097769021987915,-0.178414672613144,-0.979085981845856,0.183815449476242,-0.694319665431976,-0.695795953273773,0.287791073322296,-0.680340945720673,-0.67402708530426,0.210264012217522,-0.226016640663147,-0.951160073280334,0.183815449476242,-0.694319665431976,-0.695795953273773,0.181899905204773,-0.161402761936188,-0.969980180263519,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.248274028301239,-0.562410414218903,0.788704335689545,0.626252830028534,0.308739811182022,0.715882003307343,0.750469028949738,0.503480017185211,0.42814028263092, 0.0119833052158356,-0.684736132621765,0.728692531585693,0.991423904895782,0.113214619457722,0.0652767568826675,0.80362457036972,-0.592847883701324,0.052143108099699,0.960353672504425,0.263352990150452,0.0914659649133682,0.815547049045563,-0.485381871461868,-0.315099239349365,0.972172915935516,-0.00723095051944256,0.234152868390083,0.989946246147156,-0.126425102353096,-0.0634277909994125,0.183815449476242,-0.694319665431976,-0.695795953273773,0.097769021987915,-0.178414672613144,-0.979085981845856,-0.361754894256592,-0.299040019512177,-0.883011043071747,-0.0776953548192978,-0.877335965633392,-0.473545104265213,-0.407887548208237,-0.115010686218739,-0.905759513378143,-0.361754894256592,-0.299040019512177,-0.883011043071747,0.097769021987915,-0.178414672613144,-0.979085981845856,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.407887548208237,-0.115010686218739,-0.905759513378143,0.0293396916240454,-0.0204683300107718,-0.999359905719757,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.412408858537674,0.0103200003504753,-0.910940408706665,-0.0849575996398926,0.129486069083214,-0.9879350066185,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.438451677560806,0.0950856506824493,-0.893710732460022,-0.154521003365517,0.240299493074417,-0.958321154117584,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.552984535694122,0.0753506049513817,-0.829777300357819,-0.232910394668579,0.366851598024368,-0.900651276111603,-0.76449728012085,0.158614858984947,-0.624808132648468,-0.704469919204712,0.0606652796268463,-0.707136392593384,-0.314977377653122,0.411381006240845,-0.855309844017029,-0.337705463171005,0.352743804454803,-0.872655034065247,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.76449728012085,0.158614858984947,-0.624808132648468, -0.337705463171005,0.352743804454803,-0.872655034065247,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.738151073455811,0.192115649580956,-0.646702826023102,-0.323528319597244,0.300020337104797,-0.89739465713501,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.683530271053314,0.162589937448502,-0.711583316326141,-0.28614467382431,0.227497309446335,-0.930787920951843,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.638863980770111,0.0889059156179428,-0.764165282249451,-0.243201240897179,0.169641554355621,-0.955026090145111,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.643724501132965,0.0191281009465456,-0.765018165111542,-0.233401030302048,0.186044618487358,-0.954416751861572,-0.700080990791321,-0.0367838852107525,-0.713115334510803,-0.688710927963257,0.127927929162979,-0.713660776615143,-0.261592835187912,0.265700459480286,-0.927886009216309,-0.255131036043167,0.019106624647975,-0.966717660427094,-0.0161609761416912,0.992576837539673,-0.120540797710419,0.0704744011163712,0.82375580072403,-0.562547504901886,-0.0235754959285259,0.833040595054626,-0.552709341049194,0.0145869944244623,0.988409578800201,-0.151108130812645,0.707107186317444,1.42954419857233e-007,-0.707106351852417,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822137832642,0.145729631185532,-0.924653470516205,0.653282701969147,0.27059879899025,-0.707105338573456,0.653282701969147,0.27059879899025,-0.707105338573456,0.351822137832642,0.145729631185532,-0.924653470516205,0.269274324178696,0.269274234771729,-0.924652755260468,0.500002682209015,0.500003159046173,-0.707102656364441,0.500002682209015,0.500003159046173,-0.707102656364441,0.269274324178696,0.269274234771729,-0.924652755260468,0.145730510354042,0.351823717355728,-0.924652755260468, 0.270599722862244,0.653285622596741,-0.707102358341217,0.270599722862244,0.653285622596741,-0.707102358341217,0.145730510354042,0.351823717355728,-0.924652755260468,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-8.65250569859199e-007,0.707113921642303,-0.707099616527557,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.270600706338882,0.653288960456848,-0.707098841667175,-0.145731240510941,0.351825833320618,-0.924651801586151,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.500002384185791,0.500002264976501,-0.707103490829468,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.653282523155212,0.270598083734512,-0.707105815410614,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.707108438014984,-4.28863302204263e-007,-0.707105159759521,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.653282105922699,-0.270597249269485,-0.707106530666351,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.499998718500137,-0.499999731779099,-0.707107841968536,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.270597517490387,-0.653282105922699,-0.707106411457062,-0.145729050040245,-0.351821690797806,-0.924653708934784,7.21318116347902e-008,-0.380809605121613,-0.924653470516205, 3.76195913531774e-007,-0.707108318805695,-0.707105219364166,3.76195913531774e-007,-0.707108318805695,-0.707105219364166,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,0.145730197429657,-0.351823180913925,-0.924652993679047,0.270599752664566,-0.653284311294556,-0.707103490829468,0.270599752664566,-0.653284311294556,-0.707103490829468,0.145730197429657,-0.351823180913925,-0.924652993679047,0.269273817539215,-0.269274026155472,-0.924652934074402,0.500002145767212,-0.500002562999725,-0.707103431224823,0.500002145767212,-0.500002562999725,-0.707103431224823,0.269273817539215,-0.269274026155472,-0.924652934074402,0.351822197437286,-0.145729750394821,-0.92465341091156,0.653282999992371,-0.270599007606506,-0.707105040550232,0.653282999992371,-0.270599007606506,-0.707105040550232,0.351822197437286,-0.145729750394821,-0.92465341091156,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.707107186317444,1.42954419857233e-007,-0.707106351852417,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822137832642,0.145729631185532,-0.924653470516205,0.380808919668198,7.69873338413163e-008,-0.924653768539429,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269274324178696,0.269274234771729,-0.924652755260468,0.351822137832642,0.145729631185532,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730510354042,0.351823717355728,-0.924652755260468,0.269274324178696,0.269274234771729,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007,-1,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,0.145730510354042,0.351823717355728,-0.924652755260468,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145731240510941,0.351825833320618,-0.924651801586151,-4.91471212171746e-007,0.380813121795654,-0.92465204000473,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269273996353149,0.269273847341537,-0.924652934074402,-0.145731240510941,0.351825833320618,-0.924651801586151,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821750402451,0.145729392766953,-0.924653649330139,-0.269273996353149,0.269273847341537,-0.924652934074402, 2.76187535064309e-008,-1.53088933529943e-007,-1,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,-0.351821750402451,0.145729392766953,-0.924653649330139,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.351821571588516,-0.145729005336761,-0.924653768539429,-0.38080957531929,-5.00349642607034e-007,-0.92465353012085,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.269271582365036,-0.269272118806839,-0.924654185771942,-0.351821571588516,-0.145729005336761,-0.924653768539429,2.76187535064309e-008,-1.53088933529943e-007,-1,-0.145729050040245,-0.351821690797806,-0.924653708934784,-0.269271582365036,-0.269272118806839,-0.924654185771942,2.76187535064309e-008,-1.53088933529943e-007,-1,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,-0.145729050040245,-0.351821690797806,-0.924653708934784,2.76187535064309e-008,-1.53088933529943e-007,-1,0.145730197429657,-0.351823180913925,-0.924652993679047,7.21318116347902e-008,-0.380809605121613,-0.924653470516205,2.76187535064309e-008,-1.53088933529943e-007,-1,0.269273817539215,-0.269274026155472,-0.924652934074402,0.145730197429657,-0.351823180913925,-0.924652993679047,2.76187535064309e-008,-1.53088933529943e-007,-1,0.351822197437286,-0.145729750394821,-0.92465341091156,0.269273817539215,-0.269274026155472,-0.924652934074402,2.76187535064309e-008,-1.53088933529943e-007,-1,0.380808919668198,7.69873338413163e-008,-0.924653768539429,0.351822197437286,-0.145729750394821,-0.92465341091156,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.166320815682411,-0.355819970369339,-0.919635534286499,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.626655638217926,-0.314949661493301,-0.712817966938019,-0.481388568878174,-0.302958816289902,-0.82248467206955, -0.539180338382721,-0.263834714889526,-0.799797356128693,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.166118785738945,-0.764228582382202,-0.623184740543365,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.322878926992416,0.229583457112312,-0.918172419071198,0.343204021453857,-0.33707195520401,-0.876694619655609,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.148570522665977,-0.138561144471169,-0.979146361351013,0.179372578859329,-0.472685307264328,-0.862782776355743,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.465988546609879,-0.185971200466156,-0.865025639533997,0.519467711448669,0.00208272109739482,-0.854487538337708,-0.00083814247045666,0.651532232761383,-0.758620500564575,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.134015202522278,-0.116930104792118,-0.984056532382965,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376, -0.166320815682411,-0.355819970369339,-0.919635534286499,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-0.127862602472305,-0.339489370584488,-0.931878805160522,0.188191697001457,0.451240569353104,-0.872333526611328,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,0.892129957675934,0.00357697787694633,-0.451764702796936,0.519467711448669,0.00208272109739482,-0.854487538337708,0.465988546609879,-0.185971200466156,-0.865025639533997,0.810467839241028,-0.323448747396469,-0.488387942314148,0.810467839241028,-0.323448747396469,-0.488387942314148,0.465988546609879,-0.185971200466156,-0.865025639533997,0.343204021453857,-0.33707195520401,-0.876694619655609,0.604493975639343,-0.595244467258453,-0.529406309127808,0.604493975639343,-0.595244467258453,-0.529406309127808,0.343204021453857,-0.33707195520401,-0.876694619655609,0.179372578859329,-0.472685307264328,-0.862782776355743,0.323608160018921,-0.778499960899353,-0.537787616252899,0.179372578859329,-0.472685307264328,-0.862782776355743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.000123229197924957,-0.83578085899353,-0.549063146114349,0.323608160018921,-0.778499960899353,-0.537787616252899,-0.000125430116895586,0.848767280578613,-0.528766572475433,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,0.188191697001457,0.451240569353104,-0.872333526611328,0.329959392547607,0.791166961193085,-0.514957904815674,0.329959392547607,0.791166961193085,-0.514957904815674,0.188191697001457,0.451240569353104,-0.872333526611328,0.357724249362946,0.356190264225006,-0.863227546215057,0.620680093765259,0.618018448352814,-0.482503294944763,0.620680093765259,0.618018448352814,-0.482503294944763,0.357724249362946,0.356190264225006,-0.863227546215057,0.474322229623795,0.197919875383377,-0.857814729213715,0.817646563053131,0.341178327798843,-0.463736414909363,0.817646563053131,0.341178327798843,-0.463736414909363,0.474322229623795,0.197919875383377,-0.857814729213715,0.519467711448669,0.00208272109739482,-0.854487538337708,0.892129957675934,0.00357697787694633,-0.451764702796936, -0.197930246591568,-0.385256856679916,-0.901332795619965,-0.16665855050087,-0.398711144924164,-0.901806175708771,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.626655638217926,-0.314949661493301,-0.712817966938019,-0.625531196594238,-0.119070827960968,-0.771059572696686,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.700383901596069,-0.324826598167419,-0.635570704936981,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.539180338382721,-0.263834714889526,-0.799797356128693,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.616882503032684,-0.380074203014374,-0.689202189445496,-0.19164302945137,-0.11858031898737,-0.974274933338165, -0.127862602472305,-0.339489370584488,-0.931878805160522,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.166320815682411,-0.355819970369339,-0.919635534286499,-0.442375749349594,0.0474703647196293,-0.895572602748871,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.134015202522278,-0.116930104792118,-0.984056532382965,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.000496746390126646,0.380419790744781,-0.924813807010651,-0.646563589572906,-0.121796235442162,-0.753074467182159,-0.193181023001671,-0.0350730493664742,-0.980536043643951,-0.289463877677917,-0.0333973616361618,-0.956606149673462,-0.711151361465454,-0.0892844870686531,-0.697346448898315,-0.166118785738945,-0.764228582382202,-0.623184740543365,-0.127862602472305,-0.339489370584488,-0.931878805160522,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.357724249362946,0.356190264225006,-0.863227546215057,0.188191697001457,0.451240569353104,-0.872333526611328,-0.127862602472305,-0.339489370584488,-0.931878805160522,-0.19164302945137,-0.11858031898737,-0.974274933338165,-0.289463877677917,-0.0333973616361618,-0.956606149673462,0.519467711448669,0.00208272109739482,-0.854487538337708,0.474322229623795,0.197919875383377,-0.857814729213715,-0.19164302945137,-0.11858031898737,-0.974274933338165,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.0012283253017813,0.00826878752559423,0.999965071678162,-0.979976892471313,-0.169393971562386,-0.104646749794483,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.892938792705536,-0.105374619364738,0.437671780586243,-0.720038771629334,-0.514539837837219,0.465610325336456, -0.000991592183709145,-0.117668882012367,0.993052363395691,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.720038771629334,-0.514539837837219,0.465610325336456,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.00141415814869106,-0.878426611423492,0.477875143289566,0.166359573602676,-0.3556267619133,-0.919703304767609,0.166693791747093,-0.398688644170761,-0.901809573173523,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,0.623893320560455,-0.135710507631302,-0.769636154174805,0.472712248563766,-0.247125968337059,-0.845855712890625,0.441408336162567,-0.158523812890053,-0.883192420005798,0.581144511699677,0.173393562436104,-0.795113682746887,0.697533905506134,-0.312777817249298,-0.644683241844177,0.536963045597076,-0.257282644510269,-0.803415417671204,0.480526119470596,-0.309671342372894,-0.820486605167389,0.624607563018799,-0.328015089035034,-0.70871114730835,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.642595112323761,-0.116949319839478,-0.757228076457977,0.980213820934296,-0.158584430813789,-0.118456050753593,0.893694162368774,-0.106106624007225,0.435949683189392,0.167570888996124,-0.767371296882629,-0.618919491767883,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.00141415814869106,-0.878426611423492,0.477875143289566,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,0.442176729440689,0.0476577542722225,-0.895660936832428,0.322174906730652,0.228472575545311,-0.918696701526642,0.282752156257629,0.52211320400238,-0.804642200469971,0.581144511699677,0.173393562436104,-0.795113682746887,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.180230349302292,-0.474406808614731,-0.8616583943367,0.14857217669487,-0.138560771942139,-0.979146182537079,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.470687717199326,-0.187841206789017,-0.86207240819931,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.289462924003601,-0.0333970598876476,-0.956606388092041,-0.525108873844147,0.00211814977228642,-0.851032376289368, -0.00083814247045666,0.651532232761383,-0.758620500564575,0.282752156257629,0.52211320400238,-0.804642200469971,0.130474492907524,0.346959501504898,-0.928760170936584,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.716144323348999,-0.513313174247742,0.472913175821304,0.61796361207962,-0.383677423000336,-0.686230778694153,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.893694162368774,-0.106106624007225,0.435949683189392,0.351649820804596,-0.93211555480957,-0.08661999553442,0.399607270956039,-0.656506419181824,-0.639776051044464,0.61796361207962,-0.383677423000336,-0.686230778694153,0.716144323348999,-0.513313174247742,0.472913175821304,0.133698701858521,-0.117022633552551,-0.984088599681854,0.166359573602676,-0.3556267619133,-0.919703304767609,-4.25225262006279e-005,-0.53346848487854,-0.84581995010376,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.189093619585037,0.45308318734169,-0.87118262052536,0.12786553800106,-0.339494079351425,-0.931876718997955,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.815859735012054,-0.325591415166855,-0.477873504161835,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.607874691486359,-0.598318219184875,-0.522018849849701,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.180230349302292,-0.474406808614731,-0.8616583943367,-0.345937311649323,-0.339615941047668,-0.874636113643646,-0.000123229197924957,-0.83578085899353,-0.549063146114349,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,-0.180230349302292,-0.474406808614731,-0.8616583943367,-0.324792563915253,-0.780647575855255,-0.533946752548218,-0.000125430116895586,0.848767280578613,-0.528766572475433, -0.331108927726746,0.793362975120544,-0.510824918746948,-0.189093619585037,0.45308318734169,-0.87118262052536,-7.12665205355734e-005,0.481959730386734,-0.876193344593048,-0.331108927726746,0.793362975120544,-0.510824918746948,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.623912632465363,0.621031820774078,-0.474396973848343,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.479103714227676,0.199860870838165,-0.854701817035675,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.822878837585449,0.343268781900406,-0.452810108661652,-0.898149847984314,0.0036230287514627,-0.439674586057663,-0.525108873844147,0.00211814977228642,-0.851032376289368,-0.479103714227676,0.199860870838165,-0.854701817035675,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,-8.2697579273372e-006,-0.489702671766281,-0.871889472007751,0.166693791747093,-0.398688644170761,-0.901809573173523,0.197933539748192,-0.385259449481964,-0.901330947875977,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.14857217669487,-0.138560771942139,-0.979146182537079,0.536963045597076,-0.257282644510269,-0.803415417671204,0.642595112323761,-0.116949319839478,-0.757228076457977,0.624607563018799,-0.328015089035034,-0.70871114730835,0.480526119470596,-0.309671342372894,-0.820486605167389,0.472712248563766,-0.247125968337059,-0.845855712890625,0.623893320560455,-0.135710507631302,-0.769636154174805,0.642595112323761,-0.116949319839478,-0.757228076457977,0.536963045597076,-0.257282644510269,-0.803415417671204,0.697533905506134,-0.312777817249298,-0.644683241844177,0.980213820934296,-0.158584430813789,-0.118456050753593,0.472712248563766,-0.247125968337059,-0.845855712890625,0.255537897348404,-0.293244242668152,-0.921253621578217,0.197933539748192,-0.385259449481964,-0.901330947875977,0.441408336162567,-0.158523812890053,-0.883192420005798,0.480526119470596,-0.309671342372894,-0.820486605167389, 0.536963045597076,-0.257282644510269,-0.803415417671204,0.14857217669487,-0.138560771942139,-0.979146182537079,0.255537897348404,-0.293244242668152,-0.921253621578217,0.442176729440689,0.0476577542722225,-0.895660936832428,0.441408336162567,-0.158523812890053,-0.883192420005798,0.166693791747093,-0.398688644170761,-0.901809573173523,0.166359573602676,-0.3556267619133,-0.919703304767609,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.61796361207962,-0.383677423000336,-0.686230778694153,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231,0.61796361207962,-0.383677423000336,-0.686230778694153,0.399607270956039,-0.656506419181824,-0.639776051044464,0.12786553800106,-0.339494079351425,-0.931876718997955,0.322174906730652,0.228472575545311,-0.918696701526642,0.442176729440689,0.0476577542722225,-0.895660936832428,0.166359573602676,-0.3556267619133,-0.919703304767609,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.133698701858521,-0.117022633552551,-0.984088599681854,-9.11212846403942e-005,-0.237379238009453,-0.97141706943512,-0.000496746390126646,0.380419790744781,-0.924813807010651,0.642595112323761,-0.116949319839478,-0.757228076457977,0.709162533283234,-0.0900625139474869,-0.69926905632019,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.193183556199074,-0.0350735858082771,-0.980535566806793,0.167570888996124,-0.767371296882629,-0.618919491767883,4.79029440612067e-005,-0.794294953346252,-0.607532322406769,2.56711878421356e-008,-0.301535218954086,-0.953455030918121,0.12786553800106,-0.339494079351425,-0.931876718997955,0.12786553800106,-0.339494079351425,-0.931876718997955,-0.189093619585037,0.45308318734169,-0.87118262052536,-0.360539704561234,0.358874976634979,-0.860941290855408,0.191643193364143,-0.11858157813549,-0.974274754524231,0.289462924003601,-0.0333970598876476,-0.956606388092041,0.191643193364143,-0.11858157813549,-0.974274754524231, -0.479103714227676,0.199860870838165,-0.854701817035675,-0.525108873844147,0.00211814977228642,-0.851032376289368,0.14857217669487,-0.138560771942139,-0.979146182537079,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,4.82885420538537e-009,-0.291559427976608,-0.956552743911743,0.0890793353319168,-0.28693476319313,-0.953799426555634,-0.000613691401667893,-0.000187244397238828,0.999999821186066,0.893694162368774,-0.106106624007225,0.435949683189392,0.980213820934296,-0.158584430813789,-0.118456050753593,-0.0012283253017813,0.00826878752559423,0.999965071678162,0.716144323348999,-0.513313174247742,0.472913175821304,0.893694162368774,-0.106106624007225,0.435949683189392,-0.000613691401667893,-0.000187244397238828,0.999999821186066,-0.000991592183709145,-0.117668882012367,0.993052363395691,0.351649820804596,-0.93211555480957,-0.08661999553442,0.716144323348999,-0.513313174247742,0.472913175821304,-0.000991592183709145,-0.117668882012367,0.993052363395691,-0.00141415814869106,-0.878426611423492,0.477875143289566,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.148570522665977,-0.138561144471169,-0.979146361351013,-0.442375749349594,0.0474703647196293,-0.895572602748871,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.583353996276855,0.174302786588669,-0.793294787406921,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.0890797153115273,-0.286934584379196,-0.953799426555634,-0.481388568878174,-0.302958816289902,-0.82248467206955,-0.474208623170853,-0.238814353942871,-0.847404181957245,-0.255537241697311,-0.293244957923889,-0.921253561973572,-0.16665855050087,-0.398711144924164,-0.901806175708771,-0.197930246591568,-0.385256856679916,-0.901332795619965,-0.442775309085846,-0.158159300684929,-0.882573306560516,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.134015202522278,-0.116930104792118,-0.984056532382965, -0.127862602472305,-0.339489370584488,-0.931878805160522,-0.166118785738945,-0.764228582382202,-0.623184740543365,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.283784359693527,0.524189174175262,-0.802927255630493,-0.131448835134506,0.348875522613525,-0.927904665470123,-0.322878926992416,0.229583457112312,-0.918172419071198,-0.352033823728561,-0.930627882480621,-0.100019671022892,-0.397642314434052,-0.650192856788635,-0.647402346134186,-0.166118785738945,-0.764228582382202,-0.623184740543365,0.465988546609879,-0.185971200466156,-0.865025639533997,-0.193181023001671,-0.0350730493664742,-0.980536043643951,0.343204021453857,-0.33707195520401,-0.876694619655609,0.357724249362946,0.356190264225006,-0.863227546215057,-0.19164302945137,-0.11858031898737,-0.974274933338165,0.474322229623795,0.197919875383377,-0.857814729213715,0.179372578859329,-0.472685307264328,-0.862782776355743,-0.148570522665977,-0.138561144471169,-0.979146361351013,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.255537897348404,-0.293244242668152,-0.921253621578217,0.14857217669487,-0.138560771942139,-0.979146182537079,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.442176729440689,0.0476577542722225,-0.895660936832428,0.581144511699677,0.173393562436104,-0.795113682746887,0.441408336162567,-0.158523812890053,-0.883192420005798,0.255537897348404,-0.293244242668152,-0.921253621578217,0.0890793353319168,-0.28693476319313,-0.953799426555634,0.197933539748192,-0.385259449481964,-0.901330947875977,0.480526119470596,-0.309671342372894,-0.820486605167389,0.255537897348404,-0.293244242668152,-0.921253621578217,0.472712248563766,-0.247125968337059,-0.845855712890625,0.166693791747093,-0.398688644170761,-0.901809573173523,0.441408336162567,-0.158523812890053,-0.883192420005798,0.197933539748192,-0.385259449481964,-0.901330947875977,0.322174906730652,0.228472575545311,-0.918696701526642,0.133698701858521,-0.117022633552551,-0.984088599681854,0.130474492907524,0.346959501504898,-0.928760170936584,0.12786553800106,-0.339494079351425,-0.931876718997955, 0.399607270956039,-0.656506419181824,-0.639776051044464,0.167570888996124,-0.767371296882629,-0.618919491767883,0.282752156257629,0.52211320400238,-0.804642200469971,0.322174906730652,0.228472575545311,-0.918696701526642,0.130474492907524,0.346959501504898,-0.928760170936584,0.167570888996124,-0.767371296882629,-0.618919491767883,0.399607270956039,-0.656506419181824,-0.639776051044464,0.351649820804596,-0.93211555480957,-0.08661999553442,-0.470687717199326,-0.187841206789017,-0.86207240819931,-0.345937311649323,-0.339615941047668,-0.874636113643646,0.193183556199074,-0.0350735858082771,-0.980535566806793,-0.360539704561234,0.358874976634979,-0.860941290855408,-0.479103714227676,0.199860870838165,-0.854701817035675,0.191643193364143,-0.11858157813549,-0.974274754524231,-0.180230349302292,-0.474406808614731,-0.8616583943367,-4.42204545834102e-005,-0.402646452188492,-0.915355563163757,0.14857217669487,-0.138560771942139,-0.979146182537079,-0.646716237068176,0.744295537471771,0.166680246591568,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.391309916973114,0.896766066551209,0.206608697772026,-0.25070720911026,0.613901972770691,0.748512029647827,-0.556003272533417,0.628243684768677,0.544215261936188,-0.497222453355789,0.684417903423309,0.533237218856812,-0.142466872930527,0.844133794307709,0.516857206821442,-0.212957128882408,0.63821679353714,0.739816606044769,0.414917647838593,0.779010057449341,0.470092207193375,0.181902796030045,0.957158207893372,0.225298702716827,-0.301660984754562,0.907010614871979,0.293823689222336,0.414917647838593,0.779010057449341,0.470092207193375,-0.212957128882408,0.63821679353714,0.739816606044769,-0.18118342757225,0.484352648258209,0.855906009674072,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,-0.235205337405205,0.51457417011261,0.824555516242981,-0.263717442750931,0.775425553321838,0.573731958866119,0.199702888727188,0.793615162372589,0.574711859226227,0.0745275393128395,0.431530833244324,0.899014353752136, -0.421310722827911,0.492505818605423,0.761534810066223,-0.426660984754562,0.140150994062424,0.893486499786377,0.0708804950118065,0.122446231544018,0.989940881729126,-0.317988157272339,0.931548714637756,0.176353335380554,-0.391309916973114,0.896766066551209,0.206608697772026,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.29035672545433,0.911720991134644,0.290616303682327,-0.269276291131973,0.797245502471924,0.540268361568451,-0.218010768294334,0.827573180198669,0.517294824123383,-0.435499727725983,0.707530975341797,0.556542754173279,-0.261273354291916,0.592454433441162,0.762059092521667,-0.761694371700287,0.389483571052551,0.517807185649872,-0.435499727725983,0.707530975341797,0.556542754173279,-0.423358976840973,0.530543863773346,0.734363913536072,0.0901670306921005,0.507265865802765,0.8570596575737,-0.117755182087421,0.405977427959442,0.906264901161194,-0.235205337405205,0.51457417011261,0.824555516242981,0.251353085041046,0.650286138057709,0.716902732849121,0.0708804950118065,0.122446231544018,0.989940881729126,-0.426660984754562,0.140150994062424,0.893486499786377,-0.384194701910019,0.144494697451591,0.911874830722809,0.0692365244030952,0.127935454249382,0.989362835884094,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.848471641540527,0.145880371332169,0.508738458156586,-0.868030965328217,0.305244266986847,0.391596972942352,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.786082983016968,-0.551289200782776,-0.279560059309006,0.0692365244030952,0.127935454249382,0.989362835884094,-0.384194701910019,0.144494697451591,0.911874830722809,-0.134134471416473,0.255289256572723,0.957515180110931,0.0673762187361717,0.208747074007988,0.975646018981934,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.964910328388214,-0.00325190788134933,0.262559533119202, -0.95565664768219,0.128923356533051,0.264762312173843,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.847110569477081,0.52096164226532,0.104893282055855,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.165860414505005,0.132470846176147,0.977211236953735,-0.183761566877365,0.212806239724159,0.959658861160278,0.0114754280075431,0.247809365391731,0.968740820884705,0.000295055127935484,0.143534883856773,0.98964524269104,0.0114754280075431,0.247809365391731,0.968740820884705,-0.183761566877365,0.212806239724159,0.959658861160278,-0.122193120419979,0.122121326625347,0.984964549541473, -0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.281565397977829,-0.490265786647797,-0.824839651584625,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.914080381393433,-0.244995877146721,0.323162585496902, -0.939242422580719,-0.304669201374054,0.158114925026894,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.264800101518631,0.156511932611465,0.951517164707184,-0.352729320526123,0.114327535033226,0.92871481180191,-0.184806242585182,0.04760567471385,0.981621265411377,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.962320387363434,-0.205677136778831,-0.177866160869598,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.977081477642059,-0.212798669934273,-0.00533603969961405, -0.984755873680115,-0.122865788638592,0.123125486075878,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.983753859996796,0.00252871820703149,0.179504722356796,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.946208834648132,0.0787987634539604,0.313814520835876,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.709277749061584,0.0713812634348869,0.701305747032166,-0.865155875682831,0.0832358598709106,0.49454739689827,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.74617874622345,-0.66409957408905,0.046787291765213,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.711586713790894,-0.664516925811768,0.228170141577721,-0.550154626369476,-0.73190438747406,0.402052044868469,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.381237626075745,0.038385421037674,0.923679828643799,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.726840019226074,-0.113997332751751,0.677280008792877, -0.609626770019531,-0.0633527785539627,0.790152907371521,-0.564329564571381,0.12249568849802,0.816411018371582,-0.706152856349945,0.175898715853691,0.685862839221954,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.564329564571381,0.12249568849802,0.816411018371582,-0.622000575065613,0.0438020005822182,0.781790673732758,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.536454916000366,0.0231257192790508,0.84361207485199,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.381237626075745,0.038385421037674,0.923679828643799,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.428126484155655,0.265849471092224,0.863731324672699,-0.600559055805206,0.384851962327957,0.70086932182312,-0.706152856349945,0.175898715853691,0.685862839221954,-0.564329564571381,0.12249568849802,0.816411018371582,-0.165860414505005,0.132470846176147,0.977211236953735,-0.28684601187706,0.185986965894699,0.939749002456665,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.564329564571381,0.12249568849802,0.816411018371582,-0.406585454940796,0.0949709191918373,0.908663153648376,-0.28684601187706,0.185986965894699,0.939749002456665,-0.428126484155655,0.265849471092224,0.863731324672699,-0.264800101518631,0.156511932611465,0.951517164707184,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.381237626075745,0.038385421037674,0.923679828643799,-0.352729320526123,0.114327535033226,0.92871481180191,-0.183761566877365,0.212806239724159,0.959658861160278,-0.165860414505005,0.132470846176147,0.977211236953735,-0.249695494771004,0.0878867655992508,0.964327812194824,-0.264800101518631,0.156511932611465,0.951517164707184,-0.338261693716049,0.297003328800201,0.892954647541046, -0.28684601187706,0.185986965894699,0.939749002456665,-0.130102187395096,0.286587357521057,0.949179172515869,-0.153394818305969,0.361563980579376,0.91964203119278,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.130102187395096,0.286587357521057,0.949179172515869,-0.28684601187706,0.185986965894699,0.939749002456665,-0.165860414505005,0.132470846176147,0.977211236953735,-0.426482230424881,0.398722440004349,0.811870276927948,-0.52557498216629,0.553365111351013,0.646187245845795,-0.600559055805206,0.384851962327957,0.70086932182312,-0.428126484155655,0.265849471092224,0.863731324672699,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.347785919904709,0.133236810564995,0.928058683872223,-0.747875332832336,-0.0330392643809319,0.663016498088837,0.169686332345009,0.978208720684052,-0.119642592966557,-0.0425885356962681,0.988019645214081,-0.148335143923759,-0.182774692773819,0.975853502750397,0.119596734642982,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.421310722827911,0.492505818605423,0.761534810066223,-0.654110372066498,0.557340681552887,0.511381506919861,-0.627907395362854,0.28337550163269,0.724865913391113,-0.426660984754562,0.140150994062424,0.893486499786377,-0.426660984754562,0.140150994062424,0.893486499786377,-0.627907395362854,0.28337550163269,0.724865913391113,-0.509144961833954,0.274927198886871,0.815589666366577,-0.384194701910019,0.144494697451591,0.911874830722809,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.122193120419979,0.122121326625347,0.984964549541473,-0.183761566877365,0.212806239724159,0.959658861160278,-0.264800101518631,0.156511932611465,0.951517164707184,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.709277749061584,0.0713812634348869,0.701305747032166, -0.527523517608643,-0.0868940651416779,0.845084846019745,0.218648448586464,0.688608109951019,-0.691383898258209,0.169686332345009,0.978208720684052,-0.119642592966557,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.190823212265968,0.973383665084839,0.126928135752678,0.0462776906788349,0.971960961818695,0.23054338991642,0.370400339365005,0.925967752933502,-0.0733987167477608,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0405596829950809,0.531582415103912,-0.846034944057465,0.254257917404175,-0.212425783276558,0.943519055843353,0.444850295782089,-0.346757113933563,0.825752794742584,0.271333545446396,-0.434894740581512,0.858629524707794,0.142127305269241,-0.253888607025146,0.956734240055084,0.228504449129105,-0.206080406904221,0.951481223106384,0.15039549767971,-0.209228366613388,0.966232180595398,0.3562351167202,-0.323089301586151,0.876761019229889,0.419803202152252,-0.320524513721466,0.84913444519043,0.15039549767971,-0.209228366613388,0.966232180595398,-0.0830294638872147,-0.341880321502686,0.93606835603714,0.10191734880209,-0.459647685289383,0.882234036922455,0.3562351167202,-0.323089301586151,0.876761019229889,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.864151895046234,-0.414072304964066,-0.285981833934784,0.142127305269241,-0.253888607025146,0.956734240055084,0.271333545446396,-0.434894740581512,0.858629524707794,0.000465182994958013,-0.480507552623749,0.876990437507629,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.656892538070679,-0.430070400238037,-0.619299292564392, -0.550454020500183,-0.472135245800018,-0.688540995121002,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.794973969459534,-0.455967396497726,-0.400137633085251,-0.554800570011139,-0.511544942855835,-0.656138777732849,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.797606468200684,-0.431223660707474,-0.421746492385864,-0.550454020500183,-0.472135245800018,-0.688540995121002,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.888201236724854,-0.231391221284866,-0.396934121847153,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.490000605583191,0.777733385562897,0.393738687038422,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.868030965328217,0.305244266986847,0.391596972942352,-0.903881251811981,0.372275590896606,0.21073579788208,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.943637073040009,-0.318791925907135,-0.0889983400702477,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.939242422580719,-0.304669201374054,0.158114925026894,-0.922690570354462,-0.371692568063736,-0.102405093610287,-0.962320387363434,-0.205677136778831,-0.177866160869598, -0.993262529373169,-0.102700755000114,0.0536848418414593,-0.960346519947052,-0.250571459531784,0.12226414680481,-0.925502419471741,-0.354022324085236,-0.134586229920387,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.993262529373169,-0.102700755000114,0.0536848418414593,-0.962320387363434,-0.205677136778831,-0.177866160869598,0.315422087907791,0.495868057012558,-0.809088230133057,0.218648448586464,0.688608109951019,-0.691383898258209,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.0405596829950809,0.531582415103912,-0.846034944057465,0.370400339365005,0.925967752933502,-0.0733987167477608,0.169686332345009,0.978208720684052,-0.119642592966557,0.218648448586464,0.688608109951019,-0.691383898258209,0.315422087907791,0.495868057012558,-0.809088230133057,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.350932270288467,0.749857068061829,-0.56085729598999,0.122461646795273,0.908201992511749,0.400215208530426,0.227538049221039,0.872712194919586,0.431971967220306,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.294875234365463,0.607182502746582,-0.737819731235504, -0.331786870956421,0.242688208818436,-0.911602914333344,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.946829199790955,0.314822763204575,0.066340483725071,-0.968474745750427,0.246992528438568,-0.0324244759976864,0.203874498605728,0.632674932479858,0.747099459171295,-0.18118342757225,0.484352648258209,0.855906009674072,-0.153394818305969,0.361563980579376,0.91964203119278,0.0901670306921005,0.507265865802765,0.8570596575737,0.0454900041222572,0.2624471783638,0.963873505592346,-0.134134471416473,0.255289256572723,0.957515180110931,-0.0718724653124809,0.221051037311554,0.972610294818878,0.0114754280075431,0.247809365391731,0.968740820884705,0.00928871519863606,-0.538456916809082,-0.842601835727692,0.120998434722424,-0.617575466632843,-0.777148604393005,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0363553054630756,-0.593656182289124,-0.803897142410278,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00847726315259933,-0.531524419784546,-0.847000539302826,0.0646116733551025,-0.592574059963226,-0.802920520305634,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.0942423716187477,-0.686610460281372,-0.72089147567749,0.120998434722424,-0.617575466632843,-0.777148604393005,0.00928871519863606,-0.538456916809082,-0.842601835727692, 0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.678428113460541,-0.240620195865631,-0.69414496421814,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.0681053325533867,-0.345358580350876,-0.935996353626251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.144822835922241,-0.365306288003922,-0.919552981853485,0.490650862455368,0.719568371772766,0.49140927195549,0.51012510061264,0.705090045928955,0.492565125226974,-0.436571836471558,0.668562531471252,0.602020919322968,-0.528217673301697,0.774278223514557,0.348538845777512,0.51012510061264,0.705090045928955,0.492565125226974,0.576555967330933,0.629547953605652,0.520819187164307,-0.206960439682007,0.579236388206482,0.78844952583313,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482,0.78844952583313,0.576555967330933,0.629547953605652,0.520819187164307,0.665259420871735,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,-0.877903461456299,0.125808238983154,0.462014973163605,-0.553295969963074,0.315833359956741,0.770787119865417,-0.18118342757225,0.484352648258209,0.855906009674072,-0.212957128882408,0.63821679353714,0.739816606044769, -0.301660984754562,0.907010614871979,0.293823689222336,-0.720441699028015,0.626922428607941,0.296533405780792,-0.877903461456299,0.125808238983154,0.462014973163605,-0.212957128882408,0.63821679353714,0.739816606044769,-0.25070720911026,0.613901972770691,0.748512029647827,-0.142466872930527,0.844133794307709,0.516857206821442,0.421662032604218,0.906709790229797,0.00885869562625885,-0.112783953547478,0.903910756111145,0.412583559751511,-0.491390645503998,0.848508954048157,0.196386933326721,-0.317988157272339,0.931548714637756,0.176353335380554,-0.337764918804169,0.929125368595123,-0.150468930602074,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.423358976840973,0.530543863773346,0.734363913536072,-0.435499727725983,0.707530975341797,0.556542754173279,-0.218010768294334,0.827573180198669,0.517294824123383,-0.44881072640419,0.73288232088089,0.511324167251587,-0.134134471416473,0.255289256572723,0.957515180110931,-0.117755182087421,0.405977427959442,0.906264901161194,-0.130102187395096,0.286587357521057,0.949179172515869,-0.0718724653124809,0.221051037311554,0.972610294818878,-0.153394818305969,0.361563980579376,0.91964203119278,-0.18118342757225,0.484352648258209,0.855906009674072,-0.553295969963074,0.315833359956741,0.770787119865417,-0.338261693716049,0.297003328800201,0.892954647541046,-0.130102187395096,0.286587357521057,0.949179172515869,-0.117755182087421,0.405977427959442,0.906264901161194,0.0901670306921005,0.507265865802765,0.8570596575737,-0.153394818305969,0.361563980579376,0.91964203119278,-0.553295969963074,0.315833359956741,0.770787119865417,-0.887027978897095,0.338621288537979,0.313874155282974,-0.554342925548553,0.567035973072052,0.609240651130676,-0.426482230424881,0.398722440004349,0.811870276927948,0.502047836780548,0.814261257648468,0.291421681642532,0.251353085041046,0.650286138057709,0.716902732849121,0.199702888727188,0.793615162372589,0.574711859226227,0.325284242630005,0.933813154697418,0.148940086364746,-0.235205337405205,0.51457417011261,0.824555516242981,-0.627907395362854,0.28337550163269,0.724865913391113, -0.654110372066498,0.557340681552887,0.511381506919861,-0.263717442750931,0.775425553321838,0.573731958866119,-0.509144961833954,0.274927198886871,0.815589666366577,-0.627907395362854,0.28337550163269,0.724865913391113,-0.235205337405205,0.51457417011261,0.824555516242981,-0.117755182087421,0.405977427959442,0.906264901161194,-0.355782032012939,0.924564778804779,-0.136378616094589,0.227538049221039,0.872712194919586,0.431971967220306,0.37678524851799,0.791645467281342,0.480968058109283,-0.468000799417496,0.87750107049942,0.10472384095192,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.208318933844566,-0.0865636467933655,-0.974222719669342,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.598303258419037,0.575496375560761,0.557527720928192,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.734153270721436,0.469748914241791,0.490260034799576,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.729460597038269,0.376104354858398,-0.571343004703522,-0.559611320495605,0.189872339367867,-0.806711673736572,-0.652629017829895,0.286883503198624,-0.701265454292297,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.701673924922943,-0.346377521753311,-0.622636616230011,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.695569396018982,-0.386790245771408,-0.605455636978149, -0.484570324420929,0.164985567331314,-0.85905259847641,-0.646716237068176,0.744295537471771,0.166680246591568,-0.497222453355789,0.684417903423309,0.533237218856812,-0.556003272533417,0.628243684768677,0.544215261936188,-0.717432975769043,0.661532044410706,0.218323826789856,-0.142466872930527,0.844133794307709,0.516857206821442,-0.497222453355789,0.684417903423309,0.533237218856812,-0.269276291131973,0.797245502471924,0.540268361568451,-0.29035672545433,0.911720991134644,0.290616303682327,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.331786870956421,0.242688208818436,-0.911602914333344,0.0537682510912418,-0.324202865362167,0.944458305835724,0.0744736939668655,0.385000914335251,0.919906497001648,0.320094555616379,0.36778724193573,0.873081922531128,0.349699586629868,-0.343658298254013,0.871555626392365,0.349699586629868,-0.343658298254013,0.871555626392365,0.320094555616379,0.36778724193573,0.873081922531128,0.600283682346344,0.352708756923676,0.717813372612,0.696352481842041,-0.374734103679657,0.612100958824158,0.799351274967194,0.345198392868042,0.491808533668518,0.900613248348236,-0.362417966127396,0.239893689751625,0.696352481842041,-0.374734103679657,0.612100958824158,0.600283682346344,0.352708756923676,0.717813372612,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.182968229055405,-0.224779292941093,-0.957077264785767, -0.251340746879578,-0.154538676142693,-0.955481886863709,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.271266043186188,0.549705266952515,-0.790087878704071,-0.334018349647522,0.527555286884308,-0.7810999751091,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.253343611955643,0.265877068042755,-0.930121719837189,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.251340746879578,-0.154538676142693,-0.955481886863709,-0.201079472899437,-0.101671770215034,-0.974284291267395,-0.256396502256393,-0.00964211951941252,-0.966523587703705,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.294875234365463,0.607182502746582,-0.737819731235504,0.0643617510795593,0.973314523696899,0.220264464616776,0.0419506318867207,0.986220836639404,0.160026773810387,0.10627294331789,0.940789699554443,0.321901887655258,0.0643617510795593,0.973314523696899,0.220264464616776,-0.294875234365463,0.607182502746582,-0.737819731235504,-0.585451006889343,0.667790055274963,-0.459677666425705,0.190607443451881,0.891252994537354,0.41150563955307,0.10627294331789,0.940789699554443,0.321901887655258,-0.585451006889343,0.667790055274963,-0.459677666425705,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706,0.218323826789856,-0.556003272533417,0.628243684768677,0.544215261936188, 0.352456122636795,0.760582089424133,0.545242667198181,0.287199288606644,0.822433173656464,0.491039961576462,-0.556003272533417,0.628243684768677,0.544215261936188,-0.25070720911026,0.613901972770691,0.748512029647827,0.540614545345306,0.654488027095795,0.528565406799316,0.352456122636795,0.760582089424133,0.545242667198181,-0.25070720911026,0.613901972770691,0.748512029647827,-0.112783953547478,0.903910756111145,0.412583559751511,0.255933493375778,0.96283483505249,-0.0862965509295464,0.540614545345306,0.654488027095795,0.528565406799316,-0.353226035833359,0.839446485042572,0.412990301847458,0.875235259532928,0.374192535877228,0.306501507759094,0.799351274967194,0.345198392868042,0.491808533668518,-0.289120554924011,0.931183099746704,0.222052708268166,-0.293016821146011,0.709561467170715,0.640830397605896,-0.0522832758724689,0.619819462299347,0.783000826835632,0.916130423545837,0.393186241388321,0.0781642198562622,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.00815227441489697,0.997119009494781,0.075413390994072,0.941828966140747,0.33263236284256,0.0481028594076633,0.0218184478580952,0.990070343017578,-0.13886933028698,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.320094555616379,0.36778724193573,0.873081922531128,0.0744736939668655,0.385000914335251,0.919906497001648,-0.0716726332902908,0.99415910243988,-0.0806891024112701,-0.193970412015915,0.978859066963196,0.0648878961801529,0.600283682346344,0.352708756923676,0.717813372612,0.320094555616379,0.36778724193573,0.873081922531128,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.289120554924011,0.931183099746704,0.222052708268166,0.799351274967194,0.345198392868042,0.491808533668518,0.600283682346344,0.352708756923676,0.717813372612,-0.528217673301697,0.774278223514557,0.348538845777512,-0.436571836471558,0.668562531471252,0.602020919322968,-0.293016821146011,0.709561467170715,0.640830397605896,-0.353226035833359,0.839446485042572,0.412990301847458, -0.355782032012939,0.924564778804779,-0.136378616094589,-0.468000799417496,0.87750107049942,0.10472384095192,-0.289120554924011,0.931183099746704,0.222052708268166,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.355782032012939,0.924564778804779,-0.136378616094589,-0.193970412015915,0.978859066963196,0.0648878961801529,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.165674656629562,0.933009803295136,-0.319444298744202,-0.0716726332902908,0.99415910243988,-0.0806891024112701,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122461646795273,0.908201992511749,0.400215208530426,0.0643617510795593,0.973314523696899,0.220264464616776,0.10627294331789,0.940789699554443,0.321901887655258,0.227538049221039,0.872712194919586,0.431971967220306,0.227538049221039,0.872712194919586,0.431971967220306,0.10627294331789,0.940789699554443,0.321901887655258,0.190607443451881,0.891252994537354,0.41150563955307,0.37678524851799,0.791645467281342,0.480968058109283,0.51012510061264,0.705090045928955,0.492565125226974,0.490650862455368,0.719568371772766,0.49140927195549,0.287199288606644,0.822433173656464,0.491039961576462,0.352456122636795,0.760582089424133,0.545242667198181,0.490650862455368,0.719568371772766,0.49140927195549,0.37678524851799,0.791645467281342,0.480968058109283,0.190607443451881,0.891252994537354,0.41150563955307,0.287199288606644,0.822433173656464,0.491039961576462,0.51012510061264,0.705090045928955,0.492565125226974,0.352456122636795,0.760582089424133,0.545242667198181,0.540614545345306,0.654488027095795,0.528565406799316,0.576555967330933,0.629547953605652,0.520819187164307,0.576555967330933,0.629547953605652,0.520819187164307,0.540614545345306,0.654488027095795,0.528565406799316,0.255933493375778,0.96283483505249,-0.0862965509295464,0.665259420871735,0.743798911571503,-0.0647542923688889,-0.210487872362137,0.845762014389038,0.490287095308304,0.665259420871735,0.743798911571503,-0.0647542923688889, 0.255933493375778,0.96283483505249,-0.0862965509295464,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.206960439682007,0.579236388206482,0.78844952583313,-0.210487872362137,0.845762014389038,0.490287095308304,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.436571836471558,0.668562531471252,0.602020919322968,-0.206960439682007,0.579236388206482,0.78844952583313,-0.0522832758724689,0.619819462299347,0.783000826835632,-0.293016821146011,0.709561467170715,0.640830397605896,0.875235259532928,0.374192535877228,0.306501507759094,0.953684031963348,-0.290462404489517,-0.0782197788357735,0.900613248348236,-0.362417966127396,0.239893689751625,0.799351274967194,0.345198392868042,0.491808533668518,0.908462584018707,-0.179232552647591,-0.377586334943771,0.886379599571228,0.431774586439133,0.167038753628731,0.916130423545837,0.393186241388321,0.0781642198562622,0.835292756557465,-0.124363616108894,-0.53555554151535,0.835292756557465,-0.124363616108894,-0.53555554151535,0.916130423545837,0.393186241388321,0.0781642198562622,0.941828966140747,0.33263236284256,0.0481028594076633,0.822044253349304,-0.128348395228386,-0.554770171642303,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225,0.658302128314972,0.572181582450867,0.443346619606018,0.824227571487427,0.352267920970917,-0.312749028205872,0.791433751583099,0.525186359882355,0.417629092931747,0.907208979129791,0.0505746938288212,-0.39387321472168,0.899492859840393,0.18914669752121,-0.312749028205872,0.791433751583099,0.525186359882355,0.443346619606018,0.824227571487427,0.352267920970917,0.333067029714584,0.789500892162323,-0.515514075756073,0.287465304136276,0.55735319852829,-0.778923034667969,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.535731971263886,0.751305878162384,-0.385396867990494,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.556003570556641,0.531874418258667,-0.638724982738495,0.287465304136276,0.55735319852829,-0.778923034667969, -0.659405767917633,-0.515389144420624,-0.547318935394287,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.708229780197144,0.558061540126801,-0.432409435510635,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.21317532658577,0.371294349431992,0.903712749481201,0.203655928373337,0.636657357215881,0.743768572807312,0.489128321409225,0.658302128314972,0.572181582450867,-0.29514667391777,0.569713115692139,0.767017185688019,-0.848471641540527,0.145880371332169,0.508738458156586,-0.29514667391777,0.569713115692139,0.767017185688019,-0.312749028205872,0.791433751583099,0.525186359882355,-0.868030965328217,0.305244266986847,0.391596972942352,-0.868030965328217,0.305244266986847,0.391596972942352,-0.312749028205872,0.791433751583099,0.525186359882355,-0.39387321472168,0.899492859840393,0.18914669752121,-0.903881251811981,0.372275590896606,0.21073579788208,-0.968474745750427,0.246992528438568,-0.0324244759976864, -0.946829199790955,0.314822763204575,0.066340483725071,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.720985412597656,0.250006407499313,0.646279215812683,-0.734153270721436,0.469748914241791,0.490260034799576,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.952506065368652,0.304441630840302,-0.00689529813826084,-0.900380790233612,-0.432869046926498,-0.0440317057073116,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.873165845870972,0.487039655447006,0.0193340703845024,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.847110569477081,0.52096164226532,0.104893282055855,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.786082983016968,-0.551289200782776,-0.279560059309006, -0.196655720472336,-0.712397694587708,-0.673658668994904,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.33330100774765,0.819487571716309,0.466208755970001,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.490000605583191,0.777733385562897,0.393738687038422,-0.415997177362442,0.908823668956757,0.0313992239534855,-0.0175000000745058,0.99979567527771,0.010117226280272,0.130717054009438,0.879965662956238,0.456698477268219,-0.568449974060059,0.526249170303345,0.632397353649139,-0.490000605583191,0.777733385562897,0.393738687038422,0.130717054009438,0.879965662956238,0.456698477268219,0.133888319134712,0.6242516040802,0.769664764404297,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.792521595954895,-0.308754324913025,0.525909006595612,0.021379429847002,0.751378178596497,0.659525394439697,-0.261273354291916,0.592454433441162,0.762059092521667,-0.423358976840973,0.530543863773346,0.734363913536072,0.107353128492832,0.690562188625336,0.715261578559875,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.740590155124664,-0.532754123210907,-0.409510970115662,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0371135324239731,0.851556301116943,-0.52294784784317,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.740590155124664,-0.532754123210907,-0.409510970115662, -0.542133092880249,-0.457725584506989,-0.704683601856232,-0.997107744216919,-0.0381367467343807,-0.065739631652832,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,0.00376493413932621,0.588400185108185,-0.808561086654663,0.0140912849456072,0.990858137607574,0.134169965982437,-0.491390645503998,0.848508954048157,0.196386933326721,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.024807246401906,0.980889618396759,-0.192977145314217,0.107353128492832,0.690562188625336,0.715261578559875,-0.423358976840973,0.530543863773346,0.734363913536072,-0.44881072640419,0.73288232088089,0.511324167251587,0.0436014086008072,0.880429863929749,0.472167462110519,0.0436014086008072,0.880429863929749,0.472167462110519,0.443346619606018,0.824227571487427,0.352267920970917,0.489128321409225,0.658302128314972,0.572181582450867,0.107353128492832,0.690562188625336,0.715261578559875,0.0140912849456072,0.990858137607574,0.134169965982437,0.417629092931747,0.907208979129791,0.0505746938288212,0.443346619606018,0.824227571487427,0.352267920970917,0.0436014086008072,0.880429863929749,0.472167462110519,-0.0371135324239731,0.851556301116943,-0.52294784784317,0.333067029714584,0.789500892162323,-0.515514075756073,0.373418390750885,0.898855626583099,-0.229384630918503,-0.024807246401906,0.980889618396759,-0.192977145314217,0.128099784255028,-0.105493560433388,-0.986134648323059,0.287465304136276,0.55735319852829,-0.778923034667969,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.0306792501360178,-0.0856858864426613,-0.995849788188934, -0.498561441898346,0.123794674873352,-0.857969343662262,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.249898374080658,-0.566836893558502,-0.785013854503632,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.523446321487427,-0.84945410490036,-0.0665707886219025,-0.874497592449188,-0.478756755590439,-0.0777553021907806,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.905584931373596,-0.288571357727051,0.310873836278915,0.203655928373337,0.636657357215881,0.743768572807312,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.261273354291916,0.592454433441162,0.762059092521667,0.021379429847002,0.751378178596497,0.659525394439697,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.550671279430389,-0.263566613197327,-0.79201877117157,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.225950360298157,-0.351854801177979,-0.908374726772308,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.321419239044189,-0.278268992900848,-0.905127644538879, -0.210184469819069,0.149185121059418,-0.966212332248688,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.661458969116211,-0.196823701262474,-0.723693668842316,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.210184469819069,0.149185121059418,-0.966212332248688,-0.321419239044189,-0.278268992900848,-0.905127644538879,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.529653549194336,0.324454098939896,-0.783707022666931,0.0630237460136414,0.258316248655319,-0.964002430438995,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.362813800573349,0.452378064393997,0.814690291881561,-0.734153270721436,0.469748914241791,0.490260034799576,-0.720985412597656,0.250006407499313,0.646279215812683,-0.0333014093339443,0.336885303258896,0.940956592559814,0.0345219671726227,0.469873160123825,0.882058680057526,0.0388557612895966,0.393748223781586,0.918396770954132,-0.598303258419037,0.575496375560761,0.557527720928192,-0.362813800573349,0.452378064393997,0.814690291881561,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.598303258419037,0.575496375560761,0.557527720928192,0.0388557612895966,0.393748223781586,0.918396770954132,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.598303258419037,0.575496375560761,0.557527720928192,-0.497222453355789,0.684417903423309,0.533237218856812,-0.646716237068176,0.744295537471771,0.166680246591568,-0.391309916973114,0.896766066551209,0.206608697772026,-0.269276291131973,0.797245502471924,0.540268361568451,-0.269276291131973,0.797245502471924,0.540268361568451,-0.391309916973114,0.896766066551209,0.206608697772026,-0.317988157272339,0.931548714637756,0.176353335380554,-0.218010768294334,0.827573180198669,0.517294824123383,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.805685818195343,-0.585970938205719,0.0866512581706047, -0.903881251811981,0.372275590896606,0.21073579788208,-0.946829199790955,0.314822763204575,0.066340483725071,0.37678524851799,0.791645467281342,0.480968058109283,0.490650862455368,0.719568371772766,0.49140927195549,-0.528217673301697,0.774278223514557,0.348538845777512,-0.468000799417496,0.87750107049942,0.10472384095192,-0.317988157272339,0.931548714637756,0.176353335380554,-0.491390645503998,0.848508954048157,0.196386933326721,-0.44881072640419,0.73288232088089,0.511324167251587,-0.218010768294334,0.827573180198669,0.517294824123383,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.646716237068176,0.744295537471771,0.166680246591568,-0.717432975769043,0.661532044410706,0.218323826789856,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.72230190038681,0.680600225925446,-0.122732326388359,-0.717432975769043,0.661532044410706,0.218323826789856,0.287199288606644,0.822433173656464,0.491039961576462,0.190607443451881,0.891252994537354,0.41150563955307,-0.468000799417496,0.87750107049942,0.10472384095192,-0.528217673301697,0.774278223514557,0.348538845777512,-0.353226035833359,0.839446485042572,0.412990301847458,-0.289120554924011,0.931183099746704,0.222052708268166,-0.903881251811981,0.372275590896606,0.21073579788208,-0.39387321472168,0.899492859840393,0.18914669752121,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.946829199790955,0.314822763204575,0.066340483725071,-0.805140495300293,-0.58423912525177,-0.102046631276608,-0.805685818195343,-0.585970938205719,0.0866512581706047,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.491390645503998,0.848508954048157,0.196386933326721,0.0140912849456072,0.990858137607574,0.134169965982437,0.0436014086008072,0.880429863929749,0.472167462110519,-0.44881072640419,0.73288232088089,0.511324167251587,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.197057366371155,0.623411595821381,-0.756654739379883, -0.322806298732758,0.932436168193817,-0.162354081869125,-0.847110569477081,0.52096164226532,0.104893282055855,-0.656458854675293,0.394298911094666,0.643109738826752,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.909859955310822,-0.283149540424347,0.303284049034119,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.299128979444504,0.822018504142761,-0.484569281339645,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.550154626369476,-0.73190438747406,0.402052044868469,-0.307830482721329,-0.686485290527344,0.658770322799683,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.34379255771637,0.785901129245758,-0.513970911502838,-0.427128940820694,0.891256213188171,-0.152391627430916,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.792521595954895,-0.308754324913025,0.525909006595612,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.271266043186188,0.549705266952515,-0.790087878704071, -0.350932270288467,0.749857068061829,-0.56085729598999,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.334018349647522,0.527555286884308,-0.7810999751091,0.333067029714584,0.789500892162323,-0.515514075756073,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.482304006814957,0.870065748691559,-0.101825155317783,0.373418390750885,0.898855626583099,-0.229384630918503,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.919401347637177,-0.339992344379425,0.197753340005875,-0.55406641960144,-0.797906458377838,0.237393528223038,-0.974632024765015,0.185502991080284,-0.125223994255066,-0.968474745750427,0.246992528438568,-0.0324244759976864,-0.535731971263886,0.751305878162384,-0.385396867990494,-0.556003570556641,0.531874418258667,-0.638724982738495,-0.847110569477081,0.52096164226532,0.104893282055855,-0.904855847358704,-0.257035285234451,0.339365184307098,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.656458854675293,0.394298911094666,0.643109738826752,-0.793157696723938,-0.575152516365051,0.200250893831253,-0.795908987522125,-0.482192486524582,0.366086363792419,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.322806298732758,0.932436168193817,-0.162354081869125,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.355633050203323,0.924526989459991,-0.137021988630295,-0.504972338676453,0.857627868652344,-0.0973518118262291,-0.504832327365875,0.760625302791595,-0.40815868973732,-0.0371135324239731,0.851556301116943,-0.52294784784317,-0.024807246401906,0.980889618396759,-0.192977145314217,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.922896504402161,-0.346186280250549,0.168573826551437,-0.988731265068054,0.125658646225929,0.0813654363155365,0.287465304136276,0.55735319852829,-0.778923034667969,0.333067029714584,0.789500892162323,-0.515514075756073, -0.0371135324239731,0.851556301116943,-0.52294784784317,0.00376493413932621,0.588400185108185,-0.808561086654663,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.646371781826019,-0.668279051780701,0.368248045444489,-0.905584931373596,-0.288571357727051,0.310873836278915,-0.851404845714569,-0.181282177567482,0.492185473442078,-0.911127626895905,-0.233605042099953,0.339521944522858,-0.966241955757141,0.0842645391821861,0.243466570973396,-0.988731265068054,0.125658646225929,0.0813654363155365,-0.952946603298187,-0.258524835109711,0.158296033740044,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.936180412769318,-0.215160012245178,-0.277979135513306,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.838490962982178,-0.395441621541977,-0.37491175532341,-0.568449974060059,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.490000605583191,0.777733385562897,0.393738687038422,-0.40227422118187,-0.350243538618088,-0.845875263214111,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.623457789421082,-0.205396309494972,-0.754395663738251,-0.534500002861023,-0.166172981262207,-0.828671395778656,-0.144822835922241,-0.365306288003922,-0.919552981853485,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.201465025544167,-0.344970017671585,-0.91673743724823,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.128380045294762,-0.384965181350708,-0.913958609104156,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.0463922955095768,-0.412300795316696,-0.909865856170654,0.022180886939168,-0.312959760427475,-0.949507355690002,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.730888843536377,-0.408141672611237,-0.547011733055115, -0.591468334197998,-0.277608424425125,-0.757032871246338,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.831379592418671,-0.460717499256134,-0.310720801353455,-0.995725810527802,0.0919083878397942,-0.0091116763651371,-0.568449974060059,0.526249170303345,0.632397353649139,0.133888319134712,0.6242516040802,0.769664764404297,-0.0333014093339443,0.336885303258896,0.940956592559814,-0.720985412597656,0.250006407499313,0.646279215812683,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.321419239044189,-0.278268992900848,-0.905127644538879,-0.249898374080658,-0.566836893558502,-0.785013854503632,-0.542133092880249,-0.457725584506989,-0.704683601856232,-0.740590155124664,-0.532754123210907,-0.409510970115662,-0.432406663894653,-0.769645929336548,-0.469754874706268,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.144792750477791,-0.430247753858566,-0.891022980213165,-0.107891380786896,-0.441889137029648,-0.890557944774628,-0.140057414770126,-0.293910145759583,-0.945516109466553,-0.229701682925224,-0.369639068841934,-0.900335550308228,0.953684031963348,-0.290462404489517,-0.0782197788357735,0.875235259532928,0.374192535877228,0.306501507759094,0.886379599571228,0.431774586439133,0.167038753628731,0.908462584018707,-0.179232552647591,-0.377586334943771,0.875235259532928,0.374192535877228,0.306501507759094,-0.353226035833359,0.839446485042572,0.412990301847458,-0.293016821146011,0.709561467170715,0.640830397605896,0.886379599571228,0.431774586439133,0.167038753628731,0.417629092931747,0.907208979129791,0.0505746938288212,0.0140912849456072,0.990858137607574,0.134169965982437,-0.024807246401906,0.980889618396759,-0.192977145314217,0.373418390750885,0.898855626583099,-0.229384630918503, -0.39387321472168,0.899492859840393,0.18914669752121,0.417629092931747,0.907208979129791,0.0505746938288212,0.373418390750885,0.898855626583099,-0.229384630918503,-0.482304006814957,0.870065748691559,-0.101825155317783,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.342734336853027,-0.423973858356476,-0.838319361209869,-0.439678937196732,-0.382927387952805,-0.812434017658234,-0.0599007532000542,0.520737946033478,0.851612508296967,-0.761694371700287,0.389483571052551,0.517807185649872,-0.261273354291916,0.592454433441162,0.762059092521667,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.786082983016968,-0.551289200782776,-0.279560059309006,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.848471641540527,0.145880371332169,0.508738458156586,-0.0869597047567368,0.548145830631256,0.831849813461304,0.203655928373337,0.636657357215881,0.743768572807312,-0.21317532658577,0.371294349431992,0.903712749481201,-0.347785919904709,0.133236810564995,0.928058683872223,-0.848471641540527,0.145880371332169,0.508738458156586,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.21317532658577,0.371294349431992,0.903712749481201,-0.29514667391777,0.569713115692139,0.767017185688019,0.489128321409225,0.658302128314972,0.572181582450867,0.203655928373337,0.636657357215881,0.743768572807312,0.021379429847002,0.751378178596497,0.659525394439697,0.107353128492832,0.690562188625336,0.715261578559875,0.444850295782089,-0.346757113933563,0.825752794742584,0.254257917404175,-0.212425783276558,0.943519055843353,0.228504449129105,-0.206080406904221,0.951481223106384,0.419803202152252,-0.320524513721466,0.84913444519043,-0.952732801437378,-0.159682244062424,0.258460462093353,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.914080381393433,-0.244995877146721,0.323162585496902,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.851404845714569,-0.181282177567482,0.492185473442078, -0.938912212848663,-0.107537157833576,0.326924532651901,-0.249380812048912,0.181461036205292,0.951252400875092,0.0534563846886158,0.983699679374695,0.171689838171005,-0.106476634740829,0.986019790172577,0.128170698881149,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.112783953547478,0.903910756111145,0.412583559751511,0.181902796030045,0.957158207893372,0.225298702716827,-0.142466872930527,0.844133794307709,0.516857206821442,-0.29035672545433,0.911720991134644,0.290616303682327,-0.301660984754562,0.907010614871979,0.293823689222336,-0.301660984754562,0.907010614871979,0.293823689222336,-0.29035672545433,0.911720991134644,0.290616303682327,-0.435499727725983,0.707530975341797,0.556542754173279,-0.720441699028015,0.626922428607941,0.296533405780792,-0.720441699028015,0.626922428607941,0.296533405780792,-0.435499727725983,0.707530975341797,0.556542754173279,-0.761694371700287,0.389483571052551,0.517807185649872,-0.877903461456299,0.125808238983154,0.462014973163605,0.181902796030045,0.957158207893372,0.225298702716827,0.414917647838593,0.779010057449341,0.470092207193375,0.421662032604218,0.906709790229797,0.00885869562625885,-0.142466872930527,0.844133794307709,0.516857206821442,-0.684342086315155,0.70050323009491,0.202413260936737,-0.887027978897095,0.338621288537979,0.313874155282974,-0.761694371700287,0.389483571052551,0.517807185649872,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.112783953547478,0.903910756111145,0.412583559751511,0.421662032604218,0.906709790229797,0.00885869562625885,0.325284242630005,0.933813154697418,0.148940086364746,0.0534563846886158,0.983699679374695,0.171689838171005,-0.0425885356962681,0.988019645214081,-0.148335143923759,-0.00815227441489697,0.997119009494781,0.075413390994072,-0.106476634740829,0.986019790172577,0.128170698881149,-0.182774692773819,0.975853502750397,0.119596734642982,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.36091136932373,-0.689484357833862,-0.627976357936859, -0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.984755873680115,-0.122865788638592,0.123125486075878,-0.859505951404572,-0.505740880966187,0.0739976838231087,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.954774618148804,-0.0549839399755001,0.292202323675156,-0.835693418979645,-0.485578000545502,0.256574630737305,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.833407461643219,-0.0707383528351784,0.548113167285919,-0.680657148361206,-0.552846014499664,0.480694442987442,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.122193120419979,0.122121326625347,0.984964549541473,-0.139697372913361,0.0780137032270432,0.987116277217865,0.254257917404175,-0.212425783276558,0.943519055843353,0.142127305269241,-0.253888607025146,0.956734240055084,0.254257917404175,-0.212425783276558,0.943519055843353,-0.139697372913361,0.0780137032270432,0.987116277217865,-0.184806242585182,0.04760567471385,0.981621265411377,0.228504449129105,-0.206080406904221,0.951481223106384,0.228504449129105,-0.206080406904221,0.951481223106384,-0.184806242585182,0.04760567471385,0.981621265411377,-0.275664061307907,0.0508917570114136,0.959905922412872,0.15039549767971,-0.209228366613388,0.966232180595398,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.0830294638872147,-0.341880321502686,0.93606835603714,0.15039549767971,-0.209228366613388,0.966232180595398,0.000295055127935484,0.143534883856773,0.98964524269104,-0.122193120419979,0.122121326625347,0.984964549541473,0.142127305269241,-0.253888607025146,0.956734240055084,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.859505951404572,-0.505740880966187,0.0739976838231087, -0.984755873680115,-0.122865788638592,0.123125486075878,-0.977081477642059,-0.212798669934273,-0.00533603969961405,-0.819226324558258,-0.572083711624146,-0.0398554801940918,0.00928871519863606,-0.538456916809082,-0.842601835727692,-0.217214897274971,-0.348953694105148,-0.911618888378143,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.672753393650055,-0.281969040632248,-0.684029519557953,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.3323914706707,-0.288453340530396,-0.89794796705246,-0.217214897274971,-0.348953694105148,-0.911618888378143,0.00928871519863606,-0.538456916809082,-0.842601835727692,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.939978837966919,-0.283475905656815,-0.189950495958328,-0.898073315620422,-0.295351594686508,-0.325932085514069,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.600559055805206,0.384851962327957,0.70086932182312,-0.789069652557373,0.513498783111572,0.33717668056488,-0.900736033916473,0.276170164346695,0.335267961025238,-0.706152856349945,0.175898715853691,0.685862839221954,-0.95565664768219,0.128923356533051,0.264762312173843,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.706152856349945,0.175898715853691,0.685862839221954,-0.900736033916473,0.276170164346695,0.335267961025238,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.709277749061584,0.0713812634348869,0.701305747032166, -0.492890477180481,0.0867519974708557,0.865755796432495,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.740768253803253,-0.0962792262434959,0.664825260639191,-0.78949373960495,-0.0702164545655251,0.609728872776031,-0.93118155002594,-0.18550032377243,0.31383204460144,-0.88741672039032,-0.272481471300125,0.371813744306564,-0.609626770019531,-0.0633527785539627,0.790152907371521,-0.726840019226074,-0.113997332751751,0.677280008792877,-0.879765868186951,-0.241239860653877,0.409652799367905,-0.82379025220871,-0.139535933732986,0.549453675746918,-0.52557498216629,0.553365111351013,0.646187245845795,-0.713905096054077,0.655318558216095,0.246773228049278,-0.789069652557373,0.513498783111572,0.33717668056488,-0.600559055805206,0.384851962327957,0.70086932182312,-0.554342925548553,0.567035973072052,0.609240651130676,-0.684342086315155,0.70050323009491,0.202413260936737,-0.713905096054077,0.655318558216095,0.246773228049278,-0.52557498216629,0.553365111351013,0.646187245845795,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.95565664768219,0.128923356533051,0.264762312173843,-0.900736033916473,0.276170164346695,0.335267961025238,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.789069652557373,0.513498783111572,0.33717668056488,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.900736033916473,0.276170164346695,0.335267961025238,-0.713905096054077,0.655318558216095,0.246773228049278,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.789069652557373,0.513498783111572,0.33717668056488,-0.684342086315155,0.70050323009491,0.202413260936737,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.713905096054077,0.655318558216095,0.246773228049278, 0.0745275393128395,0.431530833244324,0.899014353752136,0.0482074841856956,0.963629901409149,0.262856423854828,-0.190823212265968,0.973383665084839,0.126928135752678,-0.421310722827911,0.492505818605423,0.761534810066223,0.199702888727188,0.793615162372589,0.574711859226227,-0.263717442750931,0.775425553321838,0.573731958866119,-0.106476634740829,0.986019790172577,0.128170698881149,0.0534563846886158,0.983699679374695,0.171689838171005,-0.190823212265968,0.973383665084839,0.126928135752678,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.654110372066498,0.557340681552887,0.511381506919861,-0.421310722827911,0.492505818605423,0.761534810066223,-0.332666903734207,0.942436695098877,0.0338508486747742,-0.182774692773819,0.975853502750397,0.119596734642982,-0.263717442750931,0.775425553321838,0.573731958866119,-0.654110372066498,0.557340681552887,0.511381506919861,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0983656272292137,-0.854222357273102,0.510517776012421,-0.0522458925843239,-0.587620496749878,0.807448148727417,0.185403272509575,-0.597725808620453,0.779967606067657,0.130717054009438,0.879965662956238,0.456698477268219,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.0638052001595497,0.994221389293671,-0.086329497396946,0.105478949844837,0.892287731170654,0.438972383737564,0.133888319134712,0.6242516040802,0.769664764404297,0.130717054009438,0.879965662956238,0.456698477268219,0.105478949844837,0.892287731170654,0.438972383737564,0.212958931922913,0.603173196315765,0.768655061721802,0.0345219671726227,0.469873160123825,0.882058680057526,-0.0333014093339443,0.336885303258896,0.940956592559814,0.245675906538963,0.358359038829803,0.900678694248199,0.246256619691849,0.328444272279739,0.911856353282928,0.185403272509575,-0.597725808620453,0.779967606067657,-0.0522458925843239,-0.587620496749878,0.807448148727417,-0.141512751579285,-0.835205972194672,0.531418025493622,0.183785125613213,-0.564789414405823,0.80450975894928,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.0388557612895966,0.393748223781586,0.918396770954132, 0.246256619691849,0.328444272279739,0.911856353282928,0.183785125613213,-0.564789414405823,0.80450975894928,-0.00957944244146347,-0.984838724136353,0.173207774758339,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.0983656272292137,-0.854222357273102,0.510517776012421,0.0772658213973045,-0.858631789684296,0.506736099720001,-0.0333014093339443,0.336885303258896,0.940956592559814,0.133888319134712,0.6242516040802,0.769664764404297,0.212958931922913,0.603173196315765,0.768655061721802,0.245675906538963,0.358359038829803,0.900678694248199,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.363190740346909,0.022262267768383,-0.931448817253113,-0.365642845630646,0.319204062223434,-0.874307751655579,-0.291299909353256,0.369882375001907,-0.882230937480927,0.0482074841856956,0.963629901409149,0.262856423854828,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.218648448586464,0.688608109951019,-0.691383898258209,-0.190823212265968,0.973383665084839,0.126928135752678,-0.294875234365463,0.607182502746582,-0.737819731235504,-0.0387927554547787,0.555053651332855,-0.830909490585327,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.331786870956421,0.242688208818436,-0.911602914333344,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.269162774085999,0.465141177177429,-0.843323826789856,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.240498825907707,0.538952767848969,-0.807273328304291,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.182968229055405,-0.224779292941093,-0.957077264785767, -0.286335736513138,0.0160704739391804,-0.95799458026886,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.182968229055405,-0.224779292941093,-0.957077264785767,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.0450695939362049,-0.253388822078705,-0.966314017772675,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-0.000159720322699286,-0.320416629314423,-0.947276711463928,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0450695939362049,-0.253388822078705,-0.966314017772675,0.169686332345009,0.978208720684052,-0.119642592966557,0.0492917597293854,0.955946862697601,0.28937155008316,0.0205553397536278,0.989267349243164,-0.144663617014885,-0.0425885356962681,0.988019645214081,-0.148335143923759,0.370400339365005,0.925967752933502,-0.0733987167477608,0.0462776906788349,0.971960961818695,0.23054338991642,0.0492917597293854,0.955946862697601,0.28937155008316,0.169686332345009,0.978208720684052,-0.119642592966557,-0.165674656629562,0.933009803295136,-0.319444298744202,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0557159669697285,0.916767716407776,0.395515710115433,0.122461646795273,0.908201992511749,0.400215208530426,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.000515560561325401,-0.726091146469116,-0.68759822845459,0.0942423716187477,-0.686610460281372,-0.72089147567749,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.122461646795273,0.908201992511749,0.400215208530426,0.0557159669697285,0.916767716407776,0.395515710115433,0.0419506318867207,0.986220836639404,0.160026773810387,0.0643617510795593,0.973314523696899,0.220264464616776,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.21808297932148,0.578010439872742,-0.786348342895508,-0.269162774085999,0.465141177177429,-0.843323826789856, -0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.0463922955095768,-0.412300795316696,-0.909865856170654,-0.0780564248561859,-0.38590082526207,-0.919232130050659,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.000357056385837495,-0.611226499080658,-0.791455626487732,0.0480021014809608,-0.559525310993195,-0.827422022819519,0.00452618766576052,-0.317399501800537,-0.948281109333038,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,-0.286335736513138,0.0160704739391804,-0.95799458026886,-0.291299909353256,0.369882375001907,-0.882230937480927,-0.352729320526123,0.114327535033226,0.92871481180191,-0.492890477180481,0.0867519974708557,0.865755796432495,-0.275664061307907,0.0508917570114136,0.959905922412872,-0.184806242585182,0.04760567471385,0.981621265411377,-0.307830482721329,-0.686485290527344,0.658770322799683,0.10191734880209,-0.459647685289383,0.882234036922455,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.196655720472336,-0.712397694587708,-0.673658668994904,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.0812708511948586,-0.898197948932648,-0.432013303041458,-0.180760905146599,-0.893208205699921,-0.411709308624268,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.102202795445919,-0.709632575511932,-0.697119891643524,-0.105853073298931,-0.664507687091827,-0.739746332168579,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.196655720472336,-0.712397694587708,-0.673658668994904, -0.105853073298931,-0.664507687091827,-0.739746332168579,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.10163875669241,0.148283883929253,-0.983708024024963,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.756865978240967,0.644326865673065,0.109529994428158,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.716631889343262,0.319041401147842,-0.620202660560608,-0.10163875669241,0.148283883929253,-0.983708024024963,-0.0440049432218075,-0.995802879333496,-0.0802504494786263,-0.154009714722633,-0.985912680625916,-0.0652465522289276,-0.128117144107819,-0.974402904510498,0.184729367494583,-0.00957944244146347,-0.984838724136353,0.173207774758339,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.720985412597656,0.250006407499313,0.646279215812683,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.568449974060059,0.526249170303345,0.632397353649139,-0.99845689535141,-0.0306249987334013,-0.0463239327073097,-0.990060329437256,-0.0573833771049976,-0.128404289484024,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.730888843536377,-0.408141672611237,-0.547011733055115,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.591468334197998,-0.277608424425125,-0.757032871246338,-0.990060329437256,-0.0573833771049976,-0.128404289484024,0.708686351776123,0.701542615890503,0.0748436823487282,0.471062362194061,0.869565486907959,0.148176074028015, 0.457759588956833,0.863344848155975,-0.21234855055809,0.646372437477112,0.650956153869629,-0.398068875074387,0.387304782867432,0.59377658367157,0.705283224582672,0.263491213321686,0.831329226493835,0.48935067653656,0.606493294239044,0.649602949619293,0.458456039428711,0.662577331066132,0.589804947376251,0.46165069937706,0.350325137376785,0.620450079441071,0.70165091753006,0.394804865121841,0.885042786598206,0.246634021401405,-0.0894755497574806,0.965718626976013,0.243683651089668,-0.298087060451508,0.801499605178833,0.518403768539429,-0.298087060451508,0.801499605178833,0.518403768539429,-0.0615167804062366,0.641514480113983,0.764640331268311,0.321956604719162,0.474833071231842,0.819071114063263,0.350325137376785,0.620450079441071,0.70165091753006,-0.111158438026905,0.66179496049881,0.74139815568924,-0.0702482014894485,0.80213338136673,0.592998504638672,0.386715173721313,0.754913926124573,0.529675722122192,0.375614732503891,0.495400130748749,0.783257484436035,0.0745275393128395,0.431530833244324,0.899014353752136,0.0708804950118065,0.122446231544018,0.989940881729126,0.551036536693573,0.1087965965271,0.827358484268188,0.550135016441345,0.461672753095627,0.695851802825928,0.396661043167114,0.909007132053375,0.127929911017418,0.372023165225983,0.906736969947815,-0.19856184720993,0.457759588956833,0.863344848155975,-0.21234855055809,0.471062362194061,0.869565486907959,0.148176074028015,0.383488237857819,0.890466749668121,0.244960829615593,0.55004757642746,0.676443994045258,0.489766448736191,0.337217271327972,0.810059905052185,0.479674339294434,0.389103561639786,0.77647876739502,0.495660334825516,0.388264060020447,0.528846085071564,0.754700541496277,0.55090343952179,0.499813765287399,0.668349921703339,0.55004757642746,0.676443994045258,0.489766448736191,0.858800172805786,0.271537780761719,0.434430092573166,0.0572854578495026,0.523676514625549,0.849988996982574,-0.111158438026905,0.66179496049881,0.74139815568924,0.375614732503891,0.495400130748749,0.783257484436035,0.257902681827545,0.417416572570801,0.871349334716797, 0.0708804950118065,0.122446231544018,0.989940881729126,0.0692365244030952,0.127935454249382,0.989362835884094,0.510494410991669,0.103201098740101,0.853665590286255,0.551036536693573,0.1087965965271,0.827358484268188,0.372023165225983,0.906736969947815,-0.19856184720993,0.282073974609375,0.803686380386353,-0.523948907852173,0.320013791322708,0.764963567256927,-0.558947086334229,0.457759588956833,0.863344848155975,-0.21234855055809,0.916756093502045,0.0901993364095688,0.389130234718323,0.705088436603546,-0.598325669765472,-0.380600422620773,0.74578994512558,-0.633161306381226,-0.207133173942566,0.93030720949173,0.248524934053421,0.269747763872147,0.0692365244030952,0.127935454249382,0.989362835884094,0.0673762187361717,0.208747074007988,0.975646018981934,0.253994464874268,0.250187575817108,0.934287428855896,0.510494410991669,0.103201098740101,0.853665590286255,0.895810067653656,0.254065722227097,-0.364657372236252,0.980262100696564,0.00691105145961046,0.197581350803375,0.971711039543152,-0.0647541359066963,0.227122470736504,0.842455089092255,-0.136532187461853,-0.521179795265198,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.54582554101944,-0.560542941093445,-0.622788965702057,0.789066255092621,-0.467570185661316,-0.398437708616257,0.663097739219666,-0.724811255931854,0.186949267983437,0.835493862628937,0.547001540660858,0.0523386560380459,0.799383401870728,0.596614599227905,-0.0709738805890083,0.238877683877945,0.949131786823273,-0.205149352550507,0.285585820674896,0.936043798923492,-0.20557901263237,0.635354340076447,0.0863202884793282,0.767381072044373,0.747986078262329,-0.084919698536396,0.658259391784668,0.80047994852066,-0.0622782073915005,0.596115171909332,0.813431859016418,0.0690318197011948,0.577549338340759,0.122040368616581,-0.22475291788578,-0.966743111610413,0.460681647062302,-0.288388341665268,-0.83940726518631,0.346117079257965,-0.47863432765007,-0.80691522359848,0.150176227092743,-0.476422011852264,-0.866296231746674,0.39206200838089,-0.444667458534241,-0.805331110954285,0.583753287792206,-0.402651727199554,-0.705055773258209, 0.623417019844055,-0.452671766281128,-0.637526035308838,0.31203830242157,-0.439545303583145,-0.842277884483337,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.942644000053406,-0.318175673484802,-0.100928120315075,0.829055666923523,-0.40739643573761,-0.383007615804672,0.946820557117462,-0.166022479534149,-0.275621712207794,0.92408949136734,-0.175655707716942,0.339416593313217,0.909235060214996,-0.290925145149231,0.297748446464539,0.915336489677429,-0.234250664710999,0.327545046806335,0.970865368843079,0.0892849490046501,0.222370475530624,0.132409438490868,0.260098040103912,0.956460535526276,0.0114754280075431,0.247809365391731,0.968740820884705,0.188986584544182,0.217446967959404,0.957601606845856,0.186875864863396,0.167301252484322,0.968032896518707,0.000295055127935484,0.143534883856773,0.98964524269104,0.122565753757954,0.118542328476906,0.98535543680191,0.188986584544182,0.217446967959404,0.957601606845856,0.0114754280075431,0.247809365391731,0.968740820884705,0.140872359275818,-0.399173051118851,-0.905988872051239,0.31203830242157,-0.439545303583145,-0.842277884483337,0.272795677185059,-0.496994286775589,-0.823759198188782,0.140843346714973,-0.431618928909302,-0.890992820262909,0.623417019844055,-0.452671766281128,-0.637526035308838,0.546701967716217,-0.520302414894104,-0.656050562858582,0.272795677185059,-0.496994286775589,-0.823759198188782,0.31203830242157,-0.439545303583145,-0.842277884483337,0.942644000053406,-0.318175673484802,-0.100928120315075,0.92242443561554,-0.371073186397552,-0.106947988271713,0.790781438350677,-0.460972279310226,-0.402702450752258,0.829055666923523,-0.40739643573761,-0.383007615804672,0.915336489677429,-0.234250664710999,0.327545046806335,0.916560828685761,-0.24360553920269,0.317131847143173,0.941202819347382,-0.301624983549118,0.152183011174202,0.955660283565521,-0.256323933601379,0.144953340291977,0.909235060214996,-0.290925145149231,0.297748446464539,0.918301284313202,-0.218417331576347,0.330176681280136,0.916560828685761,-0.24360553920269,0.317131847143173,0.915336489677429,-0.234250664710999,0.327545046806335, 0.885917663574219,-0.280271381139755,0.369591504335403,0.879492223262787,-0.245268657803535,0.407844007015228,0.918301284313202,-0.218417331576347,0.330176681280136,0.909235060214996,-0.290925145149231,0.297748446464539,0.140843346714973,-0.431618928909302,-0.890992820262909,0.272795677185059,-0.496994286775589,-0.823759198188782,0.267562568187714,-0.479633033275604,-0.835680842399597,0.228939339518547,-0.370276868343353,-0.900267601013184,0.546701967716217,-0.520302414894104,-0.656050562858582,0.549745261669159,-0.473052263259888,-0.68847781419754,0.267562568187714,-0.479633033275604,-0.835680842399597,0.272795677185059,-0.496994286775589,-0.823759198188782,0.92242443561554,-0.371073186397552,-0.106947988271713,0.925438106060028,-0.353884547948837,-0.135388508439064,0.796822428703308,-0.432056725025177,-0.422375500202179,0.790781438350677,-0.460972279310226,-0.402702450752258,0.916560828685761,-0.24360553920269,0.317131847143173,0.953391134738922,-0.158550098538399,0.256724029779434,0.960864663124084,-0.249232992529869,0.120921671390533,0.941202819347382,-0.301624983549118,0.152183011174202,0.265665024518967,0.160569414496422,0.950599610805511,0.140111669898033,0.0783234462141991,0.987033009529114,0.185034364461899,0.0477372668683529,0.981571912765503,0.353190511465073,0.114995338022709,0.928457081317902,0.549745261669159,-0.473052263259888,-0.68847781419754,0.678162038326263,-0.241175547242165,-0.694212198257446,0.385590463876724,-0.303107500076294,-0.871461868286133,0.267562568187714,-0.479633033275604,-0.835680842399597,0.925438106060028,-0.353884547948837,-0.135388508439064,0.962334990501404,-0.205602362751961,-0.177873581647873,0.888094663619995,-0.231564551591873,-0.39707151055336,0.796822428703308,-0.432056725025177,-0.422375500202179,0.960864663124084,-0.249232992529869,0.120921671390533,0.953391134738922,-0.158550098538399,0.256724029779434,0.983779430389404,0.00275212083943188,0.179361149668694,0.993288457393646,-0.102479107677937,0.0536287166178226,0.938150525093079,-0.0836314186453819,0.335975229740143, 0.946241497993469,0.0790377557277679,0.313655972480774,0.983779430389404,0.00275212083943188,0.179361149668694,0.953391134738922,-0.158550098538399,0.256724029779434,0.91181892156601,-0.103688038885593,0.397284656763077,0.86522775888443,0.0834222286939621,0.494390219449997,0.946241497993469,0.0790377557277679,0.313655972480774,0.938150525093079,-0.0836314186453819,0.335975229740143,0.823973476886749,-0.140763908624649,0.548865377902985,0.709406793117523,0.0714843049645424,0.701164722442627,0.86522775888443,0.0834222286939621,0.494390219449997,0.91181892156601,-0.103688038885593,0.397284656763077,0.962334990501404,-0.205602362751961,-0.177873581647873,0.939977943897247,-0.283478707075119,-0.189950734376907,0.89782452583313,-0.295981734991074,-0.32604593038559,0.888094663619995,-0.231564551591873,-0.39707151055336,0.993288457393646,-0.102479107677937,0.0536287166178226,0.983779430389404,0.00275212083943188,0.179361149668694,0.984757125377655,-0.122858062386513,0.123123273253441,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.946241497993469,0.0790377557277679,0.313655972480774,0.954775273799896,-0.0549841597676277,0.292200028896332,0.984757125377655,-0.122858062386513,0.123123273253441,0.983779430389404,0.00275212083943188,0.179361149668694,0.86522775888443,0.0834222286939621,0.494390219449997,0.833409249782562,-0.0707181841135025,0.54811304807663,0.954775273799896,-0.0549841597676277,0.292200028896332,0.946241497993469,0.0790377557277679,0.313655972480774,0.709406793117523,0.0714843049645424,0.701164722442627,0.527580142021179,-0.0869907140731812,0.845039546489716,0.833409249782562,-0.0707181841135025,0.54811304807663,0.86522775888443,0.0834222286939621,0.494390219449997,0.661977589130402,-0.708897471427917,-0.243413314223289,0.746676325798035,-0.643010795116425,-0.17032790184021,0.6322380900383,-0.767571449279785,-0.10539997369051,0.29490727186203,-0.85530948638916,-0.425999224185944,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.859511733055115,-0.505731165409088,0.0739971473813057,0.746179103851318,-0.664099156856537,0.0467877462506294, 0.6322380900383,-0.767571449279785,-0.10539997369051,0.859511733055115,-0.505731165409088,0.0739971473813057,0.835695207118988,-0.485575556755066,0.256573379039764,0.711589336395264,-0.66451358795166,0.228171736001968,0.746179103851318,-0.664099156856537,0.0467877462506294,0.680691421031952,-0.552797436714172,0.480701744556427,0.550213515758514,-0.731853306293488,0.402064383029938,0.711589336395264,-0.66451358795166,0.228171736001968,0.835695207118988,-0.485575556755066,0.256573379039764,0.544267177581787,0.038809709250927,0.838013768196106,0.729275226593018,-0.11221731454134,0.674955487251282,0.747986078262329,-0.084919698536396,0.658259391784668,0.635354340076447,0.0863202884793282,0.767381072044373,0.385354042053223,0.042363528162241,0.921795845031738,0.610790312290192,-0.062268540263176,0.789340078830719,0.729275226593018,-0.11221731454134,0.674955487251282,0.544267177581787,0.038809709250927,0.838013768196106,0.603610038757324,0.179113283753395,0.776899814605713,0.635354340076447,0.0863202884793282,0.767381072044373,0.813431859016418,0.0690318197011948,0.577549338340759,0.77562689781189,0.195846498012543,0.60003924369812,0.428932994604111,0.13583180308342,0.893065631389618,0.544267177581787,0.038809709250927,0.838013768196106,0.635354340076447,0.0863202884793282,0.767381072044373,0.603610038757324,0.179113283753395,0.776899814605713,0.255159199237823,0.10554338991642,0.961121380329132,0.385354042053223,0.042363528162241,0.921795845031738,0.544267177581787,0.038809709250927,0.838013768196106,0.428932994604111,0.13583180308342,0.893065631389618,0.353190511465073,0.114995338022709,0.928457081317902,0.493080407381058,0.0869515836238861,0.865627586841583,0.610790312290192,-0.062268540263176,0.789340078830719,0.385354042053223,0.042363528162241,0.921795845031738,0.512751221656799,0.314961016178131,0.798677444458008,0.603610038757324,0.179113283753395,0.776899814605713,0.77562689781189,0.195846498012543,0.60003924369812,0.704553008079529,0.389835178852081,0.592987060546875,0.186875864863396,0.167301252484322,0.968032896518707, 0.255159199237823,0.10554338991642,0.961121380329132,0.428932994604111,0.13583180308342,0.893065631389618,0.352489024400711,0.249785035848618,0.901864171028137,0.603610038757324,0.179113283753395,0.776899814605713,0.512751221656799,0.314961016178131,0.798677444458008,0.352489024400711,0.249785035848618,0.901864171028137,0.428932994604111,0.13583180308342,0.893065631389618,0.265665024518967,0.160569414496422,0.950599610805511,0.353190511465073,0.114995338022709,0.928457081317902,0.385354042053223,0.042363528162241,0.921795845031738,0.255159199237823,0.10554338991642,0.961121380329132,0.188986584544182,0.217446967959404,0.957601606845856,0.265665024518967,0.160569414496422,0.950599610805511,0.255159199237823,0.10554338991642,0.961121380329132,0.186875864863396,0.167301252484322,0.968032896518707,0.448167592287064,0.331256568431854,0.830310106277466,0.287839502096176,0.391564905643463,0.873971045017242,0.238586917519569,0.344399750232697,0.908000588417053,0.352489024400711,0.249785035848618,0.901864171028137,0.132409438490868,0.260098040103912,0.956460535526276,0.186875864863396,0.167301252484322,0.968032896518707,0.352489024400711,0.249785035848618,0.901864171028137,0.238586917519569,0.344399750232697,0.908000588417053,0.545623481273651,0.394130259752274,0.739564955234528,0.512751221656799,0.314961016178131,0.798677444458008,0.704553008079529,0.389835178852081,0.592987060546875,0.63835346698761,0.527818858623505,0.560278594493866,0.540044844150543,0.824666082859039,-0.168158859014511,0.491935312747955,0.72918576002121,-0.475697129964828,0.282073974609375,0.803686380386353,-0.523948907852173,0.372023165225983,0.906736969947815,-0.19856184720993,0.647948265075684,-0.685174643993378,-0.332714289426804,0.812437415122986,-0.0575567446649075,0.580200552940369,0.4433753490448,0.161547407507896,0.881657958030701,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.393054485321045,0.919416308403015,-0.0134849762544036,0.259856075048447,0.961204409599304,0.0925252288579941, 0.0862562954425812,0.984675407409668,-0.151572123169899,0.550135016441345,0.461672753095627,0.695851802825928,0.551036536693573,0.1087965965271,0.827358484268188,0.736154615879059,0.240016058087349,0.632825970649719,0.750702619552612,0.512931108474731,0.416349858045578,0.551036536693573,0.1087965965271,0.827358484268188,0.510494410991669,0.103201098740101,0.853665590286255,0.63226306438446,0.224956437945366,0.741375803947449,0.736154615879059,0.240016058087349,0.632825970649719,0.140111669898033,0.0783234462141991,0.987033009529114,0.265665024518967,0.160569414496422,0.950599610805511,0.188986584544182,0.217446967959404,0.957601606845856,0.122565753757954,0.118542328476906,0.98535543680191,0.275597482919693,0.0508149787783623,0.95992910861969,0.527580142021179,-0.0869907140731812,0.845039546489716,0.709406793117523,0.0714843049645424,0.701164722442627,0.493080407381058,0.0869515836238861,0.865627586841583,-0.266191899776459,0.70389860868454,-0.658535182476044,0.266888707876205,0.958940505981445,0.0959352776408196,0.393054485321045,0.919416308403015,-0.0134849762544036,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0462776906788349,0.971960961818695,0.23054338991642,-0.0405596829950809,0.531582415103912,-0.846034944057465,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.27082097530365,-0.434562891721725,0.858959317207336,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.41981428861618,-0.320506066083908,0.849135935306549,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.150304853916168,-0.209269061684608,0.966237485408783,-0.355942904949188,-0.323049247264862,0.876894414424896,-0.101489536464214,-0.459648072719574,0.882283091545105,0.0832947567105293,-0.342013299465179,0.935996174812317,0.578356921672821,-0.429673582315445,-0.693457901477814, 0.37424498796463,0.138061463832855,-0.91699492931366,0.132010728120804,0.613032221794128,-0.778950989246368,0.526131212711334,0.493667006492615,-0.692444086074829,0.663097739219666,-0.724811255931854,0.186949267983437,0.789066255092621,-0.467570185661316,-0.398437708616257,0.958566963672638,0.124525241553783,-0.256208688020706,0.835218191146851,-0.360097140073776,0.415620774030685,-0.141722351312637,-0.25363889336586,0.956860542297363,0.000238662076299079,-0.279259294271469,0.96021568775177,0.000465182994958013,-0.480507552623749,0.876990437507629,-0.27082097530365,-0.434562891721725,0.858959317207336,0.546701967716217,-0.520302414894104,-0.656050562858582,0.623417019844055,-0.452671766281128,-0.637526035308838,0.829055666923523,-0.40739643573761,-0.383007615804672,0.790781438350677,-0.460972279310226,-0.402702450752258,0.549745261669159,-0.473052263259888,-0.68847781419754,0.546701967716217,-0.520302414894104,-0.656050562858582,0.790781438350677,-0.460972279310226,-0.402702450752258,0.796822428703308,-0.432056725025177,-0.422375500202179,0.678162038326263,-0.241175547242165,-0.694212198257446,0.549745261669159,-0.473052263259888,-0.68847781419754,0.796822428703308,-0.432056725025177,-0.422375500202179,0.888094663619995,-0.231564551591873,-0.39707151055336,0.672621726989746,-0.282224327325821,-0.684053659439087,0.678162038326263,-0.241175547242165,-0.694212198257446,0.888094663619995,-0.231564551591873,-0.39707151055336,0.89782452583313,-0.295981734991074,-0.32604593038559,-0.00762177817523479,0.899371445178986,0.437118947505951,0.0780242905020714,0.996866285800934,0.0130291758105159,0.78013014793396,0.624480009078979,-0.0377050787210464,0.849660098552704,0.510039925575256,0.133928999304771,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.945589601993561,0.313947737216949,0.0854233801364899,0.93030720949173,0.248524934053421,0.269747763872147,0.74578994512558,-0.633161306381226,-0.207133173942566,0.238877683877945,0.949131786823273,-0.205149352550507,0.799383401870728,0.596614599227905,-0.0709738805890083, 0.78013014793396,0.624480009078979,-0.0377050787210464,0.0780242905020714,0.996866285800934,0.0130291758105159,0.986967325210571,0.15194895863533,0.0529817342758179,0.955660283565521,-0.256323933601379,0.144953340291977,0.942644000053406,-0.318175673484802,-0.100928120315075,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.92242443561554,-0.371073186397552,-0.106947988271713,0.942644000053406,-0.318175673484802,-0.100928120315075,0.955660283565521,-0.256323933601379,0.144953340291977,0.941202819347382,-0.301624983549118,0.152183011174202,0.925438106060028,-0.353884547948837,-0.135388508439064,0.92242443561554,-0.371073186397552,-0.106947988271713,0.941202819347382,-0.301624983549118,0.152183011174202,0.960864663124084,-0.249232992529869,0.120921671390533,0.962334990501404,-0.205602362751961,-0.177873581647873,0.925438106060028,-0.353884547948837,-0.135388508439064,0.960864663124084,-0.249232992529869,0.120921671390533,0.993288457393646,-0.102479107677937,0.0536287166178226,0.939977943897247,-0.283478707075119,-0.189950734376907,0.962334990501404,-0.205602362751961,-0.177873581647873,0.993288457393646,-0.102479107677937,0.0536287166178226,0.977083265781403,-0.21279039978981,-0.00533624598756433,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.0405596829950809,0.531582415103912,-0.846034944057465,-0.0404882803559303,0.532536089420319,-0.845438301563263,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.389843672513962,0.518116474151611,-0.761299669742584,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.00791200343519449,-0.3136927485466,-0.949491560459137,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.139385372400284,-0.293043553829193,-0.945884346961975,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.0879448130726814,-0.45889338850975,-0.884128153324127, 0.0786453634500504,-0.439450114965439,-0.894817590713501,0.196265131235123,0.534957885742188,-0.821766436100006,0.163574278354645,0.575437486171722,-0.801320910453796,0.37424498796463,0.138061463832855,-0.91699492931366,0.142098233103752,0.253012806177139,-0.956970512866974,0.196265131235123,0.534957885742188,-0.821766436100006,0.318493723869324,0.728740870952606,-0.606216490268707,0.320013791322708,0.764963567256927,-0.558947086334229,0.163574278354645,0.575437486171722,-0.801320910453796,-0.0101916557177901,0.912391781806946,0.409191101789474,0.179319217801094,0.922120809555054,-0.342837929725647,0.39146089553833,0.900987803936005,-0.187027588486671,-0.112045332789421,0.883429408073425,0.45497065782547,0.558892965316772,0.631695210933685,-0.537214875221252,0.589160740375519,0.293493062257767,-0.75282895565033,0.220478102564812,0.225269511342049,-0.949022173881531,0.230260863900185,0.590617835521698,-0.773401916027069,0.806149482727051,-0.532726168632507,0.257538169622421,0.968841314315796,0.185883238911629,-0.163688346743584,0.964999854564667,0.254521876573563,-0.0631974339485168,0.775248348712921,-0.624625861644745,0.0939816311001778,-0.0615167804062366,0.641514480113983,0.764640331268311,0.0572854578495026,0.523676514625549,0.849988996982574,0.287839502096176,0.391564905643463,0.873971045017242,0.321956604719162,0.474833071231842,0.819071114063263,0.0454900041222572,0.2624471783638,0.963873505592346,0.0114754280075431,0.247809365391731,0.968740820884705,0.132409438490868,0.260098040103912,0.956460535526276,0.253994464874268,0.250187575817108,0.934287428855896,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0738197043538094,-0.58150452375412,-0.810187101364136,-0.117905855178833,-0.615884125232697,-0.778964042663574,0.29490727186203,-0.85530948638916,-0.425999224185944,-0.0854567661881447,-0.590025365352631,-0.802849411964417,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.375436156988144,-0.682113528251648,-0.627510011196136,0.303897142410278,-0.58835905790329,-0.749319791793823, 0.493177682161331,0.0824330747127533,-0.866014182567596,0.67315399646759,0.330984532833099,-0.661296367645264,0.591645836830139,-0.392304599285126,-0.7043097615242,0.471546560525894,0.148768365383148,-0.86920177936554,0.122040368616581,-0.22475291788578,-0.966743111610413,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.150176227092743,-0.476422011852264,-0.866296231746674,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.0882615447044373,-0.199013933539391,-0.976014018058777,0.122040368616581,-0.22475291788578,-0.966743111610413,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.117905855178833,-0.615884125232697,-0.778964042663574,0.678162038326263,-0.241175547242165,-0.694212198257446,0.672621726989746,-0.282224327325821,-0.684053659439087,0.332537442445755,-0.288520336151123,-0.897872388362885,0.385590463876724,-0.303107500076294,-0.871461868286133,0.385590463876724,-0.303107500076294,-0.871461868286133,0.332537442445755,-0.288520336151123,-0.897872388362885,0.216808795928955,-0.349548786878586,-0.911487579345703,0.228939339518547,-0.370276868343353,-0.900267601013184,0.216808795928955,-0.349548786878586,-0.911487579345703,0.0646723359823227,-0.342740118503571,-0.937201499938965,0.139385372400284,-0.293043553829193,-0.945884346961975,0.228939339518547,-0.370276868343353,-0.900267601013184,0.39206200838089,-0.444667458534241,-0.805331110954285,0.174190670251846,-0.475461959838867,-0.862318694591522,0.150176227092743,-0.476422011852264,-0.866296231746674,0.346117079257965,-0.47863432765007,-0.80691522359848,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.373825579881668,0.746838629245758,0.549987733364105,0.617900848388672,0.738122165203094,0.270876914262772, 0.554794549942017,0.63729065656662,0.534849166870117,-0.39384588599205,0.733602285385132,0.553816795349121,-0.39384588599205,0.733602285385132,0.553816795349121,0.554794549942017,0.63729065656662,0.534849166870117,0.347248166799545,0.561754763126373,0.75089967250824,-0.460472017526627,0.662255048751831,0.591086983680725,0.347248166799545,0.561754763126373,0.75089967250824,0.327279478311539,0.828797340393066,0.453853607177734,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.460472017526627,0.662255048751831,0.591086983680725,0.938301980495453,0.0685238614678383,0.338959902524948,0.350325137376785,0.620450079441071,0.70165091753006,0.321956604719162,0.474833071231842,0.819071114063263,0.671115279197693,0.284787148237228,0.684471070766449,0.394804865121841,0.885042786598206,0.246634021401405,0.350325137376785,0.620450079441071,0.70165091753006,0.938301980495453,0.0685238614678383,0.338959902524948,0.791727185249329,0.579225897789001,0.194075778126717,0.387304782867432,0.59377658367157,0.705283224582672,0.223836988210678,0.893291056156158,0.389779537916183,-0.358905464410782,0.931329369544983,0.0617449507117271,0.263491213321686,0.831329226493835,0.48935067653656,0.565629243850708,0.815166532993317,0.124768301844597,0.540044844150543,0.824666082859039,-0.168158859014511,0.372023165225983,0.906736969947815,-0.19856184720993,0.396661043167114,0.909007132053375,0.127929911017418,0.55090343952179,0.499813765287399,0.668349921703339,0.558709442615509,0.701101422309875,0.443058162927628,0.337217271327972,0.810059905052185,0.479674339294434,0.55004757642746,0.676443994045258,0.489766448736191,0.253994464874268,0.250187575817108,0.934287428855896,0.132409438490868,0.260098040103912,0.956460535526276,0.238586917519569,0.344399750232697,0.908000588417053,0.257902681827545,0.417416572570801,0.871349334716797,0.287839502096176,0.391564905643463,0.873971045017242,0.448167592287064,0.331256568431854,0.830310106277466,0.671115279197693,0.284787148237228,0.684471070766449,0.321956604719162,0.474833071231842,0.819071114063263, 0.238586917519569,0.344399750232697,0.908000588417053,0.287839502096176,0.391564905643463,0.873971045017242,0.0572854578495026,0.523676514625549,0.849988996982574,0.257902681827545,0.417416572570801,0.871349334716797,0.671115279197693,0.284787148237228,0.684471070766449,0.545623481273651,0.394130259752274,0.739564955234528,0.665781199932098,0.528658747673035,0.526550352573395,0.947060525417328,0.264708548784256,0.181674882769585,-0.0702482014894485,0.80213338136673,0.592998504638672,-0.111158438026905,0.66179496049881,0.74139815568924,-0.406122446060181,0.842904448509216,0.352954238653183,-0.243022814393044,0.95173841714859,0.187440201640129,0.375614732503891,0.495400130748749,0.783257484436035,0.386715173721313,0.754913926124573,0.529675722122192,0.750702619552612,0.512931108474731,0.416349858045578,0.736154615879059,0.240016058087349,0.632825970649719,0.63226306438446,0.224956437945366,0.741375803947449,0.257902681827545,0.417416572570801,0.871349334716797,0.375614732503891,0.495400130748749,0.783257484436035,0.736154615879059,0.240016058087349,0.632825970649719,0.39146089553833,0.900987803936005,-0.187027588486671,0.53197318315506,0.845954120159149,0.0369608402252197,-0.258110016584396,0.811675071716309,0.523987472057343,-0.112045332789421,0.883429408073425,0.45497065782547,0.595662355422974,0.236076727509499,-0.767759144306183,0.460681647062302,-0.288388341665268,-0.83940726518631,0.122040368616581,-0.22475291788578,-0.966743111610413,0.471546560525894,0.148768365383148,-0.86920177936554,0.493177682161331,0.0824330747127533,-0.866014182567596,0.527646243572235,-0.330830633640289,-0.782394111156464,0.460681647062302,-0.288388341665268,-0.83940726518631,0.595662355422974,0.236076727509499,-0.767759144306183,0.737872421741486,0.632259011268616,0.236204952001572,0.554449737071991,0.577977955341339,0.598771214485168,0.837648034095764,0.514832735061646,-0.182463780045509,0.652710020542145,0.543907403945923,-0.527384459972382,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.142098233103752,0.253012806177139,-0.956970512866974, 0.37424498796463,0.138061463832855,-0.91699492931366,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.67315399646759,0.330984532833099,-0.661296367645264,0.471546560525894,0.148768365383148,-0.86920177936554,0.37424498796463,0.138061463832855,-0.91699492931366,0.67315399646759,0.330984532833099,-0.661296367645264,0.493177682161331,0.0824330747127533,-0.866014182567596,0.595662355422974,0.236076727509499,-0.767759144306183,0.471546560525894,0.148768365383148,-0.86920177936554,0.591645836830139,-0.392304599285126,-0.7043097615242,0.37424498796463,0.138061463832855,-0.91699492931366,0.578356921672821,-0.429673582315445,-0.693457901477814,0.303897142410278,-0.58835905790329,-0.749319791793823,0.708686351776123,0.701542615890503,0.0748436823487282,0.780383825302124,0.614288032054901,0.116838775575161,0.662577331066132,0.589804947376251,0.46165069937706,0.606493294239044,0.649602949619293,0.458456039428711,0.263491213321686,0.831329226493835,0.48935067653656,0.383488237857819,0.890466749668121,0.244960829615593,0.389103561639786,0.77647876739502,0.495660334825516,0.606493294239044,0.649602949619293,0.458456039428711,0.589160740375519,0.293493062257767,-0.75282895565033,0.558892965316772,0.631695210933685,-0.537214875221252,0.74043333530426,0.634463846683502,-0.221842527389526,0.646372437477112,0.650956153869629,-0.398068875074387,0.181706041097641,0.450920969247818,-0.873872518539429,0.220478102564812,0.225269511342049,-0.949022173881531,0.589160740375519,0.293493062257767,-0.75282895565033,0.424405604600906,0.592946588993073,-0.684320271015167,0.0537682510912418,-0.324202865362167,0.944458305835724,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.175815492868423,0.3834168612957,0.90668648481369,0.0744736939668655,0.385000914335251,0.919906497001648,-0.249922096729279,-0.324745059013367,0.912183940410614,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.474767446517944,0.386590272188187,0.790660321712494,-0.175815492868423,0.3834168612957,0.90668648481369, -0.702542901039124,0.392548084259033,0.593581914901733,-0.474767446517944,0.386590272188187,0.790660321712494,-0.629638135433197,-0.332909524440765,0.701945245265961,-0.881015419960022,-0.306221485137939,0.360610902309418,0.258142352104187,0.50887656211853,-0.821222960948944,0.162849396467209,0.526230156421661,-0.834602832794189,0.145952269434929,0.566527962684631,-0.811014175415039,0.266342312097549,0.6069176197052,-0.748807609081268,0.263788342475891,0.299328684806824,-0.916961312294006,0.19240340590477,0.354867070913315,-0.914904534816742,0.162849396467209,0.526230156421661,-0.834602832794189,0.258142352104187,0.50887656211853,-0.821222960948944,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.155474439263344,0.00156243739183992,-0.987838685512543,0.235058307647705,0.00269885058514774,-0.971977531909943,0.13675257563591,-0.219145968556404,-0.966060936450958,0.0786453634500504,-0.439450114965439,-0.894817590713501,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.13675257563591,-0.219145968556404,-0.966060936450958,0.139385372400284,-0.293043553829193,-0.945884346961975,0.0445788577198982,-0.252718240022659,-0.966512382030487,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.106468603014946,-0.443950653076172,-0.889703452587128,0.142098233103752,0.253012806177139,-0.956970512866974,0.263788342475891,0.299328684806824,-0.916961312294006,0.258142352104187,0.50887656211853,-0.821222960948944,0.196265131235123,0.534957885742188,-0.821766436100006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.263788342475891,0.299328684806824,-0.916961312294006,0.142098233103752,0.253012806177139,-0.956970512866974,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.13675257563591,-0.219145968556404,-0.966060936450958,0.235058307647705,0.00269885058514774,-0.971977531909943,0.125168636441231,-0.0242336299270391,-0.991839468479156,0.0882615447044373,-0.199013933539391,-0.976014018058777,-0.0387927554547787,0.555053651332855,-0.830909490585327, 0.0419506318867207,0.986220836639404,0.160026773810387,0.0270950496196747,0.974490761756897,0.222785964608192,0.230260863900185,0.590617835521698,-0.773401916027069,-0.00269555998966098,0.944226384162903,0.329286128282547,0.558892965316772,0.631695210933685,-0.537214875221252,0.230260863900185,0.590617835521698,-0.773401916027069,0.0270950496196747,0.974490761756897,0.222785964608192,-0.0771232843399048,0.899696409702301,0.42964905500412,0.74043333530426,0.634463846683502,-0.221842527389526,0.558892965316772,0.631695210933685,-0.537214875221252,-0.00269555998966098,0.944226384162903,0.329286128282547,0.780383825302124,0.614288032054901,0.116838775575161,-0.166241437196732,0.836733281612396,0.521767377853394,-0.227350860834122,0.778867661952972,0.584531247615814,0.662577331066132,0.589804947376251,0.46165069937706,0.662577331066132,0.589804947376251,0.46165069937706,-0.227350860834122,0.778867661952972,0.584531247615814,-0.422318667173386,0.684858381748199,0.593814790248871,0.387304782867432,0.59377658367157,0.705283224582672,0.387304782867432,0.59377658367157,0.705283224582672,-0.422318667173386,0.684858381748199,0.593814790248871,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.223836988210678,0.893291056156158,0.389779537916183,0.457618981599808,0.813868880271912,0.358053594827652,0.37424173951149,0.91025847196579,0.17712339758873,-0.702542901039124,0.392548084259033,0.593581914901733,-0.800732433795929,0.427052974700928,0.420063436031342,0.420635163784027,0.68705153465271,0.592474699020386,-0.826933801174164,0.485819309949875,0.283125460147858,-0.870735168457031,0.449585229158401,0.199231997132301,0.196103185415268,0.611983716487885,0.766171991825104,-0.870735168457031,0.449585229158401,0.199231997132301,-0.903985500335693,0.390926718711853,0.173165991902351,0.0825407654047012,0.994074046611786,0.0707375407218933,0.196103185415268,0.611983716487885,0.766171991825104,0.0218184478580952,0.990070343017578,-0.13886933028698,0.0744736939668655,0.385000914335251,0.919906497001648,-0.175815492868423,0.3834168612957,0.90668648481369, 0.122364826500416,0.988039612770081,-0.0938328057527542,0.122364826500416,0.988039612770081,-0.0938328057527542,-0.175815492868423,0.3834168612957,0.90668648481369,-0.474767446517944,0.386590272188187,0.790660321712494,0.261956453323364,0.964480102062225,0.0340141989290714,0.261956453323364,0.964480102062225,0.0340141989290714,-0.474767446517944,0.386590272188187,0.790660321712494,-0.702542901039124,0.392548084259033,0.593581914901733,0.37424173951149,0.91025847196579,0.17712339758873,0.617900848388672,0.738122165203094,0.270876914262772,0.457618981599808,0.813868880271912,0.358053594827652,0.420635163784027,0.68705153465271,0.592474699020386,0.554794549942017,0.63729065656662,0.534849166870117,0.39146089553833,0.900987803936005,-0.187027588486671,0.261956453323364,0.964480102062225,0.0340141989290714,0.37424173951149,0.91025847196579,0.17712339758873,0.53197318315506,0.845954120159149,0.0369608402252197,0.179319217801094,0.922120809555054,-0.342837929725647,0.122364826500416,0.988039612770081,-0.0938328057527542,0.261956453323364,0.964480102062225,0.0340141989290714,0.39146089553833,0.900987803936005,-0.187027588486671,0.00435609184205532,0.929633140563965,-0.368460655212402,0.0218184478580952,0.990070343017578,-0.13886933028698,0.122364826500416,0.988039612770081,-0.0938328057527542,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,-0.112045332789421,0.883429408073425,0.45497065782547,-0.00269555998966098,0.944226384162903,0.329286128282547,0.0270950496196747,0.974490761756897,0.222785964608192,-0.112045332789421,0.883429408073425,0.45497065782547,-0.258110016584396,0.811675071716309,0.523987472057343,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.00269555998966098,0.944226384162903,0.329286128282547,-0.373825579881668,0.746838629245758,0.549987733364105,-0.166241437196732,0.836733281612396,0.521767377853394,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.258110016584396,0.811675071716309,0.523987472057343,-0.166241437196732,0.836733281612396,0.521767377853394, -0.373825579881668,0.746838629245758,0.549987733364105,-0.39384588599205,0.733602285385132,0.553816795349121,-0.227350860834122,0.778867661952972,0.584531247615814,-0.39384588599205,0.733602285385132,0.553816795349121,-0.460472017526627,0.662255048751831,0.591086983680725,-0.422318667173386,0.684858381748199,0.593814790248871,-0.227350860834122,0.778867661952972,0.584531247615814,-0.460472017526627,0.662255048751831,0.591086983680725,-0.619935512542725,0.784334897994995,0.0223318859934807,-0.20431387424469,0.977353155612946,-0.0551062189042568,-0.422318667173386,0.684858381748199,0.593814790248871,0.327279478311539,0.828797340393066,0.453853607177734,0.0825407654047012,0.994074046611786,0.0707375407218933,-0.20431387424469,0.977353155612946,-0.0551062189042568,-0.619935512542725,0.784334897994995,0.0223318859934807,0.347248166799545,0.561754763126373,0.75089967250824,0.196103185415268,0.611983716487885,0.766171991825104,0.0825407654047012,0.994074046611786,0.0707375407218933,0.327279478311539,0.828797340393066,0.453853607177734,0.554794549942017,0.63729065656662,0.534849166870117,0.420635163784027,0.68705153465271,0.592474699020386,0.196103185415268,0.611983716487885,0.766171991825104,0.347248166799545,0.561754763126373,0.75089967250824,-0.800732433795929,0.427052974700928,0.420063436031342,-0.702542901039124,0.392548084259033,0.593581914901733,-0.881015419960022,-0.306221485137939,0.360610902309418,-0.971851825714111,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.870735168457031,0.449585229158401,0.199231997132301,-0.826933801174164,0.485819309949875,0.283125460147858,-0.905991911888123,-0.0693745836615562,-0.417571365833282,-0.895736455917358,-0.0740359798073769,-0.438377469778061,-0.903985500335693,0.390926718711853,0.173165991902351,-0.870735168457031,0.449585229158401,0.199231997132301,0.430973529815674,0.546808898448944,0.717817425727844,0.42970210313797,0.768015503883362,0.474877148866653,-0.339239358901978,0.848914384841919,0.405291259288788, -0.365288615226746,0.685251891613007,0.630074620246887,-0.349254995584488,0.931400954723358,0.102533832192421,-0.339239358901978,0.848914384841919,0.405291259288788,0.42970210313797,0.768015503883362,0.474877148866653,0.471417188644409,0.872199058532715,0.130516812205315,-0.349305719137192,0.811025559902191,-0.469279229640961,0.524978220462799,0.717848002910614,-0.457265913486481,0.49711886048317,0.498656928539276,-0.710080325603485,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.354273974895477,0.577595055103302,-0.735441267490387,0.49711886048317,0.498656928539276,-0.710080325603485,0.421276032924652,-0.302525490522385,-0.854988157749176,0.54582554101944,-0.560542941093445,-0.622788965702057,0.652710020542145,0.543907403945923,-0.527384459972382,0.0589214377105236,0.108213946223259,-0.99237996339798,0.0839502513408661,-0.381248086690903,-0.920653164386749,-0.248638898134232,0.048121701925993,-0.967400133609772,0.0589214377105236,0.108213946223259,-0.99237996339798,0.652710020542145,0.543907403945923,-0.527384459972382,0.442993491888046,0.219760671257973,-0.869173228740692,0.613709151744843,-0.52058732509613,-0.593590676784515,0.764467060565948,-0.53394079208374,-0.361244171857834,0.218565791845322,-0.866421818733215,-0.448934614658356,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.764467060565948,-0.53394079208374,-0.361244171857834,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.218565791845322,-0.866421818733215,-0.448934614658356,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.932840287685394,-0.323781669139862,0.158033236861229,0.534525871276855,-0.813466727733612,0.229246467351913,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.654802083969116,-0.347440212965012,0.67120748758316,0.646713316440582,-0.673043549060822,0.358851253986359,0.916919708251953,-0.248773142695427,0.312041908502579,0.685809075832367,-0.12582391500473,0.716822326183319, 0.368975192308426,0.372379690408707,0.851581275463104,0.430973529815674,0.546808898448944,0.717817425727844,-0.365288615226746,0.685251891613007,0.630074620246887,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.93030720949173,0.248524934053421,0.269747763872147,0.42970210313797,0.768015503883362,0.474877148866653,0.430973529815674,0.546808898448944,0.717817425727844,0.93030720949173,0.248524934053421,0.269747763872147,0.945589601993561,0.313947737216949,0.0854233801364899,0.471417188644409,0.872199058532715,0.130516812205315,0.42970210313797,0.768015503883362,0.474877148866653,0.968841314315796,0.185883238911629,-0.163688346743584,0.524978220462799,0.717848002910614,-0.457265913486481,0.517808675765991,0.838519096374512,-0.169587478041649,0.964999854564667,0.254521876573563,-0.0631974339485168,0.789066255092621,-0.467570185661316,-0.398437708616257,0.421276032924652,-0.302525490522385,-0.854988157749176,0.49711886048317,0.498656928539276,-0.710080325603485,0.958566963672638,0.124525241553783,-0.256208688020706,0.837648034095764,0.514832735061646,-0.182463780045509,0.554449737071991,0.577977955341339,0.598771214485168,0.437207967042923,0.465549558401108,0.76948869228363,0.996942400932312,0.0589848347008228,-0.051250733435154,0.849660098552704,0.510039925575256,0.133928999304771,0.78013014793396,0.624480009078979,-0.0377050787210464,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.764467060565948,-0.53394079208374,-0.361244171857834,0.78013014793396,0.624480009078979,-0.0377050787210464,0.799383401870728,0.596614599227905,-0.0709738805890083,0.932840287685394,-0.323781669139862,0.158033236861229,0.891158640384674,-0.445911049842834,-0.0836637020111084,0.799383401870728,0.596614599227905,-0.0709738805890083,0.835493862628937,0.547001540660858,0.0523386560380459,0.916919708251953,-0.248773142695427,0.312041908502579,0.932840287685394,-0.323781669139862,0.158033236861229,0.835218191146851,-0.360097140073776,0.415620774030685,0.806149482727051,-0.532726168632507,0.257538169622421, 0.112480655312538,-0.860872745513916,0.496231973171234,0.123612143099308,-0.593166947364807,0.795533180236816,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0904572755098343,-0.981297671794891,0.169918611645699,0.775248348712921,-0.624625861644745,0.0939816311001778,0.705088436603546,-0.598325669765472,-0.380600422620773,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.74578994512558,-0.633161306381226,-0.207133173942566,0.647948265075684,-0.685174643993378,-0.332714289426804,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.705088436603546,-0.598325669765472,-0.380600422620773,0.201858729124069,0.87289696931839,0.444189012050629,0.285585820674896,0.936043798923492,-0.20557901263237,0.132751479744911,0.960573315620422,-0.244286626577377,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0780242905020714,0.996866285800934,0.0130291758105159,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.141466349363327,0.962726950645447,-0.230529963970184,0.238877683877945,0.949131786823273,-0.205149352550507,-0.00762177817523479,0.899371445178986,0.437118947505951,-0.112318813800812,0.902268052101135,0.416289359331131,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.0780242905020714,0.996866285800934,0.0130291758105159,0.135901644825935,0.703174889087677,0.697908222675323,-0.158927887678146,0.672389388084412,0.722934603691101,-0.112318813800812,0.902268052101135,0.416289359331131,-0.00762177817523479,0.899371445178986,0.437118947505951,0.663097739219666,-0.724811255931854,0.186949267983437,0.835218191146851,-0.360097140073776,0.415620774030685,0.123612143099308,-0.593166947364807,0.795533180236816,0.159164875745773,-0.84468400478363,0.511053323745728,0.114869266748428,0.74843168258667,0.653188347816467,0.0335473045706749,0.692889869213104,0.720262587070465,0.55090343952179,0.499813765287399,0.668349921703339, 0.388264060020447,0.528846085071564,0.754700541496277,0.946820557117462,-0.166022479534149,-0.275621712207794,0.704087793827057,-0.576694130897522,-0.414347946643829,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.996236562728882,0.0134180961176753,-0.0856306329369545,-0.0757745653390884,0.59090781211853,-0.803172528743744,0.526131212711334,0.493667006492615,-0.692444086074829,0.491935312747955,0.72918576002121,-0.475697129964828,0.0196502637118101,0.849765479564667,-0.52679455280304,0.765287220478058,-0.345726698637009,-0.542962729930878,0.316276580095291,-0.60947847366333,-0.726983547210693,0.704087793827057,-0.576694130897522,-0.414347946643829,0.946820557117462,-0.166022479534149,-0.275621712207794,0.996236562728882,0.0134180961176753,-0.0856306329369545,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.929248809814453,-0.338162571191788,0.148804187774658,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.91059011220932,-0.28900209069252,0.295471668243408,0.830892741680145,-0.200436040759087,0.51907867193222,0.92408949136734,-0.175655707716942,0.339416593313217,0.526131212711334,0.493667006492615,-0.692444086074829,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.509015023708344,-0.485809624195099,-0.71055805683136,0.066303126513958,0.98921149969101,0.130631282925606,0.0600598677992821,0.978212475776672,-0.198728814721107,0.540044844150543,0.824666082859039,-0.168158859014511,0.565629243850708,0.815166532993317,0.124768301844597,0.0335473045706749,0.692889869213104,0.720262587070465,0.0757396295666695,0.879416644573212,0.469989240169525,0.558709442615509,0.701101422309875,0.443058162927628,0.55090343952179,0.499813765287399,0.668349921703339,0.0757396295666695,0.879416644573212,0.469989240169525,0.0335473045706749,0.692889869213104,0.720262587070465,-0.365288615226746,0.685251891613007,0.630074620246887,-0.339239358901978,0.848914384841919,0.405291259288788,0.066303126513958,0.98921149969101,0.130631282925606, 0.0757396295666695,0.879416644573212,0.469989240169525,-0.339239358901978,0.848914384841919,0.405291259288788,-0.349254995584488,0.931400954723358,0.102533832192421,0.0196502637118101,0.849765479564667,-0.52679455280304,0.0600598677992821,0.978212475776672,-0.198728814721107,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.263506501913071,-0.108145013451576,-0.958576560020447,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.0757745653390884,0.59090781211853,-0.803172528743744,-0.354273974895477,0.577595055103302,-0.735441267490387,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.230070114135742,-0.386967688798904,-0.89292985200882,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.316276580095291,-0.60947847366333,-0.726983547210693,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.704087793827057,-0.576694130897522,-0.414347946643829,0.218565791845322,-0.866421818733215,-0.448934614658356,0.929248809814453,-0.338162571191788,0.148804187774658,0.873082160949707,-0.478354394435883,-0.0943642035126686,0.428993254899979,-0.900569558143616,-0.0702797770500183,0.534525871276855,-0.813466727733612,0.229246467351913,0.646713316440582,-0.673043549060822,0.358851253986359,0.91059011220932,-0.28900209069252,0.295471668243408,0.929248809814453,-0.338162571191788,0.148804187774658,0.534525871276855,-0.813466727733612,0.229246467351913,-0.0639391615986824,0.658531367778778,0.749832093715668,0.114869266748428,0.74843168258667,0.653188347816467,0.388264060020447,0.528846085071564,0.754700541496277,0.189128592610359,0.522824287414551,0.831194996833801,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0839502513408661,-0.381248086690903,-0.920653164386749, -0.263506501913071,-0.108145013451576,-0.958576560020447,0.421276032924652,-0.302525490522385,-0.854988157749176,0.230070114135742,-0.386967688798904,-0.89292985200882,0.509015023708344,-0.485809624195099,-0.71055805683136,-0.103349760174751,-0.10200422257185,-0.989400804042816,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.418020725250244,-0.127127349376678,-0.899498343467712,0.482518672943115,-0.357222050428391,-0.799730002880096,0.527646243572235,-0.330830633640289,-0.782394111156464,0.493177682161331,0.0824330747127533,-0.866014182567596,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.482518672943115,-0.357222050428391,-0.799730002880096,0.418020725250244,-0.127127349376678,-0.899498343467712,-0.027174474671483,-0.150700747966766,-0.988205909729004,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.00693236710503697,-0.478508800268173,-0.878055393695831,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.464636594057083,-0.415377110242844,-0.782032430171967,-0.23220556974411,-0.496286630630493,-0.836528658866882,-0.248638898134232,0.048121701925993,-0.967400133609772,0.442993491888046,0.219760671257973,-0.869173228740692,0.338892996311188,0.40640527009964,0.84852010011673,0.037119422107935,0.39716312289238,0.916997075080872,0.437207967042923,0.465549558401108,0.76948869228363,0.554449737071991,0.577977955341339,0.598771214485168,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.737872421741486,0.632259011268616,0.236204952001572,0.652710020542145,0.543907403945923,-0.527384459972382,0.54582554101944,-0.560542941093445,-0.622788965702057,0.606493294239044,0.649602949619293,0.458456039428711,0.389103561639786,0.77647876739502,0.495660334825516,0.471062362194061,0.869565486907959,0.148176074028015,0.708686351776123,0.701542615890503,0.0748436823487282,0.389103561639786,0.77647876739502,0.495660334825516,0.337217271327972,0.810059905052185,0.479674339294434,0.396661043167114,0.909007132053375,0.127929911017418,0.471062362194061,0.869565486907959,0.148176074028015, 0.775248348712921,-0.624625861644745,0.0939816311001778,0.964999854564667,0.254521876573563,-0.0631974339485168,0.945589601993561,0.313947737216949,0.0854233801364899,0.771648705005646,-0.635727405548096,-0.0202230606228113,-0.258110016584396,0.811675071716309,0.523987472057343,0.53197318315506,0.845954120159149,0.0369608402252197,0.617900848388672,0.738122165203094,0.270876914262772,-0.373825579881668,0.746838629245758,0.549987733364105,0.396661043167114,0.909007132053375,0.127929911017418,0.337217271327972,0.810059905052185,0.479674339294434,0.558709442615509,0.701101422309875,0.443058162927628,0.565629243850708,0.815166532993317,0.124768301844597,0.646372437477112,0.650956153869629,-0.398068875074387,0.74043333530426,0.634463846683502,-0.221842527389526,0.780383825302124,0.614288032054901,0.116838775575161,0.708686351776123,0.701542615890503,0.0748436823487282,0.74043333530426,0.634463846683502,-0.221842527389526,-0.0771232843399048,0.899696409702301,0.42964905500412,-0.166241437196732,0.836733281612396,0.521767377853394,0.780383825302124,0.614288032054901,0.116838775575161,0.53197318315506,0.845954120159149,0.0369608402252197,0.37424173951149,0.91025847196579,0.17712339758873,0.457618981599808,0.813868880271912,0.358053594827652,0.617900848388672,0.738122165203094,0.270876914262772,0.945589601993561,0.313947737216949,0.0854233801364899,0.964999854564667,0.254521876573563,-0.0631974339485168,0.517808675765991,0.838519096374512,-0.169587478041649,0.471417188644409,0.872199058532715,0.130516812205315,0.74578994512558,-0.633161306381226,-0.207133173942566,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.771648705005646,-0.635727405548096,-0.0202230606228113,0.565629243850708,0.815166532993317,0.124768301844597,0.558709442615509,0.701101422309875,0.443058162927628,0.0757396295666695,0.879416644573212,0.469989240169525,0.066303126513958,0.98921149969101,0.130631282925606,0.282073974609375,0.803686380386353,-0.523948907852173,0.132010728120804,0.613032221794128,-0.778950989246368, 0.163574278354645,0.575437486171722,-0.801320910453796,0.320013791322708,0.764963567256927,-0.558947086334229,0.285585820674896,0.936043798923492,-0.20557901263237,0.201858729124069,0.87289696931839,0.444189012050629,0.618469655513763,0.424896746873856,0.661028027534485,0.835493862628937,0.547001540660858,0.0523386560380459,0.842455089092255,-0.136532187461853,-0.521179795265198,0.971711039543152,-0.0647541359066963,0.227122470736504,0.929154098033905,-0.212225988507271,0.302708983421326,0.92408949136734,-0.175655707716942,0.339416593313217,0.929154098033905,-0.212225988507271,0.302708983421326,0.885917663574219,-0.280271381139755,0.369591504335403,0.909235060214996,-0.290925145149231,0.297748446464539,0.92408949136734,-0.175655707716942,0.339416593313217,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.91181892156601,-0.103688038885593,0.397284656763077,0.918301284313202,-0.218417331576347,0.330176681280136,0.491935312747955,0.72918576002121,-0.475697129964828,0.526131212711334,0.493667006492615,-0.692444086074829,0.132010728120804,0.613032221794128,-0.778950989246368,0.282073974609375,0.803686380386353,-0.523948907852173,0.550213515758514,-0.731853306293488,0.402064383029938,0.680691421031952,-0.552797436714172,0.480701744556427,0.430274456739426,-0.536508023738861,0.725963473320007,0.307976216077805,-0.686480343341827,0.6587073802948,0.318493723869324,0.728740870952606,-0.606216490268707,0.646372437477112,0.650956153869629,-0.398068875074387,0.457759588956833,0.863344848155975,-0.21234855055809,0.320013791322708,0.764963567256927,-0.558947086334229,0.835218191146851,-0.360097140073776,0.415620774030685,0.958566963672638,0.124525241553783,-0.256208688020706,0.968841314315796,0.185883238911629,-0.163688346743584,0.806149482727051,-0.532726168632507,0.257538169622421,0.266342312097549,0.6069176197052,-0.748807609081268,0.145952269434929,0.566527962684631,-0.811014175415039,0.181706041097641,0.450920969247818,-0.873872518539429,0.424405604600906,0.592946588993073,-0.684320271015167, 0.196265131235123,0.534957885742188,-0.821766436100006,0.258142352104187,0.50887656211853,-0.821222960948944,0.266342312097549,0.6069176197052,-0.748807609081268,0.318493723869324,0.728740870952606,-0.606216490268707,-0.349305719137192,0.811025559902191,-0.469279229640961,-0.343787729740143,0.921479761600494,-0.180790051817894,0.517808675765991,0.838519096374512,-0.169587478041649,0.524978220462799,0.717848002910614,-0.457265913486481,0.646713316440582,-0.673043549060822,0.358851253986359,0.534525871276855,-0.813466727733612,0.229246467351913,0.932840287685394,-0.323781669139862,0.158033236861229,0.916919708251953,-0.248773142695427,0.312041908502579,0.958566963672638,0.124525241553783,-0.256208688020706,0.49711886048317,0.498656928539276,-0.710080325603485,0.524978220462799,0.717848002910614,-0.457265913486481,0.968841314315796,0.185883238911629,-0.163688346743584,0.835493862628937,0.547001540660858,0.0523386560380459,0.618469655513763,0.424896746873856,0.661028027534485,0.685809075832367,-0.12582391500473,0.716822326183319,0.916919708251953,-0.248773142695427,0.312041908502579,0.775248348712921,-0.624625861644745,0.0939816311001778,0.0904572755098343,-0.981297671794891,0.169918611645699,0.112480655312538,-0.860872745513916,0.496231973171234,0.806149482727051,-0.532726168632507,0.257538169622421,0.285585820674896,0.936043798923492,-0.20557901263237,0.238877683877945,0.949131786823273,-0.205149352550507,0.141466349363327,0.962726950645447,-0.230529963970184,0.132751479744911,0.960573315620422,-0.244286626577377,0.540044844150543,0.824666082859039,-0.168158859014511,0.0600598677992821,0.978212475776672,-0.198728814721107,0.0196502637118101,0.849765479564667,-0.52679455280304,0.491935312747955,0.72918576002121,-0.475697129964828,0.970865368843079,0.0892849490046501,0.222370475530624,0.986967325210571,0.15194895863533,0.0529817342758179,0.929248809814453,-0.338162571191788,0.148804187774658,0.91059011220932,-0.28900209069252,0.295471668243408,-0.354273974895477,0.577595055103302,-0.735441267490387,-0.0757745653390884,0.59090781211853,-0.803172528743744, 0.0196502637118101,0.849765479564667,-0.52679455280304,-0.349305719137192,0.811025559902191,-0.469279229640961,0.654802083969116,-0.347440212965012,0.67120748758316,0.830892741680145,-0.200436040759087,0.51907867193222,0.91059011220932,-0.28900209069252,0.295471668243408,0.646713316440582,-0.673043549060822,0.358851253986359,0.915336489677429,-0.234250664710999,0.327545046806335,0.955660283565521,-0.256323933601379,0.144953340291977,0.986967325210571,0.15194895863533,0.0529817342758179,0.970865368843079,0.0892849490046501,0.222370475530624,0.527646243572235,-0.330830633640289,-0.782394111156464,0.482518672943115,-0.357222050428391,-0.799730002880096,0.583753287792206,-0.402651727199554,-0.705055773258209,0.39206200838089,-0.444667458534241,-0.805331110954285,0.623417019844055,-0.452671766281128,-0.637526035308838,0.765287220478058,-0.345726698637009,-0.542962729930878,0.946820557117462,-0.166022479534149,-0.275621712207794,0.829055666923523,-0.40739643573761,-0.383007615804672,0.135901644825935,0.703174889087677,0.697908222675323,-0.00762177817523479,0.899371445178986,0.437118947505951,0.849660098552704,0.510039925575256,0.133928999304771,0.961316466331482,0.243311077356339,0.129113554954529,0.346117079257965,-0.47863432765007,-0.80691522359848,0.460681647062302,-0.288388341665268,-0.83940726518631,0.527646243572235,-0.330830633640289,-0.782394111156464,0.39206200838089,-0.444667458534241,-0.805331110954285,0.0879448130726814,-0.45889338850975,-0.884128153324127,0.150176227092743,-0.476422011852264,-0.866296231746674,0.174190670251846,-0.475461959838867,-0.862318694591522,0.113550499081612,-0.486260622739792,-0.866404592990875,0.106468603014946,-0.443950653076172,-0.889703452587128,0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0786453634500504,-0.439450114965439,-0.894817590713501,-0.23220556974411,-0.496286630630493,-0.836528658866882,0.464636594057083,-0.415377110242844,-0.782032430171967,0.613709151744843,-0.52058732509613,-0.593590676784515, -0.0159856956452131,-0.708547711372375,-0.705481767654419,0.961316466331482,0.243311077356339,0.129113554954529,0.849660098552704,0.510039925575256,0.133928999304771,0.764467060565948,-0.53394079208374,-0.361244171857834,0.613709151744843,-0.52058732509613,-0.593590676784515,0.135901644825935,0.703174889087677,0.697908222675323,0.437207967042923,0.465549558401108,0.76948869228363,0.037119422107935,0.39716312289238,0.916997075080872,-0.158927887678146,0.672389388084412,0.722934603691101,0.482518672943115,-0.357222050428391,-0.799730002880096,0.00693236710503697,-0.478508800268173,-0.878055393695831,0.316276580095291,-0.60947847366333,-0.726983547210693,0.765287220478058,-0.345726698637009,-0.542962729930878,-0.0159856956452131,-0.708547711372375,-0.705481767654419,0.218565791845322,-0.866421818733215,-0.448934614658356,0.704087793827057,-0.576694130897522,-0.414347946643829,0.316276580095291,-0.60947847366333,-0.726983547210693,0.113550499081612,-0.486260622739792,-0.866404592990875,0.140872359275818,-0.399173051118851,-0.905988872051239,0.140843346714973,-0.431618928909302,-0.890992820262909,0.106468603014946,-0.443950653076172,-0.889703452587128,0.140843346714973,-0.431618928909302,-0.890992820262909,0.228939339518547,-0.370276868343353,-0.900267601013184,0.139385372400284,-0.293043553829193,-0.945884346961975,0.106468603014946,-0.443950653076172,-0.889703452587128,-0.971851825714111,-0.229726418852806,0.0522474460303783,-0.960497379302979,-0.120281100273132,-0.250952750444412,-0.826933801174164,0.485819309949875,0.283125460147858,-0.800732433795929,0.427052974700928,0.420063436031342,-0.800732433795929,0.427052974700928,0.420063436031342,-0.826933801174164,0.485819309949875,0.283125460147858,0.420635163784027,0.68705153465271,0.592474699020386,0.457618981599808,0.813868880271912,0.358053594827652,-0.349254995584488,0.931400954723358,0.102533832192421,-0.343787729740143,0.921479761600494,-0.180790051817894,0.0600598677992821,0.978212475776672,-0.198728814721107,0.066303126513958,0.98921149969101,0.130631282925606, 0.471417188644409,0.872199058532715,0.130516812205315,0.517808675765991,0.838519096374512,-0.169587478041649,-0.343787729740143,0.921479761600494,-0.180790051817894,-0.349254995584488,0.931400954723358,0.102533832192421,0.174190670251846,-0.475461959838867,-0.862318694591522,0.39206200838089,-0.444667458534241,-0.805331110954285,0.31203830242157,-0.439545303583145,-0.842277884483337,0.140872359275818,-0.399173051118851,-0.905988872051239,0.4433753490448,0.161547407507896,0.881657958030701,0.189128592610359,0.522824287414551,0.831194996833801,0.150548562407494,0.393970012664795,0.906709849834442,0.705088436603546,-0.598325669765472,-0.380600422620773,0.916756093502045,0.0901993364095688,0.389130234718323,0.812437415122986,-0.0575567446649075,0.580200552940369,0.647948265075684,-0.685174643993378,-0.332714289426804,0.189128592610359,0.522824287414551,0.831194996833801,0.4433753490448,0.161547407507896,0.881657958030701,0.368975192308426,0.372379690408707,0.851581275463104,-0.0639391615986824,0.658531367778778,0.749832093715668,0.916756093502045,0.0901993364095688,0.389130234718323,0.430973529815674,0.546808898448944,0.717817425727844,0.368975192308426,0.372379690408707,0.851581275463104,0.812437415122986,-0.0575567446649075,0.580200552940369,-0.365288615226746,0.685251891613007,0.630074620246887,0.0335473045706749,0.692889869213104,0.720262587070465,0.114869266748428,0.74843168258667,0.653188347816467,-0.0639391615986824,0.658531367778778,0.749832093715668,-0.444781541824341,-0.346720337867737,0.825805306434631,-0.41981428861618,-0.320506066083908,0.849135935306549,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.253998309373856,-0.212244898080826,0.943629682064056,0.953391134738922,-0.158550098538399,0.256724029779434,0.916560828685761,-0.24360553920269,0.317131847143173,0.918301284313202,-0.218417331576347,0.330176681280136,0.938150525093079,-0.0836314186453819,0.335975229740143,0.654802083969116,-0.347440212965012,0.67120748758316,0.164040550589561,0.209489807486534,0.963952660560608,0.92408949136734,-0.175655707716942,0.339416593313217, 0.830892741680145,-0.200436040759087,0.51907867193222,0.0319873727858067,0.984376490116119,0.173146665096283,0.223836988210678,0.893291056156158,0.389779537916183,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.185543641448021,0.976534903049469,0.10933043807745,-0.0894755497574806,0.965718626976013,0.243683651089668,0.394804865121841,0.885042786598206,0.246634021401405,0.383488237857819,0.890466749668121,0.244960829615593,0.263491213321686,0.831329226493835,0.48935067653656,0.394804865121841,0.885042786598206,0.246634021401405,0.791727185249329,0.579225897789001,0.194075778126717,0.55004757642746,0.676443994045258,0.489766448736191,0.383488237857819,0.890466749668121,0.244960829615593,0.791727185249329,0.579225897789001,0.194075778126717,0.938301980495453,0.0685238614678383,0.338959902524948,0.858800172805786,0.271537780761719,0.434430092573166,0.55004757642746,0.676443994045258,0.489766448736191,-0.0894755497574806,0.965718626976013,0.243683651089668,0.263491213321686,0.831329226493835,0.48935067653656,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.298087060451508,0.801499605178833,0.518403768539429,0.761567413806915,0.64221316576004,0.0870478227734566,0.685486555099487,0.727433860301971,-0.0307916849851608,0.858800172805786,0.271537780761719,0.434430092573166,0.947060525417328,0.264708548784256,0.181674882769585,-0.243022814393044,0.95173841714859,0.187440201640129,-0.358905464410782,0.931329369544983,0.0617449507117271,0.223836988210678,0.893291056156158,0.389779537916183,0.0319873727858067,0.984376490116119,0.173146665096283,0.0862562954425812,0.984675407409668,-0.151572123169899,0.259856075048447,0.961204409599304,0.0925252288579941,0.185543641448021,0.976534903049469,0.10933043807745,0.0825407654047012,0.994074046611786,0.0707375407218933,0.661977589130402,-0.708897471427917,-0.243413314223289,0.375436156988144,-0.682113528251648,-0.627510011196136,0.672621726989746,-0.282224327325821,-0.684053659439087,0.89782452583313,-0.295981734991074,-0.32604593038559,0.819233179092407,-0.572073757648468,-0.0398566573858261, 0.746676325798035,-0.643010795116425,-0.17032790184021,0.939977943897247,-0.283478707075119,-0.189950734376907,0.977083265781403,-0.21279039978981,-0.00533624598756433,0.954775273799896,-0.0549841597676277,0.292200028896332,0.835695207118988,-0.485575556755066,0.256573379039764,0.859511733055115,-0.505731165409088,0.0739971473813057,0.984757125377655,-0.122858062386513,0.123123273253441,0.833409249782562,-0.0707181841135025,0.54811304807663,0.680691421031952,-0.552797436714172,0.480701744556427,0.835695207118988,-0.485575556755066,0.256573379039764,0.954775273799896,-0.0549841597676277,0.292200028896332,0.527580142021179,-0.0869907140731812,0.845039546489716,0.430274456739426,-0.536508023738861,0.725963473320007,0.680691421031952,-0.552797436714172,0.480701744556427,0.833409249782562,-0.0707181841135025,0.54811304807663,0.122565753757954,0.118542328476906,0.98535543680191,-0.141722351312637,-0.25363889336586,0.956860542297363,-0.253998309373856,-0.212244898080826,0.943629682064056,0.140111669898033,0.0783234462141991,0.987033009529114,-0.253998309373856,-0.212244898080826,0.943629682064056,-0.228407248854637,-0.205970659852028,0.951528370380402,0.185034364461899,0.0477372668683529,0.981571912765503,0.140111669898033,0.0783234462141991,0.987033009529114,-0.228407248854637,-0.205970659852028,0.951528370380402,-0.150304853916168,-0.209269061684608,0.966237485408783,0.275597482919693,0.0508149787783623,0.95992910861969,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623,0.95992910861969,-0.150304853916168,-0.209269061684608,0.966237485408783,0.0832947567105293,-0.342013299465179,0.935996174812317,0.527580142021179,-0.0869907140731812,0.845039546489716,0.000295055127935484,0.143534883856773,0.98964524269104,0.000238662076299079,-0.279259294271469,0.96021568775177,-0.141722351312637,-0.25363889336586,0.956860542297363,0.122565753757954,0.118542328476906,0.98535543680191,0.859511733055115,-0.505731165409088,0.0739971473813057,0.819233179092407,-0.572073757648468,-0.0398566573858261, 0.977083265781403,-0.21279039978981,-0.00533624598756433,0.984757125377655,-0.122858062386513,0.123123273253441,-0.0074951434507966,-0.537373244762421,-0.843311250209808,-0.0494538806378841,-0.556213021278381,-0.829566955566406,0.0646723359823227,-0.342740118503571,-0.937201499938965,0.216808795928955,-0.349548786878586,-0.911487579345703,0.672621726989746,-0.282224327325821,-0.684053659439087,0.375436156988144,-0.682113528251648,-0.627510011196136,0.0173844322562218,-0.524197161197662,-0.851419508457184,0.332537442445755,-0.288520336151123,-0.897872388362885,0.332537442445755,-0.288520336151123,-0.897872388362885,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0074951434507966,-0.537373244762421,-0.843311250209808,0.216808795928955,-0.349548786878586,-0.911487579345703,0.746676325798035,-0.643010795116425,-0.17032790184021,0.661977589130402,-0.708897471427917,-0.243413314223289,0.89782452583313,-0.295981734991074,-0.32604593038559,0.939977943897247,-0.283478707075119,-0.189950734376907,0.704553008079529,0.389835178852081,0.592987060546875,0.77562689781189,0.195846498012543,0.60003924369812,0.960910856723785,0.17212125658989,0.216851592063904,0.860680103302002,0.465308487415314,0.206682801246643,0.77562689781189,0.195846498012543,0.60003924369812,0.813431859016418,0.0690318197011948,0.577549338340759,0.980262100696564,0.00691105145961046,0.197581350803375,0.960910856723785,0.17212125658989,0.216851592063904,0.813431859016418,0.0690318197011948,0.577549338340759,0.80047994852066,-0.0622782073915005,0.596115171909332,0.929154098033905,-0.212225988507271,0.302708983421326,0.971711039543152,-0.0647541359066963,0.227122470736504,0.885917663574219,-0.280271381139755,0.369591504335403,0.747986078262329,-0.084919698536396,0.658259391784668,0.729275226593018,-0.11221731454134,0.674955487251282,0.879492223262787,-0.245268657803535,0.407844007015228,0.823973476886749,-0.140763908624649,0.548865377902985,0.610790312290192,-0.062268540263176,0.789340078830719,0.493080407381058,0.0869515836238861,0.865627586841583,0.709406793117523,0.0714843049645424,0.701164722442627, 0.747986078262329,-0.084919698536396,0.658259391784668,0.885917663574219,-0.280271381139755,0.369591504335403,0.929154098033905,-0.212225988507271,0.302708983421326,0.80047994852066,-0.0622782073915005,0.596115171909332,0.610790312290192,-0.062268540263176,0.789340078830719,0.823973476886749,-0.140763908624649,0.548865377902985,0.879492223262787,-0.245268657803535,0.407844007015228,0.729275226593018,-0.11221731454134,0.674955487251282,0.63835346698761,0.527818858623505,0.560278594493866,0.704553008079529,0.389835178852081,0.592987060546875,0.860680103302002,0.465308487415314,0.206682801246643,0.7801553606987,0.610978186130524,0.134399503469467,0.665781199932098,0.528658747673035,0.526550352573395,0.63835346698761,0.527818858623505,0.560278594493866,0.7801553606987,0.610978186130524,0.134399503469467,0.761567413806915,0.64221316576004,0.0870478227734566,0.895810067653656,0.254065722227097,-0.364657372236252,0.68595552444458,0.102393850684166,-0.720403015613556,0.960910856723785,0.17212125658989,0.216851592063904,0.980262100696564,0.00691105145961046,0.197581350803375,0.842455089092255,-0.136532187461853,-0.521179795265198,0.0516201481223106,0.961737930774689,-0.26906418800354,0.0456644557416439,0.4627845287323,-0.885293841362,0.585361659526825,0.51231449842453,-0.628399193286896,0.860680103302002,0.465308487415314,0.206682801246643,0.960910856723785,0.17212125658989,0.216851592063904,0.68595552444458,0.102393850684166,-0.720403015613556,0.810609877109528,0.241179883480072,-0.533613920211792,0.7801553606987,0.610978186130524,0.134399503469467,0.860680103302002,0.465308487415314,0.206682801246643,0.810609877109528,0.241179883480072,-0.533613920211792,0.745590567588806,0.664693832397461,0.047716099768877,0.761567413806915,0.64221316576004,0.0870478227734566,0.7801553606987,0.610978186130524,0.134399503469467,0.745590567588806,0.664693832397461,0.047716099768877,0.685486555099487,0.727433860301971,-0.0307916849851608,0.0745275393128395,0.431530833244324,0.899014353752136,0.550135016441345,0.461672753095627,0.695851802825928, 0.266888707876205,0.958940505981445,0.0959352776408196,0.0482074841856956,0.963629901409149,0.262856423854828,-0.0702482014894485,0.80213338136673,0.592998504638672,0.0319873727858067,0.984376490116119,0.173146665096283,0.185543641448021,0.976534903049469,0.10933043807745,0.386715173721313,0.754913926124573,0.529675722122192,0.266888707876205,0.958940505981445,0.0959352776408196,0.550135016441345,0.461672753095627,0.695851802825928,0.750702619552612,0.512931108474731,0.416349858045578,0.393054485321045,0.919416308403015,-0.0134849762544036,0.393054485321045,0.919416308403015,-0.0134849762544036,0.750702619552612,0.512931108474731,0.416349858045578,0.386715173721313,0.754913926124573,0.529675722122192,0.259856075048447,0.961204409599304,0.0925252288579941,-0.0619851760566235,-0.854239583015442,0.516171097755432,-0.115733034908772,-0.588226437568665,0.800372123718262,0.123612143099308,-0.593166947364807,0.795533180236816,0.112480655312538,-0.860872745513916,0.496231973171234,-0.112318813800812,0.902268052101135,0.416289359331131,0.0113279931247234,0.923928916454315,0.382396370172501,0.107348747551441,0.986339747905731,-0.124940805137157,0.0320413000881672,0.998972654342651,-0.0320465676486492,-0.158927887678146,0.672389388084412,0.722934603691101,-0.0713663622736931,0.679935038089752,0.729791164398193,0.0113279931247234,0.923928916454315,0.382396370172501,-0.112318813800812,0.902268052101135,0.416289359331131,0.141376316547394,0.226959496736526,0.963588178157806,-0.119005374610424,0.237747848033905,0.964009165763855,-0.106734469532967,0.405797332525253,0.907709360122681,0.037119422107935,0.39716312289238,0.916997075080872,-0.115733034908772,-0.588226437568665,0.800372123718262,-0.087286576628685,-0.801884651184082,0.591068506240845,0.159164875745773,-0.84468400478363,0.511053323745728,0.123612143099308,-0.593166947364807,0.795533180236816,-0.0289680454879999,-0.984227418899536,0.17452010512352,-0.0619851760566235,-0.854239583015442,0.516171097755432,0.112480655312538,-0.860872745513916,0.496231973171234,0.0904572755098343,-0.981297671794891,0.169918611645699, 0.037119422107935,0.39716312289238,0.916997075080872,-0.106734469532967,0.405797332525253,0.907709360122681,-0.0713663622736931,0.679935038089752,0.729791164398193,-0.158927887678146,0.672389388084412,0.722934603691101,0.155474439263344,0.00156243739183992,-0.987838685512543,0.19240340590477,0.354867070913315,-0.914904534816742,0.263788342475891,0.299328684806824,-0.916961312294006,0.235058307647705,0.00269885058514774,-0.971977531909943,0.0482074841856956,0.963629901409149,0.262856423854828,0.266888707876205,0.958940505981445,0.0959352776408196,-0.266191899776459,0.70389860868454,-0.658535182476044,-0.0404882803559303,0.532536089420319,-0.845438301563263,0.230260863900185,0.590617835521698,-0.773401916027069,0.220478102564812,0.225269511342049,-0.949022173881531,-0.0597109496593475,0.20538541674614,-0.976857900619507,-0.0387927554547787,0.555053651332855,-0.830909490585327,0.220478102564812,0.225269511342049,-0.949022173881531,0.181706041097641,0.450920969247818,-0.873872518539429,-0.0473092421889305,0.433387726545334,-0.899964928627014,-0.0597109496593475,0.20538541674614,-0.976857900619507,0.145952269434929,0.566527962684631,-0.811014175415039,0.162849396467209,0.526230156421661,-0.834602832794189,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0390528962016106,0.551643908023834,-0.833164989948273,0.162849396467209,0.526230156421661,-0.834602832794189,0.19240340590477,0.354867070913315,-0.914904534816742,-0.0513396598398685,0.366866230964661,-0.928855955600739,-0.0400200858712196,0.538817524909973,-0.841471374034882,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.155474439263344,0.00156243739183992,-0.987838685512543,0.0690941736102104,-0.258630573749542,-0.963502049446106,-0.055810023099184,-0.2584228515625,-0.964418411254883,-0.055810023099184,-0.2584228515625,-0.964418411254883,0.0690941736102104,-0.258630573749542,-0.963502049446106,0.0340255945920944,-0.412763565778732,-0.910202443599701,-0.020222021266818,-0.390664726495743,-0.920310854911804,-0.000145141151733696,-0.408616960048676,-0.912705957889557, 0.0458064116537571,-0.413144141435623,-0.909512877464294,0.0445788577198982,-0.252718240022659,-0.966512382030487,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,-8.87226342456415e-005,-0.255004823207855,-0.966939747333527,0.0445788577198982,-0.252718240022659,-0.966512382030487,-0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.000159720322699286,-0.320416629314423,-0.947276711463928,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0862562954425812,0.984675407409668,-0.151572123169899,0.0205553397536278,0.989267349243164,-0.144663617014885,0.0492917597293854,0.955946862697601,0.28937155008316,-0.318083673715591,0.947685122489929,-0.0267524290829897,-0.122356586158276,0.987737119197845,-0.0969751328229904,0.0492917597293854,0.955946862697601,0.28937155008316,0.0462776906788349,0.971960961818695,0.23054338991642,0.179319217801094,0.922120809555054,-0.342837929725647,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0557159669697285,0.916767716407776,0.395515710115433,0.00435609184205532,0.929633140563965,-0.368460655212402,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.0924276784062386,-0.684463918209076,-0.723164081573486,-0.000515560561325401,-0.726091146469116,-0.68759822845459,-0.0101916557177901,0.912391781806946,0.409191101789474,0.0270950496196747,0.974490761756897,0.222785964608192,0.0419506318867207,0.986220836639404,0.160026773810387,0.0557159669697285,0.916767716407776,0.395515710115433,-0.0473092421889305,0.433387726545334,-0.899964928627014,0.181706041097641,0.450920969247818,-0.873872518539429,0.145952269434929,0.566527962684631,-0.811014175415039,-0.0390528962016106,0.551643908023834,-0.833164989948273,-0.020222021266818,-0.390664726495743,-0.920310854911804,0.0340255945920944,-0.412763565778732,-0.910202443599701,0.0458064116537571,-0.413144141435623,-0.909512877464294,-0.000145141151733696,-0.408616960048676,-0.912705957889557,-0.000159720322699286,-0.320416629314423,-0.947276711463928, -0.00791200343519449,-0.3136927485466,-0.949491560459137,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.000357056385837495,-0.611226499080658,-0.791455626487732,-0.0513396598398685,0.366866230964661,-0.928855955600739,0.19240340590477,0.354867070913315,-0.914904534816742,0.155474439263344,0.00156243739183992,-0.987838685512543,-0.0672369971871376,-0.00775569351390004,-0.997706890106201,0.353190511465073,0.114995338022709,0.928457081317902,0.185034364461899,0.0477372668683529,0.981571912765503,0.275597482919693,0.0508149787783623,0.95992910861969,0.493080407381058,0.0869515836238861,0.865627586841583,0.307976216077805,-0.686480343341827,0.6587073802948,0.430274456739426,-0.536508023738861,0.725963473320007,0.0832947567105293,-0.342013299465179,0.935996174812317,-0.101489536464214,-0.459648072719574,0.882283091545105,0.230070114135742,-0.386967688798904,-0.89292985200882,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.493177682161331,0.0824330747127533,-0.866014182567596,0.303897142410278,-0.58835905790329,-0.749319791793823,-0.0341968536376953,-0.89968353509903,-0.43520113825798,0.0672344118356705,-0.90103155374527,-0.428510963916779,0.0589963421225548,-0.720462381839752,-0.690980017185211,-0.0373940095305443,-0.711677670478821,-0.701510190963745,-0.0297683943063021,-0.996251881122589,-0.0812156423926353,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0672344118356705,-0.90103155374527,-0.428510963916779,-0.0341968536376953,-0.89968353509903,-0.43520113825798,-0.0373940095305443,-0.711677670478821,-0.701510190963745,0.0589963421225548,-0.720462381839752,-0.690980017185211,0.0439913086593151,-0.675665616989136,-0.735894501209259,-0.0370400324463844,-0.668275535106659,-0.742991149425507,-0.0370400324463844,-0.668275535106659,-0.742991149425507,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.254503726959229,-0.798789858818054,-0.545126259326935,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.00493840174749494,0.00535354111343622,-0.999973475933075,-0.0351880826056004,-0.407869398593903,-0.912361979484558, 0.810609877109528,0.241179883480072,-0.533613920211792,0.68595552444458,0.102393850684166,-0.720403015613556,0.254503726959229,-0.798789858818054,-0.545126259326935,0.810609877109528,0.241179883480072,-0.533613920211792,-0.0351880826056004,-0.407869398593903,-0.912361979484558,-0.0372622646391392,-0.693815767765045,-0.719187915325165,0.0456644557416439,0.4627845287323,-0.885293841362,0.00493840174749494,0.00535354111343622,-0.999973475933075,0.68595552444458,0.102393850684166,-0.720403015613556,0.895810067653656,0.254065722227097,-0.364657372236252,-0.0297683943063021,-0.996251881122589,-0.0812156423926353,-0.0289680454879999,-0.984227418899536,0.17452010512352,0.0904572755098343,-0.981297671794891,0.169918611645699,0.0816513150930405,-0.993346512317657,-0.0812143534421921,0.0516201481223106,0.961737930774689,-0.26906418800354,0.132751479744911,0.960573315620422,-0.244286626577377,0.141466349363327,0.962726950645447,-0.230529963970184,0.107348747551441,0.986339747905731,-0.124940805137157,0.437207967042923,0.465549558401108,0.76948869228363,0.135901644825935,0.703174889087677,0.697908222675323,0.961316466331482,0.243311077356339,0.129113554954529,0.996942400932312,0.0589848347008228,-0.051250733435154,0.961316466331482,0.243311077356339,0.129113554954529,0.613709151744843,-0.52058732509613,-0.593590676784515,0.464636594057083,-0.415377110242844,-0.782032430171967,0.996942400932312,0.0589848347008228,-0.051250733435154,0.837648034095764,0.514832735061646,-0.182463780045509,0.996942400932312,0.0589848347008228,-0.051250733435154,0.464636594057083,-0.415377110242844,-0.782032430171967,0.442993491888046,0.219760671257973,-0.869173228740692,-0.554342925548553,0.567035973072052,0.609240651130676,-0.52557498216629,0.553365111351013,0.646187245845795,-0.426482230424881,0.398722440004349,0.811870276927948,-0.233643680810928,0.587966680526733,-0.774406731128693,-0.484570324420929,0.164985567331314,-0.85905259847641,-0.197057366371155,0.623411595821381,-0.756654739379883,-0.134134471416473,0.255289256572723,0.957515180110931, 0.0454900041222572,0.2624471783638,0.963873505592346,0.0673762187361717,0.208747074007988,0.975646018981934,-0.937714636325836,-0.0839959159493446,0.337099254131317,-0.911626994609833,-0.102696627378464,0.397981941699982,-0.917683064937592,-0.215978980064392,0.333482950925827,-0.386307686567307,-0.301311910152435,-0.871766865253448,-0.268173515796661,-0.478363126516342,-0.836212694644928,-0.229701682925224,-0.369639068841934,-0.900335550308228,-0.509144961833954,0.274927198886871,0.815589666366577,-0.134134471416473,0.255289256572723,0.957515180110931,-0.384194701910019,0.144494697451591,0.911874830722809,-0.661458969116211,-0.196823701262474,-0.723693668842316,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.819226324558258,-0.572083711624146,-0.0398554801940918,-0.746677756309509,-0.64300948381424,-0.170326471328735,-0.632238566875458,-0.767571091651917,-0.105399325489998,-0.00847726315259933,-0.531524419784546,-0.847000539302826,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.582632660865784,0.528638899326324,-0.617316842079163,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.15230655670166,-0.395185917615891,-0.905886709690094,-0.192518308758736,-0.454994261264801,-0.869434833526611,-0.120519727468491,-0.475927352905273,-0.871187806129456,-0.426482230424881,0.398722440004349,0.811870276927948,-0.428126484155655,0.265849471092224,0.863731324672699,-0.338261693716049,0.297003328800201,0.892954647541046,-0.338261693716049,0.297003328800201,0.892954647541046,-0.428126484155655,0.265849471092224,0.863731324672699,-0.28684601187706,0.185986965894699,0.939749002456665,-0.887027978897095,0.338621288537979,0.313874155282974,-0.553295969963074,0.315833359956741,0.770787119865417,-0.877903461456299,0.125808238983154,0.462014973163605,0.203874498605728,0.632674932479858,0.747099459171295,0.502047836780548,0.814261257648468,0.291421681642532, 0.414917647838593,0.779010057449341,0.470092207193375,0.0901670306921005,0.507265865802765,0.8570596575737,0.251353085041046,0.650286138057709,0.716902732849121,0.203874498605728,0.632674932479858,0.747099459171295,0.203874498605728,0.632674932479858,0.747099459171295,0.251353085041046,0.650286138057709,0.716902732849121,0.502047836780548,0.814261257648468,0.291421681642532,-0.553295969963074,0.315833359956741,0.770787119865417,-0.426482230424881,0.398722440004349,0.811870276927948,-0.338261693716049,0.297003328800201,0.892954647541046,-0.509144961833954,0.274927198886871,0.815589666366577,-0.117755182087421,0.405977427959442,0.906264901161194,-0.134134471416473,0.255289256572723,0.957515180110931,-0.642698705196381,0.173675417900085,-0.746173679828644,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.665653705596924,0.333070456981659,-0.667809247970581,-0.474711626768112,0.621306002140045,-0.623400151729584,0.0345219671726227,0.469873160123825,0.882058680057526,-0.362813800573349,0.452378064393997,0.814690291881561,-0.0333014093339443,0.336885303258896,0.940956592559814,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.0402880981564522,-0.602410852909088,0.797168791294098,-0.708229780197144,0.558061540126801,-0.432409435510635,-0.529653549194336,0.324454098939896,-0.783707022666931,-0.875469923019409,0.442794948816299,-0.193610593676567,-0.21317532658577,0.371294349431992,0.903712749481201,-0.747875332832336,-0.0330392643809319,0.663016498088837,-0.347785919904709,0.133236810564995,0.928058683872223,-0.362813800573349,0.452378064393997,0.814690291881561,-0.598303258419037,0.575496375560761,0.557527720928192,-0.734153270721436,0.469748914241791,0.490260034799576,-0.141512751579285,-0.835205972194672,0.531418025493622,-0.676061987876892,-0.682281494140625,0.278266310691834,-0.621008992195129,-0.719995379447937,0.309765249490738,-0.210184469819069,0.149185121059418,-0.966212332248688, -0.498561441898346,0.123794674873352,-0.857969343662262,-0.644763290882111,0.0604433193802834,-0.761988759040833,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.210184469819069,0.149185121059418,-0.966212332248688,0.0630237460136414,0.258316248655319,-0.964002430438995,-0.0306792501360178,-0.0856858864426613,-0.995849788188934,-0.225950360298157,-0.351854801177979,-0.908374726772308,0.128099784255028,-0.105493560433388,-0.986134648323059,-0.550671279430389,-0.263566613197327,-0.79201877117157,-0.659405767917633,-0.515389144420624,-0.547318935394287,-0.864151895046234,-0.414072304964066,-0.285981833934784,-0.23223540186882,0.292309641838074,-0.927697062492371,-0.498561441898346,0.123794674873352,-0.857969343662262,-0.210184469819069,0.149185121059418,-0.966212332248688,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.326218724250793,0.625610828399658,-0.70865535736084,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.639488339424133,-0.334312081336975,-0.692307770252228,-0.656892538070679,-0.430070400238037,-0.619299292564392,-0.828345477581024,-0.291038513183594,-0.478686034679413,-0.18527527153492,-0.667633235454559,-0.721067905426025,-0.374457865953445,-0.757000803947449,-0.535472750663757,-0.716985046863556,-0.637030839920044,-0.283062189817429,-0.687154352664948,-0.340534240007401,0.6417595744133,-0.249380812048912,0.181461036205292,0.951252400875092,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.33330100774765,0.819487571716309,0.466208755970001,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.656458854675293,0.394298911094666,0.643109738826752,-0.249380812048912,0.181461036205292,0.951252400875092,-0.33330100774765,0.819487571716309,0.466208755970001,-0.874421000480652,0.028505390509963,-0.484329789876938,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.704255282878876,-0.136106103658676,0.696778059005737,-0.249380812048912,0.181461036205292,0.951252400875092, -0.656458854675293,0.394298911094666,0.643109738826752,-0.651998162269592,0.691909074783325,-0.31009703874588,-0.474711626768112,0.621306002140045,-0.623400151729584,-0.350932270288467,0.749857068061829,-0.56085729598999,-0.662446260452271,-0.708414137363434,-0.243545264005661,-0.36091136932373,-0.689484357833862,-0.627976357936859,-0.197025984525681,-0.816609442234039,-0.542521715164185,-0.00815227441489697,0.997119009494781,0.075413390994072,0.255933493375778,0.96283483505249,-0.0862965509295464,-0.106476634740829,0.986019790172577,0.128170698881149,-0.761694371700287,0.389483571052551,0.517807185649872,-0.887027978897095,0.338621288537979,0.313874155282974,-0.877903461456299,0.125808238983154,0.462014973163605,0.502047836780548,0.814261257648468,0.291421681642532,0.421662032604218,0.906709790229797,0.00885869562625885,0.414917647838593,0.779010057449341,0.470092207193375,0.502047836780548,0.814261257648468,0.291421681642532,0.325284242630005,0.933813154697418,0.148940086364746,0.421662032604218,0.906709790229797,0.00885869562625885,-0.0681053325533867,-0.345358580350876,-0.935996353626251,0.00452618766576052,-0.317399501800537,-0.948281109333038,0.0480021014809608,-0.559525310993195,-0.827422022819519,-0.554342925548553,0.567035973072052,0.609240651130676,-0.887027978897095,0.338621288537979,0.313874155282974,-0.684342086315155,0.70050323009491,0.202413260936737,-0.964910328388214,-0.00325190788134933,0.262559533119202,-0.786065578460693,0.0604399740695953,0.61518120765686,-0.95565664768219,0.128923356533051,0.264762312173843,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.874421000480652,0.028505390509963,-0.484329789876938,0.199702888727188,0.793615162372589,0.574711859226227,0.0534563846886158,0.983699679374695,0.171689838171005,0.325284242630005,0.933813154697418,0.148940086364746,-0.263717442750931,0.775425553321838,0.573731958866119,-0.182774692773819,0.975853502750397,0.119596734642982,-0.106476634740829,0.986019790172577,0.128170698881149, -0.452270448207855,-0.555824816226959,-0.697502851486206,-0.384585797786713,-0.351018995046616,-0.853744387626648,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.452270448207855,-0.555824816226959,-0.697502851486206,-0.631440281867981,-0.43637079000473,-0.640986502170563,-0.695569396018982,-0.386790245771408,-0.605455636978149,-0.0402880981564522,-0.602410852909088,0.797168791294098,0.183785125613213,-0.564789414405823,0.80450975894928,-0.141512751579285,-0.835205972194672,0.531418025493622,0.0345219671726227,0.469873160123825,0.882058680057526,0.246256619691849,0.328444272279739,0.911856353282928,0.0388557612895966,0.393748223781586,0.918396770954132,-0.527523517608643,-0.0868940651416779,0.845084846019745,-0.430081337690353,-0.536487519741058,0.726093113422394,-0.0830294638872147,-0.341880321502686,0.93606835603714,-0.560725450515747,0.635622680187225,-0.530632436275482,-0.854032337665558,0.444255322217941,-0.270676791667938,-0.0824920982122421,0.586886823177338,-0.805455684661865,-0.140676811337471,0.965593755245209,-0.218720734119415,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.249380812048912,0.181461036205292,0.951252400875092,-0.938912212848663,-0.107537157833576,0.326924532651901,-0.0534899868071079,0.977624833583832,-0.203441679477692,-0.0175000000745058,0.99979567527771,0.010117226280272,-0.141158223152161,0.972466349601746,-0.185427963733673,-0.0638052001595497,0.994221389293671,-0.086329497396946,-0.0801405981183052,0.901194870471954,0.425940543413162,-0.249380812048912,0.181461036205292,0.951252400875092,-0.0534899868071079,0.977624833583832,-0.203441679477692,0.665781199932098,0.528658747673035,0.526550352573395,0.545623481273651,0.394130259752274,0.739564955234528,0.63835346698761,0.527818858623505,0.560278594493866,0.163574278354645,0.575437486171722,-0.801320910453796,0.132010728120804,0.613032221794128,-0.778950989246368,0.37424498796463,0.138061463832855,-0.91699492931366,0.253994464874268,0.250187575817108,0.934287428855896, 0.0673762187361717,0.208747074007988,0.975646018981934,0.0454900041222572,0.2624471783638,0.963873505592346,0.938150525093079,-0.0836314186453819,0.335975229740143,0.918301284313202,-0.218417331576347,0.330176681280136,0.91181892156601,-0.103688038885593,0.397284656763077,0.385590463876724,-0.303107500076294,-0.871461868286133,0.228939339518547,-0.370276868343353,-0.900267601013184,0.267562568187714,-0.479633033275604,-0.835680842399597,0.63226306438446,0.224956437945366,0.741375803947449,0.510494410991669,0.103201098740101,0.853665590286255,0.253994464874268,0.250187575817108,0.934287428855896,0.482518672943115,-0.357222050428391,-0.799730002880096,0.765287220478058,-0.345726698637009,-0.542962729930878,0.583753287792206,-0.402651727199554,-0.705055773258209,0.819233179092407,-0.572073757648468,-0.0398566573858261,0.6322380900383,-0.767571449279785,-0.10539997369051,0.746676325798035,-0.643010795116425,-0.17032790184021,0.0173844322562218,-0.524197161197662,-0.851419508457184,-0.0854567661881447,-0.590025365352631,-0.802849411964417,-0.0738197043538094,-0.58150452375412,-0.810187101364136,0.526131212711334,0.493667006492615,-0.692444086074829,0.509015023708344,-0.485809624195099,-0.71055805683136,0.578356921672821,-0.429673582315445,-0.693457901477814,0.140872359275818,-0.399173051118851,-0.905988872051239,0.113550499081612,-0.486260622739792,-0.866404592990875,0.174190670251846,-0.475461959838867,-0.862318694591522,0.545623481273651,0.394130259752274,0.739564955234528,0.448167592287064,0.331256568431854,0.830310106277466,0.512751221656799,0.314961016178131,0.798677444458008,0.448167592287064,0.331256568431854,0.830310106277466,0.352489024400711,0.249785035848618,0.901864171028137,0.512751221656799,0.314961016178131,0.798677444458008,0.947060525417328,0.264708548784256,0.181674882769585,0.938301980495453,0.0685238614678383,0.338959902524948,0.671115279197693,0.284787148237228,0.684471070766449,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.298087060451508,0.801499605178833,0.518403768539429,-0.406122446060181,0.842904448509216,0.352954238653183, 0.0572854578495026,0.523676514625549,0.849988996982574,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.111158438026905,0.66179496049881,0.74139815568924,-0.0615167804062366,0.641514480113983,0.764640331268311,-0.406122446060181,0.842904448509216,0.352954238653183,-0.111158438026905,0.66179496049881,0.74139815568924,0.671115279197693,0.284787148237228,0.684471070766449,0.448167592287064,0.331256568431854,0.830310106277466,0.545623481273651,0.394130259752274,0.739564955234528,0.63226306438446,0.224956437945366,0.741375803947449,0.253994464874268,0.250187575817108,0.934287428855896,0.257902681827545,0.417416572570801,0.871349334716797,0.493177682161331,0.0824330747127533,-0.866014182567596,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.418020725250244,-0.127127349376678,-0.899498343467712,0.646372437477112,0.650956153869629,-0.398068875074387,0.424405604600906,0.592946588993073,-0.684320271015167,0.589160740375519,0.293493062257767,-0.75282895565033,0.141376316547394,0.226959496736526,0.963588178157806,0.037119422107935,0.39716312289238,0.916997075080872,0.338892996311188,0.40640527009964,0.84852010011673,0.159164875745773,-0.84468400478363,0.511053323745728,0.114696279168129,-0.973567485809326,0.19751238822937,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.652710020542145,0.543907403945923,-0.527384459972382,0.837648034095764,0.514832735061646,-0.182463780045509,0.442993491888046,0.219760671257973,-0.869173228740692,0.368975192308426,0.372379690408707,0.851581275463104,0.4433753490448,0.161547407507896,0.881657958030701,0.812437415122986,-0.0575567446649075,0.580200552940369,0.338892996311188,0.40640527009964,0.84852010011673,0.554449737071991,0.577977955341339,0.598771214485168,0.737872421741486,0.632259011268616,0.236204952001572,0.159164875745773,-0.84468400478363,0.511053323745728,0.579905271530151,-0.813046872615814,-0.0516200996935368,0.663097739219666,-0.724811255931854,0.186949267983437,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.418020725250244,-0.127127349376678,-0.899498343467712, 0.30552539229393,-0.0599766410887241,-0.950293123722076,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.248638898134232,0.048121701925993,-0.967400133609772,-0.027174474671483,-0.150700747966766,-0.988205909729004,-0.103349760174751,-0.10200422257185,-0.989400804042816,-0.263506501913071,-0.108145013451576,-0.958576560020447,0.0839502513408661,-0.381248086690903,-0.920653164386749,0.421276032924652,-0.302525490522385,-0.854988157749176,0.789066255092621,-0.467570185661316,-0.398437708616257,0.54582554101944,-0.560542941093445,-0.622788965702057,0.0589214377105236,0.108213946223259,-0.99237996339798,-0.027174474671483,-0.150700747966766,-0.988205909729004,0.30552539229393,-0.0599766410887241,-0.950293123722076,0.424405604600906,0.592946588993073,-0.684320271015167,0.318493723869324,0.728740870952606,-0.606216490268707,0.266342312097549,0.6069176197052,-0.748807609081268,0.583753287792206,-0.402651727199554,-0.705055773258209,0.765287220478058,-0.345726698637009,-0.542962729930878,0.623417019844055,-0.452671766281128,-0.637526035308838,0.0439913086593151,-0.675665616989136,-0.735894501209259,0.647948265075684,-0.685174643993378,-0.332714289426804,0.254503726959229,-0.798789858818054,-0.545126259326935,0.654802083969116,-0.347440212965012,0.67120748758316,0.685809075832367,-0.12582391500473,0.716822326183319,0.164040550589561,0.209489807486534,0.963952660560608,0.201858729124069,0.87289696931839,0.444189012050629,-0.00299930199980736,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.618469655513763,0.424896746873856,0.661028027534485,0.201858729124069,0.87289696931839,0.444189012050629,0.164040550589561,0.209489807486534,0.963952660560608,0.842455089092255,-0.136532187461853,-0.521179795265198,0.92408949136734,-0.175655707716942,0.339416593313217,0.0516201481223106,0.961737930774689,-0.26906418800354,0.685809075832367,-0.12582391500473,0.716822326183319,0.618469655513763,0.424896746873856,0.661028027534485,0.164040550589561,0.209489807486534,0.963952660560608,0.646372437477112,0.650956153869629,-0.398068875074387, 0.318493723869324,0.728740870952606,-0.606216490268707,0.424405604600906,0.592946588993073,-0.684320271015167,0.661977589130402,-0.708897471427917,-0.243413314223289,0.29490727186203,-0.85530948638916,-0.425999224185944,0.375436156988144,-0.682113528251648,-0.627510011196136,0.685486555099487,0.727433860301971,-0.0307916849851608,0.745590567588806,0.664693832397461,0.047716099768877,0.554396212100983,0.801354885101318,0.224666863679886,0.0825407654047012,0.994074046611786,0.0707375407218933,0.185543641448021,0.976534903049469,0.10933043807745,-0.20431387424469,0.977353155612946,-0.0551062189042568,0.858800172805786,0.271537780761719,0.434430092573166,0.938301980495453,0.0685238614678383,0.338959902524948,0.947060525417328,0.264708548784256,0.181674882769585,-0.406122446060181,0.842904448509216,0.352954238653183,-0.298087060451508,0.801499605178833,0.518403768539429,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.406122446060181,0.842904448509216,0.352954238653183,-0.358905464410782,0.931329369544983,0.0617449507117271,-0.243022814393044,0.95173841714859,0.187440201640129,0.0646723359823227,-0.342740118503571,-0.937201499938965,-0.0494538806378841,-0.556213021278381,-0.829566955566406,-0.00791200343519449,-0.3136927485466,-0.949491560459137,0.665781199932098,0.528658747673035,0.526550352573395,0.761567413806915,0.64221316576004,0.0870478227734566,0.947060525417328,0.264708548784256,0.181674882769585,0.971711039543152,-0.0647541359066963,0.227122470736504,0.980262100696564,0.00691105145961046,0.197581350803375,0.813431859016418,0.0690318197011948,0.577549338340759,0.895810067653656,0.254065722227097,-0.364657372236252,0.842455089092255,-0.136532187461853,-0.521179795265198,0.585361659526825,0.51231449842453,-0.628399193286896,-0.0702482014894485,0.80213338136673,0.592998504638672,-0.243022814393044,0.95173841714859,0.187440201640129,0.0319873727858067,0.984376490116119,0.173146665096283,0.386715173721313,0.754913926124573,0.529675722122192,0.185543641448021,0.976534903049469,0.10933043807745,0.259856075048447,0.961204409599304,0.0925252288579941, 0.303897142410278,-0.58835905790329,-0.749319791793823,0.509015023708344,-0.485809624195099,-0.71055805683136,0.230070114135742,-0.386967688798904,-0.89292985200882,0.303897142410278,-0.58835905790329,-0.749319791793823,0.578356921672821,-0.429673582315445,-0.693457901477814,0.509015023708344,-0.485809624195099,-0.71055805683136,0.114696279168129,-0.973567485809326,0.19751238822937,0.159164875745773,-0.84468400478363,0.511053323745728,-0.087286576628685,-0.801884651184082,0.591068506240845,0.527580142021179,-0.0869907140731812,0.845039546489716,0.0832947567105293,-0.342013299465179,0.935996174812317,0.430274456739426,-0.536508023738861,0.725963473320007,0.585361659526825,0.51231449842453,-0.628399193286896,0.0456644557416439,0.4627845287323,-0.885293841362,0.895810067653656,0.254065722227097,-0.364657372236252,0.132751479744911,0.960573315620422,-0.244286626577377,0.0516201481223106,0.961737930774689,-0.26906418800354,-0.00299930199980736,0.929396331310272,0.36907109618187,0.164040550589561,0.209489807486534,0.963952660560608,0.0516201481223106,0.961737930774689,-0.26906418800354,0.92408949136734,-0.175655707716942,0.339416593313217,0.0320413000881672,0.998972654342651,-0.0320465676486492,0.107348747551441,0.986339747905731,-0.124940805137157,0.141466349363327,0.962726950645447,-0.230529963970184,-0.00299930199980736,0.929396331310272,0.36907109618187,0.0516201481223106,0.961737930774689,-0.26906418800354,0.164040550589561,0.209489807486534,0.963952660560608,-0.278887689113617,0.155069842934608,0.947720944881439,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.613169372081757,0.156963154673576,0.774200141429901,-0.564494132995605,0.336166679859161,0.753882169723511,-0.641344308853149,0.404579341411591,0.651914894580841,-0.636052131652832,0.114426992833614,0.763114809989929,-0.750942230224609,-0.362746059894562,0.551816165447235,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.630502700805664,-0.217548668384552,0.745076417922974, -0.651766121387482,-0.189316362142563,0.734411418437958,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.818475067615509,-0.0781779363751411,0.569198310375214,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.343512952327728,0.508661150932312,0.789469838142395,0.00251755584031343,0.621276617050171,0.783587276935577,-0.000752673309762031,0.723128914833069,0.690712690353394,-0.387391060590744,0.579724550247192,0.716831684112549,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.617133378982544,0.414651036262512,0.668738305568695,-0.642749607563019,0.417651236057281,0.642215192317963,-0.555378377437592,0.35284760594368,0.753029525279999,-0.642749607563019,0.417651236057281,0.642215192317963,-0.641344308853149,0.404579341411591,0.651914894580841,-0.564494132995605,0.336166679859161,0.753882169723511,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.237974777817726,0.331118106842041,0.913087487220764,-0.273963540792465,0.203753486275673,0.939908742904663,0.00488811917603016,0.0790495574474335,0.996858716011047,0.00906203780323267,0.313269138336182,0.949621140956879,-0.617133378982544,0.414651036262512,0.668738305568695,-0.531420171260834,0.370124280452728,0.761971533298492,-0.343512952327728,0.508661150932312,0.789469838142395,-0.387391060590744,0.579724550247192,0.716831684112549,-0.273963540792465,0.203753486275673,0.939908742904663,-0.278887689113617,0.155069842934608,0.947720944881439,-0.00995929818600416,0.0271856393665075,0.999580800533295,0.00488811917603016,0.0790495574474335,0.996858716011047,0.230391070246696,-0.334940761327744,0.913638114929199,-0.308693647384644,-0.0323835387825966,0.950610101222992,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.1506307721138,-0.438284873962402,0.886124551296234, 0.0855588167905808,-0.00326380506157875,0.996327757835388,0.270083338022232,0.0848804861307144,0.959088265895844,0.283566653728485,0.161925837397575,0.945182502269745,0.083267405629158,0.0343488194048405,0.995935082435608,0.634447515010834,0.382206737995148,0.671858906745911,0.563284993171692,0.310863167047501,0.765554785728455,0.58095771074295,0.129276961088181,0.803601682186127,0.640639364719391,0.166238233447075,0.749630630016327,0.756035923957825,-0.331106662750244,0.56460428237915,0.663084924221039,-0.243456080555916,0.707847118377686,0.597107112407684,-0.194828405976295,0.778142035007477,0.672916948795319,-0.2681784927845,0.689393281936646,0.865743160247803,-0.106940761208534,0.488929957151413,0.758550822734833,-0.0895375981926918,0.645432889461517,0.763749420642853,-0.150436565279961,0.627738535404205,0.980335772037506,-0.188939213752747,-0.056953851133585,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.352704226970673,-0.858029365539551,-0.373343408107758,0.396026074886322,-0.763220906257629,0.510545969009399,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.000752673309762031,0.723128914833069,0.690712690353394,0.00251755584031343,0.621276617050171,0.783587276935577,0.349495083093643,0.501587808132172,0.791367709636688,0.386756360530853,0.580943465232849,0.716187238693237,0.55474841594696,0.352636069059372,0.753592729568481,0.642712593078613,0.417624264955521,0.642269790172577,0.6171053647995,0.41465026140213,0.668764650821686,0.533473014831543,0.369999885559082,0.760596215724945,0.634447515010834,0.382206737995148,0.671858906745911,0.642712593078613,0.417624264955521,0.642269790172577,0.55474841594696,0.352636069059372,0.753592729568481,0.563284993171692,0.310863167047501,0.765554785728455,0.269184499979019,-0.069842740893364,0.96055281162262,0.270083338022232,0.0848804861307144,0.959088265895844,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.095149926841259,-0.00452130474150181,0.995452702045441,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757, -0.186641603708267,-0.111381784081459,0.976093769073486,-0.323701471090317,-0.00802869722247124,0.946125209331512,0.205443143844604,0.26053661108017,0.943352401256561,0.00906203780323267,0.313269138336182,0.949621140956879,0.00488811917603016,0.0790495574474335,0.996858716011047,0.0908891633152962,0.0803348198533058,0.992615461349487,0.349495083093643,0.501587808132172,0.791367709636688,0.533473014831543,0.369999885559082,0.760596215724945,0.6171053647995,0.41465026140213,0.668764650821686,0.386756360530853,0.580943465232849,0.716187238693237,0.0908891633152962,0.0803348198533058,0.992615461349487,0.00488811917603016,0.0790495574474335,0.996858716011047,-0.00995929818600416,0.0271856393665075,0.999580800533295,0.083267405629158,0.0343488194048405,0.995935082435608,0.681668698787689,-0.471610575914383,-0.559384763240814,0.980335772037506,-0.188939213752747,-0.056953851133585,0.763749420642853,-0.150436565279961,0.627738535404205,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401,0.858965337276459,0.34773051738739,-0.0993074625730515,0.932320535182953,-0.20400233566761,0.056657962501049,0.97732949256897,0.231048971414566,-0.393600910902023,0.889772295951843,0.663369238376617,-0.460236370563507,0.590020060539246,0.396026074886322,-0.763220906257629,0.510545969009399,0.352704226970673,-0.858029365539551,-0.373343408107758,0.681668698787689,-0.471610575914383,-0.559384763240814,-0.186641603708267,-0.111381784081459,0.976093769073486,0.269184499979019,-0.069842740893364,0.96055281162262,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.132798001170158,0.175962328910828,0.975398361682892,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.757822096347809,-0.00610118778422475,0.652432680130005, -0.96750271320343,-0.192122116684914,0.164400920271873,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.385932207107544,-0.757268369197845,-0.526878535747528,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.398337602615356,0.261720597743988,0.879107236862183,-0.312857300043106,-0.0701114386320114,0.947208881378174,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.494366526603699,-0.309805452823639,0.812171339988709,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.398337602615356,0.261720597743988,0.879107236862183,-0.664829790592194,0.592853784561157,0.454451024532318,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.398337602615356,0.261720597743988,0.879107236862183,-0.545051276683807,-0.206261366605759,0.812634825706482,0.462544351816177,-0.573750495910645,0.675916492938995,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.373196601867676,-0.775050580501556,0.509922385215759,0.462544351816177,-0.573750495910645,0.675916492938995,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.789819777011871,-0.316357046365738,0.525454998016357,0.373196601867676,-0.775050580501556,0.509922385215759,0.692745566368103,-0.565952122211456,0.446991920471191,0.828352034091949,-0.389868885278702,0.402287393808365,0.462544351816177,-0.573750495910645,0.675916492938995,0.462544351816177,-0.573750495910645,0.675916492938995,0.243750929832459,-0.884264886379242,0.398322850465775,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.213104128837585,-0.584437012672424,0.782955944538116, -0.398337602615356,0.261720597743988,0.879107236862183,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.889869391918182,0.231929391622543,0.39286282658577,-0.664829790592194,0.592853784561157,0.454451024532318,-0.398337602615356,0.261720597743988,0.879107236862183,-0.49268251657486,0.733969807624817,0.467495709657669,-0.434220999479294,0.787271618843079,0.437784820795059,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.664829790592194,0.592853784561157,0.454451024532318,-0.824626564979553,0.277553707361221,0.492904603481293,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.627400159835815,-0.604899108409882,0.490373462438583,0.0565900318324566,-0.86772346496582,0.493815332651138,0.373196601867676,-0.775050580501556,0.509922385215759,0.0855588167905808,-0.00326380506157875,0.996327757835388,0.083267405629158,0.0343488194048405,0.995935082435608,-0.00995929818600416,0.0271856393665075,0.999580800533295,-0.0194659624248743,-0.00312843942083418,0.999805629253387,0.095149926841259,-0.00452130474150181,0.995452702045441,0.0855588167905808,-0.00326380506157875,0.996327757835388,-0.0194659624248743,-0.00312843942083418,0.999805629253387,-0.041683241724968,-0.0278020035475492,0.998744010925293,0.264413386583328,0.205984830856323,0.942154884338379,0.0908891633152962,0.0803348198533058,0.992615461349487,0.083267405629158,0.0343488194048405,0.995935082435608,0.283566653728485,0.161925837397575,0.945182502269745,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.132798001170158,0.175962328910828,0.975398361682892, -0.0486040636897087,-0.42794406414032,0.902497410774231,0.231048971414566,-0.393600910902023,0.889772295951843,-0.20400233566761,0.056657962501049,0.97732949256897,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.054779440164566,-0.293895661830902,0.954266488552094,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243585184216499,-0.228214547038078,0.942647516727448,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.758550822734833,-0.0895375981926918,0.645432889461517,0.672916948795319,-0.2681784927845,0.689393281936646,0.269184499979019,-0.069842740893364,0.96055281162262,0.403341591358185,-0.0460353009402752,0.913890719413757,0.662317752838135,-0.689115524291992,0.294032365083694,0.828352034091949,-0.389868885278702,0.402287393808365,0.230391070246696,-0.334940761327744,0.913638114929199,0.243750929832459,-0.884264886379242,0.398322850465775,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.25699707865715,0.0964793935418129,0.961584210395813, -0.564494132995605,0.336166679859161,0.753882169723511,-0.613169372081757,0.156963154673576,0.774200141429901,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.237974777817726,0.331118106842041,0.913087487220764,0.00906203780323267,0.313269138336182,0.949621140956879,0.00251755584031343,0.621276617050171,0.783587276935577,-0.343512952327728,0.508661150932312,0.789469838142395,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.278887689113617,0.155069842934608,0.947720944881439,-0.555378377437592,0.35284760594368,0.753029525279999,-0.564494132995605,0.336166679859161,0.753882169723511,-0.278887689113617,0.155069842934608,0.947720944881439,-0.273963540792465,0.203753486275673,0.939908742904663,-0.531420171260834,0.370124280452728,0.761971533298492,-0.555378377437592,0.35284760594368,0.753029525279999,-0.531420171260834,0.370124280452728,0.761971533298492,-0.273963540792465,0.203753486275673,0.939908742904663,-0.237974777817726,0.331118106842041,0.913087487220764,-0.343512952327728,0.508661150932312,0.789469838142395,0.563284993171692,0.310863167047501,0.765554785728455,0.270083338022232,0.0848804861307144,0.959088265895844,0.428336501121521,-0.0297424420714378,0.903129696846008,0.58095771074295,0.129276961088181,0.803601682186127,0.428336501121521,-0.0297424420714378,0.903129696846008,0.269184499979019,-0.069842740893364,0.96055281162262,0.672916948795319,-0.2681784927845,0.689393281936646,0.597107112407684,-0.194828405976295,0.778142035007477,0.00251755584031343,0.621276617050171,0.783587276935577,0.00906203780323267,0.313269138336182,0.949621140956879,0.205443143844604,0.26053661108017,0.943352401256561,0.349495083093643,0.501587808132172,0.791367709636688,0.55474841594696,0.352636069059372,0.753592729568481,0.283566653728485,0.161925837397575,0.945182502269745,0.270083338022232,0.0848804861307144,0.959088265895844,0.563284993171692,0.310863167047501,0.765554785728455, 0.34773051738739,-0.0993074625730515,0.932320535182953,0.422998309135437,-0.288532286882401,0.858965337276459,0.663369238376617,-0.460236370563507,0.590020060539246,0.763749420642853,-0.150436565279961,0.627738535404205,0.396026074886322,-0.763220906257629,0.510545969009399,0.663369238376617,-0.460236370563507,0.590020060539246,0.422998309135437,-0.288532286882401,0.858965337276459,0.231048971414566,-0.393600910902023,0.889772295951843,0.533473014831543,0.369999885559082,0.760596215724945,0.264413386583328,0.205984830856323,0.942154884338379,0.283566653728485,0.161925837397575,0.945182502269745,0.55474841594696,0.352636069059372,0.753592729568481,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.824626564979553,0.277553707361221,0.492904603481293,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.186641603708267,-0.111381784081459,0.976093769073486,0.205443143844604,0.26053661108017,0.943352401256561,0.264413386583328,0.205984830856323,0.942154884338379,0.533473014831543,0.369999885559082,0.760596215724945,0.349495083093643,0.501587808132172,0.791367709636688,-0.434220999479294,0.787271618843079,0.437784820795059,-0.49268251657486,0.733969807624817,0.467495709657669,-0.307226657867432,0.378487527370453,0.873131692409515,-0.132798001170158,0.175962328910828,0.975398361682892,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.552981913089752,0.0302376579493284,0.832644402980804,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.054779440164566,-0.293895661830902,0.954266488552094,0.828352034091949,-0.389868885278702,0.402287393808365,0.692745566368103,-0.565952122211456,0.446991920471191,0.243585184216499,-0.228214547038078,0.942647516727448,0.230391070246696,-0.334940761327744,0.913638114929199,0.403341591358185,-0.0460353009402752,0.913890719413757,0.34773051738739,-0.0993074625730515,0.932320535182953, 0.763749420642853,-0.150436565279961,0.627738535404205,0.758550822734833,-0.0895375981926918,0.645432889461517,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.889869391918182,0.231929391622543,0.39286282658577,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.243750929832459,-0.884264886379242,0.398322850465775,0.230391070246696,-0.334940761327744,0.913638114929199,-0.1506307721138,-0.438284873962402,0.886124551296234,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.403701454401016,-0.278951406478882,0.87132728099823,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.170626193284988,-0.221982836723328,0.960005402565002,0.231048971414566,-0.393600910902023,0.889772295951843,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.225288927555084,-0.849879503250122,0.476392418146133,0.396026074886322,-0.763220906257629,0.510545969009399,-0.054779440164566,-0.293895661830902,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,0.692745566368103,-0.565952122211456,0.446991920471191,0.0565900318324566,-0.86772346496582,0.493815332651138,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.170626193284988,-0.221982836723328,0.960005402565002,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.307226657867432,0.378487527370453,0.873131692409515,-0.49268251657486,0.733969807624817,0.467495709657669,-0.889869391918182,0.231929391622543,0.39286282658577, -0.434367448091507,0.0498845726251602,0.899353325366974,-0.841920852661133,-0.371541500091553,0.391313314437866,-0.225288927555084,-0.849879503250122,0.476392418146133,-0.0486040636897087,-0.42794406414032,0.902497410774231,-0.483883440494537,-0.269137471914291,0.832719504833221,-0.434220999479294,0.787271618843079,0.437784820795059,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20400233566761,0.056657962501049,0.97732949256897,-0.824626564979553,0.277553707361221,0.492904603481293,-0.363826632499695,-0.186291873455048,0.912647545337677,-0.672568202018738,-0.34249159693718,0.656011819839478,-0.241606667637825,-0.822853565216064,0.514332830905914,-0.1506307721138,-0.438284873962402,0.886124551296234,0.095149926841259,-0.00452130474150181,0.995452702045441,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.613169372081757,0.156963154673576,0.774200141429901,-0.636052131652832,0.114426992833614,0.763114809989929,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.630502700805664,-0.217548668384552,0.745076417922974,-0.749688327312469,-0.105248801410198,0.653368294239044,-0.664681375026703,-0.304605394601822,0.682212769985199,-0.750942230224609,-0.362746059894562,0.551816165447235,-0.818475067615509,-0.0781779363751411,0.569198310375214,0.640639364719391,0.166238233447075,0.749630630016327,0.58095771074295,0.129276961088181,0.803601682186127,0.597107112407684,-0.194828405976295,0.778142035007477,0.663084924221039,-0.243456080555916,0.707847118377686,0.756035923957825,-0.331106662750244,0.56460428237915,0.672916948795319,-0.2681784927845,0.689393281936646,0.758550822734833,-0.0895375981926918,0.645432889461517,0.865743160247803,-0.106940761208534,0.488929957151413,-0.398337602615356,0.261720597743988,0.879107236862183,-0.227696925401688,-0.449939787387848,0.863544046878815,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.586991429328918,-0.31607523560524,0.745343863964081, -0.000114999507786706,0.00247487379238009,-0.999996960163116,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.000114999507786706,0.00247487379238009,-0.999996960163116,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.352704226970673,-0.858029365539551,-0.373343408107758,0.0383354164659977,-0.957559168338776,-0.285676121711731,-0.636052131652832,0.114426992833614,0.763114809989929,-0.504159510135651,-0.0417646616697311,0.862600088119507,-0.651766121387482,-0.189316362142563,0.734411418437958,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.25699707865715,0.0964793935418129,0.961584210395813,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.261586844921112,-0.0964996665716171,0.960343718528748,-0.054779440164566,-0.293895661830902,0.954266488552094,0.243585184216499,-0.228214547038078,0.942647516727448,-0.308693647384644,-0.0323835387825966,0.950610101222992,0.230391070246696,-0.334940761327744,0.913638114929199,0.428336501121521,-0.0297424420714378,0.903129696846008,0.270083338022232,0.0848804861307144,0.959088265895844,0.269184499979019,-0.069842740893364,0.96055281162262,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.20400233566761,0.056657962501049,0.97732949256897,0.34773051738739,-0.0993074625730515,0.932320535182953,0.403341591358185,-0.0460353009402752,0.913890719413757,0.269184499979019,-0.069842740893364,0.96055281162262,-0.186641603708267,-0.111381784081459,0.976093769073486,-0.307226657867432,0.378487527370453,0.873131692409515,-0.434367448091507,0.0498845726251602,0.899353325366974,-0.132798001170158,0.175962328910828,0.975398361682892,-0.20392233133316,-0.215887486934662,0.954886496067047,-0.041683241724968,-0.0278020035475492,0.998744010925293,-0.054779440164566,-0.293895661830902,0.954266488552094,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.697269201278687,-0.168340444564819,0.696761846542358, -0.312857300043106,-0.0701114386320114,0.947208881378174,0.0908891633152962,0.0803348198533058,0.992615461349487,0.264413386583328,0.205984830856323,0.942154884338379,0.205443143844604,0.26053661108017,0.943352401256561,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.294902235269547,-0.00327466218732297,0.955521821975708,-0.170626193284988,-0.221982836723328,0.960005402565002,0.0906060114502907,0.000123244855785742,0.99588680267334,0.269184499979019,-0.069842740893364,0.96055281162262,0.095149926841259,-0.00452130474150181,0.995452702045441,-0.0552290044724941,-0.859539985656738,0.508075475692749,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.352704226970673,-0.858029365539551,-0.373343408107758,-0.818475067615509,-0.0781779363751411,0.569198310375214,-0.757822096347809,-0.00610118778422475,0.652432680130005,-0.697269201278687,-0.168340444564819,0.696761846542358,-0.294902235269547,-0.00327466218732297,0.955521821975708,0.0906060114502907,0.000123244855785742,0.99588680267334,-0.20392233133316,-0.215887486934662,0.954886496067047,0.0565900318324566,-0.86772346496582,0.493815332651138,0.692745566368103,-0.565952122211456,0.446991920471191,0.373196601867676,-0.775050580501556,0.509922385215759,-0.889869391918182,0.231929391622543,0.39286282658577,-0.49268251657486,0.733969807624817,0.467495709657669,-0.398337602615356,0.261720597743988,0.879107236862183,-0.434220999479294,0.787271618843079,0.437784820795059,-0.824626564979553,0.277553707361221,0.492904603481293,-0.664829790592194,0.592853784561157,0.454451024532318,-0.89117294549942,0.00654474506154656,0.453616559505463,-0.627400159835815,-0.604899108409882,0.490373462438583,-0.789819777011871,-0.316357046365738,0.525454998016357,-0.867058575153351,-0.260521769523621,0.424662053585052,-0.624233663082123,-0.653565049171448,0.428001224994659,-0.775861084461212,-0.47871196269989,0.410943329334259,-0.323701471090317,-0.00802869722247124,0.946125209331512,-0.824626564979553,0.277553707361221,0.492904603481293,-0.20400233566761,0.056657962501049,0.97732949256897, 0.462544351816177,-0.573750495910645,0.675916492938995,0.662317752838135,-0.689115524291992,0.294032365083694,0.243750929832459,-0.884264886379242,0.398322850465775,0.828352034091949,-0.389868885278702,0.402287393808365,0.662317752838135,-0.689115524291992,0.294032365083694,0.462544351816177,-0.573750495910645,0.675916492938995,-0.883911490440369,0.0454356893897057,0.465441823005676,-0.545051276683807,-0.206261366605759,0.812634825706482,-0.684404134750366,-0.533953189849854,0.496472477912903,-0.312857300043106,-0.0701114386320114,0.947208881378174,0.462544351816177,-0.573750495910645,0.675916492938995,-0.213104128837585,-0.584437012672424,0.782955944538116,-0.430613458156586,-0.0293598677963018,0.902058780193329,-0.613169372081757,0.156963154673576,0.774200141429901,-0.630502700805664,-0.217548668384552,0.745076417922974,0.428336501121521,-0.0297424420714378,0.903129696846008,0.597107112407684,-0.194828405976295,0.778142035007477,0.58095771074295,0.129276961088181,0.803601682186127,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.586991429328918,-0.31607523560524,0.745343863964081,-0.0225364938378334,-0.576714694499969,0.816634714603424,-0.0552290044724941,-0.859539985656738,0.508075475692749,-0.0225364938378334,-0.576714694499969,0.816634714603424,0.0383354164659977,-0.957559168338776,-0.285676121711731,0.980335772037506,-0.188939213752747,-0.056953851133585,0.681668698787689,-0.471610575914383,-0.559384763240814,0.00490783946588635,0.00122942065354437,-0.999987185001373,0.681668698787689,-0.471610575914383,-0.559384763240814,0.352704226970673,-0.858029365539551,-0.373343408107758,0.00490783946588635,0.00122942065354437,-0.999987185001373,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.96750271320343,-0.192122116684914,0.164400920271873,-0.00530534936115146,0.00112179282587022,-0.99998527765274,-0.385932207107544,-0.757268369197845,-0.526878535747528,-0.764558732509613,-0.46812915802002,-0.443063259124756,-0.00530534936115146,0.00112179282587022,-0.99998527765274,0.0223364941775799,-0.576743245124817,-0.816620051860809, -0.685902893543243,-0.71078634262085,0.155948713421822,-0.838969886302948,-0.5302734375,0.122227653861046,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.381297171115875,-0.692393600940704,-0.612538635730743,0.680035650730133,-0.698283791542053,-0.223497807979584,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.540568292140961,-0.817409574985504,0.199066668748856,0.727542281150818,-0.685412287712097,0.0298695731908083,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.452180773019791,-0.878205716609955,0.155843734741211,0.680035650730133,-0.698283791542053,-0.223497807979584,0.683449149131775,-0.689567506313324,0.239570155739784,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.470319867134094,-0.882218599319458,-0.0221261866390705,0.727542281150818,-0.685412287712097,0.0298695731908083,0.598632395267487,-0.692815542221069,0.402052044868469,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.449864596128464,-0.877300322055817,-0.167230501770973,0.683449149131775,-0.689567506313324,0.239570155739784,0.312898457050323,-0.30317035317421,0.900101244449615,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.365167140960693,-0.260313987731934,-0.893806219100952,0.123946145176888,-0.156060710549355,-0.979939997196198,0.376559227705002,0.0804113894701004,-0.922896087169647,0.702634871006012,0.155434265732765,-0.694366157054901,0.91601550579071,-0.263128757476807,-0.302785158157349,0.670127213001251,-0.275791883468628,-0.6891068816185,0.806311964988709,0.228450000286102,-0.545592904090881,0.915866374969482,0.261728912591934,-0.304444909095764,0.966503024101257,-0.253703832626343,0.0388099141418934,0.91601550579071,-0.263128757476807,-0.302785158157349,0.915866374969482,0.261728912591934,-0.304444909095764,0.966637134552002,0.25298011302948,0.0401717498898506,0.913093268871307,-0.252991795539856,0.319774568080902,0.966503024101257,-0.253703832626343,0.0388099141418934, 0.966637134552002,0.25298011302948,0.0401717498898506,0.914951086044312,0.242541939020157,0.322549074888229,0.79538756608963,-0.253331542015076,0.550619423389435,0.913093268871307,-0.252991795539856,0.319774568080902,0.914951086044312,0.242541939020157,0.322549074888229,0.789637267589569,0.246989637613297,0.561666369438171,0.763365149497986,-0.125001043081284,0.633757352828979,0.79538756608963,-0.253331542015076,0.550619423389435,0.789637267589569,0.246989637613297,0.561666369438171,0.419073313474655,0.202598944306374,0.885060012340546,0.661575853824615,0.331751018762589,-0.672501742839813,0.623564124107361,0.781771123409271,0.00130499247461557,0.796620786190033,0.575817584991455,-0.183927938342094,0.66670024394989,0.432952612638474,-0.606681823730469,0.42945009469986,0.892923653125763,-0.135129347443581,0.647005915641785,0.732552111148834,-0.211543783545494,0.688613891601563,0.692343652248383,-0.215571701526642,0.623564124107361,0.781771123409271,0.00130499247461557,0.42945009469986,0.892923653125763,-0.135129347443581,0.452374219894409,0.89155113697052,0.0222298968583345,0.689587533473969,0.723532259464264,0.0311464741826057,0.647005915641785,0.732552111148834,-0.211543783545494,0.452374219894409,0.89155113697052,0.0222298968583345,0.471769779920578,0.864407062530518,0.173878565430641,0.6768958568573,0.69471287727356,0.243281871080399,0.689587533473969,0.723532259464264,0.0311464741826057,0.471769779920578,0.864407062530518,0.173878565430641,0.407848834991455,0.861259400844574,0.303136229515076,0.582376599311829,0.69311785697937,0.424764811992645,0.6768958568573,0.69471287727356,0.243281871080399,0.598632395267487,-0.692815542221069,0.402052044868469,0.757855832576752,-0.532335162162781,0.37719202041626,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.108442008495331,0.0180171951651573,0.993939459323883,0.532896935939789,0.0133537920191884,0.846074759960175,0.419073313474655,0.202598944306374,0.885060012340546, 0.407848834991455,0.861259400844574,0.303136229515076,0.135122209787369,0.838861703872681,0.527307271957397,0.315021455287933,0.667639553546906,0.674550950527191,0.582376599311829,0.69311785697937,0.424764811992645,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.515409469604492,0.101915791630745,0.850862085819244,-0.683583498001099,0.133054658770561,0.71764200925827,-0.362329810857773,0.579764425754547,0.729787826538086,-0.633079648017883,0.295362114906311,0.71552175283432,-0.448814660310745,0.224063515663147,0.865078568458557,-0.152529567480087,0.450641930103302,0.87957751750946,-0.226269230246544,-0.722853541374207,-0.652904987335205,0.171032205224037,-0.919270157814026,0.354528367519379,-0.198421195149422,-0.758837580680847,0.620318114757538,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.967476725578308,-0.220996707677841,0.12308245152235,0.935926675796509,-0.349802911281586,0.040978018194437,0.577395439147949,-0.441121131181717,-0.687041938304901,0.806311964988709,0.228450000286102,-0.545592904090881,0.670127213001251,-0.275791883468628,-0.6891068816185,0.365167140960693,-0.260313987731934,-0.893806219100952,0.702634871006012,0.155434265732765,-0.694366157054901,0.381297171115875,-0.692393600940704,-0.612538635730743,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.685902893543243,-0.71078634262085,0.155948713421822,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.151356309652328,0.151358395814896,-0.976822376251221, 0.129860803484917,0.240213453769684,-0.961994647979736,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.476255148649216,0.154200553894043,-0.865680813789368,0.585507750511169,-0.785169541835785,0.201716393232346,0.171032205224037,-0.919270157814026,0.354528367519379,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.842067956924438,-0.0588998831808567,0.536145865917206,0.532896935939789,0.0133537920191884,0.846074759960175,0.752812325954437,-0.289424031972885,0.591191411018372,0.883874535560608,-0.163575857877731,0.438188046216965,0.532896935939789,0.0133537920191884,0.846074759960175,0.763365149497986,-0.125001043081284,0.633757352828979,0.419073313474655,0.202598944306374,0.885060012340546,-0.207103610038757,-0.83615118265152,-0.507896959781647,0.757855832576752,-0.532335162162781,0.37719202041626,0.967476725578308,-0.220996707677841,0.12308245152235,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.198421195149422,-0.758837580680847,0.620318114757538,0.935926675796509,-0.349802911281586,0.040978018194437,0.585507750511169,-0.785169541835785,0.201716393232346,-0.0988442227244377,-0.676099538803101,-0.730150103569031,0.577395439147949,-0.441121131181717,-0.687041938304901,0.365167140960693,-0.260313987731934,-0.893806219100952,0.0223364941775799,-0.576743245124817,-0.816620051860809,-0.130363821983337,-0.434679388999939,-0.89109992980957,0.123946145176888,-0.156060710549355,-0.979939997196198,0.670127213001251,-0.275791883468628,-0.6891068816185,0.91601550579071,-0.263128757476807,-0.302785158157349,0.680035650730133,-0.698283791542053,-0.223497807979584,0.381297171115875,-0.692393600940704,-0.612538635730743,0.966503024101257,-0.253703832626343,0.0388099141418934,0.727542281150818,-0.685412287712097,0.0298695731908083,0.680035650730133,-0.698283791542053,-0.223497807979584, 0.91601550579071,-0.263128757476807,-0.302785158157349,0.966503024101257,-0.253703832626343,0.0388099141418934,0.913093268871307,-0.252991795539856,0.319774568080902,0.683449149131775,-0.689567506313324,0.239570155739784,0.727542281150818,-0.685412287712097,0.0298695731908083,0.913093268871307,-0.252991795539856,0.319774568080902,0.79538756608963,-0.253331542015076,0.550619423389435,0.598632395267487,-0.692815542221069,0.402052044868469,0.683449149131775,-0.689567506313324,0.239570155739784,0.79538756608963,-0.253331542015076,0.550619423389435,0.763365149497986,-0.125001043081284,0.633757352828979,0.757855832576752,-0.532335162162781,0.37719202041626,0.598632395267487,-0.692815542221069,0.402052044868469,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.123946145176888,-0.156060710549355,-0.979939997196198,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.129860803484917,0.240213453769684,-0.961994647979736,0.376559227705002,0.0804113894701004,-0.922896087169647,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.796620786190033,0.575817584991455,-0.183927938342094,0.702634871006012,0.155434265732765,-0.694366157054901,0.376559227705002,0.0804113894701004,-0.922896087169647,0.66670024394989,0.432952612638474,-0.606681823730469,0.647005915641785,0.732552111148834,-0.211543783545494,0.915866374969482,0.261728912591934,-0.304444909095764,0.806311964988709,0.228450000286102,-0.545592904090881,0.688613891601563,0.692343652248383,-0.215571701526642,0.647005915641785,0.732552111148834,-0.211543783545494,0.689587533473969,0.723532259464264,0.0311464741826057,0.966637134552002,0.25298011302948,0.0401717498898506,0.915866374969482,0.261728912591934,-0.304444909095764,0.689587533473969,0.723532259464264,0.0311464741826057,0.6768958568573,0.69471287727356,0.243281871080399,0.914951086044312,0.242541939020157,0.322549074888229,0.966637134552002,0.25298011302948,0.0401717498898506,0.6768958568573,0.69471287727356,0.243281871080399, 0.582376599311829,0.69311785697937,0.424764811992645,0.789637267589569,0.246989637613297,0.561666369438171,0.914951086044312,0.242541939020157,0.322549074888229,0.582376599311829,0.69311785697937,0.424764811992645,0.315021455287933,0.667639553546906,0.674550950527191,0.419073313474655,0.202598944306374,0.885060012340546,0.789637267589569,0.246989637613297,0.561666369438171,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.515409469604492,0.101915791630745,0.850862085819244,-0.512385308742523,0.0120415911078453,0.858671247959137,-0.108442008495331,0.0180171951651573,0.993939459323883,-0.185590207576752,0.0829386487603188,0.979120790958405,0.419073313474655,0.202598944306374,0.885060012340546,-0.152529567480087,0.450641930103302,0.87957751750946,-0.448814660310745,0.224063515663147,0.865078568458557,-0.185590207576752,0.0829386487603188,0.979120790958405,0.171032205224037,-0.919270157814026,0.354528367519379,0.312898457050323,-0.30317035317421,0.900101244449615,-0.0551113523542881,-0.341195195913315,0.938375473022461,-0.198421195149422,-0.758837580680847,0.620318114757538,0.967476725578308,-0.220996707677841,0.12308245152235,0.842067956924438,-0.0588998831808567,0.536145865917206,0.883874535560608,-0.163575857877731,0.438188046216965,0.935926675796509,-0.349802911281586,0.040978018194437,0.670127213001251,-0.275791883468628,-0.6891068816185,0.381297171115875,-0.692393600940704,-0.612538635730743,0.0223364941775799,-0.576743245124817,-0.816620051860809,0.365167140960693,-0.260313987731934,-0.893806219100952,0.688613891601563,0.692343652248383,-0.215571701526642,0.806311964988709,0.228450000286102,-0.545592904090881,0.702634871006012,0.155434265732765,-0.694366157054901,0.796620786190033,0.575817584991455,-0.183927938342094,0.171032205224037,-0.919270157814026,0.354528367519379,0.585507750511169,-0.785169541835785,0.201716393232346,0.752812325954437,-0.289424031972885,0.591191411018372, 0.312898457050323,-0.30317035317421,0.900101244449615,-0.201268136501312,-0.0940669924020767,0.975009024143219,-0.480726420879364,-0.269600003957748,0.834396779537201,-0.198421195149422,-0.758837580680847,0.620318114757538,-0.0551113523542881,-0.341195195913315,0.938375473022461,0.883874535560608,-0.163575857877731,0.438188046216965,0.752812325954437,-0.289424031972885,0.591191411018372,0.585507750511169,-0.785169541835785,0.201716393232346,0.935926675796509,-0.349802911281586,0.040978018194437,0.757855832576752,-0.532335162162781,0.37719202041626,0.763365149497986,-0.125001043081284,0.633757352828979,0.842067956924438,-0.0588998831808567,0.536145865917206,0.967476725578308,-0.220996707677841,0.12308245152235,0.315021455287933,0.667639553546906,0.674550950527191,0.135122209787369,0.838861703872681,0.527307271957397,-0.362329810857773,0.579764425754547,0.729787826538086,-0.152529567480087,0.450641930103302,0.87957751750946,-0.683583498001099,0.133054658770561,0.71764200925827,-0.515409469604492,0.101915791630745,0.850862085819244,-0.448814660310745,0.224063515663147,0.865078568458557,-0.633079648017883,0.295362114906311,0.71552175283432,-0.850510120391846,-0.227078184485435,-0.474413365125656,-0.257767707109451,-0.179750084877014,-0.949339628219604,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.838969886302948,-0.5302734375,0.122227653861046,0.129860803484917,0.240213453769684,-0.961994647979736,0.151356309652328,0.151358395814896,-0.976822376251221,0.661575853824615,0.331751018762589,-0.672501742839813,0.66670024394989,0.432952612638474,-0.606681823730469,-0.476255148649216,0.154200553894043,-0.865680813789368,-0.246528506278992,0.0864357575774193,-0.965273320674896,-0.303164839744568,0.00688559422269464,-0.952913224697113,-0.550249099731445,0.0241546873003244,-0.834651112556458,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.452180773019791,-0.878205716609955,0.155843734741211, -0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.948083400726318,-9.9310447865264e-008,0.318021833896637,-0.452180773019791,-0.878205716609955,0.155843734741211,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.999005138874054,6.03368519591641e-008,-0.0445944853127003,-0.470319867134094,-0.882218599319458,-0.0221261866390705,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.940430045127869,5.90034510139503e-008,-0.339987248182297,-0.449864596128464,-0.877300322055817,-0.167230501770973,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.728089213371277,-0.000130440981592983,0.685482382774353,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.540568292140961,-0.817409574985504,0.199066668748856,-0.522543489933014,0.0101915588602424,0.852551698684692,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.838969886302948,-0.5302734375,0.122227653861046,-0.685902893543243,-0.71078634262085,0.155948713421822,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.852473676204681,-2.95911831926787e-007,-0.52277010679245,-0.421292394399643,-0.875049769878387,-0.238328784704208,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.0536522269248962,-0.227453172206879,-0.97230988740921,0.577395439147949,-0.441121131181717,-0.687041938304901,-0.0988442227244377,-0.676099538803101,-0.730150103569031,-0.704409718513489,0.000107401865534484,-0.709793627262115,-0.812868595123291,0.000118661264423281,-0.582447171211243,-0.207103610038757,-0.83615118265152,-0.507896959781647,-0.0536522269248962,-0.227453172206879,-0.97230988740921, -0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.873431265354156,-0.446991860866547,0.193173810839653,-0.949683308601379,-0.00300553464330733,-0.313197374343872,0.532896935939789,0.0133537920191884,0.846074759960175,-0.108442008495331,0.0180171951651573,0.993939459323883,0.312898457050323,-0.30317035317421,0.900101244449615,0.623564124107361,0.781771123409271,0.00130499247461557,0.688613891601563,0.692343652248383,-0.215571701526642,0.796620786190033,0.575817584991455,-0.183927938342094,0.312898457050323,-0.30317035317421,0.900101244449615,0.752812325954437,-0.289424031972885,0.591191411018372,0.532896935939789,0.0133537920191884,0.846074759960175,0.842067956924438,-0.0588998831808567,0.536145865917206,0.763365149497986,-0.125001043081284,0.633757352828979,0.532896935939789,0.0133537920191884,0.846074759960175,0.315021455287933,0.667639553546906,0.674550950527191,-0.152529567480087,0.450641930103302,0.87957751750946,0.419073313474655,0.202598944306374,0.885060012340546,-0.185590207576752,0.0829386487603188,0.979120790958405,-0.448814660310745,0.224063515663147,0.865078568458557,-0.515409469604492,0.101915791630745,0.850862085819244,0.151356309652328,0.151358395814896,-0.976822376251221,0.380553632974625,-0.296130239963531,-0.876062631607056,0.661575853824615,0.331751018762589,-0.672501742839813,-0.257767707109451,-0.179750084877014,-0.949339628219604,0.123946145176888,-0.156060710549355,-0.979939997196198,-0.130363821983337,-0.434679388999939,-0.89109992980957,-0.246528506278992,0.0864357575774193,-0.965273320674896,0.0183170828968287,-0.00617978628724813,-0.999813139438629,-0.303164839744568,0.00688559422269464,-0.952913224697113,0.66670024394989,0.432952612638474,-0.606681823730469,0.376559227705002,0.0804113894701004,-0.922896087169647,0.129860803484917,0.240213453769684,-0.961994647979736,-0.838969886302948,-0.5302734375,0.122227653861046,-0.464085191488266,0.0445687659084797,0.88466864824295,-0.850510120391846,-0.227078184485435,-0.474413365125656, 0.376559227705002,0.0804113894701004,-0.922896087169647,0.123946145176888,-0.156060710549355,-0.979939997196198,0.0183170828968287,-0.00617978628724813,-0.999813139438629,0.0518634654581547,-0.075635053217411,-0.995785892009735,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.949683308601379,-0.00300553464330733,-0.313197374343872,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.326529651880264,-0.00680761877447367,-0.945162415504456,-0.461041152477264,-0.00344432867132127,-0.887372076511383,-0.704409718513489,0.000107401865534484,-0.709793627262115,-0.0536522269248962,-0.227453172206879,-0.97230988740921,-0.472109436988831,-0.00532391341403127,-0.881523847579956,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.226269230246544,-0.722853541374207,-0.652904987335205,-0.391295343637466,-0.708213090896606,-0.587641179561615,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,-0.326529651880264,-0.00680761877447367,-0.945162415504456,-0.327883958816528,-0.01082568988204,-0.944655954837799,-0.196195036172867,-0.0147135937586427,-0.980454504489899,-0.0710315629839897,-0.0534634776413441,-0.996040225028992,0.0518634654581547,-0.075635053217411,-0.995785892009735,0.142189741134644,-0.0967937782406807,-0.9850954413414,-0.0223364103585482,-0.576743721961975,-0.816619694232941,0.130361214280128,-0.434677690267563,-0.891101121902466,0.839043617248535,-0.530505955219269,0.120703317224979,0.685371875762939,-0.711494088172913,0.155053615570068,-0.38129711151123,-0.692395269870758,-0.6125368475914,0.539408206939697,-0.818039894104004,0.199623316526413,0.452180683612823,-0.878205835819244,0.155843451619148,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.680036187171936,-0.698283493518829,-0.22349713742733, 0.452180683612823,-0.878205835819244,0.155843451619148,0.470319837331772,-0.882218599319458,-0.0221268218010664,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.72754293680191,-0.68541157245636,0.0298696421086788,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.44986492395401,-0.877299964427948,-0.167231306433678,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.683448731899261,-0.68956845998764,0.239568650722504,0.44986492395401,-0.877299964427948,-0.167231306433678,0.421293467283249,-0.875048518180847,-0.238331392407417,0.201270371675491,-0.0940680578351021,0.975008428096771,0.108443260192871,0.0180166698992252,0.993939340114594,-0.312896370887756,-0.30316898226738,0.900102436542511,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.914388120174408,0.244719073176384,0.32250103354454,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.789120137691498,0.248433187603951,0.561756551265717,-0.914388120174408,0.244719073176384,0.32250103354454,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.419077694416046,0.202596783638,0.885058403015137,-0.789120137691498,0.248433187603951,0.561756551265717, -0.641679227352142,0.0955243930220604,-0.761001229286194,-0.433125436306,0.08011444658041,-0.897766172885895,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.429452449083328,0.892922580242157,-0.135128989815712,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.429452449083328,0.892922580242157,-0.135128989815712,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.452375322580338,0.891550540924072,0.0222301334142685,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.675342082977295,0.696398377418518,0.242780566215515,-0.47176668047905,0.864408373832703,0.173880234360695,-0.47176668047905,0.864408373832703,0.173880234360695,-0.675342082977295,0.696398377418518,0.242780566215515,-0.581114292144775,0.694480895996094,0.424266964197159,-0.407311707735062,0.861595511436462,0.302903264760971,-0.598632097244263,-0.69281804561615,0.402048170566559,0.421293467283249,-0.875048518180847,-0.238331392407417,0.207105413079262,-0.836149632930756,-0.50789874792099,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.532896161079407,0.0133542641997337,0.846075296401978,0.108443260192871,0.0180166698992252,0.993939340114594,0.185588449239731,0.0829351618885994,0.979121387004852,-0.419077694416046,0.202596783638,0.885058403015137,-0.407311707735062,0.861595511436462,0.302903264760971,-0.581114292144775,0.694480895996094,0.424266964197159,-0.315046489238739,0.668025493621826,0.674157023429871,-0.13514731824398,0.839401423931122,0.526441276073456,0.701747357845306,0.0141455726698041,0.712285459041595,0.528442323207855,0.0112593621015549,0.848894536495209, 0.49128520488739,-0.262695521116257,0.830439567565918,0.856841146945953,-0.483877241611481,0.178005740046501,0.701747357845306,0.0141455726698041,0.712285459041595,0.68733537197113,0.112072803080082,0.717641830444336,0.517209410667419,0.0911701247096062,0.850989103317261,0.528442323207855,0.0112593621015549,0.848894536495209,0.351653456687927,0.578750193119049,0.735790729522705,0.146949008107185,0.44949945807457,0.881110787391663,0.438047766685486,0.220905914902687,0.871386647224426,0.614956438541412,0.290624231100082,0.733052670955658,0.204843252897263,-0.720215260982513,-0.66281920671463,0.322322010993958,-0.727867662906647,-0.605241358280182,0.198422521352768,-0.758837461471558,0.620317757129669,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.870814919471741,-0.427383571863174,-0.242949977517128,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.0223364103585482,-0.576743721961975,-0.816619694232941,0.685371875762939,-0.711494088172913,0.155053615570068,0.539408206939697,-0.818039894104004,0.199623316526413,0.257765382528305,-0.179748728871346,-0.949340522289276,0.304023921489716,0.0101332226768136,-0.952610492706299,0.551838159561157,0.0304165203124285,-0.833396375179291,0.850508272647858,-0.227084189653397,-0.474413722753525,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974,0.163634076714516,-0.861219465732574,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.585506916046143,-0.7851682305336,0.201723843812943,0.0860703811049461,-0.674501478672028,-0.73323917388916,0.204843252897263,-0.720215260982513,-0.66281920671463, -0.171031460165977,-0.919269144535065,0.354531347751617,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.419077694416046,0.202596783638,0.885058403015137,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.532896161079407,0.0133542641997337,0.846075296401978,0.207105413079262,-0.836149632930756,-0.50789874792099,-0.938664674758911,-0.343050718307495,-0.0349972806870937,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.757856607437134,-0.532336175441742,0.377189010381699,0.49128520488739,-0.262695521116257,0.830439567565918,0.198422521352768,-0.758837461471558,0.620317757129669,0.322322010993958,-0.727867662906647,-0.605241358280182,0.856841146945953,-0.483877241611481,0.178005740046501,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.0860703811049461,-0.674501478672028,-0.73323917388916,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.916015803813934,-0.263128668069839,-0.302784383296967,-0.680036187171936,-0.698283493518829,-0.22349713742733,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.966500461101532,-0.253715485334396,0.0387984029948711,-0.72754293680191,-0.68541157245636,0.0298696421086788,-0.683448731899261,-0.68956845998764,0.239568650722504,-0.913034975528717,-0.253099620342255,0.319855839014053,-0.913034975528717,-0.253099620342255,0.319855839014053, -0.683448731899261,-0.68956845998764,0.239568650722504,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.795308172702789,-0.253419429063797,0.55069363117218,-0.598632097244263,-0.69281804561615,0.402048170566559,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.76336532831192,-0.125000447034836,0.63375723361969,0.257765382528305,-0.179748728871346,-0.949340522289276,-0.12762725353241,-0.169139251112938,-0.977293848991394,-0.199198111891747,-0.0411539115011692,-0.979094684123993,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.433125436306,0.08011444658041,-0.897766172885895,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.433125436306,0.08011444658041,-0.897766172885895,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.647002518177032,0.732555210590363,-0.211543470621109,-0.915864527225494,0.261734366416931,-0.304445862770081,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.689061939716339,0.724038541316986,0.0310133062303066,-0.966454327106476,0.253697991371155,0.0400422066450119,-0.914388120174408,0.244719073176384,0.32250103354454,-0.675342082977295,0.696398377418518,0.242780566215515,-0.675342082977295,0.696398377418518,0.242780566215515,-0.914388120174408,0.244719073176384,0.32250103354454,-0.789120137691498,0.248433187603951,0.561756551265717,-0.581114292144775,0.694480895996094,0.424266964197159,-0.581114292144775,0.694480895996094,0.424266964197159,-0.789120137691498,0.248433187603951,0.561756551265717, -0.419077694416046,0.202596783638,0.885058403015137,-0.315046489238739,0.668025493621826,0.674157023429871,0.528442323207855,0.0112593621015549,0.848894536495209,0.108443260192871,0.0180166698992252,0.993939340114594,0.201270371675491,-0.0940680578351021,0.975008428096771,0.49128520488739,-0.262695521116257,0.830439567565918,0.517209410667419,0.0911701247096062,0.850989103317261,0.185588449239731,0.0829351618885994,0.979121387004852,0.108443260192871,0.0180166698992252,0.993939340114594,0.528442323207855,0.0112593621015549,0.848894536495209,-0.419077694416046,0.202596783638,0.885058403015137,0.185588449239731,0.0829351618885994,0.979121387004852,0.438047766685486,0.220905914902687,0.871386647224426,0.146949008107185,0.44949945807457,0.881110787391663,-0.171031460165977,-0.919269144535065,0.354531347751617,0.198422521352768,-0.758837461471558,0.620317757129669,0.0551152527332306,-0.341196656227112,0.938374698162079,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.883872747421265,-0.163574352860451,0.438192099332809,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.67012745141983,-0.27579391002655,-0.689105927944183,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.0223364103585482,-0.576743721961975,-0.816619694232941,-0.38129711151123,-0.692395269870758,-0.6125368475914,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.641679227352142,0.0955243930220604,-0.761001229286194,-0.806312918663025,0.228450119495392,-0.545591473579407,-0.171031460165977,-0.919269144535065,0.354531347751617,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.585506916046143,-0.7851682305336,0.201723843812943,0.201270371675491,-0.0940680578351021,0.975008428096771,0.0551152527332306,-0.341196656227112,0.938374698162079,0.198422521352768,-0.758837461471558,0.620317757129669,0.49128520488739,-0.262695521116257,0.830439567565918, -0.883872747421265,-0.163574352860451,0.438192099332809,-0.935926795005798,-0.349802285432816,0.0409805364906788,-0.585506916046143,-0.7851682305336,0.201723843812943,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.757856607437134,-0.532336175441742,0.377189010381699,-0.967477083206177,-0.220996335148811,0.123080067336559,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,0.146949008107185,0.44949945807457,0.881110787391663,0.351653456687927,0.578750193119049,0.735790729522705,-0.13514731824398,0.839401423931122,0.526441276073456,0.68733537197113,0.112072803080082,0.717641830444336,0.614956438541412,0.290624231100082,0.733052670955658,0.438047766685486,0.220905914902687,0.871386647224426,0.517209410667419,0.0911701247096062,0.850989103317261,0.850508272647858,-0.227084189653397,-0.474413722753525,0.839043617248535,-0.530505955219269,0.120703317224979,0.130361214280128,-0.434677690267563,-0.891101121902466,0.257765382528305,-0.179748728871346,-0.949340522289276,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.178068861365318,0.174752190709114,-0.968376576900482,0.481170386075974,0.163634076714516,-0.861219465732574,0.551838159561157,0.0304165203124285,-0.833396375179291,0.304023921489716,0.0101332226768136,-0.952610492706299,0.249399721622467,0.0914280638098717,-0.964075088500977,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.452180683612823,-0.878205835819244,0.155843451619148,0.539408206939697,-0.818039894104004,0.199623316526413,0.727328240871429,-0.00104458257555962,0.686289012432098,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.452180683612823,-0.878205835819244,0.155843451619148,0.948083400726318,1.65112687966484e-008,0.318021893501282,0.940430104732513,-4.52081110324798e-008,-0.339987009763718, 0.44986492395401,-0.877299964427948,-0.167231306433678,0.470319837331772,-0.882218599319458,-0.0221268218010664,0.999005138874054,5.02348207476189e-008,-0.0445948578417301,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.421293467283249,-0.875048518180847,-0.238331392407417,0.44986492395401,-0.877299964427948,-0.167231306433678,0.940430104732513,-4.52081110324798e-008,-0.339987009763718,0.727328240871429,-0.00104458257555962,0.686289012432098,0.539408206939697,-0.818039894104004,0.199623316526413,0.685371875762939,-0.711494088172913,0.155053615570068,0.523545145988464,0.00788477715104818,0.851961433887482,0.523545145988464,0.00788477715104818,0.851961433887482,0.685371875762939,-0.711494088172913,0.155053615570068,0.839043617248535,-0.530505955219269,0.120703317224979,0.466128349304199,0.0431555546820164,0.883663952350616,0.812868714332581,0.000118819662020542,-0.582446992397308,0.207105413079262,-0.836149632930756,-0.50789874792099,0.421293467283249,-0.875048518180847,-0.238331392407417,0.852473616600037,-2.64333579025333e-007,-0.522770285606384,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.205130055546761,-0.01137740816921,-0.978668570518494,0.204843252897263,-0.720215260982513,-0.66281920671463,0.0860703811049461,-0.674501478672028,-0.73323917388916,0.467949956655502,-0.00741531047970057,-0.883723855018616,0.0860703811049461,-0.674501478672028,-0.73323917388916,-0.870814919471741,-0.427383571863174,-0.242949977517128,0.801146507263184,0.00023984866857063,-0.59846818447113,0.801146507263184,0.00023984866857063,-0.59846818447113,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.207105413079262,-0.836149632930756,-0.50789874792099,0.812868714332581,0.000118819662020542,-0.582446992397308,0.205130055546761,-0.01137740816921,-0.978668570518494,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.0140170939266682,-0.019058208912611,-0.999720096588135,0.856841146945953,-0.483877241611481,0.178005740046501,0.322322010993958,-0.727867662906647,-0.605241358280182,-0.532896161079407,0.0133542641997337,0.846075296401978, -0.312896370887756,-0.30316898226738,0.900102436542511,0.108443260192871,0.0180166698992252,0.993939340114594,-0.625388622283936,0.780311465263367,-0.00176991312764585,-0.797359347343445,0.574054718017578,-0.186223655939102,-0.688615202903748,0.69234311580658,-0.215569332242012,-0.312896370887756,-0.30316898226738,0.900102436542511,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.752809286117554,-0.289420604705811,0.59119701385498,-0.842067539691925,-0.0588989481329918,0.536146581172943,-0.532896161079407,0.0133542641997337,0.846075296401978,-0.76336532831192,-0.125000447034836,0.63375723361969,-0.315046489238739,0.668025493621826,0.674157023429871,-0.419077694416046,0.202596783638,0.885058403015137,0.146949008107185,0.44949945807457,0.881110787391663,0.185588449239731,0.0829351618885994,0.979121387004852,0.517209410667419,0.0911701247096062,0.850989103317261,0.438047766685486,0.220905914902687,0.871386647224426,-0.178068861365318,0.174752190709114,-0.968376576900482,-0.676364660263062,0.342619508504868,-0.652029693126678,-0.444781333208084,-0.232732489705086,-0.864872872829437,0.257765382528305,-0.179748728871346,-0.949340522289276,0.130361214280128,-0.434677690267563,-0.891101121902466,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.249399721622467,0.0914280638098717,-0.964075088500977,0.304023921489716,0.0101332226768136,-0.952610492706299,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.669741690158844,0.427952170372009,-0.606879770755768,-0.131680130958557,0.240106955170631,-0.961773872375488,-0.433125436306,0.08011444658041,-0.897766172885895,0.322322010993958,-0.727867662906647,-0.605241358280182,0.204843252897263,-0.720215260982513,-0.66281920671463,0.205130055546761,-0.01137740816921,-0.978668570518494,-0.870814919471741,-0.427383571863174,-0.242949977517128,-0.938664674758911,-0.343050718307495,-0.0349972806870937,0.801146507263184,0.00023984866857063,-0.59846818447113,0.839043617248535,-0.530505955219269,0.120703317224979,0.850508272647858,-0.227084189653397,-0.474413722753525, 0.466128349304199,0.0431555546820164,0.883663952350616,-0.372008502483368,-0.198910742998123,-0.90666651725769,-0.199198111891747,-0.0411539115011692,-0.979094684123993,-0.12762725353241,-0.169139251112938,-0.977293848991394,0.150906592607498,0.329798728227615,0.931912004947662,0.189128592610359,0.522824287414551,0.831194996833801,0.388264060020447,0.528846085071564,0.754700541496277,0.858800172805786,0.271537780761719,0.434430092573166,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,0.743789613246918,0.0799255594611168,-0.663617968559265,-0.347785919904709,0.133236810564995,0.928058683872223,-0.104220665991306,0.344170242547989,0.933104991912842,-0.0869597047567368,0.548145830631256,0.831849813461304,-0.673880457878113,0.738653063774109,0.0166374407708645,-0.673399865627289,0.731426298618317,0.107462607324123,-0.73716002702713,0.672038435935974,0.0704230293631554,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.835862636566162,0.227462083101273,-0.499594479799271,-0.105340361595154,-0.682143568992615,-0.723590731620789,-0.107317022979259,-0.361611425876617,-0.926131844520569,-0.829341650009155,0.321383953094482,-0.457061111927032,-0.374457865953445,-0.757000803947449,-0.535472750663757,0.810609877109528,0.241179883480072,-0.533613920211792,0.791842222213745,0.591257572174072,0.152972057461739,0.745590567588806,0.664693832397461,0.047716099768877,-0.0846520513296127,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,0.152771726250649,0.56620579957962,0.809982597827911,0.165652215480804,0.70129519701004,0.693357288837433,0.165652215480804,0.70129519701004,0.693357288837433,0.152771726250649,0.56620579957962,0.809982597827911,0.340089678764343,0.499063193798065,0.797041356563568,0.40163654088974,0.616658449172974,0.677067518234253,0.40163654088974,0.616658449172974,0.677067518234253,0.340089678764343,0.499063193798065,0.797041356563568,0.490783363580704,0.368656903505325,0.789445221424103, 0.591461837291718,0.452348530292511,0.667498111724854,0.591461837291718,0.452348530292511,0.667498111724854,0.490783363580704,0.368656903505325,0.789445221424103,0.584496080875397,0.192600935697556,0.788206338882446,0.709483921527863,0.230550438165665,0.665942311286926,0.709483921527863,0.230550438165665,0.665942311286926,0.584496080875397,0.192600935697556,0.788206338882446,0.608551204204559,-0.00531027046963573,0.79349684715271,0.739747881889343,-0.0187778417021036,0.672622084617615,0.739747881889343,-0.0187778417021036,0.672622084617615,0.608551204204559,-0.00531027046963573,0.79349684715271,0.55970573425293,-0.198335975408554,0.804606914520264,0.678183913230896,-0.26194903254509,0.686621606349945,0.678183913230896,-0.26194903254509,0.686621606349945,0.55970573425293,-0.198335975408554,0.804606914520264,0.444581091403961,-0.360417783260345,0.820028483867645,0.53311824798584,-0.466141611337662,0.706043124198914,0.53311824798584,-0.466141611337662,0.706043124198914,0.444581091403961,-0.360417783260345,0.820028483867645,0.278635025024414,-0.469717562198639,0.837692022323608,0.324051290750504,-0.603787064552307,0.728307604789734,0.324051290750504,-0.603787064552307,0.728307604789734,0.278635025024414,-0.469717562198639,0.837692022323608,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0793530717492104,-0.656251728534698,0.750357747077942,0.0844017341732979,-0.511408865451813,0.855182647705078,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.167935863137245,-0.616517841815948,0.769222497940063,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.384569972753525,-0.489893972873688,0.782374441623688,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.541184604167938,-0.293485879898071,0.788026213645935,-0.541184604167938,-0.293485879898071,0.788026213645935, -0.408186405897141,-0.223486140370369,0.885120213031769,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.616609632968903,-0.0538487322628498,0.785425305366516,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.455481648445129,0.165574789047241,0.874712228775024,-0.600685119628906,0.196671590209007,0.774917840957642,-0.600685119628906,0.196671590209007,0.774917840957642,-0.455481648445129,0.165574789047241,0.874712228775024,-0.372059375047684,0.346225291490555,0.861220002174377,-0.495565205812454,0.424222469329834,0.757925093173981,-0.495565205812454,0.424222469329834,0.757925093173981,-0.372059375047684,0.346225291490555,0.861220002174377,-0.229102194309235,0.484258502721787,0.844396770000458,-0.315447002649307,0.598084509372711,0.736741542816162,-0.315447002649307,0.598084509372711,0.736741542816162,-0.229102194309235,0.484258502721787,0.844396770000458,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.0846520513296127,0.694811403751373,0.714192628860474,-0.0459145493805408,0.561039865016937,0.826514482498169,-0.00891148950904608,0.421955615282059,0.906572699546814,0.136559754610062,0.425709754228592,0.894495725631714,0.152771726250649,0.56620579957962,0.809982597827911,0.152771726250649,0.56620579957962,0.809982597827911,0.136559754610062,0.425709754228592,0.894495725631714,0.273672163486481,0.376535683870316,0.88505619764328,0.340089678764343,0.499063193798065,0.797041356563568,0.340089678764343,0.499063193798065,0.797041356563568,0.273672163486481,0.376535683870316,0.88505619764328,0.384000062942505,0.28102844953537,0.879526555538177,0.490783363580704,0.368656903505325,0.789445221424103,0.490783363580704,0.368656903505325,0.789445221424103,0.384000062942505,0.28102844953537,0.879526555538177,0.452635645866394,0.15212544798851,0.878623247146606,0.584496080875397,0.192600935697556,0.788206338882446,0.584496080875397,0.192600935697556,0.788206338882446,0.452635645866394,0.15212544798851,0.878623247146606,0.470285147428513,0.00726274587213993,0.882484614849091, 0.608551204204559,-0.00531027046963573,0.79349684715271,0.608551204204559,-0.00531027046963573,0.79349684715271,0.470285147428513,0.00726274587213993,0.882484614849091,0.434570521116257,-0.134057357907295,0.890604913234711,0.55970573425293,-0.198335975408554,0.804606914520264,0.55970573425293,-0.198335975408554,0.804606914520264,0.434570521116257,-0.134057357907295,0.890604913234711,0.350383520126343,-0.252725511789322,0.901865363121033,0.444581091403961,-0.360417783260345,0.820028483867645,0.444581091403961,-0.360417783260345,0.820028483867645,0.350383520126343,-0.252725511789322,0.901865363121033,0.228896334767342,-0.332815736532211,0.91478967666626,0.278635025024414,-0.469717562198639,0.837692022323608,0.278635025024414,-0.469717562198639,0.837692022323608,0.228896334767342,-0.332815736532211,0.91478967666626,0.0866658836603165,-0.363462805747986,0.927568793296814,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0844017341732979,-0.511408865451813,0.855182647705078,0.0866658836603165,-0.363462805747986,0.927568793296814,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.111898861825466,-0.479868054389954,0.870175421237946,-0.0571252852678299,-0.340407937765121,0.938540935516357,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.283866763114929,-0.379370450973511,0.880623459815979,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.408186405897141,-0.223486140370369,0.885120213031769,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.46808922290802,-0.0332756750285625,0.883054494857788,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.308955788612366,0.132258638739586,0.941835463047028,-0.455481648445129,0.165574789047241,0.874712228775024, -0.455481648445129,0.165574789047241,0.874712228775024,-0.308955788612366,0.132258638739586,0.941835463047028,-0.247846245765686,0.264629483222961,0.931956827640533,-0.372059375047684,0.346225291490555,0.861220002174377,-0.372059375047684,0.346225291490555,0.861220002174377,-0.247846245765686,0.264629483222961,0.931956827640533,-0.143103122711182,0.365745604038239,0.919647574424744,-0.229102194309235,0.484258502721787,0.844396770000458,-0.229102194309235,0.484258502721787,0.844396770000458,-0.143103122711182,0.365745604038239,0.919647574424744,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.0459145493805408,0.561039865016937,0.826514482498169,0.404841154813766,0.621719241142273,0.670498967170715,0.166674554347992,0.707286298274994,0.686997592449188,0.162125825881958,0.655974566936493,0.737165212631226,0.381767153739929,0.577166616916656,0.721895158290863,0.59637314081192,0.455737888813019,0.660789012908936,0.404841154813766,0.621719241142273,0.670498967170715,0.381767153739929,0.577166616916656,0.721895158290863,0.55845445394516,0.424168527126312,0.712888300418854,0.71536773443222,0.231748938560486,0.659197568893433,0.59637314081192,0.455737888813019,0.660789012908936,0.55845445394516,0.424168527126312,0.712888300418854,0.668235063552856,0.217623174190521,0.711408495903015,0.74573540687561,-0.019992433488369,0.665942192077637,0.71536773443222,0.231748938560486,0.659197568893433,0.668235063552856,0.217623174190521,0.711408495903015,0.69628119468689,-0.0145472744479775,0.717621684074402,0.683374345302582,-0.265446841716766,0.680101037025452,0.74573540687561,-0.019992433488369,0.665942192077637,0.69628119468689,-0.0145472744479775,0.717621684074402,0.638800263404846,-0.240928456187248,0.730676174163818,0.536719858646393,-0.471459150314331,0.699755728244781,0.683374345302582,-0.265446841716766,0.680101037025452,0.638800263404846,-0.240928456187248,0.730676174163818,0.503562271595001,-0.430930227041245,0.748815178871155,0.325602531433105,-0.610175728797913,0.722266256809235,0.536719858646393,-0.471459150314331,0.699755728244781, 0.503562271595001,-0.430930227041245,0.748815178871155,0.308857411146164,-0.558854043483734,0.769603312015533,0.0785464271903038,-0.662888288497925,0.744586825370789,0.325602531433105,-0.610175728797913,0.722266256809235,0.308857411146164,-0.558854043483734,0.769603312015533,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.171089246869087,-0.622517466545105,0.763675689697266,0.0785464271903038,-0.662888288497925,0.744586825370789,0.0810477286577225,-0.607410430908203,0.790242910385132,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.149094551801682,-0.570135653018951,0.807908475399017,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.350501775741577,-0.452110230922699,0.820210218429565,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.495985597372055,-0.269255638122559,0.825529932975769,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.607059121131897,0.19852888584137,0.769457936286926,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.56595778465271,-0.0462783649563789,0.823134303092957,-0.551003336906433,0.186732366681099,0.813342690467834,-0.500814497470856,0.428098827600479,0.752274036407471,-0.607059121131897,0.19852888584137,0.769457936286926,-0.551003336906433,0.186732366681099,0.813342690467834,-0.453138768672943,0.398362696170807,0.797478795051575,-0.31894525885582,0.603455662727356,0.730831801891327,-0.500814497470856,0.428098827600479,0.752274036407471,-0.453138768672943,0.398362696170807,0.797478795051575,-0.285550057888031,0.56007307767868,0.777675628662109,-0.085962675511837,0.700907051563263,0.708053469657898,-0.31894525885582,0.603455662727356,0.730831801891327,-0.285550057888031,0.56007307767868,0.777675628662109, -0.070789560675621,0.65000593662262,0.756624817848206,0.166674554347992,0.707286298274994,0.686997592449188,-0.085962675511837,0.700907051563263,0.708053469657898,-0.070789560675621,0.65000593662262,0.756624817848206,0.162125825881958,0.655974566936493,0.737165212631226,0.449477076530457,0.711219429969788,0.540497243404388,0.173702031373978,0.810399651527405,0.559535503387451,0.166674554347992,0.707286298274994,0.686997592449188,0.404841154813766,0.621719241142273,0.670498967170715,0.671196460723877,0.518955230712891,0.529321074485779,0.449477076530457,0.711219429969788,0.540497243404388,0.404841154813766,0.621719241142273,0.670498967170715,0.59637314081192,0.455737888813019,0.660789012908936,0.808924913406372,0.25956854224205,0.527508020401001,0.671196460723877,0.518955230712891,0.529321074485779,0.59637314081192,0.455737888813019,0.660789012908936,0.71536773443222,0.231748938560486,0.659197568893433,0.844040215015411,-0.0319031029939651,0.53533011674881,0.808924913406372,0.25956854224205,0.527508020401001,0.71536773443222,0.231748938560486,0.659197568893433,0.74573540687561,-0.019992433488369,0.665942192077637,0.771810173988342,-0.316096395254135,0.551717400550842,0.844040215015411,-0.0319031029939651,0.53533011674881,0.74573540687561,-0.019992433488369,0.665942192077637,0.683374345302582,-0.265446841716766,0.680101037025452,0.601994156837463,-0.554628610610962,0.574447631835938,0.771810173988342,-0.316096395254135,0.551717400550842,0.683374345302582,-0.265446841716766,0.680101037025452,0.536719858646393,-0.471459150314331,0.699755728244781,0.357549130916595,-0.715268313884735,0.600458025932312,0.601994156837463,-0.554628610610962,0.574447631835938,0.536719858646393,-0.471459150314331,0.699755728244781,0.325602531433105,-0.610175728797913,0.722266256809235,0.0714418441057205,-0.776358008384705,0.626230239868164,0.357549130916595,-0.715268313884735,0.600458025932312,0.325602531433105,-0.610175728797913,0.722266256809235,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.2176783233881,-0.729624152183533,0.648278295993805, 0.0714418441057205,-0.776358008384705,0.626230239868164,0.0785464271903038,-0.662888288497925,0.744586825370789,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.171089246869087,-0.622517466545105,0.763675689697266,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.389568954706192,-0.494513541460037,0.776976466178894,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.547417819499969,-0.296164989471436,0.782700479030609,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.722602725028992,0.221371009945869,0.654858946800232,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.623331189155579,-0.0542619191110134,0.78007298707962,-0.607059121131897,0.19852888584137,0.769457936286926,-0.599480926990509,0.48726087808609,0.634979903697968,-0.722602725028992,0.221371009945869,0.654858946800232,-0.607059121131897,0.19852888584137,0.769457936286926,-0.500814497470856,0.428098827600479,0.752274036407471,-0.388752341270447,0.690308272838593,0.610201716423035,-0.599480926990509,0.48726087808609,0.634979903697968,-0.500814497470856,0.428098827600479,0.752274036407471,-0.31894525885582,0.603455662727356,0.730831801891327,-0.118887908756733,0.803094327449799,0.583870828151703,-0.388752341270447,0.690308272838593,0.610201716423035,-0.31894525885582,0.603455662727356,0.730831801891327,-0.085962675511837,0.700907051563263,0.708053469657898,0.173702031373978,0.810399651527405,0.559535503387451,-0.118887908756733,0.803094327449799,0.583870828151703,-0.085962675511837,0.700907051563263,0.708053469657898,0.166674554347992,0.707286298274994,0.686997592449188,0.491414904594421,0.804159760475159,0.334422618150711,0.175544574856758,0.917761504650116,0.356227368116379,0.173702031373978,0.810399651527405,0.559535503387451, 0.449477076530457,0.711219429969788,0.540497243404388,0.745363593101501,0.583941757678986,0.321628957986832,0.491414904594421,0.804159760475159,0.334422618150711,0.449477076530457,0.711219429969788,0.540497243404388,0.671196460723877,0.518955230712891,0.529321074485779,0.90310138463974,0.286846220493317,0.319573432207108,0.745363593101501,0.583941757678986,0.321628957986832,0.671196460723877,0.518955230712891,0.529321074485779,0.808924913406372,0.25956854224205,0.527508020401001,0.943322658538818,-0.0469927303493023,0.328533172607422,0.90310138463974,0.286846220493317,0.319573432207108,0.808924913406372,0.25956854224205,0.527508020401001,0.844040215015411,-0.0319031029939651,0.53533011674881,0.860598742961884,-0.372500419616699,0.34729415178299,0.943322658538818,-0.0469927303493023,0.328533172607422,0.844040215015411,-0.0319031029939651,0.53533011674881,0.771810173988342,-0.316096395254135,0.551717400550842,0.666100323200226,-0.64570939540863,0.373322576284409,0.860598742961884,-0.372500419616699,0.34729415178299,0.771810173988342,-0.316096395254135,0.551717400550842,0.601994156837463,-0.554628610610962,0.574447631835938,0.38611564040184,-0.829714477062225,0.403098732233047,0.666100323200226,-0.64570939540863,0.373322576284409,0.601994156837463,-0.554628610610962,0.574447631835938,0.357549130916595,-0.715268313884735,0.600458025932312,0.0584128089249134,-0.899684309959412,0.432615399360657,0.38611564040184,-0.829714477062225,0.403098732233047,0.357549130916595,-0.715268313884735,0.600458025932312,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.272724866867065,-0.846146643161774,0.457883208990097,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0714418441057205,-0.776358008384705,0.626230239868164,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.2176783233881,-0.729624152183533,0.648278295993805,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.771963715553284,-0.413211286067963,0.48304083943367, -0.562557637691498,-0.676345586776733,0.475484549999237,-0.470725387334824,-0.581375122070313,0.663641929626465,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.653564929962158,-0.351642489433289,0.670224189758301,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.85104501247406,0.243097007274628,0.465431213378906,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.741482198238373,-0.0714436993002892,0.667158126831055,-0.722602725028992,0.221371009945869,0.654858946800232,-0.71004056930542,0.547635197639465,0.442648887634277,-0.85104501247406,0.243097007274628,0.465431213378906,-0.722602725028992,0.221371009945869,0.654858946800232,-0.599480926990509,0.48726087808609,0.634979903697968,-0.468671709299088,0.780212640762329,0.414264500141144,-0.71004056930542,0.547635197639465,0.442648887634277,-0.599480926990509,0.48726087808609,0.634979903697968,-0.388752341270447,0.690308272838593,0.610201716423035,-0.15956723690033,0.909399926662445,0.384096413850784,-0.468671709299088,0.780212640762329,0.414264500141144,-0.388752341270447,0.690308272838593,0.610201716423035,-0.118887908756733,0.803094327449799,0.583870828151703,0.175544574856758,0.917761504650116,0.356227368116379,-0.15956723690033,0.909399926662445,0.384096413850784,-0.118887908756733,0.803094327449799,0.583870828151703,0.173702031373978,0.810399651527405,0.559535503387451,0.175544574856758,0.917761504650116,0.356227368116379,0.491414904594421,0.804159760475159,0.334422618150711,0.50420355796814,0.839778661727905,0.20137183368206,0.172172844409943,0.959192931652069,0.22428885102272,0.491414904594421,0.804159760475159,0.334422618150711,0.745363593101501,0.583941757678986,0.321628957986832,0.7711421251297,0.608294606208801,0.187929421663284,0.50420355796814,0.839778661727905,0.20137183368206,0.745363593101501,0.583941757678986,0.321628957986832,0.90310138463974,0.286846220493317,0.319573432207108,0.936946272850037,0.296007573604584,0.185771778225899, 0.7711421251297,0.608294606208801,0.187929421663284,0.90310138463974,0.286846220493317,0.319573432207108,0.943322658538818,-0.0469927303493023,0.328533172607422,0.979227960109711,-0.0549116656184196,0.195185303688049,0.936946272850037,0.296007573604584,0.185771778225899,0.943322658538818,-0.0469927303493023,0.328533172607422,0.860598742961884,-0.372500419616699,0.34729415178299,0.892272472381592,-0.397068977355957,0.214909449219704,0.979227960109711,-0.0549116656184196,0.195185303688049,0.860598742961884,-0.372500419616699,0.34729415178299,0.666100323200226,-0.64570939540863,0.373322576284409,0.687824785709381,-0.684250712394714,0.242276713252068,0.892272472381592,-0.397068977355957,0.214909449219704,0.666100323200226,-0.64570939540863,0.373322576284409,0.38611564040184,-0.829714477062225,0.403098732233047,0.393515467643738,-0.877666234970093,0.273582845926285,0.687824785709381,-0.684250712394714,0.242276713252068,0.38611564040184,-0.829714477062225,0.403098732233047,0.0584128089249134,-0.899684309959412,0.432615399360657,0.0490523800253868,-0.951213300228119,0.304609894752502,0.393515467643738,-0.877666234970093,0.273582845926285,0.0584128089249134,-0.899684309959412,0.432615399360657,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.299019634723663,-0.894943594932556,0.331154435873032,0.0490523800253868,-0.951213300228119,0.304609894752502,-0.272724866867065,-0.846146643161774,0.457883208990097,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.299019634723663,-0.894943594932556,0.331154435873032,-0.562557637691498,-0.676345586776733,0.475484549999237,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.603678643703461,-0.716462135314941,0.349648594856262,-0.771963715553284,-0.413211286067963,0.48304083943367,-0.872656047344208,-0.0922837853431702,0.479536414146423,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.823797225952148,-0.439864456653595,0.357599437236786,-0.872656047344208,-0.0922837853431702,0.479536414146423, -0.85104501247406,0.243097007274628,0.465431213378906,-0.90692675113678,0.250015825033188,0.339080929756165,-0.929643630981445,-0.102520182728767,0.353909969329834,-0.85104501247406,0.243097007274628,0.465431213378906,-0.71004056930542,0.547635197639465,0.442648887634277,-0.758711993694305,0.570132851600647,0.315126359462738,-0.90692675113678,0.250015825033188,0.339080929756165,-0.71004056930542,0.547635197639465,0.442648887634277,-0.468671709299088,0.780212640762329,0.414264500141144,-0.504998087882996,0.81461375951767,0.285274267196655,-0.758711993694305,0.570132851600647,0.315126359462738,-0.468671709299088,0.780212640762329,0.414264500141144,-0.15956723690033,0.909399926662445,0.384096413850784,-0.180075660347939,0.950408160686493,0.253568828105927,-0.504998087882996,0.81461375951767,0.285274267196655,-0.15956723690033,0.909399926662445,0.384096413850784,0.175544574856758,0.917761504650116,0.356227368116379,0.172172844409943,0.959192931652069,0.22428885102272,-0.180075660347939,0.950408160686493,0.253568828105927,0.081717848777771,0.0365908145904541,0.995983600616455,0.136559754610062,0.425709754228592,0.894495725631714,-0.00891148950904608,0.421955615282059,0.906572699546814,0.081717848777771,0.0365908145904541,0.995983600616455,0.273672163486481,0.376535683870316,0.88505619764328,0.136559754610062,0.425709754228592,0.894495725631714,0.081717848777771,0.0365908145904541,0.995983600616455,0.384000062942505,0.28102844953537,0.879526555538177,0.273672163486481,0.376535683870316,0.88505619764328,0.081717848777771,0.0365908145904541,0.995983600616455,0.452635645866394,0.15212544798851,0.878623247146606,0.384000062942505,0.28102844953537,0.879526555538177,0.081717848777771,0.0365908145904541,0.995983600616455,0.470285147428513,0.00726274587213993,0.882484614849091,0.452635645866394,0.15212544798851,0.878623247146606,0.081717848777771,0.0365908145904541,0.995983600616455,0.434570521116257,-0.134057357907295,0.890604913234711,0.470285147428513,0.00726274587213993,0.882484614849091,0.081717848777771,0.0365908145904541,0.995983600616455, 0.350383520126343,-0.252725511789322,0.901865363121033,0.434570521116257,-0.134057357907295,0.890604913234711,0.081717848777771,0.0365908145904541,0.995983600616455,0.228896334767342,-0.332815736532211,0.91478967666626,0.350383520126343,-0.252725511789322,0.901865363121033,0.081717848777771,0.0365908145904541,0.995983600616455,0.0866658836603165,-0.363462805747986,0.927568793296814,0.228896334767342,-0.332815736532211,0.91478967666626,0.081717848777771,0.0365908145904541,0.995983600616455,-0.0571252852678299,-0.340407937765121,0.938540935516357,0.0866658836603165,-0.363462805747986,0.927568793296814,0.081717848777771,0.0365908145904541,0.995983600616455,-0.183149293065071,-0.2668676674366,0.946170151233673,-0.0571252852678299,-0.340407937765121,0.938540935516357,0.081717848777771,0.0365908145904541,0.995983600616455,-0.274222016334534,-0.152747601270676,0.949458003044128,-0.183149293065071,-0.2668676674366,0.946170151233673,0.081717848777771,0.0365908145904541,0.995983600616455,-0.318153589963913,-0.0134182879701257,0.947944223880768,-0.274222016334534,-0.152747601270676,0.949458003044128,0.081717848777771,0.0365908145904541,0.995983600616455,-0.308955788612366,0.132258638739586,0.941835463047028,-0.318153589963913,-0.0134182879701257,0.947944223880768,0.081717848777771,0.0365908145904541,0.995983600616455,-0.247846245765686,0.264629483222961,0.931956827640533,-0.308955788612366,0.132258638739586,0.941835463047028,0.081717848777771,0.0365908145904541,0.995983600616455,-0.143103122711182,0.365745604038239,0.919647574424744,-0.247846245765686,0.264629483222961,0.931956827640533,0.081717848777771,0.0365908145904541,0.995983600616455,-0.00891148950904608,0.421955615282059,0.906572699546814,-0.143103122711182,0.365745604038239,0.919647574424744,0.0240920167416334,0.706818819046021,0.706984281539917,0.034081757068634,0.56817638874054,0.82220071554184,0.233674764633179,0.535661220550537,0.811457395553589,0.2747623026371,0.666023552417755,0.693482756614685,-0.224320411682129,0.654188752174377,0.722300112247467,-0.163695827126503,0.526300370693207,0.834392964839935, 0.034081757068634,0.56817638874054,0.82220071554184,0.0240920167416334,0.706818819046021,0.706984281539917,-0.436875194311142,0.515262722969055,0.737322390079498,-0.332944214344025,0.415709882974625,0.846364855766296,-0.163695827126503,0.526300370693207,0.834392964839935,-0.224320411682129,0.654188752174377,0.722300112247467,-0.584827542304993,0.308754056692123,0.750098466873169,-0.450771480798721,0.251298606395721,0.856536090373993,-0.332944214344025,0.415709882974625,0.846364855766296,-0.436875194311142,0.515262722969055,0.737322390079498,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.450771480798721,0.251298606395721,0.856536090373993,-0.584827542304993,0.308754056692123,0.750098466873169,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.648242235183716,0.0625410452485085,0.758861362934113,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.61853951215744,-0.190050154924393,0.762423634529114,-0.307833850383759,-0.581823825836182,0.752807676792145,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.499736815690994,-0.414954453706741,0.760313034057617,-0.0688507258892059,-0.668073415756226,0.740903198719025,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.307833850383759,-0.581823825836182,0.752807676792145,0.184999153017998,-0.662078678607941,0.726241767406464,0.162060111761093,-0.521743357181549,0.837568163871765,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0688507258892059,-0.668073415756226,0.740903198719025,0.419496387243271,-0.564626634120941,0.710788011550903,0.348768085241318,-0.444183886051178,0.825264513492584,0.162060111761093,-0.521743357181549,0.837568163871765, 0.184999153017998,-0.662078678607941,0.726241767406464,0.602874755859375,-0.388880640268326,0.696644723415375,0.494788855314255,-0.304279118776321,0.814001321792603,0.348768085241318,-0.444183886051178,0.825264513492584,0.419496387243271,-0.564626634120941,0.710788011550903,0.710392951965332,-0.158590719103813,0.685704588890076,0.580431342124939,-0.120935805141926,0.805278837680817,0.494788855314255,-0.304279118776321,0.814001321792603,0.602874755859375,-0.388880640268326,0.696644723415375,0.727535784244537,0.0951134264469147,0.67944473028183,0.594111680984497,0.0810576304793358,0.800288081169128,0.580431342124939,-0.120935805141926,0.805278837680817,0.710392951965332,-0.158590719103813,0.685704588890076,0.651982724666595,0.337994933128357,0.678732573986053,0.533979833126068,0.274454295635223,0.799712657928467,0.594111680984497,0.0810576304793358,0.800288081169128,0.727535784244537,0.0951134264469147,0.67944473028183,0.493931025266647,0.53727263212204,0.683644890785217,0.408169955015183,0.433131784200668,0.803613185882568,0.533979833126068,0.274454295635223,0.799712657928467,0.651982724666595,0.337994933128357,0.678732573986053,0.2747623026371,0.666023552417755,0.693482756614685,0.233674764633179,0.535661220550537,0.811457395553589,0.408169955015183,0.433131784200668,0.803613185882568,0.493931025266647,0.53727263212204,0.683644890785217,0.034081757068634,0.56817638874054,0.82220071554184,0.0417974554002285,0.434518992900848,0.899692296981812,0.192422226071358,0.410055339336395,0.891531467437744,0.233674764633179,0.535661220550537,0.811457395553589,-0.163695827126503,0.526300370693207,0.834392964839935,-0.107358939945698,0.402824491262436,0.908959031105042,0.0417974554002285,0.434518992900848,0.899692296981812,0.034081757068634,0.56817638874054,0.82220071554184,-0.332944214344025,0.415709882974625,0.846364855766296,-0.234948098659515,0.319365561008453,0.918044149875641,-0.107358939945698,0.402824491262436,0.908959031105042,-0.163695827126503,0.526300370693207,0.834392964839935,-0.450771480798721,0.251298606395721,0.856536090373993, -0.323758065700531,0.195376396179199,0.925747692584991,-0.234948098659515,0.319365561008453,0.918044149875641,-0.332944214344025,0.415709882974625,0.846364855766296,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.323758065700531,0.195376396179199,0.925747692584991,-0.450771480798721,0.251298606395721,0.856536090373993,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.501288175582886,0.0552607960999012,0.863514006137848,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.477663516998291,-0.14585192501545,0.866351425647736,-0.230319395661354,-0.457817196846008,0.858694553375244,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.383112281560898,-0.324924170970917,0.864667117595673,-0.0400415360927582,-0.52651184797287,0.849224328994751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.230319395661354,-0.457817196846008,0.858694553375244,0.162060111761093,-0.521743357181549,0.837568163871765,0.13820318877697,-0.388006061315537,0.911236047744751,-0.0142518226057291,-0.391459435224533,0.92008501291275,-0.0400415360927582,-0.52651184797287,0.849224328994751,0.348768085241318,-0.444183886051178,0.825264513492584,0.279189854860306,-0.329605966806412,0.901894092559814,0.13820318877697,-0.388006061315537,0.911236047744751,0.162060111761093,-0.521743357181549,0.837568163871765,0.494788855314255,-0.304279118776321,0.814001321792603,0.38951188325882,-0.224056273698807,0.893352866172791,0.279189854860306,-0.329605966806412,0.901894092559814,0.348768085241318,-0.444183886051178,0.825264513492584,0.580431342124939,-0.120935805141926,0.805278837680817,0.454289197921753,-0.0856318548321724,0.886729121208191, 0.38951188325882,-0.224056273698807,0.893352866172791,0.494788855314255,-0.304279118776321,0.814001321792603,0.594111680984497,0.0810576304793358,0.800288081169128,0.464658886194229,0.0669254288077354,0.88295704126358,0.454289197921753,-0.0856318548321724,0.886729121208191,0.580431342124939,-0.120935805141926,0.805278837680817,0.533979833126068,0.274454295635223,0.799712657928467,0.419226229190826,0.21297712624073,0.882547497749329,0.464658886194229,0.0669254288077354,0.88295704126358,0.594111680984497,0.0810576304793358,0.800288081169128,0.408169955015183,0.433131784200668,0.803613185882568,0.324202924966812,0.332735329866409,0.885539174079895,0.419226229190826,0.21297712624073,0.882547497749329,0.533979833126068,0.274454295635223,0.799712657928467,0.233674764633179,0.535661220550537,0.811457395553589,0.192422226071358,0.410055339336395,0.891531467437744,0.324202924966812,0.332735329866409,0.885539174079895,0.408169955015183,0.433131784200668,0.803613185882568,-0.183556318283081,0.567722976207733,0.802494645118713,0.0306328255683184,0.613005936145782,0.789484262466431,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,-0.36688569188118,0.447914391756058,0.81533282995224,-0.183556318283081,0.567722976207733,0.802494645118713,-0.215900436043739,0.635483682155609,0.741314709186554,-0.422100454568863,0.500542402267456,0.755836308002472,-0.494506686925888,0.269742369651794,0.826257944107056,-0.36688569188118,0.447914391756058,0.81533282995224,-0.422100454568863,0.500542402267456,0.755836308002472,-0.565596282482147,0.300016045570374,0.768173933029175,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.494506686925888,0.269742369651794,0.826257944107056,-0.565596282482147,0.300016045570374,0.768173933029175,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.54912269115448,0.0573039166629314,0.833774864673615,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.597933351993561,-0.184150025248528,0.780105412006378, -0.420577734708786,-0.354520976543427,0.835122287273407,-0.523315012454987,-0.160613864660263,0.836865901947021,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.420577734708786,-0.354520976543427,0.835122287273407,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.2548748254776,-0.498156249523163,0.828781723976135,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.170113638043404,-0.566585600376129,0.806251883506775,-0.0486774146556854,-0.572135806083679,0.818713128566742,-0.0639727190136909,-0.647417724132538,0.75944572687149,0.182335004210472,-0.641266107559204,0.74533998966217,0.371963411569595,-0.482319325208664,0.793102324008942,0.170113638043404,-0.566585600376129,0.806251883506775,0.182335004210472,-0.641266107559204,0.74533998966217,0.409660339355469,-0.546471178531647,0.730443477630615,0.529680788516998,-0.330754697322845,0.781050324440002,0.371963411569595,-0.482319325208664,0.793102324008942,0.409660339355469,-0.546471178531647,0.730443477630615,0.587337672710419,-0.375847816467285,0.71677953004837,0.622047901153564,-0.132383927702904,0.771706521511078,0.529680788516998,-0.330754697322845,0.781050324440002,0.587337672710419,-0.375847816467285,0.71677953004837,0.691395580768585,-0.152425721287727,0.706214249134064,0.636672735214233,0.0860606729984283,0.766316771507263,0.622047901153564,-0.132383927702904,0.771706521511078,0.691395580768585,-0.152425721287727,0.706214249134064,0.707835674285889,0.0936401560902596,0.700142979621887,0.571585476398468,0.295183837413788,0.765608549118042,0.636672735214233,0.0860606729984283,0.766316771507263,0.707835674285889,0.0936401560902596,0.700142979621887,0.634431779384613,0.329166561365128,0.699389517307281,0.435493797063828,0.466814637184143,0.769694268703461,0.571585476398468,0.295183837413788,0.765608549118042, 0.634431779384613,0.329166561365128,0.699389517307281,0.481055945158005,0.522368133068085,0.704071521759033,0.246697977185249,0.577754318714142,0.778036057949066,0.435493797063828,0.466814637184143,0.769694268703461,0.481055945158005,0.522368133068085,0.704071521759033,0.268397808074951,0.647146701812744,0.713557183742523,0.0306328255683184,0.613005936145782,0.789484262466431,0.246697977185249,0.577754318714142,0.778036057949066,0.268397808074951,0.647146701812744,0.713557183742523,0.0251268558204174,0.686642229557037,0.726561188697815,-0.215900436043739,0.635483682155609,0.741314709186554,0.0251268558204174,0.686642229557037,0.726561188697815,0.0138044422492385,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,-0.422100454568863,0.500542402267456,0.755836308002472,-0.215900436043739,0.635483682155609,0.741314709186554,-0.272946208715439,0.75020706653595,0.602237343788147,-0.518174409866333,0.589555025100708,0.6196129322052,-0.565596282482147,0.300016045570374,0.768173933029175,-0.422100454568863,0.500542402267456,0.755836308002472,-0.518174409866333,0.589555025100708,0.6196129322052,-0.688787519931793,0.350962370634079,0.634347856044769,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.565596282482147,0.300016045570374,0.768173933029175,-0.688787519931793,0.350962370634079,0.634347856044769,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.626972436904907,0.0610111244022846,0.776648700237274,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.597933351993561,-0.184150025248528,0.780105412006378,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.482387334108353,-0.40233388543129,0.778093755245209,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.368078649044037,-0.676924169063568,0.637410223484039, -0.0639727190136909,-0.647417724132538,0.75944572687149,-0.295998096466064,-0.56403261423111,0.770877659320831,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.182335004210472,-0.641266107559204,0.74533998966217,-0.0639727190136909,-0.647417724132538,0.75944572687149,-0.0920489430427551,-0.776246547698975,0.6236732006073,0.201069504022598,-0.769039869308472,0.606752574443817,0.409660339355469,-0.546471178531647,0.730443477630615,0.182335004210472,-0.641266107559204,0.74533998966217,0.201069504022598,-0.769039869308472,0.606752574443817,0.471676796674728,-0.656273901462555,0.58891898393631,0.587337672710419,-0.375847816467285,0.71677953004837,0.409660339355469,-0.546471178531647,0.730443477630615,0.471676796674728,-0.656273901462555,0.58891898393631,0.6831955909729,-0.45319789648056,0.57258665561676,0.691395580768585,-0.152425721287727,0.706214249134064,0.587337672710419,-0.375847816467285,0.71677953004837,0.6831955909729,-0.45319789648056,0.57258665561676,0.807079255580902,-0.187228798866272,0.559971868991852,0.707835674285889,0.0936401560902596,0.700142979621887,0.691395580768585,-0.152425721287727,0.706214249134064,0.807079255580902,-0.187228798866272,0.559971868991852,0.826618671417236,0.105725072324276,0.552742063999176,0.634431779384613,0.329166561365128,0.699389517307281,0.707835674285889,0.0936401560902596,0.700142979621887,0.826618671417236,0.105725072324276,0.552742063999176,0.739149928092957,0.386077225208282,0.551907360553741,0.481055945158005,0.522368133068085,0.704071521759033,0.634431779384613,0.329166561365128,0.699389517307281,0.739149928092957,0.386077225208282,0.551907360553741,0.556476175785065,0.615973055362701,0.557594358921051,0.268397808074951,0.647146701812744,0.713557183742523,0.481055945158005,0.522368133068085,0.704071521759033,0.556476175785065,0.615973055362701,0.557594358921051,0.303310126066208,0.764374732971191,0.56897646188736,0.0251268558204174,0.686642229557037,0.726561188697815,0.268397808074951,0.647146701812744,0.713557183742523, 0.303310126066208,0.764374732971191,0.56897646188736,0.0138044422492385,0.811234712600708,0.58455765247345,-0.272946208715439,0.75020706653595,0.602237343788147,0.0138044422492385,0.811234712600708,0.58455765247345,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.518174409866333,0.589555025100708,0.6196129322052,-0.272946208715439,0.75020706653595,0.602237343788147,-0.328935414552689,0.853318154811859,0.40453627705574,-0.609814286231995,0.669305503368378,0.424448668956757,-0.688787519931793,0.350962370634079,0.634347856044769,-0.518174409866333,0.589555025100708,0.6196129322052,-0.609814286231995,0.669305503368378,0.424448668956757,-0.805227220058441,0.396035611629486,0.441321760416031,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.688787519931793,0.350962370634079,0.634347856044769,-0.805227220058441,0.396035611629486,0.441321760416031,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.761736273765564,0.0666655674576759,0.644448220729828,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.727181673049927,-0.224953591823578,0.648538887500763,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.589768707752228,-0.484505742788315,0.646085977554321,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.368078649044037,-0.676924169063568,0.637410223484039,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.121754303574562,-0.89501953125,0.429087340831757,0.201069504022598,-0.769039869308472,0.606752574443817,-0.0920489430427551,-0.776246547698975,0.6236732006073,-0.121754303574562,-0.89501953125,0.429087340831757,0.213988110423088,-0.886772990226746,0.409686177968979, 0.471676796674728,-0.656273901462555,0.58891898393631,0.201069504022598,-0.769039869308472,0.606752574443817,0.213988110423088,-0.886772990226746,0.409686177968979,0.523918509483337,-0.757616579532623,0.389264106750488,0.6831955909729,-0.45319789648056,0.57258665561676,0.471676796674728,-0.656273901462555,0.58891898393631,0.523918509483337,-0.757616579532623,0.389264106750488,0.766169846057892,-0.525022745132446,0.370587140321732,0.807079255580902,-0.187228798866272,0.559971868991852,0.6831955909729,-0.45319789648056,0.57258665561676,0.766169846057892,-0.525022745132446,0.370587140321732,0.908073663711548,-0.220386654138565,0.356134712696075,0.826618671417236,0.105725072324276,0.552742063999176,0.807079255580902,-0.187228798866272,0.559971868991852,0.908073663711548,-0.220386654138565,0.356134712696075,0.930448770523071,0.115156330168247,0.347856402397156,0.739149928092957,0.386077225208282,0.551907360553741,0.826618671417236,0.105725072324276,0.552742063999176,0.930448770523071,0.115156330168247,0.347856402397156,0.830271482467651,0.436247199773788,0.346897125244141,0.556476175785065,0.615973055362701,0.557594358921051,0.739149928092957,0.386077225208282,0.551907360553741,0.830271482467651,0.436247199773788,0.346897125244141,0.621051132678986,0.699568390846252,0.353411287069321,0.303310126066208,0.764374732971191,0.56897646188736,0.556476175785065,0.615973055362701,0.557594358921051,0.621051132678986,0.699568390846252,0.353411287069321,0.331061065196991,0.869544088840485,0.366458177566528,0.0138044422492385,0.811234712600708,0.58455765247345,0.303310126066208,0.764374732971191,0.56897646188736,0.331061065196991,0.869544088840485,0.366458177566528,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.328935414552689,0.853318154811859,0.40453627705574,-0.000517124892212451,0.923211693763733,0.384291529655457,-0.00916329398751259,0.9673011302948,0.253465056419373,-0.354367077350616,0.893833041191101,0.274748027324677,-0.609814286231995,0.669305503368378,0.424448668956757,-0.328935414552689,0.853318154811859,0.40453627705574, -0.354367077350616,0.893833041191101,0.274748027324677,-0.649618446826935,0.700406491756439,0.295679837465286,-0.805227220058441,0.396035611629486,0.441321760416031,-0.609814286231995,0.669305503368378,0.424448668956757,-0.649618446826935,0.700406491756439,0.295679837465286,-0.855028748512268,0.413159251213074,0.313409119844437,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.805227220058441,0.396035611629486,0.441321760416031,-0.855028748512268,0.413159251213074,0.313409119844437,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.888783156871796,0.0704197734594345,0.452885746955872,-0.942859053611755,0.0708882212638855,0.325563609600067,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.849202871322632,-0.263590753078461,0.457574456930161,-0.901254296302795,-0.280208140611649,0.33049076795578,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.691821098327637,-0.560874342918396,0.454756587743759,-0.735823094844818,-0.592702567577362,0.327518105506897,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.121754303574562,-0.89501953125,0.429087340831757,-0.437908887863159,-0.781264841556549,0.444815665483475,-0.468927621841431,-0.824368357658386,0.317054718732834,-0.136601343750954,-0.943935394287109,0.300542861223221,0.213988110423088,-0.886772990226746,0.409686177968979,-0.121754303574562,-0.89501953125,0.429087340831757,-0.136601343750954,-0.943935394287109,0.300542861223221,0.21633192896843,-0.935254573822021,0.280177354812622,0.523918509483337,-0.757616579532623,0.389264106750488,0.213988110423088,-0.886772990226746,0.409686177968979,0.21633192896843,-0.935254573822021,0.280177354812622,0.542101740837097,-0.799496412277222,0.258710563182831,0.766169846057892,-0.525022745132446,0.370587140321732,0.523918509483337,-0.757616579532623,0.389264106750488,0.542101740837097,-0.799496412277222,0.258710563182831,0.796745836734772,-0.555020034313202,0.239058271050453, 0.908073663711548,-0.220386654138565,0.356134712696075,0.766169846057892,-0.525022745132446,0.370587140321732,0.796745836734772,-0.555020034313202,0.239058271050453,0.945919096469879,-0.234794244170189,0.22384974360466,0.930448770523071,0.115156330168247,0.347856402397156,0.908073663711548,-0.220386654138565,0.356134712696075,0.945919096469879,-0.234794244170189,0.22384974360466,0.969435811042786,0.117914944887161,0.215151831507683,0.830271482467651,0.436247199773788,0.346897125244141,0.930448770523071,0.115156330168247,0.347856402397156,0.969435811042786,0.117914944887161,0.215151831507683,0.864136636257172,0.455431222915649,0.214126899838448,0.621051132678986,0.699568390846252,0.353411287069321,0.830271482467651,0.436247199773788,0.346897125244141,0.864136636257172,0.455431222915649,0.214126899838448,0.644224345684052,0.732226133346558,0.220952302217484,0.331061065196991,0.869544088840485,0.366458177566528,0.621051132678986,0.699568390846252,0.353411287069321,0.644224345684052,0.732226133346558,0.220952302217484,0.339384973049164,0.910898625850677,0.234694600105286,-0.000517124892212451,0.923211693763733,0.384291529655457,0.331061065196991,0.869544088840485,0.366458177566528,0.339384973049164,0.910898625850677,0.234694600105286,-0.00916329398751259,0.9673011302948,0.253465056419373,0.192422226071358,0.410055339336395,0.891531467437744,0.0417974554002285,0.434518992900848,0.899692296981812,0.0575622506439686,0.0207394547760487,0.998126447200775,0.0417974554002285,0.434518992900848,0.899692296981812,-0.107358939945698,0.402824491262436,0.908959031105042,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.107358939945698,0.402824491262436,0.908959031105042,-0.234948098659515,0.319365561008453,0.918044149875641,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.234948098659515,0.319365561008453,0.918044149875641,-0.323758065700531,0.195376396179199,0.925747692584991,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.323758065700531,0.195376396179199,0.925747692584991,-0.361866801977158,0.0475688315927982,0.931015372276306, 0.0575622506439686,0.0207394547760487,0.998126447200775,-0.361866801977158,0.0475688315927982,0.931015372276306,-0.344122022390366,-0.104039087891579,0.933143019676209,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.344122022390366,-0.104039087891579,0.933143019676209,-0.272957742214203,-0.239076629281044,0.931845724582672,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.272957742214203,-0.239076629281044,0.931845724582672,-0.157753229141235,-0.339445114135742,0.927303016185761,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.157753229141235,-0.339445114135742,0.927303016185761,-0.0142518226057291,-0.391459435224533,0.92008501291275,0.0575622506439686,0.0207394547760487,0.998126447200775,-0.0142518226057291,-0.391459435224533,0.92008501291275,0.13820318877697,-0.388006061315537,0.911236047744751,0.0575622506439686,0.0207394547760487,0.998126447200775,0.13820318877697,-0.388006061315537,0.911236047744751,0.279189854860306,-0.329605966806412,0.901894092559814,0.0575622506439686,0.0207394547760487,0.998126447200775,0.279189854860306,-0.329605966806412,0.901894092559814,0.38951188325882,-0.224056273698807,0.893352866172791,0.0575622506439686,0.0207394547760487,0.998126447200775,0.38951188325882,-0.224056273698807,0.893352866172791,0.454289197921753,-0.0856318548321724,0.886729121208191,0.0575622506439686,0.0207394547760487,0.998126447200775,0.454289197921753,-0.0856318548321724,0.886729121208191,0.464658886194229,0.0669254288077354,0.88295704126358,0.0575622506439686,0.0207394547760487,0.998126447200775,0.464658886194229,0.0669254288077354,0.88295704126358,0.419226229190826,0.21297712624073,0.882547497749329,0.0575622506439686,0.0207394547760487,0.998126447200775,0.419226229190826,0.21297712624073,0.882547497749329,0.324202924966812,0.332735329866409,0.885539174079895,0.0575622506439686,0.0207394547760487,0.998126447200775,0.324202924966812,0.332735329866409,0.885539174079895,0.192422226071358,0.410055339336395,0.891531467437744,0.0575622506439686,0.0207394547760487,0.998126447200775 } } LayerElementUV: 0 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: *26158 { a: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877, 0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288, 0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265, 0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055, 0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363, 0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828, 0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653, 0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861, 0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605, 0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062, 0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415, 0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596, 0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342, 0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155, 0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906, 0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946, 0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798, 0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566, 0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182, 0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464, 0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982, 0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808, 0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012, 0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125, 0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957, 0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046, 0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731, 0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033, 0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553, 0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835, 0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658, 0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959, 0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197, 0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031, 0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516, 0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796, 0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462, 0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027, 0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073, 0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413, 0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215, 0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931, 0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539, 0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516, 0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969, 0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703, 0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486, 0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137, 0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647, 0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977, 0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828, 0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843, 0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042, 0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209, 0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732, 0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493, 0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001, 0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197, 0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846, 0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238, 0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174, 0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355, 0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969, 0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138, 0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026, 0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064, 0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507, 0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629, 0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646, 0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309, 0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438, 0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139, 0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294, 0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783, 0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461, 0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094, 0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421, 0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595, 0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767, 0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577, 0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845, 0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383, 0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165, 0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871, 0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718, 0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631, 0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051, 0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649, 0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406, 0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306, 0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457, 0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502, 0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893, 0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464, 0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401, 0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736, 0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431, 0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846, 0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299, 0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468, 0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366, 0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701, 0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561, 0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471, 0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393, 0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133, 0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016, 0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047, 0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623, 0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946, 0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812, 0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207, 0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413, 0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391, 0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263, 0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334, 0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572, 0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868, 0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792, 0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677, 0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711, 0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582, 0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126, 0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043, 0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592, 0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342, 0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498, 0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705, 0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093, 0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016, 0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853, 0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144, 0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263, 0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256, 0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077, 0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177, 0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197, 0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891, 0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676, 0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119, 0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842, 0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031, 0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448, 0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484, 0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826, 0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908, 0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805, 0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126, 0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533, 0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143, 0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943, 0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111, 0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742, 0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022, 0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837, 0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521, 0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566, 0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244, 0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365, 0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878, 0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069, 0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255, 0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094, 0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585, 0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842, 0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275, 0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962, 0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623, 0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279, 0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246, 0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235, 0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677, 0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146, 0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524, 0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418, 0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866, 0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214, 0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322, 0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728, 0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812, 0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368, 0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999, 0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318, 0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016, 0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579, 0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393, 0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887, 0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098, 0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764, 0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047, 0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997, 0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531, 0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385, 0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611, 0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696, 0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099, 0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307, 0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975, 0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609, 0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367, 0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426, 0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129, 0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117, 0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778, 0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231, 0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111, 0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544, 0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045, 0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187, 0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124, 0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101, 0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449, 0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281, 0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082, 0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746, 0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236, 0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358, 0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207, 0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287, 0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062, 0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328, 0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658, 0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008, 0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594, 0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163, 0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302, 0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028, 0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384, 0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402 } UVIndex: *46575 { a: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252, 249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420, 421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648, 649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911, 912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080, 1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900, 1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306, 1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416, 1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503, 1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597, 615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192, 687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737, 1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775, 775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855, 1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885, 1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944, 2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141, 2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320, 2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437, 2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098, 2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827, 2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891, 2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882, 2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896, 3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249, 3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324, 3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412, 2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500, 2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124, 2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109, 3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860, 2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918, 3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787, 3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630, 2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076, 4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113, 4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323, 4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439, 4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568, 4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542, 4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810, 4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966, 4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066, 5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200, 5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324, 5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417, 5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562, 5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748, 5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833, 5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997, 5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932, 6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321, 6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353, 6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385, 6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544, 6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597, 6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929, 6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069, 7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012, 6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776, 6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095, 7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288, 6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506, 7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365, 7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758, 7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549, 7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963, 7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881, 7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116, 8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219, 8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421, 8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310, 8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265, 8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668, 8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748, 8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759, 8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031, 9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147, 9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378, 9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551, 9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452, 9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709, 9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761, 9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979, 9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148, 10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897, 9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319, 10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836, 9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396, 10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499, 10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611, 10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537, 10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659, 10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990, 10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097, 10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968, 10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213, 11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275, 11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886, 11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408, 11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541, 11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696, 11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817, 11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864, 11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953, 11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042, 12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165, 11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090, 12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411, 12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139, 12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554, 12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611, 12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704, 12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799, 12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931, 12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987, 12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } } LayerElementUV: 1 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: *26158 { a: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877, 0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288, 0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265, 0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055, 0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363, 0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828, 0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653, 0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861, 0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605, 0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062, 0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415, 0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596, 0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342, 0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155, 0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906, 0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946, 0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798, 0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566, 0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182, 0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464, 0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982, 0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808, 0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012, 0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125, 0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957, 0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046, 0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731, 0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033, 0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553, 0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835, 0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658, 0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959, 0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197, 0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031, 0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516, 0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796, 0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462, 0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027, 0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073, 0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413, 0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215, 0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931, 0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539, 0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516, 0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969, 0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703, 0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486, 0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137, 0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647, 0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977, 0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828, 0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843, 0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042, 0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209, 0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732, 0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493, 0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001, 0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197, 0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846, 0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238, 0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174, 0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355, 0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969, 0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138, 0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026, 0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064, 0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507, 0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629, 0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646, 0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309, 0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438, 0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139, 0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294, 0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783, 0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461, 0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094, 0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421, 0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595, 0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767, 0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577, 0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845, 0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383, 0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165, 0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871, 0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718, 0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631, 0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051, 0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649, 0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406, 0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306, 0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457, 0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502, 0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893, 0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464, 0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401, 0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736, 0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431, 0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846, 0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299, 0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468, 0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366, 0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701, 0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561, 0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471, 0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393, 0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133, 0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016, 0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047, 0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623, 0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946, 0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812, 0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207, 0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413, 0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391, 0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263, 0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334, 0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572, 0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868, 0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792, 0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677, 0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711, 0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582, 0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126, 0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043, 0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592, 0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342, 0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498, 0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705, 0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093, 0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016, 0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853, 0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144, 0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263, 0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256, 0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077, 0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177, 0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197, 0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891, 0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676, 0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119, 0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842, 0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031, 0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448, 0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484, 0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826, 0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908, 0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805, 0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126, 0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533, 0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143, 0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943, 0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111, 0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742, 0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022, 0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837, 0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521, 0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566, 0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244, 0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365, 0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878, 0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069, 0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255, 0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094, 0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585, 0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842, 0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275, 0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962, 0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623, 0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279, 0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246, 0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235, 0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677, 0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146, 0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524, 0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418, 0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866, 0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214, 0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322, 0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728, 0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812, 0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368, 0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999, 0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318, 0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016, 0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579, 0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393, 0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887, 0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098, 0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764, 0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047, 0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997, 0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531, 0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385, 0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611, 0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696, 0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099, 0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307, 0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975, 0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609, 0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367, 0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426, 0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129, 0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117, 0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778, 0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231, 0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111, 0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544, 0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045, 0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187, 0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124, 0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101, 0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449, 0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281, 0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082, 0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746, 0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236, 0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358, 0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207, 0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287, 0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062, 0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328, 0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658, 0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008, 0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594, 0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163, 0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302, 0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028, 0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384, 0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402 } UVIndex: *46575 { a: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252, 249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420, 421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648, 649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911, 912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080, 1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900, 1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306, 1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416, 1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503, 1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597, 615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192, 687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737, 1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775, 775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855, 1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885, 1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944, 2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141, 2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320, 2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437, 2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098, 2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827, 2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891, 2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882, 2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896, 3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249, 3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324, 3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412, 2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500, 2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124, 2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109, 3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860, 2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918, 3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787, 3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630, 2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076, 4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113, 4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323, 4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439, 4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568, 4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542, 4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810, 4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966, 4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066, 5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200, 5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324, 5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417, 5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562, 5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748, 5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833, 5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997, 5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932, 6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321, 6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353, 6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385, 6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544, 6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597, 6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929, 6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069, 7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012, 6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776, 6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095, 7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288, 6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506, 7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365, 7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758, 7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549, 7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963, 7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881, 7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116, 8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219, 8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421, 8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310, 8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265, 8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668, 8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748, 8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759, 8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031, 9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147, 9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378, 9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551, 9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452, 9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709, 9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761, 9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979, 9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148, 10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897, 9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319, 10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836, 9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396, 10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499, 10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611, 10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537, 10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659, 10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990, 10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097, 10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968, 10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213, 11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275, 11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886, 11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408, 11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541, 11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696, 11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817, 11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864, 11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953, 11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042, 12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165, 11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090, 12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411, 12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139, 12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554, 12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611, 12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704, 12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799, 12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931, 12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987, 12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } } LayerElementUV: 2 { Version: 101 Name: "map1" MappingInformationType: "ByPolygonVertex" ReferenceInformationType: "IndexToDirect" UV: *26158 { a: 0.295421153306961,0.00588926486670971,0.305912375450134,0.00411785952746868,0.307807922363281,0.0129160415381193,0.299297451972961,0.0157780479639769,0.286833524703979,0.00782670080661774,0.295421153306961,0.00588926486670971,0.29440376162529,0.0177510008215904,0.305912375450134,0.00411785952746868,0.313557296991348,0.00278086774051189,0.313923835754395,0.0118203889578581,0.321202218532562,0.00144453160464764,0.32957324385643,0.00164265744388103,0.329566299915314,0.00943864695727825,0.320039808750153,0.0107254218310118,0.32957324385643,0.00164265744388103,0.339983880519867,0.00267945043742657,0.340016961097717,0.00932176224887371,0.282562553882599,0.0149328727275133,0.286833524703979,0.00782670080661774,0.29491400718689,0.0245068799704313,0.375747919082642,0.00496767275035381,0.381829619407654,0.00658623687922955,0.378916919231415,0.0142720770090818,0.372400999069214,0.0128880869597197,0.381829619407654,0.00658623687922955,0.367996096611023,0.00363294593989849,0.375747919082642,0.00496767275035381,0.366199493408203,0.0117941331118345,0.347174108028412,0.00177638046443462,0.360244274139404,0.00229762308299541,0.357345312833786,0.0106996428221464,0.346948206424713,0.00954805128276348,0.339983880519867,0.00267945043742657,0.347174108028412,0.00177638046443462,0.387676119804382,0.00736920349299908,0.38507205247879,0.0241111051291227,0.360244274139404,0.00229762308299541,0.367996096611023,0.00363294593989849,0.313557296991348,0.00278086774051189,0.321202218532562,0.00144453160464764,0.307512998580933,0.0226696562021971,0.302199482917786,0.0232867132872343,0.404536962509155,0.00710201263427734,0.313681602478027,0.0224891137331724,0.32945853471756,0.0220965873450041,0.319850146770477,0.0223086308687925,0.339999198913574,0.0220773946493864,0.378044724464417,0.0232815276831388,0.372661828994751,0.0226649772375822,0.38507205247879,0.0241111051291227,0.366407036781311,0.0224847923964262,0.360152244567871,0.0223044287413359,0.350557506084442,0.0221146177500486,0.317214906215668,0.0379938036203384,0.313490509986877, 0.0386151820421219,0.703938961029053,0.0331950038671494,0.313490509986877,0.0386151820421219,0.297167092561722,0.0384169071912766,0.321538627147675,0.0378119498491287,0.317214906215668,0.0379938036203384,0.332596957683563,0.0374165922403336,0.325862169265747,0.037630096077919,0.339984953403473,0.0373973399400711,0.332596957683563,0.0374165922403336,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.38507205247879,0.0241111051291227,0.382867038249969,0.0394916981458664,0.366651654243469,0.038609966635704,0.362878859043121,0.037989005446434,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.347385406494141,0.0374348014593124,0.347385406494141,0.0374348014593124,0.339984953403473,0.0373973399400711,0.358494579792023,0.0378075689077377,0.354110538959503,0.0376259833574295,0.325862169265747,0.037630096077919,0.321538627147675,0.0378119498491287,0.0815478935837746,0.0943441465497017,0.10012923181057,0.0934071466326714,0.0946919694542885,0.133549630641937,0.0746126845479012,0.135112926363945,0.0685551837086678,0.175634980201721,0.0905952304601669,0.174597516655922,0.102365180850029,0.174296155571938,0.105971053242683,0.133070826530457,0.109894268214703,0.0930619165301323,0.100037261843681,0.0527186319231987,0.0855922624468803,0.0531381964683533,0.086815170943737,0.0119064440950751,0.11025383323431,0.0122729670256376,0.112813599407673,0.0533727705478668,0.0307689607143402,0.179142698645592,0.00968823488801718,0.18125419318676,0.00968837924301624,0.162867367267609,0.0351910516619682,0.144938215613365,0.0439458340406418,0.102697856724262,0.0620784312486649,0.0969298705458641,0.0548940673470497,0.137964382767677,0.0493200980126858,0.175954222679138,0.00968900322914124,0.116381399333477,0.0236353278160095,0.110444419085979,0.0974353924393654,0.397874981164932,0.0767800137400627,0.3960300385952,0.0803159698843956,0.360841691493988,0.0994318276643753,0.361493408679962,0.100778676569462,0.325431704521179,0.082710474729538,0.325567990541458,0.0642977505922318,0.327002167701721,0.0603899657726288, 0.360970288515091,0.0551942475140095,0.396054208278656,0.0352138951420784,0.397625893354416,0.0416047796607018,0.361343890428543,0.0414536148309708,0.327714294195175,0.024390472099185,0.327357679605484,0.021387729793787,0.362516313791275,0.00968751590698957,0.399711281061172,0.0293511375784874,0.21709132194519,0.0289650820195675,0.255444794893265,0.00990907941013575,0.256872415542603,0.00981438159942627,0.215683564543724,0.142737254500389,0.0973843336105347,0.127041012048721,0.0948601737618446,0.129295364022255,0.0544354841113091,0.149503201246262,0.0589263699948788,0.151618748903275,0.0120269088074565,0.136388346552849,0.175755336880684,0.121135868132114,0.174620106816292,0.124059028923512,0.133953675627708,0.139318093657494,0.13697461783886,0.130374178290367,0.401685774326324,0.115126051008701,0.399737745523453,0.116117157042027,0.36164179444313,0.13153663277626,0.362442433834076,0.131594985723495,0.326076984405518,0.117111593484879,0.325271606445313,0.130261689424515,0.480947494506836,0.11336737126112,0.479932516813278,0.0948325395584106,0.475276917219162,0.482197940349579,0.788249731063843,0.463784724473953,0.789690136909485,0.467778593301773,0.766460001468658,0.484445989131927,0.765471875667572,0.501217484474182,0.766036927700043,0.501217484474182,0.78749942779541,0.4436354637146,0.791092276573181,0.418812692165375,0.795489609241486,0.430117458105087,0.763640880584717,0.449691444635391,0.766350269317627,0.433767020702362,0.807889938354492,0.452981352806091,0.813898086547852,0.351521402597427,0.737044095993042,0.362615317106247,0.747118592262268,0.342220693826675,0.762571513652802,0.329009622335434,0.750962853431702,0.31134232878685,0.736860692501068,0.346684098243713,0.720956861972809,0.358914941549301,0.773779094219208,0.375819116830826,0.756049990653992,0.390104383230209,0.759525775909424,0.376913458108902,0.782650351524353,0.475399821996689,0.814791738986969,0.501217484474182,0.814460039138794,0.307069838047028,0.646129250526428,0.309363394975662,0.681446135044098,0.262198656797409,0.693688094615936,0.264183938503265, 0.649827718734741,0.0519732609391212,0.542807102203369,0.0317952558398247,0.531806290149689,0.0314385369420052,0.496714234352112,0.0516041032969952,0.506321668624878,0.0511102601885796,0.467373579740524,0.0311875678598881,0.465447962284088,0.00968782790005207,0.459737002849579,0.00968677457422018,0.496816545724869,0.00968725327402353,0.527951002120972,0.21603961288929,0.685846090316772,0.227189362049103,0.654802143573761,0.209496885538101,0.736544787883759,0.210480540990829,0.766390979290009,0.180360943078995,0.762358248233795,0.180587098002434,0.728609442710876,0.147159308195114,0.72433465719223,0.149045899510384,0.760874390602112,0.150005295872688,0.79359644651413,0.179242193698883,0.793860852718353,0.210585922002792,0.795929372310638,0.28072127699852,0.814849615097046,0.272635668516159,0.791431546211243,0.312514215707779,0.774936079978943,0.332940548658371,0.795567512512207,0.364027440547943,0.811450779438019,0.290119647979736,0.836820781230927,0.396806478500366,0.806380212306976,0.369099736213684,0.79438441991806,0.34860959649086,0.783651471138,0.330853521823883,0.770560622215271,0.26773676276207,0.767094790935516,0.307365268468857,0.754006028175354,0.264020204544067,0.742832243442535,0.307013958692551,0.711423337459564,0.263252139091492,0.71794581413269,0.180354237556458,0.690183460712433,0.210751488804817,0.707722187042236,0.165996581315994,0.65547502040863,0.178303793072701,0.649047911167145,0.143233969807625,0.644899129867554,0.146285206079483,0.684615612030029,0.0987158715724945,0.719783782958984,0.0965318381786346,0.674599766731262,0.119829408824444,0.679958701133728,0.120583757758141,0.696064591407776,0.121799007058144,0.72201144695282,0.119038693606853,0.642681837081909,0.0958872437477112,0.634599089622498,0.00980651844292879,0.716464400291443,0.00978614669293165,0.66802841424942,0.0351586751639843,0.66429203748703,0.0372161753475666,0.716217041015625,0.0570504702627659,0.718015670776367,0.0555768795311451,0.66778165102005,0.0544743277132511,0.624780058860779,0.0350936949253082,0.613005340099335,0.00976603757590055, 0.609531939029694,0.0629405453801155,0.765087306499481,0.0393272452056408,0.765570461750031,0.00982365664094687,0.766337871551514,0.00983760599046946,0.820343255996704,0.0440145917236805,0.80985289812088,0.0710003077983856,0.80626118183136,0.239791423082352,0.898277163505554,0.236446291208267,0.939195394515991,0.151079893112183,0.933522284030914,0.176326468586922,0.892461001873016,0.122237302362919,0.878098845481873,0.0809149593114853,0.916872501373291,0.0102637372910976,0.989653289318085,0.115163870155811,0.992122411727905,0.211690619587898,0.993125796318054,0.415333271026611,0.818501055240631,0.387286305427551,0.831947267055511,0.41546842455864,0.846982181072235,0.439741373062134,0.827718436717987,0.410976260900497,0.904417335987091,0.501217484474182,0.919939696788788,0.352309495210648,0.880317330360413,0.454185575246811,0.858373701572418,0.501217484474182,0.861873149871826,0.114238597452641,0.524628281593323,0.094663180410862,0.518452405929565,0.0948983505368233,0.557602524757385,0.115764856338501,0.565668821334839,0.136634364724159,0.572373449802399,0.132734045386314,0.527126491069794,0.215043380856514,0.845984935760498,0.178510099649429,0.841895222663879,0.178164780139923,0.821314513683319,0.211961939930916,0.821520924568176,0.149783536791801,0.817220985889435,0.14118766784668,0.835627019405365,0.467796355485916,0.833672404289246,0.501217484474182,0.833080947399139,0.333961099386215,0.690176248550415,0.338063687086105,0.704492568969727,0.319994002580643,0.762406945228577,0.106967367231846,0.796277046203613,0.101555146276951,0.763598561286926,0.125286817550659,0.761479794979095,0.127812370657921,0.794911503791809,0.122286036610603,0.821121215820313,0.13355228304863,0.813217341899872,0.0583165884017944,0.866383194923401,0.0905968174338341,0.844804763793945,0.0100092431530356,0.889490187168121,0.308331310749054,0.857646644115448,0.225619494915009,0.869794905185699,0.136700168251991,0.853235363960266,0.180956646800041,0.862995862960815,0.108508139848709,0.829957902431488,0.0914957895874977,0.80051189661026,0.0865048691630363, 0.763055205345154,0.080446183681488,0.719281196594238,0.0765467286109924,0.672050297260284,0.0756065100431442,0.629474997520447,0.0738978609442711,0.551786601543427,0.0742174461483955,0.511401236057281,0.0738710090517998,0.470202803611755,0.033253937959671,0.569975137710571,0.0527330823242664,0.580746829509735,0.00968670193105936,0.567264318466187,0.0750797986984253,0.588701546192169,0.095856711268425,0.596033275127411,0.115623489022255,0.604351580142975,0.134548157453537,0.609634280204773,0.167557135224342,0.6291224360466,0.157799005508423,0.616036772727966,0.161185190081596,0.473200917243958,0.161065593361855,0.401386797428131,0.166490957140923,0.50990504026413,0.169973090291023,0.545315146446228,0.0482087880373001,0.0553864762187004,0.0514002256095409,0.0123086553066969,0.0693893358111382,0.0123125147074461,0.06648950278759,0.0529900230467319,0.0297476015985012,0.0598248317837715,0.0330999195575714,0.0108155058696866,0.00985630229115486,0.0624315738677979,0.0096901785582304,0.0116660194471478,0.479233831167221,0.491158962249756,0.482594698667526,0.493434250354767,0.48129540681839,0.49524849653244,0.477567881345749,0.492649674415588,0.485568106174469,0.495631724596024,0.484964698553085,0.496935814619064,0.484546482563019,0.496832817792892,0.484748840332031,0.496134787797928,0.470380187034607,0.496346801519394,0.472461044788361,0.494007080793381,0.473622858524323,0.497089922428131,0.472511112689972,0.499588429927826,0.477321118116379,0.490724265575409,0.473949462175369,0.50080019235611,0.474925637245178,0.498254597187042,0.478578418493271,0.500102758407593,0.47782027721405,0.50287926197052,0.483742117881775,0.493971526622772,0.484021455049515,0.492020517587662,0.484892517328262,0.4936842918396,0.482806086540222,0.495818644762039,0.482784807682037,0.498641043901443,0.46024489402771,0.598241567611694,0.464173346757889,0.595858812332153,0.467841416597366,0.597246944904327,0.4638811647892,0.599443018436432,0.45723769068718,0.602931201457977,0.460277587175369,0.603829085826874,0.457439303398132,0.607026278972626,0.453061938285828, 0.604852259159088,0.441935896873474,0.60225111246109,0.447934746742249,0.606464505195618,0.438737660646439,0.606623768806458,0.43681389093399,0.602447628974915,0.460912555456162,0.596045732498169,0.460563272237778,0.59519624710083,0.464558780193329,0.594171106815338,0.465308725833893,0.591814696788788,0.456114232540131,0.599649965763092,0.454083263874054,0.598669648170471,0.457835346460342,0.597256779670715,0.452126681804657,0.600805759429932,0.450356543064117,0.599263846874237,0.456545442342758,0.596942842006683,0.452234953641891,0.598526954650879,0.45351654291153,0.598125040531158,0.449195057153702,0.585614562034607,0.446986258029938,0.591293394565582,0.443273335695267,0.591159403324127,0.444536477327347,0.585182011127472,0.454267919063568,0.58619886636734,0.456501066684723,0.578072965145111,0.467180639505386,0.587027430534363,0.46179860830307,0.589179933071136,0.46376696228981,0.590626537799835,0.468947619199753,0.588848888874054,0.469821959733963,0.590720057487488,0.458592653274536,0.593266367912292,0.456740140914917,0.592226505279541,0.459910750389099,0.594242215156555,0.41293665766716,0.585261464118958,0.401594787836075,0.574303030967712,0.404714316129684,0.568488657474518,0.420402824878693,0.569514751434326,0.424696117639542,0.584524631500244,0.452022284269333,0.575450241565704,0.446987628936768,0.573945760726929,0.453636854887009,0.567276835441589,0.458332031965256,0.56972348690033,0.448550432920456,0.564761102199554,0.425953894853592,0.590969145298004,0.417538046836853,0.591532230377197,0.434548676013947,0.59104460477829,0.435265958309174,0.584786474704742,0.451215982437134,0.591439068317413,0.468988686800003,0.586516201496124,0.471211850643158,0.585799098014832,0.464130789041519,0.574481248855591,0.41027507185936,0.588145554065704,0.414154320955276,0.591885805130005,0.412375539541245,0.592447876930237,0.407557338476181,0.590301632881165,0.231502577662468,0.0281520616263151,0.224802851676941,0.0253939107060432,0.225195795297623,0.0252271872013807,0.226995065808296,0.0246402490884066,0.451271414756775,0.432894945144653, 0.449466496706009,0.432529091835022,0.44860252737999,0.430815666913986,0.452198028564453,0.431824028491974,0.486936450004578,0.428491830825806,0.487292796373367,0.431329309940338,0.474579989910126,0.431793808937073,0.474239408969879,0.429431796073914,0.448668867349625,0.433958023786545,0.446812003850937,0.431452989578247,0.449150800704956,0.429131597280502,0.449163466691971,0.432832092046738,0.452217400074005,0.425028115510941,0.448023527860641,0.425124973058701,0.449846714735031,0.42180073261261,0.452304512262344,0.428559124469757,0.44457545876503,0.42888531088829,0.438825666904449,0.424377381801605,0.446734696626663,0.417728900909424,0.473406285047531,0.436674684286118,0.470214456319809,0.436970621347427,0.469146311283112,0.43468576669693,0.474574953317642,0.434184193611145,0.466649025678635,0.434650510549545,0.465664684772491,0.432472974061966,0.466988295316696,0.437227576971054,0.464398205280304,0.435637295246124,0.464944064617157,0.430474698543549,0.47250360250473,0.423579126596451,0.484828889369965,0.421046584844589,0.487398117780685,0.433848947286606,0.486789584159851,0.436154007911682,0.501217484474182,0.431192547082901,0.493774384260178,0.431512624025345,0.493608266115189,0.428869485855103,0.501217484474182,0.428838104009628,0.458029717206955,0.431042522192001,0.458827406167984,0.432650059461594,0.45500648021698,0.427133232355118,0.462481766939163,0.42518225312233,0.481871008872986,0.415396600961685,0.491516411304474,0.414694547653198,0.492482930421829,0.421186536550522,0.501217484474182,0.421053141355515,0.501217484474182,0.415289789438248,0.501217544078827,0.434079885482788,0.493880182504654,0.433760166168213,0.49345263838768,0.435812801122665,0.501217544078827,0.436180949211121,0.211742982268333,0.023909218609333,0.209706857800484,0.0212504919618368,0.212244138121605,0.0196051429957151,0.459355056285858,0.435308665037155,0.214799404144287,0.018944913521409,0.213895171880722,0.0239184964448214,0.501217484474182,0.348170548677444,0.501217484474182,0.356616318225861,0.492787271738052,0.355532735586166,0.49262148141861, 0.34814915060997,0.484252631664276,0.348234623670578,0.484428137540817,0.354687720537186,0.484750002622604,0.362387210130692,0.492972820997238,0.363659828901291,0.501217484474182,0.364248543977737,0.426803350448608,0.329693704843521,0.417648881673813,0.337610006332397,0.387541741132736,0.341154366731644,0.396285176277161,0.331531822681427,0.437892705202103,0.323266088962555,0.41138830780983,0.321552902460098,0.411216408014297,0.346048533916473,0.428221493959427,0.345230996608734,0.423701614141464,0.353288114070892,0.40785750746727,0.354572117328644,0.43476328253746,0.337338447570801,0.48164290189743,0.33642652630806,0.491291463375092,0.334597945213318,0.492131561040878,0.341181963682175,0.483660280704498,0.342373341321945,0.501217484474182,0.340870589017868,0.501217484474182,0.333357214927673,0.453866332769394,0.355385631322861,0.454710364341736,0.349326729774475,0.455510318279266,0.36153057217598,0.493118613958359,0.376638799905777,0.485025435686111,0.375659793615341,0.501217484474182,0.376892805099487,0.490572988986969,0.603749871253967,0.49567723274231,0.603077828884125,0.495696365833282,0.60748964548111,0.491798728704453,0.606332421302795,0.496902287006378,0.617161929607391,0.501217484474182,0.606990218162537,0.501217484474182,0.617166340351105,0.501217484474182,0.600946843624115,0.489528506994247,0.646743297576904,0.501217484474182,0.645192682743073,0.501217484474182,0.663098394870758,0.490682452917099,0.659757673740387,0.489229291677475,0.635834336280823,0.501217484474182,0.627227783203125,0.495463669300079,0.4908167719841,0.498197495937347,0.489429593086243,0.498274862766266,0.491586059331894,0.495652198791504,0.492673933506012,0.501217484474182,0.487665742635727,0.501217484474182,0.489857941865921,0.476271003484726,0.486749470233917,0.481146961450577,0.486277997493744,0.482460796833038,0.482440233230591,0.474436938762665,0.483996838331223,0.493502765893936,0.512965023517609,0.493038713932037,0.518338978290558,0.48860102891922,0.517803728580475,0.488990634679794,0.512763679027557,0.481318533420563,0.515725910663605, 0.481752008199692,0.511382877826691,0.487992137670517,0.523194015026093,0.480681031942368,0.519992649555206,0.492639392614365,0.524070620536804,0.465786844491959,0.520238935947418,0.460235774517059,0.510744690895081,0.464293658733368,0.506558537483215,0.468583434820175,0.511570036411285,0.462920635938644,0.50396728515625,0.460425049066544,0.507065892219543,0.460172295570374,0.504644215106964,0.459170669317245,0.500967383384705,0.461418479681015,0.502527415752411,0.459167510271072,0.505554437637329,0.464643776416779,0.497254014015198,0.462819695472717,0.500143647193909,0.461788803339005,0.497069746255875,0.463410586118698,0.494133561849594,0.460004508495331,0.495555549860001,0.461734920740128,0.4916872382164,0.466730803251266,0.49430051445961,0.467558950185776,0.49669873714447,0.465747356414795,0.499693304300308,0.46726268529892,0.501860916614532,0.468664467334747,0.499498903751373,0.469973206520081,0.493829518556595,0.4701287150383,0.490765511989594,0.471658438444138,0.502818167209625,0.470865786075592,0.505837559700012,0.472881525754929,0.490361034870148,0.501217484474182,0.512217938899994,0.501217484474182,0.519481897354126,0.49709415435791,0.518804311752319,0.497376978397369,0.512773156166077,0.49684464931488,0.524944722652435,0.501217484474182,0.525681436061859,0.493818670511246,0.507853746414185,0.49756270647049,0.507012903690338,0.501217484474182,0.50541079044342,0.464414745569229,0.502251029014587,0.465834468603134,0.504219114780426,0.47330367565155,0.503924548625946,0.472770750522614,0.507217109203339,0.469801634550095,0.508528113365173,0.472077876329422,0.510245501995087,0.470851808786392,0.513880550861359,0.484880268573761,0.489789307117462,0.486940503120422,0.488621979951859,0.476745903491974,0.509508609771729,0.477226763963699,0.506046414375305,0.482196420431137,0.507206797599792,0.482696205377579,0.503442525863647,0.48134908080101,0.630328476428986,0.481170654296875,0.626220047473907,0.488354414701462,0.622370362281799,0.489358901977539,0.628006219863892,0.494083315134048,0.483844935894012,0.491256147623062, 0.476915508508682,0.489434659481049,0.507938206195831,0.497383594512939,0.482243657112122,0.501217484474182,0.481132954359055,0.489361554384232,0.494538813829422,0.325128048658371,0.399944394826889,0.326352119445801,0.412925750017166,0.316741645336151,0.417764067649841,0.313747018575668,0.406070977449417,0.302447259426117,0.4116031229496,0.305886775255203,0.42236602306366,0.309015154838562,0.433565020561218,0.319455206394196,0.428141266107559,0.328815460205078,0.422893911600113,0.402489453554153,0.555825173854828,0.417912930250168,0.552189290523529,0.434850603342056,0.571738362312317,0.436247289180756,0.559023976325989,0.473737359046936,0.452334135770798,0.47338804602623,0.455947071313858,0.462987095117569,0.455336064100266,0.465315997600555,0.451139748096466,0.210007190704346,0.0304422043263912,0.210067972540855,0.0356735177338123,0.206699714064598,0.0356940813362598,0.206937938928604,0.0304504241794348,0.207182615995407,0.0255429651588202,0.209824725985527,0.0255243927240372,0.4822678565979,0.451990038156509,0.482334017753601,0.454865694046021,0.474414169788361,0.44967046380043,0.482528269290924,0.449588984251022,0.203963056206703,0.0356878750026226,0.204277038574219,0.0304543077945709,0.20441073179245,0.0255487207323313,0.459164798259735,0.44783616065979,0.460751533508301,0.445270866155624,0.466897666454315,0.448186010122299,0.195499390363693,0.0347236543893814,0.195397198200226,0.0296410191804171,0.198049604892731,0.0301794391125441,0.198122575879097,0.0351337976753712,0.195016771554947,0.0255487207323313,0.198200166225433,0.0255445968359709,0.214566051959991,0.0297508873045444,0.213800445199013,0.0254999678581953,0.219195991754532,0.0254659559577703,0.220587119460106,0.0292847789824009,0.501217484474182,0.44990998506546,0.496990144252777,0.452025979757309,0.49675714969635,0.449678301811218,0.501217484474182,0.447972267866135,0.501217484474182,0.446466773748398,0.496303796768188,0.447701632976532,0.433788239955902,0.444716811180115,0.430933028459549,0.435815870761871,0.437134891748428,0.43305891752243,0.436065793037415, 0.439141184091568,0.444102138280869,0.433902680873871,0.439651817083359,0.44341042637825,0.482946783304214,0.445815354585648,0.486391931772232,0.444937944412231,0.486897677183151,0.447111040353775,0.482730001211166,0.447532385587692,0.48711895942688,0.449252754449844,0.202647149562836,0.0255501084029675,0.202709600329399,0.0304424669593573,0.202282652258873,0.0356740169227123,0.452303320169449,0.595157206058502,0.449829638004303,0.596961736679077,0.446092009544373,0.596919417381287,0.447789043188095,0.594562888145447,0.434560269117355,0.593930959701538,0.442626774311066,0.594208121299744,0.442202359437943,0.596844553947449,0.434751838445663,0.596874177455902,0.454000383615494,0.595577955245972,0.451315522193909,0.597167074680328,0.452616482973099,0.59735369682312,0.455207794904709,0.59620201587677,0.417805671691895,0.594120383262634,0.426588207483292,0.594070255756378,0.427318632602692,0.596871972084045,0.417428374290466,0.596787452697754,0.414451718330383,0.593963503837585,0.411277323961258,0.593697130680084,0.409726589918137,0.595237672328949,0.413331538438797,0.596067130565643,0.203989714384079,0.604087352752686,0.200303718447685,0.608899056911469,0.194960400462151,0.59354043006897,0.202077329158783,0.590561091899872,0.207685098052025,0.627979815006256,0.207851186394691,0.615776240825653,0.28031912446022,0.601229310035706,0.281888872385025,0.588157415390015,0.298740059137344,0.581589043140411,0.303318589925766,0.594673871994019,0.310258001089096,0.610885202884674,0.274060755968094,0.617785453796387,0.436125904321671,0.502088785171509,0.427190870046616,0.507001399993896,0.424751758575439,0.500659346580505,0.431828498840332,0.495267957448959,0.432091146707535,0.514046370983124,0.440564393997192,0.50927722454071,0.423955619335175,0.531980574131012,0.424863964319229,0.523976147174835,0.438764154911041,0.533499836921692,0.43836972117424,0.540246307849884,0.456710338592529,0.502383887767792,0.454432487487793,0.498293608427048,0.457314670085907,0.496145814657211,0.456355750560761,0.491178065538406,0.453537285327911,0.492234885692596, 0.454729199409485,0.506186008453369,0.452134788036346,0.500737726688385,0.445248991250992,0.516394197940826,0.449109017848969,0.493501037359238,0.3770592212677,0.511530339717865,0.395341336727142,0.505335509777069,0.399906843900681,0.515255928039551,0.38215184211731,0.522409617900848,0.403103172779083,0.457580745220184,0.399651020765305,0.448475569486618,0.407949894666672,0.448475688695908,0.41158401966095,0.456130981445313,0.415791839361191,0.464150249958038,0.407687902450562,0.467441350221634,0.412248939275742,0.476535826921463,0.420103818178177,0.472167402505875,0.461731225252151,0.530007302761078,0.462602615356445,0.535965740680695,0.457308411598206,0.533985912799835,0.456659108400345,0.526971399784088,0.450514912605286,0.523502349853516,0.451282411813736,0.532115399837494,0.451603144407272,0.539222538471222,0.457469254732132,0.540945172309875,0.464288532733917,0.542888343334198,0.457661122083664,0.505860328674316,0.457184731960297,0.509002327919006,0.389224141836166,0.461343437433243,0.380225956439972,0.464791893959045,0.376586109399796,0.454495221376419,0.385375559329987,0.45120832324028,0.384219616651535,0.47516793012619,0.393742144107819,0.471717953681946,0.464180529117584,0.550163984298706,0.457586973905563,0.548532128334045,0.451011598110199,0.546300649642944,0.42447355389595,0.456013649702072,0.428943812847137,0.458095073699951,0.430603742599487,0.464268088340759,0.406473875045776,0.432610303163528,0.395200788974762,0.429747611284256,0.392280846834183,0.410309553146362,0.402977168560028,0.410008281469345,0.418904811143875,0.443501979112625,0.421362906694412,0.44963064789772,0.424199432134628,0.511039316654205,0.420037776231766,0.504509687423706,0.440838187932968,0.519734144210815,0.439978301525116,0.527121722698212,0.42883488535881,0.51805591583252,0.398006647825241,0.481768757104874,0.387850672006607,0.485288798809052,0.407029718160629,0.500831186771393,0.380529165267944,0.432485222816467,0.371952384710312,0.43544214963913,0.370499223470688,0.418822288513184,0.37781286239624,0.415443569421768,0.201054319739342, 0.328943759202957,0.19858555495739,0.362459033727646,0.194066733121872,0.400505006313324,0.222001999616623,0.404542207717896,0.228697538375854,0.370299130678177,0.239228576421738,0.334151059389114,0.47111764550209,0.388600379228592,0.45722222328186,0.392100214958191,0.449003010988235,0.379386425018311,0.465141624212265,0.373148649930954,0.480849891901016,0.477602183818817,0.473442286252975,0.48038175702095,0.470644414424896,0.477858006954193,0.479219019412994,0.473979532718658,0.501217484474182,0.621466219425201,0.333696961402893,0.444640308618546,0.350159138441086,0.411816477775574,0.352119922637939,0.438143074512482,0.492398738861084,0.531009376049042,0.48774266242981,0.52998685836792,0.492066353559494,0.543190538883209,0.496440529823303,0.543886423110962,0.496213138103485,0.550446569919586,0.491710305213928,0.549349129199982,0.491001904010773,0.554452002048492,0.49575263261795,0.555952370166779,0.501217484474182,0.557397902011871,0.501217484474182,0.552447438240051,0.501217484474182,0.544171810150146,0.453852981328964,0.639889180660248,0.455535531044006,0.632960081100464,0.4599789083004,0.632004022598267,0.458466500043869,0.638869285583496,0.432011634111404,0.696159482002258,0.440278857946396,0.698622465133667,0.437991410493851,0.712048947811127,0.430076032876968,0.711585283279419,0.428070574998856,0.723195254802704,0.436609715223312,0.722978532314301,0.501217484474182,0.40213081240654,0.501217484474182,0.409124314785004,0.491299569606781,0.408062487840652,0.491190791130066,0.401223510503769,0.48050519824028,0.398528158664703,0.481649667024612,0.407312422990799,0.193419471383095,0.462701141834259,0.164990723133087,0.363219141960144,0.16680808365345,0.327523320913315,0.286728858947754,0.349548727273941,0.400545358657837,0.738191187381744,0.426133394241333,0.738450527191162,0.21879318356514,0.461241066455841,0.32410454750061,0.489508509635925,0.327547252178192,0.50098729133606,0.315378040075302,0.503985404968262,0.312631130218506,0.491998255252838,0.299920558929443,0.494387298822403,0.303234457969666,0.507564306259155, 0.323795080184937,0.552723526954651,0.314529329538345,0.535572290420532,0.327325254678726,0.530830085277557,0.336473524570465,0.543890774250031,0.346616804599762,0.538196682929993,0.338683813810349,0.5261110663414,0.456704407930374,0.646315693855286,0.452107012271881,0.647887945175171,0.464536070823669,0.466766983270645,0.474443674087524,0.467340111732483,0.462936520576477,0.479252189397812,0.277229607105255,0.217824921011925,0.241581752896309,0.226405739784241,0.249576345086098,0.194088324904442,0.285773247480392,0.190734341740608,0.239206910133362,0.257683545351028,0.271920174360275,0.245715707540512,0.462242901325226,0.484117984771729,0.456188857555389,0.485045969486237,0.456654071807861,0.480121642351151,0.295289486646652,0.372241377830505,0.301807701587677,0.366604387760162,0.29907363653183,0.379417419433594,0.28420028090477,0.374954879283905,0.389723122119904,0.630967140197754,0.388059854507446,0.638794481754303,0.38306400179863,0.634836733341217,0.381925702095032,0.627775609493256,0.298011392354965,0.43847993016243,0.309869855642319,0.459072947502136,0.299015671014786,0.46638286113739,0.292529553174973,0.44258850812912,0.316967159509659,0.452971667051315,0.320744782686234,0.468447804450989,0.322213560342789,0.478716522455215,0.311269551515579,0.480002343654633,0.309510052204132,0.468293398618698,0.298543721437454,0.481249272823334,0.339285999536514,0.390193492174149,0.332430601119995,0.38406577706337,0.34553062915802,0.378133207559586,0.322107434272766,0.377189338207245,0.348736435174942,0.367590546607971,0.411580830812454,0.71397852897644,0.40901193022728,0.72470486164093,0.413560897111893,0.701472520828247,0.438763022422791,0.38690972328186,0.428054243326187,0.380306392908096,0.438053220510483,0.367217063903809,0.419656217098236,0.370669603347778,0.421469330787659,0.398179769515991,0.410476386547089,0.387572854757309,0.433045715093613,0.398524165153503,0.468135535717011,0.527164697647095,0.468846648931503,0.534717619419098,0.487394273281097,0.702932059764862,0.475148141384125,0.706413865089417,0.477698147296906, 0.695646226406097,0.489235520362854,0.690752923488617,0.471963942050934,0.715892136096954,0.484821230173111,0.715489029884338,0.362939089536667,0.213961914181709,0.357133895158768,0.230894207954407,0.425741612911224,0.214600279927254,0.428500294685364,0.200194716453552,0.485726088285446,0.388182312250137,0.493305653333664,0.388829231262207,0.501217484474182,0.389918655157089,0.302939981222153,0.340055406093597,0.437431335449219,0.734705328941345,0.467016369104385,0.410864621400833,0.463254004716873,0.402404189109802,0.469163715839386,0.415586441755295,0.404393672943115,0.363205075263977,0.421030133962631,0.361777126789093,0.40040796995163,0.371928364038467,0.468417942523956,0.484878599643707,0.465561747550964,0.487221509218216,0.465925365686417,0.481828182935715,0.468969315290451,0.481411069631577,0.323331743478775,0.566769540309906,0.308236330747604,0.567524909973145,0.304794669151306,0.553280353546143,0.293213754892349,0.554766535758972,0.297332048416138,0.569299519062042,0.312312304973602,0.579344987869263,0.32694137096405,0.578083992004395,0.449951946735382,0.46206670999527,0.456721067428589,0.457421034574509,0.456684559583664,0.467997550964355,0.449551045894623,0.468299329280853,0.451848268508911,0.317642569541931,0.433441758155823,0.313215881586075,0.467679023742676,0.312448740005493,0.455423980951309,0.30615159869194,0.377936393022537,0.177911326289177,0.370060831308365,0.195814609527588,0.432175695896149,0.185537606477737,0.436169534921646,0.170761168003082,0.291218310594559,0.540478110313416,0.299852073192596,0.538245618343353,0.428655028343201,0.428106009960175,0.421070247888565,0.428913950920105,0.422869503498077,0.414875686168671,0.326436400413513,0.354353785514832,0.355494350194931,0.338049173355103,0.352467775344849,0.347542256116867,0.393451243638992,0.721174001693726,0.383961796760559,0.734700560569763,0.384206146001816,0.717263579368591,0.373747259378433,0.712896943092346,0.373748660087585,0.731234788894653,0.42435497045517,0.26073431968689,0.386669725179672,0.271769434213638,0.385051816701889,0.256161749362946, 0.422860234975815,0.246646866202354,0.351017981767654,0.266796290874481,0.348605990409851,0.287192016839981,0.232868358492851,0.487723737955093,0.236175060272217,0.477239191532135,0.245982334017754,0.477447748184204,0.241910219192505,0.488295197486877,0.239196360111237,0.462163627147675,0.248722180724144,0.464791476726532,0.429107695817947,0.629651725292206,0.422231644392014,0.62966924905777,0.424550741910934,0.617248296737671,0.430063545703888,0.618231475353241,0.324795454740524,0.364462554454803,0.350070267915726,0.35711681842804,0.379964172840118,0.69492244720459,0.382222503423691,0.687068521976471,0.390248894691467,0.686476171016693,0.387969553470612,0.696614503860474,0.396703600883484,0.698803961277008,0.398677319288254,0.687805593013763,0.196050852537155,0.489130884408951,0.199858978390694,0.509658873081207,0.217974618077278,0.497527092695236,0.218120351433754,0.480954796075821,0.428015202283859,0.488055527210236,0.42082753777504,0.494024246931076,0.467972844839096,0.607735753059387,0.47265961766243,0.606727957725525,0.472646355628967,0.610016405582428,0.466876566410065,0.611348032951355,0.46124130487442,0.612007200717926,0.464914441108704,0.607896208763123,0.469551742076874,0.59339714050293,0.497859537601471,0.46740049123764,0.497522413730621,0.458515614271164,0.501217484474182,0.455906838178635,0.501217484474182,0.467863768339157,0.412408739328384,0.411665737628937,0.438763916492462,0.449265450239182,0.48381519317627,0.463157504796982,0.487079262733459,0.469514667987823,0.272878289222717,0.383112549781799,0.270792573690414,0.364871382713318,0.257000356912613,0.371250480413437,0.263024091720581,0.394065022468567,0.476631700992584,0.603272020816803,0.483149766921997,0.602817118167877,0.480275452136993,0.606889843940735,0.375744760036469,0.301837414503098,0.332423180341721,0.328593254089355,0.265359193086624,0.622905850410461,0.266926825046539,0.617795288562775,0.2702476978302,0.612036168575287,0.414361983537674,0.429013162851334,0.386191070079803,0.161498546600342,0.393064945936203,0.148400202393532,0.419813513755798, 0.306846052408218,0.402586936950684,0.291272789239883,0.433295577764511,0.282709002494812,0.445586174726486,0.300024777650833,0.391065865755081,0.310447692871094,0.395610928535461,0.315145313739777,0.363746255636215,0.345867902040482,0.36840808391571,0.336335301399231,0.47922420501709,0.617010295391083,0.475803107023239,0.615390956401825,0.482694864273071,0.610966742038727,0.484408110380173,0.613590717315674,0.501217484474182,0.166535511612892,0.501217484474182,0.152602046728134,0.501217484474182,0.140166059136391,0.449215292930603,0.142430230975151,0.441206365823746,0.156042546033859,0.395672380924225,0.387095034122467,0.458220452070236,0.622030258178711,0.462605386972427,0.620937407016754,0.278090506792068,0.564976811408997,0.279696881771088,0.575964272022247,0.270896136760712,0.578040480613709,0.271811127662659,0.567629039287567,0.266203343868256,0.576393842697144,0.265943974256516,0.568144559860229,0.266908973455429,0.58812814950943,0.275202959775925,0.589625358581543,0.467129558324814,0.635601580142975,0.466017335653305,0.642482459545136,0.354424834251404,0.723931908607483,0.456026166677475,0.414144217967987,0.45041835308075,0.404593795537949,0.405249804258347,0.606295466423035,0.409416675567627,0.608170330524445,0.40856397151947,0.612634897232056,0.404115527868271,0.610196828842163,0.414332687854767,0.610048413276672,0.413683533668518,0.614764809608459,0.349701553583145,0.708651781082153,0.36001855134964,0.708393037319183,0.417751610279083,0.497432976961136,0.365970224142075,0.529744327068329,0.372576713562012,0.540349841117859,0.36357855796814,0.544247269630432,0.35642996430397,0.533631026744843,0.354874759912491,0.547999918460846,0.366552621126175,0.561306357383728,0.362563937902451,0.555879950523376,0.37013640999794,0.554775416851044,0.379312694072723,0.550020277500153,0.243524834513664,0.419456273317337,0.259563028812408,0.341925442218781,0.437432795763016,0.613888680934906,0.431500971317291,0.613120377063751,0.431846171617508,0.606023788452148,0.425698071718216,0.612313568592072,0.425704270601273,0.605306565761566, 0.501217484474182,0.294144034385681,0.501217484474182,0.302643477916718,0.439970761537552,0.407039493322372,0.285924017429352,0.421024113893509,0.279034823179245,0.42597895860672,0.277448713779449,0.414152085781097,0.28504091501236,0.408276051282883,0.271603107452393,0.421640366315842,0.274938404560089,0.429590076208115,0.433054804801941,0.410313785076141,0.425293564796448,0.651255249977112,0.422257989645004,0.655367314815521,0.419307500123978,0.64985990524292,0.268509924411774,0.494133800268173,0.262226343154907,0.499401420354843,0.254488229751587,0.492684096097946,0.265231400728226,0.484951108694077,0.278041660785675,0.499708026647568,0.278343915939331,0.484952181577683,0.277849525213242,0.471528232097626,0.267565786838531,0.470659285783768,0.444993376731873,0.395246028900146,0.501217484474182,0.244010835886002,0.501217484474182,0.228756099939346,0.290597587823868,0.483654379844666,0.292131692171097,0.497387856245041,0.288871198892593,0.470033824443817,0.237570196390152,0.295253187417984,0.269663393497467,0.277388006448746,0.134360909461975,0.216879770159721,0.171769082546234,0.221213519573212,0.169951125979424,0.257396996021271,0.13344369828701,0.254079282283783,0.176494777202606,0.18152979016304,0.268569856882095,0.443277060985565,0.275302708148956,0.446395814418793,0.40870475769043,0.477838039398193,0.410954743623734,0.509328961372375,0.343769133090973,0.401125103235245,0.293651700019836,0.402651727199554,0.295431703329086,0.415832072496414,0.299595832824707,0.398001730442047,0.38771665096283,0.532715559005737,0.393092393875122,0.541373729705811,0.405274093151093,0.64579039812088,0.406516551971436,0.639451205730438,0.420488446950912,0.641209423542023,0.420910120010376,0.663689732551575,0.402479320764542,0.664573550224304,0.342813700437546,0.474786818027496,0.339419513940811,0.464633941650391,0.357623398303986,0.459894865751266,0.360971063375473,0.470039784908295,0.364646941423416,0.479792892932892,0.346379995346069,0.484772205352783,0.49467745423317,0.567978799343109,0.501217484474182,0.569527208805084,0.501217484474182, 0.581961870193481,0.495227456092834,0.58217865228653,0.385649800300598,0.706987500190735,0.377214998006821,0.704260289669037,0.394971549510956,0.710026800632477,0.273045748472214,0.602044343948364,0.393205165863037,0.663254380226135,0.382122755050659,0.674534440040588,0.384355902671814,0.661967635154724,0.296638160943985,0.428021430969238,0.288652092218399,0.432118803262711,0.310305505990982,0.394708186388016,0.321444779634476,0.39164787530899,0.307777404785156,0.382615864276886,0.4891676902771,0.472997814416885,0.410572707653046,0.627865970134735,0.404774755239487,0.623824656009674,0.40531513094902,0.52427726984024,0.399433046579361,0.620576977729797,0.49665230512619,0.531988084316254,0.501217484474182,0.534095466136932,0.396306484937668,0.643359363079071,0.398301810026169,0.63652765750885,0.49812775850296,0.472122967243195,0.501217484474182,0.472218811511993,0.376178443431854,0.393833160400391,0.37608340382576,0.380703508853912,0.493731409311295,0.470972955226898,0.491464257240295,0.468043029308319,0.495689034461975,0.475906223058701,0.501217484474182,0.476440340280533,0.356311321258545,0.613328337669373,0.348607897758484,0.594915628433228,0.363050192594528,0.594190359115601,0.370536655187607,0.607834160327911,0.335940480232239,0.59661078453064,0.342507302761078,0.615126252174377,0.215484216809273,0.187936350703239,0.20827029645443,0.225878342986107,0.205953180789948,0.261036485433578,0.42704501748085,0.36206728219986,0.488539904356003,0.46180072426796,0.471894174814224,0.539346575737,0.203369945287704,0.295370101928711,0.261823207139969,0.163656026124954,0.294552147388458,0.168239936232567,0.307503521442413,0.150419905781746,0.274432301521301,0.143032908439636,0.487309128046036,0.45439800620079,0.47488471865654,0.639131128787994,0.47090545296669,0.6576327085495,0.461733937263489,0.661170661449432,0.468029916286469,0.629971146583557,0.469523549079895,0.619997501373291,0.501217484474182,0.701590299606323,0.501217484474182,0.7196164727211,0.501217484474182,0.692281246185303,0.168321147561073,0.292932838201523,0.332432955503464, 0.476730823516846,0.335748642683029,0.487260013818741,0.330077797174454,0.466749519109726,0.376115381717682,0.566758036613464,0.374847799539566,0.572431266307831,0.36667600274086,0.569853782653809,0.381727695465088,0.574301064014435,0.376049190759659,0.578174889087677,0.366558611392975,0.574970424175262,0.382638871669769,0.571193814277649,0.379072368144989,0.590071022510529,0.37355050444603,0.590665578842163,0.372890114784241,0.58712500333786,0.347628593444824,0.554496228694916,0.340634912252426,0.562039911746979,0.356814920902252,0.57310676574707,0.348280549049377,0.567269384860992,0.358123421669006,0.560753464698792,0.263709336519241,0.553782999515533,0.261855691671371,0.548583209514618,0.264216721057892,0.548290908336639,0.266429632902145,0.553984999656677,0.269564598798752,0.552717745304108,0.266780138015747,0.547309517860413,0.263816356658936,0.542017042636871,0.262259840965271,0.543336689472198,0.2602319419384,0.543765962123871,0.260859459638596,0.540223002433777,0.261090755462646,0.538363873958588,0.257522940635681,0.534157395362854,0.259028941392899,0.53913289308548,0.295258849859238,0.510779023170471,0.283791184425354,0.513582944869995,0.350375115871429,0.494961321353912,0.339348703622818,0.498114168643951,0.422594547271729,0.43661817908287,0.424882054328918,0.444061428308487,0.325080633163452,0.448534995317459,0.368270069360733,0.489867150783539,0.132799297571182,0.29050350189209,0.416755735874176,0.436606287956238,0.280827134847641,0.435282975435257,0.275128841400146,0.436012208461761,0.283499002456665,0.445293784141541,0.480180412530899,0.635680377483368,0.477187007665634,0.644223093986511,0.252425163984299,0.430010259151459,0.501217484474182,0.2682945728302,0.349794954061508,0.521806001663208,0.360010534524918,0.517899215221405,0.501217484474182,0.190227046608925,0.501217484474182,0.178747177124023,0.501217484474182,0.20223642885685,0.260599464178085,0.514479756355286,0.256796151399612,0.504115343093872,0.268888622522354,0.508005023002625,0.194324254989624,0.578022420406342,0.201496973633766,0.577669441699982, 0.20244337618351,0.562491357326508,0.19726288318634,0.559648871421814,0.357880592346191,0.583979785442352,0.344076335430145,0.585919797420502,0.340577870607376,0.576524019241333,0.331490516662598,0.587568581104279,0.375700116157532,0.625284254550934,0.34964644908905,0.637716174125671,0.362836837768555,0.630238831043243,0.368623048067093,0.638507008552551,0.361105680465698,0.641921401023865,0.327783495187759,0.616081535816193,0.329362779855728,0.640812933444977,0.32349705696106,0.600955128669739,0.217631310224533,0.631133437156677,0.21487845480442,0.630787432193756,0.212387561798096,0.625293850898743,0.473709642887115,0.612354099750519,0.481483072042465,0.60873019695282,0.48708587884903,0.603256583213806,0.269432693719864,0.432015895843506,0.256891041994095,0.410382449626923,0.248952463269234,0.396592259407043,0.25900200009346,0.591565132141113,0.262167990207672,0.590045988559723,0.263674229383469,0.597349107265472,0.259571343660355,0.599414467811584,0.257553577423096,0.607191622257233,0.261485666036606,0.608323216438293,0.256723374128342,0.540023922920227,0.255959361791611,0.544318795204163,0.25362104177475,0.542103469371796,0.253723204135895,0.539243817329407,0.253746032714844,0.53662246465683,0.230772539973259,0.596257269382477,0.226463139057159,0.599232077598572,0.223190784454346,0.590881705284119,0.226290732622147,0.587934195995331,0.224010944366455,0.580029368400574,0.221674546599388,0.583293735980988,0.240242123603821,0.586298584938049,0.234294891357422,0.581118404865265,0.236499160528183,0.576433539390564,0.242381155490875,0.584387898445129,0.23970240354538,0.512676656246185,0.245309188961983,0.520219922065735,0.240219458937645,0.51531982421875,0.239273637533188,0.506688356399536,0.248815760016441,0.510627448558807,0.225962579250336,0.517818987369537,0.230783015489578,0.518286406993866,0.233020633459091,0.520648658275604,0.247308030724525,0.596328854560852,0.244846031069756,0.597123324871063,0.244418829679489,0.594749271869659,0.245004162192345,0.593405544757843,0.243816509842873,0.591204047203064,0.24298232793808, 0.594250917434692,0.242809623479843,0.597199141979218,0.258366495370865,0.522912740707397,0.261361867189407,0.527828276157379,0.253559052944183,0.526773869991302,0.252166301012039,0.532157003879547,0.252272129058838,0.517155647277832,0.248498871922493,0.526167094707489,0.246541574597359,0.533163785934448,0.236875280737877,0.496512621641159,0.230314433574677,0.495677560567856,0.225124210119247,0.502799928188324,0.232766345143318,0.502957999706268,0.24463164806366,0.500946998596191,0.257448554039001,0.615832149982452,0.25401109457016,0.613976836204529,0.248411551117897,0.620868563652039,0.251430958509445,0.622918784618378,0.255876332521439,0.626167178153992,0.23435914516449,0.631500661373138,0.23409628868103,0.628883719444275,0.235163927078247,0.6348517537117,0.20957125723362,0.613715410232544,0.214327231049538,0.623618364334106,0.219556331634521,0.62903106212616,0.22072297334671,0.625545263290405,0.21557155251503,0.619672358036041,0.211379781365395,0.611953139305115,0.207589790225029,0.586882352828979,0.208536431193352,0.599839210510254,0.206952139735222,0.601609349250793,0.205243214964867,0.589574873447418,0.215473175048828,0.5384521484375,0.211631268262863,0.550809919834137,0.207162246108055,0.550697207450867,0.210986137390137,0.537395656108856,0.207460701465607,0.534687638282776,0.205439686775208,0.546644687652588,0.205095514655113,0.564034998416901,0.209388673305511,0.562025427818298,0.201985985040665,0.538635671138763,0.219293877482414,0.513242483139038,0.221451669931412,0.516944825649261,0.215071529150009,0.506274878978729,0.254914939403534,0.606690943241119,0.256816625595093,0.599995315074921,0.256855726242065,0.592948853969574,0.254385083913803,0.594473600387573,0.254103720188141,0.600487172603607,0.252405673265457,0.606421172618866,0.246059313416481,0.619285523891449,0.251061022281647,0.613401532173157,0.248395904898643,0.611956000328064,0.243940055370331,0.617452144622803,0.257395774126053,0.569385051727295,0.262029647827148,0.578317880630493,0.259419202804565,0.581843376159668,0.255384773015976,0.574461042881012, 0.253527164459229,0.578581690788269,0.256379812955856,0.583941102027893,0.254854172468185,0.586953341960907,0.251715183258057,0.581408977508545,0.250495582818985,0.583669424057007,0.252586930990219,0.589180946350098,0.253388464450836,0.564334332942963,0.254280596971512,0.558780610561371,0.24811165034771,0.562948226928711,0.251034557819366,0.569261848926544,0.248452201485634,0.567233562469482,0.246182546019554,0.569192171096802,0.250051856040955,0.573489964008331,0.248788878321648,0.576789557933807,0.245247796177864,0.573145031929016,0.244224891066551,0.577014088630676,0.247216925024986,0.580036044120789,0.252322226762772,0.552309632301331,0.25522044301033,0.551180958747864,0.257118821144104,0.556270599365234,0.259437024593353,0.554902017116547,0.257563680410385,0.549737930297852,0.245703503489494,0.555002629756927,0.237225398421288,0.570841073989868,0.238916873931885,0.56543892621994,0.251913994550705,0.543197274208069,0.250922501087189,0.540093004703522,0.248467519879341,0.541571795940399,0.249790892004967,0.544717073440552,0.250688314437866,0.537072002887726,0.24763910472393,0.537506401538849,0.214393556118011,0.606548607349396,0.212760329246521,0.608638525009155,0.209982588887215,0.597829699516296,0.211891561746597,0.596196055412292,0.211473748087883,0.585176527500153,0.209374666213989,0.585042536258698,0.222819730639458,0.620474576950073,0.221858292818069,0.622608721256256,0.216851323843002,0.616771876811981,0.218237549066544,0.614895462989807,0.218407347798347,0.603778302669525,0.221697419881821,0.610664904117584,0.224479451775551,0.615720272064209,0.216066122055054,0.595254361629486,0.215412884950638,0.586460292339325,0.228905200958252,0.606529951095581,0.232548207044601,0.60445249080658,0.231727793812752,0.607686042785645,0.230504646897316,0.610850393772125,0.225152626633644,0.56617534160614,0.227462217211723,0.565813839435577,0.22645828127861,0.571662127971649,0.223940715193748,0.573607683181763,0.226411551237106,0.577678143978119,0.234536290168762,0.605969190597534,0.233875691890717,0.56607973575592,0.232950657606125, 0.570640861988068,0.232073724269867,0.575256109237671,0.231197059154511,0.588892698287964,0.237189456820488,0.591893374919891,0.237336724996567,0.595524966716766,0.244382083415985,0.589306831359863,0.244991824030876,0.591436684131622,0.242798149585724,0.588410019874573,0.244986578822136,0.584898769855499,0.245530053973198,0.588036060333252,0.247132495045662,0.591059684753418,0.246422067284584,0.603806495666504,0.248588994145393,0.60055536031723,0.237464219331741,0.611816823482513,0.243116542696953,0.608250737190247,0.230851709842682,0.616897940635681,0.233172416687012,0.623659491539001,0.233890116214752,0.625871658325195,0.220388323068619,0.526651263237,0.224907353520393,0.526631414890289,0.219801917672157,0.53691554069519,0.223037585616112,0.538653016090393,0.227853357791901,0.528095424175262,0.218821376562119,0.551403224468231,0.215990722179413,0.549265801906586,0.213029339909554,0.561109840869904,0.215403333306313,0.562655985355377,0.223456159234047,0.556365847587585,0.219675451517105,0.569495916366577,0.227654695510864,0.54500287771225,0.236853122711182,0.529452800750732,0.24036206305027,0.530885219573975,0.24516998231411,0.600712597370148,0.240635320544243,0.596478283405304,0.236666560173035,0.606951236724854,0.234818741679192,0.610214471817017,0.239217072725296,0.607081055641174,0.222753763198853,0.567132115364075,0.225798010826111,0.55771267414093,0.227676644921303,0.558446526527405,0.231158971786499,0.549789130687714,0.22976852953434,0.547397971153259,0.232116475701332,0.534872353076935,0.234509080648422,0.536783158779144,0.235312029719353,0.542468965053558,0.243726685643196,0.536117315292358,0.24039551615715,0.593217134475708,0.244354352355003,0.540146946907043,0.246067300438881,0.543746411800385,0.234135419130325,0.562855124473572,0.237120807170868,0.5605788230896,0.241180345416069,0.557179033756256,0.243146851658821,0.562730967998505,0.22150231897831,0.575766265392303,0.216485753655434,0.578472197055817,0.212864190340042,0.574773192405701,0.208306819200516,0.574176669120789,0.210591584444046,0.573338508605957, 0.20490400493145,0.576801061630249,0.262077271938324,0.568364560604095,0.232297331094742,0.61225438117981,0.241980940103531,0.606370270252228,0.229368314146996,0.55963134765625,0.232693433761597,0.552434861660004,0.236758932471275,0.547004878520966,0.227803274989128,0.583609580993652,0.282910645008087,0.550420582294464,0.281387805938721,0.540865063667297,0.501217484474182,0.732586979866028,0.481241226196289,0.726257383823395,0.231136754155159,0.578619837760925,0.266314655542374,0.539498746395111,0.269383996725082,0.545041441917419,0.27250674366951,0.550742447376251,0.266310274600983,0.523253619670868,0.274089127779007,0.518052816390991,0.262923121452332,0.537236511707306,0.206884354352951,0.0403564274311066,0.210415467619896,0.0403781458735466,0.210261836647987,0.0452357679605484,0.207065179944038,0.0452124699950218,0.203315258026123,0.0451851710677147,0.20371849834919,0.0403403006494045,0.195720434188843,0.0451668575406075,0.195679143071175,0.0390134640038013,0.197987496852875,0.0398591347038746,0.198068544268608,0.0451661832630634,0.215416580438614,0.0398506745696068,0.215798825025558,0.0351260825991631,0.223657310009003,0.032985620200634,0.222789421677589,0.0394154377281666,0.220788449048996,0.0453576184809208,0.215014442801476,0.0452921651303768,0.201985210180283,0.0402988791465759,0.201748579740524,0.0451746918261051,0.472903102636337,0.442387491464615,0.470672339200974,0.44203582406044,0.205465197563171,0.0211086254566908,0.205632016062737,0.0104670785367489,0.209339529275894,0.0104447398334742,0.482626438140869,0.441878318786621,0.223122671246529,0.0184715408831835,0.226455360651016,0.0205363351851702,0.220601499080658,0.0239278674125671,0.231346622109413,0.0185728799551725,0.226372331380844,0.0233705323189497,0.229706168174744,0.0212572515010834,0.489617049694061,0.441806435585022,0.501217484474182,0.440979689359665,0.212016448378563,0.0104146599769592,0.214324578642845,0.0103602278977633,0.247461006045341,0.031983558088541,0.239241853356361,0.0356711186468601,0.237497732043266,0.0327511876821518,0.240590929985046, 0.0302449967712164,0.233432441949844,0.0322912111878395,0.234514683485031,0.0367978438735008,0.243493393063545,0.0221853256225586,0.237514734268188,0.0196024104952812,0.238972172141075,0.00976346712559462,0.246414765715599,0.0157933756709099,0.281111270189285,0.0347889922559261,0.281094282865524,0.0396638885140419,0.267389178276062,0.0391105338931084,0.264096647500992,0.0331232249736786,0.251705437898636,0.0390751101076603,0.254182755947113,0.0456284135580063,0.272370368242264,0.0457880906760693,0.28106626868248,0.0459569506347179,0.272883147001266,0.0126112662255764,0.262801587581635,0.0221515819430351,0.281128525733948,0.0237697251141071,0.40645843744278,0.441441804170609,0.397588700056076,0.439540505409241,0.382719755172729,0.441650688648224,0.374002814292908,0.444766283035278,0.354661762714386,0.449251472949982,0.336301058530808,0.454751938581467,0.327790468931198,0.45761114358902,0.319122761487961,0.459604471921921,0.411231845617294,0.601473867893219,0.415338307619095,0.603070378303528,0.430977672338486,0.602072775363922,0.425401419401169,0.601615011692047,0.41601437330246,0.599969506263733,0.412216156721115,0.598623931407928,0.407544791698456,0.599659562110901,0.409117013216019,0.59722763299942,0.406848639249802,0.595833003520966,0.404829978942871,0.597663998603821,0.397885471582413,0.591131269931793,0.402390539646149,0.591719090938568,0.501217484474182,0.28832483291626,0.215290203690529,0.526924908161163,0.212471514940262,0.523360669612885,0.476423621177673,0.53585821390152,0.475471526384354,0.526737093925476,0.480686753988266,0.528546452522278,0.479860544204712,0.538970291614532,0.487196564674377,0.542127370834351,0.486717760562897,0.548026204109192,0.479137778282166,0.543787002563477,0.485884845256805,0.552477777004242,0.478460192680359,0.547792017459869,0.398342102766037,0.548857510089874,0.409864366054535,0.532088220119476,0.415801554918289,0.539552390575409,0.382550716400146,0.350979149341583,0.380972117185593,0.361406147480011,0.456590473651886,0.343587905168533,0.459741652011871,0.338231563568115,0.394522905349731, 0.594241797924042,0.388592958450317,0.594755053520203,0.385493099689484,0.591158092021942,0.393362760543823,0.590012431144714,0.435312181711197,0.619296371936798,0.434167385101318,0.628051102161407,0.445204496383667,0.594385266304016,0.444400161504745,0.596800267696381,0.406950622797012,0.592125415802002,0.406196177005768,0.593341529369354,0.405059278011322,0.592564582824707,0.405582427978516,0.592008709907532,0.405600786209106,0.593001246452332,0.404552698135376,0.591963350772858,0.405773043632507,0.590996563434601,0.404329121112823,0.592994511127472,0.407326906919479,0.595288574695587,0.409323662519455,0.596360445022583,0.409506887197495,0.595877528190613,0.407545477151871,0.594961762428284,0.412317156791687,0.597441852092743,0.415769308805466,0.598550319671631,0.415508598089218,0.59749048948288,0.41232842206955,0.596617579460144,0.424952983856201,0.599785566329956,0.424496859312058,0.598211586475372,0.430287688970566,0.600171029567719,0.436194688081741,0.60035902261734,0.435777544975281,0.598439991474152,0.429710328578949,0.598368108272552,0.440378248691559,0.598431587219238,0.440814018249512,0.600271224975586,0.447460055351257,0.601802349090576,0.445935606956482,0.599716067314148,0.444951832294464,0.598448753356934,0.449290752410889,0.598506927490234,0.448870629072189,0.614127218723297,0.448063164949417,0.61873471736908,0.446979075670242,0.625903248786926,0.430810391902924,0.684168756008148,0.438606798648834,0.683472990989685,0.392973214387894,0.575230538845062,0.391044050455093,0.578322410583496,0.386530816555023,0.576504051685333,0.387778669595718,0.573802292346954,0.401825457811356,0.588669180870056,0.39847257733345,0.587213814258575,0.404286414384842,0.58902245759964,0.404732018709183,0.586495399475098,0.40243324637413,0.585566937923431,0.387052953243256,0.583745837211609,0.392016381025314,0.58442896604538,0.226701274514198,0.0306892916560173,0.223116517066956,0.028769388794899,0.222088485956192,0.0254302676767111,0.221120417118073,0.0254556033760309,0.227849587798119,0.0402252972126007,0.224356889724731,0.0453852340579033, 0.227975755929947,0.0454146414995193,0.232339054346085,0.0403009429574013,0.229763984680176,0.0360833033919334,0.238942861557007,0.039993092417717,0.233847469091415,0.0454700812697411,0.453469038009644,0.444026678800583,0.454990983009338,0.441459119319916,0.495478093624115,0.445911198854446,0.501217484474182,0.445214450359344,0.501217484474182,0.444043308496475,0.493575036525726,0.443947166204453,0.487170904874802,0.451631605625153,0.474833309650421,0.447666436433792,0.474688351154327,0.445992678403854,0.467901170253754,0.445926636457443,0.468470871448517,0.443499505519867,0.46215757727623,0.442844301462173,0.463207185268402,0.440705150365829,0.453730523586273,0.428465515375137,0.455083876848221,0.431433260440826,0.453037649393082,0.432792484760284,0.455766141414642,0.432847917079926,0.456142604351044,0.43447071313858,0.453260540962219,0.433866202831268,0.217333421111107,0.0239293780177832,0.218003019690514,0.0186981372535229,0.220243319869041,0.0100651541724801,0.235186323523521,0.0218654200434685,0.233757644891739,0.0230418797582388,0.237616896629334,0.0254300516098738,0.242316141724586,0.0275627803057432,0.249126091599464,0.0268830861896276,0.232672393321991,0.0240652542561293,0.216905862092972,0.0102447252720594,0.457910478115082,0.436933428049088,0.456608325242996,0.439431250095367,0.452972024679184,0.434108644723892,0.476060152053833,0.513375699520111,0.475660294294357,0.51748788356781,0.487679958343506,0.498322248458862,0.490860044956207,0.499078452587128,0.494643867015839,0.499040067195892,0.497927367687225,0.497964471578598,0.501217484474182,0.496065735816956,0.443172991275787,0.330648064613342,0.453872501850128,0.325159460306168,0.465222865343094,0.320234656333923,0.476838380098343,0.315612256526947,0.478240579366684,0.33123391866684,0.48957085609436,0.328725516796112,0.501217484474182,0.328412920236588,0.501217484474182,0.320486903190613,0.48423632979393,0.324492603540421,0.472286999225616,0.328719317913055,0.464353948831558,0.333096772432327,0.501217484474182,0.309323877096176,0.353256314992905,0.387614846229553, 0.351224392652512,0.39676758646965,0.359267950057983,0.366428166627884,0.361505270004272,0.355438798666,0.431425213813782,0.352603286504745,0.436192363500595,0.344864845275879,0.442400246858597,0.337279379367828,0.451123863458633,0.331127911806107,0.462115675210953,0.326009273529053,0.472947835922241,0.320725321769714,0.485775083303452,0.316210389137268,0.501217484474182,0.312692314386368,0.378212749958038,0.370791077613831,0.356526881456375,0.376810967922211,0.449114799499512,0.480562061071396,0.471268683671951,0.481281399726868,0.471382915973663,0.483712047338486,0.426917761564255,0.451093375682831,0.438884288072586,0.456659942865372,0.439050853252411,0.463375806808472,0.458632737398148,0.418401628732681,0.230515107512474,0.0332863517105579,0.263776034116745,0.0278717763721943,0.281109511852264,0.029763663187623,0.455447435379028,0.613698184490204,0.461176872253418,0.607461214065552,0.31014484167099,0.372056603431702,0.469300925731659,0.613281488418579,0.475654125213623,0.619162082672119,0.462174862623215,0.615136325359344,0.454893201589584,0.615127384662628,0.469121932983398,0.522948265075684,0.474085330963135,0.54494708776474,0.47541806101799,0.541368901729584,0.483697414398193,0.59377908706665,0.476507723331451,0.595537900924683,0.475493580102921,0.593526482582092,0.476472854614258,0.584216833114624,0.481943309307098,0.583335220813751,0.496906697750092,0.592666149139404,0.501217484474182,0.592716455459595,0.49269887804985,0.592913866043091,0.487994015216827,0.593320190906525,0.47515144944191,0.551290273666382,0.46428656578064,0.559167504310608,0.477970361709595,0.558032929897308,0.429362535476685,0.642415583133698,0.428407222032547,0.636958003044128,0.43358251452446,0.637615144252777,0.421345055103302,0.636095345020294,0.40807056427002,0.634144008159637,0.400779277086258,0.631777405738831,0.394329786300659,0.626969933509827,0.489609390497208,0.582650303840637,0.466997265815735,0.592516481876373,0.48529314994812,0.583053112030029,0.395267575979233,0.579927384853363,0.389361679553986,0.571574211120605,0.392384350299835, 0.571822285652161,0.391278833150864,0.56674200296402,0.38584104180336,0.568152189254761,0.397028148174286,0.570004343986511,0.396411925554276,0.573973119258881,0.395476281642914,0.577804327011108,0.399956315755844,0.581882774829865,0.399127244949341,0.584861636161804,0.404277205467224,0.583995163440704,0.401717782020569,0.579038083553314,0.387551516294479,0.55930882692337,0.470852971076965,0.60511726140976,0.46582219004631,0.60588526725769,0.461863815784454,0.606424033641815,0.462754368782043,0.602269887924194,0.482433915138245,0.500621020793915,0.485675573348999,0.497134745121002,0.486863881349564,0.495073527097702,0.486837327480316,0.490748256444931,0.468599408864975,0.48828262090683,0.465937495231628,0.491028606891632,0.472514390945435,0.492161482572556,0.475850403308868,0.493121534585953,0.475557953119278,0.492058485746384,0.476105570793152,0.491503328084946,0.379885703325272,0.562512040138245,0.381849259138107,0.581997931003571,0.317539542913437,0.590465128421783,0.334918409585953,0.569384872913361,0.366654515266418,0.585201740264893,0.368735045194626,0.591351807117462,0.375502020120621,0.606148779392242,0.381276160478592,0.603207767009735,0.382601201534271,0.599910140037537,0.46869570016861,0.599102854728699,0.488048583269119,0.566835701465607,0.478310078382492,0.56529712677002,0.481486529111862,0.566009342670441,0.468891799449921,0.568003058433533,0.483079433441162,0.562238812446594,0.441736340522766,0.6508509516716,0.443099319934845,0.641393959522247,0.436707884073257,0.662861704826355,0.444536477327347,0.636188507080078,0.444195955991745,0.685990154743195,0.451694816350937,0.662948250770569,0.455859243869781,0.686397790908813,0.446792870759964,0.662955343723297,0.463565587997437,0.699077606201172,0.465914875268936,0.68583732843399,0.479528933763504,0.682226479053497,0.415250480175018,0.688492596149445,0.490194171667099,0.678222596645355,0.501217484474182,0.681079626083374,0.443424135446548,0.721109509468079,0.465556085109711,0.724364459514618,0.436699062585831,0.475282102823257,0.441627323627472,0.480641216039658, 0.449221193790436,0.486495316028595,0.450500696897507,0.456229984760284,0.444747656583786,0.488665699958801,0.457050502300262,0.453559309244156,0.451128542423248,0.451401114463806,0.399688988924026,0.601028919219971,0.395557343959808,0.603044152259827,0.401520133018494,0.603557109832764,0.397775083780289,0.605274558067322,0.391045391559601,0.613648355007172,0.388856798410416,0.611885547637939,0.385833263397217,0.617456078529358,0.384191483259201,0.614179849624634,0.381968855857849,0.61333829164505,0.381994307041168,0.616924345493317,0.377559304237366,0.615345001220703,0.377717465162277,0.619114220142365,0.453052312135696,0.69899982213974,0.450595200061798,0.709463953971863,0.448690503835678,0.717064917087555,0.461590558290482,0.708617806434631,0.459197610616684,0.717583179473877,0.484157532453537,0.657522320747375,0.458281844854355,0.722664475440979,0.449240207672119,0.736516237258911,0.350436836481094,0.685488224029541,0.342186570167542,0.688434362411499,0.354533314704895,0.642992973327637,0.366459846496582,0.683792352676392,0.345113575458527,0.698618531227112,0.35297954082489,0.696595191955566,0.363107681274414,0.695823788642883,0.373042017221451,0.692492663860321,0.478392452001572,0.632810711860657,0.47537899017334,0.628075540065765,0.465634971857071,0.600776433944702,0.4607013463974,0.6013503074646,0.467728108167648,0.605709850788116,0.420156121253967,0.525910139083862,0.41503319144249,0.517742872238159,0.224730372428894,0.148758590221405,0.236501753330231,0.110625043511391,0.18185056746006,0.14250722527504,0.185530707240105,0.109633572399616,0.37346139550209,0.0869311541318893,0.392630517482758,0.123828202486038,0.338779896497726,0.121767081320286,0.501217484474182,0.0759221538901329,0.501217484474182,0.10337208211422,0.312297850847244,0.0819784253835678,0.357812911272049,0.0467570088803768,0.225523710250854,0.0511160641908646,0.239048555493355,0.069197878241539,0.220229715108871,0.0837782323360443,0.202512621879578,0.0622521676123142,0.253910630941391,0.0808602347970009,0.296892523765564,0.103776723146439,0.271889269351959, 0.0664022713899612,0.282192915678024,0.0489040315151215,0.501217484474182,0.038768582046032,0.18744669854641,0.0799505859613419,0.0839767381548882,0.290549427270889,0.10041893273592,0.29029780626297,0.101411908864975,0.253768563270569,0.0848447978496552,0.25423601269722,0.0683398991823196,0.254865169525146,0.0665296539664268,0.290164083242416,0.0446479879319668,0.291086256504059,0.0456852354109287,0.25545209646225,0.0273133106529713,0.292869091033936,0.00989232491701841,0.330061018466949,0.00982262566685677,0.35964959859848,0.117760799825192,0.290110468864441,0.118185892701149,0.253502160310745,0.00972452387213707,0.293279618024826,0.086449071764946,0.217229887843132,0.102871537208557,0.216655939817429,0.0657232105731964,0.217226922512054,0.04593625664711,0.216992482542992,0.119447059929371,0.216519430279732,0.23005722463131,0.645536243915558,0.232605770230293,0.641968369483948,0.253606915473938,0.637670755386353,0.255431085824966,0.641402006149292,0.234047010540962,0.638159394264221,0.179983109235764,0.612830758094788,0.194619461894035,0.626587271690369,0.172842100262642,0.597260653972626,0.262948870658875,0.630639612674713,0.261371582746506,0.629756987094879,0.254409164190292,0.632549405097961,0.202561557292938,0.627595901489258,0.187761083245277,0.610436201095581,0.184088960289955,0.595913290977478,0.186016827821732,0.559690952301025,0.169603124260902,0.577153384685516,0.150082409381866,0.598909080028534,0.194985255599022,0.610078930854797,0.189858838915825,0.595033466815948,0.184057980775833,0.580896258354187,0.189385414123535,0.580021500587463,0.192841663956642,0.559612929821014,0.208311080932617,0.519747853279114,0.205817341804504,0.516145884990692,0.209148585796356,0.508963048458099,0.24846325814724,0.048134870827198,0.256880909204483,0.0568513199687004,0.920886814594269,0.0943441465497017,0.927822172641754,0.135112926363945,0.907743036746979,0.133549630641937,0.902305722236633,0.0934071466326714,0.933879673480988,0.175634980201721,0.911839663982391,0.174597516655922,0.900069773197174,0.174296155571938,0.896463871002197, 0.133070826530457,0.892540693283081,0.0930619165301323,0.899459779262543,0.0527186319231987,0.913904666900635,0.0531381964683533,0.889621496200562,0.0533727705478668,0.892181158065796,0.0122729670256376,0.90484744310379,0.0128857409581542,0.971665978431702,0.179142698645592,0.967243790626526,0.144938215613365,0.99242639541626,0.162867367267609,0.99242639541626,0.18125419318676,0.958488881587982,0.102697856724262,0.947540760040283,0.137964382767677,0.940356433391571,0.0969298705458641,0.953114688396454,0.175954222679138,0.982716858386993,0.110444419085979,0.99242639541626,0.116381399333477,0.720242023468018,0.0502712763845921,0.744183838367462,0.0571306645870209,0.730545699596405,0.0664022713899612,0.904999554157257,0.397874981164932,0.903003036975861,0.361493408679962,0.922118842601776,0.360841691493988,0.925654828548431,0.3960300385952,0.901656270027161,0.325431704521179,0.919724345207214,0.325567990541458,0.938137114048004,0.327002167701721,0.942044794559479,0.360970288515091,0.947240591049194,0.396054208278656,0.960830092430115,0.361343890428543,0.967220902442932,0.397625893354416,0.96098130941391,0.327714294195175,0.978044390678406,0.327357679605484,0.981047213077545,0.362516313791275,0.99242627620697,0.399711281061172,0.973083853721619,0.21709132194519,0.992441117763519,0.215683564543724,0.992451965808868,0.256872415542603,0.973469853401184,0.255444794893265,0.859697699546814,0.0973843336105347,0.854890406131744,0.0628435388207436,0.872160255908966,0.0544354841113091,0.875393927097321,0.0948601737618446,0.847878456115723,0.0120269088074565,0.866046607494354,0.175755336880684,0.863116860389709,0.13697461783886,0.878375947475433,0.133953675627708,0.881299018859863,0.174620106816292,0.872060835361481,0.401685774326324,0.870898365974426,0.362442433834076,0.886317789554596,0.36164179444313,0.887309074401855,0.399737745523453,0.870840013027191,0.326076984405518,0.885323286056519,0.325271606445313,0.889067530632019,0.479932516813278,0.872173309326172,0.480947494506836,0.907602310180664,0.475276917219162,0.677415728569031, 0.655302762985229,0.693071663379669,0.681446135044098,0.668473958969116,0.690176248550415,0.517989039421082,0.765471875667572,0.534656465053558,0.766460001468658,0.538650333881378,0.789690136909485,0.520237267017365,0.788249731063843,0.552743673324585,0.766350269317627,0.572317540645599,0.763640880584717,0.583622336387634,0.795489609241486,0.558799624443054,0.791092276573181,0.568668007850647,0.807889938354492,0.549453735351563,0.813898086547852,0.673425436019897,0.750962853431702,0.660214364528656,0.762571513652802,0.639819741249084,0.747118592262268,0.650913596153259,0.737044095993042,0.65575098991394,0.720956861972809,0.691092789173126,0.736860692501068,0.626615941524506,0.756049990653992,0.64352011680603,0.773779094219208,0.625521540641785,0.782650351524353,0.612330555915833,0.759525775909424,0.527035295963287,0.814791738986969,0.738251090049744,0.649827718734741,0.740236341953278,0.693688094615936,0.695365250110626,0.646129250526428,0.950461506843567,0.542807102203369,0.95083075761795,0.506321668624878,0.97099632024765,0.496714234352112,0.970639526844025,0.531806290149689,0.951324582099915,0.467373579740524,0.971247255802155,0.465447962284088,0.99242639541626,0.459737002849579,0.99242627620697,0.496816545724869,0.99242627620697,0.527951002120972,0.775245547294617,0.654802143573761,0.786395370960236,0.685846090316772,0.792938053607941,0.736544787883759,0.821847856044769,0.728609442710876,0.822074055671692,0.762358248233795,0.791954457759857,0.766390979290009,0.855275630950928,0.72433465719223,0.853389084339142,0.760874390602112,0.852429628372192,0.79359644651413,0.823192715644836,0.793860852718353,0.79184901714325,0.795929372310638,0.669494390487671,0.795567512512207,0.689920723438263,0.774936079978943,0.729799389839172,0.791431546211243,0.721713721752167,0.814849615097046,0.712315320968628,0.836820781230927,0.638407647609711,0.811450779438019,0.605628490447998,0.806380212306976,0.633335292339325,0.79438441991806,0.671581506729126,0.770560622215271,0.653825461864471,0.783651471138,0.734698235988617,0.767094790935516, 0.69506973028183,0.754006028175354,0.682441055774689,0.762406945228577,0.738414824008942,0.742832243442535,0.695421099662781,0.711423337459564,0.739182770252228,0.71794581413269,0.791683435440063,0.707722187042236,0.822080731391907,0.690183460712433,0.807431519031525,0.671294927597046,0.824131190776825,0.649047911167145,0.836438357830048,0.65547502040863,0.859201014041901,0.644899129867554,0.856149852275848,0.684615612030029,0.903718948364258,0.719783782958984,0.880635857582092,0.72201144695282,0.88260555267334,0.679958701133728,0.905903100967407,0.674599766731262,0.883396327495575,0.642681837081909,0.906547725200653,0.634599089622498,0.992440104484558,0.716464400291443,0.965218663215637,0.716217041015625,0.967276096343994,0.66429203748703,0.992437720298767,0.66802841424942,0.945384383201599,0.718015670776367,0.946857988834381,0.66778165102005,0.947960436344147,0.624780058860779,0.967341065406799,0.613005340099335,0.992435395717621,0.609531939029694,0.963107645511627,0.765570461750031,0.93949431180954,0.765087306499481,0.992442190647125,0.766337871551514,0.992443680763245,0.820343255996704,0.958420276641846,0.80985289812088,0.931434512138367,0.80626118183136,0.76264351606369,0.898277163505554,0.826108515262604,0.892461001873016,0.851355016231537,0.933522284030914,0.765988707542419,0.939195394515991,0.880197644233704,0.878098845481873,0.921519875526428,0.916872501373291,0.992493271827698,0.989653289318085,0.887271165847778,0.992122411727905,0.790744245052338,0.993125796318054,0.587101757526398,0.818501055240631,0.615148723125458,0.831947267055511,0.586966574192047,0.846982181072235,0.562693774700165,0.827718436717987,0.591458797454834,0.904417335987091,0.650125443935394,0.880317330360413,0.548249542713165,0.858373701572418,0.907771766185761,0.518452405929565,0.888196408748627,0.524628281593323,0.907536506652832,0.557602524757385,0.886670053005219,0.565668821334839,0.865800619125366,0.572373449802399,0.869700908660889,0.527126491069794,0.787391543388367,0.845984935760498,0.790472984313965,0.821520924568176,0.824270129203796, 0.821314513683319,0.823924779891968,0.841895222663879,0.852651476860046,0.817220985889435,0.861247301101685,0.835627019405365,0.53463876247406,0.833672404289246,0.664371252059937,0.704492568969727,0.895467638969421,0.796277046203613,0.874622583389282,0.794911503791809,0.877148151397705,0.761479794979095,0.900879859924316,0.763598561286926,0.868882715702057,0.813217341899872,0.880148947238922,0.821121215820313,0.911838173866272,0.844804763793945,0.94411826133728,0.866383194923401,0.992463767528534,0.889490187168121,0.69410365819931,0.857646644115448,0.776815533638,0.869794905185699,0.821478366851807,0.862995862960815,0.865734815597534,0.853235363960266,0.893926918506622,0.829957902431488,0.91093909740448,0.80051189661026,0.921988725662231,0.719281196594238,0.915929973125458,0.763055205345154,0.925888121128082,0.672050297260284,0.926828324794769,0.629474997520447,0.928217351436615,0.511401236057281,0.928537011146545,0.551786601543427,0.928563833236694,0.470202803611755,0.949701726436615,0.580746829509735,0.969180881977081,0.569975137710571,0.99242627620697,0.567264318466187,0.906578302383423,0.596033275127411,0.927355110645294,0.588701546192169,0.886811435222626,0.604351580142975,0.867886781692505,0.609634280204773,0.834877848625183,0.6291224360466,0.844635963439941,0.616036772727966,0.841369390487671,0.401386797428131,0.841249763965607,0.473200917243958,0.835943996906281,0.50990504026413,0.954226076602936,0.0553864762187004,0.935945332050323,0.0529900230467319,0.925211131572723,0.0123125147074461,0.946138083934784,0.0123086553066969,0.976604461669922,0.0598248317837715,0.976190030574799,0.0108155058696866,0.992445886135101,0.0624315738677979,0.992426514625549,0.0116660194471478,0.619833886623383,0.599910140037537,0.613842010498047,0.594755053520203,0.616941869258881,0.591158092021942,0.62336254119873,0.590071022510529,0.621158838272095,0.603207767009735,0.628884553909302,0.590665578842163,0.5232013463974,0.491158962249756,0.51984041929245,0.493434250354767,0.518413662910461,0.492020517587662,0.517554759979248,0.489789307117462, 0.521288216114044,0.486277997493744,0.524867177009583,0.492649674415588,0.521139621734619,0.49524849653244,0.51788866519928,0.496832817792892,0.517686188220978,0.496134787797928,0.519629061222076,0.495818644762039,0.519650220870972,0.498641043901443,0.517470359802246,0.496935814619064,0.51686692237854,0.495631724596024,0.529924035072327,0.499588429927826,0.528812289237976,0.497089922428131,0.529974043369293,0.494007080793381,0.532054841518402,0.496346801519394,0.526584684848785,0.493121534585953,0.52385675907135,0.500102758407593,0.524614751338959,0.50287926197052,0.519738852977753,0.503442525863647,0.520001292228699,0.500621020793915,0.52750951051712,0.498254597187042,0.528485655784607,0.50080019235611,0.525113999843597,0.490724265575409,0.52616411447525,0.486749470233917,0.518692970275879,0.493971526622772,0.541733741760254,0.6013503074646,0.538553893566132,0.599443018436432,0.542449414730072,0.597377598285675,0.546666443347931,0.59913158416748,0.53459370136261,0.597246944904327,0.539125740528107,0.59559965133667,0.550394773483276,0.600114583969116,0.545197427272797,0.602931201457977,0.554974913597107,0.601283967494965,0.549373090267181,0.604852259159088,0.544995844364166,0.607026278972626,0.542157530784607,0.603829085826874,0.560499250888824,0.60225111246109,0.55450040102005,0.606464505195618,0.565621137619019,0.602447628974915,0.563697457313538,0.606623768806458,0.538653910160065,0.594171106815338,0.541194617748261,0.594841361045837,0.54204398393631,0.595866918563843,0.538940668106079,0.593197047710419,0.541855931282043,0.594160914421082,0.543228149414063,0.595730006694794,0.544482231140137,0.595069169998169,0.602567613124847,0.597751200199127,0.599676549434662,0.595712423324585,0.604549467563629,0.591131269931793,0.605676889419556,0.593843758106232,0.544599771499634,0.597256779670715,0.5483518242836,0.598669648170471,0.552078545093536,0.599263846874237,0.545889616012573,0.596942842006683,0.550200164318085,0.598526954650879,0.548918545246124,0.598125040531158,0.599588215351105,0.591148734092712,0.597128868103027, 0.594264447689056,0.56716912984848,0.584786474704742,0.557553052902222,0.58552759885788,0.555447459220886,0.573945760726929,0.567584455013275,0.571738362312317,0.556053638458252,0.59172534942627,0.552742123603821,0.592133462429047,0.55038720369339,0.589016675949097,0.552980840206146,0.585355401039124,0.559680104255676,0.591504991054535,0.533042371273041,0.588678181171417,0.535254418849945,0.587027430534363,0.540636479854584,0.589179933071136,0.539877712726593,0.591317713260651,0.531247496604919,0.590207934379578,0.589498460292816,0.585261464118958,0.600840270519257,0.574303030967712,0.600717127323151,0.579038083553314,0.59815776348114,0.583995163440704,0.602478742599487,0.581882774829865,0.544170320034027,0.591281890869141,0.542705476284027,0.59266471862793,0.547219574451447,0.593171060085297,0.545421361923218,0.594057321548462,0.577739059925079,0.584524631500244,0.582032263278961,0.569514751434326,0.597720682621002,0.568488657474518,0.547216773033142,0.584902942180634,0.546279728412628,0.578418552875519,0.550412833690643,0.575450241565704,0.548798203468323,0.567276835441589,0.55388468503952,0.564761102199554,0.54410308599472,0.56972348690033,0.584896922111511,0.591532230377197,0.57648116350174,0.590969145298004,0.567886352539063,0.59104460477829,0.531223237514496,0.585799098014832,0.533446490764618,0.586516201496124,0.538384675979614,0.574582099914551,0.592159986495972,0.588145554065704,0.588280737400055,0.591885805130005,0.594877779483795,0.590301632881165,0.590059399604797,0.592447876930237,0.553766310214996,0.433958023786545,0.553052067756653,0.433223605155945,0.552515506744385,0.432269901037216,0.553284287452698,0.429131597280502,0.555623054504395,0.431452989578247,0.781480729579926,0.0238407216966152,0.785635948181152,0.0205701291561127,0.78778749704361,0.0210052970796824,0.788180410861969,0.0211669150739908,0.550889253616333,0.433342397212982,0.550237059593201,0.431824028491974,0.552255213260651,0.43320032954216,0.550130546092987,0.428559124469757,0.528195738792419,0.429431796073914,0.527855098247528,0.431793808937073, 0.515142202377319,0.431329309940338,0.515498638153076,0.428491830825806,0.517606258392334,0.421046584844589,0.529931485652924,0.423579126596451,0.552588284015656,0.42180073261261,0.55441153049469,0.425124973058701,0.548704445362091,0.428465515375137,0.547428667545319,0.427133232355118,0.555700302124023,0.417728900909424,0.563609480857849,0.424377381801605,0.557859659194946,0.42888531088829,0.528205871582031,0.436966925859451,0.527860164642334,0.434184193611145,0.532404124736786,0.434352338314056,0.532473921775818,0.437084794044495,0.536770403385162,0.432472974061966,0.53613418340683,0.434365004301071,0.536345481872559,0.437299400568008,0.536713838577271,0.435628056526184,0.539953351020813,0.42518225312233,0.543802380561829,0.418401628732681,0.544405460357666,0.431042522192001,0.537490963935852,0.430474698543549,0.533271431922913,0.415586441755295,0.520564198493958,0.415396600961685,0.515645444393158,0.436154007911682,0.515037000179291,0.433848947286606,0.508826792240143,0.428869485855103,0.508660674095154,0.431512624025345,0.509952008724213,0.421186536550522,0.543607711791992,0.432650059461594,0.510918617248535,0.414694547653198,0.508554935455322,0.433760166168213,0.508982479572296,0.435812801122665,0.803701341152191,0.0193919446319342,0.803917825222015,0.0151076214388013,0.807164669036865,0.0157685931771994,0.539635539054871,0.434577703475952,0.543233811855316,0.434054851531982,0.800690233707428,0.0149152260273695,0.80098283290863,0.0194009318947792,0.5187748670578,0.342373341321945,0.520524799823761,0.335891604423523,0.542693495750427,0.338231563568115,0.545844674110413,0.343587905168533,0.518182456493378,0.348234623670578,0.547724783420563,0.349326729774475,0.509813666343689,0.34814915060997,0.509647786617279,0.355532735586166,0.518006801605225,0.354687720537186,0.517684996128082,0.362387210130692,0.509462296962738,0.363659828901291,0.537293434143066,0.373148649930954,0.517409563064575,0.375659793615341,0.546924769878387,0.36153057217598,0.516861379146576,0.325295001268387,0.51665997505188,0.316210389137268,0.529487252235413, 0.320725321769714,0.529613316059113,0.328986793756485,0.540319383144379,0.326009273529053,0.591046690940857,0.321552902460098,0.606149852275848,0.331531822681427,0.575631737709045,0.329693704843521,0.564542353153229,0.323266088962555,0.614893317222595,0.341154366731644,0.584786117076874,0.337610006332397,0.591218590736389,0.346048533916473,0.57421350479126,0.345230996608734,0.567671656608582,0.337338447570801,0.594577550888062,0.354572117328644,0.578733384609222,0.353288114070892,0.510303556919098,0.341181963682175,0.511143624782562,0.334597945213318,0.548568725585938,0.355385631322861,0.509316444396973,0.376638799905777,0.505532741546631,0.617161929607391,0.514080703258514,0.622370362281799,0.51307612657547,0.628006219863892,0.506738662719727,0.60748964548111,0.518027007579803,0.613590717315674,0.51186203956604,0.603749871253967,0.510636389255524,0.606332421302795,0.506757736206055,0.603077828884125,0.519740343093872,0.610966742038727,0.515349209308624,0.603256583213806,0.520952045917511,0.60873019695282,0.519285380840302,0.602817118167877,0.52215963602066,0.606889843940735,0.506971418857574,0.4908167719841,0.506782948970795,0.492673933506012,0.504160225391388,0.491586059331894,0.504237592220306,0.489429593086243,0.507791221141815,0.499040067195892,0.504507660865784,0.497964471578598,0.521754086017609,0.519992649555206,0.521116614341736,0.515725910663605,0.52637505531311,0.513375699520111,0.526774942874908,0.51748788356781,0.514442920684814,0.523194015026093,0.513833999633789,0.517803728580475,0.520683109760284,0.511382877826691,0.513444483280182,0.512763679027557,0.525689244270325,0.509508609771729,0.508351743221283,0.483844935894012,0.515494585037231,0.488621979951859,0.5130735039711,0.494538813829422,0.527998268604279,0.483996838331223,0.51997435092926,0.482440233230591,0.508932292461395,0.512965023517609,0.509396374225616,0.518338978290558,0.509795665740967,0.524070620536804,0.533851623535156,0.511570036411285,0.532633423805237,0.508528113365173,0.536600589752197,0.504219114780426,0.538141429424286,0.506558537483215, 0.536648154258728,0.520238935947418,0.542199313640594,0.510744690895081,0.542010128498077,0.507065892219543,0.539514482021332,0.50396728515625,0.542262852191925,0.504644215106964,0.541016578674316,0.502527415752411,0.543264508247375,0.500967383384705,0.543267667293549,0.505554437637329,0.537791311740875,0.497254014015198,0.539024531841278,0.494133561849594,0.540646374225616,0.497069746255875,0.539615452289581,0.500143647193909,0.540700137615204,0.4916872382164,0.542430579662323,0.495555549860001,0.536687731742859,0.499693304300308,0.534876048564911,0.49669873714447,0.535704255104065,0.49430051445961,0.535172462463379,0.501860916614532,0.533770561218262,0.499498903751373,0.532461941242218,0.493829518556595,0.532306373119354,0.490765511989594,0.531569242477417,0.505837559700012,0.530776679515839,0.502818167209625,0.529553592205048,0.490361034870148,0.526329576969147,0.491503328084946,0.505058109760284,0.512773156166077,0.505340814590454,0.518804311752319,0.505590379238129,0.524944722652435,0.508616387844086,0.507853746414185,0.504872381687164,0.507012903690338,0.538020372390747,0.502251029014587,0.529131472110748,0.503924548625946,0.52966433763504,0.507217109203339,0.525208413600922,0.506046414375305,0.511575043201447,0.499078452587128,0.514755189418793,0.498322248458862,0.531583189964294,0.513880550861359,0.530357241630554,0.510245501995087,0.505051493644714,0.482243657112122,0.520238637924194,0.507206797599792,0.51300036907196,0.507938206195831,0.631898403167725,0.607834160327911,0.625338912010193,0.608973860740662,0.626932978630066,0.606148779392242,0.61860054731369,0.607771396636963,0.521264493465424,0.626220047473907,0.521086096763611,0.630328476428986,0.523210942745209,0.617010295391083,0.511178910732269,0.476915508508682,0.677306950092316,0.399944394826889,0.688687980175018,0.406070977449417,0.685693383216858,0.417764067649841,0.676082849502563,0.412925750017166,0.699987769126892,0.4116031229496,0.696548223495483,0.42236602306366,0.693419814109802,0.433565020561218,0.682979881763458,0.428141266107559,0.673619568347931, 0.422893911600113,0.584522068500519,0.552189290523529,0.599945485591888,0.555825173854828,0.566187679767609,0.559023976325989,0.604190707206726,0.578220844268799,0.606023013591766,0.573973119258881,0.537119090557098,0.451139748096466,0.539448022842407,0.455336064100266,0.529047071933746,0.455947071313858,0.528697848320007,0.452334135770798,0.528020918369293,0.44967046380043,0.535537421703339,0.448186010122299,0.543270349502563,0.44783616065979,0.541683673858643,0.445270866155624,0.805687427520752,0.026068763807416,0.805910706520081,0.0311520006507635,0.802753686904907,0.0311320591717958,0.802810668945313,0.0260607842355967,0.803300201892853,0.0212934203445911,0.805458128452301,0.0213114209473133,0.520101189613342,0.454865694046021,0.520167350769043,0.451990038156509,0.51990681886673,0.449588984251022,0.808181464672089,0.0260725058615208,0.80847579240799,0.0311459843069315,0.807737648487091,0.0213170051574707,0.545384645462036,0.453559309244156,0.816408693790436,0.0302112679928541,0.813950061798096,0.0306088570505381,0.813540637493134,0.0258060470223427,0.81650447845459,0.0252840928733349,0.810050845146179,0.0311325620859861,0.809650599956512,0.0260610226541758,0.812443971633911,0.0213130004703999,0.809072136878967,0.0213183704763651,0.816861152648926,0.0213170051574707,0.792396128177643,0.0249387566000223,0.79853767156601,0.0253906063735485,0.797706961631775,0.0304730515927076,0.790624797344208,0.029039679095149,0.795146405696869,0.0212367810308933,0.79989230632782,0.0212697386741638,0.505677878856659,0.449678301811218,0.506131231784821,0.447701632976532,0.515316069126129,0.449252754449844,0.515264093875885,0.451631605625153,0.505445063114166,0.452025979757309,0.515125930309296,0.45439800620079,0.573780000209808,0.428106009960175,0.571502089500427,0.435815870761871,0.565300226211548,0.43305891752243,0.568646788597107,0.444716811180115,0.566369235515594,0.439141184091568,0.519488394260406,0.445815354585648,0.51970511674881,0.447532385587692,0.51553738117218,0.447111040353775,0.516043126583099,0.444937944412231,0.506956994533539, 0.445911198854446,0.508860051631927,0.443947166204453,0.548965990543365,0.444026678800583,0.54744416475296,0.441459119319916,0.558332920074463,0.433902680873871,0.547321915626526,0.59620201587677,0.554645955562592,0.594562888145447,0.55642956495285,0.596746623516083,0.552605390548706,0.596961736679077,0.550131738185883,0.595157206058502,0.567874789237976,0.593930959701538,0.560240268707275,0.594208121299744,0.567683219909668,0.596874177455902,0.560232818126678,0.596844553947449,0.55111962556839,0.597167074680328,0.548434674739838,0.595577955245972,0.549818575382233,0.59735369682312,0.58462929725647,0.594120383262634,0.57584685087204,0.594070255756378,0.585006654262543,0.596787452697754,0.575116395950317,0.596871972084045,0.591157793998718,0.593697130680084,0.587983310222626,0.593963503837585,0.592354357242584,0.595149159431458,0.58910346031189,0.596067130565643,0.794583797454834,0.615776240825653,0.798445165157318,0.604087352752686,0.802131235599518,0.608899056911469,0.794749855995178,0.626928865909576,0.800357639789581,0.590561091899872,0.807474493980408,0.59354043006897,0.720546185970306,0.588157415390015,0.728374302387238,0.617785453796387,0.692176938056946,0.610885202884674,0.703694880008698,0.581589043140411,0.561870694160461,0.50927722454071,0.566309094429016,0.502088785171509,0.575244188308716,0.507001399993896,0.570343852043152,0.514046370983124,0.570606529712677,0.495267957448959,0.57768326997757,0.500659346580505,0.624622166156769,0.415443569421768,0.62190580368042,0.432485222816467,0.607234239578247,0.429747611284256,0.610154211521149,0.410309553146362,0.551423490047455,0.546300649642944,0.564065277576447,0.540246307849884,0.563670873641968,0.533499836921692,0.577571153640747,0.523976147174835,0.578479409217834,0.531980574131012,0.545120418071747,0.496145814657211,0.548002541065216,0.498293608427048,0.545724749565125,0.502383887767792,0.546079397201538,0.491178065538406,0.548897862434387,0.492234885692596,0.547705888748169,0.506186008453369,0.550300300121307,0.500737726688385,0.551920175552368,0.523502349853516, 0.557186126708984,0.516394197940826,0.55332612991333,0.493501037359238,0.607093632221222,0.505335509777069,0.602528095245361,0.515255928039551,0.591480255126953,0.509328961372375,0.595405340194702,0.500831186771393,0.604428291320801,0.481768757104874,0.61458432674408,0.485288798809052,0.625375807285309,0.511530339717865,0.634164929389954,0.489867150783539,0.620283246040344,0.522409617900848,0.613210916519165,0.461343437433243,0.617059409618378,0.45120832324028,0.625848948955536,0.454495221376419,0.622209131717682,0.464791893959045,0.60869288444519,0.471717953681946,0.618215322494507,0.47516793012619,0.599331855773926,0.457580745220184,0.594747126102448,0.467441350221634,0.582397282123566,0.504509687423706,0.584683418273926,0.497432976961136,0.590850949287415,0.456130981445313,0.594485104084015,0.448475688695908,0.602783858776093,0.448475569486618,0.586643278598785,0.464150249958038,0.58233118057251,0.472167402505875,0.59018611907959,0.476535826921463,0.581607520580292,0.494024246931076,0.574419856071472,0.488055527210236,0.545776069164276,0.526971399784088,0.545250415802002,0.509002327919006,0.540703892707825,0.530007302761078,0.545126736164093,0.533985912799835,0.539832472801209,0.535965740680695,0.551152646541595,0.532115399837494,0.550831854343414,0.539222538471222,0.544965982437134,0.540945172309875,0.538146555423737,0.542888343334198,0.544773995876312,0.505860328674316,0.644811630249023,0.459894865751266,0.641463935375214,0.470039784908295,0.637788116931915,0.479792892932892,0.544848084449768,0.548532128334045,0.538254618644714,0.550163984298706,0.576072037220001,0.464334219694138,0.577961444854736,0.456013649702072,0.563395798206329,0.489133596420288,0.559314846992493,0.493760287761688,0.599457859992981,0.410008281469345,0.595961213111877,0.432610303163528,0.581072092056274,0.44963064789772,0.583530247211456,0.443501979112625,0.587401807308197,0.517742872238159,0.578235626220703,0.511039316654205,0.561596930027008,0.519734144210815,0.562456846237183,0.527121722698212,0.573600172996521,0.51805591583252,0.594312787055969, 0.478052079677582,0.631935775279999,0.418822288513184,0.630482614040375,0.43544214963913,0.652275800704956,0.411816477775574,0.65031510591507,0.438143074512482,0.801380693912506,0.328943759202957,0.803849577903748,0.362459033727646,0.80836820602417,0.400505006313324,0.780432999134064,0.404542207717896,0.773737370967865,0.370299130678177,0.763206422328949,0.334151059389114,0.553431987762451,0.379386425018311,0.545212924480438,0.392100214958191,0.531317532062531,0.388600379228592,0.52158522605896,0.477602183818817,0.528992831707001,0.48038175702095,0.523216128349304,0.473979532718658,0.531790673732758,0.477858006954193,0.513205766677856,0.635834336280823,0.512906551361084,0.646743297576904,0.668738007545471,0.444640308618546,0.514692425727844,0.52998685836792,0.52174836397171,0.528546452522278,0.522574603557587,0.538970291614532,0.515238463878632,0.542127370834351,0.510036289691925,0.531009376049042,0.510368764400482,0.543190538883209,0.526963710784912,0.526737093925476,0.510724723339081,0.549349129199982,0.506222009658813,0.550446569919586,0.505994558334351,0.543886423110962,0.511433124542236,0.554452002048492,0.506682336330414,0.555952370166779,0.546899616718292,0.632960081100464,0.542456328868866,0.632004022598267,0.539829730987549,0.620937407016754,0.54421466588974,0.622030258178711,0.548582136631012,0.639232933521271,0.543968737125397,0.638213038444519,0.535305500030518,0.635601580142975,0.534405171871185,0.629971146583557,0.532911598682404,0.619997501373291,0.564443647861481,0.712048947811127,0.565825283527374,0.722978532314301,0.559011042118073,0.721109509468079,0.553744554519653,0.717064917087555,0.551839828491211,0.709463953971863,0.56215626001358,0.698622465133667,0.54938268661499,0.69899982213974,0.570423364639282,0.696159482002258,0.572358965873718,0.711585283279419,0.574364483356476,0.723195254802704,0.634026885032654,0.336335301399231,0.606824040412903,0.315145313739777,0.638688802719116,0.345867902040482,0.511244237422943,0.401223510503769,0.511135458946228,0.408062487840652,0.521929979324341,0.398528158664703, 0.520785450935364,0.407312422990799,0.809015512466431,0.462701141834259,0.835626900196075,0.327523320913315,0.837444245815277,0.363219141960144,0.71570611000061,0.349548727273941,0.619884252548218,0.350979149341583,0.640929698944092,0.355438798666,0.621462821960449,0.361406147480011,0.643167018890381,0.366428166627884,0.576829135417938,0.743505001068115,0.606243312358856,0.742436528205872,0.783641815185547,0.461241066455841,0.687056958675385,0.503985404968262,0.699200510978699,0.507564306259155,0.687905609607697,0.535572290420532,0.67510974407196,0.530830085277557,0.674887835979462,0.50098729133606,0.663751184940338,0.5261110663414,0.678330421447754,0.489508509635925,0.689803898334503,0.491998255252838,0.702514469623566,0.494387298822403,0.678640007972717,0.552723526954651,0.665961503982544,0.543890774250031,0.655818283557892,0.538196682929993,0.550328075885773,0.646356642246246,0.545730650424957,0.645659446716309,0.555642187595367,0.662955343723297,0.55074018239975,0.662948250770569,0.54070109128952,0.661170661449432,0.536417782306671,0.642482459545136,0.582621514797211,0.306846052408218,0.556848883628845,0.300024777650833,0.56913948059082,0.282709002494812,0.599847972393036,0.291272789239883,0.626690268516541,0.301837414503098,0.568993270397186,0.313215881586075,0.547011137008667,0.30615159869194,0.539498507976532,0.479252189397812,0.527991533279419,0.467340111732483,0.53789895772934,0.466766983270645,0.56572699546814,0.662861704826355,0.581524968147278,0.663689732551575,0.587184548377991,0.688492596149445,0.57162469625473,0.684168756008148,0.730514824390411,0.245715707540512,0.725205421447754,0.217824921011925,0.760853230953217,0.226405739784241,0.763228118419647,0.257683545351028,0.716661751270294,0.190734341740608,0.752858638763428,0.194088324904442,0.540192246437073,0.484117984771729,0.546246349811554,0.485045969486237,0.545781075954437,0.480121642351151,0.573421359062195,0.630761384963989,0.580574214458466,0.632090091705322,0.581090033054352,0.636724233627319,0.57528555393219,0.638006150722504,0.568174719810486, 0.630282640457153,0.570110380649567,0.638663291931152,0.707145512104034,0.372241377830505,0.718234777450562,0.374954879283905,0.717394053936005,0.408276051282883,0.708783328533173,0.402651727199554,0.703341960906982,0.383562445640564,0.703380763530731,0.375272423028946,0.702839195728302,0.398001730442047,0.700627326965332,0.366604387760162,0.619370996952057,0.634836733341217,0.620509326457977,0.627775609493256,0.626734912395477,0.625284254550934,0.63959813117981,0.630238831043243,0.633811950683594,0.638507008552551,0.62010395526886,0.648058176040649,0.614375114440918,0.638794481754303,0.629911959171295,0.645392656326294,0.612711787223816,0.630967140197754,0.704423606395721,0.43847993016243,0.692565202713013,0.459072947502136,0.685467898845673,0.452971667051315,0.709905385971069,0.44258850812912,0.703419327735901,0.46638286113739,0.681690335273743,0.468447804450989,0.692924976348877,0.468293398618698,0.691165506839752,0.480002343654633,0.680221438407898,0.478716522455215,0.703891277313232,0.481249272823334,0.626256585121155,0.393833160400391,0.607353746891022,0.388988137245178,0.663148999214172,0.390193492174149,0.656904399394989,0.378133207559586,0.653698563575745,0.367590546607971,0.680327594280243,0.377189338207245,0.588874161243439,0.701472520828247,0.590854167938232,0.71397852897644,0.593423187732697,0.72470486164093,0.564381837844849,0.367217063903809,0.5743807554245,0.380306392908096,0.563671886920929,0.38690972328186,0.58096569776535,0.398179769515991,0.591491878032684,0.38671338558197,0.569389283657074,0.398524165153503,0.533588409423828,0.534717619419098,0.534299552440643,0.527164697647095,0.51761382818222,0.715489029884338,0.515040755271912,0.702932059764862,0.527286946773529,0.706413865089417,0.53047114610672,0.715892136096954,0.513199508190155,0.690752923488617,0.524737000465393,0.695646226406097,0.639495849609375,0.213961914181709,0.645301043987274,0.230894207954407,0.576693415641785,0.214600279927254,0.57393479347229,0.200194716453552,0.509129405021667,0.388829231262207,0.516708970069885,0.388182312250137, 0.699494898319244,0.340055406093597,0.553194880485535,0.736516237258911,0.539181113243103,0.402404189109802,0.535418808460236,0.410864621400833,0.598041296005249,0.363205075263977,0.581404864788055,0.361777126789093,0.602026998996735,0.371928364038467,0.582778871059418,0.370669603347778,0.534017205238342,0.484878599643707,0.533465802669525,0.481411069631577,0.536509692668915,0.481828182935715,0.536873340606689,0.487221509218216,0.697640419006348,0.553280353546143,0.694198668003082,0.567524909973145,0.679103195667267,0.566769540309906,0.709221303462982,0.554766535758972,0.705102980136871,0.569299519062042,0.690122663974762,0.579344987869263,0.675493717193604,0.578083992004395,0.552483201026917,0.46206670999527,0.552884042263031,0.468299329280853,0.545750558376312,0.467997550964355,0.545714139938354,0.457421034574509,0.551934480667114,0.456229984760284,0.509736239910126,0.592913866043091,0.514441072940826,0.593320190906525,0.518737852573395,0.59377908706665,0.534756064414978,0.312448740005493,0.550586819648743,0.317642569541931,0.624498724937439,0.177911326289177,0.632374227046967,0.195814609527588,0.570259392261505,0.185537606477737,0.566265463829041,0.170761168003082,0.702582955360413,0.538245618343353,0.711216628551483,0.540478110313416,0.707176148891449,0.510779023170471,0.7186439037323,0.513582944869995,0.558239221572876,0.685990154743195,0.546575844287872,0.686397790908813,0.56382828950882,0.683472990989685,0.577715158462524,0.429526299238205,0.579565584659576,0.414875686168671,0.590026319026947,0.411665737628937,0.588073074817657,0.429013162851334,0.588102400302887,0.610048413276672,0.588751435279846,0.614764809608459,0.577884376049042,0.617248296737671,0.576736927032471,0.612313568592072,0.592419266700745,0.628039658069611,0.531582117080688,0.60511726140976,0.52580338716507,0.603272020816803,0.525927424430847,0.595537900924683,0.533739328384399,0.599102854728699,0.52119392156601,0.726257383823395,0.536878943443298,0.724364459514618,0.544153332710266,0.722664475440979,0.544595658779144,0.727666437625885,0.543237447738647, 0.717583179473877,0.575774192810059,0.733396053314209,0.597535908222198,0.733945846557617,0.505528330802917,0.592666149139404,0.507207572460175,0.58217865228653,0.512825727462769,0.582650303840637,0.64996725320816,0.347542256116867,0.646940648555756,0.338049173355103,0.675998687744141,0.354353785514832,0.670011878013611,0.328593254089355,0.599955558776855,0.664573550224304,0.603757619857788,0.687805593013763,0.578639090061188,0.654931128025055,0.581352412700653,0.648144960403442,0.597160935401917,0.64579039812088,0.525962293148041,0.584216833114624,0.520491898059845,0.583335220813751,0.524125039577484,0.56529712677002,0.5328528881073,0.567957103252411,0.60902464389801,0.731448829174042,0.618473291397095,0.734700560569763,0.60898369550705,0.721174001693726,0.618228852748871,0.717263579368591,0.628687739372253,0.712896943092346,0.628686308860779,0.731234788894653,0.578079998493195,0.26073431968689,0.579574763774872,0.246646866202354,0.617383241653442,0.256161749362946,0.615765333175659,0.271769434213638,0.651417076587677,0.266796290874481,0.653829038143158,0.287192016839981,0.769566655158997,0.487723737955093,0.760524749755859,0.488295197486877,0.756452679634094,0.477447748184204,0.766259908676147,0.477239191532135,0.747946858406067,0.492684096097946,0.737203598022461,0.484951108694077,0.753712773323059,0.464791476726532,0.734869182109833,0.470659285783768,0.763238549232483,0.462163627147675,0.61863100528717,0.748971521854401,0.572371542453766,0.618231475353241,0.677639544010162,0.364462554454803,0.652364730834961,0.35711681842804,0.622470855712891,0.69492244720459,0.614465415477753,0.696614503860474,0.612186133861542,0.686476171016693,0.620212435722351,0.687068521976471,0.60573136806488,0.698803961277008,0.609229803085327,0.663254380226135,0.62031227350235,0.674534440040588,0.618079125881195,0.661967635154724,0.806384027004242,0.489130884408951,0.802576005458832,0.509658873081207,0.784460425376892,0.497527092695236,0.784314572811127,0.480954796075821,0.652788519859314,0.637716174125671,0.673072278499603,0.640812933444977, 0.668446362018585,0.652064681053162,0.658736407756805,0.647830665111542,0.644785523414612,0.646827638149261,0.535558462142944,0.611348032951355,0.529788792133331,0.610016405582428,0.529775500297546,0.606727957725525,0.534462213516235,0.607735753059387,0.53752064704895,0.607896208763123,0.541193842887878,0.612007200717926,0.53288334608078,0.59339714050293,0.517141878604889,0.583053112030029,0.514386534690857,0.566835701465607,0.519355654716492,0.562238812446594,0.520948588848114,0.566009342670441,0.510970830917358,0.468043029308319,0.504575371742249,0.46740049123764,0.504912614822388,0.458515614271164,0.513895034790039,0.46180072426796,0.562783420085907,0.44341042637825,0.563671171665192,0.449265450239182,0.551306486129761,0.451401114463806,0.51535576581955,0.469514667987823,0.518619894981384,0.463157504796982,0.729556739330292,0.383112549781799,0.72498631477356,0.414152085781097,0.731642365455627,0.364871382713318,0.745434582233429,0.371250480413437,0.739410936832428,0.394065022468567,0.730831921100616,0.421640366315842,0.735508143901825,0.617795288562775,0.732187211513519,0.612036168575287,0.740949273109436,0.608323216438293,0.744986414909363,0.615832149982452,0.746558725833893,0.626167178153992,0.737075865268707,0.622905850410461,0.751004040241241,0.622918784618378,0.616243958473206,0.161498546600342,0.609370112419128,0.148400202393532,0.526632010936737,0.615390956401825,0.563550889492035,0.456659942865372,0.563384234905243,0.463375806808472,0.573517501354218,0.444475680589676,0.571678459644318,0.452297449111938,0.570330023765564,0.458963721990585,0.553219795227051,0.142430230975151,0.56122875213623,0.156042546033859,0.53313410282135,0.613281488418579,0.540260195732117,0.615136325359344,0.547541916370392,0.615127384662628,0.724344491958618,0.564976811408997,0.73062390089035,0.567629039287567,0.731538772583008,0.578040480613709,0.722738027572632,0.575964272022247,0.736490964889526,0.568144559860229,0.734790682792664,0.57938551902771,0.727232098579407,0.589625358581543,0.735525906085968,0.58812814950943,0.729389190673828, 0.602044343948364,0.593871057033539,0.612634897232056,0.593018352985382,0.608170330524445,0.598319411277771,0.610196828842163,0.59718531370163,0.606295466423035,0.603001892566681,0.620576977729797,0.5976602435112,0.623824656009674,0.525248110294342,0.644223093986511,0.531529664993286,0.6576327085495,0.518277525901794,0.657522320747375,0.527550399303436,0.639131128787994,0.524042665958405,0.632810711860657,0.645239233970642,0.726354837417603,0.523297429084778,0.543787002563477,0.523974895477295,0.547792017459869,0.516550183296204,0.552477777004242,0.515717327594757,0.548026204109192,0.552016735076904,0.404593795537949,0.546408891677856,0.414144217967987,0.536520302295685,0.68583732843399,0.522906243801117,0.682226479053497,0.538869500160217,0.699077606201172,0.587096691131592,0.603070378303528,0.591203212738037,0.601473867893219,0.597957968711853,0.603746056556702,0.594890177249908,0.599659562110901,0.642416477203369,0.708393037319183,0.652733445167542,0.708651781082153,0.636464715003967,0.529744327068329,0.646005034446716,0.533631026744843,0.638856410980225,0.544247269630432,0.629858374595642,0.540349841117859,0.647560179233551,0.547999918460846,0.635882377624512,0.561306357383728,0.632298588752747,0.554775416851044,0.639871120452881,0.555879950523376,0.623122274875641,0.550020277500153,0.758910119533539,0.419456273317337,0.660248458385468,0.688434362411499,0.651998221874237,0.685488224029541,0.742871940135956,0.341925442218781,0.570588827133179,0.606023788452148,0.576730728149414,0.605306565761566,0.570934057235718,0.613120377063751,0.565002143383026,0.613888680934906,0.567122876644135,0.619296371936798,0.562464416027069,0.407039493322372,0.716511011123657,0.421024113893509,0.723400115966797,0.42597895860672,0.72749662399292,0.429590076208115,0.569380283355713,0.410313785076141,0.832461833953857,0.545315146446228,0.575366377830505,0.649540305137634,0.571359276771545,0.643276154994965,0.576043486595154,0.642393529415131,0.540844619274139,0.708617806434631,0.733925044536591,0.494133800268173,0.740208625793457,0.499401420354843, 0.724393308162689,0.499708026647568,0.724091053009033,0.484952181577683,0.72458553314209,0.471528232097626,0.557441771030426,0.395246028900146,0.71030330657959,0.497387856245041,0.711837351322174,0.483654379844666,0.713563799858093,0.470033824443817,0.764864802360535,0.295253187417984,0.732771575450897,0.277388006448746,0.868074059486389,0.216879770159721,0.830665767192841,0.221213519573212,0.825940191745758,0.18152979016304,0.868991255760193,0.254079282283783,0.83248382806778,0.257396996021271,0.727132260799408,0.446395814418793,0.733865082263947,0.443277060985565,0.750009894371033,0.430010259151459,0.658665895462036,0.401125103235245,0.7070032954216,0.415832072496414,0.614718437194824,0.532715559005737,0.609342634677887,0.541373729705811,0.581946611404419,0.641209423542023,0.595918476581573,0.639451205730438,0.66301554441452,0.464633941650391,0.659621357917786,0.474786818027496,0.65605503320694,0.484772205352783,0.507757604122162,0.567978799343109,0.625220060348511,0.704260289669037,0.616785168647766,0.706987500190735,0.607463479042053,0.710026800632477,0.738760769367218,0.597349107265472,0.606128454208374,0.643359363079071,0.705796897411346,0.428021430969238,0.713782906532288,0.432118803262711,0.6809903383255,0.39164787530899,0.692129552364349,0.394708186388016,0.694657623767853,0.382615864276886,0.513267338275909,0.472997814416885,0.592570722103119,0.532088220119476,0.597119867801666,0.52427726984024,0.608105182647705,0.626969933509827,0.601655662059784,0.631777405738831,0.59436446428299,0.634144008159637,0.505782783031464,0.531988084316254,0.604133188724518,0.63652765750885,0.527056097984314,0.628075540065765,0.526780962944031,0.619162082672119,0.528725504875183,0.612354099750519,0.504307329654694,0.472122967243195,0.508703649044037,0.470972955226898,0.607617139816284,0.616623818874359,0.611389517784119,0.613648355007172,0.616601824760437,0.617456078529358,0.61321097612381,0.62142676115036,0.601883411407471,0.607725977897644,0.604659855365753,0.605274558067322,0.586633443832397,0.539552390575409,0.582278907299042, 0.525910139083862,0.60409289598465,0.548857510089874,0.506746053695679,0.475906223058701,0.659927606582642,0.615126252174377,0.646123707294464,0.613328337669373,0.65382719039917,0.594915628433228,0.666494607925415,0.59661078453064,0.639384865760803,0.594190359115601,0.786950767040253,0.187936350703239,0.794164657592773,0.225878342986107,0.796481728553772,0.261036485433578,0.575389981269836,0.36206728219986,0.530540823936462,0.539346575737,0.799065053462982,0.295370101928711,0.728002727031708,0.143032908439636,0.740611732006073,0.163656026124954,0.707882761955261,0.168239936232567,0.694931447505951,0.150419905781746,0.834113836288452,0.292932838201523,0.666686415672302,0.487260013818741,0.670002102851868,0.476730823516846,0.672357201576233,0.466749519109726,0.635759115219116,0.569853782653809,0.627587258815765,0.572431266307831,0.626319646835327,0.566758036613464,0.626385807991028,0.578174889087677,0.620707333087921,0.574301064014435,0.635876357555389,0.574970424175262,0.619796216487885,0.571193814277649,0.553564429283142,0.614127218723297,0.546987652778625,0.613698184490204,0.541038155555725,0.607486844062805,0.554371953010559,0.61873471736908,0.623060286045074,0.585730910301209,0.615139484405518,0.586510956287384,0.627572953701019,0.584397315979004,0.654806435108185,0.554496228694916,0.661800026893616,0.562039911746979,0.645620167255402,0.57310676574707,0.644311666488647,0.560753464698792,0.738725602626801,0.553782999515533,0.736005365848541,0.553984999656677,0.738218247890472,0.548290908336639,0.74057924747467,0.548583209514618,0.73287034034729,0.552717745304108,0.735654950141907,0.547309517860413,0.741344273090363,0.538363873958588,0.741575598716736,0.540223002433777,0.743405997753143,0.53913289308548,0.744912147521973,0.534157395362854,0.663086295127869,0.498114168643951,0.652640044689178,0.521806001663208,0.652059972286224,0.494961321353912,0.642424523830414,0.517899215221405,0.575988948345184,0.436658620834351,0.585679292678833,0.436606287956238,0.677354395389557,0.448534995317459,0.869635581970215,0.29050350189209, 0.727306187152863,0.436012208461761,0.721607804298401,0.435282975435257,0.718936026096344,0.445293784141541,0.522254765033722,0.635680377483368,0.742502927780151,0.515147149562836,0.733546376228333,0.508005023002625,0.745638847351074,0.504115343093872,0.805172026157379,0.559648871421814,0.808110773563385,0.578022420406342,0.800937950611115,0.577669441699982,0.799991488456726,0.562491357326508,0.59933203458786,0.604927599430084,0.600914776325226,0.603557109832764,0.661857128143311,0.576524019241333,0.641329348087311,0.641921401023865,0.635949313640594,0.646132469177246,0.674651563167572,0.616081535816193,0.678937911987305,0.600955128669739,0.787556529045105,0.630787432193756,0.790047466754913,0.625293850898743,0.784803748130798,0.631133437156677,0.733002305030823,0.432015895843506,0.745543956756592,0.410382449626923,0.753482401371002,0.396592259407043,0.568178594112396,0.476913928985596,0.743432939052582,0.591565132141113,0.742863595485687,0.599414467811584,0.744881391525269,0.607191622257233,0.748711884021759,0.539243817329407,0.748813927173615,0.542103469371796,0.744871377944946,0.549737930297852,0.783259034156799,0.585358440876007,0.781583309173584,0.593280434608459,0.776144206523895,0.587934195995331,0.778424024581909,0.580029368400574,0.779084026813507,0.600805878639221,0.771662473678589,0.596257269382477,0.763279438018799,0.589977383613586,0.762192845344543,0.586298584938049,0.768139958381653,0.581118404865265,0.770279467105865,0.584359467029572,0.760053813457489,0.584387898445129,0.765935778617859,0.576433539390564,0.76273250579834,0.512676656246185,0.757125735282898,0.520219922065735,0.753619313240051,0.510627448558807,0.763161361217499,0.506688356399536,0.766440510749817,0.513101100921631,0.764978349208832,0.516753375530243,0.769924759864807,0.511041343212128,0.755126893520355,0.596328854560852,0.757430851459503,0.593405544757843,0.757588863372803,0.597123324871063,0.758618354797363,0.591204047203064,0.759625375270844,0.597199141979218,0.748875975608826,0.526773869991302,0.738737106323242,0.526827156543732, 0.750268697738647,0.532157003879547,0.755893409252167,0.533163785934448,0.772120594978333,0.495677560567856,0.765559673309326,0.496512621641159,0.777310729026794,0.502799928188324,0.769668638706207,0.502957999706268,0.757803380489349,0.500946998596191,0.750162839889526,0.517155647277832,0.748423755168915,0.613976836204529,0.754023492336273,0.620868563652039,0.768338680267334,0.628883719444275,0.768075883388519,0.631500661373138,0.767271041870117,0.6348517537117,0.788107812404633,0.623618364334106,0.792863667011261,0.613715410232544,0.782878696918488,0.62903106212616,0.781711995601654,0.625545263290405,0.786863386631012,0.619672358036041,0.791055083274841,0.611953139305115,0.794845163822174,0.586882352828979,0.797191798686981,0.589574873447418,0.795482814311981,0.601609349250793,0.793898463249207,0.599839210510254,0.786961793899536,0.5384521484375,0.791448771953583,0.537395656108856,0.795272767543793,0.550697207450867,0.790803730487823,0.550809919834137,0.794974327087402,0.534687638282776,0.796995341777802,0.546644687652588,0.797339558601379,0.564034998416901,0.793046236038208,0.562025427818298,0.800448954105377,0.538635671138763,0.776189088821411,0.509871006011963,0.780489265918732,0.50741308927536,0.794123888015747,0.519747853279114,0.78996342420578,0.523360669612885,0.745618343353271,0.599995315074921,0.747520089149475,0.606690943241119,0.745579361915588,0.592948853969574,0.748049914836884,0.594473600387573,0.748331248760223,0.600487172603607,0.750029265880585,0.606421172618866,0.751373946666718,0.613401532173157,0.756375670433044,0.619285523891449,0.75403904914856,0.611956000328064,0.758494913578033,0.617452144622803,0.745039165019989,0.569385051727295,0.740405321121216,0.578317880630493,0.748907804489136,0.578581690788269,0.74605518579483,0.583941102027893,0.747580826282501,0.586953341960907,0.750719845294952,0.581408977508545,0.751939415931702,0.583669424057007,0.749848008155823,0.589180946350098,0.749046564102173,0.564334332942963,0.748154282569885,0.558780610561371,0.751519501209259,0.558091461658478,0.754323303699493, 0.562948226928711,0.756252467632294,0.569192171096802,0.75238311290741,0.573489964008331,0.757187187671661,0.573145031929016,0.7536461353302,0.576789557933807,0.758210062980652,0.577014088630676,0.755218088626862,0.580036044120789,0.745316207408905,0.556270599365234,0.747214615345001,0.551180958747864,0.75011283159256,0.552309632301331,0.742998003959656,0.554902017116547,0.750520944595337,0.543197274208069,0.752644062042236,0.544717073440552,0.75322961807251,0.553129255771637,0.754389643669128,0.545554876327515,0.756367683410645,0.543746411800385,0.763518154621124,0.56543892621994,0.765209555625916,0.570841073989868,0.751512467861176,0.540093004703522,0.753967463970184,0.541571795940399,0.788041472434998,0.606548607349396,0.790543437004089,0.596196055412292,0.792452394962311,0.597829699516296,0.789674639701843,0.608638525009155,0.79096120595932,0.585176527500153,0.793060302734375,0.585042536258698,0.77961528301239,0.620474576950073,0.784197390079498,0.614895462989807,0.785583674907684,0.616771876811981,0.780576646327972,0.622608721256256,0.780737578868866,0.610664904117584,0.784027636051178,0.603778302669525,0.777955532073975,0.615720272064209,0.786368906497955,0.595254361629486,0.787021994590759,0.586460292339325,0.776317715644836,0.607490241527557,0.77081823348999,0.604342699050903,0.773632943630219,0.611460328102112,0.770707249641418,0.607686042785645,0.77353423833847,0.575938582420349,0.773033022880554,0.570666193962097,0.778494298458099,0.573607683181763,0.772034585475922,0.565879464149475,0.777282297611237,0.56617534160614,0.767898619174957,0.605969190597534,0.76509827375412,0.595524966716766,0.758052945137024,0.589306831359863,0.757443070411682,0.591436684131622,0.75963681936264,0.588410019874573,0.757448375225067,0.584898769855499,0.7609783411026,0.590530693531036,0.75690495967865,0.588036060333252,0.755302429199219,0.591059684753418,0.753845989704132,0.60055536031723,0.756012916564941,0.603806495666504,0.759318470954895,0.608250737190247,0.764970779418945,0.611816823482513,0.769262611865997,0.623659491539001, 0.771583199501038,0.616897940635681,0.768544793128967,0.625871658325195,0.774834632873535,0.625822365283966,0.775369167327881,0.628407776355743,0.774522423744202,0.62355762720108,0.782633066177368,0.53691554069519,0.777527570724487,0.526631414890289,0.782046675682068,0.526651263237,0.779397308826447,0.538653016090393,0.774581551551819,0.528095424175262,0.786444306373596,0.549265801906586,0.783613681793213,0.551403224468231,0.789405584335327,0.561109840869904,0.787031650543213,0.562655985355377,0.778978824615479,0.556365847587585,0.7747802734375,0.54500287771225,0.782759487628937,0.569495916366577,0.762057423591614,0.522105038166046,0.75870817899704,0.536117315292358,0.763217926025391,0.607081055641174,0.760454118251801,0.606370270252228,0.758710741996765,0.604090332984924,0.76179963350296,0.596478283405304,0.76576840877533,0.606951236724854,0.767616212368011,0.610214471817017,0.774758338928223,0.558446526527405,0.77127593755722,0.549789130687714,0.770318448543549,0.534872353076935,0.76712292432785,0.542468965053558,0.765314221382141,0.5605788230896,0.770552158355713,0.561301410198212,0.767703771591187,0.556560337543488,0.761254608631134,0.557179033756256,0.763196170330048,0.551613688468933,0.75928807258606,0.562730967998505,0.783452332019806,0.577982842922211,0.785949230194092,0.578472197055817,0.789570689201355,0.574773192405701,0.791843414306641,0.573338508605957,0.794128179550171,0.574176669120789,0.797530949115753,0.576801061630249,0.74035769701004,0.568364560604095,0.773877859115601,0.615350604057312,0.77276086807251,0.580596804618835,0.721047222614288,0.540865063667297,0.719524383544922,0.550420582294464,0.728345930576324,0.518052816390991,0.737672626972198,0.573402166366577,0.729928195476532,0.550742447376251,0.732049882411957,0.545041441917419,0.735507309436798,0.536569118499756,0.802428007125854,0.0356927625834942,0.805737614631653,0.0356717109680176,0.805568158626556,0.0403792001307011,0.802571952342987,0.0404018014669418,0.808705031871796,0.0356560871005058,0.809082925319672,0.0403527356684208,0.816201508045197, 0.040334977209568,0.81400066614151,0.0403343327343464,0.814076602458954,0.0351896397769451,0.816240310668945,0.0343698561191559,0.810551404953003,0.0403425768017769,0.810329616069794,0.035615935921669,0.790193855762482,0.0347595326602459,0.797740399837494,0.0351814441382885,0.798117339611053,0.0404564738273621,0.792194843292236,0.0405199155211449,0.53291791677475,0.442317306995392,0.52921724319458,0.442893922328949,0.810481667518616,0.00669675087556243,0.810019254684448,0.016106640920043,0.806916117668152,0.00667508458718657,0.519808650016785,0.44228807091713,0.789860606193542,0.0144563298672438,0.791673839092255,0.0186267122626305,0.786527872085571,0.0160103365778923,0.78496915102005,0.0126781743019819,0.780645549297333,0.0138831287622452,0.787715196609497,0.019283777102828,0.783277094364166,0.0171568095684052,0.512817978858948,0.441806435585022,0.804205477237701,0.00664591463282704,0.800723671913147,0.00659316079691052,0.765522241592407,0.0275549869984388,0.772392332553864,0.0258695892989635,0.775485515594482,0.0282991323620081,0.77374130487442,0.0311297345906496,0.779550790786743,0.0278532486408949,0.778468608856201,0.0322219915688038,0.769489824771881,0.0180565062910318,0.766568601131439,0.0118600893765688,0.774011135101318,0.00601466232910752,0.775468468666077,0.0155526157468557,0.731871962547302,0.0302745942026377,0.748886585235596,0.0286598075181246,0.745594084262848,0.0344639308750629,0.731888949871063,0.0350003615021706,0.761277854442596,0.0344296060502529,0.758800566196442,0.0407824404537678,0.740612924098969,0.0409372039139271,0.731917083263397,0.0411009043455124,0.749075949192047,0.011897599324584,0.73112428188324,0.00565305398777127,0.750181674957275,0.0180237889289856,0.731854796409607,0.0195924378931522,0.595976650714874,0.441441804170609,0.604846298694611,0.439540505409241,0.61971527338028,0.441650688648224,0.628432214260101,0.444766283035278,0.647773206233978,0.449251472949982,0.666133999824524,0.454751938581467,0.674644470214844,0.45761114358902,0.683312296867371,0.459604471921921,0.571457386016846, 0.602072775363922,0.577033638954163,0.601615011692047,0.586420595645905,0.599969506263733,0.590218901634216,0.598623931407928,0.593318045139313,0.59722763299942,0.597605109214783,0.597663998603821,0.59558641910553,0.595833003520966,0.534706950187683,0.605709850788116,0.536800086498261,0.600776433944702,0.536612927913666,0.60588526725769,0.53968071937561,0.602269887924194,0.7750523686409,0.617736339569092,0.776716113090515,0.6349236369133,0.775926291942596,0.631264388561249,0.787144720554352,0.526924908161163,0.526011526584625,0.53585821390152,0.533313155174255,0.522948265075684,0.614883542060852,0.55930882692337,0.611156225204468,0.56674200296402,0.608698010444641,0.562641143798828,0.615587174892426,0.605524122714996,0.608781337738037,0.600448429584503,0.566242694854736,0.344864845275879,0.571009874343872,0.352603286504745,0.560034871101379,0.337279379367828,0.626351594924927,0.380703508853912,0.624222278594971,0.370791077613831,0.609072268009186,0.590012431144714,0.607911944389343,0.594241797924042,0.604224920272827,0.598623692989349,0.557230651378632,0.594385266304016,0.558034956455231,0.596800267696381,0.595484435558319,0.592125415802002,0.595707654953003,0.59357762336731,0.597375690937042,0.592564582824707,0.596645057201386,0.59293133020401,0.596734523773193,0.591949701309204,0.597717523574829,0.591709911823273,0.596661984920502,0.590996563434601,0.597940981388092,0.592635214328766,0.596780180931091,0.593577861785889,0.596887350082397,0.593988537788391,0.595108091831207,0.595288574695587,0.593111395835876,0.596360445022583,0.592928111553192,0.595877528190613,0.594889640808105,0.594961762428284,0.590117812156677,0.597441852092743,0.586665749549866,0.598550319671631,0.586926400661469,0.59749048948288,0.590106546878815,0.596617579460144,0.577481985092163,0.599785566329956,0.577938199043274,0.598211586475372,0.572147369384766,0.600171029567719,0.566240310668945,0.60035902261734,0.566657364368439,0.598439991474152,0.572724759578705,0.598368108272552,0.561621129512787,0.600271224975586,0.562056958675385,0.598431587219238, 0.556499540805817,0.599716067314148,0.55748325586319,0.598448753356934,0.553144335746765,0.598506927490234,0.555456042289734,0.625903248786926,0.557898581027985,0.636188507080078,0.600700795650482,0.600425899028778,0.610050678253174,0.571822285652161,0.609461724758148,0.575230538845062,0.614656269550323,0.573802292346954,0.615904092788696,0.576504051685333,0.611390948295593,0.578322410583496,0.603962302207947,0.587213814258575,0.611254632472992,0.587607204914093,0.601513266563416,0.589158654212952,0.597799897193909,0.587297677993774,0.598148584365845,0.58902245759964,0.599705874919891,0.588179767131805,0.600043892860413,0.586605548858643,0.606573462486267,0.584875881671906,0.610418677330017,0.58442896604538,0.615382134914398,0.583745837211609,0.789866745471954,0.0244391616433859,0.786282062530518,0.0263003204017878,0.790894746780396,0.0212021730840206,0.793561995029449,0.0212267395108938,0.788626372814178,0.0405466668307781,0.786432564258575,0.0354162827134132,0.785007476806641,0.0405751876533031,0.780644237995148,0.0356179289519787,0.785005211830139,0.0310160275548697,0.779135763645172,0.0406289286911488,0.774040341377258,0.0353194996714592,0.527746796607971,0.445992678403854,0.527601838111877,0.447666436433792,0.533964157104492,0.443499505519867,0.534533858299255,0.445926636457443,0.539227843284607,0.440705150365829,0.540277481079102,0.442844301462173,0.547351241111755,0.431433260440826,0.54939740896225,0.432792484760284,0.546669065952301,0.432847917079926,0.548735618591309,0.434145838022232,0.54629248380661,0.434023231267929,0.796643733978271,0.0146760009229183,0.797064661979675,0.0191876888275146,0.785785257816315,0.0059975259937346,0.777796864509583,0.0177463795989752,0.778417646884918,0.0193001013249159,0.770667135715485,0.0232694670557976,0.775366425514221,0.0212019570171833,0.763857126235962,0.022610554471612,0.780310869216919,0.0198789071291685,0.796755254268646,0.00648118136450648,0.544524669647217,0.436933428049088,0.548969268798828,0.435227334499359,0.545826852321625,0.439431250095367,0.53888350725174, 0.333364248275757,0.551311314105988,0.331127911806107,0.559262156486511,0.330648064613342,0.548562586307526,0.325159460306168,0.537212133407593,0.320234656333923,0.525596678256989,0.315612256526947,0.525531888008118,0.331768840551376,0.512864291667938,0.329260438680649,0.651210606098175,0.39676758646965,0.649178683757782,0.387614846229553,0.645908117294312,0.376810967922211,0.553320229053497,0.480562061071396,0.531052231788635,0.483712047338486,0.53116637468338,0.481281399726868,0.78246808052063,0.0288179237395525,0.749207198619843,0.0235689971596003,0.731873750686646,0.0254029966890812,0.539929330348969,0.606336653232574,0.699002683162689,0.377071857452393,0.528349757194519,0.54494708776474,0.527017056941986,0.541368901729584,0.526941537857056,0.593526482582092,0.524464726448059,0.558032929897308,0.527283668518066,0.551290273666382,0.538148462772369,0.559167504310608,0.618080079555511,0.622357606887817,0.535908222198486,0.593072652816772,0.607167541980743,0.579927384853363,0.613073348999023,0.571574211120605,0.616593956947327,0.568152189254761,0.606958627700806,0.577804327011108,0.599959552288055,0.58452832698822,0.597606182098389,0.585693180561066,0.633700013160706,0.591351807117462,0.51675945520401,0.497134745121002,0.515571177005768,0.495073527097702,0.515597701072693,0.490748256444931,0.536497592926025,0.491028606891632,0.533835768699646,0.48828262090683,0.529920756816864,0.492161482572556,0.526877224445343,0.492058485746384,0.62254935503006,0.562512040138245,0.620585858821869,0.581997931003571,0.635661423206329,0.578711628913879,0.667516589164734,0.569384872913361,0.560698807239532,0.6474968791008,0.559335768222809,0.641393959522247,0.56464821100235,0.729180932044983,0.553213834762573,0.486495316028595,0.602745950222015,0.601028919219971,0.606877624988556,0.603044152259827,0.613578140735626,0.611885547637939,0.620466113090515,0.61333829164505,0.618243515491486,0.614179849624634,0.620440781116486,0.616924345493317,0.624875724315643,0.615345001220703,0.621714413166046,0.62329888343811,0.512240886688232,0.678222596645355, 0.511760592460632,0.660056352615356,0.635975122451782,0.683792352676392,0.657321453094482,0.698618531227112,0.649455368518829,0.696595191955566,0.639327347278595,0.695823788642883,0.628412663936615,0.679765820503235,0.639896214008331,0.647233664989471,0.816904127597809,0.109633572399616,0.820584416389465,0.14250722527504,0.77770459651947,0.148758590221405,0.765933215618134,0.110625043511391,0.621503293514252,0.0855304822325706,0.663655042648315,0.121767081320286,0.609804451465607,0.123828202486038,0.690137088298798,0.0819784253835678,0.634817242622375,0.0458232052624226,0.762016117572784,0.0708739310503006,0.776911318302155,0.0511160641908646,0.782205283641815,0.0837782323360443,0.799922406673431,0.0622521676123142,0.74852442741394,0.0808602347970009,0.70554256439209,0.103776723146439,0.753971695899963,0.048134870827198,0.814988136291504,0.0799505859613419,0.90201598405838,0.29029780626297,0.918458104133606,0.290549427270889,0.901023030281067,0.253768563270569,0.917590022087097,0.25423601269722,0.934094905853271,0.254865169525146,0.93590521812439,0.290164083242416,0.957786738872528,0.291086256504059,0.956749558448792,0.25545209646225,0.9751216173172,0.292869091033936,0.992450058460236,0.330061018466949,0.992442071437836,0.35964959859848,0.884674191474915,0.290110468864441,0.884249031543732,0.253502160310745,0.992430627346039,0.293279618024826,0.899563372135162,0.216655939817429,0.915985763072968,0.217229887843132,0.936711549758911,0.217226922512054,0.956498563289642,0.216992482542992,0.882987916469574,0.216519430279732,0.74700391292572,0.641402006149292,0.748828053474426,0.637670755386353,0.769829154014587,0.641968369483948,0.772377789020538,0.645536243915558,0.778589606285095,0.638157069683075,0.768387973308563,0.638159394264221,0.781683027744293,0.639912009239197,0.807815432548523,0.626587271690369,0.822451770305634,0.612830758094788,0.829592883586884,0.597260653972626,0.741063416004181,0.629756987094879,0.73733526468277,0.63361781835556,0.74802577495575,0.632549405097961,0.785915970802307,0.642232060432434,0.790905892848969, 0.64529025554657,0.799873471260071,0.627595901489258,0.814673960208893,0.610436201095581,0.818345904350281,0.595913290977478,0.816418170928955,0.559690952301025,0.832831919193268,0.577153384685516,0.852352499961853,0.598909080028534,0.807449698448181,0.610078930854797,0.812576115131378,0.595033466815948,0.813049614429474,0.580021500587463,0.818376898765564,0.580896258354187,0.809593319892883,0.559612929821014,0.79661762714386,0.516145884990692,0.486596345901489,0.0342471599578857,0.486179828643799,0.0261669754981995,0.506842195987701,0.0255116522312164,0.507294833660126,0.034290224313736,0.617806375026703,0.0275668501853943,0.643224477767944,0.0265010893344879,0.642711102962494,0.0330010056495667,0.618426620960236,0.035002589225769,0.593124449253082,0.0285674631595612,0.618426620960236,0.035002589225769,0.592451751232147,0.0368972718715668,0.653390765190125,0.0328647792339325,0.65338659286499,0.026593804359436,0.657315969467163,0.0273057520389557,0.65606689453125,0.0315778851509094,0.642711102962494,0.0330010056495667,0.653390765190125,0.0328647792339325,0.507294833660126,0.034290224313736,0.533298313617706,0.0288485586643219,0.534599363803864,0.0372985601425171,0.468929290771484,0.0314272344112396,0.468633115291595,0.0256835967302322,0.474491775035858,0.0263475477695465,0.474822819232941,0.0327689051628113,0.474822819232941,0.0327689051628113,0.486596345901489,0.0342471599578857,0.464438438415527,0.0299741327762604,0.464187204837799,0.0250999629497528,0.465632677078247,0.0253211557865143,0.465904384851456,0.0305918753147125,0.465904384851456,0.0305918753147125,0.468929290771484,0.0314272344112396,0.458942323923111,0.0131287425756454,0.460652232170105,0.0113322362303734,0.460869669914246,0.0158987864851952,0.454457372426987,0.0164180994033813,0.456199616193771,0.0145559459924698,0.461522102355957,0.0295987725257874,0.461304664611816,0.0250321626663208,0.464438438415527,0.0299741327762604,0.539006769657135,0.0369224399328232,0.534599363803864,0.0372985601425171,0.543534815311432,0.0322365164756775,0.557037770748138, 0.0385730713605881,0.557879507541656,0.0331084579229355,0.570591866970062,0.0328573286533356,0.574192762374878,0.0388950705528259,0.574192762374878,0.0388950705528259,0.592451751232147,0.0368972718715668,0.539006769657135,0.0369224399328232,0.557037770748138,0.0385730713605881,0.461062878370285,0.0199957638978958,0.463684409856796,0.0153515115380287,0.46391162276268,0.0197559893131256,0.465338498353958,0.0196153521537781,0.465089231729507,0.0147797167301178,0.468311220407486,0.0194382220506668,0.46804091334343,0.0141962170600891,0.474122881889343,0.0191940069198608,0.473829627037048,0.0135047286748886,0.485792070627213,0.018647089600563,0.48544105887413,0.0118400454521179,0.506418526172638,0.0172935128211975,0.506031513214111,0.00978811085224152,0.53199714422226,0.0203985869884491,0.530945599079132,0.0122314542531967,0.548062980175018,0.0225912034511566,0.548289060592651,0.0135338008403778,0.558721244335175,0.0226844251155853,0.559562981128693,0.0122603923082352,0.570627272129059,0.0228519439697266,0.572472751140594,0.0133280903100967,0.593797028064728,0.0202376246452332,0.594469606876373,0.0119077861309052,0.616565942764282,0.0126954317092896,0.61718624830246,0.0201311111450195,0.6442511677742,0.0135011672973633,0.64373779296875,0.0200011134147644,0.653382539749146,0.0203227996826172,0.653378427028656,0.014051765203476,0.659033834934235,0.0202800631523132,0.657308638095856,0.0132997930049896,0.658188879489899,0.0142810046672821,0.658446490764618,0.015420138835907,0.658704102039337,0.0165592730045319,0.659006536006927,0.0183336138725281,0.454343557357788,0.0201056972146034,0.454804509878159,0.0245868414640427,0.454477518796921,0.0237520039081573,0.454415410757065,0.0215658694505692,0.460652232170105,0.0113322362303734,0.463433116674423,0.0104773640632629,0.463433116674423,0.0104773640632629,0.464817434549332,0.00950907170772552,0.464817434549332,0.00950907170772552,0.467744678258896,0.00845262408256531,0.467744678258896,0.00845262408256531,0.473498493432999,0.00708332657814026,0.473498493432999,0.00708332657814026, 0.485119014978409,0.00559332966804504,0.485119014978409,0.00559332966804504,0.505673408508301,0.00284309685230255,0.505673408508301,0.00284309685230255,0.530689656734467,0.00312058627605438,0.530689656734467,0.00312058627605438,0.545656621456146,0.00206351280212402,0.545656621456146,0.00206351280212402,0.560404717922211,0.00183640420436859,0.560404717922211,0.00183640420436859,0.57431823015213,0.00347371399402618,0.57431823015213,0.00347371399402618,0.595142245292664,0.00357799232006073,0.595142245292664,0.00357799232006073,0.615945816040039,0.00525975227355957,0.615945816040039,0.00525975227355957,0.644764602184296,0.00700125098228455,0.644764602184296,0.00700125098228455,0.657308638095856,0.0132997930049896,0.655906796455383,0.00767406821250916,0.656048238277435,0.00904124975204468,0.454457372426987,0.0164180994033813,0.454343557357788,0.0201056972146034,0.454352974891663,0.0188547372817993,0.454216003417969,0.0172181576490402,0.657315969467163,0.0273057520389557,0.659033834934235,0.0202800631523132,0.65898072719574,0.0222298204898834,0.65870988368988,0.0240016281604767,0.65845263004303,0.0251566767692566,0.658195614814758,0.0263117253780365,0.454804509878159,0.0245868414640427,0.461522102355957,0.0295987725257874,0.459632098674774,0.0278590321540833,0.456753879785538,0.0267122238874435,0.70869106054306,0.0319811552762985,0.69957023859024,0.0245689004659653,0.703262865543365,0.0204287618398666,0.406391859054565,0.00574135780334473,0.40994256734848,0.00437217950820923,0.410490989685059,0.00703376531600952,0.408365666866302,0.00855642557144165,0.41502171754837,0.00402450561523438,0.422150850296021,0.00411182641983032,0.422344863414764,0.00572508573532104,0.415996193885803,0.00559604167938232,0.403060972690582,0.00818455219268799,0.406391859054565,0.00574135780334473,0.406140804290771,0.0100499987602234,0.39908355474472,0.00961518287658691,0.403060972690582,0.00818455219268799,0.403294146060944,0.0117313265800476,0.440805196762085,0.0103088617324829,0.446239769458771,0.0144075751304626,0.442707240581512,0.0149797797203064, 0.43946385383606,0.0117573142051697,0.436638653278351,0.00848495960235596,0.440805196762085,0.0103088617324829,0.435345053672791,0.00985592603683472,0.395519137382507,0.0117701292037964,0.39908355474472,0.00961518287658691,0.398537516593933,0.0128351449966431,0.411789059638977,0.00379276275634766,0.41502171754837,0.00402450561523438,0.413864433765411,0.00632774829864502,0.40994256734848,0.00437217950820923,0.411789059638977,0.00379276275634766,0.446239769458771,0.0144075751304626,0.449066698551178,0.0181512236595154,0.446332156658173,0.0187510251998901,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.448225140571594,0.0218852758407593,0.44794636964798,0.0207660794258118,0.449066698551178,0.0181512236595154,0.45154482126236,0.0202770829200745,0.451689839363098,0.0217750072479248,0.450699210166931,0.0235817432403564,0.447151958942413,0.0235339999198914,0.449134588241577,0.0248497724533081,0.446498453617096,0.0266976952552795,0.443526148796082,0.0261470079421997,0.445803582668304,0.0245988965034485,0.450699210166931,0.0235817432403564,0.449134588241577,0.0248497724533081,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.437945663928986,0.0293042659759521,0.44097900390625,0.0280271172523499,0.446498453617096,0.0266976952552795,0.443546175956726,0.0289389491081238,0.440054357051849,0.0304808020591736,0.427176415920258,0.033158004283905,0.426701426506042,0.0314459204673767,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.414216041564941,0.0298317074775696,0.420464634895325,0.0310272574424744,0.427176415920258,0.033158004283905,0.420073449611664,0.0327605009078979,0.412976384162903,0.0314528942108154,0.406489789485931,0.0288705229759216,0.408478736877441,0.0275551676750183,0.406489789485931,0.0288705229759216,0.401059508323669,0.0250423550605774,0.403644859790802,0.0242267251014709,0.401059508323669,0.0250423550605774,0.397105097770691,0.0200417041778564,0.400083184242249,0.0199137330055237,0.397105097770691,0.0200417041778564,0.395519137382507, 0.0117701292037964,0.422150850296021,0.00411182641983032,0.428149163722992,0.0053945779800415,0.427461206912994,0.00677013397216797,0.428149163722992,0.0053945779800415,0.436638653278351,0.00848495960235596,0.417592406272888,0.0121771693229675,0.415166079998016,0.0133794546127319,0.42351770401001,0.0118169188499451,0.41929703950882,0.0118566751480103,0.413747549057007,0.0143976211547852,0.412263214588165,0.0152245759963989,0.434441089630127,0.0152373313903809,0.410514712333679,0.0167784690856934,0.438362121582031,0.0181312561035156,0.438497960567474,0.0196343660354614,0.437477588653564,0.0213321447372437,0.434546887874603,0.0228132605552673,0.436321616172791,0.0219103097915649,0.430426239967346,0.0247266888618469,0.432616531848907,0.0239467024803162,0.423020660877228,0.0262933373451233,0.415763556957245,0.0259256958961487,0.419261574745178,0.0262941718101501,0.412895560264587,0.0249935388565063,0.410815119743347,0.0234622359275818,0.409665703773499,0.0213173627853394,0.427684485912323,0.0124320387840271,0.431142687797546,0.0135537981987,0.69963800907135,0.031472310423851,0.701917588710785,0.0337111800909042,0.699676871299744,0.0342835038900375,0.697845876216888,0.0319314450025558,0.717771828174591,0.0249608606100082,0.713541150093079,0.0298749059438705,0.71000337600708,0.026937410235405,0.712290167808533,0.0238329619169235,0.699676871299744,0.0342835038900375,0.696934163570404,0.0348126143217087,0.694900691509247,0.0324376672506332,0.717104077339172,0.0120001882314682,0.71177077293396,0.0137974470853806,0.704786419868469,0.00639156997203827,0.712344646453857,0.00897102057933807,0.707624018192291,0.0115268677473068,0.702147305011749,0.00986741483211517,0.712344646453857,0.00897102057933807,0.717104077339172,0.0120001882314682,0.696934163570404,0.0348126143217087,0.692478477954865,0.0356429070234299,0.691352367401123,0.0326664298772812,0.692478477954865,0.0356429070234299,0.680933237075806,0.0326320379972458,0.683080613613129,0.0305461138486862,0.713541150093079,0.0298749059438705,0.711244940757751,0.0311082452535629, 0.707917928695679,0.0287048071622849,0.711244940757751,0.0311082452535629,0.70869106054306,0.0319811552762985,0.705014288425446,0.0300948470830917,0.69556713104248,0.00550685822963715,0.704786419868469,0.00639156997203827,0.695366024971008,0.00904308259487152,0.683096766471863,0.00572193274274468,0.689233422279358,0.00574813783168793,0.689245343208313,0.00921313464641571,0.684998452663422,0.0113309100270271,0.689233422279358,0.00574813783168793,0.69556713104248,0.00550685822963715,0.669484555721283,0.0098786661401391,0.675878524780273,0.00806909427046776,0.679057061672211,0.0125804003328085,0.675236940383911,0.013050302863121,0.664670765399933,0.0162393897771835,0.666666448116302,0.0133398622274399,0.672138512134552,0.0145404189825058,0.670596241950989,0.0164764970541,0.666666448116302,0.0133398622274399,0.669484555721283,0.0098786661401391,0.663240909576416,0.0194827765226364,0.664670765399933,0.0162393897771835,0.67010635137558,0.018696591258049,0.666763544082642,0.0252277702093124,0.665065944194794,0.0224603861570358,0.671090066432953,0.0211200565099716,0.672755658626556,0.0235807150602341,0.665065944194794,0.0224603861570358,0.663240909576416,0.0194827765226364,0.67025101184845,0.0278138965368271,0.666763544082642,0.0252277702093124,0.675398409366608,0.0260181874036789,0.675065755844116,0.0302070826292038,0.67025101184845,0.0278138965368271,0.678910732269287,0.028365358710289,0.680933237075806,0.0326320379972458,0.675065755844116,0.0302070826292038,0.71966016292572,0.0197551101446152,0.717771828174591,0.0249608606100082,0.713660776615143,0.0201188176870346,0.71966016292572,0.0197551101446152,0.695582926273346,0.0256664603948593,0.701430082321167,0.0310131162405014,0.701892614364624,0.0233747810125351,0.70300555229187,0.0219657868146896,0.701907694339752,0.0185135453939438,0.699325382709503,0.0178460329771042,0.697586536407471,0.0173529237508774,0.692133605480194,0.0261876434087753,0.68655925989151,0.0255358070135117,0.694730043411255,0.0169049948453903,0.689456880092621,0.0171187371015549,0.68585067987442,0.0175407379865646, 0.683692932128906,0.0178875774145126,0.681590437889099,0.0182519406080246,0.68056458234787,0.0187517255544662,0.679048240184784,0.0201505869626999,0.679358661174774,0.0212138146162033,0.680047035217285,0.0223466008901596,0.68144166469574,0.0234885662794113,0.683490037918091,0.0245749205350876,0.591387033462524,0.0215726271271706,0.600200116634369,0.0316438004374504,0.600206613540649,0.062955804169178,0.591397702693939,0.0730306282639503,0.583348095417023,0.0216382965445518,0.583024799823761,0.0736353620886803,0.578938007354736,0.0215679705142975,0.578770875930786,0.0737554803490639,0.565168917179108,0.0143557265400887,0.575343906879425,0.0143557265400887,0.575343906879425,0.080140732228756,0.565168917179108,0.080140732228756,0.553182542324066,0.0216920599341393,0.561133742332459,0.0219166055321693,0.560962915420532,0.0735835954546928,0.553181946277618,0.0736965611577034,0.538849592208862,0.0144685581326485,0.54843658208847,0.01446767244488,0.548435866832733,0.0802526846528053,0.538849890232086,0.0802535638213158,0.521084189414978,0.0219627693295479,0.533587396144867,0.0217156633734703,0.533586978912354,0.074017159640789,0.520668983459473,0.0738707557320595,0.51250422000885,0.019394725561142,0.516744196414948,0.0220807418227196,0.516445934772491,0.0736207440495491,0.512378931045532,0.0757297351956367,0.603316843509674,0.0301411598920822,0.593390703201294,0.0197372138500214,0.584382653236389,0.0196360796689987,0.580667734146118,0.0190647915005684,0.575343906879425,0.0119267264381051,0.565168917179108,0.0119267264381051,0.559614300727844,0.019414097070694,0.554194569587708,0.0193595662713051,0.548436641693115,0.0120396763086319,0.538850665092468,0.0120405629277229,0.524616181850433,0.0194057896733284,0.526813209056854,0.0197047963738441,0.575343906879425,0.00900972634553909,0.565168917179108,0.00900972634553909,0.538958668708801,0.0091225653886795,0.548436641693115,0.00912266969680786,0.524795949459076,0.0758577957749367,0.526367962360382,0.0757427886128426,0.538851857185364,0.0826825574040413,0.548435807228088,0.0826816782355309, 0.554193913936615,0.0756945833563805,0.559613943099976,0.075748585164547,0.565168917179108,0.0825687274336815,0.575343906879425,0.0825687274336815,0.580673575401306,0.0753997936844826,0.584394156932831,0.0753040835261345,0.593402147293091,0.0750322118401527,0.603657901287079,0.0642900839447975,0.538959860801697,0.0855985656380653,0.548435807228088,0.0855986848473549,0.565168917179108,0.0854857191443443,0.575343906879425,0.0854857191443443,0.532086849212646,0.019443653523922,0.531222939491272,0.0757646486163139,0.516328930854797,0.0737377479672432,0.522505939006805,0.0758547708392143,0.522475183010101,0.0195507779717445,0.512260973453522,0.0758467242121696,0.0254977345466614,0.655144333839417,0.0272215604782104,0.639781475067139,0.0366276502609253,0.644282579421997,0.036613404750824,0.660823881626129,0.0523829460144043,0.64972311258316,0.0536320805549622,0.668128669261932,0.0689579248428345,0.652669966220856,0.0705493092536926,0.674027264118195,0.0885592699050903,0.653861224651337,0.0888699293136597,0.676232755184174,0.0364545583724976,0.641978800296783,0.0346959233283997,0.63730788230896,0.0511584877967834,0.641966819763184,0.0522686839103699,0.647412955760956,0.0677793025970459,0.643067181110382,0.0688358545303345,0.65037590265274,0.0886768698692322,0.643755316734314,0.0885747671127319,0.65140300989151,0.0284725427627563,0.634910762310028,0.0283059477806091,0.623557984828949,0.0357835292816162,0.622310280799866,0.0513451099395752,0.618944108486176,0.0680084824562073,0.616598546504974,0.0882828831672668,0.616707146167755,0.0244089365005493,0.634703040122986,0.0160115361213684,0.647486209869385,0.027770459651947,0.637773096561432,0.141488790512085,0.656198799610138,0.140186786651611,0.640385866165161,0.149824678897858,0.635823547840118,0.151474833488464,0.649669170379639,0.123865008354187,0.668175399303436,0.122758686542511,0.647204518318176,0.10824590921402,0.675183057785034,0.107455968856812,0.652579009532928,0.139890313148499,0.638454079627991,0.122665643692017,0.644734919071198,0.123032510280609,0.638982892036438, 0.139729559421539,0.633151113986969,0.107181549072266,0.650321960449219,0.107726633548737,0.643087267875671,0.147350490093231,0.620175659656525,0.15258115530014,0.621047377586365,0.152067720890045,0.628716826438904,0.147482872009277,0.631415784358978,0.121435940265656,0.615197062492371,0.139647483825684,0.617897689342499,0.107038140296936,0.614826023578644,0.165453493595123,0.625622630119324,0.165904939174652,0.635374367237091,0.153075218200684,0.629461348056793,0.154163479804993,0.620777726173401,0.161021709442139,0.643452644348145,0.149554073810577,0.634001970291138,0.0256967544555664,0.633836150169373,0.0231171846389771,0.625076115131378,0.0247893333435059,0.624086022377014,0.0350562930107117,0.597542524337769,0.0269031524658203,0.607170283794403,0.025026261806488,0.591058731079102,0.0343167781829834,0.579839646816254,0.0492467284202576,0.56453138589859,0.0489354729652405,0.58383047580719,0.0660994648933411,0.558764934539795,0.0656777024269104,0.579270482063293,0.0869872570037842,0.556197106838226,0.0876163244247437,0.578349709510803,0.0350795388221741,0.600105464458466,0.04902583360672,0.586773276329041,0.0485853552818298,0.593029260635376,0.0339125394821167,0.607177436351776,0.0660232305526733,0.581754565238953,0.0654354691505432,0.589847385883331,0.0876809358596802,0.581035733222961,0.0879812240600586,0.589789390563965,0.0243384838104248,0.614409863948822,0.0164391398429871,0.605420351028442,0.0274882912635803,0.609100520610809,0.0287883877754211,0.612423300743103,0.150637865066528,0.589111626148224,0.149194359779358,0.605417132377625,0.138968110084534,0.594722807407379,0.140084743499756,0.576853275299072,0.121811866760254,0.581344842910767,0.122069537639618,0.560900390148163,0.107725977897644,0.578754603862762,0.106704950332642,0.556701064109802,0.139044940471649,0.597261548042297,0.139840602874756,0.603919208049774,0.121406257152557,0.59092116355896,0.121467590332031,0.584149241447449,0.107147343456745,0.588950634002686,0.10792487859726,0.581661939620972,0.151157081127167,0.612433791160584,0.147085726261139, 0.610439121723175,0.15250688791275,0.611924231052399,0.165724098682404,0.616423010826111,0.161026895046234,0.603975474834442,0.148806214332581,0.607994496822357,0.0258148908615112,0.615115821361542,0.0121668577194214,0.628081738948822,0.011854887008667,0.618440985679626,0.0116921663284302,0.638223052024841,0.282519578933716,0.715090870857239,0.277304470539093,0.716859757900238,0.279423356056213,0.701516091823578,0.283626526594162,0.702827036380768,0.271077066659927,0.700236082077026,0.268696248531342,0.71897965669632,0.262599259614944,0.700124561786652,0.261590957641602,0.720955967903137,0.253865718841553,0.701168060302734,0.25476348400116,0.721377015113831,0.289996653795242,0.709187269210815,0.287398755550385,0.712658166885376,0.225223898887634,0.70391708612442,0.231440782546997,0.702605366706848,0.233983591198921,0.716184020042419,0.229156777262688,0.714164018630981,0.242533922195435,0.719307959079742,0.239421010017395,0.701394021511078,0.247341245412827,0.720883190631866,0.24598416686058,0.701506376266479,0.225084960460663,0.711728930473328,0.222315385937691,0.709316492080688,0.281127840280533,0.685290932655334,0.286737591028214,0.68932718038559,0.272024750709534,0.679924070835114,0.262892007827759,0.677825272083282,0.251930922269821,0.67756712436676,0.290476649999619,0.695080041885376,0.291421592235565,0.700184643268585,0.221725508570671,0.691222846508026,0.22619666159153,0.686433672904968,0.234826967120171,0.680844724178314,0.241850599646568,0.678839862346649,0.217455923557281,0.701494038105011,0.218093931674957,0.697678565979004,0.284459263086319,0.717653393745422,0.278088420629501,0.719813346862793,0.269635677337646,0.722343027591705,0.262430518865585,0.72365140914917,0.254790306091309,0.723893821239471,0.291226714849472,0.704848408699036,0.296335697174072,0.705008745193481,0.294358551502228,0.709930777549744,0.29086822271347,0.7146355509758,0.232978910207748,0.71883499622345,0.227970123291016,0.716613054275513,0.240862280130386,0.721632957458496,0.247661635279655,0.723547041416168,0.222611099481583,0.713507890701294, 0.219694241881371,0.711174130439758,0.216002881526947,0.706914067268372,0.218450114130974,0.706294655799866,0.286113172769547,0.682194828987122,0.291608154773712,0.686314523220062,0.274250477552414,0.676076054573059,0.263382107019424,0.673910081386566,0.251629739999771,0.673598349094391,0.296776175498962,0.699211120605469,0.295894593000412,0.693497657775879,0.21678851544857,0.689301908016205,0.220813453197479,0.683754146099091,0.23130364716053,0.677661836147308,0.240429505705833,0.675174713134766,0.213887751102448,0.69621729850769,0.213849455118179,0.700732469558716,0.0252808332443237,0.657364368438721,0.0355116128921509,0.663233816623688,0.0532200336456299,0.670570015907288,0.0698950290679932,0.67637836933136,0.0889648795127869,0.678470373153687,0.00790423154830933,0.629297912120819,0.0100789070129395,0.628944575786591,0.0094602108001709,0.639675199985504,0.0147941112518311,0.648904502391815,0.141382932662964,0.658710181713104,0.151594340801239,0.652525007724762,0.123682260513306,0.670662581920624,0.108300149440765,0.677356421947479,0.1620854139328,0.645580887794495,0.168352007865906,0.63685142993927,0.167634546756744,0.626471817493439,0.170754611492157,0.627090036869049,0.0242365598678589,0.588169097900391,0.0333221554756165,0.57744574546814,0.0495192408561707,0.561510503292084,0.0661872625350952,0.555801093578339,0.08692467212677,0.552842974662781,0.00943100452423096,0.617841362953186,0.0143885016441345,0.603723585605621,0.151574313640594,0.58583390712738,0.140703439712524,0.573641657829285,0.122727692127228,0.557594537734985,0.106375522911549,0.55333799123764,0.163058042526245,0.603169798851013,0.168011665344238,0.614670693874359,0.979709327220917,0.655144333839417,0.968593657016754,0.660823881626129,0.968579411506653,0.644282579421997,0.977985501289368,0.639781475067139,0.951574981212616,0.668128669261932,0.952824115753174,0.64972311258316,0.934657752513886,0.674027264118195,0.936249136924744,0.652669966220856,0.916337132453918,0.676232755184174,0.916647791862488,0.653861224651337,0.968752503395081,0.641978800296783, 0.952938377857208,0.647412955760956,0.954048573970795,0.641966819763184,0.970511138439178,0.63730788230896,0.936371207237244,0.65037590265274,0.937427759170532,0.643067181110382,0.916632294654846,0.65140300989151,0.916530191898346,0.643755316734314,0.969423532485962,0.622310280799866,0.976901113986969,0.623557984828949,0.976734519004822,0.634910762310028,0.953861951828003,0.618944108486176,0.937198579311371,0.616598546504974,0.916924178600311,0.616707146167755,0.980798125267029,0.634703040122986,0.98919552564621,0.647486209869385,0.977436602115631,0.637773096561432,0.863718271255493,0.656198799610138,0.853732228279114,0.649669170379639,0.85538238286972,0.635823547840118,0.865020275115967,0.640385866165161,0.881342053413391,0.668175399303436,0.882448375225067,0.647204518318176,0.897751092910767,0.652579009532928,0.896961152553558,0.675183057785034,0.86531674861908,0.638454079627991,0.865477502346039,0.633151113986969,0.882174551486969,0.638982892036438,0.882541418075562,0.644734919071198,0.897480428218842,0.643087267875671,0.898025512695313,0.650321960449219,0.857856571674347,0.620175659656525,0.857724189758301,0.631415784358978,0.853139340877533,0.628716826438904,0.852625906467438,0.621047377586365,0.865559577941895,0.617897689342499,0.883771121501923,0.615197062492371,0.898168921470642,0.614826023578644,0.839753568172455,0.625622630119324,0.851043581962585,0.620777726173401,0.852131843566895,0.629461348056793,0.839302122592926,0.635374367237091,0.844185352325439,0.643452644348145,0.855652987957001,0.634001970291138,0.979510307312012,0.633836150169373,0.980417728424072,0.624086022377014,0.982089877128601,0.625076115131378,0.970150768756866,0.597542524337769,0.970890283584595,0.579839646816254,0.98018079996109,0.591058731079102,0.978303909301758,0.607170283794403,0.956271588802338,0.58383047580719,0.955960333347321,0.56453138589859,0.939529359340668,0.579270482063293,0.939107596874237,0.558764934539795,0.917590737342834,0.578349709510803,0.918219804763794,0.556197106838226,0.970127522945404,0.600105464458466,0.971294522285461, 0.607177436351776,0.956621706485748,0.593029260635376,0.956181228160858,0.586773276329041,0.939771592617035,0.589847385883331,0.939183831214905,0.581754565238953,0.91722583770752,0.589789390563965,0.917526125907898,0.581035733222961,0.980868577957153,0.614409863948822,0.988767921924591,0.605420351028442,0.977718770503998,0.609100520610809,0.976418673992157,0.612423300743103,0.85456919670105,0.589111626148224,0.865122318267822,0.576853275299072,0.866238951683044,0.594722807407379,0.85601270198822,0.605417132377625,0.88313752412796,0.560900390148163,0.883395195007324,0.581344842910767,0.898502111434937,0.556701064109802,0.897481083869934,0.578754603862762,0.866162121295929,0.597261548042297,0.883739471435547,0.584149241447449,0.883800804615021,0.59092116355896,0.865366458892822,0.603919208049774,0.897282183170319,0.581661939620972,0.898059725761414,0.588950634002686,0.854049980640411,0.612433791160584,0.858121335506439,0.610439121723175,0.839482963085175,0.616423010826111,0.852700173854828,0.611924231052399,0.844180166721344,0.603975474834442,0.856400847434998,0.607994496822357,0.979392170906067,0.615115821361542,0.993352174758911,0.618440985679626,0.993040204048157,0.628081738948822,0.993514895439148,0.638223052024841,0.754929721355438,0.720452189445496,0.755665004253387,0.707457900047302,0.759256422519684,0.706007063388824,0.759348809719086,0.722745478153229,0.766144931316376,0.704474925994873,0.76703417301178,0.725881814956665,0.773017406463623,0.704215049743652,0.773646116256714,0.728894948959351,0.780154645442963,0.705302596092224,0.780250132083893,0.729930758476257,0.751043319702148,0.717634201049805,0.749403417110443,0.7140052318573,0.804349958896637,0.70843642950058,0.803539574146271,0.720765054225922,0.799514591693878,0.723414242267609,0.798819363117218,0.706900000572205,0.791931450366974,0.727561771869659,0.791995525360107,0.705490410327911,0.787450850009918,0.72958779335022,0.786632418632507,0.705642521381378,0.806618630886078,0.71769517660141,0.808403849601746,0.714763939380646,0.754570722579956,0.693444430828094, 0.759102463722229,0.688934862613678,0.765906631946564,0.682896792888641,0.772291958332062,0.680347979068756,0.77978390455246,0.679739534854889,0.751054406166077,0.699581682682037,0.749624490737915,0.70484870672226,0.803532183170319,0.694062113761902,0.799002885818481,0.688795685768127,0.791818797588348,0.682862341403961,0.786742031574249,0.680849850177765,0.808311462402344,0.701323807239532,0.810089349746704,0.705664694309235,0.758199691772461,0.725903391838074,0.752758383750916,0.722972095012665,0.765812993049622,0.729747891426086,0.772698402404785,0.73218959569931,0.780255019664764,0.733226597309113,0.749082565307617,0.709593534469604,0.745549082756042,0.714615523815155,0.744800806045532,0.709751188755035,0.747645258903503,0.719413936138153,0.80521947145462,0.723749220371246,0.800985813140869,0.726751983165741,0.793849110603333,0.730618000030518,0.787339329719543,0.733136713504791,0.809349119663239,0.719755709171295,0.811292052268982,0.71689647436142,0.810836315155029,0.711184799671173,0.813156127929688,0.711879432201386,0.75113445520401,0.690634548664093,0.755595445632935,0.686036288738251,0.764372587203979,0.679069578647614,0.77182275056839,0.676390171051025,0.779645979404449,0.675707221031189,0.745423436164856,0.704008758068085,0.746972858905792,0.698225021362305,0.802097320556641,0.685976505279541,0.80660754442215,0.692030549049377,0.793588638305664,0.679549276828766,0.787176787853241,0.677083551883698,0.811145484447479,0.699746072292328,0.812796473503113,0.704830229282379,0.979926228523254,0.657364368438721,0.969695448875427,0.663233816623688,0.951987028121948,0.670570015907288,0.935312032699585,0.67637836933136,0.916242182254791,0.678470373153687,0.997302830219269,0.629297912120819,0.995746850967407,0.639675199985504,0.995128154754639,0.628944575786591,0.990412950515747,0.648904502391815,0.863824129104614,0.658710181713104,0.853612720966339,0.652525007724762,0.881524801254272,0.670662581920624,0.896906912326813,0.677356421947479,0.843121647834778,0.645580887794495,0.836855053901672,0.63685142993927,0.834452450275421, 0.627090036869049,0.837572515010834,0.626471817493439,0.971884906291962,0.57744574546814,0.980970501899719,0.588169097900391,0.955687820911407,0.561510503292084,0.939019799232483,0.555801093578339,0.918282389640808,0.552842974662781,0.995776057243347,0.617841362953186,0.990818560123444,0.603723585605621,0.853632748126984,0.58583390712738,0.864503622055054,0.573641657829285,0.88247936964035,0.557594537734985,0.89883154630661,0.55333799123764,0.842149019241333,0.603169798851013,0.83719539642334,0.614670693874359,0.966530621051788,0.285750985145569,0.957317590713501,0.276360988616943,0.965213716030121,0.259803503751755,0.974811434745789,0.271549731492996,0.935285627841949,0.258911967277527,0.94352662563324,0.239932999014854,0.910463631153107,0.247263982892036,0.917306244373322,0.225791856646538,0.882490634918213,0.243170991539955,0.883323609828949,0.221589997410774,0.935546636581421,0.266311973333359,0.958819627761841,0.28322497010231,0.910439610481262,0.256586968898773,0.882520616054535,0.253189980983734,0.968531608581543,0.291343986988068,0.970791697502136,0.297748595476151,0.965292632579803,0.295766979455948,0.964384615421295,0.289071977138519,0.95347261428833,0.2933189868927,0.930661618709564,0.290040969848633,0.906851589679718,0.285102963447571,0.882103621959686,0.283370971679688,0.950652599334717,0.318178951740265,0.929136633872986,0.317807972431183,0.905787587165833,0.317461967468262,0.881924629211426,0.317223966121674,0.983052611351013,0.284627974033356,0.983708620071411,0.301946073770523,0.968093633651733,0.301427960395813,0.968193590641022,0.318494975566864,0.956762611865997,0.318293988704681,0.958116590976715,0.298307001590729,0.966148614883423,0.351159989833832,0.973024606704712,0.365354001522064,0.963914632797241,0.3765509724617,0.95680558681488,0.360221982002258,0.942394614219666,0.396196007728577,0.934544622898102,0.376926958560944,0.915870606899261,0.409163951873779,0.909685611724854,0.387917995452881,0.882489621639252,0.41348397731781,0.881998598575592,0.391538977622986,0.934876620769501,0.369551956653595, 0.958375632762909,0.353399991989136,0.909745633602142,0.378625988960266,0.882083594799042,0.381558954715729,0.965035617351532,0.340718984603882,0.969929158687592,0.337531059980392,0.969791948795319,0.346027821302414,0.965006172657013,0.348233312368393,0.930331587791443,0.345634996891022,0.953138589859009,0.342244982719421,0.906535625457764,0.349889993667603,0.88190358877182,0.351148962974548,0.979177594184875,0.332588970661163,0.967900633811951,0.335554957389832,0.979268610477448,0.318683981895447,0.980515599250793,0.332596957683563,0.985583603382111,0.342444956302643,0.98269659280777,0.352829992771149,0.957886636257172,0.338325977325439,0.980621635913849,0.318690955638886,0.98083621263504,0.303205281496048,0.982558608055115,0.318723976612091,0.983572602272034,0.331900000572205,0.954553604125977,0.295430988073349,0.965735614299774,0.298622220754623,0.953047633171082,0.318221986293793,0.954287588596344,0.340322971343994,0.965508639812469,0.337367951869965,0.979378640651703,0.304787993431091,0.79406863451004,0.284850984811783,0.786566615104675,0.270881980657578,0.796175599098206,0.259420990943909,0.80393660068512,0.275510966777802,0.819189608097076,0.239296987652779,0.827523589134216,0.25825896859169,0.847945630550385,0.226012989878654,0.853819608688354,0.246909990906715,0.827315628528595,0.265676975250244,0.802373588085175,0.282399982213974,0.853913605213165,0.256241977214813,0.795421600341797,0.294912964105606,0.790116608142853,0.299780666828156,0.791929602622986,0.290441989898682,0.796403586864471,0.2882219851017,0.832155585289001,0.289405971765518,0.808027625083923,0.292502969503403,0.856961607933044,0.284759968519211,0.833572626113892,0.317173004150391,0.810947597026825,0.31737095117569,0.857747614383698,0.317117989063263,0.780574440956116,0.305002272129059,0.79237163066864,0.300502002239227,0.792250633239746,0.317568004131317,0.780462622642517,0.317743957042694,0.778905630111694,0.303882002830505,0.773460626602173,0.294189989566803,0.77640962600708,0.283712983131409,0.804359614849091,0.317386984825134,0.802964627742767, 0.297397971153259,0.794410586357117,0.350259959697723,0.804324626922607,0.359371960163116,0.79680860042572,0.375714004039764,0.787104606628418,0.364458978176117,0.827842593193054,0.376273989677429,0.819815635681152,0.395559966564178,0.853805601596832,0.38756400346756,0.84807562828064,0.408818006515503,0.827606618404388,0.368916988372803,0.802720606327057,0.3525750041008,0.853900611400604,0.378281950950623,0.792220592498779,0.344731986522675,0.790303587913513,0.334263980388641,0.795644640922546,0.33986496925354,0.796717643737793,0.34689199924469,0.808273613452911,0.341429948806763,0.832275629043579,0.344999969005585,0.856934607028961,0.349545955657959,0.780498743057251,0.33050000667572,0.792612433433533,0.333479046821594,0.77913361787796,0.331682980060577,0.773749589920044,0.341530978679657,0.776822626590729,0.351915001869202,0.803141593933105,0.337417006492615,0.775720596313477,0.304666996002197,0.779017627239227,0.317777991294861,0.776952624320984,0.317808985710144,0.775880634784698,0.330984950065613,0.794919610023499,0.298424005508423,0.806846618652344,0.294595986604691,0.808385610580444,0.317387998104095,0.807034611701965,0.339487969875336,0.795120596885681,0.336487948894501,0.467916965484619,0.242807030677795,0.464606940746307,0.238093018531799,0.462189912796021,0.245386004447937,0.465494930744171,0.249834001064301,0.456439912319183,0.229152023792267,0.453362941741943,0.237973034381866,0.446364939212799,0.223182022571564,0.443721950054169,0.233451008796692,0.433136940002441,0.221091985702515,0.43277895450592,0.231853008270264,0.450931966304779,0.264535009860992,0.465683937072754,0.263678014278412,0.441934943199158,0.264387011528015,0.432543933391571,0.264283001422882,0.472012937068939,0.258758008480072,0.472952961921692,0.253704011440277,0.471803963184357,0.248531997203827,0.46198296546936,0.284126996994019,0.464313924312592,0.291495025157928,0.467695951461792,0.286918044090271,0.465437948703766,0.279152035713196,0.453062951564789,0.291195034980774,0.455983936786652,0.300135016441345,0.445825934410095,0.305844008922577, 0.443410933017731,0.295431017875671,0.432793915271759,0.30773800611496,0.432581961154938,0.296823024749756,0.471957921981812,0.271129012107849,0.472855925559998,0.276217997074127,0.471656918525696,0.281346023082733,0.401700913906097,0.245016038417816,0.399118959903717,0.237727999687195,0.395525932312012,0.242417991161346,0.398035943508148,0.250101029872894,0.4112309217453,0.237690031528473,0.408100962638855,0.228875994682312,0.419228911399841,0.223031044006348,0.421522915363312,0.233296990394592,0.400298953056335,0.26425701379776,0.413591921329498,0.267382025718689,0.423003911972046,0.264236032962799,0.391122937202454,0.258359014987946,0.390111923217773,0.253306031227112,0.391340911388397,0.248134016990662,0.395752966403961,0.286527991294861,0.399379909038544,0.291130006313324,0.401864945888519,0.283757030963898,0.398271918296814,0.279413998126984,0.408359944820404,0.29985898733139,0.411364912986755,0.29091203212738,0.419286966323853,0.305693030357361,0.421519935131073,0.295276999473572,0.39118891954422,0.270731031894684,0.390233933925629,0.275819003582001,0.391516923904419,0.280947029590607,0.970919132232666,0.247931063175201,0.982838928699493,0.262480556964874,0.976476490497589,0.268931955099106,0.965540647506714,0.256178706884384,0.949734270572662,0.229702413082123,0.944442510604858,0.237302839756012,0.919939696788788,0.217100486159325,0.916989505290985,0.222512066364288,0.882941246032715,0.211818620562553,0.883025646209717,0.217620462179184,0.993318676948547,0.279081583023071,0.985546350479126,0.282748937606812,0.998120188713074,0.293454825878143,0.989768505096436,0.294709771871567,0.984694480895996,0.376887559890747,0.973872363567352,0.388366311788559,0.967405140399933,0.384080111980438,0.978299140930176,0.371582865715027,0.946714520454407,0.408555120229721,0.945191919803619,0.401191651821136,0.921054840087891,0.419037222862244,0.91702127456665,0.412579476833344,0.879375994205475,0.422404885292053,0.882049977779388,0.41614431142807,0.987910926342011,0.35699650645256,0.994237303733826,0.3614821434021,0.989690244197845, 0.342143058776855,0.997448921203613,0.342715561389923,0.996677339076996,0.30803507566452,0.995912432670593,0.318531215190887,0.986874580383301,0.318768709897995,0.987688362598419,0.306138396263123,0.996432244777679,0.329602360725403,0.988089263439178,0.330915212631226,0.779833853244781,0.262282729148865,0.791925191879272,0.248590096831322,0.794533252716064,0.253106474876404,0.784178078174591,0.265491932630539,0.813779413700104,0.228662222623825,0.817348003387451,0.234522014856339,0.846199691295624,0.216162115335464,0.847231447696686,0.221908569335938,0.773970305919647,0.27995365858078,0.77012050151825,0.276860028505325,0.769974410533905,0.294058740139008,0.765625,0.293992549180985,0.791816234588623,0.386747658252716,0.780401527881622,0.37107241153717,0.78529280424118,0.366724222898483,0.795543193817139,0.380635112524033,0.813756346702576,0.404628038406372,0.81773966550827,0.39931857585907,0.84721314907074,0.418780654668808,0.847532987594604,0.412396430969238,0.770665287971497,0.356567203998566,0.774852693080902,0.353339642286301,0.766228079795837,0.342014968395233,0.771454572677612,0.341719120740891,0.768742144107819,0.318019181489944,0.767298221588135,0.306248098611832,0.773026764392853,0.305313467979431,0.774560213088989,0.317795008420944,0.768085718154907,0.329462051391602,0.773247241973877,0.330859750509262,0.98582261800766,0.295103967189789,0.471576929092407,0.264936029911041,0.391592919826508,0.264537990093231,0.0368012338876724,0.0201191119849682,0.0382179096341133,0.0137147875502706,0.062839038670063,0.0363835282623768,0.0602719746530056,0.0421102643013,0.0954780802130699,0.0750969871878624,0.0997707322239876,0.0703866332769394,0.106779381632805,0.0827686637639999,0.100838996469975,0.0845692455768585,0.106669172644615,0.0970028191804886,0.100755460560322,0.0954599529504776,0.0994738638401031,0.109272882342339,0.0952505618333817,0.104848682880402,0.0871203020215034,0.11629219353199,0.0857996270060539,0.1102185100317,0.0729181319475174,0.11618023365736,0.074933797121048,0.110133171081543,0.0606729686260223,0.108967132866383, 0.0655646547675133,0.104614049196243,0.0327634811401367,0.0692554265260696,0.0268842428922653,0.0718626528978348,0.00435842573642731,0.0471263378858566,0.0108960345387459,0.0456830188632011,0.00446684285998344,0.0328939631581306,0.0109778009355068,0.0347923189401627,0.0116621442139149,0.0206221379339695,0.0164826959371567,0.0254053641110659,0.0240157246589661,0.0136028192937374,0.0259354189038277,0.0200337879359722,0.0397483110427856,0.0100851580500603,0.0650747492909431,0.033169113099575,0.103064402937889,0.0677950456738472,0.111080899834633,0.0819616764783859,0.110956497490406,0.0982452780008316,0.102724902331829,0.112283952534199,0.0885920599102974,0.120314657688141,0.0723440051078796,0.120184883475304,0.058335579931736,0.111932009458542,0.0239410735666752,0.0737589001655579,0.00101140141487122,0.0483101606369019,0.00113581866025925,0.0320265293121338,0.00936738401651382,0.0179879013448954,0.0235002487897873,0.00995717383921146,0.106231912970543,0.0646488666534424,0.115334458649158,0.0807334631681442,0.115194022655487,0.0992229133844376,0.10584619641304,0.115161687135696,0.0897989869117737,0.124280259013176,0.0713521465659142,0.124134480953217,0.0554453730583191,0.114763557910919,0.0423714518547058,0.102650389075279,0.762905299663544,0.0301453322172165,0.762905299663544,0.00582033395767212,0.779478311538696,0.00582033395767212,0.779478311538696,0.0301453322172165,0.796051263809204,0.00582033395767212,0.796051263809204,0.0301453322172165,0.812624335289001,0.00582033395767212,0.812624335289001,0.0301453322172165,0.829197287559509,0.00582033395767212,0.829197287559509,0.0301453322172165,0.845770299434662,0.00582033395767212,0.845770299434662,0.0301453322172165,0.862343311309814,0.00582033395767212,0.862343311309814,0.0301453322172165,0.878916263580322,0.00582033395767212,0.878916263580322,0.0301453322172165,0.89548933506012,0.00582033395767212,0.89548933506012,0.0301453322172165,0.912062287330627,0.00582033395767212,0.912062287330627,0.0301453322172165,0.928635358810425,0.00582033395767212,0.928635358810425,0.0301453322172165, 0.945208311080933,0.00582033395767212,0.945208311080933,0.0301453322172165,0.96178126335144,0.00582033395767212,0.96178126335144,0.0301453322172165,0.0805151239037514,0.0898715108633041,0.0467585772275925,0.0558863133192062,0.0242542065680027,0.0332295149564743,0.0928812846541405,0.0507392361760139,0.0874601677060127,0.0590522661805153,0.0904011875391006,0.0562530681490898,0.0837427154183388,0.0641014128923416,0.0692629441618919,0.0785431116819382,0.0546309314668179,0.0928278416395187,0.0494100600481033,0.0965989679098129,0.0468707457184792,0.0992076396942139,0.0269165989011526,0.430169820785522,0.0248298943042755,0.468149304389954,0.0181691255420446,0.46712338924408,0.020650677382946,0.427457094192505,0.0235492251813412,0.491458386182785,0.0263311974704266,0.50455516576767,0.0203121490776539,0.508130311965942,0.0166744012385607,0.491015762090683,0.0344185456633568,0.514350116252899,0.0308817382901907,0.520932376384735,0.0456452220678329,0.518219232559204,0.0455543622374535,0.525991141796112,0.0570006184279919,0.515127301216125,0.0603995956480503,0.521950542926788,0.0654453933238983,0.505902886390686,0.0714358016848564,0.509893238544464,0.0687159225344658,0.493015676736832,0.0757074803113937,0.493049204349518,0.0685794651508331,0.470284759998322,0.0683491080999374,0.431912243366241,0.0748268514871597,0.430206537246704,0.0753965526819229,0.4708611369133,0.0681187435984612,0.393539756536484,0.0600313097238541,0.38374450802803,0.0636863559484482,0.376748442649841,0.0742571502923965,0.389551907777786,0.0488045290112495,0.379875004291534,0.0490123853087425,0.371691316366196,0.0374479368329048,0.382965862751007,0.0341697447001934,0.375732004642487,0.0290033034980297,0.392190307378769,0.0231322273612022,0.387790828943253,0.0124161243438721,0.426143169403076,0.00550207030028105,0.466828316450119,0.0164173357188702,0.510688841342926,0.0122573021799326,0.4911088347435,0.0285107791423798,0.525335788726807,0.0452961958944798,0.531121432781219,0.0622778013348579,0.526499688625336,0.0749046429991722,0.512703895568848,0.0797926336526871, 0.49343529343605,0.0870364382863045,0.469577550888062,0.0824269652366638,0.42852520942688,0.065725289285183,0.372827619314194,0.0778174847364426,0.387472867965698,0.0489385649561882,0.36704009771347,0.0319556184113026,0.371663600206375,0.0193301774561405,0.385458052158356,0.0121930381283164,0.513104796409607,0.00746929412707686,0.490869611501694,0.0259238258004189,0.529733896255493,0.0449846684932709,0.536304712295532,0.0642659515142441,0.531055271625519,0.0786028802394867,0.515393793582916,0.0841521471738815,0.49351367354393,0.269248008728027,0.33670899271965,0.280369997024536,0.33670899271965,0.280369997024536,0.334824562072754,0.291491001844406,0.33670899271965,0.291491001844406,0.334484726190567,0.302612990140915,0.33670899271965,0.302612990140915,0.3350909948349,0.313735008239746,0.33670899271965,0.180274993181229,0.326696008443832,0.191395998001099,0.326696008443832,0.191395998001099,0.311677008867264,0.180274993181229,0.311677008867264,0.202518001198769,0.326696008443832,0.202518001198769,0.311677008867264,0.213640004396439,0.326696008443832,0.213640004396439,0.311677008867264,0.224760994315147,0.326696008443832,0.224760994315147,0.311677008867264,0.235882997512817,0.326696008443832,0.235882997512817,0.311677008867264,0.247005000710487,0.326696008443832,0.247005000710487,0.311677008867264,0.258125990629196,0.326696008443832,0.258125990629196,0.311677008867264,0.269248008728027,0.326696008443832,0.269248008728027,0.311677008867264,0.280369997024536,0.326696008443832,0.280369997024536,0.311677008867264,0.291491001844406,0.326696008443832,0.291491001844406,0.311677008867264,0.302612990140915,0.326696008443832,0.302612990140915,0.311677008867264,0.313735008239746,0.326696008443832,0.313735008239746,0.311677008867264,0.0461434610188007,0.492278128862381,0.0485437735915184,0.390889286994934,0.445165693759918,0.108444951474667,0.442920714616776,0.116821952164173,0.428411692380905,0.108444951474667,0.436788707971573,0.122953936457634,0.428411692380905,0.12519896030426,0.420033693313599,0.122953936457634,0.413901716470718, 0.116821952164173,0.411656707525253,0.108444951474667,0.413901716470718,0.10006795078516,0.420033693313599,0.0939349457621574,0.428411692380905,0.0916909500956535,0.436788707971573,0.0939349457621574,0.442920714616776,0.10006795078516,0.0466708652675152,0.470000624656677,0.0476073175668716,0.430444955825806,0.302612990140915,0.330893516540527,0.313735008239746,0.331702500581741,0.291491001844406,0.3305903673172,0.280369997024536,0.330760300159454,0.269248008728027,0.331702500581741,0.992910861968994,0.122856013476849,0.992833852767944,0.110104002058506,0.996294736862183,0.11029402166605,0.995629847049713,0.12428106367588,0.9927579164505,0.0973510667681694,0.996217727661133,0.0972940251231194,0.993247866630554,0.087911069393158,0.996460795402527,0.0876070261001587,0.993223905563354,0.0777560472488403,0.996684789657593,0.0774520635604858,0.993154883384705,0.0587170645594597,0.996614813804626,0.0571770593523979,0.985067963600159,0.0504050217568874,0.987773954868317,0.0466530211269856,0.952452838420868,0.0610870197415352,0.950136840343475,0.0617010667920113,0.94462388753891,0.0556680560112,0.944354832172394,0.0527850426733494,0.952521860599518,0.0801250264048576,0.950205862522125,0.0807400271296501,0.952545821666718,0.0902800485491753,0.950229823589325,0.0908950492739677,0.952055871486664,0.0997210443019867,0.949739873409271,0.100335031747818,0.952131927013397,0.11247306317091,0.949815928936005,0.113088056445122,0.952208817005157,0.125226065516472,0.949891865253448,0.125840052962303,0.968855977058411,0.0503530465066433,0.966632008552551,0.046590019017458,0.928411900997162,0.0556170344352722,0.928142845630646,0.0527340210974216,0.923353791236877,0.061725027859211,0.923422813415527,0.0807640478014946,0.923446774482727,0.0909190103411675,0.922956824302673,0.100360073149204,0.923032760620117,0.113112077116966,0.961272001266479,0.0596040338277817,0.957072019577026,0.0585580393671989,0.92055881023407,0.0619840025901794,0.920628786087036,0.0810230299830437,0.920652866363525,0.0911780521273613,0.920162796974182,0.100618027150631, 0.920238852500916,0.11337011307478,0.961341977119446,0.0786420702934265,0.957141995429993,0.0785850286483765,0.961364984512329,0.0887970328330994,0.956918001174927,0.0889870524406433,0.960875988006592,0.098238043487072,0.956676006317139,0.0974390432238579,0.96095198392868,0.110990032553673,0.956999003887177,0.110438026487827,0.940451681613922,0.885492026805878,0.940463423728943,0.907154977321625,0.950880467891693,0.906722009181976,0.95088928937912,0.885410010814667,0.959831058979034,0.906723022460938,0.959817409515381,0.885249972343445,0.970346748828888,0.906624019145966,0.970383048057556,0.885513007640839,0.983435809612274,0.906588971614838,0.983287572860718,0.886433005332947,0.918880045413971,0.886429011821747,0.918886244297028,0.907630026340485,0.929275572299957,0.907230019569397,0.929291963577271,0.886325001716614,0.940485954284668,0.882734000682831,0.950892567634583,0.882757008075714,0.950891315937042,0.858790993690491,0.940461099147797,0.859109997749329,0.959816813468933,0.882749974727631,0.959825396537781,0.858694016933441,0.970376968383789,0.882817983627319,0.970381140708923,0.858548998832703,0.983295857906342,0.883364021778107,0.983287215232849,0.858807981014252,0.918882012367249,0.883669018745422,0.929297804832459,0.883547008037567,0.929291725158691,0.859035015106201,0.918902516365051,0.859526991844177,0.940526187419891,0.833184003829956,0.940496027469635,0.856626987457275,0.950896382331848,0.856217980384827,0.95089054107666,0.833396017551422,0.959820866584778,0.856235980987549,0.959823608398438,0.833299994468689,0.970381796360016,0.855912029743195,0.970391035079956,0.833190023899078,0.983295917510986,0.855849981307983,0.983306586742401,0.833187997341156,0.918908536434174,0.856671988964081,0.929286181926727,0.856561005115509,0.929284334182739,0.833359003067017,0.918918073177338,0.833555996417999,0.940440773963928,0.803369998931885,0.94055300951004,0.830281019210815,0.95089316368103,0.830304026603699,0.950881063938141,0.80339902639389,0.959822356700897,0.830362975597382,0.959818363189697,0.803424000740051, 0.970378577709198,0.830282986164093,0.97036874294281,0.803381025791168,0.983310341835022,0.830199003219604,0.983159899711609,0.803489029407501,0.918915688991547,0.803470015525818,0.918921232223511,0.830052971839905,0.929283320903778,0.830008983612061,0.929301857948303,0.803332984447479,0.940446078777313,0.800068974494934,0.950880169868469,0.800053000450134,0.950863420963287,0.77519702911377,0.940369248390198,0.775332987308502,0.959808230400085,0.799817025661469,0.959791660308838,0.774946987628937,0.97037535905838,0.800046980381012,0.970364153385162,0.774645984172821,0.983120083808899,0.800041973590851,0.983290910720825,0.774456977844238,0.91890275478363,0.800117015838623,0.929299890995026,0.799961984157562,0.929296970367432,0.775766015052795,0.91888952255249,0.77563601732254,0.940358102321625,0.772098004817963,0.950863897800446,0.771892011165619,0.950857520103455,0.74788498878479,0.940378963947296,0.74788498878479,0.959783375263214,0.771542012691498,0.959798574447632,0.74788498878479,0.970366775989532,0.771421015262604,0.970386207103729,0.74788498878479,0.983303666114807,0.771459996700287,0.983363449573517,0.74788498878479,0.918894410133362,0.772472023963928,0.929295539855957,0.772328019142151,0.929307639598846,0.74788498878479,0.918903172016144,0.74788498878479,0.950874626636505,0.932631015777588,0.950879156589508,0.910111010074615,0.940453112125397,0.910558998584747,0.940444469451904,0.932812988758087,0.959835469722748,0.910099983215332,0.959846198558807,0.932523012161255,0.970354735851288,0.910023987293243,0.970412611961365,0.932793021202087,0.983418345451355,0.910031974315643,0.983444631099701,0.93273800611496,0.929251790046692,0.932929992675781,0.929271876811981,0.910368978977203,0.918900966644287,0.910537004470825,0.918875157833099,0.932959020137787,0.940500974655151,0.952740013599396,0.959849238395691,0.935356020927429,0.950875461101532,0.936003983020782,0.940454065799713,0.945097982883453,0.92924553155899,0.936273992061615,0.918874442577362,0.93605899810791,0.950862765312195,0.773497998714447,0.940354406833649, 0.773665010929108,0.959785580635071,0.773280024528503,0.970363736152649,0.772962987422943,0.983283042907715,0.773070991039276,0.918888449668884,0.773894011974335,0.929298579692841,0.774076998233795,0.950892329216003,0.884214997291565,0.940469563007355,0.884196996688843,0.95981502532959,0.883893013000488,0.970384120941162,0.884090006351471,0.983273267745972,0.884634017944336,0.918889760971069,0.885074973106384,0.929291784763336,0.884742975234985,0.940468788146973,0.857536017894745,0.950891256332397,0.857403993606567,0.959816455841064,0.857403993606567,0.970379173755646,0.857213973999023,0.983311057090759,0.857299983501434,0.918909847736359,0.857680976390839,0.929292023181915,0.857590973377228,0.940536737442017,0.831897974014282,0.950889587402344,0.831785023212433,0.959822177886963,0.831655025482178,0.970386683940887,0.8317049741745,0.983307957649231,0.8315349817276,0.918926000595093,0.831731975078583,0.929290294647217,0.831865012645721,0.950877249240875,0.801711022853851,0.940437197685242,0.801678001880646,0.959815442562103,0.801281988620758,0.970364987850189,0.801916003227234,0.983148872852325,0.80162900686264,0.918915033340454,0.802060008049011,0.929297864437103,0.801560997962952,0.950866162776947,0.908475995063782,0.9404336810112,0.909004986286163,0.959825873374939,0.908518016338348,0.970346093177795,0.908562004566193,0.983475208282471,0.908356010913849,0.918890476226807,0.909244000911713,0.929273068904877,0.908890008926392,0.950871527194977,0.934583008289337,0.940442323684692,0.934315025806427,0.959849536418915,0.933843016624451,0.970414817333221,0.934152007102966,0.983436584472656,0.934413015842438,0.91888165473938,0.934588015079498,0.929248929023743,0.934567987918854,0.940436601638794,0.935962975025177,0.970407724380493,0.935811996459961,0.983425199985504,0.936142981052399,0.940381288528442,0.609349012374878,0.950865209102631,0.609260022640228,0.950861275196075,0.583181977272034,0.940374493598938,0.582903027534485,0.9598268866539,0.609420001506805,0.959837555885315,0.583487987518311,0.970370292663574,0.609412014484406, 0.970409572124481,0.583586990833282,0.983257949352264,0.609098017215729,0.983398854732513,0.583775997161865,0.918900310993195,0.60904997587204,0.929297983646393,0.609088003635406,0.929305374622345,0.583391010761261,0.91891086101532,0.583343029022217,0.940392792224884,0.612702012062073,0.940390110015869,0.637449979782104,0.950888156890869,0.637130975723267,0.950868725776672,0.613021016120911,0.95981901884079,0.637130975723267,0.959824800491333,0.612739026546478,0.970376312732697,0.636734008789063,0.970377922058105,0.612617015838623,0.983412265777588,0.637017011642456,0.983261346817017,0.612228989601135,0.918914318084717,0.612540006637573,0.918907225131989,0.637407004833221,0.929289042949677,0.637431025505066,0.929310381412506,0.612766981124878,0.940393686294556,0.665256977081299,0.950883746147156,0.664337992668152,0.950887739658356,0.640637993812561,0.940454125404358,0.640763998031616,0.959816634654999,0.664160013198853,0.959820866584778,0.640604972839355,0.970368027687073,0.664201021194458,0.970377504825592,0.639995992183685,0.98328161239624,0.664358019828796,0.983387053012848,0.640222012996674,0.918901443481445,0.64086902141571,0.918937504291534,0.664691984653473,0.929284334182739,0.664956986904144,0.929284453392029,0.641008019447327,0.940396249294281,0.692564010620117,0.950882315635681,0.692804992198944,0.950886368751526,0.668218970298767,0.940405607223511,0.668932020664215,0.959815800189972,0.692699015140533,0.959818124771118,0.668434023857117,0.970377445220947,0.692852020263672,0.970377385616302,0.668444991111755,0.983204483985901,0.692766010761261,0.983271181583405,0.668305993080139,0.918908476829529,0.693014979362488,0.929286897182465,0.692653000354767,0.929300844669342,0.668461978435516,0.918931126594543,0.668829023838043,0.94038850069046,0.696794986724854,0.940360248088837,0.719533979892731,0.950878739356995,0.719291985034943,0.950878083705902,0.696793019771576,0.959794819355011,0.719183027744293,0.959805130958557,0.696636974811554,0.970368623733521,0.71909099817276,0.970381379127502,0.696218013763428,0.983281433582306, 0.719281017780304,0.983229696750641,0.696223020553589,0.918896913528442,0.696923017501831,0.918904781341553,0.719397008419037,0.929290652275085,0.719362020492554,0.929294228553772,0.69691801071167,0.94034469127655,0.72257399559021,0.950875043869019,0.722727000713348,0.959796667098999,0.722660005092621,0.970366537570953,0.722687005996704,0.983259618282318,0.722931027412415,0.918896853923798,0.722859025001526,0.929290473461151,0.722720980644226,0.950845241546631,0.557659983634949,0.940354526042938,0.557711005210876,0.940378248691559,0.579652011394501,0.950850963592529,0.579792976379395,0.959847509860992,0.579804003238678,0.959845423698425,0.557703018188477,0.970429062843323,0.579725980758667,0.97041928768158,0.557290017604828,0.983250379562378,0.579674005508423,0.983225584030151,0.55731999874115,0.929264426231384,0.557929992675781,0.918912529945374,0.557941019535065,0.918918132781982,0.579674005508423,0.929299175739288,0.579751014709473,0.940426051616669,0.542484998703003,0.940411150455475,0.548624992370605,0.950830817222595,0.553198993206024,0.959827721118927,0.553198993206024,0.918875813484192,0.553493976593018,0.929256021976471,0.553602993488312,0.940341055393219,0.721198976039886,0.95087593793869,0.721176981925964,0.95979517698288,0.721000015735626,0.970368206501007,0.720960974693298,0.983256042003632,0.72094601392746,0.918902397155762,0.721063017845154,0.929291963577271,0.721162974834442,0.940409243106842,0.611069023609161,0.950862765312195,0.611084997653961,0.959831535816193,0.611229002475739,0.970367550849915,0.611217021942139,0.983306586742401,0.610678017139435,0.918904960155487,0.610822021961212,0.929300427436829,0.610965013504028,0.94044291973114,0.639025986194611,0.950888574123383,0.638800978660584,0.959815680980682,0.638809025287628,0.970369875431061,0.638256013393402,0.983403444290161,0.638692021369934,0.918902218341827,0.639095008373261,0.9292853474617,0.639383971691132,0.94038850069046,0.666938006877899,0.95088517665863,0.666172027587891,0.959821581840515,0.666010975837708,0.970376074314117,0.666234016418457, 0.983235836029053,0.666010022163391,0.918935894966125,0.666721999645233,0.929291188716888,0.666589021682739,0.940403938293457,0.694453001022339,0.950883030891418,0.694419980049133,0.959814131259918,0.694660007953644,0.970377326011658,0.6946160197258,0.983194053173065,0.694501996040344,0.918898582458496,0.694635987281799,0.929291129112244,0.694570004940033,0.950858056545258,0.581453025341034,0.940365850925446,0.581206023693085,0.959837913513184,0.581539988517761,0.97042042016983,0.581649005413055,0.983438313007355,0.581166982650757,0.929300785064697,0.581241011619568,0.918914377689362,0.581209003925323,0.950837850570679,0.555643022060394,0.940383970737457,0.555573999881744,0.959846913814545,0.555580019950867,0.970414698123932,0.55560702085495,0.98315566778183,0.555476009845734,0.929255545139313,0.555697023868561,0.918889582157135,0.555585980415344,0.940409064292908,0.553161978721619,0.970415055751801,0.553183972835541,0.983181178569794,0.553642988204956,0.970431089401245,0.948082983493805,0.970414519309998,0.543946981430054,0.666254878044128,0.185121700167656,0.666991889476776,0.187872707843781,0.663955867290497,0.189625710248947,0.662749886512756,0.185121700167656,0.669005870819092,0.189885705709457,0.667252898216248,0.192921698093414,0.671756863594055,0.190622702240944,0.671756863594055,0.194128692150116,0.674506902694702,0.189885705709457,0.676259875297546,0.192921698093414,0.676520884037018,0.187872707843781,0.679556906223297,0.189625710248947,0.677257895469666,0.185121700167656,0.680762887001038,0.185121700167656,0.676520884037018,0.182371705770493,0.679556906223297,0.180618703365326,0.674506902694702,0.180357694625854,0.676259875297546,0.177321702241898,0.671756863594055,0.179620698094368,0.671756863594055,0.176114708185196,0.669005870819092,0.180357694625854,0.667252898216248,0.177321702241898,0.666991889476776,0.182371705770493,0.663955867290497,0.180618703365326,0.637106657028198,0.196973383426666,0.628714680671692,0.196973383426666,0.628714680671692,0.177578389644623,0.637106657028198,0.177578389644623,0.620323657989502, 0.196973383426666,0.620323657989502,0.177578389644623,0.611931681632996,0.196973383426666,0.611931681632996,0.177578389644623,0.603539705276489,0.196973383426666,0.603539705276489,0.177578389644623,0.595148682594299,0.196973383426666,0.595148682594299,0.177578389644623,0.586756706237793,0.196973383426666,0.586756706237793,0.177578389644623,0.578364610671997,0.196973383426666,0.578364610671997,0.177578389644623,0.569972634315491,0.196973383426666,0.569972634315491,0.177578389644623,0.561581611633301,0.196973383426666,0.561581611633301,0.177578389644623,0.553189635276794,0.196973383426666,0.553189635276794,0.177578389644623,0.544798612594604,0.196973383426666,0.544798612594604,0.177578389644623,0.536406636238098,0.196973383426666,0.536406636238098,0.177578389644623,0.694345891475677,0.188626706600189,0.695552885532379,0.193129703402519,0.698588907718658,0.191376700997353,0.697851896286011,0.188626706600189,0.698849856853485,0.196426704525948,0.700602889060974,0.193390697240829,0.703352868556976,0.197633698582649,0.703352868556976,0.194127693772316,0.707855880260468,0.196426704525948,0.70610386133194,0.193390697240829,0.711152851581573,0.193129703402519,0.708116888999939,0.191376700997353,0.71235990524292,0.188626706600189,0.708853900432587,0.188626706600189,0.711152851581573,0.184122696518898,0.708116888999939,0.185875698924065,0.707855880260468,0.18082669377327,0.70610386133194,0.183862701058388,0.703352868556976,0.179619699716568,0.703352868556976,0.183125704526901,0.698849856853485,0.18082669377327,0.700602889060974,0.183862701058388,0.695552885532379,0.184122696518898,0.698588907718658,0.185875698924065,0.671756863594055,0.185121700167656,0.703352868556976,0.188626706600189,0.196167469024658,0.686228573322296,0.196904480457306,0.68897956609726,0.193868458271027,0.690732538700104,0.192662477493286,0.686228573322296,0.198918461799622,0.690992534160614,0.197165489196777,0.694028556346893,0.201669454574585,0.691729545593262,0.201669454574585,0.695235550403595,0.204419493675232,0.690992534160614,0.206172466278076,0.694028556346893, 0.206433475017548,0.68897956609726,0.209469527006149,0.690732538700104,0.207170486450195,0.686228573322296,0.21067550778389,0.686228573322296,0.206433475017548,0.683478593826294,0.209469527006149,0.681725561618805,0.204419493675232,0.681464552879334,0.206172466278076,0.678428590297699,0.201669454574585,0.680727601051331,0.201669454574585,0.677221596240997,0.198918461799622,0.681464552879334,0.197165489196777,0.678428590297699,0.196904480457306,0.683478593826294,0.193868458271027,0.681725561618805,0.484030604362488,0.98568207025528,0.475638628005981,0.98568207025528,0.475638628005981,0.966287076473236,0.484030604362488,0.966287076473236,0.467247605323792,0.98568207025528,0.467247605323792,0.966287076473236,0.458855628967285,0.98568207025528,0.458855628967285,0.966287076473236,0.450463652610779,0.98568207025528,0.450463652610779,0.966287076473236,0.442072600126266,0.98568207025528,0.442072600126266,0.966287076473236,0.433680593967438,0.98568207025528,0.433680593967438,0.966287076473236,0.425288558006287,0.98568207025528,0.425288558006287,0.966287076473236,0.41689658164978,0.98568207025528,0.41689658164978,0.966287076473236,0.40850555896759,0.98568207025528,0.40850555896759,0.966287076473236,0.400113552808762,0.98568207025528,0.400113552808762,0.966287076473236,0.391722530126572,0.98568207025528,0.391722530126572,0.966287076473236,0.383330494165421,0.98568207025528,0.383330494165421,0.966287076473236,0.304411888122559,0.688221275806427,0.30561888217926,0.692724287509918,0.30865490436554,0.690971255302429,0.307917892932892,0.688221275806427,0.308915853500366,0.696021258831024,0.310668885707855,0.692985236644745,0.313418865203857,0.697228252887726,0.313418865203857,0.693722248077393,0.317921876907349,0.696021258831024,0.316169857978821,0.692985236644745,0.321218848228455,0.692724287509918,0.31818288564682,0.690971255302429,0.322425901889801,0.688221275806427,0.318919897079468,0.688221275806427,0.321218848228455,0.683717250823975,0.31818288564682,0.685470283031464,0.317921876907349,0.68042129278183,0.316169857978821,0.683457255363464, 0.313418865203857,0.679214298725128,0.313418865203857,0.682720303535461,0.308915853500366,0.68042129278183,0.310668885707855,0.683457255363464,0.30561888217926,0.683717250823975,0.30865490436554,0.685470283031464,0.201669454574585,0.686228573322296,0.313418865203857,0.688221275806427,0.436602085828781,0.941264986991882,0.424341261386871,0.941391885280609,0.424562275409698,0.937686920166016,0.43394461274147,0.935554206371307,0.437937825918198,0.945113122463226,0.427725821733475,0.946127116680145,0.447171837091446,0.946034073829651,0.440390795469284,0.949673116207123,0.447952836751938,0.943000078201294,0.449036806821823,0.946773111820221,0.445495814085007,0.953152120113373,0.450924783945084,0.942767083644867,0.448777824640274,0.938124120235443,0.44967582821846,0.931375086307526,0.452940791845322,0.929853081703186,0.452171832323074,0.937255084514618,0.440711826086044,0.93385112285614,0.440075784921646,0.957902073860168,0.434637814760208,0.954350113868713,0.453285783529282,0.947732090950012,0.471707791090012,0.947158098220825,0.481918841600418,0.955802083015442,0.451126784086227,0.953770101070404,0.454725831747055,0.942560076713562,0.469100803136826,0.94203907251358,0.455673784017563,0.936747074127197,0.467733830213547,0.936083078384399,0.456109791994095,0.929137110710144,0.467064827680588,0.929319083690643,0.454465836286545,0.963562071323395,0.444362789392471,0.959776103496552,0.483080834150314,0.945958077907562,0.487268835306168,0.950570106506348,0.481009811162949,0.941148102283478,0.479327827692032,0.935361087322235,0.477140814065933,0.927074074745178,0.491794794797897,0.950663089752197,0.488021820783615,0.959578096866608,0.442439824342728,0.880873084068298,0.443016797304153,0.917717099189758,0.434240609407425,0.920384228229523,0.435645788908005,0.880638122558594,0.449188798666,0.88078910112381,0.449962824583054,0.914986073970795,0.451959818601608,0.880766093730927,0.452704817056656,0.913469076156616,0.454994827508926,0.880710124969482,0.455751806497574,0.912858068943024,0.464914828538895,0.881043076515198,0.466186791658401, 0.912805080413818,0.472217828035355,0.880905091762543,0.473542839288712,0.912178099155426,0.43418762087822,0.932620227336884,0.442182809114456,0.929867088794708,0.424560844898224,0.934934914112091,0.450033813714981,0.926601111888886,0.452957838773727,0.924636125564575,0.456031829118729,0.923735082149506,0.467060834169388,0.92342609167099,0.474830836057663,0.922012090682983,0.482026785612106,0.919455111026764,0.493646830320358,0.881250083446503,0.494294792413712,0.935725092887878,0.48645082116127,0.932435095310211,0.476138800382614,0.91823011636734,0.476120799779892,0.912161111831665,0.477775782346725,0.913396120071411,0.477106839418411,0.920067071914673,0.474008828401566,0.918963074684143,0.485741823911667,0.944444119930267,0.488109797239304,0.9481320977211,0.484248787164688,0.940308094024658,0.488365799188614,0.939024090766907,0.48951181769371,0.943950116634369,0.482677787542343,0.935206115245819,0.481592804193497,0.930509090423584,0.492816835641861,0.948016107082367,0.493507832288742,0.944359064102173,0.475021809339523,0.880766093730927,0.479202836751938,0.880669116973877,0.442780822515488,0.926092088222504,0.434338599443436,0.9292032122612,0.424382388591766,0.930802583694458,0.424419283866882,0.923693895339966,0.450083822011948,0.922827124595642,0.452880829572678,0.920934081077576,0.455936819314957,0.920118093490601,0.466622799634933,0.919915080070496,0.479219824075699,0.924248099327087,0.471384793519974,0.846953868865967,0.470063835382462,0.841632843017578,0.466726809740067,0.841341853141785,0.469436794519424,0.847892880439758,0.476459830999374,0.847029864788055,0.477135807275772,0.842116832733154,0.471228808164597,0.848954856395721,0.476047843694687,0.849389851093292,0.481706827878952,0.846538841724396,0.482218563556671,0.842412352561951,0.483437806367874,0.848561882972717,0.469973206520081,0.835806429386139,0.463640153408051,0.837019026279449,0.476436793804169,0.835562407970428,0.482196271419525,0.834841012954712,0.486329942941666,0.842598080635071,0.487164169549942,0.833344876766205,0.484429806470871,0.847736835479736, 0.463386803865433,0.846568882465363,0.464255839586258,0.848803877830505,0.46878781914711,0.853211879730225,0.466625839471817,0.852070868015289,0.475294798612595,0.853986859321594,0.483796805143356,0.853312849998474,0.442647784948349,0.87257307767868,0.442807823419571,0.876678109169006,0.435251802206039,0.876841068267822,0.435576826334,0.87195211648941,0.422205835580826,0.878546118736267,0.418261796236038,0.874418079853058,0.424841791391373,0.872083067893982,0.426899820566177,0.876038074493408,0.448366791009903,0.873155117034912,0.448464840650558,0.877056121826172,0.45179882645607,0.872652113437653,0.452183812856674,0.876758098602295,0.455075830221176,0.87313711643219,0.455482810735703,0.877019107341766,0.464977830648422,0.873112082481384,0.464818805456162,0.877211093902588,0.464948803186417,0.873331069946289,0.472225815057755,0.872785091400146,0.472162812948227,0.877062082290649,0.46201679110527,0.843796849250793,0.460313826799393,0.841695845127106,0.490167796611786,0.810417294502258,0.489107817411423,0.842573881149292,0.488412827253342,0.848772883415222,0.486936837434769,0.851362824440002,0.458786815404892,0.839477837085724,0.461798757314682,0.83217716217041,0.457640796899796,0.833375871181488,0.419569820165634,0.884346067905426,0.414420813322067,0.883137106895447,0.428682833909988,0.880479097366333,0.424258798360825,0.880595088005066,0.472152799367905,0.880814075469971,0.475316792726517,0.877208113670349,0.47900179028511,0.8768150806427,0.423194795846939,0.884852111339569,0.458052843809128,0.803758859634399,0.459386795759201,0.802239835262299,0.465224832296371,0.850619852542877,0.462728500366211,0.802692890167236,0.471435219049454,0.801780104637146,0.473653614521027,0.817082405090332,0.471674233675003,0.814885854721069,0.471800714731216,0.8108771443367,0.47171738743782,0.80505758523941,0.471364051103592,0.803417921066284,0.481914818286896,0.819085001945496,0.476669877767563,0.818559646606445,0.479317963123322,0.818424940109253,0.9275261759758,0.535681784152985,0.9275261759758,0.511335790157318,0.93280816078186,0.516026794910431, 0.93280816078186,0.541702806949615,0.945741176605225,0.50871878862381,0.954260170459747,0.51294481754303,0.949129164218903,0.493196845054626,0.957548201084137,0.488722831010818,0.957707166671753,0.508802831172943,0.949129164218903,0.504923820495605,0.945820152759552,0.489388823509216,0.9275261759758,0.487526834011078,0.932649195194244,0.482540845870972,0.954085171222687,0.484722852706909,0.9275261759758,0.459514826536179,0.93280816078186,0.453912824392319,0.925010144710541,0.456877827644348,0.929908156394959,0.450872838497162,0.924217164516449,0.490311831235886,0.92421418428421,0.460502833127975,0.942411184310913,0.492188841104507,0.946078181266785,0.502918839454651,0.946078181266785,0.496426850557327,0.924217164516449,0.508941829204559,0.942118167877197,0.506864845752716,0.924217164516449,0.535678803920746,0.929908156394959,0.544741809368134,0.925010144710541,0.538318812847137,0.912779152393341,0.456877827644348,0.91581118106842,0.450872838497162,0.912171185016632,0.460506826639175,0.877566158771515,0.432177841663361,0.875054180622101,0.422214835882187,0.877520203590393,0.436571836471558,0.860830187797546,0.49033585190773,0.860830187797546,0.535681784152985,0.860830187797546,0.538318812847137,0.855935156345367,0.544741809368134,0.875080168247223,0.432530850172043,0.846391201019287,0.478454828262329,0.837869167327881,0.478103846311569,0.872568190097809,0.422464847564697,0.874915182590485,0.436898827552795,0.847837150096893,0.481218844652176,0.846564173698425,0.48319885134697,0.837823152542114,0.483241826295853,0.858311176300049,0.491403847932816,0.858315169811249,0.535681784152985,0.853035151958466,0.541702806949615,0.852800190448761,0.493777841329575,0.54886794090271,0.140126794576645,0.580910801887512,0.140126675367355,0.580986261367798,0.206343248486519,0.547297358512878,0.206389978528023,0.623308777809143,0.206357315182686,0.62431001663208,0.140126258134842,0.66670024394989,0.140125960111618,0.666964650154114,0.206389173865318,0.801937699317932,0.140125751495361,0.834112167358398,0.140125304460526,0.833380341529846, 0.206447616219521,0.798692345619202,0.2064598351717,0.70871901512146,0.140126079320908,0.708343744277954,0.206419095396996,0.738358378410339,0.140125870704651,0.737811625003815,0.206427320837975,0.505439400672913,0.140126705169678,0.505253851413727,0.206341490149498,0.867523729801178,0.206459268927574,0.867364704608917,0.140125632286072,0.912659704685211,0.140125870704651,0.912305533885956,0.206408992409706,0.955695271492004,0.140126377344131,0.95473176240921,0.20637871325016,0.990962564945221,0.140126705169678,0.990817308425903,0.206341490149498,0.762690722942352,0.206460431218147,0.764277935028076,0.140125930309296,0.708332777023315,0.213471487164497,0.666818737983704,0.213486954569817,0.580866754055023,0.213531300425529,0.552671194076538,0.213538929820061,0.867097139358521,0.213460102677345,0.833264827728271,0.213448628783226,0.738031268119812,0.134770154953003,0.764140486717224,0.134768545627594,0.54841148853302,0.134771943092346,0.580709457397461,0.134772598743439,0.955138742923737,0.134769082069397,0.99084347486496,0.134770423173904,0.955138325691223,0.21351931989193,0.91226589679718,0.213492795825005,0.623466789722443,0.134769797325134,0.666678547859192,0.134767204523087,0.505287349224091,0.134770423173904,0.526900827884674,0.134791105985641,0.813728332519531,0.134766131639481,0.833729028701782,0.134764909744263,0.708701312541962,0.134767413139343,0.607445955276489,0.213516846299171,0.598018407821655,0.213533356785774,0.737798929214478,0.213451042771339,0.912513852119446,0.134767681360245,0.605798184871674,0.134772509336472,0.867219388484955,0.134765982627869,0.783333599567413,0.213435009121895,0.763477146625519,0.213436469435692,0.789615094661713,0.134767204523087,0.807025253772736,0.213438406586647,0.879601240158081,0.213489606976509,0.976208984851837,0.213530078530312,0.991184830665588,0.213534757494926,0.637205958366394,0.213502570986748,0.533745288848877,0.21353580057621,0.505723118782043,0.213534757494926,0.117417640984058,0.0240060389041901,0.132999181747437,0.0240060389041901,0.132999181747437,0.0736037790775299, 0.117417640984058,0.0736037790775299,0.148580744862556,0.0363438427448273,0.148580744862556,0.0625407993793488,0.15532124042511,0.0183465182781219,0.174458786845207,0.0183465182781219,0.174458786845207,0.079263299703598,0.15532124042511,0.079263299703598,0.15532124042511,0.0653763711452484,0.15532124042511,0.036093145608902,0.193596348166466,0.0183465182781219,0.193596348166466,0.079263299703598,0.212733954191208,0.0183465182781219,0.212733954191208,0.079263299703598,0.231871515512466,0.0183465182781219,0.231871515512466,0.079263299703598,0.251009106636047,0.0183465182781219,0.251009106636047,0.079263299703598,0.270146667957306,0.0183465182781219,0.270146667957306,0.079263299703598,0.293477118015289,0.0250197052955627,0.293477118015289,0.0725901126861572,0.278532445430756,0.0725901126861572,0.278532445430756,0.0250197052955627,0.346696972846985,0.0183465182781219,0.363944262266159,0.0183465182781219,0.363944262266159,0.079263299703598,0.346696972846985,0.079263299703598,0.381664097309113,0.0183465182781219,0.381664097309113,0.079263299703598,0.400329113006592,0.0183465182781219,0.400329113006592,0.079263299703598,0.418994158506393,0.0183465182781219,0.418994158506393,0.079263299703598,0.436713963747025,0.0183465182781219,0.436713963747025,0.079263299703598,0.451125770807266,0.0183465182781219,0.451125770807266,0.079263299703598,0.453631192445755,0.0243910253047943,0.478154629468918,0.0243910253047943,0.478154629468918,0.0732187926769257,0.453631192445755,0.0732187926769257,0.480660051107407,0.0183465182781219,0.499797612428665,0.0183465182781219,0.499797612428665,0.079263299703598,0.480660051107407,0.079263299703598,0.134304761886597,0.0792012065649033,0.179743334650993,0.0853549689054489,0.161360695958138,0.0853549689054489,0.198125943541527,0.0853549689054489,0.216508641839027,0.0853549689054489,0.234891265630722,0.0853549689054489,0.253273904323578,0.0853549689054489,0.271656543016434,0.0853549689054489,0.289284229278564,0.079263299703598,0.29003918170929,0.0853549689054489,0.308421850204468,0.079263299703598,0.308421850204468, 0.0853549689054489,0.327559411525726,0.079263299703598,0.326804518699646,0.0853549689054489,0.364042311906815,0.0853549689054489,0.381952404975891,0.0853549689054489,0.400335073471069,0.0853549689054489,0.418717712163925,0.0853549689054489,0.437100380659103,0.0853549689054489,0.454706519842148,0.0868177562952042,0.454798966646194,0.079263299703598,0.476986855268478,0.079263299703598,0.47412446141243,0.0828233659267426,0.455741792917252,0.0828233659267426,0.492248266935349,0.0853549689054489,0.476971417665482,0.0865589380264282,0.477822333574295,0.00847423076629639,0.496644586324692,0.0122548341751099,0.476986855268478,0.0183465182781219,0.454798966646194,0.0183465182781219,0.454746812582016,0.0122548341751099,0.477822333574295,0.0122548341751099,0.43828746676445,0.0122548341751099,0.454746812582016,0.00847423076629639,0.419937759637833,0.0122548341751099,0.400642871856689,0.0122548341751099,0.382293164730072,0.0122548341751099,0.355477511882782,0.0122548341751099,0.327559411525726,0.0183465182781219,0.327244102954865,0.0122548341751099,0.308421850204468,0.0183465182781219,0.308421850204468,0.0122548341751099,0.289284229278564,0.0183465182781219,0.289599537849426,0.0122548341751099,0.27077728509903,0.0122548341751099,0.25195500254631,0.0122548341751099,0.233132749795914,0.0122548341751099,0.214310467243195,0.0122548341751099,0.195488184690475,0.0122548341751099,0.176665931940079,0.0122548341751099,0.157843679189682,0.0122548341751099,0.135744094848633,0.0177395939826965,0.126710444688797,0.012899249792099,0.308421850204468,0.0725901126861572,0.323366522789001,0.0725901126861572,0.308421850204468,0.0250197052955627,0.323366522789001,0.0250197052955627,0.33831125497818,0.0250197052955627,0.33831125497818,0.0725901126861572,0.137822777032852,0.0859993696212769,0.119440190494061,0.0853549689054489,0.509250342845917,0.255241394042969,0.519829928874969,0.255241394042969,0.519829928874969,0.292021661996841,0.509250342845917,0.292021661996841,0.522211849689484,0.26112961769104,0.530635476112366,0.26112961769104,0.530635476112366, 0.286133408546448,0.522211849689484,0.286133408546448,0.53301739692688,0.255241394042969,0.547258377075195,0.255241394042969,0.547258377075195,0.292021661996841,0.53301739692688,0.292021661996841,0.560930490493774,0.255241394042969,0.560930490493774,0.292021661996841,0.575831532478333,0.255241394042969,0.575831532478333,0.292021661996841,0.584670305252075,0.255241394042969,0.593509256839752,0.255241394042969,0.593509256839752,0.292021661996841,0.584670305252075,0.292021661996841,0.607021868228912,0.255241394042969,0.607021868228912,0.292021661996841,0.608328104019165,0.255351543426514,0.60798978805542,0.291911512613297,0.631641685962677,0.255241394042969,0.645313739776611,0.255241394042969,0.645313739776611,0.292021661996841,0.631641685962677,0.292021661996841,0.661656260490417,0.292021661996841,0.661656260490417,0.255241394042969,0.67240446805954,0.255241394042969,0.67240446805954,0.292021661996841,0.67727667093277,0.258893609046936,0.68840879201889,0.258893609046936,0.68840879201889,0.288369446992874,0.67727667093277,0.288369446992874,0.692283034324646,0.255241394042969,0.702020287513733,0.255241394042969,0.702020287513733,0.26885798573494,0.692283034324646,0.268733501434326,0.728294551372528,0.26928785443306,0.730924963951111,0.264655590057373,0.731147229671478,0.282434970140457,0.728590369224548,0.278678953647614,0.759061276912689,0.292021661996841,0.737114429473877,0.292021661996841,0.519534051418304,0.295859485864639,0.510703921318054,0.295699685811996,0.521997570991516,0.291542291641235,0.530849814414978,0.291542291641235,0.52985292673111,0.293941974639893,0.522938013076782,0.293941974639893,0.548286318778992,0.295699685811996,0.533097088336945,0.295859485864639,0.561820030212402,0.295699685811996,0.576498627662659,0.295699685811996,0.593954026699066,0.295699685811996,0.586727619171143,0.295699685811996,0.619442939758301,0.295699685811996,0.63055557012558,0.291911512613297,0.645108163356781,0.295699685811996,0.674751460552216,0.292021661996841,0.689935982227325,0.292021661996841,0.68997049331665,0.294245630502701, 0.674582898616791,0.294349431991577,0.692283034324646,0.292021661996841,0.702020287513733,0.292021661996841,0.707530319690704,0.295905232429504,0.692021667957306,0.295699685811996,0.713917076587677,0.294126242399216,0.710383296012878,0.292021661996841,0.717887699604034,0.289428502321243,0.721236705780029,0.291851103305817,0.722504794597626,0.255571186542511,0.735293805599213,0.250811010599136,0.755518853664398,0.251563340425491,0.759061276912689,0.255241394042969,0.712822198867798,0.251563340425491,0.720109462738037,0.249967366456985,0.69219583272934,0.251563340425491,0.694677233695984,0.251418262720108,0.703869879245758,0.249644443392754,0.690205931663513,0.255415976047516,0.674463152885437,0.255415976047516,0.674392879009247,0.252827793359756,0.690136849880219,0.252827793359756,0.655428230762482,0.251563340425491,0.644962728023529,0.251563340425491,0.631641685962677,0.251563340425491,0.630324900150299,0.255351543426514,0.630353391170502,0.251563340425491,0.594268620014191,0.251563340425491,0.607401549816132,0.251563340425491,0.586685299873352,0.251563340425491,0.562449216842651,0.251563340425491,0.57697057723999,0.251563340425491,0.549013435840607,0.251563340425491,0.533305525779724,0.251403540372849,0.530572474002838,0.255880564451218,0.522274851799011,0.255880564451218,0.522143185138702,0.25300145149231,0.53054416179657,0.25300145149231,0.510933101177216,0.251243770122528,0.520020961761475,0.251243770122528,0.725863039493561,0.296765446662903,0.654578328132629,0.295699685811996,0.672324597835541,0.295699685811996,0.672315776348114,0.251563340425491,0.608684480190277,0.251563340425491,0.611870288848877,0.285906404256821,0.612092256546021,0.261356621980667,0.626523792743683,0.261356621980667,0.626675128936768,0.285906404256821,0.610458552837372,0.258563876152039,0.610186100006104,0.288699120283127,0.628173530101776,0.258563876152039,0.628359317779541,0.288699120283127,0.710240542888641,0.279782265424728,0.712688744068146,0.279875934123993,0.715967237949371,0.2800013422966,0.717887699604034,0.279166221618652,0.709953963756561, 0.255241394042969,0.71013218164444,0.268599092960358,0.692283034324646,0.279572337865829,0.717887699604034,0.257834553718567,0.73713207244873,0.295699685811996,0.710204064846039,0.276652216911316,0.717887699604034,0.269315272569656,0.715496778488159,0.26860436797142,0.712814450263977,0.26860174536705,0.717887699604034,0.276618808507919,0.717887699604034,0.273119807243347,0.71016263961792,0.273114681243896,0.435481578111649,0.15431809425354,0.446157962083817,0.150084733963013,0.457779586315155,0.156041339039803,0.460686892271042,0.165520489215851,0.456544667482376,0.175069242715836,0.445858657360077,0.179584175348282,0.435630679130554,0.175703316926956,0.430921524763107,0.166000366210938,0.714962899684906,0.270623236894608,0.713253676891327,0.270621538162231,0.716486394405365,0.273484319448471,0.716486394405365,0.276114255189896,0.715262711048126,0.277981549501419,0.713173627853394,0.277900576591492,0.71159040927887,0.275819212198257,0.711563944816589,0.273535251617432,0.420944809913635,0.140491098165512,0.447480946779251,0.130861103534698,0.446444302797318,0.14261069893837,0.429433971643448,0.149333462119102,0.472999304533005,0.144602715969086,0.464853942394257,0.151289969682693,0.48190838098526,0.168646842241287,0.471292048692703,0.166206866502762,0.472529500722885,0.191351324319839,0.464307546615601,0.183630049228668,0.446487218141556,0.201509296894073,0.446269273757935,0.190046846866608,0.42204624414444,0.190741002559662,0.429016202688217,0.183300197124481,0.412335008382797,0.164847373962402,0.42254164814949,0.16473788022995,0.702020287513733,0.279631435871124,0.756986498832703,0.295699685811996,0.345926940441132,0.119116887450218,0.346205949783325,0.126732960343361,0.335039973258972,0.128149881958961,0.334273934364319,0.121359936892986,0.464493989944458,0.0617408826947212,0.445115029811859,0.0545429028570652,0.44423896074295,0.0468698628246784,0.461815476417542,0.0476899035274982,0.485869586467743,0.0670332908630371,0.480020046234131,0.0665578842163086,0.481384992599487,0.0482379160821438,0.485941648483276,0.0480909235775471, 0.363856673240662,0.0174592640250921,0.38709369301796,0.0166801586747169,0.381678938865662,0.0272797252982855,0.367493331432343,0.0291505437344313,0.376929938793182,0.070652961730957,0.367470979690552,0.075052984058857,0.359574973583221,0.0591329373419285,0.369912981987,0.0555108822882175,0.427619010210037,0.0495939254760742,0.428809970617294,0.0418559163808823,0.446868002414703,0.0637168884277344,0.428369969129562,0.0578979291021824,0.375767946243286,0.0400979444384575,0.393406987190247,0.0379018783569336,0.393935978412628,0.0484548807144165,0.37791895866394,0.0518059767782688,0.353569984436035,0.06186593323946,0.357837975025177,0.0792889669537544,0.343334972858429,0.0646718740463257,0.346487939357758,0.0806509256362915,0.33023801445961,0.0773168876767159,0.326377004384995,0.0666378736495972,0.42767396569252,0.0183390490710735,0.439705610275269,0.0183292739093304,0.41932600736618,0.0231928899884224,0.418087005615234,0.0397139713168144,0.39676696062088,0.0269179418683052,0.43825501203537,0.138734936714172,0.43271404504776,0.134233966469765,0.443484008312225,0.134702935814857,0.448534071445465,0.138510346412659,0.213209092617035,0.454233139753342,0.222546279430389,0.456680208444595,0.217176869511604,0.462784379720688,0.207614928483963,0.45906537771225,0.162320956587791,0.474664092063904,0.174311637878418,0.47051203250885,0.179501697421074,0.480793476104736,0.170697286725044,0.485127389431,0.233182862401009,0.464296638965607,0.227300137281418,0.469402611255646,0.462797999382019,0.127335920929909,0.448831021785736,0.126375943422318,0.456102013587952,0.105708956718445,0.465476036071777,0.108788967132568,0.229432791471481,0.451370120048523,0.238226130604744,0.45958748459816,0.233182862401009,0.464296638965607,0.186047747731209,0.500680327415466,0.158009499311447,0.50234192609787,0.15537104010582,0.493373572826386,0.321978002786636,0.0544348992407322,0.336007952690125,0.049369215965271,0.308640956878662,0.108953952789307,0.321283012628555,0.106167912483215,0.323506981134415,0.121309876441956,0.310332953929901,0.122801892459393, 0.3228540122509,0.129741936922073,0.477366030216217,0.112092956900597,0.477949023246765,0.128193989396095,0.32362100481987,0.160038992762566,0.311716973781586,0.15666800737381,0.311060965061188,0.143482968211174,0.32339158654213,0.143967017531395,0.30826997756958,0.0568299368023872,0.316699981689453,0.0690999031066895,0.299986958503723,0.070612907409668,0.295645952224731,0.0574278868734837,0.460016489028931,0.138525247573853,0.446087002754211,0.130983978509903,0.460963010787964,0.134868994355202,0.30437296628952,0.0968248769640923,0.322142988443375,0.093531958758831,0.485794186592102,0.0868527814745903,0.485774040222168,0.0921451896429062,0.477921009063721,0.0918859094381332,0.478522002696991,0.0861399099230766,0.402227431535721,0.0476553328335285,0.403438299894333,0.0386384651064873,0.412217020988464,0.0466918833553791,0.416370987892151,0.0573204793035984,0.430459022521973,0.125516921281815,0.432651996612549,0.122440926730633,0.444855988025665,0.104431867599487,0.227300137281418,0.469402611255646,0.203411817550659,0.483737856149673,0.195617988705635,0.472785621881485,0.19428214430809,0.464545577764511,0.188483953475952,0.476161897182465,0.186072766780853,0.46603798866272,0.338515013456345,0.142957970499992,0.343071937561035,0.1647559851408,0.32362100481987,0.160038992762566,0.301395952701569,0.0766879394650459,0.319422990083694,0.0762759521603584,0.334808945655823,0.104914903640747,0.311294972896576,0.130403906106949,0.195765465497971,0.456739544868469,0.199947416782379,0.449668496847153,0.186333611607552,0.458328783512115,0.235976189374924,0.422737568616867,0.233289882540703,0.435269981622696,0.22863744199276,0.433324098587036,0.231617197394371,0.422963738441467,0.212580248713493,0.42522794008255,0.218351110816002,0.417634189128876,0.171137273311615,0.452540785074234,0.19088676571846,0.448855668306351,0.171453878283501,0.461145281791687,0.207534104585648,0.434883326292038,0.193104118108749,0.435332447290421,0.221322447061539,0.442402839660645,0.432255029678345,0.101276867091656,0.420882999897003,0.118860952556133, 0.404800415039063,0.0859559699892998,0.393645942211151,0.08820890635252,0.390589952468872,0.0825818777084351,0.39976578950882,0.0776689127087593,0.485743880271912,0.100076787173748,0.477873027324677,0.0996968671679497,0.45872300863266,0.0952979251742363,0.447701036930084,0.0940259620547295,0.448850989341736,0.0851858854293823,0.461062014102936,0.0880689546465874,0.46634304523468,0.0967159196734428,0.468398034572601,0.0892898887395859,0.485694110393524,0.113153927028179,0.42315399646759,0.100682966411114,0.427370011806488,0.0928538888692856,0.433808028697968,0.0926349014043808,0.429668009281158,0.0725358724594116,0.421362996101379,0.0715439319610596,0.468300998210907,0.0813659429550171,0.419315040111542,0.0907299444079399,0.418715000152588,0.0983129665255547,0.449016034603119,0.0755349472165108,0.464888989925385,0.0693919658660889,0.461823999881744,0.0784109905362129,0.195617824792862,0.423909842967987,0.172204732894897,0.434487521648407,0.170622900128365,0.443807899951935,0.40535169839859,0.0255004242062569,0.486001968383789,0.0322412326931953,0.482778012752533,0.0314859226346016,0.458769738674164,0.0271198824048042,0.148692548274994,0.474402964115143,0.156207948923111,0.46336442232132,0.158522829413414,0.469626516103745,0.150158122181892,0.4778713285923,0.336051940917969,0.0938988849520683,0.427223026752472,0.129340916872025,0.154441297054291,0.456446886062622,0.434119045734406,0.0833479166030884,0.367071986198425,0.143358990550041,0.360416948795319,0.142854019999504,0.355360984802246,0.133987918496132,0.362733960151672,0.134331956505775,0.342585980892181,0.133315935730934,0.346638977527618,0.142780944705009,0.372455954551697,0.0932719632983208,0.361449956893921,0.0955089256167412,0.383902966976166,0.0905029699206352,0.358545243740082,0.0400422140955925,0.313580930233002,0.0183220021426678,0.316425204277039,0.0351407565176487,0.29086709022522,0.0356446504592896,0.289316952228546,0.018308948725462,0.351096987724304,0.0952849313616753,0.349691987037659,0.102035880088806,0.364316940307617,0.115056857466698,0.359541952610016, 0.118029937148094,0.36161595582962,0.101966969668865,0.36567896604538,0.0999829694628716,0.332665920257568,0.017338577657938,0.332940250635147,0.0322619453072548,0.478662014007568,0.073200948536396,0.485842108726501,0.0742625072598457,0.382985949516296,0.0671079158782959,0.427242279052734,0.0829684734344482,0.383216977119446,0.0928228944540024,0.39438396692276,0.0930079147219658,0.392292201519012,0.0625975206494331,0.408632040023804,0.0944999381899834,0.232312262058258,0.41575089097023,0.236382856965065,0.415675848722458,0.419957041740417,0.122609972953796,0.400416970252991,0.0183481685817242,0.409198999404907,0.0183454267680645,0.203411817550659,0.483737856149673,0.196154832839966,0.489326804876328,0.196154832839966,0.489326804876328,0.19033981859684,0.49510869383812,0.19033981859684,0.49510869383812,0.186047747731209,0.500680327415466,0.485597789287567,0.138465285301209,0.476042032241821,0.138350963592529,0.485637247562408,0.128092005848885,0.151077419519424,0.445158451795578,0.366678953170776,0.119830973446369,0.368259966373444,0.126676931977272,0.359268963336945,0.12646795809269,0.485950529575348,0.0183152668178082,0.479462027549744,0.0183130018413067,0.453415989875793,0.0183239094913006,0.369903981685638,0.134106889367104,0.373236954212189,0.143116995692253,0.371926963329315,0.0970649644732475,0.373819947242737,0.103067867457867,0.372200965881348,0.105761893093586,0.368823945522308,0.102561950683594,0.372473955154419,0.100392930209637,0.38243293762207,0.0961818620562553,0.385993957519531,0.0993449613451958,0.376885950565338,0.101719968020916,0.413311004638672,0.103389978408813,0.414669036865234,0.100543968379498,0.418247997760773,0.105016946792603,0.415018022060394,0.11035393923521,0.399272978305817,0.0994099304080009,0.391910970211029,0.0985739156603813,0.393002986907959,0.0954788848757744,0.400765955448151,0.0964379236102104,0.417134046554565,0.120336890220642,0.41820102930069,0.116971962153912,0.21049553155899,0.405011147260666,0.215057298541069,0.413524895906448,0.195701420307159,0.417795836925507,0.195614144206047, 0.409544587135315,0.235859945416451,0.410693734884262,0.230855852365494,0.410929799079895,0.228610530495644,0.402189701795578,0.23365293443203,0.401708334684372,0.175187364220619,0.418592095375061,0.172039598226547,0.427001357078552,0.408568024635315,0.101532928645611,0.369436979293823,0.115216962993145,0.366244971752167,0.117275953292847,0.369841933250427,0.117376923561096,0.414501011371613,0.115345947444439,0.418657004833221,0.11144196242094,0.153990268707275,0.427918970584869,0.151908352971077,0.437153309583664,0.139076188206673,0.43651157617569,0.140847831964493,0.441695630550385,0.371345937252045,0.119782917201519,0.373300969600677,0.127673998475075,0.379085958003998,0.131915956735611,0.381070971488953,0.140116930007935,0.37816995382309,0.142098918557167,0.375084936618805,0.133167997002602,0.377117931842804,0.127672925591469,0.41354900598526,0.118271939456463,0.141847938299179,0.450452715158463,0.375266969203949,0.120584957301617,0.37290894985199,0.115036956965923,0.373572945594788,0.117233857512474,0.354764938354492,0.142936989665031,0.0221126787364483,0.40278023481369,0.0430613346397877,0.405642747879028,0.0346164181828499,0.423014014959335,0.0148042803630233,0.428189903497696,0.0667830854654312,0.412553608417511,0.0465438216924667,0.421115636825562,0.246295735239983,0.423134475946426,0.242421388626099,0.416994035243988,0.246866405010223,0.412204205989838,0.25031903386116,0.407809436321259,0.27196678519249,0.431371986865997,0.254433691501617,0.432346612215042,0.255984634160995,0.423993408679962,0.266697615385056,0.421198159456253,0.230822280049324,0.394175201654434,0.226955711841583,0.390069484710693,0.211398243904114,0.39171177148819,0.211811140179634,0.377181947231293,0.178134933114052,0.406528532505035,0.19376927614212,0.400352478027344,0.211693361401558,0.363953799009323,0.226899668574333,0.382175296545029,0.238422825932503,0.400304764509201,0.240351364016533,0.411613255739212,0.270903289318085,0.377638012170792,0.275848805904388,0.379736363887787,0.270530730485916,0.404950171709061,0.264952272176743,0.405869841575623, 0.244148418307304,0.376309484243393,0.241426035761833,0.395263463258743,0.226266324520111,0.37386354804039,0.0663717538118362,0.402082234621048,0.0455094911158085,0.398816287517548,0.256105154752731,0.374610006809235,0.0471179708838463,0.380587846040726,0.0669001266360283,0.385045796632767,0.0291461199522018,0.379811018705368,0.272370487451553,0.418341398239136,0.27677384018898,0.425391495227814,0.283442080020905,0.379811018705368,0.281850308179855,0.39956933259964,0.177228629589081,0.390103310346603,0.194592773914337,0.384531408548355,0.195340424776077,0.369327396154404,0.143867284059525,0.395011514425278,0.161331757903099,0.383459508419037,0.159221738576889,0.400585740804672,0.142621576786041,0.408942967653275,0.15837961435318,0.42087060213089,0.120065726339817,0.41377654671669,0.127373203635216,0.401823282241821,0.139244839549065,0.4298355281353,0.111766800284386,0.429065704345703,0.0972451567649841,0.411857843399048,0.0772195085883141,0.421740502119064,0.095130480825901,0.403346598148346,0.17634916305542,0.374548226594925,0.0636108666658401,0.2952039539814,0.0461999922990799,0.296132385730743,0.0587959922850132,0.275404304265976,0.0665735080838203,0.26949417591095,0.288657039403915,0.314827412366867,0.29256796836853,0.315671890974045,0.281483680009842,0.344933360815048,0.276222050189972,0.344134360551834,0.259127289056778,0.285984694957733,0.276356160640717,0.285037577152252,0.272337973117828,0.298776596784592,0.249414697289467,0.29795315861702,0.261916279792786,0.336328446865082,0.258436799049377,0.350742012262344,0.244289547204971,0.350730329751968,0.24590428173542,0.335024684667587,0.234617739915848,0.287215262651443,0.228602632880211,0.298038274049759,0.213830217719078,0.282431870698929,0.240341275930405,0.273122847080231,0.236845597624779,0.281610697507858,0.220344513654709,0.290668964385986,0.200212508440018,0.28718027472496,0.208638533949852,0.297157645225525,0.0814544484019279,0.294235825538635,0.072737954556942,0.294544905424118,0.0778514295816422,0.271062970161438,0.0843436047434807,0.268807142972946, 0.0709859803318977,0.255287438631058,0.0861772000789642,0.247442245483398,0.0633029490709305,0.256163388490677,0.267099618911743,0.257966637611389,0.2653768658638,0.274127095937729,0.155597716569901,0.236874669790268,0.174863114953041,0.238560110330582,0.159385040402412,0.256474822759628,0.149629265069962,0.251341491937637,0.301508396863937,0.256709277629852,0.285867035388947,0.261451840400696,0.277957618236542,0.243684083223343,0.294415533542633,0.240310877561569,0.199834585189819,0.251413822174072,0.244209036231041,0.255717843770981,0.187298104166985,0.27362322807312,0.168359324336052,0.26735731959343,0.178438186645508,0.242070972919464,0.167047083377838,0.211907893419266,0.186885207891464,0.214953362941742,0.194955199956894,0.19682365655899,0.215106248855591,0.197792708873749,0.20933723449707,0.211201041936874,0.175221294164658,0.196306139230728,0.147450417280197,0.207381099462509,0.137187317013741,0.211762100458145,0.140081971883774,0.196595400571823,0.1512670814991,0.196527302265167,0.127970397472382,0.21038806438446,0.121058322489262,0.211952209472656,0.121785379946232,0.196505725383759,0.129657715559006,0.197072863578796,0.0845750495791435,0.19821909070015,0.0999488309025764,0.197585672140121,0.0833824500441551,0.202737659215927,0.0974818840622902,0.218129456043243,0.0764319077134132,0.229774802923203,0.0527167096734047,0.33735990524292,0.0337732098996639,0.344221860170364,0.043855544179678,0.316411375999451,0.0597045868635178,0.313859313726425,0.0649498701095581,0.240378528833389,0.0694568306207657,0.22828996181488,0.0726714208722115,0.240517318248749,0.0745936557650566,0.201059222221375,0.0750992298126221,0.198740482330322,0.218126028776169,0.314886927604675,0.223737567663193,0.299924373626709,0.229556769132614,0.318195998668671,0.228116869926453,0.335072606801987,0.226676926016808,0.351949244737625,0.268396645784378,0.317351490259171,0.247750252485275,0.317070424556732,0.0704226419329643,0.314012110233307,0.0703398361802101,0.338263899087906,0.0979647859930992,0.235158890485764,0.0895573943853378,0.252161473035812, 0.0979962795972824,0.227216869592667,0.0795310288667679,0.326749175786972,0.174796655774117,0.355230301618576,0.172207280993462,0.328602582216263,0.182206809520721,0.333339333534241,0.1850516051054,0.351497828960419,0.162852704524994,0.302822828292847,0.174545884132385,0.296085745096207,0.299103260040283,0.278274834156036,0.284450978040695,0.225501120090485,0.291571855545044,0.228980481624603,0.276611596345901,0.225299328565598,0.274292796850204,0.196494400501251,0.285232484340668,0.200590342283249,0.0655610486865044,0.200590342283249,0.0666700080037117,0.195336312055588,0.0924057438969612,0.38458389043808,0.0932303592562675,0.367528825998306,0.116749636828899,0.367788940668106,0.121204100549221,0.381427645683289,0.117331683635712,0.336233168840408,0.092003345489502,0.350539088249207,0.0917140617966652,0.335976541042328,0.108027309179306,0.325187385082245,0.108629167079926,0.297859817743301,0.120672263205051,0.304602771997452,0.105572037398815,0.225321471691132,0.11294250190258,0.232092440128326,0.112178511917591,0.237730801105499,0.0936958119273186,0.296422809362412,0.108726009726524,0.269060283899307,0.119195587933064,0.27058008313179,0.142205134034157,0.304073244333267,0.137807816267014,0.328272491693497,0.101214416325092,0.219238698482513,0.105446971952915,0.196553498506546,0.210296034812927,0.349930197000504,0.21358397603035,0.335215210914612,0.0499802939593792,0.360706567764282,0.0681598111987114,0.363065034151077,0.0315500795841217,0.356001317501068,0.27397209405899,0.355198800563812,0.279129862785339,0.354241192340851,0.144784078001976,0.386222690343857,0.163328662514687,0.372996926307678,0.127109572291374,0.396219909191132,0.202776238322258,0.350211322307587,0.202167361974716,0.354300707578659,0.185564830899239,0.355421602725983,0.182162448763847,0.361784309148788,0.198707833886147,0.358156830072403,0.172637686133385,0.361075162887573,0.139001026749611,0.364146292209625,0.140849784016609,0.378989845514297,0.106979876756668,0.433523654937744,0.161493882536888,0.370858877897263,0.161693349480629,0.359014123678207, 0.161748126149178,0.329226613044739,0.205994307994843,0.313246935606003,0.0944434627890587,0.268143475055695,0.20306433737278,0.339128196239471,0.163937464356422,0.280802398920059,0.182190462946892,0.28460368514061,0.145096659660339,0.274794280529022,0.127788469195366,0.240934908390045,0.120954513549805,0.238367646932602,0.132281437516212,0.226507723331451,0.137011155486107,0.228855669498444,0.210209682583809,0.2155482172966,0.241878569126129,0.220916002988815,0.26282125711441,0.221452534198761,0.29198357462883,0.295206278562546,0.111530013382435,0.196926832199097,0.110858209431171,0.213729798793793,0.285846024751663,0.356001317501068,0.29819467663765,0.316466212272644,0.288069158792496,0.344221860170364,0.0380841791629791,0.315671890974045,0.0376876220107079,0.295206278562546,0.113475598394871,0.226128607988358,0.125245660543442,0.224324196577072,0.120806373655796,0.224908590316772,0.116765983402729,0.212769865989685,0.118198357522488,0.224879413843155,0.284112751483917,0.195336312055588,0.158699199557304,0.262446790933609,0.258020013570786,0.198204874992371,0.238352090120316,0.195399284362793,0.156210079789162,0.203897058963776,0.228296101093292,0.196403205394745,0.112004779279232,0.255640834569931,0.0996980592608452,0.253657966852188,0.0599844828248024,0.228980481624603,0.0873599201440811,0.425756603479385,0.0819525048136711,0.430222749710083,0.271689742803574,0.197195768356323,0.0579164586961269,0.240310877561569,0.0581031292676926,0.256709277629852,0.0465604662895203,0.278274834156036,0.235218659043312,0.402576774358749,0.0741644948720932,0.427183717489243,0.0653690621256828,0.423138469457626,0.364858657121658,0.0058159064501524,0.378193080425262,0.00671304762363434,0.385348081588745,0.00671513378620148,0.144469872117043,0.462650418281555,0.421232998371124,0.0826369524002075,0.404372006654739,0.0567429140210152,0.476042032241821,0.138350963592529,0.42111599445343,0.0183416120707989,0.295725464820862,0.418706983327866,0.160256654024124,0.196704864501953,0.0594458840787411,0.422037154436111,0.454183876514435,0.141791939735413, 0.448351323604584,0.145058676600456,0.413058042526245,0.070551872253418,0.350009351968765,0.0319062583148479,0.625411868095398,0.120180368423462,0.637047469615936,0.122511923313141,0.636229813098907,0.129295915365219,0.625074863433838,0.127793982625008,0.507284820079803,0.0619037225842476,0.510095059871674,0.0479289181530476,0.527652323246002,0.0472101457417011,0.526718020439148,0.054853443056345,0.490497052669525,0.0482726059854031,0.491722583770752,0.0666024088859558,0.609418451786041,0.0183327309787273,0.607294797897339,0.0270510986447334,0.587332129478455,0.0241190269589424,0.589866578578949,0.0183392874896526,0.599642515182495,0.01833600923419,0.621821463108063,0.0281986109912395,0.624407470226288,0.0183296911418438,0.594778478145599,0.0714818239212036,0.601910471916199,0.0563936270773411,0.612220644950867,0.0600941814482212,0.604203701019287,0.0759536698460579,0.543119192123413,0.0422907918691635,0.544251263141632,0.0500377416610718,0.543437063694,0.0583357848227024,0.524895250797272,0.0640137791633606,0.591681241989136,0.0409365221858025,0.589441180229187,0.0526278652250767,0.574448347091675,0.049155056476593,0.575057625770569,0.0386063382029533,0.618204653263092,0.0628728941082954,0.613804221153259,0.0802628397941589,0.62841808795929,0.0657566115260124,0.64536064863205,0.0678516030311584,0.64141845703125,0.078500933945179,0.625143587589264,0.0817112326622009,0.531294167041779,0.0183279626071453,0.544406592845917,0.0183367244899273,0.552744925022125,0.0237005427479744,0.553858160972595,0.040230505168438,0.57527494430542,0.0275971367955208,0.590344429016113,0.0300799105316401,0.749457359313965,0.536959767341614,0.741303741931915,0.54364150762558,0.734310567378998,0.540743768215179,0.739574611186981,0.527491807937622,0.532937169075012,0.139095187187195,0.522660136222839,0.138792335987091,0.527738988399506,0.135023549199104,0.538512229919434,0.134636476635933,0.757146537303925,0.542502403259277,0.750700354576111,0.54674506187439,0.803405284881592,0.536428272724152,0.803427815437317,0.546442747116089,0.791049957275391, 0.546403169631958,0.791802406311035,0.537089049816132,0.748028874397278,0.55847954750061,0.737114250659943,0.555553793907166,0.508481621742249,0.127509787678719,0.505944848060608,0.108942933380604,0.515341997146606,0.105934321880341,0.522455513477325,0.126656070351601,0.737114250659943,0.555553793907166,0.727370798587799,0.552609026432037,0.814997315406799,0.547947704792023,0.815010070800781,0.55595326423645,0.802367687225342,0.556499242782593,0.635879218578339,0.0481579266488552,0.649852335453033,0.0556824840605259,0.66277402639389,0.110301367938519,0.660976707935333,0.124136097729206,0.647814512252808,0.12254387140274,0.650153636932373,0.10741925239563,0.648403286933899,0.130980640649796,0.493324518203735,0.12825246155262,0.494030058383942,0.112156316637993,0.659335017204285,0.157990634441376,0.647405803203583,0.161270916461945,0.646533787250519,0.145569935441017,0.66009134054184,0.144811019301414,0.663541674613953,0.0581816472113132,0.676160752773285,0.0588757432997227,0.671719551086426,0.072027325630188,0.65501856803894,0.0703871846199036,0.511177897453308,0.138719856739044,0.510259211063385,0.135056510567665,0.525164365768433,0.131284803152084,0.649389863014221,0.0947770401835442,0.6671342253685,0.0982052013278008,0.493071556091309,0.086195282638073,0.493628799915314,0.091945692896843,0.559674918651581,0.0472530014812946,0.567443192005157,0.0573633946478367,0.538663983345032,0.122844271361828,0.540833592414856,0.125936880707741,0.526597380638123,0.104742877185345,0.748028874397278,0.55847954750061,0.765847682952881,0.549540102481842,0.764372110366821,0.5584956407547,0.765800893306732,0.541136920452118,0.78015273809433,0.539297759532928,0.779947698116302,0.54781049489975,0.647405803203583,0.161270916461945,0.627919495105743,0.165839776396751,0.632642209529877,0.144077107310295,0.652241051197052,0.0775422528386116,0.670264363288879,0.0780913904309273,0.636637568473816,0.10606337338686,0.659956872463226,0.13173058629036,0.759777724742889,0.530711829662323,0.765171408653259,0.536637306213379,0.778995215892792,0.531737565994263, 0.752127230167389,0.519129276275635,0.728536665439606,0.51262903213501,0.732309222221375,0.512366056442261,0.735034704208374,0.522714734077454,0.730796694755554,0.525562345981598,0.748859882354736,0.511833131313324,0.743439674377441,0.505154311656952,0.765652477741241,0.514914095401764,0.787624061107636,0.51555347442627,0.789000391960144,0.521418035030365,0.771367490291595,0.527085900306702,0.791455268859863,0.530477523803711,0.539222002029419,0.101683907210827,0.550459980964661,0.119353942573071,0.550385594367981,0.0831283330917358,0.558652341365814,0.0711058974266052,0.58102810382843,0.0833064913749695,0.577929377555847,0.0889100953936577,0.493617355823517,0.0997567698359489,0.512800276279449,0.0955036804080009,0.510516345500946,0.0882570669054985,0.522748947143555,0.0854671001434326,0.5238316655159,0.0943155810236931,0.503171265125275,0.0894222110509872,0.505169689655304,0.0968636199831963,0.537734866142273,0.0930303856730461,0.544171035289764,0.0932983681559563,0.548327326774597,0.101159207522869,0.542027711868286,0.0729634240269661,0.503328621387482,0.0814991593360901,0.552241981029511,0.0912356898188591,0.552784264087677,0.0988230630755425,0.537494480609894,0.0837412476539612,0.52265739440918,0.0758150890469551,0.50982791185379,0.0785936191678047,0.506831645965576,0.0695515275001526,0.76339203119278,0.50712126493454,0.785220086574554,0.509686291217804,0.489231616258621,0.0315104797482491,0.513272225856781,0.0273668244481087,0.816638708114624,0.525546848773956,0.815622806549072,0.533849358558655,0.805975735187531,0.529785215854645,0.805075645446777,0.523961544036865,0.681086778640747,0.0372196435928345,0.635478436946869,0.0950382277369499,0.544040381908417,0.129785448312759,0.805315315723419,0.518755316734314,0.604082882404327,0.144260749220848,0.608489513397217,0.135266959667206,0.615864872932434,0.134979143738747,0.610741555690765,0.14380644261837,0.628644704818726,0.134404376149178,0.624519765377045,0.14383827149868,0.599080204963684,0.0941342040896416,0.61006885766983,0.0964548513293266,0.587654650211334, 0.091278187930584,0.616163671016693,0.0378965735435486,0.625479817390442,0.0434406250715256,0.621776878833771,0.10307115316391,0.620423257350922,0.0963096544146538,0.607053220272064,0.115980498492718,0.605805993080139,0.100896589457989,0.609853744506836,0.102911472320557,0.611805438995361,0.118989758193493,0.644099533557892,0.032100073993206,0.659412860870361,0.0164591874927282,0.656290948390961,0.0339341871440411,0.4930300116539,0.0732556059956551,0.585755169391632,0.0678908824920654,0.588322937488556,0.0936033651232719,0.577154934406281,0.093703381717205,0.562895953655243,0.0950868651270866,0.731554269790649,0.504706978797913,0.727774322032928,0.505046665668488,0.551357388496399,0.123109877109528,0.571676254272461,0.0183448307216167,0.55096822977066,0.0183391086757183,0.778547286987305,0.557364761829376,0.764372110366821,0.5584956407547,0.790201842784882,0.55685967206955,0.778547286987305,0.557364761829376,0.802367687225342,0.556499242782593,0.790201842784882,0.55685967206955,0.495154201984406,0.138423621654511,0.803892910480499,0.510066568851471,0.816273391246796,0.516730487346649,0.815506756305695,0.511426866054535,0.604654967784882,0.120736420154572,0.61201423406601,0.127429619431496,0.603021919727325,0.127570226788521,0.631137251853943,0.0308044124394655,0.636081218719482,0.0159682724624872,0.492581605911255,0.0183127038180828,0.518643021583557,0.0183226577937603,0.597919940948486,0.143971845507622,0.601321399211884,0.13498742878437,0.599580347537994,0.0979311391711235,0.597641706466675,0.103919513523579,0.599008023738861,0.101254813373089,0.602641403675079,0.103451550006866,0.599240183830261,0.10662580281496,0.589081406593323,0.0969681665301323,0.594586074352264,0.102548241615295,0.585496366024017,0.10010402649641,0.558149456977844,0.103941023349762,0.556389510631561,0.110891811549664,0.553200244903564,0.105530381202698,0.556813180446625,0.101084761321545,0.572217345237732,0.100067913532257,0.570747017860413,0.0970846340060234,0.578517019748688,0.0961847826838493,0.579585433006287,0.0992880389094353,0.55315625667572, 0.117485396564007,0.554197609424591,0.120858430862427,0.748486638069153,0.494465708732605,0.762512922286987,0.494317650794983,0.762700855731964,0.501395285129547,0.74594247341156,0.500526189804077,0.728194415569305,0.499951988458633,0.728269577026367,0.495721399784088,0.734606742858887,0.495248049497604,0.731633901596069,0.498802334070206,0.781859040260315,0.496466994285584,0.78417980670929,0.503325641155243,0.562906444072723,0.102120161056519,0.601932168006897,0.116101562976837,0.605108380317688,0.118184737861156,0.60151070356369,0.118258409202099,0.556868493556976,0.115887627005577,0.5527423620224,0.111952118575573,0.802542448043823,0.499694585800171,0.803648173809052,0.504007160663605,0.817605912685394,0.500693678855896,0.81699538230896,0.505198776721954,0.599988460540771,0.120652906596661,0.597973465919495,0.128528848290443,0.59215635061264,0.13272662460804,0.59614771604538,0.134009078145027,0.592994809150696,0.142916366457939,0.59010899066925,0.140912294387817,0.594156563282013,0.128498747944832,0.557798206806183,0.118820779025555,0.59606146812439,0.121425032615662,0.598461627960205,0.115895137190819,0.59778094291687,0.118086993694305,0.61639279127121,0.143932446837425,0.918062031269073,0.479826003313065,0.917984068393707,0.496530413627625,0.908080816268921,0.498851209878922,0.904792010784149,0.483243942260742,0.900610148906708,0.500990688800812,0.884406685829163,0.481456190347672,0.961748063564301,0.48123899102211,0.953367829322815,0.459764629602432,0.961263537406921,0.466886729001999,0.963331580162048,0.478808462619781,0.952917337417603,0.491632729768753,0.948405742645264,0.47760733962059,0.955906391143799,0.472689896821976,0.957712650299072,0.487823992967606,0.727643072605133,0.468970596790314,0.737488210201263,0.463557571172714,0.751486897468567,0.476922124624252,0.751285433769226,0.456433236598969,0.765535950660706,0.485775828361511,0.7810338139534,0.486122667789459,0.73645144701004,0.45160984992981,0.754211902618408,0.437842160463333,0.964479923248291,0.459911108016968,0.96708357334137,0.472940683364868, 0.941240012645721,0.446224510669708,0.945038080215454,0.464876115322113,0.932295620441437,0.471961289644241,0.931144535541534,0.452183753252029,0.721017241477966,0.442966252565384,0.737651586532593,0.442045360803604,0.719633936882019,0.460297673940659,0.886510670185089,0.474686652421951,0.903665840625763,0.472627133131027,0.963621735572815,0.452686578035355,0.950685977935791,0.440653055906296,0.960283279418945,0.437342554330826,0.887907803058624,0.457909643650055,0.904328167438507,0.454467326402664,0.918903410434723,0.454958111047745,0.943957090377808,0.495838910341263,0.933294951915741,0.487851858139038,0.768299341201782,0.468426108360291,0.784747719764709,0.469687581062317,0.769729971885681,0.449470043182373,0.817980706691742,0.466578394174576,0.817238569259644,0.480204105377197,0.802043676376343,0.475925654172897,0.802605450153351,0.455537796020508,0.799868404865265,0.49231892824173,0.832775890827179,0.473070055246353,0.838111340999603,0.484676510095596,0.84126752614975,0.495989054441452,0.817762553691864,0.494830578565598,0.859072804450989,0.483098953962326,0.862009942531586,0.474584102630615,0.874397754669189,0.492350190877914,0.787634611129761,0.452609002590179,0.90279483795166,0.367973536252975,0.905124962329865,0.345641672611237,0.913342654705048,0.347916185855865,0.912529349327087,0.369688957929611,0.925560832023621,0.387898564338684,0.932599663734436,0.407315850257874,0.92589145898819,0.410643577575684,0.920625150203705,0.389747798442841,0.949953734874725,0.355094909667969,0.951032519340515,0.363550275564194,0.933794796466827,0.368448108434677,0.934975385665894,0.352692157030106,0.943140864372253,0.404144912958145,0.954946100711823,0.399620592594147,0.956817269325256,0.414980977773666,0.946568846702576,0.417771846055985,0.745988190174103,0.357263743877411,0.74623030424118,0.370115399360657,0.723876237869263,0.370850831270218,0.723936438560486,0.35508069396019,0.770287275314331,0.351012200117111,0.761923849582672,0.359980016946793,0.747782170772552,0.350053995847702,0.74659675359726,0.340608268976212,0.78242826461792, 0.356241673231125,0.772000849246979,0.366978108882904,0.888209998607636,0.366273909807205,0.889978468418121,0.340083956718445,0.895037472248077,0.342694848775864,0.895405530929565,0.366927832365036,0.899459898471832,0.314644873142242,0.909847378730774,0.321801960468292,0.918916344642639,0.324285626411438,0.721207201480865,0.34171861410141,0.722085654735565,0.324680715799332,0.832019209861755,0.303710579872131,0.837684631347656,0.318392097949982,0.830951452255249,0.32389897108078,0.812873840332031,0.305415868759155,0.927966892719269,0.327375143766403,0.92278653383255,0.30994713306427,0.937382340431213,0.310342788696289,0.938101947307587,0.330747753381729,0.787878453731537,0.318435102701187,0.743237912654877,0.322835564613342,0.809278249740601,0.308975040912628,0.819117605686188,0.334555834531784,0.797591030597687,0.341802477836609,0.821128666400909,0.278324037790298,0.801212668418884,0.281449764966965,0.788522362709045,0.251010030508041,0.778709888458252,0.277684926986694,0.767647802829742,0.250351876020432,0.810751914978027,0.25715035200119,0.84078460931778,0.273705422878265,0.8343146443367,0.253084093332291,0.847168922424316,0.254261314868927,0.850851953029633,0.278176695108414,0.798426568508148,0.244539484381676,0.802650809288025,0.242088094353676,0.818812370300293,0.256332039833069,0.82343465089798,0.234213247895241,0.827631413936615,0.253934741020203,0.823855400085449,0.254290282726288,0.816676497459412,0.23532472550869,0.866258263587952,0.231996029615402,0.866610884666443,0.257322490215302,0.858043134212494,0.254364967346191,0.855080664157867,0.228342562913895,0.930767714977264,0.22573783993721,0.945889711380005,0.222970649600029,0.946760952472687,0.255563050508499,0.93348491191864,0.261107802391052,0.773747384548187,0.224294796586037,0.777997493743896,0.21880504488945,0.81641286611557,0.196366682648659,0.802371263504028,0.196330100297928,0.864195823669434,0.200841635465622,0.851062774658203,0.199150770902634,0.89640074968338,0.230705246329308,0.883186995983124,0.232751786708832,0.881836652755737,0.214614555239677, 0.887250900268555,0.200569301843643,0.907026708126068,0.229556113481522,0.902923285961151,0.20326828956604,0.914942443370819,0.203540116548538,0.91536808013916,0.229486957192421,0.929136455059052,0.202310681343079,0.946282148361206,0.199967786669731,0.754875361919403,0.203648909926414,0.760668158531189,0.226526752114296,0.737716019153595,0.227550968527794,0.737892985343933,0.204146772623062,0.770777821540833,0.159257456660271,0.78363710641861,0.158306941390038,0.790200650691986,0.196390643715858,0.773595869541168,0.199558615684509,0.790417194366455,0.159332662820816,0.808192789554596,0.159986957907677,0.849259614944458,0.161067947745323,0.857898414134979,0.164254024624825,0.878676354885101,0.201207309961319,0.876645267009735,0.169000253081322,0.882104337215424,0.171509861946106,0.899422168731689,0.175726264715195,0.911141753196716,0.176889896392822,0.751355111598969,0.16819603741169,0.757565438747406,0.164179861545563,0.761903166770935,0.202163860201836,0.860024809837341,0.276785999536514,0.866802453994751,0.278391242027283,0.904237747192383,0.269089251756668,0.888204574584961,0.263776540756226,0.909639060497284,0.296700835227966,0.889726400375366,0.284746944904327,0.768099784851074,0.160215333104134,0.765339434146881,0.147635877132416,0.769931972026825,0.147371023893356,0.869489371776581,0.146724864840508,0.879540205001831,0.14693520963192,0.898017764091492,0.147133722901344,0.908929467201233,0.151309326291084,0.748826146125793,0.149388745427132,0.757248997688293,0.14983843266964,0.802527487277985,0.144495859742165,0.782864511013031,0.146440163254738,0.777319848537445,0.146413594484329,0.905280351638794,0.411019295454025,0.903062283992767,0.387046903371811,0.916356325149536,0.390930145978928,0.916383624076843,0.413602024316788,0.921476900577545,0.307574659585953,0.912721931934357,0.30766487121582,0.916436851024628,0.295221358537674,0.912924528121948,0.267408609390259,0.888300895690918,0.146535396575928,0.888749539852142,0.173654153943062,0.758424758911133,0.386163830757141,0.746366739273071,0.387693852186203,0.756287634372711, 0.370078831911087,0.743230938911438,0.408132910728455,0.740756630897522,0.42606395483017,0.721696734428406,0.425859391689301,0.724057734012604,0.408930242061615,0.938694477081299,0.3841233253479,0.95283442735672,0.380331695079803,0.722847700119019,0.38837668299675,0.890903890132904,0.411222189664841,0.894305348396301,0.386779516935349,0.888569295406342,0.302094012498856,0.888850271701813,0.294006407260895,0.896029472351074,0.319427907466888,0.884909152984619,0.399323105812073,0.793972074985504,0.427394032478333,0.784384489059448,0.42383337020874,0.790646493434906,0.404990315437317,0.801294267177582,0.399961173534393,0.814857363700867,0.373135894536972,0.805125594139099,0.365943402051926,0.923374056816101,0.35023906826973,0.927518308162689,0.294122874736786,0.921344697475433,0.295784294605255,0.934829890727997,0.291908502578735,0.918931543827057,0.266248375177383,0.866438984870911,0.456583142280579,0.841178715229034,0.453053742647171,0.847060918807983,0.439581006765366,0.86782842874527,0.439721286296844,0.851005256175995,0.407960414886475,0.860830187797546,0.396958947181702,0.871956527233124,0.405479490756989,0.870405972003937,0.420071244239807,0.852893114089966,0.375677168369293,0.864501535892487,0.369070172309875,0.874655723571777,0.304662615060806,0.874091923236847,0.298924028873444,0.881532490253448,0.292051374912262,0.877547025680542,0.368069291114807,0.859799742698669,0.340503007173538,0.875407159328461,0.338903278112412,0.833735525608063,0.399637520313263,0.833679020404816,0.374705284833908,0.830057978630066,0.230862468481064,0.823732554912567,0.198301866650581,0.837903499603271,0.198859244585037,0.842970013618469,0.229091554880142,0.813603281974792,0.15912726521492,0.832264244556427,0.159015044569969,0.871561169624329,0.200495138764381,0.868138134479523,0.167618915438652,0.850794196128845,0.145440712571144,0.859099626541138,0.146894410252571,0.886030435562134,0.285866171121597,0.882393896579742,0.259583503007889,0.758479177951813,0.407729625701904,0.758698105812073,0.42311230301857,0.889463722705841,0.43608283996582, 0.90440434217453,0.434522271156311,0.918975591659546,0.431019425392151,0.936866402626038,0.422981292009354,0.927945971488953,0.428836822509766,0.818363904953003,0.457920044660568,0.802313566207886,0.445113271474838,0.833755254745483,0.467590779066086,0.786590218544006,0.431345820426941,0.769749820232391,0.430789858102798,0.76649671792984,0.423095643520355,0.768417954444885,0.436030358076096,0.784708797931671,0.43914258480072,0.795092046260834,0.433297842741013,0.823181688785553,0.450700730085373,0.82711124420166,0.435892999172211,0.845188081264496,0.50031703710556,0.804470121860504,0.442920416593552,0.806218922138214,0.430972903966904,0.811220347881317,0.400549352169037,0.771064817905426,0.384202539920807,0.890796422958374,0.335637956857681,0.768502652645111,0.411513090133667,0.817900538444519,0.349938482046127,0.800159335136414,0.35366228222847,0.836129069328308,0.344065994024277,0.853783488273621,0.309829980134964,0.847298383712769,0.295906335115433,0.855278134346008,0.293199062347412,0.866070091724396,0.305285155773163,0.745713710784912,0.287682563066483,0.777761578559875,0.282110422849655,0.724475383758545,0.288332223892212,0.923553049564362,0.370398372411728,0.744769036769867,0.170246079564095,0.832151532173157,0.270153105258942,0.848323285579681,0.229989945888519,0.851153671741486,0.253714889287949,0.844345211982727,0.199072018265724,0.837968766689301,0.159964978694916,0.830724716186523,0.142573595046997,0.836730599403381,0.143333241343498,0.87678724527359,0.28022438287735,0.876802563667297,0.259410828351974,0.87667053937912,0.231349229812622,0.869308650493622,0.132656097412109,0.877489805221558,0.133146747946739,0.870509326457977,0.118021562695503,0.877373278141022,0.117966011166573,0.856803834438324,0.132638052105904,0.846830308437347,0.131603553891182,0.853959858417511,0.116486869752407,0.862339913845062,0.116091012954712,0.877234637737274,0.0907938033342361,0.872455179691315,0.0909458994865417,0.88357949256897,0.0912610739469528,0.872518062591553,0.0826203674077988,0.883969962596893,0.0766040161252022,0.866649866104126, 0.0792287886142731,0.866016268730164,0.0885360389947891,0.884163498878479,0.118297398090363,0.873547971248627,0.0759796425700188,0.866931796073914,0.075625404715538,0.883203506469727,0.0626596137881279,0.883325934410095,0.0727573111653328,0.874082446098328,0.0641873925924301,0.869193851947784,0.0652881637215614,0.882814228534698,0.0597551427781582,0.874945759773254,0.0482636243104935,0.882489144802094,0.0492883063852787,0.869201838970184,0.062000535428524,0.870467305183411,0.0503222160041332,0.875257611274719,0.0329494923353195,0.88282036781311,0.0347325913608074,0.881917476654053,0.0464337430894375,0.871203601360321,0.0467073358595371,0.872259616851807,0.0347459577023983,0.887224853038788,0.0330270379781723,0.888693332672119,0.0456076487898827,0.860417068004608,0.0465568080544472,0.856893181800842,0.0466998927295208,0.859933197498322,0.031902901828289,0.863261103630066,0.0341828912496567,0.858258664608002,0.0603429861366749,0.852930784225464,0.0625027939677238,0.860229134559631,0.0492004007101059,0.889866292476654,0.0672246143221855,0.889218688011169,0.0604570060968399,0.85755717754364,0.0637182369828224,0.854593992233276,0.0726432874798775,0.851917147636414,0.0689257979393005,0.902742326259613,0.0658846944570541,0.893288433551788,0.065957136452198,0.892788231372833,0.0448413752019405,0.900805473327637,0.0453387573361397,0.846185684204102,0.0669368654489517,0.841645181179047,0.0707022771239281,0.842965424060822,0.0519174821674824,0.847203135490417,0.0459722317755222,0.900204956531525,0.0427552275359631,0.892737686634064,0.025834096595645,0.899846196174622,0.0264322943985462,0.843027889728546,0.0337245166301727,0.847833096981049,0.0320871025323868,0.842952847480774,0.0458804070949554,0.892744719982147,0.00990710686892271,0.898935616016388,0.0101131610572338,0.899955093860626,0.0235676914453506,0.847459018230438,0.0105336755514145,0.842798292636871,0.0299794785678387,0.843325793743134,0.0139036504551768,0.904701292514801,0.00786467920988798,0.907245099544525,0.0237631760537624,0.826667845249176,0.0104132201522589,0.830245912075043, 0.014482319355011,0.828360557556152,0.0294037777930498,0.822836756706238,0.0318878926336765,0.827203631401062,0.0330336578190327,0.827067852020264,0.0460746288299561,0.820909738540649,0.0472623370587826,0.908669769763947,0.0427790135145187,0.910974323749542,0.0651281848549843,0.819268703460693,0.0658261179924011,0.825591623783112,0.051302582025528,0.822922587394714,0.069887675344944,0.921524524688721,0.0672537907958031,0.912336826324463,0.0655194371938705,0.91644823551178,0.0430750660598278,0.924401223659515,0.0469379797577858,0.814887285232544,0.0659982413053513,0.810885369777679,0.0689277201890945,0.810137033462524,0.0479682348668575,0.814345061779022,0.0447079129517078,0.810562014579773,0.0426680333912373,0.810494959354401,0.0275008622556925,0.813720226287842,0.0271024387329817,0.92631584405899,0.023413660004735,0.91923314332962,0.0234380196779966,0.921519160270691,0.00719160353764892,0.927288234233856,0.00844551902264357,0.813801169395447,0.00804003793746233,0.810813665390015,0.0242667868733406,0.811017751693726,0.0106116542592645,0.933603644371033,0.00756836170330644,0.933977663516998,0.0241841655224562,0.796100080013275,0.00685832975432277,0.798089385032654,0.0101802097633481,0.796710550785065,0.0240423008799553,0.791771650314331,0.0259221605956554,0.924766957759857,0.0425411276519299,0.926256954669952,0.0260665025562048,0.933077454566956,0.0451083108782768,0.794841825962067,0.0429360568523407,0.789888441562653,0.044672966003418,0.795729756355286,0.0272478330880404,0.791544914245605,0.0703838616609573,0.788507580757141,0.0664245933294296,0.79452520608902,0.0483330264687538,0.784800469875336,0.072615273296833,0.785380899906158,0.0676750689744949,0.777259171009064,0.0702306777238846,0.781409919261932,0.066501148045063,0.942266225814819,0.0733718723058701,0.935189306735992,0.069897823035717,0.942416191101074,0.0515412725508213,0.948472797870636,0.0566696934401989,0.77241975069046,0.0529305525124073,0.777444005012512,0.0500225201249123,0.949704349040985,0.0531584173440933,0.947305381298065,0.0374843291938305,0.953755974769592, 0.0409136861562729,0.952774882316589,0.0209716688841581,0.957480251789093,0.0229493975639343,0.95406848192215,0.038547970354557,0.768582940101624,0.0158072970807552,0.77323317527771,0.0340169966220856,0.769274711608887,0.0327499024569988,0.765203654766083,0.0185593087226152,0.963904619216919,0.0233971495181322,0.961215674877167,0.0424162931740284,0.754861831665039,0.0353388972580433,0.751632273197174,0.0389604903757572,0.750893831253052,0.0199728105217218,0.755144596099854,0.0203947834670544,0.957877397537231,0.0568079389631748,0.951898574829102,0.0775808617472649,0.756567120552063,0.0735877603292465,0.753712356090546,0.0550836361944675,0.757410824298859,0.056349128484726,0.761263191699982,0.073058009147644,0.76164972782135,0.0770781934261322,0.757090032100677,0.0780957043170929,0.950550258159637,0.0824223458766937,0.946308612823486,0.0962636172771454,0.942003607749939,0.093460775911808,0.946235835552216,0.0800800919532776,0.744058668613434,0.10755617171526,0.750537037849426,0.0972182005643845,0.753195345401764,0.105083227157593,0.750281751155853,0.111917577683926,0.751619458198547,0.0885635688900948,0.757300794124603,0.0875029936432838,0.951216757297516,0.111846193671227,0.954714298248291,0.105641067028046,0.964391231536865,0.100433178246021,0.964237987995148,0.104981333017349,0.73151957988739,0.0987101048231125,0.738369047641754,0.0963661968708038,0.743011057376862,0.0984422788023949,0.970819115638733,0.098868265748024,0.965416252613068,0.0992332249879837,0.972616791725159,0.0923824831843376,0.736469745635986,0.094088077545166,0.718328952789307,0.0906374230980873,0.728198111057281,0.087721586227417,0.984732806682587,0.0887637957930565,0.98247492313385,0.093705452978611,0.706978559494019,0.086588017642498,0.710786700248718,0.082575798034668,0.992007195949554,0.0913908779621124,0.989869475364685,0.0970258712768555,0.700047969818115,0.0911478251218796,0.697715997695923,0.0868523493409157,0.985296428203583,0.102732799947262,0.983272552490234,0.101472362875938,0.994539856910706,0.0970034822821617,0.702796995639801,0.0981541946530342, 0.696414053440094,0.0906126573681831,0.706050872802734,0.0949508547782898,0.976893126964569,0.112574987113476,0.971095561981201,0.111097186803818,0.720573782920837,0.104449801146984,0.718700051307678,0.108775146305561,0.973432958126068,0.114808216691017,0.967844188213348,0.113491542637348,0.722539901733398,0.11192475259304,0.723901033401489,0.106464296579361,0.960221469402313,0.123890347778797,0.956322848796844,0.120941109955311,0.739652991294861,0.11608711630106,0.73649263381958,0.121733419597149,0.954420864582062,0.127289965748787,0.957527816295624,0.128443673253059,0.7443687915802,0.121598042547703,0.741880178451538,0.12409807741642,0.932696759700775,0.143747806549072,0.938381016254425,0.144392862915993,0.939495325088501,0.148702785372734,0.929885685443878,0.148469626903534,0.768708467483521,0.137689277529716,0.763012707233429,0.140244901180267,0.759073078632355,0.13556544482708,0.762382090091705,0.132505133748055,0.886912167072296,0.133777424693108,0.911423146724701,0.0680612251162529,0.910306751728058,0.0923797637224197,0.775240838527679,0.134282454848289,0.766335129737854,0.128692761063576,0.836096167564392,0.132054582238197,0.829344809055328,0.13093227148056,0.835256457328796,0.116890206933022,0.84189909696579,0.117142416536808,0.822781145572662,0.116017691791058,0.830494225025177,0.0777027308940887,0.839202344417572,0.0780987665057182,0.82832396030426,0.118288792669773,0.857331871986389,0.0804084613919258,0.849287688732147,0.0790025219321251,0.861357808113098,0.0744840651750565,0.862313389778137,0.0837592557072639,0.769065737724304,0.071456253528595,0.769372284412384,0.0805286169052124,0.765627920627594,0.085426390171051,0.756992876529694,0.0521901287138462,0.771315276622772,0.0484860204160213,0.755559623241425,0.0401266925036907,0.769491612911224,0.0372242815792561,0.79362016916275,0.0779736414551735,0.801418781280518,0.0697154253721237,0.801557064056396,0.0773452594876289,0.82200163602829,0.0768879950046539,0.815862894058228,0.118661656975746,0.831987679004669,0.0702430903911591,0.778886675834656,0.0793051347136498, 0.781443178653717,0.13395220041275,0.772118747234344,0.118946686387062,0.788865923881531,0.118216887116432,0.798432588577271,0.133366733789444,0.803148865699768,0.119900077581406,0.794337630271912,0.117809742689133,0.810153961181641,0.143295422196388,0.805742144584656,0.132508218288422,0.87377005815506,0.292851656675339,0.866617977619171,0.291592299938202,0.862270712852478,0.290988594293594,0.871006786823273,0.279232889413834,0.869180262088776,0.291568279266357,0.854512751102448,0.277846068143845,0.942177951335907,0.161557853221893,0.937897861003876,0.166904449462891,0.925509870052338,0.149811238050461,0.826046407222748,0.329615831375122,0.730805158615112,0.259872049093246,0.747876107692719,0.258424639701843,0.7517369389534,0.253582060337067,0.811642646789551,0.131756335496902,0.819125473499298,0.142876252532005,0.80854994058609,0.117693603038788,0.818037688732147,0.131134837865829,0.823334038257599,0.131040170788765,0.810770988464355,0.0768426433205605,0.91248345375061,0.114454813301563,0.900941252708435,0.134133249521255,0.75994735956192,0.0887553840875626,0.757419645786285,0.113644316792488,0.843707799911499,0.160715207457542,0.843609988689423,0.14380070567131,0.874299943447113,0.32286262512207,0.886233031749725,0.320901036262512,0.926037073135376,0.172750875353813,0.919004142284393,0.149722546339035,0.923002660274506,0.142651706933975,0.866310894489288,0.496817499399185,0.870574951171875,0.50132817029953,0.946981072425842,0.284577339887619,0.950224995613098,0.321619242429733,0.93082582950592,0.0686163753271103,0.738709151744843,0.127703785896301,0.756789863109589,0.143447861075401,0.753245055675507,0.138280257582664,0.949304640293121,0.125177681446075,0.871679484844208,0.259382396936417,0.723232388496399,0.492629379034042,0.718582510948181,0.473872780799866,0.879613876342773,0.502026975154877,0.888335824012756,0.499685287475586,0.582714855670929,0.0183416716754436,0.604078233242035,0.0329145304858685,0.495154201984406,0.138423621654511,0.547476172447205,0.018337856978178,0.93573135137558,0.498395621776581,0.718476712703705, 0.493428647518158,0.950604200363159,0.342332631349564,0.881717085838318,0.0316610634326935,0.868286192417145,0.0297806356102228,0.847416460514069,0.070510521531105,0.899124801158905,0.068398229777813,0.89218658208847,0.0676406249403954,0.847668349742889,0.0729834958910942,0.898479998111725,0.00636322377249599,0.83742880821228,0.00941390264779329,0.926732301712036,0.0711180716753006,0.816529810428619,0.0708071514964104,0.927882850170136,0.00421571033075452,0.805015027523041,0.00503845931962132,0.932441055774689,0.0713248550891876,0.936987817287445,0.0753119364380836,0.959317982196808,0.0196154415607452,0.758522272109985,0.0168697591871023,0.938204288482666,0.11481250077486,0.940538227558136,0.107389397919178,0.948554754257202,0.102754987776279,0.940324902534485,0.154049426317215,0.921830415725708,0.13029058277607,0.933251440525055,0.0695837587118149,0.89412248134613,0.499795645475388,0.522793054580688,0.145341858267784,0.516985476016998,0.142030850052834,0.682715177536011,0.0183012001216412,0.0121611952781677,0.515133142471313,0.0706319808959961,0.511339008808136,0.069871723651886,0.551965653896332,0.00895190238952637,0.550475418567657,0.0637469887733459,0.585290908813477,0.0106095671653748,0.585401833057404,0.0881460309028625,0.579822719097137,0.114270448684692,0.809993028640747,0.143543183803558,0.815315842628479,0.148086845874786,0.855161905288696,0.11750203371048,0.849652647972107,0.0747015476226807,0.644798576831818,0.00842684507369995,0.652548909187317,0.111705303192139,0.647709012031555,0.122667670249939,0.885116755962372,0.150072872638702,0.888473927974701,0.149710431694984,0.894749462604523,0.123198166489601,0.891059219837189,0.221492648124695,0.903655767440796,0.188354730606079,0.893988609313965,0.186534225940704,0.866160988807678,0.223242819309235,0.873154878616333,0.062753438949585,0.75745302438736,0.113514296710491,0.758449912071228,0.0614296197891235,0.806599378585815,0.188051730394363,0.899621665477753,0.221386447548866,0.909104585647583,0.00590616464614868,0.94597589969635,0.00458604097366333,0.89120876789093, 0.0616136789321899,0.887728095054626,0.0620874166488647,0.948611497879028,0.188660740852356,0.943339228630066,0.220254600048065,0.947890758514404,0.214564621448517,0.981012582778931,0.201122790575027,0.98065173625946,0.153584271669388,0.980843424797058,0.148886263370514,0.945261716842651,0.129193663597107,0.986391186714172,0.125558197498322,0.973467111587524,0.121884703636169,0.947646379470825,0.128089129924774,0.945846319198608,0.214798629283905,0.994953095912933,0.201247602701187,0.996058702468872,0.0112178921699524,0.697477459907532,0.0694103240966797,0.688502430915833,0.0643328428268433,0.730503559112549,0.00884312391281128,0.736827254295349,0.00930148363113403,0.760706663131714,0.0065838098526001,0.80612313747406,0.0612025856971741,0.848144054412842,0.0049627423286438,0.850576639175415,0.118271708488464,0.890320658683777,0.065598726272583,0.977944731712341,0.0088924765586853,0.976939558982849,0.0276047587394714,0.994357228279114,0.370769917964935,0.798661172389984,0.342812895774841,0.822686672210693,0.356332123279572,0.756397068500519,0.377752065658569,0.770269870758057,0.405268669128418,0.699620485305786,0.404813766479492,0.68048894405365,0.429779887199402,0.674320697784424,0.430357396602631,0.701885998249054,0.404253542423248,0.718779325485229,0.403756141662598,0.750552296638489,0.38140481710434,0.744037866592407,0.385033547878265,0.717401623725891,0.465354919433594,0.720202922821045,0.495384216308594,0.722020268440247,0.496003985404968,0.746783256530762,0.464628219604492,0.749979436397552,0.462366878986359,0.696184158325195,0.49399870634079,0.697896838188171,0.401960372924805,0.642358899116516,0.423888862133026,0.632238864898682,0.426834374666214,0.653279781341553,0.40318700671196,0.658750593662262,0.453586518764496,0.61629730463028,0.468364953994751,0.600840449333191,0.45653909444809,0.638388872146606,0.477943480014801,0.598173022270203,0.493645787239075,0.593318223953247,0.490991771221161,0.634043037891388,0.473801672458649,0.632959127426147,0.178472578525543,0.554350554943085,0.186136603355408,0.579512655735016, 0.146303951740265,0.604650020599365,0.135276615619659,0.562250018119812,0.122946619987488,0.53822523355484,0.176804631948471,0.534112930297852,0.351306438446045,0.657510042190552,0.357399225234985,0.617903530597687,0.380781769752502,0.617698729038239,0.375441372394562,0.652276694774628,0.306198596954346,0.827515840530396,0.291676759719849,0.829853534698486,0.302909255027771,0.774772047996521,0.321179211139679,0.748594403266907,0.461082398891449,0.672382056713104,0.430903434753418,0.723665595054626,0.42891389131546,0.756758809089661,0.237914204597473,0.761975526809692,0.225787580013275,0.826950430870056,0.202358782291412,0.824333667755127,0.220797121524811,0.755769729614258,0.352203488349915,0.97958916425705,0.362628936767578,0.949496746063232,0.39343136548996,0.948484480381012,0.375637590885162,0.979081869125366,0.187551856040955,0.747308731079102,0.169054090976715,0.740738272666931,0.170302152633667,0.687088191509247,0.188904523849487,0.692875385284424,0.337991714477539,0.750971794128418,0.324619770050049,0.827911734580994,0.419644832611084,0.600654184818268,0.442498505115509,0.581512451171875,0.120395421981812,0.513514697551727,0.174928545951843,0.514765679836273,0.474576890468597,0.539835691452026,0.477527141571045,0.516978323459625,0.485970675945282,0.516897082328796,0.48383092880249,0.540239453315735,0.18510514497757,0.599699139595032,0.167278409004211,0.617671549320221,0.187180936336517,0.589897274971008,0.462847232818604,0.539581477642059,0.344145059585571,0.72182035446167,0.326374411582947,0.720240116119385,0.394647121429443,0.686401605606079,0.319037556648254,0.867573618888855,0.302943706512451,0.904631018638611,0.304471969604492,0.87032026052475,0.267602980136871,0.781822204589844,0.278444826602936,0.781402349472046,0.270060300827026,0.829311609268188,0.249363958835602,0.827938318252563,0.250633418560028,0.768964648246765,0.137826681137085,0.716177105903625,0.131193816661835,0.664469301700592,0.260430037975311,0.911751985549927,0.240319311618805,0.905675888061523,0.243431925773621,0.875276684761047,0.262752890586853, 0.877669453620911,0.411820292472839,0.880014777183533,0.423791885375977,0.836472630500793,0.462755501270294,0.824887990951538,0.45569235086441,0.863811433315277,0.439025104045868,0.94479763507843,0.430610239505768,0.978035449981689,0.402738034725189,0.611363649368286,0.186947345733643,0.657643377780914,0.228372752666473,0.730918526649475,0.207233428955078,0.753594279289246,0.209590911865234,0.712156653404236,0.239039540290833,0.741507172584534,0.334559619426727,0.981127977371216,0.31684672832489,0.981096267700195,0.328354835510254,0.95008659362793,0.345672369003296,0.950557231903076,0.306888103485107,0.949102282524109,0.304206848144531,0.981072187423706,0.28013002872467,0.981036186218262,0.286529242992401,0.9485684633255,0.257689118385315,0.981067419052124,0.228958427906036,0.98103928565979,0.240372896194458,0.947525382041931,0.259687781333923,0.948730111122131,0.488324165344238,0.94091522693634,0.489849090576172,0.979771971702576,0.490218818187714,0.994233965873718,0.429369449615479,0.995208024978638,0.394788324832916,0.995809972286224,0.374833583831787,0.995487093925476,0.349890947341919,0.995969176292419,0.316375136375427,0.994803547859192,0.333184599876404,0.994866132736206,0.304028391838074,0.994802236557007,0.280689775943756,0.994711518287659,0.229669988155365,0.994961082935333,0.288153886795044,0.873666644096375,0.374360382556915,0.8904709815979,0.387475788593292,0.847625255584717,0.411258220672607,0.886034786701202,0.454949080944061,0.8682581782341,0.491671144962311,0.858824491500854,0.290163993835449,0.913084387779236,0.301855325698853,0.909988880157471,0.372912287712097,0.895848155021667,0.333420276641846,0.906446814537048,0.353742182254791,0.901504278182983,0.491974472999573,0.855072259902954,0.33410382270813,0.900671482086182,0.354553937911987,0.89583683013916,0.289071142673492,0.908687829971313,0.393371880054474,0.809330403804779,0.427037358283997,0.811525583267212,0.467077791690826,0.799201607704163,0.495090425014496,0.800721049308777,0.493624806404114,0.829544186592102,0.362688422203064,0.735573530197144, 0.368574023246765,0.714295506477356,0.26009801030159,0.916285276412964,0.157010570168495,0.997165322303772,0.00761103630065918,0.992198765277863,0.495725631713867,0.540400445461273,0.189296662807465,0.787796199321747,0.257686614990234,0.743402481079102,0.1911581158638,0.675597250461578,0.337960183620453,0.859888792037964,0.359537720680237,0.854239583015442,0.305992126464844,0.748666524887085,0.308035433292389,0.718613386154175,0.319106459617615,0.722382187843323,0.112274289131165,0.704397201538086,0.11233001947403,0.731060743331909,0.168003916740417,0.776793599128723,0.357841610908508,0.598734319210052,0.38059014081955,0.599766671657562,0.403176724910736,0.596337378025055,0.418389797210693,0.587678670883179,0.438614010810852,0.567043542861938,0.456628859043121,0.539029479026794,0.201015919446945,0.531197369098663,0.20399010181427,0.543411493301392,0.302007675170898,0.754814505577087,0.167784333229065,0.653617858886719,0.182525753974915,0.644098997116089,0.18228280544281,0.621365547180176,0.266952574253082,0.750339090824127,0.200521528720856,0.562489748001099,0.144565343856812,0.768098950386047,0.138044834136963,0.742974162101746,0.495896279811859,0.772916674613953,0.465591609477997,0.77565324306488,0.428581476211548,0.785719275474548,0.397220492362976,0.783088862895966,0.18172687292099,0.826692700386047,0.49196445941925,0.675123631954193,0.240335494279861,0.911758959293365,0.495731830596924,0.516878664493561,0.34697687625885,0.680678248405457,0.370673388242722,0.682514905929565,0.853075265884399,0.992330074310303,0.852188348770142,0.962135791778564,0.860128879547119,0.962887763977051,0.858171343803406,0.986682951450348,0.862387657165527,0.911083579063416,0.857113063335419,0.906933903694153,0.928343713283539,0.901013374328613,0.807257235050201,0.963677167892456,0.8061443567276,0.979118824005127,0.856660306453705,0.912008762359619,0.870808303356171,0.838645458221436,0.821943342685699,0.846985936164856,0.838754177093506,0.800563931465149,0.877516150474548,0.791887283325195,0.864213168621063,0.874509155750275,0.815409004688263, 0.880722761154175,0.79024064540863,0.880608558654785,0.789475858211517,0.845401465892792,0.932643353939056,0.954874634742737,0.933275103569031,0.980782926082611,0.935434699058533,0.994068086147308,0.630963683128357,0.789057552814484,0.654338121414185,0.775567531585693,0.653856098651886,0.804910600185394,0.631951808929443,0.818882346153259,0.694238603115082,0.784741044044495,0.708649039268494,0.793100535869598,0.708783686161041,0.814220786094666,0.695235729217529,0.807534694671631,0.859007120132446,0.589503884315491,0.860730469226837,0.558739304542542,0.902086734771729,0.567386269569397,0.894809246063232,0.596438407897949,0.579541206359863,0.63482391834259,0.547543048858643,0.61766517162323,0.563525676727295,0.590587377548218,0.592990696430206,0.602680087089539,0.534499228000641,0.677751481533051,0.571182906627655,0.681487917900085,0.571320593357086,0.701781213283539,0.533832550048828,0.704887866973877,0.649895191192627,0.748745679855347,0.691299498081207,0.75044858455658,0.689306795597076,0.73621654510498,0.647391319274902,0.719693839550018,0.64337694644928,0.7001953125,0.669712424278259,0.708073854446411,0.749192714691162,0.798610031604767,0.75510847568512,0.83458149433136,0.729123950004578,0.822061240673065,0.726479947566986,0.797707796096802,0.808301150798798,0.810373663902283,0.75323486328125,0.868756651878357,0.734716892242432,0.865715026855469,0.534042239189148,0.727540850639343,0.531116187572479,0.753359913825989,0.570929050445557,0.722526550292969,0.572424709796906,0.753445506095886,0.702320337295532,0.757590711116791,0.761946737766266,0.751782894134521,0.772973895072937,0.745147049427032,0.762482285499573,0.771236896514893,0.648130714893341,0.978619337081909,0.644415318965912,0.941729664802551,0.662830829620361,0.943574070930481,0.666116178035736,0.978548884391785,0.680043876171112,0.944110691547394,0.681085586547852,0.978558301925659,0.702009916305542,0.94612181186676,0.706084311008453,0.978536784648895,0.729662835597992,0.978605329990387,0.729449391365051,0.94964337348938,0.748925864696503,0.951466143131256, 0.754678249359131,0.978725790977478,0.543712019920349,0.942074179649353,0.552484452724457,0.979100048542023,0.594025909900665,0.940189957618713,0.599583804607391,0.978833675384521,0.553675174713135,0.992875218391418,0.599223911762238,0.99234002828598,0.573904693126678,0.992611587047577,0.665489137172699,0.992366373538971,0.648367404937744,0.992287993431091,0.680180549621582,0.992439925670624,0.70477694272995,0.99193674325943,0.725229501724243,0.992233693599701,0.731331348419189,0.91031140089035,0.751055479049683,0.913197994232178,0.534017622470856,0.867278695106506,0.533805906772614,0.863349795341492,0.578789949417114,0.870053708553314,0.578523874282837,0.875977039337158,0.657664239406586,0.890200257301331,0.637017488479614,0.885146737098694,0.636981964111328,0.879038214683533,0.657690644264221,0.883849620819092,0.701405763626099,0.903143107891083,0.689680397510529,0.897856473922729,0.689469039440155,0.891673922538757,0.703061640262604,0.898513436317444,0.52915221452713,0.832479953765869,0.527570605278015,0.805768668651581,0.570615768432617,0.806493163108826,0.571511387825012,0.830078601837158,0.627265214920044,0.699593007564545,0.628921151161194,0.723524451255798,0.532648384571075,0.646598339080811,0.654644727706909,0.841347932815552,0.631650507450104,0.837175130844116,0.710326850414276,0.855788826942444,0.994498610496521,0.973651468753815,0.994509041309357,0.995351791381836,0.810449957847595,0.91594672203064,0.790931582450867,0.808099508285522,0.746140420436859,0.773875713348389,0.743692398071289,0.751469373703003,0.789945006370544,0.737518191337585,0.815874755382538,0.713575720787048,0.817005753517151,0.729545116424561,0.731466174125671,0.904875457286835,0.510985910892487,0.636209607124329,0.512685477733612,0.594287395477295,0.531784415245056,0.602132320404053,0.813328981399536,0.777067244052887,0.844761550426483,0.773491382598877,0.790950536727905,0.774871587753296,0.760263741016388,0.803253054618835,0.633744716644287,0.644870460033417,0.634517788887024,0.614957511425018,0.654439747333527,0.619170844554901,0.651669204235077, 0.652596652507782,0.636779487133026,0.601630687713623,0.656133472919464,0.611003160476685,0.573272883892059,0.574234545230865,0.598481059074402,0.590009272098541,0.850327551364899,0.517211556434631,0.832196772098541,0.521592140197754,0.831537961959839,0.510814547538757,0.828512370586395,0.587863624095917,0.83473789691925,0.559853792190552,0.872066676616669,0.648907721042633,0.839406490325928,0.62694376707077,0.724839210510254,0.766937613487244,0.822544395923615,0.700857639312744,0.849081993103027,0.718600571155548,0.933099389076233,0.611324548721313,0.901650667190552,0.685902237892151,0.942070603370667,0.57524561882019,0.939566493034363,0.520132899284363,0.897272348403931,0.517360925674438,0.830889105796814,0.670648336410522,0.834068834781647,0.639985382556915,0.823630273342133,0.614691972732544,0.928609907627106,0.865547180175781,0.930211246013641,0.827972650527954,0.933367609977722,0.783167064189911,0.93642270565033,0.719241976737976,0.935121476650238,0.758330345153809,0.882195591926575,0.76596462726593,0.887566685676575,0.74090576171875,0.954217195510864,0.614151358604431,0.938677668571472,0.677017450332642,0.994427502155304,0.576179683208466,0.99438488483429,0.618359863758087,0.994415581226349,0.945756614208221,0.994198322296143,0.896195113658905,0.994061470031738,0.776282966136932,0.994065821170807,0.818044424057007,0.994136869907379,0.716791749000549,0.994051396846771,0.753812193870544,0.994262337684631,0.67757385969162,0.994108021259308,0.858920753002167,0.530578672885895,0.780503511428833,0.571103930473328,0.781619250774384,0.629120171070099,0.760279357433319,0.608909428119659,0.831740319728851,0.617712914943695,0.879948735237122,0.616979718208313,0.874382257461548,0.626894176006317,0.941001892089844,0.630378663539886,0.978694200515747,0.631540298461914,0.9922776222229,0.637833952903748,0.680078625679016,0.635789334774017,0.662474513053894,0.663559079170227,0.688455045223236,0.618431389331818,0.597959637641907,0.614676058292389,0.609883666038513,0.607803642749786,0.638404607772827,0.602027893066406,0.656461894512177, 0.596252083778381,0.674519181251526,0.57600212097168,0.654582738876343,0.596363663673401,0.689447343349457,0.597045004367828,0.706476449966431,0.60082870721817,0.739040970802307,0.601814210414886,0.774224579334259,0.603942215442657,0.801384091377258,0.787838399410248,0.916329741477966,0.784138083457947,0.95993834733963,0.782005071640015,0.978944063186646,0.820016086101532,0.99283242225647,0.780948340892792,0.993426144123077,0.692591667175293,0.846235513687134,0.622761368751526,0.681781470775604,0.523425102233887,0.540956199169159,0.509430289268494,0.540550172328949,0.507530272006989,0.516895413398743,0.520483374595642,0.516866326332092,0.540365755558014,0.54034423828125,0.55042839050293,0.539875566959381,0.994422495365143,0.521258413791656,0.828746020793915,0.692351102828979,0.754005968570709,0.992651462554932,0.724289536476135,0.741575956344604,0.699307382106781,0.735650062561035,0.810882747173309,0.909476399421692,0.788308918476105,0.910784423351288,0.751449167728424,0.906123518943787,0.468636989593506,0.517023682594299,0.535836219787598,0.516877710819244,0.109498739242554,0.168640285730362,0.112132772803307,0.152661740779877,0.119787313044071,0.152153596282005,0.118881486356258,0.168457418680191,0.113050706684589,0.13507778942585,0.119452022016048,0.135203436017036,0.131451189517975,0.152228981256485,0.127182513475418,0.13304802775383,0.134985461831093,0.133588254451752,0.140811920166016,0.151113584637642,0.114661179482937,0.103658139705658,0.119125567376614,0.103892669081688,0.108699537813663,0.104123018682003,0.109131596982479,0.0871840193867683,0.119534507393837,0.0942840352654457,0.125231176614761,0.0904576182365417,0.125290542840958,0.101195603609085,0.106698803603649,0.135403051972389,0.118944138288498,0.0866102576255798,0.125175148248672,0.0863017439842224,0.11061567813158,0.0711021572351456,0.119113452732563,0.0730104744434357,0.109946213662624,0.0827517360448837,0.123650386929512,0.0743604078888893,0.111142233014107,0.067758746445179,0.112028323113918,0.0557001531124115,0.119215667247772,0.0546615347266197, 0.123328268527985,0.057117085903883,0.123835042119026,0.0705758631229401,0.112727478146553,0.0524223558604717,0.112524077296257,0.0389328636229038,0.119811557233334,0.0370454788208008,0.122845679521561,0.0529458560049534,0.12255434691906,0.0391771607100964,0.106364630162716,0.051347441971302,0.10843350738287,0.0368793569505215,0.133061647415161,0.053001694381237,0.13113896548748,0.038743007928133,0.134447887539864,0.036213468760252,0.136388212442398,0.0532445982098579,0.134246721863747,0.0688727498054504,0.133074879646301,0.0560393817722797,0.139135405421257,0.0714567378163338,0.104103296995163,0.0762715190649033,0.105073988437653,0.068467915058136,0.134700745344162,0.0727633908390999,0.139690592885017,0.0788499191403389,0.136944442987442,0.0830728113651276,0.0920766890048981,0.0745502635836601,0.0949261635541916,0.0508351139724255,0.102532342076302,0.0503925792872906,0.100954838097095,0.0747596621513367,0.145211383700371,0.0766763612627983,0.145610421895981,0.0526387393474579,0.14922608435154,0.059541929513216,0.149246990680695,0.0810821205377579,0.0956220403313637,0.0478616431355476,0.0967641994357109,0.0290324725210667,0.103567898273468,0.02848244830966,0.150404617190361,0.0387527793645859,0.149642750620842,0.0526387393474579,0.145946830511093,0.0367481298744679,0.104380339384079,0.0101432707160711,0.0967993885278702,0.0257267542183399,0.0984230935573578,0.0102395936846733,0.147814616560936,0.0121744424104691,0.151532486081123,0.0161530263721943,0.150884971022606,0.0344866216182709,0.0898362621665001,0.0258174985647202,0.0929847285151482,0.00752438465133309,0.167764022946358,0.0128012439236045,0.169749364256859,0.0372772142291069,0.164677083492279,0.0342772230505943,0.164015293121338,0.0172754041850567,0.165507093071938,0.0384386777877808,0.170432060956955,0.0548011288046837,0.164681479334831,0.053278099745512,0.0843825042247772,0.0735744535923004,0.0876123532652855,0.0477583333849907,0.170659631490707,0.0759811550378799,0.166935130953789,0.0805334895849228,0.16570608317852,0.0592725016176701,0.0743808746337891, 0.0759197324514389,0.0725647881627083,0.0523623302578926,0.0802424550056458,0.047991469502449,0.083084262907505,0.0740114077925682,0.174782052636147,0.0762799009680748,0.176846608519554,0.0520901121199131,0.180590897798538,0.0559137351810932,0.178351581096649,0.0797098577022552,0.180592000484467,0.0498928129673004,0.178807839751244,0.032167874276638,0.181850731372833,0.0327346473932266,0.0716611370444298,0.0251153111457825,0.0712335184216499,0.00778962345793843,0.0768269151449203,0.00643132068216801,0.0784154310822487,0.0252451375126839,0.180299565196037,0.0106486203148961,0.182750001549721,0.0136639680713415,0.181808933615685,0.0290701612830162,0.0651817843317986,0.00668539199978113,0.0643297657370567,0.0259096324443817,0.197381943464279,0.0101195387542248,0.199837878346443,0.0316750891506672,0.19528666138649,0.0293647162616253,0.19517670571804,0.0137477293610573,0.0723999291658401,0.047268345952034,0.0644473806023598,0.050148282200098,0.0716215595602989,0.0281851030886173,0.19549772143364,0.0507052876055241,0.195949569344521,0.0330068655312061,0.200061053037643,0.05282998457551,0.196499198675156,0.0818331688642502,0.195366933941841,0.056805782020092,0.199664175510406,0.0774288028478622,0.202524587512016,0.0789267122745514,0.202701568603516,0.084530234336853,0.206367820501328,0.0777080059051514,0.21000549197197,0.0820313990116119,0.0546799339354038,0.0828299075365067,0.0495207756757736,0.0634130239486694,0.0554032623767853,0.0575149469077587,0.0614539533853531,0.0788569077849388,0.211435690522194,0.0592683143913746,0.215962737798691,0.0627024620771408,0.048487450927496,0.0593325272202492,0.0450575575232506,0.0451073460280895,0.0512588210403919,0.0411818102002144,0.0464855395257473,0.0220036432147026,0.0448288768529892,0.042362816631794,0.0419574491679668,0.0242609605193138,0.222901687026024,0.0214187167584896,0.225872054696083,0.02463648468256,0.220684319734573,0.040238119661808,0.216801524162292,0.0414903201162815,0.0358265563845634,0.0247411839663982,0.0379713140428066,0.0468020811676979,0.234180718660355,0.0437281019985676, 0.235308602452278,0.0271604433655739,0.239410191774368,0.0269063711166382,0.236926794052124,0.0478853769600391,0.0454961806535721,0.0876474827528,0.0406822711229324,0.0635107457637787,0.229307442903519,0.0863785222172737,0.224907919764519,0.0856526046991348,0.229915320873261,0.0670384168624878,0.233532086014748,0.0657527074217796,0.228459820151329,0.0914292335510254,0.22422967851162,0.0901644676923752,0.0465493574738503,0.0932747423648834,0.0506805665791035,0.0905846580862999,0.0540236383676529,0.10614301264286,0.0498769693076611,0.109369158744812,0.238570287823677,0.124906569719315,0.232409715652466,0.129728332161903,0.23014073073864,0.121945656836033,0.233206704258919,0.113116003572941,0.227544113993645,0.102013669908047,0.232826322317123,0.10334125906229,0.0445397794246674,0.127438917756081,0.0327550172805786,0.119393788278103,0.0328308939933777,0.114109948277473,0.0415924750268459,0.120210446417332,0.251037776470184,0.115200221538544,0.24021378159523,0.114652991294861,0.244747444987297,0.112418003380299,0.0269176121801138,0.112261660397053,0.0255368743091822,0.104721888899803,0.0319327488541603,0.112711168825626,0.246711879968643,0.109902426600456,0.255021661520004,0.102974109351635,0.264128506183624,0.1064822524786,0.0144040193408728,0.100473880767822,0.0162959806621075,0.10621839761734,0.271926015615463,0.0977237746119499,0.275205254554749,0.102283097803593,0.00751893827691674,0.10350040346384,0.00926360115408897,0.110047608613968,0.283966898918152,0.102838687598705,0.281402140855789,0.107529237866402,0.0132563523948193,0.116689756512642,0.00491688400506973,0.110007122159004,0.0151999481022358,0.115233726799488,0.278236120939255,0.115237906575203,0.275408655405045,0.111595757305622,0.284891396760941,0.10703506320715,0.020592113956809,0.128156453371048,0.0260656606405973,0.126465901732445,0.262392669916153,0.126754879951477,0.260943740606308,0.121868893504143,0.0236987732350826,0.130766957998276,0.0289711579680443,0.1292634755373,0.258540600538254,0.130218341946602,0.257653474807739,0.124060600996017,0.0355231091380119, 0.141387686133385,0.0393124744296074,0.137980058789253,0.244716644287109,0.141048476099968,0.242125540971756,0.134617120027542,0.0407437980175018,0.145370453596115,0.0377855524420738,0.146695256233215,0.239493727684021,0.14364917576313,0.23731929063797,0.140781819820404,0.0600941143929958,0.164628192782402,0.0692769214510918,0.173724353313446,0.0599467493593693,0.168958589434624,0.054754700511694,0.165347129106522,0.213482692837715,0.158811092376709,0.219719141721725,0.152956292033196,0.22263565659523,0.156481176614761,0.218667075037956,0.161784559488297,0.21606607735157,0.170217752456665,0.211784228682518,0.169879943132401,0.103315107524395,0.153326243162155,0.0836591795086861,0.105140693485737,0.0838196501135826,0.0769639387726784,0.207566127181053,0.154852047562599,0.216246336698532,0.148564487695694,0.204927712678909,0.168726831674576,0.150805816054344,0.151725023984909,0.15717089176178,0.150489568710327,0.155253708362579,0.163910672068596,0.149609804153442,0.164745464920998,0.146215096116066,0.134469136595726,0.152437254786491,0.134249985218048,0.164152756333351,0.133387252688408,0.158837527036667,0.135936319828033,0.151075199246407,0.0896088629961014,0.159288197755814,0.0893156975507736,0.133905932307243,0.0919583067297935,0.130477160215378,0.0850760638713837,0.141542971134186,0.0904715806245804,0.12903593480587,0.0957414582371712,0.21984227001667,0.0994771346449852,0.216674014925957,0.0938582643866539,0.217655703425407,0.0836353898048401,0.21738089621067,0.0577550567686558,0.230665057897568,0.0624065101146698,0.233083575963974,0.0490189269185066,0.220081895589828,0.0452232137322426,0.193989470601082,0.0903934016823769,0.18655364215374,0.0895013585686684,0.187227502465248,0.080830842256546,0.167331948876381,0.0885493010282516,0.170469418168068,0.136505901813507,0.15837025642395,0.080748476088047,0.207787081599236,0.0922458916902542,0.201779246330261,0.154412314295769,0.185919299721718,0.153576120734215,0.195773646235466,0.136327192187309,0.211431309580803,0.137382581830025,0.199742212891579,0.168715670704842, 0.181474760174751,0.166334107518196,0.182293757796288,0.13807637989521,0.190671682357788,0.135791152715683,0.179134279489517,0.152520745992661,0.174417078495026,0.164894834160805,0.173661842942238,0.151600778102875,0.166063323616982,0.164344802498817,0.167721107602119,0.150826007127762,0.177369892597198,0.135481238365173,0.162778571248055,0.150668263435364,0.177908569574356,0.0887293815612793,0.0804953128099442,0.130722284317017,0.0902188643813133,0.153644502162933,0.101350612938404,0.168123781681061,0.22495411336422,0.103364989161491,0.225580722093582,0.131569653749466,0.143167734146118,0.165238246321678,0.136381596326828,0.167087942361832,0.0925449579954147,0.168534815311432,0.0797777473926544,0.171595901250839,0.0691964849829674,0.163408100605011,0.0655983909964561,0.0774092599749565,0.242238759994507,0.147777140140533,0.22430881857872,0.165497913956642,0.223514005541801,0.172797545790672,0.227935492992401,0.159634739160538,0.0456248037517071,0.142942816019058,0.128561019897461,0.168718472123146,0.113744363188744,0.0354219377040863,0.126632824540138,0.0335708521306515,0.143827363848686,0.0807526633143425,0.101901337504387,0.0767196342349052,0.0953461155295372,0.0775027871131897,0.14343598484993,0.0835865363478661,0.0990409255027771,0.00593015970662236,0.157520532608032,0.0112586701288819,0.0693228840827942,0.0803464353084564,0.172897830605507,0.0817228779196739,0.0707905068993568,0.00288968347012997,0.188990846276283,0.00766398292034864,0.0639659091830254,0.080534890294075,0.0595345348119736,0.0851207301020622,0.040263369679451,0.0203856807202101,0.232419610023499,0.0230953097343445,0.0547117814421654,0.122325390577316,0.0565091893076897,0.130962401628494,0.0474716871976852,0.116893567144871,0.0619090534746647,0.176871612668037,0.0709532052278519,0.149047508835793,0.0733657255768776,0.173098623752594,0.0632832050323486,0.0785093083977699,0.122398339211941,0.168552249670029,0.171968296170235,0.172913312911987,0.178752332925797,0.174294725060463,0.178090274333954,0.174043759703636,0.191484317183495,0.174476057291031, 0.196686863899231,0.174550160765648,0.210384950041771,0.175800397992134,0.217770889401436,0.177197843790054,0.0694335177540779,0.181086838245392,0.0621549747884274,0.181794971227646,0.0744629353284836,0.179792955517769,0.0800970643758774,0.177963420748711,0.091467373073101,0.177009731531143,0.101477660238743,0.175924897193909,0.100635282695293,0.176060110330582,0.0913380980491638,0.177552551031113,0.128065779805183,0.173633217811584,0.121936850249767,0.174198418855667,0.136411860585213,0.172478914260864,0.144710779190063,0.172427460551262,0.165598303079605,0.172096744179726,0.154653042554855,0.172365799546242,0.149664059281349,0.172396719455719,0.223156899213791,0.178282171487808,0.108649410307407,0.174773633480072,0.109862007200718,0.174721151590347,0.348469078540802,0.0163187943398952,0.137994989752769,0.828631699085236,0.132989272475243,0.802152872085571,0.147918194532394,0.804010570049286,0.151363343000412,0.829629004001617,0.146272525191307,0.829020321369171,0.124960489571095,0.829717695713043,0.121254846453667,0.803194522857666,0.113097339868546,0.832300662994385,0.109552852809429,0.806187093257904,0.102625407278538,0.840125441551209,0.0993973091244698,0.832417249679565,0.114300668239594,0.837362110614777,0.0993413478136063,0.825898289680481,0.133116826415062,0.775337934494019,0.145107880234718,0.778787076473236,0.12143038213253,0.772568881511688,0.1095320135355,0.770018577575684,0.0957835242152214,0.769171357154846,0.0982315018773079,0.807664275169373,0.158450171351433,0.830362677574158,0.155774891376495,0.80427348613739,0.1501125395298,0.779057025909424,0.144965082406998,0.776841759681702,0.133549392223358,0.771436274051666,0.136620059609413,0.767102599143982,0.145703315734863,0.773754358291626,0.122008286416531,0.765295445919037,0.123669631779194,0.760894656181335,0.110744766891003,0.758722305297852,0.110736608505249,0.755168974399567,0.0987511947751045,0.757159471511841,0.0991443619132042,0.754151523113251,0.0903305113315582,0.769010245800018,0.0923084691166878,0.808161675930023,0.0944669842720032,0.829814612865448, 0.092739924788475,0.836659967899323,0.0951223000884056,0.842087984085083,0.108017303049564,0.85451078414917,0.0978274121880531,0.851681590080261,0.167202770709991,0.830668807029724,0.165221586823463,0.80499678850174,0.15549498796463,0.779350161552429,0.154299691319466,0.777541399002075,0.149554967880249,0.777350425720215,0.148290902376175,0.775070548057556,0.151900932192802,0.774252712726593,0.148675695061684,0.771848797798157,0.139155685901642,0.764774024486542,0.125259786844254,0.758237481117249,0.111606873571873,0.751474857330322,0.0984403789043427,0.752149820327759,0.0959418714046478,0.755046486854553,0.0935965776443481,0.75328803062439,0.0940382555127144,0.756604433059692,0.0903568789362907,0.755501687526703,0.0858364254236221,0.768577635288239,0.0881553143262863,0.808532357215881,0.0904082357883453,0.830163240432739,0.0903069078922272,0.837337732315063,0.0924782678484917,0.843675673007965,0.0955347195267677,0.851902961730957,0.182093724608421,0.830951392650604,0.180246591567993,0.859736919403076,0.167296916246414,0.854052543640137,0.173993080854416,0.777373015880585,0.169968128204346,0.769740402698517,0.16423411667347,0.766504347324371,0.13112173974514,0.751151621341705,0.114391900599003,0.744549870491028,0.0919873788952827,0.743943810462952,0.0821603760123253,0.746226251125336,0.0762953460216522,0.750377357006073,0.0686193108558655,0.76814866065979,0.0683848932385445,0.832206785678864,0.0666692927479744,0.811888694763184,0.0631752535700798,0.840867459774017,0.0668821558356285,0.853939831256866,0.0700125321745873,0.861427664756775,0.151903882622719,0.853563606739044,0.147995486855507,0.853539109230042,0.137329965829849,0.853576421737671,0.133280590176582,0.854301273822784,0.128072157502174,0.839592576026917,0.135329231619835,0.838771939277649,0.127469643950462,0.855062544345856,0.121852196753025,0.840745687484741,0.118112847208977,0.855053782463074,0.158855900168419,0.853707551956177,0.144219905138016,0.873231768608093,0.139211133122444,0.871744513511658,0.134345769882202,0.869472146034241,0.130585327744484, 0.867600917816162,0.128342360258102,0.866749048233032,0.147064253687859,0.874130368232727,0.155570819973946,0.877879023551941,0.142322033643723,0.853249371051788,0.137172058224678,0.832988619804382,0.126421943306923,0.834555625915527,0.117901869118214,0.836364150047302,0.122699663043022,0.854600489139557,0.125748232007027,0.865540623664856,0.137620911002159,0.871065437793732,0.122817941009998,0.863901615142822,0.108879752457142,0.857927441596985,0.100993037223816,0.861671030521393,0.0969037339091301,0.858193457126617,0.0974147990345955,0.853707909584045,0.0811154991388321,0.86442369222641,0.0750977694988251,0.862657427787781,0.115778811275959,0.870236992835999,0.107822872698307,0.865854203701019,0.137837618589401,0.872308313846588,0.143060266971588,0.874582886695862,0.138816460967064,0.878500401973724,0.132575020194054,0.875522375106812,0.12968772649765,0.868459403514862,0.133114859461784,0.870083332061768,0.125096246600151,0.874205708503723,0.144896954298019,0.875538647174835,0.142778813838959,0.880536198616028,0.137519970536232,0.882551372051239,0.151860222220421,0.880577921867371,0.152399241924286,0.889567077159882,0.124742090702057,0.866774022579193,0.127179279923439,0.867784738540649,0.120108626782894,0.872153103351593,0.121821627020836,0.865147590637207,0.118289493024349,0.860611438751221,0.117210566997528,0.862206101417542,0.165250390768051,0.886883914470673,0.135997116565704,0.871462225914001,0.178798466920853,0.807546317577362,0.176004514098167,0.786332726478577,0.136662647128105,0.882570505142212,0.128926709294319,0.882086753845215,0.116664610803127,0.879310607910156,0.107002213597298,0.876319766044617,0.100622333586216,0.871608316898346,0.0905090272426605,0.866010427474976,0.0531633049249649,0.719375729560852,0.0271363817155361,0.707524597644806,0.0335512161254883,0.694584250450134,0.0537165030837059,0.692071676254272,0.0580561235547066,0.717145800590515,0.327361762523651,0.731774032115936,0.321097731590271,0.732385039329529,0.321534037590027,0.730226278305054,0.328116714954376,0.726909518241882,0.352381616830826, 0.719165027141571,0.3816779255867,0.709810078144073,0.383873701095581,0.713003695011139,0.353582382202148,0.723466038703918,0.389866709709167,0.70949912071228,0.0879515632987022,0.72055321931839,0.12860181927681,0.725895404815674,0.128476873040199,0.741995811462402,0.162895649671555,0.731135427951813,0.161915510892868,0.743144810199738,0.307219117879868,0.750334739685059,0.286255449056625,0.75296413898468,0.288655608892441,0.735584080219269,0.309755146503448,0.734792113304138,0.351066261529922,0.736550509929657,0.323816239833832,0.744322001934052,0.378114432096481,0.727578043937683,0.40363597869873,0.720911383628845,0.396624267101288,0.723492860794067,0.0525110960006714,0.766572296619415,0.0568286329507828,0.739252865314484,0.0542509779334068,0.816841840744019,0.0207208283245564,0.939197540283203,0.0194490030407906,0.893354654312134,0.0641651377081871,0.894668519496918,0.0634559690952301,0.947624266147614,0.290174096822739,0.829403936862946,0.294364660978317,0.82907772064209,0.303875625133514,0.861426949501038,0.300528168678284,0.862943828105927,0.338434815406799,0.848148763179779,0.329631745815277,0.82477992773056,0.333506405353546,0.824312806129456,0.341734945774078,0.846446931362152,0.399445623159409,0.814422249794006,0.404962658882141,0.813668131828308,0.403660535812378,0.830246448516846,0.397782295942307,0.831119954586029,0.429953664541245,0.810855686664581,0.427018523216248,0.826602041721344,0.25738462805748,0.923348128795624,0.230729311704636,0.931734263896942,0.236170962452888,0.875609517097473,0.253818303346634,0.876664280891418,0.292001932859421,0.908854126930237,0.28364959359169,0.873474419116974,0.32261124253273,0.898317575454712,0.31828099489212,0.900079607963562,0.355663061141968,0.877710521221161,0.353280156850815,0.879717886447906,0.399176001548767,0.853855073451996,0.404539942741394,0.852305114269257,0.422941923141479,0.84043937921524,0.358329594135284,0.881592988967896,0.355276316404343,0.882311284542084,0.182644680142403,0.750793933868408,0.185509741306305,0.764952898025513,0.326107054948807,0.852742612361908, 0.341680496931076,0.885073482990265,0.315679401159287,0.825880110263824,0.00616306439042091,0.703088700771332,0.0192664824426174,0.68519926071167,0.0301977377384901,0.692649364471436,0.0226066671311855,0.706732273101807,0.0488867685198784,0.67974328994751,0.0875149518251419,0.680858850479126,0.0857221260666847,0.690730214118958,0.0525228157639503,0.689906358718872,0.127212107181549,0.685541391372681,0.1230753287673,0.695014655590057,0.161627039313316,0.689721345901489,0.157012104988098,0.6995849609375,0.235624000430107,0.724604845046997,0.22583544254303,0.73297107219696,0.19133560359478,0.709472179412842,0.202404737472534,0.701442301273346,0.325944572687149,0.70087730884552,0.329176217317581,0.706632077693939,0.308109283447266,0.71808934211731,0.296712160110474,0.715269446372986,0.347539931535721,0.693152606487274,0.355365961790085,0.699448943138123,0.381640404462814,0.683776259422302,0.385144948959351,0.689819693565369,0.414353907108307,0.674911022186279,0.411946028470993,0.680253028869629,0.449790507555008,0.6901535987854,0.439792186021805,0.693686962127686,0.432611465454102,0.681740045547485,0.439939647912979,0.676636576652527,0.0185406040400267,0.734092712402344,0.00171911157667637,0.736434578895569,0.455039292573929,0.710604250431061,0.443130701780319,0.712665200233459,0.0173331759870052,0.76539146900177,0.0027379784733057,0.764886140823364,0.443381130695343,0.823792457580566,0.430214524269104,0.826577663421631,0.433364242315292,0.810735702514648,0.436547994613647,0.85649836063385,0.426489055156708,0.839405417442322,0.0455283261835575,0.987263560295105,0.0239460021257401,0.96768593788147,0.0344903692603111,0.958500802516937,0.0560532286763191,0.979092180728912,0.1895402520895,0.998430013656616,0.188938364386559,0.989867031574249,0.216337844729424,0.986585915088654,0.223368689417839,0.997889876365662,0.24528931081295,0.993298172950745,0.233587577939034,0.984471261501312,0.26325735449791,0.978594183921814,0.273158222436905,0.988130509853363,0.309785306453705,0.96681821346283,0.316990584135056,0.974450170993805, 0.353560954332352,0.956429421901703,0.334684371948242,0.964224100112915,0.331263065338135,0.954548716545105,0.341662347316742,0.946645736694336,0.360323637723923,0.930742144584656,0.371962070465088,0.943290770053864,0.305025041103363,0.71971607208252,0.281516343355179,0.735691905021667,0.275172531604767,0.729717433452606,0.0864686593413353,0.693636298179626,0.123412162065506,0.697782337665558,0.157615780830383,0.702569842338562,0.216181889176369,0.732363224029541,0.18761433660984,0.713115572929382,0.307903707027435,0.720816910266876,0.310307204723358,0.719620704650879,0.35578641295433,0.70146119594574,0.329487919807434,0.709417164325714,0.385070383548737,0.691818833351135,0.411686092615128,0.682106256484985,0.436093181371689,0.69493168592453,0.431020945310593,0.684146165847778,0.0231605358421803,0.733960330486298,0.219782128930092,0.753032684326172,0.223959773778915,0.752729654312134,0.439913541078568,0.7130406498909,0.0218470469117165,0.765110015869141,0.0175507925450802,0.822332501411438,0.0132884429767728,0.821826875209808,0.012541483156383,0.893006145954132,0.0153542309999466,0.938565194606781,0.0380612835288048,0.956793069839478,0.0595417395234108,0.976959884166718,0.18875826895237,0.986690580844879,0.216187283396721,0.983650147914886,0.231952786445618,0.98127007484436,0.262105613946915,0.974557995796204,0.308156669139862,0.962594151496887,0.330282807350159,0.95073664188385,0.340442597866058,0.943441331386566,0.359681308269501,0.926880121231079,0.415007770061493,0.873182833194733,0.411140024662018,0.870856642723084,0.418241918087006,0.855107188224792,0.422304630279541,0.855500936508179,0.413193464279175,0.878101825714111,0.409193366765976,0.874216079711914,0.221210047602654,0.787729680538177,0.224934875965118,0.787179708480835,0.231420129537582,0.83148193359375,0.228278622031212,0.83161723613739,0.286484032869339,0.788559556007385,0.290456146001816,0.789715886116028,0.281658291816711,0.753531932830811,0.01317757088691,0.86019641160965,0.0204415842890739,0.859453320503235,-4.77144494652748e-005,0.818758368492126, 0.000802718102931976,0.859469771385193,0.399095684289932,0.859567701816559,0.435754835605621,0.777259588241577,0.439149618148804,0.776931166648865,0.274208307266235,0.753600835800171,0.278755187988281,0.788595139980316,0.25486022233963,0.788075566291809,0.253325968980789,0.754147589206696,0.177715599536896,0.738092541694641,0.229692697525024,0.87029367685318,0.224997654557228,0.870144486427307,0.22190035879612,0.930315494537354,0.21822589635849,0.930804252624512,0.452463209629059,0.744254648685455,0.448456108570099,0.772890686988831,0.407262146472931,0.780220806598663,0.401236832141876,0.781304121017456,0.381516367197037,0.784439384937286,0.351681500673294,0.788959443569183,0.326462656259537,0.790657997131348,0.309546262025833,0.791747152805328,0.394273191690445,0.856291949748993,0.374909192323685,0.869161367416382,0.362692534923553,0.839565813541412,0.386514723300934,0.833341240882874,0.284046351909637,0.825911104679108,0.26014256477356,0.826282024383545,0.262726932764053,0.83676540851593,0.287060350179672,0.834156394004822,0.29399174451828,0.85791540145874,0.264683246612549,0.862456202507019,0.310514837503433,0.900528073310852,0.298210650682449,0.86846524477005,0.322156965732574,0.790667831897736,0.236859858036041,0.836787879467011,0.234506472945213,0.865610420703888,0.2653449177742,0.868712723255157,0.261503159999847,0.831317961215973,0.237046435475349,0.977120995521545,0.258305698633194,0.966037273406982,0.302443146705627,0.954029083251953,0.236320823431015,0.82893705368042,0.233002379536629,0.78768265247345,0.232142776250839,0.737880706787109,0.232701197266579,0.754104316234589,0.275268316268921,0.739572465419769,0.254776477813721,0.739237248897552,0.255589306354523,0.733672380447388,0.32140901684761,0.94489848613739,0.257186889648438,0.726594924926758,0.18746779859066,0.934742987155914,0.182064533233643,0.934670329093933,0.183754414319992,0.908984780311584,0.19003663957119,0.909203588962555,0.199160307645798,0.867311477661133,0.195094406604767,0.865547776222229,0.193963259458542,0.832485556602478,0.200292333960533, 0.833418846130371,0.188371419906616,0.786453366279602,0.194433361291885,0.786885023117065,0.19045452773571,0.751655876636505,0.178751692175865,0.733124554157257,0.184771344065666,0.737486183643341,0.16508837044239,0.72592306137085,0.129975885152817,0.720125615596771,0.087457001209259,0.714428424835205,0.0588070712983608,0.721314311027527,0.0529645048081875,0.738691091537476,0.0483669526875019,0.766386866569519,0.0505108535289764,0.817673087120056,0.0634778961539268,0.854884624481201,0.0689484104514122,0.896807551383972,0.0712129175662994,0.948069095611572,0.0760783180594444,0.973358631134033,0.318604588508606,0.745406150817871,0.396596282720566,0.899489104747772,0.393728524446487,0.895927548408508,0.378495514392853,0.873401463031769,0.384480476379395,0.816604197025299,0.358091413974762,0.820540606975555,0.377756327390671,0.918591976165771,0.375032007694244,0.91533362865448,0.351179301738739,0.88078898191452,0.405604422092438,0.702567219734192,0.0807098671793938,0.972423374652863,0.395129501819611,0.92651242017746,0.172421514987946,0.93455958366394,0.168127655982971,0.911017537117004,0.181132137775421,0.960314750671387,0.00231474451720715,0.94269061088562,0.00189905427396297,0.904106199741364,0.00170977041125298,0.894501984119415,0.410461664199829,0.908757209777832,0.158964663743973,0.990373849868774,0.158160403370857,0.986776769161224,0.156624391674995,0.996507227420807,0.150756806135178,0.962525725364685,0.140343934297562,0.937322020530701,0.13229438662529,0.894827306270599,0.128968745470047,0.988845348358154,0.130574107170105,0.992274761199951,0.0919585525989532,0.992510676383972,0.0876217484474182,0.988364815711975,0.119490817189217,0.965435206890106,0.0986826419830322,0.89529675245285,0.108202688395977,0.941061198711395,0.118101827800274,0.999266147613525,0.0955139398574829,1.00022077560425,0.0775060653686523,0.865316271781921,0.0987005904316902,0.880043387413025,0.0672462284564972,0.268550157546997,0.049671083688736,0.263305753469467,0.0655259639024735,0.253281861543655,0.0769496187567711,0.269949793815613,0.0977088510990143, 0.236902311444283,0.106580346822739,0.257785648107529,0.129065126180649,0.230657801032066,0.134524568915367,0.250290304422379,0.106649346649647,0.264697819948196,0.0760419368743896,0.278773099184036,0.13469497859478,0.257751107215881,0.160579398274422,0.254964828491211,0.159833148121834,0.248961344361305,0.0678118243813515,0.285171627998352,0.064442552626133,0.303389132022858,0.0538793280720711,0.309466242790222,0.0519870258867741,0.305001854896545,0.0833936780691147,0.290419518947601,0.113091059029102,0.286593616008759,0.141319960355759,0.281551420688629,0.165272936224937,0.278615206480026,0.0900016278028488,0.315067380666733,0.117445692420006,0.309822559356689,0.145129144191742,0.305987238883972,0.168477490544319,0.302475839853287,0.0323810689151287,0.312372207641602,0.0262064188718796,0.299475640058517,0.0295736398547888,0.285910427570343,0.0760367289185524,0.354315340518951,0.0915908589959145,0.358047008514404,0.0888739004731178,0.37786540389061,0.0713506266474724,0.372719258069992,0.122682467103004,0.384693413972855,0.123539328575134,0.362065494060516,0.153394907712936,0.386189997196198,0.15144956111908,0.362271785736084,0.182445749640465,0.381532311439514,0.176970630884171,0.358261436223984,0.121310777962208,0.355423510074615,0.0882569923996925,0.351168662309647,0.149483263492584,0.354652851819992,0.175193890929222,0.350448459386826,0.0748252794146538,0.342353224754334,0.0788007229566574,0.34859511256218,0.0710262358188629,0.349793255329132,0.0646454244852066,0.339965224266052,0.0916388630867004,0.338494658470154,0.120582386851311,0.333079874515533,0.146635830402374,0.330278247594833,0.170271769165993,0.3262759745121,0.0426569096744061,0.356445580720901,0.0416591987013817,0.343348920345306,0.0514464154839516,0.365996360778809,0.0584157221019268,0.323710590600967,0.0683894976973534,0.32231143116951,0.0384450070559978,0.327763915061951,0.243381127715111,0.270193964242935,0.232822239398956,0.264932572841644,0.23761922121048,0.250176995992661,0.248678088188171,0.256686478853226,0.21342870593071,0.236880093812943, 0.20895192027092,0.253529012203217,0.188040882349014,0.231672585010529,0.184721007943153,0.248669549822807,0.209900751709938,0.258935034275055,0.23454587161541,0.270761966705322,0.185449078679085,0.255416989326477,0.24287186563015,0.278909713029861,0.240848287940025,0.274071037769318,0.246283635497093,0.274146020412445,0.249644592404366,0.282142609357834,0.230741560459137,0.279857784509659,0.208589375019073,0.276631295681,0.185725167393684,0.276922076940537,0.230986595153809,0.299258708953857,0.210506498813629,0.295614033937454,0.188321277499199,0.298994928598404,0.265521556138992,0.27375990152359,0.26482430100441,0.282948434352875,0.260919958353043,0.2649005651474,0.251680642366409,0.322788178920746,0.260540366172791,0.336637079715729,0.25197821855545,0.345533043146133,0.242774024605751,0.33220511674881,0.222257032990456,0.342387288808823,0.231963232159615,0.359422951936722,0.209192171692848,0.370708853006363,0.200702250003815,0.350070655345917,0.22141595184803,0.336317360401154,0.242748379707336,0.325661063194275,0.199233442544937,0.342888593673706,0.253260523080826,0.317641705274582,0.247969076037407,0.319831937551498,0.248417541384697,0.313902795314789,0.253963261842728,0.308497726917267,0.236256793141365,0.317370712757111,0.214396253228188,0.318397700786591,0.192733287811279,0.321143358945847,0.268496215343475,0.3049276471138,0.272246748209,0.313503235578537,0.270231664180756,0.323148667812347,0.265621483325958,0.294089406728745,0.250494480133057,0.295518487691879,0.0458397418260574,0.262778788805008,0.0625896081328392,0.251426130533218,0.0952175334095955,0.23458668589592,0.0256685968488455,0.284197837114334,0.0221087317913771,0.29950812458992,0.0869050845503807,0.380221426486969,0.0690328180789948,0.374757289886475,0.121112480759621,0.387365728616714,0.152752384543419,0.389367580413818,0.182815536856651,0.383022755384445,0.0484632104635239,0.367679536342621,0.0390557609498501,0.357358753681183,0.0349149629473686,0.32814610004425,0.0287162940949202,0.312572479248047,0.0381784774363041,0.343830734491348,0.239205777645111, 0.248104333877563,0.250295847654343,0.255043596029282,0.214672893285751,0.23468191921711,0.186211064457893,0.227855756878853,0.262926876544952,0.264692097902298,0.267901688814163,0.272961229085922,0.262785851955414,0.337246626615524,0.254309743642807,0.346629410982132,0.234155297279358,0.361147820949554,0.210777804255486,0.373387426137924,0.272776663303375,0.322958737611771,0.274719625711441,0.312589943408966,0.267851203680038,0.293266505002975,0.267087638378143,0.282292425632477,0.270765841007233,0.303936332464218,0.157219409942627,0.390503138303757,0.183381870388985,0.385207444429398,0.184264123439789,0.418161451816559,0.171075269579887,0.42354941368103,0.184961870312691,0.42239636182785,0.198766008019447,0.41510134935379,0.202239036560059,0.417870461940765,0.20816496014595,0.376819759607315,0.16859570145607,0.427589774131775,0.245494410395622,0.296236217021942,0.22960165143013,0.18805456161499,0.251823365688324,0.185961380600929,0.252249091863632,0.219923436641693,0.227741673588753,0.221162438392639,0.187326520681381,0.114287078380585,0.19259849190712,0.0827432125806808,0.227785810828209,0.0877162367105484,0.225054517388344,0.106516167521477,0.0964445993304253,0.16187459230423,0.112836852669716,0.161606431007385,0.106248863041401,0.184752866625786,0.0993110090494156,0.191718637943268,0.135514050722122,0.110515892505646,0.136538565158844,0.0794494822621346,0.16336727142334,0.0854158475995064,0.159887537360191,0.111099280416965,0.100142046809196,0.226718038320541,0.0593761056661606,0.217435359954834,0.0969065427780151,0.216144114732742,0.283188372850418,0.215088427066803,0.281501680612564,0.183948457241058,0.112146116793156,0.216329276561737,0.103538818657398,0.211508587002754,0.108831472694874,0.20224866271019,0.11810626834631,0.202624127268791,0.104371212422848,0.192182630300522,0.113016709685326,0.188855782151222,0.129660367965698,0.217771679162979,0.131301403045654,0.202740132808685,0.124749436974525,0.228006854653358,0.121748633682728,0.182591333985329,0.128233596682549,0.188867449760437,0.133912816643715,0.20319464802742, 0.132087409496307,0.218711972236633,0.132661879062653,0.172478660941124,0.125372499227524,0.167277246713638,0.136594176292419,0.173749923706055,0.144129410386086,0.148109823465347,0.14083831012249,0.150457456707954,0.136399120092392,0.143916055560112,0.143940716981888,0.140811741352081,0.144659459590912,0.154467925429344,0.141737923026085,0.154322251677513,0.153254449367523,0.229079782962799,0.17145711183548,0.220156624913216,0.174879282712936,0.229240730404854,0.139724403619766,0.174993380904198,0.168445706367493,0.175731331110001,0.172513529658318,0.204703003168106,0.171170279383659,0.147343397140503,0.167219832539558,0.152938187122345,0.166152015328407,0.156754463911057,0.173949792981148,0.219096630811691,0.172039031982422,0.173908889293671,0.178700864315033,0.170780599117279,0.182675272226334,0.186547845602036,0.175784274935722,0.191690757870674,0.201242417097092,0.226390704512596,0.189835116267204,0.218804523348808,0.197155550122261,0.214421525597572,0.205349609255791,0.218201324343681,0.196535676717758,0.197221532464027,0.189346954226494,0.192892253398895,0.197443604469299,0.190235525369644,0.202050775289536,0.197639435529709,0.184400141239166,0.20551273226738,0.19259224832058,0.205827698111534,0.113066598773003,0.0790322721004486,0.105334378778934,0.105586841702461,0.194961473345757,0.171960040926933,0.249968588352203,0.0861205384135246,0.249132424592972,0.105269402265549,0.251255363225937,0.131893426179886,0.249697417020798,0.157510280609131,0.229694008827209,0.161124140024185,0.226687625050545,0.133510991930962,0.187425285577774,0.139026790857315,0.0564382970333099,0.189014911651611,0.0052023995667696,0.22221839427948,0.00525877065956593,0.18386709690094,0.119474746286869,0.0375493951141834,0.111837081611156,0.0530624352395535,0.066094659268856,0.0466345697641373,0.0669181346893311,0.0305427573621273,0.151084423065186,0.0447436161339283,0.143032073974609,0.0597614720463753,0.173766195774078,0.0489822737872601,0.169371098279953,0.0636936500668526,0.201491639018059,0.0487696714699268,0.198981553316116,0.0661019757390022, 0.232346341013908,0.0509957745671272,0.230117797851563,0.0658609941601753,0.237630590796471,0.0139186624437571,0.255732774734497,0.0141546726226807,0.25160551071167,0.0492586307227612,0.168245449662209,0.156187266111374,0.166195333003998,0.159575998783112,0.143879219889641,0.158747345209122,0.140896320343018,0.157685488462448,0.138875409960747,0.154126986861229,0.124690063297749,0.132245779037476,0.101376056671143,0.129117891192436,0.0589983873069286,0.158510088920593,0.0587224327027798,0.131653279066086,0.00522232474759221,0.159675389528275,0.00490247271955013,0.130827456712723,0.278010636568069,0.279824495315552,0.298812657594681,0.275784343481064,0.304282754659653,0.290259718894959,0.281965792179108,0.292380303144455,0.360371142625809,0.366480052471161,0.324969589710236,0.379081845283508,0.328994393348694,0.356202572584152,0.350145578384399,0.349724352359772,0.350234031677246,0.272709965705872,0.344361364841461,0.255377382040024,0.366953611373901,0.244237378239632,0.371987044811249,0.26116931438446,0.135702416300774,0.415368467569351,0.157265931367874,0.432356357574463,0.314179629087448,0.382093161344528,0.30908191204071,0.366055309772491,0.405003011226654,0.35782253742218,0.385289371013641,0.35949844121933,0.376785099506378,0.338676750659943,0.396345615386963,0.330691367387772,0.433588922023773,0.236504852771759,0.463869690895081,0.245625153183937,0.462979108095169,0.263454914093018,0.434013694524765,0.256800681352615,0.401252865791321,0.240533545613289,0.402481585741043,0.257615804672241,0.0357005521655083,0.388662934303284,0.00592881953343749,0.399515271186829,0.00566474115476012,0.363109350204468,0.0481347367167473,0.386826068162918,0.0866496562957764,0.411552399396896,0.0582063645124435,0.412427425384521,0.279111593961716,0.666035234928131,0.225945800542831,0.665113210678101,0.22392749786377,0.636604785919189,0.277952909469604,0.636735916137695,0.315892934799194,0.635167717933655,0.316067934036255,0.666394233703613,0.388508915901184,0.665555477142334,0.350544452667236,0.664603114128113,0.349928140640259,0.637321829795837, 0.38754141330719,0.634606122970581,0.435341835021973,0.638484001159668,0.433550715446472,0.663687229156494,0.177207589149475,0.612478733062744,0.176016330718994,0.529740214347839,0.186444878578186,0.511027038097382,0.217861652374268,0.511277198791504,0.223153114318848,0.628329157829285,0.190247654914856,0.622038960456848,0.486883640289307,0.629214286804199,0.476161003112793,0.513963282108307,0.482327222824097,0.508232235908508,0.488895058631897,0.544415593147278,0.491890639066696,0.600841522216797,0.473480343818665,0.50871354341507,0.453197360038757,0.505612254142761,0.450256586074829,0.478254556655884,0.469694256782532,0.473757565021515,0.421695441007614,0.357690155506134,0.415889233350754,0.331451654434204,0.437098622322083,0.332878559827805,0.442461371421814,0.362516760826111,0.22280216217041,0.474529027938843,0.217593908309937,0.502904534339905,0.197384595870972,0.50594425201416,0.194546461105347,0.475670695304871,0.46210914850235,0.339261412620544,0.465144008398056,0.362599104642868,0.43515408039093,0.302096635103226,0.410110861063004,0.298714220523834,0.404260277748108,0.274855047464371,0.434130817651749,0.277559816837311,0.462108820676804,0.282934665679932,0.461436092853546,0.307282984256744,0.494644463062286,0.30829131603241,0.494599997997284,0.286713838577271,0.288297951221466,0.310767441987991,0.317089378833771,0.331127911806107,0.298644304275513,0.331657767295837,0.309740960597992,0.30518427491188,0.323278456926346,0.269609987735748,0.328542977571487,0.283249855041504,0.366234838962555,0.312371373176575,0.355237573385239,0.290143042802811,0.377826333045959,0.277899861335754,0.386427819728851,0.302159696817398,0.00496370997279882,0.302637487649918,0.00523272901773453,0.334270417690277,0.494486123323441,0.250376492738724,0.465624421834946,0.217996314167976,0.493983715772629,0.223704978823662,0.274070739746094,0.477111339569092,0.273489594459534,0.502667903900146,0.330954015254974,0.476763874292374,0.322269141674042,0.50263649225235,0.364648342132568,0.479930102825165,0.35956335067749,0.504274606704712,0.390494704246521, 0.477846682071686,0.387477040290833,0.507469892501831,0.426442623138428,0.476024568080902,0.426247835159302,0.50707072019577,0.189217537641525,0.455538779497147,0.206854715943336,0.452730476856232,0.175838589668274,0.672558426856995,0.166569232940674,0.667980194091797,0.195163011550903,0.662688016891479,0.195996522903442,0.670560479164124,0.41703525185585,0.0823960676789284,0.379661053419113,0.087336003780365,0.379819571971893,0.0720182359218597,0.419612884521484,0.0606408789753914,0.379255294799805,0.0504267401993275,0.374985426664352,0.0365727730095387,0.411358535289764,0.0261728391051292,0.415956646203995,0.0403289347887039,0.493199318647385,0.0890118554234505,0.456450998783112,0.0826555341482162,0.45306721329689,0.0603941008448601,0.492992907762527,0.0647125467658043,0.46486958861351,0.195732966065407,0.493963450193405,0.200856745243073,0.350674360990524,0.092957116663456,0.34963047504425,0.07790806889534,0.274510622024536,0.264204949140549,0.26007953286171,0.246545761823654,0.28859069943428,0.238469049334526,0.334856331348419,0.202510222792625,0.363643258810043,0.192537933588028,0.366359889507294,0.21590656042099,0.338781625032425,0.22510689496994,0.435272842645645,0.212263077497482,0.398157358169556,0.2127795368433,0.394134551286697,0.189203187823296,0.431740015745163,0.189732894301414,0.353620409965515,0.115030616521835,0.356460869312286,0.136574372649193,0.330332785844803,0.145079702138901,0.32795786857605,0.122443228960037,0.424858063459396,0.132360205054283,0.386173188686371,0.132788300514221,0.383402109146118,0.110428653657436,0.420057415962219,0.10672889649868,0.458895683288574,0.108389787375927,0.458395898342133,0.131641536951065,0.326113164424896,0.0990589410066605,0.326222032308578,0.0817279666662216,0.44969430565834,0.0371722467243671,0.447278797626495,0.023174038156867,0.492678284645081,0.0267641060054302,0.492753773927689,0.0398450344800949,0.340205818414688,0.0445320941507816,0.345373928546906,0.0588490702211857,0.326154470443726,0.0645159929990768,0.320111006498337,0.05208870023489,0.274770110845566, 0.0835410356521606,0.272609263658524,0.0665476024150848,0.298189342021942,0.0673447549343109,0.301646262407303,0.0844350233674049,0.00497202249243855,0.255098521709442,0.482639193534851,0.658773064613342,0.481088399887085,0.633377075195313,0.114194601774216,0.411546885967255,0.170816749334335,0.457984954118729,0.225487813353539,0.396294862031937,0.212410107254982,0.417902231216431,0.0662315413355827,0.0762309283018112,0.250799268484116,0.063048280775547,0.333656281232834,0.297672241926193,0.340613186359406,0.321105062961578,0.0395243354141712,0.466271162033081,0.00602374970912933,0.48110243678093,0.00604289397597313,0.446227341890335,0.0359872132539749,0.430430859327316,0.3060542345047,0.3510722219944,0.276377826929092,0.103494480252266,0.300962269306183,0.103664897382259,0.303110986948013,0.152671933174133,0.28091749548912,0.155148193240166,0.279249638319016,0.130199536681175,0.302054047584534,0.129134684801102,0.309399634599686,0.231809660792351,0.30688014626503,0.209897175431252,0.289571017026901,0.350548923015594,0.270328849554062,0.365542948246002,0.245002135634422,0.382643938064575,0.300958752632141,0.0494738444685936,0.268447369337082,0.0508869364857674,0.304449796676636,0.178384721279144,0.332469642162323,0.17304053902626,0.360082626342773,0.166428327560425,0.389865964651108,0.161852329969406,0.427394717931747,0.158815547823906,0.461918234825134,0.162161126732826,0.00579405296593905,0.0462127774953842,0.00560066802427173,0.0683200359344482,0.00560586387291551,0.0269520003348589,0.0600240603089333,0.104194618761539,0.00514654908329248,0.0974283963441849,0.160231247544289,0.133530288934708,0.26957631111145,0.629181981086731,0.3156818151474,0.672154903411865,0.279372423887253,0.670932114124298,0.349989295005798,0.670224785804749,0.387963771820068,0.671650528907776,0.352448105812073,0.627359628677368,0.388209700584412,0.629953861236572,0.226669445633888,0.671163082122803,0.196798086166382,0.670932292938232,0.433607459068298,0.631386756896973,0.434607148170471,0.668504118919373,0.315906286239624,0.628225803375244, 0.476988196372986,0.463175773620605,0.454741358757019,0.464593112468719,0.220664262771606,0.459789156913757,0.184727668762207,0.462807238101959,0.278218746185303,0.460530996322632,0.332289457321167,0.463848412036896,0.369474768638611,0.466295003890991,0.39000129699707,0.517841577529907,0.354887366294861,0.514743983745575,0.381088137626648,0.4658522605896,0.391538977622986,0.465295910835266,0.434057235717773,0.518631398677826,0.429316997528076,0.464836001396179,0.48660135269165,0.662401556968689,0.263680696487427,0.510650634765625,0.177454471588135,0.658338189125061,0.176326274871826,0.638556838035584,0.18619179725647,0.63715934753418,0.195805072784424,0.637353897094727,0.494659662246704,0.341448068618774,0.494632810354233,0.363822817802429,0.494556099176407,0.270669937133789,0.493567198514938,0.166087910532951,0.493269801139832,0.112306721508503,0.492209881544113,0.130895659327507,0.316386818885803,0.511061310768127,0.426286697387695,0.528457880020142,0.397477865219116,0.52846747636795,0.306401610374451,0.517327785491943,0.27237856388092,0.519209682941437,0.260665625333786,0.620903491973877,0.230708718299866,0.621332168579102,0.276257693767548,0.62015175819397,0.306045144796371,0.619097769260406,0.395616948604584,0.623336136341095,0.426235914230347,0.624236583709717,0.380163133144379,0.622293651103973,0.360129088163376,0.62008273601532,0.345613211393356,0.619093477725983,0.321682214736938,0.619664549827576,0.384320974349976,0.526424646377563,0.36388099193573,0.524502575397491,0.226463198661804,0.518674969673157,0.255921810865402,0.520185828208923,0.478387355804443,0.621041059494019,0.470510363578796,0.527969062328339,0.44108772277832,0.529246032238007,0.442113906145096,0.623237371444702,0.346275150775909,0.524868309497833,0.322297692298889,0.522322714328766,0.203355178236961,0.014395060017705,0.237630590796471,0.0139186624437571,0.176521748304367,0.0138660026714206,0.203355178236961,0.014395060017705,0.155106991529465,0.0139921056106687,0.176521748304367,0.0138660026714206,0.155106991529465,0.0139921056106687,0.124051712453365, 0.0136640649288893,0.0665248408913612,0.0129323732107878,0.124051712453365,0.0136640649288893,0.00542116397991776,0.0130550395697355,0.0665248408913612,0.0129323732107878,0.448530256748199,0.0115611162036657,0.492538034915924,0.0110943792387843,0.409757643938065,0.0119038913398981,0.448530256748199,0.0115611162036657,0.363668888807297,0.0131252370774746,0.409757643938065,0.0119038913398981,0.339312613010406,0.0133082764223218,0.339312613010406,0.0133082764223218,0.315129578113556,0.013663848862052,0.253373086452484,0.410604029893875,0.249597951769829,0.416985899209976,0.241136282682419,0.40620568394661,0.244911283254623,0.400929689407349,0.244992479681969,0.426448851823807,0.261435717344284,0.425390034914017,0.259792983531952,0.428544163703918,0.231477349996567,0.429878443479538,0.232067674398422,0.42503347992897,0.236586302518845,0.426039516925812,0.23717600107193,0.433269321918488,0.283678472042084,0.457536339759827,0.283724367618561,0.452745497226715,0.294946700334549,0.452313154935837,0.294975847005844,0.457267761230469,0.274993509054184,0.453405201435089,0.275447070598602,0.458098232746124,0.264141261577606,0.457495599985123,0.263919711112976,0.453568905591965,0.26476925611496,0.416096031665802,0.274542510509491,0.419293612241745,0.273528605699539,0.429606378078461,0.284352689981461,0.419947952032089,0.284520715475082,0.429096847772598,0.249602794647217,0.453529387712479,0.264031738042831,0.451915085315704,0.249554008245468,0.454542398452759,0.284741103649139,0.437264710664749,0.275686055421829,0.439615249633789,0.260907799005508,0.434111773967743,0.248012885451317,0.438456177711487,0.24467371404171,0.432483196258545,0.238510727882385,0.440300822257996,0.233609959483147,0.440636903047562,0.299531131982803,0.422525256872177,0.297653943300247,0.433571130037308,0.311233997344971,0.403186649084091,0.31227245926857,0.402302473783493,0.313245445489883,0.40310463309288,0.312316477298737,0.40472400188446,0.316567301750183,0.411554783582687,0.313995182514191,0.413227438926697,0.314485341310501,0.406984806060791,0.316858559846878, 0.404824674129486,0.307785749435425,0.43313279747963,0.308663487434387,0.422657310962677,0.234965890645981,0.399931341409683,0.239678293466568,0.396166682243347,0.236612752079964,0.393310904502869,0.237660825252533,0.391391664743423,0.239697515964508,0.394021540880203,0.231855019927025,0.418126612901688,0.230963245034218,0.404223799705505,0.314286381006241,0.401923209428787,0.312911480665207,0.401639133691788,0.313725799322128,0.401479661464691,0.308994799852371,0.414527088403702,0.309869170188904,0.409203976392746,0.308277547359467,0.405404210090637,0.247870475053787,0.398088425397873,0.256461322307587,0.404608428478241,0.284330517053604,0.412957459688187,0.293043196201324,0.409075915813446,0.295296430587769,0.415019243955612,0.227982237935066,0.428823918104172,0.228977993130684,0.424613326787949,0.315130174160004,0.403228580951691,0.316297024488449,0.398842692375183,0.318980932235718,0.400816261768341,0.268099278211594,0.410693049430847,0.277318626642227,0.412501722574234,0.300959408283234,0.404850691556931,0.302371621131897,0.410223186016083,0.304153561592102,0.403470277786255,0.307609975337982,0.40123438835144,0.305374205112457,0.407888293266296,0.31082209944725,0.398818224668503,0.312284231185913,0.400027245283127,0.319015949964523,0.409526884555817,0.24446114897728,0.39303132891655,0.243635326623917,0.388867050409317,0.242171257734299,0.389604866504669,0.236706554889679,0.390165209770203,0.242774307727814,0.392395168542862,0.228517830371857,0.405316442251205,0.228137403726578,0.398943215608597,0.230757728219032,0.398435324430466,0.229397609829903,0.417453676462173,0.312856644392014,0.400541067123413,0.313812762498856,0.400421321392059,0.314590662717819,0.399551033973694,0.305531710386276,0.453120023012161,0.305555045604706,0.451282113790512,0.314130276441574,0.451666980981827,0.314198285341263,0.453313708305359,0.239680826663971,0.41829577088356,0.301333636045456,0.415326416492462,0.304949045181274,0.457902550697327,0.30552476644516,0.453118890523911,0.305471539497375,0.453464061021805,0.313588917255402,0.421819448471069, 0.313420087099075,0.433740258216858,0.313613623380661,0.459156930446625,0.294942557811737,0.450305581092834,0.283791124820709,0.45094296336174,0.275193005800247,0.451624751091003,0.250823646783829,0.457787841558456,0.229478195309639,0.455858200788498,0.217376798391342,0.454753160476685,0.21732485294342,0.454089403152466,0.229530587792397,0.455210000276566,0.234703540802002,0.454863488674164,0.234810039401054,0.455567955970764,0.228848427534103,0.448587626218796,0.21724596619606,0.447798788547516,0.216934099793434,0.441209852695465,0.22861684858799,0.440758913755417,0.341547578573227,0.454318672418594,0.330744028091431,0.454894632101059,0.330773234367371,0.45234403014183,0.341022849082947,0.452443152666092,0.330858618021011,0.425121396780014,0.33853405714035,0.424428194761276,0.339008808135986,0.435365676879883,0.329568803310394,0.437446087598801,0.234397232532501,0.448906183242798,0.318268269300461,0.421219259500504,0.323786556720734,0.422473520040512,0.322403907775879,0.43689239025116,0.217145472764969,0.433358609676361,0.227597817778587,0.432622820138931,0.330982327461243,0.415576159954071,0.33773735165596,0.414983838796616,0.321432530879974,0.413228780031204,0.325642764568329,0.414614081382751,0.378277778625488,0.451167583465576,0.396542251110077,0.451647877693176,0.391645193099976,0.463264286518097,0.375714123249054,0.462252229452133,0.229319140315056,0.457936704158783,0.217111796140671,0.458333551883698,0.322747677564621,0.453923583030701,0.322547554969788,0.459953516721725,0.331492453813553,0.461231887340546,0.343132168054581,0.462008506059647,0.22630050778389,0.4298055768013,0.216637477278709,0.430773437023163,0.331700623035431,0.406716555356979,0.336879044771194,0.404136568307877,0.32548725605011,0.407361447811127,0.327170133590698,0.407165318727493,0.0247423648834229,0.565849542617798,0.0185552835464478,0.568803727626801,0.0189294219017029,0.563284456729889,0.0214697122573853,0.564988017082214,0.0218830704689026,0.495459258556366,0.0240421891212463,0.481716096401215,0.0337191224098206,0.482427507638931,0.03264981508255, 0.492282807826996,0.105932526290417,0.551271915435791,0.084714412689209,0.544871926307678,0.0897179245948792,0.539394319057465,0.112299263477325,0.54422914981842,0.0351712703704834,0.521165728569031,0.0223423838615417,0.522816300392151,0.0212114453315735,0.515785336494446,0.0355355739593506,0.513068079948425,0.150815725326538,0.501970410346985,0.155776858329773,0.50543874502182,0.155058264732361,0.512486219406128,0.150064766407013,0.510395109653473,0.0272926092147827,0.534814655780792,0.0241585373878479,0.534624755382538,0.0247637033462524,0.52852600812912,0.0305206179618835,0.527869999408722,0.148777604103088,0.474969834089279,0.15019565820694,0.459326505661011,0.156167328357697,0.460927098989487,0.155026435852051,0.479053735733032,0.15167361497879,0.434071213006973,0.156994462013245,0.435647696256638,0.034944474697113,0.537659585475922,0.0435709953308105,0.539197564125061,0.0415637493133545,0.550143718719482,0.0344051122665405,0.548058331012726,0.450246334075928,0.368571400642395,0.468321084976196,0.369344085454941,0.467593878507614,0.378215759992599,0.450784623622894,0.3774334192276,0.415033876895905,0.380277991294861,0.399300664663315,0.380014210939407,0.397429585456848,0.372690081596375,0.413176953792572,0.374352663755417,0.365223944187164,0.383698344230652,0.36184161901474,0.373072803020477,0.372505128383636,0.371900349855423,0.373970925807953,0.377067476511002,0.359168916940689,0.36756893992424,0.371502846479416,0.366074860095978,0.0677390694618225,0.529822707176209,0.0728061199188232,0.524149775505066,0.0814680457115173,0.497050166130066,0.0757598876953125,0.493799060583115,0.0782585144042969,0.484403222799301,0.0821327567100525,0.486700624227524,0.0710927248001099,0.491984397172928,0.0745404362678528,0.483289659023285,0.0796093344688416,0.517082750797272,0.0932942032814026,0.531377255916595,0.0920299291610718,0.534557580947876,0.0772157311439514,0.52014023065567,0.0814300179481506,0.515237033367157,0.0950225591659546,0.528312921524048,0.147869050502777,0.509653270244598,0.144675135612488,0.508201599121094, 0.145908832550049,0.499954134225845,0.14872807264328,0.501398622989655,0.130134880542755,0.535753846168518,0.127988696098328,0.530120670795441,0.140025556087494,0.52244758605957,0.142871499061584,0.524448275566101,0.143629252910614,0.499045640230179,0.142667829990387,0.507558643817902,0.138064980506897,0.521825730800629,0.12714809179306,0.527395009994507,0.143217086791992,0.474176287651062,0.145271718502045,0.458113193511963,0.14817225933075,0.459062933921814,0.146636545658112,0.474881589412689,0.141407132148743,0.474245607852936,0.142088711261749,0.457275658845901,0.14327871799469,0.436169922351837,0.147491693496704,0.435345619916916,0.149735271930695,0.435132443904877,0.466645777225494,0.384425818920136,0.467358529567719,0.380786627531052,0.494355857372284,0.380302399396896,0.49433445930481,0.383147716522217,0.494224399328232,0.390584945678711,0.467164486646652,0.390846490859985,0.451341688632965,0.385608434677124,0.450224429368973,0.389526784420013,0.450955659151077,0.380359888076782,0.431148022413254,0.389942049980164,0.416582077741623,0.39179190993309,0.415545970201492,0.3883196413517,0.430723696947098,0.386930495500565,0.41419318318367,0.383372217416763,0.430479109287262,0.381683737039566,0.419268876314163,0.4192875623703,0.403087258338928,0.416889131069183,0.403743028640747,0.4012351334095,0.418375372886658,0.400423437356949,0.40190377831459,0.389110445976257,0.399875491857529,0.384504407644272,0.388927519321442,0.41500049829483,0.38093775510788,0.412183105945587,0.381537109613419,0.403594702482224,0.392208874225616,0.40371185541153,0.387022614479065,0.386296451091766,0.388635277748108,0.389706313610077,0.37946143746376,0.391250014305115,0.378287941217422,0.388012498617172,0.358046889305115,0.423045426607132,0.357506573200226,0.407414644956589,0.364032715559006,0.410937756299973,0.364689558744431,0.420034736394882,0.358294606208801,0.383739739656448,0.35517430305481,0.383797436952591,0.35437947511673,0.374544739723206,0.356623888015747,0.373659133911133,0.35512238740921,0.36936816573143,0.356859803199768,0.368447452783585, 0.112989783287048,0.528313755989075,0.113057546317577,0.532720744609833,0.112976908683777,0.540064573287964,0.12982589006424,0.500156044960022,0.131166875362396,0.495728999376297,0.138694107532501,0.494518727064133,0.136923730373383,0.501478314399719,0.126039028167725,0.524064838886261,0.125165462493896,0.520644426345825,0.129054844379425,0.516872406005859,0.132602214813232,0.518194735050201,0.126348555088043,0.465804994106293,0.129999160766602,0.482096016407013,0.122621767222881,0.485277146100998,0.118010580539703,0.466594576835632,0.114536106586456,0.489804118871689,0.107210040092468,0.467830359935761,0.0990511178970337,0.519856214523315,0.100103966891766,0.515255272388458,0.113044440746307,0.516695916652679,0.113197028636932,0.521655440330505,0.0918431878089905,0.51332700252533,0.0975030064582825,0.523592352867126,0.0867846608161926,0.513697683811188,0.0948359966278076,0.491638869047165,0.0950173735618591,0.500511288642883,0.0937309265136719,0.50169050693512,0.0906478762626648,0.487810492515564,0.349386602640152,0.425649911165237,0.349617391824722,0.420905321836472,0.358194828033447,0.432000696659088,0.352966904640198,0.439869612455368,0.347686946392059,0.42891788482666,0.0734654664993286,0.451199650764465,0.0810456275939941,0.447482824325562,0.0848979353904724,0.454796582460403,0.0751094818115234,0.46112984418869,0.0889143943786621,0.469253778457642,0.0783880949020386,0.471582919359207,0.0973306894302368,0.447148501873016,0.0880305171012878,0.442180514335632,0.0942336320877075,0.427374064922333,0.104148916900158,0.445988804101944,0.100744366645813,0.468418776988983,0.113498210906982,0.446254938840866,0.103319048881531,0.503887593746185,0.103394150733948,0.50802755355835,0.108771443367004,0.493563860654831,0.491979509592056,0.427416950464249,0.465305835008621,0.432798057794571,0.465642958879471,0.427381157875061,0.491308152675629,0.419039279222488,0.493777543306351,0.440846800804138,0.470015287399292,0.442261517047882,0.465366452932358,0.435374289751053,0.491380006074905,0.43264564871788,0.448609530925751,0.445017963647842, 0.472558706998825,0.459806442260742,0.452736407518387,0.460093587636948,0.45087257027626,0.451915085315704,0.449027448892593,0.435713768005371,0.419751226902008,0.461840838193893,0.407070308923721,0.46408399939537,0.41500398516655,0.44992983341217,0.425370126962662,0.450255781412125,0.430422216653824,0.435394734144211,0.427538752555847,0.442336410284042,0.416878312826157,0.442035168409348,0.417880743741989,0.436185508966446,0.399796813726425,0.442402184009552,0.399293839931488,0.434955656528473,0.383222281932831,0.426275670528412,0.37286365032196,0.424079954624176,0.386077970266342,0.421308994293213,0.449668735265732,0.428060829639435,0.449093014001846,0.433066844940186,0.418199986219406,0.432776302099228,0.399744778871536,0.4304239153862,0.402002960443497,0.425325810909271,0.417893767356873,0.427630603313446,0.113107621669769,0.524415016174316,0.436903804540634,0.431937545537949,0.436875939369202,0.425985366106033,0.121558129787445,0.44674676656723,0.130947053432465,0.507629990577698,0.135821402072906,0.507522225379944,0.124090731143951,0.516194999217987,0.125623643398285,0.508483707904816,0.101767599582672,0.511468887329102,0.113301157951355,0.511588156223297,0.089921772480011,0.509028196334839,0.0906927585601807,0.506566882133484,0.0799970030784607,0.505449235439301,0.0753198862075806,0.50442236661911,0.0700299739837646,0.504497408866882,0.065216064453125,0.504608809947968,0.0603870749473572,0.52092432975769,0.0584153532981873,0.505590736865997,0.0350649356842041,0.507020950317383,0.0204565525054932,0.510069489479065,0.0207706093788147,0.502179741859436,0.0331776142120361,0.499512672424316,0.359740704298019,0.447107583284378,0.369842916727066,0.430999338626862,0.367412567138672,0.441463261842728,0.380001127719879,0.432079553604126,0.378819525241852,0.4422527551651,0.430062234401703,0.378067851066589,0.42901223897934,0.37069433927536,0.133239984512329,0.452206611633301,0.135607123374939,0.468500763177872,0.12582790851593,0.446558445692062,0.466339945793152,0.399336487054825,0.494031250476837,0.401004374027252,0.465319484472275, 0.421510130167007,0.450023919343948,0.398370891809464,0.449625670909882,0.421498864889145,0.436014741659164,0.420563161373138,0.434051930904388,0.397613674402237,0.0796428322792053,0.477449387311935,0.0827866792678833,0.481364488601685,0.366128534078598,0.396466970443726,0.359717667102814,0.393160223960876,0.363813072443008,0.393193602561951,0.366557449102402,0.393696665763855,0.389682531356812,0.394159108400345,0.38017013669014,0.394976764917374,0.401792883872986,0.393556743860245,0.494406044483185,0.377136290073395,0.1453498005867,0.525455594062805,0.131166815757751,0.539169788360596,0.0661033987998962,0.489401906728745,0.0711753964424133,0.482867121696472,0.375985890626907,0.382994264364243,0.386285185813904,0.381958305835724,0.0857775211334229,0.507120609283447,0.137169122695923,0.453945696353912,0.363990008831024,0.404573768377304,0.0912200212478638,0.480849593877792,0.00868386030197144,0.520104050636292,0.0153673887252808,0.5184605717659,0.0171499848365784,0.524443805217743,0.0121699571609497,0.526637971401215,0.0179567337036133,0.53368091583252,0.0140936970710754,0.534400701522827,0.0134184956550598,0.531229197978973,0.0179107785224915,0.529950201511383,0.103258669376373,0.494524985551834,0.102072887122631,0.487025409936905,0.434067755937576,0.450200915336609,0.434746891260147,0.442395836114883,0.434674859046936,0.436547189950943,0.431032240390778,0.428025305271149,0.432123482227325,0.43307825922966,0.121956832706928,0.510376393795013,0.00772356986999512,0.508043527603149,0.0134543180465698,0.504917562007904,0.0142194032669067,0.512399554252625,0.00768208503723145,0.516622006893158,0.430863171815872,0.419752418994904,0.430468797683716,0.399430871009827,0.012579083442688,0.556930303573608,0.0172882676124573,0.555832982063293,0.0179060697555542,0.557154655456543,0.015178918838501,0.558242976665497,0.027692437171936,0.537169933319092,0.0287777185440063,0.547577261924744,0.0208008885383606,0.550147891044617,0.0204887986183167,0.548915266990662,0.0214555263519287,0.548730313777924,0.0216976404190063,0.550254046916962, 0.0276411771774292,0.555946946144104,0.0257061123847961,0.555765450000763,0.0256133675575256,0.554820358753204,0.0276985764503479,0.554697751998901,0.0278128981590271,0.550798416137695,0.0256275534629822,0.550652801990509,0.0254974365234375,0.54880964756012,0.027853786945343,0.548840999603271,0.0195774435997009,0.559871315956116,0.017022967338562,0.560912609100342,0.0203602313995361,0.551062285900116,0.0228968858718872,0.551425337791443,0.0222112536430359,0.547911882400513,0.0191746354103088,0.548173189163208,0.0171039700508118,0.551744699478149,0.0199170112609863,0.553549408912659,0.022773265838623,0.555976629257202,0.0166571140289307,0.553618311882019,0.0229339599609375,0.55310446023941,0.020710825920105,0.553498148918152,0.0201403498649597,0.551492214202881,0.0201199650764465,0.552339911460876,0.0161529183387756,0.546268701553345,0.0184809565544128,0.54993748664856,0.0181548595428467,0.550949513912201,0.0146214365959167,0.548973202705383,0.0135563015937805,0.55183357000351,0.028738796710968,0.553544402122498,0.029215931892395,0.556857347488403,0.0247605443000793,0.55385959148407,0.0246257781982422,0.55695652961731,0.0248509645462036,0.55157482624054,0.0246293544769287,0.54781448841095,0.0287297964096069,0.551690697669983,0.0291746258735657,0.565621137619019,0.0378247499465942,0.563040971755981,0.0401232838630676,0.567025184631348,0.0302813053131104,0.572651863098145,0.0403980612754822,0.557693719863892,0.0347086787223816,0.552145779132843,0.0322855114936829,0.554355502128601,0.0335869193077087,0.556631803512573,0.0289596915245056,0.561262667179108,0.0324278473854065,0.559264421463013,0.0139090418815613,0.563377618789673,0.0234026312828064,0.55785071849823,0.0240074396133423,0.561472296714783,0.0217815637588501,0.561667025089264,0.0414920449256897,0.497349858283997,0.0477405786514282,0.494787484407425,0.0509456396102905,0.50371927022934,0.0427238941192627,0.505250990390778,0.0437225103378296,0.512471377849579,0.0523535013198853,0.511101186275482,0.0524418950080872,0.519123554229736,0.0433705449104309,0.520107686519623, 0.0392846465110779,0.528473138809204,0.0493247509002686,0.528684854507446,0.0442422032356262,0.537189483642578,0.037791907787323,0.534889161586761,0.0150001049041748,0.498121559619904,0.0192996263504028,0.48015758395195,0.0237651467323303,0.480093538761139,0.0208613276481628,0.496283352375031,0.0160833597183228,0.517033934593201,0.0205320715904236,0.514930903911591,0.0215620398521423,0.524138689041138,0.0179029107093811,0.524910748004913,0.0145037770271301,0.50303065776825,0.0197503566741943,0.501011729240417,0.0197256803512573,0.511481583118439,0.0153177976608276,0.513043344020844,0.0188559293746948,0.528028428554535,0.0226435661315918,0.527311682701111,0.0226925015449524,0.536360681056976,0.018886923789978,0.535983622074127,0.0338963866233826,0.492983460426331,0.0349967479705811,0.48097762465477,0.0384578704833984,0.481231242418289,0.0384554862976074,0.491895347833633,0.0365012884140015,0.511630058288574,0.0361410975456238,0.508423209190369,0.0409858822822571,0.507224261760712,0.0413757562637329,0.51172286272049,0.0336810946464539,0.52633148431778,0.0383481979370117,0.526985704898834,0.0118815898895264,0.529218733310699,0.0110456347465515,0.528439164161682,0.0358535051345825,0.522230207920074,0.00602567195892334,0.506656646728516,0.00595724582672119,0.50087183713913,0.0345904231071472,0.497380316257477,0.0542576909065247,0.508697152137756,0.0533885955810547,0.505401611328125,0.0407779812812805,0.521842956542969,0.0545738339424133,0.520968735218048,0.0520501136779785,0.526726961135864,0.0470439791679382,0.490422517061234,0.0491333603858948,0.492493480443954,0.0393296480178833,0.496521294116974,0.00707846879959106,0.500370025634766,0.00974524021148682,0.487851858139038,0.0107088694348931,0.488495051860809,0.0178726315498352,0.482141941785812,0.0134000182151794,0.497067868709564,0.00700652599334717,0.520406782627106,0.0134743452072144,0.536922931671143,0.00650584697723389,0.518412351608276,0.0391958355903625,0.48404797911644,0.0442200303077698,0.48966845870018,0.0395820140838623,0.49083137512207,0.0473983287811279, 0.537483394145966,0.0607030391693115,0.486369699239731,0.0662217736244202,0.479667037725449,0.116184286773205,0.550632297992706,0.130000770092011,0.547587931156158,0.138382196426392,0.543078541755676,0.147988021373749,0.53154844045639,0.151236593723297,0.526900231838226,0.138782739639282,0.487789750099182,0.143416821956635,0.489331781864166,0.136772453784943,0.477622210979462,0.130875945091248,0.490299552679062,0.124160647392273,0.489771038293839,0.118694603443146,0.501636922359467,0.111694343388081,0.504086017608643,0.112852096557617,0.508219599723816,0.0952918529510498,0.487286478281021,0.098229706287384,0.492688417434692,0.0980340242385864,0.487490236759186,0.124287247657776,0.500826835632324,0.130646228790283,0.503582835197449,0.125123262405396,0.504620909690857,0.120783977210522,0.50599730014801,0.088590681552887,0.497245460748672,0.091630756855011,0.50289124250412,0.0862922072410584,0.503363907337189,0.146182000637054,0.490875363349915,0.148671865463257,0.491410344839096,0.150508642196655,0.490887880325317,0.157525241374969,0.491011500358582,0.12577748298645,0.497349560260773,0.136772453784943,0.477622210979462,0.141407132148743,0.474245607852936,0.0571343898773193,0.496802121400833,0.137509703636169,0.440588623285294,0.130731701850891,0.436711817979813,0.126422107219696,0.436122566461563,0.124426126480103,0.426179140806198,0.130728900432587,0.425296664237976,0.43411386013031,0.430035382509232,0.433480858802795,0.424027681350708,0.432282745838165,0.398482859134674,0.131895840167999,0.442719131708145,0.118498437106609,0.426063716411591,0.366286247968674,0.388046741485596,0.368974447250366,0.402785241603851,0.368330597877502,0.41701352596283,0.369716435670853,0.41111820936203,0.0186651349067688,0.549419403076172,0.494351416826248,0.37111821770668,0.138484716415405,0.424965977668762,0.137760937213898,0.434852063655853,0.384444743394852,0.375294625759125,0.43327596783638,0.461674094200134,0.235420614480972,0.458123445510864,0.102119207382202,0.426218390464783,0.109296321868896,0.4264976978302,0.349507212638855,0.451796531677246, 0.352181255817413,0.462579071521759,0.349089741706848,0.450056672096252,0.345986604690552,0.433073252439499,0.344483971595764,0.41920730471611,0.343689143657684,0.410460114479065,0.342961609363556,0.402158737182617,0.248181715607643,0.447665184736252,0.262838751077652,0.443513631820679,0.322614192962646,0.452529937028885,0.364286869764328,0.455938398838043,0.316488534212112,0.396600484848022,0.318834364414215,0.396067351102829,0.321073144674301,0.398401767015457,0.321365296840668,0.406772822141647,0.324750304222107,0.397880852222443,0.321278423070908,0.395095348358154,0.324955582618713,0.393696874380112,0.324877351522446,0.396900326013565,0.324777543544769,0.404834747314453,0.480132311582565,0.459198027849197,0.493683844804764,0.453233420848846,0.493410646915436,0.460675865411758,0.482608795166016,0.469357013702393,0.477005273103714,0.458501666784287,0.24188457429409,0.457783102989197,0.240706071257591,0.455244809389114,0.240982696413994,0.454376637935638,0.239892065525055,0.44875305891037,0.356028348207474,0.44916233420372,0.754607617855072,0.409253805875778,0.763835072517395,0.398512125015259,0.767116487026215,0.404073774814606,0.758089125156403,0.415676683187485,0.762594819068909,0.424968481063843,0.747419595718384,0.42718642950058,0.745779693126678,0.424195051193237,0.776458024978638,0.428055554628372,0.770734310150146,0.431441575288773,0.771153330802917,0.424386322498322,0.775718033313751,0.423266559839249,0.72320419549942,0.451696991920471,0.711516439914703,0.451196044683456,0.711397051811218,0.447945863008499,0.723004043102264,0.448553204536438,0.73145717382431,0.450418591499329,0.743386685848236,0.449933618307114,0.742937088012695,0.452114105224609,0.7318514585495,0.453208118677139,0.742703855037689,0.415158152580261,0.732512712478638,0.418462872505188,0.733258903026581,0.428255349397659,0.72191321849823,0.427781581878662,0.722345888614655,0.419179677963257,0.758815765380859,0.449903339147568,0.758940100669861,0.450784891843796,0.74318653345108,0.448510825634003,0.721634864807129,0.435173243284225,0.731015384197235, 0.437343031167984,0.762988865375519,0.430778235197067,0.759696662425995,0.436398863792419,0.74626100063324,0.43240562081337,0.769671678543091,0.438094705343246,0.774811685085297,0.43839693069458,0.706472873687744,0.42163872718811,0.708284020423889,0.431755214929581,0.694180190563202,0.40161606669426,0.693622291088104,0.404312700033188,0.692704498767853,0.402669578790665,0.693037390708923,0.401021301746368,0.688781142234802,0.411092281341553,0.688702464103699,0.404418379068375,0.691176414489746,0.406587809324265,0.691484451293945,0.41272959113121,0.69779109954834,0.431242823600769,0.696919500827789,0.421710699796677,0.773625075817108,0.396795153617859,0.769449889659882,0.392841070890427,0.769685983657837,0.390376836061478,0.771981060504913,0.387157380580902,0.772735238075256,0.389326602220535,0.777174055576324,0.401328235864639,0.775875329971313,0.416235417127609,0.691480040550232,0.401323914527893,0.691881000995636,0.400673449039459,0.692438423633575,0.400538265705109,0.696033835411072,0.408795863389969,0.696759521961212,0.414004296064377,0.697540938854218,0.404276549816132,0.761217415332794,0.395520240068436,0.751967787742615,0.403056681156158,0.722726285457611,0.412355661392212,0.711169004440308,0.414471089839935,0.71353554725647,0.407555431127548,0.778830111026764,0.422753006219864,0.779981851577759,0.426935762166977,0.689720749855042,0.4029780626297,0.686328947544098,0.401566416025162,0.688695430755615,0.399166315793991,0.73963451385498,0.409781783819199,0.730022728443146,0.41180020570755,0.703960776329041,0.409789264202118,0.70665317773819,0.404861271381378,0.702825248241425,0.402751564979553,0.700896799564362,0.407475650310516,0.699438452720642,0.399962574243546,0.694482743740082,0.397077828645706,0.692803025245667,0.398692578077316,0.686204552650452,0.409095019102097,0.765196144580841,0.389560967683792,0.767038226127625,0.382348746061325,0.773058176040649,0.385631859302521,0.767909049987793,0.385390937328339,0.766923129558563,0.388707607984543,0.779473304748535,0.402381598949432,0.777784824371338,0.394805312156677, 0.780230820178986,0.395191729068756,0.77832156419754,0.415436953306198,0.692353069782257,0.39961177110672,0.691539943218231,0.399647891521454,0.690779566764832,0.398956835269928,0.70061331987381,0.449476808309555,0.692092716693878,0.450445234775543,0.691768646240234,0.448149174451828,0.700517773628235,0.447967022657394,0.768043398857117,0.416696012020111,0.704818189144135,0.414784133434296,0.701356291770935,0.452280133962631,0.700688898563385,0.449759721755981,0.700620412826538,0.449476063251495,0.691756546497345,0.420889317989349,0.691955626010895,0.431698322296143,0.692362010478973,0.453153282403946,0.711335718631744,0.446270525455475,0.722871959209442,0.447035640478134,0.7311732172966,0.448915868997574,0.757754862308502,0.452682942152023,0.780597388744354,0.45234426856041,0.780465841293335,0.451764106750488,0.793565332889557,0.450965315103531,0.793605446815491,0.45157378911972,0.774806380271912,0.451978445053101,0.774848878383636,0.451356202363968,0.780490875244141,0.445776998996735,0.780044198036194,0.438493341207504,0.79119747877121,0.438207685947418,0.792791426181793,0.44512066245079,0.665044784545898,0.447103470563889,0.665441691875458,0.445592790842056,0.674852609634399,0.447355002164841,0.674358725547791,0.449436247348785,0.673562705516815,0.42368483543396,0.675323963165283,0.434623688459396,0.665431916713715,0.432601809501648,0.665399551391602,0.422904163599014,0.774614274501801,0.446016281843185,0.686827182769775,0.420282959938049,0.682716369628906,0.434296697378159,0.680996894836426,0.421375393867493,0.780559897422791,0.430667191743851,0.790247857570648,0.430529534816742,0.665937423706055,0.414154767990112,0.6732537150383,0.414821922779083,0.678995668888092,0.413973212242126,0.683528900146484,0.412683963775635,0.616999924182892,0.446628212928772,0.618707478046417,0.457311004400253,0.602020442485809,0.458365082740784,0.597733795642853,0.447661221027374,0.793856978416443,0.453605055809021,0.781017661094666,0.454196453094482,0.673918724060059,0.453176110982895,0.664426863193512,0.451735496520996,0.781740605831146, 0.427868276834488,0.78918844461441,0.427971392869949,0.666724860668182,0.403608322143555,0.672446966171265,0.406229704618454,0.677406907081604,0.406714022159576,0.679240047931671,0.406920582056046,0.980464696884155,0.565849542617798,0.983737349510193,0.564988017082214,0.986277639865875,0.563284456729889,0.98665177822113,0.568803727626801,0.983323991298676,0.495459258556366,0.972557246685028,0.492282807826996,0.971487939357758,0.482427507638931,0.981164872646332,0.481716096401215,0.899274528026581,0.551271915435791,0.892907798290253,0.54422914981842,0.915489137172699,0.539394319057465,0.920492649078369,0.544871926307678,0.970035791397095,0.521165728569031,0.969671487808228,0.513068079948425,0.983995616436005,0.515785336494446,0.982864677906036,0.522816300392151,0.85439133644104,0.501970410346985,0.855142295360565,0.510395109653473,0.850148797035217,0.512486219406128,0.849430203437805,0.50543874502182,0.977914452552795,0.534814655780792,0.974686443805695,0.527869999408722,0.980443358421326,0.52852600812912,0.98104852437973,0.534624755382538,0.85642945766449,0.474969834089279,0.850180625915527,0.479053735733032,0.849039733409882,0.460927098989487,0.855011403560638,0.459326505661011,0.848212599754334,0.435647696256638,0.853533446788788,0.434071213006973,0.970262587070465,0.537659585475922,0.970801949501038,0.548058331012726,0.963643312454224,0.550143718719482,0.961636066436768,0.539197564125061,0.54489666223526,0.371642529964447,0.544417083263397,0.38030156493187,0.528481066226959,0.380285352468491,0.527814447879791,0.371232330799103,0.579624176025391,0.382936626672745,0.581368088722229,0.377376735210419,0.597290337085724,0.375122606754303,0.595640957355499,0.381937712430954,0.631531596183777,0.382081925868988,0.621814846992493,0.37714621424675,0.622962176799774,0.372366458177567,0.633574604988098,0.376093447208405,0.635345876216888,0.372565686702728,0.623383760452271,0.368965446949005,0.932400941848755,0.524149775505066,0.937467992305756,0.529822707176209,0.923739016056061,0.497050166130066,0.923074305057526,0.486700624227524, 0.926948547363281,0.484403222799301,0.929447174072266,0.493799060583115,0.930666625499725,0.483289659023285,0.934114336967468,0.491984397172928,0.925597727298737,0.517082750797272,0.927991330623627,0.52014023065567,0.913177132606506,0.534557580947876,0.911912858486176,0.531377255916595,0.923777043819427,0.515237033367157,0.910184502601624,0.528312921524048,0.857338011264801,0.509653270244598,0.856478989124298,0.501398622989655,0.859298229217529,0.499954134225845,0.86053192615509,0.508201599121094,0.875072181224823,0.535753846168518,0.862335562705994,0.524448275566101,0.865181505680084,0.52244758605957,0.87721836566925,0.530120670795441,0.861577808856964,0.499045640230179,0.862539231777191,0.507558643817902,0.867142081260681,0.521825730800629,0.878058969974518,0.527395009994507,0.861989974975586,0.474176287651062,0.858570516109467,0.474881589412689,0.857034802436829,0.459062933921814,0.859935343265533,0.458113193511963,0.863799929618835,0.474245607852936,0.863118350505829,0.457275658845901,0.857715368270874,0.435345619916916,0.861928343772888,0.436169922351837,0.855471789836884,0.435132443904877,0.529344975948334,0.386560380458832,0.503867506980896,0.383180409669876,0.503875374794006,0.380115121603012,0.528692603111267,0.382883965969086,0.503880023956299,0.391127020120621,0.528816521167755,0.39291700720787,0.54388427734375,0.388224124908447,0.544950902462006,0.392018049955368,0.54425722360611,0.383145183324814,0.563600420951843,0.392353892326355,0.56400853395462,0.389523833990097,0.5792276263237,0.39040070772171,0.578212440013886,0.393650740385056,0.564215481281281,0.384588301181793,0.580527663230896,0.385772168636322,0.575367867946625,0.420374631881714,0.576431810855865,0.401688128709793,0.591447114944458,0.401659190654755,0.590191304683685,0.416081428527832,0.595180809497833,0.386084198951721,0.593195080757141,0.390430927276611,0.607044696807861,0.413227677345276,0.603545367717743,0.403102874755859,0.614915728569031,0.402048289775848,0.615636885166168,0.409924626350403,0.608608722686768,0.386751741170883,0.617895185947418, 0.387478709220886,0.616787850856781,0.390542268753052,0.607033550739288,0.389996081590652,0.640844345092773,0.417767822742462,0.633434474468231,0.415630549192429,0.634134471416473,0.406921058893204,0.641299605369568,0.402739703655243,0.638928711414337,0.38120111823082,0.638640403747559,0.375510990619659,0.640200674533844,0.374624192714691,0.642270863056183,0.38081032037735,0.635965287685394,0.373271703720093,0.637007474899292,0.372495979070663,0.89221727848053,0.528313755989075,0.89214950799942,0.532720744609833,0.892230153083801,0.540064573287964,0.875381171703339,0.500156044960022,0.868283331394196,0.501478314399719,0.866512954235077,0.494518727064133,0.874040186405182,0.495728999376297,0.879168033599854,0.524064838886261,0.872604846954346,0.518194735050201,0.876152217388153,0.516872406005859,0.880041599273682,0.520644426345825,0.878858506679535,0.465804994106293,0.887196481227875,0.466594576835632,0.882585287094116,0.485277146100998,0.875207901000977,0.482096016407013,0.89799702167511,0.467830359935761,0.890670955181122,0.489804118871689,0.906155943870544,0.519856214523315,0.892010033130646,0.521655440330505,0.892162621021271,0.516695916652679,0.905103087425232,0.515255272388458,0.913363873958588,0.51332700252533,0.918422400951386,0.513697683811188,0.907704055309296,0.523592352867126,0.910371065139771,0.491638869047165,0.914559185504913,0.487810492515564,0.911476135253906,0.50169050693512,0.910189688205719,0.500511288642883,0.650650560855865,0.419254153966904,0.640388488769531,0.426603257656097,0.650445103645325,0.414571553468704,0.64580237865448,0.434086859226227,0.652509748935699,0.422331124544144,0.93174159526825,0.451199650764465,0.930097579956055,0.46112984418869,0.920309126377106,0.454796582460403,0.924161434173584,0.447482824325562,0.92681896686554,0.471582919359207,0.916292667388916,0.469253778457642,0.907876372337341,0.447148501873016,0.910973429679871,0.427374064922333,0.91717654466629,0.442180514335632,0.904462695121765,0.468418776988983,0.90105813741684,0.445988804101944,0.891708850860596,0.446254938840866, 0.90181291103363,0.50802755355835,0.901888012886047,0.503887593746185,0.896435618400574,0.493563860654831,0.50517076253891,0.429013401269913,0.506000459194183,0.420615047216415,0.529742658138275,0.428212404251099,0.529947876930237,0.433296054601669,0.50310879945755,0.442367672920227,0.505573451519012,0.43417689204216,0.529832184314728,0.435710430145264,0.525253534317017,0.442368656396866,0.545705795288086,0.443807005882263,0.543323040008545,0.450181663036346,0.541911959648132,0.455080658197403,0.524735987186432,0.459106266498566,0.545525074005127,0.435328751802444,0.573590576648712,0.457689046859741,0.56844300031662,0.447469830513,0.577226996421814,0.445278316736221,0.586219072341919,0.459366917610168,0.563839316368103,0.434238195419312,0.576426982879639,0.434724003076553,0.574115574359894,0.43980285525322,0.566531181335449,0.440407395362854,0.595705032348633,0.430345475673676,0.594815194606781,0.439243614673615,0.612983882427216,0.423263907432556,0.610019326210022,0.418848723173141,0.624319136142731,0.420322835445404,0.54506117105484,0.428308099508286,0.545519053936005,0.432900667190552,0.576137483119965,0.43361958861351,0.576637804508209,0.426601260900497,0.593071579933167,0.423647373914719,0.595304310321808,0.428203612565994,0.892099440097809,0.524415016174316,0.557630777359009,0.425921976566315,0.557522654533386,0.429709196090698,0.883648931980133,0.44674676656723,0.874260008335114,0.507629990577698,0.869385659694672,0.507522225379944,0.879583418369293,0.508483707904816,0.881116330623627,0.516194999217987,0.891905903816223,0.511588156223297,0.903439462184906,0.511468887329102,0.915285289287567,0.509028196334839,0.914514303207397,0.506566882133484,0.925210058689117,0.505449235439301,0.929887175559998,0.50442236661911,0.935177087783813,0.504497408866882,0.939990997314453,0.504608809947968,0.946791708469391,0.505590736865997,0.944819986820221,0.52092432975769,0.970142126083374,0.507020950317383,0.972029447555542,0.499512672424316,0.984436452388763,0.502179741859436,0.984750509262085,0.510069489479065,0.637537717819214, 0.44191300868988,0.62952721118927,0.43669456243515,0.627429008483887,0.42667818069458,0.617043733596802,0.438097506761551,0.616275787353516,0.428491592407227,0.565531015396118,0.374193847179413,0.564592838287354,0.38117504119873,0.871967077255249,0.452206611633301,0.879379153251648,0.446558445692062,0.869599938392639,0.468500763177872,0.529516041278839,0.401287615299225,0.529791355133057,0.424032330513,0.503894925117493,0.402092933654785,0.545101881027222,0.400476723909378,0.545529186725616,0.424572765827179,0.56072598695755,0.399584501981735,0.558198094367981,0.421925902366638,0.925564229488373,0.477449387311935,0.922420382499695,0.481364488601685,0.63135153055191,0.393768757581711,0.630744636058807,0.391293555498123,0.633687019348145,0.390479922294617,0.638129353523254,0.389891713857651,0.606055438518524,0.394148617982864,0.616167545318604,0.394012421369553,0.593388676643372,0.394497841596603,0.503856360912323,0.376683056354523,0.859857261180878,0.525455594062805,0.874040246009827,0.539169788360596,0.934031665325165,0.482867121696472,0.939103662967682,0.489401906728745,0.620071113109589,0.382694751024246,0.609202086925507,0.382745623588562,0.919429540634155,0.507120609283447,0.868037939071655,0.453945696353912,0.63402396440506,0.400966167449951,0.913987040519714,0.480849593877792,0.996523201465607,0.520104050636292,0.993037104606628,0.526637971401215,0.988057076931,0.524443805217743,0.989839673042297,0.5184605717659,0.987250328063965,0.53368091583252,0.987296283245087,0.529950201511383,0.991788566112518,0.531229197978973,0.991113364696503,0.534400701522827,0.903134167194366,0.487025409936905,0.901948392391205,0.494524985551834,0.559362709522247,0.4407819211483,0.559804558753967,0.447801828384399,0.55958479642868,0.435471534729004,0.563060760498047,0.426239252090454,0.562199473381042,0.432204782962799,0.88325023651123,0.510376393795013,0.997483491897583,0.508043527603149,0.997524976730347,0.516622006893158,0.990987658500671,0.512399554252625,0.991752743721008,0.504917562007904,0.563707828521729,0.419971823692322, 0.564278662204742,0.40119206905365,0.99262797832489,0.556930303573608,0.990028142929077,0.558242976665497,0.987300992012024,0.557154655456543,0.987918794155121,0.555832982063293,0.977514624595642,0.537169933319092,0.976429343223572,0.547577261924744,0.984406173229218,0.550147891044617,0.983509421348572,0.550254046916962,0.983751535415649,0.548730313777924,0.984718263149261,0.548915266990662,0.977565884590149,0.555946946144104,0.97750848531723,0.554697751998901,0.979593694210052,0.554820358753204,0.979500949382782,0.555765450000763,0.977394163608551,0.550798416137695,0.977353274822235,0.548840999603271,0.979709625244141,0.54880964756012,0.979579508304596,0.550652801990509,0.985629618167877,0.559871315956116,0.988184094429016,0.560912609100342,0.984846830368042,0.551062285900116,0.982310175895691,0.551425337791443,0.982995808124542,0.547911882400513,0.986032426357269,0.548173189163208,0.988103091716766,0.551744699478149,0.988549947738647,0.553618311882019,0.982433795928955,0.555976629257202,0.985290050506592,0.553549408912659,0.982273101806641,0.55310446023941,0.984496235847473,0.553498148918152,0.985066711902618,0.551492214202881,0.985087096691132,0.552339911460876,0.989054143428802,0.546268701553345,0.990585625171661,0.548973202705383,0.987052202224731,0.550949513912201,0.986726105213165,0.54993748664856,0.991650760173798,0.55183357000351,0.975991129875183,0.556857347488403,0.97646826505661,0.553544402122498,0.980446517467499,0.55385959148407,0.980581283569336,0.55695652961731,0.980577707290649,0.54781448841095,0.980356097221375,0.55157482624054,0.976477265357971,0.551690697669983,0.976032435894012,0.565621137619019,0.974925756454468,0.572651863098145,0.965083777904511,0.567025184631348,0.967382311820984,0.563040971755981,0.970498383045197,0.552145779132843,0.964809000492096,0.557693719863892,0.972921550273895,0.554355502128601,0.971620142459869,0.556631803512573,0.976247370243073,0.561262667179108,0.972779214382172,0.559264421463013,0.991298019886017,0.563377618789673,0.981804430484772,0.55785071849823,0.983425498008728, 0.561667025089264,0.981199622154236,0.561472296714783,0.963715016841888,0.497349858283997,0.962483167648315,0.505250990390778,0.954261422157288,0.50371927022934,0.95746648311615,0.494787484407425,0.961484551429749,0.512471377849579,0.961836516857147,0.520107686519623,0.952765166759491,0.519123554229736,0.952853560447693,0.511101186275482,0.9659224152565,0.528473138809204,0.967415153980255,0.534889161586761,0.960964858531952,0.537189483642578,0.95588231086731,0.528684854507446,0.990206956863403,0.498121559619904,0.984345734119415,0.496283352375031,0.981441915035248,0.480093538761139,0.985907435417175,0.48015758395195,0.989123702049255,0.517033934593201,0.987304151058197,0.524910748004913,0.983645021915436,0.524138689041138,0.984674990177155,0.514930903911591,0.990703284740448,0.50303065776825,0.98988926410675,0.513043344020844,0.985481381416321,0.511481583118439,0.985456705093384,0.501011729240417,0.986351132392883,0.528028428554535,0.9863201379776,0.535983622074127,0.982514560222626,0.536360681056976,0.982563495635986,0.527311682701111,0.971310675144196,0.492983460426331,0.966751575469971,0.491895347833633,0.96674919128418,0.481231242418289,0.970210313796997,0.48097762465477,0.968705773353577,0.511630058288574,0.963831305503845,0.51172286272049,0.964221179485321,0.507224261760712,0.969065964221954,0.508423209190369,0.966858863830566,0.526985704898834,0.971525967121124,0.52633148431778,0.994161427021027,0.528439164161682,0.993325471878052,0.529218733310699,0.969353556632996,0.522230207920074,0.999249815940857,0.50087183713913,0.999181389808655,0.506656646728516,0.970616638660431,0.497380316257477,0.950949370861053,0.508697152137756,0.951818466186523,0.505401611328125,0.9531569480896,0.526726961135864,0.950633227825165,0.520968735218048,0.964429080486298,0.521842956542969,0.965877413749695,0.496521294116974,0.956073701381683,0.492493480443954,0.95816308259964,0.490422517061234,0.998128592967987,0.500370025634766,0.994498193264008,0.488495051860809,0.995461821556091,0.487851858139038,0.987334430217743,0.482141941785812, 0.991807043552399,0.497067868709564,0.998200535774231,0.520406782627106,0.991732716560364,0.536922931671143,0.998701214790344,0.518412351608276,0.966011226177216,0.48404797911644,0.960987031459808,0.48966845870018,0.965625047683716,0.49083137512207,0.95780873298645,0.537483394145966,0.944504022598267,0.486369699239731,0.938985288143158,0.479667037725449,0.889022767543793,0.550632297992706,0.875206291675568,0.547587931156158,0.866824865341187,0.543078541755676,0.857219040393829,0.53154844045639,0.853970468044281,0.526900231838226,0.866424322128296,0.487789750099182,0.861790239810944,0.489331781864166,0.868434607982636,0.477622210979462,0.881046414375305,0.489771038293839,0.874331116676331,0.490299552679062,0.893512725830078,0.504086017608643,0.886512458324432,0.501636922359467,0.892354965209961,0.508219599723816,0.909915208816528,0.487286478281021,0.906977355480194,0.492688417434692,0.907173037528992,0.487490236759186,0.880919814109802,0.500826835632324,0.880083799362183,0.504620909690857,0.874560832977295,0.503582835197449,0.884423077106476,0.50599730014801,0.916616380214691,0.497245460748672,0.91891485452652,0.503363907337189,0.913576304912567,0.50289124250412,0.859025061130524,0.490875363349915,0.856535196304321,0.491410344839096,0.854698419570923,0.490887880325317,0.847681820392609,0.491011500358582,0.879429578781128,0.497349560260773,0.863799929618835,0.474245607852936,0.868434607982636,0.477622210979462,0.948072671890259,0.496802121400833,0.867697358131409,0.440588623285294,0.874475359916687,0.436711817979813,0.874478161334991,0.425296664237976,0.880780935287476,0.426179140806198,0.878784954547882,0.436122566461563,0.560287773609161,0.42951512336731,0.562477588653564,0.400355845689774,0.561031401157379,0.423994868993759,0.873311221599579,0.442719131708145,0.886708617210388,0.426063716411591,0.630700469017029,0.386132597923279,0.628502368927002,0.399933576583862,0.629412770271301,0.413161039352417,0.627862691879272,0.407769113779068,0.986541926860809,0.549419403076172,0.503943741321564,0.370127141475677,0.86744612455368, 0.434852063655853,0.866722345352173,0.424965977668762,0.610785722732544,0.376549631357193,0.55998307466507,0.456301599740982,0.774417042732239,0.454215496778488,0.903087854385376,0.426218390464783,0.895910739898682,0.4264976978302,0.656830608844757,0.45004341006279,0.656801819801331,0.444815665483475,0.657079100608826,0.443402141332626,0.658003568649292,0.430428117513657,0.658783674240112,0.417984008789063,0.659290254116058,0.409721106290817,0.659898221492767,0.401548981666565,0.759941875934601,0.444756895303726,0.744423568248749,0.440918684005737,0.683150768280029,0.448111832141876,0.631603598594666,0.450983494520187,0.687003374099731,0.395388573408127,0.689558684825897,0.395938873291016,0.683739542961121,0.406359404325485,0.683596611022949,0.399516522884369,0.679964542388916,0.397665917873383,0.679336249828339,0.396005660295486,0.68032431602478,0.392897188663483,0.683547854423523,0.394201576709747,0.680071711540222,0.404406577348709,0.515199542045593,0.458851248025894,0.512492120265961,0.468498796224594,0.502702355384827,0.461515992879868,0.502747356891632,0.454407125711441,0.518170297145844,0.457941502332687,0.681358098983765,0.450076073408127,0.681105017662048,0.453567922115326,0.768439888954163,0.451574802398682,0.767408430576324,0.453764140605927,0.768066644668579,0.450806647539139,0.768769860267639,0.445820748806,0.641449809074402,0.443849712610245,0.933320701122284,0.268327951431274,0.923992574214935,0.269698321819305,0.934848248958588,0.253090977668762,0.950158417224884,0.263143926858902,0.895198523998261,0.257498472929001,0.903576195240021,0.236679404973984,0.867893040180206,0.249985933303833,0.872969210147858,0.230413258075714,0.895217657089233,0.2643923163414,0.924956738948822,0.278505563735962,0.867832541465759,0.257424116134644,0.842459261417389,0.254625350236893,0.843097627162933,0.248642191290855,0.932931900024414,0.284916162490845,0.948257923126221,0.304769545793533,0.946492373943329,0.309218317270279,0.936342835426331,0.303109407424927,0.91800981760025,0.29010397195816,0.88927036523819,0.286212682723999, 0.861737549304962,0.281138062477112,0.838255405426025,0.278187870979309,0.9119713306427,0.314666241407394,0.885414779186249,0.309356302022934,0.858454763889313,0.305477410554886,0.835566759109497,0.301949769258499,0.972748160362244,0.299366444349289,0.96695864200592,0.312221109867096,0.969485998153687,0.285796999931335,0.925894856452942,0.35386335849762,0.930615961551666,0.372242331504822,0.914036810398102,0.377274364233017,0.911105692386627,0.357508510351181,0.881809830665588,0.383913725614548,0.880500137805939,0.361381113529205,0.852180659770966,0.385292530059814,0.853487133979797,0.36150124669075,0.823749482631683,0.38059213757515,0.828502118587494,0.357459127902985,0.882514178752899,0.354774594306946,0.914182364940643,0.350667357444763,0.855222702026367,0.353923797607422,0.830049097537994,0.349689602851868,0.926883339881897,0.341939270496368,0.936554372310638,0.339606463909149,0.930604338645935,0.349378705024719,0.923177182674408,0.348145425319672,0.882787823677063,0.332521170377731,0.910745143890381,0.338018208742142,0.857464790344238,0.329665690660477,0.834308981895447,0.325642168521881,0.957570135593414,0.356179237365723,0.958396553993225,0.343108624219894,0.949369788169861,0.365657210350037,0.932775616645813,0.321975320577621,0.942306041717529,0.323416143655777,0.961314260959625,0.327563285827637,0.760866105556488,0.269818276166916,0.755325138568878,0.256372451782227,0.766227066516876,0.249875470995903,0.771275162696838,0.264567971229553,0.790031671524048,0.236606791615486,0.794752597808838,0.253192931413651,0.81506609916687,0.23140624165535,0.818611919879913,0.248345494270325,0.793910264968872,0.258578777313232,0.769674241542816,0.270374745130539,0.81800764799118,0.255068838596344,0.761549174785614,0.278495877981186,0.754863619804382,0.281722396612167,0.758051872253418,0.273756861686707,0.763466775417328,0.273676067590714,0.795543849468231,0.276203095912933,0.773639798164368,0.279428154230118,0.818122446537018,0.276491671800613,0.794036090373993,0.29510310292244,0.773809254169464,0.298740446567535,0.816003322601318, 0.298470586538315,0.738826632499695,0.273399502038956,0.739712834358215,0.28254634141922,0.743254899978638,0.264570295810699,0.753750443458557,0.322170913219452,0.762862265110016,0.331527441740036,0.754029452800751,0.34478947520256,0.745245337486267,0.335955590009689,0.783500373363495,0.341641873121262,0.804992377758026,0.349287092685699,0.79717081785202,0.369802087545395,0.774324834346771,0.358581990003586,0.784179925918579,0.335605144500732,0.762725472450256,0.325018882751465,0.8062584400177,0.342144787311554,0.752049267292023,0.317053645849228,0.751132607460022,0.307957530021667,0.756792843341827,0.313328236341476,0.75738126039505,0.319226056337357,0.768985629081726,0.316766530275345,0.790696322917938,0.317778080701828,0.812141895294189,0.320514112710953,0.73295670747757,0.312966018915176,0.736516714096069,0.304427325725555,0.735206961631775,0.322557032108307,0.739153265953064,0.293637007474899,0.754302144050598,0.295037448406219,0.937661588191986,0.251245647668839,0.953827559947968,0.262629598379135,0.905971229076386,0.234372571110725,0.973193764686584,0.284102380275726,0.976634621620178,0.299418747425079,0.932843267917633,0.374288648366928,0.915952801704407,0.379633158445358,0.883378088474274,0.386580765247345,0.852884590625763,0.388455212116241,0.823428153991699,0.382073312997818,0.952203512191772,0.367356508970261,0.960974156856537,0.357114166021347,0.970433294773102,0.312439948320389,0.964659154415131,0.32796436548233,0.961689949035645,0.343610465526581,0.753680527210236,0.254738092422485,0.764610111713409,0.24781234562397,0.788761854171753,0.234417006373405,0.816814661026001,0.227601274847984,0.741243779659271,0.26436585187912,0.736427962779999,0.272608190774918,0.751730918884277,0.34588223695755,0.743014812469482,0.336565017700195,0.772195219993591,0.360297381877899,0.795680582523346,0.372463703155518,0.732651174068451,0.322372704744339,0.730455577373505,0.31206202507019,0.736902952194214,0.292821705341339,0.737433671951294,0.281897008419037,0.734220385551453,0.303444892168045,0.848579466342926,0.389571249485016, 0.830957114696503,0.422840178012848,0.817918241024017,0.417454749345779,0.822933614253998,0.384244203567505,0.817365825176239,0.421660244464874,0.800271272659302,0.417135626077652,0.803600549697876,0.414389938116074,0.796481370925903,0.393642067909241,0.798353791236877,0.375876784324646,0.833492696285248,0.426861852407455,0.759304404258728,0.295745819807053,0.773349165916443,0.193666711449623,0.750538468360901,0.194664180278778,0.752880036830902,0.157488271594048,0.772855043411255,0.16107365489006,0.814538538455963,0.114279113709927,0.777037024497986,0.106542751193047,0.77422696352005,0.0877593383193016,0.809171915054321,0.0827663615345955,0.904215157032013,0.161787554621696,0.901615917682648,0.191583037376404,0.894795894622803,0.184624716639519,0.888192892074585,0.16151387989521,0.797747075557709,0.217984437942505,0.801936447620392,0.226145848631859,0.793895781040192,0.224722743034363,0.865665018558502,0.110491096973419,0.84164959192276,0.111081622540951,0.838113129138947,0.0854227915406227,0.864564180374146,0.0794505700469017,0.751133382320404,0.2197455316782,0.775569617748261,0.220952928066254,0.805200219154358,0.190092891454697,0.800730764865875,0.197480067610741,0.807449340820313,0.171859383583069,0.901110768318176,0.226513788104057,0.904157817363739,0.215965509414673,0.940537929534912,0.217310786247253,0.720092356204987,0.214974105358124,0.721273839473724,0.195310920476913,0.889321386814117,0.216134250164032,0.883370399475098,0.202454015612602,0.89242035150528,0.202085971832275,0.897662103176117,0.211332023143768,0.896685898303986,0.19204244017601,0.888219475746155,0.188716247677803,0.87223607301712,0.217559367418289,0.870467364788055,0.202562421560287,0.877152264118195,0.227772831916809,0.873335361480713,0.188720971345901,0.879628717899323,0.182459637522697,0.869873106479645,0.218495756387711,0.867914974689484,0.203014746308327,0.868851244449615,0.172363296151161,0.875956833362579,0.167172476649284,0.865003883838654,0.173631653189659,0.857398688793182,0.14803709089756,0.85753458738327,0.140750348567963,0.864970505237579, 0.143848940730095,0.860651731491089,0.150380536913872,0.856923997402191,0.154384732246399,0.85979551076889,0.154239028692245,0.849265933036804,0.228824734687805,0.828008353710175,0.228980839252472,0.831250369548798,0.219924062490463,0.830006718635559,0.204513713717461,0.833688914775848,0.175611272454262,0.861942052841187,0.174872398376465,0.834688365459442,0.152862891554832,0.830743551254272,0.147279366850853,0.835773944854736,0.156671851873398,0.828780472278595,0.218867257237434,0.830126106739044,0.173793792724609,0.826624035835266,0.191535577178001,0.819761574268341,0.186407476663589,0.823517858982086,0.170674562454224,0.805804073810577,0.21421192586422,0.813103675842285,0.218578934669495,0.806186079978943,0.197060197591782,0.813243091106415,0.19273878633976,0.810199320316315,0.205640941858292,0.818290233612061,0.205323845148087,0.887648582458496,0.0790276974439621,0.895285964012146,0.105562143027782,0.873822748661041,0.125774472951889,0.841438472270966,0.133484050631523,0.721626758575439,0.155171558260918,0.753031075000763,0.105318166315556,0.752103507518768,0.0861820802092552,0.750649333000183,0.125437781214714,0.776047348976135,0.129015162587166,0.814607679843903,0.138984516263008,0.992601931095123,0.222216948866844,0.943544209003448,0.192469134926796,0.992563545703888,0.189946621656418,0.88135302066803,0.0375596843659878,0.932922422885895,0.0305452421307564,0.933688104152679,0.0466350838541985,0.886409759521484,0.0536780282855034,0.850192546844482,0.044761698693037,0.858140051364899,0.0597738437354565,0.832130670547485,0.063714437186718,0.82776951789856,0.0490079112350941,0.802795946598053,0.0661360546946526,0.800281941890717,0.0488070957362652,0.77183586359024,0.0659134536981583,0.769591987133026,0.0510492362082005,0.764347016811371,0.0139534035697579,0.750378727912903,0.0493228919804096,0.747531235218048,0.0137583306059241,0.833703756332397,0.156106397509575,0.83575564622879,0.15948811173439,0.857724189758301,0.158656671643257,0.860648095607758,0.157596454024315,0.862607419490814,0.154043883085251,0.898496329784393, 0.124158263206482,0.940897643566132,0.127493172883987,0.940654516220093,0.158450558781624,0.992649674415588,0.159674748778343,0.993084490299225,0.125629618763924,0.780830800533295,0.388021469116211,0.763319849967957,0.37930428981781,0.688186347484589,0.330608367919922,0.699850976467133,0.350406050682068,0.676716029644012,0.355582684278488,0.700220286846161,0.2899070084095,0.705440521240234,0.275481939315796,0.644920408725739,0.365935832262039,0.65499347448349,0.349227398633957,0.681410849094391,0.378305941820145,0.736246526241302,0.365530550479889,0.675548672676086,0.282997369766235,0.655728220939636,0.273800671100616,0.66063517332077,0.25606295466423,0.68062150478363,0.269397616386414,0.870020866394043,0.414382666349411,0.691821336746216,0.362363547086716,0.692457377910614,0.381259113550186,0.626998424530029,0.361107975244522,0.62946754693985,0.339146971702576,0.635861158370972,0.244253218173981,0.630980551242828,0.26115146279335,0.599730908870697,0.25773361325264,0.600780248641968,0.240688666701317,0.992307841777802,0.363102644681931,0.992164552211761,0.399505525827408,0.964402079582214,0.388397991657257,0.952722668647766,0.386469095945358,0.916762590408325,0.410856634378433,0.943591952323914,0.411936610937119,0.715444564819336,0.665675759315491,0.727254152297974,0.636735916137695,0.781279563903809,0.636604785919189,0.790807604789734,0.663928151130676,0.689314126968384,0.635167717933655,0.689139127731323,0.666394233703613,0.616698145866394,0.665555477142334,0.617665648460388,0.634606122970581,0.655278921127319,0.637321829795837,0.654662609100342,0.664603114128113,0.571656346321106,0.663687229156494,0.569865226745605,0.638484001159668,0.827999472618103,0.612478733062744,0.814959406852722,0.622038960456848,0.78205394744873,0.628329157829285,0.787345409393311,0.511277198791504,0.818762183189392,0.511027038097382,0.829190731048584,0.529740214347839,0.518323421478271,0.629214286804199,0.509744167327881,0.580598950386047,0.522879838943481,0.508232235908508,0.529046058654785,0.513963282108307,0.586078763008118,0.331734776496887, 0.559811413288116,0.362512201070786,0.564990162849426,0.332949578762054,0.782404899597168,0.474529027938843,0.810660600662231,0.475670695304871,0.807822465896606,0.50594425201416,0.787613153457642,0.502904534339905,0.536028206348419,0.362777650356293,0.538962185382843,0.339492291212082,0.650438666343689,0.29094073176384,0.670648217201233,0.297373265028,0.664069175720215,0.320719718933105,0.64100581407547,0.313711911439896,0.504625201225281,0.308845311403275,0.504582524299622,0.287295699119568,0.538440644741058,0.283307015895844,0.539351046085358,0.307597637176514,0.57253509759903,0.237390860915184,0.57097065448761,0.25714373588562,0.537389039993286,0.263865828514099,0.536346614360809,0.246064260601997,0.99285763502121,0.30263614654541,0.992650926113129,0.334267288446426,0.50458037853241,0.250984907150269,0.50503671169281,0.224314481019974,0.534377336502075,0.218466311693192,0.731717467308044,0.502667903900146,0.731136322021484,0.477111339569092,0.693044900894165,0.502034604549408,0.683915138244629,0.475372195243835,0.645643711090088,0.504274606704712,0.64055871963501,0.479930102825165,0.617730021476746,0.507469892501831,0.614712357521057,0.477846682071686,0.57876443862915,0.476024568080902,0.578959226608276,0.50707072019577,0.535512804985046,0.473757565021515,0.531726717948914,0.50871354341507,0.813764750957489,0.453143060207367,0.796364188194275,0.450320214033127,0.790247678756714,0.41715669631958,0.829368472099304,0.672558426856995,0.808809757232666,0.670746386051178,0.810044050216675,0.662688016891479,0.838637828826904,0.667980194091797,0.580808877944946,0.132732570171356,0.57924211025238,0.167037025094032,0.536935210227966,0.171619936823845,0.541517734527588,0.132057279348373,0.697738230228424,0.19088588654995,0.669225931167603,0.185248553752899,0.673917889595032,0.145867630839348,0.699321448802948,0.152734011411667,0.589337348937988,0.0632009133696556,0.589184284210205,0.0833699032664299,0.543471276760101,0.0829864963889122,0.546944379806519,0.060667596757412,0.59907454252243,0.0290243290364742,0.594756245613098, 0.0432147420942783,0.550425350666046,0.0373775735497475,0.552923262119293,0.0233337115496397,0.505820333957672,0.0894288644194603,0.506083130836487,0.0650575086474419,0.505016982555389,0.201458677649498,0.535055637359619,0.196205720305443,0.615216195583344,0.133028343319893,0.645367741584778,0.136751487851143,0.640771389007568,0.176802262663841,0.610351264476776,0.172737151384354,0.650990068912506,0.0931307151913643,0.621639966964722,0.0875483974814415,0.626654863357544,0.0736797153949738,0.651997864246368,0.0780730322003365,0.729634761810303,0.263900190591812,0.715039789676666,0.238289043307304,0.743754029273987,0.246286526322365,0.666485369205475,0.225836500525475,0.668371319770813,0.202715426683426,0.696199893951416,0.209844559431076,0.693988800048828,0.231697201728821,0.574670672416687,0.18998447060585,0.572602152824402,0.212673604488373,0.603641331195831,0.212979018688202,0.607521712779999,0.189424797892571,0.63857889175415,0.192665070295334,0.636087715625763,0.215994104743004,0.677612900733948,0.114959582686424,0.70053231716156,0.120136417448521,0.540867567062378,0.103957086801529,0.586773633956909,0.100893780589104,0.61874121427536,0.103941410779953,0.649091780185699,0.107565402984619,0.701120674610138,0.10377149283886,0.678622305393219,0.0998936966061592,0.677846610546112,0.082226537168026,0.700346827507019,0.0845466479659081,0.506397902965546,0.0401044972240925,0.506518959999084,0.0269738771021366,0.661464273929596,0.044655155390501,0.685372292995453,0.0535704232752323,0.681939959526062,0.0664846673607826,0.656259775161743,0.0589933656156063,0.63004595041275,0.0527744852006435,0.727296352386475,0.0836255997419357,0.703766703605652,0.0674500614404678,0.729407370090485,0.0666308328509331,0.992817878723145,0.255097448825836,0.522567868232727,0.658773064613342,0.524118661880493,0.633377075195313,0.890552222728729,0.410685986280441,0.849687993526459,0.431183248758316,0.831782937049866,0.455627232789993,0.570141196250916,0.277525871992111,0.566612064838409,0.302256762981415,0.634150087833405,0.0389186665415764, 0.933514356613159,0.0762230306863785,0.751203954219818,0.0631147772073746,0.69502854347229,0.304775953292847,0.96168839931488,0.465842097997665,0.964544475078583,0.430101126432419,0.992227911949158,0.446215808391571,0.992396235466003,0.481091499328613,0.595113635063171,0.302143156528473,0.725778996944427,0.103572383522987,0.723576128482819,0.121917366981506,0.70630931854248,0.0514342524111271,0.716472804546356,0.349842011928558,0.73192173242569,0.0533336810767651,0.992422461509705,0.0462127290666103,0.9925257563591,0.0683199167251587,0.992686927318573,0.0269519966095686,0.939567446708679,0.104174003005028,0.992869675159454,0.0974282920360565,0.625277400016785,0.277848809957504,0.598133563995361,0.274931907653809,0.505522549152374,0.109425269067287,0.735630750656128,0.629181981086731,0.719361126422882,0.672702252864838,0.689525246620178,0.672154903411865,0.65521776676178,0.670224785804749,0.61724328994751,0.671650528907776,0.616997361183167,0.629953861236572,0.652758955955505,0.627359628677368,0.776291370391846,0.672854542732239,0.57159960269928,0.631386756896973,0.570599913597107,0.668504118919373,0.689300775527954,0.628225803375244,0.528218865394592,0.463175773620605,0.550465703010559,0.464593112468719,0.575890064239502,0.464836001396179,0.784542798995972,0.459789156913757,0.820479393005371,0.462807238101959,0.726988315582275,0.460530996322632,0.681811213493347,0.462706446647644,0.688820242881775,0.511061310768127,0.650319695472717,0.514743983745575,0.635732293128967,0.466295003890991,0.615205764770508,0.517841577529907,0.613668084144592,0.465295910835266,0.571149826049805,0.518631398677826,0.518605709075928,0.662401556968689,0.741526365280151,0.510650634765625,0.962924242019653,0.77960216999054,0.949993908405304,0.757391214370728,0.965595066547394,0.723275065422058,0.980955839157104,0.748511075973511,0.914785861968994,0.748405992984772,0.922369301319122,0.70752739906311,0.874101638793945,0.749886751174927,0.874179005622864,0.705647528171539,0.860993087291718,0.757528722286224,0.852430284023285,0.768627166748047, 0.816710710525513,0.759240210056305,0.842012763023376,0.716259956359863,0.696999788284302,0.75558340549469,0.696700930595398,0.745804488658905,0.70233291387558,0.748275458812714,0.702526092529297,0.752617657184601,0.659128248691559,0.741716086864471,0.658288717269897,0.751508712768555,0.59796154499054,0.750236332416534,0.610091209411621,0.743652641773224,0.608343064785004,0.751880466938019,0.979458749294281,0.793045699596405,0.968548834323883,0.817886829376221,0.953360199928284,0.807567179203033,0.9636549949646,0.785472214221954,0.928289711475372,0.799840331077576,0.945137441158295,0.766707062721252,0.960381805896759,0.783798396587372,0.951241195201874,0.806293308734894,0.902519226074219,0.793310821056366,0.912586629390717,0.75935572385788,0.872626006603241,0.789839148521423,0.875555455684662,0.760272264480591,0.844584107398987,0.790851652622223,0.814127027988434,0.792667746543884,0.722595036029816,0.783650159835815,0.721251904964447,0.7570441365242,0.747765779495239,0.756638705730438,0.747598946094513,0.783844351768494,0.662238359451294,0.775566875934601,0.700886368751526,0.778040051460266,0.622018814086914,0.775807023048401,0.5828857421875,0.782757520675659,0.593731284141541,0.781696736812592,0.958042323589325,0.864149153232574,0.938332736492157,0.855390906333923,0.914787471294403,0.846938848495483,0.936013460159302,0.854428946971893,0.88916677236557,0.841023087501526,0.863319635391235,0.837245941162109,0.839172840118408,0.836811423301697,0.814070165157318,0.837626516819,0.723527014255524,0.845803678035736,0.746576488018036,0.83808308839798,0.701928019523621,0.849599540233612,0.667060196399689,0.856489539146423,0.622139990329742,0.864301979541779,0.956944346427917,0.904461681842804,0.930144906044006,0.901642203330994,0.905081808567047,0.897803664207459,0.92769980430603,0.901089906692505,0.855436563491821,0.887082457542419,0.879888892173767,0.892749130725861,0.721105515956879,0.887886762619019,0.747734069824219,0.886404514312744,0.590227127075195,0.912173628807068,0.58120334148407,0.873407423496246,0.591059923171997, 0.871184110641479,0.599499106407166,0.909839868545532,0.53283417224884,0.888436198234558,0.545468926429749,0.924623310565948,0.928038597106934,0.92723673582077,0.919401347637177,0.928494036197662,0.911965608596802,0.927071809768677,0.8411705493927,0.91432511806488,0.839885771274567,0.884023904800415,0.855204880237579,0.918137073516846,0.805472016334534,0.885900259017944,0.810506522655487,0.907216966152191,0.786990761756897,0.911134839057922,0.784278154373169,0.889633059501648,0.754331827163696,0.914627850055695,0.757266044616699,0.890431642532349,0.752873480319977,0.885957837104797,0.748047888278961,0.920124113559723,0.743812024593353,0.919456720352173,0.697784781455994,0.91612309217453,0.692996799945831,0.915664434432983,0.697978973388672,0.891373991966248,0.703138053417206,0.890644550323486,0.607272386550903,0.926002025604248,0.597327530384064,0.92849737405777,0.554639637470245,0.939524233341217,0.84720367193222,0.948805689811707,0.857014954090118,0.949699342250824,0.85656601190567,0.952093958854675,0.83780038356781,0.914385616779327,0.843403398990631,0.9481480717659,0.826265871524811,0.945752739906311,0.818026065826416,0.910330176353455,0.800329089164734,0.940913677215576,0.796075761318207,0.917731940746307,0.810570001602173,0.913784146308899,0.818439841270447,0.945839941501617,0.772705137729645,0.943609595298767,0.772796928882599,0.920200526714325,0.733815371990204,0.951030015945435,0.743687391281128,0.951412081718445,0.686730980873108,0.945417702198029,0.690551578998566,0.946158289909363,0.614597856998444,0.946634948253632,0.605405926704407,0.948451697826386,0.56790828704834,0.949979901313782,0.846090734004974,0.967219769954681,0.834671497344971,0.969899237155914,0.821291983127594,0.96882438659668,0.802547693252563,0.969622671604156,0.772225499153137,0.970632076263428,0.742458403110504,0.979333281517029,0.728184342384338,0.979067385196686,0.706898987293243,0.946524679660797,0.702010989189148,0.976432800292969,0.676282286643982,0.97430557012558,0.843104183673859,0.835981547832489,0.850123047828674,0.790330767631531, 0.714633941650391,0.916672646999359,0.87832248210907,0.923782408237457,0.869141280651093,0.930011391639709,0.861299216747284,0.939768671989441,0.88443124294281,0.92405891418457,0.80283910036087,0.838179171085358,0.804360568523407,0.879380822181702,0.785490810871124,0.879009902477264,0.784951090812683,0.834540486335754,0.759883224964142,0.881003975868225,0.760304510593414,0.833868503570557,0.751171052455902,0.835601270198822,0.623680114746094,0.90416556596756,0.66352790594101,0.896248459815979,0.991699695587158,0.804220795631409,0.980861306190491,0.795207023620605,0.99001407623291,0.771614015102386,0.997049868106842,0.769038796424866,0.98952305316925,0.740577161312103,0.983420312404633,0.746647953987122,0.968859374523163,0.718933999538422,0.973770141601563,0.706699192523956,0.926356613636017,0.68611067533493,0.92286878824234,0.69938850402832,0.873421847820282,0.696063876152039,0.871980309486389,0.683473169803619,0.799224972724915,0.747927486896515,0.825883984565735,0.69929438829422,0.836093366146088,0.707792222499847,0.80509227514267,0.761359632015228,0.702183187007904,0.683316171169281,0.739885985851288,0.714781820774078,0.729964196681976,0.721043586730957,0.699228703975677,0.694736897945404,0.64315938949585,0.682703614234924,0.643353521823883,0.699863910675049,0.582318246364594,0.691965162754059,0.587201416492462,0.702041983604431,0.54526275396347,0.716142952442169,0.536687135696411,0.709191024303436,0.506671071052551,0.775830507278442,0.510782361030579,0.742899596691132,0.523289203643799,0.742866635322571,0.521620154380798,0.770853757858276,0.985008478164673,0.831002771854401,0.97041267156601,0.820374429225922,0.505986571311951,0.810575127601624,0.523807406425476,0.802962899208069,0.976462006568909,0.870509445667267,0.961232423782349,0.865220189094543,0.507749319076538,0.855365335941315,0.526778936386108,0.890401601791382,0.510290503501892,0.891863584518433,0.521571457386017,0.948527753353119,0.539210200309753,0.926765978336334,0.548421263694763,0.941731214523315,0.56076455116272,0.951485931873322,0.548853397369385, 0.974531888961792,0.948005080223084,0.976982235908508,0.959995448589325,0.981740713119507,0.955170869827271,0.985300362110138,0.937941253185272,0.979955852031708,0.84472119808197,0.976734578609467,0.835827767848969,0.978018224239349,0.834802508354187,0.97110652923584,0.846115171909332,0.968703329563141,0.824860036373138,0.979040622711182,0.802889287471771,0.977697193622589,0.802449584007263,0.973948180675507,0.825451493263245,0.97368186712265,0.770779967308044,0.980522572994232,0.771402478218079,0.975795924663544,0.727461934089661,0.985632479190826,0.728103816509247,0.981003701686859,0.742532432079315,0.981435716152191,0.743101060390472,0.985486090183258,0.698162794113159,0.98496550321579,0.702857375144959,0.978604018688202,0.678768694400787,0.98471212387085,0.675221383571625,0.977133393287659,0.827752590179443,0.658338189125061,0.809401988983154,0.637353897094727,0.819015264511108,0.63715934753418,0.767367482185364,0.748389542102814,0.756227314472198,0.75702315568924,0.734151840209961,0.724401891231537,0.987281739711761,0.770652055740356,0.729363739490509,0.727159678936005,0.726072907447815,0.724873721599579,0.644391536712646,0.704745411872864,0.698012173175812,0.70299768447876,0.589777767658234,0.70672082901001,0.547529876232147,0.719323098659515,0.527006328105927,0.74506402015686,0.527126312255859,0.769016146659851,0.809787273406982,0.79247784614563,0.528486251831055,0.800773918628693,0.810491025447845,0.837141692638397,0.959954619407654,0.904387176036835,0.960464477539063,0.930835783481598,0.959559559822083,0.923030853271484,0.962943434715271,0.922896981239319,0.963641405105591,0.930680453777313,0.962415635585785,0.940131962299347,0.96541428565979,0.939516067504883,0.967234432697296,0.947863519191742,0.961081087589264,0.947462022304535,0.955077946186066,0.959468722343445,0.962148308753967,0.959572613239288,0.945280969142914,0.967685520648956,0.826035678386688,0.972375631332397,0.802241563796997,0.972364962100983,0.772090673446655,0.973723471164703,0.606870353221893,0.970503687858582,0.577414393424988,0.962452411651611, 0.584109723567963,0.959284245967865,0.610503733158112,0.966044962406158,0.752776801586151,0.783937513828278,0.97284322977066,0.903694450855255,0.83642989397049,0.883379817008972,0.812006711959839,0.881283640861511,0.79944634437561,0.770426750183105,0.801123082637787,0.795152366161346,0.783421516418457,0.788759529590607,0.781058609485626,0.769542336463928,0.779306173324585,0.762691497802734,0.777457356452942,0.753912031650543,0.859588027000427,0.766505897045136,0.809267222881317,0.881307244300842,0.814640700817108,0.910426020622253,0.823911964893341,0.94536566734314,0.760761618614197,0.782842814922333,0.622012615203857,0.946519374847412,0.62568598985672,0.922127306461334,0.662560224533081,0.917056739330292,0.658109307289124,0.946058750152588,0.752536654472351,0.950371503829956,0.752145051956177,0.924319505691528,0.749446332454681,0.974606215953827,0.786311864852905,0.915637910366058,0.784629583358765,0.884476542472839,0.761136293411255,0.762553870677948,0.972319483757019,0.948690474033356,0.938794732093811,0.955914080142975,0.93639874458313,0.943971753120422,0.851434469223022,0.961410641670227,0.93128776550293,0.925728023052216,0.932799100875854,0.931772172451019,0.929566621780396,0.932460069656372,0.934056401252747,0.956389546394348,0.932711660861969,0.944579482078552,0.933368384838104,0.975322961807251,0.93656849861145,0.970388472080231,0.707504570484161,0.848232924938202,0.707789778709412,0.778369247913361,0.644948422908783,0.971593737602234,0.642966687679291,0.974884152412415,0.571886897087097,0.751526594161987,0.929116904735565,0.955903053283691,0.927943348884583,0.945056438446045,0.929023921489716,0.957778215408325,0.928265154361725,0.956891775131226,0.928892970085144,0.968639135360718,0.865947604179382,0.992134511470795,0.85860276222229,0.989174783229828,0.869196057319641,0.983670055866241,0.872607886791229,0.984687983989716,0.911827504634857,0.977557897567749,0.925716817378998,0.980969071388245,0.922372579574585,0.985751211643219,0.909725069999695,0.979730665683746,0.875591933727264,0.963677108287811,0.872271716594696, 0.963672995567322,0.8745077252388,0.954821050167084,0.877917945384979,0.954623937606812,0.889298677444458,0.980566084384918,0.876304090023041,0.978988885879517,0.876695454120636,0.978424549102783,0.889408528804779,0.979947090148926,0.915809392929077,0.950026452541351,0.918476521968842,0.956449389457703,0.913126826286316,0.955990016460419,0.912626624107361,0.950347721576691,0.891805827617645,0.980216085910797,0.891353845596313,0.981016099452972,0.908523142337799,0.956842720508575,0.908663690090179,0.955544769763947,0.913820445537567,0.957346439361572,0.87443882226944,0.953377544879913,0.87511545419693,0.952095985412598,0.878491878509521,0.952280282974243,0.879153490066528,0.953439056873322,0.86951345205307,0.954400479793549,0.86354261636734,0.954115927219391,0.864096462726593,0.952481806278229,0.869245409965515,0.952904105186462,0.859376847743988,0.951399564743042,0.891634881496429,0.983721435070038,0.894321322441101,0.985658705234528,0.887863576412201,0.986636221408844,0.888684630393982,0.98339581489563,0.874538362026215,0.981627643108368,0.911714851856232,0.967783987522125,0.912947714328766,0.958617210388184,0.918924987316132,0.959025263786316,0.917912781238556,0.968445897102356,0.870684802532196,0.951642692089081,0.873340249061584,0.945375859737396,0.877603650093079,0.94629168510437,0.881140053272247,0.946264147758484,0.904984295368195,0.948922514915466,0.904121458530426,0.954948246479034,0.906565964221954,0.940417587757111,0.909961640834808,0.941846609115601,0.90966522693634,0.943461716175079,0.906036555767059,0.942564487457275,0.911554157733917,0.943352282047272,0.911072731018066,0.944236576557159,0.861642003059387,0.964131832122803,0.886469304561615,0.994588911533356,0.884402632713318,0.93780928850174,0.880641639232636,0.937644898891449,0.900622844696045,0.966309309005737,0.903356075286865,0.957237064838409,0.876224100589752,0.938461005687714,0.869780600070953,0.944147706031799,0.865347683429718,0.950913488864899,0.866810142993927,0.964017808437347,0.874639332294464,0.9790118932724,0.874954462051392,0.978221297264099, 0.873594999313354,0.970515310764313,0.873027741909027,0.971764385700226,0.87070220708847,0.971325933933258,0.871087610721588,0.970386445522308,0.897548079490662,0.974577784538269,0.89794647693634,0.973275780677795,0.905479252338409,0.977365791797638,0.906866788864136,0.976070463657379,0.90162056684494,0.974805116653442,0.901913702487946,0.973809242248535,0.905340373516083,0.967052698135376,0.907731890678406,0.958188593387604,0.909309983253479,0.949803590774536,0.897543489933014,0.99356484413147,0.919452905654907,0.957709312438965,0.902914643287659,0.955895602703094,0.872244656085968,0.981327176094055,0.865906894207001,0.971629559993744,0.866089344024658,0.972876131534576,0.861398577690125,0.973709285259247,0.861189246177673,0.972358644008636,0.880471706390381,0.940044939517975,0.878859579563141,0.940501153469086,0.883696675300598,0.939865410327911,0.924288809299469,0.934130668640137,0.91816633939743,0.988901853561401,0.905118227005005,0.981292128562927,0.901990115642548,0.979376912117004,0.898532092571259,0.976799368858337,0.894747376441956,0.97628378868103,0.874449670314789,0.973942637443542,0.87183803319931,0.973663449287415,0.867119431495667,0.975175082683563,0.862630069255829,0.976487934589386,0.851557850837708,0.978592693805695,0.971357524394989,0.930995941162109,0.972992241382599,0.923327505588531,0.669770956039429,0.983754694461823,0.637604236602783,0.980975389480591,0.973452031612396,0.963023960590363,0.50477147102356,0.341941267251968,0.504926383495331,0.364262729883194,0.504570424556732,0.27126669883728,0.505045890808105,0.175514489412308,0.506790995597839,0.131406292319298,0.606821179389954,0.528921484947205,0.578920364379883,0.528457880020142,0.732828497886658,0.519209682941437,0.698805451393127,0.517327785491943,0.742725372314453,0.620903491973877,0.774498343467712,0.621332168579102,0.728495359420776,0.621059775352478,0.700523972511292,0.620459794998169,0.609590113162994,0.623790144920349,0.57987916469574,0.624690651893616,0.622773885726929,0.622747659683228,0.64507794380188,0.621444761753082,0.660955905914307, 0.621363580226898,0.682616829872131,0.620572566986084,0.641780078411102,0.524502575397491,0.620886087417603,0.526424646377563,0.778743863105774,0.518674969673157,0.747469186782837,0.520185828208923,0.536966800689697,0.528423070907593,0.528635740280151,0.620587050914764,0.561849236488342,0.531970143318176,0.559461057186127,0.622783303260803,0.680185258388519,0.522322714328766,0.659385919570923,0.522144198417664,0.764347016811371,0.0139534035697579,0.798460125923157,0.0144205940887332,0.798460125923157,0.0144205940887332,0.825079143047333,0.0138847967609763,0.825079143047333,0.0138847967609763,0.846264898777008,0.0140065373852849,0.846264898777008,0.0140065373852849,0.876899540424347,0.0136730512604117,0.933364808559418,0.0129347164183855,0.876899540424347,0.0136730512604117,0.992930173873901,0.013055038638413,0.933364808559418,0.0129347164183855,0.506721436977386,0.0112402448430657,0.551683366298676,0.0116824097931385,0.597010612487793,0.0120052164420486,0.551683366298676,0.0116824097931385,0.637817025184631,0.0132070509716868,0.66240006685257,0.0133794993162155,0.66240006685257,0.0133794993162155,0.686745762825012,0.0137255787849426,0.686745762825012,0.0137255787849426,0.70745187997818,0.013765212148428,0.747531235218048,0.0137583306059241,0.198819264769554,0.513396501541138,0.792146503925323,0.672703087329865,0.297598481178284,0.017733646556735,0.70745187997818,0.013765212148428,0.637817025184631,0.0132070509716868,0.616867423057556,0.302056461572647,0.607167363166809,0.330519944429398,0.598722219467163,0.35757651925087,0.61173814535141,0.0680804252624512,0.617708146572113,0.0677934214472771,0.622845113277435,0.0883994549512863,0.617439150810242,0.0909484550356865,0.635477185249329,0.105470463633537,0.631459176540375,0.109894447028637,0.653680205345154,0.116408467292786,0.651661217212677,0.122033476829529,0.674683213233948,0.119547456502914,0.674970209598541,0.12551648914814,0.695289194583893,0.114409446716309,0.697839200496674,0.119815461337566,0.712360143661499,0.101777456700802,0.716784179210663,0.105796456336975, 0.723298192024231,0.0835744366049767,0.728923141956329,0.0855934470891953,0.726437151432037,0.0625714212656021,0.73240715265274,0.0622844286262989,0.721299171447754,0.0419654361903667,0.726705133914948,0.0394154340028763,0.708667159080505,0.0248944368213415,0.71268618106842,0.0204704366624355,0.690464198589325,0.013956437818706,0.692484200000763,0.00833143852651119,0.669461250305176,0.0108174383640289,0.669174194335938,0.00484743807464838,0.648855209350586,0.015955438837409,0.646306216716766,0.0105494372546673,0.63178414106369,0.0285874344408512,0.627360165119171,0.0245684366673231,0.620847105979919,0.0467904359102249,0.61522114276886,0.0447704344987869,0.672072231769562,0.0651824250817299,0.269825220108032,0.258602470159531,0.329365611076355,0.258403688669205,0.310402929782867,0.278071969747543,0.269501030445099,0.278296023607254,0.360486537218094,0.24514938890934,0.333637744188309,0.279441624879837,0.333006888628006,0.258855253458023,0.341271728277206,0.24008783698082,0.359304547309875,0.206081718206406,0.360760509967804,0.242564037442207,0.341860055923462,0.236002966761589,0.344761550426483,0.209881618618965,0.358369827270508,0.202939063310623,0.343860447406769,0.206181675195694,0.344476044178009,0.152220010757446,0.360365152359009,0.149720817804337,0.270022839307785,0.0888120010495186,0.319689333438873,0.0896416157484055,0.305317103862762,0.0952133610844612,0.269594937562943,0.0952558740973473,0.314918488264084,0.278250068426132,0.302259236574173,0.305387169122696,0.294940710067749,0.294961869716644,0.31338906288147,0.200073331594467,0.340746730566025,0.208377510309219,0.337681800127029,0.216148480772972,0.293541729450226,0.213663130998611,0.341254591941834,0.153309300541878,0.326921254396439,0.183026015758514,0.329674541950226,0.159735947847366,0.269777178764343,0.308322995901108,0.269305676221848,0.296346455812454,0.29243677854538,0.296077579259872,0.348819881677628,0.113969303667545,0.335110366344452,0.118613757193089,0.308442711830139,0.0966737940907478,0.292685657739639,0.292649954557419,0.269282728433609, 0.292957901954651,0.269526928663254,0.0986065044999123,0.305247694253922,0.0984755083918571,0.291696399450302,0.108034446835518,0.269208788871765,0.103680700063705,0.321754962205887,0.160218551754951,0.319293439388275,0.180811822414398,0.307671755552292,0.196480244398117,0.290694743394852,0.208570554852486,0.270269960165024,0.21808697283268,0.270127564668655,0.212060213088989,0.269082397222519,0.110393449664116,0.288501411676407,0.114097990095615,0.310768157243729,0.120261490345001,0.30537822842598,0.124576173722744,0.324008196592331,0.138784170150757,0.316894322633743,0.14148673415184,0.331923007965088,0.254439443349838,0.270088255405426,0.237941399216652,0.333256840705872,0.237882807850838,0.339409619569778,0.237667933106422,0.332173645496368,0.120569430291653,0.484934985637665,0.805715024471283,0.484769999980927,0.835003972053528,0.467160999774933,0.830276012420654,0.467061012983322,0.805715024471283,0.468493014574051,0.799733996391296,0.484358996152878,0.798987984657288,0.475012004375458,0.788990020751953,0.484777987003326,0.788465023040771,0.227663725614548,0.278071969747543,0.208459824323654,0.258462280035019,0.176533356308937,0.245206862688065,0.196333214640617,0.240146428346634,0.20470067858696,0.258913844823837,0.204380869865417,0.279500216245651,0.178766444325447,0.206139162182808,0.193297833204269,0.209940209984779,0.195774376392365,0.236061558127403,0.176260471343994,0.242622643709183,0.19321645796299,0.152278602123261,0.194253295660019,0.206240281462669,0.179747804999352,0.202996507287025,0.177544012665749,0.149778261780739,0.233181074261665,0.0952133610844612,0.219627097249031,0.0896990671753883,0.223160177469254,0.278308659791946,0.24337700009346,0.295020461082459,0.236615136265755,0.305444628000259,0.223631471395493,0.201741874217987,0.246551603078842,0.213663130998611,0.199524074792862,0.21848526597023,0.197430416941643,0.208434969186783,0.212232634425163,0.183084636926651,0.196476832032204,0.15336674451828,0.208709701895714,0.159794539213181,0.245924562215805,0.296135038137436,0.189350441098213,0.114026740193367, 0.202657148241997,0.118671201169491,0.230083256959915,0.0967323929071426,0.245539277791977,0.292649954557419,0.247187912464142,0.108091913163662,0.233115792274475,0.0984755083918571,0.21600416302681,0.160694256424904,0.218958899378777,0.18081296980381,0.228576332330704,0.197840854525566,0.249036073684692,0.208212047815323,0.250610828399658,0.113881967961788,0.233785375952721,0.124765768647194,0.227820307016373,0.120320081710815,0.221071794629097,0.141767099499702,0.214344128966331,0.138841614127159,0.205876231193542,0.254498064517975,0.204754158854485,0.237941399216652,0.198301210999489,0.237726539373398,0.205599397420883,0.120626896619797,0.501042008399963,0.805715024471283,0.500716984272003,0.830276012420654,0.500114023685455,0.799920976161957,0.49507999420166,0.788990020751953,0.272641986608505,0.878413021564484,0.219694003462791,0.893559992313385,0.215890005230904,0.864979028701782,0.26672500371933,0.861940979957581,0.36005300283432,0.831279993057251,0.323861986398697,0.868165016174316,0.313807010650635,0.852500975131989,0.345349013805389,0.819567978382111,0.346505999565125,0.773554027080536,0.362686008214951,0.783275008201599,0.352726995944977,0.80322802066803,0.337262004613876,0.793112993240356,0.365788996219635,0.72697901725769,0.382417917251587,0.734631955623627,0.386779993772507,0.734983026981354,0.408674001693726,0.739908993244171,0.397778004407883,0.7656369805336,0.379215002059937,0.762326002120972,0.458209007978439,0.771335005760193,0.432074010372162,0.771174013614655,0.431704014539719,0.743416011333466,0.458195000886917,0.743381023406982,0.258278995752335,0.850962996482849,0.21730400621891,0.85106897354126,0.328954011201859,0.808028995990753,0.302017003297806,0.839195013046265,0.29305100440979,0.829590022563934,0.312034010887146,0.796854972839355,0.320793986320496,0.75721400976181,0.328090012073517,0.761949002742767,0.307480990886688,0.793121993541718,0.396843999624252,0.709070026874542,0.421846002340317,0.70286101102829,0.431190013885498,0.708854019641876,0.458195000886917,0.708478987216949,0.167339995503426, 0.846764028072357,0.177104994654655,0.833893001079559,0.292160987854004,0.784012019634247,0.274785995483398,0.808974027633667,0.271382987499237,0.806128025054932,0.288760006427765,0.783194005489349,0.431075006723404,0.682793021202087,0.458195000886917,0.681955993175507,0.309408009052277,0.666902005672455,0.299320995807648,0.644894003868103,0.316092014312744,0.64445698261261,0.315569013357162,0.666703999042511,0.166759610176086,0.760083615779877,0.170977577567101,0.766482412815094,0.166513189673424,0.767889678478241,0.159690380096436,0.762228965759277,0.262028008699417,0.602081000804901,0.258962005376816,0.60556298494339,0.231751993298531,0.600606024265289,0.232749998569489,0.597437977790833,0.335444003343582,0.60359799861908,0.319774001836777,0.640094995498657,0.324335992336273,0.59680300951004,0.332049012184143,0.570791006088257,0.115887001156807,0.690171003341675,0.111397996544838,0.625218987464905,0.123023003339767,0.631851017475128,0.130906000733376,0.678735017776489,0.133551001548767,0.609892010688782,0.130597993731499,0.581870019435883,0.146353006362915,0.578674972057343,0.146359995007515,0.626954972743988,0.198513999581337,0.585391998291016,0.169614002108574,0.602639019489288,0.169058993458748,0.571319997310638,0.198127999901772,0.564855992794037,0.297848999500275,0.593078970909119,0.273966014385223,0.589892029762268,0.273128986358643,0.564604997634888,0.301153004169464,0.566407024860382,0.415556013584137,0.640332996845245,0.399659007787704,0.598308980464935,0.429075002670288,0.55900901556015,0.458195000886917,0.594125986099243,0.458195000886917,0.557412981987,0.440378993749619,0.55054497718811,0.108698002994061,0.591275990009308,0.103394001722336,0.573260009288788,0.128950998187065,0.556268990039825,0.147264003753662,0.547288000583649,0.170497998595238,0.541939973831177,0.199783995747566,0.537392973899841,0.237151995301247,0.562339007854462,0.23717600107193,0.536078989505768,0.272666990756989,0.535086989402771,0.306681007146835,0.53659999370575,0.32956600189209,0.565860986709595,0.339347988367081,0.534398972988129, 0.0984259992837906,0.554760992527008,0.126690998673439,0.533806025981903,0.147599995136261,0.52004200220108,0.172526001930237,0.512657999992371,0.20058499276638,0.505468010902405,0.235266998410225,0.501671016216278,0.272742003202438,0.502871990203857,0.410659998655319,0.528959989547729,0.392268985509872,0.49720299243927,0.403151988983154,0.48478901386261,0.421930998563766,0.521111011505127,0.125440999865532,0.523380994796753,0.149358004331589,0.497492998838425,0.174438998103142,0.487843990325928,0.201315999031067,0.480848997831345,0.232965007424355,0.47435000538826,0.268784999847412,0.469707995653152,0.310054004192352,0.498773992061615,0.308376997709274,0.463578999042511,0.322703003883362,0.497072011232376,0.334643989801407,0.460646986961365,0.352411985397339,0.495633006095886,0.363413006067276,0.459349006414413,0.17306199669838,0.458532005548477,0.200545996427536,0.45414000749588,0.229930996894836,0.449521005153656,0.263911992311478,0.444195002317429,0.305649012327194,0.437321990728378,0.339392989873886,0.431782007217407,0.370368003845215,0.428167998790741,0.171368002891541,0.455821007490158,0.148873001337051,0.44701099395752,0.207519993185997,0.438991010189056,0.201129004359245,0.450747013092041,0.227717995643616,0.446734011173248,0.262528985738754,0.430810004472733,0.263404995203018,0.440622001886368,0.304567992687225,0.424351006746292,0.305465012788773,0.433854997158051,0.339441001415253,0.428714990615845,0.338530004024506,0.41957500576973,0.353704988956451,0.564556002616882,0.34264200925827,0.537086009979248,0.373852014541626,0.526794016361237,0.357212007045746,0.498683005571365,0.338728010654449,0.640583992004395,0.319563001394272,0.675644993782043,0.363103985786438,0.597720980644226,0.387730002403259,0.562883019447327,0.372424006462097,0.468032985925674,0.345806002616882,0.676935017108917,0.324232995510101,0.709711015224457,0.373854011297226,0.634223997592926,0.359154999256134,0.688787996768951,0.392167985439301,0.67576402425766,0.378917008638382,0.700811982154846,0.346769988536835,0.710250973701477,0.329800993204117, 0.727285981178284,0.218623995780945,0.840354979038239,0.184506997466087,0.825717985630035,0.298384010791779,0.754288017749786,0.318509995937347,0.738767981529236,0.318542987108231,0.743930995464325,0.302536010742188,0.754818975925446,0.404145985841751,0.90326601266861,0.400438010692596,0.926931023597717,0.38679701089859,0.906794011592865,0.39511901140213,0.898787975311279,0.40522700548172,0.766766011714935,0.41575899720192,0.741151988506317,0.424501985311508,0.709275007247925,0.386308997869492,0.451469987630844,0.425071001052856,0.858915984630585,0.420675992965698,0.850754022598267,0.457744002342224,0.900155007839203,0.409606009721756,0.900629997253418,0.426223009824753,0.862276971340179,0.458270013332367,0.862285017967224,0.423615992069244,0.51911598443985,0.428185999393463,0.509271025657654,0.441130995750427,0.532559990882874,0.441738992929459,0.547689020633698,0.404498010873795,0.482459992170334,0.387834012508392,0.449631989002228,0.392446011304855,0.445977002382278,0.408724009990692,0.474388986825943,0.373026013374329,0.425159007310867,0.37526398897171,0.416377007961273,0.141341000795364,0.774600982666016,0.160116001963615,0.802811980247498,0.148980006575584,0.808685004711151,0.122552998363972,0.762337982654572,0.183020994067192,0.795611977577209,0.179042994976044,0.796811997890472,0.458195000886917,0.536643981933594,0.458195000886917,0.5536749958992,0.148812994360924,0.462884992361069,0.190503001213074,0.619572997093201,0.187272995710373,0.616017997264862,0.204796999692917,0.600342988967896,0.207524999976158,0.604928016662598,0.246066004037857,0.822817981243134,0.24736699461937,0.826631009578705,0.23725900053978,0.584398984909058,0.45813000202179,0.858519017696381,0.0562959983944893,0.569844007492065,0.0678580030798912,0.58209902048111,0.0567619986832142,0.580150008201599,0.0553640015423298,0.570568978786469,0.0851169973611832,0.708274006843567,0.0769660025835037,0.61565899848938,0.0942320004105568,0.619617998600006,0.102512001991272,0.698101997375488,0.124705001711845,0.812853991985321,0.109916999936104,0.762027025222778, 0.139332994818687,0.811179995536804,0.155891999602318,0.861868977546692,0.436756014823914,0.972941994667053,0.376147985458374,0.972584009170532,0.376067012548447,0.966804027557373,0.437252998352051,0.966706991195679,0.159198001027107,0.916212022304535,0.0911530032753944,0.924272000789642,0.0872069969773293,0.89299201965332,0.15072700381279,0.891390979290009,0.195803001523018,0.810199022293091,0.219395995140076,0.822587013244629,0.220719993114471,0.826704978942871,0.193678006529808,0.813924014568329,0.458195000886917,0.644798994064331,0.0895140022039413,0.53720098733902,0.0858500003814697,0.527424991130829,0.112908996641636,0.494596004486084,0.119028002023697,0.503176987171173,0.115051001310349,0.491847008466721,0.144936665892601,0.762824952602386,0.129616007208824,0.755380988121033,0.127514004707336,0.738997995853424,0.14410799741745,0.717846989631653,0.12015800178051,0.738192975521088,0.108566999435425,0.749953985214233,0.0542269982397556,0.552263021469116,0.054992999881506,0.566931009292603,0.120191000401974,0.506099998950958,0.0907879993319511,0.540031015872955,0.110666997730732,0.599494993686676,0.073744997382164,0.597088992595673,0.0940330028533936,0.598487973213196,0.254783004522324,0.972631990909576,0.176053002476692,0.972665011882782,0.176321998238564,0.966881990432739,0.254170000553131,0.966934025287628,0.0959120020270348,0.972640991210938,0.0968549996614456,0.967027008533478,0.0165710002183914,0.972878992557526,0.0169270001351833,0.967278003692627,0.330462992191315,0.764739990234375,0.350472986698151,0.714016973972321,0.321808993816376,0.782814979553223,0.366793006658554,0.786194026470184,0.384418994188309,0.794672012329102,0.254873007535934,0.841089010238647,0.286646991968155,0.822107970714569,0.333669990301132,0.746819019317627,0.333050012588501,0.740078985691071,0.373975992202759,0.766937971115112,0.376441985368729,0.765106022357941,0.310523986816406,0.972755014896393,0.310023993253708,0.966669023036957,0.136711001396179,0.719390988349915,0.140893995761871,0.672415971755981,0.166997417807579,0.709646284580231, 0.157439410686493,0.711707234382629,0.15920852124691,0.7024787068367,0.164345517754555,0.701387703418732,0.281504988670349,0.894393026828766,0.226429998874664,0.909712970256805,0.0819680020213127,0.876720011234283,0.1475919932127,0.878561019897461,0.488548994064331,0.418525993824005,0.488519012928009,0.499594002962112,0.477136999368668,0.499971985816956,0.47359699010849,0.420852988958359,0.464484006166458,0.501057028770447,0.456420004367828,0.416399002075195,0.453871011734009,0.500432014465332,0.445293009281158,0.432972997426987,0.112501002848148,0.81351900100708,0.130951002240181,0.849200010299683,0.0763999968767166,0.84418797492981,0.068791002035141,0.815959990024567,0.0940369963645935,0.76425701379776,0.0622050017118454,0.775556981563568,0.0592270009219646,0.715499997138977,0.0930640026926994,0.759845018386841,0.0618599988520145,0.771224975585938,0.0551129989326,0.614924013614655,0.0561060011386871,0.595951020717621,0.500213027000427,0.989740014076233,0.437171012163162,0.989845991134644,0.437023997306824,0.977728009223938,0.500168979167938,0.977612972259521,0.376336008310318,0.977747976779938,0.376578003168106,0.989381015300751,0.310853004455566,0.977522015571594,0.310743004083633,0.989274024963379,0.25483500957489,0.989180028438568,0.17577700316906,0.989646017551422,0.175933003425598,0.977365016937256,0.254406988620758,0.977720022201538,0.0950829982757568,0.989468991756439,0.0958430022001266,0.977980971336365,0.0117199998348951,0.98990398645401,0.01314099971205,0.977365016937256,0.254056006669998,0.963672995567322,0.254352003335953,0.955545008182526,0.30995699763298,0.955407977104187,0.310088992118835,0.96340000629425,0.176041007041931,0.963557004928589,0.0965140014886856,0.964006006717682,0.0969469994306564,0.955706000328064,0.176431998610497,0.955609977245331,0.0130190001800656,0.963550984859467,0.0132919996976852,0.955443024635315,0.500168979167938,0.963267028331757,0.436865985393524,0.963360011577606,0.437193989753723,0.955549001693726,0.500168979167938,0.955354988574982,0.376253008842468,0.963590979576111, 0.376287996768951,0.955453991889954,0.500213027000427,0.966681003570557,0.441388010978699,0.496190994977951,0.436636000871658,0.445697009563446,0.427020996809006,0.446664988994598,0.430680990219116,0.488754987716675,0.419642001390457,0.472835004329681,0.417097002267838,0.433174908161163,0.407187014818192,0.442891985177994,0.408639013767242,0.424998998641968,0.295285999774933,0.786273002624512,0.299769014120102,0.78786700963974,0.279451012611389,0.815352022647858,0.277547001838684,0.81189501285553,0.251581996679306,0.834281027317047,0.249133005738258,0.830129981040955,0.189594998955727,0.819545984268188,0.171225994825363,0.799534976482391,0.174952998757362,0.798758983612061,0.191754996776581,0.816707015037537,0.156134992837906,0.770179986953735,0.16188357770443,0.76932966709137,0.153468102216721,0.763601660728455,0.152793422341347,0.712794244289398,0.151862993836403,0.703840970993042,0.155275002121925,0.702957987785339,0.168501004576683,0.638185977935791,0.163996994495392,0.636627018451691,0.178775995969772,0.60945600271225,0.1822399944067,0.613025009632111,0.200102999806404,0.593298971652985,0.202638000249863,0.597171008586884,0.234945997595787,0.591051995754242,0.233625993132591,0.594336986541748,0.288112998008728,0.598491013050079,0.282727003097534,0.603413999080658,0.264315992593765,0.599366009235382,0.267203986644745,0.595969974994659,0.307411998510361,0.755308985710144,0.312451004981995,0.755973994731903,0.220320001244545,0.829182028770447,0.165601223707199,0.667646884918213,0.170481234788895,0.669403910636902,0.187141999602318,0.793888986110687,0.198522999882698,0.807098984718323,0.220145002007484,0.818933010101318,0.245738998055458,0.818468987941742,0.26969900727272,0.801769018173218,0.284658014774323,0.781175017356873,0.295148998498917,0.753009021282196,0.280393987894058,0.611178994178772,0.281369000673294,0.616028010845184,0.256761997938156,0.609390020370483,0.229582995176315,0.605320990085602,0.210482001304626,0.609511017799377,0.194749996066093,0.623915016651154,0.177227005362511,0.642521977424622,0.182273998856544, 0.644203007221222,0.176763579249382,0.765305697917938,0.315546989440918,0.757066011428833,0.303400993347168,0.790232002735138,0.198733001947403,0.589169979095459,0.1735779941082,0.605670988559723,0.166944995522499,0.800293028354645,0.188115999102592,0.821717977523804,0.153558999300003,0.633260011672974,0.159555003046989,0.63461697101593,0.235703006386757,0.588277995586395,0.291180014610291,0.595974981784821,0.270065993070602,0.592961013317108,0.146869763731956,0.771661221981049,0.151806101202965,0.77042829990387,0.252957999706268,0.836629986763,0.219729006290436,0.835605978965759,0.281648993492126,0.818123996257782,0.219692006707191,0.833097994327545,0.148984417319298,0.714872241020203,0.149779006838799,0.764018476009369,0.155294418334961,0.665466368198395,0.15033458173275,0.665108561515808,0.318626999855042,0.752687990665436,0.146153002977371,0.705610990524292,0.145228058099747,0.666229426860809,0.149073004722595,0.7049720287323,0.160449415445328,0.666324257850647,0.168287515640259,0.701085269451141,0.175300002098084,0.670719981193542,0.173347994685173,0.700775027275085,0.173566415905952,0.709012269973755,0.174024328589439,0.758220076560974,0.281569987535477,0.607277989387512,0.32082399725914,0.595690011978149,0.373421013355255,0.414938002824783,0.371152013540268,0.424212992191315,0.172447994351387,0.640107989311218,0.325669288635254,0.757380425930023,0.290122002363205,0.605423986911774,0.347425997257233,0.908514022827148,0.381213992834091,0.907666027545929,0.357816010713577,0.931234002113342,0.348170012235641,0.924889981746674,0.314047992229462,0.923050999641418,0.315667986869812,0.948840975761414,0.291552990674973,0.948552012443542,0.290435999631882,0.924041986465454,0.263837993144989,0.94931697845459,0.264072000980377,0.925316989421844,0.242920994758606,0.936951994895935,0.256186008453369,0.911698997020721,0.326350003480911,0.909779012203217,0.331923007965088,0.927223980426788,0.228900000452995,0.915530025959015,0.242537006735802,0.909489989280701,0.2291070073843,0.937894999980927,0.339758008718491,0.904264986515045, 0.36667200922966,0.931851029396057,0.148801997303963,0.459441006183624,0.321024000644684,0.712490975856781,0.316599994897842,0.682204008102417,0.326303005218506,0.729081988334656,0.329957991838455,0.742955029010773,0.31105300784111,0.68461000919342,0.241796046495438,0.741946458816528,0.241828054189682,0.748482763767242,0.264539062976837,0.748642921447754,0.264904052019119,0.734816491603851,0.316650986671448,0.714003026485443,0.322205007076263,0.729911029338837,0.211460992693901,0.922478020191193,0.212052002549171,0.917056977748871,0.458209991455078,0.774318993091583,0.432783007621765,0.773859977722168,0.392526000738144,0.767984986305237,0.378448992967606,0.765901982784271,0.40591499209404,0.769415020942688,0.397087007761002,0.768324017524719,0.26821506023407,0.633054912090302,0.240537270903587,0.631051182746887,0.240539222955704,0.638598680496216,0.268498063087463,0.640605032444,0.240503504872322,0.689072370529175,0.241114050149918,0.699390411376953,0.267317056655884,0.696879863739014,0.267333060503006,0.686107575893402,0.240524426102638,0.680072784423828,0.268376052379608,0.678691446781158,0.240540847182274,0.663301050662994,0.240529671311378,0.672472715377808,0.268860042095184,0.671839892864227,0.268585056066513,0.662031352519989,0.240543022751808,0.647561430931091,0.26851037144661,0.648855030536652,0.240544110536575,0.650043606758118,0.240542218089104,0.660674333572388,0.267221063375473,0.623207092285156,0.240531980991364,0.623375177383423,0.458151996135712,0.850461006164551,0.0227690003812313,0.925109028816223,0.0215419996529818,0.895259976387024,0.0205700006335974,0.877825021743774,0.0226789992302656,0.845354974269867,0.0213729999959469,0.815177977085114,0.0202799998223782,0.777090013027191,0.0202399995177984,0.772747993469238,0.0202580001205206,0.715767025947571,0.0206489991396666,0.614751994609833,0.0208320003002882,0.596014976501465,0.0209500007331371,0.58135199546814,0.0209449995309114,0.57184898853302,0.457747995853424,0.903846979141235,0.457751989364624,0.926847994327545,0.500213027000427,0.972721993923187, 0.0209899991750717,0.568412005901337,0.0214079990983009,0.55501800775528,0.266368061304092,0.789478898048401,0.267114043235779,0.780537068843842,0.243697047233582,0.779066503047943,0.244127050042152,0.788704216480255,0.267179042100906,0.796642899513245,0.244349047541618,0.796818971633911,0.266858041286469,0.773772239685059,0.243440046906471,0.772062659263611,0.26669704914093,0.769029438495636,0.242808043956757,0.767170190811157,0.264761060476303,0.754076480865479,0.242050051689148,0.754171013832092,0.242146864533424,0.759800732135773,0.265601068735123,0.759764552116394,0.216489791870117,0.939175128936768,0.209930285811424,0.939351797103882,0.241749048233032,0.749241769313812,0.267179042100906,0.615583539009094,0.240531399846077,0.615759491920471,0.240897044539452,0.712090134620667,0.240723043680191,0.727413475513458,0.646327972412109,0.88441801071167,0.654294013977051,0.867915987968445,0.699895024299622,0.867657005786896,0.698257029056549,0.887790024280548,0.550527989864349,0.831088006496429,0.567066013813019,0.820514023303986,0.602042973041534,0.858555018901825,0.586970984935761,0.868762016296387,0.565268993377686,0.773799002170563,0.573633015155792,0.791818976402283,0.560392022132874,0.799171984195709,0.55113297700882,0.779884994029999,0.532320976257324,0.734328985214233,0.546865999698639,0.727716028690338,0.527191996574402,0.734368979930878,0.535362005233765,0.763324022293091,0.518612027168274,0.765627980232239,0.507716000080109,0.73989999294281,0.484687000513077,0.743407011032104,0.484317004680634,0.771165013313293,0.658320009708405,0.853282988071442,0.698568999767303,0.852630019187927,0.586621999740601,0.80842798948288,0.598686993122101,0.799301028251648,0.623646020889282,0.832143008708954,0.613156020641327,0.841475009918213,0.591206014156342,0.762039005756378,0.606730997562408,0.795638024806976,0.583438992500305,0.765757977962494,0.518864989280701,0.708833992481232,0.494543999433517,0.702852010726929,0.485199987888336,0.708845019340515,0.740002989768982,0.835744023323059,0.748646020889282,0.845073997974396,0.622668981552124, 0.785620987415314,0.626250982284546,0.782993018627167,0.643140017986298,0.807505011558533,0.640232026576996,0.810293972492218,0.48531499505043,0.682784020900726,0.606981992721558,0.666893005371094,0.600821018218994,0.66669499874115,0.60029798746109,0.644447982311249,0.617070019245148,0.644885003566742,0.754450023174286,0.761106014251709,0.760816991329193,0.764385998249054,0.749010026454926,0.769831001758575,0.744979023933411,0.769724011421204,0.65436202287674,0.60207200050354,0.683640003204346,0.597428977489471,0.684638977050781,0.600597023963928,0.657428026199341,0.605553984642029,0.580946028232574,0.603588998317719,0.584342002868652,0.570780992507935,0.592054009437561,0.596794009208679,0.596616983413696,0.640085995197296,0.800503015518188,0.690162003040314,0.78548401594162,0.678726017475128,0.793367028236389,0.631842017173767,0.804992020130157,0.625209987163544,0.782839000225067,0.609883010387421,0.77003002166748,0.626945972442627,0.770036995410919,0.578665971755981,0.785793006420136,0.581861019134521,0.717876970767975,0.585382997989655,0.718262016773224,0.564846992492676,0.747331023216248,0.571310997009277,0.746775984764099,0.602630019187927,0.61854100227356,0.593069970607758,0.61523699760437,0.566398024559021,0.643261015415192,0.564595997333527,0.642423987388611,0.589883029460907,0.500833988189697,0.640323996543884,0.487314999103546,0.559000015258789,0.516731023788452,0.598299980163574,0.476011008024216,0.550535976886749,0.807691991329193,0.591266989707947,0.787438988685608,0.556259989738464,0.812995970249176,0.573251008987427,0.769125998020172,0.547279000282288,0.716606020927429,0.53738397359848,0.745893001556396,0.541930973529816,0.643723011016846,0.53507798910141,0.679214000701904,0.536068975925446,0.679238021373749,0.562328994274139,0.609709024429321,0.536590993404388,0.586823999881744,0.565851986408234,0.577041983604431,0.534389972686768,0.789699018001556,0.533797025680542,0.817964017391205,0.554751992225647,0.768791019916534,0.520033001899719,0.715804994106293,0.505459010601044,0.743863999843597,0.51264899969101, 0.643648028373718,0.502861976623535,0.681123018264771,0.501662015914917,0.505730986595154,0.528950989246368,0.494459003210068,0.521102011203766,0.51323801279068,0.484780013561249,0.524120986461639,0.497193992137909,0.767032980918884,0.497483998537064,0.790948987007141,0.523371994495392,0.715074002742767,0.480839997529984,0.741950988769531,0.487834990024567,0.647606015205383,0.469698995351791,0.683425009250641,0.474341005086899,0.606335997581482,0.498764991760254,0.608012974262238,0.46356999874115,0.593686997890472,0.497063010931015,0.581745982170105,0.460637986660004,0.563978016376495,0.495624005794525,0.552977025508881,0.459340006113052,0.715843975543976,0.454131007194519,0.743327975273132,0.458523005247116,0.652478992938995,0.444186002016068,0.686459004878998,0.449512004852295,0.610741019248962,0.437312990427017,0.576997995376587,0.431773006916046,0.546021997928619,0.428157985210419,0.745021998882294,0.455812007188797,0.715260982513428,0.45073801279068,0.708871006965637,0.438982009887695,0.767517983913422,0.447001993656158,0.688672006130219,0.446725010871887,0.652985990047455,0.440613001585007,0.653861999511719,0.430801004171371,0.610925018787384,0.433845013380051,0.611822009086609,0.424342006444931,0.576949000358582,0.428705990314484,0.57786101102829,0.419566005468369,0.562685012817383,0.564547002315521,0.573747992515564,0.537077009677887,0.542539000511169,0.526785016059875,0.55917900800705,0.498674005270004,0.577663004398346,0.640574991703033,0.59682697057724,0.675635993480682,0.553286015987396,0.597711980342865,0.528659999370575,0.562874019145966,0.543965995311737,0.468023985624313,0.570583999156952,0.676925003528595,0.592157006263733,0.709702014923096,0.542536020278931,0.634214997291565,0.5572350025177,0.68877899646759,0.537473022937775,0.700802981853485,0.524222016334534,0.675755023956299,0.566932022571564,0.710241973400116,0.586588978767395,0.727276980876923,0.697691977024078,0.842589020729065,0.732183992862701,0.826681971549988,0.610303997993469,0.748982012271881,0.608188986778259,0.751550018787384,0.595848023891449, 0.746363997459412,0.595209002494812,0.739857971668243,0.511940002441406,0.903187990188599,0.52096700668335,0.898711025714874,0.52928900718689,0.906715989112854,0.515648007392883,0.926854014396667,0.500630974769592,0.741142988204956,0.511164009571075,0.766757011413574,0.491887986660004,0.709266006946564,0.53008097410202,0.451460987329483,0.491014987230301,0.858838021755219,0.49540901184082,0.850676000118256,0.489861994981766,0.862199008464813,0.506479978561401,0.900551974773407,0.49277400970459,0.519106984138489,0.474651008844376,0.547680020332336,0.475259989500046,0.532550990581512,0.488204002380371,0.509262025356293,0.511892020702362,0.482450008392334,0.507665991783142,0.474379986524582,0.523944020271301,0.445968002080917,0.528555989265442,0.449622988700867,0.541126012802124,0.416366994380951,0.543363988399506,0.425150007009506,0.773705005645752,0.773248016834259,0.793837010860443,0.76232898235321,0.763550996780396,0.807937026023865,0.755976974964142,0.801982998847961,0.737347006797791,0.796802997589111,0.733368992805481,0.795602977275848,0.767576992511749,0.462875992059708,0.725887000560761,0.61956399679184,0.708864986896515,0.604919016361237,0.711592972278595,0.600333988666534,0.729116976261139,0.616008996963501,0.666976988315582,0.823736011981964,0.666347026824951,0.826997995376587,0.679130971431732,0.584389984607697,0.860094010829926,0.569835007190704,0.861025989055634,0.570559978485107,0.859628975391388,0.580141007900238,0.848532021045685,0.582090020179749,0.831273019313812,0.708265006542206,0.813877999782562,0.698092997074127,0.822157979011536,0.619607985019684,0.839424014091492,0.615649998188019,0.78362101316452,0.812173008918762,0.771278023719788,0.81231302022934,0.806473970413208,0.762018024921417,0.755122005939484,0.854467988014221,0.563646972179413,0.972711980342865,0.563362002372742,0.96671998500824,0.624249994754791,0.966863989830017,0.624415993690491,0.972603023052216,0.757192015647888,0.916203022003174,0.766335010528564,0.886677026748657,0.829183995723724,0.892983019351959,0.825236976146698,0.924263000488281, 0.720587015151978,0.81019002199173,0.722712993621826,0.813914000988007,0.695670008659363,0.82669597864151,0.696994006633759,0.822578012943268,0.826875984668732,0.537191987037659,0.79736202955246,0.503167986869812,0.803481996059418,0.494587004184723,0.830540001392365,0.527415990829468,0.801338970661163,0.49183800816536,0.767588019371033,0.459432005882263,0.769502997398376,0.764982998371124,0.772282004356384,0.717837989330292,0.788875997066498,0.738988995552063,0.78677499294281,0.755371987819672,0.796231985092163,0.738183975219727,0.807824015617371,0.749944984912872,0.862163007259369,0.552254021167755,0.86139702796936,0.566922008991241,0.796199023723602,0.506090998649597,0.825603008270264,0.540022015571594,0.805723011493683,0.599485993385315,0.822358012199402,0.598478019237518,0.842644989490509,0.597079992294312,0.74590802192688,0.97257798910141,0.746464014053345,0.966764986515045,0.824252009391785,0.966983020305634,0.824501991271973,0.97257000207901,0.904983997344971,0.966889023780823,0.904120028018951,0.972751021385193,0.983982026576996,0.967127025127411,0.983591020107269,0.973012983798981,0.580908000469208,0.764320015907288,0.563901007175446,0.715351998806,0.589232981204987,0.784120976924896,0.530862987041473,0.792225003242493,0.549371004104614,0.784265995025635,0.660320997238159,0.842872977256775,0.629719972610474,0.825662016868591,0.581996023654938,0.740742027759552,0.581376016139984,0.747482001781464,0.543020009994507,0.764913022518158,0.5417640209198,0.765255987644196,0.68893700838089,0.966831028461456,0.68885999917984,0.972545027732849,0.779680013656616,0.719380974769592,0.775496006011963,0.67240697145462,0.749826014041901,0.70617002248764,0.753127992153168,0.701161980628967,0.758265018463135,0.702252984046936,0.759383976459503,0.708230972290039,0.640682995319366,0.895353019237518,0.690562009811401,0.906292974948883,0.834421992301941,0.876709997653961,0.768797993659973,0.874520003795624,0.415399998426437,0.32660898566246,0.430352002382278,0.328936010599136,0.426811993122101,0.408055007457733,0.415430009365082, 0.407676011323929,0.44752898812294,0.324481993913651,0.43946498632431,0.409139007329941,0.450078010559082,0.408515006303787,0.458656013011932,0.341055005788803,0.803888976573944,0.813510000705719,0.847599029541016,0.815950989723206,0.839990019798279,0.844178020954132,0.783423006534576,0.849191009998322,0.822353005409241,0.764248013496399,0.854788780212402,0.774944186210632,0.85716301202774,0.715490996837616,0.855436682701111,0.770310282707214,0.823327004909515,0.75983601808548,0.861276984214783,0.614914000034332,0.860283970832825,0.59594202041626,0.563508987426758,0.977608978748322,0.563449025154114,0.989718019962311,0.624347984790802,0.977611005306244,0.624203026294708,0.989588022232056,0.689280986785889,0.977503001689911,0.689945995807648,0.989307999610901,0.745640993118286,0.989279985427856,0.745957016944885,0.977644026279449,0.824669003486633,0.977410018444061,0.824666023254395,0.989428997039795,0.904829025268555,0.977602005004883,0.9047030210495,0.98953902721405,0.987496018409729,0.977485001087189,0.988719999790192,0.989664018154144,0.746514976024628,0.963699996471405,0.689584016799927,0.963487982749939,0.689899027347565,0.955556988716125,0.746185004711151,0.955545008182526,0.824707984924316,0.963568985462189,0.824424028396606,0.955682992935181,0.904218971729279,0.95549601316452,0.904452979564667,0.963662028312683,0.986881017684937,0.955331981182098,0.986464023590088,0.963581025600433,0.56352299451828,0.955528020858765,0.563468992710114,0.96340000629425,0.624023020267487,0.95542699098587,0.624049007892609,0.963451027870178,0.462561011314392,0.404273986816406,0.46731299161911,0.353780001401901,0.476929008960724,0.354746997356415,0.486851990222931,0.343800008296967,0.484306991100311,0.380917996168137,0.473268002271652,0.396838009357452,0.495310008525848,0.333081990480423,0.496762007474899,0.35097399353981,0.619274973869324,0.787432014942169,0.638140976428986,0.814381003379822,0.636180996894836,0.817229986190796,0.615741014480591,0.790386974811554,0.663209974765778,0.834910988807678,0.664261996746063,0.83032101392746, 0.726795017719269,0.819536983966827,0.724636018276215,0.816698014736176,0.741437017917633,0.798749983310699,0.745163977146149,0.79952597618103,0.760254979133606,0.770170986652374,0.754073023796082,0.771270990371704,0.764029979705811,0.709317982196808,0.763572990894318,0.765542984008789,0.764527022838593,0.703831970691681,0.76111501455307,0.702948987483978,0.747889995574951,0.63817697763443,0.734149992465973,0.61301600933075,0.73761397600174,0.609447002410889,0.752393007278442,0.63661801815033,0.713751971721649,0.597162008285522,0.716287016868591,0.593289971351624,0.682763993740082,0.594327986240387,0.681445002555847,0.591042995452881,0.628277003765106,0.598482012748718,0.649186015129089,0.595960974693298,0.652073979377747,0.599357008934021,0.6336629986763,0.603404998779297,0.605349004268646,0.754891991615295,0.601939976215363,0.75840699672699,0.69607001543045,0.829173028469086,0.747210025787354,0.670045018196106,0.752089023590088,0.668287992477417,0.717867016792297,0.807089984416962,0.729247987270355,0.793879985809326,0.668438971042633,0.820026993751526,0.696245014667511,0.818924009799957,0.630124986171722,0.780834972858429,0.645606994628906,0.804713010787964,0.614354014396667,0.746073007583618,0.635995984077454,0.611169993877411,0.659627974033356,0.609381020069122,0.635020971298218,0.616019010543823,0.705909013748169,0.609502017498016,0.686806976795197,0.605311989784241,0.72163999080658,0.623906016349792,0.739162981510162,0.642512977123261,0.734116017818451,0.644194006919861,0.739193975925446,0.767247021198273,0.598843991756439,0.759500026702881,0.612294018268585,0.791806995868683,0.742811977863312,0.605661988258362,0.717657029628754,0.589160978794098,0.749445974826813,0.800283014774323,0.728273987770081,0.821708977222443,0.762830972671509,0.633249998092651,0.756834983825684,0.634607970714569,0.680687010288239,0.588268995285034,0.646324992179871,0.592952013015747,0.625209987163544,0.595965981483459,0.765233993530273,0.768468976020813,0.768220007419586,0.766668021678925,0.662473022937775,0.836941003799438,0.69666200876236, 0.835596978664398,0.63442200422287,0.820033013820648,0.696699023246765,0.833088994026184,0.767839014530182,0.711395978927612,0.766610980033875,0.76509302854538,0.765622019767761,0.664016008377075,0.761529982089996,0.665023982524872,0.595763981342316,0.755120992660522,0.770237028598785,0.705601990222931,0.769645988941193,0.663619995117188,0.767316997051239,0.704963028430939,0.756374001502991,0.666531980037689,0.749185979366302,0.701292991638184,0.741089999675751,0.670710027217865,0.634819984436035,0.60726797580719,0.595565974712372,0.595681011676788,0.545238018035889,0.424203991889954,0.54297000169754,0.414929002523422,0.743942022323608,0.640098989009857,0.586381554603577,0.761159121990204,0.626268029212952,0.605414986610413,0.568660020828247,0.908436000347137,0.567915976047516,0.924812018871307,0.558269023895264,0.931155979633331,0.534870982170105,0.907588005065918,0.602038025856018,0.922972977161407,0.625648975372314,0.923964023590088,0.624531984329224,0.948475003242493,0.600417971611023,0.948763012886047,0.652014017105103,0.925239980220795,0.652248024940491,0.949239015579224,0.659900009632111,0.911621987819672,0.673165023326874,0.936873972415924,0.584163010120392,0.927146017551422,0.589735984802246,0.909700989723206,0.687186002731323,0.911427974700928,0.686576008796692,0.933390974998474,0.673951029777527,0.907802999019623,0.576327979564667,0.904187023639679,0.549413025379181,0.931773006916046,0.599789977073669,0.682193994522095,0.59536600112915,0.71248197555542,0.590086996555328,0.729072988033295,0.585088014602661,0.743618011474609,0.605337023735046,0.684601008892059,0.694486021995544,0.752929151058197,0.671378016471863,0.745191335678101,0.671742022037506,0.760196805000305,0.694453001022339,0.760022878646851,0.599739015102386,0.713994026184082,0.594184994697571,0.729902029037476,0.704436004161835,0.912150025367737,0.705028772354126,0.918230891227722,0.48360800743103,0.773850977420807,0.539762318134308,0.765600323677063,0.523864984512329,0.767975986003876,0.510474979877472,0.769406020641327,0.519303023815155,0.768315017223358, 0.668066024780273,0.63475239276886,0.667784035205841,0.642946064472198,0.691379010677338,0.640768706798553,0.691516995429993,0.632577776908875,0.693904995918274,0.695546388626099,0.668949007987976,0.692328810691834,0.668965041637421,0.704022526741028,0.695168018341064,0.706744253635406,0.692425012588501,0.685782253742218,0.667905986309052,0.684280216693878,0.692019999027252,0.666875123977661,0.667697012424469,0.666199564933777,0.667421996593475,0.676847338676453,0.692054986953735,0.67753142118454,0.667447030544281,0.653890371322632,0.690786004066467,0.650612771511078,0.669061005115509,0.624064683914185,0.691891014575958,0.624247074127197,0.894847989082336,0.895250976085663,0.893621027469635,0.925100028514862,0.895820021629334,0.877816021442413,0.895017027854919,0.815168976783752,0.893710970878601,0.845345973968506,0.896109998226166,0.77708101272583,0.89614999294281,0.772738993167877,0.896131992340088,0.715757012367249,0.895740985870361,0.614742994308472,0.895557999610901,0.596005976200104,0.895439982414246,0.581342995166779,0.895444989204407,0.571839988231659,0.895399987697601,0.568403005599976,0.894981980323792,0.555009007453918,0.66991400718689,0.804514944553375,0.692153990268707,0.803676962852478,0.692584991455078,0.793214440345764,0.669167995452881,0.794813334941864,0.669103026390076,0.812289774417877,0.691932022571564,0.812480747699738,0.692840993404388,0.785613358020782,0.669423997402191,0.78747171163559,0.693473041057587,0.780303776264191,0.669584989547729,0.782321572303772,0.671521008014679,0.766093552112579,0.670680999755859,0.772269546985626,0.693863034248352,0.77269983291626,0.694231986999512,0.766196131706238,0.694532990455627,0.760849475860596,0.669103026390076,0.615791022777557,0.691932022571564,0.615981996059418,0.69555801153183,0.737157046794891,0.695385038852692,0.720529973506927,0.241417050361633,0.736925363540649,0.33551299571991,0.903109014034271,0.301624000072479,0.667141973972321,0.241168051958084,0.73339581489563,0.294701009988785,0.611433982849121,0.7430419921875,0.700766026973724,0.748000025749207, 0.759728014469147,0.694864988327026,0.747479975223541,0.700270771980286,0.938441634178162,0.580572009086609,0.90303099155426,0.614766001701355,0.667132019996643,0.690708994865417,0.651550531387329,0.695114016532898,0.743652284145355,0.621689021587372,0.61142498254776,0.0586699992418289,0.316258013248444,0.0399160012602806,0.286247998476028,0.0952429994940758,0.287099003791809,0.0953600034117699,0.315791010856628,0.0234060008078814,0.269822001457214,0.0374389998614788,0.289521008729935,0.028379000723362,0.299145013093948,0.0108850002288818,0.272235989570618,0.0211089998483658,0.243887007236481,0.0338849984109402,0.245522007346153,0.0231669992208481,0.267601996660233,0.0105870002880692,0.269719004631042,0.03125,0.214263007044792,0.0342859998345375,0.243239998817444,0.0215429998934269,0.241347998380661,0.0223019998520613,0.214441001415253,0.084987998008728,0.369112014770508,0.0954350009560585,0.37031701207161,0.0950200036168098,0.381574004888535,0.0779490023851395,0.377856999635696,0.0549740009009838,0.31750300526619,0.0733610019087791,0.348356008529663,0.0647689998149872,0.356685012578964,0.0449539981782436,0.324974000453949,0.0373760014772415,0.246758997440338,0.095041997730732,0.244958996772766,0.0868190005421638,0.364912986755371,0.0768069997429848,0.346980005502701,0.0954589992761612,0.346646994352341,0.0954860001802444,0.365815997123718,0.0371729992330074,0.212997004389763,0.037941999733448,0.242647007107735,0.0349153876304626,0.215220808982849,0.0351933874189854,0.213771805167198,0.111606001853943,0.287259995937347,0.15140600502491,0.286051988601685,0.132361993193626,0.316247999668121,0.111230999231339,0.315887987613678,0.162797003984451,0.299140006303787,0.153883993625641,0.289519995450974,0.166117995977402,0.269840002059937,0.179975003004074,0.271905988454819,0.169862002134323,0.243338003754616,0.180170997977257,0.269630998373032,0.166348993778229,0.2674939930439,0.157003998756409,0.245527997612953,0.16941699385643,0.241003006696701,0.156626999378204,0.243184000253677,0.162396997213364,0.181279003620148,0.171581521630287, 0.179760530591011,0.0948830023407936,0.132779508829117,0.138804033398628,0.136136054992676,0.13246200978756,0.140635013580322,0.096392996609211,0.136017993092537,0.105835996568203,0.369112014770508,0.111518003046513,0.378306001424789,0.136056005954742,0.31750300526619,0.145705997943878,0.324943006038666,0.125611007213593,0.356653988361359,0.117503002285957,0.348356008529663,0.153591006994247,0.246998995542526,0.112199999392033,0.24524399638176,0.157602995634079,0.181766003370285,0.152991995215416,0.242010995745659,0.11566299945116,0.180221006274223,0.116455003619194,0.163334995508194,0.105209998786449,0.364053994417191,0.10690800100565,0.346924990415573,0.16386653482914,0.159788534045219,0.156076997518539,0.165429994463921,0.152145996689796,0.166945993900299,0.115751996636391,0.160760998725891,0.129288002848625,0.145445004105568,0.112718999385834,0.211630001664162,0.112651996314526,0.184624999761581,0.0980750024318695,0.138465002179146,0.112022496759892,0.157508015632629,0.097352497279644,0.152438506484032,0.096500001847744,0.139421999454498,0.0202309992164373,0.18495100736618,0.0155655145645142,0.212830498814583,0.0146115077659488,0.183022007346153,0.089010514318943,0.133365511894226,0.04339300096035,0.141950994729996,0.0407404936850071,0.13780851662159,0.0934349969029427,0.127581521868706,0.0197465047240257,0.16098652780056,0.0248840004205704,0.165046006441116,0.0921949967741966,0.161312997341156,0.0984589979052544,0.186204999685287,0.110922001302242,0.163844004273415,0.110426999628544,0.179071992635727,0.0413770005106926,0.206907004117966,0.0471220016479492,0.229733005166054,0.104800999164581,0.206962004303932,0.0448560006916523,0.231714993715286,0.0387369990348816,0.212752997875214,0.0345261916518211,0.210570394992828,0.0330270007252693,0.211438000202179,0.02369200065732,0.211438000202179,0.0915179997682571,0.137850999832153,0.0950059965252876,0.138298004865646,0.0940105020999908,0.154497519135475,0.0964080020785332,0.158686995506287,0.112170003354549,0.160953998565674,0.114150002598763,0.162967994809151,0.113466002047062, 0.179105997085571,0.101547002792358,0.190155997872353,0.107739999890327,0.206098005175591,0.106748998165131,0.209095001220703,0.0473910011351109,0.233289003372192,0.11412700265646,0.346996992826462,0.110114000737667,0.207462996244431,0.104330003261566,0.190686002373695,0.10462000221014,0.188466995954514,0.11184000223875,0.18189799785614,0.102486997842789,0.186930000782013,0.0476440005004406,0.235955998301506,0.0433790013194084,0.233253002166748,0.0370530001819134,0.210742995142937,0.0277280006557703,0.268110007047653,0.16185200214386,0.268128991127014,0.0974159985780716,0.155778005719185,0.108739003539085,0.210568994283676,0.423404008150101,0.832722008228302,0.422946989536285,0.790225982666016,0.436015009880066,0.793707013130188,0.442133992910385,0.832597017288208,0.405880987644196,0.833531022071838,0.410625010728836,0.79313600063324,0.542313992977142,0.414977997541428,0.543586015701294,0.413881003856659,0.540835976600647,0.413237005472183,0.402754992246628,0.807963013648987,0.40540799498558,0.802577018737793,0.442499995231628,0.803873002529144,0.445295006036758,0.809642970561981,0.800620019435883,0.412371009588242,0.80170202255249,0.402906000614166,0.824464976787567,0.426387012004852,0.817736983299255,0.430395007133484,0.771844029426575,0.385621011257172,0.720305025577545,0.378048002719879,0.719161987304688,0.371365010738373,0.77122300863266,0.378538012504578,0.675087988376617,0.37076199054718,0.675144970417023,0.364731013774872,0.624145984649658,0.362803995609283,0.625823020935059,0.357396990060806,0.586763978004456,0.35717299580574,0.588487029075623,0.352093994617462,0.549835026264191,0.327793002128601,0.537735998630524,0.35274800658226,0.539178013801575,0.333505004644394,0.544058978557587,0.327825993299484,0.800563991069794,0.416635990142822,0.815608978271484,0.433746993541718,0.802525997161865,0.477138996124268,0.785817980766296,0.454795002937317,0.720274984836578,0.381644010543823,0.771713018417358,0.389432013034821,0.766546010971069,0.436354011297226,0.714618027210236,0.429069012403488,0.67474502325058,0.37431401014328, 0.668267011642456,0.421635001897812,0.623535990715027,0.366133004426956,0.616913020610809,0.413309991359711,0.586251020431519,0.360410988330841,0.58117002248764,0.407671988010406,0.564781010150909,0.357405990362167,0.545342981815338,0.40200799703598,0.802724003791809,0.49073201417923,0.768902003765106,0.445895999670029,0.782319009304047,0.455047994852066,0.801755011081696,0.482903003692627,0.710255026817322,0.437876999378204,0.713714003562927,0.432285010814667,0.766754984855652,0.440109997987747,0.655246019363403,0.429695010185242,0.667151987552643,0.424993008375168,0.61320698261261,0.42323699593544,0.616126000881195,0.41694501042366,0.57924497127533,0.418460994958878,0.580774009227753,0.411206990480423,0.57227498292923,0.355502992868423,0.578446984291077,0.351009011268616,0.5363489985466,0.37542200088501,0.547708988189697,0.352798014879227,0.544354021549225,0.413823008537292,0.544884026050568,0.406291991472244,0.52803897857666,0.353841990232468,0.530825972557068,0.332924008369446,0.5365030169487,0.332181990146637,0.533675014972687,0.352439999580383,0.532131016254425,0.374336004257202,0.526868999004364,0.37924799323082,0.541022002696991,0.412753999233246,0.527652025222778,0.38282099366188,0.532829999923706,0.377947986125946,0.5416020154953,0.405137985944748,0.55314701795578,0.321810990571976,0.550531983375549,0.325792998075485,0.54252701997757,0.32514101266861,0.539116024971008,0.321078985929489,0.57319700717926,0.344193994998932,0.568295001983643,0.347853004932404,0.567987978458405,0.334683001041412,0.572899997234344,0.333532989025116,0.818652987480164,0.432965993881226,0.826528012752533,0.429134011268616,0.824753999710083,0.456456989049912,0.817996025085449,0.454517006874084,0.804591000080109,0.491007000207901,0.803842008113861,0.483321011066437,0.817227005958557,0.457412004470825,0.82396000623703,0.459466010332108,0.561165988445282,0.326627999544144,0.565752983093262,0.322369009256363,0.563057005405426,0.352697014808655,0.557058990001678,0.328759998083115,0.562799990177155,0.335570991039276,0.814670026302338,0.453969985246658, 0.698300063610077,0.684771537780762,0.698684751987457,0.661713242530823,0.726532697677612,0.661558032035828,0.726147830486298,0.684695065021515,0.69792628288269,0.702329099178314,0.725775301456451,0.702269732952118,0.697516202926636,0.722326993942261,0.725363969802856,0.722244679927826,0.697229981422424,0.738952040672302,0.728065192699432,0.738740622997284,0.695294499397278,0.650523245334625,0.723142683506012,0.650288283824921,0.700015008449554,0.639839768409729,0.719424247741699,0.638450682163239,0.699969708919525,0.749187767505646,0.726327180862427,0.749693930149078,0.711566686630249,0.768344223499298,0.726386547088623,0.770712733268738,0.7265545129776,0.778619229793549,0.712350487709045,0.778389155864716,0.723169326782227,0.759870052337646,0.724873960018158,0.763683617115021,0.698896825313568,0.757139205932617,0.712934732437134,0.79084986448288,0.726765990257263,0.791277229785919,0.721129894256592,0.797258675098419,0.710690796375275,0.797177314758301,0.804866015911102,0.493481010198593,0.719372689723969,0.631764590740204,0.697161555290222,0.797071754932404,0.699103534221649,0.79042249917984,0.698706328868866,0.766288876533508,0.698890686035156,0.777489602565765,0.695524752140045,0.797058999538422,0.113658398389816,0.403866350650787,0.0965413972735405,0.421891331672668,0.0906023979187012,0.418481349945068,0.113039396703243,0.394908338785172,0.142433390021324,0.377117335796356,0.143054395914078,0.370034337043762,0.195116385817528,0.362861335277557,0.193972393870354,0.369544327259064,0.239189386367798,0.362258344888687,0.239133387804031,0.356227338314056,0.290132403373718,0.354299336671829,0.288454413414001,0.348893344402313,0.32751339673996,0.348669350147247,0.325791388750076,0.343590348958969,0.375099390745163,0.325001329183578,0.376541405916214,0.344243347644806,0.364443391561508,0.319289326667786,0.369577407836914,0.319746345281601,0.0996073931455612,0.445466339588165,0.113713398575783,0.408132344484329,0.128460392355919,0.446291327476501,0.142564386129379,0.380928337574005,0.194002389907837,0.373140335083008, 0.199659392237663,0.420565336942673,0.147731393575668,0.427850335836411,0.239533394575119,0.365810334682465,0.246010392904282,0.413131326436996,0.29074239730835,0.357628345489502,0.29736539721489,0.404806345701218,0.328026413917542,0.351907342672348,0.33310741186142,0.399168342351913,0.349496394395828,0.348902344703674,0.368934392929077,0.393504351377487,0.111752398312092,0.468635350465775,0.111554399132729,0.482228338718414,0.112522393465042,0.474399328231812,0.131958395242691,0.446544349193573,0.14537538588047,0.437392324209213,0.204022392630577,0.429373323917389,0.147522389888763,0.431606352329254,0.200563386082649,0.423781335353851,0.247125402092934,0.416489332914352,0.259031414985657,0.421191334724426,0.298151403665543,0.408441334962845,0.301071405410767,0.414733350276947,0.333504408597946,0.40270334482193,0.335032403469086,0.409957349300385,0.3358314037323,0.3425053358078,0.342002391815186,0.34699934720993,0.366569399833679,0.344294339418411,0.377928406000137,0.366918325424194,0.369393408298492,0.397788345813751,0.369923412799835,0.405319333076477,0.387694388628006,0.344483345746994,0.380603402853012,0.343936324119568,0.378189414739609,0.324112325906754,0.384672403335571,0.323150336742401,0.387792408466339,0.369055330753326,0.382146418094635,0.365832328796387,0.373255401849747,0.40425032377243,0.372676402330399,0.396634340286255,0.381448417901993,0.369444340467453,0.387010395526886,0.372628331184387,0.361970394849777,0.311036348342896,0.375105410814285,0.312445342540741,0.370665401220322,0.317071348428726,0.363745391368866,0.317289352416992,0.340458393096924,0.337580353021622,0.341377407312393,0.327198326587677,0.346290409564972,0.326179325580597,0.345982402563095,0.339348345994949,0.0956253930926323,0.424462348222733,0.0962813943624496,0.446013331413269,0.0906173959374428,0.44499135017395,0.0885393992066383,0.421229332685471,0.109686397016048,0.482503324747086,0.0914113968610764,0.449055343866348,0.0970513969659805,0.44890832901001,0.110436387360096,0.474817335605621,0.353111416101456,0.318124324083328,0.346154391765594, 0.313732326030731,0.357218414545059,0.320256352424622,0.351220399141312,0.344192326068878,0.351477414369583,0.327067345380783,0.0986683964729309,0.425243347883224,0.201355516910553,0.755470752716064,0.229801326990128,0.754528641700745,0.22977951169014,0.779813945293427,0.201346069574356,0.780669212341309,0.201364010572433,0.736284792423248,0.229821056127548,0.735325038433075,0.20137345790863,0.714430928230286,0.229842931032181,0.713497817516327,0.201380416750908,0.696262359619141,0.231008321046829,0.695360481739044,0.229905426502228,0.792262554168701,0.201400503516197,0.793030858039856,0.230043739080429,0.80534416437149,0.201321199536324,0.804539203643799,0.201375126838684,0.685874104499817,0.230348333716393,0.684350669384003,0.201360017061234,0.659947454929352,0.201356515288353,0.637357413768768,0.230417057871819,0.650523841381073,0.230414211750031,0.659176766872406,0.23033632338047,0.668519198894501,0.201370418071747,0.673334717750549,0.23034143447876,0.677344679832459,0.201378121972084,0.624694049358368,0.217930540442467,0.624757528305054,0.230328261852264,0.624805092811584,0.230420023202896,0.636676132678986,0.109411403536797,0.484977334737778,0.230065077543259,0.811225950717926,0.70362251996994,0.93885749578476,0.709930837154388,0.92236316204071,0.239834621548653,0.766160309314728,0.583519160747528,0.350003033876419,0.586316823959351,0.362388223409653,0.602215349674225,0.360662877559662,0.604043304920197,0.348087519407272,0.617658197879791,0.364844977855682,0.623867571353912,0.353780657052994,0.630566298961639,0.374368995428085,0.640316426753998,0.366314440965652,0.639199614524841,0.387952893972397,0.65116959810257,0.383995652198792,0.642389714717865,0.403769433498383,0.654960691928864,0.404441088438034,0.639698147773743,0.419682174921036,0.651175200939178,0.424887835979462,0.631486177444458,0.433536142110825,0.64032393693924,0.44257253408432,0.618867993354797,0.443452686071396,0.623873174190521,0.455105125904083,0.603552758693695,0.448096305131912,0.604046642780304,0.460793614387512,0.587611496448517,0.446846783161163, 0.583523273468018,0.458871752023697,0.573190987110138,0.439874351024628,0.565073013305664,0.449600696563721,0.562234163284302,0.428122133016586,0.551185488700867,0.434231251478195,0.556219518184662,0.413166075944901,0.543736159801483,0.41483736038208,0.555965304374695,0.397026807069778,0.543733060359955,0.394037842750549,0.561511397361755,0.381885349750519,0.551178514957428,0.374641686677933,0.57210773229599,0.369794547557831,0.565066277980804,0.359271228313446,0.591776132583618,0.383287847042084,0.599823772907257,0.382142871618271,0.607736766338348,0.384002536535263,0.614455461502075,0.388615220785141,0.619077205657959,0.395364910364151,0.620974183082581,0.403348028659821,0.619881510734558,0.411482632160187,0.615942895412445,0.418666958808899,0.609695971012115,0.423922687768936,0.601992070674896,0.426539897918701,0.593874633312225,0.426175892353058,0.586432635784149,0.422881931066513,0.5806645154953,0.417104780673981,0.577347993850708,0.409611850976944,0.576938092708588,0.401412606239319,0.579497575759888,0.393618077039719,0.584679245948792,0.387290775775909,0.63274747133255,0.33578810095787,0.605882704257965,0.328074932098389,0.655036628246307,0.352772623300552,0.669740617275238,0.376735389232636,0.674872577190399,0.404439657926559,0.669740617275238,0.432143926620483,0.655036628246307,0.456106513738632,0.63274747133255,0.473091244697571,0.605882704257965,0.480804175138474,0.578070878982544,0.478203773498535,0.553068101406097,0.465640962123871,0.534251272678375,0.444812715053558,0.524161279201508,0.418531715869904,0.524161279201508,0.390347599983215,0.534251272678375,0.364066690206528,0.553068101406097,0.343238234519959,0.578070878982544,0.330675601959229,0.638998925685883,0.32311937212944,0.607176899909973,0.313982963562012,0.665401637554169,0.343238234519959,0.682818710803986,0.371622860431671,0.688898086547852,0.404439657926559,0.682818710803986,0.437256425619125,0.665401637554169,0.465640962123871,0.638999164104462,0.485759973526001,0.607176899909973,0.494896411895752,0.574232757091522,0.491815984249115,0.544616103172302, 0.476934969425201,0.522326588630676,0.452263057231903,0.510374844074249,0.421132326126099,0.510374844074249,0.38774698972702,0.522326588630676,0.356616318225861,0.544616103172302,0.331944406032562,0.574232757091522,0.317063421010971,0.643884181976318,0.313219726085663,0.608188092708588,0.302971452474594,0.673500776290894,0.33578810095787,0.693038165569305,0.367627888917923,0.699857592582703,0.404439657926559,0.693038165569305,0.441251277923584,0.673500776290894,0.473091244697571,0.643884181976318,0.495659470558167,0.608188092708588,0.505907952785492,0.571233510971069,0.502452671527863,0.538011610507965,0.485759973526001,0.513008713722229,0.45808470249176,0.49960196018219,0.423164188861847,0.49960196018219,0.385714888572693,0.513008713722229,0.350794672966003,0.538011610507965,0.32311937212944,0.571233510971069,0.306426763534546,0.648941278457642,0.302971452474594,0.609234988689423,0.291571497917175,0.681885421276093,0.328074932098389,0.703617930412292,0.363492339849472,0.711203336715698,0.404439657926559,0.703617930412292,0.445387005805969,0.681885480880737,0.480804175138474,0.648941457271576,0.505907952785492,0.609234988689423,0.517307877540588,0.56812846660614,0.513464212417603,0.531173944473267,0.494896411895752,0.50336217880249,0.464111804962158,0.488449275493622,0.425267934799194,0.488449275493622,0.383611381053925,0.50336217880249,0.344767600297928,0.531173944473267,0.313982963562012,0.56812846660614,0.295415163040161,0.598870098590851,0.404439896345139,0.422504276037216,0.208326101303101,0.420620054006577,0.220952957868576,0.40466496348381,0.22225883603096,0.401976197957993,0.210084497928619,0.441889196634293,0.213825970888138,0.436121195554733,0.225387692451477,0.458532184362412,0.226602077484131,0.448988765478134,0.234982222318649,0.469441503286362,0.244286596775055,0.457396358251572,0.247825503349304,0.473317474126816,0.265093058347702,0.460853904485703,0.263767838478088,0.469256192445755,0.285454750061035,0.458055704832077,0.280557543039322,0.458189815282822,0.302716761827469,0.449561566114426,0.294100433588028, 0.441692322492599,0.315481513738632,0.437250584363937,0.303634285926819,0.421991735696793,0.321419388055801,0.422128230333328,0.308171838521957,0.402216166257858,0.319356054067612,0.405865997076035,0.307476729154587,0.383464306592941,0.30983567237854,0.391529887914658,0.300116926431656,0.369341462850571,0.294611096382141,0.380712419748306,0.28854689002037,0.362127214670181,0.274601668119431,0.37404653429985,0.272961229085922,0.361597269773483,0.254517108201981,0.37393394112587,0.25774011015892,0.369332164525986,0.23503115773201,0.379798620939255,0.242423623800278,0.383117824792862,0.219624131917953,0.390025228261948,0.229805320501328,0.417763978242874,0.242196708917618,0.409799784421921,0.243118852376938,0.426080316305161,0.244582086801529,0.432094067335129,0.249166667461395,0.436857551336288,0.255485445261002,0.439218133687973,0.263803422451019,0.438051730394363,0.272014290094376,0.434290617704391,0.278641015291214,0.427876621484756,0.284170061349869,0.419764667749405,0.286544233560562,0.412089198827744,0.286476999521255,0.40417942404747,0.282990008592606,0.399250477552414,0.277773082256317,0.394759267568588,0.269637286663055,0.395469456911087,0.2619668841362,0.398280709981918,0.253965854644775,0.402646631002426,0.247677177190781,0.423653155565262,0.188672631978989,0.450527876615524,0.196389943361282,0.472826451063156,0.213381201028824,0.487538188695908,0.237351447343826,0.492675870656967,0.265067636966705,0.487543076276779,0.29278489947319,0.472833186388016,0.316758245229721,0.450533002614975,0.333748430013657,0.423656076192856,0.341461628675461,0.395833522081375,0.338857561349869,0.370821446180344,0.326289594173431,0.351995676755905,0.305453807115555,0.341898828744888,0.279162585735321,0.341896057128906,0.250966370105743,0.351989597082138,0.224673300981522,0.370815426111221,0.203836560249329,0.395829886198044,0.191271066665649,0.424903601408005,0.174020498991013,0.457367092370987,0.18315514922142,0.484217017889023,0.203706830739975,0.500972270965576,0.231555014848709,0.507110118865967,0.265018463134766,0.501041769981384, 0.297658920288086,0.484085887670517,0.325823694467545,0.457299917936325,0.346640259027481,0.424868732690811,0.355296075344086,0.391832083463669,0.352798074483871,0.362741440534592,0.337218433618546,0.340549677610397,0.312665551900864,0.328527301549912,0.281844556331635,0.328862935304642,0.248387277126312,0.340774565935135,0.216788083314896,0.362983077764511,0.192348450422287,0.393104463815689,0.177843391895294,0.426468938589096,0.1635802090168,0.462187498807907,0.17383536696434,0.49182340502739,0.196417808532715,0.511373281478882,0.228278338909149,0.518197059631348,0.26511350274086,0.511373281478882,0.301948696374893,0.49182340502739,0.333809077739716,0.462187618017197,0.356391698122025,0.426468938589096,0.36664679646492,0.389490574598312,0.363189250230789,0.356247276067734,0.346485942602158,0.331228464841843,0.318792939186096,0.317813128232956,0.283850222826004,0.317813128232956,0.246376782655716,0.331228464841843,0.211434096097946,0.356247276067734,0.183741182088852,0.389490574598312,0.167037814855576,0.427458077669144,0.151973962783813,0.467164367437363,0.163373917341232,0.500108480453491,0.188477411866188,0.521841049194336,0.223894834518433,0.529426455497742,0.26484215259552,0.521841049194336,0.305789530277252,0.500108599662781,0.341206669807434,0.467164546251297,0.36631041765213,0.427458077669144,0.377710372209549,0.386351555585861,0.373866707086563,0.349397033452988,0.355298906564713,0.321585267782211,0.324514329433441,0.306672364473343,0.285670459270477,0.306672364473343,0.244013875722885,0.321585267782211,0.205170094966888,0.349397033452988,0.174385443329811,0.386351555585861,0.155817627906799,0.417306035757065,0.26596075296402 } UVIndex: *46575 { a: 0,1,2,3,4,5,3,6,7,8,9,2,10,11,12,13,14,15,16,12,17,18,6,19,20,21,22,23,22,24,34,35,25,26,23,27,28,29,30,31,32,33,31,16,36,37,27,30,38,39,13,9,3,2,40,41,6,3,41,2,9,43,40,13,12,44,45,12,16,46,44,23,22,47,48,22,49,47,27,23,48,50,31,30,51,52,16,31,52,46,30,27,50,51,9,13,45,43,41,40,53,54,19,41,56,57,40,43,58,59,45,44,60,61,44,46,62,63,48,47,64,65,47,66,67,68,50,48,69,70,52,51,71,72,46,52,73,74,51,50,75,76,43,45,77,78,79,80,81,82,83,82,81,84,85,84,81,86,87,86,81,80,88,89,90,91,92,79,89,88,80,87,80,88,92,93,94,95,96,97,98,99,96,93,96,99,100,83,100,99,82,79,82,99,98,95,101,102,103,104,105,106,107,106,105,108,109,108,105,110,111,110,105,104,111,112,113,110,109,110,113,114,115,114,113,116,117,116,113,112,118,119,120,121,122,123,124,125,124,92,91,126,125,87,92,124,123,127,128,129,130,122,130,129,123,87,123,129,86,85,86,129,128,131,132,133,134,135,134,133,136,107,136,133,106,103,106,133,132,132,131,137,138,132,138,139,103,140,141,142,143,140,143,144,145,146,147,148,149,146,149,142,141,150,146,141,151,147,146,150,152,153,154,155,152,155,156,157,158,154,153,159,158,159,160,161,162,151,141,140,162,140,145,163,164,165,166,167,168,169,170,171,172,171,170,173,174,173,170,175,176,175,170,169,177,178,167,166,179,180,181,182,183,182,181,184,185,184,181,186,187,186,181,180,188,189,190,191,188,191,192,193,194,195,161,147,192,195,194,154,158,196,197,190,197,196,191,192,191,196,195,161,195,196,158,190,189,198,199,198,200,156,199,201,202,166,165,156,200,202,201,180,179,200,198,180,198,189,187,179,182,203,204,203,205,206,177,204,207,205,203,208,183,208,203,182,202,204,177,166,200,179,204,202,209,210,211,212,213,183,213,212,211,208,207,208,211,214,215,214,211,210,216,217,218,219,220,219,218,221,222,221,218,223,224,223,218,217,220,225,226,219,216,219,226,227,228,227,226,229,230,229,226,225,231,232,233,234,235,234,233,236,237,236,233,238,239,238,233,232,147,150,240,194,192,194,240,241,242,241,240,243,151,243,240,150,244,245,239,232,244,232,231,246,247,248,245,244,247,244,246,242,139,138,249,250,251,250,249,252,253,252, 249,254,137,254,249,138,255,256,257,258,187,258,257,186,185,186,257,259,260,259,257,256,258,187,189,188,258,188,193,255,151,162,261,243,242,243,261,247,248,247,261,262,163,262,261,162,201,165,263,264,201,264,157,156,156,155,265,199,190,265,197,154,197,265,155,147,161,160,148,266,267,268,269,185,269,268,184,183,184,268,213,209,213,268,267,260,270,271,259,185,259,271,269,266,269,271,270,235,236,272,273,230,273,272,229,228,229,272,274,237,274,272,236,241,242,246,275,241,275,193,192,275,246,231,276,275,276,255,193,235,277,278,234,231,234,278,276,255,276,278,256,260,256,278,277,235,273,279,277,260,277,279,270,266,270,279,280,230,280,279,273,209,267,281,282,220,282,281,225,230,225,281,280,266,280,281,267,220,221,283,282,209,282,283,210,215,210,283,284,222,284,283,221,251,285,286,250,139,250,286,287,172,287,286,171,168,171,286,285,222,223,288,289,168,289,288,169,176,169,288,290,224,290,288,223,215,284,291,292,251,292,291,285,168,285,291,289,222,289,291,284,251,252,293,292,215,292,293,214,207,214,293,294,253,294,293,252,206,205,295,296,295,205,207,297,137,131,298,299,300,253,254,137,297,299,254,104,103,139,287,104,287,172,111,112,111,172,173,112,173,174,117,301,302,303,304,97,301,304,98,79,98,304,89,304,303,90,89,102,305,301,97,305,306,302,301,101,307,305,102,307,308,306,305,309,310,311,312,313,314,315,316,317,318,319,320,312,321,309,322,323,324,325,320,319,323,322,326,327,328,327,326,310,311,310,326,329,330,315,314,331,332,333,334,335,336,337,338,339,340,341,342,337,340,338,332,343,344,345,344,346,345,347,348,349,331,347,350,351,348,332,331,349,343,349,352,344,343,353,354,352,349,348,355,356,357,358,359,360,361,362,363,364,365,346,362,363,366,367,346,368,366,363,369,370,371,372,373,355,374,360,359,358,375,374,355,374,376,377,360,378,376,374,375,369,373,379,380,358,357,381,382,362,367,383,359,364,361,384,364,384,385,365,384,361,360,377,386,387,388,389,390,369,380,388,387,391,392,393,394,395,396,397,398,399,400,401,402,397,404,405,407,408,409,408,410,405,408,411,412,413,409,414,415,416,417,416,418,419,401,417,420,416,415,420, 421,418,416,402,401,419,422,399,402,423,424,425,417,401,400,414,417,425,426,427,428,429,430,400,399,429,428,431,422,419,432,433,434,422,431,423,402,422,434,435,436,437,424,399,424,437,429,429,437,438,430,439,438,437,436,427,440,441,428,400,428,441,425,426,425,441,442,443,442,441,440,444,445,446,421,447,432,419,418,448,449,444,446,450,451,452,453,454,453,452,455,456,455,452,457,458,457,452,451,459,460,461,462,463,459,462,464,465,466,467,468,469,466,465,460,470,471,472,473,454,473,472,453,450,453,472,474,475,474,472,471,454,455,476,477,476,455,456,478,457,479,480,456,481,479,457,458,482,483,484,485,486,484,487,488,489,487,484,483,490,491,492,493,490,494,495,491,496,497,498,499,500,501,498,497,502,503,309,321,504,503,502,505,506,507,508,509,509,508,510,511,510,508,512,513,514,512,508,507,515,516,517,518,519,517,516,520,521,522,523,522,521,524,516,524,521,520,525,526,527,528,527,522,529,530,527,530,528,525,531,532,533,534,533,532,535,317,535,532,536,537,536,532,531,538,535,317,320,534,535,538,539,540,537,505,502,541,542,543,544,506,544,543,507,514,507,543,545,546,545,543,542,506,547,548,544,541,544,548,549,523,526,550,519,517,519,550,551,534,551,550,533,525,533,550,526,320,322,552,538,539,538,552,553,518,554,555,556,539,553,555,554,551,534,539,554,309,503,557,327,310,557,503,504,558,511,559,560,561,561,560,325,562,322,325,560,552,552,560,559,553,563,564,565,566,567,558,504,568,561,569,509,511,506,509,569,547,570,497,496,567,500,497,570,571,567,496,572,558,573,574,575,576,577,576,575,578,579,578,575,580,581,580,575,574,582,583,372,371,378,375,584,585,586,587,588,589,590,591,592,593,590,593,594,595,596,597,587,586,596,586,598,599,593,592,600,601,593,601,602,594,589,603,604,605,606,607,608,609,610,611,608,607,612,613,614,615,616,617,618,619,620,619,618,621,622,623,624,625,625,624,626,627,628,629,630,631,599,631,630,632,633,634,608,611,608,634,635,609,600,635,634,601,602,601,634,633,344,368,346,636,637,638,639,636,639,383,367,640,641,642,643,381,357,641,640,637,636,644,645,646,645,644,647,368,647,644,366,367,366,644,636,648, 649,650,651,380,379,649,648,389,388,652,653,654,653,652,655,651,655,652,648,380,648,652,388,656,657,658,659,660,657,656,661,662,663,664,665,662,665,666,667,668,669,670,671,672,669,668,673,674,675,676,677,522,678,679,680,681,680,679,682,683,684,679,678,685,673,686,684,687,688,689,690,691,692,693,694,691,694,695,696,697,696,695,698,699,700,701,702,703,702,701,704,705,704,701,706,707,706,701,700,522,524,708,678,683,678,708,709,516,709,708,524,710,711,712,713,714,711,710,715,707,716,717,706,705,706,717,718,698,695,719,720,721,722,723,724,725,694,693,726,727,669,728,729,670,703,730,685,730,703,704,731,732,728,669,672,710,713,692,691,710,691,696,715,733,734,714,715,688,734,733,735,736,737,738,739,736,739,724,723,741,744,743,742,745,744,741,740,746,747,748,749,750,751,752,753,504,505,751,750,494,566,754,495,755,581,756,757,514,758,759,512,760,761,762,763,764,763,762,765,766,765,762,767,768,767,762,761,769,770,771,772,773,774,775,776,777,776,775,778,779,780,781,782,783,782,781,784,435,784,781,436,439,436,781,780,785,297,298,742,786,741,742,298,740,741,786,787,148,160,789,790,742,743,791,785,792,793,794,795,796,795,794,797,798,799,800,801,802,801,800,803,803,800,794,793,794,800,799,797,769,772,804,805,806,807,752,808,809,810,811,812,813,810,809,814,808,815,816,817,681,816,815,530,818,819,820,788,818,821,822,823,824,825,826,827,828,829,830,827,826,579,831,832,833,834,828,834,833,835,796,835,833,795,792,795,833,832,836,837,838,838,837,839,840,841,776,777,842,773,776,841,843,844,845,846,748,847,845,848,849,850,848,845,844,515,851,852,699,516,853,854,855,856,857,854,853,858,862,861,860,859,782,783,863,864,782,864,865,779,867,148,790,868,869,783,784,868,784,435,870,871,872,847,873,468,467,872,871,874,875,876,877,876,808,752,876,752,877,808,876,815,530,815,876,875,798,878,879,880,881,880,879,882,664,882,879,883,884,883,879,878,885,886,887,888,889,463,464,890,891,889,890,892,894,895,862,859,896,895,894,893,881,897,898,880,798,880,898,799,899,900,901,790,789,842,777,806,808,817,887,903,904,902,963,905,906,907,908,907,906,909,910,911, 912,913,912,914,860,861,913,915,914,912,911,916,917,918,919,920,921,918,917,906,159,153,909,159,906,789,160,922,923,924,925,926,927,840,839,902,904,927,926,928,929,930,931,932,931,930,933,934,937,936,935,785,791,937,934,938,671,670,939,938,939,697,698,940,941,942,943,940,943,944,945,946,333,332,947,948,949,950,951,725,849,848,622,625,627,952,807,953,954,753,788,821,955,956,957,956,955,958,959,960,961,941,667,964,965,966,722,725,951,967,970,971,972,973,974,962,971,970,975,971,911,910,972,962,915,911,971,461,976,977,462,904,903,977,976,978,979,980,981,978,981,565,564,983,986,985,984,896,986,983,982,873,847,849,987,988,989,771,770,990,991,992,993,994,995,992,992,995,993,996,994,992,997,663,997,992,991,772,998,999,804,157,1000,152,617,616,949,948,587,597,953,807,869,868,1001,1002,484,981,980,485,786,134,135,787,298,131,134,786,1003,1004,1005,1006,1005,1004,1007,1008,588,587,807,806,1000,157,1009,1010,1000,1010,908,909,479,864,863,480,865,864,479,481,1011,939,670,729,1012,1013,1014,1015,802,1015,1014,1016,1017,1018,1019,1020,1019,1014,1013,739,738,1659,1110,920,791,743,1021,745,1022,957,1023,1024,1025,341,1025,1024,1026,1027,1028,1029,891,892,1002,1001,413,1030,1031,1032,1033,1034,821,1034,1033,955,955,1033,1035,958,1036,1035,1033,1032,1030,413,412,1037,299,934,935,300,1038,1039,1040,522,680,529,529,680,681,530,1041,1042,1043,1044,918,1044,1043,919,1045,1041,1044,1046,1047,1046,1044,1048,1048,1044,918,921,748,747,1049,844,861,1195,1051,913,1050,910,913,1051,1045,1046,1052,1053,796,1053,1052,835,828,835,1052,1054,1047,1054,1052,1046,986,968,969,985,896,893,968,986,941,961,942,486,565,981,484,754,566,565,486,488,724,739,1110,987,725,724,987,849,745,1055,1056,1022,813,814,1056,1055,1057,1058,1059,1060,1061,1058,1057,127,1047,1048,1062,1063,697,939,1011,1064,735,1011,729,1065,1066,574,573,836,756,581,574,1066,783,869,747,746,1031,1034,1067,1068,577,1068,1067,1069,820,1069,1067,818,818,1067,1034,821,963,902,819,866,1013,1012,690,1070,1013,1070,1071,1020,1040,1072,1073,1074,1072,1040,1039,1075,1076,1077,1078,1079,1080,1077,1080, 1081,1082,1083,1084,1085,1086,352,354,646,647,344,352,647,368,928,931,1087,1088,908,1088,1087,907,905,907,1087,1089,932,1089,1087,931,667,1090,662,1090,667,966,663,662,1090,997,930,1091,1076,933,1092,1093,1091,930,929,860,1056,814,859,887,886,588,806,1026,924,1008,1007,577,578,1094,1068,1031,1068,1094,1095,829,1095,1094,826,579,826,1094,578,573,576,1096,1097,839,1097,1096,1098,820,1098,1096,1069,577,1069,1096,576,1099,750,753,954,568,504,750,1099,917,937,791,920,917,916,936,937,1005,1008,1100,1101,850,1030,1037,901,951,848,1070,690,689,1102,1005,1101,1103,1006,514,545,1104,758,546,1105,1104,545,1093,823,1106,1091,1091,1106,1072,1076,1073,1072,1106,1107,822,1107,1106,823,1108,947,950,1109,892,890,970,973,970,890,464,975,924,923,1100,1008,873,987,1110,1111,1112,1113,947,1108,954,1113,1112,1099,568,1099,1112,1114,1115,1114,1112,1108,894,809,812,893,859,814,809,894,788,915,866,1116,1117,1118,1119,1120,1117,1116,1121,1123,810,813,1124,811,810,1123,1122,847,1125,846,845,783,746,863,1126,1113,954,953,852,700,699,707,700,852,1127,1055,1128,1124,813,745,740,1128,1055,914,915,788,1022,860,914,1022,1056,863,746,749,480,1129,1130,812,811,1131,1130,1129,1132,1126,953,597,1133,1126,1133,617,948,906,905,842,789,1134,1135,1136,999,1049,747,869,1002,771,1137,998,772,989,1138,1137,771,853,1139,1140,858,1141,1139,853,856,1128,1142,1059,1124,740,787,1142,1128,792,832,1143,1144,1082,1144,1143,1077,1078,1077,1143,1145,831,1145,1143,832,1017,1146,1147,1148,1147,1149,1150,1150,1151,1148,1147,1147,1146,1152,1149,841,1089,932,843,842,905,1089,841,1153,1154,1155,802,1016,1156,801,798,801,1156,1157,1158,1159,1160,901,848,850,1037,1161,1162,1163,1164,1165,1164,1163,1166,1167,1166,1163,1168,1169,1168,1163,1162,1167,1168,1170,1171,1172,1171,1170,1173,1169,1173,1170,1168,796,797,1174,1053,1045,1053,1174,1175,897,1175,1174,898,898,1174,797,799,1082,1176,1177,1144,792,1144,1177,793,1178,900,899,623,1178,623,622,1179,963,866,915,962,580,1180,830,579,581,755,1180,580,1181,734,688,687,734,1181,1081,714,1182,1060,1059,1142,901,900,967,951,1183,967,900, 1178,1183,1178,1179,726,1036,1032,1184,1185,1063,1185,1184,1186,829,1186,1184,1095,1031,1095,1184,1032,1187,494,490,1188,1187,563,566,494,921,1189,1062,1048,920,1021,1189,921,1050,1190,972,910,802,803,1191,1015,1012,1015,1191,1192,1192,1191,1177,1176,1177,1191,803,793,968,1130,1131,969,893,812,1130,968,1058,1123,1124,1059,1122,1123,1058,1061,895,1194,1193,862,896,982,1194,895,1186,1054,1047,1063,829,828,1054,1186,862,1193,1195,861,1196,1197,1042,1198,1045,1198,1042,1041,1043,1042,1197,1199,1200,659,658,1201,1200,1199,1202,1158,1203,1204,1205,884,1205,1204,1206,1120,1206,1204,1117,1118,1117,1204,1203,824,1207,825,1208,1209,1210,1211,1212,1213,164,666,1208,1213,1212,1121,666,1214,1212,1212,1214,1120,1121,1116,1209,1208,1121,1119,1207,1209,1116,1215,1216,1217,1216,660,661,1217,1218,942,961,1219,1218,1219,980,979,1220,1219,961,960,485,980,1219,1220,482,1036,1185,1221,1035,1063,1062,1221,1185,1221,1222,958,1035,957,958,1222,1223,1021,1223,1222,1189,1062,1189,1222,1221,1224,1225,1226,1227,1228,1227,1226,1229,966,1229,1226,1090,1226,1225,996,1090,1230,1231,1232,1233,1234,1172,1230,1233,1230,1173,1169,1231,1230,1172,1173,1235,1236,1237,1238,1239,1238,1237,1240,1241,1242,1243,1244,1245,1251,1250,1248,1252,1251,1245,1247,1253,1254,1255,1256,1257,1256,1255,1258,1259,1258,1255,1254,1260,1261,1172,1262,1262,1172,1263,1196,1260,1262,1264,1246,1264,1262,1265,1266,1265,1262,1263,916,919,1267,1268,1269,1268,1267,1270,1248,1270,1267,1271,1043,1271,1267,919,1248,1271,1249,1245,1249,1264,1246,1247,1196,1264,1249,1197,1043,1197,1249,1271,1228,1229,1272,1273,1274,1273,1272,1275,1276,1275,1272,965,964,965,1272,1229,966,1277,1278,1274,1275,1277,1275,1276,1279,661,1280,1281,1217,1215,1217,1281,1282,1283,1282,1281,1284,1285,1284,1281,1280,1286,1287,1288,1289,659,1289,1288,656,661,656,1288,1280,1285,1280,1288,1287,1290,1291,1292,1293,1294,1293,1292,1295,1201,1295,1292,1296,1297,1296,1292,1291,1295,1201,1202,1298,1294,1295,1298,1270,1300,1299,1269,1248,1250,1300,1270,936,1269,1299,1301,1228,1302,1303,1227,1224,1227,1303,1304,1305,1304,1303,1306, 1307,1306,1303,1302,1274,1308,1309,1273,1228,1273,1309,1302,1307,1302,1309,1310,1311,1310,1309,1308,1312,1313,1314,1315,1316,1315,1314,1317,1224,1317,1314,1225,996,1225,1314,1313,1224,1304,1318,1317,1316,1317,1318,1319,1320,1319,1318,1321,1305,1321,1318,1304,1322,1323,1312,1322,1324,1323,1325,1326,1324,1322,1327,1326,1325,1328,1316,1328,1325,1315,1312,1315,1325,1322,1327,1328,1329,1330,1331,1330,1329,1332,1320,1332,1329,1319,1316,1319,1329,1328,1323,1333,1334,1335,1336,1335,1334,1337,1338,1333,1323,1324,1339,1330,1331,1243,1327,1330,1339,1340,1334,1341,1232,1231,1337,1233,1232,1341,1342,1343,1342,1341,1344,1333,1344,1341,1334,1172,1234,1345,1263,1266,1263,1345,1346,1343,1346,1345,1342,1233,1342,1345,1234,1347,1348,1349,1350,1351,1350,1349,1352,1286,1352,1349,1287,1285,1287,1349,1348,1353,1354,1355,1356,1347,1356,1355,1348,1285,1348,1355,1284,1283,1284,1355,1354,1356,1347,1357,1358,1356,1358,1359,1353,1360,1350,1351,1361,1357,1347,1350,1360,1362,1363,1364,1365,1235,1363,1362,1236,1362,1358,1357,1236,1359,1358,1362,1365,1366,1367,1368,1369,1239,1369,1368,1370,1364,1363,1371,1372,1373,1368,1367,1368,1373,1374,1370,1243,1374,1373,1339,1340,1339,1373,1372,1375,1376,1377,1235,1376,1375,1242,1241,1378,1379,1257,1380,1380,1244,1381,1382,1380,1382,1378,1244,1380,1241,1381,1244,1331,1332,1381,1332,1320,1382,1383,1382,1320,1321,1383,1321,1305,1253,1253,1256,1379,1383,1382,1383,1379,1378,1257,1379,1256,1306,1307,1384,1385,1306,1385,1253,1305,1310,1311,1386,1387,1310,1387,1384,1307,1388,1386,1311,1389,1390,1354,1353,1389,1283,1354,1390,1278,1308,1274,1278,1390,1308,1390,1389,1311,1290,1391,1392,1393,1394,1393,1392,1395,1252,1395,1392,1251,1250,1251,1392,1391,1394,1396,1397,1393,1290,1393,1397,1291,1297,1291,1397,1398,1399,1398,1397,1396,1396,1400,1401,1399,1402,1400,1396,1394,1246,1265,1266,1404,1403,1403,1252,1247,1246,1405,1253,1385,1384,1253,1405,1254,1406,1407,1371,1377,1364,1371,1407,1408,1386,1408,1407,1409,1259,1409,1407,1406,1366,1410,1411,1412,1413,1412,1411,1414,1402,1414,1411,1400,1401,1400,1411,1410,1402,1415,1416, 1414,1413,1414,1416,1417,1416,1415,1403,1404,1259,1406,1419,1258,1257,1258,1419,1380,1376,1419,1377,1377,1419,1406,1266,1346,1420,1418,1343,1421,1420,1346,1340,1372,1422,1423,1340,1423,1424,1425,1324,1425,1424,1338,1366,1369,1426,1410,1239,1240,1426,1369,1237,1360,1361,1240,1236,1357,1360,1237,1427,1426,1240,1361,1426,1427,1401,1410,1427,1428,1399,1401,1361,1351,1428,1427,1286,1429,1430,1352,1351,1352,1430,1428,1399,1428,1430,1398,1297,1398,1430,1429,1297,1429,1431,1296,1201,1296,1431,1200,659,1200,1431,1289,1286,1289,1431,1429,993,1164,1165,990,1161,1164,993,995,1337,1231,1169,1162,1337,1162,1161,1336,1335,1432,1312,1323,995,1432,1335,1336,1433,1386,1388,1386,1433,1408,1364,1408,1433,1365,1384,1387,1434,1405,1405,1434,1409,1259,1254,1386,1409,1434,1387,1235,1377,1363,1363,1377,1371,1372,1367,1435,1422,1422,1435,1436,1423,1413,1436,1435,1412,1366,1412,1435,1367,1420,1437,1417,1418,1413,1417,1437,1436,1423,1436,1437,1424,1421,1338,1424,1437,1420,1239,1370,1438,1238,1235,1238,1438,1375,1268,936,916,1268,1269,936,881,1439,1440,897,1312,1432,994,1313,996,1313,994,995,994,1432,1441,1442,858,1140,1244,1243,1331,1370,1374,1443,1438,1438,1443,1242,1375,1243,1242,1443,1374,1324,1326,1327,1425,1425,1327,1340,1167,1444,1445,1166,1165,1166,1445,1446,1446,1445,1440,1439,1440,1445,1444,1447,1448,1196,1447,1261,1260,1447,1444,1449,1261,1261,1449,1171,1172,1167,1171,1449,1444,990,1165,1446,990,1446,1439,1450,592,591,1451,1450,1451,1452,1453,1450,1453,1454,1455,1450,1455,600,592,1456,1457,1458,1459,606,609,1458,1457,1460,1461,1462,1463,1460,1463,1464,1465,1458,1466,1467,1459,1454,1467,1466,1455,600,1455,1466,635,609,635,1466,1458,415,414,1468,1469,1470,1471,1472,445,414,426,1473,1468,1474,1475,1476,1477,1475,1474,1478,1476,1475,1479,1475,1477,1479,1480,442,443,1481,1473,426,442,1480,446,445,1472,1482,446,1482,1483,448,1484,1485,1486,1487,391,1487,1486,1488,1489,1488,1486,1485,1490,1491,1492,1493,1492,1491,1477,1494,1495,1496,1497,1484,1497,1496,1498,1499,1498,1496,1500,1501,1500,1496,1495,1492,1502,1493,1490,1493,1502,1503,1504,1503, 1502,1505,1183,726,693,1183,1505,722,967,1506,723,722,1505,1506,1505,693,692,1506,692,713,1507,1506,1507,736,723,1507,1508,737,736,713,712,1508,1507,1509,1079,1078,1510,1509,1510,755,757,755,1510,1511,1180,830,1180,1511,1512,831,1512,1511,1145,1078,1145,1511,1510,827,1512,831,834,828,827,834,1004,1513,1514,1007,1027,1026,1007,1514,1025,1515,342,341,1516,1515,1025,1027,1027,1514,1517,1516,1518,1517,1514,1513,1518,1513,1519,1520,1521,1520,1519,1522,1521,1522,1523,1524,1388,1389,1353,1359,1359,1365,1433,1388,1277,1279,1215,1282,1277,1282,1283,1278,1000,909,153,152,1525,973,972,1190,973,1525,1028,892,1395,1415,1402,1394,1252,1403,1415,1395,1250,1391,1526,1300,1299,1300,1526,1527,1294,1527,1526,1293,1290,1293,1526,1391,667,666,164,167,1336,1161,995,991,882,664,663,881,882,991,990,1439,1528,1529,1530,1531,1532,1533,1534,1531,1534,1533,1535,1536,764,1535,1533,763,760,763,1533,1532,1537,1071,1538,1539,1537,1539,583,582,465,1540,461,460,468,1541,1540,465,454,477,1542,473,473,1542,1543,470,846,478,749,748,1421,1344,1333,1338,1343,1344,1421,1544,1545,1546,1547,1544,1547,1523,922,925,1548,1549,925,924,1026,1024,383,639,1550,356,357,356,1550,641,642,641,1550,1551,638,1551,1550,639,1552,653,654,1553,390,389,653,1552,1554,1555,1556,1555,1554,1557,1553,1556,1555,1552,390,1552,1555,1558,1524,1558,1555,1557,1554,1559,1557,1559,1524,1557,1559,1560,1521,1524,1520,1521,1560,1561,1562,1561,1560,1563,1554,1563,1560,1559,1520,1561,1564,1518,1517,1518,1564,1565,1566,1565,1564,1567,1562,1567,1564,1561,1568,1516,1517,1565,1568,1565,1566,1569,1516,1568,1570,1515,342,1515,1570,1571,1572,1571,1570,1573,1569,1573,1570,1568,1572,1574,1575,1571,342,1571,1575,339,1576,339,1575,1577,1578,1577,1575,1574,1578,1579,351,1577,1576,1577,351,350,353,348,351,1579,1023,341,340,337,1580,1548,1023,1580,1581,1548,1581,1582,1549,773,1583,1584,1585,1586,1587,1588,1588,1587,1149,1152,1589,1523,1590,1589,1524,1523,1524,1591,390,1558,390,1591,1592,1590,1593,1589,1524,1589,1591,1592,1591,1589,1593,1594,1595,1547,1546,391,1596,1597,392,1598,392,1597,1599,614,1599,1597, 615,1462,1597,1596,1597,1462,615,1464,1463,1600,1601,1602,1601,1600,1603,1489,1603,1600,1604,1462,1604,1600,1463,1602,1603,1605,1606,1605,1485,1484,1498,1489,1485,1605,1603,1607,626,404,403,1608,412,411,626,624,620,621,1609,1610,1611,1610,1609,1612,629,1612,1609,630,630,1609,621,632,597,596,1613,1133,617,1133,1613,618,618,1613,632,621,1614,1615,628,631,1614,631,599,598,1616,1617,1615,1614,1616,1614,598,605,1618,1619,1617,1616,407,433,1620,410,1620,1621,398,410,1622,398,1621,1623,432,1623,1621,431,433,431,1621,1620,1622,1623,1624,1625,1474,1476,1626,1627,448,1627,1626,449,432,447,1624,1623,1477,1474,1628,1492,1477,1491,1629,1479,1478,1479,1629,1630,1490,1630,1629,1491,391,1631,1632,1487,1632,1490,1633,1484,1632,1484,1487,1490,1632,1631,1478,1630,1634,394,391,394,1634,1631,1490,1631,1634,1630,1635,1628,1474,1627,1635,1627,448,1483,397,405,410,398,1636,1637,1638,1638,1637,1608,403,844,1049,850,850,1049,1002,1030,759,1530,513,512,553,559,1639,555,555,1639,1640,556,513,1640,1639,510,510,1639,559,511,1530,1529,1640,513,1641,1642,569,561,562,569,1642,1643,547,499,1643,1642,499,1642,1641,572,496,547,1643,1644,548,548,1644,1645,549,1645,1644,498,501,498,1644,1643,499,1646,459,463,1647,469,460,459,1646,1648,889,891,1649,1647,463,889,1648,470,1650,1651,471,475,471,1651,1652,1653,1652,1651,1654,1655,1654,1651,1650,1656,1650,470,1543,1655,1650,1656,891,1029,1657,1649,836,1658,1659,1066,1660,1661,1540,1541,1540,1661,976,461,904,976,1661,927,840,927,1661,1660,1125,847,872,846,1125,476,478,476,1125,1662,477,467,1662,1125,872,477,1662,1663,1542,1542,1663,1664,1543,469,1664,1663,466,467,466,1663,1662,1543,1664,1665,1656,1656,1665,1666,1655,1647,1666,1665,1646,469,1646,1665,1664,1655,1666,1667,1654,1654,1667,1668,1653,1649,1668,1667,1648,1647,1648,1667,1666,1653,1668,1669,1649,1657,1669,1668,873,1111,1670,871,871,1670,1541,468,1111,1658,1671,1670,1670,1671,1660,1541,840,1660,1671,838,836,838,1671,1658,738,737,757,756,1508,1509,757,737,1079,1509,1508,712,711,1080,1079,712,714,1081,1080,711,1176,1082,1081,1181,1192,1176,1181,687,1192, 687,690,1012,1659,738,756,1066,1111,1110,1659,1658,1637,1636,1619,1618,1637,1618,604,1608,1607,1608,604,603,888,887,817,1672,570,567,568,1114,570,1114,1115,571,752,807,753,874,877,1673,1674,505,1674,1673,751,752,751,1673,877,1675,727,726,1179,1675,1676,1677,720,1179,622,952,1676,1675,899,901,1037,412,1678,409,413,1001,870,423,434,1678,870,1678,1001,868,590,595,613,612,590,612,1461,591,1451,591,1461,1460,1451,1460,1465,1452,1462,1596,1679,1604,1489,1604,1679,1488,391,1488,1679,1596,1484,1633,1680,1497,1494,1497,1680,1681,1504,1681,1680,1503,1490,1503,1680,1633,1682,1683,945,944,326,316,329,328,313,316,326,903,974,975,977,977,975,464,462,1223,1021,743,744,1223,744,745,957,839,1684,926,926,1684,819,902,818,788,866,819,839,837,1097,837,836,573,1097,839,1098,1684,819,1684,1098,820,942,1218,1685,943,1138,1685,1218,979,1686,989,1687,1685,1138,944,1687,1688,1682,988,1688,1687,989,1689,515,518,556,1689,556,1640,1529,1690,1127,1691,1692,1693,1694,1695,1696,489,483,1697,1698,483,482,1699,1697,1220,960,1692,1700,482,1220,1700,1699,852,851,1689,1529,1528,851,515,1689,384,386,385,1701,716,707,1690,1702,716,1701,1703,1704,1705,1706,1706,1705,922,1549,922,1705,1707,923,1708,1100,923,1707,1708,1707,1074,1073,1073,1107,1709,1708,1100,1708,1709,1101,1101,1709,1710,1103,822,1710,1709,1107,1697,1699,1711,1086,959,1693,1692,960,1712,365,946,346,1712,345,946,332,345,1712,1700,1692,1696,1713,584,375,358,382,1595,1594,1586,1714,1585,1588,1715,1716,1717,1716,1715,1718,1152,1718,1715,1588,1717,1719,1720,1716,1585,1716,1720,1721,1722,1714,1721,1721,1714,1586,1585,1593,1590,1723,1724,1592,1593,1722,1723,1590,1547,1595,369,1725,370,1592,387,390,1724,369,387,1592,1719,1717,582,371,1537,582,1717,1726,1727,959,941,1728,1729,336,1730,324,1731,562,325,1731,1732,1641,562,572,1641,1732,1733,313,1732,314,1732,313,1733,330,314,1732,1731,558,1734,327,557,328,327,1734,313,874,1735,1736,875,530,875,1736,528,525,528,1736,531,537,531,1736,1735,537,540,1737,536,317,536,1737,318,874,1674,1735,505,537,1735,1674,315,330,329,316,319,1738,312,323,319,318,1738,1737, 1739,1738,318,312,1738,1739,1740,540,1740,1739,1737,312,1740,321,540,502,321,1740,313,1734,1733,1733,1734,558,572,1152,1146,1741,1718,1717,1718,1741,1726,1020,1726,1741,1019,1017,1019,1741,1146,1742,1150,1149,1587,1742,1587,1586,1594,1148,1158,1160,1017,1158,1148,1151,1742,1594,1546,1153,1150,1742,1153,1155,884,1206,1743,883,664,883,1743,665,666,665,1743,1214,1120,1214,1743,1206,884,878,1744,1205,1158,1205,1744,1159,798,1157,1744,878,1150,1155,1745,1151,1151,1745,1203,1158,1118,1203,1745,1746,1154,1746,1745,1155,1747,1746,1154,1748,1118,1746,1747,1119,1153,1749,1748,1154,1750,333,1694,1693,1694,333,946,1694,946,365,385,1695,1727,1750,1693,959,1083,1086,1711,1751,1697,1086,1085,1698,1713,1696,1752,1753,1696,1695,1754,1752,1690,1536,1701,765,766,1084,1083,765,1083,1751,764,1752,1754,1702,1703,1703,1755,1753,1752,1713,1753,1755,1751,1711,1535,764,1751,1755,1536,1535,1755,1703,1701,386,377,1702,1754,385,386,1754,1695,717,716,1702,377,376,717,376,378,718,805,1756,1757,769,1039,1038,1756,1758,1075,1757,1756,1038,1704,770,1759,1582,988,769,1757,1759,770,1188,1135,1134,1760,1761,1136,1762,1136,1761,804,999,804,1761,1763,805,1584,1763,1761,1760,805,1763,1758,1756,1583,1758,1763,1584,1764,1765,1766,855,933,1767,843,932,1075,1767,933,1076,1767,1583,773,843,1583,1767,1075,1758,856,1768,1769,1141,1768,493,492,1769,1770,867,778,777,778,867,790,1442,142,149,1771,857,858,1442,1771,143,142,1442,144,143,1442,1441,1706,1759,1757,1704,1549,1582,1759,1706,1581,1688,988,1582,1688,1581,1580,1682,721,1772,938,698,1773,671,938,1772,1677,1772,721,720,816,1774,1672,817,1676,885,888,1677,952,1775,885,1676,1677,888,1672,1773,1772,1774,1776,1773,1672,686,1776,1774,682,588,1777,603,589,603,1777,1778,1607,1607,1778,627,626,627,1778,1775,952,1522,1779,1544,1523,1544,1779,1780,1545,1781,1782,1780,1779,1780,1782,1783,1784,1783,1785,1786,1784,1749,1784,1786,1787,1748,1788,1787,1786,1785,1748,1787,1789,1747,1747,1789,1119,1789,1790,1207,1119,1788,1790,1789,1787,1519,1003,1781,1781,1003,1006,1782,1782,1006,1103,1783,1764,1791,1762,1765,774,1791,1792,775, 775,1792,1793,1770,778,1793,1792,1794,1795,1794,1792,1791,1764,1794,854,857,1795,1764,855,854,1794,856,855,1766,1768,1136,1135,1765,1762,1765,1135,1796,1766,1766,1796,493,1768,1796,490,493,1797,1795,857,1771,1793,1795,1797,1770,1770,1797,1798,867,1208,1799,1800,1213,1213,1800,263,164,1801,1802,1799,1208,157,264,1803,1009,1010,1009,1803,1804,1799,1804,1803,1800,263,1800,1803,264,1010,1804,1805,1799,1802,1805,1804,928,1806,929,1092,929,1806,1802,1208,1211,1801,1088,908,1010,1805,1806,1805,1802,1134,1807,1187,1188,1808,1807,998,1137,978,564,1808,1686,979,978,1686,1187,1807,563,1092,1802,1801,1211,1093,1210,824,823,1210,1093,1092,1211,333,1750,1809,334,1810,334,1809,1730,1811,940,945,1728,1727,941,940,1811,1728,945,1683,1729,1811,1809,1750,1727,1728,1730,1809,1811,730,672,673,685,732,672,730,731,732,731,676,675,677,676,705,718,583,674,677,585,585,584,372,583,584,382,373,372,382,381,379,373,649,379,381,640,649,640,643,650,1812,674,1539,1538,1539,674,583,675,674,1812,1070,1102,1538,1071,689,1065,1813,1102,1102,1813,1812,1538,1710,1785,1783,1103,822,1788,1785,1710,1207,1790,825,1196,1198,1448,1447,1045,1175,1448,1198,1815,1814,1816,1817,1819,1820,1818,1818,1821,1822,1819,1817,1816,130,122,1823,1824,1818,1826,1827,1828,1825,1826,1829,1815,1827,1815,1830,1132,1823,1830,1829,1831,1831,1832,1824,1823,969,1131,1820,1819,1820,1131,1132,1830,1814,1129,811,1122,1815,1132,1129,1814,1818,1824,1833,1821,1818,1820,1830,1823,1815,1829,1830,1834,1828,1827,1815,1817,1834,1827,1834,125,126,1828,985,969,1819,1822,985,1822,984,107,108,1835,1836,1837,1836,1835,1838,1839,1838,1835,1840,109,1840,1835,108,109,114,1841,1840,1839,1840,1841,1842,119,1842,1841,1843,115,1843,1841,114,1844,115,116,1845,117,1845,116,135,136,1846,1182,1060,1182,1846,1847,1837,1847,1846,1836,107,1836,1846,136,119,1843,1848,120,1848,1843,115,1844,1837,1838,1849,1850,85,1850,1849,84,83,84,1849,1851,1839,1851,1849,1838,1839,1842,1852,1851,83,1851,1852,100,93,100,1852,118,119,118,1852,1842,1060,1847,1853,1057,127,1057,1853,128,85,128,1853,1850,1837,1850,1853,1847,1854,1855, 1856,1857,1854,1857,167,178,1855,660,1216,1858,1859,1860,206,295,1859,295,296,1861,667,1862,1863,964,1276,964,1863,1864,1856,1864,1863,1862,1858,1279,1276,1864,1858,1864,1856,1855,1857,1862,667,167,1856,1862,1857,1854,1865,660,1855,1860,1865,1854,178,177,206,1860,178,1860,1859,1866,1867,1866,1859,1861,1868,300,935,1869,1870,253,300,296,1870,1869,1861,253,1870,294,296,207,294,1870,1860,1866,1871,1865,660,1865,1871,657,658,657,1871,1872,1867,1872,1871,1866,1867,1873,1874,1872,658,1872,1874,1199,1202,1199,1874,1875,1868,1875,1874,1873,1299,1527,1876,1301,1294,1298,1876,1527,1873,1867,1861,1869,1873,1869,300,1868,1877,1875,1868,935,1298,1202,1875,1877,1876,1878,935,936,1878,936,1301,935,1878,1877,1876,1877,1878,1301,164,263,165,1825,1879,1880,1826,718,378,585,677,703,685,684,683,731,704,705,676,1064,696,697,1690,707,1127,787,135,1182,1142,130,1816,1061,127,1816,1814,1122,1061,1834,1817,122,125,1537,1726,1020,1071,1018,1016,1014,1019,1160,1156,1016,1018,1017,1160,1018,1808,1137,1138,1686,1760,1762,1791,774,773,1584,1760,774,1074,1707,1705,1704,1074,1704,1038,1040,925,1024,1023,1548,521,523,519,520,517,551,554,518,1534,1691,1528,1531,1534,1536,1690,1691,1127,852,1528,1691,1532,1531,1530,759,760,1532,759,758,761,760,758,1104,768,761,1104,1105,1440,1448,1175,897,679,684,686,682,719,727,1675,720,694,727,719,695,1773,1776,668,671,668,1776,686,673,703,683,709,702,702,709,516,699,405,404,411,408,626,411,404,586,589,605,598,1618,1616,605,604,599,632,1613,596,947,1113,1126,948,1115,1108,1109,1778,1777,886,1775,1777,588,886,870,435,424,423,433,407,409,1678,434,688,735,1065,689,728,675,1812,1813,1065,729,728,1813,827,830,1512,335,1810,1730,336,347,331,334,1810,335,350,347,1810,1700,1713,1711,1699,1712,346,365,527,526,523,522,311,324,323,312,329,330,1731,324,311,1807,1134,999,998,749,478,456,480,395,398,1622,395,1622,1625,299,297,785,934,118,121,94,93,102,97,96,95,1880,1832,1831,1826,1880,1831,1829,335,338,1576,350,1576,338,340,339,1519,1513,1004,1003,1858,1216,1215,1279,1499,1606,1605,1498,612,615,1462,1461,1881,1882,1883,1884,1885, 1886,1883,1882,1887,1888,1883,1886,1889,1884,1883,1888,1881,1884,1890,1891,1889,1892,1890,1884,1890,1892,1893,1894,1891,1895,1896,1897,1898,1899,1896,1900,1901,1895,1902,1900,1896,1885,1882,1900,1902,1881,1901,1900,1882,1897,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1910,1909,1914,1915,1910,1913,1916,1911,1910,1915,1916,1915,1917,1918,1914,1919,1917,1915,1920,1921,1917,1919,1922,1918,1917,1921,1923,1924,1925,1926,1927,1928,1929,1930,1929,1928,1931,1893,1892,1889,1930,1929,1892,1932,1933,1934,1935,1927,1930,1934,1933,1889,1888,1934,1930,1887,1935,1934,1888,1936,1937,1938,1939,1940,1941,1938,1937,1912,1909,1938,1941,1908,1939,1938,1909,1942,1943,1936,1939,1942,1939,1908,1944,1945,1946,1947,1948,1949,1950,1951,1948,1951,145,144,1952,1953,1954,1955,1952,1955,1950,1949,1956,1957,1950,1955,1954,1956,1955,1958,1959,1960,1961,1958,1961,1962,1963,1964,1960,1959,1965,1964,1965,1966,1967,1951,1950,1957,1968,1951,1968,163,145,1969,1970,1946,1971,1972,1973,1974,1975,1976,1977,1974,1973,1978,1979,1974,1977,1980,1975,1974,1979,1970,1969,1981,1982,1983,1984,1985,1986,1987,1988,1985,1984,1989,1990,1985,1988,1991,1986,1985,1990,1992,1993,1994,1995,1992,1995,1996,1997,1998,1954,1966,1999,1997,1998,1999,1959,2000,2001,1965,1993,1992,2001,2000,1997,1999,2001,1992,1966,1965,2001,1999,2002,1994,1993,2003,2003,1993,2004,2002,2003,1963,2005,2005,1963,2006,2007,2006,1946,1970,2007,2002,2005,1983,1986,2002,1986,1991,1994,1983,2008,2009,1984,1982,2010,2009,2008,2011,2012,2009,2010,2013,2014,2009,2012,1987,1984,2009,2014,1983,2005,2007,2008,2007,1970,1982,2008,2015,2016,2017,2018,1987,2014,2017,2016,2013,2019,2017,2014,2020,2018,2017,2019,2021,2022,2023,2024,2025,2026,2023,2022,2027,2028,2023,2026,2029,2024,2023,2028,2025,2022,2030,2031,2021,2032,2030,2022,2033,2034,2030,2032,2035,2031,2030,2034,2036,2037,2038,2039,2040,2041,2038,2037,2042,2043,2038,2041,2044,2039,2038,2043,1954,1998,2045,1956,1997,2046,2045,1998,2047,2048,2045,2046,1957,1956,2045,2048,2039,2044,245,2049,2039,2049,2050,2036,2049,245,248,2051,2049,2051,2047,2050,1944, 2052,2053,1942,2054,2055,2053,2052,2056,2057,2053,2055,1943,1942,2053,2057,2058,2059,2060,2061,1991,1990,2060,2059,1989,2062,2060,1990,2063,2061,2060,2062,1995,1994,1991,2059,1995,2059,2058,1996,1957,2048,2064,1968,2047,2051,2064,2048,248,262,2064,2051,163,1968,2064,262,2065,1947,1946,2006,2065,2006,1963,1962,1963,2003,2004,1958,1993,2000,2004,1959,1958,2004,2000,1966,1954,1953,1967,2066,2067,2068,2069,1989,1988,2068,2067,1987,2016,2068,1988,2015,2069,2068,2016,2063,2062,2070,2071,1989,2067,2070,2062,2066,2071,2070,2067,2040,2072,2073,2041,2035,2034,2073,2072,2033,2074,2073,2034,2042,2041,2073,2074,2075,2050,2047,2046,2075,2046,1997,1996,2076,2036,2050,2075,2076,2075,1996,2058,2040,2037,2077,2078,2036,2076,2077,2037,2058,2061,2077,2076,2063,2078,2077,2061,2040,2078,2079,2072,2063,2071,2079,2078,2066,2080,2079,2071,2035,2072,2079,2080,2015,2081,2082,2069,2025,2031,2082,2081,2035,2080,2082,2031,2066,2069,2082,2080,2025,2081,2083,2026,2015,2018,2083,2081,2020,2084,2083,2018,2027,2026,2083,2084,2054,2052,2085,2086,1944,2087,2085,2052,1976,1973,2085,2087,1972,2086,2085,1973,2027,2088,2089,2028,1972,1975,2089,2088,1980,2090,2089,1975,2029,2028,2089,2090,2020,2091,2092,2084,2054,2086,2092,2091,1972,2088,2092,2086,2027,2084,2092,2088,2054,2091,2093,2055,2020,2019,2093,2091,2013,2094,2093,2019,2056,2055,2093,2094,2013,2012,2095,2096,2011,2095,2012,2097,1936,1943,2098,2098,1943,2057,2099,2087,1944,1908,1911,2087,1911,1916,1976,1977,1976,1916,1918,1977,1918,1922,1978,2100,2101,2102,2103,1899,1901,2101,2100,1881,1891,2101,1901,2101,1891,1894,2102,1903,1899,2100,2104,2104,2100,2103,2105,1904,1903,2104,2106,2106,2104,2105,2107,2108,2109,2110,2111,2112,2108,2111,2113,2114,2115,2116,2117,2118,2114,2119,2120,2115,2121,2122,2123,2124,2125,2121,2124,2126,2122,2121,2125,2127,2128,2129,2130,2129,2128,2131,2132,2133,2134,2135,2133,2132,2136,2137,2138,2114,2118,2139,2119,2114,2138,2128,2136,2119,2131,2127,2137,2136,2128,2140,2122,2126,2116,2115,2140,2120,2123,2140,2115,2140,2123,2122,2141,2142,2143,2144,2142,2145,2146,2143,2147,2148,2141, 2144,2147,2149,2150,2148,2148,2150,2151,2152,2150,2149,2153,2154,2153,2155,2156,2154,2151,2150,2154,2146,2157,2158,2159,2158,2160,2161,2158,2157,2160,2162,2158,2161,2163,2159,2158,2162,2164,2165,2166,2167,2144,2143,2168,2169,2144,2169,2170,2147,2146,2159,2168,2143,2168,2159,2162,2171,2172,2169,2168,2171,2173,2174,2166,2165,2175,2176,2177,2178,2179,2180,2181,2182,2180,2183,2177,2184,2185,2186,2187,2188,2185,2188,2160,2189,2190,2191,2192,2193,2190,2192,2194,2187,2195,2196,2188,2197,2198,2196,2195,2163,2161,2196,2198,2160,2188,2196,2161,2190,2199,2200,2201,2191,2183,2202,2203,2204,2177,2183,2204,2178,2178,2204,2205,2206,2204,2203,2207,2205,2208,2209,2199,2190,2184,2177,2176,2210,2202,2182,2195,2187,2181,2197,2195,2182,2185,2189,2211,2212,2186,2185,2212,2212,2211,2213,2208,2190,2214,2215,2214,2216,2217,2215,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2220,2229,2220,2228,2230,2221,2231,2232,2233,2234,2231,2234,2235,2236,2237,2238,2230,2239,2240,2238,2237,2241,2242,2243,2244,2245,2246,2247,2246,2245,2232,2248,2249,2250,2247,2246,2250,2246,2249,2251,2237,2240,2252,2253,2252,2240,2254,2255,2252,2255,2231,2236,2255,2248,2232,2231,2256,2236,2235,2257,2258,2259,2245,2244,2259,2233,2232,2245,427,430,2260,2261,2260,430,438,2262,2235,2234,2260,2262,2233,2261,2260,2234,2254,2263,2248,2255,2253,2252,2236,2256,2257,2235,2262,2264,439,2264,2262,438,427,2261,2265,440,2233,2259,2265,2261,2258,2266,2265,2259,443,440,2265,2266,2267,2268,2269,2270,2249,2248,2263,2271,2272,2268,2267,2273,2274,2275,2276,2277,2278,2274,2277,2279,450,2280,2281,451,2278,2282,2281,2280,2283,2284,2281,2282,458,451,2281,2284,2285,2286,2283,2287,2288,1653,2289,2290,2291,2288,2290,2292,2293,2294,2295,2296,2295,2294,2297,2298,2298,2299,2300,2301,2299,2302,2303,2300,2275,2274,2304,2305,2278,2280,2304,2274,450,474,2304,2280,475,2305,2304,474,2278,2279,2306,2282,2306,2287,2283,2282,481,458,2284,2307,2284,2283,2286,2307,754,488,2308,2309,2310,2308,2311,2312,2309,2313,2314,2311,2315,2311,2314,2316,2312,489,2315,2311,487,2314,2313,2317,2318,2316,2317,2319,2320, 2318,2321,2322,2323,2324,2323,2322,2325,2326,1645,501,2323,2326,500,2324,2323,501,2327,2328,2329,2330,2328,2327,2331,2332,2333,2328,2332,2334,2328,2333,2335,2329,2336,2337,2338,2321,2339,2139,2118,2340,2341,2334,2332,2342,2343,2342,2332,2331,2344,2345,2346,2347,2348,2344,2347,2349,2350,2349,2347,2351,2352,2350,2351,2353,2352,2353,2354,2354,2355,2352,2349,2350,2352,2355,2356,2357,2358,2359,2358,2360,2361,2354,2358,2357,2360,2356,2362,2363,2364,2365,2366,2363,2362,2130,2367,2363,2366,2368,2364,2363,2367,2369,2370,2366,2365,2370,2127,2130,2366,2139,2371,2372,2138,2139,2339,2368,2371,541,2373,2374,542,2341,2342,2374,2373,2343,2375,2374,2342,546,542,2374,2375,2376,2377,2326,2325,2341,2373,2377,2376,541,549,2377,2373,2377,549,1645,2326,2353,2351,2378,2359,2347,2346,2378,2351,2365,2362,2378,2346,2356,2359,2378,2362,2379,2380,2335,2381,2133,2137,2379,2381,2127,2370,2379,2137,2369,2380,2379,2370,2322,2382,2325,2322,2321,2338,2383,2382,2344,2384,2385,2345,2385,2384,2330,2329,2380,2385,2329,2335,2369,2345,2385,2380,500,571,2386,2324,2386,2336,2321,2324,2345,2369,2365,2346,2387,2134,2133,2381,2333,2387,2381,2335,2387,2333,2334,2388,2134,2387,2388,2382,2383,2118,2117,2337,2340,2389,2390,2391,2391,2390,2392,2112,2310,2309,2393,2394,2312,2395,2393,2309,2396,2340,2337,2336,2388,2376,2325,2382,2341,2376,2388,2334,2397,2398,2399,2400,2401,2402,2399,2398,2403,2404,2399,2402,2405,2400,2399,2404,2201,2200,2406,2407,2178,2206,2408,2179,2409,2194,2192,2409,2192,2191,2410,2411,2412,2413,2414,2411,2414,2415,2416,2417,2411,2416,2418,2419,2420,2421,2422,2419,2422,2423,2424,2414,2413,2425,2426,2414,2426,2427,2415,2428,2429,2420,2419,2428,2419,2424,2430,2412,2411,2417,2431,2432,2433,2434,2435,2434,2433,2436,2437,2438,2434,2437,2439,2440,2435,2434,2438,2441,2442,2443,2444,2441,2445,2446,2442,2447,2448,2449,2450,2451,2447,2450,2452,616,619,2447,2451,620,2448,2447,619,2242,2453,2454,2455,2456,2457,2455,2454,2458,2459,2460,2461,2427,2449,2460,2459,2460,2449,2448,2462,2463,2461,2460,2462,2464,2465,2218,2222,2466,2429,2428,2437,2436,2430,2439,2437, 2428,2162,2163,2467,2171,2468,2469,2470,2471,2468,2471,2197,2181,2184,2210,2472,2473,2472,2474,2475,2473,2470,2476,2477,2471,2478,2467,2477,2476,2163,2198,2477,2467,2197,2471,2477,2198,2209,2208,2479,2480,2479,2481,2482,2480,2217,2483,2484,2215,2485,2486,2484,2483,2481,2479,2484,2486,2208,2215,2484,2479,2487,2488,2489,2490,2488,2491,2492,2489,2493,2494,2495,2496,2497,2498,2499,2500,2498,2501,2502,2499,2503,2504,2505,2506,2206,2507,2508,2408,2508,2509,2510,2511,2354,2512,2513,2514,2515,2516,2513,2512,2517,2514,2513,2518,2519,2517,2518,2520,2520,2518,2521,2497,2522,2523,2524,2525,2522,2525,2526,2527,2528,2522,2527,2529,2522,2528,2530,2523,2531,2532,2533,2534,2535,2531,2534,2536,2537,2531,2535,2538,2525,2524,2539,2540,2541,2542,2543,2537,2541,2537,2538,2544,2545,2544,2538,2546,2545,2546,2547,2548,2519,2549,2550,2517,2549,2551,2349,2550,2551,2549,2552,2553,2519,2554,2552,2549,2555,2556,2552,2554,2557,2553,2552,2556,2354,2514,2558,2355,2517,2550,2558,2514,2349,2355,2558,2550,2534,2533,2559,2560,2561,2536,2534,2560,2557,2556,2562,2563,2555,2507,2562,2556,2205,2562,2507,2206,2545,2564,2565,2544,2566,2501,2498,2567,2567,2498,2497,2521,2568,2506,2505,2569,2526,2535,2536,2527,2541,2544,2565,2570,2541,2570,2571,2542,2539,2524,2572,2573,2519,2520,2574,2574,2520,2497,2500,2519,2574,2575,2554,2554,2575,2509,2555,2576,2500,2499,2573,2577,2526,2525,2540,2537,2543,2532,2531,2529,2527,2536,2561,2503,2578,2579,2504,2579,2578,2580,2581,2582,2583,2586,2587,2583,2584,2585,2586,2285,2588,2589,2590,2339,2340,2591,2592,2591,2593,2594,2592,491,495,2595,2596,2581,2580,2405,2597,2598,2331,2327,2599,2600,2601,2598,2599,2602,2598,2601,2603,2343,2331,2598,2602,2599,2327,2330,2604,2603,2605,2606,2607,2608,2609,2606,2605,766,767,2606,2609,768,2607,2606,767,2610,2611,2612,2613,2614,2615,2611,2610,2611,2615,2616,2617,2612,2611,2617,2618,2619,2620,2621,2622,2623,2624,2619,2623,2625,2626,2627,2619,2624,2628,2620,2619,2627,2629,2294,2293,2630,2297,2294,2629,2631,779,2632,2633,780,2634,2635,2633,2632,2257,2264,2633,2635,439,780,2633,2264,2584,2097,2098, 2636,2637,2638,2583,2582,2638,2097,2584,2583,2640,2297,2631,2641,2642,2640,2641,2643,1967,1953,2644,2645,2585,2584,2636,2646,2647,2648,2649,2650,2651,2647,2650,2652,2653,2654,2647,2651,2655,2648,2647,2654,2656,2657,2650,2649,2658,2652,2650,2657,2614,2659,2660,2615,2660,2659,2661,2662,2663,2664,2660,2662,2615,2660,2664,2616,2665,2666,2667,2668,2630,2665,2668,2669,2665,2630,2293,2670,2666,2665,2670,2671,2672,2594,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2680,2683,2684,2681,2360,2685,2686,2515,2685,2672,2687,2686,2688,2689,2690,2691,2692,2688,2691,2693,2694,2695,2696,2697,2698,2699,2694,2697,2700,2639,2694,2701,2750,2694,2699,2701,2639,2695,2694,2702,2703,2704,2705,2706,2707,2708,2702,2706,2709,2710,2703,2702,2708,2403,2711,2712,2713,2711,2714,2715,2712,2716,2717,2718,2719,2715,2720,2718,2717,2655,2654,2718,2720,2653,2719,2718,2654,2723,2724,3014,2397,2724,2725,2726,3014,2727,2728,2627,2626,2728,2729,2628,2627,2588,2730,2731,2732,2733,2734,2568,2792,2732,2731,2733,2735,2551,2736,2737,2348,2349,2738,2739,2740,2741,2739,2742,2743,2740,2744,2745,2746,2747,2834,2833,2746,2745,2836,2748,2749,2634,2632,2748,2632,779,865,2639,2750,2837,2644,1953,2751,2635,2634,2752,2753,2635,2753,2256,2257,2303,2302,2754,2755,2754,2756,2757,2755,2758,2759,2760,2761,2760,2594,2672,2760,2759,2594,2672,2685,2760,2360,2761,2760,2685,2656,2762,2763,2764,2765,2766,2763,2762,2496,2767,2763,2766,2768,2764,2763,2767,2769,2770,2771,2772,2769,2772,2773,2313,2774,2775,2317,2317,2775,2776,2319,2777,2671,2670,2778,2778,2670,2293,2296,2779,2780,2781,2782,2780,2744,2747,2781,2765,2762,2783,2784,2656,2649,2783,2762,2783,2649,2648,2785,2784,2783,2785,2786,2787,2624,2625,2788,2789,2787,2662,2661,2790,2791,2792,2793,2794,2795,2796,2797,2689,2796,2795,2798,2799,2800,2801,2802,2803,2804,1952,1949,2805,2806,2804,2741,2807,2804,2806,2751,1953,1952,2645,2644,2808,2809,2808,2628,2729,2809,2672,2674,2771,2687,2810,2811,2812,2774,2810,1698,1085,2811,2815,2813,2814,2816,2676,2817,2818,2677,2817,2676,2819,2820,2821,2822,2823,2824,2825,2645,2826,2827,2828,2829,2827, 2826,2830,2831,2827,2829,2832,2833,2834,2835,2837,2835,2834,2836,2838,2839,2840,2841,2840,2839,2842,2843,2844,2840,2843,2845,2846,2841,2840,2844,2847,2827,2831,1960,1964,2847,1967,2645,2847,1964,1967,2645,2827,2847,2848,2796,2689,2688,2813,2815,2849,2850,2849,2726,2725,2850,2851,2852,2853,2854,2855,2818,2853,2852,2853,2818,2817,2856,2857,2854,2853,2856,2858,2646,2636,2859,2862,2859,2860,2861,2862,2547,2502,2501,2548,2863,2864,2865,2866,2864,1971,1945,2865,2863,2866,2867,2868,2869,2870,2871,2868,2871,2872,2873,2146,2145,2874,2875,2812,2876,2877,2878,2875,2878,2824,2823,2879,2880,2881,2882,2881,2880,950,949,2883,2884,2773,2885,2883,2885,2464,2466,2457,2883,2466,2455,2456,2884,2883,2457,2593,2886,2887,2673,2695,2888,2889,2696,2639,2890,2888,2695,2891,2892,2888,2890,2888,2892,2893,2889,2320,2319,2800,2870,2745,2744,2679,2988,2836,2745,2988,2962,2816,2669,2837,2750,2780,2779,2683,2680,2744,2780,2680,2679,2894,2895,2896,2897,2898,2899,2894,2897,2900,2494,2895,2894,2899,2568,2569,2793,2792,2901,2902,3054,3053,2779,2901,3053,2683,2837,2669,2668,2835,2668,2667,2832,2835,2814,2669,2816,2813,2631,2629,2814,2312,2316,2903,2395,2769,2904,2905,2770,2884,2904,2769,2773,2904,2884,2456,2906,2907,2905,2904,2907,2908,982,983,2910,2782,983,984,2909,2910,2568,2734,2722,2506,2612,2618,2911,2912,2613,2612,2912,2913,2914,2915,2916,2917,2918,2919,2916,2915,2920,2921,2922,2493,2917,2916,2920,2775,2774,2812,2875,2923,2795,2794,2924,2925,2923,2924,2926,2923,2925,2927,2928,2929,2930,2931,2616,2664,2932,2933,1961,2934,1962,2452,2882,2881,2451,2881,949,616,2451,2673,2887,2425,2413,2935,2936,2937,2938,2753,2752,2939,2940,1936,2097,2638,1937,2638,2637,1940,1937,2941,2942,2931,2930,2743,2942,2941,2943,2924,2794,2944,2945,2946,2926,2924,2945,2947,2674,2673,2413,2412,2315,2810,2774,2313,489,1698,2810,2315,2934,2948,2949,1962,2831,2830,2948,2934,865,481,2307,2748,2307,2286,2749,2748,2950,2951,2952,2953,2658,2954,2952,2951,2955,2956,2957,2958,2953,2952,2956,2721,2503,2506,2722,2585,2646,2846,2959,2960,2961,2866,2865,1945,1947,2960,2865,2962,2587,2891, 2587,2962,2988,2987,2963,2964,2797,2965,2156,2963,2965,2966,2965,2797,2796,2848,2965,2848,2967,2966,2671,2777,1029,1028,2940,2939,2968,2241,2969,2696,2889,2970,2971,2970,2889,2893,2241,2968,2972,2242,2099,2973,2860,2859,2099,2859,2636,2098,2974,2820,2819,2975,2976,2974,2743,2943,2977,2740,2977,2943,2625,2623,2807,2977,2623,2622,2354,2361,2512,2512,2361,2360,2515,2978,2843,2842,2979,2980,2981,2843,2978,2982,2845,2843,2981,2589,2588,2732,2983,1050,1051,2833,2832,2980,2984,2985,2981,2655,2720,2985,2984,2715,2986,2985,2720,2982,2981,2985,2986,2779,2782,2910,2901,2910,2909,2902,2901,2320,2870,2869,2679,2682,2987,2988,1932,2989,2990,2991,2989,2992,2993,2990,2994,2995,2845,2982,2844,2845,2995,2996,2405,2580,2997,2400,2997,2723,2397,2400,2752,2634,2590,2589,2969,2998,2697,2696,2401,2700,2697,2998,2815,2816,2750,2701,2999,2530,2950,2953,2999,2953,2958,3000,2820,3001,3002,2821,2560,2559,3003,3004,2560,3004,3005,2561,3006,2811,1085,1084,3006,2876,2812,2811,2851,3007,3008,2852,2830,2829,3008,3007,2828,3009,3008,2829,2855,2852,3008,3009,2922,2494,2493,2920,2922,2895,2494,2922,2921,3010,2895,2922,3010,2896,2856,2817,2821,3011,2707,2858,2856,3011,2708,2771,2674,2412,2772,2944,2794,2797,2964,2401,2998,3012,2402,2969,3013,3012,2998,2714,2711,3012,3013,2403,2402,3012,2711,2397,3014,3015,2398,2726,3016,3015,3014,2698,2700,3015,3016,2401,2398,3015,2700,2340,2396,3017,2591,3017,2886,2593,2591,2862,2841,2846,2646,2862,2861,2838,2841,2923,2928,2798,2795,2972,2968,2735,2733,2792,2791,2999,3000,3018,3019,2999,3019,2523,2530,2928,2927,3020,3021,2798,2928,3021,3022,2343,2602,3023,2375,3023,2602,2603,2607,768,1105,3023,2607,546,2375,3023,1105,3002,3024,3011,2821,2710,2708,3011,3024,3025,3026,2618,2617,2618,3026,2903,3027,2911,3028,1109,950,2880,3029,3028,2880,2879,2690,2689,2798,3022,3030,3031,3032,3033,3031,3030,3034,3035,3018,3036,2511,3037,3036,3018,3000,3038,2886,3017,3029,2879,2396,3039,3029,3017,1115,3028,3029,3039,3040,3041,3042,3043,3041,2389,3044,3042,3045,3046,2681,2684,3046,3047,2682,2681,2757,2731,2730,3048,2634,2749,2590,2879,2882, 2887,2886,2736,2551,2553,3049,2736,2553,2557,2582,2587,2987,3050,2987,2682,3047,3050,3051,3052,3053,3054,3052,2684,2683,3053,2452,2425,2887,2882,2828,2826,2809,2729,2645,2809,2826,2663,2662,2787,2788,2589,2983,2939,2752,2742,2739,1139,1141,2739,2738,1140,1139,2637,2582,3050,3055,3050,3047,2993,3055,2653,3056,3057,2719,3005,3004,3057,3056,3003,3058,3057,3004,2716,2719,3057,3058,2955,3059,3060,3061,3060,3062,3063,3062,3060,3059,3064,3060,3063,3065,3061,2828,2729,2728,3009,2728,2727,2855,3009,3066,3067,3068,2151,2913,3067,3066,3069,3070,2111,2110,3071,3072,2113,2111,3070,2658,2657,3073,2954,2656,3074,3073,2657,3075,3076,3073,3074,2735,2733,2791,2972,3077,3078,3079,3080,3081,3082,3079,3078,3079,3082,3083,3084,3080,3079,3084,3085,3086,3085,3084,3083,2655,2984,2785,2648,2980,2786,2785,2984,3087,2651,2652,3088,3089,3087,3088,3090,3005,3056,3087,3089,2653,2651,3087,3056,2453,2790,3091,2454,3091,2790,2793,3092,2456,2454,3091,2906,2597,2405,2404,3093,2404,2403,2713,3093,1940,2637,3055,3094,3055,2993,2992,3094,3091,3092,2571,2906,2971,3095,3096,2970,2994,3097,3096,3095,2714,3013,3096,3097,2969,2970,3096,3013,2595,3098,2929,2596,2595,2310,2394,3098,2959,2846,2844,2996,1050,2832,2667,1190,2658,2951,3088,2652,2950,3090,3088,2951,1525,1190,2667,2666,1525,2666,2671,1028,2991,2990,3046,3045,2990,2993,3047,3046,982,2782,2781,1194,2781,2747,1193,1194,3066,2151,2154,2156,2966,2715,2714,3097,2986,3097,2994,2982,2986,1193,2747,2746,1195,2746,2833,1051,1195,3099,3100,2979,3101,2980,2978,2979,3100,2842,3101,2979,3102,3103,3104,3105,3103,2492,2491,3104,3035,3034,3106,3107,3075,3108,3042,3044,3108,2768,3043,3042,2863,3109,2706,2705,3110,2709,2706,3109,3040,3111,2864,2863,3111,2495,1971,2864,2495,3111,3112,3112,3111,3040,3043,2389,3041,2705,2704,3041,3040,2863,2705,3113,3114,2487,2490,3115,3114,3113,2318,2320,2869,3027,2318,3027,2903,2316,2971,2893,3116,3095,3116,2893,2892,3117,2996,2995,3116,3117,2994,3095,3116,2995,2891,3118,3117,2892,2959,2996,3117,3118,2908,2565,2564,3119,2564,2545,2548,2905,2908,2564,3119,3120,3121,3010,2921,3122,2896, 3010,3121,3080,3085,3123,3124,3125,3086,3123,3085,3126,3127,3128,3129,3127,3130,3131,3128,3132,3133,3134,3135,3133,3136,3137,3134,3143,3138,3142,3138,3140,3141,3141,3144,3142,3138,3142,3144,3274,3273,3143,3142,3273,3276,3145,3146,3147,3147,3146,3148,3149,3150,3086,3151,3150,3152,3086,3150,3153,3152,2838,3154,3155,2839,3156,3157,3155,3154,3141,3158,3155,3157,2842,2839,3155,3158,3141,3140,3158,3139,3159,3140,3099,3101,3140,3159,2842,3158,3140,3101,3122,3160,2897,2896,3161,2900,2897,3160,2900,3161,3162,3163,2900,3163,3164,2898,2487,3114,3165,3166,3115,3167,3165,3114,3168,3169,3165,3167,3170,3166,3165,3169,3171,3172,3173,3174,2491,2488,3173,3172,2487,3166,3173,2488,3170,3174,3173,3166,3175,3176,3177,3178,3179,3180,3177,3176,3105,3181,3177,3180,3182,3178,3177,3181,3180,3183,3102,3105,3141,3157,3184,3144,3156,3185,3184,3157,3184,3185,3187,3394,3144,3184,3394,3274,2861,3185,3156,2861,3186,3187,3185,3122,3121,3188,3189,3120,3190,3188,3121,3191,3192,3188,3190,3193,3189,3188,3192,3161,3160,3194,3195,3122,3189,3194,3160,3193,3196,3194,3189,3197,3195,3194,3196,3199,3198,3200,3201,3199,3201,3120,2921,3120,3201,3202,3190,3200,3203,3202,3201,3204,3205,3202,3203,3191,3190,3202,3205,3206,3198,3207,3206,3207,3208,3209,3206,3209,3210,3211,3206,3211,3200,3198,3210,3212,3213,3211,3214,3215,3213,3212,3204,3203,3213,3215,3200,3211,3213,3203,3207,3216,3217,3218,3219,3125,3217,3216,3217,3125,3124,3220,3218,3217,3220,3221,3222,3218,3221,3223,3222,3223,3224,3300,3299,3209,3208,3222,3299,3301,3207,3218,3222,3208,3225,3226,3212,3210,3226,3137,3214,3212,3123,3227,3220,3124,3228,3221,3220,3227,3123,3086,3152,3227,3152,3153,3228,3227,3229,3230,3231,3232,3233,3234,3231,3230,3171,3174,3231,3234,3170,3232,3231,3174,3235,3236,3237,3238,3229,3232,3237,3236,3170,3169,3237,3232,3168,3238,3237,3169,3239,3240,3229,3236,3239,3236,3235,3241,3229,3240,3242,3230,3242,3243,3233,3230,3131,3130,3244,3245,3246,3247,3245,3244,3246,3244,3239,3241,3244,3130,3240,3239,3248,3249,3250,3129,3249,3251,3252,3250,3245,3253,3254,3131,3247,3253,3245,3251,3249,3226,3225,3249, 3248,3137,3226,3132,3135,3131,3254,3255,3148,3256,3257,3258,3136,3133,3132,3259,3257,3133,3215,3214,3136,3258,3215,3258,3260,3204,3205,3204,3260,3261,3205,3261,3145,3191,3145,3261,3256,3146,3260,3255,3256,3261,3148,3146,3256,3262,3263,3193,3192,3262,3192,3191,3145,3264,3265,3197,3196,3264,3196,3193,3263,3266,3197,3265,3267,3162,3268,3269,3270,3266,3271,3269,3268,3235,3238,3269,3271,3168,3270,3269,3238,3268,3162,3161,3195,3268,3195,3197,3266,3175,3272,3273,3274,3275,3276,3273,3272,3275,3272,3277,3278,3175,3178,3277,3272,3182,3279,3277,3178,3280,3278,3277,3279,3275,3278,3281,3282,3278,3280,3283,3281,3295,3285,3284,3294,3284,3143,3276,3294,3284,3139,3143,3147,3149,3286,3287,3288,3262,3145,3147,3288,3263,3149,3289,3290,3286,3289,3254,3253,3290,3247,3291,3290,3253,3265,3286,3290,3291,3252,3292,3281,3283,3292,3293,3282,3281,3294,3282,3293,3295,3289,3149,3148,3259,3132,3254,3289,3259,3228,3153,3285,3224,3224,3285,3295,3300,3251,3225,3296,3297,3298,3297,3296,3298,3296,3299,3300,3225,3301,3299,3296,3250,3252,3283,3302,3250,3302,3126,3129,3240,3130,3127,3242,3127,3126,3243,3242,3303,3243,3126,3302,3283,3303,3302,3233,3243,3303,3304,3303,3283,3280,3304,3171,3234,3305,3306,3233,3304,3305,3234,3280,3279,3305,3304,3182,3306,3305,3279,3182,3181,3307,3306,3105,3104,3307,3181,2491,3172,3307,3104,3171,3306,3307,3172,2918,2915,3078,3077,2915,2914,3081,3078,3080,3125,3219,3077,3219,3216,3308,2918,3216,3207,3198,3308,3267,3265,3291,3309,3263,3288,3287,3264,3265,3264,3287,3286,3252,3251,3297,3292,3297,3298,3293,3292,3295,3293,3298,3300,3248,3129,3128,3310,3128,3131,3135,3310,3154,2838,2861,3154,2861,3156,2765,2784,3311,3312,3311,2784,2786,3313,3198,3199,3314,3308,2921,2919,3314,3199,144,1441,2803,1948,1441,1140,2738,2803,3136,3214,3137,3137,3248,3310,3134,3135,3134,3310,3209,3301,3210,3210,3301,3225,2765,2914,2917,2766,2914,3312,3315,3083,3082,3316,3317,3081,3315,3316,3082,3099,3151,3313,3100,3151,3086,3083,3317,3151,3317,3316,3311,3313,2914,3315,3081,3318,2421,2420,3319,3318,3319,3320,3321,3322,3323,3320,3319,3322,3319,2420,2429,3324, 3325,3326,3327,3326,3325,3328,3329,2436,2433,3326,3329,2432,3327,3326,2433,3330,2444,2443,3331,3330,3331,3332,3333,3323,3322,3329,3328,2429,2436,3329,3322,3334,3335,2244,2247,3336,3337,2269,3338,2258,2244,3335,3339,3340,3341,3342,3343,3340,3342,3344,3345,3346,3342,3341,3342,3346,3344,2258,3339,3347,2266,3347,1481,443,2266,3348,3338,2269,2268,3348,2268,2272,3349,3350,3351,3352,3353,2223,3354,3352,3351,3355,3353,3352,3354,3356,3357,3358,3359,3359,3358,3344,3360,3361,3362,3363,3350,3364,3362,3361,3365,3366,3362,3364,3367,3363,3362,3366,3358,3357,3368,3369,3356,3370,3368,3357,3371,3369,3368,3370,3092,2793,2569,3372,3092,3372,2542,2571,3372,2569,2505,3373,3372,3373,2543,2542,3373,2505,2504,3374,3373,3374,2532,2543,3374,2504,2579,3375,2533,2532,3374,3375,3375,2579,2581,3376,2533,3375,3376,2559,3377,3003,2559,3376,3377,3376,2581,2597,2597,3093,3378,3377,2713,3379,3378,3093,2716,3058,3378,3379,3003,3377,3378,3058,2712,2717,2716,3379,2715,2717,2712,2964,2963,3380,3381,2963,2156,2155,3380,2944,2964,3381,3382,2945,2944,3382,3383,2945,3383,3384,2947,3385,2947,3384,3386,3385,3386,2175,2165,3387,2799,2802,3388,3389,3387,3388,3390,3387,3389,2872,2871,3391,3241,3235,3271,3391,3271,3266,3267,3246,3241,3391,3309,3267,3309,3391,3115,3392,3393,3167,3164,3163,3393,3392,3162,3270,3393,3163,3168,3167,3393,3270,3276,3275,3282,3294,3179,3176,3394,3187,3175,3274,3394,3176,2495,2494,1969,1971,2918,3077,3219,2493,2496,2766,2917,3395,2604,3396,2737,2736,2599,2604,3395,2600,2608,2605,2938,2937,2603,2601,2938,2605,3036,2406,2511,3397,3398,3399,2109,2108,3400,3401,2108,2112,2392,3400,2279,2277,3402,3403,2277,2276,3404,3402,3405,2756,2754,3406,2754,2302,2642,3406,2642,2302,2299,2640,2299,2298,2297,2640,2306,2279,3403,3048,2730,2287,2306,3048,2287,2730,2588,2285,3228,3224,3223,3221,3407,2110,2109,3408,3407,3408,2167,2166,3408,2109,3401,3409,2873,3067,2913,2912,2181,2180,3410,2468,2184,2473,3410,2180,2475,3411,3410,2473,2469,2468,3410,3411,2217,2216,3412,2483,3412,3413,2485,2483,3414,3415,3416,3416,3417,3414,3413,3412,3416,3415,2216,3418,3416,3412, 2174,3417,3416,3418,3414,3417,3419,3420,3414,3419,3419,2174,2175,3421,3419,3417,2174,3419,3421,3420,2175,3386,3422,3421,3384,3423,3422,3386,3424,3425,3422,3423,3420,3421,3422,3425,3384,3383,3426,3423,3382,3427,3426,3383,3428,3429,3426,3427,3424,3423,3426,3429,3427,3382,3381,3430,3427,3430,3431,3428,3381,3380,3432,3430,2155,3433,3432,3380,3434,3435,3432,3433,3431,3430,3432,3435,3434,3433,3436,3437,2155,2153,3436,3433,2149,3438,3436,2153,3439,3437,3436,3438,3439,3438,2170,3440,2149,2147,2170,3438,2172,3440,2170,2169,3069,3066,2966,2967,2692,3441,3069,2967,3441,2613,2913,3069,2610,2613,3441,3442,2675,2678,2789,2661,2626,2789,2678,2165,2164,3443,3385,3443,2946,2947,3385,2410,2191,2201,3399,3398,3444,3445,3446,3447,3448,3446,3065,3063,3447,2946,3107,3106,3408,3409,2164,2167,3449,3450,3407,2166,3450,3071,2110,3407,3451,3449,2166,3451,2166,2174,3452,3453,2216,2174,3418,2216,3453,3449,3451,3454,3455,2174,3453,3454,3451,3452,3455,3454,3453,3456,3457,3450,3449,3457,3458,3071,3450,2223,2226,3459,3460,3461,3462,3459,2226,2445,2441,3459,3462,2444,3460,3459,3459,2441,2444,3333,3463,3464,3330,3465,3466,3464,3463,3355,3467,3464,3466,2444,3330,3464,3467,3465,3468,3469,3466,3469,3364,3350,3353,3355,3466,3469,3353,2242,2455,2466,2243,620,1610,2462,2448,1611,2463,2462,1610,2425,2452,2450,2426,2459,2458,3470,3471,2459,3471,2415,2427,3471,3470,3472,3473,3471,3473,2416,2415,3473,3472,3474,3475,3473,3475,2418,2416,2239,2230,2228,3476,2254,2240,2239,3476,3477,3478,3476,2228,2263,2254,3476,3478,3477,3479,3480,3478,3340,3481,3482,3341,2272,2273,3482,3481,2263,3478,3480,2271,3343,3344,3358,3483,3340,3490,3481,3344,3346,3484,3359,3345,3485,3484,3346,3356,3359,3484,3485,2223,3351,3486,3487,3486,3350,3488,3356,3486,3351,3350,3356,3487,3486,3345,2224,3489,3485,2223,3487,3489,2224,3356,3485,3489,3487,3481,3490,3349,2272,3491,3492,3493,3493,3492,2218,2465,2983,2732,2735,2983,2735,2968,2939,2604,2330,2384,3396,2276,3494,3495,3404,3494,2291,2292,3495,2298,2301,3496,2295,3496,3497,2296,2295,2296,3497,3498,2778,3498,3499,2777,2778,3494,2276,2275,3500, 2291,3494,3500,2275,2305,3501,3500,475,1652,3501,2305,1653,2288,3501,1652,2291,3500,3501,2288,1029,2777,3499,1657,2723,2997,3502,3503,3502,2997,2580,2578,2721,3502,2578,2503,2813,2850,2641,2631,2725,2643,2641,2850,3048,2755,2757,2303,2755,3048,3403,2301,2300,3402,3404,2303,3403,3402,2300,3497,3496,3495,2292,2301,3404,3495,3496,3499,3498,2290,2289,3497,2292,2290,3498,1657,3499,2289,1669,1653,1669,2289,3406,2642,2643,3504,3503,3405,3406,3504,2725,2724,3504,2643,2723,3503,3504,2724,2529,2561,3005,3089,2528,2529,3089,3090,2528,3090,2950,2530,3475,3474,3491,3493,3475,3493,2465,2418,2417,2418,2465,2464,2417,2464,2885,2431,3505,2687,2771,2770,3039,2396,2336,2386,3039,2386,571,1115,2673,2594,2593,2758,3506,3507,2759,2339,2592,3507,3506,2594,2759,3507,2592,2907,2906,2571,2570,2565,2908,2907,2570,2791,2453,2242,2972,2237,2253,2940,2241,2253,2256,2753,2940,2442,2446,2423,2422,2442,2422,2421,2443,3331,2443,2421,3318,3331,3318,3321,3332,2444,3467,3508,3460,3355,3354,3508,3467,2223,3460,3508,3354,3350,3361,3509,3488,3360,3510,3509,3361,3371,3370,3509,3510,3356,3488,3509,3370,2151,3511,2152,2586,2585,2959,3118,2586,3118,2891,2587,2726,2849,3512,3016,2849,2815,2701,3512,3512,2699,2698,3016,2869,2868,2911,3027,2911,2868,2873,2912,2384,2344,2348,3396,2557,3513,3049,3513,3514,3049,2776,2823,2822,3515,2801,2800,2319,2776,2801,2737,3396,2348,2186,2212,2213,2207,2203,3516,3517,2563,3518,3517,3513,2557,2563,2975,2693,2691,2976,2690,3022,3002,3001,3002,3022,3021,3024,2710,3024,3021,3020,2710,3020,3033,3519,3030,3033,3020,2927,3520,2874,2189,2146,2874,3520,2157,3520,2189,2160,2160,2157,3520,3521,3448,3458,3457,3521,3457,3456,2194,3445,3444,3522,3446,3398,3523,3522,3444,3065,3446,3522,3523,3524,2409,2410,3445,2410,3444,3445,2194,2409,3524,3521,3524,3445,3448,3521,3525,2194,3449,3455,2194,3525,2193,3452,3526,3525,3455,3525,3526,2193,2194,3456,3449,2190,2193,3526,2214,3526,3452,2216,2214,3399,2201,2407,3397,3399,2407,3038,3397,3038,3000,2958,2391,2112,2113,3527,2389,2391,3527,3044,2799,2870,2800,3389,3390,2152,3511,2135,2134,2383,3528,2125,2124, 2135,3528,2338,3529,3528,2383,2126,2125,3528,3528,3529,2126,2140,2126,3530,2116,2337,2117,2116,3530,2758,2761,3531,3532,2360,2357,3531,2761,2356,2364,3531,2357,2368,3532,3531,2364,2368,2367,3533,2371,2130,2129,3533,2367,3533,2129,2131,3534,2371,3533,3534,2372,2368,2339,3506,3532,2758,3532,3506,2123,2120,2132,2135,2124,2120,2119,2136,2132,2119,2372,3534,2131,2119,2138,2372,3530,2126,3529,3529,2338,2337,3530,3065,3523,3535,3061,3398,3397,3535,3523,2958,2956,3535,3397,2955,3061,3535,2956,3447,3063,3062,3536,3447,3536,3458,3448,3059,2955,3076,3075,3075,3064,3059,3537,3072,3062,3064,3075,3537,3064,3071,3458,3536,3070,3536,3062,3072,3070,3043,2768,2767,3112,2767,2496,2495,3112,2768,3108,3538,2764,3075,3074,3538,3108,2656,2764,3538,3074,3072,3537,3527,2113,3537,3075,3044,3527,2801,3515,2145,2802,2145,3515,2874,2874,3515,2822,2211,2189,2775,2875,2823,2776,2937,2936,3517,3516,2877,3513,3517,2936,3006,1084,766,2609,3006,2609,2608,2876,2825,2824,3516,3518,3516,2824,2878,2877,2877,2876,2608,2937,2822,2825,2213,2211,2825,3518,2207,2213,2205,2207,3518,2563,2562,2659,3539,2675,2661,2659,2614,3540,3539,2975,2974,3539,3540,3540,2614,2610,3442,2929,2931,2596,2663,2788,2941,2930,2943,2941,2788,2625,2818,2855,2727,2677,2677,2727,2626,2678,2644,2751,3541,2808,2621,2620,3541,2621,3541,2806,2805,2628,2808,3541,2620,3441,2692,2693,3442,2693,2975,3540,3442,3119,2548,2501,2566,2516,2515,2686,3542,2686,2687,3505,3542,2431,2885,2773,2772,2164,3409,3543,3443,3543,3409,3401,3544,3035,3107,3543,3544,2946,3443,3543,3107,3545,3400,2392,3546,3547,3544,3545,3031,3035,3031,3545,3547,3032,3548,3032,3547,3546,2392,2390,3549,3546,3549,2389,2704,3549,2390,2389,3549,2704,3550,3548,3546,3549,3548,3549,3550,2946,3106,2926,2925,2926,3106,3034,3034,3030,2927,2925,2741,2740,2977,2807,2743,2742,3551,2942,2931,2942,3551,3552,2807,2622,2621,2805,2867,2866,2961,3553,1962,2949,3554,2065,2948,3555,3554,2949,2961,2960,3554,3555,1947,2065,3554,2960,3553,2961,3555,3556,2948,3556,3555,3557,3553,2851,2854,2857,3557,2854,3557,2857,3110,3558,2863,2867,3558,3109,3110,3109, 3558,2948,2830,3007,3556,3556,3007,2851,3553,2932,2929,3098,2933,2393,2395,3026,3025,2903,3026,2395,3098,2394,2933,2709,3110,2857,2858,2707,2709,2858,2145,2142,3388,2802,2141,3390,3388,2142,2870,2799,3387,2871,3511,2151,3068,2575,2574,2500,2576,2575,2576,2510,2509,2507,2555,2509,2508,2406,2408,2508,2511,2179,2408,2406,2200,2176,2179,2200,2199,2210,2176,2199,2209,2472,2210,2209,2480,2472,2480,2482,2474,2510,3037,2511,2524,2523,3019,2572,3019,3018,3037,2572,2703,2710,3519,3550,2704,2703,3550,3032,3548,3519,3033,3519,3548,3550,2962,2891,2890,2639,2980,3100,3313,2786,3559,3560,3561,3562,3560,2991,3045,3561,3561,3045,2684,3052,3563,3564,3565,1821,3563,3565,1822,1927,1933,3560,3559,3560,1933,1932,2991,3563,3567,3566,3570,3568,3569,3571,3570,3562,3572,3568,3051,3573,3562,3573,3566,1907,3572,1907,3566,3567,1905,3568,3572,1907,1906,3574,3569,3568,1906,3565,3564,3054,2902,3054,3564,3573,3051,3051,3562,3561,3052,3567,3563,1821,1833,3566,3573,3564,3563,3572,3562,3573,3559,3562,3570,3575,3575,3570,3571,1928,1927,3559,3575,1928,3575,3571,1931,1822,3565,2902,2909,1822,2909,984,1912,3576,3577,1913,3578,3579,3577,3576,3580,3581,3577,3579,1914,1913,3577,3581,1914,3581,3582,1919,3580,3583,3582,3581,1926,3584,3582,3583,1920,1919,3582,3584,3585,3586,1921,1920,1922,1921,3586,1940,3094,3587,1941,2992,3588,3587,3094,3578,3576,3587,3588,1912,1941,3587,3576,1926,1925,3589,3584,3589,3585,1920,3584,3578,3590,3591,3579,1887,1886,3591,3590,1885,3592,3591,1886,3580,3579,3591,3592,3580,3592,3593,3583,1885,1902,3593,3592,1895,1923,3593,1902,1926,3583,3593,1923,2992,2989,3594,3588,1932,1935,3594,2989,1887,3590,3594,1935,3578,3588,3594,3590,3595,3596,3597,3598,3595,3598,1981,1969,3164,3392,3599,3600,3597,3600,3599,3601,3599,3113,2490,3601,2095,2011,3602,3603,2095,3603,3604,2096,2494,2899,3605,3606,2898,3607,3605,2899,3596,3606,3605,3607,3607,2898,3164,3600,3607,3600,3597,3596,3595,1969,2494,3606,3596,3595,3606,1981,3598,3608,3609,3597,3601,3608,3598,2490,3610,3608,3601,3602,3609,3608,3610,2010,1982,1981,3609,3604,3603,3611,3612,3602,3611,3603,2860, 2973,3613,3614,2973,2056,3615,2013,2096,3615,2094,2056,2094,3615,3602,3610,3616,3611,2490,2489,3616,3610,2492,3617,3616,2489,3612,3611,3616,3617,3612,3617,3618,3619,2492,3103,3618,3617,3102,3620,3618,3103,3613,3619,3618,3620,3179,3187,3186,3183,3614,3604,3612,3619,3614,3619,3613,2973,3183,3186,3621,3620,3102,3621,2860,3613,3620,2861,2860,3621,2861,3621,3186,1945,1971,1946,2499,2502,2539,2573,2538,2535,2526,2577,3049,3514,3395,2736,2099,2057,2056,2973,2957,2956,2952,2954,3076,2957,2954,3073,2955,2957,3076,3025,2617,2616,2933,2930,2932,2664,2663,2626,2624,2787,2789,3001,2976,2691,2690,3001,2820,2974,2976,2848,2688,2692,2967,2819,2676,2675,3539,2974,2935,2600,3395,3514,2600,2935,2938,2601,2935,3514,3513,2936,2540,2539,2502,2547,2513,2516,2521,2518,2221,2238,2243,2222,2466,2222,2243,2427,2426,2450,2449,1115,1109,3028,2431,2772,2412,2573,2510,2576,2712,3379,2713,2148,2152,3390,2141,2358,2354,2353,2359,2749,2286,2285,2590,2227,3477,2228,2227,3479,3477,1923,1895,1898,1924,1903,1897,1896,1899,2595,495,754,2310,2171,2467,2478,2173,3179,3183,3180,2010,3609,3602,2011,2096,3604,3614,3615,3599,3392,3115,3113,3315,3312,3311,3316,3365,3364,3469,3468,1808,564,563,1807,3025,2933,2394,2393,2867,3553,3557,3558,363,362,361,364,2187,2186,2203,2202,2934,1961,1960,2831,682,1774,816,681,2521,2516,3542,886,885,1775,407,410,408,2230,2238,2221,3139,3284,3285,3153,3246,3309,3291,3247,3150,3151,3099,3159,3150,3159,3139,3153,3148,3255,3257,3259,3260,3258,3257,3255,3542,2567,2521,3505,2566,2567,3542,2905,3119,2566,3505,2770,728,732,675,2572,3037,2510,2573,1948,2803,1949,3068,3067,2873,2872,3389,3511,3068,2872,1580,337,1683,1682,1729,1683,337,337,336,1729,1685,1687,944,943,867,1798,148,2741,2804,2803,2738,1088,1805,1806,928,1798,1797,1771,149,148,490,1796,1188,1546,1545,1749,1153,1780,1784,1749,1545,825,1790,1788,822,190,199,265,1380,1419,1376,1241,2921,2920,2916,2919,2734,2733,2731,2757,2722,2734,2757,2756,3405,2721,2722,2756,3503,3502,2721,3405,1064,1011,735,733,715,696,1064,733,2546,2577,2540,2547,2538,2577,2546,2308,488,487,2311,3314,2919,2918, 3308,2914,2765,3312,1418,1417,1416,1404,370,1719,371,1519,1781,1779,1522,1547,1590,1523,2180,2182,2202,2183,355,359,383,356,1724,1725,369,1159,1744,1157,1160,1159,1157,1156,1720,1719,370,1725,1725,1724,1722,1725,1722,1721,1720,1722,1723,1595,1714,1593,1723,1722,2791,2790,2453,899,412,624,623,1188,1796,1135,2929,2932,2930,3544,3401,3400,3545,824,1210,1209,1207,3036,3038,2407,2406,997,1090,996,2742,1141,1769,3551,3551,1769,492,3552,3552,492,491,2596,2931,3552,2596,2806,3541,2751,3622,3623,3624,3625,3626,3627,3628,3629,3630,3626,3631,3632,3633,3634,3635,3636,3637,3627,3634,3638,3639,3624,3640,3641,3642,3643,3644,3645,3646,3644,3623,3647,3648,3649,3650,3651,3652,3650,3643,3653,3654,3655,3656,3657,3658,3659,3660,3649,3661,3662,3663,3640,3664,3665,3666,3667,3668,3669,3667,3630,3670,3671,3664,3666,3672,3673,3656,3674,3675,3676,3675,3674,3677,3678,3676,3677,3679,3680,3678,3679,3681,3682,3680,3681,3683,3684,3682,3683,3685,3686,3684,3685,3687,3688,3686,3687,3689,3690,3688,3689,3691,3692,3690,3691,3693,3694,3692,3693,3695,3695,3696,3697,3694,3696,3698,3699,3697,3700,3699,3698,3701,3702,3700,3701,3703,3704,3705,3706,3707,3708,3673,3660,3709,3710,3711,3656,3712,3713,3674,3677,3674,3714,3715,3679,3677,3716,3717,3681,3679,3718,3719,3683,3681,3720,3721,3685,3683,3722,3723,3687,3685,3724,3725,3689,3687,3726,3727,3691,3689,3728,3729,3693,3691,3730,3731,3695,3693,3732,3733,3734,3735,3696,3695,3736,3737,3698,3696,3739,3701,3740,3741,3742,3656,3673,3743,3744,3745,3660,3673,3675,3649,3650,3649,3675,3676,3643,3650,3676,3678,3644,3643,3678,3680,3623,3644,3680,3682,3624,3623,3682,3684,3640,3624,3684,3686,3664,3640,3686,3688,3666,3664,3688,3690,3667,3666,3690,3692,3630,3667,3692,3694,3694,3697,3626,3630,3697,3699,3627,3626,3634,3627,3699,3700,3746,3634,3700,3747,3748,3749,3750,3751,3752,3660,3753,3754,3755,403,404,397,406,3340,3343,3483,3490,19,57,17,3738,3740,3701,3698,6,41,19,3759,3760,3761,3762,3763,3764,3765,3766,42,3768,3762,3769,3770,3771,3769,3772,3773,3774,3775,3776,3777,3778,3776,3779,3780,3781,3772,3782,3783,3784,3766,3785,3786,3787, 3785,3761,3788,3789,3790,3775,3791,3792,3793,3794,3795,3796,3794,3790,3793,3797,3798,3799,3800,3801,3802,3803,3804,3805,3803,3799,3806,3807,3808,3809,3810,3811,3809,3802,3812,3813,3814,3808,3815,3816,3817,3818,3819,3820,3818,3814,3821,3822,3823,3817,3824,3825,3826,3823,3827,3828,3829,3826,3829,3830,3831,3782,3832,3833,3834,3765,3834,3835,3836,3779,3762,3761,3837,3838,3766,3765,3839,3840,3769,3762,3838,3841,3772,3769,3841,3842,3776,3775,3843,3782,3772,3842,3844,3785,3766,3840,3837,3761,3785,3837,3775,3790,3845,3843,3794,3793,3846,3790,3794,3846,3845,3847,3846,3793,3799,3803,3802,3848,3849,3799,3803,3849,3847,3809,3808,3850,3851,3802,3809,3851,3848,3808,3814,3852,3850,3818,3817,3853,3854,3814,3818,3854,3852,3817,3823,3855,3853,3823,3826,3856,3855,3826,3829,3857,3856,3844,3857,3829,3782,3765,3834,3858,3839,3859,3858,3834,3779,3841,3838,3844,3842,3843,3859,3779,3776,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3863,3872,3871,3930,3929,3873,3874,3875,3876,3877,3878,3872,3875,3879,3880,3881,3870,3881,3882,3883,3884,3885,3886,3887,3866,3888,3889,3890,3887,3891,3892,3876,3893,3894,3895,3896,3897,3898,3899,3893,3896,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3903,3906,3910,3911,3907,3912,3913,3914,3915,3916,3917,3918,3912,3915,3919,3920,3916,3921,3922,3923,3921,3924,3925,3926,3924,3884,3927,3928,3867,3929,3931,3932,3860,3867,3866,3933,3934,3863,3870,3931,3935,3872,3929,3758,3876,3875,3936,3937,3875,3872,3935,3936,3870,3881,3938,3931,3938,3881,3884,3939,3887,3933,3866,3893,3876,3937,3940,3897,3896,3941,3896,3893,3940,3941,3903,3902,3942,3943,3942,3902,3897,3941,3907,3906,3944,3945,3906,3903,3943,3944,3912,3907,3945,3946,3916,3915,3947,3948,3915,3912,3946,3947,3921,3916,3948,3949,3924,3921,3949,3950,3884,3924,3950,3939,3929,3867,3934,3758,3757,3933,3887,3757,3887,3890,3757,3890,3932,3931,3890,3756,55,3932,3932,55,3861,3860,3931,3860,3863,3767,42,3769,2836,2962,2639,2837,1022,788,956,957,3894,3897,3902,3901,903,963,962,974,3138,3139,3140,3139,3138,3143,1404,1266,1418,1249,1247,1245,3512,2701,2699,2814,2629,2630, 2814,2630,2669,3951,3952,3953,3954,3955,3951,3954,3956,3957,3955,3956,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3952,3951,3980,3980,3951,3955,3981,3982,3981,3955,3957,3983,3960,3959,3984,3985,3964,3963,3986,3987,3968,3967,3988,3989,3990,3972,3971,3991,3983,3984,3992,3993,3994,3987,3988,3995,3974,3973,3996,3997,3970,3969,3998,3999,3966,3965,4000,4001,3962,3961,4002,4003,3958,3956,4004,4005,4004,3956,3954,4006,4005,3954,3953,4007,3997,3998,4008,4009,4001,4002,4010,4006,3953,3952,3979,3960,3957,3958,3961,4002,3961,3958,4003,3983,3982,3957,3960,3984,3959,3964,3985,4001,4000,3965,3962,3962,3965,3964,3959,3968,3963,3966,3969,3998,3969,3966,3999,3987,3986,3963,3968,3988,3967,3972,4011,3997,4012,3973,3970,3970,3973,3972,3967,3976,3971,3974,3977,4013,3974,3995,4014,3976,4015,3989,3971,3972,3990,4011,3976,3975,4015,4016,4013,4014,3973,4012,3996,4003,4010,4002,3982,3983,3991,3985,3992,3984,4000,4001,4009,3999,4008,3998,3986,3987,3994,4011,3993,3988,4012,3997,4007,4017,4018,4019,4020,4020,4019,4021,4022,4022,4021,4023,4024,4024,4023,4025,4026,4027,4028,4029,4030,4030,4029,4031,4032,4032,4031,4033,4034,4028,4035,4036,4037,4037,4038,4029,4028,4038,4039,4031,4029,4039,4040,4033,4031,4041,4018,4017,4042,4043,4035,4028,4027,4044,4045,4046,4047,4048,4049,4045,4044,4048,4050,4051,4049,4026,4025,4051,4050,4052,4053,4054,4055,4053,4056,4057,4054,4056,4034,4033,4057,4058,4059,4060,4061,4054,4062,4063,4055,4057,4064,4062,4054,4033,4040,4064,4057,4065,4066,4067,4068,4067,4069,4047,4046,4070,4052,4055,4061,4055,4063,4058,4061,4043,4027,4019,4018,4030,4021,4019,4027,4032,4023,4021,4030,4034,4025,4023,4032,4018,4041,4071,4043,4041,4072,4073,4071,4070,4046,4045,4052,4052,4045,4049,4053,4053,4049,4051,4056,4056,4051,4025,4034,4046,4070,4060,4067,4067,4060,4059,4068,4074,4075,4076,4077,4077,4078,4079,4074,4078,4080,4081,4079,4080,4082,4083,4081,4084,4085,4086,4087,4085,4088,4089,4086,4088,4090,4091,4089,4086,4038,4037,4087,4089,4039,4038,4086,4091,4040,4039,4089,4092,4093,4076, 4075,4094,4084,4087,4095,4096,4097,4098,4099,4099,4098,4100,4101,4101,4100,4102,4103,4103,4102,4083,4082,4104,4105,4106,4107,4107,4106,4108,4109,4108,4091,4090,4109,4110,4059,4058,4111,4105,4063,4062,4106,4106,4062,4064,4108,4064,4040,4091,4108,4068,4112,4113,4065,4112,4097,4096,4114,4115,4111,4105,4104,4111,4058,4063,4105,4075,4074,4084,4094,4074,4079,4085,4084,4079,4081,4088,4085,4081,4083,4090,4088,4075,4094,4116,4092,4092,4116,4073,4072,4104,4098,4097,4115,4107,4100,4098,4104,4109,4102,4100,4107,4083,4102,4109,4090,4110,4115,4097,4112,4059,4110,4112,4068,4092,4072,4117,4118,4041,4119,4117,4072,4120,4121,4122,4123,4124,4122,4121,4125,4126,4124,4125,4127,4128,4126,4127,4129,4123,4130,4131,4120,4132,4133,4134,4135,4136,4134,4133,4137,4138,4136,4137,4139,4129,4138,4139,4128,4140,4141,4132,4135,4122,4142,4143,4123,4124,4144,4142,4122,4126,4145,4144,4124,4146,4145,4126,4128,4147,4148,4123,4143,4149,4150,4133,4132,4137,4133,4150,4151,4139,4137,4151,4152,4139,4152,4146,4128,4132,4153,4154,4149,4120,4155,4156,4121,4125,4121,4156,4157,4127,4125,4157,4158,4129,4127,4158,4159,4160,4161,4162,4130,4131,4163,4155,4120,4134,4164,4165,4135,4136,4166,4164,4134,4138,4167,4166,4136,4129,4159,4167,4138,4135,4165,4168,4140,4141,4140,4168,4169,4141,4169,4170,4171,4143,4142,4172,4173,4144,4174,4172,4142,4145,4175,4174,4144,4146,4176,4175,4145,4160,4148,4177,4161,4147,4143,4173,4178,4150,4149,4179,4180,4151,4150,4180,4181,4152,4151,4181,4182,4152,4182,4176,4146,4149,4154,4183,4179,4154,4153,4184,4183,4153,4171,4170,4184,4130,4162,4163,4131,4148,4147,4178,4177,4185,4017,4020,4186,4020,4022,4187,4186,4187,4022,4024,4188,4024,4026,4189,4188,4190,4191,4119,4192,4042,4017,4185,4193,4194,4044,4047,4195,4196,4048,4044,4194,4197,4050,4048,4196,4189,4026,4050,4197,4195,4047,4069,4198,4198,4069,4066,4199,4066,4200,4201,4199,4077,4076,4202,4203,4078,4077,4203,4204,4080,4078,4204,4205,4206,4082,4080,4205,4118,4191,4190,4207,4202,4076,4093,4208,4209,4096,4099,4210,4099,4101,4211,4210,4211,4101,4103,4212,4212,4103,4082,4206,4114,4096,4209,4213,4113, 4114,4213,4214,4201,4200,4113,4214,4119,4042,4193,4192,4208,4093,4118,4207,4037,4036,4095,4087,4036,4035,4071,4073,4116,4095,4036,4073,4117,4119,4191,4070,4061,4060,4067,4066,4069,4065,4200,4066,4117,4191,4118,4115,4110,4111,4112,4114,4113,4065,4113,4200,4119,4041,4042,4092,4118,4093,4132,4141,4171,4171,4153,4132,4148,4160,4123,4123,4160,4130,4043,4071,4035,4095,4116,4094,4215,4216,4217,4218,4216,4219,4220,4217,4219,4221,4222,4220,4221,4223,4224,4222,4225,4226,4227,4228,4226,4229,4230,4227,4229,4231,4232,4230,4228,4233,4234,4235,4233,4228,4227,4236,4236,4227,4230,4237,4237,4230,4232,4238,4239,4240,4215,4218,4241,4225,4228,4235,4242,4243,4244,4245,4246,4242,4245,4247,4246,4247,4248,4249,4223,4249,4248,4224,4250,4251,4252,4253,4253,4252,4254,4255,4255,4254,4232,4231,4256,4257,4258,4259,4252,4251,4260,4261,4254,4252,4261,4262,4232,4254,4262,4238,4263,4264,4265,4266,4265,4244,4243,4267,4268,4257,4251,4250,4251,4257,4256,4260,4241,4218,4217,4225,4226,4225,4217,4220,4229,4226,4220,4222,4231,4229,4222,4224,4218,4241,4269,4239,4239,4269,4270,4271,4268,4250,4245,4244,4250,4253,4247,4245,4253,4255,4248,4247,4255,4231,4224,4248,4244,4265,4258,4268,4265,4264,4259,4258,4272,4273,4274,4275,4273,4272,4276,4277,4277,4276,4278,4279,4279,4278,4280,4281,4282,4283,4284,4285,4285,4284,4286,4287,4287,4286,4288,4289,4284,4283,4233,4236,4286,4284,4236,4237,4288,4286,4237,4238,4290,4275,4274,4291,4292,4293,4283,4282,4294,4295,4296,4297,4295,4298,4299,4296,4298,4300,4301,4299,4300,4281,4280,4301,4302,4303,4304,4305,4303,4306,4307,4304,4307,4306,4289,4288,4308,4309,4256,4259,4305,4304,4261,4260,4304,4307,4262,4261,4262,4307,4288,4238,4264,4263,4310,4311,4311,4312,4294,4297,4313,4302,4305,4309,4309,4305,4260,4256,4275,4292,4282,4272,4272,4282,4285,4276,4276,4285,4287,4278,4278,4287,4289,4280,4275,4290,4314,4292,4290,4271,4270,4314,4302,4313,4297,4296,4303,4302,4296,4299,4306,4303,4299,4301,4280,4289,4306,4301,4308,4311,4297,4313,4259,4264,4311,4308,4290,4315,4316,4271,4239,4271,4316,4317,4318,4319,4320,4321,4322,4323,4321,4320,4324,4325,4323, 4322,4326,4327,4325,4324,4319,4318,4328,4329,4330,4331,4332,4333,4334,4335,4333,4332,4336,4337,4335,4334,4327,4326,4337,4336,4338,4331,4330,4339,4320,4319,4340,4341,4322,4320,4341,4342,4324,4322,4342,4343,4344,4326,4324,4343,4345,4340,4319,4346,4347,4330,4333,4348,4335,4349,4348,4333,4337,4350,4349,4335,4337,4326,4344,4350,4330,4347,4351,4352,4318,4321,4353,4354,4323,4355,4353,4321,4325,4356,4355,4323,4327,4357,4356,4325,4358,4329,4359,4360,4328,4318,4354,4361,4332,4331,4362,4363,4334,4332,4363,4364,4336,4334,4364,4365,4327,4336,4365,4357,4331,4338,4366,4362,4339,4367,4366,4338,4339,4368,4369,4367,4340,4370,4371,4341,4342,4341,4371,4372,4343,4342,4372,4373,4344,4343,4373,4374,4358,4360,4375,4346,4345,4376,4370,4340,4348,4377,4378,4347,4349,4379,4377,4348,4350,4380,4379,4349,4350,4344,4374,4380,4347,4378,4381,4351,4351,4381,4382,4352,4352,4382,4369,4368,4329,4328,4361,4359,4346,4375,4376,4345,4383,4384,4216,4215,4216,4384,4385,4219,4385,4386,4221,4219,4221,4386,4387,4223,4388,4389,4317,4390,4240,4391,4383,4215,4392,4393,4243,4242,4394,4392,4242,4246,4395,4394,4246,4249,4387,4395,4249,4223,4393,4396,4267,4243,4396,4397,4266,4267,4266,4397,4398,4399,4273,4400,4401,4274,4277,4402,4400,4273,4279,4403,4402,4277,4404,4403,4279,4281,4315,4405,4388,4390,4401,4406,4291,4274,4407,4408,4295,4294,4295,4408,4409,4298,4409,4410,4300,4298,4410,4404,4281,4300,4312,4411,4407,4294,4310,4412,4411,4312,4398,4412,4310,4399,4317,4389,4391,4240,4406,4405,4315,4291,4233,4283,4293,4234,4234,4270,4269,4235,4314,4270,4234,4293,4316,4390,4317,4268,4258,4257,4265,4267,4266,4263,4266,4399,4316,4315,4390,4313,4309,4308,4311,4310,4312,4263,4399,4310,4317,4240,4239,4290,4291,4315,4330,4368,4339,4368,4330,4352,4346,4319,4358,4319,4329,4358,4241,4235,4269,4293,4292,4314,4413,4414,4415,4416,4414,4417,4418,4415,4417,4419,4420,4418,4419,4421,4422,4420,4423,4417,4414,4424,4425,4419,4417,4423,4426,4421,4419,4425,4427,4428,4429,4430,4431,4432,4423,4424,4432,4433,4425,4423,4433,4434,4426,4425,4435,4436,4432,4431,4436,4437,4433,4432,4437,4438,4434,4433,4439, 4440,4428,4427,4416,4439,4427,4413,4424,4414,4413,4430,4429,4431,4424,4430,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4448,4447,4451,4452,4450,4449,4453,4454,4452,4451,4455,4456,4448,4450,4457,4455,4450,4452,4458,4457,4452,4454,4459,4460,4461,4462,4455,4463,4464,4456,4457,4465,4463,4455,4458,4466,4465,4457,4463,4436,4435,4464,4465,4437,4436,4463,4466,4438,4437,4465,4467,4468,4442,4469,4470,4471,4461,4460,4461,4472,4446,4445,4456,4462,4445,4448,4456,4464,4459,4462,4443,4442,4468,4473,4474,4475,4440,4476,4474,4476,4477,4470,4444,4478,4479,4441,4444,4443,4480,4478,4473,4481,4480,4443,4473,4468,4482,4481,4467,4470,4460,4468,4467,4469,4474,4470,4483,4441,4428,4475,4478,4431,4429,4479,4435,4431,4478,4480,4459,4464,4481,4482,4481,4464,4435,4480,4484,4485,4486,4487,4488,4489,4487,4486,4490,4491,4489,4488,4422,4421,4491,4490,4492,4493,4487,4489,4494,4492,4489,4491,4426,4494,4491,4421,4495,4496,4497,4498,4492,4499,4500,4493,4494,4501,4499,4492,4426,4434,4501,4494,4499,4502,4503,4500,4501,4504,4502,4499,4434,4438,4504,4501,4505,4506,4507,4508,4497,4496,4509,4510,4485,4484,4497,4511,4493,4498,4484,4487,4493,4500,4495,4498,4512,4507,4506,4513,4514,4515,4516,4517,4515,4518,4519,4516,4518,4520,4521,4519,4520,4454,4453,4521,4522,4518,4515,4523,4524,4520,4518,4522,4458,4454,4520,4524,4525,4526,4527,4528,4529,4530,4522,4523,4530,4531,4524,4522,4531,4466,4458,4524,4503,4502,4530,4529,4502,4504,4531,4530,4504,4438,4466,4531,4532,4508,4507,4533,4534,4526,4525,4535,4525,4514,4517,4536,4523,4515,4514,4528,4527,4529,4523,4528,4533,4507,4512,4537,4538,4509,4539,4540,4541,4540,4539,4534,4513,4506,4542,4543,4544,4512,4513,4543,4537,4512,4544,4545,4546,4533,4537,4545,4526,4534,4532,4533,4539,4508,4532,4534,4509,4505,4508,4539,4505,4509,4496,4506,4495,4500,4543,4542,4503,4544,4543,4500,4527,4546,4545,4529,4503,4529,4545,4544,4547,4548,4549,4550,4548,4551,4552,4549,4552,4551,4553,4554,4554,4553,4555,4556,4549,4552,4557,4558,4552,4554,4559,4557,4554,4556,4560,4559,4550,4558,4561,4562,4550,4562,4563,4547,4564,4565,4566,4567,4565,4564,4568, 4569,4570,4569,4568,4571,4572,4570,4571,4573,4564,4558,4557,4568,4568,4557,4559,4571,4571,4559,4560,4573,4574,4558,4567,4575,4576,4575,4567,4566,4577,4578,4579,4580,4578,4577,4581,4582,4583,4582,4581,4584,4555,4583,4584,4556,4577,4585,4586,4581,4581,4586,4587,4584,4584,4587,4560,4556,4588,4585,4580,4589,4590,4589,4580,4579,4591,4592,4593,4594,4592,4595,4596,4593,4596,4595,4597,4598,4598,4597,4572,4573,4593,4596,4586,4585,4586,4596,4598,4587,4598,4573,4560,4587,4599,4600,4594,4585,4601,4591,4594,4600,4602,4603,4604,4605,4606,4602,4605,4607,4608,4606,4607,4609,4610,4608,4609,4611,4603,4612,4613,4604,4612,4614,4615,4613,4616,4617,4618,4619,4620,4621,4618,4617,4620,4622,4623,4621,4622,4624,4625,4623,4616,4619,4626,4627,4627,4626,4628,4629,4630,4631,4632,4633,4630,4633,4615,4614,4631,4634,4635,4632,4634,4629,4628,4635,4636,4637,4638,4639,4640,4641,4638,4637,4640,4642,4643,4641,4642,4610,4611,4643,4636,4639,4644,4645,4645,4644,4646,4647,4648,4649,4650,4651,4652,4648,4651,4653,4654,4652,4653,4655,4624,4654,4655,4625,4649,4656,4657,4650,4656,4658,4659,4657,4660,4661,4662,4663,4661,4647,4646,4662,4664,4660,4663,4665,4664,4665,4659,4658,4415,4605,4604,4416,4418,4607,4605,4415,4420,4609,4607,4418,4422,4611,4609,4420,4604,4613,4439,4416,4613,4615,4666,4439,4446,4619,4618,4447,4447,4618,4621,4449,4449,4621,4623,4451,4451,4623,4625,4453,4472,4626,4619,4446,4471,4628,4626,4472,4440,4633,4632,4476,4666,4615,4633,4440,4632,4635,4477,4476,4635,4628,4471,4477,4485,4639,4638,4486,4486,4638,4641,4488,4488,4641,4643,4490,4490,4643,4611,4422,4511,4644,4639,4485,4510,4646,4644,4511,4516,4651,4650,4517,4519,4653,4651,4516,4521,4655,4653,4519,4453,4625,4655,4521,4650,4657,4536,4517,4657,4659,4535,4536,4663,4662,4538,4540,4662,4646,4510,4538,4541,4665,4663,4540,4535,4659,4665,4541,4413,4427,4430,4439,4666,4440,4475,4428,4440,4445,4462,4461,4461,4471,4472,4471,4470,4477,4468,4460,4482,4428,4441,4479,4428,4479,4429,4482,4460,4459,4484,4498,4497,4497,4510,4511,4514,4525,4528,4525,4536,4535,4509,4538,4510,4535,4541,4534,4533,4546,4526,4496,4542, 4506,4496,4495,4542,4546,4527,4526,4549,4558,4550,4558,4564,4567,4558,4667,4561,4667,4558,4574,4585,4577,4580,4593,4585,4594,4585,4588,4668,4668,4599,4585,4669,4670,4671,4672,4673,4674,4675,4676,4676,4675,4677,4678,4678,4677,4679,4680,4680,4679,4681,4682,4682,4681,4683,4684,4684,4683,4685,4686,4687,4688,4689,4690,4690,4689,4691,4692,4692,4691,4693,4694,4694,4693,4695,4696,4696,4695,4670,4669,4670,4697,4698,4671,4674,4699,4700,4675,4675,4700,4701,4677,4677,4701,4702,4679,4679,4702,4703,4681,4681,4703,4704,4683,4683,4704,4705,4685,4688,4706,4707,4689,4689,4707,4708,4691,4691,4708,4709,4693,4693,4709,4710,4695,4695,4710,4697,4670,4699,4711,4712,4700,4700,4712,4713,4701,4701,4713,4714,4702,4702,4714,4715,4703,4703,4715,4716,4704,4704,4716,4717,4705,4705,4717,4718,4719,4720,4721,4722,4722,4721,4723,4724,4724,4723,4725,4726,4726,4725,4727,4728,4728,4727,4729,4730,4730,4729,4731,4732,4732,4731,4733,4734,4734,4733,4735,4736,4736,4735,4737,4738,4738,4737,4739,4740,4740,4739,4741,4742,4742,4741,4743,4744,4745,4673,4676,4745,4676,4678,4745,4678,4680,4745,4680,4682,4745,4682,4684,4745,4684,4686,4746,4687,4690,4747,4746,4747,4669,4672,4747,4690,4692,4694,4669,4747,4694,4696,4748,4711,4699,4749,4750,4699,4674,4751,4749,4674,4673,4745,4752,4751,4673,4745,4686,4753,4752,4686,4685,4754,4753,4685,4705,4755,4754,4671,4698,4750,4749,4672,4671,4749,4751,4752,4746,4672,4751,4752,4753,4687,4746,4753,4754,4688,4687,4754,4755,4706,4688,4756,4757,4758,4759,4760,4761,4762,4763,4761,4764,4765,4762,4764,4766,4767,4765,4766,4768,4769,4767,4768,4770,4771,4769,4770,4772,4773,4771,4774,4775,4776,4777,4778,4779,4780,4781,4779,4782,4783,4780,4782,4784,4785,4783,4784,4786,4787,4785,4788,4759,4758,4789,4763,4762,4790,4791,4762,4765,4792,4790,4765,4767,4793,4792,4767,4769,4794,4793,4769,4771,4795,4794,4771,4773,4796,4795,4797,4777,4776,4798,4781,4780,4799,4800,4780,4783,4801,4799,4783,4785,4802,4801,4785,4787,4803,4802,4791,4790,4804,4805,4790,4792,4806,4804,4792,4793,4807,4806,4793,4794,4808,4807,4794,4795,4809,4808,4795,4796,4810,4809,4796,4797,4810, 4811,4812,4813,4812,4814,4815,4813,4814,4816,4817,4815,4816,4818,4817,4819,4820,4821,4822,4820,4823,4824,4821,4823,4825,4826,4824,4825,4827,4828,4826,4827,4829,4830,4828,4829,4831,4832,4830,4831,4833,4834,4832,4833,4835,4836,4834,4835,4837,4838,4836,4837,4839,4840,4838,4839,4841,4842,4840,4841,4843,4844,4842,4845,4761,4760,4845,4764,4761,4845,4766,4764,4845,4768,4766,4845,4770,4768,4845,4772,4770,4779,4778,4846,4782,4784,4782,4846,4786,4847,4848,4849,4848,4850,4849,4850,4851,4849,4851,4852,4849,4852,4853,4849,4853,4854,4849,4854,4855,4849,4855,4856,4849,4856,4857,4849,4857,4858,4849,4858,4859,4849,4859,4847,4849,4789,4791,4805,4796,4773,4777,4797,4772,4774,4777,4773,4860,4774,4772,4845,4757,4860,4845,4760,4758,4757,4760,4763,4789,4758,4763,4791,4861,4775,4774,4860,4756,4861,4860,4757,4862,4863,4843,4841,4864,4862,4841,4839,4865,4864,4839,4837,4866,4865,4837,4835,4846,4778,4775,4861,4776,4775,4778,4781,4798,4776,4781,4800,4811,4813,4865,4866,4813,4815,4864,4865,4815,4817,4862,4864,4817,4818,4863,4862,4803,4787,4759,4788,4786,4756,4759,4787,4786,4846,4861,4756,4867,4868,4869,4870,4868,4871,4872,4869,4871,4873,4874,4872,4873,4875,4876,4874,4875,4877,4878,4876,4878,4877,4879,4880,4881,4882,4883,4884,4881,4885,4886,4882,4885,4887,4888,4886,4887,4889,4890,4888,4889,4891,4892,4890,4891,4893,4894,4892,4880,4879,4895,4896,4884,4883,4897,4898,4883,4882,4899,4897,4882,4886,4900,4899,4886,4888,4901,4900,4888,4890,4902,4901,4890,4892,4903,4902,4896,4895,4904,4905,4897,4899,4906,4898,4899,4900,4907,4906,4900,4901,4908,4907,4901,4902,4909,4908,4902,4903,4910,4909,4904,4911,4912,4905,4911,4913,4914,4912,4913,4915,4916,4914,4915,4917,4918,4916,4919,4920,4921,4922,4921,4923,4924,4922,4923,4925,4926,4924,4926,4925,4927,4928,4929,4930,4931,4932,4932,4931,4920,4919,4933,4934,4935,4936,4935,4934,4937,4938,4938,4937,4939,4940,4939,4941,4942,4940,4943,4944,4945,4946,4944,4933,4936,4945,4947,4948,4949,4950,4950,4949,4951,4952,4951,4953,4954,4952,4953,4955,4956,4954,4957,4958,4959,4960,4958,4948,4947,4959,4961,4962,4963,4964,4963,4965,4966, 4964,4965,4967,4968,4966,4967,4969,4970,4968,4971,4972,4973,4974,4973,4962,4961,4974,4975,4976,4977,4978,4977,4976,4979,4980,4980,4979,4981,4982,4981,4983,4984,4982,4985,4986,4987,4988,4986,4975,4978,4987,4989,4990,4991,4992,4991,4990,4993,4994,4994,4993,4995,4996,4995,4997,4998,4996,4999,5000,5001,5002,5000,4989,4992,5001,5003,5004,5005,5006,5007,5004,5003,5008,5009,5007,5008,5010,5011,5009,5010,5012,5013,5014,5015,5016,5006,5005,5014,5013,5017,5018,5019,5020,5020,5021,5022,5017,4978,4977,5023,5024,4977,4980,5025,5023,4980,4982,5026,5025,4982,4984,5027,5026,5028,4988,4987,5029,4987,4978,5024,5029,5023,4990,4989,5024,5025,4993,4990,5023,5026,4995,4993,5025,4997,4995,5026,5027,5000,4999,5028,5029,5024,4989,5000,5029,4919,4922,5030,5031,4922,4924,5032,5030,5032,4924,4926,5033,5033,4926,4928,5034,5035,4929,4932,5036,4932,4919,5031,5036,5037,4936,4935,5038,5030,4934,4933,5031,4935,4938,5039,5038,5032,4937,4934,5030,4938,4940,5040,5039,5033,4939,4937,5032,4940,4942,5041,5040,4941,4939,5033,5034,5042,4946,4945,5043,4944,4943,5035,5036,4945,4936,5037,5043,5031,4933,4944,5036,5044,4947,4950,5045,5038,4949,4948,5037,4950,4952,5046,5045,5039,4951,4949,5038,4952,4954,5047,5046,5040,4953,4951,5039,4954,4956,5048,5047,4955,4953,5040,5041,5049,4960,4959,5050,4958,4957,5042,5043,4959,4947,5044,5050,4948,4958,5043,5037,4961,4964,5051,5052,5045,4963,4962,5044,4964,4966,5053,5051,5046,4965,4963,5045,4966,4968,5054,5053,5047,4967,4965,5046,5054,4968,4970,5055,4969,4967,5047,5048,5056,4971,4974,5057,4973,4972,5049,5050,4974,4961,5052,5057,4962,4973,5050,5044,5051,4976,4975,5052,5053,4979,4976,5051,5054,4981,4979,5053,4983,4981,5054,5055,4986,4985,5056,5057,4975,4986,5057,5052,5058,4921,4920,5059,5060,4923,4921,5058,4925,4923,5060,5061,4927,4925,5061,5062,4931,4930,5063,5064,5059,4920,4931,5064,5065,5003,5006,5066,5005,5004,5058,5059,5067,5008,5003,5065,5004,5007,5060,5058,5068,5010,5008,5067,5007,5009,5061,5060,5012,5010,5068,5069,5061,5009,5011,5062,5013,5016,5070,5071,5063,5015,5014,5064,5066,5006,5013,5071,5014,5005,5059,5064,5066, 5072,5019,5065,5019,5018,5067,5065,5018,5073,5068,5067,5073,5074,5069,5068,5070,5022,5021,5071,5071,5021,5072,5066,5075,5076,5077,5078,5077,5076,5079,5080,5080,5079,5081,5082,5081,5083,5084,5082,5085,5086,5087,5088,5086,5075,5078,5087,5089,5090,5091,5092,5091,5093,5094,5092,5093,5095,5096,5094,5096,5095,5097,5098,5099,5100,5101,5102,5102,5101,5090,5089,5103,5104,5105,5106,5104,5107,5108,5105,5108,5107,5109,5110,5110,5109,5111,5112,5113,5114,5115,5116,5116,5115,5103,5106,5117,5118,5119,5120,5119,5118,5121,5122,5122,5121,5123,5124,5124,5123,5125,5126,5127,5128,5129,5130,5129,5128,5117,5120,5131,5132,5133,5134,5133,5135,5136,5134,5135,5137,5138,5136,5138,5137,5139,5140,5141,5142,5143,5144,5144,5143,5132,5131,5145,4992,4991,5146,4991,4994,5147,5146,4994,4996,5148,5147,5148,4996,4998,5149,5150,5002,5001,5151,5151,5001,4992,5145,5152,5153,5154,5155,5156,5157,5152,5155,5158,5159,5157,5156,5160,5161,5159,5158,5162,5163,5164,5165,5153,5162,5165,5154,5166,5167,5168,5169,5167,5166,5170,5171,5132,5172,5173,5133,5133,5173,5174,5135,5135,5174,5175,5137,5137,5175,5176,5139,5177,5178,5143,5142,5143,5178,5172,5132,5173,5172,5145,5146,5174,5173,5146,5147,5175,5174,5147,5148,5149,5176,5175,5148,5151,5178,5177,5150,5172,5178,5151,5145,5075,5179,5180,5076,5076,5180,5181,5079,5181,5182,5081,5079,5182,5183,5083,5081,5184,5185,5086,5085,5086,5185,5179,5075,5186,5187,5091,5090,5180,5179,5089,5092,5091,5187,5188,5093,5181,5180,5092,5094,5093,5188,5189,5095,5182,5181,5094,5096,5095,5189,5190,5097,5098,5183,5182,5096,5191,5192,5101,5100,5102,5185,5184,5099,5101,5192,5186,5090,5179,5185,5102,5089,5193,5194,5104,5103,5187,5186,5106,5105,5104,5194,5195,5107,5188,5187,5105,5108,5107,5195,5196,5109,5189,5188,5108,5110,5109,5196,5197,5111,5112,5190,5189,5110,5198,5199,5115,5114,5116,5192,5191,5113,5115,5199,5193,5103,5106,5186,5192,5116,5117,5200,5201,5118,5194,5193,5120,5119,5118,5201,5202,5121,5195,5194,5119,5122,5121,5202,5203,5123,5196,5195,5122,5124,5203,5204,5125,5123,5126,5197,5196,5124,5205,5206,5128,5127,5129,5199,5198,5130,5128,5206,5200, 5117,5120,5193,5199,5129,5201,5200,5131,5134,5202,5201,5134,5136,5203,5202,5136,5138,5140,5204,5203,5138,5144,5206,5205,5141,5131,5200,5206,5144,5207,5208,5078,5077,5209,5207,5077,5080,5082,5210,5209,5080,5084,5211,5210,5082,5087,5212,5213,5088,5208,5212,5087,5078,5214,5215,5153,5152,5154,5208,5207,5155,5216,5214,5152,5157,5155,5207,5209,5156,5217,5216,5157,5159,5156,5209,5210,5158,5161,5218,5217,5159,5210,5211,5160,5158,5162,5219,5220,5163,5213,5212,5165,5164,5215,5219,5162,5153,5165,5212,5208,5154,5215,5214,5168,5221,5168,5214,5216,5169,5169,5216,5217,5222,5222,5217,5218,5223,5220,5219,5171,5170,5219,5215,5221,5171,5072,5020,5019,5018,5224,5073,5073,5224,5074,5021,5020,5072,5221,5168,5167,5169,5222,5225,5222,5223,5225,5171,5221,5167,5226,5227,5228,5229,5227,5230,5231,5228,5230,5232,5233,5231,5232,5234,5235,5233,5234,5236,5237,5235,5236,5238,5239,5237,5238,5240,5241,5239,5240,5242,5243,5241,5242,5244,5245,5243,5244,5246,5247,5245,5246,5248,5249,5247,5248,5226,5229,5249,5250,5251,5252,5253,5251,5254,5255,5252,5254,5256,5257,5255,5256,5258,5259,5257,5258,5260,5261,5259,5260,5262,5263,5261,5262,5264,5265,5263,5264,5266,5267,5265,5266,5268,5269,5267,5268,5270,5271,5269,5270,5272,5273,5271,5272,5274,5275,5273,5276,5277,5278,5279,5277,5280,5281,5278,5280,5282,5283,5281,5282,5284,5285,5283,5284,5286,5287,5285,5286,5288,5289,5287,5288,5290,5291,5289,5290,5292,5293,5291,5292,5294,5295,5293,5294,5296,5297,5295,5296,5298,5299,5297,5298,5276,5279,5299,5300,5227,5226,5300,5230,5227,5300,5232,5230,5300,5234,5232,5300,5236,5234,5300,5238,5236,5300,5240,5238,5300,5242,5240,5300,5244,5242,5300,5246,5244,5300,5248,5246,5300,5226,5248,5279,5278,5301,5278,5281,5301,5281,5283,5301,5283,5285,5301,5285,5287,5301,5287,5289,5301,5289,5291,5301,5291,5293,5301,5293,5295,5301,5295,5297,5301,5297,5299,5301,5299,5279,5301,5302,5303,5304,5305,5303,5306,5307,5304,5306,5308,5309,5307,5308,5310,5311,5309,5310,5312,5313,5311,5312,5314,5315,5313,5314,5316,5317,5315,5316,5318,5319,5317,5318,5320,5321,5319,5320,5322,5323,5321,5322,5324,5325,5323,5324, 5302,5305,5325,5326,5327,5328,5329,5327,5330,5331,5328,5330,5332,5333,5331,5332,5334,5335,5333,5334,5336,5337,5335,5336,5338,5339,5337,5338,5340,5341,5339,5340,5342,5343,5341,5342,5344,5345,5343,5344,5346,5347,5345,5346,5348,5349,5347,5348,5350,5351,5349,5352,5353,5354,5355,5353,5356,5357,5354,5356,5358,5359,5357,5358,5360,5361,5359,5360,5362,5363,5361,5362,5364,5365,5363,5364,5366,5367,5365,5366,5368,5369,5367,5368,5370,5371,5369,5370,5372,5373,5371,5372,5374,5375,5373,5374,5352,5355,5375,5376,5303,5302,5376,5306,5303,5376,5308,5306,5376,5310,5308,5376,5312,5310,5376,5314,5312,5376,5316,5314,5376,5318,5316,5376,5320,5318,5376,5322,5320,5376,5324,5322,5376,5302,5324,5355,5354,5377,5354,5357,5377,5357,5359,5377,5359,5361,5377,5361,5363,5377,5363,5365,5377,5365,5367,5377,5367,5369,5377,5369,5371,5377,5371,5373,5377,5373,5375,5377,5375,5355,5377,5378,5379,5380,5381,5378,5382,5383,5379,5384,5385,5382,5386,5384,5387,5388,5385,5384,5386,5389,5387,5390,5391,5392,5393,5390,5378,5394,5391,5390,5386,5382,5378,5390,5393,5389,5386,5385,5388,5395,5396,5385,5396,5383,5382,5397,5398,5399,5400,5397,5401,5402,5398,5397,5387,5389,5401,5397,5400,5388,5387,5403,5404,5402,5401,5403,5405,5406,5404,5403,5393,5392,5405,5403,5401,5389,5393,5400,5399,5407,5408,5400,5408,5395,5388,5398,5409,5410,5399,5398,5402,5411,5409,5404,5412,5411,5402,5404,5406,5413,5412,5399,5410,5414,5415,5416,5417,5418,5419,5420,5421,5417,5416,5420,5422,5423,5421,5424,5425,5423,5422,5424,5426,5427,5425,5426,5428,5429,5427,5394,5381,5430,5431,5381,5380,5432,5430,5391,5433,5434,5392,5391,5394,5431,5433,5405,5435,5436,5406,5405,5392,5434,5435,5406,5436,5437,5413,5438,5439,5440,5441,5442,5443,5444,5445,5442,5446,5429,5443,5442,5445,5437,5446,5447,5448,5410,5409,5447,5449,5450,5451,5447,5409,5411,5449,5452,5449,5411,5412,5452,5441,5450,5449,5452,5412,5413,5453,5448,5454,5414,5410,5448,5451,5455,5454,5456,5443,5429,5428,5456,5457,5444,5443,5458,5459,5418,5417,5458,5431,5430,5459,5459,5460,5461,5418,5459,5430,5432,5460,5462,5463,5434,5433,5462,5421,5423,5463,5462,5458,5417, 5421,5462,5433,5431,5458,5464,5465,5436,5435,5464,5425,5427,5465,5464,5463,5423,5425,5464,5435,5434,5463,5465,5446,5437,5436,5465,5427,5429,5446,5466,5445,5444,5438,5466,5413,5437,5445,5467,5468,5469,5470,5467,5471,5472,5468,5467,5473,5474,5471,5471,5475,5476,5472,5471,5474,5477,5475,5468,5478,5479,5469,5468,5472,5480,5478,5472,5476,5481,5480,5481,5476,5482,5483,5475,5484,5482,5476,5485,5486,5470,5469,5487,5473,5470,5488,5487,5489,5474,5473,5489,5490,5477,5474,5491,5492,5493,5494,5495,5496,5497,5498,5497,5494,5493,5498,5499,5500,5492,5491,5499,5501,5502,5500,5503,5504,5502,5501,5503,5505,5506,5504,5507,5508,5509,5506,5510,5469,5479,5511,5512,5483,5482,5513,5513,5482,5484,5514,5515,5514,5484,5477,5516,5479,5517,5518,5519,5520,5496,5495,5416,5419,5493,5492,5521,5498,5493,5419,5521,5522,5495,5498,5420,5500,5502,5422,5420,5416,5492,5500,5424,5504,5506,5426,5424,5422,5502,5504,5426,5506,5509,5523,5524,5525,5457,5456,5524,5456,5523,5509,5526,5519,5495,5522,5521,5419,5418,5461,5526,5522,5521,5461,5527,5518,5517,5528,5444,5457,5438,5457,5439,5438,5440,5451,5450,5440,5450,5441,5455,5451,5440,5413,5466,5453,5441,5453,5438,5438,5453,5466,5451,5448,5447,5453,5441,5452,5470,5473,5467,5477,5484,5475,5469,5510,5485,5470,5486,5529,5470,5529,5488,5528,5517,5530,5477,5490,5515,5511,5479,5516,5381,5394,5378,5531,5530,5517,5479,5478,5532,5533,5534,5535,5536,5537,5481,5483,5512,5538,5532,5478,5480,5481,5537,5539,5540,5541,5542,5543,5544,5545,5542,5541,5546,5547,5548,5549,5550,5551,5552,5553,5551,5554,5555,5552,5554,5556,5557,5555,5551,5558,5559,5554,5560,5558,5551,5550,5549,5561,5562,5546,5541,5563,5564,5544,5565,5563,5541,5540,5543,5566,5567,5540,5556,5568,5569,5557,5559,5570,5568,5556,5564,5563,5558,5560,5568,5571,5572,5569,5573,5571,5568,5570,5574,5573,5570,5558,5563,5575,5574,5558,5576,5575,5565,5567,5566,5577,5576,5567,5578,5579,5580,5581,5582,5583,5579,5578,5584,5585,5580,5579,5586,5584,5583,5574,5575,5587,5586,5574,5577,5588,5587,5576,5589,5585,5584,5586,5588,5589,5586,5587,5544,5549,5548,5545,5546,5550,5553,5547,5550,5546,5562, 5560,5544,5564,5561,5549,5571,5578,5581,5572,5573,5582,5578,5571,5583,5582,5573,5574,5562,5561,5564,5560,5554,5559,5556,5540,5567,5565,5559,5558,5570,5563,5565,5575,5579,5583,5584,5575,5576,5587,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5596,5602,5603,5597,5602,5604,5605,5603,5606,5590,5593,5607,5608,5609,5610,5611,5599,5609,5608,5600,5610,5612,5613,5611,5614,5615,5613,5612,5592,5591,5595,5594,5598,5601,5616,5617,5603,5618,5619,5597,5620,5621,5593,5592,5622,5623,5600,5608,5624,5625,5617,5604,5626,5627,5591,5590,5628,5629,5614,5612,5630,5631,5611,5613,5632,5633,5596,5595,5606,5634,5635,5626,5590,5636,5637,5599,5598,5602,5596,5633,5638,5594,5639,5640,5620,5592,5641,5618,5603,5605,5638,5624,5604,5602,5610,5642,5628,5612,5591,5627,5643,5632,5595,5609,5644,5642,5610,5637,5644,5609,5599,5616,5601,5645,5646,5598,5647,5636,5600,5623,5648,5601,5608,5611,5631,5649,5622,5650,5630,5613,5615,5651,5650,5615,5652,5639,5594,5605,5616,5646,5641,5617,5616,5605,5604,5617,5625,5647,5598,5601,5648,5645,5619,5652,5594,5597,5653,5654,5607,5593,5621,5653,5593,5655,5656,5657,5658,5656,5659,5660,5657,5661,5662,5663,5664,5665,5666,5662,5667,5668,5663,5667,5669,5670,5668,5669,5671,5672,5670,5671,5673,5674,5672,5673,5675,5676,5674,5677,5678,5679,5680,5681,5682,5683,5684,5682,5685,5686,5683,5685,5687,5688,5686,5687,5689,5690,5688,5689,5691,5692,5690,5692,5691,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5658,5657,5703,5665,5703,5657,5660,5664,5663,5704,5705,5663,5668,5706,5704,5668,5670,5707,5706,5670,5672,5708,5707,5672,5674,5709,5708,5674,5676,5710,5709,5676,5711,5712,5710,5711,5713,5714,5712,5713,5715,5716,5714,5717,5716,5715,5684,5683,5683,5686,5718,5717,5686,5688,5719,5718,5688,5690,5720,5719,5690,5692,5721,5720,5692,5694,5722,5721,5723,5724,5725,5726,5702,5701,5727,5728,5700,5699,5729,5730,5731,5732,5733,5734,5693,5691,5735,5736,5691,5689,5737,5735,5689,5687,5738,5737,5687,5685,5739,5738,5685,5682,5740,5739,5682,5681,5740,5681,5741,5742,5740,5741,5743,5744,5742,5743,5745,5746,5744,5745,5675,5747,5746,5675,5673,5748, 5747,5673,5671,5749,5748,5671,5669,5750,5749,5669,5667,5751,5750,5667,5662,5752,5751,5662,5661,5753,5752,5661,5754,5755,5753,5754,5655,5755,5715,5713,5756,5757,5713,5711,5678,5756,5711,5676,5679,5678,5676,5675,5680,5679,5675,5745,5677,5680,5745,5743,5758,5677,5743,5741,5759,5758,5741,5681,5760,5759,5681,5684,5761,5760,5684,5715,5757,5761,5757,5759,5760,5761,5758,5756,5678,5677,5757,5756,5758,5759,5754,5666,5659,5656,5666,5665,5660,5659,5703,5664,5705,5762,5658,5703,5762,5763,5656,5655,5754,5661,5666,5754,5664,5703,5665,5732,5695,5693,5699,5702,5697,5696,5694,5693,5695,5698,5698,5723,5694,5702,5728,5725,5724,5728,5722,5726,5725,5722,5694,5723,5726,5693,5736,5733,5732,5736,5729,5734,5733,5729,5699,5731,5734,5699,5696,5731,5731,5696,5695,5732,5697,5724,5723,5698,5702,5724,5697,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5773,5776,5777,5774,5776,5778,5779,5777,5780,5781,5782,5783,5781,5784,5785,5782,5784,5786,5787,5785,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5806,5808,5809,5767,5766,5810,5811,5812,5813,5814,5815,5775,5774,5816,5817,5774,5777,5818,5816,5777,5779,5819,5818,5820,5821,5783,5782,5782,5785,5822,5820,5822,5785,5787,5823,5791,5791,5790,5824,5822,5790,5792,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5837,5841,5842,5838,5801,5800,5843,5844,5845,5846,5847,5848,5849,5850,5793,5851,5789,5788,5852,5851,5788,5853,5854,5852,5784,5781,5855,5856,5855,5781,5780,5857,5778,5776,5858,5859,5776,5773,5860,5858,5773,5772,5861,5860,5862,5863,5864,5865,5765,5764,5866,5867,5868,5831,5833,5778,5780,5783,5779,5857,5780,5778,5859,5792,5790,5789,5793,5851,5793,5789,5824,5792,5869,5783,5821,5819,5779,5870,5869,5792,5795,5793,5850,5871,5794,5853,5786,5872,5854,5786,5784,5856,5872,5823,5853,5788,5791,5873,5874,5875,5876,5787,5786,5877,5878,5786,5853,5879,5877,5853,5823,5880,5879,5823,5787,5878,5880,5878,5877,5874,5873,5877,5879,5875,5874,5879,5880,5876,5875,5880,5878,5873,5876,5881,5882,5883,5884,5835,5834,5830,5834,5833, 5831,5801,5885,5886,5802,5841,5885,5801,5845,5847,5796,5794,5800,5803,5887,5829,5798,5797,5795,5794,5796,5799,5799,5825,5795,5829,5832,5827,5826,5832,5870,5828,5827,5870,5795,5825,5828,5794,5871,5848,5847,5871,5843,5849,5848,5843,5800,5846,5849,5800,5797,5846,5798,5826,5825,5799,5829,5826,5798,5846,5797,5796,5847,5841,5845,5842,5888,5837,5805,5804,5836,5835,5807,5806,5835,5884,5807,5836,5806,5809,5889,5868,5833,5836,5809,5841,5837,5888,5885,5772,5769,5862,5772,5775,5770,5769,5766,5765,5768,5771,5771,5812,5766,5775,5817,5814,5813,5817,5810,5815,5814,5810,5766,5812,5815,5765,5867,5864,5863,5867,5861,5865,5864,5861,5772,5862,5865,5862,5769,5768,5863,5863,5768,5765,5775,5813,5770,5770,5813,5812,5771,5890,5882,5881,5885,5888,5891,5892,5893,5886,5883,5894,5884,5892,5891,5895,5886,5893,5896,5897,5898,5899,5900,5901,5902,5903,5904,5893,5892,5905,5906,5892,5895,5907,5905,5895,5894,5908,5907,5894,5883,5909,5908,5883,5882,5910,5909,5882,5890,5911,5910,5912,5911,5890,5896,5896,5893,5906,5912,5913,5914,5915,5916,5914,5917,5918,5915,5917,5919,5920,5918,5919,5921,5922,5920,5921,5923,5924,5922,5923,5925,5926,5924,5925,5927,5928,5926,5927,5913,5916,5928,5916,5915,5898,5897,5915,5918,5899,5898,5918,5920,5900,5899,5920,5922,5901,5900,5922,5924,5902,5901,5924,5926,5903,5902,5926,5928,5904,5903,5928,5916,5897,5904,5807,5884,5894,5895,5891,5804,5804,5891,5888,5929,5881,5834,5830,5887,5929,5830,5829,5802,5886,5896,5890,5881,5929,5803,5802,5929,5887,5930,5889,5809,5808,5805,5837,5840,5805,5840,5808,5806,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5937,5936,5951,5952,5936,5953,5954,5951,5955,5956,5957,5958,5959,5949,5948,5960,5961,5962,5963,5964,5952,5965,5966,5937,5967,5965,5952,5968,5956,5955,5945,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5975,5982,5983,5976,5984,5985,5986,5987,5975,5988,5989,5990,5981,5991,5992,5993,5961,5964,5994,5995,5996,5997,5998,5999,6000,5998,5934,5933,5987,6001,6002,5984,6003,6004,6005,6006,6007,6008,6009,6010,6011,5972,6012,6013,5997, 5996,6014,6015,6016,6017,6018,6019,6020,5957,5956,6021,6022,5951,5954,6023,5968,5952,5951,6022,6012,6024,6025,5985,5985,6025,6026,5986,6027,6028,6029,5976,5977,5976,6029,6030,6030,6029,6031,6032,6006,6033,6034,6035,6015,6014,6036,6037,6037,6036,6009,6008,5934,5998,5997,6038,6000,6039,5999,5998,5977,6040,6041,5974,6032,6042,6040,6030,6043,6044,6045,6046,6047,6048,6046,6045,6049,6050,6042,6051,6042,6050,6041,6040,6052,6041,6050,6053,5974,6041,6052,6054,6055,6026,6025,6056,6057,6058,6059,6060,6017,6061,6062,6018,6063,6064,6065,6066,6018,6062,6067,6068,6061,6069,6001,6062,6062,6001,5987,6067,6066,6068,6067,6063,6055,6070,6071,6072,6023,5954,6073,6074,6019,6018,6068,6075,6076,6071,6070,6077,6067,5987,5986,6063,6078,5953,6079,6080,6078,6073,5954,5953,6054,6045,6044,5988,6047,6052,6053,6081,6045,6054,6052,6047,6082,6081,6053,6083,6021,5956,5969,6084,6012,5985,5984,6013,6085,5942,5941,6086,5966,6087,5938,5937,6088,6089,6090,6091,5953,5936,5935,6079,6092,6038,5997,6015,5972,6093,6024,6012,6094,6083,6049,6089,6051,6042,6032,5979,5981,5993,6091,5978,6090,6089,6049,6051,5979,6032,6031,5980,6095,6065,6064,6072,6064,6063,5986,6026,6072,6064,6026,6055,6096,6097,6098,6099,5933,6033,6006,6000,6100,6101,6033,5933,6102,6103,5960,5948,5948,5947,6104,6102,5949,6105,5950,6090,6051,5979,5978,6106,6107,6108,6109,6092,6110,6111,6038,6112,6113,6114,6115,6106,6116,6117,6107,5964,5963,6037,6008,6008,6007,5994,5964,5931,6111,6114,6113,6111,6110,6103,6114,5959,5960,5962,5961,5960,6103,6110,5962,6092,5963,5962,6110,6079,6118,6019,6075,5941,5940,5935,5938,6087,6086,5941,5938,5939,6119,6118,5940,5940,6118,6079,5935,6059,6104,5947,6120,6065,6095,6073,6078,6078,6080,6066,6065,6075,6068,6066,6080,6121,6074,6073,6095,6122,6104,6058,6123,6120,5947,5950,5958,5958,5950,6105,5955,6059,6120,6124,6060,6125,6123,6058,6057,6120,5958,5957,6124,6126,6127,6043,6046,6128,6056,6024,6093,6129,6130,6084,5969,6031,6029,6131,6132,5980,6031,6133,6134,5981,5980,6135,6136,6137,6138,6002,6139,6002,6138,6013,5984,6083,6094,6140,6082,6141,6142,6143,6113,6143,6099,6098,5932, 6144,6085,6086,6145,6145,6086,6087,6146,6096,6099,6147,6148,6099,6143,6142,6147,6102,6104,6122,6149,6150,6151,6152,6153,6154,6155,6156,6153,6157,6158,6159,6160,6161,6162,6163,6164,6056,6128,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6170,6169,6176,6164,6158,6177,6161,6155,6154,6163,6162,6115,6149,6153,6152,6112,6115,6152,6178,6179,6112,6178,6180,6123,6163,6154,6122,6181,6160,6182,6166,6173,6172,6168,6167,6127,6126,6172,6171,6183,6175,6176,6184,6185,6183,6184,6186,6141,6179,6180,6187,6142,6141,6187,6188,6189,6190,6191,6192,6193,6189,6192,6188,6194,6181,6166,6165,6081,6169,6168,6048,6081,6082,6176,6169,6172,6126,6048,6168,6082,6140,6184,6176,6140,6195,6186,6184,6196,6193,6188,6187,6148,6147,6192,6191,6147,6142,6188,6192,6055,6056,6166,6182,6055,6182,6159,6070,6070,6159,6158,6077,6125,6077,6158,6164,6149,6122,6154,6153,6178,6152,6151,6197,6197,6198,6180,6178,6198,6196,6187,6180,5944,6129,5969,5945,5932,6098,6100,5933,6098,6097,6199,6100,6119,6016,6019,6118,6069,6139,6002,6001,6200,6201,6202,6203,6201,6204,6205,6202,6206,6207,6208,6209,6210,6211,6212,6213,6214,6174,6173,6215,6216,6217,6215,6173,6170,6175,6218,6219,6217,6220,6221,6215,6222,6209,6208,6223,6224,6225,6226,6227,6228,6229,6221,6230,6231,6204,6201,6232,6229,6228,6233,6209,6232,6234,6235,6231,6232,6200,6236,6234,6227,6209,6233,6224,6227,6213,6212,6209,6210,6213,6237,6238,6226,6237,6213,6227,6225,6239,6240,6226,6219,6218,6241,6242,6219,6242,6216,6167,6217,6216,6242,6243,6244,6245,6246,6247,6175,6183,6248,6218,6247,6249,6250,6244,6249,6247,6251,6252,6253,6254,6204,6255,6242,6241,6256,6243,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6265,6268,6274,6275,6276,6277,6278,6279,6275,6278,6280,6281,6282,6283,6284,6283,6260,6285,6286,6287,6285,6260,6259,6276,6288,6289,6277,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6276,6275,6298,6300,6301,6302,6303,6304,6291,6290,6305,6306,6307,6304,6308,6305,6304,6303,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6319,6318,6320,6321,6322,6323,6324,6325,6326,6327,6321, 6328,6319,6321,6327,6329,6317,6319,6329,6330,6326,6328,6285,6287,6331,6332,6274,6333,6334,6272,6271,6335,6336,6337,6268,6267,6337,6333,6274,6268,6325,6324,6258,6257,6325,6338,6339,6322,6340,6341,6286,6342,6338,6282,6281,6343,6344,6345,6346,6347,6348,6349,6346,6345,6295,6294,6350,6266,6351,6352,6297,6296,6353,6354,6355,6351,6330,6329,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6365,6366,6367,6362,6257,6260,6283,6282,6340,6368,6369,6370,6371,6364,6343,6281,6366,6372,6373,6367,6367,6374,6375,6362,6376,6320,6318,6377,6342,6328,6321,6320,6338,6325,6257,6282,6334,6335,6378,6379,6234,6380,6381,6235,6271,6270,6233,6228,6382,6380,6234,6236,6233,6270,6383,6224,6230,6335,6271,6228,6383,6384,6225,6224,6235,6381,6359,6358,6385,6386,6245,6244,6244,6250,6387,6385,6347,6388,6389,6390,6243,6256,6391,6392,6390,6393,6344,6347,6392,6391,6390,6389,6250,6253,6255,6387,6255,6358,6361,6387,6231,6235,6358,6255,6243,6392,6220,6217,6335,6230,6220,6378,6361,6360,6394,6395,6183,6185,6251,6248,6185,6396,6252,6251,6397,6395,6394,6398,6398,6394,6375,6399,6399,6375,6374,6348,6280,6400,6349,6279,6365,6364,6371,6366,6401,6371,6281,6284,6339,6343,6364,6363,6400,6280,6332,6331,6400,6331,6402,6346,6403,6404,6349,6348,6367,6373,6405,6374,6406,6407,6408,6409,6278,6277,6273,6332,6277,6289,6265,6273,6298,6410,6411,6299,6412,6288,6299,6411,6386,6391,6256,6245,6245,6256,6241,6246,6403,6301,6300,6404,6264,6383,6270,6269,6261,6336,6267,6413,6413,6267,6266,6350,6377,6414,6415,6376,6384,6416,6239,6225,6262,6417,6418,6263,6419,6420,6258,6324,6368,6376,6415,6421,6314,6313,6422,6423,6424,6425,6421,6415,6354,6426,6355,6403,6405,6427,6301,6428,6412,6411,6429,6406,6409,6290,6293,6430,6303,6290,6409,6302,6427,6292,6291,6410,6302,6291,6307,6429,6410,6307,6431,6310,6313,6316,6311,6425,6424,6314,6423,6372,6366,6371,6401,6432,6407,6373,6372,6432,6372,6401,6433,6341,6433,6401,6284,6341,6284,6283,6286,6393,6390,6391,6386,6248,6251,6247,6246,6218,6248,6246,6241,6404,6300,6275,6279,6329,6327,6434,6356,6253,6249,6252,6435,6396,6436,6435,6252,6412,6428,6437,6353,6412,6353, 6296,6288,6402,6379,6378,6388,6347,6346,6402,6388,6394,6360,6362,6375,6363,6362,6360,6359,6381,6339,6363,6359,6322,6339,6381,6380,6323,6322,6380,6382,6263,6418,6416,6384,6264,6263,6384,6383,6385,6387,6361,6395,6424,6415,6414,6315,6314,6327,6326,6438,6434,6326,6287,6439,6438,6259,6440,6439,6287,6258,6420,6440,6259,6398,6344,6393,6397,6399,6345,6344,6398,6174,6214,6222,6441,6254,6435,6436,6442,6204,6254,6442,6443,5943,6444,6445,5944,5944,6445,6446,5944,6446,6129,6025,6024,6056,5972,6011,5973,5972,5971,6093,5949,5959,5995,6105,5974,6054,5988,5975,6005,6039,6000,6006,6040,5977,6030,6075,6080,6079,5955,5946,5945,6053,6050,6049,6083,6199,6101,6100,6103,6102,6149,6114,6103,6115,6104,6059,6058,6094,6089,6088,6447,6091,6090,5978,6007,6010,6108,6103,6149,6115,6112,6179,6113,5931,5934,6038,6111,6037,5963,6092,6015,6071,6121,6095,6072,6448,6076,6125,6057,5957,6020,6449,6124,5955,6105,5946,6013,6450,6011,6113,6143,5932,5931,6179,6141,6113,6451,5965,5967,5966,6146,6087,6081,6048,6047,6048,6126,6046,6447,6195,6140,6094,6077,6125,6076,6156,6150,6153,6157,6177,6158,6160,6159,6182,6164,6163,6123,6123,6125,6164,6237,6240,6452,6226,6240,6237,6237,6452,6238,6207,6223,6208,6212,6206,6209,6219,6167,6170,6215,6221,6214,6211,6206,6212,6201,6200,6232,6230,6221,6220,6222,6214,6221,6229,6223,6441,6222,6173,6167,6216,6378,6389,6388,6338,6343,6339,6295,6288,6296,6299,6288,6276,6342,6320,6376,6431,6307,6306,6332,6273,6274,6262,6261,6413,6405,6293,6292,6353,6351,6296,6407,6370,6369,6369,6421,6407,6405,6406,6293,6422,6407,6423,6286,6285,6328,6430,6409,6408,6220,6392,6389,6231,6255,6204,6389,6378,6220,6254,6253,6435,6405,6348,6374,6400,6346,6349,6332,6280,6278,6425,6407,6421,6312,6453,6430,6309,6289,6266,6265,6304,6307,6291,6405,6403,6348,6289,6288,6295,6309,6430,6408,6310,6309,6408,6430,6453,6308,6303,6368,6342,6376,6369,6368,6421,6310,6408,6422,6313,6302,6301,6427,6410,6298,6302,6411,6410,6429,6405,6407,6406,6405,6292,6427,6340,6433,6341,6407,6432,6370,6340,6342,6368,6408,6407,6422,6407,6425,6423,6340,6370,6433,6370,6432,6433,6373,6407,6405,6385, 6397,6386,6355,6352,6351,6349,6404,6279,6298,6275,6300,6249,6253,6250,6266,6289,6295,6286,6328,6342,6395,6397,6385,6386,6397,6393,6399,6348,6345,6209,6222,6229,6454,6205,6204,6443,6454,6204,6011,6455,6456,5973,6264,6269,6336,6261,6272,6337,6336,6269,6333,6337,6272,6334,6333,6334,6379,6331,6402,6331,6379,5967,6084,6130,6451,5968,6021,6084,5967,6022,6020,6021,5968,6449,6020,6022,6023,6060,6124,6449,6457,6448,6057,6060,6457,6076,6448,6121,6071,6448,6457,6074,6121,6449,6023,6074,6457,6105,6458,5946,6458,6105,5995,6117,6107,6117,5995,5994,6107,5994,6007,6108,6459,6460,6461,6462,6463,6464,6465,6466,5939,5942,6467,6468,6469,6470,6471,6472,6473,6474,6470,6469,6475,6476,6477,6478,6479,6465,6480,6481,6466,6466,6481,6482,6483,6484,6485,6486,6487,6488,6489,6479,6478,6490,6491,6492,6493,6480,6465,6494,6495,6496,6497,6480,6495,6487,6498,6499,6484,6500,6501,6502,6503,6504,6505,6506,6507,6500,6508,6509,6501,6510,6511,6512,6513,6501,6509,6514,6515,6516,6517,6518,6519,6501,6520,6521,6502,6511,6522,6523,6524,6490,6525,6526,6491,6527,6528,6529,6530,6531,6461,6460,6529,6517,6516,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6506,6530,6545,6546,6527,6016,6547,6548,6017,6549,6497,6487,6486,6549,6550,6482,6481,6497,6549,6481,6480,6544,6519,6551,6552,6519,6518,6553,6551,6554,6509,6555,6556,6508,6557,6555,6509,6557,6558,6559,6555,6536,6560,6561,6562,6545,6563,6564,6546,6563,6541,6540,6564,6460,6565,6530,6529,6531,6529,6528,6566,6508,6500,6567,6568,6558,6557,6568,6569,6500,6503,6570,6567,6571,6572,6573,6574,6575,6573,6572,6576,6577,6578,6579,6580,6579,6581,6569,6580,6569,6568,6567,6580,6570,6577,6580,6567,6582,6583,6551,6553,6584,6585,6586,6587,6017,6548,6588,6061,6589,6590,6591,6592,6548,6593,6594,6588,6061,6588,6533,6069,6588,6594,6517,6533,6590,6589,6594,6593,6582,6595,6596,6597,6550,6585,6598,6482,6547,6599,6593,6548,6600,6601,6597,6596,6594,6589,6518,6517,6596,6595,6602,6600,6603,6604,6605,6483,6603,6483,6482,6598,6503,6502,6574,6573,6575,6606,6577,6570,6573,6575,6570,6503,6607,6578,6577,6606,6497,6496,6498,6487,6544, 6543,6516,6519,6085,6608,6467,5942,6494,6465,6464,6609,6610,6611,6612,6613,6538,6614,6539,6483,6605,6463,6466,6615,6545,6530,6565,6506,6544,6552,6616,6617,6613,6579,6578,6581,6513,6558,6569,6511,6510,6611,6522,6612,6581,6579,6613,6513,6512,6559,6558,6602,6595,6592,6591,6592,6553,6518,6589,6595,6582,6553,6592,6618,6619,6620,6621,6461,6531,6536,6562,6622,6461,6562,6623,6624,6479,6489,6625,6479,6624,6626,6476,6478,6477,6627,6628,6612,6510,6513,6581,6536,6531,6566,6537,6615,6565,6629,6630,6631,6632,6633,6634,6635,6636,6637,6491,6541,6563,6492,6541,6491,6526,6538,6459,6634,6633,6629,6629,6633,6625,6630,6488,6490,6493,6489,6488,6628,6525,6490,6489,6493,6630,6625,6615,6630,6493,6492,6605,6599,6547,6638,6467,6464,6463,6468,6609,6464,6467,6608,5939,6468,6638,6119,6468,6463,6605,6638,6586,6639,6476,6626,6591,6603,6598,6602,6603,6591,6590,6604,6599,6604,6590,6593,6584,6602,6598,6585,6640,6641,6587,6626,6639,6485,6477,6476,6485,6484,6627,6477,6586,6585,6550,6639,6642,6584,6587,6641,6639,6550,6486,6485,6643,6572,6571,6644,6645,6616,6552,6583,6646,6498,6496,6647,6559,6648,6649,6555,6512,6650,6651,6559,6511,6652,6653,6512,6137,6139,6532,6654,6532,6516,6543,6654,6578,6607,6655,6617,6656,6617,6655,6657,6658,6634,6659,6660,6659,6462,6620,6619,6661,6474,6475,6662,6144,6663,6608,6085,6663,6664,6609,6608,6618,6665,6666,6619,6619,6666,6660,6659,6624,6667,6640,6626,6668,6669,6670,6671,6672,6669,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6583,6683,6684,6645,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6687,6686,6680,6679,6695,6678,6674,6682,6681,6672,6632,6670,6669,6667,6631,6696,6670,6632,6697,6698,6696,6631,6641,6640,6672,6681,6699,6683,6700,6676,6691,6685,6688,6692,6644,6689,6692,6643,6701,6702,6694,6693,6703,6704,6702,6701,6658,6705,6698,6697,6660,6706,6705,6658,6707,6708,6709,6710,6711,6706,6708,6707,6712,6684,6683,6699,6606,6576,6688,6687,6606,6687,6694,6607,6692,6688,6576,6643,6607,6694,6702,6655,6655,6702,6704,6657,6713,6705,6706,6711,6665,6709,6708,6666,6666,6708,6706,6660,6582,6700,6683,6583,6582,6597,6677,6700,6597, 6601,6678,6677,6642,6680,6678,6601,6667,6669,6672,6640,6696,6714,6671,6670,6714,6696,6698,6715,6715,6698,6705,6713,6471,6499,6498,6646,6462,6461,6622,6620,6620,6622,6716,6621,6119,6638,6547,6016,6069,6533,6532,6139,6717,6718,6719,6720,6720,6719,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6691,6690,6733,6691,6732,6734,6686,6735,6736,6693,6734,6732,6737,6738,6739,6740,6725,6724,6741,6742,6743,6744,6745,6746,6737,6747,6748,6749,6720,6722,6750,6724,6751,6752,6749,6748,6753,6754,6749,6754,6755,6717,6742,6741,6751,6724,6742,6724,6729,6728,6727,6756,6757,6728,6743,6742,6728,6757,6744,6743,6717,6755,6735,6758,6759,6736,6735,6685,6733,6758,6734,6760,6758,6733,6761,6762,6763,6764,6693,6736,6765,6701,6762,6761,6766,6767,6767,6768,6769,6762,6770,6771,6722,6772,6758,6760,6773,6759,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6795,6794,6800,6801,6802,6803,6802,6804,6805,6775,6806,6776,6775,6805,6797,6796,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6794,6797,6818,6817,6819,6820,6821,6822,6809,6812,6823,6824,6823,6825,6826,6827,6822,6823,6824,6828,6829,6830,6831,6827,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6833,6832,6849,6835,6838,6850,6851,6839,6842,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6844,6843,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6849,6850,6851,6852,6873,6874,6856,6875,6876,6877,6878,6879,6859,6858,6880,6881,6882,6863,6883,6841,6840,6884,6853,6885,6886,6854,6885,6887,6888,6886,6867,6889,6890,6891,6876,6892,6893,6877,6879,6878,6894,6895,6881,6880,6896,6897,6898,6872,6871,6899,6900,6868,6867,6891,6901,6902,6903,6904,6905,6906,6887,6907,6885,6908,6907,6887,6853,6857,6908,6885,6858,6857,6853,6856,6877,6893,6909,6910,6905,6806,6805,6906,6911,6912,6791,6913,6914,6915,6916,6917,6918,6784,6783,6919,6920,6792,6791,6912,6826,6864,6847,6824,6902,6774,6777,6903,6902,6901,6921,6922,6923,6924,6804,6925,6922,6926,6800,6803,6927,6928,6929,6930,6931,6930,6929, 6932,6816,6785,6933,6813,6934,6815,6814,6935,6936,6934,6937,6846,6857,6860,6937,6908,6938,6939,6940,6941,6942,6943,6944,6945,6943,6942,6946,6947,6774,6803,6802,6775,6923,6948,6949,6950,6951,6800,6926,6944,6947,6946,6952,6953,6946,6942,6954,6955,6956,6957,6958,6959,6960,6961,6958,6957,6876,6875,6962,6963,6874,6873,6964,6965,6966,6967,6886,6888,6924,6888,6887,6906,6922,6803,6774,6902,6914,6968,6969,6915,6754,6753,6970,6971,6788,6752,6751,6789,6972,6755,6754,6971,6751,6741,6973,6789,6746,6745,6916,6915,6973,6741,6744,6974,6753,6938,6941,6970,6975,6761,6764,6976,6761,6975,6977,6766,6928,6978,6979,6980,6760,6981,6982,6773,6978,6928,6927,6983,6981,6979,6978,6982,6766,6977,6771,6770,6771,6977,6939,6938,6748,6771,6938,6753,6760,6734,6738,6981,6915,6969,6738,6746,6939,6984,6985,6940,6701,6765,6769,6703,6703,6769,6768,6986,6987,6988,6985,6984,6988,6989,6954,6985,6989,6931,6955,6954,6799,6798,6932,6990,6943,6947,6951,6944,6991,6801,6800,6951,6921,6945,6944,6926,6990,6911,6913,6799,6990,6929,6992,6911,6993,6931,6932,6994,6946,6955,6995,6952,6996,6997,6998,6999,6795,6913,6790,6796,6796,6790,6793,6807,6817,6818,7000,7001,7002,7000,6818,6808,6976,6764,6773,6982,6764,6763,6759,6773,6993,6994,6821,6820,6779,6786,6789,6973,6778,7003,6784,6918,7003,6933,6785,6784,6848,6847,6863,6882,7004,6880,6863,6866,6829,6828,7005,6836,6829,6836,6835,6956,6835,6849,6957,6956,6960,6957,6849,6872,6830,6959,7006,7007,7008,7006,6959,6958,6958,6961,7009,7008,6961,7010,7011,7009,6838,6837,6834,6833,6869,6850,6838,6833,6869,6868,6871,6850,6868,6900,6899,6871,6967,6966,7012,7013,7014,6839,6851,6962,6963,6962,6851,6874,6963,6874,6965,6892,6893,6892,7015,7016,7015,7017,7018,7016,7019,7020,7021,7022,7023,7018,7017,7024,7025,7023,7026,7027,7028,7026,7024,7029,7018,7023,7025,7030,7031,7026,7028,7032,7033,7034,7031,7035,7031,7032,7036,7035,7037,7035,7038,7039,7038,7035,7040,7041,7038,7042,7043,7044,7045,7046,7042,7038,7044,7043,7047,7048,7049,7050,7051,7052,7053,7054,7050,7055,7056,7034,7033,7057,7058,7059,7060,7054,7061,7062,7063,7064,7065,7066,7067,7068,7069, 7063,7070,7071,7072,7073,7068,7074,7075,7076,7077,7070,7078,7073,7079,7080,7077,7076,7081,7082,7083,7084,7085,7086,7087,7088,7089,7086,7064,7090,7091,7061,7092,7089,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7102,7106,7107,7108,7109,7110,7105,7111,7112,7113,7114,7106,7109,7115,7116,7117,7118,7119,7120,7114,7121,7122,7123,7118,7124,7125,7126,7123,7127,7126,7125,7128,7129,7128,7130,7131,7129,7132,7133,7134,7135,7131,7130,7136,7137,7138,7134,7139,7140,7141,7142,7143,7139,7144,7145,7146,7147,7148,7149,7143,7142,7150,7151,7152,7153,7135,7154,7155,7132,7156,7157,7158,7159,7159,7160,7161,7156,7162,7163,7164,7165,7166,7167,7168,7169,7167,7170,7171,7168,7172,7173,7174,7175,7176,7177,7178,7166,7179,7175,7180,7181,7182,7176,7183,7184,7185,7186,7179,7181,7184,7183,7187,7188,7189,7190,7186,7185,7187,7191,7192,7188,7193,7194,7190,7195,7196,7197,7191,7198,7199,7200,7194,7193,7196,7198,7201,7202,7203,7204,7200,7199,7205,7202,7201,7206,7207,7208,7204,7203,7206,7209,7210,7205,7211,7208,7207,7212,7209,7213,7214,7210,7215,7216,7217,7218,7219,7220,7221,7222,7219,6891,6890,7220,7194,7200,7175,7179,7179,7186,7190,7194,7204,7208,7172,7175,7223,7016,7018,7030,7027,7224,7225,7025,7183,7176,7201,7198,7198,7191,7187,7183,7176,7166,7209,7206,7213,7209,7166,7169,7226,7219,7222,7227,7219,7226,6900,6891,7228,7011,7010,7229,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7059,7238,7236,7238,7028,7239,7160,7240,7241,7242,7158,7243,7244,7136,7245,7150,7146,7246,7150,7153,7147,7146,7247,7125,7248,7249,7250,7233,7232,7251,7127,7122,7103,7101,7124,7104,7103,7122,7124,7117,7111,7104,7117,7116,7112,7111,7252,7066,7234,7233,7252,7233,7250,7094,7074,7067,7093,7088,7085,7079,7072,7087,7080,7079,7085,7084,7053,7040,7036,7058,7041,7040,7053,7055,7049,7045,7041,7055,7241,7240,7130,7253,7022,7017,7015,7019,7024,7017,7022,7029,7254,7255,7256,7257,7257,6898,6899,7254,7258,7259,7241,7253,6960,6872,6898,7260,7261,7260,6898,7257,7257,7256,7259,7261,7259,7256,7242,7241,6974,6744,6755,6972,6781,6780,6904,6903,6781,6903,6777,7003,6950,7262,7012, 6966,6884,7263,7264,6883,7265,7012,7262,7266,7267,6831,6830,7007,6829,6956,6959,6830,7268,7269,7270,7218,6860,6859,6861,6843,6846,6937,6860,6843,6910,6909,6894,6878,6856,6910,6878,6858,6855,7014,6962,6875,6993,6820,7271,6995,7272,7273,7000,7002,6996,6810,6809,6997,7005,6997,6809,6822,6834,7005,6822,6827,6819,6812,6811,7271,7001,6825,6812,6819,7273,7274,6825,7001,7275,7276,7260,7261,7261,7259,7258,7275,7275,7277,7251,7278,7277,7258,7247,7249,7278,7232,7235,7279,7230,7235,7237,7236,7229,7279,7235,7230,7279,7229,7010,7276,7236,7239,7231,7230,7277,7249,7280,7251,7248,7100,7280,7249,7225,7281,7030,7025,7282,7223,7030,7281,6909,6893,7016,7223,7160,7283,7171,7161,7168,7171,7283,7284,7222,7214,7213,7227,7267,6883,7264,6998,7007,6841,6883,7267,7006,6842,6841,7007,6852,6842,7006,7008,7008,7285,6873,6852,7285,7286,6964,6873,7019,6964,7286,7020,7009,7011,7286,7285,7020,7286,7011,7228,7020,7228,7231,7021,7231,7239,7029,7021,7266,7263,6884,7265,6953,6991,6951,6947,7287,6953,6952,6999,7287,7288,6991,6953,6925,6801,6991,7288,6925,6804,6802,6801,6983,6976,6982,6978,6765,6763,6762,6769,6736,6759,6763,6765,6861,6859,6879,7289,7289,6879,6895,7290,6894,7291,7290,6895,6861,7289,7269,6862,7269,7289,7290,7270,6994,6798,6794,6821,6908,6937,6935,6907,6864,6826,7274,6865,6770,7292,6768,6767,6986,6768,7292,7293,7294,6936,6846,6845,7294,7295,6815,6936,6854,6886,6967,7014,6992,6980,6969,6968,6928,6980,6992,6929,6985,6954,6942,6940,6945,6941,6940,6942,6970,6941,6945,6921,6901,6971,6970,6921,6904,6972,6971,6901,6780,6974,6972,6904,6779,6973,6974,6780,6975,6984,6939,6977,7048,7057,7037,7039,7069,7071,7082,7090,7107,7120,7119,7097,7121,7296,7095,7098,7246,7145,7137,7244,7138,7140,7149,7154,7151,7245,7243,7157,7243,7245,7246,7244,7074,7088,7087,7072,7045,7049,7052,7046,7214,7222,7221,7297,6897,6890,6889,6881,7298,7220,6890,6897,7221,7220,7298,7299,7211,7216,7215,7300,7284,7255,7227,7213,7254,6899,6900,7226,6869,6833,6848,6870,6884,6840,7301,7265,6839,7014,7301,6840,7301,7013,7012,7265,6882,6881,6889,6870,6907,6935,6814,6905,6905,6814,6813,6806,6776, 6806,6813,6933,6777,6776,6933,7003,6988,6987,6983,6927,6989,6988,6927,6930,6690,7302,7303,6731,6772,7304,7293,7292,6722,7305,7304,6772,6471,7306,6472,6471,6646,7306,6551,6583,6552,6506,6505,6542,6506,6616,6507,6628,6488,6478,6568,6557,6508,6599,6605,6604,6484,6499,7307,6716,6622,6623,6625,6667,6624,6633,6632,6625,6626,6587,6586,6611,6510,6612,6625,6632,6667,6459,6629,6565,6460,6634,6459,6462,6659,6631,6634,6697,6563,6545,6615,6492,6602,6584,6600,6600,6584,6642,6486,6550,6549,6484,7307,6627,6543,6542,7308,6697,6634,6658,6647,6496,6495,7309,6494,6609,6664,6606,6575,6576,6576,6572,6643,6601,6600,6642,6673,6669,6668,6675,6678,6695,6676,6700,6677,6680,6641,6681,6641,6680,6642,6757,6718,6717,6743,6757,6717,6757,6756,7310,6726,6725,6740,6729,6724,6723,6735,6686,6685,6732,6731,6737,7303,6747,6737,6731,6730,6729,6723,6720,6749,6717,6746,6738,6737,7311,7303,7302,6691,6733,6685,6969,6980,6979,6922,6921,6926,6816,6815,7295,6818,6797,6808,6924,6966,6888,7274,6826,6825,6963,6892,6876,6910,6856,6877,6913,6791,6790,6781,7003,6778,6995,6811,6810,6847,6864,6863,6936,6815,6934,6999,6949,6948,6949,6999,7262,6995,6810,6996,7264,7263,6999,6854,7014,6855,6804,6906,6805,7005,6998,6997,6738,6979,6981,6748,6722,6771,6979,6738,6969,6772,7292,6770,6995,6955,6931,6990,6932,6929,6913,6795,6799,7266,7262,6999,7005,6837,6836,7312,6782,6785,6823,6812,6825,6995,6931,6993,7312,6816,7295,6828,6998,7005,6831,6998,6828,7005,6834,6837,6950,6966,6924,7014,6967,7013,7019,6892,6965,7019,6965,6964,7026,7023,7024,7031,7034,7027,7027,7026,7031,7037,7033,7035,7035,7036,7040,7041,7045,7038,7042,7313,7043,7046,7314,7042,7313,7047,7043,7052,7051,7314,7046,7052,7314,7044,7048,7039,7050,7049,7055,7057,7033,7037,7053,7058,7054,7059,7315,7060,7061,7316,7317,7317,7062,7061,7318,7234,7066,7066,7065,7315,7316,7027,7034,7034,7056,7317,7318,7237,7234,7069,7064,7063,7068,7067,7074,7073,7072,7079,7077,7071,7070,7075,7319,7076,7080,7320,7078,7319,7081,7076,7084,7083,7320,7320,7080,7084,7082,7071,7077,7085,7087,7086,7064,7069,7090,7088,7093,7089,7095,7321,7224,7224,7061,7095, 7322,7094,7250,7094,7322,7092,7099,7092,7322,7100,7099,7322,7280,7322,7250,7095,7061,7096,7096,7061,7091,7119,7098,7097,7102,7101,7103,7105,7104,7111,7106,7120,7107,7108,7323,7109,7112,7324,7110,7323,7113,7109,7116,7115,7324,7324,7112,7116,7114,7120,7106,7117,7124,7118,7098,7119,7121,7127,7123,7122,7296,7325,7095,7325,7326,7321,7321,7095,7325,7325,7132,7326,7132,7165,7326,7325,7133,7132,7138,7135,7134,7244,7137,7136,7145,7246,7146,7143,7140,7139,7141,7327,7142,7147,7328,7144,7327,7148,7142,7153,7152,7328,7328,7147,7153,7149,7140,7143,7150,7245,7151,7154,7135,7138,7243,7158,7157,7165,7132,7155,7155,7162,7165,7164,7326,7165,7171,7170,7161,7172,7329,7330,7330,7173,7172,7166,7178,7167,7331,7173,7330,7330,7164,7163,7163,7331,7330,7174,7180,7175,7176,7182,7177,7189,7195,7190,7191,7197,7192,7215,7218,7291,7217,7332,7218,7200,7204,7175,7300,7329,7172,7172,7208,7300,7333,7329,7300,7300,7291,7333,7291,7218,7270,6894,7282,7291,7282,7333,7291,7223,7282,6894,7333,7282,7281,7281,7329,7333,7329,7281,7330,7316,7224,7027,7326,7164,7225,7225,7321,7326,7225,7224,7321,7224,7316,7061,7164,7330,7281,7281,7225,7164,7176,7206,7201,7021,7029,7022,7239,7028,7029,7240,7160,7159,7160,7242,7283,7283,7255,7284,7032,7028,7238,7130,7240,7136,7158,7240,7159,7130,7128,7253,7128,7125,7247,7255,7242,7256,7248,7127,7101,7127,7248,7125,7242,7255,7283,7036,7032,7238,7067,7066,7252,7252,7093,7067,7093,7252,7094,7316,7034,7317,7101,7100,7248,7158,7136,7240,6960,7276,6961,7279,7276,7278,7278,7251,7232,6909,7223,6894,6949,7262,6950,7267,6998,6831,6856,6855,6875,6819,7271,6820,7001,6819,6817,7000,7273,7001,6995,6996,6999,6995,7271,6811,7278,7276,7275,7251,7280,7250,6961,7276,7010,6960,7260,7276,7275,7258,7277,7247,7258,7253,7128,7247,7253,7100,7322,7280,7237,7235,7234,7318,7059,7237,7058,7238,7059,7036,7238,7058,7315,7318,7066,7059,7318,7315,7334,7133,7325,7296,7334,7325,7015,6892,7019,7300,7215,7291,7169,7168,7284,7213,7169,7284,6923,6925,7288,6999,6948,7287,6923,6950,6924,6998,7264,6999,7285,7008,7009,6999,7263,7266,7272,6865,7273,7273,6865,7274,6923,7288, 6948,6948,7288,7287,6952,6995,6999,6975,6976,6987,7291,7270,7290,6937,6934,6935,6932,6798,6994,6817,6821,6794,6767,6766,6770,6785,6816,7312,6804,6924,6906,6984,6975,6987,7039,7038,7044,7297,7221,7299,7208,7211,7300,7226,7227,7255,7255,7254,7226,6867,6870,6889,6848,6882,6870,7014,7013,7301,6976,6983,6987,6989,6930,6931,6827,6824,6832,6832,6824,6847,6724,6750,6739,7335,6722,6721,7305,6722,7335,6542,6505,7336,7337,6779,6778,6918,6786,6787,6786,6918,6919,6912,6914,6917,6920,6912,6911,6968,6914,6992,6968,6911,7338,6614,6637,6636,6635,6637,6526,6525,6628,6661,6635,6525,6628,6627,6474,6661,6627,7307,6470,6474,6471,6470,7307,6499,6353,6437,6354,7339,7340,7341,7342,7343,7344,7342,7341,7341,7345,7343,7346,7347,7348,7349,7350,7351,7344,7343,7352,7350,7343,7345,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7346,7363,7364,7358,7357,7365,7366,7367,7368,7369,7358,7354,7348,7359,7355,7354,7358,7364,7370,7371,7372,7373,7374,7375,7370,7373,7376,7377,7378,7379,7372,7380,7381,7373,7382,7383,7384,7385,7386,7361,7363,7387,7388,7389,7387,7363,7390,7368,7353,7390,7353,7356,7376,7379,7375,7374,7369,7391,7392,7366,7390,7378,7369,7368,7391,7369,7378,7377,7377,7376,7393,7391,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7407,7406,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7423,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7400,7437,7410,7401,7414,7413,7416,7418,7403,7402,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7433,7436,7452,7453,7416,7413,7454,7455,7428,7427,7456,7457,7458,7459,7460,7461,7462,7463,7425,7424,7464,7417,7416,7455,7465,7458,7466,7452,7436,7467,7405,7468,7398,7402,7469,7470,7471,7472,7473,7474,7475,7476,7450,7449,7477,7478,7419,7417,7458,7461,7479,7480,7481,7482,7438,7406,7409,7439,7483,7484,7485,7486,7487,7488,7447,7446,7412,7489,7454,7413,7489,7412,7432,7431,7451,7450,7490,7491,7443,7492,7493,7492,7448,7451,7493,7494,7440,7443,7491,7495,7496,7497,7498,7499,7497,7496,7500,7500,7501,7502,7499,7503,7504,7505,7506, 7487,7507,7508,7488,7488,7508,7509,7510,7447,7488,7510,7511,7512,7513,7444,7447,7514,7496,7495,7515,7500,7496,7514,7516,7517,7501,7500,7516,7518,7504,7503,7501,7517,7434,7474,7473,7435,7519,7482,7474,7434,7471,7519,7434,7433,7520,7521,7484,7483,7522,7523,7487,7446,7523,7524,7507,7487,7525,7526,7499,7502,7527,7522,7446,7445,7497,7528,7529,7498,7526,7528,7497,7499,7486,7530,7524,7523,7483,7486,7523,7522,7527,7520,7483,7522,7528,7531,7532,7529,7526,7470,7531,7528,7525,7533,7470,7526,7521,7534,7535,7484,7485,7484,7535,7536,7485,7536,7537,7538,7405,7404,7539,7540,7533,7479,7482,7519,7525,7541,7479,7533,7542,7376,7374,7393,7543,7392,7391,7461,7544,7420,7419,7442,7545,7448,7492,7442,7492,7443,7476,7440,7494,7546,7493,7451,7547,7532,7531,7548,7549,7467,7436,7550,7551,7552,7383,7553,7554,7384,7485,7538,7530,7486,7471,7433,7453,7469,7545,7555,7449,7448,7430,7556,7557,7431,7557,7558,7489,7431,7489,7558,7559,7454,7454,7559,7560,7455,7455,7560,7561,7465,7457,7562,7428,7423,7428,7562,7563,7550,7436,7435,7564,7547,7451,7490,7490,7450,7565,7566,7565,7450,7478,7463,7425,7352,7345,7426,7345,7341,7427,7426,7340,7456,7427,7341,7567,7463,7462,7565,7463,7567,7566,7472,7476,7546,7568,7563,7569,7424,7423,7464,7424,7569,7501,7503,7506,7502,7388,7363,7346,7349,7385,7384,7361,7386,7384,7554,7362,7361,7570,7362,7554,7571,7383,7382,7351,7350,7553,7383,7350,7352,7409,7408,7572,7573,7409,7573,7574,7439,7575,7403,7439,7574,7403,7575,7397,7404,7539,7404,7397,7396,7575,7534,7394,7397,7534,7575,7574,7535,7535,7574,7573,7536,7536,7573,7572,7537,7359,7348,7347,7576,7360,7359,7576,7442,7482,7481,7475,7474,7521,7549,7394,7534,7529,7532,7520,7527,7529,7527,7445,7498,7444,7495,7498,7445,7515,7495,7444,7513,7520,7532,7549,7521,7410,7406,7438,7401,7402,7398,7401,7438,7437,7577,7411,7410,7347,7346,7362,7570,7347,7570,7555,7576,7442,7576,7555,7545,7480,7479,7541,7578,7579,7544,7461,7460,7466,7580,7581,7540,7571,7554,7553,7477,7477,7553,7352,7478,7425,7463,7478,7352,7555,7570,7571,7475,7441,7440,7476,7475,7481,7360,7441,7480,7357,7360,7481,7357,7480,7578,7365, 7504,7372,7371,7505,7504,7518,7380,7372,7582,7583,7584,7585,7586,7587,7588,7589,7583,7582,7590,7586,7584,7583,7591,7587,7592,7593,7594,7595,7596,7597,7593,7592,7597,7598,7599,7593,7586,7588,7600,7584,7601,7585,7584,7600,7585,7601,7602,7582,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7605,7604,7607,7610,7607,7604,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7593,7599,7633,7594,7631,7630,7634,7635,7636,7637,7408,7407,7636,7638,7639,7637,7640,7608,7607,7624,7641,7642,7643,7644,7645,7646,7647,7648,7649,7647,7646,7649,7648,7650,7651,7652,7653,7654,7655,7656,7657,7508,7507,7657,7656,7658,7659,7508,7657,7660,7509,7657,7659,7661,7662,7660,7663,7664,7644,7647,7649,7665,7663,7647,7666,7665,7649,7651,7667,7666,7651,7652,7654,7653,7668,7669,7670,7656,7507,7524,7671,7670,7524,7530,7672,7673,7670,7671,7674,7675,7676,7677,7678,7679,7680,7681,7650,7648,7679,7678,7646,7645,7675,7674,7658,7656,7670,7673,7682,7683,7684,7685,7619,7622,7411,7577,7686,7627,7626,7687,7620,7619,7688,7606,7605,7689,7690,7635,7691,7609,7631,7631,7609,7608,7632,7602,7601,7692,7693,7583,7589,7694,7591,7599,7695,7633,7696,7697,7641,7643,7698,7699,7700,7678,7681,7701,7668,7653,7650,7678,7668,7702,7703,7704,7688,7594,7633,7705,7706,7695,7707,7705,7633,7707,7695,7708,7643,7629,7696,7643,7708,7709,7710,7711,7712,7710,7713,7714,7711,7618,7617,7715,7716,7717,7718,7719,7611,7720,7721,7612,7611,7614,7722,7723,7724,7696,7629,7632,7699,7725,7700,7726,7700,7725,7722,7614,7727,7728,7727,7614,7613,7729,7730,7729,7613,7731,7732,7733,7723,7722,7734,7720,7611,7723,7733,7734,7723,7651,7650,7653,7652,7735,7596,7592,7736,7737,7736,7592,7595,7738,7739,7740,7741,7728,7727,7742,7743,7742,7729,7744,7745,7746,7692,7601,7600,7746,7600,7588,7747,7748,7749,7736,7737,7750,7751,7739,7738,7743,7742,7745,7752,7588,7587,7596,7735,7747,7588,7735,7753,7735,7736,7749,7753,7739,7751,7748,7737,7740,7739,7737,7595,7408,7637,7754,7572,7637,7639,7755,7754,7756,7687,7626,7623,7756,7623,7604,7603,7684,7683,7754,7755,7606,7690,7757,7675,7758, 7759,7676,7675,7645,7760,7758,7761,7760,7645,7644,7664,7762,7761,7644,7622,7636,7407,7411,7622,7621,7638,7636,7763,7764,7765,7618,7716,7766,7767,7615,7618,7767,7768,7769,7770,7620,7771,7621,7620,7770,7772,7638,7621,7772,7773,7639,7638,7773,7774,7755,7639,7774,7775,7684,7755,7775,7776,7685,7684,7776,7757,7673,7672,7759,7758,7758,7760,7658,7673,7659,7658,7760,7761,7762,7661,7659,7761,7743,7752,7750,7738,7728,7743,7738,7741,7777,7694,7589,7778,7778,7589,7590,7779,7780,7781,7779,7590,7782,7691,7681,7680,7690,7689,7677,7676,7757,7690,7676,7759,7759,7672,7685,7757,7672,7671,7682,7685,7682,7671,7530,7538,7627,7686,7783,7763,7765,7628,7627,7763,7784,7785,7786,7787,7617,7788,7789,7715,7704,7784,7788,7617,7616,7785,7784,7704,7703,7682,7538,7537,7683,7683,7537,7572,7754,7619,7577,7421,7702,7703,7702,7421,7420,7785,7703,7420,7544,7579,7786,7785,7544,7790,7744,7729,7730,7603,7606,7757,7776,7756,7603,7776,7775,7687,7756,7775,7774,7686,7687,7774,7773,7783,7686,7773,7772,7783,7772,7770,7710,7709,7768,7767,7766,7713,7710,7767,7763,7783,7770,7769,7764,7726,7706,7705,7700,7698,7700,7705,7707,7741,7740,7594,7706,7728,7741,7706,7726,7728,7726,7791,7732,7722,7595,7594,7740,7629,7708,7630,7598,7634,7630,7599,7777,7778,7654,7669,7655,7654,7778,7779,7781,7792,7655,7779,7689,7605,7610,7782,7677,7689,7782,7680,7674,7677,7680,7679,7679,7648,7646,7674,7632,7608,7640,7724,7724,7793,7697,7696,7794,7640,7624,7625,7724,7640,7794,7793,7624,7623,7626,7625,7612,7717,7731,7613,7353,7349,7348,7354,7368,7388,7349,7353,7367,7389,7388,7368,7587,7795,7597,7596,7795,7796,7598,7597,7796,7797,7634,7598,7701,7635,7634,7797,7701,7681,7691,7635,7726,7725,7791,7798,7459,7458,7465,7799,7788,7784,7787,7470,7533,7519,7471,7782,7610,7609,7691,7539,7466,7540,7452,7396,7395,7453,7548,7531,7470,7469,7452,7466,7539,7396,7729,7742,7727,7555,7571,7477,7449,7360,7442,7441,7707,7643,7642,7698,7630,7708,7695,7599,7540,7581,7468,7405,7688,7704,7616,7620,7688,7771,7619,7702,7688,7437,7422,7421,7577,7432,7581,7580,7429,7412,7415,7468,7581,7432,7468,7399,7398,7548,7395,7394,7549, 7453,7395,7548,7469,7771,7688,7616,7615,7768,7769,7771,7615,7764,7769,7768,7709,7765,7764,7709,7712,7418,7417,7419,7422,7400,7414,7418,7437,7418,7422,7437,7415,7414,7400,7399,7468,7415,7399,7506,7541,7525,7502,7505,7578,7541,7506,7371,7365,7578,7505,7370,7364,7365,7371,7375,7355,7364,7370,7379,7356,7355,7375,7390,7356,7379,7378,7669,7668,7701,7797,7796,7777,7669,7797,7796,7795,7694,7777,7591,7694,7795,7587,7800,7801,7802,7803,7802,7801,7804,7805,7806,7807,7808,7809,7810,7811,7805,7804,7812,7813,7814,7810,7815,7816,7811,7814,7804,7817,7812,7810,7818,7819,7815,7814,7820,7821,7818,7822,7818,7821,7823,7819,7824,7825,7826,7821,7826,7827,7828,7821,7826,7829,7830,7831,7832,7826,7831,7833,7829,7834,7835,7830,7836,7837,7838,7839,7840,7841,7839,7842,7843,7844,7820,7822,7845,7842,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7850,7859,7860,7853,7861,7862,7858,7863,7864,7865,7866,7867,7861,7863,7868,7869,7864,7870,7871,7872,7873,7874,7871,7875,7876,7849,7848,7877,7878,7879,7880,7881,7875,7882,7883,7884,7885,7886,7887,7888,7889,7890,7887,7891,7892,7893,7894,7895,7896,7897,7898,7899,7891,7900,7894,7893,7901,7902,7903,7904,7905,7906,7907,7901,7908,7909,7910,7903,7911,7912,7913,7911,7914,7914,7915,7916,7912,7916,7915,7917,7918,7919,7920,7921,7922,7917,7923,7924,7918,7925,7926,7927,7921,7928,7927,7929,7930,7931,7932,7933,7934,7935,7930,7929,7936,7937,7938,7939,7940,7920,7919,7941,7942,7943,7944,7945,7946,7944,7943,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7956,7955,7957,7958,7959,7960,7961,7962,7963,7953,7964,7965,7966,7967,7968,7960,7969,7970,7971,7963,7972,7967,7966,7973,7970,7974,7975,7971,7976,7972,7973,7977,7975,7974,7978,7979,7980,7981,7977,7982,7983,7984,7979,7985,7986,7980,7982,7987,7983,7988,7989,7984,7990,7986,7987,7991,7992,7993,7989,7988,7994,7990,7991,7995,7993,7992,7996,7997,7998,7999,7994,7995,7997,7996,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8006,8009,8010,8011,7982,7966,7960,7987,7966,7982,7977,7973,7991,7960,7959,7995,8012,7817,7804,7801,7813,7812,8013,8014,7971,7984,7989,7963, 7984,7971,7975,7979,7963,7993,7997,7953,8001,7954,7953,7997,8015,8016,8007,8006,8006,8011,8017,8015,8018,8019,8020,8021,8018,8022,8023,8019,8024,8025,8026,8027,8028,8029,7847,8030,8028,8031,7815,8029,7948,8032,8033,8034,7945,7924,8035,8036,8037,8038,7933,7937,7937,7933,7932,7938,8039,8040,8041,7912,8042,8043,8024,8027,7913,7888,7890,7909,7910,7909,7890,7892,7910,7892,7899,7904,7904,7899,7898,7905,8044,8027,8026,7855,8044,7880,8042,8027,7860,7876,7881,7854,7872,7874,7859,7867,7866,7873,7872,7867,7840,7845,7823,7828,7827,7841,7840,7828,7836,7841,7827,7832,8033,8045,7918,8034,7807,7806,7802,7805,7811,7816,7807,7805,8046,8047,8048,8049,8047,8046,8050,8051,8052,8045,8033,8053,8054,8047,8051,8055,8047,8054,8053,8048,8053,8033,8032,8048,8056,8054,8055,8057,8054,8056,8052,8053,8056,8058,8043,8059,8059,8040,8039,8052,8058,8060,8025,8024,8023,8028,8030,8025,8019,8023,8025,8060,8060,8057,8020,8019,8028,8023,8022,8031,8059,8043,8061,8040,8041,8040,8061,7889,8013,7812,7817,8062,8063,8062,7817,8012,8064,8012,7801,7800,7948,7947,7957,8065,7955,8066,8065,7957,8007,8016,8001,8000,7806,7809,8067,8068,7809,8018,8021,8067,7809,7808,8022,8018,8022,7808,7816,8031,8069,8070,8071,7834,7825,7824,7844,7856,7878,7868,7857,7896,7884,7906,7908,7907,7883,7882,8072,8038,8035,7923,7934,7925,7942,7936,7926,7940,7946,8036,8037,8036,8035,8038,8037,7860,7859,7874,7876,7832,7833,7837,7836,8000,8073,8008,8007,8074,8075,8010,8009,8008,8076,8074,8009,7998,8077,8002,8005,8066,8001,8016,8049,8046,8015,8017,8050,7806,8068,8078,7814,7811,7810,7818,7813,7822,7813,7818,7814,7824,7821,7820,7821,7828,7823,7827,7826,7832,7831,7830,8079,7833,7831,8080,8079,7830,7835,7837,8080,7838,7833,8080,7837,7829,7825,7834,7839,7841,7836,7844,7824,7820,7840,7842,7845,7847,7846,8081,7848,8082,8083,8082,7848,7851,8084,7855,8026,7855,8081,7852,8083,7822,7813,7822,8082,7843,8084,8026,8030,7856,7850,7849,7853,7860,7854,7861,7867,7859,7863,7858,7857,7862,7864,8085,7866,7865,8086,8085,7864,7869,7873,8086,7870,8086,7873,7866,7868,7863,7857,7872,7871,7874,7849,7878,7856,7876,7875,7881, 7882,8014,8087,8014,7882,7848,8088,8042,7880,7880,7879,8088,7886,8088,7879,7889,8088,7886,8061,8042,8088,7882,7885,7848,7885,7877,7848,7906,7884,7883,7887,7890,7888,7891,7899,7892,7893,7896,7908,7895,7894,8089,7898,7897,8090,8089,7894,7900,7905,8090,7902,8090,7905,7898,7901,7893,7908,7904,7903,7910,7883,7907,7906,7913,7909,7911,8072,7882,8091,8091,8087,8092,8087,8091,7882,8091,8092,7919,7919,8092,7950,8091,7919,7922,7925,7921,7920,8035,7924,7923,7934,7933,8038,7929,7927,7926,7928,7930,8093,7932,7931,8094,8093,7930,7935,7938,8094,7939,8094,7938,7932,7936,7929,7926,7937,7940,8037,7942,7925,7920,8036,7946,7945,7950,7941,7919,7941,7950,7949,7951,7950,8092,7957,7947,7958,7959,8095,8096,8095,7959,7962,7953,7956,7964,8097,8095,7962,8095,7952,7951,7952,8095,8097,7961,7960,7968,7963,7965,7969,7976,7977,7981,7979,7978,7985,8002,8071,8003,8004,8003,8098,7987,7960,7991,8077,7959,8096,7959,8077,7995,8099,8077,8096,8077,8099,8071,8071,8100,8003,8069,8071,8063,8063,8071,8099,8012,8069,8063,8099,8062,8063,8062,8099,8096,8096,8095,8062,8083,7813,8014,8092,8013,7951,8013,8092,8087,8013,8087,8014,8014,7848,8083,7951,8062,8095,8062,7951,8013,7963,7989,7993,7808,7807,7816,8031,7816,7815,8034,7944,7948,7948,8065,8032,8065,8066,8049,7819,8029,7815,7918,7924,8034,7945,7944,8034,7918,8045,7916,7916,8039,7912,8049,8048,8032,8041,7888,7913,7913,7912,8041,8032,8065,8049,7823,8029,7819,7854,8044,7855,8044,7854,7881,7881,7880,8044,8083,8082,7822,7888,8041,7889,7945,8034,7924,8060,8058,8057,8058,8024,8043,8064,8069,8012,8058,8056,8057,8043,8042,8061,8056,8059,8052,8039,8045,8052,7916,8045,8039,7889,8061,8088,8030,8026,8025,8084,8030,7847,7845,7847,8029,7823,7845,8029,8081,7855,8084,7847,8081,8084,8101,8091,7922,8072,8091,8101,8102,7802,7806,8078,8077,8071,8002,7954,8066,7955,8001,8066,7954,8071,8070,8100,7825,7829,7826,8073,8076,8008,7995,8077,7998,8015,8049,8016,8049,8015,8046,8103,8055,8051,8104,8105,8106,8050,8107,8108,8107,8050,8017,8010,8109,8108,8011,8110,8111,8098,8003,8003,8100,8112,8110,8100,8070,8113,8112,8070,8069,8114,8113,8115,8116, 8117,8069,8064,8118,8119,8102,8078,8078,8068,8120,8118,8121,8120,8068,8067,8122,8123,8020,8057,8103,8122,8057,8055,8123,8124,8021,8020,8124,8121,8067,8021,8108,8017,8011,8051,8050,8106,8104,8010,8075,8125,8109,8126,8115,8064,7800,7803,8127,8126,7800,7803,7802,8102,7803,8102,8119,8127,7374,7373,7381,7542,7582,7780,7590,7792,7667,7652,7655,5959,5961,5995,8128,5943,5946,6458,8128,6458,6117,6116,6614,6538,6526,6637,7447,7511,7512,6636,6635,6661,6662,8129,8130,8131,8132,8133,8129,8134,8135,8130,8134,8136,8137,8135,8138,8139,8136,8140,8139,8141,8137,8136,8142,8143,8131,8130,8144,8142,8130,8135,8145,8144,8135,8137,8146,8145,8137,8147,8148,8132,8131,8149,8131,8143,8150,8149,8151,8152,8153,8154,8153,8152,8155,8156,8155,8157,8158,8156,8157,8159,8160,8158,8161,8146,8147,8162,8162,8147,8141,8163,8164,8139,8138,8165,8165,8138,8166,8167,8168,8148,8149,8169,8149,8150,8170,8169,8171,8172,8173,8174,8174,8173,8154,8175,8154,8153,8176,8175,8176,8153,8156,8177,8156,8158,8178,8177,8178,8158,8160,8179,8160,8180,8181,8179,8181,8180,8182,8183,8184,8161,8162,8185,8185,8162,8163,8186,8187,8164,8165,8188,8188,8165,8167,8189,8168,8190,8191,8192,8193,8171,8174,8194,8174,8175,8195,8194,8176,8195,8175,8196,8177,8178,8197,8197,8178,8179,8198,8199,8181,8183,8200,8183,8184,8201,8200,8185,8186,8202,8203,8204,8187,8188,8205,8205,8188,8189,8206,8132,8207,8208,8133,8209,8210,8211,8212,8210,8213,8214,8211,8215,8166,8138,8140,8148,8216,8207,8132,8168,8192,8216,8148,8207,8217,8218,8208,8209,8219,8220,8210,8210,8220,8221,8213,8216,8222,8217,8207,8192,8223,8222,8216,8163,8139,8164,8186,8163,8164,8187,8224,8209,8212,8225,8226,8225,8212,8211,8226,8211,8214,8227,8228,8227,8214,8213,8213,8221,8229,8228,8224,8230,8219,8209,8224,8225,8133,8208,8225,8226,8134,8129,8226,8227,8136,8134,8227,8228,8215,8140,8230,8224,8208,8218,8228,8229,8231,8215,8232,8233,8234,8235,8236,8237,8235,8234,8233,8232,8238,8239,8240,8241,8242,8243,8244,8245,8243,8246,8241,8247,8248,8242,8249,8248,8250,8251,8252,8253,8246,8254,8255,8252,8254,8238,8166,8232,8235,8167,8217,8241,8240,8218,8219, 8245,8244,8220,8220,8244,8253,8221,8256,8257,8232,8166,8231,8255,8257,8256,8222,8247,8241,8217,8223,8250,8247,8222,8258,8251,8250,8223,8230,8259,8245,8219,8221,8253,8252,8229,8218,8240,8259,8230,8229,8252,8255,8231,8223,8192,8191,8258,8199,8198,8179,8181,8187,8204,8202,8186,8189,8237,8206,8141,8147,8137,8151,8173,8172,8151,8154,8173,8159,8180,8160,8159,8182,8180,8215,8256,8166,8133,8225,8129,8136,8227,8140,8253,8244,8246,8257,8255,8238,8247,8250,8248,8245,8259,8243,8240,8243,8259,8167,8235,8189,8256,8215,8231,8257,8238,8232,8237,8189,8235,8163,8141,8139,8260,8190,8168,8169,8261,8260,8169,8170,8248,8249,8262,8242,8242,8262,8263,8243,8243,8263,8264,8246,8254,8246,8264,8265,8238,8238,8265,8266,8239,8239,8266,8267,8233,8233,8267,8236,8234,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8279,8278,8198,8282,8283,8284,8197,8284,8283,8285,8286,8287,8288,8289,8290,8291,8292,8273,8280,8293,8291,8280,8279,8294,8295,8279,8281,8296,8297,8199,8200,8203,8298,8296,8201,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8312,8315,8316,8313,8317,8318,8319,8320,8321,8317,8320,8322,8323,8324,8306,8305,8325,8326,8307,8310,8327,8314,8313,8328,8329,8328,8313,8316,8330,8331,8326,8325,8286,8332,8333,8195,8305,8334,8335,8323,8304,8336,8334,8305,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8343,8342,8345,8347,8348,8346,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8354,8353,8359,8360,8358,8357,8359,8361,8362,8360,8363,8364,8365,8366,8337,8340,8367,8368,8369,8370,8364,8363,8368,8367,8371,8372,8373,8374,8375,8373,8376,8377,8374,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8389,8388,8390,8391,8392,8393,8394,8395,8392,8395,8396,8397,8347,8352,8351,8348,8356,8398,8399,8400,8270,8269,8340,8339,8343,8401,8271,8344,8346,8402,8401,8343,8348,8403,8402,8346,8404,8405,8351,8350,8406,8398,8355,8407,8408,8409,8354,8358,8410,8408,8358,8360,8411,8410,8360,8362,8364,8412,8413,8365,8340,8269,8414,8367,8415,8404,8350,8416,8417,8412,8364,8370,8367,8414,8418,8371,8419,8420,8371,8418,8421, 8300,8299,8422,8374,8316,8315,8375,8377,8329,8316,8374,8423,8424,8381,8380,8425,8426,8384,8383,8427,8428,8388,8387,8428,8429,8390,8388,8430,8431,8395,8394,8431,8432,8396,8395,8433,8434,8435,8436,8434,8433,8437,8438,8439,8440,8441,8442,8351,8405,8403,8348,8443,8444,8304,8303,8445,8288,8444,8443,8399,8289,8288,8445,8398,8406,8289,8399,8298,8203,8202,8204,8446,8420,8419,8447,8448,8420,8446,8449,8438,8450,8328,8434,8451,8452,8375,8315,8453,8454,8455,8456,8286,8285,8457,8332,8290,8289,8406,8355,8398,8356,8328,8329,8435,8434,8442,8441,8458,8459,8460,8461,8459,8458,8426,8427,8387,8384,8385,8384,8387,8386,8462,8463,8452,8370,8369,8452,8451,8417,8370,8417,8451,8464,8294,8464,8465,8295,8294,8293,8466,8467,8291,8291,8467,8468,8292,8469,8444,8288,8287,8440,8439,8415,8416,8371,8420,8448,8372,8344,8271,8270,8339,8338,8341,8344,8339,8362,8361,8366,8365,8413,8411,8362,8365,8470,8471,8472,8473,8455,8454,8474,8475,8476,8477,8478,8479,8480,8321,8322,8481,8429,8430,8394,8390,8393,8391,8390,8394,8463,8373,8375,8452,8451,8315,8312,8464,8464,8312,8311,8465,8468,8309,8308,8482,8336,8304,8444,8469,8441,8483,8484,8458,8484,8479,8485,8458,8476,8486,8303,8477,8320,8319,8458,8485,8458,8319,8318,8460,8322,8485,8306,8481,8427,8487,8488,8428,8428,8488,8489,8429,8490,8441,8440,8491,8453,8445,8443,8454,8350,8492,8493,8416,8445,8453,8494,8399,8399,8494,8495,8496,8491,8440,8416,8493,8454,8443,8303,8474,8475,8474,8303,8486,8478,8306,8485,8479,8306,8478,8477,8303,8324,8480,8481,8306,8429,8489,8497,8430,8494,8453,8456,8495,8400,8399,8496,8498,8499,8500,8501,8502,8503,8504,8505,8506,8506,8505,8507,8508,8509,8508,8507,8333,8332,8510,8511,8457,8285,8512,8510,8457,8283,8513,8512,8285,8282,8514,8513,8283,8268,8272,8515,8297,8516,8268,8515,8296,8517,8516,8297,8296,8298,8518,8517,8518,8298,8204,8205,8519,8301,8520,8521,8302,8302,8522,8424,8423,8272,8514,8282,8515,8511,8509,8332,8457,8292,8468,8482,8523,8292,8523,8274,8273,8438,8437,8524,8525,8470,8450,8526,8471,8527,8473,8472,8528,8527,8528,8467,8466,8525,8524,8529,8530,8471,8526,8330,8325,8472,8471,8325,8310, 8309,8528,8472,8310,8467,8528,8309,8468,8331,8531,8326,8295,8465,8466,8293,8465,8311,8527,8466,8527,8311,8314,8473,8470,8473,8314,8327,8450,8470,8327,8295,8293,8279,8294,8281,8532,8532,8281,8278,8410,8411,8459,8461,8499,8502,8503,8442,8459,8503,8506,8415,8439,8508,8509,8404,8415,8509,8511,8405,8404,8511,8510,8403,8405,8510,8512,8402,8403,8512,8513,8401,8402,8513,8514,8271,8401,8514,8272,8302,8521,8533,8522,8518,8519,8447,8419,8517,8518,8419,8418,8516,8517,8418,8414,8268,8516,8414,8269,8412,8417,8294,8532,8411,8413,8412,8532,8277,8408,8410,8278,8409,8408,8277,8276,8409,8407,8355,8354,8407,8409,8276,8275,8290,8406,8407,8275,8290,8275,8274,8287,8290,8274,8523,8469,8287,8523,8482,8336,8469,8482,8308,8334,8336,8308,8307,8531,8335,8334,8307,8326,8396,8432,8530,8529,8534,8397,8396,8529,8450,8438,8525,8526,8450,8327,8328,8535,8536,8501,8500,8425,8537,8500,8499,8425,8499,8461,8426,8427,8426,8461,8460,8487,8427,8460,8318,8488,8487,8318,8317,8489,8488,8317,8321,8497,8489,8321,8480,8430,8497,8480,8324,8431,8430,8324,8323,8432,8431,8323,8335,8432,8335,8531,8331,8530,8530,8331,8330,8526,8525,8530,8330,8500,8537,8535,8538,8539,8540,8421,8422,8301,8519,8205,8206,8520,8447,8519,8301,8300,8446,8447,8300,8421,8540,8449,8446,8421,8483,8441,8486,8476,8529,8524,8541,8534,8299,8423,8380,8422,8379,8538,8422,8380,8439,8442,8506,8508,8435,8329,8377,8436,8376,8436,8377,8383,8542,8543,8425,8382,8544,8542,8383,8537,8425,8543,8545,8535,8537,8545,8546,8536,8535,8546,8547,8251,8548,8549,8550,8551,8533,8552,8548,8551,8553,8554,8521,8520,8549,8555,8556,8550,8543,8542,8549,8548,8545,8543,8548,8552,8546,8545,8552,8554,8556,8378,8381,8550,8381,8424,8551,8550,8551,8424,8522,8533,8521,8554,8552,8546,8554,8553,8547,8557,8558,8553,8520,8504,8501,8536,8258,8191,8502,8501,8504,8503,8197,8284,8196,8195,8196,8284,8286,8507,8261,8193,8201,8296,8200,8333,8194,8195,8333,8507,8193,8194,8198,8199,8297,8515,8282,8507,8505,8190,8260,8261,8267,8558,8557,8236,8267,8266,8265,8558,8536,8251,8258,8249,8251,8547,8263,8262,8547,8553,8558,8263,8504,8191,8190,8505,8558,8265, 8264,8263,8203,8201,8184,8185,8183,8182,8161,8184,8182,8159,8146,8161,8145,8146,8159,8157,8144,8145,8157,8155,8152,8142,8144,8155,8151,8143,8142,8152,8150,8143,8151,8172,8170,8150,8172,8171,8193,8261,8170,8171,8557,8520,8206,8196,8195,8176,8177,8485,8322,8320,8483,8476,8479,8484,8490,8475,8486,8441,8491,8455,8475,8490,8493,8456,8455,8491,8492,8495,8456,8493,8350,8496,8495,8492,8349,8498,8496,8350,8277,8280,8273,8276,8549,8542,8544,8549,8544,8555,8559,8560,8561,8562,8562,8561,8563,8564,8564,8563,8565,8566,8567,8568,8562,8564,8569,8567,8564,8566,8570,8569,8566,8571,8572,8573,8574,8575,8576,8568,8567,8577,8577,8567,8569,8578,8578,8569,8570,8579,8580,8576,8577,8581,8581,8577,8578,8582,8582,8578,8579,8583,8574,8584,8585,8575,8560,8559,8575,8586,8568,8572,8559,8562,8576,8573,8572,8568,8587,8588,8589,8590,8591,8589,8588,8592,8593,8591,8592,8594,8595,8593,8594,8596,8597,8592,8588,8598,8599,8594,8592,8597,8600,8596,8594,8599,8601,8602,8603,8604,8597,8598,8605,8606,8599,8597,8606,8607,8600,8599,8607,8608,8606,8605,8580,8581,8607,8606,8581,8582,8608,8607,8582,8583,8609,8610,8604,8603,8603,8587,8590,8611,8598,8588,8587,8602,8598,8602,8601,8605,8601,8604,8612,8613,8574,8612,8614,8584,8614,8612,8604,8610,8612,8574,8573,8613,8615,8616,8617,8618,8619,8617,8616,8620,8621,8619,8620,8622,8623,8620,8616,8624,8625,8622,8620,8623,8570,8571,8622,8625,8626,8627,8628,8629,8623,8624,8630,8631,8625,8623,8631,8632,8570,8625,8632,8579,8631,8630,8633,8634,8632,8631,8634,8635,8579,8632,8635,8583,8636,8637,8629,8628,8618,8638,8628,8615,8624,8616,8615,8627,8624,8627,8626,8630,8639,8640,8641,8642,8643,8644,8645,8646,8646,8645,8595,8596,8647,8648,8642,8643,8649,8647,8643,8646,8600,8649,8646,8596,8650,8651,8652,8653,8654,8648,8647,8655,8655,8647,8649,8656,8656,8649,8600,8608,8633,8654,8655,8634,8634,8655,8656,8635,8635,8656,8608,8583,8653,8657,8658,8650,8650,8659,8640,8639,8648,8651,8639,8642,8652,8651,8648,8654,8660,8661,8629,8637,8653,8661,8660,8657,8561,8560,8662,8663,8563,8561,8663,8664,8662,8560,8586,8665,8665,8586,8585,8666,8590,8589,8667,8668, 8589,8591,8669,8667,8591,8593,8670,8669,8593,8595,8671,8670,8611,8590,8668,8672,8609,8611,8672,8673,8584,8614,8674,8675,8585,8584,8675,8666,8674,8614,8610,8676,8676,8610,8609,8673,8618,8617,8677,8678,8617,8619,8679,8677,8619,8621,8680,8679,8638,8618,8678,8681,8636,8638,8681,8682,8641,8640,8683,8684,8644,8641,8684,8685,8645,8644,8685,8686,8595,8645,8686,8671,8683,8640,8659,8687,8687,8659,8658,8688,8689,8660,8637,8690,8690,8637,8636,8682,8657,8660,8689,8691,8658,8657,8691,8688,8559,8572,8575,8575,8585,8586,8587,8603,8602,8603,8611,8609,8615,8628,8627,8628,8638,8636,8639,8651,8650,8650,8658,8659,8692,8693,8694,8695,8696,8694,8697,8698,8697,8699,8686,8698,8686,8699,8693,8671,8671,8693,8692,8670,8692,8695,8700,8670,8700,8695,8694,8696,8694,8693,8699,8697,8613,8580,8605,8601,8573,8576,8580,8613,8661,8701,8626,8629,8701,8633,8630,8626,8652,8654,8633,8701,8661,8653,8652,8701,8642,8641,8644,8643,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8704,8703,8722,8723,8724,8725,8726,8718,8720,8724,8723,8727,8713,8712,8728,8725,8727,8728,8726,8729,8723,8726,8730,8731,8718,8723,8729,8728,8712,8732,8733,8726,8728,8733,8730,8729,8730,8734,8735,8736,8733,8732,8737,8738,8730,8733,8736,8739,8740,8741,8742,8743,8744,8740,8739,8745,8746,8747,8734,8748,8749,8750,8739,8742,8751,8752,8743,8739,8752,8753,8746,8735,8734,8750,8754,8680,8747,8746,8754,8755,8756,8757,8758,8749,8755,8758,8750,8759,8760,8761,8762,8763,8764,8765,8766,8760,8767,8768,8761,8768,8767,8764,8763,8763,8766,8762,8761,8734,8730,8738,8748,8754,8750,8767,8760,8764,8758,8757,8765,8767,8750,8758,8764,8727,8724,8720,8713,8769,8715,8714,8770,8717,8716,8707,8706,8771,8765,8757,8756,8711,8737,8732,8712,8709,8708,8772,8773,8774,8775,8776,8777,8771,8778,8777,8776,8779,8719,8780,8781,8727,8725,8724,8761,8768,8763,8782,8783,8784,8785,8786,8787,8783,8782,8787,8786,8788,8789,8789,8788,8790,8791,8791,8790,8792,8793,8794,8795,8796,8792,8751,8778,8771,8756,8797,8752,8751,8756,8755,8798,8797,8755,8749,8748,8799,8798,8749,8738,8800,8799,8748, 8800,8738,8736,8801,8741,8740,8801,8736,8737,8802,8741,8737,8711,8710,8803,8802,8711,8710,8804,8805,8803,8806,8807,8805,8804,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8669,8670,8700,8821,8813,8822,8823,8814,8824,8825,8826,8827,8828,8829,8830,8831,8818,8832,8833,8819,8673,8834,8835,8836,8834,8673,8672,8837,8838,8839,8668,8667,8840,8841,8842,8843,8844,8845,8840,8843,8846,8847,8848,8849,8844,8848,8847,8845,8849,8850,8851,8846,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8825,8812,8815,8826,8871,8872,8873,8874,8869,8875,8876,8870,8877,8878,8879,8880,8880,8881,8882,8877,8883,8882,8881,8884,8831,8833,8832,8828,8688,8691,8689,8811,8885,8886,8887,8885,8888,8810,8809,8889,8890,8891,8892,8893,8894,8895,8675,8896,8897,8829,8898,8899,8872,8871,8900,8901,8901,8900,8902,8903,8903,8902,8904,8905,8905,8904,8906,8907,8908,8909,8907,8906,8909,8908,8865,8864,8910,8696,8698,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8899,8898,8928,8929,8919,8926,8925,8916,8917,8930,8931,8918,8932,8681,8933,8934,8664,8663,8719,8718,8762,8679,8759,8935,8936,8937,8938,8939,8940,8941,8942,8942,8928,8898,8939,8940,8937,8936,8941,8943,8944,8945,8946,8947,8948,8949,8950,8950,8951,8952,8947,8944,8943,8949,8948,8931,8930,8953,8954,8955,8956,8957,8958,8922,8956,8955,8923,8959,8960,8961,8962,8898,8829,8828,8939,8939,8828,8832,8940,8940,8832,8818,8937,8937,8818,8817,8938,8923,8955,8926,8919,8919,8918,8920,8923,8961,8960,8931,8954,8963,8964,8965,8966,8665,8666,8895,8967,8968,8851,8850,8969,8820,8970,8669,8700,8971,8821,8698,8686,8972,8973,8698,8973,8911,8827,8868,8867,8824,8878,8894,8893,8879,8920,8960,8959,8921,8784,8783,8769,8974,8787,8715,8769,8783,8715,8787,8789,8716,8716,8789,8791,8707,8707,8791,8793,8708,8793,8975,8772,8708,8721,8934,8933,8704,8704,8933,8677,8705,8679,8680,8759,8886,8888,8976,8977,8565,8735,8745,8735,8746,8745,8978,8979,8980,8981,8669,8970,8838,8667,8662,8967,8780,8719,8663,8566,8565,8745,8571,8571,8745,8747,8621,8622,8760,8759, 8680,8754,8664,8718,8731,8565,8563,8672,8668,8837,8980,8835,8834,8981,8877,8882,8875,8869,8878,8877,8869,8868,8894,8878,8868,8827,8826,8891,8894,8827,8886,8977,8815,8814,8982,8814,8823,8983,8963,8966,8984,8985,8986,8987,8988,8989,8990,8935,8938,8889,8989,8938,8817,8890,8889,8817,8816,8985,8988,8946,8945,8984,8966,8954,8953,8989,8889,8809,8934,8721,8990,8989,8934,8687,8688,8885,8887,8687,8887,8982,8991,8992,8683,8991,8684,8683,8992,8993,8685,8684,8992,8837,8981,8834,8668,8839,8981,8837,8994,8965,8964,8995,8990,8721,8722,8996,8990,8996,8997,8935,8936,8935,8997,8998,8941,8936,8998,8999,8942,8941,8999,9000,8928,8942,9000,9001,9002,8784,8974,9003,9004,8785,8784,9002,8769,8770,9005,8974,8779,8713,8720,8719,9003,8974,9005,9006,8811,8810,8888,8885,8888,8810,8890,8976,8892,8976,8890,8816,8892,8816,8819,8893,8833,8879,8893,8819,8880,8879,8833,8831,8831,8830,8881,8880,8689,8690,8808,8811,8676,8836,8896,8681,8932,8682,8709,8773,8774,8777,9005,8770,8803,8805,8753,8752,8797,8742,9007,8751,8753,8797,8798,8798,8799,8743,8753,8800,8744,8743,8799,8744,8800,8801,8740,8678,8677,8933,8682,8932,8808,8690,8681,8678,8933,8676,8673,8836,8674,8676,8896,8675,8674,8896,8895,8666,8675,8729,8735,8565,8731,8747,8680,8621,8843,8842,8856,9008,8840,8845,9009,9010,9011,8847,8846,9012,8849,8848,9013,9014,8841,9015,9016,8914,8845,8847,9011,9009,9017,8850,8849,9014,8851,9018,9012,8846,8844,9019,9013,8848,8844,8843,9008,9019,8860,8863,8866,9020,9020,8866,8865,9021,9022,8871,8874,9023,9023,8874,8873,8854,8854,8873,8872,8855,8900,8871,9022,9024,8902,8900,9024,9025,8904,8902,9025,9026,9027,9028,8905,8907,8904,9029,9030,8906,8907,8909,9031,9027,9030,9032,8908,8906,8864,8863,8860,8859,9031,8909,9021,8865,8908,9032,9033,8968,8969,8858,8969,8850,9017,8858,8968,9033,9018,8851,8872,8901,9034,8855,9035,9036,9037,9038,8914,8971,8700,8696,8910,9039,9040,8876,8875,8882,8883,9039,8875,9041,8884,8881,8830,8897,9041,8830,8829,9042,8929,8928,9001,9043,9044,8952,8951,8955,8958,8927,8926,8903,8905,9028,9045,9038,8857,8856,8842,8841,8914,9038,8842,9045,9034,8901,8903,9031, 9046,9047,9027,9045,9048,9049,9034,9050,9008,8856,9051,9052,9053,9019,9008,9054,9055,9017,9014,9056,9014,9013,9057,9058,9013,9019,9059,9027,9060,9061,9028,9051,8856,8855,9062,9062,8855,9034,9063,8858,9064,9065,8859,8859,9065,9066,9031,9017,9067,9064,8858,9028,9068,9069,9045,8857,9038,9037,8913,9035,8914,9065,9064,9067,9066,9066,9067,9017,9031,9031,9017,9055,9046,9046,9055,9054,9047,9047,9054,9014,9027,9027,9014,9056,9060,9060,9056,9057,9061,9061,9057,9013,9028,9028,9013,9058,9068,9068,9058,9059,9069,9069,9059,9019,9045,9045,9019,9053,9048,9048,9053,9052,9049,9049,9052,9008,9034,9034,9008,9050,9063,9063,9050,9051,9062,8792,8790,9070,9071,8790,8788,9072,9073,8786,9074,9075,8788,9076,8786,8782,9077,9078,9079,8782,8785,9080,9081,8785,9004,8957,8956,9082,9083,9084,9085,8956,8922,8922,8921,9086,9087,8959,9088,9086,8921,9089,8959,8962,9090,8792,8796,8975,8793,8986,8775,8774,8987,8772,8963,8983,8773,8975,8964,8963,8772,8995,8964,8975,8796,9007,8778,8751,8717,8706,8778,9007,8967,8662,8665,8934,8809,8808,8932,8982,8886,8814,9091,9092,9093,9094,9095,9092,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9096,9092,9091,9111,9112,9096,9110,9103,9102,9107,9106,9112,9111,9113,9114,9115,9116,9109,9117,9118,9119,9112,9114,9097,9120,9121,9122,9123,9124,9098,9101,9125,9126,9118,9114,9127,9128,9129,9130,9131,9132,9133,9134,9135,9126,9125,9136,9137,9138,9094,9093,9138,9139,9140,9141,9093,9142,9143,9137,9144,9128,9145,9146,9133,9132,9147,9148,9149,9127,9130,9148,9150,9151,9091,9094,9152,9153,9154,9113,9098,9155,9156,9099,9157,9158,9159,9134,9151,9160,9110,9091,9160,9161,9111,9110,9161,9152,9113,9111,9153,9162,9163,9154,9164,9165,9149,9166,9167,9168,9128,9127,9159,9169,9131,9134,9170,9150,9094,9138,9171,9172,9140,9173,9174,9170,9138,9141,9175,9176,9177,9143,9178,9175,9143,9142,9168,9179,9145,9128,9180,9181,9144,9146,9165,9167,9127,9149,9172,9174,9141,9140,9179,9180,9146,9145,9182,9183,9184,9185,9093,9186,9142,9125,9114,9113,9154,9187,9157,9134,9133,9112,9120,9097,9096,9188,9105,9104,9189,9190,9136,9125,9187,9147, 9097,9122,9095,9173,9140,9139,9143,9177,9137,9129,9128,9144,9157,9129,9144,9157,9144,9181,9158,9191,9192,9135,9136,9190,9182,9185,9193,9188,9189,9183,9182,9190,9189,9104,9194,9183,9103,9195,9194,9104,9106,9196,9195,9103,9196,9106,9109,9116,9117,9109,9108,9197,9198,9199,9200,9201,9201,9202,9203,9198,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9207,9124,9216,9204,9217,9218,9219,9207,9206,9220,9221,9213,9212,9222,9223,9221,9098,9124,9207,9218,9217,9224,9225,9226,9227,9228,9229,9199,9198,9230,9231,9193,9185,9232,9233,9234,9209,9208,9235,9098,9221,9236,9155,9236,9221,9220,9237,9223,9222,9238,9239,9225,9224,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9267,9270,9271,9268,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9286,9285,9252,9251,9290,9291,9292,9293,9294,9295,9294,9293,9296,9297,9298,9299,9300,9301,9302,9303,9299,9298,9304,9305,9306,9307,9308,9309,9310,9311,9312,9306,9305,9313,9314,9310,9309,9315,9316,9317,9318,9319,9320,9321,9317,9316,9321,9322,9323,9317,9323,9324,9318,9317,9325,9326,9327,9328,9329,9330,9325,9328,9331,9325,9330,9332,9333,9326,9325,9331,9334,9335,9336,9337,9337,9336,9338,9339,9340,9341,9342,9343,9336,9344,9345,9338,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9360,9362,9363,9361,9364,9315,9309,9365,9366,9365,9309,9308,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9378,9377,9379,9380,9381,9382,9383,9384,9385,9381,9386,9387,9388,9389,9390,9391,9392,9393,9354,9394,9395,9396,9392,9394,9397,9398,9399,9400,9400,9399,9401,9402,9403,9404,9405,9403,9406,9380,9407,9380,9406,9408,9378,9389,9409,9410,9390,9411,9407,9380,9379,9412,9413,9414,9415,9416,9417,9418,9419,9420,9417,9421,9422,9423,9424,9418,9417,9420,9425,9426,9427,9428,9429,9430,9431,9432,9431,9433,9434,9432,9426,9228,9227,9427,9435,9436,9347,9437,9438,9414,9413,9439,9440,9441,9442,9443,9386,9381,9384,9444,9439,9445,9446,9438,9447,9375,9378, 9408,9310,9314,9313,9305,9448,9449,9374,9373,9373,9450,9451,9448,9382,9452,9453,9383,9454,9455,9410,9452,9456,9302,9298,9457,9457,9298,9301,9458,9459,9291,9460,9461,9462,9463,9464,9465,9311,9310,9305,9304,9466,9394,9467,9468,9467,9469,9470,9468,9279,9471,9472,9276,9473,9474,9375,9475,9476,9477,9415,9478,9479,9476,9478,9480,9480,9481,9482,9479,9483,9484,9295,9294,9485,9486,9487,9488,9489,9490,9352,9351,9335,9491,9344,9336,9278,9492,9327,9326,9318,9324,9270,9267,9319,9318,9267,9266,9307,9258,9261,9304,9304,9261,9493,9311,9311,9493,9494,9308,9308,9494,9253,9366,9301,9300,9252,9291,9458,9301,9291,9459,9297,9296,9495,9496,9363,9288,9285,9361,9358,9361,9285,9284,9497,9498,9350,9353,9338,9345,9281,9280,9339,9338,9280,9471,9279,9278,9326,9333,9302,9456,9499,9387,9303,9302,9387,9386,9364,9303,9386,9444,9315,9371,9374,9314,9314,9374,9449,9313,9320,9474,9500,9321,9330,9329,9477,9476,9332,9330,9476,9479,9479,9482,9334,9332,9343,9342,9491,9335,9489,9349,9348,9490,9485,9501,9355,9486,9295,9484,9502,9391,9503,9504,9505,9506,9507,9508,9509,9510,9332,9334,9337,9331,9331,9337,9339,9333,9364,9365,9299,9303,9365,9366,9300,9299,9372,9384,9383,9450,9399,9403,9407,9401,9411,9511,9512,9407,9423,9513,9514,9420,9420,9514,9515,9424,9371,9444,9384,9372,9516,9517,9440,9443,9453,9518,9450,9383,9519,9520,9521,9522,9523,9340,9343,9524,9253,9252,9300,9366,9333,9339,9471,9279,9364,9444,9371,9315,9334,9524,9343,9335,9525,9526,9527,9528,9529,9272,9275,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9528,9527,9545,9531,9534,9546,9546,9534,9533,9547,9532,9548,9547,9533,9548,9532,9531,9545,9549,9550,9551,9552,9553,9551,9550,9554,9555,9553,9554,9556,9557,9558,9559,9560,9560,9549,9552,9561,9535,9538,9562,9563,9564,9562,9538,9537,9565,9564,9537,9536,9563,9565,9536,9535,9540,9566,9567,9541,9539,9568,9566,9540,9542,9530,9568,9539,9541,9567,9530,9542,9569,9570,9571,9572,9275,9274,9573,9574,9575,9275,9574,9576,9577,9575,9576,9578,9569,9577,9578,9570,9579,9525,9528,9544,9544,9244,9243,9579,9546,9553,9555,9545,9546,9566,9564,9565,9551, 9553,9564,9566,9568,9562,9562,9568,9575,9551,9565,9580,9576,9574,9573,9570,9543,9527,9526,9580,9580,9581,9582,9543,9543,9582,9244,9544,9563,9577,9581,9580,9565,9581,9242,9245,9582,9581,9577,9569,9242,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9529,9619,9620,9272,9602,9607,9621,9622,9600,9605,9616,9615,9601,9623,9619,9608,9595,9603,9624,9625,9611,9614,9626,9627,9618,9617,9628,9620,9629,9630,9631,9605,9600,9599,9599,9606,9605,9614,9632,9633,9634,9247,9597,9612,9248,9611,9249,9248,9612,9249,9611,9598,9246,9598,9597,9247,9246,9600,9615,9257,9256,9254,9257,9615,9623,9601,9255,9254,9623,9601,9600,9256,9255,9608,9619,9265,9264,9262,9265,9619,9529,9609,9263,9262,9529,9609,9608,9264,9263,9462,9465,9626,9616,9463,9462,9616,9605,9464,9463,9605,9604,9464,9604,9626,9465,9635,9625,9636,9637,9636,9596,9638,9637,9595,9639,9638,9596,9635,9639,9595,9625,9506,9622,9640,9503,9640,9599,9504,9503,9599,9602,9505,9504,9506,9505,9602,9622,9510,9509,9621,9607,9610,9507,9510,9607,9610,9641,9508,9507,9508,9641,9621,9509,9519,9522,9642,9624,9603,9520,9519,9624,9520,9603,9606,9521,9522,9521,9606,9642,9643,9613,9632,9644,9632,9614,9645,9644,9614,9613,9643,9645,9584,9633,9628,9585,9586,9585,9628,9617,9583,9634,9633,9584,9627,9630,9589,9588,9590,9589,9630,9629,9618,9587,9590,9629,9588,9587,9618,9627,9593,9592,9631,9646,9272,9594,9593,9273,9594,9272,9620,9591,9592,9591,9620,9631,9567,9547,9610,9609,9548,9641,9610,9547,9647,9648,9496,9495,9649,9253,9494,9650,9651,9494,9493,9652,9653,9493,9261,9260,9654,9655,9312,9369,9376,9375,9474,9656,9377,9376,9657,9658,9411,9379,9659,9660,9409,9660,9661,9410,9662,9663,9388,9391,9511,9663,9664,9512,9409,9389,9663,9511,9660,9409,9511,9411,9665,9367,9666,9667,9659,9665,9667,9668,9660,9659,9668,9661,9669,9670,9455,9671,9669,9391,9390,9670,9292,9456,9457,9293,9458,9296,9293,9457,9459,9495,9296,9458,9387,9499,9454,9385,9292,9295,9391,9669,9455,9454,9499,9671,9452,9382,9385,9454,9452, 9410,9661,9453,9453,9661,9668,9518,9668,9667,9451,9518,9456,9292,9671,9499,9448,9451,9667,9666,9449,9448,9666,9370,9313,9449,9370,9312,9306,9312,9655,9672,9307,9306,9672,9673,9674,9673,9319,9266,9259,9258,9674,9675,9672,9655,9320,9316,9672,9316,9319,9673,9673,9674,9258,9307,9675,9674,9266,9269,9654,9657,9376,9656,9658,9659,9379,9377,9676,9368,9367,9665,9658,9657,9368,9676,9654,9369,9368,9657,9655,9654,9677,9678,9495,9459,9679,9647,9321,9500,9680,9322,9681,9682,9683,9684,9413,9412,9419,9418,9439,9413,9418,9424,9424,9515,9445,9439,9445,9515,9685,9446,9481,9686,9687,9482,9688,9475,9682,9681,9683,9682,9475,9689,9353,9690,9284,9497,9488,9690,9353,9352,9490,9485,9488,9352,9485,9490,9348,9691,9692,9693,9347,9436,9357,9467,9394,9354,9517,9429,9432,9440,9432,9434,9441,9440,9435,9469,9467,9436,9436,9467,9357,9692,9693,9692,9357,9356,9524,9687,9686,9523,9686,9685,9516,9523,9554,9550,9549,9560,9559,9556,9570,9578,9576,9245,9244,9582,9637,9638,9639,9635,9643,9644,9645,9586,9617,9634,9583,9242,9569,9572,9243,9561,9552,9526,9525,9694,9548,9545,9559,9558,9555,9556,9278,9277,9695,9492,9472,9471,9280,9283,9693,9356,9501,9691,9347,9693,9691,9348,9443,9442,9341,9340,9516,9443,9340,9523,9685,9515,9517,9516,9446,9685,9686,9481,9438,9446,9481,9480,9480,9478,9414,9438,9681,9684,9696,9697,9680,9688,9681,9697,9680,9500,9473,9688,9698,9498,9497,9287,9428,9427,9431,9430,9427,9227,9433,9431,9422,9699,9513,9423,9203,9700,9230,9198,9372,9450,9373,9381,9385,9382,9651,9650,9494,9393,9355,9354,9408,9406,9701,9408,9701,9702,9475,9375,9447,9451,9450,9518,9653,9652,9493,9473,9475,9688,9697,9696,9322,9253,9649,9250,9459,9461,9679,9291,9290,9460,9676,9665,9659,9663,9662,9664,9388,9663,9389,9474,9320,9656,9370,9666,9367,9669,9671,9292,9455,9670,9410,9670,9390,9410,9370,9369,9312,9658,9676,9659,9475,9447,9689,9687,9334,9482,9322,9680,9697,9287,9497,9284,9501,9485,9691,9334,9687,9524,9347,9346,9437,9414,9478,9415,9473,9500,9474,9356,9355,9501,9468,9470,9226,9235,9208,9703,9704,9703,9208,9211,9705,9706,9214,9213,9707,9707,9213,9223,9708,9708,9223,9239,9709, 9699,9425,9428,9513,9513,9428,9430,9514,9515,9514,9430,9429,9517,9515,9429,9710,9711,9116,9115,9119,9196,9116,9711,9118,9195,9196,9119,9118,9126,9194,9195,9183,9194,9126,9135,9192,9184,9183,9135,9192,9219,9712,9184,9204,9216,9202,9201,9201,9200,9205,9204,9211,9214,9706,9705,9210,9215,9214,9211,9120,9711,9710,9121,9119,9711,9120,9112,9142,9186,9100,9099,9099,9156,9178,9142,9447,9408,9702,9689,9405,9701,9406,9403,9398,9404,9399,9468,9226,9229,9713,9470,9433,9227,9226,9469,9434,9433,9470,9441,9434,9469,9435,9441,9435,9437,9442,9346,9341,9442,9437,9341,9346,9349,9342,9491,9342,9349,9489,9491,9489,9351,9344,9345,9344,9351,9350,9498,9281,9345,9350,9282,9281,9498,9698,9558,9694,9545,9555,9158,9714,9715,9159,9159,9716,9717,9169,9168,9181,9180,9179,9168,9167,9714,9158,9181,9718,9716,9719,9720,9721,9224,9717,9722,9240,9716,9718,9717,9713,9466,9468,9723,9724,9725,9726,9170,9174,9172,9171,9724,9723,9727,9417,9416,9718,9722,9717,9147,9132,9191,9136,9217,9191,9132,9131,9131,9169,9224,9217,9717,9224,9169,9166,9149,9148,9148,9130,9133,9147,9187,9163,9166,9148,9154,9163,9187,9185,9184,9712,9232,9232,9209,9234,9233,9209,9232,9712,9210,9210,9712,9219,9215,9215,9219,9218,9212,9212,9218,9225,9222,9222,9225,9241,9238,9117,9197,9728,9729,9117,9729,9730,9115,9731,9710,9115,9730,9123,9121,9710,9731,9101,9122,9121,9123,9100,9095,9122,9101,9186,9092,9095,9100,9093,9092,9186,9163,9162,9164,9166,9395,9394,9466,9732,9728,9700,9203,9729,9730,9729,9203,9202,9216,9731,9730,9202,9123,9731,9216,9124,9192,9191,9217,9219,9626,9604,9598,9611,9599,9640,9642,9606,9157,9133,9130,9129,9577,9563,9562,9575,9617,9616,9626,9634,9634,9626,9614,9604,9603,9595,9598,9608,9607,9602,9601,9623,9629,9620,9619,9623,9615,9618,9629,9567,9609,9529,9530,9275,9575,9568,9530,9546,9547,9567,9566,9551,9580,9526,9552,9403,9399,9404,8423,8299,8302,8551,8522,8533,9733,9734,9735,9736,9737,9738,9739,9736,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9733,9736,9739,9753,9752,9739,9754,9747,9748,9751,9744,9754,9755,9756,9753,9757,9758,9749,9759,9760,9755,9754,9761, 9738,9762,9763,9764,9765,9741,9740,9766,9767,9755,9760,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9767,9768,9779,9735,9734,9780,9780,9781,9782,9783,9735,9779,9784,9785,9786,9787,9788,9772,9775,9789,9790,9776,9791,9789,9770,9769,9792,9734,9733,9793,9794,9756,9795,9796,9740,9743,9797,9798,9799,9774,9800,9801,9793,9733,9752,9802,9802,9752,9753,9803,9803,9753,9756,9794,9796,9795,9804,9805,9806,9807,9791,9808,9809,9769,9772,9810,9800,9774,9773,9811,9812,9780,9734,9792,9813,9814,9782,9815,9816,9781,9780,9812,9817,9784,9818,9819,9820,9785,9784,9817,9810,9772,9788,9821,9822,9787,9786,9823,9808,9791,9769,9809,9815,9782,9781,9816,9821,9788,9787,9822,9824,9825,9826,9827,9735,9785,9828,9767,9829,9795,9756,9755,9799,9775,9774,9754,9739,9738,9764,9830,9831,9832,9746,9745,9778,9790,9829,9767,9738,9737,9762,9814,9783,9782,9784,9779,9818,9771,9786,9772,9799,9786,9771,9799,9801,9823,9786,9833,9778,9777,9834,9831,9830,9835,9825,9824,9832,9831,9824,9827,9832,9827,9836,9746,9747,9746,9836,9837,9748,9747,9837,9838,9838,9759,9749,9748,9758,9839,9750,9749,9840,9841,9842,9843,9841,9840,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9847,9846,9858,9766,9859,9860,9861,9847,9862,9863,9848,9857,9864,9865,9854,9862,9847,9766,9740,9861,9866,9867,9859,9868,9869,9870,9871,9843,9872,9873,9840,9874,9875,9850,9853,9740,9798,9876,9862,9876,9877,9863,9862,9864,9878,9879,9865,9866,9880,9881,9867,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9909,9908,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9927,9926,9929,9892,9930,9931,9893,9932,9933,9934,9935,9934,9936,9937,9935,9938,9939,9940,9941,9942,9938,9941,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9947,9946,9954,9955,9951,9950,9956,9957,9958,9959,9960,9956,9959,9961,9961,9959,9962,9963,9962,9959,9958,9964,9965,9966,9967,9968,9969,9966,9965,9970,9971,9972,9970,9965,9973,9971,9965,9968,9974,9975,9976,9977,9975,9978,9979, 9976,9980,9981,9982,9983,9976,9979,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10000,9999,10002,10003,10004,10005,9951,9955,10006,9948,9951,10005,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10016,10019,10020,10017,10021,10022,10023,10024,10025,10026,10027,10021,10028,10029,10030,10031,10032,10033,9994,10034,10035,10033,10032,10036,10037,10038,10039,10040,10038,10041,10042,10039,10043,10044,10045,10043,10046,10019,10047,10019,10016,10048,10047,10031,10030,10049,10050,10051,10020,10019,10046,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10059,10064,10060,10059,10058,10065,10066,10067,10068,10069,10070,10071,10072,10071,10070,10073,10074,10068,10067,9871,9870,10075,10076,9989,10077,10078,10079,10055,10054,10080,10081,10082,10083,10027,10084,10022,10021,10079,10078,10085,10086,10087,10048,10016,10015,9950,9947,9953,9954,10088,10013,10012,10089,10013,10088,10090,10091,10024,10023,10092,10093,10094,10093,10049,10095,10096,10097,9938,9942,10097,10098,9939,9938,10099,10100,10101,9930,10102,10103,10104,10105,9949,9944,9947,9950,10106,10107,10108,10033,10108,10107,10109,10110,9917,9916,10111,10112,10113,10114,10015,10115,10116,10117,10053,10118,10119,10120,10117,10116,10120,10119,10121,10122,10123,9934,9933,10124,10125,10126,10127,10128,10129,9993,9992,10130,9977,9976,9985,10131,9918,9968,9967,10132,9958,9909,9911,9964,9957,9906,9909,9958,9945,9944,9899,9898,9944,9949,10133,9899,9949,9948,10134,10133,9948,10006,9891,10134,9939,9930,9892,9940,10098,10099,9930,9939,9936,10135,10136,9937,10002,9999,9927,9928,9998,9924,9927,9999,10137,9991,9990,10138,9979,9920,9923,9984,9978,10112,9920,9979,9917,9973,9968,9918,9942,10026,10139,10096,9943,10027,10026,9942,10004,10084,10027,9943,9955,9954,10012,10011,9954,9953,10089,10012,9960,9961,10140,10115,9970,10116,10118,9969,9972,10119,10116,9970,10119,9972,9974,10121,9981,9977,10131,9982,10129,10130,9988,9987,10125,10128,9997,10141,9933,10029,10142,10124,10143,10144,10145,10146,10147,10148, 10149,10150,9972,9971,9975,9974,9971,9973,9978,9975,10004,9943,9941,10005,10005,9941,9940,10006,10014,10091,10023,10022,10039,10042,10046,10043,10051,10046,10151,10152,10061,10060,10153,10154,10060,10064,10155,10153,10011,10014,10022,10084,10156,10081,10080,10157,10092,10023,10091,10158,10159,10160,10161,10162,10163,10164,9981,9980,9891,10006,9940,9892,9973,9917,10112,9978,10004,9955,10011,10084,9974,9977,9981,10164,10165,10166,10167,10168,10169,10170,9913,9912,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10167,10166,10184,10185,10186,10172,10171,10186,10187,10173,10172,10174,10173,10187,10188,10188,10185,10171,10174,10189,10190,10191,10192,10193,10194,10192,10191,10195,10196,10194,10193,10197,10198,10199,10200,10198,10201,10190,10189,10175,10202,10203,10176,10204,10177,10176,10203,10205,10178,10177,10204,10202,10175,10178,10205,10182,10181,10206,10207,10179,10182,10207,10208,10180,10179,10208,10170,10181,10180,10170,10206,10209,10210,10211,10212,9913,10213,10214,9914,10215,10216,10213,9913,10217,10218,10216,10215,10209,10212,10218,10217,10219,10184,10166,10165,10184,10219,9885,9884,10186,10185,10195,10193,10186,10193,10191,10205,10204,10207,10204,10203,10208,10207,10203,10215,10208,10191,10220,10205,10216,10212,10214,10213,10183,10220,10168,10167,10220,10183,10221,10222,10183,10184,9884,10221,10202,10205,10220,10222,10217,10222,10221,9883,9882,10222,9882,10209,10217,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10169,9912,10259,10260,10240,10261,10262,10247,10242,10255,10258,10245,10241,10250,10260,10263,10235,10264,10265,10243,10251,10266,10252,10267,10268,10257,10256,10259,10269,10270,10271,10245,10239,10242,10239,10245,10244,10252,10272,10273,10274,9889,9888,10254,10237,10251,10254,9888,9887,9887,9886,10236,10251,10236,9886,9889,10237,10242,9896,9895,10255,9894,10263,10255,9895,10241,10263,9894,9897,10241,9897, 9896,10242,10250,9904,9903,10260,9902,10169,10260,9903,10249,10169,9902,9905,10249,9905,9904,10250,10102,10258,10266,10103,10105,10245,10258,10102,10104,10246,10245,10105,10104,10103,10266,10246,10275,10276,10277,10264,10277,10276,10278,10238,10235,10238,10278,10279,10275,10264,10235,10279,10144,10143,10280,10261,10280,10143,10146,10239,10239,10146,10145,10240,10144,10261,10240,10145,10148,10247,10262,10149,10248,10247,10148,10147,10248,10147,10150,10281,10150,10149,10262,10281,10159,10265,10282,10160,10243,10265,10159,10162,10162,10161,10244,10243,10160,10282,10244,10161,10283,10284,10274,10253,10274,10284,10285,10252,10252,10285,10283,10253,10226,10225,10268,10273,10224,10257,10268,10225,10223,10226,10273,10272,10267,10230,10229,10270,10228,10271,10270,10229,10256,10271,10228,10227,10230,10267,10256,10227,10233,10286,10269,10234,9912,9915,10233,10232,10232,10231,10259,9912,10234,10269,10259,10231,10206,10249,10248,10187,10188,10187,10248,10281,10287,10136,10135,10288,10289,10290,10134,9891,10291,10292,10133,10134,10293,9900,9899,10133,10294,10009,9952,10295,10018,10296,10115,10015,10017,10297,10298,10018,10051,10299,10300,10020,10050,10049,10301,10299,10302,10029,10028,10303,10152,10151,10304,10303,10050,10152,10303,10031,10299,10051,10152,10050,10305,10306,10307,10007,10300,10308,10306,10305,10299,10301,10308,10300,10309,10310,10095,10311,10309,10311,10030,10029,9932,9935,10097,10096,10098,10097,9935,9937,10099,10098,9937,10136,10026,10025,10094,10139,9932,10309,10029,9933,10095,10310,10139,10094,10093,10094,10025,10024,10093,10092,10301,10049,10092,10158,10308,10301,10308,10158,10090,10306,10096,10139,10310,9932,10088,10307,10306,10090,10089,10008,10307,10088,9953,9952,10008,10089,9946,10312,10295,9952,9945,10313,10312,9946,10314,9906,9957,10313,9901,10315,10314,9898,10312,9956,9960,10295,10312,10313,9957,9956,10313,9945,9898,10314,10315,9907,9906,10314,10294,10296,10018,10298,10297,10017,10020,10300,10316,10305,10007,10010,10297,10316,10010,10298,10294,10298,10010,10009,10295,10317,10318,10294,10136,10287,10319, 10099,9961,9963,10320,10140,10321,10322,10323,10324,10055,10058,10057,10052,10079,10064,10058,10055,10064,10079,10086,10155,10086,10085,10325,10155,10122,10121,10326,10327,10328,10321,10324,10114,10323,10329,10114,10324,9991,10137,9924,10330,10126,9992,9991,10330,10130,9992,10126,10125,10125,10331,9988,10130,10332,10077,9989,10333,9995,9994,10033,10108,10157,10080,10070,10069,10070,10080,10083,10073,10075,10077,10108,10110,10077,10332,9995,10108,10333,9996,9995,10332,10164,10163,10327,10326,10327,10163,10156,10325,10194,10196,10199,10198,10189,10192,10212,10216,10218,9883,10221,9884,10276,10275,10279,10278,10283,10285,10284,10224,10223,10272,10257,9882,9885,10210,10209,10201,10165,10168,10190,10334,10185,10188,10199,10196,10195,10200,9918,10132,10335,9919,10111,9921,9920,10112,10333,10331,10141,9996,9989,9988,10331,10333,10081,9980,9983,10082,10156,10163,9980,10081,10325,10156,10157,10155,10085,10122,10327,10325,10078,10120,10122,10085,10120,10078,10054,10117,10321,10336,10337,10322,10320,10336,10321,10328,10320,10328,10113,10140,10338,9925,10137,10138,10066,10072,10071,10067,10067,10071,10074,9871,10062,10061,10154,10339,9844,9840,9873,10340,10014,10013,10091,10021,10024,10025,10291,10134,10290,10034,9994,9997,10048,10341,10047,10048,10342,10341,10114,10087,10015,10090,10158,10091,10293,10133,10292,10113,10328,10114,10336,9963,10337,9891,9890,10289,10099,10319,10100,9930,10101,9931,10316,10300,10305,10303,10304,10302,10028,10031,10303,10115,10296,9960,10008,10007,10307,10309,9932,10310,10095,10049,10311,10311,10049,10030,10008,9952,10009,10297,10300,10316,10114,10329,10087,10326,10121,9974,9963,10336,10320,9925,9924,10137,10141,10331,10125,9974,10164,10326,9989,10076,9986,10054,10053,10117,10113,10115,10140,9996,10141,9997,10107,9868,10109,9875,10343,10344,9850,10344,10345,9851,9850,10346,10347,9857,9856,10347,10348,9864,9857,10348,10349,9878,9864,10339,10154,10066,10065,10154,10153,10072,10066,10155,10069,10072,10153,10157,10069,10155,10350,9757,9759,10351,9761,10351,9759,9838,9760,9761,9838,9837,9760,9837,9836, 9768,9827,9777,9768,9836,9834,9777,9827,9826,9834,9826,10352,9860,9846,9841,9845,9858,9841,9846,9849,9842,9851,10345,10346,9856,9852,9851,9856,9855,9764,9763,10350,10351,9761,9754,9764,10351,9785,9743,9742,9828,9743,9785,9820,9797,10087,10329,10342,10048,10044,10043,10047,10341,10040,10039,10045,10107,10353,9869,9868,10109,9868,9871,10074,10110,10109,10074,10073,10083,10075,10110,10073,10083,10082,10076,10075,9986,10076,10082,9983,9983,9982,9987,9986,10131,10129,9987,9982,10131,9985,9993,10129,9984,9990,9993,9985,10138,9990,9984,9923,9922,10338,10138,9923,10200,10195,10185,10334,9801,9800,10354,10355,9800,9811,10356,10357,9810,9821,9822,9823,9810,9823,9801,10355,9809,10358,10359,10360,10361,10357,9867,9881,10362,10356,10357,10356,10358,10353,10107,10106,10363,10364,10365,10366,9812,9813,9815,9816,10366,10056,10059,10367,10363,10358,10356,10362,9790,9778,9833,9776,9859,9773,9776,9833,9773,9859,9867,9811,10356,9811,9867,9807,9789,9791,9789,9775,9770,9790,9789,9807,9804,9829,9795,9829,9804,9825,10368,10352,9826,10368,10369,9874,9853,9853,9852,10352,10368,9852,9855,9860,10352,9855,9854,9861,9860,9854,9865,9866,9861,9865,9879,9880,9866,9758,10370,10371,9839,9758,9757,10372,10370,10373,10372,9757,10350,9765,10373,10350,9763,9741,9765,9763,9762,9742,9741,9762,9737,9828,9742,9737,9736,9735,9828,9736,9804,9807,9806,9805,10035,10374,10106,10033,10371,10370,9844,10340,10372,9845,9844,10370,9858,9845,10372,10373,9765,9766,9858,10373,9834,9860,9859,9833,10266,10251,10236,10246,10239,10244,10282,10280,9799,9771,9770,9775,10217,10215,10203,10202,10257,10272,10266,10258,10272,10252,10266,10246,10236,10235,10243,10250,10241,10240,10247,10263,10260,10259,10271,10263,10271,10256,10255,10206,10170,10169,10249,9913,10170,10208,10215,10186,10207,10206,10187,10191,10190,10168,10220,10043,10045,10039,10375,10376,10377,10378,10376,10379,10380,10377,10379,10381,10382,10380,10383,10379,10376,10384,10385,10381,10379,10383,10386,10387,10381,10385,10388,10389,10390,10391,10392,10393,10383,10384,10393,10394,10385,10383,10394,10395,10386,10385,10396, 10397,10393,10392,10397,10398,10394,10393,10398,10399,10395,10394,10390,10389,10400,10401,10378,10402,10389,10375,10384,10376,10375,10388,10392,10384,10388,10391,10403,10404,10405,10406,10407,10408,10406,10405,10409,10410,10408,10407,10411,10412,10410,10409,10413,10414,10406,10408,10415,10413,10408,10410,10416,10415,10410,10412,10417,10418,10419,10420,10413,10421,10422,10414,10415,10423,10421,10413,10416,10424,10423,10415,10421,10397,10396,10422,10423,10398,10397,10421,10424,10399,10398,10423,10425,10419,10418,10426,10419,10427,10404,10403,10414,10420,10403,10406,10414,10422,10417,10420,10417,10428,10429,10418,10390,10401,10430,10429,10430,10426,10418,10429,10429,10428,10391,10390,10431,10432,10433,10434,10435,10436,10434,10433,10437,10438,10436,10435,10439,10440,10434,10436,10441,10439,10436,10438,10386,10441,10438,10387,10442,10443,10444,10445,10439,10446,10447,10440,10441,10448,10446,10439,10386,10395,10448,10441,10446,10449,10450,10447,10448,10451,10449,10446,10395,10399,10451,10448,10452,10444,10443,10453,10432,10431,10444,10454,10440,10445,10431,10434,10440,10447,10442,10445,10455,10456,10457,10458,10459,10460,10461,10462,10460,10412,10411,10461,10463,10459,10456,10464,10465,10460,10459,10463,10416,10412,10460,10465,10466,10467,10468,10469,10470,10471,10463,10464,10471,10472,10465,10463,10472,10424,10416,10465,10450,10449,10471,10470,10449,10451,10472,10471,10451,10399,10424,10472,10467,10466,10473,10474,10466,10455,10458,10475,10464,10456,10455,10469,10468,10470,10464,10469,10476,10453,10443,10477,10467,10474,10476,10477,10377,10478,10479,10378,10380,10480,10478,10377,10479,10481,10402,10378,10481,10482,10400,10402,10404,10483,10484,10405,10405,10484,10485,10407,10407,10485,10486,10409,10409,10486,10487,10411,10427,10488,10483,10404,10425,10489,10488,10427,10401,10490,10491,10430,10400,10482,10490,10401,10491,10492,10426,10430,10492,10489,10425,10426,10432,10493,10494,10433,10433,10494,10495,10435,10435,10495,10496,10437,10454,10497,10493,10432,10452,10498,10497,10454,10457,10499,10500,10458,10462,10501,10499, 10457,10461,10502,10501,10462,10411,10487,10502,10461,10500,10503,10475,10458,10503,10504,10473,10475,10505,10506,10453,10476,10506,10498,10452,10453,10474,10507,10505,10476,10473,10504,10507,10474,10375,10389,10388,10389,10402,10400,10403,10420,10419,10419,10425,10427,10431,10445,10444,10444,10452,10454,10455,10466,10469,10466,10475,10473,10508,10509,10510,10511,10512,10513,10514,10510,10514,10513,10515,10502,10516,10502,10487,10511,10516,10487,10486,10508,10511,10508,10486,10517,10509,10517,10512,10510,10509,10510,10514,10516,10511,10428,10417,10422,10396,10391,10428,10396,10392,10477,10443,10442,10518,10518,10442,10447,10450,10468,10518,10450,10470,10477,10518,10468,10467,10456,10459,10462,10457,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10520,10519,10539,10540,10541,10519,10522,10542,10543,10544,10545,10546,10547,10520,10538,10548,10549,10550,10551,10543,10548,10551,10544,10552,10553,10529,10528,10550,10549,10553,10552,10554,10555,10549,10548,10556,10554,10548,10543,10553,10557,10558,10529,10549,10555,10557,10553,10554,10559,10560,10555,10561,10562,10558,10557,10563,10561,10557,10555,10564,10565,10566,10567,10568,10564,10567,10569,10570,10571,10572,10560,10573,10574,10575,10564,10576,10577,10565,10568,10578,10576,10564,10572,10579,10573,10560,10559,10496,10579,10572,10571,10580,10581,10582,10583,10574,10573,10581,10580,10532,10531,10584,10585,10586,10541,10540,10587,10585,10584,10588,10589,10588,10586,10587,10589,10586,10584,10531,10541,10560,10575,10563,10555,10579,10585,10589,10573,10587,10540,10582,10581,10589,10587,10581,10573,10552,10528,10544,10551,10590,10591,10534,10537,10535,10523,10526,10536,10533,10539,10519,10541,10531,10592,10593,10535,10534,10542,10583,10582,10540,10530,10529,10558,10562,10520,10547,10594,10521,10524,10595,10596,10525,10597,10598,10522,10521,10542,10522,10598,10599,10600,10545,10601,10602,10552,10551,10550,10584,10586,10588,10603,10604,10605,10606,10607,10603,10606,10608,10608,10609,10610,10607,10609,10611, 10612,10610,10611,10613,10614,10612,10615,10614,10616,10617,10577,10583,10542,10599,10618,10580,10583,10577,10576,10619,10574,10580,10618,10575,10574,10619,10620,10563,10575,10620,10621,10621,10622,10561,10563,10566,10562,10561,10622,10567,10592,10530,10562,10566,10527,10530,10592,10623,10527,10623,10624,10625,10626,10625,10624,10627,10501,10502,10628,10629,10630,10631,10632,10505,10633,10634,10506,10635,10636,10632,10637,10501,10629,10638,10499,10639,10640,10641,10642,10643,10486,10485,10637,10632,10644,10645,10646,10647,10636,10635,10648,10649,10650,10651,10489,10652,10653,10654,10654,10655,10488,10656,10484,10483,10657,10658,10659,10660,10661,10662,10659,10658,10663,10664,10665,10666,10667,10662,10663,10667,10666,10665,10664,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10682,10681,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10633,10639,10642,10634,10701,10702,10490,10703,10704,10705,10700,10686,10706,10707,10683,10706,10708,10709,10707,10710,10711,10709,10708,10710,10712,10713,10711,10714,10713,10712,10715,10716,10714,10715,10717,10718,10719,10513,10512,10628,10515,10513,10720,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10736,10735,10704,10743,10744,10705,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10497,10480,10543,10545,10478,10494,10539,10533,10495,10756,10757,10758,10759,10760,10761,10705,10744,10762,10763,10764,10765,10732,10731,10766,10767,10725,10728,10768,10769,10746,10745,10770,10771,10772,10773,10774,10775,10739,10776,10777,10740,10778,10779,10780,10781,10697,10700,10705,10761,10762,10765,10648,10651,10642,10641,10756,10759,10733,10736,10739,10738,10782,10781,10752,10751,10783,10775,10784,10785,10481,10786,10701,10482,10787,10788,10669,10668,10643,10485,10789,10517,10790,10791,10513,10719,10720,10695,10792,10793,10696,10794,10778,10781,10782,10605,10795,10590,10606,10608,10606,10590,10537, 10537,10536,10609,10608,10536,10526,10611,10609,10526,10525,10613,10611,10613,10525,10596,10796,10546,10538,10755,10754,10538,10539,10494,10755,10495,10533,10532,10496,10630,10691,10690,10797,10382,10570,10559,10559,10570,10572,10798,10799,10800,10801,10485,10484,10656,10789,10479,10478,10545,10600,10786,10381,10387,10570,10382,10387,10438,10437,10571,10570,10585,10579,10496,10532,10480,10380,10382,10556,10543,10488,10655,10483,10800,10799,10654,10653,10793,10682,10688,10696,10682,10793,10802,10680,10691,10636,10647,10692,10630,10632,10636,10691,10631,10644,10632,10803,10772,10775,10783,10732,10767,10804,10594,10780,10784,10775,10774,10784,10780,10779,10805,10759,10754,10634,10642,10546,10754,10759,10758,10806,10503,10500,10504,10503,10630,10797,10655,10654,10799,10483,10655,10799,10657,10732,10594,10547,10729,10805,10807,10785,10784,10547,10546,10758,10729,10758,10757,10730,10729,10748,10747,10764,10763,10760,10744,10727,10726,10528,10601,10545,10544,10808,10809,10795,10605,10810,10808,10605,10604,10590,10795,10811,10591,10527,10625,10601,10528,10601,10625,10626,10602,10809,10812,10811,10795,10504,10797,10633,10505,10507,10797,10690,10639,10633,10689,10640,10639,10690,10650,10649,10813,10814,10699,10698,10792,10695,10492,10702,10652,10497,10498,10753,10598,10524,10523,10599,10597,10595,10524,10598,10804,10767,10772,10803,10767,10766,10773,10772,10771,10770,10750,10749,10735,10734,10769,10768,10815,10741,10735,10768,10812,10627,10624,10811,10811,10624,10623,10591,10534,10591,10623,10592,10578,10618,10576,10565,10593,10592,10566,10565,10577,10593,10578,10619,10618,10619,10578,10568,10620,10621,10620,10568,10569,10569,10567,10622,10621,10493,10755,10494,10497,10755,10493,10492,10652,10489,10491,10702,10492,10490,10702,10491,10701,10490,10482,10554,10556,10382,10559,10571,10437,10496,10659,10816,10672,10660,10658,10817,10818,10663,10819,10820,10664,10667,10665,10821,10822,10666,10661,10723,10722,10823,10663,10818,10819,10667,10824,10821,10665,10669,10668,10664,10820,10825,10662,10666,10822,10826,10662,10826,10816,10659, 10678,10827,10716,10717,10716,10827,10828,10829,10714,10830,10831,10684,10683,10831,10674,10685,10684,10674,10673,10686,10685,10707,10832,10830,10683,10709,10833,10832,10707,10710,10708,10834,10835,10709,10711,10836,10833,10837,10712,10710,10835,10711,10713,10838,10836,10712,10837,10839,10715,10838,10713,10714,10829,10715,10839,10679,10678,10717,10840,10676,10788,10787,10788,10676,10824,10669,10787,10668,10825,10840,10686,10673,10841,10706,10842,10843,10844,10845,10843,10846,10847,10844,10846,10848,10849,10847,10850,10851,10852,10853,10854,10855,10856,10857,10858,10855,10854,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10867,10871,10872,10868,10871,10873,10874,10872,10851,10875,10876,10852,10877,10878,10879,10880,10881,10859,10854,10882,10883,10862,10859,10881,10884,10860,10862,10885,10864,10886,10887,10865,10888,10867,10870,10889,10871,10867,10888,10890,10873,10871,10890,10891,10875,10892,10893,10876,10894,10877,10880,10895,10881,10882,10896,10897,10883,10881,10897,10898,10886,10899,10900,10887,10901,10888,10889,10902,10903,10891,10890,10904,10905,10894,10895,10906,10907,10908,10909,10910,10911,10908,10907,10912,10913,10914,10915,10901,10902,10916,10917,10903,10918,10919,10920,10921,10922,10922,10921,10923,10924,10925,10926,10927,10906,10928,10929,10930,10931,10910,10932,10933,10907,10907,10933,10934,10912,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10943,10942,10948,10927,10926,10949,10950,10929,10928,10951,10952,10953,10933,10932,10954,10934,10933,10953,10955,10956,10940,10939,10942,10945,10957,10958,10946,10942,10958,10959,10948,10949,10960,10961,10962,10948,10961,10963,10950,10951,10964,10965,10966,10873,10891,10917,10965,10891,10903,10927,10948,10962,10967,10906,10927,10967,10905,10904,10968,10918,10903,10918,10969,10970,10936,10901,10971,10968,10904,10890,10888,10901,10904,10972,10973,10974,10975,10975,10974,10976,10977,10925,10906,10895,10978,10979,10898,10897,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10988,10987,10990,10989,10990, 10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,10997,11000,11002,11003,11001,11002,11004,11003,11004,11005,11006,11007,11008,11009,11010,10981,11011,11012,10982,11013,11007,11010,11014,11012,11011,11015,11016,11017,11013,11014,11018,11019,11020,11019,11018,11021,11020,11021,11022,11020,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11034,11037,11038,11035,11039,11040,11041,11042,11039,11043,11044,11040,11045,11046,11044,11043,11047,10723,11048,11049,10992,10991,10995,10994,10998,11050,11051,11052,11053,10983,10982,10863,10987,10986,10845,10844,10990,10987,10844,10847,10991,10990,10847,10849,10852,10996,10995,10853,11054,11055,10999,11052,11056,11002,11000,11057,11058,11004,11002,11056,11059,11005,11004,11058,11010,11009,11060,11061,10982,11012,10864,10863,10876,11062,10996,10852,11063,11014,11010,11061,10864,11012,11016,10886,11062,10876,10893,11064,11018,11014,11063,10911,10886,11016,11065,10899,11066,11067,11068,11069,11022,11021,10912,10934,11070,11071,11072,11073,11023,11022,10934,10954,11074,11075,11025,11076,10955,11032,11031,10956,11077,11036,11035,11078,11078,11035,11038,11079,10960,11041,11040,10961,10961,11040,11044,10963,11046,10964,10963,11044,11080,11081,11082,11083,10995,10991,10849,10853,11051,11084,10880,10879,11052,11051,10879,11054,11015,11085,11065,11016,11086,10938,10941,11087,11088,11089,11090,11091,10993,10996,11092,11093,10873,10966,11094,10874,10878,11054,10879,10999,10998,11052,10892,11086,11087,10893,10893,11087,11095,11064,11087,10941,11096,11095,11097,11096,10941,10940,11097,10940,10956,11077,10956,11031,11036,11077,11030,11033,11036,11031,10978,10895,10880,11084,11090,10975,10977,11098,11089,10972,10975,11090,10986,10983,11053,10845,10984,10983,10986,10985,11005,11009,11008,11006,11060,11009,11005,11059,11099,11100,11101,11102,11103,11104,10947,10946,11103,10946,10959,11105,11079,11038,11041,10960,11042,11041,11038,11037,10911,10912,11021,11018,11095,11096,10920,10919,10920,11096,11106,10921,10923,10921,11106,10926,11096,11097, 10945,10944,10943,11106,11096,10944,10945,11097,11077,10957,11077,11078,10958,10957,11078,11079,10959,10958,10973,11095,11107,10974,10974,11107,10925,10976,10972,11064,11095,10973,11089,11062,11064,10972,10996,11062,11089,11088,10996,11088,11091,11092,11084,11051,11108,11098,10977,10978,11084,11098,10977,10976,10925,10978,10926,10925,10924,10923,10922,10924,10925,11107,10949,10926,11104,11103,10947,11104,10926,11106,10949,11103,11105,10960,11079,10960,11105,10959,11091,11090,11098,11108,11092,11091,11108,11051,11093,11092,11051,11050,11071,11109,11072,11110,11111,11070,11073,10939,10935,11112,10955,10939,10938,10916,10935,10938,11086,10917,10916,10892,10965,10917,11086,10892,10875,10966,10965,10850,11094,10851,10874,11094,10850,10848,10872,10874,10848,10846,10868,10872,10846,10843,10866,10869,10842,10870,10869,10866,10865,10870,10865,10887,10889,10889,10887,10900,10902,10913,11113,11114,11115,11111,11110,11116,11117,11074,11110,11073,11118,11119,11076,11025,10842,10869,10868,10843,10851,11094,10966,10875,10848,10850,10853,10849,10930,10896,11120,10931,10896,10882,11121,11120,10882,10854,10857,11121,11063,10884,10908,10911,11083,11122,11123,11080,11099,11102,11122,11083,10979,10980,11101,11100,11122,10964,11046,11123,11102,10950,10964,11122,11101,10929,10950,11102,10930,10929,11101,10980,10980,10897,10896,10930,11056,10858,10861,11058,10855,10858,11056,11057,10856,11055,11054,10878,10857,10856,10878,11121,10857,10878,10877,11120,11121,10877,10894,10931,11120,10894,10905,10928,10931,10905,10967,10951,10928,10967,10962,10963,10964,10951,10962,10885,10883,10898,10909,10909,10898,10979,10910,10979,11100,10932,10910,11099,10952,10932,11100,10953,11083,11082,10954,10885,10862,10883,10884,11124,10860,11124,11059,11058,10861,10860,11119,11116,11110,11114,11113,11067,11066,10863,10866,10842,10845,11053,10908,10884,10885,10909,11061,11124,10884,11063,11059,11124,11061,11060,10856,10855,11057,11055,11057,11000,10999,11055,11116,11125,11126,11117,11125,11127,11128,11118,11129,11119,10901,10915,10971,10935,10916,10918,10936,10968, 10969,10918,11129,11127,11125,11116,11119,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11142,11145,11152,11153,11148,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11161,11160,10937,11164,11165,11166,11167,11166,11133,11168,11167,11169,11170,11171,11172,11173,11174,11175,11156,11157,11176,11177,11178,11179,11180,11181,11182,11181,11180,11183,11184,11112,10937,11160,11185,11130,11133,11166,11186,11172,11171,11127,11129,11187,10971,10915,11179,11187,11188,10968,10971,11189,11138,11141,11190,11126,11125,11147,11146,10969,10968,11188,11191,10936,10970,11192,11193,11159,11140,11139,11194,11159,11194,11185,11160,11143,11195,11196,11144,11197,11198,11199,11200,11201,11198,11197,11202,11134,11137,11203,11204,11204,11203,11205,11206,11169,11207,11208,11170,11148,11153,11209,11149,11206,11205,11201,11202,11166,11165,11210,11186,10915,10914,11180,11179,11209,11153,11178,11177,11128,11127,11171,11211,11128,11211,11147,11125,11148,11147,11211,11154,11211,11171,11170,11154,11170,11208,11152,11154,11178,11153,11152,11212,11152,11208,11190,11212,11212,11158,11157,11178,11190,11141,11158,11212,11141,11140,11155,11158,11161,11193,11173,11162,11173,11156,11155,11162,11155,11140,11159,11162,11163,10936,11193,11161,11142,11151,11164,11167,11133,11132,11213,11168,11213,11195,11143,11168,11167,11168,11143,11142,11189,11190,11208,11207,11214,11200,11199,11215,11215,11216,11217,11214,10955,11217,11216,11032,11193,11192,11174,11173,11191,11188,11218,11219,11156,11175,11176,11157,11218,11188,11187,11220,11220,11187,11179,11182,11183,11180,10914,11221,11137,11136,11222,11223,11203,11137,11223,11224,11205,11203,11224,11225,11201,11205,11225,11226,11226,11227,11198,11201,11199,11198,11227,11228,11215,11199,11228,11229,11229,11230,11216,11215,11032,11216,11230,11231,11222,11210,11165,11223,11224,11223,11165,11164,11225,11224,11164,11151,11150,11226,11225,11150,11145,11145,11144,11227,11226,11228,11227,11144,11196,11229,11228,11196,11195,11213,11213, 11132,11230,11229,11230,11132,11131,11231,11134,11172,11129,11135,11204,11169,11172,11134,11204,11206,11207,11169,11202,11189,11207,11206,11202,11197,11138,11189,11197,11200,11139,11138,11194,11139,11200,11214,11185,11194,11214,11217,10955,11112,11185,11217,10935,10937,11112,10913,11115,11221,10914,11232,11069,11068,11233,11113,10913,10902,10900,10900,10899,11067,11113,11065,11068,11067,10899,11233,11068,11065,11085,10970,10969,11191,11192,11174,11192,11191,11219,11175,11174,11219,11218,11176,11175,11218,11220,11177,11176,11220,11182,11181,11209,11177,11182,11149,11209,11181,11184,11183,11146,11149,11184,11221,11126,11146,11183,11117,11126,11221,11115,11114,11111,11117,11115,11111,11114,11066,11070,11066,11069,11071,11070,11231,11029,11032,10791,10718,10512,10517,10638,10806,10500,10499,11046,11234,11235,11123,11073,11072,11075,11074,11236,11075,11072,11109,11237,10688,10687,11238,10696,10688,11237,10693,11239,10699,10695,10694,10703,10700,10699,11239,11240,10727,10744,10743,10728,10727,11240,11241,10815,10768,10728,11241,10739,10736,10742,10776,11048,10660,10672,10671,10661,10660,11048,10723,10706,10841,10834,10708,10839,10837,11242,11243,10834,10841,11244,11245,11246,11247,10672,10816,11248,10816,10826,11249,11250,10821,10824,11251,11252,11253,10822,10821,11254,11255,10826,10822,10837,10835,11256,11257,11247,11258,10673,10672,11258,11259,10841,10673,10676,10679,11260,11261,10679,10839,11262,11260,10824,10676,11261,11263,10835,10834,11264,11265,10671,11049,11048,11082,11081,11023,10954,11024,11023,11081,10724,10723,11047,11260,11262,11263,11261,11262,10839,10824,11263,10839,11243,11251,10824,11243,11242,11250,11251,11242,10837,10821,11250,10837,11257,11252,10821,11257,11256,11253,11252,11256,10835,10822,11253,10835,11265,11254,10822,11265,11264,11255,11254,11264,10834,10826,11255,10834,11245,11249,10826,11245,11244,11248,11249,11244,10841,10816,11248,10841,11259,11246,10816,11259,11258,11247,11246,10614,11266,11267,10612,10612,11268,11269,10610,10607,10610,11270,11271,11272,11273,10603,10607,11274,10604,10603,11275, 11276,10810,10604,11277,10777,11278,11279,10740,11280,10737,10740,11281,11282,11283,10778,10794,11284,11285,10779,10778,10779,11286,11287,10805,10614,10613,10796,10616,10594,10804,10597,10521,10595,10597,10804,10803,10596,10595,10803,10783,10796,10596,10783,10785,10807,10616,10796,10785,10807,11288,10616,11106,10943,10947,10919,10922,11107,11095,10593,10577,10599,10535,10593,10599,10523,10786,10481,10479,10634,10754,10753,10498,10506,11119,11110,11076,10858,10859,10862,10861,11046,11045,11234,10952,11099,11083,10952,11083,10953,10806,10631,10630,10503,10628,10502,10515,10643,10790,10517,10486,10654,10488,10489,7798,7465,7561,7457,11289,7562,10661,11290,10817,10658,7717,7721,7718,7717,7612,7721,8840,9010,9015,8841,8795,8995,8796,11291,8994,8995,8795,11292,10807,10805,11292,11288,10807,10368,9825,9835,10369,11074,11076,11110,11232,11071,11069,11232,11109,11071,11236,11026,11025,11075,10936,11163,10937,8709,8777,8778,8706,8983,8987,8774,8773,8984,8988,8987,8983,8988,8984,8953,8946,8943,8946,8953,8930,8917,8949,8943,8930,8950,8949,8917,8916,8925,8951,8950,8916,8924,9043,8951,8925,9005,8805,8807,9006,8714,8802,8803,8770,8741,8802,9007,8742,9007,8802,8714,8717,8765,8771,8776,8702,8703,8702,8776,8775,8722,8703,8775,8986,8985,8996,8722,8986,8996,8985,8945,8997,8945,8944,8998,8997,8948,8999,8998,8944,9000,8999,8948,8947,8947,8952,9001,9000,8952,9044,9042,9001,8779,8781,8806,8804,8710,8713,8779,8804,8766,8702,8705,8762,8766,8765,8702,8705,8677,8679,8762,8977,8891,8826,8815,8892,8891,8977,8976,8965,8961,8954,8966,8994,8962,8961,8965,9090,8962,8994,11291,8904,9026,9029,8920,8918,8931,8960,10737,11280,11293,10794,10782,10738,10737,10794,10733,10738,10782,10751,10734,10733,10751,10750,10769,10734,10750,10770,10725,10769,10770,10745,10726,10725,10745,10748,10760,10726,10748,10763,10761,10760,10763,10762,10697,10761,10762,10651,10698,10697,10651,10650,10792,10698,10650,10814,10802,10793,10792,10814,11294,10802,10814,10813,10680,10802,11294,11295,11296,10681,10680,11296,10680,11295,8972,8686,8685,8993,8687,8991,8683,8982,8887,8886, 11296,11295,10647,10646,10692,10647,11295,11294,10689,10692,11294,10813,10640,10689,10813,10649,10641,10640,10649,10648,10765,10756,10641,10648,10757,10756,10765,10764,10730,10757,10764,10747,10731,10730,10747,10746,10771,10766,10731,10746,10773,10766,10771,10749,10752,10774,10773,10749,10780,10774,10752,10781,6617,6656,6610,6613,11297,11298,11299,11300,11300,11299,11301,11302,11302,11301,11303,11304,11304,11303,11305,11306,11306,11305,11307,11308,11308,11307,11309,11310,11310,11309,11311,11312,11312,11311,11313,11314,11314,11313,11315,11316,11316,11315,11317,11318,11318,11317,11319,11320,11320,11319,11321,11322,11322,11321,11323,11324,11324,11323,11325,11326,11326,11325,11327,11328,11328,11327,11298,11297,11329,11299,11298,11329,11301,11299,11329,11303,11301,11329,11305,11303,11329,11307,11305,11329,11309,11307,11329,11311,11309,11329,11313,11311,11329,11315,11313,11329,11317,11315,11329,11319,11317,11329,11321,11319,11329,11323,11321,11329,11325,11323,11329,11327,11325,11329,11298,11327,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11335,11351,11352,11353,11354,11355,11356,11357,11354,11358,11359,11360,11361,11362,11351,11363,11345,11344,11364,11364,11365,11347,11363,11366,11367,11333,11332,11368,11369,11370,11371,11372,11359,11358,11373,11373,11358,11353,11374,11374,11353,11356,11375,11356,11376,11377,11375,11378,11371,11370,11379,11379,11370,11380,11381,11381,11380,11382,11383,11383,11382,11359,11372,11384,11331,11330,11385,11386,11341,11355,11354,11343,11339,11334,11337,11340,11338,11341,11343,11342,11384,11387,11337,11336,11340,11387,11355,11341,11350,11332,11331,11336,11344,11357,11388,11364,11365,11364,11388,11369,11352,11366,11332,11350,11367,11366,11362,11361,11343,11354,11357,11344,11348,11369,11368,11349,11380,11370,11369,11388,11357,11359,11382,11388,11385,11376,11355,11386,11389,11390,11391,11392,11389,11392,11393,11394,11394,11393,11395,11396,11397,11398,11330,11333,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408, 11409,11410,11411,11412,11346,11349,11413,11414,11415,11402,11416,11417,11418,11419,11420,11419,11421,11422,11360,11415,11423,11361,11424,11425,11407,11410,11412,11426,11425,11424,11427,11397,11333,11367,11428,11429,11368,11371,11430,11431,11420,11422,11431,11432,11416,11420,11432,11433,11417,11416,11377,11376,11417,11433,11378,11434,11428,11371,11434,11435,11436,11428,11435,11437,11438,11436,11437,11430,11422,11438,11385,11330,11398,11439,11440,11419,11418,11404,11408,11406,11405,11400,11399,11408,11404,11403,11409,11400,11441,11439,11401,11405,11404,11418,11441,11413,11401,11398,11397,11407,11425,11442,11421,11442,11425,11426,11429,11414,11413,11397,11427,11423,11427,11367,11361,11408,11407,11421,11419,11411,11349,11368,11429,11429,11428,11436,11442,11421,11442,11438,11422,11418,11376,11385,11440,11389,11443,11444,11390,11445,11443,11389,11394,11446,11445,11394,11396,11387,11386,11355,11350,11336,11335,11387,11384,11386,11340,11337,11387,11331,11384,11336,11352,11362,11366,11369,11348,11365,11351,11362,11352,11347,11365,11348,11358,11354,11353,11380,11388,11382,11356,11355,11376,11441,11418,11440,11413,11402,11401,11441,11440,11439,11405,11441,11400,11398,11401,11439,11414,11427,11423,11429,11426,11411,11415,11414,11423,11411,11426,11412,11420,11416,11419,11436,11438,11442,11417,11376,11418,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11456,11455,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11450,11449,11470,11471,11472,11473,11474,11475,11476,11474,11477,11478,11479,11462,11461,11468,11467,11480,11481,11470,11449,11482,11483,11484,11485,11486,11487,11481,11480,11488,11489,11490,11491,11492,11493,11494,11495,11496,11497,11498,11499,11500,11501,11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517,11518,11519,11520,11521,11522,11523,11524,11525,11526,11525,11524,11527,11528,11529,11530,11511,11512,11511,11530,11531,11517,11516,11532,11533,11520,11534,11535,11536,11521,11520,11536,11537,11538,11521,11537,11539,11529,11540,11541, 11530,11531,11530,11541,11542,11533,11532,11543,11544,11536,11535,11545,11546,11547,11548,11549,11550,11542,11541,11551,11552,11544,11543,11553,11554,11545,11555,11556,11546,11557,11546,11556,11558,11559,11557,11558,11560,11561,11559,11560,11562,11554,11553,11563,11564,11555,11565,11566,11556,11558,11556,11566,11567,11560,11558,11567,11568,11562,11560,11568,11569,11570,11571,11572,11573,11574,11572,11575,11576,11576,11575,11577,11578,11579,11578,11577,11580,11581,11502,11505,11582,11583,11581,11582,11584,11585,11586,11503,11502,11587,11585,11502,11581,11588,11587,11581,11583,11548,11583,11584,11589,11590,11591,11586,11585,11523,11592,11587,11588,11585,11587,11592,11590,11547,11588,11583,11548,11524,11523,11588,11547,11593,11592,11594,11595,11522,11594,11592,11523,11596,11597,11591,11590,11598,11470,11483,11599,11600,11601,11602,11603,11604,11605,11606,11607,11466,11608,11609,11467,11467,11609,11610,11480,11550,11527,11524,11547,11611,11589,11562,11569,11612,11604,11607,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11624,11625,11623,11626,11627,11624,11628,11629,11630,11631,11495,11632,11633,11496,11621,11620,11634,11635,11531,11532,11516,11512,11542,11543,11532,11531,11552,11553,11543,11542,11636,11563,11553,11552,11637,11638,11639,11640,11641,11486,11485,11642,11500,11640,11639,11501,11643,11514,11517,11534,11533,11535,11534,11517,11544,11545,11535,11533,11554,11555,11545,11544,11564,11565,11555,11554,11616,11612,11644,11617,11615,11604,11612,11616,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654,11631,11655,11653,11655,11482,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11460,11459,11595,11478,11669,11488,11522,11525,11670,11671,11672,11673,11674,11571,11673,11672,11675,11676,11677,11678,11679,11680,11652,11506,11507,11506,11652,11651,11681,11671,11670,11682,11552,11551,11683,11636,11551,11540,11684,11683,11684,11540,11646,11645,11510,11508,11507,11685,11650,11686,11687,11651,11688,11689,11690,11691,11689,11692,11693,11690,11693,11692,11694,11695,11696, 11697,11459,11455,11458,11698,11696,11455,11451,11454,11699,11700,11701,11469,11470,11598,11477,11474,11473,11702,11488,11479,11594,11522,11595,11459,11697,11593,11594,11479,11478,11595,11697,11703,11704,11596,11705,11461,11464,11706,11462,11609,11608,11463,11610,11609,11462,11479,11659,11658,11707,11708,11709,11679,11506,11509,11678,11709,11509,11710,11711,11712,11713,11714,11680,11679,11631,11654,11676,11631,11679,11677,11677,11679,11709,11678,11676,11675,11628,11631,11447,11453,11452,11715,11454,11453,11472,11471,11664,11448,11716,11661,11717,11718,11664,11663,11719,11720,11721,11722,11722,11721,11723,11724,11725,11726,11724,11723,11727,11728,11729,11730,11731,11727,11730,11732,11733,11649,11734,11735,11650,11649,11733,11736,11646,11686,11737,11647,11654,11653,11727,11731,11734,11680,11654,11731,11649,11652,11680,11734,11738,11739,11740,11741,11742,11740,11739,11743,11744,11742,11743,11745,11746,11747,11748,11749,11747,11750,11751,11748,11750,11752,11753,11751,11754,11755,11756,11757,11758,11759,11760,11761,11760,11759,11762,11763,11764,11765,11766,11767,11765,11768,11769,11766,11768,11757,11756,11769,11691,11690,11758,11754,11659,11708,11757,11768,11660,11659,11768,11765,11770,11660,11765,11764,11657,11740,11742,11658,11658,11742,11744,11707,11689,11688,11749,11748,11688,11707,11744,11749,11689,11748,11751,11692,11692,11751,11753,11694,11695,11694,11753,11762,11693,11695,11762,11759,11690,11693,11759,11758,11771,11772,11726,11725,11773,11774,11775,11776,11776,11775,11777,11778,11779,11780,11781,11782,11783,11784,11782,11781,11785,11786,11787,11788,11789,11790,11787,11786,11497,11791,11792,11712,11793,11794,11712,11792,11795,11796,11797,11798,11798,11797,11799,11800,11800,11799,11801,11802,11803,11804,11805,11806,11807,11808,11780,11779,11484,11779,11782,11485,11485,11782,11784,11642,11668,11667,11809,11788,11496,11633,11787,11790,11713,11810,11811,11714,11638,11798,11800,11639,11639,11800,11802,11501,11501,11802,11805,11498,11632,11812,11813,11665,11641,11666,11814,11815,11487,11486,11816,11817,11600,11487,11817, 11818,11819,11820,11821,11499,11640,11500,11822,11823,11637,11640,11823,11824,11825,11637,11824,11826,11495,11827,11812,11632,11828,11475,11477,11829,11515,11514,11830,11831,11832,11833,11599,11629,11834,11515,11831,11835,11514,11643,11836,11830,11519,11518,11837,11838,11629,11839,11840,11832,11841,11701,11598,11842,11829,11477,11702,11843,11843,11781,11780,11829,11841,11783,11781,11843,11833,11785,11844,11842,11789,11786,11832,11840,11845,11792,11791,11846,11796,11847,11848,11835,11799,11797,11831,11830,11836,11801,11799,11830,11806,11801,11836,11838,11808,11849,11475,11828,11497,11790,11789,11791,11846,11791,11840,11839,11850,11678,11710,11851,11848,11852,11850,11851,11793,11852,11848,11847,11853,11794,11793,11847,11854,11714,11811,11855,11856,11857,11711,11854,11494,11497,11712,11711,11857,11858,11494,11711,11453,11447,11450,11472,11472,11450,11469,11473,11666,11641,11642,11667,11707,11688,11691,11708,11469,11701,11702,11473,11448,11447,11715,11716,11745,11746,11749,11744,11708,11691,11754,11757,11642,11784,11809,11667,11486,11641,11815,11816,11701,11841,11843,11702,11483,11482,11655,11630,11499,11498,11859,11819,11491,11518,11860,11492,11860,11518,11521,11538,11539,11537,11559,11561,11599,11483,11630,11629,11580,11861,11862,11579,11656,11482,11449,11448,11632,11665,11668,11633,11728,11718,11717,11729,11653,11656,11728,11727,11785,11788,11809,11844,11806,11805,11802,11801,11633,11668,11788,11787,11498,11805,11804,11859,11666,11665,11813,11814,11499,11821,11822,11500,11598,11599,11833,11842,11519,11838,11836,11643,11786,11785,11833,11832,11803,11806,11838,11837,11520,11519,11643,11534,11710,11510,11513,11851,11515,11834,11512,11516,11825,11863,11638,11637,11508,11510,11710,11509,11651,11687,11685,11507,11686,11650,11736,11737,11847,11796,11795,11853,11863,11795,11798,11638,11825,11826,11855,11811,11851,11834,11835,11848,11796,11835,11831,11797,11687,11686,11529,11528,11529,11686,11646,11540,11772,11771,11774,11773,11755,11754,11758,11761,11783,11841,11842,11844,11784,11783,11844,11809,11685,11528,11511,11510,11864, 11476,11475,11849,11487,11600,11603,11484,11849,11808,11807,11602,11484,11603,11807,11779,11780,11808,11828,11829,11619,11618,11622,11625,11546,11557,11537,11536,11803,11837,11518,11865,11866,11867,11868,11869,11870,11871,11872,11873,11873,11872,11874,11875,11875,11874,11876,11877,11870,11878,11879,11871,11880,11881,11876,11882,11869,11879,11883,11866,11605,11884,11867,11606,11570,11563,11636,11885,11574,11565,11564,11573,11567,11566,11576,11578,11568,11567,11578,11579,11569,11568,11579,11862,11527,11550,11618,11621,11618,11550,11549,11622,11622,11549,11611,11623,11611,11569,11626,11623,11526,11527,11621,11635,11576,11566,11565,11574,11670,11684,11645,11682,11636,11683,11673,11885,11683,11684,11670,11673,11573,11564,11563,11570,11591,11886,11887,11586,11493,11503,11586,11887,11503,11492,11860,11504,11538,11539,11582,11505,11561,11562,11589,11584,11505,11504,11860,11538,11584,11582,11539,11561,11597,11888,11886,11591,11704,11889,11888,11597,11490,11493,11887,11890,11891,11892,11893,11894,11886,11895,11890,11887,11888,11896,11895,11886,11880,11882,11897,11898,11465,11899,11900,11466,11464,11463,11901,11902,11900,11903,11608,11466,11903,11904,11463,11608,11905,11906,11907,11908,11909,11910,11911,11912,11913,11909,11912,11914,11915,11916,11917,11918,11908,11907,11919,11920,11921,11922,11918,11920,11923,11924,11906,11905,11916,11913,11914,11917,11735,11734,11731,11732,11925,11644,11612,11613,11662,11926,11927,11663,11663,11927,11928,11717,11729,11929,11930,11730,11730,11930,11931,11732,11932,11933,11733,11735,11933,11934,11736,11733,11935,11936,11647,11737,11936,11937,11648,11647,11604,11938,11939,11605,11615,11614,11938,11604,11660,11770,11940,11657,11941,11942,11681,11682,11657,11940,11741,11740,11928,11929,11729,11717,11934,11935,11737,11736,11937,11941,11682,11648,11931,11932,11735,11732,11548,11589,11611,11549,11861,11627,11626,11862,11846,11675,11678,11845,11943,11944,11945,11946,11947,11943,11946,11948,11944,11949,11950,11945,11949,11951,11952,11950,11953,11954,11955,11956,11957,11958,11897,11893,11959,11954,11953, 11960,11961,11924,11923,11894,11911,11962,11963,11811,11810,11863,11825,11863,11810,11853,11795,11713,11794,11853,11810,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975,11975,11976,11977,11972,11978,11979,11980,11981,11465,11468,11982,11983,11984,11985,11966,11965,11986,11987,11988,11989,11990,11991,11987,11992,11993,11978,11981,11994,11468,11481,11995,11982,11985,11996,11997,11966,11998,11999,12000,12001,11481,11489,12002,11995,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,11525,12036,12037,11526,12038,12036,11525,12039,12026,12040,12041,12025,12042,12040,12026,12028,12043,12044,12029,12033,12045,12046,12047,12032,12048,12045,12033,12049,12050,12048,12032,12041,12040,12051,12052,12042,12053,12051,12040,12043,12054,12055,12044,12045,12056,12057,12046,12058,12059,12060,12061,12053,12062,12063,12051,12054,12064,12065,12055,12057,12056,12066,12067,12068,12069,12066,12056,12070,12071,12069,12068,12072,12073,12071,12070,12064,12074,12075,12065,12067,12066,12076,12077,12069,12078,12076,12066,12071,12079,12078,12069,12073,12080,12079,12071,12081,12082,12083,12084,12085,12086,12087,12083,12086,12088,12089,12087,12090,12091,12089,12088,12092,12093,12016,12015,12094,12095,12093,12092,12096,12015,12018,12097,12098,12092,12015,12096,12099,12094,12092,12098,12061,12100,12095,12094,12101,12096,12097,12102,12037,12099,12098,12103,12096,12101,12103,12098,12058,12061,12094,12099,12036,12058,12099,12037,12104,12105,12106,12103,12035,12037,12103,12106,12107,12101,12102,12108,12109,12110,11996,11985,12111,12112,12113,12114,12115,12116,12117,12118,11983,11982,12119,12120,11982,11995,12121,12119,12059,12058,12036,12038,12122,12080,12073,12100,12123,12124,12116,12115,11614,11617,12125,12126,12127,12128,12129,12130,12131,12132,12133,12134,12134,12133,12135,12136,12137,12138,12139,12140,12010,12009,12141,12142,12128,11635,11634,12129,12042,12025,12029,12044,12053,12042, 12044,12055,12062,12053,12055,12065,12143,12062,12065,12075,12144,12145,12146,12147,12148,12149,12001,12000,12013,12012,12146,12145,12150,12047,12028,12027,12043,12028,12047,12046,12054,12043,12046,12057,12064,12054,12057,12067,12074,12064,12067,12077,12125,11617,11644,12123,12126,12125,12123,12115,12151,12152,12153,12154,12155,12156,12157,12158,12159,12160,12138,12161,12159,12162,11997,12160,12163,12164,12165,12166,12167,12168,12169,12170,12171,12172,12173,12174,11976,11993,12105,11977,11669,11525,12035,12002,12175,12176,12177,12178,12084,12179,12176,12180,12181,12182,12183,12184,12185,12019,12156,12186,12022,12157,12156,12019,12187,12188,12175,12178,12062,12143,12189,12063,12063,12189,12190,12052,12190,12151,12154,12052,12023,12191,12022,12021,12158,12157,12192,12193,12194,12195,12196,12197,12197,12196,12198,12199,12198,12200,12201,12199,12202,11972,11977,12203,11973,11972,12202,12204,11968,12205,12206,11969,12207,12109,11985,11984,11991,12208,11988,11987,12002,12035,12106,11994,12105,12104,12203,11977,12106,12105,11993,11994,12203,12107,12209,12210,11979,11978,12211,12212,11981,11980,12120,12119,12121,11994,11981,12119,12165,12213,12214,12166,12215,12020,12019,12185,12182,12216,12020,12215,12217,12218,12219,12220,12186,12161,12138,12185,12184,12183,12185,12138,12183,12182,12215,12185,12184,12138,12137,12181,11964,12221,11971,11970,11969,11986,11989,11970,12168,12167,12222,11967,12223,12169,12168,12224,12225,12226,12227,12228,12226,12229,12230,12227,12231,12230,12229,12232,12233,12234,12235,12236,12237,12238,12234,12233,12239,12240,12241,12155,12158,12242,12239,12155,12154,12153,12243,12193,12161,12237,12233,12159,12241,12237,12161,12186,12155,12241,12186,12156,11738,11741,12244,12245,12246,12247,12245,12244,12248,12249,12247,12246,12250,12251,12252,12253,12253,12252,12254,12255,12255,12254,12256,12257,12258,12259,12260,12261,12262,12263,12264,12265,12264,12266,12267,12265,11764,11767,12268,12269,12269,12268,12270,12271,12271,12270,12260,12259,12195,12258,12262,12196,12165,12271,12259,12213,12164,12269,12271,12165, 11770,11764,12269,12164,12163,12166,12246,12244,12166,12214,12248,12246,12194,12251,12248,12214,12251,12194,12197,12252,12197,12199,12254,12252,12199,12201,12256,12254,12200,12267,12256,12201,12198,12265,12267,12200,12196,12262,12265,12198,12272,12231,12232,12273,12274,12275,12276,12277,12275,12278,12279,12276,12280,12281,12282,12283,12284,12282,12281,12285,12286,12287,12288,12289,12290,12289,12288,12291,12008,12220,12292,12293,12294,12292,12220,12295,12296,12297,12298,12299,12297,12300,12301,12298,12300,12302,12303,12301,12304,12305,12306,12307,12308,12280,12283,12309,11998,12001,12281,12280,12001,12149,12285,12281,12172,12287,12310,12173,12009,12291,12288,12141,12219,12218,12311,12312,12147,12146,12300,12297,12146,12012,12302,12300,12012,12011,12306,12302,12142,12171,12313,12314,12148,12315,12316,12174,11999,12317,12318,12000,12111,12319,12317,11999,12320,12014,12321,12322,12145,12323,12324,12013,12144,12325,12323,12145,12326,12327,12325,12144,12010,12142,12314,12328,12329,12330,11991,11990,12030,12331,12332,12027,12333,12140,12110,12334,12335,12336,12331,12030,12027,12332,12337,12150,12034,12338,12339,12031,12140,12333,12340,12341,12342,12343,12109,12207,12330,12344,12208,11991,12344,12330,12283,12282,12342,12344,12282,12284,12334,12343,12345,12286,12290,12340,12333,12289,12346,12347,12293,12292,12299,12336,12348,12349,12301,12332,12331,12298,12337,12332,12301,12303,12305,12338,12337,12303,12309,12329,11990,12350,12008,12293,12290,12291,12347,12341,12340,12293,12351,12352,12216,12182,12348,12352,12351,12353,12294,12349,12348,12353,12354,12349,12294,12295,12355,12356,12311,12218,12007,12217,12220,12008,11970,11989,11965,11964,11989,11988,11984,11965,12174,12173,12149,12148,12214,12213,12195,12194,11984,11988,12208,12207,11967,12222,12221,11964,12249,12248,12251,12250,12213,12259,12258,12195,12149,12173,12310,12285,12000,12318,12315,12148,12207,12208,12344,12342,11996,12139,12160,11997,12014,12320,12357,12011,12006,12005,12358,12031,12358,12049,12032,12031,12050,12072,12070,12048,12110,12140,12139,11996,12091,12090, 12359,12360,12162,11967,11966,11997,12142,12141,12172,12171,12236,12235,12223,12224,12159,12233,12236,12162,12286,12345,12310,12287,12305,12303,12302,12306,12141,12288,12287,12172,12011,12357,12307,12306,12174,12316,12313,12171,12014,12013,12324,12321,12109,12343,12334,12110,12034,12150,12337,12338,12289,12333,12334,12286,12304,12339,12338,12305,12033,12047,12150,12034,12216,12352,12024,12023,12025,12335,12030,12029,12326,12144,12147,12361,12021,12020,12216,12023,12157,12022,12191,12192,12193,12243,12242,12158,12349,12354,12296,12299,12361,12147,12297,12296,12326,12311,12356,12327,12352,12348,12336,12335,12299,12298,12331,12336,12192,12039,12041,12193,12041,12052,12154,12193,12273,12274,12277,12272,12261,12263,12262,12258,12284,12345,12343,12342,12285,12310,12345,12284,12191,12023,12026,12039,12113,12350,12362,11999,11998,12112,12111,12350,12113,12308,12309,11998,12280,12308,12112,12283,12330,12329,12309,12130,12132,12131,12127,12056,12045,12048,12068,12304,12363,12031,12339,12364,12365,12366,12367,12368,12369,12370,12371,12369,12372,12373,12370,12372,12374,12375,12373,12368,12371,12376,12377,12378,12379,12375,12380,12381,12376,12365,12364,12118,12117,12367,12382,12081,12180,12143,12075,12085,12082,12074,12077,12078,12088,12086,12076,12079,12090,12088,12078,12080,12359,12090,12079,12038,12128,12127,12059,12127,12131,12060,12059,12131,12134,12122,12060,12122,12134,12136,12080,11526,11635,12128,12038,12086,12085,12077,12076,12175,12188,12151,12190,12143,12180,12176,12189,12189,12176,12175,12190,12082,12081,12075,12074,12102,12097,12383,12384,12097,12018,12004,12383,12018,12017,12358,12005,12049,12016,12093,12050,12072,12095,12100,12073,12016,12049,12358,12017,12095,12072,12050,12093,12108,12102,12384,12385,12209,12108,12385,12386,12003,12387,12383,12004,12388,12389,12390,12391,12384,12383,12387,12392,12385,12384,12392,12393,12378,12394,12395,12379,11465,11983,12396,11899,11979,12397,12398,11980,12396,11983,12120,12399,12399,12120,11980,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12406,12405,12411, 12412,12413,12414,12402,12415,12416,12403,12417,12401,12404,12418,12414,12413,12410,12409,12240,12238,12237,12241,11925,12124,12123,11644,12170,12169,12419,12420,12169,12223,12421,12419,12235,12234,12422,12423,12234,12238,12424,12422,12425,12240,12239,12426,12426,12239,12242,12427,12428,12243,12153,12429,12429,12153,12152,12430,12115,12118,11939,11938,12126,12115,11938,11614,12164,12163,11940,11770,12431,12188,12187,12432,12163,12244,11741,11940,12421,12223,12235,12423,12427,12242,12243,12428,12430,12152,12188,12431,12424,12238,12240,12425,12061,12060,12122,12100,12360,12359,12136,12135,12347,12346,12182,12181,12433,12434,12435,12436,12437,12438,12434,12433,12436,12435,12439,12440,12440,12439,12441,12442,12443,12444,12445,12446,12441,12445,12444,12442,12390,12443,12446,12447,12448,12417,12418,12449,12389,12450,12451,12407,12311,12326,12361,12312,12361,12296,12354,12312,12219,12312,12354,12295,11704,11597,11596,11655,11631,11630,11488,11669,11489,11557,11559,11537,11551,11541,11540,11610,11488,11480,11851,11513,11834,11574,11573,11572,11673,11571,11885,11629,11628,11839,11528,11685,11687,11596,11590,11593,11593,11590,11592,11703,11697,11696,11460,11705,11456,11478,11461,11460,11460,11461,11705,11697,11596,11593,11610,11479,11488,11678,11850,11845,11448,11664,11718,11856,11854,11855,11827,11494,11858,11712,11794,11713,11807,11603,11602,11854,11711,11714,11827,11495,11494,11852,11845,11850,11792,11852,11793,11840,11791,11789,11790,11497,11496,11792,11845,11852,11718,11728,11656,11513,11512,11834,11818,11601,11600,11803,11865,11804,11819,11865,11820,11859,11865,11819,11891,11894,12452,11804,11865,11859,11448,11718,11656,11570,11885,11571,11884,11868,11867,11876,11881,11877,12453,11879,11878,12453,11883,11879,11645,11648,11682,11704,11703,11889,11492,11503,11493,11490,12454,11491,11464,11902,11706,11463,11904,11901,11675,11846,11839,11675,11839,11628,11921,11920,11919,11915,11918,11922,11569,11862,11626,11892,11959,11893,11963,12455,11894,11865,11518,12456,11910,11962,11911,11820,11865,12456,12209,12107,12108,12160,12139, 12138,12002,11489,11669,12068,12048,12070,12063,12052,12051,12121,11995,12002,12352,12335,12024,12085,12083,12082,12176,12179,12177,12140,12341,12137,12039,12192,12191,12107,12104,12101,12104,12103,12101,12210,12202,12203,11976,11975,12211,11993,11976,11978,11976,12211,11978,12203,12104,12107,12121,12002,11994,12182,12346,12351,11967,12224,12168,12457,12356,12355,12328,12458,12007,12220,12219,12295,12308,12113,12112,12355,12218,12217,12328,12007,12010,12353,12351,12346,12292,12294,12353,12340,12290,12293,12291,12009,12008,12292,12353,12346,12224,12162,12236,12024,12335,12025,12319,12111,12114,12304,12307,12363,12320,12322,12363,12357,12320,12363,12388,12459,12389,12307,12357,12363,11967,12162,12224,12081,12084,12180,12379,12395,12460,12382,12367,12366,12375,12374,12380,12461,12377,12376,12461,12376,12381,12151,12188,12152,12209,12386,12210,12005,12004,12018,12003,12006,12462,11979,12212,12397,11980,12398,12400,12181,12341,12347,12181,12137,12341,12463,12416,12415,12080,12136,12359,12391,12390,12447,12450,12389,12464,12363,12465,12031,12408,12407,12451,12322,12465,12363,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12486,12489,12472,12471,12468,12467,12490,12491,12492,12493,12494,12495,12488,12487,12482,12485,12493,12466,12469,12494,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12484,12483,12520,12521,12522,12523,12524,12525,12504,12523,12522,12505,12526,12501,12500,12527,12528,12529,12530,12531,12532,12495,12494,12533,12520,12525,12524,12521,12533,12494,12469,12503,12534,12515,12514,12535,12536,12528,12537,12538,12535,12518,12517,12534,12530,12526,12539,12540,12541,12542,12543,12544,12545,12481,12546,12547,12548,12549,12550,12551,12552,12553,12545,12547,12549,12554,12545,12553,12550,12549,12553,12552,12555,12554,12556,12557,12554,12555,12558,12545,12559,12558,12555,12560,12559,12561,12562,12558,12558,12563,12564,12565,12554, 12566,12567,12568,12556,12554,12569,12570,12557,12556,12571,12572,12560,12555,12573,12574,12560,12575,12576,12559,12500,12503,12469,12468,12527,12500,12468,12491,12577,12533,12503,12502,12540,12578,12579,12580,12542,12541,12538,12537,12557,12581,12582,12555,12583,12490,12497,12584,12573,12582,12580,12579,12566,12516,12519,12567,12565,12564,12478,12481,12490,12475,12479,12497,12513,12511,12526,12529,12585,12562,12496,12563,12586,12467,12471,12470,12475,12490,12586,12476,12492,12495,12483,12482,12467,12466,12486,12471,12466,12493,12487,12486,12487,12493,12492,12482,12505,12501,12587,12506,12587,12526,12511,12510,12483,12495,12532,12520,12522,12502,12501,12505,12528,12536,12535,12514,12518,12535,12536,12538,12525,12577,12502,12522,12572,12571,12531,12530,12532,12577,12525,12520,12570,12569,12588,12542,12574,12573,12579,12578,12576,12575,12589,12583,12562,12561,12584,12496,12529,12528,12514,12513,12544,12543,12568,12567,12479,12478,12498,12497,12563,12496,12499,12564,12580,12582,12581,12540,12538,12541,12519,12518,12583,12584,12561,12576,12581,12572,12530,12540,12578,12589,12575,12574,12588,12569,12568,12543,12567,12519,12541,12544,12570,12542,12537,12571,12498,12478,12564,12499,12527,12491,12589,12539,12470,12473,12477,12476,12479,12475,12474,12480,12507,12506,12510,12509,12508,12511,12513,12512,12554,12549,12548,12566,12590,12591,12592,12593,12590,12594,12595,12591,12596,12597,12598,12586,12490,12467,12491,12490,12583,12584,12497,12496,12587,12501,12526,12531,12537,12528,12529,12526,12530,12588,12543,12542,12589,12491,12583,12565,12481,12545,12533,12577,12532,12539,12578,12540,12539,12526,12527,12516,12551,12517,12480,12546,12481,12578,12539,12589,12576,12561,12559,12568,12569,12554,12570,12571,12556,12574,12575,12560,12572,12581,12557,12531,12571,12537,12558,12585,12563,12562,12585,12558,12573,12555,12582,12545,12558,12565,12586,12470,12476,12587,12510,12506,12516,12566,12548,12516,12548,12551,12599,12600,12594,12600,12595,12594,12601,12602,12593,12592,12601,12593,12603,12604,12605,12606,12607,12608,12609,12610,12611, 12612,12609,12608,12613,12614,12612,12611,12615,12616,12614,12613,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12625,12628,12630,12631,12629,12630,12632,12633,12631,12632,12634,12635,12633,12634,12636,12637,12638,12639,12640,12641,12642,12643,12638,12641,12644,12645,12642,12644,12646,12647,12645,12646,12648,12649,12647,12615,12650,12651,12616,12652,12618,12653,12636,12648,12654,12655,12649,12656,12657,12658,12659,12656,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12627,12626,12621,12624,12607,12610,12604,12603,12674,12675,12676,12677,12678,12679,12680,12681,12682,12667,12666,12683,12684,12653,12685,12686,12653,12635,12636,12651,12650,12671,12670,12658,12657,12669,12668,12672,12682,12683,12673,12621,12603,12606,12622,12626,12625,12608,12607,12629,12611,12608,12625,12629,12631,12613,12611,12631,12633,12615,12613,12633,12635,12650,12615,12674,12677,12687,12622,12680,12679,12623,12687,12639,12624,12623,12640,12642,12628,12627,12643,12642,12645,12630,12628,12645,12647,12632,12630,12647,12649,12634,12632,12649,12655,12636,12634,12659,12658,12619,12618,12660,12659,12618,12652,12636,12665,12664,12652,12667,12617,12620,12668,12671,12684,12686,12672,12626,12607,12603,12621,12643,12627,12624,12639,12667,12682,12685,12617,12619,12658,12668,12620,12686,12685,12682,12672,12650,12635,12684,12671,12655,12654,12662,12665,12661,12660,12664,12663,12675,12674,12606,12605,12679,12678,12637,12640,12681,12680,12677,12676,12688,12689,12690,12691,12692,12688,12691,12693,12694,12692,12693,12695,12696,12694,12695,12697,12689,12698,12699,12690,12698,12700,12701,12699,12702,12696,12697,12703,12704,12705,12706,12707,12704,12708,12709,12705,12710,12702,12703,12708,12711,12712,12713,12714,12653,12618,12617,12638,12643,12639,12617,12685,12653,12684,12635,12653,12655,12665,12636,12652,12664,12660,12678,12715,12637,12674,12622,12606,12680,12687,12677,12640,12623,12679,12701,12700,12716,12623,12622,12687,12717,12718,12711,12714,12719,12704,12707,12720,12719,12710,12708,12704, 12711,12707,12706,12712,12718,12720,12707,12711,12718,12717,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12729,12728,12731,12732,12730,12731,12733,12734,12732,12733,12735,12736,12737,12738,12739,12740,12741,12742,12743,12744,12745,12746,12744,12747,12748,12745,12747,12749,12750,12748,12749,12751,12752,12750,12751,12753,12754,12752,12742,12755,12740,12756,12757,12758,12759,12760,12759,12761,12762,12760,12762,12763,12764,12764,12763,12765,12766,12766,12765,12767,12768,12734,12735,12769,12770,12771,12737,12772,12754,12768,12767,12773,12774,12775,12776,12777,12778,12775,12779,12780,12776,12781,12782,12783,12784,12785,12786,12787,12788,12789,12790,12791,12792,12742,12741,12743,12746,12726,12722,12725,12727,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12785,12788,12803,12771,12804,12805,12754,12753,12771,12769,12789,12792,12770,12777,12787,12786,12778,12791,12790,12802,12801,12741,12806,12723,12722,12743,12726,12729,12744,12747,12744,12729,12730,12747,12730,12732,12749,12749,12732,12734,12751,12751,12734,12770,12753,12793,12806,12740,12794,12799,12740,12755,12800,12758,12757,12755,12742,12762,12761,12746,12745,12762,12745,12748,12763,12763,12748,12750,12765,12765,12750,12752,12767,12767,12752,12754,12773,12776,12737,12736,12777,12780,12772,12737,12776,12754,12772,12783,12782,12788,12787,12739,12738,12792,12791,12805,12804,12743,12741,12722,12726,12761,12758,12742,12746,12788,12738,12803,12801,12736,12739,12787,12777,12805,12791,12801,12803,12770,12792,12804,12753,12773,12782,12781,12774,12779,12784,12783,12780,12796,12724,12723,12793,12800,12757,12756,12797,12798,12795,12794,12799,12807,12808,12809,12810,12811,12812,12808,12807,12813,12814,12812,12811,12815,12816,12814,12813,12810,12809,12817,12818,12818,12817,12819,12820,12821,12822,12816,12815,12823,12824,12825,12826,12823,12826,12827,12828,12828,12829,12822,12821,12824,12830,12831,12832,12833,12771,12738,12737,12759,12758,12761,12738,12771,12803,12804,12771,12753,12773,12754,12782,12772,12780,12783,12797,12756,12834,12793,12723,12806,12799, 12794,12740,12757,12800,12755,12833,12825,12824,12827,12829,12828,12819,12835,12820,12741,12740,12806,12362,12350,11990,11992,12836,12460,12837,11602,11864,11849,11882,11957,11897,11952,11955,12838,11951,11956,11955,11952,12837,12460,12395,12839,12840,12841,12842,12842,12841,12843,12844,12844,12843,12845,12846,12846,12845,12847,12848,12848,12847,12849,12850,12850,12849,12851,12852,12852,12851,12853,12854,12854,12853,12855,12856,12856,12855,12857,12858,12858,12857,12859,12860,12860,12859,12861,12862,12862,12861,12863,12864,12864,12863,12865,12866,12866,12865,12867,12868,12868,12867,12869,12870,12870,12869,12871,12872,12872,12871,12840,12839,12840,12873,12874,12841,12841,12874,12875,12843,12843,12875,12876,12845,12845,12876,12877,12847,12847,12877,12878,12849,12849,12878,12879,12851,12851,12879,12880,12853,12853,12880,12881,12855,12855,12881,12882,12857,12857,12882,12883,12859,12859,12883,12884,12861,12861,12884,12885,12863,12863,12885,12886,12865,12865,12886,12887,12867,12867,12887,12888,12869,12869,12888,12889,12871,12871,12889,12873,12840,12890,12891,12842,12844,12892,12890,12844,12846,12893,12892,12846,12848,12894,12893,12848,12850,12895,12894,12850,12852,12896,12895,12852,12854,12897,12896,12854,12856,12898,12897,12856,12858,12899,12898,12858,12860,12900,12899,12860,12862,12901,12900,12862,12864,12902,12901,12864,12866,12903,12902,12866,12868,12904,12903,12868,12870,12905,12904,12870,12872,12906,12905,12872,12839,12891,12906,12839,12842,12907,12908,12891,12890,12909,12907,12890,12892,12910,12909,12892,12893,12911,12910,12893,12894,12912,12911,12894,12895,12913,12912,12895,12896,12914,12913,12896,12897,12915,12914,12897,12898,12916,12915,12898,12899,12917,12916,12899,12900,12918,12917,12900,12901,12919,12918,12901,12902,12920,12919,12902,12903,12921,12920,12903,12904,12922,12921,12904,12905,12923,12922,12905,12906,12908,12923,12906,12891,12924,12925,12908,12907,12926,12924,12907,12909,12927,12926,12909,12910,12928,12927,12910,12911,12929,12928,12911,12912,12930,12929,12912,12913,12931,12930,12913,12914,12932,12931, 12914,12915,12933,12932,12915,12916,12934,12933,12916,12917,12935,12934,12917,12918,12936,12935,12918,12919,12937,12936,12919,12920,12938,12937,12920,12921,12939,12938,12921,12922,12940,12939,12922,12923,12925,12940,12923,12908,12925,12924,12941,12942,12924,12926,12943,12941,12926,12927,12944,12943,12927,12928,12945,12944,12928,12929,12946,12945,12929,12930,12947,12946,12930,12931,12948,12947,12931,12932,12949,12948,12932,12933,12950,12949,12933,12934,12951,12950,12934,12935,12952,12951,12935,12936,12953,12952,12936,12937,12954,12953,12937,12938,12955,12954,12938,12939,12956,12955,12939,12940,12957,12956,12940,12925,12942,12957,12958,12874,12873,12958,12875,12874,12958,12876,12875,12958,12877,12876,12958,12878,12877,12958,12879,12878,12958,12880,12879,12958,12881,12880,12958,12882,12881,12958,12883,12882,12958,12884,12883,12958,12885,12884,12958,12886,12885,12958,12887,12886,12958,12888,12887,12958,12889,12888,12958,12873,12889,12959,12960,12961,12962,12963,12964,12960,12959,12965,12966,12964,12963,12967,12968,12966,12965,12969,12970,12968,12967,12971,12972,12970,12969,12973,12974,12972,12971,12975,12976,12974,12973,12977,12978,12976,12975,12979,12980,12978,12977,12981,12982,12980,12979,12983,12984,12982,12981,12985,12986,12984,12983,12987,12988,12986,12985,12989,12990,12988,12987,12991,12992,12990,12989,12962,12961,12992,12991,12960,12993,12994,12961,12964,12995,12993,12960,12966,12996,12995,12964,12968,12997,12996,12966,12970,12998,12997,12968,12972,12999,12998,12970,12974,13000,12999,12972,12976,13001,13000,12974,12978,13002,13001,12976,12980,13003,13002,12978,12982,13004,13003,12980,12984,13005,13004,12982,12986,13006,13005,12984,12988,13007,13006,12986,12990,13008,13007,12988,12992,13009,13008,12990,12961,12994,13009,12992,12963,12959,13010,13011,12965,12963,13011,13012,12967,12965,13012,13013,12969,12967,13013,13014,12971,12969,13014,13015,12973,12971,13015,13016,12975,12973,13016,13017,12977,12975,13017,13018,12979,12977,13018,13019,12981,12979,13019,13020,12983,12981,13020,13021,12985,12983,13021,13022,12987, 12985,13022,13023,12989,12987,13023,13024,12991,12989,13024,13025,12962,12991,13025,13026,12959,12962,13026,13010,13011,13010,13027,13028,13012,13011,13028,13029,13013,13012,13029,13030,13014,13013,13030,13031,13015,13014,13031,13032,13016,13015,13032,13033,13017,13016,13033,13034,13018,13017,13034,13035,13019,13018,13035,13036,13020,13019,13036,13037,13021,13020,13037,13038,13022,13021,13038,13039,13023,13022,13039,13040,13024,13023,13040,13041,13025,13024,13041,13042,13026,13025,13042,13043,13010,13026,13043,13027,13028,13027,13044,13045,13029,13028,13045,13046,13030,13029,13046,13047,13031,13030,13047,13048,13032,13031,13048,13049,13033,13032,13049,13050,13034,13033,13050,13051,13035,13034,13051,13052,13036,13035,13052,13053,13037,13036,13053,13054,13038,13037,13054,13055,13039,13038,13055,13056,13040,13039,13056,13057,13041,13040,13057,13058,13042,13041,13058,13059,13043,13042,13059,13060,13027,13043,13060,13044,13045,13044,13061,13062,13046,13045,13062,13063,13047,13046,13063,13064,13048,13047,13064,13065,13049,13048,13065,13066,13050,13049,13066,13067,13051,13050,13067,13068,13052,13051,13068,13069,13053,13052,13069,13070,13054,13053,13070,13071,13055,13054,13071,13072,13056,13055,13072,13073,13057,13056,13073,13074,13058,13057,13074,13075,13059,13058,13075,13076,13060,13059,13076,13077,13044,13060,13077,13061,12994,12993,13078,12993,12995,13078,12995,12996,13078,12996,12997,13078,12997,12998,13078,12998,12999,13078,12999,13000,13078,13000,13001,13078,13001,13002,13078,13002,13003,13078,13003,13004,13078,13004,13005,13078,13005,13006,13078,13006,13007,13078,13007,13008,13078,13008,13009,13078,13009,12994,13078 } } LayerElementSmoothing: 0 { Version: 102 Name: "" MappingInformationType: "ByEdge" ReferenceInformationType: "Direct" Smoothing: *23455 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } LayerElementMaterial: 0 { Version: 101 Name: "" MappingInformationType: "ByPolygon" ReferenceInformationType: "IndexToDirect" Materials: *12034 { a: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 } } Layer: 0 { Version: 100 LayerElement: { Type: "LayerElementNormal" TypedIndex: 0 } LayerElement: { Type: "LayerElementMaterial" TypedIndex: 0 } LayerElement: { Type: "LayerElementSmoothing" TypedIndex: 0 } LayerElement: { Type: "LayerElementUV" TypedIndex: 0 } } Layer: 1 { Version: 100 LayerElement: { Type: "LayerElementUV" TypedIndex: 1 } } Layer: 2 { Version: 100 LayerElement: { Type: "LayerElementUV" TypedIndex: 2 } } } Model: 125162032, "Model::Camera_Switcher", "CameraSwitcher" { Version: 232 Properties70: { P: "ScalingMin", "Vector3D", "Vector", "",1,1,1 P: "Show", "bool", "", "",0 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Visibility", "Visibility", "", "A+",0 } Shading: W Culling: "CullingOff" } Model: 125296688, "Model::Root", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-89.9999999904458 P: "PreferedAngleY", "double", "Number", "",-89.9999237060538 P: "PreferedAngleZ", "double", "Number", "",-2.38855595932071e-009 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",0.0375633835792542,37.4609870910645,2.230548620224 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-90,-89.9999237060547,-2.38855601963905e-009 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125274112, "Model::Pelvis", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-89.9999182889514 P: "PreferedAngleY", "double", "Number", "",-90 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",-0.77721095085144,1.13318836688995,0.656980156898499 P: "Lcl Rotation", "Lcl Rotation", "", "A+",39.7229881286621,-93.1371078491211,42.0879821777344 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125276368, "Model::Spine", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-0.00023030408276738 P: "PreferedAngleY", "double", "Number", "",-8.60479869898838e-005 P: "PreferedAngleZ", "double", "Number", "",-5.4382885776673 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",3.78600597381592,-0.00359981134533882,5.10731069880421e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-0.00023030408192426,-8.60479849507101e-005,-5.43828868865967 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125278624, "Model::Spine1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.29875981134163e-006 P: "PreferedAngleY", "double", "Number", "",1.85383892660238e-005 P: "PreferedAngleZ", "double", "Number", "",-5.82215760016407 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.54331636428833,-0.00359953427687287,-1.3350340566376e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.96879076957703,-0.549681961536407,-5.84038019180298 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125280880, "Model::Spine2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.3371636415931e-006 P: "PreferedAngleY", "double", "Number", "",-1.36830001373602e-005 P: "PreferedAngleZ", "double", "Number", "",5.69767308131356 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.54404973983765,-0.00359953194856644,6.19496276499376e-008 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.77687907218933,1.67002356052399,5.42585277557373 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125692096, "Model::Spine3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",3.99052131175995 P: "PreferedAngleY", "double", "Number", "",-1.53253420069814 P: "PreferedAngleZ", "double", "Number", "",1.57506291940808 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.5439600944519,-0.00439895549789071,2.22052122467176e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.87556838989258,1.50368475914001,3.25706577301025 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1.00000011920929,1.00000011920929,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125694352, "Model::Neck", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.42603327943234e-005 P: "PreferedAngleY", "double", "Number", "",-6.31973890607551e-005 P: "PreferedAngleZ", "double", "Number", "",23.7369222277942 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",5.53625154495239,-0.00288246641866863,5.17475982064752e-008 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-6.63933753967285,1.94592773914337,28.7092266082764 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125673632, "Model::Head", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.80670942133362e-006 P: "PreferedAngleY", "double", "Number", "",2.70945409552123e-005 P: "PreferedAngleZ", "double", "Number", "",-11.0992757151363 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",3.95389556884766,1.09085840449552e-006,9.73389049363504e-008 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.423987865448,-0.918177843093872,-18.9311122894287 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1.00000011920929,1.00000011920929,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125726848, "Model::L_eye_joint1", "LimbNode" { Version: 232 Properties70: { P: "PreRotation", "Vector3D", "Vector", "",90.0000000000006,-87.3750626410931,-90.0000000000003 P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.22069501876831,1.4060525894165,1.39484596252441 P: "Lcl Rotation", "Lcl Rotation", "", "A+",3.26757836341858,0,0 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125715248, "Model::R_eye_joint", "LimbNode" { Version: 232 Properties70: { P: "PreRotation", "Vector3D", "Vector", "",90.0000000000006,-87.3750626410931,-90.0000000000003 P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.29626369476318,1.33319282531738,-1.0660924911499 P: "Lcl Rotation", "Lcl Rotation", "", "A+",3.26757836341858,0,0 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125722208, "Model::L_eyeBall_joint2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-3.26721592629767 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.48259973526001,3.2479395866394,1.27459120750427 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.07939505577087,0,0.00536951329559088 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125703648, "Model::R_eyeBall_joint", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",2.2266900494759 P: "PreferedAngleY", "double", "Number", "",0.205056910357676 P: "PreferedAngleZ", "double", "Number", "",0.964814224310023 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.57700967788696,3.10706281661987,-1.20767879486084 P: "Lcl Rotation", "Lcl Rotation", "", "A+",0.292065471410751,0.0640802830457687,0.30150443315506 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125724528, "Model::L_Clavicle", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-0.000872600236291507 P: "PreferedAngleY", "double", "Number", "",-80.3013114262034 P: "PreferedAngleZ", "double", "Number", "",156.218311991058 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",-0.307961851358414,-0.770594537258148,1.2232973575592 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-0.000872600241564214,-80.3013076782227,156.218307495117 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125705968, "Model::L_UpperArm", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.39497982725312 P: "PreferedAngleY", "double", "Number", "",36.3728195804967 P: "PreferedAngleZ", "double", "Number", "",-4.78353474107178 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",6.71029043197632,0.844819128513336,0.0320546366274357 P: "Lcl Rotation", "Lcl Rotation", "", "A+",9.80766296386719,60.3215827941895,41.7058372497559 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125710608, "Model::L_Forearm", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-3.76045443581529e-007 P: "PreferedAngleY", "double", "Number", "",-3.86569406254761e-006 P: "PreferedAngleZ", "double", "Number", "",-11.4591582981105 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",13.1421842575073,-1.00144292858317e-009,-3.49096410445782e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",33.6098442077637,17.2327537536621,-13.2919816970825 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125708288, "Model::L_Hand", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-74.7089589483892 P: "PreferedAngleY", "double", "Number", "",10.2784385710031 P: "PreferedAngleZ", "double", "Number", "",2.78414734150109 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",10.8255519866943,5.22714969974913e-007,9.90214175544679e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-82.1016998291016,2.46786618232727,3.1264545917511 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125712928, "Model::L_Thumb1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",128.393568534218 P: "PreferedAngleY", "double", "Number", "",47.8535790896764 P: "PreferedAngleZ", "double", "Number", "",34.2815344649445 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.62510848045349,0.626630425453186,-1.67875993251801 P: "Lcl Rotation", "Lcl Rotation", "", "A+",119.229835510254,30.9591827392578,19.9485893249512 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125717568, "Model::L_Thumb2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",2.8803815967782e-006 P: "PreferedAngleY", "double", "Number", "",8.18135633512738e-007 P: "PreferedAngleZ", "double", "Number", "",7.98321386697265 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.1404322385788,2.85936584987212e-006,-1.81425923528877e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.84072734757501e-006,-3.12636920796194e-008,17.8534507751465 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125696688, "Model::L_Thumb3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-6.67931703646524e-006 P: "PreferedAngleY", "double", "Number", "",-4.97463347454225e-006 P: "PreferedAngleZ", "double", "Number", "",-1.12265664696339 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.38246870040894,-7.17560169505305e-007,3.67166808246111e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-7.58698934077984e-006,-3.2017899229686e-006,8.96595764160156 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,1,1.00000011920929 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125719888, "Model::L_Index1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",11.7792021726967 P: "PreferedAngleY", "double", "Number", "",4.75915906885796 P: "PreferedAngleZ", "double", "Number", "",1.51887475710425 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.34874391555786,0.0162533205002546,-1.56133377552032 P: "Lcl Rotation", "Lcl Rotation", "", "A+",12.0142822265625,1.66459441184998,3.92592287063599 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125699008, "Model::L_Index2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.0101348006507e-006 P: "PreferedAngleY", "double", "Number", "",-3.20933633655466e-006 P: "PreferedAngleZ", "double", "Number", "",10.2647182459575 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.47369563579559,9.02053685081228e-008,5.82350480726745e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",7.5388690845557e-008,-3.20740196002589e-006,15.1926651000977 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125701328, "Model::L_Index3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-7.97497089828841e-007 P: "PreferedAngleY", "double", "Number", "",7.67177259619785e-007 P: "PreferedAngleZ", "double", "Number", "",-6.41338018883955e-008 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.06284534931183,1.39810509836025e-007,2.21882010009722e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-7.97497079929599e-007,7.67177255056595e-007,-6.41338004925274e-008 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125835120, "Model::L_Middle1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.09189139401105 P: "PreferedAngleY", "double", "Number", "",-5.64785295314554 P: "PreferedAngleZ", "double", "Number", "",-1.21502703506741 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.35998678207397,-0.000294537370791659,-0.366859555244446 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.96983647346497,1.10134339332581,14.2388792037964 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125839760, "Model::L_Middle2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.61159378098832e-006 P: "PreferedAngleY", "double", "Number", "",4.23584160161545e-006 P: "PreferedAngleZ", "double", "Number", "",5.06606087060092 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.52912437915802,7.80884704454365e-007,-3.64346448122888e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",7.24273192531655e-008,4.3645964069583e-006,16.150936126709 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125851360, "Model::L_Middle3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",3.09046105578622e-006 P: "PreferedAngleY", "double", "Number", "",-2.70938072856318e-006 P: "PreferedAngleZ", "double", "Number", "",3.80611905636409 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.52912795543671,7.2803447892511e-007,6.76120862408425e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",3.09046095026133e-006,-2.7093806238554e-006,3.80611896514893 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125844400, "Model::L_Ring1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-8.32501905474155 P: "PreferedAngleY", "double", "Number", "",-15.1597389826992 P: "PreferedAngleZ", "double", "Number", "",0.496591029077497 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.29501485824585,-0.0947425812482834,0.806466221809387 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-8.98741436004639,-1.27314984798431,19.2985076904297 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125837440, "Model::L_Ring2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",2.17552682211658e-006 P: "PreferedAngleY", "double", "Number", "",1.24628739924695e-006 P: "PreferedAngleZ", "double", "Number", "",12.8944029645258 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.40333545207977,1.16687704121432e-006,-2.30216258501059e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.20680271922902e-006,-3.11167731581463e-008,25.5660648345947 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1.00000011920929,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125853680, "Model::L_Ring3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",6.3264375956501e-007 P: "PreferedAngleY", "double", "Number", "",-2.06977911624494e-007 P: "PreferedAngleZ", "double", "Number", "",-5.6513995325555e-007 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.38826143741608,2.13072965493666e-007,-2.23952710598496e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",0,0,9.02113819122314 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125828160, "Model::L_Pinky1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-22.2106470375889 P: "PreferedAngleY", "double", "Number", "",-21.9198516462821 P: "PreferedAngleZ", "double", "Number", "",10.231888820637 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",3.97267842292786,0.223487868905067,1.74283754825592 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-20.6544322967529,-0.819446563720703,22.4568309783936 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125856000, "Model::L_Pinky2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",8.45328125392068e-008 P: "PreferedAngleY", "double", "Number", "",3.2706221696275e-007 P: "PreferedAngleZ", "double", "Number", "",6.57202492051798e-007 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.13179302215576,-2.16195689972665e-006,-4.03594668796359e-008 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125849040, "Model::L_Pinky3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-2.659446426981e-006 P: "PreferedAngleY", "double", "Number", "",2.5977229425773e-006 P: "PreferedAngleZ", "double", "Number", "",3.8703228612241 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",0.858954668045044,6.74906289077626e-007,5.44045349215594e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-2.65944640887028e-006,2.59772286881343e-006,3.87032294273376 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125842080, "Model::R_Clavicle", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-0.000867775408281365 P: "PreferedAngleY", "double", "Number", "",80.301183832827 P: "PreferedAngleZ", "double", "Number", "",156.216597244916 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",-0.307961821556091,-0.770587801933289,-1.22330164909363 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-0.000867775408551097,80.3011856079102,156.216598510742 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125846720, "Model::R_UpperArm", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.39497769642051 P: "PreferedAngleY", "double", "Number", "",-36.3728176590539 P: "PreferedAngleZ", "double", "Number", "",-4.78354389051472 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",6.88650560379028,-1.05879163742065,0.188849896192551 P: "Lcl Rotation", "Lcl Rotation", "", "A+",42.592903137207,-47.3313064575195,-50.2629508972168 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,1.00000011920929,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125832800, "Model::R_Forearm", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-6.59389332229243e-007 P: "PreferedAngleY", "double", "Number", "",5.71812264881479e-006 P: "PreferedAngleZ", "double", "Number", "",-11.4591561379041 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",13.1421842575073,9.03095610738092e-007,3.16086266138882e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-31.568567276001,-28.5609245300293,-47.7509155273438 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,0.99999988079071,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125825840, "Model::R_Hand", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",74.7089619068957 P: "PreferedAngleY", "double", "Number", "",-10.2784422770857 P: "PreferedAngleZ", "double", "Number", "",2.78414911050139 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",10.8255529403687,4.45484261035745e-007,-7.54761458665598e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",71.1884765625,10.1721467971802,-14.7731218338013 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125858320, "Model::R_Thumb1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-128.393572194366 P: "PreferedAngleY", "double", "Number", "",-47.853581034479 P: "PreferedAngleZ", "double", "Number", "",34.2815348083318 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.62510800361633,0.626631021499634,1.67876040935516 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-129.154998779297,-42.0322799682617,34.3628196716309 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125830480, "Model::R_Thumb2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",3.88347917343395e-006 P: "PreferedAngleY", "double", "Number", "",-1.97078280763548e-006 P: "PreferedAngleZ", "double", "Number", "",7.98321879290525 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.14043200016022,-1.38291397888679e-006,7.55724443024519e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",2.74146850642865e-006,-3.38374729835778e-006,32.0624504089355 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125872240, "Model::R_Thumb3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-7.46143268686555e-006 P: "PreferedAngleY", "double", "Number", "",2.29402027731357e-006 P: "PreferedAngleZ", "double", "Number", "",-1.12266273488597 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.38246870040894,3.77754112435014e-008,-3.12997121909575e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-7.38412791179144e-006,2.46886565946625e-006,2.01478266716003 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125888480, "Model::R_Index1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-11.7792032350658 P: "PreferedAngleY", "double", "Number", "",-4.75915740397456 P: "PreferedAngleZ", "double", "Number", "",1.51887260858435 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.34874391555786,0.0162522289901972,1.56133341789246 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-11.8456792831421,-2.26736164093018,0.35604390501976 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125862960, "Model::R_Index2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",3.27682771579138e-006 P: "PreferedAngleY", "double", "Number", "",2.52179167280701e-006 P: "PreferedAngleZ", "double", "Number", "",10.2647245704775 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.47369468212128,-3.31795149577374e-006,3.01659298429513e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",3.5970981571154e-006,2.03909712581662e-006,18.2982807159424 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125879200, "Model::R_Index3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",5.68755212474489e-006 P: "PreferedAngleY", "double", "Number", "",2.55623109709803e-006 P: "PreferedAngleZ", "double", "Number", "",1.61946557729347e-006 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.0628467798233,-7.71003385580116e-008,-3.79914951054161e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",6.12122676102445e-006,1.18875880161795e-006,13.211012840271 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125886160, "Model::R_Middle1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-1.09189337444105 P: "PreferedAngleY", "double", "Number", "",5.64785242253659 P: "PreferedAngleZ", "double", "Number", "",-1.21502939388877 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.35998678207397,-0.000293526856694371,0.366859257221222 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-1.12324810028076,-1.13205850124359,1.1130610704422 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125869920, "Model::R_Middle2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",3.91460541234184e-006 P: "PreferedAngleY", "double", "Number", "",-2.17455420940842e-006 P: "PreferedAngleZ", "double", "Number", "",5.06606374698867 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.52912306785584,-3.33934121954371e-006,2.41871944695049e-009 P: "Lcl Rotation", "Lcl Rotation", "", "A+",3.29875911120325e-006,-3.02836747323454e-006,18.566930770874 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125860640, "Model::R_Middle3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-4.89582237110179e-006 P: "PreferedAngleY", "double", "Number", "",-2.26155480670848e-006 P: "PreferedAngleZ", "double", "Number", "",3.80612416233277 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.529128074646,-1.97209737962112e-006,-3.19399333648107e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-5.25195036971127e-006,-6.89941970222208e-008,3.59999227523804 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125874560, "Model::R_Ring1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",8.32501542851292 P: "PreferedAngleY", "double", "Number", "",15.1597406151334 P: "PreferedAngleZ", "double", "Number", "",0.496593364447639 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",4.29501342773438,-0.0947411805391312,-0.806465566158295 P: "Lcl Rotation", "Lcl Rotation", "", "A+",9.92037773132324,6.50482177734375,12.5329875946045 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125865280, "Model::R_Ring2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",4.74502253458847e-007 P: "PreferedAngleY", "double", "Number", "",-1.57078862698148e-006 P: "PreferedAngleZ", "double", "Number", "",12.8944025426958 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.40333533287048,3.56238683707488e-006,8.68510085183516e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-8.52487929137169e-008,-1.5643117876607e-006,27.2881908416748 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125867600, "Model::R_Ring3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.74365380799692e-006 P: "PreferedAngleY", "double", "Number", "",4.92222297413111e-007 P: "PreferedAngleZ", "double", "Number", "",-1.86127542097727e-006 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.38826143741608,-2.60250772043946e-007,1.2035725660553e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.73695445937483e-006,-8.55293436075044e-009,13.044979095459 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125876880, "Model::R_Pinky1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",22.2106452758657 P: "PreferedAngleY", "double", "Number", "",21.9198533236593 P: "PreferedAngleZ", "double", "Number", "",10.2318915977067 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",3.97267866134644,0.223486974835396,-1.74283790588379 P: "Lcl Rotation", "Lcl Rotation", "", "A+",24.3684997558594,5.07718563079834,23.8567218780518 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125881520, "Model::R_Pinky2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.3099773394975e-006 P: "PreferedAngleY", "double", "Number", "",-1.5017060650038e-007 P: "PreferedAngleZ", "double", "Number", "",3.9733668460521e-006 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",1.13179266452789,-4.5721540118393e-006,-2.5465004682701e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.28670376398077e-006,2.94697493075091e-008,21.8681793212891 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 125883840, "Model::R_Pinky3", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",4.46392401207693e-007 P: "PreferedAngleY", "double", "Number", "",1.49685980438668e-008 P: "PreferedAngleZ", "double", "Number", "",3.87032088256291 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",0.858952879905701,-2.68376516032731e-006,3.09315595359294e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",0,0,5.75897359848022 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,1,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126220272, "Model::L_Thigh1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",169.508247139113 P: "PreferedAngleY", "double", "Number", "",-12.1801615973901 P: "PreferedAngleZ", "double", "Number", "",-178.43746737346 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",-3.76930594444275,-0.355237752199173,3.4951446056366 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-14.2042036056519,-164.144622802734,-29.484790802002 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126222592, "Model::L_Knee2", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",6.26299260320172e-007 P: "PreferedAngleY", "double", "Number", "",-6.93163629204283e-006 P: "PreferedAngleZ", "double", "Number", "",-19.1493676500597 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",18.257194519043,-6.12689859735838e-007,1.20223648991669e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",9.30474472045898,-0.54519647359848,-24.0315208435059 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126194752, "Model::L_Ankle1", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",-2.97471392034351 P: "PreferedAngleY", "double", "Number", "",-11.0525243817621 P: "PreferedAngleZ", "double", "Number", "",9.40468519858122 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",15.4280042648315,-1.32429221366692e-007,3.40772317031224e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-4.13260126113892,-1.2486013174057,7.7121057510376 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,0.999999940395355,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126197072, "Model::L_Ball", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",5.08524009745423e-006 P: "PreferedAngleY", "double", "Number", "",-3.36317562607059e-006 P: "PreferedAngleZ", "double", "Number", "",104.594670846427 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",5.25022077560425,6.27384853363037,-7.13063798229996e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",5.08523999087629e-006,-3.36317566507205e-006,104.594673156738 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,1.00000011920929,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126227232, "Model::R_Thigh", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",10.4914172002596 P: "PreferedAngleY", "double", "Number", "",167.819835977802 P: "PreferedAngleZ", "double", "Number", "",1.56246131877261 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",-3.76930618286133,-0.355218410491943,-3.49514603614807 P: "Lcl Rotation", "Lcl Rotation", "", "A+",8.09784317016602,184.387466430664,0.917054355144501 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126224912, "Model::R_Knee", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",1.31859940773703e-007 P: "PreferedAngleY", "double", "Number", "",-1.18581000243473e-006 P: "PreferedAngleZ", "double", "Number", "",-19.1493656223787 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",18.257194519043,-1.20693221106194e-006,-1.28146643874061e-006 P: "Lcl Rotation", "Lcl Rotation", "", "A+",-1.3035603761673,-4.911376953125,-31.2710037231445 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126229552, "Model::R_Ankle", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",2.97472568209434 P: "PreferedAngleY", "double", "Number", "",11.0525220726222 P: "PreferedAngleZ", "double", "Number", "",9.40468503315529 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",15.4280042648315,1.89655921190024e-007,5.16880504619621e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",4.14072751998901,1.20476734638214,25.1047039031982 P: "Lcl Scaling", "Lcl Scaling", "", "A+",0.999999940395355,0.999999940395355,0.999999940395355 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126199392, "Model::R_Ball", "LimbNode" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "PreferedAngleX", "double", "Number", "",2.16954839938349e-006 P: "PreferedAngleY", "double", "Number", "",9.48114901020568e-008 P: "PreferedAngleZ", "double", "Number", "",104.594670599531 P: "DefaultAttributeIndex", "int", "Integer", "",0 P: "Lcl Translation", "Lcl Translation", "", "A+",5.25022077560425,6.27385330200195,-4.15015392718487e-007 P: "Lcl Rotation", "Lcl Rotation", "", "A+",1.04748585272318e-006,-3.46426012876044e-011,104.594665527344 P: "Lcl Scaling", "Lcl Scaling", "", "A+",1,1.00000011920929,1 P: "liw", "Bool", "", "A+U",0 } Shading: Y Culling: "CullingOff" } Model: 126231872, "Model::him", "Mesh" { Version: 232 Properties70: { P: "RotationActive", "bool", "", "",1 P: "InheritType", "enum", "", "",1 P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 P: "DefaultAttributeIndex", "int", "Integer", "",0 } Shading: T Culling: "CullingOff" } Pose: 130877536, "Pose::skinCluster3", "BindPose" { Type: "BindPose" Version: 100 NbPoseNodes: 59 PoseNode: { Node: 126231872 Matrix: *16 { a: 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 } } PoseNode: { Node: 125296688 Matrix: *16 { a: 1.33158055981697e-006,-5.5511151231309e-017,1.00000000000003,0,1,1.66752833763587e-010,-1.33158055981693e-006,0,-1.66752944785748e-010,1.00000000000004,2.22044604925039e-016,0,0.0375633844953955,37.4609861130865,2.23054871115166,1 } } PoseNode: { Node: 125274112 Matrix: *16 { a: -1.66752944785752e-010,1.00000000000094,3.33066907387862e-016,0,2.75770739245021e-006,-3.97450655096411e-017,1.00000000000003,0,1.00000000000091,1.66752833764135e-010,-2.75770739256375e-006,0,0.0375620733105228,37.4609888630758,1.27468111719239,1 } } PoseNode: { Node: 125276368 Matrix: *16 { a: 1.24029684198113e-006,0.995498838507049,-0.0947735868260166,0,-1.27428576289917e-006,0.0947735868271358,0.995498838507889,0,0.999999999999406,-1.1139454664704e-006,1.38609741848246e-006,0,0.0375671700624984,41.2469948552468,1.27108130580428,1 } } PoseNode: { Node: 125278624 Matrix: *16 { a: 1.03960780457953e-006,0.98074971266116,-0.19526913922047,0,-1.1645631082995e-006,0.195269139221088,0.980749712661819,0,0.999999999999837,-7.92191801362473e-007,1.34514820815766e-006,0,0.0375726762066018,45.7695196641318,0.836911606169505,1 } } PoseNode: { Node: 126220272 Matrix: *16 { a: 0.210985191505916,-0.975253732219803,0.0660718325861944,0,0.177993635259534,0.104794326230727,0.978435668241952,0,-0.961146957227345,-0.194675058661601,0.195698995513005,0,3.5327074628724,37.4609841497582,1.27467801962757,1 } } PoseNode: { Node: 126227232 Matrix: *16 { a: -0.210987587098956,-0.975253163175659,0.0660724603122853,0,-0.177990489435915,0.104794812011874,0.97843623227106,0,-0.961147083401435,0.194677624807938,-0.195696186916594,0,-3.45758308113989,37.4609935763943,1.27468759391711,1 } } PoseNode: { Node: 125280880 Matrix: *16 { a: 1.15766800847204e-006,0.995290550202889,-0.0969362439528012,0,-1.28535910910391e-006,0.0969362439538238,0.995290550203612,0,0.999999999999517,-1.02761825064411e-006,1.3915258848223e-006,0,0.0375774663776998,50.2253922781078,-0.0539313180359257,1 } } PoseNode: { Node: 126222592 Matrix: *16 { a: 0.140922950790799,-0.955665576234115,-0.258542307170597,0,0.237354544212354,-0.220918711872771,0.945969229345032,0,-0.961146961126678,-0.194674940381941,0.195699024114051,0,7.38470396372674,19.6555865808851,2.48096457007616,1 } } PoseNode: { Node: 126224912 Matrix: *16 { a: -0.140926372210181,-0.955665194315514,-0.258541892648224,0,-0.23735235663778,-0.220918035591436,0.945969990525419,0,-0.961147085585364,0.194677625250286,-0.195696187361257,0,-7.30962477938486,19.6556065018375,2.48098499916812,1 } } PoseNode: { Node: 125692096 Matrix: *16 { a: 0.0267457025467083,0.997222184485877,-0.0695175881175487,0,0.0695652398894222,0.0675171408584094,0.99529002121809,0,0.997218805426799,-0.0314557323172693,-0.067566193734535,0,0.037582954481531,54.7475266033293,-0.498784000447107,1 } } PoseNode: { Node: 126194752 Matrix: *16 { a: -0.00974436259181705,-0.998083556732566,-0.0611084168461832,0,0.261574774854858,-0.0615276811691846,0.963220090472259,0,-0.965134004335868,-0.00659841591207144,0.261673027918648,0,9.55886480195558,4.91157385166946,-1.50782703524102,1 } } PoseNode: { Node: 126229552 Matrix: *16 { a: 0.00974138551962694,-0.998083577574783,-0.0611084475807566,0,-0.26157229002768,-0.0615269335133899,0.963220845632343,0,-0.965134744120757,0.00660116199430494,-0.261670363784603,0,-9.48383716527764,4.91159968219961,-1.50780021776383,1 } } PoseNode: { Node: 125694352 Matrix: *16 { a: 0.0524868392889062,0.940038670507985,0.337005085889192,0,0.0529138494736022,-0.339614137295755,0.939075268843438,0,0.997218760704303,-0.0314568537088636,-0.0675663317258446,0,0.185453422192648,60.2682047905477,-0.886519744810882,1 } } PoseNode: { Node: 126197072 Matrix: *16 { a: 0.255589775823783,0.19195411195591,0.947537621302088,0,-0.0564815951498304,0.981381805094744,-0.183574958091845,0,-0.965134008856972,-0.00659851424383035,0.261672987109975,0,11.1487853847708,-0.714600338285195,4.21443710294172,1 } } PoseNode: { Node: 126199392 Matrix: *16 { a: -0.25558666067715,0.191954823954638,0.947538281383767,0,0.0564837267618767,0.981381639119508,-0.183575147793249,0,-0.965134739912784,0.00660112479013478,-0.261670355112633,0,-11.0737572844988,-0.714570040351037,4.21446814199767,1 } } PoseNode: { Node: 125673632 Matrix: *16 { a: 0.0413181877665486,0.987834399898251,0.149920513802912,0,0.062028292927883,-0.152295266367851,0.986386738366224,0,0.99721878219907,-0.0314563913752569,-0.067566229726332,0,0.392981060570839,63.9850191920975,0.445964203562684,1 } } PoseNode: { Node: 125724528 Matrix: *16 { a: 0.978469078551498,-0.19899715238426,-0.0547582098290914,0,-0.069589287242088,-0.0683111384044164,-0.995234104790114,0,0.194308156552106,0.977616366684517,-0.0806884043782442,0,1.34840940139458,60.2019324480378,-1.79660442619341,1 } } PoseNode: { Node: 125842080 Matrix: *16 { a: -0.987461923011747,-0.13698449419504,0.0784481919759329,0,-0.0695892727841481,-0.0683111257247411,-0.995234106778274,0,0.141690531380276,-0.988214994757188,0.0579219885650571,0,-1.09138459344411,60.2788924913577,-1.63129036253243,1 } } PoseNode: { Node: 125726848 Matrix: *16 { a: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,2.04555419810496,67.8963551483937,2.37140015218962,1 } } PoseNode: { Node: 125715248 Matrix: *16 { a: 0.99333167408321,-0.0244486008617004,-0.112669652304996,0,0.107633609793549,-0.153576100459397,0.98225737079121,0,-0.0413181877665494,-0.98783439989825,-0.149920513802916,0,-0.409936873234029,68.0595129473661,2.4771378649045,1 } } PoseNode: { Node: 125722208 Matrix: *16 { a: 0.0413367875848507,0.987788683622589,0.150216314763167,0,0.124663367302492,-0.154268945761706,0.980132793135531,0,0.991337639848011,-0.0217890619226689,-0.129518029951179,0,2.05070439627867,67.878345659435,4.23560315393477,1 } } PoseNode: { Node: 125703648 Matrix: *16 { a: 0.0387875582448076,0.985236212535225,0.166749169520768,0,0.100028336113103,-0.1698648688521,0.980377689145253,0,0.994228272900296,-0.0213468072050495,-0.105140166318426,0,-0.429499383170284,68.0711452108758,4.27851568464557,1 } } PoseNode: { Node: 125705968 Matrix: *16 { a: 0.674535534616324,-0.734845412587802,0.0707395700590386,0,-0.00572428097575982,-0.101024952776188,-0.994867403846182,0,0.738220225503697,0.670668478827922,-0.0723513795484483,0,8.04491907067728,58.8400224990099,-2.17136220574529,1 } } PoseNode: { Node: 125846720 Matrix: *16 { a: -0.703610256733915,-0.691373653145981,0.164119291692498,0,-0.1347478692944,-0.0969550739362427,-0.986125182940114,0,0.697693056382247,-0.715962484913526,-0.0249425301025703,0,-7.84944071573371,59.3413887525868,-1.09440146152723,1 } } PoseNode: { Node: 125710608 Matrix: *16 { a: 0.662227001235097,-0.700126797308046,0.266979158818587,0,0.128399382035873,-0.245002469789134,-0.960982554234246,0,0.738220180823852,0.670668526064849,-0.0723513975612902,0,16.9097893109037,49.1825482190907,-1.24168969306059,1 } } PoseNode: { Node: 125832800 Matrix: *16 { a: -0.662814701550135,-0.65833014375124,0.356760672082372,0,-0.271847634986037,-0.232377145821934,-0.933862759981466,0,0.697692990233294,-0.715962550614917,-0.0249424944978314,0,-17.0964154474492,50.2552282683214,1.06248452295354,1 } } PoseNode: { Node: 125708288 Matrix: *16 { a: 0.525245261158389,-0.819456511598867,0.229365340473718,0,-0.790238340982239,-0.569703536988409,-0.225746104342684,0,0.315659364239265,-0.0626812373747693,-0.946800025542229,0,24.0787631140926,41.6032895272955,1.6485065671716,1 } } PoseNode: { Node: 125825840 Matrix: *16 { a: -0.539910124506363,-0.785857706458226,0.301537587819719,0,0.715295250733165,-0.617193555619553,-0.327757250060974,0,0.443677562763431,0.0387289149319088,0.895349262736555,0,-24.2717529148383,43.1284417167981,4.92461529417918,1 } } PoseNode: { Node: 125712928 Matrix: *16 { a: -0.241495132730921,-0.623205901261989,0.74383772606254,0,0.74882388880975,-0.60721234791625,-0.265623820790119,0,0.61720575088779,0.492856585321279,0.613310267810766,0,23.907239967734,40.0198169594799,3.46924073788322,1 } } PoseNode: { Node: 125719888 Matrix: *16 { a: 0.476186922188061,-0.826192452107739,0.30108482700071,0,-0.714199475385093,-0.563128923203692,-0.415698178519829,0,0.512996263158813,-0.0170846090838862,-0.858220820124501,0,25.8572264968031,38.1282899455549,4.12055942809326,1 } } PoseNode: { Node: 125835120 Matrix: *16 { a: 0.570318660983103,-0.809442163568181,0.13978575995208,0,-0.773811834783023,-0.586520001785938,-0.239185251125484,0,0.275593789834533,0.0282439112719806,-0.960859260283435,0,26.2532517128633,38.0536303136344,2.99594441017406,1 } } PoseNode: { Node: 125844400 Matrix: *16 { a: 0.58288563544361,-0.812067739772282,-0.0281118678441426,0,-0.810871911031163,-0.579105536366181,-0.0844006630517097,0,0.0522593310342686,0.0719910332368333,-0.996035291673013,0,26.6641372400988,38.0871363638132,1.89145970528058,1 } } PoseNode: { Node: 125828160 Matrix: *16 { a: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,26.5389279380321,38.1112872763109,0.859131146820495,1 } } PoseNode: { Node: 125858320 Matrix: *16 { a: 0.299955264051308,-0.640285298618272,0.707150444388401,0,-0.814394997426312,-0.557902711924946,-0.159703974445855,0,0.496777192390993,-0.527995676382642,-0.688790919898989,0,-23.9561106277145,41.5296020162524,6.71234048568143,1 } } PoseNode: { Node: 125888480 Matrix: *16 { a: -0.482154356012774,-0.795962880036411,0.366019579093359,0,0.614915285773909,-0.605054061971992,-0.505755637789783,0,0.624024310384197,-0.0187812660351121,0.781179170712812,0,-25.9153301313679,39.7613856649882,7.62853698134705,1 } } PoseNode: { Node: 125886160 Matrix: *16 { a: -0.595926399395956,-0.772654529636261,0.21880759560448,0,0.696185127521994,-0.632889114944885,-0.338788554082281,0,0.400247429545363,-0.0495624932684929,0.91506592530629,0,-26.463194722499,39.7164998561171,6.56787767402416,1 } } PoseNode: { Node: 125874560 Matrix: *16 { a: -0.631144710533568,-0.773772868523889,0.0541477347483783,0,0.754157767297867,-0.62847227279389,-0.190443192019585,0,0.181390093764703,-0.0793613433479259,0.980203763672088,0,-27.0162528423477,39.7804122897328,5.52870707356913,1 } } PoseNode: { Node: 125876880 Matrix: *16 { a: -0.540667622835062,-0.833617327916268,-0.112963789652428,0,0.839021778202407,-0.544097550461574,-0.000555890927663861,0,-0.0609999443314432,-0.0950797095804421,0.993598968834152,0,-27.0300412701334,39.8010486385352,4.4888290833198,1 } } PoseNode: { Node: 125717568 Matrix: *16 { a: -0.135155863907165,-0.701497726806397,0.699738402577797,0,0.775106460820417,-0.51477500599991,-0.366355962170193,0,0.617205698961515,0.492856600851178,0.61331027335005,0,23.6318315714115,39.3090915103631,4.31753622028422,1 } } PoseNode: { Node: 125699008 Matrix: *16 { a: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.5589812285729,36.910733644079,4.56426645349348,1 } } PoseNode: { Node: 125839760 Matrix: *16 { a: 0.499759799299395,-0.858072301605573,0.118118678235241,0,-0.821150580980059,-0.512751598060226,-0.250594545036832,0,0.2755938001527,0.0282438330507944,-0.960859246286125,0,27.1253418110482,36.8158938867169,3.20969391712155,1 } } PoseNode: { Node: 125837440 Matrix: *16 { a: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,27.4821214428528,36.9475330246914,1.85200927333924,1 } } PoseNode: { Node: 125856000 Matrix: *16 { a: 0.467138990032661,-0.86540714932335,-0.1812501889475,0,-0.863910088514665,-0.490380893925407,0.114830513043787,0,-0.188256761855405,0.102942021367097,-0.976709968746014,0,27.0676322099866,37.1318253052027,0.653993696506666,1 } } PoseNode: { Node: 125830480 Matrix: *16 { a: 0.183942672645697,-0.711563369205016,0.678117059737729,0,-0.848161196618615,-0.463571215689533,-0.256367513175262,0,0.496777269596991,-0.52799564816841,-0.68879096195946,0,-23.6140335044233,40.7993987668532,7.51879688568199,1 } } PoseNode: { Node: 125862960 Matrix: *16 { a: -0.364861769159626,-0.891041931293543,0.270037532993132,0,0.690991774155602,-0.45353240699875,-0.562884345430602,0,0.624024271802067,-0.0187812798263943,0.78117923606601,0,-26.6258774379163,38.588378479262,8.16793742758162,1 } } PoseNode: { Node: 125869920 Matrix: *16 { a: -0.532122282112629,-0.825523064728124,0.188036378951055,0,0.746088418575545,-0.562188027154702,-0.356786686762729,0,0.400247390778701,-0.0495624225379808,0.915065924284819,0,-27.3744398996367,38.5350163451575,6.902461468954,1 } } PoseNode: { Node: 125865280 Matrix: *16 { a: -0.446935139950889,-0.894507302286969,0.0102839893074999,0,0.875983248722551,-0.439952916617308,-0.197724129284052,0,0.181390106308193,-0.0793613189517498,0.98020376496034,0,-27.9019606689573,38.6945496193369,5.60469461416785,1 } } PoseNode: { Node: 125881520 Matrix: *16 { a: -0.5406675646503,-0.833617365648527,-0.112963789690979,0,0.839021814302138,-0.544097494825449,-0.000555860376745012,0,-0.0609999635143494,-0.0950796971405138,0.993598968846862,0,-27.6419641277959,38.8575661966203,4.36097765072208,1 } } PoseNode: { Node: 125696688 Matrix: *16 { a: -0.150316369043588,-0.691277124434889,0.706782057371717,0,0.772309497099311,-0.528420538698419,-0.352575863363785,0,0.61720584336029,0.492856632260411,0.613310211936847,0,23.4449809601311,38.3392942259419,5.2849036370461,1 } } PoseNode: { Node: 125701328 Matrix: *16 { a: 0.341297822230993,-0.913316665732874,0.222190005900152,0,-0.787623428108624,-0.406891557875956,-0.462697112986676,0,0.512996245106644,-0.0170845579613056,-0.858220834352026,0,26.9217272116612,35.9400189097872,4.80042005026002,1 } } PoseNode: { Node: 125851360 Matrix: *16 { a: 0.444149191605448,-0.890216436988675,0.101223529453903,0,-0.85251369302479,-0.454661417782185,-0.257882648909561,0,0.275593828665205,0.0282439000328089,-0.960859249476387,0,27.8895391841724,35.5037919764501,3.39031248905482,1 } } PoseNode: { Node: 125853680 Matrix: *16 { a: 0.387236996149533,-0.920820121873301,-0.046237373153508,0,-0.920497964015052,-0.383285351135722,-0.0759990709055018,0,0.052259374558384,0.0719910279667962,-0.996035292644419,0,28.0197072816314,35.6691937847349,1.78781962542131,1 } } PoseNode: { Node: 125849040 Matrix: *16 { a: 0.407760983432604,-0.896533476315931,-0.17308589317943,0,-0.893470978416277,-0.430848807188504,0.126802786997145,0,-0.188256783383293,0.102941959924762,-0.976709963153078,0,27.4688838331264,36.3884799778826,0.498308263782114,1 } } PoseNode: { Node: 125872240 Matrix: *16 { a: 0.200525290419247,-0.702344061022863,0.683009913076289,0,-0.844394482826131,-0.477423758496535,-0.243031928267996,0,0.496777164440344,-0.527995735037014,-0.688790961793811,0,-23.3597375381589,39.8156859646858,8.45627353609159,1 } } PoseNode: { Node: 125879200 Matrix: *16 { a: -0.364861777469363,-0.891041943274719,0.270037482231165,0,0.690991846413133,-0.453532383677801,-0.562884275518276,0,0.624024186931544,-0.0187812745593408,0.781179303989205,0,-27.013671960418,37.6413385227463,8.45494644727821,1 } } PoseNode: { Node: 125860640 Matrix: *16 { a: -0.481422853291761,-0.861020641468519,0.163937983653291,0,0.779765361368942,-0.506149369069037,-0.368481784767604,0,0.400247490114989,-0.0495624334986858,0.91506591765906,0,-28.1881241464277,37.2726865185971,7.18999280407797,1 } } PoseNode: { Node: 125867600 Matrix: *16 { a: -0.446935168407541,-0.894507287994929,0.0102839957306443,0,0.875983239723845,-0.439952948090884,-0.197724099119921,0,0.181390079649833,-0.0793613055628818,0.980203770977579,0,-28.5224230630313,37.4527394415117,5.61897135092215,1 } } PoseNode: { Node: 125883840 Matrix: *16 { a: -0.482801791338162,-0.8684419272543,-0.112743678120074,0,0.873602569081369,-0.486588709999451,0.00707029180252432,0,-0.060999963693244,-0.0950796974193541,0.99359897176079,0,-28.1063699787253,38.1415268190634,4.26394683249727,1 } } } Material: 136657872, "Material::character_anim:headM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties70: { P: "AmbientColor", "Color", "", "A",0.0495800003409386,0.0495800003409386,0.0495800003409386 P: "DiffuseColor", "Color", "", "A",1,1,1 P: "Bump", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "TransparencyFactor", "Number", "", "A",1 P: "SpecularColor", "Color", "", "A",0.5,0.5,0.5 P: "ShininessExponent", "Number", "", "A",1.24573092330083 P: "ReflectionFactor", "Number", "", "A",0.5 P: "Emissive", "Vector3D", "Vector", "",0,0,0 P: "Ambient", "Vector3D", "Vector", "",0.0495800003409386,0.0495800003409386,0.0495800003409386 P: "Diffuse", "Vector3D", "Vector", "",1,1,1 P: "Specular", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "Shininess", "double", "Number", "",1.24573092330083 P: "Opacity", "double", "Number", "",1 P: "Reflectivity", "double", "Number", "",0 } } Material: 136655312, "Material::character_anim:jacketM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties70: { P: "AmbientColor", "Color", "", "A",0,0,0 P: "DiffuseColor", "Color", "", "A",1,1,1 P: "Bump", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "TransparencyFactor", "Number", "", "A",1 P: "SpecularColor", "Color", "", "A",0.5,0.5,0.5 P: "ShininessExponent", "Number", "", "A",1.24573092330083 P: "ReflectionFactor", "Number", "", "A",0.5 P: "Emissive", "Vector3D", "Vector", "",0,0,0 P: "Ambient", "Vector3D", "Vector", "",0,0,0 P: "Diffuse", "Vector3D", "Vector", "",1,1,1 P: "Specular", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "Shininess", "double", "Number", "",1.24573092330083 P: "Opacity", "double", "Number", "",1 P: "Reflectivity", "double", "Number", "",0 } } Material: 136658512, "Material::character_anim:pantsM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties70: { P: "AmbientColor", "Color", "", "A",0,0,0 P: "DiffuseColor", "Color", "", "A",1,1,1 P: "DiffuseFactor", "Number", "", "A",0.800000011920929 P: "Bump", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "TransparencyFactor", "Number", "", "A",1 P: "SpecularColor", "Color", "", "A",0.5,0.5,0.5 P: "ShininessExponent", "Number", "", "A",1.24573092330083 P: "ReflectionFactor", "Number", "", "A",0.5 P: "Emissive", "Vector3D", "Vector", "",0,0,0 P: "Ambient", "Vector3D", "Vector", "",0,0,0 P: "Diffuse", "Vector3D", "Vector", "",0.800000011920929,0.800000011920929,0.800000011920929 P: "Specular", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "Shininess", "double", "Number", "",1.24573092330083 P: "Opacity", "double", "Number", "",1 P: "Reflectivity", "double", "Number", "",0 } } Material: 136657232, "Material::character_anim:upBodyM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties70: { P: "AmbientColor", "Color", "", "A",0,0,0 P: "DiffuseColor", "Color", "", "A",1,1,1 P: "Bump", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "TransparencyFactor", "Number", "", "A",1 P: "SpecularColor", "Color", "", "A",0.5,0.5,0.5 P: "ShininessExponent", "Number", "", "A",1.19371980378707 P: "ReflectionFactor", "Number", "", "A",0.5 P: "Emissive", "Vector3D", "Vector", "",0,0,0 P: "Ambient", "Vector3D", "Vector", "",0,0,0 P: "Diffuse", "Vector3D", "Vector", "",1,1,1 P: "Specular", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "Shininess", "double", "Number", "",1.19371980378707 P: "Opacity", "double", "Number", "",1 P: "Reflectivity", "double", "Number", "",0 } } Material: 136651472, "Material::character_anim:eyeBallM", "" { Version: 102 ShadingModel: "phong" MultiLayer: 0 Properties70: { P: "AmbientColor", "Color", "", "A",0,0,0 P: "DiffuseColor", "Color", "", "A",1,1,1 P: "Bump", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "TransparencyFactor", "Number", "", "A",1 P: "SpecularColor", "Color", "", "A",0.5,0.5,0.5 P: "ShininessExponent", "Number", "", "A",65.9860000610352 P: "ReflectionFactor", "Number", "", "A",0.5 P: "Emissive", "Vector3D", "Vector", "",0,0,0 P: "Ambient", "Vector3D", "Vector", "",0,0,0 P: "Diffuse", "Vector3D", "Vector", "",1,1,1 P: "Specular", "Vector3D", "Vector", "",0.5,0.5,0.5 P: "Shininess", "double", "Number", "",65.9860000610352 P: "Opacity", "double", "Number", "",1 P: "Reflectivity", "double", "Number", "",0 } } Deformer: 125204720, "Deformer::Skin_him", "Skin" { Version: 101 Link_DeformAcuracy: 50 } Deformer: 126006096, "SubDeformer::Cluster_Root", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *46 { a: 6514,6515,6516,6517,6518,6519,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6558,6575,6660,6661,6664,6712,6818,6819,6821,6891,6892,6893,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001,11020 } Weights: *46 { a: 0.148829370737076,0.17685829102993,0.113096483051777,0.12204097956419,0.0812638849020004,0.00829269830137491,0.0237471498548985,0.0290536563843489,0.0317849144339561,0.0604783557355404,0.0725867226719856,0.0152020892128348,0.028587194159627,0.0811868533492088,0.0760499387979507,0.159019902348518,0.0269343629479408,0.0198612324893475,0.082656018435955,0.0308674443513155,0.134406641125679,0.0715651735663414,0.0573297701776028,0.0623637847602367,0.0700489580631256,0.0712813660502434,0.0706327632069588,0.0615008324384689,0.0691068470478058,0.0702681243419647,0.0494278706610203,0.0572692602872849,0.048890370875597,0.0335745625197887,0.034069836139679,0.0332106426358223,0.0273313820362091,0.0328722968697548,0.033588569611311,0.0339282527565956,0.0229143295437098,0.0325650237500668,0.0331987328827381,0.0264733470976353,0.0256072301417589,0.0269183497875929 } Transform: *16 { a: 6.12323399573116e-017,0.999999999999114,-1.66752672951169e-010,0,6.53552425437128e-041,1.66752672951027e-010,0.999999999999965,0,0.999999999999079,-6.12323399573131e-017,1.02106563589456e-026,0,-2.23054871114961,-0.0375633907420858,-37.4609861130789,1 } TransformLink: *16 { a: 6.1232339957424e-017,0,1.00000000000092,0,1.00000000000089,1.66752672951323e-010,-6.12323399574222e-017,0,-1.66752672951181e-010,1.00000000000004,1.02106563589465e-026,0,0.0375633844953997,37.4609861130865,2.23054871115166,1 } } Deformer: 137709552, "SubDeformer::Cluster_Pelvis", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *137 { a: 6514,6515,6516,6517,6518,6519,6521,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6544,6545,6549,6558,6568,6569,6574,6575,6576,6577,6578,6579,6590,6591,6593,6594,6601,6602,6603,6644,6645,6646,6647,6648,6652,6653,6654,6655,6659,6660,6661,6662,6664,6665,6666,6667,6673,6674,6680,6681,6688,6691,6696,6697,6698,6699,6700,6701,6702,6705,6712,6713,6714,6724,6725,6730,6731,6732,6733,6734,6735,6738,6748,6749,6751,6752,6760,6761,6762,6805,6806,6807,6811,6812,6813,6817,6818,6819,6820,6821,6822,6823,6824,6831,6832,6838,6839,6847,6856,6860,6890,6891,6892,6893,6894,6906,6909,6910,10951,10954,10973,10975,10976,10980,10983,10986,10998,10999,11000,11001,11020 } Weights: *137 { a: 0.799383759498596,0.75867486000061,0.854301154613495,0.847075760364532,0.899999976158142,0.0894757434725761,0.0345684066414833,0.0351840741932392,0.949999988079071,0.949999988079071,0.949999988079071,0.910582900047302,0.899999976158142,0.949999988079071,0.0527760647237301,0.899999976158142,0.899999976158142,0.783881008625031,0.949999988079071,0.949999988079071,0.899999976158142,0.949999988079071,0.619111835956573,0.591075420379639,0.449584573507309,0.185553684830666,0.805147349834442,0.235315650701523,0.0519597008824348,0.899999976158142,0.13294880092144,0.117739856243134,0.603049695491791,0.899999976158142,0.283097892999649,0.887273788452148,0.624301850795746,0.085120789706707,0.783373355865479,0.630953192710876,0.384793758392334,0.0488782748579979,0.523425757884979,0.474541455507278,0.0999121963977814,0.0011430912418291,0.206513106822968,0.214638784527779,0.176684230566025,0.113295316696167,0.159522891044617,0.114811077713966,0.455518305301666,0.572888076305389,0.180876806378365,0.899999976158142,0.899999976158142,0.188521772623062,0.899999976158142,0.289416015148163,0.471739292144775,0.0972785204648972,0.136938780546188,0.472441554069519,0.562164723873138,0.13294880092144,0.751014232635498,0.104111813008785,0.755477726459503,0.731383979320526,0.46454194188118,0.158830061554909,0.673907995223999,0.224742695689201,0.0140152266249061,0.0582037307322025,0.899999976158142,0.0200727786868811,0.0173638090491295,0.193586349487305,0.104791283607483,0.609969437122345,0.899999976158142,0.411259800195694,0.276800006628037,0.884683132171631,0.630967020988464,0.115955218672752,0.81635719537735,0.671586453914642,0.355839669704437,0.0490408353507519,0.542843878269196,0.470961928367615,0.103352710604668,0.159476667642593,0.1330576390028,0.0624692253768444,0.19200786948204,0.3819380402565,0.541414737701416,0.155516654253006,0.899999976158142,0.899999976158142,0.160386845469475,0.899999976158142,0.167465269565582,0.487605810165405,0.0952591747045517,0.104544185101986,0.474321901798248,0.575775980949402,0.167334824800491, 0.760569870471954,0.0504525750875473,0.0977368652820587,0.1761714220047,0.899999976158142,0.899999976158142,0.899999976158142,0.162171944975853,0.10718097537756,0.499940901994705,0.115701332688332,0.0335655994713306,0.0331794954836369,0.033482737839222,0.0363343097269535,0.0336760170757771,0.033488791435957,0.0334953814744949,0.0385428369045258,0.0340126343071461,0.0335763432085514,0.0367633253335953,0.0371963866055012,0.036540824919939 } Transform: *16 { a: -1.66752994575547e-010,2.75770739236699e-006,0.999999999991485,0,0.999999999999055,-3.9744622047109e-017,1.66752994575661e-010,0,4.99600587891201e-016,0.99999999999236,-2.75770739236455e-006,0,-37.4609888630342,-1.27468122076786,-0.0375585643593996,1 } TransformLink: *16 { a: -1.66752994575861e-010,1.00000000000094,4.99600587892144e-016,0,2.75770739238814e-006,-3.974462204741e-017,1.00000000000003,0,1.00000000000091,1.66752994577234e-010,-2.75770739239057e-006,0,0.0375620733105271,37.4609888630758,1.27468111719239,1 } } Deformer: 137711792, "SubDeformer::Cluster_Spine", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *2398 { a: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5301,5302,5308,5315,5316,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5336,5337,5339,5340,5341,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5392,5393,5442,5445,5446,5461,5468,5476,5481,5482,5530,5531,5739,5740,5741,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760, 5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5786,5787,5788,5808,5809,5816,5823,5824,5872,5875,5876,5891,5892,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871, 6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7306,7307,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538, 7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7614,7615,7616,7617,7618,7619,7620,7621,7622,7624,7625,7630,7632,7633,7668,7669,7670,7671,7672,7674,7681,7692,7694,7695,7696,7709,7710,7716,7717,7718,7719,7720,7721,7722,7723,7724,7798,7799,7800,7806,7807,7808,7809,7810,7811,7812,7813,7848,7850,7851,7853,7854,7855,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,8000,9108,9109,9110,9111,9112,9113,9114,9115,9116,9118,9119,9126,9127,9162,9163,9164,9165,9166,9168,9175,9186,9188,9189,9190,9203,9204,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9296,9297,9298,9300,9301,9304,9305,9306,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9329,9330,9331,9350,9351,9352,9353,9359,9361,9363,9364,9365,9366,9367,9368,9374,9375,9376,9377,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593, 9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9881,9882,9883,9884,9885,9915,9916,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9984,9985,9986,9987,9988,9989,9990,9994,9995,9996,9997,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10032,10033,10034,10035,10036,10037,10038,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180, 10181,10182,10183,10184,10185,10188,10189,10194,10216,10223,10224,10227,10228,10229,10230,10231,10232,10241,10275,10276,10277,10285,10448,10449,10456,10585,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10628,10629,10634,10656,10661,10664,10665,10666,10667,10668,10669,10670,10677,10709,10710,10711,10712,10720,10876,10877,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165, 11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192 } Weights: *2398 { a: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.244441643357277,0.247425943613052,0.246487095952034,0.241566851735115,0.250035226345062,0.250796467065811,0.25156769156456,0.253332167863846,0.251615196466446,0.253420650959015,0.250169515609741,0.25105145573616,0.247620776295662,0.246866270899773,0.244649648666382,0.241981253027916,0.242047905921936,0.237693607807159,0.240509778261185,0.235144719481468,0.240449100732803,0.235020831227303,0.241887286305428,0.237368017435074,0.200827375054359,0.195532456040382,0.205721631646156,0.208878561854362,0.209438517689705,0.207261577248573,0.202953681349754,0.197683557868004,0.192855000495911,0.189739361405373,0.189154654741287,0.191265761852264,0.197463110089302,0.194227814674377,0.200458317995071,0.202400833368301,0.202764689922333,0.201455339789391,0.19883306324482,0.195606157183647,0.192636698484421,0.190710946917534, 0.190338432788849,0.191622346639633,0.24601249396801,0.196497097611427,0.373516350984573,0.376757621765137,0.369537591934204,0.365251928567886,0.382805824279785,0.382776975631714,0.386137038469315,0.388760268688202,0.380438297986984,0.387044966220856,0.392412126064301,0.379495084285736,0.370759338140488,0.358247369527817,0.354949980974197,0.368560016155243,0.36077743768692,0.390685200691223,0.387448787689209,0.386936098337173,0.380599111318588,0.38983428478241,0.39421871304512,0.377999693155289,0.370091617107391,0.366377264261246,0.357207298278809,0.352117955684662,0.341517567634583,0.388354241847992,0.392351239919662,0.364930152893066,0.375461101531982,0.353334933519363,0.338869631290436,0.318140685558319,0.374630272388458,0.253818362951279,0.330474436283112,0.336101323366165,0.251405566930771,0.258881658315659,0.329255163669586,0.258955836296082,0.326492011547089,0.25557616353035,0.322989732027054,0.23970103263855,0.309830665588379,0.213416919112206,0.286303400993347,0.360161691904068,0.354063391685486,0.364664852619171,0.351037055253983,0.347294807434082,0.343819558620453,0.332145482301712,0.309136658906937,0.283766984939575,0.182805374264717,0.322982370853424,0.316466480493546,0.293134987354279,0.276267886161804,0.274140179157257,0.295364439487457,0.303073704242706,0.354633033275604,0.364007532596588,0.343757838010788,0.334839880466461,0.348560273647308,0.33023327589035,0.317398726940155,0.361911833286285,0.34889817237854,0.201658248901367,0.193551778793335,0.34731462597847,0.353964239358902,0.359329700469971,0.341922789812088,0.344691544771194,0.341207295656204,0.337673217058182,0.325471311807632,0.302787721157074,0.373936861753464,0.356122374534607,0.357345730066299,0.375500559806824,0.368380576372147,0.346033930778503,0.37697446346283,0.37307596206665,0.353593707084656,0.331589162349701,0.358462393283844,0.329241544008255,0.348726212978363,0.314913302659988,0.291479706764221,0.335428446531296,0.26182433962822,0.353498190641403,0.244015663862228,0.247688680887222,0.245483666658401,0.242484733462334,0.2377700060606, 0.23008830845356,0.237610965967178,0.241329908370972,0.249271839857101,0.252844214439392,0.24934010207653,0.252829015254974,0.246366634964943,0.249618053436279,0.232329145073891,0.234494656324387,0.210118144750595,0.209856301546097,0.331883281469345,0.244902163743973,0.237399041652679,0.247255980968475,0.24386802315712,0.199680224061012,0.193274289369583,0.251673072576523,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.228242665529251,0.433049440383911,0.063678465783596,0.550755441188812,0.905955851078033,0.277041643857956,0.420005768537521,0.408874332904816,0.334239274263382,0.426755398511887,0.241860181093216,0.899999976158142,0.500172555446625,0.50339287519455,0.420577973127365,0.428421944379807,0.167543798685074,0.0129226706922054,0.5,0.36642724275589,0.25941988825798,0.245549902319908,0.302309572696686,0.202298223972321,0.253012418746948,0.389088153839111,0.188150689005852,0.940474212169647,0.944787383079529,0.545298874378204,0.404611170291901,0.5118807554245,0.34206211566925,0.193565756082535,0.0798677578568459,0.359307199716568,0.220871970057487,0.201562315225601,0.553697109222412,0.584769606590271,0.909379601478577,0.911072134971619,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.522571086883545,0.397793114185333,0.326984196901321,0.244352966547012,0.427823901176453,0.458259165287018,0.461357414722443,0.394107729196548,0.899999976158142,0.27571764588356,0.420828282833099,0.409706592559814,0.334164440631866,0.426904082298279,0.241386741399765,0.500177025794983,0.503991425037384,0.42418310046196,0.334534138441086,0.899999976158142,0.194053664803505,0.169082060456276,0.5,0.366859018802643,0.258727252483368,0.244743958115578,0.341296017169952,0.212976187467575,0.27468204498291,0.370680093765259,0.143536567687988,0.54621148109436,0.405595302581787,0.512151777744293,0.236699178814888,0.130981206893921,0.079025998711586,0.359673470258713,0.202563613653183,0.173596724867821,0.553828299045563,0.586015403270721,0.303222894668579, 0.908758401870728,0.899999976158142,0.899999976158142,0.899999976158142,0.416867136955261,0.435121119022369,0.502011477947235,0.507540047168732,0.517787754535675,0.920168399810791,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.944217801094055,0.939911723136902,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0499768182635307,0.0622557625174522,0.0314086191356182,0.0294202249497175,0.0173703264445066,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0223812647163868,0.0184281393885612,0.0165518838912249,0.0271356329321861,0.0262770988047123,0.0286044720560312,0.899999976158142,0.0176951847970486,0.0220540463924408,0.0550919994711876,0.0200411379337311,0.0253521800041199,0.016105180606246,0.0171583909541368,0.0850373953580856,0.0758332088589668,0.0980560183525085,0.372282832860947,0.470829576253891,0.058711938560009,0.202237918972969,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0271500088274479,0.899999976158142,0.899999976158142,0.899999976158142,0.474399924278259,0.484295248985291,0.473359733819962,0.486365467309952,0.470664262771606,0.374861598014832,0.366387665271759,0.437676966190338,0.425652414560318,0.46727055311203,0.195437729358673,0.221567079424858,0.119305938482285,0.0407545492053032,0.196933567523956,0.0379016511142254,0.175045162439346,0.450425118207932,0.466519892215729,0.479820847511292,0.494895756244659,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.474442213773727,0.317375123500824,0.335670530796051,0.0426778271794319,0.0611641183495522,0.0800886005163193,0.386461079120636,0.899999976158142,0.402333498001099,0.899999976158142,0.899999976158142,0.483016639947891,0.492276847362518,0.482892215251923,0.210124060511589,0.273503005504608,0.491192519664764,0.210949346423149, 0.480654180049896,0.460385143756866,0.489091366529465,0.485488176345825,0.409366816282272,0.485847264528275,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.490868449211121,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.406117528676987,0.101345561444759,0.487271994352341,0.498311102390289,0.479613840579987,0.208456739783287,0.422964990139008,0.287179529666901,0.166849553585052,0.111482918262482,0.485398918390274,0.102656565606594,0.114537015557289,0.118492007255554,0.132055476307869,0.0896488949656487,0.0687534958124161,0.064977765083313,0.0578959956765175,0.497809112071991,0.200785055756569,0.134202092885971,0.121802054345608,0.105732023715973,0.0741553604602814,0.055485475808382,0.0617626309394836,0.899999976158142,0.899999976158142,0.419221252202988,0.0352571569383144,0.0283600147813559,0.400317370891571,0.49568247795105,0.0277331583201885,0.284585326910019,0.250304728746414,0.425329893827438,0.47427025437355,0.484636008739471,0.462838232517242,0.478616893291473,0.474339812994003,0.44830396771431,0.305842816829681,0.490415573120117,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.216201022267342,0.409849554300308,0.428201466798782,0.299757570028305,0.493067115545273,0.477148860692978,0.899999976158142,0.899999976158142,0.0576332211494446,0.179240301251411,0.4087735414505,0.243735611438751,0.479312092065811,0.899999976158142,0.899999976158142,0.899999976158142,0.0528160966932774,0.0476635284721851,0.0912690982222557,0.38397690653801,0.0972289070487022,0.200551301240921,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0280716568231583,0.899999976158142,0.899999976158142,0.899999976158142,0.452894061803818,0.47402435541153,0.483769923448563, 0.47241935133934,0.486981511116028,0.47670915722847,0.470452100038528,0.374543905258179,0.339963465929031,0.443937122821808,0.425873547792435,0.467277556657791,0.203481242060661,0.226448878645897,0.115699142217636,0.0413811802864075,0.22074756026268,0.199416875839233,0.0382523499429226,0.171607092022896,0.490018874406815,0.486813902854919,0.433707058429718,0.483929514884949,0.479347556829453,0.494737774133682,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.47393861413002,0.335015952587128,0.0346741303801537,0.0523174330592155,0.280055373907089,0.402526408433914,0.899999976158142,0.403372168540955,0.899999976158142,0.899999976158142,0.480757892131805,0.486051797866821,0.48539599776268,0.482352942228317,0.202147349715233,0.275057405233383,0.48567208647728,0.0835829302668571,0.0729673504829407,0.209692642092705,0.480644881725311,0.460294842720032,0.485169321298599,0.409366607666016,0.476667702198029,0.497557014226913,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.487591832876205,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.363091051578522,0.486785143613815,0.492457121610641,0.479441195726395,0.480146616697311,0.483121246099472,0.484910160303116,0.286455065011978,0.164788633584976,0.115249574184418,0.104643501341343,0.114593736827374,0.117495730519295,0.129164040088654,0.0909549221396446,0.0774164944887161,0.0694414302706718,0.060987826436758,0.498031169176102,0.132643029093742,0.0914852172136307,0.0800103396177292,0.055613748729229,0.0585689470171928,0.899999976158142,0.899999976158142,0.430365353822708,0.0360974445939064,0.0292764361947775,0.413414359092712,0.0287411995232105,0.331874817609787,0.242936596274376,0.426501959562302,0.474240958690643,0.484399497509003,0.462895035743713,0.491324007511139,0.481851667165756,0.472675174474716,0.462384283542633,0.304057329893112, 0.487220883369446,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.209291517734528,0.393088698387146,0.427878260612488,0.4830022752285,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.303087472915649,0.0536928921937943,0.325082153081894,0.202775940299034,0.476244419813156,0.499079555273056,0.496010959148407,0.497787863016129,0.0508093200623989,0.421548753976822,0.0662107318639755,0.0445234589278698,0.077688030898571,0.0827849209308624,0.0493801422417164,0.079817570745945,0.0710747241973877,0.494894951581955,0.47863557934761,0.485665053129196,0.0818784013390541,0.485051035881042,0.419161200523376,0.492303609848022,0.492112398147583,0.0693842321634293,0.0480330437421799,0.422746449708939,0.0661759674549103,0.0414951294660568,0.077379547059536,0.0510545521974564,0.077643096446991,0.478472769260406,0.100985370576382,0.212159022688866,0.0847534462809563,0.0664583668112755,0.469830930233002,0.466865479946136,0.468666285276413,0.467166066169739,0.475262671709061,0.513434112071991,0.45416596531868,0.0456559956073761,0.0381095334887505,0.04617028683424,0.458466410636902,0.492889791727066,0.466491162776947,0.467004597187042,0.465437352657318,0.468502849340439,0.497051328420639,0.48866793513298,0.476463884115219,0.28717103600502,0.336231589317322,0.487657696008682,0.277788311243057,0.282144725322723,0.256011962890625,0.180214300751686,0.287221610546112,0.264949142932892,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.128804847598076,0.124300897121429,0.119410678744316,0.121989578008652,0.126729294657707,0.12162871658802,0.0948135182261467,0.13428783416748,0.0900763049721718,0.0886399820446968,0.0841514021158218,0.081154964864254,0.0858331248164177,0.0372096374630928,0.0309558864682913,0.0244138482958078,0.0176111347973347,0.014983844012022,0.129338786005974,0.0909664332866669,0.0378601811826229,0.0245837960392237,0.0324109755456448, 0.0193320214748383,0.0143751567229629,0.0130134420469403,0.0144294565543532,0.0651924386620522,0.0683740973472595,0.0874151587486267,0.0967726111412048,0.118158273398876,0.15954327583313,0.133861139416695,0.120879530906677,0.0863500535488129,0.0355506911873817,0.0342619754374027,0.0312653295695782,0.0287093352526426,0.021574629470706,0.0168448891490698,0.0118433842435479,0.0115172686055303,0.0134986257180572,0.0120220622047782,0.0131854433566332,0.0606853812932968,0.0832474008202553,0.093217745423317,0.11446488648653,0.129967495799065,0.0255544222891331,0.0210145488381386,0.0194068942219019,0.0119495382532477,0.00901409145444632,0.00822153221815825,0.0083137908950448,0.00901816599071026,0.0524943694472313,0.0553345903754234,0.068617656826973,0.076964758336544,0.192974328994751,0.188027605414391,0.188158750534058,0.185076355934143,0.14940433204174,0.144968196749687,0.182830169796944,0.154406279325485,0.174253150820732,0.193655014038086,0.185767650604248,0.246047541499138,0.24127422273159,0.241126343607903,0.237629055976868,0.235797300934792,0.24693551659584,0.239405423402786,0.038468461483717,0.188023090362549,0.128091588616371,0.133428320288658,0.138287797570229,0.178264051675797,0.23220020532608,0.241286396980286,0.227848380804062,0.151058748364449,0.113301075994968,0.11036491394043,0.125564470887184,0.0676738694310188,0.0801245048642159,0.167598038911819,0.128094255924225,0.232770204544067,0.237745985388756,0.184255436062813,0.179258301854134,0.229751572012901,0.23304195702076,0.17586824297905,0.238762646913528,0.182600617408752,0.13694255053997,0.233596786856651,0.199792727828026,0.225131019949913,0.228194355964661,0.172236859798431,0.220965817570686,0.190604701638222,0.183457717299461,0.232855081558228,0.0307963136583567,0.146925538778305,0.202488541603088,0.0871826484799385,0.049006026238203,0.132937029004097,0.131644994020462,0.130768299102783,0.122386641800404,0.0836272537708282,0.0803681313991547,0.00396483391523361,0.00633750250563025,0.00248087686486542,0.0016853892011568,0.00199530832469463,0.00109372811857611, 0.00142326357308775,0.0220866464078426,0.0141881955787539,0.00774034112691879,0.00421709381043911,0.00252895569428802,0.00525286328047514,0.0047554038465023,0.00263063330203295,0.0451593361794949,0.0221035573631525,0.00112951546907425,0.00106509344186634,0.00172538100741804,0.00144575606100261,0.00125635962467641,0.00322978175245225,0.00199160212650895,0.00201613828539848,0.00330872484482825,0.00193723302800208,0.00445955852046609,0.00245628482662141,0.00561189698055387,0.00297321169637144,0.00795925036072731,0.0075264573097229,0.00421811267733574,0.00596139440312982,0.00241706985980272,0.00402618013322353,0.00628479011356831,0.0041719451546669,0.00203253165818751,0.00271617225371301,0.00141770753543824,0.00252853706479073,0.00138250086456537,0.00662316475063562,0.00596707733348012,0.00925629865378141,0.0103338537737727,0.0120895095169544,0.0127093885093927,0.00898659415543079,0.00683298194780946,0.00487540382891893,0.00407768040895462,0.0348199345171452,0.0649327710270882,0.066335991024971,0.0358296371996403,0.161739841103554,0.0818046554923058,0.0807016789913177,0.15451543033123,0.0940489768981934,0.0603382438421249,0.0702256262302399,0.0352267138659954,0.0277259387075901,0.0261700768023729,0.255933821201324,0.346736639738083,0.336984097957611,0.143246442079544,0.0974620506167412,0.043335136026144,0.031309686601162,0.432955324649811,0.483261168003082,0.478565245866776,0.422408699989319,0.304098427295685,0.207750976085663,0.146186009049416,0.0112169776111841,0.00671346625313163,0.00299824820831418,0.00180409394670278,0.00173606141470373,0.0016881157644093,0.00215591676533222,0.00260239094495773,0.00358258979395032,0.00706381490454078,0.00335836806334555,0.00202733650803566,0.00176701706368476,0.00121282087638974,0.00118987401947379,0.00561260897666216,0.00241978513076901,0.00387012725695968,0.0596045516431332,0.0244100801646709,0.244619458913803,0.029373075813055,0.43449404835701,0.486235320568085,0.48059156537056,0.427583009004593,0.307614177465439,0.20915924012661,0.148607149720192,0.0463326685130596,0.0486371889710426, 0.00634428393095732,0.00365646346472204,0.0118476608768106,0.0321184881031513,0.0478746853768826,0.0106965135782957,0.0764963403344154,0.148223981261253,0.331562787294388,0.467333436012268,0.469035536050797,0.00947490520775318,0.0101797981187701,0.0101308375597,0.014061757363379,0.0202330444008112,0.0269427467137575,0.0267547108232975,0.0241191368550062,0.0281163435429335,0.0306482631713152,0.0295060761272907,0.0109167220070958,0.0117025338113308,0.0124574238434434,0.050898727029562,0.0503738038241863,0.0578904375433922,0.0922311246395111,0.141333788633347,0.22456730902195,0.227567330002785,0.0177560783922672,0.0190714467316866,0.0195607356727123,0.0255508925765753,0.052836962044239,0.0918030440807343,0.15401166677475,0.169818848371506,0.344298928976059,0.156067594885826,0.424768060445786,0.465730160474777,0.319286823272705,0.291175782680511,0.0849423706531525,0.0330376215279102,0.0144369145855308,0.0126413479447365,0.00879246182739735,0.0079611511901021,0.0291281025856733,0.0667730271816254,0.104921028017998,0.0713702738285065,0.112708725035191,0.166204929351807,0.13128425180912,0.208592295646667,0.249056994915009,0.319560289382935,0.350937873125076,0.167568385601044,0.0866376608610153,0.0311222057789564,0.0183327905833721,0.0126609988510609,0.00722455093637109,0.00863407645374537,0.00679195951670408,0.00553479325026274,0.0042190826497972,0.00392617005854845,0.00431412877514958,0.00698245875537395,0.0130870034918189,0.0372610092163086,0.142217367887497,0.333639472723007,0.424810439348221,0.00361940916627645,0.027364544570446,0.00949712097644806,0.0702332332730293,0.0720498561859131,0.0657416209578514,0.0468012802302837,0.0353254340589046,0.103264316916466,0.10613390058279,0.0849223732948303,0.0626742914319038,0.0477514900267124,0.0023828495759517,0.00336645683273673,0.00471905944868922,0.00498715182766318,0.0053791287355125,0.00838648993521929,0.0250504445284605,0.0453383177518845,0.0595372840762138,0.0807408019900322,0.00324741145595908,0.00398993026465178,0.0115005858242512,0.0220406595617533,0.0313174091279507, 0.0482421852648258,0.00227482104673982,0.00196545757353306,0.00375738996081054,0.083605483174324,0.0822170674800873,0.0831636190414429,0.0630473122000694,0.0481768995523453,0.3446224629879,0.425492912530899,0.131611213088036,0.113337218761444,0.102451033890247,0.340103626251221,0.338898211717606,0.0360977724194527,0.0380000621080399,0.471558958292007,0.465493679046631,0.418613165616989,0.329782277345657,0.474898964166641,0.4684838950634,0.419469267129898,0.332224696874619,0.478455871343613,0.470837116241455,0.42595586180687,0.15671406686306,0.26562574505806,0.26365339756012,0.257146269083023,0.0138539336621761,0.114299923181534,0.188113182783127,0.0199986882507801,0.0217276699841022,0.0225842781364918,0.0265044532716274,0.0309454146772623,0.0353365615010262,0.0395141430199146,0.0400376841425896,0.0374672003090382,0.120118767023087,0.129973024129868,0.0787881836295128,0.0643641352653503,0.0733145847916603,0.0299731642007828,0.0131016932427883,0.00807503890246153,0.00641247676685452,0.00469847675412893,0.00116353866178542,0.00109649647492915,0.0015472712693736,0.0015398912364617,0.00181988475378603,0.00185549294110388,0.00183399405796081,0.00189391942694783,0.00124193157535046,0.0014578535920009,0.0014706157380715,0.00103451905306429,0.00117230892647058,0.00116537837311625,0.00127800682093948,0.00128758465871215,0.00169459613971412,0.00166226760484278,0.00101601879578084,0.00132098130416125,0.00105506856925786,0.00109436130151153,0.00142546708229929,0.00165331270545721,0.00175113021396101,0.00116391049232334,0.00149487575981766,0.00275484379380941,0.00286094797775149,0.00283250957727432,0.00315297488123178,0.00307540665380657,0.00171014678198844,0.00189925020094961,0.00185286905616522,0.00317150028422475,0.00369846285320818,0.00408397102728486,0.00546123459935188,0.0460431762039661,0.0475341975688934,0.038765087723732,0.00189711654093117,0.00187039421871305,0.00190330250188708,0.00195048784371465,0.00183602317702025,0.0025363105814904,0.00109787075780332,0.00116721540689468,0.00113554787822068,0.00149305525701493,0.00161524920258671, 0.057351540774107,0.0321330279111862,0.0826931446790695,0.0506877452135086,0.0968986079096794,0.0525840595364571,0.0556077249348164,0.0939208716154099,0.0881008803844452,0.0490996241569519,0.0903309360146523,0.00541983218863606,0.00260564009658992,0.00511829322203994,0.00349382869899273,0.00537390913814306,0.00596560025587678,0.00700216926634312,0.0063464199192822,0.00247354246675968,0.00279559753835201,0.00530987698584795,0.00257820077240467,0.00249433261342347,0.0997933968901634,0.0544734485447407,0.0484018176794052,0.00362300151027739,0.00399520713835955,0.0385792851448059,0.00472923275083303,0.00707319425418973,0.022978238761425,0.0392886884510517,0.0639106407761574,0.0347827896475792,0.00521091790869832,0.00661726342514157,0.0041303988546133,0.00309630646370351,0.00707019120454788,0.00562763307243586,0.00834548845887184,0.00777499936521053,0.0427671931684017,0.0307781342417002,0.0477634370326996,0.0568116456270218,0.0543619580566883,0.0481494814157486,0.0539024993777275,0.0498538091778755,0.0479667596518993,0.0577677562832832,0.00659023737534881,0.00663879793137312,0.00526854488998652,0.00690277572721243,0.0539496801793575,0.00554723339155316,0.00560073181986809,0.0486485287547112,0.00913042854517698,0.00652239751070738,0.0011291156988591,0.00109412742312998,0.00103278865572065,0.00147875573020428,0.00147705664858222,0.0017723172204569,0.00181253568734974,0.00182461738586426,0.00188483169768006,0.00118751765694469,0.00142098765354604,0.00146216049324721,0.00114015850704163,0.00115575676318258,0.00132532499264926,0.00134176283609122,0.0017199928406626,0.0016922679496929,0.00105575239285827,0.00134141428861767,0.00106850953307003,0.0010271678911522,0.00135946099180728,0.00160738476552069,0.00174183479975909,0.00121512752957642,0.00152292428538203,0.00197672424837947,0.00273400289006531,0.00280472636222839,0.0028488168027252,0.00316720129922032,0.00305494153872132,0.0017370292916894,0.00188972463365644,0.00180811155587435,0.00311806984245777,0.0040378887206316,0.00432216608896852,0.00690364046022296,0.00387458363547921, 0.00535369943827391,0.0023983852006495,0.00160886731464416,0.00332784000784159,0.00185783591587096,0.00101551448460668,0.00134352233726531,0.0238124150782824,0.0478002242743969,0.0526870340108871,0.0381637215614319,0.0153794707730412,0.00393905816599727,0.00180854869540781,0.00274698971770704,0.0018029633210972,0.00197869702242315,0.00171526428312063,0.00514251785352826,0.0047717816196382,0.00266478047706187,0.489171802997589,0.488262295722961,0.0431586429476738,0.0143493311479688,0.00275305891409516,0.00104679516516626,0.00102104444522411,0.00112195441033691,0.00115225685294718,0.00160331535153091,0.00175481359474361,0.00187249213922769,0.00149584782775491,0.00132315745577216,0.00103499344550073,0.00103408901486546,0.0608331300318241,0.0343646034598351,0.0864746570587158,0.0532681569457054,0.0959476977586746,0.0519197396934032,0.0571485608816147,0.0961936935782433,0.0861227437853813,0.0494562238454819,0.0908803790807724,0.00510046212002635,0.00244628125801682,0.00376808317378163,0.00580758368596435,0.00642081862315536,0.00778972543776035,0.00451423460617661,0.00583442393690348,0.0062086065299809,0.00240529561415315,0.00264307809993625,0.00508069852367044,0.00245545478537679,0.0968750342726707,0.0523639731109142,0.0470106676220894,0.00390005228109658,0.00304794777184725,0.00187453755643219,0.00189462560229003,0.00312620983459055,0.00182634731754661,0.00426232814788818,0.00234097195789218,0.00541879655793309,0.00286390422843397,0.0077361180447042,0.00739045953378081,0.00410307198762894,0.00611513201147318,0.00248692650347948,0.00408196216449142,0.00639339722692966,0.00434895092621446,0.00212754565291107,0.00288760499097407,0.00151408067904413,0.00271663744933903,0.00149647297803313,0.006270463578403,0.00564201502129436,0.00783688575029373,0.0102068949490786,0.0115534784272313,0.011789258569479,0.0125153223052621,0.00919362623244524,0.00709264166653156,0.00514057138934731,0.00437394948676229,0.0210229996591806,0.0211294535547495,0.0236893240362406,0.0280384570360184,0.0627929121255875,0.0637256726622581,0.148144006729126, 0.073219008743763,0.159480541944504,0.0803302451968193,0.0883469432592392,0.175800532102585,0.0797864273190498,0.153079614043236,0.0946589261293411,0.0606883279979229,0.0712572634220123,0.0368200019001961,0.029294203966856,0.0278862025588751,0.252608448266983,0.345064520835876,0.335890293121338,0.144410610198975,0.0991004928946495,0.0455374196171761,0.0332835167646408,0.431980043649673,0.483294159173965,0.47867688536644,0.422485083341599,0.30485126376152,0.209794074296951,0.148937806487083,0.0112794619053602,0.00676137395203114,0.0815660059452057,0.171418637037277,0.00282467366196215,0.00169222545810044,0.00163030030671507,0.00158798391930759,0.0020512524060905,0.00250268145464361,0.00348014035262167,0.0069389408454299,0.0034073784481734,0.00208802055567503,0.00185293727554381,0.00129873096011579,0.0012914533726871,0.00529764918610454,0.00260264379903674,0.019681055098772,0.00415737135335803,0.0573714300990105,0.0260794423520565,0.241283521056175,0.0313012041151524,0.43357065320015,0.486305832862854,0.480722397565842,0.421222060918808,0.308387398719788,0.21123956143856,0.151384964585304,0.0513319559395313,0.00637604761868715,0.00370210641995072,0.0116720963269472,0.0107373110949993,0.0756150707602501,0.146860748529434,0.330495357513428,0.467436373233795,0.469159185886383,0.0102206543087959,0.010956222191453,0.0108262272551656,0.0147844785824418,0.0208914484828711,0.0274675246328115,0.0268960893154144,0.0242242868989706,0.027724850922823,0.0302235800772905,0.028852054849267,0.0297430325299501,0.0521327517926693,0.0530193373560905,0.0581693537533283,0.0927537828683853,0.142314732074738,0.226108208298683,0.229115411639214,0.019042607396841,0.0204018652439117,0.0207625348120928,0.0267703607678413,0.0535290092229843,0.0909426435828209,0.152808129787445,0.168576091527939,0.343474626541138,0.155315488576889,0.424900680780411,0.465838462114334,0.320092290639877,0.290643304586411,0.0841367095708847,0.0326586216688156,0.0142576759681106,0.0126772029325366,0.00866493117064238,0.00799310021102428,0.0292372778058052,0.0670557543635368, 0.105456203222275,0.0716907531023026,0.113329194486141,0.167281061410904,0.13141243159771,0.209005817770958,0.250615149736404,0.316368371248245,0.349230736494064,0.165242061018944,0.0850486308336258,0.0304153300821781,0.0123343467712402,0.00701207853853703,0.00838807877153158,0.00656341481953859,0.00529869552701712,0.00399890448898077,0.00370304146781564,0.00407698517665267,0.00661989906802773,0.0218677837401628,0.0659785270690918,0.13825549185276,0.327767133712769,0.422945559024811,0.00341141130775213,0.0277226585894823,0.00964815262705088,0.0733150765299797,0.0750653073191643,0.0668630003929138,0.0482793487608433,0.0364491641521454,0.106386072933674,0.109185293316841,0.0868760198354721,0.0639690756797791,0.0486819483339787,0.0025335478130728,0.00351265678182244,0.00484719267114997,0.0051118447445333,0.00551333790645003,0.00857016909867525,0.0255201179534197,0.0461918115615845,0.0607488192617893,0.082602471113205,0.00348183745518327,0.00425211526453495,0.0122325997799635,0.0232921801507473,0.0329400151968002,0.0505042336881161,0.00243083899840713,0.00211556325666606,0.00381573452614248,0.333928316831589,0.333637237548828,0.342649161815643,0.148482084274292,0.169741451740265,0.325659662485123,0.165427297353745,0.190183475613594,0.338564485311508,0.332659870386124,0.424720793962479,0.272170603275299,0.265515953302383,0.400727868080139,0.3985435962677,0.386788845062256,0.480597913265228,0.483692198991776,0.382549494504929,0.371120661497116,0.389783293008804,0.388345569372177,0.375611394643784,0.479947537183762,0.477173000574112,0.479976087808609,0.488711804151535,0.264497667551041,0.480171978473663,0.480196863412857,0.281652390956879,0.386610776185989,0.393351674079895,0.493049114942551,0.476622134447098,0.493348211050034,0.488274902105331,0.481746703386307,0.479674130678177,0.485377997159958,0.383438646793365,0.38273361325264,0.478472590446472,0.478911131620407,0.482469409704208,0.25904905796051,0.387419193983078,0.484412759542465,0.374153643846512,0.384540796279907,0.393201231956482,0.391896665096283,0.389575123786926, 0.397310733795166,0.389183044433594,0.395906448364258,0.391255348920822,0.385995209217072,0.379178792238235,0.480608761310577,0.478224217891693,0.478784024715424,0.483895808458328,0.485016852617264,0.289588868618011,0.2858946621418,0.282295495271683,0.278777480125427,0.280919998884201,0.284057527780533,0.275038123130798,0.492896527051926,0.491387784481049,0.488171577453613,0.487669318914413,0.483663886785507,0.483254432678223,0.487161904573441,0.488301068544388,0.494450151920319,0.493478566408157,0.491661041975021,0.491220772266388,0.488335520029068,0.488093882799149,0.490230351686478,0.49139529466629,0.447182863950729,0.453413426876068,0.457830518484116,0.455677270889282,0.451877117156982,0.452926635742188,0.453699231147766,0.452374875545502,0.162077844142914,0.153775423765183,0.144265338778496,0.130756393074989,0.12773522734642,0.110134489834309,0.100244358181953,0.257783085107803,0.328106373548508,0.337502628564835,0.339458107948303,0.336772680282593,0.334999978542328,0.337213188409805,0.333657503128052,0.321457594633102,0.240402236580849,0.236348703503609,0.2256248742342,0.192733883857727,0.178379684686661,0.337512731552124,0.33630096912384,0.00372941023670137,0.0425253920257092,0.00479376269504428,0.00736830430105329,0.024929778650403,0.0419468656182289,0.0679051578044891,0.0369835682213306,0.0055746752768755,0.00702597154304385,0.004378626588732,0.00330133899115026,0.00717229535803199,0.00537879345938563,0.00868201814591885,0.00824112817645073,0.0452413111925125,0.0330644808709621,0.0503015853464603,0.0586812384426594,0.0568802282214165,0.0477373376488686,0.0552803725004196,0.0545187331736088,0.0527505427598953,0.0634061843156815,0.00648416765034199,0.00671511329710484,0.00569756980985403,0.00735023058950901,0.0519979819655418,0.00522345816716552,0.00534566678106785,0.0481486767530441,0.00946079008281231,0.0066124158911407,0.0383318774402142,0.0402498096227646,0.00106495397631079,0.118589662015438,0.00465148035436869,0.00636514322832227,0.00802721362560987,0.01302869617939,0.0298224594444036,0.0730650275945663, 0.0640791431069374,0.0785257965326309,0.129638075828552,0.00703607313334942,0.00397564051672816,0.002779102884233,0.00183781166560948,0.00102745718322694,0.00205730739980936,0.00119256286416203,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0363458469510078,0.0490859411656857,0.0230439715087414,0.0270924493670464,0.0206718631088734,0.0185975339263678,0.0315399616956711,0.0198257975280285,0.0269823614507914,0.0328964106738567,0.0420869141817093,0.033035896718502,0.0343892797827721,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0205506253987551,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164824109524488,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0294039398431778,0.0285390242934227,0.033760379999876,0.25,0.0334517695009708,0.0518122427165508,0.0614676512777805,0.0205193366855383,0.0269071813672781,0.0314036086201668,0.0327518321573734,0.0268050134181976,0.0195972546935081,0.0420689024031162,0.25,0.0342525728046894,0.032850906252861,0.25,0.25,0.25,0.25,0.25,0.25,0.0203968714922667,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0164006631821394,0.25,0.25,0.25,0.25,0.0283657796680927,0.0336172617971897,0.25,0.0332952253520489,0.0431861653923988,0.0524789169430733,0.0583099275827408,0.0627204552292824,0.0649085119366646,0.0649517104029655,0.0558292157948017,0.0712820068001747,0.0773883908987045,0.0595448277890682,0.0459866523742676,0.0631427764892578,0.0695129185914993,0.0743144378066063,0.0786107704043388,0.0818765684962273,0.0685356482863426,0.085819348692894,0.0700611248612404,0.0875939428806305,0.0724721848964691,0.0884920507669449,0.0853708758950233,0.0881564021110535,0.0908025205135345,0.0936112031340599,0.0958083048462868,0.097295954823494,0.0983019843697548,0.0867456123232841,0.04403305798769,0.0457499995827675,0.089852549135685,0.0920755043625832,0.0464900881052017,0.0950798839330673,0.04793631285429,0.0969551578164101,0.0981794819235802,0.0453936643898487,0.0594191439449787,0.0714830383658409, 0.0849934816360474,0.0919935032725334,0.0601679086685181,0.031210158020258,0.0784409269690514,0.0928118303418159,0.0457577556371689,0.0402213782072067,0.115750454366207,0.0459373705089092,0.00880237855017185,0.104578346014023,0.00779814412817359,0.0330955237150192,0.00620269542559981,0.0458248779177666,0.115556560456753,0.0106787532567978,0.0427076853811741,0.0520423203706741,0.0623702667653561,0.0579177998006344,0.0646481588482857,0.0645835474133492,0.0556703619658947,0.0594267956912518,0.0773378387093544,0.0711730420589447,0.0628099739551544,0.0455066487193108,0.0741315335035324,0.0692554861307144,0.081831268966198,0.0785038098692894,0.0683186501264572,0.0858453959226608,0.0698799192905426,0.0876429975032806,0.072339653968811,0.0885435417294502,0.0882261097431183,0.0853879749774933,0.0937753990292549,0.0909218266606331,0.0959855541586876,0.0974629446864128,0.0984429940581322,0.0867866203188896,0.0899530425667763,0.045818142592907,0.0443416349589825,0.0922174900770187,0.0952682867646217,0.0465697981417179,0.0971475094556808,0.0479841232299805,0.098355196416378,0.0455138795077801,0.0592054910957813,0.0713467746973038,0.0850033462047577,0.0920666009187698,0.0600640438497067,0.0311885327100754,0.0783986672759056,0.0402268432080746,0.0457861050963402,0.0928908884525299,0.0460279919207096,0.11594096571207,0.0825046300888062,0.0336504355072975,0.0550510063767433,0.0327116213738918,0.0843499973416328,0.0538351610302925,0.115753903985024,0.0459173731505871,0.0423254780471325,0.0473188795149326,0.0469414778053761,0.0424519367516041,0.0455350130796433,0.0465708039700985,0.0463208556175232,0.0459131821990013,0.0454256609082222,0.0454010963439941,0.0476120784878731,0.0460077859461308,0.0464699864387512,0.0480568446218967,0.0285552516579628,0.0279842782765627,0.0420441664755344,0.0346364490687847,0.0459042675793171,0.0479452051222324,0.0302031561732292,0.0351778902113438,0.0353191234171391,0.0300698410719633,0.0477901250123978,0.0460597239434719,0.0475746355950832,0.0476561114192009,0.0469396188855171,0.0473422221839428,0.042336743324995, 0.0424514710903168,0.0466025285422802,0.0457513518631458,0.046540342271328,0.0455028414726257,0.0456418693065643,0.0460276454687119,0.0466801859438419,0.0461235679686069,0.0493917614221573,0.0505173802375793,0.0328598394989967,0.0614248886704445,0.0582841336727142,0.0327506698668003,0.028565488755703,0.0420595146715641,0.0346313901245594,0.0460008196532726,0.0476239807903767,0.0496446788311005,0.0461848825216293,0.0553307607769966,0.0574205592274666,0.0306450352072716,0.0352026782929897,0.0550592020153999,0.0530673302710056,0.0526897385716438,0.0578309148550034,0.0578070469200611,0.0511235482990742,0.0550271794199944,0.0333066172897816,0.0585754439234734,0.0363343097269535,0.0334516875445843,0.0499937012791634,0.0477185994386673,0.0502332895994186,0.0329226404428482,0.0596463717520237,0.0602541044354439,0.0325763672590256,0.0548891797661781,0.0545088052749634,0.0385428369045258,0.0597529001533985,0.0630740821361542,0.060188289731741,0.0497944205999374,0.0485014282166958,0.0548396296799183,0.0474867112934589,0.0483855456113815,0.048272006213665,0.0479882210493088,0.0484448708593845,0.033422339707613,0.0332249216735363,0.0367633253335953,0.0371963866055012,0.0591864511370659,0.0586266443133354,0.0564895682036877,0.0560322143137455,0.0527559295296669,0.0523263998329639,0.0475462675094604,0.0351889580488205,0.0518597513437271,0.0550283901393414,0.0553474090993404,0.0562724024057388,0.0565110705792904,0.0470517128705978,0.0469588600099087,0.0484369359910488,0.0455471314489841,0.0457634702324867,0.036540824919939,0.051483154296875,0.0525423064827919,0.0472937934100628,0.0474919863045216,0.0455344542860985,0.0463755093514919,0.0482619404792786,0.0477126091718674,0.0420452356338501,0.0387176498770714,0.039597537368536,0.0432965233922005,0.0378118790686131,0.0393772348761559,0.0388134606182575,0.0400375463068485,0.0406235195696354,0.0418323688209057,0.0435393676161766,0.0449409149587154,0.0449843443930149,0.0442634783685207,0.0454877987504005,0.0468482598662376,0.0431497171521187,0.0388540960848331,0.0420254059135914,0.0379814654588699, 0.0388836711645126,0.0405762083828449,0.0420276112854481,0.0438253730535507,0.0379501208662987,0.0464935377240181,0.0470876507461071,0.0479562990367413,0.0428505316376686,0.0432538129389286,0.0440746434032917,0.043167881667614,0.0358535051345825,0.0463173091411591,0.0455583706498146,0.0473006889224052,0.0433365665376186,0.0436598360538483,0.041830450296402,0.0425897315144539,0.0429352596402168,0.0446554943919182,0.0444185100495815,0.0478337593376637,0.0489576756954193,0.0458226874470711,0.0455644465982914,0.0451333113014698,0.0450351312756538,0.0444156192243099,0.04610550776124,0.0441313832998276,0.0450423546135426,0.0474513657391071,0.0425930954515934,0.0418335050344467,0.0427580513060093,0.0435871928930283,0.0469574220478535,0.0477113723754883,0.0432335324585438,0.03575224801898,0.0422356687486172,0.0439734980463982,0.0452122874557972,0.0419878959655762,0.0434043630957603,0.0424181818962097,0.0476711951196194,0.0470606423914433,0.0485476925969124,0.0440369583666325,0.0443284660577774,0.0432426556944847,0.0444737486541271,0.0441686771810055,0.0458097457885742,0.0439906790852547,0.0467772446572781,0.0438812710344791,0.0452282652258873,0.0449860095977783,0.0453792065382004,0.0476871356368065,0.0482325255870819,0.0461746491491795,0.0417544841766357,0.0429480746388435,0.0392320193350315,0.0384102240204811,0.037625715136528,0.0392917655408382,0.0385116524994373,0.0399314872920513,0.040337935090065,0.0414942279458046,0.0446748659014702,0.0447062738239765,0.0433738604187965,0.0440853387117386,0.04347088560462,0.0471675954759121,0.0453428402543068,0.0417539440095425,0.0385626032948494,0.0376894623041153,0.0385972186923027,0.0403062179684639,0.0417737476527691,0.0438350588083267,0.0378008708357811,0.0464474521577358,0.0470256581902504,0.0479054264724255,0.0426812805235386,0.0431039035320282,0.0439547300338745,0.0359450168907642,0.0431542471051216,0.0455041453242302,0.0462410636246204,0.0472339168190956,0.0431707948446274,0.0435150414705276,0.0422635935246944,0.0415555536746979,0.0426978245377541,0.0444945953786373,0.0443046689033508, 0.0453293025493622,0.045503132045269,0.0486048869788647,0.0449728332459927,0.044301874935627,0.0448818653821945,0.0458832271397114,0.0472133979201317,0.0448503606021404,0.0439546369016171,0.0423831306397915,0.0434070527553558,0.0425996817648411,0.041539017111063,0.0469246916472912,0.04325220733881,0.0476763360202312,0.0422559827566147,0.035848829895258,0.04379603266716,0.0450015254318714,0.0432388633489609,0.0417218655347824,0.0422676876187325,0.0476168803870678,0.0470242872834206,0.0485067889094353,0.0438692346215248,0.426967233419418,0.0432997718453407,0.427755177021027,0.0439979955554008,0.0456666573882103,0.421029776334763,0.0463924035429955 } Transform: *16 { a: 1.2402969159731e-006,-1.27428575549449e-006,0.999999999997432,0,0.99549886814286,0.0947735896485261,-1.11394550756451e-006,0,-0.0947735896470626,0.995498868141555,1.38609737697838e-006,0,-40.9408718012017,-5.17448571803319,-0.0375229850015662,1 } TransformLink: *16 { a: 1.24029687904964e-006,0.995498838507016,-0.0947735868256679,0,-1.27428571756205e-006,0.0947735868273431,0.995498838507936,0,0.999999999999406,-1.1139455075667e-006,1.38609737698111e-006,0,0.0375671700638182,41.2469948552473,1.27108130581873,1 } } Deformer: 137712928, "SubDeformer::Cluster_Spine1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1066 { a: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5301,5302,5308,5310,5315,5316,5317,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5339,5340,5341,5342,5343,5344,5345,5346,5347,5353,5354,5355,5356,5357,5377,5378,5385,5390,5392,5393,5422,5435,5436,5440,5441,5442,5445,5446,5461,5468,5469,5470,5476,5481,5482,5530,5531,5739,5740,5741,5742,5746,5747,5748,5749,5750,5751,5752,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5769,5770,5772,5773,5774,5775,5776,5777,5778,5779,5780,5782,5786,5787,5788,5808,5809,5816,5821,5823,5824,5852,5866,5870,5871,5872,5875,5876,5891,5892,5899,5910,5911,5959,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6544,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6571,6575,6579,6581,6583,6584,6585,6586,6593,6594,6596,6597,6598,6599,6600,6603,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6632,6634,6657,6658,6660,6661,6668,6671,6672,6673,6675,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6717,6718,6719,6720,6721,6727,6736,6737,6738,6739,6740,6742,6743,6744,6745,6751,6752,6754,6755,6756,6757,6758,6759,6762,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788, 6789,6790,6792,6794,6795,6796,6815,6816,6818,6819,6825,6828,6829,6830,6831,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6865,6884,6885,6886,6887,6888,6889,6891,6892,6893,6894,6895,6896,6897,6898,6899,6901,6902,6905,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10112,10116,10128,10129,10130,10131,10132,10133,10134,10135,10136,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10216,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10275,10276,10277,10284,10285,10286,10287,10288,10289,10338,10339,10448,10449,10456,10470,10471,10483,10484,10485,10486,10490,10550,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10670,10677,10685, 10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10771,10772,10876,10877,10888,10895,10896,10897,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,10974,10977,10978,10979,10981,10982,10984,10985,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11186,11187,11188,11189,11190,11191,11192 } Weights: *1066 { a: 0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0160846933722496,0.0164203029125929,0.0159657876938581,0.0154251707717776,0.0168652925640345,0.0166946854442358,0.0172978769987822,0.0174098424613476,0.0175959542393684,0.0179028194397688,0.0176764037460089,0.0180323757231236,0.0175203327089548,0.0177715346217155,0.0171755701303482,0.0172060579061508,0.0167375691235065,0.0164956580847502,0.0163211673498154,0.0158238299190998,0.0160321909934282,0.0153556959703565,0.0159447863698006,0.015207638964057,0.0128046330064535,0.0123249804601073,0.0134784216061234,0.0141613502055407,0.0146538205444813,0.0148128774017096,0.0146015761420131,0.0140923066064715,0.0134314354509115,0.0127910561859608,0.0123281786218286,0.0121562043204904,0.0129481069743633,0.0126527966931462,0.0133569296449423,0.0137679995968938,0.0140651864930987,0.0141647066920996,0.0140419183298945,0.0137354964390397,0.0133314346894622,0.012936201877892,0.0126501396298409,0.0125458519905806,0.0167935136705637,0.0133372796699405,0.4118632376194,0.435128420591354,0.452331721782684,0.309406131505966,0.449244529008865,0.0940441563725472,0.407361507415771,0.404217571020126,0.421248406171799,0.409840732812881,0.392953753471375,0.428104996681213,0.405013799667358,0.0706687644124031,0.499827414751053,0.496607095003128,0.374263346195221,0.571578025817871,0.405000001192093,0.269432663917542,0.249056547880173,0.5,0.394996881484985,0.384848088026047,0.389729768037796,0.334900081157684,0.293396413326263,0.328714191913605,0.398442834615707,0.32771834731102,0.0595257952809334,0.0552126057446003,0.454701125621796,0.40461653470993,0.4881192445755,0.347358107566834,0.35251322388649,0.440273106098175,0.308558940887451,0.391451150178909,0.371111899614334,0.507824063301086,0.489344775676727,0.339798629283905, 0.363848000764847,0.356653660535812,0.403677821159363,0.446302890777588,0.415230363607407,0.0906204208731651,0.0889278724789619,0.412925362586975,0.449999988079071,0.0518114231526852,0.0728756785392761,0.0594516582787037,0.0610590726137161,0.0579790323972702,0.477428883314133,0.401172369718552,0.389459520578384,0.377351671457291,0.502477288246155,0.389182537794113,0.428046405315399,0.387773752212524,0.402254194021225,0.485787153244019,0.0524009801447392,0.404599189758301,0.42209380865097,0.410691499710083,0.393934220075607,0.428258091211319,0.405008465051651,0.499823004007339,0.496008574962616,0.376370757818222,0.384699434041977,0.0788780599832535,0.341655790805817,0.348720580339432,0.5,0.396044343709946,0.385793387889862,0.390573292970657,0.378742516040802,0.348475426435471,0.358005672693253,0.379805535078049,0.353024065494537,0.119299098849297,0.453788548707962,0.405600816011429,0.487848222255707,0.389860063791275,0.426657408475876,0.441065758466721,0.30920135974884,0.392572522163391,0.34356015920639,0.359241247177124,0.341385185718536,0.366231173276901,0.358353018760681,0.349766403436661,0.446171700954437,0.413984596729279,0.390668451786041,0.0912416279315948,0.412029325962067,0.0845936164259911,0.0729723423719406,0.0587323158979416,0.447466403245926,0.438775271177292,0.497988551855087,0.492459923028946,0.482212215662003,0.0798316299915314,0.0531247593462467,0.0527055263519287,0.0659925639629364,0.0599521771073341,0.0557822063565254,0.0600882656872272,0.0715308338403702,0.0537794753909111,0.0618537701666355,0.0668433904647827,0.0528572015464306,0.0730938166379929,0.00181005604099482,0.00221109134145081,0.00119374599307776,0.00146303232759237,0.00136578513775021,0.00223155738785863,0.0690709576010704,0.0473786555230618,0.0920473039150238,0.0891687572002411,0.0381028018891811,0.00387158431112766,0.00251820357516408,0.00166320090647787,0.00180311361327767,0.00113617500755936,0.00619343807920814,0.0186367426067591,0.00111796089913696,0.00189601548481733,0.00200709118507802,0.00302449869923294,0.00478658778592944,0.00123879930470139, 0.00197416427545249,0.00173406291287392,0.0183619633316994,0.0167030841112137,0.0173190552741289,0.0156179061159492,0.0506496839225292,0.050516739487648,0.0377767160534859,0.0546070151031017,0.0417194440960884,0.0459446907043457,0.0589710585772991,0.0463874600827694,0.00128481700085104,0.020310215651989,0.0542940571904182,0.0669875293970108,0.0289271455258131,0.0201205685734749,0.0398120880126953,0.0143598988652229,0.0361818224191666,0.00191568059381098,0.0531524606049061,0.0251301974058151,0.0691704824566841,0.0520155392587185,0.0624980665743351,0.0755863040685654,0.0785739421844482,0.0241166241466999,0.0203430224210024,0.0184384100139141,0.0401647128164768,0.00786753464490175,0.0217073261737823,0.089838333427906,0.0157315582036972,0.0600272752344608,0.0427021160721779,0.0384004004299641,0.0568193718791008,0.0522586293518543,0.035638190805912,0.0346027687191963,0.0764086619019508,0.0884695127606392,0.0188344158232212,0.070174053311348,0.0326588302850723,0.0264596547931433,0.0506513118743896,0.01990070566535,0.0195501185953617,0.028569471091032,0.0360912568867207,0.0218110550194979,0.0160472877323627,0.0184787679463625,0.0352999679744244,0.0516716316342354,0.00237905723042786,0.00159102503675967,0.0226545855402946,0.0271457750350237,0.0474893748760223,0.0645274966955185,0.0529851205646992,0.0228720381855965,0.0246643126010895,0.0471772253513336,0.0649261623620987,0.0203444454818964,0.0275691486895084,0.0192651394754648,0.0189470537006855,0.0246421601623297,0.01800193823874,0.0357401669025421,0.0506223030388355,0.0174189861863852,0.0172808524221182,0.0165687892585993,0.0133684435859323,0.0363536477088928,0.0501126907765865,0.0500063300132751,0.0454842299222946,0.0584978610277176,0.045951172709465,0.0012955809943378,0.0180803369730711,0.0527493879199028,0.0667149424552917,0.0293978601694107,0.0208155307918787,0.0405387282371521,0.0133866406977177,0.04086684435606,0.0363172851502895,0.0116078825667501,0.0158129744231701,0.0509919971227646,0.0182479619979858,0.0257603283971548,0.0683596357703209,0.0512992851436138,0.0617051981389523, 0.0748262330889702,0.0815390720963478,0.0236504841595888,0.0202212948352098,0.0184010080993176,0.0407758466899395,0.0176970455795527,0.0173410214483738,0.0224231835454702,0.0889244079589844,0.0594708025455475,0.0424453541636467,0.0379730463027954,0.0561151020228863,0.0516486801207066,0.0352943167090416,0.0342671312391758,0.0758966356515884,0.0880906879901886,0.0187969096004963,0.0702414438128471,0.0320881120860577,0.0261492505669594,0.0499122962355614,0.0198557674884796,0.0195044167339802,0.028232004493475,0.0354873239994049,0.0216745641082525,0.0166845489293337,0.01869329623878,0.0197165627032518,0.018470698967576,0.0349537320435047,0.0510836020112038,0.0024017239920795,0.00161671859677881,0.0228383634239435,0.00963364727795124,0.0218189973384142,0.0476066395640373,0.066476434469223,0.0533930957317352,0.0226607136428356,0.0244316216558218,0.046758908778429,0.0641279742121696,0.0238656513392925,0.0182043109089136,0.0171894691884518,0.0393313504755497,0.0524248778820038,0.0163537990301847,0.0491573363542557,0.0539665594696999,0.052042193710804,0.0551500394940376,0.0565586723387241,0.0413413755595684,0.00491613335907459,0.00462120585143566,0.00493934098631144,0.0395209453999996,0.0472693964838982,0.0580320283770561,0.0528250709176064,0.0546943955123425,0.0498614907264709,0.0141710704192519,0.0384655743837357,0.0153101915493608,0.0204608496278524,0.0201338287442923,0.0194478500634432,0.0189187098294497,0.0184417404234409,0.0204847734421492,0.0195690207183361,0.0189714375883341,0.0187409352511168,0.0184062235057354,0.0201160330325365,0.0121795358136296,0.01349903549999,0.0223800241947174,0.0190002582967281,0.023339007049799,0.0263351127505302,0.0235265847295523,0.0271546300500631,0.0213052537292242,0.0235639810562134,0.025151539593935,0.0246744081377983,0.0207709092646837,0.0228502154350281,0.0254615023732185,0.0245288666337729,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0610730834305286,0.0480313338339329, 0.0657686740159988,0.0603674054145813,0.0632295534014702,0.0655892416834831,0.056696955114603,0.0630388557910919,0.0597760379314423,0.0569867044687271,0.0520362481474876,0.0575678944587708,0.0568820908665657,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0624931752681732,0.0608663484454155,0.0741311311721802,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0579049400985241,0.0732160955667496,0.073155365884304,0.25,0.25,0.25,0.0630910694599152,0.075778141617775,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0633393228054047,0.0602369867265224,0.0572502575814724,0.25,0.0582733973860741,0.0463946387171745,0.0345158390700817,0.0634916201233864,0.0606879107654095,0.0570367276668549,0.0573146566748619,0.0601356104016304,0.0634386166930199,0.0521964766085148,0.25,0.0571960285305977,0.0579383820295334,0.25,0.25,0.25,0.25,0.25,0.25,0.0628122016787529,0.0741900429129601,0.0608696937561035,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.0731783211231232,0.25,0.25,0.25,0.063268169760704,0.25,0.25,0.25,0.25,0.0605871565639973,0.0575619041919708,0.25,0.0585609637200832,0.0125644169747829,0.0161781385540962,0.0946971252560616,0.113065972924232,0.0955591946840286,0.113255612552166,0.115407161414623,0.0166719518601894,0.111046440899372,0.114557966589928,0.115057192742825,0.134647995233536,0.118201650679111,0.10340691357851,0.0990749299526215,0.0968202129006386,0.0956590920686722,0.0955270379781723,0.0956348106265068,0.0974334701895714,0.0942233800888062,0.0941582396626472,0.0963840037584305,0.102147005498409,0.0968629568815231,0.0958827063441277,0.0953153520822525,0.0952657982707024,0.0954933315515518,0.0947557613253593,0.094863660633564,0.0943074598908424,0.0947857350111008,0.0932449623942375,0.0943935662508011,0.0960135459899902,0.0962416753172874,0.096434086561203,0.0970151573419571,0.0969958752393723,0.0975823402404785,0.0983297526836395,0.0963755026459694,0.0478864125907421,0.0472911819815636,0.0966922789812088,0.0968846678733826,0.0468310043215752,0.0975888222455978,0.0479436703026295,0.0976556986570358,0.0982761457562447,0.0453936643898487,0.0829939991235733, 0.131572216749191,0.095733642578125,0.0931219086050987,0.0330649577081203,0.111474379897118,0.0940181314945221,0.0138383228331804,0.0954996421933174,0.0963278412818909,0.0489871390163898,0.0639310702681541,0.116211578249931,0.0943464785814285,0.0959200859069824,0.0470763146877289,0.047386534512043,0.115750454366207,0.0459373705089092,0.0615078397095203,0.114474974572659,0.0102072861045599,0.114212065935135,0.107755355536938,0.108900405466557,0.113887831568718,0.0153199834749103,0.0134717989712954,0.331447571516037,0.0140763055533171,0.0571444295346737,0.115523591637611,0.0114414868876338,0.121026553213596,0.0150303114205599,0.0986424684524536,0.0156874470412731,0.0176794230937958,0.0991439148783684,0.0458248779177666,0.115556560456753,0.0121582960709929,0.00145241722930223,0.00110338255763054,0.0189089998602867,0.0985106527805328,0.107939377427101,0.113377869129181,0.115028515458107,0.0350148677825928,0.112978167831898,0.0912709683179855,0.115363225340843,0.0318216159939766,0.110598295927048,0.0288906805217266,0.103646159172058,0.117995038628578,0.0993009060621262,0.0958817303180695,0.0970390737056732,0.0958659276366234,0.0957623273134232,0.0975157767534256,0.0964478775858879,0.0942511260509491,0.0943288579583168,0.0971035063266754,0.102390080690384,0.0955712720751762,0.0961361154913902,0.0957473963499069,0.0955247059464455,0.0949553698301315,0.0950683504343033,0.0944903567433357,0.0949619114398956,0.0933806076645851,0.0945300683379173,0.0965021103620529,0.096266895532608,0.0972602441906929,0.0966887548565865,0.0971979051828384,0.0977544412016869,0.0984711647033691,0.0966334342956543,0.0969574153423309,0.0473992563784122,0.0483118109405041,0.097144216299057,0.0978377535939217,0.0469192080199718,0.0978628695011139,0.0479916408658028,0.0984536111354828,0.0455138795077801,0.0759637728333473,0.095848985016346,0.0932484567165375,0.0500443838536739,0.111272752285004,0.0941459313035011,0.0148799484595656,0.0956147909164429,0.0963888987898827,0.1161749958992,0.0639409199357033,0.0490578524768353,0.0944396182894707,0.0474578179419041, 0.0471202805638313,0.0960363075137138,0.0460279919207096,0.11594096571207,0.0959390848875046,0.113968148827553,0.113645575940609,0.108573324978352,0.107358492910862,0.0231448579579592,0.0258436370640993,0.108174778521061,0.100355915725231,0.0570258460938931,0.0962649509310722,0.115307062864304,0.10031446069479,0.120918855071068,0.0240998882800341,0.0352719128131866,0.098014697432518,0.0254631005227566,0.098651260137558,0.115753903985024,0.0459173731505871,0.00128815008793026,0.00187792407814413,0.00138435524422675,0.0017597529804334,0.0464554391801357,0.0474064983427525,0.0470624417066574,0.0466079525649548,0.0455350130796433,0.0468212924897671,0.0437308289110661,0.0440183058381081,0.0454256609082222,0.0454010963439941,0.0361616723239422,0.0436928942799568,0.043303482234478,0.03602509573102,0.0482787489891052,0.047590360045433,0.0465318225324154,0.0479768924415112,0.0442606769502163,0.0457951314747334,0.0483870916068554,0.0478363074362278,0.0477668158710003,0.0483069196343422,0.0367880687117577,0.0436840392649174,0.0369462110102177,0.0368062853813171,0.0470705032348633,0.0474236905574799,0.046487208455801,0.0466318503022194,0.0468555018305779,0.0457513518631458,0.0437558144330978,0.0455028414726257,0.0456418693065643,0.0441100299358368,0.0433482155203819,0.0437701754271984,0.0268096122890711,0.025440776720643,0.0119284018874168,0.0146921891719103,0.0483344532549381,0.0465798899531364,0.0480228587985039,0.0443773195147514,0.0455287732183933,0.0267925076186657,0.0436607450246811,0.0281855668872595,0.0224408134818077,0.048752348870039,0.047987125813961,0.0177878737449646,0.0201244056224823,0.0212911684066057,0.0216138940304518,0.0159024260938168,0.0382708534598351,0.0297725424170494,0.0208371076732874,0.0259721092879772,0.037489291280508,0.0253221485763788,0.0119044473394752,0.0110253505408764,0.0170450117439032,0.0180079024285078,0.0295708458870649,0.019897572696209,0.0265107657760382,0.0362237952649593,0.0424570478498936,0.0366268083453178,0.0421036295592785,0.0370111688971519,0.0360145717859268,0.0358593687415123, 0.0354854501783848,0.0213343035429716,0.0219551715999842,0.0275051966309547,0.0315192379057407,0.0366171412169933,0.0375544615089893,0.0425509549677372,0.04792245849967,0.0371451638638973,0.0319571644067764,0.0312190800905228,0.0285049546509981,0.0303987730294466,0.0430089570581913,0.04224693775177,0.0362669602036476,0.0455471314489841,0.0457634702324867,0.0380893014371395,0.0421890206634998,0.0401321649551392,0.0402174852788448,0.0449648573994637,0.0438278988003731,0.048929788172245,0.0491268672049046,0.0377959571778774,0.034326296299696,0.0331560783088207,0.0366695560514927,0.032829862087965,0.0312358327209949,0.0328594297170639,0.0316329225897789,0.0337643548846245,0.0326298214495182,0.0279203932732344,0.0363381430506706,0.0310495290905237,0.028650401160121,0.0452901385724545,0.0487910769879818,0.0508548691868782,0.035187091678381,0.0386115312576294,0.0337366759777069,0.0337099097669125,0.0345613844692707,0.0353715158998966,0.0502113327383995,0.0541133023798466,0.0481908470392227,0.0475474782288074,0.0479730777442455,0.0428487621247768,0.0432051122188568,0.0439012609422207,0.0495737344026566,0.0548233762383461,0.0470600426197052,0.0479314848780632,0.0474002063274384,0.0433365665376186,0.0436579845845699,0.0344199351966381,0.0330208316445351,0.0354295782744884,0.0412854179739952,0.0443773530423641,0.0372496731579304,0.030983192846179,0.0308753717690706,0.0365771092474461,0.0414599291980267,0.0419258736073971,0.0443407259881496,0.0271183177828789,0.0270751696079969,0.0279165171086788,0.0283128377050161,0.0307662542909384,0.0326637551188469,0.0284421108663082,0.0283898822963238,0.0488329380750656,0.0487452857196331,0.0516017079353333,0.0552499406039715,0.0516585372388363,0.0262685399502516,0.0259816572070122,0.0343030691146851,0.0272527150809765,0.0290697049349546,0.0481483936309814,0.0489150248467922,0.0485729686915874,0.0440369583666325,0.0443004779517651,0.0529002211987972,0.0444244109094143,0.0422025732696056,0.0433992557227612,0.0430087298154831,0.0371259637176991,0.0356947109103203,0.0366935394704342,0.0428103283047676, 0.0448220446705818,0.0490759424865246,0.0488878265023232,0.0436882935464382,0.0376130416989326,0.0364996418356895,0.0329779572784901,0.0341395400464535,0.0325955376029015,0.0309378877282143,0.0327054634690285,0.0313573144376278,0.0336268469691277,0.0325021110475063,0.0309654697775841,0.0362372621893883,0.0277648419141769,0.0284956824034452,0.0510877929627895,0.0490892678499222,0.0451494082808495,0.0384254641830921,0.0349950790405273,0.0335587300360203,0.0335502773523331,0.0344194956123829,0.0352435037493706,0.0500917658209801,0.0535659939050674,0.0481077879667282,0.0474749654531479,0.0479218363761902,0.04267967492342,0.0430561415851116,0.0437839739024639,0.0545541681349278,0.0494237542152405,0.0478241555392742,0.046966340392828,0.0473311729729176,0.0431707948446274,0.043513223528862,0.0329000502824783,0.0342921055853367,0.0353162884712219,0.0411745198071003,0.044264130294323,0.0364803969860077,0.0307964682579041,0.0309248808771372,0.041353452950716,0.0442280955612659,0.0418182425200939,0.0269630569964647,0.0281666107475758,0.0277667213231325,0.026924280449748,0.0305882766842842,0.0282064899802208,0.0282657127827406,0.0325478427112103,0.0487661845982075,0.0514672324061394,0.0486907325685024,0.0515044741332531,0.0549807958304882,0.0261166952550411,0.0258255377411842,0.027095315977931,0.0341812409460545,0.0288916807621717,0.0480824448168278,0.0488349907100201,0.0485314689576626,0.0438692346215248,0.426702290773392,0.0527382120490074,0.427288204431534,0.0420678332448006,0.0432938933372498,0.411774486303329,0.0439190529286861 } Transform: *16 { a: 1.03960773990488e-006,-1.16456312118296e-006,0.999999999997726,0,0.980749677729069,0.195269132266046,-7.92191753949556e-007,0,-0.195269132265112,0.980749677727561,1.34514825497483e-006,0,-44.7250186963504,-9.75817513334512,-0.0375375437398338,1 } TransformLink: *16 { a: 1.03960777693329e-006,0.980749712661095,-0.195269139220145,0,-1.16456316266469e-006,0.195269139221532,0.98074971266186,0,0.999999999999837,-7.92191753951227e-007,1.34514825497767e-006,0,0.0375726762057927,45.7695196641321,0.836911606184657,1 } } Deformer: 137714064, "SubDeformer::Cluster_L_Thigh1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1213 { a: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511,6512,6513,6520,6522,6539,6540,6541,6542,6543,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659,6662,6663,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6703,6704,6706,6707,6708,6709,6710,6711,6715,6717,6718,6719,6720,6721,6727,6736,6737,6739,6740,6742,6743,6744,6745,6754,6755,6756,6757,6758,6759,6760,6761,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6786,6787,6788,6789,6790,6792,6794,6795,6796,6815,6816,6817,6823,6824,6825,6828,6829,6830,6832,6833,6834,6835,6836,6837,6841,6842,6843,6844,6845,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6884,6885,6886,6887,6888,6889,6890,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6909,6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136, 9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9224,9225,9228,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9337,9338,9340,9341,9342,9343,9344,9345,9346,9350,9351,9352,9353,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9387,9388,9389,9390,9391,9394,9395,9396,9397,9398,9401,9402,9403,9404,9405,9406,9407,9408,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572, 9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9678,9679,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9830,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,10942,10943,10944,10945,10946,10947,10948,10949,10950,10952,10953,10958,10959,10960,10961,10962,10963,10966,10967,10968,10969,10970,10971,10972,10974,10987,10988,10989,10992,11002,11003,11004,11005,11006,11007,11010,11011,11012,11013,11014,11019,11021,11024,11025,11026,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11046,11047,11048,11049,11050,11051,11057,11058,11059,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11092,11093,11094,11095,11096,11100,11101,11103,11104,11105,11106, 11107,11108,11109,11110,11186,11188,11191 } Weights: *1213 { a: 0.485887348651886,0.485664427280426,0.486068248748779,0.486428737640381,0.485347807407379,0.48554915189743,0.485024094581604,0.485015153884888,0.484783440828323,0.484618633985519,0.484691768884659,0.48446998000145,0.484771847724915,0.484603881835938,0.484998911619186,0.484975725412369,0.485310763120651,0.485482156276703,0.48562553524971,0.485992193222046,0.485862076282501,0.486377358436584,0.485958486795425,0.486538648605347,0.488901674747467,0.489226847887039,0.488413363695145,0.487895905971527,0.487497180700302,0.487329483032227,0.487433940172195,0.487773805856705,0.488253176212311,0.488746970891953,0.48913100361824,0.489307641983032,0.488778561353683,0.488978236913681,0.488482058048248,0.488169342279434,0.487927585840225,0.487823575735092,0.487883865833282,0.488089084625244,0.488382279872894,0.488686174154282,0.488922417163849,0.489029705524445,0.485335648059845,0.488437861204147,0.00416137091815472,0.0277236085385084,0.00643570115789771,0.0121639529243112,0.00909974239766598,0.00479171518236399,0.00500419642776251,0.0411929301917553,0.172316744923592,0.017515791580081,0.0122600849717855,0.0147061124444008,0.0363224595785141,0.00548371067270637,0.00576615380123258,0.00444313138723373,0.0309221986681223,0.0243861526250839,0.0407855473458767,0.0334193743765354,0.0287858210504055,0.0404290556907654,0.0133521696552634,0.0153562361374497,0.00394795602187514,0.294720143079758,0.332147061824799,0.451189517974854,0.440738648176193,0.52694171667099,0.56053215265274,0.0710113123059273,0.0754943490028381,0.0762333571910858,0.0324223935604095,0.0426231101155281,0.0419300906360149,0.054236363619566,0.0367760732769966,0.04872802272439,0.0433972254395485,0.0314307063817978,0.0425226949155331,0.0682456791400909,0.0300944074988365,0.0210858918726444,0.474399924278259,0.484295248985291,0.471498638391495,0.486365467309952,0.523557245731354,0.619279742240906,0.495875418186188,0.440913885831833,0.57122141122818,0.46727055311203,0.796168506145477,0.768812656402588,0.275839567184448,0.51499605178833,0.0743753090500832, 0.198682188987732,0.411301642656326,0.529948353767395,0.479820847511292,0.500937938690186,0.0263245217502117,0.0424249768257141,0.0316543057560921,0.0201548170298338,0.522229611873627,0.678726494312286,0.66076672077179,0.173374861478806,0.30635866522789,0.916980922222137,0.150171235203743,0.0270051024854183,0.595347344875336,0.0752822607755661,0.0772483572363853,0.461545795202255,0.492276847362518,0.482892215251923,0.200412526726723,0.184160679578781,0.319056957960129,0.78528881072998,0.516901075839996,0.535338282585144,0.506751537322998,0.510367870330811,0.586331486701965,0.485847264528275,0.0350798517465591,0.0520882494747639,0.0562988594174385,0.0380594171583653,0.0421464815735817,0.0588397644460201,0.0591345317661762,0.0170080959796906,0.00808634608983994,0.0766877830028534,0.411884099245071,0.059490691870451,0.0679867044091225,0.0484188869595528,0.0754582211375237,0.0759724006056786,0.0657854825258255,0.0559916496276855,0.0736488029360771,0.591260671615601,0.889732003211975,0.487271994352341,0.498950868844986,0.479613840579987,0.785834491252899,0.572824597358704,0.708657145500183,0.82976233959198,0.885602414608002,0.511381566524506,0.889257073402405,0.876482963562012,0.872237324714661,0.858885586261749,0.69885516166687,0.712929487228394,0.754870116710663,0.826089322566986,0.498461186885834,0.796081304550171,0.862102627754211,0.716035425662994,0.776793837547302,0.468493312597275,0.370141059160233,0.935255467891693,0.0588337853550911,0.0423679687082767,0.364401966333389,0.409932792186737,0.502030313014984,0.424725890159607,0.206638872623444,0.423550963401794,0.47427025437355,0.512981176376343,0.535405337810516,0.478230774402618,0.450324267148972,0.350229740142822,0.15829062461853,0.437203019857407,0.072347916662693,0.0704113468527794,0.047590609639883,0.0304904915392399,0.219705045223236,0.453156352043152,0.565890371799469,0.696279883384705,0.459840565919876,0.470807462930679,0.0758446231484413,0.0758962407708168,0.19060306251049,0.814237117767334,0.589112102985382,0.650303483009338,0.479312092065811,0.0765506327152252, 0.0573959946632385,0.0422562398016453,0.00594675494357944,0.0069339326582849,0.00750571070238948,0.00675412360578775,0.00756251020357013,0.0105591025203466,0.00956473592668772,0.0109887747094035,0.0118240602314472,0.0225534420460463,0.0116446474567056,0.0156345162540674,0.0126503072679043,0.0184017214924097,0.02912762388587,0.00835435185581446,0.010559193789959,0.013892981223762,0.0155445421114564,0.00457817409187555,0.00558604719117284,0.00587162794545293,0.00433524837717414,0.00438852561637759,0.00434144446626306,0.0155169852077961,0.0101993773132563,0.0118669904768467,0.0128709143027663,0.0612366311252117,0.0660941079258919,0.00496103381738067,0.00530405156314373,0.00533060822635889,0.00517881009727716,0.00564287463203073,0.00555076450109482,0.00627115042880178,0.00655965972691774,0.00349594838917255,0.00450626295059919,0.0270621012896299,0.0077071120031178,0.00553002953529358,0.0046713505871594,0.00450748903676867,0.00562692666426301,0.00778896035626531,0.00455631455406547,0.00974517222493887,0.0224243085831404,0.0199902169406414,0.0152868358418345,0.00588500546291471,0.00600074883550406,0.035562451928854,0.0668709725141525,0.0528643541038036,0.0286797415465117,0.00771835539489985,0.0144776906818151,0.0277420245110989,0.0613043904304504,0.0195530038326979,0.00477746222168207,0.00492516811937094,0.00538024539127946,0.00471328524872661,0.0245123784989119,0.00481082545593381,0.00498686451464891,0.00863044243305922,0.0080834086984396,0.945337295532227,0.575647234916687,0.877002120018005,0.951153039932251,0.913577795028687,0.906828939914703,0.848201870918274,0.911503732204437,0.92016065120697,0.501849293708801,0.516874551773071,0.485665053129196,0.90837961435318,0.510997176170349,0.576061427593231,0.504615783691406,0.50214034318924,0.927559852600098,0.463518470525742,0.459303140640259,0.458389520645142,0.453536838293076,0.437261372804642,0.414019107818604,0.33054906129837,0.0297942794859409,0.0283474512398243,0.0212143678218126,0.0201682690531015,0.0177914928644896,0.501258254051209,0.48866793513298,0.470411956310272, 0.709233701229095,0.659839570522308,0.487657696008682,0.317249894142151,0.591846823692322,0.728317379951477,0.0744952410459518,0.0745085701346397,0.0748612061142921,0.0743759348988533,0.073490247130394,0.068679578602314,0.00504661211743951,0.00530615448951721,0.00626524724066257,0.00732154585421085,0.010610961355269,0.475530505180359,0.457699716091156,0.394022941589355,0.431551843881607,0.416367381811142,0.316126555204391,0.381182998418808,0.368567585945129,0.43494439125061,0.470878392457962,0.407958835363388,0.39290863275528,0.484929203987122,0.496927618980408,0.480869024991989,0.490965217351913,0.490739345550537,0.486781388521194,0.484060883522034,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.485513746738434,0.464017033576965,0.538316786289215,0.595498383045197,0.621743261814117,0.549961924552917,0.665306329727173,0.569559574127197,0.692502319812775,0.582057178020477,0.701874971389771,0.585762798786163,0.554784119129181,0.538209557533264,0.562252759933472,0.564088642597198,0.517423331737518,0.510753870010376,0.528257966041565,0.531076014041901,0.504643619060516,0.510926067829132,0.503247678279877,0.50249171257019,0.541680872440338,0.569454193115234,0.497938424348831,0.500130176544189,0.515246391296387,0.495763182640076,0.456928491592407,0.396899402141571,0.353381723165512,0.434999793767929,0.276955157518387,0.393005788326263,0.252266436815262,0.366692423820496,0.41437640786171,0.451891839504242,0.395257085561752,0.480457574129105,0.490162223577499,0.47022956609726,0.464729964733124,0.48442354798317,0.481425791978836,0.482649832963943,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.469599843025208,0.438429415225983,0.53112256526947,0.542715907096863,0.613118171691895,0.58654773235321,0.563611149787903,0.658518671989441,0.578721225261688,0.688739597797394,0.549276292324066,0.531564772129059,0.559191882610321,0.521686553955078,0.506235778331757,0.512114107608795,0.524585604667664,0.506911396980286,0.502553522586823,0.502240002155304,0.533898293972015, 0.560736835002899,0.491795599460602,0.499462336301804,0.509774446487427,0.42494809627533,0.385932326316834,0.304804563522339,0.46055144071579,0.484394311904907,0.629915058612823,0.60269969701767,0.675524175167084,0.704133987426758,0.708353340625763,0.574112117290497,0.543562710285187,0.500358045101166,0.497666716575623,0.516063213348389,0.386784434318542,0.262241989374161,0.234151259064674,0.432636260986328,0.467396587133408,0.594870746135712,0.622586846351624,0.669934093952179,0.701067090034485,0.566249370574951,0.536252975463867,0.490995824337006,0.499499768018723,0.510661065578461,0.777069509029388,0.838457345962524,0.843078911304474,0.838057816028595,0.820897698402405,0.821104645729065,0.695372998714447,0.705706894397736,0.698846876621246,0.825857758522034,0.49937179684639,0.499444335699081,0.0497633591294289,0.0401905253529549,0.264088690280914,0.032361127436161,0.123556450009346,0.100497841835022,0.0158163420855999,0.195913910865784,0.283509016036987,0.274690121412277,0.157025143504143,0.138220191001892,0.192927986383438,0.208784431219101,0.107422702014446,0.101228043437004,0.0723254308104515,0.0319409519433975,0.0365838967263699,0.0275654830038548,0.0399823375046253,0.125946879386902,0.156849190592766,0.187684044241905,0.294972240924835,0.272793799638748,0.243949249386787,0.252712398767471,0.191005766391754,0.17241595685482,0.289673149585724,0.248418867588043,0.269982844591141,0.171875,0.250535398721695,0.296302527189255,0.274216443300247,0.0569527558982372,0.0694819986820221,0.0514626353979111,0.0695202350616455,0.272596299648285,0.243082493543625,0.0595687702298164,0.224856480956078,0.0474274083971977,0.263241499662399,0.146489635109901,0.248953223228455,0.216691300272942,0.138497024774551,0.130280002951622,0.214497163891792,0.194414034485817,0.043913759291172,0.0606266558170319,0.0890660583972931,0.106618732213974,0.127299964427948,0.123955383896828,0.110864944756031,0.0777153521776199,0.0856007188558578,0.101434029638767,0.182961791753769,0.171248659491539,0.193611741065979,0.726457953453064,0.767273843288422, 0.949329018592834,0.947693228721619,0.967044532299042,0.735820055007935,0.937262535095215,0.931118547916412,0.614502966403961,0.471627980470657,0.859382033348084,0.806083083152771,0.875490844249725,0.610214293003082,0.480199694633484,0.554568469524384,0.85510516166687,0.743546366691589,0.777026474475861,0.969801247119904,0.937866985797882,0.932415068149567,0.949755430221558,0.973849058151245,0.919099807739258,0.907524585723877,0.885395228862762,0.895452082157135,0.910394549369812,0.88749772310257,0.480137258768082,0.587101459503174,0.573359906673431,0.484456360340118,0.488554537296295,0.887721240520477,0.895965039730072,0.85337495803833,0.121916674077511,0.0986250415444374,0.0632779374718666,0.388292282819748,0.0482536256313324,0.341414570808411,0.314487129449844,0.210128262639046,0.386271238327026,0.292671471834183,0.311388820409775,0.405498296022415,0.489171802997589,0.488262295722961,0.943245828151703,0.953772842884064,0.317680716514587,0.895645380020142,0.249509334564209,0.793233335018158,0.767973661422729,0.833147823810577,0.853008449077606,0.879653215408325,0.84781402349472,0.835546791553497,0.813656985759735,0.0672668591141701,0.0374465249478817,0.300698459148407,0.801475763320923,0.785678327083588,0.691152572631836,0.71686452627182,0.757701873779297,0.718370795249939,0.686868906021118,0.64873868227005,0.640286028385162,0.0668506473302841,0.0315555259585381,0.153499916195869,0.224143803119659,0.247747972607613,0.126997485756874,0.0675384625792503,0.220779538154602,0.304049074649811,0.23338919878006,0.130519986152649,0.0679196491837502,0.520654916763306,0.528996706008911,0.535331785678864,0.536645412445068,0.503449976444244,0.43629589676857,0.0170795656740665,0.0109098870307207,0.0372625589370728,0.0495645068585873,0.0435467474162579,0.0368288569152355,0.030829057097435,0.0521181859076023,0.0281774066388607,0.0246519558131695,0.0654876306653023,0.0794836431741714,0.0776911079883575,0.0642301216721535,0.932604014873505,0.956792771816254,0.903758704662323,0.932408511638641,0.890994369983673,0.931350827217102,0.926221489906311, 0.89261782169342,0.902318000793457,0.935380637645721,0.897907257080078,0.900025606155396,0.827858746051788,0.872521638870239,0.931344091892242,0.924168646335602,0.909043908119202,0.849918723106384,0.928871214389801,0.91679835319519,0.883535027503967,0.891045331954956,0.919581055641174,0.866308569908142,0.890310704708099,0.930200397968292,0.937199473381042,0.873727262020111,0.795832455158234,0.695792376995087,0.741214990615845,0.804432034492493,0.719383418560028,0.808071553707123,0.729966223239899,0.82585597038269,0.761204361915588,0.846185445785522,0.832377910614014,0.801839828491211,0.815158605575562,0.75330924987793,0.79405814409256,0.836123406887054,0.808602333068848,0.704605877399445,0.801938593387604,0.669931352138519,0.669257760047913,0.761446237564087,0.702609121799469,0.861849069595337,0.868935704231262,0.845203518867493,0.839983463287354,0.843391120433807,0.861060738563538,0.862018942832947,0.844989657402039,0.836595356464386,0.835583984851837,0.842704594135284,0.921156764030457,0.928623974323273,0.905190229415894,0.887703061103821,0.916462361812592,0.915394067764282,0.837085366249084,0.900297462940216,0.814340591430664,0.875716626644135,0.866847991943359,0.797539174556732,0.873098731040955,0.816916644573212,0.88154935836792,0.899577438831329,0.9063361287117,0.943336188793182,0.953912019729614,0.95522928237915,0.738879859447479,0.642723858356476,0.649845957756042,0.843090772628784,0.889018356800079,0.940876007080078,0.953361690044403,0.563094675540924,0.509984493255615,0.513836324214935,0.570927262306213,0.689336657524109,0.78424996137619,0.84540319442749,0.866505682468414,0.845664799213409,0.884104430675507,0.806906640529633,0.806087851524353,0.745548367500305,0.693888068199158,0.718158841133118,0.729863703250885,0.762996673583984,0.816202282905579,0.851645767688751,0.798132956027985,0.756100535392761,0.713165760040283,0.67433774471283,0.671584486961365,0.70308119058609,0.87847501039505,0.76934027671814,0.934174656867981,0.849386751651764,0.923826694488525,0.958262145519257,0.750459969043732,0.955860435962677, 0.56195741891861,0.507635831832886,0.512480020523071,0.572822690010071,0.686382949352264,0.783281445503235,0.843424558639526,0.940874516963959,0.861455321311951,0.804872274398804,0.869116067886353,0.874794006347656,0.88017064332962,0.825082838535309,0.655720293521881,0.525781691074371,0.524721145629883,0.95732182264328,0.954470098018646,0.954534590244293,0.942378044128418,0.926046431064606,0.906598687171936,0.905266165733337,0.912127315998077,0.897906839847565,0.890105247497559,0.891797184944153,0.882738769054413,0.933982729911804,0.938160479068756,0.90452766418457,0.884901225566864,0.846039295196533,0.768812417984009,0.766224563121796,0.961383998394012,0.958616733551025,0.958833813667297,0.948421061038971,0.907738268375397,0.858722865581512,0.812769114971161,0.79958975315094,0.640108168125153,0.816221296787262,0.566758334636688,0.525440812110901,0.672527134418488,0.694593787193298,0.863074839115143,0.879387557506561,0.847267925739288,0.855193912982941,0.825581133365631,0.835183918476105,0.89387184381485,0.886982619762421,0.866321206092834,0.884880602359772,0.860882103443146,0.818597674369812,0.842101633548737,0.776525318622589,0.742721915245056,0.676555931568146,0.637636542320251,0.806542873382568,0.868393003940582,0.884205520153046,0.849901020526886,0.834611296653748,0.835323333740234,0.82551372051239,0.809770405292511,0.80741560459137,0.824219048023224,0.819040238857269,0.85616147518158,0.91714471578598,0.911832690238953,0.847798645496368,0.664743065834045,0.572323858737946,0.819055914878845,0.9074786901474,0.870977461338043,0.920614838600159,0.918147087097168,0.920683085918427,0.929821848869324,0.932937502861023,0.888557374477386,0.885168313980103,0.900562405586243,0.912235021591187,0.914624512195587,0.788711607456207,0.804260492324829,0.812986791133881,0.819072604179382,0.824297904968262,0.859320640563965,0.912963271141052,0.919374227523804,0.917552053928375,0.906057834625244,0.859798669815063,0.847870171070099,0.949789941310883,0.954140841960907,0.948378205299377,0.935009598731995,0.80139023065567,0.783727645874023, 0.790406882762909,0.65313047170639,0.654624581336975,0.644850671291351,0.837128400802612,0.818184018135071,0.66686749458313,0.814675390720367,0.791805326938629,0.654394924640656,0.659997522830963,0.56653755903244,0.696981251239777,0.710933864116669,0.577731668949127,0.570209503173828,0.593225657939911,0.480597913265228,0.483692198991776,0.605750918388367,0.616306304931641,0.588263213634491,0.579981029033661,0.603322803974152,0.479947537183762,0.477173000574112,0.479976087808609,0.504442453384399,0.704963505268097,0.500164926052094,0.499887257814407,0.687900900840759,0.581955969333649,0.581269025802612,0.49304935336113,0.476622134447098,0.49345138669014,0.50255560874939,0.481746703386307,0.479674130678177,0.50139182806015,0.590379059314728,0.600396871566772,0.478472590446472,0.478911131620407,0.482469409704208,0.716055870056152,0.588853597640991,0.501409530639648,0.614471137523651,0.600342035293579,0.590613424777985,0.588627755641937,0.588591754436493,0.579011499881744,0.582310616970062,0.572643458843231,0.580984592437744,0.590848982334137,0.602009296417236,0.480608761310577,0.478224217891693,0.478784024715424,0.501413822174072,0.503318071365356,0.679476320743561,0.681767165660858,0.685847163200378,0.695488452911377,0.694636702537537,0.693195402622223,0.702600240707397,0.500504910945892,0.499761641025543,0.499337792396545,0.499050945043564,0.497844457626343,0.497895330190659,0.498723387718201,0.500584185123444,0.499067336320877,0.498121321201324,0.496955037117004,0.496602416038513,0.495608180761337,0.495802491903305,0.497365981340408,0.498587638139725,0.544471323490143,0.535147666931152,0.526269614696503,0.527077794075012,0.524710237979889,0.523556470870972,0.527945518493652,0.533168017864227,0.825302302837372,0.834179222583771,0.843648850917816,0.857739388942719,0.858728110790253,0.87563282251358,0.88662976026535,0.726957321166992,0.646619617938995,0.63410347700119,0.628647983074188,0.631692171096802,0.640352308750153,0.639677703380585,0.646750509738922,0.661692976951599,0.750041663646698,0.753858208656311,0.765080034732819, 0.797111213207245,0.812030851840973,0.656091213226318,0.657804548740387,0.924229085445404,0.945810437202454,0.942111432552338,0.917795717716217,0.968188226222992,0.946788191795349,0.92444109916687,0.953242957592011,0.935089528560638,0.918654680252075,0.858058393001556,0.881813287734985,0.912264347076416,0.917832732200623,0.908516407012939,0.91170597076416,0.941785216331482,0.957115828990936,0.935437202453613,0.923129141330719,0.924030184745789,0.935841739177704,0.926523387432098,0.929085969924927,0.93127703666687,0.917386949062347,0.916314721107483,0.921677827835083,0.93353807926178,0.919895529747009,0.929590404033661,0.904771506786346,0.917263805866241,0.935589730739594,0.89923757314682,0.922143816947937,0.951504290103912,0.948889017105103,0.0205629765987396,0.0385227985680103,0.0589834935963154,0.129257842898369,0.221451789140701,0.3001409471035,0.383116811513901,0.473615288734436,0.508742868900299,0.572621881961823,0.705073118209839,0.844708263874054,0.85796457529068,0.896636486053467,0.86396312713623,0.836566090583801,0.855798006057739,0.891260325908661,0.879905521869659,0.897559642791748,0.877030253410339,0.84106719493866,0.0408311784267426,0.063639223575592,0.121105849742889,0.232397735118866,0.317838340997696,0.391686528921127,0.470170110464096,0.515603005886078,0.591437518596649,0.761221408843994,0.881025552749634,0.837720394134521,0.729614734649658,0.602391183376312,0.536369681358337,0.477584779262543,0.348473966121674,0.258798807859421,0.196032047271729,0.08775744587183,0.0421604700386524,0.00849729776382446,0.00970384292304516,0.00899431388825178,0.00871625915169716,0.00986232236027718,0.00997159723192453,0.0101062580943108,0.0237986277788877,0.0240418426692486,0.0266467072069645,0.0270236767828465,0.00962186045944691,0.00684724608436227,0.0235628131777048,0.0101543748751283,0.01648367382586,0.0201386269181967,0.0271529238671064,0.026808263733983,0.0260190926492214,0.0205551907420158,0.026290524750948,0.0106055960059166,0.0152002796530724,0.0205874461680651,0.0106762526556849,0.0170283429324627,0.0133009422570467, 0.00853356160223484,0.0194792449474335,0.0194181855767965,0.0160052366554737,0.0124485464766622,0.0106269288808107,0.0101191401481628,0.0109950825572014,0.0130144422873855,0.0134335104376078,0.0152226435020566,0.013090156018734,0.00847305823117495,0.0104275457561016,0.0122905261814594,0.00950068794190884,0.00979659147560596,0.0201588086783886,0.0269560553133488,0.0272463820874691,0.0200339201837778,0.0293582603335381,0.0293869338929653,0.0283271111547947,0.0283295307308435,0.0256121270358562,0.0255378093570471,0.0285402424633503,0.0187209453433752,0.0239661242812872,0.0270861200988293,0.0092220650985837,0.0259588118642569,0.0193630643188953,0.0282818600535393,0.0274064168334007,0.0248624049127102,0.0226008743047714,0.0143007067963481,0.0135410754010081,0.0120240962132812,0.013326863758266,0.0126821780577302,0.0237496141344309,0.024389436468482,0.0216351617127657,0.014059086330235,0.0112041374668479,0.0149165680631995,0.0200591329485178,0.0233019385486841,0.0178584437817335,0.0134067600592971,0.0130389947444201,0.0112436562776566,0.0267761740833521,0.0287934467196465,0.0270411297678947,0.0242357961833477,0.0266406517475843,0.0255027431994677,0.0287998355925083,0.0280229244381189,0.0297579634934664,0.0288060568273067,0.0237090364098549,0.0293429233133793,0.0285121109336615,0.0119260838255286,0.0113710556179285,0.0111018428578973,0.0136287482455373,0.0107910009101033,0.0130005907267332,0.0160967893898487,0.0204240214079618,0.0180781949311495,0.012203661724925,0.0336312055587769,0.0352119654417038,0.0394501127302647 } Transform: *16 { a: 0.210985148969358,0.177993646213452,-0.961146997467895,0,-0.975253674710361,0.104794319466303,-0.194675045018427,0,0.0660718200546389,0.978435725440565,0.195699004551353,0,35.704393192953,-5.80168884033437,10.4387178442025,1 } TransformLink: *16 { a: 0.210985159829393,-0.975253724909579,0.0660718234555528,0,0.177993636191846,0.104794313566051,0.978435670351535,0,-0.961146974134258,-0.194675040292327,0.195698999800395,0,3.53270865811464,37.4609842735306,1.27467830472218,1 } } Deformer: 136812048, "SubDeformer::Cluster_R_Thigh", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1426 { a: 4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,5330,5333,5476,5481,5482,5530,5531,5752,5765,5767,5910,5911,5959,6502,6503,6504,6505,6508,6509,6510,6511,6512,6513,6520,6521,6522,6523,6524,6546,6547,6548,6550,6551,6552,6553,6554,6555,6556,6557,6559,6560,6561,6562,6563,6564,6565,6571,6581,6583,6584,6585,6586,6596,6597,6598,6599,6600,6601,6602,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6625,6626,6627,6628,6629,6632,6634,6657,6658,6659,6666,6667,6668,6671,6672,6674,6675,6676,6677,6678,6679,6684,6685,6686,6687,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768, 6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6820,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6865,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6894,6895,6896,6897,6898,6899,6901,6902,6905,6906,6907,6908,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459, 7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7731,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7828,7830,7831,7832,7833,7834,7835,7836,7837,7838,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7873,7877,7878,7882,7883,7884,7885,7886,7887,7888,7889,7901,7902,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916, 7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7993,7994,7995,7996,7997,7998,7999,8000,9350,9351,9678,9679,9685,9686,9687,9696,9699,9700,9704,9705,9706,9721,9722,9723,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9960,10011,10012,10913,10915,10916,10917,10918,10919,10920,10921,10922,10927,10928,10933,10934,10935,10936,10977,10978,10979,10981,10982,10984,10985,10990,10991,10993,10994,10995,10996,10997,11008,11015,11016,11017,11018,11022,11023,11111,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11131,11132,11133,11134,11135,11136,11137,11143,11144,11145,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11177,11178,11179,11180,11181,11185,11186,11188,11189,11190,11191,11192 } Weights: *1426 { a: 0.0121406214311719,0.0122508415952325,0.0118976887315512,0.0117173595353961,0.0124390851706266,0.0122070135548711,0.0126539431512356,0.0125598656013608,0.0128371920436621,0.0128599274903536,0.0129400799050927,0.0130276530981064,0.0129359588027,0.013020683079958,0.0128265898674726,0.0128425154834986,0.012640917673707,0.0125400200486183,0.0124277845025063,0.0121918143704534,0.0122436741366982,0.0118895908817649,0.01213822606951,0.0117150489240885,0.00939200725406408,0.00922133028507233,0.0096948491409421,0.0100468639284372,0.0103518152609468,0.0105281351134181,0.0105305276811123,0.0103600556030869,0.0100622130557895,0.00971498060971498,0.00940981507301331,0.00922850612550974,0.00949476845562458,0.00939072575420141,0.00967897940427065,0.00989330559968948,0.0100796613842249,0.0101881176233292,0.0101903360337019,0.0100863538682461,0.00990398414433002,0.00969143025577068,0.00950503349304199,0.00939473509788513,0.0125351883471012,0.00978698022663593,0.708606839179993,0.705857396125793,0.708693444728851,0.713237941265106,0.703308582305908,0.704482853412628,0.701644003391266,0.701737105846405,0.701303839683533,0.701177060604095,0.702373325824738,0.702935993671417,0.704565227031708,0.706540822982788,0.707297801971436,0.711040079593658,0.709844648838043,0.715243935585022,0.711524188518524,0.718027889728546,0.711881220340729,0.718633353710175,0.710813581943512,0.716881394386292,0.776921927928925,0.781997501850128,0.772049069404602,0.768704175949097,0.76778769493103,0.769531071186066,0.773449778556824,0.778489351272583,0.783312261104584,0.786642789840698,0.787595152854919,0.785901963710785,0.780841171741486,0.78394603729248,0.777854740619659,0.775794923305511,0.77521550655365,0.776267230510712,0.778660953044891,0.781753301620483,0.784719824790955,0.786772966384888,0.787365198135376,0.786332964897156,0.706616520881653,0.781346321105957,0.595562696456909,0.592740178108215,0.597659587860107,0.60121351480484,0.587876677513123,0.588220238685608,0.585933327674866,0.583541095256805,0.590661406517029,0.586367666721344, 0.58176589012146,0.592983961105347,0.599109590053558,0.60893440246582,0.613502681255341,0.602687776088715,0.606080293655396,0.583518028259277,0.585001647472382,0.58845466375351,0.600851058959961,0.592422544956207,0.582261502742767,0.59635716676712,0.610490024089813,0.606726586818695,0.622400999069214,0.618498742580414,0.636538743972778,0.59371018409729,0.58416748046875,0.622708022594452,0.612394690513611,0.633858978748322,0.647794663906097,0.667890906333923,0.612781047821045,0.694311738014221,0.628657341003418,0.621947944164276,0.694720327854156,0.688933193683624,0.629056572914124,0.690963566303253,0.633292555809021,0.698847055435181,0.640542209148407,0.726858258247375,0.664061963558197,0.764679849147797,0.697108447551727,0.603879392147064,0.610298931598663,0.599850654602051,0.612626433372498,0.617496013641357,0.623805463314056,0.644330859184265,0.675829410552979,0.703979671001434,0.799726486206055,0.665815711021423,0.672482788562775,0.693197011947632,0.709540367126465,0.71259331703186,0.691519916057587,0.6813023686409,0.634478747844696,0.625135600566864,0.645098924636841,0.654494404792786,0.640835642814636,0.658283948898315,0.670843422412872,0.626901209354401,0.640329897403717,0.779515445232391,0.78886878490448,0.614881157875061,0.607614874839783,0.602537453174591,0.616504311561584,0.616610765457153,0.621333420276642,0.628176867961884,0.650015115737915,0.684783458709717,0.601844429969788,0.617423474788666,0.614545404911041,0.60051167011261,0.612510502338409,0.633224368095398,0.600748538970947,0.608348608016968,0.633217871189117,0.654657900333405,0.628166735172272,0.637831389904022,0.619139134883881,0.660599529743195,0.692957878112793,0.651106178760529,0.721908807754517,0.633278846740723,0.70828640460968,0.701894283294678,0.702260613441467,0.707958936691284,0.710699319839478,0.724626004695892,0.713609933853149,0.706369340419769,0.702649652957916,0.696391701698303,0.703982949256897,0.698264241218567,0.710292994976044,0.705470740795136,0.734420895576477,0.731867372989655,0.766797482967377,0.767536997795105,0.633915066719055, 0.704809010028839,0.71831476688385,0.698667943477631,0.702968120574951,0.780551493167877,0.788594007492065,0.696524977684021,0.025169862434268,0.17743507027626,0.0417528785765171,0.0149603690952063,0.0314485989511013,0.0341492109000683,0.0370167717337608,0.00640609161928296,0.0271293967962265,0.0036061517894268,0.00314630009233952,0.0123215476050973,0.00494522554799914,0.0413915291428566,0.0415283180773258,0.0295643042773008,0.00912562478333712,0.00408301642164588,0.0054349759593606,0.0047268564812839,0.0043707862496376,0.00671374332159758,0.013554010540247,0.015572807751596,0.0180529374629259,0.00400473875924945,0.00994897074997425,0.0267131235450506,0.0106267211958766,0.00780256511643529,0.00644758902490139,0.00672720884904265,0.00755316903814673,0.00798691902309656,0.00861690938472748,0.00955253560096025,0.0106580853462219,0.00959823466837406,0.0110898446291685,0.0114441076293588,0.0156115349382162,0.011926575563848,0.0222729928791523,0.0112889474257827,0.0153295481577516,0.012909191660583,0.0292770471423864,0.0152281168848276,0.00450499448925257,0.00555948540568352,0.00584762869402766,0.00425887666642666,0.00437471829354763,0.00431323004886508,0.0152728538960218,0.00757876643911004,0.0125082237645984,0.066037654876709,0.0677948594093323,0.0125738857313991,0.00489287078380585,0.00520963547751307,0.00530074024572968,0.00512120826169848,0.00559488777071238,0.00552204204723239,0.00626269914209843,0.00658323988318443,0.00344414333812892,0.00447779893875122,0.0270733889192343,0.00785047933459282,0.00555364228785038,0.00464107654988766,0.00447748182341456,0.005645043682307,0.00791709125041962,0.00454014353454113,0.00940870586782694,0.0222935806959867,0.00586624816060066,0.00596039881929755,0.0354999750852585,0.0713171139359474,0.0538405925035477,0.0288048982620239,0.0160065516829491,0.0278465356677771,0.0634250044822693,0.0193962790071964,0.00478004431352019,0.00492434063926339,0.00523216277360916,0.00458334339782596,0.0267478786408901,0.0244745388627052,0.00489023560658097,0.0051567037589848,0.0167336519807577,0.00544742727652192, 0.00686383992433548,0.0071214591152966,0.191019386053085,0.220372542738914,0.443121582269669,0.455715000629425,0.227879747748375,0.572845339775085,0.0685657858848572,0.0767723917961121,0.0764972791075706,0.0284278262406588,0.0561406426131725,0.0431331843137741,0.0424311570823193,0.04395667091012,0.0319374054670334,0.043060053139925,0.061846885830164,0.0298868026584387,0.021460996940732,0.544690907001495,0.47402435541153,0.483769923448563,0.471407413482666,0.486981511116028,0.464022278785706,0.524255752563477,0.61997526884079,0.461970031261444,0.447523772716522,0.571227729320526,0.467277556657791,0.78871762752533,0.764640212059021,0.272586435079575,0.0581459067761898,0.365322023630142,0.518994212150574,0.0766203030943871,0.195507556200027,0.490018874406815,0.486813902854919,0.399345725774765,0.483929514884949,0.479347556829453,0.50118488073349,0.0270621925592422,0.0431146696209908,0.0324231758713722,0.0208385195583105,0.52277660369873,0.661475300788879,0.148517176508904,0.274810284376144,0.717097461223602,0.16009484231472,0.0273086782544851,0.594453930854797,0.0753901824355125,0.0772575438022614,0.462949275970459,0.486051797866821,0.48539599776268,0.482352942228317,0.19377213716507,0.187886565923691,0.322050809860229,0.906217455863953,0.918335676193237,0.786625683307648,0.517066299915314,0.535502195358276,0.510716795921326,0.586380898952484,0.52104240655899,0.498748004436493,0.0355681627988815,0.0522505939006805,0.0566963478922844,0.0387060903012753,0.042708445340395,0.0591549165546894,0.0594617202877998,0.0175437070429325,0.00841336604207754,0.0766968280076981,0.415104597806931,0.0602047741413116,0.0683207213878632,0.0491678677499294,0.0754728838801384,0.0759880915284157,0.0661410689353943,0.0567237138748169,0.0737691223621368,0.633418679237366,0.486785143613815,0.50536060333252,0.479441195726395,0.480146616697311,0.483121246099472,0.511276483535767,0.709449052810669,0.831922292709351,0.881674110889435,0.887470006942749,0.876770496368408,0.873567700386047,0.862349271774292,0.744541883468628,0.785385251045227,0.864405274391174, 0.935879349708557,0.498770326375961,0.864026546478271,0.714228093624115,0.536101758480072,0.401497185230255,0.938651204109192,0.0591612607240677,0.0429156497120857,0.378555536270142,0.424933820962906,0.499189227819443,0.202586621046066,0.425374507904053,0.474240958690643,0.513405799865723,0.535461008548737,0.491324007511139,0.481851667165756,0.451976180076599,0.366595089435577,0.160316362977028,0.439833015203476,0.0725618228316307,0.0706432089209557,0.0478608459234238,0.0311587397009134,0.21308071911335,0.435666292905808,0.566649258136749,0.468619704246521,0.0769848674535751,0.077823668718338,0.0520382076501846,0.0394917130470276,0.693198621273041,0.185054555535316,0.672030031681061,0.791468799114227,0.520808458328247,0.49973601102829,0.501943588256836,0.499871522188187,0.0123160965740681,0.948372364044189,0.574645638465881,0.927067160606384,0.954527795314789,0.914097964763641,0.943775653839111,0.914058208465576,0.517141699790955,0.890655338764191,0.782427728176117,0.905642569065094,0.930662453174591,0.0174932777881622,0.0198648050427437,0.0209019873291254,0.0241470485925674,0.0309172626584768,0.0312053728848696,0.0391135588288307,0.339840680360794,0.430046528577805,0.447129368782043,0.458955973386765,0.459699958562851,0.463844180107117,0.00849306397140026,0.0146585777401924,0.00937444064766169,0.60956734418869,0.711777687072754,0.739983439445496,0.00504391174763441,0.00535760400816798,0.00569094764068723,0.00670535862445831,0.00806801579892635,0.0108356466516852,0.0753843709826469,0.0757224038243294,0.0749938189983368,0.0742722302675247,0.0692730024456978,0.796917974948883,0.802588641643524,0.807209610939026,0.809173047542572,0.808085501194,0.824402511119843,0.843233942985535,0.803074777126312,0.825077176094055,0.823010802268982,0.829862356185913,0.833508431911469,0.849360466003418,0.801250517368317,0.793128728866577,0.780713319778442,0.774000704288483,0.794888734817505,0.798239409923553,0.825299918651581,0.801834642887115,0.805963695049286,0.800087213516235,0.79336816072464,0.778830647468567,0.787423253059387,0.801776587963104, 0.858772218227386,0.854447066783905,0.850737750530243,0.842241585254669,0.826670169830322,0.793108701705933,0.814504384994507,0.817793011665344,0.837992191314697,0.815393090248108,0.798432469367981,0.810963213443756,0.813634872436523,0.818409025669098,0.805816054344177,0.799614131450653,0.795112609863281,0.794762969017029,0.803587794303894,0.813179910182953,0.86850494146347,0.858750760555267,0.849023580551147,0.833366572856903,0.82126647233963,0.872544646263123,0.867573082447052,0.867268443107605,0.845763564109802,0.836205542087555,0.839719176292419,0.850303113460541,0.860818028450012,0.918317377567291,0.918486177921295,0.909476399421692,0.903227865695953,0.747987389564514,0.75365674495697,0.749965846538544,0.753709673881531,0.781962871551514,0.783975124359131,0.756250858306885,0.779371798038483,0.770965278148651,0.749122202396393,0.765678226947784,0.70329737663269,0.708670139312744,0.705387771129608,0.709230542182922,0.711409032344818,0.704181611537933,0.719209790229797,0.921198844909668,0.752510130405426,0.799100637435913,0.798319518566132,0.796379506587982,0.763998687267303,0.717124164104462,0.707501947879791,0.722574353218079,0.807906568050385,0.839753091335297,0.84136825799942,0.82934308052063,0.911288857460022,0.900106549263,0.783974468708038,0.81630003452301,0.723835170269012,0.718316912651062,0.764115273952484,0.768223702907562,0.724165022373199,0.72052001953125,0.770703554153442,0.717623770236969,0.768704295158386,0.839786648750305,0.727094113826752,0.779557883739471,0.730585038661957,0.725931465625763,0.776144564151764,0.735690236091614,0.75948578119278,0.773145437240601,0.7225621342659,0.880705714225769,0.82598078250885,0.775107979774475,0.871436893939972,0.889169096946716,0.844534039497375,0.845540046691895,0.846522748470306,0.854915857315063,0.8920778632164,0.894299268722534,0.732543468475342,0.773456871509552,0.950825214385986,0.969283103942871,0.740236520767212,0.854900181293488,0.799582958221436,0.847225308418274,0.734141290187836,0.769206762313843,0.972008883953094,0.975831806659698,0.938882350921631, 0.914127767086029,0.890340089797974,0.885062396526337,0.895122110843658,0.852914929389954,0.941078782081604,0.955900371074677,0.783710718154907,0.758698046207428,0.819364070892334,0.802570521831512,0.788347721099854,0.788150370121002,0.688285827636719,0.733043849468231,0.797011494636536,0.71169650554657,0.801984071731567,0.723223984241486,0.821078062057495,0.755426645278931,0.842377662658691,0.829339385032654,0.79728102684021,0.816121220588684,0.75395268201828,0.793606996536255,0.836301624774933,0.81099146604538,0.70647805929184,0.806005716323853,0.672845840454102,0.67341148853302,0.766445398330688,0.707209527492523,0.856030821800232,0.863097786903381,0.824632585048676,0.828430116176605,0.857899188995361,0.859728515148163,0.845887064933777,0.838799178600311,0.839101791381836,0.847654759883881,0.932397305965424,0.914330780506134,0.912998378276825,0.928670585155487,0.812658250331879,0.874298095703125,0.872081577777863,0.815775990486145,0.882383823394775,0.900112390518188,0.907724559307098,0.945751070976257,0.956339716911316,0.957941651344299,0.736182391643524,0.64156436920166,0.649076700210571,0.844456791877747,0.890936672687531,0.94377201795578,0.956134855747223,0.562585234642029,0.510322034358978,0.514137625694275,0.57107138633728,0.690173208713531,0.786438465118408,0.848345816135406,0.866082906723022,0.84492015838623,0.798344433307648,0.737167000770569,0.686202585697174,0.710266470909119,0.722948431968689,0.757045805454254,0.811590313911438,0.848826766014099,0.797695994377136,0.75676017999649,0.715186834335327,0.677431404590607,0.675951838493347,0.707814037799835,0.872733950614929,0.774448871612549,0.854348838329315,0.921636939048767,0.960894465446472,0.747694432735443,0.958584189414978,0.561441242694855,0.507969915866852,0.512782514095306,0.566574394702911,0.687234282493591,0.785499155521393,0.846379995346069,0.945776760578156,0.944040477275848,0.860576987266541,0.804284751415253,0.866923034191132,0.937155365943909,0.943481504917145,0.874237179756165,0.879157423973084,0.823953986167908,0.654940128326416,0.526018619537354, 0.524963557720184,0.959881842136383,0.957106471061707,0.956878066062927,0.944541215896606,0.92781674861908,0.90781444311142,0.905358612537384,0.912126362323761,0.89648574590683,0.888637125492096,0.889766335487366,0.91316956281662,0.906045854091644,0.899924159049988,0.935516655445099,0.941309750080109,0.904953300952911,0.885624349117279,0.847198128700256,0.770461857318878,0.76787406206131,0.963826358318329,0.96113908290863,0.961089909076691,0.950632452964783,0.908831655979156,0.857835710048676,0.81183522939682,0.798646628856659,0.639582335948944,0.815626800060272,0.566958427429199,0.525693416595459,0.673427164554596,0.694212138652802,0.862183153629303,0.878029108047485,0.845140874385834,0.854517221450806,0.822884678840637,0.834131062030792,0.893841207027435,0.887415945529938,0.867077529430389,0.885372996330261,0.861731290817261,0.819874823093414,0.842385053634644,0.777085423469543,0.744409739971161,0.673969209194183,0.636548519134521,0.80493575334549,0.866995632648468,0.882088422775269,0.866331219673157,0.846528887748718,0.83049601316452,0.831366002559662,0.820866942405701,0.804013192653656,0.800460815429688,0.816933929920197,0.81192022562027,0.850354492664337,0.895127296447754,0.925061881542206,0.844556331634521,0.659179925918579,0.570643901824951,0.811593234539032,0.908195972442627,0.871232807636261,0.924025893211365,0.921512961387634,0.922115802764893,0.931954026222229,0.934867560863495,0.891904175281525,0.888459205627441,0.902878940105438,0.914022922515869,0.916135847568512,0.792705476284027,0.806619882583618,0.813966035842896,0.819875657558441,0.825136125087738,0.860069930553436,0.914043009281158,0.920753955841064,0.91921067237854,0.908249855041504,0.864333271980286,0.852148413658142,0.952171742916107,0.95646870136261,0.950879693031311,0.937963724136353,0.805840194225311,0.788787066936493,0.790082514286041,0.905307650566101,0.9073566198349,0.906107366085052,0.926503598690033,0.939972460269928,0.643545925617218,0.566204309463501,0.855476260185242,0.872918725013733,0.88499253988266,0.654054284095764,0.655697882175446, 0.954368114471436,0.951784253120422,0.525358974933624,0.531103730201721,0.576018631458282,0.66177636384964,0.521119952201843,0.527190089225769,0.574280679225922,0.658276557922363,0.51849240064621,0.525535702705383,0.569722771644592,0.828037142753601,0.717865943908691,0.718957960605621,0.72654914855957,0.891153514385223,0.866597652435303,0.792984366416931,0.841738641262054,0.830993831157684,0.825460255146027,0.805268168449402,0.801807880401611,0.801998734474182,0.80620151758194,0.80648285150528,0.8196861743927,0.856441140174866,0.840847074985504,0.876736998558044,0.897193491458893,0.879593849182129,0.890488386154175,0.854347586631775,0.834697484970093,0.86210036277771,0.894861817359924,0.475770980119705,0.458353370428085,0.396623522043228,0.433141261339188,0.417630434036255,0.319892078638077,0.382260203361511,0.368590116500854,0.435862481594086,0.471226334571838,0.40870589017868,0.392782628536224,0.484944015741348,0.496751010417938,0.480986088514328,0.490831136703491,0.490555346012115,0.48654118180275,0.483698606491089,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949,0.4991694688797,0.485532969236374,0.464642822742462,0.535651922225952,0.590244889259338,0.615910470485687,0.546950042247772,0.659544289112091,0.566442787647247,0.687947928905487,0.579388856887817,0.699130892753601,0.583877623081207,0.552021145820618,0.535593271255493,0.559898853302002,0.56237918138504,0.515810310840607,0.509566366672516,0.526057660579681,0.52871561050415,0.504014670848846,0.509806096553802,0.502772271633148,0.502121865749359,0.538578569889069,0.565036475658417,0.497771769762039,0.499860972166061,0.513701200485229,0.495591461658478,0.45454004406929,0.391833573579788,0.347644448280334,0.432123422622681,0.272249549627304,0.390310823917389,0.250164747238159,0.365234851837158,0.411932826042175,0.449440985918045,0.393866956233978,0.479107886552811,0.489363878965378,0.4683777987957,0.462633848190308,0.483733534812927,0.4803307056427,0.482127755880356,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793, 0.467380285263062,0.434641182422638,0.531138360500336,0.542760670185089,0.61461478471756,0.587907910346985,0.563326597213745,0.65929239988327,0.577728271484375,0.687950670719147,0.548891603946686,0.53145968914032,0.558209538459778,0.521568179130554,0.505979537963867,0.511844336986542,0.524451196193695,0.506610453128815,0.502292513847351,0.501941919326782,0.534197330474854,0.561727583408356,0.491019129753113,0.499508380889893,0.509556293487549,0.42677640914917,0.388839572668076,0.308941006660461,0.461290061473846,0.484441757202148,0.623691499233246,0.597078144550323,0.669393360614777,0.699311673641205,0.705560207366943,0.56942743062973,0.540330648422241,0.50005704164505,0.497496992349625,0.514450132846832,0.381174743175507,0.257222056388855,0.232263743877411,0.428449273109436,0.464983582496643,0.596508383750916,0.624365866184235,0.670899271965027,0.700318157672882,0.567449569702148,0.536635041236877,0.490132242441177,0.499542444944382,0.510450124740601,0.836060404777527,0.839611887931824,0.836895942687988,0.819555521011353,0.818680346012115,0.694415628910065,0.702977180480957,0.69442355632782,0.822489380836487,0.499316424131393,0.499484270811081,0.269271939992905,0.0363340899348259,0.200038895010948,0.287381142377853,0.278994768857956,0.135241404175758,0.188873007893562,0.20507188141346,0.10530211776495,0.100710526108742,0.0366321876645088,0.0321969203650951,0.0377073623239994,0.0413589552044868,0.129193872213364,0.160873353481293,0.298055350780487,0.276435554027557,0.247449889779091,0.255618959665298,0.195023968815804,0.176026284694672,0.292012274265289,0.250698626041412,0.273236691951752,0.174657389521599,0.252640843391418,0.298453480005264,0.277277916669846,0.0584391839802265,0.071047268807888,0.0527480281889439,0.0709102898836136,0.272021859884262,0.242320537567139,0.0598576068878174,0.224342092871666,0.0477189496159554,0.262468338012695,0.146162793040276,0.246551141142845,0.213548183441162,0.136089324951172,0.128732904791832,0.212865605950356,0.191950678825378,0.0356704853475094,0.0367216020822525,0.0367787405848503, 0.0368168205022812,0.036780372262001,0.036685723811388,0.0367924906313419,0.0366408154368401,0.0358510501682758,0.03602459654212,0.175911843776703,0.16103008389473,0.182328402996063,0.554998397827148,0.952422797679901,0.93386310338974,0.929259359836578,0.6139115691185,0.300000011920929,0.607261776924133,0.300000011920929,0.551125824451447,0.938569843769073,0.937819421291351,0.947948038578033,0.9091557264328,0.904147624969482,0.890257716178894,0.910216808319092,0.880972325801849,0.585072457790375,0.480802029371262,0.589536905288696,0.576095461845398,0.300000011920929,0.484088629484177,0.487558513879776,0.0334288142621517,0.032782070338726,0.032839871942997,0.200000002980232,0.335145354270935,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.308288633823395,0.900275528430939,0.250959098339081,0.824565351009369,0.847789824008942,0.882460951805115,0.879214882850647,0.852208852767944,0.841133236885071,0.0353639125823975,0.200000002980232,0.668727517127991,0.699191093444824,0.720621943473816,0.756375908851624,0.744136810302734,0.711437523365021,0.677942633628845,0.640930593013763,0.633037149906158,0.0355646312236786,0.0357317328453064,0.308352440595627,0.034441702067852,0.503331482410431,0.520728409290314,0.53005975484848,0.534790754318237,0.535664319992065,0.512462198734283,0.503290057182312,0.43207922577858,0.0523942671716213,0.0287168957293034,0.0657621473073959,0.0810146406292915,0.0793797895312309,0.0658637285232544,0.4886814057827,0.93654078245163,0.959634304046631,0.908121883869171,0.935774326324463,0.890292286872864,0.930742979049683,0.928332030773163,0.895345449447632,0.900514721870422,0.935992121696472,0.898749768733978,0.894806563854218,0.820103764533997,0.91419917345047,0.877375066280365,0.934875965118408,0.927780985832214,0.916402637958527,0.914490222930908,0.880014002323151,0.886390507221222,0.917209446430206,0.862820744514465,0.852146029472351,0.887707710266113,0.928047180175781,0.93571674823761,0.878426074981689, 0.919436573982239,0.949093282222748,0.94213742017746,0.919628381729126,0.970703184604645,0.950217664241791,0.928992509841919,0.956079125404358,0.937943637371063,0.921655356884003,0.861780822277069,0.885524451732636,0.91277140378952,0.914094805717468,0.910454094409943,0.914847612380981,0.945037424564362,0.960116565227509,0.938776850700378,0.925693988800049,0.926077365875244,0.934013366699219,0.926871538162231,0.932785332202911,0.935199439525604,0.923216760158539,0.914379596710205,0.921595096588135,0.937012314796448,0.923063695430756,0.926131665706635,0.899774134159088,0.91342967748642,0.933672666549683,0.901028752326965,0.92220151424408,0.0339444801211357,0.303750246763229,0.200000002980232,0.300000011920929,0.508266389369965,0.568917274475098,0.69706529378891,0.837648928165436,0.00947685819119215,0.0099763497710228,0.0164241753518581,0.0136153446510434,0.0167659018188715,0.0193188674747944,0.0165212638676167,0.0196010749787092,0.0152013218030334,0.0170877762138844,0.0179032739251852,0.0175033565610647,0.014290276914835,0.015932273119688,0.0180900525301695,0.0179031025618315,0.0781811326742172,0.0911547169089317,0.137335762381554,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.212126582860947,0.213561147451401,0.916650414466858,0.860767245292664,0.887980997562408,0.845418572425842,0.738132357597351,0.605785727500916,0.537369668483734,0.300000011920929,0.200000002980232,0.200000002980232,0.100000001490116,0.0340701937675476,0.0028827260248363,0.00179311831016093,0.00401651160791516,0.00892997067421675,0.0099483160302043,0.0100685115903616,0.0091486806049943,0.00919780507683754,0.0162262488156557,0.010299320332706,0.010226528160274,0.0159180611371994,0.00983505696058273,0.00625966535881162,0.0154218059033155,0.0102562345564365,0.0154791539534926,0.0155376037582755,0.0240341890603304,0.0147921089082956,0.0244445633143187,0.0284491814672947,0.0287205446511507,0.0280658081173897,0.0274832937866449,0.0139817874878645,0.00904152262955904,0.0104096597060561,0.0146032851189375,0.015713419765234, 0.0161524098366499,0.0160696785897017,0.00990277994424105,0.00993933063000441,0.0107942000031471,0.0152961015701294,0.00890574045479298,0.00526867294684052,0.0125740431249142,0.00979874935001135,0.0101370560005307,0.0206324737519026,0.020552285015583,0.0277900211513042,0.0274502355605364,0.0297787487506866,0.0297703463584185,0.0287828836590052,0.028711199760437,0.0260352157056332,0.0260036587715149,0.0243596658110619,0.0190564673393965,0.0288612972944975,0.0274189785122871,0.00950775109231472,0.0198205951601267,0.0264423154294491,0.0287518054246902,0.0278525054454803,0.0252742879092693,0.0229827482253313,0.014639045111835,0.0138399545103312,0.0122612956911325,0.0136584080755711,0.0129717355594039,0.0248363558202982,0.0241523422300816,0.0219858847558498,0.0143308853730559,0.0114311994984746,0.0181903019547462,0.0237003993242979,0.0204702317714691,0.0136737115681171,0.0114700272679329,0.0132998926565051,0.0271537154912949,0.0246199890971184,0.0273829195648432,0.0291210822761059,0.0270285941660404,0.0283864550292492,0.0291346069425344,0.0259131416678429,0.0300872698426247,0.0291729345917702,0.0296658203005791,0.0240968931466341,0.0288406312465668,0.0122615313157439,0.112699277698994,0.109744668006897,0.0139341726899147,0.0110394479706883,0.127745643258095,0.00968854501843452 } Transform: *16 { a: -0.210987573672524,-0.177990473315178,-0.961146997997314,0,-0.975253101222208,0.104794805518868,0.194677614514139,0,0.0660724538480164,0.978436204615115,-0.195696163886547,0,35.72022134769,-5.7883350418252,-10.3666109901212,1 } TransformLink: *16 { a: -0.210987586997392,-0.975253162814077,0.0660724580208058,0,-0.177990479303431,0.10479480904455,0.978436237533301,0,-0.961147080740473,0.194677631273533,-0.195696180733625,0,-3.45758310962855,37.4609935830385,1.27468775649854,1 } } Deformer: 132111264, "SubDeformer::Cluster_Spine2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *952 { a: 3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,5301,5302,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5324,5325,5326,5327,5328,5329,5335,5336,5337,5338,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5356,5371,5372,5373,5377,5378,5380,5382,5383,5385,5386,5389,5390,5391,5392,5393,5396,5401,5419,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5451,5458,5460,5464,5465,5469,5470,5471,5472,5473,5485,5487,5488,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5512,5513,5515,5517,5522,5523,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5757,5758,5759,5760,5761,5762,5766,5769,5770,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5787,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5820,5821,5822,5823,5824,5832,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5863,5866,5867,5869,5870,5871,5872,5881,5888,5890,5891,5899,6496,6497,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10083,10084,10085,10086,10093,10094,10095,10096,10112,10116,10123,10127,10128,10129,10130,10131,10132,10133,10134, 10135,10136,10140,10141,10142,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10192,10193,10194,10197,10199,10206,10207,10215,10216,10223,10224,10225,10226,10227,10228,10229,10230,10232,10239,10240,10241,10250,10251,10252,10253,10255,10256,10274,10275,10276,10277,10284,10285,10286,10287,10288,10289,10321,10324,10326,10328,10338,10339,10362,10363,10364,10365,10399,10400,10401,10402,10403,10404,10405,10408,10410,10411,10413,10414,10448,10456,10460,10461,10462,10463,10464,10467,10468,10470,10471,10472,10473,10474,10475,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10527,10528,10529,10536,10537,10540,10550,10565,10569,10570,10571,10572,10573,10575,10583,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10625,10626,10628,10629,10632,10633,10634,10637,10640,10648,10655,10656,10661,10662,10663,10664,10665,10666,10667,10668,10669,10677,10685,10686,10687,10688,10691,10692,10709,10710,10711,10712,10719,10720,10721,10722,10723,10724,10756,10758,10761,10771,10772,10791,10792,10793,10794,10828,10829,10830,10831,10832,10833,10834,10836,10837,10838,10839,10840,10842,10843,10871,10872,10873,10877,10887,10888,10889,10890,10891,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971, 10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998,10999,11000,11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029,11030,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049,11050,11051,11052,11053,11054,11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,11116,11117,11118,11119,11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150,11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,11162,11163,11164,11165,11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,11181,11182,11183,11184,11185,11187,11189,11190,11192 } Weights: *952 { a: 0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.359894096851349,0.131822139024735,0.321277141571045,0.160423785448074,0.722898602485657,0.445386797189713,0.45045331120491,0.402194231748581,0.480391561985016,0.577919542789459,0.447136491537094,0.380231142044067,0.412134319543839,0.148485705256462,0.318740755319595,0.15874582529068,0.181284919381142,0.272806972265244,0.1451396048069,0.353126019239426,0.495000004768372,0.563023507595062,0.738020777702332,0.899999976158142,0.238575875759125,0.355732023715973,0.364720314741135,0.36279034614563,0.504305362701416,0.418273389339447,0.21246899664402,0.484130948781967,1,1,0.717513561248779,0.609057724475861,1,0.190772294998169,0.189764350652695,0.379646718502045,0.410798698663712,0.310579746961594,0.410809904336929,0.343109250068665,0.151649907231331,0.372355252504349,0.432689905166626,0.705370366573334,0.446909070014954,0.397691786289215,0.493638128042221,0.249241650104523,0.408016115427017,0.1743523478508,0.580612659454346,0.316434442996979,0.144477933645248,0.492175936698914,0.409012824296951,0.168958619236946,0.447480082511902,0.494035720825195,0.534899950027466,0.577429175376892,0.539071023464203,0.499245464801788,0.450773000717163,0.357262283563614,0.359641790390015,0.300000011920929,0.510655224323273,0.393249958753586,0.122448980808258,0.300000011920929,0.574471712112427,0.383565634489059,0.390012353658676,0.394759863615036,0.500222086906433,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.413799285888672,0.550000011920929,0.150000005960464,0.150000005960464,0.119999997317791,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929, 0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.300000011920929,0.201034501194954,0.283556282520294,0.622648358345032,0.410614639520645,0.15689942240715,0.363164901733398,0.497522711753845,0.366464495658875,0.144129678606987,0.15396711230278,0.136388406157494,0.110584229230881,0.319683194160461,0.15707790851593,0.179601892828941,0.271901369094849,0.144837826490402,0.353604793548584,0.232929348945618,0.334674477577209,0.347276002168655,0.237096637487412,0.355479329824448,0.364682763814926,0.228183850646019,0.328231632709503,0.286706179380417,0.1999551653862,0.353024065494537,1,0.120854437351227,0.705098867416382,0.570705950260162,0.138418808579445,0.188803881406784,0.187508851289749,0.377009600400925,0.378021121025085,0.313959717750549,0.391879200935364,0.343293637037277,0.150570645928383,0.370510280132294,0.43337219953537,0.704165577888489,0.446447998285294,0.397987276315689,0.493255823850632,0.247754007577896,0.329767942428589,0.584638297557831,0.10365991294384,0.386701285839081,0.469178020954132,0.190165564417839,0.446778386831284,0.448410719633102,0.496600031852722,0.485161036252975,0.440406888723373,0.500257134437561,0.45028492808342,0.25,0.394021302461624,0.460566163063049,0.361449152231216,0.384900748729706,0.390994220972061,0.341767132282257,0.419938653707504,0.170603901147842,0.181894451379776,0.25753927230835,0.41343629360199,0.121487513184547,0.110730439424515,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142, 0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.899999976158142,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.899999976158142,0.5,0.5,0.5,0.5,0.899999976158142,0.899999976158142,0.5,0.899999976158142,0.0210085958242416,0.0191792137920856,0.0192963965237141,0.0186389740556479,0.122763067483902,0.0245019607245922,0.0995751470327377,0.0995730087161064,0.0180597361177206,0.0178598538041115,0.179421439766884,0.171214923262596,0.128943219780922,0.122265592217445,0.131793394684792,0.121538914740086,0.120697997510433,0.0198810547590256,0.121450372040272,0.116797655820847,0.115617334842682,0.105570323765278,0.105481624603271,0.104324460029602,0.135003134608269,0.120837047696114,0.10340691357851,0.0984461605548859,0.09486985206604,0.0916204452514648,0.0895644500851631,0.0894134789705276,0.0967373102903366,0.0844946131110191,0.0784533694386482,0.094071164727211,0.101866342127323,0.0899942740797997,0.084604375064373,0.0803702101111412,0.0761234313249588,0.0726300999522209,0.0867085829377174,0.069316990673542,0.0856314152479172,0.0676203221082687,0.0842828527092934,0.067114382982254,0.0686155781149864,0.0656019300222397,0.0627633929252625,0.0593736432492733,0.057195819914341,0.0551217012107372,0.0533682592213154,0.0668788924813271,0.899999976158142,0.899999976158142,0.0634551644325256,0.061039824038744,0.899999976158142,0.0573312938213348,0.899999976158142,0.0553891472518444,0.0535443685948849,0.909212648868561,0.0892795249819756,0.132362753152847,0.0948472172021866,0.0853950530290604,0.0423025786876678,0.120995484292507,0.0709883868694305,0.0245840400457382,0.0281479936093092,0.899999976158142,0.899999976158142,0.0205661673098803,0.0625068545341492,0.0935042500495911,0.899999976158142,0.906017541885376,0.120485842227936,0.0772125869989395,0.0612680874764919, 0.899999976158142,0.899999976158142,0.908125281333923,0.906064808368683,0.12110710889101,0.230990335345268,0.125681951642036,0.128095984458923,0.128825411200523,0.125952377915382,0.0230134893208742,0.0197366271167994,0.0314518921077251,0.331447571516037,0.228125557303429,0.899999976158142,0.125234216451645,0.232355818152428,0.121031150221825,0.0187431108206511,0.130838826298714,0.0202204361557961,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0279667302966118,0.133586198091507,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0994578823447227,0.0994723290205002,0.0994878485798836,0.0994757488369942,0.0992683842778206,0.78326690196991,0.651701331138611,0.67856639623642,0.722593247890472,0.899999976158142,0.908350229263306,0.227162957191467,0.0995369106531143,0.899999976158142,0.899999976158142,0.800000011920929,0.0994640290737152,0.899999976158142,0.899999976158142,0.675524592399597,0.899999976158142,0.810967564582825,0.810860931873322,0.811047852039337,0.899999976158142,0.0201524216681719,0.0311778448522091,0.136765494942665,0.131722420454025,0.127948045730591,0.127072706818581,0.0993012562394142,0.0991286635398865,0.099322073161602,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0161145962774754,0.0185560490936041,0.0324523970484734,0.122718594968319,0.0994901955127716,0.0995630919933319,0.038259107619524,0.0896085575222969,0.169828429818153,0.122217774391174,0.124139316380024,0.120667956769466,0.0380419753491879,0.121132530272007,0.031004436314106,0.103646159172058,0.120674453675747,0.0986567735671997,0.0917479991912842,0.0950431227684021,0.0894859209656715,0.0896541252732277,0.0968138575553894,0.09412532299757,0.0784110277891159,0.0844981074333191,0.0900865197181702,0.102103270590305,0.0802971869707108,0.0846083983778954,0.0724213346838951,0.0759714841842651,0.0867259800434113,0.0690862610936165,0.0856297239661217,0.0673950910568237,0.0842797458171844,0.0669263899326324,0.0652717873454094,0.0683451294898987, 0.0589643530547619,0.0623894222080708,0.0568165369331837,0.0547826141119003,0.0530858412384987,0.0665799528360367,0.0630895420908928,0.899999976158142,0.899999976158142,0.0606382973492146,0.0568939559161663,0.899999976158142,0.0549896210432053,0.899999976158142,0.0531911998987198,0.908972263336182,0.0816975012421608,0.094945527613163,0.0854047760367393,0.0639795660972595,0.120819725096226,0.0708507224917412,0.0260804612189531,0.0219318121671677,0.899999976158142,0.0194744672626257,0.0623186081647873,0.0935470536351204,0.12045968323946,0.906039774417877,0.899999976158142,0.0771617144346237,0.899999976158142,0.899999976158142,0.0610728077590466,0.907944023609161,0.0715562850236893,0.125531867146492,0.125799506902695,0.128634288907051,0.127870187163353,0.0339642949402332,0.038983803242445,0.108174778521061,0.0945930778980255,0.899999976158142,0.0693850517272949,0.125101238489151,0.0958503782749176,0.120923519134521,0.0301489941775799,0.0456141158938408,0.130416601896286,0.899999976158142,0.899999976158142,0.899999976158142,0.040399719029665,0.13324661552906,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.0976946875452995,0.0977993011474609,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.768164098262787,0.814141035079956,0.632749080657959,0.677894532680511,0.0795049443840981,0.0845270901918411,0.0980286151170731,0.0894803777337074,0.099321112036705,0.0979417786002159,0.908165276050568,0.0995413362979889,0.899999976158142,0.899999976158142,0.0994874984025955,0.899999976158142,0.899999976158142,0.899999976158142,0.720643103122711,0.630293428897858,0.766258358955383,0.899999976158142,0.899999976158142,0.0977180302143097,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142, 0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142, 0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142, 0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142 } Transform: *16 { a: 1.15766822404049e-006,-1.28535908817908e-006,0.999999999997491,0,0.995290635085167,0.0969362522209254,-1.02761836151786e-006,0,-0.0969362522195669,0.995290635083767,1.3915257634653e-006,0,-49.9940905212278,-4.81498390970324,-0.0375257788007833,1 } TransformLink: *16 { a: 1.15766812530998e-006,0.995290550202856,-0.0969362439524608,0,-1.28535897856143e-006,0.096936243954034,0.995290550203658,0,0.999999999999517,-1.02761836151994e-006,1.39152576346812e-006,0,0.0375774663830155,50.2253922781078,-0.0539313180187548,1 } } Deformer: 126300080, "SubDeformer::Cluster_L_Knee2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1565 { a: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,6539,6541,6542,6543,6545,6566,6567,6568,6569,6570,6572,6573,6574,6576,6578,6580,6582,6587,6588,6589,6591,6592,6595,6604,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6638,6639,6640,6641,6642,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6662,6663,6665,6669,6680,6681,6682,6683,6689,6690,6691,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6866,6867,6868,6869,6870,6871,6903,6904,6909,6910,6911,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682, 8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8904,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8931,8932,8934,8935,8936,8937,8938,8940,8941,8942,8943,8944,8945,8946,8948,8949,8950,8951,8952,8953,8954,8955,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9103, 9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9145,9146,9147,9148,9149,9150,9151,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405,9406,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515, 9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9692,9693,9694,9698,9702,9703,9707,9708,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9740,9741,9742,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926 } Weights: *1565 { a: 0.217937991023064,0.193066567182541,0.150126114487648,0.17124816775322,0.165598079562187,0.122377060353756,0.148478820919991,0.0956615433096886,0.140187636017799,0.0787397772073746,0.144371047616005,0.117074072360992,0.101211987435818,0.133439242839813,0.0911127552390099,0.069226861000061,0.0714743733406067,0.0480961725115776,0.10335074365139,0.126632317900658,0.149800479412079,0.0685747936367989,0.0428042337298393,0.0310193803161383,0.167778611183167,0.230801030993462,0.163355246186256,0.111697867512703,0.134922936558723,0.0986230075359344,0.0804232433438301,0.109543345868587,0.0710814893245697,0.0740618333220482,0.134507805109024,0.0736229047179222,0.0587472394108772,0.0512644127011299,0.0673453360795975,0.0499555207788944,0.0700478702783585,0.0618133395910263,0.0750201046466827,0.0922682136297226,0.0804645866155624,0.0456821210682392,0.0354322865605354,0.0335599854588509,0.143076032400131,0.0875507295131683,0.0984939783811569,0.168851777911186,0.165012300014496,0.0927857756614685,0.159829273819923,0.139958202838898,0.14929561316967,0.069535106420517,0.050439827144146,0.0829839482903481,0.102786235511303,0.0354951024055481,0.0229150280356407,0.0166076384484768,0.0108027188107371,0.0101655097678304,0.00608651200309396,0.072212278842926,0.0804904103279114,0.0394822135567665,0.0363513678312302,0.0183210987597704,0.0167477466166019,0.0103857610374689,0.0103328255936503,0.123184978961945,0.131587728857994,0.103567540645599,0.102400660514832,0.0416419804096222,0.0209475345909595,0.0313385166227818,0.0538950078189373,0.0102837020531297,0.0172615870833397,0.00782635621726513,0.0132249752059579,0.0325090512633324,0.0171860456466675,0.0176416132599115,0.0335634164512157,0.0136251226067543,0.0130008785054088,0.0652362108230591,0.0496616810560226,0.124598667025566,0.0696243494749069,0.0846680551767349,0.0544763430953026,0.11882134526968,0.172125160694122,0.19344200193882,0.220697969198227,0.200828805565834,0.119947507977486,0.0879858732223511,0.173677518963814,0.0491216033697128,0.137200742959976,0.0281743127852678, 0.114367216825485,0.0199793707579374,0.0973046720027924,0.223634704947472,0.213968828320503,0.0652075260877609,0.115864135324955,0.0806689858436584,0.0329237170517445,0.0744070038199425,0.0204459112137556,0.0926106572151184,0.0211250614374876,0.157550111413002,0.165023967623711,0.066793404519558,0.0384841412305832,0.0155896889045835,0.00648322282359004,0.00328610604628921,0.118579044938087,0.158680856227875,0.0288678389042616,0.0127693628892303,0.0054703475907445,0.00413582799956203,0.0724539160728455,0.107869297266006,0.193620681762695,0.221625596284866,0.164402574300766,0.148051723837852,0.139042526483536,0.194092482328415,0.226165369153023,0.204499185085297,0.235685050487518,0.136574730277061,0.109518423676491,0.106049604713917,0.132017239928246,0.170960187911987,0.176611080765724,0.14548534154892,0.158295169472694,0.0775470584630966,0.0458164028823376,0.0200561676174402,0.00933938194066286,0.00501492712646723,0.168417036533356,0.129740998148918,0.0180741064250469,0.0374149270355701,0.00851493515074253,0.00643268646672368,0.08414426445961,0.121842563152313,0.202866554260254,0.155388861894608,0.00113062001764774,0.0011699030874297,0.00142485089600086,0.00137593131512403,0.00191429245751351,0.00360467471182346,0.00410669762641191,0.00478810397908092,0.00366930733434856,0.00185177964158356,0.00651489989832044,0.00790537614375353,0.00180479197297245,0.00497250165790319,0.00197080755606294,0.00203889538533986,0.00165602355264127,0.00176483765244484,0.00272715580649674,0.00230192486196756,0.00152403034735471,0.00248730834573507,0.00132022495381534,0.00276284059509635,0.00103867775760591,0.00196949602104723,0.00180855498183519,0.00192999036516994,0.00233792304061353,0.00125158741138875,0.00667747389525175,0.00140081695280969,0.00370705616660416,0.00188195053488016,0.0028317216783762,0.0026190890930593,0.00237803836353123,0.00129506958182901,0.0063701095059514,0.00740096950903535,0.0079770889133215,0.00791583675891161,0.00498282955959439,0.00367825804278255,0.00346787925809622,0.00271937483921647,0.00141765410080552,0.00240975338965654, 0.00307231023907661,0.00263963523320854,0.0026630477514118,0.00183302361983806,0.00148538441862911,0.00261011580005288,0.0012280666269362,0.00128619314637035,0.001272784313187,0.00129027420189232,0.00192920712288469,0.00404529366642237,0.00393471261486411,0.00227775750681758,0.00469678221270442,0.00141284347046167,0.00184910569805652,0.00344931869767606,0.00138123158831149,0.00633459491655231,0.00395409855991602,0.00769313843920827,0.00885469187051058,0.00468115182593465,0.00788083299994469,0.00721679860725999,0.00124457373749465,0.00189409160520881,0.00751018477603793,0.00158069364260882,0.00212554424069822,0.00121294870041311,0.00207396456971765,0.00263531133532524,0.00229365844279528,0.00263653160072863,0.002594891237095,0.00523023307323456,0.00501290755346417,0.278524190187454,0.394556045532227,0.356071710586548,0.281402856111526,0.488670468330383,0.486498981714249,0.293616443872452,0.338438272476196,0.367852568626404,0.341589659452438,0.299342811107636,0.591005504131317,0.440767735242844,0.490833163261414,0.497860908508301,0.510798573493958,0.800929665565491,0.789895832538605,0.820857107639313,0.81392914056778,0.284495800733566,0.30119326710701,0.553172945976257,0.391654521226883,0.580089569091797,0.624157726764679,0.180358052253723,0.172835975885391,0.255893439054489,0.203865572810173,0.19896200299263,0.268915176391602,0.918198108673096,0.925586402416229,0.543842315673828,0.440254360437393,0.312048435211182,0.278778225183487,0.259148359298706,0.256495177745819,0.379354923963547,0.228678658604622,0.183471709489822,0.190731287002563,0.20325493812561,0.228591680526733,0.489701420068741,0.187608972191811,0.231067150831223,0.207314938306808,0.13930881023407,0.446447372436523,0.307628959417343,0.162401631474495,0.244091495871544,0.229731202125549,0.208574816584587,0.213357344269753,0.368181824684143,0.199297100305557,0.151384651660919,0.0941171497106552,0.499143898487091,0.207266747951508,0.098545603454113,0.509195327758789,0.164197608828545,0.284520030021667,0.87258243560791,0.937198340892792,0.929506897926331,0.939635574817657, 0.937211036682129,0.811447024345398,0.838191568851471,0.830745756626129,0.814085900783539,0.683981478214264,0.707984209060669,0.814047157764435,0.773857712745667,0.765161633491516,0.841501414775848,0.568170011043549,0.560819149017334,0.498938947916031,0.499213874340057,0.453529417514801,0.500098705291748,0.605953276157379,0.360562413930893,0.431189507246017,0.500657081604004,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459,0.289263367652893,0.271083652973175,0.31381094455719,0.364148586988449,0.0104604847729206,0.0117881782352924,0.00920889433473349,0.00868870317935944,0.0158582646399736,0.012913279235363,0.0122199170291424,0.0147344302386045,0.0398468933999538,0.0335258916020393,0.0688999518752098,0.0766271725296974,0.186611503362656,0.183087810873985,0.151672527194023,0.0356982983648777,0.42280113697052,0.452128559350967,0.40513089299202,0.463361591100693,0.436503082513809,0.38639509677887,0.427062779664993,0.103389844298363,0.172851338982582,0.0250426344573498,0.0206322781741619,0.00760459387674928,0.00763090094551444,0.00503380922600627,0.00518276123329997,0.00184386631008238,0.00554785551503301,0.0065411957912147,0.00249896850436926,0.00617913668975234,0.00226741447113454,0.00445352448150516,0.00413006078451872,0.0073011196218431,0.00764281861484051,0.00377230672165751,0.00695649860426784,0.0105930175632238,0.013415620662272,0.0140805477276444,0.0111596565693617,0.00858309958130121,0.00860860012471676,0.009040174074471,0.00876380875706673,0.0116116171702743,0.00915669836103916,0.00767848733812571,0.007785739377141,0.0373207852244377,0.0356807373464108,0.0712771713733673,0.0775921493768692,0.0338086485862732,0.0711394846439362,0.154912173748016,0.148190930485725,0.179008305072784,0.419658631086349,0.404332429170609,0.423344492912292,0.461189091205597,0.459054917097092,0.450298726558685,0.468799650669098,0.471357196569443,0.470733731985092,0.468281656503677,0.461129665374756,0.459681630134583,0.482899278402328,0.46652552485466,0.49783006310463,0.497768074274063,0.425248622894287,0.440236985683441, 0.203102990984917,0.212519079446793,0.173639550805092,0.18523108959198,0.0252952706068754,0.0382022671401501,0.0494664870202541,0.0247309561818838,0.0959605649113655,0.017598282545805,0.0179799422621727,0.0963413417339325,0.00837020669132471,0.00975190475583076,0.00930315069854259,0.00995020940899849,0.0112953381612897,0.014461281709373,0.0136039676144719,0.00938993413001299,0.0104363551363349,0.010656557045877,0.0100247217342258,0.0326296165585518,0.0194478332996368,0.0119620682671666,0.0225890632718802,0.0124636711552739,0.0057713259011507,0.0092778904363513,0.010950168594718,0.00912692490965128,0.00848509091883898,0.00771763687953353,0.00625959457829595,0.00867180153727531,0.00519386120140553,0.00542215025052428,0.00709175365045667,0.00440816627815366,0.00893468875437975,0.0327585935592651,0.0128655480220914,0.00944874808192253,0.029045645147562,0.00955470465123653,0.0319792591035366,0.0514524430036545,0.00910031981766224,0.0809905454516411,0.00846797414124012,0.0040576639585197,0.00289000198245049,0.291601538658142,0.305837243795395,0.495860993862152,0.497062891721725,0.284753739833832,0.497428089380264,0.498450934886932,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.19354435801506,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.0101069388911128,0.498003214597702,0.498488068580627,0.124844379723072,0.00847867224365473,0.009872623719275,0.00662050535902381,0.00963056832551956,0.00449067214503884,0.00523729017004371,0.00585944904014468,0.00689659500494599,0.00176204845774919,0.00231578364036977,0.00216982280835509,0.00305611151270568,0.00286427279934287,0.00455412268638611,0.00240973522886634,0.00170441914815456,0.174829512834549,0.463668048381805,0.437743693590164,0.0907380133867264,0.0942813456058502,0.0316141545772552,0.447386860847473,0.494165003299713,0.254411548376083,0.475739121437073,0.495833784341812, 0.481321185827255,0.497110813856125,0.0143417259678245,0.0915817469358444,0.441890031099319,0.17601589858532,0.0104726823046803,0.0110441735014319,0.00322920642793179,0.180409610271454,0.0045286095701158,0.0840634927153587,0.073136493563652,0.00281742191873491,0.00334198912605643,0.498167306184769,0.498650819063187,0.00585331814363599,0.497448414564133,0.48209011554718,0.39910900592804,0.398386210203171,0.421490728855133,0.0171202421188354,0.159211203455925,0.15203121304512,0.0257838927209377,0.143713772296906,0.27756530046463,0.267116546630859,0.166035607457161,0.181657657027245,0.202675879001617,0.156768962740898,0.158613741397858,0.25874650478363,0.294418185949326,0.310221552848816,0.333954304456711,0.306745558977127,0.347377270460129,0.37422052025795,0.396495938301086,0.335510343313217,0.420392662286758,0.396934300661087,0.311897039413452,0.252103835344315,0.285647630691528,0.31638965010643,0.289389371871948,0.237182766199112,0.358209788799286,0.330744564533234,0.294395178556442,0.216423064470291,0.235265210270882,0.177145376801491,0.154336825013161,0.221582189202309,0.203899502754211,0.291168242692947,0.265926122665405,0.222789525985718,0.382866770029068,0.379625827074051,0.354701280593872,0.298949152231216,0.32309752702713,0.00353628769516945,0.0043956097215414,0.00995998084545136,0.00464406609535217,0.00191318255383521,0.00239988300018013,0.00144379446282983,0.00101906375493854,0.00216976762749255,0.0185377430170774,0.00356011069379747,0.0051389541476965,0.00240384507924318,0.0039246529340744,0.00358820962719619,0.00492909690365195,0.00868967268615961,0.012543841265142,0.00162668875418603,0.00144240353256464,0.00167010014411062,0.00689264992251992,0.00304925511591136,0.0106126070022583,0.0109203718602657,0.0107194166630507,0.0107699315994978,0.00377897336147726,0.00214204099029303,0.00185688678175211,0.00528150983154774,0.00216559180989861,0.00740047078579664,0.0178566388785839,0.0126037206500769,0.00112852884922177,0.00547391129657626,0.00875450298190117,0.0106500312685966,0.00543188489973545,0.00321708037517965, 0.0028818033169955,0.00511367572471499,0.00115782092325389,0.00272735022008419,0.0128676798194647,0.0186832193285227,0.00801458023488522,0.00457123108208179,0.00317270634695888,0.00154793937690556,0.0102164736017585,0.00986851658672094,0.009819395840168,0.0100564016029239,0.00538678048178554,0.0102701392024755,0.0117501271888614,0.0102348234504461,0.0146714728325605,0.0262550786137581,0.0271754302084446,0.051020797342062,0.0325711853802204,0.0242357943207026,0.0131749734282494,0.0136630134657025,0.017205037176609,0.0239689871668816,0.00827865395694971,0.0125653436407447,0.003217370249331,0.00539044104516506,0.00601178500801325,0.00432546203956008,0.00686935102567077,0.00861361064016819,0.0101967453956604,0.00765288062393665,0.00386519869789481,0.00497460691258311,0.00544665800407529,0.0212502051144838,0.0204925052821636,0.0234464816749096,0.00825588870793581,0.130269840359688,0.116699047386646,0.102264374494553,0.498141705989838,0.481745272874832,0.497402459383011,0.109394714236259,0.079887181520462,0.0448430106043816,0.05612413585186,0.348335713148117,0.321103662252426,0.136996060609818,0.825557231903076,0.726665556430817,0.574333310127258,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.589865803718567,0.588133454322815,0.709356665611267,0.82204669713974,0.798275709152222,0.761979937553406,0.801986038684845,0.813846588134766,0.830662250518799,0.732072174549103,0.738728821277618,0.721726655960083,0.496359467506409,0.483749479055405,0.507127046585083,0.462187528610229,0.355508267879486,0.394198328256607,0.389929682016373,0.422440081834793,0.370403230190277,0.312455385923386,0.337098896503448,0.319699198007584,0.357336074113846,0.327188402414322,0.275863766670227,0.237348303198814,0.46007451415062,0.495663166046143,0.498662918806076,0.896295666694641,0.88693642616272,0.815315902233124,0.586030066013336,0.504073619842529,0.808114111423492,0.795565605163574,0.7134850025177,0.57805347442627,0.500971138477325,0.496326148509979,0.461786419153214,0.892370939254761,0.876114130020142, 0.794561326503754,0.641628742218018,0.312976479530334,0.201786264777184,0.112239710986614,0.567541480064392,0.700277745723724,0.779269278049469,0.792389869689941,0.852401494979858,0.863027215003967,0.855158448219299,0.959153354167938,0.955068171024323,0.826405823230743,0.866171360015869,0.893685817718506,0.875145792961121,0.944960653781891,0.859789371490479,0.921505987644196,0.849886894226074,0.522505104541779,0.539905965328217,0.603489339351654,0.566338777542114,0.580175757408142,0.680625438690186,0.614581108093262,0.627249896526337,0.562271416187286,0.527245342731476,0.588694632053375,0.60365891456604,0.513323426246643,0.501584470272064,0.517501533031464,0.50719553232193,0.506801426410675,0.510469377040863,0.512995004653931,0.499140977859497,0.498905599117279,0.498835623264313,0.498779982328415,0.499234527349472,0.513076305389404,0.534325361251831,0.459902405738831,0.40277636051178,0.376346588134766,0.44800540804863,0.332356840372086,0.427796334028244,0.304846733808517,0.414865493774414,0.295435309410095,0.411079108715057,0.442986249923706,0.460114300251007,0.435196161270142,0.43331316113472,0.481134057044983,0.487723857164383,0.470089703798294,0.467404961585999,0.493127942085266,0.48733189702034,0.494223415851593,0.49494481086731,0.456948399543762,0.429066330194473,0.500806391239166,0.498532742261887,0.483417391777039,0.502954125404358,0.541422784328461,0.601390898227692,0.644598543643951,0.562959849834442,0.720340251922607,0.603916108608246,0.74493545293808,0.629328787326813,0.583151161670685,0.546524524688721,0.601599276065826,0.518307745456696,0.508589446544647,0.528307914733887,0.533909976482391,0.513328611850739,0.516984522342682,0.514529645442963,0.499012738466263,0.499266684055328,0.498823940753937,0.499305218458176,0.529254913330078,0.560231685638428,0.467360258102417,0.455509841442108,0.38519886136055,0.411968350410461,0.433961093425751,0.33932089805603,0.418325275182724,0.308706313371658,0.448693335056305,0.466994106769562,0.438370853662491,0.476920962333679,0.492501705884933,0.486679792404175,0.47413045167923, 0.491592615842819,0.495432138442993,0.495353788137436,0.464972317218781,0.438023507595062,0.507173299789429,0.499462336301804,0.489138394594193,0.57302188873291,0.611708164215088,0.692197263240814,0.537839472293854,0.514241337776184,0.368297398090363,0.395665526390076,0.322331756353378,0.293465346097946,0.289082944393158,0.424469411373138,0.455118209123611,0.498355507850647,0.501125514507294,0.482653737068176,0.611623883247375,0.735338807106018,0.763435781002045,0.566104888916016,0.531529128551483,0.403756648302078,0.375872433185577,0.328113824129105,0.296638131141663,0.432593464851379,0.462690770626068,0.508043050765991,0.499496638774872,0.488325774669647,0.220216602087021,0.158084243535995,0.153392732143402,0.158346980810165,0.175082996487617,0.175009846687317,0.302030146121979,0.291526287794113,0.298471540212631,0.170197010040283,0.49937179684639,0.499444335699081,0.867103099822998,0.914438545703888,0.920026957988739,0.932686567306519,0.89571750164032,0.868821501731873,0.731371462345123,0.947578132152557,0.963693678379059,0.872940897941589,0.896303176879883,0.976179599761963,0.794882595539093,0.71112322807312,0.721732616424561,0.839061200618744,0.856555044651031,0.804526925086975,0.789306282997131,0.887579202651978,0.893890917301178,0.91931164264679,0.957172393798828,0.948259770870209,0.927057504653931,0.945972621440887,0.867647588253021,0.834470868110657,0.810692071914673,0.699405074119568,0.720930814743042,0.747544467449188,0.738045692443848,0.800284683704376,0.818203568458557,0.705126464366913,0.742816030979156,0.726684033870697,0.818915724754334,0.740670919418335,0.698642075061798,0.72279292345047,0.924771547317505,0.910344541072845,0.930291533470154,0.909846127033234,0.72337418794632,0.754449546337128,0.923452615737915,0.768020153045654,0.937496244907379,0.732703745365143,0.846335530281067,0.747398257255554,0.779557764530182,0.856311082839966,0.863609313964844,0.778908848762512,0.800135552883148,0.949707448482513,0.932618141174316,0.901033520698547,0.881569683551788,0.858479797840118,0.861806094646454,0.876955330371857, 0.913475751876831,0.902207493782043,0.884879410266876,0.815134942531586,0.827250480651855,0.804454684257507,0.272561937570572,0.231209844350815,0.0461372584104538,0.0474661439657211,0.0256336480379105,0.26273712515831,0.0582256130874157,0.0627454370260239,0.384406566619873,0.526714742183685,0.137601256370544,0.191710874438286,0.120221570134163,0.388462126255035,0.518283665180206,0.444480806589127,0.142405226826668,0.254854619503021,0.221037641167641,0.00602481933310628,0.0129641862586141,0.0140214012935758,0.0106260320171714,0.0104052014648914,0.0760594680905342,0.090136930346489,0.111144416034222,0.102193497121334,0.087060958147049,0.110249400138855,0.518938064575195,0.411055415868759,0.424786895513535,0.51365065574646,0.51007604598999,0.106127068400383,0.098522275686264,0.143285870552063,0.848161458969116,0.87744414806366,0.883877217769623,0.882674098014832,0.814743518829346,0.609453201293945,0.90973961353302,0.894276797771454,0.656733632087708,0.683802425861359,0.787524402141571,0.609966337680817,0.700185656547546,0.681110978126526,0.590685248374939,0.812042593955994,0.85488498210907,0.84349662065506,0.0114013524726033,0.02998979203403,0.82684862613678,0.862479329109192,0.899892747402191,0.952809393405914,0.681385636329651,0.100912190973759,0.747959554195404,0.205182448029518,0.230525285005569,0.165347367525101,0.145352244377136,0.118710324168205,0.149910762906075,0.161987856030464,0.183680325746536,0.922620356082916,0.936474502086639,0.950519919395447,0.921152293682098,0.698137700557709,0.196451008319855,0.212425723671913,0.307027161121368,0.281326144933701,0.241061449050903,0.280320852994919,0.312100201845169,0.350002586841583,0.358223885297775,0.923398077487946,0.948159337043762,0.952609419822693,0.910579383373261,0.842493653297424,0.76557469367981,0.74022364616394,0.854901850223541,0.889715433120728,0.871529042720795,0.814254105091095,0.769732594490051,0.691287755966187,0.756349682807922,0.84500390291214,0.882726013660431,0.943487286567688,0.909797847270966,0.477754294872284,0.46895295381546,0.463263988494873, 0.461836606264114,0.495633959770203,0.562544822692871,0.954037547111511,0.972498118877411,0.973097383975983,0.965942442417145,0.938558042049408,0.893055737018585,0.87899911403656,0.889513552188873,0.91115391254425,0.924653291702271,0.933769881725311,0.955277562141418,0.962941586971283,0.918522894382477,0.901508152484894,0.903438150882721,0.918805599212646,0.00601938785985112,0.00834209378808737,0.00902128033339977,0.0135680222883821,0.0111072529107332,0.0150740267708898,0.0156109463423491,0.010163702070713,0.00943706650286913,0.0140196084976196,0.0099268015474081,0.0936370566487312,0.168840080499649,0.122784204781055,0.0621220096945763,0.0685685127973557,0.0819874033331871,0.144232213497162,0.064440906047821,0.076024703681469,0.113322794437408,0.105542831122875,0.0744545161724091,0.130451485514641,0.00976161099970341,0.0145163740962744,0.0138357421383262,0.121410675346851,0.200015738606453,0.301278203725815,0.255931317806244,0.191387891769409,0.277878195047379,0.186294168233871,0.266687244176865,0.167191758751869,0.234919160604477,0.144132137298584,0.158535718917847,0.192940473556519,0.177407220005989,0.243259996175766,0.200750648975372,0.156268417835236,0.185902982950211,0.292245775461197,0.194213286042213,0.327614605426788,0.329183489084244,0.234623968601227,0.294932305812836,0.130018100142479,0.123868778347969,0.144459187984467,0.146622702479362,0.141849026083946,0.12442585080862,0.123008102178574,0.144393637776375,0.154975846409798,0.15810427069664,0.151754051446915,0.0537906028330326,0.0468266531825066,0.065875843167305,0.0777100026607513,0.0168748777359724,0.0163245107978582,0.00927029177546501,0.0200852919369936,0.0175574477761984,0.0358083657920361,0.0347359552979469,0.016555942595005,0.0400237366557121,0.0218191370368004,0.020828140899539,0.0365235395729542,0.0203306749463081,0.0189031958580017,0.0160851050168276,0.0162520669400692,0.00517894886434078,0.00588505202904344,0.00754177523776889,0.0102942585945129,0.0103370044380426,0.0127858771011233,0.012725648470223,0.00225719925947487,0.00247967103496194,0.00295583484694362, 0.00343910092487931,0.00394250405952334,0.00460764346644282,0.00465325219556689,0.120615385472775,0.14638939499855,0.0259825028479099,0.0130146369338036,0.190072625875473,0.251881569623947,0.303522676229477,0.279425084590912,0.26716735959053,0.233579471707344,0.179389476776123,0.139929533004761,0.197481900453568,0.24097965657711,0.284078896045685,0.323536843061447,0.327070295810699,0.294761389493942,0.114823281764984,0.226902142167091,0.0431271307170391,0.145354419946671,0.0154700810089707,0.0150748556479812,0.00514666130766273,0.0122474236413836,0.00207593385130167,0.00224691699258983,0.00269671017304063,0.00313036795705557,0.00352810276672244,0.00421923352405429,0.00424055708572268,0.00718909921124578,0.131111428141594,0.1904236972332,0.117000259459019,0.112939313054085,0.0377954840660095,0.0207168702036142,0.00744775822386146,0.00290136318653822,0.00263731856830418,0.0318821966648102,0.033955492079258,0.0340485014021397,0.0420655496418476,0.0518187135457993,0.0640029832720757,0.0653755888342857,0.0614099651575089,0.0705062747001648,0.0752784609794617,0.0743302553892136,0.0811913460493088,0.0129808885976672,0.00815192423760891,0.0342321582138538,0.0194837842136621,0.00951037462800741,0.00378233869560063,0.00344818504527211,0.0190328881144524,0.0203976389020681,0.0197686478495598,0.0239295717328787,0.0362217575311661,0.0423260144889355,0.0255603417754173,0.0229577608406544,0.00873913522809744,0.0217538680881262,0.00433075288310647,0.0036963103339076,0.00499796494841576,0.00928898807615042,0.0450254566967487,0.0831537395715714,0.135650485754013,0.130224153399467,0.16381923854351,0.155462980270386,0.0740097686648369,0.0420636013150215,0.0245508179068565,0.0395204722881317,0.0222378242760897,0.0114340204745531,0.0219455249607563,0.0109243430197239,0.00495197344571352,0.00366251519881189,0.0061621661297977,0.0185748841613531,0.0373528525233269,0.0796886682510376,0.134703129529953,0.156516999006271,0.154058814048767,0.166036114096642,0.183200716972351,0.187224566936493,0.170882597565651,0.175537288188934,0.13520647585392, 0.0566487982869148,0.0172476153820753,0.00909297820180655,0.00375358271412551,0.00212639267556369,0.176418080925941,0.0626516193151474,0.118131652474403,0.0054199667647481,0.00607475265860558,0.0113804060965776,0.02058863081038,0.0292676221579313,0.00431942893192172,0.00483407266438007,0.0111857131123543,0.0219631418585777,0.0346396937966347,0.207832738757133,0.191206589341164,0.181002408266068,0.174648985266685,0.168996915221214,0.130842283368111,0.0597061589360237,0.0324756540358067,0.0199867393821478,0.0100693386048079,0.135849490761757,0.14685232937336,0.0373170301318169,0.021842535585165,0.0178676676005125,0.0135938273742795,0.195307448506355,0.213279038667679,0.204697161912918,0.00610648980364203,0.00557427806779742,0.00583919091150165,0.00909410696476698,0.0073732896707952,0.00370940519496799,0.012044102884829,0.0105202021077275,0.00344539806246758,0.00359235098585486,0.00363875622861087,0.0143134286627173,0.0115217352285981,0.00785835832357407,0.0104260966181755,0.00781506765633821,0.00501787103712559,0.00545677542686462,0.00821452960371971,0.010861468501389,0.00835950020700693,0.00238670338876545,0.0143737019971013,0.0138825587928295,0.0107513386756182,0.00915904622524977,0.00299868453294039,0.00963104423135519,0.00679265987128019,0.012193463742733,0.00867342483252287,0.00494985934346914,0.00614452222362161,0.00640818430110812,0.00739147840067744,0.00805440545082092,0.00842596776783466,0.00990130472928286,0.0104558849707246,0.00973545853048563,0.0086657702922821,0.00753398612141609,0.00441383477300406,0.00373748014681041,0.0138004226610065,0.014424704015255,0.0142838153988123,0.0120262494310737,0.0115351295098662,0.0107753975316882,0.0108194667845964,0.00225539784878492,0.00285463081672788,0.00352868554182351,0.0021801870316267,0.00267730024643242,0.00316165899857879,0.00324151059612632,0.00410548970103264,0.00519956555217505,0.00550984358415008,0.0070008379407227,0.00705693243071437,0.00594623200595379,0.00503702042624354,0.0078852828592062,0.00768171390518546,0.00841241609305143,0.00822311267256737,0.00904565863311291, 0.0104596195742488,0.00985451228916645,0.00801316741853952,0.0107286684215069,0.0114901326596737,0.0124793574213982,0.0123585993424058,0.0101920366287231,0.00971191469579935,0.0085464296862483,0.00770653877407312,0.00526364566758275,0.00548436446115375,0.00534455617889762,0.00661897333338857,0.00642301049083471,0.00342081906273961,0.0031899162568152,0.0712230056524277,0.0108023602515459,0.052430871874094,0.073781818151474,0.00652772095054388,0.0106889866292477,0.00708547234535217,0.00926093105226755,0.0585980378091335,0.0733336359262466,0.136360675096512,0.11399856954813,0.0794778615236282,0.0758616849780083,0.0815607607364655,0.0789245441555977,0.0123216593638062,0.00933465082198381,0.0135329077020288,0.0171680320054293,0.0172486528754234,0.0143897123634815,0.0164850633591414,0.0151780126616359,0.0148288169875741,0.0180841628462076,0.0762000754475594,0.0706229358911514,0.0600572787225246,0.0717723518610001,0.015342109836638,0.0887890160083771,0.0764502882957459,0.0141895366832614,0.0898933708667755,0.0702709257602692,0.00957185961306095,0.0102252848446369,0.921268224716187,0.864661574363709,0.822214543819427,0.812577962875366,0.796024262905121,0.785190284252167,0.79579108953476,0.798974096775055,0.819302141666412,0.832208096981049,0.901484370231628,0.898276150226593,0.966843247413635,0.980400025844574,0.947536468505859,0.940471768379211,0.919764041900635,0.792019844055176,0.817002594470978,0.88964307308197,0.902016878128052,0.894849300384521,0.844491899013519,0.768581807613373,0.694739043712616,0.614177823066711,0.525126099586487,0.490100830793381,0.426283806562424,0.293765276670456,0.153728500008583,0.0190700236707926,0.0979115888476372,0.128510400652885,0.153869733214378,0.128945022821426,0.0753603354096413,0.0418420247733593,0.0342198349535465,0.0391802079975605,0.0238109808415174,0.793688833713531,0.822716176509857,0.879287540912628,0.890917479991913,0.884676992893219,0.851999402046204,0.756732761859894,0.676083326339722,0.605361580848694,0.528316974639893,0.48301774263382,0.40739181637764,0.237763002514839,0.117609687149525, 0.159359708428383,0.268328428268433,0.395739287137985,0.461845338344574,0.520696938037872,0.648815512657166,0.73719322681427,0.797538042068481,0.895237147808075,0.92297637462616,0.949268698692322,0.926944434642792 } Transform: *16 { a: 0.140922901343132,0.237354541727967,-0.961147012620551,0,-0.955665486123911,-0.220918692514086,-0.194674927277415,0,-0.258542303121039,0.945969218151926,0.195699051049484,0,18.3849263661072,0.242577124515336,10.4387144787704,1 } TransformLink: *16 { a: 0.140922914308808,-0.955665574050354,-0.258542326908342,0,0.23735453962216,-0.220918690554097,0.945969209759294,0,-0.961146987859919,-0.194674922262287,0.195699046007975,0,7.38470479382302,19.6555869599185,2.48096468690343,1 } } Deformer: 136865392, "SubDeformer::Cluster_R_Knee", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1818 { a: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6698,6699,6701,6716,6722,6723,6724,6725,6726,6728,6729,6730,6732,6733,6735,6741,6746,6747,6749,6750,6753,6763,6764,6765,6766,6767,6768,6769,6770,6771,6791,6793,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6820,6822,6826,6838, 6839,6840,6846,6848,6849,6850,6853,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6906,6907,6908,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562, 7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972, 7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8371,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8386,8387,8388, 8389,8390,8391,8392,8393,8394,8395,8396,8398,8399,8401,8402,8403,8404,8405,8407,8408,8409,8410,8411,8412,8413,8415,8416,8417,8418,8419,8420,8421,8422,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900 } Weights: *1818 { a: 0.220141038298607,0.196640759706497,0.153409913182259,0.173608124256134,0.170320183038712,0.126419186592102,0.152392864227295,0.0990139618515968,0.14085453748703,0.079532116651535,0.147607132792473,0.121031373739243,0.105083473026752,0.136538848280907,0.0943783670663834,0.0724063515663147,0.0722803249955177,0.0489093288779259,0.106058277189732,0.128956601023674,0.152325019240379,0.0713165998458862,0.0447216145694256,0.031447634100914,0.169862657785416,0.232006281614304,0.165772020816803,0.103722266852856,0.127653449773788,0.0925964862108231,0.0742828398942947,0.102622017264366,0.0663422048091888,0.0716065540909767,0.130576521158218,0.0677648112177849,0.0536255724728107,0.0473034679889679,0.0628226026892662,0.0479825399816036,0.067742720246315,0.0573438853025436,0.0696251764893532,0.0868862792849541,0.0757204443216324,0.0417658872902393,0.0329458601772785,0.0323476977646351,0.138429492712021,0.0827741399407387,0.0930347740650177,0.163813948631287,0.159034430980682,0.0869526043534279,0.162047952413559,0.142031565308571,0.151230424642563,0.0715784579515457,0.0521086603403091,0.0846825391054153,0.104763366281986,0.0371469594538212,0.0241532288491726,0.0175831317901611,0.0114828906953335,0.0103546818718314,0.00621779635548592,0.074313260614872,0.0827364549040794,0.0413508154451847,0.0380601659417152,0.0194987952709198,0.0177487712353468,0.0106342006474733,0.0105341300368309,0.125118091702461,0.132997080683708,0.105603471398354,0.104569979012012,0.0389265194535255,0.0191667303442955,0.0287600625306368,0.0502987541258335,0.00945161189883947,0.0159818902611732,0.00747003080323339,0.0126327406615019,0.0298153646290302,0.0158855058252811,0.0162288565188646,0.0306226052343845,0.0130019411444664,0.0123899765312672,0.0611419267952442,0.0459677539765835,0.120401263237,0.0655012801289558,0.0809809416532516,0.0507620275020599,0.120858289301395,0.173239305615425,0.194508209824562,0.221619069576263,0.203462481498718,0.122273154556751,0.09067752212286,0.177778586745262,0.051736406981945,0.142719075083733,0.0299448184669018, 0.119198977947235,0.0204716790467501,0.0987163037061691,0.224970236420631,0.2149518430233,0.0608539916574955,0.108437448740005,0.0730664432048798,0.0295846927911043,0.0679258480668068,0.0184821859002113,0.0888713151216507,0.0201829187572002,0.151507362723351,0.159909516572952,0.0684026852250099,0.0399749800562859,0.0165998600423336,0.00700818002223969,0.00339218555018306,0.119954824447632,0.159810870885849,0.026742946356535,0.0114951739087701,0.00492738699540496,0.00390063645318151,0.0691457614302635,0.10404796153307,0.197378575801849,0.223885104060173,0.169401437044144,0.152185380458832,0.139821991324425,0.195010915398598,0.227022230625153,0.205337241292,0.236822202801704,0.129063829779625,0.10129588842392,0.098905049264431,0.127973169088364,0.164971455931664,0.171554416418076,0.141118869185448,0.153867691755295,0.0792033225297928,0.047408863902092,0.0212051570415497,0.00996504724025726,0.00513662165030837,0.169499516487122,0.131101578474045,0.0164731852710247,0.0349107123911381,0.00778661575168371,0.00612845923751593,0.0805720686912537,0.117815710604191,0.203761518001556,0.150883167982101,0.0263166353106499,0.0260032135993242,0.0250821709632874,0.0255798380821943,0.0258219204843044,0.0247958730906248,0.0258203968405724,0.0247954521328211,0.0260004531592131,0.0250848215073347,0.0263162683695555,0.0255927629768848,0.0266841575503349,0.0261857993900776,0.0270041264593601,0.0267010051757097,0.0271879117935896,0.0269935075193644,0.02718535810709,0.0269825775176287,0.0269987527281046,0.0266757011413574,0.0266804657876492,0.0261615887284279,0.0143657755106688,0.0146409207955003,0.014243665151298,0.0143082411959767,0.0145482616499066,0.0149050131440163,0.0152825172990561,0.015573070384562,0.015692763030529,0.0156103633344173,0.0153549471870065,0.0150005919858813,0.0141262682154775,0.014289983548224,0.0140563026070595,0.0140992347151041,0.0142459003254771,0.0144590968266129,0.0146814035251737,0.0148508176207542,0.014919743873179,0.0148700829595327,0.0147177278995514,0.014505572617054,0.0264943614602089,0.0144799686968327, 0.0128087373450398,0.0125354304909706,0.0135557120665908,0.0139769492670894,0.0119528453797102,0.0118387266993523,0.0114311072975397,0.0112328929826617,0.0119501119479537,0.0109694907441735,0.0105171836912632,0.0115400878712535,0.0127152362838387,0.0141406208276749,0.0138709126040339,0.0123479459434748,0.014054648578167,0.0105507085099816,0.0112162828445435,0.0103214271366596,0.00832196790724993,0.00780804269015789,0.009716154076159,0.0109609924256802,0.00889249425381422,0.0117862774059176,0.00957919284701347,0.0132214203476906,0.0106281461194158,0.0078987218439579,0.00974421761929989,0.00606143195182085,0.00582409603521228,0.006409399677068,0.00684636645019054,0.00745494896546006,0.00601428793743253,0.0275966115295887,0.0181790292263031,0.0181697066873312,0.0285454522818327,0.0276724547147751,0.0187410712242126,0.0268586464226246,0.0184552185237408,0.0250636301934719,0.0172649938613176,0.019733514636755,0.0134406527504325,0.0139356125146151,0.0093548521399498,0.0149864898994565,0.0151962209492922,0.0146243590861559,0.0157075729221106,0.0155551945790648,0.014719114638865,0.0116011705249548,0.00815725512802601,0.00698467111214995,0.0114818196743727,0.00595068512484431,0.0059604668058455,0.00769807770848274,0.00820890627801418,0.00769744720309973,0.00735840713605285,0.00857078935950994,0.00550975417718291,0.00538937421515584,0.00574404746294022,0.00558742601424456,0.00542253814637661,0.0060554682277143,0.00633684219792485,0.00555249443277717,0.00549389235675335,0.0122513007372618,0.0115393688902259,0.0162530466914177,0.0160768274217844,0.0157166384160519,0.0177253689616919,0.0168536193668842,0.0166768617928028,0.0156811382621527,0.0122465901076794,0.00686993170529604,0.0105261523276567,0.0118814883753657,0.0123907420784235,0.0103754969313741,0.00876099895685911,0.00992501713335514,0.00972733367234468,0.00843804981559515,0.00654476601630449,0.00710128992795944,0.00654926057904959,0.0154141951352358,0.0141462627798319,0.0124341379851103,0.0086600873619318,0.00688489247113466,0.00934554636478424,0.00654751248657703,0.0263030026108027, 0.0273692011833191,0.0282624904066324,0.027193795889616,0.0285530146211386,0.0259348955005407,0.0271139964461327,0.0285574868321419,0.0263970233500004,0.0274529494345188,0.0258188918232918,0.0267107132822275,0.0244190320372581,0.0250732563436031,0.019841056317091,0.0200264994055033,0.0146815227344632,0.0144339753314853,0.0155869135633111,0.0274546537548304,0.0249893926084042,0.0289218779653311,0.0288524646311998,0.0128778191283345,0.0118977092206478,0.0276516489684582,0.00106737855821848,0.00147805246524513,0.00186067610047758,0.00154843716882169,0.0036833977792412,0.00418908474966884,0.00448016077280045,0.00374782993458211,0.00193444255273789,0.00644434196874499,0.00766608444973826,0.00174500048160553,0.00267062359489501,0.00478887232020497,0.00191833276767284,0.00174229417461902,0.00180287600960582,0.00234546139836311,0.00128583842888474,0.00214079977013171,0.00140055792871863,0.00909567438066006,0.00757129164412618,0.00278374785557389,0.00112155079841614,0.00206252257339656,0.00200117845088243,0.00242027174681425,0.00110937282443047,0.00150165776722133,0.00248800916597247,0.00127343449275941,0.00167676596902311,0.00287574343383312,0.00260993512347341,0.00256595364771783,0.00664327759295702,0.00750663643702865,0.00799639988690615,0.00774700241163373,0.00502653978765011,0.00414060847833753,0.0036840895190835,0.0028526852838695,0.00134008366148919,0.00286239455454051,0.00227882293984294,0.00194987049326301,0.00147433683741838,0.00247713620774448,0.00126496504526585,0.00147068768274039,0.00135243590921164,0.00185178325045854,0.00391016947105527,0.004016381688416,0.00242762104608119,0.00200948468409479,0.00443852646276355,0.00136092700995505,0.00104104517959058,0.00326772313565016,0.00148255017120391,0.0063310656696558,0.00368746998719871,0.00776247633621097,0.00483347987756133,0.00770892156288028,0.00199186499230564,0.00678484840318561,0.00392672047019005,0.00797629542648792,0.00253050401806831,0.00546338874846697,0.00483818212524056,0.00294264638796449,0.0548139214515686,0.0542830303311348,0.0551107376813889,0.0511926561594009, 0.0479608401656151,0.0406333766877651,0.049762561917305,0.0452366508543491,0.0694228634238243,0.0721440538764,0.0708158910274506,0.0708349570631981,0.0531061626970768,0.151600793004036,0.16706295311451,0.187487840652466,0.20305697619915,0.185971736907959,0.0536451786756516,0.0685874670743942,0.150415137410164,0.162891030311584,0.158822327852249,0.181840136647224,0.202600136399269,0.195908606052399,0.179913505911827,0.0658068060874939,0.0661866217851639,0.0506342947483063,0.0491116270422935,0.0422941707074642,0.0326761230826378,0.0382144711911678,0.0465906858444214,0.062720313668251,0.140485212206841,0.1581671833992,0.149998217821121,0.150477170944214,0.154587730765343,0.172840252518654,0.185358956456184,0.190242305397987,0.188034802675247,0.18121549487114,0.17025201022625,0.0618722401559353,0.0479507856070995,0.0469446107745171,0.0404198542237282,0.0365250930190086,0.0973862633109093,0.107481263577938,0.1095936819911,0.139569535851479,0.152655407786369,0.150148823857307,0.139526158571243,0.12822799384594,0.0253077670931816,0.022599495947361,0.0183013062924147,0.0162242501974106,0.0368710495531559,0.0366680882871151,0.0385774858295918,0.0384872518479824,0.0473769642412663,0.0496687814593315,0.0385955348610878,0.0451695919036865,0.0358225330710411,0.0359686277806759,0.0315400585532188,0.0277408231049776,0.0275891739875078,0.0291530825197697,0.0292667131870985,0.0293035674840212,0.0269972402602434,0.0237951017916203,0.0364551581442356,0.0372793786227703,0.0534247048199177,0.0492258481681347,0.0466186590492725,0.0372154116630554,0.0286095775663853,0.028106402605772,0.028421763330698,0.028885792940855,0.0359596349298954,0.037527784705162,0.0339093990623951,0.0175160877406597,0.0160310510545969,0.0322983153164387,0.0407855957746506,0.0247920826077461,0.0249441564083099,0.0332219377160072,0.0338853560388088,0.0262994114309549,0.0262606032192707,0.0346851497888565,0.0247869081795216,0.0316552892327309,0.0168954823166132,0.0228659026324749,0.0132605377584696,0.0257446225732565,0.0263346303254366,0.0339123904705048,0.0255348067730665, 0.0316641889512539,0.0281443577259779,0.0253598038107157,0.0834964960813522,0.019385414198041,0.0144114922732115,0.0338635481894016,0.0556614510715008,0.0164240393787622,0.0165059790015221,0.0164197888225317,0.0167112294584513,0.0193981938064098,0.0205408912152052,0.266567349433899,0.225157037377357,0.0447328165173531,0.0239948108792305,0.258423954248428,0.141974464058876,0.198101460933685,0.15009517967701,0.264132052659988,0.228737831115723,0.00562358135357499,0.00970039144158363,0.0523732267320156,0.0809437707066536,0.106471337378025,0.108843788504601,0.0993791148066521,0.143784582614899,0.0121610853821039,0.0205767769366503,0.214575499296188,0.239684775471687,0.178178697824478,0.195422396063805,0.209848985075951,0.207440286874771,0.308593571186066,0.263911694288254,0.198621273040771,0.28539165854454,0.192363008856773,0.273256719112396,0.172058612108231,0.240541025996208,0.148058325052261,0.161714926362038,0.197376787662506,0.176624745130539,0.242707774043083,0.201266199350357,0.156212627887726,0.18373216688633,0.290508925914764,0.190370336174965,0.324851483106613,0.325155407190323,0.229891330003738,0.290514171123505,0.135948672890663,0.12972891330719,0.163868829607964,0.158908322453499,0.127753525972366,0.125486969947815,0.143728271126747,0.15307492017746,0.154907420277596,0.147174850106239,0.0302150081843138,0.0179505366832018,0.0173399485647678,0.032318964600563,0.0182068049907684,0.0369845628738403,0.0409977771341801,0.0224265139549971,0.02091402746737,0.0367025434970856,0.0202252976596355,0.0182462017983198,0.0153633151203394,0.0153902797028422,0.00546120433136821,0.00614713365212083,0.00780274532735348,0.0103121725842357,0.0102445967495441,0.0122391441836953,0.0120558049529791,0.00240382552146912,0.00261368881911039,0.00308898207731545,0.0035490239970386,0.00399774499237537,0.00459673209115863,0.00458607450127602,0.121339060366154,0.147182881832123,0.197571039199829,0.26008602976799,0.311032861471176,0.287158697843552,0.273924022912979,0.239386796951294,0.183864384889603,0.142866030335426,0.197976171970367, 0.240400284528732,0.28218087553978,0.320579469203949,0.322815716266632,0.290193647146225,0.120546653866768,0.222052201628685,0.140751510858536,0.0163820739835501,0.0142385689541698,0.00542507180944085,0.0115760723128915,0.00221272790804505,0.0023711749818176,0.00282163615338504,0.00317213404923677,0.00357885169796646,0.00420893495902419,0.00418007094413042,0.00739439064636827,0.00683258147910237,0.132019907236099,0.191063180565834,0.119362480938435,0.0284428987652063,0.00810533761978149,0.113767258822918,0.038724422454834,0.0212871395051479,0.00770025048404932,0.00302603910677135,0.00275358185172081,0.0301092397421598,0.0321386978030205,0.0324373990297318,0.040670283138752,0.0509076714515686,0.0635824501514435,0.0657511055469513,0.0618208535015583,0.0720918327569962,0.0769494622945786,0.0765324309468269,0.0743149816989899,0.0804609358310699,0.0854995623230934,0.0128151131793857,0.00777194974943995,0.0344400107860565,0.0195869654417038,0.00954691600054502,0.00379748572595418,0.00346317188814282,0.0179612133651972,0.0192962810397148,0.0188435316085815,0.0230968538671732,0.0361262373626232,0.0432674884796143,0.0261948890984058,0.0235383044928312,0.0090101845562458,0.022206012159586,0.00445583695545793,0.00383905950002372,0.00506020803004503,0.00951316021382809,0.0460106357932091,0.0847913771867752,0.138023719191551,0.131213068962097,0.166694819927216,0.156544402241707,0.0745199620723724,0.0423311516642571,0.0246866699308157,0.0397612191736698,0.0223495364189148,0.0114756962284446,0.0221945624798536,0.0110521893948317,0.00496905716136098,0.00389229226857424,0.00643961364403367,0.0192630626261234,0.0385988131165504,0.0820584818720818,0.112035349011421,0.138285085558891,0.160750851035118,0.158167973160744,0.170805841684341,0.189076989889145,0.19410303235054,0.177998840808868,0.182540401816368,0.141154646873474,0.0894900858402252,0.0342159382998943,0.00965154357254505,0.00418656365945935,0.00237840251065791,0.183685347437859,0.062582790851593,0.118039816617966,0.00520113110542297,0.00584284262731671,0.0112213315442204,0.0201321765780449, 0.0286685489118099,0.00420221220701933,0.00471079163253307,0.0110045308247209,0.0217082388699055,0.0343283303081989,0.204040139913559,0.189030945301056,0.180175974965096,0.173992961645126,0.168315663933754,0.130297273397446,0.059353269636631,0.0322089642286301,0.0197652205824852,0.0099091986194253,0.131604447960854,0.14289553463459,0.0357057303190231,0.0209082346409559,0.0171405524015427,0.0130592565983534,0.191065490245819,0.208427935838699,0.205090165138245,0.00994481611996889,0.00936297792941332,0.00965779647231102,0.00963758956640959,0.0111713800579309,0.00611869245767593,0.0038256177213043,0.00960911344736815,0.0110513623803854,0.0102578569203615,0.00362409418448806,0.00338122970424592,0.00906169321388006,0.00970547460019588,0.00144677876960486,0.00160244794096798,0.00264640781097114,0.00462430063635111,0.0017758650938049,0.00194164353888482,0.00297714397311211,0.00503711635246873,0.00147938809823245,0.0017682610778138,0.00228582904674113,0.0105864265933633,0.00957369245588779,0.0102702956646681,0.0098283477127552,0.0924438461661339,0.0143077401444316,0.0122878095135093,0.133630022406578,0.141978055238724,0.146272510290146,0.160872846841812,0.158548668026924,0.1529251486063,0.143999874591827,0.14327535033226,0.134030342102051,0.0194255840033293,0.0241993553936481,0.0397681333124638,0.0347787775099278,0.0424629487097263,0.0764479711651802,0.130649253726006,0.155860245227814,0.130433484911919,0.0997007936239243,0.522098422050476,0.539064466953278,0.600684404373169,0.564567744731903,0.578698098659515,0.67663186788559,0.613317966461182,0.627128183841705,0.56117171049118,0.526740491390228,0.587794005870819,0.603702127933502,0.513156652450562,0.501628339290619,0.51724100112915,0.507181763648987,0.50683331489563,0.510595977306366,0.51329904794693,0.499076575040817,0.498843401670456,0.49879378080368,0.498762190341949,0.4991694688797,0.512927711009979,0.533550322055817,0.462437272071838,0.407903462648392,0.382052510976791,0.450885593891144,0.338004499673843,0.430793106555939,0.309323966503143,0.417452901601791,0.298160076141357, 0.412941426038742,0.445640444755554,0.462612688541412,0.43747690320015,0.435000836849213,0.482632666826248,0.488787829875946,0.472163766622543,0.469649881124496,0.493643283843994,0.488330274820328,0.494619727134705,0.495285451412201,0.459936022758484,0.433365523815155,0.500856637954712,0.498682528734207,0.484847009181976,0.503007411956787,0.543912529945374,0.606569468975067,0.650449335575104,0.565938055515289,0.725132644176483,0.606685757637024,0.74704772233963,0.630785703659058,0.585659027099609,0.549062013626099,0.602989912033081,0.519738018512726,0.509474873542786,0.530255079269409,0.536091029644012,0.514073669910431,0.518159925937653,0.515052437782288,0.499041229486465,0.49930602312088,0.498829960823059,0.499354362487793,0.531567454338074,0.564122378826141,0.467445582151413,0.455564588308334,0.383804261684418,0.410712748765945,0.434326201677322,0.338629901409149,0.419354826211929,0.309535533189774,0.44914898276329,0.467186599969864,0.439384043216705,0.477136939764023,0.492851316928864,0.487034231424332,0.474351823329926,0.491978049278259,0.495757520198822,0.495674669742584,0.46476948261261,0.43713316321373,0.508034825325012,0.499508380889893,0.489449739456177,0.571016192436218,0.608602643013,0.687842011451721,0.536954998970032,0.514068126678467,0.374398648738861,0.40116485953331,0.328352868556976,0.298213601112366,0.291857182979584,0.429039031267166,0.458238869905472,0.498540431261063,0.501182377338409,0.484154582023621,0.617342472076416,0.740442156791687,0.765326619148254,0.570390999317169,0.534031748771667,0.402218997478485,0.374190449714661,0.327226936817169,0.297424823045731,0.431489735841751,0.462401211261749,0.508988261222839,0.499542444944382,0.488626062870026,0.160449832677841,0.156783670186996,0.159524708986282,0.176437810063362,0.177402451634407,0.303022652864456,0.294236481189728,0.3028225004673,0.17349174618721,0.499316424131393,0.499484270811081,0.861416578292847,0.912409961223602,0.891903102397919,0.862789690494537,0.725841045379639,0.949873089790344,0.959999978542328,0.790222585201263,0.706912875175476, 0.71718156337738,0.859648823738098,0.808649182319641,0.79305899143219,0.889781832695007,0.894380807876587,0.959999978542328,0.956703424453735,0.946452438831329,0.980000019073486,0.943891108036041,0.864047408103943,0.82993084192276,0.696012794971466,0.716923475265503,0.743593811988831,0.734707891941071,0.795767307281494,0.814093708992004,0.702549576759338,0.740187525749207,0.723242402076721,0.81572687625885,0.738231301307678,0.696267068386078,0.719566822052002,0.922518908977509,0.90799868106842,0.928278088569641,0.907724499702454,0.723899960517883,0.755184590816498,0.922885239124298,0.768464267253876,0.936938226222992,0.733437836170197,0.846593260765076,0.749828815460205,0.782762229442596,0.858797311782837,0.865191996097565,0.780552983283997,0.802658915519714,0.843815445899963,0.85517144203186,0.851339101791382,0.962358355522156,0.959563791751862,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.959999978542328,0.822296917438507,0.837610244750977,0.815930068492889,0.443763226270676,0.0434230305254459,0.0614212267100811,0.0644745230674744,0.386088460683823,0.699999988079071,0.392738252878189,0.699999988079071,0.448874175548553,0.014375370927155,0.0140107590705156,0.0121789062395692,0.0883964225649834,0.0934296697378159,0.107252053916454,0.0872711762785912,0.116611294448376,0.414927542209625,0.519198000431061,0.410463094711304,0.422229081392288,0.699999988079071,0.515911340713501,0.511167705059052,0.959999978542328,0.959999978542328,0.959999978542328,0.866300702095032,0.821096897125244,0.863957941532135,0.806740343570709,0.800000011920929,0.894073009490967,0.663112103939056,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.800000011920929,0.802115261554718,0.896774470806122,0.843385517597198,0.875415921211243,0.820724666118622,0.857815444469452,0.897344946861267,0.955449402332306,0.690855324268341,0.0965502113103867,0.746420085430145, 0.173812687397003,0.150500819087029,0.116230010986328,0.119169160723686,0.145668879151344,0.156594097614288,0.959999978542328,0.953056275844574,0.924655854701996,0.948967397212982,0.800000011920929,0.330237716436386,0.299210637807846,0.277687549591064,0.242400661110878,0.254517376422882,0.287185370922089,0.320941507816315,0.35770645737648,0.365354865789413,0.959999978542328,0.955655336380005,0.915349721908569,0.959999978542328,0.866086006164551,0.807674944400787,0.851825594902039,0.686647355556488,0.959999978542328,0.94360226392746,0.910253405570984,0.921708941459656,0.495698720216751,0.477832108736038,0.469940274953842,0.46520921587944,0.464335680007935,0.487537801265717,0.49670997262001,0.566858947277069,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,0.933254480361938,0.954226672649384,0.997203588485718,0.917994320392609,0.899297475814819,0.901017010211945,0.91645485162735,0.510368406772614,0.00567376147955656,0.00783961825072765,0.00862109661102295,0.0129706580191851,0.0114124231040478,0.0154891554266214,0.0153114860877395,0.00997543521225452,0.00986269768327475,0.0140800727531314,0.00998373050242662,0.0988286286592484,0.176372304558754,0.0798520445823669,0.118268929421902,0.0590761005878448,0.0654688104987144,0.0755378156900406,0.0781648904085159,0.116748794913292,0.109995000064373,0.0766285732388496,0.133775547146797,0.144544675946236,0.0103117916733027,0.0153879709541798,0.0144848562777042,0.117053553462029,0.0758993700146675,0.0116922548040748,0.0524738281965256,0.0722815245389938,0.00605043582618237,0.0100520681589842,0.00665575684979558,0.00875646248459816,0.0561532005667686,0.0707956105470657,0.132949247956276,0.110543414950371,0.0790862739086151,0.0793771892786026,0.0800021290779114,0.0763092711567879,0.0117054879665375,0.00873408745974302,0.012912311591208,0.016739085316658,0.0182612165808678,0.0163208656013012,0.0179697703570127,0.01646638661623,0.0159950032830238, 0.0181978512555361,0.0780041739344597,0.0707865208387375,0.0570633821189404,0.0691082701086998,0.0176486875861883,0.0937477275729179,0.0800698399543762,0.0161298736929893,0.0884751826524735,0.0703100636601448,0.925126254558563,0.865002751350403,0.818695485591888,0.807025611400604,0.789011359214783,0.777534663677216,0.788373947143555,0.775901257991791,0.819406390190125,0.906084656715393,0.904069304466248,0.980000019073486,0.950653076171875,0.944453954696655,0.924925565719604,0.842944860458374,0.785732328891754,0.811322510242462,0.885092079639435,0.980000019073486,0.959999978542328,0.690811693668365,0.800000011920929,0.699999988079071,0.491733610630035,0.431082755327225,0.301695793867111,0.160689681768417,0.866851687431335,0.282693952322006,0.396244406700134,0.357076913118362,0.283264219760895,0.487969249486923,0.48589962720871,0.285435110330582,0.333517074584961,0.360721081495285,0.338640809059143,0.293287128210068,0.585670709609985,0.439837276935577,0.488081306219101,0.497676163911819,0.509250342845917,0.79224419593811,0.785737931728363,0.814616680145264,0.805732011795044,0.288319826126099,0.302083253860474,0.547470092773438,0.382642656564713,0.583310306072235,0.627152025699615,0.16984860599041,0.161324813961983,0.242668092250824,0.194719076156616,0.193076133728027,0.263555347919464,0.924197673797607,0.930089175701141,0.545478880405426,0.436976879835129,0.312507897615433,0.279589712619781,0.259755164384842,0.257184624671936,0.379078358411789,0.223878711462021,0.178313493728638,0.185774013400078,0.209724441170692,0.231508731842041,0.489078283309937,0.181608468294144,0.229795783758163,0.210761219263077,0.130062341690063,0.443184554576874,0.302244246006012,0.156397596001625,0.244913592934608,0.231316775083542,0.209852263331413,0.214463278651237,0.368181377649307,0.194402411580086,0.146217733621597,0.0835636109113693,0.499021202325821,0.213828831911087,0.0882539972662926,0.509222984313965,0.159289419651031,0.284890353679657,0.941314816474915,0.935063123703003,0.943666756153107,0.941324889659882,0.807415008544922,0.83213347196579, 0.822709619998932,0.805511653423309,0.67889791727066,0.705907464027405,0.811904907226563,0.768746256828308,0.769252598285675,0.844982445240021,0.566581130027771,0.557939112186432,0.498869776725769,0.499205946922302,0.44482946395874,0.499987721443176,0.607680559158325,0.343623101711273,0.417950123548508,0.500473856925964,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.288713306188583,0.27057296037674,0.313093364238739,0.363294124603271,0.0105788102373481,0.0119627024978399,0.00913762487471104,0.00863190740346909,0.0167196895927191,0.0136867398396134,0.0129346754401922,0.0155253410339355,0.041066687554121,0.0345800518989563,0.0700398311018944,0.0779722929000854,0.187142431735992,0.18392226099968,0.151584163308144,0.0362898372113705,0.422039180994034,0.451437085866928,0.404219388961792,0.463168919086456,0.43609756231308,0.385264873504639,0.4261115193367,0.100049085915089,0.169540390372276,0.0236841924488544,0.0192988906055689,0.00689365155994892,0.00697705056518316,0.00481623457744718,0.00500012142583728,0.00159262900706381,0.00495164794847369,0.00587473949417472,0.00218673190101981,0.00557536724954844,0.00198339577764273,0.00427171634510159,0.00395993422716856,0.00724899023771286,0.0075768306851387,0.00362888071686029,0.00689652562141418,0.0112851578742266,0.0142028098925948,0.014911531470716,0.0118908761069179,0.00892538111656904,0.00914312712848186,0.00959681440144777,0.00911114737391472,0.0123588955029845,0.00980997644364834,0.00817553699016571,0.00812354404479265,0.0385648533701897,0.0368411876261234,0.072588324546814,0.0790384635329247,0.0350004583597183,0.0725629329681396,0.156130000948906,0.149460017681122,0.179843455553055,0.418746024370193,0.40342652797699,0.422440052032471,0.460526168346405,0.458358615636826,0.449574530124664,0.468382894992828,0.471038162708282,0.470545202493668,0.467958033084869,0.460692286491394,0.459357529878616,0.482891708612442,0.465929388999939,0.497931659221649,0.497813880443573,0.424238741397858,0.43932181596756,0.197344973683357,0.202123180031776,0.169894814491272, 0.180889815092087,0.0224198717623949,0.0342224836349487,0.045203685760498,0.022312106564641,0.0928444340825081,0.0164433289319277,0.0166783984750509,0.0927439257502556,0.00851503014564514,0.00991012435406446,0.00945863127708435,0.0106856729835272,0.0120738754048944,0.0153764318674803,0.0145045462995768,0.0097744083032012,0.0110316863283515,0.011228172108531,0.0104443524032831,0.0342458859086037,0.0208848789334297,0.0129208713769913,0.0238716434687376,0.0135756591334939,0.00637398241087794,0.00917599815875292,0.0111155761405826,0.00927856750786304,0.0083415349945426,0.00750854006037116,0.00603275885805488,0.00858723465353251,0.00469777034595609,0.00487428903579712,0.00659612752497196,0.00405896268785,0.0082297483459115,0.0281874220818281,0.0109415305778384,0.00886029656976461,0.0284117553383112,0.0092842411249876,0.0342590026557446,0.0560368150472641,0.00952684786170721,0.0863779112696648,0.00806688796728849,0.00389114511199296,0.00306898960843682,0.294876396656036,0.308187693357468,0.495612591505051,0.496858716011047,0.288310408592224,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.180721387267113,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315,0.0102646071463823,0.49796661734581,0.498460471630096,0.129563570022583,0.00909560639411211,0.0105628436431289,0.0071029276587069,0.0100718205794692,0.00461686495691538,0.0050774859264493,0.00555201712995768,0.00648870132863522,0.00157895777374506,0.00208959938026965,0.00195883493870497,0.00278144469484687,0.00261728558689356,0.00434207217767835,0.00259597669355571,0.00188296823762357,0.162212789058685,0.463326036930084,0.437229096889496,0.0932958349585533,0.0973698645830154,0.032982986420393,0.446509718894959,0.493854820728302,0.255417793989182,0.475229948759079,0.495688110589981,0.481146574020386,0.497067838907242,0.0132362544536591, 0.0880826860666275,0.440971612930298,0.171690061688423,0.0110826743766665,0.0114450976252556,0.00285618449561298,0.176528409123421,0.00424475502222776,0.0860917866230011,0.0687148496508598,0.00279257842339575,0.00317180179990828,0.498153626918793,0.498638093471527,0.00624458026140928,0.497437328100204,0.481990486383438,0.398478388786316,0.397769749164581,0.420945376157761,0.016629746183753,0.156746998429298,0.150193274021149,0.0260692816227674,0.142986565828323,0.275827318429947,0.265518844127655,0.164150521159172,0.179356217384338,0.201655998826027,0.155882328748703,0.157176062464714,0.257369130849838,0.292699962854385,0.308371394872665,0.332619607448578,0.30545511841774,0.346422910690308,0.373265951871872,0.395905733108521,0.33428418636322,0.419889718294144,0.396339476108551,0.311042726039886,0.251168638467789,0.284843504428864,0.315118014812469,0.288207590579987,0.236284300684929,0.357216745615005,0.329778403043747,0.292900681495667,0.215388238430023,0.235113203525543,0.177311405539513,0.153885200619698,0.220909103751183,0.203227922320366,0.290471643209457,0.265276551246643,0.222590640187263,0.382111400365829,0.378728419542313,0.353820085525513,0.298215985298157,0.32230332493782,0.00384127185679972,0.00470884656533599,0.0104514425620437,0.00500548165291548,0.00195009738672525,0.00237587676383555,0.00140883540734649,0.00102973112370819,0.00200921390205622,0.018424516543746,0.00379193644039333,0.00546682765707374,0.00260537373833358,0.00422798423096538,0.00391553714871407,0.00523934373632073,0.00917614344507456,0.0130695644766092,0.00181645958218724,0.0016190770547837,0.00161480496171862,0.00720509560778737,0.0033471048809588,0.010807802900672,0.011268611997366,0.0110746510326862,0.0109697869047523,0.00400499766692519,0.00218103756196797,0.00204763538204134,0.00557699194177985,0.00210049748420715,0.0076933279633522,0.0180913154035807,0.012464378029108,0.00113955908454955,0.00530168693512678,0.00870633684098721,0.0107687721028924,0.00494451960548759,0.00292759365402162,0.00259687518700957,0.00461619254201651,0.00104889541398734, 0.00255234818905592,0.0124525716528296,0.0176442191004753,0.00738372420892119,0.00436095427721739,0.00292508560232818,0.00151343178004026,0.0106324488297105,0.0103887440636754,0.0103587573394179,0.0104789398610592,0.00571152800694108,0.0108468001708388,0.0124202640727162,0.0108270552009344,0.0154264066368341,0.0271961111575365,0.0281857512891293,0.0520243123173714,0.0335392132401466,0.0247473139315844,0.0136771816760302,0.014560129493475,0.0181196574121714,0.0251695867627859,0.00895520206540823,0.0134405633434653,0.00334702897816896,0.00581781379878521,0.00617641629651189,0.0039284210652113,0.00742758205160499,0.00921225268393755,0.0109213050454855,0.00813751667737961,0.00351928896270692,0.00460217660292983,0.00507055455818772,0.0222681555896997,0.0214629601687193,0.0244730785489082,0.00889820605516434,0.13249745965004,0.119435474276543,0.105335272848606,0.498115301132202,0.48156064748764,0.497372984886169,0.112148396670818,0.0752550736069679,0.0404751114547253,0.0515224635601044,0.346944451332092,0.319727420806885,0.139163225889206,0.825967967510223,0.72717809677124,0.57372260093689,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.584369242191315,0.581871628761292,0.704368472099304,0.828925788402557,0.80715149641037,0.756855845451355,0.799853920936584,0.81432843208313,0.834282636642456,0.724787771701813,0.729916453361511,0.713068842887878,0.496063411235809,0.479932904243469,0.503707051277161,0.454903155565262,0.344902217388153,0.38563796877861,0.383142232894897,0.417621582746506,0.367326766252518,0.309257745742798,0.334212064743042,0.3169926404953,0.355116635560989,0.325188308954239,0.263775318861008,0.228697031736374,0.45619061589241,0.495305687189102,0.498378992080688,0.90161406993866,0.892532229423523,0.823614180088043,0.58920294046402,0.503884494304657,0.800082147121429,0.787411451339722,0.705400943756104,0.573275506496429,0.500288963317871,0.495926558971405,0.46147620677948,0.892712831497192,0.876434028148651,0.794651567935944,0.639523088932037,0.304648637771606,0.192797943949699, 0.103648610413074,0.563636004924774,0.693290770053864,0.77239316701889,0.785526931285858,0.997469186782837,0.997240126132965,0.997250139713287,0.997131943702698,0.996462106704712,0.996456742286682,0.99651563167572,0.996563136577606,0.996726870536804,0.997069656848907,0.997214317321777,0.997197806835175,0.918697476387024,0.905072033405304,0.856663286685944,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.774849414825439,0.775606870651245,0.0752632021903992,0.134086862206459,0.108436532318592,0.151968613266945,0.260086327791214,0.394214272499084,0.462630331516266,0.699999988079071,0.800000011920929,0.800000011920929,0.899999976158142,0.959999978542328,0.996687591075897,0.980000019073486,0.919819533824921,0.859595537185669,0.83685839176178,0.865764141082764,0.820731580257416,0.80120724439621 } Transform: *16 { a: -0.140926346148789,-0.237352328489588,-0.961146982434929,0,-0.955665077054438,-0.220918009829913,0.194677605143504,0,-0.258541875099369,0.945969867344551,-0.195696175539477,0,18.3954966323429,0.260383799457137,-10.3666111330078,1 } TransformLink: *16 { a: -0.140926363663087,-0.955665195824307,-0.258541907230903,0,-0.237352355825338,-0.220918035272932,0.945969976291435,0,-0.96114709305435,0.194677627549155,-0.195696198062356,0,-7.30962499892272,19.6556066299249,2.48098514166593,1 } } Deformer: 136866528, "SubDeformer::Cluster_Spine3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1088 { a: 124,137,138,139,150,170,171,342,343,1740,1790,1791,1793,1794,1795,1796,1797,1798,1799,1818,1819,1820,1847,1848,3422,3467,3468,3470,3471,3472,3473,3474,3475,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5303,5304,5307,5308,5309,5310,5311,5312,5313,5314,5317,5319,5350,5351,5365,5366,5367,5368,5369,5370,5371,5372,5373,5375,5378,5380,5382,5383,5385,5386,5389,5390,5391,5396,5401,5421,5424,5425,5426,5427,5428,5429,5430,5431,5436,5437,5439,5440,5441,5448,5451,5469,5471,5472,5473,5558,5559,5682,5683,5744,5751,5766,5768,5769,5770,5771,5776,5777,5778,5779,5780,5782,5783,5784,5785,5802,5803,5804,5808,5809,5811,5813,5814,5816,5817,5818,5820,5821,5822,5824,5832,5851,5852,5854,5855,5856,5857,5858,5859,5860,5861,5865,5866,5870,5871,5872,5873,5874,5881,5888,5889,5890,5891,5895,5896,5897,5899,5900,5901,5902,5903,5906,5907,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5938,5939,5940,5942,5943,5944,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,6496,6497,9959,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9981,9982,9983,9991,9992,9993,9997,9998,10006,10007,10008,10010,10013,10014,10015,10016,10017,10018,10019,10021,10022,10029,10030,10031,10039,10043,10048,10049,10051,10054,10055,10060,10061,10062,10063,10064,10065,10066,10067,10068,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161, 10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206,10207,10208,10209,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227,10228,10229,10230,10231,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10270,10271,10272,10273,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10449,10450,10451,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10464,10465,10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10490,10491,10492,10493,10494,10495,10496,10497,10499,10500,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543,10544,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568, 10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618,10619,10620,10621,10622,10623,10624,10626,10627,10628,10629,10630,10631,10632,10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718,10719,10720,10721,10722,10723,10724,10733,10734,10735,10738,10739,10740,10741,10742,10743,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908,10909,10910,10911,10912,10914,10923,10924,10925,10926,10929,10930,10931,10932,10937,10938,10939,10940,10941,10955,10956,10957,10964,10965,11009,11027,11028,11044,11045,11052,11053,11054,11055,11056,11060,11061,11062,11063,11064,11087,11088,11089,11090,11091,11097,11098,11099,11102,11112,11113, 11129,11130,11138,11139,11140,11141,11142,11146,11147,11148,11149,11150,11172,11173,11174,11175,11176,11182,11183,11184,11187 } Weights: *1088 { a: 0.75,0.085762232542038,0.104128152132034,0.106781028211117,0.124402061104774,0.102938070893288,0.172302529215813,0.111800543963909,0.103759080171585,0.115088522434235,0.12423200905323,0.095378540456295,0.110840901732445,0.117616847157478,0.118899755179882,0.0713480859994888,0.0956620201468468,0.242636173963547,0.12423200905323,0.107998006045818,0.0882430002093315,0.0698882415890694,0.0566199608147144,0.0645465701818466,0.11211734265089,0.0914984792470932,0.151150241494179,0.192090138792992,0.12276616692543,0.118340142071247,0.101025715470314,0.0772408172488213,0.0512937009334564,0.461652457714081,0.459554940462112,0.459844648838043,0.462225466966629,0.472784638404846,0.467772513628006,0.487117677927017,0.534648895263672,0.575068235397339,0.57318240404129,0.604590594768524,0.600727379322052,0.601162910461426,0.596206903457642,0.60578978061676,0.603663563728333,0.575768530368805,0.535132348537445,0.701581835746765,0.545263409614563,0.591261208057404,0.661754131317139,0.658437669277191,0.536858856678009,0.575587630271912,0.602665722370148,0.597706258296967,0.602555274963379,0.604955315589905,0.607475936412811,0.578075408935547,0.537131786346436,0.612353384494781,0.661225914955139,0.606588125228882,0.577766060829163,0.53724068403244,0.586965978145599,0.661505222320557,0.465115785598755,0.452530950307846,0.277101397514343,0.0386030152440071,0.452400863170624,0.288399666547775,0.434900224208832,0.422080427408218,0.44364920258522,0.422790855169296,0.18050417304039,0.482322633266449,0.282486408948898,0.390942275524139,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.38839054107666,0.387968569993973,0.359195381402969,0.899999976158142,0.0431111082434654,0.399808496236801,0.424760729074478,0.399594306945801,0.047169242054224,0.294629603624344,0.446909070014954,0.293749272823334,0.42409160733223,0.666466772556305,0.419387340545654,0.600000023841858,0.5,0.436221748590469,0.392474800348282,0.383285969495773,0.337732255458832,0.344708532094955,0.41933611035347, 0.432212859392166,0.266951441764832,0.600000023841858,0.32977768778801,0.252586364746094,0.253333956003189,0.899999976158142,0.499777913093567,0.173275351524353,0.5,0.5,0.600000023841858,0.175833567976952,0.18368735909462,0.203715935349464,0.207051545381546,0.600000023841858,0.0095208901911974,0.0478370748460293,1,0.12961608171463,0.134921371936798,1,0.0517776012420654,0.110316768288612,0.0806061327457428,0.0495592057704926,0.150415286421776,0.759846448898315,0.294901102781296,0.429294049739838,0.861581206321716,0.390059977769852,0.387282431125641,0.380919307470322,0.0594810396432877,0.0504821762442589,0.400211721658707,0.425702005624771,0.399597972631454,0.046536035835743,0.295834451913834,0.75,0.446447640657425,0.292811393737793,0.423771739006042,0.124108269810677,0.415361732244492,0.600000023841858,0.254057466983795,0.600000023841858,0.435669839382172,0.42539370059967,0.413400411605835,0.411728411912918,0.418673723936081,0.417498052120209,0.43069788813591,1,0.264593541622162,0.248868077993393,0.250652760267258,0.134869754314423,0.5,0.5,0.418447643518448,0.600000023841858,0.699999988079071,0.600000023841858,0.0485693663358688,0.5,0.5,0.699999988079071,0.174534395337105,1,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.5,0.5,0.5,0.600000023841858,0.5,0.600000023841858,0.5,0.5,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.0141789242625237,0.0153731536120176,0.00258106738328934,0.0111873541027308,0.012540147639811,0.0160985831171274,0.0158132258802652,0.0117630818858743,0.0171353444457054,0.0132416011765599,0.0101168863475323,0.00587683590129018,0.00939620938152075,0.00872862990945578,0.0169561989605427,0.0363818965852261,0.0223651211708784,0.0398627892136574,0.0235235225409269,0.0233923010528088,0.0204265173524618,0.020949138328433,0.00725673837587237,0.0112239895388484,0.0089893639087677,0.00827483367174864,0.0159890446811914,0.0124049074947834, 0.0115596614778042,0.00993351172655821,0.0130593748763204,0.0169641263782978,0.00573462061583996,0.0085513973608613,0.00921071413904428,0.0167909264564514,0.0222052801400423,0.0363022610545158,0.023268872871995,0.0203311648219824,0.0110470624640584,0.00882083363831043,0.00814381148666143,0.957538247108459,0.958540797233582,0.956538259983063,0.959350943565369,0.961500287055969,0.959985792636871,0.947338461875916,0.953540086746216,0.955336928367615,0.75,0.75,0.75,0.75,0.75,0.75,0.955077111721039,0.956288516521454,0.961606383323669,0.958412051200867,0.957542419433594,0.959802865982056,0.95624041557312,0.959717214107513,0.957168877124786,0.939900994300842,0.829129636287689,0.879289329051971,0.880010366439819,0.959395170211792,0.95811003446579,0.959861755371094,0.959268689155579,0.899999976158142,0.899999976158142,0.785349428653717,0.957476377487183,0.899999976158142,0.899999976158142,0.95319277048111,0.953531563282013,0.876276314258575,0.953178107738495,0.956213295459747,0.956434607505798,0.800000011920929,0.800000011920929,0.699999988079071,0.699999988079071,0.953248918056488,0.95462441444397,0.951935470104218,0.923011600971222,0.959479689598084,0.961464405059814,0.961166799068451,0.958817422389984,0.961436033248901,0.961288571357727,0.960675239562988,0.887319087982178,0.720000028610229,0.75,0.899999976158142,0.800000011920929,0.720578551292419,0.800000011920929,0.850000023841858,0.899999976158142,0.828785061836243,0.776359677314758,0.764668464660645,0.772647380828857,0.765205442905426,0.763894855976105,0.958999872207642,0.75,0.75,0.75,1,1,0.800000011920929,0.894429683685303,0.894518375396729,0.895675539970398,0.922911643981934,0.730348885059357,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00808052811771631,0.00695882085710764,0.75,0.75,0.00667890813201666,0.75,0.0041200197301805,0.75,0.75,0.827726483345032,0.736065030097961,0.75,0.75,0.95705246925354,0.951984941959381,0.910732209682465,0.767530143260956,0.75, 0.955445647239685,0.956634402275085,0.961577653884888,0.957822620868683,0.971852004528046,0.946243524551392,0.960978269577026,0.955973863601685,0.951422214508057,0.957989037036896,0.899999976158142,0.0939868167042732,0.095717616379261,0.959257662296295,0.5,0.75,0.75,0.75,0.75,0.878020882606506,0.75,0.5,0.75,0.5,0.5,0.5,0.5,0.75,0.0198027025908232,0.0300513803958893,0.763302564620972,0.75,0.75,0.00716592743992805,0.0123920850455761,0.768499076366425,0.959338009357452,0.959072470664978,0.958411872386932,0.955592691898346,0.947930335998535,0.95901894569397,0.0324273779988289,0.764417946338654,0.75,0.75,0.75,0.720000028610229,0.720000028610229,0.899999976158142,0.96061372756958,0.699999988079071,0.5,0.75,0.75,0.75,0.75,0.959779322147369,0.955917954444885,0.960276246070862,0.956004500389099,0.958375811576843,0.952684044837952,0.959409594535828,0.960889339447021,0.953610301017761,0.957848727703094,0.95908397436142,0.959031164646149,0.968548119068146,0.232526525855064,0.75,0.00976004730910063,0.95672219991684,0.951477289199829,0.948371946811676,0.952519536018372,0.949735760688782,0.952434301376343,0.75,0.75,0.75,0.961228728294373,0.75,0.959927022457123,0.957871973514557,0.961668848991394,0.961422979831696,0.954932510852814,0.955667316913605,0.9588942527771,0.957856237888336,0.960132479667664,0.961470305919647,0.954107403755188,0.958635985851288,0.878364622592926,0.879140973091125,0.879786968231201,0.87715870141983,0.961276412010193,0.960936665534973,0.085561029613018,0.0822171941399574,0.0838226974010468,0.0859100669622421,0.959669351577759,0.959876298904419,0.960931241512299,0.959267258644104,0.957055270671844,0.959008812904358,0.956428945064545,0.954533338546753,0.958473145961761,0.94888299703598,0.75,0.0896205604076386,0.0906806141138077,0.0920000523328781,0.0904827415943146,0.955279529094696,0.95048451423645,0.946091711521149,0.951888501644135,0.928969323635101,0.952318787574768,0.93002837896347,0.949014604091644,0.954181551933289,0.952441871166229,0.954520225524902,0.956952750682831,0.957884430885315,0.881032288074493, 0.879364728927612,0.878738582134247,0.789911925792694,0.789941310882568,0.75,0.75,0.720000028610229,0.720000028610229,0.699999988079071,0.699999988079071,0.850000023841858,0.850000023841858,0.800000011920929,0.800000011920929,0.957197785377502,0.953077971935272,0.939027428627014,0.835327625274658,0.833593666553497,0.0943752005696297,0.0944032445549965,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,0.850000023841858,0.699999988079071,0.699999988079071,0.0682986751198769,0.0714335814118385,0.789074778556824,0.0760513916611671,0.0947359576821327,0.954803109169006,0.956382870674133,0.720000028610229,0.75,0.954493045806885,0.948985457420349,0.78932797908783,0.789512395858765,0.699999988079071,0.850000023841858,0.800000011920929,0.959878921508789,0.959619164466858,0.94746595621109,0.93335372209549,0.951277136802673,0.923790335655212,0.881081640720367,0.958416938781738,0.834649443626404,0.836609840393066,0.956299424171448,0.881010353565216,0.836093723773956,0.880341291427612,0.834789097309113,0.878566384315491,0.899624884128571,0.899553835391998,0.899523794651031,0.899480938911438,0.850000023841858,0.960817873477936,0.768886864185333,0.790004849433899,0.899999976158142,0.75,0.960687756538391,0.959923565387726,0.75,0.899999976158142,0.899999976158142,0.960811078548431,0.899999976158142,0.0961230620741844,0.0984849631786346,0.899999976158142,0.959491372108459,0.75,0.0948158726096153,0.0950082242488861,0.700767397880554,0.0730230212211609,0.0979870334267616,0.0872775539755821,0.087272122502327,0.0866196677088737,0.0942397788167,0.959409654140472,0.961271166801453,0.961122095584869,0.957583010196686,0.95744389295578,0.956457555294037,0.944807946681976,0.75,0.75,0.75,0.75,0.899999976158142,0.899999976158142,0.899999976158142,0.0906759724020958,0.0903674736618996,0.0961243137717247,0.0936058834195137,0.938084781169891,0.93389755487442,0.950093328952789,0.955193758010864,0.955569982528687,0.954447031021118,0.962438106536865,0.949910342693329,0.966332674026489,0.75,0.75,0.75,0.75,0.75,0.941100180149078, 0.935536861419678,0.953422069549561,0.960933566093445,0.951039493083954,0.939891397953033,0.950097799301147,0.949685275554657,0.959550976753235,0.964796185493469,0.880356311798096,0.865171313285828,0.91388601064682,0.938835144042969,0.957113146781921,0.943677246570587,0.877648413181305,0.928777635097504,0.785357356071472,0.899999976158142,0.957551598548889,0.958083152770996,0.899999976158142,0.86806857585907,0.948952913284302,0.920421719551086,0.899999976158142,0.850000023841858,0.75,0.75,0.850000023841858,0.945503354072571,0.916061341762543,0.953746795654297,0.957053661346436,0.951983451843262,0.95653110742569,0.959425270557404,0.950447499752045,0.957255899906158,0.954313933849335,0.950628340244293,0.950628101825714,0.699999988079071,0.800000011920929,0.899999976158142,0.800000011920929,0.810391426086426,0.899999976158142,0.850000023841858,0.850000023841858,0.830171585083008,0.764804065227509,0.75,0.763968825340271,0.921127438545227,1,0.75,1,1,1,1,1,0.800000011920929,1,0.931986749172211,1,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.00678260065615177,0.00734655186533928,0.75,0.75,0.0065109939314425,0.75,0.00402423506602645,0.75,0.822583794593811,1,0.75,0.75,0.955177187919617,0.96015864610672,0.864858448505402,0.767907500267029,0.75,0.959308981895447,0.959520757198334,0.959039568901062,0.95704460144043,0.952542364597321,0.978068172931671,0.956893384456635,0.95896989107132,0.904391825199127,0.877550303936005,0.914088070392609,0.959565460681915,0.945497035980225,0.092599019408226,0.5,0.75,0.75,0.75,0.75,0.879189491271973,0.75,0.5,0.75,0.5,0.5,0.75,0.76336532831192,0.0300193205475807,0.0197536144405603,0.75,0.0123153384774923,0.00709361396729946,0.75,0.76811808347702,0.925329804420471,0.938286542892456,0.923435568809509,0.864238500595093,0.915386140346527,0.899999976158142,0.75,0.800000011920929,0.699999988079071,0.699999988079071,0.800000011920929,0.825247704982758,0.884745538234711,0.75,0.75,0.75,0.75, 0.75,0.952121734619141,0.94670158624649,0.93092143535614,0.924777686595917,0.953759908676147,0.936432063579559,0.946027040481567,0.947521567344666,0.850173532962799,0.903109967708588,0.873982906341553,0.809221684932709,0.75,0.75,0.0102625312283635,0.75,0.942292749881744,0.877478003501892,0.942061126232147,0.941333055496216,0.943734705448151,0.943852305412292,0.75,0.75,0.75,0.93719083070755,0.90915858745575,0.75,0.957259058952332,0.953966915607452,0.959854364395142,0.934671580791473,0.951683163642883,0.959149658679962,0.959299862384796,0.965592980384827,0.75,0.947899401187897,0.957156240940094,0.947200894355774,0.944532811641693,0.946368992328644,0.781483590602875,0.960373640060425,0.956585705280304,0.0811243206262589,0.0857763141393662,0.0867564678192139,0.957601070404053,0.958110451698303,0.960652112960815,0.956212997436523,0.950175523757935,0.953033983707428,0.95390248298645,0.952684342861176,0.947774291038513,0.925760209560394,0.75,0.0890278890728951,0.0842892453074455,0.0817965343594551,0.0742781460285187,0.95094621181488,0.948776364326477,0.940522849559784,0.936695992946625,0.931431770324707,0.918804049491882,0.813201665878296,0.8664271235466,0.84716135263443,0.801027417182922,0.88867199420929,0.931282520294189,0.780009210109711,0.946900606155396,0.946670413017273,0.947484314441681,0.840196132659912,0.800000011920929,0.800000011920929,0.839022636413574,0.699999988079071,0.699999988079071,0.75,0.75,0.899999976158142,0.850000023841858,0.850000023841858,0.899999976158142,0.954739928245544,0.938593447208405,0.883178055286407,0.882882356643677,0.886038482189178,0.899999976158142,0.899999976158142,0.07585559040308,0.074390210211277,0.09121323376894,0.087418220937252,0.0914874374866486,0.899999976158142,0.081835925579071,0.0858589857816696,0.0672509297728539,0.0721054747700691,0.720495045185089,0.838570237159729,0.765313267707825,0.899999976158142,0.933104932308197,0.93582159280777,0.800000011920929,0.699999988079071,0.799659550189972,0.821321725845337,0.838018119335175,0.837090969085693,0.75,0.850000023841858,0.899999976158142, 0.889135122299194,0.92995673418045,0.931536793708801,0.890445470809937,0.941257774829865,0.887241840362549,0.779425501823425,0.945341825485229,0.88369619846344,0.884203732013702,0.950628221035004,0.949951648712158,0.883653819561005,0.947980403900146,0.885260403156281,0.942782938480377,0.810312032699585,0.899999976158142,0.899999976158142,0.899999976158142,0.952167749404907,0.768492162227631,0.840166389942169,0.899999976158142,0.75,0.75,0.960485398769379,0.959158957004547,0.956989228725433,0.960198104381561,0.960046768188477,0.899999976158142,0.0983112379908562,0.0983274206519127,0.899999976158142,0.0946391001343727,0.960810780525208,0.0736546814441681,0.0791008844971657,0.0774789527058601,0.0683221891522408,0.081981897354126,0.0948949903249741,0.0952887535095215,0.899999976158142,0.0700687915086746,0.0828381180763245,0.0923292860388756,0.0757671371102333,0.0929875746369362,0.0933984667062759,0.0961728468537331,0.0964640229940414,0.0112190824002028,0.00527462316676974,0.00599608197808266,0.0109401093795896,0.00660790223628283,0.0231660008430481,0.0244253613054752,0.0114240096881986,0.0173866599798203,0.0214097537100315,0.0169858019798994,0.0169140622019768,0.0216232407838106,0.00598987704142928,0.0052340873517096,0.0111760459840298,0.0109166782349348,0.00654197158291936,0.0231000576168299,0.011360595934093,0.0173457507044077,0.0206026155501604,0.0168101955205202,0.0168885830789804,0.00280827027745545,0.00316052138805389,0.00436065997928381,0.00599541608244181,0.00596329383552074,0.00793657638132572,0.00531561719253659,0.00536487251520157,0.0040706223808229,0.00725838495418429,0.00932312104851007,0.00662264693528414,0.00651014456525445,0.00529910530894995,0.0042096390388906,0.00354334083385766,0.0051647606305778,0.00899781100451946,0.00610579364001751,0.00418041413649917,0.0040243323892355,0.00287933833897114,0.0038571204058826,0.00323691987432539,0.00287965033203363,0.00544132199138403,0.00374313560314476,0.00607317546382546,0.00863313768059015,0.00544475764036179,0.0054993792437017,0.00417273631319404,0.00950081180781126, 0.0074219973757863,0.00667169876396656,0.00679259700700641,0.00543491076678038,0.00430912571027875,0.00528056034818292,0.00363293150439858,0.00623954366892576,0.00917037390172482,0.00430067488923669,0.0041407230310142,0.00296174036338925,0.0039620166644454 } Transform: *16 { a: 0.0267456942762977,0.0695652391424119,0.997218802892724,0,0.997222072389479,0.0675171332746874,-0.0314557301666788,0,-0.0695175802535841,0.995289909860946,-0.0675662066985298,0,-54.631121365628,-3.20257583373608,1.65094438652875,1 } TransformLink: *16 { a: 0.0267456972775019,0.997222184290371,-0.0695175880543334,0,0.0695652467630354,0.0675171406709483,0.995290018891401,0,0.997218806791107,-0.0314557302896473,-0.0675662069626633,0,0.0375826209140644,54.7475266028855,-0.498783977877638,1 } } Deformer: 136817552, "SubDeformer::Cluster_L_Ankle1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1006 { a: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769, 8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,8786,8787,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085,9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101,9102,9104,9105,9111,9113,9115,9116,9118,9119,9124,9126,9127,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144,9147,9148,9149,9150,9151,9152,9154,9157,9162,9164,9168,9174,9175,9181,9182,9183,9184,9185,9196,9197,9198,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, 9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9303,9308,9325,9327,9328,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9354,9355,9356,9357,9360,9369,9370,9371,9372,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9402,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9440,9441,9452,9453,9458,9460,9464,9466,9467,9468,9469,9473,9482,9483,9484,9485,9521,9524,9539,9541,9554,9555,9601,9632,9644,9645,9646,9647,9648,9654,9661,9783,9790,9792,9794,9795,9806,9814,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926 } Weights: *1006 { a: 0.662252962589264,0.716935575008392,0.720179736614227,0.670780777931213,0.768863677978516,0.774946868419647,0.802139163017273,0.824174582958221,0.820186018943787,0.858241260051727,0.720582842826843,0.775384962558746,0.786859512329102,0.723640918731689,0.824556350708008,0.845559477806091,0.864950239658356,0.892545998096466,0.704158782958984,0.673352599143982,0.687313973903656,0.740170121192932,0.78624027967453,0.82932311296463,0.655422866344452,0.613076150417328,0.675190806388855,0.847468376159668,0.804767429828644,0.820174694061279,0.857121586799622,0.860617458820343,0.874466836452484,0.871271193027496,0.831805944442749,0.863919794559479,0.877875924110413,0.891996264457703,0.874595880508423,0.893714904785156,0.872262895107269,0.83377343416214,0.84788590669632,0.80837094783783,0.801326990127563,0.854566514492035,0.841355443000793,0.822431445121765,0.712380409240723,0.786515653133392,0.800219178199768,0.710730135440826,0.74511331319809,0.824387609958649,0.664935171604156,0.653990149497986,0.642671227455139,0.6425661444664,0.597245275974274,0.596463561058044,0.635055124759674,0.631588757038116,0.571098744869232,0.664387047290802,0.568991899490356,0.701522052288055,0.579633116722107,0.650809466838837,0.675891995429993,0.679120242595673,0.64745831489563,0.736279428005219,0.682271540164948,0.795476019382477,0.722612321376801,0.635961771011353,0.586889326572418,0.643270611763,0.663508534431458,0.7317253947258,0.717524886131287,0.781114041805267,0.785607278347015,0.624738037586212,0.718818366527557,0.584580779075623,0.696781635284424,0.792071640491486,0.740076243877411,0.78708153963089,0.82867842912674,0.716916739940643,0.780235946178436,0.794581592082977,0.821326792240143,0.702947616577148,0.782789766788483,0.716075003147125,0.797236800193787,0.646848678588867,0.581979751586914,0.590038537979126,0.59087860584259,0.695394396781921,0.688918888568878,0.726925373077393,0.751364767551422,0.784846127033234,0.815278291702271,0.836895823478699,0.85580587387085,0.879223763942719,0.880212366580963,0.635002911090851, 0.610837399959564,0.835834264755249,0.842389523983002,0.89502215385437,0.889481902122498,0.909801483154297,0.899769723415375,0.888761699199677,0.883025705814362,0.768488585948944,0.736176431179047,0.620154917240143,0.61918431520462,0.584584772586823,0.582186162471771,0.599543333053589,0.606371879577637,0.602085590362549,0.759392023086548,0.743354380130768,0.641951978206635,0.607505738735199,0.743978083133698,0.7264643907547,0.724829494953156,0.66710889339447,0.777875006198883,0.809260308742523,0.826838612556458,0.597754776477814,0.592020213603973,0.579893112182617,0.613420307636261,0.810257375240326,0.855723738670349,0.869342446327209,0.83930629491806,0.744189202785492,0.710318505764008,0.721735775470734,0.69486540555954,0.59639298915863,0.595895648002625,0.567268490791321,0.562873125076294,0.570796370506287,0.581473410129547,0.586230039596558,0.716825127601624,0.730502545833588,0.619070827960968,0.576398611068726,0.713853776454926,0.700119316577911,0.579771995544434,0.69603168964386,0.687131941318512,0.587622165679932,0.59562212228775,0.638310849666595,0.495868265628815,0.504656076431274,0.682099580764771,0.62079256772995,0.619129598140717,0.637898862361908,0.685304403305054,0.392854332923889,0.545557498931885,0.499303996562958,0.497860908508301,0.481977909803391,0.191958338022232,0.193772777915001,0.167935505509377,0.176776140928268,0.69019490480423,0.678784191608429,0.433016240596771,0.604192554950714,0.417342305183411,0.372644573450089,0.808385014533997,0.811666429042816,0.736336946487427,0.764354586601257,0.717962324619293,0.66310316324234,0.0796902030706406,0.0722345486283302,0.453533738851547,0.546529531478882,0.583387970924377,0.59502637386322,0.581080198287964,0.584292113780975,0.547285854816437,0.671297550201416,0.709093928337097,0.697784125804901,0.773432612419128,0.701103806495667,0.500118792057037,0.806355118751526,0.760442793369293,0.784082531929016,0.840699017047882,0.544453740119934,0.655303418636322,0.774261713027954,0.620487987995148,0.650266408920288,0.633479595184326,0.626469314098358,0.571754097938538, 0.715693593025208,0.76426762342453,0.898551404476166,0.499102562665939,0.779566049575806,0.8974888920784,0.490139544010162,0.744280457496643,0.576716959476471,0.120298206806183,0.0609138756990433,0.0686163753271103,0.0585639476776123,0.0609014816582203,0.173864901065826,0.151549980044365,0.160618603229523,0.179077684879303,0.311770230531693,0.289250820875168,0.182548344135284,0.220449775457382,0.232918500900269,0.1557277739048,0.429737746715546,0.436085075139999,0.498938947916031,0.499213874340057,0.545559585094452,0.498984545469284,0.392706125974655,0.638633489608765,0.568391859531403,0.498944014310837,0.499541968107224,0.499347507953644,0.499558687210083,0.499784559011459,0.506308078765869,0.488025993108749,0.471090734004974,0.489009350538254,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.52510541677475,0.503865361213684,0.547393321990967,0.578731000423431,0.578221321105957,0.604531288146973,0.666337788105011,0.618531048297882,0.458945125341415,0.467843025922775,0.495702832937241,0.471826136112213,0.463245213031769,0.499710947275162,0.503833949565887,0.741899967193604,0.669493854045868,0.639782190322876,0.693806409835815,0.580596685409546,0.528206884860992,0.497483104467392,0.497408628463745,0.504603862762451,0.648581326007843,0.624427199363709,0.502325057983398,0.590632736682892,0.498883485794067,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.493460863828659,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.494955003261566,0.495421648025513,0.496160745620728,0.496107131242752,0.544339060783386,0.529735803604126,0.589485824108124,0.60707688331604,0.549736261367798,0.633057951927185,0.630938470363617,0.64998871088028,0.615624070167542,0.498127013444901,0.500028312206268,0.501803278923035,0.473483175039291,0.478267163038254,0.471729397773743,0.478772342205048,0.475807130336761,0.478105336427689, 0.482067912817001,0.472987681627274,0.476543188095093,0.483400821685791,0.498663365840912,0.49783006310463,0.497768074274063,0.506945431232452,0.505904972553253,0.742265939712524,0.777076601982117,0.709838807582855,0.723995983600616,0.920427918434143,0.92652815580368,0.908109724521637,0.886519014835358,0.750078618526459,0.70175689458847,0.739742457866669,0.779259204864502,0.495814889669418,0.495124042034149,0.495348423719406,0.525247037410736,0.501540124416351,0.515422761440277,0.54307609796524,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.654774129390717,0.76426112651825,0.695192337036133,0.628502249717712,0.855615854263306,0.789036810398102,0.495361059904099,0.494524925947189,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.613348126411438,0.550544440746307,0.569208562374115,0.592481851577759,0.674045324325562,0.953721344470978,0.98089611530304,0.796355009078979,0.962789952754974,0.862315773963928,0.959008634090424,0.931809902191162,0.882491052150726,0.883577704429626,0.551375806331635,0.618872940540314,0.838439345359802,0.677922546863556,0.655788064002991,0.495860993862152,0.497062891721725,0.687699973583221,0.497428089380264,0.498450934886932,0.4991714656353,0.498457342386246,0.498275578022003,0.499232739210129,0.499325484037399,0.498723983764648,0.499112755060196,0.499192982912064,0.498770505189896,0.499476730823517,0.499507606029511,0.499369323253632,0.498765498399735,0.801122665405273,0.497004777193069,0.498025625944138,0.499035775661469,0.498643934726715,0.494946539402008,0.498003214597702,0.498488068580627,0.812527358531952,0.497725337743759,0.495063692331314,0.505264818668365,0.495184719562531,0.516481697559357,0.507335722446442,0.497387260198593,0.507205486297607,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188,0.499147802591324,0.820494115352631,0.46927735209465,0.459739953279495,0.73817503452301,0.774010121822357,0.577046036720276,0.497711896896362,0.494165003299713, 0.633301734924316,0.47880819439888,0.495833784341812,0.48139351606369,0.497110813856125,0.76469612121582,0.795858263969421,0.506770610809326,0.73978990316391,0.494763672351837,0.494477927684784,0.500276744365692,0.70234751701355,0.49773570895195,0.690812289714813,0.861847698688507,0.498591303825378,0.799018800258636,0.498167306184769,0.498650819063187,0.5091193318367,0.497448414564133,0.482101559638977,0.44548761844635,0.44733864068985,0.455966800451279,0.691210627555847,0.687352657318115,0.694997549057007,0.650831580162048,0.691382348537445,0.511168897151947,0.522735774517059,0.576642036437988,0.559218406677246,0.55339902639389,0.576144576072693,0.581755459308624,0.527762532234192,0.547392010688782,0.530811905860901,0.519025087356567,0.503949224948883,0.475909888744354,0.48587840795517,0.44903889298439,0.481809675693512,0.457466155290604,0.448883175849915,0.515073657035828,0.562007606029511,0.499335706233978,0.529892086982727,0.512110590934753,0.534585952758789,0.494714945554733,0.483254015445709,0.547562420368195,0.59102463722229,0.530908048152924,0.520111799240112,0.571300983428955,0.57639741897583,0.547903001308441,0.521144568920136,0.503582537174225,0.506857693195343,0.444775521755219,0.477946311235428,0.467674791812897,0.484626680612564,0.499206751585007,0.49823185801506,0.497802197933197,0.496602028608322,0.497677952051163,0.499043405056,0.498800069093704,0.518403708934784,0.525831341743469,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.569541394710541,0.68333899974823,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.510666072368622,0.50631707906723,0.530737638473511,0.499969571828842,0.499186664819717,0.499278783798218,0.57228696346283,0.538302779197693,0.49847537279129,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589,0.499071568250656,0.50044584274292,0.50257819890976,0.529922425746918,0.517054378986359,0.569340586662292,0.593726396560669,0.499435722827911, 0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497550189495087,0.498391449451447,0.498559087514877,0.504504323005676,0.499798029661179,0.501299262046814,0.52972686290741,0.595946848392487,0.558468520641327,0.509782254695892,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558,0.488881856203079,0.493738561868668,0.511237859725952,0.495989292860031,0.546556949615479,0.512413084506989,0.532420933246613,0.503437399864197,0.5750692486763,0.61922025680542,0.562155485153198,0.628194510936737,0.578537940979004,0.595672905445099,0.691051840782166,0.55819296836853,0.54462867975235,0.519611001014709,0.556648969650269,0.507583141326904,0.497512698173523,0.527811646461487,0.501895308494568,0.497514218091965,0.495734304189682,0.58951598405838,0.702751636505127,0.735632419586182,0.759821832180023,0.498141705989838,0.4822036921978,0.497402459383011,0.747796297073364,0.848888993263245,0.914315938949585,0.896286070346832,0.504512190818787,0.490088790655136,0.690164387226105,0.171521663665771,0.271039336919785,0.42390364408493,0.499330878257751,0.4996238052845,0.49933186173439,0.49904191493988,0.498877853155136,0.402910560369492,0.401398241519928,0.273808985948563,0.175097554922104,0.199212685227394,0.232243254780769,0.19456385076046,0.183189481496811,0.166510850191116,0.255079418420792,0.25168913602829,0.27091583609581,0.496359467506409,0.515789389610291,0.492695808410645,0.537370145320892,0.642270505428314,0.603465437889099,0.605224668979645,0.571839272975922,0.588908016681671,0.621786415576935,0.595558941364288,0.594146132469177,0.561316013336182,0.547303140163422,0.717162847518921,0.740826785564423,0.535634934902191,0.500117421150208,0.499933958053589,0.101766638457775,0.111037105321884,0.183134287595749,0.41256394982338,0.495221793651581,0.185607150197029,0.197905108332634,0.280133128166199,0.416712075471878,0.494052648544312, 0.496475011110306,0.523596227169037,0.102055840194225,0.117517657577991,0.198546633124352,0.351395040750504,0.677316725254059,0.786939442157745,0.883826851844788,0.4284348487854,0.294497162103653,0.214689984917641,0.201732218265533,0.142618268728256,0.130712449550629,0.135116308927536,0.039704255759716,0.043820708990097,0.16945244371891,0.13146761059761,0.104484103620052,0.122791580855846,0.0540477894246578,0.135893955826759,0.074902355670929,0.146088987588882,0.00148449698463082,0.00180044712033123,0.00190533243585378,0.00161935156211257,0.00256754434667528,0.00247231777757406,0.00311465212143958,0.00306080444715917,0.00206518173217773,0.00141028501093388,0.00245590414851904,0.00250778347253799,0.00131974171381444,0.00111980270594358,0.00122817605733871,0.00136681995354593,0.00178884842898697,0.00197217962704599,0.00209920550696552,0.00111105316318572,0.00143118086270988,0.00153342681005597,0.00161730451509357,0.00108217669185251,0.00127602275460958,0.00116704078391194,0.00126482569612563,0.00127327290829271,0.00104213762097061,0.00113009929191321,0.00113605090882629,0.00124113645870239,0.00138873723335564,0.00140770059078932,0.00124231504742056,0.0013095501344651,0.00154323561582714,0.00152960699051619,0.00205415673553944,0.00227937055751681,0.00211106915958226,0.00291993888095021,0.00182866596151143,0.00118685979396105,0.00230278423987329,0.00110143003985286,0.00102221255656332,0.00162972358521074,0.00117750989738852,0.00201793806627393,0.00131509616039693,0.00156842230353504,0.00102850899565965,0.00110244657844305,0.00123351323418319,0.00109587737824768,0.0011475111823529,0.00133768632076681,0.00156263750977814,0.0018124032067135,0.00228998460806906,0.00124180514831096,0.00104946608189493,0.00122276064939797,0.00184418284334242,0.00182779424358159,0.118393562734127,0.0736616924405098,0.0249102488160133,0.0221831742674112,0.0899571180343628,0.112894177436829,0.0035569122992456,0.0474935285747051,0.00326452520675957,0.0028353682719171,0.00254967133514583,0.00683861877769232,0.00711500784382224,0.00409545283764601, 0.00273589114658535,0.003227410139516,0.00404798192903399,0.00195459253154695,0.00146086083259434,0.00389905762858689,0.00379705731756985,0.00660856440663338,0.00885148253291845,0.0123358722776175,0.0371558479964733,0.0114142606034875,0.0049864212051034,0.00675698649138212,0.00125157495494932,0.00423817383125424,0.00477129686623812,0.00646650372073054,0.00695784715935588,0.00672228308394551,0.00723032187670469,0.00389069109223783,0.00655906740576029,0.00252278638072312,0.0070349182933569,0.00656781531870365,0.00377465505152941,0.0022606726270169,0.0145900612697005,0.0159324333071709,0.0146114667877555,0.0162585619837046,0.00300842896103859,0.00186342420056462,0.0134177384898067,0.00533000519499183,0.0120491916313767,0.00303325708955526,0.00548212928697467,0.00275028543546796,0.00285283708944917,0.00401054183021188,0.00471321679651737,0.0049645071849227,0.00414479849860072,0.00535947270691395,0.00535075319930911,0.00770913390442729,0.00910867750644684,0.0109262075275183,0.0109737552702427,0.00946454796940088,0.00697548314929008,0.00968931894749403,0.0109196323901415,0.00148356088902801,0.00119180616457015,0.00157149462029338,0.00133818294852972,0.00121787074021995,0.0010013849241659,0.00150432379450649,0.00106834375765175,0.0265174955129623,0.0213357713073492,0.0482362285256386,0.111389972269535,0.178344205021858,0.00177848618477583,0.038597047328949,0.100632637739182,0.0014194343239069,0.001388642587699,0.00193746259901673,0.00310551328584552,0.00602176133543253,0.00628630816936493,0.00313000287860632,0.170989155769348,0.139627546072006,0.151070773601532,0.153013974428177,0.120552375912666,0.0891576483845711,0.0443960651755333,0.00191070046275854,0.00883879698812962,0.0236061438918114,0.0467715933918953,0.0756872594356537,0.00838399399071932,0.0180896297097206,0.0441901236772537,0.085140235722065,0.00336254015564919,0.00880239997059107,0.0102470815181732,0.0147635443136096,0.0361023619771004,0.116256214678288,0.172775134444237,0.00751014146953821,0.00373137649148703,0.00834355410188437,0.0205908212810755,0.0430315807461739, 0.0499112345278263,0.0812323614954948,0.00125892937649041,0.0243157092481852,0.0145227061584592,0.0245868228375912,0.0315362252295017,0.0573749467730522,0.0648135989904404,0.0631936118006706,0.0577625222504139,0.043515969067812,0.0366875343024731,0.0112321749329567,0.013560269959271,0.0102249225601554,0.0125839579850435,0.0148925315588713,0.0148319378495216,0.0134749580174685,0.00117894972208887,0.00133481808006763,0.00110387580934912,0.00105489289853722,0.00100554316304624,0.00101256731431931,0.00131905952002853,0.00110926921479404,0.00121478259097785,0.00114571722224355,0.00102083408273757,0.0012131753610447,0.00142305926419795,0.00133616500534117,0.00117117504123598,0.00116741808596998,0.00118442473467439,0.00101484113838524,0.00115493719931692,0.00110147777013481,0.00105720793362707,0.0010019481414929,0.0013600290985778,0.00124275567941368,0.00102024816442281,0.00116363493725657,0.00116654590237886,0.00119186111260206,0.00126692734193057,0.0010253731161356,0.00108020601328462,0.00105418777093291,0.00120234151836485,0.00108549254946411,0.00124082865659148,0.00112835713662207,0.00100101053249091,0.00140826881397516,0.0752988681197166,0.124789580702782,0.160499945282936,0.169288575649261,0.18654191493988,0.202812254428864,0.19428688287735,0.195977717638016,0.176482886075974,0.163506925106049,0.0958758518099785,0.0982898101210594,0.0110053485259414,0.0175644811242819,0.0482322424650192,0.0564861409366131,0.0773198679089546,0.200308069586754,0.173628240823746,0.102711834013462,0.0539824739098549,0.041170883923769,0.0225588493049145,0.00827851705253124,0.00417001498863101,0.00216753897257149,0.2001593708992,0.169763833284378,0.113478347659111,0.0628452077507973,0.0467336252331734,0.0235445890575647,0.00916387978941202,0.00502217374742031,0.00239629042334855,0.00120741280261427,0.00100570963695645,0.00109773920848966,0.00137963378801942,0.00222949031740427,0.00335098314099014,0.00546552427113056,0.0150606175884604,0.0319381542503834,0.0473228059709072,0.0694313868880272 } Transform: *16 { a: -0.00974440814253744,0.261574781949277,-0.965134041092506,0,-0.998083574277973,-0.0615276823665369,-0.00659841607181874,0,-0.0611084378058366,0.963220134760211,0.261673040260058,0,4.90316612261137,-0.745790957099573,9.65255231474262,1 } TransformLink: *16 { a: -0.00974440798755643,-0.998083558403841,-0.0611084368339307,0,0.261574768803395,-0.0615276792743595,0.963220086351959,0,-0.965134005991403,-0.00659841583183998,0.261673030743233,0,9.55886503187761,4.91157425829824,-1.50782697121848,1 } } Deformer: 135182880, "SubDeformer::Cluster_R_Ankle", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *991 { a: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,7329,7330,7331,7332,7334,7335,7337,7340,7341,7343,7344,7345,7350,7353,7358,7359,7360,7361,7391,7392,7394,7406,7407,7408,7422,7473,7494,7495,7496,7503,7505,7518,7519,7520,7521,7534,7583,7584,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7615,7617,7619,7621,7622,7624,7625,7630,7631,7632,7633,7636,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7653,7655,7656,7657,7658,7660,7668,7670,7674,7680,7681,7687,7688,7689,7690,7691,7700,7702,7703,7704,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7821,7822,7823,7824,7825,7826,7827,7829,7830,7839,7840,7841,7842,7843,7844,7845,7846,7849,7856,7857,7858,7859,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7926,7940,7947,7949,7951,7952,7963, 7971,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387, 8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,9869,9870,9871,9872,9873,9879,9880,9881,9882,9892,9893,9894,9895,9896,9897,9898,9899,9900 } Weights: *991 { a: 0.65597528219223,0.709011733531952,0.711628913879395,0.66375207901001,0.759973526000977,0.765329241752625,0.795203804969788,0.816222965717316,0.818207204341888,0.855426013469696,0.711977422237396,0.765679836273193,0.77683424949646,0.715062618255615,0.816503047943115,0.836960196495056,0.862055420875549,0.889485239982605,0.695444762706757,0.665904521942139,0.679816842079163,0.73004561662674,0.776868939399719,0.825136184692383,0.648822367191315,0.608231008052826,0.667994916439056,0.85819935798645,0.814932882785797,0.829913377761841,0.867069661617279,0.869281947612762,0.881918132305145,0.87449187040329,0.836233615875244,0.87369179725647,0.88720440864563,0.899121880531311,0.881960272789001,0.896691918373108,0.875333070755005,0.843001961708069,0.857326745986938,0.817641735076904,0.81023383140564,0.86391407251358,0.848222017288208,0.824821889400482,0.71945595741272,0.795259475708008,0.809440016746521,0.718048810958862,0.753644526004791,0.834041953086853,0.658038258552551,0.647229909896851,0.636279046535492,0.635104060173035,0.591275751590729,0.590951085090637,0.628393530845642,0.623831152915955,0.565776765346527,0.655584037303925,0.563940346240997,0.696153104305267,0.576048612594604,0.643130004405975,0.667751610279083,0.66983163356781,0.639135599136353,0.725501179695129,0.67290997505188,0.789611160755157,0.717039465904236,0.629511773586273,0.582115352153778,0.636384546756744,0.656113088130951,0.739117980003357,0.725175380706787,0.790050804615021,0.794268727302551,0.628185749053955,0.724548757076263,0.584488451480865,0.698292374610901,0.801148116588593,0.746210277080536,0.794003248214722,0.837971389293671,0.718741595745087,0.78249591588974,0.803311944007874,0.830314457416534,0.709548056125641,0.791346609592438,0.7228022813797,0.806047439575195,0.640056371688843,0.577611863613129,0.585572898387909,0.586568832397461,0.688723087310791,0.681378185749054,0.717833161354065,0.743086636066437,0.773878395557404,0.805986285209656,0.826895892620087,0.848493158817291,0.874839961528778,0.877769410610199,0.630060195922852, 0.606431543827057,0.844351172447205,0.852287471294403,0.904818415641785,0.898178219795227,0.917577981948853,0.906475067138672,0.892982959747314,0.885418772697449,0.776828825473785,0.743370175361633,0.614108264446259,0.612488627433777,0.578422427177429,0.575816452503204,0.594617664813995,0.601395845413208,0.597555696964264,0.766813158988953,0.751835882663727,0.646396696567535,0.607691049575806,0.750361561775208,0.732623696327209,0.716885983943939,0.660877883434296,0.768944799900055,0.802345812320709,0.824857711791992,0.593540132045746,0.587819695472717,0.575874269008636,0.608721911907196,0.82046902179718,0.866474270820618,0.878058969974518,0.843822479248047,0.752577424049377,0.717527389526367,0.728131711483002,0.701335966587067,0.590925931930542,0.589995682239532,0.562100648880005,0.558030545711517,0.567298531532288,0.577193260192871,0.581563591957092,0.72448593378067,0.737729609012604,0.622413754463196,0.576157510280609,0.720308303833008,0.706418693065643,0.5756516456604,0.702696919441223,0.0011795781319961,0.00112896494101733,0.00102828920353204,0.001058503636159,0.00119337264914066,0.00106297561433166,0.00105914496816695,0.00112405023537576,0.00129260960966349,0.00110061012674123,0.00120096164755523,0.00110439362470061,0.00113475671969354,0.00120625190902501,0.00139809981919825,0.00129295082297176,0.00111539557110518,0.00109270925167948,0.00118347734678537,0.00108626356814057,0.00102851632982492,0.0011068059829995,0.00107913860119879,0.00102953403256834,0.00105880200862885,0.00136339839082211,0.00121706398203969,0.00114103371743113,0.00122526451013982,0.00110203702934086,0.00123027886729687,0.00113892008084804,0.00114424154162407,0.00116908457130194,0.00124633009545505,0.00106995261739939,0.00136725208722055,0.00105368765071034,0.00160929455887526,0.00194077589549124,0.00206075864844024,0.00175796006806195,0.00272555043920875,0.00264457450248301,0.00324998120777309,0.00313259661197662,0.00219884281978011,0.00152749510016292,0.00256760860793293,0.00256768707185984,0.0014338179025799,0.00121916015632451,0.00133566302247345, 0.00147598213516176,0.00189867184963077,0.00205294857732952,0.00214026914909482,0.00119636079762131,0.00151501852087677,0.00159123365301639,0.0016437767772004,0.00106482626870275,0.00118096638470888,0.00139029452111572,0.0010679098777473,0.00122420466504991,0.00130276964046061,0.00128704076632857,0.00109646108467132,0.0011663946788758,0.00114935508463532,0.00130753719713539,0.00104656210169196,0.00143568706698716,0.00142728083301336,0.00104413845110685,0.00105172116309404,0.00116641377098858,0.00122365332208574,0.00145702308509499,0.00145369581878185,0.00198867777362466,0.00222442415542901,0.00210310681723058,0.00292031979188323,0.00178137444891036,0.00112225965131074,0.00230230134911835,0.00102994462940842,0.00159001746214926,0.0011182960588485,0.00201727566309273,0.00127973523922265,0.00156331283506006,0.00106918648816645,0.00122230243869126,0.00108542153611779,0.00111366261262447,0.00132836529519409,0.00169839384034276,0.00196366291493177,0.00245589460246265,0.00135377666447312,0.00114572537131608,0.0010074065066874,0.001139544416219,0.00178096874151379,0.00182523450348526,0.123235963284969,0.0753501355648041,0.0931120961904526,0.117816068232059,0.00382658536545932,0.045457985252142,0.00366591010242701,0.00752341700717807,0.00435095373541117,0.00292286323383451,0.00395955424755812,0.00190321274567395,0.00143028236925602,0.00383550697006285,0.00381829147227108,0.00336781400255859,0.00902270525693893,0.0128849148750305,0.0199999995529652,0.011979641392827,0.00525866402313113,0.00715382117778063,0.00446873297914863,0.00504618370905519,0.00680423062294722,0.00727805029600859,0.00710283266380429,0.00761045608669519,0.00406671036034822,0.00681646214798093,0.00266376044601202,0.00734136626124382,0.00681392010301352,0.00394017994403839,0.00238415785133839,0.0151917962357402,0.0165377892553806,0.015185103751719,0.0168243162333965,0.00304434704594314,0.00188357208389789,0.013633968308568,0.00538172433152795,0.0122589133679867,0.00306214136071503,0.00553420465439558,0.00272889854386449,0.00280646537430584,0.00395028758794069, 0.0046858717687428,0.0049549350515008,0.00409943610429764,0.15074747800827,0.13802894949913,0.13859336078167,0.0366114713251591,0.0394646488130093,0.00432951329275966,0.00327839748933911,0.00322125758975744,0.00318318116478622,0.00321962824091315,0.0033142757602036,0.0032075101044029,0.0033591843675822,0.00414895033463836,0.00397540256381035,0.00139672122895718,0.00108024047221988,0.00141620181966573,0.00657118484377861,0.00721793109551072,0.00716012995690107,0.125166103243828,0.174555525183678,0.133634239435196,0.184101939201355,0.100839555263519,0.00133616954553872,0.181976735591888,0.101485811173916,0.151200979948044,0.122543193399906,0.158087536692619,0.124445781111717,0.0913600325584412,0.0419483035802841,0.00197794218547642,0.00463608838617802,0.0444087125360966,0.0723793208599091,0.0501375421881676,0.0044353692792356,0.0413938835263252,0.0806875303387642,0.00426826579496264,0.120993569493294,0.178608581423759,0.143479540944099,0.00399883696809411,0.00555829936638474,0.0498151890933514,0.0808451771736145,0.0747244507074356,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0114197684451938,0.0139735713601112,0.00279642338864505,0.0127804530784488,0.0154154840856791,0.0153974965214729,0.0140355518087745,0.00105739862192422,0.0010168842272833,0.00113954034168273,0.00107212935108691,0.00119830516632646,0.00106814026366919,0.00102596683427691,0.00136564020067453,0.0716719478368759,0.124523319303989,0.163556218147278,0.174040555953979,0.192555144429207,0.20968496799469,0.201058372855186,0.216555178165436,0.176410168409348,0.0914620831608772,0.0927850008010864,0.0199999995529652,0.0454204343259335,0.0527630150318146,0.0724167823791504,0.152738720178604,0.206173092126846,0.178831785917282,0.106841884553432,0.0199999995529652,0.00605552084743977,0.00442697573453188,0.125580474734306,0.680477499961853,0.584467530250549,0.592251241207123,0.633143901824951,0.495578348636627, 0.504434049129486,0.691548705101013,0.626969277858734,0.627072930335999,0.64034640789032,0.691565096378326,0.397741913795471,0.545433342456818,0.501227915287018,0.497676163911819,0.482865214347839,0.20007586479187,0.197468772530556,0.173577681183815,0.184274166822433,0.684533894062042,0.676782727241516,0.437961488962173,0.61360228061676,0.414381235837936,0.369911134243011,0.819726526737213,0.824492573738098,0.750284850597382,0.775287508964539,0.726000666618347,0.670123636722565,0.0739083811640739,0.0679146945476532,0.452167540788651,0.550536513328552,0.579955399036407,0.590891540050507,0.577258586883545,0.5803182721138,0.545221924781799,0.677812218666077,0.716372787952423,0.704729378223419,0.764798760414124,0.694859147071838,0.500020503997803,0.812475562095642,0.761427819728851,0.779982626438141,0.851395726203918,0.548225879669189,0.661731421947479,0.782220721244812,0.616512358188629,0.64509129524231,0.628571748733521,0.62187534570694,0.569682478904724,0.722129046916962,0.771439790725708,0.910011827945709,0.499018520116806,0.771681487560272,0.908240258693695,0.4902164041996,0.751008927822113,0.573323547840118,0.0569627061486244,0.0632607415318489,0.0546923018991947,0.0569528415799141,0.177458420395851,0.15703871846199,0.16798897087574,0.187099754810333,0.316656291484833,0.291301727294922,0.184640720486641,0.225315734744072,0.228931069374084,0.152371928095818,0.43130487203598,0.438795536756516,0.498869776725769,0.499205946922302,0.554381132125854,0.499159663915634,0.391060262918472,0.655699729919434,0.581697702407837,0.499182015657425,0.499595403671265,0.499299347400665,0.49955028295517,0.499799698591232,0.505017697811127,0.486934632062912,0.470368415117264,0.488239347934723,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032,0.522314846515656,0.502140820026398,0.544067442417145,0.574277400970459,0.574915885925293,0.600490629673004,0.664091825485229,0.614323496818542,0.458703994750977,0.46759495139122,0.49502158164978,0.472131460905075, 0.463651090860367,0.501171886920929,0.505290508270264,0.747058033943176,0.673701882362366,0.642837941646576,0.698455512523651,0.583079934120178,0.52874481678009,0.497591882944107,0.497499942779541,0.504370510578156,0.653982579708099,0.628796756267548,0.502160012722015,0.593420624732971,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492912411689758,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002,0.495444416999817,0.494400411844254,0.495095014572144,0.495912224054337,0.495938241481781,0.540739595890045,0.526813268661499,0.584814488887787,0.601803541183472,0.545946657657623,0.627271831035614,0.626056015491486,0.644936084747314,0.611551523208618,0.497566670179367,0.499393194913864,0.501378178596497,0.473256915807724,0.478118002414703,0.47151792049408,0.47887846827507,0.47583332657814,0.478424072265625,0.482468962669373,0.473071485757828,0.476970911026001,0.483539015054703,0.499649405479431,0.497931659221649,0.497813880443573,0.50836980342865,0.507277965545654,0.749438107013702,0.788178980350494,0.714695155620575,0.729622066020966,0.927818417549133,0.933475971221924,0.915226221084595,0.894323170185089,0.754922032356262,0.706262648105621,0.745560348033905,0.78499960899353,0.495742470026016,0.495044946670532,0.495270699262619,0.52238667011261,0.500341296195984,0.513158202171326,0.539141952991486,0.495112806558609,0.494484156370163,0.494385927915573,0.494777828454971,0.646189391613007,0.752212941646576,0.683876216411591,0.620637953281403,0.84437370300293,0.775074124336243,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605,0.616513133049011,0.551888883113861,0.570059299468994,0.593811511993408,0.678223431110382,0.960020244121552,0.983643352985382,0.799996078014374,0.963403701782227,0.86243861913681,0.955750465393066,0.925033330917358,0.876249372959137,0.874520301818848,0.551191985607147,0.61811488866806,0.829396069049835, 0.672635018825531,0.651278257369995,0.495612591505051,0.496858716011047,0.682246148586273,0.497243225574493,0.498295664787292,0.49911630153656,0.498381614685059,0.498192936182022,0.499222010374069,0.499349772930145,0.498703926801682,0.499136686325073,0.49921178817749,0.498755186796188,0.499519914388657,0.499555051326752,0.499421000480652,0.498835802078247,0.81444239616394,0.496883779764175,0.497934907674789,0.499061793088913,0.498675882816315,0.49486768245697,0.49796661734581,0.498460471630096,0.803469717502594,0.49705970287323,0.494718581438065,0.504018425941467,0.494964092969894,0.514969348907471,0.506780028343201,0.497430324554443,0.506990075111389,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.833559393882751,0.46928659081459,0.459820955991745,0.729598581790924,0.76493626832962,0.571733355522156,0.497356355190277,0.493865221738815,0.629204213619232,0.47857478260994,0.495688110589981,0.481274753808975,0.497067838907242,0.770751476287842,0.8014115691185,0.508015990257263,0.745351433753967,0.494458675384521,0.494277447462082,0.500205874443054,0.707429111003876,0.49787762761116,0.6831995844841,0.869009733200073,0.498603701591492,0.800292253494263,0.498153626918793,0.498638093471527,0.507655739784241,0.497437328100204,0.482029527425766,0.445579886436462,0.447542548179626,0.456178933382034,0.691224992275238,0.68994003534317,0.696367621421814,0.646832704544067,0.690497040748596,0.512747287750244,0.52385687828064,0.577970147132874,0.56131386756897,0.553135573863983,0.57562243938446,0.582246720790863,0.528339803218842,0.5488241314888,0.532852530479431,0.519924283027649,0.504666149616241,0.476075559854507,0.486094027757645,0.449438631534576,0.482994347810745,0.45784518122673,0.449248284101486,0.514452159404755,0.561508595943451,0.498755604028702,0.53039538860321,0.512394607067108,0.534120500087738,0.494775086641312,0.483250230550766,0.548449218273163,0.590691864490509,0.528972744941711,0.518154919147491,0.570011258125305,0.575352251529694, 0.54700493812561,0.520142495632172,0.502695500850677,0.505330801010132,0.444546610116959,0.477938383817673,0.467626750469208,0.483919441699982,0.498431533575058,0.498079359531403,0.49764558672905,0.496072262525558,0.497497260570526,0.499024957418442,0.498812049627304,0.517799317836761,0.524429976940155,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566,0.49948513507843,0.569468915462494,0.680891454219818,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751,0.498042225837708,0.509154617786407,0.505030632019043,0.528218388557434,0.499973088502884,0.499091774225235,0.499190449714661,0.570380747318268,0.535448849201202,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.499798595905304,0.502025723457336,0.528575539588928,0.515362143516541,0.56660008430481,0.591955363750458,0.49943020939827,0.499888569116592,0.497349143028259,0.495646834373474,0.494615614414215,0.497694700956345,0.498536199331284,0.498701572418213,0.504468858242035,0.499821990728378,0.500964164733887,0.529118895530701,0.595583856105804,0.559608042240143,0.509870648384094,0.497819513082504,0.498537451028824,0.499243289232254,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421,0.493789881467819,0.49458646774292,0.492286801338196,0.48815643787384,0.492628186941147,0.509193360805511,0.494705110788345,0.543936431407928,0.510835826396942,0.529115557670593,0.501953482627869,0.569758892059326,0.610815465450287,0.557083010673523,0.621949911117554,0.572470784187317,0.591342747211456,0.695724725723267,0.55320018529892,0.540745139122009,0.517162621021271,0.552327692508698,0.507378876209259,0.497698903083801,0.527704477310181,0.50039005279541,0.496325492858887,0.494565069675446,0.582824468612671,0.695666551589966,0.727506101131439,0.750860035419464,0.498115301132202,0.482150375843048,0.497372984886169,0.739583432674408,0.856374561786652,0.921864926815033, 0.903915703296661,0.506085455417633,0.491403371095657,0.683231711387634,0.171146184206009,0.270570337772369,0.424545764923096,0.499346643686295,0.499631464481354,0.499337196350098,0.499045014381409,0.498869776725769,0.407788127660751,0.406853288412094,0.278324812650681,0.1684460490942,0.190583914518356,0.237119317054749,0.196648374199867,0.182746469974518,0.163020357489586,0.261683225631714,0.259773045778275,0.278990775346756,0.496063411235809,0.519686937332153,0.49615415930748,0.544732213020325,0.653069257736206,0.612227141857147,0.612312376499176,0.576975464820862,0.592626690864563,0.625570714473724,0.599093317985535,0.597411274909973,0.564130961894989,0.549682676792145,0.729838013648987,0.750595331192017,0.539929986000061,0.500865161418915,0.500391781330109,0.0966039299964905,0.105603665113449,0.174986571073532,0.409532397985458,0.495501756668091,0.193169787526131,0.205573499202728,0.287738084793091,0.421045809984207,0.494261145591736,0.496202617883682,0.522774279117584,0.10176257789135,0.117253668606281,0.198547959327698,0.353632628917694,0.686014235019684,0.796516358852386,0.892734885215759,0.432033270597458,0.301140606403351,0.221199050545692,0.208233565092087,0.00253082648850977,0.00275990343652666,0.00274983723647892,0.00286803673952818,0.00353791960515082,0.00354324467480183,0.00348438322544098,0.00343684293329716,0.00327312108129263,0.00293036713264883,0.00278568617068231,0.0028021929319948,0.00250480184331536,0.00308231031522155,0.00499954726547003,0.0106547418981791,0.00859358441084623,0.0010503102093935,0.00117027142550796,0.00592980580404401,0.00331242568790913,0.0199999995529652,0.0762817785143852,0.13538670539856,0.159179985523224,0.127241417765617,0.172544106841087,0.19372533261776 } Transform: *16 { a: 0.00974139876223671,-0.261572280877899,-0.965134713535369,0,-0.99808360954043,-0.0615269355671852,0.00660116218659383,0,-0.0611084648132927,0.963220827450316,-0.261670358354416,0,4.90243372735329,-0.72616871906631,-9.58014941330076,1 } TransformLink: *16 { a: 0.00974139846069232,-0.998083578644817,-0.0611084629216841,0,-0.261572284969406,-0.0615269365295879,0.963220842516991,0,-0.965134745332177,0.00660116240407218,-0.261670366975266,0,-9.483837235735,4.91159978411053,-1.50780017761377,1 } } Deformer: 135195936, "SubDeformer::Cluster_Neck", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1150 { a: 94,95,96,108,109,122,123,124,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,163,166,167,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,999,1010,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2557,2585,2586,2587,2588,2676,2677,2688,2689,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,3420,3421,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3469,3470,3471,3472,3473,3474,3475,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4098,4099,4155,4156,4157,4158,4159,4160,4161,4163,4203,4204,4205,4207,4208,4209,4210,4211,4212,4230,4231,4234,4235,4236,4237,4240,4248,4249,4250,4251,4252,4265,4266,4267,4268,4269,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640, 4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,5303,5304,5305,5306,5309,5311,5313,5314,5318,5319,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5379,5380,5381,5382,5383,5384,5387,5388,5389,5391,5394,5395,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5414,5415,5416,5417,5418,5425,5426,5427,5428,5429,5430,5431,5439,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5462,5467,5477,5478,5479,5480,5483,5484,5520,5524,5727,5728,5729,5730,5731,5732,5733,5734,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5810,5811,5812,5813,5814,5815,5818,5819,5820,5822,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5844,5845,5846,5847,5848,5855,5856,5857,5858,5859,5860,5861,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5893,5894,5898,5908,6001,6484,6485,6486,6487,6488,6489,6490,6491,9982,9983,9991,9992,9993,9998,10030,10031,10039,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10091,10092,10093,10094,10100,10101,10102,10111,10112,10116,10133,10134,10135,10136,10145,10192,10200,10202,10205,10208,10209,10210,10211,10212,10213,10214,10215,10217,10218,10219,10220,10221,10222,10233,10234,10235,10236,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258,10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10278,10279,10280,10282,10283, 10284,10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10300,10301,10302,10304,10305,10306,10307,10308,10309,10310,10317,10318,10319,10320,10321,10322,10323,10324,10325,10326,10327,10329,10330,10331,10332,10333,10334,10335,10336,10337,10338,10339,10340,10341,10342,10343,10344,10345,10346,10347,10348,10349,10350,10351,10352,10353,10354,10355,10356,10357,10358,10359,10360,10361,10363,10364,10365,10366,10367,10368,10370,10372,10373,10376,10377,10378,10394,10395,10415,10416,10419,10426,10427,10430,10431,10433,10436,10452,10453,10454,10455,10459,10462,10465,10466,10467,10468,10476,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489,10490,10494,10495,10497,10498,10499,10500,10501,10502,10503,10504,10505,10506,10507,10508,10509,10510,10511,10512,10513,10514,10515,10516,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10541,10542,10543,10544,10550,10553,10571,10573,10575,10583,10586,10626,10632,10635,10638,10639,10641,10642,10643,10644,10645,10646,10647,10649,10650,10651,10652,10653,10654,10655,10657,10658,10659,10660,10671,10672,10673,10674,10675,10676,10682,10683,10685,10686,10687,10688,10689,10690,10691,10692,10693,10694,10695,10696,10697,10698,10699,10700,10701,10702,10703,10704,10705,10706,10707,10708,10713,10715,10716,10717,10718,10719,10721,10722,10723,10724,10725,10726,10727,10728,10729,10730,10731,10732,10733,10734,10735,10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10752,10753,10754,10755,10756,10757,10758,10759,10760,10762,10763,10764,10765,10766,10767,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10808,10823,10824,10825,10844,10845,10848,10849,10855,10856,10857,10858,10859,10860,10862,10865,10880,10881,10882,10883,10886,10889,10892,10893,10894,10898,10901,10902,10903,10904,10905,10906,10907,10908 } Weights: *1150 { a: 0.567255795001984,0.594789087772369,1,0.485924780368805,0.528420746326447,1,1,0.25,0.489311069250107,0.392085492610931,0.399200916290283,0.367956221103668,0.407303422689438,0.416285485029221,0.430377572774887,0.41740095615387,0.377135217189789,0.420548111200333,0.393889129161835,0.375083416700363,0.464555472135544,0.463200926780701,0.460871756076813,0.430750489234924,0.40896874666214,0.415823668241501,0.389805644750595,0.430850774049759,0.406835645437241,1,0.268844544887543,0.450425446033478,0.456322252750397,0.450362801551819,0.4505615234375,0.37137359380722,0.319888979196548,0.333971530199051,0.377856224775314,0.461536556482315,0.4345563352108,0.425735384225845,0.447437614202499,0.403514206409454,0.434205532073975,0.309248238801956,0.318339675664902,0.508810639381409,0.544517993927002,0.517018139362335,0.488460779190063,0.486855179071426,0.488402009010315,0.565379500389099,0.531720817089081,0.533512532711029,0.570134997367859,0.592637956142426,1,1,0.596871972084045,0.460071235895157,0.483837783336639,0.496960788965225,0.517288565635681,0.490690231323242,0.527705907821655,0.531510651111603,0.564505398273468,0.568630576133728,0.412591725587845,0.460467159748077,0.501135110855103,0.431564539670944,1,1,1,1,1,0.278514921665192,0.315800756216049,1,1,1,0.295491874217987,0.423362791538239,0.427228540182114,0.431595623493195,0.437787711620331,0.438149452209473,0.441805690526962,0.450171411037445,0.445821523666382,0.43207174539566,0.421678841114044,0.420816749334335,0.440724223852158,0.449095875024796,0.158272460103035,0.214777141809464,0.23971700668335,0.317722767591476,0.34293207526207,0.384178310632706,0.453722923994064,0.37018746137619,0.2797671854496,0.272957593202591,0.468755125999451,0.456089347600937,0.453430771827698,0.367843747138977,0.374986797571182,0.423006445169449,0.391115933656693,0.400139689445496,0.418090730905533,0.398969799280167,0.45367106795311,0.374496161937714,0.348593175411224,0.337754309177399,0.448754966259003,0.439398765563965,0.412120491266251,0.40472885966301,0.395856976509094, 0.491585850715637,0.417333751916885,1,1,0.446810632944107,0.444157123565674,0.436623930931091,0.305552244186401,0.321938186883926,0.45570120215416,0.456821322441101,0.421524226665497,0.410207986831665,0.439488798379898,0.430942058563232,0.486270278692245,0.387218713760376,0.513144791126251,0.553484082221985,0.527101457118988,0.492273092269897,0.488050699234009,0.493159621953964,0.572631776332855,0.536227822303772,0.536720275878906,0.575529217720032,0.602228164672852,1,1,0.609866917133331,0.454447686672211,0.484999120235443,0.497838407754898,0.525630235671997,0.493739008903503,0.554608345031738,0.549289286136627,0.577452898025513,0.585927069187164,0.404821395874023,0.461030542850494,0.52098685503006,0.475875169038773,1,1,1,1,1,1,0.34978786110878,1,1,1,0.267421126365662,0.413493543863297,0.420259416103363,0.425440341234207,0.43252557516098,0.431422144174576,0.436633944511414,0.420562446117401,0.409768640995026,0.410564452409744,0.431873440742493,0.441510498523712,0.178753688931465,0.248801708221436,1,0.341445356607437,0.399679660797119,0.401330173015594,0.312750190496445,0.289100527763367,0.260428875684738,0.0274547934532166,0.0250113885849714,0.020182766020298,0.0213320329785347,0.016894893720746,0.0194678697735071,0.0149198956787586,0.0193698238581419,0.0146699715405703,0.0137685351073742,0.0113338427618146,0.0107923075556755,0.0357030481100082,0.0397298000752926,0.0218236707150936,0.0282798446714878,0.0171993505209684,0.0227650869637728,0.0176588520407677,0.0130077684298158,0.0150612825527787,0.0187534429132938,0.0210761055350304,0.0117735685780644,0.0151852741837502,0.013343752361834,0.0096684992313385,0.012965239584446,0.00918575096875429,0.0302136708050966,0.0265279468148947,0.0199599303305149,0.015185602940619,0.0155232883989811,0.0111408829689026,0.0331871323287487,0.0244939364492893,0.0269742105156183,0.0207655429840088,0.0188741628080606,0.0187237989157438,0.038996160030365,0.0349120125174522,0.0274578537791967,0.0220344085246325,0.041811753064394,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.195673152804375,0.364670842885971,0.328575611114502,0.335197657346725,0.085664302110672,0.0847082063555717,0.109214313328266,0.145181283354759,1,0.292138516902924,0.1701730042696,0.268163949251175,0.274444133043289,0.123346589505672,0.0517623275518417,0.0323195643723011,0.0741127878427505,0.108336910605431,0.0483566932380199,0.0131363812834024,0.0477573983371258,0.00303209642879665,0.0137467281892896,0.00896062422543764,0.00180904532317072,0.0341183207929134,0.0385043062269688,0.293479233980179,0.160098940134048,0.155995458364487,0.199746564030647,0.0119855618104339,0.237626984715462,0.440084129571915,0.233796462416649,0.444397240877151,0.309454947710037,0.160931527614594,0.369414836168289,0.386035412549973,0.161727607250214,0.106181867420673,0.0822702571749687,0.0846450924873352,0.0603290311992168,0.0332393832504749,0.0122639155015349,0.0174598526209593,0.0603569746017456,0.263093948364258,0.33202987909317,0.0128398509696126,0.00547032617032528,0.00472192838788033,0.0279744360595942,0.0175511501729488,0.0347373820841312,0.0315300486981869,0.0298746712505817,0.0178451966494322,0.00422401027753949,0.00319708767347038,0.00969248823821545,0.00549563439562917,0.0098872184753418,0.116298198699951,0.113489478826523,0.0818140730261803,0.0848385840654373,0.116220399737358,0.0814184322953224,0.11701412498951,0.095750592648983,0.00365511584095657,0.019964512437582,0.00232761516235769,0.00926866568624973,0.00592594314366579,0.00528620649129152,0.273272782564163,0.00890387129038572,0.0180002469569445,0.0394606180489063,0.147415712475777,0.140457794070244,0.0401500388979912, 0.0032884725369513,0.0260648149996996,0.0329115353524685,0.0179773308336735,0.00425787409767509,0.00778371561318636,0.00381025741808116,0.00544504728168249,0.211386486887932,0.215239286422729,0.231434643268585,0.408174365758896,0.367100775241852,0.128619104623795,1,0.304448693990707,0.176563605666161,0.274393022060394,0.283235043287277,0.129507526755333,0.0551842972636223,0.034300934523344,0.078447587788105,0.114036232233047,0.0511978343129158,0.0139047084376216,0.0508126877248287,0.0317802466452122,0.142172694206238,0.0929999127984047,0.0189517624676228,0.34366649389267,0.393704414367676,0.294252127408981,0.161952465772629,0.163479775190353,0.213232666254044,0.125898495316505,0.247030854225159,0.443164050579071,0.233504742383957,0.450279980897903,0.309741675853729,0.162085667252541,0.379501342773438,0.25,0.168081417679787,0.107104353606701,0.0829724371433258,0.0879543945193291,0.0629429370164871,0.183462262153625,0.0351017713546753,0.0128694428130984,0.0183484964072704,0.0632648542523384,0.259588420391083,0.0136276334524155,0.0057412046007812,0.00497032888233662,0.0297496803104877,0.0184993632137775,0.0365210957825184,0.0330784022808075,0.0315940752625465,0.0185253042727709,0.00435465015470982,0.00335264601744711,0.0100949313491583,0.00577421206980944,0.0104488199576736,0.117551773786545,0.126195579767227,0.0899995565414429,0.103110551834106,0.140919372439384,0.082244835793972,0.11901718378067,0.0211004968732595,0.0245979446917772,0.00974327325820923,0.00623384583741426,0.161613687872887,0.0055119595490396,0.282902300357819,0.00928386207669973,0.018939271569252,0.0417766198515892,0.154402107000351,0.143449380993843,0.147689074277878,0.0421619713306427,0.0346495062112808,0.00349515746347606,0.220319107174873,0.225046843290329,0.240709781646729,0.40315368771553,0.378050059080124,0.136889830231667,1,0.314606815576553,0.00275175319984555,0.00350375100970268,0.00223227171227336,0.00326038477942348,0.00345232943072915,0.00327272177673876,0.00360468029975891,0.00282804574817419,0.00355280679650605,1,1,0.00362786720506847, 0.00348612759262323,1,1,1,1,0.00774744292721152,0.0106565840542316,0.00863821338862181,0.00595487840473652,0.0128081925213337,0.0164071209728718,0.016546867787838,0.25,0.25,1,0.25,0.25,0.25,0.25,0.00147943664342165,0.00134516227990389,0.0044733015820384,0.00360238761641085,0.00173059292137623,0.00240649236366153,0.00280290725640953,0.00358973792754114,0.00190061377361417,0.0248462148010731,0.151691138744354,0.101414285600185,0.101350642740726,0.00352429714985192,0.00175461545586586,0.00108897860627621,0.00120286992751062,0.00216193147934973,0.0918875187635422,0.0180216785520315,0.00100491382181644,0.00119083886966109,0.00139025796670467,0.00597331812605262,0.00791144277900457,0.00467343721538782,0.00444712163880467,0.0175031926482916,0.0186443794518709,0.0193254761397839,0.0109613062813878,0.0139002539217472,0.0153780998662114,0.0041714389808476,0.00452382443472743,0.00202354602515697,0.5,1,0.25,0.25,0.25,0.25,0.101412929594517,0.5,0.25,0.5,0.5,0.5,0.5,0.0021704516839236,0.00124227663036436,0.00209963205270469,0.00538497371599078,0.5,0.0101059842854738,0.0141486637294292,0.0122741842642426,0.0101597858592868,0.0116839092224836,0.00574857275933027,0.00651532784104347,0.00907000526785851,0.00696895597502589,0.0087407324463129,0.00351020158268511,0.00782129820436239,1,1,1,1,1,1,1,1,0.00179124786518514,0.00472647324204445,0.00530879013240337,0.00628127250820398,0.00882341712713242,0.00924219656735659,0.00794229563325644,0.0049978494644165,0.0205187033861876,0.00416509388014674,1,1,1,1,1,1,1,1,0.0047590765170753,0.00339766312390566,1,1,0.00117793213576078,0.0049570444971323,0.004824782256037,0.0124465888366103,0.0127216335386038,1,1,1,1,0.0186837278306484,0.0140060009434819,0.00721948593854904,1,1,0.00884454976767302,1,0.00395213393494487,1,0.0116208745166659,0.013472743332386,0.0186006035655737,0.0184362661093473,0.011931050568819,0.0167338736355305,0.0170167628675699,0.0126416739076376,0.0168435014784336,0.00547084817662835,0.0172698926180601,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00125138647854328,0.00204948312602937, 0.00359823647886515,0.00145057961344719,0.00187749601900578,0.00122394051868469,0.00116844475269318,0.0013314897660166,0.00126363977324218,0.00163859105668962,0.00136439059861004,0.00143550056964159,0.00218372559174895,0.00267671863548458,0.00233855727128685,0.00157993321772665,0.00108630012255162,0.00163278100080788,0.00147458596620709,0.00104575627483428,0.00109344394877553,0.00156189978588372,0.0027174826245755,1,0.25,0.00419261958450079,0.00326536339707673,0.00335888448171318,0.00118930672761053,0.00312373973429203,0.25,0.00116739247459918,0.00136812450364232,1,0.0136201335117221,0.0129918465390801,0.0130262523889542,0.0141849555075169,0.0142200998961926,0.0202176105231047,0.00510521046817303,0.0147238532081246,0.010338207706809,0.00867407489567995,1,1,1,0.00789877492934465,0.00324751692824066,0.00364983663894236,0.0022549747955054,1,0.00544625706970692,0.00590713182464242,1,1,1,1,1,0.00919234938919544,0.00692324060946703,0.0103907808661461,0.0123759154230356,0.016865961253643,0.0124860825017095,0.0155578637495637,0.25,0.25,0.25,0.25,0.25,0.00203575659543276,0.00208194018341601,0.00567516684532166,0.00245430134236813,0.00209734006784856,0.0054551437497139,0.00334027502685785,0.00234061665832996,0.00376753066666424,0.0190892461687326,0.101087607443333,0.102376267313957,0.00378289772197604,0.00555694475769997,0.00121506373398006,0.00127516605425626,0.00153478526044637,0.00121405138634145,0.0919240638613701,0.00373780587688088,0.00167861278168857,0.00223392457701266,0.00221726926974952,0.0106646819040179,0.00716324429959059,0.0345897115767002,0.00900897104293108,0.0182691775262356,0.00811813399195671,0.0113305104896426,0.0197549313306808,0.0211176052689552,0.0061979959718883,0.0087542524561286,0.0139151802286506,0.00718409521505237,0.00402087578549981,0.00166014290880412,0.00292091490700841,0.00405985442921519,0.00209410861134529,0.00352013343945146,0.5,0.25,0.25,1,0.25,0.25,0.101336054503918,0.5,0.25,0.5,0.5,0.00412551639601588,0.00775624206289649,0.00404722802340984,0.00429436750710011,0.00155673618428409,0.0014443468535319, 0.00130896712653339,0.00134402082767338,0.0104999812319875,0.0105549236759543,0.0127923814579844,0.0147713171318173,0.0141640063375235,0.011232266202569,0.01196941267699,0.0103948712348938,0.00805490650236607,0.00575671857222915,0.0102886073291302,0.0108860861510038,1,1,1,1,1,1,1,1,0.00152104836888611,0.00132340157870203,0.00119240442290902,0.00119349034503102,0.00247540534473956,0.00618533464148641,0.00595171796157956,0.00725632114335895,0.0107390712946653,0.00959169398993254,0.00815762672573328,0.00856028590351343,0.00995538290590048,0.0215687062591314,1,1,1,1,1,1,1,1,0.00500578666105866,0.00820006150752306,0.00368156004697084,1,1,0.00129385036416352,0.00134667137172073,0.00484176818281412,0.00508514931425452,0.0135751375928521,0.25,1,1,1,1,0.0191637482494116,0.0159182604402304,0.00941314082592726,1,0.00361253484152257,1,1,0.0125703969970346,0.0191097129136324,0.0188217274844646,0.0150680541992188,0.0141781587153673,0.0193612296134233,0.0181489326059818,0.0193812530487776,0.0148670021444559,0.00837697088718414,0.0181021224707365,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.00221460894681513,0.00483389338478446,0.00995899457484484,0.00166275002993643,0.00107236753683537,0.00141309737227857,0.00251308549195528,0.00117712223436683,0.00119686732068658,0.00369730149395764,0.00232940819114447,0.00343035673722625,0.00512200966477394,0.00415379228070378,0.00224908231757581,0.00186692702118307,0.00240918109193444,0.0036583230830729,0.00148228707257658,0.00362345040775836,0.00243953289464116,0.00497984746471047,0.00342305307276547,0.00419780611991882,0.00295878807082772,0.00106835423503071,0.00148653844371438,0.00132255384232849,0.00168555148411542,0.00212236680090427,0.00320635898970068,0.25,0.25,0.00437035784125328,0.00346185616217554,0.00354567030444741,0.00130656303372234,0.00313585111871362,0.00616921996697783,0.00590131152421236,0.00172159122303128,0.00200400478206575,0.00266929413191974,0.0020909383893013,0.00145117833744735,0.0025090635754168,0.00256710313260555,0.00129591429140419,0.00128374621272087 } Transform: *16 { a: 0.0524868350678716,0.0529138509284646,0.997218759939732,0,0.940038672709068,-0.339614138039713,-0.0314568518442159,0,0.337005086578302,0.939075270948667,-0.0675663372191002,0,-56.3654154323426,21.2906301347447,1.65101161799859,1 } TransformLink: *16 { a: 0.0524868349406584,0.94003867043068,0.337005085761497,0,0.052913850775869,-0.339614137060317,0.939075268240515,0,0.997218761307028,-0.0314568518873467,-0.0675663373117411,0,0.18545326968084,60.2682047899057,-0.886519735148667,1 } } Deformer: 135197072, "SubDeformer::Cluster_L_Ball", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *847 { a: 3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8623,8628,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749,8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,8764,8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779, 8780,8781,8782,8783,8784,8785,8786,8788,8789,8790,8791,8792,8793,8794,8795,8796,8797,8798,8799,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917,8918,8919,8920,8921,8922,8923,8924,8925,8926,8927,8928,8929,8930,8931,8932,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,8944,8945,8946,8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962,8963,8964,8965,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977,8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039,9040,9041,9042,9043,9044,9045,9046,9047,9049,9050,9051,9052,9053,9054,9055,9056,9057,9058,9059,9060,9061,9062,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9074,9075,9077,9078,9079,9086,9087,9141,9222,9223,9224,9225,9226,9227,9229,9233,9234,9235,9238,9241,9242,9243,9244,9245,9246,9247,9248,9249,9251,9252,9253,9254,9255,9256,9257,9258,9260,9261,9262,9264,9265,9266,9267,9268,9270,9271,9272,9273,9274,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9332,9333,9334,9335,9336,9338,9339,9344,9345,9347,9348,9349,9354,9355,9356,9357,9369,9370,9371,9372,9383,9384,9385,9386,9388,9389,9390,9391,9392,9393,9394,9396,9397,9398,9399,9400,9407,9408,9409,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9818,9819,9820,9821,9822,9823, 9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9901,9902,9903,9904,9905,9906,9907,9908,9923,9924,9925,9926 } Weights: *847 { a: 0.119809061288834,0.0899978801608086,0.129694148898125,0.157971039414406,0.0655382722616196,0.102676093578339,0.0493819825351238,0.0801638662815094,0.0396263524889946,0.0630189478397369,0.135046094655991,0.107540957629681,0.11192848533392,0.142919838428497,0.0843309238553047,0.0852136611938477,0.0635753720998764,0.0593578219413757,0.192490458488464,0.200015053153038,0.162885546684265,0.191255062818527,0.170955494046211,0.139657527208328,0.176798492670059,0.156122818589211,0.161453932523727,0.0408337861299515,0.0603096075356007,0.0812023133039474,0.0624551698565483,0.029839189723134,0.0544516630470753,0.054666955024004,0.0336862355470657,0.0624573267996311,0.0633768364787102,0.0567393265664577,0.0580587983131409,0.0563296005129814,0.0576892644166946,0.104413233697414,0.0770940035581589,0.0993608608841896,0.118208408355713,0.0997513458132744,0.123212285339832,0.144008576869965,0.144543543457985,0.125933632254601,0.101286850869656,0.120418056845665,0.0898743644356728,0.082826592028141,0.175235584378242,0.206051632761955,0.20803314447403,0.287898749113083,0.352314889431,0.320552468299866,0.262158662080765,0.332916170358658,0.405986249446869,0.319005310535431,0.420205354690552,0.288312464952469,0.414280354976654,0.276978254318237,0.243617594242096,0.281397551298141,0.316190302371979,0.245399445295334,0.300980687141418,0.194138199090958,0.267054826021194,0.240853235125542,0.281522959470749,0.253161817789078,0.234090819954872,0.226632595062256,0.261527568101883,0.187547445297241,0.160497680306435,0.364978283643723,0.263920068740845,0.407592862844467,0.289993405342102,0.17541928589344,0.242737710475922,0.195276826620102,0.137758135795593,0.269458144903183,0.206763193011284,0.140182182192802,0.129011526703835,0.172453701496124,0.147585853934288,0.199256956577301,0.148286879062653,0.234329968690872,0.245895057916641,0.216519474983215,0.188423424959183,0.103776790201664,0.191133603453636,0.185088723897934,0.0749577209353447,0.166032284498215,0.0475209578871727,0.13492988049984,0.0298269018530846,0.100796863436699, 0.0224829353392124,0.141362354159355,0.175193801522255,0.0989582315087318,0.0417463518679142,0.0243088398128748,0.0775943920016289,0.0157915055751801,0.0797843635082245,0.0186276473104954,0.0958492234349251,0.0739613026380539,0.0987996235489845,0.313051700592041,0.342331558465958,0.399825572967529,0.411330610513687,0.397170573472977,0.275049090385437,0.239233568310738,0.211740121245384,0.243876278400421,0.352577656507492,0.388358443975449,0.183568000793457,0.165666341781616,0.0815498232841492,0.111265502870083,0.0577223934233189,0.042687963694334,0.0341188460588455,0.208152711391449,0.181814447045326,0.215607687830925,0.150894671678543,0.0531679205596447,0.0347578637301922,0.0246079619973898,0.0286764390766621,0.0848506242036819,0.113070398569107,0.132778897881508,0.146839424967766,0.326059967279434,0.358287960290909,0.412675321102142,0.427787512540817,0.424188673496246,0.250109553337097,0.284029006958008,0.265100747346878,0.23208250105381,0.372414231300354,0.417168736457825,0.202001944184303,0.178038120269775,0.21736142039299,0.148579463362694,0.0343438498675823,0.0178217813372612,0.0483061522245407,0.0802863091230392,0.0154612669721246,0.00884495582431555,0.024283966049552,0.040769174695015,0.0130178304389119,0.0205114874988794,0.0153527930378914,0.016140166670084,0.0136747797951102,0.00986284576356411,0.00427819881588221,0.00722352927550673,0.00711198942735791,0.0163313783705235,0.0112073970958591,0.00929472502321005,0.0253093186765909,0.0200225468724966,0.0138108003884554,0.00415289960801601,0.00256811967119575,0.00319767044857144,0.0112569211050868,0.0154976118355989,0.00776961492374539,0.0317798443138599,0.0830756649374962,0.0679816603660584,0.002111661946401,0.00217902287840843,0.00262391986325383,0.0132161434739828,0.104563571512699,0.126195386052132,0.159771472215652,0.159212738275528,0.0733592361211777,0.100023798644543,0.1074343547225,0.111484587192535,0.0233124699443579,0.0703045204281807,0.010179772041738,0.0060359057970345,0.00849007628858089,0.00860253255814314,0.019992146641016,0.00909887067973614, 0.0370676107704639,0.0633366629481316,0.135420516133308,0.120002366602421,0.157945588231087,0.160173356533051,0.060064110904932,0.0850093364715576,0.084347702562809,0.00733144860714674,0.00175352673977613,0.0131671754643321,0.00396548444405198,0.0915219038724899,0.138763025403023,0.00711936876177788,0.001887789927423,0.00187672674655914,0.00180047412868589,0.00188750913366675,0.0146881053224206,0.0102584706619382,0.00863561127334833,0.00683643994852901,0.00424826936796308,0.00276495539583266,0.0034044929780066,0.00569254253059626,0.00191985000856221,0.0027708294801414,0.00209227530285716,0.00309577863663435,0.00212210300378501,0.0015722387470305,0.00134062161669135,0.00130497117061168,0.204428568482399,0.240890353918076,0.215098306536675,0.146842062473297,0.494769752025604,0.494105905294418,0.495395541191101,0.495655655860901,0.492070853710175,0.493543356657028,0.493890047073364,0.492632776498795,0.435047715902328,0.462608724832535,0.383706748485565,0.344641864299774,0.235167190432549,0.212380930781364,0.181989669799805,0.345770686864853,0.118253737688065,0.0800283998250961,0.0991662740707397,0.0648122876882553,0.100251704454422,0.113893955945969,0.0691032484173775,0.154710173606873,0.157654821872711,0.335175216197968,0.285561293363571,0.411798715591431,0.464162200689316,0.497483104467392,0.497408628463745,0.493552297353745,0.345870792865753,0.369031637907028,0.495175987482071,0.403188109397888,0.498849123716354,0.497773230075836,0.497934967279434,0.496349453926086,0.496178597211838,0.498113840818405,0.49652174115181,0.494703501462936,0.493292182683945,0.492458581924438,0.494420170783997,0.495708435773849,0.49569571018219,0.495479911565781,0.495618104934692,0.493433386087418,0.495421648025513,0.496160745620728,0.496107131242752,0.418340176343918,0.434583425521851,0.339237004518509,0.31533095240593,0.416455090045929,0.295802593231201,0.214149355888367,0.201820328831673,0.205367624759674,0.0822143629193306,0.0956392288208008,0.0748522356152534,0.0653277561068535,0.0626779273152351,0.0779718831181526,0.0524279996752739, 0.0528356619179249,0.0511609353125095,0.0496504344046116,0.0658826380968094,0.0637751594185829,0.0336999036371708,0.0348111018538475,0.00433988263830543,0.00446385284885764,0.0678059607744217,0.0538580566644669,0.0546310767531395,0.0104043334722519,0.116521611809731,0.090772956609726,0.0542768314480782,0.0352695845067501,0.0424237586557865,0.0887500420212746,0.153960809111595,0.280644834041595,0.242277592420578,0.124399460852146,0.495814889669418,0.495124042034149,0.495348423719406,0.464802771806717,0.487164556980133,0.470115929841995,0.443319916725159,0.49530503153801,0.494781821966171,0.494671732187271,0.494987636804581,0.312596261501312,0.216291069984436,0.292845606803894,0.348908662796021,0.131920486688614,0.20519183576107,0.495361059904099,0.494524925947189,0.495436549186707,0.495757460594177,0.496141195297241,0.496870189905167,0.495664089918137,0.381458014249802,0.444033443927765,0.423699676990509,0.40310999751091,0.31701996922493,0.01352006662637,0.00623834365978837,0.194196224212646,0.0081644132733345,0.128129526972771,0.00901213102042675,0.0167376678436995,0.108408644795418,0.035431731492281,0.440156221389771,0.377069413661957,0.158670663833618,0.0304759200662375,0.0383747220039368,0.00827804021537304,0.00587422773241997,0.0275462977588177,0.00514383288100362,0.00309813022613525,0.00165706186089665,0.00308532593771815,0.00344883580692112,0.00153451645746827,0.00134903774596751,0.00255205435678363,0.00177448592148721,0.00161401403602213,0.0024589782115072,0.00104652903974056,0.00126132590230554,0.00246899691410363,0.00533299054950476,0.00599044188857079,0.00394871924072504,0.00192845857236534,0.0027121368329972,0.494946539402008,0.00399358989670873,0.00302386237308383,0.0626282393932343,0.493795990943909,0.495063692331314,0.488114684820175,0.495184719562531,0.479027658700943,0.487426996231079,0.49675327539444,0.485897928476334,0.499118983745575,0.498842120170593,0.498915076255798,0.498471945524216,0.498567849397659,0.497722923755646,0.498795121908188,0.499147802591324,0.00467635691165924,0.0670545846223831, 0.102516353130341,0.171086966991425,0.131708532571793,0.391339808702469,0.0549012310802937,0.011670021340251,0.112286701798439,0.0454526841640472,0.00833240710198879,0.0372853241860867,0.00577836437150836,0.220962136983871,0.112559981644154,0.051339328289032,0.0841941982507706,0.494763672351837,0.494477927684784,0.496494054794312,0.117242857813835,0.49773570895195,0.225124195218086,0.0650158226490021,0.498591303825378,0.197639212012291,0.00366536597721279,0.0026983511634171,0.485027343034744,0.00510318018496037,0.0358083508908749,0.155403360724449,0.154275134205818,0.122542470693588,0.291669100522995,0.153436154127121,0.152971222996712,0.323384523391724,0.164903864264488,0.211265802383423,0.21014766395092,0.25732234120369,0.259123921394348,0.24392506480217,0.26708647608757,0.259630799293518,0.213490962982178,0.158189788460732,0.158966541290283,0.147020593285561,0.189305245876312,0.176712840795517,0.13990107178688,0.154465168714523,0.182679980993271,0.122141182422638,0.154182508587837,0.173029288649559,0.185888528823853,0.215016633272171,0.153718262910843,0.19850005209446,0.22823129594326,0.147075280547142,0.186001405119896,0.158042415976524,0.192552268505096,0.233826741576195,0.302742838859558,0.274362176656723,0.202020406723022,0.248197495937347,0.187687203288078,0.230491310358047,0.270352780818939,0.172357693314552,0.142427876591682,0.177623927593231,0.216424167156219,0.177695736289024,0.49823185801506,0.497802197933197,0.493438005447388,0.497677952051163,0.499043405056,0.498800069093704,0.480737179517746,0.473599851131439,0.499872356653214,0.499278098344803,0.499828666448593,0.499938815832138,0.499490469694138,0.428288877010345,0.298123270273209,0.498219937086105,0.4974305331707,0.498798072338104,0.498037666082382,0.498205900192261,0.484404802322388,0.48499321937561,0.456718504428864,0.499969571828842,0.499186664819717,0.499278783798218,0.426042973995209,0.454804599285126,0.49847537279129,0.494693696498871,0.494539827108383,0.494640290737152,0.49461504817009,0.498110502958298,0.498928993940353,0.499923974275589, 0.499071568250656,0.494272619485855,0.496581465005875,0.46791198849678,0.475545167922974,0.412802815437317,0.393669903278351,0.499435722827911,0.499883413314819,0.497263044118881,0.495622754096985,0.494674980640411,0.497017949819565,0.498391449451447,0.498559087514877,0.490382015705109,0.499798029661179,0.497542917728424,0.467545807361603,0.391185462474823,0.422848254442215,0.482203125953674,0.49771437048912,0.498413652181625,0.499226033687592,0.499752223491669,0.494891762733459,0.495065748691559,0.495090305805206,0.494971811771393,0.497306615114212,0.494864940643311,0.494124948978424,0.494882583618164,0.492664277553558,0.484863072633743,0.479086011648178,0.437741309404373,0.471439510583878,0.429207265377045,0.474411964416504,0.453916072845459,0.479357570409775,0.40096178650856,0.372501075267792,0.425279170274735,0.368588149547577,0.416071623563766,0.398315280675888,0.304622709751129,0.434937685728073,0.446757704019547,0.470192223787308,0.435698121786118,0.488551676273346,0.497512698173523,0.46674171090126,0.476854473352432,0.48199325799942,0.480819195508957,0.402228116989136,0.166978493332863,0.147668540477753,0.137913808226585,0.00371660990640521,0.0360510423779488,0.0051951096393168,0.142808973789215,0.0712238401174545,0.0408410467207432,0.0475897714495659,0.147152066230774,0.188807547092438,0.172839537262917,0.00292108580470085,0.00229511526413262,0.00176306103821844,0.00133823312353343,0.00133625592570752,0.00191617012023926,0.00224431487731636,0.00722364755347371,0.0104683004319668,0.0168343223631382,0.0028557509649545,0.00251159467734396,0.00577683001756668,0.00345012429170311,0.00296396017074585,0.00282692280597985,0.0128484172746539,0.0095820389688015,0.00735749956220388,0.00728109432384372,0.00222123926505446,0.00233622593805194,0.00484567414969206,0.00572063308209181,0.0406887419521809,0.0657581984996796,0.067342184484005,0.0861546471714973,0.0813479200005531,0.125508472323418,0.00697338348254561,0.0218249130994082,0.00429057935252786,0.00421941420063376,0.00140310742426664,0.00193769996985793,0.00202646269463003, 0.00154978304635733,0.00140596809796989,0.00627871742472053,0.00652931304648519,0.00638186885043979,0.0052344617433846,0.00497622787952423,0.00719883758574724,0.0146173173561692,0.00557320425286889,0.00636823568493128,0.00689202733337879,0.00697624310851097,0.00970681756734848,0.0112742707133293,0.00393346231430769,0.00402365624904633,0.00522507447749376,0.00604073889553547,0.00587788922712207,0.00498025165870786,0.00626034289598465,0.00972524099051952,0.00114239507820457,0.00111113348975778,0.00414171675220132,0.00236102729104459,0.00183009263128042,0.00206261011771858,0.00431667268276215,0.00359163619577885,0.00402410188689828,0.00112126138992608,0.00112171703949571,0.00105882645584643,0.0145033225417137,0.0118997758254409,0.00529940519481897,0.00493975775316358,0.0143253924325109,0.0182842966169119,0.00492833275347948,0.00116543157491833,0.00208847760222852,0.00127227208577096,0.00117679627146572,0.0010990530718118,0.00108396471478045,0.00175433943513781,0.00203517079353333,0.00282048876397312,0.00822119135409594,0.00263078394345939,0.00141910591628402,0.00192295201122761,0.00138450774829835,0.00150411960203201,0.00203976663760841,0.00228403392247856,0.00198729173280299,0.00215014256536961,0.00130972138140351,0.00220602191984653,0.00217434973455966,0.00222587212920189,0.00128076423425227,0.003685612231493,0.00424104742705822,0.0036343524698168,0.00437509920448065,0.00102109019644558,0.0035608890466392,0.00179338501766324,0.00302712712436914,0.00102148356381804,0.00169268297031522,0.00118136254604906,0.00139748852234334,0.00162950914818794,0.0013056379975751,0.00101929879747331,0.00140442245174199,0.00219127861782908,0.00270291790366173,0.00329401204362512,0.00326476339250803,0.00271518155932426,0.00183340918738395,0.00250248983502388,0.00276692444458604,0.00340437423437834,0.00259506911970675,0.00460862275213003,0.00593590689823031,0.00691225472837687,0.00340974167920649,0.00509058265015483,0.00112110888585448,0.00121387781109661,0.0169682279229164,0.00548749091103673,0.00543259875848889,0.0201374050229788,0.0169682689011097, 0.0109495837241411,0.00279454910196364,0.00127399724442512,0.00247281650081277,0.00270849862135947,0.00316046690568328,0.00136727222707123,0.00219548284076154,0.00320045603439212,0.00428038323298097,0.00147910148371011,0.00178130087442696,0.00333713716827333,0.0066437222994864,0.0122147183865309,0.0129707679152489,0.00197774101980031,0.00191754603292793,0.00388525449670851,0.00632278667762876,0.00660149846225977,0.00896979309618473,0.00456717424094677,0.00206927349790931,0.00231582089327276,0.00252133025787771,0.00406703725457191,0.00486808829009533,0.00824273750185966,0.00917720515280962,0.00850125029683113,0.0078301252797246,0.00287978257983923,0.00298473541624844,0.00218153605237603,0.00340549414977431,0.00411564903333783,0.00403880747035146,0.00348933646455407,0.00343293184414506,0.0105488328263164,0.0172855090349913,0.0181334689259529,0.017433799803257,0.01199746504426,0.00992203690111637,0.00504820328205824,0.00421494618058205,0.0042849900200963,0.00263979216106236,0.00343404896557331,0.00158844341058284,0.00203547044657171,0.00423127179965377,0.00304207019507885,0.00291611929424107,0.00767210964113474,0.00936917960643768,0.00764511292800307,0.00547787873074412,0.00499632721766829,0.00369138456881046,0.00168789469171315,0.00615179724991322,0.0075200037099421,0.00723410304635763,0.00540610775351524,0.0049501764588058,0.00335015472956002,0.00170559796970338,0.0010561659000814,0.00194478419143707,0.0029250062070787,0.00340850092470646,0.00362419104203582 } Transform: *16 { a: 0.255589736853964,-0.0564818010109381,-0.965134033467747,0,0.191954145948709,0.981381637988871,-0.00659877056532754,0,0.94753756318427,-0.183574891667538,0.261673019249778,0,-6.70568177723435,2.10466317765816,9.65255217683966,1 } TransformLink: *16 { a: 0.255589751837361,0.191954157201607,0.947537618731615,0,-0.0564818092528819,0.981381781194155,-0.183574918455175,0,-0.965134018668391,-0.00659877046414166,0.261673015237287,0,11.1487851983253,-0.7145996278846,4.21443668153796,1 } } Deformer: 135198208, "SubDeformer::Cluster_R_Ball", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *793 { a: 3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,7592,7593,7647,7727,7728,7729,7730,7731,7732,7734,7735,7737,7740,7741,7743,7744,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7758,7759,7760,7762,7763,7764,7765,7766,7768,7769,7770,7771,7772,7775,7776,7777,7778,7779,7780,7781,7782,7824,7825,7826,7827,7829,7839,7840,7841,7842,7843,7844,7845,7846,7857,7858,7871,7872,7874,7875,7876,7877,7879,7880,7881,7901,7902,7904,7905,7906,7907,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7985,7986,7987,7988,7989,7990,7991,7994,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064,8065,8066,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8090,8095,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, 8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,9873,9879,9880,9895,9896,9897,9898,9899,9900 } Weights: *793 { a: 0.123883679509163,0.0943474769592285,0.134961158037186,0.162639766931534,0.0697063133120537,0.108251556754112,0.0524033196270466,0.0847631022334099,0.0409382507205009,0.0650418773293495,0.14041543006897,0.113288789987564,0.118082284927368,0.148398548364639,0.0891185849905014,0.0906334742903709,0.0656642466783524,0.0616054534912109,0.198496952652931,0.205138891935349,0.167858138680458,0.198637783527374,0.178409427404404,0.143416181206703,0.18131497502327,0.159762680530548,0.166233062744141,0.0380784012377262,0.0574136562645435,0.0774901211261749,0.0586475282907486,0.0280960090458393,0.0517396591603756,0.0539015904068947,0.033189844340086,0.0585433878004551,0.0591700300574303,0.0535746328532696,0.0552171356976032,0.0553255528211594,0.0569242052733898,0.0996541529893875,0.0730480924248695,0.0954719707369804,0.114045724272728,0.0943200141191483,0.118832118809223,0.142830416560173,0.142114534974098,0.121966376900673,0.0975252166390419,0.118137270212173,0.0873210653662682,0.0790054202079773,0.179913774132729,0.21073853969574,0.212490528821945,0.293317466974258,0.356615632772446,0.324366360902786,0.26684308052063,0.339021861553192,0.41007000207901,0.326832801103592,0.424576759338379,0.293492197990417,0.417733579874039,0.282556712627411,0.249511927366257,0.288817554712296,0.32280421257019,0.255000025033951,0.309341222047806,0.199754640460014,0.272426426410675,0.245370149612427,0.284887552261353,0.258011996746063,0.239316925406456,0.221955522894859,0.255657911300659,0.181189134716988,0.155432507395744,0.362362623214722,0.259469360113144,0.408041507005692,0.289074867963791,0.169036522507668,0.237904220819473,0.189767897129059,0.131405979394913,0.268256455659866,0.205114126205444,0.135546118021011,0.123717814683914,0.170050665736198,0.143152132630348,0.196216776967049,0.143190503120422,0.239085361361504,0.249148860573769,0.219918861985207,0.191812127828598,0.10781441628933,0.196348652243614,0.191489323973656,0.0791347473859787,0.17438517510891,0.0512946061789989,0.143159300088882,0.032307855784893,0.104688346385956, 0.0235143061727285,0.144969567656517,0.178616628050804,0.0947948545217514,0.0392751023173332,0.0221151169389486,0.0722370743751526,0.0144961653277278,0.0750427767634392,0.0181457158178091,0.0943982899188995,0.0716638267040253,0.0967202931642532,0.317489057779312,0.347536385059357,0.404977738857269,0.417175382375717,0.40199014544487,0.27864933013916,0.242633402347565,0.206443920731544,0.236668929457664,0.348675906658173,0.388408333063126,0.18049268424511,0.163328364491463,0.0857354551553726,0.11523699015379,0.061653770506382,0.0454688034951687,0.0353203043341637,0.211448967456818,0.185158059000969,0.218788504600525,0.154455900192261,0.0504671223461628,0.0322298295795918,0.0230359863489866,0.0282043348997831,0.0824511051177979,0.11091822385788,0.130749419331551,0.144796341657639,0.329870730638504,0.362595438957214,0.416694194078445,0.432004392147064,0.427564829587936,0.253307223320007,0.287334799766541,0.259040862321854,0.227359682321548,0.369799613952637,0.41771399974823,0.1991196423769,0.175765603780746,0.220586806535721,0.146419927477837,0.0011718375608325,0.00114911294076592,0.00105914357118309,0.0153474509716034,0.0122399032115936,0.0149848219007254,0.0193942412734032,0.00106044148560613,0.00466891191899776,0.00221512629650533,0.00135503942146897,0.00115020526573062,0.00108056294266135,0.00109034439083189,0.00207694387063384,0.00295530282892287,0.00277027534320951,0.00150005717296153,0.00204197620041668,0.00146311393473297,0.00159478781279176,0.00215208088047802,0.00239511393010616,0.0021059256978333,0.00226955814287066,0.00137146469205618,0.00229739327915013,0.00227435654960573,0.0023139282129705,0.00133925990667194,0.00385013013146818,0.00441626738756895,0.0037888044025749,0.00454087881371379,0.00103383034002036,0.00362318963743746,0.00181189889553934,0.00308391591534019,0.00103167560882866,0.00170974782668054,0.00116305600386113,0.00138921814505011,0.00162649981211871,0.00129095150623471,0.00543705886229873,0.00679957866668701,0.0100675327703357,0.00103019457310438,0.00853319466114044,0.0043475697748363,0.00240783137269318, 0.00915769953280687,0.00508745852857828,0.0159079786390066,0.00173971964977682,0.00541352434083819,0.00204087933525443,0.0211878269910812,0.0177388042211533,0.0112950056791306,0.00260227895341814,0.00253498554229736,0.00296481139957905,0.00295078824274242,0.00396276684477925,0.0129204485565424,0.0137165049090981,0.00469488883391023,0.00100137270055711,0.0065825660713017,0.00890141911804676,0.00356663577258587,0.00293150614015758,0.00308286678045988,0.00346310110762715,0.00427238317206502,0.00420571630820632,0.00364589900709689,0.0032017685007304,0.0104739516973495,0.0177482850849628,0.0189338531345129,0.0184334814548492,0.0127803916111588,0.0105676529929042,0.00754354521632195,0.00418343627825379,0.00245327991433442,0.00314569845795631,0.00392649602144957,0.00278305215761065,0.00265763350762427,0.00431641656905413,0.00809456873685122,0.00984568707644939,0.00806601252406836,0.00101106090005487,0.00756782200187445,0.0368285477161407,0.0192880965769291,0.0506718531250954,0.0835918933153152,0.0164523981511593,0.00966632552444935,0.0230161529034376,0.039513636380434,0.0122059863060713,0.0210127718746662,0.0151477660983801,0.0165873803198338,0.0147293750196695,0.0106907756999135,0.00464768800884485,0.00788442604243755,0.00767996162176132,0.0167933069169521,0.0118056312203407,0.00999381858855486,0.0271462593227625,0.0211340580135584,0.0145684257149696,0.00375504838302732,0.00230848137289286,0.00293680862523615,0.010424873791635,0.014182603918016,0.00704707158729434,0.0299934018403292,0.0809231996536255,0.066321037709713,0.00189393514301628,0.00199611950665712,0.00235355575568974,0.0124866124242544,0.107536680996418,0.129518747329712,0.162986248731613,0.162497103214264,0.0756997019052505,0.0983090773224831,0.105313710868359,0.109496608376503,0.0254768114537001,0.0736321210861206,0.0109011856839061,0.00591598078608513,0.00877636671066284,0.00925613380968571,0.0185419302433729,0.00858956202864647,0.0360243357717991,0.0613816678524017,0.138574033975601,0.123591922223568,0.161576002836227,0.163661375641823,0.0621361434459686, 0.0834685415029526,0.0823424607515335,0.0064245336689055,0.00196025124751031,0.0144897121936083,0.00350574846379459,0.0897016227245331,0.141786113381386,0.00172246783040464,0.0016761178849265,0.00164095626678318,0.00172228494193405,0.0151265971362591,0.0108278458938003,0.00930141005665064,0.00738859688863158,0.00444578099995852,0.00279078749008477,0.0034543676301837,0.00593799585476518,0.00181633280590177,0.00264560710638762,0.0021140007302165,0.00326533592306077,0.00226045935414732,0.00158813130110502,0.00125915941316634,0.00140132789965719,0.206268981099129,0.242492392659187,0.216538220643997,0.148466512560844,0.494710594415665,0.494018644094467,0.495431184768677,0.495684057474136,0.491640150547028,0.493156641721725,0.493532657623291,0.492237329483032,0.436618506908417,0.463279128074646,0.385892689228058,0.347750276327133,0.237941667437553,0.215587124228477,0.184324011206627,0.349386662244797,0.119256816804409,0.0809679850935936,0.100759044289589,0.064699612557888,0.100251354277134,0.113563232123852,0.0685979872941971,0.152892902493477,0.156757727265358,0.333477854728699,0.282245606184006,0.410026401281357,0.464278131723404,0.497591882944107,0.497499942779541,0.494036823511124,0.341065794229507,0.3653284907341,0.495653241872787,0.401004016399384,0.499008297920227,0.497864127159119,0.498020023107529,0.496375501155853,0.496211588382721,0.49818554520607,0.496551722288132,0.494357407093048,0.49289858341217,0.492176055908203,0.494054555892944,0.495537310838699,0.495428442955017,0.495201587677002,0.495444416999817,0.493240684270859,0.495095014572144,0.495912224054337,0.495938241481781,0.420695513486862,0.436345547437668,0.342597186565399,0.319157987833023,0.419052869081497,0.300165265798569,0.217813968658447,0.205603912472725,0.208605021238327,0.0836873129010201,0.0971802547574043,0.0761817321181297,0.0662169381976128,0.0635233893990517,0.0789075344800949,0.0527386218309402,0.0531285107135773,0.0510307252407074,0.0495729967951775,0.0662362426519394,0.0636715367436409,0.0335692539811134,0.0344211980700493,0.00413668062537909, 0.00437222234904766,0.0673914477229118,0.0534001886844635,0.0532169044017792,0.00969782378524542,0.115410067141056,0.0894881039857864,0.0497617162764072,0.032301552593708,0.0395700857043266,0.0833647176623344,0.152233555912972,0.277294039726257,0.237761244177818,0.122256495058537,0.495742470026016,0.495044946670532,0.495270699262619,0.466927647590637,0.487584829330444,0.471465349197388,0.446353495121002,0.495112806558609,0.494484156370163,0.494385927915573,0.494777828454971,0.319564700126648,0.226902171969414,0.303202927112579,0.355490446090698,0.142050608992577,0.21855191886425,0.495411992073059,0.494442224502563,0.49536070227623,0.495829224586487,0.496245741844177,0.496983617544174,0.495706379413605,0.378789126873016,0.443236827850342,0.423344552516937,0.402129530906677,0.31354683637619,0.011792303994298,0.00541512854397297,0.19114363193512,0.00818456895649433,0.128277137875557,0.00999050214886665,0.0189298521727324,0.114223763346672,0.039101779460907,0.440741151571274,0.37799397110939,0.167534962296486,0.0324885621666908,0.0405340492725372,0.00877480115741491,0.00628257403150201,0.0294434521347284,0.00551354372873902,0.00340866087935865,0.00176740461029112,0.00323679530993104,0.00361410598270595,0.00155600626021624,0.00130048347637057,0.00259213359095156,0.00172662572003901,0.00157643074635416,0.00248960056342185,0.00115798017941415,0.00232840934768319,0.00483620120212436,0.00623246934264898,0.00413015903905034,0.00187641440425068,0.00264824088662863,0.49486768245697,0.00406678952276707,0.00307907885871828,0.0669666975736618,0.49384468793869,0.494718581438065,0.488878607749939,0.494964092969894,0.480413794517517,0.488142460584641,0.497017651796341,0.486521184444427,0.499210506677628,0.498955190181732,0.499020576477051,0.498609274625778,0.498691350221634,0.497828960418701,0.498702019453049,0.49905851483345,0.00422780960798264,0.0673873871564865,0.10294995456934,0.177105605602264,0.137693867087364,0.395283669233322,0.0561339296400547,0.0122799724340439,0.115378007292748,0.0461952723562717,0.00862376298755407,0.0375786609947681, 0.00586434034630656,0.216012254357338,0.11050571501255,0.0510124005377293,0.0829584822058678,0.494458675384521,0.494277447462082,0.496937960386276,0.116042479872704,0.49787762761116,0.230708613991737,0.0622754171490669,0.498603701591492,0.196535959839821,0.00369277526624501,0.00272378325462341,0.486099720001221,0.00512532843276858,0.0359800010919571,0.155941724777222,0.15468767285347,0.122875675559044,0.292145252227783,0.153312966227531,0.153439074754715,0.327097982168198,0.166516363620758,0.211425349116325,0.210624262690544,0.257879346609116,0.259329915046692,0.245208442211151,0.268495231866837,0.260577201843262,0.214291036128998,0.158475875854492,0.158776104450226,0.147456109523773,0.189878731966019,0.177501514554024,0.140640020370483,0.154655635356903,0.182721480727196,0.122265093028545,0.154412239789963,0.174505144357681,0.18732276558876,0.216400906443596,0.154486611485481,0.199397787451744,0.229595214128494,0.148008167743683,0.186971351504326,0.158650085330009,0.193919911980629,0.235914066433907,0.304533690214157,0.276103556156158,0.203738644719124,0.249767139554024,0.189385861158371,0.232027933001518,0.272078543901443,0.173341989517212,0.143333211541176,0.178553134202957,0.2178645581007,0.17926512658596,0.498079359531403,0.49764558672905,0.493476301431656,0.497497260570526,0.499024957418442,0.498812049627304,0.481438368558884,0.475040018558502,0.499892085790634,0.499295592308044,0.499847054481506,0.49994283914566,0.49948513507843,0.428521871566772,0.300684005022049,0.49810403585434,0.497266590595245,0.498697310686111,0.497886002063751,0.498042225837708,0.485606074333191,0.485793232917786,0.458712071180344,0.499973088502884,0.499091774225235,0.499190449714661,0.4280044734478,0.457346051931381,0.498326450586319,0.494596093893051,0.494365692138672,0.494462668895721,0.494515120983124,0.497997492551804,0.498909473419189,0.499929428100586,0.498976171016693,0.494624406099319,0.497181087732315,0.469323992729187,0.476944506168365,0.415308624505997,0.395580261945724,0.49943020939827,0.499888569116592,0.497349143028259, 0.495646834373474,0.494615614414215,0.497360795736313,0.498536199331284,0.498701572418213,0.490914940834045,0.499821990728378,0.497986912727356,0.468328773975372,0.391963601112366,0.422747701406479,0.482745617628098,0.497819513082504,0.498537451028824,0.499243289232254,0.499773025512695,0.494683772325516,0.494805634021759,0.49482062458992,0.494760543107986,0.497144222259521,0.49457660317421,0.493789881467819,0.49458646774292,0.492286801338196,0.484647452831268,0.479186058044434,0.438782334327698,0.471755683422089,0.431316256523132,0.475486993789673,0.456324309110641,0.479926824569702,0.405071496963501,0.380229324102402,0.42947643995285,0.374703049659729,0.421711415052414,0.402480840682983,0.300346851348877,0.43937224149704,0.450042575597763,0.471916079521179,0.439534783363342,0.489101856946945,0.497698903083801,0.467224955558777,0.477341830730438,0.482211530208588,0.480961859226227,0.408277362585068,0.171835973858833,0.153058439493179,0.143804714083672,0.0037693683989346,0.0362889654934406,0.00525405537337065,0.148268163204193,0.0683703571557999,0.0376599505543709,0.0445618219673634,0.146970078349113,0.188869208097458,0.17760506272316,0.00288582826033235,0.00225157150998712,0.0017316211014986,0.0013067068066448,0.00132562627550215,0.00190999440383166,0.00226044724695385,0.00784262921661139,0.0112750744447112,0.0173067096620798,0.00262815481983125,0.00226460210978985,0.00602485751733184,0.00349772814661264,0.00292510050348938,0.00269699073396623,0.0135289803147316,0.0103104831650853,0.00794037710875273,0.00787316635251045,0.00202853791415691,0.00213485443964601,0.00454540317878127,0.00540296733379364,0.040046576410532,0.0651715472340584,0.0666946023702621,0.0855960696935654,0.080752395093441,0.125129029154778,0.00638666842132807,0.0207076445221901,0.00387939042411745,0.00382913649082184,0.0012292229803279,0.00178197433706373,0.0018641147762537,0.0013992638560012,0.00126466911751777,0.00674807792529464,0.00701502803713083,0.00686094397678971,0.00567869283258915,0.00544988224282861,0.007870820350945,0.0157495457679033, 0.00552460039034486,0.00631229672580957,0.00680046249181032,0.00684428494423628,0.00933710113167763,0.0106857251375914,0.00361652881838381,0.00433071563020349,0.00556861003860831,0.00640778755769134,0.00623950036242604,0.00100142590235919,0.00236925226636231,0.00223838444799185,0.00389867951162159,0.00501776812598109,0.00396161805838346,0.00699444627389312,0.00672429939731956,0.00506741041317582 } Transform: *16 { a: -0.255586654162104,0.0564839064701468,-0.965134710701333,0,0.191954875668087,0.981381489803619,0.00660131789598903,0,0.947538261415516,-0.183575097990927,-0.261670390290557,0,-6.68650920068584,2.10042577148028,-9.58014889758636,1 } TransformLink: *16 { a: -0.255586662104494,0.19195488163311,0.947538290860393,0,0.0564839134277405,0.98138161068856,-0.183575120603402,0,-0.965134729663024,0.00660131802568334,-0.261670395431512,0,-11.0737572515755,-0.714569534984361,4.21446806383396,1 } } Deformer: 135199344, "SubDeformer::Cluster_Head", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *3584 { a: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,125,126,127,129,130,131,132,133,134,135,136,140,141,142,145,146,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552, 553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053, 1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463, 1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1732,1733,1734,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1800,1801,1802,1803,1804,1805,1806,1807,1808,1810,1811,1813,1814,1815,1816,1821,1822,1823,1825,1827,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913, 1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326, 2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738, 2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148, 3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3409,3410,3411,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3465,3466,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581, 3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5303,5304,5305,5306,5309,5314,5319,5371,5372,5373,5380,5382,5383,5403,5730,5802,5803,5804,5811,5813,5814,6487,10083,10482 } Weights: *3584 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,1,1,1,0.999769389629364,0.997745931148529,0.997007310390472,0.999988436698914,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999866485595703,0.999976813793182,0.99999737739563,1,1,1,1,1,0.348414063453674,0.296818614006042,0.999929845333099,0.992260038852692,0.986605584621429,0.999526262283325,1,1,1,1,1,0.996576905250549,0.999679207801819,0.462966173887253,0.405808210372925,0.933403789997101,1,1,1,0.99883645772934,1,1,1,0.999987483024597,0.999998390674591,0.997568309307098,0.99861341714859,1,1,0.99993509054184,0.305174469947815,0.335230082273483,0.277147561311722,0.357239037752151,0.382363498210907,0.40365344285965,0.362462073564529,0.300854951143265,0.246836096048355,0.32552570104599,0.262969672679901,0.284158438444138,0.215933471918106,0.345835387706757,0.960699081420898,0.880206704139709,0.938635408878326,0.956660568714142,0.877048552036285,0.876426160335541,0.886230409145355,0.936781227588654,0.95302551984787,0.884782373905182,0.946100473403931,0.892827928066254,0.450425446033478,0.878755748271942,0.932442188262939,0.37913653254509,0.407037675380707,0.415984898805618,0.259030967950821,0.293490946292877,0.417256742715836,0.340245813131332,0.36240941286087,0.411219507455826,0.977936863899231,0.967643797397614,0.892272353172302,0.968207836151123,0.960449576377869,0.945745766162872,0.987939298152924,0.982316374778748,0.978387355804443,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.996214628219604,0.988707542419434,0.986609518527985,0.995532214641571,0.973644018173218,0.969042003154755,0.9631507396698,0.984441816806793,0.994842827320099,1,0.999999821186066,1,0.999999701976776,1,1,0.999998331069946,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999997019767761,0.999997437000275,0.999985814094543,0.999905824661255,0.999983549118042,0.9999960064888,0.999999046325684,0.999969482421875,0.999965369701386,0.999825537204742,0.999794542789459, 0.999993860721588,0.999995291233063,0.999958753585815,0.999951481819153,0.999996781349182,0.999967575073242,0.999789297580719,0.999749004840851,0.999708235263824,0.999999642372131,0.99999988079071,0.999999523162842,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.990536689758301,0.992207109928131,0.996704638004303,0.99727863073349,0.998484134674072,0.994708299636841,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,0.999996781349182,0.999999821186066,0.999968290328979,0.999798536300659,0.989763081073761,0.996523678302765,0.976127862930298,0.998997271060944,0.998805344104767,0.998647511005402,0.999073028564453,0.999054372310638,0.999225318431854,0.999512612819672,0.999987304210663,0.999918818473816,0.993115425109863,0.987185597419739,0.999241054058075,0.997129917144775,0.131196677684784,0.925822734832764,0.907572150230408,0.972595036029816,0.861486613750458,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.420260190963745,0.554195642471313,0.489969193935394,0.700962424278259,0.748266160488129,0.622093796730042,0.301548063755035,0.349999994039536,0.150000005960464,0.25,0.100000001490116,0.025000000372529,0.25,0.25,0.837520956993103,0.837526202201843,0.76023530960083,0.882980525493622,0.899999976158142,0.685573697090149,0.557134389877319,0.349999994039536,0.620917081832886,0.899999976158142,0.997061192989349,0.999017417430878,0.990700721740723,0.997014939785004,0.992497980594635,0.997990012168884,0.998118996620178,0.992173731327057,0.977280378341675,0.977026402950287,0.951838552951813,0.944853127002716,0.893962979316711,0.966057240962982,1,0.974265038967133,0.941445469856262,0.889961361885071,0.999450743198395,0.999087393283844,0.989352107048035,1,0.997996926307678,0.989772439002991,0.997625052928925,0.999521493911743,0.961557149887085,0.985031843185425,0.995130717754364,0.966040730476379,0.940969944000244,0.908502101898193,0.838931620121002,0.875945210456848,0.919987916946411,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355, 0.999999642372131,0.999997198581696,0.999987363815308,1,1,1,1,1,1,1,1,1,1,1,0.996123313903809,0.951491415500641,0.961500227451324,0.987795472145081,0.986461222171783,0.99991911649704,0.855317890644073,0.743749916553497,0.663854837417603,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,0.999999821186066,0.999999940395355,1,0.999998986721039,0.999999701976776,0.999999940395355,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.997026085853577,0.991087913513184,0.998008549213409,0.990822672843933,0.978451430797577,0.994244694709778,1,1,0.999999403953552,0.999996662139893,0.999999523162842,0.999999940395355,0.999987065792084,0.999997794628143,0.999999761581421,0.999999940395355,1,0.996043920516968,0.997313916683197,0.999570369720459,0.99914413690567,0.999780535697937,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.874475002288818,0.859783411026001,0.976130604743958,0.985742092132568,0.951068341732025,0.966143608093262,0.9924276471138,0.98901629447937,0.992559731006622,0.996199905872345,0.915497481822968,0.930785715579987,0.953211188316345,0.943714499473572,0.974188923835754,0.979826152324677,0.853430390357971,0.909686684608459,0.832501828670502,0.89535117149353,1,1,1,1,1,1,1,0.999999821186066,1,1,1,0.999999046325684,1,1,1,1,1,1,1,1,0.999951481819153,0.999991178512573,0.999996721744537,0.999953746795654,1,1,1,1,1,1,1,1,0.999999225139618,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999994158744812,0.999984204769135,0.999999582767487,0.999955058097839,0.999902665615082,0.999990284442902,0.999941945075989,0.999751687049866,0.999426007270813,1,1,1,1,0.999009013175964,0.996857404708862,0.999781668186188,0.987691402435303,1,1,1,1,1,1,0.99999988079071,1,0.99999988079071,1,0.999999046325684,0.99999988079071,1,1,1,1,1,1,0.984471559524536,0.989188969135284,0.993452608585358,0.997096359729767,0.994560599327087,0.991468369960785,1,1,1,1,1,1,1,0.999518752098084,1,1,1,0.999995589256287,0.999955594539642,0.999967575073242,0.999997019767761, 0.999997854232788,0.999779105186462,0.999907195568085,0.9999880194664,0.998803615570068,0.999539971351624,0.980000019073486,0.980000019073486,0.980000019073486,0.980000019073486,1,0.999998331069946,0.999999940395355,0.99997866153717,0.999966144561768,0.999997615814209,0.999999940395355,0.999984562397003,0.999997019767761,0.999944269657135,1,1,1,1,0.996774792671204,0.974485635757446,0.980147957801819,0.997989237308502,0.999999701976776,1,1,1,0.99866509437561,1,1,1,1,1,1,0.999999523162842,0.999999523162842,1,1,1,1,0.988265216350555,0.989666819572449,0.999395608901978,0.999032855033875,0.999645292758942,0.999818742275238,1,1,1,0.994995176792145,0.999091386795044,0.99800705909729,0.952490627765656,0.416576504707336,0.347003281116486,0.345246940851212,0.417088449001312,0.944247424602509,1,1,1,0.949999988079071,0.899999976158142,0.899999976158142,0.999464333057404,0.999308705329895,0.999829411506653,0.999677062034607,0.997972846031189,1,1,1,1,0.999999344348907,0.999998927116394,0.999999940395355,0.999999940395355,1,1,1,1,1,1,1,0.999999821186066,0.999999582767487,0.999997854232788,0.999997019767761,0.999984860420227,0.999987363815308,0.999999344348907,1,1,1,1,1,1,1,0.999996244907379,0.9999680519104,1,1,1,0.999999105930328,1,1,0.459157198667526,0.988020479679108,0.943029761314392,0.459152907133102,1,1,0.998800873756409,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999997913837433,1,1,0.999998986721039,0.999984979629517,1,1,1,1,1,0.999965012073517,0.999940872192383,0.336572200059891,0.393645137548447,0.395924478769302,0.337656915187836,1,1,0.999783635139465,0.999759078025818,1,1,0.800000011920929,0.800000011920929,0.535878419876099,0.627997994422913,1,1,0.99994820356369,0.999838650226593,0.999496340751648,0.999844312667847,0.998620271682739,0.920523047447205,0.908557653427124,1,1,0.999999940395355,0.999999940395355,1,0.993643939495087,0.989085495471954,0.992528975009918,0.995644688606262,0.992834329605103,0.997095108032227,0.999972522258759,0.999994337558746,0.999965131282806,0.999850511550903,0.999999761581421,0.99986720085144,0.999546825885773, 0.999962270259857,0.999987840652466,0.999996244907379,0.999980807304382,0.999827742576599,0.999969124794006,0.999980330467224,0.99982076883316,0.999875783920288,0.998700678348541,0.999732792377472,0.999924659729004,0.999531447887421,1,1,0.999959707260132,0.999996244907379,0.999989688396454,0.587577700614929,0.5,0.55103325843811,0.449999988079071,0.349999994039536,0.449999988079071,0.802620470523834,0.994896531105042,1,1,1,1,1,1,1,0.999259829521179,0.998212277889252,0.996332228183746,0.998884201049805,0.998849451541901,1,1,1,1,1,0.280946999788284,0.997190296649933,0.998100638389587,0.99994432926178,0.999985456466675,0.912754893302917,0.968181848526001,0.87903243303299,0.943862676620483,1,1,0.286551505327225,0.899999976158142,0.899999976158142,1,1,1,1,1,1,1,1,1,0.75,0.727270424365997,0.99253249168396,0.969400703907013,0.999407887458801,0.996963143348694,1,0.999822497367859,0.999152302742004,0.999869823455811,0.999400675296783,1,1,0.999988973140717,0.600000023841858,0.604558944702148,0.600000023841858,1,1,1,1,0.999998569488525,0.999998807907104,0.999997854232788,0.999794840812683,0.999966740608215,0.999977707862854,0.998860716819763,0.999999642372131,0.99999612569809,0.993585109710693,0.300000011920929,0.25,0.5,0.449999988079071,0.550000011920929,0.699999988079071,1,0.999955832958221,0.999805808067322,0.999777317047119,0.999945402145386,0.999703824520111,0.999917566776276,1,0.984215021133423,0.954994142055511,0.988196074962616,1,1,0.999999642372131,1,0.999994695186615,0.999999761581421,0.999994874000549,1,1,0.999999582767487,0.999995172023773,0.999970853328705,1,1,1,0.999999582767487,0.986238956451416,0.988411843776703,0.441835135221481,0.933162808418274,0.947231888771057,0.424471318721771,0.348979592323303,0.999981462955475,0.999907732009888,1,0.999968230724335,0.999855399131775,0.999944865703583,0.999999642372131,0.999989092350006,0.970000028610229,0.99187308549881,1,1,1,1,1,1,0.99809867143631,0.770597636699677,0.795691609382629,0.999999761581421,0.999998569488525,0.99999862909317,1,0.998847723007202,0.99910581111908, 0.999994575977325,0.999991953372955,0.999996244907379,0.99998539686203,0.999957919120789,1,1,0.970000028610229,1,0.999999046325684,1,1,0.902129173278809,0.899999976158142,1,1,0.999837577342987,0.999737501144409,1,0.999938607215881,0.999995172023773,1,1,0.999913096427917,0.999415576457977,0.997944831848145,0.999560117721558,0.999930918216705,0.324698805809021,0.411464750766754,0.980888724327087,1,1,0.999808788299561,0.980815947055817,0.212126016616821,0.267991691827774,0.283018052577972,0.23473933339119,1,0.998749792575836,0.906330645084381,0.953685879707336,0.943308174610138,1,1,1,0.997312426567078,0.991603791713715,1,0.449999988079071,0.449999988079071,0.699999988079071,0.958194732666016,0.983917653560638,0.980177938938141,0.999990999698639,0.999989449977875,0.999405801296234,0.999907672405243,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.959780633449554,1,1,0.999953508377075,0.999985635280609,0.999996602535248,0.99726277589798,0.999643564224243,1,1,1,1,1,0.999996721744537,0.999999105930328,1,0.999999821186066,0.764749228954315,0.999882757663727,0.999713063240051,0.99859493970871,0.999958097934723,0.999601244926453,0.999603807926178,0.999942004680634,0.999990224838257,0.999992668628693,1,1,1,0.793075084686279,0.715351104736328,0.999799132347107,0.99924623966217,0.997733950614929,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999988198280334,0.999999105930328,0.999990522861481,0.999999225139618,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999998092651367,1,0.999984800815582,0.999993324279785,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.400000005960464,0.5,0.548623442649841,0.100000001490116,0.200000002980232,0.449999988079071,0.5, 0.600000023841858,0.649999976158142,0.649999976158142,0.408688962459564,0.28953355550766,1,0.999999582767487,0.99999862909317,0.999980986118317,0.999694406986237,0.998330652713776,0.999876379966736,0.999770939350128,0.998444676399231,1,1,0.84945410490036,0.797120571136475,0.699999988079071,0.994182348251343,0.988083004951477,0.78735876083374,0.760871648788452,0.636389255523682,0.687809228897095,0.698961198329926,0.661260545253754,0.850000023841858,0.629232227802277,0.649999976158142,0.600000023841858,0.492218673229218,0.552437007427216,0.5,0.400000005960464,0.429196774959564,0.452822148799896,0.0500000007450581,0.0500000007450581,0.0199999995529652,0.0199999995529652,0.100000001490116,0.100000001490116,0.493190944194794,0.699999988079071,0.899999976158142,0.999776363372803,1,1,1,1,1,1,0.648829102516174,0.844642460346222,0.899999976158142,0.949999988079071,0.899999976158142,0.949999988079071,0.919702291488647,0.94857931137085,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,1,1,1,0.999999701976776,0.999998152256012,0.999993979930878,0.999989688396454,1,1,1,1,0.99999737739563,0.999999642372131,1,1,1,1,0.999999821186066,0.999999344348907,0.99999862909317,1,1,1,1,1,1,1,1,1,1,1,0.999931156635284,0.75,0.699999988079071,0.999999761581421,0.784333109855652,0.970308423042297,0.989005148410797,0.997170150279999,1,0.876214146614075,0.970000028610229,1,1,0.989500880241394,0.965273976325989,0.825668215751648,0.708643436431885,0.860360324382782,0.909061014652252,1,1,1,1,1,1,0.248748660087585,1,1,1,1,1,1,1,1,1,1,0.999795794487,0.999245464801788,0.974902451038361,0.998980283737183,0.997182130813599,0.999996066093445,0.999979078769684,0.994695901870728,0.992942214012146,0.649999976158142,0.981748402118683,0.994475185871124,0.954283893108368,0.963509917259216,0.967777073383331,0.976799607276917,0.992380619049072,1,0.987087786197662,1,0.999923825263977,0.998186767101288,0.998076796531677,0.999949634075165,0.999882221221924,0.999998688697815,1,1,1,1,0.716326594352722,0.808937311172485,0.893687009811401, 0.945370733737946,1,0.977323114871979,1,0.992401897907257,1,0.999840080738068,0.99998551607132,0.999998927116394,0.999999940395355,0.999539732933044,0.999988734722137,1,0.999999821186066,0.999999225139618,0.999996721744537,0.987210094928741,0.550000011920929,0.449999988079071,0.999996244907379,0.999999821186066,0.25324410200119,0.230199247598648,0.150708064436913,0.8916996717453,0.88851273059845,0.911445736885071,0.418018728494644,0.41413426399231,0.431082844734192,0.434488296508789,0.414009839296341,0.434543877840042,0.450171411037445,0.877384424209595,0.946977913379669,0.92013680934906,0.437811374664307,0.42350047826767,0.405306279659271,0.391090542078018,0.391201049089432,0.436842024326324,1,1,1,1,1,0.999999523162842,0.999994337558746,0.999958217144012,1,1,1,1,0.99999874830246,0.999989211559296,0.999823153018951,0.999800324440002,0.99960058927536,1,0.999998509883881,0.999990463256836,0.999943137168884,0.999967992305756,0.999999403953552,0.999948978424072,0.999943375587463,0.999969303607941,0.999974608421326,1,1,1,1,0.308542907238007,0.364742130041122,0.150000005960464,0.27529102563858,0.302062720060349,0.333193153142929,0.356406271457672,0.380277574062347,0.331978857517242,0.312322288751602,0.247045859694481,0.17919759452343,0.262152791023254,0.327527046203613,0.928611278533936,0.83008337020874,0.840809226036072,0.92774510383606,0.819531679153442,0.828730583190918,0.849848210811615,0.850720882415771,0.92991054058075,0.861673176288605,0.932130098342896,0.868334949016571,0.882246673107147,0.868992269039154,0.368733763694763,0.40806970000267,0.397330462932587,0.312054097652435,0.333123594522476,0.389807045459747,0.949329078197479,0.868522763252258,0.840067327022552,0.935846924781799,0.856897950172424,0.829582154750824,0.975209772586823,0.967662453651428,0.963314354419708,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.995160698890686,0.984562516212463,0.984086155891418,0.994865477085114,0.962004959583282,0.962112188339233,1,1,1,0.999999761581421,1,1,0.999998569488525,0.99999988079071,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,0.99999988079071,0.999997973442078,0.999999701976776,0.999997615814209,0.999988555908203,0.999916911125183,0.999987483024597,0.999996602535248,0.999997317790985,0.999977290630341,0.999970853328705,0.9998539686203,0.999813675880432,0.999994397163391,0.999952673912048,0.999995410442352,0.999959945678711,0.999750435352325,0.999721109867096,0.999999582767487,0.999999701976776,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.985836565494537,0.987700045108795,0.99582427740097,0.996529221534729,0.997900784015656,0.990917503833771,1,1,1,1,1,1,1,1,1,1,0.999999821186066,0.999999761581421,1,1,1,1,1,1,1,1,1,1,0.999996244907379,0.999999761581421,0.999965786933899,0.999783754348755,0.985003352165222,0.995484948158264,0.962019920349121,0.998796164989471,0.998662710189819,0.999032616615295,0.998907327651978,0.999204456806183,0.999488115310669,0.999988734722137,0.999921441078186,0.983880579471588,0.965352714061737,0.99883633852005,0.994391560554504,0.992079377174377,0.972146093845367,0.998622000217438,0.972789764404297,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.649999976158142,0.850000023841858,0.550000011920929,0.850000023841858,0.850000023841858,0.779999971389771,0.460966050624847,0.349999994039536,0.250713586807251,0.5,0.247225999832153,0.200000002980232,0.300000011920929,0.300000011920929,0.850000023841858,0.835897326469421,0.757781624794006,0.889005482196808,0.799687623977661,0.880736887454987,0.852680206298828,0.773330271244049,0.899999976158142,0.657807528972626,0.497373759746552,0.308686256408691,0.535909652709961,0.899999976158142,0.711816906929016,0.993252336978912,0.995189130306244,0.975707173347473,0.988046526908875,0.984564483165741,0.995169043540955,0.995753824710846,0.984138786792755,0.997786045074463,0.985440492630005,0.989416182041168,0.967290282249451,0.955546677112579,0.910428762435913,0.949999988079071,1,0.977843284606934,0.946880638599396,0.95854377746582,0.924271702766418,0.866015911102295,0.892192006111145,0.999153912067413,0.998677670955658,0.989454507827759,0.995999813079834,0.999111652374268,0.997927010059357, 0.99976247549057,0.999900758266449,0.930000007152557,0.968636333942413,0.978482127189636,0.984394371509552,0.965196907520294,0.899999976158142,0.899999976158142,0.899999976158142,0.899999976158142,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.999996662139893,0.999988734722137,0.999970972537994,1,0.999999403953552,0.999999940395355,1,0.999999940395355,0.999999582767487,1,1,1,1,1,0.999894440174103,0.998404622077942,0.999730825424194,0.999733328819275,0.999309360980988,0.999999523162842,0.991441905498505,0.970227301120758,0.978859186172485,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999967992305756,0.999800026416779,0.999064028263092,0.999978423118591,0.999989748001099,1,0.999998867511749,1,1,0.999998033046722,0.999990582466125,0.999997973442078,0.999999642372131,0.999961972236633,0.999991714954376,0.99999862909317,0.999999701976776,1,0.999268352985382,0.998100101947784,0.999813914299011,0.999943375587463,0.999878823757172,0.993770956993103,0.979781270027161,0.991786897182465,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.824844896793365,0.79753452539444,0.925197064876556,0.94998961687088,0.892102301120758,0.926094353199005,0.956209540367126,0.938380777835846,0.948715269565582,0.964846730232239,0.84648585319519,0.884519398212433,0.921480536460876,0.893219888210297,0.915879011154175,0.938445568084717,0.899999976158142,0.913427889347076,0.885498821735382,0.883242189884186,1,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999993503093719,1,1,0.999992609024048,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999973356723785,1,1,1,1,0.999961853027344,0.999647974967957,0.999996960163116,0.997242391109467,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.903084516525269,0.962770581245422,0.979039669036865,0.988998830318451,0.978517055511475,0.968517661094666,1,1,1,1,1,1,1,0.999994218349457,1,1, 1,1,1,1,1,1,1,0.999996185302734,1,0.999996662139893,0.999975204467773,0.969889760017395,0.971092700958252,0.999808013439178,1,1,1,1,1,1,1,1,0.99994158744812,0.999983012676239,0.999860167503357,1,1,1,1,0.991058766841888,0.925504803657532,0.942588448524475,0.99311625957489,0.999996066093445,0.999999403953552,1,1,0.995644509792328,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999119579792023,0.998876392841339,0.999415218830109,1,1,1,1,1,1,0.927903950214386,0.408307909965515,0.338427692651749,0.334506094455719,0.406669586896896,0.911526322364807,1,1,1,0.939685106277466,0.908013582229614,0.882593989372253,0.998012900352478,0.997332811355591,0.999821245670319,0.99934995174408,0.998911142349243,1,1,1,1,1,0.999844431877136,0.99999612569809,0.99999213218689,0.999998986721039,0.999999642372131,0.99999988079071,1,0.999999940395355,1,1,0.999999940395355,1,0.999999701976776,0.999997913837433,0.999988555908203,0.999967694282532,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.455325990915298,0.935487270355225,0.935112237930298,0.462645888328552,1,1,0.996441245079041,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999954044818878,0.999934792518616,0.332305639982224,0.388771086931229,0.394438505172729,0.336643546819687,1,1,1,1,1,1,0.817862629890442,0.888791799545288,0.871996223926544,0.926925122737885,1,1,1,1,1,0.999802231788635,0.999353110790253,0.99868243932724,0.999528646469116,1,0.97871345281601,0.951372623443604,1,1,1,1,1,1,0.992018222808838,0.985607743263245,0.986931025981903,0.992793202400208,0.98271256685257,0.992969512939453,0.999912321567535,0.999967873096466,0.999861121177673,0.999517500400543,0.999994337558746,0.999424636363983,0.998278081417084,1,0.999864637851715,0.999949097633362,1,1,1,1,1,1,1,0.997118413448334,0.999441742897034,0.999845266342163,0.998751521110535,1,1,1,1,1,1,1,0.966132760047913,0.894500434398651,0.933834314346313,0.84791773557663,0.743246674537659,0.811419129371643,0.850000023841858,0.999857187271118,1,1,1,1,1,1,1,0.99671083688736,0.992562532424927,0.985294878482819,0.995045244693756,0.997932732105255,1,1,1,1,1,0.278595566749573, 0.996629595756531,0.997128784656525,0.999779880046844,0.999933123588562,0.999375998973846,0.999950766563416,0.999540448188782,0.999971628189087,1,1,0.28972864151001,0.911683559417725,0.877844750881195,1,1,1,1,1,1,1,1,1,1,0.937691330909729,0.962795853614807,1,1,1,1,1,1,1,1,1,1,1,1,0.847725927829742,0.91228461265564,0.79233855009079,0.871689975261688,1,1,1,1,1,1,1,1,1,1,0.995091438293457,1,1,0.978575766086578,0.418494582176209,0.39224100112915,0.608790159225464,0.550000011920929,0.632516980171204,0.784045279026031,1,0.999818503856659,0.999213695526123,0.999005913734436,0.999743700027466,0.998591482639313,0.999609470367432,1,0.999946653842926,0.999391973018646,0.999967992305756,0.999391973018646,0.994880020618439,0.999391973018646,1,1,1,0.999995410442352,0.999966621398926,0.999999225139618,0.999999225139618,0.999992728233337,0.999965846538544,0.999864935874939,1,1,0.999998986721039,0.999993681907654,0.908143758773804,0.930387914180756,0.429049700498581,0.885662496089935,0.903142273426056,0.408094793558121,0.329227954149246,0.999907255172729,0.999543070793152,1,0.999873816967011,0.999455451965332,0.999873638153076,1,1,0.999391973018646,0.999967992305756,1,1,1,1,1,1,0.999896347522736,0.711599826812744,0.745834589004517,1,1,1,1,1,1,0.999975860118866,0.999959826469421,0.999991416931152,0.999968469142914,0.999915838241577,1,0.981522679328918,0.976607978343964,0.989433944225311,1,0.999967992305756,0.999552011489868,0.999941349029541,0.958241581916809,1,1,0.999773323535919,0.99970531463623,0.994279265403748,0.995593905448914,0.999991178512573,1,1,1,1,1,0.999967992305756,1,1,0.310555666685104,0.397277534008026,0.906521797180176,1,1,1,0.897495031356812,0.209778174757957,0.261431634426117,0.277164131402969,0.231595560908318,1,1,0.999967992305756,1,0.889366984367371,1,1,1,1,0.999633312225342,0.999985694885254,0.763117611408234,0.725181221961975,0.82636034488678,0.99178946018219,0.998883247375488,0.998075246810913,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.861131191253662,1,1,0.999758005142212,0.999929368495941,0.999975681304932, 0.99999988079071,0.998361766338348,1,1,1,1,0.999999582767487,0.999993681907654,0.999998152256012,0.99999988079071,0.999999463558197,0.979020714759827,0.97575169801712,1,1,1,1,1,1,1,1,1,1,1,0.994842290878296,0.983159720897675,0.999033391475677,0.996413946151733,0.990096926689148,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999761581421,1,1,0.999999761581421,1,1,1,1,1,1,1,1,1,1,0.999965131282806,0.999992609024048,0.999973356723785,0.999996185302734,0.999999046325684,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,0.999999046325684,0.999999582767487,1,1,0.999996900558472,0.999976396560669,0.999965965747833,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999999940395355,0.606032192707062,0.702783584594727,0.715117573738098,0.220490634441376,0.292737722396851,0.52182525396347,0.601603031158447,0.616618871688843,0.727132260799408,0.645783305168152,0.784240245819092,0.686429858207703,1,1,1,0.999999165534973,0.999993205070496,1,1,1,1,1,1,0.999985694885254,0.999952256679535,1,1,1,0.932030141353607,0.931214332580566,0.97384238243103,0.765795350074768,0.962967395782471,0.942884683609009,0.896759152412415,0.881946504116058,0.80953049659729,0.856356859207153,0.848113536834717,0.806062936782837,0.866539835929871,0.765458106994629,0.746913552284241,0.694321870803833,0.635266363620758,0.599167943000793,0.657683849334717,0.69309937953949,0.579004049301147,0.497260928153992,0.504618883132935,0.628817796707153,0.100000001490116,0.100000001490116,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.164457678794861,0.14875328540802,0.272260308265686,0.797969460487366,0.866278350353241,1,0.843241333961487,0.999112129211426,0.999932169914246,1,0.99931812286377,0.996939718723297, 0.933620035648346,0.937213599681854,0.927313685417175,0.931612193584442,0.957677364349365,0.981823623180389,0.949999988079071,1,0.949999988079071,0.949999988079071,1,0.965973496437073,0.979378640651703,0.991198360919952,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.999998271465302,0.999995768070221,0.999992251396179,0.999989032745361,1,1,1,1,0.999983668327332,0.999996900558472,1,1,0.999999940395355,0.999999821186066,0.999999523162842,0.999999165534973,0.99999862909317,0.999999940395355,0.999999642372131,1,1,1,1,1,1,1,1,1,0.999670386314392,0.938778817653656,0.850560367107391,1,0.860400438308716,0.988599896430969,0.99865597486496,0.999840021133423,0.963169693946838,0.994880020618439,0.995199978351593,0.996245324611664,0.998159110546112,0.999204456806183,0.999973356723785,0.999239802360535,0.997623980045319,0.96080356836319,0.891220390796661,0.871136009693146,0.989015877246857,0.99062043428421,0.99975597858429,0.999982118606567,1,0.998371005058289,0.996509432792664,1,1,0.559376358985901,1,1,1,1,1,1,1,1,1,1,1,1,0.997700333595276,1,1,0.994149565696716,0.999817132949829,1,0.999771416187286,0.850000023841858,0.998741507530212,0.999592363834381,0.993519484996796,0.986261963844299,0.993080615997314,0.997539460659027,0.999630749225616,0.999588549137115,0.999967992305756,0.968575894832611,1,1,1,1,1,1,1,1,1,1,0.928032338619232,0.976496279239655,0.994863092899323,0.999303340911865,0.999495089054108,0.999927997589111,0.999977767467499,1,1,1,1,1,1,1,1,1,1,1,1,1,0.850000023841858,0.699999988079071,1,1,1,0.235360309481621,0.222527340054512,0.152716189622879,0.839730203151703,0.847859680652618,0.872806251049042,0.404381573200226,0.40144407749176,0.423947304487228,0.427471905946732,0.403210192918777,0.428387820720673,0.841572463512421,0.874131262302399,0.408036857843399,0.38528248667717,0.373308509588242,0.377070516347885,0.424087792634964,1,1,1,1,1,1,1,0.999999284744263,0.999993503093719,0.999957799911499,1,1,1,1,0.999999940395355,0.999999940395355,0.999998092651367,0.999986052513123,0.999738574028015,0.999751091003418, 0.999558866024017,0.999999761581421,0.999997317790985,0.99998539686203,0.999933063983917,0.999951422214508,0.999995470046997,0.999896287918091,1,1,1,1,0.349999994039536,1,1,1,0.686159372329712,0.623571038246155,0.349999994039536,0.214079320430756,1,1,1,1,1,1,1,1,0.999349594116211,1,0.999909162521362,0.949999988079071,0.993878483772278,1,1,0.999986410140991,0.999998867511749,1,0.999993741512299,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.913584053516388,0.871200621128082,0.936014592647552,0.942887365818024,0.817474365234375,0.740597069263458,0.888899803161621,0.878629624843597,0.87686014175415,0.568309545516968,0.932189285755157,0.883029043674469,0.848667085170746,0.871915221214294,0.811980724334717,0.745295226573944,0.777739644050598,0.573302984237671,0.686521828174591,0.337067723274231,0.287424027919769,0.285539090633392,0.255632221698761,0.202617704868317,0.289324581623077,0.913337051868439,0.916339218616486,0.855006694793701,0.938828587532043,0.940479755401611,0.826563715934753,0.790112614631653,0.883481323719025,0.896900475025177,0.687618970870972,0.885863423347473,0.875031530857086,0.854685246944427,0.804443955421448,0.830238461494446,0.631611108779907,0.773356795310974,0.477082967758179,0.393136739730835,0.397931814193726,0.397760272026062,0.328216433525085,0.426256000995636,0.920019030570984,0.960719287395477,0.985030829906464,0.986254632472992,0.856136322021484,0.790562033653259,0.93674647808075,0.819936394691467,0.885690748691559,0.661754369735718,0.976041197776794,0.747037887573242,0.630166888237,0.676613986492157,0.522553384304047,0.569085597991943,0.487244963645935,0.49576610326767,0.485332369804382,0.446525692939758,0.475012540817261,0.427732467651367,0.453264474868774,0.537856459617615,0.969599306583405,0.947482883930206,0.980467319488525,0.976889669895172,0.855967223644257,0.932356476783752,0.814191162586212,0.880587220191956,0.695309996604919,0.73822420835495,0.656001031398773,0.587343633174896,0.543010890483856,0.516286194324493,0.520748317241669,0.518919825553894, 0.481668591499329,0.508216023445129,0.460770845413208,0.484409630298615,0.566373646259308,0.965694129467011,0.921841502189636,0.894006490707397,0.0179339237511158,0.022374426946044,0.0351768396794796,0.0133271468803287,0.0114815225824714,0.051796730607748,0.0770531296730042,0.128365874290466,0.0722857713699341,0.0740104466676712,0.0232857763767242,0.114134430885315,0.0671189278364182,0.0153682315722108,0.0401310659945011,0.128179043531418,0.0737554952502251,0.0775797814130783,0.0229898858815432,0.113985672593117,0.0678060799837112,0.0408220998942852,0.014244195073843,0.0031724120490253 } Transform: *16 { a: 0.0413181715733012,0.0620282951754813,0.997218779229126,0,0.987834248135006,-0.152295242936304,-0.0314563824956635,0,0.149920490642125,0.986386586814641,-0.0675662454229578,0,-63.2896897376797,9.28034499228137,1.65098175999686,1 } TransformLink: *16 { a: 0.0413181779113036,0.987834399663875,0.149920513639184,0,0.0620283045373363,-0.152295265922039,0.986386735688766,0,0.997218784048189,-0.0314563826476766,-0.0675662457494719,0,0.39298057195007,63.9850191893683,0.445964229859337,1 } } Deformer: 133256192, "SubDeformer::Cluster_L_Clavicle", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *960 { a: 140,143,144,148,167,340,342,343,1793,1794,1795,1806,1807,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,2006,2007,2008,2500,2501,2502,2503,2554,2585,2586,2587,2588,2676,2770,2773,2774,2829,2830,2836,2837,2838,2839,3408,3409,3410,3411,3418,3422,3426,3427,3428,3429,3430,3431,3434,3435,3436,3437,3438,3467,3468,3470,3471,3472,3473,3474,3475,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370, 4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5305,5306,5403,5730,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6008,6009,6010,6011,6012,6013,6018,6019,6020,6029,6032,6128,6129,6130,6131,6138,6139,6141,6142,6143,6147,6148,6149,6150,6151,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6172,6175,6176,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6212,6213,6215,6467,6484,6485,6486,6487,6488,6489,6491,6492,6493,6494,6495,10477,10478,10479,10480,10481,10499,10500,10506,10507,10508,10509,10510,10511,10512,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541,10542,10543,10544,10549,10551,10552,10553,10554,10555,10556, 10557,10558,10559,10560,10630,10631,10635,10636,10638,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10682,10683,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739,10740,10741,10742,10746,10747,10748,10749,10750,10751,10754,10755,10756,10758,10761,10762,10763,10764,10765,10766,10767,10768,10769,10770,10791,10792,10793,10794,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10814,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10841,10844,10845,10848,10849,10850,10851,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10873,10875,10878,10882,10883,10884,10885,10886,10891,10892,10893,10894,10898,10899,10900,10901,10902,10903,10904,10905,10906,10907,10908 } Weights: *960 { a: 0.287342876195908,0.218264132738113,0.300880402326584,0.32291778922081,0.127042591571808,0.189787164330482,0.270161539316177,0.318312853574753,0.317722767591476,0.196519017219543,0.112743601202965,0.219398647546768,0.171351626515388,0.521111190319061,0.35480409860611,0.320145130157471,0.543612897396088,0.270305871963501,0.236683264374733,0.193796396255493,0.265648812055588,0.509497165679932,0.496736019849777,0.533007383346558,0.558105051517487,0.235622301697731,0.312426656484604,0.408343434333801,0.344335377216339,0.340542107820511,0.493481904268265,0.251053929328918,0.176417797803879,0.131792828440666,0.531090795993805,0.607681572437286,0.578952074050903,0.508088767528534,0.137959614396095,0.262801229953766,0.252974390983582,0.162508279085159,0.430942058563232,0.502444863319397,0.387218713760376,0.071005567908287,0.103521510958672,0.133009046316147,0.0921264737844467,0.0481603145599365,0.091205820441246,0.0685205608606339,0.0630872771143913,0.0844610333442688,0.117379494011402,0.102523177862167,0.0945545136928558,0.165795803070068,0.157553404569626,0.0984221920371056,0.234691560268402,0.186710864305496,0.143213585019112,0.181670635938644,0.571555435657501,0.300281792879105,0.253574341535568,0.370613515377045,0.62205445766449,0.599633753299713,0.159768491983414,0.158106833696365,0.121347598731518,0.112758591771126,0.147620886564255,0.10937138646841,0.156569451093674,0.191426545381546,0.204657435417175,0.181606948375702,0.119416236877441,0.708175778388977,0.537159204483032,0.341445356607437,0.399679660797119,0.472524672746658,0.557649970054626,0.596433937549591,0.648896038532257,0.312094032764435,0.273928493261337,0.20211586356163,0.253532528877258,0.19913724064827,0.113372690975666,0.144172891974449,0.0597548261284828,0.119243465363979,0.0394293665885925,0.213271751999855,0.288261890411377,0.16110073029995,0.136416658759117,0.331749588251114,0.370512872934341,0.338433563709259,0.311584800481796,0.334039717912674,0.323579847812653,0.297916144132614,0.282470494508743,0.428035527467728,0.430588960647583, 0.428622037172318,0.424005836248398,0.38512909412384,0.430455893278122,0.431900888681412,0.390186578035355,0.304801762104034,0.382831752300262,0.436085969209671,0.370297282934189,0.494224846363068,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.489894092082977,0.49028691649437,0.495027840137482,0.489778876304626,0.49161484837532,0.496164739131927,0.492680281400681,0.492597579956055,0.481758415699005,0.471920698881149,0.489105343818665,0.491601377725601,0.491354584693909,0.485707521438599,0.495073169469833,0.494843244552612,0.466411292552948,0.47412383556366,0.464865773916245,0.482917994260788,0.494209975004196,0.480746239423752,0.427003294229507,0.379820078611374,0.42709743976593,0.462967693805695,0.346141636371613,0.35866567492485,0.429456263780594,0.482946753501892,0.476407021284103,0.278716742992401,0.218594446778297,0.168773606419563,0.240790814161301,0.0902368724346161,0.172832623124123,0.0494015403091908,0.130268275737762,0.186492174863815,0.255184590816498,0.14660407602787,0.306570321321487,0.340423434972763,0.299146622419357,0.27849805355072,0.299457192420959,0.303629398345947,0.284210860729218,0.413726359605789,0.405999809503555,0.419456332921982,0.356164246797562,0.345661550760269,0.408305525779724,0.40659299492836,0.350536346435547,0.312975913286209,0.270987153053284,0.413858473300934,0.341171443462372,0.483744025230408,0.490468919277191,0.488374829292297,0.484011590480804,0.484352439641953,0.49483135342598,0.487460076808929,0.497192651033401,0.487598240375519,0.488094836473465,0.490725487470627,0.476294726133347,0.45472925901413,0.467323541641235,0.480455249547958,0.472929209470749,0.483009994029999,0.491576075553894,0.448032379150391,0.457088500261307,0.446510463953018,0.470288187265396,0.49086919426918,0.465316772460938,0.353975713253021,0.402869999408722,0.403054624795914,0.444430112838745,0.328001022338867,0.316157102584839,0.407167613506317,0.46914541721344,0.460395693778992,0.226573526859283,0.179716765880585,0.246300727128983,0.288273096084595,0.0961756333708763, 0.174234688282013,0.0480747558176517,0.124625325202942,0.0303347427397966,0.10171215236187,0.414591491222382,0.40688768029213,0.410651832818985,0.404483884572983,0.36542534828186,0.323211908340454,0.278422921895981,0.491320610046387,0.489428728818893,0.488226443529129,0.491683721542358,0.492925882339478,0.491198897361755,0.494440972805023,0.493882149457932,0.501135170459747,0.493873596191406,0.456400662660599,0.480663388967514,0.494727551937103,0.212771892547607,0.147338449954987,0.191964328289032,0.256925165653229,0.148505166172981,0.0747698768973351,0.0388709753751755,0.111240945756435,0.386646777391434,0.39567494392395,0.400452464818954,0.335536032915115,0.290832757949829,0.244191065430641,0.491688162088394,0.495783418416977,0.493266344070435,0.483279794454575,0.502431750297546,0.489663749933243,0.504642188549042,0.492314904928207,0.437400162220001,0.468595236539841,0.480583399534225,0.246725380420685,0.195764228701591,0.108041472733021,0.0558412708342075,0.0362572111189365,0.300465404987335,0.34278017282486,0.486127644777298,0.484876960515976,0.487915635108948,0.491282552480698,0.497506499290466,0.49445840716362,0.482423603534698,0.414954781532288,0.425710588693619,0.381416827440262,0.461820185184479,0.162621557712555,0.211802735924721,0.0853544026613235,0.045819204300642,0.266586184501648,0.311163306236267,0.486227840185165,0.490895986557007,0.497843503952026,0.500256538391113,0.475985050201416,0.470192551612854,0.389865875244141,0.352535128593445,0.40158349275589,0.443223685026169,0.344601839780808,0.439949661493301,0.449354231357574,0.600000023841858,0.600000023841858,0.585119128227234,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.5,0.36919179558754,0.374925911426544,0.389459431171417,0.390670835971832,0.414509892463684,0.41056901216507,0.435979396104813,0.42843696475029,0.451957821846008,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858, 0.5,0.353585124015808,0.378713309764862,0.409605801105499,0.435899168252945,0.550000011920929,0.600000023841858,0.649999976158142,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.452943533658981,0.441168695688248,0.441423445940018,0.440933734178543,0.550000011920929,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.5,0.451606303453445,0.449999988079071,0.445196092128754,0.449999988079071,0.5,0.410163074731827,0.550000011920929,0.550000011920929,0.5,0.453456491231918,0.453660607337952,0.454501986503601,0.451309412717819,0.442042887210846,0.411225140094757,0.374216198921204,0.367380231618881,0.350631505250931,0.46471431851387,0.541934013366699,0.541399717330933,0.472214698791504,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540618896484375,0.539543628692627,0.408979505300522,0.403523325920105,0.423235297203064,0.421915978193283,0.440413743257523,0.443479090929031,0.455287665128708,0.461397409439087,0.542557179927826,0.474392086267471,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540664434432983,0.39019450545311,0.413305699825287,0.440004765987396,0.461692869663239,0.493854552507401,0.542806029319763,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.540695428848267,0.492301762104034,0.492998450994492,0.493540436029434,0.493857055902481,0.545637249946594,0.496385663747787,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.600000023841858,0.544318497180939,0.495441734790802,0.380767822265625,0.496274262666702,0.496445864439011,0.541243731975555,0.545268177986145,0.491165548563004,0.492123425006866,0.492635935544968,0.493220061063766,0.492741793394089,0.439888089895248,0.461666733026505,0.438809275627136,0.411170661449432,0.439403742551804,0.406360357999802,0.399927645921707,0.384916067123413, 0.408272355794907,0.437813818454742,0.462262064218521,0.476009368896484,0.473369926214218,0.465719997882843,0.388347536325455,0.390445053577423,0.390155345201492,0.387774527072906,0.32721534371376,0.332227468490601,0.312882304191589,0.265351116657257,0.274931788444519,0.276817619800568,0.295409381389618,0.29927259683609,0.298837125301361,0.303793102502823,0.294210225343704,0.296336442232132,0.274231463670731,0.264867663383484,0.0984181761741638,0.254736602306366,0.25873875617981,0.138245850801468,0.141562297940254,0.263141125440598,0.274412363767624,0.297334283590317,0.302293747663498,0.297444730997086,0.29504469037056,0.292524039745331,0.271924585103989,0.262868225574493,0.187646597623825,0.138774082064629,0.293411880731583,0.272233903408051,0.262759327888489,0.21303403377533,0.138494804501534,0.308960318565369,0.31627756357193,0.32057198882103,0.143520221114159,0.54930967092514,0.558317601680756,0.601410150527954,0.668936431407928,0.859407842159271,0.844669342041016,0.818968653678894,0.689110934734344,0.629467904567719,0.934072911739349,0.90171092748642,0.740257918834686,0.722909212112427,0.772041916847229,0.74228435754776,0.596917271614075,0.570652961730957,0.501783609390259,0.770733416080475,0.685721516609192,0.490369111299515,0.514139831066132,0.591991603374481,0.572175443172455,0.487940400838852,0.503393948078156,0.391505509614944,0.932837843894959,0.920459508895874,0.791873812675476,0.83431601524353,0.484917819499969,0.747351765632629,0.895894348621368,0.781249701976776,0.72469288110733,0.561075389385223,0.520167589187622,0.509442687034607,0.574886918067932,0.491814941167831,0.482179373502731,0.509530603885651,0.609283030033112,0.511695206165314,0.703715860843658,0.614887654781342,0.412589967250824,0.468591123819351,0.200000002980232,0.130821987986565,0.0498344413936138,0.800000011920929,0.5,0.374432504177094,0.139433845877647,0.372645854949951,0.438550859689713,0.249949619174004,0.25,0.688447892665863,0.756752729415894,0.714166462421417,0.638433933258057,0.549879252910614,0.666928946971893,0.527884304523468, 0.548589766025543,0.658684313297272,0.69450855255127,0.0693961083889008,0.180000007152557,0.0581055544316769,0.452420741319656,0.42332199215889,0.236328333616257,0.175878316164017,0.180000007152557,0.501450002193451,0.0872168615460396,0.0472639165818691,0.140358105301857,0.475359320640564,0.481175273656845,0.25,0.253921389579773,0.542810201644897,0.255297660827637,0.25,0.250288337469101,0.110027000308037,0.149569854140282,0.129948511719704,0.163483023643494,0.170433908700943,0.0789583772420883,0.130037143826485,0.0977599322795868,0.3859803378582,0.397739320993423,0.181627526879311,0.170861035585403,0.122231982648373,0.113688245415688,0.0980523452162743,0.113921858370304,0.213507369160652,0.218370392918587,0.218951821327209,0.231220692396164,0.243951767683029,0.233398959040642,0.422404229640961,0.422159910202026,0.222008794546127,0.242377281188965,0.249843165278435,0.353360027074814,0.230180963873863,0.246015608310699,0.238067552447319,0.413277089595795,0.198262080550194,0.249708235263824,0.25,0.25,0.25,0.246774092316628,0.25,0.25,0.25,0.248918384313583,0.242267489433289,0.224540933966637,0.231072202324867,0.312419831752777,0.29113432765007,0.399637073278427,0.600000023841858,0.393271803855896,0.308805286884308,0.310129761695862,0.303165584802628,0.272623211145401,0.312031984329224,0.155365735292435,0.389771282672882,0.398966461420059,0.14198449254036,0.036714855581522,0.374302238225937,0.12066026031971,0.380831450223923,0.353778511285782,0.136191874742508,0.178431421518326,0.13067390024662,0.279977709054947,0.292773634195328,0.25970059633255,0.176739081740379,0.300000011920929,0.300000011920929,0.122005775570869,0.23972974717617,0.222396865487099,0.200173661112785,0.0868332833051682,0.20101198554039,0.365400671958923,0.277413785457611,0.0936562716960907,0.481789469718933,0.236978203058243,0.39022433757782,0.496913224458694,0.497893631458282,0.371885746717453,0.276244431734085,0.45980367064476,0.0648277550935745,0.00409483723342419,0.00100980454590172,0.00202051992528141,0.00632891012355685,0.0247978214174509,0.0295577496290207, 0.008045744150877,0.0131089640781283,0.0208909809589386,0.0764315575361252,0.00398753024637699,0.00538884755223989,0.100000001490116,0.0107455933466554,0.00638314755633473,0.021383011713624,0.00743433879688382,0.0208641234785318,0.0666176676750183,0.100000001490116,0.012950842268765,0.0156243359670043,0.00565479137003422,0.00672947941347957,0.00293202605098486,0.00203574099577963,0.186777889728546,0.123878009617329,0.0835776850581169,0.108076155185699,0.0213416274636984,0.00666187796741724,0.0166008118540049,0.0488587208092213,0.00350723508745432,0.00225304625928402,0.00419815676286817,0.00883233454078436,0.00231246137991548,0.0317243710160255,0.300000011920929,0.300000011920929,0.0762900784611702,0.0403979457914829,0.0416721440851688,0.0470849089324474,0.111286424100399,0.0332397967576981,0.181182488799095,0.00807778630405664,0.0166490729898214,0.0129965776577592,0.0273373015224934,0.0197057314217091,0.00603368505835533,0.103672489523888,0.0565624609589577,0.0216145347803831,0.0167154371738434,0.00300612882710993,0.00544778537005186,0.00598917761817575,0.00195894809439778,0.00142651202622801,0.484894901514053,0.684086501598358,0.718907594680786,0.676065981388092,0.40315368771553,0.556465148925781,0.848726749420166,0.621510863304138,0.0385145246982574,0.0412820167839527,0.0364001467823982,0.016484459862113,0.013350079767406,0.0127451401203871,0.0128253996372223,0.0140470778569579,0.0141159072518349,0.0433820821344852,0.0467647910118103,0.0264780968427658,0.0254385508596897,0.0252509098500013,0.0238212086260319,0.0206959210336208,0.0233588702976704,0.0181094761937857,0.0389366447925568,0.0427717715501785,0.0298443771898746,0.0229412000626326,0.0311520807445049,0.0416259765625,0.0265055652707815,0.0279774852097034,0.0225728377699852,0.052638191729784,0.0411552786827087,0.022190036252141,0.029569573700428,0.0644005686044693,0.0372306294739246,0.0174010694026947,0.0159334260970354,0.0642833635210991,0.0247891172766685,0.0386725217103958,0.0488913655281067,0.0210474915802479,0.0161526277661324,0.0165552590042353,0.0216749012470245, 0.0195208117365837,0.0167216528207064,0.0224301293492317,0.0151196178048849,0.0144087765365839,0.0139210736379027,0.0183347892016172,0.0194267723709345,0.0171091575175524,0.0175132360309362,0.0197858326137066,0.0189218334853649,0.0205828379839659,0.0198940336704254,0.0197188314050436,0.0550209023058414,0.0664688125252724,0.0439060628414154,0.0204747263342142,0.0277326870709658,0.00403420999646187,0.0360795818269253,0.0313406437635422,0.0429699942469597,0.0696650743484497,0.0417818203568459,0.0495671816170216,0.0916373878717422,0.0601081997156143,0.0219621360301971,0.0245194919407368,0.0292192939668894,0.0391875095665455,0.027691051363945,0.0345890782773495,0.0757055059075356,0.048767551779747,0.0649795681238174,0.0988612323999405,0.0283221397548914,0.0221623983234167,0.0295963045209646,0.0308881979435682,0.0275767091661692,0.0283039454370737,0.0218954849988222,0.0213178470730782,0.0215635728091002,0.0382499136030674,0.0279828310012817,0.0203322749584913,0.0206757597625256,0.0208319090306759,0.0254390873014927,0.0176928229629993,0.0229123514145613,0.0227153822779655,0.0223618764430285,0.0181357078254223,0.0191761013120413,0.0245725233107805,0.00946254096925259,0.0106111532077193,0.0123485242947936,0.0248966719955206,0.020134637132287,0.0190518815070391,0.025281023234129,0.0252148434519768,0.021393371745944,0.0203799623996019,0.0214727520942688,0.0261586289852858,0.0101737771183252,0.0134961437433958,0.013369576074183,0.0157628618180752,0.0257200412452221,0.0271620377898216,0.0329086408019066,0.0341657251119614,0.0381906665861607,0.0430698320269585,0.0974766910076141,0.0675418078899384,0.0754710882902145,0.0998940393328667,0.05403833091259,0.0332547575235367,0.0195903498679399,0.0257969200611115,0.0235635377466679,0.0227375086396933,0.0098038949072361,0.0109773771837354,0.0231422260403633,0.0319954268634319,0.0609554350376129,0.0171176232397556,0.0139615209773183,0.00126926240045577,0.00114938686601818,0.0143906706944108,0.0150092467665672,0.00510499672964215,0.00745106535032392,0.00471863150596619,0.011429768987,0.0355809293687344, 0.0355133190751076,0.102013848721981,0.0956157669425011,0.0119818644598126,0.0129090240225196,0.0540297590196133,0.0342668630182743,0.0395372025668621,0.0619741417467594,0.0335602201521397,0.0617258436977863,0.0201867260038853,0.0267706867307425,0.016303826123476,0.0157962460070848,0.0258567780256271,0.0227929409593344,0.0163461975753307,0.0234469547867775,0.0147395962849259,0.023964473977685,0.00104093307163566,0.0163080170750618,0.00983362924307585,0.0199874434620142,0.0222630240023136,0.0186568982899189,0.0195088945329189,0.019377188757062,0.00268315174616873,0.0192961413413286,0.0201760977506638,0.0149978045374155,0.00338341924361885,0.00293034012429416,0.00150685710832477,0.0279272049665451,0.0144925909116864,0.00557977287098765,0.0227816849946976,0.00450336327776313,0.00403442652896047,0.00253123859874904,0.00225223274901509 } Transform: *16 { a: 0.978469015335443,-0.0695892827205353,0.194308144005479,0,-0.198997136937502,-0.0683111362190089,0.977616329180682,0,-0.0547582084883067,-0.995234101286735,-0.0806883993392754,0,10.562256371274,2.41825540251226,-59.2613642964607,1 } TransformLink: *16 { a: 0.978469078077147,-0.19899714969766,-0.0547582119995301,0,-0.0695892830013208,-0.0683111364946372,-0.9952341053024,0,0.194308151836972,0.977616368583021,-0.080688402591381,0,1.34840957734272,60.2019324479208,-1.79660429498372,1 } } Deformer: 135120544, "SubDeformer::Cluster_R_Clavicle", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *563 { a: 94,95,108,109,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,150,163,166,168,169,170,171,172,173,174,175,176,340,341,342,343,829,830,831,832,882,885,914,915,916,917,998,1011,1089,1092,1093,1147,1148,1154,1155,1156,1157,1731,1732,1733,1734,1740,1741,1745,1749,1750,1751,1752,1753,1754,1755,1759,1760,1761,1762,1763,1764,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1824,2006,2008,2557,2689,3470,3471,5305,5306,5320,5321,5322,5323,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397,5398,5399,5400,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5581,5582,5583,5584,5585,5586,5587,5588,5590,5591,5592,5593,5594,5600,5601,5603,5604,5612,5621,5622,5633,5634,5635,5636,5641,5642,5643,5644,5645,5646,5650,5651,5652,5653,5654,5655,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5675,5678,5679,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5704,5705,5706,5707,5715,5723,5726,5727,5728,5729,5730,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,6487,10054,10055,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098,10099,10100,10101,10102,10107,10108,10109,10110, 10111,10113,10114,10115,10117,10118,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10246,10247,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10321,10324,10326,10328,10329,10330,10331,10332,10333,10334,10335,10336,10337,10362,10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10394,10395,10396,10397,10398,10399,10400,10412,10413,10414,10415,10416,10419,10420,10421,10422,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10447,10450,10454,10455,10457,10458,10459,10461,10465,10467,10468,10472,10473,10474,10475,10477,10478,10479,10480,10481,10494,10495,10496,10497 } Weights: *563 { a: 0.0811896696686745,0.106965370476246,0.0439532324671745,0.0603947602212429,0.504491329193115,0.29615181684494,0.257327705621719,0.347705841064453,0.225890830159187,0.189256742596626,0.152579382061958,0.211225852370262,0.314609289169312,0.472719848155975,0.4955133497715,0.511756122112274,0.206776008009911,0.273434907197952,0.348244726657867,0.288756161928177,0.295447260141373,0.389805644750595,0.216608464717865,0.269484579563141,0.52827388048172,0.0651521161198616,0.155393227934837,0.116333171725273,0.364117801189423,0.54840350151062,0.488428503274918,0.321933090686798,0.10997598618269,0.217991501092911,0.203374117612839,0.128395795822144,0.403514206409454,0.434205532073975,0.308789700269699,0.259588360786438,0.0680640563368797,0.10414981842041,0.132307544350624,0.086383655667305,0.0469684451818466,0.0455419532954693,0.0944439843297005,0.0689528957009315,0.0652325302362442,0.0889942720532417,0.124588340520859,0.115054629743099,0.0808641090989113,0.078086256980896,0.145058155059814,0.151040598750114,0.0874453037977219,0.258512765169144,0.197405755519867,0.150129958987236,0.195501983165741,0.583253026008606,0.280665725469589,0.264542937278748,0.415470987558365,0.555991590023041,0.655387282371521,0.678301155567169,0.129091560840607,0.133147850632668,0.102706968784332,0.0976598337292671,0.127154722809792,0.0970341414213181,0.0665765851736069,0.0911675244569778,0.123185187578201,0.153349637985229,0.172009184956551,0.155933886766434,0.093811422586441,0.698477327823639,0.62477844953537,0.645496368408203,0.253713548183441,0.34293207526207,0.384178310632706,0.470083117485046,0.505369603633881,0.447033524513245,0.566069185733795,0.250466287136078,0.13798713684082,0.22524531185627,0.0365451537072659,0.098877839744091,0.125019162893295,0.0778745412826538,0.32728722691536,0.335197657346725,0.548355221748352,0.559520184993744,0.605117619037628,0.66703200340271,0.857504963874817,0.838888585567474,0.817730724811554,0.68658447265625,0.62231719493866,0.930196166038513,0.901579201221466,0.073124073445797,0.0728209540247917, 0.0774632692337036,0.0730397775769234,0.0615610517561436,0.0576975829899311,0.503667175769806,0.0770656988024712,0.691126823425293,0.491523891687393,0.518488049507141,0.600300371646881,0.521051943302155,0.570780634880066,0.485464632511139,0.500299453735352,0.078926146030426,0.932044923305511,0.914662539958954,0.77969491481781,0.83053070306778,0.48119843006134,0.33202987909317,0.733864486217499,0.885810911655426,0.763347387313843,0.714982330799103,0.552891075611115,0.51541668176651,0.505415141582489,0.567674338817596,0.490832775831223,0.479702204465866,0.504714846611023,0.591859996318817,0.507071256637573,0.685161232948303,0.601899802684784,0.278785139322281,0.465399295091629,0.127761036157608,0.295493602752686,0.165520682930946,0.250842660665512,0.241439938545227,0.263491183519363,0.108098432421684,0.25892972946167,0.497192919254303,0.497700780630112,0.676034033298492,0.0745359435677528,0.697876036167145,0.622006893157959,0.539307177066803,0.674886465072632,0.520930409431458,0.541126072406769,0.649991273880005,0.694431722164154,0.384999990463257,0.649999976158142,0.308550924062729,0.450778424739838,0.649999976158142,0.327679842710495,0.241778329014778,0.420805633068085,0.497350841760635,0.073303334414959,0.0860887691378593,0.0952140912413597,0.471008658409119,0.478044956922531,0.497991144657135,0.490312159061432,0.537073493003845,0.498353183269501,0.497871071100235,0.496121853590012,0.191246077418327,0.290554016828537,0.180064454674721,0.224595800042152,0.330453634262085,0.13161201775074,0.176965922117233,0.163933858275414,0.267501980066299,0.275521218776703,0.249476358294487,0.233987867832184,0.209987387061119,0.194429218769073,0.164188459515572,0.192451417446136,0.421390801668167,0.431404799222946,0.430364221334457,0.456319212913513,0.485508620738983,0.463099330663681,0.416302442550659,0.416258484125137,0.438949644565582,0.480661869049072,0.49902668595314,0.243896454572678,0.319553971290588,0.486177712678909,0.331051826477051,0.407012581825256,0.27311584353447,0.497810781002045,0.5,0.498094856739044,0.5,0.344194382429123, 0.349997818470001,0.497277468442917,0.5,0.495895445346832,0.480586707592011,0.442554503679276,0.456413328647614,0.298786699771881,0.280739516019821,0.3919517993927,0.390767812728882,0.384277284145355,0.298110395669937,0.300616472959518,0.293284028768539,0.263502031564713,0.305093467235565,0.150212869048119,0.384823501110077,0.394534796476364,0.134362503886223,0.0351882837712765,0.365925788879395,0.111604079604149,0.366223394870758,0.338921874761581,0.126606851816177,0.169872716069222,0.124539494514465,0.267024546861649,0.284294724464417,0.249173209071159,0.167878016829491,0.074166439473629,0.0663126334547997,0.113084986805916,0.228605255484581,0.218380376696587,0.198807418346405,0.0853831917047501,0.2009536921978,0.361773580312729,0.27582186460495,0.095493271946907,0.478643804788589,0.234572812914848,0.384814769029617,0.495410859584808,0.499167263507843,0.365400642156601,0.270231038331985,0.45518159866333,0.0656886175274849,0.0038784621283412,0.00182033306919038,0.00570681737735868,0.0224756076931953,0.0269702468067408,0.00732538383454084,0.00128690106794238,0.00738434819504619,0.00386704737320542,0.0120105864480138,0.0196159575134516,0.0722305700182915,0.00189907208550721,0.00837074406445026,0.00133265019394457,0.00390737317502499,0.00108838721644133,0.00520020211115479,0.00149579567369074,0.00195087259635329,0.00167434592731297,0.0385287217795849,0.0101689994335175,0.00581388175487518,0.0194021947681904,0.00715417554602027,0.0199089664965868,0.00318020489066839,0.0635750964283943,0.0438726767897606,0.0124826999381185,0.0152434539049864,0.00605776254087687,0.0069635221734643,0.00306702312082052,0.00219031004235148,0.00107819936238229,0.183293163776398,0.123738005757332,0.0837252363562584,0.106336541473866,0.02176827006042,0.00684678554534912,0.0164734870195389,0.0481944680213928,0.00368563714437187,0.00234336918219924,0.00420357985422015,0.00932320952415466,0.00249722274020314,0.0306781362742186,0.0462840646505356,0.042948454618454,0.0715780779719353,0.0368835851550102,0.0379315093159676,0.0431694351136684,0.112874694168568, 0.0348013080656528,0.180167987942696,0.00833920761942863,0.0163257773965597,0.0127486828714609,0.0269198063760996,0.0201910994946957,0.00653758551925421,0.105009749531746,0.0578845925629139,0.0229682829231024,0.0176938530057669,0.00325983925722539,0.00534686958417296,0.00589984748512506,0.00204170658253133,0.00146694935392588,0.0015066540800035,0.00157240615226328,0.0013683115830645,0.481965035200119,0.688069224357605,0.726324617862701,0.680854439735413,0.408174365758896,0.56397271156311,0.856086015701294,0.628196120262146,0.0358021147549152,0.0388568043708801,0.0347223058342934,0.0159178152680397,0.294692695140839,0.121550291776657,0.318417549133301,0.152870550751686,0.0297826658934355,0.0287917274981737,0.0230006705969572,0.0213493201881647,0.021949103102088,0.0226233545690775,0.0245684403926134,0.0207092072814703,0.0198129694908857,0.0292157959192991,0.0285200476646423,0.0244624875485897,0.0285634938627481,0.0266288779675961,0.0233569946140051,0.0230660326778889,0.0223205760121346,0.0235582739114761,0.0270807910710573,0.0252497419714928,0.0205877032130957,0.0210633222013712,0.0520002655684948,0.0519647859036922,0.0151932295411825,0.0169342141598463,0.0237237010151148,0.0229084882885218,0.0212979335337877,0.0211339090019464,0.0157450083643198,0.0149975558742881,0.0140739753842354,0.0225031841546297,0.0182464756071568,0.0170384235680103,0.0186013076454401,0.0150382602587342,0.0126649113371968,0.0126809123903513,0.0219173114746809,0.0171132441610098,0.0192538872361183,0.0219725165516138,0.0210953764617443,0.0230501908808947,0.0233804732561111,0.0214685052633286,0.0210958626121283,0.0274754408746958,0.0225150212645531,0.0507607273757458,0.00324849225580692,0.00230311276391149,0.0205044820904732,0.0195952504873276,0.0208354070782661,0.0230906028300524,0.0224607158452272,0.0257405936717987,0.0201869662851095,0.0517509244382381,0.0203061792999506,0.0184621382504702,0.0202194061130285,0.0262561142444611,0.0242316443473101,0.0248070918023586,0.0258013997226954,0.0232786629348993,0.021582905203104,0.0208789668977261,0.0204930528998375, 0.0211619697511196,0.0254055745899677,0.0262512918561697,0.0226288698613644,0.0245581641793251,0.0239381864666939,0.0214787982404232,0.0214498583227396,0.0205761771649122,0.0259324423968792,0.0252932719886303,0.0207940619438887,0.0208942238241434,0.019823607057333,0.0189799387007952,0.022341238334775,0.0175818745046854,0.021635364741087,0.0208590421825647,0.0202130284160376,0.0228413138538599,0.0187332164496183,0.0222814083099365,0.00721948593854904,0.00893825478851795,0.0122251715511084,0.0131850503385067,0.0238036401569843,0.0233332365751266,0.0189465973526239,0.0196329019963741,0.0217657741159201,0.0186960380524397,0.0192628987133503,0.0228047538548708,0.0188687704503536,0.00966120511293411,0.00806799624115229,0.00595046579837799,0.00591902295127511,0.0232310779392719,0.0264482256025076,0.029419269412756,0.0252193752676249,0.0389464311301708,0.0249736830592155,0.0361362397670746,0.025445282459259,0.0225537400692701,0.0238805040717125,0.0220386572182179,0.0208422690629959,0.020428255200386,0.0189677346497774,0.0206352658569813,0.021261390298605,0.0100880740210414,0.0100587056949735,0.0217400155961514,0.0242703147232533,0.0314539447426796,0.0146723967045546,0.016406362876296,0.00290933577343822,0.00303262821398675,0.0109252370893955,0.00135533628053963,0.0026568693574518,0.0238387305289507,0.023859228938818,0.0229988656938076,0.0269602816551924,0.0106720477342606,0.0104876281693578,0.019563851878047,0.0196315422654152,0.029798885807395,0.0370448529720306,0.0274094771593809,0.0410918444395065,0.0189183801412582,0.020300354808569,0.0153505494818091,0.0133901620283723,0.0227218400686979,0.0189896188676357,0.0139062767848372,0.0196586865931749,0.0152109181508422,0.0214336402714252,0.0111258868128061,0.00999513454735279,0.0197951514273882,0.0215826574712992,0.0487717166543007,0.041760291904211,0.0189418196678162,0.00134728313423693,0.0198628734797239,0.00401673326268792,0.00362365040928125,0.00175487017259002,0.00186694483272731,0.00233244802802801,0.00539519498124719,0.0136201335117221,0.0129918465390801,0.0130262523889542, 0.0141849555075169,0.0142200998961926,0.0060765091329813,0.00598268769681454,0.00254058255814016,0.00413914304226637 } Transform: *16 { a: -0.987461993727725,-0.0695892778200937,0.141690541961846,0,-0.136984517421226,-0.0683111254337173,-0.988214958114558,0,0.0784482095958496,-0.99523410378089,0.0579219836329764,0,7.30754685020744,2.41825467121705,59.8176295206032,1 } TransformLink: *16 { a: -0.987461925929919,-0.136984508016053,0.0784482042097015,0,-0.0695892779054035,-0.0683111255174604,-0.995234105000953,0,0.141690546310218,-0.988214988442108,0.0579219854105573,0,-1.09138372286622,60.2788924737958,-1.63129026859045,1 } } Deformer: 135111200, "SubDeformer::Cluster_L_eye_joint1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *865 { a: 98,99,106,110,151,152,153,154,155,156,157,158,159,160,161,162,164,165,177,178,179,180,181,182,183,184,185,213,214,216,217,218,219,220,291,292,324,326,336,337,750,751,752,754,755,796,797,828,833,883,884,942,943,944,945,946,1000,1053,1087,1088,1090,1091,1149,1153,1162,1201,1746,1747,1748,1756,1757,1758,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960,1961,1962,1964,1991,1992,1993,2002,2003,2005,2009,2010,2011,2012,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2079,2080,2081,2082,2083,2084,2086,2087,2088,2090,2093,2094,2095,2096,2097,2098,2099,2100,2101,2173,2178,2179,2180,2265,2269,2270,2271,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2404,2422,2423,2424,2425,2426,2427,2449,2450,2467,2468,2469,2470,2475,2499,2504,2508,2509,2510,2511,2512,2555,2556,2560,2595,2596,2597,2598,2609,2610,2617,2618,2619,2620,2621,2622,2640,2651,2652,2653,2654,2655,2656,2657,2666,2667,2668,2669,2678,2679,2690,2691,2702,2703,2716,2717,2718,2719,2730,2733,2734,2735,2736,2737,2738,2739,2752,2768,2769,2771,2772,2792,2793,2806,2807,2808,2813,2818,2819,2831,2835,2844,2851,2852,2853,2854,2855,2856,2880,2897,2898,2910,2911,2913,2914,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3230,3235,3236,3237,3238,3239,3240,3241,3242,3244,3245,3247,3248,3249,3314,3315,3317,3318,3319,3321,3322,3323,3324,3325,3329,3330,3331,3332,3333,3334,3338,3339,3342,3355,3358,3362,3363,3365,3366,3367,3368,3372,3383,3384,3385,3403,3404,3423,3424,3425,3432,3433,3472,3480,3484,3485,3500,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561, 3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,4052,4053,4054,4055,4056,4057,4058,4060,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4193,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4314,4315,4316,4317,4318,4319,4321,4322,4323,4326,4327,4328,4329,4330,4331,4333,4334,4335,4336,4337,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5790,5791,5795,5796,5797,5798,5799,5800,5828,5830,5831,5834,5837,5838, 5840,5841,5842,5843,5846,5848,5879,5883,5904,5937,5964,5965,5966,5967,5968,5969,5970,5971,5972,5975,5977,5980,5981,5985,5989,5990,6004,6020,6141,6159,6162,6192,6467,6485,6489,6493,6494 } Weights: *865 { a: 0.0038912461604923,0.00746879680082202,0.00141331483609974,0.01067846827209,0.013077687472105,0.0246206074953079,0.0236639585345984,0.0152580700814724,0.0286018270999193,0.0310774073004723,0.0312411542981863,0.0261699371039867,0.0184016786515713,0.0347599051892757,0.024570794776082,0.0318554602563381,0.041717704385519,0.0357340350747108,0.00606823712587357,0.00972852203994989,0.0188133157789707,0.0098462775349617,0.0125692626461387,0.019047936424613,0.00273100752383471,0.00462566455826163,0.00593316461890936,0.00270845112390816,0.00425019580870867,0.00877111963927746,0.0125265428796411,0.0174335725605488,0.00591986905783415,0.00135375326499343,0.00188461295329034,0.00151532597374171,0.00204999255947769,0.00690315803512931,0.00123022275511175,0.00282211299054325,0.00406783912330866,0.00228741578757763,0.0011156260734424,0.00105570175219327,0.00231963209807873,0.00712635600939393,0.00509478570893407,0.0051323501393199,0.00548261823132634,0.00537449773401022,0.00795647688210011,0.00294765923172235,0.00560125382617116,0.0033296609763056,0.00171174516435713,0.00288268574513495,0.00104738119989634,0.00211143540218472,0.00455130264163017,0.00443605519831181,0.0119684366509318,0.00844237580895424,0.00610086182132363,0.0057710106484592,0.00910606142133474,0.0129934316501021,0.0254145096987486,0.0266697257757187,0.0183888282626867,0.0464220605790615,0.0186563823372126,0.0157747473567724,0.0484627932310104,0.0810441970825195,0.0768198370933533,0.0468261800706387,0.0932487100362778,0.0852285027503967,0.0717913508415222,0.0682760924100876,0.0428164899349213,0.0595326125621796,0.0388268604874611,0.0580568835139275,0.0475558713078499,0.0521105714142323,0.035434115678072,0.0606706887483597,0.075504295527935,0.0447081252932549,0.075449101626873,0.0893826857209206,0.0160036776214838,0.0208015814423561,0.0227869488298893,0.00141787191387266,0.00676626246422529,0.0065395925194025,0.00140758685301989,0.0207227878272533,0.0193231124430895,0.00740664172917604,0.00680384412407875,0.00158558180555701,0.00143789895810187, 0.00504043977707624,0.00720629096031189,0.00148507207632065,0.0222162082791328,0.0100442161783576,0.0237202029675245,0.002926493762061,0.00792062189429998,0.0278539098799229,0.0013780000153929,0.0272102281451225,0.349999994039536,0.150000005960464,0.449999988079071,0.150000005960464,0.150000005960464,0.219999998807907,0.539033949375153,0.649999976158142,0.749286413192749,0.5,0.752774000167847,0.800000011920929,0.699999988079071,0.699999988079071,0.150000005960464,0.164102658629417,0.242218345403671,0.110994532704353,0.200312361121178,0.119263090193272,0.147319793701172,0.226669728755951,0.100000001490116,0.342192471027374,0.502626240253448,0.691313743591309,0.464090317487717,0.100000001490116,0.288183063268662,0.00674763834103942,0.00481084920465946,0.0242928043007851,0.0119534581899643,0.0154355028644204,0.00483096996322274,0.00424615060910583,0.0158611889928579,0.00221397657878697,0.0145594794303179,0.0105838282033801,0.0327097326517105,0.0444533079862595,0.0895712301135063,0.0500000007450581,0.0221567433327436,0.0531193725764751,0.0414562374353409,0.0757283121347427,0.133984073996544,0.107808001339436,0.00132235384080559,0.010545508004725,0.00400018226355314,0.00207298039458692,0.0700000002980232,0.0313636586070061,0.0215178523212671,0.0156056005507708,0.034803070127964,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00151988526340574,0.0085519477725029,0.0297721326351166,0.0211408082395792,0.0018999184248969,0.00622903881594539,0.0202187467366457,0.00821313075721264,0.175155088305473,0.20246547460556,0.0748029351234436,0.0500103756785393,0.1078976765275,0.0739056691527367,0.0437904708087444,0.0616192035377026,0.0512847304344177,0.0351532548666,0.15351414680481,0.115480601787567,0.0785194784402847,0.106780119240284,0.0841209962964058,0.061554454267025,0.100000001490116,0.0865721106529236,0.114501155912876,0.116757825016975,0.00275758747011423,0.0395147576928139,0.0261142645031214,0.0137884160503745,0.00676471227779984,0.0145978583022952,0.0223576165735722,0.0301102176308632,0.0289073176681995, 0.00515285972505808,0.0546868927776814,0.0412694625556469,0.00425857631489635,0.00223806616850197,0.0238872319459915,0.0314677245914936,0.0603148639202118,0.0919864401221275,0.117405980825424,0.00103968661278486,0.00140306551475078,0.0181460976600647,0.0135137075558305,0.00193576700985432,0.182137340307236,0.111208200454712,0.128003790974617,0.0730748623609543,0.0212860628962517,0.0486274063587189,0.00415304768830538,0.00841330084949732,0.00778522342443466,0.00381538085639477,0.0112824933603406,0.00411980412900448,0.00129261950496584,0.0338672325015068,0.105499587953091,0.0661656931042671,0.15208226442337,0.256753355264664,0.188580900430679,0.150000005960464,0.00176679529249668,0.0045908116735518,0.00990359205752611,0.00294763781130314,0.00140576681587845,0.00121235230471939,0.088316410779953,0.122155249118805,0.0623086728155613,0.0372041761875153,0.152274057269096,0.0877154096961021,0.20766144990921,0.128310024738312,0.00272386288270354,0.0148188229650259,0.581505417823792,0.60775899887085,0.391209810972214,0.449999988079071,0.367483019828796,0.21595473587513,0.00511999987065792,0.0337072089314461,0.0243593472987413,0.0595335252583027,0.0494096390902996,0.288400173187256,0.254165440797806,0.0184773337095976,0.0233920011669397,0.0105660744011402,0.0417584367096424,0.00572074064984918,0.00440607406198978,0.0402106605470181,0.0455601029098034,0.0595960952341557,0.236882373690605,0.274818778038025,0.173639640212059,0.00821051653474569,0.00111673469655216,0.00192473467905074,0.0744823962450027,0.0209792852401733,0.0242483224719763,0.00515718245878816,0.0168403051793575,0.00198370963335037,0.0062483036890626,0.393967807292938,0.297216445207596,0.284882426261902,0.779509365558624,0.707262277603149,0.47817474603653,0.39839693903923,0.383381128311157,0.272867739200592,0.354216724634171,0.215759769082069,0.313570141792297,0.0679698660969734,0.0687856376171112,0.0261576380580664,0.234204679727554,0.0370325855910778,0.0571153126657009,0.103240847587585,0.1180534735322,0.190469533205032,0.143643140792847,0.151886433362961,0.193937033414841, 0.133460149168968,0.234541907906532,0.253086447715759,0.305678099393845,0.364733636379242,0.400832086801529,0.342316150665283,0.30690062046051,0.42099592089653,0.502739071846008,0.495381146669388,0.371182233095169,0.899999976158142,0.899999976158142,0.980000019073486,1,1,0.980000019073486,0.980000019073486,0.980000019073486,0.835542321205139,0.85124671459198,0.727739691734314,0.202030509710312,0.133721649646759,0.156758695840836,0.00306026707403362,0.0663799419999123,0.0627863854169846,0.0726863443851471,0.0683878138661385,0.0423226542770863,0.0181763526052237,0.0500000007450581,0.0500000007450581,0.0500000007450581,0.0340265333652496,0.0206213351339102,0.00880161300301552,0.061221182346344,0.149439617991447,0.139599531888962,0.0114001017063856,0.00134399998933077,0.0368302874267101,0.00511999987065792,0.00479999976232648,0.00375466677360237,0.00184088898822665,0.00231452425941825,0.0391958728432655,0.108779542148113,0.128863975405693,0.0109759103506804,0.00937955174595118,0.00162896886467934,0.0034905462525785,0.440623670816422,0.00229969387874007,0.0058504375629127,0.150000005960464,0.0012159482575953,0.00647590681910515,0.0137380259111524,0.00691936537623405,0.00245999894104898,0.0314241163432598,0.0719676613807678,0.0235037468373775,0.00513688893988729,0.150000005960464,0.300000011920929,0.0837228745222092,0.0730877444148064,0.0616817027330399,0.084648534655571,0.0647208988666534,0.00780501682311296,0.649999976158142,0.31384065747261,0.376428991556168,0.00612152414396405,0.0864159390330315,0.128799378871918,0.0639853924512863,0.0571126453578472,0.182525634765625,0.259402930736542,0.11110020428896,0.121370367705822,0.123139880597591,0.431690454483032,0.0678107142448425,0.116970963776112,0.151332914829254,0.128084793686867,0.188019275665283,0.254704773426056,0.222260326147079,0.426697045564651,0.313478171825409,0.662932276725769,0.712575972080231,0.714460909366608,0.744367778301239,0.797382295131683,0.710675418376923,0.0866629257798195,0.0836607664823532,0.144993305206299,0.0611713975667953,0.0595202445983887,0.173436269164085, 0.209887385368347,0.116518676280975,0.103099502623081,0.312380999326706,0.114136606454849,0.124968446791172,0.145314767956734,0.195556074380875,0.169761568307877,0.368388921022415,0.226643174886703,0.522917032241821,0.606863260269165,0.602068185806274,0.602239727973938,0.671783566474915,0.573743999004364,0.0799809694290161,0.0028724349103868,0.00273489975370467,0.00224263756535947,0.00261519732885063,0.00237992848269641,0.00147316930815578,0.00201171170920134,0.00189624272752553,0.00219413707964122,0.00245666946284473,0.00189763796515763,0.00182186311576515,0.00285251555033028,0.00287016853690147,0.00251814303919673,0.00248833745718002,0.00266813719645143,0.00287493271753192,0.00301240081898868,0.0032727187499404,0.00284083373844624,0.00320788915269077,0.00359099078923464,0.00412758998572826,0.00315631576813757,0.00323004997335374,0.00321480701677501,0.00332579459063709,0.00285214022733271,0.00295891449786723,0.00354001857340336,0.00337863969616592,0.00334977172315121,0.00339434412308037,0.00338804326020181,0.00335639086551964,0.00369864515960217,0.0037561864592135,0.00450852140784264,0.00450629414990544,0.00589997135102749,0.00577224884182215,0.00300176558084786,0.00284553435631096,0.0033055804669857,0.00401255441829562,0.00271141226403415,0.00304197636432946,0.0032030027359724,0.00278149824589491,0.00322267832234502,0.00290161650627851,0.00361466920003295,0.00428378861397505,0.00334629463031888,0.00336101255379617,0.00307296216487885,0.0032977256923914,0.00341798411682248,0.00368143315427005,0.00296677765436471,0.00290974951349199,0.00300370645709336,0.00312284333631396,0.00280307792127132,0.00274716271087527,0.00294384569860995,0.00303437188267708,0.00293560628779233,0.00535764917731285,0.00444378051906824,0.0034510565456003,0.00472006853669882,0.00181388761848211,0.00337480590678751,0.00235132407397032,0.00315221515484154,0.00429010717198253,0.00224503269419074,0.0047888970002532,0.00585188902914524,0.00548017863184214,0.00454346882179379,0.00465585617348552,0.00493457354605198,0.00388614949770272,0.00589821254834533, 0.00602432992309332,0.00503173423931003,0.00664270063862205,0.00652361335232854,0.00738831702619791,0.00736821768805385,0.00598593987524509,0.00570765323936939,0.0052280118688941,0.00812239944934845,0.00690612616017461,0.00922985840588808,0.00964972749352455,0.0100229699164629,0.00979678798466921,0.00947143416851759,0.00988043006509542,0.00788048282265663,0.00827876199036837,0.00714467046782374,0.00750800548121333,0.00554124126210809,0.00850069615989923,0.0075537096709013,0.00673130573704839,0.0071938019245863,0.00710836937651038,0.00676870625466108,0.00553518440574408,0.00828305631875992,0.00855810195207596,0.00742994295433164,0.00832461938261986,0.0091610960662365,0.00952113978564739,0.00609192904084921,0.00660995859652758,0.00667747063562274,0.00747788092121482,0.00544685358181596,0.00532601587474346,0.00636698864400387,0.00747411930933595,0.00729592377319932,0.00196876213885844,0.00167774257715791,0.00197391537949443,0.00210932898335159,0.00105903821531683,0.0016689149197191,0.00136837980244309,0.00125867768656462,0.00219658622518182,0.00218117795884609,0.00233970722183585,0.00260340375825763,0.00225786538794637,0.00227275397628546,0.00218520546332002,0.00229749316349626,0.00238911714404821,0.00247099064290524,0.00225680181756616,0.00237468630075455,0.00242421845905483,0.00274204649031162,0.00256723049096763,0.00336809456348419,0.00306707480922341,0.00234764581546187,0.00248749298043549,0.00255475123412907,0.00318171083927155,0.00242847763001919,0.00311959092505276,0.0035705070476979,0.00224441569298506,0.00123613397590816,0.00155509519390762,0.00416996888816357,0.0040141916833818,0.00318032247014344,0.00434468686580658,0.00411119963973761,0.00373093411326408,0.00657161371782422,0.00643852632492781,0.00604194169864058,0.00593365449458361,0.0058493041433394,0.00548689533025026,0.00469370279461145,0.00422931695356965,0.00523619493469596,0.00584275601431727,0.00618052296340466,0.00250652339309454,0.00213699461892247,0.00138027011416852,0.0027654857840389,0.00286928634159267,0.00325076188892126,0.0032718819566071, 0.00351603957824409,0.00424721231684089,0.00551357073709369,0.00331737310625613,0.00320188654586673,0.00227472884580493,0.00291172997094691,0.00287038390524685,0.00302322162315249,0.00324240955524147,0.00419651810079813,0.00167633499950171,0.00501104025170207,0.0055063646286726,0.00934084132313728,0.00949322339147329,0.00925296358764172,0.00772196892648935,0.00849300436675549,0.00798273459076881,0.004718744661659,0.00585839105769992,0.00640948535874486,0.0071573075838387,0.0029482904355973,0.00891218427568674,0.0102696055546403,0.00801469944417477,0.0075694783590734,0.00829983130097389,0.00948033947497606,0.00821911729872227,0.0088095311075449,0.00777143286541104,0.00785871688276529,0.00711476756259799,0.0069456766359508,0.00646172650158405,0.00789961684495211,0.00749206775799394,0.00839586462825537,0.00768001656979322,0.00888935849070549,0.00799908488988876,0.0094854049384594,0.00838644616305828,0.00998248253017664,0.00871728733181953,0.00874925404787064,0.00752222584560514,0.00852789543569088,0.00786581169813871,0.00688365427777171,0.00592871708795428,0.00658458471298218,0.00701384944841266,0.0074963322840631,0.00806235335767269,0.00851017609238625,0.00763430166989565,0.00866615958511829,0.0079189445823431,0.00680210301652551,0.00572706665843725,0.00624250480905175,0.00361610692925751,0.00403973972424865,0.00464699137955904,0.00516547728329897,0.00528786843642592,0.00489354878664017,0.00416175229474902,0.0033993604592979,0.00355392741039395,0.00360536435618997,0.0021504673641175,0.0046223346143961,0.00879024062305689,0.0082965986803174,0.0088426573202014,0.0104714669287205,0.00916303694248199,0.00852636806666851,0.00781917851418257,0.0084534827619791,0.00698069809004664,0.00365751283243299,0.00275685871019959,0.00306416256353259,0.00407540565356612,0.0031653237529099,0.00355168106034398,0.00319073838181794,0.00358729413710535,0.00310353306122124,0.00346082681789994,0.0029276676941663,0.00320818251930177,0.00272714579477906,0.0029269983060658,0.00231565744616091,0.00244255387224257,0.00347824790515006,0.00379278091713786, 0.00359018542803824,0.00396385602653027,0.00367449503391981,0.00409605354070663,0.0036963012535125,0.0041322004981339,0.00274232355877757,0.00358765525743365,0.00321995210833848,0.00328098819591105,0.00315649411641061,0.00288322917185724,0.00257438328117132,0.00211100280284882,0.00332666095346212,0.00351023417897522,0.00364485383033752,0.00366668263450265,0.0022805470507592,0.00273415795527399,0.00324346288107336,0.00332364905625582,0.00318467197939754,0.00286923488602042,0.00251456326805055,0.00203057285398245,0.00176350364927202,0.00180430873297155,0.00192816136404872,0.00209267088212073,0.00169648032169789,0.00137202127370983,0.00207436457276344,0.00218321965076029,0.00210944400168955,0.00187669682782143,0.00159703101962805,0.00125271349679679,0.00105652003549039,0.00199300702661276,0.00113289791624993,0.00123676413204521,0.00255915010347962,0.00141588877886534,0.00208958005532622,0.00196704873815179,0.00216767517849803,0.00232494808733463,0.00259238597936928,0.00358449853956699,0.00352447549812496,0.00344475172460079,0.003357496811077,0.00347600504755974,0.00337328994646668,0.00364757981151342,0.00315107614733279,0.00319626065902412,0.00326616037636995,0.00334058725275099,0.00340767367742956,0.00392938638105989,0.00355419632978737,0.00237688352353871,0.00454634195193648,0.0019630070310086,0.00281993020325899,0.00906544551253319,0.00831099599599838,0.00224613631144166,0.0197735726833344,0.00137500802520663,0.00211713276803494,0.00517774606123567,0.00154388858936727,0.0029610728379339,0.00337772024795413,0.00518400780856609,0.0042556906118989,0.00429127365350723,0.00385551853105426,0.00231104274280369,0.0017273563425988,0.00102619617246091,0.0148404175415635,0.00504331663250923,0.00361545896157622,0.00329389865510166,0.00222742976620793,0.00301670958288014,0.00169996067415923,0.00180735485628247,0.00242576887831092,0.00138427189085633,0.0027351276949048,0.00137489358894527,0.00255316752009094,0.00110148976091295,0.00185089581646025,0.0012406351743266,0.00199872045777738,0.00163026701193303,0.00174500199500471,0.00111509673297405, 0.00157053663861007,0.00127368152607232,0.0013530672295019,0.00129679474048316,0.0015278987120837,0.00107203773222864,0.00807942263782024,0.00218584365211427,0.00115716061554849,0.00101477664429694 } Transform: *16 { a: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.0244486082133341,-0.153576078058137,-0.987834247540742,0,-0.112669667543803,0.982257219833786,-0.149920490130099,0,-0.104756966978289,7.87776069093907,67.510384927605,1 } TransformLink: *16 { a: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570261,-0.153576100851615,0.982257365618587,0,-0.0413181939768158,-0.98783439906961,-0.149920513127158,0,2.04555364893807,67.8963551342133,2.37140015377402,1 } } Deformer: 135115872, "SubDeformer::Cluster_R_eye_joint", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *687 { a: 70,71,94,95,98,99,106,108,109,110,120,121,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,212,213,214,215,216,217,218,219,220,291,292,293,294,295,296,324,325,326,328,329,336,337,339,340,344,345,346,347,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,396,397,398,399,400,401,402,403,404,405,406,407,409,410,411,414,416,417,418,420,421,422,423,424,425,426,427,428,500,501,502,503,504,506,507,508,573,574,575,576,577,578,590,591,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,729,731,750,751,752,753,754,755,775,777,778,779,780,795,796,797,798,803,816,817,825,827,828,829,830,831,832,833,837,838,839,844,882,883,884,885,914,915,916,917,924,925,926,927,934,935,936,942,943,944,945,946,947,964,973,974,975,976,977,978,979,980,989,990,998,1000,1001,1004,1005,1006,1007,1011,1012,1013,1023,1024,1025,1026,1028,1037,1038,1039,1050,1053,1054,1055,1056,1057,1058,1059,1068,1069,1070,1087,1088,1089,1090,1091,1092,1093,1102,1103,1110,1111,1112,1117,1126,1131,1132,1144,1147,1148,1149,1153,1154,1155,1156,1157,1159,1160,1161,1162,1166,1167,1169,1170,1171,1172,1173,1174,1201,1207,1218,1221,1231,1232,1235,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1523,1526,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1570,1571,1572,1573,1574,1575,1576,1577,1642,1643,1645,1646,1647,1648,1650,1651,1654,1655,1656,1657,1658,1659,1666,1679,1680,1681,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1695,1698,1699,1707,1708,1709,1710,1712,1714,1726,1727,1728,1731,1732,1733,1734,1741,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1792,1796,1806,1807,1808,1810,1811,1813,1814,1815,1816,1817,1821,1822,1825,1827,1830, 1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1890,1891,1892,1893,1894,1895,1959,1960,1961,1962,1963,1964,1991,1992,1993,1994,1995,2002,2003,2005,2422,2423,2424,2425,2426,2427,2467,2468,2469,2470,2475,2499,2500,2501,2502,2503,2504,2512,2554,2555,2556,2557,2560,2585,2586,2587,2588,2617,2618,2619,2620,2621,2622,2629,2640,2666,2667,2668,2669,2670,2676,2678,2679,2689,2730,2733,2768,2769,2770,2771,2772,2773,2774,2829,2830,2831,2835,2837,2838,2844,2880,2913,2914,3408,3409,3410,3423,3424,3425,3426,3427,3428,3429,3430,3431,3432,3433,3434,3435,3436,3437,3438,3486,3487,3499,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,5359,5360,5364,5397,5399,5400,5404,5407,5408,5410,5411,5412,5413,5416,5418,5443,5453,5474,5503,5504,5508,5510,5536,5537,5538,5539,5540,5541,5542,5543,5544,5547,5552,5553,5554,5557,5561,5562,5576,5592,5644,5662,5665,5684,5726,5728,5732,5736 } Weights: *687 { a: 0.00225406116805971,0.00299270241521299,0.00314046395942569,0.00142694683745503,0.00384869473055005,0.00592560134828091,0.00200975174084306,0.00715580768883228,0.00537628959864378,0.00739909242838621,0.00239976635202765,0.00138659891672432,0.0061279172077775,0.00658823549747467,0.00824131164699793,0.00719038164243102,0.00956671498715878,0.0120942890644073,0.0133896032348275,0.00891112256795168,0.00740056345239282,0.00646934891119599,0.00637939153239131,0.00126555329188704,0.00449737347662449,0.00272365752607584,0.00274063716642559,0.00139470375142992,0.0045706620439887,0.00445523951202631,0.00670536514371634,0.0262232050299644,0.035804707556963,0.0377006456255913,0.0280813500285149,0.0405757576227188,0.0415965355932713,0.0393838249146938,0.0370488241314888,0.0285728257149458,0.0360037907958031,0.029328715056181,0.0361984297633171,0.0339969955384731,0.0357963219285011,0.0318237543106079,0.00914799701422453,0.0155569585040212,0.0171203799545765,0.00547765055671334,0.00529744848608971,0.00671972194686532,0.0112307257950306,0.0072063491679728,0.00848108436912298,0.0129470666870475,0.0159949082881212,0.0226276535540819,0.0304606538265944,0.0219458937644959,0.0269811600446701,0.0352062843739986,0.00932966638356447,0.0130579331889749,0.0156794786453247,0.00327899609692395,0.0085839768871665,0.00914031360298395,0.00356043060310185,0.0175848435610533,0.0184314381331205,0.0194156914949417,0.00963829085230827,0.00380341988056898,0.00757872546091676,0.00627756444737315,0.00289895292371511,0.00237405230291188,0.00136809202376753,0.0043934378772974,0.00818693824112415,0.00311475805938244,0.0169690046459436,0.00107458676211536,0.00117155455518514,0.00565435644239187,0.00999229587614536,0.00254443008452654,0.00318441540002823,0.0741772800683975,0.0924278497695923,0.0274049881845713,0.138513386249542,0.579739809036255,0.445804357528687,0.510030806064606,0.299037575721741,0.251733839511871,0.377906203269959,0.698451936244965,0.649999976158142,0.850000023841858,0.75,0.899999976158142,0.949999988079071,0.75,0.75,0.162479013204575, 0.162473782896996,0.239764705300331,0.117019481956959,0.100000001490116,0.314426273107529,0.442865610122681,0.649999976158142,0.379082888364792,0.100000001490116,0.0029387956019491,0.00929927919059992,0.00298508838750422,0.00750204036012292,0.00200997781939805,0.00188099674414843,0.00782627891749144,0.0227196458727121,0.0229735802859068,0.0481614321470261,0.0551468729972839,0.106037020683289,0.0339427515864372,0.0257349461317062,0.0585545152425766,0.110038615763187,0.01064791996032,0.00200310163199902,0.0102275665849447,0.00237495475448668,0.0384428389370441,0.0149681828916073,0.00486927153542638,0.0339592806994915,0.0590300299227238,0.0914978757500649,0.161068394780159,0.124054789543152,0.0800120905041695,0.00387670774944127,0.0485085695981979,0.0384997762739658,0.0122045539319515,0.013538776896894,0.144682094454765,0.256250083446503,0.336145132780075,0.002973897382617,0.00891208928078413,0.00199143635109067,0.00917734857648611,0.0215485915541649,0.00575529271736741,0.00395605154335499,0.0026860658545047,0.125525027513504,0.140216618776321,0.0238694231957197,0.0142579050734639,0.048931673169136,0.0338563732802868,0.00757236639037728,0.0109836980700493,0.00744025874882936,0.00380006502382457,0.0845025405287743,0.0692142695188522,0.0467887856066227,0.0562854818999767,0.0258110873401165,0.0201738514006138,0.146569639444351,0.0903132930397987,0.167498186230659,0.10464883595705,0.00314257550053298,0.0123085863888264,0.0114605892449617,0.00852362066507339,0.00543177081272006,0.00255902297794819,0.00438370183110237,0.00621197698637843,0.00119641202036291,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.0199999995529652,0.00286894803866744,0.0183880105614662,0.0147572588175535,0.00148830120451748,0.00124421424698085,0.0117347855120897,0.0103331999853253,0.00500483578070998,0.00199292507022619,0.00784185156226158,0.00654877489432693,0.00432892935350537,0.00542736705392599,0.00806710496544838,0.00971512403339148,0.0500000007450581,0.100000001490116,0.100000001490116,0.00202715280465782,0.00701918220147491,0.00660502957180142, 0.00692577799782157,0.00690311519429088,0.00360431079752743,0.00568113895133138,0.0053304610773921,0.00321385520510376,0.200000002980232,0.200000002980232,0.464121609926224,0.372001975774765,0.00137971458025277,0.0794769674539566,0.0914423316717148,0.003408428048715,0.00531325163319707,0.00414136936888099,0.00264358799904585,0.00428298860788345,0.0019509750418365,0.00121530832257122,0.412422329187393,0.5,0.448966711759567,0.550000011920929,0.649999976158142,0.550000011920929,0.197379514575005,0.0051034651696682,0.001438521547243,0.00275980518199503,0.00182668399065733,0.00176234217360616,0.0013265140587464,0.0872451215982437,0.0318181775510311,0.120967552065849,0.0561373271048069,0.00152190367225558,0.100000001490116,0.100000001490116,0.25,0.272729575634003,0.0074675315991044,0.0305993165820837,0.00303684757091105,0.400000005960464,0.395441085100174,0.400000005960464,0.00104265799745917,0.00430345255881548,0.699999988079071,0.75,0.5,0.550000011920929,0.449999988079071,0.300000011920929,0.0157849490642548,0.0450058728456497,0.0118039222434163,0.00920973252505064,0.0071520977653563,0.0172294974327087,0.0234336089342833,0.0177474711090326,0.0136046605184674,0.00900147948414087,0.0299999993294477,0.00812691077589989,0.00190130481496453,0.229402348399162,0.204308375716209,0.00115229026414454,0.0299999993294477,0.097870834171772,0.100000001490116,0.00205515092238784,0.00697201397269964,0.0103997318074107,0.0130104143172503,0.0134130232036114,0.00165532832033932,0.00309189269319177,0.00234658550471067,0.00112811266444623,0.0012501880992204,0.0936693772673607,0.0463141165673733,0.0196417048573494,0.00268755247816443,0.00839622225612402,0.550000011920929,0.550000011920929,0.300000011920929,0.0418052561581135,0.016082338988781,0.0198220461606979,0.027225948870182,0.00273721688427031,0.235250785946846,0.00140504783485085,0.206924885511398,0.284648895263672,0.001910021295771,0.600000023841858,0.5,0.451376587152481,0.899999976158142,0.800000011920929,0.550000011920929,0.5,0.400000005960464,0.349999994039536,0.349999994039536,0.591311037540436, 0.71046644449234,0.00166933750733733,0.00155535293743014,0.15054589509964,0.202879443764687,0.300000011920929,0.00581762893125415,0.011917001567781,0.212641268968582,0.23912838101387,0.363610714673996,0.312190741300583,0.301038801670074,0.338739454746246,0.150000005960464,0.370767772197723,0.349999994039536,0.400000005960464,0.507781326770782,0.447562992572784,0.5,0.600000023841858,0.570803225040436,0.547177851200104,0.949999988079071,0.949999988079071,1,1,1,1,0.980000019073486,0.980000019073486,0.899999976158142,0.899999976158142,0.506809055805206,0.300000011920929,0.100000001490116,0.351170927286148,0.155357539653778,0.100000001490116,0.0500000007450581,0.100000001490116,0.0500000007450581,0.0802976787090302,0.051420658826828,0.25,0.300000011920929,0.215666860342026,0.0296915806829929,0.0109948515892029,0.00282987905666232,0.123785838484764,0.0299999993294477,0.0104991234838963,0.0347260311245918,0.174331799149513,0.291356563568115,0.139639675617218,0.0909389927983284,0.751251339912415,0.0250975470989943,0.00101973360870034,0.00281789875589311,0.00530411908403039,0.00705776736140251,0.349999994039536,0.018251609057188,0.00552481040358543,0.0457161329686642,0.0364900603890419,0.0322229117155075,0.0232003647834063,0.00761937070637941,0.0129122110083699,0.0018132560653612,0.00192320614587516,0.2836734354496,0.191062659025192,0.10631301254034,0.0546292588114738,0.0226769000291824,0.00759811419993639,0.0127899246290326,0.449999988079071,0.550000011920929,0.00395371858030558,0.00562301510944963,0.00412268145009875,0.00225640623830259,0.00267837452702224,0.00369340716861188,0.0384311117231846,0.0382450222969055,0.0308279488235712,0.0295269265770912,0.025489354506135,0.0346145555377007,0.0300641786307096,0.0206859800964594,0.0266162808984518,0.0330806113779545,0.0355984233319759,0.0343656949698925,0.028419679030776,0.025199556723237,0.0212426129728556,0.0196652188897133,0.0160835292190313,0.0121408421546221,0.0202507004141808,0.00168385170400143,0.00484586227685213,0.00330330617725849,0.00781689770519733,0.850000023841858, 0.00206114444881678,0.0028053573332727,0.00538505567237735,0.0067707528360188,0.00783531460911036,0.00340250763110816,0.00121480436064303,0.00330042955465615,0.00112872116733342,0.001448123017326,0.0040852976962924,0.0229259543120861,0.0306862499564886,0.0330770649015903,0.0254286862909794,0.0337661243975163,0.0351286977529526,0.034977775067091,0.0342453047633171,0.0272729713469744,0.0349134095013142,0.0290430206805468,0.034108117222786,0.0333448573946953,0.0355434231460094,0.00803781766444445,0.0159803424030542,0.00133555091451854,0.00135917204897851,0.00788859557360411,0.00362043548375368,0.00369403162039816,0.00819585844874382,0.0152367781847715,0.0216128192842007,0.0267653465270996,0.0194449722766876,0.025431839749217,0.030388668179512,0.0087865786626935,0.0115359928458929,0.0138986716046929,0.00342140183784068,0.00867122411727905,0.00937425717711449,0.00372696132399142,0.0172722488641739,0.0185647197067738,0.00675679836422205,0.00549612985923886,0.0025901438202709,0.00203290488570929,0.00122223340440542,0.00404203310608864,0.00779036525636911,0.00302999676205218,0.0157638750970364,0.00104375998489559,0.00115360273048282,0.00607519876211882,0.0109270857647061,0.00268194708041847,0.0143921598792076,0.0111151766031981,0.00717192562296987,0.00423647742718458,0.00688508246093988,0.00912474375218153,0.00378839368931949,0.0198083184659481,0.0161420702934265,0.00262516457587481,0.00211739679798484,0.00978809595108032,0.00754176918417215,0.00456672580912709,0.00538340536877513,0.00893084891140461,0.0117520065978169,0.00126411009114236,0.00846298411488533,0.00845142267644405,0.00782160647213459,0.0076493383385241,0.00162299012299627,0.00385678349994123,0.00648050475865602,0.00575396232306957,0.00336620886810124,0.00382873835042119,0.00597893260419369,0.00528374360874295,0.00339140510186553,0.00600495748221874,0.00291066849604249,0.00102913880255073,0.0015889568021521,0.00152235745918006,0.00284664798527956,0.0048015546053648,0.0020070958416909,0.00112610473297536,0.00179676874540746,0.00196465570479631,0.00165885838214308, 0.00152659718878567,0.0021847162861377,0.00660543423146009,0.0121408635750413,0.00970069132745266,0.0139794517308474,0.0204916838556528,0.01745898835361,0.0123515529558063,0.00713782571256161,0.00626069633290172,0.0105612594634295,0.0144144389778376,0.0159461796283722,0.00256820418871939,0.0021693769376725,0.0204103570431471,0.024961069226265,0.00160232768394053,0.00365474610589445,0.00117914832662791,0.0033273680601269,0.00291148712858558,0.0307696238160133,0.0307900868356228,0.0234009772539139,0.0223564114421606,0.0201896727085114,0.0292647611349821,0.0272439233958721,0.0177467707544565,0.025606844574213,0.0287475045770407,0.0226978901773691,0.0148312449455261,0.0135223055258393,0.0114695969969034,0.00944908522069454,0.0149854561313987,0.649999976158142,0.785920679569244,0.0500000007450581,0.0392807051539421,0.014969184063375,0.0137453535571694,0.143863663077354,0.20943795144558,0.0632535293698311,0.180063635110855,0.114309228956699,0.338245630264282,0.023958794772625,0.252962082624435,0.369833081960678,0.323386013507843,0.477446615695953,0.430914372205734,0.512755036354065,0.50423389673233,0.514667630195618,0.553474307060242,0.524987459182739,0.572267532348633,0.546735525131226,0.462143510580063,0.0304007176309824,0.0525171086192131,0.0195326711982489,0.023110318928957,0.144032761454582,0.067643515765667,0.185808822512627,0.119412794709206,0.304689973592758,0.26177579164505,0.343998968601227,0.412656366825104,0.456989109516144,0.483713805675507,0.479251682758331,0.481080204248428,0.518331408500671,0.491783976554871,0.539229154586792,0.515590369701386,0.433626353740692,0.0343058742582798,0.0781585201621056,0.105993494391441,0.00213290797546506,0.00410596514120698,0.00179009861312807,0.00126644130796194,0.00189128855708987,0.00469252793118358,0.0013661136617884,0.00262552103959024,0.00296656228601933,0.00463480222970247,0.00377434235997498,0.00381961558014154,0.00345237809233367,0.00204208516515791,0.00151749444194138,0.00241850991733372,0.0138494111597538,0.00451441667973995,0.00281708175316453,0.00240241712890565, 0.0032461395021528,0.0010263113072142,0.00295444997027516,0.00199528969824314,0.00271162413991988,0.00152211741078645,0.00162537593860179,0.00221300823614001,0.00126595702022314,0.00253663677722216,0.00132007012143731,0.00228379410691559,0.00165127718355507,0.00111555960029364,0.0010408025700599,0.00178179494105279,0.00145317730493844,0.00163022498600185,0.00105069985147566,0.00140582525637001,0.00115194544196129,0.00129253440536559,0.00123961386270821,0.00136042467784137,0.00101523788180202,0.00746887130662799,0.00205911742523313,0.00103594770189375 } Transform: *16 { a: 0.993331668793896,0.10763360959548,-0.041318187638811,0,-0.0244486082133341,-0.153576078058137,-0.987834247540742,0,-0.112669667543803,0.982257219833786,-0.149920490130099,0,2.3502624985163,8.0632495255243,67.5859536222117,1 } TransformLink: *16 { a: 0.993331676088063,-0.0244486083928634,-0.112669668371151,0,0.107633625570261,-0.153576100851615,0.982257365618587,0,-0.0413181939768158,-0.98783439906961,-0.149920513127158,0,-0.409937425337364,68.0595129517144,2.47713790625645,1 } } Deformer: 135112368, "SubDeformer::Cluster_L_eyeBall_joint2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *203 { a: 110,1756,1831,1832,1834,1835,1836,1837,1839,1841,1842,1843,1855,1856,1858,1859,2422,2499,2504,2555,2556,2768,2769,2771,2772,2831,2835,2844,2880,3423,3424,3425,3432,3433,4107,4153,4154,4162,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4180,4184,4185,4232,4233,4238,4239,4270,4274,4276,4277,4279,4280,4281,4282,4298,4299,4300,4302,4311,4314,4315,4323,4326,4343,4344,4345,5827,5843,5850,5904,5905,11193,11194,11195,11196,11197,11198,11199,11200,11201,11202,11203,11204,11205,11206,11207,11208,11209,11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225,11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241,11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,11252,11253,11254,11255,11256,11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11311,11312 } Weights: *203 { a: 0.0485186316072941,0.0405950658023357,0.0581861548125744,0.0492938794195652,0.0534534640610218,0.0509121939539909,0.0433826372027397,0.0467577017843723,0.0438807941973209,0.0395000539720058,0.0368526205420494,0.0433537662029266,0.0491937063634396,0.057663019746542,0.0422210991382599,0.0506464838981628,0.0430085472762585,0.0384206995368004,0.0452539175748825,0.0379151850938797,0.0435524433851242,0.0460081957280636,0.0355520620942116,0.0343122705817223,0.0299891103059053,0.0388531126081944,0.0409986935555935,0.0306265540421009,0.0394253730773926,0.0457773171365261,0.0482624992728233,0.0421110391616821,0.0450314655900002,0.0384499169886112,0.0033099977299571,0.00853923615068197,0.008744727820158,0.00679745338857174,0.00789610296487808,0.00706197181716561,0.00619890773668885,0.00658508809283376,0.00647423835471272,0.00589318620041013,0.0045215068385005,0.00782360695302486,0.0080419946461916,0.00697724567726254,0.00778378965333104,0.00851207040250301,0.00889366120100021,0.00702843815088272,0.00684950267896056,0.00677408976480365,0.00537176569923759,0.00537971500307322,0.00483532808721066,0.00536222383379936,0.00744686694815755,0.00671214517205954,0.00845018029212952,0.00977900065481663,0.00768665550276637,0.00731138838455081,0.00797605887055397,0.00918637402355671,0.00951959472149611,0.00827539339661598,0.008237699046731,0.0071938275359571,0.00802947394549847,0.00728526664897799,0.0083099864423275,0.00441928021609783,0.00478160614147782,0.00835898332297802,0.0100166546180844,0.00872667785733938,0.041375208646059,0.00343337701633573,0.00580845354124904,0.00458178669214249,0.00493878545239568,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } Transform: *16 { a: 0.0413367713843446,0.124663369007615,0.991337634166903,0,0.987788531867112,-0.154268921993168,-0.0217890531665547,0,0.150216291556795,0.980132642457207,-0.12951804433764,0,-67.7704774647754,6.06441864970652,-0.00534795101654122,1 } TransformLink: *16 { a: 0.041336777725169,0.987788683388224,0.150216314599115,0,0.124663387373597,-0.154268944720777,0.980132786854868,0,0.991337642531241,-0.0217890533503982,-0.129518045430439,0,2.05070381711907,67.878345646167,4.23560315542674,1 } } Deformer: 135114704, "SubDeformer::Cluster_R_eyeBall_joint", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *145 { a: 152,155,156,157,160,162,164,179,381,828,833,884,1090,1091,1162,1746,1747,1748,1758,5413,5443,5474,5503,5504,10457,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432 } Weights: *145 { a: 0.0593679919838905,0.0537738427519798,0.0508999116718769,0.0431445837020874,0.0444539561867714,0.0391181632876396,0.0437302514910698,0.0584536902606487,0.025000000372529,0.0345351696014404,0.0405548587441444,0.0420879870653152,0.0314351692795753,0.026578277349472,0.0279440488666296,0.0444546975195408,0.0465724915266037,0.0393374674022198,0.0356687866151333,0.00325712328776717,0.00218713586218655,0.00430441554635763,0.00267448276281357,0.00222410587593913,0.00167662848252803,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } Transform: *16 { a: 0.0387875421844768,0.100028338340874,0.994228268392548,0,0.985236061125961,-0.169864842686071,-0.0213467985085488,0,0.166749143805904,0.980377538424147,-0.105140181358115,0,-67.7629265753648,7.41129582551143,2.32996594654076,1 } TransformLink: *16 { a: 0.0387875481371354,0.985236212328475,0.166749169396613,0,0.100028353235238,-0.16986486797919,0.980377684403767,0,0.994228275139952,-0.0213467986534204,-0.105140182071657,0,-0.42949996447401,68.0711452162903,4.2785157263196,1 } } Deformer: 135117040, "SubDeformer::Cluster_L_UpperArm", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *1036 { a: 1809,1812,1817,1818,1819,1820,1826,1846,1847,1848,1849,2007,3408,3418,3422,3467,3468,3473,3474,3475,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205,4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4238,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437, 4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,5753,5754,5755,5756,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5805,5806,5807,5810,5812,5815,5819,5825,5826,5827,5828,5829,5830,5831,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5853,5854,5862,5863,5864,5867,5868,5869,5873,5874,5877,5878,5879,5880,5882,5883,5884,5885,5886,5887,5888,5889,5890,5893,5894,5895,5896,5897,5898,5901,5902,5903,5904,5905,5906,5907,5908,5909,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6080,6081,6082,6083,6084,6086,6089,6093,6102,6110,6111,6112,6113,6114,6115,6128,6129,6130,6131,6132,6133,6134,6135,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6183,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6225,6226,6227,6228,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6462,6463,6467,6469,6484, 6485,6486,6488,6489,6491,6492,6493,6494,6495,10499,10500,10506,10507,10508,10509,10511,10518,10519,10520,10521,10522,10523,10524,10525,10526,10530,10531,10532,10533,10534,10535,10538,10539,10541,10542,10543,10544,10545,10546,10547,10548,10549,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10581,10630,10631,10635,10636,10638,10639,10641,10642,10643,10644,10645,10646,10647,10648,10671,10672,10673,10674,10675,10676,10678,10679,10680,10681,10682,10683,10684,10689,10690,10693,10694,10695,10696,10705,10706,10707,10708,10713,10714,10715,10716,10717,10718,10733,10734,10735,10738,10739,10740,10741,10746,10747,10748,10749,10750,10751,10754,10755,10762,10763,10764,10765,10766,10767,10768,10769,10770,10795,10796,10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10873,10874,10875,10878,10879,10882,10883,10884,10885,10886,10891,10892,10895,10896,10897,10899 } Weights: *1036 { a: 0.0248133204877377,0.0324307568371296,0.0356169603765011,0.0207698214799166,0.030156422406435,0.034252405166626,0.0145227815955877,0.0309497360140085,0.0301462095230818,0.0345631539821625,0.0348508656024933,0.0111808087676764,0.0224440488964319,0.0279246065765619,0.0208277739584446,0.0215720869600773,0.0628888607025146,0.0285741072148085,0.0372246988117695,0.0393813662230968,0.671951174736023,0.708763182163239,0.777954936027527,0.727325677871704,0.781686902046204,0.867705702781677,0.837035357952118,0.925296008586884,0.863075733184814,0.948842465877533,0.771288096904755,0.697845637798309,0.824166059494019,0.849767506122589,0.653732538223267,0.61710000038147,0.649790644645691,0.675434172153473,0.653554141521454,0.663696765899658,0.689136385917664,0.704505622386932,0.563047289848328,0.560208439826965,0.562112629413605,0.566362500190735,0.601464331150055,0.558381021022797,0.557335078716278,0.596216917037964,0.678151428699493,0.60462486743927,0.552501976490021,0.614971101284027,0.498361498117447,0.484575420618057,0.485800296068192,0.488230407238007,0.487484663724899,0.48967444896698,0.486129522323608,0.49028691649437,0.479702353477478,0.489778876304626,0.49161484837532,0.49787762761116,0.492680281400681,0.492597579956055,0.511562764644623,0.519893407821655,0.503320753574371,0.502098560333252,0.502025127410889,0.507532954216003,0.498470097780228,0.497562944889069,0.523999631404877,0.516897320747375,0.526336133480072,0.508612632751465,0.498038053512573,0.510039269924164,0.562739551067352,0.607795894145966,0.562466561794281,0.527937889099121,0.641221940517426,0.629185378551483,0.561213493347168,0.509782731533051,0.516025304794312,0.702741324901581,0.760756015777588,0.810972273349762,0.740057587623596,0.892389535903931,0.807673513889313,0.937207698822021,0.851298034191132,0.797609925270081,0.729173719882965,0.838807702064514,0.679248750209808,0.643914341926575,0.683527052402496,0.706433594226837,0.685965597629547,0.681573331356049,0.701968908309937,0.574149489402771,0.581609189510345,0.569718241691589,0.626542508602142, 0.637052655220032,0.576336443424225,0.577661514282227,0.633669376373291,0.669133603572845,0.709506511688232,0.569708585739136,0.640199959278107,0.498486876487732,0.491136640310287,0.465899139642715,0.466461837291718,0.484352439641953,0.467008382081985,0.487460076808929,0.471763491630554,0.487598240375519,0.497599720954895,0.490725487470627,0.507308483123779,0.530655086040497,0.519746243953705,0.505765855312347,0.513488173484802,0.50432813167572,0.498367249965668,0.535860955715179,0.52631139755249,0.53908234834671,0.513603389263153,0.491457641124725,0.51626843214035,0.629995942115784,0.582840859889984,0.582438230514526,0.541063547134399,0.656917929649353,0.66849946975708,0.579762041568756,0.516530930995941,0.525534272193909,0.759033679962158,0.805777370929718,0.741298615932465,0.700179159641266,0.890966236591339,0.812793016433716,0.942499041557312,0.863510012626648,0.962687611579895,0.887522578239441,0.579064846038818,0.585617065429688,0.583216905593872,0.589302241802216,0.62506777048111,0.665343403816223,0.708398222923279,0.491320610046387,0.489428728818893,0.488226443529129,0.503230571746826,0.492925882339478,0.49119159579277,0.489473223686218,0.493882149457932,0.482531487941742,0.493873596191406,0.536814033985138,0.513014674186707,0.499569326639175,0.773965537548065,0.838369727134705,0.793033599853516,0.730684757232666,0.838671863079071,0.913813412189484,0.95292329788208,0.877314269542694,0.604370296001434,0.595778584480286,0.592511534690857,0.652695834636688,0.69582200050354,0.741239070892334,0.471526563167572,0.471250087022781,0.495319962501526,0.505406856536865,0.471759021282196,0.489663749933243,0.475140810012817,0.492314904928207,0.552528321743011,0.520199775695801,0.480048954486847,0.734615802764893,0.784961819648743,0.873987674713135,0.930249631404877,0.953011870384216,0.682857215404511,0.642761290073395,0.486127644777298,0.484876960515976,0.487802773714066,0.485596090555191,0.47825613617897,0.498049736022949,0.509337723255157,0.577197253704071,0.564165592193604,0.606435894966125,0.529352843761444,0.817949295043945, 0.768238842487335,0.898294389247894,0.941824316978455,0.714447021484375,0.671498954296112,0.465435177087784,0.464698791503906,0.465445667505264,0.469987124204636,0.473710209131241,0.51437783241272,0.599595248699188,0.632000386714935,0.584417045116425,0.542906880378723,0.640533328056335,0.542687952518463,0.530597150325775,0.400000005960464,0.384298652410507,0.400000005960464,0.383724123239517,0.381333291530609,0.383433222770691,0.381000250577927,0.383127093315125,0.381277710199356,0.383326292037964,0.382163017988205,0.383975028991699,0.47921347618103,0.481083244085312,0.61014050245285,0.606766104698181,0.590470552444458,0.591465532779694,0.566190838813782,0.57214081287384,0.544518530368805,0.554570317268372,0.531055212020874,0.400000005960464,0.335283935070038,0.383234649896622,0.382744610309601,0.383036494255066,0.384032219648361,0.481736332178116,0.628333568572998,0.603837788105011,0.573779404163361,0.547561168670654,0.449999988079071,0.400000005960464,0.335080444812775,0.383023858070374,0.382573395967484,0.382903724908829,0.384047895669937,0.482000142335892,0.5356525182724,0.550000011920929,0.550000011920929,0.550000011920929,0.449999988079071,0.400000005960464,0.390052914619446,0.389245510101318,0.388679087162018,0.388942748308182,0.389945924282074,0.489096462726593,0.541556060314178,0.54068124294281,0.550000011920929,0.540895283222198,0.481140583753586,0.572645962238312,0.449999988079071,0.449999988079071,0.490680992603302,0.535034477710724,0.533327996730804,0.5282963514328,0.528202474117279,0.540067374706268,0.570852518081665,0.606686115264893,0.61121392250061,0.63078111410141,0.524792909622192,0.449999988079071,0.449999988079071,0.516527891159058,0.390509039163589,0.389715254306793,0.389851599931717,0.388801574707031,0.389304488897324,0.388022065162659,0.389052659273148,0.387650609016418,0.389169931411743,0.387800872325897,0.449999988079071,0.449999988079071,0.577778518199921,0.581358850002289,0.564002513885498,0.563650250434875,0.547590792179108,0.543173015117645,0.53354948759079,0.526419401168823,0.449999988079071, 0.516008198261261,0.390943586826324,0.389945238828659,0.38910847902298,0.388745188713074,0.388970702886581,0.449999988079071,0.596204936504364,0.573783755302429,0.548210203647614,0.527739763259888,0.5,0.449999988079071,0.391117632389069,0.389978528022766,0.389020830392838,0.388615101575851,0.388895183801651,0.449999988079071,0.5,0.5,0.5,0.5,0.449999988079071,0.5,0.394442826509476,0.39354795217514,0.392851710319519,0.392656177282333,0.393025666475296,0.449999988079071,0.5,0.611612975597382,0.5,0.5,0.449999988079071,0.449999988079071,0.5,0.5,0.5,0.5,0.5,0.548342764377594,0.528138875961304,0.549952268600464,0.576339483261108,0.548967957496643,0.580441653728485,0.585061550140381,0.601735413074493,0.579566240310669,0.551377356052399,0.527995407581329,0.514831244945526,0.515691518783569,0.523988962173462,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.100000001490116,0.150000005960464,0.200000002980232,0.200000002980232,0.200000002980232,0.27412673830986,0.167289391160011,0.115354761481285,0.201556026935577,0.0854078829288483,0.118652857840061,0.0980373993515968,0.196852833032608,0.319334238767624,0.0512989424169064,0.0455133803188801,0.225141897797585,0.125852674245834,0.126647189259529,0.236517712473869,0.039642658084631,0.0356426239013672,0.284983724355698,0.103368081152439,0.0672476515173912,0.0664668381214142,0.0355801954865456,0.0285070389509201,0.259743124246597,0.424105197191238,0.433663100004196,0.3836570084095,0.0306853652000427,0.0658317655324936,0.187660560011864, 0.0972413942217827,0.255493760108948,0.237476676702499,0.0979085341095924,0.213220462203026,0.242596372961998,0.417047560214996,0.443311303853989,0.452294915914536,0.389263302087784,0.485368460416794,0.510531723499298,0.485199838876724,0.386874854564667,0.475898832082748,0.289770364761353,0.372936189174652,0.555619776248932,0.525600433349609,0.0963400900363922,0.400000005960464,0.159999996423721,0.200000002980232,0.25,0.604445457458496,0.400000005960464,0.607856810092926,0.200000002980232,0.250050365924835,0.25,0.290451616048813,0.218649312853813,0.275064080953598,0.354624599218369,0.443818986415863,0.035328347235918,0.462831854820251,0.432470977306366,0.299539059400558,0.151089325547218,0.159999996423721,0.119999997317791,0.159999996423721,0.390148997306824,0.40856060385704,0.263671666383743,0.324121683835983,0.119999997317791,0.453196138143539,0.312783122062683,0.352736085653305,0.259641885757446,0.515015542507172,0.513885915279388,0.25,0.246078610420227,0.422540277242661,0.244702324271202,0.25,0.249711647629738,0.289972990751266,0.350430130958557,0.370051473379135,0.336516976356506,0.329566091299057,0.321041613817215,0.369962871074677,0.302240073680878,0.603537738323212,0.594955384731293,0.318372488021851,0.329138964414597,0.273266732692719,0.280394911766052,0.30194765329361,0.286078155040741,0.286492615938187,0.281629592180252,0.281048178672791,0.268779307603836,0.256048232316971,0.266601055860519,0.57342404127121,0.570661962032318,0.277991205453873,0.257622718811035,0.250156819820404,0.636170923709869,0.269819021224976,0.253984391689301,0.26193243265152,0.581623613834381,0.301737904548645,0.250291764736176,0.25,0.25,0.25,0.253225922584534,0.25,0.25,0.25,0.251081615686417,0.257732510566711,0.275459051132202,0.268927812576294,0.684864163398743,0.70682168006897,0.597854673862457,0.400000005960464,0.598615825176239,0.682989597320557,0.67874550819397,0.69228321313858,0.722083210945129,0.681694328784943,0.838652670383453,0.604545176029205,0.59822154045105,0.854656279087067,0.960296213626862,0.619710147380829,0.873738169670105, 0.616327583789825,0.643613696098328,0.857911109924316,0.812362492084503,0.862970173358917,0.720022320747375,0.703288555145264,0.736754536628723,0.811635494232178,0.699999988079071,0.699999988079071,0.872642815113068,0.752733886241913,0.771798610687256,0.796925663948059,0.907861709594727,0.796585321426392,0.632541060447693,0.720515251159668,0.904353618621826,0.516643166542053,0.761389434337616,0.608241140842438,0.501608371734619,0.497893631458282,0.626036822795868,0.721234023571014,0.537346363067627,0.932626843452454,0.884767174720764,0.728157877922058,0.818203866481781,0.945107996463776,0.96215945482254,0.962549090385437,0.955218255519867,0.95369279384613,0.934603452682495,0.911027312278748,0.93795645236969,0.899999976158142,0.944583356380463,0.923703551292419,0.902863442897797,0.94034343957901,0.911679923534393,0.937895774841309,0.977745413780212,0.937895774841309,0.875791609287262,0.935270428657532,0.977102100849152,0.876445770263672,0.782918393611908,0.779361724853516,0.849494099617004,0.800993323326111,0.670758605003357,0.639913201332092,0.914563477039337,0.899999976158142,0.436270833015442,0.899999976158142,0.899999976158142,0.446738928556442,0.899999976158142,0.899999976158142,0.507570087909698,0.899999976158142,0.645191788673401,0.899999976158142,0.50766259431839,0.900056779384613,0.888832092285156,0.22633358836174,0.238661527633667,0.0754047632217407,0.202322289347649,0.0670094043016434,0.0905131101608276,0.21491114795208,0.0889049097895622,0.0970706418156624,0.262058734893799,0.0366747006773949,0.0293817147612572,0.0843997374176979,0.0237083174288273,0.0845616087317467,0.0877782180905342,0.0251938421279192,0.0351834110915661,0.101867720484734,0.104017481207848,0.0342402532696724,0.00395678542554379,0.00787932239472866,0.0644239708781242,0.0501892194151878,0.011177022010088,0.00876086298376322,0.00236685667186975,0.00262700393795967,0.0177492592483759,0.0270002540200949,0.00567461596801877,0.0109919682145119,0.00504005933180451,0.0101816318929195,0.00111566262785345,0.244774356484413,0.245710656046867,0.161167815327644, 0.129841148853302,0.550000011920929,0.550000011920929,0.899999976158142,0.923249185085297,0.963105201721191,0.966649770736694,0.499764204025269,0.49950385093689,0.398110508918762,0.11331570148468,0.967785358428955,0.931321263313293,0.961978733539581,0.918358266353607,0.899999976158142,0.906760454177856,0.804405212402344,0.800993323326111,0.813079595565796,0.944771707057953,0.993404805660248,0.991805374622345,0.994329869747162,0.995069265365601,0.986856520175934,0.985380828380585,0.900154709815979,0.30867263674736,0.373795926570892,0.335957050323486,0.0618258863687515,0.803212404251099,0.870715856552124,0.9056676030159,0.873792052268982,0.954519331455231,0.975940942764282,0.962519526481628,0.927388370037079,0.953723430633545,0.945045053958893,0.703007698059082,0.649999976158142,0.550000011920929,0.891666114330292,0.771452724933624,0.80041229724884,0.975884914398193,0.971213459968567,0.0259718224406242,0.0012870270293206,0.00200663669966161,0.029718391597271,0.00127148546744138,0.550000011920929,0.0947002172470093,0.960593581199646,0.699999988079071,0.699999988079071,0.900747776031494,0.949926972389221,0.94882196187973,0.940486431121826,0.88645213842392,0.965311646461487,0.816892683506012,0.990643560886383,0.980519413948059,0.983963012695313,0.969162106513977,0.97836834192276,0.993345022201538,0.891930460929871,0.936130821704865,0.977292537689209,0.981002569198608,0.99278736114502,0.973240435123444,0.833459258079529,0.990656852722168,0.878318190574646,0.925347745418549,0.824953973293304,0.499562233686447,0.396667510271072,0.41030552983284,0.498761624097824,0.280284285545349,0.237335756421089,0.30772477388382,0.899999976158142,0.198815822601318,0.0269320420920849,0.0825262069702148,0.0013631657930091,0.277416676282883,0.0998596251010895,0.0227861143648624,0.421255558729172,0.39227157831192,0.387923717498779,0.241641104221344,0.387358397245407,0.235032498836517,0.899999976158142,0.0737694650888443,0.0730752050876617,0.714662909507751,0.801311314105988,0.51268196105957,0.0958159640431404,0.0955943614244461,0.0479661673307419, 0.0832242593169212,0.065484806895256,0.0121975634247065,0.0638823583722115,0.931115567684174,0.927065253257751,0.937691807746887,0.971710443496704,0.0130868805572391,0.0134305208921433,0.0142362248152494,0.0124444514513016,0.00878832675516605,0.00935584492981434,0.0142447035759687,0.0179274175316095,0.0196094270795584,0.0110583864152431,0.0136709315702319,0.0157110877335072,0.0130274835973978,0.0200563613325357,0.0199966225773096,0.0141086541116238,0.0296928975731134,0.0144526325166225,0.0194817539304495,0.0254780128598213,0.0564162321388721,0.0327776856720448,0.0240716673433781,0.0244537517428398,0.0639102533459663,0.0245793573558331,0.0386718362569809,0.0488913655281067,0.150000005960464,0.25,0.25,0.150000005960464,0.0290121491998434,0.0260587334632874,0.0245764590799809,0.0191784016788006,0.0230613481253386,0.0223486497998238,0.0250147357583046,0.0255272854119539,0.0297513008117676,0.0315962955355644,0.0310370977967978,0.300000011920929,0.200000002980232,0.100000001490116,0.200000002980232,0.100000001490116,0.100000001490116,0.150000005960464,0.150000005960464,0.200000002980232,0.0232919920235872,0.021919434890151,0.0169797874987125,0.0198447946459055,0.0152793126180768,0.0129596162587404,0.0160284861922264,0.0172904022037983,0.0389271304011345,0.0530599653720856,0.0379460118710995,0.0178657043725252,0.0232501439750195,0.0033667734824121,0.0344650968909264,0.022616570815444,0.0295472107827663,0.0618020556867123,0.0412753038108349,0.0489884726703167,0.200000002980232,0.300000011920929,0.300000011920929,0.200000002980232,0.0818059369921684,0.0538022443652153,0.25,0.0117521230131388,0.0175466556102037,0.00896589178591967,0.0186237078160048,0.0159933008253574,0.00700326915830374,0.0725999176502228,0.0467990785837173,0.0598451197147369,0.0907235890626907,0.0269097052514553,0.100000001490116,0.022157235071063,0.0218270290642977,0.0214322656393051,0.0171046778559685,0.0158396698534489,0.016515176743269,0.0149005027487874,0.0257846564054489,0.0189873352646828,0.015676299110055,0.0149392280727625,0.0261617973446846,0.0244224686175585, 0.0294471122324467,0.032239593565464,0.0307376030832529,0.200000002980232,0.00128650886472315,0.00292351190000772,0.00493186060339212,0.00264519662596285,0.00147427699994296,0.00343792489729822,0.0104314740747213,0.00621141539886594,0.0075686234049499,0.00646165106445551,0.0112000769004226,0.0216709971427917,0.0229892302304506,0.0251554101705551,0.0266251973807812,0.029200442135334,0.0369292497634888,0.0856243371963501,0.0637016594409943,0.0739372000098228,0.0939565300941467,0.0531358830630779,0.0332136414945126,0.200000002980232,0.025435546413064,0.0291993785649538,0.0291943531483412,0.150000005960464,0.200000002980232,0.200000002980232,0.150000005960464,0.300000011920929,0.300000011920929,0.25,0.25,0.100000001490116,0.150000005960464,0.150000005960464,0.100000001490116,0.0197086650878191,0.0257528014481068,0.0543842241168022,0.100000001490116,0.100000001490116,0.00103605363983661,0.0010513128945604,0.00975374132394791,0.0106005435809493,0.00368177169002593,0.00513071101158857,0.00379393436014652,0.100000001490116,0.150000005960464,0.100000001490116,0.300000011920929,0.25,0.200000002980232,0.150000005960464,0.150000005960464,0.0276906862854958,0.0262255556881428,0.200000002980232,0.300000011920929,0.0933467522263527,0.0796394571661949,0.150000005960464,0.150000005960464,0.25,0.150000005960464,0.100000001490116,0.0526373125612736,0.032817617058754,0.0278576482087374,0.0460938476026058,0.0238594505935907,0.0493467636406422,0.200000002980232,0.0257651209831238,0.100000001490116,0.100000001490116,0.0203086417168379,0.0267641171813011,0.100000001490116,0.0280830003321171,0.100000001490116,0.0327643901109695,0.100000001490116,0.00101729144807905,0.100000001490116,0.0273743886500597,0.150000005960464,0.100000001490116,0.0151567989960313,0.0151161625981331,0.0236284919083118,0.0195639282464981,0.0170303732156754,0.00267774448730052,0.0167572274804115,0.200000002980232,0.300000011920929,0.150000005960464,0.00178090971894562 } Transform: *16 { a: 0.67453550615253,-0.00572428005084884,0.738220184069585,0,-0.734845382925873,-0.101024949199617,0.670668459615116,0,0.0707395621326576,-0.994867443570327,-0.0723513736431941,0,37.9653360667959,3.83014441425826,-45.5581705043554,1 } TransformLink: *16 { a: 0.674535525364217,-0.734845403855267,0.0707395641474163,0,-0.00572427983321717,-0.101024945358745,-0.99486740574642,0,0.738220225293056,0.670668497066384,-0.0723513776834179,0,8.04491980264829,58.8400225859223,-2.17136188975424,1 } } Deformer: 135118208, "SubDeformer::Cluster_R_UpperArm", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *692 { a: 137,150,170,1740,1741,1745,1790,1791,1792,1797,1798,1799,5014,5015,5020,5021,5023,5025,5026,5029,5031,5032,5034,5037,5039,5040,5041,5042,5043,5044,5045,5052,5053,5060,5061,5062,5066,5067,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5320,5321,5322,5323,5335,5338,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5374,5375,5376,5379,5381,5384,5387,5388,5394,5395,5396,5397,5398,5399,5400,5402,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5423,5424,5432,5433,5434,5437,5438,5443,5444,5447,5448,5449,5450,5452,5453,5454,5455,5456,5457,5458,5459,5460,5462,5463,5464,5465,5466,5467,5471,5472,5473,5474,5475,5477,5478,5479,5480,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670, 5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5731,5732,5734,5735,5736,5737,5738,5743,5744,5745,10054,10055,10060,10061,10062,10063,10064,10065,10066,10074,10075,10076,10077,10078,10079,10080,10081,10082,10087,10088,10089,10090,10091,10092,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10113,10114,10115,10117,10118,10119,10120,10121,10122,10123,10124,10125,10126,10139,10143,10190,10191,10195,10196,10198,10200,10201,10202,10203,10204,10205,10206,10207,10208,10233,10234,10235,10236,10237,10238,10242,10243,10244,10245,10246,10247,10248,10254,10257,10258,10259,10260,10261,10270,10271,10272,10273,10278,10279,10280,10281,10282,10283,10298,10299,10300,10303,10304,10305,10306,10307,10308,10311,10312,10313,10314,10315,10316,10319,10320,10329,10330,10331,10332,10333,10334,10335,10336,10337,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10450,10451,10454,10455,10457,10458,10459,10461,10463,10465,10469,10470,10472,10473,10474,10496 } Weights: *692 { a: 0.020969782024622,0.0784795209765434,0.0287694744765759,0.0504049845039845,0.0261336229741573,0.0225135684013367,0.0190182253718376,0.0650658458471298,0.113102801144123,0.0287809018045664,0.0305631123483181,0.0367412269115448,0.045618362724781,0.0385712683200836,0.0391182713210583,0.0349155254662037,0.0142096001654863,0.0279263593256474,0.0288654919713736,0.0265222284942865,0.0278860032558441,0.00829831324517727,0.0135858133435249,0.0204892382025719,0.0301536526530981,0.0261204000562429,0.0271750949323177,0.0435376390814781,0.0434467270970345,0.00748020503669977,0.0093948757275939,0.0218596905469894,0.0117206927388906,0.0366483367979527,0.0317994430661201,0.0213397722691298,0.0211695693433285,0.0263021904975176,0.0158387552946806,0.00751717295497656,0.0293513089418411,0.0307456348091364,0.0290009211748838,0.0319274589419365,0.0178887881338596,0.0296053178608418,0.0360307134687901,0.0467014126479626,0.0487850047647953,0.0501099713146687,0.063944086432457,0.0667659044265747,0.0546446703374386,0.0509453266859055,0.0416330173611641,0.0405608154833317,0.0397334024310112,0.0379403904080391,0.0407577157020569,0.034948106855154,0.0280988253653049,0.0205933395773172,0.0142618026584387,0.0142017956823111,0.0748932734131813,0.106558777391911,0.121540211141109,0.145699858665466,0.146187573671341,0.154134750366211,0.167685657739639,0.16518197953701,0.163050159811974,0.157242730259895,0.14082844555378,0.140541359782219,0.140519261360168,0.147883668541908,0.144016921520233,0.131500884890556,0.114455841481686,0.0923147946596146,0.0699141025543213,0.066122405230999,0.0590536631643772,0.0526484176516533,0.0622121058404446,0.0769118964672089,0.103977158665657,0.121694050729275,0.138020798563957,0.143885031342506,0.13387306034565,0.133046522736549,0.136080756783485,0.141146317124367,0.147136986255646,0.128097504377365,0.120865821838379,0.108399629592896,0.128162771463394,0.102392926812172,0.0810344889760017,0.163100302219391,0.161350920796394,0.178334593772888,0.181064888834953,0.0655111968517303,0.063481405377388,0.0538437478244305, 0.0520751960575581,0.0496388413012028,0.158261224627495,0.0590182505548,0.102999188005924,0.0509957335889339,0.0919065028429031,0.0938780084252357,0.0241554547101259,0.0186226647347212,0.0187003705650568,0.0800475478172302,0.0831176042556763,0.0880568027496338,0.0845041275024414,0.0829988718032837,0.0914682894945145,0.015033345669508,0.0151413809508085,0.00812804233282804,0.0082727400586009,0.281471788883209,0.172315835952759,0.120438225567341,0.209621414542198,0.100000001490116,0.100000001490116,0.0907326862215996,0.126658961176872,0.104050524532795,0.205078601837158,0.329326122999191,0.0560089275240898,0.0488733053207397,0.023843826726079,0.0134323202073574,0.0135761043056846,0.0251511782407761,0.00432062614709139,0.00379811157472432,0.296586275100708,0.0109487390145659,0.0712462216615677,0.0683919787406921,0.0371147282421589,0.0302848219871521,0.0929126441478729,0.26749175786972,0.429890275001526,0.439371526241302,0.0802547633647919,0.0334492512047291,0.0723082572221756,0.20095394551754,0.104419782757759,0.255707621574402,0.251929551362991,0.108305208384991,0.231429785490036,0.254417687654495,0.426591217517853,0.449845910072327,0.458420038223267,0.398676633834839,0.487502425909042,0.513588309288025,0.490238398313522,0.404504626989365,0.481194138526917,0.308680564165115,0.386695474386215,0.382963806390762,0.534600675106049,0.127761036157608,0.295493572950363,0.165520697832108,0.356632709503174,0.372464150190353,0.436508804559708,0.169452592730522,0.441070288419724,0.498201429843903,0.497700780630112,0.304001420736313,0.023136442527175,0.291925728321075,0.371426731348038,0.454690366983414,0.0379913710057735,0.470165699720383,0.440873682498932,0.310548096895218,0.15815258026123,0.314999997615814,0.349999994039536,0.391449093818665,0.394605964422226,0.349999994039536,0.372320175170898,0.458221673965454,0.565859317779541,0.459301829338074,0.276696681976318,0.263911247253418,0.184785902500153,0.520172536373138,0.521955013275146,0.497991144657135,0.481275767087936,0.430014997720718,0.483669489622116,0.497871071100235, 0.496094435453415,0.508753895759583,0.703245341777802,0.519935548305511,0.47540420293808,0.663387179374695,0.568387985229492,0.52303409576416,0.536066174507141,0.432498008012772,0.424478769302368,0.450523644685745,0.466012120246887,0.490012615919113,0.505570769309998,0.535811543464661,0.507548570632935,0.578609168529511,0.568595170974731,0.564144194126129,0.539054274559021,0.514491379261017,0.536900699138641,0.579529047012329,0.576918005943298,0.561050355434418,0.51742285490036,0.500973284244537,0.456103533506393,0.380446046590805,0.510196566581726,0.368948191404343,0.587899506092072,0.426884144544601,0.500829041004181,0.5,0.498094856739044,0.5,0.355805635452271,0.350002199411392,0.497277468442917,0.5,0.502760708332062,0.517215073108673,0.554297804832459,0.540830671787262,0.698667883872986,0.717258453369141,0.605572402477264,0.607015371322632,0.608008205890656,0.694056332111359,0.688709139823914,0.702353835105896,0.731380879878998,0.688754320144653,0.843828856945038,0.609543561935425,0.602585256099701,0.86238420009613,0.961804509162903,0.628379642963409,0.883107841014862,0.631122589111328,0.658645212650299,0.867809116840363,0.821233332157135,0.869235575199127,0.729809761047363,0.71179723739624,0.747385561466217,0.820916950702667,0.75,0.75,0.881841719150543,0.764201819896698,0.77573162317276,0.798143088817596,0.909145712852478,0.79645836353302,0.636041641235352,0.721963107585907,0.902325689792633,0.519720673561096,0.763687491416931,0.613580465316772,0.503093123435974,0.499536067247391,0.63247549533844,0.727182567119598,0.541991591453552,0.931566298007965,0.883416652679443,0.722454011440277,0.816012442111969,0.946555495262146,0.963951587677002,0.965491712093353,0.958467066287994,0.95552670955658,0.934015333652496,0.903437912464142,0.935317099094391,0.945562958717346,0.946810066699982,0.925385355949402,0.907459557056427,0.927021265029907,0.90165764093399,0.956426799297333,0.968130826950073,0.946015894412994,0.90613055229187,0.965386986732483,0.974541842937469,0.87210077047348,0.702958166599274,0.720231473445892,0.846153914928436, 0.649999976158142,0.574937224388123,0.632389008998871,0.89529275894165,0.740150988101959,0.489543944597244,0.54209840297699,0.585827589035034,0.490893453359604,0.662932693958282,0.498560518026352,0.504462003707886,0.768023788928986,0.568614304065704,0.647481024265289,0.504329919815063,0.716663599014282,0.822241127490997,0.200000002980232,0.200000002980232,0.200000002980232,0.21500101685524,0.261308073997498,0.244109690189362,0.244453296065331,0.153650611639023,0.434145867824554,0.312636703252792,0.914587438106537,0.923531234264374,0.964551270008087,0.969183504581451,0.499596208333969,0.499518573284149,0.383198082447052,0.104722216725349,0.967589974403381,0.931951761245728,0.957806706428528,0.921492457389832,0.901055753231049,0.905746698379517,0.649999976158142,0.649999976158142,0.649999976158142,0.944011509418488,0.992870390415192,0.991427659988403,0.993892729282379,0.994505882263184,0.98496025800705,0.983531951904297,0.901892483234406,0.285406172275543,0.353163778781891,0.200000002980232,0.0540348961949348,0.806423962116241,0.870517492294312,0.90487414598465,0.874945402145386,0.952277839183807,0.974283814430237,0.961661517620087,0.927177667617798,0.949196338653564,0.940062880516052,0.649999976158142,0.649999976158142,0.649999976158142,0.886188805103302,0.755742967128754,0.745639085769653,0.973658859729767,0.967490673065186,0.307189017534256,0.961516320705414,0.75,0.75,0.906072795391083,0.953899383544922,0.953052282333374,0.944958209991455,0.884655654430389,0.963573634624481,0.817773759365082,0.990259230136871,0.980742156505585,0.984100639820099,0.969443380832672,0.97771281003952,0.992744565010071,0.890227973461151,0.934164881706238,0.975787281990051,0.979732811450958,0.991906225681305,0.972508788108826,0.719477832317352,0.990604877471924,0.868284523487091,0.924786448478699,0.810649394989014,0.49951246380806,0.44170954823494,0.405982732772827,0.49727800488472,0.200000002980232,0.200000002980232,0.200000002980232,0.952634513378143,0.200000002980232,0.27403461933136,0.649999976158142,0.38769394159317,0.383743822574615, 0.23994854092598,0.382569253444672,0.664508998394012,0.649999976158142,0.649999976158142,0.515626490116119,0.100544266402721,0.0509672276675701,0.087710902094841,0.0689265504479408,0.0132357580587268,0.0673551708459854,0.934560120105743,0.929938912391663,0.939364671707153,0.9720698595047,0.294692665338516,0.121550291776657,0.318417549133301,0.00905121956020594,0.00918134674429893,0.0127136269584298,0.00864315219223499,0.00791239645332098,0.0114359743893147,0.0152849052101374,0.0093435849994421,0.00830323528498411,0.0142276557162404,0.0138462735339999,0.00945782754570246,0.00942206755280495,0.014098109677434,0.014433647505939,0.0178906451910734,0.0143724717199802,0.0173722356557846,0.00999974180012941,0.014885607175529,0.018461562693119,0.0190013404935598,0.0467968657612801,0.0458732806146145,0.030040280893445,0.0285561420023441,0.100000001490116,0.0229084882885218,0.0212979335337877,0.0210412256419659,0.200000002980232,0.200000002980232,0.300000011920929,0.300000011920929,0.0272503532469273,0.0286084562540054,0.0298874154686928,0.0449934229254723,0.0163005162030458,0.0198944453150034,0.0216402430087328,0.0210471544414759,0.022859338670969,0.100000001490116,0.280000001192093,0.25,0.100000001490116,0.200000002980232,0.100000001490116,0.200000002980232,0.150000005960464,0.100000001490116,0.200000002980232,0.0452159754931927,0.0238535013049841,0.0278255958110094,0.0225818119943142,0.0214288476854563,0.0191271770745516,0.0149979013949633,0.0175532065331936,0.0187588352710009,0.0202955156564713,0.018536027520895,0.0447154492139816,0.00276468903757632,0.00197926862165332,0.0182143114507198,0.0188962891697884,0.0188498459756374,0.0163978934288025,0.0165616180747747,0.0256021749228239,0.0200647842139006,0.25,0.25,0.280000001192093,0.280000001192093,0.0475268326699734,0.0186371058225632,0.300000011920929,0.0100746294483542,0.0147060882300138,0.00839911866933107,0.0143435792997479,0.0122731113806367,0.00548796262592077,0.0226557962596416,0.0203133597970009,0.019662719219923,0.0199346318840981,0.020324582234025,0.0183906629681587, 0.0200679711997509,0.0244641546159983,0.0194248016923666,0.0148040950298309,0.0158901512622833,0.0168812870979309,0.0146031798794866,0.018282238394022,0.0178614798933268,0.0153546407818794,0.0164247564971447,0.00759732443839312,0.00682812184095383,0.0230845659971237,0.0228842049837112,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.00130664382595569,0.00277592497877777,0.00490613374859095,0.00331772165372968,0.00152155803516507,0.00266357441432774,0.0092479046434164,0.00556127540767193,0.00729139242321253,0.0100202336907387,0.00581458257511258,0.0200388133525848,0.0211897641420364,0.023265078663826,0.0219263006001711,0.0309158023446798,0.0220311246812344,0.032503891736269,0.0242764744907618,0.0222708638757467,0.0228765457868576,0.0218025259673595,0.0208405908197165,0.0202518124133348,0.100000001490116,0.100000001490116,0.100000001490116,0.200000002980232,0.200000002980232,0.25,0.25,0.280000001192093,0.280000001192093,0.300000011920929,0.300000011920929,0.150000005960464,0.150000005960464,0.200000002980232,0.200000002980232,0.018878472968936,0.0199749954044819,0.0287722535431385,0.150000005960464,0.150000005960464,0.00271546677686274,0.00256413081660867,0.150000005960464,0.300000011920929,0.21673309803009,0.300000011920929,0.280000001192093,0.25,0.200000002980232,0.200000002980232,0.00260717002674937,0.0190196018666029,0.018177967518568,0.280000001192093,0.25,0.0214217882603407,0.0231172982603312,0.200000002980232,0.200000002980232,0.300000011920929,0.150000005960464,0.200000002980232,0.0189244467765093,0.0192747078835964,0.0219515785574913,0.0287356525659561,0.0202676299959421,0.0340243764221668,0.100000001490116,0.0197208076715469,0.150000005960464,0.150000005960464,0.0182612538337708,0.100000001490116,0.150000005960464,0.100000001490116,0.150000005960464,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.100000001490116,0.150000005960464,0.0247486010193825,0.200000002980232,0.100000001490116,0.0153244733810425,0.0152284130454063,0.0495516546070576,0.0565993711352348, 0.016888216137886,0.00252965185791254,0.200000002980232,0.0175220146775246,0.299232631921768,0.25,0.100000001490116,0.100000001490116,0.100000001490116,0.00133510527666658 } Transform: *16 { a: -0.703610227813238,-0.134747865534422,0.697693066516033,0,-0.691373621028306,-0.096955071047359,-0.715962418756415,0,0.164119304174336,-0.986125037071657,-0.0249425411674711,0,35.6837354126809,3.61653635564703,47.935408778235,1 } TransformLink: *16 { a: -0.703610240098373,-0.691373633099789,0.164119307039882,0,-0.134747884155574,-0.0969550844458285,-0.986125173346802,0,0.697693115008514,-0.71596246851869,-0.024942542901078,0,-7.84944240647482,59.3413889809175,-1.09440139796442,1 } } Deformer: 135119376, "SubDeformer::Cluster_L_Forearm", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *569 { a: 4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4097,4100,4101,4102,4103,4104,4105,4106,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4177,4178,4179,4181,4182,4183,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4206,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4226,4227,4228,4229,4241,4242,4243,4244,4245,4246,4247,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4271,4272,4273,4275,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294,4295,4296,4297,4303,4304,4305,4306,4307,4308,4309,4310,4316,4317,4318,4319,4320,4321,4322,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4340,4341,4342,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,5849,5864,5868,5893,5894,5898,5922,5923,5926,5927,5936,5937,5941,5945,5960,5961,5962,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5983,5984,5985,5988,5989,5990,5991,5992,5993,5994,5995,5996,5998,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079, 6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6129,6130,6131,6132,6133,6134,6135,6137,6138,6139,6140,6141,6143,6144,6145,6146,6147,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6187,6188,6189,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6205,6206,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6232,6233,6234,6440,6441,6442,6443,6444,6445,6447,6448,6449,6460,6462,6463,6464,6467,6469,6492,6493,6494,6495,10539,10549,10551,10552,10555,10556,10557,10558,10559,10630,10875 } Weights: *569 { a: 0.0130823627114296,0.0145733961835504,0.017686540260911,0.0165265779942274,0.0167959500104189,0.0174484252929688,0.016780024394393,0.0140524292364717,0.0157845802605152,0.011062566190958,0.0132460324093699,0.0114357797428966,0.0128355557098985,0.0119939977303147,0.0116653498262167,0.00951695907860994,0.00925766211003065,0.0104927280917764,0.00973798986524343,0.00984845124185085,0.00993507821112871,0.00975114479660988,0.00607633776962757,0.00599473621696234,0.0056743398308754,0.00550404144451022,0.0102502526715398,0.00793300196528435,0.00754921929910779,0.0102707156911492,0.0141946421936154,0.00958449020981789,0.00787202641367912,0.0113529870286584,0.00406387401744723,0.00311212101951241,0.00396739272400737,0.00514390412718058,0.00437091197818518,0.00351857556961477,0.00339764193631709,0.00385786732658744,0.0028420789167285,0.00624275812879205,0.0056178723461926,0.00572511414065957,0.00517163006588817,0.00433397479355335,0.00553302885964513,0.0072903516702354,0.00947430171072483,0.00743232667446136,0.00597157049924135,0.00983333308249712,0.0094017731025815,0.00638639880344272,0.00423615192994475,0.00463204644620419,0.0131842866539955,0.016205782070756,0.0168030690401793,0.0144315091893077,0.0155597217381001,0.0161190386861563,0.0124592166393995,0.0160823706537485,0.0127456905320287,0.0113515695556998,0.0123431896790862,0.00939201284199953,0.00981035921722651,0.011846162378788,0.0105248801410198,0.00992137007415295,0.00986271444708109,0.00993407983332872,0.00622597057372332,0.00636665616184473,0.00579370558261871,0.0106505611911416,0.0107622062787414,0.00796970538794994,0.00837728101760149,0.00980836246162653,0.0121828624978662,0.0142783168703318,0.0083105219528079,0.0117224548012018,0.00993642210960388,0.00767917418852448,0.00782968103885651,0.00963418465107679,0.010017391294241,0.00670335255563259,0.0124240284785628,0.0128281209617853,0.0104267252609134,0.00943842064589262,0.0117991222068667,0.0113033540546894,0.00881361775100231,0.010496262460947,0.0065448647364974,0.00950655899941921,0.00414708536118269, 0.00531409168615937,0.0037915192078799,0.00361050292849541,0.00724903866648674,0.00917193572968245,0.0109936781227589,0.00282893585972488,0.00443767942488194,0.0038344138301909,0.00314834783785045,0.0100808590650558,0.0118633136153221,0.0118824616074562,0.00881960522383451,0.010578534565866,0.0101805999875069,0.00759252207353711,0.00988966319710016,0.00481296144425869,0.0045322859659791,0.0038556563667953,0.00742341438308358,0.00923402141779661,0.0108389323577285,0.0161522999405861,0.0171369854360819,0.0165906008332968,0.013085457496345,0.0101299583911896,0.0139119019731879,0.0115892337635159,0.00417448533698916,0.00503682112321258,0.00557324243709445,0.00721208564937115,0.00927688833326101,0.00580374430865049,0.0161867532879114,0.0157619155943394,0.0146748851984739,0.0115098869428039,0.0139557290822268,0.0118313496932387,0.00582014210522175,0.00960609689354897,0.00758995581418276,0.0119165414944291,0.00834765192121267,0.0101902317255735,0.00910148024559021,0.010863583534956,0.00955894403159618,0.010891298763454,0.00956323184072971,0.0128869153559208,0.0114246951416135,0.0122718652710319,0.0106279756873846,0.0111806727945805,0.00986453052610159,0.00981386378407478,0.00890371669083834,0.00823746528476477,0.00938957463949919,0.0100798653438687,0.0100390641018748,0.0116790756583214,0.0110674453899264,0.00995259359478951,0.00855241715908051,0.00950765889137983,0.0102941719815135,0.0102250250056386,0.0117573412135243,0.01140396296978,0.00521518662571907,0.00453681312501431,0.00546662602573633,0.00642735743895173,0.00689548952504992,0.00665472960099578,0.00734960194677114,0.00683766510337591,0.00571336830034852,0.00265343068167567,0.00448240898549557,0.010069171898067,0.00889439694583416,0.00931901391595602,0.0115090440958738,0.0130113819614053,0.00939598213881254,0.0112784979864955,0.0129523808136582,0.011606689542532,0.00683522317558527,0.00530915660783648,0.00553609151393175,0.00718199368566275,0.00632563466206193,0.00673306873068213,0.00695765623822808,0.00761112431064248,0.00759197911247611,0.00851711817085743,0.00801968108862638, 0.00914121046662331,0.00810293573886156,0.00927212275564671,0.00706543633714318,0.00801382400095463,0.00976375490427017,0.0113250613212585,0.00917198788374662,0.0104699106886983,0.008320945315063,0.00925183948129416,0.00746653834357858,0.00805097725242376,0.00470049539580941,0.00601205229759216,0.00583647331222892,0.00677375914528966,0.00773503351956606,0.00837157387286425,0.00845489930361509,0.00722456257790327,0.0102738551795483,0.00940028857439756,0.00814017094671726,0.00690067606046796,0.00386490998789668,0.00445980951189995,0.00563889276236296,0.00669783353805542,0.00779449241235852,0.00851565226912498,0.00859024841338396,0.00727401813492179,0.00593474367633462,0.00519725400954485,0.0045314054004848,0.00405027437955141,0.00266629084944725,0.0022423192858696,0.00348280230537057,0.00426881341263652,0.00503883510828018,0.00546713080257177,0.00537728983908892,0.0044288095086813,0.0035017451737076,0.00562617788091302,0.0025928404647857,0.00231737154535949,0.0061970972456038,0.00331592443399131,0.00674485834315419,0.00590951694175601,0.00519637437537313,0.00445498526096344,0.004665806889534,0.0081846471875906,0.00666993763297796,0.00779372174292803,0.00913236383348703,0.00815228745341301,0.00982468761503696,0.011363198980689,0.0101974476128817,0.00896517001092434,0.0075426627881825,0.00640195840969682,0.00575173040851951,0.00700918631628156,0.00673683220520616,0.0317902453243732,0.0211220774799585,0.0194973219186068,0.01398088876158,0.0204283185303211,0.00319192162714899,0.0104818921536207,0.00730531290173531,0.00450129853561521,0.00591684225946665,0.00417169742286205,0.00356268719770014,0.0104690222069621,0.00509927375242114,0.00186102197039872,0.00145455589517951,0.001659722533077,0.00481847347691655,0.00597766879945993,0.00810802355408669,0.00285123847424984,0.00348622654564679,0.0038478837814182,0.00459734443575144,0.00294839451089501,0.00143713282886893,0.00252975267358124,0.00263041467405856,0.00343446247279644,0.0047440086491406,0.00173946388531476,0.00166033732239157,0.00497205508872867,0.00735520524904132, 0.00511531252413988,0.00298283714801073,0.0026974487118423,0.0096267145127058,0.00457618525251746,0.00590613065287471,0.00405954755842686,0.00201193033717573,0.00443566776812077,0.00177055958192796,0.00127172539941967,0.00133948377333581,0.00157687079627067,0.00116036820691079,0.00138072378467768,0.00185424415394664,0.00173488212749362,0.00211239885538816,0.110307686030865,0.270310074090958,0.180308550596237,0.0525071881711483,0.0310453362762928,0.0122003210708499,0.0146832931786776,0.0376727655529976,0.0653965249657631,0.0889726653695107,0.0620435625314713,0.100000001490116,0.0414770133793354,0.0541006587445736,0.019134471192956,0.05965656042099,0.0883200764656067,0.0621042251586914,0.0222545862197876,0.0621042251586914,0.124208390712738,0.0647295713424683,0.0228978954255581,0.118719235062599,0.215932756662369,0.219186872243881,0.143957927823067,0.199006676673889,0.328733921051025,0.359697282314301,0.0854365229606628,0.100000001490116,0.561005890369415,0.100000001490116,0.100000001490116,0.548947274684906,0.100000001490116,0.100000001490116,0.492050230503082,0.100000001490116,0.352902323007584,0.100000001490116,0.490042060613632,0.099943220615387,0.111167907714844,0.766309976577759,0.753124237060547,0.901639759540558,0.788366317749023,0.910683929920197,0.895671486854553,0.778757274150848,0.895110487937927,0.888791561126709,0.73319685459137,0.947233974933624,0.955398559570313,0.902906775474548,0.955532312393188,0.900637269020081,0.896606624126434,0.953525960445404,0.936966776847839,0.888297438621521,0.881877779960632,0.928057014942169,0.988516747951508,0.977068960666656,0.928149878978729,0.945951581001282,0.959586977958679,0.95492297410965,0.983144521713257,0.965573668479919,0.971107244491577,0.96269965171814,0.965506434440613,0.952936172485352,0.973325133323669,0.987694561481476,0.976295530796051,0.993065416812897,0.995336413383484,0.98855584859848,0.991537272930145,0.980835735797882,0.96312689781189,0.967631757259369,0.859552204608917,0.924339771270752,0.934046864509583,0.924542844295502,0.932335555553436,0.829179406166077, 0.84100079536438,0.670541524887085,0.984790861606598,0.807817339897156,0.832724750041962,0.961030125617981,0.975924670696259,0.895998060703278,0.860245585441589,0.953859925270081,0.750764131546021,0.750919044017792,0.833233892917633,0.863375008106232,0.449999988079071,0.449999988079071,0.859209895133972,0.065053902566433,0.0300639923661947,0.0115915685892105,0.499764204025269,0.49950385093689,0.601146101951599,0.882238209247589,0.915871739387512,0.0243195462971926,0.0466393828392029,0.0380212739109993,0.0137503705918789,0.0791014283895493,0.195594787597656,0.199006676673889,0.186920404434204,0.0388490706682205,0.0013784485636279,0.00267337798140943,0.0028356306720525,0.0120388474315405,0.0138825234025717,0.0989195108413696,0.690626382827759,0.625692307949066,0.662807583808899,0.935847699642181,0.00865662377327681,0.0046409317292273,0.00987609662115574,0.0168349966406822,0.0235452111810446,0.0170978829264641,0.020403016358614,0.0229209307581186,0.0423493310809135,0.0523267090320587,0.296992301940918,0.349999994039536,0.449999988079071,0.103338062763214,0.227065414190292,0.198603168129921,0.0149681465700269,0.0262108184397221,0.94562828540802,0.972592830657959,0.965178906917572,0.936788022518158,0.817106544971466,0.817820966243744,0.982129037380219,0.753523230552673,0.449999988079071,0.898417294025421,0.00714429467916489,0.0214342530816793,0.00914276763796806,0.00893051736056805,0.0117370849475265,0.00181147246621549,0.00124722113832831,0.00145479803904891,0.00118767411913723,0.00261793099343777,0.00285224639810622,0.00317385280504823,0.00173605617601424,0.00373418163508177,0.00669426564127207,0.00210592360235751,0.00411897618323565,0.020949462428689,0.165792167186737,0.00323831802234054,0.119074746966362,0.0746522545814514,0.172979086637497,0.499562233686447,0.601501882076263,0.588120579719543,0.500665545463562,0.715467512607574,0.754183232784271,0.689664840698242,0.100000001490116,0.754693031311035,0.791724503040314,0.945742607116699,0.905741691589355,0.97682249546051,0.830595850944519,0.719328463077545,0.892614543437958, 0.958270907402039,0.577101588249207,0.606267750263214,0.610401690006256,0.755581021308899,0.611320614814758,0.761284351348877,0.100000001490116,0.915168702602386,0.912965893745422,0.836812496185303,0.285337090492249,0.198688685894012,0.922615230083466,0.00135110120754689,0.896957993507385,0.0293768588453531,0.0304955970495939,0.0248932670801878,0.0114057706668973,0.00152966915629804,0.00443700607866049,0.00404184451326728,0.00181462150067091,0.00150442542508245,0.00210763537324965,0.0020971957128495,0.00152598856948316,0.00385429011657834,0.00210404885001481,0.00414984626695514 } Transform: *16 { a: 0.662226976029194,0.128399379241995,0.738220153937706,0,-0.700126772726758,-0.245002464392823,0.670668514419641,0,0.266979179766695,-0.960982491477815,-0.072351400707657,0,23.5674058806897,8.68539591712662,-45.5581716402116,1 } TransformLink: *16 { a: 0.662227010399801,-0.700126809064423,0.266979193623327,0,0.128399384753513,-0.245002474909506,-0.960982532727804,0,0.738220170844411,0.670668529779279,-0.0723514023646477,0,16.9097890202485,49.1825481658111,-1.24169085897477,1 } } Deformer: 135107696, "SubDeformer::Cluster_R_Forearm", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *460 { a: 5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,5113,5114,5115,5116,5117,5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5169,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5199,5206,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5226,5228,5232,5233,5234,5235,5236,5237,5243,5244,5245,5246,5247,5250,5251,5252,5253,5254,5255,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5419,5432,5433,5462,5466,5467,5478,5486,5489,5507,5508,5514,5516,5526,5527,5528,5529,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5560,5561,5562,5563,5564,5565,5566,5567,5568,5570,5571,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5684,5685,5686,5687,5688, 5689,5690,5691,5692,5693,5694,5695,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5735,5736,5737,5738,10097,10107,10108,10109,10110,10113,10115,10117,10143,10190,10447,10458 } Weights: *460 { a: 0.9543816447258,0.961428701877594,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.96088171005249,0.965084493160248,0.850000023841858,0.985790371894836,0.850000023841858,0.972073614597321,0.97113448381424,0.850000023841858,0.850000023841858,0.973477780818939,0.850000023841858,0.972114026546478,0.991701662540436,0.850000023841858,0.986414194107056,0.850000023841858,0.850000023841858,0.97951078414917,0.850000023841858,0.969846367835999,0.97387957572937,0.972824931144714,0.956462383270264,0.956553280353546,0.992519795894623,0.990605115890503,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.978140294551849,0.988279283046722,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.963351666927338,0.96820056438446,0.978660225868225,0.850000023841858,0.850000023841858,0.850000023841858,0.978830456733704,0.973697781562805,0.850000023841858,0.984161257743835,0.992482841014862,0.97064870595932,0.969254374504089,0.97099906206131,0.968072533607483,0.982111215591431,0.970394670963287,0.9639692902565,0.953298568725586,0.951214969158173,0.94989001750946,0.936055898666382,0.933234095573425,0.945355355739594,0.949054658412933,0.958366990089417,0.959439158439636,0.960266590118408,0.962059617042542,0.959242284297943,0.965051889419556,0.971901178359985,0.979406654834747,0.985738217830658,0.985798180103302,0.925106704235077,0.893441200256348,0.878459811210632,0.854300141334534,0.853812396526337,0.845865249633789,0.832314372062683,0.834818005561829,0.836949825286865,0.842757284641266,0.859171569347382,0.85945862531662,0.859480738639832,0.852116346359253,0.855983078479767,0.868499100208282,0.885544180870056,0.907685220241547,0.930085897445679,0.93387758731842,0.940946340560913,0.947351574897766,0.937787890434265,0.923088073730469,0.896022856235504,0.878305971622467,0.861979186534882,0.856114983558655,0.866126954555511,0.866953492164612,0.863919258117676,0.858853697776794,0.852863013744354, 0.871902525424957,0.879134178161621,0.891600370407104,0.871837258338928,0.897607088088989,0.918965518474579,0.836899697780609,0.838649094104767,0.821665406227112,0.818935096263886,0.934488832950592,0.936518609523773,0.94615626335144,0.947924792766571,0.950361132621765,0.841738760471344,0.94098174571991,0.897000789642334,0.949004292488098,0.908093512058258,0.906121969223022,0.97584456205368,0.981377363204956,0.981299638748169,0.91995245218277,0.916882395744324,0.911943197250366,0.915495872497559,0.917001128196716,0.908531725406647,0.984966635704041,0.984858632087708,0.991871953010559,0.991727232933044,0.521788418292999,0.5,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.523450016975403,0.5,0.850000023841858,0.5,0.5,0.5,0.5,0.850000023841858,0.850000023841858,0.500762045383453,0.850000023841858,0.501719176769257,0.850000023841858,0.507238328456879,0.850000023841858,0.509424269199371,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.56866580247879,0.583622395992279,0.797594547271729,0.765617549419403,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.850000023841858,0.688585638999939,0.715473115444183,0.55484527349472,0.579463958740234,0.647413372993469,0.698794841766357,0.710158050060272,0.679414689540863,0.624432146549225,0.572763860225677,0.564231753349304,0.595975279808044,0.615636348724365,0.618266224861145,0.635786294937134,0.655548989772797,0.66695636510849,0.662471175193787,0.643863558769226,0.626260459423065,0.600856244564056,0.603469014167786,0.620764255523682,0.640294432640076,0.65158623456955,0.64712917804718,0.628702044487,0.611316680908203,0.607571363449097,0.609140694141388,0.619702994823456,0.631768584251404, 0.638790547847748,0.63597971200943,0.624578416347504,0.613943815231323,0.658988177776337,0.627193629741669,0.0218165908008814,0.0352623462677002,0.026454109698534,0.0141577869653702,0.0133350491523743,0.00319730537012219,0.0023472539614886,0.006200619507581,0.00615918589755893,0.00416851649060845,0.0035773750860244,0.00362570304423571,0.0050879311747849,0.00134382385294884,0.00219823117367923,0.00314766634255648,0.00275600934401155,0.00179083226248622,0.00145914521999657,0.00168375414796174,0.00128154177218676,0.00476005533710122,0.00583797786384821,0.00796274747699499,0.0028400057926774,0.00349170388653874,0.00393921649083495,0.00469232723116875,0.00309628201648593,0.00155989686027169,0.00251230737194419,0.00267865019850433,0.0034107556566596,0.00453887553885579,0.00168139557354152,0.00159857992548496,0.00477183097973466,0.00724268518388271,0.00510938372462988,0.00212487136013806,0.00301838270388544,0.00266955746337771,0.00942323636263609,0.00439173029735684,0.00573972193524241,0.00425780797377229,0.00218753656372428,0.00465337699279189,0.00195707939565182,0.00140292302239686,0.00148765055928379,0.00176502706017345,0.00127081223763525,0.00102934951428324,0.00145317963324487,0.00194567546714097,0.00177611515391618,0.00231837830506265,0.111892938613892,0.276097327470779,0.182606264948845,0.051285233348608,0.0299078412353992,0.0116401230916381,0.0140904020518065,0.0365951769053936,0.0643474012613297,0.0880153402686119,0.0602120384573936,0.0534202642738819,0.0403952412307262,0.053735539317131,0.0189040284603834,0.0706033632159233,0.0886967703700066,0.042857114225626,0.0307560451328754,0.0531281605362892,0.0931760966777802,0.0337394736707211,0.0239218175411224,0.123133383691311,0.295537739992142,0.278025776147842,0.147490873932838,0.349999994039536,0.424458980560303,0.367260605096817,0.103883504867554,0.259470343589783,0.507120609283447,0.45574676990509,0.411120414733887,0.504086971282959,0.33675828576088,0.501042604446411,0.495202124118805,0.231570228934288,0.429100096225739,0.351507425308228,0.493275076150894,0.280151754617691, 0.175297662615776,0.800000011920929,0.800000011920929,0.800000011920929,0.777994394302368,0.733412683010101,0.750932455062866,0.751800656318665,0.840702414512634,0.564836502075195,0.684945344924927,0.0456191003322601,0.0653706043958664,0.0292139910161495,0.0110846934840083,0.499919772148132,0.499518573284149,0.616083443164825,0.89096063375473,0.0247959773987532,0.0469798818230629,0.0385838113725185,0.0137804802507162,0.0535802431404591,0.0805884152650833,0.349999994039536,0.349999994039536,0.349999994039536,0.0399816893041134,0.00100753747392446,0.00152242206968367,0.00296934437938035,0.00323700485751033,0.0138339176774025,0.0156798865646124,0.0972830429673195,0.713951766490936,0.646363317966461,0.800000011920929,0.943829536437988,0.00899034179747105,0.00499350856989622,0.01054213847965,0.0174784269183874,0.0253205075860024,0.0185488481074572,0.0213725566864014,0.0238320827484131,0.0466594398021698,0.0571891218423843,0.349999994039536,0.349999994039536,0.349999994039536,0.108780957758427,0.242685750126839,0.253124505281448,0.016670374199748,0.0297163967043161,0.690966308116913,0.00730973202735186,0.0209887269884348,0.0087518123909831,0.00851652212440968,0.0112668741494417,0.00201677973382175,0.00141855166293681,0.00159147719386965,0.00131093349773437,0.00273123872466385,0.00297377584502101,0.00332834711298347,0.0019080612109974,0.00410206848755479,0.0073396610096097,0.00110366602893919,0.00239244638942182,0.00473452545702457,0.0217749625444412,0.280029624700546,0.00338610471226275,0.128973752260208,0.0733335092663765,0.187143608927727,0.49951246380806,0.555980682373047,0.592231094837189,0.502066969871521,0.800000011920929,0.800000011920929,0.800000011920929,0.0454950891435146,0.800000011920929,0.722404003143311,0.349999994039536,0.610655307769775,0.614362716674805,0.756966769695282,0.615937829017639,0.333031117916107,0.349999994039536,0.349999994039536,0.00139323866460472,0.0287067573517561,0.0301683470606804,0.0249928496778011,0.011644403450191,0.0015737182693556,0.00375572172924876,0.0017695747083053,0.00410313904285431, 0.00949179194867611,0.00190033111721277,0.00247855274938047,0.00380051089450717,0.00995506718754768,0.00198078528046608,0.00330763752572238,0.00164033786859363 } Transform: *16 { a: -0.662814698738924,-0.271847628397838,0.697693006595292,0,-0.658330136901758,-0.232377138971596,-0.715962487814441,0,0.356760627249285,-0.933862798146209,-0.0249425019495579,0,21.3737221209514,8.02276245628242,47.9354098901974,1 } TransformLink: *16 { a: -0.662814672774643,-0.658330111113149,0.356760613273986,0,-0.271847630152989,-0.232377140471911,-0.933862804175582,0,0.697693045796624,-0.71596252804228,-0.0249425033510038,0,-17.0964165332061,50.2552287047925,1.06248635465806,1 } } Deformer: 135113536, "SubDeformer::Cluster_L_Hand", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *286 { a: 6019,6032,6038,6041,6046,6048,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6139,6143,6158,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6217,6218,6220,6221,6222,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6260,6271,6272,6274,6275,6276,6277,6278,6281,6282,6300,6301,6302,6303,6304,6307,6308,6309,6326,6327,6329,6330,6331,6332,6333,6335,6336,6337,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6367,6368,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6442,6443,6445,6446,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6471,6472,6473,6475,6476,6478,6479,6481,6482,6483 } Weights: *286 { a: 0.00130479945801198,0.00115911138709635,0.00175872875843197,0.00271619227714837,0.00106285652145743,0.0015120297903195,0.00488520367071033,0.00525947473943233,0.0152240814641118,0.0058322437107563,0.0144255012273788,0.00942893140017986,0.00434530852362514,0.0114153744652867,0.0101915383711457,0.00324962823651731,0.0111104818060994,0.0106603158637881,0.00879672635346651,0.0153704714030027,0.0104524334892631,0.0109532186761498,0.0155204143375158,0.0213428996503353,0.00706385681405663,0.0102087017148733,0.0292237475514412,0.00535075040534139,0.0103372754529119,0.00476671941578388,0.00251900753937662,0.0204347223043442,0.0258889235556126,0.0137172415852547,0.0270151142030954,0.0225172936916351,0.0296244621276855,0.0124627286568284,0.0151561014354229,0.0168448686599731,0.00965970754623413,0.00927151646465063,0.00500783044844866,0.00339167006313801,0.00459962524473667,0.0060916724614799,0.0131798479706049,0.0255049075931311,0.0152906086295843,0.110847167670727,0.0640205889940262,0.0492582283914089,0.0529643408954144,0.0609882585704327,0.163887873291969,0.151392802596092,0.314569145441055,0.0119036193937063,0.181643426418304,0.155784979462624,0.0354310423135757,0.0217668879777193,0.0815117955207825,0.106855973601341,0.0321793593466282,0.00307321944274008,0.00231335498392582,0.00378830498084426,0.0047411723062396,0.111192271113396,0.796268939971924,0.776784062385559,0.978859066963196,0.98049396276474,0.972140312194824,0.974617958068848,0.86642324924469,0.79427707195282,0.951687097549438,0.844824910163879,0.833017945289612,0.00297021493315697,0.981817245483398,0.0783289968967438,0.00117522315122187,0.00118728959932923,0.00153656990732998,0.0214405823498964,0.0220679994672537,0.0280335266143084,0.0257828701287508,0.175093457102776,0.175840079784393,0.014129888266325,0.236173659563065,0.964483380317688,0.966105341911316,0.00487766275182366,0.00121384067460895,0.00104836956597865,0.00261064269579947,0.00527278799563646,0.0016196146607399,0.191565632820129,0.00648218113929033,0.0210572946816683,0.00848367344588041, 0.0187208727002144,0.163910433650017,0.959246575832367,0.969912648200989,0.00222233613021672,0.00535696605220437,0.0144689073786139,0.980347037315369,0.970510244369507,0.985016524791718,0.977311074733734,0.979323983192444,0.979390799999237,0.985957503318787,0.983055531978607,0.987015068531036,0.995343744754791,0.972897946834564,0.484119653701782,0.470623850822449,0.491619795560837,0.994537591934204,0.969956040382385,0.218082129955292,0.35081872344017,0.00539582036435604,0.34410172700882,0.00174769177101552,0.020339347422123,0.00183528068009764,0.00886431150138378,0.0222514942288399,0.0158319640904665,0.320180326700211,0.04841323569417,0.397936344146729,0.309453368186951,0.206016972661018,0.347281217575073,0.0044247810728848,0.191069826483727,0.0211531389504671,0.459793508052826,0.204510793089867,0.157113015651703,0.370152801275253,0.00862766150385141,0.00548374000936747,0.431275308132172,0.31342825293541,0.472878903150558,0.270284116268158,0.358282715082169,0.203067094087601,0.283760100603104,0.00640271510928869,0.00861588399857283,0.00290981493890285,0.0124844554811716,0.412148624658585,0.0235857348889112,0.43615585565567,0.494468510150909,0.492149859666824,0.583465158939362,0.614591658115387,0.47902324795723,0.0368059240281582,0.179605558514595,0.093951515853405,0.0709963366389275,0.528760671615601,0.00757221970707178,0.00689148018136621,0.00146077561657876,0.00115335988812149,0.00185912323649973,0.00343802105635405,0.00929137691855431,0.00599377509206533,0.0103735150769353,0.0123039186000824,0.00861450098454952,0.0111370049417019,0.00242832745425403,0.00318639865145087,0.0104857282713056,0.00409229006618261,0.00196978286840022,0.00119663344230503,0.00250004953704774,0.00289106229320169,0.00217845221050084,0.00413126405328512,0.0133866397663951,0.0123976143077016,0.0206668935716152,0.0215567238628864,0.0301417876034975,0.0713586881756783,0.560532927513123,0.603163719177246,0.804462194442749,0.766411006450653,0.804961740970612,0.65153706073761,0.576698124408722,0.960165858268738,0.364009708166122,0.789578795433044, 0.732573091983795,0.514938175678253,0.972435057163239,0.954573690891266,0.965797305107117,0.983198702335358,0.943976640701294,0.928566694259644,0.987579226493835,0.973949670791626,0.983637511730194,0.969260632991791,0.390069872140884,0.995344936847687,0.41723170876503,0.504042029380798,0.701698005199432,0.0107290036976337,0.00334366434253752,0.00361302401870489,0.453608155250549,0.400738775730133,0.471676975488663,0.800864040851593,0.939786970615387,0.42675507068634,0.605584919452667,0.790349185466766,0.525061130523682,0.883583009243011,0.923232853412628,0.904953896999359,0.86821836233139,0.943565130233765,0.911553740501404,0.00109791976865381,0.00112204707693309,0.00190161785576493,0.0025254930369556,0.882194042205811,0.0070715737529099,0.00892249215394259,0.927492499351501,0.957062900066376,0.887509346008301,0.936216056346893,0.948306977748871,0.522060811519623,0.758114814758301,0.863632440567017,0.691744744777679,0.269960701465607,0.157683476805687,0.972856402397156,0.0662615373730659,0.951834917068481,0.634501338005066,0.04736552760005,0.00515583343803883,0.318909585475922,0.400039374828339,0.44497874379158,0.412904262542725,0.422368437051773,0.36232003569603,0.435642629861832,0.115776337683201,0.112991780042648,0.519146800041199 } Transform: *16 { a: 0.525245239000652,-0.790238300444755,0.31565934973444,0,-0.819456473838864,-0.569703518321511,-0.0626812335023224,0,0.229365355566028,-0.22574608595525,-0.946799976133382,0,21.0667191574115,43.1016445023767,-3.43213608283347,1 } TransformLink: *16 { a: 0.525245270545199,-0.819456523052794,0.229365369340976,0,-0.790238327627501,-0.569703537918265,-0.2257460937205,0,0.315659363334839,-0.0626812362029864,-0.946800016926909,0,24.0787627570046,41.6032892634726,1.64850555767672,1 } } Deformer: 135106528, "SubDeformer::Cluster_R_Hand", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *376 { a: 5016,5017,5018,5019,5022,5024,5027,5028,5030,5033,5035,5036,5038,5046,5047,5048,5049,5050,5051,5054,5055,5056,5057,5058,5059,5063,5064,5065,5068,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5587,5591,5594,5604,5610,5611,5612,5613,5618,5620,5621,5626,5627,5628,5629,5630,5632,5633,5640,5642,5645,5646,5661,5680,5709,5710,5717,5719,5720,5721,5722,5723,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6959,6963,6974,6975,6977,6978,6979,6980,6981,6984,6985,7003,7004,7005,7006,7007,7010,7011,7029,7030,7032,7033,7034,7035,7036,7038,7039,7040,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7070,7071,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7159,7160,7161,7163,7164,7166,7167,7169,7170,7171,7172,7173,7174 } Weights: *376 { a: 0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.478211551904678,1,1,1,1,1,1,0.5,1,1,1,1,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.476549983024597,1,1,1,1,1,1,0.5,1,1,1,1,1,1,0.150000005960464,1,1,1,0.5,0.5,0.5,0.5,0.150000005960464,0.150000005960464,0.499237954616547,0.150000005960464,0.498280823230743,0.150000005960464,0.492761671543121,0.150000005960464,0.490575730800629,0.150000005960464,0.150000005960464,1,0.150000005960464,1,0.150000005960464,1,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,1,0.43133419752121,0.416377604007721,0.202405482530594,0.234382465481758,0.150000005960464,1,1,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,0.150000005960464,1,1,1,1,0.311414361000061,0.284526914358139,0.445154696702957,0.420536041259766,0.352586656808853,0.30120512843132,0.289841949939728,0.320585310459137,0.375567853450775,0.427236169576645,0.435768216848373,0.404024720191956,0.384363621473312,0.381733804941177,0.364213705062866,0.344451010227203,0.33304363489151,0.337528795003891,0.356136411428452,0.373739540576935,0.399143755435944,0.396531015634537,0.379235744476318,0.359705597162247,0.348413735628128,0.35287082195282,0.371297925710678,0.388683319091797,0.392428636550903,0.390859305858612, 0.380297005176544,0.368231445550919,0.361209481954575,0.364020258188248,0.375421583652496,0.386056154966354,0.341011792421341,0.372806400060654,1,1,1,0.00116238882765174,0.00126314430963248,0.00127484649419785,0.00115499168168753,0.002157126320526,0.00122782762628049,0.00155618181452155,0.00316519476473331,0.00129367306362838,0.00159544369671494,0.00123375444673002,0.00481545180082321,0.00362198776565492,0.00342102046124637,0.0025759288109839,0.00383124360814691,0.00162800203543156,0.00126475747674704,0.00289244158193469,0.00115937925875187,0.00149133347440511,0.0011821809457615,0.00141481403261423,0.00124221364967525,0.00153389351908118,0.00119169999379665,0.00243614916689694,0.00110688724089414,0.00127081596292555,0.00211558281444013,0.00100069667678326,0.0010915391612798,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.980131089687347,0.972969591617584,0.984836518764496,0.979745507240295,0.976824939250946,0.975857794284821,0.982909977436066,0.980634093284607,0.989108204841614,0.995466649532318,0.979120552539825,0.460078805685043,0.459079802036285,0.480023443698883,0.992386698722839,0.975788593292236,0.138774245977402,0.343353152275085,0.00259447447024286,0.276375085115433,0.0248107090592384,0.0122508257627487,0.025913767516613,0.014011156745255,0.277671813964844,0.0515360981225967,0.380510330200195,0.249686777591705,0.148735642433167,0.335018038749695,0.00630574533715844,0.173127308487892,0.0223309826105833,0.442807972431183,0.139312252402306,0.139563262462616,0.357817381620407,0.011000263504684,0.413820147514343,0.269777983427048,0.461716413497925,0.253329813480377,0.356669843196869,0.186188355088234,0.220778793096542,0.00349638611078262,0.0110432421788573,0.0015514426631853,0.00884688831865788,0.382615059614182,0.021647721529007,0.416930913925171,0.494424849748611,0.490876406431198,0.62108588218689,0.640656173229218,0.47115883231163,0.0474152453243732,0.260224372148514,0.133849367499352,0.0852451249957085,0.555279970169067,0.00700232526287436,0.010713710449636,0.00243271933868527,0.00105389696545899,0.0027286084368825,0.00499552441760898, 0.0102303149178624,0.00594911677762866,0.0118187936022878,0.0127267623320222,0.00834109634160995,0.0117082539945841,0.00214929180219769,0.00271061388775706,0.0104626463726163,0.00442534405738115,0.00153978925663978,0.00266948714852333,0.00231324881315231,0.00142847280949354,0.00443828664720058,0.0104610789567232,0.00884981267154217,0.022325336933136,0.0158318430185318,0.0256853923201561,0.0783745720982552,0.57348096370697,0.621407747268677,0.828966498374939,0.774004817008972,0.819439351558685,0.668650686740875,0.582747161388397,0.966136991977692,0.334902942180634,0.80157071352005,0.726243376731873,0.515989422798157,0.967205703258514,0.947406470775604,0.958869814872742,0.978822588920593,0.934976994991302,0.91591876745224,0.981829702854156,0.968005239963531,0.977376699447632,0.962073385715485,0.376457810401917,0.992758095264435,0.402833461761475,0.492891848087311,0.673506021499634,0.0103504024446011,0.00493862433359027,0.447454303503037,0.384990841150284,0.465120375156403,0.800574660301209,0.931973874568939,0.408383995294571,0.558285415172577,0.778715252876282,0.581696271896362,0.878262996673584,0.91571843624115,0.89141857624054,0.856104969978333,1,0.901411950588226,1,0.918534278869629,1,0.874900579452515,0.928177952766418,0.940730452537537,0.504734337329865,0.806382894515991,0.88244241476059,0.68834376335144,0.284145832061768,1,1,0.653447806835175,0.0394690781831741,0.264194279909134,0.358842074871063,0.421661764383316,0.382513344287872,0.406745463609695,0.338808655738831,0.411881446838379,0.121384337544441,0.155007690191269,0.524047017097473,1,1,1 } Transform: *16 { a: -0.539910064473397,0.715295240266879,0.443677536411028,0,-0.785857646383378,-0.617193463603956,0.0387289250314666,0,0.301537519568316,-0.327757234066569,0.895349240611154,0,19.3032950598201,45.5941437919841,4.68926169427988,1 } TransformLink: *16 { a: -0.539910067817437,-0.785857651250743,0.301537521435949,0,0.715295342735177,-0.617193552018866,-0.327757281018826,0,0.443677559210366,0.0387289270216372,0.895349286620627,0,-24.2717555485735,43.1284436014007,4.92461773900622,1 } } Deformer: 135108864, "SubDeformer::Cluster_L_Thumb1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *203 { a: 6041,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6135,6136,6137,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6188,6220,6221,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6250,6353,6355,6356,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408,6409,6410,6413,6419,6420,6425,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6445,6446,6448,6449,6450,6451,6452,6453,6454,6456,6457,6458,6459,6460,6461,6464,6465,6466,6468,6469,6481,6482,6483 } Weights: *203 { a: 0.00159759109374136,0.00247123767621815,0.00295475963503122,0.0077313999645412,0.00347915571182966,0.00788113940507174,0.00438647763803601,0.00198627333156765,0.00456920033320785,0.00394627405330539,0.00149479776155204,0.00498084956780076,0.0045593879185617,0.00389673910103738,0.0053889025002718,0.00434868596494198,0.00466193072497845,0.00575977610424161,0.00650691241025925,0.00277097732760012,0.0038960506208241,0.00847896747291088,0.00217573903501034,0.00471446616575122,0.00265942816622555,0.00134018436074257,0.00880127213895321,0.0104272356256843,0.0025074842851609,0.00591300847008824,0.00400860561057925,0.00504888221621513,0.00428155763074756,0.00490744644775987,0.00415540672838688,0.00185257231350988,0.0034409835934639,0.00126996927428991,0.00180447299499065,0.00182313250843436,0.00459778308868408,0.00878611020743847,0.00689603015780449,0.0274771600961685,0.0106862084940076,0.0132547691464424,0.0176012106239796,0.00608202582225204,0.00622645253315568,0.00652747694402933,0.0127935614436865,0.002189856255427,0.00902560912072659,0.00980143714696169,0.00303600518964231,0.00200605415739119,0.0202941447496414,0.0301873274147511,0.0108516663312912,0.00138832733500749,0.00105692853685468,0.00181000796146691,0.00204267911612988,0.027459803968668,0.194376647472382,0.211311653256416,0.0143799241632223,0.0139722237363458,0.0235288999974728,0.0229588188230991,0.128103569149971,0.197381421923637,0.0392584875226021,0.141111671924591,0.154612764716148,0.00147584686055779,0.014051241800189,0.00496605504304171,0.0069593284279108,0.0040521421469748,0.00478092953562737,0.00771074322983623,0.00695881806313992,0.00556631200015545,0.00246958923526108,0.00889166165143251,0.022413456812501,0.0212120581418276,0.00200483039952815,0.00163757242262363,0.00320822768844664,0.0478605479001999,0.00297751650214195,0.00626803236082196,0.00324841495603323,0.00309346639551222,0.00481143221259117,0.0272986982017756,0.0201074331998825,0.00103253370616585,0.00216887542046607,0.00447408715263009,0.0121217016130686,0.0195227228105068, 0.00604483531787992,0.0104366512969136,0.0123603446409106,0.0124463373795152,0.00555362459272146,0.00640094606205821,0.015989737585187,0.00246398895978928,0.0972976014018059,0.0578067973256111,0.465059280395508,0.380723357200623,0.422929733991623,0.458774000406265,0.092535063624382,0.274851739406586,0.232820615172386,0.00305847125127912,0.00748487003147602,0.0182876884937286,0.00735447648912668,0.00302722817286849,0.0059708533808589,0.0140878790989518,0.0213838182389736,0.0202675182372332,0.0249171163886786,0.0320472456514835,0.0313042849302292,0.0334601327776909,0.013205399736762,0.0161251649260521,0.0353358276188374,0.0189561918377876,0.0175694078207016,0.0115405488759279,0.0251711886376143,0.033161573112011,0.0268362518399954,0.0510043613612652,0.426536828279495,0.349578112363815,0.436885267496109,0.484621107578278,0.478504449129105,0.492120414972305,0.424962937831879,0.391250789165497,0.19102568924427,0.228269383311272,0.191427558660507,0.345326334238052,0.418538182973862,0.0294552650302649,0.0147695094347,0.261895328760147,0.481220096349716,0.0170786399394274,0.0281957481056452,0.0150331221520901,0.00732234213501215,0.0262191146612167,0.0131651647388935,0.00237191957421601,0.00544905196875334,0.00206797500140965,0.0344606004655361,0.00109131261706352,0.198616206645966,0.44857582449913,0.0926235690712929,0.0629098638892174,0.0645485669374466,0.0908042192459106,0.0431784391403198,0.0665719956159592,0.00115764292422682,0.112029992043972,0.00399026228114963,0.00503641506657004,0.0523641631007195,0.0312329083681107,0.063860610127449,0.0429957583546638,0.0335627309978008,0.19743774831295,0.114430151879787,0.0259818006306887,0.463000237941742,0.00479828519746661,0.0177750047296286,0.00974856596440077,0.0449162684381008,0.35066893696785,0.463127940893173,0.0020702350884676,0.497311651706696,0.503731489181519,0.457812607288361 } Transform: *16 { a: -0.241495099703434,0.748823868440869,0.617205703028192,0,-0.623205875017562,-0.607212304548738,0.492856574902623,0,0.743837685515158,-0.26562378413437,0.613310235141848,0,28.1335141022105,7.31972621211067,-36.6074359315937,1 } TransformLink: *16 { a: -0.241495112205703,-0.623205907281104,0.743837724023843,0,0.748823895817871,-0.607212326748421,-0.265623793845576,0,0.61720574758735,0.492856610484397,0.613310279419772,0,23.9072401077965,40.019816957261,3.46924110783787,1 } } Deformer: 135110032, "SubDeformer::Cluster_L_Index1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *111 { a: 6117,6118,6119,6120,6121,6123,6124,6125,6126,6127,6136,6185,6186,6230,6231,6235,6236,6238,6239,6240,6241,6242,6243,6245,6250,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6362,6394,6395,6396,6397,6398,6399,6400,6401,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6415,6418,6419,6420,6421,6422,6423,6424,6425,6427,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6446,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6466,6478,6479,6480,6483 } Weights: *111 { a: 0.00371436937712133,0.00494377221912146,0.00263386126607656,0.00218590977601707,0.00185694906394929,0.00206264993175864,0.00298752659000456,0.00426755286753178,0.00718114338815212,0.00587730761617422,0.00168352981563658,0.00520978355780244,0.00493870163336396,0.00560601847246289,0.00409966241568327,0.00274549331516027,0.00369933270849288,0.00374366831965745,0.00306748598814011,0.00304535985924304,0.00253631826490164,0.00310266017913818,0.00145082944072783,0.00372593943029642,0.0044119730591774,0.512684762477875,0.695699751377106,0.632200360298157,0.776936829090118,0.691368758678436,0.499650865793228,0.514966368675232,0.54956066608429,0.423678308725357,0.00362533191218972,0.0122475698590279,0.0173689760267735,0.0190478153526783,0.00414237612858415,0.0305128712207079,0.0233743507415056,0.0281667727977037,0.0429911389946938,0.0580260083079338,0.0308641213923693,0.476867467164993,0.550444364547729,0.507946193218231,0.542712569236755,0.494468510150909,0.492149859666824,0.274605512619019,0.293562948703766,0.494670271873474,0.325606614351273,0.00381355290301144,0.00167523242998868,0.00164477236103266,0.00221550418063998,0.00144181016366929,0.00109618133865297,0.00171595136635005,0.00399577850475907,0.0344652831554413,0.00270954403094947,0.00151923589874059,0.00400778744369745,0.00674853380769491,0.00620432337746024,0.00295892870053649,0.0103678619489074,0.00600593723356724,0.00103968544863164,0.00440405542030931,0.0028966658283025,0.565459847450256,0.469368457794189,0.272410869598389,0.476170718669891,0.491343110799789,0.106734871864319,0.071705125272274,0.125662431120873,0.0645021125674248,0.0104111544787884,0.00976197328418493,0.359163969755173,0.00594769092276692,0.0161525495350361,0.0120403580367565,0.00650829821825027,0.0132051296532154,0.0192908421158791,0.00605902681127191,0.00987514760345221,0.00226790015585721,0.00873659271746874,0.00513577414676547,0.0196360442787409,0.00865437649190426,0.0073253489099443,0.0213408451527357,0.0177945960313082,0.00902661215513945,0.259924441576004,0.00377326039597392, 0.00483903102576733,0.600874423980713,0.53497850894928,0.02568169683218,0.00841941591352224 } Transform: *16 { a: 0.476186898697672,-0.714199454111438,0.512996243940419,0,-0.82619242068559,-0.563128902688113,-0.017084606829686,0,0.30108483017946,-0.415698154205959,-0.858220797655617,0,17.9477939682589,41.6512675908134,-9.07690428404318,1 } TransformLink: *16 { a: 0.476186920862355,-0.826192459141696,0.30108484419381,0,-0.714199470747975,-0.563128915805617,-0.415698163889217,0,0.512996260553214,-0.0170846073829517,-0.858220825448115,0,25.8572264784377,38.1282898492032,4.12055842343868,1 } } Deformer: 130835696, "SubDeformer::Cluster_L_Middle1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *93 { a: 6119,6120,6121,6122,6125,6136,6185,6186,6230,6231,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6249,6250,6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6315,6316,6318,6320,6321,6322,6323,6324,6325,6326,6327,6328,6353,6354,6356,6401,6402,6403,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6417,6419,6420,6425,6426,6427,6428,6429,6431,6432,6433,6434,6435,6436,6437,6438,6439,6450,6451,6452,6453,6454,6455,6456,6457,6458,6461,6465,6475,6476 } Weights: *93 { a: 0.00412716390565038,0.00334790674969554,0.00247386749833822,0.00131288380362093,0.00478683551773429,0.00244800793007016,0.00789336860179901,0.00774389877915382,0.00784872099757195,0.00588024314492941,0.00478576263412833,0.00626767612993717,0.00613046204671264,0.00850861892104149,0.00524820294231176,0.00511750066652894,0.00595254916697741,0.00744087295606732,0.00562278227880597,0.00201658881269395,0.0165302008390427,0.00264852098189294,0.00964223500341177,0.771893739700317,0.77039760351181,0.820030331611633,0.36432346701622,0.423502087593079,0.594969689846039,0.490104913711548,0.418671399354935,0.0125696966424584,0.0014935287181288,0.00192902889102697,0.00668199779465795,0.00570874242112041,0.00863724667578936,0.00920366495847702,0.0100211091339588,0.128556668758392,0.00183883716817945,0.427183836698532,0.430036187171936,0.0196738447993994,0.527762174606323,0.64354407787323,0.478188276290894,0.00859897024929523,0.00973446387797594,0.0340385884046555,0.00638306746259332,0.56878536939621,0.161186441779137,0.00647852476686239,0.0104820244014263,0.0129652433097363,0.00652002496644855,0.0194364041090012,0.062188807874918,0.0101987821981311,0.0084811132401228,0.00866235606372356,0.0206532515585423,0.00225880974903703,0.0242175608873367,0.0204420946538448,0.418661445379257,0.562414765357971,0.460900753736496,0.186287403106689,0.0159904323518276,0.0341598056256771,0.00508690346032381,0.0102104907855392,0.0117530338466167,0.00734900729730725,0.0172924008220434,0.0216865725815296,0.00719740614295006,0.0119991423562169,0.0114067317917943,0.00656844489276409,0.0289940275251865,0.0121338376775384,0.0108049148693681,0.455316990613937,0.0266528204083443,0.0129107730463147,0.0223489850759506,0.00559531105682254,0.00153321924153715,0.54115879535675,0.558823943138123 } Transform: *16 { a: 0.570318626472898,-0.773811772846064,0.275593770724241,0,-0.80944211308985,-0.5865199731356,0.0282439095986967,0,0.139785791831067,-0.239185245855052,-0.960859105614745,0,15.4107018618584,43.3508755303443,-5.43133537051691,1 } TransformLink: *16 { a: 0.570318661979152,-0.809442163483183,0.139785800533693,0,-0.77381183435103,-0.586520019754033,-0.23918526486624,0,0.275593807727066,0.0282439133908891,-0.960859234625286,0,26.2532520446477,38.0536303940709,2.99594460225472,1 } } Deformer: 130850880, "SubDeformer::Cluster_L_Ring1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *27 { a: 6274,6277,6278,6279,6280,6281,6282,6283,6285,6286,6287,6290,6291,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430,6471,6472,6473,6474 } Weights: *27 { a: 0.636881113052368,0.64725536108017,0.770711004734039,0.324779361486435,0.371644020080566,0.644023895263672,0.495609492063522,0.184649080038071,0.00116098043508828,0.0132631380110979,0.442761778831482,0.00111894879955798,0.00623618019744754,0.0150064034387469,0.0145346531644464,0.0168191604316235,0.0195216089487076,0.037700742483139,0.446998029947281,0.424838811159134,0.478186815977097,0.512804090976715,0.556056439876556,0.654269754886627,0.558543562889099,0.545004069805145,0.013606695458293 } Transform: *16 { a: 0.582885664221684,-0.81087194489037,0.0522593330921745,0,-0.812067782193689,-0.57910556765076,0.0719910370836576,0,-0.0281118424327725,-0.0844006657925939,-0.996035240596412,0,15.4403653620145,43.8373141656814,-2.25142242053959,1 } TransformLink: *16 { a: 0.582885631511836,-0.812067736622806,-0.0281118408552176,0,-0.810871910930541,-0.579105543397453,-0.0844006622578409,0,0.0522593358187756,0.071991040839749,-0.996035292563984,0,26.6641374331222,38.0871364365867,1.89145925166464,1 } } Deformer: 130845040, "SubDeformer::Cluster_L_Pinky1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *30 { a: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6275,6276,6416,6470 } Weights: *30 { a: 0.507474660873413,0.490716248750687,0.498910874128342,0.766794085502625,0.626131474971771,0.534704625606537,0.623797118663788,0.558018565177917,0.576629400253296,0.479758083820343,0.00651619024574757,0.0263325236737728,0.488740682601929,0.030104698613286,0.0135515499860048,0.0173956081271172,0.0141944829374552,0.00693258456885815,0.0144957825541496,0.0226971209049225,0.055401973426342,0.0273477323353291,0.0195371117442846,0.471582263708115,0.484038800001144,0.0752825513482094,0.533363699913025,0.55875962972641,0.577449381351471,0.0189471412450075 } Transform: *16 { a: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739591,0.102942014820845,0,-0.181250153437913,0.114830509928814,-0.97670992775668,0,20.7401281878819,41.51763584013,1.91200099905934,1 } TransformLink: *16 { a: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431,0,-0.188256764556457,0.102942020272518,-0.976709979481948,0,26.5389261131629,38.1112859796014,0.859130680551072,1 } } Deformer: 130840368, "SubDeformer::Cluster_R_Thumb1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *98 { a: 5610,5613,5626,5627,5628,5629,5630,5640,5717,6938,6939,6940,6941,6942,6943,6944,6945,6953,7056,7058,7059,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7106,7107,7108,7109,7110,7111,7112,7113,7116,7122,7123,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7150,7151,7152,7153,7156,7157,7169,7170,7171 } Weights: *98 { a: 0.00117834086995572,0.00185435765888542,0.00218916381709278,0.00165725930128247,0.00153683964163065,0.00117011729162186,0.00181572057772428,0.00142473354935646,0.00112519657704979,0.0120337009429932,0.0176298543810844,0.0058772643096745,0.00901230424642563,0.0135681601241231,0.0142464553937316,0.00650400621816516,0.00706358160823584,0.0124409534037113,0.00218535028398037,0.0649432241916656,0.0371046252548695,0.458596736192703,0.341233342885971,0.401548683643341,0.451044887304306,0.0650122687220573,0.274735152721405,0.276568412780762,0.00614429172128439,0.0060535091906786,0.0265965759754181,0.0063732503913343,0.00581173552200198,0.00778278242796659,0.0180601254105568,0.0219534132629633,0.0191538892686367,0.0263300146907568,0.0315652005374432,0.0293215438723564,0.0334162600338459,0.0118432277813554,0.013966896571219,0.0339761525392532,0.0192808117717505,0.0143059594556689,0.00743300141766667,0.0268707405775785,0.0281048789620399,0.0191535260528326,0.0545883439481258,0.427406132221222,0.33634215593338,0.441167950630188,0.490224152803421,0.483224272727966,0.493799120187759,0.414857596158981,0.374179124832153,0.167420074343681,0.220849931240082,0.177327692508698,0.328664183616638,0.412713706493378,0.0247516389936209,0.0111677721142769,0.267518728971481,0.479819446802139,0.0197998341172934,0.0317522473633289,0.0172765497118235,0.00883822608739138,0.0289071407169104,0.0154305025935173,0.00267817359417677,0.00531181460246444,0.0370833277702332,0.00141901499591768,0.208139926195145,0.388550370931625,0.0929949060082436,0.0676976293325424,0.0705112963914871,0.0944326370954514,0.0724598839879036,0.0573470108211041,0.067487895488739,0.047105111181736,0.037431426346302,0.153220906853676,0.0980262160301209,0.0206126980483532,0.448262453079224,0.334237396717072,0.470356494188309,0.503118216991425,0.476589530706406,0.455160111188889 } Transform: *16 { a: 0.299955290163138,-0.814394980290346,0.496777211674741,0,-0.640285237271459,-0.557902697734119,-0.527995609111184,0,0.70715038790913,-0.159704046697342,-0.688790892093755,0,29.029916536771,4.73172955031751,38.4517010471098,1 } TransformLink: *16 { a: 0.299955280479185,-0.640285216600072,0.707150365079025,0,-0.814394991209243,-0.557902705214128,-0.159704048838554,0,0.496777284049562,-0.527995686034173,-0.688790992442797,0,-23.956111524808,41.5296033876418,6.71234561535597,1 } } Deformer: 130841536, "SubDeformer::Cluster_R_Index1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *90 { a: 6938,6939,6942,6943,6944,6945,6946,6948,6953,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7065,7097,7098,7099,7100,7101,7103,7104,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7118,7121,7122,7123,7124,7125,7126,7127,7128,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7156,7166,7167,7168,7171 } Weights: *90 { a: 0.0028345063328743,0.0034583390224725,0.00352103868499398,0.00366821466013789,0.00313717871904373,0.00359226879663765,0.00116448593325913,0.00275600515305996,0.00362914521247149,0.516221463680267,0.704328000545502,0.626512408256531,0.788698315620422,0.758932828903198,0.491405695676804,0.50881016254425,0.517794549465179,0.377093970775604,0.00629057269543409,0.0051807276904583,0.0198304392397404,0.0193320792168379,0.00171411549672484,0.037797424942255,0.027088450267911,0.0283459965139627,0.0328404195606709,0.0557266399264336,0.0329632498323917,0.479581147432327,0.584652662277222,0.496655881404877,0.558867752552032,0.494424849748611,0.492634028196335,0.283073902130127,0.292983174324036,0.508531212806702,0.341628015041351,0.00316119496710598,0.00137431977782398,0.001358114881441,0.00221375562250614,0.00133413984440267,0.00170696689747274,0.00347282318398356,0.0293117240071297,0.00315881427377462,0.0017423335229978,0.00493387132883072,0.00811068899929523,0.00765371881425381,0.00381668144837022,0.0124431811273098,0.00749050639569759,0.00156867934856564,0.00560529157519341,0.00357585120946169,0.573042452335358,0.473697155714035,0.297389835119247,0.473060458898544,0.484047085046768,0.100287444889545,0.080564945936203,0.121525146067142,0.0695379748940468,0.0116193136200309,0.011608568020165,0.390105187892914,0.00705760065466166,0.0181731842458248,0.0144127681851387,0.00774019164964557,0.0163207482546568,0.0230593774467707,0.0117224948480725,0.0103925261646509,0.023034455254674,0.0102231930941343,0.00876631308346987,0.0257692635059357,0.0157899931073189,0.0079519534483552,0.268854886293411,0.00414057867601514,0.619400978088379,0.560737490653992,0.0276894252747297,0.00791016221046448 } Transform: *16 { a: -0.482154341627574,0.614915306728794,0.624024315663636,0,-0.795962863734002,-0.605054025618336,-0.0187812526913695,0,0.366019549322664,-0.505755636317744,0.781179185458219,0,16.3612037448649,43.8516961637896,10.9593100868548,1 } TransformLink: *16 { a: -0.482154341588848,-0.795962863670071,0.366019549293266,0,0.614915323925831,-0.605054042539588,-0.505755650461966,0,0.62402431454957,-0.0187812526578394,0.781179184063586,0,-25.9153304969333,39.7613861936677,7.62853778503809,1 } } Deformer: 130863728, "SubDeformer::Cluster_R_Middle1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *76 { a: 6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6952,6953,7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7016,7018,7019,7021,7023,7024,7026,7027,7028,7029,7030,7031,7056,7059,7104,7105,7106,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7120,7122,7123,7128,7129,7130,7131,7132,7134,7135,7136,7137,7138,7139,7140,7142,7144,7146,7147,7148,7149,7150,7151,7152,7163,7164 } Weights: *76 { a: 0.00500072818249464,0.00594224268570542,0.00633213529363275,0.00784198846668005,0.00608585309237242,0.00622750772163272,0.0074488609097898,0.00871003977954388,0.00458542117848992,0.00190111703705043,0.0126460809260607,0.00359231326729059,0.00814132858067751,0.780165672302246,0.840406358242035,0.831347942352295,0.338731288909912,0.319924503564835,0.591757655143738,0.483411818742752,0.406764596700668,0.0154762221500278,0.00170462974347174,0.00772825255990028,0.00779491337016225,0.0104415100067854,0.00672159111127257,0.0107284439727664,0.0477143339812756,0.403345257043839,0.414985597133636,0.0198577605187893,0.536106884479523,0.687484502792358,0.474653422832489,0.00896497163921595,0.0292559992522001,0.00563854072242975,0.594972848892212,0.157949775457382,0.00806060433387756,0.012730622664094,0.0161999184638262,0.00852251797914505,0.0236726757138968,0.0721689537167549,0.014659053646028,0.0109589444473386,0.0114774499088526,0.0247667580842972,0.00337542127817869,0.0307328347116709,0.0237923245877028,0.428632140159607,0.56472510099411,0.461676090955734,0.184774100780487,0.019334252923727,0.050190407782793,0.00608722772449255,0.0115801775828004,0.0143293524160981,0.00884373113512993,0.0217493902891874,0.0264030154794455,0.0144056649878621,0.0137261711061001,0.0345770604908466,0.0144937243312597,0.0130718080326915,0.46775695681572,0.0246061757206917,0.0115793980658054,0.0221886523067951,0.57551372051239,0.565304398536682 } Transform: *16 { a: -0.595926373558608,0.696185103154453,0.400247416304471,0,-0.772654477421632,-0.632889052852795,-0.0495624802253885,0,0.218807554470381,-0.338788561157854,0.915065841994783,0,13.4799143483701,45.7845417929185,6.55023107646817,1 } TransformLink: *16 { a: -0.595926415228335,-0.772654531448946,0.218807569770343,0,0.696185144753957,-0.632889090670137,-0.338788581401659,0,0.400247444766019,-0.0495624837497703,0.915065907065011,0,-26.4631940713707,39.7164996481656,6.56787952339484,1 } } Deformer: 130864896, "SubDeformer::Cluster_R_Ring1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *25 { a: 6977,6980,6981,6982,6983,6984,6985,6986,6989,6990,6994,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160,7161,7162 } Weights: *25 { a: 0.676510512828827,0.711042284965515,0.829476058483124,0.284224897623062,0.288607120513916,0.649124681949615,0.49312686920166,0.10552641004324,0.0175852011889219,0.433233708143234,0.0090728122740984,0.0159076135605574,0.0128143411129713,0.0188714507967234,0.0214142464101315,0.0388879030942917,0.434706896543503,0.407617390155792,0.474976152181625,0.521292865276337,0.564831256866455,0.709270298480988,0.603561341762543,0.563409507274628,0.0152496118098497 } Transform: *16 { a: -0.631144692091481,0.754157801208302,0.181390099390447,0,-0.773772857679433,-0.628472225444924,-0.0793613346788445,0,0.0541476720279382,-0.190443212726649,0.980203759768997,0,13.4304721353298,46.4283095780335,2.63824609290169,1 } TransformLink: *16 { a: -0.631144674405108,-0.773772835996235,0.0541476705105744,0,0.75415784302433,-0.628472260292024,-0.190443223286214,0,0.181390099342531,-0.0793613346578805,0.980203759510066,0,-27.0162545645575,39.7804139060557,5.52870940901063,1 } } Deformer: 130847376, "SubDeformer::Cluster_R_Pinky1", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *30 { a: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6978,6979,7119,7158 } Weights: *30 { a: 0.53295224905014,0.508521616458893,0.50278514623642,0.849367201328278,0.616192400455475,0.518803417682648,0.696697235107422,0.526841044425964,0.527325034141541,0.436812698841095,0.00324418325908482,0.0118504920974374,0.478200852870941,0.0372413694858551,0.0150805469602346,0.0169007889926434,0.00679425150156021,0.0106759835034609,0.0182724725455046,0.0236268937587738,0.047363169491291,0.0316543094813824,0.0231564771384001,0.459268122911453,0.478319853544235,0.0776866674423218,0.499195128679276,0.556424200534821,0.571000456809998,0.0213689096271992 } Transform: *16 { a: -0.54066753815205,0.839021766035349,-0.0609999351852652,0,-0.833617247257869,-0.544097469756583,-0.0950797010971079,0,-0.112963852852558,-0.000555909862120491,0.993598931414121,0,19.0716507875639,44.3369412603016,-2.32465685100485,1 } TransformLink: *16 { a: -0.540667573950472,-0.833617302452938,-0.112963860332067,0,0.839021858736889,-0.544097529872631,-0.000555909923541703,0,-0.0609999365174667,-0.0950797031735908,0.99359895311372,0,-27.0300436247199,39.8010506213175,4.48883125500148,1 } } Deformer: 130862560, "SubDeformer::Cluster_L_Thumb2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *39 { a: 6358,6359,6360,6361,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6459,6468,6481,6482 } Weights: *39 { a: 0.472210496664047,0.387133657932281,0.427147477865219,0.443163722753525,0.685069382190704,0.724653661251068,0.673102736473084,0.536649942398071,0.617036104202271,0.495746076107025,0.556665480136871,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224,0.490408599376678,0.495934039354324,0.514282166957855,0.548796355724335,0.577970862388611,0.592904388904572,0.534782707691193,0.59475177526474,0.509904384613037,0.484549164772034,0.478367120027542,0.422609061002731,0.247988402843475,0.463127940893173,0.369489639997482,0.365565955638886 } Transform: *16 { a: -0.135155843776122,0.775106471512664,0.617205682872185,0,-0.701497726450692,-0.514774994311568,0.492856609979177,0,0.699738398946369,-0.366355940099343,0.613310269759096,0,27.7480724005536,3.49990679714409,-36.6074357556818,1 } TransformLink: *16 { a: -0.135155845224675,-0.701497733969098,0.699738406445918,0,0.775106462370004,-0.514774988239612,-0.366355935778043,0,0.617205695239839,0.492856619855105,0.613310282048693,0,23.6318316390265,39.3090914394466,4.31753641469087,1 } } Deformer: 130860224, "SubDeformer::Cluster_L_Index2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *33 { a: 6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6357,6418,6421,6422,6423,6424,6478,6479,6480 } Weights: *33 { a: 0.0128679797053337,0.0311662908643484,0.00870265159755945,0.0184976477175951,0.02268429659307,0.497807532548904,0.465071231126785,0.433350116014481,0.552651107311249,0.704526364803314,0.617996513843536,0.475178509950638,0.481539070606232,0.497695684432983,0.515092432498932,0.473771840333939,0.477837771177292,0.502260267734528,0.480913937091827,0.475129336118698,0.476394355297089,0.0324806794524193,0.445389032363892,0.0190046336501837,0.0207288712263107,0.0156876035034657,0.476336061954498,0.491859197616577,0.525479137897491,0.615624308586121,0.0330850556492805,0.0259174816310406,0.472873747348785 } Transform: *16 { a: 0.341297846079196,-0.787623412947761,0.512996243916672,0,-0.913316686228973,-0.40689157673435,-0.0170845552668772,0,0.222190046083139,-0.462697109835494,-0.858220815284256,0,23.6325310830361,38.0490136421109,-9.07690618566702,1 } TransformLink: *16 { a: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054733,-0.406891572140152,-0.462697104611198,0,0.512996245923281,-0.0170845553337043,-0.858220818641226,0,26.5589805331897,36.9107329270075,4.56426544744836,1 } } Deformer: 130834528, "SubDeformer::Cluster_L_Middle2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *32 { a: 6300,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6402,6426,6475,6476,6477 } Weights: *32 { a: 0.035529550164938,0.0237998683005571,0.02204336412251,0.631926834583282,0.574653387069702,0.0330993868410587,0.490843802690506,0.558352828025818,0.574839949607849,0.651658654212952,0.537214756011963,0.484952598810196,0.487971544265747,0.497786968946457,0.484419077634811,0.48267862200737,0.523305237293243,0.48245307803154,0.488846242427826,0.868825256824493,0.770056843757629,0.526960432529449,0.512958109378815,0.527758955955505,0.0363789610564709,0.0384134836494923,0.478188276290894,0.0621519312262535,0.0342778228223324,0.0404716730117798,0.0176376178860664,0.483157634735107 } Transform: *16 { a: 0.499759814432717,-0.821150509243367,0.275593784113431,0,-0.85807227136564,-0.512751602155499,0.028243836446371,0,0.118118717124343,-0.250594541726914,-0.960859110891337,0,17.6554166237736,41.9557259278084,-5.43133409867867,1 } TransformLink: *16 { a: 0.499759851243271,-0.858072334568235,0.118118725824553,0,-0.821150518533047,-0.512751607956261,-0.250594544561892,0,0.275593817426644,0.0282438398604282,-0.960859227038021,0,27.1253398134896,36.8158922231038,3.20969323129932,1 } } Deformer: 130836864, "SubDeformer::Cluster_L_Ring2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *31 { a: 6274,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6301,6302,6430,6471,6472,6473,6474 } Weights: *31 { a: 0.0352816879749298,0.0397219471633434,0.0205946918576956,0.6727254986763,0.621281743049622,0.00786225218325853,0.495609492063522,0.806967973709106,0.611252129077911,0.581453204154968,0.644257962703705,0.541119575500488,0.486171543598175,0.47906419634819,0.498831510543823,0.507536768913269,0.48268136382103,0.435824930667877,0.465312838554382,0.446213185787201,0.468680292367935,0.510018289089203,0.497348576784134,0.525787651538849,0.478186815977097,0.0253856051713228,0.0158547200262547,0.0227557364851236,0.0358967743813992,0.008476871997118,0.470450043678284 } Transform: *16 { a: 0.387236956053205,-0.920497931608774,0.0522593739742224,0,-0.920820074405676,-0.383285326046089,0.0719910237843163,0,-0.0462373391529368,-0.0759990671060605,-0.996035235121564,0,23.4655692344814,39.5994352902992,-2.25142353466758,1 } TransformLink: *16 { a: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.38328534848389,-0.0759990715551009,0,0.0522593771475497,0.0719910281558015,-0.996035295603456,0,27.4821224471454,36.9475336992182,1.85200853561197,1 } } Deformer: 130852048, "SubDeformer::Cluster_L_Pinky2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *30 { a: 6246,6247,6248,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6275,6276,6416,6470 } Weights: *30 { a: 0.00755235506221652,0.0340460389852524,0.00846235267817974,0.0141114005818963,0.0211576595902443,0.452955424785614,0.029446117579937,0.437771379947662,0.390317171812058,0.51088809967041,0.677973389625549,0.69030100107193,0.484176695346832,0.678302764892578,0.488589286804199,0.48065397143364,0.499816417694092,0.509559392929077,0.486769676208496,0.441025704145432,0.501901745796204,0.48899382352829,0.4646817445755,0.466712713241577,0.473297029733658,0.549367606639862,0.391996681690216,0.0391606763005257,0.0295384153723717,0.472831279039383 } Transform: *16 { a: 0.46713900074045,-0.863910014408551,-0.188256754586628,0,-0.865407114918385,-0.490380886739592,0.102942014820845,0,-0.181250153437913,0.114830509928814,-0.97670992775668,0,19.6083352155855,41.5176353883872,1.91200119143013,1 } TransformLink: *16 { a: 0.467139029382885,-0.865407167980465,-0.181250164551191,0,-0.863910037660342,-0.490380899937996,0.114830513019431,0,-0.188256764556457,0.102942020272518,-0.976709979481947,0,27.0676304296537,37.1318239873771,0.653993257848812,1 } } Deformer: 130856720, "SubDeformer::Cluster_R_Thumb2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *39 { a: 7061,7062,7063,7064,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7153,7157,7169,7170 } Weights: *39 { a: 0.462549269199371,0.343993365764618,0.403216421604156,0.432211607694626,0.690147161483765,0.665228009223938,0.63617742061615,0.552315056324005,0.596552550792694,0.496286422014236,0.546528279781342,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.492865741252899,0.501138925552368,0.51694792509079,0.568934202194214,0.616943299770355,0.594912886619568,0.543474555015564,0.624541223049164,0.503936529159546,0.487898200750351,0.481148064136505,0.41353514790535,0.246037870645523,0.470356494188309,0.358776807785034,0.347928255796433 } Transform: *16 { a: 0.183942706555208,-0.848161170706559,0.496777292207143,0,-0.711563310515749,-0.463571214563957,-0.527995586438497,0,0.678117009277356,-0.256367565452164,-0.688790932416489,0,28.2763608448924,0.812496319989095,38.4516975354302,1 } TransformLink: *16 { a: 0.183942717143272,-0.711563351474578,0.678117048310957,0,-0.848161195233266,-0.463571227969282,-0.256367572865675,0,0.496777309132162,-0.527995604427112,-0.688790955883342,0,-23.6140336280634,40.799399288542,7.51879685717006,1 } } Deformer: 130853216, "SubDeformer::Cluster_R_Index2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *34 { a: 7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7057,7060,7121,7124,7125,7126,7127,7166,7167,7168 } Weights: *34 { a: 0.0196526702493429,0.0388948395848274,0.0153781063854694,0.0233097579330206,0.0186757519841194,0.504974246025085,0.478513270616531,0.458382576704025,0.606969714164734,0.609241485595703,0.638486862182617,0.468806743621826,0.480103701353073,0.499032914638519,0.494927585124969,0.467299968004227,0.476862788200378,0.501342952251434,0.476703554391861,0.472311437129974,0.482087790966034,0.0294203441590071,0.457078576087952,0.0218525212258101,0.0127347502857447,0.0168898552656174,0.0218900591135025,0.47575369477272,0.488809376955032,0.514865398406982,0.566685616970062,0.0377235636115074,0.0243574362248182,0.468955308198929 } Transform: *16 { a: -0.364861736148864,0.690991750298911,0.62402424274074,0,-0.891041856361616,-0.453532359830624,-0.0187812728650536,0,0.270037487465404,-0.562884314957989,0.781179199772701,0,22.4634473604217,40.4969438613113,10.9593087714919,1 } TransformLink: *16 { a: -0.364861764998285,-0.891041926815814,0.270037508817122,0,0.690991783176016,-0.453532381409508,-0.562884341739794,0,0.624024283991176,-0.0187812741065694,0.781179251411694,0,-26.6258772092054,38.5883785902394,8.16793760109114,1 } } Deformer: 130839200, "SubDeformer::Cluster_R_Middle2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *32 { a: 7003,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7105,7129,7163,7164,7165 } Weights: *32 { a: 0.0448785312473774,0.01941136457026,0.0281076356768608,0.655481696128845,0.679150938987732,0.0478179343044758,0.489845812320709,0.558489799499512,0.535889983177185,0.585264027118683,0.52188766002655,0.481962472200394,0.487495481967926,0.491933614015579,0.480631649494171,0.482351124286652,0.514230608940125,0.48048734664917,0.487918704748154,0.951218128204346,0.80142742395401,0.555743455886841,0.518873155117035,0.50983989238739,0.0447485186159611,0.0386889614164829,0.476235747337341,0.0652661770582199,0.0468938462436199,0.0375622734427452,0.0262309741228819,0.480987906455994 } Transform: *16 { a: -0.532122228623454,0.74608839556489,0.400247370639833,0,-0.82552298459893,-0.562187946808888,-0.0495624079488834,0,0.188036317084237,-0.356786672901474,0.915065869188404,0,15.9470803705496,44.5503810501042,6.55022768199521,1 } TransformLink: *16 { a: -0.532122270746827,-0.825523049948226,0.188036331969396,0,0.746088461598279,-0.562187996565961,-0.356786704479278,0,0.400247396680201,-0.0495624111734475,0.915065928723215,0,-27.3744402201115,38.5350169717286,6.90246296248997,1 } } Deformer: 130846208, "SubDeformer::Cluster_R_Ring2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *31 { a: 6977,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7004,7005,7133,7159,7160,7161,7162 } Weights: *31 { a: 0.0382037088274956,0.0364896692335606,0.0195562429726124,0.712645888328552,0.707021296024323,0.0143969738855958,0.49312686920166,0.88950514793396,0.551682949066162,0.570190012454987,0.586169481277466,0.540175020694733,0.484207719564438,0.478153556585312,0.499409109354019,0.496039986610413,0.479123532772064,0.434379041194916,0.46566715836525,0.442066639661789,0.463463187217712,0.490535736083984,0.496567964553833,0.541257619857788,0.474976152181625,0.0333678238093853,0.0247717965394259,0.0228563323616982,0.0331150405108929,0.0127192800864577,0.467338800430298 } Transform: *16 { a: -0.446935098472743,0.875983214247907,0.181390098903514,0,-0.894507223525502,-0.439952872930471,-0.0793613109964567,0,0.0102839187608738,-0.197724114126782,0.980203752580189,0,22.0845507828728,42.5736111092596,2.63824563864957,1 } TransformLink: *16 { a: -0.446935136832639,-0.894507300299969,0.0102839196435299,0,0.875983260367471,-0.439952896093512,-0.197724124536742,0,0.181390102125803,-0.0793613124062639,0.980203769992933,0,-27.901960584903,38.6945500401361,5.60469591815982,1 } } Deformer: 130838032, "SubDeformer::Cluster_R_Pinky2", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *30 { a: 6949,6950,6951,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6978,6979,7119,7158 } Weights: *30 { a: 0.00631227903068066,0.0288749616593122,0.0153481028974056,0.0111556136980653,0.0370478443801403,0.474144101142883,0.0249618031084538,0.470720201730728,0.42764550447464,0.556730091571808,0.641176640987396,0.702353775501251,0.478462547063828,0.590432405471802,0.486605674028397,0.479619711637497,0.496470123529434,0.494648188352585,0.482276678085327,0.43053936958313,0.488811641931534,0.479370653629303,0.454167634248734,0.459241479635239,0.477396637201309,0.509645402431488,0.413587629795074,0.0568801686167717,0.0476182997226715,0.466875940561295 } Transform: *16 { a: -0.54066747996728,0.839021802135076,-0.0609999543681701,0,-0.833617284990115,-0.544097414120462,-0.0950796886571808,0,-0.112963852891108,-0.000555879311200613,0.99359893142683,0,17.9398612556826,44.3369390457035,-2.32465801551563,1 } TransformLink: *16 { a: -0.540667515765707,-0.8336173401852,-0.112963860370618,0,0.839021894836614,-0.544097474236501,-0.000555879372618377,0,-0.0609999557003721,-0.0950796907336635,0.993598953126431,0,-27.6419664270552,38.8575682082219,4.36097974240904,1 } } Deformer: 130857888, "SubDeformer::Cluster_L_Thumb3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *396 { a: 6079,6091,6092,6094,6096,6097,6100,6101,6103,6104,6107,6108,6109,6116,6117,6118,6122,6123,6124,6126,6127,6184,6224,6350,6354,6355,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6404,6405,6446,6459,6464,6465,6466,6468,6481,6482,6483,6566,6567,6570,6572,6573,6580,6582,6587,6588,6589,6605,6606,6607,6608,6609,6630,6631,6633,6635,6636,6637,6640,6641,6642,6643,6649,6663,6669,6682,6683,6689,6855,6858,6859,6862,6863,6864,6866,6867,6868,6869,6870,6903,6904,6911,9314,9316,9329,9352,9353,9428,9429,9430,9431,9432,9433,9434,9435,9448,9449,9450,9455,9457,9459,9461,9462,9463,9475,9476,9477,9478,9479,9480,9481,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9506,9507,9508,9509,9510,9513,9514,9515,9516,9517,9518,9519,9520,9522,9523,9531,9538,9540,9542,9544,9546,9547,9548,9549,9550,9551,9556,9557,9558,9559,9560,9561,9562,9567,9568,9569,9570,9571,9572,9573,9574,9577,9578,9579,9580,9581,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9635,9636,9637,9640,9641,9642,9649,9650,9651,9652,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,9673,9674,9675,9676,9677,9680,9681,9682,9683,9684,9688,9689,9690,9691,9692,9693,9694,9695,9697,9698,9701,9702,9703,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,9759,9760,9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,9779,9799,9800,9801,9802,9803,9804,9805,9810,9811,9813,9849,9851,9852,9853,9854,9855,9856,9857,9858 } Weights: *396 { a: 0.00149820931255817,0.00138663349207491,0.00258206482976675,0.00212346576154232,0.00344013841822743,0.00489160418510437,0.00107892986852676,0.00209578522481024,0.00151363876648247,0.00168884394224733,0.0021959962323308,0.00271111493930221,0.00310902716591954,0.00213803281076252,0.00564004061743617,0.00696052052080631,0.00111033720895648,0.00341050652787089,0.0053539639338851,0.00688229827210307,0.00649200333282351,0.0014114435762167,0.00588079309090972,0.00492632342502475,0.00596584053710103,0.0446317344903946,0.00557761080563068,0.0259243100881577,0.05253741517663,0.0559712648391724,0.0270659644156694,0.0530976578593254,0.0325066484510899,0.035634271800518,0.323588341474533,0.455188989639282,0.363215416669846,0.495746076107025,0.439982146024704,0.49608501791954,0.491237044334412,0.484662413597107,0.486869364976883,0.482354670763016,0.477824419736862,0.480040609836578,0.477701425552368,0.492183148860931,0.490344226360321,0.47708922624588,0.488475769758224,0.490052223205566,0.491328775882721,0.458046555519104,0.415151000022888,0.393014430999756,0.351960003376007,0.0252938233315945,0.0432725250720978,0.0325434282422066,0.00927298329770565,0.0129866236820817,0.0139118302613497,0.0106906080618501,0.00391026306897402,0.00286733661778271,0.00310411211103201,0.00216891011223197,0.00204042112454772,0.00304773822426796,0.00282205501571298,0.00232247146777809,0.00350804161280394,0.0190506651997566,0.00137466262094676,0.00171561446040869,0.00999070610851049,0.0263785943388939,0.0174223799258471,0.0177107490599155,0.0146211693063378,0.00217383401468396,0.00175195629708469,0.00127440562937409,0.00187887821812183,0.00171487790066749,0.00149286584928632,0.00251029059290886,0.00156333390623331,0.00117121625225991,0.00126078014727682,0.00140605447813869,0.00230707740411162,0.00234857969917357,0.00221398449502885,0.00196380750276148,0.00137024174910039,0.00224497076123953,0.00133721902966499,0.0020017025526613,0.00232847104780376,0.00133163447026163,0.00192440755199641,0.00171626394148916,0.00157908024266362,0.0012935638660565, 0.00231205811724067,0.00100099062547088,0.00109254475682974,0.0019734192173928,0.00168480223510414,0.00182580389082432,0.00142278173007071,0.0010410676477477,0.00153141666669399,0.00154780084267259,0.00201118993572891,0.00259579555131495,0.00223182025365531,0.00237108976580203,0.00265182740986347,0.00186769140418619,0.00367331691086292,0.00130162853747606,0.00129232939798385,0.0017205880722031,0.00136861728969961,0.00145484495442361,0.00100917939562351,0.0021941545419395,0.00188804056961089,0.00195067189633846,0.00165543414186686,0.00101901881862432,0.00102479092311114,0.00212220335379243,0.00114350859075785,0.00128554948605597,0.00123686867300421,0.00305265444330871,0.00291923386976123,0.00195410684682429,0.00105387123767287,0.00137196411378682,0.00153346301522106,0.00194630993064493,0.00169592432212085,0.00111660454422235,0.00186238554306328,0.00155351380817592,0.00250041089020669,0.00318694044835866,0.0032063857652247,0.00272415089420974,0.00245766364969313,0.00402964977547526,0.00341994944028556,0.0052446280606091,0.00654846709221601,0.00386982690542936,0.00455573340877891,0.00550030590966344,0.00639821263030171,0.00862144120037556,0.00814477447420359,0.0100691318511963,0.0101043749600649,0.00709112267941237,0.00818463880568743,0.00296359532512724,0.00321070617064834,0.00207592872902751,0.00333278137259185,0.00632657762616873,0.00672197481617332,0.00220432667993009,0.00154417741578072,0.00266806920990348,0.00424164813011885,0.00453092344105244,0.0031485699582845,0.00186956557445228,0.00134828640148044,0.0010057658655569,0.00159944279585034,0.00834708474576473,0.0086600948125124,0.00148575787898153,0.00140404503326863,0.00301717966794968,0.00333177810534835,0.0031098450999707,0.00239596702158451,0.00381142972037196,0.00410086335614324,0.00282490067183971,0.00170151132624596,0.00125974882394075,0.00221156352199614,0.00152939255349338,0.0064187771640718,0.0073395143263042,0.00633658794686198,0.00388056435622275,0.00348237995058298,0.00124342960771173,0.00193079898599535,0.00246216403320432,0.00223845848813653,0.00386203173547983, 0.00439270539209247,0.005020497366786,0.00632684724405408,0.00307083316147327,0.00286118732765317,0.00213557784445584,0.00129702757112682,0.00121187209151685,0.00251098163425922,0.00800847075879574,0.00886239018291235,0.00887640286237001,0.00767807802185416,0.00670932326465845,0.00401021400466561,0.00502444198355079,0.00238260510377586,0.00547388335689902,0.00776300393044949,0.00480005796998739,0.0028238866943866,0.00190474814735353,0.00193470239173621,0.00288113416172564,0.00389803969301283,0.00367174437269568,0.00390818109735847,0.00355087663047016,0.00268725026398897,0.00454041082412004,0.0035445315297693,0.00171094539109617,0.00341316545382142,0.00697055878117681,0.00964019820094109,0.00920553877949715,0.00569045403972268,0.00306147919036448,0.00185962207615376,0.00222978158853948,0.00188676745165139,0.00173016346525401,0.00136094342451543,0.00119532260578126,0.00134551979135722,0.00201214803382754,0.00433872221037745,0.00494116824120283,0.0048528490588069,0.00373621983453631,0.00260420818813145,0.00111460161861032,0.00214701052755117,0.00107349210884422,0.00131016981322318,0.00134573271498084,0.00137586984783411,0.00183277728501707,0.00205387198366225,0.00181044160854071,0.00195832783356309,0.00171237147878855,0.00127034331671894,0.00683472445234656,0.00616391934454441,0.00666100112721324,0.00529539445415139,0.00470123440027237,0.00376344588585198,0.00785322301089764,0.00749101815745234,0.00359520222991705,0.00375024485401809,0.00510285887867212,0.0165347177535295,0.0120284659788013,0.0136821400374174,0.0208208095282316,0.0121704069897532,0.00668172631412745,0.0071162823587656,0.0137389861047268,0.0208119451999664,0.0127062760293484,0.00445901975035667,0.0161651168018579,0.0138529241085052,0.0140357566997409,0.0165641214698553,0.0206819456070662,0.01622024923563,0.0097760334610939,0.00927293580025434,0.00617081159725785,0.00917889270931482,0.0165512580424547,0.0100768441334367,0.0127015858888626,0.0150537947192788,0.00986745487898588,0.0064253699965775,0.00897261500358582,0.00977715570479631,0.0120841050520539, 0.0137787126004696,0.0152517901733518,0.0186050273478031,0.0209942348301411,0.0180246215313673,0.0144900577142835,0.0112779578194022,0.010276542045176,0.00792760029435158,0.0171343702822924,0.0179134495556355,0.0175734963268042,0.0137078361585736,0.0129081830382347,0.0119716376066208,0.0115421507507563,0.00434318883344531,0.00599595671519637,0.00866668857634068,0.00924254860728979,0.0130253322422504,0.0132820680737495,0.00989582482725382,0.00758609594777226,0.00430233962833881,0.00572281144559383,0.00791021436452866,0.00848311930894852,0.011293787509203,0.0113278347998858,0.00868441443890333,0.00685539748519659,0.00510429078713059,0.00733340112492442,0.0107003068551421,0.0117350667715073,0.0164118018001318,0.0164599809795618,0.012408996000886,0.00942008569836617,0.00473457621410489,0.00436365557834506,0.00367337069474161,0.00328112719580531,0.00449102418497205,0.00377309625037014,0.00327134947292507,0.00724644213914871,0.0145453428849578,0.0169037282466888,0.019414534792304,0.0191765520721674,0.0144556574523449,0.0133972251787782,0.0110455770045519,0.00914285890758038,0.00429244339466095,0.0043087056837976,0.0039505329914391,0.00353592447936535,0.00316647044382989,0.00297523243352771,0.00270455866120756,0.00102158123627305,0.00184092985000461,0.00203118450008333,0.00171120732557029,0.00121729238890111,0.001143594738096,0.00112271460238844,0.00306950928643346,0.00121603487059474,0.00207205256447196,0.00437572225928307,0.00116132642142475,0.00153699307702482,0.0022282893769443,0.00355688342824578,0.00518744718283415,0.00414137402549386,0.00526373228058219,0.00548378052189946 } Transform: *16 { a: -0.150316349336557,0.772309497534129,0.617205824895879,0,-0.691277111630371,-0.528420530153594,0.492856640794004,0,0.706782058456871,-0.352575833811563,0.613310194135304,0,26.2919663830623,4.01581780486915,-36.6074352156097,1 } TransformLink: *16 { a: -0.15031636014454,-0.691277161334284,0.706782109275615,0,0.772309547535657,-0.528420564365051,-0.352575856638331,0,0.617205767563365,0.49285659501234,0.613310137164658,0,23.4449784066569,38.3392924705161,5.2849000587628,1 } } Deformer: 130855552, "SubDeformer::Cluster_L_Index3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *64 { a: 6303,6312,6314,6317,6318,6319,6320,6323,6324,6325,6326,6327,6328,6329,6330,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6351,6352,6418,6421,6422,6423,6424,6426,6427,6455,6475,6477,6478,6479,6480,9690,9691,9695,9697,9701,9709,9735,9736,9737,9738,9739,9743,9744,9745,9746,9747 } Weights: *64 { a: 0.00129172543529421,0.00132386665791273,0.0102978684008121,0.023387661203742,0.0202862359583378,0.0210154503583908,0.0131963603198528,0.0310754030942917,0.0289298985153437,0.0213378369808197,0.00458353338763118,0.00461415899917483,0.0256056245416403,0.00156837981194258,0.00284981518052518,0.00149840523954481,0.0021868369076401,0.00197000638581812,0.0135596552863717,0.00847333390265703,0.0207607746124268,0.29146534204483,0.369206309318542,0.475178509950638,0.481539070606232,0.497695684432983,0.45072677731514,0.473771840333939,0.477837771177292,0.45277014374733,0.457344979047775,0.475129336118698,0.0342537313699722,0.0230790339410305,0.00212693749926984,0.00162085669580847,0.0367642305791378,0.0134540442377329,0.364172965288162,0.308993935585022,0.00256865425035357,0.00292015401646495,0.00128136458806694,0.00546527421101928,0.0140916919335723,0.00372047512792051,0.00346140190958977,0.472873747348785,0.00581017322838306,0.00588010810315609,0.00412550196051598,0.00392747716978192,0.00405125552788377,0.00431024795398116,0.00382395950146019,0.00403719209134579,0.00546633033081889,0.00556815648451447,0.00421888194978237,0.0034736858215183,0.0036936835385859,0.00476250844076276,0.00477577652782202,0.00371923088096082 } Transform: *16 { a: 0.341297846079195,-0.787623412947761,0.512996243916672,0,-0.913316686228974,-0.40689157673435,-0.0170845552668778,0,0.222190046083139,-0.462697109835493,-0.858220815284256,0,22.5696856853696,38.049012840111,-9.07690578638613,1 } TransformLink: *16 { a: 0.341297844147108,-0.913316681058689,0.222190044825321,0,-0.787623404054734,-0.406891572140152,-0.462697104611198,0,0.512996245923281,-0.0170845553337044,-0.858220818641226,0,26.9217265395714,35.9400181764268,4.80041908558635,1 } } Deformer: 130842704, "SubDeformer::Cluster_L_Middle3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *45 { a: 6288,6289,6290,6292,6293,6294,6295,6296,6297,6298,6299,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6328,6340,6341,6343,6344,6345,6346,6347,6348,6424,6474,6477,6480 } Weights: *45 { a: 0.014571632258594,0.0314285829663277,0.00121804932132363,0.0216398369520903,0.113343708217144,0.0645012483000755,0.0907544791698456,0.0472875647246838,0.0558902733027935,0.017894497141242,0.0183007605373859,0.00250962004065514,0.00116259243804961,0.00177814660128206,0.0104236043989658,0.0174920316785574,0.404900193214417,0.344944804906845,0.459532350301743,0.484952598810196,0.487971544265747,0.491063833236694,0.484419077634811,0.48267862200737,0.447204828262329,0.48245307803154,0.487936288118362,0.00191004655789584,0.227206647396088,0.0147803528234363,0.0280758254230022,0.431229382753372,0.0180178489536047,0.0322740189731121,0.0178740713745356,0.00366789777763188,0.0290819946676493,0.0161577016115189,0.0019784311298281,0.00371509045362473,0.0188771914690733,0.00367660750634968,0.0454932413995266,0.483157634735107,0.0285708270967007 } Transform: *16 { a: 0.444149185987956,-0.852513629457775,0.275593811819462,0,-0.890216396056314,-0.454661404019702,0.028243899034468,0,0.101223567194035,-0.25788265192211,-0.960859095070715,0,18.8757617638073,40.7927182930377,-5.43133705084128,1 } TransformLink: *16 { a: 0.444149211847771,-0.890216447887616,0.101223573087601,0,-0.852513678154366,-0.454661429990501,-0.257882666652674,0,0.275593848328492,0.028243902776052,-0.960859222359615,0,27.8895386829017,35.5037913764696,3.39031262789266,1 } } Deformer: 130859056, "SubDeformer::Cluster_L_Ring3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *44 { a: 6262,6263,6264,6266,6267,6268,6269,6270,6273,6279,6280,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6305,6310,6311,6313,6314,6315,6316,6317,6319,6414,6470,6474,6477 } Weights: *44 { a: 0.0092698922380805,0.0212964508682489,0.00166295794770122,0.0119648510590196,0.0952514484524727,0.0141067132353783,0.00670324685052037,0.0510993860661983,0.00714946305379272,0.00109227269422263,0.00494632869958878,0.00435620592907071,0.00662066554650664,0.387978374958038,0.416656672954559,0.337617635726929,0.0103567326441407,0.486171543598175,0.47906419634819,0.498831510543823,0.482970893383026,0.48268136382103,0.435824930667877,0.455651253461838,0.446213185787201,0.464510530233383,0.396390706300735,0.0377589128911495,0.031072786077857,0.00150687724817544,0.0224732290953398,0.00124005973339081,0.00769013585522771,0.0019029772374779,0.0234128329902887,0.0137590598315001,0.0054404535330832,0.0225245822221041,0.0112551087513566,0.0140783805400133,0.00170884584076703,0.0353902839124203,0.470450043678284,0.0195930507034063 } Transform: *16 { a: 0.387236956053205,-0.920497931608773,0.0522593739742224,0,-0.920820074405676,-0.38328532604609,0.0719910237843162,0,-0.0462373391529367,-0.0759990671060605,-0.996035235121564,0,22.0773077684876,39.5994348948192,-2.25142358930824,1 } TransformLink: *16 { a: 0.387236971119137,-0.920820110231315,-0.0462373409518574,0,-0.920497985495389,-0.38328534848389,-0.0759990715551009,0,0.0522593771475497,0.0719910281558015,-0.996035295603456,0,28.0197082511753,35.6691944754238,1.78781893239835,1 } } Deformer: 130861392, "SubDeformer::Cluster_L_Pinky3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *59 { a: 6237,6243,6244,6245,6247,6248,6249,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6283,6286,6287,6288,6289,6291,6292,6302,6402,6411,6412,6414,6415,6416,6417,6428,6430,6470,6471,6472,6473,6476 } Weights: *59 { a: 0.0028082043863833,0.00591129856184125,0.00213855970650911,0.00684588542208076,0.00461385771632195,0.00100696296431124,0.00220880098640919,0.00101241818629205,0.00189215911086649,0.00694409897550941,0.00265500461682677,0.00246238824911416,0.012714060023427,0.00751850241795182,0.315340012311935,0.282398045063019,0.0182183086872101,0.290860831737518,0.488589286804199,0.48065397143364,0.484326124191284,0.483070969581604,0.486769676208496,0.441025704145432,0.428589582443237,0.476955205202103,0.4646817445755,0.0394535250961781,0.0268322117626667,0.368200391530991,0.00765684433281422,0.026226406916976,0.00414335122331977,0.00356931705027819,0.00267733377404511,0.00140286923851818,0.00212792283855379,0.00176225416362286,0.00486125983297825,0.00576191581785679,0.0130852656438947,0.0104430476203561,0.00325614050962031,0.0129974083974957,0.00201679929159582,0.00505299167707562,0.00323858973570168,0.00118227885104716,0.00599130569025874,0.00718945031985641,0.00294233672320843,0.00191051140427589,0.0024373906198889,0.00133377616293728,0.472831279039383,0.00406493013724685,0.00552025018259883,0.00154034374281764,0.00117001007311046 } Transform: *16 { a: 0.407760985670509,-0.893470954340694,-0.188256780336324,0,-0.896533461841144,-0.430848801096771,0.102941957451532,0,-0.173085860177758,0.126802791082547,-0.976709938167127,0,21.509000619089,40.1573955629144,1.91200401428514,1 } TransformLink: *16 { a: 0.407760991938071,-0.896533475621468,-0.173085862838205,0,-0.893470969097868,-0.430848808212964,0.126802793176909,0,-0.18825678687618,0.102941961027635,-0.976709972097069,0,27.4688834342309,36.3884796586712,0.498307394296883,1 } } Deformer: 130843872, "SubDeformer::Cluster_R_Thumb3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *574 { a: 4782,4783,4784,4785,4786,4787,4788,4789,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963,6722,6723,6728,6729,6741,6746,6747,6763,6764,6766,6767,6768,6769,6770,6771,6791,6797,6798,6801,6802,6809,6840,6846,6849,6850,6852,6853,6873,6879,6880,6881,6882,6907,6908,7053,7057,7058,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7107,7108,7153,7156,7157,7169,7170,7171,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296,7297,7298,7299,7300,7301,7302,7303,7316,7322,7323,7336,7338,7339,7352, 7354,7355,7356,7357,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7376,7377,7378,7379,7380,7383,7384,7385,7386,7387,7388,7390,7399,7409,7411,7413,7414,7415,7416,7417,7418,7424,7425,7427,7428,7429,7430,7431,7432,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7449,7450,7451,7452,7453,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7497,7498,7499,7500,7501,7502,7504,7509,7510,7513,7514,7515,7522,7523,7524,7525,7535,7536,7537,7540,7541,7542,7543,7544,7545,7546,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7806,7808,7913,7914,7917,7933,7934,7935,7957,7958,7959,7967,7970 } Weights: *574 { a: 0.0206349026411772,0.0207134280353785,0.0197373144328594,0.0196153838187456,0.0208342466503382,0.0199247840791941,0.020967910066247,0.0201352816075087,0.0210805311799049,0.0203174632042646,0.0211408846080303,0.0204198118299246,0.0211298149079084,0.0204070769250393,0.0210484024137259,0.0202776417136192,0.0209195241332054,0.0200689751654863,0.0207806546241045,0.0198448244482279,0.0206709150224924,0.0196701399981976,0.0206186510622501,0.0195889733731747,0.00788491498678923,0.00782912876456976,0.00798560492694378,0.00810904148966074,0.00822552479803562,0.00830235239118338,0.00831402372568846,0.00825399998575449,0.00813997536897659,0.00800746586173773,0.00789522379636765,0.0078317066654563,0.00756945041939616,0.00753615191206336,0.00763061735779047,0.00770501187071204,0.00777393067255616,0.00781835243105888,0.00782459136098623,0.00778975104913116,0.00772374542430043,0.0076460363343358,0.00757865281775594,0.00753908278420568,0.0208766013383865,0.00767658930271864,0.0181122086942196,0.0179667640477419,0.0192471258342266,0.0195576250553131,0.017364664003253,0.0171640403568745,0.0164985246956348,0.0164657682180405,0.0169501658529043,0.015617867000401,0.015304802916944,0.0159808788448572,0.0174158401787281,0.0186776164919138,0.0176764409989119,0.0164042636752129,0.0190876293927431,0.0152460727840662,0.0163333211094141,0.0142878238111734,0.0102278674021363,0.00993511267006397,0.0138036357238889,0.0146821737289429,0.0105258813127875,0.0151098612695932,0.010812477208674,0.0161618869751692,0.0113155674189329,0.010036863386631,0.013737072236836,0.00630041444674134,0.00632011285051703,0.00639667548239231,0.00648933136835694,0.00651344237849116,0.0065743844024837,0.0242732800543308,0.0226891804486513,0.0237810015678406,0.0253286696970463,0.0245126951485872,0.0229471866041422,0.0232219379395247,0.0217602085322142,0.0205131359398365,0.019203070551157,0.0137072140350938,0.0126667339354753,0.00796764250844717,0.00723331281915307,0.0209724307060242,0.0204414576292038,0.0208601392805576,0.0206289663910866,0.0196539610624313, 0.017655873671174,0.0119224833324552,0.00687668472528458,0.00526865758001804,0.0059863431379199,0.00525120692327619,0.00509030371904373,0.00596990715712309,0.00598286464810371,0.00556904869154096,0.00575726106762886,0.00705313589423895,0.00537844654172659,0.00546752708032727,0.00539919128641486,0.00507829757407308,0.00518155843019485,0.00542729906737804,0.0054210158996284,0.00563446758314967,0.00527805602177978,0.0065749972127378,0.00604006601497531,0.0215511415153742,0.0223440397530794,0.0224162228405476,0.0238475557416677,0.0218440778553486,0.0207823850214481,0.0184687711298466,0.0122669553384185,0.00555890798568726,0.0136925457045436,0.0145726623013616,0.0157181173563004,0.0136122927069664,0.0103479130193591,0.0108167203143239,0.0125496638938785,0.0101373661309481,0.00664365477859974,0.00665161525830626,0.00682164169847965,0.017512883991003,0.0179883632808924,0.012053057551384,0.00690233474597335,0.00658051390200853,0.00692128064110875,0.00667546642944217,0.021394906565547,0.0230478588491678,0.0239932388067245,0.0223625525832176,0.0229776855558157,0.0193508043885231,0.0216651074588299,0.0237432606518269,0.0216814745217562,0.0233111679553986,0.020858034491539,0.0221959985792637,0.018921347334981,0.01983792334795,0.0134088853374124,0.0136114526540041,0.00840287376195192,0.00817271880805492,0.0186147596687078,0.0228341855108738,0.019296795129776,0.0251542255282402,0.0243113692849875,0.00689046317711473,0.00623401440680027,0.0241503212600946,0.00160878302995116,0.00129173509776592,0.00135680811945349,0.0012447964400053,0.0023350368719548,0.00148189126048237,0.0011633113026619,0.00110392994247377,0.00112566619645804,0.00116727291606367,0.00214046915061772,0.0021126929204911,0.00183219206519425,0.00118055264465511,0.00219332682900131,0.00100228341761976,0.00213657296262681,0.00122010568156838,0.00124321086332202,0.00112911232281476,0.00185839796904475,0.00145611027255654,0.00128630979452282,0.00131676276214421,0.00158617389388382,0.00108790420927107,0.00129958556499332,0.00112535338848829,0.00239369086921215,0.00157444574870169, 0.00148654624354094,0.00162770645692945,0.00123939570039511,0.00106196757405996,0.00331193278543651,0.00375480088405311,0.030896969139576,0.00342011218890548,0.0314387418329716,0.0545489490032196,0.0613855123519897,0.0314983911812305,0.0380797535181046,0.0281153731048107,0.0474898740649223,0.357097029685974,0.441101938486099,0.374418169260025,0.496286422014236,0.446939200162888,0.494744300842285,0.488472163677216,0.483908146619797,0.487448483705521,0.480925589799881,0.477854013442993,0.481168687343597,0.477437734603882,0.493003726005554,0.491661250591278,0.477780610322952,0.488146930932999,0.491288512945175,0.490701496601105,0.453511834144592,0.400647670030594,0.362474709749222,0.346060484647751,0.0186582077294588,0.0302668269723654,0.0325701758265495,0.006045778747648,0.00994227733463049,0.0142911607399583,0.0085002314299345,0.00303881824947894,0.00225531472824514,0.00293149356730282,0.00189879583194852,0.00170789589174092,0.00283215427771211,0.00307905371300876,0.00244881375692785,0.0215538665652275,0.00817420054227114,0.0198179297149181,0.0167206320911646,0.0204745102673769,0.0128827076405287,0.0194632522761822,0.0188274458050728,0.0182689521461725,0.0176447071135044,0.0172243285924196,0.0133353779092431,0.012190000154078,0.0174007099121809,0.0154236424714327,0.0162051524966955,0.0151703329756856,0.0145016135647893,0.0117002241313457,0.00993908103555441,0.00885243806988001,0.00738500291481614,0.00533117121085525,0.00415570707991719,0.018776623532176,0.0151461735367775,0.00989001058042049,0.00656149117276073,0.00867951009422541,0.00545969419181347,0.00419409060850739,0.0036546946503222,0.00388043047860265,0.0102285426110029,0.0109922336414456,0.011212820187211,0.011874170973897,0.0128773888573051,0.014671872369945,0.0134199876338243,0.0147367622703314,0.0129374144598842,0.00857102498412132,0.00913834292441607,0.00777323078364134,0.00717859389260411,0.00542860059067607,0.00449881935492158,0.0031835213303566,0.00312779331579804,0.0037035767454654,0.00317463185638189,0.00338264461606741,0.00893745757639408,0.0100510297343135, 0.0108140856027603,0.0117486612871289,0.0122409416362643,0.00451468676328659,0.00393110932782292,0.00373097020201385,0.00271735526621342,0.00212495261803269,0.00191046798136085,0.00185692752711475,0.00193583639338613,0.0038805129006505,0.00357974087819457,0.00360461231321096,0.0035831171553582,0.0221672374755144,0.0216475501656532,0.0232979413121939,0.0227267239242792,0.0212558414787054,0.0213878713548183,0.0223234593868256,0.0210523474961519,0.0189590454101563,0.0212541595101357,0.0170140545815229,0.0229142792522907,0.0224664770066738,0.0243328101933002,0.0238737054169178,0.0234900992363691,0.0218856371939182,0.0175896864384413,0.0038775650318712,0.0221874229609966,0.0193830914795399,0.0190263278782368,0.0187140088528395,0.0205218344926834,0.0220660660415888,0.0231052581220865,0.0211554951965809,0.0121488925069571,0.0109862107783556,0.0107390657067299,0.0111830253154039,0.00352118560113013,0.00373788271099329,0.0161291547119617,0.0148201314732432,0.0186025146394968,0.0189929381012917,0.0184073783457279,0.0186326559633017,0.0197839718312025,0.0201774407178164,0.0187430661171675,0.018826674669981,0.0170398093760014,0.00637531839311123,0.0164432302117348,0.00738882645964623,0.0185393039137125,0.0195395369082689,0.0177061557769775,0.01780916005373,0.0182453524321318,0.0152524942532182,0.0192229803651571,0.00500145647674799,0.00770826498046517,0.0079919770359993,0.00751691404730082,0.00616343040019274,0.00610489910468459,0.00630897469818592,0.00628916407003999,0.00598625093698502,0.0048967176117003,0.00479170912876725,0.00100405083503574,0.00160079426132143,0.00141929858364165,0.00125143490731716,0.00160475785378367,0.00141920440364629,0.00139734172262251,0.00224228156730533,0.00232772389426827,0.00225778995081782,0.00207510311156511,0.00256772199645638,0.0027859196998179,0.00332566141150892,0.0031807953491807,0.00739510217681527,0.0069126570597291,0.00621898286044598,0.00728207407519221,0.00265317363664508,0.00284682074561715,0.00182450644206256,0.00242256047204137,0.0055518732406199,0.0061364620923996,0.00198462349362671, 0.00135667133145034,0.00205559935420752,0.00380312139168382,0.00420815823599696,0.00297090061940253,0.0017306130612269,0.00121383473742753,0.0013610718306154,0.00124339619651437,0.0023764178622514,0.00226104166358709,0.00185194308869541,0.00342356716282666,0.00380428275093436,0.00267043663188815,0.00157270825002342,0.00113264902029186,0.0018668407574296,0.00228324695490301,0.00129903561901301,0.00562178948894143,0.00653486745432019,0.00579681154340506,0.00362190813757479,0.0032473006285727,0.0010425541549921,0.00166034791618586,0.00213556736707687,0.00193362182471901,0.0033060503192246,0.00376513623632491,0.00419513089582324,0.00159871904179454,0.00179069326259196,0.00211882498115301,0.00271622347645462,0.00255756848491728,0.00192118179984391,0.0011733747087419,0.00109545432496816,0.00220512063242495,0.00709376437589526,0.00795820541679859,0.00799622107297182,0.00710853468626738,0.00609957706183195,0.00381770473904908,0.00473736319690943,0.00222578062675893,0.00509891239926219,0.00686382222920656,0.00414189184084535,0.00239852466620505,0.00162839086260647,0.00162805255968124,0.00251073832623661,0.00347989099100232,0.00331477355211973,0.00349547853693366,0.00321043259464204,0.00244455621577799,0.00413611950352788,0.00327009102329612,0.00156419666018337,0.00257822382263839,0.00607397267594934,0.00823282450437546,0.00776788638904691,0.00473087746649981,0.00330061535350978,0.0025250562466681,0.00152857240755111,0.00183194293640554,0.00153524335473776,0.00137504853773862,0.00150840170681477,0.00229560048319399,0.00346118840388954,0.00357474712654948,0.00299402745440602,0.00216723675839603,0.00185670738574117,0.00111249752808362,0.00113845674786717,0.00119416764937341,0.00159454462118447,0.00178431125823408,0.00155328854452819,0.00169874343555421,0.00148680072743446,0.00110015727113932,0.00114206888247281,0.0010633486090228,0.00107124063652009,0.00571294734254479,0.00447713444009423,0.00330340163782239,0.00269269663840532,0.00229857652448118,0.00221802247688174,0.0020226901397109,0.00163530313875526,0.00180016760714352, 0.00272176787257195,0.00381707167252898,0.00220523751340806,0.00238436763174832,0.00327288988046348,0.00446160836145282,0.00157232687342912,0.00185892870649695,0.00203555263578892,0.0046623470261693,0.00693457946181297,0.00711830705404282,0.00647621788084507,0.00254868599586189,0.00479469215497375,0.00661462964490056,0.00463264249265194,0.00530045060440898,0.00568296201527119,0.00735452771186829,0.00869803410023451,0.00973954610526562,0.0102844815701246,0.0102041307836771,0.00881630834192038,0.00401451764628291,0.00498052220791578,0.0047067110426724,0.00366361252963543,0.00462863780558109,0.00309047941118479,0.00190148048568517,0.00101162947248667,0.00110797781962901,0.00139670318458229,0.00118378805927932,0.00152170250657946,0.00218712538480759,0.00209142896346748,0.00139660085551441,0.00129944365471601,0.00151631084736437,0.0012562193442136,0.00226996839046478,0.00154895684681833 } Transform: *16 { a: 0.200525319605825,-0.844394449148324,0.496777179549792,0,-0.702343995267135,-0.477423749021521,-0.527995666348738,0,0.683009852073652,-0.243031979744324,-0.68879092601797,0,26.872808589569,1.33926660969348,38.4516999417911,1 } TransformLink: *16 { a: 0.200525329728245,-0.702344030721116,0.683009886551655,0,-0.844394478650866,-0.477423765702369,-0.243031988235689,0,0.496777214538215,-0.527995703535904,-0.688790974530079,0,-23.359737863823,39.8156867725917,8.45627455609007,1 } } Deformer: 130854384, "SubDeformer::Cluster_R_Index3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *48 { a: 7017,7020,7021,7022,7023,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7054,7055,7121,7124,7125,7126,7127,7128,7129,7130,7149,7163,7165,7166,7167,7168 } Weights: *48 { a: 0.0101615088060498,0.0229801908135414,0.0135756079107523,0.0224668979644775,0.0134341223165393,0.0261847041547298,0.031180327758193,0.0206251200288534,0.00532444892451167,0.00404853792861104,0.0273718051612377,0.00240944442339242,0.0034473619889468,0.00143961887806654,0.00180354132317007,0.00161263684276491,0.00291394721716642,0.00918020773679018,0.0127796493470669,0.0143848909065127,0.383575648069382,0.356072396039963,0.468806743621826,0.480103701353073,0.499032914638519,0.461361408233643,0.467299968004227,0.476862788200378,0.464165151119232,0.463425189256668,0.472311437129974,0.0294841714203358,0.024617824703455,0.00234879832714796,0.00223406916484237,0.0408354513347149,0.0222049206495285,0.380914241075516,0.347071617841721,0.00238839536905289,0.00339022045955062,0.00366555782966316,0.00173941173125058,0.00441070273518562,0.0152303511276841,0.00406680861487985,0.00302362628281116,0.468955308198929 } Transform: *16 { a: -0.364861744458599,0.690991822556432,0.624024157870216,0,-0.891041868342785,-0.453532336509674,-0.0187812675980029,0,0.270037436703439,-0.562884245045662,0.781179267695881,0,21.400601210705,40.4969467539201,10.9593068147554,1 } TransformLink: *16 { a: -0.364861773308025,-0.891041938796993,0.270037458055156,0,0.690991855433543,-0.453532358088558,-0.562884271827465,0,0.624024199120653,-0.0187812688395183,0.781179319334886,0,-27.0136717272842,37.6413386384827,8.45494659509225,1 } } Deformer: 130848544, "SubDeformer::Cluster_R_Middle3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *43 { a: 6991,6992,6995,6996,6997,6998,6999,7000,7001,7002,7008,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7025,7026,7027,7028,7031,7043,7044,7046,7047,7048,7049,7050,7051,7126,7127,7162,7165,7168 } Weights: *43 { a: 0.016761826351285,0.0327525436878204,0.0260655898600817,0.115334317088127,0.0583750233054161,0.0969952940940857,0.0520107224583626,0.0599400214850903,0.0216762609779835,0.0182991288602352,0.00387279852293432,0.0026070331223309,0.0157421063631773,0.0266785137355328,0.437584847211838,0.410475611686707,0.476766288280487,0.481962472200394,0.487495481967926,0.49189567565918,0.480631649494171,0.482351124286652,0.465472191572189,0.48048734664917,0.487918704748154,0.197620660066605,0.0147266173735261,0.0349608920514584,0.449677228927612,0.0217390302568674,0.0425560437142849,0.0204605255275965,0.00591357192024589,0.038311630487442,0.0179284252226353,0.00165145879145712,0.00414461409673095,0.0224138833582401,0.00393291655927897,0.00567780341953039,0.0500728152692318,0.480987906455994,0.0343999676406384 } Transform: *16 { a: -0.481422785176835,0.779765319558555,0.40024746206003,0,-0.861020536585011,-0.506149284513551,-0.0495624164792136,0,0.163937923853037,-0.368481771624397,0.915065812642581,0,17.3434308995453,43.4950490005919,6.55023114588821,1 } TransformLink: *16 { a: -0.481422830726269,-0.861020618049782,0.163937939363893,0,0.779765422628502,-0.506149351416733,-0.368481820330585,0,0.400247499891431,-0.0495624211638547,0.915065899134627,0,-28.1881253078821,37.2726877484919,7.18999535488276,1 } } Deformer: 130849712, "SubDeformer::Cluster_R_Ring3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *45 { a: 6964,6965,6966,6969,6970,6971,6972,6973,6976,6982,6983,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7002,7003,7004,7008,7012,7013,7014,7016,7017,7018,7019,7020,7022,7117,7158,7162,7165 } Weights: *45 { a: 0.00131166935898364,0.0117081198841333,0.0238597877323627,0.0171741582453251,0.115294389426708,0.0155567303299904,0.0101941684260964,0.0685082525014877,0.0103107020258904,0.00144403614103794,0.00316327856853604,0.00744051160290837,0.00404223706573248,0.447492778301239,0.429092288017273,0.389249831438065,0.0174639020115137,0.484207719564438,0.478153556585312,0.499409109354019,0.489902287721634,0.479123532772064,0.434379041194916,0.463143467903137,0.442066639661789,0.463111817836761,0.410636335611343,0.0470488779246807,0.0328258499503136,0.00182847154792398,0.0277167167514563,0.00191423017531633,0.00806708075106144,0.0110489251092076,0.00255572586320341,0.0283467769622803,0.0148475430905819,0.00837578997015953,0.0282952189445496,0.0123175773769617,0.0165584031492472,0.00247255084104836,0.0448792017996311,0.467338800430298,0.0227938573807478 } Transform: *16 { a: -0.446935126929394,0.875983205249199,0.181390072245155,0,-0.894507209233465,-0.439952904404044,-0.0793612976075899,0,0.0102839251840175,-0.197724083962655,0.980203758597428,0,20.6962879889423,42.5736113822138,2.63824437762396,1 } TransformLink: *16 { a: -0.446935165289291,-0.894507286007929,0.0102839260666741,0,0.875983251368767,-0.439952927567088,-0.197724094372613,0,0.181390075467443,-0.0793612990173964,0.980203776010172,0,-28.522422974648,37.4527398650693,5.61897255820232,1 } } Deformer: 130930640, "SubDeformer::Cluster_R_Pinky3", "Cluster" { Version: 100 Properties70: { P: "SrcModel", "object", "", "" } UserData: "", "" Indexes: *59 { a: 6940,6941,6946,6947,6948,6950,6951,6952,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984,6989,6990,6991,6992,6994,6995,7005,7105,7114,7115,7117,7118,7119,7120,7131,7133,7158,7159,7160,7161,7164 } Weights: *59 { a: 0.0029540981631726,0.00340022752061486,0.00514190411195159,0.00215059868060052,0.00547736883163452,0.0035235860850662,0.00184328865725547,0.0031976499594748,0.00340661476366222,0.00445797480642796,0.00196587364189327,0.00159703753888607,0.0202187430113554,0.00549371214583516,0.355474561452866,0.285276889801025,0.0310857817530632,0.371014595031738,0.486605674028397,0.479619711637497,0.495799422264099,0.493786364793777,0.482276678085327,0.43053936958313,0.448268443346024,0.47878086566925,0.454167634248734,0.055576641112566,0.0302723329514265,0.402357220649719,0.0076139303855598,0.0356811620295048,0.00618526106700301,0.00278126355260611,0.00223208218812943,0.00168520596344024,0.00120828486979008,0.00146028422750533,0.00699549773707986,0.0091273644939065,0.0148227522149682,0.0109403412789106,0.00498492131009698,0.0156873147934675,0.00253135734237731,0.00485804071649909,0.00442179199308157,0.00194254226516932,0.0086732842028141,0.0095840310677886,0.00492342142388225,0.00308714248239994,0.00303195556625724,0.00201294617727399,0.466875940561295,0.00367911183275282,0.00448152981698513,0.00220942520536482,0.00171917770057917 } Transform: *16 { a: -0.482801733001442,0.873602557741718,-0.0609999574633026,0,-0.868441857024725,-0.486588658706074,-0.0950796906612072,0,-0.112743748995228,0.00707027705556762,0.9935989294111,0,20.0346283563877,43.0828852057132,-2.32465793019685,1 } TransformLink: *16 { a: -0.48280176903813,-0.868441921845883,-0.112743757410506,0,0.873602609728157,-0.486588687662048,0.00707027747630639,0,-0.0609999589935693,-0.0950796930464102,0.993598954336881,0,-28.1063709762603,38.141527963791,4.26394901497251,1 } } Video: 125241152, "Video::character_anim:file2", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\head.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "E:\Projects\MonoGame\Test\Assets\Models\Dude\head.tga" RelativeFilename: "head.tga" } Video: 125241792, "Video::character_anim:file1", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\jacket.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "E:\Projects\MonoGame\Test\Assets\Models\Dude\jacket.tga" RelativeFilename: "jacket.tga" } Video: 126003728, "Video::character_anim:file6", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\pants.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "E:\Projects\MonoGame\Test\Assets\Models\Dude\pants.tga" RelativeFilename: "pants.tga" } Video: 126004368, "Video::character_anim:file8", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" RelativeFilename: "upBodyC.tga" } Video: 126005008, "Video::character_anim:file13", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" RelativeFilename: "upBodyC.tga" } Video: 126003088, "Video::character_anim:soldier_bindPose:file9", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "headS.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "headS.tga" RelativeFilename: "headS.tga" } Video: 125999248, "Video::character_anim:file10", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "jacketS.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "jacketS.tga" RelativeFilename: "jacketS.tga" } Video: 125997968, "Video::character_anim:file12", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "pantsS.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "pantsS.tga" RelativeFilename: "pantsS.tga" } Video: 126002448, "Video::character_anim:file11", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "upBodyS.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "upBodyS.tga" RelativeFilename: "upBodyS.tga" } Video: 125998608, "Video::character_anim:file15", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "upBodyS.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "upBodyS.tga" RelativeFilename: "upBodyS.tga" } Video: 125999888, "Video::character_anim:file3", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "headN.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "headN.tga" RelativeFilename: "headN.tga" } Video: 126000528, "Video::character_anim:file4", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "jacketN.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "jacketN.tga" RelativeFilename: "jacketN.tga" } Video: 126001168, "Video::character_anim:file7", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "pantsN.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "pantsN.tga" RelativeFilename: "pantsN.tga" } Video: 126001808, "Video::character_anim:file5", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "upbodyN.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "upbodyN.tga" RelativeFilename: "upbodyN.tga" } Video: 136659152, "Video::character_anim:file14", "Clip" { Type: "Clip" Properties70: { P: "Path", "KString", "XRefUrl", "", "upbodyN.tga" P: "PlaySpeed", "double", "Number", "",1 } UseMipMap: 0 Filename: "upbodyN.tga" RelativeFilename: "upbodyN.tga" } Texture: 133131328, "Texture::character_anim:file2", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file2" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file2" FileName: "E:\Projects\MonoGame\Test\Assets\Models\Dude\head.tga" RelativeFilename: "head.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 133273888, "Texture::character_anim:file1", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file1" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file1" FileName: "E:\Projects\MonoGame\Test\Assets\Models\Dude\jacket.tga" RelativeFilename: "jacket.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 133274640, "Texture::character_anim:file6", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file6" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file6" FileName: "E:\Projects\MonoGame\Test\Assets\Models\Dude\pants.tga" RelativeFilename: "pants.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 133302528, "Texture::character_anim:file8", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file8" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file8" FileName: "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" RelativeFilename: "upBodyC.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 133303280, "Texture::character_anim:file13", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file13" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file13" FileName: "E:\Projects\MonoGame\Test\Assets\Models\Dude\upBodyC.tga" RelativeFilename: "upBodyC.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125298944, "Texture::character_anim:soldier_bindPose:file9", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:soldier_bindPose:file9" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:soldier_bindPose:file9" FileName: "headS.tga" RelativeFilename: "headS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125299696, "Texture::character_anim:file10", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file10" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file10" FileName: "jacketS.tga" RelativeFilename: "jacketS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125235136, "Texture::character_anim:file12", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file12" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file12" FileName: "pantsS.tga" RelativeFilename: "pantsS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125235888, "Texture::character_anim:file11", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file11" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file11" FileName: "upBodyS.tga" RelativeFilename: "upBodyS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125236640, "Texture::character_anim:file15", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file15" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file15" FileName: "upBodyS.tga" RelativeFilename: "upBodyS.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125237392, "Texture::character_anim:file3", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file3" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file3" FileName: "headN.tga" RelativeFilename: "headN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125238144, "Texture::character_anim:file4", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file4" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file4" FileName: "jacketN.tga" RelativeFilename: "jacketN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125238896, "Texture::character_anim:file7", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file7" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file7" FileName: "pantsN.tga" RelativeFilename: "pantsN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125239648, "Texture::character_anim:file5", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file5" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file5" FileName: "upbodyN.tga" RelativeFilename: "upbodyN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } Texture: 125240400, "Texture::character_anim:file14", "" { Type: "TextureVideoClip" Version: 202 TextureName: "Texture::character_anim:file14" Properties70: { P: "CurrentTextureBlendMode", "enum", "", "",0 P: "UVSet", "KString", "", "", "map1" P: "UseMaterial", "bool", "", "",1 P: "VideoProperty", "object", "", "" } Media: "Video::character_anim:file14" FileName: "upbodyN.tga" RelativeFilename: "upbodyN.tga" ModelUVTranslation: 0,0 ModelUVScaling: 1,1 Texture_Alpha_Source: "None" Cropping: 0,0,0,0 } AnimationStack: 130965184, "AnimStack::Take 001", "" { Properties70: { P: "LocalStart", "KTime", "Time", "",1924423250 P: "LocalStop", "KTime", "Time", "",57732697500 P: "ReferenceStart", "KTime", "Time", "",1924423250 P: "ReferenceStop", "KTime", "Time", "",57732697500 } } AnimationLayer: 125203168, "AnimLayer::Layer0", "" { } AnimationCurveNode: 125161664, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",-0.77721095085144 P: "d|Y", "Number", "", "A",1.13318836688995 P: "d|Z", "Number", "", "A",0.656980156898499 } } AnimationCurveNode: 130891072, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",39.7229881286621 P: "d|Y", "Number", "", "A",-93.1371078491211 P: "d|Z", "Number", "", "A",42.0879821777344 } } AnimationCurveNode: 125193872, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 125194240, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 125675888, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 125676256, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.54331636428833 P: "d|Y", "Number", "", "A",-0.00359953427687287 P: "d|Z", "Number", "", "A",-1.3350340566376e-007 } } AnimationCurveNode: 125676624, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.96879076957703 P: "d|Y", "Number", "", "A",-0.549681961536407 P: "d|Z", "Number", "", "A",-5.84038019180298 } } AnimationCurveNode: 130892928, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 125160992, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 130893296, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 136827728, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.54404973983765 P: "d|Y", "Number", "", "A",-0.00359953194856644 P: "d|Z", "Number", "", "A",6.19496276499376e-008 } } AnimationCurveNode: 136826992, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.77687907218933 P: "d|Y", "Number", "", "A",1.67002356052399 P: "d|Z", "Number", "", "A",5.42585277557373 } } AnimationCurveNode: 136829568, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 136827360, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 136829936, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 136828096, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.5439600944519 P: "d|Y", "Number", "", "A",-0.00439895549789071 P: "d|Z", "Number", "", "A",2.22052122467176e-007 } } AnimationCurveNode: 136828464, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.87556838989258 P: "d|Y", "Number", "", "A",1.50368475914001 P: "d|Z", "Number", "", "A",3.25706577301025 } } AnimationCurveNode: 136828832, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1.00000011920929 P: "d|Y", "Number", "", "A",1.00000011920929 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 136829200, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 136830304, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 137457504, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",5.53625154495239 P: "d|Y", "Number", "", "A",-0.00288246641866863 P: "d|Z", "Number", "", "A",5.17475982064752e-008 } } AnimationCurveNode: 137456400, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-6.63933753967285 P: "d|Y", "Number", "", "A",1.94592773914337 P: "d|Z", "Number", "", "A",28.7092266082764 } } AnimationCurveNode: 137455296, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 137458976, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 137455664, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 137457872, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",3.95389556884766 P: "d|Y", "Number", "", "A",1.09085840449552e-006 P: "d|Z", "Number", "", "A",9.73389049363504e-008 } } AnimationCurveNode: 137458240, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.423987865448 P: "d|Y", "Number", "", "A",-0.918177843093872 P: "d|Z", "Number", "", "A",-18.9311122894287 } } AnimationCurveNode: 137456032, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1.00000011920929 P: "d|Y", "Number", "", "A",1.00000011920929 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 137454560, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 137458608, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 137460816, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.22069501876831 P: "d|Y", "Number", "", "A",1.4060525894165 P: "d|Z", "Number", "", "A",1.39484596252441 } } AnimationCurveNode: 137453824, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",3.26757836341858 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",0 } } AnimationCurveNode: 137459344, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 137459712, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 137456768, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 137461184, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.29626369476318 P: "d|Y", "Number", "", "A",1.33319282531738 P: "d|Z", "Number", "", "A",-1.0660924911499 } } AnimationCurveNode: 137460080, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",3.26757836341858 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",0 } } AnimationCurveNode: 137454192, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 137454928, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 137460448, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 137457136, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.48259973526001 P: "d|Y", "Number", "", "A",3.2479395866394 P: "d|Z", "Number", "", "A",1.27459120750427 } } AnimationCurveNode: 137461552, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.07939505577087 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",0.00536951329559088 } } AnimationCurveNode: 131342512, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131344352, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131343984, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131344720, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.57700967788696 P: "d|Y", "Number", "", "A",3.10706281661987 P: "d|Z", "Number", "", "A",-1.20767879486084 } } AnimationCurveNode: 131350240, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",0.292065471410751 P: "d|Y", "Number", "", "A",0.0640802830457687 P: "d|Z", "Number", "", "A",0.30150443315506 } } AnimationCurveNode: 131345088, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131345824, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131348032, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131345456, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",6.71029043197632 P: "d|Y", "Number", "", "A",0.844819128513336 P: "d|Z", "Number", "", "A",0.0320546366274357 } } AnimationCurveNode: 131347664, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",9.80766296386719 P: "d|Y", "Number", "", "A",60.3215827941895 P: "d|Z", "Number", "", "A",41.7058372497559 } } AnimationCurveNode: 131348768, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131346192, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131343248, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131346560, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",13.1421842575073 P: "d|Y", "Number", "", "A",-1.00144292858317e-009 P: "d|Z", "Number", "", "A",-3.49096410445782e-007 } } AnimationCurveNode: 131346928, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",33.6098442077637 P: "d|Y", "Number", "", "A",17.2327537536621 P: "d|Z", "Number", "", "A",-13.2919816970825 } } AnimationCurveNode: 131347296, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131348400, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131349136, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131349504, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",10.8255519866943 P: "d|Y", "Number", "", "A",5.22714969974913e-007 P: "d|Z", "Number", "", "A",9.90214175544679e-007 } } AnimationCurveNode: 131349872, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-82.1016998291016 P: "d|Y", "Number", "", "A",2.46786618232727 P: "d|Z", "Number", "", "A",3.1264545917511 } } AnimationCurveNode: 131342880, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131343616, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131428944, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131428576, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.62510848045349 P: "d|Y", "Number", "", "A",0.626630425453186 P: "d|Z", "Number", "", "A",-1.67875993251801 } } AnimationCurveNode: 131428208, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",119.229835510254 P: "d|Y", "Number", "", "A",30.9591827392578 P: "d|Z", "Number", "", "A",19.9485893249512 } } AnimationCurveNode: 131431152, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131430416, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131426000, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131425264, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.1404322385788 P: "d|Y", "Number", "", "A",2.85936584987212e-006 P: "d|Z", "Number", "", "A",-1.81425923528877e-006 } } AnimationCurveNode: 131430784, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.84072734757501e-006 P: "d|Y", "Number", "", "A",-3.12636920796194e-008 P: "d|Z", "Number", "", "A",17.8534507751465 } } AnimationCurveNode: 131427104, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131427840, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131429312, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131429680, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.38246870040894 P: "d|Y", "Number", "", "A",-7.17560169505305e-007 P: "d|Z", "Number", "", "A",3.67166808246111e-006 } } AnimationCurveNode: 131424528, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-7.58698934077984e-006 P: "d|Y", "Number", "", "A",-3.2017899229686e-006 P: "d|Z", "Number", "", "A",8.96595764160156 } } AnimationCurveNode: 131427472, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1.00000011920929 } } AnimationCurveNode: 131431520, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131426736, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131431888, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.34874391555786 P: "d|Y", "Number", "", "A",0.0162533205002546 P: "d|Z", "Number", "", "A",-1.56133377552032 } } AnimationCurveNode: 131430048, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",12.0142822265625 P: "d|Y", "Number", "", "A",1.66459441184998 P: "d|Z", "Number", "", "A",3.92592287063599 } } AnimationCurveNode: 131432256, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131425632, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131424896, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131426368, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.47369563579559 P: "d|Y", "Number", "", "A",9.02053685081228e-008 P: "d|Z", "Number", "", "A",5.82350480726745e-007 } } AnimationCurveNode: 136845648, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",7.5388690845557e-008 P: "d|Y", "Number", "", "A",-3.20740196002589e-006 P: "d|Z", "Number", "", "A",15.1926651000977 } } AnimationCurveNode: 136844176, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 136846752, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 136846016, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 136843808, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.06284534931183 P: "d|Y", "Number", "", "A",1.39810509836025e-007 P: "d|Z", "Number", "", "A",2.21882010009722e-006 } } AnimationCurveNode: 136844544, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-7.97497079929599e-007 P: "d|Y", "Number", "", "A",7.67177255056595e-007 P: "d|Z", "Number", "", "A",-6.41338004925274e-008 } } AnimationCurveNode: 136846384, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 136843440, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 136844912, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 136845280, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.35998678207397 P: "d|Y", "Number", "", "A",-0.000294537370791659 P: "d|Z", "Number", "", "A",-0.366859555244446 } } AnimationCurveNode: 131533328, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.96983647346497 P: "d|Y", "Number", "", "A",1.10134339332581 P: "d|Z", "Number", "", "A",14.2388792037964 } } AnimationCurveNode: 131531120, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131532224, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131532592, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131531488, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.52912437915802 P: "d|Y", "Number", "", "A",7.80884704454365e-007 P: "d|Z", "Number", "", "A",-3.64346448122888e-007 } } AnimationCurveNode: 131534064, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",7.24273192531655e-008 P: "d|Y", "Number", "", "A",4.3645964069583e-006 P: "d|Z", "Number", "", "A",16.150936126709 } } AnimationCurveNode: 131535536, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131532960, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131531856, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131533696, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.52912795543671 P: "d|Y", "Number", "", "A",7.2803447892511e-007 P: "d|Z", "Number", "", "A",6.76120862408425e-007 } } AnimationCurveNode: 131534432, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",3.09046095026133e-006 P: "d|Y", "Number", "", "A",-2.7093806238554e-006 P: "d|Z", "Number", "", "A",3.80611896514893 } } AnimationCurveNode: 131536272, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131538112, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131535904, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131534800, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.29501485824585 P: "d|Y", "Number", "", "A",-0.0947425812482834 P: "d|Z", "Number", "", "A",0.806466221809387 } } AnimationCurveNode: 131536640, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-8.98741436004639 P: "d|Y", "Number", "", "A",-1.27314984798431 P: "d|Z", "Number", "", "A",19.2985076904297 } } AnimationCurveNode: 131537008, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 131535168, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 131537376, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 131537744, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.40333545207977 P: "d|Y", "Number", "", "A",1.16687704121432e-006 P: "d|Z", "Number", "", "A",-2.30216258501059e-007 } } AnimationCurveNode: 131538480, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.20680271922902e-006 P: "d|Y", "Number", "", "A",-3.11167731581463e-008 P: "d|Z", "Number", "", "A",25.5660648345947 } } AnimationCurveNode: 131538848, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1.00000011920929 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134646400, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134640512, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134644928, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.38826143741608 P: "d|Y", "Number", "", "A",2.13072965493666e-007 P: "d|Z", "Number", "", "A",-2.23952710598496e-007 } } AnimationCurveNode: 134640880, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",0 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",9.02113819122314 } } AnimationCurveNode: 134647504, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134639776, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134643088, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134641248, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",3.97267842292786 P: "d|Y", "Number", "", "A",0.223487868905067 P: "d|Z", "Number", "", "A",1.74283754825592 } } AnimationCurveNode: 134645296, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-20.6544322967529 P: "d|Y", "Number", "", "A",-0.819446563720703 P: "d|Z", "Number", "", "A",22.4568309783936 } } AnimationCurveNode: 134646768, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134644192, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134641616, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134641984, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.13179302215576 P: "d|Y", "Number", "", "A",-2.16195689972665e-006 P: "d|Z", "Number", "", "A",-4.03594668796359e-008 } } AnimationCurveNode: 134640144, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",0 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",0 } } AnimationCurveNode: 134645664, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134647136, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134642352, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134643456, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",0.858954668045044 P: "d|Y", "Number", "", "A",6.74906289077626e-007 P: "d|Z", "Number", "", "A",5.44045349215594e-007 } } AnimationCurveNode: 134646032, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-2.65944640887028e-006 P: "d|Y", "Number", "", "A",2.59772286881343e-006 P: "d|Z", "Number", "", "A",3.87032294273376 } } AnimationCurveNode: 134642720, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134643824, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134644560, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134718368, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",6.88650560379028 P: "d|Y", "Number", "", "A",-1.05879163742065 P: "d|Z", "Number", "", "A",0.188849896192551 } } AnimationCurveNode: 134720576, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",42.592903137207 P: "d|Y", "Number", "", "A",-47.3313064575195 P: "d|Z", "Number", "", "A",-50.2629508972168 } } AnimationCurveNode: 134715056, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1.00000011920929 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134713952, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134720208, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134720944, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",13.1421842575073 P: "d|Y", "Number", "", "A",9.03095610738092e-007 P: "d|Z", "Number", "", "A",3.16086266138882e-006 } } AnimationCurveNode: 134719840, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-31.568567276001 P: "d|Y", "Number", "", "A",-28.5609245300293 P: "d|Z", "Number", "", "A",-47.7509155273438 } } AnimationCurveNode: 134713584, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",0.99999988079071 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134721312, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134714320, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134716160, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",10.8255529403687 P: "d|Y", "Number", "", "A",4.45484261035745e-007 P: "d|Z", "Number", "", "A",-7.54761458665598e-007 } } AnimationCurveNode: 134714688, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",71.1884765625 P: "d|Y", "Number", "", "A",10.1721467971802 P: "d|Z", "Number", "", "A",-14.7731218338013 } } AnimationCurveNode: 134716528, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134716896, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134719104, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134715424, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.62510800361633 P: "d|Y", "Number", "", "A",0.626631021499634 P: "d|Z", "Number", "", "A",1.67876040935516 } } AnimationCurveNode: 134715792, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-129.154998779297 P: "d|Y", "Number", "", "A",-42.0322799682617 P: "d|Z", "Number", "", "A",34.3628196716309 } } AnimationCurveNode: 134717264, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 134717632, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 134718000, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 134718736, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.14043200016022 P: "d|Y", "Number", "", "A",-1.38291397888679e-006 P: "d|Z", "Number", "", "A",7.55724443024519e-007 } } AnimationCurveNode: 134719472, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",2.74146850642865e-006 P: "d|Y", "Number", "", "A",-3.38374729835778e-006 P: "d|Z", "Number", "", "A",32.0624504089355 } } AnimationCurveNode: 129431456, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129427776, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129427408, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129427040, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.38246870040894 P: "d|Y", "Number", "", "A",3.77754112435014e-008 P: "d|Z", "Number", "", "A",-3.12997121909575e-006 } } AnimationCurveNode: 129425568, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-7.38412791179144e-006 P: "d|Y", "Number", "", "A",2.46886565946625e-006 P: "d|Z", "Number", "", "A",2.01478266716003 } } AnimationCurveNode: 129429984, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129426672, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129428880, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129431088, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.34874391555786 P: "d|Y", "Number", "", "A",0.0162522289901972 P: "d|Z", "Number", "", "A",1.56133341789246 } } AnimationCurveNode: 129431824, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-11.8456792831421 P: "d|Y", "Number", "", "A",-2.26736164093018 P: "d|Z", "Number", "", "A",0.35604390501976 } } AnimationCurveNode: 129432192, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129425936, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129429616, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129428144, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.47369468212128 P: "d|Y", "Number", "", "A",-3.31795149577374e-006 P: "d|Z", "Number", "", "A",3.01659298429513e-007 } } AnimationCurveNode: 129426304, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",3.5970981571154e-006 P: "d|Y", "Number", "", "A",2.03909712581662e-006 P: "d|Z", "Number", "", "A",18.2982807159424 } } AnimationCurveNode: 129432560, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129433296, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129432928, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129430720, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.0628467798233 P: "d|Y", "Number", "", "A",-7.71003385580116e-008 P: "d|Z", "Number", "", "A",-3.79914951054161e-007 } } AnimationCurveNode: 129428512, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",6.12122676102445e-006 P: "d|Y", "Number", "", "A",1.18875880161795e-006 P: "d|Z", "Number", "", "A",13.211012840271 } } AnimationCurveNode: 129429248, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129430352, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129504128, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129501552, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.35998678207397 P: "d|Y", "Number", "", "A",-0.000293526856694371 P: "d|Z", "Number", "", "A",0.366859257221222 } } AnimationCurveNode: 129500080, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-1.12324810028076 P: "d|Y", "Number", "", "A",-1.13205850124359 P: "d|Z", "Number", "", "A",1.1130610704422 } } AnimationCurveNode: 129504864, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129503392, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129500448, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129501920, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.52912306785584 P: "d|Y", "Number", "", "A",-3.33934121954371e-006 P: "d|Z", "Number", "", "A",2.41871944695049e-009 } } AnimationCurveNode: 129503760, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",3.29875911120325e-006 P: "d|Y", "Number", "", "A",-3.02836747323454e-006 P: "d|Z", "Number", "", "A",18.566930770874 } } AnimationCurveNode: 129504496, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129501184, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129499344, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129506336, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.529128074646 P: "d|Y", "Number", "", "A",-1.97209737962112e-006 P: "d|Z", "Number", "", "A",-3.19399333648107e-007 } } AnimationCurveNode: 129502288, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-5.25195036971127e-006 P: "d|Y", "Number", "", "A",-6.89941970222208e-008 P: "d|Z", "Number", "", "A",3.59999227523804 } } AnimationCurveNode: 129502656, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129500816, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129507072, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129505232, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",4.29501342773438 P: "d|Y", "Number", "", "A",-0.0947411805391312 P: "d|Z", "Number", "", "A",-0.806465566158295 } } AnimationCurveNode: 129505600, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",9.92037773132324 P: "d|Y", "Number", "", "A",6.50482177734375 P: "d|Z", "Number", "", "A",12.5329875946045 } } AnimationCurveNode: 129505968, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129506704, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129503024, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129499712, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.40333533287048 P: "d|Y", "Number", "", "A",3.56238683707488e-006 P: "d|Z", "Number", "", "A",8.68510085183516e-007 } } AnimationCurveNode: 129593952, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-8.52487929137169e-008 P: "d|Y", "Number", "", "A",-1.5643117876607e-006 P: "d|Z", "Number", "", "A",27.2881908416748 } } AnimationCurveNode: 129589536, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129591008, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129596528, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129590272, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.38826143741608 P: "d|Y", "Number", "", "A",-2.60250772043946e-007 P: "d|Z", "Number", "", "A",1.2035725660553e-007 } } AnimationCurveNode: 129604992, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.73695445937483e-006 P: "d|Y", "Number", "", "A",-8.55293436075044e-009 P: "d|Z", "Number", "", "A",13.044979095459 } } AnimationCurveNode: 129594688, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129596160, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129595056, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129590640, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",3.97267866134644 P: "d|Y", "Number", "", "A",0.223486974835396 P: "d|Z", "Number", "", "A",-1.74283790588379 } } AnimationCurveNode: 129599840, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",24.3684997558594 P: "d|Y", "Number", "", "A",5.07718563079834 P: "d|Z", "Number", "", "A",23.8567218780518 } } AnimationCurveNode: 129597264, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129595424, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129603888, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129597632, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",1.13179266452789 P: "d|Y", "Number", "", "A",-4.5721540118393e-006 P: "d|Z", "Number", "", "A",-2.5465004682701e-007 } } AnimationCurveNode: 129598368, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.28670376398077e-006 P: "d|Y", "Number", "", "A",2.94697493075091e-008 P: "d|Z", "Number", "", "A",21.8681793212891 } } AnimationCurveNode: 129593216, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129591376, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129591744, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129600576, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",0.858952879905701 P: "d|Y", "Number", "", "A",-2.68376516032731e-006 P: "d|Z", "Number", "", "A",3.09315595359294e-007 } } AnimationCurveNode: 129594320, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",0 P: "d|Y", "Number", "", "A",0 P: "d|Z", "Number", "", "A",5.75897359848022 } } AnimationCurveNode: 129592848, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129589904, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129598000, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129601312, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",-3.76930594444275 P: "d|Y", "Number", "", "A",-0.355237752199173 P: "d|Z", "Number", "", "A",3.4951446056366 } } AnimationCurveNode: 129603152, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-14.2042036056519 P: "d|Y", "Number", "", "A",-164.144622802734 P: "d|Z", "Number", "", "A",-29.484790802002 } } AnimationCurveNode: 129605360, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129598736, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129602416, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129595792, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",18.257194519043 P: "d|Y", "Number", "", "A",-6.12689859735838e-007 P: "d|Z", "Number", "", "A",1.20223648991669e-006 } } AnimationCurveNode: 129596896, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",9.30474472045898 P: "d|Y", "Number", "", "A",-0.54519647359848 P: "d|Z", "Number", "", "A",-24.0315208435059 } } AnimationCurveNode: 129592112, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129599104, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129600944, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129604624, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",15.4280042648315 P: "d|Y", "Number", "", "A",-1.32429221366692e-007 P: "d|Z", "Number", "", "A",3.40772317031224e-007 } } AnimationCurveNode: 129593584, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-4.13260126113892 P: "d|Y", "Number", "", "A",-1.2486013174057 P: "d|Z", "Number", "", "A",7.7121057510376 } } AnimationCurveNode: 129599472, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129592480, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129600208, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129601680, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",5.25022077560425 P: "d|Y", "Number", "", "A",6.27384853363037 P: "d|Z", "Number", "", "A",-7.13063798229996e-007 } } AnimationCurveNode: 129602048, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",5.08523999087629e-006 P: "d|Y", "Number", "", "A",-3.36317566507205e-006 P: "d|Z", "Number", "", "A",104.594673156738 } } AnimationCurveNode: 129602784, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1.00000011920929 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129603520, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129604256, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129681488, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",-3.76930618286133 P: "d|Y", "Number", "", "A",-0.355218410491943 P: "d|Z", "Number", "", "A",-3.49514603614807 } } AnimationCurveNode: 129686272, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",8.09784317016602 P: "d|Y", "Number", "", "A",184.387466430664 P: "d|Z", "Number", "", "A",0.917054355144501 } } AnimationCurveNode: 129676704, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129678544, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129677808, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129682960, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",18.257194519043 P: "d|Y", "Number", "", "A",-1.20693221106194e-006 P: "d|Z", "Number", "", "A",-1.28146643874061e-006 } } AnimationCurveNode: 129683328, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",-1.3035603761673 P: "d|Y", "Number", "", "A",-4.911376953125 P: "d|Z", "Number", "", "A",-31.2710037231445 } } AnimationCurveNode: 129682592, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129679280, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129687376, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129678912, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",15.4280042648315 P: "d|Y", "Number", "", "A",1.89655921190024e-007 P: "d|Z", "Number", "", "A",5.16880504619621e-007 } } AnimationCurveNode: 129674864, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",4.14072751998901 P: "d|Y", "Number", "", "A",1.20476734638214 P: "d|Z", "Number", "", "A",25.1047039031982 } } AnimationCurveNode: 129673392, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",0.999999940395355 P: "d|Y", "Number", "", "A",0.999999940395355 P: "d|Z", "Number", "", "A",0.999999940395355 } } AnimationCurveNode: 129685904, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129681856, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurveNode: 129675232, "AnimCurveNode::T", "" { Properties70: { P: "d|X", "Number", "", "A",5.25022077560425 P: "d|Y", "Number", "", "A",6.27385330200195 P: "d|Z", "Number", "", "A",-4.15015392718487e-007 } } AnimationCurveNode: 129686640, "AnimCurveNode::R", "" { Properties70: { P: "d|X", "Number", "", "A",1.04748585272318e-006 P: "d|Y", "Number", "", "A",-3.46426012876044e-011 P: "d|Z", "Number", "", "A",104.594665527344 } } AnimationCurveNode: 129681120, "AnimCurveNode::S", "" { Properties70: { P: "d|X", "Number", "", "A",1 P: "d|Y", "Number", "", "A",1.00000011920929 P: "d|Z", "Number", "", "A",1 } } AnimationCurveNode: 129680752, "AnimCurveNode::Visibility", "" { Properties70: { P: "d|Visibility", "Visibility", "", "A",1 } } AnimationCurveNode: 129684432, "AnimCurveNode::liw", "" { Properties70: { P: "d|liw", "Bool", "", "A",0 } } AnimationCurve: 130891648, "AnimCurve::", "" { Default: -0.77721095085144 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -0.5862113,-0.5844057,-0.6384128,-0.7069224,-0.7870775,-0.8135177,-0.8270722,-0.8073918,-0.761929,-0.7053674,-0.6570426,-0.6322919,-0.6477298,-0.7182612,-0.8657023,-1.051715,-1.15123,-1.105674,-1.039522,-0.9493799,-0.8788875,-0.8425765,-0.7185158,-0.7153105,-0.7035044,-0.7002378,-0.6961251,-0.6823247,-0.6644345,-0.6502793,-0.6427273,-0.6408071,-0.6557925,-0.7044126,-0.7878727,-0.7851791,-0.7098677,-0.6557797,-0.5862632 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *39 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *156 { a: 0.8913562,-0.7830235,1.179961e-015,0,-0.7830235,-1.837749,1.187599e-015,0,-1.837749,-2.229971,1.187599e-015,0,-2.229971,-1.598931,1.187599e-015,0,-1.598931,-0.5999199,1.18066e-015,0,-0.5999199,0.0918889,1.18066e-015,0,0.0918889,0.9771475,1.18066e-015,0,0.9771475,1.530366,1.187599e-015,0,1.530366,1.573296,1.18066e-015,0,1.573296,1.097367,1.18066e-015,0,1.097367,0.1472396,1.097392e-015,0,0.1472396,-1.290681,1.187599e-015,0,-1.290681,-3.269588,1.18066e-015,0,-3.269588,-5.001809,1.187599e-015,0,-5.001809,-4.282917,1.18066e-015,0,-4.282917,-0.8093869,1.18066e-015,0,-0.8093869,1.675619,1.18066e-015,0,1.675619,2.344416,1.18066e-015,0,2.344416,2.409521,1.18066e-015,0,2.409521,1.60205,1.18066e-015,0,1.60205,2.421442,1.18066e-015,0,2.421442,1.9318,1.097392e-015,0,1.9318,0.2252747,1.187599e-015,0,0.2252747,0.2260915,1.18066e-015,0,0.2260915,0.1106894,1.18066e-015,0,0.1106894,0.2686957,1.18066e-015,0,0.2686957,0.4753599,1.18066e-015,0,0.4753599,0.4806813,1.18066e-015,0,0.4806813,0.3256077,1.18066e-015,0,0.3256077,0.1420829,1.18066e-015,0,0.1420829,-0.1959774,1.18066e-015,0,-0.1959774,-0.9540824,1.18066e-015,0,-0.9540824,-1.981203,1.18066e-015,0,-1.981203,-1.211498,1.18066e-015,0,-1.211498,1.170074,1.18066e-015,0,1.170074,1.940991,1.18066e-015,0,1.940991,1.854068,1.18066e-015,0,1.854068,2.316921,1.18066e-015,0,2.316921,0,4.099946e-031,0 } KeyAttrRefCount: *39 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 130891968, "AnimCurve::", "" { Default: 1.13318836688995 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -0.06803528,-0.4848228,-0.8968627,-1.29122,-1.613297,-1.817017,-1.969155,-1.993369,-2.041067,-2.160735,-2.258767,-2.359775,-2.449431,-2.52879,-2.561778,-2.527515,-2.400151,-2.233619,-1.911749,-1.489907,-1.023536,-0.6471882,-0.1908383,0.1680487,0.3859898,0.5604479,0.7014259,0.8192266,0.9241002,1.051198,1.148975,1.19904,1.206276,1.200423,1.120737,0.9370632,0.6814346,0.2682671,-0.06796748 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130892288, "AnimCurve::", "" { Default: 0.656980156898499 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -0.06857681,-0.06646281,-0.05382903,0.05904346,0.07393175,-0.01696192,0.1313322,0.4221343,0.6628253,0.8424765,1.005161,1.077683,1.062223,0.9827809,0.7814125,0.4454659,0.1175201,-0.1548094,-0.2837411,-0.3541332,-0.4199411,-0.5803372,-0.6604667,-0.7967238,-1.058281,-1.067433,-0.767731,-0.4844143,-0.2486452,0.0259703,0.1878356,0.3973105,0.597966,0.6996925,0.6490704,0.5122113,0.3527247,0.1791422,-0.06852656 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 125192912, "AnimCurve::", "" { Default: 39.7229881286621 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 42.56249,58.91012,73.37173,78.48634,126.0489,157.5025,160.3125,169.2663,160.485,164.4568,154.2045,143.333,135.7685,133.4542,137.922,145.1689,154.8825,153.0579,149.9288,148.5615,140.2713,137.4999,123.4179,71.79041,17.60002,12.74956,7.175371,8.17238,5.182207,3.865541,6.03673,17.80678,34.83039,46.34514,38.49666,27.19074,30.0351,33.31339,42.50245 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 125193232, "AnimCurve::", "" { Default: -93.1371078491211 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -92.96087,-92.30371,-91.86466,-91.21073,-91.14777,-92.18208,-92.54626,-91.84973,-91.60869,-91.98856,-92.23349,-92.4352,-92.85291,-93.61852,-94.37347,-95.28769,-96.04151,-96.55688,-96.44324,-95.88692,-94.92078,-93.98665,-92.40127,-91.24198,-92.95097,-94.43939,-94.12706,-94.11952,-94.30535,-94.1212,-94.15518,-93.4074,-93.04201,-92.99794,-93.16288,-93.54665,-93.83508,-93.38506,-92.96331 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 125193552, "AnimCurve::", "" { Default: 42.0879821777344 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 38.73126,22.2216,7.965357,2.296763,-46.08855,-78.11824,-80.99458,-90.3858,-81.44224,-85.37534,-75.08923,-64.0761,-56.30352,-53.41969,-57.23397,-63.97123,-73.01833,-71.03559,-68.06356,-66.13725,-57.51773,-55.02619,-41.15606,11.17454,65.73624,71.48703,76.97137,76.09795,78.81972,79.53565,76.79645,64.4692,47.0431,35.41769,43.32322,54.76775,51.65232,48.0519,38.79089 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 125677184, "AnimCurve::", "" { Default: 2.96879076957703 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.242198,4.095002,3.757272,3.219776,2.987863,3.027878,2.588214,2.208392,1.659682,1.171913,0.6501644,0.03508137,-0.611182,-1.366303,-2.085215,-2.745216,-3.324057,-3.650598,-3.647876,-3.854589,-4.049462,-4.014885,-3.899355,-3.889452,-4.133147,-4.201873,-3.683349,-2.989151,-2.234379,-1.193851,-0.1894594,0.8996391,1.838151,2.518983,3.052088,3.27332,3.509038,3.823371,4.242053 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 125677504, "AnimCurve::", "" { Default: -0.549681961536407 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.018873,-0.706614,-0.4984642,-0.5108263,-1.254467,-2.778933,-3.211316,-3.294421,-3.503263,-3.797055,-3.912112,-3.879326,-3.952662,-4.12908,-4.55836,-5.19781,-5.86074,-5.680024,-5.175869,-4.475865,-3.994788,-3.675672,-2.093505,-0.3098976,2.265893,3.791279,3.976526,4.173005,4.386307,3.812721,3.287772,1.865363,0.4833371,-0.5978034,-0.5407706,-0.08053771,-0.1699873,-0.5279604,-1.018448 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130892608, "AnimCurve::", "" { Default: -5.84038019180298 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -5.996605,-6.286993,-6.491495,-6.630338,-6.670922,-6.548676,-6.523715,-6.387069,-6.250867,-6.184173,-6.171026,-6.114617,-6.058768,-6.084071,-6.106005,-6.184225,-6.187778,-6.25843,-6.221249,-6.2135,-6.340507,-6.310432,-6.147381,-5.914701,-5.687884,-5.628171,-5.643187,-5.706809,-5.780777,-5.828829,-5.859191,-5.897196,-5.933725,-5.890442,-5.83111,-5.821946,-5.919563,-5.929248,-5.996675 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130894000, "AnimCurve::", "" { Default: 2.77687907218933 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.21172,4.271284,4.213042,4.135572,4.059443,3.625401,2.859863,2.18298,1.176557,0.3478202,-0.3665772,-1.090295,-1.746986,-2.4442,-2.978673,-3.397184,-3.898298,-4.245234,-4.615451,-5.164673,-5.511253,-5.477523,-5.448197,-5.32071,-4.961872,-4.814724,-4.138953,-3.277687,-2.374393,-1.288115,-0.2887047,0.6719852,1.60916,2.307675,2.863769,3.230781,3.683229,4.083695,4.211723 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130894320, "AnimCurve::", "" { Default: 1.67002356052399 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 1.022204,0.1678924,-0.6370003,-0.925317,-1.365206,-1.845331,-2.235022,-2.012105,-1.81131,-1.840879,-1.74684,-1.537382,-1.441434,-1.294828,-1.305429,-1.32651,-1.405186,-1.250283,-0.8507921,-0.5897118,0.08678971,0.5698874,1.2617,1.799603,2.37976,2.573817,2.384275,2.216945,2.230554,2.214808,2.361717,2.178925,1.928483,1.686854,1.666907,1.725461,1.688616,1.409672,1.022258 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130894640, "AnimCurve::", "" { Default: 5.42585277557373 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.806067,4.264646,3.945256,3.796705,3.74954,3.875305,3.949199,4.260646,4.548424,4.68886,4.713312,4.812068,4.909081,4.851145,4.821341,4.709612,4.728709,4.508692,4.481983,4.353967,4.000323,4.001023,4.121314,4.451029,4.70578,4.820366,4.941865,5.006293,5.046872,5.136467,5.23399,5.248578,5.221129,5.319846,5.445484,5.501931,5.279728,5.161269,4.806 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130894960, "AnimCurve::", "" { Default: 2.87556838989258 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.266696,4.276803,4.170098,4.074358,3.974996,3.523165,2.736709,2.072271,1.078815,0.2495768,-0.4585719,-1.170016,-1.82127,-2.50925,-3.0449,-3.466537,-3.97278,-4.306652,-4.650473,-5.180891,-5.483387,-5.421375,-5.358436,-5.211494,-4.836151,-4.684783,-4.014651,-3.158348,-2.251374,-1.16114,-0.1497048,0.8020729,1.724047,2.407937,2.962167,3.332338,3.780853,4.163058,4.266702 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 130895280, "AnimCurve::", "" { Default: 1.50368475914001 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 0.7879336,-0.07188942,-0.8768089,-1.165088,-1.60058,-2.049075,-2.395221,-2.134755,-1.876632,-1.858375,-1.723032,-1.471238,-1.335874,-1.146282,-1.120793,-1.108881,-1.149733,-0.9753216,-0.5584457,-0.2729794,0.416423,0.891697,1.565286,2.084786,2.630566,2.812732,2.59516,2.38935,2.358588,2.284656,2.373418,2.132844,1.827044,1.547202,1.495626,1.532341,1.472091,1.174585,0.7879834 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136839328, "AnimCurve::", "" { Default: 3.25706577301025 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.632881,2.083859,1.759373,1.609677,1.568653,1.710731,1.789032,2.100833,2.389349,2.528979,2.550879,2.646002,2.739048,2.675137,2.638695,2.519807,2.528592,2.30488,2.27742,2.147324,1.790206,1.791118,1.923343,2.271837,2.555503,2.687795,2.805555,2.86496,2.899188,2.975874,3.064271,3.073352,3.046908,3.151416,3.27663,3.32874,3.105682,2.986908,2.632812 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136839648, "AnimCurve::", "" { Default: -6.63933753967285 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -6.509853,-6.342438,-6.171165,-5.872937,-5.553353,-5.167243,-4.860497,-4.564067,-4.358781,-4.198408,-4.018768,-3.94515,-3.909841,-3.874295,-3.911039,-3.959477,-3.98367,-4.059007,-4.125004,-4.20732,-4.269297,-4.388899,-4.516297,-4.825152,-5.160995,-5.427263,-5.640885,-5.924252,-6.198488,-6.386094,-6.530649,-6.600663,-6.602568,-6.592147,-6.648077,-6.630383,-6.583884,-6.552152,-6.509499 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136840288, "AnimCurve::", "" { Default: 1.94592773914337 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.107829,3.153727,3.263526,3.304598,3.318809,3.298728,3.139676,2.928735,2.657484,2.34003,2.107539,1.84665,1.659422,1.39009,1.174553,0.9487084,0.6637982,0.3720165,0.1423222,-0.2914399,-0.4947282,-0.6052362,-0.8746005,-1.045599,-1.145113,-1.082042,-1.015896,-0.7552063,-0.4653632,-0.02035714,0.3895851,0.8283812,1.286649,1.701174,1.991252,2.280741,2.571861,2.879606,3.10925 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136842528, "AnimCurve::", "" { Default: 28.7092266082764 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 28.80775,29.06864,29.23038,29.46235,29.52027,29.39862,29.46718,29.61337,29.57245,29.58216,29.4724,29.25682,28.99602,28.75366,28.61069,28.47581,28.5176,28.39471,28.24263,28.26248,28.40609,28.52785,28.57735,28.59876,28.46392,28.45303,28.78018,28.94366,29.13703,29.28356,29.27539,29.12977,28.9833,28.7681,28.69832,28.77833,28.76028,28.76546,28.80775 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136841888, "AnimCurve::", "" { Default: 1.423987865448 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.806913,-1.970359,-1.997383,-1.616787,-1.119151,-0.5186542,0.5523459,1.434999,2.706278,3.987073,4.940146,6.09693,7.338299,8.362406,9.405915,10.50017,11.50338,12.34429,13.14624,13.76419,14.2128,14.64604,14.53745,14.02906,13.51504,12.97266,12.02424,10.7239,9.583992,8.196795,6.733111,5.374278,3.820383,2.522166,1.220621,0.1247159,-0.7269028,-1.347477,-1.806526 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136839968, "AnimCurve::", "" { Default: -0.918177843093872 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -0.001611925,0.5788816,1.420448,1.967175,2.797338,3.696979,4.488471,4.877945,4.990181,5.066395,4.826081,4.550097,4.321606,3.790535,3.468753,2.921195,2.32047,1.573331,0.5256237,0.257217,-0.4023747,-0.8824536,-1.941043,-2.512666,-2.925986,-2.867071,-2.720807,-2.486483,-2.54745,-2.486542,-2.509004,-2.171341,-1.685766,-1.20596,-0.8648849,-0.8260861,-0.6780508,-0.4388731,-0.0007426521 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136840928, "AnimCurve::", "" { Default: -18.9311122894287 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -17.50209,-16.26714,-15.31903,-14.63314,-14.47304,-14.61157,-14.99046,-15.38267,-16.06443,-16.07428,-16.08509,-16.12724,-16.24982,-16.30578,-16.54708,-16.47405,-16.55947,-16.5633,-16.71608,-16.42698,-15.96505,-15.73784,-15.33995,-15.47627,-15.78655,-16.3694,-16.85394,-17.33829,-17.43604,-17.57801,-17.83736,-18.11453,-18.51772,-18.892,-18.93836,-18.93897,-18.71231,-18.25967,-17.50195 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136841248, "AnimCurve::", "" { Default: 3.26757836341858 KeyVer: 4007 KeyTime: *6 { a: 3848846500,9622116250,15395386000,38488465000,44261734750,55808274250 } KeyValueFloat: *6 { a: 3.711231,11.02347,3.711231,3.711231,2,3.711231 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *2 { a: 1032,1032 } KeyAttrDataFloat: *8 { a: 58.49789,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *2 { a: 1,5 } } AnimationCurve: 136842208, "AnimCurve::", "" { Default: 3.26757836341858 KeyVer: 4007 KeyTime: *6 { a: 3848846500,9622116250,15395386000,38488465000,44261734750,55808274250 } KeyValueFloat: *6 { a: 3.711231,11.02347,3.711231,3.711231,2,3.711231 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *2 { a: 1032,1032 } KeyAttrDataFloat: *8 { a: 58.49789,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *2 { a: 1,5 } } AnimationCurve: 136840608, "AnimCurve::", "" { Default: 1.07939505577087 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 4.633635,2.584161,2.180386,0,0,1.633955,-3.509884,0,4.633635 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *5 { a: 1032,1032,1032,1032,1032 } KeyAttrDataFloat: *20 { a: 0,0,4.099946e-031,0,0,-4.901864,4.099946e-031,0,-4.901864,24.43056,4.099946e-031,0,24.43056,27.80181,4.099946e-031,0,27.80181,0,4.099946e-031,0 } KeyAttrRefCount: *5 { a: 5,1,1,1,1 } } AnimationCurve: 136841568, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 0,0,0,0,0,0,0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 9 } } AnimationCurve: 136842848, "AnimCurve::", "" { Default: 0.00536951329559088 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 0.03436488,0,6.868795,0,0,0,0,0,0.03436488 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 9 } } AnimationCurve: 131385744, "AnimCurve::", "" { Default: 0.292065471410751 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 1.869219,2.584161,2.180386,0,0,1.633955,-3.509884,0,1.869219 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *4 { a: 1032,1032,1032,1032 } KeyAttrDataFloat: *16 { a: 0,0,4.099946e-031,0,0,-4.901864,4.099946e-031,0,-4.901864,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *4 { a: 5,1,1,2 } } AnimationCurve: 131387024, "AnimCurve::", "" { Default: 0.0640802830457687 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 0.4101138,0,0,0,0,0,0,0,0.4101138 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 9 } } AnimationCurve: 131389904, "AnimCurve::", "" { Default: 0.30150443315506 KeyVer: 4007 KeyTime: *9 { a: 0,3848846500,7697693000,19244232500,30790772000,34639618500,42337311500,50035004500,57732697500 } KeyValueFloat: *9 { a: 1.929628,0,6.868795,0,0,0,0,0,1.929628 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 9 } } AnimationCurve: 131390864, "AnimCurve::", "" { Default: 6.71029043197632 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 6.704924,6.710295,6.714579,6.723069,6.731362,6.740645,6.749883,6.759381,6.766335,6.772589,6.777908,6.780563,6.781595,6.783079,6.782899,6.782411,6.783216,6.782077,6.78065,6.779715,6.779107,6.776922,6.774244,6.76693,6.758018,6.751243,6.74721,6.740497,6.733834,6.728725,6.723647,6.71944,6.716572,6.713492,6.709697,6.708494,6.707413,6.705667,6.70492 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131389264, "AnimCurve::", "" { Default: 0.844819128513336 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 0.8875221,0.8636229,0.844628,0.8047196,0.7643412,0.7175642,0.6693393,0.6179364,0.5785679,0.5412166,0.508422,0.4895989,0.4804774,0.4664696,0.4624053,0.4590777,0.4458066,0.4420166,0.4409981,0.4273765,0.4211751,0.4277982,0.4282311,0.4576606,0.4976473,0.5350848,0.5590003,0.6056368,0.6519659,0.6965424,0.7368804,0.7721055,0.7997103,0.8247835,0.8485295,0.8598841,0.8697164,0.8817542,0.8875521 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131390224, "AnimCurve::", "" { Default: 0.0320546366274357 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -0.1277451,-0.1454227,-0.1704725,-0.1938886,-0.2128763,-0.2287475,-0.2247048,-0.21435,-0.1892092,-0.1563364,-0.1341542,-0.1014408,-0.07574903,-0.03958545,-0.007827153,0.025797,0.06366184,0.1071553,0.1424533,0.2030289,0.2309939,0.250197,0.2913772,0.3296477,0.3618924,0.3677555,0.366334,0.3451567,0.3192885,0.2691803,0.2231957,0.1711825,0.113111,0.06094402,0.02670475,-0.01303115,-0.05327647,-0.09522079,-0.1279489 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131389584, "AnimCurve::", "" { Default: 9.80766296386719 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 16.98269,15.28373,12.04786,8.411902,2.714019,-4.824852,-14.33382,-23.75185,-31.01704,-34.65207,-36.7016,-37.35373,-36.91788,-36.84663,-37.29629,-38.65701,-40.37612,-41.88214,-43.04815,-42.8388,-42.09435,-40.78643,-38.37872,-35.84132,-32.34884,-28.76373,-25.23481,-21.53757,-16.47117,-11.59956,-7.049416,-1.987245,2.719544,6.877076,10.35036,13.16879,15.5004,16.5853,16.98458 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131388944, "AnimCurve::", "" { Default: 60.3215827941895 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 55.32022,55.84225,57.18212,59.2549,61.86189,63.9062,64.31016,62.82496,59.90555,56.59253,53.13797,49.42305,45.53072,42.5208,39.77943,38.49574,37.68573,37.65844,38.11056,39.09026,41.02849,43.69946,46.81584,49.74337,52.80023,55.30089,58.13888,60.39305,62.33269,63.67958,64.03224,63.78632,63.0327,61.55378,60.0934,58.52982,57.02402,56.03614,55.32119 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131387344, "AnimCurve::", "" { Default: 41.7058372497559 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 55.20404,52.86647,48.11197,42.43337,33.66614,22.39933,9.237608,-4.424716,-15.75712,-22.90648,-28.38459,-32.17655,-34.3294,-36.02681,-36.53109,-36.36478,-35.68878,-34.48399,-32.82464,-29.87164,-27.314,-24.8921,-22.10512,-20.30037,-17.16508,-13.70752,-10.03508,-5.995913,0.5983117,7.380087,14.50075,22.357,29.74178,36.76037,42.62167,47.65226,51.8039,54.00383,55.20581 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131384784, "AnimCurve::", "" { Default: 33.6098442077637 KeyVer: 4007 KeyTime: *34 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *34 { a: 33.12244,32.45745,31.56673,30.62309,29.10582,27.99749,26.98576,28.28658,28.70609,29.6067,30.21872,30.4797,30.47973,30.38218,30.25193,32.48798,34.80407,37.19084,39.72681,41.32747,42.64369,43.61357,44.19391,44.87817,44.87825,45.66565,45.75561,44.87792,35.05602,33.60249,33.24104,33.15636,33.07115,33.12244 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *11 { a: 1032,3080,3080,3080,3080,3080,3080,3080,1032,3080,1032 } KeyAttrDataFloat: *44 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.2918012,4.099946e-031,0,0.2918012,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.7650709,4.099946e-031,0,0.7650709,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *11 { a: 1,9,1,1,10,1,1,4,1,4,1 } } AnimationCurve: 131387664, "AnimCurve::", "" { Default: 17.2327537536621 KeyVer: 4007 KeyTime: *34 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *34 { a: 15.94061,15.07442,14.49631,14.15596,13.46847,13.23066,13.66543,15.02046,16.6234,18.84152,21.09873,23.34901,23.34928,25.51451,26.8925,28.4014,29.08284,29.4776,30.04833,30.613,32.03201,33.30663,34.19,34.79932,34.7994,34.43178,33.37446,31.65652,23.29067,17.21802,16.78621,16.56304,16.20382,15.94061 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantAuto|GenericBreak, Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *13 { a: 1032,3080,3080,3080,3080,3080,3080,3080,3080,2312,1032,3080,1032 } KeyAttrDataFloat: *52 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,2.516045,4.099946e-031,0,2.516045,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.681286,4.099946e-031,0,0.681286,0,4.099946e-031,0,0,0,4.099946e-031,0,0,99.99993,4.099946e-031,0,100,-48.12834,4.099946e-031,0,-48.12834,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *13 { a: 1,9,1,1,10,1,1,2,1,1,1,4,1 } } AnimationCurve: 131390544, "AnimCurve::", "" { Default: -13.2919816970825 KeyVer: 4007 KeyTime: *34 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,43107080800,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *34 { a: -11.70809,-11.05149,-10.75816,-10.81749,-10.70105,-10.95521,-12.02242,-13.45945,-15.38508,-17.8217,-20.4018,-23.00584,-23.02258,-25.75541,-28.1961,-30.24244,-32.15874,-33.72176,-34.79902,-35.76816,-36.64137,-36.67215,-36.06206,-34.31725,-34.30217,-31.23588,-28.04336,-25.09167,-18.52162,-13.12165,-12.82992,-12.57045,-12.07891,-11.70809 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *34 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *136 { a: 25.14695,14.24904,1.179961e-015,0,14.24904,3.510034,3.499816e-031,0,3.510034,0.8566083,3.482857e-031,0,0.8566083,-2.065859,3.482857e-031,0,-2.065859,-19.82053,3.482857e-031,0,-19.82053,-37.56351,3.482857e-031,0,-37.56351,-50.43999,3.482857e-031,0,-50.43999,-65.43376,3.498264e-031,0,-65.43376,-75.25079,3.498264e-031,0,-75.25079,-78.00967,3.482857e-031,0,-78.00967,-80.28316,3.421226e-031,0,-80.28316,-80.37897,3.906102e-029,0,-80.37897,-77.5841,3.482865e-031,0,-77.5841,-67.30537,3.482857e-031,0,-67.30537,-59.43965,3.482857e-031,0,-59.43965,-52.18988,3.482857e-031,0,-52.18988,-39.60417,3.482857e-031,0,-39.60417,-30.69589,3.482857e-031,0,-30.69589,-27.63522,3.482857e-031,0,-27.63522,-13.55984,3.498264e-031,0,-13.55984,8.68964,3.482857e-031,0,8.68964,35.54196,3.498264e-031,0,35.54196,72.14781,3.421226e-031,0,72.14781,72.61127,3.906102e-029,0,72.61127,93.82727,3.482865e-031,0,93.82727,92.16309,3.498264e-031,0,92.16309,83.69065,1.1869e-015,0,83.69065,51.52097,2.386845e-036,0,51.52097,9.801663,1.21229e-037,0,9.801663,8.267944,3.498264e-031,0,8.267944,11.2652,3.498264e-031,0,11.2652,12.93539,3.482857e-031,0,12.93539,9.313682,3.482857e-031,0,9.313681,0,4.099946e-031,0 } KeyAttrRefCount: *34 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 131391184, "AnimCurve::", "" { Default: -82.1016998291016 KeyVer: 4007 KeyTime: *4 { a: 0,28866348750,44261734750,57732697500 } KeyValueFloat: *4 { a: -74.17377,-72.71737,-94.13535,-74.17377 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *4 { a: 1032,1032,1032,1032 } KeyAttrDataFloat: *16 { a: 0,0,4.099946e-031,0,0,-2.330245,4.099946e-031,0,-2.330245,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *4 { a: 1,1,1,1 } } AnimationCurve: 131386064, "AnimCurve::", "" { Default: 2.46786618232727 KeyVer: 4007 KeyTime: *4 { a: 0,28866348750,44261734750,57732697500 } KeyValueFloat: *4 { a: 10.06959,-16.63717,-12.56793,10.06959 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *4 { a: 1032,1032,1032,1032 } KeyAttrDataFloat: *16 { a: 0,0,4.099946e-031,0,0,42.73082,4.099946e-031,0,42.73082,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *4 { a: 1,1,1,1 } } AnimationCurve: 131385424, "AnimCurve::", "" { Default: 3.1264545917511 KeyVer: 4007 KeyTime: *4 { a: 0,28866348750,44261734750,57732697500 } KeyValueFloat: *4 { a: 3.062353,-10.07155,3.225219,3.062353 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 4 } } AnimationCurve: 131387984, "AnimCurve::", "" { Default: 119.229835510254 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 118.3934,121.9987,118.3934 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 5.768578,0,4.099946e-031,0,0,-5.768578,4.099946e-031,0,-5.768578,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131383504, "AnimCurve::", "" { Default: 30.9591827392578 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 28.78887,38.14366,28.78887 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 14.96765,0,4.099946e-031,0,0,-14.96765,4.099946e-031,0,-14.96765,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131388304, "AnimCurve::", "" { Default: 19.9485893249512 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 18.43795,24.94932,18.43795 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 10.4182,0,4.099946e-031,0,0,-10.4182,4.099946e-031,0,-10.4182,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131383824, "AnimCurve::", "" { Default: 2.85936584987212e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.859354e-006,2.859364e-006,2.859359e-006,2.859343e-006,2.859353e-006,2.859376e-006,2.859347e-006,2.859349e-006,2.859368e-006,2.859357e-006,2.859348e-006,2.859332e-006,2.859359e-006,2.859341e-006,2.859339e-006,2.859347e-006,2.859382e-006,2.859347e-006,2.859339e-006,2.859364e-006,2.859329e-006,2.859341e-006,2.859385e-006,2.859357e-006,2.859359e-006,2.85935e-006,2.859346e-006,2.859355e-006,2.859351e-006,2.859349e-006,2.859351e-006,2.859361e-006,2.859346e-006,2.859359e-006,2.859367e-006,2.859345e-006,2.859361e-006,2.859337e-006,2.859356e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131384144, "AnimCurve::", "" { Default: -1.81425923528877e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.814263e-006,-1.814258e-006,-1.81426e-006,-1.814267e-006,-1.81426e-006,-1.814254e-006,-1.814267e-006,-1.814278e-006,-1.81428e-006,-1.81426e-006,-1.814267e-006,-1.814266e-006,-1.814265e-006,-1.814263e-006,-1.814264e-006,-1.814265e-006,-1.814258e-006,-1.814262e-006,-1.814265e-006,-1.81426e-006,-1.81427e-006,-1.814267e-006,-1.814253e-006,-1.814262e-006,-1.81426e-006,-1.814263e-006,-1.814264e-006,-1.814263e-006,-1.814261e-006,-1.814263e-006,-1.814264e-006,-1.814258e-006,-1.814264e-006,-1.81426e-006,-1.814259e-006,-1.814266e-006,-1.814265e-006,-1.814261e-006,-1.814258e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131388624, "AnimCurve::", "" { Default: 2.84072734757501e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.840727e-006,2.840727e-006,2.840727e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131385104, "AnimCurve::", "" { Default: -3.12636920796194e-008 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.126369e-008,-3.126369e-008,-3.126369e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131384464, "AnimCurve::", "" { Default: 17.8534507751465 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 17.85345,17.85345,17.85345 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131386384, "AnimCurve::", "" { Default: -7.17560169505305e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -7.176536e-007,-7.175694e-007,-7.176189e-007,-7.17692e-007,-7.176377e-007,-7.175142e-007,-7.176675e-007,-7.17693e-007,-7.17629e-007,-7.176051e-007,-7.17644e-007,-7.176972e-007,-7.176141e-007,-7.176671e-007,-7.176549e-007,-7.176436e-007,-7.175282e-007,-7.176427e-007,-7.176827e-007,-7.175568e-007,-7.177069e-007,-7.176591e-007,-7.174896e-007,-7.176184e-007,-7.176105e-007,-7.176492e-007,-7.17661e-007,-7.176269e-007,-7.176485e-007,-7.176533e-007,-7.176463e-007,-7.176159e-007,-7.176795e-007,-7.175946e-007,-7.175538e-007,-7.176858e-007,-7.17605e-007,-7.177405e-007,-7.176108e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131386704, "AnimCurve::", "" { Default: 3.67166808246111e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.671683e-006,3.671679e-006,3.67169e-006,3.671664e-006,3.67169e-006,3.671685e-006,3.671653e-006,3.671599e-006,3.671579e-006,3.671678e-006,3.671643e-006,3.671662e-006,3.671651e-006,3.67167e-006,3.67166e-006,3.671657e-006,3.671687e-006,3.671671e-006,3.67166e-006,3.671673e-006,3.671629e-006,3.671648e-006,3.671715e-006,3.671671e-006,3.671683e-006,3.671669e-006,3.671659e-006,3.671669e-006,3.671684e-006,3.671672e-006,3.671665e-006,3.6717e-006,3.671674e-006,3.671674e-006,3.671667e-006,3.671667e-006,3.671656e-006,3.67171e-006,3.671691e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131452656, "AnimCurve::", "" { Default: -7.58698934077984e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -7.824985e-006,-5.536566e-006,-7.824985e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131450416, "AnimCurve::", "" { Default: -3.2017899229686e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -2.851291e-006,-6.22147e-006,-2.851291e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131452336, "AnimCurve::", "" { Default: 8.96595764160156 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 15.53453,-12.77829,15.53453 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -45.30051,0,4.099946e-031,0,0,45.30051,4.099946e-031,0,45.30051,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131453616, "AnimCurve::", "" { Default: 12.0142822265625 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 12.04157,11.7792,12.04157 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131455536, "AnimCurve::", "" { Default: 1.66459441184998 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0.729778,4.759159,0.729778 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 6.44701,0,4.099946e-031,0,0,-6.44701,4.099946e-031,0,-6.44701,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131451696, "AnimCurve::", "" { Default: 3.92592287063599 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 4.653052,1.518875,4.653052 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -5.014684,0,4.099946e-031,0,0,5.014684,4.099946e-031,0,5.014684,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131450736, "AnimCurve::", "" { Default: 9.02053685081228e-008 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 9.018095e-008,9.020135e-008,9.018595e-008,9.018214e-008,9.018527e-008,9.020653e-008,9.019118e-008,9.019919e-008,9.021738e-008,9.019345e-008,9.020073e-008,9.017504e-008,9.020033e-008,9.0188e-008,9.018913e-008,9.018999e-008,9.021124e-008,9.019163e-008,9.018254e-008,9.020528e-008,9.018584e-008,9.019232e-008,9.020533e-008,9.019283e-008,9.019249e-008,9.018771e-008,9.01918e-008,9.019112e-008,9.018436e-008,9.018771e-008,9.019084e-008,9.018385e-008,9.018117e-008,9.019789e-008,9.020675e-008,9.018231e-008,9.019914e-008,9.01577e-008,9.019107e-008 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131453296, "AnimCurve::", "" { Default: 5.82350480726745e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 5.823262e-007,5.823492e-007,5.823323e-007,5.823369e-007,5.823405e-007,5.823414e-007,5.823425e-007,5.823144e-007,5.82295e-007,5.823514e-007,5.823511e-007,5.823771e-007,5.823431e-007,5.823517e-007,5.82368e-007,5.823588e-007,5.823189e-007,5.823564e-007,5.823572e-007,5.823549e-007,5.82372e-007,5.823624e-007,5.823294e-007,5.823436e-007,5.823383e-007,5.823411e-007,5.823448e-007,5.823447e-007,5.823396e-007,5.823431e-007,5.8234e-007,5.823289e-007,5.823322e-007,5.823504e-007,5.823505e-007,5.823372e-007,5.823369e-007,5.823244e-007,5.823458e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131449136, "AnimCurve::", "" { Default: 7.5388690845557e-008 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.310863e-008,1.010135e-006,-3.310863e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131449776, "AnimCurve::", "" { Default: -3.20740196002589e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.207178e-006,-3.209336e-006,-3.207178e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131449456, "AnimCurve::", "" { Default: 15.1926651000977 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 16.68132,10.26472,16.68132 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -10.26656,0,4.099946e-031,0,0,10.26656,4.099946e-031,0,10.26656,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131450096, "AnimCurve::", "" { Default: 1.39810509836025e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 1.397325e-007,1.398022e-007,1.397526e-007,1.39736e-007,1.39756e-007,1.398129e-007,1.397599e-007,1.397419e-007,1.397623e-007,1.397829e-007,1.397912e-007,1.397621e-007,1.397852e-007,1.397657e-007,1.39783e-007,1.397769e-007,1.39799e-007,1.397755e-007,1.397561e-007,1.398153e-007,1.397699e-007,1.397824e-007,1.39803e-007,1.397722e-007,1.397686e-007,1.397604e-007,1.397642e-007,1.397694e-007,1.397512e-007,1.397592e-007,1.397615e-007,1.397462e-007,1.397334e-007,1.397925e-007,1.398138e-007,1.397373e-007,1.397801e-007,1.396766e-007,1.397749e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131454896, "AnimCurve::", "" { Default: 2.21882010009722e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.218714e-006,2.218817e-006,2.218749e-006,2.218726e-006,2.218767e-006,2.218815e-006,2.21875e-006,2.21864e-006,2.2186e-006,2.218808e-006,2.218788e-006,2.218843e-006,2.218775e-006,2.218783e-006,2.21883e-006,2.218806e-006,2.218756e-006,2.218794e-006,2.218786e-006,2.21884e-006,2.218808e-006,2.21881e-006,2.218804e-006,2.218777e-006,2.21877e-006,2.218763e-006,2.218762e-006,2.218776e-006,2.218757e-006,2.218763e-006,2.218754e-006,2.218742e-006,2.218721e-006,2.21881e-006,2.218822e-006,2.218729e-006,2.218757e-006,2.218682e-006,2.218794e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131452016, "AnimCurve::", "" { Default: -7.97497079929599e-007 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -7.974971e-007,-7.974971e-007,-7.974971e-007 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131452976, "AnimCurve::", "" { Default: 7.67177255056595e-007 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 7.671773e-007,7.671773e-007,7.671773e-007 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131451056, "AnimCurve::", "" { Default: -6.41338004925274e-008 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -6.41338e-008,-6.41338e-008,-6.41338e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131453936, "AnimCurve::", "" { Default: -0.000294537370791659 KeyVer: 4007 KeyTime: *32 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,43107080800,44646619400,46186158000,47725696599,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *32 { a: -0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374,-0.0002945374 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *23 { a: 50332680,50334728,50332680,50334728,50332680,50332680,50334728,50334728,50334728,50334728,50334728,50334728,50332680,50334728,50332680,50334728,50334728,50332680,50334728,50332680,50334728,50332680,1032 } KeyAttrDataFloat: *92 { a: 0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *23 { a: 2,2,2,3,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1 } } AnimationCurve: 131451376, "AnimCurve::", "" { Default: 1.96983647346497 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.019835,1.539085,2.019835 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131455856, "AnimCurve::", "" { Default: 1.10134339332581 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0.8711484,3.084562,0.8711484 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131454256, "AnimCurve::", "" { Default: 14.2388792037964 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 16.40386,7.07204,16.40386 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -14.93091,0,4.099946e-031,0,0,14.93091,4.099946e-031,0,14.93091,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 131454576, "AnimCurve::", "" { Default: 7.80884704454365e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 7.808657e-007,7.80882e-007,7.808705e-007,7.808634e-007,7.808695e-007,7.808882e-007,7.8087e-007,7.808731e-007,7.808866e-007,7.80875e-007,7.808783e-007,7.808598e-007,7.808787e-007,7.808692e-007,7.808706e-007,7.808774e-007,7.808904e-007,7.808732e-007,7.808646e-007,7.808857e-007,7.80865e-007,7.80872e-007,7.80889e-007,7.80874e-007,7.808745e-007,7.808691e-007,7.80871e-007,7.808726e-007,7.808676e-007,7.808694e-007,7.808715e-007,7.808693e-007,7.80864e-007,7.808787e-007,7.808858e-007,7.808638e-007,7.808785e-007,7.808473e-007,7.808738e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131455216, "AnimCurve::", "" { Default: -3.64346448122888e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.643785e-007,-3.643481e-007,-3.6437e-007,-3.643679e-007,-3.643618e-007,-3.643551e-007,-3.643598e-007,-3.643924e-007,-3.644111e-007,-3.643476e-007,-3.643488e-007,-3.643242e-007,-3.643565e-007,-3.643499e-007,-3.643325e-007,-3.643435e-007,-3.64376e-007,-3.643493e-007,-3.643464e-007,-3.643405e-007,-3.643319e-007,-3.643384e-007,-3.643653e-007,-3.643569e-007,-3.643623e-007,-3.643616e-007,-3.643572e-007,-3.643561e-007,-3.643634e-007,-3.64359e-007,-3.643622e-007,-3.643742e-007,-3.643727e-007,-3.643481e-007,-3.643461e-007,-3.643674e-007,-3.643635e-007,-3.643853e-007,-3.643543e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 131456176, "AnimCurve::", "" { Default: 7.24273192531655e-008 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 8.603566e-008,-4.481372e-008,8.603566e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131456496, "AnimCurve::", "" { Default: 4.3645964069583e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 4.364376e-006,4.366492e-006,4.364376e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 131456816, "AnimCurve::", "" { Default: 16.150936126709 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 17.19748,12.68651,17.19748 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -7.217565,0,4.099946e-031,0,0,7.217565,4.099946e-031,0,7.217565,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134599744, "AnimCurve::", "" { Default: 7.2803447892511e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 7.279796e-007,7.280296e-007,7.279971e-007,7.279725e-007,7.279979e-007,7.280441e-007,7.279874e-007,7.279653e-007,7.27981e-007,7.28013e-007,7.280107e-007,7.279895e-007,7.280104e-007,7.279955e-007,7.280051e-007,7.280034e-007,7.280344e-007,7.280058e-007,7.279862e-007,7.280392e-007,7.279855e-007,7.280027e-007,7.28046e-007,7.28005e-007,7.280059e-007,7.27993e-007,7.279933e-007,7.280008e-007,7.279914e-007,7.279928e-007,7.279945e-007,7.27995e-007,7.279746e-007,7.280212e-007,7.280369e-007,7.279738e-007,7.280079e-007,7.279412e-007,7.280109e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134603584, "AnimCurve::", "" { Default: 6.76120862408425e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 6.759388e-007,6.761158e-007,6.760031e-007,6.759431e-007,6.760247e-007,6.761292e-007,6.759829e-007,6.758021e-007,6.757612e-007,6.760911e-007,6.760458e-007,6.761123e-007,6.760365e-007,6.760368e-007,6.761054e-007,6.760728e-007,6.760429e-007,6.76062e-007,6.7603e-007,6.761536e-007,6.760495e-007,6.760725e-007,6.761268e-007,6.760399e-007,6.760343e-007,6.760102e-007,6.760033e-007,6.760359e-007,6.760061e-007,6.760104e-007,6.759976e-007,6.759957e-007,6.759401e-007,6.760968e-007,6.761253e-007,6.759484e-007,6.760122e-007,6.758729e-007,6.760723e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134600064, "AnimCurve::", "" { Default: 3.09046095026133e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.090461e-006,3.090461e-006,3.090461e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134602624, "AnimCurve::", "" { Default: -2.7093806238554e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -2.709381e-006,-2.709381e-006,-2.709381e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134598784, "AnimCurve::", "" { Default: 3.80611896514893 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.806119,3.806119,3.806119 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134600384, "AnimCurve::", "" { Default: -8.98741436004639 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -8.985373,-9.005011,-8.985373 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134600704, "AnimCurve::", "" { Default: -1.27314984798431 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -1.401271,-0.1693343,-1.401271 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134604224, "AnimCurve::", "" { Default: 19.2985076904297 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 20.57492,15.07314,20.57492 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -8.802845,0,4.099946e-031,0,0,8.802845,4.099946e-031,0,8.802845,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134601024, "AnimCurve::", "" { Default: 1.16687704121432e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 1.166872e-006,1.166877e-006,1.166875e-006,1.166868e-006,1.166874e-006,1.166881e-006,1.16687e-006,1.166868e-006,1.166873e-006,1.166874e-006,1.166873e-006,1.166867e-006,1.166875e-006,1.166871e-006,1.166871e-006,1.166872e-006,1.166882e-006,1.166874e-006,1.166869e-006,1.16688e-006,1.166866e-006,1.166871e-006,1.166885e-006,1.166874e-006,1.166875e-006,1.166871e-006,1.166871e-006,1.166873e-006,1.166872e-006,1.166871e-006,1.166872e-006,1.166873e-006,1.16687e-006,1.166876e-006,1.166877e-006,1.166869e-006,1.166874e-006,1.166867e-006,1.166875e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134601984, "AnimCurve::", "" { Default: -2.30216258501059e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.302475e-007,-2.302177e-007,-2.30238e-007,-2.302415e-007,-2.302322e-007,-2.3022e-007,-2.302337e-007,-2.302648e-007,-2.302775e-007,-2.302188e-007,-2.302231e-007,-2.302044e-007,-2.302277e-007,-2.302245e-007,-2.30209e-007,-2.30217e-007,-2.302374e-007,-2.302219e-007,-2.302232e-007,-2.302091e-007,-2.302134e-007,-2.302149e-007,-2.302253e-007,-2.302279e-007,-2.302315e-007,-2.302316e-007,-2.30231e-007,-2.302277e-007,-2.302346e-007,-2.302315e-007,-2.302341e-007,-2.302408e-007,-2.302444e-007,-2.302191e-007,-2.302157e-007,-2.302407e-007,-2.302332e-007,-2.30257e-007,-2.302247e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134604544, "AnimCurve::", "" { Default: 2.20680271922902e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.206803e-006,2.206803e-006,2.206803e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134605824, "AnimCurve::", "" { Default: -3.11167731581463e-008 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.111677e-008,-3.111677e-008,-3.111677e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134603904, "AnimCurve::", "" { Default: 25.5660648345947 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 25.56606,25.56606,25.56606 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134602944, "AnimCurve::", "" { Default: 2.13072965493666e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.131085e-007,2.130756e-007,2.130988e-007,2.13102e-007,2.130954e-007,2.130757e-007,2.13091e-007,2.131135e-007,2.131175e-007,2.13078e-007,2.130797e-007,2.130724e-007,2.130836e-007,2.130892e-007,2.130712e-007,2.130787e-007,2.130851e-007,2.13082e-007,2.130881e-007,2.130612e-007,2.130785e-007,2.130757e-007,2.130687e-007,2.130863e-007,2.130876e-007,2.130931e-007,2.13097e-007,2.130862e-007,2.130965e-007,2.130927e-007,2.13093e-007,2.131021e-007,2.131057e-007,2.130782e-007,2.13072e-007,2.131018e-007,2.130881e-007,2.131272e-007,2.130859e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134606144, "AnimCurve::", "" { Default: -2.23952710598496e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.240952e-007,-2.239531e-007,-2.240355e-007,-2.241235e-007,-2.240315e-007,-2.239151e-007,-2.240948e-007,-2.242374e-007,-2.242311e-007,-2.239888e-007,-2.24051e-007,-2.240298e-007,-2.240348e-007,-2.240528e-007,-2.240147e-007,-2.24029e-007,-2.239671e-007,-2.240203e-007,-2.240725e-007,-2.239254e-007,-2.24093e-007,-2.240421e-007,-2.238812e-007,-2.240277e-007,-2.240178e-007,-2.240604e-007,-2.240706e-007,-2.240381e-007,-2.240525e-007,-2.240613e-007,-2.240678e-007,-2.240322e-007,-2.241111e-007,-2.239793e-007,-2.239478e-007,-2.241173e-007,-2.240464e-007,-2.241578e-007,-2.239906e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134599104, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134603264, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134601344, "AnimCurve::", "" { Default: 9.02113819122314 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 9.021138,9.021138,9.021138 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134599424, "AnimCurve::", "" { Default: -20.6544322967529 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -20.65443,-20.65443,-20.65443 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134601664, "AnimCurve::", "" { Default: -0.819446563720703 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -0.8194466,-0.8194466,-0.8194466 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134602304, "AnimCurve::", "" { Default: 22.4568309783936 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 22.45683,22.45683,22.45683 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134604864, "AnimCurve::", "" { Default: -2.16195689972665e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.161949e-006,-2.161956e-006,-2.161951e-006,-2.161954e-006,-2.161952e-006,-2.161954e-006,-2.161957e-006,-2.161954e-006,-2.161953e-006,-2.161957e-006,-2.161959e-006,-2.16196e-006,-2.161956e-006,-2.161955e-006,-2.161959e-006,-2.161957e-006,-2.161951e-006,-2.161956e-006,-2.161957e-006,-2.161957e-006,-2.161962e-006,-2.16196e-006,-2.161951e-006,-2.161954e-006,-2.161954e-006,-2.161955e-006,-2.161956e-006,-2.161956e-006,-2.161952e-006,-2.161954e-006,-2.161955e-006,-2.161949e-006,-2.161952e-006,-2.161956e-006,-2.161957e-006,-2.161955e-006,-2.161956e-006,-2.161946e-006,-2.161953e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134605184, "AnimCurve::", "" { Default: -4.03594668796359e-008 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -4.037946e-008,-4.03594e-008,-4.037236e-008,-4.037884e-008,-4.036986e-008,-4.035826e-008,-4.037361e-008,-4.03947e-008,-4.039975e-008,-4.036139e-008,-4.036775e-008,-4.035718e-008,-4.036804e-008,-4.036758e-008,-4.035792e-008,-4.036008e-008,-4.036798e-008,-4.036411e-008,-4.036809e-008,-4.035201e-008,-4.036531e-008,-4.036252e-008,-4.035655e-008,-4.036809e-008,-4.036843e-008,-4.037139e-008,-4.037213e-008,-4.036798e-008,-4.037196e-008,-4.037321e-008,-4.037264e-008,-4.037213e-008,-4.037895e-008,-4.036201e-008,-4.0359e-008,-4.037298e-008,-4.037099e-008,-4.038708e-008,-4.036445e-008 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134605504, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134606464, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134711456, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134712736, "AnimCurve::", "" { Default: 6.74906289077626e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 6.749544e-007,6.749078e-007,6.74938e-007,6.749532e-007,6.749339e-007,6.749038e-007,6.7494e-007,6.749794e-007,6.749834e-007,6.749139e-007,6.749249e-007,6.749129e-007,6.749251e-007,6.749339e-007,6.749106e-007,6.749195e-007,6.749125e-007,6.749206e-007,6.749355e-007,6.748851e-007,6.74932e-007,6.749195e-007,6.748785e-007,6.749248e-007,6.749199e-007,6.749407e-007,6.749377e-007,6.74933e-007,6.749383e-007,6.749372e-007,6.749373e-007,6.749407e-007,6.749541e-007,6.749138e-007,6.749049e-007,6.74952e-007,6.749321e-007,6.749766e-007,6.749207e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134710176, "AnimCurve::", "" { Default: 5.44045349215594e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 5.439839e-007,5.44047e-007,5.440122e-007,5.439649e-007,5.44011e-007,5.440676e-007,5.439771e-007,5.439196e-007,5.439341e-007,5.440236e-007,5.439908e-007,5.439964e-007,5.440062e-007,5.439956e-007,5.440075e-007,5.440039e-007,5.440504e-007,5.44012e-007,5.439834e-007,5.440588e-007,5.439667e-007,5.439958e-007,5.44094e-007,5.440102e-007,5.440183e-007,5.439954e-007,5.440227e-007,5.440013e-007,5.440003e-007,5.439942e-007,5.439923e-007,5.440147e-007,5.439746e-007,5.440317e-007,5.440479e-007,5.43968e-007,5.440031e-007,5.439547e-007,5.4403e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134712416, "AnimCurve::", "" { Default: -2.65944640887028e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -2.659446e-006,-2.659446e-006,-2.659446e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134707296, "AnimCurve::", "" { Default: 2.59772286881343e-006 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.597723e-006,2.597723e-006,2.597723e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134710816, "AnimCurve::", "" { Default: 3.87032294273376 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.870323,3.870323,3.870323 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 134708896, "AnimCurve::", "" { Default: 6.88650560379028 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 6.882456,6.882598,6.882385,6.88272,6.883077,6.883392,6.884174,6.884972,6.885825,6.88667,6.886871,6.887172,6.887263,6.887357,6.887553,6.887679,6.887657,6.887497,6.887216,6.886338,6.885871,6.885779,6.884912,6.884567,6.884317,6.884666,6.884809,6.885602,6.88611,6.886891,6.887267,6.887532,6.887527,6.887152,6.886386,6.885579,6.884701,6.883475,6.88245 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134705376, "AnimCurve::", "" { Default: -1.05879163742065 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.112103,-1.098785,-1.086636,-1.055707,-1.016842,-0.9637029,-0.9166489,-0.869556,-0.8267558,-0.78812,-0.7494406,-0.7204897,-0.6997542,-0.6746657,-0.6639796,-0.6543581,-0.6418924,-0.6321239,-0.6241201,-0.6099701,-0.6090741,-0.6203912,-0.6220046,-0.6516851,-0.685647,-0.7227913,-0.7604417,-0.8149078,-0.8705899,-0.9234556,-0.9656311,-0.9971974,-1.021227,-1.03969,-1.062329,-1.078639,-1.089327,-1.103332,-1.112141 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134710496, "AnimCurve::", "" { Default: 0.188849896192551 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 0.03336836,0.02116778,-0.0007472031,-0.02025299,-0.03971121,-0.060796,-0.057015,-0.04495386,-0.02223387,0.009655932,0.02804088,0.0547827,0.07361853,0.1032328,0.1312529,0.1613555,0.1999704,0.2402387,0.2716093,0.3323803,0.3639125,0.3864518,0.4289438,0.4686386,0.498659,0.5054748,0.5133104,0.4980175,0.4788825,0.434308,0.3898233,0.3356146,0.2749732,0.2183444,0.183388,0.1462071,0.1058901,0.06458583,0.03316538 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134709536, "AnimCurve::", "" { Default: 42.592903137207 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 44.71096,44.2724,43.29156,43.38291,43.60683,43.446,43.0552,41.63937,37.96909,31.39635,22.78314,13.96467,6.324103,0.700516,-2.722822,-5.49841,-7.202953,-8.621876,-8.923027,-9.350631,-9.088506,-8.681252,-8.288477,-7.522041,-6.153592,-1.471632,6.914005,17.74242,26.93093,34.24625,38.55726,40.76954,41.72073,42.44447,42.62039,42.83342,43.07911,43.56459,44.70947 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134711136, "AnimCurve::", "" { Default: -47.3313064575195 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -43.01588,-45.60297,-48.0605,-50.64801,-53.45048,-56.33263,-59.08442,-61.50166,-63.4039,-64.1004,-63.62145,-62.50174,-61.07326,-59.55187,-58.07056,-56.59111,-55.08132,-53.69438,-52.84967,-52.70114,-53.80003,-55.28229,-57.29887,-59.71749,-62.40185,-65.99463,-68.44272,-69.61176,-68.39761,-66.13943,-62.25282,-57.90861,-53.82008,-50.37543,-46.76758,-43.73404,-41.98346,-41.55725,-43.01494 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134711776, "AnimCurve::", "" { Default: -50.2629508972168 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -54.23211,-51.01293,-47.27736,-44.46293,-41.6326,-38.33502,-34.90667,-30.72341,-25.21741,-18.34432,-10.72179,-3.26727,3.687743,10.3418,16.71059,22.54918,27.07196,30.8998,32.90911,34.85205,34.91413,34.37589,33.41462,31.31825,27.91238,19.4039,7.275913,-7.29633,-19.92589,-30.3807,-37.77864,-42.89194,-46.05077,-48.74553,-50.54395,-52.06659,-53.09273,-53.72514,-54.23135 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134713056, "AnimCurve::", "" { Default: 9.03095610738092e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 9.030945e-007,9.030943e-007,9.030937e-007,9.030937e-007,9.030945e-007,9.030959e-007,9.030945e-007,9.030917e-007,9.030915e-007,9.030953e-007,9.030947e-007,9.030965e-007,9.030943e-007,9.03095e-007,9.030964e-007,9.030953e-007,9.030924e-007,9.030935e-007,9.030944e-007,9.030956e-007,9.030949e-007,9.030942e-007,9.030948e-007,9.030941e-007,9.030936e-007,9.03094e-007,9.030948e-007,9.030943e-007,9.030942e-007,9.030944e-007,9.030945e-007,9.030942e-007,9.030932e-007,9.030955e-007,9.030956e-007,9.030948e-007,9.03094e-007,9.030936e-007,9.030941e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134712096, "AnimCurve::", "" { Default: 3.16086266138882e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.16086e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160861e-006,3.160861e-006,3.16086e-006,3.160861e-006,3.160861e-006,3.160861e-006,3.160862e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.16086e-006,3.16086e-006,3.160864e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160863e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160861e-006,3.160862e-006,3.160863e-006,3.16086e-006,3.160861e-006,3.16086e-006,3.160863e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134705696, "AnimCurve::", "" { Default: -31.568567276001 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -27.72617,-29.66094,-31.59498,-35.73427,-40.89271,-46.4121,-51.63819,-55.9239,-58.28018,-57.17869,-53.53399,-48.91067,-44.86863,-41.75458,-40.55395,-39.63243,-39.17696,-38.98593,-38.74432,-38.42442,-37.52295,-36.30897,-35.05223,-34.0215,-33.48485,-34.06982,-35.26425,-35.40808,-36.15906,-35.76628,-35.52497,-35.05573,-33.72271,-32.16595,-31.45794,-30.83125,-29.99261,-29.02355,-27.72617 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134706016, "AnimCurve::", "" { Default: -28.5609245300293 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -24.67043,-25.58225,-26.49314,-26.98358,-27.32372,-27.51453,-27.56248,-27.48057,-27.01832,-26.15341,-24.9255,-23.61423,-22.4984,-21.77819,-21.64762,-21.46021,-21.23772,-20.91662,-20.12699,-18.76676,-17.31485,-15.73932,-14.24881,-13.05212,-12.3582,-12.89515,-14.38224,-16.14631,-19.24563,-21.80244,-24.52871,-26.73795,-28.26155,-28.4822,-28.5755,-28.22997,-27.2984,-26.18437,-24.67043 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134709856, "AnimCurve::", "" { Default: -47.7509155273438 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -49.68386,-50.61994,-51.55786,-49.75773,-46.82225,-43.25573,-39.56197,-36.2418,-33.36656,-31.95313,-31.44142,-31.44106,-31.56512,-32.13184,-32.78861,-33.35774,-33.51565,-33.39902,-32.87182,-31.85551,-30.93431,-30.00776,-29.16026,-28.47599,-28.03886,-28.22925,-29.13568,-30.97284,-33.5863,-36.49885,-39.36355,-41.97754,-44.78883,-46.8367,-47.92022,-48.53391,-48.92361,-49.31165,-49.68386 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134706336, "AnimCurve::", "" { Default: 4.45484261035745e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.455054e-007,4.454809e-007,4.454926e-007,4.455068e-007,4.454948e-007,4.454815e-007,4.455016e-007,4.455214e-007,4.455249e-007,4.454944e-007,4.455046e-007,4.45489e-007,4.454957e-007,4.454946e-007,4.454957e-007,4.45498e-007,4.454814e-007,4.454978e-007,4.454868e-007,4.454983e-007,4.455009e-007,4.454951e-007,4.454918e-007,4.454924e-007,4.454907e-007,4.454877e-007,4.455005e-007,4.45491e-007,4.4549e-007,4.454961e-007,4.455065e-007,4.454961e-007,4.455085e-007,4.454844e-007,4.454842e-007,4.455106e-007,4.455005e-007,4.455147e-007,4.454853e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134706656, "AnimCurve::", "" { Default: -7.54761458665598e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -7.548039e-007,-7.547536e-007,-7.547837e-007,-7.548064e-007,-7.547835e-007,-7.547668e-007,-7.547899e-007,-7.548162e-007,-7.548199e-007,-7.547832e-007,-7.547835e-007,-7.547631e-007,-7.547819e-007,-7.547742e-007,-7.547644e-007,-7.54779e-007,-7.54794e-007,-7.547695e-007,-7.547841e-007,-7.54763e-007,-7.547844e-007,-7.547916e-007,-7.547665e-007,-7.54782e-007,-7.54798e-007,-7.547844e-007,-7.547869e-007,-7.547747e-007,-7.547835e-007,-7.547874e-007,-7.547957e-007,-7.547883e-007,-7.548038e-007,-7.547653e-007,-7.547607e-007,-7.548069e-007,-7.54791e-007,-7.548182e-007,-7.547644e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 134706976, "AnimCurve::", "" { Default: 71.1884765625 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 70.21743,74.40298,70.21743 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 6.696884,0,4.099946e-031,0,0,-6.696884,4.099946e-031,0,-6.696884,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134707936, "AnimCurve::", "" { Default: 10.1721467971802 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: 13.63773,-15.40957,13.63773 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -5.117637,0,4.099946e-031,0,0,5.55831,4.099946e-031,0,1.816012,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134707616, "AnimCurve::", "" { Default: -14.7731218338013 KeyVer: 4007 KeyTime: *3 { a: 0,28866348750,57732697500 } KeyValueFloat: *3 { a: -17.18055,4.568866,-17.18055 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 1.740179,0,4.099946e-031,0,0,-1.818651,4.099946e-031,0,0.6524437,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134708256, "AnimCurve::", "" { Default: -129.154998779297 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -128.3936,-131.6756,-128.3936 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -5.626314,0,4.099946e-031,0,0,5.251226,4.099946e-031,0,5.251226,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134708576, "AnimCurve::", "" { Default: -42.0322799682617 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -47.85358,-22.76177,-47.85358 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 43.01453,0,4.099946e-031,0,0,-40.1469,4.099946e-031,0,-40.1469,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 134709216, "AnimCurve::", "" { Default: 34.3628196716309 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 34.28154,35.06313,34.28154 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136834944, "AnimCurve::", "" { Default: -1.38291397888679e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.382952e-006,-1.382912e-006,-1.382936e-006,-1.382953e-006,-1.382937e-006,-1.382912e-006,-1.38294e-006,-1.382978e-006,-1.382985e-006,-1.382932e-006,-1.382951e-006,-1.382916e-006,-1.382934e-006,-1.382928e-006,-1.382922e-006,-1.382933e-006,-1.382933e-006,-1.382926e-006,-1.382932e-006,-1.382923e-006,-1.382939e-006,-1.382942e-006,-1.382921e-006,-1.382934e-006,-1.382944e-006,-1.382932e-006,-1.382942e-006,-1.382926e-006,-1.382934e-006,-1.382936e-006,-1.382945e-006,-1.38294e-006,-1.382953e-006,-1.38292e-006,-1.382913e-006,-1.382955e-006,-1.38294e-006,-1.382963e-006,-1.382919e-006 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *30 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *120 { a: 0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,1.097392e-015,0,0,0,3.561446e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *30 { a: 1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,1,5,1,1,1,1,1 } } AnimationCurve: 136836224, "AnimCurve::", "" { Default: 7.55724443024519e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 7.557305e-007,7.557242e-007,7.557264e-007,7.557301e-007,7.557278e-007,7.557212e-007,7.557287e-007,7.557417e-007,7.557442e-007,7.557258e-007,7.557392e-007,7.557255e-007,7.557264e-007,7.55728e-007,7.557303e-007,7.557294e-007,7.55718e-007,7.557298e-007,7.557285e-007,7.557294e-007,7.557355e-007,7.557298e-007,7.557169e-007,7.557253e-007,7.557217e-007,7.557294e-007,7.557346e-007,7.557248e-007,7.557267e-007,7.557292e-007,7.557298e-007,7.557294e-007,7.557314e-007,7.557246e-007,7.557244e-007,7.557314e-007,7.557285e-007,7.557333e-007,7.557251e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136831104, "AnimCurve::", "" { Default: 2.74146850642865e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.741469e-006,2.741469e-006,2.741469e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136832704, "AnimCurve::", "" { Default: -3.38374729835778e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.383747e-006,-3.383747e-006,-3.383747e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136835904, "AnimCurve::", "" { Default: 32.0624504089355 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 32.06245,32.06245,32.06245 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136831424, "AnimCurve::", "" { Default: 3.77754112435014e-008 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.763222e-008,3.777197e-008,3.768088e-008,3.76404e-008,3.76873e-008,3.777294e-008,3.768477e-008,3.751691e-008,3.749176e-008,3.77126e-008,3.760778e-008,3.777043e-008,3.769793e-008,3.772374e-008,3.775057e-008,3.769884e-008,3.768994e-008,3.77384e-008,3.769017e-008,3.776128e-008,3.766075e-008,3.764481e-008,3.779303e-008,3.770344e-008,3.766047e-008,3.769142e-008,3.765814e-008,3.7733e-008,3.768866e-008,3.768719e-008,3.766806e-008,3.766542e-008,3.763429e-008,3.774559e-008,3.777635e-008,3.763648e-008,3.768375e-008,3.759638e-008,3.775011e-008 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *21 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *84 { a: 0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *21 { a: 1,1,1,1,1,1,1,1,1,1,1,1,9,1,1,1,3,1,1,9,1 } } AnimationCurve: 136833344, "AnimCurve::", "" { Default: -3.12997121909575e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.129955e-006,-3.129969e-006,-3.129973e-006,-3.129956e-006,-3.129964e-006,-3.129989e-006,-3.129957e-006,-3.1299e-006,-3.129889e-006,-3.129973e-006,-3.12991e-006,-3.129967e-006,-3.129967e-006,-3.12994e-006,-3.12993e-006,-3.129951e-006,-3.130025e-006,-3.129937e-006,-3.129969e-006,-3.129926e-006,-3.129932e-006,-3.129965e-006,-3.129973e-006,-3.129966e-006,-3.129996e-006,-3.129968e-006,-3.129936e-006,-3.129969e-006,-3.129971e-006,-3.12996e-006,-3.129951e-006,-3.129956e-006,-3.12995e-006,-3.129974e-006,-3.129971e-006,-3.129947e-006,-3.129958e-006,-3.129945e-006,-3.129972e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136838784, "AnimCurve::", "" { Default: -7.38412791179144e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -7.461433e-006,-6.718116e-006,-7.461433e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136837184, "AnimCurve::", "" { Default: 2.46886565946625e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.29402e-006,3.975226e-006,2.29402e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136835584, "AnimCurve::", "" { Default: 2.01478266716003 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -1.122663,12.40081,-1.122663 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 23.1831,0,4.099946e-031,0,0,-21.63755,4.099946e-031,0,-21.63755,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 136833024, "AnimCurve::", "" { Default: -11.8456792831421 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -11.78857,-12.33769,-11.78857 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136833664, "AnimCurve::", "" { Default: -2.26736164093018 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.695112,2.458985,-3.695112 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 10.54988,0,4.099946e-031,0,0,-9.846557,4.099946e-031,0,-9.846557,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 136831744, "AnimCurve::", "" { Default: 0.35604390501976 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -4.271896,15.67612,-4.271896 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 34.19661,0,4.099946e-031,0,0,-31.91683,4.099946e-031,0,-31.91683,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 136837824, "AnimCurve::", "" { Default: -3.31795149577374e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.317978e-006,-3.317946e-006,-3.317963e-006,-3.317985e-006,-3.317968e-006,-3.317958e-006,-3.317966e-006,-3.317984e-006,-3.317981e-006,-3.317966e-006,-3.317969e-006,-3.317953e-006,-3.317966e-006,-3.31796e-006,-3.317951e-006,-3.317963e-006,-3.317986e-006,-3.317953e-006,-3.317976e-006,-3.317947e-006,-3.317969e-006,-3.317979e-006,-3.317949e-006,-3.317968e-006,-3.317984e-006,-3.317974e-006,-3.31797e-006,-3.31796e-006,-3.317973e-006,-3.317973e-006,-3.317971e-006,-3.317969e-006,-3.317981e-006,-3.317954e-006,-3.317951e-006,-3.317982e-006,-3.317972e-006,-3.317989e-006,-3.317956e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136834304, "AnimCurve::", "" { Default: 3.01659298429513e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.016286e-007,3.016693e-007,3.016498e-007,3.016222e-007,3.016458e-007,3.016605e-007,3.016315e-007,3.016237e-007,3.016209e-007,3.016402e-007,3.016513e-007,3.016494e-007,3.016419e-007,3.016476e-007,3.01648e-007,3.016437e-007,3.016512e-007,3.016427e-007,3.016595e-007,3.016423e-007,3.016463e-007,3.016489e-007,3.016361e-007,3.016475e-007,3.016434e-007,3.016566e-007,3.016432e-007,3.016476e-007,3.016526e-007,3.01643e-007,3.016251e-007,3.016442e-007,3.016243e-007,3.016602e-007,3.016592e-007,3.016181e-007,3.016338e-007,3.01614e-007,3.016593e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136835264, "AnimCurve::", "" { Default: 3.5970981571154e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.597098e-006,3.597098e-006,3.597098e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136833984, "AnimCurve::", "" { Default: 2.03909712581662e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.039097e-006,2.039097e-006,2.039097e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136836544, "AnimCurve::", "" { Default: 18.2982807159424 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 18.29828,18.29828,18.29828 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136836864, "AnimCurve::", "" { Default: -7.71003385580116e-008 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -7.713862e-008,-7.709826e-008,-7.712461e-008,-7.71447e-008,-7.71295e-008,-7.711444e-008,-7.711265e-008,-7.716534e-008,-7.716093e-008,-7.711702e-008,-7.715312e-008,-7.709249e-008,-7.712057e-008,-7.711299e-008,-7.709269e-008,-7.711773e-008,-7.716193e-008,-7.709215e-008,-7.71546e-008,-7.708007e-008,-7.713729e-008,-7.715909e-008,-7.706885e-008,-7.712873e-008,-7.715755e-008,-7.71488e-008,-7.713578e-008,-7.710946e-008,-7.714311e-008,-7.71366e-008,-7.711989e-008,-7.713291e-008,-7.71405e-008,-7.710923e-008,-7.709869e-008,-7.713777e-008,-7.712714e-008,-7.715278e-008,-7.711105e-008 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136832064, "AnimCurve::", "" { Default: -3.79914951054161e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.799391e-007,-3.798928e-007,-3.799158e-007,-3.799513e-007,-3.799143e-007,-3.799139e-007,-3.799553e-007,-3.798882e-007,-3.798912e-007,-3.799439e-007,-3.79848e-007,-3.799372e-007,-3.799294e-007,-3.799149e-007,-3.799213e-007,-3.799193e-007,-3.799132e-007,-3.799355e-007,-3.798732e-007,-3.799416e-007,-3.798902e-007,-3.798857e-007,-3.799881e-007,-3.79914e-007,-3.79919e-007,-3.798826e-007,-3.799028e-007,-3.799261e-007,-3.798943e-007,-3.799195e-007,-3.799615e-007,-3.799102e-007,-3.799457e-007,-3.799047e-007,-3.799169e-007,-3.799592e-007,-3.799408e-007,-3.799543e-007,-3.799063e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 136837504, "AnimCurve::", "" { Default: 6.12122676102445e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 6.121227e-006,6.121227e-006,6.121227e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136834624, "AnimCurve::", "" { Default: 1.18875880161795e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 1.188759e-006,1.188759e-006,1.188759e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136838464, "AnimCurve::", "" { Default: 13.211012840271 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 13.21101,13.21101,13.21101 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 136838144, "AnimCurve::", "" { Default: -0.000293526856694371 KeyVer: 4007 KeyTime: *30 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,38488465000,40028003600,41567542200,43107080800,44646619400,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *30 { a: -0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935269,-0.0002935268 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *27 { a: 50332680,50334728,50332680,50334728,50334728,50332680,50334728,50334728,50334728,50334728,50334728,50334728,50332680,50334728,50334728,50332680,50334728,50332680,50334728,50332680,50334728,50332680,50334728,50334728,50332680,50334728,1032 } KeyAttrDataFloat: *108 { a: 0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *27 { a: 2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1 } } AnimationCurve: 136832384, "AnimCurve::", "" { Default: -1.12324810028076 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -1.087378,-1.432282,-1.087378 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129519280, "AnimCurve::", "" { Default: -1.13205850124359 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -2.178227,2.331122,-2.178227 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 7.730314,0,4.099946e-031,0,0,-7.214959,4.099946e-031,0,-7.214959,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129523120, "AnimCurve::", "" { Default: 1.1130610704422 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -1.066225,8.327249,-1.066225 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 16.1031,0,4.099946e-031,0,0,-15.02956,4.099946e-031,0,-15.02956,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129518320, "AnimCurve::", "" { Default: -3.33934121954371e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.339358e-006,-3.339333e-006,-3.339348e-006,-3.339362e-006,-3.33935e-006,-3.339341e-006,-3.339349e-006,-3.339369e-006,-3.339369e-006,-3.339348e-006,-3.339357e-006,-3.339337e-006,-3.339349e-006,-3.339344e-006,-3.339338e-006,-3.339347e-006,-3.33936e-006,-3.339339e-006,-3.339355e-006,-3.339336e-006,-3.339353e-006,-3.33936e-006,-3.339333e-006,-3.33935e-006,-3.339361e-006,-3.339354e-006,-3.339354e-006,-3.339343e-006,-3.339353e-006,-3.339354e-006,-3.339353e-006,-3.339352e-006,-3.339366e-006,-3.339341e-006,-3.339341e-006,-3.339361e-006,-3.339353e-006,-3.339367e-006,-3.339341e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129516400, "AnimCurve::", "" { Default: 2.41871944695049e-009 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.394216e-009,2.428081e-009,2.410289e-009,2.390394e-009,2.410431e-009,2.422681e-009,2.394287e-009,2.393421e-009,2.390337e-009,2.403212e-009,2.419881e-009,2.410687e-009,2.405613e-009,2.411369e-009,2.410175e-009,2.407617e-009,2.417863e-009,2.40469e-009,2.427157e-009,2.403254e-009,2.412577e-009,2.41657e-009,2.394671e-009,2.412278e-009,2.409834e-009,2.423874e-009,2.409053e-009,2.411028e-009,2.418943e-009,2.407802e-009,2.387992e-009,2.409749e-009,2.389015e-009,2.421501e-009,2.418204e-009,2.385718e-009,2.399091e-009,2.383473e-009,2.42099e-009 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129518000, "AnimCurve::", "" { Default: 3.29875911120325e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.298759e-006,3.298759e-006,3.298759e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129523440, "AnimCurve::", "" { Default: -3.02836747323454e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -3.028367e-006,-3.028367e-006,-3.028367e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129520560, "AnimCurve::", "" { Default: 18.566930770874 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 18.56693,18.56693,18.56693 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129518640, "AnimCurve::", "" { Default: -1.97209737962112e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.972138e-006,-1.972097e-006,-1.97212e-006,-1.972142e-006,-1.972125e-006,-1.972102e-006,-1.972116e-006,-1.97218e-006,-1.972179e-006,-1.972113e-006,-1.972161e-006,-1.972094e-006,-1.97212e-006,-1.972115e-006,-1.972103e-006,-1.972121e-006,-1.972135e-006,-1.972103e-006,-1.972139e-006,-1.972096e-006,-1.972141e-006,-1.97215e-006,-1.972076e-006,-1.972124e-006,-1.972139e-006,-1.972135e-006,-1.972137e-006,-1.972108e-006,-1.972133e-006,-1.972131e-006,-1.972126e-006,-1.97213e-006,-1.972143e-006,-1.972104e-006,-1.972096e-006,-1.97214e-006,-1.972126e-006,-1.972153e-006,-1.972107e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129515760, "AnimCurve::", "" { Default: -3.19399333648107e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -3.193875e-007,-3.193708e-007,-3.193791e-007,-3.194004e-007,-3.193698e-007,-3.194009e-007,-3.194284e-007,-3.192628e-007,-3.192616e-007,-3.194224e-007,-3.19237e-007,-3.194295e-007,-3.193946e-007,-3.193753e-007,-3.193898e-007,-3.193756e-007,-3.193805e-007,-3.194079e-007,-3.193078e-007,-3.19419e-007,-3.193156e-007,-3.193131e-007,-3.195091e-007,-3.193719e-007,-3.193762e-007,-3.193227e-007,-3.193382e-007,-3.193993e-007,-3.193409e-007,-3.193749e-007,-3.19427e-007,-3.193578e-007,-3.193908e-007,-3.193796e-007,-3.19403e-007,-3.194098e-007,-3.194023e-007,-3.193907e-007,-3.193799e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129516080, "AnimCurve::", "" { Default: -5.25195036971127e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -5.25195e-006,-5.25195e-006,-5.25195e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129517040, "AnimCurve::", "" { Default: -6.89941970222208e-008 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -6.89942e-008,-6.89942e-008,-6.89942e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129518960, "AnimCurve::", "" { Default: 3.59999227523804 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 3.599992,3.599992,3.599992 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129521200, "AnimCurve::", "" { Default: 9.92037773132324 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 9.830232,10.69702,9.830232 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129519600, "AnimCurve::", "" { Default: 6.50482177734375 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 7.672223,2.640323,7.672223 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -8.626113,0,4.099946e-031,0,0,8.05104,4.099946e-031,0,8.05104,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129519920, "AnimCurve::", "" { Default: 12.5329875946045 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 10.94121,17.80233,10.94121 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: 11.76192,0,4.099946e-031,0,0,-10.97779,4.099946e-031,0,-10.97779,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129516720, "AnimCurve::", "" { Default: 3.56238683707488e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.562375e-006,3.562387e-006,3.562381e-006,3.562375e-006,3.56238e-006,3.562387e-006,3.56238e-006,3.562364e-006,3.562364e-006,3.562381e-006,3.562371e-006,3.562385e-006,3.56238e-006,3.562381e-006,3.562383e-006,3.56238e-006,3.562381e-006,3.562383e-006,3.56238e-006,3.562382e-006,3.562375e-006,3.562375e-006,3.562388e-006,3.56238e-006,3.562378e-006,3.56238e-006,3.562377e-006,3.562383e-006,3.56238e-006,3.562378e-006,3.562376e-006,3.562379e-006,3.562374e-006,3.562386e-006,3.562387e-006,3.562374e-006,3.562378e-006,3.562371e-006,3.562384e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129517360, "AnimCurve::", "" { Default: 8.68510085183516e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 8.684979e-007,8.685173e-007,8.685075e-007,8.684945e-007,8.68508e-007,8.685126e-007,8.684945e-007,8.685072e-007,8.685059e-007,8.685e-007,8.685232e-007,8.685032e-007,8.685036e-007,8.685079e-007,8.685055e-007,8.685058e-007,8.685123e-007,8.685014e-007,8.685222e-007,8.684995e-007,8.685132e-007,8.685162e-007,8.68488e-007,8.68509e-007,8.68508e-007,8.685195e-007,8.685098e-007,8.68506e-007,8.685152e-007,8.685062e-007,8.684909e-007,8.68509e-007,8.684951e-007,8.685135e-007,8.6851e-007,8.684912e-007,8.684992e-007,8.684918e-007,8.685129e-007 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *8 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *32 { a: 0,0,1.18066e-015,0,0,0,1.097392e-015,0,0,0,1.187599e-015,0,0,0,1.18066e-015,0,0,0,1.097392e-015,0,0,0,1.187599e-015,0,0,0,1.18066e-015,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *8 { a: 10,1,1,9,1,1,15,1 } } AnimationCurve: 129517680, "AnimCurve::", "" { Default: -8.52487929137169e-008 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -8.524879e-008,-8.524879e-008,-8.524879e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129520880, "AnimCurve::", "" { Default: -1.5643117876607e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -1.564312e-006,-1.564312e-006,-1.564312e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129522160, "AnimCurve::", "" { Default: 27.2881908416748 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 27.28819,27.28819,27.28819 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129520240, "AnimCurve::", "" { Default: -2.60250772043946e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.602473e-007,-2.602447e-007,-2.602432e-007,-2.602504e-007,-2.602434e-007,-2.602446e-007,-2.602562e-007,-2.602315e-007,-2.602339e-007,-2.602534e-007,-2.602307e-007,-2.602549e-007,-2.602482e-007,-2.602475e-007,-2.602541e-007,-2.602483e-007,-2.602316e-007,-2.602561e-007,-2.602289e-007,-2.602608e-007,-2.602404e-007,-2.602332e-007,-2.602675e-007,-2.602428e-007,-2.602362e-007,-2.602318e-007,-2.602421e-007,-2.602483e-007,-2.602359e-007,-2.602436e-007,-2.602575e-007,-2.602408e-007,-2.6025e-007,-2.602452e-007,-2.602518e-007,-2.602576e-007,-2.602507e-007,-2.602479e-007,-2.602459e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129521520, "AnimCurve::", "" { Default: 1.2035725660553e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 1.204491e-007,1.203707e-007,1.204112e-007,1.204441e-007,1.204228e-007,1.203435e-007,1.203959e-007,1.206171e-007,1.206262e-007,1.203759e-007,1.205692e-007,1.203458e-007,1.204063e-007,1.204151e-007,1.204011e-007,1.204261e-007,1.203812e-007,1.203941e-007,1.20455e-007,1.203849e-007,1.204932e-007,1.204807e-007,1.202857e-007,1.204153e-007,1.204126e-007,1.204453e-007,1.204714e-007,1.203832e-007,1.204357e-007,1.204247e-007,1.204176e-007,1.204413e-007,1.20458e-007,1.203766e-007,1.203537e-007,1.204455e-007,1.204146e-007,1.204766e-007,1.203791e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129521840, "AnimCurve::", "" { Default: 1.73695445937483e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 1.736954e-006,1.736954e-006,1.736954e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129522480, "AnimCurve::", "" { Default: -8.55293436075044e-009 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: -8.552934e-009,-8.552934e-009,-8.552934e-009 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129522800, "AnimCurve::", "" { Default: 13.044979095459 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 13.04498,13.04498,13.04498 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129622992, "AnimCurve::", "" { Default: 24.3684997558594 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 24.38671,24.21158,24.38671 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129623312, "AnimCurve::", "" { Default: 5.07718563079834 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 6.661697,-0.1680944,6.661697 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -11.70821,0,4.099946e-031,0,0,10.92767,4.099946e-031,0,10.92767,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129624912, "AnimCurve::", "" { Default: 23.8567218780518 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 24.57268,21.48665,24.57268 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,1032,1032 } KeyAttrDataFloat: *12 { a: -5.290337,0,4.099946e-031,0,0,4.937648,4.099946e-031,0,4.937648,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,1,1 } } AnimationCurve: 129627472, "AnimCurve::", "" { Default: -4.5721540118393e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -4.572158e-006,-4.572153e-006,-4.572154e-006,-4.572159e-006,-4.572155e-006,-4.572151e-006,-4.572159e-006,-4.572162e-006,-4.572163e-006,-4.572156e-006,-4.572157e-006,-4.572156e-006,-4.572157e-006,-4.572156e-006,-4.572159e-006,-4.572157e-006,-4.572149e-006,-4.572159e-006,-4.572151e-006,-4.572161e-006,-4.572158e-006,-4.572154e-006,-4.572158e-006,-4.572155e-006,-4.572152e-006,-4.572152e-006,-4.572157e-006,-4.572155e-006,-4.572153e-006,-4.572156e-006,-4.572161e-006,-4.572155e-006,-4.57216e-006,-4.572152e-006,-4.572154e-006,-4.57216e-006,-4.572157e-006,-4.572159e-006,-4.572154e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129629712, "AnimCurve::", "" { Default: -2.5465004682701e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.546499e-007,-2.546459e-007,-2.546479e-007,-2.546519e-007,-2.54647e-007,-2.546502e-007,-2.546545e-007,-2.546341e-007,-2.546337e-007,-2.546533e-007,-2.54632e-007,-2.546537e-007,-2.546496e-007,-2.546474e-007,-2.546492e-007,-2.546476e-007,-2.546479e-007,-2.546514e-007,-2.54639e-007,-2.546528e-007,-2.546402e-007,-2.546398e-007,-2.546641e-007,-2.54647e-007,-2.546477e-007,-2.546407e-007,-2.546431e-007,-2.546499e-007,-2.546433e-007,-2.546478e-007,-2.546545e-007,-2.546453e-007,-2.546504e-007,-2.546475e-007,-2.546505e-007,-2.546533e-007,-2.546515e-007,-2.54651e-007,-2.546474e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129627152, "AnimCurve::", "" { Default: 1.28670376398077e-006 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 1.286704e-006,1.286704e-006,1.286704e-006 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129629392, "AnimCurve::", "" { Default: 2.94697493075091e-008 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 2.946975e-008,2.946975e-008,2.946975e-008 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129627792, "AnimCurve::", "" { Default: 21.8681793212891 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 21.86818,21.86818,21.86818 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129622672, "AnimCurve::", "" { Default: -2.68376516032731e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -2.683744e-006,-2.683756e-006,-2.683748e-006,-2.683748e-006,-2.683745e-006,-2.683762e-006,-2.683761e-006,-2.683703e-006,-2.68371e-006,-2.683762e-006,-2.683712e-006,-2.683763e-006,-2.68375e-006,-2.683748e-006,-2.683754e-006,-2.683748e-006,-2.683742e-006,-2.683758e-006,-2.683729e-006,-2.683762e-006,-2.683732e-006,-2.683728e-006,-2.683784e-006,-2.683745e-006,-2.683742e-006,-2.683732e-006,-2.683737e-006,-2.683754e-006,-2.683737e-006,-2.683745e-006,-2.683758e-006,-2.68374e-006,-2.683744e-006,-2.683756e-006,-2.683767e-006,-2.683749e-006,-2.683753e-006,-2.683739e-006,-2.683756e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129628112, "AnimCurve::", "" { Default: 3.09315595359294e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.0937e-007,3.093179e-007,3.093446e-007,3.09369e-007,3.093501e-007,3.093075e-007,3.093429e-007,3.094435e-007,3.094459e-007,3.093327e-007,3.094154e-007,3.093142e-007,3.093443e-007,3.093467e-007,3.093404e-007,3.093538e-007,3.093247e-007,3.093382e-007,3.093608e-007,3.09334e-007,3.093872e-007,3.093784e-007,3.092837e-007,3.093456e-007,3.093444e-007,3.093568e-007,3.093762e-007,3.093306e-007,3.093539e-007,3.093527e-007,3.093575e-007,3.093582e-007,3.093753e-007,3.093243e-007,3.09314e-007,3.093714e-007,3.093506e-007,3.093877e-007,3.093246e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129628432, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129623632, "AnimCurve::", "" { Default: 0 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 0,0,0 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129625872, "AnimCurve::", "" { Default: 5.75897359848022 KeyVer: 4007 KeyTime: *3 { a: 1924423250,28866348750,57732697500 } KeyValueFloat: *3 { a: 5.758974,5.758974,5.758974 } ;KeyAttrFlags: Cubic|TangeantUser KeyAttrFlags: *1 { a: 1032 } KeyAttrDataFloat: *4 { a: 0,0,4.099946e-031,0 } KeyAttrRefCount: *1 { a: 3 } } AnimationCurve: 129626512, "AnimCurve::", "" { Default: -14.2042036056519 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: -13.28363,-12.21417,-11.88406,-12.0185,-12.04975,-12.18922,-12.00691,-12.28668,-12.30453,-12.07463,-11.89514,-11.77094,-11.77093,-11.51274,-11.11164,-10.60882,-10.10823,-9.368922,-8.696971,-9.10406,-9.8762,-11.4093,-12.5567,-13.93154,-13.9317,-14.96209,-14.84791,-14.10598,-14.09718,-13.73625,-13.30094,-13.76194,-13.68139,-14.13591,-14.41006,-14.49771,-14.14985,-13.85052,-13.48767,-13.39482,-13.28356 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *9 { a: 1032,3080,3080,3080,3080,3080,3080,3080,1032 } KeyAttrDataFloat: *36 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.1388596,4.099946e-031,0,0.1388596,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-1.537213,4.099946e-031,0,-1.537213,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *9 { a: 1,9,1,1,10,1,1,16,1 } } AnimationCurve: 129622352, "AnimCurve::", "" { Default: -164.144622802734 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: -168.1317,-169.4007,-171.6724,-173.1291,-174.8042,-176.7019,-177.9081,-177.5606,-177.8,-178.9223,-179.5685,-179.9675,-179.9676,-180.5823,-181.5248,-182.7337,-184.0781,-185.217,-185.5078,-184.3744,-182.3202,-179.2862,-177.1982,-173.7615,-173.7611,-169.8947,-166.0172,-162.7888,-162.6591,-161.7261,-159.9439,-159.3118,-158.2779,-159.6863,-161.4046,-163.5374,-164.2571,-164.5303,-165.1459,-166.573,-168.1312 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *9 { a: 1032,3080,3080,3080,3080,3080,3080,3080,1032 } KeyAttrDataFloat: *36 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-0.4461759,4.099946e-031,0,-0.4461759,0,4.099946e-031,0,0,0,4.099946e-031,0,0,3.84264,4.099946e-031,0,3.84264,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *9 { a: 1,9,1,1,10,1,1,16,1 } } AnimationCurve: 129626192, "AnimCurve::", "" { Default: -29.484790802002 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: -30.32681,-30.08332,-28.26887,-26.56773,-25.09588,-23.88204,-21.68758,-18.12716,-15.35876,-12.2092,-9.541511,-7.229423,-7.216028,-5.259269,-3.383979,-1.212119,1.395944,5.631661,9.664697,11.85006,14.19839,15.244,14.28068,10.34527,10.31306,3.972298,-2.67823,-9.37403,-14.51725,-19.7477,-23.87844,-26.99583,-29.58894,-31.17733,-31.11253,-29.82949,-29.4101,-29.13415,-29.71374,-29.82418,-30.3265 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser KeyAttrFlags: *41 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *164 { a: -16.25991,30.86907,1.179961e-015,0,30.86907,52.73391,1.18066e-015,0,52.73391,47.59485,1.18066e-015,0,47.59485,40.28525,3.484408e-031,0,40.28525,51.12441,3.482857e-031,0,51.12441,86.32326,3.482857e-031,0,86.32326,94.93242,3.482857e-031,0,94.93242,88.7693,3.482857e-031,0,88.7693,87.25868,3.482857e-031,0,87.25868,74.89884,1.179961e-015,0,74.89884,64.30276,1.097392e-015,0,64.30276,64.18044,1.208149e-028,0,64.18044,57.49424,3.482865e-031,0,57.49424,60.70725,3.498264e-031,0,60.70725,71.69883,3.482857e-031,0,71.69883,102.6567,3.482857e-031,0,102.6567,124.0313,3.482857e-031,0,124.0313,93.27599,3.482857e-031,0,93.27599,68.00538,1.1869e-015,0,68.00538,50.90905,3.484409e-031,0,50.90905,1.234352,3.482857e-031,0,1.234352,-73.9931,3.482857e-031,0,-73.9931,-154.1807,3.421226e-031,0,-154.1807,-155.0078,3.906102e-029,0,-155.0078,-194.7736,3.482865e-031,0,-194.7736,-200.1949,3.498264e-031,0,-200.1949,-177.5853,1.179961e-015,0,-177.5853,-155.6051,1.187599e-015,0,-155.6051,-140.4179,1.18066e-015,0,-140.4179,-108.7218,3.499816e-031,0,-108.7218,-85.65743,3.498264e-031,0,-85.65743,-62.72252,3.498264e-031,0,-62.72252,-22.85385,3.498264e-031,0,-22.85385,20.21758,1.179961e-015,0,20.21758,25.53637,3.484408e-031,0,25.53637,10.43011,3.498264e-031,0,10.43011,-4.554541,3.482857e-031,0,-4.554541,-10.35045,3.482857e-031,0,-10.35045,-9.191402,3.498264e-031,0,-9.191402,-20.94776,3.482857e-031,0,-20.94776,0,4.099946e-031,0 } KeyAttrRefCount: *41 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129625552, "AnimCurve::", "" { Default: -6.12689859735838e-007 KeyVer: 4007 KeyTime: *18 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *18 { a: -6.12689e-007,-6.1269e-007,-6.126901e-007,-6.1269e-007,-6.126896e-007,-6.126894e-007,-6.126901e-007,-6.126901e-007,-6.126896e-007,-6.126896e-007,-6.126909e-007,-6.126901e-007,-6.1269e-007,-6.126899e-007,-6.126893e-007,-6.126899e-007,-6.1269e-007,-6.126896e-007 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *14 { a: 50332680,50332680,50332680,50332680,50332680,50334728,50334728,50334728,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *56 { a: 0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *14 { a: 1,1,1,2,1,1,2,1,1,3,1,1,1,1 } } AnimationCurve: 129630032, "AnimCurve::", "" { Default: 1.20223648991669e-006 KeyVer: 4007 KeyTime: *11 { a: 0,1539538600,3079077200,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *11 { a: 1.202237e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202236e-006,1.202237e-006,1.202237e-006,1.202237e-006,1.202237e-006,1.202236e-006 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *8 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50334728,1032 } KeyAttrDataFloat: *32 { a: 0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *8 { a: 1,1,2,1,1,2,2,1 } } AnimationCurve: 129626832, "AnimCurve::", "" { Default: 9.30474472045898 KeyVer: 4007 KeyTime: *45 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *45 { a: 1.814188,5.932574,5.34574,4.319725,2.571757,1.117456,0.3983527,0.6254905,0.9212306,0.6328047,0.6285815,0.8412012,0.8780301,1.107402,1.296348,1.501763,2.063011,2.575738,3.679309,6.757957,10.70501,12.46304,12.77927,13.04569,13.15473,13.19343,9.621583,7.586217,7.825192,10.08416,13.84376,16.18571,18.36954,17.61995,16.84658,15.75568,14.62488,13.07606,11.48291,10.03806,8.57513,5.793366,4.303154,3.178338,1.814507 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *45 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *180 { a: 194.1299,52.97329,3.498264e-031,0,52.97329,-24.19275,1.179961e-015,0,-24.19275,-41.60975,3.484408e-031,0,-41.60975,-48.03403,3.498264e-031,0,-48.03403,-32.60107,3.482857e-031,0,-32.60107,-7.379481,3.498264e-031,0,-7.379481,7.843169,3.482857e-031,0,7.843169,0.1097126,3.482857e-031,0,0.1097126,-4.389738,1.1869e-015,0,-4.389738,3.156266,1.187599e-015,0,3.156266,3.774984,3.422776e-031,0,3.774984,3.998587,3.559895e-031,0,3.998587,6.274766,3.482857e-031,0,6.274766,5.915412,3.482857e-031,0,5.915412,11.49995,3.482857e-031,0,11.49995,16.10963,3.482857e-031,0,16.10963,24.24447,1.1869e-015,0,24.24447,62.73328,1.187599e-015,0,62.73328,105.3855,3.484409e-031,0,105.3855,85.57629,3.482857e-031,0,85.57629,30.29603,3.482857e-031,0,30.29603,17.60962,3.359595e-031,0,17.60962,11.25303,3.498264e-031,0,11.25303,4.378839,3.621526e-031,0,4.378839,-34.1707,3.482857e-031,0,-34.1707,-84.10812,3.498264e-031,0,-84.10812,-26.94587,1.179961e-015,0,-26.94587,37.46922,3.499816e-031,0,37.46922,90.27854,3.498264e-031,0,90.27854,91.52321,3.498264e-031,0,91.52321,67.88669,3.482857e-031,0,67.88669,-8.145563,3.482857e-031,0,-8.145563,-45.68885,1.179961e-015,0,-45.68885,-55.92783,3.499816e-031,0,-55.92783,-66.65111,3.482857e-031,0,-66.65111,-80.3888,3.482857e-031,0,-80.3888,-94.25908,3.482857e-031,0,-94.25908,-91.13976,3.482857e-031,0,-91.13976,-87.23334,3.482857e-031,0,-87.23334,-86.33507,3.498264e-031,0,-86.33507,-64.07963,3.482857e-031,0,-64.07963,-39.22544,3.482857e-031,0,-39.22544,-37.32971,3.482857e-031,0,-37.32971,-44.50011,3.482857e-031,0,-44.50011,0,4.099946e-031,0 } KeyAttrRefCount: *45 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129628752, "AnimCurve::", "" { Default: -0.54519647359848 KeyVer: 4007 KeyTime: *45 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *45 { a: 1.033321,1.222668,1.642693,2.669248,3.450967,3.961954,4.225948,3.953441,3.861794,3.605158,3.200186,2.805908,2.667829,2.571954,2.669009,2.657385,2.363505,1.720182,0.7308317,0.2139687,0.06137219,0.8775138,1.39715,1.944016,2.781813,3.625781,5.046674,6.566154,6.283621,5.417135,4.058226,2.769937,1.849827,1.535604,1.285793,0.8737021,0.5892274,0.134061,-0.1262975,-0.4300069,-0.6294042,-0.5899079,-0.1216423,0.4725536,1.033269 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *45 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *180 { a: 2.22027,9.140592,1.1869e-015,0,9.140592,21.6987,3.484409e-031,0,21.6987,27.1241,3.482857e-031,0,27.1241,19.39059,3.482857e-031,0,19.39059,11.62472,3.482857e-031,0,11.62472,-0.1277011,1.179961e-015,0,-0.1277011,-5.462305,3.484408e-031,0,-5.462305,-5.224237,3.498264e-031,0,-5.224237,-9.924129,3.482857e-031,0,-9.924129,-12.02556,3.482857e-031,0,-12.02556,-8.034016,3.421226e-031,0,-8.034016,-3.494524,3.559895e-031,0,-3.494524,0.01770833,1.1869e-015,0,0.01770833,1.281474,1.18066e-015,0,1.281474,-4.582565,1.187599e-015,0,-4.582565,-14.05805,3.499816e-031,0,-14.05805,-24.4901,3.482857e-031,0,-24.4901,-22.59319,3.498264e-031,0,-22.59319,-10.04189,3.498264e-031,0,-10.04189,9.953176,1.179961e-015,0,9.953176,29.22973,3.499816e-031,0,29.22973,32.18851,3.359595e-031,0,32.18851,41.17732,3.482857e-031,0,41.17732,50.14572,3.621526e-031,0,50.14572,47.96763,3.482857e-031,0,47.96763,44.10559,3.482857e-031,0,44.10559,18.55422,3.482857e-031,0,18.55422,-17.23528,3.482857e-031,0,-17.23528,-33.38094,3.482857e-031,0,-33.38094,-39.70797,3.498264e-031,0,-39.70797,-33.12599,3.498264e-031,0,-33.12599,-21.77001,1.179961e-015,0,-21.77001,-16.92099,1.18066e-015,0,-16.92099,-19.85705,3.499816e-031,0,-19.85705,-20.89698,3.482857e-031,0,-20.89698,-22.18923,3.482857e-031,0,-22.18923,-21.46575,3.498264e-031,0,-21.46575,-16.92204,3.498264e-031,0,-16.92204,-15.0932,3.482857e-031,0,-15.0932,-7.580931,3.482857e-031,0,-7.580931,7.616429,3.482857e-031,0,7.616429,15.93692,3.482857e-031,0,15.93692,17.32367,3.482857e-031,0,17.32367,16.31927,3.482857e-031,0,16.31926,0,4.099946e-031,0 } KeyAttrRefCount: *45 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129625232, "AnimCurve::", "" { Default: -24.0315208435059 KeyVer: 4007 KeyTime: *45 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33092382207,33862151507,34639618500,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,46955927300,47725696599,48495465900,49265235200,50035004500,50804773799,51574543100,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *45 { a: -25.80068,-29.0638,-30.16444,-35.24453,-38.65631,-41.36792,-41.73943,-40.79897,-39.45511,-37.70453,-35.68556,-34.18754,-33.07948,-31.94393,-31.29164,-30.939,-28.93985,-25.67138,-25.8491,-27.11434,-30.45243,-38.04246,-43.3965,-48.74905,-53.53635,-58.32598,-65.78414,-72.83516,-77.58199,-79.28162,-77.88029,-74.1464,-67.614,-62.77017,-57.92324,-51.35061,-44.77187,-37.68124,-30.58094,-26.47526,-22.36306,-20.42307,-21.60524,-23.88167,-25.8003 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *45 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *180 { a: -130.3308,-65.45641,1.179961e-015,0,-65.45641,-92.71097,1.18066e-015,0,-92.71097,-127.3781,1.187599e-015,0,-127.3781,-91.85081,3.484409e-031,0,-91.85081,-46.24675,3.482857e-031,0,-46.24675,8.534373,3.482857e-031,0,8.534373,34.26484,3.482857e-031,0,34.26484,46.41647,3.482857e-031,0,46.41647,56.54331,3.498264e-031,0,56.54331,52.87214,3.482857e-031,0,52.87214,39.16741,3.421226e-031,0,39.16741,33.55259,3.559895e-031,0,33.55259,26.81749,3.482857e-031,0,26.81749,15.07394,3.482857e-031,0,15.07394,35.27687,3.482857e-031,0,35.27687,79.01434,3.498264e-031,0,79.01434,46.36121,3.482857e-031,0,46.36121,-21.6445,3.498264e-031,0,-21.6445,-69.0499,3.498264e-031,0,-69.0499,-163.9218,3.482857e-031,0,-163.9218,-293.0449,3.498264e-031,0,-293.0449,-323.2438,3.359595e-031,0,-323.2438,-302.5388,3.498264e-031,0,-302.5388,-285.5466,3.621526e-031,0,-285.5466,-266.1671,3.482857e-031,0,-266.1671,-217.6376,3.482857e-031,0,-217.6376,-176.9676,3.482857e-031,0,-176.9676,-96.69704,3.482857e-031,0,-96.69704,-4.474525,3.498264e-031,0,-4.474525,77.02845,3.482857e-031,0,77.02845,153.9943,3.498264e-031,0,153.9943,259.0771,3.482857e-031,0,259.0771,290.7228,3.498264e-031,0,290.7228,342.5867,3.482857e-031,0,342.5867,394.541,3.482857e-031,0,394.541,410.0813,1.1869e-015,0,410.0813,425.728,1.18066e-015,0,425.728,336.1795,1.18066e-015,0,336.1795,246.5362,1.18066e-015,0,246.5362,183.8876,1.18066e-015,0,183.8876,11.36735,1.18066e-015,0,11.36735,-51.87892,1.18066e-015,0,-51.87892,-62.92584,3.484408e-031,0,-62.92584,-52.19181,1.179961e-015,0,-52.19181,0,4.099946e-031,0 } KeyAttrRefCount: *45 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129624592, "AnimCurve::", "" { Default: -1.32429221366692e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.324247e-007,-1.324308e-007,-1.324307e-007,-1.324292e-007,-1.324313e-007,-1.324271e-007,-1.324296e-007,-1.324284e-007,-1.324275e-007,-1.324298e-007,-1.324285e-007,-1.324279e-007,-1.324276e-007,-1.324278e-007,-1.324287e-007,-1.324289e-007,-1.324276e-007,-1.324302e-007,-1.324297e-007,-1.324286e-007,-1.324297e-007,-1.324289e-007,-1.324285e-007,-1.324292e-007,-1.324294e-007,-1.324291e-007,-1.324292e-007,-1.324284e-007,-1.324276e-007,-1.324294e-007,-1.324291e-007,-1.324283e-007,-1.324307e-007,-1.324328e-007,-1.324286e-007,-1.324271e-007,-1.324304e-007,-1.324309e-007,-1.324295e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129623952, "AnimCurve::", "" { Default: 3.40772317031224e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 3.407733e-007,3.407697e-007,3.407711e-007,3.407715e-007,3.40772e-007,3.407737e-007,3.407711e-007,3.407707e-007,3.407702e-007,3.407731e-007,3.407722e-007,3.407731e-007,3.407711e-007,3.407703e-007,3.407719e-007,3.407707e-007,3.407711e-007,3.407723e-007,3.407727e-007,3.407692e-007,3.40772e-007,3.407723e-007,3.407689e-007,3.4077e-007,3.407721e-007,3.407713e-007,3.407717e-007,3.407705e-007,3.40772e-007,3.407715e-007,3.407709e-007,3.40772e-007,3.407712e-007,3.407719e-007,3.407724e-007,3.407735e-007,3.40773e-007,3.407718e-007,3.407706e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129629072, "AnimCurve::", "" { Default: -4.13260126113892 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: -4.325395,-4.095398,-4.055251,-4.260259,-4.303248,-4.378666,-4.439366,-4.460021,-4.474599,-4.483092,-4.457629,-4.407256,-4.379461,-4.334218,-4.320842,-4.327319,-4.330706,-4.243141,-3.479138,-3.594317,-3.808994,-3.886488,-3.893768,-3.995423,-4.061629,-3.813404,-3.401008,-2.514063,-3.451321,-3.723462,-3.737732,-4.05974,-4.22872,-4.365044,-4.422607,-4.261097,-4.102897,-4.084881,-4.153363,-4.236125,-4.325425 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser KeyAttrFlags: *41 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *164 { a: 9.747645,4.052164,3.482857e-031,0,4.052164,-2.472911,1.179961e-015,0,-2.472911,-3.71996,3.484408e-031,0,-3.71996,-1.776116,3.482857e-031,0,-1.776116,-2.04177,3.482857e-031,0,-2.04177,-1.220316,3.498264e-031,0,-1.220316,-0.5284902,3.482857e-031,0,-0.5284902,-0.3460729,3.482857e-031,0,-0.3460729,0.2545441,1.1869e-015,0,0.2545441,1.143492,1.18066e-015,0,1.143492,1.176847,3.422776e-031,0,1.176847,1.093807,3.559895e-031,0,1.093807,0.8792887,3.482857e-031,0,0.8792887,0.103471,3.498264e-031,0,0.103471,-0.1479611,3.498264e-031,0,-0.1479611,1.262674,3.482857e-031,0,1.262674,12.77351,1.179961e-015,0,12.77351,9.732354,3.484408e-031,0,9.732354,-4.947838,3.498264e-031,0,-4.947838,-4.382555,3.482857e-031,0,-4.382555,-1.268987,3.482857e-031,0,-1.268987,-4.06507,3.421226e-031,0,-4.06507,-4.99183,3.621526e-031,0,-4.99183,5.460557,3.482857e-031,0,5.460557,19.81864,3.482857e-031,0,19.81864,25.3653,3.482857e-031,0,25.3653,-0.7546996,3.498264e-031,0,-0.7546996,-18.14098,3.482857e-031,0,-18.14098,-4.296168,3.482857e-031,0,-4.296168,-5.044163,3.498264e-031,0,-5.044163,-7.364809,3.482857e-031,0,-7.364809,-4.579571,3.482857e-031,0,-4.579571,-2.908316,1.179961e-015,0,-2.908316,1.559204,3.484408e-031,0,1.559204,4.795651,3.482857e-031,0,4.795651,2.643245,3.482857e-031,0,2.643245,-0.756992,3.498264e-031,0,-0.756992,-2.268652,3.498264e-031,0,-2.268652,-2.580928,3.482857e-031,0,-2.580928,-2.777125,3.482857e-031,0,-2.777125,0,4.099946e-031,0 } KeyAttrRefCount: *41 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129624272, "AnimCurve::", "" { Default: -1.2486013174057 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: -4.392604,-6.50379,-3.3913,-1.844732,-2.254772,-2.727598,-2.951273,-2.818718,-2.693539,-2.581937,-2.331875,-1.991199,-1.836073,-1.652754,-1.640214,-1.695719,-1.720947,-1.456369,-0.4173162,-0.9974477,-1.995101,-2.840014,-3.368194,-3.598641,-3.841616,-5.066699,-6.247233,-10.75194,-6.961672,-6.443067,-8.552057,-6.073008,-9.07111,-8.017106,-7.487993,-3.025845,-0.9754255,-0.899817,-1.89343,-3.181911,-4.392841 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser KeyAttrFlags: *41 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *164 { a: -141.6907,15.01956,3.482857e-031,0,15.01956,69.88586,3.498264e-031,0,69.88586,17.04792,3.482857e-031,0,17.04792,-13.24299,3.498264e-031,0,-13.24299,-10.44751,3.482857e-031,0,-10.44751,-1.366801,3.482857e-031,0,-1.366801,3.86601,3.482857e-031,0,3.86601,3.551716,3.498264e-031,0,3.551716,5.424951,3.482857e-031,0,5.424951,8.897573,3.498264e-031,0,8.897573,7.472408,3.421226e-031,0,7.472408,5.063587,3.559895e-031,0,5.063587,2.937877,3.498264e-031,0,2.937877,-0.6444764,3.482857e-031,0,-0.6444764,-1.210981,3.482857e-031,0,-1.210981,3.590247,3.482857e-031,0,3.590247,19.55445,3.482857e-031,0,19.55445,6.883821,3.482857e-031,0,6.883821,-23.66677,1.1869e-015,0,-23.66677,-27.63849,3.499816e-031,0,-27.63849,-20.63149,3.482857e-031,0,-20.63149,-14.42865,3.421226e-031,0,-14.42865,-14.12015,3.621526e-031,0,-14.12015,-44.04172,3.498264e-031,0,-44.04172,-72.16852,3.498264e-031,0,-72.16852,-92.2684,3.482857e-031,0,-92.2684,-10.71659,3.498264e-031,0,-10.71659,64.63304,3.482857e-031,0,64.63304,-23.85577,3.482857e-031,0,-23.85577,5.550876,1.179961e-015,0,5.550876,-7.785789,3.484408e-031,0,-7.785789,-29.16147,3.482857e-031,0,-29.16147,23.74675,3.498264e-031,0,23.74675,74.86892,3.482857e-031,0,74.86892,97.68851,3.482857e-031,0,97.68851,31.89042,1.179961e-015,0,31.89042,-13.77007,3.499816e-031,0,-13.77007,-34.2314,3.498264e-031,0,-34.2314,-37.49115,3.482857e-031,0,-37.49115,-35.16467,3.482857e-031,0,-35.16467,0,4.099946e-031,0 } KeyAttrRefCount: *41 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129666224, "AnimCurve::", "" { Default: 7.7121057510376 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,34639618500,35409387800,36179157100,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: 2.03563,-2.631946,-5.856407,1.056695,5.782118,9.674322,12.38624,14.53341,16.25304,17.74903,18.91856,20.2921,21.78345,23.25567,25.17219,27.55988,29.32354,29.93146,28.36858,27.43425,25.9979,23.06981,15.04611,6.49448,-2.059036,-9.796998,-17.55634,-20.43628,-14.95779,-10.65853,-8.081217,-3.958989,-0.8947151,1.286986,2.356471,3.834937,8.657645,8.626781,6.731467,4.196056,2.03548 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser KeyAttrFlags: *41 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *164 { a: -161.674,-118.3805,3.498264e-031,0,-118.3805,55.32962,3.482857e-031,0,55.32962,174.5779,3.482857e-031,0,174.5779,129.2644,3.482857e-031,0,129.2644,99.0618,3.482857e-031,0,99.0618,72.88638,3.482857e-031,0,72.88638,58.00206,3.498264e-031,0,58.00206,48.23418,3.482857e-031,0,48.23418,39.98281,1.179961e-015,0,39.98281,38.28574,3.499816e-031,0,38.28574,42.95459,1.096694e-015,0,42.95459,44.31406,3.561446e-031,0,44.31406,50.83105,3.482857e-031,0,50.83105,64.56322,3.498264e-031,0,64.56322,62.27022,3.482857e-031,0,62.27022,35.57367,3.482857e-031,0,35.57367,-14.32429,1.179961e-015,0,-14.32429,-37.45814,3.499816e-031,0,-37.45814,-35.56017,3.482857e-031,0,-35.56017,-65.46667,3.482857e-031,0,-65.46667,-165.2758,3.482857e-031,0,-165.2758,-417.4816,3.421226e-031,0,-417.4816,-510.0072,3.621526e-031,0,-510.0072,-488.7443,3.482857e-031,0,-488.7443,-464.919,3.482857e-031,0,-464.919,-339.1729,3.482857e-031,0,-339.1729,38.97813,3.498264e-031,0,38.97813,146.6662,3.498264e-031,0,146.6662,103.1487,3.482857e-031,0,103.1487,100.4931,3.498264e-031,0,100.4931,107.7975,1.179961e-015,0,107.7975,78.68961,3.499816e-031,0,78.68961,48.76778,1.179961e-015,0,48.76778,38.21926,3.484408e-031,0,38.21926,94.51761,3.482857e-031,0,94.51761,71.87767,3.482857e-031,0,71.87767,-28.89268,3.482857e-031,0,-28.89268,-66.46089,3.482857e-031,0,-66.46089,-70.4398,3.498264e-031,0,-70.4398,-59.19476,3.482857e-031,0,-59.19476,0,4.099946e-031,0 } KeyAttrRefCount: *41 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129666544, "AnimCurve::", "" { Default: -7.13063798229996e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -7.130623e-007,-7.130643e-007,-7.130631e-007,-7.130629e-007,-7.130637e-007,-7.130624e-007,-7.130635e-007,-7.130612e-007,-7.130618e-007,-7.130628e-007,-7.130623e-007,-7.130644e-007,-7.130637e-007,-7.130621e-007,-7.130632e-007,-7.130641e-007,-7.130639e-007,-7.13062e-007,-7.130628e-007,-7.130634e-007,-7.130632e-007,-7.130628e-007,-7.130629e-007,-7.130644e-007,-7.130624e-007,-7.130623e-007,-7.130636e-007,-7.130632e-007,-7.130628e-007,-7.130621e-007,-7.130631e-007,-7.130628e-007,-7.130623e-007,-7.130641e-007,-7.130637e-007,-7.13062e-007,-7.130631e-007,-7.130631e-007,-7.130648e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129663664, "AnimCurve::", "" { Default: 8.09784317016602 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 8.138908,10.45591,12.69004,14.35925,14.93957,14.69555,14.68853,14.44775,13.57168,12.90757,12.31705,12.05766,11.74798,11.62923,11.27412,10.93584,11.29237,11.11358,10.41992,10.00094,9.505821,9.314293,9.77639,10.24982,10.89657,11.31113,11.2808,11.2647,10.98571,10.33494,9.57946,8.788445,8.245384,8.024986,8.111336,8.288109,8.341423,8.202019,8.138894 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129669104, "AnimCurve::", "" { Default: 184.387466430664 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 179.7333,177.3544,175.4081,173.51,171.4394,169.8687,170.6142,172.1824,172.4542,171.8416,171.4999,172.2899,172.6114,172.558,171.3214,169.9959,169.6089,170.6203,172.5556,173.8279,175.7864,177.8601,180.206,182.4481,185.315,187.0913,187.0482,186.996,187.2927,187.2497,187.3987,186.4835,185.4695,184.5996,184.3482,184.1792,183.2765,181.4556,179.7331 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129663984, "AnimCurve::", "" { Default: 0.917054355144501 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 21.04986,20.99232,20.06409,14.90823,6.6127,-0.474901,-6.313387,-11.03249,-15.78141,-19.57858,-23.02783,-25.49016,-27.01154,-27.18094,-27.86675,-29.40088,-28.67717,-31.21016,-34.63784,-35.18562,-34.06361,-33.18781,-32.17891,-30.60283,-29.73879,-28.06679,-24.51293,-21.36559,-17.88133,-14.22527,-11.21985,-8.895525,-6.280855,-2.796831,1.604811,6.273024,10.42097,15.46986,21.04748 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129669744, "AnimCurve::", "" { Default: -1.20693221106194e-006 KeyVer: 4007 KeyTime: *22 { a: 0,1539538600,3079077200,4618615800,7697693000,9237231600,13855847400,15395386000,16927226907,20014001800,21553540400,23093079000,24632617600,26172156200,32330310599,33862151507,35409387800,36948926400,38488465000,41567542200,43107080800,58502466800 } KeyValueFloat: *22 { a: -1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206932e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206933e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206932e-006,-1.206933e-006 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *15 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50334728,1032 } KeyAttrDataFloat: *60 { a: 0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.096694e-015,0,0,0,3.530631e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *15 { a: 4,1,1,1,1,1,2,1,1,1,1,1,3,2,1 } } AnimationCurve: 129666864, "AnimCurve::", "" { Default: -1.28146643874061e-006 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -1.281466e-006,-1.281466e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281465e-006,-1.281466e-006,-1.281465e-006,-1.281465e-006,-1.281465e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281466e-006,-1.281467e-006,-1.281467e-006,-1.281467e-006,-1.281466e-006 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129665904, "AnimCurve::", "" { Default: -1.3035603761673 KeyVer: 4007 KeyTime: *46 { a: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *46 { a: -3.838867,-5.475441,-6.022648,-6.152676,-6.141452,-5.728282,-5.112936,-3.417693,1.406434,1.098143,-0.8714044,-3.962297,-6.6434,-7.012907,-7.015608,-7.246343,-7.433587,-7.713497,-7.897579,-8.738768,-9.476568,-10.74272,-9.251937,-7.119717,-5.816975,-7.023832,-8.724273,-5.44758,-3.429229,-3.415492,-1.05308,1.115052,2.94439,2.63772,2.347455,1.971719,1.307944,0.9705787,0.3789048,-0.3112393,-0.8676267,-1.45646,-2.11609,-3.060301,-3.72777,-3.839287 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *46 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *184 { a: -65.43775,-32.75671,3.482857e-031,0,-32.75671,-10.67317,3.482857e-031,0,-10.67317,-3.564117,3.482857e-031,0,-3.564117,12.7318,3.498264e-031,0,12.7318,30.8555,3.482857e-031,0,30.8555,41.5663,3.482857e-031,0,41.5663,97.79053,3.482857e-031,0,97.79053,67.73755,3.498264e-031,0,67.73755,-34.16758,1.1869e-015,0,-34.16758,-75.90661,3.484409e-031,0,-75.90661,-86.57993,1.1869e-015,0,-86.57993,-45.68542,3.484409e-031,0,-45.68542,-12.92931,3.421226e-031,0,-12.92931,-13.00519,1.187599e-015,0,-13.00519,-12.52588,3.467457e-031,0,-12.52588,-14.01463,3.482857e-031,0,-14.01463,-13.91975,3.482857e-031,0,-13.91975,-30.75813,3.482857e-031,0,-30.75813,-47.36969,3.482857e-031,0,-47.36969,-42.17352,1.179961e-015,0,-42.17352,3.369469,3.499816e-031,0,3.369469,54.34502,3.482857e-031,0,54.34502,51.52444,3.482857e-031,0,51.52444,1.438271,3.498264e-031,0,1.438271,-43.60946,3.498264e-031,0,-43.60946,23.64378,1.179961e-015,0,23.64378,79.5575,3.499816e-031,0,79.5575,65.85556,3.421226e-031,0,65.85556,66.01466,6.865665e-029,0,66.01466,67.93379,3.482865e-031,0,67.93379,59.96204,3.482857e-031,0,59.96204,22.84003,3.482857e-031,0,22.84003,-8.954023,3.482857e-031,0,-8.954023,-9.990015,3.482857e-031,0,-9.990015,-15.59267,1.179961e-015,0,-15.59267,-15.0171,3.484408e-031,0,-15.0171,-13.93558,3.482857e-031,0,-13.93558,-19.22727,3.482857e-031,0,-19.22727,-18.69798,3.482857e-031,0,-18.69798,-17.1783,3.482857e-031,0,-17.1783,-18.72695,3.498264e-031,0,-18.72695,-24.05762,3.482857e-031,0,-24.05762,-24.1752,3.482857e-031,0,-24.1752,-11.68479,3.498264e-031,0,-11.68479,4.993798,3.482857e-031,0,4.993798,0,4.099946e-031,0 } KeyAttrRefCount: *46 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129665584, "AnimCurve::", "" { Default: -4.911376953125 KeyVer: 4007 KeyTime: *46 { a: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *46 { a: -0.2281556,-0.8116393,-1.648182,-2.916715,-4.185248,-5.963397,-7.741546,-10.21371,-12.42362,-12.23345,-10.82271,-9.431629,-7.975788,-7.157815,-7.15772,-6.565405,-5.973089,-5.020076,-4.067063,-2.844488,-1.621912,0.05159544,0.9033615,-0.214606,-2.616493,-3.173128,-3.045003,-4.898131,-6.407443,-6.407619,-7.69688,-8.727499,-9.327105,-9.267362,-8.867445,-8.466838,-7.872658,-7.409048,-6.883518,-6.237642,-5.538752,-4.795197,-3.962737,-2.966779,-1.733516,-0.2284132 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *20 { a: 1032,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,3080,1032 } KeyAttrDataFloat: *80 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-114.168,4.099946e-031,0,-114.168,0,4.099946e-031,0,0,-160.0334,4.099946e-031,0,-160.0334,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0.9145774,4.099946e-031,0,0.9145774,0,4.099946e-031,0,0,53.30839,4.099946e-031,0,53.30839,0,4.099946e-031,0,0,85.77116,4.099946e-031,0,85.77116,0,4.099946e-031,0,0,110.0318,4.099946e-031,0,110.0318,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-1.687566,4.099946e-031,0,-1.687566,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *20 { a: 1,1,1,1,1,1,6,1,1,1,1,1,1,1,1,7,1,1,16,1 } } AnimationCurve: 129664304, "AnimCurve::", "" { Default: -31.2710037231445 KeyVer: 4007 KeyTime: *46 { a: 0,1539538600,3079077200,3848846500,4618615800,5388385100,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,17704693900,18474463200,19244232500,20014001800,20783771100,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *46 { a: -11.10239,-16.37076,-23.06231,-29.4272,-35.79797,-42.19787,-48.63469,-54.83731,-61.54433,-66.46061,-67.82286,-66.33256,-62.61441,-56.08582,-56.03572,-51.66957,-47.26077,-41.54079,-35.83307,-31.02521,-26.23933,-21.27983,-17.19805,-20.00532,-27.25462,-29.9888,-30.02294,-33.25843,-39.47702,-39.51013,-43.84833,-47.35511,-48.77818,-48.20774,-47.03755,-45.54545,-43.3063,-41.41833,-39.23192,-36.48225,-33.53179,-30.48222,-27.08713,-23.15325,-17.96021,-11.10693 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, ;Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *46 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *184 { a: -136.7036,-179.3987,3.482857e-031,0,-179.3987,-321.5114,3.482857e-031,0,-321.5114,-382.07,3.482857e-031,0,-382.07,-383.1199,3.482857e-031,0,-383.1199,-385.1015,3.482857e-031,0,-385.1015,-319.4991,3.482857e-031,0,-319.4991,-193.6447,3.498264e-031,0,-193.6447,-174.3495,3.482857e-031,0,-174.3495,-94.17793,1.1869e-015,0,-94.17793,1.920786,3.484409e-031,0,1.920786,78.12685,3.482857e-031,0,78.12685,154.4511,3.498264e-031,0,154.4511,239.8963,3.421226e-031,0,239.8963,240.9291,3.906102e-029,0,240.9291,263.1246,3.467457e-031,0,263.1246,303.8633,3.482857e-031,0,303.8633,342.8311,3.482857e-031,0,342.8311,315.4677,1.179961e-015,0,315.4677,287.812,3.499816e-031,0,287.812,241.0301,1.1869e-015,0,241.0301,135.6192,3.484409e-031,0,135.6192,19.11765,3.498264e-031,0,19.11765,-150.8485,3.498264e-031,0,-150.8485,-149.7522,3.498264e-031,0,-149.7522,-41.5249,3.482857e-031,0,-41.5249,-49.04448,1.179961e-015,0,-49.04448,-142.5399,3.484408e-031,0,-142.5399,-159.2073,3.421226e-031,0,-159.2073,-158.6481,3.906102e-029,0,-158.6481,-117.725,3.482865e-031,0,-117.725,-73.94779,3.482857e-031,0,-73.94779,-12.7895,3.482857e-031,0,-12.7895,26.10949,1.179961e-015,0,26.10949,39.93432,3.484408e-031,0,39.93432,55.96861,3.498264e-031,0,55.96861,61.90676,3.482857e-031,0,61.90676,61.11578,3.498264e-031,0,61.11578,74.04129,3.482857e-031,0,74.04129,85.50191,3.482857e-031,0,85.50191,90.00047,3.482857e-031,0,90.00047,96.66999,3.482857e-031,0,96.66999,109.9345,1.1869e-015,0,109.9345,136.9037,3.484408e-031,0,136.9037,180.6949,3.482857e-031,0,180.6949,230.5023,3.482857e-031,0,230.5023,0,4.099946e-031,0 } KeyAttrRefCount: *46 { a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129667184, "AnimCurve::", "" { Default: 1.89655921190024e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 1.896547e-007,1.896567e-007,1.896569e-007,1.896559e-007,1.896557e-007,1.896559e-007,1.896563e-007,1.896568e-007,1.896574e-007,1.896588e-007,1.896573e-007,1.896569e-007,1.896572e-007,1.896546e-007,1.896534e-007,1.89652e-007,1.896534e-007,1.896551e-007,1.896529e-007,1.89655e-007,1.896545e-007,1.896557e-007,1.896535e-007,1.896587e-007,1.896557e-007,1.896559e-007,1.896559e-007,1.896564e-007,1.896559e-007,1.896554e-007,1.896559e-007,1.896548e-007,1.896547e-007,1.896557e-007,1.896561e-007,1.896555e-007,1.896551e-007,1.896553e-007,1.896555e-007 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *13 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *52 { a: 0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,3.559895e-031,0,0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.186901e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *13 { a: 10,1,1,9,1,1,1,7,1,1,1,4,1 } } AnimationCurve: 129668784, "AnimCurve::", "" { Default: 5.16880504619621e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 5.168786e-007,5.168799e-007,5.168795e-007,5.168789e-007,5.16879e-007,5.168811e-007,5.168773e-007,5.168773e-007,5.168774e-007,5.168793e-007,5.1688e-007,5.16881e-007,5.168784e-007,5.168779e-007,5.168786e-007,5.168791e-007,5.168806e-007,5.168782e-007,5.168787e-007,5.168764e-007,5.168786e-007,5.168799e-007,5.168785e-007,5.168785e-007,5.168802e-007,5.168802e-007,5.168787e-007,5.168775e-007,5.168788e-007,5.168791e-007,5.168788e-007,5.168791e-007,5.168783e-007,5.168797e-007,5.168807e-007,5.168786e-007,5.168803e-007,5.168769e-007,5.1688e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129667504, "AnimCurve::", "" { Default: 4.14072751998901 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 4.356791,4.446802,4.170916,4.042482,4.123709,4.07195,3.999613,4.489667,4.310299,4.235019,4.178489,4.228981,4.245921,4.258229,4.482564,4.843668,4.808043,4.362197,4.150016,4.138653,4.24137,4.425456,4.255672,4.192485,4.223977,4.319167,4.329308,4.328222,4.323752,4.276043,4.257069,4.215905,4.174899,4.14333,4.140245,4.168944,4.19347,4.297219,4.357316 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129664624, "AnimCurve::", "" { Default: 1.20476734638214 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 2.998531,3.208285,3.329884,2.936727,2.187594,2.197953,2.303326,-1.632512,0.01612961,0.8930614,2.359705,1.57122,2.282864,1.543429,3.412734,5.181534,6.265584,5.241893,3.381735,0.9348754,-0.9503644,-1.644918,-1.142894,-0.1480894,0.957563,1.998926,1.982268,1.890379,1.802094,1.49238,1.383043,1.170279,1.014874,1.037875,1.235673,1.573547,1.908531,2.518565,3.001812 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129670384, "AnimCurve::", "" { Default: 25.1047039031982 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 24.16243,23.60759,21.58997,15.81379,2.507358,-14.501,-12.90901,-7.250752,-5.14674,-3.338454,-0.03205738,2.535204,4.185261,5.508277,6.090518,11.26089,18.93974,20.48142,16.45079,5.76727,-3.405558,-5.796676,0.831438,6.016302,10.14816,13.34354,15.87214,17.92105,19.71133,20.9869,22.21648,22.89267,23.39386,24.25554,25.26196,25.97387,26.2069,25.66108,24.16155 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129664944, "AnimCurve::", "" { Default: 5.25022077560425 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: 5.250221,5.250221,5.250221,5.250221,5.25022,5.250221,5.250221,5.25022,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.24554,5.250221,5.250221,5.25022,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250221,5.250257,5.250221,5.250221,5.250221 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129670704, "AnimCurve::", "" { Default: 6.27385330200195 KeyVer: 4007 KeyTime: *12 { a: 0,29251233400,30790772000,32330310599,33862151507,35409387800,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *12 { a: 6.273849,6.273849,6.273849,6.277762,6.273849,6.273849,6.273849,6.273849,6.273818,6.273849,6.273849,6.273849 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *12 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *48 { a: 0,0,3.499816e-031,0,0,0.05869388,3.498264e-031,0,0.05869388,-0.0007382902,3.482857e-031,0,-0.0007382902,-0.05943218,3.421226e-031,0,-0.05943218,0,3.559895e-031,0,0,0,3.482857e-031,0,0,-0.0004792214,1.179961e-015,0,-0.0004792214,0,3.484408e-031,0,0,0.0004792213,3.482857e-031,0,0.0004792213,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *12 { a: 1,1,1,1,1,1,1,1,1,1,1,1 } } AnimationCurve: 129667824, "AnimCurve::", "" { Default: -4.15015392718487e-007 KeyVer: 4007 KeyTime: *39 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *39 { a: -4.15015e-007,-4.150162e-007,-4.150153e-007,-4.150157e-007,-4.15015e-007,-4.150162e-007,-4.150163e-007,-4.15014e-007,-4.150156e-007,-4.150155e-007,-4.150151e-007,-4.150166e-007,-4.15016e-007,-4.150151e-007,-4.150149e-007,-4.150165e-007,-4.150157e-007,-4.150142e-007,-4.150154e-007,-4.150154e-007,-4.150156e-007,-0.004373661,-4.150155e-007,-4.150167e-007,-4.150146e-007,-4.150146e-007,-4.150152e-007,-4.150155e-007,-4.150154e-007,-4.150149e-007,-4.150151e-007,-4.150154e-007,-4.150141e-007,-4.150163e-007,-4.150152e-007,0.005070541,-4.150155e-007,-4.150148e-007,-4.150164e-007 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *3 { a: 1032,3080,1032 } KeyAttrDataFloat: *12 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *3 { a: 1,37,1 } } AnimationCurve: 129668144, "AnimCurve::", "" { Default: 1.04748585272318e-006 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: 1.047408e-006,1.047409e-006,1.047411e-006,1.047413e-006,1.047415e-006,1.047417e-006,1.047419e-006,1.047421e-006,1.047423e-006,1.047425e-006,1.047427e-006,1.047429e-006,1.047429e-006,1.04743e-006,1.047432e-006,1.047434e-006,1.047435e-006,1.047437e-006,1.047438e-006,1.047439e-006,1.04744e-006,1.047441e-006,0.01731789,1.047386e-006,-5.367074e-005,1.047433e-006,1.047455e-006,1.047472e-006,1.047485e-006,1.047493e-006,1.047497e-006,1.047499e-006,1.047498e-006,1.047496e-006,1.047492e-006,1.047488e-006,1.047484e-006,1.04748e-006,1.047478e-006,1.047477e-006,1.047479e-006 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *28 { a: 50332680,50332680,50334728,50334728,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,1032 } KeyAttrDataFloat: *112 { a: 0,0,3.482857e-031,0,0,0,3.421226e-031,0,0,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0.2597526,1.1869e-015,0,0.2597526,0,1.18066e-015,0,0,-0.26302,1.097392e-015,0,-0.26302,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,1.18066e-015,0,0,0,3.484408e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,1.179961e-015,0,0,0,3.484408e-031,0,0,0,3.482857e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *28 { a: 10,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1 } } AnimationCurve: 129668464, "AnimCurve::", "" { Default: -3.46426012876044e-011 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: 0,-1.628444e-012,-2.442666e-012,-3.663999e-012,-5.292443e-012,-6.513776e-012,-8.14222e-012,-9.770664e-012,-1.139911e-011,-1.262044e-011,-1.424889e-011,-1.506301e-011,-1.506311e-011,-1.669155e-011,-1.750577e-011,-1.831999e-011,-1.872711e-011,-1.913422e-011,-1.913422e-011,-1.913422e-011,-1.872711e-011,-1.669155e-011,0.02847441,3.322935e-006,-7.735109e-012,-2.564799e-011,-3.33831e-011,-3.908266e-011,-4.274666e-011,-4.518932e-011,-4.600354e-011,-4.559643e-011,-4.43751e-011,-4.193243e-011,-3.989688e-011,-3.70471e-011,-3.419733e-011,-3.134755e-011,-2.97191e-011,-2.849777e-011,-2.809066e-011 } ;KeyAttrFlags: Cubic|TangeantUser, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser|GenericBreak, Cubic|TangeantUser KeyAttrFlags: *6 { a: 1032,3080,3080,3080,3080,1032 } KeyAttrDataFloat: *24 { a: 0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,-0.03183363,4.099946e-031,0,-0.03183363,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *6 { a: 1,21,1,1,16,1 } } AnimationCurve: 129665264, "AnimCurve::", "" { Default: 104.594665527344 KeyVer: 4007 KeyTime: *41 { a: 0,1539538600,3079077200,4618615800,6158154400,7697693000,9237231600,10776770200,12316308800,13855847400,15395386000,16927226907,16934924599,18474463200,20014001800,21553540400,23093079000,24632617600,26172156200,27711694800,29251233400,30790772000,32330310599,33862151507,33869849199,35409387800,36948926400,38488465000,40028003600,41567542200,43107080800,44646619400,46186158000,47725696599,49265235200,50804773799,52344312400,53883850999,55423389600,56962928200,58502466800 } KeyValueFloat: *41 { a: 104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.6374,104.5947,104.5945,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947,104.5947 } ;KeyAttrFlags: Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|GenericBreak|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser|WeightedRight|WeightedNextLeft, Cubic|TangeantUser KeyAttrFlags: *16 { a: 50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50332680,50334728,50334728,50332680,50332680,1032 } KeyAttrDataFloat: *64 { a: 0,0,4.09993e-031,0,0,0,4.099946e-031,0,0,0,3.945869e-031,0,0,0,1.187599e-015,0,0,0,4.099946e-031,0,0,0,3.482865e-031,0,0,0.6411498,3.482857e-031,0,0.6411498,-0.008064806,1.179961e-015,0,-0.008064806,-0.6492146,3.422776e-031,0,-0.6492146,0,1.187599e-015,0,0,0,3.482865e-031,0,0,0,4.09993e-031,0,0,0,4.099946e-031,0,0,0,4.099946e-031,0,0,0,3.482865e-031,0,0,0,4.099946e-031,0 } KeyAttrRefCount: *16 { a: 1,9,1,1,7,1,1,1,1,1,1,1,1,12,1,1 } } } ; Object connections ;------------------------------------------------------------------ Connections: { ;Model::Root, Model::RootNode C: "OO",125296688,0 ;Model::him, Model::RootNode C: "OO",126231872,0 ;NodeAttribute::, Model::Camera_Switcher C: "OO",125164624,125162032 ;NodeAttribute::, Model::Root C: "OO",125067472,125296688 ;Model::Pelvis, Model::Root C: "OO",125274112,125296688 ;NodeAttribute::, Model::Pelvis C: "OO",125067824,125274112 ;Model::Spine, Model::Pelvis C: "OO",125276368,125274112 ;AnimCurveNode::T, Model::Pelvis C: "OP",125161664,125274112, "Lcl Translation" ;AnimCurveNode::R, Model::Pelvis C: "OP",130891072,125274112, "Lcl Rotation" ;AnimCurveNode::S, Model::Pelvis C: "OP",125193872,125274112, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Pelvis C: "OP",125194240,125274112, "Visibility" ;AnimCurveNode::liw, Model::Pelvis C: "OP",125675888,125274112, "liw" ;NodeAttribute::, Model::Spine C: "OO",125064304,125276368 ;Model::Spine1, Model::Spine C: "OO",125278624,125276368 ;Model::L_Thigh1, Model::Spine C: "OO",126220272,125276368 ;Model::R_Thigh, Model::Spine C: "OO",126227232,125276368 ;NodeAttribute::, Model::Spine1 C: "OO",125064656,125278624 ;Model::Spine2, Model::Spine1 C: "OO",125280880,125278624 ;AnimCurveNode::T, Model::Spine1 C: "OP",125676256,125278624, "Lcl Translation" ;AnimCurveNode::R, Model::Spine1 C: "OP",125676624,125278624, "Lcl Rotation" ;AnimCurveNode::S, Model::Spine1 C: "OP",130892928,125278624, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Spine1 C: "OP",125160992,125278624, "Visibility" ;AnimCurveNode::liw, Model::Spine1 C: "OP",130893296,125278624, "liw" ;NodeAttribute::, Model::Spine2 C: "OO",125290432,125280880 ;Model::Spine3, Model::Spine2 C: "OO",125692096,125280880 ;AnimCurveNode::T, Model::Spine2 C: "OP",136827728,125280880, "Lcl Translation" ;AnimCurveNode::R, Model::Spine2 C: "OP",136826992,125280880, "Lcl Rotation" ;AnimCurveNode::S, Model::Spine2 C: "OP",136829568,125280880, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Spine2 C: "OP",136827360,125280880, "Visibility" ;AnimCurveNode::liw, Model::Spine2 C: "OP",136829936,125280880, "liw" ;NodeAttribute::, Model::Spine3 C: "OO",125290784,125692096 ;Model::Neck, Model::Spine3 C: "OO",125694352,125692096 ;AnimCurveNode::T, Model::Spine3 C: "OP",136828096,125692096, "Lcl Translation" ;AnimCurveNode::R, Model::Spine3 C: "OP",136828464,125692096, "Lcl Rotation" ;AnimCurveNode::S, Model::Spine3 C: "OP",136828832,125692096, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Spine3 C: "OP",136829200,125692096, "Visibility" ;AnimCurveNode::liw, Model::Spine3 C: "OP",136830304,125692096, "liw" ;NodeAttribute::, Model::Neck C: "OO",125288320,125694352 ;Model::Head, Model::Neck C: "OO",125673632,125694352 ;Model::L_Clavicle, Model::Neck C: "OO",125724528,125694352 ;Model::R_Clavicle, Model::Neck C: "OO",125842080,125694352 ;AnimCurveNode::T, Model::Neck C: "OP",137457504,125694352, "Lcl Translation" ;AnimCurveNode::R, Model::Neck C: "OP",137456400,125694352, "Lcl Rotation" ;AnimCurveNode::S, Model::Neck C: "OP",137455296,125694352, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Neck C: "OP",137458976,125694352, "Visibility" ;AnimCurveNode::liw, Model::Neck C: "OP",137455664,125694352, "liw" ;NodeAttribute::, Model::Head C: "OO",125292192,125673632 ;Model::L_eye_joint1, Model::Head C: "OO",125726848,125673632 ;Model::R_eye_joint, Model::Head C: "OO",125715248,125673632 ;Model::L_eyeBall_joint2, Model::Head C: "OO",125722208,125673632 ;Model::R_eyeBall_joint, Model::Head C: "OO",125703648,125673632 ;AnimCurveNode::T, Model::Head C: "OP",137457872,125673632, "Lcl Translation" ;AnimCurveNode::R, Model::Head C: "OP",137458240,125673632, "Lcl Rotation" ;AnimCurveNode::S, Model::Head C: "OP",137456032,125673632, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::Head C: "OP",137454560,125673632, "Visibility" ;AnimCurveNode::liw, Model::Head C: "OP",137458608,125673632, "liw" ;NodeAttribute::, Model::L_eye_joint1 C: "OO",125285856,125726848 ;AnimCurveNode::T, Model::L_eye_joint1 C: "OP",137460816,125726848, "Lcl Translation" ;AnimCurveNode::R, Model::L_eye_joint1 C: "OP",137453824,125726848, "Lcl Rotation" ;AnimCurveNode::S, Model::L_eye_joint1 C: "OP",137459344,125726848, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_eye_joint1 C: "OP",137459712,125726848, "Visibility" ;AnimCurveNode::liw, Model::L_eye_joint1 C: "OP",137456768,125726848, "liw" ;NodeAttribute::, Model::R_eye_joint C: "OO",125289728,125715248 ;AnimCurveNode::T, Model::R_eye_joint C: "OP",137461184,125715248, "Lcl Translation" ;AnimCurveNode::R, Model::R_eye_joint C: "OP",137460080,125715248, "Lcl Rotation" ;AnimCurveNode::S, Model::R_eye_joint C: "OP",137454192,125715248, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_eye_joint C: "OP",137454928,125715248, "Visibility" ;AnimCurveNode::liw, Model::R_eye_joint C: "OP",137460448,125715248, "liw" ;NodeAttribute::, Model::L_eyeBall_joint2 C: "OO",125286560,125722208 ;AnimCurveNode::T, Model::L_eyeBall_joint2 C: "OP",137457136,125722208, "Lcl Translation" ;AnimCurveNode::R, Model::L_eyeBall_joint2 C: "OP",137461552,125722208, "Lcl Rotation" ;AnimCurveNode::S, Model::L_eyeBall_joint2 C: "OP",131342512,125722208, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_eyeBall_joint2 C: "OP",131344352,125722208, "Visibility" ;AnimCurveNode::liw, Model::L_eyeBall_joint2 C: "OP",131343984,125722208, "liw" ;NodeAttribute::, Model::R_eyeBall_joint C: "OO",125287968,125703648 ;AnimCurveNode::T, Model::R_eyeBall_joint C: "OP",131344720,125703648, "Lcl Translation" ;AnimCurveNode::R, Model::R_eyeBall_joint C: "OP",131350240,125703648, "Lcl Rotation" ;AnimCurveNode::S, Model::R_eyeBall_joint C: "OP",131345088,125703648, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_eyeBall_joint C: "OP",131345824,125703648, "Visibility" ;AnimCurveNode::liw, Model::R_eyeBall_joint C: "OP",131348032,125703648, "liw" ;NodeAttribute::, Model::L_Clavicle C: "OO",125286208,125724528 ;Model::L_UpperArm, Model::L_Clavicle C: "OO",125705968,125724528 ;NodeAttribute::, Model::L_UpperArm C: "OO",125288672,125705968 ;Model::L_Forearm, Model::L_UpperArm C: "OO",125710608,125705968 ;AnimCurveNode::T, Model::L_UpperArm C: "OP",131345456,125705968, "Lcl Translation" ;AnimCurveNode::R, Model::L_UpperArm C: "OP",131347664,125705968, "Lcl Rotation" ;AnimCurveNode::S, Model::L_UpperArm C: "OP",131348768,125705968, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_UpperArm C: "OP",131346192,125705968, "Visibility" ;AnimCurveNode::liw, Model::L_UpperArm C: "OP",131343248,125705968, "liw" ;NodeAttribute::, Model::L_Forearm C: "OO",125291136,125710608 ;Model::L_Hand, Model::L_Forearm C: "OO",125708288,125710608 ;AnimCurveNode::T, Model::L_Forearm C: "OP",131346560,125710608, "Lcl Translation" ;AnimCurveNode::R, Model::L_Forearm C: "OP",131346928,125710608, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Forearm C: "OP",131347296,125710608, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Forearm C: "OP",131348400,125710608, "Visibility" ;AnimCurveNode::liw, Model::L_Forearm C: "OP",131349136,125710608, "liw" ;NodeAttribute::, Model::L_Hand C: "OO",125291488,125708288 ;Model::L_Thumb1, Model::L_Hand C: "OO",125712928,125708288 ;Model::L_Index1, Model::L_Hand C: "OO",125719888,125708288 ;Model::L_Middle1, Model::L_Hand C: "OO",125835120,125708288 ;Model::L_Ring1, Model::L_Hand C: "OO",125844400,125708288 ;Model::L_Pinky1, Model::L_Hand C: "OO",125828160,125708288 ;AnimCurveNode::T, Model::L_Hand C: "OP",131349504,125708288, "Lcl Translation" ;AnimCurveNode::R, Model::L_Hand C: "OP",131349872,125708288, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Hand C: "OP",131342880,125708288, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Hand C: "OP",131343616,125708288, "Visibility" ;AnimCurveNode::liw, Model::L_Hand C: "OP",131428944,125708288, "liw" ;NodeAttribute::, Model::L_Thumb1 C: "OO",125284448,125712928 ;Model::L_Thumb2, Model::L_Thumb1 C: "OO",125717568,125712928 ;AnimCurveNode::T, Model::L_Thumb1 C: "OP",131428576,125712928, "Lcl Translation" ;AnimCurveNode::R, Model::L_Thumb1 C: "OP",131428208,125712928, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Thumb1 C: "OP",131431152,125712928, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Thumb1 C: "OP",131430416,125712928, "Visibility" ;AnimCurveNode::liw, Model::L_Thumb1 C: "OP",131426000,125712928, "liw" ;NodeAttribute::, Model::L_Thumb2 C: "OO",125291840,125717568 ;Model::L_Thumb3, Model::L_Thumb2 C: "OO",125696688,125717568 ;AnimCurveNode::T, Model::L_Thumb2 C: "OP",131425264,125717568, "Lcl Translation" ;AnimCurveNode::R, Model::L_Thumb2 C: "OP",131430784,125717568, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Thumb2 C: "OP",131427104,125717568, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Thumb2 C: "OP",131427840,125717568, "Visibility" ;AnimCurveNode::liw, Model::L_Thumb2 C: "OP",131429312,125717568, "liw" ;NodeAttribute::, Model::L_Thumb3 C: "OO",125284800,125696688 ;AnimCurveNode::T, Model::L_Thumb3 C: "OP",131429680,125696688, "Lcl Translation" ;AnimCurveNode::R, Model::L_Thumb3 C: "OP",131424528,125696688, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Thumb3 C: "OP",131427472,125696688, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Thumb3 C: "OP",131431520,125696688, "Visibility" ;AnimCurveNode::liw, Model::L_Thumb3 C: "OP",131426736,125696688, "liw" ;NodeAttribute::, Model::L_Index1 C: "OO",125285152,125719888 ;Model::L_Index2, Model::L_Index1 C: "OO",125699008,125719888 ;AnimCurveNode::T, Model::L_Index1 C: "OP",131431888,125719888, "Lcl Translation" ;AnimCurveNode::R, Model::L_Index1 C: "OP",131430048,125719888, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Index1 C: "OP",131432256,125719888, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Index1 C: "OP",131425632,125719888, "Visibility" ;AnimCurveNode::liw, Model::L_Index1 C: "OP",131424896,125719888, "liw" ;NodeAttribute::, Model::L_Index2 C: "OO",125285504,125699008 ;Model::L_Index3, Model::L_Index2 C: "OO",125701328,125699008 ;AnimCurveNode::T, Model::L_Index2 C: "OP",131426368,125699008, "Lcl Translation" ;AnimCurveNode::R, Model::L_Index2 C: "OP",136845648,125699008, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Index2 C: "OP",136844176,125699008, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Index2 C: "OP",136846752,125699008, "Visibility" ;AnimCurveNode::liw, Model::L_Index2 C: "OP",136846016,125699008, "liw" ;NodeAttribute::, Model::L_Index3 C: "OO",125286912,125701328 ;AnimCurveNode::T, Model::L_Index3 C: "OP",136843808,125701328, "Lcl Translation" ;AnimCurveNode::R, Model::L_Index3 C: "OP",136844544,125701328, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Index3 C: "OP",136846384,125701328, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Index3 C: "OP",136843440,125701328, "Visibility" ;AnimCurveNode::liw, Model::L_Index3 C: "OP",136844912,125701328, "liw" ;NodeAttribute::, Model::L_Middle1 C: "OO",125289024,125835120 ;Model::L_Middle2, Model::L_Middle1 C: "OO",125839760,125835120 ;AnimCurveNode::T, Model::L_Middle1 C: "OP",136845280,125835120, "Lcl Translation" ;AnimCurveNode::R, Model::L_Middle1 C: "OP",131533328,125835120, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Middle1 C: "OP",131531120,125835120, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Middle1 C: "OP",131532224,125835120, "Visibility" ;AnimCurveNode::liw, Model::L_Middle1 C: "OP",131532592,125835120, "liw" ;NodeAttribute::, Model::L_Middle2 C: "OO",125287264,125839760 ;Model::L_Middle3, Model::L_Middle2 C: "OO",125851360,125839760 ;AnimCurveNode::T, Model::L_Middle2 C: "OP",131531488,125839760, "Lcl Translation" ;AnimCurveNode::R, Model::L_Middle2 C: "OP",131534064,125839760, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Middle2 C: "OP",131535536,125839760, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Middle2 C: "OP",131532960,125839760, "Visibility" ;AnimCurveNode::liw, Model::L_Middle2 C: "OP",131531856,125839760, "liw" ;NodeAttribute::, Model::L_Middle3 C: "OO",125287616,125851360 ;AnimCurveNode::T, Model::L_Middle3 C: "OP",131533696,125851360, "Lcl Translation" ;AnimCurveNode::R, Model::L_Middle3 C: "OP",131534432,125851360, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Middle3 C: "OP",131536272,125851360, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Middle3 C: "OP",131538112,125851360, "Visibility" ;AnimCurveNode::liw, Model::L_Middle3 C: "OP",131535904,125851360, "liw" ;NodeAttribute::, Model::L_Ring1 C: "OO",125289376,125844400 ;Model::L_Ring2, Model::L_Ring1 C: "OO",125837440,125844400 ;AnimCurveNode::T, Model::L_Ring1 C: "OP",131534800,125844400, "Lcl Translation" ;AnimCurveNode::R, Model::L_Ring1 C: "OP",131536640,125844400, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Ring1 C: "OP",131537008,125844400, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Ring1 C: "OP",131535168,125844400, "Visibility" ;AnimCurveNode::liw, Model::L_Ring1 C: "OP",131537376,125844400, "liw" ;NodeAttribute::, Model::L_Ring2 C: "OO",125290080,125837440 ;Model::L_Ring3, Model::L_Ring2 C: "OO",125853680,125837440 ;AnimCurveNode::T, Model::L_Ring2 C: "OP",131537744,125837440, "Lcl Translation" ;AnimCurveNode::R, Model::L_Ring2 C: "OP",131538480,125837440, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Ring2 C: "OP",131538848,125837440, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Ring2 C: "OP",134646400,125837440, "Visibility" ;AnimCurveNode::liw, Model::L_Ring2 C: "OP",134640512,125837440, "liw" ;NodeAttribute::, Model::L_Ring3 C: "OO",125986480,125853680 ;AnimCurveNode::T, Model::L_Ring3 C: "OP",134644928,125853680, "Lcl Translation" ;AnimCurveNode::R, Model::L_Ring3 C: "OP",134640880,125853680, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Ring3 C: "OP",134647504,125853680, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Ring3 C: "OP",134639776,125853680, "Visibility" ;AnimCurveNode::liw, Model::L_Ring3 C: "OP",134643088,125853680, "liw" ;NodeAttribute::, Model::L_Pinky1 C: "OO",125984368,125828160 ;Model::L_Pinky2, Model::L_Pinky1 C: "OO",125856000,125828160 ;AnimCurveNode::T, Model::L_Pinky1 C: "OP",134641248,125828160, "Lcl Translation" ;AnimCurveNode::R, Model::L_Pinky1 C: "OP",134645296,125828160, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Pinky1 C: "OP",134646768,125828160, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Pinky1 C: "OP",134644192,125828160, "Visibility" ;AnimCurveNode::liw, Model::L_Pinky1 C: "OP",134641616,125828160, "liw" ;NodeAttribute::, Model::L_Pinky2 C: "OO",125987888,125856000 ;Model::L_Pinky3, Model::L_Pinky2 C: "OO",125849040,125856000 ;AnimCurveNode::T, Model::L_Pinky2 C: "OP",134641984,125856000, "Lcl Translation" ;AnimCurveNode::R, Model::L_Pinky2 C: "OP",134640144,125856000, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Pinky2 C: "OP",134645664,125856000, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Pinky2 C: "OP",134647136,125856000, "Visibility" ;AnimCurveNode::liw, Model::L_Pinky2 C: "OP",134642352,125856000, "liw" ;NodeAttribute::, Model::L_Pinky3 C: "OO",125988592,125849040 ;AnimCurveNode::T, Model::L_Pinky3 C: "OP",134643456,125849040, "Lcl Translation" ;AnimCurveNode::R, Model::L_Pinky3 C: "OP",134646032,125849040, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Pinky3 C: "OP",134642720,125849040, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Pinky3 C: "OP",134643824,125849040, "Visibility" ;AnimCurveNode::liw, Model::L_Pinky3 C: "OP",134644560,125849040, "liw" ;NodeAttribute::, Model::R_Clavicle C: "OO",125984016,125842080 ;Model::R_UpperArm, Model::R_Clavicle C: "OO",125846720,125842080 ;NodeAttribute::, Model::R_UpperArm C: "OO",125982256,125846720 ;Model::R_Forearm, Model::R_UpperArm C: "OO",125832800,125846720 ;AnimCurveNode::T, Model::R_UpperArm C: "OP",134718368,125846720, "Lcl Translation" ;AnimCurveNode::R, Model::R_UpperArm C: "OP",134720576,125846720, "Lcl Rotation" ;AnimCurveNode::S, Model::R_UpperArm C: "OP",134715056,125846720, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_UpperArm C: "OP",134713952,125846720, "Visibility" ;AnimCurveNode::liw, Model::R_UpperArm C: "OP",134720208,125846720, "liw" ;NodeAttribute::, Model::R_Forearm C: "OO",125984720,125832800 ;Model::R_Hand, Model::R_Forearm C: "OO",125825840,125832800 ;AnimCurveNode::T, Model::R_Forearm C: "OP",134720944,125832800, "Lcl Translation" ;AnimCurveNode::R, Model::R_Forearm C: "OP",134719840,125832800, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Forearm C: "OP",134713584,125832800, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Forearm C: "OP",134721312,125832800, "Visibility" ;AnimCurveNode::liw, Model::R_Forearm C: "OP",134714320,125832800, "liw" ;NodeAttribute::, Model::R_Hand C: "OO",125986832,125825840 ;Model::R_Thumb1, Model::R_Hand C: "OO",125858320,125825840 ;Model::R_Index1, Model::R_Hand C: "OO",125888480,125825840 ;Model::R_Middle1, Model::R_Hand C: "OO",125886160,125825840 ;Model::R_Ring1, Model::R_Hand C: "OO",125874560,125825840 ;Model::R_Pinky1, Model::R_Hand C: "OO",125876880,125825840 ;AnimCurveNode::T, Model::R_Hand C: "OP",134716160,125825840, "Lcl Translation" ;AnimCurveNode::R, Model::R_Hand C: "OP",134714688,125825840, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Hand C: "OP",134716528,125825840, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Hand C: "OP",134716896,125825840, "Visibility" ;AnimCurveNode::liw, Model::R_Hand C: "OP",134719104,125825840, "liw" ;NodeAttribute::, Model::R_Thumb1 C: "OO",125985776,125858320 ;Model::R_Thumb2, Model::R_Thumb1 C: "OO",125830480,125858320 ;AnimCurveNode::T, Model::R_Thumb1 C: "OP",134715424,125858320, "Lcl Translation" ;AnimCurveNode::R, Model::R_Thumb1 C: "OP",134715792,125858320, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Thumb1 C: "OP",134717264,125858320, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Thumb1 C: "OP",134717632,125858320, "Visibility" ;AnimCurveNode::liw, Model::R_Thumb1 C: "OP",134718000,125858320, "liw" ;NodeAttribute::, Model::R_Thumb2 C: "OO",125988944,125830480 ;Model::R_Thumb3, Model::R_Thumb2 C: "OO",125872240,125830480 ;AnimCurveNode::T, Model::R_Thumb2 C: "OP",134718736,125830480, "Lcl Translation" ;AnimCurveNode::R, Model::R_Thumb2 C: "OP",134719472,125830480, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Thumb2 C: "OP",129431456,125830480, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Thumb2 C: "OP",129427776,125830480, "Visibility" ;AnimCurveNode::liw, Model::R_Thumb2 C: "OP",129427408,125830480, "liw" ;NodeAttribute::, Model::R_Thumb3 C: "OO",125982608,125872240 ;AnimCurveNode::T, Model::R_Thumb3 C: "OP",129427040,125872240, "Lcl Translation" ;AnimCurveNode::R, Model::R_Thumb3 C: "OP",129425568,125872240, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Thumb3 C: "OP",129429984,125872240, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Thumb3 C: "OP",129426672,125872240, "Visibility" ;AnimCurveNode::liw, Model::R_Thumb3 C: "OP",129428880,125872240, "liw" ;NodeAttribute::, Model::R_Index1 C: "OO",125981552,125888480 ;Model::R_Index2, Model::R_Index1 C: "OO",125862960,125888480 ;AnimCurveNode::T, Model::R_Index1 C: "OP",129431088,125888480, "Lcl Translation" ;AnimCurveNode::R, Model::R_Index1 C: "OP",129431824,125888480, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Index1 C: "OP",129432192,125888480, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Index1 C: "OP",129425936,125888480, "Visibility" ;AnimCurveNode::liw, Model::R_Index1 C: "OP",129429616,125888480, "liw" ;NodeAttribute::, Model::R_Index2 C: "OO",125986128,125862960 ;Model::R_Index3, Model::R_Index2 C: "OO",125879200,125862960 ;AnimCurveNode::T, Model::R_Index2 C: "OP",129428144,125862960, "Lcl Translation" ;AnimCurveNode::R, Model::R_Index2 C: "OP",129426304,125862960, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Index2 C: "OP",129432560,125862960, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Index2 C: "OP",129433296,125862960, "Visibility" ;AnimCurveNode::liw, Model::R_Index2 C: "OP",129432928,125862960, "liw" ;NodeAttribute::, Model::R_Index3 C: "OO",125989296,125879200 ;AnimCurveNode::T, Model::R_Index3 C: "OP",129430720,125879200, "Lcl Translation" ;AnimCurveNode::R, Model::R_Index3 C: "OP",129428512,125879200, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Index3 C: "OP",129429248,125879200, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Index3 C: "OP",129430352,125879200, "Visibility" ;AnimCurveNode::liw, Model::R_Index3 C: "OP",129504128,125879200, "liw" ;NodeAttribute::, Model::R_Middle1 C: "OO",125982960,125886160 ;Model::R_Middle2, Model::R_Middle1 C: "OO",125869920,125886160 ;AnimCurveNode::T, Model::R_Middle1 C: "OP",129501552,125886160, "Lcl Translation" ;AnimCurveNode::R, Model::R_Middle1 C: "OP",129500080,125886160, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Middle1 C: "OP",129504864,125886160, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Middle1 C: "OP",129503392,125886160, "Visibility" ;AnimCurveNode::liw, Model::R_Middle1 C: "OP",129500448,125886160, "liw" ;NodeAttribute::, Model::R_Middle2 C: "OO",125988240,125869920 ;Model::R_Middle3, Model::R_Middle2 C: "OO",125860640,125869920 ;AnimCurveNode::T, Model::R_Middle2 C: "OP",129501920,125869920, "Lcl Translation" ;AnimCurveNode::R, Model::R_Middle2 C: "OP",129503760,125869920, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Middle2 C: "OP",129504496,125869920, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Middle2 C: "OP",129501184,125869920, "Visibility" ;AnimCurveNode::liw, Model::R_Middle2 C: "OP",129499344,125869920, "liw" ;NodeAttribute::, Model::R_Middle3 C: "OO",125983312,125860640 ;AnimCurveNode::T, Model::R_Middle3 C: "OP",129506336,125860640, "Lcl Translation" ;AnimCurveNode::R, Model::R_Middle3 C: "OP",129502288,125860640, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Middle3 C: "OP",129502656,125860640, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Middle3 C: "OP",129500816,125860640, "Visibility" ;AnimCurveNode::liw, Model::R_Middle3 C: "OP",129507072,125860640, "liw" ;NodeAttribute::, Model::R_Ring1 C: "OO",125983664,125874560 ;Model::R_Ring2, Model::R_Ring1 C: "OO",125865280,125874560 ;AnimCurveNode::T, Model::R_Ring1 C: "OP",129505232,125874560, "Lcl Translation" ;AnimCurveNode::R, Model::R_Ring1 C: "OP",129505600,125874560, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Ring1 C: "OP",129505968,125874560, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Ring1 C: "OP",129506704,125874560, "Visibility" ;AnimCurveNode::liw, Model::R_Ring1 C: "OP",129503024,125874560, "liw" ;NodeAttribute::, Model::R_Ring2 C: "OO",125985072,125865280 ;Model::R_Ring3, Model::R_Ring2 C: "OO",125867600,125865280 ;AnimCurveNode::T, Model::R_Ring2 C: "OP",129499712,125865280, "Lcl Translation" ;AnimCurveNode::R, Model::R_Ring2 C: "OP",129593952,125865280, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Ring2 C: "OP",129589536,125865280, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Ring2 C: "OP",129591008,125865280, "Visibility" ;AnimCurveNode::liw, Model::R_Ring2 C: "OP",129596528,125865280, "liw" ;NodeAttribute::, Model::R_Ring3 C: "OO",125987184,125867600 ;AnimCurveNode::T, Model::R_Ring3 C: "OP",129590272,125867600, "Lcl Translation" ;AnimCurveNode::R, Model::R_Ring3 C: "OP",129604992,125867600, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Ring3 C: "OP",129594688,125867600, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Ring3 C: "OP",129596160,125867600, "Visibility" ;AnimCurveNode::liw, Model::R_Ring3 C: "OP",129595056,125867600, "liw" ;NodeAttribute::, Model::R_Pinky1 C: "OO",125981904,125876880 ;Model::R_Pinky2, Model::R_Pinky1 C: "OO",125881520,125876880 ;AnimCurveNode::T, Model::R_Pinky1 C: "OP",129590640,125876880, "Lcl Translation" ;AnimCurveNode::R, Model::R_Pinky1 C: "OP",129599840,125876880, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Pinky1 C: "OP",129597264,125876880, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Pinky1 C: "OP",129595424,125876880, "Visibility" ;AnimCurveNode::liw, Model::R_Pinky1 C: "OP",129603888,125876880, "liw" ;NodeAttribute::, Model::R_Pinky2 C: "OO",125985424,125881520 ;Model::R_Pinky3, Model::R_Pinky2 C: "OO",125883840,125881520 ;AnimCurveNode::T, Model::R_Pinky2 C: "OP",129597632,125881520, "Lcl Translation" ;AnimCurveNode::R, Model::R_Pinky2 C: "OP",129598368,125881520, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Pinky2 C: "OP",129593216,125881520, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Pinky2 C: "OP",129591376,125881520, "Visibility" ;AnimCurveNode::liw, Model::R_Pinky2 C: "OP",129591744,125881520, "liw" ;NodeAttribute::, Model::R_Pinky3 C: "OO",125987536,125883840 ;AnimCurveNode::T, Model::R_Pinky3 C: "OP",129600576,125883840, "Lcl Translation" ;AnimCurveNode::R, Model::R_Pinky3 C: "OP",129594320,125883840, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Pinky3 C: "OP",129592848,125883840, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Pinky3 C: "OP",129589904,125883840, "Visibility" ;AnimCurveNode::liw, Model::R_Pinky3 C: "OP",129598000,125883840, "liw" ;NodeAttribute::, Model::L_Thigh1 C: "OO",126063936,126220272 ;Model::L_Knee2, Model::L_Thigh1 C: "OO",126222592,126220272 ;AnimCurveNode::T, Model::L_Thigh1 C: "OP",129601312,126220272, "Lcl Translation" ;AnimCurveNode::R, Model::L_Thigh1 C: "OP",129603152,126220272, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Thigh1 C: "OP",129605360,126220272, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Thigh1 C: "OP",129598736,126220272, "Visibility" ;AnimCurveNode::liw, Model::L_Thigh1 C: "OP",129602416,126220272, "liw" ;NodeAttribute::, Model::L_Knee2 C: "OO",126064992,126222592 ;Model::L_Ankle1, Model::L_Knee2 C: "OO",126194752,126222592 ;AnimCurveNode::T, Model::L_Knee2 C: "OP",129595792,126222592, "Lcl Translation" ;AnimCurveNode::R, Model::L_Knee2 C: "OP",129596896,126222592, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Knee2 C: "OP",129592112,126222592, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Knee2 C: "OP",129599104,126222592, "Visibility" ;AnimCurveNode::liw, Model::L_Knee2 C: "OP",129600944,126222592, "liw" ;NodeAttribute::, Model::L_Ankle1 C: "OO",126066048,126194752 ;Model::L_Ball, Model::L_Ankle1 C: "OO",126197072,126194752 ;AnimCurveNode::T, Model::L_Ankle1 C: "OP",129604624,126194752, "Lcl Translation" ;AnimCurveNode::R, Model::L_Ankle1 C: "OP",129593584,126194752, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Ankle1 C: "OP",129599472,126194752, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Ankle1 C: "OP",129592480,126194752, "Visibility" ;AnimCurveNode::liw, Model::L_Ankle1 C: "OP",129600208,126194752, "liw" ;NodeAttribute::, Model::L_Ball C: "OO",126071328,126197072 ;AnimCurveNode::T, Model::L_Ball C: "OP",129601680,126197072, "Lcl Translation" ;AnimCurveNode::R, Model::L_Ball C: "OP",129602048,126197072, "Lcl Rotation" ;AnimCurveNode::S, Model::L_Ball C: "OP",129602784,126197072, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::L_Ball C: "OP",129603520,126197072, "Visibility" ;AnimCurveNode::liw, Model::L_Ball C: "OP",129604256,126197072, "liw" ;NodeAttribute::, Model::R_Thigh C: "OO",126070976,126227232 ;Model::R_Knee, Model::R_Thigh C: "OO",126224912,126227232 ;AnimCurveNode::T, Model::R_Thigh C: "OP",129681488,126227232, "Lcl Translation" ;AnimCurveNode::R, Model::R_Thigh C: "OP",129686272,126227232, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Thigh C: "OP",129676704,126227232, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Thigh C: "OP",129678544,126227232, "Visibility" ;AnimCurveNode::liw, Model::R_Thigh C: "OP",129677808,126227232, "liw" ;NodeAttribute::, Model::R_Knee C: "OO",126069920,126224912 ;Model::R_Ankle, Model::R_Knee C: "OO",126229552,126224912 ;AnimCurveNode::T, Model::R_Knee C: "OP",129682960,126224912, "Lcl Translation" ;AnimCurveNode::R, Model::R_Knee C: "OP",129683328,126224912, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Knee C: "OP",129682592,126224912, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Knee C: "OP",129679280,126224912, "Visibility" ;AnimCurveNode::liw, Model::R_Knee C: "OP",129687376,126224912, "liw" ;NodeAttribute::, Model::R_Ankle C: "OO",126067104,126229552 ;Model::R_Ball, Model::R_Ankle C: "OO",126199392,126229552 ;AnimCurveNode::T, Model::R_Ankle C: "OP",129678912,126229552, "Lcl Translation" ;AnimCurveNode::R, Model::R_Ankle C: "OP",129674864,126229552, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Ankle C: "OP",129673392,126229552, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Ankle C: "OP",129685904,126229552, "Visibility" ;AnimCurveNode::liw, Model::R_Ankle C: "OP",129681856,126229552, "liw" ;NodeAttribute::, Model::R_Ball C: "OO",126065344,126199392 ;AnimCurveNode::T, Model::R_Ball C: "OP",129675232,126199392, "Lcl Translation" ;AnimCurveNode::R, Model::R_Ball C: "OP",129686640,126199392, "Lcl Rotation" ;AnimCurveNode::S, Model::R_Ball C: "OP",129681120,126199392, "Lcl Scaling" ;AnimCurveNode::Visibility, Model::R_Ball C: "OP",129680752,126199392, "Visibility" ;AnimCurveNode::liw, Model::R_Ball C: "OP",129684432,126199392, "liw" ;Geometry::, Model::him C: "OO",125738640,126231872 ;Material::character_anim:headM, Model::him C: "OO",136657872,126231872 ;Material::character_anim:jacketM, Model::him C: "OO",136655312,126231872 ;Material::character_anim:pantsM, Model::him C: "OO",136658512,126231872 ;Material::character_anim:upBodyM, Model::him C: "OO",136657232,126231872 ;Material::character_anim:eyeBallM, Model::him C: "OO",136651472,126231872 ;Deformer::Skin_him, Geometry:: C: "OO",125204720,125738640 ;Video::character_anim:file2, Texture::character_anim:file2 C: "OO",125241152,133131328 ;Video::character_anim:file1, Texture::character_anim:file1 C: "OO",125241792,133273888 ;Video::character_anim:file6, Texture::character_anim:file6 C: "OO",126003728,133274640 ;Video::character_anim:file8, Texture::character_anim:file8 C: "OO",126004368,133302528 ;Video::character_anim:file13, Texture::character_anim:file13 C: "OO",126005008,133303280 ;Video::character_anim:soldier_bindPose:file9, Texture::character_anim:soldier_bindPose:file9 C: "OO",126003088,125298944 ;Video::character_anim:file10, Texture::character_anim:file10 C: "OO",125999248,125299696 ;Video::character_anim:file12, Texture::character_anim:file12 C: "OO",125997968,125235136 ;Video::character_anim:file11, Texture::character_anim:file11 C: "OO",126002448,125235888 ;Video::character_anim:file15, Texture::character_anim:file15 C: "OO",125998608,125236640 ;Video::character_anim:file3, Texture::character_anim:file3 C: "OO",125999888,125237392 ;Video::character_anim:file4, Texture::character_anim:file4 C: "OO",126000528,125238144 ;Video::character_anim:file7, Texture::character_anim:file7 C: "OO",126001168,125238896 ;Video::character_anim:file5, Texture::character_anim:file5 C: "OO",126001808,125239648 ;Video::character_anim:file14, Texture::character_anim:file14 C: "OO",136659152,125240400 ;SubDeformer::Cluster_Root, Deformer::Skin_him C: "OO",126006096,125204720 ;SubDeformer::Cluster_Pelvis, Deformer::Skin_him C: "OO",137709552,125204720 ;SubDeformer::Cluster_Spine, Deformer::Skin_him C: "OO",137711792,125204720 ;SubDeformer::Cluster_Spine1, Deformer::Skin_him C: "OO",137712928,125204720 ;SubDeformer::Cluster_L_Thigh1, Deformer::Skin_him C: "OO",137714064,125204720 ;SubDeformer::Cluster_R_Thigh, Deformer::Skin_him C: "OO",136812048,125204720 ;SubDeformer::Cluster_Spine2, Deformer::Skin_him C: "OO",132111264,125204720 ;SubDeformer::Cluster_L_Knee2, Deformer::Skin_him C: "OO",126300080,125204720 ;SubDeformer::Cluster_R_Knee, Deformer::Skin_him C: "OO",136865392,125204720 ;SubDeformer::Cluster_Spine3, Deformer::Skin_him C: "OO",136866528,125204720 ;SubDeformer::Cluster_L_Ankle1, Deformer::Skin_him C: "OO",136817552,125204720 ;SubDeformer::Cluster_R_Ankle, Deformer::Skin_him C: "OO",135182880,125204720 ;SubDeformer::Cluster_Neck, Deformer::Skin_him C: "OO",135195936,125204720 ;SubDeformer::Cluster_L_Ball, Deformer::Skin_him C: "OO",135197072,125204720 ;SubDeformer::Cluster_R_Ball, Deformer::Skin_him C: "OO",135198208,125204720 ;SubDeformer::Cluster_Head, Deformer::Skin_him C: "OO",135199344,125204720 ;SubDeformer::Cluster_L_Clavicle, Deformer::Skin_him C: "OO",133256192,125204720 ;SubDeformer::Cluster_R_Clavicle, Deformer::Skin_him C: "OO",135120544,125204720 ;SubDeformer::Cluster_L_eye_joint1, Deformer::Skin_him C: "OO",135111200,125204720 ;SubDeformer::Cluster_R_eye_joint, Deformer::Skin_him C: "OO",135115872,125204720 ;SubDeformer::Cluster_L_eyeBall_joint2, Deformer::Skin_him C: "OO",135112368,125204720 ;SubDeformer::Cluster_R_eyeBall_joint, Deformer::Skin_him C: "OO",135114704,125204720 ;SubDeformer::Cluster_L_UpperArm, Deformer::Skin_him C: "OO",135117040,125204720 ;SubDeformer::Cluster_R_UpperArm, Deformer::Skin_him C: "OO",135118208,125204720 ;SubDeformer::Cluster_L_Forearm, Deformer::Skin_him C: "OO",135119376,125204720 ;SubDeformer::Cluster_R_Forearm, Deformer::Skin_him C: "OO",135107696,125204720 ;SubDeformer::Cluster_L_Hand, Deformer::Skin_him C: "OO",135113536,125204720 ;SubDeformer::Cluster_R_Hand, Deformer::Skin_him C: "OO",135106528,125204720 ;SubDeformer::Cluster_L_Thumb1, Deformer::Skin_him C: "OO",135108864,125204720 ;SubDeformer::Cluster_L_Index1, Deformer::Skin_him C: "OO",135110032,125204720 ;SubDeformer::Cluster_L_Middle1, Deformer::Skin_him C: "OO",130835696,125204720 ;SubDeformer::Cluster_L_Ring1, Deformer::Skin_him C: "OO",130850880,125204720 ;SubDeformer::Cluster_L_Pinky1, Deformer::Skin_him C: "OO",130845040,125204720 ;SubDeformer::Cluster_R_Thumb1, Deformer::Skin_him C: "OO",130840368,125204720 ;SubDeformer::Cluster_R_Index1, Deformer::Skin_him C: "OO",130841536,125204720 ;SubDeformer::Cluster_R_Middle1, Deformer::Skin_him C: "OO",130863728,125204720 ;SubDeformer::Cluster_R_Ring1, Deformer::Skin_him C: "OO",130864896,125204720 ;SubDeformer::Cluster_R_Pinky1, Deformer::Skin_him C: "OO",130847376,125204720 ;SubDeformer::Cluster_L_Thumb2, Deformer::Skin_him C: "OO",130862560,125204720 ;SubDeformer::Cluster_L_Index2, Deformer::Skin_him C: "OO",130860224,125204720 ;SubDeformer::Cluster_L_Middle2, Deformer::Skin_him C: "OO",130834528,125204720 ;SubDeformer::Cluster_L_Ring2, Deformer::Skin_him C: "OO",130836864,125204720 ;SubDeformer::Cluster_L_Pinky2, Deformer::Skin_him C: "OO",130852048,125204720 ;SubDeformer::Cluster_R_Thumb2, Deformer::Skin_him C: "OO",130856720,125204720 ;SubDeformer::Cluster_R_Index2, Deformer::Skin_him C: "OO",130853216,125204720 ;SubDeformer::Cluster_R_Middle2, Deformer::Skin_him C: "OO",130839200,125204720 ;SubDeformer::Cluster_R_Ring2, Deformer::Skin_him C: "OO",130846208,125204720 ;SubDeformer::Cluster_R_Pinky2, Deformer::Skin_him C: "OO",130838032,125204720 ;SubDeformer::Cluster_L_Thumb3, Deformer::Skin_him C: "OO",130857888,125204720 ;SubDeformer::Cluster_L_Index3, Deformer::Skin_him C: "OO",130855552,125204720 ;SubDeformer::Cluster_L_Middle3, Deformer::Skin_him C: "OO",130842704,125204720 ;SubDeformer::Cluster_L_Ring3, Deformer::Skin_him C: "OO",130859056,125204720 ;SubDeformer::Cluster_L_Pinky3, Deformer::Skin_him C: "OO",130861392,125204720 ;SubDeformer::Cluster_R_Thumb3, Deformer::Skin_him C: "OO",130843872,125204720 ;SubDeformer::Cluster_R_Index3, Deformer::Skin_him C: "OO",130854384,125204720 ;SubDeformer::Cluster_R_Middle3, Deformer::Skin_him C: "OO",130848544,125204720 ;SubDeformer::Cluster_R_Ring3, Deformer::Skin_him C: "OO",130849712,125204720 ;SubDeformer::Cluster_R_Pinky3, Deformer::Skin_him C: "OO",130930640,125204720 ;Model::Root, SubDeformer::Cluster_Root C: "OO",125296688,126006096 ;Model::Pelvis, SubDeformer::Cluster_Pelvis C: "OO",125274112,137709552 ;Model::Spine, SubDeformer::Cluster_Spine C: "OO",125276368,137711792 ;Model::Spine1, SubDeformer::Cluster_Spine1 C: "OO",125278624,137712928 ;Model::L_Thigh1, SubDeformer::Cluster_L_Thigh1 C: "OO",126220272,137714064 ;Model::R_Thigh, SubDeformer::Cluster_R_Thigh C: "OO",126227232,136812048 ;Model::Spine2, SubDeformer::Cluster_Spine2 C: "OO",125280880,132111264 ;Model::L_Knee2, SubDeformer::Cluster_L_Knee2 C: "OO",126222592,126300080 ;Model::R_Knee, SubDeformer::Cluster_R_Knee C: "OO",126224912,136865392 ;Model::Spine3, SubDeformer::Cluster_Spine3 C: "OO",125692096,136866528 ;Model::L_Ankle1, SubDeformer::Cluster_L_Ankle1 C: "OO",126194752,136817552 ;Model::R_Ankle, SubDeformer::Cluster_R_Ankle C: "OO",126229552,135182880 ;Model::Neck, SubDeformer::Cluster_Neck C: "OO",125694352,135195936 ;Model::L_Ball, SubDeformer::Cluster_L_Ball C: "OO",126197072,135197072 ;Model::R_Ball, SubDeformer::Cluster_R_Ball C: "OO",126199392,135198208 ;Model::Head, SubDeformer::Cluster_Head C: "OO",125673632,135199344 ;Model::L_Clavicle, SubDeformer::Cluster_L_Clavicle C: "OO",125724528,133256192 ;Model::R_Clavicle, SubDeformer::Cluster_R_Clavicle C: "OO",125842080,135120544 ;Model::L_eye_joint1, SubDeformer::Cluster_L_eye_joint1 C: "OO",125726848,135111200 ;Model::R_eye_joint, SubDeformer::Cluster_R_eye_joint C: "OO",125715248,135115872 ;Model::L_eyeBall_joint2, SubDeformer::Cluster_L_eyeBall_joint2 C: "OO",125722208,135112368 ;Model::R_eyeBall_joint, SubDeformer::Cluster_R_eyeBall_joint C: "OO",125703648,135114704 ;Model::L_UpperArm, SubDeformer::Cluster_L_UpperArm C: "OO",125705968,135117040 ;Model::R_UpperArm, SubDeformer::Cluster_R_UpperArm C: "OO",125846720,135118208 ;Model::L_Forearm, SubDeformer::Cluster_L_Forearm C: "OO",125710608,135119376 ;Model::R_Forearm, SubDeformer::Cluster_R_Forearm C: "OO",125832800,135107696 ;Model::L_Hand, SubDeformer::Cluster_L_Hand C: "OO",125708288,135113536 ;Model::R_Hand, SubDeformer::Cluster_R_Hand C: "OO",125825840,135106528 ;Model::L_Thumb1, SubDeformer::Cluster_L_Thumb1 C: "OO",125712928,135108864 ;Model::L_Index1, SubDeformer::Cluster_L_Index1 C: "OO",125719888,135110032 ;Model::L_Middle1, SubDeformer::Cluster_L_Middle1 C: "OO",125835120,130835696 ;Model::L_Ring1, SubDeformer::Cluster_L_Ring1 C: "OO",125844400,130850880 ;Model::L_Pinky1, SubDeformer::Cluster_L_Pinky1 C: "OO",125828160,130845040 ;Model::R_Thumb1, SubDeformer::Cluster_R_Thumb1 C: "OO",125858320,130840368 ;Model::R_Index1, SubDeformer::Cluster_R_Index1 C: "OO",125888480,130841536 ;Model::R_Middle1, SubDeformer::Cluster_R_Middle1 C: "OO",125886160,130863728 ;Model::R_Ring1, SubDeformer::Cluster_R_Ring1 C: "OO",125874560,130864896 ;Model::R_Pinky1, SubDeformer::Cluster_R_Pinky1 C: "OO",125876880,130847376 ;Model::L_Thumb2, SubDeformer::Cluster_L_Thumb2 C: "OO",125717568,130862560 ;Model::L_Index2, SubDeformer::Cluster_L_Index2 C: "OO",125699008,130860224 ;Model::L_Middle2, SubDeformer::Cluster_L_Middle2 C: "OO",125839760,130834528 ;Model::L_Ring2, SubDeformer::Cluster_L_Ring2 C: "OO",125837440,130836864 ;Model::L_Pinky2, SubDeformer::Cluster_L_Pinky2 C: "OO",125856000,130852048 ;Model::R_Thumb2, SubDeformer::Cluster_R_Thumb2 C: "OO",125830480,130856720 ;Model::R_Index2, SubDeformer::Cluster_R_Index2 C: "OO",125862960,130853216 ;Model::R_Middle2, SubDeformer::Cluster_R_Middle2 C: "OO",125869920,130839200 ;Model::R_Ring2, SubDeformer::Cluster_R_Ring2 C: "OO",125865280,130846208 ;Model::R_Pinky2, SubDeformer::Cluster_R_Pinky2 C: "OO",125881520,130838032 ;Model::L_Thumb3, SubDeformer::Cluster_L_Thumb3 C: "OO",125696688,130857888 ;Model::L_Index3, SubDeformer::Cluster_L_Index3 C: "OO",125701328,130855552 ;Model::L_Middle3, SubDeformer::Cluster_L_Middle3 C: "OO",125851360,130842704 ;Model::L_Ring3, SubDeformer::Cluster_L_Ring3 C: "OO",125853680,130859056 ;Model::L_Pinky3, SubDeformer::Cluster_L_Pinky3 C: "OO",125849040,130861392 ;Model::R_Thumb3, SubDeformer::Cluster_R_Thumb3 C: "OO",125872240,130843872 ;Model::R_Index3, SubDeformer::Cluster_R_Index3 C: "OO",125879200,130854384 ;Model::R_Middle3, SubDeformer::Cluster_R_Middle3 C: "OO",125860640,130848544 ;Model::R_Ring3, SubDeformer::Cluster_R_Ring3 C: "OO",125867600,130849712 ;Model::R_Pinky3, SubDeformer::Cluster_R_Pinky3 C: "OO",125883840,130930640 ;AnimLayer::Layer0, AnimStack::Take 001 C: "OO",125203168,130965184 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",125161664,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",130891072,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",125193872,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",125194240,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",125675888,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",125676256,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",125676624,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",130892928,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",125160992,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",130893296,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",136827728,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",136826992,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",136829568,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",136827360,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",136829936,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",136828096,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",136828464,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",136828832,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",136829200,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",136830304,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",137457504,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",137456400,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",137455296,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",137458976,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",137455664,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",137457872,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",137458240,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",137456032,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",137454560,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",137458608,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",137460816,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",137453824,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",137459344,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",137459712,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",137456768,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",137461184,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",137460080,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",137454192,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",137454928,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",137460448,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",137457136,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",137461552,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131342512,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131344352,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131343984,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131344720,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131350240,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131345088,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131345824,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131348032,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131345456,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131347664,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131348768,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131346192,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131343248,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131346560,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131346928,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131347296,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131348400,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131349136,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131349504,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131349872,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131342880,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131343616,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131428944,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131428576,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131428208,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131431152,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131430416,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131426000,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131425264,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131430784,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131427104,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131427840,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131429312,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131429680,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131424528,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131427472,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131431520,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131426736,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131431888,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131430048,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131432256,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131425632,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131424896,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131426368,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",136845648,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",136844176,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",136846752,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",136846016,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",136843808,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",136844544,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",136846384,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",136843440,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",136844912,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",136845280,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131533328,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131531120,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131532224,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131532592,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131531488,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131534064,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131535536,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131532960,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131531856,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131533696,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131534432,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131536272,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131538112,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131535904,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131534800,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131536640,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131537008,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",131535168,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",131537376,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",131537744,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",131538480,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",131538848,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134646400,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134640512,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134644928,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134640880,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134647504,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134639776,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134643088,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134641248,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134645296,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134646768,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134644192,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134641616,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134641984,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134640144,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134645664,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134647136,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134642352,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134643456,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134646032,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134642720,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134643824,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134644560,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134718368,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134720576,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134715056,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134713952,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134720208,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134720944,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134719840,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134713584,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134721312,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134714320,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134716160,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134714688,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134716528,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134716896,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134719104,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134715424,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134715792,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",134717264,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",134717632,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",134718000,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",134718736,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",134719472,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129431456,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129427776,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129427408,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129427040,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129425568,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129429984,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129426672,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129428880,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129431088,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129431824,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129432192,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129425936,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129429616,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129428144,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129426304,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129432560,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129433296,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129432928,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129430720,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129428512,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129429248,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129430352,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129504128,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129501552,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129500080,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129504864,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129503392,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129500448,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129501920,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129503760,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129504496,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129501184,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129499344,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129506336,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129502288,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129502656,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129500816,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129507072,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129505232,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129505600,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129505968,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129506704,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129503024,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129499712,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129593952,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129589536,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129591008,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129596528,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129590272,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129604992,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129594688,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129596160,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129595056,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129590640,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129599840,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129597264,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129595424,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129603888,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129597632,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129598368,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129593216,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129591376,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129591744,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129600576,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129594320,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129592848,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129589904,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129598000,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129601312,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129603152,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129605360,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129598736,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129602416,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129595792,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129596896,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129592112,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129599104,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129600944,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129604624,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129593584,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129599472,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129592480,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129600208,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129601680,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129602048,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129602784,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129603520,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129604256,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129681488,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129686272,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129676704,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129678544,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129677808,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129682960,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129683328,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129682592,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129679280,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129687376,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129678912,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129674864,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129673392,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129685904,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129681856,125203168 ;AnimCurveNode::T, AnimLayer::Layer0 C: "OO",129675232,125203168 ;AnimCurveNode::R, AnimLayer::Layer0 C: "OO",129686640,125203168 ;AnimCurveNode::S, AnimLayer::Layer0 C: "OO",129681120,125203168 ;AnimCurveNode::Visibility, AnimLayer::Layer0 C: "OO",129680752,125203168 ;AnimCurveNode::liw, AnimLayer::Layer0 C: "OO",129684432,125203168 ;AnimCurve::, AnimCurveNode::T C: "OP",130891648,125161664, "d|X" ;AnimCurve::, AnimCurveNode::T C: "OP",130891968,125161664, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",130892288,125161664, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",125192912,130891072, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",125193232,130891072, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",125193552,130891072, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",125677184,125676624, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",125677504,125676624, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",130892608,125676624, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",130894000,136826992, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",130894320,136826992, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",130894640,136826992, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",130894960,136828464, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",130895280,136828464, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136839328,136828464, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136839648,137456400, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136840288,137456400, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136842528,137456400, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136841888,137458240, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136839968,137458240, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136840928,137458240, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136841248,137453824, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136842208,137460080, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136840608,137461552, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136841568,137461552, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136842848,137461552, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131385744,131350240, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131387024,131350240, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131389904,131350240, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131390864,131345456, "d|X" ;AnimCurve::, AnimCurveNode::T C: "OP",131389264,131345456, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131390224,131345456, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131389584,131347664, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131388944,131347664, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131387344,131347664, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131384784,131346928, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131387664,131346928, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131390544,131346928, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131391184,131349872, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131386064,131349872, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131385424,131349872, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131387984,131428208, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131383504,131428208, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131388304,131428208, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131383824,131425264, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131384144,131425264, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131388624,131430784, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131385104,131430784, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131384464,131430784, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131386384,131429680, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131386704,131429680, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131452656,131424528, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131450416,131424528, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131452336,131424528, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131453616,131430048, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131455536,131430048, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131451696,131430048, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131450736,131426368, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131453296,131426368, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131449136,136845648, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131449776,136845648, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131449456,136845648, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131450096,136843808, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131454896,136843808, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131452016,136844544, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131452976,136844544, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131451056,136844544, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131453936,136845280, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131451376,131533328, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131455856,131533328, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131454256,131533328, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",131454576,131531488, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",131455216,131531488, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",131456176,131534064, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",131456496,131534064, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",131456816,131534064, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134599744,131533696, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134603584,131533696, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134600064,131534432, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134602624,131534432, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134598784,131534432, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134600384,131536640, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134600704,131536640, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134604224,131536640, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134601024,131537744, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134601984,131537744, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134604544,131538480, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134605824,131538480, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134603904,131538480, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134602944,134644928, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134606144,134644928, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134599104,134640880, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134603264,134640880, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134601344,134640880, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134599424,134645296, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134601664,134645296, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134602304,134645296, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134604864,134641984, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134605184,134641984, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134605504,134640144, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134606464,134640144, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134711456,134640144, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134712736,134643456, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134710176,134643456, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134712416,134646032, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134707296,134646032, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134710816,134646032, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134708896,134718368, "d|X" ;AnimCurve::, AnimCurveNode::T C: "OP",134705376,134718368, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134710496,134718368, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134709536,134720576, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134711136,134720576, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134711776,134720576, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134713056,134720944, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134712096,134720944, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134705696,134719840, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134706016,134719840, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134709856,134719840, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",134706336,134716160, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",134706656,134716160, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134706976,134714688, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134707936,134714688, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134707616,134714688, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",134708256,134715792, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",134708576,134715792, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",134709216,134715792, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",136834944,134718736, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",136836224,134718736, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136831104,134719472, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136832704,134719472, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136835904,134719472, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",136831424,129427040, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",136833344,129427040, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136838784,129425568, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136837184,129425568, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136835584,129425568, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136833024,129431824, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136833664,129431824, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136831744,129431824, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",136837824,129428144, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",136834304,129428144, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136835264,129426304, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136833984,129426304, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136836544,129426304, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",136836864,129430720, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",136832064,129430720, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",136837504,129428512, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",136834624,129428512, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136838464,129428512, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",136838144,129501552, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",136832384,129500080, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129519280,129500080, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129523120,129500080, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129518320,129501920, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129516400,129501920, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129518000,129503760, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129523440,129503760, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129520560,129503760, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129518640,129506336, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129515760,129506336, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129516080,129502288, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129517040,129502288, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129518960,129502288, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129521200,129505600, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129519600,129505600, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129519920,129505600, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129516720,129499712, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129517360,129499712, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129517680,129593952, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129520880,129593952, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129522160,129593952, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129520240,129590272, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129521520,129590272, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129521840,129604992, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129522480,129604992, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129522800,129604992, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129622992,129599840, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129623312,129599840, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129624912,129599840, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129627472,129597632, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129629712,129597632, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129627152,129598368, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129629392,129598368, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129627792,129598368, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129622672,129600576, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129628112,129600576, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129628432,129594320, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129623632,129594320, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129625872,129594320, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129626512,129603152, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129622352,129603152, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129626192,129603152, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129625552,129595792, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129630032,129595792, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129626832,129596896, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129628752,129596896, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129625232,129596896, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129624592,129604624, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129623952,129604624, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129629072,129593584, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129624272,129593584, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129666224,129593584, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129666544,129601680, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129663664,129686272, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129669104,129686272, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129663984,129686272, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129669744,129682960, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129666864,129682960, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129665904,129683328, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129665584,129683328, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129664304,129683328, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129667184,129678912, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129668784,129678912, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129667504,129674864, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129664624,129674864, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129670384,129674864, "d|Z" ;AnimCurve::, AnimCurveNode::T C: "OP",129664944,129675232, "d|X" ;AnimCurve::, AnimCurveNode::T C: "OP",129670704,129675232, "d|Y" ;AnimCurve::, AnimCurveNode::T C: "OP",129667824,129675232, "d|Z" ;AnimCurve::, AnimCurveNode::R C: "OP",129668144,129686640, "d|X" ;AnimCurve::, AnimCurveNode::R C: "OP",129668464,129686640, "d|Y" ;AnimCurve::, AnimCurveNode::R C: "OP",129665264,129686640, "d|Z" ;Texture::character_anim:file2, Material::character_anim:headM C: "OP",133131328,136657872, "DiffuseColor" ;Texture::character_anim:file3, Material::character_anim:headM C: "OP",125237392,136657872, "Bump" ;Texture::character_anim:soldier_bindPose:file9, Material::character_anim:headM C: "OP",125298944,136657872, "SpecularColor" ;Texture::character_anim:file1, Material::character_anim:jacketM C: "OP",133273888,136655312, "DiffuseColor" ;Texture::character_anim:file4, Material::character_anim:jacketM C: "OP",125238144,136655312, "Bump" ;Texture::character_anim:file10, Material::character_anim:jacketM C: "OP",125299696,136655312, "SpecularColor" ;Texture::character_anim:file6, Material::character_anim:pantsM C: "OP",133274640,136658512, "DiffuseColor" ;Texture::character_anim:file7, Material::character_anim:pantsM C: "OP",125238896,136658512, "Bump" ;Texture::character_anim:file12, Material::character_anim:pantsM C: "OP",125235136,136658512, "SpecularColor" ;Texture::character_anim:file8, Material::character_anim:upBodyM C: "OP",133302528,136657232, "DiffuseColor" ;Texture::character_anim:file5, Material::character_anim:upBodyM C: "OP",125239648,136657232, "Bump" ;Texture::character_anim:file11, Material::character_anim:upBodyM C: "OP",125235888,136657232, "SpecularColor" ;Texture::character_anim:file13, Material::character_anim:eyeBallM C: "OP",133303280,136651472, "DiffuseColor" ;Texture::character_anim:file14, Material::character_anim:eyeBallM C: "OP",125240400,136651472, "Bump" ;Texture::character_anim:file15, Material::character_anim:eyeBallM C: "OP",125236640,136651472, "SpecularColor" } ;Takes section ;---------------------------------------------------- Takes: { Current: "Take 001" Take: "Take 001" { FileName: "Take_001.tak" LocalTime: 1924423250,57732697500 ReferenceTime: 1924423250,57732697500 } } ================================================ FILE: Tests/Assets/Projects/BuildSimpleProject.csproj ================================================  Debug AnyCPU 8.0.30703 2.0 {1A3C19CC-557D-4009-82D6-92B511EA4172} WinExe Properties BuildSimpleProject BuildSimpleProject 512 DesktopGL v4.5 true bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ DEBUG;TRACE;LINUX full AnyCPU prompt false 4 bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ TRACE;LINUX true pdbonly AnyCPU prompt false 4 ================================================ FILE: Tests/Assets/Projects/Content/Content.mgcb ================================================ #----------------------------- Global Properties ----------------------------# /outputDir:bin/$(Platform) /intermediateDir:obj/$(Platform) /platform:DesktopGL /config: /profile:Reach /compress:False #-------------------------------- References --------------------------------# #---------------------------------- Content ---------------------------------# #begin ContentFont.spritefont /importer:FontDescriptionImporter /processor:FontDescriptionProcessor /processorParam:PremultiplyAlpha=True /processorParam:TextureFormat=Compressed /build:ContentFont.spritefont ================================================ FILE: Tests/Assets/Projects/Content/ContentFont.spritefont ================================================  Arial 12 0 true ~ ================================================ FILE: Tests/Assets/Xml/01_TheBasics.xml ================================================ Hello World 1 Shawn true Shawn true ================================================ FILE: Tests/Assets/Xml/02_Inheritance.xml ================================================ 23 world ================================================ FILE: Tests/Assets/Xml/03_IncludingPrivateMembers.xml ================================================ 23 ================================================ FILE: Tests/Assets/Xml/04_ExcludingPublicMembers.xml ================================================ 23 ================================================ FILE: Tests/Assets/Xml/04_ExcludingPublicMembersOutput.xml ================================================ ================================================ FILE: Tests/Assets/Xml/05_RenamingXmlElements.xml ================================================ world 23 80.2 true 32 32 ================================================ FILE: Tests/Assets/Xml/06_NullReferences.xml ================================================ ================================================ FILE: Tests/Assets/Xml/07_OptionalElements.xml ================================================ CullClockwiseFace CullCounterClockwiseFace CullClockwiseFace ================================================ FILE: Tests/Assets/Xml/08_AllowNull.xml ================================================ ================================================ FILE: Tests/Assets/Xml/09_Collections.xml ================================================ Hello World This is a test 1 2 3 23 42 FF886542 FF916B46 FF917B46 FF886543 ================================================ FILE: Tests/Assets/Xml/10_CollectionItemName.xml ================================================ Hello World ================================================ FILE: Tests/Assets/Xml/11_Dictionaries.xml ================================================ 23 true 42 false ================================================ FILE: Tests/Assets/Xml/12_MathTypes.xml ================================================ 1 2 1 2 3 4 1 2 1 2 3.1 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 FF6495ED 0 0 1 1 1 7 1 9 1 10 ================================================ FILE: Tests/Assets/Xml/13_PolymorphicTypes.xml ================================================ World 23 true true true true true true 1 4 6 1 true 5 false ================================================ FILE: Tests/Assets/Xml/14_Namespaces.xml ================================================ true 0 0 Immediate true true true true ================================================ FILE: Tests/Assets/Xml/15_FlattenContent.xml ================================================ Shawn true Hello World ================================================ FILE: Tests/Assets/Xml/16_SharedResources.xml ================================================ #Resource1 #Resource2 #Resource3 1 #Resource4 #Resource3 #Resource2 2 #Resource5 3 #Resource1 ================================================ FILE: Tests/Assets/Xml/17_ExternalReferences.xml ================================================ #External1 #External1 #External2 grass.tga foliage.fx ================================================ FILE: Tests/Assets/Xml/18_PrimitiveTypes.xml ================================================ A ° Δ 127 -127 -1000 1000 -100000 100000 -10000000 10000000 1234567 1234567890 B ================================================ FILE: Tests/Assets/Xml/19_FontDescription.xml ================================================  Foo 30 0.75 true * ~ ° ° Δ Δ item0 item1 item2 ================================================ FILE: Tests/Assets/Xml/20_SystemTypes.xml ================================================  PT42.5S ================================================ FILE: Tests/Assets/Xml/21_CustomFormatting.xml ================================================  1 0 4 0 6 0 7 0 0 100 100 ================================================ FILE: Tests/Assets/Xml/22_GetterOnlyProperties.xml ================================================  1 2 3 1 Foo 5 Bar 42 ================================================ FILE: Tests/Assets/Xml/23_GetterOnlyPolymorphicArrayProperties.xml ================================================  42 ================================================ FILE: Tests/Assets/Xml/24_GenericTypes.xml ================================================  3 4.2 5 ================================================ FILE: Tests/Assets/Xml/25_StructArrayNoElements.xml ================================================ ================================================ FILE: Tests/Assets/Xml/26_ChildCollections.xml ================================================ Foo Bar ================================================ FILE: Tests/Assets/Xml/27_Colors.xml ================================================  FFFFFFFF FF000000 00000000 FFFF0000 FF008000 FF0000FF ================================================ FILE: Tests/Assets/Xml/28_XnaCurve.xml ================================================  Constant Constant 0 1 0 0 Smooth 0.5 0.5 0 0 Smooth ================================================ FILE: Tests/Assets/tests.xsl ================================================ <!DOCTYPE html> <xsl:value-of select="$tests.root/@name" />
passed-progress ignored-progress failed-progress
Failed tests:
Ignored tests:
img javascript:toggleDiv('img', 'divDetails');
divDetails
passed-progress ignored-progress failed-progress
imgTestCase_ javascript:toggleDiv('imgTestCase_ ', 'divTest_ ');
(/)
divTest_
section-oddrow
                            
                        
. .
width: %  
================================================ FILE: Tests/Components/Colored3DCubeComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class Colored3DCubeComponent { GraphicsDevice graphicsDevice; BasicEffect basicEffect; Matrix worldMatrix, viewMatrix, projectionMatrix; public Vector3 CubePosition { get; set; } public Colored3DCubeComponent(GraphicsDevice gd) { graphicsDevice = gd; } public void LoadContent() { // setup our graphics scene matrices worldMatrix = Matrix.Identity; viewMatrix = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, graphicsDevice.Viewport.AspectRatio, 1, 10); worldMatrix *= Matrix.CreateRotationX(-0.05f * 30f); worldMatrix *= Matrix.CreateRotationY(-0.05f * 20f); worldMatrix *= Matrix.CreateTranslation(CubePosition); // Setup our basic effect basicEffect = new BasicEffect(graphicsDevice); basicEffect.World = worldMatrix; basicEffect.View = viewMatrix; basicEffect.Projection = projectionMatrix; basicEffect.VertexColorEnabled = true; CreateCubeVertexBuffer(); CreateCubeIndexBuffer(); } public void UnloadContent() { basicEffect.Dispose(); basicEffect = null; vertices.Dispose(); vertices = null; indices.Dispose(); indices = null; } public void Draw() { graphicsDevice.Clear(Color.CornflowerBlue); graphicsDevice.SetVertexBuffer(vertices); graphicsDevice.Indices = indices; //RasterizerState rasterizerState1 = new RasterizerState(); //rasterizerState1.CullMode = CullMode.None; //graphics.GraphicsDevice.RasterizerState = rasterizerState1; basicEffect.World = worldMatrix; foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) { pass.Apply(); graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, number_of_vertices, 0, number_of_indices / 3); } } const int number_of_vertices = 8; const int number_of_indices = 36; VertexBuffer vertices; void CreateCubeVertexBuffer() { VertexPositionColor[] cubeVertices = new VertexPositionColor[number_of_vertices]; cubeVertices[0].Position = new Vector3(-1, -1, -1); cubeVertices[1].Position = new Vector3(-1, -1, 1); cubeVertices[2].Position = new Vector3(1, -1, 1); cubeVertices[3].Position = new Vector3(1, -1, -1); cubeVertices[4].Position = new Vector3(-1, 1, -1); cubeVertices[5].Position = new Vector3(-1, 1, 1); cubeVertices[6].Position = new Vector3(1, 1, 1); cubeVertices[7].Position = new Vector3(1, 1, -1); cubeVertices[0].Color = Color.Black; cubeVertices[1].Color = Color.Red; cubeVertices[2].Color = Color.Yellow; cubeVertices[3].Color = Color.Green; cubeVertices[4].Color = Color.Blue; cubeVertices[5].Color = Color.Magenta; cubeVertices[6].Color = Color.White; cubeVertices[7].Color = Color.Cyan; vertices = new VertexBuffer(graphicsDevice, VertexPositionColor.VertexDeclaration, number_of_vertices, BufferUsage.WriteOnly); vertices.SetData(cubeVertices); } IndexBuffer indices; void CreateCubeIndexBuffer() { UInt16[] cubeIndices = new UInt16[number_of_indices]; //bottom face cubeIndices[0] = 0; cubeIndices[1] = 2; cubeIndices[2] = 3; cubeIndices[3] = 0; cubeIndices[4] = 1; cubeIndices[5] = 2; //top face cubeIndices[6] = 4; cubeIndices[7] = 6; cubeIndices[8] = 5; cubeIndices[9] = 4; cubeIndices[10] = 7; cubeIndices[11] = 6; //front face cubeIndices[12] = 5; cubeIndices[13] = 2; cubeIndices[14] = 1; cubeIndices[15] = 5; cubeIndices[16] = 6; cubeIndices[17] = 2; //back face cubeIndices[18] = 0; cubeIndices[19] = 7; cubeIndices[20] = 4; cubeIndices[21] = 0; cubeIndices[22] = 3; cubeIndices[23] = 7; //left face cubeIndices[24] = 0; cubeIndices[25] = 4; cubeIndices[26] = 1; cubeIndices[27] = 1; cubeIndices[28] = 4; cubeIndices[29] = 5; //right face cubeIndices[30] = 2; cubeIndices[31] = 6; cubeIndices[32] = 3; cubeIndices[33] = 3; cubeIndices[34] = 6; cubeIndices[35] = 7; indices = new IndexBuffer(graphicsDevice, IndexElementSize.SixteenBits, number_of_indices, BufferUsage.WriteOnly); indices.SetData(cubeIndices); } } } ================================================ FILE: Tests/Components/DrawFrameNumberComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class DrawFrameNumberComponent : DrawableGameComponent { private SpriteBatch _batch; private SpriteFont _font; public DrawFrameNumberComponent(Game game) : base(game) { } protected override void LoadContent() { _batch = new SpriteBatch(Game.GraphicsDevice); _font = Game.Content.Load(Paths.Font("Default")); } protected override void UnloadContent() { _batch.Dispose(); _batch = null; _font = null; } public override void Draw(GameTime gameTime) { var frameInfoSource = Game.Services.RequireService(); var frameInfo = frameInfoSource.FrameInfo; // TODO: Add support for different placements and colors. _batch.Begin(); _batch.DrawString(_font, frameInfo.DrawNumber.ToString(), Vector2.Zero, Color.White); _batch.End(); } } } ================================================ FILE: Tests/Components/FlexibleGameComponent.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Kni.Tests.Components { class FlexibleGameComponent : VisualTestDrawableGameComponent { public FlexibleGameComponent(Game game) : base(game) { } public Action InitializeAction { get; set; } public Action LoadContentAction { get; set; } public Action UnloadContentAction { get; set; } public Action UpdateAction { get; set; } public Action UpdateOncePerDrawAction { get; set; } public Action DrawAction { get; set; } private IFrameInfoSource _frameInfoSource; public override void Initialize() { _frameInfoSource = Game.Services.RequireService(); if (InitializeAction != null) InitializeAction(_frameInfoSource.FrameInfo); base.Initialize(); } protected override void LoadContent() { base.LoadContent(); if (LoadContentAction != null) LoadContentAction(_frameInfoSource.FrameInfo); } protected override void UnloadContent() { base.UnloadContent(); if (UnloadContentAction != null) UnloadContentAction(_frameInfoSource.FrameInfo); } public override void Update(GameTime gameTime) { base.Update(gameTime); if (UpdateAction != null) UpdateAction(_frameInfoSource.FrameInfo); } protected override void UpdateOncePerDraw(GameTime gameTime) { base.UpdateOncePerDraw(gameTime); if (UpdateOncePerDrawAction != null) UpdateOncePerDrawAction(_frameInfoSource.FrameInfo); } public override void Draw(GameTime gameTime) { base.Draw(gameTime); if (DrawAction != null) DrawAction(_frameInfoSource.FrameInfo); } } } ================================================ FILE: Tests/Components/ImplicitDrawOrderComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class ImplicitDrawOrderComponent : VisualTestDrawableGameComponent { private const int NumberOfBatches = 3; private const int ItemsPerBatch = 3; private int _batchNumber = 0; private List _drawables = new List(); private List _drawablesInDrawOrder = new List(); private bool _drawablesOrderedCorrectly; private SpriteBatch _spriteBatch; private SpriteFont _font; public ImplicitDrawOrderComponent(Game game) : base(game) { UpdateOrder = 100; DrawOrder = 100; } protected override void LoadContent() { base.LoadContent(); _spriteBatch = new SpriteBatch(GraphicsDevice); _font = Game.Content.Load(Paths.Font("Default")); } protected override void UnloadContent() { if (_spriteBatch != null) { _spriteBatch.Dispose(); _spriteBatch = null; } _font = null; base.UnloadContent(); } protected override void UpdateOncePerDraw(GameTime gameTime) { base.UpdateOncePerDraw(gameTime); if (_batchNumber < NumberOfBatches) { for (int i = 0; i < ItemsPerBatch; ++i) { var drawable = new TestDrawable(Game, this, _drawables.Count + 1); _drawables.Add(drawable); Game.Components.Add(drawable); } _batchNumber++; } } public override void Draw(GameTime gameTime) { base.Draw(gameTime); _drawablesOrderedCorrectly = ListsEqual(_drawables, _drawablesInDrawOrder); _drawablesInDrawOrder.Clear(); _spriteBatch.Begin(); DrawStatusString( string.Format("{0} drawables", _drawables.Count), 0, _drawablesOrderedCorrectly); _spriteBatch.End(); } private void DrawStatusString(string item, int linesFromBottom, bool isCorrect) { var position = new Vector2( 10, GraphicsDevice.Viewport.Height - ((1 + linesFromBottom) * _font.LineSpacing)); if (isCorrect) _spriteBatch.DrawString(_font, item + " correctly ordered!", position, Color.Lime); else _spriteBatch.DrawString(_font, item + " incorrectly ordered.", position, Color.Red); } private static bool ListsEqual(IList a, IList b) { if (a.Count != b.Count) return false; var equalityComparer = EqualityComparer.Default; for (int i = 0; i < a.Count; ++i) if (!equalityComparer.Equals(a[i], b[i])) return false; return true; } private class TestDrawable : DrawableGameComponent { private static readonly Color[] Colors = new Color[] { Color.White, Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Indigo, Color.Violet, Color.Black }; ImplicitDrawOrderComponent _owner; private int _number; private Color _color; public TestDrawable(Game game, ImplicitDrawOrderComponent owner, int number) : base(game) { _owner = owner; _number = number; _color = Colors[_number % Colors.Length]; } private SpriteBatch _spriteBatch; protected override void LoadContent() { base.LoadContent(); _spriteBatch = new SpriteBatch(Game.GraphicsDevice); } protected override void UnloadContent() { base.UnloadContent(); _spriteBatch.Dispose(); _spriteBatch = null; } public override void Draw(GameTime gameTime) { _owner._drawablesInDrawOrder.Add(this); float halfEx = _owner._font.MeasureString("x").X / 2; var position = new Vector2(_number * halfEx, 0); _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); _spriteBatch.DrawString(_owner._font, _number.ToString(), position, _color); _spriteBatch.End(); } } } } ================================================ FILE: Tests/Components/InitializeOrderComponent.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Kni.Tests.Framework.Components { class InitializeOrderComponent: GameComponent { static int g_initOrder = 0; public int InitOrder { get; private set; } public IGameComponent ChildComponent = null; public InitializeOrderComponent(Game game):base(game) { InitOrder = -1; } public override void Initialize() { if (ChildComponent != null) Game.Components.Add(ChildComponent); InitOrder = g_initOrder++; } } } ================================================ FILE: Tests/Components/Simple3DCubeComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class Simple3DCubeComponent { GraphicsDevice graphicsDevice; BasicEffect basicEffect; Matrix worldMatrix, viewMatrix, projectionMatrix; public Vector3 CubePosition { get; set; } public Color CubeColor { get; set; } public Simple3DCubeComponent(GraphicsDevice gd) { graphicsDevice = gd; } public void LoadContent() { // setup our graphics scene matrices worldMatrix = Matrix.Identity; viewMatrix = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, graphicsDevice.Viewport.AspectRatio, 1, 10); worldMatrix *= Matrix.CreateRotationX(-0.05f * 30f); worldMatrix *= Matrix.CreateRotationY(-0.05f * 20f); // Setup our basic effect basicEffect = new BasicEffect(graphicsDevice); basicEffect.World = worldMatrix; basicEffect.View = viewMatrix; basicEffect.Projection = projectionMatrix; CreateCubeVertexBuffer(); CreateCubeIndexBuffer(); } public void UnloadContent() { basicEffect.Dispose(); basicEffect = null; vertices.Dispose(); vertices = null; indices.Dispose(); indices = null; } public void Draw() { graphicsDevice.SetVertexBuffer(vertices); graphicsDevice.Indices = indices; basicEffect.World = worldMatrix * Matrix.CreateTranslation(CubePosition); basicEffect.DiffuseColor = CubeColor.ToVector3(); foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) { pass.Apply(); graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, number_of_vertices, 0, number_of_indices / 3); } } const int number_of_vertices = 8; const int number_of_indices = 36; VertexBuffer vertices; void CreateCubeVertexBuffer() { VertexPositionTexture[] cubeVertices = new VertexPositionTexture[number_of_vertices]; cubeVertices[0].Position = new Vector3(-1, -1, -1); cubeVertices[1].Position = new Vector3(-1, -1, 1); cubeVertices[2].Position = new Vector3(1, -1, 1); cubeVertices[3].Position = new Vector3(1, -1, -1); cubeVertices[4].Position = new Vector3(-1, 1, -1); cubeVertices[5].Position = new Vector3(-1, 1, 1); cubeVertices[6].Position = new Vector3(1, 1, 1); cubeVertices[7].Position = new Vector3(1, 1, -1); vertices = new VertexBuffer(graphicsDevice, VertexPositionTexture.VertexDeclaration, number_of_vertices, BufferUsage.WriteOnly); vertices.SetData(cubeVertices); } IndexBuffer indices; void CreateCubeIndexBuffer() { UInt16[] cubeIndices = new UInt16[number_of_indices]; //bottom face cubeIndices[0] = 0; cubeIndices[1] = 2; cubeIndices[2] = 3; cubeIndices[3] = 0; cubeIndices[4] = 1; cubeIndices[5] = 2; //top face cubeIndices[6] = 4; cubeIndices[7] = 6; cubeIndices[8] = 5; cubeIndices[9] = 4; cubeIndices[10] = 7; cubeIndices[11] = 6; //front face cubeIndices[12] = 5; cubeIndices[13] = 2; cubeIndices[14] = 1; cubeIndices[15] = 5; cubeIndices[16] = 6; cubeIndices[17] = 2; //back face cubeIndices[18] = 0; cubeIndices[19] = 7; cubeIndices[20] = 4; cubeIndices[21] = 0; cubeIndices[22] = 3; cubeIndices[23] = 7; //left face cubeIndices[24] = 0; cubeIndices[25] = 4; cubeIndices[26] = 1; cubeIndices[27] = 1; cubeIndices[28] = 4; cubeIndices[29] = 5; //right face cubeIndices[30] = 2; cubeIndices[31] = 6; cubeIndices[32] = 3; cubeIndices[33] = 3; cubeIndices[34] = 6; cubeIndices[35] = 7; indices = new IndexBuffer(graphicsDevice, IndexElementSize.SixteenBits, number_of_indices, BufferUsage.WriteOnly); indices.SetData(cubeIndices); } } } ================================================ FILE: Tests/Components/SpaceshipModelDrawComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class SpaceshipModelDrawComponent : VisualTestDrawableGameComponent { public class Spaceship { #region Fields // The XNA framework Model object that we are going to display. Model spaceshipModel; // Array holding all the bone transform matrices for the entire model. // We could just allocate this locally inside the Draw method, but it // is more efficient to reuse a single array, as this avoids creating // unnecessary garbage. Matrix[] boneTransforms; // Spaceship drawing parameters private Matrix projection; private Matrix rotation; private Matrix view; private bool[] lights; bool isTextureEnabled; bool isPerPixelLightingEnabled; #endregion #region Initialization /// /// Loads the spaceship model. /// public void Load(ContentManager content) { // Load the spaceship model from the ContentManager. spaceshipModel = content.Load(Paths.Model("Spaceship")); // Allocate the transform matrix array. boneTransforms = new Matrix[spaceshipModel.Bones.Count]; } #endregion #region Public accessors /// /// Gets or sets the projection matrix value. /// public Matrix Projection { get { return projection; } set { projection = value; } } /// /// Gets or sets the rotation matrix value. /// public Matrix Rotation { get { return rotation; } set { rotation = value; } } /// /// Gets or sets the rotation matrix value. /// public bool IsTextureEnabled { get { return isTextureEnabled; } set { isTextureEnabled = value; } } /// /// Gets or sets the view matrix value. /// public Matrix View { get { return view; } set { view = value; } } /// /// Gets or sets the lights states. /// public bool[] Lights { get { return lights; } set { lights = value; } } /// /// Gets or sets the per pixel lighting preferences /// public bool IsPerPixelLightingEnabled { get { return isPerPixelLightingEnabled; } set { isPerPixelLightingEnabled = value; } } #endregion #region Draw /// /// Draws the spaceship model, using the current drawing parameters. /// public void Draw() { // Set the world matrix as the root transform of the model. spaceshipModel.Root.Transform = Rotation; // Look up combined bone matrices for the entire model. spaceshipModel.CopyAbsoluteBoneTransformsTo(boneTransforms); // Draw the model. foreach (ModelMesh mesh in spaceshipModel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.World = boneTransforms[mesh.ParentBone.Index]; effect.View = View; effect.Projection = Projection; SetEffectLights(effect, Lights); SetEffectPerPixelLightingEnabled(effect); effect.TextureEnabled = IsTextureEnabled; } mesh.Draw(); } } /// /// Sets effect's per pixel lighting preference /// /// private void SetEffectPerPixelLightingEnabled(BasicEffect effect) { effect.PreferPerPixelLighting = isPerPixelLightingEnabled; } /// /// Sets effects lighting properties /// /// /// private void SetEffectLights(BasicEffect effect, bool[] lights) { effect.Alpha = 1.0f; effect.DiffuseColor = new Vector3(0.75f, 0.75f, 0.75f); effect.SpecularColor = new Vector3(0.25f, 0.25f, 0.25f); effect.SpecularPower = 5.0f; effect.AmbientLightColor = new Vector3(0.75f, 0.75f, 0.75f); effect.DirectionalLight0.Enabled = lights[0]; effect.DirectionalLight0.DiffuseColor = Vector3.One; effect.DirectionalLight0.Direction = Vector3.Normalize(new Vector3(1, -1, 0)); effect.DirectionalLight0.SpecularColor = Vector3.One; effect.DirectionalLight1.Enabled = lights[1]; effect.DirectionalLight1.DiffuseColor = new Vector3(0.5f, 0.5f, 0.5f); effect.DirectionalLight1.Direction = Vector3.Normalize(new Vector3(-1, -1, 0)); effect.DirectionalLight1.SpecularColor = new Vector3(1f, 1f, 1f); effect.DirectionalLight2.Enabled = lights[2]; effect.DirectionalLight2.DiffuseColor = new Vector3(0.3f, 0.3f, 0.3f); effect.DirectionalLight2.Direction = Vector3.Normalize(new Vector3(-1, -1, -1)); effect.DirectionalLight2.SpecularColor = new Vector3(0.3f, 0.3f, 0.3f); effect.LightingEnabled = true; } #endregion } Spaceship spaceship; float cameraFOV = 45; // Initial camera FOV (serves as a zoom level) float rotationXAmount = 0.0f; float rotationYAmount = 0.0f; Texture2D background; SpriteBatch spriteBatch; public SpaceshipModelDrawComponent(Game game) : base(game) { } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); background = Game.Content.Load(Paths.Texture("fun-background")); spaceship = new Spaceship(); spaceship.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(cameraFOV), GraphicsDevice.Viewport.AspectRatio, 10, 20000); spaceship.Load(Game.Content); base.LoadContent(); } protected override void UnloadContent() { spriteBatch.Dispose(); spriteBatch = null; background.Dispose(); background = null; } protected override void UpdateOncePerDraw(GameTime gameTime) { var frameInfoSource = Game.Services.RequireService(); var frameInfo = frameInfoSource.FrameInfo; spaceship.Rotation = Matrix.CreateWorld(new Vector3(0, 250, 0), Vector3.Forward, Vector3.Up) * Matrix.CreateFromYawPitchRoll((float)Math.PI + MathHelper.PiOver2 + rotationXAmount / 100, rotationYAmount / 100, 0); spaceship.View = Matrix.CreateLookAt( new Vector3(3500, 400, 0) + new Vector3(0, 250, 0), new Vector3(0, 250, 0), Vector3.Up); spaceship.IsTextureEnabled = true; spaceship.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(cameraFOV), GraphicsDevice.Viewport.AspectRatio, 10, 20000); int frameNum = frameInfo.DrawNumber - 1; spaceship.Lights = new bool[] { (frameNum & 1) != 0, (frameNum & 2) != 0, (frameNum & 4) != 0 }; spaceship.IsPerPixelLightingEnabled = (frameNum & 8) != 0; rotationXAmount += 10; rotationYAmount += 12; } public override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(background, Vector2.Zero, Color.White); spriteBatch.End(); // Set render states. GraphicsDevice.BlendState = BlendState.Opaque; GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise; GraphicsDevice.DepthStencilState = DepthStencilState.Default; GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; spaceship.Draw(); base.Draw(gameTime); } } } ================================================ FILE: Tests/Components/TexturedQuadComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Components { class TexturedQuadComponent : VisualTestDrawableGameComponent { struct Quad { public Vector3 Origin; public Vector3 UpperLeft; public Vector3 LowerLeft; public Vector3 UpperRight; public Vector3 LowerRight; public Vector3 Normal; public Vector3 Up; public Vector3 Left; public VertexPositionNormalTexture[] Vertices; public short[] Indexes; public Quad(Vector3 origin, Vector3 normal, Vector3 up, float width, float height) { Vertices = new VertexPositionNormalTexture[4]; Indexes = new short[6]; Origin = origin; Normal = normal; Up = up; // Calculate the quad corners Left = Vector3.Cross(normal, Up); Vector3 uppercenter = (Up * height / 2) + origin; UpperLeft = uppercenter + (Left * width / 2); UpperRight = uppercenter - (Left * width / 2); LowerLeft = UpperLeft - (Up * height); LowerRight = UpperRight - (Up * height); FillVertices(); } private void FillVertices() { // Fill in texture coordinates to display full texture // on quad Vector2 textureUpperLeft = new Vector2(0.0f, 0.0f); Vector2 textureUpperRight = new Vector2(1.0f, 0.0f); Vector2 textureLowerLeft = new Vector2(0.0f, 1.0f); Vector2 textureLowerRight = new Vector2(1.0f, 1.0f); // Provide a normal for each vertex for (int i = 0; i < Vertices.Length; i++) { Vertices[i].Normal = Normal; } // Set the position and texture coordinate for each // vertex Vertices[0].Position = LowerLeft; Vertices[0].TextureCoordinate = textureLowerLeft; Vertices[1].Position = UpperLeft; Vertices[1].TextureCoordinate = textureUpperLeft; Vertices[2].Position = LowerRight; Vertices[2].TextureCoordinate = textureLowerRight; Vertices[3].Position = UpperRight; Vertices[3].TextureCoordinate = textureUpperRight; // Set the index buffer for each vertex, using // clockwise winding Indexes[0] = 0; Indexes[1] = 1; Indexes[2] = 2; Indexes[3] = 2; Indexes[4] = 1; Indexes[5] = 3; } } Quad quad; Matrix View, Projection; BasicEffect quadEffect; Texture2D texture; bool enableLighting; public TexturedQuadComponent(Game game, bool enableLighting) : base(game) { this.enableLighting = enableLighting; } protected override void LoadContent() { base.LoadContent(); quad = new Quad(Vector3.Zero, Vector3.Backward, Vector3.Up, 1, 1); View = Matrix.CreateLookAt(new Vector3(0, 0, 2), Vector3.Zero, Vector3.Up); Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 4.0f / 3.0f, 1, 500); texture = Game.Content.Load(Paths.Texture("GlassPane")); quadEffect = new BasicEffect(GraphicsDevice); if (enableLighting) quadEffect.EnableDefaultLighting(); quadEffect.World = Matrix.Identity; quadEffect.View = View; quadEffect.Projection = Projection; quadEffect.TextureEnabled = true; quadEffect.Texture = texture; } protected override void UnloadContent() { texture.Dispose(); texture = null; quadEffect.Dispose(); quadEffect = null; } public override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); foreach (EffectPass pass in quadEffect.CurrentTechnique.Passes) { pass.Apply(); GraphicsDevice.DrawUserIndexedPrimitives ( PrimitiveType.TriangleList, quad.Vertices, 0, 4, quad.Indexes, 0, 2); } base.Draw(gameTime); } } } ================================================ FILE: Tests/Components/VisualTestDrawableGameComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Kni.Tests.Components { class VisualTestDrawableGameComponent : DrawableGameComponent { public VisualTestDrawableGameComponent(Game game) : base(game) { } private UpdateGuard _updateGuard = new UpdateGuard(); public override void Update(GameTime gameTime) { base.Update(gameTime); if (gameTime.ElapsedGameTime == TimeSpan.Zero) return; if (_updateGuard.ShouldUpdate(Game.Services.RequireService().FrameInfo)) UpdateOncePerDraw(gameTime); } protected virtual void UpdateOncePerDraw(GameTime gameTime) { } } } ================================================ FILE: Tests/Components/VisualTestGameComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Kni.Tests.Components { class VisualTestGameComponent : GameComponent { public VisualTestGameComponent(Game game) : base(game) { } private UpdateGuard _updateGuard = new UpdateGuard(); public override void Update(GameTime gameTime) { base.Update(gameTime); if (gameTime.ElapsedGameTime == TimeSpan.Zero) return; if (_updateGuard.ShouldUpdate(Game.Services.RequireService().FrameInfo)) UpdateOncePerDraw(gameTime); } protected virtual void UpdateOncePerDraw(GameTime gameTime) { } } } ================================================ FILE: Tests/ContentPipeline/AssetTestClasses.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; using System.Collections.Generic; #region The Basics public class TheBasics { public int PublicField; protected int ProtectedField; private int PrivateField; internal int InternalField; public string GetSetProperty { get; set; } public string GetOnlyProperty { get { return "Hello World"; } } public string SetOnlyProperty { set; private get; } public NestedClass Nested; public NestedClass Nested2; public TheBasics() { Nested = Nested2 = new NestedClass(); } } public class NestedClass { public string Name; public bool IsEnglish; } #endregion #region Inheritance public class InheritanceBase { public int elf; } public class Inheritance : InheritanceBase { public string hello; } #endregion #region IncludingPrivateMembers public class IncludingPrivateMembers { public IncludingPrivateMembers() { } public IncludingPrivateMembers(int elf) { this.elf = elf; } [ContentSerializer] private int elf; // will be serialized public int GetElfValue() { return elf; } } #endregion #region ExcludingPublicMembers public class ExcludingPublicMembers { [ContentSerializerIgnore] public int elf; // will not be serialized } #endregion #region RenamingXmlElements public class RenamingXmlElements { [ContentSerializer(ElementName = "ShawnSaysHello")] public string hello; [ContentSerializer(ElementName = "ElvesAreCool")] public int elf; [ContentSerializer(ElementName = "Speed")] public float speed; [ContentSerializer(ElementName = "Organic")] public bool isOrganic; [ContentSerializer(ElementName = "Dimensions")] private Vector2 dimensions; public Vector2 Dimensions { get { return dimensions; } } internal void SetDimensions(Vector2 value) { dimensions = value; } } #endregion #region NullReferences public class NullReferences { public string hello = "world"; } #endregion #region OptionalElements public class OptionalElements { [ContentSerializer(Optional = true)] public string a = null; public string b = "b"; [ContentSerializer(Optional = true)] public string c = "c"; [ContentSerializer(Optional = true)] public CullMode? d = null; [ContentSerializer(Optional = true)] public CullMode? e = CullMode.CullClockwiseFace; public CullMode? f = CullMode.CullCounterClockwiseFace; public CullMode g = CullMode.CullClockwiseFace; } #endregion #region AllowNull public class AllowNull { [ContentSerializer(AllowNull = false)] string a; } #endregion #region Collections public enum CustomEnum { Val1, Val2 } public class CustomItem { public CustomEnum EnumVal; } public class CustomItemBase { public double DoubleVal; public Nullable NullableFloatVal; } public class CustomItemInherited : CustomItemBase { public char[] CharArrayVal; } public class Collections { public string[] StringArray; public List StringList; public int[] IntArray; public Color[] ColorArray; public List CustomItemList; public List CustomItemInheritedList; // Indexer - should be ignored by intermediate serializer. public Color this[int i] { get { return ColorArray[i]; } set { ColorArray[i] = value; } } } #endregion #region CollectionItemName public class CollectionItemName { [ContentSerializer(ElementName = "w00t", CollectionItemName = "Flibble")] public string[] StringArray; } #endregion #region Dictionaries public class Dictionaries { public Dictionary TestDictionary = new Dictionary(); } #endregion #region Primitive Types public class PrimitiveTypes { public char Char; public char Char2; public char Char3; public byte Byte; public sbyte SByte; public short Short; public ushort UShort; public int Int; public uint UInt; public long Long; public ulong ULong; public float Float; public double Double; public char? NullChar; public char? NotNullChar; } #endregion #region MathTypes public class MathTypes { public Point Point; public Rectangle Rectangle; public Vector2 Vector2; public Vector3 Vector3; public Vector4 Vector4; public Quaternion Quaternion; public Plane Plane; public Matrix Matrix; public Color Color; public Vector2[] Vector2Array = new Vector2[0]; public List Vector2List = new List(); public List Vector2ListEmpty = new List(); } #endregion #region PolymorphicTypes public class PolymorphicA { public bool Value; } public class PolymorphicB : PolymorphicA { } public class PolymorphicC : PolymorphicA { } public class PolymorphicTypes { public object Hello; public object Elf; public PolymorphicA[] TypedArray; public Array UntypedArray; public ICollection IntCollection; public object UntypedDictionary; } #endregion #region FlattenContent public class FlattenContent { [ContentSerializer(FlattenContent = true)] public NestedClass Nested; [ContentSerializer(FlattenContent = true, CollectionItemName = "Boo")] public string[] Collection; } #endregion #region SharedResources public class SharedResources { [ContentSerializer(SharedResource = true)] public Linked Head; public Linked2[] LinkedArray; } public class Linked { public int Value; [ContentSerializer(SharedResource = true)] public Linked Next; } public class Linked2 { [ContentSerializer(SharedResource = true)] public Linked2[] Next; } #endregion #region CircularReferences public class CircularReferences { public CircularLinked Head; } public class CircularLinked { public int Value; public CircularLinked Next; } #endregion #region ExternalReferences public class ExternalReferences { public ExternalReference Texture; public ExternalReference Texture2; public ExternalReference Shader; } #endregion #region FontDescription class ExtendedFontDescription : FontDescription { public ExtendedFontDescription() : base("Arial", 14, 0) { } [ContentSerializer(Optional = true, CollectionItemName = "Item")] public List ExtendedListProperty { get { return _list; } } private List _list = new List(); } #endregion #region SystemTypes class SystemTypes { public TimeSpan TimeSpan; } #endregion #region GetterOnlyProperties class GetterOnlyProperties { private readonly List _intList; private readonly Dictionary _intStringDictionary; private readonly AnotherClass _customClass; private readonly AnotherClass[] _customClassArray; private readonly AnotherStruct _customStruct; public int IntValue { get { return 0; } } public Vector2 Dimensions { get { return new Vector2(16, 16); } } public List IntList { get { return _intList; } } public Dictionary IntStringDictionaryWithPrivateSetter { get; private set; } public Dictionary IntStringDictionary { get { return _intStringDictionary; } } public class AnotherClass { public int A; } public AnotherClass CustomClass { get { return _customClass; } } public object UntypedCustomClass { get { return _customClass; } } public AnotherClass[] CustomClassArray { get { return _customClassArray; } } public object UntypedCustomClassArray { get { return _customClassArray; } } public struct AnotherStruct { public int A; } public AnotherStruct CustomStruct { get { return _customStruct; } } public GetterOnlyProperties() { _intList = new List(); IntStringDictionaryWithPrivateSetter = new Dictionary(); _intStringDictionary = new Dictionary(); _customClass = new AnotherClass(); _customClassArray = new [] { new AnotherClass { A = 42 } }; _customStruct = new AnotherStruct(); } } #endregion #region GetterOnlyPolymorphicArrayProperties class GetterOnlyPolymorphicArrayProperties { private readonly AnotherClass[] _customClassArray; public class AnotherClass { public int A; } public IList CustomClassArrayAsIList { get { return _customClassArray; } } public GetterOnlyPolymorphicArrayProperties() { _customClassArray = new[] { new AnotherClass { A = 42 } }; } } #endregion #region GenericTypes class GenericTypes { public GenericClass A; public GenericClass B; public GenericClass C; } class GenericClass { public T Value; } public class GenericArg { public int Value; } #endregion #region ChildCollections public class ChildCollections { private readonly ChildrenCollection _children; [ContentSerializer] public ChildrenCollection Children { get { return _children; } } public ChildCollections() { _children = new ChildrenCollection(this); } } public class ChildrenCollection : ChildCollection { public ChildrenCollection(ChildCollections parent) : base(parent) { } protected override ChildCollections GetParent(ChildCollectionChild child) { return child.Parent; } protected override void SetParent(ChildCollectionChild child, ChildCollections parent) { child.Parent = parent; } } public class ChildCollectionChild : ContentItem { [ContentSerializerIgnore] public ChildCollections Parent { get; set; } } #endregion #region Colors public class Colors { public Color White { get; set; } public Color Black { get; set; } public Color Transparent { get; set; } public Color Red { get; set; } public Color Green { get; set; } public Color Blue { get; set; } } #endregion class StructArrayNoElements { public Vector2[] Vector2ArrayNoElements = new Vector2[] {}; } namespace Kni.Tests.ContentPipeline { #region Namespaces public class NamespaceHelper { public bool Value; } public class NamespaceClass { public object A; public object B; public object C; public object D; public object E; public object F; public object G; public List H; } namespace Nested { public class ClassInsideNestedNamespace { public bool Value; } namespace ContentPipeline { public class ClassInsideNestedAmbiguousNamespace { public bool Value; } } namespace ContentPipeline2 { public class ClassInsideNestedUnambiguousNamespace { public bool Value; } } } #endregion #region CustomFormatting public class CustomFormatting { public T A; public List Vector2ListSpaced = new List(); public string EmptyString; public U Rectangle; } #endregion } namespace Kni.Tests.SomethingElse.ContentPipeline { public class ClassInsideAmbiguousNamespace { public bool Value; } } ================================================ FILE: Tests/ContentPipeline/AudioContentTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Linq; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Audio; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class AudioContentTests { [Test] public void Ctors() { // Test bad file names. Assert.Throws(() => new AudioContent(null, AudioFileType.Wav)); Assert.Throws(() => new AudioContent("", AudioFileType.Wav)); Assert.Throws(() => new AudioContent(@"Not/A/File", AudioFileType.Wav)); // Test invalid file types. Assert.Throws(() => new AudioContent(@"Assets/Audio/blast_mono.wav", AudioFileType.Mp3)); Assert.Throws(() => new AudioContent(@"Assets/Audio/blast_mono.wav", AudioFileType.Wma)); Assert.Throws(() => new AudioContent(@"Assets/Audio/rock_loop_stereo.wma", AudioFileType.Wav)); Assert.Throws(() => new AudioContent(@"Assets/Audio/rock_loop_stereo.mp3", AudioFileType.Wav)); // This for some reason does not throw! new AudioContent(@"Assets/Audio/rock_loop_stereo.wma", AudioFileType.Mp3); new AudioContent(@"Assets/Audio/rock_loop_stereo.mp3", AudioFileType.Wma); } [Test] public void WavFile() { var content = new AudioContent(@"Assets/Audio/blast_mono.wav", AudioFileType.Wav); Assert.AreEqual(@"Assets/Audio/blast_mono.wav", content.FileName); Assert.AreEqual(AudioFileType.Wav, content.FileType); Assert.IsNull(content.Identity); Assert.AreEqual(0, content.LoopStart); Assert.AreEqual(315970, content.LoopLength); Assert.AreEqual(71640000, content.Duration.Ticks); var format = content.Format; Assert.IsNotNull(format); Assert.AreEqual(1, format.Format); Assert.AreEqual(1, format.ChannelCount); Assert.AreEqual(44100, format.SampleRate); Assert.AreEqual(88200, format.AverageBytesPerSecond); Assert.AreEqual(2, format.BlockAlign); Assert.AreEqual(16, format.BitsPerSample); Assert.IsNotNull(format.NativeWaveFormat); Assert.AreEqual(18, format.NativeWaveFormat.Count); using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray()))) { var formatType = reader.ReadInt16(); var channels = reader.ReadInt16(); var sampleRate = reader.ReadInt32(); var averageBytesPerSecond = reader.ReadInt32(); var blockAlign = reader.ReadInt16(); var bitsPerSample = reader.ReadInt16(); var zero = reader.ReadInt16(); Assert.AreEqual(format.Format, formatType); Assert.AreEqual(format.ChannelCount, channels); Assert.AreEqual(format.SampleRate, sampleRate); Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond); Assert.AreEqual(format.BlockAlign, blockAlign); Assert.AreEqual(format.BitsPerSample, bitsPerSample); Assert.AreEqual(0, zero); } var data = content.Data; Assert.NotNull(data); Assert.AreEqual(631940, data.Count); // Seems like XNA just let the Data property throw // an exception after it has been disposed. content.Dispose(); Assert.Throws(() => { var temp = content.Data; }); } [Test] public void Mp3File() { var content = new AudioContent(@"Assets/Audio/rock_loop_stereo.mp3", AudioFileType.Mp3); Assert.AreEqual(@"Assets/Audio/rock_loop_stereo.mp3", content.FileName); Assert.AreEqual(AudioFileType.Mp3, content.FileType); Assert.IsNull(content.Identity); Assert.AreEqual(0, content.LoopStart); Assert.AreEqual(0, content.LoopLength); Assert.AreEqual(79930000, content.Duration.Ticks); var format = content.Format; Assert.IsNotNull(format); Assert.AreEqual(1, format.Format); Assert.AreEqual(2, format.ChannelCount); Assert.AreEqual(44100, format.SampleRate); Assert.AreEqual(176400, format.AverageBytesPerSecond); Assert.AreEqual(4, format.BlockAlign); Assert.AreEqual(16, format.BitsPerSample); Assert.IsNotNull(format.NativeWaveFormat); Assert.AreEqual(18, format.NativeWaveFormat.Count); using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray()))) { var formatType = reader.ReadInt16(); var channels = reader.ReadInt16(); var sampleRate = reader.ReadInt32(); var averageBytesPerSecond = reader.ReadInt32(); var blockAlign = reader.ReadInt16(); var bitsPerSample = reader.ReadInt16(); var zero = reader.ReadInt16(); Assert.AreEqual(format.Format, formatType); Assert.AreEqual(format.ChannelCount, channels); Assert.AreEqual(format.SampleRate, sampleRate); Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond); Assert.AreEqual(format.BlockAlign, blockAlign); Assert.AreEqual(format.BitsPerSample, bitsPerSample); Assert.AreEqual(0, zero); } // For MP3 it seems the data is never availble. Assert.Throws(() => { var data = content.Data; }); // Seems like XNA just let the Data property throw // an exception after it has been disposed. content.Dispose(); Assert.Throws(() => { var temp = content.Data; }); } [Test] public void WmaFile() { var content = new AudioContent(@"Assets/Audio/rock_loop_stereo.wma", AudioFileType.Wma); Assert.AreEqual(@"Assets/Audio/rock_loop_stereo.wma", content.FileName); Assert.AreEqual(AudioFileType.Wma, content.FileType); Assert.IsNull(content.Identity); Assert.AreEqual(0, content.LoopStart); Assert.AreEqual(0, content.LoopLength); Assert.AreEqual(99430000, content.Duration.Ticks); var format = content.Format; Assert.IsNotNull(format); Assert.AreEqual(1, format.Format); Assert.AreEqual(2, format.ChannelCount); Assert.AreEqual(44100, format.SampleRate); Assert.AreEqual(176400, format.AverageBytesPerSecond); Assert.AreEqual(4, format.BlockAlign); Assert.AreEqual(16, format.BitsPerSample); Assert.IsNotNull(format.NativeWaveFormat); Assert.AreEqual(18, format.NativeWaveFormat.Count); using (var reader = new BinaryReader(new MemoryStream(format.NativeWaveFormat.ToArray()))) { var formatType = reader.ReadInt16(); var channels = reader.ReadInt16(); var sampleRate = reader.ReadInt32(); var averageBytesPerSecond = reader.ReadInt32(); var blockAlign = reader.ReadInt16(); var bitsPerSample = reader.ReadInt16(); var zero = reader.ReadInt16(); Assert.AreEqual(format.Format, formatType); Assert.AreEqual(format.ChannelCount, channels); Assert.AreEqual(format.SampleRate, sampleRate); Assert.AreEqual(format.AverageBytesPerSecond, averageBytesPerSecond); Assert.AreEqual(format.BlockAlign, blockAlign); Assert.AreEqual(format.BitsPerSample, bitsPerSample); Assert.AreEqual(0, zero); } // For WMA it seems the data is never availble. Assert.Throws(() => { var data = content.Data; }); // Seems like XNA just let the Data property throw // an exception after it has been disposed. content.Dispose(); Assert.Throws(() => { var temp = content.Data; }); } private static int ToWavFormat(ConversionFormat format, int bitsPerSample) { switch (format) { case ConversionFormat.Pcm: if (bitsPerSample == 32) return 3; return 1; case ConversionFormat.Adpcm: return 2; case ConversionFormat.WindowsMedia: case ConversionFormat.Xma: default: throw new ArgumentOutOfRangeException("format"); } } // 8bit PCM Mono -> PCM [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 44100, 44100, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 33075, 33075, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 22050, 22050, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 22050, 22050, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 16537, 16537, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 11025, 11025, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 11025, 11025, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 8268, 8268, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 8000, 8000, 8, 1)] // 8bit PCM Mono -> ADPCM [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 24104, 44077, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 24104, 44077, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 12073, 22078, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 12073, 22077, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 12073, 22077, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 6036, 11039, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 6036, 11039, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 6036, 11039, 4, 70)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 4386, 8021, 4, 70)] // 16bit PCM Mono -> PCM [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 88200, 44100, 16, 2)] [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 66150, 33075, 16, 2)] [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 44100, 22050, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 44100, 22050, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 33074, 16537, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 22050, 11025, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 22050, 11025, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 1, 16536, 8268, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Low, 1, 16000, 8000, 16, 2)] // 16bit PCM Stereo -> PCM [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 176400, 44100, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 132300, 33075, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Pcm, ConversionQuality.Low, 2, 88200, 22050, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 88200, 22050, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 66148, 16537, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Pcm, ConversionQuality.Low, 2, 44100, 11025, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 44100, 11025, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Medium, 2, 33072, 8268, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Pcm, ConversionQuality.Low, 2, 32000, 8000, 16, 4)] // 16bit PCM Mono -> ADPCM [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 24121, 44108, 4, 70)] [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 24121, 44108, 4, 70)] [TestCase(@"Assets/Audio/blast_mono.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 12055, 22045, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 12055, 22045, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 12055, 22045, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 6027, 11022, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 1, 6027, 11022, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 6027, 11022, 4, 70)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 4376, 8003, 4, 70)] // 16bit PCM Stereo -> ADPCM [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 48240, 44106, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 48240, 44106, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 24120, 22053, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 24120, 22053, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 24120, 22053, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 12059, 11026, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Best, 2, 12059, 11026, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 12059, 11026, 4, 140)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 8744, 7995, 4, 140)] // 32bit IEEE Float PCM Mono [TestCase(@"Assets/Audio/tone_mono_44khz_float.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 176400, 44100, 32, 4)] [TestCase(@"Assets/Audio/tone_mono_44khz_float.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 44100, 44100, 4, 70)] // 32bit IEEE Float PCM Stereo [TestCase(@"Assets/Audio/tone_stereo_44khz_float.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 352800, 44100, 32, 8)] [TestCase(@"Assets/Audio/tone_stereo_44khz_float.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 44100, 44100, 4, 140)] #if XNA // XNA passes 24-bit through as 24-bit in high quality, but cannot convert 24-bit to ADPCM // 24bit PCM Mono [TestCase(@"Assets/Audio/tone_mono_44khz_24bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 132300, 44100, 24, 3)] // 24bit PCM Stereo [TestCase(@"Assets/Audio/tone_stereo_44khz_24bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 264600, 44100, 24, 6)] #else // MonoGame converts 24-bit sounds to 16-bit // 24bit PCM Mono [TestCase(@"Assets/Audio/tone_mono_44khz_24bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 1, 88200, 44100, 16, 2)] [TestCase(@"Assets/Audio/tone_mono_44khz_24bit.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 1, 44100, 44100, 4, 70)] [TestCase(@"Assets/Audio/tone_mono_44khz_24bit.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 44100, 44100, 4, 70)] // 24bit PCM Stereo [TestCase(@"Assets/Audio/tone_stereo_44khz_24bit.wav", ConversionFormat.Pcm, ConversionQuality.Best, 2, 176400, 44100, 16, 4)] [TestCase(@"Assets/Audio/tone_stereo_44khz_24bit.wav", ConversionFormat.Adpcm, ConversionQuality.Medium, 2, 44100, 44100, 4, 140)] [TestCase(@"Assets/Audio/tone_stereo_44khz_24bit.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 44100, 44100, 4, 140)] // XNA cannot convert 32-bit float to low quality ADPCM, so include these tests here // 32bit IEEE Float PCM Mono [TestCase(@"Assets/Audio/tone_mono_44khz_float.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 1, 44100, 44100, 4, 70)] // 32bit IEEE Float PCM Stereo [TestCase(@"Assets/Audio/tone_stereo_44khz_float.wav", ConversionFormat.Adpcm, ConversionQuality.Low, 2, 44100, 44100, 4, 140)] #endif public void ConvertAudio(string sourceFile, ConversionFormat format, ConversionQuality quality, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign) { var content = new AudioContent(sourceFile, AudioFileType.Wav); content.ConvertFormat(format, quality, null); Assert.AreEqual(ToWavFormat(format, content.Format.BitsPerSample), content.Format.Format); Assert.AreEqual(channels, content.Format.ChannelCount); Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample); // TODO: We don't quite match right with XNA on these. // We should look to fix this for 100% compatibility. if (format != ConversionFormat.Adpcm) { Assert.AreEqual(sampleRate, content.Format.SampleRate); Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond); Assert.AreEqual(blockAlign, content.Format.BlockAlign); } content.Dispose(); } } } ================================================ FILE: Tests/ContentPipeline/BitmapContentTests.cs ================================================ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class BitmapContentTests { // Needed to copy from an array of struct to a byte array static byte[] ToByteArray(T[] source) where T : struct { GCHandle handle = GCHandle.Alloc(source, GCHandleType.Pinned); try { IntPtr pointer = handle.AddrOfPinnedObject(); byte[] destination = new byte[source.Length * Marshal.SizeOf(typeof(T))]; Marshal.Copy(pointer, destination, 0, destination.Length); return destination; } finally { if (handle.IsAllocated) handle.Free(); } } static void Fill(PixelBitmapContent content, T color) where T : struct, IEquatable { var src = Enumerable.Repeat(color, content.Width * content.Height).ToArray(); var dest = ToByteArray(src); content.SetPixelData(dest); } void BitmapCopyFullNoResize(T color1) where T: struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(8, 8); BitmapContent.Copy(b1, b2); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.AreEqual(color1, b2.GetPixel(x, y)); } void BitmapCopyFullResize(T color1, IEqualityComparer comparer) where T : struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(4, 4); BitmapContent.Copy(b1, b2); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.That(color1, Is.EqualTo(b2.GetPixel(x, y)).Using(comparer)); } void BitmapConvertFullNoResize(T color1, U color2) where T : struct, IEquatable where U: struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(8, 8); BitmapContent.Copy(b1, b2); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.AreEqual(color2, b2.GetPixel(x, y)); } void BitmapCompressFullNoResize(T color1) where T : struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new Dxt1BitmapContent(8, 8); BitmapContent.Copy(b1, b2); } void BitmapCompressFullResize(T color1) where T : struct, IEquatable { var b1 = new PixelBitmapContent(16, 16); Fill(b1, color1); var b2 = new Dxt1BitmapContent(8, 8); BitmapContent.Copy(b1, b2); } void BitmapCopySameRegionNoResize(T color1, T color2) where T : struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(8, 8); Fill(b2, color2); BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(0, 0, 4, 4)); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.AreEqual(x < 4 && y < 4 ? color1 : color2, b2.GetPixel(x, y)); } void BitmapCopyMoveRegionNoResize(T color1, T color2) where T : struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(8, 8); Fill(b2, color2); BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(4, 4, 4, 4)); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.AreEqual(x >= 4 && y >= 4 ? color1 : color2, b2.GetPixel(x, y)); } void BitmapCopyRegionResize(T color1, T color2, IEqualityComparer comparer) where T : struct, IEquatable { var b1 = new PixelBitmapContent(8, 8); Fill(b1, color1); var b2 = new PixelBitmapContent(8, 8); Fill(b2, color2); BitmapContent.Copy(b1, new Rectangle(0, 0, 4, 4), b2, new Rectangle(0, 0, 3, 6)); for (var y = 0; y < b2.Height; y++) for (var x = 0; x < b2.Width; x++) Assert.That(x < 3 && y < 6 ? color1 : color2, Is.EqualTo(b2.GetPixel(x, y)).Using(comparer)); } [Test] public void BitmapCopyFullNoResize() { #if !XNA BitmapCopyFullNoResize(56); #endif BitmapCopyFullNoResize(0.56f); BitmapCopyFullNoResize(Color.Red); BitmapCopyFullNoResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f)); } [Test] public void BitmapCopyFullResize() { #if !XNA BitmapCopyFullResize(56, ByteComparer.Equal); #endif BitmapCopyFullResize(0.56f, FloatComparer.Epsilon); BitmapCopyFullResize(Color.Red, ColorComparer.Equal); BitmapCopyFullResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), Vector4Comparer.Epsilon); } [Test] public void BitmapConvertFullNoResize() { #if !XNA BitmapConvertFullNoResize(byte.MaxValue, Color.Red); #endif BitmapConvertFullNoResize(1.0f, Color.Red); BitmapConvertFullNoResize(Color.Red, new Vector4(1.0f, 0.0f, 0.0f, 1.0f)); BitmapConvertFullNoResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), Color.Red); } [Test] public void BitmapCompressFullNoResize() { #if !XNA BitmapCompressFullNoResize(56); #endif BitmapCompressFullNoResize(0.56f); BitmapCompressFullNoResize(Color.Red); BitmapCompressFullNoResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f)); } [Test] public void BitmapCompressFullResize() { #if !XNA BitmapCompressFullResize(56); #endif BitmapCompressFullResize(0.56f); BitmapCompressFullResize(Color.Red); BitmapCompressFullResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f)); } static BitmapContent BitmapConvert(Type bitmapType, Color color, int w, int h) { var b1 = new PixelBitmapContent(w, h); Fill(b1, color); var b2 = (BitmapContent)Activator.CreateInstance(bitmapType, b1.Width, b1.Height); BitmapContent.Copy(b1, b2); return b2; } static void BitmapAssert(BitmapContent bitmap, Color color, int range) { byte[] rgba; if (bitmap is Dxt1BitmapContent) rgba = DxtDecoder.DecompressDxt1(bitmap.GetPixelData(), bitmap.Width, bitmap.Height); else if (bitmap is Dxt3BitmapContent) rgba = DxtDecoder.DecompressDxt3(bitmap.GetPixelData(), bitmap.Width, bitmap.Height); else if (bitmap is Dxt5BitmapContent) rgba = DxtDecoder.DecompressDxt5(bitmap.GetPixelData(), bitmap.Width, bitmap.Height); else rgba = bitmap.GetPixelData(); for (var p = 0; p < rgba.Length; p += 4) { Assert.That(rgba[p + 0], Is.EqualTo(color.R).Within(range)); Assert.That(rgba[p + 1], Is.EqualTo(color.G).Within(range)); Assert.That(rgba[p + 2], Is.EqualTo(color.B).Within(range)); Assert.That(rgba[p + 3], Is.EqualTo(color.A).Within(range)); } } static void BitmapConvertAssert(Type bitmapType, Color color, int w, int h, int range) { var b = BitmapConvert(bitmapType, color, w, h); BitmapAssert(b, color, range); } static void BitmapConvertAssert(Type bitmapType, Color color, int w, int h, Color compare, int range) { var b = BitmapConvert(bitmapType, color, w, h); BitmapAssert(b, compare, range); } [Test] public void BitmapCompress() { var Transparent = new Color(0, 0, 0, 0); var Grey16Premult = new Color(16, 16, 16, 16); BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Red, 64, 64, 0); BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Green, 32, 34, 2); BitmapConvertAssert(typeof(Dxt1BitmapContent), Color.Blue, 8, 9, 0); BitmapConvertAssert(typeof(Dxt1BitmapContent), Transparent, 16, 16, 0); //BitmapConvertAssert(typeof(Dxt1BitmapContent), Grey16Premult, 16, 16, Transparent, 0); BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Red, 64, 64, 0); BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Green, 32, 34, 2); BitmapConvertAssert(typeof(Dxt3BitmapContent), Color.Blue, 8, 9, 0); BitmapConvertAssert(typeof(Dxt3BitmapContent), Transparent, 16, 16, 0); BitmapConvertAssert(typeof(Dxt3BitmapContent), Grey16Premult, 16, 16, Grey16Premult, 1); BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Red, 64, 64, 0); BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Green, 32, 34, 2); BitmapConvertAssert(typeof(Dxt5BitmapContent), Color.Blue, 8, 9, 0); BitmapConvertAssert(typeof(Dxt5BitmapContent), Transparent, 16, 16, 0); BitmapConvertAssert(typeof(Dxt5BitmapContent), Grey16Premult, 16, 16, Grey16Premult, 0); } [Test] public void BitmapCopySameRegionNoResize() { #if !XNA BitmapCopySameRegionNoResize(56, 48); #endif BitmapCopySameRegionNoResize(0.56f, 0.48f); BitmapCopySameRegionNoResize(Color.Red, Color.Blue); BitmapCopySameRegionNoResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f)); } [Test] public void BitmapCopyMoveRegionNoResize() { #if !XNA BitmapCopyMoveRegionNoResize(56, 48); #endif BitmapCopyMoveRegionNoResize(0.56f, 0.48f); BitmapCopyMoveRegionNoResize(Color.Red, Color.Blue); BitmapCopyMoveRegionNoResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f)); } [Test] public void BitmapCopyRegionResize() { #if !XNA BitmapCopyRegionResize(56, 48, ByteComparer.Equal); #endif BitmapCopyRegionResize(0.56f, 0.48f, FloatComparer.Epsilon); BitmapCopyRegionResize(Color.Red, Color.Blue, ColorComparer.Equal); BitmapCopyRegionResize(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), Vector4Comparer.Epsilon); } } } ================================================ FILE: Tests/ContentPipeline/BuilderTargetsTest.cs ================================================ using System; using System.IO; using System.Text; using System.Diagnostics; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { [TestFixture] public class BuilderTargetsTest { string[] msBuildFolders = new string[] { Path.Combine ("MSBuild", "15.0", "Bin", "MSBuild.exe"), Path.Combine ("MSBuild", "14.0", "Bin", "MSBuild.exe"), }; string FindBuildTool(string buildTool) { if (Environment.OSVersion.Platform == PlatformID.Win32NT && buildTool == "msbuild") { var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); foreach (var path in msBuildFolders) { if (File.Exists(Path.Combine(programFiles, path))) return Path.Combine(programFiles, path); } } return buildTool; } bool RunBuild(string buildTool, string projectFile, params string[] parameters) { var root = Path.GetDirectoryName(typeof(BuilderTargetsTest).Assembly.Location); var psi = new ProcessStartInfo(FindBuildTool(buildTool)) { Arguments = projectFile + " /t:BuildContent " + string.Join(" ", parameters) + " /noconsolelogger \"/flp1:LogFile=build.log;Encoding=UTF-8;Verbosity=Diagnostic\"", WorkingDirectory = root, UseShellExecute = true, }; using (var process = Process.Start(psi)) { process.WaitForExit(); return process.ExitCode == 0; } } static object[] BuilderTargetsBuildTools = new object[] { "msbuild", "xbuild", }; [Test] [TestCaseSource("BuilderTargetsBuildTools")] //TNC: re-enable content pipeline tests for NET.Framework // [Ignore("This test need to be rewritten to properly test Tools\\MonoGame.Content.Builder instead of the old builder targets.")] public void BuildSimpleProject(string buildTool) { if (buildTool == "xbuild" && Environment.OSVersion.Platform == PlatformID.Win32NT) Assert.Ignore("Skipping xbuild tests on windows"); var root = Path.GetDirectoryName(typeof(BuilderTargetsTest).Assembly.Location); var outputPath = Path.Combine(root, "Assets", "Projects", "Content", "bin"); if (Directory.Exists(outputPath)) Directory.Delete(outputPath, recursive: true); var result = RunBuild(buildTool, Path.Combine("Assets", "Projects", "BuildSimpleProject.csproj"), new string[] { "/p:MonoGameContentBuilderExe=" + Path.Combine(root, "MGCB.exe") }); Assert.AreEqual(true, result, "Content Build should have succeeded."); var contentFont = Path.Combine(outputPath, "DesktopGL", "Content", "ContentFont.xnb"); Assert.IsTrue(File.Exists(contentFont), "'" + contentFont + "' should exist."); } } } ================================================ FILE: Tests/ContentPipeline/ContentCompilerTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; #if XNA using System.Reflection; #endif namespace Kni.Tests.ContentPipeline { class ContentCompilerTest { class TestDataClass : IEquatable { public int A; public string B { get; set; } public bool Equals(TestDataClass other) { return A == other.A && B == other.B; } public override bool Equals(object obj) { if (obj is TestDataClass) return Equals(other: (TestDataClass)obj); else return base.Equals(obj); } public override int GetHashCode() { return A.GetHashCode() ^ B.GetHashCode(); } } struct TestDataStruct : IEquatable { public int A; public string B { get; set; } public bool Equals(TestDataStruct other) { return A == other.A && B == other.B; } public override bool Equals(object obj) { if (obj is TestDataStruct) return Equals(other: (TestDataStruct)obj); else return base.Equals(obj); } public override int GetHashCode() { return A.GetHashCode() ^ B.GetHashCode(); } } class TestDataContainer { public Microsoft.Xna.Framework.Rectangle[,] Array2D { get; set; } public Microsoft.Xna.Framework.Rectangle[,,] Array3D { get; set; } public TestDataContainer DeepClone() { return new TestDataContainer { Array2D = (Microsoft.Xna.Framework.Rectangle[,])Array2D.Clone(), Array3D = (Microsoft.Xna.Framework.Rectangle[,,])Array3D.Clone() }; } } [Test] public void RoundTripJaggedArrayClass() { var expected = Enumerable.Range(0, 5).Select(a => Enumerable.Range(0, 3).Select(b => new TestDataClass { A = a * 42 << b, B = "index: " + a * 5 + b }).ToArray()).ToArray(); TestCompiler.CompileAndLoadAssets(expected.ToArray(), result => { Assert.IsNotNull(result); Assert.IsInstanceOf(result); Assert.AreEqual(1, result.Rank); Assert.AreEqual(expected.Length, result.Length); for (int i = 0; i < expected.Length; i++) CollectionAssert.AreEquivalent(expected[i], result[i]); }); } [Test] public void RoundTrip1DArrayClass() { var expected = Enumerable.Range(0, 10).Select(i => new TestDataClass { A = i * 42, B = "index: " + i }).ToArray(); TestCompiler.CompileAndLoadAssets(expected.ToArray(), result => { Assert.IsNotNull(result); Assert.IsInstanceOf(result); Assert.AreEqual(1, result.Rank); Assert.AreEqual(expected.Length, result.Length); CollectionAssert.AreEquivalent(expected, result); }); } [Test] public void RoundTrip3DArrayClass() { var expected = new TestDataClass[3, 4, 2]; for (int z = 0; z < expected.GetLength(2); z++) for (int y = 0; y < expected.GetLength(1); y++) for (int x = 0; x < expected.GetLength(0); x++) expected[x, y, z] = new TestDataClass { A = x + y * 10 + z * 100, B = string.Format("X: {0} Y: {1} Z: {2}", x, y, z) }; TestCompiler.CompileAndLoadAssets((TestDataClass[,,])expected.Clone(), result => { Assert.IsNotNull(result); Assert.IsInstanceOf(result); Assert.AreEqual(result.Rank, 3); for (int i = 0; i < result.Rank; i++) Assert.AreEqual(expected.GetLength(i), result.GetLength(i)); for (int z = 0; z < expected.GetLength(2); z++) for (int y = 0; y < expected.GetLength(1); y++) for (int x = 0; x < expected.GetLength(0); x++) Assert.AreEqual(expected[x, y, z], result[x, y, z]); }); } [Test] public void RoundTripArrayContainer() { var expected = new TestDataContainer { Array2D = new Microsoft.Xna.Framework.Rectangle[3, 2], Array3D = new Microsoft.Xna.Framework.Rectangle[3, 4, 2] }; for (int y = 0; y < expected.Array2D.GetLength(1); y++) for (int x = 0; x < expected.Array2D.GetLength(0); x++) expected.Array2D[x, y] = new Microsoft.Xna.Framework.Rectangle(x, y, -x, -y); for (int z = 0; z < expected.Array3D.GetLength(2); z++) for (int y = 0; y < expected.Array3D.GetLength(1); y++) for (int x = 0; x < expected.Array3D.GetLength(0); x++) expected.Array3D[x, y, z] = new Microsoft.Xna.Framework.Rectangle(x, y, z, -z); TestCompiler.CompileAndLoadAssets(expected.DeepClone(), result => { Assert.IsNotNull(result.Array3D); Assert.IsInstanceOf(result.Array3D); Assert.AreEqual(result.Array3D.Rank, 3); for (int i = 0; i < result.Array3D.Rank; i++) Assert.AreEqual(expected.Array3D.GetLength(i), result.Array3D.GetLength(i)); for (int z = 0; z < expected.Array3D.GetLength(2); z++) for (int y = 0; y < expected.Array3D.GetLength(1); y++) for (int x = 0; x < expected.Array3D.GetLength(0); x++) Assert.AreEqual(expected.Array3D[x, y, z], result.Array3D[x, y, z]); Assert.IsNotNull(result.Array2D); Assert.IsInstanceOf(result.Array2D); Assert.AreEqual(result.Array2D.Rank, 2); for (int i = 0; i < result.Array2D.Rank; i++) Assert.AreEqual(expected.Array2D.GetLength(i), result.Array2D.GetLength(i)); for (int y = 0; y < expected.Array2D.GetLength(1); y++) for (int x = 0; x < expected.Array2D.GetLength(0); x++) Assert.AreEqual(expected.Array2D[x, y], result.Array2D[x, y]); }); } [Test] public void RoundTrip1DArrayStruct() { var expected = Enumerable.Range(0, 10).Select(i => new TestDataStruct { A = i * 42, B = "index: " + i }).ToArray(); TestCompiler.CompileAndLoadAssets(expected.ToArray(), result => { Assert.IsInstanceOf(result); Assert.AreEqual(1, result.Rank); Assert.AreEqual(expected.Length, result.Length); CollectionAssert.AreEquivalent(expected, result); }); } [Test] public void RoundTrip3DArrayStruct() { var expected = new TestDataStruct[3, 4, 2]; for (int z = 0; z < expected.GetLength(2); z++) for (int y = 0; y < expected.GetLength(1); y++) for (int x = 0; x < expected.GetLength(0); x++) expected[x, y, z] = new TestDataStruct { A = x + y * 10 + z * 100, B = string.Format("X: {0} Y: {1} Z: {2}", x, y, z) }; TestCompiler.CompileAndLoadAssets((TestDataStruct[,,])expected.Clone(), result => { Assert.IsInstanceOf(result); Assert.AreEqual(result.Rank, 3); for (int i = 0; i < result.Rank; i++) Assert.AreEqual(expected.GetLength(i), result.GetLength(i)); for (int z = 0; z < expected.GetLength(2); z++) for (int y = 0; y < expected.GetLength(1); y++) for (int x = 0; x < expected.GetLength(0); x++) Assert.AreEqual(expected[x, y, z], result[x, y, z]); }); } [Test] public void ShouldSerializePropertyGivenNameOfItem() { var expected = new HasNoIndexer { Item = "lorem-ipsum" }; TestCompiler.CompileAndLoadAssets(expected, result => { Assert.AreEqual(expected.Item, result.Item); }); } class HasNoIndexer { public string Item { get; set; } } [Test] public void ShouldNotSerializePropertyGivenIndexer() { var expected = new HasIndexer(); expected["anything"] = "value"; TestCompiler.CompileAndLoadAssets(expected, result => { Assert.AreNotEqual(expected["anything"], result["anything"]); }); } class HasIndexer { readonly Dictionary _dictionary = new Dictionary(); public string this[string key] { get { string value; return _dictionary.TryGetValue(key, out value) ? value : null; } set { _dictionary[key] = value; } } } } } ================================================ FILE: Tests/ContentPipeline/EffectProcessorTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Content.Pipeline; using NUnit.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using System.IO; #if DIRECTX using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; #endif namespace Kni.Tests.ContentPipeline { class EffectProcessorTests { class ImporterContext : ContentImporterContext { public override string IntermediateDirectory { get { throw new NotImplementedException(); } } public override ContentBuildLogger Logger { get { throw new NotImplementedException(); } } public override string OutputDirectory { get { throw new NotImplementedException(); } } public override void AddDependency(string filename) { throw new NotImplementedException(); } } #if DIRECTX [Test] public void TestPreprocessor() { var filename = "Assets/Effects/PreprocessorTest.fx"; var effect = new EffectContent(); effect.Identity = new ContentIdentity(filename); effect.Name = Path.GetFileNameWithoutExtension(filename); effect.EffectCode = File.ReadAllText(filename); string fullFilePath = Path.GetFullPath(effect.Identity.SourceFilename); var processorContext = new TestProcessorContext(TargetPlatform.Windows, Path.ChangeExtension(filename, ".xnb")); // Preprocess. Preprocessor pp = new Preprocessor(effect, processorContext, fullFilePath); pp.AddMacro("TEST2", "1"); var mgPreprocessed = pp.Preprocess(); Assert.That(processorContext._dependencies, Has.Count.EqualTo(1)); Assert.That(Path.GetFileName(processorContext._dependencies[0]), Is.EqualTo("PreprocessorInclude.fxh")); Assert.That(mgPreprocessed, Does.Not.Contain("Foo")); Assert.That(mgPreprocessed, Does.Contain("Bar")); Assert.That(mgPreprocessed, Does.Not.Contain("Baz")); Assert.That(mgPreprocessed, Does.Contain("FOO")); Assert.That(mgPreprocessed, Does.Not.Contain("BAR")); // Check that we can actually compile this file. BuildEffect(filename, TargetPlatform.Windows); } #endif [Test] [TestCase("Assets/Effects/ParserTest.fx")] public void TestParser(string effectFile) { BuildEffect(effectFile, TargetPlatform.Windows, optimize: false); } [Test] public void TestDefines() { Assert.DoesNotThrow(() => BuildEffect("Assets/Effects/DefinesTest.fx", TargetPlatform.Windows, optimize: false, "MACRO_DEFINE_TEST=3")); Assert.Throws(() => BuildEffect("Assets/Effects/DefinesTest.fx", TargetPlatform.Windows, optimize: false, "MACRO_DEFINE_TEST=4")); Assert.Throws(() => BuildEffect("Assets/Effects/DefinesTest.fx", TargetPlatform.Windows, optimize: false)); Assert.Throws(() => BuildEffect("Assets/Effects/DefinesTest.fx", TargetPlatform.Windows, optimize: false, "INVALID_SYNTAX;ANOTHER_MACRO;MACRO_DEFINE_TEST=3")); } [Test] [TestCase("Assets/Effects/Stock/AlphaTestEffect.fx", false)] [TestCase("Assets/Effects/Stock/BasicEffect.fx", true)] [TestCase("Assets/Effects/Stock/DualTextureEffect.fx", false)] [TestCase("Assets/Effects/Stock/EnvironmentMapEffect.fx", false)] [TestCase("Assets/Effects/Stock/SkinnedEffect.fx", true)] [TestCase("Assets/Effects/Stock/SpriteEffect.fx", false)] public void BuildStockEffect(string effectFile, bool optimize) { BuildEffect(effectFile, TargetPlatform.Windows, optimize: optimize); } private void BuildEffect(string effectFile, TargetPlatform targetPlatform, bool optimize, string defines = null) { var importerContext = new ImporterContext(); var importer = new EffectImporter(); var input = importer.Import(effectFile, importerContext); Assert.NotNull(input); var processorContext = new TestProcessorContext(targetPlatform, Path.ChangeExtension(effectFile, ".xnb")); var processor = new EffectProcessor { Defines = defines }; if (optimize == true) processor.DebugMode = EffectProcessorDebugMode.Optimize; var output = processor.Process(input, processorContext); Assert.NotNull(output); // TODO: Should we test the writer? } } } ================================================ FILE: Tests/ContentPipeline/FbxImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using NUnit.Framework; using System.Collections.Generic; using System.IO; namespace Kni.Tests.ContentPipeline { class FbxImporterTests { // XNA only supported up to the FBX 6.1.0 format // where as we only support FBX 7.1.0 and newer // via the Open Asset Importer. // // - This is annoying for users porting old samples. // - Conversion could loose data from the original FBX. // - Do we care to resolve this in the future? // #if XNA const string DudeFbx = "Assets/Models/Dude/dude.fbx"; #else const string DudeFbx = "Assets/Models/Dude/dude_2011.fbx"; #endif [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); var importer = new FbxImporter(); Assert.Throws(() => importer.Import(null, context)); Assert.Throws(() => importer.Import("does_not_exist", context)); // XNA bug/omission: crashes with a NullReferenceException // where as we correctly throw a ArgumentNullException. #if XNA Assert.Throws(() => importer.Import(DudeFbx, null)); #else Assert.Throws(() => importer.Import("file", null)); #endif } [Test] public void Dude() { var context = new TestImporterContext("TestObj", "TestBin"); var importer = new FbxImporter(); var nodeContent = importer.Import(DudeFbx, context); Assert.AreEqual("RootNode", nodeContent.Name); Assert.AreEqual(null, nodeContent.Parent); Assert.AreEqual(0, nodeContent.Animations.Count); Assert.AreEqual(Matrix.Identity, nodeContent.Transform); Assert.AreEqual(Matrix.Identity, nodeContent.AbsoluteTransform); Assert.NotNull(nodeContent.Identity); Assert.NotNull(nodeContent.Identity.SourceFilename); Assert.IsNull(nodeContent.Identity.FragmentIdentifier); Assert.AreEqual("FbxImporter", nodeContent.Identity.SourceTool); Assert.AreEqual(2, nodeContent.Children.Count); // MeshContent Assert.IsInstanceOf(nodeContent.Children[0]); var meshContent = nodeContent.Children[0] as MeshContent; Assert.AreEqual("him", meshContent.Name); Assert.AreEqual(nodeContent, meshContent.Parent); Assert.AreEqual(0, meshContent.Children.Count); Assert.AreEqual(0, meshContent.Animations.Count); Assert.AreEqual(0, meshContent.OpaqueData.Count); Assert.AreEqual(Matrix.Identity, meshContent.AbsoluteTransform); Assert.AreEqual(Matrix.Identity, meshContent.Transform); Assert.AreEqual(5, meshContent.Geometry.Count); // TODO: MG returns more positions than XNA. // // - Is this a bug in our FbxImporer? // - A limitation of AssImp? // - Conversion bug from FBX 6.1.0 to FBX 7.1.0? // - Are we missing some welding of verts? // #if XNA Assert.AreEqual(11433, meshContent.Positions.Count); #else Assert.AreEqual(13126, meshContent.Positions.Count); #endif // MaterialContent var materials = new Dictionary(); foreach (var g in meshContent.Geometry) { Assert.IsNull(g.Name); //Assert.IsNull(g.Identity); Assert.AreEqual(meshContent, g.Parent); Assert.AreEqual(0, g.OpaqueData.Count); Assert.Greater(g.Indices.Count, 0); Assert.Greater(g.Vertices.VertexCount, 0); Assert.Greater(g.Vertices.Positions.Count, 0); Assert.Greater(g.Vertices.PositionIndices.Count, 0); Assert.NotNull(g.Material); Assert.IsInstanceOf(g.Material); Assert.NotNull(g.Material.Identity); Assert.NotNull(g.Material.Identity.SourceFilename); Assert.IsNull(g.Material.Identity.FragmentIdentifier); Assert.AreEqual("FbxImporter", g.Material.Identity.SourceTool); Assert.NotNull(g.Material.Name); Assert.IsFalse(materials.ContainsKey(g.Material.Name)); materials.Add(g.Material.Name, g.Material as BasicMaterialContent); } Assert.AreEqual(5, materials.Count); foreach (var m in materials.Values) { Assert.AreEqual(1, m.Alpha); Assert.AreEqual(new Vector3(0.0f, 0.0f, 0.0f), m.EmissiveColor); Assert.AreEqual(new Vector3(0.5f, 0.5f, 0.5f), m.SpecularColor); Assert.AreEqual(null, m.VertexColorEnabled); Assert.AreEqual(3, m.Textures.Count); Assert.AreEqual(m.Texture, m.Textures["Texture"]); Assert.IsNull(m.Textures["Texture"].Name); Assert.IsNull(m.Textures["Specular"].Name); Assert.IsNull(m.Textures["Bump"].Name); Assert.AreEqual("TextureCoordinate0", m.Textures["Texture"].OpaqueData["TextureCoordinate"]); Assert.AreEqual("TextureCoordinate0", m.Textures["Specular"].OpaqueData["TextureCoordinate"]); Assert.AreEqual("TextureCoordinate0", m.Textures["Bump"].OpaqueData["TextureCoordinate"]); } Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials["character_anim:headM"].DiffuseColor); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials["character_anim:jacketM"].DiffuseColor); Assert.AreEqual(new Vector3(0.8f, 0.8f, 0.8f), materials["character_anim:pantsM"].DiffuseColor); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials["character_anim:upBodyM"].DiffuseColor); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), materials["character_anim:eyeBallM"].DiffuseColor); Assert.AreEqual(1.24573088f, materials["character_anim:headM"].SpecularPower, 0.00001f); Assert.AreEqual(1.24573088f, materials["character_anim:jacketM"].SpecularPower, 0.00001f); Assert.AreEqual(1.24573088f, materials["character_anim:pantsM"].SpecularPower, 0.00001f); Assert.AreEqual(1.19371974f, materials["character_anim:upBodyM"].SpecularPower, 0.00001f); Assert.AreEqual(65.986f, materials["character_anim:eyeBallM"].SpecularPower, 0.00001f); Paths.AreEqual(@"Assets/Models/Dude/head.tga", materials["character_anim:headM"].Textures["Texture"].Filename); Paths.AreEqual(@"Assets/Models/Dude/headS.tga", materials["character_anim:headM"].Textures["Specular"].Filename); Paths.AreEqual(@"Assets/Models/Dude/headN.tga", materials["character_anim:headM"].Textures["Bump"].Filename); Paths.AreEqual(@"Assets/Models/Dude/jacket.tga", materials["character_anim:jacketM"].Textures["Texture"].Filename); Paths.AreEqual(@"Assets/Models/Dude/jacketS.tga", materials["character_anim:jacketM"].Textures["Specular"].Filename); Paths.AreEqual(@"Assets/Models/Dude/jacketN.tga", materials["character_anim:jacketM"].Textures["Bump"].Filename); Paths.AreEqual(@"Assets/Models/Dude/pants.tga", materials["character_anim:pantsM"].Textures["Texture"].Filename); Paths.AreEqual(@"Assets/Models/Dude/pantsS.tga", materials["character_anim:pantsM"].Textures["Specular"].Filename); Paths.AreEqual(@"Assets/Models/Dude/pantsN.tga", materials["character_anim:pantsM"].Textures["Bump"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upBodyC.tga", materials["character_anim:upBodyM"].Textures["Texture"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upBodyS.tga", materials["character_anim:upBodyM"].Textures["Specular"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upbodyN.tga", materials["character_anim:upBodyM"].Textures["Bump"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upBodyC.tga", materials["character_anim:eyeBallM"].Textures["Texture"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upBodyS.tga", materials["character_anim:eyeBallM"].Textures["Specular"].Filename); Paths.AreEqual(@"Assets/Models/Dude/upbodyN.tga", materials["character_anim:eyeBallM"].Textures["Bump"].Filename); // BoneContent Assert.IsInstanceOf(nodeContent.Children[1]); var bonehContent = nodeContent.Children[1] as BoneContent; Assert.AreEqual("Root", bonehContent.Name); Assert.AreEqual(1, bonehContent.Children.Count); // TODO: MG doesn't return this. // // - Is this a bug in our FbxImporer? // - A limitation of AssImp? // - Conversion bug from FBX 6.1.0 to FBX 7.1.0? // - What is "liw" and why is it false? // - Do we care about this incompatibility? // #if XNA Assert.AreEqual(1, bonehContent.OpaqueData.Count); Assert.AreEqual(false, bonehContent.OpaqueData["liw"]); #endif // AnimationContent Assert.AreEqual(1, bonehContent.Animations.Count); Assert.IsTrue(bonehContent.Animations.ContainsKey("Take 001")); var animationContent = bonehContent.Animations["Take 001"]; Assert.AreEqual("Take 001", animationContent.Name); Assert.AreEqual(0, animationContent.OpaqueData.Count); // TODO: A few channels are missing from XNA: // // - Is this a bug in our FbxImporer? // - A limitation of AssImp? // - Conversion bug from FBX 6.1.0 to FBX 7.1.0? // - Do these missing channels matter? // #if XNA Assert.AreEqual(58, animationContent.Channels.Count); #endif var channels = new[] { "Pelvis", "Spine1", "Spine2", "Spine3", "Neck", "Head", "L_eye_joint1", "R_eye_joint", "L_eyeBall_joint2", "R_eyeBall_joint", "L_UpperArm", "L_Forearm", "L_Hand", "L_Thumb1", "L_Thumb2", "L_Thumb3", "L_Index1", "L_Index2", "L_Index3", "L_Middle1", "L_Middle2", "L_Middle3", "L_Ring1", "L_Ring2", "L_Ring3", "L_Pinky1", "L_Pinky2", "L_Pinky3", "R_UpperArm", "R_Forearm", "R_Hand", "R_Thumb1", "R_Thumb2", "R_Thumb3", "R_Index1", "R_Index2", "R_Index3", "R_Middle1", "R_Middle2", "R_Middle3", "R_Ring1", "R_Ring2", "R_Ring3", "R_Pinky1", "R_Pinky2", "R_Pinky3", "L_Thigh1", "L_Knee2", "L_Ankle1", "L_Ball", "R_Thigh", "R_Knee", "R_Ankle", "R_Ball", // TODO: These channels are missing in MG! #if XNA "Root", "Spine", "L_Clavicle", "R_Clavicle", #endif }; foreach (var name in channels) Assert.IsTrue(animationContent.Channels.ContainsKey(name), "Channels.ContainsKey failed: " + name); foreach (var c in animationContent.Channels.Values) Assert.Greater(c.Count, 0); // Looking at the content of the FBX ASCII I can see the math is: // // (57732697500 - 1924423250) / 46186158000 = 1.2083333 seconds // // Which is the correct result and what our FBX importer returns. // I highly suspect that XNA was wrong. // // https://github.com/assimp/assimp/issues/1720 // #if XNA Assert.AreEqual(12670000, animationContent.Duration.Ticks); #else Assert.AreEqual(12083333, animationContent.Duration.Ticks); #endif // TODO: XNA assigns the identity to null on all NodeContent // other than the one returned from the importer. // // - Is this something we should fix? // #if XNA Assert.IsNull(meshContent.Identity); Assert.IsNull(bonehContent.Identity); Assert.IsNull(animationContent.Identity); #endif } } } ================================================ FILE: Tests/ContentPipeline/FontDescriptionProcessorTests.cs ================================================ using System; using System.IO; using System.Xml; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class FontDescriptionProcessorTests { static object[] textureFormats = new object[] { new object[] { TargetPlatform.DesktopGL, TextureProcessorOutputFormat.Color, }, new object[] { TargetPlatform.DesktopGL, TextureProcessorOutputFormat.Color16Bit, }, new object[] { TargetPlatform.DesktopGL, TextureProcessorOutputFormat.Compressed, }, new object[] { TargetPlatform.Android, TextureProcessorOutputFormat.Etc1Compressed, }, new object[] { TargetPlatform.iOS, TextureProcessorOutputFormat.PvrCompressed, }, new object[] { TargetPlatform.iOS, TextureProcessorOutputFormat.Compressed, }, new object[] { TargetPlatform.Android, TextureProcessorOutputFormat.Compressed, }, new object[] { TargetPlatform.Windows, TextureProcessorOutputFormat.Compressed, }, }; [Test] [TestCaseSource("textureFormats")] public void BuildLocalizedFont(TargetPlatform platform, TextureProcessorOutputFormat format) { TestProcessorContext context = new TestProcessorContext(platform, "Localized.xnb"); LocalizedFontProcessor processor = new LocalizedFontProcessor(); processor.TextureFormat = format; processor.PremultiplyAlpha = true; LocalizedFontDescription fontDescription = null; using (FileStream fs = File.OpenRead(Path.Combine("Assets", "Fonts", "Localized.spritefont"))) using (XmlReader input = XmlReader.Create(new StreamReader(fs))) fontDescription = IntermediateSerializer.Deserialize(input, ""); fontDescription.Identity = new ContentIdentity("Localized.spritefont"); SpriteFontContent output = processor.Process(fontDescription, context); Assert.IsNotNull(output, "output should not be null"); Assert.IsNotNull(output.Texture, "output.Texture should not be null"); Type textureType = output.Texture.Faces[0][0].GetType(); switch (format) { case TextureProcessorOutputFormat.Color: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Color16Bit: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Compressed: switch (platform) { case TargetPlatform.Windows: case TargetPlatform.DesktopGL: Assert.IsTrue(textureType == typeof(Dxt3BitmapContent)); break; case TargetPlatform.iOS: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TargetPlatform.Android: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; } break; case TextureProcessorOutputFormat.PvrCompressed: // because the font is not power of 2 we should use Brga4444 Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Etc1Compressed: // because the font has Alpha we should use Brga4444 Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; default: Assert.Fail("Test not written for " + format); break; } } [Test] [TestCaseSource("textureFormats")] public void BuildFontFromDescription(TargetPlatform platform, TextureProcessorOutputFormat format) { TestProcessorContext context = new TestProcessorContext(platform, "Arial.xnb"); FontDescriptionProcessor processor = new FontDescriptionProcessor(); processor.TextureFormat = format; processor.PremultiplyAlpha = true; FontDescription fontDescription = null; using (XmlReader input = XmlReader.Create(new StringReader(ArialFont))) fontDescription = IntermediateSerializer.Deserialize(input, ""); fontDescription.Identity = new ContentIdentity("Arial.spritefont"); SpriteFontContent output = processor.Process(fontDescription, context); Assert.IsNotNull(output, "output should not be null"); Assert.IsNotNull(output.Texture, "output.Texture should not be null"); Type textureType = output.Texture.Faces[0][0].GetType(); switch (format) { case TextureProcessorOutputFormat.Color: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Color16Bit: // because the font has Alpha we should use Brga4444 Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Compressed: switch (platform) { case TargetPlatform.Windows: case TargetPlatform.DesktopGL: Assert.IsTrue(textureType == typeof(Dxt3BitmapContent)); break; case TargetPlatform.iOS: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TargetPlatform.Android: Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; } break; case TextureProcessorOutputFormat.PvrCompressed: // because the font is not power of 2 we should use Brga4444 Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Etc1Compressed: // because the font has Alpha we should use Brga4444 Assert.IsTrue(textureType == typeof(PixelBitmapContent)); break; default: Assert.Fail("Test not written for " + format); break; } } static string ArialFont = @" Arial 20 0 true ~ "; } } ================================================ FILE: Tests/ContentPipeline/FontDescriptionTests.cs ================================================ using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class FontDescriptionTests { [Test] public void ValidateMembers() { { var font = new FontDescription("FontName", 12.34f, 5.67f); Assert.NotNull(font.Characters); Assert.AreEqual(0, font.Characters.Count); Assert.IsNull(font.DefaultCharacter); Assert.AreEqual("FontName", font.FontName); Assert.AreEqual(12.34f, font.Size); Assert.AreEqual(5.67f, font.Spacing); Assert.AreEqual(FontDescriptionStyle.Regular, font.Style); Assert.AreEqual(false, font.UseKerning); Assert.IsNull(font.Identity); Assert.IsNull(font.Name); Assert.NotNull(font.OpaqueData); Assert.AreEqual(0, font.OpaqueData.Count); } { var font = new FontDescription("FontName", 12.34f, 5.67f, FontDescriptionStyle.Italic); Assert.NotNull(font.Characters); Assert.AreEqual(0, font.Characters.Count); Assert.IsNull(font.DefaultCharacter); Assert.AreEqual("FontName", font.FontName); Assert.AreEqual(12.34f, font.Size); Assert.AreEqual(5.67f, font.Spacing); Assert.AreEqual(FontDescriptionStyle.Italic, font.Style); Assert.AreEqual(false, font.UseKerning); Assert.IsNull(font.Identity); Assert.IsNull(font.Name); Assert.NotNull(font.OpaqueData); Assert.AreEqual(0, font.OpaqueData.Count); } { var font = new FontDescription("FontName", 12.34f, 5.67f, FontDescriptionStyle.Bold, true); Assert.NotNull(font.Characters); Assert.AreEqual(0, font.Characters.Count); Assert.IsNull(font.DefaultCharacter); Assert.AreEqual("FontName", font.FontName); Assert.AreEqual(12.34f, font.Size); Assert.AreEqual(5.67f, font.Spacing); Assert.AreEqual(FontDescriptionStyle.Bold, font.Style); Assert.AreEqual(true, font.UseKerning); Assert.IsNull(font.Identity); Assert.IsNull(font.Name); Assert.NotNull(font.OpaqueData); Assert.AreEqual(0, font.OpaqueData.Count); } Assert.Throws(() => new FontDescription(null, 1, 1)); Assert.Throws(() => new FontDescription("", 1, 1)); Assert.Throws(() => new FontDescription("Aye", 0, 1)); Assert.Throws(() => new FontDescription("Aye", -1, 1)); { var font = new FontDescription("Bee", 1, 1); font.DefaultCharacter = 'A'; Assert.AreEqual('A', font.DefaultCharacter); font.DefaultCharacter = null; Assert.IsNull(font.DefaultCharacter); font.FontName = "See"; Assert.AreEqual("See", font.FontName); Assert.Throws(() => font.FontName = null); Assert.Throws(() => font.FontName = ""); font.Size = 2; Assert.AreEqual(2, font.Size); Assert.Throws(() => font.Size = 0); Assert.Throws(() => font.Size = -1); font.Spacing = 2; Assert.AreEqual(2, font.Spacing); font.Spacing = 0; Assert.AreEqual(0, font.Spacing); font.Spacing = -2; Assert.AreEqual(-2, font.Spacing); font.Style = FontDescriptionStyle.Italic; Assert.AreEqual(FontDescriptionStyle.Italic, font.Style); font.UseKerning = true; Assert.AreEqual(true, font.UseKerning); } } } } ================================================ FILE: Tests/ContentPipeline/FontTextureProcessorTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class FontTextureProcessorTests { [Test] public void ValidateDefaults() { var processor = new FontTextureProcessor(); Assert.AreEqual(' ', processor.FirstCharacter); Assert.AreEqual(true, processor.PremultiplyAlpha); Assert.AreEqual(TextureProcessorOutputFormat.Color, processor.TextureFormat); } [Test] public void ColorConversion() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new FontTextureProcessor { FirstCharacter = '0', PremultiplyAlpha = false }; var face = new PixelBitmapContent(32, 9); var O = Color.Transparent.PackedValue; var M = Color.Fuchsia.PackedValue; var R = Color.Red.PackedValue; var G = Color.Green.PackedValue; var B = Color.Blue.PackedValue; var W = Color.White.PackedValue; var pixelData = new[] { M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, O, O, W, W, O, O, M, M, O, O, O, R, O, O, M, M, O, G, G, G, O, O, M, M, O, B, B, B, B, O, M, M, O, W, O, O, W, O, M, M, O, O, R, R, O, O, M, M, O, O, O, O, G, O, M, M, O, O, O, B, O, O, M, M, O, W, O, O, W, O, M, M, O, O, O, R, O, O, M, M, O, O, G, G, O, O, M, M, O, O, B, B, O, O, M, M, O, W, O, O, W, O, M, M, O, O, O, R, O, O, M, M, O, G, O, O, O, O, M, M, O, O, O, O, B, O, M, M, O, O, W, W, O, O, M, M, O, R, R, R, R, O, M, M, O, G, G, G, G, O, M, M, O, B, B, B, O, O, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, O, O, O, O, O, O, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, }; var pixelBytes = new byte[face.Width * 4 * face.Height]; Buffer.BlockCopy(pixelData, 0, pixelBytes, 0, pixelData.Length * 4); face.SetPixelData(pixelBytes); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(output.CharacterMap[0], '0'); Assert.AreEqual(output.CharacterMap[1], '1'); Assert.AreEqual(output.CharacterMap[2], '2'); Assert.AreEqual(output.CharacterMap[3], '3'); Assert.AreEqual(1, output.Texture.Faces.Count); Assert.AreEqual(1, output.Texture.Faces[0].Count); Assert.IsAssignableFrom>(output.Texture.Faces[0][0]); var outFace = (PixelBitmapContent)output.Texture.Faces[0][0]; for (var i = 0; i < 4; i++) { // (2, 2, 4, 5) is the top,left and width,height of the first glyph. All test glyphs are 4x5 var inRect = new Rectangle(i * 8 + 2, 2, 4, 5); var outRect = output.Glyphs[i]; Assert.AreEqual(inRect.Width, outRect.Width); Assert.AreEqual(inRect.Height, outRect.Height); for (var y = 0; y < inRect.Height; y++) for (var x = 0; x < inRect.Width; x++) Assert.AreEqual(pixelData[(x + inRect.Left) + (y + inRect.Top) * face.Width], outFace.GetPixel(x + outRect.Left, y + outRect.Top).PackedValue); } Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[0]); Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[1]); Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[2]); Assert.AreEqual(new Rectangle(1, 1, 6, 7), output.Cropping[3]); } } } ================================================ FILE: Tests/ContentPipeline/IntermediateDeserializerTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Xml; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; #if XNA using System.Reflection; #endif namespace Kni.Tests.ContentPipeline { // These tests are based on "Everything you ever wanted to know about IntermediateSerializer" by Shawn Hargreaves // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx class IntermediateDeserializerTest { class TestContentManager : ContentManager { class FakeGraphicsService : IGraphicsDeviceService { public GraphicsDevice GraphicsDevice { get; private set; } #pragma warning disable 67 public event EventHandler DeviceCreated; public event EventHandler DeviceDisposing; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; #pragma warning restore 67 } class FakeServiceProvider : IServiceProvider { public object GetService(Type serviceType) { if (serviceType == typeof(IGraphicsDeviceService)) return new FakeGraphicsService(); throw new NotImplementedException(); } } private readonly byte[] _bufferData; public TestContentManager(byte[] bufferData) : base(new FakeServiceProvider(), "NONE") { _bufferData = bufferData; } protected override Stream OpenStream(string assetName) { return new MemoryStream(_bufferData, false); } } private static void DeserializeCompileAndLoad(string file, Action doAsserts) { T result = Deserialize(file); doAsserts((T)result); T loaded = CompileAndLoad(result); doAsserts(loaded); } private static T Deserialize(string file) { object result; var filePath = Paths.Xml(file); using (var reader = XmlReader.Create(filePath)) result = IntermediateSerializer.Deserialize(reader, filePath); Assert.NotNull(result); Assert.IsAssignableFrom(result); return (T)result; } private static T CompileAndLoad(T result) { MemoryStream xnbStream = new MemoryStream(); #if XNA // In MS XNA the ContentCompiler is completely internal, so we need // to use just a little reflection to get access to what we need. const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public; var ctor = typeof(ContentCompiler).GetConstructors(flags)[0]; var compiler = (ContentCompiler)ctor.Invoke(null); var compileMethod = typeof(ContentCompiler).GetMethod("Compile", flags); compileMethod.Invoke(compiler, new object[] { xnbStream, result, TargetPlatform.Windows, GraphicsProfile.Reach, false, Directory.GetCurrentDirectory(), "referenceRelocationPath" }); #else ContentCompiler compiler = new ContentCompiler(); compiler.Compile(xnbStream, result, TargetPlatform.Windows, GraphicsProfile.Reach, ContentCompression.Uncompressed, "rootDirectory", "referenceRelocationPath"); #endif byte[] bufferData = xnbStream.ToArray(); ContentManager content = new TestContentManager(bufferData); T loaded = content.Load("Whatever"); return loaded; } [Test] public void TheBasics() { DeserializeCompileAndLoad("01_TheBasics.xml", theBasics => { Assert.AreEqual(1, theBasics.PublicField); Assert.AreEqual(0, theBasics.InternalField); Assert.AreEqual("Hello World", theBasics.GetSetProperty); Assert.NotNull(theBasics.Nested); Assert.AreEqual("Shawn", theBasics.Nested.Name); Assert.AreEqual(true, theBasics.Nested.IsEnglish); Assert.NotNull(theBasics.Nested2); Assert.AreEqual("Shawn", theBasics.Nested2.Name); Assert.AreEqual(true, theBasics.Nested2.IsEnglish); Assert.AreNotSame(theBasics.Nested, theBasics.Nested2); }); } [Test] public void Inheritance() { DeserializeCompileAndLoad("02_Inheritance.xml", inheritance => { Assert.AreEqual(23, inheritance.elf); Assert.AreEqual("world", inheritance.hello); }); } [Test] public void IncludingPrivateMembers() { DeserializeCompileAndLoad("03_IncludingPrivateMembers.xml", including => { Assert.AreEqual(23, including.GetElfValue()); }); } [Test] public void ExcludingPublicMembers() { var filePath = Paths.Xml("04_ExcludingPublicMembers.xml"); using (var reader = XmlReader.Create(filePath)) { // This should throw an InvalidContentException as the // xml tries to set the element which has a // [ContentSerializerIgnore] attribute. Assert.Throws(() => IntermediateSerializer.Deserialize(reader, filePath)); } } [Test] public void RenamingXmlElements() { DeserializeCompileAndLoad("05_RenamingXmlElements.xml", renaming => { Assert.AreEqual("world", renaming.hello); Assert.AreEqual(23, renaming.elf); Assert.AreEqual(80.2f, renaming.speed); Assert.AreEqual(true, renaming.isOrganic); Assert.AreEqual(new Vector2(32, 32), renaming.Dimensions); }); } [Test] public void NullReferences() { DeserializeCompileAndLoad("06_NullReferences.xml", nullref => { Assert.AreEqual(null, nullref.hello); }); } [Test] public void OptionalElements() { DeserializeCompileAndLoad("07_OptionalElements.xml", optional => { Assert.AreEqual(null, optional.a); Assert.AreEqual(null, optional.b); Assert.AreEqual(string.Empty, optional.c); Assert.AreEqual(null, optional.d); Assert.AreEqual(CullMode.CullClockwiseFace, optional.e); Assert.AreEqual(CullMode.CullCounterClockwiseFace, optional.f); Assert.AreEqual(CullMode.CullClockwiseFace, optional.g); }); } [Test] public void AllowNull() { var filePath = Paths.Xml("08_AllowNull.xml"); using (var reader = XmlReader.Create(filePath)) { // This should throw an InvalidContentException as the // xml tries to set the element which has a // [ContentSerializerIgnore] attribute. Assert.Throws(() => IntermediateSerializer.Deserialize(reader, filePath)); } } [Test] public void Collections() { DeserializeCompileAndLoad("09_Collections.xml", collections => { Assert.NotNull(collections.StringArray); Assert.AreEqual(2, collections.StringArray.Length); Assert.AreEqual("Hello", collections.StringArray[0]); Assert.AreEqual("World", collections.StringArray[1]); Assert.NotNull(collections.StringList); Assert.AreEqual(4, collections.StringList.Count); Assert.AreEqual("This", collections.StringList[0]); Assert.AreEqual("is", collections.StringList[1]); Assert.AreEqual("a", collections.StringList[2]); Assert.AreEqual("test", collections.StringList[3]); Assert.NotNull(collections.IntArray); Assert.AreEqual(5, collections.IntArray.Length); Assert.AreEqual(1, collections.IntArray[0]); Assert.AreEqual(2, collections.IntArray[1]); Assert.AreEqual(3, collections.IntArray[2]); Assert.AreEqual(23, collections.IntArray[3]); Assert.AreEqual(42, collections.IntArray[4]); Assert.NotNull(collections.ColorArray); Assert.AreEqual(4, collections.ColorArray.Length); Assert.AreEqual(new Color(0x88, 0x65, 0x42, 0xFF), collections.ColorArray[0]); Assert.AreEqual(new Color(0x91, 0x6B, 0x46, 0xFF), collections.ColorArray[1]); Assert.AreEqual(new Color(0x91, 0x7B, 0x46, 0xFF), collections.ColorArray[2]); Assert.AreEqual(new Color(0x88, 0x65, 0x43, 0xFF), collections.ColorArray[3]); Assert.NotNull(collections.CustomItemList); Assert.AreEqual(0, collections.CustomItemList.Count); }); } [Test] public void CollectionItemName() { DeserializeCompileAndLoad("10_CollectionItemName.xml", collections => { Assert.NotNull(collections.StringArray); Assert.AreEqual(2, collections.StringArray.Length); Assert.AreEqual("Hello", collections.StringArray[0]); Assert.AreEqual("World", collections.StringArray[1]); }); } [Test] public void Dictionaries() { DeserializeCompileAndLoad("11_Dictionaries.xml", dictionaries => { Assert.NotNull(dictionaries.TestDictionary); Assert.AreEqual(2, dictionaries.TestDictionary.Count); Assert.AreEqual(true, dictionaries.TestDictionary[23]); Assert.AreEqual(false, dictionaries.TestDictionary[42]); }); } [Test] public void MathTypes() { DeserializeCompileAndLoad("12_MathTypes.xml", mathTypes => { Assert.AreEqual(new Point(1, 2), mathTypes.Point); Assert.AreEqual(new Rectangle(1, 2, 3, 4), mathTypes.Rectangle); Assert.AreEqual(new Vector2(1, 2), mathTypes.Vector2); Assert.AreEqual(new Vector3(1, 2, 3.1f), mathTypes.Vector3); Assert.AreEqual(new Vector4(1, 2, 3, 4), mathTypes.Vector4); Assert.AreEqual(new Quaternion(1, 2, 3, 4), mathTypes.Quaternion); Assert.AreEqual(new Plane(1, 2, 3, 4), mathTypes.Plane); Assert.AreEqual(new Matrix(1, 2, 3, 4, 5 , 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), mathTypes.Matrix); Assert.AreEqual(Color.CornflowerBlue, mathTypes.Color); Assert.NotNull(mathTypes.Vector2Array); Assert.AreEqual(2, mathTypes.Vector2Array.Length); Assert.AreEqual(Vector2.Zero, mathTypes.Vector2Array[0]); Assert.AreEqual(Vector2.One, mathTypes.Vector2Array[1]); Assert.AreEqual(3, mathTypes.Vector2List.Count); Assert.AreEqual(new Vector2(1, 7), mathTypes.Vector2List[0]); Assert.AreEqual(new Vector2(1, 9), mathTypes.Vector2List[1]); Assert.AreEqual(new Vector2(1, 10), mathTypes.Vector2List[2]); Assert.AreEqual(0, mathTypes.Vector2ListEmpty.Count); }); } [Test] public void PolymorphicTypes() { DeserializeCompileAndLoad("13_PolymorphicTypes.xml", polymorphicTypes => { Assert.AreEqual("World", polymorphicTypes.Hello); Assert.AreEqual(23, polymorphicTypes.Elf); Assert.NotNull(polymorphicTypes.TypedArray); Assert.AreEqual(3, polymorphicTypes.TypedArray.Length); Assert.IsAssignableFrom(polymorphicTypes.TypedArray[0]); Assert.AreEqual(true, polymorphicTypes.TypedArray[0].Value); Assert.IsAssignableFrom(polymorphicTypes.TypedArray[1]); Assert.AreEqual(true, polymorphicTypes.TypedArray[1].Value); Assert.IsAssignableFrom(polymorphicTypes.TypedArray[2]); Assert.AreEqual(true, polymorphicTypes.TypedArray[2].Value); Assert.NotNull(polymorphicTypes.UntypedArray); Assert.AreEqual(3, polymorphicTypes.UntypedArray.Length); Assert.IsAssignableFrom(polymorphicTypes.UntypedArray.GetValue(0)); Assert.AreEqual(true, ((PolymorphicA)polymorphicTypes.UntypedArray.GetValue(0)).Value); Assert.IsAssignableFrom(polymorphicTypes.UntypedArray.GetValue(1)); Assert.AreEqual(true, ((PolymorphicB)polymorphicTypes.UntypedArray.GetValue(1)).Value); Assert.IsAssignableFrom(polymorphicTypes.UntypedArray.GetValue(2)); Assert.AreEqual(true, ((PolymorphicC)polymorphicTypes.UntypedArray.GetValue(2)).Value); Assert.NotNull(polymorphicTypes.IntCollection); Assert.IsInstanceOf>(polymorphicTypes.IntCollection); Assert.AreEqual(3, polymorphicTypes.IntCollection.Count); Assert.AreEqual(1, polymorphicTypes.IntCollection.ElementAt(0)); Assert.AreEqual(4, polymorphicTypes.IntCollection.ElementAt(1)); Assert.AreEqual(6, polymorphicTypes.IntCollection.ElementAt(2)); Assert.NotNull(polymorphicTypes.UntypedDictionary); Assert.IsInstanceOf>(polymorphicTypes.UntypedDictionary); Assert.AreEqual(2, ((Dictionary) polymorphicTypes.UntypedDictionary).Count); Assert.AreEqual(true, ((Dictionary) polymorphicTypes.UntypedDictionary)[1].Value); Assert.AreEqual(false, ((Dictionary) polymorphicTypes.UntypedDictionary)[5].Value); }); } [Test] public void Namespaces() { DeserializeCompileAndLoad("14_Namespaces.xml", namespaceClass => { Assert.IsAssignableFrom(namespaceClass.A); Assert.AreEqual(true, ((NamespaceHelper)namespaceClass.A).Value); Assert.IsAssignableFrom(namespaceClass.B); Assert.AreEqual(Vector2.Zero, namespaceClass.B); Assert.IsAssignableFrom(namespaceClass.C); Assert.AreEqual(SpriteSortMode.Immediate, namespaceClass.C); Assert.IsAssignableFrom(namespaceClass.D); Assert.AreEqual(true, ((Nested.ContentPipeline.ClassInsideNestedAmbiguousNamespace) namespaceClass.D).Value); Assert.IsAssignableFrom(namespaceClass.E); Assert.AreEqual(true, ((Nested.ClassInsideNestedNamespace) namespaceClass.E).Value); Assert.IsAssignableFrom(namespaceClass.F); Assert.AreEqual(true, ((Nested.ContentPipeline2.ClassInsideNestedUnambiguousNamespace) namespaceClass.F).Value); Assert.IsAssignableFrom(namespaceClass.G); Assert.AreEqual(true, ((SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace) namespaceClass.G).Value); Assert.IsNull(namespaceClass.H); }); } [Test] public void FlattenContent() { DeserializeCompileAndLoad("15_FlattenContent.xml", flattenContent => { Assert.IsAssignableFrom(flattenContent.Nested); Assert.NotNull(flattenContent.Nested); Assert.AreEqual("Shawn", flattenContent.Nested.Name); Assert.AreEqual(true, flattenContent.Nested.IsEnglish); Assert.NotNull(flattenContent.Collection); Assert.AreEqual(2, flattenContent.Collection.Length); Assert.AreEqual("Hello", flattenContent.Collection[0]); Assert.AreEqual("World", flattenContent.Collection[1]); }); } [Test] public void SharedResources() { DeserializeCompileAndLoad("16_SharedResources.xml", sharedResources => { Assert.NotNull(sharedResources.Head); Assert.AreEqual(1, sharedResources.Head.Value); Assert.NotNull(sharedResources.Head.Next); Assert.AreEqual(2, sharedResources.Head.Next.Value); Assert.NotNull(sharedResources.Head.Next.Next); Assert.AreEqual(3, sharedResources.Head.Next.Next.Value); Assert.AreSame(sharedResources.Head, sharedResources.Head.Next.Next.Next); Assert.NotNull(sharedResources.LinkedArray); Assert.AreEqual(2, sharedResources.LinkedArray.Length); Assert.IsNotNull(sharedResources.LinkedArray[0].Next); Assert.AreEqual(2, sharedResources.LinkedArray[0].Next.Length); Assert.IsNotNull(sharedResources.LinkedArray[1].Next); Assert.AreEqual(1, sharedResources.LinkedArray[1].Next.Length); Assert.AreSame(sharedResources.LinkedArray[0].Next, sharedResources.LinkedArray[1].Next[0].Next); }); } [Test] public void ExternalReferences() { var externalReferences = Deserialize("17_ExternalReferences.xml"); Assert.NotNull(externalReferences.Texture); Assert.IsTrue(externalReferences.Texture.Filename.EndsWith("/Xml/grass.tga".Replace('/', Path.DirectorySeparatorChar))); Assert.NotNull(externalReferences.Texture2); Assert.IsTrue(externalReferences.Texture2.Filename.EndsWith("/Xml/grass.tga".Replace('/', Path.DirectorySeparatorChar))); Assert.AreNotSame(externalReferences.Texture, externalReferences.Texture2); Assert.NotNull(externalReferences.Shader); Assert.IsTrue(externalReferences.Shader.Filename.EndsWith("/Xml/foliage.fx".Replace('/', Path.DirectorySeparatorChar))); } [Test] public void PrimitiveTypes() { DeserializeCompileAndLoad("18_PrimitiveTypes.xml", primitiveTypes => { Assert.AreEqual('A', primitiveTypes.Char); Assert.AreEqual('°', primitiveTypes.Char2); Assert.AreEqual('Δ', primitiveTypes.Char3); Assert.AreEqual(127, primitiveTypes.Byte); Assert.AreEqual(-127, primitiveTypes.SByte); Assert.AreEqual(-1000, primitiveTypes.Short); Assert.AreEqual(1000, primitiveTypes.UShort); Assert.AreEqual(-100000, primitiveTypes.Int); Assert.AreEqual(100000, primitiveTypes.UInt); Assert.AreEqual(-10000000, primitiveTypes.Long); Assert.AreEqual(10000000, primitiveTypes.ULong); Assert.AreEqual(1234567.0f, primitiveTypes.Float); Assert.AreEqual(1234567890.0, primitiveTypes.Double); Assert.AreEqual(null, primitiveTypes.NullChar); Assert.AreEqual('B', primitiveTypes.NotNullChar); }); } [Test] public void FontDescription() { DeserializeCompileAndLoad("19_FontDescription.xml", fontDesc => { Assert.AreEqual("Foo", fontDesc.FontName); Assert.AreEqual(30.0f, fontDesc.Size); Assert.AreEqual(0.75f, fontDesc.Spacing); Assert.AreEqual(true, fontDesc.UseKerning); Assert.AreEqual(FontDescriptionStyle.Bold, fontDesc.Style); Assert.AreEqual('*', fontDesc.DefaultCharacter); var expectedCharacters = new List(); for (var c = WebUtility.HtmlDecode(" ")[0]; c <= WebUtility.HtmlDecode("~")[0]; c++) expectedCharacters.Add(c); expectedCharacters.Add(WebUtility.HtmlDecode("Δ")[0]); expectedCharacters.Add(WebUtility.HtmlDecode("°")[0]); var characters = new List(fontDesc.Characters); foreach (var c in expectedCharacters) { Assert.Contains(c, characters); characters.Remove(c); } Assert.IsEmpty(characters); var expectedStrings = new List() { "item0", "item1", "item2", }; var strings = new List(fontDesc.ExtendedListProperty); foreach (var s in expectedStrings) { Assert.Contains(s, strings); strings.Remove(s); } Assert.IsEmpty(strings); }); } [Test] public void SystemTypes() { DeserializeCompileAndLoad("20_SystemTypes.xml", sysTypes => { Assert.AreEqual(TimeSpan.FromSeconds(42.5f), sysTypes.TimeSpan); }); } [Test] public void CustomFormatting() { DeserializeCompileAndLoad>("21_CustomFormatting.xml", customFormatting => { Assert.AreEqual(1, customFormatting.A); Assert.AreEqual(3, customFormatting.Vector2ListSpaced.Count); Assert.AreEqual(new Vector2(0, 4), customFormatting.Vector2ListSpaced[0]); Assert.AreEqual(new Vector2(0, 6), customFormatting.Vector2ListSpaced[1]); Assert.AreEqual(new Vector2(0, 7), customFormatting.Vector2ListSpaced[2]); Assert.AreEqual(string.Empty, customFormatting.EmptyString); Assert.AreEqual(new Rectangle(0, 0, 100, 100), customFormatting.Rectangle); }); } [Test] public void GetterOnlyProperties() { DeserializeCompileAndLoad("22_GetterOnlyProperties.xml", getterOnlyProps => { Assert.AreEqual(3, getterOnlyProps.IntList.Count); Assert.AreEqual(1, getterOnlyProps.IntList[0]); Assert.AreEqual(2, getterOnlyProps.IntList[1]); Assert.AreEqual(3, getterOnlyProps.IntList[2]); Assert.AreEqual(0, getterOnlyProps.IntStringDictionaryWithPrivateSetter.Count); Assert.AreEqual(2, getterOnlyProps.IntStringDictionary.Count); Assert.AreEqual("Foo", getterOnlyProps.IntStringDictionary[1]); Assert.AreEqual("Bar", getterOnlyProps.IntStringDictionary[5]); Assert.AreEqual(42, getterOnlyProps.CustomClass.A); }); } [Test] public void GetterOnlyPolymorphicArrayProperties() { var filePath = Paths.Xml("23_GetterOnlyPolymorphicArrayProperties.xml"); using (var reader = XmlReader.Create(filePath)) { // This should throw an InvalidContentException as the // xml tries to deserialize into an IList property // but the property value is actually an Array. Assert.Throws(() => IntermediateSerializer.Deserialize(reader, filePath)); } } [Test] public void GenericTypes() { DeserializeCompileAndLoad("24_GenericTypes.xml", genericTypes => { Assert.IsNotNull(genericTypes.A); Assert.AreEqual(3, genericTypes.A.Value); Assert.IsNotNull(genericTypes.B); Assert.AreEqual(4.2f, genericTypes.B.Value); Assert.IsNotNull(genericTypes.C); Assert.IsNotNull(genericTypes.C.Value); Assert.AreEqual(5, genericTypes.C.Value.Value); }); } [Test] public void StructArrayNoElements() { // Note that this does not contain a matching SerializeAndAssert test as Vector2ArrayNoElements // will serialize to an empty Xml element which defeats the purpose of this test. DeserializeCompileAndLoad("25_StructArrayNoElements.xml", structArrayNoElems => { Assert.IsNotNull(structArrayNoElems.Vector2ArrayNoElements); Assert.AreEqual(0, structArrayNoElems.Vector2ArrayNoElements.Length); }); } [Test] public void ChildCollections() { // ChildCollection is a ContentPipeline-only type, so we don't need to / shouldn't // test running it through ContentCompiler. var childCollections = Deserialize("26_ChildCollections.xml"); Assert.IsNotNull(childCollections.Children); Assert.AreEqual(2, childCollections.Children.Count); Assert.AreEqual(childCollections, childCollections.Children[0].Parent); Assert.AreEqual("Foo", childCollections.Children[0].Name); Assert.AreEqual(childCollections, childCollections.Children[1].Parent); Assert.AreEqual("Bar", childCollections.Children[1].Name); } [Test] public void Colors() { DeserializeCompileAndLoad("27_Colors.xml", colors => { Assert.AreEqual(colors.White, Color.White); Assert.AreEqual(colors.Black, Color.Black); Assert.AreEqual(colors.Transparent, Color.Transparent); Assert.AreEqual(colors.Red, Color.Red); Assert.AreEqual(colors.Green, Color.Green); Assert.AreEqual(colors.Blue, Color.Blue); }); } [Test] public void XnaCurve() { // Curve in 28_XnaCurve.xml is formated the same way as by XNA's serializer DeserializeCompileAndLoad("28_XnaCurve.xml", curve => { Assert.AreEqual(CurveLoopType.Constant, curve.PreLoop); Assert.AreEqual(CurveLoopType.Constant, curve.PostLoop); Assert.AreEqual(2, curve.Keys.Count); var key1 = curve.Keys[0]; Assert.AreEqual(0, key1.Position); Assert.AreEqual(1, key1.Value); Assert.AreEqual(0, key1.TangentIn); Assert.AreEqual(0, key1.TangentOut); Assert.AreEqual(CurveContinuity.Smooth, key1.Continuity); var key2 = curve.Keys[1]; Assert.AreEqual(0.5f, key2.Position); Assert.AreEqual(0.5f, key2.Value); Assert.AreEqual(0, key2.TangentIn); Assert.AreEqual(0, key2.TangentOut); Assert.AreEqual(CurveContinuity.Smooth, key2.Continuity); }); } } } ================================================ FILE: Tests/ContentPipeline/IntermediateSerializerTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Net; using System.Xml; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; #if XNA using System.Reflection; #endif namespace Kni.Tests.ContentPipeline { // These tests are based on "Everything you ever wanted to know about IntermediateSerializer" by Shawn Hargreaves // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx class IntermediateSerializerTest { private static void SerializeAndAssert(string file, T value) { string filePath = Paths.Xml(file); string expectedXml = File.ReadAllText(filePath); string actualXml = Serialize(filePath, value); // Normalize line endings - git on build server seems to set // core.autocrlf to false. expectedXml = expectedXml.Replace("\r\n", "\n"); actualXml = actualXml.Replace("\r\n", "\n"); Assert.AreEqual(expectedXml, actualXml); } private static string Serialize(string filePath, T value) { string referenceRelocationPath = filePath; // Note: Can't use StringBuilder here because it is always UTF-16, // while our test XML files use a UTF-8 encoding. MemoryStream memoryStream = new MemoryStream(); XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true }; using (XmlWriter writer = XmlWriter.Create(memoryStream, xmlWriterSettings)) IntermediateSerializer.Serialize(writer, value, referenceRelocationPath); memoryStream.Position = 0; string actualXml = new StreamReader(memoryStream).ReadToEnd(); return actualXml; } [Test] public void TheBasics() { NestedClass nestedObject = new NestedClass { Name = "Shawn", IsEnglish = true }; SerializeAndAssert("01_TheBasics.xml", new TheBasics { PublicField = 1, InternalField = 0, GetSetProperty = "Hello World", Nested = nestedObject, Nested2 = nestedObject }); } [Test] public void Inheritance() { SerializeAndAssert("02_Inheritance.xml", new Inheritance { elf = 23, hello = "world" }); } [Test] public void IncludingPrivateMembers() { SerializeAndAssert("03_IncludingPrivateMembers.xml", new IncludingPrivateMembers(23)); } [Test] public void ExcludingPublicMembers() { SerializeAndAssert("04_ExcludingPublicMembersOutput.xml", new ExcludingPublicMembers { elf = 23 }); } [Test] public void RenamingXmlElements() { RenamingXmlElements value = new RenamingXmlElements(); value.hello = "world"; value.elf = 23; value.speed = 80.2f; value.isOrganic = true; value.SetDimensions(new Vector2(32, 32)); SerializeAndAssert("05_RenamingXmlElements.xml", value); } [Test] public void NullReferences() { SerializeAndAssert("06_NullReferences.xml", new NullReferences { hello = null }); } [Test] public void OptionalElements() { SerializeAndAssert("07_OptionalElements.xml", new OptionalElements { a = null, b = null, c = string.Empty, d = null, e = CullMode.CullClockwiseFace, f = CullMode.CullCounterClockwiseFace, g = CullMode.CullClockwiseFace }); } [Test] public void AllowNull() { // [AllowNull] "has no effect when serializing to XML" // (http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx) // Except for... it does have an effect. XNA throws an exception when // you try to serialize a null element which has [AllowNull] specified. Assert.Throws(() => Serialize("output", new AllowNull())); } [Test] public void Collections() { SerializeAndAssert("09_Collections.xml", new Collections { StringArray = new[] { "Hello", "World" }, StringList = new List { "This", "is", "a", "test" }, IntArray = new[] { 1, 2, 3, 23, 42 }, ColorArray = new[] { new Color(0x88, 0x65, 0x42, 0xFF), new Color(0x91, 0x6B, 0x46, 0xFF), new Color(0x91, 0x7B, 0x46, 0xFF), new Color(0x88, 0x65, 0x43, 0xFF) }, CustomItemList = new List(), CustomItemInheritedList = new List() }); } [Test] public void CollectionItemName() { SerializeAndAssert("10_CollectionItemName.xml", new CollectionItemName { StringArray = new[] { "Hello", "World" } }); } [Test] public void Dictionaries() { SerializeAndAssert("11_Dictionaries.xml", new Dictionaries { TestDictionary = new Dictionary { { 23, true }, { 42, false } } }); } [Test] public void MathTypes() { SerializeAndAssert("12_MathTypes.xml", new MathTypes { Point = new Point(1, 2), Rectangle = new Rectangle(1, 2, 3, 4), Vector2 = new Vector2(1, 2), Vector3 = new Vector3(1, 2, 3.1f), Vector4 = new Vector4(1, 2, 3, 4), Quaternion = new Quaternion(1, 2, 3, 4), Plane = new Plane(1, 2, 3, 4), Matrix = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), Color = new Color{ A = 0xFF, R = 0x64, G = 0x95, B = 0xED }, Vector2Array = new []{ new Vector2(0, 0), new Vector2(1, 1) }, Vector2List = new List(new[] { new Vector2(1, 7), new Vector2(1, 9), new Vector2(1, 10) }), Vector2ListEmpty = new List() }); } [Test] public void PolymorphicTypes() { SerializeAndAssert("13_PolymorphicTypes.xml", new PolymorphicTypes { Hello = "World", Elf = 23, TypedArray = new[] { new PolymorphicA { Value = true }, new PolymorphicB { Value = true }, new PolymorphicC { Value = true } }, UntypedArray = new[] { new PolymorphicA { Value = true }, new PolymorphicB { Value = true }, new PolymorphicC { Value = true } }, IntCollection = new List { 1, 4, 6 }, UntypedDictionary = new Dictionary { { 1, new PolymorphicA { Value = true } }, { 5, new PolymorphicA { Value = false } } } }); } [Test] public void Namespaces() { SerializeAndAssert("14_Namespaces.xml", new NamespaceClass { A = new NamespaceHelper { Value = true }, B = new Vector2(0, 0), C = SpriteSortMode.Immediate, D = new Nested.ContentPipeline.ClassInsideNestedAmbiguousNamespace { Value = true }, E = new Nested.ClassInsideNestedNamespace { Value = true }, F = new Nested.ContentPipeline2.ClassInsideNestedUnambiguousNamespace { Value = true }, G = new SomethingElse.ContentPipeline.ClassInsideAmbiguousNamespace { Value = true }, H = null }); } [Test] public void FlattenContent() { SerializeAndAssert("15_FlattenContent.xml", new FlattenContent { Nested = new NestedClass { Name = "Shawn", IsEnglish = true }, Collection = new[] { "Hello", "World" } }); } [Test] public void CircularReferences() { CircularLinked resource1 = new CircularLinked(); CircularLinked resource2 = new CircularLinked(); CircularLinked resource3 = new CircularLinked(); resource1.Next = resource2; resource2.Next = resource3; resource3.Next = resource1; Assert.Throws(() => Serialize("output", new CircularReferences { Head = resource1 })); } [Test] public void SharedResources() { Linked resource1 = new Linked { Value = 1 }; Linked resource2 = new Linked { Value = 2 }; Linked resource3 = new Linked { Value = 3 }; resource1.Next = resource2; resource2.Next = resource3; resource3.Next = resource1; Linked2 resourceArray1 = new Linked2(); Linked2 resourceArray2 = new Linked2(); Linked2 resourceArray3 = new Linked2(); resourceArray1.Next = new[] { resourceArray2, resourceArray3 }; resourceArray2.Next = new[] { resourceArray1 }; SerializeAndAssert("16_SharedResources.xml", new SharedResources { Head = resource1, LinkedArray = new[] { resourceArray1, resourceArray2 } }); } [Test] public void ExternalReferences() { ExternalReference grassExternalReference = new ExternalReference(Path.GetFullPath("Assets/Xml/grass.tga")); SerializeAndAssert("17_ExternalReferences.xml", new ExternalReferences { Texture = grassExternalReference, Texture2 = grassExternalReference, Shader = new ExternalReference(Path.GetFullPath("Assets/Xml/foliage.fx")) }); } [Test] public void PrimitiveTypes() { SerializeAndAssert("18_PrimitiveTypes.xml", new PrimitiveTypes { Char = 'A', Char2 = '°', Char3 = 'Δ', Byte = 127, SByte = -127, Short = -1000, UShort = 1000, Int = -100000, UInt = 100000, Long = -10000000, ULong = 10000000, Float = 1234567.0f, Double = 1234567890.0, NullChar = null, NotNullChar = 'B' }); } [Test] public void FontDescription() { ExtendedFontDescription fontDescription = new ExtendedFontDescription { FontName = "Foo", Size = 30, Spacing = 0.75f, UseKerning = true, Style = FontDescriptionStyle.Bold, DefaultCharacter = '*', ExtendedListProperty = { "item0", "item1", "item2" } }; for (int i = 32; i <= 126; i++) fontDescription.Characters.Add((char) i); fontDescription.Characters.Add(WebUtility.HtmlDecode("Δ")[0]); fontDescription.Characters.Add(WebUtility.HtmlDecode("°")[0]); SerializeAndAssert("19_FontDescription.xml", fontDescription); } [Test] public void SystemTypes() { SerializeAndAssert("20_SystemTypes.xml", new SystemTypes { TimeSpan = TimeSpan.FromSeconds(42.5f) }); } // Test 21 (CustomFormatting) specifically tests IntermediateDeserializer, // and isn't relevant for IntermediateSerializer. [Test] public void GetterOnlyProperties() { GetterOnlyProperties value = new GetterOnlyProperties(); value.IntList.Add(1); value.IntList.Add(2); value.IntList.Add(3); value.IntStringDictionary.Add(1, "Foo"); value.IntStringDictionary.Add(5, "Bar"); value.IntStringDictionaryWithPrivateSetter.Add(2, "Baz"); value.IntStringDictionaryWithPrivateSetter.Add(6, "Shawn"); value.CustomClass.A = 42; SerializeAndAssert("22_GetterOnlyProperties.xml", value); } [Test] public void GetterOnlyPolymorphicArrayProperties() { GetterOnlyPolymorphicArrayProperties value = new GetterOnlyPolymorphicArrayProperties(); SerializeAndAssert("23_GetterOnlyPolymorphicArrayProperties.xml", value); } [Test] public void GenericTypes() { SerializeAndAssert("24_GenericTypes.xml", new GenericTypes { A = new GenericClass { Value = 3 }, B = new GenericClass { Value = 4.2f }, C = new GenericClass { Value = new GenericArg { Value = 5 } } }); } [Test] public void ChildCollections() { SerializeAndAssert("26_ChildCollections.xml", new ChildCollections { Children = { new ChildCollectionChild { Name = "Foo" }, new ChildCollectionChild { Name = "Bar" } } }); } [Test] public void Colors() { SerializeAndAssert("27_Colors.xml", new Colors() { White = Color.White, Black = Color.Black, Transparent = Color.Transparent, Red = Color.Red, Green = Color.Green, Blue = Color.Blue }); } [Test] public void XnaCurve() { SerializeAndAssert("28_XnaCurve.xml", new Curve { PreLoop = CurveLoopType.Constant, PostLoop = CurveLoopType.Constant, Keys = { new CurveKey(0,1,0,0,CurveContinuity.Smooth), new CurveKey(0.5f,0.5f,0,0,CurveContinuity.Smooth) } }); } } } ================================================ FILE: Tests/ContentPipeline/MeshBuilderTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using NUnit.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; namespace Kni.Tests.ContentPipeline { internal class MeshBuilderTests { [Test] public void NodeContentInitializesTransformToIdentity() { var nodeContent = new NodeContent(); Assert.AreEqual(Matrix.Identity, nodeContent.Transform); } private readonly BasicMaterialContent material1 = new BasicMaterialContent { Name = "Material1", Alpha = 0.5f, DiffuseColor = Color.Red.ToVector3(), VertexColorEnabled = true, }; private readonly BasicMaterialContent material2 = new BasicMaterialContent { Name = "Material2", Alpha = 0.5f, DiffuseColor = Color.Blue.ToVector3(), VertexColorEnabled = true, }; private static MeshContent CreateBasicMesh(MaterialContent material) { var builder = MeshBuilder.StartMesh("Mesh1"); builder.SetMaterial(material); CreatePositions(builder); AddVertices(builder); return builder.FinishMesh(); } private static void CreatePositions(MeshBuilder builder) { builder.CreatePosition(new Vector3(0, 0, 0)); builder.CreatePosition(new Vector3(1, 0, 0)); builder.CreatePosition(new Vector3(1, 1, 1)); } private static void AddVertices(MeshBuilder builder) { builder.AddTriangleVertex(0); builder.AddTriangleVertex(1); builder.AddTriangleVertex(2); } private static void AddVertices(MeshBuilder builder, int channelIndex, object[] channelData, int indexOffset = 0) { builder.SetVertexChannelData(channelIndex, channelData[0]); builder.AddTriangleVertex(0 + indexOffset); builder.SetVertexChannelData(channelIndex, channelData[1]); builder.AddTriangleVertex(1 + indexOffset); builder.SetVertexChannelData(channelIndex, channelData[2]); builder.AddTriangleVertex(2 + indexOffset); } private MeshContent CreateTwoMaterialsMesh() { var builder = MeshBuilder.StartMesh("Mesh2"); var firstPos = builder.CreatePosition(new Vector3(0, 0, 0)); var secondPos = builder.CreatePosition(new Vector3(1, 0, 0)); var thirdPos = builder.CreatePosition(new Vector3(1, 1, 1)); builder.SetMaterial(material1); builder.AddTriangleVertex(firstPos); builder.AddTriangleVertex(secondPos); builder.AddTriangleVertex(thirdPos); builder.SetMaterial(material2); builder.AddTriangleVertex(firstPos); builder.AddTriangleVertex(thirdPos); builder.AddTriangleVertex(secondPos); return builder.FinishMesh(); } [Test] public void BasicMeshBuilderTest() { var output = CreateBasicMesh(material1); Assert.NotNull(output); Assert.NotNull(output.Geometry); Assert.NotNull(output.Positions); Assert.AreEqual(new Vector3(0, 0, 0), output.Positions[0]); Assert.AreEqual(new Vector3(1, 0, 0), output.Positions[1]); Assert.AreEqual(new Vector3(1, 1, 1), output.Positions[2]); Assert.AreEqual(1, output.Geometry.Count); Assert.AreEqual(0, output.Geometry[0].Indices[0]); Assert.AreEqual(1, output.Geometry[0].Indices[1]); Assert.AreEqual(2, output.Geometry[0].Indices[2]); Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]); Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[1]); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[2]); Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]); Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[1]); Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[2]); //Check if normals are generated Assert.NotNull(output.Geometry[0].Vertices.Channels[VertexChannelNames.Normal(0)]); Assert.AreEqual(material1, output.Geometry[0].Material); Assert.AreEqual(Matrix.Identity, output.Transform); Assert.AreEqual(3, output.Positions.Count); Assert.AreEqual("Mesh1", output.Name); } [Test] public void TwoMaterialsMeshBuilderTest() { var output = CreateTwoMaterialsMesh(); Assert.NotNull(output); Assert.NotNull(output.Geometry); Assert.NotNull(output.Positions); Assert.AreEqual(2, output.Geometry.Count); Assert.AreEqual(0, output.Geometry[0].Indices[0]); Assert.AreEqual(1, output.Geometry[0].Indices[1]); Assert.AreEqual(2, output.Geometry[0].Indices[2]); Assert.AreSame(material1, output.Geometry[0].Material); Assert.AreEqual(0, output.Geometry[1].Indices[0]); Assert.AreEqual(1, output.Geometry[1].Indices[1]); Assert.AreEqual(2, output.Geometry[1].Indices[2]); Assert.AreSame(material2, output.Geometry[1].Material); Assert.AreEqual(3, output.Positions.Count); Assert.AreEqual("Mesh2", output.Name); } [Test] public void CannotCallCreateMethodsAfterAddingVertex() { var builder = MeshBuilder.StartMesh("Mesh1"); builder.CreatePosition(new Vector3(0, 0, 0)); builder.AddTriangleVertex(0); Assert.Throws( () => builder.CreatePosition(new Vector3(1, 2, 3))); Assert.Throws( () => builder.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0))); } [Test] public void TestDefaultPropertyValues() { var mb = MeshBuilder.StartMesh("Test"); Assert.IsFalse(mb.MergeDuplicatePositions); Assert.IsFalse(mb.SwapWindingOrder); Assert.AreEqual(0f, mb.MergePositionTolerance); } [Test] public void CreateMeshWithoutMaterial() { var mb = MeshBuilder.StartMesh("Test"); CreatePositions(mb); AddVertices(mb); var mesh = mb.FinishMesh(); Assert.AreEqual(1, mesh.Geometry.Count); var geom = mesh.Geometry[0]; Assert.IsNull(geom.Material); } [Test] public void CreateEmptyMesh() { const string name = "Test"; var mb = MeshBuilder.StartMesh(name); var mesh = mb.FinishMesh(); Assert.AreEqual(name, mesh.Name); Assert.IsEmpty(mesh.Positions); Assert.IsEmpty(mesh.Geometry); Assert.IsEmpty(mesh.Animations); Assert.IsEmpty(mesh.Children); Assert.IsEmpty(mesh.OpaqueData); Assert.AreEqual(Matrix.Identity, mesh.AbsoluteTransform); Assert.AreEqual(Matrix.Identity, mesh.Transform); Assert.IsNull(mesh.Parent); Assert.IsNull(mesh.Identity); } [Test] public void SetMaterialDoesNotClearChannels() { var mb = MeshBuilder.StartMesh("Test"); var mat = new BasicMaterialContent(); mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0)); mb.SetMaterial(mat); Assert.DoesNotThrow(() => mb.SetVertexChannelData(0, Vector2.Zero)); } [Test] public void SetMaterialOrOpaqueDataCreatesNewGeometry() { var mb = MeshBuilder.StartMesh("Test"); CreatePositions(mb); AddVertices(mb); var d1 = new OpaqueDataDictionary {{"Name", "Data1"}}; mb.SetOpaqueData(d1); AddVertices(mb); mb.SetMaterial(material1); AddVertices(mb); var d2 = new OpaqueDataDictionary {{"Name", "Data2"}}; mb.SetOpaqueData(d2); AddVertices(mb); mb.SetMaterial(material2); AddVertices(mb); // this one won't get added because we don't add any vertices anymore var d3 = new OpaqueDataDictionary {{"Name", "Data3"}}; mb.SetOpaqueData(d3); var mesh = mb.FinishMesh(); Assert.AreEqual(5, mesh.Geometry.Count); Assert.IsNull(mesh.Geometry[0].Material); Assert.IsEmpty(mesh.Geometry[0].OpaqueData); Assert.IsNull(mesh.Geometry[1].Material); Assert.AreEqual(d1, mesh.Geometry[1].OpaqueData); Assert.AreNotSame(d1, mesh.Geometry[1].OpaqueData); Assert.AreSame(material1, mesh.Geometry[2].Material); Assert.AreEqual(d1, mesh.Geometry[2].OpaqueData); Assert.AreNotSame(d1, mesh.Geometry[2].OpaqueData); Assert.AreSame(material1, mesh.Geometry[3].Material); Assert.AreEqual(d2, mesh.Geometry[3].OpaqueData); Assert.AreNotSame(d2, mesh.Geometry[3].OpaqueData); Assert.AreSame(material2, mesh.Geometry[4].Material); Assert.AreEqual(d2, mesh.Geometry[4].OpaqueData); Assert.AreNotSame(d2, mesh.Geometry[4].OpaqueData); } [Test] public void DuplicateGeometryIsOnlyAddedOnce() { var mb = MeshBuilder.StartMesh("Test"); CreatePositions(mb); mb.SetMaterial(material1); var d1 = new OpaqueDataDictionary {{"Name", "Data1"}}; mb.SetOpaqueData(d1); AddVertices(mb); mb.SetMaterial(material1); mb.SetOpaqueData(d1); AddVertices(mb); var mesh = mb.FinishMesh(); Assert.AreEqual(1, mesh.Geometry.Count); Assert.AreSame(material1, mesh.Geometry[0].Material); } [Test] public void EmptyGeometryIsNotAdded() { var mb = MeshBuilder.StartMesh("Test"); CreatePositions(mb); var d2 = new OpaqueDataDictionary {{"Name", "Data2"}}; mb.SetOpaqueData(d2); var d1 = new OpaqueDataDictionary {{"Name", "Data1"}}; mb.SetOpaqueData(d1); mb.SetMaterial(material1); AddVertices(mb); var mesh = mb.FinishMesh(); Assert.AreEqual(1, mesh.Geometry.Count); Assert.AreEqual(d1, mesh.Geometry[0].OpaqueData); Assert.AreEqual(material1, mesh.Geometry[0].Material); } [Test] public void SetChannelData() { var mb = MeshBuilder.StartMesh("Test"); mb.SetMaterial(material1); var channelIndex = mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0)); var p1 = mb.CreatePosition(0f, 0f, 0f); var p2 = mb.CreatePosition(1f, 0f, 0f); var p3 = mb.CreatePosition(0f, 1f, 0f); var t1 = Vector2.Zero; var t2 = Vector2.UnitX; var t3 = Vector2.UnitY; // this should be overwritten by the next call mb.SetVertexChannelData(channelIndex, t3); mb.SetVertexChannelData(channelIndex, t1); // setting the material here should not reset the channel data mb.SetMaterial(material2); mb.AddTriangleVertex(p1); mb.SetVertexChannelData(channelIndex, t2); mb.AddTriangleVertex(p2); mb.SetVertexChannelData(channelIndex, t3); mb.AddTriangleVertex(p3); var mesh = mb.FinishMesh(); var geom = mesh.Geometry[0]; var texChannel = geom.Vertices.Channels[channelIndex]; Assert.AreEqual(t1, texChannel[0]); Assert.AreEqual(t2, texChannel[1]); Assert.AreEqual(t3, texChannel[2]); } // XNA sets the default value for the channel data for a value type channel // and to null for a reference type. This will cause a NullReferenceException when you try // to finish the mesh. MonoGame only allows value types. [Test] public void MissingChannelData() { var mb = MeshBuilder.StartMesh("Test"); mb.SetMaterial(material1); var channelIndex = mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0)); var p1 = mb.CreatePosition(0f, 0f, 0f); var p2 = mb.CreatePosition(1f, 0f, 0f); var p3 = mb.CreatePosition(0f, 1f, 0f); mb.AddTriangleVertex(p1); mb.AddTriangleVertex(p2); mb.AddTriangleVertex(p3); var mesh = mb.FinishMesh(); Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][0]); Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][1]); Assert.AreEqual(default(Vector2), mesh.Geometry[0].Vertices.Channels[channelIndex][2]); } [Test] public void OnlyUseOnce() { var mb = MeshBuilder.StartMesh("Test"); var mat = new BasicMaterialContent(); mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0)); mb.CreatePosition(0f, 0f, 0f); var mesh = mb.FinishMesh(); Assert.DoesNotThrow(() => mb.SetMaterial(mat)); Assert.DoesNotThrow(() => mb.SetVertexChannelData(0, Vector2.Zero)); Assert.AreSame(mesh, mb.FinishMesh()); Assert.Throws(() => mb.CreatePosition(1f, 2f, 3f)); Assert.Throws(() => mb.AddTriangleVertex(0)); Assert.Throws(() => mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(1))); } [TestCase(true)] [TestCase(false)] public void DoNotMergePositionsUntilFinish(bool value) { var mb = MeshBuilder.StartMesh("Test"); mb.SetMaterial(material1); mb.MergePositionTolerance = 5f; var i = mb.CreatePosition(new Vector3(0f, 0f, 0f)); // this should be out of range. Assert.AreNotEqual(i, mb.CreatePosition(new Vector3(4f, 4f, 4f))); Assert.AreNotEqual(i, mb.CreatePosition(new Vector3(-1f, -1f, -1f))); mb.MergeDuplicatePositions = value; var mesh = mb.FinishMesh(); Assert.AreEqual(value ? 2 : 3, mesh.Positions.Count); } [Test] public void MergeVertices() { var mb = MeshBuilder.StartMesh("Test"); mb.MergeDuplicatePositions = true; mb.MergePositionTolerance = 0.2f; mb.SetMaterial(material1); // add positions twice, they should get merged too CreatePositions(mb); CreatePositions(mb); var channel = mb.CreateVertexChannel(VertexChannelNames.TextureCoordinate(0)); object[] channelData1 = { 10f, 11f, 12f }; object[] channelData2 = { 20f, 21f, 22f }; var currentChannelData = channelData1; const int iterations = 10; for (var i = 0; i < iterations; i++) { if (currentChannelData == channelData1) { currentChannelData = channelData2; AddVertices(mb, channel, currentChannelData); } else { currentChannelData = channelData1; AddVertices(mb, channel, currentChannelData, 3); } } var mesh = mb.FinishMesh(); var geom = mesh.Geometry[0]; Assert.AreEqual(3 * iterations, geom.Indices.Count); Assert.AreEqual(6, geom.Vertices.VertexCount); } [Test] public void RemoveVertices() { MeshContent output; output = CreateBasicMesh(material1); Assert.Throws(() => output.Geometry[0].Vertices.RemoveAt(-1)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveAt(3)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(-1,1)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(0,-1)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(0,4)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(3, 1)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(4, 0)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); // NOTE: XNA seems to have a bug where you can specifiy one pased // the last index when removing a range of zero. We fixed this in MG. #if !XNA Assert.Throws(() => output.Geometry[0].Vertices.RemoveRange(3, 0)); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); #endif // RemoveAt(1) output = CreateBasicMesh(material1); output.Geometry[0].Vertices.RemoveAt(1); Assert.AreEqual(2, output.Geometry[0].Vertices.VertexCount); Assert.AreEqual(2, output.Geometry[0].Vertices.Positions.Count); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices.Count); Assert.AreEqual(2, output.Geometry[0].Vertices.Channels[0].Count); Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]); Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[1]); Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[1]); // RemoveRange(0, 0) output = CreateBasicMesh(material1); output.Geometry[0].Vertices.RemoveRange(0, 0); Assert.AreEqual(3, output.Geometry[0].Vertices.VertexCount); Assert.AreEqual(3, output.Geometry[0].Vertices.Positions.Count); Assert.AreEqual(3, output.Geometry[0].Vertices.PositionIndices.Count); Assert.AreEqual(3, output.Geometry[0].Vertices.Channels[0].Count); Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]); Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[1]); Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[2]); Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]); Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[1]); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[2]); // RemoveRange(0, 1) output = CreateBasicMesh(material1); output.Geometry[0].Vertices.RemoveRange(0, 1); Assert.AreEqual(2, output.Geometry[0].Vertices.VertexCount); Assert.AreEqual(2, output.Geometry[0].Vertices.Positions.Count); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices.Count); Assert.AreEqual(2, output.Geometry[0].Vertices.Channels[0].Count); Assert.AreEqual(new Vector3(1, 0, 0), output.Geometry[0].Vertices.Positions[0]); Assert.AreEqual(new Vector3(1, 1, 1), output.Geometry[0].Vertices.Positions[1]); Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices[0]); Assert.AreEqual(2, output.Geometry[0].Vertices.PositionIndices[1]); // RemoveRange(1, 2) output = CreateBasicMesh(material1); output.Geometry[0].Vertices.RemoveRange(1, 2); Assert.AreEqual(1, output.Geometry[0].Vertices.VertexCount); Assert.AreEqual(1, output.Geometry[0].Vertices.Positions.Count); Assert.AreEqual(1, output.Geometry[0].Vertices.PositionIndices.Count); Assert.AreEqual(1, output.Geometry[0].Vertices.Channels[0].Count); Assert.AreEqual(new Vector3(0, 0, 0), output.Geometry[0].Vertices.Positions[0]); Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices[0]); // RemoveRange(0, 3) output = CreateBasicMesh(material1); output.Geometry[0].Vertices.RemoveRange(0, 3); Assert.AreEqual(0, output.Geometry[0].Vertices.VertexCount); Assert.AreEqual(0, output.Geometry[0].Vertices.Positions.Count); Assert.AreEqual(0, output.Geometry[0].Vertices.PositionIndices.Count); Assert.AreEqual(0, output.Geometry[0].Vertices.Channels[0].Count); } } } ================================================ FILE: Tests/ContentPipeline/MeshHelperTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { public class MeshHelperTest { private readonly BasicMaterialContent material1 = new BasicMaterialContent { Name = "Material1", Alpha = 0.5f, DiffuseColor = Color.Red.ToVector3(), VertexColorEnabled = true, }; private readonly BasicMaterialContent material2 = new BasicMaterialContent { Name = "Material2", Alpha = 0.5f, DiffuseColor = Color.Blue.ToVector3(), VertexColorEnabled = true, }; [Test] public void TestMergePositions() { var mb = MeshBuilder.StartMesh("Test"); mb.SetMaterial(material1); mb.CreatePosition(new Vector3(0f, 0f, 0f)); mb.CreatePosition(new Vector3(4f, 4f, 4f)); mb.CreatePosition(new Vector3(-1f, -1f, -1f)); mb.AddTriangleVertex(0); mb.AddTriangleVertex(1); mb.AddTriangleVertex(2); var mesh = mb.FinishMesh(); Assert.AreEqual(3, mesh.Positions.Count); MeshHelper.MergeDuplicatePositions(mesh, 5f); Assert.AreEqual(2, mesh.Positions.Count); var geom = mesh.Geometry[0]; Assert.AreEqual(3, geom.Vertices.Positions.Count); Assert.AreEqual(3, geom.Vertices.PositionIndices.Count); Assert.AreEqual(0, geom.Vertices.PositionIndices[0]); Assert.AreEqual(1, geom.Vertices.PositionIndices[1]); Assert.AreEqual(0, geom.Vertices.PositionIndices[2]); } static void AddTriangle(MeshBuilder meshBuilder, int a, int b, int c) { meshBuilder.AddTriangleVertex(a); meshBuilder.AddTriangleVertex(b); meshBuilder.AddTriangleVertex(c); } [Test] public void TestNormalGeneration() { var mb = MeshBuilder.StartMesh("Test"); // A 5x5 grid of points around the origin, with the centerpoint raised a bit. mb.CreatePosition(new Vector3(-2, 0, -2)); mb.CreatePosition(new Vector3(-1, 0, -2)); mb.CreatePosition(new Vector3( 0, 0, -2)); mb.CreatePosition(new Vector3(+1, 0, -2)); mb.CreatePosition(new Vector3(+2, 0, -2)); mb.CreatePosition(new Vector3(-2, 0, -1)); mb.CreatePosition(new Vector3(-1, 0, -1)); mb.CreatePosition(new Vector3( 0, 0, -1)); mb.CreatePosition(new Vector3(+1, 0, -1)); mb.CreatePosition(new Vector3(+2, 0, -1)); mb.CreatePosition(new Vector3(-2, 0, 0)); mb.CreatePosition(new Vector3(-1, 0, 0)); mb.CreatePosition(new Vector3( 0,0.5f,0)); // The bump in the center. mb.CreatePosition(new Vector3(+1, 0, 0)); mb.CreatePosition(new Vector3(+2, 0, 0)); mb.CreatePosition(new Vector3(-2, 0, +1)); mb.CreatePosition(new Vector3(-1, 0, +1)); mb.CreatePosition(new Vector3( 0, 0, +1)); mb.CreatePosition(new Vector3(+1, 0, +1)); mb.CreatePosition(new Vector3(+2, 0, +1)); mb.CreatePosition(new Vector3(-2, 0, +2)); mb.CreatePosition(new Vector3(-1, 0, +2)); mb.CreatePosition(new Vector3( 0, 0, +2)); mb.CreatePosition(new Vector3(+1, 0, +2)); mb.CreatePosition(new Vector3(+2, 0, +2)); // Create triangles like this, starting with the quad in the bottom left, then // bottom right, then top left, then top right, doing the bottom/right-most triangle // first in each quad. // 20--21--22--23--24 // | / | / | / | / | // 15--16--17--18--19 // | / | / | / | / | // 10--11--12--13--14 // | / | / | / | / | // 5---6---7---8---9 // | / | / | / | / | // 0---1---2---3---4 // In this diagram, horizontal is the x-axis, vertical is the z-axis, and the y-axis // comes out of the screen. AddTriangle(mb, 0, 1, 6); AddTriangle(mb, 0, 6, 5); AddTriangle(mb, 1, 2, 7); AddTriangle(mb, 1, 7, 6); AddTriangle(mb, 2, 3, 8); AddTriangle(mb, 2, 8, 7); AddTriangle(mb, 3, 4, 9); AddTriangle(mb, 3, 9, 8); AddTriangle(mb, 5, 6, 11); AddTriangle(mb, 5, 11, 10); AddTriangle(mb, 6, 7, 12); AddTriangle(mb, 6, 12, 11); AddTriangle(mb, 7, 8, 13); AddTriangle(mb, 7, 13, 12); AddTriangle(mb, 8, 9, 14); AddTriangle(mb, 8, 14, 13); AddTriangle(mb, 10, 11, 16); AddTriangle(mb, 10, 16, 15); AddTriangle(mb, 11, 12, 17); AddTriangle(mb, 11, 17, 16); AddTriangle(mb, 12, 13, 18); AddTriangle(mb, 12, 18, 17); AddTriangle(mb, 13, 14, 19); AddTriangle(mb, 13, 19, 18); AddTriangle(mb, 15, 16, 21); AddTriangle(mb, 15, 21, 20); AddTriangle(mb, 16, 17, 22); AddTriangle(mb, 16, 22, 21); AddTriangle(mb, 17, 18, 23); AddTriangle(mb, 17, 23, 22); AddTriangle(mb, 18, 19, 24); AddTriangle(mb, 18, 24, 23); MeshContent meshContent = mb.FinishMesh(); // The MergeDuplicateVertices code has reordered these (without merging anything, // since they're all different positions), and the new numbering is the order they // appeared in the actual indexing: // 21--20--22--23--24 // | / | / | / | / | // 16--15--17--18--19 // | / | / | / | / | // 11--10--12--13--14 // | / | / | / | / | // 3---2---5---7---9 // | / | / | / | / | // 0---1---4---6---8 // At this point, the positions are now reordered, but we can assert that their positions // are right. var vertexPositions = meshContent.Geometry[0].Vertices.Positions; Assert.AreEqual(new Vector3(-2, 0, -2), vertexPositions[ 0]); Assert.AreEqual(new Vector3(-1, 0, -2), vertexPositions[ 1]); Assert.AreEqual(new Vector3(-1, 0, -1), vertexPositions[ 2]); Assert.AreEqual(new Vector3(-2, 0, -1), vertexPositions[ 3]); Assert.AreEqual(new Vector3( 0, 0, -2), vertexPositions[ 4]); Assert.AreEqual(new Vector3( 0, 0, -1), vertexPositions[ 5]); Assert.AreEqual(new Vector3(+1, 0, -2), vertexPositions[ 6]); Assert.AreEqual(new Vector3(+1, 0, -1), vertexPositions[ 7]); Assert.AreEqual(new Vector3(+2, 0, -2), vertexPositions[ 8]); Assert.AreEqual(new Vector3(+2, 0, -1), vertexPositions[ 9]); Assert.AreEqual(new Vector3(-1, 0, 0), vertexPositions[10]); Assert.AreEqual(new Vector3(-2, 0, 0), vertexPositions[11]); Assert.AreEqual(new Vector3( 0,0.5f,0), vertexPositions[12]); Assert.AreEqual(new Vector3(+1, 0, 0), vertexPositions[13]); Assert.AreEqual(new Vector3(+2, 0, 0), vertexPositions[14]); Assert.AreEqual(new Vector3(-1, 0, 1), vertexPositions[15]); Assert.AreEqual(new Vector3(-2, 0, 1), vertexPositions[16]); Assert.AreEqual(new Vector3( 0, 0, 1), vertexPositions[17]); Assert.AreEqual(new Vector3(+1, 0, 1), vertexPositions[18]); Assert.AreEqual(new Vector3(+2, 0, 1), vertexPositions[19]); Assert.AreEqual(new Vector3(-1, 0, 2), vertexPositions[20]); Assert.AreEqual(new Vector3(-2, 0, 2), vertexPositions[21]); Assert.AreEqual(new Vector3( 0, 0, 2), vertexPositions[22]); Assert.AreEqual(new Vector3(+1, 0, 2), vertexPositions[23]); Assert.AreEqual(new Vector3(+2, 0, 2), vertexPositions[24]); var normalsChannel = meshContent.Geometry[0].Vertices.Channels.Get(VertexChannelNames.Normal()); // All of the points around the edge should be pointed up. Some of the ones on the interior will be affected // by the center point being shifted up, so we won't check those. Assert.AreEqual(Vector3.UnitY, normalsChannel[ 0]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 1]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 4]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 6]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 8]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 9]); Assert.AreEqual(Vector3.UnitY, normalsChannel[14]); Assert.AreEqual(Vector3.UnitY, normalsChannel[19]); Assert.AreEqual(Vector3.UnitY, normalsChannel[24]); Assert.AreEqual(Vector3.UnitY, normalsChannel[23]); Assert.AreEqual(Vector3.UnitY, normalsChannel[22]); Assert.AreEqual(Vector3.UnitY, normalsChannel[20]); Assert.AreEqual(Vector3.UnitY, normalsChannel[21]); Assert.AreEqual(Vector3.UnitY, normalsChannel[16]); Assert.AreEqual(Vector3.UnitY, normalsChannel[11]); Assert.AreEqual(Vector3.UnitY, normalsChannel[ 3]); } [Test] public void TestMergePositionsMultipleGeometries() { var mb = MeshBuilder.StartMesh("Test"); mb.CreatePosition(new Vector3(0f, 0f, 0f)); mb.CreatePosition(new Vector3(1f, 1f, 1f)); mb.CreatePosition(new Vector3(2f, 2f, 2f)); mb.CreatePosition(new Vector3(0f, 0f, 0f)); mb.CreatePosition(new Vector3(1f, 1f, 1f)); mb.CreatePosition(new Vector3(2f, 2f, 2f)); mb.SetMaterial(material1); mb.AddTriangleVertex(2); mb.AddTriangleVertex(1); mb.AddTriangleVertex(0); mb.AddTriangleVertex(5); mb.AddTriangleVertex(4); mb.AddTriangleVertex(3); mb.SetMaterial(material2); mb.AddTriangleVertex(5); mb.AddTriangleVertex(4); mb.AddTriangleVertex(3); var mesh = mb.FinishMesh(); Assert.AreEqual(6, mesh.Positions.Count); MeshHelper.MergeDuplicatePositions(mesh, 1f); Assert.AreEqual(3, mesh.Positions.Count); var geom = mesh.Geometry[0]; Assert.AreEqual(6, geom.Vertices.Positions.Count); Assert.AreEqual(6, geom.Vertices.PositionIndices.Count); Assert.AreEqual(2, geom.Vertices.PositionIndices[0]); Assert.AreEqual(1, geom.Vertices.PositionIndices[1]); Assert.AreEqual(0, geom.Vertices.PositionIndices[2]); Assert.AreEqual(2, geom.Vertices.PositionIndices[0]); Assert.AreEqual(1, geom.Vertices.PositionIndices[1]); Assert.AreEqual(0, geom.Vertices.PositionIndices[2]); geom = mesh.Geometry[1]; Assert.AreEqual(3, geom.Vertices.Positions.Count); Assert.AreEqual(3, geom.Vertices.PositionIndices.Count); Assert.AreEqual(2, geom.Vertices.PositionIndices[0]); Assert.AreEqual(1, geom.Vertices.PositionIndices[1]); Assert.AreEqual(0, geom.Vertices.PositionIndices[2]); } } } ================================================ FILE: Tests/ContentPipeline/ModelProcessorTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Kni.Tests.ContentPipeline { class ModelProcessorTests { private NodeContent CreateBasicMesh() { var input = new NodeContent { Name = "Root", Identity = new ContentIdentity("dummy", GetType().Name), Transform = Matrix.CreateRotationZ(MathHelper.ToRadians(60)) * Matrix.CreateRotationX(MathHelper.ToRadians(40)) * Matrix.CreateRotationY(MathHelper.ToRadians(50)), }; { var mesh = new MeshContent() { Name = "Mesh1", Transform = Matrix.Identity, }; var geom = new GeometryContent() { Name = "Geom1", }; mesh.Geometry.Add(geom); input.Children.Add(mesh); } { var mesh2 = new MeshContent() { Name = "Mesh2", Transform = Matrix.Identity, }; mesh2.Positions.Add(new Vector3(0, 0, 0)); mesh2.Positions.Add(new Vector3(1, 0, 0)); mesh2.Positions.Add(new Vector3(1, 1, 1)); var material = new BasicMaterialContent { Name = "Material1", Alpha = 0.5f, DiffuseColor = Color.Red.ToVector3(), VertexColorEnabled = true, }; var geom2 = new GeometryContent() { Name = "Geom2", Material = material, }; geom2.Vertices.Add(0); geom2.Vertices.Add(1); geom2.Vertices.Add(2); geom2.Indices.Add(0); geom2.Indices.Add(1); geom2.Indices.Add(2); mesh2.Geometry.Add(geom2); input.Children.Add(mesh2); } return input; } [Test] public void BasicMeshTests() { var input = CreateBasicMesh(); var processorContext = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new ModelProcessor { RotationX = 10, RotationY = 20, RotationZ = 30 }; var output = processor.Process(input, processorContext); // The transform the processor above is applying to the model. var processorXform = Matrix.CreateRotationZ(MathHelper.ToRadians(30))* Matrix.CreateRotationX(MathHelper.ToRadians(10))* Matrix.CreateRotationY(MathHelper.ToRadians(20)); // Test some basics. Assert.NotNull(output); Assert.NotNull(output.Meshes); Assert.AreEqual(2, output.Meshes.Count); Assert.NotNull(output.Bones); Assert.AreEqual(3, output.Bones.Count); Assert.NotNull(output.Root); Assert.AreEqual(output.Root, output.Bones[0]); // Stuff to make the tests below cleaner. var inputMesh1 = input.Children[0] as MeshContent; Assert.NotNull(inputMesh1); var inputMesh2 = input.Children[1] as MeshContent; Assert.NotNull(inputMesh2); // Test the bones. Assert.AreEqual("Root", output.Bones[0].Name); Assert.That(input.Transform, Is.EqualTo(output.Bones[0].Transform).Using(MatrixComparer.Epsilon)); Assert.AreEqual("Mesh1", output.Bones[1].Name); Assert.That(Matrix.Identity, Is.EqualTo(output.Bones[1].Transform).Using(MatrixComparer.Epsilon)); Assert.AreEqual("Mesh2", output.Bones[2].Name); Assert.That(Matrix.Identity, Is.EqualTo(output.Bones[2].Transform).Using(MatrixComparer.Epsilon)); // Test the first mesh. { var mesh = output.Meshes[0]; Assert.AreEqual("Mesh1", mesh.Name); Assert.AreEqual(output.Bones[1], mesh.ParentBone); Assert.AreEqual(inputMesh1, mesh.SourceMesh); Assert.AreEqual(new BoundingSphere(Vector3.Zero, 0), mesh.BoundingSphere); Assert.NotNull(mesh.MeshParts); Assert.AreEqual(1, mesh.MeshParts.Count); var part = mesh.MeshParts[0]; Assert.NotNull(part); Assert.IsNull(part.IndexBuffer); Assert.IsNull(part.VertexBuffer); Assert.AreEqual(0, part.NumVertices); Assert.AreEqual(0, part.PrimitiveCount); Assert.AreEqual(0, part.StartIndex); Assert.AreEqual(0, part.VertexOffset); Assert.IsAssignableFrom(part.Material); var material = part.Material as BasicMaterialContent; Assert.NotNull(material); Assert.IsNotEmpty(material.OpaqueData); Assert.IsNull(material.Name); Assert.IsNull(material.Identity); Assert.IsNull(material.Alpha); Assert.IsNull(material.DiffuseColor); Assert.IsNull(material.EmissiveColor); Assert.IsNull(material.SpecularColor); Assert.IsNull(material.SpecularPower); Assert.IsNull(material.Texture); Assert.IsEmpty(material.Textures); Assert.IsTrue(material.OpaqueData.ContainsKey("VertexColorEnabled")); Assert.IsNotNull(material.VertexColorEnabled); Assert.IsFalse(material.VertexColorEnabled.Value); } // Test the second mesh. { var mesh = output.Meshes[1]; Assert.AreEqual("Mesh2", mesh.Name); Assert.AreEqual(output.Bones[2], mesh.ParentBone); Assert.AreEqual(inputMesh2, mesh.SourceMesh); Assert.That(new BoundingSphere(new Vector3(0.3809527f, 0.5858122f, 0.5115654f), 0.8660253f), Is.EqualTo(mesh.BoundingSphere).Using(BoundingSphereComparer.Epsilon)); Assert.NotNull(mesh.MeshParts); Assert.AreEqual(1, mesh.MeshParts.Count); var part = mesh.MeshParts[0]; Assert.NotNull(part); Assert.AreEqual(1, part.PrimitiveCount); Assert.AreEqual(0, part.StartIndex); Assert.AreEqual(0, part.VertexOffset); Assert.AreEqual(3, part.NumVertices); Assert.NotNull(part.IndexBuffer); Assert.AreEqual(3, part.IndexBuffer.Count); Assert.AreEqual(0, part.IndexBuffer[0]); Assert.AreEqual(1, part.IndexBuffer[1]); Assert.AreEqual(2, part.IndexBuffer[2]); Assert.NotNull(part.VertexBuffer); Assert.NotNull(part.VertexBuffer.VertexData); var vertexData = part.VertexBuffer.VertexData; Assert.AreEqual(36, vertexData.Length); var positionArray = ArrayUtil.ConvertTo(vertexData); Assert.AreEqual(3, positionArray.Length); Assert.AreEqual(Vector3.Transform(new Vector3(0, 0, 0), processorXform), positionArray[0]); Assert.AreEqual(Vector3.Transform(new Vector3(1, 0, 0), processorXform), positionArray[1]); Assert.AreEqual(Vector3.Transform(new Vector3(1, 1, 1), processorXform), positionArray[2]); Assert.IsAssignableFrom(part.Material); var material = part.Material as BasicMaterialContent; Assert.NotNull(material); Assert.IsNotEmpty(material.OpaqueData); Assert.AreEqual("Material1", material.Name); Assert.IsNull(material.Identity); Assert.IsTrue(material.OpaqueData.ContainsKey("Alpha")); Assert.NotNull(material.Alpha); Assert.AreEqual(0.5f, material.Alpha.Value); Assert.IsTrue(material.OpaqueData.ContainsKey("DiffuseColor")); Assert.NotNull(material.DiffuseColor); Assert.AreEqual(Color.Red.ToVector3(), material.DiffuseColor.Value); Assert.IsNull(material.EmissiveColor); Assert.IsNull(material.SpecularColor); Assert.IsNull(material.SpecularPower); Assert.IsNull(material.Texture); Assert.IsEmpty(material.Textures); Assert.IsTrue(material.OpaqueData.ContainsKey("VertexColorEnabled")); Assert.IsNotNull(material.VertexColorEnabled); Assert.IsFalse(material.VertexColorEnabled.Value); } } [Test] public void DefaultEffectTest() { NodeContent input; { input = new NodeContent(); var mesh = new MeshContent() { Name = "Mesh1" }; mesh.Positions.Add(new Vector3(0, 0, 0)); mesh.Positions.Add(new Vector3(1, 0, 0)); mesh.Positions.Add(new Vector3(1, 1, 1)); var geom = new GeometryContent(); geom.Vertices.Add(0); geom.Vertices.Add(1); geom.Vertices.Add(2); geom.Indices.Add(0); geom.Indices.Add(1); geom.Indices.Add(2); geom.Vertices.Channels.Add(VertexChannelNames.TextureCoordinate(0), new[] { new Vector2(0,0), new Vector2(1,0), new Vector2(1,1), }); var wieghts = new BoneWeightCollection(); wieghts.Add(new BoneWeight("bone1", 0.5f)); geom.Vertices.Channels.Add(VertexChannelNames.Weights(0), new[] { wieghts, wieghts, wieghts }); mesh.Geometry.Add(geom); input.Children.Add(mesh); var bone1 = new BoneContent { Name = "bone1", Transform = Matrix.CreateTranslation(0,1,0) }; input.Children.Add(bone1); var anim = new AnimationContent() { Name = "anim1", Duration = TimeSpan.Zero }; input.Animations.Add(anim.Name, anim); } var processorContext = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new ModelProcessor { DefaultEffect = MaterialProcessorDefaultEffect.SkinnedEffect, }; var output = processor.Process(input, processorContext); // TODO: Not sure why, but XNA always returns a BasicMaterialContent // even when we specify SkinnedEffect as the default. We need to fix // the test first before we can enable the assert here. //Assert.IsInstanceOf(typeof(SkinnedMaterialContent), output.Meshes[0].MeshParts[0].Material); } } } ================================================ FILE: Tests/ContentPipeline/Mp3ImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class Mp3ImporterTests { [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); Assert.Throws(() => new Mp3Importer().Import(null, context)); Assert.Throws(() => new Mp3Importer().Import("", context)); Assert.Throws(() => new Mp3Importer().Import(@"Assets/Audio/rock_loop_stereo.mp3", null)); Assert.Throws(() => new Mp3Importer().Import(@"this\does\not\exist.mp3", context)); } public void InvalidFormat() { Assert.Throws(() => new Mp3Importer().Import(@"Assets/Audio/rock_loop_stereo.wav", new TestImporterContext("TestObj", "TestBin"))); } [TestCase(@"Assets/Audio/rock_loop_stereo.mp3", 2, 176400, 44100, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo.wma", 2, 176400, 44100, 16, 4)] public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign) { var content = new Mp3Importer().Import(sourceFile, new TestImporterContext("TestObj", "TestBin")); Assert.AreEqual(1, content.Format.Format); Assert.AreEqual(channels, content.Format.ChannelCount); Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond); Assert.AreEqual(sampleRate, content.Format.SampleRate); Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample); Assert.AreEqual(blockAlign, content.Format.BlockAlign); content.Dispose(); } } } ================================================ FILE: Tests/ContentPipeline/OggImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class OggImporterTests { [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); Assert.Throws(() => new OggImporter().Import(null, context)); Assert.Throws(() => new OggImporter().Import("", context)); Assert.Throws(() => new OggImporter().Import(@"Assets/Audio/rock_loop_stereo.ogg", null)); Assert.Throws(() => new OggImporter().Import(@"this\does\not\exist.ogg", context)); } public void InvalidFormat() { Assert.Throws(() => new OggImporter().Import(@"Assets/Audio/rock_loop_stereo.wav", new TestImporterContext("TestObj", "TestBin"))); } [TestCase(@"Assets/Audio/rock_loop_stereo.ogg", 2, 176400, 44100, 16, 4)] public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign) { var content = new OggImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin")); Assert.AreEqual(1, content.Format.Format); Assert.AreEqual(channels, content.Format.ChannelCount); Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond); Assert.AreEqual(sampleRate, content.Format.SampleRate); Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample); Assert.AreEqual(blockAlign, content.Format.BlockAlign); content.Dispose(); } } } ================================================ FILE: Tests/ContentPipeline/OpenAssetImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using NUnit.Framework; using System.IO; namespace Kni.Tests.ContentPipeline { class OpenAssetImporterTests { [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); var importer = new OpenAssetImporter(); Assert.Throws(() => importer.Import(null, context)); Assert.Throws(() => importer.Import("does_not_exist", context)); Assert.Throws(() => importer.Import("file", null)); } [Test] public void BlenderTests() { var context = new TestImporterContext("TestObj", "TestBin"); var importer = new OpenAssetImporter(); var nodeContent = importer.Import("Assets/Models/Box.blend", context); Assert.NotNull(nodeContent); Assert.AreEqual("Cube", nodeContent.Name); Assert.AreEqual(0, nodeContent.Children.Count); Assert.AreEqual(Matrix.Identity, nodeContent.Transform); Assert.AreEqual(Matrix.Identity, nodeContent.AbsoluteTransform); Assert.NotNull(nodeContent.Parent); Assert.AreEqual("", nodeContent.Parent.Name); var meshContent = nodeContent as MeshContent; Assert.NotNull(meshContent); Assert.AreEqual(1, meshContent.Geometry.Count); Assert.AreEqual(0, meshContent.Animations.Count); Assert.AreEqual(28, meshContent.Positions.Count); var geometry = meshContent.Geometry[0]; Assert.IsNull(geometry.Name); Assert.AreEqual(108, geometry.Indices.Count); Assert.AreEqual(28, geometry.Vertices.VertexCount); Assert.IsNotNull(geometry.Material); Assert.AreEqual("Material", geometry.Material.Name); Assert.AreEqual(5, geometry.Material.OpaqueData.Count); Assert.AreEqual(new Vector3(1.65732033E-07f, 1, 0), geometry.Material.OpaqueData["DiffuseColor"]); Assert.AreEqual(Vector3.Zero, geometry.Material.OpaqueData["AmbientColor"]); Assert.AreEqual(Vector3.One, geometry.Material.OpaqueData["ReflectiveColor"]); Assert.AreEqual(Vector3.One, geometry.Material.OpaqueData["SpecularColor"]); Assert.AreEqual(50.0f, geometry.Material.OpaqueData["Shininess"]); } } } ================================================ FILE: Tests/ContentPipeline/TestCompiler.cs ================================================ using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; using System.IO; namespace Kni.Tests.ContentPipeline { class TestCompiler { class TestContentManager : ContentManager { class FakeGraphicsService : IGraphicsDeviceService { public GraphicsDevice GraphicsDevice { get; private set; } #pragma warning disable 67 public event EventHandler DeviceCreated; public event EventHandler DeviceDisposing; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; #pragma warning restore 67 } class FakeServiceProvider : IServiceProvider { public object GetService(Type serviceType) { if (serviceType == typeof(IGraphicsDeviceService)) return new FakeGraphicsService(); throw new NotImplementedException(); } } private readonly byte[] _bufferData; public TestContentManager(byte[] bufferData) : base(new FakeServiceProvider(), "NONE") { _bufferData = bufferData; } protected override Stream OpenStream(string assetName) { return new MemoryStream(_bufferData, false); } } static readonly IReadOnlyCollection Platforms = new[] { TargetPlatform.Windows, TargetPlatform.Xbox360, TargetPlatform.iOS, TargetPlatform.Android, TargetPlatform.DesktopGL, TargetPlatform.MacOSX, TargetPlatform.WindowsStoreApp, TargetPlatform.NativeClient, TargetPlatform.RaspberryPi, TargetPlatform.PlayStation4, TargetPlatform.PlayStation5, TargetPlatform.XboxOne, TargetPlatform.Switch, TargetPlatform.BlazorGL }; static readonly IReadOnlyCollection GraphicsProfiles = new[] { GraphicsProfile.HiDef, GraphicsProfile.Reach }; static readonly IReadOnlyCollection Compression = new[] { ContentCompression.LegacyLZ4, ContentCompression.Uncompressed, ContentCompression.LZ4, #if NET6_0_OR_GREATER ContentCompression.Brotli, #endif }; public static void CompileAndLoadAssets(T data, Action validation) { ContentCompiler compiler = new ContentCompiler(); foreach (TargetPlatform platform in Platforms) foreach (GraphicsProfile gfxProfile in GraphicsProfiles) foreach (ContentCompression compression in Compression) using (MemoryStream xnbStream = new MemoryStream()) { compiler.Compile(xnbStream, data, platform, gfxProfile, compression, "", ""); byte[] bufferData = xnbStream.ToArray(); using (ContentManager content = new TestContentManager(bufferData)) { T result = content.Load("foo"); validation(result); } } } } } ================================================ FILE: Tests/ContentPipeline/TestImporterContext.cs ================================================ using Microsoft.Xna.Framework.Content.Pipeline; using System; using System.Collections.Generic; namespace Kni.Tests.ContentPipeline { class TestImporterContext : ContentImporterContext { readonly string _intermediateDirectory; readonly string _outputDirectory; readonly TestContentBuildLogger _logger; List _dependencies; public TestImporterContext(string intermediateDirectory, string outputDirectory) { _intermediateDirectory = intermediateDirectory; _outputDirectory = outputDirectory; _logger = new TestContentBuildLogger(); _dependencies = new List(); } public List Dependencies { get { return _dependencies; } } public override string IntermediateDirectory { get { return _intermediateDirectory; } } public override ContentBuildLogger Logger { get { return _logger; } } public override string OutputDirectory { get { return _outputDirectory; } } public override void AddDependency(string filename) { _dependencies.Add(filename); } } } ================================================ FILE: Tests/ContentPipeline/TextureContentTests.cs ================================================ using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class TextureContentTests { [Test] public void Texture2DContent() { var content = new Texture2DContent(); Assert.NotNull(content.Faces); Assert.AreEqual(1, content.Faces.Count); Assert.NotNull(content.Faces[0]); Assert.AreEqual(0, content.Faces[0].Count); Assert.NotNull(content.Mipmaps); Assert.AreEqual(content.Faces[0], content.Mipmaps); Assert.AreEqual(0, content.Mipmaps.Count); content.Faces[0] = new MipmapChain(new PixelBitmapContent(2,2)); Assert.AreEqual(content.Faces[0], content.Mipmaps); Assert.AreEqual(1, content.Faces[0].Count); Assert.AreEqual(1, content.Mipmaps.Count); content.Faces[0].Add(new PixelBitmapContent(1, 1)); Assert.AreEqual(2, content.Faces[0].Count); Assert.AreEqual(2, content.Mipmaps.Count); Assert.Throws(() => content.Faces.Clear()); Assert.Throws(() => content.Faces.RemoveAt(0)); Assert.Throws(() => content.Faces.Add(new MipmapChain())); Assert.Throws(() => content.Faces.Insert(0, new MipmapChain())); Assert.Throws(() => content.Faces.Remove(content.Faces[0])); } [Test] public void Texture3DContent() { var content = new Texture3DContent(); Assert.NotNull(content.Faces); Assert.AreEqual(0, content.Faces.Count); var face0 = new MipmapChain(new PixelBitmapContent(2, 2)); content.Faces.Add(face0); Assert.AreEqual(1, content.Faces.Count); Assert.AreEqual(face0, content.Faces[0]); Assert.AreEqual(1, content.Faces[0].Count); content.Faces[0].Add(new PixelBitmapContent(1, 1)); Assert.AreEqual(2, content.Faces[0].Count); var face2 = new MipmapChain(new PixelBitmapContent(2, 2)); content.Faces.Add(face2); Assert.AreEqual(face2, content.Faces[1]); Assert.AreEqual(2, content.Faces.Count); var face1 = new MipmapChain(new PixelBitmapContent(2, 2)); content.Faces.Insert(1, face1); Assert.AreEqual(face1, content.Faces[1]); Assert.AreEqual(3, content.Faces.Count); content.Faces.RemoveAt(0); Assert.AreEqual(2, content.Faces.Count); Assert.AreEqual(face1, content.Faces[0]); Assert.AreEqual(face2, content.Faces[1]); content.Faces.Remove(face1); Assert.AreEqual(1, content.Faces.Count); Assert.AreEqual(face2, content.Faces[0]); content.Faces.Clear(); Assert.AreEqual(0, content.Faces.Count); } [Test] public void TextureCubeContent() { var content = new TextureCubeContent(); Assert.NotNull(content.Faces); Assert.AreEqual(6, content.Faces.Count); Assert.NotNull(content.Faces[0]); Assert.NotNull(content.Faces[1]); Assert.NotNull(content.Faces[2]); Assert.NotNull(content.Faces[3]); Assert.NotNull(content.Faces[4]); Assert.NotNull(content.Faces[5]); Assert.AreEqual(0, content.Faces[0].Count); Assert.AreEqual(0, content.Faces[1].Count); Assert.AreEqual(0, content.Faces[2].Count); Assert.AreEqual(0, content.Faces[3].Count); Assert.AreEqual(0, content.Faces[4].Count); Assert.AreEqual(0, content.Faces[5].Count); var face0 = new MipmapChain(new PixelBitmapContent(2, 2)); content.Faces[0] = face0; Assert.AreEqual(face0, content.Faces[0]); Assert.AreEqual(1, content.Faces[0].Count); content.Faces[0].Add(new PixelBitmapContent(1, 1)); Assert.AreEqual(2, content.Faces[0].Count); content.Faces[1].Add(new PixelBitmapContent(2, 2)); content.Faces[2].Add(new PixelBitmapContent(2, 2)); content.Faces[3].Add(new PixelBitmapContent(2, 2)); content.Faces[4].Add(new PixelBitmapContent(2, 2)); content.Faces[5].Add(new PixelBitmapContent(2, 2)); Assert.AreEqual(1, content.Faces[1].Count); Assert.AreEqual(1, content.Faces[2].Count); Assert.AreEqual(1, content.Faces[3].Count); Assert.AreEqual(1, content.Faces[4].Count); Assert.AreEqual(1, content.Faces[5].Count); Assert.Throws(() => content.Faces.Clear()); Assert.Throws(() => content.Faces.RemoveAt(0)); Assert.Throws(() => content.Faces.Add(new MipmapChain())); Assert.Throws(() => content.Faces.Insert(0, new MipmapChain())); Assert.Throws(() => content.Faces.Remove(content.Faces[0])); } } } ================================================ FILE: Tests/ContentPipeline/TextureImporterTests.cs ================================================ using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class TextureImporterTests { const string intermediateDirectory = "TestObj"; const string outputDirectory = "TestBin"; void ImportStandard(string filename, SurfaceFormat expectedSurfaceFormat, int expectedSize) { var importer = new TextureImporter( ); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import(filename, context); Assert.NotNull(content); Assert.AreEqual(1, content.Faces.Count); Assert.AreEqual(1, content.Faces[0].Count); Assert.AreEqual(expectedSize, content.Faces[0][0].Width); Assert.AreEqual(expectedSize, content.Faces[0][0].Height); SurfaceFormat format; Assert.True(content.Faces[0][0].TryGetFormat(out format)); Assert.AreEqual(expectedSurfaceFormat, format); // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch(DirectoryNotFoundException) { } } [Test] public void ImportBmp( ) { ImportStandard("Assets/Textures/LogoOnly_64px.bmp", SurfaceFormat.Color, 64); } [Test] public void ImportBmpRGB555( ) { ImportStandard("Assets/Textures/Logo555.bmp", SurfaceFormat.Color, 64); } [Test] public void ImportBmpRGB565( ) { ImportStandard("Assets/Textures/Logo565.bmp", SurfaceFormat.Color, 64); } [Test] public void ImportBmp4bits( ) { ImportStandard("Assets/Textures/LogoOnly_64px-4bits.bmp", SurfaceFormat.Color, 64); } [Test] public void ImportBmpV5() { ImportStandard("Assets/Textures/Logo_BMPV5.bmp", SurfaceFormat.Color, 256); } [Test] public void ImportGif( ) { ImportStandard("Assets/Textures/LogoOnly_64px.gif", SurfaceFormat.Color, 64); } [Test] public void ImportJpg( ) { ImportStandard("Assets/Textures/LogoOnly_64px.jpg", SurfaceFormat.Color, 64); } [Test] public void ImportPng( ) { ImportStandard("Assets/Textures/LogoOnly_64px.png", SurfaceFormat.Color, 64); } [Test] public void ImportTga( ) { ImportStandard("Assets/Textures/LogoOnly_64px.tga", SurfaceFormat.Color, 64); } [Test] public void ImportTif( ) { ImportStandard("Assets/Textures/LogoOnly_64px.tif", SurfaceFormat.Color, 64); } /// /// This test tries to load a tiff file encoded in rgbf, but freeimage seems to be failing to read files with this encoding /// Might be necessary to modify this test with future updates of freeimage. /// /// Note that the image was created with Freeimage from a bitmap /// [Test] public void ImportImageWithBadContent( ) { Assert.Throws(typeof(InvalidContentException), ( ) => ImportStandard("Assets/Textures/rgbf.tif", SurfaceFormat.Vector4, 64)); //ImportStandard("Assets/Textures/rgbf.tif", SurfaceFormat.Color); } [Test] public void ImportRGBA16Png() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/RGBA16.png", context); ulong expectedPixelValue = 5714832815570484476; Assert.NotNull(content); Assert.AreEqual(content.Faces.Count, 1); Assert.AreEqual(content.Faces[0].Count, 1); Assert.AreEqual(content.Faces[0][0].Width, 126); Assert.AreEqual(content.Faces[0][0].Height, 240); SurfaceFormat format; Assert.True(content.Faces[0][0].TryGetFormat(out format)); Assert.AreEqual(SurfaceFormat.Rgba64, format); Assert.AreEqual(expectedPixelValue, ((PixelBitmapContent)content.Faces[0][0]).GetRow(1)[12].PackedValue); // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void ImportDdsCubemapDxt1() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/SampleCube64DXT1Mips.dds", context); Assert.NotNull(content); Assert.AreEqual(content.Faces.Count, 6); for (int f = 0; f < 6; f++) { CheckDdsFace(content, f, 7, 64, 64); } SurfaceFormat format; Assert.True(content.Faces[0][0].TryGetFormat(out format)); Assert.AreEqual(format, SurfaceFormat.Dxt1); // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void ImportDdsCubemapColor() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/Sunset.dds", context); Assert.NotNull(content); Assert.AreEqual(content.Faces.Count, 6); for (int f = 0; f < 6; f++) { CheckDdsFace(content, f, 1, 512, 512); } SurfaceFormat format; Assert.True(content.Faces[0][0].TryGetFormat(out format)); // Ensure the red and blue bytes have been correctly swapped Assert.AreEqual(format, SurfaceFormat.Color); var bytes = content.Faces[0][0].GetPixelData(); Assert.AreEqual(bytes[0], 208); Assert.AreEqual(bytes[2], 62); // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void ImportDds() { ImportStandard("Assets/Textures/LogoOnly_64px.dds", SurfaceFormat.Dxt3, 64); ImportStandard("Assets/Textures/LogoOnly_64px-R8G8B8.dds", SurfaceFormat.Color, 64); ImportStandard("Assets/Textures/LogoOnly_64px-X8R8G8B8.dds", SurfaceFormat.Color, 64); } [Test] public void ImportDdsMipMap() { //ImportStandard("Assets/Textures/LogoOnly_64px-mipmaps.dds", SurfaceFormat.Color); var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/LogoOnly_64px-mipmaps.dds", context); Assert.NotNull(content); Assert.AreEqual(content.Faces.Count, 1); CheckDdsFace(content, 0, 7, 64, 64); SurfaceFormat format; Assert.True(content.Faces[0][0].TryGetFormat(out format)); Assert.AreEqual(format, SurfaceFormat.Dxt3); // Clean-up the directories it may have produced, ignoring DirectoryNotFound exceptions try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch(DirectoryNotFoundException) { } } [Test] public void Import24BitPngCheckColorChannels() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/color_24bit.png", context); var bitmap = (PixelBitmapContent) content.Faces[0][0]; var pixel = bitmap.GetPixel(0, 0); Assert.AreEqual(255, pixel.R); Assert.AreEqual(128, pixel.G); Assert.AreEqual(64, pixel.B); try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void Import32BitPngCheckColorChannels() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/color_32bit.png", context); var bitmap = (PixelBitmapContent)content.Faces[0][0]; var pixel = bitmap.GetPixel(0, 0); Assert.AreEqual(255, pixel.R); Assert.AreEqual(128, pixel.G); Assert.AreEqual(64, pixel.B); try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void Import48BitPngCheckColorChannels() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/color_48bit.png", context); var bitmap = (PixelBitmapContent)content.Faces[0][0]; var pixel = bitmap.GetPixel(0, 0).ToVector4(); AssertFloatsAreEqual(1.0f, pixel.X); AssertFloatsAreEqual(0.5f, pixel.Y); AssertFloatsAreEqual(0.25f, pixel.Z); try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } [Test] public void Import64BitPngCheckColorChannels() { var importer = new TextureImporter(); var context = new TestImporterContext(intermediateDirectory, outputDirectory); var content = importer.Import("Assets/Textures/color_64bit.png", context); var bitmap = (PixelBitmapContent)content.Faces[0][0]; var pixel = bitmap.GetPixel(0, 0).ToVector4(); AssertFloatsAreEqual(1.0f, pixel.X); AssertFloatsAreEqual(0.5f, pixel.Y); AssertFloatsAreEqual(0.25f, pixel.Z); try { Directory.Delete(intermediateDirectory, true); Directory.Delete(outputDirectory, true); } catch (DirectoryNotFoundException) { } } private static void AssertFloatsAreEqual(float expected, float actual) { // Assume floats are equal if they differ less than 1% var maxDiff = expected * 0.01f; Assert.GreaterOrEqual(maxDiff, Math.Abs(expected - actual)); } private static void CheckDdsFace(TextureContent content, int faceIndex, int mipMapCount, int width, int height) { Assert.AreEqual(content.Faces[faceIndex].Count, mipMapCount); for (int i = 0; i < mipMapCount; i++) { Assert.AreEqual(content.Faces[faceIndex][i].Width, width >> i); Assert.AreEqual(content.Faces[faceIndex][i].Height, height >> i); } } } } ================================================ FILE: Tests/ContentPipeline/TextureProcessorTests.cs ================================================ using System; using System.Linq; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using NUnit.Framework; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Kni.Tests.ContentPipeline { class TextureProcessorTests { [Test] public void ValidateDefaults() { var processor = new TextureProcessor(); Assert.AreEqual(new Color(255, 0, 255, 255), processor.ColorKeyColor); Assert.AreEqual(true, processor.ColorKeyEnabled); Assert.AreEqual(false, processor.GenerateMipmaps); Assert.AreEqual(true, processor.PremultiplyAlpha); Assert.AreEqual(false, processor.ResizeToPowerOfTwo); Assert.AreEqual(TextureProcessorOutputFormat.Color, processor.TextureFormat); } private static void Fill(PixelBitmapContent content, Color color) { var src = Enumerable.Repeat(color.PackedValue, content.Width * content.Height).ToArray(); var dest = new byte[Marshal.SizeOf(typeof(Color)) * content.Width * content.Height]; Buffer.BlockCopy(src, 0, dest, 0, dest.Length); content.SetPixelData(dest); } [Test] public void ColorKey() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyColor = Color.Red, ColorKeyEnabled = true, GenerateMipmaps = false, PremultiplyAlpha = false, ResizeToPowerOfTwo = false, TextureFormat = TextureProcessorOutputFormat.Color }; var face = new PixelBitmapContent(8, 8); Fill(face, Color.Red); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count); Assert.AreEqual(1, output.Faces[0].Count); Assert.IsAssignableFrom>(output.Faces[0][0]); var outFace = (PixelBitmapContent)output.Faces[0][0]; Assert.AreEqual(8, outFace.Width); Assert.AreEqual(8, outFace.Height); for (var y=0; y < outFace.Height; y++) for (var x = 0; x < outFace.Width; x++) Assert.AreEqual(Color.Transparent, outFace.GetPixel(x, y)); } [Test] public void MipmapSquarePowerOfTwo() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyEnabled = false, GenerateMipmaps = true, PremultiplyAlpha = false, ResizeToPowerOfTwo = false, TextureFormat = TextureProcessorOutputFormat.Color }; var width = 8; var height = 8; var face = new PixelBitmapContent(width, height); Fill(face, Color.Red); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count); //Assert.AreNotEqual(face, output.Faces[0][0]); var outChain = output.Faces[0]; Assert.AreEqual(4, outChain.Count); foreach (var outFace in outChain) { Assert.AreEqual(width, outFace.Width); Assert.AreEqual(height, outFace.Height); var bitmap = (PixelBitmapContent)outFace; for (var y = 0; y < height; y++) for (var x = 0; x < width; x++) Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y)); width = width >> 1; height = height >> 1; } } [Test] public void MipmapNonSquarePowerOfTwo() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyEnabled = false, GenerateMipmaps = true, PremultiplyAlpha = false, ResizeToPowerOfTwo = false, TextureFormat = TextureProcessorOutputFormat.Color }; var width = 16; var height = 8; var face = new PixelBitmapContent(width, height); Fill(face, Color.Red); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count); var outChain = output.Faces[0]; Assert.AreEqual(5, outChain.Count); foreach (var outFace in outChain) { Assert.AreEqual(width, outFace.Width); Assert.AreEqual(height, outFace.Height); var bitmap = (PixelBitmapContent)outFace; for (var y = 0; y < height; y++) for (var x = 0; x < width; x++) Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y)); if (width > 1) width /= 2; if (height > 1) height /= 2; } } [Test] public void MipmapNonSquareNonPowerOfTwo() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyEnabled = false, GenerateMipmaps = true, PremultiplyAlpha = false, ResizeToPowerOfTwo = false, TextureFormat = TextureProcessorOutputFormat.Color }; var width = 23; var height = 5; var face = new PixelBitmapContent(width, height); Fill(face, Color.Red); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count); var outChain = output.Faces[0]; Assert.AreEqual(5, outChain.Count); foreach (var outFace in outChain) { Assert.AreEqual(width, outFace.Width); Assert.AreEqual(height, outFace.Height); var bitmap = (PixelBitmapContent)outFace; for (var y = 0; y < height; y++) for (var x = 0; x < width; x++) Assert.AreEqual(Color.Red, bitmap.GetPixel(x, y)); if (width > 1) width /= 2; if (height > 1) height /= 2; } } [Test] public void ResizePowerOfTwo() { var context = new TestProcessorContext(TargetPlatform.Windows, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyEnabled = false, GenerateMipmaps = false, PremultiplyAlpha = false, ResizeToPowerOfTwo = true, TextureFormat = TextureProcessorOutputFormat.Color }; var face = new PixelBitmapContent(3, 7); Fill(face, Color.Red); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count); Assert.AreEqual(1, output.Faces[0].Count); Assert.IsAssignableFrom>(output.Faces[0][0]); var outFace = (PixelBitmapContent)output.Faces[0][0]; Assert.AreEqual(4, outFace.Width); Assert.AreEqual(8, outFace.Height); for (var y = 0; y < outFace.Height; y++) for (var x = 0; x < outFace.Width; x++) Assert.AreEqual(Color.Red, outFace.GetPixel(x, y)); } #if !XNA void CompressDefault(TargetPlatform platform, Color color, int width = 16, int height = 16) { var context = new TestProcessorContext(platform, "dummy.xnb"); var processor = new TextureProcessor { ColorKeyEnabled = false, GenerateMipmaps = true, PremultiplyAlpha = false, ResizeToPowerOfTwo = false, TextureFormat = TextureProcessorOutputFormat.Compressed }; var face = new PixelBitmapContent(width, height); Fill(face, color); var input = new Texture2DContent(); input.Faces[0] = face; var output = processor.Process(input, context); Assert.NotNull(output); Assert.AreEqual(1, output.Faces.Count, "Expected number of faces"); Assert.AreEqual(5, output.Faces[0].Count, "Expected number of mipmaps"); Assert.IsAssignableFrom(output.Faces[0][0], "Incorrect pixel format"); } [Test] public void CompressDefaultWindowsOpaque() { CompressDefault(TargetPlatform.Windows, Color.Red); } [Test] public void CompressDefaultWindowsCutOut() { CompressDefault(TargetPlatform.Windows, Color.Transparent); } [Test] public void CompressDefaultWindowsAlpha() { CompressDefault(TargetPlatform.Windows, Color.Red * 0.5f); } [Test] public void CompressDefaultiOSOpaqueSquarePOT() { CompressDefault(TargetPlatform.iOS, Color.Red, 16, 16); } [Test] public void CompressDefaultiOSOpaqueSquareNPOT() { CompressDefault>(TargetPlatform.iOS, Color.Red, 24, 24); } [Test] public void CompressDefaultiOSOpaqueNonSquarePOT() { CompressDefault>(TargetPlatform.iOS, Color.Red, 8, 16); } [Test] public void CompressDefaultiOSOpaqueNonSquareNPOT() { CompressDefault>(TargetPlatform.iOS, Color.Red, 24, 16); } [Test] public void CompressDefaultiOSAlphaSquarePOT() { CompressDefault(TargetPlatform.iOS, Color.Red * 0.5f); } [Test] public void CompressDefaultiOSAlphaSquareNPOT() { CompressDefault>(TargetPlatform.iOS, Color.Red * 0.5f, 24, 24); } [Test] public void CompressDefaultiOSAlphaNonSquarePOT() { CompressDefault>(TargetPlatform.iOS, Color.Red * 0.5f, 8, 16); } [Test] public void CompressDefaultiOSAlphaNonSquareNPOT() { CompressDefault>(TargetPlatform.iOS, Color.Red * 0.5f, 24, 16); } [Test] public void CompressDefaultAndroidOpaqueSquarePOT() { CompressDefault(TargetPlatform.Android, Color.Red, 16, 16); } [Test] public void CompressDefaultAndroidOpaqueSquareNPOT() { CompressDefault>(TargetPlatform.Android, Color.Red, 24, 24); } [Test] public void CompressDefaultAndroidOpaqueNonSquarePOT() { CompressDefault(TargetPlatform.Android, Color.Red, 8, 16); } [Test] public void CompressDefaultAndroidOpaqueNonSquareNPOT() { CompressDefault>(TargetPlatform.Android, Color.Red, 24, 16); } [Test] public void CompressDefaultAndroidAlphaSquarePOT() { CompressDefault>(TargetPlatform.Android, Color.Red * 0.5f); } [Test] public void CompressDefaultAndroidAlphaSquareNPOT() { CompressDefault>(TargetPlatform.Android, Color.Red * 0.5f, 24, 24); } [Test] public void CompressDefaultAndroidAlphaNonSquarePOT() { CompressDefault>(TargetPlatform.Android, Color.Red * 0.5f, 8, 16); } [Test] public void CompressDefaultAndroidAlphaNonSquareNPOT() { CompressDefault>(TargetPlatform.Android, Color.Red * 0.5f, 24, 16); } #endif } } ================================================ FILE: Tests/ContentPipeline/WavImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class WavImporterTests { [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); Assert.Throws(() => new WavImporter().Import(null, context)); Assert.Throws(() => new WavImporter().Import("", context)); Assert.Throws(() => new WavImporter().Import(@"Assets/Audio/bark_mono_44hz_8bit.wav", null)); Assert.Throws(() => new WavImporter().Import(@"this\does\not\exist.wav", context)); } [TestCase(@"Assets/Audio/rock_loop_stereo.mp3")] [TestCase(@"Assets/Audio/rock_loop_stereo.wma")] public void InvalidFormat(string sourceFile) { Assert.Throws(() => new WavImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin"))); } [TestCase(@"Assets/Audio/bark_mono_44hz_32bit.wav")] public void InvalidBitDepth(string sourceFile) { Assert.Throws(() => new WavImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin"))); } // TODO: Need to add tests for channel counts and sample rate most likely! [TestCase(@"Assets/Audio/bark_mono_88hz_16bit.wav")] public void InvalidSampleRate(string sourceFile) { Assert.Throws(() => new WavImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin"))); } // 8bit Mono [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", 1, 44100, 44100, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", 1, 22050, 22050, 8, 1)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", 1, 11025, 11025, 8, 1)] // 8bit Stereo [TestCase(@"Assets/Audio/rock_loop_stereo_44hz_8bit.wav", 2, 88200, 44100, 8, 2)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz_8bit.wav", 2, 44100, 22050, 8, 2)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz_8bit.wav", 2, 22050, 11025, 8, 2)] // 16bit Mono [TestCase(@"Assets/Audio/blast_mono.wav", 1, 88200, 44100, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", 1, 44100, 22050, 16, 2)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", 1, 22050, 11025, 16, 2)] // 16bit Stereo [TestCase(@"Assets/Audio/rock_loop_stereo.wav", 2, 176400, 44100, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", 2, 88200, 22050, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", 2, 44100, 11025, 16, 4)] public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign) { var content = new WavImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin")); Assert.AreEqual(1, content.Format.Format); Assert.AreEqual(channels, content.Format.ChannelCount); Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond); Assert.AreEqual(sampleRate, content.Format.SampleRate); Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample); Assert.AreEqual(blockAlign, content.Format.BlockAlign); content.Dispose(); } } } ================================================ FILE: Tests/ContentPipeline/WmaImporterTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using NUnit.Framework; namespace Kni.Tests.ContentPipeline { class WmaImporterTests { [Test] public void Arguments() { var context = new TestImporterContext("TestObj", "TestBin"); Assert.Throws(() => new WmaImporter().Import(null, context)); Assert.Throws(() => new WmaImporter().Import("", context)); Assert.Throws(() => new WmaImporter().Import(@"Assets/Audio/rock_loop_stereo.wma", null)); Assert.Throws(() => new WmaImporter().Import(@"this\does\not\exist.wma", context)); } public void InvalidFormat() { Assert.Throws(() => new WmaImporter().Import(@"Assets/Audio/rock_loop_stereo.wav", new TestImporterContext("TestObj", "TestBin"))); } [TestCase(@"Assets/Audio/rock_loop_stereo.wma", 2, 176400, 44100, 16, 4)] [TestCase(@"Assets/Audio/rock_loop_stereo.mp3", 2, 176400, 44100, 16, 4)] public void Import(string sourceFile, int channels, int averageBytesPerSecond, int sampleRate, int bitsPerSample, int blockAlign) { var content = new WmaImporter().Import(sourceFile, new TestImporterContext("TestObj", "TestBin")); Assert.AreEqual(1, content.Format.Format); Assert.AreEqual(channels, content.Format.ChannelCount); Assert.AreEqual(averageBytesPerSecond, content.Format.AverageBytesPerSecond); Assert.AreEqual(sampleRate, content.Format.SampleRate); Assert.AreEqual(bitsPerSample, content.Format.BitsPerSample); Assert.AreEqual(blockAlign, content.Format.BlockAlign); content.Dispose(); } } } ================================================ FILE: Tests/Directory.Build.props ================================================ obj\$(MSBuildProjectName)\ ================================================ FILE: Tests/Framework/BoundingTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { [TestFixture] class BoundingTest { [Test] public void BoxContainsVector3Test() { var box = new BoundingBox(Vector3.Zero, Vector3.One); Assert.AreEqual(ContainmentType.Disjoint, box.Contains(-Vector3.One)); Assert.AreEqual(ContainmentType.Disjoint, box.Contains(new Vector3(0.5f, 0.5f, -1f))); Assert.AreEqual(ContainmentType.Contains, box.Contains(Vector3.Zero)); Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0f, 0, 0.5f))); Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0f, 0.5f, 0.5f))); Assert.AreEqual(ContainmentType.Contains, box.Contains(Vector3.One)); Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(1f, 1, 0.5f))); Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(1f, 0.5f, 0.5f))); Assert.AreEqual(ContainmentType.Contains, box.Contains(new Vector3(0.5f, 0.5f, 0.5f))); } [Test] public void BoxContainsIdenticalBox() { var b1 = new BoundingBox(Vector3.Zero, Vector3.One); var b2 = new BoundingBox(Vector3.Zero, Vector3.One); Assert.AreEqual(ContainmentType.Contains, b1.Contains(b2)); } [Test] public void BoundingBoxContainsBoundingFrustumTests() { var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1)); var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000)); var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0)); var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500)); var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000, -50)); var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); Assert.That(bbox1.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects)); Assert.That(bbox2.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains)); Assert.That(bbox3.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects)); Assert.That(bbox4.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint)); Assert.That(bbox5.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint)); } [Test] public void BoundingBoxIntersectsRay() { // Our test box. BoundingBox box; box.Min = new Vector3(-10,-20,-30); box.Max = new Vector3(10, 20, 30); var center = (box.Max + box.Min) * 0.5f; // Test misses. Assert.IsNull(new Ray(center - Vector3.UnitX * 40, -Vector3.UnitX).Intersects(box)); Assert.IsNull(new Ray(center + Vector3.UnitX * 40, Vector3.UnitX).Intersects(box)); Assert.IsNull(new Ray(center - Vector3.UnitY * 40, -Vector3.UnitY).Intersects(box)); Assert.IsNull(new Ray(center + Vector3.UnitY * 40, Vector3.UnitY).Intersects(box)); Assert.IsNull(new Ray(center - Vector3.UnitZ * 40, -Vector3.UnitZ).Intersects(box)); Assert.IsNull(new Ray(center + Vector3.UnitZ * 40, Vector3.UnitZ).Intersects(box)); // Test middle of each face. Assert.AreEqual(30.0f, new Ray(center - Vector3.UnitX * 40, Vector3.UnitX).Intersects(box)); Assert.AreEqual(30.0f, new Ray(center + Vector3.UnitX * 40, -Vector3.UnitX).Intersects(box)); Assert.AreEqual(20.0f, new Ray(center - Vector3.UnitY * 40, Vector3.UnitY).Intersects(box)); Assert.AreEqual(20.0f, new Ray(center + Vector3.UnitY * 40, -Vector3.UnitY).Intersects(box)); Assert.AreEqual(10.0f, new Ray(center - Vector3.UnitZ * 40, Vector3.UnitZ).Intersects(box)); Assert.AreEqual(10.0f, new Ray(center + Vector3.UnitZ * 40, -Vector3.UnitZ).Intersects(box)); // Test the corners along each axis. Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitX * 10, Vector3.UnitX).Intersects(box)); Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitY * 10, Vector3.UnitY).Intersects(box)); Assert.AreEqual(10.0f, new Ray(box.Min - Vector3.UnitZ * 10, Vector3.UnitZ).Intersects(box)); Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitX * 10, -Vector3.UnitX).Intersects(box)); Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitY * 10, -Vector3.UnitY).Intersects(box)); Assert.AreEqual(10.0f, new Ray(box.Max + Vector3.UnitZ * 10, -Vector3.UnitZ).Intersects(box)); // Test inside out. Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitX).Intersects(box)); Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitX).Intersects(box)); Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitY).Intersects(box)); Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitY).Intersects(box)); Assert.AreEqual(0.0f, new Ray(center, Vector3.UnitZ).Intersects(box)); Assert.AreEqual(0.0f, new Ray(center, -Vector3.UnitZ).Intersects(box)); } [Test] public void BoundingBoxContainsBoundingSphere() { var bbox1 = new BoundingBox(-Vector3.One, Vector3.One); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One*2, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 2); var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1); var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1); Assert.AreEqual(bbox1.Contains(bsphere1), ContainmentType.Contains); Assert.AreEqual(bbox1.Contains(bsphere2), ContainmentType.Intersects); Assert.AreEqual(bbox1.Contains(bsphere3), ContainmentType.Disjoint); Assert.AreEqual(bbox1.Contains(bsphere5), ContainmentType.Disjoint); Assert.AreEqual(bbox1.Contains(bsphere6), ContainmentType.Intersects); } [Test] public void BoundingBoxIntersectsBoundingSphere() { var bbox1 = new BoundingBox(-Vector3.One, Vector3.One); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One * 2, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 2); var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1); var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1); Assert.AreEqual(bbox1.Intersects(bsphere1), true); Assert.AreEqual(bbox1.Intersects(bsphere2), true); Assert.AreEqual(bbox1.Intersects(bsphere3), false); Assert.AreEqual(bbox1.Intersects(bsphere4), true); Assert.AreEqual(bbox1.Intersects(bsphere5), false); Assert.AreEqual(bbox1.Intersects(bsphere6), true); } [Test] public void BoundingFrustumIntersectsBoundingBoxTests() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1)); var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000)); var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0)); var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500)); var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000, -50)); Assert.That(testFrustum.Intersects(bbox1), Is.True); Assert.That(testFrustum.Intersects(bbox2), Is.True); Assert.That(testFrustum.Intersects(bbox3), Is.True); Assert.That(testFrustum.Intersects(bbox4), Is.False); Assert.That(testFrustum.Intersects(bbox5), Is.False); } [Test] public void BoundingFrustumContainsBoundingBoxTests() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); var bbox1 = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1)); var bbox2 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(1000, 1000, 1000)); var bbox3 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(0, 0, 0)); var bbox4 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-500, -500, -500)); var bbox5 = new BoundingBox(new Vector3(-1000, -1000, -1000), new Vector3(-150, 1000, -50)); Assert.That(testFrustum.Contains(bbox1), Is.EqualTo(ContainmentType.Contains)); Assert.That(testFrustum.Contains(bbox2), Is.EqualTo(ContainmentType.Intersects)); Assert.That(testFrustum.Contains(bbox3), Is.EqualTo(ContainmentType.Intersects)); Assert.That(testFrustum.Contains(bbox4), Is.EqualTo(ContainmentType.Disjoint)); #if !XNA // XNA reports a false Intersects Assert.That(testFrustum.Contains(bbox5), Is.EqualTo(ContainmentType.Disjoint)); #endif } [Test] public void BoundingFrustumIntersectsBoundingFrustumTests() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); // Same frustum. Assert.That(testFrustum.Intersects(testFrustum), Is.True); var otherFrustum = new BoundingFrustum(Matrix.Identity); // Smaller frustum contained entirely inside. var view2 = Matrix.CreateLookAt(new Vector3(0, 0, 4), Vector3.Zero, Vector3.Up); var projection2 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 50); otherFrustum.Matrix = view2 * projection2; Assert.That(testFrustum.Intersects(otherFrustum), Is.True); Assert.That(otherFrustum.Intersects(testFrustum), Is.True); // Same size frustum, pointing in the same direction and offset by a small amount. otherFrustum.Matrix = view2 * projection; Assert.That(testFrustum.Intersects(otherFrustum), Is.True); Assert.That(otherFrustum.Intersects(testFrustum), Is.True); // Same size frustum, pointing in the opposite direction and not overlapping. var view3 = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 7), Vector3.Up); otherFrustum.Matrix = view3 * projection; Assert.That(testFrustum.Intersects(otherFrustum), Is.False); Assert.That(otherFrustum.Intersects(testFrustum), Is.False); // Larger frustum, entirely containing test frustum. var view4 = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up); var projection4 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 1000); otherFrustum.Matrix = view4 * projection4; Assert.That(testFrustum.Intersects(otherFrustum), Is.True); Assert.That(otherFrustum.Intersects(testFrustum), Is.True); // Same size frustum, pointing to the right, behind test frustum. var view5 = Matrix.CreateLookAt(new Vector3(-1, 0, 5), new Vector3(5, 0, 5), Vector3.Up); var projection5 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); otherFrustum.Matrix = view5 * projection5; Assert.That(testFrustum.Intersects(otherFrustum), Is.False); Assert.That(otherFrustum.Intersects(testFrustum), Is.False); } [Test] public void BoundingFrustumContainsBoundingFrustumTests() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); // Same frustum. Assert.That(testFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains)); var otherFrustum = new BoundingFrustum(Matrix.Identity); // Smaller frustum contained entirely inside. var view2 = Matrix.CreateLookAt(new Vector3(0, 0, 4), Vector3.Zero, Vector3.Up); var projection2 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 50); otherFrustum.Matrix = view2 * projection2; Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Contains)); Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects)); // Same size frustum, pointing in the same direction and offset by a small amount. otherFrustum.Matrix = view2 * projection; Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Intersects)); Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Intersects)); // Same size frustum, pointing in the opposite direction and not overlapping. var view3 = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 7), Vector3.Up); otherFrustum.Matrix = view3 * projection; Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Disjoint)); Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint)); // Larger frustum, entirely containing test frustum. var view4 = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up); var projection4 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 1000); otherFrustum.Matrix = view4 * projection4; Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Intersects)); Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Contains)); Assert.That(testFrustum.Intersects(otherFrustum), Is.True); // Same size frustum, pointing to the right, behind test frustum. var view5 = Matrix.CreateLookAt(new Vector3(-1, 0, 5), new Vector3(5, 0, 5), Vector3.Up); var projection5 = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); otherFrustum.Matrix = view5 * projection5; Assert.That(testFrustum.Contains(otherFrustum), Is.EqualTo(ContainmentType.Disjoint)); Assert.That(otherFrustum.Contains(testFrustum), Is.EqualTo(ContainmentType.Disjoint)); } [Test] public void BoundingFrustumIntersectsBoundingSphere() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 200); var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1); var bsphere6 = new BoundingSphere(new Vector3(0, 0, -95), 1); var bsphere7 = new BoundingSphere(new Vector3(0, 0, -50), 21f); var bsphere8 = new BoundingSphere(new Vector3(0, 0, -50), 22f); var bsphere10 = new BoundingSphere(new Vector3(0, 0, 5), 0.95f); var bsphere11 = new BoundingSphere(new Vector3(0, 0, 5), 1.05f); Assert.AreEqual(testFrustum.Intersects(bsphere1), true); Assert.AreEqual(testFrustum.Intersects(bsphere2), true); Assert.AreEqual(testFrustum.Intersects(bsphere3), false); Assert.AreEqual(testFrustum.Intersects(bsphere4), true); Assert.AreEqual(testFrustum.Intersects(bsphere5), false); Assert.AreEqual(testFrustum.Intersects(bsphere6), true); Assert.AreEqual(testFrustum.Intersects(bsphere7), true); Assert.AreEqual(testFrustum.Intersects(bsphere8), true); Assert.AreEqual(testFrustum.Intersects(bsphere10), false); Assert.AreEqual(testFrustum.Intersects(bsphere11), true); } [Test] public void BoundingFrustumIntersectsBoundingSphere2() { Matrix view = new Matrix( 0.5952947f, -0.1383422f, -0.79150826f, -0f, -0.02417625f, 0.9815369f, -0.18973885f, 0f, 0.80314344f, 0.13208623f, 0.58095926f, -0f, -35.168182f, -63.662083f, -26.71203f, 1f ); Matrix projection = new Matrix( 1.0349208f, 0f, 0f, 0, 0f, 0.86867154f, 0f, 0, 0.0349208f, -0.035242487f, -1.00002f, -1, 0f, 0f, -0.02000f, 0 ); BoundingFrustum testFrustum = new BoundingFrustum(view * projection); BoundingSphere bsphere1 = new BoundingSphere( new Vector3(8, 8, 8), 13.856406f ); Assert.AreEqual(testFrustum.Intersects(bsphere1), true); Assert.AreEqual(testFrustum.Contains(bsphere1), ContainmentType.Intersects); } [Test] public void BoundingFrustumContainsBoundingSphere() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 200); var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1); var bsphere6 = new BoundingSphere(new Vector3(0, 0, -95), 1); var bsphere7 = new BoundingSphere(new Vector3(0, 0, -50), 21f); var bsphere8 = new BoundingSphere(new Vector3(0, 0, -50), 22f); var bsphere10 = new BoundingSphere(new Vector3(0, 0, 5), 0.95f); var bsphere11 = new BoundingSphere(new Vector3(0, 0, 5), 1); Assert.AreEqual(testFrustum.Contains(bsphere1), ContainmentType.Contains); Assert.AreEqual(testFrustum.Contains(bsphere2), ContainmentType.Contains); Assert.AreEqual(testFrustum.Contains(bsphere3), ContainmentType.Disjoint); Assert.AreEqual(testFrustum.Contains(bsphere4), ContainmentType.Intersects); #if !XNA // XNA reports a false Intersects Assert.AreEqual(testFrustum.Contains(bsphere5), ContainmentType.Disjoint); #endif Assert.AreEqual(testFrustum.Contains(bsphere6), ContainmentType.Intersects); Assert.AreEqual(testFrustum.Contains(bsphere7), ContainmentType.Contains); Assert.AreEqual(testFrustum.Contains(bsphere8), ContainmentType.Intersects); Assert.AreEqual(testFrustum.Contains(bsphere10), ContainmentType.Disjoint); Assert.AreEqual(testFrustum.Contains(bsphere11), ContainmentType.Intersects); } [Test] public void BoundingFrustumIntersectsRayTests() { var view = Matrix.CreateLookAt(cameraPosition: new Vector3(0, 0, 1), cameraTarget: new Vector3(0, 0, 0), cameraUpVector: Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1f, 1f, 100.0f); var testFrustum = new BoundingFrustum(view * projection); Ray ray1 = new Ray(new Vector3(0, 0, -1), new Vector3( 0, 0, 1)); Ray ray2 = new Ray(new Vector3(0, 0, 1), new Vector3( 0, 0, -1)); Ray ray3 = new Ray(new Vector3(0, 0, 1), new Vector3( 0, 0, 1)); Ray ray4 = new Ray(new Vector3(0, 0, 1), new Vector3(+1, 0, 0)); float? value1 = testFrustum.Intersects(ray1); Assert.AreEqual(0.0f, value1); float? value2 = testFrustum.Intersects(ray2); Assert.AreEqual(1.0f, value2); float? value3 = testFrustum.Intersects(ray3); Assert.AreEqual(null, value3); float? value4 = testFrustum.Intersects(ray4); Assert.AreEqual(null, value4); } [Test] public void BoundingSphereIntersectsRayTest() { BoundingSphere sphere = new BoundingSphere(Vector3.Zero, 1); Ray ray1 = new Ray(Vector3.UnitY*4, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*0)); Ray ray2 = new Ray(Vector3.UnitY*4, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*2)); Ray ray3 = new Ray(Vector3.UnitY*5, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*1)); Ray ray4 = new Ray(Vector3.UnitY*5, Vector3.Normalize(Vector3.UnitY*-1 + Vector3.UnitX*1000)); float? value1 = sphere.Intersects(ray1); float? value2 = sphere.Intersects(ray2); float? value3 = sphere.Intersects(ray3); float? value4 = sphere.Intersects(ray4); Assert.AreEqual(3, value1); Assert.AreEqual(null, value2); Assert.AreEqual(null, value3); Assert.AreEqual(null, value4); } [Test] public void BoundingSphereContainsTests() { var zeroPoint = BoundingSphere.CreateFromPoints( new[] {Vector3.Zero} ); Assert.AreEqual(new BoundingSphere(), zeroPoint); var onePoint = BoundingSphere.CreateFromPoints(new[] { Vector3.One }); Assert.AreEqual(new BoundingSphere(Vector3.One, 0), onePoint); var twoPoint = BoundingSphere.CreateFromPoints(new[] { Vector3.Zero, Vector3.One }); Assert.AreEqual(new BoundingSphere(new Vector3(0.5f, 0.5f, 0.5f), 0.8660254f), twoPoint); var threePoint = BoundingSphere.CreateFromPoints(new[] { new Vector3(0, 0, 0), new Vector3(-1, 0, 0), new Vector3(1, 1, 1) }); Assert.That(new BoundingSphere(new Vector3(0, 0.5f, 0.5f), 1.224745f), Is.EqualTo(threePoint).Using(BoundingSphereComparer.Epsilon)); var eightPointTestInput = new Vector3[] { new Vector3(54.58071f, 124.9063f, 56.0016f), new Vector3(54.52138f, 124.9063f, 56.13985f), new Vector3(54.52208f, 124.8235f, 56.14014f), new Vector3(54.5814f, 124.8235f, 56.0019f), new Vector3(1145.415f, 505.913f, -212.5173f), new Vector3(611.4731f, 505.9535f, 1031.893f), new Vector3(617.7462f, -239.7422f, 1034.584f), new Vector3(1151.687f, -239.7035f, -209.8246f) }; var eightPoint = BoundingSphere.CreateFromPoints(eightPointTestInput); for (int i = 0; i < eightPointTestInput.Length; i++) { Assert.That(eightPoint.Contains(eightPointTestInput[i]) != ContainmentType.Disjoint); } Assert.Throws(() => BoundingSphere.CreateFromPoints(new Vector3[] {})); } [Test] public void BoundingSphereContainsBoundingBox() { var bbox1 = new BoundingBox(-Vector3.One, Vector3.One); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One * 2, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 2); var bsphere5 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() - 0.000001f)), 1); var bsphere6 = new BoundingSphere(-Vector3.One - (Vector3.One / (Vector3.One.Length() + 0.000001f)), 1); Assert.AreEqual(bsphere1.Contains(bbox1), ContainmentType.Intersects); Assert.AreEqual(bsphere2.Contains(bbox1), ContainmentType.Intersects); Assert.AreEqual(bsphere3.Contains(bbox1), ContainmentType.Disjoint); Assert.AreEqual(bsphere4.Contains(bbox1), ContainmentType.Contains); Assert.AreEqual(bsphere5.Contains(bbox1), ContainmentType.Disjoint); Assert.AreEqual(bsphere6.Contains(bbox1), ContainmentType.Intersects); } [Test] public void BoundingSphereContainsBoundingFrustum() { var view = Matrix.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 100); var testFrustum = new BoundingFrustum(view * projection); var bsphere1 = new BoundingSphere(Vector3.Zero, 1); var bsphere2 = new BoundingSphere(-Vector3.One, 1); var bsphere3 = new BoundingSphere(-Vector3.One * 6, 1); var bsphere4 = new BoundingSphere(Vector3.Zero, 200); var bsphere5 = new BoundingSphere(new Vector3(1, 1, 5), 1); Assert.AreEqual(bsphere1.Contains(testFrustum), ContainmentType.Intersects); Assert.AreEqual(bsphere2.Contains(testFrustum), ContainmentType.Intersects); Assert.AreEqual(bsphere3.Contains(testFrustum), ContainmentType.Disjoint); Assert.AreEqual(bsphere4.Contains(testFrustum), ContainmentType.Contains); Assert.AreEqual(bsphere5.Contains(testFrustum), ContainmentType.Disjoint); } #if !XNA [Test] public void BoundingBoxDeconstruct() { BoundingBox boundingBox = new BoundingBox(new Vector3(255, 255, 255), new Vector3(0, 0, 0)); Vector3 min, max; boundingBox.Deconstruct(out min, out max); Assert.AreEqual(min, boundingBox.Min); Assert.AreEqual(max, boundingBox.Max); } [Test] public void BoundingSphereDeconstruct() { BoundingSphere boundingSphere = new BoundingSphere(new Vector3(255, 255, 255), float.MaxValue); Vector3 center; float radius; boundingSphere.Deconstruct(out center, out radius); Assert.AreEqual(center, boundingSphere.Center); Assert.AreEqual(radius, boundingSphere.Radius); } #endif } } ================================================ FILE: Tests/Framework/ColorTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class ColorTest { // Contains a test case for each constructor type private static object[] _ctorTestCases = { #if !XNA new object[] { new Color(new Color(64, 128, 192), 32), 64, 128, 192, 32 }, new object[] { new Color(new Color(64, 128, 192), 256), 64, 128, 192, 255 }, new object[] { new Color(new Color(64, 128, 192), 0.125f), 64, 128, 192, 32 }, new object[] { new Color(new Color(64, 128, 192), 1.1f), 64, 128, 192, 255 }, new object[] { new Color((byte)64, (byte)128, (byte)192, (byte)32), 64, 128, 192, 32 }, #endif new object[] { new Color(), 0, 0, 0, 0 }, new object[] { new Color(64, 128, 192), 64, 128, 192, 255 }, new object[] { new Color(256, 256, -1), 255, 255, 0, 255}, new object[] { new Color(64, 128, 192, 32), 64, 128, 192, 32 }, new object[] { new Color(256, 256, -1, 256), 255, 255, 0, 255}, new object[] { new Color(0.25f, 0.5f, 0.75f), 64, 128, 192, 255 }, new object[] { new Color(1.1f, 1.1f, -0.1f), 255, 255, 0, 255 }, new object[] { new Color(0.25f, 0.5f, 0.75f, 0.125f), 64, 128, 192, 32 }, new object[] { new Color(1.1f, 1.1f, -0.1f, -0.1f), 255, 255, 0, 0 }, new object[] { new Color(new Vector3(0.25f, 0.5f, 0.75f)), 64, 128, 192, 255 }, new object[] { new Color(new Vector3(1.1f, 1.1f, -0.1f)), 255, 255, 0, 255 }, new object[] { new Color(new Vector4(0.25f, 0.5f, 0.75f, 0.125f)), 64, 128, 192, 32 }, new object[] { new Color(new Vector4(1.1f, 1.1f, -0.1f, -0.1f)), 255, 255, 0, 0 } }; [Test, TestCaseSource("_ctorTestCases")] public void Ctor_Explicit(Color color, int expectedR, int expectedG, int expectedB, int expectedA) { // Account for rounding differences with float constructors Assert.That(color.R, Is.EqualTo(expectedR).Within(1)); Assert.That(color.G, Is.EqualTo(expectedG).Within(1)); Assert.That(color.B, Is.EqualTo(expectedB).Within(1)); Assert.That(color.A, Is.EqualTo(expectedA).Within(1)); } #if !XNA [Test] public void Ctor_Packed() { var color = new Color(0x20C08040); Assert.That(color.R, Is.EqualTo(64)); Assert.That(color.G, Is.EqualTo(128)); Assert.That(color.B, Is.EqualTo(192)); Assert.That(color.A, Is.EqualTo(32)); } #endif [Test] public void FromNonPremultiplied_Int() { var color = Color.FromNonPremultiplied(255, 128, 64, 128); Assert.That(color.R, Is.EqualTo(128).Within(1)); Assert.That(color.G, Is.EqualTo(64).Within(1)); Assert.That(color.B, Is.EqualTo(32).Within(1)); Assert.That(color.A, Is.EqualTo(128).Within(0)); var overflow = Color.FromNonPremultiplied(280, 128, -10, 128); Assert.That(overflow.R, Is.EqualTo(140).Within(1)); Assert.That(overflow.G, Is.EqualTo(64).Within(1)); Assert.That(overflow.B, Is.EqualTo(0).Within(1)); Assert.That(overflow.A, Is.EqualTo(128).Within(0)); var overflow2 = Color.FromNonPremultiplied(255, 128, 64, 280); Assert.That(overflow2.R, Is.EqualTo(255).Within(1)); Assert.That(overflow2.G, Is.EqualTo(140).Within(1)); Assert.That(overflow2.B, Is.EqualTo(70).Within(1)); Assert.That(overflow2.A, Is.EqualTo(255).Within(0)); } [Test] public void FromNonPremultiplied_Float() { var color = Color.FromNonPremultiplied(new Vector4(1.0f, 0.5f, 0.25f, 0.5f)); Assert.That(color.R, Is.EqualTo(128).Within(1)); Assert.That(color.G, Is.EqualTo(64).Within(1)); Assert.That(color.B, Is.EqualTo(32).Within(1)); Assert.That(color.A, Is.EqualTo(128).Within(1)); var overflow = Color.FromNonPremultiplied(new Vector4(1.1f, 0.5f, -0.1f, 0.5f)); Assert.That(overflow.R, Is.EqualTo(140).Within(1)); Assert.That(overflow.G, Is.EqualTo(64).Within(1)); Assert.That(overflow.B, Is.EqualTo(0).Within(1)); Assert.That(overflow.A, Is.EqualTo(128).Within(1)); var overflow2 = Color.FromNonPremultiplied(new Vector4(1f, 0.5f, 0.25f, 1.1f)); Assert.That(overflow2.R, Is.EqualTo(255).Within(1)); Assert.That(overflow2.G, Is.EqualTo(140).Within(1)); Assert.That(overflow2.B, Is.EqualTo(70).Within(1)); Assert.That(overflow2.A, Is.EqualTo(255).Within(1)); } [Test] public void Multiply() { var color = new Color(1, 2, 3, 4); // Test 1.0 scale. Assert.AreEqual(color, color * 1.0f); Assert.AreEqual(color, Color.Multiply(color, 1.0f)); Assert.AreEqual(color * 1.0f, Color.Multiply(color, 1.0f)); // Test 0.999 scale. var almostOne = new Color(0, 1, 2, 3); Assert.AreEqual(almostOne, color * 0.999f); Assert.AreEqual(almostOne, Color.Multiply(color, 0.999f)); Assert.AreEqual(color * 0.999f, Color.Multiply(color, 0.999f)); // Test 1.001 scale. Assert.AreEqual(color, color * 1.001f); Assert.AreEqual(color, Color.Multiply(color, 1.001f)); Assert.AreEqual(color * 1.001f, Color.Multiply(color, 1.001f)); // Test 0.0 scale. Assert.AreEqual(Color.Transparent, color * 0.0f); Assert.AreEqual(Color.Transparent, Color.Multiply(color, 0.0f)); Assert.AreEqual(color * 0.0f, Color.Multiply(color, 0.0f)); // Test 0.001 scale. Assert.AreEqual(Color.Transparent, color * 0.001f); Assert.AreEqual(Color.Transparent, Color.Multiply(color, 0.001f)); Assert.AreEqual(color * 0.001f, Color.Multiply(color, 0.001f)); // Test -0.001 scale. Assert.AreEqual(Color.Transparent, color * -0.001f); Assert.AreEqual(Color.Transparent, Color.Multiply(color, -0.001f)); Assert.AreEqual(color * -0.001f, Color.Multiply(color, -0.001f)); // Test for overflow. Assert.AreEqual(Color.White, color * 300.0f); Assert.AreEqual(Color.White, Color.Multiply(color, 300.0f)); Assert.AreEqual(color * 300.0f, Color.Multiply(color, 300.0f)); // Test for underflow. Assert.AreEqual(Color.Transparent, color * -1.0f); Assert.AreEqual(Color.Transparent, Color.Multiply(color, -1.0f)); Assert.AreEqual(color * -1.0f, Color.Multiply(color, -1.0f)); } [Test] public void Lerp() { Color color1 = new Color(20, 40, 0, 0); Color color2 = new Color(41, 81, 255, 255); // Test zero and underflow. Assert.AreEqual(color1, Color.Lerp(color1, color2, 0.0f)); Assert.AreEqual(color1, Color.Lerp(color1, color2, 0.001f)); Assert.AreEqual(color1, Color.Lerp(color1, color2, -0.001f)); Assert.AreEqual(color1, Color.Lerp(color1, color2, -1.0f)); // Test one scale and overflows. Assert.AreEqual(color2, Color.Lerp(color1, color2, 1.0f)); Assert.AreEqual(color2, Color.Lerp(color1, color2, 1.001f)); Assert.AreEqual(new Color(254, 254, 254, 254), Color.Lerp(Color.Transparent, Color.White, 0.999f)); Assert.AreEqual(color2, Color.Lerp(color1, color2, 2.0f)); // Test half scale. var half = new Color(30, 60, 127, 127); Assert.AreEqual(half, Color.Lerp(color1, color2, 0.5f)); Assert.AreEqual(half, Color.Lerp(color1, color2, 0.501f)); Assert.AreEqual(half, Color.Lerp(color1, color2, 0.499f)); // Test backwards lerp. Assert.AreEqual(color2, Color.Lerp(color2, color1, 0.0f)); Assert.AreEqual(color1, Color.Lerp(color2, color1, 1.0f)); Assert.AreEqual(half, Color.Lerp(color2, color1, 0.5f)); } #if !XNA [Test] public void DeconstructBytes() { Color color = new Color(255, 255, 255); byte r, g, b; color.Deconstruct(out r, out g, out b); Assert.AreEqual(r, color.R); Assert.AreEqual(g, color.G); Assert.AreEqual(b, color.B); Color color2 = new Color(255, 255, 255, 255); byte r2, g2, b2, a2; color2.Deconstruct(out r2, out g2, out b2, out a2); Assert.AreEqual(r2, color2.R); Assert.AreEqual(g2, color2.G); Assert.AreEqual(b2, color2.B); Assert.AreEqual(a2, color2.A); } [Test] public void DeconstructFloats() { Color color = new Color(255, 255, 255); float r, g, b; color.Deconstruct(out r, out g, out b); Assert.AreEqual(r, color.R / 255f); Assert.AreEqual(g, color.G / 255f); Assert.AreEqual(b, color.B / 255f); Color color2 = new Color(255, 255, 255, 255); float r2, g2, b2, a2; color2.Deconstruct(out r2, out g2, out b2, out a2); Assert.AreEqual(r2, color2.R / 255f); Assert.AreEqual(g2, color2.G / 255f); Assert.AreEqual(b2, color2.B / 255f); Assert.AreEqual(a2, color2.A / 255f); } #endif } } ================================================ FILE: Tests/Framework/CurveKeyCollectionTest.cs ================================================ using System; using System.ComponentModel; using System.Diagnostics; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class CurveKeyCollectionTest { //[Test] //public void TypeConverter() //{ // var curveKeyCollection = new CurveKeyCollection // { // new CurveKey(0, 1), // new CurveKey(1, 2), // new CurveKey(3, 4) // }; // // Gets the attributes for the instance. // var attributes = TypeDescriptor.GetAttributes(curveKeyCollection); // // Assert.AreEqual(5, attributes.Count); // for (var i = 0; i < attributes.Count; ++i) // { // Debug.WriteLine("attribute #" + i + " = " + attributes[i]); // Assert.AreEqual(false, attributes[i].IsDefaultAttribute()); // } //} [Test] public void Properties() { var curveKeyCollection = new CurveKeyCollection { new CurveKey(0, 0), new CurveKey(-1, 1), new CurveKey(-1, 1) }; // Count property Assert.AreEqual(3, curveKeyCollection.Count); // IsReadOnly property Assert.AreEqual(false, curveKeyCollection.IsReadOnly); // Item indexer var key1 = new CurveKey(-1, 1); var key2 = curveKeyCollection[1]; var key3 = curveKeyCollection[2]; Assert.AreEqual(true, key1 == key2); Assert.AreEqual(false, key2 == key3); Assert.AreEqual(key1, key2); Assert.AreNotEqual(key2, key3); Assert.AreNotEqual(key1, key3); } } } ================================================ FILE: Tests/Framework/CurveKeyTest.cs ================================================ using System; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class CurveKeyTest { [Test] public void Properties() { var key = new CurveKey(1, 2, 3, 4, CurveContinuity.Step); Assert.AreEqual(1, key.Position); Assert.AreEqual(2, key.Value); Assert.AreEqual(3, key.TangentIn); Assert.AreEqual(4, key.TangentOut); Assert.AreEqual(CurveContinuity.Step, key.Continuity); } [Test] public void Clone() { var key = new CurveKey(1, 2, 3, 4, CurveContinuity.Step); Assert.AreEqual(key,key.Clone()); } } } ================================================ FILE: Tests/Framework/CurveTest.cs ================================================ using System; using System.ComponentModel; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class CurveTest { //[Test] //public void TypeConverter() //{ // var curve = new Curve(); // curve.Keys.Add(new CurveKey(0, 1)); // curve.Keys.Add(new CurveKey(1, 2)); // curve.Keys.Add(new CurveKey(3, 4)); // // Gets the attributes for the instance. // var attributes = TypeDescriptor.GetAttributes(curve); // // Assert.AreEqual(2,attributes.Count); // for (var i = 0; i < attributes.Count; ++i) // { // Console.WriteLine("attribute #" + i + " = " + attributes[i]); // Assert.AreEqual(false,attributes[i].IsDefaultAttribute()); // } //} [Test] public void Clone() { var curve = new Curve(); curve.Keys.Add(new CurveKey(0, 1)); curve.Keys.Add(new CurveKey(1, 2)); curve.Keys.Add(new CurveKey(3, 4)); var clone = curve.Clone(); Assert.AreEqual(curve.PostLoop, clone.PreLoop); Assert.AreEqual(curve.PostLoop, clone.PostLoop); for (var i = 0; i < 3; ++i) { Assert.AreEqual(curve.Keys[i], clone.Keys[i]); } } [Test] public void Evaluate() { var curve = new Curve(); curve.Keys.Add(new CurveKey(1, -1)); curve.Keys.Add(new CurveKey(2, 2)); curve.Keys.Add(new CurveKey(3, 4)); var result = curve.Evaluate(1.25f); Assert.AreEqual(-0.53125f, result); } [Test] public void EvaluateNoKeys() { var curve = new Curve(); var result = curve.Evaluate(1.25f); Assert.AreEqual(0f, result); } [Test] public void EvaluateOneKey() { var curve = new Curve(); curve.Keys.Add(new CurveKey(1, -1)); var result = curve.Evaluate(1.25f); Assert.AreEqual(-1f, result); } [Test] public void ComputeTangent() { var key1 = new CurveKey(-0.5f, 1.5f); var key2 = new CurveKey(1.1f, 2.3f); var key3 = new CurveKey(2.25f, 4.4f); var curve1 = new Curve(); curve1.Keys.Add(key1); curve1.Keys.Add(key2); curve1.Keys.Add(key3); curve1.ComputeTangent(0, CurveTangent.Smooth); curve1.ComputeTangent(1, CurveTangent.Smooth); curve1.ComputeTangent(2, CurveTangent.Smooth); Assert.AreEqual(0.0f, curve1.Keys[0].TangentIn); Assert.AreEqual(0.799999952f, curve1.Keys[0].TangentOut); Assert.AreEqual(1.68727279f, curve1.Keys[1].TangentIn); Assert.AreEqual(1.21272731f, curve1.Keys[1].TangentOut); Assert.AreEqual(2.10000014f, curve1.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve1.Keys[2].TangentOut); var curve2 = new Curve(); curve2.Keys.Add(key1); curve2.Keys.Add(key2); curve2.Keys.Add(key3); curve2.ComputeTangent(0, CurveTangent.Flat); curve2.ComputeTangent(1, CurveTangent.Flat); curve2.ComputeTangent(2, CurveTangent.Flat); Assert.AreEqual(0.0f, curve2.Keys[0].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[0].TangentOut); Assert.AreEqual(0.0f, curve2.Keys[1].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[1].TangentOut); Assert.AreEqual(0.0f, curve2.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[2].TangentOut); var curve3 = new Curve(); curve3.Keys.Add(key1); curve3.Keys.Add(key2); curve3.Keys.Add(key3); curve3.ComputeTangent(0, CurveTangent.Linear); curve3.ComputeTangent(1, CurveTangent.Linear); curve3.ComputeTangent(2, CurveTangent.Linear); Assert.AreEqual(0.0f, curve3.Keys[0].TangentIn); Assert.AreEqual(0.799999952f, curve3.Keys[0].TangentOut); Assert.AreEqual(0.799999952f, curve3.Keys[1].TangentIn); Assert.AreEqual(2.10000014f, curve3.Keys[1].TangentOut); Assert.AreEqual(2.10000014f, curve3.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve3.Keys[2].TangentOut); } [Test] public void ComputeTangents() { var key1 = new CurveKey(-0.5f, 1.5f); var key2 = new CurveKey(1.1f, 2.3f); var key3 = new CurveKey(2.25f, 4.4f); var curve1 = new Curve(); curve1.Keys.Add(key1); curve1.Keys.Add(key2); curve1.Keys.Add(key3); curve1.ComputeTangents(CurveTangent.Smooth); Assert.AreEqual(0.0f, curve1.Keys[0].TangentIn); Assert.AreEqual(0.799999952f, curve1.Keys[0].TangentOut); Assert.AreEqual(1.68727279f, curve1.Keys[1].TangentIn); Assert.AreEqual(1.21272731f, curve1.Keys[1].TangentOut); Assert.AreEqual(2.10000014f, curve1.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve1.Keys[2].TangentOut); var curve2 = new Curve(); curve2.Keys.Add(key1); curve2.Keys.Add(key2); curve2.Keys.Add(key3); curve2.ComputeTangents(CurveTangent.Flat); Assert.AreEqual(0.0f, curve2.Keys[0].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[0].TangentOut); Assert.AreEqual(0.0f, curve2.Keys[1].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[1].TangentOut); Assert.AreEqual(0.0f, curve2.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve2.Keys[2].TangentOut); var curve3 = new Curve(); curve3.Keys.Add(key1); curve3.Keys.Add(key2); curve3.Keys.Add(key3); curve3.ComputeTangents(CurveTangent.Linear); Assert.AreEqual(0.0f, curve3.Keys[0].TangentIn); Assert.AreEqual(0.799999952f, curve3.Keys[0].TangentOut); Assert.AreEqual(0.799999952f, curve3.Keys[1].TangentIn); Assert.AreEqual(2.10000014f, curve3.Keys[1].TangentOut); Assert.AreEqual(2.10000014f, curve3.Keys[2].TangentIn); Assert.AreEqual(0.0f, curve3.Keys[2].TangentOut); } [Test] public void IsConstant() { var curve1 = new Curve(); var curve2 = new Curve(); curve2.Keys.Add(new CurveKey(0, 0)); var curve3 = new Curve(); curve3.Keys.Add(new CurveKey(0, 0)); curve3.Keys.Add(new CurveKey(0, 0)); Assert.AreEqual(true, curve1.IsConstant); Assert.AreEqual(true, curve2.IsConstant); Assert.AreEqual(false, curve3.IsConstant); } } } ================================================ FILE: Tests/Framework/EnumConformingTest.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using NUnit.Framework; namespace Kni.Tests.Framework { /// /// Tests for enum compatibility with XNA(here is only XNA enum members, extensions are not included). /// class EnumConformingTest { #region Framework [Test] public void ContainmentTypeEnum() { Assert.AreEqual(0, (int)ContainmentType.Disjoint); Assert.AreEqual(1, (int)ContainmentType.Contains); Assert.AreEqual(2, (int)ContainmentType.Intersects); } [Test] public void CurveContinuityEnum() { Assert.AreEqual(0, (int)CurveContinuity.Smooth); Assert.AreEqual(1, (int)CurveContinuity.Step); } [Test] public void CurveLoopTypeEnum() { Assert.AreEqual(0, (int)CurveLoopType.Constant); Assert.AreEqual(1, (int)CurveLoopType.Cycle); Assert.AreEqual(2, (int)CurveLoopType.CycleOffset); Assert.AreEqual(3, (int)CurveLoopType.Oscillate); Assert.AreEqual(4, (int)CurveLoopType.Linear); } [Test] public void CurveTangentEnum() { Assert.AreEqual(0, (int)CurveTangent.Flat); Assert.AreEqual(1, (int)CurveTangent.Linear); Assert.AreEqual(2, (int)CurveTangent.Smooth); } [Test] public void DisplayOrientationEnum() { Assert.AreEqual(0, (int)DisplayOrientation.Default); Assert.AreEqual(1, (int)DisplayOrientation.LandscapeLeft); Assert.AreEqual(2, (int)DisplayOrientation.LandscapeRight); Assert.AreEqual(4, (int)DisplayOrientation.Portrait); } [Test] public void PlaneIntersectionTypeEnum() { Assert.AreEqual(0, (int)PlaneIntersectionType.Front); Assert.AreEqual(1, (int)PlaneIntersectionType.Back); Assert.AreEqual(2, (int)PlaneIntersectionType.Intersecting); } [Test] public void PlayerIndexEnum() { Assert.AreEqual(0, (int)PlayerIndex.One); Assert.AreEqual(1, (int)PlayerIndex.Two); Assert.AreEqual(2, (int)PlayerIndex.Three); Assert.AreEqual(3, (int)PlayerIndex.Four); } #endregion #region Framework.Graphics [Test] public void BlendEnum() { Assert.AreEqual(0, (int)Blend.One); Assert.AreEqual(1, (int)Blend.Zero); Assert.AreEqual(2, (int)Blend.SourceColor); Assert.AreEqual(3, (int)Blend.InverseSourceColor); Assert.AreEqual(4, (int)Blend.SourceAlpha); Assert.AreEqual(5, (int)Blend.InverseSourceAlpha); Assert.AreEqual(6, (int)Blend.DestinationColor); Assert.AreEqual(7, (int)Blend.InverseDestinationColor); Assert.AreEqual(8, (int)Blend.DestinationAlpha); Assert.AreEqual(9, (int)Blend.InverseDestinationAlpha); Assert.AreEqual(10, (int)Blend.BlendFactor); Assert.AreEqual(11, (int)Blend.InverseBlendFactor); Assert.AreEqual(12, (int)Blend.SourceAlphaSaturation); } [Test] public void BlendFunctionEnum() { Assert.AreEqual(0, (int)BlendFunction.Add); Assert.AreEqual(1, (int)BlendFunction.Subtract); Assert.AreEqual(2, (int)BlendFunction.ReverseSubtract); Assert.AreEqual(3, (int)BlendFunction.Min); Assert.AreEqual(4, (int)BlendFunction.Max); } [Test] public void BufferUsageEnum() { Assert.AreEqual(0, (int)BufferUsage.None); Assert.AreEqual(1, (int)BufferUsage.WriteOnly); } [Test] public void ClearOptionsEnum() { Assert.AreEqual(1, (int)ClearOptions.Target); Assert.AreEqual(2, (int)ClearOptions.DepthBuffer); Assert.AreEqual(4, (int)ClearOptions.Stencil); } [Test] public void ColorWriteChannelsEnum() { Assert.AreEqual(0, (int)ColorWriteChannels.None); Assert.AreEqual(1, (int)ColorWriteChannels.Red); Assert.AreEqual(2, (int)ColorWriteChannels.Green); Assert.AreEqual(4, (int)ColorWriteChannels.Blue); Assert.AreEqual(8, (int)ColorWriteChannels.Alpha); Assert.AreEqual(15, (int)ColorWriteChannels.All); } [Test] public void CompareFunctionEnum() { Assert.AreEqual(0, (int)CompareFunction.Always); Assert.AreEqual(1, (int)CompareFunction.Never); Assert.AreEqual(2, (int)CompareFunction.Less); Assert.AreEqual(3, (int)CompareFunction.LessEqual); Assert.AreEqual(4, (int)CompareFunction.Equal); Assert.AreEqual(5, (int)CompareFunction.GreaterEqual); Assert.AreEqual(6, (int)CompareFunction.Greater); Assert.AreEqual(7, (int)CompareFunction.NotEqual); } [Test] public void CubeMapFaceEnum() { Assert.AreEqual(0, (int)CubeMapFace.PositiveX); Assert.AreEqual(1, (int)CubeMapFace.NegativeX); Assert.AreEqual(2, (int)CubeMapFace.PositiveY); Assert.AreEqual(3, (int)CubeMapFace.NegativeY); Assert.AreEqual(4, (int)CubeMapFace.PositiveZ); Assert.AreEqual(5, (int)CubeMapFace.NegativeZ); } [Test] public void CullModeEnum() { Assert.AreEqual(0, (int)CullMode.None); Assert.AreEqual(1, (int)CullMode.CullClockwiseFace); Assert.AreEqual(2, (int)CullMode.CullCounterClockwiseFace); } [Test] public void DepthFormatEnum() { Assert.AreEqual(0, (int)DepthFormat.None); Assert.AreEqual(1, (int)DepthFormat.Depth16); Assert.AreEqual(2, (int)DepthFormat.Depth24); Assert.AreEqual(3, (int)DepthFormat.Depth24Stencil8); } [Test] public void EffectParameterClassEnum() { Assert.AreEqual(0, (int)EffectParameterClass.Scalar); Assert.AreEqual(1, (int)EffectParameterClass.Vector); Assert.AreEqual(2, (int)EffectParameterClass.Matrix); Assert.AreEqual(3, (int)EffectParameterClass.Object); Assert.AreEqual(4, (int)EffectParameterClass.Struct); } [Test] public void EffectParameterTypeEnum() { Assert.AreEqual(0, (int) EffectParameterType.Void); Assert.AreEqual(1, (int)EffectParameterType.Bool); Assert.AreEqual(2, (int)EffectParameterType.Int32); Assert.AreEqual(3, (int)EffectParameterType.Single); Assert.AreEqual(4, (int)EffectParameterType.String); Assert.AreEqual(5, (int)EffectParameterType.Texture); Assert.AreEqual(6, (int)EffectParameterType.Texture1D); Assert.AreEqual(7, (int)EffectParameterType.Texture2D); Assert.AreEqual(8, (int)EffectParameterType.Texture3D); Assert.AreEqual(9, (int)EffectParameterType.TextureCube); } [Test] public void FillModeEnum() { Assert.AreEqual(0, (int)FillMode.Solid); Assert.AreEqual(1, (int)FillMode.WireFrame); } [Test] public void GraphicsDeviceStatusEnum() { Assert.AreEqual(0, (int)GraphicsDeviceStatus.Normal); Assert.AreEqual(1, (int)GraphicsDeviceStatus.Lost); Assert.AreEqual(2, (int)GraphicsDeviceStatus.NotReset); } [Test] public void GraphicsProfileEnum() { Assert.AreEqual(0, (int)GraphicsProfile.Reach); Assert.AreEqual(1, (int)GraphicsProfile.HiDef); } [Test] public void IndexElementSizeEnum() { Assert.AreEqual(0, (int)IndexElementSize.SixteenBits); Assert.AreEqual(1, (int)IndexElementSize.ThirtyTwoBits); } [Test] public void PresentIntervalEnum() { Assert.AreEqual(0, (int)PresentInterval.Default); Assert.AreEqual(1, (int)PresentInterval.One); Assert.AreEqual(2, (int)PresentInterval.Two); Assert.AreEqual(3, (int)PresentInterval.Immediate); } [Test] public void PrimitiveTypeEnum() { Assert.AreEqual(0, (int)PrimitiveType.TriangleList); Assert.AreEqual(1, (int)PrimitiveType.TriangleStrip); Assert.AreEqual(2, (int)PrimitiveType.LineList); Assert.AreEqual(3, (int)PrimitiveType.LineStrip); #if !XNA Assert.AreEqual(4, (int)PrimitiveType.PointList); #endif } [Test] public void RenderTargetUsageEnum() { Assert.AreEqual(0, (int)RenderTargetUsage.DiscardContents); Assert.AreEqual(1, (int)RenderTargetUsage.PreserveContents); Assert.AreEqual(2, (int)RenderTargetUsage.PlatformContents); } [Test] public void SetDataOptionsEnum() { Assert.AreEqual(0, (int)SetDataOptions.None); Assert.AreEqual(1, (int)SetDataOptions.Discard); Assert.AreEqual(2, (int)SetDataOptions.NoOverwrite); } [Test] public void SpriteSortModeEnum() { Assert.AreEqual(0, (int)SpriteSortMode.Deferred); Assert.AreEqual(1, (int)SpriteSortMode.Immediate); Assert.AreEqual(2, (int)SpriteSortMode.Texture); Assert.AreEqual(3, (int)SpriteSortMode.BackToFront); Assert.AreEqual(4, (int)SpriteSortMode.FrontToBack); } [Test] public void StencilOperationEnum() { Assert.AreEqual(0, (int)StencilOperation.Keep); Assert.AreEqual(1, (int)StencilOperation.Zero); Assert.AreEqual(2, (int)StencilOperation.Replace); Assert.AreEqual(3, (int)StencilOperation.Increment); Assert.AreEqual(4, (int)StencilOperation.Decrement); Assert.AreEqual(5, (int)StencilOperation.IncrementSaturation); Assert.AreEqual(6, (int)StencilOperation.DecrementSaturation); Assert.AreEqual(7, (int)StencilOperation.Invert); } [Test] public void SurfaceFormateEnum() { Assert.AreEqual(0, (int)SurfaceFormat.Color); Assert.AreEqual(1, (int)SurfaceFormat.Bgr565); Assert.AreEqual(2, (int)SurfaceFormat.Bgra5551); Assert.AreEqual(3, (int)SurfaceFormat.Bgra4444); Assert.AreEqual(4, (int)SurfaceFormat.Dxt1); Assert.AreEqual(5, (int)SurfaceFormat.Dxt3); Assert.AreEqual(6, (int)SurfaceFormat.Dxt5); Assert.AreEqual(7, (int)SurfaceFormat.NormalizedByte2); Assert.AreEqual(8, (int)SurfaceFormat.NormalizedByte4); Assert.AreEqual(9, (int)SurfaceFormat.Rgba1010102); Assert.AreEqual(10, (int)SurfaceFormat.Rg32); Assert.AreEqual(11, (int)SurfaceFormat.Rgba64); Assert.AreEqual(12, (int)SurfaceFormat.Alpha8); Assert.AreEqual(13, (int)SurfaceFormat.Single); Assert.AreEqual(14, (int)SurfaceFormat.Vector2); Assert.AreEqual(15, (int)SurfaceFormat.Vector4); Assert.AreEqual(16, (int)SurfaceFormat.HalfSingle); Assert.AreEqual(17, (int)SurfaceFormat.HalfVector2); Assert.AreEqual(18, (int)SurfaceFormat.HalfVector4); Assert.AreEqual(19, (int)SurfaceFormat.HdrBlendable); } [Test] public void TextureAddressModeEnum() { Assert.AreEqual(0, (int)TextureAddressMode.Wrap); Assert.AreEqual(1, (int)TextureAddressMode.Clamp); Assert.AreEqual(2, (int)TextureAddressMode.Mirror); } [Test] public void TextureFilterEnum() { Assert.AreEqual(0, (int)TextureFilter.Linear); Assert.AreEqual(1, (int)TextureFilter.Point); Assert.AreEqual(2, (int)TextureFilter.Anisotropic); Assert.AreEqual(3, (int)TextureFilter.LinearMipPoint); Assert.AreEqual(4, (int)TextureFilter.PointMipLinear); Assert.AreEqual(5, (int)TextureFilter.MinLinearMagPointMipLinear); Assert.AreEqual(6, (int)TextureFilter.MinLinearMagPointMipPoint); Assert.AreEqual(7, (int)TextureFilter.MinPointMagLinearMipLinear); Assert.AreEqual(8, (int)TextureFilter.MinPointMagLinearMipPoint); } [Test] public void VertexElementFormatEnum() { Assert.AreEqual(0, (int)VertexElementFormat.Single); Assert.AreEqual(1, (int)VertexElementFormat.Vector2); Assert.AreEqual(2, (int)VertexElementFormat.Vector3); Assert.AreEqual(3, (int)VertexElementFormat.Vector4); Assert.AreEqual(4, (int)VertexElementFormat.Color); Assert.AreEqual(5, (int)VertexElementFormat.Byte4); Assert.AreEqual(6, (int)VertexElementFormat.Short2); Assert.AreEqual(7, (int)VertexElementFormat.Short4); Assert.AreEqual(8, (int)VertexElementFormat.NormalizedShort2); Assert.AreEqual(9, (int)VertexElementFormat.NormalizedShort4); Assert.AreEqual(10, (int)VertexElementFormat.HalfVector2); Assert.AreEqual(11, (int)VertexElementFormat.HalfVector4); } [Test] public void VertexElementUsageEnum() { Assert.AreEqual(0, (int)VertexElementUsage.Position); Assert.AreEqual(1, (int)VertexElementUsage.Color); Assert.AreEqual(2, (int)VertexElementUsage.TextureCoordinate); Assert.AreEqual(3, (int)VertexElementUsage.Normal); Assert.AreEqual(4, (int)VertexElementUsage.Binormal); Assert.AreEqual(5, (int)VertexElementUsage.Tangent); Assert.AreEqual(6, (int)VertexElementUsage.BlendIndices); Assert.AreEqual(7, (int)VertexElementUsage.BlendWeight); Assert.AreEqual(8, (int)VertexElementUsage.Depth); Assert.AreEqual(9, (int)VertexElementUsage.Fog); Assert.AreEqual(10, (int)VertexElementUsage.PointSize); Assert.AreEqual(11, (int)VertexElementUsage.Sample); Assert.AreEqual(12, (int)VertexElementUsage.TessellateFactor); } #endregion #region Framework.Input [Test] public void ButtonsEnum() { Assert.AreEqual(1, (int)Buttons.DPadUp); Assert.AreEqual(2, (int)Buttons.DPadDown); Assert.AreEqual(4, (int)Buttons.DPadLeft); Assert.AreEqual(8, (int)Buttons.DPadRight); Assert.AreEqual(16, (int)Buttons.Start); Assert.AreEqual(32, (int)Buttons.Back); Assert.AreEqual(64, (int)Buttons.LeftStick); Assert.AreEqual(128, (int)Buttons.RightStick); Assert.AreEqual(256, (int)Buttons.LeftShoulder); Assert.AreEqual(512, (int)Buttons.RightShoulder); Assert.AreEqual(2048, (int)Buttons.BigButton); Assert.AreEqual(4096, (int)Buttons.A); Assert.AreEqual(8192, (int)Buttons.B); Assert.AreEqual(16384, (int)Buttons.X); Assert.AreEqual(32768, (int)Buttons.Y); Assert.AreEqual(2097152, (int)Buttons.LeftThumbstickLeft); Assert.AreEqual(4194304, (int)Buttons.RightTrigger); Assert.AreEqual(8388608, (int)Buttons.LeftTrigger); Assert.AreEqual(16777216, (int)Buttons.RightThumbstickUp); Assert.AreEqual(33554432, (int)Buttons.RightThumbstickDown); Assert.AreEqual(67108864, (int)Buttons.RightThumbstickRight); Assert.AreEqual(134217728, (int)Buttons.RightThumbstickLeft); Assert.AreEqual(268435456, (int)Buttons.LeftThumbstickUp); Assert.AreEqual(536870912, (int)Buttons.LeftThumbstickDown); Assert.AreEqual(1073741824, (int)Buttons.LeftThumbstickRight); } [Test] public void ButtonStateEnum() { Assert.AreEqual(0, (int)ButtonState.Released); Assert.AreEqual(1, (int)ButtonState.Pressed); } [Test] public void GamePadTypeEnum() { Assert.AreEqual(0, (int)GamePadType.Unknown); Assert.AreEqual(1, (int)GamePadType.GamePad); Assert.AreEqual(2, (int)GamePadType.Wheel); Assert.AreEqual(3, (int)GamePadType.ArcadeStick); Assert.AreEqual(4, (int)GamePadType.FlightStick); Assert.AreEqual(5, (int)GamePadType.DancePad); Assert.AreEqual(6, (int)GamePadType.Guitar); Assert.AreEqual(7, (int)GamePadType.AlternateGuitar); Assert.AreEqual(8, (int)GamePadType.DrumKit); Assert.AreEqual(768, (int)GamePadType.BigButtonPad); } [Test] public void KeysEnum() { Assert.AreEqual(0, (int)Keys.None); Assert.AreEqual(8, (int)Keys.Back); Assert.AreEqual(9, (int)Keys.Tab); Assert.AreEqual(13, (int)Keys.Enter); Assert.AreEqual(19, (int)Keys.Pause); Assert.AreEqual(20, (int)Keys.CapsLock); Assert.AreEqual(21, (int)Keys.Kana); Assert.AreEqual(25, (int)Keys.Kanji); Assert.AreEqual(27, (int)Keys.Escape); Assert.AreEqual(28, (int)Keys.ImeConvert); Assert.AreEqual(29, (int)Keys.ImeNoConvert); Assert.AreEqual(32, (int)Keys.Space); Assert.AreEqual(33, (int)Keys.PageUp); Assert.AreEqual(34, (int)Keys.PageDown); Assert.AreEqual(35, (int)Keys.End); Assert.AreEqual(36, (int)Keys.Home); Assert.AreEqual(37, (int)Keys.Left); Assert.AreEqual(38, (int)Keys.Up); Assert.AreEqual(39, (int)Keys.Right); Assert.AreEqual(40, (int)Keys.Down); Assert.AreEqual(41, (int)Keys.Select); Assert.AreEqual(42, (int)Keys.Print); Assert.AreEqual(43, (int)Keys.Execute); Assert.AreEqual(44, (int)Keys.PrintScreen); Assert.AreEqual(45, (int)Keys.Insert); Assert.AreEqual(46, (int)Keys.Delete); Assert.AreEqual(47, (int)Keys.Help); Assert.AreEqual(48, (int)Keys.D0); Assert.AreEqual(49, (int)Keys.D1); Assert.AreEqual(50, (int)Keys.D2); Assert.AreEqual(51, (int)Keys.D3); Assert.AreEqual(52, (int)Keys.D4); Assert.AreEqual(53, (int)Keys.D5); Assert.AreEqual(54, (int)Keys.D6); Assert.AreEqual(55, (int)Keys.D7); Assert.AreEqual(56, (int)Keys.D8); Assert.AreEqual(57, (int)Keys.D9); Assert.AreEqual(65, (int)Keys.A); Assert.AreEqual(66, (int)Keys.B); Assert.AreEqual(67, (int)Keys.C); Assert.AreEqual(68, (int)Keys.D); Assert.AreEqual(69, (int)Keys.E); Assert.AreEqual(70, (int)Keys.F); Assert.AreEqual(71, (int)Keys.G); Assert.AreEqual(72, (int)Keys.H); Assert.AreEqual(73, (int)Keys.I); Assert.AreEqual(74, (int)Keys.J); Assert.AreEqual(75, (int)Keys.K); Assert.AreEqual(76, (int)Keys.L); Assert.AreEqual(77, (int)Keys.M); Assert.AreEqual(78, (int)Keys.N); Assert.AreEqual(79, (int)Keys.O); Assert.AreEqual(80, (int)Keys.P); Assert.AreEqual(81, (int)Keys.Q); Assert.AreEqual(82, (int)Keys.R); Assert.AreEqual(83, (int)Keys.S); Assert.AreEqual(84, (int)Keys.T); Assert.AreEqual(85, (int)Keys.U); Assert.AreEqual(86, (int)Keys.V); Assert.AreEqual(87, (int)Keys.W); Assert.AreEqual(88, (int)Keys.X); Assert.AreEqual(89, (int)Keys.Y); Assert.AreEqual(90, (int)Keys.Z); Assert.AreEqual(91, (int)Keys.LeftWindows); Assert.AreEqual(92, (int)Keys.RightWindows); Assert.AreEqual(93, (int)Keys.Apps); Assert.AreEqual(95, (int)Keys.Sleep); Assert.AreEqual(96, (int)Keys.NumPad0); Assert.AreEqual(97, (int)Keys.NumPad1); Assert.AreEqual(98, (int)Keys.NumPad2); Assert.AreEqual(99, (int)Keys.NumPad3); Assert.AreEqual(100, (int)Keys.NumPad4); Assert.AreEqual(101, (int)Keys.NumPad5); Assert.AreEqual(102, (int)Keys.NumPad6); Assert.AreEqual(103, (int)Keys.NumPad7); Assert.AreEqual(104, (int)Keys.NumPad8); Assert.AreEqual(105, (int)Keys.NumPad9); Assert.AreEqual(106, (int)Keys.Multiply); Assert.AreEqual(107, (int)Keys.Add); Assert.AreEqual(108, (int)Keys.Separator); Assert.AreEqual(109, (int)Keys.Subtract); Assert.AreEqual(110, (int)Keys.Decimal); Assert.AreEqual(111, (int)Keys.Divide); Assert.AreEqual(112, (int)Keys.F1); Assert.AreEqual(113, (int)Keys.F2); Assert.AreEqual(114, (int)Keys.F3); Assert.AreEqual(115, (int)Keys.F4); Assert.AreEqual(116, (int)Keys.F5); Assert.AreEqual(117, (int)Keys.F6); Assert.AreEqual(118, (int)Keys.F7); Assert.AreEqual(119, (int)Keys.F8); Assert.AreEqual(120, (int)Keys.F9); Assert.AreEqual(121, (int)Keys.F10); Assert.AreEqual(122, (int)Keys.F11); Assert.AreEqual(123, (int)Keys.F12); Assert.AreEqual(124, (int)Keys.F13); Assert.AreEqual(125, (int)Keys.F14); Assert.AreEqual(126, (int)Keys.F15); Assert.AreEqual(127, (int)Keys.F16); Assert.AreEqual(128, (int)Keys.F17); Assert.AreEqual(129, (int)Keys.F18); Assert.AreEqual(130, (int)Keys.F19); Assert.AreEqual(131, (int)Keys.F20); Assert.AreEqual(132, (int)Keys.F21); Assert.AreEqual(133, (int)Keys.F22); Assert.AreEqual(134, (int)Keys.F23); Assert.AreEqual(135, (int)Keys.F24); Assert.AreEqual(144, (int)Keys.NumLock); Assert.AreEqual(145, (int)Keys.Scroll); Assert.AreEqual(160, (int)Keys.LeftShift); Assert.AreEqual(161, (int)Keys.RightShift); Assert.AreEqual(162, (int)Keys.LeftControl); Assert.AreEqual(163, (int)Keys.RightControl); Assert.AreEqual(164, (int)Keys.LeftAlt); Assert.AreEqual(165, (int)Keys.RightAlt); Assert.AreEqual(166, (int)Keys.BrowserBack); Assert.AreEqual(167, (int)Keys.BrowserForward); Assert.AreEqual(168, (int)Keys.BrowserRefresh); Assert.AreEqual(169, (int)Keys.BrowserStop); Assert.AreEqual(170, (int)Keys.BrowserSearch); Assert.AreEqual(171, (int)Keys.BrowserFavorites); Assert.AreEqual(172, (int)Keys.BrowserHome); Assert.AreEqual(173, (int)Keys.VolumeMute); Assert.AreEqual(174, (int)Keys.VolumeDown); Assert.AreEqual(175, (int)Keys.VolumeUp); Assert.AreEqual(176, (int)Keys.MediaNextTrack); Assert.AreEqual(177, (int)Keys.MediaPreviousTrack); Assert.AreEqual(178, (int)Keys.MediaStop); Assert.AreEqual(179, (int)Keys.MediaPlayPause); Assert.AreEqual(180, (int)Keys.LaunchMail); Assert.AreEqual(181, (int)Keys.SelectMedia); Assert.AreEqual(182, (int)Keys.LaunchApplication1); Assert.AreEqual(183, (int)Keys.LaunchApplication2); Assert.AreEqual(186, (int)Keys.OemSemicolon); Assert.AreEqual(187, (int)Keys.OemPlus); Assert.AreEqual(188, (int)Keys.OemComma); Assert.AreEqual(189, (int)Keys.OemMinus); Assert.AreEqual(190, (int)Keys.OemPeriod); Assert.AreEqual(191, (int)Keys.OemQuestion); Assert.AreEqual(192, (int)Keys.OemTilde); Assert.AreEqual(202, (int)Keys.ChatPadGreen); Assert.AreEqual(203, (int)Keys.ChatPadOrange); Assert.AreEqual(219, (int)Keys.OemOpenBrackets); Assert.AreEqual(220, (int)Keys.OemPipe); Assert.AreEqual(221, (int)Keys.OemCloseBrackets); Assert.AreEqual(222, (int)Keys.OemQuotes); Assert.AreEqual(223, (int)Keys.Oem8); Assert.AreEqual(226, (int)Keys.OemBackslash); Assert.AreEqual(229, (int)Keys.ProcessKey); Assert.AreEqual(242, (int)Keys.OemCopy); Assert.AreEqual(243, (int)Keys.OemAuto); Assert.AreEqual(244, (int)Keys.OemEnlW); Assert.AreEqual(246, (int)Keys.Attn); Assert.AreEqual(247, (int)Keys.Crsel); Assert.AreEqual(248, (int)Keys.Exsel); Assert.AreEqual(249, (int)Keys.EraseEof); Assert.AreEqual(250, (int)Keys.Play); Assert.AreEqual(251, (int)Keys.Zoom); Assert.AreEqual(253, (int)Keys.Pa1); Assert.AreEqual(254, (int)Keys.OemClear); } #endregion } } ================================================ FILE: Tests/Framework/FrameworkDispatcherTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Reflection; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using NUnit.Framework; namespace Kni.Tests.Framework { class FrameworkDispatcherTest { [Test] public void CallOnPrimaryThread() { FrameworkDispatcher.Update(); } [Test] public void CallOnAnotherThread() { // Ensure that FrameworkDispatcher is initialized on the main thread. FrameworkDispatcher.Update(); _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.NotRun; var thread = new Thread(() => { _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.Exception; FrameworkDispatcher.Update(); // If executing this line, no exception was thrown. _callOnAnotherThreadResult = CallOnAnotherThreadTestResult.NoException; }); thread.Start(); if (!thread.Join(1000)) Assert.Fail("Secondary thread did not terminate in time."); Assert.AreEqual(CallOnAnotherThreadTestResult.NoException, _callOnAnotherThreadResult); } private static CallOnAnotherThreadTestResult _callOnAnotherThreadResult; enum CallOnAnotherThreadTestResult { NotRun, NoException, Exception } #if !XNA [Test] public void UpdatesSoundEffectInstancePool() { FrameworkDispatcher.Update(); var sfx = new SoundEffect(new byte[] { 0, 0 }, 44100, AudioChannels.Mono); sfx.Play(); Assert.AreEqual(1, GetPlayingSoundCount()); Thread.Sleep(25); // Give the sound effect time to play FrameworkDispatcher.Update(); Assert.AreEqual(0, GetPlayingSoundCount()); } private int GetPlayingSoundCount() { // SoundEffectInstancePool._playingInstances is private // and not worth making internal only for this test. // Use reflection to get it. var fieldInfo = typeof(Microsoft.Xna.Platform.Audio.AudioService).GetField("_playingInstances", BindingFlags.NonPublic | BindingFlags.Instance); var field = (LinkedList)fieldInfo.GetValue(Microsoft.Xna.Platform.Audio.AudioService.Current); return field.Count; } #endif } } ================================================ FILE: Tests/Framework/MathHelperTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { public class MathHelperTest { [Test] public void ClampFloatTest() { Assert.True(MathHelper.Clamp(1f, 0f, 2f) == 1f, "Failed boundary test, clamp [0,2] on 1 should be 1"); Assert.True(MathHelper.Clamp(1f, 0f, 1f) == 1f, "Failed boundary test, clamp [0,1] on 1 should be 1"); Assert.True(MathHelper.Clamp(1f, 2f, 5f) == 2f, "Failed boundary test, clamp [2,5] on 1 should be 2"); Assert.True(MathHelper.Clamp(1f, -50f, -10f) == -10f, "Failed boundary test, clamp [-50f, -10f] on 1 should be -10"); Assert.True(MathHelper.Clamp(1f, -50f, 25f) == 1f, "Failed boundary test, clamp [-50, 25] on 1 should be 1"); Assert.True(MathHelper.Clamp(0f, 1f, 1f) == 1f, "Failed boundary test, clamp [1,1] on 0 should be 1"); Assert.True(MathHelper.Clamp(0f, -1f, -1f) == -1f, "Failed boundary test, clamp [-1,-1] on 0 should be -1"); } [Test] public void ClampIntTest() { Assert.True(MathHelper.Clamp(1, 0, 2) == 1, "Failed boundary test, clamp [0,2] on 1 should be 1"); Assert.True(MathHelper.Clamp(1, 0, 1) == 1, "Failed boundary test, clamp [0,1] on 1 should be 1"); Assert.True(MathHelper.Clamp(1, 2, 5) == 2, "Failed boundary test, clamp [2,5] on 1 should be 2"); Assert.True(MathHelper.Clamp(1, -50, -10) == -10, "Failed boundary test, clamp [-50f, -10f] on 1 should be -10"); Assert.True(MathHelper.Clamp(1, -50, 25) == 1, "Failed boundary test, clamp [-50, 25] on 1 should be 1"); Assert.True(MathHelper.Clamp(0, 1, 1) == 1, "Failed boundary test, clamp [1,1] on 0 should be 1"); Assert.True(MathHelper.Clamp(0, -1, -1) == -1, "Failed boundary test, clamp [-1,-1] on 0 should be -1"); } [Test] public void DistanceTest() { Assert.AreEqual(MathHelper.Distance(0, 5f), 5f, "Distance test failed on [0,5]"); Assert.AreEqual(MathHelper.Distance(-5f, 5f), 10f, "Distance test failed on [-5,5]"); Assert.AreEqual(MathHelper.Distance(0f, 0f), 0f, "Distance test failed on [0,0]"); Assert.AreEqual(MathHelper.Distance(-5f, -1f), 4f, "Distance test failed on [-5,-1]"); } [Test] public void LerpTest() { Assert.AreEqual(MathHelper.Lerp(0f, 5f, .5f), 2.5f, "Lerp test failed on [0,5,.5]"); Assert.AreEqual(MathHelper.Lerp(-5f, 5f, 0.5f), 0f, "Lerp test failed on [-5,5,0.5]"); Assert.AreEqual(MathHelper.Lerp(0f, 0f, 0.5f), 0f, "Lerp test failed on [0,0,0.5]"); Assert.AreEqual(MathHelper.Lerp(-5f, -1f, 0.5f), -3f, "Lerp test failed on [-5,-1, 0.5]"); // The following test checks for XNA compatibility. // Even though the calculation itself should return "1", the XNA implementaion returns 0 (presumably due to a efficiency/precision tradeoff). Assert.AreEqual(MathHelper.Lerp(10000000000000000f, 1f, 1f), 0f, "Lerp test failed on [10000000000000000,1,1]"); } #if !XNA [Test] public void LerpPreciseTest() { Assert.AreEqual(MathHelper.LerpPrecise(0f, 5f, .5f), 2.5f, "LerpPrecise test failed on [0,5,.5]"); Assert.AreEqual(MathHelper.LerpPrecise(-5f, 5f, 0.5f), 0f, "LerpPrecise test failed on [-5,5,0.5]"); Assert.AreEqual(MathHelper.LerpPrecise(0f, 0f, 0.5f), 0f, "LerpPrecise test failed on [0,0,0.5]"); Assert.AreEqual(MathHelper.LerpPrecise(-5f, -1f, 0.5f), -3f, "LerpPrecise test failed on [-5,-1, 0.5]"); Assert.AreEqual(MathHelper.LerpPrecise(10000000000000000f, 1f, 1f), 1, "LerpPrecise test failed on [10000000000000000,1,1]"); } #endif [Test] public void Min() { Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f, -0.5f)); Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f,0.0f)); Assert.AreEqual(-0.5f, MathHelper.Min(0.0f, -0.5f)); Assert.AreEqual(0, MathHelper.Min(0, 0)); Assert.AreEqual(-5, MathHelper.Min(-5, 5)); Assert.AreEqual(-5, MathHelper.Min(5, -5)); } [Test] public void Max() { Assert.AreEqual(-0.5f, MathHelper.Min(-0.5f, -0.5f)); Assert.AreEqual(0.0f, MathHelper.Max(-0.5f,0.0f)); Assert.AreEqual(0.0f, MathHelper.Max(0.0f, -0.5f)); Assert.AreEqual(0, MathHelper.Max(0, 0)); Assert.AreEqual(5, MathHelper.Max(-5, 5)); Assert.AreEqual(5, MathHelper.Max(5, -5)); } [TestCase(MathHelper.PiOver4, 0.7853982f)] [TestCase(MathHelper.PiOver2, 1.5707964f)] [TestCase(MathHelper.Pi, 3.1415927f)] [TestCase(MathHelper.TwoPi, 6.2831855f)] public void PiConstantsAreExpectedValues(float actualValue, float expectedValue) { Assert.AreEqual(expectedValue, actualValue); } [TestCase(0f, 0f)] [TestCase(MathHelper.PiOver4, MathHelper.PiOver4)] [TestCase(-MathHelper.PiOver4, -MathHelper.PiOver4)] [TestCase(MathHelper.PiOver2, MathHelper.PiOver2)] [TestCase(-MathHelper.PiOver2, -MathHelper.PiOver2)] [TestCase(MathHelper.Pi, MathHelper.Pi)] [TestCase(-MathHelper.Pi, MathHelper.Pi)] [TestCase(MathHelper.TwoPi, 0f)] [TestCase(-MathHelper.TwoPi, 0f)] [TestCase(10f, -2.566371f)] [TestCase(-10f, 2.566371f)] // Pi boundaries [TestCase(3.1415927f, 3.1415927f)] [TestCase(3.141593f, -3.1415925f)] [TestCase(-3.1415925f, -3.1415925f)] [TestCase(-3.1415927f, 3.1415927f)] // 2 * Pi boundaries [TestCase(6.283185f, -4.7683716E-7f)] [TestCase(6.2831855f, 0f)] [TestCase(6.283186f, 4.7683716E-7f)] [TestCase(-6.283185f, 4.7683716E-7f)] [TestCase(-6.2831855f, 0f)] [TestCase(-6.283186f, -4.7683716E-7f)] // 3 * Pi boundaries [TestCase(9.424778f, 3.1415925f)] [TestCase(9.424779f, -3.141592f)] [TestCase(-9.424778f, -3.1415925f)] [TestCase(-9.424779f, 3.141592f)] // 4 * Pi boundaries [TestCase(12.56637f, -9.536743E-7f)] [TestCase(12.566371f, 0f)] [TestCase(12.566372f, 9.536743E-7f)] [TestCase(-12.56637f, 9.536743E-7f)] [TestCase(-12.566371f, 0f)] [TestCase(-12.566372f, -9.536743E-7f)] // 5 * Pi boundaries [TestCase(15.707963f, 3.141592f)] [TestCase(15.707964f, -3.1415925f)] [TestCase(-15.707963f, -3.141592f)] [TestCase(-15.707964f, 3.1415925f)] // 10 * Pi boundaries [TestCase(31.415926f, -1.4305115E-6f)] [TestCase(31.415928f, 4.7683716E-7f)] [TestCase(-31.415926f, 1.4305115E-6f)] [TestCase(-31.415928f, -4.7683716E-7f)] // 20 * Pi boundaries [TestCase(62.831852f, -2.861023E-6f)] [TestCase(62.831856f, 9.536743E-7f)] [TestCase(-62.831852f, 2.861023E-6f)] [TestCase(-62.831856f, -9.536743E-7f)] // 20000000 * Pi boundaries [TestCase(6.2831852E7f, -2.8202515f)] [TestCase(6.2831856E7f, 1.1797485f)] [TestCase(-6.2831852E7f, 2.8202515f)] [TestCase(-6.2831856E7f, -1.1797485f)] public void WrapAngleReturnsExpectedValues(float angle, float expectedValue) { var actualValue = MathHelper.WrapAngle(angle); Assert.AreEqual(expectedValue, actualValue); } } } ================================================ FILE: Tests/Framework/MatrixTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class MatrixTest { [Test] public void Add() { Matrix test = new Matrix(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); Matrix expected = new Matrix(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32); Matrix result; Matrix.Add(ref test,ref test, out result); Assert.AreEqual(expected, result); Assert.AreEqual(expected, Matrix.Add(test,test)); Assert.AreEqual(expected, test+test); } } } ================================================ FILE: Tests/Framework/PackedVectorTest.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics.PackedVector; using NUnit.Framework; namespace Kni.Tests.Framework { class PackedVectorTest { [Test] public void Alpha8() { // Test the limits. Assert.AreEqual(0x0, new Alpha8(0f).PackedValue); Assert.AreEqual(0xFF, new Alpha8(1f).PackedValue); // Test clamping. Assert.AreEqual(0x0, new Alpha8(-1234f).PackedValue); Assert.AreEqual(0xFF, new Alpha8(1234f).PackedValue); //Test ordering Assert.AreEqual(124, new Alpha8(124f / 0xff).PackedValue); Assert.AreEqual(26, new Alpha8(0.1f).PackedValue); var packed = new Alpha8(0.5f).PackedValue; var unpacked = new Alpha8() { PackedValue = packed }.ToAlpha(); Assert.AreEqual(0.5f, unpacked, 0.01f); } [Test] public void Bgra5551() { // Test the limits. Assert.AreEqual(0x0, new Bgra5551(Vector4.Zero).PackedValue); Assert.AreEqual(0xFFFF, new Bgra5551(Vector4.One).PackedValue); // Test ToVector4 Assert.AreEqual(Vector4.Zero, new Bgra5551(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.One, new Bgra5551(Vector4.One).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.Zero, new Bgra5551(Vector4.One * -1234.0f).ToVector4()); Assert.AreEqual(Vector4.One, new Bgra5551(Vector4.One * 1234.0f).ToVector4()); //Test Ordering float x = 0x1a; float y = 0x16; float z = 0xd; float w = 0x1; Assert.AreEqual(0xeacd, new Bgra5551(x / 0x1f, y / 0x1f, z / 0x1f, w).PackedValue); x = 0.1f; y = -0.3f; z = 0.5f; w = -0.7f; Assert.AreEqual(3088, new Bgra5551(x, y, z, w).PackedValue); var packed = new Bgra5551(x, y, z, w).PackedValue; var unpacked = new Bgra5551() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.1f); Assert.AreEqual(0f, unpacked.Y); Assert.AreEqual(z, unpacked.Z, 0.1f); Assert.AreEqual(0f, unpacked.W); } [Test] public void Rg32() { // Test the limits. Assert.AreEqual(0x0, new Rg32(Vector2.Zero).PackedValue); Assert.AreEqual(0xFFFFFFFF, new Rg32(Vector2.One).PackedValue); // Test ToVector2 Assert.AreEqual(Vector2.Zero, new Rg32(Vector2.Zero).ToVector2()); Assert.AreEqual(Vector2.One, new Rg32(Vector2.One).ToVector2()); // Test clamping. Assert.AreEqual(Vector2.Zero, new Rg32(Vector2.One * -1234.0f).ToVector2()); Assert.AreEqual(Vector2.One, new Rg32(Vector2.One * 1234.0f).ToVector2()); //Test Ordering float x = 0xb6dc; float y = 0xA59f; Assert.AreEqual(0xa59fb6dc, new Rg32(x / 0xffff, y / 0xffff).PackedValue); x = 0.1f; y = -0.3f; Assert.AreEqual(6554, new Rg32(x, y).PackedValue); var packed = new Rg32(x, y).PackedValue; var unpacked = new Rg32() { PackedValue = packed }.ToVector2(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(0f, unpacked.Y); } [Test] public void Rgba1010102() { // Test the limits. Assert.AreEqual(0x0, new Rgba1010102(Vector4.Zero).PackedValue); Assert.AreEqual(0xFFFFFFFF, new Rgba1010102(Vector4.One).PackedValue); // Test ToVector4 Assert.AreEqual(Vector4.Zero, new Rgba1010102(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.One, new Rgba1010102(Vector4.One).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.Zero, new Rgba1010102(Vector4.One * -1234.0f).ToVector4()); Assert.AreEqual(Vector4.One, new Rgba1010102(Vector4.One * 1234.0f).ToVector4()); //Test Ordering float x = 0x2db; float y = 0x36d; float z = 0x3b7; float w = 0x1; Assert.AreEqual(0x7B7DB6DB, new Rgba1010102(x / 0x3ff, y / 0x3ff, z / 0x3ff, w / 3).PackedValue); x = 0.1f; y = -0.3f; z = 0.5f; w = -0.7f; Assert.AreEqual(536871014, new Rgba1010102(x, y, z, w).PackedValue); var packed = new Rgba1010102(x, y, z, w).PackedValue; var unpacked = new Rgba1010102() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(0f, unpacked.Y, 0.01f); Assert.AreEqual(z, unpacked.Z, 0.01f); Assert.AreEqual(0f, unpacked.W, 0.01f); } [Test] public void Rgba64() { // Test the limits. Assert.AreEqual(0x0, new Rgba64(Vector4.Zero).PackedValue); Assert.AreEqual(0xFFFFFFFFFFFFFFFF, new Rgba64(Vector4.One).PackedValue); // Test ToVector4 Assert.AreEqual(Vector4.Zero, new Rgba64(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.One, new Rgba64(Vector4.One).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.Zero, new Rgba64(Vector4.One * -1234.0f).ToVector4()); Assert.AreEqual(Vector4.One, new Rgba64(Vector4.One * 1234.0f).ToVector4()); //Test data ordering Assert.AreEqual(0xC7AD8F5C570A1EB8, new Rgba64(((float) 0x1EB8) / 0xffff, ((float) 0x570A) / 0xffff, ((float) 0x8F5C) / 0xffff, ((float) 0xC7AD) / 0xffff).PackedValue); Assert.AreEqual(0xC7AD8F5C570A1EB8, new Rgba64(0.12f, 0.34f, 0.56f, 0.78f).PackedValue); Assert.AreEqual(0x73334CCC2666147B, new Rgba64(0.08f, 0.15f, 0.30f, 0.45f).PackedValue); float x = 0.1f; float y = -0.3f; float z = 0.5f; float w = -0.7f; var packed = new Rgba64(x, y, z, w).PackedValue; var unpacked = new Rgba64() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(0f, unpacked.Y, 0.01f); Assert.AreEqual(z, unpacked.Z, 0.01f); Assert.AreEqual(0f, unpacked.W, 0.01f); } [Test] public void NormalizedByte4() { Assert.AreEqual(0x0, new NormalizedByte4(Vector4.Zero).PackedValue); Assert.AreEqual(0x7F7F7F7F, new NormalizedByte4(Vector4.One).PackedValue); Assert.AreEqual(0x81818181, new NormalizedByte4(-Vector4.One).PackedValue); Assert.AreEqual(Vector4.One, new NormalizedByte4(Vector4.One).ToVector4()); Assert.AreEqual(Vector4.Zero, new NormalizedByte4(Vector4.Zero).ToVector4()); Assert.AreEqual(-Vector4.One, new NormalizedByte4(-Vector4.One).ToVector4()); Assert.AreEqual(Vector4.One, new NormalizedByte4(Vector4.One * 1234.0f).ToVector4()); Assert.AreEqual(-Vector4.One, new NormalizedByte4(Vector4.One * -1234.0f).ToVector4()); //Test Ordering float x = 0.1f; float y = -0.3f; float z = 0.5f; float w = -0.7f; Assert.AreEqual(0xA740DA0D, new NormalizedByte4(x, y, z, w).PackedValue); Assert.AreEqual(958796544, new NormalizedByte4(0.0008f, 0.15f, 0.30f, 0.45f).PackedValue); var packed = new NormalizedByte4(x, y, z, w).PackedValue; var unpacked = new NormalizedByte4() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); Assert.AreEqual(z, unpacked.Z, 0.01f); Assert.AreEqual(w, unpacked.W, 0.01f); } [Test] public void NormalizedByte2() { Assert.AreEqual(0x0, new NormalizedByte2(Vector2.Zero).PackedValue); Assert.AreEqual(0x7F7F, new NormalizedByte2(Vector2.One).PackedValue); Assert.AreEqual(0x8181, new NormalizedByte2(-Vector2.One).PackedValue); Assert.AreEqual(Vector2.One, new NormalizedByte2(Vector2.One).ToVector2()); Assert.AreEqual(Vector2.Zero, new NormalizedByte2(Vector2.Zero).ToVector2()); Assert.AreEqual(-Vector2.One, new NormalizedByte2(-Vector2.One).ToVector2()); Assert.AreEqual(Vector2.One, new NormalizedByte2(Vector2.One * 1234.0f).ToVector2()); Assert.AreEqual(-Vector2.One, new NormalizedByte2(Vector2.One * -1234.0f).ToVector2()); Assert.AreEqual(new Vector4(1, 1, 0, 1), ((IPackedVector) new NormalizedByte2(Vector2.One)).ToVector4()); Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new NormalizedByte2(Vector2.Zero)).ToVector4()); //Test Ordering float x = 0.1f; float y = -0.3f; Assert.AreEqual(0xda0d, new NormalizedByte2(x, y).PackedValue); var packed = new NormalizedByte2(x, y).PackedValue; var unpacked = new NormalizedByte2() { PackedValue = packed }.ToVector2(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); } [Test] public void NormalizedShort4() { Assert.AreEqual(0x0, new NormalizedShort4(Vector4.Zero).PackedValue); Assert.AreEqual(0x7FFF7FFF7FFF7FFF, new NormalizedShort4(Vector4.One).PackedValue); Assert.AreEqual(0x8001800180018001, new NormalizedShort4(-Vector4.One).PackedValue); Assert.AreEqual(Vector4.One, new NormalizedShort4(Vector4.One).ToVector4()); Assert.AreEqual(Vector4.Zero, new NormalizedShort4(Vector4.Zero).ToVector4()); Assert.AreEqual(-Vector4.One, new NormalizedShort4(-Vector4.One).ToVector4()); Assert.AreEqual(Vector4.One, new NormalizedShort4(Vector4.One * 1234.0f).ToVector4()); Assert.AreEqual(-Vector4.One, new NormalizedShort4(Vector4.One * -1234.0f).ToVector4()); //Test Ordering float x = 0.1f; float y = -0.3f; float z = 0.5f; float w = -0.7f; Assert.AreEqual(0xa6674000d99a0ccd, new NormalizedShort4(x, y, z, w).PackedValue); Assert.AreEqual(4150390751449251866, new NormalizedShort4(0.0008f, 0.15f, 0.30f, 0.45f).PackedValue); var packed = new NormalizedShort4(x, y, z, w).PackedValue; var unpacked = new NormalizedShort4() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); Assert.AreEqual(z, unpacked.Z, 0.01f); Assert.AreEqual(w, unpacked.W, 0.01f); } [Test] public void NormalizedShort2() { Assert.AreEqual(0x0, new NormalizedShort2(Vector2.Zero).PackedValue); Assert.AreEqual(0x7FFF7FFF, new NormalizedShort2(Vector2.One).PackedValue); Assert.AreEqual(0x80018001, new NormalizedShort2(-Vector2.One).PackedValue); Assert.AreEqual(Vector2.One, new NormalizedShort2(Vector2.One).ToVector2()); Assert.AreEqual(Vector2.Zero, new NormalizedShort2(Vector2.Zero).ToVector2()); Assert.AreEqual(-Vector2.One, new NormalizedShort2(-Vector2.One).ToVector2()); Assert.AreEqual(Vector2.One, new NormalizedShort2(Vector2.One * 1234.0f).ToVector2()); Assert.AreEqual(-Vector2.One, new NormalizedShort2(Vector2.One * -1234.0f).ToVector2()); Assert.AreEqual(new Vector4(1, 1, 0, 1), ((IPackedVector) new NormalizedShort2(Vector2.One)).ToVector4()); Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new NormalizedShort2(Vector2.Zero)).ToVector4()); //Test Ordering float x = 0.35f; float y = -0.2f; Assert.AreEqual(0xE6672CCC, new NormalizedShort2(x, y).PackedValue); x = 0.1f; y = -0.3f; Assert.AreEqual(3650751693, new NormalizedShort2(x, y).PackedValue); var packed = new NormalizedShort2(x, y).PackedValue; var unpacked = new NormalizedShort2() { PackedValue = packed }.ToVector2(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); } [Test] public void Short2() { // Test the limits. Assert.AreEqual(0x0, new Short2(Vector2.Zero).PackedValue); Assert.AreEqual(0x7FFF7FFF, new Short2(Vector2.One * 0x7FFF).PackedValue); Assert.AreEqual(0x80008000, new Short2(Vector2.One * -0x8000).PackedValue); // Test ToVector2. Assert.AreEqual(Vector2.One * 0x7FFF, new Short2(Vector2.One * 0x7FFF).ToVector2()); Assert.AreEqual(Vector2.Zero, new Short2(Vector2.Zero).ToVector2()); Assert.AreEqual(Vector2.One * -0x8000, new Short2(Vector2.One * -0x8000).ToVector2()); Assert.AreEqual(Vector2.UnitX * 0x7FFF, new Short2(Vector2.UnitX * 0x7FFF).ToVector2()); Assert.AreEqual(Vector2.UnitY * 0x7FFF, new Short2(Vector2.UnitY * 0x7FFF).ToVector2()); // Test clamping. Assert.AreEqual(Vector2.One * 0x7FFF, new Short2(Vector2.One * 1234567.0f).ToVector2()); Assert.AreEqual(Vector2.One * -0x8000, new Short2(Vector2.One * -1234567.0f).ToVector2()); // Test ToVector4. Assert.AreEqual(new Vector4(0x7FFF, 0x7FFF, 0, 1), ((IPackedVector) new Short2(Vector2.One * 0x7FFF)).ToVector4()); Assert.AreEqual(new Vector4(0, 0, 0, 1), ((IPackedVector) new Short2(Vector2.Zero)).ToVector4()); Assert.AreEqual(new Vector4(-0x8000, -0x8000, 0, 1), ((IPackedVector) new Short2(Vector2.One * -0x8000)).ToVector4()); //Test ordering float x = 0x2db1; float y = 0x361d; Assert.AreEqual(0x361d2db1, new Short2(x, y).PackedValue); x = 127.5f; y = -5.3f; Assert.AreEqual(4294639744, new Short2(x, y).PackedValue); var packed = new Short2(x, y).PackedValue; var unpacked = new Short2() { PackedValue = packed }.ToVector2(); Assert.AreEqual(128f, unpacked.X); Assert.AreEqual(-5f, unpacked.Y); } [Test] public void Short4() { // Test the limits. Assert.AreEqual(0x0, new Short4(Vector4.Zero).PackedValue); Assert.AreEqual(0x7FFF7FFF7FFF7FFF, new Short4(Vector4.One * 0x7FFF).PackedValue); Assert.AreEqual(0x8000800080008000, new Short4(Vector4.One * -0x8000).PackedValue); // Test ToVector4. Assert.AreEqual(Vector4.One * 0x7FFF, new Short4(Vector4.One * 0x7FFF).ToVector4()); Assert.AreEqual(Vector4.Zero, new Short4(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.One * -0x8000, new Short4(Vector4.One * -0x8000).ToVector4()); Assert.AreEqual(Vector4.UnitX * 0x7FFF, new Short4(Vector4.UnitX * 0x7FFF).ToVector4()); Assert.AreEqual(Vector4.UnitY * 0x7FFF, new Short4(Vector4.UnitY * 0x7FFF).ToVector4()); Assert.AreEqual(Vector4.UnitZ * 0x7FFF, new Short4(Vector4.UnitZ * 0x7FFF).ToVector4()); Assert.AreEqual(Vector4.UnitW * 0x7FFF, new Short4(Vector4.UnitW * 0x7FFF).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.One * 0x7FFF, new Short4(Vector4.One * 1234567.0f).ToVector4()); Assert.AreEqual(Vector4.One * -0x8000, new Short4(Vector4.One * -1234567.0f).ToVector4()); //Test Ordering float x = 0x2d1b; float y = 0x316d; float z = 0x73b7; float w = 0x00c1; Assert.AreEqual(0x00c173b7316d2d1b, new Short4(x, y, z, w).PackedValue); x = 0.1f; y = -0.3f; z = 0.5f; w = -0.7f; Assert.AreEqual(18446462598732840960, new Short4(x, y, z, w).PackedValue); var packed = new Short4(x, y, z, w).PackedValue; var unpacked = new Short4() { PackedValue = packed }.ToVector4(); Assert.AreEqual(0f, unpacked.X); Assert.AreEqual(0f, unpacked.Y); Assert.AreEqual(0f, unpacked.Z); Assert.AreEqual(-1f, unpacked.W); } [Test] public void Bgra4444() { // Test the limits. Assert.AreEqual(0x0, new Bgra4444(Vector4.Zero).PackedValue); Assert.AreEqual(0xFFFF, new Bgra4444(Vector4.One).PackedValue); // Test ToVector4. Assert.AreEqual(Vector4.One, new Bgra4444(Vector4.One).ToVector4()); Assert.AreEqual(Vector4.Zero, new Bgra4444(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.UnitX, new Bgra4444(Vector4.UnitX).ToVector4()); Assert.AreEqual(Vector4.UnitY, new Bgra4444(Vector4.UnitY).ToVector4()); Assert.AreEqual(Vector4.UnitZ, new Bgra4444(Vector4.UnitZ).ToVector4()); Assert.AreEqual(Vector4.UnitW, new Bgra4444(Vector4.UnitW).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.Zero, new Bgra4444(Vector4.One * -1234.0f).ToVector4()); Assert.AreEqual(Vector4.One, new Bgra4444(Vector4.One * 1234.0f).ToVector4()); // Make sure the swizzle is correct. Assert.AreEqual(0x0F00, new Bgra4444(Vector4.UnitX).PackedValue); Assert.AreEqual(0x00F0, new Bgra4444(Vector4.UnitY).PackedValue); Assert.AreEqual(0x000F, new Bgra4444(Vector4.UnitZ).PackedValue); Assert.AreEqual(0xF000, new Bgra4444(Vector4.UnitW).PackedValue); float x = 0.1f; float y = -0.3f; float z = 0.5f; float w = -0.7f; Assert.AreEqual(520, new Bgra4444(x, y, z, w).PackedValue); var packed = new Bgra4444(x, y, z, w).PackedValue; var unpacked = new Bgra4444() { PackedValue = packed }.ToVector4(); Assert.AreEqual(0.13f, unpacked.X, 0.01f); Assert.AreEqual(0f, unpacked.Y); Assert.AreEqual(0.53f, unpacked.Z, 0.01f); Assert.AreEqual(0f, unpacked.W); } [Test] public void Bgr565() { // Test the limits. Assert.AreEqual(0x0, new Bgr565(Vector3.Zero).PackedValue); Assert.AreEqual(0xFFFF, new Bgr565(Vector3.One).PackedValue); // Test ToVector3. Assert.AreEqual(Vector3.One, new Bgr565(Vector3.One).ToVector3()); Assert.AreEqual(Vector3.Zero, new Bgr565(Vector3.Zero).ToVector3()); Assert.AreEqual(Vector3.UnitX, new Bgr565(Vector3.UnitX).ToVector3()); Assert.AreEqual(Vector3.UnitY, new Bgr565(Vector3.UnitY).ToVector3()); Assert.AreEqual(Vector3.UnitZ, new Bgr565(Vector3.UnitZ).ToVector3()); // Test clamping. Assert.AreEqual(Vector3.Zero, new Bgr565(Vector3.One * -1234.0f).ToVector3()); Assert.AreEqual(Vector3.One, new Bgr565(Vector3.One * 1234.0f).ToVector3()); // Make sure the swizzle is correct. Assert.AreEqual(0xF800, new Bgr565(Vector3.UnitX).PackedValue); Assert.AreEqual(0x07E0, new Bgr565(Vector3.UnitY).PackedValue); Assert.AreEqual(0x001F, new Bgr565(Vector3.UnitZ).PackedValue); float x = 0.1f; float y = -0.3f; float z = 0.5f; Assert.AreEqual(6160, new Bgr565(x, y, z).PackedValue); var packed = new Bgr565(x, y, z).PackedValue; var unpacked = new Bgr565() { PackedValue = packed }.ToVector3(); Assert.AreEqual(x, unpacked.X, 0.1f); Assert.AreEqual(0f, unpacked.Y); Assert.AreEqual(z, unpacked.Z, 0.1f); } [Test] public void Byte4() { // Test the limits. Assert.AreEqual(0x0, new Byte4(Vector4.Zero).PackedValue); Assert.AreEqual(0xFFFFFFFF, new Byte4(Vector4.One * 255).PackedValue); // Test ToVector4. Assert.AreEqual(Vector4.One * 255, new Byte4(Vector4.One * 255).ToVector4()); Assert.AreEqual(Vector4.Zero, new Byte4(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.UnitX * 255, new Byte4(Vector4.UnitX * 255).ToVector4()); Assert.AreEqual(Vector4.UnitY * 255, new Byte4(Vector4.UnitY * 255).ToVector4()); Assert.AreEqual(Vector4.UnitZ * 255, new Byte4(Vector4.UnitZ * 255).ToVector4()); Assert.AreEqual(Vector4.UnitW * 255, new Byte4(Vector4.UnitW * 255).ToVector4()); // Test clamping. Assert.AreEqual(Vector4.Zero, new Byte4(Vector4.One * -1234.0f).ToVector4()); Assert.AreEqual(Vector4.One * 255, new Byte4(Vector4.One * 1234.0f).ToVector4()); //Test ordering float x = 0x2d; float y = 0x36; float z = 0x7b; float w = 0x1a; Assert.AreEqual(0x1a7b362d, new Byte4(x, y, z, w).PackedValue); x = 127.5f; y = -12.3f; z = 0.5f; w = -0.7f; Assert.AreEqual(128, new Byte4(x, y, z, w).PackedValue); var packed = new Byte4(x, y, z, w).PackedValue; var unpacked = new Byte4() { PackedValue = packed }.ToVector4(); Assert.AreEqual(128f, unpacked.X); Assert.AreEqual(0f, unpacked.Y); Assert.AreEqual(0f, unpacked.Z); Assert.AreEqual(0f, unpacked.W); } [Test] public void HalfSingle() { //Test limits Assert.AreEqual(15360, new HalfSingle(1f).PackedValue); Assert.AreEqual(0, new HalfSingle(0f).PackedValue); Assert.AreEqual(48128, new HalfSingle(-1f).PackedValue); //Test values Assert.AreEqual(11878, new HalfSingle(0.1f).PackedValue); Assert.AreEqual(46285, new HalfSingle(-0.3f).PackedValue); var packed = new HalfSingle(0.5f).PackedValue; var unpacked = new HalfSingle() { PackedValue = packed }.ToSingle(); Assert.AreEqual(0.5f, unpacked, 0.01f); } [Test] public void HalfVector2() { //Test PackedValue Assert.AreEqual(0u, new HalfVector2(Vector2.Zero).PackedValue); Assert.AreEqual(1006648320u, new HalfVector2(Vector2.One).PackedValue); Assert.AreEqual(3033345638u, new HalfVector2(0.1f, -0.3f).PackedValue); //Test ToVector2 Assert.AreEqual(Vector2.Zero, new HalfVector2(Vector2.Zero).ToVector2()); Assert.AreEqual(Vector2.One, new HalfVector2(Vector2.One).ToVector2()); Assert.AreEqual(Vector2.UnitX, new HalfVector2(Vector2.UnitX).ToVector2()); Assert.AreEqual(Vector2.UnitY, new HalfVector2(Vector2.UnitY).ToVector2()); var x = 0.1f; var y = -0.3f; var packed = new HalfVector2(x, y).PackedValue; var unpacked = new HalfVector2() { PackedValue = packed }.ToVector2(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); } [Test] public void HalfVector4() { //Test PackedValue Assert.AreEqual(0uL, new HalfVector4(Vector4.Zero).PackedValue); Assert.AreEqual(4323521613979991040uL, new HalfVector4(Vector4.One).PackedValue); Assert.AreEqual(13547034390470638592uL, new HalfVector4(-Vector4.One).PackedValue); Assert.AreEqual(15360uL, new HalfVector4(Vector4.UnitX).PackedValue); Assert.AreEqual(1006632960uL, new HalfVector4(Vector4.UnitY).PackedValue); Assert.AreEqual(65970697666560uL, new HalfVector4(Vector4.UnitZ).PackedValue); Assert.AreEqual(4323455642275676160uL, new HalfVector4(Vector4.UnitW).PackedValue); Assert.AreEqual(4035285078724390502uL, new HalfVector4(0.1f, 0.3f, 0.4f, 0.5f).PackedValue); //Test ToVector4 Assert.AreEqual(Vector4.Zero, new HalfVector4(Vector4.Zero).ToVector4()); Assert.AreEqual(Vector4.One, new HalfVector4(Vector4.One).ToVector4()); Assert.AreEqual(-Vector4.One, new HalfVector4(-Vector4.One).ToVector4()); Assert.AreEqual(Vector4.UnitX, new HalfVector4(Vector4.UnitX).ToVector4()); Assert.AreEqual(Vector4.UnitY, new HalfVector4(Vector4.UnitY).ToVector4()); Assert.AreEqual(Vector4.UnitZ, new HalfVector4(Vector4.UnitZ).ToVector4()); Assert.AreEqual(Vector4.UnitW, new HalfVector4(Vector4.UnitW).ToVector4()); var x = 0.1f; var y = -0.3f; var z = 0.5f; var w = -0.7f; var packed = new HalfVector4(x, y, z, w).PackedValue; var unpacked = new HalfVector4() { PackedValue = packed }.ToVector4(); Assert.AreEqual(x, unpacked.X, 0.01f); Assert.AreEqual(y, unpacked.Y, 0.01f); Assert.AreEqual(z, unpacked.Z, 0.01f); Assert.AreEqual(w, unpacked.W, 0.01f); } } } ================================================ FILE: Tests/Framework/PlaneTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { public class PlaneTest { [Test] public void TransformByMatrix() { // Our test plane. var plane = Plane.Normalize(new Plane(new Vector3(0, 1, 1), 2.5f)); // Our matrix. var matrix = Matrix.CreateRotationX(MathHelper.PiOver2); // Test transform. var expectedResult = new Plane(new Vector3(0, -0.7071068f, 0.7071067f), 1.767767f); Assert.That(Plane.Transform(plane, matrix), Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon)); } [Test] public void TransformByRefMatrix() { // Our test plane. var plane = Plane.Normalize(new Plane(new Vector3(1, 0.8f, 0.5f), 2.5f)); var originalPlane = plane; // Our matrix. var matrix = Matrix.CreateRotationX(MathHelper.PiOver2); var originalMatrix = matrix; // Test transform. Plane result; Plane.Transform(ref plane, ref matrix, out result); var expectedResult = new Plane(new Vector3(0.7273929f, -0.3636965f, 0.5819144f), 1.818482f); Assert.That(result, Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon)); Assert.That(plane, Is.EqualTo(originalPlane)); Assert.That(matrix, Is.EqualTo(originalMatrix)); } [Test] public void TransformByQuaternion() { // Our test plane. var plane = Plane.Normalize(new Plane(new Vector3(0, 1, 1), 2.5f)); // Our quaternion. var quaternion = Quaternion.CreateFromAxisAngle(Vector3.UnitX, MathHelper.PiOver2); // Test transform. var expectedResult = new Plane(new Vector3(0, -0.7071068f, 0.7071067f), 1.767767f); Assert.That(Plane.Transform(plane, quaternion), Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon)); } [Test] public void TransformByRefQuaternion() { // Our test plane. var plane = Plane.Normalize(new Plane(new Vector3(1, 0.8f, 0.5f), 2.5f)); var originalPlane = plane; // Our quaternion. var quaternion = Quaternion.CreateFromAxisAngle(Vector3.UnitX, MathHelper.PiOver2); var originalQuaternion = quaternion; // Test transform. Plane result; Plane.Transform(ref plane, ref quaternion, out result); var expectedResult = new Plane(new Vector3(0.7273929f, -0.3636965f, 0.5819144f), 1.818482f); Assert.That(result, Is.EqualTo(expectedResult).Using(PlaneComparer.Epsilon)); Assert.That(plane, Is.EqualTo(originalPlane)); Assert.That(quaternion, Is.EqualTo(originalQuaternion)); } #if !XNA [Test] public void Deconstruct() { Plane plane = new Plane(new Vector3(255, 255, 255), float.MaxValue); Vector3 normal; float d; plane.Deconstruct(out normal, out d); Assert.AreEqual(normal, plane.Normal); Assert.AreEqual(d, plane.D); } #endif } } ================================================ FILE: Tests/Framework/PointTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace MonoGame.Tests.Framework { public class PointTest { [Test] public void Deconstruct() { Point point = new Point(int.MinValue, int.MaxValue); int x, y; point.Deconstruct(out x, out y); Assert.AreEqual(x, point.X); Assert.AreEqual(y, point.Y); } } } ================================================ FILE: Tests/Framework/QuaternionTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class QuaternionTest { private void Compare(Quaternion expected, Quaternion source) { Assert.That(expected, Is.EqualTo(source).Using(QuaternionComparer.Epsilon)); } private void Compare(float expected, float source) { Assert.That(expected, Is.EqualTo(source).Using(FloatComparer.Epsilon)); } [Test] public void Constructors() { Quaternion expected; expected.X = 1; expected.Y = 2; expected.Z = 3; expected.W = 4; Compare(expected, new Quaternion(1, 2, 3, 4)); Compare(expected, new Quaternion(new Vector3(1, 2, 3), 4)); #if !XNA Compare(expected, new Quaternion(new Vector4(1, 2, 3, 4))); #endif } [Test] public void Properties() { Compare(new Quaternion(0, 0, 0, 1), Quaternion.Identity); } [Test] public void Add() { Quaternion q1 = new Quaternion(1, 2, 3, 4); Quaternion q2 = new Quaternion(1, 2, 3, 4); Quaternion expected = new Quaternion(2, 4, 6, 8); Compare(expected, Quaternion.Add(q1, q2)); Quaternion result; Quaternion.Add(ref q1, ref q2, out result); Compare(expected, result); } [Test] public void Concatenate() { Quaternion q1 = new Quaternion(1, 2.5f, 3, 4); Quaternion q2 = new Quaternion(1, 2, -3.8f, 2); Quaternion expected = new Quaternion(21.5f, 6.2f, -8.7f, 13.4f); Compare(expected, Quaternion.Concatenate(q1, q2)); Quaternion result; Quaternion.Concatenate(ref q1, ref q2, out result); Compare(expected, result); } [Test] public void Conjugate() { Quaternion q = new Quaternion(1, 2, 3, 4); Quaternion expected = new Quaternion(-1, -2, -3, 4); Compare(expected, Quaternion.Conjugate(q)); Quaternion result; Quaternion.Conjugate(ref q, out result); Compare(expected, result); q.Conjugate(); Compare(expected, q); } [Test] public void CreateFromAxisAngle() { Vector3 axis = new Vector3(0.5f, 1.1f, -3.8f); float angle = 0.25f; Quaternion expected = new Quaternion(0.06233737f, 0.1371422f, -0.473764f, 0.9921977f); Compare(expected, Quaternion.CreateFromAxisAngle(axis, angle)); Quaternion result; Quaternion.CreateFromAxisAngle(ref axis, angle, out result); Compare(expected, result); } [Test] public void CreateFromRotationMatrix() { var matrix = Matrix.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f); Quaternion expected = new Quaternion(0.5446088f, 0.1227905f, -0.1323988f, 0.8190203f); Compare(expected, Quaternion.CreateFromRotationMatrix(matrix)); Quaternion result; Quaternion.CreateFromRotationMatrix(ref matrix, out result); Compare(expected, result); } [Test] public void CreateFromYawPitchRoll() { Quaternion expected = new Quaternion(0.5446088f, 0.1227905f, -0.1323988f, 0.8190203f); Compare(expected, Quaternion.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f)); Quaternion result; Quaternion.CreateFromYawPitchRoll(0.15f, 1.18f, -0.22f, out result); Compare(expected, result); } [Test] public void Divide() { Quaternion q1 = new Quaternion(1, 2, 3, 4); Quaternion q2 = new Quaternion(0.2f, -0.6f, 11.9f, 0.01f); Quaternion expected = new Quaternion(-0.1858319f, 0.09661285f, -0.3279344f, 0.2446305f); Compare(expected, Quaternion.Divide(q1, q2)); Quaternion result; Quaternion.Divide(ref q1, ref q2, out result); Compare(expected, result); } [Test] public void Length() { Quaternion q1 = new Quaternion(1, 2, 3, 4); Compare(5.477226f,q1.Length()); } [Test] public void LengthSquared() { Quaternion q1 = new Quaternion(1, 2, 3, 4); Compare(30.0f, q1.LengthSquared()); } [Test] public void Normalize() { Quaternion q = new Quaternion(1, 2, 3, 4); Quaternion expected = new Quaternion(0.1825742f,0.3651484f,0.5477226f,0.7302967f); Compare(expected, Quaternion.Normalize(q)); Quaternion result; Quaternion.Normalize(ref q, out result); Compare(expected, result); q.Normalize(); Compare(expected, q); } #if !XNA [Test] public void Deconstruct() { Quaternion quaternion = new Quaternion(float.MinValue, float.MaxValue, float.MinValue, float.MaxValue); float x, y, z, w; quaternion.Deconstruct(out x, out y, out z, out w); Assert.AreEqual(x, quaternion.X); Assert.AreEqual(y, quaternion.Y); Assert.AreEqual(z, quaternion.Z); Assert.AreEqual(w, quaternion.W); } #endif } } ================================================ FILE: Tests/Framework/RayTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class RayTest { #if !XNA [Test] public void Deconstruct() { Ray ray = new Ray(Vector3.Backward, Vector3.Right); Vector3 position, direction; ray.Deconstruct(out position, out direction); Assert.AreEqual(position, ray.Position); Assert.AreEqual(direction, ray.Direction); } #endif } } ================================================ FILE: Tests/Framework/RectangleTest.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class RectangleTest { [Test] public void ConstructorsAndProperties() { var rectangle = new Rectangle(10, 20, 64, 64); // Constructor Assert.AreEqual(new Rectangle(){X = 10, Y = 20, Width = 64, Height = 64}, rectangle); #if !XNA // Constructor 2 Assert.AreEqual(new Rectangle() { X = 1, Y = 2, Width = 4, Height = 45 }, new Rectangle(new Point(1, 2), new Point(4, 45))); #endif // Left property Assert.AreEqual(10, rectangle.Left); // Right property Assert.AreEqual(64 + 10, rectangle.Right); // Top property Assert.AreEqual(20, rectangle.Top); // Bottom property Assert.AreEqual(64 + 20, rectangle.Bottom); // Location property Assert.AreEqual(new Point(10, 20), rectangle.Location); // Center property Assert.AreEqual(new Point(10+32,20+32), rectangle.Center); #if !XNA // Size property Assert.AreEqual(new Point(64,64), rectangle.Size); #endif // IsEmpty property Assert.AreEqual(false, rectangle.IsEmpty); Assert.AreEqual(true, new Rectangle().IsEmpty); // Empty - static property Assert.AreEqual(new Rectangle(),Rectangle.Empty); } [Test] public void ContainsPoint() { Rectangle rectangle = new Rectangle(0,0,64,64); var p1 = new Point(-1, -1); var p2 = new Point(0, 0); var p3 = new Point(32, 32); var p4 = new Point(63, 63); var p5 = new Point(64, 64); bool result; rectangle.Contains(ref p1, out result); Assert.AreEqual(false, result); rectangle.Contains(ref p2, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p3, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p4, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p5, out result); Assert.AreEqual(false, result); Assert.AreEqual(false, rectangle.Contains(p1)); Assert.AreEqual(true, rectangle.Contains(p2)); Assert.AreEqual(true, rectangle.Contains(p3)); Assert.AreEqual(true, rectangle.Contains(p4)); Assert.AreEqual(false, rectangle.Contains(p5)); } #if !XNA [Test] public void ContainsVector2() { Rectangle rectangle = new Rectangle(0, 0, 64, 64); var p1 = new Vector2(-1, -1); var p2 = new Vector2(0, 0); var p3 = new Vector2(32, 32); var p4 = new Vector2(63, 63); var p5 = new Vector2(64, 64); bool result; rectangle.Contains(ref p1, out result); Assert.AreEqual(false, result); rectangle.Contains(ref p2, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p3, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p4, out result); Assert.AreEqual(true, result); rectangle.Contains(ref p5, out result); Assert.AreEqual(false, result); Assert.AreEqual(false, rectangle.Contains(p1)); Assert.AreEqual(true, rectangle.Contains(p2)); Assert.AreEqual(true, rectangle.Contains(p3)); Assert.AreEqual(true, rectangle.Contains(p4)); Assert.AreEqual(false, rectangle.Contains(p5)); } [Test] public void ContainsInts() { Rectangle rectangle = new Rectangle(0, 0, 64, 64); int x1 = -1; int y1 = -1; int x2 = 0; int y2 = 0; int x3 = 32; int y3 = 32; int x4 = 63; int y4 = 63; int x5 = 64; int y5 = 64; Assert.AreEqual(false, rectangle.Contains(x1,y1)); Assert.AreEqual(true, rectangle.Contains(x2,y2)); Assert.AreEqual(true, rectangle.Contains(x3,y3)); Assert.AreEqual(true, rectangle.Contains(x4,y4)); Assert.AreEqual(false, rectangle.Contains(x5,y5)); } [Test] public void ContainsFloats() { Rectangle rectangle = new Rectangle(0, 0, 64, 64); float x1 = -1; float y1 = -1; float x2 = 0; float y2 = 0; float x3 = 32; float y3 = 32; float x4 = 63; float y4 = 63; float x5 = 64; float y5 = 64; Assert.AreEqual(false, rectangle.Contains(x1, y1)); Assert.AreEqual(true, rectangle.Contains(x2, y2)); Assert.AreEqual(true, rectangle.Contains(x3, y3)); Assert.AreEqual(true, rectangle.Contains(x4, y4)); Assert.AreEqual(false, rectangle.Contains(x5, y5)); } #endif [Test] public void ContainsRectangle() { var rectangle = new Rectangle(0, 0, 64, 64); var rect1 = new Rectangle(-1, -1, 32, 32); var rect2 = new Rectangle(0, 0, 32, 32); var rect3 = new Rectangle(0, 0, 64, 64); var rect4 = new Rectangle(1, 1, 64, 64); bool result; rectangle.Contains(ref rect1, out result); Assert.AreEqual(false, result); rectangle.Contains(ref rect2, out result); Assert.AreEqual(true, result); rectangle.Contains(ref rect3, out result); Assert.AreEqual(true, result); rectangle.Contains(ref rect4, out result); Assert.AreEqual(false, result); Assert.AreEqual(false, rectangle.Contains(rect1)); Assert.AreEqual(true, rectangle.Contains(rect2)); Assert.AreEqual(true, rectangle.Contains(rect3)); Assert.AreEqual(false, rectangle.Contains(rect4)); } [Test] public void Inflate() { Rectangle rectangle = new Rectangle(0,0,64,64); rectangle.Inflate(10,-10); Assert.AreEqual(new Rectangle(-10, 10, 84, 44),rectangle); #if !XNA Rectangle rectangleF = new Rectangle(0, 0, 64, 64); rectangleF.Inflate(10.0f, -10.0f); Assert.AreEqual(new Rectangle(-10, 10, 84, 44), rectangleF); #endif } [Test] public void Intersect() { var first = new Rectangle(0, 0, 64, 64); var second = new Rectangle(-32, -32, 64, 64); var expected = new Rectangle(0, 0, 32, 32); // First overload testing(forward and backward) Rectangle result; Rectangle.Intersect(ref first, ref second, out result); Assert.AreEqual(expected, result); Rectangle.Intersect(ref second, ref first, out result); Assert.AreEqual(expected, result); // Second overload testing(forward and backward) Assert.AreEqual(expected, Rectangle.Intersect(first, second)); Assert.AreEqual(expected, Rectangle.Intersect(second, first)); } [Test] public void Union() { var first = new Rectangle(-64, -64, 64, 64); var second = new Rectangle(0, 0, 64, 64); var expected = new Rectangle(-64, -64, 128, 128); // First overload testing(forward and backward) Rectangle result; Rectangle.Union(ref first, ref second, out result); Assert.AreEqual(expected, result); Rectangle.Union(ref second, ref first, out result); Assert.AreEqual(expected, result); // Second overload testing(forward and backward) Assert.AreEqual(expected, Rectangle.Union(first, second)); Assert.AreEqual(expected, Rectangle.Union(second, first)); } [Test] public void ToStringTest() { StringAssert.IsMatch("{X:-10 Y:10 Width:100 Height:1000}",new Rectangle(-10,10,100,1000).ToString()); } #if !XNA [Test] public void Deconstruct() { Rectangle rectangle = new Rectangle(int.MinValue, int.MaxValue, int.MinValue, int.MaxValue); int x, y, width, height; rectangle.Deconstruct(out x, out y, out width, out height); Assert.AreEqual(x, rectangle.X); Assert.AreEqual(y, rectangle.Y); Assert.AreEqual(width, rectangle.Width); Assert.AreEqual(height, rectangle.Height); } #endif } } ================================================ FILE: Tests/Framework/TitleContainerTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests.Framework { class TitleContainerTest { [Test] public void OpenStream() { Assert.Throws(() => TitleContainer.OpenStream(null)); Assert.Throws(() => TitleContainer.OpenStream(string.Empty)); Assert.Throws(() => TitleContainer.OpenStream("")); Assert.Throws(() => TitleContainer.OpenStream(" ")); Assert.Throws(() => TitleContainer.OpenStream("notfound")); // under mono we get a FileNotFoundException for this path. Assert.Throws(Is.TypeOf().Or.TypeOf(), () => TitleContainer.OpenStream(@"C:\\")); // TODO: This always fails on XNA... even though it shouldn't. I suspect // this is because internally XNA uses the entry/active assembly as the // root of the path. Since we are launched from some Nunit runner things // end up not working as we expect. // // We need to figure out the trick to hack around this to validate // non-failure tests against XNA. #if !XNA var stream = TitleContainer.OpenStream(@"Assets\Xml\01_TheBasics.xml"); Assert.AreEqual(0, stream.Position); Assert.AreEqual(true, stream.CanRead); Assert.AreEqual(true, stream.CanSeek); Assert.AreEqual(false, stream.CanWrite); stream.Dispose(); #endif } } } ================================================ FILE: Tests/Framework/UtilitiesTest.cs ================================================ using System.IO; using NUnit.Framework; using Microsoft.Xna.Platform.Content.Utilities; namespace Kni.Tests.Framework { class UtilitiesTest { [TestCase( @"C:\Game\Content\file", @"file.extension", @"C:\Game\Content\file.extension")] [TestCase( @"C:\Game\Content\file", @"..\file.extension", @"C:\Game\file.extension")] [TestCase( @"C:\Game\Content\..\file", @"file.extension", @"C:\Game\file.extension")] [TestCase( @"C:\Game\Content\..\file", @"..\file.extension", @"C:\file.extension")] [TestCase( @"C:\Game\Content\.\file", @"file.extension", @"C:\Game\Content\file.extension")] [TestCase( @"C:\Game\Content\.\file", @".\file.extension", @"C:\Game\Content\file.extension")] [TestCase( @"C:/Game/Content/file", @"file.extension", @"C:/Game/Content/file.extension")] [TestCase( @"C:/Game/Content/file", @"../file.extension", @"C:/Game/file.extension")] [TestCase( @"C:/Game/Content/../file", @"file.extension", @"C:/Game/file.extension")] [TestCase( @"C:/Game/Content/../file", @"../file.extension", @"C:/file.extension")] [TestCase( @"C:/Game/Content/./file", @"file.extension", @"C:/Game/Content/file.extension")] [TestCase( @"C:/Game/Content/./file", @"./file.extension", @"C:/Game/Content/file.extension")] [TestCase( @"\application0\Content\file", @"file.extension", @"\application0\Content\file.extension")] [TestCase( @"\application0\Content\file", @"..\file.extension", @"\application0\file.extension")] [TestCase( @"\application0\Content\..\file", @"file.extension", @"\application0\file.extension")] [TestCase( @"\application0\Content\..\file", @"..\file.extension", @"\file.extension")] [TestCase( @"\application0\Content\.\file", @"file.extension", @"\application0\Content\file.extension")] [TestCase( @"\application0\Content\.\file", @".\file.extension", @"\application0\Content\file.extension")] [TestCase( @"/application0/Content/file", @"file.extension", @"/application0/Content/file.extension")] [TestCase( @"/application0/Content/file", @"../file.extension", @"/application0/file.extension")] [TestCase( @"/application0/Content/../file", @"file.extension", @"/application0/file.extension")] [TestCase( @"/application0/Content/../file", @"../file.extension", @"/file.extension")] [TestCase( @"/application0/Content/./file", @"file.extension", @"/application0/Content/file.extension")] [TestCase( @"/application0/Content/./file", @"./file.extension", @"/application0/Content/file.extension")] [TestCase( @"Content\file", @"file.extension", @"Content\file.extension")] [TestCase( @"Content\file", @"..\file.extension", @"file.extension")] [TestCase( @"Content\..\file", @"file.extension", @"file.extension")] [TestCase( @"Content\..\file", @"..\file.extension", @"file.extension")] [TestCase( @"Content\.\file", @"file.extension", @"Content\file.extension")] [TestCase( @"Content\.\file", @".\file.extension", @"Content\file.extension")] [TestCase( @"Content/file", @"file.extension", @"Content/file.extension")] [TestCase( @"Content/file", @"../file.extension", @"file.extension")] [TestCase( @"Content/../file", @"file.extension", @"file.extension")] [TestCase( @"Content/../file", @"../file.extension", @"file.extension")] [TestCase( @"Content/./file", @"file.extension", @"Content/file.extension")] [TestCase( @"Content/./file", @"./file.extension", @"Content/file.extension")] [TestCase( @"Content//file", @"../file.extension", @"file.extension")] [TestCase( @"C:\Game\Content\fi#le", @"fi#le.extension", @"C:\Game\Content\fi#le.extension")] public void ResolveRelativePath( string rootFilePath, string relativePath, string matchFullPath) { var fullPath = FileHelpers.ResolveRelativePath(rootFilePath, relativePath); Assert.NotNull(fullPath); // Make sure the matching path has the right seperators as well. matchFullPath = FileHelpers.NormalizeFilePathSeparators(matchFullPath); Assert.AreEqual(matchFullPath, fullPath); Assert.AreEqual(-1, fullPath.IndexOf(FileHelpers.NotSeparator)); } } } ================================================ FILE: Tests/Framework/Vector2Test.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; using System.ComponentModel; using System.Globalization; namespace Kni.Tests.Framework { class Vector2Test { [Test] public void CatmullRom() { var expectedResult = new Vector2(5.1944f, 6.1944f); var v1 = new Vector2(1, 2); var v2 = new Vector2(3, 4); var v3 = new Vector2(5, 6); var v4 = new Vector2(7, 8); var value = 1.0972f; Vector2 result; Vector2.CatmullRom(ref v1, ref v2, ref v3, ref v4, value, out result); Assert.That(expectedResult, Is.EqualTo(Vector2.CatmullRom(v1, v2, v3, v4, value)).Using(Vector2Comparer.Epsilon)); Assert.That(expectedResult, Is.EqualTo(result).Using(Vector2Comparer.Epsilon)); } [Test] public void Multiply() { var vector = new Vector2(1, 2); // Test 0.0 scale. Assert.AreEqual(Vector2.Zero, 0 * vector); Assert.AreEqual(Vector2.Zero, vector * 0); Assert.AreEqual(Vector2.Zero, Vector2.Multiply(vector, 0)); Assert.AreEqual(Vector2.Multiply(vector, 0), vector * 0.0f); // Test 1.0 scale. Assert.AreEqual(vector, 1 * vector); Assert.AreEqual(vector, vector * 1); Assert.AreEqual(vector, Vector2.Multiply(vector, 1)); Assert.AreEqual(Vector2.Multiply(vector, 1), vector * 1.0f); var scaledVec = vector * 2; // Test 2.0 scale. Assert.AreEqual(scaledVec, 2 * vector); Assert.AreEqual(scaledVec, vector * 2); Assert.AreEqual(scaledVec, Vector2.Multiply(vector, 2)); Assert.AreEqual(vector * 2.0f, scaledVec); Assert.AreEqual(2 * vector, Vector2.Multiply(vector, 2)); scaledVec = vector * 0.999f; // Test 0.999 scale. Assert.AreEqual(scaledVec, 0.999f * vector); Assert.AreEqual(scaledVec, vector * 0.999f); Assert.AreEqual(scaledVec, Vector2.Multiply(vector, 0.999f)); Assert.AreEqual(vector * 0.999f, scaledVec); Assert.AreEqual(0.999f * vector, Vector2.Multiply(vector, 0.999f)); var vector2 = new Vector2(2, 2); // Test two vectors multiplication. Assert.AreEqual(new Vector2(vector.X * vector2.X, vector.Y * vector2.Y), vector * vector2); Assert.AreEqual(vector2 * vector, new Vector2(vector.X * vector2.X, vector.Y * vector2.Y)); Assert.AreEqual(vector * vector2, Vector2.Multiply(vector, vector2)); Assert.AreEqual(Vector2.Multiply(vector, vector2), vector * vector2); Vector2 refVec; // Overloads comparsion var vector3 = Vector2.Multiply(vector, vector2); Vector2.Multiply(ref vector, ref vector2, out refVec); Assert.AreEqual(vector3, refVec); vector3 = Vector2.Multiply(vector, 2); Vector2.Multiply(ref vector, ref vector2, out refVec); Assert.AreEqual(vector3, refVec); } [Test] public void Hermite() { var t1 = new Vector2(1.40625f, 1.40625f); var t2 = new Vector2(2.662375f, 2.26537514f); var v1 = new Vector2(1, 1); var v2 = new Vector2(2, 2); var v3 = new Vector2(3, 3); var v4 = new Vector2(4, 4); var v5 = new Vector2(4, 3); var v6 = new Vector2(2, 1); var v7 = new Vector2(1, 2); var v8 = new Vector2(3, 4); Assert.That(t1, Is.EqualTo(Vector2.Hermite(v1, v2, v3, v4, 0.25f)).Using(Vector2Comparer.Epsilon)); Assert.That(t2, Is.EqualTo(Vector2.Hermite(v5, v6, v7, v8, 0.45f)).Using(Vector2Comparer.Epsilon)); Vector2 result1; Vector2 result2; Vector2.Hermite(ref v1, ref v2, ref v3, ref v4, 0.25f, out result1); Vector2.Hermite(ref v5, ref v6, ref v7, ref v8, 0.45f, out result2); Assert.That(t1, Is.EqualTo(result1).Using(Vector2Comparer.Epsilon)); Assert.That(t2, Is.EqualTo(result2).Using(Vector2Comparer.Epsilon)); } [Test] public void Transform() { // STANDART OVERLOADS TEST var expectedResult1 = new Vector2(24, 28); var expectedResult2 = new Vector2(-0.0168301091f, 2.30964f); var v1 = new Vector2(1, 2); var m1 = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); var v2 = new Vector2(1.1f, 2.45f); var q2 = new Quaternion(0.11f, 0.22f, 0.33f, 0.55f); var q3 = new Quaternion(1, 2, 3, 4); Assert.That(expectedResult1, Is.EqualTo(Vector2.Transform(v1, m1)).Using(Vector2Comparer.Epsilon)); Assert.That(expectedResult2, Is.EqualTo(Vector2.Transform(v2, q2)).Using(Vector2Comparer.Epsilon)); // OUTPUT OVERLOADS TEST Vector2 result1; Vector2 result2; Vector2.Transform(ref v1, ref m1, out result1); Vector2.Transform(ref v2, ref q2, out result2); Assert.That(expectedResult1, Is.EqualTo(result1).Using(Vector2Comparer.Epsilon)); Assert.That(expectedResult2, Is.EqualTo(result2).Using(Vector2Comparer.Epsilon)); // TRANSFORM ON LIST (MATRIX) { var sourceList1 = new Vector2[10]; var desinationList1 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList1[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList1, 0, ref m1, desinationList1, 0, 10); for (int i = 0; i < 10; i++) { Assert.That(desinationList1[i], Is.EqualTo(new Vector2(19 + (6 * i), 22 + (8 * i))).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST (MATRIX)(DESTINATION & SOURCE) { var sourceList2 = new Vector2[10]; var desinationList2 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList2[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList2, 2, ref m1, desinationList2, 1, 3); Assert.That(Vector2.Zero, Is.EqualTo(desinationList2[0]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(31, 38), Is.EqualTo(desinationList2[1]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(37, 46), Is.EqualTo(desinationList2[2]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(43, 54), Is.EqualTo(desinationList2[3]).Using(Vector2Comparer.Epsilon)); for (int i = 4; i < 10; i++) { Assert.That(Vector2.Zero, Is.EqualTo(desinationList2[i]).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST (MATRIX)(SIMPLE) { var sourceList3 = new Vector2[10]; var desinationList3 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList3[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList3, ref m1, desinationList3); for (int i = 0; i < 10; i++) { Assert.That(desinationList3[i], Is.EqualTo(new Vector2(19 + (6 * i), 22 + (8 * i))).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST (QUATERNION) { var sourceList4 = new Vector2[10]; var desinationList4 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList4[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList4, 0, ref q3, desinationList4, 0, 10); for (int i = 0; i < 10; i++) { Assert.That(new Vector2(-45 + (-45 * i), 9 + (9 * i)), Is.EqualTo(desinationList4[i]).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST (QUATERNION)(DESTINATION & SOURCE) { var sourceList5 = new Vector2[10]; var desinationList5 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList5[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList5, 2, ref q3, desinationList5, 1, 3); Assert.That(Vector2.Zero, Is.EqualTo(desinationList5[0]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(-135, 27), Is.EqualTo(desinationList5[1]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(-180, 36), Is.EqualTo(desinationList5[2]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(-225, 45), Is.EqualTo(desinationList5[3]).Using(Vector2Comparer.Epsilon)); for (int i = 4; i < 10; i++) { Assert.That(Vector2.Zero, Is.EqualTo(desinationList5[i]).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST (QUATERNION)(SIMPLE) { var sourceList6 = new Vector2[10]; var desinationList6 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceList6[i] = (new Vector2(1 + i, 1 + i)); } Vector2.Transform(sourceList6, ref q3, desinationList6); for (int i = 0; i < 10; i++) { Assert.That(new Vector2(-45 + (-45 * i), 9 + (9 * i)), Is.EqualTo(desinationList6[i]).Using(Vector2Comparer.Epsilon)); } } } [Test] public void TransformNormal() { var normal = new Vector2(1.5f, 2.5f); var matrix = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); var expectedResult1 = new Vector2(14, 18); var expectedResult2 = expectedResult1; Assert.That(expectedResult1, Is.EqualTo(Vector2.TransformNormal(normal, matrix)).Using(Vector2Comparer.Epsilon)); Vector2 result; Vector2.TransformNormal(ref normal, ref matrix, out result); Assert.That(expectedResult2, Is.EqualTo(result).Using(Vector2Comparer.Epsilon)); // TRANSFORM ON LIST { var sourceArray1 = new Vector2[10]; var destinationArray1 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceArray1[i] = new Vector2(i, i); } Vector2.TransformNormal(sourceArray1, 0, ref matrix, destinationArray1, 0, 10); for (int i = 0; i < 10; i++) { Assert.That(new Vector2(0 + (6 * i), 0 + (8 * i)), Is.EqualTo(destinationArray1[i]).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST(SOURCE OFFSET) { var sourceArray2 = new Vector2[10]; var destinationArray2 = new Vector2[10]; for (int i = 0; i < 10; i++) { sourceArray2[i] = new Vector2(i, i); } Vector2.TransformNormal(sourceArray2, 5, ref matrix, destinationArray2, 0, 5); for (int i = 0; i < 5; i++) { Assert.That(new Vector2(30 + (6 * i), 40 + (8 * i)), Is.EqualTo(destinationArray2[i]).Using(Vector2Comparer.Epsilon)); } for (int i = 5; i < 10; i++) { Assert.That(Vector2.Zero, Is.EqualTo(destinationArray2[i]).Using(Vector2Comparer.Epsilon)); } } // TRANSFORM ON LIST(DESTINATION OFFSET) { var sourceArray3 = new Vector2[10]; var destinationArray3 = new Vector2[10]; for (int i = 0; i < 10; ++i) { sourceArray3[i] = new Vector2(i, i); } Vector2.TransformNormal(sourceArray3, 0, ref matrix, destinationArray3, 5, 5); for (int i = 0; i < 6; ++i) { Assert.That(Vector2.Zero, Is.EqualTo(destinationArray3[i]).Using(Vector2Comparer.Epsilon)); } Assert.That(new Vector2(6, 8), Is.EqualTo(destinationArray3[6]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(12, 16), Is.EqualTo(destinationArray3[7]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(18, 24), Is.EqualTo(destinationArray3[8]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(24, 32), Is.EqualTo(destinationArray3[9]).Using(Vector2Comparer.Epsilon)); } // TRANSFORM ON LIST(DESTINATION & SOURCE) { var sourceArray4 = new Vector2[10]; var destinationArray4 = new Vector2[10]; for (int i = 0; i < 10; ++i) { sourceArray4[i] = new Vector2(i, i); } Vector2.TransformNormal(sourceArray4, 2, ref matrix, destinationArray4, 3, 6); for (int i = 0; i < 3; ++i) { Assert.That(Vector2.Zero, Is.EqualTo(destinationArray4[i]).Using(Vector2Comparer.Epsilon)); } Assert.That(new Vector2(12, 16), Is.EqualTo(destinationArray4[3]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(18, 24), Is.EqualTo(destinationArray4[4]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(24, 32), Is.EqualTo(destinationArray4[5]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(30, 40), Is.EqualTo(destinationArray4[6]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(36, 48), Is.EqualTo(destinationArray4[7]).Using(Vector2Comparer.Epsilon)); Assert.That(new Vector2(42, 56), Is.EqualTo(destinationArray4[8]).Using(Vector2Comparer.Epsilon)); Assert.That(Vector2.Zero, Is.EqualTo(destinationArray4[9]).Using(Vector2Comparer.Epsilon)); } // TRANSFORM ON LIST(SIMPLE) { var sourceArray5 = new Vector2[10]; var destinationArray5 = new Vector2[10]; for (int i = 0; i < 10; ++i) { sourceArray5[i] = new Vector2(i, i); } Vector2.TransformNormal(sourceArray5, ref matrix, destinationArray5); for (int i = 0; i < 10; ++i) { Assert.That(new Vector2(0 + (6 * i), 0 + (8 * i)), Is.EqualTo(destinationArray5[i]).Using(Vector2Comparer.Epsilon)); } } } [Test] public void TypeConverter() { var converter = TypeDescriptor.GetConverter(typeof(Vector2)); var invariantCulture = CultureInfo.InvariantCulture; Assert.AreEqual(new Vector2(32, 64), converter.ConvertFromString(null, invariantCulture, "32, 64")); Assert.AreEqual(new Vector2(0.5f, 2.75f), converter.ConvertFromString(null, invariantCulture, "0.5, 2.75")); Assert.AreEqual(new Vector2(1024.5f, 2048.75f), converter.ConvertFromString(null, invariantCulture, "1024.5, 2048.75")); Assert.AreEqual("32, 64", converter.ConvertToString(null, invariantCulture, new Vector2(32, 64))); Assert.AreEqual("0.5, 2.75", converter.ConvertToString(null, invariantCulture, new Vector2(0.5f, 2.75f))); Assert.AreEqual("1024.5, 2048.75", converter.ConvertToString(null, invariantCulture, new Vector2(1024.5f, 2048.75f))); var otherCulture = new CultureInfo("el-GR"); var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (2048.75f).ToString(otherCulture); Assert.AreEqual(new Vector2(1024.5f, 2048.75f), converter.ConvertFromString(null, otherCulture, vectorStr)); Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector2(1024.5f, 2048.75f))); } [Test] public void HashCode() { // Checking for overflows in hash calculation. var max = new Vector2(float.MaxValue, float.MaxValue); var min = new Vector2(float.MinValue, float.MinValue); Assert.AreNotEqual(max.GetHashCode(), Vector2.Zero.GetHashCode()); Assert.AreNotEqual(min.GetHashCode(), Vector2.Zero.GetHashCode()); // Common values var a = new Vector2(0f, 0f); Assert.AreEqual(a.GetHashCode(), Vector2.Zero.GetHashCode()); Assert.AreNotEqual(a.GetHashCode(), Vector2.One.GetHashCode()); // Individual properties alter hash var xa = new Vector2(2f, 1f); var xb = new Vector2(3f, 1f); var ya = new Vector2(1f, 2f); var yb = new Vector2(1f, 3f); Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), "Different properties should change hash."); #if !XNA Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), "Identical values on different properties should have different hashes."); #endif Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode()); Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode()); } #if !XNA [Test] public void ToPoint() { Assert.AreEqual(new Point(0, 0), new Vector2(0.1f, 0.1f).ToPoint()); Assert.AreEqual(new Point(0, 0), new Vector2(0.5f, 0.5f).ToPoint()); Assert.AreEqual(new Point(0, 0), new Vector2(0.55f, 0.55f).ToPoint()); Assert.AreEqual(new Point(0, 0), new Vector2(1.0f - 0.1f, 1.0f - 0.1f).ToPoint()); Assert.AreEqual(new Point(1, 1), new Vector2(1.0f - float.Epsilon, 1.0f - float.Epsilon).ToPoint()); Assert.AreEqual(new Point(1, 1), new Vector2(1.0f, 1.0f).ToPoint()); Assert.AreEqual(new Point(19, 27), new Vector2(19.033f, 27.1f).ToPoint()); } [Test] public void Deconstruct() { Vector2 vector2 = new Vector2(float.MinValue, float.MaxValue); float x, y; vector2.Deconstruct(out x, out y); Assert.AreEqual(x, vector2.X); Assert.AreEqual(y, vector2.Y); } [Test] public void Round() { Vector2 vector2 = new Vector2(0.4f, 0.6f); // CEILING Vector2 ceilMember = vector2; ceilMember.Ceiling(); Vector2 ceilResult; Vector2.Ceiling(ref vector2, out ceilResult); Assert.AreEqual(new Vector2(1.0f, 1.0f), ceilMember); Assert.AreEqual(new Vector2(1.0f, 1.0f), Vector2.Ceiling(vector2)); Assert.AreEqual(new Vector2(1.0f, 1.0f), ceilResult); // FLOOR Vector2 floorMember = vector2; floorMember.Floor(); Vector2 floorResult; Vector2.Floor(ref vector2, out floorResult); Assert.AreEqual(new Vector2(0.0f, 0.0f), floorMember); Assert.AreEqual(new Vector2(0.0f, 0.0f), Vector2.Floor(vector2)); Assert.AreEqual(new Vector2(0.0f, 0.0f), floorResult); // ROUND Vector2 roundMember = vector2; roundMember.Round(); Vector2 roundResult; Vector2.Round(ref vector2, out roundResult); Assert.AreEqual(new Vector2(0.0f, 1.0f), roundMember); Assert.AreEqual(new Vector2(0.0f, 1.0f), Vector2.Round(vector2)); Assert.AreEqual(new Vector2(0.0f, 1.0f), roundResult); } #endif } } ================================================ FILE: Tests/Framework/Vector3Test.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; using System.ComponentModel; using System.Globalization; namespace Kni.Tests.Framework { class Vector3Test { [Test] public void TypeConverter() { var converter = TypeDescriptor.GetConverter(typeof(Vector3)); var invariantCulture = CultureInfo.InvariantCulture; Assert.AreEqual(new Vector3(32, 64, 128), converter.ConvertFromString(null, invariantCulture, "32, 64, 128")); Assert.AreEqual(new Vector3(0.5f, 2.75f, 4.125f), converter.ConvertFromString(null, invariantCulture, "0.5, 2.75, 4.125")); Assert.AreEqual(new Vector3(1024.5f, 2048.75f, 4096.125f), converter.ConvertFromString(null, invariantCulture, "1024.5, 2048.75, 4096.125")); Assert.AreEqual("32, 64, 128", converter.ConvertToString(null, invariantCulture, new Vector3(32, 64, 128))); Assert.AreEqual("0.5, 2.75, 4.125", converter.ConvertToString(null, invariantCulture, new Vector3(0.5f, 2.75f, 4.125f))); Assert.AreEqual("1024.5, 2048.75, 4096.125", converter.ConvertToString(null, invariantCulture, new Vector3(1024.5f, 2048.75f, 4096.125f))); var otherCulture = new CultureInfo("el-GR"); var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (2048.75f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (4096.125f).ToString(otherCulture); Assert.AreEqual(new Vector3(1024.5f, 2048.75f, 4096.125f), converter.ConvertFromString(null, otherCulture, vectorStr)); Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector3(1024.5f, 2048.75f, 4096.125f))); } [Test] public void DistanceSquared() { var v1 = new Vector3(0.1f, 100.0f, -5.5f); var v2 = new Vector3(1.1f, -2.0f, 5.5f); var d = Vector3.DistanceSquared(v1, v2); var expectedResult = 10526f; Assert.AreEqual(expectedResult, d); } [Test] public void Normalize() { Vector3 v1 = new Vector3(-10.5f, 0.2f, 1000.0f); Vector3 v2 = new Vector3(-10.5f, 0.2f, 1000.0f); v1.Normalize(); var expectedResult = new Vector3(-0.0104994215f, 0.000199988979f, 0.999944866f); Assert.That(expectedResult, Is.EqualTo(v1).Using(Vector3Comparer.Epsilon)); v2 = Vector3.Normalize(v2); Assert.That(expectedResult, Is.EqualTo(v2).Using(Vector3Comparer.Epsilon)); } [Test] public void Transform() { // STANDART OVERLOADS TEST var expectedResult1 = new Vector3(51, 58, 65); var expectedResult2 = new Vector3(33, -14, -1); var v1 = new Vector3(1, 2, 3); var m1 = new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); var v2 = new Vector3(1, 2, 3); var q1 = new Quaternion(2, 3, 4, 5); Vector3 result1; Vector3 result2; Assert.That(expectedResult1, Is.EqualTo(Vector3.Transform(v1, m1)).Using(Vector3Comparer.Epsilon)); Assert.That(expectedResult2, Is.EqualTo(Vector3.Transform(v2, q1)).Using(Vector3Comparer.Epsilon)); // OUTPUT OVERLOADS TEST Vector3.Transform(ref v1, ref m1, out result1); Vector3.Transform(ref v2, ref q1, out result2); Assert.That(expectedResult1, Is.EqualTo(result1).Using(Vector3Comparer.Epsilon)); Assert.That(expectedResult2, Is.EqualTo(result2).Using(Vector3Comparer.Epsilon)); } [Test] public void HashCode() { // Checking for overflows in hash calculation. var max = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); var min = new Vector3(float.MinValue, float.MinValue, float.MinValue); Assert.AreNotEqual(max.GetHashCode(), Vector3.Zero.GetHashCode()); Assert.AreNotEqual(min.GetHashCode(), Vector3.Zero.GetHashCode()); // Common values var a = new Vector3(0f, 0f, 0f); Assert.AreEqual(a.GetHashCode(), Vector3.Zero.GetHashCode()); Assert.AreNotEqual(a.GetHashCode(), Vector3.One.GetHashCode()); // Individual properties alter hash var xa = new Vector3(2f, 1f, 1f); var xb = new Vector3(3f, 1f, 1f); var ya = new Vector3(1f, 2f, 1f); var yb = new Vector3(1f, 3f, 1f); var za = new Vector3(1f, 1f, 2f); var zb = new Vector3(1f, 1f, 3f); Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(za.GetHashCode(), zb.GetHashCode(), "Different properties should change hash."); #if !XNA Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), zb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(yb.GetHashCode(), zb.GetHashCode(), "Identical values on different properties should have different hashes."); #endif Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode()); Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode()); Assert.AreNotEqual(xa.GetHashCode(), zb.GetHashCode()); } #if !XNA [Test] public void Deconstruct() { Vector3 vector3 = new Vector3(float.MinValue, float.MaxValue, float.MinValue); float x, y, z; vector3.Deconstruct(out x, out y, out z); Assert.AreEqual(x, vector3.X); Assert.AreEqual(y, vector3.Y); Assert.AreEqual(z, vector3.Z); } [Test] public void Round() { Vector3 vector3 = new Vector3(0.4f, 0.6f, 1.0f); // CEILING Vector3 ceilMember = vector3; ceilMember.Ceiling(); Vector3 ceilResult; Vector3.Ceiling(ref vector3, out ceilResult); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), ceilMember); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), Vector3.Ceiling(vector3)); Assert.AreEqual(new Vector3(1.0f, 1.0f, 1.0f), ceilResult); // FLOOR Vector3 floorMember = vector3; floorMember.Floor(); Vector3 floorResult; Vector3.Floor(ref vector3, out floorResult); Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), floorMember); Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), Vector3.Floor(vector3)); Assert.AreEqual(new Vector3(0.0f, 0.0f, 1.0f), floorResult); // ROUND Vector3 roundMember = vector3; roundMember.Round(); Vector3 roundResult; Vector3.Round(ref vector3, out roundResult); Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), roundMember); Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), Vector3.Round(vector3)); Assert.AreEqual(new Vector3(0.0f, 1.0f, 1.0f), roundResult); } #endif } } ================================================ FILE: Tests/Framework/Vector4Test.cs ================================================ using Microsoft.Xna.Framework; using NUnit.Framework; using System.ComponentModel; using System.Globalization; namespace Kni.Tests.Framework { class Vector4Test { [Test] public void TypeConverter() { var converter = TypeDescriptor.GetConverter(typeof(Vector4)); var invariantCulture = CultureInfo.InvariantCulture; Assert.AreEqual(new Vector4(32, 64, 128, 255), converter.ConvertFromString(null, invariantCulture, "32, 64, 128, 255")); Assert.AreEqual(new Vector4(0.5f, 2.75f, 4.125f, 8.0625f), converter.ConvertFromString(null, invariantCulture, "0.5, 2.75, 4.125, 8.0625")); Assert.AreEqual(new Vector4(1024.5f, 2048.75f, 4096.125f, 8192.0625f), converter.ConvertFromString(null, invariantCulture, "1024.5, 2048.75, 4096.125, 8192.0625")); Assert.AreEqual("32, 64, 128, 255", converter.ConvertToString(null, invariantCulture, new Vector4(32, 64, 128, 255))); Assert.AreEqual("0.5, 2.75, 4.125, 8.0625", converter.ConvertToString(null, invariantCulture, new Vector4(0.5f, 2.75f, 4.125f, 8.0625f))); Assert.AreEqual("1024.5, 2048.75, 4096.125, 8192.0625", converter.ConvertToString(null, invariantCulture, new Vector4(1024.5f, 2048.75f, 4096.125f, 8192.0625f))); var otherCulture = new CultureInfo("el-GR"); var vectorStr = (1024.5f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (2048.75f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (4096.125f).ToString(otherCulture) + otherCulture.TextInfo.ListSeparator + " " + (2048.75f).ToString(otherCulture); Assert.AreEqual(new Vector4(1024.5f, 2048.75f, 4096.125f, 2048.75f), converter.ConvertFromString(null, otherCulture, vectorStr)); Assert.AreEqual(vectorStr, converter.ConvertToString(null, otherCulture, new Vector4(1024.5f, 2048.75f, 4096.125f, 2048.75f))); } [Test] public void Constructors() { var expectedResult = new Vector4() { X = 1, Y = 2, Z = 3, W = 4 }; var expectedResult2 = new Vector4() { X = 2.2f, Y = 2.2f, Z = 2.2f, W = 2.2f }; Assert.That(expectedResult, Is.EqualTo(new Vector4(1,2,3,4)).Using(Vector4Comparer.Epsilon)); Assert.That(expectedResult, Is.EqualTo(new Vector4(new Vector2(1,2),3,4)).Using(Vector4Comparer.Epsilon)); Assert.That(expectedResult, Is.EqualTo(new Vector4(new Vector3(1,2,3),4)).Using(Vector4Comparer.Epsilon)); Assert.That(expectedResult2, Is.EqualTo(new Vector4(2.2f)).Using(Vector4Comparer.Epsilon)); } [Test] public void Properties() { Assert.That(new Vector4(0,0,0,0), Is.EqualTo(Vector4.Zero).Using(Vector4Comparer.Epsilon)); Assert.That(new Vector4(1,1,1,1), Is.EqualTo(Vector4.One).Using(Vector4Comparer.Epsilon)); Assert.That(new Vector4(1,0,0,0), Is.EqualTo(Vector4.UnitX).Using(Vector4Comparer.Epsilon)); Assert.That(new Vector4(0,1,0,0), Is.EqualTo(Vector4.UnitY).Using(Vector4Comparer.Epsilon)); Assert.That(new Vector4(0,0,1,0), Is.EqualTo(Vector4.UnitZ).Using(Vector4Comparer.Epsilon)); Assert.That(new Vector4(0,0,0,1), Is.EqualTo(Vector4.UnitW).Using(Vector4Comparer.Epsilon)); } [Test] public void Dot() { var vector1 = new Vector4(1, 2, 3, 4); var vector2 = new Vector4(0.5f, 1.1f, -3.8f, 1.2f); var expectedResult = -3.89999962f; Assert.AreEqual(expectedResult, Vector4.Dot(vector1, vector2)); float result; Vector4.Dot(ref vector1, ref vector2, out result); Assert.AreEqual(expectedResult, result); } [Test] public void Hermite() { var t1 = new Vector4(1.40625f, 1.40625f, 0.2f, 0.92f); var t2 = new Vector4(2.662375f, 2.26537514f,10.0f,2f); var v1 = new Vector4(1,2,3,4); var v2 = new Vector4(-1.3f,0.1f,30.0f,365.20f); var a = 2.234f; var result1 = Vector4.Hermite(v1, t1, v2, t2, a); var expected = new Vector4(39.0311f, 34.65557f, -132.5473f, -2626.85938f); Assert.That(expected, Is.EqualTo(result1).Using(Vector4Comparer.Epsilon)); Vector4 result2; // same as result1 ? - it must be same Vector4.Hermite(ref v1, ref t1, ref v2, ref t2, a, out result2); Assert.That(result1, Is.EqualTo(result2).Using(Vector4Comparer.Epsilon)); } [Test] public void Length() { var vector1 = new Vector4(1, 2, 3, 4); Assert.AreEqual(5.477226f,vector1.Length()); } [Test] public void LengthSquared() { var vector1 = new Vector4(1, 2, 3, 4); Assert.AreEqual(30, vector1.LengthSquared()); } [Test] public void Normalize() { var vector1 = new Vector4(1, 2, 3, 4); vector1.Normalize(); var expected = new Vector4(0.1825742f,0.3651484f,0.5477225f,0.7302967f); Assert.That(expected, Is.EqualTo(vector1).Using(Vector4Comparer.Epsilon)); var vector2 = new Vector4(1, 2, 3, 4); var result = Vector4.Normalize(vector2); Assert.That(expected, Is.EqualTo(result).Using(Vector4Comparer.Epsilon)); } [Test] public void ToStringTest() { StringAssert.IsMatch("{X:10 Y:20 Z:3.5 W:-100}", new Vector4(10, 20, 3.5f, -100).ToString()); } [Test] public void HashCode() { // Checking for overflows in hash calculation. var max = new Vector4(float.MaxValue, float.MaxValue, float.MaxValue, float.MaxValue); var min = new Vector4(float.MinValue, float.MinValue, float.MinValue, float.MinValue); Assert.AreNotEqual(max.GetHashCode(), Vector4.Zero.GetHashCode()); Assert.AreNotEqual(min.GetHashCode(), Vector4.Zero.GetHashCode()); // Common values var a = new Vector4(0f, 0f, 0f, 0f); Assert.AreEqual(a.GetHashCode(), Vector4.Zero.GetHashCode(), "Shouldn't do object id compare."); Assert.AreNotEqual(a.GetHashCode(), Vector4.One.GetHashCode()); // Individual properties alter hash var xa = new Vector4(2f, 1f, 1f, 1f); var xb = new Vector4(3f, 1f, 1f, 1f); var ya = new Vector4(1f, 2f, 1f, 1f); var yb = new Vector4(1f, 3f, 1f, 1f); var za = new Vector4(1f, 1f, 2f, 1f); var zb = new Vector4(1f, 1f, 3f, 1f); var wa = new Vector4(1f, 1f, 1f, 2f); var wb = new Vector4(1f, 1f, 1f, 3f); Assert.AreNotEqual(xa.GetHashCode(), xb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(ya.GetHashCode(), yb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(za.GetHashCode(), zb.GetHashCode(), "Different properties should change hash."); Assert.AreNotEqual(wa.GetHashCode(), wb.GetHashCode(), "Different properties should change hash."); #if !XNA Assert.AreNotEqual(xa.GetHashCode(), ya.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), yb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), zb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(yb.GetHashCode(), zb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(xb.GetHashCode(), wb.GetHashCode(), "Identical values on different properties should have different hashes."); Assert.AreNotEqual(yb.GetHashCode(), wb.GetHashCode(), "Identical values on different properties should have different hashes."); #endif Assert.AreNotEqual(xa.GetHashCode(), yb.GetHashCode()); Assert.AreNotEqual(ya.GetHashCode(), xb.GetHashCode()); Assert.AreNotEqual(xa.GetHashCode(), zb.GetHashCode()); Assert.AreNotEqual(xa.GetHashCode(), wb.GetHashCode()); } #if !XNA [Test] public void Deconstruct() { Vector4 vector4 = new Vector4(float.MinValue, float.MaxValue, float.MinValue, float.MaxValue); float x, y, z, w; vector4.Deconstruct(out x, out y, out z, out w); Assert.AreEqual(x, vector4.X); Assert.AreEqual(y, vector4.Y); Assert.AreEqual(z, vector4.Z); Assert.AreEqual(w, vector4.W); } [Test] public void Round() { Vector4 vector4 = new Vector4(0.0f, 0.4f, 0.6f, 1.0f); // CEILING Vector4 ceilMember = vector4; ceilMember.Ceiling(); Vector4 ceilResult; Vector4.Ceiling(ref vector4, out ceilResult); Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), ceilMember); Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), Vector4.Ceiling(vector4)); Assert.AreEqual(new Vector4(0.0f, 1.0f, 1.0f, 1.0f), ceilResult); // FLOOR Vector4 floorMember = vector4; floorMember.Floor(); Vector4 floorResult; Vector4.Floor(ref vector4, out floorResult); Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), floorMember); Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), Vector4.Floor(vector4)); Assert.AreEqual(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), floorResult); // ROUND Vector4 roundMember = vector4; roundMember.Round(); Vector4 roundResult; Vector4.Round(ref vector4, out roundResult); Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), roundMember); Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), Vector4.Round(vector4)); Assert.AreEqual(new Vector4(0.0f, 0.0f, 1.0f, 1.0f), roundResult); } #endif } } ================================================ FILE: Tests/Framework/VertexTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Framework { public class VertexTests { #if !XNA [Test] public void TestVertexPosition() { Assert.That(VertexPosition.VertexDeclaration.VertexStride, Is.EqualTo(12)); var vertexElements = VertexPosition.VertexDeclaration.GetVertexElements(); Assert.That(vertexElements, Has.Length.EqualTo(1)); Assert.That(vertexElements[0].Offset, Is.EqualTo(0)); Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position)); var vertex1 = new VertexPosition(Vector3.One); var vertex2 = new VertexPosition(Vector3.One); var vertex3 = new VertexPosition(Vector3.Zero); Assert.That(vertex1 == vertex2, Is.True); Assert.That(vertex1 != vertex2, Is.False); Assert.That(vertex1 == vertex3, Is.False); Assert.That(vertex1 != vertex3, Is.True); Assert.That(vertex1.Equals(vertex2), Is.True); Assert.That(vertex1.Equals(vertex3), Is.False); } #endif [Test] public void TestVertexPositionColor() { Assert.That(VertexPositionColor.VertexDeclaration.VertexStride, Is.EqualTo(16)); var vertexElements = VertexPositionColor.VertexDeclaration.GetVertexElements(); Assert.That(vertexElements, Has.Length.EqualTo(2)); Assert.That(vertexElements[0].Offset, Is.EqualTo(0)); Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position)); Assert.That(vertexElements[1].Offset, Is.EqualTo(12)); Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Color)); Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Color)); var vertex1 = new VertexPositionColor(Vector3.One, Color.Blue); var vertex2 = new VertexPositionColor(Vector3.One, Color.Blue); var vertex3 = new VertexPositionColor(Vector3.One, Color.Red); var vertex4 = new VertexPositionColor(Vector3.Forward, Color.Blue); Assert.That(vertex1 == vertex2, Is.True); Assert.That(vertex1 != vertex2, Is.False); Assert.That(vertex1 == vertex3, Is.False); Assert.That(vertex1 != vertex3, Is.True); Assert.That(vertex1 == vertex4, Is.False); Assert.That(vertex1 != vertex4, Is.True); Assert.That(vertex1.Equals(vertex2), Is.True); Assert.That(vertex1.Equals(vertex3), Is.False); Assert.That(vertex1.Equals(vertex4), Is.False); } [Test] public void TestVertexPositionColorTexture() { Assert.That(VertexPositionColorTexture.VertexDeclaration.VertexStride, Is.EqualTo(24)); var vertexElements = VertexPositionColorTexture.VertexDeclaration.GetVertexElements(); Assert.That(vertexElements, Has.Length.EqualTo(3)); Assert.That(vertexElements[0].Offset, Is.EqualTo(0)); Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position)); Assert.That(vertexElements[1].Offset, Is.EqualTo(12)); Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Color)); Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Color)); Assert.That(vertexElements[2].Offset, Is.EqualTo(16)); Assert.That(vertexElements[2].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[2].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2)); Assert.That(vertexElements[2].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate)); var vertex1 = new VertexPositionColorTexture(Vector3.One, Color.Blue, Vector2.One); var vertex2 = new VertexPositionColorTexture(Vector3.One, Color.Blue, Vector2.One); var vertex3 = new VertexPositionColorTexture(Vector3.One, Color.Red, Vector2.One); var vertex4 = new VertexPositionColorTexture(Vector3.Forward, Color.Blue, Vector2.One); var vertex5 = new VertexPositionColorTexture(Vector3.Forward, Color.Blue, Vector2.Zero); Assert.That(vertex1 == vertex2, Is.True); Assert.That(vertex1 != vertex2, Is.False); Assert.That(vertex1 == vertex3, Is.False); Assert.That(vertex1 != vertex3, Is.True); Assert.That(vertex1 == vertex4, Is.False); Assert.That(vertex1 != vertex4, Is.True); Assert.That(vertex4 == vertex5, Is.False); Assert.That(vertex4 != vertex5, Is.True); Assert.That(vertex1.Equals(vertex2), Is.True); Assert.That(vertex1.Equals(vertex3), Is.False); Assert.That(vertex1.Equals(vertex4), Is.False); Assert.That(vertex4.Equals(vertex5), Is.False); } [Test] public void TestVertexPositionNormalTexture() { Assert.That(VertexPositionNormalTexture.VertexDeclaration.VertexStride, Is.EqualTo(32)); var vertexElements = VertexPositionNormalTexture.VertexDeclaration.GetVertexElements(); Assert.That(vertexElements, Has.Length.EqualTo(3)); Assert.That(vertexElements[0].Offset, Is.EqualTo(0)); Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position)); Assert.That(vertexElements[1].Offset, Is.EqualTo(12)); Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.Normal)); Assert.That(vertexElements[2].Offset, Is.EqualTo(24)); Assert.That(vertexElements[2].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[2].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2)); Assert.That(vertexElements[2].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate)); var vertex1 = new VertexPositionNormalTexture(Vector3.One, Vector3.Forward, Vector2.One); var vertex2 = new VertexPositionNormalTexture(Vector3.One, Vector3.Forward, Vector2.One); var vertex3 = new VertexPositionNormalTexture(Vector3.One, Vector3.Backward, Vector2.One); var vertex4 = new VertexPositionNormalTexture(Vector3.Forward, Vector3.Backward, Vector2.One); var vertex5 = new VertexPositionNormalTexture(Vector3.Forward, Vector3.Backward, Vector2.Zero); Assert.That(vertex1 == vertex2, Is.True); Assert.That(vertex1 != vertex2, Is.False); Assert.That(vertex1 == vertex3, Is.False); Assert.That(vertex1 != vertex3, Is.True); Assert.That(vertex1 == vertex4, Is.False); Assert.That(vertex1 != vertex4, Is.True); Assert.That(vertex4 == vertex5, Is.False); Assert.That(vertex4 != vertex5, Is.True); Assert.That(vertex1.Equals(vertex2), Is.True); Assert.That(vertex1.Equals(vertex3), Is.False); Assert.That(vertex1.Equals(vertex4), Is.False); Assert.That(vertex4.Equals(vertex5), Is.False); } [Test] public void TestVertexPositionTexture() { Assert.That(VertexPositionTexture.VertexDeclaration.VertexStride, Is.EqualTo(20)); var vertexElements = VertexPositionTexture.VertexDeclaration.GetVertexElements(); Assert.That(vertexElements, Has.Length.EqualTo(2)); Assert.That(vertexElements[0].Offset, Is.EqualTo(0)); Assert.That(vertexElements[0].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[0].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector3)); Assert.That(vertexElements[0].VertexElementUsage, Is.EqualTo(VertexElementUsage.Position)); Assert.That(vertexElements[1].Offset, Is.EqualTo(12)); Assert.That(vertexElements[1].UsageIndex, Is.EqualTo(0)); Assert.That(vertexElements[1].VertexElementFormat, Is.EqualTo(VertexElementFormat.Vector2)); Assert.That(vertexElements[1].VertexElementUsage, Is.EqualTo(VertexElementUsage.TextureCoordinate)); var vertex1 = new VertexPositionTexture(Vector3.One, Vector2.One); var vertex2 = new VertexPositionTexture(Vector3.One, Vector2.One); var vertex3 = new VertexPositionTexture(Vector3.One, Vector2.Zero); var vertex4 = new VertexPositionTexture(Vector3.Zero, Vector2.Zero); Assert.That(vertex1 == vertex2, Is.True); Assert.That(vertex1 != vertex2, Is.False); Assert.That(vertex1 == vertex3, Is.False); Assert.That(vertex1 != vertex3, Is.True); Assert.That(vertex1 == vertex4, Is.False); Assert.That(vertex1 != vertex4, Is.True); Assert.That(vertex3 == vertex4, Is.False); Assert.That(vertex3 != vertex4, Is.True); Assert.That(vertex1.Equals(vertex2), Is.True); Assert.That(vertex1.Equals(vertex3), Is.False); Assert.That(vertex1.Equals(vertex4), Is.False); Assert.That(vertex3.Equals(vertex4), Is.False); } } } ================================================ FILE: Tests/Framework.Audio/DynamicSoundEffectInstanceTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using NUnit.Framework; namespace Kni.Tests.Audio { class DynamicSoundEffectInstanceTest { [SetUp] public void SetUp() { // Necessary to get audio initialised FrameworkDispatcher.Update(); } [Test] public void BufferNeeded_DuringPlayback() { // XNA raises the event every time a buffer is consumed and there are less than two left. using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.1f)); var previousEventCount = _bufferNeededEventCount; instance.Play(); SleepWhileDispatching(350); Assert.AreEqual(3, _bufferNeededEventCount - previousEventCount); // The event is raised on the same thread as FrameworkDispatcher.Update() is called. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, _bufferNeededEventThread); } } [Test] public void BufferNeeded_MultipleConsumed() { // Both buffers should be consumed by the time the event routine is called by XNA. // This test verifies that each consumed buffer raises its own event. using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f)); var previousEventCount = _bufferNeededEventCount; instance.Play(); Thread.Sleep(125); SleepWhileDispatching(10); Assert.AreEqual(3, _bufferNeededEventCount - previousEventCount); } } [Test] public void BufferNeeded_MoreThanThree() { // No events are raised when a buffer is consumed and there are more than 3 buffers submitted. using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.25f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.25f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f)); instance.SubmitBuffer(GenerateSineWave(880, 8000, 1, 0.05f)); var previousEventCount = _bufferNeededEventCount; instance.Play(); SleepWhileDispatching(300); Assert.AreEqual(0, _bufferNeededEventCount - previousEventCount); } } [Test] public void BufferNeeded_Play_NoneSubmitted() { using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; var previousEventCount = _bufferNeededEventCount; instance.Play(); SleepWhileDispatching(20); Assert.AreEqual(1, _bufferNeededEventCount - previousEventCount); // The event is raised on the same thread as FrameworkDispatcher.Update() is called. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, _bufferNeededEventThread); } } [Test] public void BufferNeeded_Play_AlreadySubmitted() { using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; instance.SubmitBuffer(GenerateSineWave(440, 8000, 1, 0.1f)); var previousEventCount = _bufferNeededEventCount; instance.Play(); SleepWhileDispatching(20); Assert.AreEqual(1, _bufferNeededEventCount - previousEventCount); } } [Test] public void BufferNeeded_Play_NoDispatcherCalled() { // No event is raised if FrameworkDispatcher.Update() is not called. using (var instance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono)) { instance.BufferNeeded += BufferNeededEventHandler; var previousEventCount = _bufferNeededEventCount; instance.Play(); Thread.Sleep(20); Assert.AreEqual(0, _bufferNeededEventCount - previousEventCount); } } static int _bufferNeededEventCount = 0; static int _bufferNeededEventThread = 0; private static void BufferNeededEventHandler(object sender, EventArgs e) { _bufferNeededEventCount++; _bufferNeededEventThread = Thread.CurrentThread.ManagedThreadId; } [Test] public void Ctor() { // Valid sample rates var instance = new DynamicSoundEffectInstance(48000, AudioChannels.Stereo); instance.Dispose(); instance = new DynamicSoundEffectInstance(8000, AudioChannels.Stereo); instance.Dispose(); // Invalid sample rates Assert.Throws(() => { instance = new DynamicSoundEffectInstance(7999, AudioChannels.Stereo); }); if (instance != null) instance.Dispose(); Assert.Throws(() => { instance = new DynamicSoundEffectInstance(48001, AudioChannels.Stereo); }); if (instance != null) instance.Dispose(); // Valid channel counts instance = new DynamicSoundEffectInstance(44100, AudioChannels.Mono); instance.Dispose(); instance = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo); instance.Dispose(); // Invalid channel count Assert.Throws(() => { instance = new DynamicSoundEffectInstance(44100, (AudioChannels)123); }); if (instance != null) instance.Dispose(); } [Test] public void GetSampleDuration() { var monoInstance = new DynamicSoundEffectInstance(8000, AudioChannels.Mono); var stereoInstance = new DynamicSoundEffectInstance(24000, AudioChannels.Stereo); // Zero length Assert.AreEqual(0, (int)monoInstance.GetSampleDuration(0).TotalMilliseconds / 10); Assert.AreEqual(0, (int)stereoInstance.GetSampleDuration(0).TotalMilliseconds / 10); // Nonzero length Assert.AreNotEqual(0, monoInstance.GetSampleDuration(16000).Ticks); Assert.AreNotEqual(0, stereoInstance.GetSampleDuration(96000).Ticks); // Length not aligned with format Assert.AreEqual(1, (int)stereoInstance.GetSampleDuration(97).TotalMilliseconds); // Negative length Assert.Throws(() => { monoInstance.GetSampleDuration(-1); }); // Disposed monoInstance.Dispose(); Assert.Throws(() => { monoInstance.GetSampleDuration(0); }); stereoInstance.Dispose(); } [Test] public void GetSampleSizeInBytes() { var monoInstance = new DynamicSoundEffectInstance(48000, AudioChannels.Mono); var stereoInstance = new DynamicSoundEffectInstance(22050, AudioChannels.Stereo); // Zero length Assert.AreEqual(0, monoInstance.GetSampleSizeInBytes(TimeSpan.Zero)); Assert.AreEqual(0, stereoInstance.GetSampleSizeInBytes(TimeSpan.Zero)); // Nonzero length Assert.AreEqual(96000, monoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(1))); Assert.AreEqual(88200, stereoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(1))); // Negative length Assert.Throws(() => { monoInstance.GetSampleSizeInBytes(TimeSpan.FromSeconds(-1)); }); // Disposed monoInstance.Dispose(); Assert.Throws(() => { monoInstance.GetSampleSizeInBytes(TimeSpan.Zero); }); stereoInstance.Dispose(); } [Test] public void IsLooped() { var instance = new DynamicSoundEffectInstance(24000, AudioChannels.Mono); // Always returns false and cannot be set true Assert.IsFalse(instance.IsLooped); instance.IsLooped = false; // Setting it to false does not throw, however Assert.Throws(() => { instance.IsLooped = true; }); instance.Dispose(); Assert.Throws(() => { instance.IsLooped = false; }); } [Test] public void PendingBufferCount() { var instance = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo); Assert.AreEqual(0, instance.PendingBufferCount); instance.SubmitBuffer(GenerateSineWave(440, 44100, 2, 1.0f)); Assert.AreEqual(1, instance.PendingBufferCount); instance.Play(); SleepWhileDispatching(1050); // Give it time to finish Assert.AreEqual(0, instance.PendingBufferCount); // Throws ObjectDisposedException instance.Dispose(); Assert.Throws(() => { var a = instance.PendingBufferCount; }); } [Test] public void Playback() { using (var instance = new DynamicSoundEffectInstance(48000, AudioChannels.Mono)) { // Initially, the playback is stopped Assert.AreEqual(SoundState.Stopped, instance.State); // Submitting a buffer will not change the state instance.SubmitBuffer(GenerateSineWave(440, 48000, 1, 0.5f)); Assert.AreEqual(SoundState.Stopped, instance.State); // Start playing instance.Play(); Assert.AreEqual(SoundState.Playing, instance.State); // While still playing, pause the playback SleepWhileDispatching(300); instance.Pause(); Assert.AreEqual(SoundState.Paused, instance.State); // Let it continue and run out of buffers instance.Resume(); SleepWhileDispatching(300); Assert.AreEqual(0, instance.PendingBufferCount); Assert.AreEqual(SoundState.Playing, instance.State); // Submit a buffer and the playback should continue instance.SubmitBuffer(GenerateSineWave(466, 48000, 1, 1.0f)); Assert.AreEqual(SoundState.Playing, instance.State); SleepWhileDispatching(500); // Stop immediately Assert.AreEqual(SoundState.Playing, instance.State); instance.Stop(); SleepWhileDispatching(10); // XNA does not stop it until FrameworkDispatcher.Update is called Assert.AreEqual(SoundState.Stopped, instance.State); // And then resume instance.Resume(); Assert.AreEqual(SoundState.Playing, instance.State); } } [Test] public void Playback_Exceptions() { var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Mono); instance.Dispose(); Assert.Throws(() => { instance.Play(); }); Assert.Throws(() => { instance.Pause(); }); Assert.Throws(() => { instance.Resume(); }); Assert.Throws(() => { instance.Stop(); }); Assert.Throws(() => { instance.Stop(false); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[0]); }); } [Test] public void Stop_False() { // Calling Stop(false) has no effect using (var instance = new DynamicSoundEffectInstance(12000, AudioChannels.Mono)) { instance.Play(); Assert.AreEqual(SoundState.Playing, instance.State); instance.Stop(false); SleepWhileDispatching(20); Assert.AreEqual(SoundState.Playing, instance.State); } } [Test] public void Stop_RemovesBuffers() { using (var instance = new DynamicSoundEffectInstance(12000, AudioChannels.Mono)) { instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f)); instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f)); instance.SubmitBuffer(GenerateSineWave(440, 12000, 1, 0.1f)); Assert.AreEqual(3, instance.PendingBufferCount); instance.Stop(); SleepWhileDispatching(20); Assert.AreEqual(0, instance.PendingBufferCount); } } [Test] public void SubmitBuffer_ParameterValidation_SimpleOverload() { using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo)) { // Null or empty buffer - with different null behavior to the other overload Assert.Throws(() => { instance.SubmitBuffer(null); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[0]); }); // Invalid alignment Assert.Throws(() => { instance.SubmitBuffer(new byte[1]); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[2]); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[3]); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[13]); }); // Correct alignment and size instance.SubmitBuffer(GenerateSineWave(440, 16000, 2, 0.1f)); } } [Test] public void SubmitBuffer_ParameterValidation_ComplexOverload() { using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo)) { // Null or empty buffer - with different null behavior to the other overload Assert.Throws(() => { instance.SubmitBuffer(null, 0, 4); }); Assert.Throws(() => { instance.SubmitBuffer(new byte[0], 0, 4); }); var buffer = GenerateSineWave(440, 16000, 2, 0.5f); // Correct alignment instance.SubmitBuffer(buffer, 0, 4); // One sample per channel instance.SubmitBuffer(buffer, 1000, 1000); // 250 samples // Invalid alignment Assert.Throws(() => { instance.SubmitBuffer(buffer, 0, 3); }); Assert.Throws(() => { instance.SubmitBuffer(buffer, 1, 4); }); // Unaligned start position also throws // Invalid size Assert.Throws(() => { instance.SubmitBuffer(buffer, 0, 0); }); Assert.Throws(() => { instance.SubmitBuffer(buffer, 0, -1); }); Assert.Throws(() => { instance.SubmitBuffer(buffer, 0, buffer.Length + 1); }); Assert.Throws(() => { instance.SubmitBuffer(buffer, buffer.Length - 4, 8); }); } } [Test] public void SubmitBuffer_ShouldNotThrowOnStrangeOffset() { using (var instance = new DynamicSoundEffectInstance(16000, AudioChannels.Stereo)) { var buffer = GenerateSineWave(440, 16000, 2, 0.5f); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 0, 8); }); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 8, 8); }); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 16, 8); }); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 24, 8); }); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 3200, 8); }); Assert.DoesNotThrow(() => { instance.SubmitBuffer(buffer, 8000, 8); }); } } /// /// Sleeps for the specified amount of time while calling FrameworkDispatcher.Update() every 10 ms. /// private static void SleepWhileDispatching(int ms) { int cycles = ms / 10; for (int i = 0; i < cycles; i++) { FrameworkDispatcher.Update(); Thread.Sleep(10); } } /// /// Generates a audio buffer filled with a single frequency sine wave. /// /// Frequency in Hz. /// Samples per second. /// Number of channels. /// Length in seconds. /// An audio buffer of sufficient size, filled with sine wave. private static byte[] GenerateSineWave(float frequency, int sampleRate, int channelCount, float length) { var sampleCount = (int)(sampleRate * length); var samples = new short[sampleCount * channelCount]; var onePerSampleRate = 1.0f / sampleRate; for (int i = 0; i < sampleCount; i++) { var sample = Math.Sin(2 * Math.PI * frequency * onePerSampleRate * i) * 0.2; var sampleAsShort = (short)(sample * short.MaxValue); // Fill each channel for (int channel = 0; channel < channelCount; channel++) samples[i * channelCount + channel] = sampleAsShort; } var byteArray = new byte[samples.Length * 2]; for (int i = 0; i < samples.Length; i++) { var bytes = BitConverter.GetBytes(samples[i]); byteArray[i * 2] = bytes[0]; byteArray[i * 2 + 1] = bytes[1]; } return byteArray; } } } ================================================ FILE: Tests/Framework.Audio/SoundEffectInstanceTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using NUnit.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using System.Threading; namespace Kni.Tests.Audio { class SoundEffectInstanceTest { [SetUp] public void SetUp() { // Necessary to get audio initialised FrameworkDispatcher.Update(); } /// /// Unit test for issue #7372 where the Sound effects instance does not play after Play() /// is called after calling Pause(), Stop(). /// [Test] public void SoundEffectPauseStopPlay() { var se = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono); using (var instance = se.CreateInstance()) { instance.IsLooped = true; //ensures that the sound effect does not stop unless Stop() is called. //Test Initial State Assert.AreEqual(SoundState.Stopped, instance.State); //Test calling pause multiple times instance.Play(); Assert.AreEqual(SoundState.Playing, instance.State); instance.Pause(); Assert.AreEqual(SoundState.Paused, instance.State); instance.Stop(); SleepWhileDispatching(10);// XNA Requires Dispatcher to be updated Assert.AreEqual(SoundState.Stopped, instance.State); instance.Play(); Assert.AreEqual(SoundState.Playing, instance.State); instance.Pause(); Assert.AreEqual(SoundState.Paused, instance.State); } } private static void SleepWhileDispatching(int ms) { int cycles = ms / 10; for (int i = 0; i < cycles; i++) { FrameworkDispatcher.Update(); Thread.Sleep(10); } } } } ================================================ FILE: Tests/Framework.Audio/SoundEffectTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using NUnit.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Audio { public class SoundEffectTests { [SetUp] public void Setup() { // Necessary to get audio initialised FrameworkDispatcher.Update(); } [Test] public void Statics() { // NOTE: These can break if someone has changed them in // a prior test. We just hope no one else messes with these. Assert.AreEqual(1.0f, SoundEffect.DistanceScale); Assert.AreEqual(1.0f, SoundEffect.DopplerScale); Assert.AreEqual(1.0f, SoundEffect.MasterVolume); Assert.AreEqual(343.5f, SoundEffect.SpeedOfSound); // TODO: Add some range tests. } #if !XNA [Test] public void GetSampleDuration() { // Test sizeInBytes range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(-1, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(1, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(3, 8000, AudioChannels.Mono)); // Test sampleRate range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, -1, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 0, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000-1, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 48000, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 48000 + 1, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, int.MaxValue, AudioChannels.Mono)); // Test channel range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)(-1))); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)0)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, AudioChannels.Stereo)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)3)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(2, 8000, (AudioChannels)int.MaxValue)); // Test for zero duration. Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 8000, AudioChannels.Mono)); Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 48000, AudioChannels.Mono)); Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 8000, AudioChannels.Stereo)); Assert.AreEqual(TimeSpan.Zero, Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(0, 48000, AudioChannels.Stereo)); // Test for one second. Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(16000, 8000, AudioChannels.Mono)); Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(96000, 48000, AudioChannels.Mono)); Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(32000, 8000, AudioChannels.Stereo)); Assert.AreEqual(TimeSpan.FromSeconds(1), Microsoft.Xna.Platform.Audio.AudioService.GetSampleDuration(192000, 48000, AudioChannels.Stereo)); } [Test] public void GetSampleSizeInBytes() { // Test duration range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.MinValue, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromMilliseconds(0x7FFFFFF), 8000, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromMilliseconds(0x7FFFFFF + 1), 8000, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.MaxValue, 8000, AudioChannels.Mono)); // Test sampleRate range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, -1, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 0, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000 - 1, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000 + 1, AudioChannels.Mono)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, int.MaxValue, AudioChannels.Mono)); // Test channel range. Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)(-1))); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)0)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Stereo)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)3)); Assert.Throws(() => Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, (AudioChannels)int.MaxValue)); // Test for zero duration. Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Mono)); Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Mono)); Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 8000, AudioChannels.Stereo)); Assert.AreEqual(0, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.Zero, 48000, AudioChannels.Stereo)); // Test for one second. Assert.AreEqual(16000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 8000, AudioChannels.Mono)); Assert.AreEqual(96000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 48000, AudioChannels.Mono)); Assert.AreEqual(32000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 8000, AudioChannels.Stereo)); Assert.AreEqual(192000, Microsoft.Xna.Platform.Audio.AudioService.GetSampleSizeInBytes(TimeSpan.FromSeconds(1), 48000, AudioChannels.Stereo)); } #endif [Test] public void Ctor1() { // Test buffer mono. Assert.Throws(() => new SoundEffect(null, 8000, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[0], 8000, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[1], 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[3], 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Mono)); // Test buffer sterio. Assert.Throws(() => new SoundEffect(null, 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[0], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[1], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[2], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[3], 8000, AudioChannels.Stereo)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[5], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[6], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[7], 8000, AudioChannels.Stereo)); Assert.DoesNotThrow(() => new SoundEffect(new byte[8], 8000, AudioChannels.Stereo)); // Test sampleRate range. Assert.Throws(() => new SoundEffect(new byte[2], -1, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[2], 0, AudioChannels.Mono)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 48000, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[2], 48000 + 1, AudioChannels.Mono)); Assert.Throws(() => new SoundEffect(new byte[2], int.MaxValue, AudioChannels.Mono)); // Test channel range. Assert.Throws(() => new SoundEffect(new byte[2], 8000, (AudioChannels)(-1))); Assert.Throws(() => new SoundEffect(new byte[2], 8000, (AudioChannels)0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 8000, AudioChannels.Mono)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 8000, AudioChannels.Stereo)); Assert.Throws(() => new SoundEffect(new byte[2], 8000, (AudioChannels)3)); Assert.Throws(() => new SoundEffect(new byte[2], 8000, (AudioChannels)int.MaxValue)); // Test the duration mono. { var s = new SoundEffect(new byte[2], 8000, AudioChannels.Mono); Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10); s.Dispose(); s = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono); Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration); s.Dispose(); s = new SoundEffect(new byte[2], 48000, AudioChannels.Mono); Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10); s.Dispose(); s = new SoundEffect(new byte[96000], 48000, AudioChannels.Mono); Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration); s.Dispose(); } // Test the duration stereo. { var s = new SoundEffect(new byte[4], 8000, AudioChannels.Stereo); Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10); s.Dispose(); s = new SoundEffect(new byte[32000], 8000, AudioChannels.Stereo); Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration); s.Dispose(); s = new SoundEffect(new byte[4], 48000, AudioChannels.Stereo); Assert.AreEqual(0, (int)s.Duration.TotalMilliseconds / 10); s.Dispose(); s = new SoundEffect(new byte[192000], 48000, AudioChannels.Stereo); Assert.AreEqual(TimeSpan.FromSeconds(1), s.Duration); s.Dispose(); } // Test misc state. { var s = new SoundEffect(new byte[2], 8000, AudioChannels.Mono); Assert.AreEqual(string.Empty, s.Name); Assert.AreEqual(false, s.IsDisposed); s.Dispose(); Assert.AreEqual(true, s.IsDisposed); } } [Test] public void Ctor2() { // Test buffer mono. Assert.Throws(() => new SoundEffect(null, 0, 0, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[0], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[1], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[3], 0, 4, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Mono, 0, 0)); // Test buffer stereo. Assert.Throws(() => new SoundEffect(null, 0, 0, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[0], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[1], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[3], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[5], 0, 8, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[6], 0, 8, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[7], 0, 8, 8000, AudioChannels.Stereo, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[8], 0, 8, 8000, AudioChannels.Stereo, 0, 0)); // Test offset. Assert.Throws(() => new SoundEffect(new byte[2], int.MinValue, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], -1, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 1, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 2, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 3, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], int.MaxValue, 2, 8000, AudioChannels.Mono, 0, 0)); // Test count. Assert.Throws(() => new SoundEffect(new byte[2], 0, int.MinValue, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, -1, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 0, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 1, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 3, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 2, 2, 8000, AudioChannels.Mono, 0, 0)); // XNA seems to not allow misaligned offsets even when // the data is within range of the buffer. We go ahead // and allow this in KNI. #if XNA Assert.Throws(() => new SoundEffect(new byte[4], 1, 2, 8000, AudioChannels.Mono, 0, 0)); #else Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 1, 2, 8000, AudioChannels.Mono, 0, 0)); #endif // Test sampleRate range. Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, -1, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 0, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 48000, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 48000 + 1, AudioChannels.Mono, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, int.MaxValue, AudioChannels.Mono, 0, 0)); // Test channel range. Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)(-1), 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)0, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[4], 0, 4, 8000, AudioChannels.Stereo, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)3, 0, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, (AudioChannels)int.MaxValue, 0, 0)); // Test loop start. Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, int.MinValue, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, -1, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 1, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 2, 0)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, int.MaxValue, 0)); // Test loop end. Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, int.MinValue)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, -1)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 0)); Assert.DoesNotThrow(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 1)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, 2)); Assert.Throws(() => new SoundEffect(new byte[2], 0, 2, 8000, AudioChannels.Mono, 0, int.MaxValue)); } [Test, Ignore("creating/disposing a Game should not create/dispose the master voice")] public void InstanceNotDisposedWhenGameDisposed() { var game = new Game(); var se = new SoundEffect(new byte[16000], 8000, AudioChannels.Mono); var s = se.CreateInstance(); var d = new DynamicSoundEffectInstance(44100, AudioChannels.Stereo); game.Dispose(); Assert.IsFalse(s.IsDisposed); Assert.IsFalse(d.IsDisposed); s.Dispose(); d.Dispose(); } private byte[] LoadRiff(string filename, out int sampleRate, out AudioChannels channels) { using (var stream = File.OpenRead(filename)) using (var reader = new BinaryReader(stream)) { var signature = new string(reader.ReadChars(4)); if (signature != "RIFF") throw new Exception("Missing RIFF header!"); reader.ReadInt32(); // riff_chunck_size var wformat = new string(reader.ReadChars(4)); if (wformat != "WAVE") throw new Exception("Not WAVE format!"); // Look for the format chunk. while (true) { var chunkSignature = new string(reader.ReadChars(4)); if (chunkSignature.ToLowerInvariant() == "fmt ") break; reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current); } // Read the format header. var headerSize = reader.ReadInt32(); var header = reader.ReadBytes(headerSize); channels = (AudioChannels)BitConverter.ToInt16(header, 2); sampleRate = BitConverter.ToInt32(header, 4); // Look for the data chunk. while (true) { var chunkSignature = new string(reader.ReadChars(4)); if (chunkSignature.ToLowerInvariant() == "data") break; reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current); } var dataSize = reader.ReadInt32(); return reader.ReadBytes(dataSize); } } [TestCase(@"Assets/Audio/blast_mono.wav", 7165)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", 7165)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", 7165)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", 7940)] public void LoadCtor1_16Bit(string filename, int milliseconds) { int sampleRate; AudioChannels channels; var data = LoadRiff(filename, out sampleRate, out channels); var sound = new SoundEffect(data, sampleRate, channels); Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10); } [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav")] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav")] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav")] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz_8bit.wav")] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz_8bit.wav")] public void LoadCtor1_8Bit_Throws(string filename) { int sampleRate; AudioChannels channels; var data = LoadRiff(filename, out sampleRate, out channels); Assert.Throws(() => new SoundEffect(data, sampleRate, channels)); } // These 8bit PCMs pass although the SoundEffect constructors although // they don't support 8bit PCM. This is because it is interpreting it // as 16bit and generating a bad sound... hence half the duration. [TestCase(@"Assets/Audio/rock_loop_stereo_44hz_8bit.wav", 7940)] public void LoadCtor1_8Bit_BadDuration(string filename, int milliseconds) { int sampleRate; AudioChannels channels; var data = LoadRiff(filename, out sampleRate, out channels); var sound = new SoundEffect(data, sampleRate, channels); Assert.AreEqual(milliseconds / 20, (int)sound.Duration.TotalMilliseconds / 10); } // MSADPCM data can be passed into the constructors, but // it calculates and incorrect duration and plays static. [TestCase(@"Assets/Audio/blast_mono_44hz_adpcm_ms.wav", 1811)] [TestCase(@"Assets/Audio/blast_mono_22hz_adpcm_ms.wav", 1811)] [TestCase(@"Assets/Audio/blast_mono_11hz_adpcm_ms.wav", 1811)] [TestCase(@"Assets/Audio/rock_loop_stereo_44hz_adpcm_ms.wav", 2014)] public void LoadCtor1_MsAdpcm_BadDuration(string filename, int milliseconds) { int sampleRate; AudioChannels channels; var data = LoadRiff(filename, out sampleRate, out channels); var sound = new SoundEffect(data, sampleRate, channels); Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10); } [Test] public void FromStream_NotNull() { Assert.Throws(() => SoundEffect.FromStream(null)); } [TestCase(@"Assets/Audio/blast_mono.wav", 7165)] [TestCase(@"Assets/Audio/blast_mono_22hz.wav", 7165)] [TestCase(@"Assets/Audio/blast_mono_11hz.wav", 7165)] [TestCase(@"Assets/Audio/rock_loop_stereo.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_44hz_8bit.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_22hz_8bit.wav", 7940)] [TestCase(@"Assets/Audio/rock_loop_stereo_11hz_8bit.wav", 7940)] [TestCase(@"Assets/Audio/bark_mono_44hz_8bit.wav", 1612)] [TestCase(@"Assets/Audio/bark_mono_22hz_8bit.wav", 1612)] [TestCase(@"Assets/Audio/bark_mono_11hz_8bit.wav", 1612)] [TestCase(@"Assets/Audio/tone_mono_44khz_8bit.wav", 500)] [TestCase(@"Assets/Audio/tone_stereo_44khz_8bit.wav", 500)] [TestCase(@"Assets/Audio/tone_mono_44khz_16bit.wav", 500)] [TestCase(@"Assets/Audio/tone_stereo_44khz_16bit.wav", 500)] #if !XNA // XNA does not support 24-bit, 32-bit float, MS-ADPCM or IMA/ADPCM in SoundEffect.FromStream, but KNI does. #if WINDOWSDX [TestCase(@"Assets/Audio/blast_mono_44hz_adpcm_ms.wav", 7202)] [TestCase(@"Assets/Audio/blast_mono_22hz_adpcm_ms.wav", 7202)] [TestCase(@"Assets/Audio/blast_mono_11hz_adpcm_ms.wav", 7202)] #else [TestCase(@"Assets/Audio/tone_mono_44khz_imaadpcm.wav", 556)] [TestCase(@"Assets/Audio/tone_stereo_44khz_imaadpcm.wav", 509)] #endif [TestCase(@"Assets/Audio/tone_mono_44khz_msadpcm.wav", 508)] [TestCase(@"Assets/Audio/tone_stereo_44khz_msadpcm.wav", 505)] [TestCase(@"Assets/Audio/tone_mono_44khz_float.wav", 500)] [TestCase(@"Assets/Audio/tone_stereo_44khz_float.wav", 500)] [TestCase(@"Assets/Audio/tone_mono_44khz_24bit.wav", 500)] [TestCase(@"Assets/Audio/tone_stereo_44khz_24bit.wav", 500)] #endif public void SoundEffectFromStream_Supported_Formats(string filename, long milliseconds) { using (var stream = File.OpenRead(filename)) { var sound = SoundEffect.FromStream(stream); Assert.AreEqual(milliseconds / 10, (int)sound.Duration.TotalMilliseconds / 10); } } #if XNA // KNI now supports loading ADPCM through SoundEffect.FromStream() [TestCase(@"Assets/Audio/blast_mono_44hz_adpcm_ms.wav")] [TestCase(@"Assets/Audio/blast_mono_22hz_adpcm_ms.wav")] [TestCase(@"Assets/Audio/blast_mono_11hz_adpcm_ms.wav")] public void SoundEffectFromStream_Unsupported_Formats(string filename) { using (var stream = File.OpenRead(filename)) Assert.Throws(() => SoundEffect.FromStream(stream)); } #endif // Proxy for the content manager used in SoundEffectFromContent class GraphicsDeviceProxy : IGraphicsDeviceService { public GraphicsDevice GraphicsDevice { get { return null; } } public event EventHandler DeviceCreated; public event EventHandler DeviceDisposing; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; } class ContentManagerProxy : ContentManager { public ContentManagerProxy(IServiceProvider services): base(services) {} protected override Stream OpenStream(string assetName) { var fileName = Path.Combine(RootDirectory, assetName + ".xnb"); if (File.Exists(fileName)) return new FileStream(fileName, FileMode.Open, FileAccess.Read); return base.OpenStream(assetName); } } [TestCase("tone_mono_44khz_8bit", 5000000)] [TestCase("tone_stereo_44khz_8bit", 5000000)] [TestCase("tone_mono_44khz_16bit", 5000000)] [TestCase("tone_stereo_44khz_16bit", 5000000)] #if !XNA // XNA does not support 32-bit float, MS-ADPCM or IMA/ADPCM in SoundEffect.FromStream, but KNI does. #if !WINDOWSDX [TestCase("tone_mono_44khz_imaadpcm", 6010000)] [TestCase("tone_stereo_44khz_imaadpcm", 5300000)] #endif [TestCase("tone_mono_44khz_float", 5000000)] [TestCase("tone_stereo_44khz_float", 5000000)] // XNA cannot seem to load our MS-ADPCM XNBs. [TestCase("tone_mono_44khz_msadpcm", 5070000)] [TestCase("tone_stereo_44khz_msadpcm", 5040000)] #endif public void SoundEffectFromContent(string filename, long durationTicks) { var services = new GameServiceContainer(); services.AddService(new GraphicsDeviceProxy()); var content = new ContentManagerProxy(services); var soundEffect = content.Load(Paths.Audio(filename)); Assert.AreEqual(durationTicks, soundEffect.Duration.Ticks); } } } ================================================ FILE: Tests/Framework.Audio/XAudio/SoundEffectInstanceXAudioTest.cs ================================================ using Microsoft.Xna.Framework.Audio; using NUnit.Framework; namespace Kni.Tests.Audio { // Tests specific to SoundEffectInstance.XAudio (Windows DirectX) public class SoundEffectInstanceXAudioTest { // Mono source [TestCase( 0f, 1f, 1, 1f, 1f)] [TestCase(-1f, 1f, 1, 1f, 0f)] [TestCase( 1f, 1f, 1, 0f, 1f)] [TestCase(-0.75f, 1f, 1, 1f, 0.25f)] [TestCase( 0.75f, 1f, 1, 0.25f, 1f)] [TestCase( 0f, 0.75f, 1, 0.75f, 0.75f)] // Mono source, scaled [TestCase(0f, 0.75f, 1, 0.75f, 0.75f)] [TestCase(-1f, 0.75f, 1, 0.75f, 0f)] [TestCase( 1f, 0.75f, 1, 0f, 0.75f)] // Stereo source [TestCase(0f, 1f, 2, 1f, 0f, 0f, 1f)] [TestCase(-1f, 1f, 2, 0.5f, 0.5f, 0f, 0f)] [TestCase(1f, 1f, 2, 0f, 0f, 0.5f, 0.5f)] [TestCase(-0.5f, 1f, 2, 0.75f, 0.25f, 0f, 0.5f)] [TestCase(0.5f, 1f, 2, 0.5f, 0f, 0.25f, 0.75f)] [TestCase(-0.75f, 1f, 2, 0.625f, 0.375f, 0f, 0.25f)] [TestCase(0.75f, 1f, 2, 0.25f, 0f, 0.375f, 0.625f)] // Stereo source, scaled [TestCase(0f, 0.75f, 2, 0.75f, 0f, 0f, 0.75f)] [TestCase(-1f, 0.75f, 2, 0.375f, 0.375f, 0f, 0f)] [TestCase(1f, 0.75f, 2, 0f, 0f, 0.375f, 0.375f)] public void CalculateOutputMatrixReturnsExpectedResults( float pan, float scale, int inputChannels, params float[] expectedValues) { var outputMatrix = Microsoft.Xna.Platform.Audio.ConcreteSoundEffectInstance.CalculateOutputMatrix(pan, scale, inputChannels); for (int i = 0; i < expectedValues.Length; i++) Assert.AreEqual(expectedValues[i], outputMatrix[i], "Channel#" + i); // the remaining values should be 0 for (int i = expectedValues.Length; i < outputMatrix.Length; i++) Assert.AreEqual(0f, outputMatrix[i], "Channel#" + i); } } } ================================================ FILE: Tests/Framework.Audio/XactTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Threading; using Microsoft.Xna.Framework.Audio; using NUnit.Framework; using Microsoft.Xna.Framework; namespace Kni.Tests.Audio { [TestFixture] public class XactTests { private AudioEngine _audioEngine; private SoundBank _soundBank; private WaveBank _waveBank; [SetUp] public void Setup() { // Necessary to get audio initialised FrameworkDispatcher.Update(); _audioEngine = new AudioEngine(@"Assets\Audio\Win\Tests.xgs"); _waveBank = new WaveBank(_audioEngine, @"Assets\Audio\Win\Tests.xwb"); _soundBank = new SoundBank(_audioEngine, @"Assets\Audio\Win\Tests.xsb"); } [TearDown] public void TearDown() { _soundBank.Dispose(); _waveBank.Dispose(); _audioEngine.Dispose(); } [Test] public static void AudioEngineCtor() { Assert.Throws(() => new AudioEngine(null)); Assert.Throws(() => new AudioEngine("")); //Assert.Throws(() => new AudioEngine(@"This\Does\Not\Exist.xgs")); Assert.Throws(() => new AudioEngine(@"Assets\Audio\Win\NotTheFile.xgs")); var audioEngine = new AudioEngine(@"Assets\Audio\Win\Tests.xgs"); Assert.False(audioEngine.IsDisposed); audioEngine.Dispose(); Assert.True(audioEngine.IsDisposed); } [Test] public void WaveBankCtor() { Assert.Throws(() => new WaveBank(null, null)); Assert.Throws(() => new WaveBank(_audioEngine, null)); Assert.Throws(() => new WaveBank(_audioEngine, "")); //Assert.Throws(() => new WaveBank(_audioEngine, @"This\Does\Not\Exist.xwb")); Assert.Throws(() => new WaveBank(_audioEngine, @"Assets\Audio\Win\NotTheFile.xwb")); var waveBank = new WaveBank(_audioEngine, @"Assets\Audio\Win\Tests.xwb"); Assert.False(waveBank.IsInUse); Assert.False(waveBank.IsDisposed); Assert.True(waveBank.IsPrepared); waveBank.Dispose(); Assert.True(waveBank.IsDisposed); Assert.False(waveBank.IsInUse); Assert.False(waveBank.IsPrepared); } [Test] public void SoundBankCtor() { Assert.Throws(() => new SoundBank(null, null)); Assert.Throws(() => new SoundBank(_audioEngine, null)); Assert.Throws(() => new SoundBank(_audioEngine, "")); //Assert.Throws(() => new SoundBank(_audioEngine, @"This\Does\Not\Exist.xsb")); Assert.Throws(() => new SoundBank(_audioEngine, @"Assets\Audio\Win\NotTheFile.xsb")); var soundBank = new SoundBank(_audioEngine, @"Assets\Audio\Win\Tests.xsb"); Assert.False(soundBank.IsInUse); Assert.False(soundBank.IsDisposed); var cue = soundBank.GetCue("blast_mono"); Assert.True(soundBank.IsInUse); cue.Dispose(); //Assert.False(soundBank.IsInUse); // KNI Fail soundBank.Dispose(); Assert.True(soundBank.IsDisposed); Assert.False(soundBank.IsInUse); } [Test] public static void ContentVersion() { Assert.AreEqual(39, AudioEngine.ContentVersion); } [Test] public void GetCategory() { Assert.Throws(() => _audioEngine.GetCategory(null)); Assert.Throws(() => _audioEngine.GetCategory("")); Assert.Throws(() => _audioEngine.GetCategory("DoesNotExist")); // Make sure case matters. Assert.Throws(() => _audioEngine.GetCategory("DEFAULT")); Assert.Throws(() => _audioEngine.GetCategory("default")); // Make sure we can get the different categories. Assert.AreEqual("Default", _audioEngine.GetCategory("Default").Name); Assert.AreEqual("The End", _audioEngine.GetCategory("The End").Name); Assert.AreEqual("Subcat", _audioEngine.GetCategory("Subcat").Name); } [Test] public void GetGlobalVariable() { Assert.Throws(() => _audioEngine.GetGlobalVariable(null)); Assert.Throws(() => _audioEngine.GetGlobalVariable("")); Assert.Throws(() => _audioEngine.GetGlobalVariable("DoesNotExist")); // Make sure case matters. Assert.Throws(() => _audioEngine.GetGlobalVariable("SPEEDOFSOUND")); Assert.Throws(() => _audioEngine.GetGlobalVariable("speedofsound")); Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable("SpeedOfSound")); Assert.AreEqual(12.34f, _audioEngine.GetGlobalVariable("Global Public")); // Make sure instance variables can't be accessed. Assert.Throws(() => _audioEngine.GetGlobalVariable("OrientationAngle")); // Make sure private variables can't be accessed. Assert.Throws(() => _audioEngine.GetGlobalVariable("Global Private")); } [Test] public void SetGlobalVariable() { Assert.Throws(() => _audioEngine.SetGlobalVariable(null, 0)); Assert.Throws(() => _audioEngine.SetGlobalVariable("", 0)); Assert.Throws(() => _audioEngine.SetGlobalVariable("DoesNotExist", 0)); // Make sure case matters. Assert.Throws(() => _audioEngine.SetGlobalVariable("SPEEDOFSOUND", 0)); Assert.Throws(() => _audioEngine.SetGlobalVariable("speedofsound", 0)); // Make sure a reserved variable can be set. Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable("SpeedOfSound")); _audioEngine.SetGlobalVariable("SpeedOfSound", 1.0f); Assert.AreEqual(1.0f, _audioEngine.GetGlobalVariable("SpeedOfSound")); _audioEngine.SetGlobalVariable("SpeedOfSound", 343.5f); Assert.AreEqual(343.5f, _audioEngine.GetGlobalVariable("SpeedOfSound")); // Make sure a user variable can be set. Assert.AreEqual(12.34f, _audioEngine.GetGlobalVariable("Global Public")); _audioEngine.SetGlobalVariable("Global Public", 1.0f); Assert.AreEqual(1.0f, _audioEngine.GetGlobalVariable("Global Public")); // Make sure variable limits are working. _audioEngine.SetGlobalVariable("Global Public", -100.0f); Assert.AreEqual(0.0f, _audioEngine.GetGlobalVariable("Global Public")); _audioEngine.SetGlobalVariable("Global Public", 1000.0f); Assert.AreEqual(100.0f, _audioEngine.GetGlobalVariable("Global Public")); // Make sure instance variables can't be accessed. Assert.Throws(() => _audioEngine.SetGlobalVariable("OrientationAngle", 1.0f)); // Make sure private variables can't be accessed. Assert.Throws(() => _audioEngine.SetGlobalVariable("Global Private", 1.0f)); } [Test] public void SoundBankGetCue() { Assert.Throws(() => _soundBank.GetCue(null)); Assert.Throws(() => _soundBank.GetCue("")); Assert.Throws(() => _soundBank.GetCue("DoesNotExist")); Assert.Throws(() => _soundBank.GetCue("BLAST_MONO")); var cue = _soundBank.GetCue("blast_mono"); Assert.NotNull(cue); Assert.AreEqual("blast_mono", cue.Name); Assert.False(cue.IsDisposed); // Make sure the initial state is correct. Assert.False(cue.IsCreated); Assert.False(cue.IsPreparing); Assert.True(cue.IsPrepared); Assert.False(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); Assert.False(cue.IsStopping); // Make sure play, pause, resume and stop are working cue.Play(); SleepWhileAudioEngineUpdates(100); Assert.True(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); cue.Pause(); SleepWhileAudioEngineUpdates(100); Assert.True(cue.IsPlaying); Assert.True(cue.IsPaused); Assert.False(cue.IsStopped); cue.Resume(); SleepWhileAudioEngineUpdates(100); Assert.True(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); cue.Stop(AudioStopOptions.Immediate); SleepWhileAudioEngineUpdates(100); Assert.False(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.True(cue.IsStopped); cue = _soundBank.GetCue ("blast_mono"); // Make sure the initial state is reset Assert.False(cue.IsCreated); Assert.False(cue.IsPreparing); Assert.True(cue.IsPrepared); Assert.False(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); Assert.False(cue.IsStopping); cue.Dispose(); // Make sure the disposed state is correct. Assert.True(cue.IsDisposed); Assert.False(cue.IsCreated); Assert.False(cue.IsPreparing); Assert.False(cue.IsPrepared); Assert.False(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); Assert.False(cue.IsStopping); } [Test] public void SoundBankPlayCue() { Assert.Throws(() => _soundBank.PlayCue(null)); Assert.Throws(() => _soundBank.PlayCue("")); Assert.Throws(() => _soundBank.PlayCue("DoesNotExist", null, null)); Assert.Throws(() => _soundBank.PlayCue("blast_mono", null, null)); Assert.Throws(() => _soundBank.PlayCue("blast_mono", new AudioListener(), null)); #if !XNA // Make sure play, pause, resume and stop are working _soundBank.PlayCue("blast_mono"); SleepWhileAudioEngineUpdates(100); Assert.AreEqual(1, _audioEngine.ActiveCues.Count); if (_audioEngine.ActiveCues.Count == 1) { var cue = _audioEngine.ActiveCues[0]; Assert.True(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); cue.Pause(); SleepWhileAudioEngineUpdates(100); Assert.True(cue.IsPlaying); Assert.True(cue.IsPaused); Assert.False(cue.IsStopped); cue.Resume(); SleepWhileAudioEngineUpdates(100); Assert.True(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.False(cue.IsStopped); cue.Stop(AudioStopOptions.Immediate); SleepWhileAudioEngineUpdates(100); Assert.False(cue.IsPlaying); Assert.False(cue.IsPaused); Assert.True(cue.IsStopped); Assert.AreEqual(0, _audioEngine.ActiveCues.Count); } #endif } [Test] public void CueGetVariable() { var cue = _soundBank.GetCue("blast_mono"); Assert.Throws(() => cue.GetVariable(null)); Assert.Throws(() => cue.GetVariable("")); Assert.Throws(() => cue.GetVariable("DoesNotExist")); // Make sure case matters. Assert.Throws(() => cue.GetVariable("DISTANCE")); Assert.Throws(() => cue.GetVariable("distance")); Assert.AreEqual(0.0f, cue.GetVariable("Distance")); Assert.AreEqual(45.67f, cue.GetVariable("Cue Public")); // Make sure globbal variables can't be accessed. Assert.Throws(() => cue.GetVariable("SpeedOfSound")); // Make sure private variables can't be accessed. Assert.Throws(() => cue.GetVariable("Cue Private")); cue.Dispose(); } [Test] public void CueSetVariable() { var cue = _soundBank.GetCue("blast_mono"); Assert.Throws(() => cue.SetVariable(null, 0)); Assert.Throws(() => cue.SetVariable("", 0)); Assert.Throws(() => cue.SetVariable("DoesNotExist", 0)); // Make sure case matters. Assert.Throws(() => cue.SetVariable("DISTANCE", 0)); Assert.Throws(() => cue.SetVariable("distance", 0)); // Make sure a reserved variable can be set. Assert.AreEqual(0, cue.GetVariable("Distance")); cue.SetVariable("Distance", 1.0f); Assert.AreEqual(1.0f, cue.GetVariable("Distance")); cue.SetVariable("Distance", 0); Assert.AreEqual(0, cue.GetVariable("Distance")); // Make sure a user variable can be set. Assert.AreEqual(45.67f, cue.GetVariable("Cue Public")); cue.SetVariable("Cue Public", 1.0f); Assert.AreEqual(1.0f, cue.GetVariable("Cue Public")); // Make sure variable limits are working. cue.SetVariable("Cue Public", -100.0f); Assert.AreEqual(0.0f, cue.GetVariable("Cue Public")); cue.SetVariable("Cue Public", 1000.0f); Assert.AreEqual(100.0f, cue.GetVariable("Cue Public")); // Make sure global variables can't be accessed. Assert.Throws(() => cue.SetVariable("Global Public", 1.0f)); // Make sure private variables can't be accessed. Assert.Throws(() => cue.SetVariable("Cue Private", 1.0f)); cue.Dispose(); } private void SleepWhileAudioEngineUpdates(int ms) { int cycles = ms / 10; for (int i = 0; i < cycles; i++) { _audioEngine.Update(); Thread.Sleep(10); } } } } ================================================ FILE: Tests/Framework.Game/GameComponentTest.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using NUnit.Framework; using Kni.Tests.Framework.Components; namespace Kni.Tests.Framework { public static class GameComponentTest { [Test] public static void InitializeOrderTest() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); game.IsFixedTimeStep = false; game.ExitCondition = x => x.UpdateNumber > 1; var constructor2 = new InitializeOrderComponent(game); var preBaseInitialize2 = new InitializeOrderComponent(game); var postBaseInitialize2 = new InitializeOrderComponent(game); var loadContent2 = new InitializeOrderComponent(game); var update2 = new InitializeOrderComponent(game); var constructor = new InitializeOrderComponent(game) {ChildComponent = constructor2}; var preBaseInitialize = new InitializeOrderComponent(game) {ChildComponent = preBaseInitialize2}; var postBaseInitialize = new InitializeOrderComponent(game) {ChildComponent = postBaseInitialize2}; var loadContent = new InitializeOrderComponent(game) {ChildComponent = loadContent2}; var update = new InitializeOrderComponent(game) {ChildComponent = update2}; game.Components.Add(constructor); game.PreInitializeWith += (sender, args) => { game.Components.Add(preBaseInitialize); }; game.InitializeWith += (sender, args) => { game.Components.Add(postBaseInitialize); }; game.PreLoadContentWith += (sender, args) => { game.Components.Add(loadContent); }; game.PreUpdateWith += (sender, args) => { game.Components.Add(update); }; game.Run(); game.Dispose(); Assert.That(constructor.InitOrder == 0); Assert.That(preBaseInitialize.InitOrder == 1); Assert.That(constructor2.InitOrder == 2); Assert.That(preBaseInitialize2.InitOrder == 3); Assert.That(update2.InitOrder == 4); Assert.That(update.InitOrder == 5); Assert.That(postBaseInitialize.InitOrder == -1); Assert.That(postBaseInitialize2.InitOrder == -1); } } } ================================================ FILE: Tests/Framework.Game/GameTest+Methods.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using NUnit.Framework; namespace Kni.Tests { partial class GameTest { public static class Methods { [TestFixture] public class Run : FixtureBase { [Test, Ignore("Fix me!")] public void Can_only_be_called_once() { Game.Run(); Assert.Throws(() => Game.Run()); } } } } } ================================================ FILE: Tests/Framework.Game/GameTest+Properties.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Reflection; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; using NUnit.Framework.Constraints; namespace Kni.Tests { partial class GameTest { public static class Properties { [TestFixture] public class Components : ReadOnlyPropertyFixtureBase { public Components() : base(g => g.Components) { } public override void Has_correct_default_value() { } [Test] public void Is_available_before_Run() { Assert.That(Game, HasThisProperty.Not.Null); } } [TestFixture] public class Content : ReadWritePropertyFixtureBase { public Content() : base(g => g.Content) { AddLegalValue(new ContentManager(new GameServiceContainer())); AddIllegalValue(null); } [SetUp] public override void SetUp() { base.SetUp(); } public override void Has_correct_default_value() { } [Test] public void Is_available_before_Run() { Assert.That(Game, HasThisProperty.Not.Null); } [Test] public void Is_not_provided_as_a_service() { Assert.IsNull(Game.Services.GetService(typeof(ContentManager))); } } [TestFixture] public class GraphicsDevice_ : ReadOnlyPropertyFixtureBase { public GraphicsDevice_() : base(g => g.GraphicsDevice) { } public override void Has_correct_default_value() { } [Test] public void Is_invalid_without_IGraphicsDeviceService() { Assert.IsNull(Game.Services.GetService(typeof(IGraphicsDeviceService))); Assert.Throws(() => { var device = ThisProperty; }); } [Test] public void Is_valid_with_IGraphicsDeviceService() { var service = new MockGraphicsDeviceService(); Game.Services.AddService(typeof(IGraphicsDeviceService), service); Assert.That(Game, HasThisProperty.SameAs(service.GraphicsDevice)); } [Test] public void Is_not_available_in_graphical_game_before_Run() { Game.MakeGraphical(); Assert.That(Game, HasThisProperty.Null); } private class MockGraphicsDeviceService : IGraphicsDeviceService { #pragma warning disable 67 public event EventHandler DeviceCreated; public event EventHandler DeviceDisposing; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; #pragma warning restore 67 // TODO: It might be nice to try to use a real, live // GraphicsDevice here rather than null. public GraphicsDevice GraphicsDevice { get { return null; } } } } [TestFixture] public class InactiveSleepTime : ReadWritePropertyFixtureBase { public InactiveSleepTime() : base(g => g.InactiveSleepTime) { DefaultValue = TimeSpan.FromSeconds(0.02); AddLegalValue(TimeSpan.Zero); AddLegalValue(TimeSpan.Zero); AddLegalValue(TimeSpan.FromSeconds(1)); AddLegalValue(TimeSpan.MaxValue); AddIllegalValue(TimeSpan.FromSeconds(-1)); AddIllegalValue(TimeSpan.MinValue); } } [TestFixture] public class IsActive : ReadOnlyPropertyFixtureBase { public IsActive() : base(g => g.IsActive) { DefaultValue = false; } } [TestFixture] public class IsFixedTimeStep : ReadWritePropertyFixtureBase { public IsFixedTimeStep() : base(g => g.IsFixedTimeStep) { DefaultValue = true; AddLegalValue(true); AddLegalValue(false); } public override void Cannot_set_illegal_value(Tuple valueAndException) { } } [TestFixture] public class IsMouseVisible : ReadWritePropertyFixtureBase { public IsMouseVisible() : base(g => g.IsMouseVisible) { DefaultValue = false; AddLegalValue(true); AddLegalValue(false); } public override void Cannot_set_illegal_value(Tuple valueAndException) { } } [TestFixture] public class LaunchParameters_ : ReadOnlyPropertyFixtureBase { public LaunchParameters_() : base(g => g.LaunchParameters) { } public override void Has_correct_default_value() { } [Test] public void Is_available_before_Run() { Assert.That(Game, HasThisProperty.Not.Null); } } [TestFixture] public class Services : ReadOnlyPropertyFixtureBase { public Services() : base(g => g.Services) { } public override void Has_correct_default_value() { } [Test] public void Is_available_before_Run() { Assert.That(Game, HasThisProperty.Not.Null); } } [TestFixture] public class TargetElapsedTime : ReadWritePropertyFixtureBase { public TargetElapsedTime() : base(g => g.TargetElapsedTime) { DefaultValue = TimeSpan.FromTicks(166666); AddLegalValue(TimeSpan.FromSeconds(1)); AddLegalValue(TimeSpan.MaxValue); AddIllegalValue(TimeSpan.Zero); AddIllegalValue(TimeSpan.FromSeconds(-1)); AddIllegalValue(TimeSpan.MinValue); } } [TestFixture] public class Window : ReadOnlyPropertyFixtureBase { public Window() : base(g => g.Window) { } public override void Has_correct_default_value() { } [Test] public void Is_available_before_Run() { Game.MakeGraphical(); Assert.That(Game, HasThisProperty.Not.Null); } [Test] public void Is_available_in_non_graphical_game() { Assert.That(Game, HasThisProperty.Not.Null); } } public abstract class PropertyFixtureBase : FixtureBase { private Func _getter; protected PropertyFixtureBase(Expression> propertyExpression) { MemberExpression member = (MemberExpression)propertyExpression.Body; _propertyInfo = (PropertyInfo)member.Member; _getter = propertyExpression.Compile(); } protected PropertyT _GetValue() { return _getter(Game); } protected void _SetValue(PropertyT value) { } protected ResolvableConstraintExpression HasThisProperty { get { return Has.Property(_propertyInfo.Name); } } private PropertyInfo _propertyInfo; protected PropertyInfo PropertyInfo { get { return _propertyInfo; } } protected virtual PropertyT ThisProperty { get { return _getter(Game); } } private Maybe _defaultValue; protected PropertyT DefaultValue { get { if (!_defaultValue.HasValue) throw new InvalidOperationException( "DefaultValue has never been set."); return _defaultValue.Value; } set { _defaultValue = value; } } [Test] public virtual void Has_correct_default_value() { if (!_defaultValue.HasValue) throw new IgnoreException("No DefaultValue available"); Assert.That(Game, HasThisProperty.EqualTo(_defaultValue.Value)); } private struct Maybe { public Maybe(T value) { _hasValue = true; _value = value; } private readonly bool _hasValue; public bool HasValue { get { return _hasValue; } } private readonly T _value; public T Value { get { return _value; } } public static implicit operator Maybe(T value) { return new Maybe(value); } } } public abstract class ReadOnlyPropertyFixtureBase : PropertyFixtureBase { protected ReadOnlyPropertyFixtureBase( Expression> propertyExpression) : base(propertyExpression) { } [Test] public void Is_read_only() { if (PropertyInfo.GetGetMethod() == null) Assert.Fail("Property {0} is not readable.", PropertyInfo.Name); if (PropertyInfo.GetSetMethod() != null) Assert.Fail("Property {0} is writeable.", PropertyInfo.Name); } } public abstract class ReadWritePropertyFixtureBase : PropertyFixtureBase { protected ReadWritePropertyFixtureBase( Expression> propertyExpression) : base(propertyExpression) { } protected new PropertyT ThisProperty { get { return base.ThisProperty; } set { try { PropertyInfo.SetValue(Game, value, null); } catch (TargetInvocationException ex) { // Unpack the real exception throw ex.InnerException; } } } [Test] public void Is_read_write() { if (PropertyInfo.GetGetMethod() == null) Assert.Fail("Property {0} is not readable.", PropertyInfo.Name); if (PropertyInfo.GetSetMethod() == null) Assert.Fail("Property {0} is not writeable.", PropertyInfo.Name); } protected void AddLegalValue(PropertyT value) { _legalValues.Add(value); } protected void AddIllegalValue(PropertyT value) { _illegalValues.Add(Tuple.Create(value, typeof(ExceptionT))); } private List _legalValues = new List(); protected List LegalValues { get { return _legalValues; } } private List> _illegalValues = new List>(); protected List> IllegalValues { get { return _illegalValues; } } [Test, TestCaseSource("LegalValues"), Ignore("The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method.")] public virtual void Can_set_legal_value(PropertyT value) { Assert.DoesNotThrow(() => ThisProperty = value); } [Test, TestCaseSource("IllegalValues"), Ignore("The sourceName specified on a TestCaseSourceAttribute must refer to a static field, property or method.")] public virtual void Cannot_set_illegal_value(Tuple valueAndException) { var value = valueAndException.Item1; var exceptionType = valueAndException.Item2; Assert.Throws(exceptionType, () => ThisProperty = value); } } } } } ================================================ FILE: Tests/Framework.Game/GameTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests { static partial class GameTest { [TestFixture] public class Disposal : FixtureBase { [TestCase("Components")] [TestCase("Content")] [TestCase("GraphicsDevice")] [TestCase("InactiveSleepTime")] [TestCase("IsActive")] [TestCase("IsFixedTimeStep")] [TestCase("IsMouseVisible")] [TestCase("LaunchParameters")] [TestCase("Services")] [TestCase("TargetElapsedTime")] [TestCase("Window")] public void Property_does_not_throws_after_Dispose(string propertyName) { var propertyInfo = Game.GetType().GetProperty(propertyName); if (propertyInfo == null) Assert.Fail("Property '{0}' not found", propertyName); Game.Dispose(); AssertDoesNotThrow(() => RunAndUnpackException(() => propertyInfo.GetValue(Game, null))); } [TestCase("Dispose")] [TestCase("Exit")] [TestCase("ResetElapsedTime")] [TestCase("Run")] [TestCase("RunOneFrame")] [TestCase("SuppressDraw")] [TestCase("Tick")] public void Method_does_not_throw_after_Dispose(string methodName) { var methodInfo = Game.GetType().GetMethod(methodName, new Type[0]); if (methodInfo == null) Assert.Fail("Method '{0}' not found", methodName); Game.Dispose(); AssertDoesNotThrow(() => RunAndUnpackException(() => methodInfo.Invoke(Game, null))); } private void RunAndDispose() { Game.MakeGraphical(); Game.Run(); Game.Dispose(); } private static void RunAndUnpackException(Action action) { try { action(); } catch (TargetInvocationException ex) { throw ex.InnerException; } } private void RunDisposeAndTry(Action action, string name, bool shouldThrow) { RunAndDispose(); bool didThrow = false; try { action(); } catch (ObjectDisposedException) { if (!shouldThrow) Assert.Fail("{0} threw ObjectDisposed when it shouldn't have.", name); didThrow = true; } catch (TargetInvocationException ex) { if (!(ex.InnerException is ObjectDisposedException)) throw; if (!shouldThrow) Assert.Fail("{0} threw ObjectDisposed when it shouldn't have.", name); didThrow = true; } if (didThrow && !shouldThrow) Assert.Fail("{0} did not throw ObjectDisposedException when it should have.", name); } private static void AssertDoesNotThrow(TestDelegate code) where T : Exception { try { code(); } catch (T ex) { Assert.AreEqual(null, ex); } catch (Exception ex) { Console.WriteLine( "AssertDoesNotThrow<{0}> caught and ignored {1}", typeof(T), ex); } } } [TestFixture] public class Behaviors : FixtureBase { [Test] public void Nongraphical_run_succeeds() { Game.Run(); Assert.That(Game, Has.Property("UpdateCount").EqualTo(1)); Assert.That(Game, Has.Property("DrawCount").EqualTo(0)); } [Test, Ignore("Fix me!")] public void Fixed_time_step_skips_draw_when_update_is_slow() { Game.MakeGraphical(); var targetElapsedTime = TimeSpan.FromSeconds(1f / 10f); var slowUpdateTime = TimeSpan.FromSeconds(targetElapsedTime.TotalSeconds * 2); var slowUpdater = new SlowUpdater(Game, slowUpdateTime); Game.Components.Add(slowUpdater); var logger = new RunLoopLogger(Game); Game.Components.Add(logger); Game.MaxUpdateCount = int.MaxValue; Game.MaxDrawCount = 100; Game.IsFixedTimeStep = true; Game.TargetElapsedTime = targetElapsedTime; Game.Run(); //Assert.That(_game, Has.Property("UpdateCount").GreaterThan(11)); //Assert.That(_game, Has.Property("DrawCount").EqualTo(10)); } [Test] public void GameTickTest() { // should not throw an exception Game.ResetElapsedTime(); Assert.DoesNotThrow(() => Game.Tick()); Game.ResetElapsedTime(); } } [TestFixture] public class Misc { [Test] public void LoadContentNotCalledWithoutGdm() { var g = new CountCallsGame(); g.PublicInitialize(); Assert.AreEqual(0, g.LoadContentCount); g.Dispose(); } [Test] public void LoadContentNotCalledWithoutGd() { var g = new CountCallsGame(); var gdm = new GraphicsDeviceManager(g); g.PublicInitialize(); Assert.AreEqual(0, g.LoadContentCount); g.Dispose(); } [Test] public void ExitHappensAtEndOfTick() { // Exit called in Run var g = new ExitTestGame(); // TODO this is not necessary for XNA, but MG crashes when no GDM is set and Run is called new GraphicsDeviceManager(g); g.Run(); Assert.AreEqual(2, g.UpdateCount); Assert.AreEqual(0, g.DrawCount); // Draw should be suppressed Assert.AreEqual(1, g.ExitingCount); g.Dispose(); } private class ExitTestGame : CountCallsGame { private int count = 0; protected override void Update(GameTime gameTime) { if (count > 0) Exit(); base.Update(gameTime); Assert.IsNotNull(Window); Assert.AreEqual(0, ExitingCount); count++; } } } private class SlowUpdater : GameComponent { private TimeSpan _updateTime; public SlowUpdater(Game game, TimeSpan updateTime) : base(game) { _updateTime = updateTime; } int _count = 0; public override void Update(GameTime gameTime) { base.Update(gameTime); if (_count >= 4) return; _count++; //if (!gameTime.IsRunningSlowly) { var endTick = Stopwatch.GetTimestamp() + (long)(Stopwatch.Frequency * _updateTime.TotalSeconds); //long endTick = (long)(_updateTime.TotalMilliseconds * 10) + DateTime.Now.Ticks; while (Stopwatch.GetTimestamp() < endTick) { // Be busy! } } } } private class RunLoopLogger : DrawableGameComponent { public RunLoopLogger(Game game) : base(game) { } private List _entries = new List(); public IEnumerable GetEntries() { return _entries.ToArray(); } public override void Update(GameTime gameTime) { base.Update(gameTime); _entries.Add(Entry.FromUpdate(gameTime)); } public override void Draw(GameTime gameTime) { base.Draw(gameTime); _entries.Add(Entry.FromDraw(gameTime)); } public string GetLogString() { return string.Join(" ", _entries); } public struct Entry { public RunLoopAction Action { get; set; } public TimeSpan ElapsedGameTime { get; set; } public TimeSpan TotalGameTime { get; set; } public bool WasRunningSlowly { get; set; } public static Entry FromDraw(GameTime gameTime) { return new Entry { Action = RunLoopAction.Draw, ElapsedGameTime = gameTime.ElapsedGameTime, TotalGameTime = gameTime.TotalGameTime, WasRunningSlowly = gameTime.IsRunningSlowly }; } public static Entry FromUpdate(GameTime gameTime) { return new Entry { Action = RunLoopAction.Update, ElapsedGameTime = gameTime.ElapsedGameTime, TotalGameTime = gameTime.TotalGameTime, WasRunningSlowly = gameTime.IsRunningSlowly }; } public override string ToString() { char actionInitial; switch (Action) { case RunLoopAction.Draw: actionInitial = 'd'; break; case RunLoopAction.Update: actionInitial = 'u'; break; default: throw new NotSupportedException(Action.ToString()); } return string.Format( "{0}({1:0}{2})", actionInitial, ElapsedGameTime.TotalMilliseconds, WasRunningSlowly ? "!" : ""); } } } private enum RunLoopAction { Draw, Update } } } ================================================ FILE: Tests/Framework.Graphics/BlendStateTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class BlendStateTest : GraphicsDeviceTestFixtureBase { [Test] public void ShouldNotBeAbleToSetNullBlendState() { Assert.Throws(() => game.GraphicsDevice.BlendState = null); } [Test] public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice() { BlendState blendState = new BlendState(); // Can mutate before binding. DoAsserts(blendState, Assert.DoesNotThrow); // Can't mutate after binding. game.GraphicsDevice.BlendState = blendState; DoAsserts(blendState, d => Assert.Throws(d)); // Even after changing to different BlendState, you still can't mutate a previously-bound object. game.GraphicsDevice.BlendState = BlendState.Opaque; DoAsserts(blendState, d => Assert.Throws(d)); blendState.Dispose(); } [Test] public void ShouldNotBeAbleToMutateDefaultStateObjects() { DoAsserts(BlendState.Additive, d => Assert.Throws(d)); DoAsserts(BlendState.AlphaBlend, d => Assert.Throws(d)); DoAsserts(BlendState.NonPremultiplied, d => Assert.Throws(d)); DoAsserts(BlendState.Opaque, d => Assert.Throws(d)); } private static void DoAsserts(BlendState blendState, Action assertMethod) { assertMethod(() => blendState.AlphaBlendFunction = BlendFunction.Add); assertMethod(() => blendState.AlphaDestinationBlend = Blend.BlendFactor); assertMethod(() => blendState.AlphaSourceBlend = Blend.BlendFactor); assertMethod(() => blendState.BlendFactor = Color.White); assertMethod(() => blendState.ColorBlendFunction = BlendFunction.Add); assertMethod(() => blendState.ColorDestinationBlend = Blend.BlendFactor); assertMethod(() => blendState.ColorSourceBlend = Blend.BlendFactor); assertMethod(() => blendState.ColorWriteChannels = ColorWriteChannels.All); assertMethod(() => blendState.ColorWriteChannels1 = ColorWriteChannels.All); assertMethod(() => blendState.ColorWriteChannels2 = ColorWriteChannels.All); assertMethod(() => blendState.ColorWriteChannels3 = ColorWriteChannels.All); assertMethod(() => blendState.MultiSampleMask = 0); #if WINDOWSDX // that is invalid for Reach profile //assertMethod(() => blendState.IndependentBlendEnable = true); //for (int i = 0; i < 4; i++) //{ // assertMethod(() => blendState[0].AlphaBlendFunction = BlendFunction.Add); // assertMethod(() => blendState[0].AlphaDestinationBlend = Blend.BlendFactor); // assertMethod(() => blendState[0].AlphaSourceBlend = Blend.BlendFactor); // assertMethod(() => blendState[0].ColorBlendFunction = BlendFunction.Add); // assertMethod(() => blendState[0].ColorDestinationBlend = Blend.BlendFactor); // assertMethod(() => blendState[0].ColorSourceBlend = Blend.BlendFactor); // assertMethod(() => blendState[0].ColorWriteChannels = ColorWriteChannels.All); //} #endif } [Test] public void VisualTests() { Blend[] blends = new[] { Blend.One, Blend.Zero, Blend.SourceColor, Blend.InverseSourceColor, Blend.SourceAlpha, Blend.InverseSourceAlpha, Blend.DestinationColor, Blend.InverseDestinationColor, Blend.DestinationAlpha, Blend.InverseDestinationAlpha, Blend.BlendFactor, Blend.InverseBlendFactor, Blend.SourceAlphaSaturation, }; SpriteBatch spriteBatch = new SpriteBatch(gd); Texture2D texture = content.Load(Paths.Texture("MonoGameIcon")); Vector2 size = new Vector2(texture.Width * 0.5f, texture.Height * 0.5f); Vector2 offset = new Vector2(10, 10); PrepareFrameCapture(); gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); for (int y = 0; y < blends.Length; y++) { for (int x = 0; x < blends.Length; x++) { Vector2 pos = offset + new Vector2(x*size.X, y*size.Y); BlendState blendState = new BlendState(); blendState.ColorSourceBlend = blends[y]; blendState.AlphaSourceBlend = blends[y]; blendState.ColorDestinationBlend = blends[x]; blendState.AlphaDestinationBlend = blends[x]; blendState.BlendFactor = new Color(0.3f, 0.5f, 0.7f); spriteBatch.Begin(SpriteSortMode.Deferred, blendState); spriteBatch.Draw(texture, new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y), Color.White); spriteBatch.End(); blendState.Dispose(); } } CheckFrames(); spriteBatch.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/DepthStencilStateTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.Components; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class DepthStencilStateTest : GraphicsDeviceTestFixtureBase { [Test] public void ShouldNotBeAbleToSetNullDepthStencilState() { Assert.Throws(() => gd.DepthStencilState = null); } [Test] public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice() { var depthStencilState = new DepthStencilState(); // Can mutate before binding. DoAsserts(depthStencilState, Assert.DoesNotThrow); // Can't mutate after binding. gd.DepthStencilState = depthStencilState; DoAsserts(depthStencilState, d => Assert.Throws(d)); // Even after changing to different RasterizerState, you still can't mutate a previously-bound object. gd.DepthStencilState = DepthStencilState.Default; DoAsserts(depthStencilState, d => Assert.Throws(d)); depthStencilState.Dispose(); } [Test] public void ShouldNotBeAbleToMutateDefaultStateObjects() { DoAsserts(DepthStencilState.Default, d => Assert.Throws(d)); DoAsserts(DepthStencilState.DepthRead, d => Assert.Throws(d)); DoAsserts(DepthStencilState.None, d => Assert.Throws(d)); } private static void DoAsserts(DepthStencilState depthStencilState, Action assertMethod) { assertMethod(() => depthStencilState.CounterClockwiseStencilDepthBufferFail = StencilOperation.Decrement); assertMethod(() => depthStencilState.CounterClockwiseStencilFail = StencilOperation.Decrement); assertMethod(() => depthStencilState.CounterClockwiseStencilFunction = CompareFunction.Always); assertMethod(() => depthStencilState.CounterClockwiseStencilPass = StencilOperation.Decrement); assertMethod(() => depthStencilState.DepthBufferEnable = true); assertMethod(() => depthStencilState.DepthBufferFunction = CompareFunction.Always); assertMethod(() => depthStencilState.DepthBufferWriteEnable = true); assertMethod(() => depthStencilState.ReferenceStencil = 1); assertMethod(() => depthStencilState.StencilDepthBufferFail = StencilOperation.Decrement); assertMethod(() => depthStencilState.StencilEnable = true); assertMethod(() => depthStencilState.StencilFail = StencilOperation.Decrement); assertMethod(() => depthStencilState.StencilFunction = CompareFunction.Always); assertMethod(() => depthStencilState.StencilMask = 1); assertMethod(() => depthStencilState.StencilPass = StencilOperation.Decrement); assertMethod(() => depthStencilState.StencilWriteMask = 1); assertMethod(() => depthStencilState.TwoSidedStencilMode = true); } [TestCase(false)] [TestCase(true)] public void VisualTestDepthBufferEnable(bool depthBufferEnable) { PrepareFrameCapture(); var cube = new Simple3DCubeComponent(gd); cube.LoadContent(); gd.DepthStencilState = new DepthStencilState { DepthBufferEnable = depthBufferEnable }; gd.Clear(Color.CornflowerBlue); cube.CubeColor = Color.Red; cube.Draw(); cube.CubePosition = new Vector3(0.4f, 0, 0); cube.CubeColor = Color.Green; cube.Draw(); CheckFrames(); cube.UnloadContent(); } [Test] public void VisualTestStencilBuffer() { PrepareFrameCapture(); var cube = new Simple3DCubeComponent(gd); cube.LoadContent(); gd.Clear( ClearOptions.DepthBuffer | ClearOptions.Stencil | ClearOptions.Target, Color.CornflowerBlue, 1, 0); var depthStencilState = new DepthStencilState { ReferenceStencil = 1, StencilEnable = true, StencilFunction = CompareFunction.Always, StencilPass = StencilOperation.Replace, DepthBufferEnable = false }; gd.DepthStencilState = depthStencilState; cube.CubeColor = Color.Red; cube.Draw(); depthStencilState.Dispose(); depthStencilState = new DepthStencilState { ReferenceStencil = 0, StencilEnable = true, StencilFunction = CompareFunction.Equal, StencilPass = StencilOperation.Keep, DepthBufferEnable = false }; gd.DepthStencilState = depthStencilState; cube.CubePosition = new Vector3(0.4f, 0, 0); cube.CubeColor = Color.Green; cube.Draw(); CheckFrames(); depthStencilState.Dispose(); cube.UnloadContent(); } } } ================================================ FILE: Tests/Framework.Graphics/EffectTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Kni.Tests.ContentPipeline; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class EffectTest : GraphicsDeviceTestFixtureBase { [Test] public void EffectParameterShouldBeSetIfSetByNameAndGetByIndex() { // This relies on the parameters permanently being on the same index. // Should be no problem except when adding parameters. Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); game.GraphicsDevice.Textures[0] = texture; BasicEffect effect = new BasicEffect(game.GraphicsDevice); effect.TextureEnabled = true; effect.Texture = null; effect.Parameters["DiffuseColor"].SetValue(Color.HotPink.ToVector4()); effect.Parameters["FogColor"].SetValue(Color.Honeydew.ToVector3()); int DiffuseColorIndex = 0; int FogColorIndex = 14; #if XNA DiffuseColorIndex = 1; FogColorIndex = 15; #elif DESKTOPGL DiffuseColorIndex = 1; FogColorIndex = 2; #endif Assert.That(effect.Parameters[DiffuseColorIndex].GetValueVector4().Equals(Color.HotPink.ToVector4())); Assert.That(effect.Parameters[FogColorIndex].GetValueVector3().Equals(Color.Honeydew.ToVector3())); texture.Dispose(); effect.Dispose(); } [Test] public void EffectPassShouldSetTexture() { Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); game.GraphicsDevice.Textures[0] = null; BasicEffect effect = new BasicEffect(game.GraphicsDevice); effect.TextureEnabled = true; effect.Texture = texture; Assert.That(game.GraphicsDevice.Textures[0], Is.Null); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture)); texture.Dispose(); effect.Dispose(); } [Test] public void EffectPassShouldSetTextureOnSubsequentCalls() { Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); game.GraphicsDevice.Textures[0] = null; BasicEffect effect = new BasicEffect(game.GraphicsDevice); effect.TextureEnabled = true; effect.Texture = texture; Assert.That(game.GraphicsDevice.Textures[0], Is.Null); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture)); game.GraphicsDevice.Textures[0] = null; effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture)); texture.Dispose(); effect.Dispose(); } [Test] public void EffectPassShouldSetTextureEvenIfNull() { Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); game.GraphicsDevice.Textures[0] = texture; BasicEffect effect = new BasicEffect(game.GraphicsDevice); effect.TextureEnabled = true; effect.Texture = null; Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture)); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(game.GraphicsDevice.Textures[0], Is.Null); texture.Dispose(); effect.Dispose(); } [Test] public void EffectPassShouldOverrideTextureIfNotExplicitlySet() { Texture2D texture = new Texture2D(game.GraphicsDevice, 1, 1, false, SurfaceFormat.Color); game.GraphicsDevice.Textures[0] = texture; BasicEffect effect = new BasicEffect(game.GraphicsDevice); effect.TextureEnabled = true; Assert.That(game.GraphicsDevice.Textures[0], Is.SameAs(texture)); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(game.GraphicsDevice.Textures[0], Is.Null); texture.Dispose(); effect.Dispose(); } private bool IsSamplerEqual(SamplerState s0, SamplerState s1) { if (s0 == null && s1 == null) return true; return s0.Filter == s1.Filter && s0.AddressU == s1.AddressU && s0.AddressV == s1.AddressV ; } [Test] public void OldSyntaxEffectPassShouldNotOverrideSamplersAndNotOverrideTextures() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.LinearClamp; SamplerState sampler1 = SamplerState.PointClamp; device.SamplerStates[0] = sampler0; device.SamplerStates[1] = sampler1; string effectName = "OldSyntax_x"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif // Samplers shouldn't be exposed as parameters. Assert.That(effect.Parameters.Count == 0); device.Textures[0] = texture0; device.Textures[1] = texture1; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void OldSyntaxEffectPassShouldOverrideSamplersAndNotOverrideTextures() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.PointWrap; SamplerState sampler1 = SamplerState.PointClamp; #if XNA sampler0 = null; sampler1 = null; #endif string effectName = "OldSyntax_s0s1"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif // Samplers shouldn't be exposed as parameters. Assert.That(effect.Parameters.Count == 0); device.Textures[0] = texture0; device.Textures[1] = texture1; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void OldSyntaxEffectPassShouldSetTexturesAndNotSamplers() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; texture0.SetData(new Color[] { new Color(0f,0f,1f,1f) }); texture1.SetData(new Color[] { new Color(0f,1f,0f,1f) }); SamplerState sampler0 = SamplerState.LinearWrap; SamplerState sampler1 = SamplerState.LinearWrap; string effectName = "OldSyntax_t0t1"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Texture0"].SetValue(texture0); effect.Parameters["Texture1"].SetValue(texture1); BasicEffect basicEffect = new BasicEffect(device); basicEffect.World = Matrix.Identity; basicEffect.View = Matrix.Identity; basicEffect.Projection = Matrix.Identity; basicEffect.CurrentTechnique.Passes[0].Apply(); // apply basic VertexShader EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); RenderTarget2D rt = new RenderTarget2D(device, 1, 1); device.SetRenderTarget(rt); device.Clear(Color.Black); VertexPosition[] vertices = new VertexPosition[4]; vertices[0].Position = new Vector3(-1, -1, 0); vertices[1].Position = new Vector3( 1, -1, 0); vertices[2].Position = new Vector3(-1, 1, 0); vertices[3].Position = new Vector3( 1, 1, 0); device.BlendState = BlendState.Opaque; device.DepthStencilState = DepthStencilState.None; device.RasterizerState = RasterizerState.CullNone; device.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices, 0, 2); device.SetRenderTarget(null); Color[] data = new Color[1]; rt.GetData(data); Assert.That(data[0] == new Color(0f, 0.5f, 1f, 1f)); rt.Dispose(); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void OldSyntaxEffectPassShouldSetTexturesAndNotSamplers2() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; texture0.SetData(new Color[] { new Color(0f, 0f, 1f, 1f) }); texture1.SetData(new Color[] { new Color(0f, 1f, 0f, 1f) }); SamplerState sampler0 = SamplerState.LinearWrap; SamplerState sampler1 = SamplerState.LinearWrap; string effectName = "OldSyntax_t1t0"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Texture0"].SetValue(texture0); effect.Parameters["Texture1"].SetValue(texture1); BasicEffect basicEffect = new BasicEffect(device); basicEffect.World = Matrix.Identity; basicEffect.View = Matrix.Identity; basicEffect.Projection = Matrix.Identity; basicEffect.CurrentTechnique.Passes[0].Apply(); // apply basic VertexShader EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); int t0 = 0; int t1 = 1; int t2 = 2; #if KNI //if (device.Adapter.Backend == GraphicsBackend.DirectX11) //{ // t0 = 1; // t1 = 0; //} #endif Assert.That(device.Textures[t0], Is.SameAs(texture0)); Assert.That(device.Textures[t1], Is.SameAs(texture1)); Assert.That(device.Textures[t2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); RenderTarget2D rt = new RenderTarget2D(device, 1, 1); device.SetRenderTarget(rt); device.Clear(Color.Black); VertexPosition[] vertices = new VertexPosition[4]; vertices[0].Position = new Vector3(-1, -1, 0); vertices[1].Position = new Vector3( 1, -1, 0); vertices[2].Position = new Vector3(-1, 1, 0); vertices[3].Position = new Vector3( 1, 1, 0); device.BlendState = BlendState.Opaque; device.DepthStencilState = DepthStencilState.None; device.RasterizerState = RasterizerState.CullNone; device.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices, 0, 2); device.SetRenderTarget(null); Color[] data = new Color[1]; rt.GetData(data); //TODO: this currently fails on DX11. The order of texture slots has to be swapped. Assert.That(data[0] == new Color(0f, 0.5f, 1f, 1f)); rt.Dispose(); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void OldSyntaxEffectPassShouldSetTexturesAndSamplers() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.PointWrap; SamplerState sampler1 = SamplerState.PointClamp; #if XNA sampler0 = null; sampler1 = null; #endif string effectName = "OldSyntax_s0s1t0t1"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Texture0"].SetValue(texture0); effect.Parameters["Texture1"].SetValue(texture1); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0],sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1],sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void DeferredBasicEffectPassShouldSetTexturesAndSamplers() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.LinearWrap; SamplerState sampler1 = SamplerState.LinearWrap; #if XNA sampler0 = null; sampler1 = null; #endif string effectName = "DeferredBasicEffect"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Diffuse"].SetValue(texture0); effect.Parameters["SpecularMap"].SetValue(texture1); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); int t0 = 0; int t1 = 1; int t2 = 2; #if KNI //if (device.Adapter.Backend == GraphicsBackend.DirectX11) //{ // t0 = 3; // t1 = 4; // t2 = 5; //} #endif Assert.That(device.Textures[t0], Is.SameAs(texture0)); Assert.That(device.Textures[t1], Is.SameAs(texture1)); Assert.That(device.Textures[t2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } #if WINDOWSDX || DESKTOPGL [Test] public void NewSyntaxEffectPassShouldSetTexturesAndNotSamplers() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.LinearWrap; SamplerState sampler1 = SamplerState.LinearWrap; string effectName = "NewSyntax_t0t1"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Texture0"].SetValue(texture0); effect.Parameters["Texture1"].SetValue(texture1); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void NewSyntaxEffectPassShouldSetTexturesAndSamplers() { GraphicsDevice device = game.GraphicsDevice; // Reset Samplers and Textures for (int i = 0; i < 16; i++) { device.Textures[i] = null; device.SamplerStates[i] = SamplerState.LinearWrap; } Texture2D texture0 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(device, 1, 1, false, SurfaceFormat.Color); texture0.Name = "texture0"; texture1.Name = "texture1"; SamplerState sampler0 = SamplerState.PointWrap; SamplerState sampler1 = SamplerState.PointClamp; #if XNA sampler0 = null; sampler1 = null; #endif string effectName = "NewSyntax_s0s1t0t1"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif effect.Parameters["Texture0"].SetValue(texture0); effect.Parameters["Texture1"].SetValue(texture1); EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Assert.That(device.Textures[0], Is.SameAs(texture0)); Assert.That(device.Textures[1], Is.SameAs(texture1)); Assert.That(device.Textures[2], Is.Null); Assert.That(IsSamplerEqual(device.SamplerStates[0], sampler0)); Assert.That(IsSamplerEqual(device.SamplerStates[1], sampler1)); Assert.That(device.SamplerStates[2], Is.SameAs(SamplerState.LinearWrap)); effect.Dispose(); texture1.Dispose(); texture0.Dispose(); } [Test] public void ShouldCompileComputeShader() { GraphicsDevice device = game.GraphicsDevice; string effectName = "ComputeShader"; byte[] effectCode = AssetTestUtility.CompileEffect(device, Paths.RawEffect(effectName)); Effect effect =new Effect(device, effectCode); } [Test] public void ShouldSetAndGetOptimizedMatrix() { GraphicsDevice device = game.GraphicsDevice; string effectName = "OptimizedMatrix"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif EffectParameter colorMatrixParam = effect.Parameters["ColorMatrix"]; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Matrix mtx1 = new Matrix( 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44 ); Matrix mtx2 = colorMatrixParam.GetValueMatrix(); Assert.That(mtx2, Is.EqualTo(mtx1)); Matrix mtx3 = new Matrix( 211, 212, 213, 214, 221, 222, 223, 224, 231, 232, 233, 234, 241, 242, 243, 244 ); colorMatrixParam.SetValue(mtx3); Matrix mtx4 = colorMatrixParam.GetValueMatrix(); Assert.That(mtx4, Is.EqualTo(mtx3)); effect.Dispose(); } [Test] public void ShouldSetAndGetOptimizedMatrixArray() { GraphicsDevice device = game.GraphicsDevice; string effectName = "OptimizedMatrixArray"; #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(device, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif EffectParameter colorMatrixParam = effect.Parameters["ColorsMatrix"]; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Matrix mtx0 = new Matrix( 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44 ); Matrix mtx1 = new Matrix( 211, 212, 213, 214, 221, 222, 223, 224, 231, 232, 233, 234, 241, 242, 243, 244 ); Matrix[] mtxArrayA = new Matrix[2] { mtx0, mtx1 }; colorMatrixParam.SetValue(mtxArrayA); Matrix[] mtxArrayB = colorMatrixParam.GetValueMatrixArray(2); Assert.That(mtxArrayA[0], Is.EqualTo(mtxArrayB[0])); Assert.That(mtxArrayA[1], Is.EqualTo(mtxArrayB[1])); effect.Dispose(); } #endif } } ================================================ FILE: Tests/Framework.Graphics/GraphicsAdapterTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { class GraphicsAdapterTest { private static bool Equals(DisplayMode m1, DisplayMode m2) { return m1.Width == m2.Width && m1.Height == m2.Height && m1.Format == m2.Format && m1.AspectRatio == m2.AspectRatio && m1.TitleSafeArea == m2.TitleSafeArea; } [Test] public static void Adapters() { var adapters = GraphicsAdapter.Adapters; Assert.IsNotNull(adapters); Assert.GreaterOrEqual(adapters.Count, 1); var defaultAdapterCount = 0; foreach (var adapter in adapters) { Assert.IsNotNull(adapter); if (adapter.IsDefaultAdapter) defaultAdapterCount++; Assert.LessOrEqual(defaultAdapterCount, 1); Assert.That(adapter.DeviceName, Is.Not.Null.Or.Empty); Assert.That(adapter.Description, Is.Not.Null.Or.Empty); Assert.AreNotEqual(0, adapter.DeviceId); Assert.AreNotEqual(IntPtr.Zero, adapter.MonitorHandle); Assert.AreNotEqual(0, adapter.VendorId); Assert.AreNotEqual(adapter.SubSystemId, 0); Assert.GreaterOrEqual(adapter.Revision, 0); Assert.IsNotNull(adapter.CurrentDisplayMode); Assert.IsNotNull(adapter.SupportedDisplayModes); Assert.GreaterOrEqual(adapter.SupportedDisplayModes.Count(), 1); Assert.AreEqual(1, adapter.SupportedDisplayModes.Count(m => Equals(m, adapter.CurrentDisplayMode))); // Seems like XNA treats aspect ratios above 16:10 as wide screen. A 1680x1050 display (exactly 16:10) was considered not to be wide screen. // KNI considers ratios equal or greater than 16:10 to be wide screen. const float minWideScreenAspect = 16.0f / 10.0f; #if XNA var isWidescreen = adapter.CurrentDisplayMode.AspectRatio > minWideScreenAspect; #else var isWidescreen = adapter.CurrentDisplayMode.AspectRatio >= minWideScreenAspect; #endif Assert.AreEqual(isWidescreen, adapter.IsWideScreen); foreach (var mode in adapter.SupportedDisplayModes) { Assert.Greater(mode.Width, 0); Assert.LessOrEqual(mode.Width, 3840); Assert.Greater(mode.Height, 0); Assert.LessOrEqual(mode.Height, 3840); var aspect = mode.Width / (float)mode.Height; Assert.AreEqual(aspect, mode.AspectRatio); Assert.GreaterOrEqual((int)mode.Format, 0); Assert.GreaterOrEqual(mode.TitleSafeArea.Left, 0); Assert.GreaterOrEqual(mode.TitleSafeArea.Top, 0); Assert.Less(mode.TitleSafeArea.Left, mode.TitleSafeArea.Right); Assert.Less(mode.TitleSafeArea.Top, mode.TitleSafeArea.Bottom); Assert.LessOrEqual(mode.TitleSafeArea.Width, mode.Width); Assert.LessOrEqual(mode.TitleSafeArea.Height, mode.Height); } } } [Test] public static void DefaultAdapter() { var adapter = GraphicsAdapter.DefaultAdapter; Assert.IsNotNull(adapter); Assert.IsTrue(adapter.IsDefaultAdapter); Assert.Contains(adapter, GraphicsAdapter.Adapters); } [TestCase(GraphicsProfile.Reach, SurfaceFormat.Color, SurfaceFormat.Color, true)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Color, SurfaceFormat.Color, true)] // unsupported renderTarget formats [TestCase(GraphicsProfile.Reach, SurfaceFormat.Alpha8, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Alpha8, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt3, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt3, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt5, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt5, SurfaceFormat.Color, false)] #if !XNA [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1a, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1a, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color, false)] #endif [TestCase(GraphicsProfile.Reach, SurfaceFormat.NormalizedByte2, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.NormalizedByte2, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.NormalizedByte4, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.NormalizedByte4, SurfaceFormat.Color, false)] // non-Reach formats [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfSingle, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfSingle, SurfaceFormat.HalfSingle, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfVector2, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector2, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.HalfVector4, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HalfVector4, SurfaceFormat.HalfVector4, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.HdrBlendable, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.HdrBlendable, SurfaceFormat.HdrBlendable, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rg32, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rg32, SurfaceFormat.Rg32, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rgba1010102, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rgba1010102, SurfaceFormat.Rgba1010102, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Rgba64, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Rgba64, SurfaceFormat.Rgba64, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Single, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Single, SurfaceFormat.Single, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Vector2, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Vector2, SurfaceFormat.Vector2, true)] [TestCase(GraphicsProfile.Reach, SurfaceFormat.Vector4, SurfaceFormat.Color, false)] [TestCase(GraphicsProfile.HiDef, SurfaceFormat.Vector4, SurfaceFormat.Vector4, true)] public static void QueryRenderTargetFormat_preferredSurface(GraphicsProfile graphicsProfile, SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat, bool expectedIsSupported) { var adapter = GraphicsAdapter.DefaultAdapter; SurfaceFormat selectedFormat; DepthFormat selectedDepthFormat; int selectedMultiSampleCount; bool isSupported = adapter.QueryRenderTargetFormat(graphicsProfile, preferredSurfaceFormat, DepthFormat.None, 0, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount); Assert.AreEqual(isSupported, expectedIsSupported); Assert.AreEqual(selectedFormat, expectedSurfaceFormat); Assert.AreEqual(selectedDepthFormat, DepthFormat.None); Assert.AreEqual(selectedMultiSampleCount, 0); } } } ================================================ FILE: Tests/Framework.Graphics/GraphicsDeviceManagerTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class GraphicsDeviceManagerTest { [Test] public void DefaultParameterValidation() { var game = new Game(); var gdm = new GraphicsDeviceManager(game); // TODO: Some of these defaults will be different // per-platform... we will #if those cases in here // as we encounter them in the future. Assert.AreEqual(800, gdm.PreferredBackBufferWidth); Assert.AreEqual(480, gdm.PreferredBackBufferHeight); Assert.AreEqual(SurfaceFormat.Color, gdm.PreferredBackBufferFormat); Assert.AreEqual(DepthFormat.Depth24, gdm.PreferredDepthStencilFormat); Assert.False(gdm.IsFullScreen); Assert.False(gdm.PreferMultiSampling); Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile); Assert.True(gdm.SynchronizeWithVerticalRetrace); Assert.Null(gdm.GraphicsDevice); Assert.AreEqual(DisplayOrientation.Default, gdm.SupportedOrientations); game.Dispose(); } [Test] public void InitializeEventCount() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var resettingCount = 0; var resetCount = 0; var preparingCount = 0; var createdCount = 0; var devDispCount = 0; var dispCount = 0; gdm.DeviceResetting += (s, a) => resettingCount++; gdm.DeviceReset += (s, a) => resetCount++; gdm.PreparingDeviceSettings += (s, a) => preparingCount++; gdm.DeviceCreated += (s, a) => createdCount++; gdm.DeviceDisposing += (s, a) => devDispCount++; gdm.Disposed += (s, a) => dispCount++; game.InitializeOnly(); Assert.AreEqual(0, resettingCount); Assert.AreEqual(0, resetCount); Assert.AreEqual(1, preparingCount); Assert.AreEqual(1, createdCount); Assert.AreEqual(0, devDispCount); Assert.AreEqual(0, dispCount); game.Dispose(); } [Test] public void DoNotModifyPresentationParametersDirectly() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); game.InitializeWith += (sender, args) => { var gd = game.GraphicsDevice; var oldpp = gd.PresentationParameters; gdm.PreferredBackBufferWidth = 100; gdm.ApplyChanges(); var newpp = gd.PresentationParameters; Assert.AreNotSame(oldpp, newpp); }; game.InitializeOnly(); game.Dispose(); } [Test] public void PreparingDeviceSettings() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var count = 0; gdm.PreparingDeviceSettings += (sender, args) => { Assert.NotNull(args.GraphicsDeviceInformation); Assert.NotNull(args.GraphicsDeviceInformation.Adapter); Assert.AreEqual(GraphicsProfile.Reach, args.GraphicsDeviceInformation.GraphicsProfile); var pp = args.GraphicsDeviceInformation.PresentationParameters; Assert.NotNull(pp); Assert.AreEqual(800, pp.BackBufferWidth); Assert.AreEqual(480, pp.BackBufferHeight); Assert.AreEqual(SurfaceFormat.Color, pp.BackBufferFormat); Assert.AreEqual(DepthFormat.Depth24, pp.DepthStencilFormat); Assert.False(pp.IsFullScreen); Assert.AreEqual(PresentInterval.One, pp.PresentationInterval); Assert.AreEqual(new Rectangle(0, 0, 800, 480), pp.Bounds); Assert.AreNotEqual(IntPtr.Zero, pp.DeviceWindowHandle); Assert.AreEqual(DisplayOrientation.Default, pp.DisplayOrientation); Assert.AreEqual(RenderTargetUsage.DiscardContents, pp.RenderTargetUsage); Assert.AreEqual(0, pp.MultiSampleCount); count++; }; game.InitializeOnly(); Assert.AreEqual(1, count); game.Dispose(); } [Test] public void PreparingDeviceSettingsEventChangeGraphicsProfile() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile); game.InitializeOnly(); var invoked = false; gdm.PreparingDeviceSettings += (s, a) => { a.GraphicsDeviceInformation.GraphicsProfile = GraphicsProfile.HiDef; invoked = true; }; // make sure that changing the graphics profile creates a new device and does not reset var creationCount = 0; gdm.DeviceCreated += (sender, args) => creationCount++; var resetCount = 0; gdm.DeviceReset += (sender, args) => resetCount++; // make a change so ApplyChanges actually does something gdm.PreferredBackBufferWidth = 100; gdm.ApplyChanges(); // assert that PreparingDeviceSettings is invoked, but the GraphicsProfile of the gdm did not change Assert.That(invoked); Assert.AreEqual(GraphicsProfile.Reach, gdm.GraphicsProfile); Assert.AreEqual(GraphicsProfile.HiDef, gdm.GraphicsDevice.GraphicsProfile); Assert.AreEqual(creationCount, 1); Assert.AreEqual(resetCount, 0); game.Dispose(); } [Test] public void PreparingDeviceSettingsArgsPresentationParametersAreApplied() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var invoked = false; game.PreInitializeWith += (sender, args) => { Assert.AreEqual(RenderTargetUsage.DiscardContents, gdm.GraphicsDevice.PresentationParameters.RenderTargetUsage); gdm.PreparingDeviceSettings += (s, a) => { a.GraphicsDeviceInformation.GraphicsProfile = GraphicsProfile.HiDef; a.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents; invoked = true; }; }; game.InitializeOnly(); // make a change so ApplyChanges actually does something gdm.PreferredBackBufferWidth = 100; gdm.ApplyChanges(); Assert.That(invoked); Assert.AreEqual(RenderTargetUsage.PreserveContents, gdm.GraphicsDevice.PresentationParameters.RenderTargetUsage); game.Dispose(); } [Test] public void PreparingDeviceSettingsArgsThrowsWhenPPSetToNull() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var invoked = false; gdm.PreparingDeviceSettings += (s, a) => { a.GraphicsDeviceInformation.PresentationParameters = null; invoked = true; }; Assert.Throws(Is.InstanceOf(typeof(Exception)), () => game.InitializeOnly()); Assert.That(invoked); game.Dispose(); } [Test] public void ApplyChangesReturnsWhenNoSetterCalled() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var invoked = false; game.PreInitializeWith += (sender, args) => { gdm.PreparingDeviceSettings += (s, a) => { invoked = true; }; }; game.InitializeOnly(); gdm.ApplyChanges(); Assert.IsFalse(invoked); // this proves that XNA does not check for equality, but just registers that setters are used gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth; gdm.ApplyChanges(); Assert.That(invoked); game.Dispose(); } [Test] public void ApplyChangesInvokesPreparingDeviceSettings() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var invoked = false; game.InitializeWith += (sender, args) => { gdm.PreparingDeviceSettings += (s, a) => { invoked = true; }; }; game.InitializeOnly(); gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth; gdm.ApplyChanges(); Assert.That(invoked); game.Dispose(); } [Test] public void ApplyChangesResetsDevice() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var count = 0; gdm.DeviceReset += (sender, args) => count++; game.InitializeOnly(); gdm.PreferredBackBufferWidth = gdm.PreferredBackBufferWidth; gdm.ApplyChanges(); Assert.AreEqual(1, count); game.Dispose(); } [Test] public void DeviceDisposingInvokedAfterDeviceDisposed() { var game = new TestGameBase(); var gdm = new GraphicsDeviceManager(game); var invoked = false; gdm.DeviceDisposing += (sender, args) => { invoked = true; Assert.IsTrue(gdm.GraphicsDevice.IsDisposed); }; game.InitializeOnly(); Assert.IsFalse(gdm.GraphicsDevice.IsDisposed); Assert.IsFalse(invoked); // change the graphics profile so the current device needs to be disposed gdm.GraphicsProfile = GraphicsProfile.HiDef; gdm.ApplyChanges(); Assert.IsTrue(invoked); game.Dispose(); } } internal class GraphicsDeviceManagerFixtureTest : GraphicsDeviceTestFixtureBase { [Test] public void ResettingDeviceTriggersResetEvents() { var resetCount = 0; var resettingCount = 0; gdm.DeviceReset += (sender, args) => { resetCount++; }; gdm.DeviceResetting += (sender, args) => { resettingCount++; }; gd.Reset(); Assert.AreEqual(1, resetCount); Assert.AreEqual(1, resettingCount); } [Test] public void NewDeviceDoesNotTriggerReset() { var resetCount = 0; var devLostCount = 0; gd.DeviceReset += (sender, args) => { resetCount++; }; gd.DeviceLost += (sender, args) => { devLostCount++; }; // changing the profile requires creating a new device gdm.GraphicsProfile = GraphicsProfile.Reach; gdm.ApplyChanges(); Assert.AreEqual(0, resetCount); Assert.AreEqual(0, devLostCount); } [Test] public void ClientSizeChangedOnDeviceReset() { var count = 0; game.Window.ClientSizeChanged += (sender, args) => { count++; }; gdm.GraphicsProfile = GraphicsProfile.HiDef; gdm.ApplyChanges(); Assert.AreEqual(0, count); gdm.PreferredBackBufferWidth = 100; gdm.ApplyChanges(); Assert.AreEqual(0, count); // changing the profile will trigger a device reset gdm.GraphicsProfile = GraphicsProfile.Reach; gdm.ApplyChanges(); // not even that will trigger the event Assert.AreEqual(0, count); } [Test] public void MultiSampleCountRoundsDown() { gdm.PreferMultiSampling = true; gdm.PreparingDeviceSettings += (sender, args) => { var pp = args.GraphicsDeviceInformation.PresentationParameters; pp.MultiSampleCount = 3; }; gdm.ApplyChanges(); Assert.AreEqual(2, gd.PresentationParameters.MultiSampleCount); } [TestCase(false)] [TestCase(true)] public void MSAAEnabled(bool enabled) { gdm.PreferMultiSampling = enabled; gdm.GraphicsProfile = GraphicsProfile.HiDef; // first hook an event to do some checks gdm.PreparingDeviceSettings += (sender, args) => { var pp = args.GraphicsDeviceInformation.PresentationParameters; if (!enabled) Assert.AreEqual(0, pp.MultiSampleCount); else Assert.Less(0, pp.MultiSampleCount); }; // then create a GraphicsDevice gdm.ApplyChanges(); var tex = new Texture2D(gd, 1, 1); tex.SetData(new[] { Color.White.PackedValue }); var spriteBatch = new SpriteBatch(gd); if (enabled) { var pp = gd.PresentationParameters; Assert.Less(0, pp.MultiSampleCount); Assert.AreNotEqual(1024, pp.MultiSampleCount); } gd.Clear(Color.Black); spriteBatch.Begin(); spriteBatch.Draw(tex, new Vector2(800 / 2, 480 / 2), null, Color.White, MathHelper.ToRadians(45), new Vector2(0.5f), 200, SpriteEffects.None, 0); spriteBatch.End(); var data = new Color[800 * 480]; gd.GetBackBufferData(data); float black = 0; float white = 0; float grey = 0; foreach (var c in data) { if (c == Color.Black) ++black; else if (c == Color.White) ++white; else if (c.R == c.G && c.G == c.B && c.R > 0 && c.R < 255) ++grey; } // General percentage of black and white pixels we should be getting. black /= data.Length; white /= data.Length; Assert.Less(black, 0.9f); Assert.Greater(black, 0.8f); Assert.Less(white, 0.2f); Assert.Greater(white, 0.1f); // If enabled we should have at least a few grey pixels // else we should have zero grey pixels. grey /= data.Length; if (!enabled) Assert.AreEqual(0, grey); else { Assert.Less(grey, 0.01f); Assert.Greater(grey, 0.001f); } tex.Dispose(); spriteBatch.Dispose(); } [Test] public void UnsupportedMultiSampleCountDoesNotThrowException() { gdm.PreferMultiSampling = true; gdm.PreparingDeviceSettings += (sender, args) => { var pp = args.GraphicsDeviceInformation.PresentationParameters; pp.MultiSampleCount = 33; // Set too high. In DX11 is max 32. }; Assert.DoesNotThrow(()=>gdm.ApplyChanges(), "GraphicDeviceManager.ApplyChanges()"); Assert.DoesNotThrow(() => { var pp = gdm.GraphicsDevice.PresentationParameters.Clone(); pp.MultiSampleCount = 10000; // Set too high. In DX11 is max 32. gdm.GraphicsDevice.Reset(pp); }, "GraphicsDevice.Reset(PresentationParameters)"); } #if WINDOWSDX [Test] public void TooHighMultiSampleCountClampedToMaxSupported() { int maxMultiSampleCount = ((IPlatformGraphicsDevice)gd).Strategy.ToConcrete().GetMaxMultiSampleCount(((IPlatformGraphicsDevice)gd).Strategy.PresentationParameters.BackBufferFormat); gdm.PreferMultiSampling = true; gdm.PreparingDeviceSettings += (sender, args) => { var pp1 = args.GraphicsDeviceInformation.PresentationParameters; pp1.MultiSampleCount = maxMultiSampleCount + 1; }; gdm.ApplyChanges(); Assert.AreEqual (maxMultiSampleCount, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount); // Test again for GraphicsDevice.Reset(PresentationParameters) var pp2 = gdm.GraphicsDevice.PresentationParameters.Clone(); pp2.MultiSampleCount = 0; gdm.GraphicsDevice.Reset(pp2); Assert.AreEqual (0, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount); var pp3 = gdm.GraphicsDevice.PresentationParameters.Clone(); pp3.MultiSampleCount = 500; // Set too high. max is maxMultiSampleCount gdm.GraphicsDevice.Reset(pp3); Assert.AreEqual (maxMultiSampleCount, gdm.GraphicsDevice.PresentationParameters.MultiSampleCount); } #endif } } ================================================ FILE: Tests/Framework.Graphics/GraphicsDeviceTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.ContentPipeline; using NUnit.Framework; using Microsoft.Xna.Platform.Graphics; #if DESKTOPGL using Microsoft.Xna.Platform.Graphics.OpenGL; #endif namespace Kni.Tests.Graphics { [TestFixture] internal class GraphicsDeviceTest : GraphicsDeviceTestFixtureBase { [Test] public void BlendFactor() { Assert.AreEqual(Color.White, gd.BlendFactor); var blend = new BlendState { BlendFactor = Color.Crimson }; gd.BlendState = blend; Assert.AreEqual(Color.Crimson, gd.BlendFactor); gd.BlendFactor = Color.CornflowerBlue; Assert.AreEqual(Color.Crimson, gd.BlendState.BlendFactor); Assert.AreEqual(Color.CornflowerBlue, gd.BlendFactor); blend.Dispose(); } [Test] public void CtorAdapterNull() { Assert.Throws(() => { PresentationParameters pp = new PresentationParameters(); pp.BackBufferWidth = 800; pp.BackBufferWidth = 480; new GraphicsDevice(null, GraphicsProfile.Reach, pp); }); } [Test] public void CtorPresentationParametersNull() { Assert.Throws(() => { PresentationParameters pp = null; new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.Reach, pp); }); } [Test] public void DisposedWhenDisposingInvoked() { var count = 0; gd.Disposing += (sender, args) => { Assert.IsTrue(gd.IsDisposed); count++; }; gd.Dispose(); Assert.AreEqual(1, count); // Disposing should not be invoked more than once gd.Dispose(); Assert.AreEqual(1, count); } [Test] public void ResetDoesNotTriggerDeviceLost() { // TODO figure out exactly when a device is lost var resetCount = 0; var devLostCount = 0; gd.DeviceReset += (sender, args) => { resetCount++; Assert.AreEqual(0, devLostCount); }; gd.DeviceLost += (sender, args) => { devLostCount++; Assert.AreEqual(1, resetCount); }; gd.Reset(); Assert.AreEqual(1, resetCount); Assert.AreEqual(0, devLostCount); } [Test] public void ResetDoesNotClearState() { gd.RasterizerState = RasterizerState.CullNone; gd.BlendState = BlendState.NonPremultiplied; gd.DepthStencilState = DepthStencilState.None; gd.SamplerStates[0] = SamplerState.PointClamp; var vbb = new VertexBufferBinding(new VertexBuffer(gd, VertexPositionColor.VertexDeclaration, 5, BufferUsage.WriteOnly)); gd.SetVertexBuffers(vbb); gd.Reset(); Assert.AreEqual(RasterizerState.CullNone, gd.RasterizerState); Assert.AreEqual(BlendState.NonPremultiplied, gd.BlendState); Assert.AreEqual(DepthStencilState.None, gd.DepthStencilState); Assert.AreEqual(SamplerState.PointClamp, gd.SamplerStates[0]); // TODO GetVertexBuffers is not implemented in MG #if XNA Assert.AreEqual(vbb, gd.GetVertexBuffers()[0]); #endif vbb.VertexBuffer.Dispose(); } [Test, Ignore("Make sure dynamic graphics resources are notified when graphics device is lost")] public void ContentLostResources() { // https://blogs.msdn.microsoft.com/shawnhar/2007/12/12/virtualizing-the-graphicsdevice-in-xna-game-studio-2-0/ var rt = new RenderTarget2D(gdm.GraphicsDevice, 5, 5); var vb = new DynamicVertexBuffer(gd, VertexPositionColor.VertexDeclaration, 1, BufferUsage.None); var ib = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, 1, BufferUsage.None); var rtc = new RenderTargetCube(gd, 1, false, SurfaceFormat.Color, DepthFormat.Depth16); gd.Reset(); Assert.IsTrue(rt.IsContentLost); Assert.IsFalse(rt.IsDisposed); Assert.IsTrue(vb.IsContentLost); Assert.IsFalse(vb.IsDisposed); Assert.IsTrue(ib.IsContentLost); Assert.IsFalse(ib.IsDisposed); Assert.IsTrue(rtc.IsContentLost); Assert.IsFalse(rtc.IsDisposed); rt.Dispose(); vb.Dispose(); ib.Dispose(); rtc.Dispose(); } [Test] public void ResetWindowHandleNullThrowsException() { Assert.Throws(() => { PresentationParameters pp = new PresentationParameters(); pp.BackBufferWidth = 800; pp.BackBufferWidth = 480; gd.Reset(pp); }); } [Test] public void Clear() { var colors = new Color [] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Indigo, Color.Violet }; PrepareFrameCapture(colors.Length); foreach (var color in colors) { gd.Clear(color); SubmitFrame(); } CheckFrames(); } [Test] public void DrawPrimitivesParameterValidation() { var vertexBuffer = new VertexBuffer( gd, VertexPositionColorTexture.VertexDeclaration, 3, BufferUsage.None); // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)); new BasicEffect(gd).CurrentTechnique.Passes[0].Apply(); // No vertexBuffer. Assert.Throws(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)); gd.SetVertexBuffer(vertexBuffer); // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)); // vertexStart too small / large. Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, -1, 1)); Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 3, 1)); // primitiveCount too small / large. Assert.Throws(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 0)); Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2)); // vertexStart + primitiveCount too large. Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 1, 1)); vertexBuffer.Dispose(); } [Test] public void DrawIndexedPrimitivesParameterValidation() { var vertexBuffer = new VertexBuffer( gd, VertexPositionColorTexture.VertexDeclaration, 3, BufferUsage.None); var indexBuffer = new IndexBuffer( gd, IndexElementSize.SixteenBits, 3, BufferUsage.None); // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1)); new BasicEffect(gd).CurrentTechnique.Passes[0].Apply(); // No vertexBuffer. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1)); gd.SetVertexBuffer(vertexBuffer); // No indexBuffer. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1)); gd.Indices = indexBuffer; // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1)); // XNA doesn't do upfront parameter validation on the Assert.DoesNotThrow tests, // but it *sometimes* fails later with an AccessViolationException, so we can't actually // run these tests as part of the XNA test suite. // baseVertex too small / large. #if !XNA Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, -1, 0, 3, 0, 1)); Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 3, 0, 3, 0, 1)); #endif // startIndex too small / large. #if !XNA Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, -1, 1)); Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 3, 1)); #endif // primitiveCount too small / large. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 0)); #if !XNA Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 2)); #endif // startIndex + primitiveCount too large. #if !XNA Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 1, 1)); #endif vertexBuffer.Dispose(); indexBuffer.Dispose(); } // This overload of DrawIndexedPrimitives is not supported on XNA. #if !XNA [Test] public void DrawIndexedPrimitivesParameterValidation2() { var vertexBuffer = new VertexBuffer( gd, VertexPositionColorTexture.VertexDeclaration, 3, BufferUsage.None); var indexBuffer = new IndexBuffer( gd, IndexElementSize.SixteenBits, 3, BufferUsage.None); // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1)); var effect = new BasicEffect(gd); effect.CurrentTechnique.Passes[0].Apply(); // No vertexBuffer. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1)); gd.SetVertexBuffer(vertexBuffer); // No indexBuffer. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1)); gd.Indices = indexBuffer; // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 1)); // baseVertex too small / large. Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, -1, 0, 1)); Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 3, 0, 1)); // startIndex too small / large. Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, -1, 1)); Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 3, 1)); // primitiveCount too small / large. Assert.Throws(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 0)); Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 2)); // startIndex + primitiveCount too large. Assert.DoesNotThrow(() => gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 1, 1)); effect.Dispose(); vertexBuffer.Dispose(); indexBuffer.Dispose(); } #endif #if XNA || WINDOWSDX [Test] public void DrawInstancedPrimitivesParameterValidation() { var vertexBuffer = new VertexBuffer( gd, VertexPositionColorTexture.VertexDeclaration, 3, BufferUsage.None); VertexDeclaration instanceVertexDeclaration = new VertexDeclaration ( new VertexElement(0, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 0), new VertexElement(16, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 1), new VertexElement(32, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 2), new VertexElement(48, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 3) ); var instanceBuffer = new VertexBuffer( gd, instanceVertexDeclaration, 10, BufferUsage.None); var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, 3, BufferUsage.None); // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10)); Effect effect = AssetTestUtility.LoadEffect(content, "Instancing"); effect.Techniques[0].Passes[0].Apply(); // No vertexBuffers. Assert.Throws(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10)); gd.SetVertexBuffers( new VertexBufferBinding(vertexBuffer, 0, 0), new VertexBufferBinding(instanceBuffer, 0, 1)); // No indexBuffer. Assert.Throws(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10)); gd.Indices = indexBuffer; // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 1, 10)); // primitiveCount too small / large. Assert.Throws(() => gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 3, 0, 0, 10)); effect.Dispose(); vertexBuffer.Dispose(); instanceBuffer.Dispose(); indexBuffer.Dispose(); } [Test] public void DrawInstancedPrimitivesVisualTest() { VertexBuffer vertexBuffer = null; IndexBuffer indexBuffer = null; VertexBuffer instanceVertexBuffer = null; Matrix[] worldTransforms = null; EffectPass pass = null; // Create vertex and index buffer for a quad. var vertices = new[] { new VertexPositionTexture(new Vector3(-1, 1, 0), new Vector2(0, 0)), new VertexPositionTexture(new Vector3( 1, 1, 0), new Vector2(1, 0)), new VertexPositionTexture(new Vector3(-1, -1, 0), new Vector2(0, 1)), new VertexPositionTexture(new Vector3( 1, -1, 0), new Vector2(1, 1)), }; vertexBuffer = new VertexBuffer( gd, VertexPositionTexture.VertexDeclaration, 4, BufferUsage.None); vertexBuffer.SetData(vertices); var indices = new ushort[] { 0, 1, 2, 1, 3, 2 }; indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, 6, BufferUsage.None); indexBuffer.SetData(indices); // Create vertex buffer with instance data. worldTransforms = new Matrix[8 * 4]; for (int i = 0; i < worldTransforms.Length; i++) { worldTransforms[i] = Matrix.CreateScale(0.4f) * Matrix.CreateRotationZ(0.05f * i) * Matrix.CreateTranslation(-3.5f + (i % 8), -1.5f + (int)(i / 8), 0); } VertexDeclaration instanceVertexDeclaration = new VertexDeclaration ( new VertexElement(0, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 0), new VertexElement(16, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 1), new VertexElement(32, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 2), new VertexElement(48, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 3) ); instanceVertexBuffer = new VertexBuffer(gd, instanceVertexDeclaration, worldTransforms.Length, BufferUsage.None); instanceVertexBuffer.SetData(worldTransforms); var view = Matrix.CreateLookAt(new Vector3(0, 0, 6), new Vector3(0, 0, 0), Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView( MathHelper.PiOver4, gd.Viewport.AspectRatio, 0.1f, 100); Effect effect = AssetTestUtility.LoadEffect(content, "Instancing"); effect.Parameters["View"].SetValue(view); effect.Parameters["Projection"].SetValue(projection); pass = effect.Techniques[0].Passes[0]; PrepareFrameCapture(); gd.Clear(Color.CornflowerBlue); gd.SetVertexBuffers( new VertexBufferBinding(vertexBuffer, 0, 0), new VertexBufferBinding(instanceVertexBuffer, 0, 1)); gd.Indices = indexBuffer; pass.Apply(); gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, 6, 0, 2, worldTransforms.Length); // There is a minor difference in the rasterization between XNA and DirectX. Similarity = 0.98f; CheckFrames(); effect.Dispose(); vertexBuffer.Dispose(); instanceVertexBuffer.Dispose(); indexBuffer.Dispose(); } #endif [Test] public void DrawUserPrimitivesParameterValidation() { var vertexDataNonEmpty = new[] { new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero), new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero), new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero) }; var vertexDataEmpty = new VertexPositionColorTexture[0]; // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1)); var effect = new BasicEffect(gd); effect.CurrentTechnique.Passes[0].Apply(); // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1)); // Null vertexData. DoDrawUserPrimitivesAsserts(null, 0, 1, d => Assert.Throws(d)); // Empty vertexData. DoDrawUserPrimitivesAsserts(vertexDataEmpty, 0, 1, d => Assert.Throws(d)); // vertexOffset too small / large. DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, -1, 1, d => Assert.Throws(d)); DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 3, 1, d => Assert.Throws(d)); // primitiveCount too small / large. DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 0, 0, d => Assert.Throws(d)); DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 0, 2, d => Assert.Throws(d)); // vertexOffset + primitiveCount too large. DoDrawUserPrimitivesAsserts(vertexDataNonEmpty, 1, 1, d => Assert.Throws(d)); // Null vertexDeclaration. Assert.Throws(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 1, null)); effect.Dispose(); } private void DoDrawUserPrimitivesAsserts(VertexPositionColorTexture[] vertexData, int vertexOffset, int primitiveCount, Action assertMethod) { assertMethod(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, primitiveCount)); assertMethod(() => gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration)); } [Test] public void DrawUserIndexedPrimitivesParameterValidation() { var vertexDataNonEmpty = new[] { new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero), new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero), new VertexPositionColorTexture(Vector3.Zero, Color.White, Vector2.Zero) }; var vertexDataEmpty = new VertexPositionColorTexture[0]; var indexDataNonEmpty = new short[] { 0, 1, 2 }; var indexDataEmpty = new short[0]; // No vertex shader or pixel shader. Assert.Throws(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1)); var effect = new BasicEffect(gd); effect.CurrentTechnique.Passes[0].Apply(); // Success - "normal" usage. Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1)); // Failure cases. // Null vertexData. DoDrawUserIndexedPrimitivesAsserts(null, 0, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); // Empty vertexData. DoDrawUserIndexedPrimitivesAsserts(vertexDataEmpty, 0, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); // vertexOffset too small / large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, -1, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 3, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); // numVertices too small / large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 0, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 4, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); // vertexOffset + numVertices too large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 1, 3, indexDataNonEmpty, 0, 1, d => Assert.Throws(d)); // Null indexData. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, null, 0, 1, d => Assert.Throws(d)); // Empty indexData. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataEmpty, 0, 1, d => Assert.Throws(d)); // indexOffset too small / large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, -1, 1, d => Assert.Throws(d)); DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 1, 1, d => Assert.Throws(d)); // primitiveCount too small / large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, -1, d => Assert.Throws(d)); DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 0, d => Assert.Throws(d)); DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 2, d => Assert.Throws(d)); // indexOffset + primitiveCount too large. DoDrawUserIndexedPrimitivesAsserts(vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 1, 1, d => Assert.Throws(d)); // Null vertexDeclaration. Assert.Throws(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, null)); // Smaller vertex stride in VertexDeclaration than in actual vertices. // XNA is inconsistent; in DrawUserIndexedPrimitives, it allows vertexStride to be less than the actual size of the data, // but in VertexBuffer.SetData, XNA requires vertexStride to greater than or equal to the actual size of the data. // Since we use a DynamicVertexBuffer to implement DrawUserIndexedPrimitives, we use the same validation in both places. // The same applies to DrawUserPrimitives. #if XNA Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, VertexPositionColor.VertexDeclaration)); Assert.DoesNotThrow(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty.Select(x => (int) x).ToArray(), 0, 1, VertexPositionColor.VertexDeclaration)); #else Assert.Throws(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty, 0, 1, VertexPositionColor.VertexDeclaration)); Assert.Throws(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexDataNonEmpty, 0, 3, indexDataNonEmpty.Select(x => (int) x).ToArray(), 0, 1, VertexPositionColor.VertexDeclaration)); #endif effect.Dispose(); } private void DoDrawUserIndexedPrimitivesAsserts(VertexPositionColorTexture[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, Action assertMethod) { assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount)); assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration)); var intIndexData = (indexData == null) ? null : indexData.Select(x => (int) x).ToArray(); assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, intIndexData, indexOffset, primitiveCount)); assertMethod(() => gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertexData, vertexOffset, numVertices, intIndexData, indexOffset, primitiveCount, VertexPositionColorTexture.VertexDeclaration)); } [Test] #if DESKTOPGL [Ignore("Vertex Textures are not implemented for OpenGL")] #endif public void VertexTexturesGetSet() { // TODO: The availability of vertex textures should depend on GraphicsProfile. #if XNA var supportedVertexTextureFormats = new[] { SurfaceFormat.Single, SurfaceFormat.Vector2, SurfaceFormat.Vector4, SurfaceFormat.HalfSingle, SurfaceFormat.HalfVector2, SurfaceFormat.HalfVector4, SurfaceFormat.HdrBlendable }; #else var supportedVertexTextureFormats = Enum.GetValues(typeof(SurfaceFormat)).Cast().ToArray(); #endif foreach (var format in Enum.GetValues(typeof(SurfaceFormat)).Cast()) { var texture = new Texture2D(gd, 4, 4, false, format); if (supportedVertexTextureFormats.Contains(format)) { gd.VertexTextures[0] = texture; var retrievedTexture = gd.VertexTextures[0]; Assert.That(retrievedTexture, Is.SameAs(texture)); } else { Assert.Throws(() => gd.VertexTextures[0] = texture); } } } private struct VertexPosition2 : IVertexType { public Vector2 Position; public static readonly VertexDeclaration VertexDeclaration = new VertexDeclaration( new VertexElement(0, VertexElementFormat.Vector2, VertexElementUsage.Position, 0)); VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } } [Test] #if DESKTOPGL [Ignore("Vertex Textures are not implemented for OpenGL")] #endif public void VertexTextureVisualTest() { // Implements an extremely simple terrain that reads from a heightmap in the vertex shader. PrepareFrameCapture(); const int heightMapSize = 64; var heightMapTexture = new Texture2D(gd, heightMapSize, heightMapSize, false, SurfaceFormat.Single); var heightMapData = new float[heightMapSize * heightMapSize]; for (var y = 0; y < heightMapSize; y++) for (var x = 0; x < heightMapSize; x++) heightMapData[(y * heightMapSize) + x] = (float) Math.Sin(x / 2.0f) + (float) Math.Sin(y / 3.0f); heightMapTexture.SetData(heightMapData); var viewMatrix = Matrix.CreateLookAt(new Vector3(32, 10, 60), new Vector3(32, 0, 30), Vector3.Up); var projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, gd.Viewport.AspectRatio, 1.0f, 100.0f); Effect effect = AssetTestUtility.LoadEffect(content, "VertexTextureEffect"); effect.Parameters["WorldViewProj"].SetValue(viewMatrix * projectionMatrix); effect.Parameters["HeightMapTexture"].SetValue(heightMapTexture); effect.Parameters["HeightMapSize"].SetValue((float) heightMapSize); effect.CurrentTechnique.Passes[0].Apply(); const int numVertices = heightMapSize * heightMapSize; var vertexBuffer = new VertexBuffer(gd, typeof(VertexPosition2), numVertices, BufferUsage.WriteOnly); var vertices = new VertexPosition2[numVertices]; for (var y = 0; y < heightMapSize; y++) for (var x = 0; x < heightMapSize; x++) vertices[(y * heightMapSize) + x] = new VertexPosition2 { Position = new Vector2(x, y) }; vertexBuffer.SetData(vertices); gd.SetVertexBuffer(vertexBuffer); const int numIndices = (heightMapSize - 1) * (heightMapSize - 1) * 2 * 3; var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, numIndices, BufferUsage.WriteOnly); var indexData = new short[numIndices]; var indexIndex = 0; for (short y = 0; y < heightMapSize - 1; y++) for (short x = 0; x < heightMapSize - 1; x++) { var baseIndex = (short) ((y * heightMapSize) + x); indexData[indexIndex++] = baseIndex; indexData[indexIndex++] = (short) (baseIndex + heightMapSize); indexData[indexIndex++] = (short) (baseIndex + 1); indexData[indexIndex++] = (short) (baseIndex + 1); indexData[indexIndex++] = (short) (baseIndex + heightMapSize); indexData[indexIndex++] = (short) (baseIndex + heightMapSize + 1); } indexBuffer.SetData(indexData); gd.Indices = indexBuffer; gd.RasterizerState = RasterizerState.CullNone; gd.Clear(Color.CornflowerBlue); gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, numVertices, 0, numIndices / 3); CheckFrames(); effect.Dispose(); vertexBuffer.Dispose(); indexBuffer.Dispose(); } [Test] #if DESKTOPGL [Ignore("Vertex samplers are not implemented for OpenGL")] #endif public void VertexSamplerStatesGetSet() { var samplerState = new SamplerState { Filter = TextureFilter.Point }; gd.VertexSamplerStates[0] = samplerState; var retrievedSamplerState = gd.VertexSamplerStates[0]; Assert.That(retrievedSamplerState, Is.SameAs(samplerState)); samplerState.Dispose(); } [Test] public void PresentInvalidOperationException() { // This should work else it means we had // some bad state to start this test! gd.Present(); // You can't call present with a RT set. var rt = new RenderTarget2D(gd, 100, 100); gd.SetRenderTarget(rt); Assert.Throws(() => gd.Present()); // Set the default RT and present works again. gd.SetRenderTarget(null); gd.Present(); // Cleanup. rt.Dispose(); } #if DESKTOPGL [Test] public void DifferentVboGetsSet() { var vb1 = new VertexBuffer(gd, VertexPosition.VertexDeclaration, 6, BufferUsage.None); var vb2 = new VertexBuffer(gd, VertexPosition.VertexDeclaration, 8, BufferUsage.None); var se = new SpriteEffect(gd); se.CurrentTechnique.Passes[0].Apply(); gd.SetVertexBuffer(vb1); gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2); var GL = ((IPlatformGraphicsContext) ((IPlatformGraphicsDevice)gd).Strategy.CurrentContext).Strategy.ToConcrete().GL; int vbo; GL.GetInteger(GetPName.ArrayBufferBinding, out vbo); Assert.AreEqual(((IPlatformVertexBuffer)vb1).Strategy.ToConcrete().GLVertexBuffer, vbo); gd.SetVertexBuffer(vb2); gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 2); GL.GetInteger(GetPName.ArrayBufferBinding, out vbo); Assert.AreEqual(((IPlatformVertexBuffer)vb2).Strategy.ToConcrete().GLVertexBuffer, vbo); se.Dispose(); vb1.Dispose(); vb2.Dispose(); } #endif private static Rectangle?[] BackBufferRects() { return new Rectangle?[] { null, new Rectangle(100, 100, 250, 250), }; } [TestCaseSource("BackBufferRects")] public void GetBackBufferData(Rectangle? rectangle) { gd.Clear(Color.CornflowerBlue); Rectangle rect; if (rectangle == null) rect = gd.Viewport.Bounds; else rect = rectangle.Value; var tex = content.Load(Paths.Texture("Surge")); var sb = new SpriteBatch(gd); sb.Begin(); sb.Draw(tex, new Rectangle(150, 150, 300, 300), Color.White); sb.End(); var buffer = new Color[rect.Width * rect.Height]; gd.GetBackBufferData(rect, buffer, 0, rect.Width * rect.Height); var backbufferTex = new Texture2D(gd, rect.Width, rect.Height); backbufferTex.SetData(buffer); PrepareFrameCapture(); gd.Clear(Color.Red); sb.Begin(); sb.Draw(backbufferTex, rect, Color.White); sb.End(); CheckFrames(); } } } ================================================ FILE: Tests/Framework.Graphics/IndexBufferTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using NUnit.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Graphics { [TestFixture] class IndexBufferTest: GraphicsDeviceTestFixtureBase { [Test] public void ShouldSetAndGetData() { var savedData = new short[] { 1, 2, 3, 4 }; var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); var readData = new short[4]; indexBuffer.GetData(readData, 0, 4); Assert.AreEqual(savedData, readData); indexBuffer.Dispose(); } [Test] public void ShouldSetAndGetData_elementCount() { var savedData = new short[] { 1, 2, 3, 4 }; var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); var readData = new short[4]; indexBuffer.GetData(readData, 0, 2); Assert.AreEqual(1, readData[0]); Assert.AreEqual(2, readData[1]); Assert.AreEqual(0, readData[2]); Assert.AreEqual(0, readData[3]); indexBuffer.Dispose(); } [Test] public void ShouldSetAndGetData_startIndex() { var savedData = new short[] { 1, 2, 3, 4 }; var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); var readData = new short[4]; indexBuffer.GetData(readData, 2, 2); Assert.AreEqual(0, readData[0]); Assert.AreEqual(0, readData[1]); Assert.AreEqual(1, readData[2]); Assert.AreEqual(2, readData[3]); indexBuffer.Dispose(); } [Test] public void ShouldSetAndGetData_offsetInBytes() { var savedData = new short[] { 1, 2, 3, 4 }; var indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); var readData = new short[2]; indexBuffer.GetData(sizeof(short) * 2, readData, 0, 2); Assert.AreEqual(3, readData[0]); Assert.AreEqual(4, readData[1]); indexBuffer.Dispose(); } struct TriangleIndices16 { public short A, B, C; public TriangleIndices16(short a, short b, short c) { this.A = a; this.B = b; this.C = c; } public int VertexStride { get { return (sizeof(short)) * 3; } } public override string ToString() { return String.Format("A:{0,4} B:{1,4} C:{2,4}", A, B, C); } } [Test] public void ShouldSetAndGetStructData() { short[] savedData = new short[] { 1, 2, 3, 4, 5, 6 }; IndexBuffer indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); TriangleIndices16[] readData = new TriangleIndices16[2]; indexBuffer.GetData(readData, 0, 2); Assert.AreEqual(savedData[0], readData[0].A); Assert.AreEqual(savedData[1], readData[0].B); Assert.AreEqual(savedData[2], readData[0].C); Assert.AreEqual(savedData[3], readData[1].A); Assert.AreEqual(savedData[4], readData[1].B); Assert.AreEqual(savedData[5], readData[1].C); indexBuffer.Dispose(); } [Test] public void ShouldSetStructAndGetData() { TriangleIndices16[] savedData = new TriangleIndices16[] { new TriangleIndices16(1,2,3), new TriangleIndices16(4, 5, 6) }; IndexBuffer indexBuffer = new IndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length*3, BufferUsage.None); indexBuffer.SetData(savedData); short[] readData = new short[6]; indexBuffer.GetData(readData, 0, 6); Assert.AreEqual(savedData[0].A, readData[0]); Assert.AreEqual(savedData[0].B, readData[1]); Assert.AreEqual(savedData[0].C, readData[2]); Assert.AreEqual(savedData[1].A, readData[3]); Assert.AreEqual(savedData[1].B, readData[4]); Assert.AreEqual(savedData[1].C, readData[5]); indexBuffer.Dispose(); } [Test] public void ShouldDynamicSetAndGetStructData() { short[] savedData = new short[] { 1, 2, 3, 4, 5, 6 }; IndexBuffer indexBuffer = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length, BufferUsage.None); indexBuffer.SetData(savedData); TriangleIndices16[] readData = new TriangleIndices16[2]; indexBuffer.GetData(readData, 0, 2); Assert.AreEqual(savedData[0], readData[0].A); Assert.AreEqual(savedData[1], readData[0].B); Assert.AreEqual(savedData[2], readData[0].C); Assert.AreEqual(savedData[3], readData[1].A); Assert.AreEqual(savedData[4], readData[1].B); Assert.AreEqual(savedData[5], readData[1].C); indexBuffer.Dispose(); } [Test] public void ShouldDynamicSetStructAndGetData() { TriangleIndices16[] savedData = new TriangleIndices16[] { new TriangleIndices16(1, 2, 3), new TriangleIndices16(4, 5, 6) }; IndexBuffer indexBuffer = new DynamicIndexBuffer(gd, IndexElementSize.SixteenBits, savedData.Length*3, BufferUsage.None); indexBuffer.SetData(savedData); short[] readData = new short[6]; indexBuffer.GetData(readData, 0, 6); Assert.AreEqual(savedData[0].A, readData[0]); Assert.AreEqual(savedData[0].B, readData[1]); Assert.AreEqual(savedData[0].C, readData[2]); Assert.AreEqual(savedData[1].A, readData[3]); Assert.AreEqual(savedData[1].B, readData[4]); Assert.AreEqual(savedData[1].C, readData[5]); indexBuffer.Dispose(); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var indexBuffer = new IndexBuffer(null, IndexElementSize.SixteenBits, 3, BufferUsage.None); indexBuffer.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized IndexBuffer } } } ================================================ FILE: Tests/Framework.Graphics/MiscellaneousTests.cs ================================================ using Kni.Tests.Components; using NUnit.Framework; namespace Kni.Tests.Graphics { internal class MiscellaneousTests : GraphicsDeviceTestFixtureBase { [Test] public void Colored3DCube() { PrepareFrameCapture(); var cube = new Colored3DCubeComponent(gd); cube.LoadContent(); cube.Draw(); cube.UnloadContent(); CheckFrames(); } } } ================================================ FILE: Tests/Framework.Graphics/ModelTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; namespace Kni.Tests.Graphics { [TestFixture] internal sealed class ModelTest : GraphicsDeviceTestFixtureBase { // model exported from default blender project. Model model; // cube embedded in default blender project. ModelMesh cube; [SetUp] public void Initialize() { model = content.Load(Paths.Model("BlenderDefaultCube")); // model is generated by Blender so by default inside is already named cube. // let's extract them by name to incrise code coverage in ModelMeshCollection. cube = model.Meshes["Cube"]; } [Test] public void ShouldDrawSampleModel() { // model contains a bit more that only the cube, so let extract the cube // to set transformation matrix. It is necessary to make the cube visible. var cubeBone = model.Bones[1]; cubeBone.Transform = Matrix.Identity; // let's make the model colored in red and lighted var effect = (BasicEffect)model.Meshes[0].Effects[0]; effect.DiffuseColor = Color.Red.ToVector3(); effect.EnableDefaultLighting(); var world = Matrix.Identity; var view = Matrix.CreateLookAt(new Vector3(5, 5, 5), new Vector3(0, 0, 0), Vector3.Up); var projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, gd.Viewport.AspectRatio, 0.1f, 100.0f); PrepareFrameCapture(); model.Draw(world, view, projection); CheckFrames(); } [Test] public void MeshPartEffectReplacesOldOneOnParentModel() { // simple model used in test Assume.That(cube.Effects.Count, Is.EqualTo(1)); var newEffect = new BasicEffect(gd); Assume.That(cube.Effects[0], Is.Not.EqualTo(newEffect)); cube.MeshParts[0].Effect = newEffect; Assert.That(cube.Effects.Count, Is.EqualTo(1)); Assert.That(cube.Effects[0], Is.EqualTo(newEffect)); } #if !XNA // Tests below are valid for KNI only because of manual model creation. [Test] public void ShouldConstructAndInitialize() { var actual = new Model(new List(), new List()); Assert.That(actual.Bones, Is.Empty, "bones initial list is converted to Bones collection"); Assert.That(actual.Meshes, Is.Empty, "meshes initial list is converted to Meshes collection"); } [Test] public void ShouldNotConstructWhenParamsAreNotValid() { // simple empty collections to make code more readable. var emptyBonesList = new List(); var emptyMeshesList = new List(); // testing constructor's defined exceptions. Assert.Throws(() => new Model(null, emptyMeshesList)); Assert.Throws(() => new Model(emptyBonesList, null)); } [Test] public void ShouldReadTransformationsFromBones() { List someBones = new ModelBone[] { new ModelBone(), new ModelBone() }.ToList(); Model model = new Model(someBones, new List()); Matrix[] expected = new Matrix[] { Matrix.Identity * 1, Matrix.Identity * 2 }; Matrix[] actual = new Matrix[2]; Assume.That(actual, Is.Not.EqualTo(expected)); model.CopyBoneTransformsFrom(expected); model.CopyBoneTransformsTo(actual); Assert.That(actual, Is.EqualTo(expected)); } [Test] public void CopyBoneTransformsFrom_Exceptions() { List someBones = new ModelBone[] { new ModelBone() }.ToList(); Model model = new Model(someBones, new List()); Assert.Throws(() => model.CopyBoneTransformsFrom(null)); Assert.Throws(() => model.CopyBoneTransformsFrom(new Matrix[0])); } [Test] public void CopyBoneTransformsTo_Exceptions() { List someBones = new ModelBone[] { new ModelBone() }.ToList(); Model model = new Model(someBones, new List()); Assert.Throws(() => model.CopyBoneTransformsTo(null)); Assert.Throws(() => model.CopyBoneTransformsTo(new Matrix[0])); } #endif } } ================================================ FILE: Tests/Framework.Graphics/OcclusionQueryTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class OcclusionQueryTest : GraphicsDeviceTestFixtureBase { [Test] public void ConstructorsAndProperties() { Assert.Throws(() => new OcclusionQuery(null)); var occlusionQuery = new OcclusionQuery(gd); Assert.IsFalse(occlusionQuery.IsComplete); Assert.Throws( () => { var n = occlusionQuery.PixelCount; }, "PixelCount throws when query not yet started."); occlusionQuery.Dispose(); } [Test] public void MismatchedBeginEnd() { var occlusionQuery = new OcclusionQuery(gd); Assert.Throws(() => occlusionQuery.End()); occlusionQuery.Begin(); Assert.Throws(() => occlusionQuery.Begin()); occlusionQuery.Dispose(); } [Test] public void QueryOccludedSprites() { var spriteBatch = new SpriteBatch(gd); var whiteTexture = content.Load(Paths.Texture("white-64")); var occlusionQuery = new OcclusionQuery(gd); var state = 0; var queryFrameCount = 0; Action action = frameNr => { gd.Clear(Color.CornflowerBlue); // White rectangle at depth 0. spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null); spriteBatch.Draw(whiteTexture, new Rectangle(100, 100, 100, 100), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 0); spriteBatch.End(); switch (state) { case 0: // Make query with red rectangle, 50% occluded. occlusionQuery.Begin(); spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null); spriteBatch.Draw(whiteTexture, new Rectangle(50, 100, 100, 100), null, Color.Red, 0, Vector2.Zero, SpriteEffects.None, 1); spriteBatch.End(); occlusionQuery.End(); state = 1; queryFrameCount = 0; break; case 1: queryFrameCount++; if (queryFrameCount > 5) Assert.Fail("Occlusion query did not complete."); if (occlusionQuery.IsComplete) { Assert.AreEqual(100*100/2, occlusionQuery.PixelCount); Console.WriteLine("First occlusionQuery completed in {0} frames", queryFrameCount); state = 2; } break; case 2: // Same results as last frame. Assert.IsTrue(occlusionQuery.IsComplete); Assert.AreEqual(100*100/2, occlusionQuery.PixelCount); // Reuse query a second time, 10% occlusion. occlusionQuery.Begin(); spriteBatch.Begin(SpriteSortMode.Immediate, null, null, DepthStencilState.Default, null); spriteBatch.Draw(whiteTexture, new Rectangle(10, 100, 100, 100), null, Color.Red, 0, Vector2.Zero, SpriteEffects.None, 1); spriteBatch.End(); occlusionQuery.End(); state = 3; queryFrameCount = 0; break; case 3: queryFrameCount++; if (queryFrameCount > 5) Assert.Fail("Occlusion query did not complete."); if (occlusionQuery.IsComplete) { Assert.AreEqual(100*100*9/10, occlusionQuery.PixelCount); Console.WriteLine("Second occlusionQuery completed in {0} frames", queryFrameCount); state = 4; } break; } }; Predicate exitCondition = frame => state == 4 || frame > 15; DoGameLoop(action, exitCondition); spriteBatch.Dispose(); whiteTexture.Dispose(); occlusionQuery.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/ProfileReachTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class ProfileReachTest { const GraphicsProfile TestedProfile = GraphicsProfile.Reach; const int PowerOfTwoSize = 32; const int MaxTexture2DSize = 2048; const int MaxTextureCubeSize = 512; const int MaxPrimitives = 65535; const int MaxRenderTargets = 1; private TestGameBase _game; private GraphicsDeviceManager _gdm; private GraphicsDevice _gd; [SetUp] public virtual void SetUp() { _game = new TestGameBase(); _gdm = new GraphicsDeviceManager(_game); _gdm.GraphicsProfile = GraphicsProfile.Reach; _game.InitializeOnly(); _gd = _gdm.GraphicsDevice; } [TearDown] public virtual void TearDown() { _game.Dispose(); _game = null; _gdm = null; _gd = null; } /// /// Ensure we have the correct profile /// private void CheckProfile() { Assert.AreEqual(_gd.GraphicsProfile, TestedProfile); } [TestCase(MaxTexture2DSize, MaxTexture2DSize, false, SurfaceFormat.Color)] [TestCase(MaxTexture2DSize, MaxTexture2DSize-1, false, SurfaceFormat.Color)] [TestCase(MaxTexture2DSize-1, MaxTexture2DSize , false, SurfaceFormat.Color)] [TestCase(MaxTexture2DSize-1, MaxTexture2DSize-1, false, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize, PowerOfTwoSize, true, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize, PowerOfTwoSize, false, SurfaceFormat.Dxt1 )] [TestCase(PowerOfTwoSize, PowerOfTwoSize, false, SurfaceFormat.Dxt3 )] [TestCase(PowerOfTwoSize, PowerOfTwoSize, false, SurfaceFormat.Dxt5 )] public void Texture2DSize(int width, int height, bool mipMap, SurfaceFormat surfaceFormat = SurfaceFormat.Color) { CheckProfile(); Texture2D tx = new Texture2D(_gd, width, height, mipMap, surfaceFormat); tx.Dispose(); } [TestCase(MaxTexture2DSize, MaxTexture2DSize+1, false, SurfaceFormat.Color)] [TestCase(MaxTexture2DSize+1, MaxTexture2DSize, false, SurfaceFormat.Color)] [TestCase(MaxTexture2DSize+1, MaxTexture2DSize+1, false, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize, PowerOfTwoSize-1, true, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize-1, PowerOfTwoSize , true, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize-1, PowerOfTwoSize-1, true, SurfaceFormat.Color)] [TestCase(PowerOfTwoSize, PowerOfTwoSize-4, false, SurfaceFormat.Dxt1)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize , false, SurfaceFormat.Dxt1)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt1)] [TestCase(PowerOfTwoSize, PowerOfTwoSize-4, false, SurfaceFormat.Dxt3)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize , false, SurfaceFormat.Dxt3)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt3)] [TestCase(PowerOfTwoSize, PowerOfTwoSize-4, false, SurfaceFormat.Dxt5)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize , false, SurfaceFormat.Dxt5)] [TestCase(PowerOfTwoSize-4, PowerOfTwoSize-4, false, SurfaceFormat.Dxt5)] public void Texture2DSize_ThrowsNotSupportedException(int width, int height, bool mipMap, SurfaceFormat surfaceFormat = SurfaceFormat.Color) { Assert.Throws( ()=> Texture2DSize(width, height, mipMap, surfaceFormat) ); } [TestCase(MaxTextureCubeSize )] [TestCase(MaxTextureCubeSize/2)] public void TextureCubeSize(int size) { CheckProfile(); TextureCube tx = new TextureCube(_gd, size, false, SurfaceFormat.Color); tx.Dispose(); } [TestCase(MaxTextureCubeSize*2)] [TestCase(MaxTextureCubeSize+1)] // nonPowerOfTwo or maxSize [TestCase(MaxTextureCubeSize+4)] // nonPowerOfTwo or maxSize [TestCase(PowerOfTwoSize-4 )] public void TextureCubeSize_ThrowsNotSupportedException(int size) { Assert.Throws( ()=> TextureCubeSize(size) ); } [TestCase(16, 16, 16)] public void Texture3DSize_ThrowsNotSupportedException(int width, int height, int depth) { CheckProfile(); Assert.Throws(()=> { Texture3D tx = new Texture3D(_gd, width, height, depth, false, SurfaceFormat.Color); tx.Dispose(); }); } [TestCase(SurfaceFormat.Color)] [TestCase(SurfaceFormat.Bgr565)] [TestCase(SurfaceFormat.Bgra5551)] [TestCase(SurfaceFormat.Bgra4444)] [TestCase(SurfaceFormat.Dxt1)] [TestCase(SurfaceFormat.Dxt3)] [TestCase(SurfaceFormat.Dxt5)] #if !DESKTOPGL // NormalizedByte2 & NormalizedByte4 are not implemented under OpenGL [TestCase(SurfaceFormat.NormalizedByte2)] [TestCase(SurfaceFormat.NormalizedByte4)] #endif public void Texture2DSurface(SurfaceFormat surfaceFormat) { CheckProfile(); Texture2D tx = new Texture2D(_gd, 16, 16, false, surfaceFormat); tx.Dispose(); } [TestCase(SurfaceFormat.Rgba1010102)] [TestCase(SurfaceFormat.Rg32)] [TestCase(SurfaceFormat.Rgba64)] [TestCase(SurfaceFormat.Alpha8)] [TestCase(SurfaceFormat.Single)] [TestCase(SurfaceFormat.Vector2)] [TestCase(SurfaceFormat.Vector4)] [TestCase(SurfaceFormat.HalfSingle)] [TestCase(SurfaceFormat.HalfVector2)] [TestCase(SurfaceFormat.HalfVector4)] [TestCase(SurfaceFormat.HdrBlendable)] public void Texture2DSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat) { Assert.Throws(() => Texture2DSurface(surfaceFormat)); } [TestCase(SurfaceFormat.Color)] public void Texture3DSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat) { CheckProfile(); Assert.Throws(()=> { Texture3D tx = new Texture3D(_gd, 16, 16, 16, false, surfaceFormat); tx.Dispose(); }); } [TestCase(SurfaceFormat.Color)] [TestCase(SurfaceFormat.Bgr565)] [TestCase(SurfaceFormat.Bgra5551)] [TestCase(SurfaceFormat.Bgra4444)] [TestCase(SurfaceFormat.Dxt1)] [TestCase(SurfaceFormat.Dxt3)] [TestCase(SurfaceFormat.Dxt5)] public void TextureCubeSurface(SurfaceFormat surfaceFormat) { CheckProfile(); TextureCube tx = new TextureCube(_gd, 16, false, surfaceFormat); tx.Dispose(); } [TestCase(SurfaceFormat.NormalizedByte2)] [TestCase(SurfaceFormat.NormalizedByte4)] [TestCase(SurfaceFormat.Rgba1010102)] [TestCase(SurfaceFormat.Rg32)] [TestCase(SurfaceFormat.Rgba64)] [TestCase(SurfaceFormat.Alpha8)] [TestCase(SurfaceFormat.Single)] [TestCase(SurfaceFormat.Vector2)] [TestCase(SurfaceFormat.Vector4)] [TestCase(SurfaceFormat.HalfSingle)] [TestCase(SurfaceFormat.HalfVector2)] [TestCase(SurfaceFormat.HalfVector4)] [TestCase(SurfaceFormat.HdrBlendable)] public void TextureCubeSurface_ThrowsNotSupportedException(SurfaceFormat surfaceFormat) { Assert.Throws( ()=> TextureCubeSurface(surfaceFormat) ); } [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rgba1010102, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rg32, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rgba64, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Single, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Vector2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Vector4, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfSingle, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfVector2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfVector4, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HdrBlendable, SurfaceFormat.Color)] public void RenderTarget2DSurface(SurfaceFormat preferredFormat, SurfaceFormat expectedFallbackFormat) { CheckProfile(); RenderTarget2D tx = new RenderTarget2D(_gd, 16, 16, false, preferredFormat, DepthFormat.None); Assert.AreEqual(tx.Format, expectedFallbackFormat); tx.Dispose(); } [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rgba1010102, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rg32, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Rgba64, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Single, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Vector2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Vector4, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfSingle, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfVector2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HalfVector4, SurfaceFormat.Color)] [TestCase(SurfaceFormat.HdrBlendable, SurfaceFormat.Color)] public void RenderTargetCubeSurface(SurfaceFormat preferredFormat, SurfaceFormat expectedFallbackFormat) { CheckProfile(); RenderTargetCube tx = new RenderTargetCube(_gd, 16, false, preferredFormat, DepthFormat.None); Assert.AreEqual(tx.Format, expectedFallbackFormat); tx.Dispose(); } [TestCase("DrawPrimitives", 0, MaxPrimitives)] [TestCase("DrawPrimitives", 3, MaxPrimitives)] [TestCase("DrawIndexedPrimitives", 0, MaxPrimitives)] [TestCase("DrawUserPrimitives", 0, MaxPrimitives)] [TestCase("DrawUserPrimitives", 3, MaxPrimitives)] [TestCase("DrawUserIndexedPrimitives", 0, MaxPrimitives)] public void MaximumPrimitivesPerDrawCall(string method, int vertexStart, int primitiveCount) { CheckProfile(); int verticesCount = vertexStart + 3*primitiveCount; var effect = new BasicEffect(_gd); effect.CurrentTechnique.Passes[0].Apply(); switch(method) { case "DrawPrimitives": var vb = new VertexBuffer(_gd, VertexPositionColor.VertexDeclaration, verticesCount, BufferUsage.None); _gd.SetVertexBuffer(vb); _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount); vb.Dispose(); break; case "DrawIndexedPrimitives": var vb2 = new VertexBuffer(_gd, VertexPositionColor.VertexDeclaration, verticesCount, BufferUsage.None); var ib2 = new IndexBuffer(_gd, IndexElementSize.SixteenBits, verticesCount, BufferUsage.None); _gd.SetVertexBuffer(vb2); _gd.Indices = ib2; _gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, vertexStart, verticesCount, 0, primitiveCount); vb2.Dispose(); ib2.Dispose(); break; case "DrawUserPrimitives": var vertices = new VertexPositionColor[verticesCount]; _gd.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, vertexStart, primitiveCount); break; case "DrawUserIndexedPrimitives": var vertices2 = new VertexPositionColor[verticesCount]; var indices16bit = new short[verticesCount]; _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices2, 0, vertices2.Length, indices16bit, 0, primitiveCount); break; case "DrawUserIndexedPrimitives_32bit": var vertices3 = new VertexPositionColor[verticesCount]; var indices32bit = new int[verticesCount]; _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices3, 0, vertices3.Length, indices32bit, 0, primitiveCount); break; default: throw new ArgumentException("method"); } effect.Dispose(); } [TestCase("DrawPrimitives", 0, MaxPrimitives + 1)] [TestCase("DrawIndexedPrimitives", 0, MaxPrimitives + 1)] [TestCase("DrawUserPrimitives", 0, MaxPrimitives + 1)] [TestCase("DrawUserIndexedPrimitives", 0, MaxPrimitives + 1)] public void MaximumPrimitivesPerDrawCall_ThrowsNotSupportedException(string method, int vertexStart, int primitiveCount) { Assert.Throws( ()=> MaximumPrimitivesPerDrawCall(method, vertexStart, primitiveCount) ); } [TestCase(IndexElementSize.SixteenBits)] public void IndexBufferElementSize(IndexElementSize elementSize) { CheckProfile(); IndexBuffer ib = new IndexBuffer(_gd, elementSize, 16, BufferUsage.None); ib.Dispose(); } [TestCase(IndexElementSize.ThirtyTwoBits)] public void IndexBufferElementSize_ThrowsNotSupportedException(IndexElementSize elementSize) { Assert.Throws( ()=> IndexBufferElementSize(elementSize) ); } [TestCase(IndexElementSize.SixteenBits)] public void IndicesElementSize(IndexElementSize elementSize) { CheckProfile(); int verticesCount = 3 * 16; var effect = new BasicEffect(_gd); effect.CurrentTechnique.Passes[0].Apply(); var vertices = new VertexPositionColor[verticesCount]; switch (elementSize) { case IndexElementSize.SixteenBits: var indices16bit = new short[3 * 16]; _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices16bit, 0, 16); break; case IndexElementSize.ThirtyTwoBits: var indices32bit = new int[3 * 16]; _gd.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices32bit, 0, 16); break; default: throw new ArgumentException("method"); } effect.Dispose(); } [TestCase(IndexElementSize.ThirtyTwoBits)] public void IndicesElementSize_ThrowsNotSupportedException(IndexElementSize elementSize) { Assert.Throws( ()=> IndicesElementSize(elementSize) ); } [TestCase()] public void OcclusionQuery_ThrowsNotSupportedException() { CheckProfile(); Assert.Throws(()=> { var oc = new OcclusionQuery(_gd); oc.Dispose(); }); } [TestCase(MaxRenderTargets)] public void MultipleRenderTargets(int count) { CheckProfile(); var rtBinding = new RenderTargetBinding[count]; for(int i=0;i( ()=> MultipleRenderTargets(count) ); } [Test] public void NonPowerOfTwoTextureShouldThrowTest() { CheckProfile(); BasicEffect effect = new BasicEffect(_gd); effect.TextureEnabled = true; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Texture2D texture0 = new Texture2D(_gd, 8, 9, false, SurfaceFormat.Color); _gd.Textures[0] = texture0; _gd.SamplerStates[0] = SamplerState.LinearWrap; int vertexStart = 0; int primitiveCount = 2; int verticesCount = vertexStart + 3 * primitiveCount; VertexBuffer vb = new VertexBuffer(_gd, VertexPositionColorTexture.VertexDeclaration, verticesCount, BufferUsage.None); _gd.SetVertexBuffer(vb); Assert.Throws(() => _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount) ); vb.Dispose(); effect.Dispose(); } [Test] public void NonPowerOfTwoUnusedTextureShouldNotThrowTest() { CheckProfile(); BasicEffect effect = new BasicEffect(_gd); effect.TextureEnabled = true; EffectPass effectPass = effect.CurrentTechnique.Passes[0]; effectPass.Apply(); Texture2D texture0 = new Texture2D(_gd, 8, 9, false, SurfaceFormat.Color); Texture2D texture1 = new Texture2D(_gd, 9, 8, false, SurfaceFormat.Color); _gd.Textures[0] = texture0; _gd.Textures[1] = texture1; _gd.SamplerStates[0] = SamplerState.LinearClamp; _gd.SamplerStates[1] = SamplerState.LinearWrap; int vertexStart = 0; int primitiveCount = 2; int verticesCount = vertexStart + 3 * primitiveCount; VertexBuffer vb = new VertexBuffer(_gd, VertexPositionColorTexture.VertexDeclaration, verticesCount, BufferUsage.None); _gd.SetVertexBuffer(vb); Assert.DoesNotThrow( ()=> _gd.DrawPrimitives(PrimitiveType.TriangleList, vertexStart, primitiveCount) ); vb.Dispose(); effect.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/RasterizerStateTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.Components; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class RasterizerStateTest : GraphicsDeviceTestFixtureBase { [TestCase(-1f)] [TestCase(1f)] [TestCase(-0.0004f)] public void DepthBiasVisualTest(float depthBias) { var effect = new BasicEffect(gd) { VertexColorEnabled = true, World = Matrix.Identity, View = Matrix.Identity, Projection = Matrix.Identity, }; RasterizerState rs; var data = new VertexPositionColor[3]; var step = depthBias / 4; PrepareFrameCapture(); for (var i = 0; i < 4; i++) { var r = i * MathHelper.PiOver2; var bias = i * step; var c = new Color(new Vector3(i / 4f)); rs = new RasterizerState(); rs.DepthBias = bias; var rot = Matrix.CreateRotationZ(-r); var v1 = Vector3.Transform(new Vector3(-0.5f, 0f, 0f), rot); var v2 = Vector3.Transform(new Vector3(0.2f, 0.9f, 0f), rot); var v3 = Vector3.Transform(new Vector3(0.2f, -0.9f, 0f), rot); data[0] = new VertexPositionColor(v1, c); data[1] = new VertexPositionColor(v2, c); data[2] = new VertexPositionColor(v3, c); effect.CurrentTechnique.Passes[0].Apply(); gd.RasterizerState = rs; gd.DrawUserPrimitives(PrimitiveType.TriangleList, data, 0, 1, VertexPositionColor.VertexDeclaration); rs.Dispose(); } CheckFrames(); effect.Dispose(); } [Test] public void ShouldNotBeAbleToSetNullRasterizerState() { Assert.Throws(() => gd.RasterizerState = null); } [Test] public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice() { var rasterizerState = new RasterizerState(); // Can mutate before binding. DoAsserts(rasterizerState, Assert.DoesNotThrow); // Can't mutate after binding. gd.RasterizerState = rasterizerState; DoAsserts(rasterizerState, d => Assert.Throws(d)); // Even after changing to different RasterizerState, you still can't mutate a previously-bound object. gd.RasterizerState = RasterizerState.CullCounterClockwise; DoAsserts(rasterizerState, d => Assert.Throws(d)); rasterizerState.Dispose(); } [Test] public void ShouldNotBeAbleToMutateDefaultStateObjects() { DoAsserts(RasterizerState.CullClockwise, d => Assert.Throws(d)); DoAsserts(RasterizerState.CullCounterClockwise, d => Assert.Throws(d)); DoAsserts(RasterizerState.CullNone, d => Assert.Throws(d)); } private static void DoAsserts(RasterizerState rasterizerState, Action assertMethod) { assertMethod(() => rasterizerState.CullMode = CullMode.CullClockwiseFace); assertMethod(() => rasterizerState.DepthBias = 0.1f); assertMethod(() => rasterizerState.FillMode = FillMode.WireFrame); assertMethod(() => rasterizerState.MultiSampleAntiAlias = true); assertMethod(() => rasterizerState.ScissorTestEnable = true); assertMethod(() => rasterizerState.SlopeScaleDepthBias = 0.2f); #if !XNA //assertMethod(() => rasterizerState.DepthClipEnable = false); #endif } [TestCase(CullMode.CullClockwiseFace)] [TestCase(CullMode.CullCounterClockwiseFace)] [TestCase(CullMode.None)] public void VisualTestCullMode(CullMode cullMode) { PrepareFrameCapture(); var cube = new Colored3DCubeComponent(gd); cube.LoadContent(); var rasterizerState = new RasterizerState { CullMode = cullMode }; gd.RasterizerState = rasterizerState; cube.Draw(); CheckFrames(); cube.UnloadContent(); rasterizerState.Dispose(); } [TestCase(FillMode.Solid)] [TestCase(FillMode.WireFrame)] public void VisualTestFillMode(FillMode fillMode) { PrepareFrameCapture(); var cube = new Colored3DCubeComponent(gd); cube.LoadContent(); var rasterizerState = new RasterizerState { FillMode = fillMode }; gd.RasterizerState = rasterizerState; cube.Draw(); CheckFrames(); cube.UnloadContent(); rasterizerState.Dispose(); } [TestCase(false)] [TestCase(true)] public void VisualTestScissorTestEnable(bool scissorTestEnable) { PrepareFrameCapture(); var cube = new Colored3DCubeComponent(gd); cube.LoadContent(); var rasterizerstate = new RasterizerState { ScissorTestEnable = scissorTestEnable }; gd.RasterizerState = rasterizerstate; var viewport = gd.Viewport; gd.ScissorRectangle = new Rectangle(0, 0, viewport.Width / 2, viewport.Height / 2); cube.Draw(); CheckFrames(); cube.UnloadContent(); rasterizerstate.Dispose(); } #if !XNA [TestCase(false)] [TestCase(true)] public void VisualTestDepthClipEnable(bool depthClipEnable) { PrepareFrameCapture(); var cube = new Colored3DCubeComponent(gd) { CubePosition = new Vector3(0, 0, 3) }; cube.LoadContent(); var rasterizerstate = new RasterizerState { DepthClipEnable = depthClipEnable }; gd.RasterizerState = rasterizerstate; cube.Draw(); CheckFrames(); cube.UnloadContent(); rasterizerstate.Dispose(); } #endif } } ================================================ FILE: Tests/Framework.Graphics/RenderTarget2DTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class RenderTarget2DTest : GraphicsDeviceTestFixtureBase { [Test] public void ZeroSizeShouldFailTest() { RenderTarget2D renderTarget; Assert.Throws(() => renderTarget = new RenderTarget2D(gd, 0, 1)); Assert.Throws(() => renderTarget = new RenderTarget2D(gd, 1, 0)); Assert.Throws(() => renderTarget = new RenderTarget2D(gd, 0, 0)); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var renderTarget = new RenderTarget2D(null, 16, 16); renderTarget.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized renderTarget } [Test] #if XNA [Ignore("XNA mipmaps fail our pixel comparison tests")] #endif public void GenerateMips() { // Please note: // The reference image was created with the KNI/Windows test. // Mipmaps created by XNA and KNI are different. // Mipmaps created by DirectX 11 and OpenGL can also be different - at least for // NPOT textures. PrepareFrameCapture(); var texture = content.Load(Paths.Texture("MonoGameIcon")); var spriteBatch = new SpriteBatch(gd); // Remember original (frame capture) render target. var renderTargets = gd.GetRenderTargets(); var viewport = gd.Viewport; var renderTarget = new RenderTarget2D( gd, 128, 128, true, // Enable mipmaps. SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents); // Render sprites with random positions into the offscreen render target. gd.SetRenderTarget(renderTarget); gd.Clear(Color.Gray); spriteBatch.Begin(); for (int i = 0; i < 5; i++) { spriteBatch.Draw( texture, new Vector2( (i * 1664525 + 1013904223) % (renderTarget.Width - texture.Width), (i * 22695477 + 7777) % (renderTarget.Height - texture.Height)), Color.White); } spriteBatch.End(); gd.SetRenderTargets(renderTargets); // Display all mip levels. gd.Clear(Color.CornflowerBlue); int x = 0; int y = 0; for (int i = 0; i < renderTarget.LevelCount; i++) { var samplerState = new SamplerState { Filter = TextureFilter.Point, MipMapLevelOfDetailBias = i, MaxMipLevel = i, }; spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, samplerState, null, null); spriteBatch.Draw(renderTarget, new Vector2(x, y), Color.White); spriteBatch.End(); x += renderTarget.Width + 1; if (x + renderTarget.Width > viewport.Width) { x = 0; y += renderTarget.Height + 1; } samplerState.Dispose(); } CheckFrames(); texture.Dispose(); spriteBatch.Dispose(); renderTarget.Dispose(); } [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)] // unsupported renderTarget formats [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt1, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt3, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt5, SurfaceFormat.Color)] #if !XNA [TestCase(SurfaceFormat.Dxt1a, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color)] #endif [TestCase(SurfaceFormat.NormalizedByte2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.NormalizedByte4, SurfaceFormat.Color)] public void PreferredSurfaceFormatTest(SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat) { var renderTarget = new RenderTarget2D(gd, 16, 16, false, preferredSurfaceFormat, DepthFormat.None); Assert.AreEqual(renderTarget.Format, expectedSurfaceFormat); } [Test] public void GetDataMSAA() { const int size = 100; const int size2 = size * size; var rt = new RenderTarget2D(gd, size, size, false, SurfaceFormat.Color, DepthFormat.None, 8, RenderTargetUsage.DiscardContents); var data = new Color[size2]; // create some arbitrary data here for (var i = 0; i < size2; i++) data[i] = new Color(new Vector3(1f / (i + 1))); rt.SetData(data); var returnedData = new Color[size2]; rt.GetData(returnedData); // verify that the gotten data is the same as the data we attempt to set for (var i = 0; i < size2; i++) Assert.AreEqual(data[i], returnedData[i]); rt.Dispose(); } #if WINDOWSDX [TestCase(1)] [TestCase(2)] public void GetSharedHandle(int preferredMultiSampleCount) { var rt = new RenderTarget2D(gd, 16, 16, false, SurfaceFormat.Color, DepthFormat.None, preferredMultiSampleCount, RenderTargetUsage.PlatformContents, true); var sharedHandle = rt.GetSharedHandle(); Assert.AreNotEqual(sharedHandle, IntPtr.Zero); var resource = SharpDX.CppObject.FromPointer(sharedHandle); rt.Dispose(); } #endif } } ================================================ FILE: Tests/Framework.Graphics/RenderTargetCubeTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class RenderTargetCubeTest : GraphicsDeviceTestFixtureBase { [Test] public void ZeroSizeShouldFailTest() { RenderTargetCube renderTarget; Assert.Throws(() => renderTarget = new RenderTargetCube(gd, 0, false, SurfaceFormat.Color, DepthFormat.None)); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var renderTarget = new RenderTargetCube(null, 16, false, SurfaceFormat.Color, DepthFormat.None); renderTarget.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized renderTarget } [TestCase(1)] [TestCase(8)] [TestCase(31)] public void ShouldClearRenderTargetAndGetData(int size) { var dataSize = size * size; var renderTargetCube = new RenderTargetCube(gd, size, false, SurfaceFormat.Color, DepthFormat.Depth16); var colors = new[] { Color.BlanchedAlmond, Color.BlueViolet, Color.DarkSeaGreen, Color.ForestGreen, Color.IndianRed, Color.LightGoldenrodYellow }; for (var i = 0; i < 6; i++) { gd.SetRenderTarget(renderTargetCube, (CubeMapFace) i); gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, colors[i], 1.0f, 0); gd.SetRenderTarget(null, (CubeMapFace) i); } for (var i = 0; i < 6; i++) { var readData = new Color[dataSize]; renderTargetCube.GetData((CubeMapFace) i, readData); for (var j = 0; j < dataSize; j++) Assert.AreEqual(colors[i], readData[j]); } renderTargetCube.Dispose(); } [TestCase(SurfaceFormat.Color, SurfaceFormat.Color)] // unsupported renderTarget formats [TestCase(SurfaceFormat.Alpha8, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt1, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt3, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt5, SurfaceFormat.Color)] #if !XNA [TestCase(SurfaceFormat.Dxt1a, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt1SRgb, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt3SRgb, SurfaceFormat.Color)] [TestCase(SurfaceFormat.Dxt5SRgb, SurfaceFormat.Color)] #endif [TestCase(SurfaceFormat.NormalizedByte2, SurfaceFormat.Color)] [TestCase(SurfaceFormat.NormalizedByte4, SurfaceFormat.Color)] public void PreferredSurfaceFormatTest(SurfaceFormat preferredSurfaceFormat, SurfaceFormat expectedSurfaceFormat) { var renderTarget = new RenderTargetCube(gd, 16, false, preferredSurfaceFormat, DepthFormat.None); Assert.AreEqual(renderTarget.Format, expectedSurfaceFormat); } } } ================================================ FILE: Tests/Framework.Graphics/SamplerStateTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.ContentPipeline; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class SamplerStateTest : GraphicsDeviceTestFixtureBase { [Test] public void ShouldNotBeAbleToSetNullSamplerState() { Assert.Throws(() => gd.SamplerStates[0] = null); } [Test] public void ShouldNotBeAbleToMutateStateObjectAfterBindingToGraphicsDevice() { var samplerState = new SamplerState(); // Can mutate before binding. DoAsserts(samplerState, Assert.DoesNotThrow); // Can't mutate after binding. gd.SamplerStates[0] = samplerState; DoAsserts(samplerState, d => Assert.Throws(d)); // Even after changing to different SamplerState, you still can't mutate a previously-bound object. gd.SamplerStates[0] = SamplerState.AnisotropicClamp; DoAsserts(samplerState, d => Assert.Throws(d)); samplerState.Dispose(); } [Test] public void ShouldNotBeAbleToMutateDefaultStateObjects() { DoAsserts(SamplerState.AnisotropicClamp, d => Assert.Throws(d)); DoAsserts(SamplerState.AnisotropicWrap, d => Assert.Throws(d)); DoAsserts(SamplerState.LinearClamp, d => Assert.Throws(d)); DoAsserts(SamplerState.LinearWrap, d => Assert.Throws(d)); DoAsserts(SamplerState.PointClamp, d => Assert.Throws(d)); DoAsserts(SamplerState.PointWrap, d => Assert.Throws(d)); } private static void DoAsserts(SamplerState samplerState, Action assertMethod) { assertMethod(() => samplerState.AddressU = TextureAddressMode.Clamp); assertMethod(() => samplerState.AddressV = TextureAddressMode.Clamp); assertMethod(() => samplerState.AddressW = TextureAddressMode.Clamp); #if !XNA assertMethod(() => samplerState.BorderColor = Color.Red); #endif assertMethod(() => samplerState.Filter = TextureFilter.Anisotropic); assertMethod(() => samplerState.MaxAnisotropy = 0); assertMethod(() => samplerState.MaxMipLevel = 0); assertMethod(() => samplerState.MipMapLevelOfDetailBias = 0); #if !XNA assertMethod(() => samplerState.ComparisonFunction = CompareFunction.Always); #endif } #if !XNA [Test] public void VisualTestAddressModes() { PrepareFrameCapture(); var addressModes = new[] { TextureAddressMode.Border, TextureAddressMode.Clamp, TextureAddressMode.Mirror, TextureAddressMode.Wrap }; var spriteBatch = new SpriteBatch(gd); var texture = content.Load(Paths.Texture("MonoGameIcon")); var samplerStates = new SamplerState[addressModes.Length]; for (var i = 0; i < addressModes.Length; i++) samplerStates[i] = new SamplerState { AddressU = addressModes[i], AddressV = addressModes[i], AddressW = addressModes[i], BorderColor = Color.Purple }; var size = new Vector2(texture.Width * 2, texture.Height * 2); var offset = new Vector2(10, 10); gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); for (var i = 0; i < addressModes.Length; i++) { var x = i % 4; var pos = offset + new Vector2(x * size.X, 0); spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: samplerStates[i]); spriteBatch.Draw(texture, new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y), new Rectangle(-20, -20, texture.Width + 40, texture.Height + 40), Color.White); spriteBatch.End(); } CheckFrames(); spriteBatch.Dispose(); texture.Dispose(); foreach (var state in samplerStates) state.Dispose(); } #endif #if !XNA [Test] #if DESKTOPGL [Ignore("Comparison samplers are ps_4_0 and up, cannot use them on DesktopGL due to MojoShader")] #endif public void VisualTestComparisonFunction() { PrepareFrameCapture(); var compares = new[] { CompareFunction.Always, CompareFunction.Equal, CompareFunction.Greater, CompareFunction.GreaterEqual, CompareFunction.Less, CompareFunction.LessEqual, CompareFunction.Never, CompareFunction.NotEqual }; var spriteBatch = new SpriteBatch(gd); // Texture contains a horizontal gradient [0..1]. // In the shader, we compare samples from this texture to a hardcoded "0.5" value, // and run the test once for each comparison function. var texture = new Texture2D(gd, 16, 1, false, SurfaceFormat.Single); var textureData = new float[texture.Width]; for (var x = 0; x < texture.Width; x++) textureData[x] = x / (float) texture.Width; texture.SetData(textureData); var samplerStates = new SamplerState[compares.Length]; for (var i = 0; i < compares.Length; i++) samplerStates[i] = new SamplerState { AddressU = TextureAddressMode.Clamp, AddressV = TextureAddressMode.Clamp, AddressW = TextureAddressMode.Clamp, ComparisonFunction = compares[i], FilterMode = TextureFilterMode.Comparison }; Effect customEffect = AssetTestUtility.LoadEffect(content, "CustomSpriteBatchEffectComparisonSampler"); var size = new Vector2(100, 100); var offset = new Vector2(10, 10); gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); for (var i = 0; i < compares.Length; i++) { var x = i % 4; var y = (i > 3) ? 1 : 0; var pos = offset + new Vector2(x * size.X, y * size.Y); spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: samplerStates[i], effect: customEffect); spriteBatch.Draw(texture, new Rectangle((int) pos.X, (int) pos.Y, (int) size.X, (int) size.Y), Color.White); spriteBatch.End(); } CheckFrames(); spriteBatch.Dispose(); texture.Dispose(); customEffect.Dispose(); foreach (var state in samplerStates) state.Dispose(); } #endif } } ================================================ FILE: Tests/Framework.Graphics/ScissorRectangleTest.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class ScissorRectangleTest : GraphicsDeviceTestFixtureBase { private SpriteBatch _spriteBatch; private Texture2D _texture; private RenderTarget2D _extraRenderTarget, _rt200x200; [SetUp] public override void SetUp() { base.SetUp(); _spriteBatch = new SpriteBatch(gd); _texture = content.Load(Paths.Texture("Surge")); _extraRenderTarget = new RenderTarget2D(gd, 256, 256); _rt200x200 = new RenderTarget2D(gd, 200, 200, false, SurfaceFormat.Color, DepthFormat.None); } [TearDown] public override void TearDown() { _spriteBatch.Dispose(); _spriteBatch = null; _texture.Dispose(); _texture = null; _extraRenderTarget.Dispose(); _extraRenderTarget = null; _rt200x200.Dispose(); _rt200x200 = null; base.TearDown(); } [Test] public void Draw_with_scissor_rect() { PrepareFrameCapture(); var renderTargets = gd.GetRenderTargets(); gd.SetRenderTargets(renderTargets); gd.Clear(Color.Black); gd.SetRenderTarget(_rt200x200); gd.Clear(Color.Red); gd.SetRenderTargets(renderTargets); gd.Viewport = new Viewport(100, 100, 200, 200); var scissorTestEnabled = new RasterizerState(); scissorTestEnabled.CullMode = CullMode.None; scissorTestEnabled.ScissorTestEnable = true; gd.ScissorRectangle = new Rectangle(0, 0, 200, 200); _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.Default, scissorTestEnabled); _spriteBatch.Draw(_rt200x200, new Rectangle(0, 0, 400, 400), Color.White); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_with_render_target_change() { PrepareFrameCapture(); var renderTargets = gd.GetRenderTargets(); gd.ScissorRectangle = new Rectangle(0, 0, 20, 20); gd.SetRenderTarget(_extraRenderTarget); gd.SetRenderTargets(renderTargets); gd.Clear(new Color(68, 34, 136, 255)); DrawTexture(); CheckFrames(); } [Test] public void Draw_without_render_target_change() { PrepareFrameCapture(); var renderTargets = gd.GetRenderTargets(); gd.ScissorRectangle = new Rectangle(0, 0, 20, 20); gd.SetRenderTargets(renderTargets); DrawTexture(); CheckFrames(); } private void DrawTexture() { _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); var rasterizerState = new RasterizerState { ScissorTestEnable = true }; _spriteBatch.GraphicsDevice.RasterizerState = rasterizerState; _spriteBatch.Draw(_texture, new Vector2(0, 0), Color.White); _spriteBatch.End(); rasterizerState.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/ShaderTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.ContentPipeline; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class ShaderTest : GraphicsDeviceTestFixtureBase { [TestCase("Bevels")] [TestCase("BlackOut")] [TestCase("ColorFlip")] [TestCase("Grayscale")] [TestCase("HighContrast")] [TestCase("Invert")] [TestCase("NoEffect")] [TestCase("RainbowH")] public void Shader(string effectName) { PrepareFrameCapture(); #if WINDOWSDX || DESKTOPGL Effect effect = AssetTestUtility.CompileAndLoadEffect(gd, Paths.RawEffect(effectName)); #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); #endif SpriteBatch spriteBatch = new SpriteBatch(gd); // A background texture to test that the effect doesn't // mess up other textures Texture2D background = content.Load(Paths.Texture("fun-background")); // The texture to apply the effect to Texture2D surge = content.Load(Paths.Texture("Surge")); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); spriteBatch.Draw(background, Vector2.Zero, Color.White); effect.CurrentTechnique.Passes[0].Apply(); spriteBatch.Draw(surge, new Vector2(300, 200), null, Color.White, 0f, Vector2.Zero, 2.0f, SpriteEffects.None, 0f); spriteBatch.End(); CheckFrames(); spriteBatch.Dispose(); effect.Dispose(); background.Dispose(); surge.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/SpriteBatchTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.ContentPipeline; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class SpriteBatchTest : GraphicsDeviceTestFixtureBase { private SpriteBatch _spriteBatch; private Texture2D _texture; private Texture2D _texture2; private Texture2D _texture3; private BasicEffect _basicEffect; private Effect _grayscaleEffect; [SetUp] public override void SetUp() { base.SetUp(); _spriteBatch = new SpriteBatch(gd); _texture = content.Load(Paths.Texture("MonoGameIcon")); _texture2 = content.Load(Paths.Texture("Surge")); _texture3 = content.Load(Paths.Texture("lines-64")); _basicEffect = new BasicEffect(gd); _basicEffect.VertexColorEnabled = true; _basicEffect.TextureEnabled = true; _basicEffect.View = Matrix.Identity; _basicEffect.World = Matrix.Identity; _grayscaleEffect = content.Load(Paths.CompiledEffect("Grayscale")); } [TearDown] public override void TearDown() { _spriteBatch.Dispose(); _texture.Dispose(); _texture2.Dispose(); _texture3.Dispose(); _basicEffect.Dispose(); _grayscaleEffect.Dispose(); base.TearDown(); } [Test] public void BeginCalledTwiceThrows() { _spriteBatch.Begin(); Assert.Throws(() => _spriteBatch.Begin()); } [Test] public void BeginNotCalledThrows() { Assert.Throws(() => _spriteBatch.End()); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var spriteBatch = new SpriteBatch(null); spriteBatch.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized spriteBatch } [Test] public void Draw_without_blend() { PrepareFrameCapture(); _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_with_additive_blend() { PrepareFrameCapture(); _spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.Draw(_texture, new Vector2(30, 30), Color.White); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_normal() { PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase(0.5f, 0.5f)] [TestCase(1.5f, 1.5f)] [TestCase(0.75f, 2.0f)] [TestCase(1.25f, 0.8f)] public void Draw_stretched(float xScale, float yScale) { PrepareFrameCapture(); var rect = new Rectangle( 30, 50, (int)(_texture.Width * xScale), (int)(_texture.Height * yScale)); _spriteBatch.Begin(); _spriteBatch.Draw(_texture, rect, Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase("Red")] [TestCase("GreenYellow")] [TestCase("Teal")] public void Draw_with_filter_color(string colorName) { var color = colorName.ToColor(); PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.Draw(_texture, new Vector2(20, 20), color); _spriteBatch.End(); CheckFrames(); } [TestCase(0.38f)] [TestCase(1.41f)] [TestCase(2.17f)] [TestCase(2.81f)] public void Draw_rotated(float rotation) { PrepareFrameCapture(); var position = new Vector2(50, 50); var origin = new Vector2(_texture.Width / 2, _texture.Height / 2); _spriteBatch.Begin(); _spriteBatch.Draw( _texture, position, null, Color.White, rotation, origin, 1, SpriteEffects.None, 0); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_with_source_rect() { PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.Draw( _texture, new Vector2(20, 20), new Rectangle(20, 20, 40, 40), Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase(10, 10, 40, 40)] [TestCase(30, 30, 30, 50)] [TestCase(20, 30, 80, 60)] public void Draw_with_source_and_dest_rect(int x, int y, int width, int height) { PrepareFrameCapture(); var destRect = new Rectangle(x, y, width, height); var sourceRect = new Rectangle(20, 20, 40, 40); _spriteBatch.Begin(); _spriteBatch.Draw(_texture, destRect, sourceRect, Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase("Red", 120)] [TestCase("White", 80)] [TestCase("GreenYellow", 200)] public void Draw_with_alpha_blending(string colorName, byte alpha) { PrepareFrameCapture(); var color = colorName.ToColor(); color = Color.FromNonPremultiplied(color.R, color.G, color.B, alpha); _spriteBatch.Begin(); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.Draw(_texture, new Vector2(40, 40), color); _spriteBatch.End(); CheckFrames(); } [TestCase(SpriteEffects.FlipHorizontally)] [TestCase(SpriteEffects.FlipVertically)] [TestCase(SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically)] public void Draw_with_SpriteEffects(SpriteEffects effects) { PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.Draw( _texture, new Vector2(30, 30), null, Color.White, 0.0f, Vector2.Zero, 1.0f, effects, 0); _spriteBatch.End(); CheckFrames(); } private static readonly Matrix[] Matrices = new Matrix[] { Matrix.Identity, Matrix.CreateRotationZ(0.25f), Matrix.CreateScale(2), Matrix.CreateTranslation(30, 40, 0), Matrix.CreateRotationZ(0.9f) * Matrix.CreateScale(2) * Matrix.CreateTranslation(128, 32, 0) }; // Note that [Range(0, Matrices.Length -1)] is in use here, // rather then [TestCaseSource("Matrices")]. Passing the matrix // in directly results in an enormous test name (and captured // image filename). [Test] public void Draw_with_matrix([Range(0, 4)] int matrixIndex) { PrepareFrameCapture(); var matrix = Matrices[matrixIndex]; _spriteBatch.Begin( SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, matrix); _spriteBatch.Draw(_texture, new Vector2(10, 10), Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase(SpriteSortMode.BackToFront)] [TestCase(SpriteSortMode.Deferred)] [TestCase(SpriteSortMode.FrontToBack)] [TestCase(SpriteSortMode.Immediate)] #if !XNA // Disabled on XNA because the sorting algorithm is probably different [TestCase(SpriteSortMode.Texture)] #endif public void Draw_with_SpriteSortMode(SpriteSortMode sortMode) { Similarity = 0.995f; PrepareFrameCapture(); _spriteBatch.Begin(sortMode, BlendState.AlphaBlend); _spriteBatch.Draw(_texture, new Vector2(110, 110), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f); _spriteBatch.Draw(_texture2, new Vector2(130, 130), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.2f); _spriteBatch.Draw(_texture3, new Vector2(145, 145), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.3f); _spriteBatch.Draw(_texture, new Vector2(160, 160), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.5f); _spriteBatch.Draw(_texture3, new Vector2(205, 205), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0f); _spriteBatch.Draw(_texture2, new Vector2(190, 190), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.1f); _spriteBatch.End(); CheckFrames(); } // FIXME: This scissoring code is not valid in XNA. // It complains about RasterizerState being immutable // after it's bound to a GraphicsDevice. // KNI probably should too, rather than allowing mutation. // Now let's try some scissoring //_spriteBatch.Begin(); //_spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle(50, 40, (int)_clippingSize, (int)_clippingSize); //_spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = true; //_spriteBatch.Draw(_texture, new Rectangle(50, 40, 320, 40), Color.White); //_spriteBatch.DrawString(_font, "Scissor Clipping Test", new Vector2(50, 40), Color.Red); //_spriteBatch.End(); //_spriteBatch.GraphicsDevice.RasterizerState.ScissorTestEnable = false; [Test] public void DrawRequiresTexture() { _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque); Assert.Throws(() => _spriteBatch.Draw(null, new Vector2(20, 20), Color.White)); _spriteBatch.End(); } [Test] public void DrawWithTexture() { Assert.That(gd.Textures[0], Is.Null); _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.End(); Assert.That(gd.Textures[0], Is.SameAs(_texture)); } [Test] public void DrawWithCustomEffectAndTwoTextures() { Effect effect = AssetTestUtility.LoadEffect(content, "CustomSpriteBatchEffect"); var texture2 = new Texture2D(gd, 1, 1, false, SurfaceFormat.Color); effect.Parameters["SourceTexture"].SetValue(texture2); effect.Parameters["OtherTexture"].SetValue(texture2); _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, null, null, null, effect); _spriteBatch.Draw(_texture, new Vector2(20, 20), Color.White); _spriteBatch.End(); Assert.That(gd.Textures[0], Is.SameAs(_texture)); Assert.That(gd.Textures[1], Is.SameAs(texture2)); effect.Dispose(); texture2.Dispose(); } [Test] public void DrawWithLayerDepth() { PrepareFrameCapture(); // Row 0, column 0: Deferred, no depth test. _spriteBatch.Begin(); _spriteBatch.Draw( _texture, new Vector2(30, 30), null, Color.Red, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f); _spriteBatch.Draw( _texture, new Vector2(40, 40), null, Color.Green, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.Draw( _texture, new Vector2(50, 50), null, Color.Blue, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f); _spriteBatch.Draw( _texture, new Vector2(60, 60), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f); _spriteBatch.End(); // Row 0, column 1: Deferred, with depth test. _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null); _spriteBatch.Draw( _texture, new Vector2(130, 30), null, Color.Red, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f); _spriteBatch.Draw( _texture, new Vector2(140, 40), null, Color.Green, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.Draw( _texture, new Vector2(150, 50), null, Color.Blue, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f); _spriteBatch.Draw( _texture, new Vector2(160, 60), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f); _spriteBatch.End(); // Row 1, column 0: BackToFront, no depth test. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null); _spriteBatch.Draw( _texture, new Vector2(30, 130), null, Color.Red, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f); _spriteBatch.Draw( _texture, new Vector2(40, 140), null, Color.Green, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.Draw( _texture, new Vector2(50, 150), null, Color.Blue, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f); _spriteBatch.Draw( _texture, new Vector2(60, 160), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f); _spriteBatch.End(); // Row 1, column 1: BackToFront, with depth test. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null); _spriteBatch.Draw( _texture, new Vector2(130, 130), null, Color.Red, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, -1.0f); _spriteBatch.Draw( _texture, new Vector2(140, 140), null, Color.Green, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.Draw( _texture, new Vector2(150, 150), null, Color.Blue, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 1.0f); _spriteBatch.Draw( _texture, new Vector2(160, 160), null, Color.White, 0.0f, Vector2.Zero, 1.0f, SpriteEffects.None, 2.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_many() { PrepareFrameCapture(); _spriteBatch.Begin(); for (int x = 0; x < 99; x++) for (int y = 0; y < 59; y++) _spriteBatch.Draw(_texture, new Rectangle(4 + x * 8, 4 + y * 8, 4, 4), Color.White); _spriteBatch.End(); CheckFrames(); } [TestCase(SpriteSortMode.Deferred)] [TestCase(SpriteSortMode.Immediate)] public void Draw_with_viewport_changing(SpriteSortMode sortMode) { Similarity = 0.975f; PrepareFrameCapture(); // Test SpriteEffect var vp = gd.Viewport; var lvp = new Viewport(vp.X, vp.Y, vp.Width / 3, vp.Height); //Left var mvp = new Viewport(vp.X + vp.Width / 3, vp.Y, vp.Width / 3, vp.Height); //middle var rvp = new Viewport(vp.X + (vp.Width / 3) * 2, vp.Y, vp.Width / 3, vp.Height); //Right // Test viewport change gd.Viewport = rvp; _spriteBatch.Begin(sortMode, BlendState.AlphaBlend); _spriteBatch.Draw(_texture, new Vector2(10, 10), null, Color.White); gd.Viewport = mvp; _spriteBatch.Draw(_texture2, new Vector2(70, 10), null, Color.White); gd.Viewport = lvp; _spriteBatch.Draw(_texture3, new Vector2(130, 10), null, Color.White); gd.Viewport = vp; _spriteBatch.Draw(_texture2, new Vector2(190, 10), null, Color.White); _spriteBatch.End(); // Test viewport/effect BasicEffect (Vertex & Pixel shader) Matrix halfPixelOffset = Matrix.Identity; #if XNA halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0); #else // MG if (gd.UseHalfPixelOffset) halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0); #endif _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1); gd.Viewport = rvp; _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _basicEffect); _spriteBatch.Draw(_texture, new Vector2(10, 110), null, Color.White); gd.Viewport = mvp; _spriteBatch.Draw(_texture2, new Vector2(70, 110), null, Color.White); gd.Viewport = lvp; _spriteBatch.Draw(_texture3, new Vector2(130, 110), null, Color.White); gd.Viewport = vp; _spriteBatch.Draw(_texture2, new Vector2(190, 110), null, Color.White); _spriteBatch.End(); // Test BasicEffect (Vertex & Pixel shader) // re-apply projection when viewport dimensions change gd.Viewport = rvp; _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1); _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _basicEffect); _spriteBatch.Draw(_texture, new Vector2(10, 210), null, Color.White); gd.Viewport = mvp; _spriteBatch.Draw(_texture2, new Vector2(70, 210), null, Color.White); gd.Viewport = lvp; _spriteBatch.Draw(_texture3, new Vector2(130, 210), null, Color.White); gd.Viewport = vp; _basicEffect.Projection = halfPixelOffset * Matrix.CreateOrthographicOffCenter(0, gd.Viewport.Width, gd.Viewport.Height, 0, 0, 1); _spriteBatch.Draw(_texture2, new Vector2(190, 210), null, Color.White); _spriteBatch.End(); // TODO: test custom Effect with no Vertex shader gd.Viewport = rvp; _spriteBatch.Begin(sortMode, BlendState.AlphaBlend, null, null, null, _grayscaleEffect); _spriteBatch.Draw(_texture, new Vector2(10, 310), null, Color.White); gd.Viewport = mvp; _spriteBatch.Draw(_texture2, new Vector2(70, 310), null, Color.White); gd.Viewport = lvp; _spriteBatch.Draw(_texture3, new Vector2(130, 310), null, Color.White); gd.Viewport = vp; _spriteBatch.Draw(_texture2, new Vector2(190, 310), null, Color.White); _spriteBatch.End(); CheckFrames(); } } } ================================================ FILE: Tests/Framework.Graphics/SpriteFontTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class SpriteFontTest : GraphicsDeviceTestFixtureBase { private SpriteBatch _spriteBatch; private SpriteFont _defaultFont; [SetUp] public override void SetUp() { base.SetUp(); _spriteBatch = new SpriteBatch(gd); _defaultFont = content.Load(Paths.Font("Default")); } [TearDown] public override void TearDown() { _spriteBatch.Dispose(); _spriteBatch = null; base.TearDown(); } [TestCase("Default", "The quick brown fox jumps over the lazy dog. 1234567890", 605, 21)] [TestCase("Default", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 275, 59)] [TestCase("Default", "The quick brown fox jumps over the lazy dog.\r1234567890", 594, 21)] [TestCase("DataFont", "The quick brown fox jumps over the lazy dog. 1234567890", 417, 19)] [TestCase("DataFont", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 196, 53)] [TestCase("JingJing", "The quick brown fox jumps over the lazy dog. 1234567890", 918, 45)] [TestCase("JingJing", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 435, 135)] [TestCase("JingJing", "%", 21, 45)] // LSB=2, W=17, RSB=2 [TestCase("JingJing", "*", 10, 45)] // LSB=0, W=10, RSB=-1 [TestCase("Lindsey", "The quick brown fox jumps over the lazy dog. 1234567890", 1031, 49)] [TestCase("Lindsey", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 454, 139)] [TestCase("Lindsey", "B", 25, 49)] // LSB=-3, W=24, RSB=1 [TestCase("Motorwerk", "The quick brown fox jumps over the lazy dog. 1234567890", 932, 44)] [TestCase("Motorwerk", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 441, 124)] [TestCase("Motorwerk", " ", 12, 44)] // LSB=0, W=1, RSB=11 [TestCase("Motorwerk", "(", 18, 44)] // LSB=3, W=15, RSB=-6 [TestCase("Motorwerk", ")", 14, 44)] // LSB=-1, W=14, RSB=-1 [TestCase("Motorwerk", "_", 15, 44)] // LSB=-2, W=15, RSB=0 [TestCase("QuartzMS", "The quick brown fox jumps over the lazy dog. 1234567890", 947, 39)] [TestCase("QuartzMS", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 440, 111)] [TestCase("QuartzMS", "#", 20, 39)] // LSB=0, W=20, RSB=0 [TestCase("SegoeKeycaps", "The quick brown fox jumps over the lazy dog. 1234567890", 988, 20)] [TestCase("SegoeKeycaps", "The quick brown fox jumps\nover the lazy dog.\n1234567890", 448, 58)] [TestCase("SegoeKeycaps", "!", 16, 20)] // LSB=1, W=15, RSB=0 public void MeasureString_returns_correct_values(string fontName, string text, float width, float height) { var font = game.Content.Load(Paths.Font(fontName)); var actualSize = font.MeasureString(text); var expectedSize = new Vector2(width, height); Assert.That(actualSize, Is.EqualTo(expectedSize).Using(Vector2Comparer.Epsilon)); } [Test] public void Plain() { PrepareFrameCapture(); _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString( _defaultFont, "plain old text", new Vector2(50, 50), Color.Violet); // Row 1: StringBuilder test. _spriteBatch.DrawString( _defaultFont, new StringBuilder("plain old text"), new Vector2(50, 290), Color.Violet); _spriteBatch.End(); CheckFrames(); } [Test] public void Rotated() { PrepareFrameCapture(); _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString( _defaultFont, "rotated", new Vector2(50, 50), Color.Orange, MathHelper.PiOver4, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, "rotated", new Vector2(450, 50), Color.Orange, MathHelper.PiOver4, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f); // Row 1: StringBuilder test. _spriteBatch.DrawString( _defaultFont, new StringBuilder("rotated"), new Vector2(50, 290), Color.Orange, MathHelper.PiOver4, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, new StringBuilder("rotated"), new Vector2(450, 290), Color.Orange, MathHelper.PiOver4, Vector2.Zero, Vector2.One, SpriteEffects.None, 0.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Scaled() { PrepareFrameCapture(); _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString( _defaultFont, "scaled", new Vector2(50, 50), Color.Orange, 0, Vector2.Zero, 2.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, "scaled", new Vector2(450, 50), Color.Orange, 0, Vector2.Zero, new Vector2(3.0f, 1.5f), SpriteEffects.None, 0.0f); // Row 1: StringBuilder test. _spriteBatch.DrawString( _defaultFont, new StringBuilder("scaled"), new Vector2(50, 290), Color.Orange, 0, Vector2.Zero, 2.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, new StringBuilder("scaled"), new Vector2(450, 290), Color.Orange, 0, Vector2.Zero, new Vector2(3.0f, 1.5f), SpriteEffects.None, 0.0f); _spriteBatch.End(); CheckFrames(); } [TestCase(SpriteEffects.FlipHorizontally)] [TestCase(SpriteEffects.FlipVertically)] [TestCase(SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically)] public void Draw_with_SpriteEffects(SpriteEffects effects) { PrepareFrameCapture(); _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString( _defaultFont, effects.ToString(), new Vector2(50, 50), Color.Orange, 0, Vector2.Zero, 1f, effects, 0.0f); _spriteBatch.DrawString( _defaultFont, effects.ToString(), new Vector2(450, 50), Color.Orange, 0, Vector2.Zero, Vector2.One, effects, 0.0f); // Row 1: StringBuilder test. _spriteBatch.DrawString( _defaultFont, new StringBuilder(effects.ToString()), new Vector2(50, 290), Color.Orange, 0, Vector2.Zero, 1f, effects, 0.0f); _spriteBatch.DrawString( _defaultFont, new StringBuilder(effects.ToString()), new Vector2(450, 290), Color.Orange, 0, Vector2.Zero, Vector2.One, effects, 0.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Origins_rotated() { PrepareFrameCapture(); _spriteBatch.Begin(); var position = new Vector2(100, 100); var text = "origin"; _spriteBatch.DrawString( _defaultFont, text, position, Color.Orange, MathHelper.PiOver4, new Vector2(0f, 0f), 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Blue, MathHelper.PiOver4, new Vector2(40f, 0f), 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.HotPink, MathHelper.PiOver4, new Vector2(0f, 40f), 1.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Violet, MathHelper.PiOver4, new Vector2(40f, 40f), 1.0f, SpriteEffects.None, 0.0f); position = new Vector2(500, 100); _spriteBatch.DrawString( _defaultFont, text, position, Color.Orange, MathHelper.PiOver4, new Vector2(0f, 0f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Blue, MathHelper.PiOver4, new Vector2(40f, 0f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.HotPink, MathHelper.PiOver4, new Vector2(0f, 40f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Violet, MathHelper.PiOver4, new Vector2(40f, 40f), new Vector2(1.0f, 1.0f), SpriteEffects.None, 0.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Origins_scaled() { PrepareFrameCapture(); _spriteBatch.Begin(); var position = new Vector2(100, 100); var text = "origin"; _spriteBatch.DrawString( _defaultFont, text, position, Color.Orange, 0, new Vector2(0f, 0f), 0.5f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Blue, 0, new Vector2(40f, 0f), 2.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.HotPink, 0, new Vector2(0f, 40f), 0.75f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Violet, 0, new Vector2(40f, 40f), 1.0f, SpriteEffects.None, 0.0f); position = new Vector2(500, 100); _spriteBatch.DrawString( _defaultFont, text, position, Color.Orange, 0, new Vector2(0f, 0f), new Vector2(2.0f, 0.5f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Blue, 0, new Vector2(40f, 0f), new Vector2(2.0f, 2.0f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.HotPink, 0, new Vector2(0f, 40f), new Vector2(2.0f, 0.75f), SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, position, Color.Violet, 0, new Vector2(40f, 40f), new Vector2(2.0f, 1.0f), SpriteEffects.None, 0.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Draw_with_LayerDepth() { PrepareFrameCapture(); var text = "depth"; // Row 0, column 0: Deferred, no depth test. _spriteBatch.Begin(); _spriteBatch.DrawString( _defaultFont, text, new Vector2(30, 30), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(40, 40), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(40, 40), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(60, 60), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 0, column 1: Deferred, with depth test. _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null); _spriteBatch.DrawString( _defaultFont, text, new Vector2(330, 30), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(340, 40), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(350, 50), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(360, 60), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 1, column 0: BackToFront, no depth test. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null); _spriteBatch.DrawString( _defaultFont, text, new Vector2(30, 130), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(40, 140), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(50, 150), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(60, 160), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 1, column 1: BackToFront, with depth test. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null); _spriteBatch.DrawString( _defaultFont, text, new Vector2(330, 130), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(340, 140), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(350, 150), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(360, 160), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); var sb = new StringBuilder(text); // Row 2, column 0: Deferred, no depth test, StringBuilder. _spriteBatch.Begin(); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(30, 270), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(40, 280), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(40, 280), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(60, 300), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 2, column 1: Deferred, with depth test, StringBuilder. _spriteBatch.Begin(SpriteSortMode.Deferred, null, null, DepthStencilState.Default, null); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(330, 270), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(340, 280), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(350, 280), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(360, 300), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 3, column 0: BackToFront, no depth test, StringBuilder. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.None, null); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(30, 370), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(40, 380), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(50, 380), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(60, 400), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); // Row 3, column 1: BackToFront, with depth test, StringBuilder. _spriteBatch.Begin(SpriteSortMode.BackToFront, null, null, DepthStencilState.Default, null); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(330, 370), Color.Red, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.8f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(340, 380), Color.Green, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(350, 380), Color.Blue, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 0.3f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(360, 400), Color.White, 0.0f, Vector2.Zero, 4.0f, SpriteEffects.None, 1.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Hullabaloo() { PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.DrawString( _defaultFont, "hullabaloo", new Vector2(100, 150), Color.HotPink, MathHelper.ToRadians(15), new Vector2(20f, 50f), new Vector2(0.8f, 1.1f), SpriteEffects.FlipHorizontally, 0.0f); _spriteBatch.End(); CheckFrames(); } [Test] public void Hullabaloo2() { PrepareFrameCapture(); _spriteBatch.Begin(); _spriteBatch.DrawString( _defaultFont, "hullabaloo2", new Vector2(100, 150), Color.Yellow, MathHelper.ToRadians(130), new Vector2(40f, 60f), new Vector2(1.8f, 1.1f), SpriteEffects.FlipVertically, 0.0f); _spriteBatch.End(); CheckFrames(); } [TestCase("The quick brown fox jumps over the lazy dog. 1234567890", TestName = "Multiline_noNewline")] [TestCase("The quick brown fox jumps\nover the lazy dog.\n1234567890", TestName = "Multiline_Newline")] [TestCase("The quick brown fox jumps over the lazy dog.\r1234567890", TestName = "Multiline_CarriageReturn")] [TestCase(@"A programming genius called Hugh Said 'I really must see if it's true.' So he wrote a routine To ask 'What's it all mean?' But the answer was still '42'. R Humphries, Sutton Coldfield", TestName = "Multiline_verbatimString")] public void Multiline(string text) { PrepareFrameCapture(); _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString( _defaultFont, text, new Vector2(10, 10), Color.LightGreen); _spriteBatch.DrawString( _defaultFont, text, new Vector2(100, 150), Color.Yellow, MathHelper.ToRadians(20), new Vector2(40f, 60f), 0.9f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, text, new Vector2(500, 150), Color.Blue, MathHelper.ToRadians(20), new Vector2(40f, 60f), new Vector2(0.4f, 0.8f), SpriteEffects.None, 0.0f); // Row 1: StringBuilder test. var sb = new StringBuilder(text); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(10, 250), Color.LightGreen); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(100, 390), Color.Yellow, MathHelper.ToRadians(20), new Vector2(40f, 60f), 0.9f, SpriteEffects.None, 0.0f); _spriteBatch.DrawString( _defaultFont, sb, new Vector2(500, 390), Color.Blue, MathHelper.ToRadians(20), new Vector2(40f, 60f), new Vector2(0.4f, 0.8f), SpriteEffects.None, 0.0f); _spriteBatch.End(); Similarity = 0.985f; CheckFrames(); } [Test] public void Font_spacing_is_respected() { PrepareFrameCapture(); // DataFont has a non-zero Spacing property. var font = content.Load(Paths.Font("DataFont")); var text = "Now is the time for all good DataFonts"; _spriteBatch.Begin(); // Row 0: String test. _spriteBatch.DrawString(font, text, new Vector2(50, 50), Color.Violet); _spriteBatch.DrawString(font, text, new Vector2(50, 70), Color.Violet, 1f, Vector2.Zero, 1f, SpriteEffects.None, 0); _spriteBatch.DrawString(font, text, new Vector2(50, 90), Color.Violet, 1f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0); // Row 1: StringBuilder test. var sb = new StringBuilder(text); _spriteBatch.DrawString(font, sb, new Vector2(50, 290), Color.Violet); _spriteBatch.DrawString(font, sb, new Vector2(50, 310), Color.Violet, 1f, Vector2.Zero, 1f, SpriteEffects.None, 0); _spriteBatch.DrawString(font, sb, new Vector2(50, 330), Color.Violet, 1f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0); _spriteBatch.End(); CheckFrames(); } [TestCase("The rain in España stays mainly in the plain - now in français")] [TestCase("\x1f")] [TestCase("\x7f")] public void Throws_when_drawing_unavailable_characters(string text) { _spriteBatch.Begin(); Assert.Throws(() => _spriteBatch.DrawString(_defaultFont, text, Vector2.Zero, Color.Violet)); _spriteBatch.End(); } [TestCase('ñ')] [TestCase((char)127)] [TestCase((char)31)] public void Throws_when_setting_unavailable_DefaultCharacter(char character) { Assert.Throws(() => _defaultFont.DefaultCharacter = character); } [TestCase((char)32)] [TestCase((char)63)] [TestCase((char)126)] public void Does_not_throw_when_setting_available_DefaultCharacter(char character) { Assert.DoesNotThrow(() => _defaultFont.DefaultCharacter = character); } } } ================================================ FILE: Tests/Framework.Graphics/Texture2DNonVisualTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] internal class Texture2DNonVisualTest : GraphicsDeviceTestFixtureBase { Texture2D _texture; #if !XNA [TestCase("Assets/Textures/LogoOnly_64px.bmp")] [TestCase("Assets/Textures/LogoOnly_64px.tga")] #endif [TestCase("Assets/Textures/LogoOnly_64px.gif")] [TestCase("Assets/Textures/LogoOnly_64px.jpg")] [TestCase("Assets/Textures/LogoOnly_64px.png")] [TestCase("Assets/Textures/1bit.png")] [TestCase("Assets/Textures/8bit.png")] [TestCase("Assets/Textures/24bit.png")] [TestCase("Assets/Textures/32bit.png")] [TestCase("Assets/Textures/sample_1280x853.hdr")] public void FromStreamShouldWorkTest(string filename) { using (System.IO.StreamReader reader = new System.IO.StreamReader(filename)) { Assert.DoesNotThrow(() => _texture = Texture2D.FromStream(gd, reader.BaseStream)); } Assert.NotNull(_texture); try { System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(filename); System.Drawing.GraphicsUnit gu = System.Drawing.GraphicsUnit.Pixel; System.Drawing.RectangleF rf = bitmap.GetBounds(ref gu); Rectangle rt = _texture.Bounds; Assert.AreEqual((int)rf.Bottom, rt.Bottom); Assert.AreEqual((int)rf.Left, rt.Left); Assert.AreEqual((int)rf.Right, rt.Right); Assert.AreEqual((int)rf.Top, rt.Top); bitmap.Dispose(); } //The dds file test case can't be checked with System.Drawing because it does not understand this format catch { } _texture.Dispose(); _texture = null; } #if XNA [TestCase("Assets/Textures/LogoOnly_64px.bmp")] #endif // not supported [TestCase("Assets/Textures/LogoOnly_64px.tif")] [TestCase("Assets/Textures/LogoOnly_64px.dds")] [TestCase("Assets/Textures/SampleCube64DXT1Mips.dds")] public void FromStreamShouldFailTest(string filename) { using (System.IO.StreamReader reader = new System.IO.StreamReader(filename)) { Assert.Throws(() => _texture = Texture2D.FromStream(gd, reader.BaseStream)); } } [Test] public void FromStreamArgumentNullTest() { Assert.Throws(() => Texture2D.FromStream(gd, (Stream) null)); #if !XNA // XNA misses this check and throws a NullReferenceException Assert.Throws(() => Texture2D.FromStream(null, new MemoryStream())); #endif } [TestCase] public void FromStreamNotPremultiplied() { // XNA will not try to premultiply your image on // load... this test verifies that this doesn't occur. using (var stream = File.OpenRead("Assets/Textures/red_128.png")) using (var texture = Texture2D.FromStream(gd, stream)) { Assert.AreEqual(8, texture.Width); Assert.AreEqual(8, texture.Height); Assert.AreEqual(1, texture.LevelCount); var pngData = new Color[8 * 8]; texture.GetData(pngData); for (var i = 0; i < pngData.Length; i++) { Assert.AreEqual(255, pngData[i].R); Assert.AreEqual(0, pngData[i].G); Assert.AreEqual(0, pngData[i].B); Assert.AreEqual(128, pngData[i].A); } } } [TestCase] public void FromStreamAtTheEnd() { // Check whether texture can be loaded if a stream being at its end using (var memoryStream = new MemoryStream()) { using (var fileStream = File.OpenRead("Assets/Textures/red_128.png")) { fileStream.CopyTo(memoryStream); } using (var texture = Texture2D.FromStream(gd, memoryStream)) { Assert.AreEqual(8, texture.Width); Assert.AreEqual(8, texture.Height); Assert.AreEqual(1, texture.LevelCount); var pngData = new Color[8 * 8]; texture.GetData(pngData); for (var i = 0; i < pngData.Length; i++) { Assert.AreEqual(255, pngData[i].R); Assert.AreEqual(0, pngData[i].G); Assert.AreEqual(0, pngData[i].B); Assert.AreEqual(128, pngData[i].A); } } } } #if XNA // FromStream() reads the texture unchanged. // It's up to the user to apply cut-off, premultiply, etc. // This is a break from the default XNA behavior. [TestCase] #endif public void FromStreamBlackAlpha() { // XNA will make any pixel with an alpha value // of 0 into black throwing out any color data. using (var stream = File.OpenRead("Assets/Textures/blue_0.png")) using (var texture = Texture2D.FromStream(gd, stream)) { Assert.AreEqual(8, texture.Width); Assert.AreEqual(8, texture.Height); Assert.AreEqual(1, texture.LevelCount); var pngData = new Color[8 * 8]; texture.GetData(pngData); for (var i = 0; i < pngData.Length; i++) { Assert.AreEqual(0, pngData[i].R); Assert.AreEqual(0, pngData[i].G); Assert.AreEqual(0, pngData[i].B); Assert.AreEqual(0, pngData[i].A); } } } [Test] public void ZeroSizeShouldFailTest() { Texture2D texture; Assert.Throws(() => texture = new Texture2D(gd, 0, 1)); Assert.Throws(() => texture = new Texture2D(gd, 1, 0)); Assert.Throws(() => texture = new Texture2D(gd, 0, 0)); } [Test] public void SimpleGetSetDataTest() { using (var tex = new Texture2D(gd, 4, 4, false, SurfaceFormat.Color)) { const int startIndex = 5; const int x = 2; const int y = 2; const int width = 2; const int height = 2; const int elementCount = 4 * width * height; var data = new byte[startIndex + elementCount]; for (var i = 0; i < data.Length; i++) data[i] = (byte) i; var rect = new Rectangle(x, y, width, height); tex.SetData(0, rect, data, startIndex, elementCount); tex.GetData(0, rect, data, startIndex, elementCount); for (var i = 0; i < data.Length; i++) Assert.AreEqual(i, data[i]); } } [TestCase(25, 23, 1, 1, 0, 1)] [TestCase(25, 23, 1, 1, 1, 1)] [TestCase(25, 23, 2, 1, 0, 2)] [TestCase(25, 23, 2, 1, 1, 2)] [TestCase(25, 23, 1, 2, 0, 2)] [TestCase(25, 23, 1, 2, 1, 2)] [TestCase(25, 23, 2, 2, 0, 4)] [TestCase(25, 23, 2, 2, 1, 4)] public void PlatformGetDataWithOffsetTest(int rx, int ry, int rw, int rh, int startIndex, int elementsToRead) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Rectangle toReadArea = new Rectangle(rx, ry, rw, rh); Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); Color[] colors = new Color[startIndex + elementsToRead]; for (int i = 0; i < colors.Length; i++) { colors[i] = Color.White; } t.GetData(0, toReadArea, colors, startIndex, elementsToRead); for (int i = 0; i < elementsToRead; i++) { Assert.AreNotEqual(255, colors[i + startIndex].R, "colors was not overwritten in position {0}", startIndex + i); } t.Dispose(); } } [TestCase(25, 23, 2, 2, 0, 2)] [TestCase(25, 23, 2, 2, 1, 2)] public void GetDataException(int rx, int ry, int rw, int rh, int startIndex, int elementsToRead) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Rectangle toReadArea = new Rectangle(rx, ry, rw, rh); Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); Color[] colors = new Color[startIndex + elementsToRead]; for (int i = 0; i < colors.Length; i++) { colors[i] = Color.White; } Assert.Throws(() => t.GetData(0, toReadArea, colors, startIndex, elementsToRead)); t.Dispose(); } } [TestCase(4096)] public void SetData1ParameterGoodTest(int arraySize) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Color[] data = new Color[arraySize]; Color[] reference = new Color[4096]; Color[] written = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); t.SetData(data); t.GetData(written); for (int i = 0; i < written.Length; i++) { if (i < arraySize) { Assert.AreEqual(255, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].A, "Bad color written in position:{0};", i); } else { Assert.AreEqual(reference[i].R, written[i].R, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].G, written[i].G, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].B, written[i].B, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].A, written[i].A, "Color written in position:{0}; beyond array data", i); } } t.Dispose(); } } [TestCase(2000)] [TestCase(4095)] [TestCase(2000000)] [TestCase(4097)] public void SetData1ParameterExceptionTest(int arraySize) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Color[] data = new Color[arraySize]; Color[] reference = new Color[4096]; Color[] written = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); Assert.Throws(Is.InstanceOf(), () => t.SetData(data)); t.GetData(written); for (int i = 0; i < written.Length; i++) { Assert.AreEqual(reference[i].R, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].G, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].B, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].A, written[i].A, "Bad color written in position:{0};", i); } t.Dispose(); } } [TestCase(SurfaceFormat.HalfSingle, (short)(160 << 8 + 120))] #if !DESKTOPGL // format not supported [TestCase(SurfaceFormat.Vector4, (long)(200 << 48 + 180 << 32 + 160 << 16 + 120))] #endif [TestCase(SurfaceFormat.Vector2, (float)(200 << 48 + 180 << 32 + 160 << 16 + 120))] [TestCase(SurfaceFormat.Color, (float)(200 << 24 + 180 << 16 + 160 << 8 + 120))] [TestCase(SurfaceFormat.Color, (byte)150)] [TestCase(SurfaceFormat.Color, (short)(160 << 8 + 120))] [TestCase(SurfaceFormat.Single, (byte)150)] [TestCase(SurfaceFormat.Single, (short)(160 << 8 + 120))] [TestCase(SurfaceFormat.Single, (float)(200 << 24 + 180 << 16 + 160 << 8 + 120))] public void SetDataFormatTest(SurfaceFormat format, TBuffer value) where TBuffer : struct { const int textureSize = 16; var surfaceFormatSize = GetFormatSize(format); var textureSizeBytes = textureSize * surfaceFormatSize; var tSizeBytes = Marshal.SizeOf(typeof(TBuffer)); var bufferSize = textureSizeBytes / tSizeBytes; var buffer = new TBuffer[bufferSize]; for (var i = 0; i < bufferSize; i++) buffer[i] = value; var t = new Texture2D(gd, textureSize, 1, false, format); t.SetData(buffer); var buffer2 = new TBuffer[bufferSize]; t.GetData(buffer2); for (var i = 0; i < buffer.Length; i++) Assert.AreEqual(buffer[i], buffer2[i]); t.Dispose(); } [Test, Ignore("Not supported")] public void GetVector4FromVector2FormatTest() { Vector2[] buffer2 = new Vector2[4]; buffer2[0] = new Vector2(0.1f, 0.2f); buffer2[1] = new Vector2(0.3f, 0.4f); buffer2[2] = new Vector2(0.5f, 0.6f); buffer2[3] = new Vector2(0.7f, 0.8f); Texture2D t = new Texture2D(gd, 4, 1, false, SurfaceFormat.Vector2); t.SetData(buffer2); Vector4[] buffer4 = new Vector4[2]; buffer4[0] = new Vector4(42, 42, 42, 42); buffer4[1] = new Vector4(42, 42, 42, 42); // bound check t.GetData(buffer4, 0, 1); Assert.AreEqual(buffer4[0].X, 0.1f); Assert.AreEqual(buffer4[0].Y, 0.2f); Assert.AreEqual(buffer4[0].Z, 0.3f); Assert.AreEqual(buffer4[0].W, 0.4f); Assert.AreEqual(buffer4[1].X, 42); t.Dispose(); } [TestCase(SurfaceFormat.Color, (long)0)] [TestCase(SurfaceFormat.HalfSingle, (float)0)] public void SetDataFormatFailingTestTBufferTooLarge(SurfaceFormat format, TBuffer value) where TBuffer : struct { const int textureSize = 16; var surfaceFormatSize = GetFormatSize(format); var textureSizeBytes = textureSize * surfaceFormatSize; var tSizeBytes = Marshal.SizeOf(typeof(TBuffer)); var bufferSize = textureSizeBytes / tSizeBytes; var buffer = new TBuffer[bufferSize]; for (var i = 0; i < bufferSize; i++) buffer[i] = value; var t = new Texture2D(gd, textureSize, 1, false, format); Assert.Throws(() => t.SetData(buffer)); t.Dispose(); } [Test] public void SetDataFormatFailingTestModTBufferNotZero() { const int textureSize = 12; var format = SurfaceFormat.Vector4; var value = new Vector3(20, 15, 18); var surfaceFormatSize = GetFormatSize(format); var textureSizeBytes = textureSize * surfaceFormatSize; var tSizeBytes = 12; var bufferSize = textureSizeBytes / tSizeBytes; var buffer = new Vector3[bufferSize]; for (var i = 0; i < bufferSize; i++) buffer[i] = value; var t = new Texture2D(gd, textureSize, 1, false, format); Assert.Throws(() => t.SetData(buffer)); t.Dispose(); } public static int GetFormatSize(SurfaceFormat surfaceFormat) { switch (surfaceFormat) { case SurfaceFormat.Alpha8: return 1; case SurfaceFormat.HalfSingle: return 2; case SurfaceFormat.Single: case SurfaceFormat.Color: return 4; case SurfaceFormat.Vector2: return 8; case SurfaceFormat.Vector4: return 16; default: throw new ArgumentException(); } } [TestCase(4200, 0, 4096)] [TestCase(4097, 1, 4096)] [TestCase(4097, 0, 4096)] [TestCase(4096, 0, 4096)] public void SetData3ParameterGoodTest(int arraySize, int startIndex, int elements) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Color[] data = new Color[arraySize]; Color[] written = new Color[4096]; Color[] reference = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); t.SetData(data, startIndex, elements); t.GetData(written); for (int i = 0; i < written.Length; i++) { if (i < arraySize) { Assert.AreEqual(255, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].A, "Bad color written in position:{0};", i); } else { Assert.AreEqual(reference[i].R, written[i].R, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].G, written[i].G, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].B, written[i].B, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].A, written[i].A, "Color written in position:{0}; beyond array data", i); } } t.Dispose(); } } [TestCase(2000, 0, 4096)] [TestCase(4095, 0, 4095)] [TestCase(4095, 1, 4095)] [TestCase(4096, 1, 4096)] [TestCase(4096, 1, 4095)] [TestCase(4095, 1, 4096)] [TestCase(4096, 1, 4097)] [TestCase(4095, 0, 4094)] [TestCase(4097, 1, 4097)] [TestCase(4097, 1, 4098)] [TestCase(4098, 1, 4097)] [TestCase(4097, 0, 4097)] [TestCase(4096, 0, 4095)] public void SetData3ParameterExceptionTest(int arraySize, int startIndex, int elements) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Color[] data = new Color[arraySize]; Color[] written = new Color[4096]; Color[] reference = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); Assert.Throws(Is.InstanceOf(), () => t.SetData(data, startIndex, elements)); t.GetData(written); for (int i = 0; i < written.Length; i++) { Assert.AreEqual(reference[i].R, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].G, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].B, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].A, written[i].A, "Bad color written in position:{0};", i); } t.Dispose(); } } [TestCase(4096, 0, 4096, 0, 0, 64, 64)] [TestCase(4096, 0, 3969, 1, 1, 63, 63)] [TestCase(3969, 0, 3969, 1, 1, 63, 63)] [TestCase(4096, 1, 3969, 1, 1, 63, 63)] [TestCase(4097, 1, 3969, 1, 1, 63, 63)] [TestCase(3970, 1, 3969, 1, 1, 63, 63)] [TestCase(4097, 1, 4096, 0, 0, 64, 64)] public void SetData5ParameterGoodTest(int arraySize, int startIndex, int elements, int x, int y, int w, int h) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Rectangle area = new Rectangle(x, y, w, h); int areaLength = w * h; Color[] data = new Color[arraySize]; Color[] reference = new Color[4096]; Color[] written = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); t.SetData(0, area, data, startIndex, elements); t.GetData(written); for (int i = 0; i < written.Length; i++) { int rx = i % 64, ry = i / 64; if (area.Contains(rx, ry)) { Assert.AreEqual(255, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(255, written[i].A, "Bad color written in position:{0};", i); } else { Assert.AreEqual(reference[i].R, written[i].R, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].G, written[i].G, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].B, written[i].B, "Color written in position:{0}; beyond array data", i); Assert.AreEqual(reference[i].A, written[i].A, "Color written in position:{0}; beyond array data", i); } } t.Dispose(); } } [TestCase(3844, 0, 3844, 1, 1, 63, 63)] [TestCase(3845, 1, 3844, 1, 1, 63, 63)] [TestCase(3969, 0, 4096, 1, 1, 63, 63)] [TestCase(3970, 1, 4096, 1, 1, 63, 63)] [TestCase(4096, 0, 4096, -1, -1, 65, 65)] [TestCase(4096, 0, 4096, 1, 1, 63, 63)] [TestCase(4096, 0, 4095, 0, 0, 64, 64)] [TestCase(4096, 0, 3844, 1, 1, 63, 63)] [TestCase(4097, 1, 4096, 1, 1, 63, 63)] [TestCase(4097, 1, 4095, 0, 0, 64, 64)] [TestCase(4097, 1, 3844, 1, 1, 63, 63)] [TestCase(3970, 1, 4096, 1, 1, 63, 63)] public void SetData5ParameterExceptionTest(int arraySize, int startIndex, int elements, int x, int y, int w, int h) { using (System.IO.StreamReader reader = new System.IO.StreamReader("Assets/Textures/LogoOnly_64px.png")) { Rectangle area = new Rectangle(x, y, w, h); int areaLength = w * h; Color[] data = new Color[arraySize]; Color[] reference = new Color[4096]; Color[] written = new Color[4096]; for (int i = 0; i < arraySize; i++) { data[i] = Color.White; } Texture2D t = Texture2D.FromStream(gd, reader.BaseStream); t.GetData(reference); Assert.Throws(Is.InstanceOf(), () => t.SetData(0, area, data, startIndex, elements)); t.GetData(written); for (int i = 0; i < written.Length; i++) { Assert.AreEqual(reference[i].R, written[i].R, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].G, written[i].G, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].B, written[i].B, "Bad color written in position:{0};", i); Assert.AreEqual(reference[i].A, written[i].A, "Bad color written in position:{0};", i); } t.Dispose(); } } [Test] public void GetDataNegativeOrZeroRectWidthAndHeightThrows() { using (var t = new Texture2D(gd, 10, 10)) { var data = new Color[4]; var data2 = new Color[0]; Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, 2, -2), data, 0, 4)); Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, -2, 2), data, 0, 4)); Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, -2, -2), data, 0, 4)); Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, 0, 2), data2, 0, 4)); Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, 2, 0), data2, 0, 4)); Assert.Throws(() => t.GetData(0, new Rectangle(5, 5, 0, 0), data2, 0, 4)); } } [Test] public void GetAndSetDataDxtCompressed() { var t = content.Load(Paths.Texture ("random_16px_dxt")); var b = new byte[t.Width*t.Height/2]; var b2 = new byte[t.Width*t.Height/2]; t.GetData(b); t.SetData(b); t.GetData(b2); Assert.AreEqual(b, b2); // KNI allows any kind of type that is not larger than one element // while XNA only allows byte. #if !XNA var b3 = new short[t.Width*t.Height/4]; t.GetData(b3); t.SetData(b3); t.GetData(b2); Assert.AreEqual(b, b2); var b4 = new int[t.Width*t.Height/8]; t.GetData(b4); t.SetData(b4); t.GetData(b2); Assert.AreEqual(b, b2); var b5 = new long[t.Width*t.Height/16]; t.GetData(b5); t.SetData(b5); t.GetData(b2); Assert.AreEqual(b, b2); // this is too large, DXT1 blocks are 64 bits while Vector4 is 128 bits var b6 = new Vector4[t.Width*t.Height/32]; Assert.Throws(() => t.GetData(b6)); Assert.Throws(() => t.SetData(b6)); var b7 = new Vector3[t.Width*t.Height/24]; Assert.Throws(() => t.GetData(b7)); Assert.Throws(() => t.SetData(b7)); #endif t.Dispose(); } [Test] #if DESKTOPGL [Ignore("PlatformGetData fails under OpenGL!")] #endif public void LoadOddSizedDxtCompressed() { // This is testing that DXT compressed mip levels that // are not a multiple of 4 are properly loaded. var t = content.Load(Paths.Texture("red_668_dxt")); Assert.AreEqual(SurfaceFormat.Dxt1, t.Format); Assert.AreEqual(10, t.LevelCount); Assert.AreEqual(668, t.Width); Assert.AreEqual(668, t.Height); for (var m = 0; m < t.LevelCount; m++) { var w = ((t.Width >> m) + 3) & ~3; var h = ((t.Height >> m) + 3) & ~3; var size = w * h / 2; // Get the full mip level. var b = new byte[size]; t.GetData(m, null, b, 0, size); // Decompress it to validate it. var b2 = DxtDecoder.DecompressDxt1(b, t.Width >> m, t.Height >> m); // Should be a red opaque texture. for (var p=0; p < b2.Length; p+=4) { Assert.AreEqual(255, b2[p + 0]); Assert.AreEqual(0, b2[p + 1]); Assert.AreEqual(0, b2[p + 2]); Assert.AreEqual(255, b2[p + 3]); } } t.Dispose(); } // DXT1 [TestCase(8, "random_16px_dxt", 0)] [TestCase(8, "random_16px_dxt", 1)] // DXT5 [TestCase(16, "random_16px_dxt_alpha", 0)] [TestCase(16, "random_16px_dxt_alpha", 1)] public void GetAndSetDataDxtNotMultipleOf4Rounding(int bs, string texName, int mip) { var t = content.Load(Paths.Texture (texName)); var before = new byte[t.Width*t.Height*bs/16]; t.GetData(before); var b1 = new byte[bs]; var b2 = new byte[bs]; t.GetData(mip, new Rectangle(0, 0, 4, 4), b1, 0, bs); t.GetData(mip, new Rectangle(0,0,1,1), b2, 0, bs); t.SetData(mip, new Rectangle(0,0,1,1), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(0,0,1,3), b2, 0, bs); t.SetData(mip, new Rectangle(0,0,1,3), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(0,0,4,3), b2, 0, bs); t.SetData(mip, new Rectangle(0,0,4,3), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(0, 2, 4, 4), b2, 0, bs); t.SetData(mip, new Rectangle(0, 2, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(2, 2, 4, 4), b2, 0, bs); t.SetData(mip, new Rectangle(2, 2, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(3, 3, 4, 4), b2, 0, bs); t.SetData(mip, new Rectangle(3, 3, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(mip, new Rectangle(4, 4, 4, 4), b2, 0, bs); t.SetData(mip, new Rectangle(4, 4, 4, 4), b2, 0, bs); Assert.AreNotEqual(b1, b2); var after = new byte[t.Width*t.Height*bs/16]; t.GetData(after); Assert.AreEqual(before, after); t.Dispose(); } [TestCase("random_16px_dxt", 8)] [TestCase("random_16px_dxt_alpha", 16)] public void GetAndSetDataDxtDontRoundWhenOutsideBounds(string texName, int bs) { var t = content.Load(Paths.Texture(texName)); var b = new byte[bs]; // don't round if the unrounded rectangle would be outside the texture area Assert.Throws(() => t.GetData(0, new Rectangle(15, 15, 3, 3), b, 0, bs)); // this does work t.GetData(0, new Rectangle(15, 15, 1, 1), b, 0, bs); t.Dispose(); } [TestCase("random_16px_dxt", 8)] [TestCase("random_16px_dxt_alpha", 16)] public void GetAndSetDataDxtLowerMips(string texName, int bs) { var t = content.Load(Paths.Texture(texName)); var b = new byte[bs]; var b2 = new byte[bs]; t.GetData(0, new Rectangle(0,0,4,4), b, 0, bs); t.GetData(1, new Rectangle(0,0,4,4), b2, 0, bs); t.GetData(2, new Rectangle(0,0,4,4), b2, 0, bs); t.GetData(3, new Rectangle(0,0,2,2), b2, 0, bs); t.GetData(4, new Rectangle(0,0,1,1), b2, 0, bs); t.SetData(3, new Rectangle(0,0,2,2), b2, 0, bs); // would be rounded, but the rectangle is outside the texture area so it wil throw before rounding Assert.Throws(() => t.GetData(3, new Rectangle(1, 1, 2, 2), b, 0, bs)); Assert.Throws(() => t.GetData(3, new Rectangle(0, 0, 3, 3), b, 0, bs)); t.Dispose(); } [Test] public void GetDataRowPitch() { const int w = 5; const int h = 4; const int size = w * h; var tex = new Texture2D(gd, w, h, false, SurfaceFormat.Bgr565); var data = new short[size]; for (var i = 0; i < data.Length; i++) data[i] = (short) i; tex.SetData(data); var getData = new short[size]; tex.GetData(data); for (var i = 0; i < getData.Length; i++) Assert.AreEqual((short) i, data[i]); tex.Dispose(); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var texture = new Texture2D(null, 16, 16); texture.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized Texture } } } ================================================ FILE: Tests/Framework.Graphics/Texture2DTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.ContentPipeline; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class Texture2DTest : GraphicsDeviceTestFixtureBase { [TestCase(1, 1)] [TestCase(8, 8)] [TestCase(31, 7)] public void ShouldSetAndGetData(int width, int height) { var dataSize = width * height; var texture2D = new Texture2D(gd, width, height, false, SurfaceFormat.Color); var savedData = new Color[dataSize]; for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index % 255, index % 255, index % 255); texture2D.SetData(savedData); var readData = new Color[dataSize]; texture2D.GetData(readData); Assert.AreEqual(savedData, readData); texture2D.Dispose(); } [TestCase(1, 1)] [TestCase(8, 8)] [TestCase(31, 7)] public void ShouldSetAndGetDataForLevel(int width, int height) { var texture2D = new Texture2D(gd, width, height, true, SurfaceFormat.Color); for (int i = 0; i < texture2D.LevelCount; i++) { var levelSize = Math.Max(width >> i, 1) * Math.Max(height >> i, 1); var savedData = new Color[levelSize]; for (var index = 0; index < levelSize; index++) savedData[index] = new Color(index % 255, index % 255, index % 255); texture2D.SetData(i, null, savedData, 0, savedData.Length); var readData = new Color[levelSize]; texture2D.GetData(i, null, readData, 0, savedData.Length); Assert.AreEqual(savedData, readData); } texture2D.Dispose(); } [Test] public void ShouldGetDataFromRectangle() { const int dataSize = 128 * 128; var texture2D = new Texture2D(gd, 128, 128, false, SurfaceFormat.Color); var savedData = new Color[dataSize]; for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index % 255, index % 255, index % 255); texture2D.SetData(savedData); var readData = new Color[4]; texture2D.GetData(0, new Rectangle(126, 126, 2, 2), readData, 0, 4); var expectedData = new[] { new Color(189, 189, 189), new Color(190, 190, 190), new Color(62, 62, 62), new Color(63, 63, 63) }; Assert.AreEqual(expectedData, readData); texture2D.Dispose(); } #if WINDOWSDX [TestCase(SurfaceFormat.Color, false)] [TestCase(SurfaceFormat.Color, true)] [TestCase(SurfaceFormat.ColorSRgb, false)] [TestCase(SurfaceFormat.ColorSRgb, true)] public void DrawWithSRgbFormats(SurfaceFormat textureFormat, bool sRgbSourceTexture) { PrepareFrameCapture(); var spriteBatch = new SpriteBatch(gd); var width = gd.Viewport.Width; var height = gd.Viewport.Height; // Create gradient texture. This will highlight the difference // between sRGB and non-sRGB textures. var texture = new Texture2D( gd, width, height, false, textureFormat); var heightOver3 = height / 3; var textureData = new Color[width * height]; for (var y = 0; y < height; y++) for (var x = 0; x < width; x++) { var colorValue = x / (float) width; // Approximation of sRGB - it's not actually as simple as this, // but it will suffice for these tests. if (sRgbSourceTexture) colorValue = (float) Math.Pow(colorValue, 1 / 2.2); var color = (y < heightOver3) ? new Color(colorValue, 0, 0) : (y < heightOver3 * 2) ? new Color(0, colorValue, 0) : new Color(0, 0, colorValue); textureData[(y * width) + x] = color; } texture.SetData(textureData); gd.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0); spriteBatch.Begin(); spriteBatch.Draw(texture, Vector2.Zero, Color.White); spriteBatch.End(); CheckFrames(); spriteBatch.Dispose(); texture.Dispose(); } #endif #if !XNA [TestCase(1, 1)] [TestCase(8, 8)] [TestCase(31, 7)] #if DESKTOPGL [Ignore("Not yet implemented in OpenGL")] #endif public void ShouldSetAndGetDataForTextureArray(int width, int height) { const int arraySize = 4; var texture2D = new Texture2D(gd, width, height, true, SurfaceFormat.Color, arraySize); for (var i = 0; i < arraySize; i++) for (var j = 0; j < texture2D.LevelCount; j++) { var levelSize = Math.Max(width >> j, 1) * Math.Max(height >> j, 1); var savedData = new Color[levelSize]; for (var index = 0; index < levelSize; index++) savedData[index] = new Color((index + i) % 255, (index + i) % 255, (index + i) % 255); texture2D.SetData(j, i, null, savedData, 0, savedData.Length); var readData = new Color[levelSize]; texture2D.GetData(j, i, null, readData, 0, readData.Length); Assert.AreEqual(savedData, readData); } texture2D.Dispose(); } #endif #if WINDOWSDX [Test] public void TextureArrayAsRenderTargetAndShaderResource() { PrepareFrameCapture(); var solidColorTexture = new Texture2D(gd, 1, 1); solidColorTexture.SetData(new[] { Color.White }); const int arraySize = 4; // Create texture array. var textureArray = new RenderTarget2D(gd, 1, 1, false, SurfaceFormat.Color, DepthFormat.None, 1, RenderTargetUsage.PlatformContents, false, arraySize); var colors = new[] { Color.Red, Color.Green, Color.Blue, Color.Yellow }; var originalRenderTargets = gd.GetRenderTargets(); // Bind each slice of texture array as render target, and render (different) solid color to each slice. var spriteBatch = new SpriteBatch(gd); for (var i = 0; i < arraySize; i++) { gd.SetRenderTarget(textureArray, i); spriteBatch.Begin(); spriteBatch.Draw(solidColorTexture, gd.Viewport.Bounds, colors[i]); spriteBatch.End(); } // Unbind texture array. gd.SetRenderTargets(originalRenderTargets); // Now render into backbuffer, using texture array as a shader resource. Effect effect = AssetTestUtility.LoadEffect(content, "TextureArrayEffect"); effect.Parameters["Texture"].SetValue(textureArray); effect.CurrentTechnique.Passes[0].Apply(); gd.SamplerStates[0] = SamplerState.LinearClamp; // Vertex buffer is not actually used, but currently we need to set a // vertex buffer before calling DrawPrimitives. var vb = new VertexBuffer(gd, typeof(VertexPositionColor), 3, BufferUsage.WriteOnly); gd.SetVertexBuffer(vb); gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); CheckFrames(); solidColorTexture.Dispose(); spriteBatch.Dispose(); textureArray.Dispose(); effect.Dispose(); vb.Dispose(); } #endif [Test] public void SetDataRowPitch() { PrepareFrameCapture(); var t = content.Load(Paths.Texture("Logo_65x64_16bit")); var sb = new SpriteBatch(gd); sb.Begin(); sb.Draw(t, new Rectangle(100, 100, 300, 300), null, Color.White); sb.End(); t.Dispose(); sb.Dispose(); CheckFrames(); } } } ================================================ FILE: Tests/Framework.Graphics/Texture3DNonVisualTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using NUnit.Framework; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.Graphics { #if DESKTOPGL [Ignore("Texture3D is not implemented for the OpenGL backend.")] #endif [TestFixture] public class Texture3DNonVisualTest { Texture3D t; Color[] reference; const int w=50, h=50, d=50, a = w * d * h; private Game _game; [OneTimeSetUp] public void TestFixtureSetUp() { reference = new Color[a]; _game = new Game(); var graphicsDeviceManager = new GraphicsDeviceManager(_game); graphicsDeviceManager.GraphicsProfile = GraphicsProfile.HiDef; graphicsDeviceManager.ApplyChanges(); t = new Texture3D(_game.GraphicsDevice, w, h, d, false, SurfaceFormat.Color); for (int layer = 0; layer < d; layer++) { for (int i = 0; i < w * h; i++) { reference[layer * w * h + i] = new Color(layer * 5, layer * 5, layer * 5, layer * 5); } } } [OneTimeTearDown] public void TestFixtureTearDown() { _game.Dispose(); t.Dispose(); } [SetUp] public void TestSetUp() { t.SetData(reference); } [Test] public void ZeroSizeShouldFailTest() { Texture3D texture; var gd = _game.GraphicsDevice; Assert.Throws(() => texture = new Texture3D(gd, 0, 1, 1, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 1, 0, 1, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 1, 1, 0, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 0, 0, 1, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 1, 0, 0, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 0, 1, 0, false, SurfaceFormat.Color)); Assert.Throws(() => texture = new Texture3D(gd, 0, 0, 0, false, SurfaceFormat.Color)); } [Test] public void SetData1ParameterTest() { Color[] written = new Color[a]; t.GetData(written); Assert.AreEqual(reference, written); } [TestCase(a, 0, a)] [TestCase(a + 1, 0, a)] [TestCase(a + 1, 1, a)] public void SetData3ParametersSuccessTest(int arrayLength, int startIndex, int elementCount) { Color[] write = new Color[arrayLength]; Color[] written = new Color[a]; for (int i = startIndex; i < arrayLength; i++) { write[i] = new Color(23, 23, 23, 23); } t.SetData(write, startIndex, elementCount); t.GetData(written); for (int i = 0; i < a; i++) { if (i < startIndex) Assert.AreNotEqual(reference[i], written[i], string.Format("Color written from before startIndex")); else if (i < elementCount + startIndex) Assert.AreEqual(write[i + startIndex], written[i], string.Format("bad color in position {0}", i)); else Assert.AreEqual(reference[i], written[i], string.Format("Color written after elementCount")); } } [TestCase(a, 0, a - 1)] [TestCase(a - 1, 0, a)] [TestCase(a, 1, a)] [TestCase(a, 0, a + 1)] [TestCase(a + 1, 1, a + 1)] public void SetData3ParametersExceptionTest(int arrayLength, int startIndex, int elementCount) { Color[] write = new Color[arrayLength]; Color[] written = new Color[a]; for (int i = startIndex; i < arrayLength; i++) { write[i] = new Color(23, 23, 23, 23); } Assert.Throws(Is.InstanceOf(), () =>t.SetData(write, startIndex, elementCount)); } [TestCase((w - 2) * (h - 2) * (d - 2), 0, (w - 2) * (h - 2) * (d - 2), 1, 1, 1, w - 2, h - 2, d - 2)] [TestCase(a, 0, a, 0, 0, 0, w, h, d)] [TestCase(a + 1, 1, a, 0, 0, 0, w, h, d)] public void SetData9ParametersSuccessTest(int arrayLength, int startIndex, int elementCount, int x, int y, int z, int w, int h, int d) { Color[] write = new Color[arrayLength]; Color[] written = new Color[Texture3DNonVisualTest.w * Texture3DNonVisualTest.h * Texture3DNonVisualTest.d]; for (int i = startIndex; i < arrayLength; i++) { write[i] = new Color(23, 23, 23, 23); } t.SetData(0, x, y, x + w, y + h, z, z + d, write, startIndex, elementCount); t.GetData(written); int cx, cy, cz; for (int i = 0, j = 0; i < Texture3DNonVisualTest.w * Texture3DNonVisualTest.h * Texture3DNonVisualTest.d; i++) { cx = i % Texture3DNonVisualTest.w; cy = (i / Texture3DNonVisualTest.w) % Texture3DNonVisualTest.h; cz = ((i / Texture3DNonVisualTest.w) / Texture3DNonVisualTest.h) % Texture3DNonVisualTest.d; if (cx >= x && cx < w + x && cy >= y && cy < h + y && cz >= z && cz < d + z) Assert.AreEqual(write[startIndex + j++], written[i], string.Format("bad color in position x:{0};y:{1};z:{2};i:{3}", cx, cy, cz, i)); else Assert.AreEqual(reference[i], written[i], string.Format("bad color in position x:{0};y:{1};z:{2};i:{3}, outside requested area", cx, cy, cz, i)); } } [TestCase(a, 0, a, -1, -1, -1, w + 1, h + 1, d + 1)] [TestCase(a, 1, a, 0, 0, 0, w, h, d)] public void SetData9ParametersExceptionTest(int arrayLength, int startIndex, int elementCount, int x, int y, int z, int w, int h, int d) { Color[] write = new Color[arrayLength]; for (int i = startIndex; i < arrayLength; i++) { write[i] = new Color(23, 23, 23, 23); } Assert.Throws(Is.InstanceOf(), () => t.SetData(0, x, y, x + w, y + h, z, z + d, write, startIndex, elementCount)); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var texture = new Texture3D(null, 16, 16, 16, false, SurfaceFormat.Color); texture.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized Texture } } } ================================================ FILE: Tests/Framework.Graphics/Texture3DTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { #if DESKTOPGL [Ignore("Texture3D is not implemented for the OpenGL backend.")] #endif [TestFixture] class Texture3DTest : GraphicsDeviceTestFixtureBase { [TestCase(1, 1, 1)] [TestCase(8, 8, 8)] [TestCase(31, 7, 13)] public void ShouldSetAndGetData(int width, int height, int depth) { var dataSize = width * height * depth; var texture3D = new Texture3D(gd, width, height, depth, false, SurfaceFormat.Color); var savedData = new Color[dataSize]; for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index, index, index); texture3D.SetData(savedData); var readData = new Color[dataSize]; texture3D.GetData(readData); Assert.AreEqual(savedData, readData); texture3D.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/TextureCubeTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class TextureCubeTest : GraphicsDeviceTestFixtureBase { [Test] public void ZeroSizeShouldFailTest() { TextureCube texture; Assert.Throws(() => texture = new TextureCube(gd, 0, false, SurfaceFormat.Color)); } [TestCase(1)] [TestCase(8)] [TestCase(31)] public void ShouldSetAndGetData(int size) { var dataSize = size * size; var textureCube = new TextureCube(gd, size, false, SurfaceFormat.Color); for (var i = 0; i < 6; i++) { var savedData = new Color[dataSize]; for (var index = 0; index < dataSize; index++) savedData[index] = new Color(index + i, index + i, index + i); textureCube.SetData((CubeMapFace) i, savedData); var readData = new Color[dataSize]; textureCube.GetData((CubeMapFace) i, readData); Assert.AreEqual(savedData, readData); } textureCube.Dispose(); } [Test] public void GetAndSetDataDxtCompressed() { var t = content.Load(Paths.Texture ("SampleCube64DXT1Mips")); for (var f = 0; f < 6; f++) { var face = (CubeMapFace) f; var b = new byte[t.Size*t.Size/2]; var b2 = new byte[t.Size*t.Size/2]; t.GetData(face, b); t.SetData(face, b); t.GetData(face, b2); Assert.AreEqual(b, b2); // KNI allows any kind of type that is not larger than one element // while XNA only allows byte. #if !XNA var b3 = new short[t.Size*t.Size/4]; t.GetData(face, b3); t.SetData(face, b3); t.GetData(face, b2); Assert.AreEqual(b, b2); var b4 = new int[t.Size*t.Size/8]; t.GetData(face, b4); t.SetData(face, b4); t.GetData(face, b2); Assert.AreEqual(b, b2); var b5 = new long[t.Size*t.Size/16]; t.GetData(face, b5); t.SetData(face, b5); t.GetData(face, b2); Assert.AreEqual(b, b2); // this is too large, DXT1 blocks are 64 bits while Vector4 is 128 bits var b6 = new Vector4[t.Size*t.Size/32]; Assert.Throws(() => t.GetData(face, b6)); Assert.Throws(() => t.SetData(face, b6)); var b7 = new Vector3[t.Size*t.Size/24]; Assert.Throws(() => t.GetData(face, b7)); Assert.Throws(() => t.SetData(face, b7)); #endif } t.Dispose(); } // DXT1 [TestCase(8, "SampleCube64DXT1Mips", 0)] [TestCase(8, "SampleCube64DXT1Mips", 1)] // TODO DXT5 //[TestCase(16, "SampleCube64DXT5Mips", 0)] //[TestCase(16, "SampleCube64DXT5Mips", 1)] public void GetAndSetDataDxtNotMultipleOf4Rounding(int bs, string texName, int mip) { var t = content.Load(Paths.Texture (texName)); for (var f = 0; f < 6; f++) { var face = (CubeMapFace) f; var before = new byte[t.Size*t.Size*bs/16]; t.GetData(face, before); var b1 = new byte[bs]; var b2 = new byte[bs]; t.GetData(face, mip, new Rectangle(0, 0, 4, 4), b1, 0, bs); t.GetData(face, mip, new Rectangle(0, 0, 1, 1), b2, 0, bs); t.SetData(face, mip, new Rectangle(0, 0, 1, 1), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(0, 0, 1, 3), b2, 0, bs); t.SetData(face, mip, new Rectangle(0, 0, 1, 3), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(0, 0, 4, 3), b2, 0, bs); t.SetData(face, mip, new Rectangle(0, 0, 4, 3), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(0, 2, 4, 4), b2, 0, bs); t.SetData(face, mip, new Rectangle(0, 2, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(2, 2, 4, 4), b2, 0, bs); t.SetData(face, mip, new Rectangle(2, 2, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(3, 3, 4, 4), b2, 0, bs); t.SetData(face, mip, new Rectangle(3, 3, 4, 4), b2, 0, bs); Assert.AreEqual(b1, b2); t.GetData(face, mip, new Rectangle(4, 4, 4, 4), b2, 0, bs); t.SetData(face, mip, new Rectangle(4, 4, 4, 4), b2, 0, bs); Assert.AreNotEqual(b1, b2); var after = new byte[t.Size*t.Size*bs/16]; t.GetData(face, after); Assert.AreEqual(before, after); } t.Dispose(); } [TestCase("SampleCube64DXT1Mips", 8)] //[TestCase("SampleCube64DXT5Mips", 16)] public void GetAndSetDataDxtDontRoundWhenOutsideBounds(string texName, int bs) { var t = content.Load(Paths.Texture(texName)); var b = new byte[bs]; for (var f = 0; f < 6; f++) { var face = (CubeMapFace) f; // don't round if the unrounded rectangle would be outside the texture area Assert.Throws(() => t.GetData(face, 0, new Rectangle(63, 63, 3, 3), b, 0, bs)); // this does work t.GetData(face, 0, new Rectangle(63, 63, 1, 1), b, 0, bs); } t.Dispose(); } [TestCase("SampleCube64DXT1Mips", 8)] //[TestCase("SampleCube64DXT5Mips", 16)] public void GetAndSetDataDxtLowerMips(string texName, int bs) { var t = content.Load(Paths.Texture(texName)); for (var f = 0; f < 6; f++) { var face = (CubeMapFace) f; var b = new byte[bs]; var b2 = new byte[bs]; t.GetData(face, 0, new Rectangle(0, 0, 4, 4), b, 0, bs); t.GetData(face, 1, new Rectangle(0, 0, 4, 4), b2, 0, bs); t.GetData(face, 2, new Rectangle(0, 0, 4, 4), b2, 0, bs); t.GetData(face, 3, new Rectangle(0, 0, 2, 2), b2, 0, bs); t.GetData(face, 4, new Rectangle(0, 0, 1, 1), b2, 0, bs); t.SetData(face, 3, new Rectangle(0, 0, 2, 2), b2, 0, bs); // would be rounded, but the rectangle is outside the texture area so it wil throw before rounding Assert.Throws(() => t.GetData(face, 5, new Rectangle(1, 1, 2, 2), b, 0, bs)); Assert.Throws(() => t.GetData(face, 5, new Rectangle(0, 0, 3, 3), b, 0, bs)); } t.Dispose(); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { var texture = new TextureCube(null, 16, false, SurfaceFormat.Color); texture.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized Texture } } } ================================================ FILE: Tests/Framework.Graphics/VertexBufferTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class VertexBufferTest : GraphicsDeviceTestFixtureBase { VertexPositionTexture[] savedData = new VertexPositionTexture[] { new VertexPositionTexture(new Vector3(1,2,3), new Vector2(0.1f,0.2f)), new VertexPositionTexture(new Vector3(4,5,6), new Vector2(0.3f,0.4f)), new VertexPositionTexture(new Vector3(7,8,9), new Vector2(0.5f,0.6f)), new VertexPositionTexture(new Vector3(10,11,12), new Vector2(0.7f,0.8f)) }; VertexPositionTexture vertexZero = new VertexPositionTexture(Vector3.Zero, Vector2.Zero); //[TestCase(true)] [TestCase(false)] public void ShouldSetAndGetData(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ?new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) :new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); VertexPositionTexture[] readData = new VertexPositionTexture[4]; vertexBuffer.GetData(readData, 0, 4); Assert.AreEqual(savedData, readData); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetAndGetData_elementCount(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); VertexPositionTexture[] readData = new VertexPositionTexture[4]; vertexBuffer.GetData(readData, 0, 2); Assert.AreEqual(savedData[0], readData[0]); Assert.AreEqual(savedData[1], readData[1]); Assert.AreEqual(vertexZero, readData[2]); Assert.AreEqual(vertexZero, readData[3]); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetAndGetData_startIndex(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); VertexPositionTexture[] readData = new VertexPositionTexture[4]; vertexBuffer.GetData(readData, 2, 2); Assert.AreEqual(vertexZero, readData[0]); Assert.AreEqual(vertexZero, readData[1]); Assert.AreEqual(savedData[0], readData[2]); Assert.AreEqual(savedData[1], readData[3]); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetAndGetData_offsetInBytes(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); VertexPositionTexture[] readData = new VertexPositionTexture[2]; int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride; int offsetInBytes = vertexStride * 2; vertexBuffer.GetData(offsetInBytes, readData, 0, 2, vertexStride); Assert.AreEqual(savedData[2], readData[0]); Assert.AreEqual(savedData[3], readData[1]); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetAndGetDataBytes(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData); vertexBuffer.SetData(savedDataBytes); if (dynamic) { DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer; dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None); } VertexPositionTexture[] readData = new VertexPositionTexture[4]; vertexBuffer.GetData(readData, 0, 4); Assert.AreEqual(savedData, readData); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetBytesAndGetBytes(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData); vertexBuffer.SetData(savedDataBytes); if (dynamic) { DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer; dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None); } byte[] readData = new byte[savedDataBytes.Length]; vertexBuffer.GetData(readData, 0, readData.Length); Assert.AreEqual(savedDataBytes, readData); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void ShouldSetBytesAndGetStructData(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); byte[] savedDataBytes = new byte[] { 1,2,3,4,5,6,7,8 }; vertexBuffer.SetData(savedDataBytes); if (dynamic) { DynamicVertexBuffer dynamicVertexBuffer = vertexBuffer as DynamicVertexBuffer; dynamicVertexBuffer.SetData(savedDataBytes, 0, savedDataBytes.Length, SetDataOptions.None); } Color[] readData = new Color[2]; vertexBuffer.GetData(0, readData, 0, readData.Length, 1); Assert.AreEqual(readData[0].R, savedDataBytes[0]); Assert.AreEqual(readData[0].G, savedDataBytes[1]); Assert.AreEqual(readData[0].B, savedDataBytes[2]); Assert.AreEqual(readData[0].A, savedDataBytes[3]); Assert.AreEqual(readData[1].R, savedDataBytes[4]); Assert.AreEqual(readData[1].G, savedDataBytes[5]); Assert.AreEqual(readData[1].B, savedDataBytes[6]); Assert.AreEqual(readData[1].A, savedDataBytes[7]); vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false, -1, 0, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 0, 0, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 0, 1, true, null)] [TestCase(false, 0, -1, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 0, 80, true, null)] [TestCase(false, 0, 81, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 1, 0, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 1, 1, true, null)] [TestCase(false, 1, 79, true, null)] [TestCase(false, 1, 80, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 79, 1, true, null)] [TestCase(false, 79, 2, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 80, 0, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 80, 1, false, typeof(ArgumentOutOfRangeException))] public void SetDataWithElementCount(bool dynamic, int startIndex, int elementCount, bool shouldSucceed, Type expectedExceptionType) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length,BufferUsage.None); byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData); if (!shouldSucceed) Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(savedDataBytes, startIndex, elementCount)); else { vertexBuffer.SetData(savedDataBytes, startIndex, elementCount); byte[] readDataBytes = new byte[savedDataBytes.Length]; vertexBuffer.GetData(readDataBytes, startIndex, elementCount); Assert.AreEqual( savedDataBytes.Skip(startIndex).Take(elementCount).ToArray(), readDataBytes.Skip(startIndex).Take(elementCount).ToArray()); } vertexBuffer.Dispose(); } [TestCase(false, 1, -1, typeof(ArgumentOutOfRangeException))] [TestCase(false, 0, 0, typeof(ArgumentOutOfRangeException))] [TestCase(false, 80, 0, null)] [TestCase(false, 80, 1, null)] [TestCase(false, 1, 2, null)] [TestCase(false, 1, 40, null)] [TestCase(false, 2, 40, null)] [TestCase(false, 2, 80, typeof(InvalidOperationException))] [TestCase(false, 1, 80, null)] [TestCase(false, 4, 12, null)] #if XNA [TestCase(false, 1, 81, null)] [TestCase(false, 2, 81, typeof(InvalidOperationException))] #else // We throw when the vertex stride is too large [TestCase(false, 1, 81, typeof(ArgumentOutOfRangeException))] [TestCase(false, 2, 81, typeof(ArgumentOutOfRangeException))] #endif public void SetDataWithElementCountAndVertexStride(bool dynamic, int elementCount, int vertexStride, Type expectedExceptionType) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); byte[] savedDataBytes = ArrayUtil.ConvertFrom(savedData); if (expectedExceptionType != null) Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(0, savedDataBytes, 0, elementCount, vertexStride)); else { vertexBuffer.SetData(0, savedDataBytes, 0, elementCount, vertexStride); byte[] readDataBytes = new byte[savedDataBytes.Length]; vertexBuffer.GetData(0, readDataBytes, 0, elementCount, vertexStride); Assert.AreEqual( savedDataBytes.Take(elementCount).ToArray(), readDataBytes.Take(elementCount).ToArray()); } vertexBuffer.Dispose(); } [Test] public void GetSetDataVertexStrideTest() { const int size = 5; VertexPositionTexture[] data = new VertexPositionTexture[size]; for (int i = 0; i < data.Length; i++) { data[i] = new VertexPositionTexture( new Vector3(i * 3, i * 3 + 1, i * 3 + 2), new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10)); } VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexPositionTexture.VertexDeclaration, data.Length, BufferUsage.None); vertexBuffer.SetData(data); Vector2[] textureCoords = new Vector2[2 * size + 1]; textureCoords[0] = new Vector2(-42, 42); vertexBuffer.GetData(3 * 4, textureCoords, 1, size, 20); // first one should not be overwritten Assert.AreEqual(new Vector2(-42, 42), textureCoords[0]); // last should not be overwritten for (int i = 1 + size; i< textureCoords.Length; i++) Assert.AreEqual(Vector2.Zero, textureCoords[i]); for (int i = 0; i < size; i++) { int index = i + 1; Vector2 expected = new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10); Assert.AreEqual(expected, textureCoords[index]); } vertexBuffer.SetData(3 * 4, textureCoords, 1, size, 20); vertexBuffer.GetData(3 * 4, textureCoords, 1, size, 20); // first one should not be overwritten Assert.AreEqual(new Vector2(-42, 42), textureCoords[0]); // last should not be overwritten for (int i = 1 + size; i< textureCoords.Length; i++) Assert.AreEqual(Vector2.Zero, textureCoords[i]); for (int i = 0; i < size; i++) { int index = i + 1; Vector2 expected = new Vector2(i * 2 / (float) 10, (i * 2 + 1) / (float) 10); Assert.AreEqual(expected, textureCoords[index]); } } //[TestCase(true)] [TestCase(false, 1, 20, true, null)] [TestCase(false, 3, 20, true, null)] [TestCase(false, 4, 0, true, null)] [TestCase(false, 4, 16, false, typeof(ArgumentOutOfRangeException))] [TestCase(false, 4, 20, true, null)] [TestCase(false, 5, 20, false, typeof(ArgumentOutOfRangeException))] public void SetDataStructWithElementCountAndVertexStride(bool dynamic, int elementCount, int vertexStride, bool shouldSucceed, Type expectedExceptionType) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length,BufferUsage.None); if (!shouldSucceed) Assert.Throws(expectedExceptionType, () => vertexBuffer.SetData(0, savedData, 0, elementCount, vertexStride)); else { vertexBuffer.SetData(0, savedData, 0, elementCount, vertexStride); VertexPositionTexture[] readData = new VertexPositionTexture[savedData.Length]; vertexBuffer.GetData(0, readData, 0, elementCount, vertexStride); Assert.AreEqual( savedData.Take(elementCount).ToArray(), readData.Take(elementCount).ToArray()); } vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void GetPosition(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); Vector3[] readData = new Vector3[5]; readData[4] = new Vector3(42, 42, 42); int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride; vertexBuffer.GetData(0, readData, 0, 4, vertexStride); Assert.AreEqual(savedData[0].Position, readData[0]); Assert.AreEqual(savedData[1].Position, readData[1]); Assert.AreEqual(savedData[2].Position, readData[2]); Assert.AreEqual(savedData[3].Position, readData[3]); Assert.AreEqual(new Vector3(42, 42, 42), readData[4]); // bound check vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void SetPosition(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); Vector3[] positions = new Vector3[] { savedData[0].Position, savedData[1].Position, savedData[2].Position, savedData[3].Position }; int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride; vertexBuffer.SetData(0, positions, 0, 4, vertexStride); Vector3[] readData = new Vector3[5]; readData[4] = new Vector3(42, 42, 42); vertexBuffer.GetData(0, readData, 0, 4, vertexStride); Assert.AreEqual(savedData[0].Position, readData[0]); Assert.AreEqual(savedData[1].Position, readData[1]); Assert.AreEqual(savedData[2].Position, readData[2]); Assert.AreEqual(savedData[3].Position, readData[3]); Assert.AreEqual(new Vector3(42, 42, 42), readData[4]); // bound check vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void GetTextureCoordinate(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); vertexBuffer.SetData(savedData); Vector2[] readData = new Vector2[5]; readData[4] = new Vector2(42, 42); int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride; int offsetInBytes = VertexPositionTexture.VertexDeclaration.GetVertexElements()[1].Offset; vertexBuffer.GetData(offsetInBytes, readData, 0, 4, vertexStride); Assert.AreEqual(savedData[0].TextureCoordinate, readData[0]); Assert.AreEqual(savedData[1].TextureCoordinate, readData[1]); Assert.AreEqual(savedData[2].TextureCoordinate, readData[2]); Assert.AreEqual(savedData[3].TextureCoordinate, readData[3]); Assert.AreEqual(new Vector2(42, 42), readData[4]); // bound check vertexBuffer.Dispose(); } //[TestCase(true)] [TestCase(false)] public void SetTextureCoordinate(bool dynamic) { VertexBuffer vertexBuffer = (dynamic) ? new DynamicVertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None) : new VertexBuffer(gd, typeof(VertexPositionTexture), savedData.Length, BufferUsage.None); Vector2[] texCoords = new Vector2[] { savedData[0].TextureCoordinate, savedData[1].TextureCoordinate, savedData[2].TextureCoordinate, savedData[3].TextureCoordinate }; int vertexStride = VertexPositionTexture.VertexDeclaration.VertexStride; int offsetInBytes = VertexPositionTexture.VertexDeclaration.GetVertexElements()[1].Offset; vertexBuffer.SetData(offsetInBytes, texCoords, 0, 4, vertexStride); Vector2[] readData = new Vector2[5]; readData[4] = new Vector2(42, 42); vertexBuffer.GetData(offsetInBytes, readData, 0, 4, vertexStride); Assert.AreEqual(savedData[0].TextureCoordinate, readData[0]); Assert.AreEqual(savedData[1].TextureCoordinate, readData[1]); Assert.AreEqual(savedData[2].TextureCoordinate, readData[2]); Assert.AreEqual(savedData[3].TextureCoordinate, readData[3]); Assert.AreEqual(new Vector2(42, 42), readData[4]); // bound check vertexBuffer.Dispose(); } [StructLayout(LayoutKind.Sequential)] private struct VertexTextureCoordinateTest : IVertexType { public Vector3 Normal; public Vector2 TextureCoordinate; public static readonly VertexDeclaration VertexDeclaration = new VertexDeclaration( new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0), new VertexElement(12, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0)); VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } } [Test] public void ShouldSucceedWhenVertexFormatDoesMatchShader() { VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexPositionTexture.VertexDeclaration, 3, BufferUsage.None); gd.SetVertexBuffer(vertexBuffer); Effect effect = new BasicEffect(gd); effect.CurrentTechnique.Passes[0].Apply(); Assert.DoesNotThrow(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)); vertexBuffer.Dispose(); } [Test] #if DESKTOPGL [Ignore("we should figure out if there's a way to check this in OpenGL")] #endif public void ShouldThrowHelpfulExceptionWhenVertexFormatDoesNotMatchShader() { VertexBuffer vertexBuffer = new VertexBuffer(gd, VertexTextureCoordinateTest.VertexDeclaration, 3, BufferUsage.None); gd.SetVertexBuffer(vertexBuffer); Effect effect = new BasicEffect(gd); effect.CurrentTechnique.Passes[0].Apply(); Exception ex = Assert.Throws(() => gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)); #if XNA Assert.That(ex.Message, Is.EqualTo("The current vertex declaration does not include all the elements required by the current vertex shader. Position0 is missing.")); #else Assert.That(ex.Message, Is.EqualTo("An error occurred while preparing to draw. " + "This is probably because the current vertex declaration does not include all the elements " + "required by the current vertex shader. The current vertex declaration includes these elements: " + "NORMAL0, TEXCOORD0.")); #endif vertexBuffer.Dispose(); } [Test] public void NullDeviceShouldThrowArgumentNullException() { Assert.Throws(() => { VertexBuffer vertexBuffer = new VertexBuffer(null, typeof(VertexPositionTexture), 3, BufferUsage.None); vertexBuffer.Dispose(); }); GC.GetTotalMemory(true); // collect uninitialized vertexBuffer } } } ================================================ FILE: Tests/Framework.Graphics/ViewportTest.cs ================================================ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests.Graphics { class ViewportTest : GraphicsDeviceTestFixtureBase { [Test] public void Affects_draw_origin() { PrepareFrameCapture(); var spriteBatch = new SpriteBatch(gd); var swatch = content.Load(Paths.Texture("white-64")); gd.Clear(Color.CornflowerBlue); gd.Viewport = new Viewport(20, 40, 100, 100); spriteBatch.Begin(); spriteBatch.Draw(swatch, new Vector2(10, 20), Color.GreenYellow); spriteBatch.End(); CheckFrames(); spriteBatch.Dispose(); swatch.Dispose(); } [Test] public void Does_not_clip_device_clear() { PrepareFrameCapture(); var presentParams = gd.PresentationParameters; gd.Viewport = new Viewport( 0, 0, presentParams.BackBufferWidth, presentParams.BackBufferHeight); gd.Clear(Color.CornflowerBlue); gd.Viewport = new Viewport(30, 40, 100, 200); gd.Clear(Color.Red); CheckFrames(); } [Test] public void Clips_SpriteBatch_draws() { PrepareFrameCapture(); var spriteBatch = new SpriteBatch(gd); var swatch = content.Load(Paths.Texture("white-64")); gd.Clear(Color.CornflowerBlue); gd.Viewport = new Viewport(30, 40, 50, 60); spriteBatch.Begin(); spriteBatch.Draw( swatch, new Vector2(20, -20), null, Color.Indigo, MathHelper.PiOver4, Vector2.Zero, Vector2.One, SpriteEffects.None, 0); spriteBatch.End(); CheckFrames(); spriteBatch.Dispose(); swatch.Dispose(); } } } ================================================ FILE: Tests/Framework.Graphics/VisualMiscellaneousTests.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework; using Kni.Tests.Components; using NUnit.Framework; namespace Kni.Tests.Graphics { [TestFixture] class VisualMiscellaneousTests : VisualTestFixtureBase { [Test] public void DrawOrder_falls_back_to_order_of_addition_to_Game() { Game.PreDrawWith += (sender, e) => { Game.GraphicsDevice.Clear(Color.CornflowerBlue); }; Game.Components.Add(new ImplicitDrawOrderComponent(Game)); RunMultiFrameTest(captureCount: 5); } [TestCase(true)] [TestCase(false)] public void TexturedQuad_lighting(bool enableLighting) { Game.Components.Add(new TexturedQuadComponent(Game, enableLighting)); RunSingleFrameTest(); } [Test] public void SpaceshipModel() { Game.Components.Add(new SpaceshipModelDrawComponent(Game)); RunMultiFrameTest(captureCount: 10, captureStride: 2); } } } ================================================ FILE: Tests/Framework.Input/GamePadTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using NUnit.Framework; namespace Kni.Tests.Input { public class GamePadTest { #region GamePadButtons #if !XNA [TestCaseSource("GetButtons")] public void GamePadButtonsTest(params Buttons[] buttons) { var gpb = new GamePadButtons(buttons); Assert.AreEqual(buttons.Contains(Buttons.A) ? ButtonState.Pressed : ButtonState.Released, gpb.A); Assert.AreEqual(buttons.Contains(Buttons.B) ? ButtonState.Pressed : ButtonState.Released, gpb.B); Assert.AreEqual(buttons.Contains(Buttons.Back) ? ButtonState.Pressed : ButtonState.Released, gpb.Back); Assert.AreEqual(buttons.Contains(Buttons.X) ? ButtonState.Pressed : ButtonState.Released, gpb.X); Assert.AreEqual(buttons.Contains(Buttons.Y) ? ButtonState.Pressed : ButtonState.Released, gpb.Y); Assert.AreEqual(buttons.Contains(Buttons.Start) ? ButtonState.Pressed : ButtonState.Released, gpb.Start); Assert.AreEqual(buttons.Contains(Buttons.LeftShoulder) ? ButtonState.Pressed : ButtonState.Released, gpb.LeftShoulder); Assert.AreEqual(buttons.Contains(Buttons.LeftStick) ? ButtonState.Pressed : ButtonState.Released, gpb.LeftStick); Assert.AreEqual(buttons.Contains(Buttons.RightShoulder) ? ButtonState.Pressed : ButtonState.Released, gpb.RightShoulder); Assert.AreEqual(buttons.Contains(Buttons.RightStick) ? ButtonState.Pressed : ButtonState.Released, gpb.RightStick); Assert.AreEqual(buttons.Contains(Buttons.BigButton) ? ButtonState.Pressed : ButtonState.Released, gpb.BigButton); } #endif #endregion #region DPad [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released)] [TestCase(ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Released)] [TestCase(ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Released)] [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released)] [TestCase(ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Pressed)] public void DpadTest(ButtonState up, ButtonState down, ButtonState left, ButtonState right) { var pad = new GamePadDPad(up, down, left, right); Assert.AreEqual(up, pad.Up); Assert.AreEqual(down, pad.Down); Assert.AreEqual(left, pad.Left); Assert.AreEqual(right, pad.Right); #if !XNA var pad2 = new GamePadDPad(up, down, left, right); Assert.AreEqual(pad, pad2); Assert.AreEqual(pad.GetHashCode(), pad2.GetHashCode()); var buttons = (Buttons) 0; if (up == ButtonState.Pressed) buttons |= Buttons.DPadUp; if (down == ButtonState.Pressed) buttons |= Buttons.DPadDown; if (left == ButtonState.Pressed) buttons |= Buttons.DPadLeft; if (right == ButtonState.Pressed) buttons |= Buttons.DPadRight; var pad3 = new GamePadDPad(buttons); Assert.AreEqual(pad, pad3); Assert.AreEqual(pad.GetHashCode(), pad3.GetHashCode()); #endif } #endregion #region Triggers [Test] public void TriggersTest([Range(-0.5f, 1.5f, 0.5f)] float left, [Range(1.5f, -0.5f, -0.5f)] float right) { var triggers = new GamePadTriggers(left, right); Assert.AreEqual(MathHelper.Clamp(left, 0f, 1f), triggers.Left); Assert.AreEqual(MathHelper.Clamp(right, 0f, 1f), triggers.Right); #if !XNA var triggers2 = new GamePadTriggers(left, right); Assert.AreEqual(triggers, triggers2); Assert.AreEqual(triggers.GetHashCode(), triggers2.GetHashCode()); #endif } #endregion #region Thumbsticks #if !XNA [TestCaseSource("ThumbStickVirtualButtonsIgnoreDeadZoneTestCases")] public void ThumbStickVirtualButtonsIgnoreDeadZone(Vector2 left, Vector2 right, GamePadDeadZone deadZone, Buttons expectedButtons) { var state = new GamePadState(new GamePadThumbSticks(left, right, deadZone, deadZone), new GamePadTriggers(), new GamePadButtons(), new GamePadDPad()); Assert.AreEqual(expectedButtons, GetAllPressedButtons(state)); } #endif private static IEnumerable ThumbStickVirtualButtonsIgnoreDeadZoneTestCases { get { yield return new TestCaseData( Vector2.Zero, Vector2.Zero, GamePadDeadZone.Circular, (Buttons)0); yield return new TestCaseData( new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.Circular, Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp); yield return new TestCaseData( new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.None, Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp); yield return new TestCaseData( new Vector2(1f, 0.1f), new Vector2(0.1f, 1f), GamePadDeadZone.IndependentAxes, Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp); yield return new TestCaseData( new Vector2(0.5f, -0.5f), new Vector2(-0.5f, 0.5f), GamePadDeadZone.Circular, Buttons.LeftThumbstickRight | Buttons.LeftThumbstickDown | Buttons.RightThumbstickLeft | Buttons.RightThumbstickUp); yield return new TestCaseData( new Vector2(0.1f, -0.1f), new Vector2(-0.1f, 0.1f), GamePadDeadZone.None, (Buttons)0); yield return new TestCaseData( new Vector2(0.4f, -0.4f), new Vector2(-0.4f, 0.4f), GamePadDeadZone.IndependentAxes, Buttons.LeftThumbstickRight | Buttons.LeftThumbstickDown | Buttons.RightThumbstickLeft | Buttons.RightThumbstickUp); yield return new TestCaseData( new Vector2(0.4f, 0f), new Vector2(0f, 0.4f), GamePadDeadZone.Circular, Buttons.LeftThumbstickRight | Buttons.RightThumbstickUp); } } private static Buttons GetAllPressedButtons(GamePadState state) { Buttons buttons = 0; foreach (var button in Enum.GetValues(typeof(Buttons)).Cast().Where(state.IsButtonDown)) buttons |= button; return buttons; } #if !XNA [Test] public void ThumbsticksCircularDeadZoneClamping() { var left = Vector2.One; var right = Vector2.One; var sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.None, GamePadDeadZone.None); Assert.AreEqual(sticks.Left.X, 1); Assert.AreEqual(sticks.Left.Y, 1); Assert.AreEqual(sticks.Right.X, 1); Assert.AreEqual(sticks.Right.Y, 1); sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.IndependentAxes, GamePadDeadZone.IndependentAxes); Assert.AreEqual(sticks.Left.X, 1); Assert.AreEqual(sticks.Left.Y, 1); Assert.AreEqual(sticks.Right.X, 1); Assert.AreEqual(sticks.Right.Y, 1); sticks = new GamePadThumbSticks(left, right, GamePadDeadZone.Circular, GamePadDeadZone.Circular); Assert.Less(sticks.Left.X, 1); Assert.Less(sticks.Left.Y, 1); Assert.Less(sticks.Right.X, 1); Assert.Less(sticks.Right.Y, 1); } #endif [TestCaseSource("PublicConstructorClampsValuesTestCases")] public void PublicConstructorClampsValues(Vector2 left, Vector2 right, Vector2 expectedLeft, Vector2 expectedRight) { var gamePadThumbSticks = new GamePadThumbSticks(left, right); Assert.That(gamePadThumbSticks.Left, Is.EqualTo(expectedLeft).Using(Vector2Comparer.Epsilon)); Assert.That(gamePadThumbSticks.Right, Is.EqualTo(expectedRight).Using(Vector2Comparer.Epsilon)); } private static IEnumerable PublicConstructorClampsValuesTestCases { get { yield return new TestCaseData( Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero); yield return new TestCaseData( Vector2.One, Vector2.One, Vector2.One, Vector2.One); yield return new TestCaseData( -Vector2.One, -Vector2.One, -Vector2.One, -Vector2.One); yield return new TestCaseData( new Vector2(-2.7f, 5.6f), new Vector2(3.5f, -4.8f), new Vector2(-1f, 1f), new Vector2(1f, -1f)); yield return new TestCaseData( new Vector2(34f, 65f), new Vector2(-33f, -17f), new Vector2(1f, 1f), new Vector2(-1f, -1f)); } } #endregion #region State [TestCase((Buttons)0, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released })] [TestCase(Buttons.DPadDown, new[] { ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Released })] [TestCase(Buttons.DPadLeft, new[] { ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Released })] [TestCase(Buttons.DPadRight, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released })] [TestCase(Buttons.DPadUp, new[] { ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Pressed })] public void ConstructDPadStateWithButtonsArray(Buttons button, ButtonState[] expectedDPadButtonStates) { var state = new GamePadState(Vector2.Zero, Vector2.Zero, 0f, 0f, button != 0 ? new Buttons[] {button} : new Buttons[] {}); if (button != 0) Assert.True(state.IsButtonDown(button)); Assert.AreEqual(expectedDPadButtonStates[0], state.DPad.Down, "DPad.Down Pressed or Released"); Assert.AreEqual(expectedDPadButtonStates[1], state.DPad.Left, "DPad.Left Pressed or Released"); Assert.AreEqual(expectedDPadButtonStates[2], state.DPad.Right, "DPad.Right Pressed or Released"); Assert.AreEqual(expectedDPadButtonStates[3], state.DPad.Up, "DPad.Up Pressed or Released"); } private const int Count = 6; public static IEnumerable GetButtons() { return new[] { // All Enum.GetValues(typeof(Buttons)).Cast().ToArray(), // None new Buttons[0], // Random new [] { Buttons.Start, Buttons.LeftStick, Buttons.DPadDown, Buttons.A}, new [] { Buttons.Back, Buttons.BigButton, Buttons.LeftStick, Buttons.Y, Buttons.B, Buttons.RightShoulder, Buttons.LeftTrigger}, new [] { Buttons.RightTrigger, Buttons.RightStick, Buttons.RightShoulder, Buttons.DPadDown, Buttons.DPadLeft }, new [] { Buttons.Start, Buttons.Back, Buttons.LeftShoulder, Buttons.X, Buttons.Y, Buttons.B, Buttons.A } }; } [Test, Sequential] public void TestState([Random(-1f, 1f, Count)] double leftX, [Random(-1f, 1f, Count)] double leftY, [Random(-1f, 1f, Count)] double rightX, [Random(-1f, 1f, Count)] double rightY, [Random(0f, 1f, Count)] double doubleLT, [Random(0f, 1f, Count)] double doubleRT, [ValueSource("GetButtons")] Buttons[] buttons, [Values(true, false, true, false)] bool isConnected) { var leftStick = new Vector2((float) leftX, (float) leftY); var rightStick = new Vector2((float) rightX, (float) rightY); var leftTrigger = (float) doubleLT; var rightTrigger = (float) doubleRT; Buttons allButtons = 0; if (buttons.Any()) foreach (var button in buttons) allButtons |= button; var state = new GamePadState(leftStick, rightStick, leftTrigger, rightTrigger, allButtons); #if !XNA state.IsConnected = isConnected; Assert.AreEqual(isConnected, state.IsConnected); #endif Assert.AreEqual(leftStick, state.ThumbSticks.Left); Assert.AreEqual(rightStick, state.ThumbSticks.Right); Assert.AreEqual(leftTrigger, state.Triggers.Left); Assert.AreEqual(rightTrigger, state.Triggers.Right); AssertButtons(buttons, state); } private static void AssertButtons(IEnumerable pressedButtons, GamePadState state) { Buttons joinedButtons = 0; foreach (var button in pressedButtons) joinedButtons |= button; #if !XNA var gamePadButtons = state.Buttons; Assert.AreEqual(joinedButtons, gamePadButtons._buttons); #endif // all buttons except for thumbstick position buttons and triggers (they're not controlled via buttons here) var allButtons = Enum.GetValues(typeof(Buttons)).OfType() .Where(b => !Regex.IsMatch(Enum.GetName(typeof(Buttons), b), "(Thumbstick|Trigger)")); foreach (var button in allButtons) { if (pressedButtons.Contains(button)) { Assert.IsTrue(state.IsButtonDown(button)); Assert.IsFalse(state.IsButtonUp(button)); } else { Assert.IsTrue(state.IsButtonUp(button)); Assert.IsFalse(state.IsButtonDown(button)); } } } #endregion } } ================================================ FILE: Tests/Framework.Input/GestureRecognizerTest.cs ================================================ using System; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input.Touch; using Kni.Tests.Framework; using NUnit.Framework; namespace Kni.Tests.Input { /// /// Tests the gesture recognition of the TouchPanelState class. (This will be split out in to another class in the future) /// [TestFixture] class GestureRecognizerTest { private const GestureType AllDrags = GestureType.DragComplete | GestureType.FreeDrag | GestureType.HorizontalDrag | GestureType.VerticalDrag; private const GestureType AllGestures = GestureType.DoubleTap | GestureType.DragComplete | GestureType.Flick | GestureType.FreeDrag | GestureType.Hold | GestureType.HorizontalDrag | GestureType.Pinch | GestureType.PinchComplete | GestureType.Tap | GestureType.VerticalDrag; private TimeSpan GameTimeForFrame(int frameNo) { return TimeSpan.FromSeconds(frameNo / 60D); } [OneTimeSetUp] public void OneTimeSetUp() { Game game = new Game(); TouchPanel.WindowHandle = game.Window.Handle; TouchPanel.DisplayWidth = game.Window.ClientBounds.Width; TouchPanel.DisplayHeight = game.Window.ClientBounds.Height; } [TearDown] public void TearDown() { TouchPanel.EnabledGestures = GestureType.None; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().TestReleaseAllTouches(); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); TouchPanel.GetState(); } [Test] [Order(0)] public void DoingNothingMakesNoGestures() { TouchPanel.EnabledGestures = AllGestures; Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Order(1)] public void BasicTapGesture() { TouchPanel.EnabledGestures = GestureType.Tap; var pos = new Vector2(100, 150); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.Tap, gesture.GestureType); Assert.AreEqual(pos, gesture.Position); } [Test] [Order(2)] [TestCase(true)] [TestCase(false)] public void BasicDoubleTapGesture(bool enableTap) { GestureSample gesture; TouchPanel.EnabledGestures = GestureType.DoubleTap; if (enableTap) TouchPanel.EnabledGestures |= GestureType.Tap; var pos = new Vector2(100, 150); //Do a first tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Will make a tap event if tap is enabled if (enableTap) { Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.Tap, gesture.GestureType); Assert.AreEqual(pos, gesture.Position); } else { Assert.False(TouchPanel.IsGestureAvailable); } //Now do the second tap in the same location, this will make a double tap on press (but no tap) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.DoubleTap, gesture.GestureType); Assert.AreEqual(pos, gesture.Position); //This release should make no gestures ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Order(3)] [Description("Do 2 quick taps, but make the second tap not near the first. Should not make a double tap")] public void DoubleTapTooFar() { TouchPanel.EnabledGestures = GestureType.DoubleTap; var pos1 = new Vector2(100, 150); var pos2 = new Vector2(100, 150 + TouchPanelStrategy.TapJitterTolerance + 1); //Do a first tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos1); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos1); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Now do the second tap in a different location ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos2); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Shouldn't make a double tap Assert.False(TouchPanel.IsGestureAvailable); } [Test] [TestCase(GestureType.None)] [TestCase(GestureType.FreeDrag | GestureType.DragComplete)] [Description("Hold a finger down, then perform a tap and double tap with another, this should not make any tap gestures")] public void MultiFingerTap(GestureType otherEnabledGestures) { //TODO: This test is based on current behavior. We need to verify that XNA behaves the same //TODO: Need a test for how pinch and tap interact TouchPanel.EnabledGestures = otherEnabledGestures | GestureType.Tap | GestureType.DoubleTap; var pos = new Vector2(100, 150); //Place a finger down, this finger will never be released ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, new Vector2(10)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Place a new finger down for a tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Release it, should not make a tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Press the finger down again, should not make a double tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(3, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Description("Do 2 taps with a long time between. Should not make a double tap")] public void DoubleTapTooSlow() { TouchPanel.EnabledGestures = GestureType.DoubleTap; var pos = new Vector2(100, 150); //Do a first tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Now wait 500ms (we require it within 300ms) for (int frame = 3; frame < 33; frame++) { Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Shouldn't make a double tap Assert.False(TouchPanel.IsGestureAvailable); } [Test] public void BasicHold() { TouchPanel.EnabledGestures = GestureType.Hold; var pos = new Vector2(100, 150); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); //We shouldn't generate the hold until the required time has passed TimeSpan gt = TimeSpan.Zero; do { Assert.False(TouchPanel.IsGestureAvailable); TimeSpan frameSpan = new TimeSpan(TouchPanelStrategy.TimeRequiredForHold.Ticks / 4); gt = gt + frameSpan; Thread.Sleep(frameSpan); FrameworkDispatcher.Update(); } while (gt < TouchPanelStrategy.TimeRequiredForHold); //The last Update should have generated a hold Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.Hold, gesture.GestureType); Assert.AreEqual(pos, gesture.Position); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Description("Do a Tap, Double Tap, Hold using 2 taps. Should get gestures for each one")] public void TapDoubleTapHold() { TouchPanel.EnabledGestures = GestureType.Tap | GestureType.DoubleTap | GestureType.Hold; var pos = new Vector2(100, 100); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Release it, should make a tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.Tap, gesture.GestureType); //Place finger again, should make a double tap ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.DoubleTap, gesture.GestureType); //Now hold it for a while to make a hold gesture TimeSpan gt = TimeSpan.Zero; do { Assert.False(TouchPanel.IsGestureAvailable); TimeSpan frameSpan = new TimeSpan(TouchPanelStrategy.TimeRequiredForHold.Ticks / 4); gt = gt + frameSpan; Thread.Sleep(frameSpan); FrameworkDispatcher.Update(); } while (gt < (TouchPanelStrategy.TimeRequiredForHold)); //The last Update should have generated a hold Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.Hold, gesture.GestureType); } [Test] [TestCase(AllDrags, GestureType.HorizontalDrag)] [TestCase(GestureType.HorizontalDrag, GestureType.HorizontalDrag)] [TestCase(AllDrags, GestureType.VerticalDrag)] [TestCase(GestureType.VerticalDrag, GestureType.VerticalDrag)] public void BasicDirectionalDrag(GestureType enabledGestures, GestureType direction) { TouchPanel.EnabledGestures = enabledGestures; var startPos = new Vector2(200, 200); Vector2 diffVec; if (direction == GestureType.HorizontalDrag) diffVec = new Vector2(10, -1); else //Vertical diffVec = new Vector2(1, -10); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Move it until it should have made a drag int diff = 0; int frame = 1; while (diff * 10 < TouchPanelStrategy.TapJitterTolerance) { Assert.False(TouchPanel.IsGestureAvailable); diff ++; frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + diff * diffVec); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } //We should have a gesture now Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); //Should get the correct type at the new touch location, with the given delta Assert.AreEqual(direction, gesture.GestureType); Assert.AreEqual(startPos + diff * diffVec, gesture.Position); //Delta has only movement in the direction of the drag if (direction == GestureType.HorizontalDrag) Assert.AreEqual(new Vector2(10, 0), gesture.Delta); else //Vertical Assert.AreEqual(new Vector2(0, -10), gesture.Delta); //If all gestures are enabled (DragComplete is enabled), releasing our touch will generate a DragComplete gesture frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + diff * diffVec); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); if (enabledGestures == AllDrags) { Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.DragComplete, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); //This is (0,0) in XNA too. It's weird though! } else { Assert.False(TouchPanel.IsGestureAvailable); } } [Test] [TestCase(AllDrags)] [TestCase(GestureType.FreeDrag | GestureType.DragComplete)] [TestCase(GestureType.FreeDrag)] [Description("Drag on an angle, it should generate a FreeDrag event, not a directional one")] public void BasicFreeDragTest(GestureType enabledGestures) { TouchPanel.EnabledGestures = enabledGestures; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Move it until it should have made a drag int diff = 0; int frame = 1; while (new Vector2(diff).Length() < TouchPanelStrategy.TapJitterTolerance) { Assert.False(TouchPanel.IsGestureAvailable); diff += 5; frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(diff)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } //We should have a gesture now Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); //Should get the correct type at the new touch location, with the given delta Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); Assert.AreEqual(startPos + new Vector2(diff), gesture.Position); Assert.AreEqual(new Vector2(5), gesture.Delta); //If DragComplete is enabled, releasing our touch will generate a DragComplete gesture frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(diff)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); if ((enabledGestures & GestureType.DragComplete) == GestureType.DragComplete) { Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.DragComplete, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); //This is (0,0) in XNA too. It's weird though! } else { Assert.False(TouchPanel.IsGestureAvailable); } } [Test] [Description("If the user does a horizontal drag, this should be picked up as a free drag instead if horizontal is not enabled")] public void FreeDragIfDirectionalDisabled() { TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.VerticalDrag; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Move it until it should have made a drag int diff = 0; int frame = 1; while (new Vector2(diff, 0).Length() < TouchPanelStrategy.TapJitterTolerance) { Assert.False(TouchPanel.IsGestureAvailable); diff += 5; frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(diff, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } //We should have a gesture now Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); //Should get the correct type at the new touch location, with the given delta Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); Assert.AreEqual(startPos + new Vector2(diff, 0), gesture.Position); Assert.AreEqual(new Vector2(5, 0), gesture.Delta); } [Test] [Description("Start a drag then disable gestures. Gestures events should just stop, no DragComplete gesture should happen")] public void DisableGesturesWhileDragging() { TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Drag it, should get a drag ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(40, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); //Disable gestures TouchPanel.EnabledGestures = GestureType.None; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Release that touch, should make no gesture ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Enable both gestures again, just place the finger down and release it //Should make no gesture ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(2, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Description("Start a drag then disable gestures. Re-Enable them without releasing the finger. Releasing it then should make a DragComplete")] public void DisableGesturesWhileDragging2() { TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Drag it, should get a drag ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(40, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); //Disable gestures TouchPanel.EnabledGestures = GestureType.None; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Enable both gestures again, release the finger TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete; //Release that touch, should make no gesture ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.DragComplete, gesture.GestureType); } [Test] [Description("Start a drag then disable gestures. Release finger and replace, then re-enable gestures and release. Should not make a DragComplete")] public void DisableGesturesWhileDragging3() { TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Drag it, should get a drag ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(40, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); //Disable gestures TouchPanel.EnabledGestures = GestureType.None; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Release the finger, should make no gesture (gestures are disabled) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Press it down again ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Enable both gestures again TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete; //Release the second touch, should make no gesture ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(2, startPos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Description("Enable the tap gesture while dragging with no gestures enabled. No gestures should happen")] public void EnableTapWhileDragging() { //Based on https://github.com/mono/MonoGame/pull/1543#issuecomment-15004057 var pos = new Vector2(10, 10); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Drag it a bit ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos + new Vector2(40, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); TouchPanel.EnabledGestures = GestureType.Tap; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos + new Vector2(80, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); } [Test] public void BasicFlick() { TouchPanel.EnabledGestures = GestureType.Flick; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Move it until it should have made a flick int diff = 0; int frame = 1; while (new Vector2(diff, 0).Length() < TouchPanelStrategy.TapJitterTolerance) { Assert.False(TouchPanel.IsGestureAvailable); diff += 30; frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(diff, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } Assert.False(TouchPanel.IsGestureAvailable); //Now release frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(diff, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Now we should have the flick Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.Flick, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); //Could check Delta here, it contains the flick velocity } [Test] [Description("Do a short movement within TapJitterTolerance, this should not make a flick even if it is quick")] public void ShortMovementDoesntMakeAFlick() { TouchPanel.EnabledGestures = GestureType.Flick; var startPos = new Vector2(200, 200); //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Then release it at the edge of the detection size ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(TouchPanelStrategy.TapJitterTolerance, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //This should not make a flick. If the distance is 1 greater it will. Assert.False(TouchPanel.IsGestureAvailable); } [Test] [Description("If Flick and FreeDrag are enabled, both events should be generated without impacting each other. " + "There should be a flick and a DragComplete at the end in that order")] public void FlickAndFreeDrag() { TouchPanel.EnabledGestures = GestureType.Flick | GestureType.FreeDrag | GestureType.DragComplete; var startPos = new Vector2(200, 200); GestureSample gesture; //Place the finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, startPos); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Move it until it should have made a flick int diff = 0; int frame = 1; while (frame < 4) { diff += 40; frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, startPos + new Vector2(diff, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Each drag should make a FreeDrag Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.False(TouchPanel.IsGestureAvailable); Assert.AreEqual(GestureType.FreeDrag, gesture.GestureType); Assert.AreEqual(startPos + new Vector2(diff, 0), gesture.Position); } Assert.False(TouchPanel.IsGestureAvailable); //Now release frame++; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, startPos + new Vector2(diff, 0)); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Now we should have the flick Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.Flick, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); //And then the DragComplete Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.DragComplete, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); //And that should be it Assert.False(TouchPanel.IsGestureAvailable); } [Test] public void BasicPinch() { //TODO: This test is based on current behavior. We need to verify that XNA behaves the same TouchPanel.EnabledGestures = GestureType.Pinch | GestureType.PinchComplete; var pos1 = new Vector2(200, 200); var pos2 = new Vector2(400, 200); //Place a finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos1); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //Place the other finger down ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos2); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); //Now we should have a pinch Assert.True(TouchPanel.IsGestureAvailable); var gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.Pinch, gesture.GestureType); Assert.AreEqual(pos1, gesture.Position); Assert.AreEqual(pos2, gesture.Position2); //If we do nothing, we shouldn't get more pinch events Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.False(TouchPanel.IsGestureAvailable); //But if we move a finger, we should get an updated pinch pos2 += new Vector2(50, 0); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(2, pos2); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.Pinch, gesture.GestureType); Assert.AreEqual(pos1, gesture.Position); Assert.AreEqual(pos2, gesture.Position2); //Now releasing one of the fingers should make a pinch complete event pos1 -= new Vector2(0, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos1); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); Assert.True(TouchPanel.IsGestureAvailable); gesture = TouchPanel.ReadGesture(); Assert.AreEqual(GestureType.PinchComplete, gesture.GestureType); Assert.AreEqual(Vector2.Zero, gesture.Position); Assert.AreEqual(Vector2.Zero, gesture.Position2); //We should have no more events Assert.False(TouchPanel.IsGestureAvailable); } } } ================================================ FILE: Tests/Framework.Input/JoystickTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Input; using NUnit.Framework; namespace Kni.Tests.Input { public class JoystickTest { [TestCase(new [] { 12345, -12345 }, new [] { ButtonState.Pressed, ButtonState.Released }, true)] [TestCase(new [] { -7324, -32000 }, new [] { ButtonState.Pressed, ButtonState.Pressed }, false)] public void TestState(int[] axes, ButtonState[] buttons, bool isConnected) { JoystickHat[] hats = new[] { new JoystickHat(Buttons.DPadLeft | Buttons.DPadDown), new JoystickHat(Buttons.DPadLeft | Buttons.DPadUp | Buttons.DPadRight) }; JoystickState state = new JoystickState(); state.Axes = axes; state.Buttons = buttons; state.Hats = hats; state.IsConnected = isConnected; Assert.AreEqual(axes, state.Axes); Assert.AreEqual(buttons, state.Buttons); Assert.AreEqual(hats, state.Hats); Assert.AreEqual(isConnected, state.IsConnected); } [Test] public void JoyStickHatTest( [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState left, [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState right, [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState up, [Values(ButtonState.Pressed, ButtonState.Released)] ButtonState down) { Buttons dPadButtons = (Buttons)0; dPadButtons |= (left == ButtonState.Pressed) ? Buttons.DPadLeft : (Buttons)0; dPadButtons |= (right == ButtonState.Pressed) ? Buttons.DPadRight: (Buttons)0; dPadButtons |= (up == ButtonState.Pressed) ? Buttons.DPadUp : (Buttons)0; dPadButtons |= (down == ButtonState.Pressed) ? Buttons.DPadDown : (Buttons)0; JoystickHat hat = new JoystickHat(dPadButtons); Assert.AreEqual(left, hat.Left); Assert.AreEqual(right, hat.Right); Assert.AreEqual(up, hat.Up); Assert.AreEqual(down, hat.Down); } } } ================================================ FILE: Tests/Framework.Input/KeyboardTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using Microsoft.Xna.Framework.Input; using NUnit.Framework; namespace Kni.Tests.Input { class KeyboardTest { [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps })] public void CtorParams(Keys[] keys) { var state = new KeyboardState(keys); CollectionAssert.AreEquivalent(state.GetPressedKeys(), keys); foreach (Keys key in Enum.GetValues(typeof(Keys))) { var keyDown = keys.Contains(key); Assert.AreEqual(keyDown ? KeyState.Down : KeyState.Up, state[key]); Assert.AreEqual(keyDown, state.IsKeyDown(key)); Assert.AreEqual(!keyDown, state.IsKeyUp(key)); } } #if !XNA [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps }, true, false)] [TestCase(new[] { Keys.Right, Keys.Down, Keys.LeftAlt, Keys.LeftShift }, true, true)] [TestCase(new[] { Keys.Delete, Keys.U, Keys.RightWindows, Keys.L, Keys.NumPad2 }, false, false)] [TestCase(new[] { Keys.F9, Keys.F12, Keys.VolumeUp, Keys.OemAuto, Keys.NumPad3 }, false, false)] [TestCase(new[] { Keys.OemMinus, Keys.OemTilde, Keys.Tab, Keys.Zoom }, true, false)] public void TestState(Keys[] keys, bool capsLock, bool numLock) { var keyList = keys.ToList(); var state = new KeyboardState(keys, capsLock, numLock); CollectionAssert.AreEquivalent(state.GetPressedKeys(), keys); Assert.AreEqual(state.CapsLock, capsLock); Assert.AreEqual(state.NumLock, numLock); foreach (Keys key in Enum.GetValues(typeof(Keys))) { var keyDown = keyList.Contains(key); Assert.AreEqual(state.IsKeyDown(key), keyDown); Assert.AreEqual(state.IsKeyUp(key), !keyDown); } } [TestCase(new[] { Keys.Up, Keys.A, Keys.Left, Keys.Oem8, Keys.Apps })] public void TestGetPressedKeysGarbageless(Keys[] keys) { var state = new KeyboardState(keys); int count = state.GetPressedKeyCount(); Assert.AreEqual(keys.Length, count); Keys[] newKeysArray = new Keys[count]; state.GetPressedKeys(newKeysArray); CollectionAssert.AreEquivalent(keys, newKeysArray); } #endif [Test] public void TestGetState() { Keyboard.GetState(); } } } ================================================ FILE: Tests/Framework.Input/MouseTest.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using NUnit.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework; namespace Kni.Tests.Input { class MouseTest { [Test] [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released)] [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed)] [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released)] [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released)] [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed)] public void Ctor(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2) { var state = new MouseState(x, y, scrollWheel, leftButton, middleButton, rightButton, xButton1, xButton2); Assert.AreEqual(state.X, x); Assert.AreEqual(state.Y, y); #if !XNA Assert.AreEqual(state.Position, new Point(x, y)); #endif Assert.AreEqual(state.ScrollWheelValue, scrollWheel); Assert.AreEqual(state.LeftButton, leftButton); Assert.AreEqual(state.MiddleButton, middleButton); Assert.AreEqual(state.RightButton, rightButton); Assert.AreEqual(state.XButton1, xButton1); Assert.AreEqual(state.XButton2, xButton2); #if !XNA Assert.AreEqual(state.HorizontalScrollWheelValue, 0); #endif } [Test] [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, 0)] [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, 32)] [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, 695)] [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, 968)] [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, 4)] public void CtorWithHorizontalScroll(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2, int horizontalScrollWheel) { #if !XNA var state = new MouseState(x, y, scrollWheel, horizontalScrollWheel, 0, 0, leftButton, middleButton, rightButton, xButton1, xButton2); #else var state = new MouseState(x, y, scrollWheel, leftButton, middleButton, rightButton, xButton1, xButton2); #endif Assert.AreEqual(state.X, x); Assert.AreEqual(state.Y, y); #if !XNA Assert.AreEqual(state.Position, new Point(x, y)); #endif Assert.AreEqual(state.ScrollWheelValue, scrollWheel); Assert.AreEqual(state.LeftButton, leftButton); Assert.AreEqual(state.MiddleButton, middleButton); Assert.AreEqual(state.RightButton, rightButton); Assert.AreEqual(state.XButton1, xButton1); Assert.AreEqual(state.XButton2, xButton2); #if !XNA Assert.AreEqual(state.HorizontalScrollWheelValue, horizontalScrollWheel); #endif } #if !XNA [TestCase(0, 0, 0, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, ButtonState.Released, 0)] [TestCase(13, 22, 31, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Pressed, 32)] [TestCase(476, 585, 694, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, 695)] [TestCase(749, 858, 967, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Released, 968)] [TestCase(1, 2, 3, ButtonState.Pressed, ButtonState.Released, ButtonState.Released, ButtonState.Pressed, ButtonState.Pressed, 4)] public void SetGet(int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2, int horizontalScrollWheel) { var state = new MouseState { X = x, Y = y, ScrollWheelValue = scrollWheel, LeftButton = leftButton, MiddleButton = middleButton, RightButton = rightButton, XButton1 = xButton1, XButton2 = xButton2, HorizontalScrollWheelValue = horizontalScrollWheel }; Assert.AreEqual(state.X, x); Assert.AreEqual(state.Y, y); Assert.AreEqual(state.ScrollWheelValue, scrollWheel); Assert.AreEqual(state.LeftButton, leftButton); Assert.AreEqual(state.MiddleButton, middleButton); Assert.AreEqual(state.RightButton, rightButton); Assert.AreEqual(state.XButton1, xButton1); Assert.AreEqual(state.XButton2, xButton2); Assert.AreEqual(state.HorizontalScrollWheelValue, horizontalScrollWheel); var state2 = new MouseState(x, y, scrollWheel, horizontalScrollWheel, 0, 0, leftButton, middleButton, rightButton, xButton1, xButton2); Assert.AreEqual(state, state2); Assert.AreEqual(state.GetHashCode(), state2.GetHashCode()); } #endif [Test] public void TestGetState() { Mouse.GetState(); } } } ================================================ FILE: Tests/Framework.Input/TouchCollectionTest.cs ================================================ using Microsoft.Xna.Framework.Input.Touch; using NUnit.Framework; namespace Kni.Tests.Framework { [TestFixture] class TouchCollectionTest { [Test] public void WorksWhenConstructedEmpty() { TouchCollection collection = new TouchCollection(); Assert.AreEqual(0, collection.Count); foreach (var touch in collection) Assert.Fail("Shouldn't have any touches in an empty collection"); Assert.AreEqual(-1, collection.IndexOf(new TouchLocation())); TouchLocation touchLocation; Assert.False(collection.FindById(1, out touchLocation)); } } } ================================================ FILE: Tests/Framework.Input/TouchLocationTest.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using NUnit.Framework; namespace Kni.Tests.Framework { [TestFixture] class TouchLocationTest { } } ================================================ FILE: Tests/Framework.Input/TouchPanelTest.cs ================================================ using System; using System.Linq; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input.Touch; using Kni.Tests.Framework; using NUnit.Framework; namespace Kni.Tests.Input { [TestFixture] internal class TouchPanelTest { private TimeSpan GameTimeForFrame(int frameNo) { return TimeSpan.FromSeconds(frameNo / 60D); } [OneTimeSetUp] public void OneTimeSetUp() { Game game = new Game(); TouchPanel.WindowHandle = game.Window.Handle; TouchPanel.DisplayWidth = game.Window.ClientBounds.Width; TouchPanel.DisplayHeight = game.Window.ClientBounds.Height; } [TearDown] public void TearDown() { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().TestReleaseAllTouches(); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); TouchPanel.GetState(); } [Test] [Order(0)] public void InitiallyHasNoTouches() { var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); Assert.AreEqual(true, state.IsReadOnly); } [Test] [Order(1)] public void PressedStartsATouch() { var pos = new Vector2(100, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var touch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, touch.State); Assert.AreEqual(pos, touch.Position); } [Test] [Order(2)] [Description("In XNA if you press then move your finger before GetState is called, the initial touch position is the latest position of the touch")] public void PressedThenMoveStartsATouchAtNewPosition() { var pos = new Vector2(101, 50); var pos2 = new Vector2(101, 100); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var touch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, touch.State); Assert.AreEqual(pos2, touch.Position); } [Test] [Order(3)] public void MovedDoesntStartATouch(TouchLocationState providedState) { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, new Vector2(102, 50)); var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); } [Test] [Order(3)] public void ReleasedDoesntStartATouch() { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, new Vector2(102, 50)); var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); } [Test] [Order(3)] public void CanceledDoesntStartATouch() { ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddCanceledEvent(1, new Vector2(102, 50)); var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); } [Test] [Order(4)] public void PressedAgesToMovedAfterGetState() { var pos = new Vector2(103, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var initialState = TouchPanel.GetState(); var initialTouch = initialState[0]; var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var touch = state[0]; Assert.AreEqual(TouchLocationState.Moved, touch.State); Assert.AreEqual(pos, touch.Position); Assert.AreEqual(initialTouch.Id, touch.Id); } [Test] [Order(5)] public void MovingTouchUpdatesPosition() { var pos1 = new Vector2(104, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos1); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var touch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, touch.State); Assert.AreEqual(pos1, touch.Position); var pos2 = new Vector2(104, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); touch = state[0]; Assert.AreEqual(TouchLocationState.Moved, touch.State); Assert.AreEqual(pos2, touch.Position); //Location should be updated } [Test] [Order(6)] [TestCase(true)] [TestCase(false)] public void ReleasingTouchMakesItGoAway(bool moveInBetween) { //Touch the screen, we should get one touch with the given location in the pressed state var pos = new Vector2(105, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var initialTouch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State); Assert.AreEqual(pos, initialTouch.Position); //Now optionally move the touch, should give the same touch in the new location in the moved state if (moveInBetween) { var pos2 = new Vector2(105, 100); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); var movedState = TouchPanel.GetState(); Assert.AreEqual(1, movedState.Count); var touch = movedState[0]; Assert.AreEqual(TouchLocationState.Moved, touch.State); Assert.AreEqual(pos2, touch.Position); Assert.AreEqual(initialTouch.Id, touch.Id); } //Release the touch, it should then show up as released touch var pos3 = new Vector2(105, 150); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos3); var endState = TouchPanel.GetState(); Assert.AreEqual(1, endState.Count); var endTouch = endState[0]; Assert.AreEqual(TouchLocationState.Released, endTouch.State); Assert.AreEqual(pos3, endTouch.Position); Assert.AreEqual(initialTouch.Id, endTouch.Id); //Finally get the TouchState again, we should now have no touches var finalState = TouchPanel.GetState(); Assert.AreEqual(0, finalState.Count); } [Test] [Order(7)] [TestCase(true)] [TestCase(false)] [Description("In XNA if you press and release your finger over multiple frames where GetState is not called, the touch never shows up")] public void TouchBetweenGetStateCallsMakesNoTouch(bool moveInBetween) { var pos = new Vector2(106, 50); var pos2 = new Vector2(106, 150); int frame = 0; ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); if (moveInBetween) //Moving shouldn't change the behavior { Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); } Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos2); var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); //Should miss the touch that happened between } [Test] [Order(8)] [TestCase(true, true)] [TestCase(true, false)] [TestCase(false, true)] [TestCase(false, false)] [Description("If you press and release a touch on the same frame we need to show it as pressed that frame and released in the next")] public void SameFrameTouchAndReleaseMakesTouch(bool moveInBetween, bool waitAFrameForNextState) { var pos = new Vector2(107, 50); var pos2 = new Vector2(107, 150); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); if (moveInBetween) //Moving shouldn't change the behavior ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos2); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); //Should get the touch that happened between var touch = state[0]; Assert.AreEqual(pos2, touch.Position); Assert.AreEqual(TouchLocationState.Pressed, touch.State); if (waitAFrameForNextState) { Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); //Touch should still be there, but as released touch = state[0]; Assert.AreEqual(pos2, touch.Position); Assert.AreEqual(TouchLocationState.Released, touch.State); if (waitAFrameForNextState) { Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); } state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); //Touch should be gone now } [Test] [Order(9)] [TestCase(true)] [TestCase(false)] [Description("Press and release our finger on the same frame. Don't call GetState that frame, but do the next. We should not get the touch")] public void SameFrameTouchAndReleaseMissedIfWaitAFrameToGetState(bool moveInBetween) { var pos = new Vector2(108, 50); var pos2 = new Vector2(108, 150); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); if (moveInBetween) //Moving shouldn't change the behavior ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos2); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos2); Thread.Sleep(GameTimeForFrame(1)); FrameworkDispatcher.Update(); var state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); //Shouldn't get the touch that happened last frame } [Test] [Order(10)] [Description("Do multiple touches and check they behave as expected")] public void SimpleMultiTouchTest() { //Start with one touch var pos = new Vector2(109, 50); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var initialTouch1 = state[0]; Assert.AreEqual(TouchLocationState.Pressed, initialTouch1.State); Assert.AreEqual(pos, initialTouch1.Position); //Start a second touch var pos2 = new Vector2(150, 100); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos2); state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); //First touch should now be moved, same location var touch1 = state.First(x => x.Id == initialTouch1.Id); Assert.AreEqual(TouchLocationState.Moved, touch1.State); Assert.AreEqual(pos, touch1.Position); //Second touch should be pressed in its position var initialTouch2 = state.First(x => x.Id != initialTouch1.Id); Assert.AreEqual(TouchLocationState.Pressed, initialTouch2.State); Assert.AreEqual(pos2, initialTouch2.Position); //Move the second touch var pos3 = new Vector2(150, 150); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(2, pos3); state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); //touch1 should be the same touch1 = state.First(x => x.Id == initialTouch1.Id); Assert.AreEqual(TouchLocationState.Moved, touch1.State); Assert.AreEqual(pos, touch1.Position); //touch2 should be moved in its new location var touch2 = state.First(x => x.Id == initialTouch2.Id); Assert.AreEqual(TouchLocationState.Moved, touch2.State); Assert.AreEqual(pos3, touch2.Position); //Release the second touch var pos4 = new Vector2(150, 200); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(2, pos4); state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); //touch1 should be the same touch1 = state.First(x => x.Id == initialTouch1.Id); Assert.AreEqual(TouchLocationState.Moved, touch1.State); Assert.AreEqual(pos, touch1.Position); //touch2 should be released in its new location touch2 = state.First(x => x.Id == initialTouch2.Id); Assert.AreEqual(TouchLocationState.Released, touch2.State); Assert.AreEqual(pos4, touch2.Position); //Move the first touch, second touch shouldn't be there any more var pos5 = new Vector2(100, 200); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(1, pos5); state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); //touch1 should be moved to the new position touch1 = state.First(x => x.Id == initialTouch1.Id); Assert.AreEqual(TouchLocationState.Moved, touch1.State); Assert.AreEqual(pos5, touch1.Position); //No more touch2 //Release the first touch var pos6 = new Vector2(100, 250); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos6); state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); //touch1 should be released at the new position touch1 = state.First(x => x.Id == initialTouch1.Id); Assert.AreEqual(TouchLocationState.Released, touch1.State); Assert.AreEqual(pos6, touch1.Position); //Now we should have no touches state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); } [Test] [Order(11)] [Description("Internally TouchPanelState uses a queue of TouchLocation updating state. If it gets longer than 100, it throws away the first ones, which is bad")] public void TooManyEventsLosesOldOnes() { //To test this, we will start a touch, read the state. //Then release the touch, start a new touch and move it around lots //Then read the state, the first touch should be released //Start a touch var pos = new Vector2(1); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); var initialTouch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State); Assert.AreEqual(pos, initialTouch.Position); //Release the touch, make a new one and move it around lots ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddReleasedEvent(1, pos); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, new Vector2(2)); for (var i = 3; i < 200; i++) ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddMovedEvent(2, new Vector2(i)); //We should now have the first touch in the release state and the second touch in the pressed state at 199,199 state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); var newInitialTouch = state.First(x => x.Id == initialTouch.Id); Assert.AreEqual(TouchLocationState.Released, newInitialTouch.State); Assert.AreEqual(pos, newInitialTouch.Position); var secondTouch = state.First(x => x.Id != initialTouch.Id); Assert.AreEqual(TouchLocationState.Pressed, secondTouch.State); Assert.AreEqual(new Vector2(199), secondTouch.Position); } [Test] [Order(12)] [TestCase(false)] [TestCase(true)] public void ReleaseAllTouchesTest(bool testBetween) { //Create multiple touches in different states //Start a touch Vector2 pos = new Vector2(2); Vector2 pos2 = new Vector2(3); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); var state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); TouchLocation initialTouch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, initialTouch.State); Assert.AreEqual(pos, initialTouch.Position); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos2); if (testBetween) { state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); TouchLocation touch = state.First(x => x.Id == initialTouch.Id); TouchLocation touch2 = state.First(x => x.Id != initialTouch.Id); Assert.AreEqual(TouchLocationState.Moved, touch.State); Assert.AreEqual(TouchLocationState.Pressed, touch2.State); } // Release touches ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(1, pos); ((IPlatformTouchPanel)TouchPanel.Current).GetStrategy().AddPressedEvent(2, pos2); //If we saw the second touch happen then we should see it be released, otherwise it will be in pressed, then in released next time state = TouchPanel.GetState(); Assert.AreEqual(2, state.Count); Assert.AreEqual(testBetween ? TouchLocationState.Released : TouchLocationState.Pressed, state.Single(p => p.Id != initialTouch.Id).State); Assert.AreEqual(TouchLocationState.Released, state.Single(p => p.Id == initialTouch.Id).State); if (!testBetween) { state = TouchPanel.GetState(); Assert.AreEqual(1, state.Count); Assert.AreEqual(TouchLocationState.Released, state[0].State); } //Then it should be empty state = TouchPanel.GetState(); Assert.AreEqual(0, state.Count); } } } ================================================ FILE: Tests/Interactive/Linux/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.csproj ================================================ Debug x86 10.0.0 2.0 {6BC96721-9A69-4698-BF22-7BDB319FF381} Exe MouseGetStateAndIsMouseVisibleTester MouseGetStateAndIsMouseVisibleTester v4.0 true full false bin\Debug DEBUG; LINUX prompt 4 x86 false none false bin\Release prompt 4 x86 false {758CB33D-6EBD-41EA-BB0C-55B1C97A325F} Lidgren.Network.Linux {35253CE1-C864-4CD3-8249-4D1319748E8F} MonoGame.Framework.Linux Enums.cs Game1.cs InputManager.cs Object.cs Program.cs TextManager.cs Properties\AssemblyInfo.cs MainMenu.xib Content\UiCursor.xnb PreserveNewest Content\fntStandard.xnb PreserveNewest ================================================ FILE: Tests/Interactive/MacOS/BlockingRun/BlockingRun.csproj ================================================ Debug AnyCPU 10.0.0 2.0 {75D4D875-093F-4C00-8EE5-C7B39D2F4C18} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe BlockingRun BlockingRun true full false bin\Debug DEBUG; prompt 4 false none false bin\Release prompt 4 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130} Lidgren.Network.MacOS PreserveNewest ================================================ FILE: Tests/Interactive/MacOS/BlockingRun/BlockingRunGame.cs ================================================ using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace BlockingRun { public class BlockingRunGame : Game { public BlockingRunGame() { new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } private SpriteBatch _spriteBatch; private SpriteFont _font; protected override void LoadContent() { base.LoadContent(); _spriteBatch = new SpriteBatch(GraphicsDevice); _font = Content.Load("SimpleFont"); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); _spriteBatch.Begin(); _spriteBatch.DrawString(_font, "A magical blocking Game.Run!", Vector2.Zero, Color.White); _spriteBatch.End(); } } } ================================================ FILE: Tests/Interactive/MacOS/BlockingRun/Info.plist ================================================ CFBundleIdentifier com.yourcompany.BlockingRun CFBundleName BlockingRun CFBundleVersion 1 LSMinimumSystemVersion 10.6 ================================================ FILE: Tests/Interactive/MacOS/BlockingRun/Main.cs ================================================ using System; using System.Drawing; using Microsoft.Xna.Framework; using MonoMac.AppKit; using MonoMac.Foundation; namespace BlockingRun { class MainClass { static void Main(string[] args) { NSApplication.Init(); Console.WriteLine("Starting a blocking game instance..."); using (var pool = new NSAutoreleasePool()) using (var game = new BlockingRunGame()) { game.Run(); } Console.WriteLine("Starting a second blocking game instance..."); using (var pool = new NSAutoreleasePool()) using (var game = new BlockingRunGame()) { game.Run(); } Console.WriteLine("Fin"); } } } ================================================ FILE: Tests/Interactive/MacOS/GamePadTest/Game1.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace GamePadTest { public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); Services.AddService(typeof(SpriteBatch), spriteBatch); } protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } protected override void Update(GameTime gameTime) { base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } } ================================================ FILE: Tests/Interactive/MacOS/GamePadTest/GamePadTest.csproj ================================================ Debug x86 10.0.0 2.0 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe GamePadTest GamePadTest true full false bin\Debug DEBUG; prompt 4 x86 false none false bin\Release prompt 4 x86 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/GamePadTest/Info.plist ================================================ CFBundleIdentifier com.yourcompany.GamePadTest CFBundleName GamePadTest CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/GamePadTest/Program.cs ================================================ using System; namespace GamePadTest { static class Program { private static Game1 game; /// /// The main entry point for the application. /// static void Main(string[] args) { MonoMac.AppKit.NSApplication.Init(); using (var p = new MonoMac.Foundation.NSAutoreleasePool()) { MonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate(); MonoMac.AppKit.NSApplication.Main(args); } } class AppDelegate : MonoMac.AppKit.NSApplicationDelegate { public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender) { return true; } } } } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Enums.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MouseGetStateAndIsMouseVisibleTester { public enum MsState { ButtonWasPressed, ButtonWasDoublePressed, ButtonWasReleased, ButtonStillPressed, ButtonStillReleased }//MsState } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Game1.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using System.Windows.Forms; namespace MouseGetStateAndIsMouseVisibleTester { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public TextManager aTm; public InputManager cIm; private SpriteFont sfStandard; public MouseState mousestatus; public Texture2D t2dUiCursor; public Object aObjects; bool bWindowIsCentered = false; bool bFullScreen = false; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; cIm = new InputManager(this); Window.AllowUserResizing = true; // Uncomment the line below to test full screen on startup. //graphics.IsFullScreen = false; //bFullScreen = true; // Subscribe to the game window's ClientSizeChanged event. Window.ClientSizeChanged += Window_ClientSizeChanged; Activated += HandleActivated; Deactivated += HandleDeactivated; } void HandleDeactivated (object sender, EventArgs e) { Console.WriteLine("DeActivated - IsActive? " + IsActive); } void HandleActivated (object sender, EventArgs e) { Console.WriteLine("Activated - IsActive? " + IsActive); } void Window_ClientSizeChanged( object sender, EventArgs e ) { // Make changes to handle the new window size. //Console.WriteLine("Window size changed " + Window.ClientBounds); } protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); Services.AddService(typeof(SpriteBatch), spriteBatch); sfStandard = Content.Load("fntStandard"); t2dUiCursor = Content.Load("UiCursor"); aTm = new TextManager(this, sfStandard); Components.Add(aTm); aObjects = new Object(this, ref t2dUiCursor); Components.Add(aObjects); aObjects.pos.X = 200; aObjects.pos.Y = 200; } protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } public void Toggle() { graphics.ToggleFullScreen(); if(bFullScreen) { bFullScreen = false; }//if else { bFullScreen = true; }//else }//Toggle public int GetBackBufferWidth() { return graphics.PreferredBackBufferWidth; }//GetBackBufferWidth public int GetBackBufferHeight() { return graphics.PreferredBackBufferHeight; }//GetBackBufferWidth protected override void Update(GameTime gameTime) { mousestatus = Mouse.GetState(); cIm.InputHandler(mousestatus, gameTime); aObjects.pos.X = mousestatus.X; aObjects.pos.Y = mousestatus.Y; base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); base.Draw(gameTime); spriteBatch.End(); } public void CenterWindow() { if(bFullScreen) return; #if MAC int index; int upperBound; float fScreenWidth, fScreenHeight, fNewX, fNewY, fWindowWidth, fWindowHeight, fTitleBarHeight; Screen[] screens = Screen.AllScreens; fScreenWidth = fScreenHeight = 0; upperBound = screens.GetUpperBound(0); for (index = 0; index <= upperBound; index++) { if (screens[index].Primary) { fScreenWidth = (float)screens[index].Bounds.Width; fScreenHeight = (float)screens[index].Bounds.Height; index = upperBound; }//if }//for fWindowWidth = graphics.PreferredBackBufferWidth; fWindowHeight = graphics.PreferredBackBufferHeight; fNewX = (fScreenWidth - fWindowWidth) / 2; fNewY = (fScreenHeight - fWindowHeight) / 2; fTitleBarHeight = this.Window.Window.Frame.Height - fWindowHeight; System.Drawing.PointF pfLocation = new System.Drawing.PointF(fNewX,fNewY); System.Drawing.PointF pfSize = new System.Drawing.PointF(fWindowWidth, fWindowHeight + fTitleBarHeight); System.Drawing.SizeF sfSize = new System.Drawing.SizeF(pfSize); System.Drawing.RectangleF rectTemp = new System.Drawing.RectangleF(pfLocation, sfSize); this.Window.Window.SetFrame(rectTemp, true); #endif }//CenterWindow } } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Info.plist ================================================ CFBundleIdentifier com.yourcompany.MouseGetStateAndIsMouseVisibleTester CFBundleName MouseGetStateAndIsMouseVisibleTester CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSMainNibFile MainMenu NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/InputManager.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; using Microsoft.Xna.Framework.Media; using System.IO; using Microsoft.Xna.Framework.GamerServices; namespace MouseGetStateAndIsMouseVisibleTester { public class InputManager { private Game1 cG; private MouseState mousestatus; private MsState mssButtonLeft; public TimeSpan tsTimeSinceLastClick; private int nClicksForDoubleClick; public InputManager(Game game) { cG = (Game1)game; mssButtonLeft = MsState.ButtonWasReleased; tsTimeSinceLastClick = TimeSpan.Zero; nClicksForDoubleClick = 0; }//InputManger public void InputHandler(MouseState mst, GameTime gameTime) { if (!cG.IsActive) return; mousestatus = mst; HandleMouseLeftButton(gameTime); if (mssButtonLeft == MsState.ButtonWasPressed) { if (mousestatus.X >= 0 && mousestatus.X <= 405) { if (mousestatus.Y >= 209 && mousestatus.Y <= 250) { cG.Toggle(); }//if }//if }//if if (mssButtonLeft == MsState.ButtonWasPressed) { if (mousestatus.X >= 0 && mousestatus.X <= 628) { if (mousestatus.Y >= 304 && mousestatus.Y <= 350) { cG.CenterWindow(); }//if }//if }//if }//InputHandler private void HandleMouseLeftButton(GameTime gTime) { tsTimeSinceLastClick += gTime.ElapsedGameTime; if (tsTimeSinceLastClick >= TimeSpan.FromMilliseconds(250)) { nClicksForDoubleClick = 0; }//if if (mousestatus.LeftButton == ButtonState.Pressed) { if (mssButtonLeft == MsState.ButtonWasReleased) { if (GetMouseX() >= 0 && GetMouseX() <= cG.GetBackBufferWidth()) { if (GetMouseY() >= 0 && GetMouseY() <= cG.GetBackBufferHeight()) { mssButtonLeft = MsState.ButtonWasPressed; nClicksForDoubleClick++; if (nClicksForDoubleClick == 1) { tsTimeSinceLastClick = TimeSpan.Zero; }//if if (nClicksForDoubleClick == 2) { if (tsTimeSinceLastClick < TimeSpan.FromMilliseconds(250)) { nClicksForDoubleClick = 0; mssButtonLeft = MsState.ButtonWasDoublePressed; }//if }//if if (nClicksForDoubleClick == 3) nClicksForDoubleClick = 0; }//if }//if }//if else { if (mssButtonLeft == MsState.ButtonWasPressed || mssButtonLeft == MsState.ButtonWasDoublePressed) { mssButtonLeft = MsState.ButtonStillPressed; }//if }//else }//if if (mousestatus.LeftButton == ButtonState.Released) { mssButtonLeft = MsState.ButtonWasReleased; }//if }//HandleMouseLeftButton public float GetMouseX() { return mousestatus.X; }//GetMouseX public float GetMouseY() { return mousestatus.Y; }//GetMouseY } } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/MainMenu.xib ================================================ 1060 10D573 762 1038.29 460.00 com.apple.InterfaceBuilder.CocoaPlugin 762 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSObject FirstResponder NSApplication YES YES 0 -2 File's Owner -1 First Responder -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES 0 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES 3 ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.csproj ================================================ Debug x86 10.0.0 2.0 {7B2F1E86-1B56-4F78-9265-EA8852442171} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe MouseGetStateAndIsMouseVisibleTester MouseGetStateAndIsMouseVisibleTester true full false bin\Debug DEBUG; MAC prompt 4 x86 false none false bin\Release prompt 4 x86 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Object.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace MouseGetStateAndIsMouseVisibleTester { public class Object : Microsoft.Xna.Framework.DrawableGameComponent { public Vector2 pos; protected Texture2D texture; private Vector2 v2Temp; protected Rectangle recCurrentFrame; public int nAlpha; public float fRotation; public Vector2 vecRotationCenter; private List frames; public Object(Game game, ref Texture2D theTexture) : base(game) { texture = theTexture; v2Temp = new Vector2(); fRotation = 0; pos = new Vector2(); pos.X = 0; pos.Y = 0; vecRotationCenter.X = 0; vecRotationCenter.Y = 0; Frames = new List(); Rectangle frame = new Rectangle(); //Extract the frames from the texture frame.X = 0; frame.Y = 0; frame.Width = texture.Width; frame.Height = texture.Height; Frames.Add(frame); } public override void Update(GameTime gameTime) { recCurrentFrame = frames[0]; base.Update(gameTime); } public override void Draw(GameTime gameTime) { v2Temp.X = pos.X - (texture.Width / 2); v2Temp.Y = pos.Y - texture.Height; // Get the current spritebatch SpriteBatch sBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch)); sBatch.Draw(texture, v2Temp, recCurrentFrame, new Color(255, 255, 255, (byte)nAlpha), fRotation, vecRotationCenter, 1f, SpriteEffects.None, 0); base.Draw(gameTime); } public List Frames { get { return frames; } set { frames = value; } }//Frames } } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Program.cs ================================================ using System; namespace MouseGetStateAndIsMouseVisibleTester { #if WINDOWSDX || XBOX || LINUX static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { using (Game1 game = new Game1()) { game.Run(); } } } #endif #if MAC static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { MonoMac.AppKit.NSApplication.Init(); using (var p = new MonoMac.Foundation.NSAutoreleasePool()) { MonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate(); MonoMac.AppKit.NSApplication.Main(args); } } } class AppDelegate : MonoMac.AppKit.NSApplicationDelegate { Game1 game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { Game1 game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender) { return true; } } #endif } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MouseGetStateAndIsMouseVisibleTester")] [assembly: AssemblyProduct("MouseGetStateAndIsMouseVisibleTester")] [assembly: AssemblyDescription("")] [assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. Only Windows // assemblies support COM. [assembly: ComVisible(false)] // On Windows, the following GUID is for the ID of the typelib if this // project is exposed to COM. On other platforms, it unique identifies the // title storage container when deploying this assembly to the device. [assembly: Guid("9484ea83-c718-46a9-97f8-fefd52842c19")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // [assembly: AssemblyVersion("1.0.0.0")] ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester/TextManager.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace MouseGetStateAndIsMouseVisibleTester { public class TextManager : Microsoft.Xna.Framework.DrawableGameComponent { public SpriteFont sfStandard; protected SpriteBatch spriteBatch = null; private Game1 cG; public TextManager(Game game, SpriteFont sfStandardFont) : base(game) { cG = (Game1)game; spriteBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch)); sfStandard = sfStandardFont; }//TextManager public override void Draw(GameTime gameTime) { spriteBatch.DrawString(sfStandard, "LeftMouse = " + cG.mousestatus.LeftButton.ToString(), new Vector2(0, 50), Color.White); #if LINUX spriteBatch.DrawString(sfStandard, "MouseX = " + Mouse.GetState().X.ToString(), new Vector2(0, 100), Color.White); spriteBatch.DrawString(sfStandard, "MouseY = " + Mouse.GetState().Y.ToString(), new Vector2(0, 130), Color.White); #else try { spriteBatch.DrawString(sfStandard, "MouseX = " + cG.Window.Window.MouseLocationOutsideOfEventStream.X.ToString(), new Vector2(0, 100), Color.White); spriteBatch.DrawString(sfStandard, "MouseY = " + cG.Window.Window.MouseLocationOutsideOfEventStream.Y.ToString(), new Vector2(0, 130), Color.White); }//try catch(Exception ex) { } #endif spriteBatch.DrawString(sfStandard, "Click here to Toggle Full Screen", new Vector2(0, 200), Color.White); spriteBatch.DrawString(sfStandard, "Click here to center window if in windowed mode", new Vector2(0, 300), Color.White); }//Draw } } ================================================ FILE: Tests/Interactive/MacOS/MouseGetStateAndIsMouseVisibleTester/MouseGetStateAndIsMouseVisibleTester.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MouseGetStateAndIsMouseVisibleTester", "MouseGetStateAndIsMouseVisibleTester\MouseGetStateAndIsMouseVisibleTester.csproj", "{7B2F1E86-1B56-4F78-9265-EA8852442171}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.MacOS", "..\..\Public\Share\MonoMacSource\kjpgit\MonoGame\MonoGame.Framework\MonoGame.Framework.MacOS.csproj", "{36C538E6-C32A-4A8D-A39C-566173D7118E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.MacOS", "..\..\Public\Share\MonoMacSource\kjpgit\MonoGame\ThirdParty\Lidgren.Network\Lidgren.Network.MacOS.csproj", "{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 Distribution|Any CPU = Distribution|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.ActiveCfg = Debug|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.Build.0 = Debug|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.ActiveCfg = Distribution|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.Build.0 = Distribution|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.ActiveCfg = Release|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.Build.0 = Release|Any CPU {7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.ActiveCfg = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.Build.0 = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.ActiveCfg = Release|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.Build.0 = Release|x86 {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.ActiveCfg = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.Build.0 = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.Build.0 = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.ActiveCfg = Release|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = MouseGetStateAndIsMouseVisibleTester\MouseGetStateAndIsMouseVisibleTester.csproj EndGlobalSection EndGlobal ================================================ FILE: Tests/Interactive/MacOS/PrimitivesTest/App.config ================================================  ================================================ FILE: Tests/Interactive/MacOS/PrimitivesTest/Info.plist ================================================ CFBundleIdentifier com.yourcompany.PrimitivesTest CFBundleName PrimitivesTest CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/PrimitivesTest/PrimitivesTest.csproj ================================================ Debug x86 10.0.0 2.0 {9704681E-C6DB-4946-9F31-0EF9BE63090A} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe PrimitivesTest PrimitivesTest true full false bin\Debug DEBUG; MAC prompt 4 x86 false none false bin\Release prompt 4 x86 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/PrimitivesTest/Program.cs ================================================ using System; namespace DrawUserPrimitivesWindows { static class Program { private static Game1 game; /// /// The main entry point for the application. /// static void Main(string[] args) { MonoMac.AppKit.NSApplication.Init(); using (var p = new MonoMac.Foundation.NSAutoreleasePool()) { MonoMac.AppKit.NSApplication.SharedApplication.Delegate = new AppDelegate(); MonoMac.AppKit.NSApplication.Main(args); } } class AppDelegate : MonoMac.AppKit.NSApplicationDelegate { Game1 game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(MonoMac.AppKit.NSApplication sender) { return true; } } } } ================================================ FILE: Tests/Interactive/MacOS/SoundTest/Game1.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace SoundTest { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D tExplosion; SoundEffect sExplosion; Random rnd = new Random(); class explosion { public Vector2 Position; public float Size; public explosion(Vector2 pos) { Position = pos; Size = 1f; } } List Explosions = new List(); TimeSpan timer = TimeSpan.Zero; int Interval = 1000; //Milliseconds. The duration of the sound is about 1.5 sec. public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 1024;; graphics.PreferredBackBufferHeight = 768; graphics.IsFullScreen = false; } protected override void Initialize() { base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); sExplosion = Content.Load("ExplosionSound"); //sExplosion = Content.Load("laser1"); //sExplosion = Content.Load("FillingHoneyPot_Loop"); tExplosion = Content.Load("Explosion"); } protected override void Update(GameTime gameTime) { base.Update(gameTime); //update explosions for (int i = 0; i Interval) { timer = TimeSpan.Zero; float x = rnd.Next(24,1000); Explosions.Add(new explosion(new Vector2(x, rnd.Next(50,700)))); sExplosion.Play(1f, 1f, (x / 512f) -1); } //Check for exit KeyboardState state = new KeyboardState(); state = Keyboard.GetState(); if (state.IsKeyDown(Keys.Escape) || state.IsKeyDown(Keys.Space) || state.IsKeyDown(Keys.Enter)) this.Exit(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); base.Draw(gameTime); spriteBatch.Begin(); //Draw explosions foreach (explosion e in Explosions) spriteBatch.Draw(tExplosion, e.Position, null, Color.White, 0, Vector2.Zero,e.Size, SpriteEffects.None, 1); spriteBatch.End(); } } } ================================================ FILE: Tests/Interactive/MacOS/SoundTest/Info.plist ================================================ CFBundleIdentifier com.yourcompany.SoundTest CFBundleName SoundTest CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSMainNibFile MainMenu NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/SoundTest/MainMenu.xib ================================================ 1060 10D573 762 1038.29 460.00 com.apple.InterfaceBuilder.CocoaPlugin 762 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSObject FirstResponder NSApplication YES YES 0 -2 File's Owner -1 First Responder -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES 0 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES 3 ================================================ FILE: Tests/Interactive/MacOS/SoundTest/Program.cs ================================================ #if WINDOWSDX using System; namespace SoundTest { static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { using (Game1 game = new Game1()) { game.Run(); } } } } #elif MACOS using MonoMac.AppKit; using MonoMac.Foundation; using MonoMac.CoreGraphics; using System.Runtime.InteropServices; namespace SoundTest { class Program { static void Main(string[] args) { NSApplication.Init(); using (var p = new NSAutoreleasePool()) { NSApplication.SharedApplication.Delegate = new AppDelegate(); NSApplication.Main(args); } } } class AppDelegate : NSApplicationDelegate { Game1 game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender) { return true; } } } #endif ================================================ FILE: Tests/Interactive/MacOS/SoundTest/SoundTest_MacOS.csproj ================================================ Debug x86 10.0.0 2.0 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe SoundTest SoundTest true full false bin\Debug DEBUG;MACOS prompt 4 x86 false none false bin\Release prompt 4 x86 false MACOS {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Game1.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace SoundTest { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D tExplosion; SoundEffect sExplosion; SoundEffectInstance eExplosion; float move = 11f; Random rnd = new Random(); class explosion { public Vector2 Position; public float Size; public explosion(Vector2 pos) { Position = pos; Size = 1f; } } List Explosions = new List(); TimeSpan timer = TimeSpan.Zero; int Interval = 1000; //Milliseconds. The duration of the sound is about 1.5 sec. public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 1024; ; graphics.PreferredBackBufferHeight = 768; graphics.IsFullScreen = false; Explosions.Add(new explosion(new Vector2(1025, 384))); } protected override void Initialize() { base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); sExplosion = Content.Load("ExplosionSound"); tExplosion = Content.Load("Explosion"); eExplosion = sExplosion.CreateInstance(); } protected override void Update(GameTime gameTime) { base.Update(gameTime); /* //update explosions for (int i = 0; i Interval) { timer = TimeSpan.Zero; float x = rnd.Next(24,1000); Explosions.Add(new explosion(new Vector2(x, rnd.Next(50,700)))); sExplosion.Play(1f, 1f, (x / 512f) -1); } */ float pan = 0; if (Explosions[0].Position.X > 1024 || Explosions[0].Position.X < 0) { move = -move; pan = MathHelper.Clamp((Explosions[0].Position.X / 512f) - 1, -1, 1); eExplosion.Pan = pan; eExplosion.Play(); } Explosions[0].Position.X += move; pan = MathHelper.Clamp((Explosions[0].Position.X / 512f) - 1, -1, 1); eExplosion.Pan = pan; //Console.WriteLine (pan); //Check for exit KeyboardState state = new KeyboardState(); state = Keyboard.GetState(); if (state.IsKeyDown(Keys.Escape) || state.IsKeyDown(Keys.Space) || state.IsKeyDown(Keys.Enter)) this.Exit(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); base.Draw(gameTime); spriteBatch.Begin(); //Draw explosions foreach (explosion e in Explosions) spriteBatch.Draw(tExplosion, e.Position, null, Color.White, 0, Vector2.Zero, e.Size, SpriteEffects.None, 1); spriteBatch.End(); } } } ================================================ FILE: Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Info.plist ================================================ CFBundleIdentifier com.yourcompany.SoundTest CFBundleName SoundTest CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSMainNibFile MainMenu NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/MainMenu.xib ================================================ 1060 10D573 762 1038.29 460.00 com.apple.InterfaceBuilder.CocoaPlugin 762 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSObject FirstResponder NSApplication YES YES 0 -2 File's Owner -1 First Responder -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES 0 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES 3 ================================================ FILE: Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/Program.cs ================================================ #if WINDOWSDX using System; namespace SoundTest { static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { using (Game1 game = new Game1()) { game.Run(); } } } } #elif MACOS using MonoMac.AppKit; using MonoMac.Foundation; using MonoMac.CoreGraphics; using System.Runtime.InteropServices; namespace SoundTest { class Program { static void Main(string[] args) { NSApplication.Init(); using (var p = new NSAutoreleasePool()) { NSApplication.SharedApplication.Delegate = new AppDelegate(); NSApplication.Main(args); } } } class AppDelegate : NSApplicationDelegate { Game1 game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender) { return true; } } } #endif ================================================ FILE: Tests/Interactive/MacOS/SoundTest2/SoundTest2_MacOs/SoundTest2_MacOs.csproj ================================================ Debug x86 10.0.0 2.0 {79A32C2C-0F38-4ADE-88D1-F8502C520570} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe SoundTest2_MacOs SoundTest2_MacOs true full false bin\Debug DEBUG; MACOS prompt 4 x86 false none false bin\Release prompt 4 x86 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/TestDataSetAndGet/Game1.cs ================================================ #region File Description //----------------------------------------------------------------------------- // Game.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; namespace TestDataSetAndGet { /// /// This is the main type for your game /// public class PerPixelCollisionGame : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; // The images we will draw Texture2D personTexture; Texture2D blockTexture; Texture2D characterTexture; // The color data for the images; used for per pixel collision Color[] personTextureData; Color[] blockTextureData; Color[] characterTextureData; // The images will be drawn with this SpriteBatch SpriteBatch spriteBatch; // Person Vector2 personPosition; const int PersonMoveSpeed = 5; // Blocks List blockPositions = new List(); float BlockSpawnProbability = 0.01f; const int BlockFallSpeed = 2; Random random = new Random(); // For when a collision is detected bool personHit = false; // The sub-rectangle of the drawable area which should be visible on all TVs Rectangle safeBounds; // Percentage of the screen on every side is the safe area const float SafeAreaPortion = 0.05f; public PerPixelCollisionGame() { graphics = new GraphicsDeviceManager(this); graphics.SynchronizeWithVerticalRetrace = false; Content.RootDirectory = "Content"; } /// /// Allows the game to perform any initialization it needs to before starting to /// run. This is where it can query for any required services and load any /// non-graphic related content. Calling base.Initialize will enumerate through /// any components and initialize them as well. /// protected override void Initialize() { base.Initialize(); // Calculate safe bounds based on current resolution Viewport viewport = graphics.GraphicsDevice.Viewport; safeBounds = new Rectangle( (int)(viewport.Width * SafeAreaPortion), (int)(viewport.Height * SafeAreaPortion), (int)(viewport.Width * (1 - 2 * SafeAreaPortion)), (int)(viewport.Height * (1 - 2 * SafeAreaPortion))); // Start the player in the center along the bottom of the screen personPosition.X = (safeBounds.Width - personTexture.Width) / 2; personPosition.Y = safeBounds.Height - personTexture.Height; } /// /// Load your graphics content. /// protected override void LoadContent() { // Load textures blockTexture = Content.Load("Block"); personTexture = Content.Load("Character"); //personTexture = Content.Load("Warrior3Active"); characterTexture = new RenderTarget2D(GraphicsDevice, personTexture.Width, personTexture.Height); // Extract collision data blockTextureData = new Color[blockTexture.Width * blockTexture.Height]; blockTexture.GetData(blockTextureData); personTextureData = new Color[personTexture.Width * personTexture.Height]; personTexture.GetData(personTextureData); characterTexture.SetData(personTextureData); characterTextureData = new Color[characterTexture.Width * characterTexture.Height]; characterTexture.GetData(characterTextureData); //personTexture.SetData(characterTextureData); // Create a sprite batch to draw those textures spriteBatch = new SpriteBatch(graphics.GraphicsDevice); } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { // Get input KeyboardState keyboard = Keyboard.GetState(); GamePadState gamePad = GamePad.GetState(PlayerIndex.One); // Allows the game to exit if (gamePad.Buttons.Back == ButtonState.Pressed || keyboard.IsKeyDown(Keys.Escape)) { this.Exit(); } // Move the player left and right with arrow keys or d-pad if (keyboard.IsKeyDown(Keys.Left) || gamePad.DPad.Left == ButtonState.Pressed) { personPosition.X -= PersonMoveSpeed; } if (keyboard.IsKeyDown(Keys.Right) || gamePad.DPad.Right == ButtonState.Pressed) { personPosition.X += PersonMoveSpeed; } // Prevent the person from moving off of the screen personPosition.X = MathHelper.Clamp(personPosition.X, safeBounds.Left, safeBounds.Right - personTexture.Width); // Spawn new falling blocks if (random.NextDouble() < BlockSpawnProbability) { float x = (float)random.NextDouble() * (Window.ClientBounds.Width - blockTexture.Width); blockPositions.Add(new Vector2(x, -blockTexture.Height)); } // Get the bounding rectangle of the person Rectangle personRectangle = new Rectangle((int)personPosition.X, (int)personPosition.Y, personTexture.Width, personTexture.Height); // Update each block personHit = false; for (int i = 0; i < blockPositions.Count; i++) { // Animate this block falling blockPositions[i] = new Vector2(blockPositions[i].X, blockPositions[i].Y + BlockFallSpeed); // Get the bounding rectangle of this block Rectangle blockRectangle = new Rectangle((int)blockPositions[i].X, (int)blockPositions[i].Y, blockTexture.Width, blockTexture.Height); // Check collision with person if (IntersectPixels(personRectangle, personTextureData, blockRectangle, blockTextureData)) { personHit = true; } // Remove this block if it have fallen off the screen if (blockPositions[i].Y > Window.ClientBounds.Height) { blockPositions.RemoveAt(i); // When removing a block, the next block will have the same index // as the current block. Decrement i to prevent skipping a block. i--; } } base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice device = graphics.GraphicsDevice; // Change the background to red when the person was hit by a block if (personHit) { device.Clear(Color.Red); } else { device.Clear(Color.CornflowerBlue); } spriteBatch.Begin(); // Draw person spriteBatch.Draw(personTexture, personPosition, Color.White); Vector2 characterPosition = personPosition; characterPosition.X += personTexture.Width; spriteBatch.Draw(characterTexture, characterPosition, Color.White); // Draw blocks foreach (Vector2 blockPosition in blockPositions) spriteBatch.Draw(blockTexture, blockPosition, Color.White); spriteBatch.End(); base.Draw(gameTime); } /// /// Determines if there is overlap of the non-transparent pixels /// between two sprites. /// /// Bounding rectangle of the first sprite /// Pixel data of the first sprite /// Bouding rectangle of the second sprite /// Pixel data of the second sprite /// True if non-transparent pixels overlap; false otherwise static bool IntersectPixels(Rectangle rectangleA, Color[] dataA, Rectangle rectangleB, Color[] dataB) { // Find the bounds of the rectangle intersection int top = Math.Max(rectangleA.Top, rectangleB.Top); int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom); int left = Math.Max(rectangleA.Left, rectangleB.Left); int right = Math.Min(rectangleA.Right, rectangleB.Right); // Check every point within the intersection bounds for (int y = top; y < bottom; y++) { for (int x = left; x < right; x++) { // Get the color of both pixels at this point Color colorA = dataA[(x - rectangleA.Left) + (y - rectangleA.Top) * rectangleA.Width]; Color colorB = dataB[(x - rectangleB.Left) + (y - rectangleB.Top) * rectangleB.Width]; // If both pixels are not completely transparent, if (colorA.A != 0 && colorB.A != 0) { // then an intersection has been found return true; } } } // No intersection found return false; } } } ================================================ FILE: Tests/Interactive/MacOS/TestDataSetAndGet/Info.plist ================================================ CFBundleIdentifier com.yourcompany.TestDataSetAndGet CFBundleName TestDataSetAndGet CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/TestDataSetAndGet/Program.cs ================================================ #region File Description //----------------------------------------------------------------------------- // Program.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion using System; using MonoMac.Foundation; using MonoMac.AppKit; using MonoMac.ObjCRuntime; namespace TestDataSetAndGet { static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { NSApplication.Init(); using (var p = new NSAutoreleasePool()) { NSApplication.SharedApplication.Delegate = new AppDelegate(); NSApplication.Main(args); } } } class AppDelegate : NSApplicationDelegate { PerPixelCollisionGame game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new PerPixelCollisionGame(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender) { return true; } } } ================================================ FILE: Tests/Interactive/MacOS/TestDataSetAndGet/TestDataSetAndGet.csproj ================================================ Debug AnyCPU 10.0.0 2.0 {98CB640D-B8C4-496F-9978-F2571268BD70} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe TestDataSetAndGet TestDataSetAndGet true full false bin\Debug DEBUG prompt 4 false none false bin\Release prompt 4 false {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130} Lidgren.Network.MacOS {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MacOS/TextureScaleColorTest/Game1.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace MonoTest { public class Game1 : Microsoft.Xna.Framework.Game { static GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public static Texture2D BlankTexture; public static SpriteFont FontCalibri14; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 640;; graphics.PreferredBackBufferHeight = 480; graphics.IsFullScreen = false; } protected override void Initialize() { base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); FontCalibri14 = Content.Load("FontCalibri14"); BlankTexture = Content.Load("Blank"); // BlankTexture = new Texture2D(GraphicsDevice,1,1); // BlankTexture.SetData(new Color[] {Color.White}); } protected override void Update(GameTime gameTime) { base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); base.Draw(gameTime); spriteBatch.Begin(); spriteBatch.Draw(BlankTexture, new Vector2(100,100), null, Color.Green, 0, Vector2.Zero, new Vector2(400,240), SpriteEffects.None, 0); spriteBatch.DrawString(FontCalibri14, "There should be no transparency\nnear the corners?\n\nThis box should be solid green.", new Vector2(150,150), Color.Silver, 0, Vector2.Zero, 1, SpriteEffects.None, 1); spriteBatch.End(); } } } ================================================ FILE: Tests/Interactive/MacOS/TextureScaleColorTest/Info.plist ================================================ CFBundleIdentifier com.yourcompany.MonoTest CFBundleName MonoTest CFBundleVersion 1 LSMinimumSystemVersion 10.6 NSMainNibFile MainMenu NSPrincipalClass NSApplication ================================================ FILE: Tests/Interactive/MacOS/TextureScaleColorTest/MainMenu.xib ================================================ 1060 10D573 762 1038.29 460.00 com.apple.InterfaceBuilder.CocoaPlugin 762 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSObject FirstResponder NSApplication YES YES 0 -2 File's Owner -1 First Responder -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES 0 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES 3 ================================================ FILE: Tests/Interactive/MacOS/TextureScaleColorTest/Program.cs ================================================ using MonoMac.AppKit; using MonoMac.Foundation; using MonoMac.CoreGraphics; using System.Runtime.InteropServices; namespace MonoTest { class Program { static void Main(string[] args) { NSApplication.Init(); using (var p = new NSAutoreleasePool()) { NSApplication.SharedApplication.Delegate = new AppDelegate(); NSApplication.Main(args); } } } class AppDelegate : NSApplicationDelegate { Game1 game; public override void FinishedLaunching(MonoMac.Foundation.NSObject notification) { game = new Game1(); game.Run(); } public override bool ApplicationShouldTerminateAfterLastWindowClosed(NSApplication sender) { return true; } } } ================================================ FILE: Tests/Interactive/MacOS/TextureScaleColorTest/TextureScaleColorTest.csproj ================================================ Debug x86 10.0.0 2.0 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A} {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe TextureScaleColorTest TextureScaleColorTest true full false bin\Debug DEBUG; prompt 4 x86 false none false bin\Release prompt 4 x86 false {36C538E6-C32A-4A8D-A39C-566173D7118E} MonoGame.Framework.MacOS ================================================ FILE: Tests/Interactive/MonoGame.InteractiveTests.Linux.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.Linux", "..\..\MonoGame\MonoGame.Framework\MonoGame.Framework.Linux.csproj", "{35253CE1-C864-4CD3-8249-4D1319748E8F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.Linux", "..\..\MonoGame\ThirdParty\Lidgren.Network\Lidgren.Network.Linux.csproj", "{758CB33D-6EBD-41EA-BB0C-55B1C97A325F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MouseGetStateAndIsMouseVisibleTester", "Linux\MouseGetStateAndIsMouseVisibleTester\MouseGetStateAndIsMouseVisibleTester.csproj", "{6BC96721-9A69-4698-BF22-7BDB319FF381}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|x86.ActiveCfg = Debug|x86 {35253CE1-C864-4CD3-8249-4D1319748E8F}.Debug|x86.Build.0 = Debug|x86 {35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.ActiveCfg = Release|x86 {35253CE1-C864-4CD3-8249-4D1319748E8F}.Release|x86.Build.0 = Release|x86 {6BC96721-9A69-4698-BF22-7BDB319FF381}.Debug|x86.ActiveCfg = Debug|x86 {6BC96721-9A69-4698-BF22-7BDB319FF381}.Debug|x86.Build.0 = Debug|x86 {6BC96721-9A69-4698-BF22-7BDB319FF381}.Release|x86.ActiveCfg = Release|x86 {6BC96721-9A69-4698-BF22-7BDB319FF381}.Release|x86.Build.0 = Release|x86 {758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Debug|x86.ActiveCfg = Debug|Any CPU {758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Debug|x86.Build.0 = Debug|Any CPU {758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Release|x86.ActiveCfg = Release|Any CPU {758CB33D-6EBD-41EA-BB0C-55B1C97A325F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = ..\..\MonoGame\MonoGame.Framework\MonoGame.Framework.Linux.csproj EndGlobalSection EndGlobal ================================================ FILE: Tests/Interactive/MonoGame.InteractiveTests.MacOS.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MouseGetStateAndIsMouseVisibleTester", "MacOS\MouseGetStateAndIsMouseVisibleTester\MouseGetStateAndIsMouseVisibleTester\MouseGetStateAndIsMouseVisibleTester.csproj", "{7B2F1E86-1B56-4F78-9265-EA8852442171}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.MacOS", "..\..\MonoGame.Framework\MonoGame.Framework.MacOS.csproj", "{36C538E6-C32A-4A8D-A39C-566173D7118E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.MacOS", "..\..\ThirdParty\Lidgren.Network\Lidgren.Network.MacOS.csproj", "{5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GamePadTest", "MacOS\GamePadTest\GamePadTest.csproj", "{E251B0C1-ED74-4210-A0D5-9E4710FEA61F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimitivesTest", "MacOS\PrimitivesTest\PrimitivesTest.csproj", "{9704681E-C6DB-4946-9F31-0EF9BE63090A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextureScaleColorTest", "MacOS\TextureScaleColorTest\TextureScaleColorTest.csproj", "{ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestDataSetAndGet", "MacOS\TestDataSetAndGet\TestDataSetAndGet.csproj", "{98CB640D-B8C4-496F-9978-F2571268BD70}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoundTest_MacOS", "MacOS\SoundTest\SoundTest_MacOS.csproj", "{FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoundTest2_MacOs", "MacOS\SoundTest2\SoundTest2_MacOs\SoundTest2_MacOs.csproj", "{79A32C2C-0F38-4ADE-88D1-F8502C520570}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlockingRun", "MacOS\BlockingRun\BlockingRun.csproj", "{75D4D875-093F-4C00-8EE5-C7B39D2F4C18}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 Distribution|Any CPU = Distribution|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.ActiveCfg = Debug|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|x86.Build.0 = Debug|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.ActiveCfg = Distribution|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.Build.0 = Distribution|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.ActiveCfg = Release|Any CPU {36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|x86.Build.0 = Release|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Debug|x86.ActiveCfg = Debug|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Debug|x86.Build.0 = Debug|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Distribution|Any CPU.Build.0 = Debug|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Release|x86.ActiveCfg = Release|Any CPU {75D4D875-093F-4C00-8EE5-C7B39D2F4C18}.Release|x86.Build.0 = Release|Any CPU {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Debug|x86.ActiveCfg = Debug|x86 {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Debug|x86.Build.0 = Debug|x86 {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Distribution|Any CPU.ActiveCfg = Debug|x86 {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Distribution|Any CPU.Build.0 = Debug|x86 {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Release|x86.ActiveCfg = Release|x86 {79A32C2C-0F38-4ADE-88D1-F8502C520570}.Release|x86.Build.0 = Release|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.ActiveCfg = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Debug|x86.Build.0 = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Distribution|Any CPU.ActiveCfg = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Distribution|Any CPU.Build.0 = Debug|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.ActiveCfg = Release|x86 {7B2F1E86-1B56-4F78-9265-EA8852442171}.Release|x86.Build.0 = Release|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Debug|x86.ActiveCfg = Debug|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Debug|x86.Build.0 = Debug|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Distribution|Any CPU.ActiveCfg = Debug|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Distribution|Any CPU.Build.0 = Debug|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Release|x86.ActiveCfg = Release|x86 {9704681E-C6DB-4946-9F31-0EF9BE63090A}.Release|x86.Build.0 = Release|x86 {98CB640D-B8C4-496F-9978-F2571268BD70}.Debug|x86.ActiveCfg = Debug|Any CPU {98CB640D-B8C4-496F-9978-F2571268BD70}.Debug|x86.Build.0 = Debug|Any CPU {98CB640D-B8C4-496F-9978-F2571268BD70}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {98CB640D-B8C4-496F-9978-F2571268BD70}.Distribution|Any CPU.Build.0 = Debug|Any CPU {98CB640D-B8C4-496F-9978-F2571268BD70}.Release|x86.ActiveCfg = Release|Any CPU {98CB640D-B8C4-496F-9978-F2571268BD70}.Release|x86.Build.0 = Release|Any CPU {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Debug|x86.ActiveCfg = Debug|x86 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Debug|x86.Build.0 = Debug|x86 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Distribution|Any CPU.ActiveCfg = Debug|x86 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Distribution|Any CPU.Build.0 = Debug|x86 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Release|x86.ActiveCfg = Release|x86 {ABF4BDBE-C7DE-43E5-98BC-4547FE27A64A}.Release|x86.Build.0 = Release|x86 {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.ActiveCfg = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Debug|x86.Build.0 = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Distribution|Any CPU.Build.0 = Debug|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.ActiveCfg = Release|Any CPU {5C3DC4FF-FE5A-4B94-B4A6-6F79E63F3130}.Release|x86.Build.0 = Release|Any CPU {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Debug|x86.ActiveCfg = Debug|x86 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Debug|x86.Build.0 = Debug|x86 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Distribution|Any CPU.ActiveCfg = Debug|x86 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Distribution|Any CPU.Build.0 = Debug|x86 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Release|x86.ActiveCfg = Release|x86 {E251B0C1-ED74-4210-A0D5-9E4710FEA61F}.Release|x86.Build.0 = Release|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Debug|x86.ActiveCfg = Debug|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Debug|x86.Build.0 = Debug|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Distribution|Any CPU.ActiveCfg = Debug|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Distribution|Any CPU.Build.0 = Debug|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Release|x86.ActiveCfg = Release|x86 {FE2CB4FE-6466-4B3A-B2B8-38FFD2047DBE}.Release|x86.Build.0 = Release|x86 {2DDBFED4-9955-4F02-9937-B9AE82836329}.Debug|x86.ActiveCfg = Debug|Any CPU {2DDBFED4-9955-4F02-9937-B9AE82836329}.Debug|x86.Build.0 = Debug|Any CPU {2DDBFED4-9955-4F02-9937-B9AE82836329}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {2DDBFED4-9955-4F02-9937-B9AE82836329}.Distribution|Any CPU.Build.0 = Debug|Any CPU {2DDBFED4-9955-4F02-9937-B9AE82836329}.Release|x86.ActiveCfg = Release|Any CPU {2DDBFED4-9955-4F02-9937-B9AE82836329}.Release|x86.Build.0 = Release|Any CPU {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Debug|x86.ActiveCfg = Debug|x86 {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Debug|x86.Build.0 = Debug|x86 {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Distribution|Any CPU.ActiveCfg = Debug|x86 {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Distribution|Any CPU.Build.0 = Debug|x86 {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Release|x86.ActiveCfg = Release|x86 {2E7EF8E4-5662-4E24-A23E-860CA89334C1}.Release|x86.Build.0 = Release|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Debug|x86.ActiveCfg = Debug|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Debug|x86.Build.0 = Debug|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Distribution|Any CPU.ActiveCfg = Debug|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Distribution|Any CPU.Build.0 = Debug|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Release|x86.ActiveCfg = Release|x86 {51147863-7B4E-4467-A5FA-986259EB686F}.Release|x86.Build.0 = Release|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Debug|x86.ActiveCfg = Debug|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Debug|x86.Build.0 = Debug|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Distribution|Any CPU.ActiveCfg = Debug|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Distribution|Any CPU.Build.0 = Debug|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Release|x86.ActiveCfg = Release|x86 {AFFFC991-4956-45EF-8746-C1AE3FC7A245}.Release|x86.Build.0 = Release|x86 {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Debug|x86.ActiveCfg = Debug|Any CPU {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Debug|x86.Build.0 = Debug|Any CPU {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Distribution|Any CPU.Build.0 = Debug|Any CPU {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Release|x86.ActiveCfg = Release|Any CPU {CB7B2B69-7640-4225-89F3-CE3BF428F2F3}.Release|x86.Build.0 = Release|Any CPU {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Debug|x86.ActiveCfg = Debug|x86 {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Debug|x86.Build.0 = Debug|x86 {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Distribution|Any CPU.ActiveCfg = Debug|x86 {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Distribution|Any CPU.Build.0 = Debug|x86 {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Release|x86.ActiveCfg = Release|x86 {CF7A194A-CF38-4379-909F-1B5FFB8F79C4}.Release|x86.Build.0 = Release|x86 {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Debug|x86.ActiveCfg = Debug|Any CPU {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Debug|x86.Build.0 = Debug|Any CPU {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Distribution|Any CPU.ActiveCfg = Debug|Any CPU {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Distribution|Any CPU.Build.0 = Debug|Any CPU {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Release|x86.ActiveCfg = Release|Any CPU {ECD1D53E-F50A-4299-9B0F-2F64D6063513}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = MacOS\TextureScaleColorTest\TextureScaleColorTest.csproj Policies = $0 $0.TextStylePolicy = $1 $1.inheritsSet = null $1.scope = text/x-csharp $0.CSharpFormattingPolicy = $2 $2.NamespaceBraceStyle = EndOfLine $2.ClassBraceStyle = EndOfLine $2.InterfaceBraceStyle = EndOfLine $2.StructBraceStyle = EndOfLine $2.EnumBraceStyle = EndOfLine $2.AfterDelegateDeclarationParameterComma = True $2.BeforeSizeOfParentheses = True $2.BeforeTypeOfParentheses = True $2.SpacesAfterTypecast = True $2.SpacesBeforeArrayDeclarationBrackets = True $2.inheritsSet = Mono $2.inheritsScope = text/x-csharp $2.scope = text/x-csharp $0.TextStylePolicy = $3 $3.RemoveTrailingWhitespace = True $3.inheritsSet = Mono $3.inheritsScope = text/plain $3.scope = text/plain EndGlobalSection EndGlobal ================================================ FILE: Tests/Interactive/MonoGame.InteractiveTests.Windows.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoundTest", "Windows\SoundTest\SoundTest.csproj", "{B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.Windows", "..\..\MonoGame\MonoGame.Framework\MonoGame.Framework.Windows.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.Windows", "..\..\MonoGame\ThirdParty\Lidgren.Network\Lidgren.Network.Windows.csproj", "{AE483C29-042E-4226-BA52-D247CE7676DA}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoundTest2", "Windows\SoundTest2\SoundTest2.csproj", "{FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.ActiveCfg = Debug|x86 {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.Build.0 = Debug|x86 {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.ActiveCfg = Release|x86 {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.Build.0 = Release|x86 {AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.ActiveCfg = Debug|Any CPU {AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|x86.Build.0 = Debug|Any CPU {AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.ActiveCfg = Release|Any CPU {AE483C29-042E-4226-BA52-D247CE7676DA}.Release|x86.Build.0 = Release|Any CPU {B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Debug|x86.ActiveCfg = Debug|x86 {B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Debug|x86.Build.0 = Debug|x86 {B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Release|x86.ActiveCfg = Release|x86 {B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB}.Release|x86.Build.0 = Release|x86 {FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Debug|x86.ActiveCfg = Debug|x86 {FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Debug|x86.Build.0 = Debug|x86 {FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Release|x86.ActiveCfg = Release|x86 {FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution BaseDirectory = Windows StartupItem = Windows\SoundTest2\SoundTest2.csproj outputpath = build\bin EndGlobalSection EndGlobal ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355/Game.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; namespace Issue1355 { /// /// This is the main type for your game /// public class Game : Microsoft.Xna.Framework.Game { GraphicsDeviceManager Graphics; SpriteBatch SpriteBatch; Texture2D White; SpriteFont Font; public Game() { Graphics = new GraphicsDeviceManager(this); Graphics.PreferredBackBufferWidth = 700; Graphics.PreferredBackBufferHeight = 200; Content.RootDirectory = "Content"; #if MONOGAME Window.Title = "Issue1355 (MonoGame)"; #else Window.Title = "Issue1355 (XNA)"; #endif } protected override void LoadContent() { SpriteBatch = new SpriteBatch(GraphicsDevice); White = new Texture2D(GraphicsDevice, 1, 1); White.SetData(new[] { Color.White }); Font = Content.Load("DutchAndHarley"); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); const string testText = "{Dutch & Harley}"; SpriteBatch.Begin(); var textSize = Font.MeasureString(testText); var textPosition = new Vector2(32, 32); SpriteBatch.Draw(White, textPosition, null, Color.Red * 0.25f, 0, Vector2.Zero, textSize, SpriteEffects.None, 0); SpriteBatch.DrawString(Font, testText, textPosition, Color.White); SpriteBatch.End(); base.Draw(gameTime); } public static void Main() { new Game().Run(); } } } ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355/Issue1355.csproj ================================================  {0650BBB1-A078-4536-850B-182BC3A78B81} {6D335F3A-9D43-41b4-9D22-F6F17C4BE596};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Debug x86 WinExe Properties Issue1355 Issue1355 v4.0 Client v4.0 Windows HiDef 5ddec1ed-3b22-4d4f-afee-dc1a63970f5d Game publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false false true true full false bin\x86\Debug DEBUG;TRACE;WINDOWSDX prompt 4 true false x86 false pdbonly true bin\x86\Release TRACE;WINDOWSDX prompt 4 true false x86 true False False False False False False False False False False False False False False False Issue1355Content Content False Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 true False .NET Framework 3.5 SP1 Client Profile false False .NET Framework 3.5 SP1 false False Windows Installer 3.1 true False Microsoft XNA Framework Redistributable 4.0 true ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355/Issue1355_MonoGame.csproj ================================================  {0650BBB1-A078-4536-850B-182BC3A78B82} Debug x86 WinExe Properties Issue1355 Issue1355_MonoGame v4.0 true full false bin\x86\Debug TRACE;DEBUG;WINDOWSDX;MONOGAME prompt 4 true false x86 false pdbonly true bin\x86\Release TRACE;WINDOWSDX;MONOGAME prompt 4 true false x86 true False False False {7DE47032-A904-4C29-BD22-2D235E8D91BA} MonoGame.Framework.Windows ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355.sln ================================================  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Issue1355", "Issue1355\Issue1355.csproj", "{0650BBB1-A078-4536-850B-182BC3A78B81}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Issue1355Content", "Issue1355Content\Issue1355Content.contentproj", "{2C0E7626-F641-4C10-9682-28CDC9F6EA70}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Issue1355_MonoGame", "Issue1355\Issue1355_MonoGame.csproj", "{0650BBB1-A078-4536-850B-182BC3A78B82}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.Windows", "..\..\..\..\MonoGame.Framework\MonoGame.Framework.Windows.csproj", "{7DE47032-A904-4C29-BD22-2D235E8D91BA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0650BBB1-A078-4536-850B-182BC3A78B81}.Debug|x86.ActiveCfg = Debug|x86 {0650BBB1-A078-4536-850B-182BC3A78B81}.Debug|x86.Build.0 = Debug|x86 {0650BBB1-A078-4536-850B-182BC3A78B81}.Release|x86.ActiveCfg = Release|x86 {0650BBB1-A078-4536-850B-182BC3A78B81}.Release|x86.Build.0 = Release|x86 {2C0E7626-F641-4C10-9682-28CDC9F6EA70}.Debug|x86.ActiveCfg = Debug|x86 {2C0E7626-F641-4C10-9682-28CDC9F6EA70}.Release|x86.ActiveCfg = Release|x86 {0650BBB1-A078-4536-850B-182BC3A78B82}.Debug|x86.ActiveCfg = Debug|x86 {0650BBB1-A078-4536-850B-182BC3A78B82}.Debug|x86.Build.0 = Debug|x86 {0650BBB1-A078-4536-850B-182BC3A78B82}.Release|x86.ActiveCfg = Release|x86 {0650BBB1-A078-4536-850B-182BC3A78B82}.Release|x86.Build.0 = Release|x86 {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.ActiveCfg = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Debug|x86.Build.0 = Debug|Any CPU {7DE47032-A904-4C29-BD22-2D235E8D91BA}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355Content/DutchAndHarley.spritefont ================================================  Dutch & Harley 48 0 true þ ================================================ FILE: Tests/Interactive/Windows/Issue1355/Issue1355Content/Issue1355Content.contentproj ================================================  {2C0E7626-F641-4C10-9682-28CDC9F6EA70} {96E2B04D-8817-42c6-938A-82C39BA4D311};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Debug x86 Library Properties v4.0 v4.0 bin\$(Platform)\$(Configuration) Content x86 x86 Issue1355Content False False False False False False DutchAndHarley FontDescriptionImporter FontDescriptionProcessor ================================================ FILE: Tests/Interactive/Windows/SoundTest/SoundTest.csproj ================================================ Debug x86 9.0.21022 2.0 {B1C36450-C9AA-4CDF-BF66-DB5FEA11B1EB} Exe SoundTest SoundTest true full false bin\Debug DEBUG; WINDOWSDX prompt 4 x86 false none false bin\Release prompt 4 x86 false {7DE47032-A904-4C29-BD22-2D235E8D91BA} MonoGame.Framework.Windows ..\..\..\..\OpenTK1.0\Binaries\OpenTK\Release\OpenTK.dll Game1.cs Program.cs Content\DepositingIntoVat_Loop.wav Content\DepositingIntoVat_Loop.xnb Content\FillingHoneyPot_Loop.wav Content\FillingHoneyPot_Loop.xnb Content\ExplosionSound.xnb PreserveNewest Content\laser1.wav PreserveNewest Content\Explosion.xnb PreserveNewest ================================================ FILE: Tests/Interactive/Windows/SoundTest2/SoundTest2.csproj ================================================ Debug x86 10.0.0 2.0 {FE30D66F-905F-4DB6-9B36-EA66F8D2F5A2} Exe SoundTest2 SoundTest2 true full false bin\Debug DEBUG; WINDOWSDX prompt 4 x86 false none false bin\Release prompt 4 x86 false {7DE47032-A904-4C29-BD22-2D235E8D91BA} MonoGame.Framework.Windows Game1.cs Program.cs Content\DepositingIntoVat_Loop.wav Content\DepositingIntoVat_Loop.xnb Content\ExplosionSound.xnb PreserveNewest Content\FillingHoneyPot_Loop.wav Content\FillingHoneyPot_Loop.xnb Content\laser1.wav Content\Explosion.xnb PreserveNewest ================================================ FILE: Tests/Interactive/iOS/AppDelegate.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace MonoGame.InteractiveTests.iOS { [Register("AppDelegate")] public partial class AppDelegate : UIApplicationDelegate { UIWindow _window; UINavigationController _navigationController; RootViewController _rootViewController; public override bool FinishedLaunching(UIApplication app, NSDictionary options) { _window = new UIWindow(UIScreen.MainScreen.Bounds); _rootViewController = new RootViewController(); _navigationController = new UINavigationController(_rootViewController); _window.RootViewController = _navigationController; _window.MakeKeyAndVisible(); return true; } } } ================================================ FILE: Tests/Interactive/iOS/Categories.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace MonoGame.InteractiveTests { static class Categories { public const string Default = General; public const string General = "General"; public const string GamerServices = "Gamer Services"; public const string Meta = "Meta Tests"; public const string Touch = "Touch"; } } ================================================ FILE: Tests/Interactive/iOS/Guide/GuideTestGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using MonoGame.InteractiveTests.TestUI; using System.Drawing; namespace MonoGame.InteractiveTests { [InteractiveTest("Guide", Categories.GamerServices)] public class GuideTestGame : Game { public GuideTestGame() { var graphics = new GraphicsDeviceManager(this); graphics.SupportedOrientations = DisplayOrientation.Portrait | DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight; Components.Add(new GamerServicesComponent(this)); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); TouchPanel.EnabledGestures = GestureType.DoubleTap | GestureType.Tap; } private SpriteFont _font; protected override void LoadContent() { base.LoadContent(); _font = Content.Load(@"Fonts\Default"); InitializeGui(); } private Universe _universe; private Label _labelEndShowKeyboardInput; private Label _labelShowKeyboardInputCallback; private void InitializeGui() { _universe = new Universe(Content) { AutoHandleInput = true }; Components.Add(new UniverseComponent(this, _universe)); var exitButton = new Button { BackgroundColor = Color.Black, Content = new Label { Font = _font, Text = "Exit", TextColor = Color.White }, Location = PointF.Empty }; exitButton.Content.SizeToFit(); exitButton.SizeToFit(); exitButton.Tapped += (sender, e) => { Exit(); }; _labelEndShowKeyboardInput = new Label { Frame = new RectangleF(20, 60, 320, 20), Font = _font, TextColor = Color.White }; _labelShowKeyboardInputCallback = new Label { Frame = new RectangleF( _labelEndShowKeyboardInput.Frame.Left, _labelEndShowKeyboardInput.Frame.Bottom + 10, _labelEndShowKeyboardInput.Frame.Width, _labelEndShowKeyboardInput.Frame.Height), Font = _font, TextColor = Color.White }; var buttonShowKeyboardInput = new Button { BackgroundColor = Color.Lavender, Content = new Label { Font = _font, Text = "Show Keyboard Input", TextColor = Color.Black }, Location = new PointF(20, 200) }; buttonShowKeyboardInput.Content.SizeToFit(); buttonShowKeyboardInput.SizeToFit(); buttonShowKeyboardInput.Tapped += (sender, e) => { TestShowKeyboardInput( "Some normal title", "And a perfectly ordinary description", "the default"); }; var buttonShowKeyboardInputLong = new Button { BackgroundColor = Color.Lavender, Content = new Label { Font = _font, Text = "Show Keyboard Input (long)", TextColor = Color.Black }, Location = new PointF( buttonShowKeyboardInput.Frame.Left, buttonShowKeyboardInput.Frame.Bottom + 10) }; buttonShowKeyboardInputLong.Content.SizeToFit(); buttonShowKeyboardInputLong.SizeToFit(); buttonShowKeyboardInputLong.Tapped += (sender, e) => { TestShowKeyboardInput( "This is the title that never ends, yes it goes on and on my friends. One " + "day some people started writing it, etc", "And here is a super-duper description that rambles on a bit about, you " + "know, whatever. And then finally ends over here at about this point.", "surprisingly terse default"); }; _universe.Add(exitButton); _universe.Add(_labelEndShowKeyboardInput); _universe.Add(_labelShowKeyboardInputCallback); _universe.Add(buttonShowKeyboardInput); _universe.Add(buttonShowKeyboardInputLong); } private void TestShowKeyboardInput(string title, string description, string defaultText) { var result = Guide.BeginShowKeyboardInput( PlayerIndex.One, title, description, defaultText, Guide_ShowKeyboardInputCallback, null); _labelEndShowKeyboardInput.Text = "EndShow: " + (Guide.EndShowKeyboardInput(result) ?? ""); } private void Guide_ShowKeyboardInputCallback(IAsyncResult result) { _labelShowKeyboardInputCallback.Text = "CallBack: " + (Guide.EndShowKeyboardInput(result) ?? ""); } protected override void Update(GameTime gameTime) { base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Indigo); base.Draw(gameTime); } } } ================================================ FILE: Tests/Interactive/iOS/Info.plist ================================================ UIDeviceFamily 1 2 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: Tests/Interactive/iOS/InteractiveTestAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace MonoGame.InteractiveTests { [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] public class InteractiveTestAttribute : Attribute { public InteractiveTestAttribute(string name, string category) { _name = name; _category = category; } public InteractiveTestAttribute(string name) : this(name, null) { } public InteractiveTestAttribute() : this(null, null) { } private readonly string _name; public string Name { get { return _name; } } private readonly string _category; public string Category { get { return _category; } } } } ================================================ FILE: Tests/Interactive/iOS/Main.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace MonoGame.InteractiveTests.iOS { public class Application { static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } ================================================ FILE: Tests/Interactive/iOS/MonoGame.InteractiveTests.iOS.csproj ================================================ Debug iPhoneSimulator 10.0.0 2.0 {FD07CA6D-A40E-4D8F-9F4D-C90389A97DDE} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe MonoGame.InteractiveTests MonoGameInteractiveTestsiOS true full false bin\iPhoneSimulator\Debug DEBUG; prompt 4 false true true None none false bin\iPhoneSimulator\Release prompt 4 false None true full false bin\iPhone\Debug DEBUG; prompt 4 false iPhone Developer true true none false bin\iPhone\Release prompt 4 false iPhone Developer {734EAA48-F1CA-481A-B391-0285BC0E8B40} Lidgren.Network.iOS {DB8508BB-9849-4CC2-BC0F-8EB5DACB3C47} MonoGame.Framework.iOS {F759DE08-E160-4BB4-9A09-404D5694A4EC} MonoGame.Tests.Assets.iOS Content\Fonts\Default.xnb PreserveNewest Content\Textures\white-1.xnb PreserveNewest ================================================ FILE: Tests/Interactive/iOS/RootViewController.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Reflection; using MonoTouch.Foundation; using MonoTouch.UIKit; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace MonoGame.InteractiveTests.iOS { public class RootViewController : UIViewController { private static bool UserInterfaceIdiomIsPhone { get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; } } private UITableView _tableView; private readonly InteractiveTest[] _interactiveTests; private Game _activeGame; private InteractiveTest _activeTest; public RootViewController() : base() { _interactiveTests = DiscoverInteractiveTests(); Title = "Interactive Tests"; } private static InteractiveTest[] DiscoverInteractiveTests() { var assembly = Assembly.GetExecutingAssembly(); var tests = new List(); foreach (var type in assembly.GetTypes()) { InteractiveTest test; if (!InteractiveTest.TryCreateFrom(type, out test)) continue; tests.Add(test); } return tests.ToArray(); } public override void LoadView() { View = new UIView(); _tableView = new UITableView(new RectangleF(PointF.Empty, View.Frame.Size)); _tableView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth; _tableView.Delegate = new TableViewDelegate(this); _tableView.DataSource = new TableViewDataSource(this); View.Add(_tableView); } public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation) { if (UserInterfaceIdiomIsPhone) { return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown); } else { return true; } } private void RunTest(InteractiveTest test) { if (_activeGame != null || _activeTest != null) throw new InvalidOperationException("An interactive test is already active."); _activeTest = test; _activeGame = test.Create(); _activeGame.Exiting += ActiveGame_Exiting; _activeGame.Run(); View.Window.Hidden = true; } private void ActiveGame_Exiting(object sender, EventArgs e) { _activeGame.Dispose(); _activeGame = null; _activeTest = null; // HACK: TouchPanel should probably clear itself at the // end of a Game run. TouchPanel.EnabledGestures = GestureType.None; View.Window.MakeKeyAndVisible(); View.LayoutSubviews(); } private class InteractiveTest { public static bool TryCreateFrom(Type type, out InteractiveTest test) { test = null; if (!typeof(Game).IsAssignableFrom(type)) return false; var attrs = type.GetCustomAttributes(typeof(InteractiveTestAttribute), false); if (attrs.Length == 0) return false; var attr = (InteractiveTestAttribute)attrs[0]; test = new InteractiveTest( type, attr.Name ?? type.Name, attr.Category ?? Categories.Default); return true; } private InteractiveTest(Type type, string name, string category) { _type = type; _name = name; _category = category; } private readonly Type _type; public Type Type { get { return _type; } } private readonly string _name; public string Name { get { return _name; } } private readonly string _category; public string Category { get { return _category; } } public Game Create() { return (Game)Activator.CreateInstance(_type); } } private class TableViewDelegate : UITableViewDelegate { private readonly RootViewController _owner; public TableViewDelegate(RootViewController owner) { if (owner == null) throw new ArgumentNullException("owner"); _owner = owner; } public override void RowSelected(UITableView tableView, NSIndexPath indexPath) { var tests = (IEnumerable)_owner._interactiveTests; var categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray(); var category = categories[indexPath.Section]; var test = tests .Where(x => x.Category == category) .OrderBy(x => x.Name) .ElementAt(indexPath.Row); _owner.RunTest(test); } } private class TableViewDataSource : UITableViewDataSource { private readonly RootViewController _owner; public TableViewDataSource(RootViewController owner) { if (owner == null) throw new ArgumentNullException("owner"); _owner = owner; } public override int NumberOfSections(UITableView tableView) { var tests = (IEnumerable)_owner._interactiveTests; return tests.Select(x => x.Category).Distinct().Count(); } public override int RowsInSection(UITableView tableView, int section) { var tests = (IEnumerable)_owner._interactiveTests; var categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray(); var category = categories[section]; return tests.Where(x => x.Category == category).Count(); } public override string TitleForHeader(UITableView tableView, int section) { var tests = (IEnumerable)_owner._interactiveTests; var categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray(); return categories[section]; } public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { var tests = (IEnumerable)_owner._interactiveTests; var categories = tests.Select(x => x.Category).OrderBy(x => x).ToArray(); var category = categories[indexPath.Section]; var test = tests .Where(x => x.Category == category) .OrderBy(x => x.Name) .ElementAt(indexPath.Row); var cell = tableView.DequeueReusableCell("UITableViewCell"); if (cell == null) cell = new UITableViewCell(UITableViewCellStyle.Default, "UITableViewCell"); cell.TextLabel.Text = test.Name; return cell; } } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/Button.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using System.Drawing; namespace MonoGame.InteractiveTests.TestUI { class Button : View { public Button() { Padding = new PaddingF(10); } private View _content; public View Content { get { return _content; } set { if (_content != value) { if (_content != null) _content.RemoveFromSuperview(); _content = value; if (_content != null) Add(_content); } } } private PaddingF _padding; public PaddingF Padding { get { return _padding; } set { if (_padding != value) { _padding = value; SetNeedsLayout(); } } } public override void LayoutSubviews() { foreach (var view in Subviews) { view.LayoutIfNeeded(); var frame = view.Frame; frame.X = Math.Max(frame.X, Padding.Left); frame.Y = Math.Max(frame.Y, Padding.Top); view.Frame = frame; } } public override System.Drawing.SizeF SizeThatFits(SizeF size) { var maxContentSize = size; if (size != Size.Empty) { size.Width -= Padding.Horizontal; size.Height -= Padding.Vertical; } var fitSize = Content.SizeThatFits(maxContentSize); fitSize.Width += Padding.Horizontal; fitSize.Height += Padding.Vertical; return fitSize; } public event EventHandler Tapped; protected virtual void OnTapped(EventArgs e) { var handler = Tapped; if (handler != null) handler(this, e); } public override bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime) { if (gestureSample.GestureType == GestureType.Tap) { OnTapped(EventArgs.Empty); return true; } return base.HandleGestureSample(gestureSample, gameTime); } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/DrawContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace MonoGame.InteractiveTests.TestUI { class DrawContext : IDisposable { private readonly Stack _states; public DrawContext(GraphicsDevice graphicsDevice, Matrix matrix) { _graphicsDevice = graphicsDevice; _spriteBatch = new SpriteBatch(graphicsDevice); _matrix = matrix; _states = new Stack(); } public DrawContext(GraphicsDevice graphicsDevice) : this(graphicsDevice, Matrix.Identity) { } ~DrawContext() { Dispose(false); } private readonly GraphicsDevice _graphicsDevice; public GraphicsDevice GraphicsDevice { get { return _graphicsDevice; } } private Matrix _matrix; public Matrix Matrix { get { return _matrix; } } private readonly SpriteBatch _spriteBatch; public SpriteBatch SpriteBatch { get { return _spriteBatch; } } public void Begin(Matrix matrix) { if (_states.Count > 0) _spriteBatch.End(); _states.Push(_matrix); _matrix = matrix; _spriteBatch.Begin( SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, _matrix); } public void End() { _spriteBatch.End(); _matrix = _states.Pop(); if (_states.Count > 0) _spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, _matrix); } #region IDisposable Members public void Dispose() { Dispose(true); } protected virtual void Dispose(bool disposing) { if (disposing) { _spriteBatch.Dispose(); } } #endregion } } ================================================ FILE: Tests/Interactive/iOS/TestUI/Label.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System.Drawing; namespace MonoGame.InteractiveTests.TestUI { class Label : View { public Label() { TextColor = Color.Black; Padding = new PaddingF(3); } public SpriteFont Font { get; set; } public string Text { get; set; } public Color TextColor { get; set; } public PaddingF Padding { get; set; } public override SizeF SizeThatFits(SizeF size) { if (Font == null || string.IsNullOrWhiteSpace(Text)) return Frame.Size; var sizeVector = Font.MeasureString(Text); return new SizeF(sizeVector.X + Padding.Horizontal, sizeVector.Y + Padding.Vertical); } protected override void DrawForeground(DrawContext context, GameTime gameTime) { if (Font != null && !string.IsNullOrWhiteSpace(Text)) { context.SpriteBatch.DrawString( Font, Text, new Vector2(Padding.Left, Padding.Top), TextColor); } } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/PaddingF.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace MonoGame.InteractiveTests.TestUI { struct PaddingF { public float Left; public float Top; public float Right; public float Bottom; public float Horizontal { get { return Left + Right; } } public float Vertical { get { return Top + Bottom; } } public PaddingF(float all) { Left = Top = Right = Bottom = all; } public PaddingF(float left, float top, float right, float bottom) { Left = left; Top = top; Right = right; Bottom = bottom; } public static bool operator ==(PaddingF a, PaddingF b) { return a.Left == b.Left && a.Top == b.Top && a.Right == b.Right && a.Bottom == b.Bottom; } public static bool operator !=(PaddingF a, PaddingF b) { return !(a == b); } public override bool Equals(object obj) { if (!(obj is PaddingF)) return false; return this == (PaddingF)obj; } public override int GetHashCode() { return Left.GetHashCode() ^ (Top.GetHashCode() << 8) ^ (Right.GetHashCode() << 16) ^ (Bottom.GetHashCode() << 24); } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/TestUITestGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Drawing; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; namespace MonoGame.InteractiveTests.TestUI { [InteractiveTest("Test UI Test", Categories.Meta)] public class TestUITestGame : Game { private SpriteFont _font; private Universe _universe; public TestUITestGame() { new GraphicsDeviceManager(this); TouchPanel.EnabledGestures = GestureType.DoubleTap | GestureType.Tap; Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { base.LoadContent(); _font = Content.Load(@"Fonts\Default"); _universe = new Universe(Content) { AutoHandleInput = true }; Components.Add(new UniverseComponent(this, _universe)); var exitButton = new Button { BackgroundColor = Color.Black, Content = new Label { Font = _font, Text = "Exit", TextColor = Color.White }, Location = PointF.Empty }; exitButton.Content.SizeToFit(); exitButton.SizeToFit(); exitButton.Tapped += (sender, e) => { Exit(); }; var label = new Label { BackgroundColor = Color.Indigo, Font = _font, Location = new PointF(20, 200), Text = "fantastic", TextColor = Color.White }; label.SizeToFit(); var button1 = new Button { BackgroundColor = Color.OrangeRed, Content = new Label { Font = _font, Text = "Button 1", TextColor = Color.White }, Location = new PointF(label.Frame.Left, 60) }; button1.Content.SizeToFit(); button1.SizeToFit(); button1.Tapped += (sender, e) => { label.Text = ("button 1!"); }; var button2 = new Button { BackgroundColor = Color.Goldenrod, Content = new Label { Font = _font, Text = "Button 2", TextColor = Color.White }, Location = new PointF(button1.Frame.Left, button1.Frame.Bottom) }; button2.Content.SizeToFit(); button2.SizeToFit(); button2.Tapped += (sender, e) => { label.Text = ("button 2!"); }; _universe.Add(exitButton); _universe.Add(button1); _universe.Add(button2); _universe.Add(label); } protected override void UnloadContent() { base.UnloadContent(); _font = null; } protected override void Update(GameTime gameTime) { base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.DarkBlue); base.Draw(gameTime); } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/Universe.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Drawing; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; namespace MonoGame.InteractiveTests.TestUI { class Universe { private readonly ViewCollection _views; public Universe(ContentManager content) { if (content == null) throw new ArgumentNullException("content"); _content = content; _views = new ViewCollection(null); _views.Universe = this; } private readonly ContentManager _content; public ContentManager Content { get { return _content; } } public bool AutoHandleInput { get; set; } public void Add(View view) { _views.Add(view); } public bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime) { bool handled = false; var position = new PointF(gestureSample.Position.X, gestureSample.Position.Y); foreach (var view in _views.HitTest(position)) { if (view.HandleGestureSample(gestureSample, gameTime)) { handled = true; break; } } return handled; } public void Update(GameTime gameTime) { if (AutoHandleInput) { while (TouchPanel.IsGestureAvailable) { var gestureSample = TouchPanel.ReadGesture(); HandleGestureSample(gestureSample, gameTime); } } } public void Draw(DrawContext context, GameTime gameTime) { _views.Draw(context, gameTime); } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/UniverseComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace MonoGame.InteractiveTests.TestUI { class UniverseComponent : DrawableGameComponent { public UniverseComponent(Game game, Universe universe = null) : base(game) { _universe = universe ?? new Universe(game.Content); } private readonly Universe _universe; public Universe Universe { get { return _universe; } } public override void Update(GameTime gameTime) { base.Update(gameTime); _universe.Update(gameTime); } private DrawContext _drawContext; public override void Draw(GameTime gameTime) { base.Draw(gameTime); if (_drawContext == null || _drawContext.GraphicsDevice != GraphicsDevice) _drawContext = new DrawContext(GraphicsDevice, Matrix.Identity); _drawContext.Begin(Matrix.Identity); try { _universe.Draw(_drawContext, gameTime); } finally { _drawContext.End(); } } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/View.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; namespace MonoGame.InteractiveTests.TestUI { class View { private readonly ViewCollection _subviews; private readonly ReadOnlyCollection _readOnlySubviews; private bool _needsLayout; public View() { _subviews = new ViewCollection(this); _readOnlySubviews = new ReadOnlyCollection(_subviews); BackgroundColor = Color.Transparent; IsVisible = true; } public Color BackgroundColor { get; set; } private RectangleF _frame; public RectangleF Frame { get { return _frame; } set { if (_frame != value) { _frame = SetFrameCore(value); } } } public bool IsVisible { get; set; } public PointF Location { get { return _frame.Location; } set { var newFrame = Frame; newFrame.Location = value; Frame = newFrame; } } public ReadOnlyCollection Subviews { get { return _readOnlySubviews; } } public View Superview { get; set; } private Universe _universe; public Universe Universe { get { return _universe; } set { if (_universe != value) { _universe = value; _subviews.Universe = value; } } } public void Add(View subview) { _subviews.Add(subview); SetNeedsLayout(); } public IEnumerable HitTest(PointF p) { foreach (var view in _subviews.HitTest(p)) yield return view; if (HitTestSelf(p)) yield return this; } public bool HitTestSelf(PointF p) { var rect = Frame; rect.Location = PointF.Empty; return rect.Contains(p); } public void LayoutIfNeeded() { if (_needsLayout) { LayoutSubviews(); _needsLayout = false; } } public virtual void LayoutSubviews() { } protected virtual RectangleF SetFrameCore(RectangleF frame) { return frame; } public virtual bool HandleGestureSample(GestureSample gestureSample, GameTime gameTime) { return false; } public void RemoveFromSuperview() { if (Superview == null) throw new InvalidOperationException("The View does not have a Superview"); Superview._subviews.Remove(this); Superview.SetNeedsLayout(); } public void SetNeedsLayout() { _needsLayout = true; } public virtual SizeF SizeThatFits(SizeF size) { return Frame.Size; } public void SizeToFit() { // TODO: Distribute the new size according to this // View's Origin (which doesn't exist yet). if (Superview == null) Frame = new RectangleF(Frame.Location, SizeThatFits(SizeF.Empty)); else // TODO: Calculate the available size based on // this View's location and Origin and // the Superview Frame. Frame = new RectangleF(Frame.Location, SizeThatFits(Superview.Frame.Size)); } public virtual void Update(GameTime gameTime) { LayoutIfNeeded(); } public virtual void Draw(DrawContext context, GameTime gameTime) { LayoutIfNeeded(); DrawBackground(context, gameTime); DrawForeground(context, gameTime); _subviews.Draw(context, gameTime); DrawAboveSubviews(context, gameTime); } protected virtual void DrawBackground(DrawContext context, GameTime gameTime) { if (BackgroundColor.A > 0) { var swatch = Universe.Content.Load(@"Textures\white-1"); context.SpriteBatch.Draw( swatch, Vector2.Zero, null, BackgroundColor, 0, Vector2.Zero, new Vector2(Frame.Width, Frame.Height), SpriteEffects.None, 0); } } protected virtual void DrawForeground(DrawContext context, GameTime gameTime) { } protected virtual void DrawAboveSubviews(DrawContext context, GameTime gameTime) { } } } ================================================ FILE: Tests/Interactive/iOS/TestUI/ViewCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using Microsoft.Xna.Framework; namespace MonoGame.InteractiveTests.TestUI { class ViewCollection : Collection { private readonly View _superview; public ViewCollection(View superview) { _superview = superview; } private Universe _universe; public Universe Universe { get { return _universe; } set { _universe = value; foreach (var view in Items) view.Universe = value; } } public IEnumerable HitTest(PointF p) { foreach (var view in Items) { var local = p; local.X -= view.Frame.X; local.Y -= view.Frame.Y; foreach (var subview in view.HitTest(local)) yield return subview; } } public IEnumerable HitTest(RectangleF rect) { throw new NotImplementedException(); } public void Draw(DrawContext context, GameTime gameTime) { foreach (var view in Items) { if (!view.IsVisible) continue; var matrix = context.Matrix * Matrix.CreateTranslation(view.Frame.X, view.Frame.Y, 0); context.Begin(matrix); try { view.Draw(context, gameTime); } finally { context.End(); } } } protected override void InsertItem(int index, View item) { base.InsertItem(index, item); if (item.Superview != null) item.RemoveFromSuperview(); item.Superview = _superview; item.Universe = _universe; } protected override void SetItem(int index, View item) { throw new InvalidOperationException( "ViewCollection does not support setting items by index."); } protected override void ClearItems() { foreach (var view in Items) { view.Superview = null; view.Universe = null; } base.ClearItems(); } } } ================================================ FILE: Tests/Interactive/iOS/TextureScaleTest/Info.plist ================================================ UIDeviceFamily 2 UISupportedInterfaceOrientations UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: Tests/Interactive/iOS/TextureScaleTest/Program.cs ================================================ #region File Description //----------------------------------------------------------------------------- // Program.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion using System; #if IOS || TVOS using MonoTouch.Foundation; using MonoTouch.UIKit; #endif namespace MonoTest { [Register("AppDelegate")] class Program : UIApplicationDelegate { public override void FinishedLaunching(UIApplication app) { // Fun begins.. using (Game1 game = new Game1()) { game.Run(); } //MediaLibrary lib = new MediaLibrary(); //object result = lib.Playlists; } static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } ================================================ FILE: Tests/Interactive/iOS/TextureScaleTest/TextureScaleColorTest.csproj ================================================ Debug iPhoneSimulator 10.0.0 2.0 {0955881C-16CE-4A54-B962-11131B471047} {6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Exe TextureScaleTest TextureScaleTest true full false bin\iPhoneSimulator\Debug DEBUG; IOS prompt 4 false None true none false bin\iPhoneSimulator\Release prompt 4 false None true full false bin\iPhone\Debug DEBUG; prompt 4 false true iPhone Developer none false bin\iPhone\Release prompt 4 false iPhone Developer {DB8508BB-9849-4CC2-BC0F-8EB5DACB3C47} MonoGame.Framework.iOS Game1.cs Content\FontCalibri14.xnb Content\blank.xnb ================================================ FILE: Tests/Kni.Tests.SDL2.GL.csproj ================================================  false False net8.0 {DED2DDB6-D4BE-B1B4-2E54-657374732E57} Exe Kni.Tests Kni.Tests true CS0067;CS1591;CS1574;CS0419;CS8500 true bin\DesktopGL\$(Platform)\$(Configuration)\ obj\DesktopGL\$(Platform)\$(Configuration)\ $(DefineConstants);KNI;DESKTOPGL Default Kni.Tests.Program true PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest Assets\Effects\Stock\AlphaTestEffect.fx PreserveNewest Assets\Effects\Stock\BasicEffect.fx PreserveNewest Assets\Effects\Stock\DualTextureEffect.fx PreserveNewest Assets\Effects\Stock\EnvironmentMapEffect.fx PreserveNewest Assets\Effects\Stock\SkinnedEffect.fx PreserveNewest Assets\Effects\Stock\SpriteEffect.fx PreserveNewest Assets\Effects\Stock\Common.fxh PreserveNewest Assets\Effects\Stock\Lighting.fxh PreserveNewest Assets\Effects\Stock\Macros.fxh PreserveNewest Assets\Effects\Stock\Structures.fxh PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {1dc4c439-a8a6-4a11-ab3b-a88dcba05449} Xna.Framework.Content {4b8d3f73-bbd2-4057-b86b-8b73b957dc0f} Xna.Framework.Graphics {3f81f76d-f0f3-44fe-a256-40af153c33f7} Xna.Framework.Audio {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False {e37f98d7-c4e8-4556-b322-aef99638ece1} Xna.Framework.Design {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor {63486463-8aee-483e-862a-7720cd62b4df} Xna.Framework.Content.Pipeline.Media {6D75E618-19CA-4C51-9546-F10965FBC0B8} XNA.Framework.DesktopGL runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Tests/Kni.Tests.WinForms.DX11.csproj ================================================  false False net8.0-windows true {DED2DDB6-D4BE-656D-2E54-657374732E57} Exe Kni.Tests Kni.Tests true CS0067;CS1591;CS1574;CS0419;CS8500 true bin\WindowsDX11\$(Platform)\$(Configuration)\ obj\WindowsDX11\$(Platform)\$(Configuration)\ $(DefineConstants);KNI;WINDOWSDX Default Kni.Tests.Program true PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest Assets\Effects\Stock\AlphaTestEffect.fx PreserveNewest Assets\Effects\Stock\BasicEffect.fx PreserveNewest Assets\Effects\Stock\DualTextureEffect.fx PreserveNewest Assets\Effects\Stock\EnvironmentMapEffect.fx PreserveNewest Assets\Effects\Stock\SkinnedEffect.fx PreserveNewest Assets\Effects\Stock\SpriteEffect.fx PreserveNewest Assets\Effects\Stock\Common.fxh PreserveNewest Assets\Effects\Stock\Lighting.fxh PreserveNewest Assets\Effects\Stock\Macros.fxh PreserveNewest Assets\Effects\Stock\Structures.fxh PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {1dc4c439-a8a6-4a11-ab3b-a88dcba05449} Xna.Framework.Content {4b8d3f73-bbd2-4057-b86b-8b73b957dc0f} Xna.Framework.Graphics {3f81f76d-f0f3-44fe-a256-40af153c33f7} Xna.Framework.Audio {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False {e37f98d7-c4e8-4556-b322-aef99638ece1} Xna.Framework.Design {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor {63486463-8aee-483e-862a-7720cd62b4df} Xna.Framework.Content.Pipeline.Media {7de47032-a904-4c29-bd22-2d235e8d91ba} XNA.Framework.WindowsDX11 {4243474D-572E-6E69-646F-77734D474342} MGCB runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Tests/Kni.Tests.XNA.csproj ================================================  Debug AnyCPU 8.0.30703 2.0 {7134181E-E02F-482F-9250-343ABC60E861} Exe Properties Kni.Tests Kni.Tests.XNA v4.0 512 true full false bin\XNA\Debug\ obj\XNA\Debug\ TRACE;DEBUG;XNA prompt 4 true x86 pdbonly true bin\XNA\Release\ obj\XNA\Release\ TRACE;XNA prompt 4 true x86 true bin\XNA\Debug-CLI\ obj\XNA\Debug-CLI\ TRACE;DEBUG;XNA full x86 prompt false false true true ..\ThirdParty\NUnit\3.9.0\net40\nunit.framework.dll ..\ThirdParty\NUnit\3.9.0\net40\nunitlite.dll Utilities\DxtDecoder.cs Assets\Effects\Stock\AlphaTestEffect.fx PreserveNewest Assets\Effects\Stock\BasicEffect.fx PreserveNewest Assets\Effects\Stock\DualTextureEffect.fx PreserveNewest Assets\Effects\Stock\EnvironmentMapEffect.fx PreserveNewest Assets\Effects\Stock\SkinnedEffect.fx PreserveNewest Assets\Effects\Stock\SpriteEffect.fx PreserveNewest Assets\Effects\Stock\Common.fxh PreserveNewest Assets\Effects\Stock\Lighting.fxh PreserveNewest Assets\Effects\Stock\Macros.fxh PreserveNewest Assets\Effects\Stock\Structures.fxh PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest ================================================ FILE: Tests/Kni.Tests.XNA.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kni.Tests.XNA", "Kni.Tests.XNA.csproj", "{7134181E-E02F-482F-9250-343ABC60E861}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug-CLI|Any CPU = Debug-CLI|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7134181E-E02F-482F-9250-343ABC60E861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7134181E-E02F-482F-9250-343ABC60E861}.Debug|Any CPU.Build.0 = Debug|Any CPU {7134181E-E02F-482F-9250-343ABC60E861}.Debug-CLI|Any CPU.ActiveCfg = Debug-CLI|Any CPU {7134181E-E02F-482F-9250-343ABC60E861}.Debug-CLI|Any CPU.Build.0 = Debug-CLI|Any CPU {7134181E-E02F-482F-9250-343ABC60E861}.Release|Any CPU.ActiveCfg = Release|Any CPU {7134181E-E02F-482F-9250-343ABC60E861}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {581AF8D9-A313-4EF4-B330-CD28DAF22414} EndGlobalSection EndGlobal ================================================ FILE: Tests/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI Tests")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("KNI Tests")] [assembly: AssemblyCopyright("Copyright ©2022 MonoGame Team, ©2022-2024 Nick Kastellanos")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("09287fd6-b28b-45d0-af82-678b1365006e")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ================================================ FILE: Tests/README.md ================================================ # KNI Tests The KNI Tests run against XNA on Windows and KNI on Windows, macOS and Linux. They serve as an assurance that KNI conforms as closely as possible to XNA. Simple unit tests make assertions about KNI's core class properties, methods and behavior to guarantee compatibility with XNA in those regards. Additionally, visual tests verify via frame capture and comparison that KNI renders equivalently to XNA. Currently, on Windows, the tests can be run using NUnit and target either XNA or KNI. On macOS and Linux, the tests target KNI and are implemented in an executable assembly that can be run and debugged directly. After execution using the custom test runner, and HTML report of the results will be loaded in your default browser, and a log of stdout can be found in bin\$(Configuration)\stdout.txt. *Note: Currently there is no way to skip or select certain tests to run using the custom runner. This functionality is coming soon.* ## Rendering Tests Most rendering tests do not require a game loop, but just need a GraphicsDevice to be able to render things. These tests can inherit from GraphicsDeviceTestFixtureBase and use the supplied GraphicsDevice 'gd' to render. Tests that require rendering were formerly implemented with the VisualTestFixtureBase (we call these "visual tests"), but this is no longer recommended unless the test requires an actual Game loop or tests functionality of the Game class itself because these tests are slower and harder to implement. When creating a new rendering test, the first run will fail because there is no reference image. Running the test will capture and save the result. Run the test with the XNA test project to get a reference image that checks XNA compatibility, or with MG to make sure no regression occurs. After adding the captured frame as a reference image, the test should pass. ### GraphicsDeviceTestFixtureBase There are 3 methods in GraphicsDeviceTestFixtureBase that can be used to capture a frame and compare it to a reference image. - `PrepareFrameCapture`: Call this before rendering, so a RenderTarget can be prepared and set as the target for the GraphicsDevice. Optionally pass in the amount of frames you expect to capture. This is used for naming the captures when saving them (i.e. frame1.png or frame001.png) and the amount of captured frames will also be checked explicitly unless the ExactNumberSubmits flag is set to false. - `SubmitFrame`: Store the content of the render target in a list of submitted frames - `CheckFrames`: Call this when all frames are submitted. Checks all submitted frames against reference images if they can be found. Will also write out the captured image and a diff of captured image vs reference image if required by the WriteCapture and WriteDiffs settings. Compared frames get a similarity score between 0 and 1. If this score is higher than the set Similarity the test will pass. For ease of use, when no frame was submitted but PrepareFrameCapture has been called, this will submit a frame. Because of this tests that only submit one frame just need to be wrapped in PrepareFrameCapture/CheckFrames calls and can render as usual in between. If you still think you need a visual test to properly test a feature, read the paragraphs below to get a sense of how to get started. KNI's visual tests are implemented as ```Game```s and ```GameComponent```s whose output is captured and compared to known-good reference renderings. Performance is ignored in these tests: the focus here is correct drawing. ### Workflow for Implementing a Visual Test A good visual test, like any good test, should perform the minimum work necessary to verify that the functionality under test is correct. As much as possible, drawing and test code should be made modular by inheriting from ```GameComponent```, ```DrawableGameComponent```, ```VisualTestGameComponent```, or ```VisualTestDrawableGameComponent``` to encourage reuse, rather than duplication, in other tests. Here is one possible workflow for implementing a visual test (assuming the test fixture is already set up): > Before you start: > Examine the existing visual tests to get a sense of how components > are being composed into a test and what components may already > satisfy part of the requirements of the new test. 1. Implement any new drawing logic needed in a new subclass of one of the \*Component base classes. 2. Compose your test Game in a new [Test] method. As this stage, you can run the new test directly to visually verify the rendering. 3. Add a FrameCompareComponent to your test Game with at least one IFrameComparer implementation. Use the ```FrameCompareComponent```'s predicate to capture and compare frames. 4. Pass the FrameCompareComponent.Results to the diffing, logging and assertion utility methods provided by ```VisualTestFixtureBase``` 5. The first time a visual test is run, it will fail for lack of reference images to compare the captured images to. However, it will write the captured frames to bin\$(Configuration)\CapturedFrames\{TestDir}. 6. Proof the images generated from the first run to ensure that they are correct, then add them to the test project in Assets\ReferenceImages\$TestDir. **Be sure to add them in the projects for all platforms!** These files should have their build actions set to "Compile" and "Copy if newer". 7. Rerun the visual test. The reference images should be copied into place and the test should now pass. 8. XOR diffs between the reference images and captured frames are output into bin\$(Configuration)\Diffs\{TestDir} for debugging purposes. ### Notes For Implementing Correct Visual Tests - **Visual tests must be marked as [RequiresSTA] to work correctly on all platforms** - Try not to rely on ```GameComponent.Update```, since capturing frames can make the game run slowly and result in multiple Update calls per Draw. Instead, inherit from ```VisualTestGameComponent``` or ```VisualTestDrawableGameComponent``` and override ```UpdateOncePerDraw```. - For similarity thresholds, prefer Constants.StandardRequiredSimilarity unless there is a very good reason to choose another value. This will allow the strictness of all the tests to be adjusted together in the future, as requirements change. - Use the Paths static class to reduce typos in resource paths. ## Special Considerations - For new test fixtures, call Paths.SetStandardWorkingDirectory() in [SetUp] \(VisualTestBase does this for you\) to ensure that the ```ContentManager``` can find your assets on all platforms. - Note that all platforms are forced to run in Synchronous mode and that this doesn't always work perfectly on all platforms yet. ## NUnit Configuration There are a few things to know about running these tests under NUnit: - You must run the -x86 versions of NUnit, because XNA won't work with the 64-bit versions. - You must disable shadow copying because having it enabled makes it impossible for the ContentManager to find any assets. - GUI: Tools > Settings > Test Loader > Advanced - CLI: /noshadow - For debugger support, Run tests directly in the NUnit process, (note that this may cause a few-seconds-long hang when exiting NUnit after running a visual test) otherwise choose 'single separate process' - This setting can be found in: ```Tools > Settings > Test Loader > Assembly Isolation``` ================================================ FILE: Tests/Runner/Constants.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Kni.Tests { static class Constants { public const float StandardRequiredSimilarity = 0.99f; } } ================================================ FILE: Tests/Runner/ContentPipeline/AssetTestUtility.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content; #if WINDOWSDX || DESKTOPGL || XNA using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; #endif using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.ContentPipeline { internal static class AssetTestUtility { public static Effect LoadEffect(ContentManager content, string effectName) { #if WINDOWSDX GraphicsDevice gd = ((IGraphicsDeviceService)content.ServiceProvider.GetService(typeof(IGraphicsDeviceService))).GraphicsDevice; Effect effect = AssetTestUtility.CompileAndLoadEffect(gd, Paths.RawEffect(effectName)); return effect; #else Effect effect = content.Load(Paths.CompiledEffect(effectName)); return effect; #endif } public static Effect CompileAndLoadEffect(GraphicsDevice graphicsDevice, string effectPath) { byte[] effectCode = CompileEffect(graphicsDevice, effectPath); return new Effect(graphicsDevice, effectCode); } public static byte[] CompileEffect(GraphicsDevice graphicsDevice, string effectPath) { #if WINDOWSDX || DESKTOPGL || XNA TargetPlatform targetPlatform = TargetPlatform.Windows; #if DESKTOPGL targetPlatform = TargetPlatform.DesktopGL; #endif EffectProcessor effectProcessor = new EffectProcessor(); ContentProcessorContext context = new TestProcessorContext(targetPlatform, "notused.xnb"); EffectContent effectContent = new EffectContent(); effectContent.EffectCode = File.ReadAllText(effectPath); effectContent.Identity = new ContentIdentity(effectPath); CompiledEffectContent compiledEffect = effectProcessor.Process(effectContent, context); byte[] effectCode = compiledEffect.GetEffectCode(); return effectCode; #else // OpenGL throw new NotImplementedException(); #endif } } } ================================================ FILE: Tests/Runner/ContentPipeline/TestContentBuildLogger.cs ================================================ using Microsoft.Xna.Framework.Content.Pipeline; namespace Kni.Tests.ContentPipeline { class TestContentBuildLogger : ContentBuildLogger { public override void LogImportantMessage(string message, params object[] messageArgs) { } public override void LogMessage(string message, params object[] messageArgs) { } public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs) { } } } ================================================ FILE: Tests/Runner/ContentPipeline/TestProcessorContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Reflection; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Kni.Tests.ContentPipeline { class TestProcessorContext : ContentProcessorContext { private readonly OpaqueDataDictionary _parameters = new OpaqueDataDictionary(); private readonly TargetPlatform _targetPlatform; private readonly GraphicsProfile _targetProfile; private readonly string _outputFilename; private readonly TestContentBuildLogger _logger; internal readonly List _dependencies = new List(); public TestProcessorContext(TargetPlatform targetPlatform, string outputFilename) { _targetPlatform = targetPlatform; _targetProfile = GraphicsProfile.HiDef; _outputFilename = outputFilename; _logger = new TestContentBuildLogger(); } public override string BuildConfiguration { get { return "Debug"; } } public override string IntermediateDirectory { get { throw new NotImplementedException(); } } public override ContentBuildLogger Logger { get { return _logger; } } public override string OutputDirectory { get { throw new NotImplementedException(); } } public override string OutputFilename { get { return _outputFilename; } } public override OpaqueDataDictionary Parameters { get { return _parameters; } } public override TargetPlatform TargetPlatform { get { return _targetPlatform; } } public override GraphicsProfile TargetProfile { get { return _targetProfile; } } public override void AddDependency(string filename) { _dependencies.Add(filename); } public override void AddOutputFile(string filename) { } public override TOutput BuildAndLoadAsset(ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName) { return default(TOutput); } public override ExternalReference BuildAsset(ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName) { throw new NotImplementedException(); } public override TOutput Convert(TInput input, string processorName, OpaqueDataDictionary processorParameters) { // MaterialProcessor essentially transforms its // input and returns it... not a copy. So this // seems like a reasonable shortcut for testing. if (typeof(TOutput) == typeof(MaterialContent) && typeof(TInput).IsAssignableFrom(typeof(MaterialContent))) return (TOutput)((object)input); Assembly asm = typeof(ContentProcessor).Assembly; string typeName = "Microsoft.Xna.Framework.Content.Pipeline.Processors." + processorName; object processorInstance = asm.CreateInstance(typeName); ContentProcessor processor = (ContentProcessor)processorInstance; if (processor != null) { Type type = processor.GetType(); foreach (var kvp in processorParameters) { PropertyInfo property = type.GetProperty(kvp.Key); if (property == null) continue; property.SetValue(processor, kvp.Value, null); } return processor.Process(input, this); } throw new NotImplementedException(); } } } ================================================ FILE: Tests/Runner/Extensions.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; namespace Kni.Tests { static class Extensions { public static void Add( this GameComponentCollection self, params IGameComponent[] components) { foreach (var component in components) self.Add(component); } public static Color ToColor(this string self) { return (Color)typeof(Color).InvokeMember(self, BindingFlags.GetProperty, null, null, null); } public static FramePixelData ToPixelData(this Texture2D texture) { var data = new Color[texture.Width * texture.Height]; texture.GetData(data); return new FramePixelData(texture.Width, texture.Height, data); } private static readonly char[] ForbiddenFileNameChars = "{}()\"',:".ToCharArray(); public static string ReplaceInvalidFileNameChars(this string self) { var pattern = "[" + Regex.Escape( new string(ForbiddenFileNameChars) + new string(Path.GetInvalidFileNameChars())) + "]"; return Regex.Replace(self, pattern, "_"); } public static string ReplaceInvalidPathChars(this string self) { var pattern = "[" + Regex.Escape( new string(ForbiddenFileNameChars) + new string(Path.GetInvalidPathChars())) + "]"; return Regex.Replace(self, pattern, "_"); } public static StackFrame FindTestEntryFrame(this StackTrace self) { foreach (var stackFrame in self.GetFrames()) { var method = stackFrame.GetMethod(); var testAttributes = method.GetCustomAttributes(typeof(TestAttribute), false); if (testAttributes.Length > 0) return stackFrame; } return null; } public static StackFrame GetTestEntryStackFrame(this StackTrace self) { var stackFrame = self.FindTestEntryFrame(); if (stackFrame == null) throw new InvalidOperationException( "No method marked with TestAttribute was found in this StackTrace"); return stackFrame; } public static string GetTestFolderName(this TestContext self) { // TODO: Add support for a custom attribute to override // the calculated name. //var method = self.GetMethod(); var fullTypeName = self.Test.FullName.Remove( self.Test.FullName.Length - (self.Test.Name.Length + 1)); var tokens = fullTypeName.Split('.'); var typeName = tokens[tokens.Length - 1]; if (typeName.EndsWith("Test")) typeName = typeName.Remove(typeName.Length - "Test".Length); else if (typeName.EndsWith("Tests")) typeName = typeName.Remove(typeName.Length - "Tests".Length); return typeName.ReplaceInvalidFileNameChars(); } public static string GetTestFrameFileNameFormat(this TestContext self, int maxFrameNumber) { // TODO: Add support for a custom attribute to override // the calculated name. if (maxFrameNumber == 0) return self.Test.Name.ReplaceInvalidFileNameChars() + "-{0}.png"; if (maxFrameNumber == 1) return self.Test.Name.ReplaceInvalidFileNameChars() + ".png"; int numDigits = 1 + (int)Math.Log10(maxFrameNumber + 1); var builder = new StringBuilder(self.Test.Name.ReplaceInvalidFileNameChars()); builder.Append("-{0:"); builder.Append('0', numDigits); builder.Append("}.png"); return builder.ToString(); } public static void AddService(this GameServiceContainer serviceProvider, T service) { serviceProvider.AddService(typeof(T), service); } public static T RequireService(this IServiceProvider serviceProvider) { var service = (T)serviceProvider.GetService(typeof(T)); if (service == null) throw new ServiceNotFoundException(typeof(T)); return service; } } class ServiceNotFoundException : Exception { public ServiceNotFoundException(Type serviceType) : base(string.Format("Required service of type '{0}' was not found.", serviceType)) { if (serviceType == null) throw new ArgumentNullException("serviceType"); ServiceType = serviceType; } public Type ServiceType { get; private set; } } } ================================================ FILE: Tests/Runner/FrameInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Kni.Tests { struct FrameInfo { public int UpdateNumber; public int DrawNumber; public TimeSpan ElapsedGameTime; public TimeSpan TotalGameTime; public bool IsRunningSlowly; public GameTime GameTime; public void AdvanceUpdate(GameTime gameTime) { UpdateNumber++; UpdateGameTime(gameTime); } public void AdvanceDraw(GameTime gameTime) { DrawNumber++; UpdateGameTime(gameTime); } public void Reset() { UpdateNumber = 0; DrawNumber = 0; ElapsedGameTime = TimeSpan.Zero; TotalGameTime = TimeSpan.Zero; IsRunningSlowly = false; } public void UpdateGameTime(GameTime gameTime) { GameTime = gameTime; ElapsedGameTime = gameTime.ElapsedGameTime; TotalGameTime = gameTime.TotalGameTime; IsRunningSlowly = gameTime.IsRunningSlowly; } } interface IFrameInfoSource { FrameInfo FrameInfo { get; } } class FrameInfoEventArgs : EventArgs { public FrameInfoEventArgs(FrameInfo frameInfo) { _frameInfo = frameInfo; } private readonly FrameInfo _frameInfo; public FrameInfo FrameInfo { get { return _frameInfo; } } } } ================================================ FILE: Tests/Runner/FramePixelData.Desktop.cs ================================================ using System; using System.Drawing; using System.Drawing.Imaging; namespace Kni.Tests { partial class FramePixelData { public static unsafe FramePixelData FromFile(string filename) { using (Bitmap bitmap = (Bitmap)Bitmap.FromFile(filename)) { var frame = new FramePixelData(bitmap.Width, bitmap.Height); var bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); try { byte* pSourceRow = (byte*)bitmapData.Scan0; int indexFrame = 0; for (int y = 0; y < frame.Height; ++y) { PixelArgb* pPixel = (PixelArgb*)pSourceRow; for (int x = 0; x < frame.Width; ++x) { frame.Data[indexFrame] = new Microsoft.Xna.Framework.Color( pPixel->R, pPixel->G, pPixel->B, pPixel->A); indexFrame++; pPixel++; } pSourceRow += bitmapData.Stride; } } finally { bitmap.UnlockBits(bitmapData); } return frame; } } public unsafe void Save(string filename, string attachmentDescription = null) { using (var bitmap = new Bitmap(Width, Height, PixelFormat.Format32bppArgb)) { var bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); try { byte* pDestRow = (byte*)bitmapData.Scan0; int indexFrame = 0; for (int y = 0; y < Height; ++y) { PixelArgb* pPixel = (PixelArgb*)pDestRow; for (int x = 0; x < Width; ++x) { pPixel->R = Data[indexFrame].R; pPixel->G = Data[indexFrame].G; pPixel->B = Data[indexFrame].B; pPixel->A = Data[indexFrame].A; indexFrame++; pPixel++; } pDestRow += bitmapData.Stride; } } finally { bitmap.UnlockBits(bitmapData); } bitmap.Save(filename); if (attachmentDescription != null) { NUnit.Framework.TestContext.AddTestAttachment(filename, attachmentDescription); } } } } } ================================================ FILE: Tests/Runner/FramePixelData.cs ================================================ using System; using Microsoft.Xna.Framework; namespace Kni.Tests { partial class FramePixelData { public FramePixelData(int width, int height, Color[] data) { _width = width; _height = height; _data = data; } public FramePixelData(int width, int height) : this(width, height, new Color[width * height]) { } private Color[] _data; public Color[] Data { get { return _data; } } private int _width; public int Width { get { return _width; } } private int _height; public int Height { get { return _height; } } } } ================================================ FILE: Tests/Runner/FramePixelData.iOS.cs ================================================ using System; using System.IO; using MonoTouch.CoreGraphics; using MonoTouch.Foundation; using Microsoft.Xna.Framework; using System.Runtime.InteropServices; using MonoTouch.ImageIO; namespace MonoGame.Tests { partial class FramePixelData { public static FramePixelData FromFile(string path) { // HACK: The path should have been resolved correctly // before now! //var documentsDir = Environment.GetFolderPath (Environment.SpecialFolder.Personal); //path = Path.Combine(documentsDir, path); if (!File.Exists(path)) throw new FileNotFoundException(path); var extension = Path.GetExtension(path).ToLowerInvariant(); CGImage image; switch (extension) { case ".png": image = CGImageFromPNGFile(path); break; case ".jpg": case ".jpeg": image = CGImageFromJPEGFile(path); break; default: throw new NotSupportedException(string.Format( "FramePixelData.FromFile cannot load images of type: {0}", extension)); } try { using (var data = image.DataProvider.CopyData()) { var pixels = new Color[data.Length / 4]; for (int i = 0; i < pixels.Length; ++i) { int dataIndex = i * 4; pixels[i].R = data[dataIndex]; pixels[i].G = data[dataIndex + 1]; pixels[i].B = data[dataIndex + 2]; pixels[i].A = data[dataIndex + 3]; } return new FramePixelData(image.Width, image.Height, pixels); } } finally { image.Dispose(); } } public void Save(string path) { var extension = Path.GetExtension(path).ToLowerInvariant(); string uttype; switch (extension) { case ".png": uttype = "public.png"; break; case ".jpg": case ".jpeg": uttype = "public.jpeg"; break; default: throw new NotSupportedException(string.Format( "FramePixelData.Save cannot save images of type: {0}", extension)); } //var documentsDir = Environment.GetFolderPath (Environment.SpecialFolder.Personal); var handle = GCHandle.Alloc(_data, GCHandleType.Pinned); try { var sizeOfColor = Marshal.SizeOf(typeof(Color)); using (var dataProvider = new CGDataProvider( handle.AddrOfPinnedObject(), _data.Length * sizeOfColor, false)) using (var colorSpace = CGColorSpace.CreateDeviceRGB()) using (var image = new CGImage( Width, Height, 8, 32, Width * sizeOfColor, colorSpace, CGBitmapFlags.ByteOrder32Little | CGBitmapFlags.First, dataProvider, null, false, CGColorRenderingIntent.Default)) { //var fullPath = Path.Combine (documentsDir, path); Directory.CreateDirectory(Path.GetDirectoryName(path)); var url = NSUrl.FromFilename(Path.GetFullPath(path)); var destination = CGImageDestination.FromUrl(url, uttype, 1); destination.AddImage(image, null); if (!destination.Close()) throw new Exception(string.Format( "Failed to write the image to '{0}'", path)); } } finally { handle.Free(); } } private static CGImage CGImageFromPNGFile(string filename) { var provider = new CGDataProvider(filename); return CGImage.FromPNG(provider, null, false, CGColorRenderingIntent.AbsoluteColorimetric); } private static CGImage CGImageFromJPEGFile(string filename) { var provider = new CGDataProvider(filename); return CGImage.FromJPEG(provider, null, false, CGColorRenderingIntent.AbsoluteColorimetric); } } } ================================================ FILE: Tests/Runner/GameBase/CountCallsGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests { class CountCallsGame : Game { public int BeginRunCount { get; set; } public int InitializeCount { get; set; } public int LoadContentCount { get; set; } public int UnloadContentCount { get; set; } public int UpdateCount { get; set; } public int BeginDrawCount { get; set; } public int DrawCount { get; set; } public int EndDrawCount { get; set; } public int EndRunCount { get; set; } public int DeactivatedCount { get; set; } public int ActivatedCount { get; set; } public int ExitingCount { get; set; } public int DisposeCount { get; set; } public void PublicBeginRun() { BeginRun(); } protected override void BeginRun() { BeginRunCount++; base.BeginRun(); } public void PublicInitialize() { Initialize(); } protected override void Initialize() { InitializeCount++; base.Initialize(); } public void PublicLoadContent() { LoadContent(); } protected override void LoadContent() { LoadContentCount++; base.LoadContent(); } public void PublicUnloadContent() { UnloadContent(); } protected override void UnloadContent() { UnloadContentCount++; base.UnloadContent(); } public void PublicUpdate(GameTime gt = null) { Update(gt ?? new GameTime()); } protected override void Update(GameTime gameTime) { UpdateCount++; base.Update(gameTime); } public bool PublicBeginDraw() { return BeginDraw(); } protected override bool BeginDraw() { BeginDrawCount++; return base.BeginDraw(); } public void PublicDraw(GameTime gt) { Draw(gt ?? new GameTime()); } protected override void Draw(GameTime gameTime) { DrawCount++; base.Draw(gameTime); } public bool PublicEndDraw() { return BeginDraw(); } protected override void EndDraw() { EndDrawCount++; base.EndDraw(); } public void PublicEndRun() { EndRun(); } protected override void EndRun() { EndRunCount++; base.EndRun(); } #if XNA protected override void OnActivated(object sender, EventArgs args) { ActivatedCount++; base.OnActivated(sender, args); } protected override void OnDeactivated(object sender, EventArgs args) { DeactivatedCount++; base.OnDeactivated(sender, args); } protected override void OnExiting(object sender, EventArgs args) { ExitingCount++; base.OnExiting(sender, args); } #else protected override void OnActivated(EventArgs args) { ActivatedCount++; base.OnActivated(args); } protected override void OnDeactivated(EventArgs args) { DeactivatedCount++; base.OnDeactivated(args); } protected override void OnExiting(EventArgs args) { ExitingCount++; base.OnExiting(args); } #endif protected override void Dispose(bool disposing) { DisposeCount++; base.Dispose(disposing); } } } ================================================ FILE: Tests/Runner/GameBase/FixtureBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests { abstract class FixtureBase { private MockGame _game; protected MockGame Game { get { return _game; } } [SetUp] public virtual void SetUp() { Paths.SetStandardWorkingDirectory(); _game = new MockGame(); } [TearDown] public virtual void TearDown() { _game.Dispose(); _game = null; } } } ================================================ FILE: Tests/Runner/GameBase/FrameCompareComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.Concurrent; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using NUnit.Framework; // TODO: It's likely that a more sophisticated approach will be required for // comparing images. In particular, comparing pixel deltas would give // quite a high score to some images that humans would rate as extremely // different to each other. For example, with PixelDeltaComparer, a // totally white background vs a totally white background with a one-pixel // diagonal line from top-left to bottom-right would be scored in the // (very) high 90s for percent similarity, while no human would rate it // so. Several passes may be desirable, in fact, to test for color // differences, contrast differences, color-contrast differences, edge // differences, etc. namespace Kni.Tests.Components { /// /// Defines behavior needed for frames to be scheduled for capture and /// then manipulated and released. /// interface IFrameCaptureSource { /// /// Schedules a frame capture for the next available Draw cycle. /// void ScheduleFrameCapture(); /// /// Gets the captured frame from the last scheduled capture. /// /// Texture2D GetCapturedFrame(); /// /// Notifies the implementation that /// a called has finished using the texture returned by /// . /// /// void ReleaseCapturedFrame(Texture2D frame); } /// /// Defines methods for comparing two visual frames. /// interface IFrameComparer { /// /// Compares two frames and returns a similarity value from 0.0f /// to 1.0f. /// /// The image to compare. /// A ground truth image to compare against. /// A floating point value from 0.0f to 1.0f that /// represents the similarity of the two frames, according to /// this IFrameComparer implementation. float Compare(FramePixelData image, FramePixelData referenceImage); } class FrameCompareComponent : DrawableGameComponent, IEnumerable { private static class Errors { public const string AtLeastOneFrameComparerRequired = "At least one IFrameComparer must be added before capturing and comparing frames"; } private enum RunState { Idle, DidScheduleFrameCapture, DidCaptureFrame } private IFrameCaptureSource _frameSource; private string _fileNameFormat; private string _referenceImageDirectory; private readonly List> _frameComparers = new List>(); private readonly List _results = new List(); private readonly object _resultsSync = new object(); private Thread _workThread; private readonly object _workThreadSync = new object(); public FrameCompareComponent( Game game, Predicate captureWhen, string fileNameFormat, string referenceImageDirectory, string outputDirectory) : base(game) { if (fileNameFormat == null) throw new ArgumentNullException("fileNameFormat"); if (referenceImageDirectory == null) throw new ArgumentNullException("compareSourceDirectory"); CaptureWhen = captureWhen; _fileNameFormat = fileNameFormat; _referenceImageDirectory = referenceImageDirectory; OutputDirectory = outputDirectory; } public static FrameCompareComponent CreateDefault( Game game, Predicate captureWhen = null, int maxFrameNumber = 99) { var folderName = TestContext.CurrentContext.GetTestFolderName(); var fileNameFormat = TestContext.CurrentContext.GetTestFrameFileNameFormat(maxFrameNumber); return new FrameCompareComponent( game, captureWhen: captureWhen, fileNameFormat: fileNameFormat, referenceImageDirectory: Paths.ReferenceImage(folderName), outputDirectory: Paths.CapturedFrame(folderName)) { { new PixelDeltaFrameComparer(), 1 } }; } protected override void Dispose(bool disposing) { if (disposing) { if (_workThread != null) { try { _workThread.Abort(); } catch (ThreadStateException) { } _workThread = null; } } base.Dispose(disposing); } public Predicate CaptureWhen { get; set; } private RunState _state = RunState.Idle; private RunState State { get { return _state; } set { if (_state != value) { // Debugging only //Console.WriteLine ("State: {0}->{1}", _state, value); _state = value; } } } public string OutputDirectory { get; set; } public void Add(IFrameComparer comparer, float weight) { if (comparer == null) throw new ArgumentNullException("comparer"); if (weight < 0) throw new ArgumentOutOfRangeException("weight", "weight must not be negative"); _frameComparers.Add(Tuple.Create(comparer, weight)); } public bool Remove(IFrameComparer comparer) { for (int i = 0; i < _frameComparers.Count; ++i) { if (object.Equals(_frameComparers[i], comparer)) { _frameComparers.RemoveAt(i); return true; } } return false; } public IEnumerable Results { get { // Signal the end of the work items, then wait // for processing to complete. _workItems.Add(null); lock (_resultsSync) return _results; } } public override void Initialize() { base.Initialize(); _frameSource = Game.Services.RequireService(); } public override void Update(GameTime gameTime) { var frameInfo = Game.Services.RequireService().FrameInfo; if (State == RunState.DidCaptureFrame) ProcessCapturedFrame(); if (State == RunState.Idle && (CaptureWhen == null || CaptureWhen(frameInfo))) ScheduleFrameCapture(); } public override void Draw(GameTime gameTime) { switch (State) { case RunState.DidScheduleFrameCapture: // By this point, IFrameSource is processing the // capture request, and will have finished by // the next call to Update. State = RunState.DidCaptureFrame; break; } } private void ScheduleFrameCapture() { _frameSource.ScheduleFrameCapture(); State = RunState.DidScheduleFrameCapture; } private void ProcessCapturedFrame() { var frame = _frameSource.GetCapturedFrame(); try { if (_frameComparers.Count == 0) throw new InvalidOperationException(Errors.AtLeastOneFrameComparerRequired); lock (_workThreadSync) { if (_workThread == null) { _workThread = new Thread(CompareAndWriteWorker); _workThread.Priority = ThreadPriority.Lowest; _workThread.IsBackground = true; _workThread.Start(); } } var frameInfo = Game.Services.RequireService().FrameInfo; var fileName = string.Format(_fileNameFormat, frameInfo.DrawNumber); string frameOutputPath = null; if (OutputDirectory != null) frameOutputPath = Path.Combine(OutputDirectory ?? ".", fileName); var referenceImagePath = Path.Combine(_referenceImageDirectory, fileName); var textureData = GetTextureData(frame); _workItems.Add(new WorkItem( frameInfo, textureData, frame.Width, frame.Height, frameOutputPath, referenceImagePath, _frameComparers.ToArray())); } finally { _frameSource.ReleaseCapturedFrame(frame); State = RunState.Idle; } } private BlockingCollection _workItems = new BlockingCollection(new ConcurrentQueue()); private void CompareAndWriteWorker() { // HACK: This should not be needed! Paths.SetStandardWorkingDirectory(); lock (_resultsSync) { while (true) { var workItem = _workItems.Take(); if (workItem == null) break; if (workItem.FrameOutputPath != null) { var directory = Path.GetDirectoryName(workItem.FrameOutputPath); if (!Directory.Exists(directory)) Directory.CreateDirectory(directory); } var framePixelData = new FramePixelData( workItem.TextureWidth, workItem.TextureHeight, workItem.TextureData); var comparePixelData = LoadOrCreateEmptyFramePixelData(workItem.ReferenceImagePath); var similarity = CompareFrames( framePixelData, comparePixelData, workItem.FrameComparers); if (workItem.FrameOutputPath != null) { try { framePixelData.Save(workItem.FrameOutputPath, "Output"); } catch (IOException) { // FIXME: Report this error somehow. } } _results.Add(new FrameComparisonResult( workItem.FrameInfo.DrawNumber, similarity, workItem.ReferenceImagePath, workItem.FrameOutputPath)); } } lock (_workThreadSync) { _workThread = null; } } private static float CompareFrames( FramePixelData image, FramePixelData referenceImage, Tuple[] frameComparers) { float sumOfWeights = 0; foreach (var item in frameComparers) { sumOfWeights += item.Item2; } float similarity = 0; foreach (var item in frameComparers) { var comparer = item.Item1; var weight = item.Item2; similarity += comparer.Compare(image, referenceImage) * weight / sumOfWeights; } return similarity; } private Color[] GetTextureData(Texture2D frame) { var data = new Color[frame.Width * frame.Height]; frame.GetData(data); return data; } private static FramePixelData LoadOrCreateEmptyFramePixelData(string path) { try { return FramePixelData.FromFile(path); } catch (FileNotFoundException) { // TODO: It would be nice to communicate // information about what went wrong, when // things go wrong. return new FramePixelData(0, 0, new Color[0]); } } public IEnumerator GetEnumerator() { foreach (var item in _frameComparers) yield return item.Item1; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { foreach (var item in _frameComparers) yield return item.Item1; } private class WorkItem { public readonly FrameInfo FrameInfo; public readonly Color[] TextureData; public readonly int TextureWidth; public readonly int TextureHeight; public readonly string FrameOutputPath; public readonly string ReferenceImagePath; public readonly Tuple[] FrameComparers; public WorkItem( FrameInfo frameInfo, Color[] textureData, int textureWidth, int textureHeight, string frameOutputPath, string referenceImagePath, Tuple[] frameComparers) { FrameInfo = frameInfo; TextureData = textureData; TextureWidth = textureWidth; TextureHeight = textureHeight; FrameOutputPath = frameOutputPath; ReferenceImagePath = referenceImagePath; FrameComparers = frameComparers; } } } public struct FrameComparisonResult { public FrameComparisonResult( int drawNumber, float similarity, string referenceImagePath, string capturedImagePath = null) { DrawNumber = drawNumber; Similarity = similarity; ReferenceImagePath = referenceImagePath; CapturedImagePath = capturedImagePath; } public int DrawNumber; public float Similarity; public string CapturedImagePath; public string ReferenceImagePath; } class ConstantComparer : IFrameComparer { private float _value; public ConstantComparer(float value) { if (value < 0) throw new ArgumentOutOfRangeException("value", "value must not be negative"); _value = value; } public float Compare(FramePixelData a, FramePixelData b) { return _value; } } } ================================================ FILE: Tests/Runner/GameBase/GraphicsDeviceTestFixtureBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.Components; using Kni.Tests.Utilities; using NUnit.Framework; namespace Kni.Tests { internal class GraphicsDeviceTestFixtureBase { protected TestGameBase game; protected GraphicsDeviceManager gdm; protected GraphicsDevice gd; protected ContentManager content; #region Frame capturing management private bool _framePrepared; private bool _frameSubmitted; private bool _framesChecked; private RenderTarget2D _captureRenderTarget; private List _submittedFrames; private int _totalFramesExpected; private readonly IFrameComparer _frameComparer = new PixelDeltaFrameComparer(); private static readonly ActionDaemon _writerThread = new ActionDaemon(); #endregion #region Frame capturing settings protected float Similarity; protected WriteSettings WriteCapture; protected WriteSettings WriteDiffs; protected bool ExactNumberSubmits; protected Color ClearColor; #endregion #region SetUp and TearDown [SetUp] public virtual void SetUp() { game = new TestGameBase(); gdm = new GraphicsDeviceManager(game); #if !XNA // We enable the half-pixel offset for XNA compatibility gdm.PreferHalfPixelOffset = true; #endif // some visual tests require a HiDef profile gdm.GraphicsProfile = GraphicsProfile.HiDef; ((IGraphicsDeviceManager)game.Services.GetService(typeof(IGraphicsDeviceManager))).CreateDevice(); gd = game.GraphicsDevice; content = game.Content; _framePrepared = false; _frameSubmitted = false; _framesChecked = false; Similarity = Constants.StandardRequiredSimilarity; WriteCapture = WriteSettings.Always; WriteDiffs = WriteSettings.WhenFailed; ExactNumberSubmits = false; ClearColor = Color.CornflowerBlue; Paths.SetStandardWorkingDirectory(); } [TearDown] public virtual void TearDown() { game.Dispose(); game = null; gdm = null; gd = null; content = null; if (_framePrepared && !_framesChecked) Assert.Fail("Initialized fixture for rendering but did not check frames."); } #endregion #region Utility Methods protected void Sleep(int ms) { Thread.Sleep(ms); } /// /// Simulate a game loop. /// /// The method to execute in the loop, gets the frame number passed to it. /// If this is true the loop will end, gets the frame number passed to it. /// Time in ms to sleep after a frame. protected void DoGameLoop(Action action, Predicate stopCondition, int frameTime = 16) { var frame = 0; while (!stopCondition(frame)) { action(frame); Sleep(frameTime); frame++; } } #endregion #region Frame capture API protected void PrepareFrameCapture(int expected = 1) { if (_framePrepared) throw new Exception("PrepareFrameCapture should only be called once."); _framePrepared = true; _totalFramesExpected = expected; _captureRenderTarget = new RenderTarget2D( gd, gd.Viewport.Width, gd.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8); _submittedFrames = new List(); gd.SetRenderTarget(_captureRenderTarget); gd.Clear(ClearColor); } protected void SubmitFrame() { if (!_framePrepared) throw new Exception("PrepareFrameCapture must be called before rendering when submitting a frame."); _frameSubmitted = true; // release the rendertarget so GetData does not fail gd.SetRenderTarget(null); var capturedFrame = _captureRenderTarget.ToPixelData(); _submittedFrames.Add(capturedFrame); gd.SetRenderTarget(_captureRenderTarget); } protected void CheckFrames() { if (!_framePrepared) throw new Exception("PrepareFrameCapture must be called before rendering to be able to check frames."); // submit the current frame if one is prepared, but none are submitted yet if (!_frameSubmitted) SubmitFrame(); var folderName = TestContext.CurrentContext.GetTestFolderName(); var referenceImageDirectory = Paths.ReferenceImage(folderName); var outputDirectory = Paths.CapturedFrame(folderName); var fileName = TestContext.CurrentContext.GetTestFrameFileNameFormat(_totalFramesExpected); var capturedImagePath = Path.Combine(outputDirectory, fileName); var referenceImagePath = Path.Combine(referenceImageDirectory, fileName); var allResults = new List(); var failedResults = new List(); var noReference = new List(); for (var i = 0; i < _submittedFrames.Count; i++) { var frame = _submittedFrames[i]; var capturedPath = string.Format(capturedImagePath, i + 1); var referencePath = string.Format(referenceImagePath, i + 1); if (!File.Exists(referencePath)) { // no reference frame is available, so just write the image and track the failure if (WriteCapture == WriteSettings.Always || WriteCapture == WriteSettings.WhenFailed) { Directory.CreateDirectory(outputDirectory); _writerThread.AddAction(() => frame.Save(capturedPath, "Capture")); } noReference.Add(referencePath); continue; } var refFrame = FramePixelData.FromFile(referencePath); var frameSimilarity = _frameComparer.Compare(frame, refFrame); var failed = frameSimilarity < Similarity; var writeCapture = WriteCapture == WriteSettings.Always || (WriteCapture == WriteSettings.WhenFailed && failed); var writeDiff = WriteDiffs == WriteSettings.Always || (WriteDiffs == WriteSettings.WhenFailed && failed); var result = new FrameComparisonResult(frameSimilarity, frame, refFrame, capturedPath, referencePath, failed, writeCapture, writeDiff); allResults.Add(result); if (failed) failedResults.Add(result); if (result.SaveImage) { Directory.CreateDirectory(outputDirectory); _writerThread.AddAction(() => result.CapturedData.Save(result.CapturedImagePath, "Capture")); } if (result.SaveDiff) { var name = string.Format(fileName, i + 1); var path = GetDiffPath(name); result.DiffPath = path; Directory.CreateDirectory(Path.GetDirectoryName(path)); _writerThread.AddAction(() => WriteDiff(result.CapturedData, result.ReferenceData, path)); } } _framesChecked = true; // write results to console WriteComparisonResultReport(allResults, noReference); // wait for the writing thread so it doesn't get terminated early if (!_writerThread.Finished) _writerThread.Thread.Join(); // now do the actual assertions if (ExactNumberSubmits && _totalFramesExpected != allResults.Count) { Assert.Fail ( "Expected {0} frame comparison result(s), but found {1}", _totalFramesExpected, allResults.Count); } if (failedResults.Count > 0) { Assert.Fail( "{0} of {1} frames failed the similarity test.", failedResults.Count, allResults.Count); } if (noReference.Count > 0) { Assert.Fail( "Did not find reference image(s): " + noReference.Aggregate((s1, s2) => s1 + ", " + s2)); } } #endregion #region ComparisonResults private void WriteComparisonResultReport(IEnumerable results, List noReference) { Console.WriteLine ("Required similarity: {0:0.####}", Similarity); foreach (var result in results) { var captureString = result.SaveImage ? ", Capture: " + result.CapturedImagePath : ""; var referenceString = ", Reference: " + result.ReferenceImagePath; var diffString = result.SaveDiff ? ", Diff: " + result.DiffPath : ""; Console.WriteLine( "Similarity: {0:0.####}{1}{2}{3}", result.Similarity, captureString, referenceString, diffString); } } protected class FrameComparisonResult { public float Similarity; public FramePixelData CapturedData; public FramePixelData ReferenceData; public string CapturedImagePath; public string ReferenceImagePath; public string DiffPath; public bool Failed; public bool SaveImage; public bool SaveDiff; public FrameComparisonResult(float similarity, FramePixelData captured, FramePixelData reference, string capturedImagePath, string referenceImagePath, bool failed, bool saveImage, bool saveDiff) { Similarity = similarity; CapturedData = captured; ReferenceData = reference; CapturedImagePath = capturedImagePath; ReferenceImagePath = referenceImagePath; Failed = failed; SaveImage = saveImage; SaveDiff = saveDiff; } } #endregion #region Diff private string GetDiffPath(string name) { var folderName = TestContext.CurrentContext.GetTestFolderName(); var directory = Paths.CapturedFrameDiff(folderName); var diffFileName = string.Format("diff-{0}", name); return Path.Combine (directory, diffFileName); } private void WriteDiff(FramePixelData capture, FramePixelData reference, string outputPath) { var diff = CreateDiff(capture, reference); Normalize(diff); diff.Save(outputPath, "Diff"); } private static FramePixelData CreateDiff (FramePixelData a, FramePixelData b) { int minWidth, maxWidth, minHeight, maxHeight; MathUtility.MinMax (a.Width, b.Width, out minWidth, out maxWidth); MathUtility.MinMax (a.Height, b.Height, out minHeight, out maxHeight); var diff = new FramePixelData (maxWidth, maxHeight); for (var y = 0; y < minHeight; ++y) { var indexA = y * a.Width; var indexB = y * b.Width; var indexDiff = y * diff.Width; for (var x = 0; x < minWidth; ++x) { // Ignore alpha. If alpha diffs are // needed, a special strategy will have // to be devised, since XOR'ing two // opaque pixels will cause a totally // transparent pixel and hide any other // difference. diff.Data [indexDiff] = new Color ( (byte) (a.Data [indexA].R ^ b.Data [indexB].R), (byte) (a.Data [indexA].G ^ b.Data [indexB].G), (byte) (a.Data [indexA].B ^ b.Data [indexB].B)); indexA++; indexB++; indexDiff++; } } return diff; } private static void Normalize (FramePixelData frame) { var max = new Color(0, 0, 0, 0); foreach (var pixel in frame.Data) { max.B = Math.Max (pixel.B, max.B); max.G = Math.Max (pixel.G, max.G); max.R = Math.Max (pixel.R, max.R); max.A = Math.Max (pixel.A, max.A); } if (max.B == 0) max.B = 255; if (max.G == 0) max.G = 255; if (max.R == 0) max.R = 255; if (max.A == 0) max.A = 255; for (var i = 0; i < frame.Data.Length; ++i) { var pixel = frame.Data[i]; pixel.B = (byte)(pixel.B * 255 / max.B); pixel.G = (byte)(pixel.G * 255 / max.G); pixel.R = (byte)(pixel.R * 255 / max.R); pixel.A = (byte)(pixel.A * 255 / max.A); frame.Data[i] = pixel; } } #endregion protected enum WriteSettings { Never, Always, WhenFailed, } } } ================================================ FILE: Tests/Runner/GameBase/MockGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests { class MockGame : TestGameBase { public int MinUpdateCount { get; set; } public int MaxUpdateCount { get; set; } public int MinDrawCount { get; set; } public int MaxDrawCount { get; set; } public int UpdateCount { get; private set; } public int DrawCount { get; private set; } public ExitReason ExitReason { get; private set; } public MockGame() { MinUpdateCount = int.MaxValue; MinDrawCount = int.MaxValue; MaxUpdateCount = 1; MaxDrawCount = 1; } public MockGame MakeGraphical() { if (Services.GetService(typeof(IGraphicsDeviceManager)) == null) new GraphicsDeviceManager(this); return this; } private void EvaluateExitCriteria() { ExitReason reason; if (UpdateCount >= MinUpdateCount && DrawCount >= MinDrawCount) reason = ExitReason.MinimumsSatisfied; else if (UpdateCount >= MaxUpdateCount) reason = ExitReason.MaxUpdateSatisfied; else if (DrawCount >= MaxDrawCount) reason = ExitReason.MaxDrawSatisfied; else reason = ExitReason.None; if (reason != ExitReason.None) { ExitReason = reason; DoExit(); } } protected override void BeginRun() { base.BeginRun(); UpdateCount = 0; DrawCount = 0; } protected override void EndRun() { base.EndRun(); #if XNA AbsorbQuitMessage(); #endif } protected override void Update(GameTime gameTime) { base.Update(gameTime); UpdateCount++; EvaluateExitCriteria(); } protected override void Draw(GameTime gameTime) { base.Draw(gameTime); DrawCount++; EvaluateExitCriteria(); } } public enum ExitReason { None, MinimumsSatisfied, MaxUpdateSatisfied, MaxDrawSatisfied } } ================================================ FILE: Tests/Runner/GameBase/PixelDeltaFrameComparer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Kni.Tests.Components { class PixelDeltaFrameComparer : IFrameComparer { private static int[] GreyScale(FramePixelData pixelData, int newWidth, int newHeight) { var resized = new int[newWidth * newHeight]; var stepX = pixelData.Width / (float)newWidth; var stepY = pixelData.Height / (float)newHeight; for (var y = 0; y < newHeight; y++) { for (var x = 0; x < newWidth; x++) { // We use a simple nearest neighbor sample as any blending // would only serve to increase the differences between the images. var sx = (int)(x * stepX); var sy = (int)(y * stepY); var si = sx + (sy * pixelData.Width); var scolor = pixelData.Data[si]; // Convert to a greyscale value which removes small // color differences that the eye cannot spot. var grayScale = (int)((scolor.R * 0.3) + (scolor.G * 0.59) + (scolor.B * 0.11)); var di = x + (y * newWidth); resized[di] = grayScale; } } return resized; } public float Compare(FramePixelData image, FramePixelData referenceImage) { // Conver the images down to a common sized greyscale image. var width = Math.Min(image.Width, referenceImage.Width); var height = Math.Min(image.Height, referenceImage.Height); var img = GreyScale(image, width, height); var imgRef = GreyScale(referenceImage, width, height); // Find the differences between the greyscale images. var absDiff = new int[width * height]; for (var i = 0; i < absDiff.Length; i++) absDiff[i] = Math.Abs(img[i] - imgRef[i]); // Find all the differences over the threshold. const int threshold = 3; var diffPixels = 0; for (var i = 0; i < absDiff.Length; i++) { if (absDiff[i] > threshold) diffPixels++; } // Calculate the difference percentage. var diff = diffPixels / (float)absDiff.Length; return 1.0f - diff; } } } ================================================ FILE: Tests/Runner/GameBase/TestGameBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.Components; #if IOS || TVOS using MonoTouch.Foundation; using MonoTouch.UIKit; #endif namespace Kni.Tests { class TestGameBase : Game, IFrameInfoSource { private bool _isExiting; public TestGameBase() { #if XNA Content.RootDirectory = AppDomain.CurrentDomain.BaseDirectory; #endif // We do all the tests using the reference device to // avoid driver glitches and get consistent rendering. GraphicsAdapter.UseReferenceDevice = true; Services.AddService(this); SuppressExtraUpdatesAndDraws = true; } #region IFrameInfoSource Implementation private FrameInfo _frameInfo; public FrameInfo FrameInfo { get { return _frameInfo; } } #endregion IFrameInfoSource Implementation public Predicate ExitCondition { get; set; } public bool SuppressExtraUpdatesAndDraws { get; set; } public event EventHandler InitializeWith; public event EventHandler LoadContentWith; public event EventHandler UnloadContentWith; public event EventHandler DrawWith; public event EventHandler UpdateWith; public event EventHandler UpdateOncePerDrawWith; public event EventHandler PreInitializeWith; public event EventHandler PreLoadContentWith; public event EventHandler PreUnloadContentWith; public event EventHandler PreDrawWith; public event EventHandler PreUpdateWith; public void ClearActions() { InitializeWith = null; LoadContentWith = null; UnloadContentWith = null; DrawWith = null; UpdateWith = null; UpdateOncePerDrawWith = null; PreInitializeWith = null; PreLoadContentWith = null; PreUnloadContentWith = null; PreDrawWith = null; PreUpdateWith = null; } private void SafeRaise(EventHandler handler) { if (handler != null) handler(this, new FrameInfoEventArgs(FrameInfo)); } public void InitializeOnly() { if (GraphicsDevice == null) { var graphicsDeviceManager = Services.GetService(typeof(IGraphicsDeviceManager)) as IGraphicsDeviceManager; graphicsDeviceManager.CreateDevice(); } Initialize(); } protected override void Initialize() { SafeRaise(PreInitializeWith); base.Initialize(); SafeRaise(InitializeWith); } protected override void LoadContent() { SafeRaise(PreLoadContentWith); base.LoadContent(); SafeRaise(LoadContentWith); } protected override void UnloadContent() { SafeRaise(PreUnloadContentWith); base.UnloadContent(); SafeRaise(UnloadContentWith); } public void Run(Predicate until = null) { if (until != null) ExitCondition = until; #if XNA try { base.Run(); } finally { // XNA (WinForms) leaves WM_QUIT hanging around // in the message queue sometimes, and when it // does, all future windows that are created are // instantly killed. So, we manually absorb any // WM_QUIT that exists. if (_isExiting) AbsorbQuitMessage(); } #elif IOS || TVOS || ANDROID RunOnMainThreadAndWait(); #else base.Run(); #endif } #if IOS || TVOS || ANDROID private void RunOnMainThreadAndWait() { var exitEvent = new ManualResetEvent(false); var exitHandler = new EventHandler( (sender, e) => exitEvent.Set() ); Exiting += exitHandler; try { InvokeRunOnMainThread(); var maxExecutionTime = TimeSpan.FromSeconds(30); if (!exitEvent.WaitOne (maxExecutionTime)) { throw new TimeoutException(string.Format( "Game.Run timed out. Maximum execution time is {0}.", maxExecutionTime)); } } finally { Exiting -= exitHandler; } } #endif #if IOS || TVOS private void InvokeRunOnMainThread() { Exception ex = null; UIApplication.SharedApplication.InvokeOnMainThread(() => { try { base.Run(); } catch (Exception innerEx) { ex = innerEx; } }); if (ex != null) throw ex; } #endif #if ANDROID private void InvokeRunOnMainThread() { throw new NotImplementedException( "Android need to implement TestGameBase.InvokeRunOnMainThread"); } #endif private readonly UpdateGuard _updateGuard = new UpdateGuard(); protected override void Update(GameTime gameTime) { _frameInfo.AdvanceUpdate(gameTime); EvaluateExitCondition(); if (_isExiting && SuppressExtraUpdatesAndDraws) return; SafeRaise(PreUpdateWith); base.Update(gameTime); if (_updateGuard.ShouldUpdate(FrameInfo)) UpdateOncePerDraw(gameTime); SafeRaise(UpdateWith); } protected virtual void UpdateOncePerDraw(GameTime gameTime) { SafeRaise(UpdateOncePerDrawWith); } protected override void Draw(GameTime gameTime) { _frameInfo.AdvanceDraw(gameTime); EvaluateExitCondition(); if (_isExiting && SuppressExtraUpdatesAndDraws) return; SafeRaise(PreDrawWith); base.Draw(gameTime); SafeRaise(DrawWith); } protected void DoExit() { try { Exit(); } catch (PlatformNotSupportedException ex) { // We need to halt the app on platforms that disallow // exit after we complete running all the unit tests. // So we do the next best thing can call the internal // platform code directly which produces the same result. Exit(); SuppressDraw(); } } private void EvaluateExitCondition() { if (_isExiting || ExitCondition == null) return; if (ExitCondition(_frameInfo)) { _isExiting = true; DoExit(); } } #if XNA [StructLayout (LayoutKind.Sequential)] public struct NativeMessage { public IntPtr handle; public uint msg; public IntPtr wParam; public IntPtr lParam; public uint time; public System.Drawing.Point p; } [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool PeekMessage( out NativeMessage msg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg); [DllImport ("user32.dll")] private static extern int GetMessage( out NativeMessage msg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax); const uint WM_QUIT = 0x12; protected static void AbsorbQuitMessage() { NativeMessage msg; if (!PeekMessage(out msg, IntPtr.Zero, 0, 0, 0)) return; do { int result = GetMessage(out msg, IntPtr.Zero, 0, 0); if (result == -1 || result == 0) return; } while (msg.msg != WM_QUIT); } #endif } } ================================================ FILE: Tests/Runner/GameBase/UpdateGuard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Kni.Tests.Components { class UpdateGuard { private int _lastDrawNumberOfUpdate = -1; public bool ShouldUpdate(FrameInfo frameInfo) { if (_lastDrawNumberOfUpdate == frameInfo.DrawNumber) return false; _lastDrawNumberOfUpdate = frameInfo.DrawNumber; return true; } } } ================================================ FILE: Tests/Runner/GameBase/VisualTestFixtureBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Xna.Framework; using NUnit.Framework; using Kni.Tests.Components; namespace Kni.Tests { class VisualTestFixtureBase { private VisualTestGame _game; protected VisualTestGame Game { get { return _game; } } [SetUp] public virtual void SetUp() { Paths.SetStandardWorkingDirectory(); _game = new VisualTestGame(); _game.ExitCondition = x => x.DrawNumber > 1; } [TearDown] public virtual void TearDown() { try { _game.Dispose(); _game = null; } catch { } } /// /// Provides a quick and easy way to run a single frame visual /// test with the default comparison and diff-writing options. /// Tests that need more control over the run-diff-assert /// process should manually call: /// /// /// Game.Components.Add($FrameCompareComponent$); /// Game.Run(); /// WriteFrameDiffs(); /// AssertFrameComparisonPassed(); /// /// /// The similarity to the reference /// image required for a frame to be considered passing. /// A value indicating whether visual /// diffs should be written for this test. protected void RunSingleFrameTest( float similarity = Constants.StandardRequiredSimilarity, bool writeDiffs = true) { RunMultiFrameTest(1, 1, similarity, writeDiffs); } /// /// Provides a quick and easy way to run a multi-frame visual /// test using the default comparison and diff-writing options. /// Tests that need more control over the run-diff-assert /// process should manually call: /// /// /// Game.Components.Add($FrameCompareComponent$); /// Game.Run(); /// WriteFrameDiffs(); /// AssertFrameComparisonPassed(); /// /// /// The total number of frames to /// capture. /// How often to capture. A value /// of 1 captures every frame, 2 captures every other, etc. /// /// The similarity to the reference /// image required for a frame to be considered passing. /// A value indicating whether visual /// diffs should be written for this test. protected void RunMultiFrameTest( int captureCount, int captureStride = 1, float similarity = Constants.StandardRequiredSimilarity, bool writeDiffs = true) { if (captureCount < 1) throw new ArgumentOutOfRangeException( "captureCount", "captureCount must be positive"); if (captureStride < 1) throw new ArgumentOutOfRangeException( "captureStride", "captureStride must be positive"); if (!Game.Components.Any(x => x is FrameCompareComponent)) Game.Components.Add(FrameCompareComponent.CreateDefault( Game, captureWhen: x => x.DrawNumber % captureStride == 0, maxFrameNumber: captureCount * captureStride)); Game.Run(until: x => x.DrawNumber > captureCount * captureStride); if (writeDiffs) WriteFrameDiffs(); AssertFrameComparisonPassed(similarity: similarity, expectedCount: captureCount); } protected void AssertFrameComparisonPassed( float similarity = Constants.StandardRequiredSimilarity, int expectedCount = 1) { var folderName = TestContext.CurrentContext.GetTestFolderName(); bool found = false; foreach (var frameCompareComponent in Game.Components.OfType()) { AssertFrameComparisonPassed(frameCompareComponent.Results, similarity, expectedCount); found = true; } if (!found) Assert.Fail("No FrameCompareComponents were found."); } protected static void AssertFrameComparisonPassed( IEnumerable results, float similarity, int expectedCount) { var allResults = new List(); var failedResults = new List(); foreach (var result in results) { allResults.Add(result); if (result.Similarity < similarity) failedResults.Add(result); } if (allResults.Count != expectedCount) Assert.Fail( "Expected {0} frame comparison result(s), but found {1}", expectedCount, allResults.Count); WriteComparisonResultReport(allResults, similarity); if (failedResults.Count > 0) { Assert.Fail( "{0} of {1} frames failed the similarity test.", failedResults.Count, allResults.Count); } } private static void WriteComparisonResultReport( IEnumerable results, float similarity) { Console.WriteLine("Required similarity: {0:0.####}", similarity); foreach (var result in results) Console.WriteLine( "Similarity: {0:0.####}, Capture: {1}, Reference: {2}", result.Similarity, result.CapturedImagePath, result.ReferenceImagePath); } protected void WriteFrameDiffs() { var folderName = TestContext.CurrentContext.GetTestFolderName(); bool found = false; foreach (var frameCompareComponent in Game.Components.OfType()) { WriteFrameDiffs(frameCompareComponent.Results, Paths.CapturedFrameDiff(folderName)); found = true; } if (!found) Assert.Fail("No FrameCompareComponents were found."); } protected static void WriteFrameDiffs( IEnumerable results, string directory) { try { Directory.CreateDirectory(directory); } catch (IOException) { } foreach (var result in results) { string diffFileName = string.Format( "diff-{0}-{1}.png", Path.GetFileNameWithoutExtension(result.ReferenceImagePath), Path.GetFileNameWithoutExtension(result.CapturedImagePath)); string diffOutputPath = Path.Combine(directory, diffFileName); var a = FramePixelData.FromFile(result.ReferenceImagePath); var b = FramePixelData.FromFile(result.CapturedImagePath); var diff = CreateDiff(a, b); Normalize(diff); diff.Save(diffOutputPath, "Diff"); } } private static FramePixelData CreateDiff(FramePixelData a, FramePixelData b) { int minWidth, maxWidth, minHeight, maxHeight; MathUtility.MinMax(a.Width, b.Width, out minWidth, out maxWidth); MathUtility.MinMax(a.Height, b.Height, out minHeight, out maxHeight); var diff = new FramePixelData(maxWidth, maxHeight); for (int y = 0; y < minHeight; ++y) { int indexA = y * a.Width; int indexB = y * b.Width; int indexDiff = y * diff.Width; for (int x = 0; x < minWidth; ++x) { // Ignore alpha. If alpha diffs are // needed, a special strategy will have // to be devised, since XOR'ing two // opaque pixels will cause a totally // transparent pixel and hide any other // difference. diff.Data[indexDiff] = new Color( (byte)(a.Data[indexA].R ^ b.Data[indexB].R), (byte)(a.Data[indexA].G ^ b.Data[indexB].G), (byte)(a.Data[indexA].B ^ b.Data[indexB].B)); indexA++; indexB++; indexDiff++; } } return diff; } private static void Normalize(FramePixelData frame) { Color max = new Color(0, 0, 0, 0); foreach (var pixel in frame.Data) { max.B = Math.Max(pixel.B, max.B); max.G = Math.Max(pixel.G, max.G); max.R = Math.Max(pixel.R, max.R); max.A = Math.Max(pixel.A, max.A); } if (max.B == 0) max.B = 255; if (max.G == 0) max.G = 255; if (max.R == 0) max.R = 255; if (max.A == 0) max.A = 255; for (int i = 0; i < frame.Data.Length; ++i) { Color pixel = frame.Data[i]; pixel.B = (byte)(pixel.B * 255 / max.B); pixel.G = (byte)(pixel.G * 255 / max.G); pixel.R = (byte)(pixel.R * 255 / max.R); pixel.A = (byte)(pixel.A * 255 / max.A); frame.Data[i] = pixel; } } } } ================================================ FILE: Tests/Runner/GameBase/VisualTestGame.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Kni.Tests.Components; namespace Kni.Tests { class VisualTestGame : TestGameBase, IFrameCaptureSource { public VisualTestGame() { new GraphicsDeviceManager(this) { PreferredBackBufferWidth = 800, PreferredBackBufferHeight = 480, GraphicsProfile = GraphicsProfile.HiDef, }; Services.AddService(this); } protected override void Draw(GameTime gameTime) { if (_shouldCaptureFrame) StartRenderingToTexture(); try { base.Draw(gameTime); } finally { if (_shouldCaptureFrame) StopRenderingToTexture(); } _shouldCaptureFrame = false; } protected override void Dispose(bool disposing) { if (disposing) { if (_renderToTextureTarget != null) { _renderToTextureTarget.Dispose(); _renderToTextureTarget = null; } } base.Dispose(disposing); } #region IFrameSource Implementation private RenderTarget2D _renderToTextureTarget; private bool _shouldCaptureFrame; public void ScheduleFrameCapture() { _shouldCaptureFrame = true; } public Texture2D GetCapturedFrame() { return _renderToTextureTarget; } public void ReleaseCapturedFrame(Texture2D frame) { _renderToTextureTarget.Dispose(); _renderToTextureTarget = null; } private void StartRenderingToTexture() { if (_renderToTextureTarget != null) throw new InvalidOperationException("Already rendering to a different texture."); _renderToTextureTarget = new RenderTarget2D( GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8); GraphicsDevice.SetRenderTarget(_renderToTextureTarget); } private void StopRenderingToTexture() { if (_renderToTextureTarget == null) throw new InvalidOperationException("Not currently rendering to a texture."); GraphicsDevice.SetRenderTarget(null); } #endregion IFrameSource Implementation } } ================================================ FILE: Tests/Runner/PixelArgb.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Kni.Tests { [StructLayout(LayoutKind.Sequential)] struct PixelArgb { public const int MaxDelta = 4 * Byte.MaxValue; public byte B; public byte G; public byte R; public byte A; public unsafe int Delta(PixelArgb* other) { return Math.Abs(B - other->B) + Math.Abs(G - other->G) + Math.Abs(R - other->R) + Math.Abs(A - other->A); } } } ================================================ FILE: Tests/Runner/Program.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using NUnitLite; using NUnit.Framework; namespace Kni.Tests { static class Program { static int Main(string[] args) { return new AutoRun().Execute(args); } } } ================================================ FILE: Tests/Runner/Utility.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework; using NUnit.Framework; namespace Kni.Tests { public class MatrixComparer : IEqualityComparer { static public MatrixComparer Epsilon = new MatrixComparer(0.000001f); private readonly float _epsilon; private MatrixComparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Matrix x, Matrix y) { return Math.Abs(x.M11 - y.M11) < _epsilon && Math.Abs(x.M12 - y.M12) < _epsilon && Math.Abs(x.M13 - y.M13) < _epsilon && Math.Abs(x.M14 - y.M14) < _epsilon && Math.Abs(x.M21 - y.M21) < _epsilon && Math.Abs(x.M22 - y.M22) < _epsilon && Math.Abs(x.M23 - y.M23) < _epsilon && Math.Abs(x.M24 - y.M24) < _epsilon && Math.Abs(x.M31 - y.M31) < _epsilon && Math.Abs(x.M32 - y.M32) < _epsilon && Math.Abs(x.M33 - y.M33) < _epsilon && Math.Abs(x.M34 - y.M34) < _epsilon && Math.Abs(x.M41 - y.M41) < _epsilon && Math.Abs(x.M42 - y.M42) < _epsilon && Math.Abs(x.M43 - y.M43) < _epsilon && Math.Abs(x.M44 - y.M44) < _epsilon; } public int GetHashCode(Matrix obj) { throw new NotImplementedException(); } } public class ByteComparer : IEqualityComparer { static public ByteComparer Equal = new ByteComparer(); private ByteComparer() { } public bool Equals(byte x, byte y) { return x == y; } public int GetHashCode(byte obj) { throw new NotImplementedException(); } } public class ColorComparer : IEqualityComparer { static public ColorComparer Equal = new ColorComparer(); private ColorComparer() { } public bool Equals(Color x, Color y) { return x == y; } public int GetHashCode(Color obj) { throw new NotImplementedException(); } } public class FloatComparer : IEqualityComparer { static public FloatComparer Epsilon = new FloatComparer(0.000001f); private readonly float _epsilon; private FloatComparer(float epsilon) { _epsilon = epsilon; } public bool Equals(float x, float y) { return Math.Abs(x - y) < _epsilon; } public int GetHashCode(float obj) { throw new NotImplementedException(); } } public class BoundingSphereComparer : IEqualityComparer { static public BoundingSphereComparer Epsilon = new BoundingSphereComparer(0.000001f); private readonly float _epsilon; private BoundingSphereComparer(float epsilon) { _epsilon = epsilon; } public bool Equals(BoundingSphere x, BoundingSphere y) { return Math.Abs(x.Center.X - y.Center.X) < _epsilon && Math.Abs(x.Center.Y - y.Center.Y) < _epsilon && Math.Abs(x.Center.Z - y.Center.Z) < _epsilon && Math.Abs(x.Radius - y.Radius) < _epsilon; } public int GetHashCode(BoundingSphere obj) { throw new NotImplementedException(); } } public class Vector2Comparer : IEqualityComparer { static public Vector2Comparer Epsilon = new Vector2Comparer(0.000001f); private readonly float _epsilon; private Vector2Comparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Vector2 x, Vector2 y) { return Math.Abs(x.X - y.X) < _epsilon && Math.Abs(x.Y - y.Y) < _epsilon; } public int GetHashCode(Vector2 obj) { throw new NotImplementedException(); } } public class Vector3Comparer : IEqualityComparer { static public Vector3Comparer Epsilon = new Vector3Comparer(0.000001f); private readonly float _epsilon; private Vector3Comparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Vector3 x, Vector3 y) { return Math.Abs(x.X - y.X) < _epsilon && Math.Abs(x.Y - y.Y) < _epsilon && Math.Abs(x.Z - y.Z) < _epsilon; } public int GetHashCode(Vector3 obj) { throw new NotImplementedException(); } } public class Vector4Comparer : IEqualityComparer { static public Vector4Comparer Epsilon = new Vector4Comparer(0.000001f); private readonly float _epsilon; private Vector4Comparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Vector4 x, Vector4 y) { return Math.Abs(x.X - y.X) < _epsilon && Math.Abs(x.Y - y.Y) < _epsilon && Math.Abs(x.Z - y.Z) < _epsilon && Math.Abs(x.W - y.W) < _epsilon; } public int GetHashCode(Vector4 obj) { throw new NotImplementedException(); } } public class QuaternionComparer : IEqualityComparer { static public QuaternionComparer Epsilon = new QuaternionComparer(0.000001f); private readonly float _epsilon; private QuaternionComparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Quaternion x, Quaternion y) { return Math.Abs(x.X - y.X) < _epsilon && Math.Abs(x.Y - y.Y) < _epsilon && Math.Abs(x.Z - y.Z) < _epsilon && Math.Abs(x.W - y.W) < _epsilon; } public int GetHashCode(Quaternion obj) { throw new NotImplementedException(); } } public class PlaneComparer : IEqualityComparer { static public PlaneComparer Epsilon = new PlaneComparer(0.000001f); private readonly float _epsilon; private PlaneComparer(float epsilon) { _epsilon = epsilon; } public bool Equals(Plane x, Plane y) { return Math.Abs(x.Normal.X - y.Normal.X) < _epsilon && Math.Abs(x.Normal.Y - y.Normal.Y) < _epsilon && Math.Abs(x.Normal.Z - y.Normal.Z) < _epsilon && Math.Abs(x.D - y.D) < _epsilon; } public int GetHashCode(Plane obj) { throw new NotImplementedException(); } } public static class ArrayUtil { public static T[] ConvertTo(byte[] source) where T : struct { var sizeOfDest = Marshal.SizeOf(typeof(T)); var count = source.Length / sizeOfDest; var dest = new T[count]; var pinned = GCHandle.Alloc(source, GCHandleType.Pinned); var pointer = pinned.AddrOfPinnedObject(); for (var i = 0; i < count; i++, pointer += sizeOfDest) dest[i] = (T)Marshal.PtrToStructure(pointer, typeof(T)); pinned.Free(); return dest; } public static byte[] ConvertFrom(T[] source) where T : struct { var sizeOfSource = Marshal.SizeOf(typeof(T)); var count = source.Length; var dest = new byte[sizeOfSource * count]; var pinned = GCHandle.Alloc(dest, GCHandleType.Pinned); var pointer = pinned.AddrOfPinnedObject(); for (var i = 0; i < count; i++, pointer += sizeOfSource) Marshal.StructureToPtr(source[i], pointer, true); pinned.Free(); return dest; } } static class MathUtility { public static void MinMax(int a, int b, out int min, out int max) { if (a > b) { min = b; max = a; } else { min = a; max = b; } } } static class Paths { private const string AssetFolder = "Assets"; private static readonly string AudioFolder = Path.Combine(AssetFolder, "Audio"); private static readonly string FontFolder = Path.Combine(AssetFolder, "Fonts"); private static readonly string ReferenceImageFolder = Path.Combine(AssetFolder, "ReferenceImages"); private static readonly string TextureFolder = Path.Combine(AssetFolder, "Textures"); private static readonly string EffectFolder = Path.Combine(AssetFolder, "Effects"); private static readonly string ModelFolder = Path.Combine(AssetFolder, "Models"); private static readonly string XmlFolder = Path.Combine(AssetFolder, "Xml"); private const string CapturedFrameFolder = "CapturedFrames"; private const string CapturedFrameDiffFolder = "Diffs"; public static string Asset(params string[] pathParts) { return Combine(AssetFolder, pathParts); } public static string Audio(params string[] pathParts) { return Combine(AudioFolder, pathParts); } public static string Font(params string[] pathParts) { return Combine(FontFolder, pathParts); } public static string Texture(params string[] pathParts) { return Combine(TextureFolder, pathParts); } public static string RawEffect(params string[] pathParts) { return Combine(EffectFolder, pathParts) + ".fx"; } public static string CompiledEffect(params string[] pathParts) { string type; #if XNA type = "XNA"; #elif WINDOWSDX type = "DirectX"; #elif DESKTOPGL type = "OpenGL"; #else throw new Exception("Make sure the effect path is set up correctly for this platform!"); #endif var path = Combine(type, pathParts); return Combine(EffectFolder, path); } public static string Model(params string[] pathParts) { return Combine(ModelFolder, pathParts); } public static string Xml(params string[] pathParts) { return Combine(XmlFolder, pathParts); } public static string ReferenceImage(params string[] pathParts) { return Combine(ReferenceImageFolder, pathParts); } public static string CapturedFrame(params string[] pathParts) { return Combine(CapturedFrameFolder, pathParts); } public static string CapturedFrameDiff(params string[] pathParts) { return Combine(CapturedFrameDiffFolder, pathParts); } private static string Combine(string head, params string[] tail) { return Path.Combine(head, Path.Combine(tail)); } public static void SetStandardWorkingDirectory() { var directory = AppDomain.CurrentDomain.BaseDirectory; Directory.SetCurrentDirectory(directory); } public static void AreEqual(string expected, string actual) { expected = Path.GetFullPath(expected); actual = Path.GetFullPath(actual); Assert.AreEqual(expected, actual, "Paths not equal!"); } } } ================================================ FILE: Tests/Runner/iOS/AppDelegate.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Net; using MonoTouch.Foundation; using MonoTouch.UIKit; using MonoGame.Tests.Interface; namespace MonoGame.Tests.iOS { [Register("AppDelegate")] public partial class AppDelegate : UIApplicationDelegate { private FileServer _fileServer; public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // FIXME: Figure out how to pass and receive arguments // in MonoTouch applications. The Main method // has an empty array and NSProcessInfo has // values specific to Mono launching/debugging. MobileInterface.RunAsync(new string[0]); _fileServer = new FileServer(); _fileServer.Prefixes.Add("http://+:6599/"); _fileServer.Start(); return true; } } } ================================================ FILE: Tests/Runner/iOS/Info.plist ================================================ CFBundleExecutable MonoGameTests UIDeviceFamily 1 2 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait ================================================ FILE: Tests/Runner/iOS/Main.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using MonoTouch.Foundation; using MonoTouch.UIKit; namespace MonoGame.Tests.iOS { public class Application { static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } ================================================ FILE: Tests/Utilities/ActionDaemon.cs ================================================ using System; using System.Collections.Generic; using System.Threading; namespace Kni.Tests.Utilities { internal class ActionDaemon { private readonly Queue _actions = new Queue(); private Thread _thread; public Thread Thread { get { return _thread; } } public bool Finished { get { return _actions.Count == 0 && (_thread == null || _thread.IsAlive == false); } } public void AddAction(Action action) { lock (_actions) _actions.Enqueue(action); if (_thread == null || !_thread.IsAlive) Start(); } public void ForceTermination() { _thread.Abort(); } public void Clear(bool abortCurrent = false) { lock (_actions) _actions.Clear(); if (abortCurrent) ForceTermination(); } private void Start() { _thread = new Thread(DoActions); _thread.Priority = ThreadPriority.Lowest; _thread.IsBackground = true; _thread.Start(); } private void DoActions() { while (true) { Action currentAction; lock (_actions) { if (_actions.Count == 0) break; currentAction = _actions.Dequeue(); } currentAction(); } } } } ================================================ FILE: ThirdParty/AssimpNet/4.1.0/lib/net40/AssimpNet.xml ================================================ AssimpNet An animation consists of keyframe data for a number of nodes. For each node affected by the animation, a separate series of data is given. Gets or sets the name of the animation. If the modeling package the data was exported from only supports a single animation channel, this name is usually empty. Gets or sets the duration of the animation in number of ticks. Gets or sets the number of ticks per second. It may be zero if it is not specified in the imported file. Gets if the animation has node animation channels. Gets the number of node animation channels where each channel affects a single node. Gets the node animation channels. Gets if the animation has mesh animations. Gets the number of mesh animation channels. Gets the number of mesh morph animation channels. Gets the mesh animation channels. Gets the mesh morph animation channels. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion functionality is offered to bypass loading model data into managed memory. Gets if the context has been disposed. Gets or sets the uniform scale for the model. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets whether this context is using a user-defined IO system for file handling. Gets the property configurations set to this context. This is only used during import. Constructs a new instance of the class. Imports a model from the stream without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Post processing flags, if any Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the specified file without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Imports a model from the specified file. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file Post processing flags, if any The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Post processing steps used for the import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Post processing steps used for the import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system is used instead. Custom file system implementation Removes the currently set custom file system implementation from the importer. Gets the model formats that are supported for export by Assimp. Export formats supported Gets the model formats that are supported for import by Assimp. Import formats supported Gets descriptions for each importer that assimp has registered. Descriptions of supported importers. Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension, they are called in the order that they were registered. File extension to query importer support for. Importer description or null if it does not exist. Checks if the format extension (e.g. ".dae" or ".obj") is supported for import. Model format True if the format is supported, false otherwise Checks if the format extension (e.g. ".dae" or ".obj") is supported for export. Model format True if the format is supported, false otherwise Sets a configuration property to the context. This is only used during import. Config to set Removes a set configuration property by name. Name of the config property Removes all configuration properties from the context. Checks if the context has a config set by the specified name. Name of the config property True if the config is present, false otherwise Disposes of resources held by the context. These include IO systems still attached. Releases unmanaged and - optionally - managed resources True to release both managed and unmanaged resources; False to release only unmanaged resources. AssimpNet general exception. Initializes a new instance of the class. Initializes a new instance of the class. The error message. Initializes a new instance of the class. Name of the param. The error message. Initializes a new instance of the class. The error message The inner exception. Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame hierarchy and by which it can be addressed by animations. In addition it has a number of influences on vertices. Gets or sets the name of the bone. Gets the number of vertex influences the bone contains. Gets if the bone has vertex weights - this should always be true. Gets the vertex weights owned by the bone. Gets or sets the matrix that transforms from mesh space to bone space in bind pose. Constructs a new instance of the class. Constructs a new instance of the class. Name of the bone Bone's offset matrix Vertex weights Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes a right-handed camera in the scene. An important aspect is that the camera itself is also part of the scenegraph, meaning any values such as the direction vector are not *absolute*, they can be relative to the coordinate system defined by the node which corresponds to the camera. This allows for camera animations. Gets or sets the name of the camera. This corresponds to a node in the scenegraph with the same name. This node specifies the position of the camera in the scene hierarchy and can be animated. Gets or sets the position of the camera relative to the coordinate space defined by the corresponding node. THe default value is 0|0|0. Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the corresponding node. The 'right' vector of the camera is the cross product of the up and direction vectors. The default value is 0|1|0. Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node. The default value is 0|0|1. Gets or sets the half horizontal field of view angle, in radians. The FoV angle is the angle between the center line of the screen and the left or right border. The default value is 1/4PI. Gets or sets the distance of the near clipping plane from the camera. The value may not be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f; Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must be further than the near clippling plane. The default value is 1000.0f. The ratio between the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid floating-point inaccuracies which can lead to z-fighting. Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file. The default value is zero. Gets a right-handed view matrix. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a RGB color. Red component. Green component. Blue component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color3D. Red component Green component Blue component Constructs a Color3D where each component is set to the same value. Value to set R, G, B components Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a Red-Green-Blue-Alpha (RGBA) color. Color values range from 0 to 1. Red component. Green component. Blue component. Alpha component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color4D. Red component Green component Blue component Alpha component Constructs a Color4D. Alpha is set to 1.0. Red component Green component Blue component Constructs a Color4D where each component is set to the same value. Value to set R, G, B, A components Constructs a Color4D from a Color3D. Alpha is set to 1.0. RGB values Constructs a Color4D from a Color3D and alpha value. RGB values Alpha value Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Base property config. Gets the property name. Creates a new property config that has no active Assimp property store. Name of the property. Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Applies the property value to the given Assimp property store. Assimp property store Describes an integer configuration property. Gets the property value. Gets the default property value. Constructs a new IntengerPropertyConfig. Name of the property Property value constructs a new IntegerPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a float configuration property. Gets the property value. Gets the default property value. Constructs a new FloatPropertyConfig. Name of the property Property value Constructs a new FloatPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a configuration property. Gets the property value. Gets the default property value. Constructs a new MatrixPropertyConfig. Name of the property Property value Constructs a new MatrixPropertyConfig. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a boolean configuration property. Gets the property value. Gets the default property value. Constructs a new BooleanPropertyConfig. Name of the property Property value Constructs a new BooleanPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a string configuration property. Gets the property value. Gets the default property value. Constructs a new StringPropertyConfig. Name of the property Property value Constructs a new StringPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Convience method for constructing a whitespace delimited name list. Array of names White-space delimited list as a string Configuration to enable time measurements. If enabled, each part of the loading process is timed and logged. Default value is false. Gets the string name used by MeasureTimeConfig. Constructs a new MeasureTimeConfig. True if the loading process should be timed or not. Configuration to set Assimp's multithreading policy. Possible values are -1 to let Assimp decide, 0 to disable multithreading, or any number larger than zero to force a specific number of threads. This is only a hint and may be ignored by Assimp. Default value is -1. Gets the string name used by MultithreadingConfig. Constructs a new MultithreadingConfig. A value of -1 will let Assimp decide, a value of zero to disable multithreading, and a value greater than zero to force a specific number of threads. Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Default value is false. Gets the string name used by NoSkeletonMeshConfig. Constructs a new NoSkeletonMeshConfig. True if dummy skeleton mesh generation should be disabled, false otherwise. Configuration to set the maximum angle that may be between two vertex tangents/bitangents when they are smoothed during the step to calculate the tangent basis. The default value is 45 degrees. Gets the string name used by TangentSmoothingAngleConfig. Constructs a new TangentSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the maximum angle between two face normals at a vertex when they are smoothed during the step to calculate smooth normals. This is frequently called the "crease angle". The maximum and default value is 175 degrees. Gets the string name used by NormalSmoothingAngleConfig. Constructs a new NormalSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. The default value is "colormap.lmp". Gets the string name used by MDLColorMapConfig. Constructs a new MDLColorMapConfig. Colormap filename Configuration for the the step to determine what materials to keep. If a material matches one of these names it will not be modified or removed by the post processing step. Default is an empty string. Gets the string name used by MaterialExcludeListConfig. Constructs a new MaterialExcludeListConfig. Material names containing whitespace must be enclosed in single quotation marks. List of material names that will not be modified or replaced by the remove redundant materials post process step. Configuration for the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option can be useful if you have a scene hierarchy that contains important additional information which you intend to parse. The default value is false. Gets the string name used by KeepSceneHierarchyConfig. Constructs a new KeepHierarchyConfig. True to keep the hierarchy, false otherwise. Configuration for the step to normalize all vertex components into the -1...1 range. The default value is false. Gets the string name used by NormalizeVertexComponentsConfig. Constructs a new NormalizeVertexComponentsConfig. True if the post process step should normalize vertex components, false otherwise. Configuration for the step to remove degenerted primitives from the import immediately. The default value is false, where degenerated triangles are converted to lines, and degenerated lines to points. Gets the string name used by RemoveDegeneratePrimitivesConfig. Constructs a new RemoveDegeneratePrimitivesConfig. True if the post process step should remove degenerate primitives, false otherwise. Configuration for the step. If true, the area of the triangles are checked to see if they are greater than 1e-6. If so, the triangle is removed if is set to true. Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig. Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig. True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise. Configuration for the step to preserve nodes matching a name in the given list. Nodes that match the names in the list will not be modified or removed. Identifiers containing whitespaces must be enclosed in single quotation marks. The default value is an empty string. Gets the string name used by NodeExcludeListConfig. Constructs a new NodeExcludeListConfig. List of node names Configuration for the step that specifies the maximum number of triangles a mesh can contain. The default value is MeshTriangleLimitConfigDefaultValue. Gets the string name used by MeshTriangleLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshTriangleLimitConfig. Max number of triangles a mesh can contain. Configuration for the step that specifies the maximum number of vertices a mesh can contain. The default value is MeshVertexLimitConfigDefaultValue. Gets the string name used by MeshVertexLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshVertexLimitConfig. Max number of vertices a mesh can contain. Configuration for the step that specifies the maximum number of bone weights per vertex. The default value is VertexBoneWeightLimitConfigDefaultValue. gets the string name used by VertexBoneWeightLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new VertexBoneWeightLimitConfig. Max number of bone weights per vertex. Configuration for the step that specifies the size of the post-transform vertex cache. The size is given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue. Gets the string name used by VertexCacheConfig. Gets the defined default vertex cache size, this corresponds to the . Constructs a new VertexCacheSizeConfig. Size of the post-transform vertex cache, in number of vertices. Configuration for the step that specifies which parts of the data structure is to be removed. If no valid mesh remains after the step, the import fails. The default value i . Gets the string name used by RemoveComponentConfig. Constructs a new RemoveComponentConfig. Bit-wise combination of components to exclude. Configuration for the step that specifies which primitive types are to be removed by the step. Specifying all primitive types is illegal. The default value is zero specifying none. Gets the string name used by SortByPrimitiveTypeConfig. Constructs a new SortByPrimitiveTypeConfig. Bit-wise combination of primitive types to remove Configuration for the step that specifies the floating point accuracy for animation values, specifically the episilon during comparisons. The default value is 0.0f. Gets the string name used by AnimationAccuracyConfig. Constructs a new AnimationAccuracyConfig. Episilon for animation value comparisons. Configuration for the step that specifies which UV transformations are to be evaluated. The default value is for all combinations (scaling, rotation, translation). Gets the string name used by TransformUVConfig. Constructs a new TransformUVConfig. Bit-wise combination specifying which UV transforms that should be evaluated. Configuration that is a hint to Assimp to favor speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-process steps to use faster code paths if possible. The default value is false. Gets the string name used by FavorSpeedConfig. Constructs a new FavorSpeedConfig. True if Assimp should favor speed at the expense of quality, false otherwise. Configures the maximum bone count per mesh for the step. Meshes are split until the maximum number of bones is reached. Gets the string name used by MaxBoneCountConfig. Constructs a new MaxBoneCountConfig. The maximum bone count. Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised. Gets the string name used by TangentTextureChannelIndexConfig. Constructs a new TangentTextureChannelIndexConfig. The zero-based texture channel index. Configures the threshold that is used to determine what bones are removed. Gets the string name used by DeboneThresholdConfig. Constructs a new DeboneThresholdConfig. The debone threshold. Configuration that requires all bones to qualify for deboning before any are removed. Gets the string name used by DeboneAllOrNoneConfig. Constructs a new DeboneAllOrNoneConfig. True if all are required, false if none need to qualify. Configuration for that sets a user defined matrix as the scene root node transformation before transforming vertices. Default value is the identity matrix. Gets the string name used by RootTransformationConfig. Constructs a new RootTransformationConfig. Root transformation matrix to be set to the root scene node during the pretransform post process step. Applies the property value to the given Assimp property store. Assimp property store Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Gets the string name used by GlobalScaleConfig. Constructs a new GlobalScaleConfig. Value to scale the entire scene by. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the "global" keyframe that will be imported. There are other configs for specific importers that will override the global setting. Gets the string name used by GlobalKeyFrameImportConfig. Constructs a new GlobalKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD3 format. Gets the string name used by MD3KeyFrameImportConfig. Constructs a new MD3KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD2 format. Gets the string name used by MD2KeyFrameImportConfig. Constructs a new MD2KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MDL format. Gets the string name used by MDLKeyFrameImportConfig. Constructs a new MDLKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the SMD format. Gets the string name used by SMDKeyFrameImportConfig. Constructs a new SMDKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the Unreal format. Gets the string name used by UnrealKeyFrameImportConfig. Constructs a new UnrealKeyFrameImportConfig. Keyframe index Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. The default value is true. Gets the string name used by ACSeparateBackfaceCullConfig. Constructs a new ACSeparateBackfaceCullConfig. True if all surfaces that have the "backface cull" flag set should be collected in separate meshes, false otherwise. Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. The default value is true. Gets the string name used by ACEvaluateSubdivisionConfig. Constructs a new ACEvaluateSubdivisionConfig. True if the AC loader should evaluate subdivisions, false otherwise. Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). The default value is true. Gets the string name used by UnrealHandleFlagsConfig. Constructs a new UnrealHandleFlagsConfig. True if the unreal loader should separate faces with different surface flags, false otherwise. Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. The default value is false. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Gets the string name used by TerragenComputeTexCoordsConfig. Constructs a new TerragenComputeTexCoordsConfig. True if terran UV coordinates should be computed, false otherwise. Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true. Gets the string name used by ASEReconstructNormalsConfig. Constructs a new ASEReconstructNormalsConfig. True if normals should be re-computed, false otherwise. Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. The default value is true. Gets the string name used by MD3HandleMultiPartConfig. Constructs a new MD3HandleMultiPartConfig. True if the split files should be loaded and combined, false otherwise. Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. The default string value is "default". Gets the string name used by MD3SkinNameConfig. Constructs a new MD3SkinNameConfig. The skin name. Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. the default string value is an empty string. Gets the string name used by MD3ShaderSourceConfig. Constructs a new MD3ShaderSourceConfig. The shader file. Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty The default value is false (all layers are loaded). Gets the string name used by LWOImportOneLayerConfig. Constructs a new LWOImportOneLayerConfig. True if only one layer should be imported, false if all layers should be imported. Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default value is false. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Gets the string name used by MD5NoAnimationAutoLoadConfig. Constructs a new MD5NoAnimationAutoLoadConfig. True if animations should not be automatically loaded, false if they should be. Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Gets the string name used by LWSAnimationStartConfig. Constructs a new LWSAnimationStartConfig. Beginning of the time range Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Gets the string name used by LWSAnimationEndConfig. Constructs a new LWSAnimationEndConfig. Ending of the time range Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. The default value is 100 frames per second. Gets the string name used by IRRAnimationFrameRateConfig. Constructs a new IRRAnimationFramerateConfig. Number of frames per second to output. The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. The default value is "Scene.Material". Gets the string name used by OgreMaterialFileConfig. Constructs a new OgreMaterialFileConfig. Material file name to load. The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. The default value is false. Gets the string name used by OgreTextureTypeFromFilenameConfig. Constructs a new OgreTextureTypeFromFilenameConfig. True if the filename defines texture usage, false otherwise. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Gets the string name used by IFCSkipSpaceRepresentationsConfig. Constructs a new IFCSkipSpaceRepresentationsConfig. True if the IfcSpace elements are skipped, false if otherwise. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Gets the string name used by IFCUseCustomTriangulationConfig. Constructs a new IFCUseCustomTriangulationConfig. True if the loader should use its own triangulation routine for walls/floors, false otherwise. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Gets the string name used by IFCSmoothingAngleConfig. Constructs a new IFCSmoothingAngleConfig. Smoothing angle when tessellating curves. Needs to be in the range of [5, 120]. Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Gets the string name used by IFCCylindricalTessellationConfig. Constructs a new IFCCylindricalTessellationConfig. Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180]. Specifies whether the collada loader will ignore the up direction. Default is false. Gets the string name used by ColladaIgnoreUpDirectionConfig. Constructs a new ColladaIgnoreUpDirectionConfig. True if the loader should ignore the up direction, false otherwise. Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true. Gets the string name used by FBXImportAllGeometryLayersConfig. Constructs a new FBXImportAllGeometryLayersConfig. True if all geometry layers should be merged, false otherwise to take only the first layer. Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials, if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false. Gets the string name used by FBXImportAllMaterialsConfig. Constructs a new FBXImportAllMaterialsConfig. True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials). Specifies whether the FBX importer will import materials. Default is true. Gets the string name used by FBXImportMaterialsConfig. Constructs a new FBXImportMaterialsConfig. True if the FBX importer should import materials, false otherwise. Specifies whether the FBX importer will import embedded textures. Default is true. Gets the string name used by FBXImportEmbeddedTexturesConfig. Constructs a new FBXImportEmbeddedTexturesConfig. True if the FBX importer should import embedded textures, false otherwise. Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false. Gets the string name used by FBXImportSearchEmbeddedTexturesConfig. Constructs a new FBXImportSearchEmbeddedTexturesConfig. True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Specifies whether the FBX importer will import cameras. Default is true. Gets the string name used by FBXImportCamerasConfig. Constructs a new FBXImportCamerasConfig. True if the FBX importer should import cameras, false otherwise. Specifies whether the FBX importer will import lights. Default is true. Gets the string name used by FBXImportLightsConfig. Constructs a new FBXImportLightsConfig. True if the FBX importer should import lights, false otherwise. Specifies whether the FBX importer will import animations. Default is true. Gets the string name used by FBXImportAnimationsConfig. Constructs a new FBXImportAnimationsConfig. True if the FBX importer should import animations, false otherwise. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Default is false. Gets the string name used by FBXStrictModeConfig. Constructs a new FBXStrictModeConfig. True if FBX strict mode should be used, false otherwise. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Default value is true. Gets the string name used by FBXPreservePivotsConfig. Constructs a new FBXPreservePivotsConfig. True if pivots should be preserved, false otherwise. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Default value is true. Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig. Constructs a new FBXOptimizeEmptyAnimationCurvesConfig. True if empty animation curves should be dropped, false otherwise. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Gets the string name used by XFileUseDoublesConfig. Constructs a new XFileUseDoublesConfig. True if the x file uses 64-bit double values rather than 32-bit float values. Represents an embedded texture. Some file formats directly embed texture assets. Embedded textures may be uncompressed, where the data is given in an uncompressed format. Or it may be compressed in a format like png or jpg. In the latter case, the raw file bytes are given so the application must utilize an image decoder (e.g. DevIL) to get access to the actual color data. This object represents both types, so some properties may or may not be valid depending if it is compressed or not. Gets if the texture is compressed or not. Gets the width of the texture in pixels. Only valid for non-compressed textures. Gets the height of the texture in pixels. Only valid for non-compressed textures. Gets if the texture has non-compressed texel data. Only valid for non-compressed textures. Gets the size of the non-compressed texel data. Only valid for non-compressed textures. Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures. Gets if the embedded texture has compressed data. Only valid for compressed textures. Gets the size of the compressed data. Only valid for compressed textures. Gets the raw byte data representing the compressed texture. Only valid for compressed textures. Gets the format hint to determine the type of compressed data. This hint is a three-character lower-case hint like "dds", "jpg", "png". Constructs a new instance of the class. Should use only if reading from a native value. Constructs a new instance of the class. This creates a compressed embedded texture. The 3 character format hint. The compressed data. Constructs a new instance of the class. This creates an uncompressed embedded texture. Width of the texture Height of the texture Color data Thrown if the data size does not match width * height. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Enumerates metadata data types. Metadata is a boolean. Metadata is an integer. Metadata is an unsigned 64-bit integer. Metadata is a float. Metadata is a double. Metadata is a string. Metadata is a . Post processing flag options, specifying a number of steps that can be run on the data to either generate additional vertex data or optimize the imported data. No flags enabled. Calculates the tangents and binormals (bitangents) for the imported meshes. This does nothing if a mesh does not have normals. You might want this post processing step to be executed if you plan to use tangent space calculations such as normal mapping. There is a config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which allows you to specify a maximimum smoothing angle for the algorithm. However, usually you'll want to leave it at the default value. Identifies and joins identical vertex data sets within all imported meshes. After this step is run each mesh does contain only unique vertices anymore, so a vertex is possibly used by multiple faces. You usually want to use this post processing step. If your application deals with indexed geometry, this step is compulsory or you'll just waste rendering time. If this flag is not specified, no vertices are referenced by more than one face and no index buffer is required for rendering. Converts all imported data to a left handed coordinate space. By default the data is returned in a right-handed coordinate space, where +X points to the right, +Z towards the viewer, and +Y upwards. Triangulates all faces of all meshes. By default the imported mesh data might contain faces with more than three indices. For rendering you'll usually want all faces to be triangles. This post processing step splits up all higher faces to triangles. Line and point primitives are *not* modified. If you want 'triangles only' with no other kinds of primitives, try the following: Specify both and . Ignore all point and line meshes when you process Assimp's output Removes some parts of the data structure (animations, materials, light sources, cameras, textures, vertex components). The components to be removed are specified in a separate configuration option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove unrequired stuff from the pipeline as early as possible results in an increased performance and a better optimized output data structure. This step is also useful if you want to force Assimp to recompute normals or tangents. the corresponding steps don't recompute them if they're already there (loaded from the source asset). By using this step you can make sure they are NOT there. Generates normals for all faces of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. Face normals are shared between all points of a single face, so a single point can have multiple normals, which in other words, forces the library to duplicate vertices in some cases. This makes senseless then. Generates smooth normals for all vertices of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE allows you to specify an angle maximum for the normal smoothing algorithm. Normals exceeding this limit are not smoothed, resulting in a 'hard' seam between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual appearance. Splits large meshes into smaller submeshes. This is useful for realtime rendering where the number of triangles which can be maximally processed in a single draw call is usually limited by the video driver/hardware. The maximum vertex buffer is usually limited, too. Both requirements can be met with this step: you may specify both a triangle and a vertex limit for a single mesh. The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default values are 1,000,000. Warning: This can be a time consuming task. Removes the node graph and "bakes" (pre-transforms) all vertices with the local transformation matrices of their nodes. The output scene does still contain nodes, however, there is only a root node with children, each one referencing only one mesh. Each mesh referencing one material. For rendering, you can simply render all meshes in order, you don't need to pay attention to local transformations and the node hierarchy. Warning: Animations are removed during this step. Limits the number of bones simultaneously affecting a single vertex to a maximum value. If any vertex is affected by more than that number of bones, the least important vertex weights are removed and the remaining vertex weights are re-normalized so that the weights still sum up to 1. The default bone weight limit is 4 and uses the AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing step might be of interest for you. Validates the imported scene data structure. This makes sure that all indices are valid, all animations and bones are linked correctly, all material references are correct, etc. It is recommended to capture Assimp's log output if you use this flag, so you can easily find out what's actually wrong if a file fails the validation. The validator is quite rude and will find *all* inconsistencies in the data structure. There are two types of failures: Error: There's something wrong with the imported data. Further postprocessing is not possible and the data is not usable at all. The import fails. Warning: There are some minor issues (e.g. 1000000 animation keyframes with the same time), but further postprocessing and use of the data structure is still safe. Warning details are written to the log file. Re-orders triangles for better vertex cache locality. This step tries to improve the ACMR (average post-transform vertex cache miss ratio) for all meshes. The implementation runs in O(n) time and is roughly based on the 'tipsify' algorithm. If you intend to render huge models in hardware, this step might be of interest for you. The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune the cache optimization. Searches for redundant/unreferenced materials and removes them. This is especially useful in combination with the PreTransformVertices and OptimizeMeshes flags. Both join small meshes with equal characteristics, but they can't do their work if two meshes have different materials. Because several material settings are always lost during Assimp's import filders and because many exporters don't check for redundant materials, huge models often have materials which are defined several times with exactly the same settings. Several material settings not contributing to the final appearance of a surface are ignored in all comparisons ... the material name is one of them. So, if you're passing additional information through the content pipeline (probably using *magic* material names), don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST setting. This step tries to determine which meshes have normal vectors that are facing inwards. The algorithm is simple but effective: The bounding box of all vertices and their normals are compared against the volume of the bounding box of all vertices without their normals. This works well for most objects, problems might occur with planar surfaces. However, the step tries to filter such cases. The step inverts all in-facing normals. Generally, it is recommended to enable this step, although the result is not always correct. This step splits meshes with more than one primitive type in homogeneous submeshes. This step is executed after triangulation and after it returns, just one bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time rendering where point and line primitives are often ignored or rendered separately. You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need. This can be used to easily exclude lines and points, which are rarely used, from the import. This step searches all meshes for degenerated primitives and converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical. To have degenerated primitives removed, specify the flag try one of the following procedures: To support lines and points: Set the AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as soon as they are detected. They won't pass any further pipeline steps. If you don't support lines and points: Specify flag, which will move line and point primitives to separate meshes. Then set the AI_CONFIG_PP_SBP_REMOVE option to and to cause step to reject point and line meshes from the scene. Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several file formats which do not support lines or points where exporters bypass the format specification and write them as degenerated triangles instead. This step searches all meshes for invalid data, such as zeroed normal vectors or invalid UV coordinates and removes or fixes them. This is intended to get rid of some common exporter rrors. This is especially useful for normals. If they are invalid, and the step recognizes this, they will be removed and can later be recomputed, e.g. by the GenerateSmoothNormals flag. The step will also remove meshes that are infinitely small and reduce animation tracks consisting of hundreds of redundant keys to a single key. The AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check for duplicate animation tracks. This step converts non-UV mappings (such as spherical or cylindrical mapping) to proper texture coordinate channels. Most applications will support UV mapping only, so you will probably want to specify this step in every case. Note that Assimp is not always able to match the original mapping implementation of the 3D app which produced a model perfectly. It's always better to let the father app compute the UV channels, at least 3DS max, maya, blender, lightwave, modo, .... are able to achieve this. If this step is not requested, you'll need to process the MATKEY_MAPPING material property in order to display all assets properly. Applies per-texture UV transformations and bakes them to stand-alone vtexture coordinate channels. UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material key for more information. This step processes all textures with transformed input UV coordinates and generates new (pretransformed) UV channel transformations, so you will probably want to specify this step. UV transformations are usually implemented in realtime apps by transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous) transformation matrix. Searches for duplicated meshes and replaces them with a reference to the first mesh. This is time consuming, so don't use it if you have no time. Its main purpose is to work around the limitation with some file formats that don't support instanced meshes, so exporters duplicate meshes. Attempts to reduce the number of meshes (and draw calls). This is recommended to be used together with and is fully compatible with both and . Optimizes scene hierarchy. Nodes with no animations, bones, lights, or cameras assigned are collapsed and joined. Node names can be lost during this step, you can specify names of nodes that should'nt be touched or modified with AI_CONFIG_PP_OG_EXCLUDE_LIST. Use this flag with caution. Most simple files will be collapsed to a single node, complex hierarchies are usually completely lost. That's not the right choice for editor environments, but probably a very effective optimization if you just want to get the model data, convert it to your own format and render it as fast as possible. This flag is designed to be used with for best results. Scenes with thousands of extremely small meshes packed in deeply nested nodes exist for almost all file formats. Usage of this and usually fixes them all and makes them renderable. Flips all UV coordinates along the y-axis and adjusts material settings/bitangents accordingly. Flips face winding order from CCW (default) to CW. Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit. Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones removed if and only if all bones within the scene qualify for removal. This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to control this. Enumerates components of the scene or mesh data that can be excluded from the import using the post process step RemoveComponent. No components to be excluded. Removes normal vectors Removes tangents/binormals Removes all color sets. Removes all texture UV sets. Remove all boneweights from all meshes. Scenegraph nodes corresponding to the bones are NOT removed. Use OptimizeGraph step to remove them. Removes all node animations. Coressponding scenegraph nodes are NOT removed. Use OptimizeGraph step to remove them. Removes all embedded textures. Removes all light sources. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all cameras. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all meshes. Removes all materials. One default material will be generated. Enumerates geometric primitive types. Point primitive. This is just a single vertex in the virtual world. A face has one index for such a primitive. Line primitive. This is a line defined through a start and an end position. A face contains exactly two indices for such a primitive. Triangle primitive, consisting of three indices. A n-Gon that has more than three edges (thus is not a triangle). Defines an animation channel behaves outside the defined time range. This corresponds to the prestate and poststates of the animation node. The value from the default node transformation is taken. The nearest key value is used without interpolation. The value of the nearest two keys is linearly extrapolated for the current time value. The animation is repeated. If the animation key goes from n to m and the current time is t, use the value at (t - n ) % (|m-n|). Defines the methods of mesh morphing supported. No morphing. Interpolation between morph targets. Normalized morphing between morph targets. Relative morphing between morph targets. Enumerates all supported light sources. Unknown light. Directional light source that has a well-defined direction but is infinitely far away, e.g. the sun. Point light source that has a well-defined position in space but is omni-directional, e.g. a light bulb. Spot light source emits light from a position in space, in a certain direction that is limited by an angle, like a cone. Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color. An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector. Defines alpha blending flags, how the final color value of a pixel is computed, based on the following equation: sourceColor * sourceBlend + destColor * destBlend Where the destColor is the previous color in the frame buffer and sourceColor is the material color before the transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property. Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha) Additive blending: sourcecolor * 1 + destColor * 1. Defines all shading models supported by the library. The list of shading modes has been taken from Blender. See Blender documentation for more information. No shading mode defined. Flat shading. Shading is done on a per-face basis and is diffuse only. Also known as 'faceted shading'. Simple Gouraud shading. Phong Shading. Phong-Blinn Shading. Toon-shading, also known as a 'comic' shader. OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness of the material into account. Minnaert shading model. Extension to standard Lambertian shading, taking the "darkness" of the material into account. CookTorrance shading model. Special shader for metallic surfaces. No shading at all. Constant light influence of 1.0. Fresnel shading. Defines some mixed flags for a particular texture. This corresponds to the AI_MAT_KEY_TEXFLAGS property. The texture's color values have to be inverted (componentwise 1-n). Explicit request to the application to process the alpha channel of the texture. This is mutually exclusive with . These flags are set if the library can say for sure that the alpha channel is used/is not used. If the model format does not define this, iti s left to the application to decide whether the texture alpha channel - if any - is evaluated or not. Explicit request to the application to ignore the alpha channel of the texture. This is mutually exclusive with . Defines how UV coordinates outside the [0..1] range are handled. Commonly referred to as the 'wrapping mode' A texture coordinate u|v is translated to u % 1| v % 1. Texture coordinates outside [0...1] are clamped to the nearest valid value. A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero and 1 - (u % 1) | 1 - (v % 1) otherwise. If the texture coordinates for a pixel are outside [0...1] the texture is not applied to that pixel. Defines how texture coordinates are generated Real-time applications typically require full UV coordinates. So the use of step is highly recommended. It generates proper UV channels for non-UV mapped objects, as long as an accurate description of how the mapping should look like is given. Coordinates are taken from the an existing UV channel. The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates are to be taken from since meshes can have more than one UV channel. Spherical mapping Cylinder mapping Cubic mapping Planar mapping Unknown mapping that is not recognied. Defines how the Nth texture of a specific type is combined with the result of all previous layers. Example (left: key, right: value): DiffColor0 - gray DiffTextureOp0 - TextureOperation.Multiply DiffTexture0 - tex1.png DiffTextureOp0 - TextureOperation.Add DiffTexture1 - tex2.png Written as an equation, the final diffuse term for a specific pixel would be: diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib; T = T1 * T2 T = T1 + T2 T = T1 - T2 T = T1 / T2 T = (T1 + T2) - (T1 * T2) T = T1 + (T2 - 0.5) Defines the purpose of a texture. No texture, but the value can be used as a 'texture semantic'. A diffuse texture that is combined with the result of the diffuse lighting equation. A specular texture that is combined with the result of the specular lighting equation. An ambient texture that is combined with the ambient lighting equation. An emissive texture that is added to the result of the lighting calculation. It is not influenced by incoming light, instead it represents the light that the object is naturally emitting. A height map texture. by convention, higher gray-scale values stand for higher elevations from some base height. A tangent-space normal map. There are several conventions for normal maps and Assimp does (intentionally) not distinguish here. A texture that defines the glossiness of the material. This is the exponent of the specular (phong) lighting equation. Usually there is a conversion function defined to map the linear color values in the texture to a suitable exponent. The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite the opposite. A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements. A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light. A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications. An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any further postprocessing. Defines the state of the imported scene data structure. Default state of the scene, it imported successfully. Specifies that the scene data structure that was imported is not complete. This flag bypasses some internal validations and allows the import of animation skeletons, material libaries, or camera animation paths using Assimp. Most applications won't support such data. This flag is set by the post process step if validation is successful. In a validated scene you can be sure that any cross references in the data structure (e.g. vertex indices) are valid. This flag is set by the post process step if validation is successful, but some issues have been found. This can for example mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful for applications which do not capture Assimp's log output. This flag is set by the post process step. It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the verbose format, all vertices are unique where no vertex is ever referenced by more than one face. Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles, in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the z-axis stores the elevation at a specific point. TER (Terragen) and HMP (3D Game Studio) are height map formats. Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from as that has internal meanings about postprocessing steps. Enumerates Assimp function result codes. Function returned successfully. There was an error. Assimp ran out of memory. Seek origins for Assimp's virtual file system API. Beginning of the file Current position of the file pointer. End of the file, offsets must be negative. Enumerates predefined log streaming destinations. Stream log to a file Stream log to the standard output Stream log to the standard error output. MSVC only: Stream the log to the debugger (this relies on OutputDebugString from the Win32 SDK). Defines material property types. Array of single-precision (32 bit) floats. Array of double-precision (64 bit) floats. Property is a string. Array of 32 bit integers. Byte buffer where the content is undefined. Enumerates how the native Assimp DLL was compiled Assimp compiled as a shared object (Windows: DLL); Assimp was compiled against STLport Assimp was compiled as a debug build Assimp was compiled with the boost work around. Assimp was compiled built to run single threaded. Defines how UV coordinates should be transformed. Scaling is evaluated. Rotation is evaluated. Translation is evaluated. Defines the desired file I/O mode is when opening a new file. Open the file for writing. Open the file for writing binary data to it. Open the file for writing text data to it. Open the file for reading. Open the file for reading binary data from it. Open the file for reading text data from it. Defines flags that indicate level of support for common features for a given importer. Indicates there is a textual encoding of the file format and it is supported. Indicates there is a binary encoding of the file format and it is supported. Indicates there is a compressed encoding of the file format and it is supported. Indicates that the importer reads only a very particular subset of the file format. This is common for formats that cannot easily be mapped to the Scene data structure. Indicates that the importer is experimental and used with caution - this is only reserved for importers still in development, and not typically yet in released production code. Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in turn can reference another and so on. This is used to allow exporters to write more than one output for a given scene, such as material files. Existence of such files depends on the format. The stream representation of an ExportDataBlob is as follows: String: Name of the Blob int: Length of Binary Data byte[]: Binary Data bool: If has next data blob String: Name of nested blob int: Length of nested blob binary data byte[]: Nested blob binary data bool: If nested blob has next data blob .... Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files that are nested will have names. Get the blob data. Gets the next data blob. Gets if the blob data is valid. Creates a new ExportDataBlob. Unmanaged structure. Creates a new ExportDataBlob. Name Data Writes the data blob to the specified stream. Output stream Reads a data blob from the specified stream. Input stream Data blob Describes a file format which Assimp can export to. Gets a short string ID to uniquely identify the export format. E.g. "collada" or "obj". Gets a short description of the file format to present to users. Gets the recommended file extension for the exported file in lower case. Constructs a new ExportFormatDescription. Unmanaged structure A single face in a mesh, referring to multiple vertices. This can be a triangle if the index count is equal to three, or a polygon if the count is greater than three. Since multiple primitive types can be contained in a single mesh, this approach allows you to better examine how the mesh is constructed. If you use the post process step flag during import, then each mesh will be homogenous where primitive type is concerned. Gets the number of indices defined in the face. Gets if the face has faces (should always be true). Gets or sets the indices that refer to positions of vertex data in the mesh's vertex arrays. Constructs a new instance of the class. Constructs a new instance of the class. Face indices Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Simple implementation of an IOSystem that searches for files on the disk. This implementation can be given a number of search directories that it will attempt to locate the file in first, before using the file path given by Assimp. That way, you can load models that have files distributed in a number of other directories besides the root model's. Constructs a new FileIOSystem that does not have any search directories. Constructs a new FileIOSystem that uses the specified search directories. Search directories to search for files in Sets the search directories the FileIOSystem will use when searching for files. Directory paths Gets the search directories the FileIOSystem is using. Directory paths Opens a stream to a file. Path to the file Desired file access mode The IO stream Finds the first file that matches the file name (name + extension) in the search paths. File name (+ extension) to search for Found file path True if the file was found, false otherwise Wraps a FileStream. Metadata and feature support information for a given importer. Gets the name of the importer (e.g. Blender3D Importer) Gets the original author (blank if unknown or assimp team). Gets the name of the current maintainer, if empty then the author maintains. Gets any implementation comments. Gets the features supported by the importer. Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot. Represents an object that can be marshaled to and from a native representation. Managed object type Native value type Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Custom marshaler for usage with the for performing marshaling to-and-from unmanaged memory for non-blittable types. A type must be attributed with to automatically have an instance of its marshaler be utilized. Gets the native data size in bytes. Marshals the managed object to the unmanaged chunk of memory. Managed object to marshal. Unmanaged chunk of memory to write to. Marshals the managed object from the unmanaged chunk of memory. Unmanaged chunk of memory to read from. Managed object marshaled. Defines a stream to some file input or output source. This object is responsible for reading/writing data that is used by Assimp. Gets whether or not this IOStream has been disposed. Gets the original path to file given by Assimp. Gets the original desired file access mode. Gets whether the stream is in fact valid - that is, the input/output has been properly located and can be read/written. Constructs a new IOStream. Path to file given by Assimp Desired file access mode Finalizes an instance of the class. Disposes of resources held by the IOStream. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Writes data to the stream. Data to write Number of bytes to write Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured. Reads data from the stream. Byte buffer to store the read data in Number of bytes to read Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured. Sets the current file position pointer. Offset in bytes from the origin Origin reference ReturnCode indicating success or failure. Gets the current file position pointer (in bytes). Current file position pointer (in bytes) Gets the total file size (in bytes). File size in bytes Flushes all data currently in the stream buffers. Closes the stream - flushing any data not yet read/written and disposes of resources. Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening files to read during import, and creating/writing to files during export. Gets whether or not this IOSystem has been disposed. Gets the number of currently opened streams. Constructs a new IOSystem. Finalizes an instance of the class. Opens a stream to a file. Path to the file Desired file access mode The IO stream Closes a stream that is owned by this IOSystem. Stream to close Closes all outstanding streams owned by this IOSystem. Disposes of all resources held by this object. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Describes a light source in the scene. Assimp supports multiple light sources including spot, point, and directional lights. All are defined by a single structure and distinguished by their parameters. Lights have corresponding nodes in the scenegraph. Some file formats such as 3DS and ASE export a "target point", e.g. the point a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode of a spotlight's main node called "spotName.Target". However, this is just additional information then, the transform tracks of the main node make the spot light already point in the right direction. Gets or sets the name of the light source. This corresponds to a node present in the scenegraph. Gets or sets the type of light source. This should never be undefined. Gets or sets the inner angle of a spot light's light cone. The spot light has maximum influence on objects inside this angle. The angle is given in radians, it is 2PI for point lights and defined for directional lights. Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside this angle. The angle is given in radians. It is 2PI for point lights and undefined for directional lights. The outer angle must be greater than or equal to the inner angle. Gets or sets the constant light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att0 variable in the equation and is undefined for directional lights. Gets or sets the linear light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d) This member corresponds to the att1 variable in the equation and is undefined for directional lights. Gets or sets the quadratic light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att2 variable in the equation and is undefined for directional lights. Gets or sets the position of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for directional lights. Gets or sets the direction of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the diffuse color of the light source. The diffuse light color is multiplied with the diffuse material color to obtain the final color that contributes to the diffuse shading term. Gets or sets the specular color of the light source. The specular light color is multiplied with the specular material color to obtain the final color that contributes to the specular shading term. Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient material color to obtain the final color that contributes to the ambient shading term. Gets or sets the Width (X) and Height (Y) of the area that represents an light. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Callback delegate for Assimp's LogStream. Log message Supplied user data Represents a log stream, which receives all log messages and streams them somewhere. Gets or sets, if verbose logging is enabled globally. Gets or sets the user data to be passed to the callback. Gets whether the logstream has been disposed or not. Gets whether or not the logstream is currently attached to the library. Static constructor. Constructs a new LogStream. Constructs a new LogStream. User-supplied data Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. User-supplied data Finalizes an instance of the class. Detaches all active logstreams from the library. Gets all active logstreams that are currently attached to the library. Collection of active logstreams attached to the library. Attaches the logstream to the library. Detaches the logstream from the library. Logs a message. Message contents Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Override this method to log a message for a subclass of Logstream, if no callback was set. Message User data Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages. Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving messages until it is re-attached. Log stream that writes messages to the Console. Constructs a new console logstream. Constructs a new console logstream. User supplied data Log a message to the console. Message Userdata A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally all this information is stored as key-value pair properties. The class contains many convienence methods and properties for accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present, and if they aren't a default value will be returned. Gets the number of properties contained in the material. Checks if the material has a name property. Gets the material name value, if any. Default value is an empty string. Checks if the material has a two-sided property. Gets if the material should be rendered as two-sided. Default value is false. Checks if the material has a shading-mode property. Gets the shading mode. Default value is , meaning it is not defined. Checks if the material has a wireframe property. Gets if wireframe should be enabled. Default value is false. Checks if the material has a blend mode property. Gets the blending mode. Default value is . Checks if the material has an opacity property. Gets the opacity. Default value is 1.0f. Checks if the material has a bump scaling property. Gets the bump scaling. Default value is 0.0f; Checks if the material has a shininess property. Gets the shininess. Default value is 0.0f; Checks if the material has a shininess strength property. Gets the shininess strength. Default vaulue is 1.0f. Checks if the material has a reflectivty property. Gets the reflectivity. Default value is 0.0f; Checks if the material has a color diffuse property. Gets the color diffuse. Default value is white. Checks if the material has a color ambient property. Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f). Checks if the material has a color specular property. Gets the color specular. Default value is black. Checks if the material has a color emissive property. Gets the color emissive. Default value is black. Checks if the material has a color transparent property. Gets the color transparent. Default value is black. Checks if the material has a color reflective property. Gets the color reflective. Default value is black. Gets if the material has a diffuse texture in the first texture index. Gets or sets diffuse texture properties in the first texture index. Gets if the material has a specular texture in the first texture index. Gets or sets specular texture properties in the first texture index. Gets if the material has a ambient texture in the first texture index. Gets or sets ambient texture properties in the first texture index. Gets if the material has a emissive texture in the first texture index. Gets or sets emissive texture properties in the first texture index. Gets if the material has a height texture in the first texture index. Gets or sets height texture properties in the first texture index. Gets if the material has a normal texture in the first texture index. Gets or sets normal texture properties in the first texture index. Gets if the material has an opacity texture in the first texture index. Gets or sets opacity texture properties in the first texture index. Gets if the material has a displacement texture in the first texture index. Gets or sets displacement texture properties in the first texture index. Gets if the material has a light map texture in the first texture index. Gets or sets light map texture properties in the first texture index. Gets if the material has a reflection texture in the first texture index. Gets or sets reflection texture properties in the first texture index. Constructs a new instance of the class. Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". This is the name that is used as the material dictionary key. Key basename, this must not be null or empty Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The fully qualified name Gets the non-texture properties contained in this Material. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename The material property, if it exists Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The material property, if it exists Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property The material property, if it exists Checks if the material has the specified non-texture property. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename True if the property exists, false otherwise. Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. True if the property exists, false otherwise. Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property True if the property exists, false otherwise. Adds a property to this material. Material property True if the property was successfully added, false otherwise (e.g. null or key already present). Removes a non-texture property from the material. Property name True if the property was removed, false otherwise Removes a property from the material. Name of the property Property texture type Property texture index True if the property was removed, false otherwise Removes a property from the material. Fully qualified name of the property ({basename},{texType},{texIndex}) True if the property was removed, false otherwise Removes all properties from the material; Gets -all- properties contained in the Material. All properties in the material property map. Gets all the number of textures that are of the specified texture type. Texture type Texture count Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True if the texture properties were added or modified Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True to only set the texture's file path, false otherwise True if the texture properties were added or modified Removes a texture from the material - this bulk removes a property for each field. If the texture has no file path, nothing is removed Texture to remove True if the texture was removed, false otherwise. Gets a texture that corresponds to the type/index. Texture type Texture index Texture description True if the texture was found in the material Gets all textures that correspond to the type. Texture type The array of textures Gets all textures in the material. The array of textures Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A key-value pairing that represents some material property. Gets or sets the property key name. E.g. $tex.file. This corresponds to the "AiMatKeys" base name constants. Gets or sets the type of property. Gets the raw byte data count. Checks if the property has data. Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods. Gets or sets the texture type semantic, for non-texture properties this is always . Gets or sets the texture index, for non-texture properties this is always zero. Gets the property's fully qualified name. Format: "{base name},{texture type semantic},{texture index}". E.g. "$clr.diffuse,0,0". This is the key that is used to index the property in the material property map. Constructs a new instance of the class. Constructs a new instance of the class. Constructs a buffer property. Base name of the property Property value Constructs a new instance of the class. Constructs a float property. Base name of the property Property value Constructs a new instance of the class. Constructs an integer property. Base name of the property Property value Constructs a new instance of the class. Constructs a boolean property. Name of the property Property value Constructs a new instance of the class. Creates a string property. Base name of the property Property value Constructs a new instance of the class. Creates a texture property. Base name of the property Property value Texture type Texture index Constructs a new instance of the class. Creates a float array property. Base name of the property Property values Constructs a new instance of the class. Creates a int array property. Base name of the property Property values Constructs a new instance of the class. Creates a Color3D property. Base name of the property Property value Constructs a new instance of the class. Creates a Color4D property. Base name of the property Property value Gets the property raw data as a float. Float Sets the property raw data with a float. Float. True if successful, false otherwise Gets the property raw data as a double. Double Sets the property raw data with a double. Double. True if successful, false otherwise. Gets the property raw data as an integer. Integer Sets the property raw data as an integer. Integer True if successful, false otherwise Gets the property raw data as a string. String Sets the property raw data as string. String True if successful, false otherwise Gets the property raw data as a float array. Number of elements to get Float array Gets the property raw data as a float array. Float array Sets the property raw data as a float array. Values to set True if successful, otherwise false Gets the property raw data as a double array. Double array Sets the property raw data as a double array. Values to set True if successful, otherwise false Gets the property raw data as an integer array. Number of elements to get Integer array Gets the property raw data as an integer array. Integer array Sets the property raw data as an integer array. Values to set True if successful, otherwise false Gets the property raw data as a boolean. Boolean Sets the property raw data as a boolean. Boolean value True if successful, false otherwise Gets the property raw data as a Color3D. Color3D Sets the property raw data as a Color3D. Color3D True if successful, false otherwise Gets the property raw data as a Color4D. Color4D Sets the property raw data as a Color4D. Color4D True if successful, false otherwise Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a 3x3 matrix. Assimp docs say their matrices are always row-major, and it looks like they're only describing the memory layout. Matrices are treated as column vectors however (X base in the first column, Y base the second, and Z base the third) Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix3x3. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Constructs a new Matrix3x3. A 4x4 matrix to construct from, only taking the rotation/scaling part. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 4x4 matrix to a 3x3 matrix. 4x4 matrix 3x3 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). Memory layout is row major. Right handed conventions are used by default. Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 1, column 4 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 2, column 4 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Value at row 3, column 4 of the matrix Value at row 4, column 1 of the matrix Value at row 4, column 2 of the matrix Value at row 4, column 3 of the matrix Value at row 4, column 4 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix4x4. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 1, column 4 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 2, column 4 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Element at row 3, column 4 Element at row 4, column 1 Element at row 4, column 2 Element at row 4, column 3 Element at row 4, column 4 Constructs a new Matrix4x4. Rotation matrix to copy values from. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Decomposes a transformation matrix into its original scale, rotation, and translation components. The scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And the translation is the output position for the x, y, z axes. Vector to hold the scaling component Quaternion to hold the rotation component Vector to hold the translation component Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton quaternion. The translation receives the output position for the x, y, z axes. Quaternion to hold the rotation component Vector to hold the translation component Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a translation matrix. Translation vector The translation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 3x3 matrix to a 4x4 matrix. 3x3 matrix 4x4 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Delegate for performing unmanaged memory cleanup. Location in unmanaged memory of the value to cleanup True if the unmanaged memory should be freed, false otherwise Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions. Marshals an array of managed values to a c-style unmanaged array (void*). Managed type Native type Array of managed values Pointer to unmanaged memory Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to an unmanaged array of pointers (void**). Managed type Native type Array of managed values True if the pointer is an array of pointers, false otherwise. Pointer to unmanaged memory Marshals an array of managed values from a c-style unmanaged array (void*). Managed type Native type Pointer to unmanaged memory Number of elements to marshal Marshaled managed values Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from an unmanaged array of pointers (void**). Managed type Native type Pointer to unmanaged memory Number of elements to marshal True if the pointer is an array of pointers, false otherwise. Marshaled managed values Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Managed array of structs Pointer to unmanaged memory Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Pointer to unmanaged memory Number of elements to read Managed array Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup True if the pointer is an array of pointers, false otherwise. Marshals a managed value to unmanaged memory. Managed type Unmanaged type Managed value to marshal Pointer to unmanaged memory Marshals a managed value from unmanaged memory. Managed type Unmanaged type Pointer to unmanaged memory The marshaled managed value Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise use the write methods for blittable types. Struct type Struct to marshal Pointer to unmanaged chunk of memory which must be allocated prior to this call Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Size of the struct in bytes. Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Array of structs Total size, in bytes, of the array's contents. Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime cannot move the object around in memory, which may degrade performance. Object to pin. Pointer to pinned object's memory location. Unpins an object in memory, allowing it to once again freely be moved around by the runtime. Object to unpin. Convienence method to dispose all items in the collection IDisposable type Collection of disposables Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value. Underlying value type. Enum type. Value to cast. Enum value. Allocates unmanaged memory. This memory should only be freed by this helper. Size to allocate Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper. Size to allocate Value the memory will be cleared to, by default zero. Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Frees unmanaged memory that was allocated by this helper. Pointer to unmanaged memory to free. Checks if the memory is aligned to the specified alignment. Pointer to the memory Alignment value, by defauly 16-byte True if is aligned, false otherwise. Swaps the value between two references. Type of data to swap. First reference Second reference Computes a hash code using the FNV modified algorithmm. Byte data to hash. Hash code for the data. Reads a stream until the end is reached into a byte array. Based on Jon Skeet's implementation. It is up to the caller to dispose of the stream. Stream to read all bytes from Initial buffer length, default is 32K The byte array containing all the bytes from the stream Compares two arrays of bytes for equivalence. First array of data. Second array of data. True if both arrays contain the same data, false otherwise. Clears the memory to the specified value. Pointer to the memory. Value the memory will be cleared to. Number of bytes, starting from the memory pointer, to clear. Computes the size of the struct type. Struct type Size of the struct in bytes. Casts the by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the readonly by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the pointer into a by-ref value of the specified type. Struct type. Memory location. By-ref value. Casts one by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Casts one readonly by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Computes the size of the struct array. Struct type Array of structs Total size, in bytes, of the array's contents. Adds an offset to the pointer. Pointer Offset Pointer plus the offset Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer. Destination memory location Source memory location Number of bytes to copy Returns the number of elements in the enumerable. Type of element in collection. Enumerable collection The number of elements in the enumerable collection. Converts typed element array to a byte array. Struct type Element array Byte array copy or null if the source array was not valid. Converts a byte array to a typed element array. Struct type Byte array Typed element array or null if the source array was not valid. Copies bytes from a byte array to an element array. Struct type Source byte array Starting index in destination array Destination element array Starting index in destination array Number of elements to copy Copies bytes from an element array to a byte array. Struct type Source element array Starting index in source array Destination byte array Starting index in destination array Number of elements to copy Reads data from the memory location into the array. Struct type Pointer to memory location Array to store the copied data Zero-based element index to start writing data to in the element array. Number of elements to copy Reads a single element from the memory location. Struct type Pointer to memory location The read value Reads a single element from the memory location. Struct type Pointer to memory location The read value. Writes data from the array to the memory location. Struct type Pointer to memory location Array containing data to write Zero-based element index to start reading data from in the element array. Number of elements to copy Writes a single element to the memory location. Struct type Pointer to memory location The value to write A mesh represents geometry with a single material. Gets or sets the mesh name. This tends to be used when formats name nodes and meshes independently, vertex animations refer to meshes by their names, or importers split meshes up, each mesh will reference the same (dummy) name. Gets or sets the primitive type. This may contain more than one type unless if option is not set. Gets or sets the index of the material associated with this mesh. Gets the number of vertices in this mesh. This is the count that all per-vertex lists should be the size of. Gets if the mesh has a vertex array. This should always return true provided no special scene flags are set. Gets the vertex position list. Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count. Gets the vertex normal list. Gets if the mesh has tangents and bitangents. It is not possible for one to be without the other. If it does exist, the count should be the same as the vertex count. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of faces contained in the mesh. Gets if the mesh contains faces. If no special scene flags are set, this should always return true. Gets the mesh's faces. Each face will contain indices to the vertices. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds to the texture coordinate channel index. Gets the number of bones that influence this mesh. Gets if this mesh has bones. Gets the bones that influence this mesh. Gets the number of mesh animation attachments that influence this mesh. Gets if this mesh has mesh animation attachments. Gets the mesh animation attachments that influence this mesh. Gets or sets the morph method used when animation attachments are used. Constructs a new instance of the class. Constructs a new instance of the class. Name of the mesh. Constructs a new instance of the class. Primitive types contained in the mesh. Constructs a new instance of the class. Name of the mesh Primitive types contained in the mesh. Checks if the mesh has vertex colors for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if vertex colors are present in the channel. Checks if the mesh has texture coordinates for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if texture coordinates are present in the channel. Convienence method for setting this meshe's face list from an index buffer. Index buffer Indices per face True if the operation succeeded, false otherwise (e.g. not enough data) Convienence method for accumulating all face indices into a single index array. int index array Convienence method for accumulating all face indices into a single index array as unsigned integers (the default from Assimp, if you need them). uint index array Convienence method for accumulating all face indices into a single index array. short index array Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A mesh attachment store per-vertex animations for a particular frame. You may think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual relationship between the time line and mesh attachments is established by the mesh animation channel, which references singular mesh attachments by their ID and binds them to a time offset. Gets the number of vertices in this mesh. This is a replacement for the host mesh's vertex count. Likewise, a mesh attachment cannot add or remove per-vertex attributes, therefore the existance of vertex data will match the existance of data in the mesh. Checks whether the attachment mesh overrides the vertex positions of its host mesh. Gets the vertex position list. Checks whether the attachment mesh overrides the vertex normals of its host mesh. Gets the vertex normal list. Checks whether the attachment mesh overrides the vertex tangents and bitangents of its host mesh. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets or sets the weight of the mesh animation. Constructs a new instance of the class. Checks if the mesh attachment overrides a particular set of vertex colors on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximumb number of vertex color channels. Channel index True if vertex colors are present in the channel. Checks if the mesh attachment overrides a particular set of texture coordinates on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximum number of texture coordinate channels. Channel index True if texture coordinates are present in the channel. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes vertex-based animations for a single mesh or a group of meshes. Meshes carry the animation data for each frame. The purpose of this object is to define keyframes, linking each mesh attachment to a particular point in a time. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of meshkeys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds an anim mesh (referenced by an index) to a specific point in time. The time of this key. Index of the anim mesh that corresponds to this keyframe. Constructs a new MeshKey. The time of this key. Index of the anim mesh that corresponds to this keyframe. Tests equality between two keys. The first key The second key True if the key's indices are the same, false otherwise Tests inequality between two keys. The first key The second key True if the key's indices are not equal, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes morph-based keyframe animations for a single mesh or a group of meshes. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of mesh morph keys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh morph keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Reads the unmanaged data from the native value. Input native value Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds a morph animation mesh to a specific point in time. Gets or sets the time of this keyframe. Gets the values at the time of this keyframe. Number of values must equal number of weights. Gets the weights at the time of this keyframe. Number of weights must equal number of values. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a container for holding metadata, representing as key-value pairs. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an entry in a metadata container. Gets the type of metadata. Gets the metadata data stored in this entry. Constructs a new instance of the struct. Type of the data. The data. Tests equality between two entries. First entry Second entry True if the entries are equal, false otherwise Tests inequality between two entries. First entry Second entry True if the entries are not equal, false otherwise Gets the data as the specified type. If it cannot be casted to the type, then null is returned. Type to cast the data to. Casted data or null. Determines whether the specified is equal to this instance. The to compare with this instance. True if the specified is equal to this instance; otherwise, false. Indicates whether the current object is equal to another object of the same type. An object to compare with this object. True if the current object is equal to the parameter; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Attribute for assocating a type with an instance. Gets the associated marshaler. Constructs a new instance of the class. Type that implements Thrown if the type is null. Thrown if the type does not implement . A node in the imported model hierarchy. Gets or sets the name of the node. Gets or sets the transformation of the node relative to its parent. Gets the node's parent, if it exists. Gets the number of children that is owned by this node. Gets if the node contains children. Gets the node's children. Gets the number of meshes referenced by this node. Gets if the node contains mesh references. Gets the indices of the meshes referenced by this node. Meshes can be shared between nodes, so there is a mesh collection owned by the scene that each node can reference. Gets the node's metadata container. Constructs a new instance of the class. Constructs a new instance of the class. Name of the node Constructs a new instance of the class. Name of the node Parent of the node Finds a node with the specific name, which may be this node or any children or children's children, and so on, if it exists. Node name The node or null if it does not exist Gets a value indicating whether this instance is native blittable. Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes the animation of a single node. The name specifies the bone/node which is affected by this animation chanenl. The keyframes are given in three separate seties of values, one for each position, rotation, and scaling. The transformation matrix is computed from these values and replaces the node's original transformation matrix at a specific time. This means all keys are absolute and not relative to the bone default pose. The order which the transformations are to be applied is scaling, rotation, and translation (SRT). Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no negative time values, but they are not forbidden. Gets or sets the name of the node affected by this animation. It must exist and it must be unique. Gets the number of position keys in the animation channel. Gets if this animation channel contains position keys. Gets the position keys of this animation channel. Positions are specified as a 3D vector. If there are position keys, there should also be -at least- one scaling and one rotation key. Gets the number of rotation keys in the animation channel. Gets if the animation channel contains rotation keys. Gets the rotation keys of this animation channel. Rotations are given as quaternions. If this exists, there should be -at least- one scaling and one position key. Gets the number of scaling keys in the animation channel. Gets if the animation channel contains scaling keys. Gets the scaling keys of this animation channel. Scalings are specified in a 3D vector. If there are scaling keys, there should also be -at least- one position and one rotation key. Gets or sets how the animation behaves before the first key is encountered. By default the original transformation matrix of the affected node is used. Gets or sets how the animation behaves after the last key was processed. By default the original transformation matrix of the affected node is taken. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage. Gets the number of elements contained in the . Gets or sets the element at the specified index. The child index Gets a value indicating whether the is read-only. true if the is read-only; otherwise, false. Constructs a new instance of the class. Parent node Adds an item to the . The object to add to the . Adds a range of items to the list. Item array Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if is found in the ; otherwise, false. Copies collection contents to the array The array to copy to. Index of the array to start copying. Determines the index of a specific item in the . The object to locate in the . The index of if found in the list; otherwise, -1. Inserts an item to the at the specified index. The zero-based index at which should be inserted. The object to insert into the . Removes the item at the specified index. The zero-based index of the item to remove. Removes the first occurrence of a specific object from the . The object to remove from the . true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . Copies elements in the collection to a new array. Array of copied elements Returns an enumerator that iterates through the collection. A that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. Represents a plane in three-dimensional euclidean space where A, B, C are components of the plane normal and D is the distance along the normal from the origin to the plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Constructs a new Plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Static class containing preset properties for post processing options. PostProcess configuration for (some) Direct3D conventions, left handed geometry, upper left origin for UV coordinates, and clockwise face order, suitable for CCW culling. PostProcess configuration for optimizing data for real-time. Does the following steps: , , , , , and PostProcess configuration for optimizing data for real-time rendering. Does the following steps: , , , , , , , , , and PostProcess configuration for heavily optimizing the data for real-time rendering. Includes all flags in as well as , , and A 4D vector that represents a rotation. Rotation component of the quaternion/ X component of the vector part of the quaternion. Y component of the vector part of the quaternion. Z component of the vector part of the quaternion. Constructs a new Quaternion. W component X component Y component Z component Constructs a new Quaternion from a rotation matrix. Rotation matrix to create the Quaternion from. Constructs a new Quaternion from three euler angles. Pitch Yaw Roll Constructs a new Quaternion from an axis-angle. Axis Angle about the axis Normalizes the quaternion. Transforms this quaternion into its conjugate. Returns a matrix representation of the quaternion. Rotation matrix representing the quaternion. Spherical interpolation between two quaternions. Start rotation when factor == 0 End rotation when factor == 1 Interpolation factor between 0 and 1, values beyond this range yield undefined values Interpolated quaternion. Rotates a point by this quaternion. Point to rotate Quaternion representing the rotation Rotated point. Multiplies two quaternions. First quaternion Second quaternion Resulting quaternion Tests equality between two quaternions. First quaternion Second quaternion True if the quaternions are equal, false otherwise. Tests inequality between two quaternions. First quaternion Second quaternion True if the quaternions are not equal, false otherwise. Tests equality between two quaternions. Quaternion to compare True if the quaternions are equal. Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a rotation for a given time. The time of this key. The rotation of this key. Constructs a new QuaternionKey. Time of the key. Quaternion rotation at the time frame. Tests equality between two keys. The first key The second key True if the key's rotations are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's rotations are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their rotations are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Defines a 3D ray with a point of origin and a direction. Origin of the ray in space. Direction of the ray. Constructs a new Ray. Origin of the ray. Direction of the ray. Represents a completely imported model or scene. Everything that was imported from the given file can be accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory and Assimp's read only copy is released. Gets or sets the state of the imported scene. By default no flags are set, but issues can arise if the flag is set to incomplete. Gets or sets the root node of the scene graph. There will always be at least the root node if the import was successful and no special flags have been set. Presence of further nodes depends on the format and content of the imported file. Gets if the scene contains meshes. Unless if no special scene flags are set this should always be true. Gets the number of meshes in the scene. Gets the meshes contained in the scene, if any. Gets if the scene contains any lights. Gets the number of lights in the scene. Gets the lights in the scene, if any. Gets if the scene contains any cameras. Gets the number of cameras in the scene. Gets the cameras in the scene, if any. Gets if the scene contains embedded textures. Gets the number of embedded textures in the scene. Gets the embedded textures in the scene, if any. Gets if the scene contains any animations. Gets the number of animations in the scene. Gets the animations in the scene, if any. Gets if the scene contains any materials. There should always be at least the default Assimp material if no materials were loaded. Gets the number of materials in the scene. There should always be at least the default Assimp material if no materials were loaded. Gets the materials in the scene. Constructs a new instance of the class. Clears the scene of all components. Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to , the memory is owned by AssimpNet and cannot be freed by the native library. Scene data Unmanaged scene or NULL if the scene is null. Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. The unmanaged scene data The managed scene, or null if the pointer is NULL Frees unmanaged memory allocated -ONLY- in . To free an unmanaged scene allocated by the unmanaged Assimp library, call the appropiate function. Pointer to unmanaged scene data. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a texel in ARGB8888 format. Blue component. Green component. Red component. Alpha component. Constructs a new Texel. Blue component. Green component. Red component. Alpha component. Tests equality between two texels. First texel Second texel True if the texels are equal, false otherwise. Tests inequality between two texels. First texel Second texel True if the texels are not equal, false otherwise. Implicitly converts a texel to a Color4D. Texel to convert Converted Color4D Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes all the values pertaining to a particular texture slot in a material. Gets the texture file path. Gets the texture type semantic. Gets the texture index in the material. Gets the texture mapping. Gets the UV channel index that corresponds to this texture from the mesh. Gets the blend factor. Gets the texture operation. Gets the texture wrap mode for the U coordinate. Gets the texture wrap mode for the V coordinate. Gets misc flags. Constructs a new TextureSlot. Texture filepath Texture type semantic Texture index in the material Texture mapping UV channel in mesh that corresponds to this texture Blend factor Texture operation Texture wrap mode for U coordinate Texture wrap mode for V coordinate Misc flags Defines configurable properties for importing models. All properties have default values. Setting config properties are done via the SetProperty* methods in AssimpMethods. Enables time measurements. If enabled the time needed for each part of the loading process is timed and logged. Type: bool. Default: false Sets Assimp's multithreading policy. This is ignored if Assimp is built without boost.thread support. Possible values are: -1 to let Assimp decide, 0 to disable multithreading, and nay number larger than 0 to force a specific number of threads. This is only a hint and may be ignored by Assimp. Type: integer. Default: -1 Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Type: Bool. Default: false. Specifies the maximum angle that may be between two vertex tangents that their tangents and bitangents are smoothed during the step to calculate the tangent basis. The angle specified is in degrees. The maximum value is 175 degrees. Type: float. Default: 45 degrees Specifies the maximum angle that may be between two face normals at the same vertex position that their normals will be smoothed together during the calculate smooth normals step. This is commonly called the "crease angle". The angle is specified in degrees. Maximum value is 175 degrees (all vertices smoothed). Type: float. Default: 175 degrees Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. Type: string. Default: "colormap.lmp" Configures the step to keep materials matching a name in a given list. This is a list of 1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Tabs or carriage returns are treated as whitespace. If a material matches one of these names, it will not be modified or removed by the post processing step nor will other materials be replaced by a reference to it. Default: string. Default: "" Configures the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option could be of used if you have a scene hierarchy that contains important additional information which you intend to parse. Type: bool. Default: false Configures the step to normalize all vertex components into the -1...1 range. That is, a bounding box for the whole scene is computed where the maximum component is taken and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension of the input data. Type: bool. Default: false Configures the step to remove degenerated primitives from the import immediately. The default behavior converts degenerated triangles to lines and degenerated lines to points. Type: bool. Default: false Configures the step to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if is set to true. Type: bool. Default: false Configures the step to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns and tabs are treated as white space. If a node matches one of these names, it will not be modified or removed by the postprocessing step. Type: string. Default: "" Sets the maximum number of triangles a mesh can contain. This is used by the step to determine whether a mesh must be split or not. Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES Sets the maximum number of vertices in a mesh. This is used by the step to determine whether a mesh must be split or not. Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES Sets the maximum number of bones that can affect a single vertex. This is used by the step. Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS Sets the size of the post-transform vertex cache to optimize vertices for. This is for the step. The size is given in vertices. Of course you can't know how the vertex format will exactly look like after the import returns, but you can still guess what your meshes will probably have. The default value *has* resulted in slight performance improvements for most Nvidia/AMD cards since 2002. Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE Input parameter to the step. It specifies the parts of the data structure to be removed. This is a bitwise combination of the flag. If no valid mesh is remaining after the step is executed, the import FAILS. Type: integer. Default: 0 Input parameter to the step. It specifies which primitive types are to be removed by the step. This is a bitwise combination of the flag. Specifying ALL types is illegal. Type: integer. Default: 0 Input parameter to the step. It specifies the floating point accuracy for animation values, specifically the epislon during the comparison. The step checks for animation tracks where all frame values are absolutely equal and removes them. Two floats are considered equal if the invariant abs(n0-n1) > epislon holds true for all vector/quaternion components. Type: float. Default: 0.0f (comparisons are exact) Input parameter to the step. It specifies which UV transformations are to be evaluated. This is bitwise combination of the flag. Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations) A hint to Assimp to favour speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-processing steps to use faster code paths if possible. A value not equal to zero stands for true. Type: integer. Default: 0 Maximum bone cone per mesh for the step. Meshes are split until the max number of bones is reached. Type: integer. Default: 60 Source UV channel for tangent space computation. The specified channel must exist or an error will be raised. Type: integer. Default: 0 Threshold used to determine if a bone is kept or removed during the step. Type: float. Default: 1.0f Require all bones to qualify for deboning before any are removed. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: Matrix4x4. Default: Identity Matrix Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Type: Float. Default: 1.0f. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). The libary reads only one frame of models with vertex animations. By default this is the first frame. The default value is 0. This option applies to all importers. However, it is also possible to override the global setting for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which you want to override the global setting. Type: integer. Default: 0 See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. Type: bool. Default: true Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. Type: bool. Default: true Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). Type: bool. Default: true Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Type: bool. Default: false Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. Type: bool. Default: true Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. Type: bool. Default: true Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. Type: string. Default: "default" Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. Type: string. Default: "" Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty Type: bool. Default: false (All layers are loaded) Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Type: bool. Default: false Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Type: integer. Default: taken from file Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Type: integer. Default: taken from file Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. Type: integer. Default: 100 The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. Type: string. Default: "Scene.Material" The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. Type: Bool. Default: false. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Type: Bool. Default: true. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Type: Bool. Default: true. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Type: Float. Default: 10.0f Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Type: Integer. Default: 32 Specifies whether the collada loader will ignore the up direction. Type: Bool. Default: false Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first. Type: bool. Default: true. Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer will read materials, otherwise this has no effect. Type: Bool. Default: false. Specifies whether the FBX importer will read materials. Type: Bool. Default: true. Specifies whether the FBX importer will read embedded textures. Type: Bool. Default: true. Specifies whether the FBX importer will search for embedded loaded textures, where no embedded texture data is provided. Type: Bool. Default: false. Specifies whether the FBX importer will read cameras. Type: Bool. Default: true. Specifies whether the FBX importer will read light sources. Type: Bool. Default: true. Specifies whether the FBX importer will read animations. Type: Bool. default: true. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Type: Bool. Default: false. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Type: Bool. Default: true. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Type: Bool. Default: true. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Type: Bool. Default: false. Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants are grouped according to their usage or where they're found in the Assimp include files. Default value for . Default value for . Default value for . Default value for . Default value for Defines the maximum number of indices per face (polygon). Defines the maximum number of bone weights. Defines the maximum number of vertices per mesh. Defines the maximum number of faces per mesh. Defines the maximum number of vertex color sets per mesh. Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh. Defines the default bone count limit. Defines the deboning threshold. Defines the maximum length of a string used in AiString. Defines the default color material. Defines the default textured material (if the meshes have UV coords). Static class containing material key constants. A fully qualified mat key name here means that it's a string that combines the mat key (base) name, its texture type semantic, and its texture index into a single string delimited by commas. For non-texture material properties, the texture type semantic and texture index are always zero. Material name (String) Material name (String) Two sided property (boolean) Two sided property (boolean) Shading mode property (ShadingMode) Shading mode property (ShadingMode) Enable wireframe property (boolean) Enable wireframe property (boolean) Blending function (BlendMode) Blending function (BlendMode) Opacity (float) Opacity (float) Bumpscaling (float) Bumpscaling (float) Shininess (float) Shininess (float) Reflectivity (float) Reflectivity (float) Shininess strength (float) Shininess strength (float) Refracti (float) Refracti (float) Diffuse color (Color4D) Diffuse color (Color4D) Ambient color (Color4D) Ambient color (Color4D) Specular color (Color4D) Specular color (Color4D) Emissive color (Color4D) Emissive color (Color4D) Transparent color (Color4D) Transparent color (Color4D) Reflective color (Color4D) Reflective color (Color4D) Background image (String) Background image (String) Texture base name UVWSRC base name Texture op base name Mapping base name Texture blend base name. Mapping mode U base name Mapping mode V base name Texture map axis base name UV transform base name Texture flags base name Helper function to get the fully qualified name of a texture property type name. Takes in a base name constant, a texture type, and a texture index and outputs the name in the format: "baseName,TextureType,texIndex" Base name Texture type Texture index Fully qualified texture name Helper function to get the base name from a fully qualified name of a material property type name. The format of such a string is: "baseName,TextureType,texIndex" Fully qualified material property name. Base name of the property type. Singleton that governs access to the unmanaged Assimp library functions. Default name of the unmanaged library. Based on runtime implementation the prefix ("lib" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically. Gets the AssimpLibrary instance. Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only, then it will not utilize multiple threads during import. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a scene from a stream. This uses the "aiImportFileFromMemory" function. The stream can be from anyplace, not just a memory stream. It is up to the caller to dispose of the stream. Stream containing the scene data Post processing flags A hint to Assimp to decide which importer to use to process the data Property store containing the config name-values, may be null. Pointer to the unmanaged data structure. Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled from the managed scene structure - only for scenes whose memory was allocated by the native library! Pointer to the unmanaged scene data structure. Applies a post-processing step on an already imported scene. Pointer to the unmanaged scene data structure. Post processing steps to run. Pointer to the unmanaged scene data structure. Gets all supported export formats. Array of supported export formats. Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file. Scene to export, it is the responsibility of the caller to free this when finished. Format id describing which format to export to. Pre processing flags to operate on the scene during the export. Exported binary blob, or null if there was an error. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified and the scene be exported. Valid scene to be copied Modifyable copy of the scene Attaches a log stream callback to catch Assimp messages. Pointer to an instance of AiLogStream. Enables verbose logging. True if verbose logging is to be enabled or not. Gets if verbose logging is enabled. True if verbose logging is enabled, false otherwise. Detaches a logstream callback. Pointer to an instance of AiLogStream. A return code signifying if the function was successful or not. Detaches all logstream callbacks currently attached to Assimp. Create an empty property store. Property stores are used to collect import settings. Pointer to property store Deletes a property store. Pointer to property store Sets an integer property value. Pointer to property store Property name Property value Sets a float property value. Pointer to property store Property name Property value Sets a string property value. Pointer to property store Property name Property value Sets a matrix property value. Pointer to property store Property name Property value Retrieves a color value from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The color if it exists. If not, the default Color4D value is returned. Retrieves an array of float values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The float array, if it exists Retrieves an array of integer values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The integer array, if it exists Retrieves a material property with the specific key from the material. Material to retrieve the property from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The material property, if found. Retrieves a string from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The string, if it exists. If not, an empty string is returned. Gets the number of textures contained in the material for a particular texture type. Material to retrieve the data from Texture Type semantic The number of textures for the type. Gets the texture filepath contained in the material. Material to retrieve the data from Texture type semantic Texture index The texture filepath, if it exists. If not an empty string is returned. Gets all values pertaining to a particular texture from a material. Material to retrieve the data from Texture type semantic Texture index Returns the texture slot struct containing all the information. Gets the last error logged in Assimp. The last error message logged. Checks whether the model format extension is supported by Assimp. Model format extension, e.g. ".3ds" True if the format is supported, false otherwise. Gets all the model format extensions that are currently supported by Assimp. Array of supported format extensions Gets a collection of importer descriptions that detail metadata and feature support for each importer. Collection of importer descriptions Gets the memory requirements of the scene. Pointer to the unmanaged scene data structure. The memory information about the scene. Creates a quaternion from the 3x3 rotation matrix. Quaternion struct to fill Rotation matrix Decomposes a 4x4 matrix into its scaling, rotation, and translation parts. 4x4 Matrix to decompose Scaling vector Quaternion containing the rotation Translation vector Transposes the 4x4 matrix. Matrix to transpose Transposes the 3x3 matrix. Matrix to transpose Transforms the vector by the 3x3 rotation matrix. Vector to transform Rotation matrix Transforms the vector by the 4x4 matrix. Vector to transform Matrix transformation Multiplies two 4x4 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Multiplies two 3x3 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Creates a 3x3 identity matrix. Matrix to hold the identity Creates a 4x4 identity matrix. Matrix to hold the identity Gets the Assimp legal info. String containing Assimp legal info. Gets the native Assimp DLL's minor version number. Assimp minor version number Gets the native Assimp DLL's major version number. Assimp major version number Gets the native Assimp DLL's revision version number. Assimp revision version number Gets the native Assimp DLL's current version number as "major.minor.revision" string. This is the version of Assimp that this wrapper is currently using. Unmanaged DLL version Gets the native Assimp DLL's current version number as a .NET version object. Unmanaged DLL version Get the compilation flags that describe how the native Assimp DLL was compiled. Compilation flags Defines all the unmanaged assimp C-function names. Defines all of the delegates that represent the unmanaged assimp functions. Enumerates supported platforms. Windows platform. Linux platform. Mac platform. An attribute that represents the name of an unmanaged function to import. Name of the unmanaged function. Constructs a new . Name of the function. Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load unmanaged libraries. Occurs when the unmanaged library is loaded. Occurs when the unmanaged library is freed. Queries if the unmanaged library has been loaded or not. Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional names can be set in the (e.g. to load versioned DLLs) Gets the path to the unmanaged library DLL that is currently loaded. Gets the resolver used to find the unmanaged library DLL when loading. Gets or sets whether an is thrown if the unmanaged DLL fails to load for whatever reason. By default this is true. Queries if the OS is 64-bit, if false then it is 32-bit. Constructs a new . Default name (NOT path) of the unmanaged library. Delegate types to instantiate and load. Gets an enum representing the current OS that is application is executing on. Platform enumeration. Loads the unmanaged library using the . True if the library was found and successfully loaded. Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness. Path to the 32-bit DLL Path to the 64-bit DLL True if the library was found and successfully loaded. Loads the unmanaged library using the supplied path. Path to the unmanaged DLL. True if the library was found and successfully loaded. Frees the unmanaged library that is currently loaded. True if the library was sucessfully freed. Gets a delegate based on the unmanaged function name. Type of delegate. Name of unmanaged function that is exported by the library. The delegate, or null if not found. If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library from the default path. This function is thread safe. Called when the library is loaded. Called when the library is freed. Resolves unmanaged DLLs for . The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs), an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See for the search strategy. Gets the platform that the application is running on. Constructs a new instance of the class. Platform we're resolving binaries for. Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets an override 32-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 32-bit and 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution: Search user-specified probing paths. Search {AppBaseDirectory}/runtimes/{RID}/native/. Search {AppBaseDirectory}/. Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/. The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID is the Runtime Identifier based on the platform/architecture, see also Microsoft's RID Catalog. Name of the library to attempt to resolve. Full file path to the library, or the file name if not found (e.g. "libXYZ.so"). Represents an aiScene struct. unsigned int, flags about the state of the scene aiNode*, root node of the scenegraph. Number of meshes contained. aiMesh**, meshes in the scene. Number of materials contained. aiMaterial**, materials in the scene. Number of animations contained. aiAnimation**, animations in the scene. Number of embedded textures contained. aiTexture**, textures in the scene. Number of lights contained. aiLight**, lights in the scene. Number of cameras contained. aiCamera**, cameras in the scene. void*, Private data do not touch! Represents an aiNode struct. Name of the node. Node's transform relative to its parent. aiNode*, node's parent. Number of children the node owns. aiNode**, array of nodes this node owns. Number of meshes referenced by this node. unsigned int*, array of mesh indices. aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any. Represents an aiMetadataEntry struct. Type of metadata. Pointer to data. Represents an aiMetadata struct. Length of the Keys and Values arrays. aiString*, array of keys. May not be NULL. Each entry must exist. aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value. Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs. unsigned int, bitwise flag detailing types of primitives contained. Number of vertices in the mesh, denotes length of -all- per-vertex arrays. Number of faces in the mesh. aiVector3D*, array of positions. aiVector3D*, array of normals. aiVector3D*, array of tangents. aiVector3D*, array of bitangents. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example. Max_Value is defined as . aiFace*, array of faces. Number of bones in the mesh. aiBone**, array of bones. Material index referencing the material in the scene. Optional name of the mesh. Number of attachment meshes. NOT CURRENTLY IN USE. aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE. unsigned int, method of morphing when anim meshes are specified. Represents an aiTexture struct. Width of the texture. Height of the texture. sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that maps to one byte. 8 for string + 1 for terminator. aiTexel*, array of texel data. Sets the format hint. Format hint - must be 3 characters or less Gets the format hint. The format hint Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref. AiTexture The format hint Represents an aiFace struct. Number of indices in the face. unsigned int*, array of indices. Represents an aiBone struct. Name of the bone. Number of weights. VertexWeight*, array of vertex weights. Matrix that transforms the vertex from mesh to bone space in bind pose Represents an aiMaterialProperty struct. Name of the property (key). Textures: Specifies texture usage. None texture properties have this zero (or None). Textures: Specifies the index of the texture. For non-texture properties this is always zero. Size of the buffer data in bytes. This value may not be zero. Type of value contained in the buffer. char*, byte buffer to hold the property's value. Represents an aiMaterial struct. aiMaterialProperty**, array of material properties. Number of key-value properties. Storage allocated for key-value properties. Represents an aiNodeAnim struct. Name of the node affected by the animation. The node must exist and be unique. Number of position keys. VectorKey*, position keys of this animation channel. Positions are 3D vectors and are accompanied by at least one scaling and one rotation key. The number of rotation keys. QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions). If there are rotation keys there will be at least one scaling and one position key. Number of scaling keys. VectorKey*, scaling keys of this animation channel. Scalings are specified as a 3D vector, and if there are scaling keys, there will at least be one position and one rotation key. Defines how the animation behaves before the first key is encountered. Defines how the animation behaves after the last key was processed. Represents an aiMeshAnim struct. Name of the mesh to be animated. Empty string not allowed. Number of keys, there is at least one. aiMeshkey*, the key frames of the animation. There must exist at least one. Represents an aiMeshMorphKey struct. The time of this key. unsigned int*, values at the time of this key. double*, weights at the time of this key. unsigned int, the number of values/weights. Represents an aiMeshMorphAnim struct. aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). unsigned int, number of key frames. Must be at least one. aiMeshMorphKey*, key frames of the animation. Represents an aiAnimation struct. Name of the animation. Duration of the animation in ticks. Ticks per second, 0 if not specified in imported file. Number of bone animation channels, each channel affects a single node. aiNodeAnim**, node animation channels. Each channel affects a single node. Number of mesh animation channels. Each channel affects a single mesh and defines vertex-based animation. aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. Number of mesh morph animation channels. Each channel affects a single mesh and defines morphing animation. aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. Represents an aiLight struct. Name of the light. Type of light. Position of the light. Direction of the spot/directional light. Up direction of the light source in space. Undefined for point lights. Attenuation constant value. Attenuation linear value. Attenuation quadratic value. Diffuse color. Specular color. Ambient color. Spot light inner angle. Spot light outer angle. Width (X) and Height (Y) of the area that represents an light. Represents an aiCamera struct. Name of the camera. Position of the camera. Up vector of the camera. Viewing direction of the camera. Field Of View of the camera. Near clip plane distance. Far clip plane distance. The Aspect ratio. Represents an aiString struct. Byte length of the UTF-8 string. Actual string data. Constructs a new instance of the struct. The string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref. AiString AiString string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. AiString string data Convienence method for setting the AiString string (and length). String data to set True if the operation was successful, false otherwise. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Represents a log stream, which receives all log messages and streams them somewhere. Function pointer that gets called when a message is to be logged. char*, user defined opaque data. Represents the memory requirements for the different components of an imported scene. All sizes in in bytes. Size of the storage allocated for texture data, in bytes. Size of the storage allocated for material data, in bytes. Size of the storage allocated for mesh data, in bytes. Size of the storage allocated for node data, in bytes. Size of the storage allocated for animation data, in bytes. Size of the storage allocated for camera data, in bytes. Size of the storage allocated for light data, in bytes. Total storage allocated for the imported scene, in bytes. Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs. aiVector3D*, replacement position array. aiVector3D*, replacement normal array. aiVector3D*, replacement tangent array. aiVector3D*, replacement bitangent array. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int, number of vertices. float, weight of the AnimMesh. Describes a variety of information about an importer. char*, full name of the importer (e.g. Blender3D Importer) char*, original author (blank if unknown or assimp team) char*, current maintainer, left blank if the author maintains. char*, implementation comments. E.g. unimplemented features. unsigned int, features supported by the importer. unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. "xml dae"). Multiple importers may respond to the same file extension, assim Describes a file format which Assimp can export to. char*, a short string ID to uniquely identify the export format. e.g. "collada" or "obj" char*, a short description of the file format to present to users. char*, a recommended file extension of the exported file in lower case. Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly. size_t, size of the data in bytes. void*, the data. AiString, name of the blob. aiExportDataBlob*, pointer to the next blob in the chain. Contains callbacks to implement a custom file system to open and close files. Function pointer to open a new file. Function pointer used to close an existing file. Char*, user defined opaque data. Contains callbacks to read and write to a file opened by a custom file system. Function pointer to read from a file. Function pointer to write to a file. Function pointer to retrieve the current position of the file cursor. Function pointer to retrieve the size of the file. Function pointer to set the current position of the file cursor. Function pointer to flush the file contents. Char*, user defined opaque data. Callback delegate for Assimp's LogStream. Log message char* pointer to user data that is passed to the callback Callback delegate for a custom file system, to write to a file. Pointer to an AiFile instance Char* pointer to data to write (casted from a void*) Size of a single element in bytes to write Number of elements to write Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured. Callback delegate for a custom file system, to read from a file. Pointer to an AiFile instance. Char* pointer that will store the data read (casted from a void*) Size of a single element in bytes to read Number of elements to read Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured. Callback delegate for a custom file system, to tell offset/size information about the file. Pointer to an AiFile instance. Returns the current file cursor or the file size in bytes. May be -1 if an error has occured. Callback delegate for a custom file system, to flush the contents of the file to the disk. Pointer to an AiFile instance. Callback delegate for a custom file system, to set the current position of the file cursor. Pointer to An AiFile instance. Offset from the origin. Position used as a reference Returns success, if successful Callback delegate for a custom file system, to open a given file and create a new AiFile instance. Pointer to an AiFileIO instance. Path to the target file Read-write permissions to request Pointer to an AiFile instance. Callback delegate for a custom file system, to close a given file and free its memory. Pointer to an AiFileIO instance. Pointer to an AiFile instance that will be closed. Fixed length array for representing the color channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the texture coordinate channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Defines how an UV channel is transformed. Translation on the U and V axes. Default is 0|0 Scaling on the U and V axes. Default is 1|1. Rotation in counter-clockwise direction, specfied in radians. The rotation center is 0.5f|0.5f and the default value is zero. Represents a two-dimensional vector. X component. Y component Gets or sets the component value at the specified zero-based index in the order of XY (index 0 access X, 1 access Y. If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector2D. X component Y component Constructs a new Vector2D with both components set the same value. Value to set both X and Y to Sets the X and Y values. X component Y component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a three-dimensional vector. X component. Y component. Z component. Gets or sets the component value at the specified zero-based index in the order of XYZ (index 0 access X, 1 access Y, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector3D. X component Y component Z component Constructs a new Vector3D. Vector2D containing the X, Y values Z component Constructs a new Vector3D where each component is set to the same value. Value to set X, Y, and Z to Sets the X, Y, and Z values. X component Y component Z component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Calculates the cross product of two vectors. First vector Second vector Resulting vector Calculates the dot product of two vectors. First vector Second vector Resulting vector Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Transforms this vector by a 3x3 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Transforms this vector by a 4x4 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a 3D vector for a given time. The time of this key. The 3D vector value of this key. Constructs a new VectorKey. The time of this key. The 3D vector value of this key. Tests equality between two keys. The first key The second key True if the key's 3D vectors are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's 3D vectors are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their 3D vectors are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a single influence of a bone on a vertex. Index of the vertex which is influenced by the bone. Strength of the influence in range of (0...1). All influences from all bones at one vertex amounts to 1. Constructs a new VertexWeight. Index of the vertex. Weight of the influence. Returns a that represents this instance. A that represents this instance. Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or replaces the entire method body. Recommended types to use are generally blittable structs. Casts the by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the readonly by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the pointer to a by-ref value of the specified type. Type to cast to. Pointer. Ref to the value, as the new type. Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to receive the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to write the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Computes the size of the type (inlined). Type of data. Size of the type in bytes. Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Writes a single element to the memory location (inlined). Type of data. Pointer to memory location. Value to be written. Writes a single element to the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value to be written. Reads a single element from the memory location (inlined). Type of data. Pointer to memory location. Value read. Reads a single element from the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value read. Copies the number of bytes from one pointer to the other (inlined). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Copies the number of bytes from one pointer to the other (inlined, unaligned copy). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Clears the memory to a specified value (inlined). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. Clears the memory to a specified value (inlined, unaligned init). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. ================================================ FILE: ThirdParty/AssimpNet/4.1.0/lib/netstandard1.3/AssimpNet.xml ================================================ AssimpNet An animation consists of keyframe data for a number of nodes. For each node affected by the animation, a separate series of data is given. Gets or sets the name of the animation. If the modeling package the data was exported from only supports a single animation channel, this name is usually empty. Gets or sets the duration of the animation in number of ticks. Gets or sets the number of ticks per second. It may be zero if it is not specified in the imported file. Gets if the animation has node animation channels. Gets the number of node animation channels where each channel affects a single node. Gets the node animation channels. Gets if the animation has mesh animations. Gets the number of mesh animation channels. Gets the number of mesh morph animation channels. Gets the mesh animation channels. Gets the mesh morph animation channels. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion functionality is offered to bypass loading model data into managed memory. Gets if the context has been disposed. Gets or sets the uniform scale for the model. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets whether this context is using a user-defined IO system for file handling. Gets the property configurations set to this context. This is only used during import. Constructs a new instance of the class. Imports a model from the stream without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Post processing flags, if any Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the specified file without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Imports a model from the specified file. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file Post processing flags, if any The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Post processing steps used for the import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Post processing steps used for the import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system is used instead. Custom file system implementation Removes the currently set custom file system implementation from the importer. Gets the model formats that are supported for export by Assimp. Export formats supported Gets the model formats that are supported for import by Assimp. Import formats supported Gets descriptions for each importer that assimp has registered. Descriptions of supported importers. Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension, they are called in the order that they were registered. File extension to query importer support for. Importer description or null if it does not exist. Checks if the format extension (e.g. ".dae" or ".obj") is supported for import. Model format True if the format is supported, false otherwise Checks if the format extension (e.g. ".dae" or ".obj") is supported for export. Model format True if the format is supported, false otherwise Sets a configuration property to the context. This is only used during import. Config to set Removes a set configuration property by name. Name of the config property Removes all configuration properties from the context. Checks if the context has a config set by the specified name. Name of the config property True if the config is present, false otherwise Disposes of resources held by the context. These include IO systems still attached. Releases unmanaged and - optionally - managed resources True to release both managed and unmanaged resources; False to release only unmanaged resources. AssimpNet general exception. Initializes a new instance of the class. Initializes a new instance of the class. The error message. Initializes a new instance of the class. Name of the param. The error message. Initializes a new instance of the class. The error message The inner exception. Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame hierarchy and by which it can be addressed by animations. In addition it has a number of influences on vertices. Gets or sets the name of the bone. Gets the number of vertex influences the bone contains. Gets if the bone has vertex weights - this should always be true. Gets the vertex weights owned by the bone. Gets or sets the matrix that transforms from mesh space to bone space in bind pose. Constructs a new instance of the class. Constructs a new instance of the class. Name of the bone Bone's offset matrix Vertex weights Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes a right-handed camera in the scene. An important aspect is that the camera itself is also part of the scenegraph, meaning any values such as the direction vector are not *absolute*, they can be relative to the coordinate system defined by the node which corresponds to the camera. This allows for camera animations. Gets or sets the name of the camera. This corresponds to a node in the scenegraph with the same name. This node specifies the position of the camera in the scene hierarchy and can be animated. Gets or sets the position of the camera relative to the coordinate space defined by the corresponding node. THe default value is 0|0|0. Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the corresponding node. The 'right' vector of the camera is the cross product of the up and direction vectors. The default value is 0|1|0. Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node. The default value is 0|0|1. Gets or sets the half horizontal field of view angle, in radians. The FoV angle is the angle between the center line of the screen and the left or right border. The default value is 1/4PI. Gets or sets the distance of the near clipping plane from the camera. The value may not be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f; Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must be further than the near clippling plane. The default value is 1000.0f. The ratio between the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid floating-point inaccuracies which can lead to z-fighting. Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file. The default value is zero. Gets a right-handed view matrix. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a RGB color. Red component. Green component. Blue component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color3D. Red component Green component Blue component Constructs a Color3D where each component is set to the same value. Value to set R, G, B components Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a Red-Green-Blue-Alpha (RGBA) color. Color values range from 0 to 1. Red component. Green component. Blue component. Alpha component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color4D. Red component Green component Blue component Alpha component Constructs a Color4D. Alpha is set to 1.0. Red component Green component Blue component Constructs a Color4D where each component is set to the same value. Value to set R, G, B, A components Constructs a Color4D from a Color3D. Alpha is set to 1.0. RGB values Constructs a Color4D from a Color3D and alpha value. RGB values Alpha value Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Base property config. Gets the property name. Creates a new property config that has no active Assimp property store. Name of the property. Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Applies the property value to the given Assimp property store. Assimp property store Describes an integer configuration property. Gets the property value. Gets the default property value. Constructs a new IntengerPropertyConfig. Name of the property Property value constructs a new IntegerPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a float configuration property. Gets the property value. Gets the default property value. Constructs a new FloatPropertyConfig. Name of the property Property value Constructs a new FloatPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a configuration property. Gets the property value. Gets the default property value. Constructs a new MatrixPropertyConfig. Name of the property Property value Constructs a new MatrixPropertyConfig. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a boolean configuration property. Gets the property value. Gets the default property value. Constructs a new BooleanPropertyConfig. Name of the property Property value Constructs a new BooleanPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a string configuration property. Gets the property value. Gets the default property value. Constructs a new StringPropertyConfig. Name of the property Property value Constructs a new StringPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Convience method for constructing a whitespace delimited name list. Array of names White-space delimited list as a string Configuration to enable time measurements. If enabled, each part of the loading process is timed and logged. Default value is false. Gets the string name used by MeasureTimeConfig. Constructs a new MeasureTimeConfig. True if the loading process should be timed or not. Configuration to set Assimp's multithreading policy. Possible values are -1 to let Assimp decide, 0 to disable multithreading, or any number larger than zero to force a specific number of threads. This is only a hint and may be ignored by Assimp. Default value is -1. Gets the string name used by MultithreadingConfig. Constructs a new MultithreadingConfig. A value of -1 will let Assimp decide, a value of zero to disable multithreading, and a value greater than zero to force a specific number of threads. Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Default value is false. Gets the string name used by NoSkeletonMeshConfig. Constructs a new NoSkeletonMeshConfig. True if dummy skeleton mesh generation should be disabled, false otherwise. Configuration to set the maximum angle that may be between two vertex tangents/bitangents when they are smoothed during the step to calculate the tangent basis. The default value is 45 degrees. Gets the string name used by TangentSmoothingAngleConfig. Constructs a new TangentSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the maximum angle between two face normals at a vertex when they are smoothed during the step to calculate smooth normals. This is frequently called the "crease angle". The maximum and default value is 175 degrees. Gets the string name used by NormalSmoothingAngleConfig. Constructs a new NormalSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. The default value is "colormap.lmp". Gets the string name used by MDLColorMapConfig. Constructs a new MDLColorMapConfig. Colormap filename Configuration for the the step to determine what materials to keep. If a material matches one of these names it will not be modified or removed by the post processing step. Default is an empty string. Gets the string name used by MaterialExcludeListConfig. Constructs a new MaterialExcludeListConfig. Material names containing whitespace must be enclosed in single quotation marks. List of material names that will not be modified or replaced by the remove redundant materials post process step. Configuration for the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option can be useful if you have a scene hierarchy that contains important additional information which you intend to parse. The default value is false. Gets the string name used by KeepSceneHierarchyConfig. Constructs a new KeepHierarchyConfig. True to keep the hierarchy, false otherwise. Configuration for the step to normalize all vertex components into the -1...1 range. The default value is false. Gets the string name used by NormalizeVertexComponentsConfig. Constructs a new NormalizeVertexComponentsConfig. True if the post process step should normalize vertex components, false otherwise. Configuration for the step to remove degenerted primitives from the import immediately. The default value is false, where degenerated triangles are converted to lines, and degenerated lines to points. Gets the string name used by RemoveDegeneratePrimitivesConfig. Constructs a new RemoveDegeneratePrimitivesConfig. True if the post process step should remove degenerate primitives, false otherwise. Configuration for the step. If true, the area of the triangles are checked to see if they are greater than 1e-6. If so, the triangle is removed if is set to true. Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig. Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig. True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise. Configuration for the step to preserve nodes matching a name in the given list. Nodes that match the names in the list will not be modified or removed. Identifiers containing whitespaces must be enclosed in single quotation marks. The default value is an empty string. Gets the string name used by NodeExcludeListConfig. Constructs a new NodeExcludeListConfig. List of node names Configuration for the step that specifies the maximum number of triangles a mesh can contain. The default value is MeshTriangleLimitConfigDefaultValue. Gets the string name used by MeshTriangleLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshTriangleLimitConfig. Max number of triangles a mesh can contain. Configuration for the step that specifies the maximum number of vertices a mesh can contain. The default value is MeshVertexLimitConfigDefaultValue. Gets the string name used by MeshVertexLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshVertexLimitConfig. Max number of vertices a mesh can contain. Configuration for the step that specifies the maximum number of bone weights per vertex. The default value is VertexBoneWeightLimitConfigDefaultValue. gets the string name used by VertexBoneWeightLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new VertexBoneWeightLimitConfig. Max number of bone weights per vertex. Configuration for the step that specifies the size of the post-transform vertex cache. The size is given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue. Gets the string name used by VertexCacheConfig. Gets the defined default vertex cache size, this corresponds to the . Constructs a new VertexCacheSizeConfig. Size of the post-transform vertex cache, in number of vertices. Configuration for the step that specifies which parts of the data structure is to be removed. If no valid mesh remains after the step, the import fails. The default value i . Gets the string name used by RemoveComponentConfig. Constructs a new RemoveComponentConfig. Bit-wise combination of components to exclude. Configuration for the step that specifies which primitive types are to be removed by the step. Specifying all primitive types is illegal. The default value is zero specifying none. Gets the string name used by SortByPrimitiveTypeConfig. Constructs a new SortByPrimitiveTypeConfig. Bit-wise combination of primitive types to remove Configuration for the step that specifies the floating point accuracy for animation values, specifically the episilon during comparisons. The default value is 0.0f. Gets the string name used by AnimationAccuracyConfig. Constructs a new AnimationAccuracyConfig. Episilon for animation value comparisons. Configuration for the step that specifies which UV transformations are to be evaluated. The default value is for all combinations (scaling, rotation, translation). Gets the string name used by TransformUVConfig. Constructs a new TransformUVConfig. Bit-wise combination specifying which UV transforms that should be evaluated. Configuration that is a hint to Assimp to favor speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-process steps to use faster code paths if possible. The default value is false. Gets the string name used by FavorSpeedConfig. Constructs a new FavorSpeedConfig. True if Assimp should favor speed at the expense of quality, false otherwise. Configures the maximum bone count per mesh for the step. Meshes are split until the maximum number of bones is reached. Gets the string name used by MaxBoneCountConfig. Constructs a new MaxBoneCountConfig. The maximum bone count. Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised. Gets the string name used by TangentTextureChannelIndexConfig. Constructs a new TangentTextureChannelIndexConfig. The zero-based texture channel index. Configures the threshold that is used to determine what bones are removed. Gets the string name used by DeboneThresholdConfig. Constructs a new DeboneThresholdConfig. The debone threshold. Configuration that requires all bones to qualify for deboning before any are removed. Gets the string name used by DeboneAllOrNoneConfig. Constructs a new DeboneAllOrNoneConfig. True if all are required, false if none need to qualify. Configuration for that sets a user defined matrix as the scene root node transformation before transforming vertices. Default value is the identity matrix. Gets the string name used by RootTransformationConfig. Constructs a new RootTransformationConfig. Root transformation matrix to be set to the root scene node during the pretransform post process step. Applies the property value to the given Assimp property store. Assimp property store Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Gets the string name used by GlobalScaleConfig. Constructs a new GlobalScaleConfig. Value to scale the entire scene by. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the "global" keyframe that will be imported. There are other configs for specific importers that will override the global setting. Gets the string name used by GlobalKeyFrameImportConfig. Constructs a new GlobalKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD3 format. Gets the string name used by MD3KeyFrameImportConfig. Constructs a new MD3KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD2 format. Gets the string name used by MD2KeyFrameImportConfig. Constructs a new MD2KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MDL format. Gets the string name used by MDLKeyFrameImportConfig. Constructs a new MDLKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the SMD format. Gets the string name used by SMDKeyFrameImportConfig. Constructs a new SMDKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the Unreal format. Gets the string name used by UnrealKeyFrameImportConfig. Constructs a new UnrealKeyFrameImportConfig. Keyframe index Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. The default value is true. Gets the string name used by ACSeparateBackfaceCullConfig. Constructs a new ACSeparateBackfaceCullConfig. True if all surfaces that have the "backface cull" flag set should be collected in separate meshes, false otherwise. Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. The default value is true. Gets the string name used by ACEvaluateSubdivisionConfig. Constructs a new ACEvaluateSubdivisionConfig. True if the AC loader should evaluate subdivisions, false otherwise. Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). The default value is true. Gets the string name used by UnrealHandleFlagsConfig. Constructs a new UnrealHandleFlagsConfig. True if the unreal loader should separate faces with different surface flags, false otherwise. Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. The default value is false. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Gets the string name used by TerragenComputeTexCoordsConfig. Constructs a new TerragenComputeTexCoordsConfig. True if terran UV coordinates should be computed, false otherwise. Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true. Gets the string name used by ASEReconstructNormalsConfig. Constructs a new ASEReconstructNormalsConfig. True if normals should be re-computed, false otherwise. Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. The default value is true. Gets the string name used by MD3HandleMultiPartConfig. Constructs a new MD3HandleMultiPartConfig. True if the split files should be loaded and combined, false otherwise. Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. The default string value is "default". Gets the string name used by MD3SkinNameConfig. Constructs a new MD3SkinNameConfig. The skin name. Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. the default string value is an empty string. Gets the string name used by MD3ShaderSourceConfig. Constructs a new MD3ShaderSourceConfig. The shader file. Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty The default value is false (all layers are loaded). Gets the string name used by LWOImportOneLayerConfig. Constructs a new LWOImportOneLayerConfig. True if only one layer should be imported, false if all layers should be imported. Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default value is false. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Gets the string name used by MD5NoAnimationAutoLoadConfig. Constructs a new MD5NoAnimationAutoLoadConfig. True if animations should not be automatically loaded, false if they should be. Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Gets the string name used by LWSAnimationStartConfig. Constructs a new LWSAnimationStartConfig. Beginning of the time range Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Gets the string name used by LWSAnimationEndConfig. Constructs a new LWSAnimationEndConfig. Ending of the time range Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. The default value is 100 frames per second. Gets the string name used by IRRAnimationFrameRateConfig. Constructs a new IRRAnimationFramerateConfig. Number of frames per second to output. The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. The default value is "Scene.Material". Gets the string name used by OgreMaterialFileConfig. Constructs a new OgreMaterialFileConfig. Material file name to load. The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. The default value is false. Gets the string name used by OgreTextureTypeFromFilenameConfig. Constructs a new OgreTextureTypeFromFilenameConfig. True if the filename defines texture usage, false otherwise. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Gets the string name used by IFCSkipSpaceRepresentationsConfig. Constructs a new IFCSkipSpaceRepresentationsConfig. True if the IfcSpace elements are skipped, false if otherwise. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Gets the string name used by IFCUseCustomTriangulationConfig. Constructs a new IFCUseCustomTriangulationConfig. True if the loader should use its own triangulation routine for walls/floors, false otherwise. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Gets the string name used by IFCSmoothingAngleConfig. Constructs a new IFCSmoothingAngleConfig. Smoothing angle when tessellating curves. Needs to be in the range of [5, 120]. Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Gets the string name used by IFCCylindricalTessellationConfig. Constructs a new IFCCylindricalTessellationConfig. Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180]. Specifies whether the collada loader will ignore the up direction. Default is false. Gets the string name used by ColladaIgnoreUpDirectionConfig. Constructs a new ColladaIgnoreUpDirectionConfig. True if the loader should ignore the up direction, false otherwise. Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true. Gets the string name used by FBXImportAllGeometryLayersConfig. Constructs a new FBXImportAllGeometryLayersConfig. True if all geometry layers should be merged, false otherwise to take only the first layer. Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials, if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false. Gets the string name used by FBXImportAllMaterialsConfig. Constructs a new FBXImportAllMaterialsConfig. True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials). Specifies whether the FBX importer will import materials. Default is true. Gets the string name used by FBXImportMaterialsConfig. Constructs a new FBXImportMaterialsConfig. True if the FBX importer should import materials, false otherwise. Specifies whether the FBX importer will import embedded textures. Default is true. Gets the string name used by FBXImportEmbeddedTexturesConfig. Constructs a new FBXImportEmbeddedTexturesConfig. True if the FBX importer should import embedded textures, false otherwise. Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false. Gets the string name used by FBXImportSearchEmbeddedTexturesConfig. Constructs a new FBXImportSearchEmbeddedTexturesConfig. True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Specifies whether the FBX importer will import cameras. Default is true. Gets the string name used by FBXImportCamerasConfig. Constructs a new FBXImportCamerasConfig. True if the FBX importer should import cameras, false otherwise. Specifies whether the FBX importer will import lights. Default is true. Gets the string name used by FBXImportLightsConfig. Constructs a new FBXImportLightsConfig. True if the FBX importer should import lights, false otherwise. Specifies whether the FBX importer will import animations. Default is true. Gets the string name used by FBXImportAnimationsConfig. Constructs a new FBXImportAnimationsConfig. True if the FBX importer should import animations, false otherwise. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Default is false. Gets the string name used by FBXStrictModeConfig. Constructs a new FBXStrictModeConfig. True if FBX strict mode should be used, false otherwise. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Default value is true. Gets the string name used by FBXPreservePivotsConfig. Constructs a new FBXPreservePivotsConfig. True if pivots should be preserved, false otherwise. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Default value is true. Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig. Constructs a new FBXOptimizeEmptyAnimationCurvesConfig. True if empty animation curves should be dropped, false otherwise. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Gets the string name used by XFileUseDoublesConfig. Constructs a new XFileUseDoublesConfig. True if the x file uses 64-bit double values rather than 32-bit float values. Represents an embedded texture. Some file formats directly embed texture assets. Embedded textures may be uncompressed, where the data is given in an uncompressed format. Or it may be compressed in a format like png or jpg. In the latter case, the raw file bytes are given so the application must utilize an image decoder (e.g. DevIL) to get access to the actual color data. This object represents both types, so some properties may or may not be valid depending if it is compressed or not. Gets if the texture is compressed or not. Gets the width of the texture in pixels. Only valid for non-compressed textures. Gets the height of the texture in pixels. Only valid for non-compressed textures. Gets if the texture has non-compressed texel data. Only valid for non-compressed textures. Gets the size of the non-compressed texel data. Only valid for non-compressed textures. Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures. Gets if the embedded texture has compressed data. Only valid for compressed textures. Gets the size of the compressed data. Only valid for compressed textures. Gets the raw byte data representing the compressed texture. Only valid for compressed textures. Gets the format hint to determine the type of compressed data. This hint is a three-character lower-case hint like "dds", "jpg", "png". Constructs a new instance of the class. Should use only if reading from a native value. Constructs a new instance of the class. This creates a compressed embedded texture. The 3 character format hint. The compressed data. Constructs a new instance of the class. This creates an uncompressed embedded texture. Width of the texture Height of the texture Color data Thrown if the data size does not match width * height. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Enumerates metadata data types. Metadata is a boolean. Metadata is an integer. Metadata is an unsigned 64-bit integer. Metadata is a float. Metadata is a double. Metadata is a string. Metadata is a . Post processing flag options, specifying a number of steps that can be run on the data to either generate additional vertex data or optimize the imported data. No flags enabled. Calculates the tangents and binormals (bitangents) for the imported meshes. This does nothing if a mesh does not have normals. You might want this post processing step to be executed if you plan to use tangent space calculations such as normal mapping. There is a config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which allows you to specify a maximimum smoothing angle for the algorithm. However, usually you'll want to leave it at the default value. Identifies and joins identical vertex data sets within all imported meshes. After this step is run each mesh does contain only unique vertices anymore, so a vertex is possibly used by multiple faces. You usually want to use this post processing step. If your application deals with indexed geometry, this step is compulsory or you'll just waste rendering time. If this flag is not specified, no vertices are referenced by more than one face and no index buffer is required for rendering. Converts all imported data to a left handed coordinate space. By default the data is returned in a right-handed coordinate space, where +X points to the right, +Z towards the viewer, and +Y upwards. Triangulates all faces of all meshes. By default the imported mesh data might contain faces with more than three indices. For rendering you'll usually want all faces to be triangles. This post processing step splits up all higher faces to triangles. Line and point primitives are *not* modified. If you want 'triangles only' with no other kinds of primitives, try the following: Specify both and . Ignore all point and line meshes when you process Assimp's output Removes some parts of the data structure (animations, materials, light sources, cameras, textures, vertex components). The components to be removed are specified in a separate configuration option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove unrequired stuff from the pipeline as early as possible results in an increased performance and a better optimized output data structure. This step is also useful if you want to force Assimp to recompute normals or tangents. the corresponding steps don't recompute them if they're already there (loaded from the source asset). By using this step you can make sure they are NOT there. Generates normals for all faces of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. Face normals are shared between all points of a single face, so a single point can have multiple normals, which in other words, forces the library to duplicate vertices in some cases. This makes senseless then. Generates smooth normals for all vertices of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE allows you to specify an angle maximum for the normal smoothing algorithm. Normals exceeding this limit are not smoothed, resulting in a 'hard' seam between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual appearance. Splits large meshes into smaller submeshes. This is useful for realtime rendering where the number of triangles which can be maximally processed in a single draw call is usually limited by the video driver/hardware. The maximum vertex buffer is usually limited, too. Both requirements can be met with this step: you may specify both a triangle and a vertex limit for a single mesh. The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default values are 1,000,000. Warning: This can be a time consuming task. Removes the node graph and "bakes" (pre-transforms) all vertices with the local transformation matrices of their nodes. The output scene does still contain nodes, however, there is only a root node with children, each one referencing only one mesh. Each mesh referencing one material. For rendering, you can simply render all meshes in order, you don't need to pay attention to local transformations and the node hierarchy. Warning: Animations are removed during this step. Limits the number of bones simultaneously affecting a single vertex to a maximum value. If any vertex is affected by more than that number of bones, the least important vertex weights are removed and the remaining vertex weights are re-normalized so that the weights still sum up to 1. The default bone weight limit is 4 and uses the AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing step might be of interest for you. Validates the imported scene data structure. This makes sure that all indices are valid, all animations and bones are linked correctly, all material references are correct, etc. It is recommended to capture Assimp's log output if you use this flag, so you can easily find out what's actually wrong if a file fails the validation. The validator is quite rude and will find *all* inconsistencies in the data structure. There are two types of failures: Error: There's something wrong with the imported data. Further postprocessing is not possible and the data is not usable at all. The import fails. Warning: There are some minor issues (e.g. 1000000 animation keyframes with the same time), but further postprocessing and use of the data structure is still safe. Warning details are written to the log file. Re-orders triangles for better vertex cache locality. This step tries to improve the ACMR (average post-transform vertex cache miss ratio) for all meshes. The implementation runs in O(n) time and is roughly based on the 'tipsify' algorithm. If you intend to render huge models in hardware, this step might be of interest for you. The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune the cache optimization. Searches for redundant/unreferenced materials and removes them. This is especially useful in combination with the PreTransformVertices and OptimizeMeshes flags. Both join small meshes with equal characteristics, but they can't do their work if two meshes have different materials. Because several material settings are always lost during Assimp's import filders and because many exporters don't check for redundant materials, huge models often have materials which are defined several times with exactly the same settings. Several material settings not contributing to the final appearance of a surface are ignored in all comparisons ... the material name is one of them. So, if you're passing additional information through the content pipeline (probably using *magic* material names), don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST setting. This step tries to determine which meshes have normal vectors that are facing inwards. The algorithm is simple but effective: The bounding box of all vertices and their normals are compared against the volume of the bounding box of all vertices without their normals. This works well for most objects, problems might occur with planar surfaces. However, the step tries to filter such cases. The step inverts all in-facing normals. Generally, it is recommended to enable this step, although the result is not always correct. This step splits meshes with more than one primitive type in homogeneous submeshes. This step is executed after triangulation and after it returns, just one bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time rendering where point and line primitives are often ignored or rendered separately. You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need. This can be used to easily exclude lines and points, which are rarely used, from the import. This step searches all meshes for degenerated primitives and converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical. To have degenerated primitives removed, specify the flag try one of the following procedures: To support lines and points: Set the AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as soon as they are detected. They won't pass any further pipeline steps. If you don't support lines and points: Specify flag, which will move line and point primitives to separate meshes. Then set the AI_CONFIG_PP_SBP_REMOVE option to and to cause step to reject point and line meshes from the scene. Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several file formats which do not support lines or points where exporters bypass the format specification and write them as degenerated triangles instead. This step searches all meshes for invalid data, such as zeroed normal vectors or invalid UV coordinates and removes or fixes them. This is intended to get rid of some common exporter rrors. This is especially useful for normals. If they are invalid, and the step recognizes this, they will be removed and can later be recomputed, e.g. by the GenerateSmoothNormals flag. The step will also remove meshes that are infinitely small and reduce animation tracks consisting of hundreds of redundant keys to a single key. The AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check for duplicate animation tracks. This step converts non-UV mappings (such as spherical or cylindrical mapping) to proper texture coordinate channels. Most applications will support UV mapping only, so you will probably want to specify this step in every case. Note that Assimp is not always able to match the original mapping implementation of the 3D app which produced a model perfectly. It's always better to let the father app compute the UV channels, at least 3DS max, maya, blender, lightwave, modo, .... are able to achieve this. If this step is not requested, you'll need to process the MATKEY_MAPPING material property in order to display all assets properly. Applies per-texture UV transformations and bakes them to stand-alone vtexture coordinate channels. UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material key for more information. This step processes all textures with transformed input UV coordinates and generates new (pretransformed) UV channel transformations, so you will probably want to specify this step. UV transformations are usually implemented in realtime apps by transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous) transformation matrix. Searches for duplicated meshes and replaces them with a reference to the first mesh. This is time consuming, so don't use it if you have no time. Its main purpose is to work around the limitation with some file formats that don't support instanced meshes, so exporters duplicate meshes. Attempts to reduce the number of meshes (and draw calls). This is recommended to be used together with and is fully compatible with both and . Optimizes scene hierarchy. Nodes with no animations, bones, lights, or cameras assigned are collapsed and joined. Node names can be lost during this step, you can specify names of nodes that should'nt be touched or modified with AI_CONFIG_PP_OG_EXCLUDE_LIST. Use this flag with caution. Most simple files will be collapsed to a single node, complex hierarchies are usually completely lost. That's not the right choice for editor environments, but probably a very effective optimization if you just want to get the model data, convert it to your own format and render it as fast as possible. This flag is designed to be used with for best results. Scenes with thousands of extremely small meshes packed in deeply nested nodes exist for almost all file formats. Usage of this and usually fixes them all and makes them renderable. Flips all UV coordinates along the y-axis and adjusts material settings/bitangents accordingly. Flips face winding order from CCW (default) to CW. Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit. Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones removed if and only if all bones within the scene qualify for removal. This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to control this. Enumerates components of the scene or mesh data that can be excluded from the import using the post process step RemoveComponent. No components to be excluded. Removes normal vectors Removes tangents/binormals Removes all color sets. Removes all texture UV sets. Remove all boneweights from all meshes. Scenegraph nodes corresponding to the bones are NOT removed. Use OptimizeGraph step to remove them. Removes all node animations. Coressponding scenegraph nodes are NOT removed. Use OptimizeGraph step to remove them. Removes all embedded textures. Removes all light sources. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all cameras. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all meshes. Removes all materials. One default material will be generated. Enumerates geometric primitive types. Point primitive. This is just a single vertex in the virtual world. A face has one index for such a primitive. Line primitive. This is a line defined through a start and an end position. A face contains exactly two indices for such a primitive. Triangle primitive, consisting of three indices. A n-Gon that has more than three edges (thus is not a triangle). Defines an animation channel behaves outside the defined time range. This corresponds to the prestate and poststates of the animation node. The value from the default node transformation is taken. The nearest key value is used without interpolation. The value of the nearest two keys is linearly extrapolated for the current time value. The animation is repeated. If the animation key goes from n to m and the current time is t, use the value at (t - n ) % (|m-n|). Defines the methods of mesh morphing supported. No morphing. Interpolation between morph targets. Normalized morphing between morph targets. Relative morphing between morph targets. Enumerates all supported light sources. Unknown light. Directional light source that has a well-defined direction but is infinitely far away, e.g. the sun. Point light source that has a well-defined position in space but is omni-directional, e.g. a light bulb. Spot light source emits light from a position in space, in a certain direction that is limited by an angle, like a cone. Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color. An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector. Defines alpha blending flags, how the final color value of a pixel is computed, based on the following equation: sourceColor * sourceBlend + destColor * destBlend Where the destColor is the previous color in the frame buffer and sourceColor is the material color before the transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property. Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha) Additive blending: sourcecolor * 1 + destColor * 1. Defines all shading models supported by the library. The list of shading modes has been taken from Blender. See Blender documentation for more information. No shading mode defined. Flat shading. Shading is done on a per-face basis and is diffuse only. Also known as 'faceted shading'. Simple Gouraud shading. Phong Shading. Phong-Blinn Shading. Toon-shading, also known as a 'comic' shader. OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness of the material into account. Minnaert shading model. Extension to standard Lambertian shading, taking the "darkness" of the material into account. CookTorrance shading model. Special shader for metallic surfaces. No shading at all. Constant light influence of 1.0. Fresnel shading. Defines some mixed flags for a particular texture. This corresponds to the AI_MAT_KEY_TEXFLAGS property. The texture's color values have to be inverted (componentwise 1-n). Explicit request to the application to process the alpha channel of the texture. This is mutually exclusive with . These flags are set if the library can say for sure that the alpha channel is used/is not used. If the model format does not define this, iti s left to the application to decide whether the texture alpha channel - if any - is evaluated or not. Explicit request to the application to ignore the alpha channel of the texture. This is mutually exclusive with . Defines how UV coordinates outside the [0..1] range are handled. Commonly referred to as the 'wrapping mode' A texture coordinate u|v is translated to u % 1| v % 1. Texture coordinates outside [0...1] are clamped to the nearest valid value. A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero and 1 - (u % 1) | 1 - (v % 1) otherwise. If the texture coordinates for a pixel are outside [0...1] the texture is not applied to that pixel. Defines how texture coordinates are generated Real-time applications typically require full UV coordinates. So the use of step is highly recommended. It generates proper UV channels for non-UV mapped objects, as long as an accurate description of how the mapping should look like is given. Coordinates are taken from the an existing UV channel. The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates are to be taken from since meshes can have more than one UV channel. Spherical mapping Cylinder mapping Cubic mapping Planar mapping Unknown mapping that is not recognied. Defines how the Nth texture of a specific type is combined with the result of all previous layers. Example (left: key, right: value): DiffColor0 - gray DiffTextureOp0 - TextureOperation.Multiply DiffTexture0 - tex1.png DiffTextureOp0 - TextureOperation.Add DiffTexture1 - tex2.png Written as an equation, the final diffuse term for a specific pixel would be: diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib; T = T1 * T2 T = T1 + T2 T = T1 - T2 T = T1 / T2 T = (T1 + T2) - (T1 * T2) T = T1 + (T2 - 0.5) Defines the purpose of a texture. No texture, but the value can be used as a 'texture semantic'. A diffuse texture that is combined with the result of the diffuse lighting equation. A specular texture that is combined with the result of the specular lighting equation. An ambient texture that is combined with the ambient lighting equation. An emissive texture that is added to the result of the lighting calculation. It is not influenced by incoming light, instead it represents the light that the object is naturally emitting. A height map texture. by convention, higher gray-scale values stand for higher elevations from some base height. A tangent-space normal map. There are several conventions for normal maps and Assimp does (intentionally) not distinguish here. A texture that defines the glossiness of the material. This is the exponent of the specular (phong) lighting equation. Usually there is a conversion function defined to map the linear color values in the texture to a suitable exponent. The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite the opposite. A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements. A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light. A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications. An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any further postprocessing. Defines the state of the imported scene data structure. Default state of the scene, it imported successfully. Specifies that the scene data structure that was imported is not complete. This flag bypasses some internal validations and allows the import of animation skeletons, material libaries, or camera animation paths using Assimp. Most applications won't support such data. This flag is set by the post process step if validation is successful. In a validated scene you can be sure that any cross references in the data structure (e.g. vertex indices) are valid. This flag is set by the post process step if validation is successful, but some issues have been found. This can for example mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful for applications which do not capture Assimp's log output. This flag is set by the post process step. It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the verbose format, all vertices are unique where no vertex is ever referenced by more than one face. Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles, in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the z-axis stores the elevation at a specific point. TER (Terragen) and HMP (3D Game Studio) are height map formats. Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from as that has internal meanings about postprocessing steps. Enumerates Assimp function result codes. Function returned successfully. There was an error. Assimp ran out of memory. Seek origins for Assimp's virtual file system API. Beginning of the file Current position of the file pointer. End of the file, offsets must be negative. Enumerates predefined log streaming destinations. Stream log to a file Stream log to the standard output Stream log to the standard error output. MSVC only: Stream the log to the debugger (this relies on OutputDebugString from the Win32 SDK). Defines material property types. Array of single-precision (32 bit) floats. Array of double-precision (64 bit) floats. Property is a string. Array of 32 bit integers. Byte buffer where the content is undefined. Enumerates how the native Assimp DLL was compiled Assimp compiled as a shared object (Windows: DLL); Assimp was compiled against STLport Assimp was compiled as a debug build Assimp was compiled with the boost work around. Assimp was compiled built to run single threaded. Defines how UV coordinates should be transformed. Scaling is evaluated. Rotation is evaluated. Translation is evaluated. Defines the desired file I/O mode is when opening a new file. Open the file for writing. Open the file for writing binary data to it. Open the file for writing text data to it. Open the file for reading. Open the file for reading binary data from it. Open the file for reading text data from it. Defines flags that indicate level of support for common features for a given importer. Indicates there is a textual encoding of the file format and it is supported. Indicates there is a binary encoding of the file format and it is supported. Indicates there is a compressed encoding of the file format and it is supported. Indicates that the importer reads only a very particular subset of the file format. This is common for formats that cannot easily be mapped to the Scene data structure. Indicates that the importer is experimental and used with caution - this is only reserved for importers still in development, and not typically yet in released production code. Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in turn can reference another and so on. This is used to allow exporters to write more than one output for a given scene, such as material files. Existence of such files depends on the format. The stream representation of an ExportDataBlob is as follows: String: Name of the Blob int: Length of Binary Data byte[]: Binary Data bool: If has next data blob String: Name of nested blob int: Length of nested blob binary data byte[]: Nested blob binary data bool: If nested blob has next data blob .... Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files that are nested will have names. Get the blob data. Gets the next data blob. Gets if the blob data is valid. Creates a new ExportDataBlob. Unmanaged structure. Creates a new ExportDataBlob. Name Data Writes the data blob to the specified stream. Output stream Reads a data blob from the specified stream. Input stream Data blob Describes a file format which Assimp can export to. Gets a short string ID to uniquely identify the export format. E.g. "collada" or "obj". Gets a short description of the file format to present to users. Gets the recommended file extension for the exported file in lower case. Constructs a new ExportFormatDescription. Unmanaged structure A single face in a mesh, referring to multiple vertices. This can be a triangle if the index count is equal to three, or a polygon if the count is greater than three. Since multiple primitive types can be contained in a single mesh, this approach allows you to better examine how the mesh is constructed. If you use the post process step flag during import, then each mesh will be homogenous where primitive type is concerned. Gets the number of indices defined in the face. Gets if the face has faces (should always be true). Gets or sets the indices that refer to positions of vertex data in the mesh's vertex arrays. Constructs a new instance of the class. Constructs a new instance of the class. Face indices Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Simple implementation of an IOSystem that searches for files on the disk. This implementation can be given a number of search directories that it will attempt to locate the file in first, before using the file path given by Assimp. That way, you can load models that have files distributed in a number of other directories besides the root model's. Constructs a new FileIOSystem that does not have any search directories. Constructs a new FileIOSystem that uses the specified search directories. Search directories to search for files in Sets the search directories the FileIOSystem will use when searching for files. Directory paths Gets the search directories the FileIOSystem is using. Directory paths Opens a stream to a file. Path to the file Desired file access mode The IO stream Finds the first file that matches the file name (name + extension) in the search paths. File name (+ extension) to search for Found file path True if the file was found, false otherwise Wraps a FileStream. Metadata and feature support information for a given importer. Gets the name of the importer (e.g. Blender3D Importer) Gets the original author (blank if unknown or assimp team). Gets the name of the current maintainer, if empty then the author maintains. Gets any implementation comments. Gets the features supported by the importer. Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot. Represents an object that can be marshaled to and from a native representation. Managed object type Native value type Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Custom marshaler for usage with the for performing marshaling to-and-from unmanaged memory for non-blittable types. A type must be attributed with to automatically have an instance of its marshaler be utilized. Gets the native data size in bytes. Marshals the managed object to the unmanaged chunk of memory. Managed object to marshal. Unmanaged chunk of memory to write to. Marshals the managed object from the unmanaged chunk of memory. Unmanaged chunk of memory to read from. Managed object marshaled. Defines a stream to some file input or output source. This object is responsible for reading/writing data that is used by Assimp. Gets whether or not this IOStream has been disposed. Gets the original path to file given by Assimp. Gets the original desired file access mode. Gets whether the stream is in fact valid - that is, the input/output has been properly located and can be read/written. Constructs a new IOStream. Path to file given by Assimp Desired file access mode Finalizes an instance of the class. Disposes of resources held by the IOStream. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Writes data to the stream. Data to write Number of bytes to write Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured. Reads data from the stream. Byte buffer to store the read data in Number of bytes to read Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured. Sets the current file position pointer. Offset in bytes from the origin Origin reference ReturnCode indicating success or failure. Gets the current file position pointer (in bytes). Current file position pointer (in bytes) Gets the total file size (in bytes). File size in bytes Flushes all data currently in the stream buffers. Closes the stream - flushing any data not yet read/written and disposes of resources. Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening files to read during import, and creating/writing to files during export. Gets whether or not this IOSystem has been disposed. Gets the number of currently opened streams. Constructs a new IOSystem. Finalizes an instance of the class. Opens a stream to a file. Path to the file Desired file access mode The IO stream Closes a stream that is owned by this IOSystem. Stream to close Closes all outstanding streams owned by this IOSystem. Disposes of all resources held by this object. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Describes a light source in the scene. Assimp supports multiple light sources including spot, point, and directional lights. All are defined by a single structure and distinguished by their parameters. Lights have corresponding nodes in the scenegraph. Some file formats such as 3DS and ASE export a "target point", e.g. the point a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode of a spotlight's main node called "spotName.Target". However, this is just additional information then, the transform tracks of the main node make the spot light already point in the right direction. Gets or sets the name of the light source. This corresponds to a node present in the scenegraph. Gets or sets the type of light source. This should never be undefined. Gets or sets the inner angle of a spot light's light cone. The spot light has maximum influence on objects inside this angle. The angle is given in radians, it is 2PI for point lights and defined for directional lights. Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside this angle. The angle is given in radians. It is 2PI for point lights and undefined for directional lights. The outer angle must be greater than or equal to the inner angle. Gets or sets the constant light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att0 variable in the equation and is undefined for directional lights. Gets or sets the linear light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d) This member corresponds to the att1 variable in the equation and is undefined for directional lights. Gets or sets the quadratic light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att2 variable in the equation and is undefined for directional lights. Gets or sets the position of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for directional lights. Gets or sets the direction of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the diffuse color of the light source. The diffuse light color is multiplied with the diffuse material color to obtain the final color that contributes to the diffuse shading term. Gets or sets the specular color of the light source. The specular light color is multiplied with the specular material color to obtain the final color that contributes to the specular shading term. Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient material color to obtain the final color that contributes to the ambient shading term. Gets or sets the Width (X) and Height (Y) of the area that represents an light. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Callback delegate for Assimp's LogStream. Log message Supplied user data Represents a log stream, which receives all log messages and streams them somewhere. Gets or sets, if verbose logging is enabled globally. Gets or sets the user data to be passed to the callback. Gets whether the logstream has been disposed or not. Gets whether or not the logstream is currently attached to the library. Static constructor. Constructs a new LogStream. Constructs a new LogStream. User-supplied data Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. User-supplied data Finalizes an instance of the class. Detaches all active logstreams from the library. Gets all active logstreams that are currently attached to the library. Collection of active logstreams attached to the library. Attaches the logstream to the library. Detaches the logstream from the library. Logs a message. Message contents Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Override this method to log a message for a subclass of Logstream, if no callback was set. Message User data Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages. Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving messages until it is re-attached. Log stream that writes messages to the Console. Constructs a new console logstream. Constructs a new console logstream. User supplied data Log a message to the console. Message Userdata A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally all this information is stored as key-value pair properties. The class contains many convienence methods and properties for accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present, and if they aren't a default value will be returned. Gets the number of properties contained in the material. Checks if the material has a name property. Gets the material name value, if any. Default value is an empty string. Checks if the material has a two-sided property. Gets if the material should be rendered as two-sided. Default value is false. Checks if the material has a shading-mode property. Gets the shading mode. Default value is , meaning it is not defined. Checks if the material has a wireframe property. Gets if wireframe should be enabled. Default value is false. Checks if the material has a blend mode property. Gets the blending mode. Default value is . Checks if the material has an opacity property. Gets the opacity. Default value is 1.0f. Checks if the material has a bump scaling property. Gets the bump scaling. Default value is 0.0f; Checks if the material has a shininess property. Gets the shininess. Default value is 0.0f; Checks if the material has a shininess strength property. Gets the shininess strength. Default vaulue is 1.0f. Checks if the material has a reflectivty property. Gets the reflectivity. Default value is 0.0f; Checks if the material has a color diffuse property. Gets the color diffuse. Default value is white. Checks if the material has a color ambient property. Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f). Checks if the material has a color specular property. Gets the color specular. Default value is black. Checks if the material has a color emissive property. Gets the color emissive. Default value is black. Checks if the material has a color transparent property. Gets the color transparent. Default value is black. Checks if the material has a color reflective property. Gets the color reflective. Default value is black. Gets if the material has a diffuse texture in the first texture index. Gets or sets diffuse texture properties in the first texture index. Gets if the material has a specular texture in the first texture index. Gets or sets specular texture properties in the first texture index. Gets if the material has a ambient texture in the first texture index. Gets or sets ambient texture properties in the first texture index. Gets if the material has a emissive texture in the first texture index. Gets or sets emissive texture properties in the first texture index. Gets if the material has a height texture in the first texture index. Gets or sets height texture properties in the first texture index. Gets if the material has a normal texture in the first texture index. Gets or sets normal texture properties in the first texture index. Gets if the material has an opacity texture in the first texture index. Gets or sets opacity texture properties in the first texture index. Gets if the material has a displacement texture in the first texture index. Gets or sets displacement texture properties in the first texture index. Gets if the material has a light map texture in the first texture index. Gets or sets light map texture properties in the first texture index. Gets if the material has a reflection texture in the first texture index. Gets or sets reflection texture properties in the first texture index. Constructs a new instance of the class. Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". This is the name that is used as the material dictionary key. Key basename, this must not be null or empty Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The fully qualified name Gets the non-texture properties contained in this Material. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename The material property, if it exists Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The material property, if it exists Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property The material property, if it exists Checks if the material has the specified non-texture property. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename True if the property exists, false otherwise. Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. True if the property exists, false otherwise. Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property True if the property exists, false otherwise. Adds a property to this material. Material property True if the property was successfully added, false otherwise (e.g. null or key already present). Removes a non-texture property from the material. Property name True if the property was removed, false otherwise Removes a property from the material. Name of the property Property texture type Property texture index True if the property was removed, false otherwise Removes a property from the material. Fully qualified name of the property ({basename},{texType},{texIndex}) True if the property was removed, false otherwise Removes all properties from the material; Gets -all- properties contained in the Material. All properties in the material property map. Gets all the number of textures that are of the specified texture type. Texture type Texture count Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True if the texture properties were added or modified Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True to only set the texture's file path, false otherwise True if the texture properties were added or modified Removes a texture from the material - this bulk removes a property for each field. If the texture has no file path, nothing is removed Texture to remove True if the texture was removed, false otherwise. Gets a texture that corresponds to the type/index. Texture type Texture index Texture description True if the texture was found in the material Gets all textures that correspond to the type. Texture type The array of textures Gets all textures in the material. The array of textures Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A key-value pairing that represents some material property. Gets or sets the property key name. E.g. $tex.file. This corresponds to the "AiMatKeys" base name constants. Gets or sets the type of property. Gets the raw byte data count. Checks if the property has data. Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods. Gets or sets the texture type semantic, for non-texture properties this is always . Gets or sets the texture index, for non-texture properties this is always zero. Gets the property's fully qualified name. Format: "{base name},{texture type semantic},{texture index}". E.g. "$clr.diffuse,0,0". This is the key that is used to index the property in the material property map. Constructs a new instance of the class. Constructs a new instance of the class. Constructs a buffer property. Base name of the property Property value Constructs a new instance of the class. Constructs a float property. Base name of the property Property value Constructs a new instance of the class. Constructs an integer property. Base name of the property Property value Constructs a new instance of the class. Constructs a boolean property. Name of the property Property value Constructs a new instance of the class. Creates a string property. Base name of the property Property value Constructs a new instance of the class. Creates a texture property. Base name of the property Property value Texture type Texture index Constructs a new instance of the class. Creates a float array property. Base name of the property Property values Constructs a new instance of the class. Creates a int array property. Base name of the property Property values Constructs a new instance of the class. Creates a Color3D property. Base name of the property Property value Constructs a new instance of the class. Creates a Color4D property. Base name of the property Property value Gets the property raw data as a float. Float Sets the property raw data with a float. Float. True if successful, false otherwise Gets the property raw data as a double. Double Sets the property raw data with a double. Double. True if successful, false otherwise. Gets the property raw data as an integer. Integer Sets the property raw data as an integer. Integer True if successful, false otherwise Gets the property raw data as a string. String Sets the property raw data as string. String True if successful, false otherwise Gets the property raw data as a float array. Number of elements to get Float array Gets the property raw data as a float array. Float array Sets the property raw data as a float array. Values to set True if successful, otherwise false Gets the property raw data as a double array. Double array Sets the property raw data as a double array. Values to set True if successful, otherwise false Gets the property raw data as an integer array. Number of elements to get Integer array Gets the property raw data as an integer array. Integer array Sets the property raw data as an integer array. Values to set True if successful, otherwise false Gets the property raw data as a boolean. Boolean Sets the property raw data as a boolean. Boolean value True if successful, false otherwise Gets the property raw data as a Color3D. Color3D Sets the property raw data as a Color3D. Color3D True if successful, false otherwise Gets the property raw data as a Color4D. Color4D Sets the property raw data as a Color4D. Color4D True if successful, false otherwise Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a 3x3 matrix. Assimp docs say their matrices are always row-major, and it looks like they're only describing the memory layout. Matrices are treated as column vectors however (X base in the first column, Y base the second, and Z base the third) Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix3x3. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Constructs a new Matrix3x3. A 4x4 matrix to construct from, only taking the rotation/scaling part. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 4x4 matrix to a 3x3 matrix. 4x4 matrix 3x3 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). Memory layout is row major. Right handed conventions are used by default. Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 1, column 4 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 2, column 4 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Value at row 3, column 4 of the matrix Value at row 4, column 1 of the matrix Value at row 4, column 2 of the matrix Value at row 4, column 3 of the matrix Value at row 4, column 4 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix4x4. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 1, column 4 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 2, column 4 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Element at row 3, column 4 Element at row 4, column 1 Element at row 4, column 2 Element at row 4, column 3 Element at row 4, column 4 Constructs a new Matrix4x4. Rotation matrix to copy values from. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Decomposes a transformation matrix into its original scale, rotation, and translation components. The scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And the translation is the output position for the x, y, z axes. Vector to hold the scaling component Quaternion to hold the rotation component Vector to hold the translation component Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton quaternion. The translation receives the output position for the x, y, z axes. Quaternion to hold the rotation component Vector to hold the translation component Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a translation matrix. Translation vector The translation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 3x3 matrix to a 4x4 matrix. 3x3 matrix 4x4 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Delegate for performing unmanaged memory cleanup. Location in unmanaged memory of the value to cleanup True if the unmanaged memory should be freed, false otherwise Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions. Marshals an array of managed values to a c-style unmanaged array (void*). Managed type Native type Array of managed values Pointer to unmanaged memory Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to an unmanaged array of pointers (void**). Managed type Native type Array of managed values True if the pointer is an array of pointers, false otherwise. Pointer to unmanaged memory Marshals an array of managed values from a c-style unmanaged array (void*). Managed type Native type Pointer to unmanaged memory Number of elements to marshal Marshaled managed values Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from an unmanaged array of pointers (void**). Managed type Native type Pointer to unmanaged memory Number of elements to marshal True if the pointer is an array of pointers, false otherwise. Marshaled managed values Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Managed array of structs Pointer to unmanaged memory Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Pointer to unmanaged memory Number of elements to read Managed array Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup True if the pointer is an array of pointers, false otherwise. Marshals a managed value to unmanaged memory. Managed type Unmanaged type Managed value to marshal Pointer to unmanaged memory Marshals a managed value from unmanaged memory. Managed type Unmanaged type Pointer to unmanaged memory The marshaled managed value Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise use the write methods for blittable types. Struct type Struct to marshal Pointer to unmanaged chunk of memory which must be allocated prior to this call Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Size of the struct in bytes. Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Array of structs Total size, in bytes, of the array's contents. Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime cannot move the object around in memory, which may degrade performance. Object to pin. Pointer to pinned object's memory location. Unpins an object in memory, allowing it to once again freely be moved around by the runtime. Object to unpin. Convienence method to dispose all items in the collection IDisposable type Collection of disposables Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value. Underlying value type. Enum type. Value to cast. Enum value. Allocates unmanaged memory. This memory should only be freed by this helper. Size to allocate Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper. Size to allocate Value the memory will be cleared to, by default zero. Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Frees unmanaged memory that was allocated by this helper. Pointer to unmanaged memory to free. Checks if the memory is aligned to the specified alignment. Pointer to the memory Alignment value, by defauly 16-byte True if is aligned, false otherwise. Swaps the value between two references. Type of data to swap. First reference Second reference Computes a hash code using the FNV modified algorithmm. Byte data to hash. Hash code for the data. Reads a stream until the end is reached into a byte array. Based on Jon Skeet's implementation. It is up to the caller to dispose of the stream. Stream to read all bytes from Initial buffer length, default is 32K The byte array containing all the bytes from the stream Compares two arrays of bytes for equivalence. First array of data. Second array of data. True if both arrays contain the same data, false otherwise. Clears the memory to the specified value. Pointer to the memory. Value the memory will be cleared to. Number of bytes, starting from the memory pointer, to clear. Computes the size of the struct type. Struct type Size of the struct in bytes. Casts the by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the readonly by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the pointer into a by-ref value of the specified type. Struct type. Memory location. By-ref value. Casts one by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Casts one readonly by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Computes the size of the struct array. Struct type Array of structs Total size, in bytes, of the array's contents. Adds an offset to the pointer. Pointer Offset Pointer plus the offset Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer. Destination memory location Source memory location Number of bytes to copy Returns the number of elements in the enumerable. Type of element in collection. Enumerable collection The number of elements in the enumerable collection. Converts typed element array to a byte array. Struct type Element array Byte array copy or null if the source array was not valid. Converts a byte array to a typed element array. Struct type Byte array Typed element array or null if the source array was not valid. Copies bytes from a byte array to an element array. Struct type Source byte array Starting index in destination array Destination element array Starting index in destination array Number of elements to copy Copies bytes from an element array to a byte array. Struct type Source element array Starting index in source array Destination byte array Starting index in destination array Number of elements to copy Reads data from the memory location into the array. Struct type Pointer to memory location Array to store the copied data Zero-based element index to start writing data to in the element array. Number of elements to copy Reads a single element from the memory location. Struct type Pointer to memory location The read value Reads a single element from the memory location. Struct type Pointer to memory location The read value. Writes data from the array to the memory location. Struct type Pointer to memory location Array containing data to write Zero-based element index to start reading data from in the element array. Number of elements to copy Writes a single element to the memory location. Struct type Pointer to memory location The value to write A mesh represents geometry with a single material. Gets or sets the mesh name. This tends to be used when formats name nodes and meshes independently, vertex animations refer to meshes by their names, or importers split meshes up, each mesh will reference the same (dummy) name. Gets or sets the primitive type. This may contain more than one type unless if option is not set. Gets or sets the index of the material associated with this mesh. Gets the number of vertices in this mesh. This is the count that all per-vertex lists should be the size of. Gets if the mesh has a vertex array. This should always return true provided no special scene flags are set. Gets the vertex position list. Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count. Gets the vertex normal list. Gets if the mesh has tangents and bitangents. It is not possible for one to be without the other. If it does exist, the count should be the same as the vertex count. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of faces contained in the mesh. Gets if the mesh contains faces. If no special scene flags are set, this should always return true. Gets the mesh's faces. Each face will contain indices to the vertices. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds to the texture coordinate channel index. Gets the number of bones that influence this mesh. Gets if this mesh has bones. Gets the bones that influence this mesh. Gets the number of mesh animation attachments that influence this mesh. Gets if this mesh has mesh animation attachments. Gets the mesh animation attachments that influence this mesh. Gets or sets the morph method used when animation attachments are used. Constructs a new instance of the class. Constructs a new instance of the class. Name of the mesh. Constructs a new instance of the class. Primitive types contained in the mesh. Constructs a new instance of the class. Name of the mesh Primitive types contained in the mesh. Checks if the mesh has vertex colors for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if vertex colors are present in the channel. Checks if the mesh has texture coordinates for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if texture coordinates are present in the channel. Convienence method for setting this meshe's face list from an index buffer. Index buffer Indices per face True if the operation succeeded, false otherwise (e.g. not enough data) Convienence method for accumulating all face indices into a single index array. int index array Convienence method for accumulating all face indices into a single index array as unsigned integers (the default from Assimp, if you need them). uint index array Convienence method for accumulating all face indices into a single index array. short index array Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A mesh attachment store per-vertex animations for a particular frame. You may think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual relationship between the time line and mesh attachments is established by the mesh animation channel, which references singular mesh attachments by their ID and binds them to a time offset. Gets the number of vertices in this mesh. This is a replacement for the host mesh's vertex count. Likewise, a mesh attachment cannot add or remove per-vertex attributes, therefore the existance of vertex data will match the existance of data in the mesh. Checks whether the attachment mesh overrides the vertex positions of its host mesh. Gets the vertex position list. Checks whether the attachment mesh overrides the vertex normals of its host mesh. Gets the vertex normal list. Checks whether the attachment mesh overrides the vertex tangents and bitangents of its host mesh. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets or sets the weight of the mesh animation. Constructs a new instance of the class. Checks if the mesh attachment overrides a particular set of vertex colors on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximumb number of vertex color channels. Channel index True if vertex colors are present in the channel. Checks if the mesh attachment overrides a particular set of texture coordinates on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximum number of texture coordinate channels. Channel index True if texture coordinates are present in the channel. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes vertex-based animations for a single mesh or a group of meshes. Meshes carry the animation data for each frame. The purpose of this object is to define keyframes, linking each mesh attachment to a particular point in a time. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of meshkeys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds an anim mesh (referenced by an index) to a specific point in time. The time of this key. Index of the anim mesh that corresponds to this keyframe. Constructs a new MeshKey. The time of this key. Index of the anim mesh that corresponds to this keyframe. Tests equality between two keys. The first key The second key True if the key's indices are the same, false otherwise Tests inequality between two keys. The first key The second key True if the key's indices are not equal, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes morph-based keyframe animations for a single mesh or a group of meshes. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of mesh morph keys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh morph keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Reads the unmanaged data from the native value. Input native value Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds a morph animation mesh to a specific point in time. Gets or sets the time of this keyframe. Gets the values at the time of this keyframe. Number of values must equal number of weights. Gets the weights at the time of this keyframe. Number of weights must equal number of values. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a container for holding metadata, representing as key-value pairs. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an entry in a metadata container. Gets the type of metadata. Gets the metadata data stored in this entry. Constructs a new instance of the struct. Type of the data. The data. Tests equality between two entries. First entry Second entry True if the entries are equal, false otherwise Tests inequality between two entries. First entry Second entry True if the entries are not equal, false otherwise Gets the data as the specified type. If it cannot be casted to the type, then null is returned. Type to cast the data to. Casted data or null. Determines whether the specified is equal to this instance. The to compare with this instance. True if the specified is equal to this instance; otherwise, false. Indicates whether the current object is equal to another object of the same type. An object to compare with this object. True if the current object is equal to the parameter; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Attribute for assocating a type with an instance. Gets the associated marshaler. Constructs a new instance of the class. Type that implements Thrown if the type is null. Thrown if the type does not implement . A node in the imported model hierarchy. Gets or sets the name of the node. Gets or sets the transformation of the node relative to its parent. Gets the node's parent, if it exists. Gets the number of children that is owned by this node. Gets if the node contains children. Gets the node's children. Gets the number of meshes referenced by this node. Gets if the node contains mesh references. Gets the indices of the meshes referenced by this node. Meshes can be shared between nodes, so there is a mesh collection owned by the scene that each node can reference. Gets the node's metadata container. Constructs a new instance of the class. Constructs a new instance of the class. Name of the node Constructs a new instance of the class. Name of the node Parent of the node Finds a node with the specific name, which may be this node or any children or children's children, and so on, if it exists. Node name The node or null if it does not exist Gets a value indicating whether this instance is native blittable. Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes the animation of a single node. The name specifies the bone/node which is affected by this animation chanenl. The keyframes are given in three separate seties of values, one for each position, rotation, and scaling. The transformation matrix is computed from these values and replaces the node's original transformation matrix at a specific time. This means all keys are absolute and not relative to the bone default pose. The order which the transformations are to be applied is scaling, rotation, and translation (SRT). Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no negative time values, but they are not forbidden. Gets or sets the name of the node affected by this animation. It must exist and it must be unique. Gets the number of position keys in the animation channel. Gets if this animation channel contains position keys. Gets the position keys of this animation channel. Positions are specified as a 3D vector. If there are position keys, there should also be -at least- one scaling and one rotation key. Gets the number of rotation keys in the animation channel. Gets if the animation channel contains rotation keys. Gets the rotation keys of this animation channel. Rotations are given as quaternions. If this exists, there should be -at least- one scaling and one position key. Gets the number of scaling keys in the animation channel. Gets if the animation channel contains scaling keys. Gets the scaling keys of this animation channel. Scalings are specified in a 3D vector. If there are scaling keys, there should also be -at least- one position and one rotation key. Gets or sets how the animation behaves before the first key is encountered. By default the original transformation matrix of the affected node is used. Gets or sets how the animation behaves after the last key was processed. By default the original transformation matrix of the affected node is taken. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage. Gets the number of elements contained in the . Gets or sets the element at the specified index. The child index Gets a value indicating whether the is read-only. true if the is read-only; otherwise, false. Constructs a new instance of the class. Parent node Adds an item to the . The object to add to the . Adds a range of items to the list. Item array Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if is found in the ; otherwise, false. Copies collection contents to the array The array to copy to. Index of the array to start copying. Determines the index of a specific item in the . The object to locate in the . The index of if found in the list; otherwise, -1. Inserts an item to the at the specified index. The zero-based index at which should be inserted. The object to insert into the . Removes the item at the specified index. The zero-based index of the item to remove. Removes the first occurrence of a specific object from the . The object to remove from the . true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . Copies elements in the collection to a new array. Array of copied elements Returns an enumerator that iterates through the collection. A that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. Represents a plane in three-dimensional euclidean space where A, B, C are components of the plane normal and D is the distance along the normal from the origin to the plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Constructs a new Plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Static class containing preset properties for post processing options. PostProcess configuration for (some) Direct3D conventions, left handed geometry, upper left origin for UV coordinates, and clockwise face order, suitable for CCW culling. PostProcess configuration for optimizing data for real-time. Does the following steps: , , , , , and PostProcess configuration for optimizing data for real-time rendering. Does the following steps: , , , , , , , , , and PostProcess configuration for heavily optimizing the data for real-time rendering. Includes all flags in as well as , , and A 4D vector that represents a rotation. Rotation component of the quaternion/ X component of the vector part of the quaternion. Y component of the vector part of the quaternion. Z component of the vector part of the quaternion. Constructs a new Quaternion. W component X component Y component Z component Constructs a new Quaternion from a rotation matrix. Rotation matrix to create the Quaternion from. Constructs a new Quaternion from three euler angles. Pitch Yaw Roll Constructs a new Quaternion from an axis-angle. Axis Angle about the axis Normalizes the quaternion. Transforms this quaternion into its conjugate. Returns a matrix representation of the quaternion. Rotation matrix representing the quaternion. Spherical interpolation between two quaternions. Start rotation when factor == 0 End rotation when factor == 1 Interpolation factor between 0 and 1, values beyond this range yield undefined values Interpolated quaternion. Rotates a point by this quaternion. Point to rotate Quaternion representing the rotation Rotated point. Multiplies two quaternions. First quaternion Second quaternion Resulting quaternion Tests equality between two quaternions. First quaternion Second quaternion True if the quaternions are equal, false otherwise. Tests inequality between two quaternions. First quaternion Second quaternion True if the quaternions are not equal, false otherwise. Tests equality between two quaternions. Quaternion to compare True if the quaternions are equal. Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a rotation for a given time. The time of this key. The rotation of this key. Constructs a new QuaternionKey. Time of the key. Quaternion rotation at the time frame. Tests equality between two keys. The first key The second key True if the key's rotations are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's rotations are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their rotations are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Defines a 3D ray with a point of origin and a direction. Origin of the ray in space. Direction of the ray. Constructs a new Ray. Origin of the ray. Direction of the ray. Represents a completely imported model or scene. Everything that was imported from the given file can be accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory and Assimp's read only copy is released. Gets or sets the state of the imported scene. By default no flags are set, but issues can arise if the flag is set to incomplete. Gets or sets the root node of the scene graph. There will always be at least the root node if the import was successful and no special flags have been set. Presence of further nodes depends on the format and content of the imported file. Gets if the scene contains meshes. Unless if no special scene flags are set this should always be true. Gets the number of meshes in the scene. Gets the meshes contained in the scene, if any. Gets if the scene contains any lights. Gets the number of lights in the scene. Gets the lights in the scene, if any. Gets if the scene contains any cameras. Gets the number of cameras in the scene. Gets the cameras in the scene, if any. Gets if the scene contains embedded textures. Gets the number of embedded textures in the scene. Gets the embedded textures in the scene, if any. Gets if the scene contains any animations. Gets the number of animations in the scene. Gets the animations in the scene, if any. Gets if the scene contains any materials. There should always be at least the default Assimp material if no materials were loaded. Gets the number of materials in the scene. There should always be at least the default Assimp material if no materials were loaded. Gets the materials in the scene. Constructs a new instance of the class. Clears the scene of all components. Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to , the memory is owned by AssimpNet and cannot be freed by the native library. Scene data Unmanaged scene or NULL if the scene is null. Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. The unmanaged scene data The managed scene, or null if the pointer is NULL Frees unmanaged memory allocated -ONLY- in . To free an unmanaged scene allocated by the unmanaged Assimp library, call the appropiate function. Pointer to unmanaged scene data. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a texel in ARGB8888 format. Blue component. Green component. Red component. Alpha component. Constructs a new Texel. Blue component. Green component. Red component. Alpha component. Tests equality between two texels. First texel Second texel True if the texels are equal, false otherwise. Tests inequality between two texels. First texel Second texel True if the texels are not equal, false otherwise. Implicitly converts a texel to a Color4D. Texel to convert Converted Color4D Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes all the values pertaining to a particular texture slot in a material. Gets the texture file path. Gets the texture type semantic. Gets the texture index in the material. Gets the texture mapping. Gets the UV channel index that corresponds to this texture from the mesh. Gets the blend factor. Gets the texture operation. Gets the texture wrap mode for the U coordinate. Gets the texture wrap mode for the V coordinate. Gets misc flags. Constructs a new TextureSlot. Texture filepath Texture type semantic Texture index in the material Texture mapping UV channel in mesh that corresponds to this texture Blend factor Texture operation Texture wrap mode for U coordinate Texture wrap mode for V coordinate Misc flags Defines configurable properties for importing models. All properties have default values. Setting config properties are done via the SetProperty* methods in AssimpMethods. Enables time measurements. If enabled the time needed for each part of the loading process is timed and logged. Type: bool. Default: false Sets Assimp's multithreading policy. This is ignored if Assimp is built without boost.thread support. Possible values are: -1 to let Assimp decide, 0 to disable multithreading, and nay number larger than 0 to force a specific number of threads. This is only a hint and may be ignored by Assimp. Type: integer. Default: -1 Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Type: Bool. Default: false. Specifies the maximum angle that may be between two vertex tangents that their tangents and bitangents are smoothed during the step to calculate the tangent basis. The angle specified is in degrees. The maximum value is 175 degrees. Type: float. Default: 45 degrees Specifies the maximum angle that may be between two face normals at the same vertex position that their normals will be smoothed together during the calculate smooth normals step. This is commonly called the "crease angle". The angle is specified in degrees. Maximum value is 175 degrees (all vertices smoothed). Type: float. Default: 175 degrees Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. Type: string. Default: "colormap.lmp" Configures the step to keep materials matching a name in a given list. This is a list of 1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Tabs or carriage returns are treated as whitespace. If a material matches one of these names, it will not be modified or removed by the post processing step nor will other materials be replaced by a reference to it. Default: string. Default: "" Configures the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option could be of used if you have a scene hierarchy that contains important additional information which you intend to parse. Type: bool. Default: false Configures the step to normalize all vertex components into the -1...1 range. That is, a bounding box for the whole scene is computed where the maximum component is taken and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension of the input data. Type: bool. Default: false Configures the step to remove degenerated primitives from the import immediately. The default behavior converts degenerated triangles to lines and degenerated lines to points. Type: bool. Default: false Configures the step to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if is set to true. Type: bool. Default: false Configures the step to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns and tabs are treated as white space. If a node matches one of these names, it will not be modified or removed by the postprocessing step. Type: string. Default: "" Sets the maximum number of triangles a mesh can contain. This is used by the step to determine whether a mesh must be split or not. Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES Sets the maximum number of vertices in a mesh. This is used by the step to determine whether a mesh must be split or not. Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES Sets the maximum number of bones that can affect a single vertex. This is used by the step. Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS Sets the size of the post-transform vertex cache to optimize vertices for. This is for the step. The size is given in vertices. Of course you can't know how the vertex format will exactly look like after the import returns, but you can still guess what your meshes will probably have. The default value *has* resulted in slight performance improvements for most Nvidia/AMD cards since 2002. Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE Input parameter to the step. It specifies the parts of the data structure to be removed. This is a bitwise combination of the flag. If no valid mesh is remaining after the step is executed, the import FAILS. Type: integer. Default: 0 Input parameter to the step. It specifies which primitive types are to be removed by the step. This is a bitwise combination of the flag. Specifying ALL types is illegal. Type: integer. Default: 0 Input parameter to the step. It specifies the floating point accuracy for animation values, specifically the epislon during the comparison. The step checks for animation tracks where all frame values are absolutely equal and removes them. Two floats are considered equal if the invariant abs(n0-n1) > epislon holds true for all vector/quaternion components. Type: float. Default: 0.0f (comparisons are exact) Input parameter to the step. It specifies which UV transformations are to be evaluated. This is bitwise combination of the flag. Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations) A hint to Assimp to favour speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-processing steps to use faster code paths if possible. A value not equal to zero stands for true. Type: integer. Default: 0 Maximum bone cone per mesh for the step. Meshes are split until the max number of bones is reached. Type: integer. Default: 60 Source UV channel for tangent space computation. The specified channel must exist or an error will be raised. Type: integer. Default: 0 Threshold used to determine if a bone is kept or removed during the step. Type: float. Default: 1.0f Require all bones to qualify for deboning before any are removed. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: Matrix4x4. Default: Identity Matrix Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Type: Float. Default: 1.0f. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). The libary reads only one frame of models with vertex animations. By default this is the first frame. The default value is 0. This option applies to all importers. However, it is also possible to override the global setting for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which you want to override the global setting. Type: integer. Default: 0 See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. Type: bool. Default: true Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. Type: bool. Default: true Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). Type: bool. Default: true Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Type: bool. Default: false Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. Type: bool. Default: true Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. Type: bool. Default: true Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. Type: string. Default: "default" Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. Type: string. Default: "" Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty Type: bool. Default: false (All layers are loaded) Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Type: bool. Default: false Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Type: integer. Default: taken from file Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Type: integer. Default: taken from file Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. Type: integer. Default: 100 The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. Type: string. Default: "Scene.Material" The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. Type: Bool. Default: false. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Type: Bool. Default: true. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Type: Bool. Default: true. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Type: Float. Default: 10.0f Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Type: Integer. Default: 32 Specifies whether the collada loader will ignore the up direction. Type: Bool. Default: false Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first. Type: bool. Default: true. Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer will read materials, otherwise this has no effect. Type: Bool. Default: false. Specifies whether the FBX importer will read materials. Type: Bool. Default: true. Specifies whether the FBX importer will read embedded textures. Type: Bool. Default: true. Specifies whether the FBX importer will search for embedded loaded textures, where no embedded texture data is provided. Type: Bool. Default: false. Specifies whether the FBX importer will read cameras. Type: Bool. Default: true. Specifies whether the FBX importer will read light sources. Type: Bool. Default: true. Specifies whether the FBX importer will read animations. Type: Bool. default: true. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Type: Bool. Default: false. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Type: Bool. Default: true. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Type: Bool. Default: true. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Type: Bool. Default: false. Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants are grouped according to their usage or where they're found in the Assimp include files. Default value for . Default value for . Default value for . Default value for . Default value for Defines the maximum number of indices per face (polygon). Defines the maximum number of bone weights. Defines the maximum number of vertices per mesh. Defines the maximum number of faces per mesh. Defines the maximum number of vertex color sets per mesh. Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh. Defines the default bone count limit. Defines the deboning threshold. Defines the maximum length of a string used in AiString. Defines the default color material. Defines the default textured material (if the meshes have UV coords). Static class containing material key constants. A fully qualified mat key name here means that it's a string that combines the mat key (base) name, its texture type semantic, and its texture index into a single string delimited by commas. For non-texture material properties, the texture type semantic and texture index are always zero. Material name (String) Material name (String) Two sided property (boolean) Two sided property (boolean) Shading mode property (ShadingMode) Shading mode property (ShadingMode) Enable wireframe property (boolean) Enable wireframe property (boolean) Blending function (BlendMode) Blending function (BlendMode) Opacity (float) Opacity (float) Bumpscaling (float) Bumpscaling (float) Shininess (float) Shininess (float) Reflectivity (float) Reflectivity (float) Shininess strength (float) Shininess strength (float) Refracti (float) Refracti (float) Diffuse color (Color4D) Diffuse color (Color4D) Ambient color (Color4D) Ambient color (Color4D) Specular color (Color4D) Specular color (Color4D) Emissive color (Color4D) Emissive color (Color4D) Transparent color (Color4D) Transparent color (Color4D) Reflective color (Color4D) Reflective color (Color4D) Background image (String) Background image (String) Texture base name UVWSRC base name Texture op base name Mapping base name Texture blend base name. Mapping mode U base name Mapping mode V base name Texture map axis base name UV transform base name Texture flags base name Helper function to get the fully qualified name of a texture property type name. Takes in a base name constant, a texture type, and a texture index and outputs the name in the format: "baseName,TextureType,texIndex" Base name Texture type Texture index Fully qualified texture name Helper function to get the base name from a fully qualified name of a material property type name. The format of such a string is: "baseName,TextureType,texIndex" Fully qualified material property name. Base name of the property type. Singleton that governs access to the unmanaged Assimp library functions. Default name of the unmanaged library. Based on runtime implementation the prefix ("lib" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically. Gets the AssimpLibrary instance. Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only, then it will not utilize multiple threads during import. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a scene from a stream. This uses the "aiImportFileFromMemory" function. The stream can be from anyplace, not just a memory stream. It is up to the caller to dispose of the stream. Stream containing the scene data Post processing flags A hint to Assimp to decide which importer to use to process the data Property store containing the config name-values, may be null. Pointer to the unmanaged data structure. Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled from the managed scene structure - only for scenes whose memory was allocated by the native library! Pointer to the unmanaged scene data structure. Applies a post-processing step on an already imported scene. Pointer to the unmanaged scene data structure. Post processing steps to run. Pointer to the unmanaged scene data structure. Gets all supported export formats. Array of supported export formats. Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file. Scene to export, it is the responsibility of the caller to free this when finished. Format id describing which format to export to. Pre processing flags to operate on the scene during the export. Exported binary blob, or null if there was an error. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified and the scene be exported. Valid scene to be copied Modifyable copy of the scene Attaches a log stream callback to catch Assimp messages. Pointer to an instance of AiLogStream. Enables verbose logging. True if verbose logging is to be enabled or not. Gets if verbose logging is enabled. True if verbose logging is enabled, false otherwise. Detaches a logstream callback. Pointer to an instance of AiLogStream. A return code signifying if the function was successful or not. Detaches all logstream callbacks currently attached to Assimp. Create an empty property store. Property stores are used to collect import settings. Pointer to property store Deletes a property store. Pointer to property store Sets an integer property value. Pointer to property store Property name Property value Sets a float property value. Pointer to property store Property name Property value Sets a string property value. Pointer to property store Property name Property value Sets a matrix property value. Pointer to property store Property name Property value Retrieves a color value from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The color if it exists. If not, the default Color4D value is returned. Retrieves an array of float values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The float array, if it exists Retrieves an array of integer values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The integer array, if it exists Retrieves a material property with the specific key from the material. Material to retrieve the property from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The material property, if found. Retrieves a string from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The string, if it exists. If not, an empty string is returned. Gets the number of textures contained in the material for a particular texture type. Material to retrieve the data from Texture Type semantic The number of textures for the type. Gets the texture filepath contained in the material. Material to retrieve the data from Texture type semantic Texture index The texture filepath, if it exists. If not an empty string is returned. Gets all values pertaining to a particular texture from a material. Material to retrieve the data from Texture type semantic Texture index Returns the texture slot struct containing all the information. Gets the last error logged in Assimp. The last error message logged. Checks whether the model format extension is supported by Assimp. Model format extension, e.g. ".3ds" True if the format is supported, false otherwise. Gets all the model format extensions that are currently supported by Assimp. Array of supported format extensions Gets a collection of importer descriptions that detail metadata and feature support for each importer. Collection of importer descriptions Gets the memory requirements of the scene. Pointer to the unmanaged scene data structure. The memory information about the scene. Creates a quaternion from the 3x3 rotation matrix. Quaternion struct to fill Rotation matrix Decomposes a 4x4 matrix into its scaling, rotation, and translation parts. 4x4 Matrix to decompose Scaling vector Quaternion containing the rotation Translation vector Transposes the 4x4 matrix. Matrix to transpose Transposes the 3x3 matrix. Matrix to transpose Transforms the vector by the 3x3 rotation matrix. Vector to transform Rotation matrix Transforms the vector by the 4x4 matrix. Vector to transform Matrix transformation Multiplies two 4x4 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Multiplies two 3x3 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Creates a 3x3 identity matrix. Matrix to hold the identity Creates a 4x4 identity matrix. Matrix to hold the identity Gets the Assimp legal info. String containing Assimp legal info. Gets the native Assimp DLL's minor version number. Assimp minor version number Gets the native Assimp DLL's major version number. Assimp major version number Gets the native Assimp DLL's revision version number. Assimp revision version number Gets the native Assimp DLL's current version number as "major.minor.revision" string. This is the version of Assimp that this wrapper is currently using. Unmanaged DLL version Gets the native Assimp DLL's current version number as a .NET version object. Unmanaged DLL version Get the compilation flags that describe how the native Assimp DLL was compiled. Compilation flags Defines all the unmanaged assimp C-function names. Defines all of the delegates that represent the unmanaged assimp functions. Enumerates supported platforms. Windows platform. Linux platform. Mac platform. An attribute that represents the name of an unmanaged function to import. Name of the unmanaged function. Constructs a new . Name of the function. Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load unmanaged libraries. Occurs when the unmanaged library is loaded. Occurs when the unmanaged library is freed. Queries if the unmanaged library has been loaded or not. Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional names can be set in the (e.g. to load versioned DLLs) Gets the path to the unmanaged library DLL that is currently loaded. Gets the resolver used to find the unmanaged library DLL when loading. Gets or sets whether an is thrown if the unmanaged DLL fails to load for whatever reason. By default this is true. Queries if the OS is 64-bit, if false then it is 32-bit. Constructs a new . Default name (NOT path) of the unmanaged library. Delegate types to instantiate and load. Gets an enum representing the current OS that is application is executing on. Platform enumeration. Loads the unmanaged library using the . True if the library was found and successfully loaded. Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness. Path to the 32-bit DLL Path to the 64-bit DLL True if the library was found and successfully loaded. Loads the unmanaged library using the supplied path. Path to the unmanaged DLL. True if the library was found and successfully loaded. Frees the unmanaged library that is currently loaded. True if the library was sucessfully freed. Gets a delegate based on the unmanaged function name. Type of delegate. Name of unmanaged function that is exported by the library. The delegate, or null if not found. If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library from the default path. This function is thread safe. Called when the library is loaded. Called when the library is freed. Resolves unmanaged DLLs for . The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs), an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See for the search strategy. Gets the platform that the application is running on. Constructs a new instance of the class. Platform we're resolving binaries for. Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets an override 32-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 32-bit and 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution: Search user-specified probing paths. Search {AppBaseDirectory}/runtimes/{RID}/native/. Search {AppBaseDirectory}/. Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/. The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID is the Runtime Identifier based on the platform/architecture, see also Microsoft's RID Catalog. Name of the library to attempt to resolve. Full file path to the library, or the file name if not found (e.g. "libXYZ.so"). Represents an aiScene struct. unsigned int, flags about the state of the scene aiNode*, root node of the scenegraph. Number of meshes contained. aiMesh**, meshes in the scene. Number of materials contained. aiMaterial**, materials in the scene. Number of animations contained. aiAnimation**, animations in the scene. Number of embedded textures contained. aiTexture**, textures in the scene. Number of lights contained. aiLight**, lights in the scene. Number of cameras contained. aiCamera**, cameras in the scene. void*, Private data do not touch! Represents an aiNode struct. Name of the node. Node's transform relative to its parent. aiNode*, node's parent. Number of children the node owns. aiNode**, array of nodes this node owns. Number of meshes referenced by this node. unsigned int*, array of mesh indices. aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any. Represents an aiMetadataEntry struct. Type of metadata. Pointer to data. Represents an aiMetadata struct. Length of the Keys and Values arrays. aiString*, array of keys. May not be NULL. Each entry must exist. aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value. Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs. unsigned int, bitwise flag detailing types of primitives contained. Number of vertices in the mesh, denotes length of -all- per-vertex arrays. Number of faces in the mesh. aiVector3D*, array of positions. aiVector3D*, array of normals. aiVector3D*, array of tangents. aiVector3D*, array of bitangents. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example. Max_Value is defined as . aiFace*, array of faces. Number of bones in the mesh. aiBone**, array of bones. Material index referencing the material in the scene. Optional name of the mesh. Number of attachment meshes. NOT CURRENTLY IN USE. aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE. unsigned int, method of morphing when anim meshes are specified. Represents an aiTexture struct. Width of the texture. Height of the texture. sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that maps to one byte. 8 for string + 1 for terminator. aiTexel*, array of texel data. Sets the format hint. Format hint - must be 3 characters or less Gets the format hint. The format hint Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref. AiTexture The format hint Represents an aiFace struct. Number of indices in the face. unsigned int*, array of indices. Represents an aiBone struct. Name of the bone. Number of weights. VertexWeight*, array of vertex weights. Matrix that transforms the vertex from mesh to bone space in bind pose Represents an aiMaterialProperty struct. Name of the property (key). Textures: Specifies texture usage. None texture properties have this zero (or None). Textures: Specifies the index of the texture. For non-texture properties this is always zero. Size of the buffer data in bytes. This value may not be zero. Type of value contained in the buffer. char*, byte buffer to hold the property's value. Represents an aiMaterial struct. aiMaterialProperty**, array of material properties. Number of key-value properties. Storage allocated for key-value properties. Represents an aiNodeAnim struct. Name of the node affected by the animation. The node must exist and be unique. Number of position keys. VectorKey*, position keys of this animation channel. Positions are 3D vectors and are accompanied by at least one scaling and one rotation key. The number of rotation keys. QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions). If there are rotation keys there will be at least one scaling and one position key. Number of scaling keys. VectorKey*, scaling keys of this animation channel. Scalings are specified as a 3D vector, and if there are scaling keys, there will at least be one position and one rotation key. Defines how the animation behaves before the first key is encountered. Defines how the animation behaves after the last key was processed. Represents an aiMeshAnim struct. Name of the mesh to be animated. Empty string not allowed. Number of keys, there is at least one. aiMeshkey*, the key frames of the animation. There must exist at least one. Represents an aiMeshMorphKey struct. The time of this key. unsigned int*, values at the time of this key. double*, weights at the time of this key. unsigned int, the number of values/weights. Represents an aiMeshMorphAnim struct. aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). unsigned int, number of key frames. Must be at least one. aiMeshMorphKey*, key frames of the animation. Represents an aiAnimation struct. Name of the animation. Duration of the animation in ticks. Ticks per second, 0 if not specified in imported file. Number of bone animation channels, each channel affects a single node. aiNodeAnim**, node animation channels. Each channel affects a single node. Number of mesh animation channels. Each channel affects a single mesh and defines vertex-based animation. aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. Number of mesh morph animation channels. Each channel affects a single mesh and defines morphing animation. aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. Represents an aiLight struct. Name of the light. Type of light. Position of the light. Direction of the spot/directional light. Up direction of the light source in space. Undefined for point lights. Attenuation constant value. Attenuation linear value. Attenuation quadratic value. Diffuse color. Specular color. Ambient color. Spot light inner angle. Spot light outer angle. Width (X) and Height (Y) of the area that represents an light. Represents an aiCamera struct. Name of the camera. Position of the camera. Up vector of the camera. Viewing direction of the camera. Field Of View of the camera. Near clip plane distance. Far clip plane distance. The Aspect ratio. Represents an aiString struct. Byte length of the UTF-8 string. Actual string data. Constructs a new instance of the struct. The string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref. AiString AiString string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. AiString string data Convienence method for setting the AiString string (and length). String data to set True if the operation was successful, false otherwise. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Represents a log stream, which receives all log messages and streams them somewhere. Function pointer that gets called when a message is to be logged. char*, user defined opaque data. Represents the memory requirements for the different components of an imported scene. All sizes in in bytes. Size of the storage allocated for texture data, in bytes. Size of the storage allocated for material data, in bytes. Size of the storage allocated for mesh data, in bytes. Size of the storage allocated for node data, in bytes. Size of the storage allocated for animation data, in bytes. Size of the storage allocated for camera data, in bytes. Size of the storage allocated for light data, in bytes. Total storage allocated for the imported scene, in bytes. Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs. aiVector3D*, replacement position array. aiVector3D*, replacement normal array. aiVector3D*, replacement tangent array. aiVector3D*, replacement bitangent array. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int, number of vertices. float, weight of the AnimMesh. Describes a variety of information about an importer. char*, full name of the importer (e.g. Blender3D Importer) char*, original author (blank if unknown or assimp team) char*, current maintainer, left blank if the author maintains. char*, implementation comments. E.g. unimplemented features. unsigned int, features supported by the importer. unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. "xml dae"). Multiple importers may respond to the same file extension, assim Describes a file format which Assimp can export to. char*, a short string ID to uniquely identify the export format. e.g. "collada" or "obj" char*, a short description of the file format to present to users. char*, a recommended file extension of the exported file in lower case. Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly. size_t, size of the data in bytes. void*, the data. AiString, name of the blob. aiExportDataBlob*, pointer to the next blob in the chain. Contains callbacks to implement a custom file system to open and close files. Function pointer to open a new file. Function pointer used to close an existing file. Char*, user defined opaque data. Contains callbacks to read and write to a file opened by a custom file system. Function pointer to read from a file. Function pointer to write to a file. Function pointer to retrieve the current position of the file cursor. Function pointer to retrieve the size of the file. Function pointer to set the current position of the file cursor. Function pointer to flush the file contents. Char*, user defined opaque data. Callback delegate for Assimp's LogStream. Log message char* pointer to user data that is passed to the callback Callback delegate for a custom file system, to write to a file. Pointer to an AiFile instance Char* pointer to data to write (casted from a void*) Size of a single element in bytes to write Number of elements to write Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured. Callback delegate for a custom file system, to read from a file. Pointer to an AiFile instance. Char* pointer that will store the data read (casted from a void*) Size of a single element in bytes to read Number of elements to read Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured. Callback delegate for a custom file system, to tell offset/size information about the file. Pointer to an AiFile instance. Returns the current file cursor or the file size in bytes. May be -1 if an error has occured. Callback delegate for a custom file system, to flush the contents of the file to the disk. Pointer to an AiFile instance. Callback delegate for a custom file system, to set the current position of the file cursor. Pointer to An AiFile instance. Offset from the origin. Position used as a reference Returns success, if successful Callback delegate for a custom file system, to open a given file and create a new AiFile instance. Pointer to an AiFileIO instance. Path to the target file Read-write permissions to request Pointer to an AiFile instance. Callback delegate for a custom file system, to close a given file and free its memory. Pointer to an AiFileIO instance. Pointer to an AiFile instance that will be closed. Fixed length array for representing the color channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the texture coordinate channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Defines how an UV channel is transformed. Translation on the U and V axes. Default is 0|0 Scaling on the U and V axes. Default is 1|1. Rotation in counter-clockwise direction, specfied in radians. The rotation center is 0.5f|0.5f and the default value is zero. Represents a two-dimensional vector. X component. Y component Gets or sets the component value at the specified zero-based index in the order of XY (index 0 access X, 1 access Y. If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector2D. X component Y component Constructs a new Vector2D with both components set the same value. Value to set both X and Y to Sets the X and Y values. X component Y component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a three-dimensional vector. X component. Y component. Z component. Gets or sets the component value at the specified zero-based index in the order of XYZ (index 0 access X, 1 access Y, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector3D. X component Y component Z component Constructs a new Vector3D. Vector2D containing the X, Y values Z component Constructs a new Vector3D where each component is set to the same value. Value to set X, Y, and Z to Sets the X, Y, and Z values. X component Y component Z component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Calculates the cross product of two vectors. First vector Second vector Resulting vector Calculates the dot product of two vectors. First vector Second vector Resulting vector Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Transforms this vector by a 3x3 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Transforms this vector by a 4x4 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a 3D vector for a given time. The time of this key. The 3D vector value of this key. Constructs a new VectorKey. The time of this key. The 3D vector value of this key. Tests equality between two keys. The first key The second key True if the key's 3D vectors are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's 3D vectors are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their 3D vectors are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a single influence of a bone on a vertex. Index of the vertex which is influenced by the bone. Strength of the influence in range of (0...1). All influences from all bones at one vertex amounts to 1. Constructs a new VertexWeight. Index of the vertex. Weight of the influence. Returns a that represents this instance. A that represents this instance. Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or replaces the entire method body. Recommended types to use are generally blittable structs. Casts the by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the readonly by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the pointer to a by-ref value of the specified type. Type to cast to. Pointer. Ref to the value, as the new type. Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to receive the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to write the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Computes the size of the type (inlined). Type of data. Size of the type in bytes. Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Writes a single element to the memory location (inlined). Type of data. Pointer to memory location. Value to be written. Writes a single element to the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value to be written. Reads a single element from the memory location (inlined). Type of data. Pointer to memory location. Value read. Reads a single element from the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value read. Copies the number of bytes from one pointer to the other (inlined). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Copies the number of bytes from one pointer to the other (inlined, unaligned copy). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Clears the memory to a specified value (inlined). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. Clears the memory to a specified value (inlined, unaligned init). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. ================================================ FILE: ThirdParty/AssimpNet/5.0.0/License.txt ================================================ Copyright (c) 2012-2020 AssimpNet - Nicholas Woodfield Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ==================================================================================== Open Asset Import Library (Assimp) Copyright (c) 2006-2018, Assimp Development Team All rights reserved. Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the ASSIMP team, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission of the ASSIMP Development Team. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AN EXCEPTION applies to all files in the ./test/models-nonbsd subfolder. These are 3d models for testing purposes, from various free sources on the internet. They are - unless otherwise stated - copyright of their respective creators, which may impose additional requirements on the use of their work. For any of these models, see .source.txt for more legal information. Contact us if you are a copyright holder and believe that we credited you inproperly or if you don't want your files to appear in the repository. ================================================ FILE: ThirdParty/AssimpNet/5.0.0/lib/net40/AssimpNet.xml ================================================ AssimpNet An animation consists of keyframe data for a number of nodes. For each node affected by the animation, a separate series of data is given. Gets or sets the name of the animation. If the modeling package the data was exported from only supports a single animation channel, this name is usually empty. Gets or sets the duration of the animation in number of ticks. Gets or sets the number of ticks per second. It may be zero if it is not specified in the imported file. Gets if the animation has node animation channels. Gets the number of node animation channels where each channel affects a single node. Gets the node animation channels. Gets if the animation has mesh animations. Gets the number of mesh animation channels. Gets the number of mesh morph animation channels. Gets the mesh animation channels. Gets the mesh morph animation channels. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion functionality is offered to bypass loading model data into managed memory. Gets if the context has been disposed. Gets or sets the uniform scale for the model. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets whether this context is using a user-defined IO system for file handling. Gets the property configurations set to this context. This is only used during import. Constructs a new instance of the class. Imports a model from the stream without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Post processing flags, if any Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the specified file without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Imports a model from the specified file. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file Post processing flags, if any The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Post processing steps used for the import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Post processing steps used for the import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system is used instead. Custom file system implementation Removes the currently set custom file system implementation from the importer. Gets the model formats that are supported for export by Assimp. Export formats supported Gets the model formats that are supported for import by Assimp. Import formats supported Gets descriptions for each importer that assimp has registered. Descriptions of supported importers. Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension, they are called in the order that they were registered. File extension to query importer support for. Importer description or null if it does not exist. Checks if the format extension (e.g. ".dae" or ".obj") is supported for import. Model format True if the format is supported, false otherwise Checks if the format extension (e.g. ".dae" or ".obj") is supported for export. Model format True if the format is supported, false otherwise Sets a configuration property to the context. This is only used during import. Config to set Removes a set configuration property by name. Name of the config property Removes all configuration properties from the context. Checks if the context has a config set by the specified name. Name of the config property True if the config is present, false otherwise Disposes of resources held by the context. These include IO systems still attached. Releases unmanaged and - optionally - managed resources True to release both managed and unmanaged resources; False to release only unmanaged resources. AssimpNet general exception. Initializes a new instance of the class. Initializes a new instance of the class. The error message. Initializes a new instance of the class. Name of the param. The error message. Initializes a new instance of the class. The error message The inner exception. Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame hierarchy and by which it can be addressed by animations. In addition it has a number of influences on vertices and a matrix relating the mesh position to the position of the bone at the time of binding. Gets or sets the name of the bone. Gets the number of vertex influences the bone contains. Gets if the bone has vertex weights - this should always be true. Gets the influence weights of this bone, by vertex index. Gets or sets the matrix that transforms from bone space to mesh space in bind pose. This matrix describes the position of the mesh in the local space of this bone when the skeleton was bound. Thus it can be used directly to determine a desired vertex position, given the world-space transform of the bone when animated, and the position of the vertex in mesh space. It is sometimes called an inverse-bind matrix or inverse-bind pose matrix. Constructs a new instance of the class. Constructs a new instance of the class. Name of the bone Bone's offset matrix Vertex weights Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an axis-aligned bounding box Minimum point of the bounding box. Maximum point of the bounding box. Constructs a new BoundingBox. Minimum point. Maximum point. Tests equality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are equal, false otherwise Tests inequality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are not equal, false otherwise Tests equality between this BoundingBox and another BoundingBox. BoundingBox to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes a right-handed camera in the scene. An important aspect is that the camera itself is also part of the scenegraph, meaning any values such as the direction vector are not *absolute*, they can be relative to the coordinate system defined by the node which corresponds to the camera. This allows for camera animations. Gets or sets the name of the camera. This corresponds to a node in the scenegraph with the same name. This node specifies the position of the camera in the scene hierarchy and can be animated. Gets or sets the position of the camera relative to the coordinate space defined by the corresponding node. THe default value is 0|0|0. Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the corresponding node. The 'right' vector of the camera is the cross product of the up and direction vectors. The default value is 0|1|0. Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node. The default value is 0|0|1. Gets or sets the half horizontal field of view angle, in radians. The FoV angle is the angle between the center line of the screen and the left or right border. The default value is 1/4PI. Gets or sets the distance of the near clipping plane from the camera. The value may not be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f; Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must be further than the near clippling plane. The default value is 1000.0f. The ratio between the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid floating-point inaccuracies which can lead to z-fighting. Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file. The default value is zero. Gets a right-handed view matrix. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a RGB color. Red component. Green component. Blue component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color3D. Red component Green component Blue component Constructs a Color3D where each component is set to the same value. Value to set R, G, B components Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a Red-Green-Blue-Alpha (RGBA) color. Color values range from 0 to 1. Red component. Green component. Blue component. Alpha component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color4D. Red component Green component Blue component Alpha component Constructs a Color4D. Alpha is set to 1.0. Red component Green component Blue component Constructs a Color4D where each component is set to the same value. Value to set R, G, B, A components Constructs a Color4D from a Color3D. Alpha is set to 1.0. RGB values Constructs a Color4D from a Color3D and alpha value. RGB values Alpha value Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Base property config. Gets the property name. Creates a new property config that has no active Assimp property store. Name of the property. Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Applies the property value to the given Assimp property store. Assimp property store Describes an integer configuration property. Gets the property value. Gets the default property value. Constructs a new IntengerPropertyConfig. Name of the property Property value constructs a new IntegerPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a float configuration property. Gets the property value. Gets the default property value. Constructs a new FloatPropertyConfig. Name of the property Property value Constructs a new FloatPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a configuration property. Gets the property value. Gets the default property value. Constructs a new MatrixPropertyConfig. Name of the property Property value Constructs a new MatrixPropertyConfig. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a boolean configuration property. Gets the property value. Gets the default property value. Constructs a new BooleanPropertyConfig. Name of the property Property value Constructs a new BooleanPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a string configuration property. Gets the property value. Gets the default property value. Constructs a new StringPropertyConfig. Name of the property Property value Constructs a new StringPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Convience method for constructing a whitespace delimited name list. Array of names White-space delimited list as a string Configuration to enable time measurements. If enabled, each part of the loading process is timed and logged. Default value is false. Gets the string name used by MeasureTimeConfig. Constructs a new MeasureTimeConfig. True if the loading process should be timed or not. Configuration to set Assimp's multithreading policy. Possible values are -1 to let Assimp decide, 0 to disable multithreading, or any number larger than zero to force a specific number of threads. This is only a hint and may be ignored by Assimp. Default value is -1. Gets the string name used by MultithreadingConfig. Constructs a new MultithreadingConfig. A value of -1 will let Assimp decide, a value of zero to disable multithreading, and a value greater than zero to force a specific number of threads. Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Default value is false. Gets the string name used by NoSkeletonMeshConfig. Constructs a new NoSkeletonMeshConfig. True if dummy skeleton mesh generation should be disabled, false otherwise. Configuration to set the maximum angle that may be between two vertex tangents/bitangents when they are smoothed during the step to calculate the tangent basis. The default value is 45 degrees. Gets the string name used by TangentSmoothingAngleConfig. Constructs a new TangentSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the maximum angle between two face normals at a vertex when they are smoothed during the step to calculate smooth normals. This is frequently called the "crease angle". The maximum and default value is 175 degrees. Gets the string name used by NormalSmoothingAngleConfig. Constructs a new NormalSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. The default value is "colormap.lmp". Gets the string name used by MDLColorMapConfig. Constructs a new MDLColorMapConfig. Colormap filename Configuration for the the step to determine what materials to keep. If a material matches one of these names it will not be modified or removed by the post processing step. Default is an empty string. Gets the string name used by MaterialExcludeListConfig. Constructs a new MaterialExcludeListConfig. Material names containing whitespace must be enclosed in single quotation marks. List of material names that will not be modified or replaced by the remove redundant materials post process step. Configuration for the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option can be useful if you have a scene hierarchy that contains important additional information which you intend to parse. The default value is false. Gets the string name used by KeepSceneHierarchyConfig. Constructs a new KeepHierarchyConfig. True to keep the hierarchy, false otherwise. Configuration for the step to normalize all vertex components into the -1...1 range. The default value is false. Gets the string name used by NormalizeVertexComponentsConfig. Constructs a new NormalizeVertexComponentsConfig. True if the post process step should normalize vertex components, false otherwise. Configuration for the step to remove degenerted primitives from the import immediately. The default value is false, where degenerated triangles are converted to lines, and degenerated lines to points. Gets the string name used by RemoveDegeneratePrimitivesConfig. Constructs a new RemoveDegeneratePrimitivesConfig. True if the post process step should remove degenerate primitives, false otherwise. Configuration for the step. If true, the area of the triangles are checked to see if they are greater than 1e-6. If so, the triangle is removed if is set to true. Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig. Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig. True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise. Configuration for the step to preserve nodes matching a name in the given list. Nodes that match the names in the list will not be modified or removed. Identifiers containing whitespaces must be enclosed in single quotation marks. The default value is an empty string. Gets the string name used by NodeExcludeListConfig. Constructs a new NodeExcludeListConfig. List of node names Configuration for the step that specifies the maximum number of triangles a mesh can contain. The default value is MeshTriangleLimitConfigDefaultValue. Gets the string name used by MeshTriangleLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshTriangleLimitConfig. Max number of triangles a mesh can contain. Configuration for the step that specifies the maximum number of vertices a mesh can contain. The default value is MeshVertexLimitConfigDefaultValue. Gets the string name used by MeshVertexLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshVertexLimitConfig. Max number of vertices a mesh can contain. Configuration for the step that specifies the maximum number of bone weights per vertex. The default value is VertexBoneWeightLimitConfigDefaultValue. gets the string name used by VertexBoneWeightLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new VertexBoneWeightLimitConfig. Max number of bone weights per vertex. Configuration for the step that specifies the size of the post-transform vertex cache. The size is given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue. Gets the string name used by VertexCacheConfig. Gets the defined default vertex cache size, this corresponds to the . Constructs a new VertexCacheSizeConfig. Size of the post-transform vertex cache, in number of vertices. Configuration for the step that specifies which parts of the data structure is to be removed. If no valid mesh remains after the step, the import fails. The default value i . Gets the string name used by RemoveComponentConfig. Constructs a new RemoveComponentConfig. Bit-wise combination of components to exclude. Configuration for the step that specifies which primitive types are to be removed by the step. Specifying all primitive types is illegal. The default value is zero specifying none. Gets the string name used by SortByPrimitiveTypeConfig. Constructs a new SortByPrimitiveTypeConfig. Bit-wise combination of primitive types to remove Configuration for the step that specifies the floating point accuracy for animation values, specifically the episilon during comparisons. The default value is 0.0f. Gets the string name used by AnimationAccuracyConfig. Constructs a new AnimationAccuracyConfig. Episilon for animation value comparisons. Configuration for the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Default is false. Gets the string name used by IgnoreTextureCoordinatesConfig. Constructs a new IgnoreTextureCoordinatesConfig. True if texture coordinates should be ignored, false otherwise. Configuration for the step that specifies which UV transformations are to be evaluated. The default value is for all combinations (scaling, rotation, translation). Gets the string name used by TransformUVConfig. Constructs a new TransformUVConfig. Bit-wise combination specifying which UV transforms that should be evaluated. Configuration that is a hint to Assimp to favor speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-process steps to use faster code paths if possible. The default value is false. Gets the string name used by FavorSpeedConfig. Constructs a new FavorSpeedConfig. True if Assimp should favor speed at the expense of quality, false otherwise. Configures the maximum bone count per mesh for the step. Meshes are split until the maximum number of bones is reached. Gets the string name used by MaxBoneCountConfig. Constructs a new MaxBoneCountConfig. The maximum bone count. Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised. Gets the string name used by TangentTextureChannelIndexConfig. Constructs a new TangentTextureChannelIndexConfig. The zero-based texture channel index. Configures the threshold that is used to determine what bones are removed. Gets the string name used by DeboneThresholdConfig. Constructs a new DeboneThresholdConfig. The debone threshold. Configuration that requires all bones to qualify for deboning before any are removed. Gets the string name used by DeboneAllOrNoneConfig. Constructs a new DeboneAllOrNoneConfig. True if all are required, false if none need to qualify. Configuration for that sets a user defined matrix as the scene root node transformation before transforming vertices. Default value is the identity matrix. Gets the string name used by RootTransformationConfig. Constructs a new RootTransformationConfig. Root transformation matrix to be set to the root scene node during the pretransform post process step. Applies the property value to the given Assimp property store. Assimp property store Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Default is 1.0. Gets the string name used by GlobalScaleConfig. Constructs a new GlobalScaleConfig. Value to scale the entire scene by. Applies an application-specific scaling to the to allow for backwards compatibility. Default is 1.0. Gets the string name used by AppScaleConfig. Constructs a new AppScaleConfig. Value to scale the global scale by. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the "global" keyframe that will be imported. There are other configs for specific importers that will override the global setting. Gets the string name used by GlobalKeyFrameImportConfig. Constructs a new GlobalKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD3 format. Gets the string name used by MD3KeyFrameImportConfig. Constructs a new MD3KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD2 format. Gets the string name used by MD2KeyFrameImportConfig. Constructs a new MD2KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MDL format. Gets the string name used by MDLKeyFrameImportConfig. Constructs a new MDLKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the SMD format. Gets the string name used by SMDKeyFrameImportConfig. Constructs a new SMDKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the Unreal format. Gets the string name used by UnrealKeyFrameImportConfig. Constructs a new UnrealKeyFrameImportConfig. Keyframe index Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. The default value is true. Gets the string name used by ACSeparateBackfaceCullConfig. Constructs a new ACSeparateBackfaceCullConfig. True if all surfaces that have the "backface cull" flag set should be collected in separate meshes, false otherwise. Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. The default value is true. Gets the string name used by ACEvaluateSubdivisionConfig. Constructs a new ACEvaluateSubdivisionConfig. True if the AC loader should evaluate subdivisions, false otherwise. Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). The default value is true. Gets the string name used by UnrealHandleFlagsConfig. Constructs a new UnrealHandleFlagsConfig. True if the unreal loader should separate faces with different surface flags, false otherwise. Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. The default value is false. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Gets the string name used by TerragenComputeTexCoordsConfig. Constructs a new TerragenComputeTexCoordsConfig. True if terran UV coordinates should be computed, false otherwise. Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true. Gets the string name used by ASEReconstructNormalsConfig. Constructs a new ASEReconstructNormalsConfig. True if normals should be re-computed, false otherwise. Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. The default value is true. Gets the string name used by MD3HandleMultiPartConfig. Constructs a new MD3HandleMultiPartConfig. True if the split files should be loaded and combined, false otherwise. Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. The default string value is "default". Gets the string name used by MD3SkinNameConfig. Constructs a new MD3SkinNameConfig. The skin name. Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. the default string value is an empty string. Gets the string name used by MD3ShaderSourceConfig. Constructs a new MD3ShaderSourceConfig. The shader file. Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty The default value is false (all layers are loaded). Gets the string name used by LWOImportOneLayerConfig. Constructs a new LWOImportOneLayerConfig. True if only one layer should be imported, false if all layers should be imported. Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default value is false. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Gets the string name used by MD5NoAnimationAutoLoadConfig. Constructs a new MD5NoAnimationAutoLoadConfig. True if animations should not be automatically loaded, false if they should be. Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Gets the string name used by LWSAnimationStartConfig. Constructs a new LWSAnimationStartConfig. Beginning of the time range Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Gets the string name used by LWSAnimationEndConfig. Constructs a new LWSAnimationEndConfig. Ending of the time range Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. The default value is 100 frames per second. Gets the string name used by IRRAnimationFrameRateConfig. Constructs a new IRRAnimationFramerateConfig. Number of frames per second to output. The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. The default value is "Scene.Material". Gets the string name used by OgreMaterialFileConfig. Constructs a new OgreMaterialFileConfig. Material file name to load. The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. The default value is false. Gets the string name used by OgreTextureTypeFromFilenameConfig. Constructs a new OgreTextureTypeFromFilenameConfig. True if the filename defines texture usage, false otherwise. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Gets the string name used by IFCSkipSpaceRepresentationsConfig. Constructs a new IFCSkipSpaceRepresentationsConfig. True if the IfcSpace elements are skipped, false if otherwise. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Gets the string name used by IFCUseCustomTriangulationConfig. Constructs a new IFCUseCustomTriangulationConfig. True if the loader should use its own triangulation routine for walls/floors, false otherwise. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Gets the string name used by IFCSmoothingAngleConfig. Constructs a new IFCSmoothingAngleConfig. Smoothing angle when tessellating curves. Needs to be in the range of [5, 120]. Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Gets the string name used by IFCCylindricalTessellationConfig. Constructs a new IFCCylindricalTessellationConfig. Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180]. Specifies whether the collada loader will ignore the up direction. Default is false. Gets the string name used by ColladaIgnoreUpDirectionConfig. Constructs a new ColladaIgnoreUpDirectionConfig. True if the loader should ignore the up direction, false otherwise. Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The behavior is to use the id tag (resp. sid tag, if no id tag is present) instead. Default is false. Gets the string name used by ColladaUseColladaNamesConfig. Constructs a new ColladaUseColladaNamesConfig. True if collada names should be used as node names, false otherwise. Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true. Gets the string name used by FBXImportAllGeometryLayersConfig. Constructs a new FBXImportAllGeometryLayersConfig. True if all geometry layers should be merged, false otherwise to take only the first layer. Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials, if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false. Gets the string name used by FBXImportAllMaterialsConfig. Constructs a new FBXImportAllMaterialsConfig. True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials). Specifies whether the FBX importer will import materials. Default is true. Gets the string name used by FBXImportMaterialsConfig. Constructs a new FBXImportMaterialsConfig. True if the FBX importer should import materials, false otherwise. Specifies whether the FBX importer will import embedded textures. Default is true. Gets the string name used by FBXImportEmbeddedTexturesConfig. Constructs a new FBXImportEmbeddedTexturesConfig. True if the FBX importer should import embedded textures, false otherwise. Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false. Gets the string name used by FBXImportSearchEmbeddedTexturesConfig. Constructs a new FBXImportSearchEmbeddedTexturesConfig. True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Specifies whether the FBX importer will import cameras. Default is true. Gets the string name used by FBXImportCamerasConfig. Constructs a new FBXImportCamerasConfig. True if the FBX importer should import cameras, false otherwise. Specifies whether the FBX importer will import lights. Default is true. Gets the string name used by FBXImportLightsConfig. Constructs a new FBXImportLightsConfig. True if the FBX importer should import lights, false otherwise. Specifies whether the FBX importer will import animations. Default is true. Gets the string name used by FBXImportAnimationsConfig. Constructs a new FBXImportAnimationsConfig. True if the FBX importer should import animations, false otherwise. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Default is false. Gets the string name used by FBXStrictModeConfig. Constructs a new FBXStrictModeConfig. True if FBX strict mode should be used, false otherwise. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Default value is true. Gets the string name used by FBXPreservePivotsConfig. Constructs a new FBXPreservePivotsConfig. True if pivots should be preserved, false otherwise. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Default value is true. Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig. Constructs a new FBXOptimizeEmptyAnimationCurvesConfig. True if empty animation curves should be dropped, false otherwise. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Default value is false. Gets the string name used by FBXConvertToMetersConfig. Constructs a new FBXConvertToMetersConfig. True if the importer converts the unit from cm to m, false if do not do a conversion. Specifies whether the importer will load multiple animations. Default value is true. Gets the string name used by SmdLoadAnimationListConfig. Constructs a new SmdLoadAnimationListConfig. True if the importer should load multiple animations, false if only one animation should be loaded. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Default value is true. Gets the string name used by RemoveEmptyBonesConfig. Constructs a new RemoveEmptyBonesConfig. True if the importer should remove empty bones, false if they should be kept. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Gets the string name used by XFileUseDoublesConfig. Constructs a new XFileUseDoublesConfig. True if the x file uses 64-bit double values rather than 32-bit float values. Specifies if the export process should disable a validation step that would remove data that does not contain faces. This will enable point cloud data to be exported, since the 3D data is a collection of vertices without face data. Gets the string name used by ExportPointCloudsConfig. Constructs a new ExportPointCloudConfig. True if the exporter should treat vertices not grouped in faces as point clouds, false otherwise. Represents an embedded texture. Some file formats directly embed texture assets. Embedded textures may be uncompressed, where the data is given in an uncompressed format. Or it may be compressed in a format like png or jpg. In the latter case, the raw file bytes are given so the application must utilize an image decoder (e.g. DevIL) to get access to the actual color data. This object represents both types, so some properties may or may not be valid depending if it is compressed or not. Gets or sets the texture's original filename. Gets if the texture is compressed or not. Gets the width of the texture in pixels. Only valid for non-compressed textures. Gets the height of the texture in pixels. Only valid for non-compressed textures. Gets if the texture has non-compressed texel data. Only valid for non-compressed textures. Gets the size of the non-compressed texel data. Only valid for non-compressed textures. Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures. Gets if the embedded texture has compressed data. Only valid for compressed textures. Gets the size of the compressed data. Only valid for compressed textures. Gets the raw byte data representing the compressed texture. Only valid for compressed textures. Gets the format hint to determine the type of compressed data. This hint is a three-character lower-case hint like "dds", "jpg", "png". Constructs a new instance of the class. Should use only if reading from a native value. Constructs a new instance of the class. This creates a compressed embedded texture. The 3 character format hint. The compressed data. Optional file name for the texture. Constructs a new instance of the class. This creates an uncompressed embedded texture. Width of the texture Height of the texture Color data Optional file name for the texture. Thrown if the data size does not match width * height. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Enumerates metadata data types. Metadata is a boolean. Metadata is an integer. Metadata is an unsigned 64-bit integer. Metadata is a float. Metadata is a double. Metadata is a string. Metadata is a . Post processing flag options, specifying a number of steps that can be run on the data to either generate additional vertex data or optimize the imported data. No flags enabled. Calculates the tangents and binormals (bitangents) for the imported meshes. This does nothing if a mesh does not have normals. You might want this post processing step to be executed if you plan to use tangent space calculations such as normal mapping. There is a config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which allows you to specify a maximimum smoothing angle for the algorithm. However, usually you'll want to leave it at the default value. Identifies and joins identical vertex data sets within all imported meshes. After this step is run each mesh does contain only unique vertices anymore, so a vertex is possibly used by multiple faces. You usually want to use this post processing step. If your application deals with indexed geometry, this step is compulsory or you'll just waste rendering time. If this flag is not specified, no vertices are referenced by more than one face and no index buffer is required for rendering. Converts all imported data to a left handed coordinate space. By default the data is returned in a right-handed coordinate space, where +X points to the right, +Z towards the viewer, and +Y upwards. Triangulates all faces of all meshes. By default the imported mesh data might contain faces with more than three indices. For rendering you'll usually want all faces to be triangles. This post processing step splits up all higher faces to triangles. Line and point primitives are *not* modified. If you want 'triangles only' with no other kinds of primitives, try the following: Specify both and . Ignore all point and line meshes when you process Assimp's output Removes some parts of the data structure (animations, materials, light sources, cameras, textures, vertex components). The components to be removed are specified in a separate configuration option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove unrequired stuff from the pipeline as early as possible results in an increased performance and a better optimized output data structure. This step is also useful if you want to force Assimp to recompute normals or tangents. the corresponding steps don't recompute them if they're already there (loaded from the source asset). By using this step you can make sure they are NOT there. Generates normals for all faces of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. Face normals are shared between all points of a single face, so a single point can have multiple normals, which in other words, forces the library to duplicate vertices in some cases. This makes senseless then. Generates smooth normals for all vertices of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE allows you to specify an angle maximum for the normal smoothing algorithm. Normals exceeding this limit are not smoothed, resulting in a 'hard' seam between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual appearance. Splits large meshes into smaller submeshes. This is useful for realtime rendering where the number of triangles which can be maximally processed in a single draw call is usually limited by the video driver/hardware. The maximum vertex buffer is usually limited, too. Both requirements can be met with this step: you may specify both a triangle and a vertex limit for a single mesh. The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default values are 1,000,000. Warning: This can be a time consuming task. Removes the node graph and "bakes" (pre-transforms) all vertices with the local transformation matrices of their nodes. The output scene does still contain nodes, however, there is only a root node with children, each one referencing only one mesh. Each mesh referencing one material. For rendering, you can simply render all meshes in order, you don't need to pay attention to local transformations and the node hierarchy. Warning: Animations are removed during this step. Limits the number of bones simultaneously affecting a single vertex to a maximum value. If any vertex is affected by more than that number of bones, the least important vertex weights are removed and the remaining vertex weights are re-normalized so that the weights still sum up to 1. The default bone weight limit is 4 and uses the AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing step might be of interest for you. Validates the imported scene data structure. This makes sure that all indices are valid, all animations and bones are linked correctly, all material references are correct, etc. It is recommended to capture Assimp's log output if you use this flag, so you can easily find out what's actually wrong if a file fails the validation. The validator is quite rude and will find *all* inconsistencies in the data structure. There are two types of failures: Error: There's something wrong with the imported data. Further postprocessing is not possible and the data is not usable at all. The import fails. Warning: There are some minor issues (e.g. 1000000 animation keyframes with the same time), but further postprocessing and use of the data structure is still safe. Warning details are written to the log file. Re-orders triangles for better vertex cache locality. This step tries to improve the ACMR (average post-transform vertex cache miss ratio) for all meshes. The implementation runs in O(n) time and is roughly based on the 'tipsify' algorithm. If you intend to render huge models in hardware, this step might be of interest for you. The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune the cache optimization. Searches for redundant/unreferenced materials and removes them. This is especially useful in combination with the PreTransformVertices and OptimizeMeshes flags. Both join small meshes with equal characteristics, but they can't do their work if two meshes have different materials. Because several material settings are always lost during Assimp's import filders and because many exporters don't check for redundant materials, huge models often have materials which are defined several times with exactly the same settings. Several material settings not contributing to the final appearance of a surface are ignored in all comparisons ... the material name is one of them. So, if you're passing additional information through the content pipeline (probably using *magic* material names), don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST setting. This step tries to determine which meshes have normal vectors that are facing inwards. The algorithm is simple but effective: The bounding box of all vertices and their normals are compared against the volume of the bounding box of all vertices without their normals. This works well for most objects, problems might occur with planar surfaces. However, the step tries to filter such cases. The step inverts all in-facing normals. Generally, it is recommended to enable this step, although the result is not always correct. This step splits meshes with more than one primitive type in homogeneous submeshes. This step is executed after triangulation and after it returns, just one bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time rendering where point and line primitives are often ignored or rendered separately. You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need. This can be used to easily exclude lines and points, which are rarely used, from the import. This step searches all meshes for degenerated primitives and converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical. To have degenerated primitives removed, specify the flag try one of the following procedures: To support lines and points: Set the AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as soon as they are detected. They won't pass any further pipeline steps. If you don't support lines and points: Specify flag, which will move line and point primitives to separate meshes. Then set the AI_CONFIG_PP_SBP_REMOVE option to and to cause step to reject point and line meshes from the scene. This step also removes very small triangles with a surface area smaller than 10^-6. If you rely on having these small triangles, or notice holes in your model, set the property to false. Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several file formats which do not support lines or points where exporters bypass the format specification and write them as degenerated triangles instead. This step searches all meshes for invalid data, such as zeroed normal vectors or invalid UV coordinates and removes or fixes them. This is intended to get rid of some common exporter rrors. This is especially useful for normals. If they are invalid, and the step recognizes this, they will be removed and can later be recomputed, e.g. by the GenerateSmoothNormals flag. The step will also remove meshes that are infinitely small and reduce animation tracks consisting of hundreds of redundant keys to a single key. The AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check for duplicate animation tracks. This step converts non-UV mappings (such as spherical or cylindrical mapping) to proper texture coordinate channels. Most applications will support UV mapping only, so you will probably want to specify this step in every case. Note that Assimp is not always able to match the original mapping implementation of the 3D app which produced a model perfectly. It's always better to let the father app compute the UV channels, at least 3DS max, maya, blender, lightwave, modo, .... are able to achieve this. If this step is not requested, you'll need to process the MATKEY_MAPPING material property in order to display all assets properly. Applies per-texture UV transformations and bakes them to stand-alone vtexture coordinate channels. UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material key for more information. This step processes all textures with transformed input UV coordinates and generates new (pretransformed) UV channel transformations, so you will probably want to specify this step. UV transformations are usually implemented in realtime apps by transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous) transformation matrix. Searches for duplicated meshes and replaces them with a reference to the first mesh. This is time consuming, so don't use it if you have no time. Its main purpose is to work around the limitation with some file formats that don't support instanced meshes, so exporters duplicate meshes. Attempts to reduce the number of meshes (and draw calls). This is recommended to be used together with and is fully compatible with both and . Optimizes scene hierarchy. Nodes with no animations, bones, lights, or cameras assigned are collapsed and joined. Node names can be lost during this step, you can specify names of nodes that should'nt be touched or modified with AI_CONFIG_PP_OG_EXCLUDE_LIST. Use this flag with caution. Most simple files will be collapsed to a single node, complex hierarchies are usually completely lost. That's not the right choice for editor environments, but probably a very effective optimization if you just want to get the model data, convert it to your own format and render it as fast as possible. This flag is designed to be used with for best results. Scenes with thousands of extremely small meshes packed in deeply nested nodes exist for almost all file formats. Usage of this and usually fixes them all and makes them renderable. Flips all UV coordinates along the y-axis and adjusts material settings/bitangents accordingly. Flips face winding order from CCW (default) to CW. Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit. Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones removed if and only if all bones within the scene qualify for removal. This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to setup the global scaling factor. A post processting step to embed textures. This will remove external data dependencies for textures. If a texture's file does not exist at the specified path (due, for instance, to an absolute path generate on another system), it will check if a file with the same name exists at the root folder of the imported model, and if so, embeds that. If the step to generate normals is set, it will not run if normals already exist. This flag will force that step to run even if normals are present. Drops normals for all faces of all meshes. This is ignored if no normals are present. Face normals are shared between all points of a single face, so a single point can have multiple normals, which forces the library to duplicate vertices in some cases. is *senseless* then. This process gives sense back to . Generate bounding boxes for each mesh. Enumerates components of the scene or mesh data that can be excluded from the import using the post process step RemoveComponent. No components to be excluded. Removes normal vectors Removes tangents/binormals Removes all color sets. Removes all texture UV sets. Remove all boneweights from all meshes. Scenegraph nodes corresponding to the bones are NOT removed. Use OptimizeGraph step to remove them. Removes all node animations. Coressponding scenegraph nodes are NOT removed. Use OptimizeGraph step to remove them. Removes all embedded textures. Removes all light sources. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all cameras. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all meshes. Removes all materials. One default material will be generated. Enumerates geometric primitive types. Point primitive. This is just a single vertex in the virtual world. A face has one index for such a primitive. Line primitive. This is a line defined through a start and an end position. A face contains exactly two indices for such a primitive. Triangle primitive, consisting of three indices. A n-Gon that has more than three edges (thus is not a triangle). Defines an animation channel behaves outside the defined time range. This corresponds to the prestate and poststates of the animation node. The value from the default node transformation is taken. The nearest key value is used without interpolation. The value of the nearest two keys is linearly extrapolated for the current time value. The animation is repeated. If the animation key goes from n to m and the current time is t, use the value at (t - n ) % (|m-n|). Defines the methods of mesh morphing supported. No morphing. Interpolation between morph targets. Normalized morphing between morph targets. Relative morphing between morph targets. Enumerates all supported light sources. Unknown light. Directional light source that has a well-defined direction but is infinitely far away, e.g. the sun. Point light source that has a well-defined position in space but is omni-directional, e.g. a light bulb. Spot light source emits light from a position in space, in a certain direction that is limited by an angle, like a cone. Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color. An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector. Defines alpha blending flags, how the final color value of a pixel is computed, based on the following equation: sourceColor * sourceBlend + destColor * destBlend Where the destColor is the previous color in the frame buffer and sourceColor is the material color before the transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property. Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha) Additive blending: sourcecolor * 1 + destColor * 1. Defines all shading models supported by the library. The list of shading modes has been taken from Blender. See Blender documentation for more information. No shading mode defined. Flat shading. Shading is done on a per-face basis and is diffuse only. Also known as 'faceted shading'. Simple Gouraud shading. Phong Shading. Phong-Blinn Shading. Toon-shading, also known as a 'comic' shader. OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness of the material into account. Minnaert shading model. Extension to standard Lambertian shading, taking the "darkness" of the material into account. CookTorrance shading model. Special shader for metallic surfaces. No shading at all. Constant light influence of 1.0. Fresnel shading. Defines some mixed flags for a particular texture. This corresponds to the AI_MAT_KEY_TEXFLAGS property. The texture's color values have to be inverted (componentwise 1-n). Explicit request to the application to process the alpha channel of the texture. This is mutually exclusive with . These flags are set if the library can say for sure that the alpha channel is used/is not used. If the model format does not define this, iti s left to the application to decide whether the texture alpha channel - if any - is evaluated or not. Explicit request to the application to ignore the alpha channel of the texture. This is mutually exclusive with . Defines how UV coordinates outside the [0..1] range are handled. Commonly referred to as the 'wrapping mode' A texture coordinate u|v is translated to u % 1| v % 1. Texture coordinates outside [0...1] are clamped to the nearest valid value. A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero and 1 - (u % 1) | 1 - (v % 1) otherwise. If the texture coordinates for a pixel are outside [0...1] the texture is not applied to that pixel. Defines how texture coordinates are generated Real-time applications typically require full UV coordinates. So the use of step is highly recommended. It generates proper UV channels for non-UV mapped objects, as long as an accurate description of how the mapping should look like is given. Coordinates are taken from the an existing UV channel. The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates are to be taken from since meshes can have more than one UV channel. Spherical mapping Cylinder mapping Cubic mapping Planar mapping Unknown mapping that is not recognied. Defines how the Nth texture of a specific type is combined with the result of all previous layers. Example (left: key, right: value): DiffColor0 - gray DiffTextureOp0 - TextureOperation.Multiply DiffTexture0 - tex1.png DiffTextureOp0 - TextureOperation.Add DiffTexture1 - tex2.png Written as an equation, the final diffuse term for a specific pixel would be: diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib; T = T1 * T2 T = T1 + T2 T = T1 - T2 T = T1 / T2 T = (T1 + T2) - (T1 * T2) T = T1 + (T2 - 0.5) Defines the purpose of a texture. No texture, but the value can be used as a 'texture semantic'. A diffuse texture that is combined with the result of the diffuse lighting equation. A specular texture that is combined with the result of the specular lighting equation. An ambient texture that is combined with the ambient lighting equation. An emissive texture that is added to the result of the lighting calculation. It is not influenced by incoming light, instead it represents the light that the object is naturally emitting. A height map texture. by convention, higher gray-scale values stand for higher elevations from some base height. A tangent-space normal map. There are several conventions for normal maps and Assimp does (intentionally) not distinguish here. A texture that defines the glossiness of the material. This is the exponent of the specular (phong) lighting equation. Usually there is a conversion function defined to map the linear color values in the texture to a suitable exponent. The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite the opposite. A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements. A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light. A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications. PBR texture property. Diffuse/albedo map containing base color regardless of the object surface type. PBR texture property. This is not documented in assimp native, but is a normal map in a PBR workflow. PBR texture property. Emissive color map, similar to . PBR texture property. Describes how reflective the object surface is. PBR texture property. Describes how rough or smooth the object surface is. Dedicated ambient occlusion map, some older formats may set this as a texture. An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any further postprocessing. Defines the state of the imported scene data structure. Default state of the scene, it imported successfully. Specifies that the scene data structure that was imported is not complete. This flag bypasses some internal validations and allows the import of animation skeletons, material libaries, or camera animation paths using Assimp. Most applications won't support such data. This flag is set by the post process step if validation is successful. In a validated scene you can be sure that any cross references in the data structure (e.g. vertex indices) are valid. This flag is set by the post process step if validation is successful, but some issues have been found. This can for example mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful for applications which do not capture Assimp's log output. This flag is set by the post process step. It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the verbose format, all vertices are unique where no vertex is ever referenced by more than one face. Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles, in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the z-axis stores the elevation at a specific point. TER (Terragen) and HMP (3D Game Studio) are height map formats. Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from as that has internal meanings about postprocessing steps. Enumerates Assimp function result codes. Function returned successfully. There was an error. Assimp ran out of memory. Seek origins for Assimp's virtual file system API. Beginning of the file Current position of the file pointer. End of the file, offsets must be negative. Enumerates predefined log streaming destinations. Stream log to a file Stream log to the standard output Stream log to the standard error output. MSVC only: Stream the log to the debugger (this relies on OutputDebugString from the Win32 SDK). Defines material property types. Array of single-precision (32 bit) floats. Array of double-precision (64 bit) floats. Property is a string. Array of 32 bit integers. Byte buffer where the content is undefined. Enumerates how the native Assimp DLL was compiled Assimp compiled as a shared object (Windows: DLL); Assimp was compiled against STLport Assimp was compiled as a debug build Assimp was compiled with the boost work around. Assimp was compiled built to run single threaded. Defines how UV coordinates should be transformed. Scaling is evaluated. Rotation is evaluated. Translation is evaluated. Defines the desired file I/O mode is when opening a new file. Open the file for writing. Open the file for writing binary data to it. Open the file for writing text data to it. Open the file for reading. Open the file for reading binary data from it. Open the file for reading text data from it. Defines flags that indicate level of support for common features for a given importer. Indicates there is a textual encoding of the file format and it is supported. Indicates there is a binary encoding of the file format and it is supported. Indicates there is a compressed encoding of the file format and it is supported. Indicates that the importer reads only a very particular subset of the file format. This is common for formats that cannot easily be mapped to the Scene data structure. Indicates that the importer is experimental and used with caution - this is only reserved for importers still in development, and not typically yet in released production code. Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in turn can reference another and so on. This is used to allow exporters to write more than one output for a given scene, such as material files. Existence of such files depends on the format. The stream representation of an ExportDataBlob is as follows: String: Name of the Blob int: Length of Binary Data byte[]: Binary Data bool: If has next data blob String: Name of nested blob int: Length of nested blob binary data byte[]: Nested blob binary data bool: If nested blob has next data blob .... Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files that are nested will have names. Get the blob data. Gets the next data blob. Gets if the blob data is valid. Creates a new ExportDataBlob. Unmanaged structure. Creates a new ExportDataBlob. Name Data Writes the data blob to the specified stream. Output stream Reads a data blob from the specified stream. Input stream Data blob Describes a file format which Assimp can export to. Gets a short string ID to uniquely identify the export format. E.g. "collada" or "obj". Gets a short description of the file format to present to users. Gets the recommended file extension for the exported file in lower case. Constructs a new ExportFormatDescription. Unmanaged structure A single face in a mesh, referring to multiple vertices. This can be a triangle if the index count is equal to three, or a polygon if the count is greater than three. Since multiple primitive types can be contained in a single mesh, this approach allows you to better examine how the mesh is constructed. If you use the post process step flag during import, then each mesh will be homogenous where primitive type is concerned. Gets the number of indices defined in the face. Gets if the face has faces (should always be true). Gets or sets the indices that refer to positions of vertex data in the mesh's vertex arrays. Constructs a new instance of the class. Constructs a new instance of the class. Face indices Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Simple implementation of an IOSystem that searches for files on the disk. This implementation can be given a number of search directories that it will attempt to locate the file in first, before using the file path given by Assimp. That way, you can load models that have files distributed in a number of other directories besides the root model's. Constructs a new FileIOSystem that does not have any search directories. Constructs a new FileIOSystem that uses the specified search directories. Search directories to search for files in Sets the search directories the FileIOSystem will use when searching for files. Directory paths Gets the search directories the FileIOSystem is using. Directory paths Opens a stream to a file. Path to the file Desired file access mode The IO stream Finds the first file that matches the file name (name + extension) in the search paths. File name (+ extension) to search for Found file path True if the file was found, false otherwise Wraps a FileStream. Metadata and feature support information for a given importer. Gets the name of the importer (e.g. Blender3D Importer) Gets the original author (blank if unknown or assimp team). Gets the name of the current maintainer, if empty then the author maintains. Gets any implementation comments. Gets the features supported by the importer. Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot. Represents an object that can be marshaled to and from a native representation. Managed object type Native value type Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Custom marshaler for usage with the for performing marshaling to-and-from unmanaged memory for non-blittable types. A type must be attributed with to automatically have an instance of its marshaler be utilized. Gets the native data size in bytes. Marshals the managed object to the unmanaged chunk of memory. Managed object to marshal. Unmanaged chunk of memory to write to. Marshals the managed object from the unmanaged chunk of memory. Unmanaged chunk of memory to read from. Managed object marshaled. Defines a stream to some file input or output source. This object is responsible for reading/writing data that is used by Assimp. Gets whether or not this IOStream has been disposed. Gets the original path to file given by Assimp. Gets the original desired file access mode. Gets whether the stream is in fact valid - that is, the input/output has been properly located and can be read/written. Constructs a new IOStream. Path to file given by Assimp Desired file access mode Constructs a new IOStream. Path to file given by Assimp Desired file access mode True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Initializes the system by setting up native pointers for Assimp to the specified functions. A reference to each supplied callback is held on to avoid it being GC'ed. Handles write requests. Handles read requests. Handles tell requests. Handles size requests. Handles seek requests. Handles flush requests. Additional user data, if any. Finalizes an instance of the class. Disposes of resources held by the IOStream. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Writes data to the stream. Data to write Number of bytes to write Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured. Reads data from the stream. Byte buffer to store the read data in Number of bytes to read Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured. Sets the current file position pointer. Offset in bytes from the origin Origin reference ReturnCode indicating success or failure. Gets the current file position pointer (in bytes). Current file position pointer (in bytes) Gets the total file size (in bytes). File size in bytes Flushes all data currently in the stream buffers. Closes the stream - flushing any data not yet read/written and disposes of resources. Callback for Assimp that handles writes. Callback for Assimp that handles reads. Callback for Assimp that handles tell requests. Callback for Assimp that handles size requests. Callback for Assimp that handles seeks. Callback for Assimp that handles flushes. Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening files to read during import, and creating/writing to files during export. Gets whether or not this IOSystem has been disposed. Gets the number of currently opened streams. Constructs a new IOSystem. Constructs a new IOSystem. True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Initializes the system by setting up native pointers for Assimp to the specified functions. Handles open file requests. Handles close file requests. Additional user data, if any. Finalizes an instance of the class. Opens a stream to a file. Path to the file Desired file access mode The IO stream Closes a stream that is owned by this IOSystem. Stream to close Closes all outstanding streams owned by this IOSystem. Disposes of all resources held by this object. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Callback for Assimp that handles a file being opened. Callback for Assimp that handles a file being closed. Describes a light source in the scene. Assimp supports multiple light sources including spot, point, and directional lights. All are defined by a single structure and distinguished by their parameters. Lights have corresponding nodes in the scenegraph. Some file formats such as 3DS and ASE export a "target point", e.g. the point a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode of a spotlight's main node called "spotName.Target". However, this is just additional information then, the transform tracks of the main node make the spot light already point in the right direction. Gets or sets the name of the light source. This corresponds to a node present in the scenegraph. Gets or sets the type of light source. This should never be undefined. Gets or sets the inner angle of a spot light's light cone. The spot light has maximum influence on objects inside this angle. The angle is given in radians, it is 2PI for point lights and defined for directional lights. Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside this angle. The angle is given in radians. It is 2PI for point lights and undefined for directional lights. The outer angle must be greater than or equal to the inner angle. Gets or sets the constant light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att0 variable in the equation and is undefined for directional lights. Gets or sets the linear light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d) This member corresponds to the att1 variable in the equation and is undefined for directional lights. Gets or sets the quadratic light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att2 variable in the equation and is undefined for directional lights. Gets or sets the position of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for directional lights. Gets or sets the direction of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the diffuse color of the light source. The diffuse light color is multiplied with the diffuse material color to obtain the final color that contributes to the diffuse shading term. Gets or sets the specular color of the light source. The specular light color is multiplied with the specular material color to obtain the final color that contributes to the specular shading term. Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient material color to obtain the final color that contributes to the ambient shading term. Gets or sets the Width (X) and Height (Y) of the area that represents an light. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Callback delegate for Assimp's LogStream. Log message Supplied user data Represents a log stream, which receives all log messages and streams them somewhere. Gets or sets, if verbose logging is enabled globally. Gets or sets the user data to be passed to the callback. Gets whether the logstream has been disposed or not. Gets whether or not the logstream is currently attached to the library. Static constructor. Constructs a new LogStream. Whether to immediately initialize the system by setting up native pointers. Set this to false if you want to manually initialize and use custom function pointers for advanced use cases. Constructs a new LogStream. User-supplied data True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. User-supplied data Finalizes an instance of the class. Detaches all active logstreams from the library. Gets all active logstreams that are currently attached to the library. Collection of active logstreams attached to the library. Attaches the logstream to the library. Detaches the logstream from the library. Logs a message. Message contents Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Override this method to log a message for a subclass of Logstream, if no callback was set. Message User data Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages. Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving messages until it is re-attached. Callback for Assimp that handles a message being logged. Initializes the stream by setting up native pointers for Assimp to the specified functions. Callback that is marshaled to native code, a reference is held on to avoid it being GC'ed. User callback, if any. Defaults to console if null. User data, or empty. Additional assimp user data, if any. Log stream that writes messages to the Console. Constructs a new console logstream. Constructs a new console logstream. User supplied data Log a message to the console. Message Userdata A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally all this information is stored as key-value pair properties. The class contains many convienence methods and properties for accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present, and if they aren't a default value will be returned. Gets the number of properties contained in the material. Checks if the material has a name property. Gets the material name value, if any. Default value is an empty string. Checks if the material has a two-sided property. Gets if the material should be rendered as two-sided. Default value is false. Checks if the material has a shading-mode property. Gets the shading mode. Default value is , meaning it is not defined. Checks if the material has a wireframe property. Gets if wireframe should be enabled. Default value is false. Checks if the material has a blend mode property. Gets the blending mode. Default value is . Checks if the material has an opacity property. Gets the opacity. Default value is 1.0f. Checks if the material has a transparency factor property. Gets the transparency factor. This is used to make a surface more or less opaque (0 = opaque, 1 = transparent). Default value is 0.0f. Checks if the material has a bump scaling property. Gets the bump scaling. Default value is 0.0f; Checks if the material has a shininess property. Gets the shininess. Default value is 0.0f; Checks if the material has a shininess strength property. Gets the shininess strength. Default vaulue is 1.0f. Checks if the material has a reflectivty property. Gets the reflectivity. Default value is 0.0f; Checks if the material has a color diffuse property. Gets the color diffuse. Default value is white. Checks if the material has a color ambient property. Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f). Checks if the material has a color specular property. Gets the color specular. Default value is black. Checks if the material has a color emissive property. Gets the color emissive. Default value is black. Checks if the material has a color transparent property. Gets the color transparent. Default value is black. Checks if the material has a color reflective property. Gets the color reflective. Default value is black. Gets if the material has a diffuse texture in the first texture index. Gets or sets diffuse texture properties in the first texture index. Gets if the material has a specular texture in the first texture index. Gets or sets specular texture properties in the first texture index. Gets if the material has a ambient texture in the first texture index. Gets or sets ambient texture properties in the first texture index. Gets if the material has a emissive texture in the first texture index. Gets or sets emissive texture properties in the first texture index. Gets if the material has a height texture in the first texture index. Gets or sets height texture properties in the first texture index. Gets if the material has a normal texture in the first texture index. Gets or sets normal texture properties in the first texture index. Gets if the material has an opacity texture in the first texture index. Gets or sets opacity texture properties in the first texture index. Gets if the material has a displacement texture in the first texture index. Gets or sets displacement texture properties in the first texture index. Gets if the material has a light map texture in the first texture index. Gets or sets light map texture properties in the first texture index. Gets if the material has an ambient occlusion map in in the first texture index. Gets or sets ambient occlusion texture properties in the first texture index. Gets if the material has a reflection texture in the first texture index. Gets or sets reflection texture properties in the first texture index. Determines if the material is part of a PBR workflow or not. Gets a group accessor for any PBR properties in the material. Gets if the material has embedded shader source code. Gets a group accessor for any embedded shader source code in the material. Constructs a new instance of the class. Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". This is the name that is used as the material dictionary key. Key basename, this must not be null or empty Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The fully qualified name Gets the non-texture properties contained in this Material. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename The material property, if it exists Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The material property, if it exists Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property The material property, if it exists Checks if the material has the specified non-texture property. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename True if the property exists, false otherwise. Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. True if the property exists, false otherwise. Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property True if the property exists, false otherwise. Adds a property to this material. Material property True if the property was successfully added, false otherwise (e.g. null or key already present). Removes a non-texture property from the material. Property name True if the property was removed, false otherwise Removes a property from the material. Name of the property Property texture type Property texture index True if the property was removed, false otherwise Removes a property from the material. Fully qualified name of the property ({basename},{texType},{texIndex}) True if the property was removed, false otherwise Removes all properties from the material; Gets -all- properties contained in the Material. All properties in the material property map. Gets all the number of textures that are of the specified texture type. Texture type Texture count Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True if the texture properties were added or modified Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True to only set the texture's file path, false otherwise True if the texture properties were added or modified Removes a texture from the material - this bulk removes a property for each field. If the texture has no file path, nothing is removed Texture to remove True if the texture was removed, false otherwise. Gets a texture that corresponds to the type/index. Texture type Texture index Texture description True if the texture was found in the material Gets all textures that correspond to the type. Texture type The array of textures Gets all textures in the material. The array of textures Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Groups all PBR workflow properties into a single accessor. Gets if the material has a base color map (albedo/diffuse) texture in the first texture index. Gets or sets the base color map (albedo/diffuse) texture properties in the first texture index. Gets if the material has a normal map texture in the first texture index. Gets or sets the normal map texture properties in the first texture index. Gets if the material has an emission color map texture in the first texture index. Gets or sets the emission color map texture properties in the first texture index. Gets if the material has a metalness map texture in the first texture index. Gets or sets the metalness map texture properties in the first texture index. Gets if the material has a roughness map texture in the first texture index. Gets or sets the roughness map texture properties in the first texture index. Constructs new property group accessor. Material Groups all the properties for shader sources in a single accessor. Gets if the material has a property for shader language type. Gets or sets what language (HLSL, GLSL, etc) any shader source code in this material is of. Gets if the material has a property for vertex shader source code. Gets or sets vertex shader source code. Gets if the material has a property for fragment (pixel) shader source code. Gets or sets fragment (pixel) shader source code. Gets if the material has a property for geometry shader source code. Gets or sets geometry shader source code. Gets if the material has a property for tesselation shader source code. Gets or sets tesselation shader source code. Gets if the material has a property for primitive (domain) shader source code. Gets or sets primitive (domain) shader source code. Gets if the material has a property for compute shader source code. Gets or sets compute shader source code. Constructs new property group accessor. Material A key-value pairing that represents some material property. Gets or sets the property key name. E.g. $tex.file. This corresponds to the "AiMatKeys" base name constants. Gets or sets the type of property. Gets the raw byte data count. Checks if the property has data. Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods. Gets or sets the texture type semantic, for non-texture properties this is always . Gets or sets the texture index, for non-texture properties this is always zero. Gets the property's fully qualified name. Format: "{base name},{texture type semantic},{texture index}". E.g. "$clr.diffuse,0,0". This is the key that is used to index the property in the material property map. Constructs a new instance of the class. Constructs a new instance of the class. Constructs a buffer property. Base name of the property Property value Constructs a new instance of the class. Constructs a float property. Base name of the property Property value Constructs a new instance of the class. Constructs an integer property. Base name of the property Property value Constructs a new instance of the class. Constructs a boolean property. Name of the property Property value Constructs a new instance of the class. Creates a string property. Base name of the property Property value Constructs a new instance of the class. Creates a texture property. Base name of the property Property value Texture type Texture index Constructs a new instance of the class. Creates a float array property. Base name of the property Property values Constructs a new instance of the class. Creates a int array property. Base name of the property Property values Constructs a new instance of the class. Creates a Color3D property. Base name of the property Property value Constructs a new instance of the class. Creates a Color4D property. Base name of the property Property value Gets the property raw data as a float. Float Sets the property raw data with a float. Float. True if successful, false otherwise Gets the property raw data as a double. Double Sets the property raw data with a double. Double. True if successful, false otherwise. Gets the property raw data as an integer. Integer Sets the property raw data as an integer. Integer True if successful, false otherwise Gets the property raw data as a string. String Sets the property raw data as string. String True if successful, false otherwise Gets the property raw data as a float array. Number of elements to get Float array Gets the property raw data as a float array. Float array Sets the property raw data as a float array. Values to set True if successful, otherwise false Gets the property raw data as a double array. Double array Sets the property raw data as a double array. Values to set True if successful, otherwise false Gets the property raw data as an integer array. Number of elements to get Integer array Gets the property raw data as an integer array. Integer array Sets the property raw data as an integer array. Values to set True if successful, otherwise false Gets the property raw data as a boolean. Boolean Sets the property raw data as a boolean. Boolean value True if successful, false otherwise Gets the property raw data as a Color3D. Color3D Sets the property raw data as a Color3D. Color3D True if successful, false otherwise Gets the property raw data as a Color4D. Color4D Sets the property raw data as a Color4D. Color4D True if successful, false otherwise Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a 3x3 matrix. Assimp docs say their matrices are always row-major, and it looks like they're only describing the memory layout. Matrices are treated as column vectors however (X base in the first column, Y base the second, and Z base the third) Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix3x3. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Constructs a new Matrix3x3. A 4x4 matrix to construct from, only taking the rotation/scaling part. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 4x4 matrix to a 3x3 matrix. 4x4 matrix 3x3 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). Memory layout is row major. Right handed conventions are used by default. Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 1, column 4 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 2, column 4 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Value at row 3, column 4 of the matrix Value at row 4, column 1 of the matrix Value at row 4, column 2 of the matrix Value at row 4, column 3 of the matrix Value at row 4, column 4 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix4x4. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 1, column 4 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 2, column 4 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Element at row 3, column 4 Element at row 4, column 1 Element at row 4, column 2 Element at row 4, column 3 Element at row 4, column 4 Constructs a new Matrix4x4. Rotation matrix to copy values from. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Decomposes a transformation matrix into its original scale, rotation, and translation components. The scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And the translation is the output position for the x, y, z axes. Vector to hold the scaling component Quaternion to hold the rotation component Vector to hold the translation component Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton quaternion. The translation receives the output position for the x, y, z axes. Quaternion to hold the rotation component Vector to hold the translation component Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a translation matrix. Translation vector The translation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 3x3 matrix to a 4x4 matrix. 3x3 matrix 4x4 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Delegate for performing unmanaged memory cleanup. Location in unmanaged memory of the value to cleanup True if the unmanaged memory should be freed, false otherwise Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions. Marshals an array of managed values to a c-style unmanaged array (void*). Managed type Native type Array of managed values Pointer to unmanaged memory Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to an unmanaged array of pointers (void**). Managed type Native type Array of managed values True if the pointer is an array of pointers, false otherwise. Pointer to unmanaged memory Marshals an array of managed values from a c-style unmanaged array (void*). Managed type Native type Pointer to unmanaged memory Number of elements to marshal Marshaled managed values Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from an unmanaged array of pointers (void**). Managed type Native type Pointer to unmanaged memory Number of elements to marshal True if the pointer is an array of pointers, false otherwise. Marshaled managed values Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Managed array of structs Pointer to unmanaged memory Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Pointer to unmanaged memory Number of elements to read Managed array Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup True if the pointer is an array of pointers, false otherwise. Marshals a managed value to unmanaged memory. Managed type Unmanaged type Managed value to marshal Pointer to unmanaged memory Marshals a managed value from unmanaged memory. Managed type Unmanaged type Pointer to unmanaged memory The marshaled managed value Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise use the write methods for blittable types. Struct type Struct to marshal Pointer to unmanaged chunk of memory which must be allocated prior to this call Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Size of the struct in bytes. Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Array of structs Total size, in bytes, of the array's contents. Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime cannot move the object around in memory, which may degrade performance. Object to pin. Pointer to pinned object's memory location. Unpins an object in memory, allowing it to once again freely be moved around by the runtime. Object to unpin. Convienence method to dispose all items in the collection IDisposable type Collection of disposables Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value. Underlying value type. Enum type. Value to cast. Enum value. Allocates unmanaged memory. This memory should only be freed by this helper. Size to allocate Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper. Size to allocate Value the memory will be cleared to, by default zero. Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Frees unmanaged memory that was allocated by this helper. Pointer to unmanaged memory to free. Checks if the memory is aligned to the specified alignment. Pointer to the memory Alignment value, by defauly 16-byte True if is aligned, false otherwise. Swaps the value between two references. Type of data to swap. First reference Second reference Computes a hash code using the FNV modified algorithmm. Byte data to hash. Hash code for the data. Reads a stream until the end is reached into a byte array. Based on Jon Skeet's implementation. It is up to the caller to dispose of the stream. Stream to read all bytes from Initial buffer length, default is 32K The byte array containing all the bytes from the stream Compares two arrays of bytes for equivalence. First array of data. Second array of data. True if both arrays contain the same data, false otherwise. Clears the memory to the specified value. Pointer to the memory. Value the memory will be cleared to. Number of bytes, starting from the memory pointer, to clear. Computes the size of the struct type. Struct type Size of the struct in bytes. Casts the by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the readonly by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the pointer into a by-ref value of the specified type. Struct type. Memory location. By-ref value. Casts one by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Casts one readonly by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Computes the size of the struct array. Struct type Array of structs Total size, in bytes, of the array's contents. Adds an offset to the pointer. Pointer Offset Pointer plus the offset Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer. Destination memory location Source memory location Number of bytes to copy Returns the number of elements in the enumerable. Type of element in collection. Enumerable collection The number of elements in the enumerable collection. Converts typed element array to a byte array. Struct type Element array Byte array copy or null if the source array was not valid. Converts a byte array to a typed element array. Struct type Byte array Typed element array or null if the source array was not valid. Copies bytes from a byte array to an element array. Struct type Source byte array Starting index in destination array Destination element array Starting index in destination array Number of elements to copy Copies bytes from an element array to a byte array. Struct type Source element array Starting index in source array Destination byte array Starting index in destination array Number of elements to copy Reads data from the memory location into the array. Struct type Pointer to memory location Array to store the copied data Zero-based element index to start writing data to in the element array. Number of elements to copy Reads a single element from the memory location. Struct type Pointer to memory location The read value Reads a single element from the memory location. Struct type Pointer to memory location The read value. Writes data from the array to the memory location. Struct type Pointer to memory location Array containing data to write Zero-based element index to start reading data from in the element array. Number of elements to copy Writes a single element to the memory location. Struct type Pointer to memory location The value to write A mesh represents geometry with a single material. Gets or sets the mesh name. This tends to be used when formats name nodes and meshes independently, vertex animations refer to meshes by their names, or importers split meshes up, each mesh will reference the same (dummy) name. Gets or sets the primitive type. This may contain more than one type unless if option is not set. Gets or sets the index of the material associated with this mesh. Gets the number of vertices in this mesh. This is the count that all per-vertex lists should be the size of. Gets if the mesh has a vertex array. This should always return true provided no special scene flags are set. Gets the vertex position list. Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count. Gets the vertex normal list. Gets if the mesh has tangents and bitangents. It is not possible for one to be without the other. If it does exist, the count should be the same as the vertex count. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of faces contained in the mesh. Gets if the mesh contains faces. If no special scene flags are set, this should always return true. Gets the mesh's faces. Each face will contain indices to the vertices. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds to the texture coordinate channel index. Gets the number of bones that influence this mesh. Gets if this mesh has bones. Gets the bones that influence this mesh. Gets the number of mesh animation attachments that influence this mesh. Gets if this mesh has mesh animation attachments. Gets the mesh animation attachments that influence this mesh. Gets or sets the morph method used when animation attachments are used. Gets or sets the axis aligned bounding box that contains the extents of the mesh. Constructs a new instance of the class. Constructs a new instance of the class. Name of the mesh. Constructs a new instance of the class. Primitive types contained in the mesh. Constructs a new instance of the class. Name of the mesh Primitive types contained in the mesh. Checks if the mesh has vertex colors for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if vertex colors are present in the channel. Checks if the mesh has texture coordinates for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if texture coordinates are present in the channel. Convienence method for setting this meshe's face list from an index buffer. Index buffer Indices per face True if the operation succeeded, false otherwise (e.g. not enough data) Convienence method for accumulating all face indices into a single index array. int index array Convienence method for accumulating all face indices into a single index array as unsigned integers (the default from Assimp, if you need them). uint index array Convienence method for accumulating all face indices into a single index array. short index array Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A mesh attachment store per-vertex animations for a particular frame. You may think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual relationship between the time line and mesh attachments is established by the mesh animation channel, which references singular mesh attachments by their ID and binds them to a time offset. Gets or sets the mesh animation name. Gets the number of vertices in this mesh. This is a replacement for the host mesh's vertex count. Likewise, a mesh attachment cannot add or remove per-vertex attributes, therefore the existance of vertex data will match the existance of data in the mesh. Checks whether the attachment mesh overrides the vertex positions of its host mesh. Gets the vertex position list. Checks whether the attachment mesh overrides the vertex normals of its host mesh. Gets the vertex normal list. Checks whether the attachment mesh overrides the vertex tangents and bitangents of its host mesh. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets or sets the weight of the mesh animation. Constructs a new instance of the class. Checks if the mesh attachment overrides a particular set of vertex colors on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximumb number of vertex color channels. Channel index True if vertex colors are present in the channel. Checks if the mesh attachment overrides a particular set of texture coordinates on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximum number of texture coordinate channels. Channel index True if texture coordinates are present in the channel. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes vertex-based animations for a single mesh or a group of meshes. Meshes carry the animation data for each frame. The purpose of this object is to define keyframes, linking each mesh attachment to a particular point in a time. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of meshkeys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds an anim mesh (referenced by an index) to a specific point in time. The time of this key. Index of the anim mesh that corresponds to this keyframe. Constructs a new MeshKey. The time of this key. Index of the anim mesh that corresponds to this keyframe. Tests equality between two keys. The first key The second key True if the key's indices are the same, false otherwise Tests inequality between two keys. The first key The second key True if the key's indices are not equal, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes morph-based keyframe animations for a single mesh or a group of meshes. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of mesh morph keys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh morph keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Reads the unmanaged data from the native value. Input native value Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds a morph animation mesh to a specific point in time. Gets or sets the time of this keyframe. Gets the values at the time of this keyframe. Number of values must equal number of weights. Gets the weights at the time of this keyframe. Number of weights must equal number of values. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a container for holding metadata, representing as key-value pairs. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an entry in a metadata container. Gets the type of metadata. Gets the metadata data stored in this entry. Constructs a new instance of the struct. Type of the data. The data. Tests equality between two entries. First entry Second entry True if the entries are equal, false otherwise Tests inequality between two entries. First entry Second entry True if the entries are not equal, false otherwise Gets the data as the specified type. If it cannot be casted to the type, then null is returned. Type to cast the data to. Casted data or null. Determines whether the specified is equal to this instance. The to compare with this instance. True if the specified is equal to this instance; otherwise, false. Indicates whether the current object is equal to another object of the same type. An object to compare with this object. True if the current object is equal to the parameter; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Attribute for assocating a type with an instance. Gets the associated marshaler. Constructs a new instance of the class. Type that implements Thrown if the type is null. Thrown if the type does not implement . A node in the imported model hierarchy. Gets or sets the name of the node. Gets or sets the transformation of the node relative to its parent. Gets the node's parent, if it exists. Gets the number of children that is owned by this node. Gets if the node contains children. Gets the node's children. Gets the number of meshes referenced by this node. Gets if the node contains mesh references. Gets the indices of the meshes referenced by this node. Meshes can be shared between nodes, so there is a mesh collection owned by the scene that each node can reference. Gets the node's metadata container. Constructs a new instance of the class. Constructs a new instance of the class. Name of the node Constructs a new instance of the class. Name of the node Parent of the node Finds a node with the specific name, which may be this node or any children or children's children, and so on, if it exists. Node name The node or null if it does not exist Gets a value indicating whether this instance is native blittable. Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes the animation of a single node. The name specifies the bone/node which is affected by this animation chanenl. The keyframes are given in three separate seties of values, one for each position, rotation, and scaling. The transformation matrix is computed from these values and replaces the node's original transformation matrix at a specific time. This means all keys are absolute and not relative to the bone default pose. The order which the transformations are to be applied is scaling, rotation, and translation (SRT). Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no negative time values, but they are not forbidden. Gets or sets the name of the node affected by this animation. It must exist and it must be unique. Gets the number of position keys in the animation channel. Gets if this animation channel contains position keys. Gets the position keys of this animation channel. Positions are specified as a 3D vector. If there are position keys, there should also be -at least- one scaling and one rotation key. Gets the number of rotation keys in the animation channel. Gets if the animation channel contains rotation keys. Gets the rotation keys of this animation channel. Rotations are given as quaternions. If this exists, there should be -at least- one scaling and one position key. Gets the number of scaling keys in the animation channel. Gets if the animation channel contains scaling keys. Gets the scaling keys of this animation channel. Scalings are specified in a 3D vector. If there are scaling keys, there should also be -at least- one position and one rotation key. Gets or sets how the animation behaves before the first key is encountered. By default the original transformation matrix of the affected node is used. Gets or sets how the animation behaves after the last key was processed. By default the original transformation matrix of the affected node is taken. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage. Gets the number of elements contained in the . Gets or sets the element at the specified index. The child index Gets a value indicating whether the is read-only. true if the is read-only; otherwise, false. Constructs a new instance of the class. Parent node Adds an item to the . The object to add to the . Adds a range of items to the list. Item array Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if is found in the ; otherwise, false. Copies collection contents to the array The array to copy to. Index of the array to start copying. Determines the index of a specific item in the . The object to locate in the . The index of if found in the list; otherwise, -1. Inserts an item to the at the specified index. The zero-based index at which should be inserted. The object to insert into the . Removes the item at the specified index. The zero-based index of the item to remove. Removes the first occurrence of a specific object from the . The object to remove from the . true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . Copies elements in the collection to a new array. Array of copied elements Returns an enumerator that iterates through the collection. A that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. Represents a plane in three-dimensional euclidean space where A, B, C are components of the plane normal and D is the distance along the normal from the origin to the plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Constructs a new Plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Static class containing preset properties for post processing options. PostProcess configuration for (some) Direct3D conventions, left handed geometry, upper left origin for UV coordinates, and clockwise face order, suitable for CCW culling. PostProcess configuration for optimizing data for real-time. Does the following steps: , , , , , and PostProcess configuration for optimizing data for real-time rendering. Does the following steps: , , , , , , , , , and PostProcess configuration for heavily optimizing the data for real-time rendering. Includes all flags in as well as , , and A 4D vector that represents a rotation. Rotation component of the quaternion/ X component of the vector part of the quaternion. Y component of the vector part of the quaternion. Z component of the vector part of the quaternion. Constructs a new Quaternion. W component X component Y component Z component Constructs a new Quaternion from a rotation matrix. Rotation matrix to create the Quaternion from. Constructs a new Quaternion from three euler angles. Pitch Yaw Roll Constructs a new Quaternion from an axis-angle. Axis Angle about the axis Normalizes the quaternion. Transforms this quaternion into its conjugate. Returns a matrix representation of the quaternion. Rotation matrix representing the quaternion. Spherical interpolation between two quaternions. Start rotation when factor == 0 End rotation when factor == 1 Interpolation factor between 0 and 1, values beyond this range yield undefined values Interpolated quaternion. Rotates a point by this quaternion. Point to rotate Quaternion representing the rotation Rotated point. Multiplies two quaternions. First quaternion Second quaternion Resulting quaternion Tests equality between two quaternions. First quaternion Second quaternion True if the quaternions are equal, false otherwise. Tests inequality between two quaternions. First quaternion Second quaternion True if the quaternions are not equal, false otherwise. Tests equality between two quaternions. Quaternion to compare True if the quaternions are equal. Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a rotation for a given time. The time of this key. The rotation of this key. Constructs a new QuaternionKey. Time of the key. Quaternion rotation at the time frame. Tests equality between two keys. The first key The second key True if the key's rotations are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's rotations are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their rotations are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Defines a 3D ray with a point of origin and a direction. Origin of the ray in space. Direction of the ray. Constructs a new Ray. Origin of the ray. Direction of the ray. Represents a completely imported model or scene. Everything that was imported from the given file can be accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory and Assimp's read only copy is released. Gets or sets the state of the imported scene. By default no flags are set, but issues can arise if the flag is set to incomplete. Gets or sets the root node of the scene graph. There will always be at least the root node if the import was successful and no special flags have been set. Presence of further nodes depends on the format and content of the imported file. Gets if the scene contains meshes. Unless if no special scene flags are set this should always be true. Gets the number of meshes in the scene. Gets the meshes contained in the scene, if any. Gets if the scene contains any lights. Gets the number of lights in the scene. Gets the lights in the scene, if any. Gets if the scene contains any cameras. Gets the number of cameras in the scene. Gets the cameras in the scene, if any. Gets if the scene contains embedded textures. Gets the number of embedded textures in the scene. Gets the embedded textures in the scene, if any. Gets if the scene contains any animations. Gets the number of animations in the scene. Gets the animations in the scene, if any. Gets if the scene contains any materials. There should always be at least the default Assimp material if no materials were loaded. Gets the number of materials in the scene. There should always be at least the default Assimp material if no materials were loaded. Gets the materials in the scene. Gets the metadata of the scene. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. Gets or sets the name of the scene. Constructs a new instance of the class. Constructs a new instance of the class. Name of the scene Clears the scene of all components. Gets an embedded texture by a string. The string may be a texture ID in the format of "*1" or is the file name of the texture. Texture ID or original file name. Embedded texture or null if it could not be found. Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to , the memory is owned by AssimpNet and cannot be freed by the native library. Scene data Unmanaged scene or NULL if the scene is null. Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. The unmanaged scene data The managed scene, or null if the pointer is NULL Frees unmanaged memory allocated -ONLY- in . To free an unmanaged scene allocated by the unmanaged Assimp library, call the appropiate function. Pointer to unmanaged scene data. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a texel in ARGB8888 format. Blue component. Green component. Red component. Alpha component. Constructs a new Texel. Blue component. Green component. Red component. Alpha component. Tests equality between two texels. First texel Second texel True if the texels are equal, false otherwise. Tests inequality between two texels. First texel Second texel True if the texels are not equal, false otherwise. Implicitly converts a texel to a Color4D. Texel to convert Converted Color4D Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes all the values pertaining to a particular texture slot in a material. Gets the texture file path. Gets the texture type semantic. Gets the texture index in the material. Gets the texture mapping. Gets the UV channel index that corresponds to this texture from the mesh. Gets the blend factor. Gets the texture operation. Gets the texture wrap mode for the U coordinate. Gets the texture wrap mode for the V coordinate. Gets misc flags. Constructs a new TextureSlot. Texture filepath Texture type semantic Texture index in the material Texture mapping UV channel in mesh that corresponds to this texture Blend factor Texture operation Texture wrap mode for U coordinate Texture wrap mode for V coordinate Misc flags Defines configurable properties for importing models. All properties have default values. Setting config properties are done via the SetProperty* methods in AssimpMethods. Enables time measurements. If enabled the time needed for each part of the loading process is timed and logged. Type: bool. Default: false Sets Assimp's multithreading policy. This is ignored if Assimp is built without boost.thread support. Possible values are: -1 to let Assimp decide, 0 to disable multithreading, and nay number larger than 0 to force a specific number of threads. This is only a hint and may be ignored by Assimp. Type: integer. Default: -1 Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Type: Bool. Default: false. Specifies the maximum angle that may be between two vertex tangents that their tangents and bitangents are smoothed during the step to calculate the tangent basis. The angle specified is in degrees. The maximum value is 175 degrees. Type: float. Default: 45 degrees Specifies the maximum angle that may be between two face normals at the same vertex position that their normals will be smoothed together during the calculate smooth normals step. This is commonly called the "crease angle". The angle is specified in degrees. Maximum value is 175 degrees (all vertices smoothed). Type: float. Default: 175 degrees Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. Type: string. Default: "colormap.lmp" Configures the step to keep materials matching a name in a given list. This is a list of 1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Tabs or carriage returns are treated as whitespace. If a material matches one of these names, it will not be modified or removed by the post processing step nor will other materials be replaced by a reference to it. Default: string. Default: "" Configures the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option could be of used if you have a scene hierarchy that contains important additional information which you intend to parse. Type: bool. Default: false Configures the step to normalize all vertex components into the -1...1 range. That is, a bounding box for the whole scene is computed where the maximum component is taken and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension of the input data. Type: bool. Default: false Configures the step to remove degenerated primitives from the import immediately. The default behavior converts degenerated triangles to lines and degenerated lines to points. Type: bool. Default: false Configures the step to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if is set to true. Type: bool. Default: false Configures the step to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns and tabs are treated as white space. If a node matches one of these names, it will not be modified or removed by the postprocessing step. Type: string. Default: "" Sets the maximum number of triangles a mesh can contain. This is used by the step to determine whether a mesh must be split or not. Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES Sets the maximum number of vertices in a mesh. This is used by the step to determine whether a mesh must be split or not. Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES Sets the maximum number of bones that can affect a single vertex. This is used by the step. Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS Sets the size of the post-transform vertex cache to optimize vertices for. This is for the step. The size is given in vertices. Of course you can't know how the vertex format will exactly look like after the import returns, but you can still guess what your meshes will probably have. The default value *has* resulted in slight performance improvements for most Nvidia/AMD cards since 2002. Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE Input parameter to the step. It specifies the parts of the data structure to be removed. This is a bitwise combination of the flag. If no valid mesh is remaining after the step is executed, the import FAILS. Type: integer. Default: 0 Input parameter to the step. It specifies which primitive types are to be removed by the step. This is a bitwise combination of the flag. Specifying ALL types is illegal. Type: integer. Default: 0 Input parameter to the step. It specifies the floating point accuracy for animation values, specifically the epislon during the comparison. The step checks for animation tracks where all frame values are absolutely equal and removes them. Two floats are considered equal if the invariant abs(n0-n1) > epislon holds true for all vector/quaternion components. Type: float. Default: 0.0f (comparisons are exact) Input parameter to the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Type: Bool. Default: false. Input parameter to the step. It specifies which UV transformations are to be evaluated. This is bitwise combination of the flag. Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations) A hint to Assimp to favour speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-processing steps to use faster code paths if possible. A value not equal to zero stands for true. Type: integer. Default: 0 Maximum bone cone per mesh for the step. Meshes are split until the max number of bones is reached. Type: integer. Default: 60 Source UV channel for tangent space computation. The specified channel must exist or an error will be raised. Type: integer. Default: 0 Threshold used to determine if a bone is kept or removed during the step. Type: float. Default: 1.0f Require all bones to qualify for deboning before any are removed. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: Matrix4x4. Default: Identity Matrix Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Type: Float. Default: 1.0f. Applies application-specific scale to the global scale factor to allow for backwards compatibility. Type: Float. Default: 1.0f. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). The libary reads only one frame of models with vertex animations. By default this is the first frame. The default value is 0. This option applies to all importers. However, it is also possible to override the global setting for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which you want to override the global setting. Type: integer. Default: 0 See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. Type: bool. Default: true Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. Type: bool. Default: true Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). Type: bool. Default: true Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Type: bool. Default: false Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. Type: bool. Default: true Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. Type: bool. Default: true Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. Type: string. Default: "default" Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. Type: string. Default: "" Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty Type: bool. Default: false (All layers are loaded) Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Type: bool. Default: false Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Type: integer. Default: taken from file Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Type: integer. Default: taken from file Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. Type: integer. Default: 100 The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. Type: string. Default: "Scene.Material" The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. Type: Bool. Default: false. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Type: Bool. Default: true. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Type: Bool. Default: true. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Type: Float. Default: 10.0f Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Type: Integer. Default: 32 Specifies whether the collada loader will ignore the up direction. Type: Bool. Default: false Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The default is to use the id tag (resp. sid tag, if no id tag is present) instead. Type: Bool. Default: false. Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first. Type: bool. Default: true. Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer will read materials, otherwise this has no effect. Type: Bool. Default: false. Specifies whether the FBX importer will read materials. Type: Bool. Default: true. Specifies whether the FBX importer will read embedded textures. Type: Bool. Default: true. Specifies whether the fbx importer will use the legacy embedded texture naming. Type: Bool. Default: false. Specifies whether the FBX importer will read cameras. Type: Bool. Default: true. Specifies whether the FBX importer will read light sources. Type: Bool. Default: true. Specifies whether the FBX importer will read animations. Type: Bool. default: true. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Type: Bool. Default: false. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Type: Bool. Default: true. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Type: Bool. Default: true. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Type: Bool. Default: false. Specifies whether the importer will load multiple animations. Type: Bool. Default: true. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Type: Bool. Default: true. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Type: Bool. Default: false. Specifies whether the export should be able to export point clouds. When this flag is not defined the render data has to contain valid faces. Point clouds are only a collection of vertices which have no spatial organization by a face and the validation process will remove them. Enabling this feature will switch off the flag and enable the functionality to export pure point clouds. Type: Bool. Default: false. Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants are grouped according to their usage or where they're found in the Assimp include files. Default value for . Default value for . Default value for . Default value for . Default value for Defines the maximum number of indices per face (polygon). Defines the maximum number of bone weights. Defines the maximum number of vertices per mesh. Defines the maximum number of faces per mesh. Defines the maximum number of vertex color sets per mesh. Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh. Defines the default bone count limit. Defines the deboning threshold. Defines the maximum length of a string used in AiString. Defines the default color material. Defines the default textured material (if the meshes have UV coords). Static class containing material key constants. A fully qualified mat key name here means that it's a string that combines the mat key (base) name, its texture type semantic, and its texture index into a single string delimited by commas. For non-texture material properties, the texture type semantic and texture index are always zero. Material name (String) Material name (String) Two sided property (boolean) Two sided property (boolean) Shading mode property (ShadingMode) Shading mode property (ShadingMode) Enable wireframe property (boolean) Enable wireframe property (boolean) Blending function (BlendMode) Blending function (BlendMode) Opacity (float) Opacity (float) Transparency Factor (float) Transparency Factor (float) Bumpscaling (float) Bumpscaling (float) Shininess (float) Shininess (float) Reflectivity (float) Reflectivity (float) Shininess strength (float) Shininess strength (float) Refracti (float) Refracti (float) Diffuse color (Color4D) Diffuse color (Color4D) Ambient color (Color4D) Ambient color (Color4D) Specular color (Color4D) Specular color (Color4D) Emissive color (Color4D) Emissive color (Color4D) Transparent color (Color4D) Transparent color (Color4D) Reflective color (Color4D) Reflective color (Color4D) Background image (String) Background image (String) Texture base name UVWSRC base name Texture op base name Mapping base name Texture blend base name. Mapping mode U base name Mapping mode V base name Texture map axis base name UV transform base name Texture flags base name Shader language type (string) Shader language type (string) Vertex shader source code (string) Vertex shader source code (string) Fragment/Pixel shader source code (string) Fragment/Pixel shader source code (string) Geometry shader source code (string) Geometry shader source code (string) Tesselation shader source code (string) Tesselation shader source code (string) Primitive/Domain shader source code (string) Primitive/Domain shader source code (string) Compute shader source code (string) Compute shader source code (string) Helper function to get the fully qualified name of a texture property type name. Takes in a base name constant, a texture type, and a texture index and outputs the name in the format: "baseName,TextureType,texIndex" Base name Texture type Texture index Fully qualified texture name Helper function to get the base name from a fully qualified name of a material property type name. The format of such a string is: "baseName,TextureType,texIndex" Fully qualified material property name. Base name of the property type. Singleton that governs access to the unmanaged Assimp library functions. Default name of the unmanaged library. Based on runtime implementation the prefix ("lib" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically. Gets the AssimpLibrary instance. Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only, then it will not utilize multiple threads during import. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a scene from a stream. This uses the "aiImportFileFromMemory" function. The stream can be from anyplace, not just a memory stream. It is up to the caller to dispose of the stream. Stream containing the scene data Post processing flags A hint to Assimp to decide which importer to use to process the data Property store containing the config name-values, may be null. Pointer to the unmanaged data structure. Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled from the managed scene structure - only for scenes whose memory was allocated by the native library! Pointer to the unmanaged scene data structure. Applies a post-processing step on an already imported scene. Pointer to the unmanaged scene data structure. Post processing steps to run. Pointer to the unmanaged scene data structure. Gets all supported export formats. Array of supported export formats. Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file. Scene to export, it is the responsibility of the caller to free this when finished. Format id describing which format to export to. Pre processing flags to operate on the scene during the export. Exported binary blob, or null if there was an error. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified and the scene be exported. Valid scene to be copied Modifyable copy of the scene Attaches a log stream callback to catch Assimp messages. Pointer to an instance of AiLogStream. Enables verbose logging. True if verbose logging is to be enabled or not. Gets if verbose logging is enabled. True if verbose logging is enabled, false otherwise. Detaches a logstream callback. Pointer to an instance of AiLogStream. A return code signifying if the function was successful or not. Detaches all logstream callbacks currently attached to Assimp. Create an empty property store. Property stores are used to collect import settings. Pointer to property store Deletes a property store. Pointer to property store Sets an integer property value. Pointer to property store Property name Property value Sets a float property value. Pointer to property store Property name Property value Sets a string property value. Pointer to property store Property name Property value Sets a matrix property value. Pointer to property store Property name Property value Retrieves a color value from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The color if it exists. If not, the default Color4D value is returned. Retrieves an array of float values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The float array, if it exists Retrieves an array of integer values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The integer array, if it exists Retrieves a material property with the specific key from the material. Material to retrieve the property from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The material property, if found. Retrieves a string from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The string, if it exists. If not, an empty string is returned. Gets the number of textures contained in the material for a particular texture type. Material to retrieve the data from Texture Type semantic The number of textures for the type. Gets the texture filepath contained in the material. Material to retrieve the data from Texture type semantic Texture index The texture filepath, if it exists. If not an empty string is returned. Gets all values pertaining to a particular texture from a material. Material to retrieve the data from Texture type semantic Texture index Returns the texture slot struct containing all the information. Gets the last error logged in Assimp. The last error message logged. Checks whether the model format extension is supported by Assimp. Model format extension, e.g. ".3ds" True if the format is supported, false otherwise. Gets all the model format extensions that are currently supported by Assimp. Array of supported format extensions Gets a collection of importer descriptions that detail metadata and feature support for each importer. Collection of importer descriptions Gets the memory requirements of the scene. Pointer to the unmanaged scene data structure. The memory information about the scene. Creates a quaternion from the 3x3 rotation matrix. Quaternion struct to fill Rotation matrix Decomposes a 4x4 matrix into its scaling, rotation, and translation parts. 4x4 Matrix to decompose Scaling vector Quaternion containing the rotation Translation vector Transposes the 4x4 matrix. Matrix to transpose Transposes the 3x3 matrix. Matrix to transpose Transforms the vector by the 3x3 rotation matrix. Vector to transform Rotation matrix Transforms the vector by the 4x4 matrix. Vector to transform Matrix transformation Multiplies two 4x4 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Multiplies two 3x3 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Creates a 3x3 identity matrix. Matrix to hold the identity Creates a 4x4 identity matrix. Matrix to hold the identity Gets the Assimp legal info. String containing Assimp legal info. Gets the native Assimp DLL's minor version number. Assimp minor version number Gets the native Assimp DLL's major version number. Assimp major version number Gets the native Assimp DLL's revision version number. Assimp revision version number Returns the branchname of the Assimp runtime. The current branch name. Gets the native Assimp DLL's current version number as "major.minor.revision" string. This is the version of Assimp that this wrapper is currently using. Unmanaged DLL version Gets the native Assimp DLL's current version number as a .NET version object. Unmanaged DLL version Get the compilation flags that describe how the native Assimp DLL was compiled. Compilation flags Defines all the unmanaged assimp C-function names. Defines all of the delegates that represent the unmanaged assimp functions. Enumerates supported platforms. Windows platform. Linux platform. Mac platform. An attribute that represents the name of an unmanaged function to import. Name of the unmanaged function. Constructs a new . Name of the function. Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load unmanaged libraries. Occurs when the unmanaged library is loaded. Occurs when the unmanaged library is freed. Queries if the unmanaged library has been loaded or not. Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional names can be set in the (e.g. to load versioned DLLs) Gets the path to the unmanaged library DLL that is currently loaded. Gets the resolver used to find the unmanaged library DLL when loading. Gets or sets whether an is thrown if the unmanaged DLL fails to load for whatever reason. By default this is true. Queries if the OS is 64-bit, if false then it is 32-bit. Constructs a new . Default name (NOT path) of the unmanaged library. Delegate types to instantiate and load. Gets an enum representing the current OS that is application is executing on. Platform enumeration. Loads the unmanaged library using the . True if the library was found and successfully loaded. Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness. Path to the 32-bit DLL Path to the 64-bit DLL True if the library was found and successfully loaded. Loads the unmanaged library using the supplied path. Path to the unmanaged DLL. True if the library was found and successfully loaded. Frees the unmanaged library that is currently loaded. True if the library was sucessfully freed. Gets a delegate based on the unmanaged function name. Type of delegate. Name of unmanaged function that is exported by the library. The delegate, or null if not found. If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library from the default path. This function is thread safe. Called when the library is loaded. Called when the library is freed. Resolves unmanaged DLLs for . The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs), an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See for the search strategy. Gets the platform that the application is running on. Constructs a new instance of the class. Platform we're resolving binaries for. Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets an override 32-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 32-bit and 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution: Search user-specified probing paths. Search {AppBaseDirectory}/runtimes/{RID}/native/. Search {AppBaseDirectory}/. Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/. The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID is the Runtime Identifier based on the platform/architecture, see also Microsoft's RID Catalog. Name of the library to attempt to resolve. Full file path to the library, or the file name if not found (e.g. "libXYZ.so"). Represents an aiScene struct. unsigned int, flags about the state of the scene aiNode*, root node of the scenegraph. Number of meshes contained. aiMesh**, meshes in the scene. Number of materials contained. aiMaterial**, materials in the scene. Number of animations contained. aiAnimation**, animations in the scene. Number of embedded textures contained. aiTexture**, textures in the scene. Number of lights contained. aiLight**, lights in the scene. Number of cameras contained. aiCamera**, cameras in the scene. aiMetadata*, The global metadata assigned to the scene itself. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. The name of the scene itself. Number of skeletons contained. aiSkeleton**, skeletons in the scene. Internal data, do not touch Represents an aiNode struct. Name of the node. Node's transform relative to its parent. aiNode*, node's parent. Number of children the node owns. aiNode**, array of nodes this node owns. Number of meshes referenced by this node. unsigned int*, array of mesh indices. aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any. Represents an aiMetadataEntry struct. Type of metadata. Pointer to data. Represents an aiMetadata struct. Length of the Keys and Values arrays. aiString*, array of keys. May not be NULL. Each entry must exist. aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value. Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs. unsigned int, bitwise flag detailing types of primitives contained. Number of vertices in the mesh, denotes length of -all- per-vertex arrays. Number of faces in the mesh. aiVector3D*, array of positions. aiVector3D*, array of normals. aiVector3D*, array of tangents. aiVector3D*, array of bitangents. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example. Max_Value is defined as . aiFace*, array of faces. Number of bones in the mesh. aiBone**, array of bones. Material index referencing the material in the scene. Optional name of the mesh. Number of attachment meshes. NOT CURRENTLY IN USE. aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE. unsigned int, method of morphing when anim meshes are specified. Axis aligned bounding box. aiString[Max_Value], pointer to array of texture coordinate names. Max_Value is defined as . Represents an aiTexture struct. Width of the texture. Height of the texture. sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that maps to one byte. 8 for string + 1 for terminator. aiTexel*, array of texel data. Texture original filename. Sets the format hint. Format hint - must be 3 characters or less Gets the format hint. The format hint Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref. AiTexture The format hint Represents an aiFace struct. Number of indices in the face. unsigned int*, array of indices. Represents an aiBone struct. Name of the bone. Number of weights. Bone armature, used for skeleton conversion. Bone needed in scene, used for skeleton conversion. VertexWeight*, array of vertex weights. Matrix that transforms the vertex from mesh to bone space in bind pose Represents an aiMaterialProperty struct. Name of the property (key). Textures: Specifies texture usage. None texture properties have this zero (or None). Textures: Specifies the index of the texture. For non-texture properties this is always zero. Size of the buffer data in bytes. This value may not be zero. Type of value contained in the buffer. char*, byte buffer to hold the property's value. Represents an aiMaterial struct. aiMaterialProperty**, array of material properties. Number of key-value properties. Storage allocated for key-value properties. Represents an aiNodeAnim struct. Name of the node affected by the animation. The node must exist and be unique. Number of position keys. VectorKey*, position keys of this animation channel. Positions are 3D vectors and are accompanied by at least one scaling and one rotation key. The number of rotation keys. QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions). If there are rotation keys there will be at least one scaling and one position key. Number of scaling keys. VectorKey*, scaling keys of this animation channel. Scalings are specified as a 3D vector, and if there are scaling keys, there will at least be one position and one rotation key. Defines how the animation behaves before the first key is encountered. Defines how the animation behaves after the last key was processed. Represents an aiMeshAnim struct. Name of the mesh to be animated. Empty string not allowed. Number of keys, there is at least one. aiMeshkey*, the key frames of the animation. There must exist at least one. Represents an aiMeshMorphKey struct. The time of this key. unsigned int*, values at the time of this key. double*, weights at the time of this key. unsigned int, the number of values/weights. Represents an aiMeshMorphAnim struct. aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). unsigned int, number of key frames. Must be at least one. aiMeshMorphKey*, key frames of the animation. Represents an aiAnimation struct. Name of the animation. Duration of the animation in ticks. Ticks per second, 0 if not specified in imported file. Number of bone animation channels, each channel affects a single node. aiNodeAnim**, node animation channels. Each channel affects a single node. Number of mesh animation channels. Each channel affects a single mesh and defines vertex-based animation. aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. Number of mesh morph animation channels. Each channel affects a single mesh and defines morphing animation. aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. Represents an aiLight struct. Name of the light. Type of light. Position of the light. Direction of the spot/directional light. Up direction of the light source in space. Undefined for point lights. Attenuation constant value. Attenuation linear value. Attenuation quadratic value. Diffuse color. Specular color. Ambient color. Spot light inner angle. Spot light outer angle. Width (X) and Height (Y) of the area that represents an light. Represents an aiCamera struct. Name of the camera. Position of the camera. Up vector of the camera. Viewing direction of the camera. Field Of View of the camera. Near clip plane distance. Far clip plane distance. The Aspect ratio. Represents an aiString struct. Byte length of the UTF-8 string, NOT logical length. Actual string data. Constructs a new instance of the struct. The string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref. AiString AiString string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. AiString string data Convienence method for setting the AiString string (and length). String data to set True if the operation was successful, false otherwise. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Represents a log stream, which receives all log messages and streams them somewhere. Function pointer that gets called when a message is to be logged. char*, user defined opaque data. Represents the memory requirements for the different components of an imported scene. All sizes in in bytes. Size of the storage allocated for texture data, in bytes. Size of the storage allocated for material data, in bytes. Size of the storage allocated for mesh data, in bytes. Size of the storage allocated for node data, in bytes. Size of the storage allocated for animation data, in bytes. Size of the storage allocated for camera data, in bytes. Size of the storage allocated for light data, in bytes. Total storage allocated for the imported scene, in bytes. Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs. Anim Mesh name aiVector3D*, replacement position array. aiVector3D*, replacement normal array. aiVector3D*, replacement tangent array. aiVector3D*, replacement bitangent array. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int, number of vertices. float, weight of the AnimMesh. Describes a variety of information about an importer. char*, full name of the importer (e.g. Blender3D Importer) char*, original author (blank if unknown or assimp team) char*, current maintainer, left blank if the author maintains. char*, implementation comments. E.g. unimplemented features. unsigned int, features supported by the importer. unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. "xml dae"). Multiple importers may respond to the same file extension, assim Describes a file format which Assimp can export to. char*, a short string ID to uniquely identify the export format. e.g. "collada" or "obj" char*, a short description of the file format to present to users. char*, a recommended file extension of the exported file in lower case. Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly. size_t, size of the data in bytes. void*, the data. AiString, name of the blob. aiExportDataBlob*, pointer to the next blob in the chain. Contains callbacks to implement a custom file system to open and close files. Function pointer to open a new file. Function pointer used to close an existing file. Char*, user defined opaque data. Contains callbacks to read and write to a file opened by a custom file system. Function pointer to read from a file. Function pointer to write to a file. Function pointer to retrieve the current position of the file cursor. Function pointer to retrieve the size of the file. Function pointer to set the current position of the file cursor. Function pointer to flush the file contents. Char*, user defined opaque data. Callback delegate for Assimp's LogStream. Log message char* pointer to user data that is passed to the callback Callback delegate for a custom file system, to write to a file. Pointer to an AiFile instance Char* pointer to data to write (casted from a void*) Size of a single element in bytes to write Number of elements to write Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured. Callback delegate for a custom file system, to read from a file. Pointer to an AiFile instance. Char* pointer that will store the data read (casted from a void*) Size of a single element in bytes to read Number of elements to read Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured. Callback delegate for a custom file system, to tell offset/size information about the file. Pointer to an AiFile instance. Returns the current file cursor or the file size in bytes. May be -1 if an error has occured. Callback delegate for a custom file system, to flush the contents of the file to the disk. Pointer to an AiFile instance. Callback delegate for a custom file system, to set the current position of the file cursor. Pointer to An AiFile instance. Offset from the origin. Position used as a reference Returns success, if successful Callback delegate for a custom file system, to open a given file and create a new AiFile instance. Pointer to an AiFileIO instance. Path to the target file Read-write permissions to request Pointer to an AiFile instance. Callback delegate for a custom file system, to close a given file and free its memory. Pointer to an AiFileIO instance. Pointer to an AiFile instance that will be closed. Fixed length array for representing the color channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the texture coordinate channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Defines how an UV channel is transformed. Translation on the U and V axes. Default is 0|0 Scaling on the U and V axes. Default is 1|1. Rotation in counter-clockwise direction, specfied in radians. The rotation center is 0.5f|0.5f and the default value is zero. Represents a two-dimensional vector. X component. Y component Gets or sets the component value at the specified zero-based index in the order of XY (index 0 access X, 1 access Y. If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector2D. X component Y component Constructs a new Vector2D with both components set the same value. Value to set both X and Y to Sets the X and Y values. X component Y component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a three-dimensional vector. X component. Y component. Z component. Gets or sets the component value at the specified zero-based index in the order of XYZ (index 0 access X, 1 access Y, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector3D. X component Y component Z component Constructs a new Vector3D. Vector2D containing the X, Y values Z component Constructs a new Vector3D where each component is set to the same value. Value to set X, Y, and Z to Sets the X, Y, and Z values. X component Y component Z component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Calculates the cross product of two vectors. First vector Second vector Resulting vector Calculates the dot product of two vectors. First vector Second vector Resulting vector Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Transforms this vector by a 3x3 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Transforms this vector by a 4x4 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a 3D vector for a given time. The time of this key. The 3D vector value of this key. Constructs a new VectorKey. The time of this key. The 3D vector value of this key. Tests equality between two keys. The first key The second key True if the key's 3D vectors are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's 3D vectors are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their 3D vectors are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a single influence of a bone on a vertex. Index of the vertex which is influenced by the bone. Strength of the influence in range of (0...1). All influences from all bones at one vertex amounts to 1. Constructs a new VertexWeight. Index of the vertex. Weight of the influence. Returns a that represents this instance. A that represents this instance. Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or replaces the entire method body. Recommended types to use are generally blittable structs. Casts the by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the readonly by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the pointer to a by-ref value of the specified type. Type to cast to. Pointer. Ref to the value, as the new type. Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to receive the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to write the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Computes the size of the type (inlined). Type of data. Size of the type in bytes. Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Writes a single element to the memory location (inlined). Type of data. Pointer to memory location. Value to be written. Writes a single element to the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value to be written. Reads a single element from the memory location (inlined). Type of data. Pointer to memory location. Value read. Reads a single element from the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value read. Copies the number of bytes from one pointer to the other (inlined). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Copies the number of bytes from one pointer to the other (inlined, unaligned copy). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Clears the memory to a specified value (inlined). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. Clears the memory to a specified value (inlined, unaligned init). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. ================================================ FILE: ThirdParty/AssimpNet/5.0.0/lib/netstandard2.0/AssimpNet.xml ================================================ AssimpNet An animation consists of keyframe data for a number of nodes. For each node affected by the animation, a separate series of data is given. Gets or sets the name of the animation. If the modeling package the data was exported from only supports a single animation channel, this name is usually empty. Gets or sets the duration of the animation in number of ticks. Gets or sets the number of ticks per second. It may be zero if it is not specified in the imported file. Gets if the animation has node animation channels. Gets the number of node animation channels where each channel affects a single node. Gets the node animation channels. Gets if the animation has mesh animations. Gets the number of mesh animation channels. Gets the number of mesh morph animation channels. Gets the mesh animation channels. Gets the mesh morph animation channels. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion functionality is offered to bypass loading model data into managed memory. Gets if the context has been disposed. Gets or sets the uniform scale for the model. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets whether this context is using a user-defined IO system for file handling. Gets the property configurations set to this context. This is only used during import. Constructs a new instance of the class. Imports a model from the stream without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Post processing flags, if any Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the specified file without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Imports a model from the specified file. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file Post processing flags, if any The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Post processing steps used for the import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Post processing steps used for the import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system is used instead. Custom file system implementation Removes the currently set custom file system implementation from the importer. Gets the model formats that are supported for export by Assimp. Export formats supported Gets the model formats that are supported for import by Assimp. Import formats supported Gets descriptions for each importer that assimp has registered. Descriptions of supported importers. Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension, they are called in the order that they were registered. File extension to query importer support for. Importer description or null if it does not exist. Checks if the format extension (e.g. ".dae" or ".obj") is supported for import. Model format True if the format is supported, false otherwise Checks if the format extension (e.g. ".dae" or ".obj") is supported for export. Model format True if the format is supported, false otherwise Sets a configuration property to the context. This is only used during import. Config to set Removes a set configuration property by name. Name of the config property Removes all configuration properties from the context. Checks if the context has a config set by the specified name. Name of the config property True if the config is present, false otherwise Disposes of resources held by the context. These include IO systems still attached. Releases unmanaged and - optionally - managed resources True to release both managed and unmanaged resources; False to release only unmanaged resources. AssimpNet general exception. Initializes a new instance of the class. Initializes a new instance of the class. The error message. Initializes a new instance of the class. Name of the param. The error message. Initializes a new instance of the class. The error message The inner exception. Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame hierarchy and by which it can be addressed by animations. In addition it has a number of influences on vertices and a matrix relating the mesh position to the position of the bone at the time of binding. Gets or sets the name of the bone. Gets the number of vertex influences the bone contains. Gets if the bone has vertex weights - this should always be true. Gets the influence weights of this bone, by vertex index. Gets or sets the matrix that transforms from bone space to mesh space in bind pose. This matrix describes the position of the mesh in the local space of this bone when the skeleton was bound. Thus it can be used directly to determine a desired vertex position, given the world-space transform of the bone when animated, and the position of the vertex in mesh space. It is sometimes called an inverse-bind matrix or inverse-bind pose matrix. Constructs a new instance of the class. Constructs a new instance of the class. Name of the bone Bone's offset matrix Vertex weights Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an axis-aligned bounding box Minimum point of the bounding box. Maximum point of the bounding box. Constructs a new BoundingBox. Minimum point. Maximum point. Tests equality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are equal, false otherwise Tests inequality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are not equal, false otherwise Tests equality between this BoundingBox and another BoundingBox. BoundingBox to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes a right-handed camera in the scene. An important aspect is that the camera itself is also part of the scenegraph, meaning any values such as the direction vector are not *absolute*, they can be relative to the coordinate system defined by the node which corresponds to the camera. This allows for camera animations. Gets or sets the name of the camera. This corresponds to a node in the scenegraph with the same name. This node specifies the position of the camera in the scene hierarchy and can be animated. Gets or sets the position of the camera relative to the coordinate space defined by the corresponding node. THe default value is 0|0|0. Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the corresponding node. The 'right' vector of the camera is the cross product of the up and direction vectors. The default value is 0|1|0. Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node. The default value is 0|0|1. Gets or sets the half horizontal field of view angle, in radians. The FoV angle is the angle between the center line of the screen and the left or right border. The default value is 1/4PI. Gets or sets the distance of the near clipping plane from the camera. The value may not be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f; Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must be further than the near clippling plane. The default value is 1000.0f. The ratio between the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid floating-point inaccuracies which can lead to z-fighting. Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file. The default value is zero. Gets a right-handed view matrix. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a RGB color. Red component. Green component. Blue component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color3D. Red component Green component Blue component Constructs a Color3D where each component is set to the same value. Value to set R, G, B components Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a Red-Green-Blue-Alpha (RGBA) color. Color values range from 0 to 1. Red component. Green component. Blue component. Alpha component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color4D. Red component Green component Blue component Alpha component Constructs a Color4D. Alpha is set to 1.0. Red component Green component Blue component Constructs a Color4D where each component is set to the same value. Value to set R, G, B, A components Constructs a Color4D from a Color3D. Alpha is set to 1.0. RGB values Constructs a Color4D from a Color3D and alpha value. RGB values Alpha value Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Base property config. Gets the property name. Creates a new property config that has no active Assimp property store. Name of the property. Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Applies the property value to the given Assimp property store. Assimp property store Describes an integer configuration property. Gets the property value. Gets the default property value. Constructs a new IntengerPropertyConfig. Name of the property Property value constructs a new IntegerPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a float configuration property. Gets the property value. Gets the default property value. Constructs a new FloatPropertyConfig. Name of the property Property value Constructs a new FloatPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a configuration property. Gets the property value. Gets the default property value. Constructs a new MatrixPropertyConfig. Name of the property Property value Constructs a new MatrixPropertyConfig. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a boolean configuration property. Gets the property value. Gets the default property value. Constructs a new BooleanPropertyConfig. Name of the property Property value Constructs a new BooleanPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a string configuration property. Gets the property value. Gets the default property value. Constructs a new StringPropertyConfig. Name of the property Property value Constructs a new StringPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Convience method for constructing a whitespace delimited name list. Array of names White-space delimited list as a string Configuration to enable time measurements. If enabled, each part of the loading process is timed and logged. Default value is false. Gets the string name used by MeasureTimeConfig. Constructs a new MeasureTimeConfig. True if the loading process should be timed or not. Configuration to set Assimp's multithreading policy. Possible values are -1 to let Assimp decide, 0 to disable multithreading, or any number larger than zero to force a specific number of threads. This is only a hint and may be ignored by Assimp. Default value is -1. Gets the string name used by MultithreadingConfig. Constructs a new MultithreadingConfig. A value of -1 will let Assimp decide, a value of zero to disable multithreading, and a value greater than zero to force a specific number of threads. Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Default value is false. Gets the string name used by NoSkeletonMeshConfig. Constructs a new NoSkeletonMeshConfig. True if dummy skeleton mesh generation should be disabled, false otherwise. Configuration to set the maximum angle that may be between two vertex tangents/bitangents when they are smoothed during the step to calculate the tangent basis. The default value is 45 degrees. Gets the string name used by TangentSmoothingAngleConfig. Constructs a new TangentSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the maximum angle between two face normals at a vertex when they are smoothed during the step to calculate smooth normals. This is frequently called the "crease angle". The maximum and default value is 175 degrees. Gets the string name used by NormalSmoothingAngleConfig. Constructs a new NormalSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. The default value is "colormap.lmp". Gets the string name used by MDLColorMapConfig. Constructs a new MDLColorMapConfig. Colormap filename Configuration for the the step to determine what materials to keep. If a material matches one of these names it will not be modified or removed by the post processing step. Default is an empty string. Gets the string name used by MaterialExcludeListConfig. Constructs a new MaterialExcludeListConfig. Material names containing whitespace must be enclosed in single quotation marks. List of material names that will not be modified or replaced by the remove redundant materials post process step. Configuration for the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option can be useful if you have a scene hierarchy that contains important additional information which you intend to parse. The default value is false. Gets the string name used by KeepSceneHierarchyConfig. Constructs a new KeepHierarchyConfig. True to keep the hierarchy, false otherwise. Configuration for the step to normalize all vertex components into the -1...1 range. The default value is false. Gets the string name used by NormalizeVertexComponentsConfig. Constructs a new NormalizeVertexComponentsConfig. True if the post process step should normalize vertex components, false otherwise. Configuration for the step to remove degenerted primitives from the import immediately. The default value is false, where degenerated triangles are converted to lines, and degenerated lines to points. Gets the string name used by RemoveDegeneratePrimitivesConfig. Constructs a new RemoveDegeneratePrimitivesConfig. True if the post process step should remove degenerate primitives, false otherwise. Configuration for the step. If true, the area of the triangles are checked to see if they are greater than 1e-6. If so, the triangle is removed if is set to true. Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig. Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig. True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise. Configuration for the step to preserve nodes matching a name in the given list. Nodes that match the names in the list will not be modified or removed. Identifiers containing whitespaces must be enclosed in single quotation marks. The default value is an empty string. Gets the string name used by NodeExcludeListConfig. Constructs a new NodeExcludeListConfig. List of node names Configuration for the step that specifies the maximum number of triangles a mesh can contain. The default value is MeshTriangleLimitConfigDefaultValue. Gets the string name used by MeshTriangleLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshTriangleLimitConfig. Max number of triangles a mesh can contain. Configuration for the step that specifies the maximum number of vertices a mesh can contain. The default value is MeshVertexLimitConfigDefaultValue. Gets the string name used by MeshVertexLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshVertexLimitConfig. Max number of vertices a mesh can contain. Configuration for the step that specifies the maximum number of bone weights per vertex. The default value is VertexBoneWeightLimitConfigDefaultValue. gets the string name used by VertexBoneWeightLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new VertexBoneWeightLimitConfig. Max number of bone weights per vertex. Configuration for the step that specifies the size of the post-transform vertex cache. The size is given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue. Gets the string name used by VertexCacheConfig. Gets the defined default vertex cache size, this corresponds to the . Constructs a new VertexCacheSizeConfig. Size of the post-transform vertex cache, in number of vertices. Configuration for the step that specifies which parts of the data structure is to be removed. If no valid mesh remains after the step, the import fails. The default value i . Gets the string name used by RemoveComponentConfig. Constructs a new RemoveComponentConfig. Bit-wise combination of components to exclude. Configuration for the step that specifies which primitive types are to be removed by the step. Specifying all primitive types is illegal. The default value is zero specifying none. Gets the string name used by SortByPrimitiveTypeConfig. Constructs a new SortByPrimitiveTypeConfig. Bit-wise combination of primitive types to remove Configuration for the step that specifies the floating point accuracy for animation values, specifically the episilon during comparisons. The default value is 0.0f. Gets the string name used by AnimationAccuracyConfig. Constructs a new AnimationAccuracyConfig. Episilon for animation value comparisons. Configuration for the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Default is false. Gets the string name used by IgnoreTextureCoordinatesConfig. Constructs a new IgnoreTextureCoordinatesConfig. True if texture coordinates should be ignored, false otherwise. Configuration for the step that specifies which UV transformations are to be evaluated. The default value is for all combinations (scaling, rotation, translation). Gets the string name used by TransformUVConfig. Constructs a new TransformUVConfig. Bit-wise combination specifying which UV transforms that should be evaluated. Configuration that is a hint to Assimp to favor speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-process steps to use faster code paths if possible. The default value is false. Gets the string name used by FavorSpeedConfig. Constructs a new FavorSpeedConfig. True if Assimp should favor speed at the expense of quality, false otherwise. Configures the maximum bone count per mesh for the step. Meshes are split until the maximum number of bones is reached. Gets the string name used by MaxBoneCountConfig. Constructs a new MaxBoneCountConfig. The maximum bone count. Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised. Gets the string name used by TangentTextureChannelIndexConfig. Constructs a new TangentTextureChannelIndexConfig. The zero-based texture channel index. Configures the threshold that is used to determine what bones are removed. Gets the string name used by DeboneThresholdConfig. Constructs a new DeboneThresholdConfig. The debone threshold. Configuration that requires all bones to qualify for deboning before any are removed. Gets the string name used by DeboneAllOrNoneConfig. Constructs a new DeboneAllOrNoneConfig. True if all are required, false if none need to qualify. Configuration for that sets a user defined matrix as the scene root node transformation before transforming vertices. Default value is the identity matrix. Gets the string name used by RootTransformationConfig. Constructs a new RootTransformationConfig. Root transformation matrix to be set to the root scene node during the pretransform post process step. Applies the property value to the given Assimp property store. Assimp property store Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Default is 1.0. Gets the string name used by GlobalScaleConfig. Constructs a new GlobalScaleConfig. Value to scale the entire scene by. Applies an application-specific scaling to the to allow for backwards compatibility. Default is 1.0. Gets the string name used by AppScaleConfig. Constructs a new AppScaleConfig. Value to scale the global scale by. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the "global" keyframe that will be imported. There are other configs for specific importers that will override the global setting. Gets the string name used by GlobalKeyFrameImportConfig. Constructs a new GlobalKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD3 format. Gets the string name used by MD3KeyFrameImportConfig. Constructs a new MD3KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD2 format. Gets the string name used by MD2KeyFrameImportConfig. Constructs a new MD2KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MDL format. Gets the string name used by MDLKeyFrameImportConfig. Constructs a new MDLKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the SMD format. Gets the string name used by SMDKeyFrameImportConfig. Constructs a new SMDKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the Unreal format. Gets the string name used by UnrealKeyFrameImportConfig. Constructs a new UnrealKeyFrameImportConfig. Keyframe index Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. The default value is true. Gets the string name used by ACSeparateBackfaceCullConfig. Constructs a new ACSeparateBackfaceCullConfig. True if all surfaces that have the "backface cull" flag set should be collected in separate meshes, false otherwise. Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. The default value is true. Gets the string name used by ACEvaluateSubdivisionConfig. Constructs a new ACEvaluateSubdivisionConfig. True if the AC loader should evaluate subdivisions, false otherwise. Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). The default value is true. Gets the string name used by UnrealHandleFlagsConfig. Constructs a new UnrealHandleFlagsConfig. True if the unreal loader should separate faces with different surface flags, false otherwise. Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. The default value is false. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Gets the string name used by TerragenComputeTexCoordsConfig. Constructs a new TerragenComputeTexCoordsConfig. True if terran UV coordinates should be computed, false otherwise. Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true. Gets the string name used by ASEReconstructNormalsConfig. Constructs a new ASEReconstructNormalsConfig. True if normals should be re-computed, false otherwise. Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. The default value is true. Gets the string name used by MD3HandleMultiPartConfig. Constructs a new MD3HandleMultiPartConfig. True if the split files should be loaded and combined, false otherwise. Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. The default string value is "default". Gets the string name used by MD3SkinNameConfig. Constructs a new MD3SkinNameConfig. The skin name. Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. the default string value is an empty string. Gets the string name used by MD3ShaderSourceConfig. Constructs a new MD3ShaderSourceConfig. The shader file. Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty The default value is false (all layers are loaded). Gets the string name used by LWOImportOneLayerConfig. Constructs a new LWOImportOneLayerConfig. True if only one layer should be imported, false if all layers should be imported. Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default value is false. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Gets the string name used by MD5NoAnimationAutoLoadConfig. Constructs a new MD5NoAnimationAutoLoadConfig. True if animations should not be automatically loaded, false if they should be. Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Gets the string name used by LWSAnimationStartConfig. Constructs a new LWSAnimationStartConfig. Beginning of the time range Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Gets the string name used by LWSAnimationEndConfig. Constructs a new LWSAnimationEndConfig. Ending of the time range Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. The default value is 100 frames per second. Gets the string name used by IRRAnimationFrameRateConfig. Constructs a new IRRAnimationFramerateConfig. Number of frames per second to output. The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. The default value is "Scene.Material". Gets the string name used by OgreMaterialFileConfig. Constructs a new OgreMaterialFileConfig. Material file name to load. The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. The default value is false. Gets the string name used by OgreTextureTypeFromFilenameConfig. Constructs a new OgreTextureTypeFromFilenameConfig. True if the filename defines texture usage, false otherwise. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Gets the string name used by IFCSkipSpaceRepresentationsConfig. Constructs a new IFCSkipSpaceRepresentationsConfig. True if the IfcSpace elements are skipped, false if otherwise. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Gets the string name used by IFCUseCustomTriangulationConfig. Constructs a new IFCUseCustomTriangulationConfig. True if the loader should use its own triangulation routine for walls/floors, false otherwise. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Gets the string name used by IFCSmoothingAngleConfig. Constructs a new IFCSmoothingAngleConfig. Smoothing angle when tessellating curves. Needs to be in the range of [5, 120]. Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Gets the string name used by IFCCylindricalTessellationConfig. Constructs a new IFCCylindricalTessellationConfig. Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180]. Specifies whether the collada loader will ignore the up direction. Default is false. Gets the string name used by ColladaIgnoreUpDirectionConfig. Constructs a new ColladaIgnoreUpDirectionConfig. True if the loader should ignore the up direction, false otherwise. Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The behavior is to use the id tag (resp. sid tag, if no id tag is present) instead. Default is false. Gets the string name used by ColladaUseColladaNamesConfig. Constructs a new ColladaUseColladaNamesConfig. True if collada names should be used as node names, false otherwise. Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true. Gets the string name used by FBXImportAllGeometryLayersConfig. Constructs a new FBXImportAllGeometryLayersConfig. True if all geometry layers should be merged, false otherwise to take only the first layer. Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials, if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false. Gets the string name used by FBXImportAllMaterialsConfig. Constructs a new FBXImportAllMaterialsConfig. True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials). Specifies whether the FBX importer will import materials. Default is true. Gets the string name used by FBXImportMaterialsConfig. Constructs a new FBXImportMaterialsConfig. True if the FBX importer should import materials, false otherwise. Specifies whether the FBX importer will import embedded textures. Default is true. Gets the string name used by FBXImportEmbeddedTexturesConfig. Constructs a new FBXImportEmbeddedTexturesConfig. True if the FBX importer should import embedded textures, false otherwise. Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false. Gets the string name used by FBXImportSearchEmbeddedTexturesConfig. Constructs a new FBXImportSearchEmbeddedTexturesConfig. True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Specifies whether the FBX importer will import cameras. Default is true. Gets the string name used by FBXImportCamerasConfig. Constructs a new FBXImportCamerasConfig. True if the FBX importer should import cameras, false otherwise. Specifies whether the FBX importer will import lights. Default is true. Gets the string name used by FBXImportLightsConfig. Constructs a new FBXImportLightsConfig. True if the FBX importer should import lights, false otherwise. Specifies whether the FBX importer will import animations. Default is true. Gets the string name used by FBXImportAnimationsConfig. Constructs a new FBXImportAnimationsConfig. True if the FBX importer should import animations, false otherwise. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Default is false. Gets the string name used by FBXStrictModeConfig. Constructs a new FBXStrictModeConfig. True if FBX strict mode should be used, false otherwise. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Default value is true. Gets the string name used by FBXPreservePivotsConfig. Constructs a new FBXPreservePivotsConfig. True if pivots should be preserved, false otherwise. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Default value is true. Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig. Constructs a new FBXOptimizeEmptyAnimationCurvesConfig. True if empty animation curves should be dropped, false otherwise. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Default value is false. Gets the string name used by FBXConvertToMetersConfig. Constructs a new FBXConvertToMetersConfig. True if the importer converts the unit from cm to m, false if do not do a conversion. Specifies whether the importer will load multiple animations. Default value is true. Gets the string name used by SmdLoadAnimationListConfig. Constructs a new SmdLoadAnimationListConfig. True if the importer should load multiple animations, false if only one animation should be loaded. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Default value is true. Gets the string name used by RemoveEmptyBonesConfig. Constructs a new RemoveEmptyBonesConfig. True if the importer should remove empty bones, false if they should be kept. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Gets the string name used by XFileUseDoublesConfig. Constructs a new XFileUseDoublesConfig. True if the x file uses 64-bit double values rather than 32-bit float values. Specifies if the export process should disable a validation step that would remove data that does not contain faces. This will enable point cloud data to be exported, since the 3D data is a collection of vertices without face data. Gets the string name used by ExportPointCloudsConfig. Constructs a new ExportPointCloudConfig. True if the exporter should treat vertices not grouped in faces as point clouds, false otherwise. Represents an embedded texture. Some file formats directly embed texture assets. Embedded textures may be uncompressed, where the data is given in an uncompressed format. Or it may be compressed in a format like png or jpg. In the latter case, the raw file bytes are given so the application must utilize an image decoder (e.g. DevIL) to get access to the actual color data. This object represents both types, so some properties may or may not be valid depending if it is compressed or not. Gets or sets the texture's original filename. Gets if the texture is compressed or not. Gets the width of the texture in pixels. Only valid for non-compressed textures. Gets the height of the texture in pixels. Only valid for non-compressed textures. Gets if the texture has non-compressed texel data. Only valid for non-compressed textures. Gets the size of the non-compressed texel data. Only valid for non-compressed textures. Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures. Gets if the embedded texture has compressed data. Only valid for compressed textures. Gets the size of the compressed data. Only valid for compressed textures. Gets the raw byte data representing the compressed texture. Only valid for compressed textures. Gets the format hint to determine the type of compressed data. This hint is a three-character lower-case hint like "dds", "jpg", "png". Constructs a new instance of the class. Should use only if reading from a native value. Constructs a new instance of the class. This creates a compressed embedded texture. The 3 character format hint. The compressed data. Optional file name for the texture. Constructs a new instance of the class. This creates an uncompressed embedded texture. Width of the texture Height of the texture Color data Optional file name for the texture. Thrown if the data size does not match width * height. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Enumerates metadata data types. Metadata is a boolean. Metadata is an integer. Metadata is an unsigned 64-bit integer. Metadata is a float. Metadata is a double. Metadata is a string. Metadata is a . Post processing flag options, specifying a number of steps that can be run on the data to either generate additional vertex data or optimize the imported data. No flags enabled. Calculates the tangents and binormals (bitangents) for the imported meshes. This does nothing if a mesh does not have normals. You might want this post processing step to be executed if you plan to use tangent space calculations such as normal mapping. There is a config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which allows you to specify a maximimum smoothing angle for the algorithm. However, usually you'll want to leave it at the default value. Identifies and joins identical vertex data sets within all imported meshes. After this step is run each mesh does contain only unique vertices anymore, so a vertex is possibly used by multiple faces. You usually want to use this post processing step. If your application deals with indexed geometry, this step is compulsory or you'll just waste rendering time. If this flag is not specified, no vertices are referenced by more than one face and no index buffer is required for rendering. Converts all imported data to a left handed coordinate space. By default the data is returned in a right-handed coordinate space, where +X points to the right, +Z towards the viewer, and +Y upwards. Triangulates all faces of all meshes. By default the imported mesh data might contain faces with more than three indices. For rendering you'll usually want all faces to be triangles. This post processing step splits up all higher faces to triangles. Line and point primitives are *not* modified. If you want 'triangles only' with no other kinds of primitives, try the following: Specify both and . Ignore all point and line meshes when you process Assimp's output Removes some parts of the data structure (animations, materials, light sources, cameras, textures, vertex components). The components to be removed are specified in a separate configuration option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove unrequired stuff from the pipeline as early as possible results in an increased performance and a better optimized output data structure. This step is also useful if you want to force Assimp to recompute normals or tangents. the corresponding steps don't recompute them if they're already there (loaded from the source asset). By using this step you can make sure they are NOT there. Generates normals for all faces of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. Face normals are shared between all points of a single face, so a single point can have multiple normals, which in other words, forces the library to duplicate vertices in some cases. This makes senseless then. Generates smooth normals for all vertices of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE allows you to specify an angle maximum for the normal smoothing algorithm. Normals exceeding this limit are not smoothed, resulting in a 'hard' seam between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual appearance. Splits large meshes into smaller submeshes. This is useful for realtime rendering where the number of triangles which can be maximally processed in a single draw call is usually limited by the video driver/hardware. The maximum vertex buffer is usually limited, too. Both requirements can be met with this step: you may specify both a triangle and a vertex limit for a single mesh. The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default values are 1,000,000. Warning: This can be a time consuming task. Removes the node graph and "bakes" (pre-transforms) all vertices with the local transformation matrices of their nodes. The output scene does still contain nodes, however, there is only a root node with children, each one referencing only one mesh. Each mesh referencing one material. For rendering, you can simply render all meshes in order, you don't need to pay attention to local transformations and the node hierarchy. Warning: Animations are removed during this step. Limits the number of bones simultaneously affecting a single vertex to a maximum value. If any vertex is affected by more than that number of bones, the least important vertex weights are removed and the remaining vertex weights are re-normalized so that the weights still sum up to 1. The default bone weight limit is 4 and uses the AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing step might be of interest for you. Validates the imported scene data structure. This makes sure that all indices are valid, all animations and bones are linked correctly, all material references are correct, etc. It is recommended to capture Assimp's log output if you use this flag, so you can easily find out what's actually wrong if a file fails the validation. The validator is quite rude and will find *all* inconsistencies in the data structure. There are two types of failures: Error: There's something wrong with the imported data. Further postprocessing is not possible and the data is not usable at all. The import fails. Warning: There are some minor issues (e.g. 1000000 animation keyframes with the same time), but further postprocessing and use of the data structure is still safe. Warning details are written to the log file. Re-orders triangles for better vertex cache locality. This step tries to improve the ACMR (average post-transform vertex cache miss ratio) for all meshes. The implementation runs in O(n) time and is roughly based on the 'tipsify' algorithm. If you intend to render huge models in hardware, this step might be of interest for you. The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune the cache optimization. Searches for redundant/unreferenced materials and removes them. This is especially useful in combination with the PreTransformVertices and OptimizeMeshes flags. Both join small meshes with equal characteristics, but they can't do their work if two meshes have different materials. Because several material settings are always lost during Assimp's import filders and because many exporters don't check for redundant materials, huge models often have materials which are defined several times with exactly the same settings. Several material settings not contributing to the final appearance of a surface are ignored in all comparisons ... the material name is one of them. So, if you're passing additional information through the content pipeline (probably using *magic* material names), don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST setting. This step tries to determine which meshes have normal vectors that are facing inwards. The algorithm is simple but effective: The bounding box of all vertices and their normals are compared against the volume of the bounding box of all vertices without their normals. This works well for most objects, problems might occur with planar surfaces. However, the step tries to filter such cases. The step inverts all in-facing normals. Generally, it is recommended to enable this step, although the result is not always correct. This step splits meshes with more than one primitive type in homogeneous submeshes. This step is executed after triangulation and after it returns, just one bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time rendering where point and line primitives are often ignored or rendered separately. You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need. This can be used to easily exclude lines and points, which are rarely used, from the import. This step searches all meshes for degenerated primitives and converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical. To have degenerated primitives removed, specify the flag try one of the following procedures: To support lines and points: Set the AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as soon as they are detected. They won't pass any further pipeline steps. If you don't support lines and points: Specify flag, which will move line and point primitives to separate meshes. Then set the AI_CONFIG_PP_SBP_REMOVE option to and to cause step to reject point and line meshes from the scene. This step also removes very small triangles with a surface area smaller than 10^-6. If you rely on having these small triangles, or notice holes in your model, set the property to false. Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several file formats which do not support lines or points where exporters bypass the format specification and write them as degenerated triangles instead. This step searches all meshes for invalid data, such as zeroed normal vectors or invalid UV coordinates and removes or fixes them. This is intended to get rid of some common exporter rrors. This is especially useful for normals. If they are invalid, and the step recognizes this, they will be removed and can later be recomputed, e.g. by the GenerateSmoothNormals flag. The step will also remove meshes that are infinitely small and reduce animation tracks consisting of hundreds of redundant keys to a single key. The AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check for duplicate animation tracks. This step converts non-UV mappings (such as spherical or cylindrical mapping) to proper texture coordinate channels. Most applications will support UV mapping only, so you will probably want to specify this step in every case. Note that Assimp is not always able to match the original mapping implementation of the 3D app which produced a model perfectly. It's always better to let the father app compute the UV channels, at least 3DS max, maya, blender, lightwave, modo, .... are able to achieve this. If this step is not requested, you'll need to process the MATKEY_MAPPING material property in order to display all assets properly. Applies per-texture UV transformations and bakes them to stand-alone vtexture coordinate channels. UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material key for more information. This step processes all textures with transformed input UV coordinates and generates new (pretransformed) UV channel transformations, so you will probably want to specify this step. UV transformations are usually implemented in realtime apps by transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous) transformation matrix. Searches for duplicated meshes and replaces them with a reference to the first mesh. This is time consuming, so don't use it if you have no time. Its main purpose is to work around the limitation with some file formats that don't support instanced meshes, so exporters duplicate meshes. Attempts to reduce the number of meshes (and draw calls). This is recommended to be used together with and is fully compatible with both and . Optimizes scene hierarchy. Nodes with no animations, bones, lights, or cameras assigned are collapsed and joined. Node names can be lost during this step, you can specify names of nodes that should'nt be touched or modified with AI_CONFIG_PP_OG_EXCLUDE_LIST. Use this flag with caution. Most simple files will be collapsed to a single node, complex hierarchies are usually completely lost. That's not the right choice for editor environments, but probably a very effective optimization if you just want to get the model data, convert it to your own format and render it as fast as possible. This flag is designed to be used with for best results. Scenes with thousands of extremely small meshes packed in deeply nested nodes exist for almost all file formats. Usage of this and usually fixes them all and makes them renderable. Flips all UV coordinates along the y-axis and adjusts material settings/bitangents accordingly. Flips face winding order from CCW (default) to CW. Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit. Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones removed if and only if all bones within the scene qualify for removal. This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to setup the global scaling factor. A post processting step to embed textures. This will remove external data dependencies for textures. If a texture's file does not exist at the specified path (due, for instance, to an absolute path generate on another system), it will check if a file with the same name exists at the root folder of the imported model, and if so, embeds that. If the step to generate normals is set, it will not run if normals already exist. This flag will force that step to run even if normals are present. Drops normals for all faces of all meshes. This is ignored if no normals are present. Face normals are shared between all points of a single face, so a single point can have multiple normals, which forces the library to duplicate vertices in some cases. is *senseless* then. This process gives sense back to . Generate bounding boxes for each mesh. Enumerates components of the scene or mesh data that can be excluded from the import using the post process step RemoveComponent. No components to be excluded. Removes normal vectors Removes tangents/binormals Removes all color sets. Removes all texture UV sets. Remove all boneweights from all meshes. Scenegraph nodes corresponding to the bones are NOT removed. Use OptimizeGraph step to remove them. Removes all node animations. Coressponding scenegraph nodes are NOT removed. Use OptimizeGraph step to remove them. Removes all embedded textures. Removes all light sources. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all cameras. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all meshes. Removes all materials. One default material will be generated. Enumerates geometric primitive types. Point primitive. This is just a single vertex in the virtual world. A face has one index for such a primitive. Line primitive. This is a line defined through a start and an end position. A face contains exactly two indices for such a primitive. Triangle primitive, consisting of three indices. A n-Gon that has more than three edges (thus is not a triangle). Defines an animation channel behaves outside the defined time range. This corresponds to the prestate and poststates of the animation node. The value from the default node transformation is taken. The nearest key value is used without interpolation. The value of the nearest two keys is linearly extrapolated for the current time value. The animation is repeated. If the animation key goes from n to m and the current time is t, use the value at (t - n ) % (|m-n|). Defines the methods of mesh morphing supported. No morphing. Interpolation between morph targets. Normalized morphing between morph targets. Relative morphing between morph targets. Enumerates all supported light sources. Unknown light. Directional light source that has a well-defined direction but is infinitely far away, e.g. the sun. Point light source that has a well-defined position in space but is omni-directional, e.g. a light bulb. Spot light source emits light from a position in space, in a certain direction that is limited by an angle, like a cone. Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color. An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector. Defines alpha blending flags, how the final color value of a pixel is computed, based on the following equation: sourceColor * sourceBlend + destColor * destBlend Where the destColor is the previous color in the frame buffer and sourceColor is the material color before the transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property. Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha) Additive blending: sourcecolor * 1 + destColor * 1. Defines all shading models supported by the library. The list of shading modes has been taken from Blender. See Blender documentation for more information. No shading mode defined. Flat shading. Shading is done on a per-face basis and is diffuse only. Also known as 'faceted shading'. Simple Gouraud shading. Phong Shading. Phong-Blinn Shading. Toon-shading, also known as a 'comic' shader. OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness of the material into account. Minnaert shading model. Extension to standard Lambertian shading, taking the "darkness" of the material into account. CookTorrance shading model. Special shader for metallic surfaces. No shading at all. Constant light influence of 1.0. Fresnel shading. Defines some mixed flags for a particular texture. This corresponds to the AI_MAT_KEY_TEXFLAGS property. The texture's color values have to be inverted (componentwise 1-n). Explicit request to the application to process the alpha channel of the texture. This is mutually exclusive with . These flags are set if the library can say for sure that the alpha channel is used/is not used. If the model format does not define this, iti s left to the application to decide whether the texture alpha channel - if any - is evaluated or not. Explicit request to the application to ignore the alpha channel of the texture. This is mutually exclusive with . Defines how UV coordinates outside the [0..1] range are handled. Commonly referred to as the 'wrapping mode' A texture coordinate u|v is translated to u % 1| v % 1. Texture coordinates outside [0...1] are clamped to the nearest valid value. A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero and 1 - (u % 1) | 1 - (v % 1) otherwise. If the texture coordinates for a pixel are outside [0...1] the texture is not applied to that pixel. Defines how texture coordinates are generated Real-time applications typically require full UV coordinates. So the use of step is highly recommended. It generates proper UV channels for non-UV mapped objects, as long as an accurate description of how the mapping should look like is given. Coordinates are taken from the an existing UV channel. The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates are to be taken from since meshes can have more than one UV channel. Spherical mapping Cylinder mapping Cubic mapping Planar mapping Unknown mapping that is not recognied. Defines how the Nth texture of a specific type is combined with the result of all previous layers. Example (left: key, right: value): DiffColor0 - gray DiffTextureOp0 - TextureOperation.Multiply DiffTexture0 - tex1.png DiffTextureOp0 - TextureOperation.Add DiffTexture1 - tex2.png Written as an equation, the final diffuse term for a specific pixel would be: diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib; T = T1 * T2 T = T1 + T2 T = T1 - T2 T = T1 / T2 T = (T1 + T2) - (T1 * T2) T = T1 + (T2 - 0.5) Defines the purpose of a texture. No texture, but the value can be used as a 'texture semantic'. A diffuse texture that is combined with the result of the diffuse lighting equation. A specular texture that is combined with the result of the specular lighting equation. An ambient texture that is combined with the ambient lighting equation. An emissive texture that is added to the result of the lighting calculation. It is not influenced by incoming light, instead it represents the light that the object is naturally emitting. A height map texture. by convention, higher gray-scale values stand for higher elevations from some base height. A tangent-space normal map. There are several conventions for normal maps and Assimp does (intentionally) not distinguish here. A texture that defines the glossiness of the material. This is the exponent of the specular (phong) lighting equation. Usually there is a conversion function defined to map the linear color values in the texture to a suitable exponent. The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite the opposite. A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements. A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light. A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications. PBR texture property. Diffuse/albedo map containing base color regardless of the object surface type. PBR texture property. This is not documented in assimp native, but is a normal map in a PBR workflow. PBR texture property. Emissive color map, similar to . PBR texture property. Describes how reflective the object surface is. PBR texture property. Describes how rough or smooth the object surface is. Dedicated ambient occlusion map, some older formats may set this as a texture. An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any further postprocessing. Defines the state of the imported scene data structure. Default state of the scene, it imported successfully. Specifies that the scene data structure that was imported is not complete. This flag bypasses some internal validations and allows the import of animation skeletons, material libaries, or camera animation paths using Assimp. Most applications won't support such data. This flag is set by the post process step if validation is successful. In a validated scene you can be sure that any cross references in the data structure (e.g. vertex indices) are valid. This flag is set by the post process step if validation is successful, but some issues have been found. This can for example mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful for applications which do not capture Assimp's log output. This flag is set by the post process step. It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the verbose format, all vertices are unique where no vertex is ever referenced by more than one face. Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles, in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the z-axis stores the elevation at a specific point. TER (Terragen) and HMP (3D Game Studio) are height map formats. Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from as that has internal meanings about postprocessing steps. Enumerates Assimp function result codes. Function returned successfully. There was an error. Assimp ran out of memory. Seek origins for Assimp's virtual file system API. Beginning of the file Current position of the file pointer. End of the file, offsets must be negative. Enumerates predefined log streaming destinations. Stream log to a file Stream log to the standard output Stream log to the standard error output. MSVC only: Stream the log to the debugger (this relies on OutputDebugString from the Win32 SDK). Defines material property types. Array of single-precision (32 bit) floats. Array of double-precision (64 bit) floats. Property is a string. Array of 32 bit integers. Byte buffer where the content is undefined. Enumerates how the native Assimp DLL was compiled Assimp compiled as a shared object (Windows: DLL); Assimp was compiled against STLport Assimp was compiled as a debug build Assimp was compiled with the boost work around. Assimp was compiled built to run single threaded. Defines how UV coordinates should be transformed. Scaling is evaluated. Rotation is evaluated. Translation is evaluated. Defines the desired file I/O mode is when opening a new file. Open the file for writing. Open the file for writing binary data to it. Open the file for writing text data to it. Open the file for reading. Open the file for reading binary data from it. Open the file for reading text data from it. Defines flags that indicate level of support for common features for a given importer. Indicates there is a textual encoding of the file format and it is supported. Indicates there is a binary encoding of the file format and it is supported. Indicates there is a compressed encoding of the file format and it is supported. Indicates that the importer reads only a very particular subset of the file format. This is common for formats that cannot easily be mapped to the Scene data structure. Indicates that the importer is experimental and used with caution - this is only reserved for importers still in development, and not typically yet in released production code. Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in turn can reference another and so on. This is used to allow exporters to write more than one output for a given scene, such as material files. Existence of such files depends on the format. The stream representation of an ExportDataBlob is as follows: String: Name of the Blob int: Length of Binary Data byte[]: Binary Data bool: If has next data blob String: Name of nested blob int: Length of nested blob binary data byte[]: Nested blob binary data bool: If nested blob has next data blob .... Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files that are nested will have names. Get the blob data. Gets the next data blob. Gets if the blob data is valid. Creates a new ExportDataBlob. Unmanaged structure. Creates a new ExportDataBlob. Name Data Writes the data blob to the specified stream. Output stream Reads a data blob from the specified stream. Input stream Data blob Describes a file format which Assimp can export to. Gets a short string ID to uniquely identify the export format. E.g. "collada" or "obj". Gets a short description of the file format to present to users. Gets the recommended file extension for the exported file in lower case. Constructs a new ExportFormatDescription. Unmanaged structure A single face in a mesh, referring to multiple vertices. This can be a triangle if the index count is equal to three, or a polygon if the count is greater than three. Since multiple primitive types can be contained in a single mesh, this approach allows you to better examine how the mesh is constructed. If you use the post process step flag during import, then each mesh will be homogenous where primitive type is concerned. Gets the number of indices defined in the face. Gets if the face has faces (should always be true). Gets or sets the indices that refer to positions of vertex data in the mesh's vertex arrays. Constructs a new instance of the class. Constructs a new instance of the class. Face indices Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Simple implementation of an IOSystem that searches for files on the disk. This implementation can be given a number of search directories that it will attempt to locate the file in first, before using the file path given by Assimp. That way, you can load models that have files distributed in a number of other directories besides the root model's. Constructs a new FileIOSystem that does not have any search directories. Constructs a new FileIOSystem that uses the specified search directories. Search directories to search for files in Sets the search directories the FileIOSystem will use when searching for files. Directory paths Gets the search directories the FileIOSystem is using. Directory paths Opens a stream to a file. Path to the file Desired file access mode The IO stream Finds the first file that matches the file name (name + extension) in the search paths. File name (+ extension) to search for Found file path True if the file was found, false otherwise Wraps a FileStream. Metadata and feature support information for a given importer. Gets the name of the importer (e.g. Blender3D Importer) Gets the original author (blank if unknown or assimp team). Gets the name of the current maintainer, if empty then the author maintains. Gets any implementation comments. Gets the features supported by the importer. Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot. Represents an object that can be marshaled to and from a native representation. Managed object type Native value type Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Custom marshaler for usage with the for performing marshaling to-and-from unmanaged memory for non-blittable types. A type must be attributed with to automatically have an instance of its marshaler be utilized. Gets the native data size in bytes. Marshals the managed object to the unmanaged chunk of memory. Managed object to marshal. Unmanaged chunk of memory to write to. Marshals the managed object from the unmanaged chunk of memory. Unmanaged chunk of memory to read from. Managed object marshaled. Defines a stream to some file input or output source. This object is responsible for reading/writing data that is used by Assimp. Gets whether or not this IOStream has been disposed. Gets the original path to file given by Assimp. Gets the original desired file access mode. Gets whether the stream is in fact valid - that is, the input/output has been properly located and can be read/written. Constructs a new IOStream. Path to file given by Assimp Desired file access mode Constructs a new IOStream. Path to file given by Assimp Desired file access mode True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Initializes the system by setting up native pointers for Assimp to the specified functions. A reference to each supplied callback is held on to avoid it being GC'ed. Handles write requests. Handles read requests. Handles tell requests. Handles size requests. Handles seek requests. Handles flush requests. Additional user data, if any. Finalizes an instance of the class. Disposes of resources held by the IOStream. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Writes data to the stream. Data to write Number of bytes to write Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured. Reads data from the stream. Byte buffer to store the read data in Number of bytes to read Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured. Sets the current file position pointer. Offset in bytes from the origin Origin reference ReturnCode indicating success or failure. Gets the current file position pointer (in bytes). Current file position pointer (in bytes) Gets the total file size (in bytes). File size in bytes Flushes all data currently in the stream buffers. Closes the stream - flushing any data not yet read/written and disposes of resources. Callback for Assimp that handles writes. Callback for Assimp that handles reads. Callback for Assimp that handles tell requests. Callback for Assimp that handles size requests. Callback for Assimp that handles seeks. Callback for Assimp that handles flushes. Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening files to read during import, and creating/writing to files during export. Gets whether or not this IOSystem has been disposed. Gets the number of currently opened streams. Constructs a new IOSystem. Constructs a new IOSystem. True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Initializes the system by setting up native pointers for Assimp to the specified functions. Handles open file requests. Handles close file requests. Additional user data, if any. Finalizes an instance of the class. Opens a stream to a file. Path to the file Desired file access mode The IO stream Closes a stream that is owned by this IOSystem. Stream to close Closes all outstanding streams owned by this IOSystem. Disposes of all resources held by this object. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Callback for Assimp that handles a file being opened. Callback for Assimp that handles a file being closed. Describes a light source in the scene. Assimp supports multiple light sources including spot, point, and directional lights. All are defined by a single structure and distinguished by their parameters. Lights have corresponding nodes in the scenegraph. Some file formats such as 3DS and ASE export a "target point", e.g. the point a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode of a spotlight's main node called "spotName.Target". However, this is just additional information then, the transform tracks of the main node make the spot light already point in the right direction. Gets or sets the name of the light source. This corresponds to a node present in the scenegraph. Gets or sets the type of light source. This should never be undefined. Gets or sets the inner angle of a spot light's light cone. The spot light has maximum influence on objects inside this angle. The angle is given in radians, it is 2PI for point lights and defined for directional lights. Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside this angle. The angle is given in radians. It is 2PI for point lights and undefined for directional lights. The outer angle must be greater than or equal to the inner angle. Gets or sets the constant light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att0 variable in the equation and is undefined for directional lights. Gets or sets the linear light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d) This member corresponds to the att1 variable in the equation and is undefined for directional lights. Gets or sets the quadratic light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att2 variable in the equation and is undefined for directional lights. Gets or sets the position of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for directional lights. Gets or sets the direction of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the diffuse color of the light source. The diffuse light color is multiplied with the diffuse material color to obtain the final color that contributes to the diffuse shading term. Gets or sets the specular color of the light source. The specular light color is multiplied with the specular material color to obtain the final color that contributes to the specular shading term. Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient material color to obtain the final color that contributes to the ambient shading term. Gets or sets the Width (X) and Height (Y) of the area that represents an light. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Callback delegate for Assimp's LogStream. Log message Supplied user data Represents a log stream, which receives all log messages and streams them somewhere. Gets or sets, if verbose logging is enabled globally. Gets or sets the user data to be passed to the callback. Gets whether the logstream has been disposed or not. Gets whether or not the logstream is currently attached to the library. Static constructor. Constructs a new LogStream. Whether to immediately initialize the system by setting up native pointers. Set this to false if you want to manually initialize and use custom function pointers for advanced use cases. Constructs a new LogStream. User-supplied data True if initialize should be immediately called with the default callbacks. Set this to false if your subclass requires a different way to setup the function pointers. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. User-supplied data Finalizes an instance of the class. Detaches all active logstreams from the library. Gets all active logstreams that are currently attached to the library. Collection of active logstreams attached to the library. Attaches the logstream to the library. Detaches the logstream from the library. Logs a message. Message contents Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Override this method to log a message for a subclass of Logstream, if no callback was set. Message User data Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages. Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving messages until it is re-attached. Callback for Assimp that handles a message being logged. Initializes the stream by setting up native pointers for Assimp to the specified functions. Callback that is marshaled to native code, a reference is held on to avoid it being GC'ed. User callback, if any. Defaults to console if null. User data, or empty. Additional assimp user data, if any. Log stream that writes messages to the Console. Constructs a new console logstream. Constructs a new console logstream. User supplied data Log a message to the console. Message Userdata A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally all this information is stored as key-value pair properties. The class contains many convienence methods and properties for accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present, and if they aren't a default value will be returned. Gets the number of properties contained in the material. Checks if the material has a name property. Gets the material name value, if any. Default value is an empty string. Checks if the material has a two-sided property. Gets if the material should be rendered as two-sided. Default value is false. Checks if the material has a shading-mode property. Gets the shading mode. Default value is , meaning it is not defined. Checks if the material has a wireframe property. Gets if wireframe should be enabled. Default value is false. Checks if the material has a blend mode property. Gets the blending mode. Default value is . Checks if the material has an opacity property. Gets the opacity. Default value is 1.0f. Checks if the material has a transparency factor property. Gets the transparency factor. This is used to make a surface more or less opaque (0 = opaque, 1 = transparent). Default value is 0.0f. Checks if the material has a bump scaling property. Gets the bump scaling. Default value is 0.0f; Checks if the material has a shininess property. Gets the shininess. Default value is 0.0f; Checks if the material has a shininess strength property. Gets the shininess strength. Default vaulue is 1.0f. Checks if the material has a reflectivty property. Gets the reflectivity. Default value is 0.0f; Checks if the material has a color diffuse property. Gets the color diffuse. Default value is white. Checks if the material has a color ambient property. Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f). Checks if the material has a color specular property. Gets the color specular. Default value is black. Checks if the material has a color emissive property. Gets the color emissive. Default value is black. Checks if the material has a color transparent property. Gets the color transparent. Default value is black. Checks if the material has a color reflective property. Gets the color reflective. Default value is black. Gets if the material has a diffuse texture in the first texture index. Gets or sets diffuse texture properties in the first texture index. Gets if the material has a specular texture in the first texture index. Gets or sets specular texture properties in the first texture index. Gets if the material has a ambient texture in the first texture index. Gets or sets ambient texture properties in the first texture index. Gets if the material has a emissive texture in the first texture index. Gets or sets emissive texture properties in the first texture index. Gets if the material has a height texture in the first texture index. Gets or sets height texture properties in the first texture index. Gets if the material has a normal texture in the first texture index. Gets or sets normal texture properties in the first texture index. Gets if the material has an opacity texture in the first texture index. Gets or sets opacity texture properties in the first texture index. Gets if the material has a displacement texture in the first texture index. Gets or sets displacement texture properties in the first texture index. Gets if the material has a light map texture in the first texture index. Gets or sets light map texture properties in the first texture index. Gets if the material has an ambient occlusion map in in the first texture index. Gets or sets ambient occlusion texture properties in the first texture index. Gets if the material has a reflection texture in the first texture index. Gets or sets reflection texture properties in the first texture index. Determines if the material is part of a PBR workflow or not. Gets a group accessor for any PBR properties in the material. Gets if the material has embedded shader source code. Gets a group accessor for any embedded shader source code in the material. Constructs a new instance of the class. Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". This is the name that is used as the material dictionary key. Key basename, this must not be null or empty Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The fully qualified name Gets the non-texture properties contained in this Material. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename The material property, if it exists Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The material property, if it exists Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property The material property, if it exists Checks if the material has the specified non-texture property. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename True if the property exists, false otherwise. Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. True if the property exists, false otherwise. Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property True if the property exists, false otherwise. Adds a property to this material. Material property True if the property was successfully added, false otherwise (e.g. null or key already present). Removes a non-texture property from the material. Property name True if the property was removed, false otherwise Removes a property from the material. Name of the property Property texture type Property texture index True if the property was removed, false otherwise Removes a property from the material. Fully qualified name of the property ({basename},{texType},{texIndex}) True if the property was removed, false otherwise Removes all properties from the material; Gets -all- properties contained in the Material. All properties in the material property map. Gets all the number of textures that are of the specified texture type. Texture type Texture count Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True if the texture properties were added or modified Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True to only set the texture's file path, false otherwise True if the texture properties were added or modified Removes a texture from the material - this bulk removes a property for each field. If the texture has no file path, nothing is removed Texture to remove True if the texture was removed, false otherwise. Gets a texture that corresponds to the type/index. Texture type Texture index Texture description True if the texture was found in the material Gets all textures that correspond to the type. Texture type The array of textures Gets all textures in the material. The array of textures Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Groups all PBR workflow properties into a single accessor. Gets if the material has a base color map (albedo/diffuse) texture in the first texture index. Gets or sets the base color map (albedo/diffuse) texture properties in the first texture index. Gets if the material has a normal map texture in the first texture index. Gets or sets the normal map texture properties in the first texture index. Gets if the material has an emission color map texture in the first texture index. Gets or sets the emission color map texture properties in the first texture index. Gets if the material has a metalness map texture in the first texture index. Gets or sets the metalness map texture properties in the first texture index. Gets if the material has a roughness map texture in the first texture index. Gets or sets the roughness map texture properties in the first texture index. Constructs new property group accessor. Material Groups all the properties for shader sources in a single accessor. Gets if the material has a property for shader language type. Gets or sets what language (HLSL, GLSL, etc) any shader source code in this material is of. Gets if the material has a property for vertex shader source code. Gets or sets vertex shader source code. Gets if the material has a property for fragment (pixel) shader source code. Gets or sets fragment (pixel) shader source code. Gets if the material has a property for geometry shader source code. Gets or sets geometry shader source code. Gets if the material has a property for tesselation shader source code. Gets or sets tesselation shader source code. Gets if the material has a property for primitive (domain) shader source code. Gets or sets primitive (domain) shader source code. Gets if the material has a property for compute shader source code. Gets or sets compute shader source code. Constructs new property group accessor. Material A key-value pairing that represents some material property. Gets or sets the property key name. E.g. $tex.file. This corresponds to the "AiMatKeys" base name constants. Gets or sets the type of property. Gets the raw byte data count. Checks if the property has data. Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods. Gets or sets the texture type semantic, for non-texture properties this is always . Gets or sets the texture index, for non-texture properties this is always zero. Gets the property's fully qualified name. Format: "{base name},{texture type semantic},{texture index}". E.g. "$clr.diffuse,0,0". This is the key that is used to index the property in the material property map. Constructs a new instance of the class. Constructs a new instance of the class. Constructs a buffer property. Base name of the property Property value Constructs a new instance of the class. Constructs a float property. Base name of the property Property value Constructs a new instance of the class. Constructs an integer property. Base name of the property Property value Constructs a new instance of the class. Constructs a boolean property. Name of the property Property value Constructs a new instance of the class. Creates a string property. Base name of the property Property value Constructs a new instance of the class. Creates a texture property. Base name of the property Property value Texture type Texture index Constructs a new instance of the class. Creates a float array property. Base name of the property Property values Constructs a new instance of the class. Creates a int array property. Base name of the property Property values Constructs a new instance of the class. Creates a Color3D property. Base name of the property Property value Constructs a new instance of the class. Creates a Color4D property. Base name of the property Property value Gets the property raw data as a float. Float Sets the property raw data with a float. Float. True if successful, false otherwise Gets the property raw data as a double. Double Sets the property raw data with a double. Double. True if successful, false otherwise. Gets the property raw data as an integer. Integer Sets the property raw data as an integer. Integer True if successful, false otherwise Gets the property raw data as a string. String Sets the property raw data as string. String True if successful, false otherwise Gets the property raw data as a float array. Number of elements to get Float array Gets the property raw data as a float array. Float array Sets the property raw data as a float array. Values to set True if successful, otherwise false Gets the property raw data as a double array. Double array Sets the property raw data as a double array. Values to set True if successful, otherwise false Gets the property raw data as an integer array. Number of elements to get Integer array Gets the property raw data as an integer array. Integer array Sets the property raw data as an integer array. Values to set True if successful, otherwise false Gets the property raw data as a boolean. Boolean Sets the property raw data as a boolean. Boolean value True if successful, false otherwise Gets the property raw data as a Color3D. Color3D Sets the property raw data as a Color3D. Color3D True if successful, false otherwise Gets the property raw data as a Color4D. Color4D Sets the property raw data as a Color4D. Color4D True if successful, false otherwise Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a 3x3 matrix. Assimp docs say their matrices are always row-major, and it looks like they're only describing the memory layout. Matrices are treated as column vectors however (X base in the first column, Y base the second, and Z base the third) Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix3x3. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Constructs a new Matrix3x3. A 4x4 matrix to construct from, only taking the rotation/scaling part. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 4x4 matrix to a 3x3 matrix. 4x4 matrix 3x3 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). Memory layout is row major. Right handed conventions are used by default. Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 1, column 4 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 2, column 4 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Value at row 3, column 4 of the matrix Value at row 4, column 1 of the matrix Value at row 4, column 2 of the matrix Value at row 4, column 3 of the matrix Value at row 4, column 4 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix4x4. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 1, column 4 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 2, column 4 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Element at row 3, column 4 Element at row 4, column 1 Element at row 4, column 2 Element at row 4, column 3 Element at row 4, column 4 Constructs a new Matrix4x4. Rotation matrix to copy values from. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Decomposes a transformation matrix into its original scale, rotation, and translation components. The scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And the translation is the output position for the x, y, z axes. Vector to hold the scaling component Quaternion to hold the rotation component Vector to hold the translation component Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton quaternion. The translation receives the output position for the x, y, z axes. Quaternion to hold the rotation component Vector to hold the translation component Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a translation matrix. Translation vector The translation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 3x3 matrix to a 4x4 matrix. 3x3 matrix 4x4 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Delegate for performing unmanaged memory cleanup. Location in unmanaged memory of the value to cleanup True if the unmanaged memory should be freed, false otherwise Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions. Marshals an array of managed values to a c-style unmanaged array (void*). Managed type Native type Array of managed values Pointer to unmanaged memory Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to an unmanaged array of pointers (void**). Managed type Native type Array of managed values True if the pointer is an array of pointers, false otherwise. Pointer to unmanaged memory Marshals an array of managed values from a c-style unmanaged array (void*). Managed type Native type Pointer to unmanaged memory Number of elements to marshal Marshaled managed values Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from an unmanaged array of pointers (void**). Managed type Native type Pointer to unmanaged memory Number of elements to marshal True if the pointer is an array of pointers, false otherwise. Marshaled managed values Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Managed array of structs Pointer to unmanaged memory Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Pointer to unmanaged memory Number of elements to read Managed array Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup True if the pointer is an array of pointers, false otherwise. Marshals a managed value to unmanaged memory. Managed type Unmanaged type Managed value to marshal Pointer to unmanaged memory Marshals a managed value from unmanaged memory. Managed type Unmanaged type Pointer to unmanaged memory The marshaled managed value Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise use the write methods for blittable types. Struct type Struct to marshal Pointer to unmanaged chunk of memory which must be allocated prior to this call Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Size of the struct in bytes. Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Array of structs Total size, in bytes, of the array's contents. Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime cannot move the object around in memory, which may degrade performance. Object to pin. Pointer to pinned object's memory location. Unpins an object in memory, allowing it to once again freely be moved around by the runtime. Object to unpin. Convienence method to dispose all items in the collection IDisposable type Collection of disposables Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value. Underlying value type. Enum type. Value to cast. Enum value. Allocates unmanaged memory. This memory should only be freed by this helper. Size to allocate Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper. Size to allocate Value the memory will be cleared to, by default zero. Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Frees unmanaged memory that was allocated by this helper. Pointer to unmanaged memory to free. Checks if the memory is aligned to the specified alignment. Pointer to the memory Alignment value, by defauly 16-byte True if is aligned, false otherwise. Swaps the value between two references. Type of data to swap. First reference Second reference Computes a hash code using the FNV modified algorithmm. Byte data to hash. Hash code for the data. Reads a stream until the end is reached into a byte array. Based on Jon Skeet's implementation. It is up to the caller to dispose of the stream. Stream to read all bytes from Initial buffer length, default is 32K The byte array containing all the bytes from the stream Compares two arrays of bytes for equivalence. First array of data. Second array of data. True if both arrays contain the same data, false otherwise. Clears the memory to the specified value. Pointer to the memory. Value the memory will be cleared to. Number of bytes, starting from the memory pointer, to clear. Computes the size of the struct type. Struct type Size of the struct in bytes. Casts the by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the readonly by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the pointer into a by-ref value of the specified type. Struct type. Memory location. By-ref value. Casts one by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Casts one readonly by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Computes the size of the struct array. Struct type Array of structs Total size, in bytes, of the array's contents. Adds an offset to the pointer. Pointer Offset Pointer plus the offset Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer. Destination memory location Source memory location Number of bytes to copy Returns the number of elements in the enumerable. Type of element in collection. Enumerable collection The number of elements in the enumerable collection. Converts typed element array to a byte array. Struct type Element array Byte array copy or null if the source array was not valid. Converts a byte array to a typed element array. Struct type Byte array Typed element array or null if the source array was not valid. Copies bytes from a byte array to an element array. Struct type Source byte array Starting index in destination array Destination element array Starting index in destination array Number of elements to copy Copies bytes from an element array to a byte array. Struct type Source element array Starting index in source array Destination byte array Starting index in destination array Number of elements to copy Reads data from the memory location into the array. Struct type Pointer to memory location Array to store the copied data Zero-based element index to start writing data to in the element array. Number of elements to copy Reads a single element from the memory location. Struct type Pointer to memory location The read value Reads a single element from the memory location. Struct type Pointer to memory location The read value. Writes data from the array to the memory location. Struct type Pointer to memory location Array containing data to write Zero-based element index to start reading data from in the element array. Number of elements to copy Writes a single element to the memory location. Struct type Pointer to memory location The value to write A mesh represents geometry with a single material. Gets or sets the mesh name. This tends to be used when formats name nodes and meshes independently, vertex animations refer to meshes by their names, or importers split meshes up, each mesh will reference the same (dummy) name. Gets or sets the primitive type. This may contain more than one type unless if option is not set. Gets or sets the index of the material associated with this mesh. Gets the number of vertices in this mesh. This is the count that all per-vertex lists should be the size of. Gets if the mesh has a vertex array. This should always return true provided no special scene flags are set. Gets the vertex position list. Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count. Gets the vertex normal list. Gets if the mesh has tangents and bitangents. It is not possible for one to be without the other. If it does exist, the count should be the same as the vertex count. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of faces contained in the mesh. Gets if the mesh contains faces. If no special scene flags are set, this should always return true. Gets the mesh's faces. Each face will contain indices to the vertices. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds to the texture coordinate channel index. Gets the number of bones that influence this mesh. Gets if this mesh has bones. Gets the bones that influence this mesh. Gets the number of mesh animation attachments that influence this mesh. Gets if this mesh has mesh animation attachments. Gets the mesh animation attachments that influence this mesh. Gets or sets the morph method used when animation attachments are used. Gets or sets the axis aligned bounding box that contains the extents of the mesh. Constructs a new instance of the class. Constructs a new instance of the class. Name of the mesh. Constructs a new instance of the class. Primitive types contained in the mesh. Constructs a new instance of the class. Name of the mesh Primitive types contained in the mesh. Checks if the mesh has vertex colors for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if vertex colors are present in the channel. Checks if the mesh has texture coordinates for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if texture coordinates are present in the channel. Convienence method for setting this meshe's face list from an index buffer. Index buffer Indices per face True if the operation succeeded, false otherwise (e.g. not enough data) Convienence method for accumulating all face indices into a single index array. int index array Convienence method for accumulating all face indices into a single index array as unsigned integers (the default from Assimp, if you need them). uint index array Convienence method for accumulating all face indices into a single index array. short index array Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A mesh attachment store per-vertex animations for a particular frame. You may think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual relationship between the time line and mesh attachments is established by the mesh animation channel, which references singular mesh attachments by their ID and binds them to a time offset. Gets or sets the mesh animation name. Gets the number of vertices in this mesh. This is a replacement for the host mesh's vertex count. Likewise, a mesh attachment cannot add or remove per-vertex attributes, therefore the existance of vertex data will match the existance of data in the mesh. Checks whether the attachment mesh overrides the vertex positions of its host mesh. Gets the vertex position list. Checks whether the attachment mesh overrides the vertex normals of its host mesh. Gets the vertex normal list. Checks whether the attachment mesh overrides the vertex tangents and bitangents of its host mesh. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets or sets the weight of the mesh animation. Constructs a new instance of the class. Checks if the mesh attachment overrides a particular set of vertex colors on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximumb number of vertex color channels. Channel index True if vertex colors are present in the channel. Checks if the mesh attachment overrides a particular set of texture coordinates on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximum number of texture coordinate channels. Channel index True if texture coordinates are present in the channel. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes vertex-based animations for a single mesh or a group of meshes. Meshes carry the animation data for each frame. The purpose of this object is to define keyframes, linking each mesh attachment to a particular point in a time. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of meshkeys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds an anim mesh (referenced by an index) to a specific point in time. The time of this key. Index of the anim mesh that corresponds to this keyframe. Constructs a new MeshKey. The time of this key. Index of the anim mesh that corresponds to this keyframe. Tests equality between two keys. The first key The second key True if the key's indices are the same, false otherwise Tests inequality between two keys. The first key The second key True if the key's indices are not equal, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes morph-based keyframe animations for a single mesh or a group of meshes. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of mesh morph keys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh morph keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Reads the unmanaged data from the native value. Input native value Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds a morph animation mesh to a specific point in time. Gets or sets the time of this keyframe. Gets the values at the time of this keyframe. Number of values must equal number of weights. Gets the weights at the time of this keyframe. Number of weights must equal number of values. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a container for holding metadata, representing as key-value pairs. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an entry in a metadata container. Gets the type of metadata. Gets the metadata data stored in this entry. Constructs a new instance of the struct. Type of the data. The data. Tests equality between two entries. First entry Second entry True if the entries are equal, false otherwise Tests inequality between two entries. First entry Second entry True if the entries are not equal, false otherwise Gets the data as the specified type. If it cannot be casted to the type, then null is returned. Type to cast the data to. Casted data or null. Determines whether the specified is equal to this instance. The to compare with this instance. True if the specified is equal to this instance; otherwise, false. Indicates whether the current object is equal to another object of the same type. An object to compare with this object. True if the current object is equal to the parameter; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Attribute for assocating a type with an instance. Gets the associated marshaler. Constructs a new instance of the class. Type that implements Thrown if the type is null. Thrown if the type does not implement . A node in the imported model hierarchy. Gets or sets the name of the node. Gets or sets the transformation of the node relative to its parent. Gets the node's parent, if it exists. Gets the number of children that is owned by this node. Gets if the node contains children. Gets the node's children. Gets the number of meshes referenced by this node. Gets if the node contains mesh references. Gets the indices of the meshes referenced by this node. Meshes can be shared between nodes, so there is a mesh collection owned by the scene that each node can reference. Gets the node's metadata container. Constructs a new instance of the class. Constructs a new instance of the class. Name of the node Constructs a new instance of the class. Name of the node Parent of the node Finds a node with the specific name, which may be this node or any children or children's children, and so on, if it exists. Node name The node or null if it does not exist Gets a value indicating whether this instance is native blittable. Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes the animation of a single node. The name specifies the bone/node which is affected by this animation chanenl. The keyframes are given in three separate seties of values, one for each position, rotation, and scaling. The transformation matrix is computed from these values and replaces the node's original transformation matrix at a specific time. This means all keys are absolute and not relative to the bone default pose. The order which the transformations are to be applied is scaling, rotation, and translation (SRT). Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no negative time values, but they are not forbidden. Gets or sets the name of the node affected by this animation. It must exist and it must be unique. Gets the number of position keys in the animation channel. Gets if this animation channel contains position keys. Gets the position keys of this animation channel. Positions are specified as a 3D vector. If there are position keys, there should also be -at least- one scaling and one rotation key. Gets the number of rotation keys in the animation channel. Gets if the animation channel contains rotation keys. Gets the rotation keys of this animation channel. Rotations are given as quaternions. If this exists, there should be -at least- one scaling and one position key. Gets the number of scaling keys in the animation channel. Gets if the animation channel contains scaling keys. Gets the scaling keys of this animation channel. Scalings are specified in a 3D vector. If there are scaling keys, there should also be -at least- one position and one rotation key. Gets or sets how the animation behaves before the first key is encountered. By default the original transformation matrix of the affected node is used. Gets or sets how the animation behaves after the last key was processed. By default the original transformation matrix of the affected node is taken. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage. Gets the number of elements contained in the . Gets or sets the element at the specified index. The child index Gets a value indicating whether the is read-only. true if the is read-only; otherwise, false. Constructs a new instance of the class. Parent node Adds an item to the . The object to add to the . Adds a range of items to the list. Item array Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if is found in the ; otherwise, false. Copies collection contents to the array The array to copy to. Index of the array to start copying. Determines the index of a specific item in the . The object to locate in the . The index of if found in the list; otherwise, -1. Inserts an item to the at the specified index. The zero-based index at which should be inserted. The object to insert into the . Removes the item at the specified index. The zero-based index of the item to remove. Removes the first occurrence of a specific object from the . The object to remove from the . true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . Copies elements in the collection to a new array. Array of copied elements Returns an enumerator that iterates through the collection. A that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. Represents a plane in three-dimensional euclidean space where A, B, C are components of the plane normal and D is the distance along the normal from the origin to the plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Constructs a new Plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Static class containing preset properties for post processing options. PostProcess configuration for (some) Direct3D conventions, left handed geometry, upper left origin for UV coordinates, and clockwise face order, suitable for CCW culling. PostProcess configuration for optimizing data for real-time. Does the following steps: , , , , , and PostProcess configuration for optimizing data for real-time rendering. Does the following steps: , , , , , , , , , and PostProcess configuration for heavily optimizing the data for real-time rendering. Includes all flags in as well as , , and A 4D vector that represents a rotation. Rotation component of the quaternion/ X component of the vector part of the quaternion. Y component of the vector part of the quaternion. Z component of the vector part of the quaternion. Constructs a new Quaternion. W component X component Y component Z component Constructs a new Quaternion from a rotation matrix. Rotation matrix to create the Quaternion from. Constructs a new Quaternion from three euler angles. Pitch Yaw Roll Constructs a new Quaternion from an axis-angle. Axis Angle about the axis Normalizes the quaternion. Transforms this quaternion into its conjugate. Returns a matrix representation of the quaternion. Rotation matrix representing the quaternion. Spherical interpolation between two quaternions. Start rotation when factor == 0 End rotation when factor == 1 Interpolation factor between 0 and 1, values beyond this range yield undefined values Interpolated quaternion. Rotates a point by this quaternion. Point to rotate Quaternion representing the rotation Rotated point. Multiplies two quaternions. First quaternion Second quaternion Resulting quaternion Tests equality between two quaternions. First quaternion Second quaternion True if the quaternions are equal, false otherwise. Tests inequality between two quaternions. First quaternion Second quaternion True if the quaternions are not equal, false otherwise. Tests equality between two quaternions. Quaternion to compare True if the quaternions are equal. Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a rotation for a given time. The time of this key. The rotation of this key. Constructs a new QuaternionKey. Time of the key. Quaternion rotation at the time frame. Tests equality between two keys. The first key The second key True if the key's rotations are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's rotations are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their rotations are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Defines a 3D ray with a point of origin and a direction. Origin of the ray in space. Direction of the ray. Constructs a new Ray. Origin of the ray. Direction of the ray. Represents a completely imported model or scene. Everything that was imported from the given file can be accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory and Assimp's read only copy is released. Gets or sets the state of the imported scene. By default no flags are set, but issues can arise if the flag is set to incomplete. Gets or sets the root node of the scene graph. There will always be at least the root node if the import was successful and no special flags have been set. Presence of further nodes depends on the format and content of the imported file. Gets if the scene contains meshes. Unless if no special scene flags are set this should always be true. Gets the number of meshes in the scene. Gets the meshes contained in the scene, if any. Gets if the scene contains any lights. Gets the number of lights in the scene. Gets the lights in the scene, if any. Gets if the scene contains any cameras. Gets the number of cameras in the scene. Gets the cameras in the scene, if any. Gets if the scene contains embedded textures. Gets the number of embedded textures in the scene. Gets the embedded textures in the scene, if any. Gets if the scene contains any animations. Gets the number of animations in the scene. Gets the animations in the scene, if any. Gets if the scene contains any materials. There should always be at least the default Assimp material if no materials were loaded. Gets the number of materials in the scene. There should always be at least the default Assimp material if no materials were loaded. Gets the materials in the scene. Gets the metadata of the scene. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. Gets or sets the name of the scene. Constructs a new instance of the class. Constructs a new instance of the class. Name of the scene Clears the scene of all components. Gets an embedded texture by a string. The string may be a texture ID in the format of "*1" or is the file name of the texture. Texture ID or original file name. Embedded texture or null if it could not be found. Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to , the memory is owned by AssimpNet and cannot be freed by the native library. Scene data Unmanaged scene or NULL if the scene is null. Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. The unmanaged scene data The managed scene, or null if the pointer is NULL Frees unmanaged memory allocated -ONLY- in . To free an unmanaged scene allocated by the unmanaged Assimp library, call the appropiate function. Pointer to unmanaged scene data. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a texel in ARGB8888 format. Blue component. Green component. Red component. Alpha component. Constructs a new Texel. Blue component. Green component. Red component. Alpha component. Tests equality between two texels. First texel Second texel True if the texels are equal, false otherwise. Tests inequality between two texels. First texel Second texel True if the texels are not equal, false otherwise. Implicitly converts a texel to a Color4D. Texel to convert Converted Color4D Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes all the values pertaining to a particular texture slot in a material. Gets the texture file path. Gets the texture type semantic. Gets the texture index in the material. Gets the texture mapping. Gets the UV channel index that corresponds to this texture from the mesh. Gets the blend factor. Gets the texture operation. Gets the texture wrap mode for the U coordinate. Gets the texture wrap mode for the V coordinate. Gets misc flags. Constructs a new TextureSlot. Texture filepath Texture type semantic Texture index in the material Texture mapping UV channel in mesh that corresponds to this texture Blend factor Texture operation Texture wrap mode for U coordinate Texture wrap mode for V coordinate Misc flags Defines configurable properties for importing models. All properties have default values. Setting config properties are done via the SetProperty* methods in AssimpMethods. Enables time measurements. If enabled the time needed for each part of the loading process is timed and logged. Type: bool. Default: false Sets Assimp's multithreading policy. This is ignored if Assimp is built without boost.thread support. Possible values are: -1 to let Assimp decide, 0 to disable multithreading, and nay number larger than 0 to force a specific number of threads. This is only a hint and may be ignored by Assimp. Type: integer. Default: -1 Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Type: Bool. Default: false. Specifies the maximum angle that may be between two vertex tangents that their tangents and bitangents are smoothed during the step to calculate the tangent basis. The angle specified is in degrees. The maximum value is 175 degrees. Type: float. Default: 45 degrees Specifies the maximum angle that may be between two face normals at the same vertex position that their normals will be smoothed together during the calculate smooth normals step. This is commonly called the "crease angle". The angle is specified in degrees. Maximum value is 175 degrees (all vertices smoothed). Type: float. Default: 175 degrees Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. Type: string. Default: "colormap.lmp" Configures the step to keep materials matching a name in a given list. This is a list of 1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Tabs or carriage returns are treated as whitespace. If a material matches one of these names, it will not be modified or removed by the post processing step nor will other materials be replaced by a reference to it. Default: string. Default: "" Configures the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option could be of used if you have a scene hierarchy that contains important additional information which you intend to parse. Type: bool. Default: false Configures the step to normalize all vertex components into the -1...1 range. That is, a bounding box for the whole scene is computed where the maximum component is taken and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension of the input data. Type: bool. Default: false Configures the step to remove degenerated primitives from the import immediately. The default behavior converts degenerated triangles to lines and degenerated lines to points. Type: bool. Default: false Configures the step to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if is set to true. Type: bool. Default: false Configures the step to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns and tabs are treated as white space. If a node matches one of these names, it will not be modified or removed by the postprocessing step. Type: string. Default: "" Sets the maximum number of triangles a mesh can contain. This is used by the step to determine whether a mesh must be split or not. Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES Sets the maximum number of vertices in a mesh. This is used by the step to determine whether a mesh must be split or not. Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES Sets the maximum number of bones that can affect a single vertex. This is used by the step. Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS Sets the size of the post-transform vertex cache to optimize vertices for. This is for the step. The size is given in vertices. Of course you can't know how the vertex format will exactly look like after the import returns, but you can still guess what your meshes will probably have. The default value *has* resulted in slight performance improvements for most Nvidia/AMD cards since 2002. Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE Input parameter to the step. It specifies the parts of the data structure to be removed. This is a bitwise combination of the flag. If no valid mesh is remaining after the step is executed, the import FAILS. Type: integer. Default: 0 Input parameter to the step. It specifies which primitive types are to be removed by the step. This is a bitwise combination of the flag. Specifying ALL types is illegal. Type: integer. Default: 0 Input parameter to the step. It specifies the floating point accuracy for animation values, specifically the epislon during the comparison. The step checks for animation tracks where all frame values are absolutely equal and removes them. Two floats are considered equal if the invariant abs(n0-n1) > epislon holds true for all vector/quaternion components. Type: float. Default: 0.0f (comparisons are exact) Input parameter to the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Type: Bool. Default: false. Input parameter to the step. It specifies which UV transformations are to be evaluated. This is bitwise combination of the flag. Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations) A hint to Assimp to favour speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-processing steps to use faster code paths if possible. A value not equal to zero stands for true. Type: integer. Default: 0 Maximum bone cone per mesh for the step. Meshes are split until the max number of bones is reached. Type: integer. Default: 60 Source UV channel for tangent space computation. The specified channel must exist or an error will be raised. Type: integer. Default: 0 Threshold used to determine if a bone is kept or removed during the step. Type: float. Default: 1.0f Require all bones to qualify for deboning before any are removed. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: Matrix4x4. Default: Identity Matrix Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Type: Float. Default: 1.0f. Applies application-specific scale to the global scale factor to allow for backwards compatibility. Type: Float. Default: 1.0f. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). The libary reads only one frame of models with vertex animations. By default this is the first frame. The default value is 0. This option applies to all importers. However, it is also possible to override the global setting for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which you want to override the global setting. Type: integer. Default: 0 See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. Type: bool. Default: true Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. Type: bool. Default: true Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). Type: bool. Default: true Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Type: bool. Default: false Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. Type: bool. Default: true Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. Type: bool. Default: true Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. Type: string. Default: "default" Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. Type: string. Default: "" Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty Type: bool. Default: false (All layers are loaded) Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Type: bool. Default: false Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Type: integer. Default: taken from file Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Type: integer. Default: taken from file Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. Type: integer. Default: 100 The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. Type: string. Default: "Scene.Material" The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. Type: Bool. Default: false. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Type: Bool. Default: true. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Type: Bool. Default: true. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Type: Float. Default: 10.0f Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Type: Integer. Default: 32 Specifies whether the collada loader will ignore the up direction. Type: Bool. Default: false Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The default is to use the id tag (resp. sid tag, if no id tag is present) instead. Type: Bool. Default: false. Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first. Type: bool. Default: true. Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer will read materials, otherwise this has no effect. Type: Bool. Default: false. Specifies whether the FBX importer will read materials. Type: Bool. Default: true. Specifies whether the FBX importer will read embedded textures. Type: Bool. Default: true. Specifies whether the fbx importer will use the legacy embedded texture naming. Type: Bool. Default: false. Specifies whether the FBX importer will read cameras. Type: Bool. Default: true. Specifies whether the FBX importer will read light sources. Type: Bool. Default: true. Specifies whether the FBX importer will read animations. Type: Bool. default: true. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Type: Bool. Default: false. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Type: Bool. Default: true. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Type: Bool. Default: true. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Type: Bool. Default: false. Specifies whether the importer will load multiple animations. Type: Bool. Default: true. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Type: Bool. Default: true. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Type: Bool. Default: false. Specifies whether the export should be able to export point clouds. When this flag is not defined the render data has to contain valid faces. Point clouds are only a collection of vertices which have no spatial organization by a face and the validation process will remove them. Enabling this feature will switch off the flag and enable the functionality to export pure point clouds. Type: Bool. Default: false. Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants are grouped according to their usage or where they're found in the Assimp include files. Default value for . Default value for . Default value for . Default value for . Default value for Defines the maximum number of indices per face (polygon). Defines the maximum number of bone weights. Defines the maximum number of vertices per mesh. Defines the maximum number of faces per mesh. Defines the maximum number of vertex color sets per mesh. Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh. Defines the default bone count limit. Defines the deboning threshold. Defines the maximum length of a string used in AiString. Defines the default color material. Defines the default textured material (if the meshes have UV coords). Static class containing material key constants. A fully qualified mat key name here means that it's a string that combines the mat key (base) name, its texture type semantic, and its texture index into a single string delimited by commas. For non-texture material properties, the texture type semantic and texture index are always zero. Material name (String) Material name (String) Two sided property (boolean) Two sided property (boolean) Shading mode property (ShadingMode) Shading mode property (ShadingMode) Enable wireframe property (boolean) Enable wireframe property (boolean) Blending function (BlendMode) Blending function (BlendMode) Opacity (float) Opacity (float) Transparency Factor (float) Transparency Factor (float) Bumpscaling (float) Bumpscaling (float) Shininess (float) Shininess (float) Reflectivity (float) Reflectivity (float) Shininess strength (float) Shininess strength (float) Refracti (float) Refracti (float) Diffuse color (Color4D) Diffuse color (Color4D) Ambient color (Color4D) Ambient color (Color4D) Specular color (Color4D) Specular color (Color4D) Emissive color (Color4D) Emissive color (Color4D) Transparent color (Color4D) Transparent color (Color4D) Reflective color (Color4D) Reflective color (Color4D) Background image (String) Background image (String) Texture base name UVWSRC base name Texture op base name Mapping base name Texture blend base name. Mapping mode U base name Mapping mode V base name Texture map axis base name UV transform base name Texture flags base name Shader language type (string) Shader language type (string) Vertex shader source code (string) Vertex shader source code (string) Fragment/Pixel shader source code (string) Fragment/Pixel shader source code (string) Geometry shader source code (string) Geometry shader source code (string) Tesselation shader source code (string) Tesselation shader source code (string) Primitive/Domain shader source code (string) Primitive/Domain shader source code (string) Compute shader source code (string) Compute shader source code (string) Helper function to get the fully qualified name of a texture property type name. Takes in a base name constant, a texture type, and a texture index and outputs the name in the format: "baseName,TextureType,texIndex" Base name Texture type Texture index Fully qualified texture name Helper function to get the base name from a fully qualified name of a material property type name. The format of such a string is: "baseName,TextureType,texIndex" Fully qualified material property name. Base name of the property type. Singleton that governs access to the unmanaged Assimp library functions. Default name of the unmanaged library. Based on runtime implementation the prefix ("lib" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically. Gets the AssimpLibrary instance. Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only, then it will not utilize multiple threads during import. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a scene from a stream. This uses the "aiImportFileFromMemory" function. The stream can be from anyplace, not just a memory stream. It is up to the caller to dispose of the stream. Stream containing the scene data Post processing flags A hint to Assimp to decide which importer to use to process the data Property store containing the config name-values, may be null. Pointer to the unmanaged data structure. Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled from the managed scene structure - only for scenes whose memory was allocated by the native library! Pointer to the unmanaged scene data structure. Applies a post-processing step on an already imported scene. Pointer to the unmanaged scene data structure. Post processing steps to run. Pointer to the unmanaged scene data structure. Gets all supported export formats. Array of supported export formats. Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file. Scene to export, it is the responsibility of the caller to free this when finished. Format id describing which format to export to. Pre processing flags to operate on the scene during the export. Exported binary blob, or null if there was an error. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified and the scene be exported. Valid scene to be copied Modifyable copy of the scene Attaches a log stream callback to catch Assimp messages. Pointer to an instance of AiLogStream. Enables verbose logging. True if verbose logging is to be enabled or not. Gets if verbose logging is enabled. True if verbose logging is enabled, false otherwise. Detaches a logstream callback. Pointer to an instance of AiLogStream. A return code signifying if the function was successful or not. Detaches all logstream callbacks currently attached to Assimp. Create an empty property store. Property stores are used to collect import settings. Pointer to property store Deletes a property store. Pointer to property store Sets an integer property value. Pointer to property store Property name Property value Sets a float property value. Pointer to property store Property name Property value Sets a string property value. Pointer to property store Property name Property value Sets a matrix property value. Pointer to property store Property name Property value Retrieves a color value from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The color if it exists. If not, the default Color4D value is returned. Retrieves an array of float values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The float array, if it exists Retrieves an array of integer values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The integer array, if it exists Retrieves a material property with the specific key from the material. Material to retrieve the property from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The material property, if found. Retrieves a string from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The string, if it exists. If not, an empty string is returned. Gets the number of textures contained in the material for a particular texture type. Material to retrieve the data from Texture Type semantic The number of textures for the type. Gets the texture filepath contained in the material. Material to retrieve the data from Texture type semantic Texture index The texture filepath, if it exists. If not an empty string is returned. Gets all values pertaining to a particular texture from a material. Material to retrieve the data from Texture type semantic Texture index Returns the texture slot struct containing all the information. Gets the last error logged in Assimp. The last error message logged. Checks whether the model format extension is supported by Assimp. Model format extension, e.g. ".3ds" True if the format is supported, false otherwise. Gets all the model format extensions that are currently supported by Assimp. Array of supported format extensions Gets a collection of importer descriptions that detail metadata and feature support for each importer. Collection of importer descriptions Gets the memory requirements of the scene. Pointer to the unmanaged scene data structure. The memory information about the scene. Creates a quaternion from the 3x3 rotation matrix. Quaternion struct to fill Rotation matrix Decomposes a 4x4 matrix into its scaling, rotation, and translation parts. 4x4 Matrix to decompose Scaling vector Quaternion containing the rotation Translation vector Transposes the 4x4 matrix. Matrix to transpose Transposes the 3x3 matrix. Matrix to transpose Transforms the vector by the 3x3 rotation matrix. Vector to transform Rotation matrix Transforms the vector by the 4x4 matrix. Vector to transform Matrix transformation Multiplies two 4x4 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Multiplies two 3x3 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Creates a 3x3 identity matrix. Matrix to hold the identity Creates a 4x4 identity matrix. Matrix to hold the identity Gets the Assimp legal info. String containing Assimp legal info. Gets the native Assimp DLL's minor version number. Assimp minor version number Gets the native Assimp DLL's major version number. Assimp major version number Gets the native Assimp DLL's revision version number. Assimp revision version number Returns the branchname of the Assimp runtime. The current branch name. Gets the native Assimp DLL's current version number as "major.minor.revision" string. This is the version of Assimp that this wrapper is currently using. Unmanaged DLL version Gets the native Assimp DLL's current version number as a .NET version object. Unmanaged DLL version Get the compilation flags that describe how the native Assimp DLL was compiled. Compilation flags Defines all the unmanaged assimp C-function names. Defines all of the delegates that represent the unmanaged assimp functions. Enumerates supported platforms. Windows platform. Linux platform. Mac platform. An attribute that represents the name of an unmanaged function to import. Name of the unmanaged function. Constructs a new . Name of the function. Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load unmanaged libraries. Occurs when the unmanaged library is loaded. Occurs when the unmanaged library is freed. Queries if the unmanaged library has been loaded or not. Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional names can be set in the (e.g. to load versioned DLLs) Gets the path to the unmanaged library DLL that is currently loaded. Gets the resolver used to find the unmanaged library DLL when loading. Gets or sets whether an is thrown if the unmanaged DLL fails to load for whatever reason. By default this is true. Queries if the OS is 64-bit, if false then it is 32-bit. Constructs a new . Default name (NOT path) of the unmanaged library. Delegate types to instantiate and load. Gets an enum representing the current OS that is application is executing on. Platform enumeration. Loads the unmanaged library using the . True if the library was found and successfully loaded. Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness. Path to the 32-bit DLL Path to the 64-bit DLL True if the library was found and successfully loaded. Loads the unmanaged library using the supplied path. Path to the unmanaged DLL. True if the library was found and successfully loaded. Frees the unmanaged library that is currently loaded. True if the library was sucessfully freed. Gets a delegate based on the unmanaged function name. Type of delegate. Name of unmanaged function that is exported by the library. The delegate, or null if not found. If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library from the default path. This function is thread safe. Called when the library is loaded. Called when the library is freed. Resolves unmanaged DLLs for . The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs), an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See for the search strategy. Gets the platform that the application is running on. Constructs a new instance of the class. Platform we're resolving binaries for. Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets an override 32-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 32-bit and 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution: Search user-specified probing paths. Search {AppBaseDirectory}/runtimes/{RID}/native/. Search {AppBaseDirectory}/. Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/. The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID is the Runtime Identifier based on the platform/architecture, see also Microsoft's RID Catalog. Name of the library to attempt to resolve. Full file path to the library, or the file name if not found (e.g. "libXYZ.so"). Represents an aiScene struct. unsigned int, flags about the state of the scene aiNode*, root node of the scenegraph. Number of meshes contained. aiMesh**, meshes in the scene. Number of materials contained. aiMaterial**, materials in the scene. Number of animations contained. aiAnimation**, animations in the scene. Number of embedded textures contained. aiTexture**, textures in the scene. Number of lights contained. aiLight**, lights in the scene. Number of cameras contained. aiCamera**, cameras in the scene. aiMetadata*, The global metadata assigned to the scene itself. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. The name of the scene itself. Number of skeletons contained. aiSkeleton**, skeletons in the scene. Internal data, do not touch Represents an aiNode struct. Name of the node. Node's transform relative to its parent. aiNode*, node's parent. Number of children the node owns. aiNode**, array of nodes this node owns. Number of meshes referenced by this node. unsigned int*, array of mesh indices. aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any. Represents an aiMetadataEntry struct. Type of metadata. Pointer to data. Represents an aiMetadata struct. Length of the Keys and Values arrays. aiString*, array of keys. May not be NULL. Each entry must exist. aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value. Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs. unsigned int, bitwise flag detailing types of primitives contained. Number of vertices in the mesh, denotes length of -all- per-vertex arrays. Number of faces in the mesh. aiVector3D*, array of positions. aiVector3D*, array of normals. aiVector3D*, array of tangents. aiVector3D*, array of bitangents. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example. Max_Value is defined as . aiFace*, array of faces. Number of bones in the mesh. aiBone**, array of bones. Material index referencing the material in the scene. Optional name of the mesh. Number of attachment meshes. NOT CURRENTLY IN USE. aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE. unsigned int, method of morphing when anim meshes are specified. Axis aligned bounding box. aiString[Max_Value], pointer to array of texture coordinate names. Max_Value is defined as . Represents an aiTexture struct. Width of the texture. Height of the texture. sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that maps to one byte. 8 for string + 1 for terminator. aiTexel*, array of texel data. Texture original filename. Sets the format hint. Format hint - must be 3 characters or less Gets the format hint. The format hint Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref. AiTexture The format hint Represents an aiFace struct. Number of indices in the face. unsigned int*, array of indices. Represents an aiBone struct. Name of the bone. Number of weights. Bone armature, used for skeleton conversion. Bone needed in scene, used for skeleton conversion. VertexWeight*, array of vertex weights. Matrix that transforms the vertex from mesh to bone space in bind pose Represents an aiMaterialProperty struct. Name of the property (key). Textures: Specifies texture usage. None texture properties have this zero (or None). Textures: Specifies the index of the texture. For non-texture properties this is always zero. Size of the buffer data in bytes. This value may not be zero. Type of value contained in the buffer. char*, byte buffer to hold the property's value. Represents an aiMaterial struct. aiMaterialProperty**, array of material properties. Number of key-value properties. Storage allocated for key-value properties. Represents an aiNodeAnim struct. Name of the node affected by the animation. The node must exist and be unique. Number of position keys. VectorKey*, position keys of this animation channel. Positions are 3D vectors and are accompanied by at least one scaling and one rotation key. The number of rotation keys. QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions). If there are rotation keys there will be at least one scaling and one position key. Number of scaling keys. VectorKey*, scaling keys of this animation channel. Scalings are specified as a 3D vector, and if there are scaling keys, there will at least be one position and one rotation key. Defines how the animation behaves before the first key is encountered. Defines how the animation behaves after the last key was processed. Represents an aiMeshAnim struct. Name of the mesh to be animated. Empty string not allowed. Number of keys, there is at least one. aiMeshkey*, the key frames of the animation. There must exist at least one. Represents an aiMeshMorphKey struct. The time of this key. unsigned int*, values at the time of this key. double*, weights at the time of this key. unsigned int, the number of values/weights. Represents an aiMeshMorphAnim struct. aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). unsigned int, number of key frames. Must be at least one. aiMeshMorphKey*, key frames of the animation. Represents an aiAnimation struct. Name of the animation. Duration of the animation in ticks. Ticks per second, 0 if not specified in imported file. Number of bone animation channels, each channel affects a single node. aiNodeAnim**, node animation channels. Each channel affects a single node. Number of mesh animation channels. Each channel affects a single mesh and defines vertex-based animation. aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. Number of mesh morph animation channels. Each channel affects a single mesh and defines morphing animation. aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. Represents an aiLight struct. Name of the light. Type of light. Position of the light. Direction of the spot/directional light. Up direction of the light source in space. Undefined for point lights. Attenuation constant value. Attenuation linear value. Attenuation quadratic value. Diffuse color. Specular color. Ambient color. Spot light inner angle. Spot light outer angle. Width (X) and Height (Y) of the area that represents an light. Represents an aiCamera struct. Name of the camera. Position of the camera. Up vector of the camera. Viewing direction of the camera. Field Of View of the camera. Near clip plane distance. Far clip plane distance. The Aspect ratio. Represents an aiString struct. Byte length of the UTF-8 string, NOT logical length. Actual string data. Constructs a new instance of the struct. The string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref. AiString AiString string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. AiString string data Convienence method for setting the AiString string (and length). String data to set True if the operation was successful, false otherwise. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Represents a log stream, which receives all log messages and streams them somewhere. Function pointer that gets called when a message is to be logged. char*, user defined opaque data. Represents the memory requirements for the different components of an imported scene. All sizes in in bytes. Size of the storage allocated for texture data, in bytes. Size of the storage allocated for material data, in bytes. Size of the storage allocated for mesh data, in bytes. Size of the storage allocated for node data, in bytes. Size of the storage allocated for animation data, in bytes. Size of the storage allocated for camera data, in bytes. Size of the storage allocated for light data, in bytes. Total storage allocated for the imported scene, in bytes. Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs. Anim Mesh name aiVector3D*, replacement position array. aiVector3D*, replacement normal array. aiVector3D*, replacement tangent array. aiVector3D*, replacement bitangent array. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int, number of vertices. float, weight of the AnimMesh. Describes a variety of information about an importer. char*, full name of the importer (e.g. Blender3D Importer) char*, original author (blank if unknown or assimp team) char*, current maintainer, left blank if the author maintains. char*, implementation comments. E.g. unimplemented features. unsigned int, features supported by the importer. unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. "xml dae"). Multiple importers may respond to the same file extension, assim Describes a file format which Assimp can export to. char*, a short string ID to uniquely identify the export format. e.g. "collada" or "obj" char*, a short description of the file format to present to users. char*, a recommended file extension of the exported file in lower case. Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly. size_t, size of the data in bytes. void*, the data. AiString, name of the blob. aiExportDataBlob*, pointer to the next blob in the chain. Contains callbacks to implement a custom file system to open and close files. Function pointer to open a new file. Function pointer used to close an existing file. Char*, user defined opaque data. Contains callbacks to read and write to a file opened by a custom file system. Function pointer to read from a file. Function pointer to write to a file. Function pointer to retrieve the current position of the file cursor. Function pointer to retrieve the size of the file. Function pointer to set the current position of the file cursor. Function pointer to flush the file contents. Char*, user defined opaque data. Callback delegate for Assimp's LogStream. Log message char* pointer to user data that is passed to the callback Callback delegate for a custom file system, to write to a file. Pointer to an AiFile instance Char* pointer to data to write (casted from a void*) Size of a single element in bytes to write Number of elements to write Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured. Callback delegate for a custom file system, to read from a file. Pointer to an AiFile instance. Char* pointer that will store the data read (casted from a void*) Size of a single element in bytes to read Number of elements to read Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured. Callback delegate for a custom file system, to tell offset/size information about the file. Pointer to an AiFile instance. Returns the current file cursor or the file size in bytes. May be -1 if an error has occured. Callback delegate for a custom file system, to flush the contents of the file to the disk. Pointer to an AiFile instance. Callback delegate for a custom file system, to set the current position of the file cursor. Pointer to An AiFile instance. Offset from the origin. Position used as a reference Returns success, if successful Callback delegate for a custom file system, to open a given file and create a new AiFile instance. Pointer to an AiFileIO instance. Path to the target file Read-write permissions to request Pointer to an AiFile instance. Callback delegate for a custom file system, to close a given file and free its memory. Pointer to an AiFileIO instance. Pointer to an AiFile instance that will be closed. Fixed length array for representing the color channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the texture coordinate channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Defines how an UV channel is transformed. Translation on the U and V axes. Default is 0|0 Scaling on the U and V axes. Default is 1|1. Rotation in counter-clockwise direction, specfied in radians. The rotation center is 0.5f|0.5f and the default value is zero. Represents a two-dimensional vector. X component. Y component Gets or sets the component value at the specified zero-based index in the order of XY (index 0 access X, 1 access Y. If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector2D. X component Y component Constructs a new Vector2D with both components set the same value. Value to set both X and Y to Sets the X and Y values. X component Y component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a three-dimensional vector. X component. Y component. Z component. Gets or sets the component value at the specified zero-based index in the order of XYZ (index 0 access X, 1 access Y, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector3D. X component Y component Z component Constructs a new Vector3D. Vector2D containing the X, Y values Z component Constructs a new Vector3D where each component is set to the same value. Value to set X, Y, and Z to Sets the X, Y, and Z values. X component Y component Z component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Calculates the cross product of two vectors. First vector Second vector Resulting vector Calculates the dot product of two vectors. First vector Second vector Resulting vector Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Transforms this vector by a 3x3 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Transforms this vector by a 4x4 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a 3D vector for a given time. The time of this key. The 3D vector value of this key. Constructs a new VectorKey. The time of this key. The 3D vector value of this key. Tests equality between two keys. The first key The second key True if the key's 3D vectors are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's 3D vectors are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their 3D vectors are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a single influence of a bone on a vertex. Index of the vertex which is influenced by the bone. Strength of the influence in range of (0...1). All influences from all bones at one vertex amounts to 1. Constructs a new VertexWeight. Index of the vertex. Weight of the influence. Returns a that represents this instance. A that represents this instance. Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or replaces the entire method body. Recommended types to use are generally blittable structs. Casts the by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the readonly by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the pointer to a by-ref value of the specified type. Type to cast to. Pointer. Ref to the value, as the new type. Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to receive the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to write the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Computes the size of the type (inlined). Type of data. Size of the type in bytes. Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Writes a single element to the memory location (inlined). Type of data. Pointer to memory location. Value to be written. Writes a single element to the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value to be written. Reads a single element from the memory location (inlined). Type of data. Pointer to memory location. Value read. Reads a single element from the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value read. Copies the number of bytes from one pointer to the other (inlined). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Copies the number of bytes from one pointer to the other (inlined, unaligned copy). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Clears the memory to a specified value (inlined). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. Clears the memory to a specified value (inlined, unaligned init). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. ================================================ FILE: ThirdParty/GamepadConfig/GamepadConfig.exe.config ================================================ ================================================ FILE: ThirdParty/GamepadConfig/License.txt ================================================ These files can be used for commercial and non-commercial projects that makes use of MonoGame. ================================================ FILE: ThirdParty/GamepadConfig/Settings.xml ================================================  ================================================ FILE: ThirdParty/GamepadConfig/Tao.Sdl.dll.config ================================================ ================================================ FILE: ThirdParty/GamepadConfig/Xbox 360 Gamepad.xml ================================================ 潃瑮潲汬牥⠠托硯㌠〶圠物汥獥⁳敒散癩牥映牯圠湩潤獷) 0 0 Axis true 0 Axis false 1 Axis true 1 Axis false 8 Button false 0 None false 0 None false 0 None false 0 None false 9 Button false 0 PovUp false 0 PovDown false 0 PovLeft false 0 PovRight false 0 Button false 1 Button false 2 Button false 3 Button false 4 Button false 5 Button false 7 Button false 6 Button false 2 Axis false 2 Axis true ================================================ FILE: ThirdParty/GamepadConfig/Xbox 360 Wireless Receiver.xml ================================================  Xbox 360 Wireless Receiver 0 0 Axis true 0 Axis false 1 Axis true 1 Axis false 9 Button false 3 Axis true 3 Axis false 4 Axis true 4 Axis false 10 Button false 13 Button false 14 Button false 11 Button false 12 Button false 0 Button false 1 Button false 2 Button false 3 Button false 4 Button false 5 Button false 7 Button false 6 Button false 2 Axis false 5 Axis false ================================================ FILE: ThirdParty/Lidgren.Network/Documentation/ChangedFromV2.txt ================================================  * The NetBuffer object is gone; instead there are NetOutgoingMessage and NetIncomingMessage objects * No need to allocate a read buffer before calling ReadMessage ================================================ FILE: ThirdParty/Lidgren.Network/Documentation/Discovery.html ================================================  Peer/server discovery

Peer/server discovery

Peer discovery is the process of clients detecting what servers are available. Discovery requests can be made in two ways; locally as a broadcast, which will send a signal to all peers on your subnet. Secondly you can contact an ip address directly and query it if a server is running.

Responding to discovery requests are done in the same way regardless of how the request is made.

Here's how to do on the client side; ie. the side which makes a request:

// Enable DiscoveryResponse messages
config.EnableMessageType(NetIncomingMessageType.DiscoveryResponse);
 
// Emit a discovery signal
Client.DiscoverLocalPeers(14242);

This will send a discovery signal to your subnet; Here's how to receive the signal on the server side, and send a response back to the client:

// Enable DiscoveryRequest messages
config.EnableMessageType(NetIncomingMessageType.DiscoveryRequest);
 
// Standard message reading loop
while ((inc = Server.ReadMessage()) != null)
{
    switch (inc.MessageType)
    {
        case NetIncomingMessageType.DiscoveryRequest:
 
            // Create a response and write some example data to it
            NetOutgoingMessage response = Server.CreateMessage();
            response.Write("My server name");
 
            // Send the response to the sender of the request
            Server.SendDiscoveryResponse(response, inc.SenderEndpoint);
            break;

When the response then reaches the client, you can read the data you wrote on the server:

// Standard message reading loop
while ((inc = Client.ReadMessage()) != null)
{
    switch (inc.MessageType)
    {
        case NetIncomingMessageType.DiscoveryResponse:
 
            Console.WriteLine("Found server at " + inc.SenderEndpoint + " name: " + inc.ReadString());
            break;
================================================ FILE: ThirdParty/Lidgren.Network/Documentation/Improvements.txt ================================================  Improvements over last version of library: * New delivery type: Reliable sequenced (Lost packets are resent but late arrivals are dropped) * Disconnects and shutdown requests are now queued properly, so calling shutdown will still send any queued messages before shutting down * All messages are pooled/recycled for zero garbage * Reduced CPU usage and lower latencies (in the <1 ms range, but still) due to better socket polling * All public members of NetPeer/NetConnection are completely thread safe * Larger number of delivery channels * More exact roundtrip measurement * Method serialize entire objects via reflection * Unique identifier now exists for all peers/connections * More flexible peer discovery; filters possible and arbitrary data can be sent with response * Much better protection against malformed messages crashing the app API enhancements: * NetPeerConfiguration immutable properties now locked once NetPeer is initialized * Messages cannot be send twice by accident * Impossible to confuse sending and receiving buffers since they're different classes * No more confusion if user should create a buffer or preallocate and reuse ================================================ FILE: ThirdParty/Lidgren.Network/Documentation/PacketLayout.txt ================================================  PER MESSAGE: 7 bits - NetMessageType 1 bit - Is a message fragment? [8 bits NetMessageLibraryType, if NetMessageType == Library] [16 bits sequence number, if NetMessageType >= UserSequenced] 8/16 bits - Payload length in bits (variable size ushort) [16 bits fragments group id, if fragmented] [16 bits fragments total count, if fragmented] [16 bits fragment number, if fragmented] [x - Payload] if length > 0 ================================================ FILE: ThirdParty/Lidgren.Network/Documentation/SimulatingBadNetwork.html ================================================  Lidgren tutorial

Simulating bad network conditions

On the internet, your packets are likely to run in to all kinds of trouble. They will be delayed and lost and they might even arrive multiple times at the destination. Lidgren has a few option to simulate how your application or game will react when this happens.
They are all configured using the NetPeerConfiguration class - these properties exists:

SimulatedLoss   This is a float which simulates lost packets. A value of 0 will disable this feature, a value of 0.5f will make half of your sent packets disappear, chosen randomly. Note that packets may contain several messages - this is the amount of packets lost.
 
SimulatedDuplicatesChance   This is a float which determines the chance that a packet will be duplicated at the destination. 0 means no packets will be duplicated, 0.5f means that on average, every other packet will be duplicated.
 
SimulatedMinimumLatency
SimulatedRandomLatency
  These two properties control simulating delay of packets in seconds (not milliseconds, use 0.05 for 50 ms of lag). They work on top of the actual network delay and the total delay will be:
Actual one way latency + SimulatedMinimumLatency + [Randomly per packet 0 to SimulatedRandomLatency seconds]

It's recommended to assume symmetric condtions and configure server and client with the same simulation settings.

Simulating bad network conditions only works in DEBUG builds.

================================================ FILE: ThirdParty/Lidgren.Network/Documentation/TODO.txt ================================================  Completed features: * Message coalescing * Peer, connection statistics * Lag, loss and duplication simulation for testing * Connection approval * Throttling * Clock synchronization to detect jitter per packet (NetTime.RemoteNow) * Peer discovery * Message fragmentation Missing features: * Receipts 25% done, need design * More realistic lag/loss (lumpy) * Detect estimated packet loss * More advanced ack packet ================================================ FILE: ThirdParty/Lidgren.Network/Documentation/Tutorial.html ================================================  Lidgren basics tutorial

Lidgren basics

Lidgren network library is all about messages. There are two types of messages:

  • Library messages telling you things like a peer has connected or diagnostics messages (warnings, errors) when unexpected things happen.
  • Data messages which is data sent from a remote (connected or unconnected) peer.
  • The base class for establishing connections, receiving and sending message are the NetPeer class. Using it you can make a peer-to-peer network, but if you are creating a server/client topology there are special classes called NetServer and NetClient. They inherit NetPeer but sets some defaults and includes some helper methods/properties.

    Here's how to set up a NetServer:

    NetPeerConfiguration config = new NetPeerConfiguration("MyExampleName");
    config.Port = 14242;
     
    NetServer server = new NetServer(config);
    server.Start();

    The code above first creates a configuration. It has lots of properties you can change, but the default values should be pretty good for most applications. The string you provide in the constructor (MyExampleName) is an identifier to distinquish it from other applications using the lidgren library. Just make sure you use the same string in both server and client - or you will be unable to communicate between them.

    Secondly we've set the local port the server should listen to. This is the port number we tell the client(s) what port number to connect to. The local port can be set for a client too, but it's not needed and not recommended.

    Thirdly we create our server object and fourth we Start() it. Starting the server will create a new network thread and bind to a socket and start listening for connections.

    Early on we spoke about messages; now is the time to start receiving and sending some. Here's a code snippet for receiving messages:

    NetIncomingMessage msg;
    while ((msg = server.ReadMessage()) != null)
    {
        switch (msg.MessageType)
        {
            case NetIncomingMessageType.VerboseDebugMessage:
            case NetIncomingMessageType.DebugMessage:
            case NetIncomingMessageType.WarningMessage:
            case NetIncomingMessageType.ErrorMessage:
                Console.WriteLine(msg.ReadString());
                break;
            default:
                Console.WriteLine("Unhandled type: " + msg.MessageType);
                break;
        }
        server.Recycle(msg);
    }

    So, lets dissect the above code. First we declare a NetIncomingMessage, which is the type of incoming messages. Then we read a message and handles it, looping back as long as there are messages to fetch. For each message we find, we switch on sometime called MessageType - it's a description what the message contains. In this code example we only catch messages of type VerboseDebugMessage, DebugMessage, WarningMessage and ErrorMessage. All those four types are emitted by the library to inform about various events. They all contains a single string, so we use the method ReadString() to extract a copy of that string and print it in the console.

    Reading data will increment the internal message pointer so you can read subsequent data using the Read*() methods.

    For all other message type we just print that it's currently unhandled.

    Finally, we recycle the message after we're done with it - this will enable the library to reuse the object and create less garbage.

    Sending messages are even easier:

    NetOutgoingMessage sendMsg = server.CreateMessage();
    sendMsg.Write("Hello");
    sendMsg.Write(42);
     
    server.SendMessage(sendMsg, recipient, NetDeliveryMethod.ReliableOrdered);

    The above code first creates a new message, or uses a recycled message, which is why it's not possible to just create a message using new(). It then writes a string ("Hello") and an integer (System.Int32, 4 bytes in size) to the message.

    Then the message is sent using the SendMessage() method. The first argument is the message to send, the second argument is the recipient connection - which we'll not go into detail about just yet - and the third argument are HOW to deliver the message, or rather how to behave if network conditions are bad and a packet gets lost, duplicated or reordered.

    There are five delivery methods available:

    Unreliable   This is just UDP. Messages can be lost, received more than once and messages sent after other messages may be received before them.
     
    UnreliableSequenced   Using this delivery method messages can still be lost; but you're protected against duplicated messages and if a message arrives late; that is, if a message sent after this one has already been received - it will be dropped. This means you will never receive "older" data than what you already have received.
     
    ReliableUnordered   This delivery method ensures that every message sent will be received eventually. It does not however guarantee what order they will be received; late messages may be delivered before older ones.
     
    ReliableSequenced   This delivery method is similar to UnreliableSequenced; except that is guarantees that SOME messages will be received - if you only send one message - it will be received. If you sent two messages quickly, and they get reordered in transit, only the newest message will be received - but at least ONE of them will be received guaranteed.
     
    ReliableOrdered   This delivery method guarantees that messages will always be received in the exact order they were sent.

    Here's how to read and decode the message above:

    NetIncomingMessage incMsg = server.ReadMessage();
    string str = incMsg.ReadString();
    int a = incMsg.ReadInt32();
    ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetAESEncryption.cs ================================================ using System; using System.IO; using System.Security.Cryptography; namespace Lidgren.Network { public class NetAESEncryption : NetCryptoProviderBase { public NetAESEncryption(NetPeer peer) : base(peer, new AesCryptoServiceProvider()) { } public NetAESEncryption(NetPeer peer, string key) : base(peer, new AesCryptoServiceProvider()) { SetKey(key); } public NetAESEncryption(NetPeer peer, byte[] data, int offset, int count) : base(peer, new AesCryptoServiceProvider()) { SetKey(data, offset, count); } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetBlockEncryptionBase.cs ================================================ using System; using System.Collections.Generic; namespace Lidgren.Network { /// /// Base for a non-threadsafe encryption class /// public abstract class NetBlockEncryptionBase : NetEncryption { // temporary space for one block to avoid reallocating every time private byte[] m_tmp; /// /// Block size in bytes for this cipher /// public abstract int BlockSize { get; } /// /// NetBlockEncryptionBase constructor /// public NetBlockEncryptionBase(NetPeer peer) : base(peer) { m_tmp = new byte[BlockSize]; } /// /// Encrypt am outgoing message with this algorithm; no writing can be done to the message after encryption, or message will be corrupted /// public override bool Encrypt(NetOutgoingMessage msg) { int payloadBitLength = msg.LengthBits; int numBytes = msg.LengthBytes; int blockSize = BlockSize; int numBlocks = (int)Math.Ceiling((double)numBytes / (double)blockSize); int dstSize = numBlocks * blockSize; msg.EnsureBufferSize(dstSize * 8 + (4 * 8)); // add 4 bytes for payload length at end msg.LengthBits = dstSize * 8; // length will automatically adjust +4 bytes when payload length is written for(int i=0;i /// Decrypt an incoming message encrypted with corresponding Encrypt /// /// message to decrypt /// true if successful; false if failed public override bool Decrypt(NetIncomingMessage msg) { int numEncryptedBytes = msg.LengthBytes - 4; // last 4 bytes is true bit length int blockSize = BlockSize; int numBlocks = numEncryptedBytes / blockSize; if (numBlocks * blockSize != numEncryptedBytes) return false; for (int i = 0; i < numBlocks; i++) { DecryptBlock(msg.m_data, (i * blockSize), m_tmp); Buffer.BlockCopy(m_tmp, 0, msg.m_data, (i * blockSize), m_tmp.Length); } // read 32 bits of true payload length uint realSize = NetBitWriter.ReadUInt32(msg.m_data, 32, (numEncryptedBytes * 8)); msg.m_bitLength = (int)realSize; return true; } /// /// Encrypt a block of bytes /// protected abstract void EncryptBlock(byte[] source, int sourceOffset, byte[] destination); /// /// Decrypt a block of bytes /// protected abstract void DecryptBlock(byte[] source, int sourceOffset, byte[] destination); } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetCryptoProviderBase.cs ================================================ using System; using System.IO; using System.Security.Cryptography; namespace Lidgren.Network { public abstract class NetCryptoProviderBase : NetEncryption { protected SymmetricAlgorithm m_algorithm; public NetCryptoProviderBase(NetPeer peer, SymmetricAlgorithm algo) : base(peer) { m_algorithm = algo; m_algorithm.GenerateKey(); m_algorithm.GenerateIV(); } public override void SetKey(byte[] data, int offset, int count) { int len = m_algorithm.Key.Length; var key = new byte[len]; for (int i = 0; i < len; i++) key[i] = data[offset + (i % count)]; m_algorithm.Key = key; len = m_algorithm.IV.Length; key = new byte[len]; for (int i = 0; i < len; i++) key[len - 1 - i] = data[offset + (i % count)]; m_algorithm.IV = key; } public override bool Encrypt(NetOutgoingMessage msg) { int unEncLenBits = msg.LengthBits; var ms = new MemoryStream(); var cs = new CryptoStream(ms, m_algorithm.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(msg.m_data, 0, msg.LengthBytes); cs.Close(); // get results var arr = ms.ToArray(); ms.Close(); msg.EnsureBufferSize((arr.Length + 4) * 8); msg.LengthBits = 0; // reset write pointer msg.Write((uint)unEncLenBits); msg.Write(arr); msg.LengthBits = (arr.Length + 4) * 8; return true; } public override bool Decrypt(NetIncomingMessage msg) { int unEncLenBits = (int)msg.ReadUInt32(); var ms = new MemoryStream(msg.m_data, 4, msg.LengthBytes - 4); var cs = new CryptoStream(ms, m_algorithm.CreateDecryptor(), CryptoStreamMode.Read); var result = m_peer.GetStorage(unEncLenBits); cs.Read(result, 0, NetUtility.BytesToHoldBits(unEncLenBits)); cs.Close(); // TODO: recycle existing msg msg.m_data = result; msg.m_bitLength = unEncLenBits; msg.m_readPosition = 0; return true; } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetDESEncryption.cs ================================================ using System; using System.IO; using System.Security.Cryptography; namespace Lidgren.Network { public class NetDESEncryption : NetCryptoProviderBase { public NetDESEncryption(NetPeer peer) : base(peer, new DESCryptoServiceProvider()) { } public NetDESEncryption(NetPeer peer, string key) : base(peer, new DESCryptoServiceProvider()) { SetKey(key); } public NetDESEncryption(NetPeer peer, byte[] data, int offset, int count) : base(peer, new DESCryptoServiceProvider()) { SetKey(data, offset, count); } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetEncryption.cs ================================================ using System; using System.Collections.Generic; using System.Security.Cryptography; namespace Lidgren.Network { /// /// Interface for an encryption algorithm /// public abstract class NetEncryption { /// /// NetPeer /// protected NetPeer m_peer; /// /// Constructor /// public NetEncryption(NetPeer peer) { if (peer == null) throw new NetException("Peer must not be null"); m_peer = peer; } public void SetKey(string str) { var bytes = System.Text.Encoding.ASCII.GetBytes(str); SetKey(bytes, 0, bytes.Length); } public abstract void SetKey(byte[] data, int offset, int count); /// /// Encrypt an outgoing message in place /// public abstract bool Encrypt(NetOutgoingMessage msg); /// /// Decrypt an incoming message in place /// public abstract bool Decrypt(NetIncomingMessage msg); } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetRC2Encryption.cs ================================================ using System; using System.IO; using System.Security.Cryptography; namespace Lidgren.Network { public class NetRC2Encryption : NetCryptoProviderBase { public NetRC2Encryption(NetPeer peer) : base(peer, new RC2CryptoServiceProvider()) { } public NetRC2Encryption(NetPeer peer, string key) : base(peer, new RC2CryptoServiceProvider()) { SetKey(key); } public NetRC2Encryption(NetPeer peer, byte[] data, int offset, int count) : base(peer, new RC2CryptoServiceProvider()) { SetKey(data, offset, count); } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetTripleDESEncryption.cs ================================================ using System; using System.IO; using System.Security.Cryptography; namespace Lidgren.Network { public class NetTripleDESEncryption : NetCryptoProviderBase { public NetTripleDESEncryption(NetPeer peer) : base(peer, new TripleDESCryptoServiceProvider()) { } public NetTripleDESEncryption(NetPeer peer, string key) : base(peer, new TripleDESCryptoServiceProvider()) { SetKey(key); } public NetTripleDESEncryption(NetPeer peer, byte[] data, int offset, int count) : base(peer, new TripleDESCryptoServiceProvider()) { SetKey(data, offset, count); } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetXorEncryption.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { /// /// Example class; not very good encryption /// public class NetXorEncryption : NetEncryption { private byte[] m_key; /// /// NetXorEncryption constructor /// public NetXorEncryption(NetPeer peer, byte[] key) : base(peer) { m_key = key; } public override void SetKey(byte[] data, int offset, int count) { m_key = new byte[count]; Array.Copy(data, offset, m_key, 0, count); } /// /// NetXorEncryption constructor /// public NetXorEncryption(NetPeer peer, string key) : base(peer) { m_key = Encoding.UTF8.GetBytes(key); } /// /// Encrypt an outgoing message /// public override bool Encrypt(NetOutgoingMessage msg) { int numBytes = msg.LengthBytes; for (int i = 0; i < numBytes; i++) { int offset = i % m_key.Length; msg.m_data[i] = (byte)(msg.m_data[i] ^ m_key[offset]); } return true; } /// /// Decrypt an incoming message /// public override bool Decrypt(NetIncomingMessage msg) { int numBytes = msg.LengthBytes; for (int i = 0; i < numBytes; i++) { int offset = i % m_key.Length; msg.m_data[i] = (byte)(msg.m_data[i] ^ m_key[offset]); } return true; } } } ================================================ FILE: ThirdParty/Lidgren.Network/Encryption/NetXteaEncryption.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Security.Cryptography; using System.Text; using System.Security; namespace Lidgren.Network { /// /// Methods to encrypt and decrypt data using the XTEA algorithm /// public sealed class NetXtea : NetBlockEncryptionBase { private const int c_blockSize = 8; private const int c_keySize = 16; private const int c_delta = unchecked((int)0x9E3779B9); private readonly int m_numRounds; private readonly uint[] m_sum0; private readonly uint[] m_sum1; /// /// Gets the block size for this cipher /// public override int BlockSize { get { return c_blockSize; } } /// /// 16 byte key /// public NetXtea(NetPeer peer, byte[] key, int rounds) : base(peer) { if (key.Length < c_keySize) throw new NetException("Key too short!"); m_numRounds = rounds; m_sum0 = new uint[m_numRounds]; m_sum1 = new uint[m_numRounds]; uint[] tmp = new uint[8]; int num2; int index = num2 = 0; while (index < 4) { tmp[index] = BitConverter.ToUInt32(key, num2); index++; num2 += 4; } for (index = num2 = 0; index < 32; index++) { m_sum0[index] = ((uint)num2) + tmp[num2 & 3]; num2 += -1640531527; m_sum1[index] = ((uint)num2) + tmp[(num2 >> 11) & 3]; } } /// /// 16 byte key /// public NetXtea(NetPeer peer, byte[] key) : this(peer, key, 32) { } /// /// String to hash for key /// public NetXtea(NetPeer peer, string key) : this(peer, NetUtility.CreateSHA1Hash(key), 32) { } public override void SetKey(byte[] data, int offset, int length) { var key = NetUtility.CreateSHA1Hash(data, offset, length); NetException.Assert(key.Length == 16); SetKey(key, 0, 16); } /// /// Encrypts a block of bytes /// protected override void EncryptBlock(byte[] source, int sourceOffset, byte[] destination) { uint v0 = BytesToUInt(source, sourceOffset); uint v1 = BytesToUInt(source, sourceOffset + 4); for (int i = 0; i != m_numRounds; i++) { v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i]; v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i]; } UIntToBytes(v0, destination, 0); UIntToBytes(v1, destination, 0 + 4); return; } /// /// Decrypts a block of bytes /// protected override void DecryptBlock(byte[] source, int sourceOffset, byte[] destination) { // Pack bytes into integers uint v0 = BytesToUInt(source, sourceOffset); uint v1 = BytesToUInt(source, sourceOffset + 4); for (int i = m_numRounds - 1; i >= 0; i--) { v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i]; v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i]; } UIntToBytes(v0, destination, 0); UIntToBytes(v1, destination, 0 + 4); return; } private static uint BytesToUInt(byte[] bytes, int offset) { uint retval = (uint)(bytes[offset] << 24); retval |= (uint)(bytes[++offset] << 16); retval |= (uint)(bytes[++offset] << 8); return (retval | bytes[++offset]); } private static void UIntToBytes(uint value, byte[] destination, int destinationOffset) { destination[destinationOffset++] = (byte)(value >> 24); destination[destinationOffset++] = (byte)(value >> 16); destination[destinationOffset++] = (byte)(value >> 8); destination[destinationOffset++] = (byte)value; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NamespaceDoc.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { /// /// Lidgren Network Library /// internal class NamespaceDoc { // } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBigInteger.cs ================================================ using System; using System.Text; using System.Collections; using System.Diagnostics; using System.Globalization; namespace Lidgren.Network { /// /// Big integer class based on BouncyCastle (http://www.bouncycastle.org) big integer code /// internal class NetBigInteger { private const long IMASK = 0xffffffffL; private const ulong UIMASK = (ulong)IMASK; private static readonly int[] ZeroMagnitude = new int[0]; private static readonly byte[] ZeroEncoding = new byte[0]; public static readonly NetBigInteger Zero = new NetBigInteger(0, ZeroMagnitude, false); public static readonly NetBigInteger One = createUValueOf(1); public static readonly NetBigInteger Two = createUValueOf(2); public static readonly NetBigInteger Three = createUValueOf(3); public static readonly NetBigInteger Ten = createUValueOf(10); private const int chunk2 = 1; private static readonly NetBigInteger radix2 = ValueOf(2); private static readonly NetBigInteger radix2E = radix2.Pow(chunk2); private const int chunk10 = 19; private static readonly NetBigInteger radix10 = ValueOf(10); private static readonly NetBigInteger radix10E = radix10.Pow(chunk10); private const int chunk16 = 16; private static readonly NetBigInteger radix16 = ValueOf(16); private static readonly NetBigInteger radix16E = radix16.Pow(chunk16); private const int BitsPerByte = 8; private const int BitsPerInt = 32; private const int BytesPerInt = 4; private int m_sign; // -1 means -ve; +1 means +ve; 0 means 0; private int[] m_magnitude; // array of ints with [0] being the most significant private int m_numBits = -1; // cache BitCount() value private int m_numBitLength = -1; // cache calcBitLength() value private long m_quote = -1L; // -m^(-1) mod b, b = 2^32 (see Montgomery mult.) private static int GetByteLength( int nBits) { return (nBits + BitsPerByte - 1) / BitsPerByte; } private NetBigInteger() { } private NetBigInteger( int signum, int[] mag, bool checkMag) { if (checkMag) { int i = 0; while (i < mag.Length && mag[i] == 0) { ++i; } if (i == mag.Length) { // sign = 0; m_magnitude = ZeroMagnitude; } else { m_sign = signum; if (i == 0) { m_magnitude = mag; } else { // strip leading 0 words m_magnitude = new int[mag.Length - i]; Array.Copy(mag, i, m_magnitude, 0, m_magnitude.Length); } } } else { m_sign = signum; m_magnitude = mag; } } public NetBigInteger( string value) : this(value, 10) { } public NetBigInteger( string str, int radix) { if (str.Length == 0) throw new FormatException("Zero length BigInteger"); NumberStyles style; int chunk; NetBigInteger r; NetBigInteger rE; switch (radix) { case 2: // Is there anyway to restrict to binary digits? style = NumberStyles.Integer; chunk = chunk2; r = radix2; rE = radix2E; break; case 10: // This style seems to handle spaces and minus sign already (our processing redundant?) style = NumberStyles.Integer; chunk = chunk10; r = radix10; rE = radix10E; break; case 16: // TODO Should this be HexNumber? style = NumberStyles.AllowHexSpecifier; chunk = chunk16; r = radix16; rE = radix16E; break; default: throw new FormatException("Only bases 2, 10, or 16 allowed"); } int index = 0; m_sign = 1; if (str[0] == '-') { if (str.Length == 1) throw new FormatException("Zero length BigInteger"); m_sign = -1; index = 1; } // strip leading zeros from the string str while (index < str.Length && Int32.Parse(str[index].ToString(), style) == 0) { index++; } if (index >= str.Length) { // zero value - we're done m_sign = 0; m_magnitude = ZeroMagnitude; return; } ////// // could we work out the max number of ints required to store // str.Length digits in the given base, then allocate that // storage in one hit?, then Generate the magnitude in one hit too? ////// NetBigInteger b = Zero; int next = index + chunk; if (next <= str.Length) { do { string s = str.Substring(index, chunk); ulong i = ulong.Parse(s, style); NetBigInteger bi = createUValueOf(i); switch (radix) { case 2: if (i > 1) throw new FormatException("Bad character in radix 2 string: " + s); b = b.ShiftLeft(1); break; case 16: b = b.ShiftLeft(64); break; default: b = b.Multiply(rE); break; } b = b.Add(bi); index = next; next += chunk; } while (next <= str.Length); } if (index < str.Length) { string s = str.Substring(index); ulong i = ulong.Parse(s, style); NetBigInteger bi = createUValueOf(i); if (b.m_sign > 0) { if (radix == 2) { // NB: Can't reach here since we are parsing one char at a time Debug.Assert(false); } else if (radix == 16) { b = b.ShiftLeft(s.Length << 2); } else { b = b.Multiply(r.Pow(s.Length)); } b = b.Add(bi); } else { b = bi; } } // Note: This is the previous (slower) algorithm // while (index < value.Length) // { // char c = value[index]; // string s = c.ToString(); // int i = Int32.Parse(s, style); // // b = b.Multiply(r).Add(ValueOf(i)); // index++; // } m_magnitude = b.m_magnitude; } public NetBigInteger( byte[] bytes) : this(bytes, 0, bytes.Length) { } public NetBigInteger( byte[] bytes, int offset, int length) { if (length == 0) throw new FormatException("Zero length BigInteger"); if ((sbyte)bytes[offset] < 0) { m_sign = -1; int end = offset + length; int iBval; // strip leading sign bytes for (iBval = offset; iBval < end && ((sbyte)bytes[iBval] == -1); iBval++) { } if (iBval >= end) { m_magnitude = One.m_magnitude; } else { int numBytes = end - iBval; byte[] inverse = new byte[numBytes]; int index = 0; while (index < numBytes) { inverse[index++] = (byte)~bytes[iBval++]; } Debug.Assert(iBval == end); while (inverse[--index] == byte.MaxValue) { inverse[index] = byte.MinValue; } inverse[index]++; m_magnitude = MakeMagnitude(inverse, 0, inverse.Length); } } else { // strip leading zero bytes and return magnitude bytes m_magnitude = MakeMagnitude(bytes, offset, length); m_sign = m_magnitude.Length > 0 ? 1 : 0; } } private static int[] MakeMagnitude( byte[] bytes, int offset, int length) { int end = offset + length; // strip leading zeros int firstSignificant; for (firstSignificant = offset; firstSignificant < end && bytes[firstSignificant] == 0; firstSignificant++) { } if (firstSignificant >= end) { return ZeroMagnitude; } int nInts = (end - firstSignificant + 3) / BytesPerInt; int bCount = (end - firstSignificant) % BytesPerInt; if (bCount == 0) { bCount = BytesPerInt; } if (nInts < 1) { return ZeroMagnitude; } int[] mag = new int[nInts]; int v = 0; int magnitudeIndex = 0; for (int i = firstSignificant; i < end; ++i) { v <<= 8; v |= bytes[i] & 0xff; bCount--; if (bCount <= 0) { mag[magnitudeIndex] = v; magnitudeIndex++; bCount = BytesPerInt; v = 0; } } if (magnitudeIndex < mag.Length) { mag[magnitudeIndex] = v; } return mag; } public NetBigInteger( int sign, byte[] bytes) : this(sign, bytes, 0, bytes.Length) { } public NetBigInteger( int sign, byte[] bytes, int offset, int length) { if (sign < -1 || sign > 1) throw new FormatException("Invalid sign value"); if (sign == 0) { //sign = 0; m_magnitude = ZeroMagnitude; } else { // copy bytes m_magnitude = MakeMagnitude(bytes, offset, length); m_sign = m_magnitude.Length < 1 ? 0 : sign; } } public NetBigInteger Abs() { return m_sign >= 0 ? this : Negate(); } // return a = a + b - b preserved. private static int[] AddMagnitudes( int[] a, int[] b) { int tI = a.Length - 1; int vI = b.Length - 1; long m = 0; while (vI >= 0) { m += ((long)(uint)a[tI] + (long)(uint)b[vI--]); a[tI--] = (int)m; m = (long)((ulong)m >> 32); } if (m != 0) { while (tI >= 0 && ++a[tI--] == 0) { } } return a; } public NetBigInteger Add( NetBigInteger value) { if (m_sign == 0) return value; if (m_sign != value.m_sign) { if (value.m_sign == 0) return this; if (value.m_sign < 0) return Subtract(value.Negate()); return value.Subtract(Negate()); } return AddToMagnitude(value.m_magnitude); } private NetBigInteger AddToMagnitude( int[] magToAdd) { int[] big, small; if (m_magnitude.Length < magToAdd.Length) { big = magToAdd; small = m_magnitude; } else { big = m_magnitude; small = magToAdd; } // Conservatively avoid over-allocation when no overflow possible uint limit = uint.MaxValue; if (big.Length == small.Length) limit -= (uint)small[0]; bool possibleOverflow = (uint)big[0] >= limit; int[] bigCopy; if (possibleOverflow) { bigCopy = new int[big.Length + 1]; big.CopyTo(bigCopy, 1); } else { bigCopy = (int[])big.Clone(); } bigCopy = AddMagnitudes(bigCopy, small); return new NetBigInteger(m_sign, bigCopy, possibleOverflow); } public NetBigInteger And( NetBigInteger value) { if (m_sign == 0 || value.m_sign == 0) { return Zero; } int[] aMag = m_sign > 0 ? m_magnitude : Add(One).m_magnitude; int[] bMag = value.m_sign > 0 ? value.m_magnitude : value.Add(One).m_magnitude; bool resultNeg = m_sign < 0 && value.m_sign < 0; int resultLength = System.Math.Max(aMag.Length, bMag.Length); int[] resultMag = new int[resultLength]; int aStart = resultMag.Length - aMag.Length; int bStart = resultMag.Length - bMag.Length; for (int i = 0; i < resultMag.Length; ++i) { int aWord = i >= aStart ? aMag[i - aStart] : 0; int bWord = i >= bStart ? bMag[i - bStart] : 0; if (m_sign < 0) { aWord = ~aWord; } if (value.m_sign < 0) { bWord = ~bWord; } resultMag[i] = aWord & bWord; if (resultNeg) { resultMag[i] = ~resultMag[i]; } } NetBigInteger result = new NetBigInteger(1, resultMag, true); if (resultNeg) { result = result.Not(); } return result; } private int calcBitLength( int indx, int[] mag) { for (; ; ) { if (indx >= mag.Length) return 0; if (mag[indx] != 0) break; ++indx; } // bit length for everything after the first int int bitLength = 32 * ((mag.Length - indx) - 1); // and determine bitlength of first int int firstMag = mag[indx]; bitLength += BitLen(firstMag); // Check for negative powers of two if (m_sign < 0 && ((firstMag & -firstMag) == firstMag)) { do { if (++indx >= mag.Length) { --bitLength; break; } } while (mag[indx] == 0); } return bitLength; } public int BitLength { get { if (m_numBitLength == -1) { m_numBitLength = m_sign == 0 ? 0 : calcBitLength(0, m_magnitude); } return m_numBitLength; } } // // BitLen(value) is the number of bits in value. // private static int BitLen( int w) { // Binary search - decision tree (5 tests, rarely 6) return (w < 1 << 15 ? (w < 1 << 7 ? (w < 1 << 3 ? (w < 1 << 1 ? (w < 1 << 0 ? (w < 0 ? 32 : 0) : 1) : (w < 1 << 2 ? 2 : 3)) : (w < 1 << 5 ? (w < 1 << 4 ? 4 : 5) : (w < 1 << 6 ? 6 : 7))) : (w < 1 << 11 ? (w < 1 << 9 ? (w < 1 << 8 ? 8 : 9) : (w < 1 << 10 ? 10 : 11)) : (w < 1 << 13 ? (w < 1 << 12 ? 12 : 13) : (w < 1 << 14 ? 14 : 15)))) : (w < 1 << 23 ? (w < 1 << 19 ? (w < 1 << 17 ? (w < 1 << 16 ? 16 : 17) : (w < 1 << 18 ? 18 : 19)) : (w < 1 << 21 ? (w < 1 << 20 ? 20 : 21) : (w < 1 << 22 ? 22 : 23))) : (w < 1 << 27 ? (w < 1 << 25 ? (w < 1 << 24 ? 24 : 25) : (w < 1 << 26 ? 26 : 27)) : (w < 1 << 29 ? (w < 1 << 28 ? 28 : 29) : (w < 1 << 30 ? 30 : 31))))); } private bool QuickPow2Check() { return m_sign > 0 && m_numBits == 1; } public int CompareTo( object obj) { return CompareTo((NetBigInteger)obj); } // unsigned comparison on two arrays - note the arrays may // start with leading zeros. private static int CompareTo( int xIndx, int[] x, int yIndx, int[] y) { while (xIndx != x.Length && x[xIndx] == 0) { xIndx++; } while (yIndx != y.Length && y[yIndx] == 0) { yIndx++; } return CompareNoLeadingZeroes(xIndx, x, yIndx, y); } private static int CompareNoLeadingZeroes( int xIndx, int[] x, int yIndx, int[] y) { int diff = (x.Length - y.Length) - (xIndx - yIndx); if (diff != 0) { return diff < 0 ? -1 : 1; } // lengths of magnitudes the same, test the magnitude values while (xIndx < x.Length) { uint v1 = (uint)x[xIndx++]; uint v2 = (uint)y[yIndx++]; if (v1 != v2) return v1 < v2 ? -1 : 1; } return 0; } public int CompareTo( NetBigInteger value) { return m_sign < value.m_sign ? -1 : m_sign > value.m_sign ? 1 : m_sign == 0 ? 0 : m_sign * CompareNoLeadingZeroes(0, m_magnitude, 0, value.m_magnitude); } // return z = x / y - done in place (z value preserved, x contains the remainder) private int[] Divide( int[] x, int[] y) { int xStart = 0; while (xStart < x.Length && x[xStart] == 0) { ++xStart; } int yStart = 0; while (yStart < y.Length && y[yStart] == 0) { ++yStart; } Debug.Assert(yStart < y.Length); int xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); int[] count; if (xyCmp > 0) { int yBitLength = calcBitLength(yStart, y); int xBitLength = calcBitLength(xStart, x); int shift = xBitLength - yBitLength; int[] iCount; int iCountStart = 0; int[] c; int cStart = 0; int cBitLength = yBitLength; if (shift > 0) { // iCount = ShiftLeft(One.magnitude, shift); iCount = new int[(shift >> 5) + 1]; iCount[0] = 1 << (shift % 32); c = ShiftLeft(y, shift); cBitLength += shift; } else { iCount = new int[] { 1 }; int len = y.Length - yStart; c = new int[len]; Array.Copy(y, yStart, c, 0, len); } count = new int[iCount.Length]; for (; ; ) { if (cBitLength < xBitLength || CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0) { Subtract(xStart, x, cStart, c); AddMagnitudes(count, iCount); while (x[xStart] == 0) { if (++xStart == x.Length) return count; } //xBitLength = calcBitLength(xStart, x); xBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]); if (xBitLength <= yBitLength) { if (xBitLength < yBitLength) return count; xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); if (xyCmp <= 0) break; } } shift = cBitLength - xBitLength; // NB: The case where c[cStart] is 1-bit is harmless if (shift == 1) { uint firstC = (uint)c[cStart] >> 1; uint firstX = (uint)x[xStart]; if (firstC > firstX) ++shift; } if (shift < 2) { c = ShiftRightOneInPlace(cStart, c); --cBitLength; iCount = ShiftRightOneInPlace(iCountStart, iCount); } else { c = ShiftRightInPlace(cStart, c, shift); cBitLength -= shift; iCount = ShiftRightInPlace(iCountStart, iCount, shift); } //cStart = c.Length - ((cBitLength + 31) / 32); while (c[cStart] == 0) { ++cStart; } while (iCount[iCountStart] == 0) { ++iCountStart; } } } else { count = new int[1]; } if (xyCmp == 0) { AddMagnitudes(count, One.m_magnitude); Array.Clear(x, xStart, x.Length - xStart); } return count; } public NetBigInteger Divide( NetBigInteger val) { if (val.m_sign == 0) throw new ArithmeticException("Division by zero error"); if (m_sign == 0) return Zero; if (val.QuickPow2Check()) // val is power of two { NetBigInteger result = Abs().ShiftRight(val.Abs().BitLength - 1); return val.m_sign == m_sign ? result : result.Negate(); } int[] mag = (int[])m_magnitude.Clone(); return new NetBigInteger(m_sign * val.m_sign, Divide(mag, val.m_magnitude), true); } public NetBigInteger[] DivideAndRemainder( NetBigInteger val) { if (val.m_sign == 0) throw new ArithmeticException("Division by zero error"); NetBigInteger[] biggies = new NetBigInteger[2]; if (m_sign == 0) { biggies[0] = Zero; biggies[1] = Zero; } else if (val.QuickPow2Check()) // val is power of two { int e = val.Abs().BitLength - 1; NetBigInteger quotient = Abs().ShiftRight(e); int[] remainder = LastNBits(e); biggies[0] = val.m_sign == m_sign ? quotient : quotient.Negate(); biggies[1] = new NetBigInteger(m_sign, remainder, true); } else { int[] remainder = (int[])m_magnitude.Clone(); int[] quotient = Divide(remainder, val.m_magnitude); biggies[0] = new NetBigInteger(m_sign * val.m_sign, quotient, true); biggies[1] = new NetBigInteger(m_sign, remainder, true); } return biggies; } public override bool Equals( object obj) { if (obj == this) return true; NetBigInteger biggie = obj as NetBigInteger; if (biggie == null) return false; if (biggie.m_sign != m_sign || biggie.m_magnitude.Length != m_magnitude.Length) return false; for (int i = 0; i < m_magnitude.Length; i++) { if (biggie.m_magnitude[i] != m_magnitude[i]) { return false; } } return true; } public NetBigInteger Gcd( NetBigInteger value) { if (value.m_sign == 0) return Abs(); if (m_sign == 0) return value.Abs(); NetBigInteger r; NetBigInteger u = this; NetBigInteger v = value; while (v.m_sign != 0) { r = u.Mod(v); u = v; v = r; } return u; } public override int GetHashCode() { int hc = m_magnitude.Length; if (m_magnitude.Length > 0) { hc ^= m_magnitude[0]; if (m_magnitude.Length > 1) { hc ^= m_magnitude[m_magnitude.Length - 1]; } } return m_sign < 0 ? ~hc : hc; } private NetBigInteger Inc() { if (m_sign == 0) return One; if (m_sign < 0) return new NetBigInteger(-1, doSubBigLil(m_magnitude, One.m_magnitude), true); return AddToMagnitude(One.m_magnitude); } public int IntValue { get { return m_sign == 0 ? 0 : m_sign > 0 ? m_magnitude[m_magnitude.Length - 1] : -m_magnitude[m_magnitude.Length - 1]; } } public NetBigInteger Max( NetBigInteger value) { return CompareTo(value) > 0 ? this : value; } public NetBigInteger Min( NetBigInteger value) { return CompareTo(value) < 0 ? this : value; } public NetBigInteger Mod( NetBigInteger m) { if (m.m_sign < 1) throw new ArithmeticException("Modulus must be positive"); NetBigInteger biggie = Remainder(m); return (biggie.m_sign >= 0 ? biggie : biggie.Add(m)); } public NetBigInteger ModInverse( NetBigInteger m) { if (m.m_sign < 1) throw new ArithmeticException("Modulus must be positive"); NetBigInteger x = new NetBigInteger(); NetBigInteger gcd = ExtEuclid(this, m, x, null); if (!gcd.Equals(One)) throw new ArithmeticException("Numbers not relatively prime."); if (x.m_sign < 0) { x.m_sign = 1; //x = m.Subtract(x); x.m_magnitude = doSubBigLil(m.m_magnitude, x.m_magnitude); } return x; } private static NetBigInteger ExtEuclid( NetBigInteger a, NetBigInteger b, NetBigInteger u1Out, NetBigInteger u2Out) { NetBigInteger u1 = One; NetBigInteger u3 = a; NetBigInteger v1 = Zero; NetBigInteger v3 = b; while (v3.m_sign > 0) { NetBigInteger[] q = u3.DivideAndRemainder(v3); NetBigInteger tmp = v1.Multiply(q[0]); NetBigInteger tn = u1.Subtract(tmp); u1 = v1; v1 = tn; u3 = v3; v3 = q[1]; } if (u1Out != null) { u1Out.m_sign = u1.m_sign; u1Out.m_magnitude = u1.m_magnitude; } if (u2Out != null) { NetBigInteger tmp = u1.Multiply(a); tmp = u3.Subtract(tmp); NetBigInteger res = tmp.Divide(b); u2Out.m_sign = res.m_sign; u2Out.m_magnitude = res.m_magnitude; } return u3; } private static void ZeroOut( int[] x) { Array.Clear(x, 0, x.Length); } public NetBigInteger ModPow( NetBigInteger exponent, NetBigInteger m) { if (m.m_sign < 1) throw new ArithmeticException("Modulus must be positive"); if (m.Equals(One)) return Zero; if (exponent.m_sign == 0) return One; if (m_sign == 0) return Zero; int[] zVal = null; int[] yAccum = null; int[] yVal; // Montgomery exponentiation is only possible if the modulus is odd, // but AFAIK, this is always the case for crypto algo's bool useMonty = ((m.m_magnitude[m.m_magnitude.Length - 1] & 1) == 1); long mQ = 0; if (useMonty) { mQ = m.GetMQuote(); // tmp = this * R mod m NetBigInteger tmp = ShiftLeft(32 * m.m_magnitude.Length).Mod(m); zVal = tmp.m_magnitude; useMonty = (zVal.Length <= m.m_magnitude.Length); if (useMonty) { yAccum = new int[m.m_magnitude.Length + 1]; if (zVal.Length < m.m_magnitude.Length) { int[] longZ = new int[m.m_magnitude.Length]; zVal.CopyTo(longZ, longZ.Length - zVal.Length); zVal = longZ; } } } if (!useMonty) { if (m_magnitude.Length <= m.m_magnitude.Length) { //zAccum = new int[m.magnitude.Length * 2]; zVal = new int[m.m_magnitude.Length]; m_magnitude.CopyTo(zVal, zVal.Length - m_magnitude.Length); } else { // // in normal practice we'll never see .. // NetBigInteger tmp = Remainder(m); //zAccum = new int[m.magnitude.Length * 2]; zVal = new int[m.m_magnitude.Length]; tmp.m_magnitude.CopyTo(zVal, zVal.Length - tmp.m_magnitude.Length); } yAccum = new int[m.m_magnitude.Length * 2]; } yVal = new int[m.m_magnitude.Length]; // // from LSW to MSW // for (int i = 0; i < exponent.m_magnitude.Length; i++) { int v = exponent.m_magnitude[i]; int bits = 0; if (i == 0) { while (v > 0) { v <<= 1; bits++; } // // first time in initialise y // zVal.CopyTo(yVal, 0); v <<= 1; bits++; } while (v != 0) { if (useMonty) { // Montgomery square algo doesn't exist, and a normal // square followed by a Montgomery reduction proved to // be almost as heavy as a Montgomery mulitply. MultiplyMonty(yAccum, yVal, yVal, m.m_magnitude, mQ); } else { Square(yAccum, yVal); Remainder(yAccum, m.m_magnitude); Array.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0, yVal.Length); ZeroOut(yAccum); } bits++; if (v < 0) { if (useMonty) { MultiplyMonty(yAccum, yVal, zVal, m.m_magnitude, mQ); } else { Multiply(yAccum, yVal, zVal); Remainder(yAccum, m.m_magnitude); Array.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0, yVal.Length); ZeroOut(yAccum); } } v <<= 1; } while (bits < 32) { if (useMonty) { MultiplyMonty(yAccum, yVal, yVal, m.m_magnitude, mQ); } else { Square(yAccum, yVal); Remainder(yAccum, m.m_magnitude); Array.Copy(yAccum, yAccum.Length - yVal.Length, yVal, 0, yVal.Length); ZeroOut(yAccum); } bits++; } } if (useMonty) { // Return y * R^(-1) mod m by doing y * 1 * R^(-1) mod m ZeroOut(zVal); zVal[zVal.Length - 1] = 1; MultiplyMonty(yAccum, yVal, zVal, m.m_magnitude, mQ); } NetBigInteger result = new NetBigInteger(1, yVal, true); return exponent.m_sign > 0 ? result : result.ModInverse(m); } // return w with w = x * x - w is assumed to have enough space. private static int[] Square( int[] w, int[] x) { // Note: this method allows w to be only (2 * x.Length - 1) words if result will fit // if (w.Length != 2 * x.Length) // throw new ArgumentException("no I don't think so..."); ulong u1, u2, c; int wBase = w.Length - 1; for (int i = x.Length - 1; i != 0; i--) { ulong v = (ulong)(uint)x[i]; u1 = v * v; u2 = u1 >> 32; u1 = (uint)u1; u1 += (ulong)(uint)w[wBase]; w[wBase] = (int)(uint)u1; c = u2 + (u1 >> 32); for (int j = i - 1; j >= 0; j--) { --wBase; u1 = v * (ulong)(uint)x[j]; u2 = u1 >> 31; // multiply by 2! u1 = (uint)(u1 << 1); // multiply by 2! u1 += c + (ulong)(uint)w[wBase]; w[wBase] = (int)(uint)u1; c = u2 + (u1 >> 32); } c += (ulong)(uint)w[--wBase]; w[wBase] = (int)(uint)c; if (--wBase >= 0) { w[wBase] = (int)(uint)(c >> 32); } else { Debug.Assert((uint)(c >> 32) == 0); } wBase += i; } u1 = (ulong)(uint)x[0]; u1 = u1 * u1; u2 = u1 >> 32; u1 = u1 & IMASK; u1 += (ulong)(uint)w[wBase]; w[wBase] = (int)(uint)u1; if (--wBase >= 0) { w[wBase] = (int)(uint)(u2 + (u1 >> 32) + (ulong)(uint)w[wBase]); } else { Debug.Assert((uint)(u2 + (u1 >> 32)) == 0); } return w; } // return x with x = y * z - x is assumed to have enough space. private static int[] Multiply( int[] x, int[] y, int[] z) { int i = z.Length; if (i < 1) return x; int xBase = x.Length - y.Length; for (; ; ) { long a = z[--i] & IMASK; long val = 0; for (int j = y.Length - 1; j >= 0; j--) { val += a * (y[j] & IMASK) + (x[xBase + j] & IMASK); x[xBase + j] = (int)val; val = (long)((ulong)val >> 32); } --xBase; if (i < 1) { if (xBase >= 0) { x[xBase] = (int)val; } else { Debug.Assert(val == 0); } break; } x[xBase] = (int)val; } return x; } private static long FastExtEuclid( long a, long b, long[] uOut) { long u1 = 1; long u3 = a; long v1 = 0; long v3 = b; while (v3 > 0) { long q, tn; q = u3 / v3; tn = u1 - (v1 * q); u1 = v1; v1 = tn; tn = u3 - (v3 * q); u3 = v3; v3 = tn; } uOut[0] = u1; uOut[1] = (u3 - (u1 * a)) / b; return u3; } private static long FastModInverse( long v, long m) { if (m < 1) throw new ArithmeticException("Modulus must be positive"); long[] x = new long[2]; long gcd = FastExtEuclid(v, m, x); if (gcd != 1) throw new ArithmeticException("Numbers not relatively prime."); if (x[0] < 0) { x[0] += m; } return x[0]; } private long GetMQuote() { Debug.Assert(m_sign > 0); if (m_quote != -1) { return m_quote; // already calculated } if (m_magnitude.Length == 0 || (m_magnitude[m_magnitude.Length - 1] & 1) == 0) { return -1; // not for even numbers } long v = (((~m_magnitude[m_magnitude.Length - 1]) | 1) & 0xffffffffL); m_quote = FastModInverse(v, 0x100000000L); return m_quote; } private static void MultiplyMonty( int[] a, int[] x, int[] y, int[] m, long mQuote) // mQuote = -m^(-1) mod b { if (m.Length == 1) { x[0] = (int)MultiplyMontyNIsOne((uint)x[0], (uint)y[0], (uint)m[0], (ulong)mQuote); return; } int n = m.Length; int nMinus1 = n - 1; long y_0 = y[nMinus1] & IMASK; // 1. a = 0 (Notation: a = (a_{n} a_{n-1} ... a_{0})_{b} ) Array.Clear(a, 0, n + 1); // 2. for i from 0 to (n - 1) do the following: for (int i = n; i > 0; i--) { long x_i = x[i - 1] & IMASK; // 2.1 u = ((a[0] + (x[i] * y[0]) * mQuote) mod b long u = ((((a[n] & IMASK) + ((x_i * y_0) & IMASK)) & IMASK) * mQuote) & IMASK; // 2.2 a = (a + x_i * y + u * m) / b long prod1 = x_i * y_0; long prod2 = u * (m[nMinus1] & IMASK); long tmp = (a[n] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK); long carry = (long)((ulong)prod1 >> 32) + (long)((ulong)prod2 >> 32) + (long)((ulong)tmp >> 32); for (int j = nMinus1; j > 0; j--) { prod1 = x_i * (y[j - 1] & IMASK); prod2 = u * (m[j - 1] & IMASK); tmp = (a[j] & IMASK) + (prod1 & IMASK) + (prod2 & IMASK) + (carry & IMASK); carry = (long)((ulong)carry >> 32) + (long)((ulong)prod1 >> 32) + (long)((ulong)prod2 >> 32) + (long)((ulong)tmp >> 32); a[j + 1] = (int)tmp; // division by b } carry += (a[0] & IMASK); a[1] = (int)carry; a[0] = (int)((ulong)carry >> 32); // OJO!!!!! } // 3. if x >= m the x = x - m if (CompareTo(0, a, 0, m) >= 0) { Subtract(0, a, 0, m); } // put the result in x Array.Copy(a, 1, x, 0, n); } private static uint MultiplyMontyNIsOne( uint x, uint y, uint m, ulong mQuote) { ulong um = m; ulong prod1 = (ulong)x * (ulong)y; ulong u = (prod1 * mQuote) & UIMASK; ulong prod2 = u * um; ulong tmp = (prod1 & UIMASK) + (prod2 & UIMASK); ulong carry = (prod1 >> 32) + (prod2 >> 32) + (tmp >> 32); if (carry > um) { carry -= um; } return (uint)(carry & UIMASK); } public NetBigInteger Modulus( NetBigInteger val) { return Mod(val); } public NetBigInteger Multiply( NetBigInteger val) { if (m_sign == 0 || val.m_sign == 0) return Zero; if (val.QuickPow2Check()) // val is power of two { NetBigInteger result = ShiftLeft(val.Abs().BitLength - 1); return val.m_sign > 0 ? result : result.Negate(); } if (QuickPow2Check()) // this is power of two { NetBigInteger result = val.ShiftLeft(Abs().BitLength - 1); return m_sign > 0 ? result : result.Negate(); } int maxBitLength = BitLength + val.BitLength; int resLength = (maxBitLength + BitsPerInt - 1) / BitsPerInt; int[] res = new int[resLength]; if (val == this) { Square(res, m_magnitude); } else { Multiply(res, m_magnitude, val.m_magnitude); } return new NetBigInteger(m_sign * val.m_sign, res, true); } public NetBigInteger Negate() { if (m_sign == 0) return this; return new NetBigInteger(-m_sign, m_magnitude, false); } public NetBigInteger Not() { return Inc().Negate(); } public NetBigInteger Pow(int exp) { if (exp < 0) { throw new ArithmeticException("Negative exponent"); } if (exp == 0) { return One; } if (m_sign == 0 || Equals(One)) { return this; } NetBigInteger y = One; NetBigInteger z = this; for (; ; ) { if ((exp & 0x1) == 1) { y = y.Multiply(z); } exp >>= 1; if (exp == 0) break; z = z.Multiply(z); } return y; } private int Remainder( int m) { Debug.Assert(m > 0); long acc = 0; for (int pos = 0; pos < m_magnitude.Length; ++pos) { long posVal = (uint)m_magnitude[pos]; acc = (acc << 32 | posVal) % m; } return (int)acc; } // return x = x % y - done in place (y value preserved) private int[] Remainder( int[] x, int[] y) { int xStart = 0; while (xStart < x.Length && x[xStart] == 0) { ++xStart; } int yStart = 0; while (yStart < y.Length && y[yStart] == 0) { ++yStart; } Debug.Assert(yStart < y.Length); int xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); if (xyCmp > 0) { int yBitLength = calcBitLength(yStart, y); int xBitLength = calcBitLength(xStart, x); int shift = xBitLength - yBitLength; int[] c; int cStart = 0; int cBitLength = yBitLength; if (shift > 0) { c = ShiftLeft(y, shift); cBitLength += shift; Debug.Assert(c[0] != 0); } else { int len = y.Length - yStart; c = new int[len]; Array.Copy(y, yStart, c, 0, len); } for (; ; ) { if (cBitLength < xBitLength || CompareNoLeadingZeroes(xStart, x, cStart, c) >= 0) { Subtract(xStart, x, cStart, c); while (x[xStart] == 0) { if (++xStart == x.Length) return x; } //xBitLength = calcBitLength(xStart, x); xBitLength = 32 * (x.Length - xStart - 1) + BitLen(x[xStart]); if (xBitLength <= yBitLength) { if (xBitLength < yBitLength) return x; xyCmp = CompareNoLeadingZeroes(xStart, x, yStart, y); if (xyCmp <= 0) break; } } shift = cBitLength - xBitLength; // NB: The case where c[cStart] is 1-bit is harmless if (shift == 1) { uint firstC = (uint)c[cStart] >> 1; uint firstX = (uint)x[xStart]; if (firstC > firstX) ++shift; } if (shift < 2) { c = ShiftRightOneInPlace(cStart, c); --cBitLength; } else { c = ShiftRightInPlace(cStart, c, shift); cBitLength -= shift; } //cStart = c.Length - ((cBitLength + 31) / 32); while (c[cStart] == 0) { ++cStart; } } } if (xyCmp == 0) { Array.Clear(x, xStart, x.Length - xStart); } return x; } public NetBigInteger Remainder( NetBigInteger n) { if (n.m_sign == 0) throw new ArithmeticException("Division by zero error"); if (m_sign == 0) return Zero; // For small values, use fast remainder method if (n.m_magnitude.Length == 1) { int val = n.m_magnitude[0]; if (val > 0) { if (val == 1) return Zero; int rem = Remainder(val); return rem == 0 ? Zero : new NetBigInteger(m_sign, new int[] { rem }, false); } } if (CompareNoLeadingZeroes(0, m_magnitude, 0, n.m_magnitude) < 0) return this; int[] result; if (n.QuickPow2Check()) // n is power of two { result = LastNBits(n.Abs().BitLength - 1); } else { result = (int[])m_magnitude.Clone(); result = Remainder(result, n.m_magnitude); } return new NetBigInteger(m_sign, result, true); } private int[] LastNBits( int n) { if (n < 1) return ZeroMagnitude; int numWords = (n + BitsPerInt - 1) / BitsPerInt; numWords = System.Math.Min(numWords, m_magnitude.Length); int[] result = new int[numWords]; Array.Copy(m_magnitude, m_magnitude.Length - numWords, result, 0, numWords); int hiBits = n % 32; if (hiBits != 0) { result[0] &= ~(-1 << hiBits); } return result; } // do a left shift - this returns a new array. private static int[] ShiftLeft( int[] mag, int n) { int nInts = (int)((uint)n >> 5); int nBits = n & 0x1f; int magLen = mag.Length; int[] newMag; if (nBits == 0) { newMag = new int[magLen + nInts]; mag.CopyTo(newMag, 0); } else { int i = 0; int nBits2 = 32 - nBits; int highBits = (int)((uint)mag[0] >> nBits2); if (highBits != 0) { newMag = new int[magLen + nInts + 1]; newMag[i++] = highBits; } else { newMag = new int[magLen + nInts]; } int m = mag[0]; for (int j = 0; j < magLen - 1; j++) { int next = mag[j + 1]; newMag[i++] = (m << nBits) | (int)((uint)next >> nBits2); m = next; } newMag[i] = mag[magLen - 1] << nBits; } return newMag; } public NetBigInteger ShiftLeft( int n) { if (m_sign == 0 || m_magnitude.Length == 0) return Zero; if (n == 0) return this; if (n < 0) return ShiftRight(-n); NetBigInteger result = new NetBigInteger(m_sign, ShiftLeft(m_magnitude, n), true); if (m_numBits != -1) { result.m_numBits = m_sign > 0 ? m_numBits : m_numBits + n; } if (m_numBitLength != -1) { result.m_numBitLength = m_numBitLength + n; } return result; } // do a right shift - this does it in place. private static int[] ShiftRightInPlace( int start, int[] mag, int n) { int nInts = (int)((uint)n >> 5) + start; int nBits = n & 0x1f; int magEnd = mag.Length - 1; if (nInts != start) { int delta = (nInts - start); for (int i = magEnd; i >= nInts; i--) { mag[i] = mag[i - delta]; } for (int i = nInts - 1; i >= start; i--) { mag[i] = 0; } } if (nBits != 0) { int nBits2 = 32 - nBits; int m = mag[magEnd]; for (int i = magEnd; i > nInts; --i) { int next = mag[i - 1]; mag[i] = (int)((uint)m >> nBits) | (next << nBits2); m = next; } mag[nInts] = (int)((uint)mag[nInts] >> nBits); } return mag; } // do a right shift by one - this does it in place. private static int[] ShiftRightOneInPlace( int start, int[] mag) { int i = mag.Length; int m = mag[i - 1]; while (--i > start) { int next = mag[i - 1]; mag[i] = ((int)((uint)m >> 1)) | (next << 31); m = next; } mag[start] = (int)((uint)mag[start] >> 1); return mag; } public NetBigInteger ShiftRight( int n) { if (n == 0) return this; if (n < 0) return ShiftLeft(-n); if (n >= BitLength) return (m_sign < 0 ? One.Negate() : Zero); // int[] res = (int[]) magnitude.Clone(); // // res = ShiftRightInPlace(0, res, n); // // return new BigInteger(sign, res, true); int resultLength = (BitLength - n + 31) >> 5; int[] res = new int[resultLength]; int numInts = n >> 5; int numBits = n & 31; if (numBits == 0) { Array.Copy(m_magnitude, 0, res, 0, res.Length); } else { int numBits2 = 32 - numBits; int magPos = m_magnitude.Length - 1 - numInts; for (int i = resultLength - 1; i >= 0; --i) { res[i] = (int)((uint)m_magnitude[magPos--] >> numBits); if (magPos >= 0) { res[i] |= m_magnitude[magPos] << numBits2; } } } Debug.Assert(res[0] != 0); return new NetBigInteger(m_sign, res, false); } public int SignValue { get { return m_sign; } } // returns x = x - y - we assume x is >= y private static int[] Subtract( int xStart, int[] x, int yStart, int[] y) { Debug.Assert(yStart < y.Length); Debug.Assert(x.Length - xStart >= y.Length - yStart); int iT = x.Length; int iV = y.Length; long m; int borrow = 0; do { m = (x[--iT] & IMASK) - (y[--iV] & IMASK) + borrow; x[iT] = (int)m; // borrow = (m < 0) ? -1 : 0; borrow = (int)(m >> 63); } while (iV > yStart); if (borrow != 0) { while (--x[--iT] == -1) { } } return x; } public NetBigInteger Subtract( NetBigInteger n) { if (n.m_sign == 0) return this; if (m_sign == 0) return n.Negate(); if (m_sign != n.m_sign) return Add(n.Negate()); int compare = CompareNoLeadingZeroes(0, m_magnitude, 0, n.m_magnitude); if (compare == 0) return Zero; NetBigInteger bigun, lilun; if (compare < 0) { bigun = n; lilun = this; } else { bigun = this; lilun = n; } return new NetBigInteger(m_sign * compare, doSubBigLil(bigun.m_magnitude, lilun.m_magnitude), true); } private static int[] doSubBigLil( int[] bigMag, int[] lilMag) { int[] res = (int[])bigMag.Clone(); return Subtract(0, res, 0, lilMag); } public byte[] ToByteArray() { return ToByteArray(false); } public byte[] ToByteArrayUnsigned() { return ToByteArray(true); } private byte[] ToByteArray( bool unsigned) { if (m_sign == 0) return unsigned ? ZeroEncoding : new byte[1]; int nBits = (unsigned && m_sign > 0) ? BitLength : BitLength + 1; int nBytes = GetByteLength(nBits); byte[] bytes = new byte[nBytes]; int magIndex = m_magnitude.Length; int bytesIndex = bytes.Length; if (m_sign > 0) { while (magIndex > 1) { uint mag = (uint)m_magnitude[--magIndex]; bytes[--bytesIndex] = (byte)mag; bytes[--bytesIndex] = (byte)(mag >> 8); bytes[--bytesIndex] = (byte)(mag >> 16); bytes[--bytesIndex] = (byte)(mag >> 24); } uint lastMag = (uint)m_magnitude[0]; while (lastMag > byte.MaxValue) { bytes[--bytesIndex] = (byte)lastMag; lastMag >>= 8; } bytes[--bytesIndex] = (byte)lastMag; } else // sign < 0 { bool carry = true; while (magIndex > 1) { uint mag = ~((uint)m_magnitude[--magIndex]); if (carry) { carry = (++mag == uint.MinValue); } bytes[--bytesIndex] = (byte)mag; bytes[--bytesIndex] = (byte)(mag >> 8); bytes[--bytesIndex] = (byte)(mag >> 16); bytes[--bytesIndex] = (byte)(mag >> 24); } uint lastMag = (uint)m_magnitude[0]; if (carry) { // Never wraps because magnitude[0] != 0 --lastMag; } while (lastMag > byte.MaxValue) { bytes[--bytesIndex] = (byte)~lastMag; lastMag >>= 8; } bytes[--bytesIndex] = (byte)~lastMag; if (bytesIndex > 0) { bytes[--bytesIndex] = byte.MaxValue; } } return bytes; } public override string ToString() { return ToString(10); } public string ToString( int radix) { switch (radix) { case 2: case 10: case 16: break; default: throw new FormatException("Only bases 2, 10, 16 are allowed"); } // NB: Can only happen to internally managed instances if (m_magnitude == null) return "null"; if (m_sign == 0) return "0"; Debug.Assert(m_magnitude.Length > 0); StringBuilder sb = new StringBuilder(); if (radix == 16) { sb.Append(m_magnitude[0].ToString("x")); for (int i = 1; i < m_magnitude.Length; i++) { sb.Append(m_magnitude[i].ToString("x8")); } } else if (radix == 2) { sb.Append('1'); for (int i = BitLength - 2; i >= 0; --i) { sb.Append(TestBit(i) ? '1' : '0'); } } else { // This is algorithm 1a from chapter 4.4 in Seminumerical Algorithms, slow but it works Stack S = new Stack(); NetBigInteger bs = ValueOf(radix); NetBigInteger u = Abs(); NetBigInteger b; while (u.m_sign != 0) { b = u.Mod(bs); if (b.m_sign == 0) { S.Push("0"); } else { // see how to interact with different bases S.Push(b.m_magnitude[0].ToString("d")); } u = u.Divide(bs); } // Then pop the stack while (S.Count != 0) { sb.Append((string)S.Pop()); } } string s = sb.ToString(); Debug.Assert(s.Length > 0); // Strip leading zeros. (We know this number is not all zeroes though) if (s[0] == '0') { int nonZeroPos = 0; while (s[++nonZeroPos] == '0') { } s = s.Substring(nonZeroPos); } if (m_sign == -1) { s = "-" + s; } return s; } private static NetBigInteger createUValueOf( ulong value) { int msw = (int)(value >> 32); int lsw = (int)value; if (msw != 0) return new NetBigInteger(1, new int[] { msw, lsw }, false); if (lsw != 0) { NetBigInteger n = new NetBigInteger(1, new int[] { lsw }, false); // Check for a power of two if ((lsw & -lsw) == lsw) { n.m_numBits = 1; } return n; } return Zero; } private static NetBigInteger createValueOf( long value) { if (value < 0) { if (value == long.MinValue) return createValueOf(~value).Not(); return createValueOf(-value).Negate(); } return createUValueOf((ulong)value); } public static NetBigInteger ValueOf( long value) { switch (value) { case 0: return Zero; case 1: return One; case 2: return Two; case 3: return Three; case 10: return Ten; } return createValueOf(value); } public int GetLowestSetBit() { if (m_sign == 0) return -1; int w = m_magnitude.Length; while (--w > 0) { if (m_magnitude[w] != 0) break; } int word = (int)m_magnitude[w]; Debug.Assert(word != 0); int b = (word & 0x0000FFFF) == 0 ? (word & 0x00FF0000) == 0 ? 7 : 15 : (word & 0x000000FF) == 0 ? 23 : 31; while (b > 0) { if ((word << b) == int.MinValue) break; b--; } return ((m_magnitude.Length - w) * 32 - (b + 1)); } public bool TestBit( int n) { if (n < 0) throw new ArithmeticException("Bit position must not be negative"); if (m_sign < 0) return !Not().TestBit(n); int wordNum = n / 32; if (wordNum >= m_magnitude.Length) return false; int word = m_magnitude[m_magnitude.Length - 1 - wordNum]; return ((word >> (n % 32)) & 1) > 0; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBitVector.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Text; namespace Lidgren.Network { /// /// Fixed size vector of booleans /// public sealed class NetBitVector { private readonly int m_capacity; private readonly int[] m_data; private int m_numBitsSet; /// /// Gets the number of bits/booleans stored in this vector /// public int Capacity { get { return m_capacity; } } /// /// NetBitVector constructor /// public NetBitVector(int bitsCapacity) { m_capacity = bitsCapacity; m_data = new int[(bitsCapacity + 31) / 32]; } /// /// Returns true if all bits/booleans are set to zero/false /// public bool IsEmpty() { return (m_numBitsSet == 0); } /// /// Returns the number of bits/booleans set to one/true /// /// public int Count() { return m_numBitsSet; } /// /// Shift all bits one step down, cycling the first bit to the top /// public void RotateDown() { int lenMinusOne = m_data.Length - 1; int firstBit = m_data[0] & 1; for (int i = 0; i < lenMinusOne; i++) m_data[i] = ((m_data[i] >> 1) & ~(1 << 31)) | m_data[i + 1] << 31; int lastIndex = m_capacity - 1 - (32 * lenMinusOne); // special handling of last int int cur = m_data[lenMinusOne]; cur = cur >> 1; cur |= firstBit << lastIndex; m_data[lenMinusOne] = cur; } /// /// Gets the first (lowest) index set to true /// public int GetFirstSetIndex() { int idx = 0; int data = m_data[0]; while (data == 0) { idx++; data = m_data[idx]; } int a = 0; while (((data >> a) & 1) == 0) a++; return (idx * 32) + a; } /// /// Gets the bit/bool at the specified index /// public bool Get(int bitIndex) { NetException.Assert(bitIndex >= 0 && bitIndex < m_capacity); return (m_data[bitIndex / 32] & (1 << (bitIndex % 32))) != 0; } /// /// Sets or clears the bit/bool at the specified index /// public void Set(int bitIndex, bool value) { NetException.Assert(bitIndex >= 0 && bitIndex < m_capacity); int idx = bitIndex / 32; if (value) { if ((m_data[idx] & (1 << (bitIndex % 32))) == 0) m_numBitsSet++; m_data[idx] |= (1 << (bitIndex % 32)); } else { if ((m_data[idx] & (1 << (bitIndex % 32))) != 0) m_numBitsSet--; m_data[idx] &= (~(1 << (bitIndex % 32))); } } /// /// Gets the bit/bool at the specified index /// [System.Runtime.CompilerServices.IndexerName("Bit")] public bool this[int index] { get { return Get(index); } set { Set(index, value); } } /// /// Sets all bits/booleans to zero/false /// public void Clear() { Array.Clear(m_data, 0, m_data.Length); m_numBitsSet = 0; NetException.Assert(this.IsEmpty()); } /// /// Returns a string that represents this object /// public override string ToString() { StringBuilder bdr = new StringBuilder(m_capacity + 2); bdr.Append('['); for (int i = 0; i < m_capacity; i++) bdr.Append(Get(m_capacity - i - 1) ? '1' : '0'); bdr.Append(']'); return bdr.ToString(); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBitWriter.cs ================================================ //#define UNSAFE //#define BIGENDIAN /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Collections.Generic; using System.Diagnostics; namespace Lidgren.Network { /// /// Helper class for NetBuffer to write/read bits /// public static class NetBitWriter { /// /// Read 1-8 bits from a buffer into a byte /// public static byte ReadByte(byte[] fromBuffer, int numberOfBits, int readBitOffset) { NetException.Assert(((numberOfBits > 0) && (numberOfBits < 9)), "Read() can only read between 1 and 8 bits"); int bytePtr = readBitOffset >> 3; int startReadAtIndex = readBitOffset - (bytePtr * 8); // (readBitOffset % 8); if (startReadAtIndex == 0 && numberOfBits == 8) return fromBuffer[bytePtr]; // mask away unused bits lower than (right of) relevant bits in first byte byte returnValue = (byte)(fromBuffer[bytePtr] >> startReadAtIndex); int numberOfBitsInSecondByte = numberOfBits - (8 - startReadAtIndex); if (numberOfBitsInSecondByte < 1) { // we don't need to read from the second byte, but we DO need // to mask away unused bits higher than (left of) relevant bits return (byte)(returnValue & (255 >> (8 - numberOfBits))); } byte second = fromBuffer[bytePtr + 1]; // mask away unused bits higher than (left of) relevant bits in second byte second &= (byte)(255 >> (8 - numberOfBitsInSecondByte)); return (byte)(returnValue | (byte)(second << (numberOfBits - numberOfBitsInSecondByte))); } /// /// Read several bytes from a buffer /// public static void ReadBytes(byte[] fromBuffer, int numberOfBytes, int readBitOffset, byte[] destination, int destinationByteOffset) { int readPtr = readBitOffset >> 3; int startReadAtIndex = readBitOffset - (readPtr * 8); // (readBitOffset % 8); if (startReadAtIndex == 0) { Buffer.BlockCopy(fromBuffer, readPtr, destination, destinationByteOffset, numberOfBytes); return; } int secondPartLen = 8 - startReadAtIndex; int secondMask = 255 >> secondPartLen; for (int i = 0; i < numberOfBytes; i++) { // mask away unused bits lower than (right of) relevant bits in byte int b = fromBuffer[readPtr] >> startReadAtIndex; readPtr++; // mask away unused bits higher than (left of) relevant bits in second byte int second = fromBuffer[readPtr] & secondMask; destination[destinationByteOffset++] = (byte)(b | (second << secondPartLen)); } return; } /// /// Write 0-8 bits of data to buffer /// public static void WriteByte(byte source, int numberOfBits, byte[] destination, int destBitOffset) { if (numberOfBits == 0) return; NetException.Assert(((numberOfBits >= 0) && (numberOfBits <= 8)), "Must write between 0 and 8 bits!"); // Mask out all the bits we dont want source = (byte)(source & (0xFF >> (8 - numberOfBits))); int p = destBitOffset >> 3; int bitsUsed = destBitOffset & 0x7; // mod 8 int bitsFree = 8 - bitsUsed; int bitsLeft = bitsFree - numberOfBits; // Fast path, everything fits in the first byte if (bitsLeft >= 0) { int mask = (0xFF >> bitsFree) | (0xFF << (8 - bitsLeft)); destination[p] = (byte)( // Mask out lower and upper bits (destination[p] & mask) | // Insert new bits (source << bitsUsed) ); return; } destination[p] = (byte)( // Mask out upper bits (destination[p] & (0xFF >> bitsFree)) | // Write the lower bits to the upper bits in the first byte (source << bitsUsed) ); p += 1; destination[p] = (byte)( // Mask out lower bits (destination[p] & (0xFF << (numberOfBits - bitsFree))) | // Write the upper bits to the lower bits of the second byte (source >> bitsFree) ); } /// /// Write several whole bytes /// public static void WriteBytes(byte[] source, int sourceByteOffset, int numberOfBytes, byte[] destination, int destBitOffset) { int dstBytePtr = destBitOffset >> 3; int firstPartLen = (destBitOffset % 8); if (firstPartLen == 0) { Buffer.BlockCopy(source, sourceByteOffset, destination, dstBytePtr, numberOfBytes); return; } int lastPartLen = 8 - firstPartLen; for (int i = 0; i < numberOfBytes; i++) { byte src = source[sourceByteOffset + i]; // write last part of this byte destination[dstBytePtr] &= (byte)(255 >> lastPartLen); // clear before writing destination[dstBytePtr] |= (byte)(src << firstPartLen); // write first half dstBytePtr++; // write first part of next byte destination[dstBytePtr] &= (byte)(255 << firstPartLen); // clear before writing destination[dstBytePtr] |= (byte)(src >> lastPartLen); // write second half } return; } /// /// Reads an unsigned 16 bit integer /// [CLSCompliant(false)] #if UNSAFE public static unsafe ushort ReadUInt16(byte[] fromBuffer, int numberOfBits, int readBitOffset) { Debug.Assert(((numberOfBits > 0) && (numberOfBits <= 16)), "ReadUInt16() can only read between 1 and 16 bits"); if (numberOfBits == 16 && ((readBitOffset % 8) == 0)) { fixed (byte* ptr = &(fromBuffer[readBitOffset / 8])) { return *(((ushort*)ptr)); } } #else public static ushort ReadUInt16(byte[] fromBuffer, int numberOfBits, int readBitOffset) { Debug.Assert(((numberOfBits > 0) && (numberOfBits <= 16)), "ReadUInt16() can only read between 1 and 16 bits"); #endif ushort returnValue; if (numberOfBits <= 8) { returnValue = ReadByte(fromBuffer, numberOfBits, readBitOffset); return returnValue; } returnValue = ReadByte(fromBuffer, 8, readBitOffset); numberOfBits -= 8; readBitOffset += 8; if (numberOfBits <= 8) { returnValue |= (ushort)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 8); } #if BIGENDIAN // reorder bytes uint retVal = returnValue; retVal = ((retVal & 0x0000ff00) >> 8) | ((retVal & 0x000000ff) << 8); return (ushort)retVal; #else return returnValue; #endif } /// /// Reads the specified number of bits into an UInt32 /// [CLSCompliant(false)] #if UNSAFE public static unsafe uint ReadUInt32(byte[] fromBuffer, int numberOfBits, int readBitOffset) { NetException.Assert(((numberOfBits > 0) && (numberOfBits <= 32)), "ReadUInt32() can only read between 1 and 32 bits"); if (numberOfBits == 32 && ((readBitOffset % 8) == 0)) { fixed (byte* ptr = &(fromBuffer[readBitOffset / 8])) { return *(((uint*)ptr)); } } #else public static uint ReadUInt32(byte[] fromBuffer, int numberOfBits, int readBitOffset) { NetException.Assert(((numberOfBits > 0) && (numberOfBits <= 32)), "ReadUInt32() can only read between 1 and 32 bits"); #endif uint returnValue; if (numberOfBits <= 8) { returnValue = ReadByte(fromBuffer, numberOfBits, readBitOffset); return returnValue; } returnValue = ReadByte(fromBuffer, 8, readBitOffset); numberOfBits -= 8; readBitOffset += 8; if (numberOfBits <= 8) { returnValue |= (uint)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 8); return returnValue; } returnValue |= (uint)(ReadByte(fromBuffer, 8, readBitOffset) << 8); numberOfBits -= 8; readBitOffset += 8; if (numberOfBits <= 8) { uint r = ReadByte(fromBuffer, numberOfBits, readBitOffset); r <<= 16; returnValue |= r; return returnValue; } returnValue |= (uint)(ReadByte(fromBuffer, 8, readBitOffset) << 16); numberOfBits -= 8; readBitOffset += 8; returnValue |= (uint)(ReadByte(fromBuffer, numberOfBits, readBitOffset) << 24); #if BIGENDIAN // reorder bytes return ((returnValue & 0xff000000) >> 24) | ((returnValue & 0x00ff0000) >> 8) | ((returnValue & 0x0000ff00) << 8) | ((returnValue & 0x000000ff) << 24); #else return returnValue; #endif } //[CLSCompliant(false)] //public static ulong ReadUInt64(byte[] fromBuffer, int numberOfBits, int readBitOffset) /// /// Writes an unsigned 16 bit integer /// [CLSCompliant(false)] public static void WriteUInt16(ushort source, int numberOfBits, byte[] destination, int destinationBitOffset) { if (numberOfBits == 0) return; NetException.Assert((numberOfBits >= 0 && numberOfBits <= 16), "numberOfBits must be between 0 and 16"); #if BIGENDIAN // reorder bytes uint intSource = source; intSource = ((intSource & 0x0000ff00) >> 8) | ((intSource & 0x000000ff) << 8); source = (ushort)intSource; #endif if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset); return; } NetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset); numberOfBits -= 8; if (numberOfBits > 0) NetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset + 8); } /// /// Writes the specified number of bits into a byte array /// [CLSCompliant(false)] public static int WriteUInt32(uint source, int numberOfBits, byte[] destination, int destinationBitOffset) { #if BIGENDIAN // reorder bytes source = ((source & 0xff000000) >> 24) | ((source & 0x00ff0000) >> 8) | ((source & 0x0000ff00) << 8) | ((source & 0x000000ff) << 24); #endif int returnValue = destinationBitOffset + numberOfBits; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 8), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 16), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 16), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; NetBitWriter.WriteByte((byte)(source >> 24), numberOfBits, destination, destinationBitOffset); return returnValue; } /// /// Writes the specified number of bits into a byte array /// [CLSCompliant(false)] public static int WriteUInt64(ulong source, int numberOfBits, byte[] destination, int destinationBitOffset) { #if BIGENDIAN source = ((source & 0xff00000000000000L) >> 56) | ((source & 0x00ff000000000000L) >> 40) | ((source & 0x0000ff0000000000L) >> 24) | ((source & 0x000000ff00000000L) >> 8) | ((source & 0x00000000ff000000L) << 8) | ((source & 0x0000000000ff0000L) << 24) | ((source & 0x000000000000ff00L) << 40) | ((source & 0x00000000000000ffL) << 56); #endif int returnValue = destinationBitOffset + numberOfBits; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)source, numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)source, 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 8), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 8), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 16), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 16), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 24), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 24), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 32), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 32), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 40), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 40), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 48), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 48), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; if (numberOfBits <= 8) { NetBitWriter.WriteByte((byte)(source >> 56), numberOfBits, destination, destinationBitOffset); return returnValue; } NetBitWriter.WriteByte((byte)(source >> 56), 8, destination, destinationBitOffset); destinationBitOffset += 8; numberOfBits -= 8; return returnValue; } // // Variable size // /// /// Write Base128 encoded variable sized unsigned integer /// /// number of bytes written [CLSCompliant(false)] public static int WriteVariableUInt32(byte[] intoBuffer, int offset, uint value) { int retval = 0; uint num1 = (uint)value; while (num1 >= 0x80) { intoBuffer[offset + retval] = (byte)(num1 | 0x80); num1 = num1 >> 7; retval++; } intoBuffer[offset + retval] = (byte)num1; return retval + 1; } /// /// Reads a UInt32 written using WriteUnsignedVarInt(); will increment offset! /// [CLSCompliant(false)] public static uint ReadVariableUInt32(byte[] buffer, ref int offset) { int num1 = 0; int num2 = 0; while (true) { NetException.Assert(num2 != 0x23, "Bad 7-bit encoded integer"); byte num3 = buffer[offset++]; num1 |= (num3 & 0x7f) << (num2 & 0x1f); num2 += 7; if ((num3 & 0x80) == 0) return (uint)num1; } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.Peek.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Diagnostics; using System.Net; namespace Lidgren.Network { public partial class NetBuffer { /// /// Gets the internal data buffer /// public byte[] PeekDataBuffer() { return m_data; } // // 1 bit // /// /// Reads a 1-bit Boolean without advancing the read pointer /// public bool PeekBoolean() { NetException.Assert(m_bitLength - m_readPosition >= 1, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 1, m_readPosition); return (retval > 0 ? true : false); } // // 8 bit // /// /// Reads a Byte without advancing the read pointer /// public byte PeekByte() { NetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition); return retval; } /// /// Reads an SByte without advancing the read pointer /// [CLSCompliant(false)] public sbyte PeekSByte() { NetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition); return (sbyte)retval; } /// /// Reads the specified number of bits into a Byte without advancing the read pointer /// public byte PeekByte(int numberOfBits) { byte retval = NetBitWriter.ReadByte(m_data, numberOfBits, m_readPosition); return retval; } /// /// Reads the specified number of bytes without advancing the read pointer /// public byte[] PeekBytes(int numberOfBytes) { NetException.Assert(m_bitLength - m_readPosition >= (numberOfBytes * 8), c_readOverflowError); byte[] retval = new byte[numberOfBytes]; NetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, retval, 0); return retval; } /// /// Reads the specified number of bytes without advancing the read pointer /// public void PeekBytes(byte[] into, int offset, int numberOfBytes) { NetException.Assert(m_bitLength - m_readPosition >= (numberOfBytes * 8), c_readOverflowError); NetException.Assert(offset + numberOfBytes <= into.Length); NetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, into, offset); return; } // // 16 bit // /// /// Reads an Int16 without advancing the read pointer /// public Int16 PeekInt16() { NetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError); uint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition); return (short)retval; } /// /// Reads a UInt16 without advancing the read pointer /// [CLSCompliant(false)] public UInt16 PeekUInt16() { NetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError); uint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition); return (ushort)retval; } // // 32 bit // /// /// Reads an Int32 without advancing the read pointer /// public Int32 PeekInt32() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); return (Int32)retval; } /// /// Reads the specified number of bits into an Int32 without advancing the read pointer /// public Int32 PeekInt32(int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 32), "ReadInt() can only read between 1 and 32 bits"); NetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); if (numberOfBits == 32) return (int)retval; int signBit = 1 << (numberOfBits - 1); if ((retval & signBit) == 0) return (int)retval; // positive // negative unchecked { uint mask = ((uint)-1) >> (33 - numberOfBits); uint tmp = (retval & mask) + 1; return -((int)tmp); } } /// /// Reads a UInt32 without advancing the read pointer /// [CLSCompliant(false)] public UInt32 PeekUInt32() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); return retval; } /// /// Reads the specified number of bits into a UInt32 without advancing the read pointer /// [CLSCompliant(false)] public UInt32 PeekUInt32(int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 32), "ReadUInt() can only read between 1 and 32 bits"); //NetException.Assert(m_bitLength - m_readBitPtr >= numberOfBits, "tried to read past buffer size"); UInt32 retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); return retval; } // // 64 bit // /// /// Reads a UInt64 without advancing the read pointer /// [CLSCompliant(false)] public UInt64 PeekUInt64() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); ulong low = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); ulong high = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition + 32); ulong retval = low + (high << 32); return retval; } /// /// Reads an Int64 without advancing the read pointer /// public Int64 PeekInt64() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); unchecked { ulong retval = PeekUInt64(); long longRetval = (long)retval; return longRetval; } } /// /// Reads the specified number of bits into an UInt64 without advancing the read pointer /// [CLSCompliant(false)] public UInt64 PeekUInt64(int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 64), "ReadUInt() can only read between 1 and 64 bits"); NetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError); ulong retval; if (numberOfBits <= 32) { retval = (ulong)NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); } else { retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); retval |= NetBitWriter.ReadUInt32(m_data, numberOfBits - 32, m_readPosition) << 32; } return retval; } /// /// Reads the specified number of bits into an Int64 without advancing the read pointer /// public Int64 PeekInt64(int numberOfBits) { NetException.Assert(((numberOfBits > 0) && (numberOfBits < 65)), "ReadInt64(bits) can only read between 1 and 64 bits"); return (long)PeekUInt64(numberOfBits); } // // Floating point // /// /// Reads a 32-bit Single without advancing the read pointer /// public float PeekFloat() { return PeekSingle(); } /// /// Reads a 32-bit Single without advancing the read pointer /// public float PeekSingle() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); if ((m_readPosition & 7) == 0) // read directly { float retval = BitConverter.ToSingle(m_data, m_readPosition >> 3); return retval; } byte[] bytes = PeekBytes(4); return BitConverter.ToSingle(bytes, 0); } /// /// Reads a 64-bit Double without advancing the read pointer /// public double PeekDouble() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); if ((m_readPosition & 7) == 0) // read directly { // read directly double retval = BitConverter.ToDouble(m_data, m_readPosition >> 3); return retval; } byte[] bytes = PeekBytes(8); return BitConverter.ToDouble(bytes, 0); } /// /// Reads a string without advancing the read pointer /// public string PeekString() { int wasReadPosition = m_readPosition; string retval = ReadString(); m_readPosition = wasReadPosition; return retval; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.Read.Reflection.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Reflection; namespace Lidgren.Network { public partial class NetBuffer { /// /// Reads all public and private declared instance fields of the object in alphabetical order using reflection /// public void ReadAllFields(object target) { ReadAllFields(target, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); } /// /// Reads all fields with the specified binding of the object in alphabetical order using reflection /// public void ReadAllFields(object target, BindingFlags flags) { if (target == null) throw new ArgumentNullException("target"); Type tp = target.GetType(); FieldInfo[] fields = tp.GetFields(flags); NetUtility.SortMembersList(fields); foreach (FieldInfo fi in fields) { object value; // find read method MethodInfo readMethod; if (s_readMethods.TryGetValue(fi.FieldType, out readMethod)) { // read value value = readMethod.Invoke(this, null); // set the value fi.SetValue(target, value); } } } /// /// Reads all public and private declared instance fields of the object in alphabetical order using reflection /// public void ReadAllProperties(object target) { ReadAllProperties(target, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); } /// /// Reads all fields with the specified binding of the object in alphabetical order using reflection /// public void ReadAllProperties(object target, BindingFlags flags) { if (target == null) throw new ArgumentNullException("target"); Type tp = target.GetType(); PropertyInfo[] fields = tp.GetProperties(flags); NetUtility.SortMembersList(fields); foreach (PropertyInfo fi in fields) { object value; // find read method MethodInfo readMethod; if (s_readMethods.TryGetValue(fi.PropertyType, out readMethod)) { // read value value = readMethod.Invoke(this, null); // set the value #if UNITY_WEBPLAYER || UNITY_4_5 var setMethod = fi.GetSetMethod(); #else var setMethod = fi.SetMethod; #endif if (setMethod != null) setMethod.Invoke(target, new object[] { value }); } } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.Read.cs ================================================ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Net; namespace Lidgren.Network { /// /// Base class for NetIncomingMessage and NetOutgoingMessage /// public partial class NetBuffer { private const string c_readOverflowError = "Trying to read past the buffer size - likely caused by mismatching Write/Reads, different size or order."; /// /// Reads a boolean value (stored as a single bit) written using Write(bool) /// public bool ReadBoolean() { NetException.Assert(m_bitLength - m_readPosition >= 1, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 1, m_readPosition); m_readPosition += 1; return (retval > 0 ? true : false); } /// /// Reads a byte /// public byte ReadByte() { NetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition); m_readPosition += 8; return retval; } /// /// Reads a byte and returns true or false for success /// public bool ReadByte(out byte result) { if (m_bitLength - m_readPosition < 8) { result = 0; return false; } result = NetBitWriter.ReadByte(m_data, 8, m_readPosition); m_readPosition += 8; return true; } /// /// Reads a signed byte /// [CLSCompliant(false)] public sbyte ReadSByte() { NetException.Assert(m_bitLength - m_readPosition >= 8, c_readOverflowError); byte retval = NetBitWriter.ReadByte(m_data, 8, m_readPosition); m_readPosition += 8; return (sbyte)retval; } /// /// Reads 1 to 8 bits into a byte /// public byte ReadByte(int numberOfBits) { NetException.Assert(numberOfBits > 0 && numberOfBits <= 8, "ReadByte(bits) can only read between 1 and 8 bits"); byte retval = NetBitWriter.ReadByte(m_data, numberOfBits, m_readPosition); m_readPosition += numberOfBits; return retval; } /// /// Reads the specified number of bytes /// public byte[] ReadBytes(int numberOfBytes) { NetException.Assert(m_bitLength - m_readPosition + 7 >= (numberOfBytes * 8), c_readOverflowError); byte[] retval = new byte[numberOfBytes]; NetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, retval, 0); m_readPosition += (8 * numberOfBytes); return retval; } /// /// Reads the specified number of bytes and returns true for success /// public bool ReadBytes(int numberOfBytes, out byte[] result) { if (m_bitLength - m_readPosition + 7 < (numberOfBytes * 8)) { result = null; return false; } result = new byte[numberOfBytes]; NetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, result, 0); m_readPosition += (8 * numberOfBytes); return true; } /// /// Reads the specified number of bytes into a preallocated array /// /// The destination array /// The offset where to start writing in the destination array /// The number of bytes to read public void ReadBytes(byte[] into, int offset, int numberOfBytes) { NetException.Assert(m_bitLength - m_readPosition + 7 >= (numberOfBytes * 8), c_readOverflowError); NetException.Assert(offset + numberOfBytes <= into.Length); NetBitWriter.ReadBytes(m_data, numberOfBytes, m_readPosition, into, offset); m_readPosition += (8 * numberOfBytes); return; } /// /// Reads the specified number of bits into a preallocated array /// /// The destination array /// The offset where to start writing in the destination array /// The number of bits to read public void ReadBits(byte[] into, int offset, int numberOfBits) { NetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError); NetException.Assert(offset + NetUtility.BytesToHoldBits(numberOfBits) <= into.Length); int numberOfWholeBytes = numberOfBits / 8; int extraBits = numberOfBits - (numberOfWholeBytes * 8); NetBitWriter.ReadBytes(m_data, numberOfWholeBytes, m_readPosition, into, offset); m_readPosition += (8 * numberOfWholeBytes); if (extraBits > 0) into[offset + numberOfWholeBytes] = ReadByte(extraBits); return; } /// /// Reads a 16 bit signed integer written using Write(Int16) /// public Int16 ReadInt16() { NetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError); uint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition); m_readPosition += 16; return (short)retval; } /// /// Reads a 16 bit unsigned integer written using Write(UInt16) /// [CLSCompliant(false)] public UInt16 ReadUInt16() { NetException.Assert(m_bitLength - m_readPosition >= 16, c_readOverflowError); uint retval = NetBitWriter.ReadUInt16(m_data, 16, m_readPosition); m_readPosition += 16; return (ushort)retval; } /// /// Reads a 32 bit signed integer written using Write(Int32) /// public Int32 ReadInt32() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); m_readPosition += 32; return (Int32)retval; } /// /// Reads a 32 bit signed integer written using Write(Int32) /// [CLSCompliant(false)] public bool ReadInt32(out Int32 result) { if (m_bitLength - m_readPosition < 32) { result = 0; return false; } result = (Int32)NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); m_readPosition += 32; return true; } /// /// Reads a signed integer stored in 1 to 32 bits, written using Write(Int32, Int32) /// public Int32 ReadInt32(int numberOfBits) { NetException.Assert(numberOfBits > 0 && numberOfBits <= 32, "ReadInt32(bits) can only read between 1 and 32 bits"); NetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); m_readPosition += numberOfBits; if (numberOfBits == 32) return (int)retval; int signBit = 1 << (numberOfBits - 1); if ((retval & signBit) == 0) return (int)retval; // positive // negative unchecked { uint mask = ((uint)-1) >> (33 - numberOfBits); uint tmp = (retval & mask) + 1; return -((int)tmp); } } /// /// Reads an 32 bit unsigned integer written using Write(UInt32) /// [CLSCompliant(false)] public UInt32 ReadUInt32() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); uint retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); m_readPosition += 32; return retval; } /// /// Reads an 32 bit unsigned integer written using Write(UInt32) and returns true for success /// [CLSCompliant(false)] public bool ReadUInt32(out UInt32 result) { if (m_bitLength - m_readPosition < 32) { result = 0; return false; } result = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); m_readPosition += 32; return true; } /// /// Reads an unsigned integer stored in 1 to 32 bits, written using Write(UInt32, Int32) /// [CLSCompliant(false)] public UInt32 ReadUInt32(int numberOfBits) { NetException.Assert(numberOfBits > 0 && numberOfBits <= 32, "ReadUInt32(bits) can only read between 1 and 32 bits"); //NetException.Assert(m_bitLength - m_readBitPtr >= numberOfBits, "tried to read past buffer size"); UInt32 retval = NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); m_readPosition += numberOfBits; return retval; } /// /// Reads a 64 bit unsigned integer written using Write(UInt64) /// [CLSCompliant(false)] public UInt64 ReadUInt64() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); ulong low = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); m_readPosition += 32; ulong high = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); ulong retval = low + (high << 32); m_readPosition += 32; return retval; } /// /// Reads a 64 bit signed integer written using Write(Int64) /// public Int64 ReadInt64() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); unchecked { ulong retval = ReadUInt64(); long longRetval = (long)retval; return longRetval; } } /// /// Reads an unsigned integer stored in 1 to 64 bits, written using Write(UInt64, Int32) /// [CLSCompliant(false)] public UInt64 ReadUInt64(int numberOfBits) { NetException.Assert(numberOfBits > 0 && numberOfBits <= 64, "ReadUInt64(bits) can only read between 1 and 64 bits"); NetException.Assert(m_bitLength - m_readPosition >= numberOfBits, c_readOverflowError); ulong retval; if (numberOfBits <= 32) { retval = (ulong)NetBitWriter.ReadUInt32(m_data, numberOfBits, m_readPosition); } else { retval = NetBitWriter.ReadUInt32(m_data, 32, m_readPosition); retval |= NetBitWriter.ReadUInt32(m_data, numberOfBits - 32, m_readPosition) << 32; } m_readPosition += numberOfBits; return retval; } /// /// Reads a signed integer stored in 1 to 64 bits, written using Write(Int64, Int32) /// public Int64 ReadInt64(int numberOfBits) { NetException.Assert(((numberOfBits > 0) && (numberOfBits <= 64)), "ReadInt64(bits) can only read between 1 and 64 bits"); return (long)ReadUInt64(numberOfBits); } /// /// Reads a 32 bit floating point value written using Write(Single) /// public float ReadFloat() { return ReadSingle(); } /// /// Reads a 32 bit floating point value written using Write(Single) /// public float ReadSingle() { NetException.Assert(m_bitLength - m_readPosition >= 32, c_readOverflowError); if ((m_readPosition & 7) == 0) // read directly { float retval = BitConverter.ToSingle(m_data, m_readPosition >> 3); m_readPosition += 32; return retval; } byte[] bytes = ReadBytes(4); return BitConverter.ToSingle(bytes, 0); } /// /// Reads a 32 bit floating point value written using Write(Single) /// public bool ReadSingle(out float result) { if (m_bitLength - m_readPosition < 32) { result = 0.0f; return false; } if ((m_readPosition & 7) == 0) // read directly { result = BitConverter.ToSingle(m_data, m_readPosition >> 3); m_readPosition += 32; return true; } byte[] bytes = ReadBytes(4); result = BitConverter.ToSingle(bytes, 0); return true; } /// /// Reads a 64 bit floating point value written using Write(Double) /// public double ReadDouble() { NetException.Assert(m_bitLength - m_readPosition >= 64, c_readOverflowError); if ((m_readPosition & 7) == 0) // read directly { // read directly double retval = BitConverter.ToDouble(m_data, m_readPosition >> 3); m_readPosition += 64; return retval; } byte[] bytes = ReadBytes(8); return BitConverter.ToDouble(bytes, 0); } // // Variable bit count // /// /// Reads a variable sized UInt32 written using WriteVariableUInt32() /// [CLSCompliant(false)] public uint ReadVariableUInt32() { int num1 = 0; int num2 = 0; while (m_bitLength - m_readPosition >= 8) { byte num3 = this.ReadByte(); num1 |= (num3 & 0x7f) << num2; num2 += 7; if ((num3 & 0x80) == 0) return (uint)num1; } // ouch; failed to find enough bytes; malformed variable length number? return (uint)num1; } /// /// Reads a variable sized UInt32 written using WriteVariableUInt32() and returns true for success /// [CLSCompliant(false)] public bool ReadVariableUInt32(out uint result) { int num1 = 0; int num2 = 0; while (m_bitLength - m_readPosition >= 8) { byte num3; if (ReadByte(out num3) == false) { result = 0; return false; } num1 |= (num3 & 0x7f) << num2; num2 += 7; if ((num3 & 0x80) == 0) { result = (uint)num1; return true; } } result = (uint)num1; return false; } /// /// Reads a variable sized Int32 written using WriteVariableInt32() /// public int ReadVariableInt32() { uint n = ReadVariableUInt32(); return (int)(n >> 1) ^ -(int)(n & 1); // decode zigzag } /// /// Reads a variable sized Int64 written using WriteVariableInt64() /// public Int64 ReadVariableInt64() { UInt64 n = ReadVariableUInt64(); return (Int64)(n >> 1) ^ -(long)(n & 1); // decode zigzag } /// /// Reads a variable sized UInt32 written using WriteVariableInt64() /// [CLSCompliant(false)] public UInt64 ReadVariableUInt64() { UInt64 num1 = 0; int num2 = 0; while (m_bitLength - m_readPosition >= 8) { //if (num2 == 0x23) // throw new FormatException("Bad 7-bit encoded integer"); byte num3 = this.ReadByte(); num1 |= ((UInt64)num3 & 0x7f) << num2; num2 += 7; if ((num3 & 0x80) == 0) return num1; } // ouch; failed to find enough bytes; malformed variable length number? return num1; } /// /// Reads a 32 bit floating point value written using WriteSignedSingle() /// /// The number of bits used when writing the value /// A floating point value larger or equal to -1 and smaller or equal to 1 public float ReadSignedSingle(int numberOfBits) { uint encodedVal = ReadUInt32(numberOfBits); int maxVal = (1 << numberOfBits) - 1; return ((float)(encodedVal + 1) / (float)(maxVal + 1) - 0.5f) * 2.0f; } /// /// Reads a 32 bit floating point value written using WriteUnitSingle() /// /// The number of bits used when writing the value /// A floating point value larger or equal to 0 and smaller or equal to 1 public float ReadUnitSingle(int numberOfBits) { uint encodedVal = ReadUInt32(numberOfBits); int maxVal = (1 << numberOfBits) - 1; return (float)(encodedVal + 1) / (float)(maxVal + 1); } /// /// Reads a 32 bit floating point value written using WriteRangedSingle() /// /// The minimum value used when writing the value /// The maximum value used when writing the value /// The number of bits used when writing the value /// A floating point value larger or equal to MIN and smaller or equal to MAX public float ReadRangedSingle(float min, float max, int numberOfBits) { float range = max - min; int maxVal = (1 << numberOfBits) - 1; float encodedVal = (float)ReadUInt32(numberOfBits); float unit = encodedVal / (float)maxVal; return min + (unit * range); } /// /// Reads a 32 bit integer value written using WriteRangedInteger() /// /// The minimum value used when writing the value /// The maximum value used when writing the value /// A signed integer value larger or equal to MIN and smaller or equal to MAX public int ReadRangedInteger(int min, int max) { uint range = (uint)(max - min); int numBits = NetUtility.BitsToHoldUInt(range); uint rvalue = ReadUInt32(numBits); return (int)(min + rvalue); } /// /// Reads a string written using Write(string) /// public string ReadString() { int byteLen = (int)ReadVariableUInt32(); if (byteLen <= 0) return String.Empty; if ((ulong)(m_bitLength - m_readPosition) < ((ulong)byteLen * 8)) { // not enough data #if DEBUG throw new NetException(c_readOverflowError); #else m_readPosition = m_bitLength; return null; // unfortunate; but we need to protect against DDOS #endif } if ((m_readPosition & 7) == 0) { // read directly string retval = System.Text.Encoding.UTF8.GetString(m_data, m_readPosition >> 3, byteLen); m_readPosition += (8 * byteLen); return retval; } byte[] bytes = ReadBytes(byteLen); return System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length); } /// /// Reads a string written using Write(string) and returns true for success /// public bool ReadString(out string result) { uint byteLen; if (ReadVariableUInt32(out byteLen) == false) { result = String.Empty; return false; } if (byteLen <= 0) { result = String.Empty; return true; } if (m_bitLength - m_readPosition < (byteLen * 8)) { result = String.Empty; return false; } if ((m_readPosition & 7) == 0) { // read directly result = System.Text.Encoding.UTF8.GetString(m_data, m_readPosition >> 3, (int)byteLen); m_readPosition += (8 * (int)byteLen); return true; } byte[] bytes; if (ReadBytes((int)byteLen, out bytes) == false) { result = String.Empty; return false; } result = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length); return true; } /// /// Reads a value, in local time comparable to NetTime.Now, written using WriteTime() for the connection supplied /// public double ReadTime(NetConnection connection, bool highPrecision) { double remoteTime = (highPrecision ? ReadDouble() : (double)ReadSingle()); if (connection == null) throw new NetException("Cannot call ReadTime() on message without a connected sender (ie. unconnected messages)"); // lets bypass NetConnection.GetLocalTime for speed return remoteTime - connection.m_remoteTimeOffset; } /// /// Reads a stored IPv4 endpoint description /// public IPEndPoint ReadIPEndPoint() { byte len = ReadByte(); byte[] addressBytes = ReadBytes(len); int port = (int)ReadUInt16(); IPAddress address = new IPAddress(addressBytes); return new IPEndPoint(address, port); } /// /// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. /// public void SkipPadBits() { m_readPosition = ((m_readPosition + 7) >> 3) * 8; } /// /// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. /// public void ReadPadBits() { m_readPosition = ((m_readPosition + 7) >> 3) * 8; } /// /// Pads data with the specified number of bits. /// public void SkipPadBits(int numberOfBits) { m_readPosition += numberOfBits; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.Write.Reflection.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Reflection; namespace Lidgren.Network { public partial class NetBuffer { /// /// Writes all public and private declared instance fields of the object in alphabetical order using reflection /// public void WriteAllFields(object ob) { WriteAllFields(ob, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); } /// /// Writes all fields with specified binding in alphabetical order using reflection /// public void WriteAllFields(object ob, BindingFlags flags) { if (ob == null) return; Type tp = ob.GetType(); FieldInfo[] fields = tp.GetFields(flags); NetUtility.SortMembersList(fields); foreach (FieldInfo fi in fields) { object value = fi.GetValue(ob); // find the appropriate Write method MethodInfo writeMethod; if (s_writeMethods.TryGetValue(fi.FieldType, out writeMethod)) writeMethod.Invoke(this, new object[] { value }); else throw new NetException("Failed to find write method for type " + fi.FieldType); } } /// /// Writes all public and private declared instance properties of the object in alphabetical order using reflection /// public void WriteAllProperties(object ob) { WriteAllProperties(ob, BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); } /// /// Writes all properties with specified binding in alphabetical order using reflection /// public void WriteAllProperties(object ob, BindingFlags flags) { if (ob == null) return; Type tp = ob.GetType(); PropertyInfo[] fields = tp.GetProperties(flags); NetUtility.SortMembersList(fields); foreach (PropertyInfo fi in fields) { #if UNITY_WEBPLAYER || UNITY_4_5 MethodInfo getMethod = fi.GetGetMethod(); #else MethodInfo getMethod = fi.GetMethod; #endif if (getMethod != null) { object value = getMethod.Invoke(ob, null); // find the appropriate Write method MethodInfo writeMethod; if (s_writeMethods.TryGetValue(fi.PropertyType, out writeMethod)) writeMethod.Invoke(this, new object[] { value }); } } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.Write.cs ================================================ //#define UNSAFE //#define BIGENDIAN /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Collections.Generic; using System.Net; using System.Reflection; using System.Text; using System.Runtime.InteropServices; namespace Lidgren.Network { /// /// Utility struct for writing Singles /// [StructLayout(LayoutKind.Explicit)] public struct SingleUIntUnion { /// /// Value as a 32 bit float /// [FieldOffset(0)] public float SingleValue; /// /// Value as an unsigned 32 bit integer /// [FieldOffset(0)] [CLSCompliant(false)] public uint UIntValue; } public partial class NetBuffer { /// /// Ensures the buffer can hold this number of bits /// public void EnsureBufferSize(int numberOfBits) { int byteLen = ((numberOfBits + 7) >> 3); if (m_data == null) { m_data = new byte[byteLen + c_overAllocateAmount]; return; } if (m_data.Length < byteLen) Array.Resize(ref m_data, byteLen + c_overAllocateAmount); return; } /// /// Ensures the buffer can hold this number of bits /// internal void InternalEnsureBufferSize(int numberOfBits) { int byteLen = ((numberOfBits + 7) >> 3); if (m_data == null) { m_data = new byte[byteLen]; return; } if (m_data.Length < byteLen) Array.Resize(ref m_data, byteLen); return; } /// /// Writes a boolean value using 1 bit /// public void Write(bool value) { EnsureBufferSize(m_bitLength + 1); NetBitWriter.WriteByte((value ? (byte)1 : (byte)0), 1, m_data, m_bitLength); m_bitLength += 1; } /// /// Write a byte /// public void Write(byte source) { EnsureBufferSize(m_bitLength + 8); NetBitWriter.WriteByte(source, 8, m_data, m_bitLength); m_bitLength += 8; } /// /// Writes a signed byte /// [CLSCompliant(false)] public void Write(sbyte source) { EnsureBufferSize(m_bitLength + 8); NetBitWriter.WriteByte((byte)source, 8, m_data, m_bitLength); m_bitLength += 8; } /// /// Writes 1 to 8 bits of a byte /// public void Write(byte source, int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 8), "Write(byte, numberOfBits) can only write between 1 and 8 bits"); EnsureBufferSize(m_bitLength + numberOfBits); NetBitWriter.WriteByte(source, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } /// /// Writes all bytes in an array /// public void Write(byte[] source) { if (source == null) throw new ArgumentNullException("source"); int bits = source.Length * 8; EnsureBufferSize(m_bitLength + bits); NetBitWriter.WriteBytes(source, 0, source.Length, m_data, m_bitLength); m_bitLength += bits; } /// /// Writes the specified number of bytes from an array /// public void Write(byte[] source, int offsetInBytes, int numberOfBytes) { if (source == null) throw new ArgumentNullException("source"); int bits = numberOfBytes * 8; EnsureBufferSize(m_bitLength + bits); NetBitWriter.WriteBytes(source, offsetInBytes, numberOfBytes, m_data, m_bitLength); m_bitLength += bits; } /// /// Writes an unsigned 16 bit integer /// /// [CLSCompliant(false)] public void Write(UInt16 source) { EnsureBufferSize(m_bitLength + 16); NetBitWriter.WriteUInt16(source, 16, m_data, m_bitLength); m_bitLength += 16; } /// /// Writes a 16 bit unsigned integer at a given offset in the buffer /// [CLSCompliant(false)] public void WriteAt(Int32 offset, UInt16 source) { int newBitLength = Math.Max(m_bitLength, offset + 16); EnsureBufferSize(newBitLength); NetBitWriter.WriteUInt16(source, 16, m_data, offset); m_bitLength = newBitLength; } /// /// Writes an unsigned integer using 1 to 16 bits /// [CLSCompliant(false)] public void Write(UInt16 source, int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 16), "Write(ushort, numberOfBits) can only write between 1 and 16 bits"); EnsureBufferSize(m_bitLength + numberOfBits); NetBitWriter.WriteUInt16(source, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } /// /// Writes a signed 16 bit integer /// public void Write(Int16 source) { EnsureBufferSize(m_bitLength + 16); NetBitWriter.WriteUInt16((ushort)source, 16, m_data, m_bitLength); m_bitLength += 16; } /// /// Writes a 16 bit signed integer at a given offset in the buffer /// public void WriteAt(Int32 offset, Int16 source) { int newBitLength = Math.Max(m_bitLength, offset + 16); EnsureBufferSize(newBitLength); NetBitWriter.WriteUInt16((ushort)source, 16, m_data, offset); m_bitLength = newBitLength; } #if UNSAFE /// /// Writes a 32 bit signed integer /// public unsafe void Write(Int32 source) { EnsureBufferSize(m_bitLength + 32); // can write fast? if (m_bitLength % 8 == 0) { fixed (byte* numRef = &Data[m_bitLength / 8]) { *((int*)numRef) = source; } } else { NetBitWriter.WriteUInt32((UInt32)source, 32, Data, m_bitLength); } m_bitLength += 32; } #else /// /// Writes a 32 bit signed integer /// public void Write(Int32 source) { EnsureBufferSize(m_bitLength + 32); NetBitWriter.WriteUInt32((UInt32)source, 32, m_data, m_bitLength); m_bitLength += 32; } #endif /// /// Writes a 32 bit signed integer at a given offset in the buffer /// public void WriteAt(Int32 offset, Int32 source) { int newBitLength = Math.Max(m_bitLength, offset + 32); EnsureBufferSize(newBitLength); NetBitWriter.WriteUInt32((UInt32)source, 32, m_data, offset); m_bitLength = newBitLength; } #if UNSAFE /// /// Writes a 32 bit unsigned integer /// public unsafe void Write(UInt32 source) { EnsureBufferSize(m_bitLength + 32); // can write fast? if (m_bitLength % 8 == 0) { fixed (byte* numRef = &Data[m_bitLength / 8]) { *((uint*)numRef) = source; } } else { NetBitWriter.WriteUInt32(source, 32, Data, m_bitLength); } m_bitLength += 32; } #else /// /// Writes a 32 bit unsigned integer /// [CLSCompliant(false)] public void Write(UInt32 source) { EnsureBufferSize(m_bitLength + 32); NetBitWriter.WriteUInt32(source, 32, m_data, m_bitLength); m_bitLength += 32; } #endif /// /// Writes a 32 bit unsigned integer at a given offset in the buffer /// [CLSCompliant(false)] public void WriteAt(Int32 offset, UInt32 source) { int newBitLength = Math.Max(m_bitLength, offset + 32); EnsureBufferSize(newBitLength); NetBitWriter.WriteUInt32(source, 32, m_data, offset); m_bitLength = newBitLength; } /// /// Writes a 32 bit signed integer /// [CLSCompliant(false)] public void Write(UInt32 source, int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 32), "Write(uint, numberOfBits) can only write between 1 and 32 bits"); EnsureBufferSize(m_bitLength + numberOfBits); NetBitWriter.WriteUInt32(source, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } /// /// Writes a signed integer using 1 to 32 bits /// public void Write(Int32 source, int numberOfBits) { NetException.Assert((numberOfBits > 0 && numberOfBits <= 32), "Write(int, numberOfBits) can only write between 1 and 32 bits"); EnsureBufferSize(m_bitLength + numberOfBits); if (numberOfBits != 32) { // make first bit sign int signBit = 1 << (numberOfBits - 1); if (source < 0) source = (-source - 1) | signBit; else source &= (~signBit); } NetBitWriter.WriteUInt32((uint)source, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } /// /// Writes a 64 bit unsigned integer /// [CLSCompliant(false)] public void Write(UInt64 source) { EnsureBufferSize(m_bitLength + 64); NetBitWriter.WriteUInt64(source, 64, m_data, m_bitLength); m_bitLength += 64; } /// /// Writes a 64 bit unsigned integer at a given offset in the buffer /// [CLSCompliant(false)] public void WriteAt(Int32 offset, UInt64 source) { int newBitLength = Math.Max(m_bitLength, offset + 64); EnsureBufferSize(newBitLength); NetBitWriter.WriteUInt64(source, 64, m_data, offset); m_bitLength = newBitLength; } /// /// Writes an unsigned integer using 1 to 64 bits /// [CLSCompliant(false)] public void Write(UInt64 source, int numberOfBits) { EnsureBufferSize(m_bitLength + numberOfBits); NetBitWriter.WriteUInt64(source, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } /// /// Writes a 64 bit signed integer /// public void Write(Int64 source) { EnsureBufferSize(m_bitLength + 64); ulong usource = (ulong)source; NetBitWriter.WriteUInt64(usource, 64, m_data, m_bitLength); m_bitLength += 64; } /// /// Writes a signed integer using 1 to 64 bits /// public void Write(Int64 source, int numberOfBits) { EnsureBufferSize(m_bitLength + numberOfBits); ulong usource = (ulong)source; NetBitWriter.WriteUInt64(usource, numberOfBits, m_data, m_bitLength); m_bitLength += numberOfBits; } // // Floating point // #if UNSAFE /// /// Writes a 32 bit floating point value /// public unsafe void Write(float source) { uint val = *((uint*)&source); #if BIGENDIAN val = NetUtility.SwapByteOrder(val); #endif Write(val); } #else /// /// Writes a 32 bit floating point value /// public void Write(float source) { // Use union to avoid BitConverter.GetBytes() which allocates memory on the heap SingleUIntUnion su; su.UIntValue = 0; // must initialize every member of the union to avoid warning su.SingleValue = source; #if BIGENDIAN // swap byte order su.UIntValue = NetUtility.SwapByteOrder(su.UIntValue); #endif Write(su.UIntValue); } #endif #if UNSAFE /// /// Writes a 64 bit floating point value /// public unsafe void Write(double source) { ulong val = *((ulong*)&source); #if BIGENDIAN val = NetUtility.SwapByteOrder(val); #endif Write(val); } #else /// /// Writes a 64 bit floating point value /// public void Write(double source) { byte[] val = BitConverter.GetBytes(source); #if BIGENDIAN // 0 1 2 3 4 5 6 7 // swap byte order byte tmp = val[7]; val[7] = val[0]; val[0] = tmp; tmp = val[6]; val[6] = val[1]; val[1] = tmp; tmp = val[5]; val[5] = val[2]; val[2] = tmp; tmp = val[4]; val[4] = val[3]; val[3] = tmp; #endif Write(val); } #endif // // Variable bits // /// /// Write Base128 encoded variable sized unsigned integer of up to 32 bits /// /// number of bytes written [CLSCompliant(false)] public int WriteVariableUInt32(uint value) { int retval = 1; uint num1 = (uint)value; while (num1 >= 0x80) { this.Write((byte)(num1 | 0x80)); num1 = num1 >> 7; retval++; } this.Write((byte)num1); return retval; } /// /// Write Base128 encoded variable sized signed integer of up to 32 bits /// /// number of bytes written public int WriteVariableInt32(int value) { uint zigzag = (uint)(value << 1) ^ (uint)(value >> 31); return WriteVariableUInt32(zigzag); } /// /// Write Base128 encoded variable sized signed integer of up to 64 bits /// /// number of bytes written public int WriteVariableInt64(Int64 value) { ulong zigzag = (ulong)(value << 1) ^ (ulong)(value >> 63); return WriteVariableUInt64(zigzag); } /// /// Write Base128 encoded variable sized unsigned integer of up to 64 bits /// /// number of bytes written [CLSCompliant(false)] public int WriteVariableUInt64(UInt64 value) { int retval = 1; UInt64 num1 = (UInt64)value; while (num1 >= 0x80) { this.Write((byte)(num1 | 0x80)); num1 = num1 >> 7; retval++; } this.Write((byte)num1); return retval; } /// /// Compress (lossy) a float in the range -1..1 using numberOfBits bits /// public void WriteSignedSingle(float value, int numberOfBits) { NetException.Assert(((value >= -1.0) && (value <= 1.0)), " WriteSignedSingle() must be passed a float in the range -1 to 1; val is " + value); float unit = (value + 1.0f) * 0.5f; int maxVal = (1 << numberOfBits) - 1; uint writeVal = (uint)(unit * (float)maxVal); Write(writeVal, numberOfBits); } /// /// Compress (lossy) a float in the range 0..1 using numberOfBits bits /// public void WriteUnitSingle(float value, int numberOfBits) { NetException.Assert(((value >= 0.0) && (value <= 1.0)), " WriteUnitSingle() must be passed a float in the range 0 to 1; val is " + value); int maxValue = (1 << numberOfBits) - 1; uint writeVal = (uint)(value * (float)maxValue); Write(writeVal, numberOfBits); } /// /// Compress a float within a specified range using a certain number of bits /// public void WriteRangedSingle(float value, float min, float max, int numberOfBits) { NetException.Assert(((value >= min) && (value <= max)), " WriteRangedSingle() must be passed a float in the range MIN to MAX; val is " + value); float range = max - min; float unit = ((value - min) / range); int maxVal = (1 << numberOfBits) - 1; Write((UInt32)((float)maxVal * unit), numberOfBits); } /// /// Writes an integer with the least amount of bits need for the specified range /// Returns number of bits written /// public int WriteRangedInteger(int min, int max, int value) { NetException.Assert(value >= min && value <= max, "Value not within min/max range!"); uint range = (uint)(max - min); int numBits = NetUtility.BitsToHoldUInt(range); uint rvalue = (uint)(value - min); Write(rvalue, numBits); return numBits; } /// /// Write a string /// public void Write(string source) { if (string.IsNullOrEmpty(source)) { WriteVariableUInt32(0); return; } byte[] bytes = Encoding.UTF8.GetBytes(source); EnsureBufferSize(m_bitLength + 8 + (bytes.Length * 8)); WriteVariableUInt32((uint)bytes.Length); Write(bytes); } /// /// Writes an endpoint description /// public void Write(IPEndPoint endPoint) { byte[] bytes = endPoint.Address.GetAddressBytes(); Write((byte)bytes.Length); Write(bytes); Write((ushort)endPoint.Port); } /// /// Writes the current local time to a message; readable (and convertable to local time) by the remote host using ReadTime() /// public void WriteTime(bool highPrecision) { double localTime = NetTime.Now; if (highPrecision) Write(localTime); else Write((float)localTime); } /// /// Writes a local timestamp to a message; readable (and convertable to local time) by the remote host using ReadTime() /// public void WriteTime(double localTime, bool highPrecision) { if (highPrecision) Write(localTime); else Write((float)localTime); } /// /// Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. /// public void WritePadBits() { m_bitLength = ((m_bitLength + 7) >> 3) * 8; EnsureBufferSize(m_bitLength); } /// /// Pads data with the specified number of bits. /// public void WritePadBits(int numberOfBits) { m_bitLength += numberOfBits; EnsureBufferSize(m_bitLength); } /// /// Append all the bits of message to this message /// public void Write(NetBuffer buffer) { EnsureBufferSize(m_bitLength + (buffer.LengthBytes * 8)); Write(buffer.m_data, 0, buffer.LengthBytes); // did we write excessive bits? int bitsInLastByte = (buffer.m_bitLength % 8); if (bitsInLastByte != 0) { int excessBits = 8 - bitsInLastByte; m_bitLength -= excessBits; } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetBuffer.cs ================================================ using System; using System.Collections.Generic; using System.Reflection; namespace Lidgren.Network { public partial class NetBuffer { /// /// Number of bytes to overallocate for each message to avoid resizing /// protected const int c_overAllocateAmount = 4; private static readonly Dictionary s_readMethods; private static readonly Dictionary s_writeMethods; internal byte[] m_data; internal int m_bitLength; internal int m_readPosition; /// /// Gets or sets the internal data buffer /// public byte[] Data { get { return m_data; } set { m_data = value; } } /// /// Gets or sets the length of the used portion of the buffer in bytes /// public int LengthBytes { get { return ((m_bitLength + 7) >> 3); } set { m_bitLength = value * 8; InternalEnsureBufferSize(m_bitLength); } } /// /// Gets or sets the length of the used portion of the buffer in bits /// public int LengthBits { get { return m_bitLength; } set { m_bitLength = value; InternalEnsureBufferSize(m_bitLength); } } /// /// Gets or sets the read position in the buffer, in bits (not bytes) /// public long Position { get { return (long)m_readPosition; } set { m_readPosition = (int)value; } } /// /// Gets the position in the buffer in bytes; note that the bits of the first returned byte may already have been read - check the Position property to make sure. /// public int PositionInBytes { get { return (int)(m_readPosition / 8); } } static NetBuffer() { s_readMethods = new Dictionary(); MethodInfo[] methods = typeof(NetIncomingMessage).GetMethods(BindingFlags.Instance | BindingFlags.Public); foreach (MethodInfo mi in methods) { if (mi.GetParameters().Length == 0 && mi.Name.StartsWith("Read", StringComparison.InvariantCulture) && mi.Name.Substring(4) == mi.ReturnType.Name) { s_readMethods[mi.ReturnType] = mi; } } s_writeMethods = new Dictionary(); methods = typeof(NetOutgoingMessage).GetMethods(BindingFlags.Instance | BindingFlags.Public); foreach (MethodInfo mi in methods) { if (mi.Name.Equals("Write", StringComparison.InvariantCulture)) { ParameterInfo[] pis = mi.GetParameters(); if (pis.Length == 1) s_writeMethods[pis[0].ParameterType] = mi; } } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetClient.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Net; namespace Lidgren.Network { /// /// Specialized version of NetPeer used for a "client" connection. It does not accept any incoming connections and maintains a ServerConnection property /// public class NetClient : NetPeer { /// /// Gets the connection to the server, if any /// public NetConnection ServerConnection { get { NetConnection retval = null; if (m_connections.Count > 0) { try { retval = m_connections[0]; } catch { // preempted! return null; } } return retval; } } /// /// Gets the connection status of the server connection (or NetConnectionStatus.Disconnected if no connection) /// public NetConnectionStatus ConnectionStatus { get { var conn = ServerConnection; if (conn == null) return NetConnectionStatus.Disconnected; return conn.Status; } } /// /// NetClient constructor /// /// public NetClient(NetPeerConfiguration config) : base(config) { config.AcceptIncomingConnections = false; } /// /// Connect to a remote server /// /// The remote endpoint to connect to /// The hail message to pass /// server connection, or null if already connected public override NetConnection Connect(IPEndPoint remoteEndPoint, NetOutgoingMessage hailMessage) { lock (m_connections) { if (m_connections.Count > 0) { LogWarning("Connect attempt failed; Already connected"); return null; } } lock (m_handshakes) { if (m_handshakes.Count > 0) { LogWarning("Connect attempt failed; Handshake already in progress"); return null; } } return base.Connect(remoteEndPoint, hailMessage); } /// /// Disconnect from server /// /// reason for disconnect public void Disconnect(string byeMessage) { NetConnection serverConnection = ServerConnection; if (serverConnection == null) { lock (m_handshakes) { if (m_handshakes.Count > 0) { LogVerbose("Aborting connection attempt"); foreach(var hs in m_handshakes) hs.Value.Disconnect(byeMessage); return; } } LogWarning("Disconnect requested when not connected!"); return; } serverConnection.Disconnect(byeMessage); } /// /// Sends message to server /// public NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method) { NetConnection serverConnection = ServerConnection; if (serverConnection == null) { LogWarning("Cannot send message, no server connection!"); return NetSendResult.FailedNotConnected; } return serverConnection.SendMessage(msg, method, 0); } /// /// Sends message to server /// public NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel) { NetConnection serverConnection = ServerConnection; if (serverConnection == null) { LogWarning("Cannot send message, no server connection!"); return NetSendResult.FailedNotConnected; } return serverConnection.SendMessage(msg, method, sequenceChannel); } /// /// Returns a string that represents this object /// public override string ToString() { return "[NetClient " + ServerConnection + "]"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnection.Handshake.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { public partial class NetConnection { internal bool m_connectRequested; internal bool m_disconnectRequested; internal bool m_disconnectReqSendBye; internal string m_disconnectMessage; internal bool m_connectionInitiator; internal NetIncomingMessage m_remoteHailMessage; internal float m_lastHandshakeSendTime; internal int m_handshakeAttempts; /// /// The message that the remote part specified via Connect() or Approve() - can be null. /// public NetIncomingMessage RemoteHailMessage { get { return m_remoteHailMessage; } } // heartbeat called when connection still is in m_handshakes of NetPeer internal void UnconnectedHeartbeat(float now) { m_peer.VerifyNetworkThread(); if (m_disconnectRequested) ExecuteDisconnect(m_disconnectMessage, true); if (m_connectRequested) { switch (m_status) { case NetConnectionStatus.Connected: case NetConnectionStatus.RespondedConnect: // reconnect ExecuteDisconnect("Reconnecting", true); break; case NetConnectionStatus.InitiatedConnect: // send another connect attempt SendConnect(now); break; case NetConnectionStatus.Disconnected: m_peer.ThrowOrLog("This connection is Disconnected; spent. A new one should have been created"); break; case NetConnectionStatus.Disconnecting: // let disconnect finish first break; case NetConnectionStatus.None: default: SendConnect(now); break; } return; } if (now - m_lastHandshakeSendTime > m_peerConfiguration.m_resendHandshakeInterval) { if (m_handshakeAttempts >= m_peerConfiguration.m_maximumHandshakeAttempts) { // failed to connect ExecuteDisconnect("Failed to establish connection - no response from remote host", true); return; } // resend handshake switch (m_status) { case NetConnectionStatus.InitiatedConnect: SendConnect(now); break; case NetConnectionStatus.RespondedConnect: SendConnectResponse(now, true); break; case NetConnectionStatus.RespondedAwaitingApproval: // awaiting approval m_lastHandshakeSendTime = now; // postpone handshake resend break; case NetConnectionStatus.None: case NetConnectionStatus.ReceivedInitiation: default: m_peer.LogWarning("Time to resend handshake, but status is " + m_status); break; } } } internal void ExecuteDisconnect(string reason, bool sendByeMessage) { m_peer.VerifyNetworkThread(); // clear send queues for (int i = 0; i < m_sendChannels.Length; i++) { NetSenderChannelBase channel = m_sendChannels[i]; if (channel != null) channel.Reset(); } if (sendByeMessage) SendDisconnect(reason, true); if (m_status == NetConnectionStatus.ReceivedInitiation) { // nothing much has happened yet; no need to send disconnected status message m_status = NetConnectionStatus.Disconnected; } else { SetStatus(NetConnectionStatus.Disconnected, reason); } // in case we're still in handshake lock (m_peer.m_handshakes) m_peer.m_handshakes.Remove(m_remoteEndPoint); m_disconnectRequested = false; m_connectRequested = false; m_handshakeAttempts = 0; } internal void SendConnect(float now) { m_peer.VerifyNetworkThread(); int preAllocate = 13 + m_peerConfiguration.AppIdentifier.Length; preAllocate += (m_localHailMessage == null ? 0 : m_localHailMessage.LengthBytes); NetOutgoingMessage om = m_peer.CreateMessage(preAllocate); om.m_messageType = NetMessageType.Connect; om.Write(m_peerConfiguration.AppIdentifier); om.Write(m_peer.m_uniqueIdentifier); om.Write(now); WriteLocalHail(om); m_peer.SendLibrary(om, m_remoteEndPoint); m_connectRequested = false; m_lastHandshakeSendTime = now; m_handshakeAttempts++; if (m_handshakeAttempts > 1) m_peer.LogDebug("Resending Connect..."); SetStatus(NetConnectionStatus.InitiatedConnect, "Locally requested connect"); } internal void SendConnectResponse(float now, bool onLibraryThread) { if (onLibraryThread) m_peer.VerifyNetworkThread(); NetOutgoingMessage om = m_peer.CreateMessage(m_peerConfiguration.AppIdentifier.Length + 13 + (m_localHailMessage == null ? 0 : m_localHailMessage.LengthBytes)); om.m_messageType = NetMessageType.ConnectResponse; om.Write(m_peerConfiguration.AppIdentifier); om.Write(m_peer.m_uniqueIdentifier); om.Write(now); WriteLocalHail(om); if (onLibraryThread) m_peer.SendLibrary(om, m_remoteEndPoint); else m_peer.m_unsentUnconnectedMessages.Enqueue(new NetTuple(m_remoteEndPoint, om)); m_lastHandshakeSendTime = now; m_handshakeAttempts++; if (m_handshakeAttempts > 1) m_peer.LogDebug("Resending ConnectResponse..."); SetStatus(NetConnectionStatus.RespondedConnect, "Remotely requested connect"); } internal void SendDisconnect(string reason, bool onLibraryThread) { if (onLibraryThread) m_peer.VerifyNetworkThread(); NetOutgoingMessage om = m_peer.CreateMessage(reason); om.m_messageType = NetMessageType.Disconnect; if (onLibraryThread) m_peer.SendLibrary(om, m_remoteEndPoint); else m_peer.m_unsentUnconnectedMessages.Enqueue(new NetTuple(m_remoteEndPoint, om)); } private void WriteLocalHail(NetOutgoingMessage om) { if (m_localHailMessage != null) { byte[] hi = m_localHailMessage.Data; if (hi != null && hi.Length >= m_localHailMessage.LengthBytes) { if (om.LengthBytes + m_localHailMessage.LengthBytes > m_peerConfiguration.m_maximumTransmissionUnit - 10) m_peer.ThrowOrLog("Hail message too large; can maximally be " + (m_peerConfiguration.m_maximumTransmissionUnit - 10 - om.LengthBytes)); om.Write(m_localHailMessage.Data, 0, m_localHailMessage.LengthBytes); } } } internal void SendConnectionEstablished() { NetOutgoingMessage om = m_peer.CreateMessage(4); om.m_messageType = NetMessageType.ConnectionEstablished; om.Write((float)NetTime.Now); m_peer.SendLibrary(om, m_remoteEndPoint); m_handshakeAttempts = 0; InitializePing(); if (m_status != NetConnectionStatus.Connected) SetStatus(NetConnectionStatus.Connected, "Connected to " + NetUtility.ToHexString(m_remoteUniqueIdentifier)); } /// /// Approves this connection; sending a connection response to the remote host /// public void Approve() { if (m_status != NetConnectionStatus.RespondedAwaitingApproval) { m_peer.LogWarning("Approve() called in wrong status; expected RespondedAwaitingApproval; got " + m_status); return; } m_localHailMessage = null; m_handshakeAttempts = 0; SendConnectResponse((float)NetTime.Now, false); } /// /// Approves this connection; sending a connection response to the remote host /// /// The local hail message that will be set as RemoteHailMessage on the remote host public void Approve(NetOutgoingMessage localHail) { if (m_status != NetConnectionStatus.RespondedAwaitingApproval) { m_peer.LogWarning("Approve() called in wrong status; expected RespondedAwaitingApproval; got " + m_status); return; } m_localHailMessage = localHail; m_handshakeAttempts = 0; SendConnectResponse((float)NetTime.Now, false); } /// /// Denies this connection; disconnecting it /// public void Deny() { Deny(string.Empty); } /// /// Denies this connection; disconnecting it /// /// The stated reason for the disconnect, readable as a string in the StatusChanged message on the remote host public void Deny(string reason) { // send disconnect; remove from handshakes SendDisconnect(reason, false); // remove from handshakes lock (m_peer.m_handshakes) m_peer.m_handshakes.Remove(m_remoteEndPoint); } internal void ReceivedHandshake(double now, NetMessageType tp, int ptr, int payloadLength) { m_peer.VerifyNetworkThread(); byte[] hail; switch (tp) { case NetMessageType.Connect: if (m_status == NetConnectionStatus.ReceivedInitiation) { // Whee! Server full has already been checked bool ok = ValidateHandshakeData(ptr, payloadLength, out hail); if (ok) { if (hail != null) { m_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail); m_remoteHailMessage.LengthBits = (hail.Length * 8); } else { m_remoteHailMessage = null; } if (m_peerConfiguration.IsMessageTypeEnabled(NetIncomingMessageType.ConnectionApproval)) { // ok, let's not add connection just yet NetIncomingMessage appMsg = m_peer.CreateIncomingMessage(NetIncomingMessageType.ConnectionApproval, (m_remoteHailMessage == null ? 0 : m_remoteHailMessage.LengthBytes)); appMsg.m_receiveTime = now; appMsg.m_senderConnection = this; appMsg.m_senderEndPoint = this.m_remoteEndPoint; if (m_remoteHailMessage != null) appMsg.Write(m_remoteHailMessage.m_data, 0, m_remoteHailMessage.LengthBytes); SetStatus(NetConnectionStatus.RespondedAwaitingApproval, "Awaiting approval"); m_peer.ReleaseMessage(appMsg); return; } SendConnectResponse((float)now, true); } return; } if (m_status == NetConnectionStatus.RespondedAwaitingApproval) { m_peer.LogWarning("Ignoring multiple Connect() most likely due to a delayed Approval"); return; } if (m_status == NetConnectionStatus.RespondedConnect) { // our ConnectResponse must have been lost SendConnectResponse((float)now, true); return; } m_peer.LogDebug("Unhandled Connect: " + tp + ", status is " + m_status + " length: " + payloadLength); break; case NetMessageType.ConnectResponse: HandleConnectResponse(now, tp, ptr, payloadLength); break; case NetMessageType.ConnectionEstablished: switch (m_status) { case NetConnectionStatus.Connected: // ok... break; case NetConnectionStatus.Disconnected: case NetConnectionStatus.Disconnecting: case NetConnectionStatus.None: // too bad, almost made it break; case NetConnectionStatus.ReceivedInitiation: // uh, a little premature... ignore break; case NetConnectionStatus.InitiatedConnect: // weird, should have been RespondedConnect... break; case NetConnectionStatus.RespondedConnect: // awesome NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength); InitializeRemoteTimeOffset(msg.ReadSingle()); m_peer.AcceptConnection(this); InitializePing(); SetStatus(NetConnectionStatus.Connected, "Connected to " + NetUtility.ToHexString(m_remoteUniqueIdentifier)); return; } break; case NetMessageType.Disconnect: // ouch string reason = "Ouch"; try { NetIncomingMessage inc = m_peer.SetupReadHelperMessage(ptr, payloadLength); reason = inc.ReadString(); } catch { } ExecuteDisconnect(reason, false); break; case NetMessageType.Discovery: m_peer.HandleIncomingDiscoveryRequest(now, m_remoteEndPoint, ptr, payloadLength); return; case NetMessageType.DiscoveryResponse: m_peer.HandleIncomingDiscoveryResponse(now, m_remoteEndPoint, ptr, payloadLength); return; case NetMessageType.Ping: // silently ignore return; default: m_peer.LogDebug("Unhandled type during handshake: " + tp + " length: " + payloadLength); break; } } private void HandleConnectResponse(double now, NetMessageType tp, int ptr, int payloadLength) { byte[] hail; switch (m_status) { case NetConnectionStatus.InitiatedConnect: // awesome bool ok = ValidateHandshakeData(ptr, payloadLength, out hail); if (ok) { if (hail != null) { m_remoteHailMessage = m_peer.CreateIncomingMessage(NetIncomingMessageType.Data, hail); m_remoteHailMessage.LengthBits = (hail.Length * 8); } else { m_remoteHailMessage = null; } m_peer.AcceptConnection(this); SendConnectionEstablished(); return; } break; case NetConnectionStatus.RespondedConnect: // hello, wtf? break; case NetConnectionStatus.Disconnecting: case NetConnectionStatus.Disconnected: case NetConnectionStatus.ReceivedInitiation: case NetConnectionStatus.None: // wtf? anyway, bye! break; case NetConnectionStatus.Connected: // my ConnectionEstablished must have been lost, send another one SendConnectionEstablished(); return; } } private bool ValidateHandshakeData(int ptr, int payloadLength, out byte[] hail) { hail = null; // create temporary incoming message NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength); try { string remoteAppIdentifier = msg.ReadString(); long remoteUniqueIdentifier = msg.ReadInt64(); InitializeRemoteTimeOffset(msg.ReadSingle()); int remainingBytes = payloadLength - (msg.PositionInBytes - ptr); if (remainingBytes > 0) hail = msg.ReadBytes(remainingBytes); if (remoteAppIdentifier != m_peer.m_configuration.AppIdentifier) { ExecuteDisconnect("Wrong application identifier!", true); return false; } m_remoteUniqueIdentifier = remoteUniqueIdentifier; } catch(Exception ex) { // whatever; we failed ExecuteDisconnect("Handshake data validation failed", true); m_peer.LogWarning("ReadRemoteHandshakeData failed: " + ex.Message); return false; } return true; } /// /// Disconnect from the remote peer /// /// the message to send with the disconnect message public void Disconnect(string byeMessage) { // user or library thread if (m_status == NetConnectionStatus.None || m_status == NetConnectionStatus.Disconnected) return; m_peer.LogVerbose("Disconnect requested for " + this); m_disconnectMessage = byeMessage; if (m_status != NetConnectionStatus.Disconnected && m_status != NetConnectionStatus.None) SetStatus(NetConnectionStatus.Disconnecting, byeMessage); m_handshakeAttempts = 0; m_disconnectRequested = true; m_disconnectReqSendBye = true; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnection.Latency.cs ================================================ using System; namespace Lidgren.Network { public partial class NetConnection { private float m_sentPingTime; private int m_sentPingNumber; private float m_averageRoundtripTime; private float m_timeoutDeadline = float.MaxValue; // local time value + m_remoteTimeOffset = remote time value internal double m_remoteTimeOffset; /// /// Gets the current average roundtrip time in seconds /// public float AverageRoundtripTime { get { return m_averageRoundtripTime; } } /// /// Time offset between this peer and the remote peer /// public float RemoteTimeOffset { get { return (float)m_remoteTimeOffset; } } // this might happen more than once internal void InitializeRemoteTimeOffset(float remoteSendTime) { m_remoteTimeOffset = (remoteSendTime + (m_averageRoundtripTime / 2.0)) - NetTime.Now; } /// /// Gets local time value comparable to NetTime.Now from a remote value /// public double GetLocalTime(double remoteTimestamp) { return remoteTimestamp - m_remoteTimeOffset; } /// /// Gets the remote time value for a local time value produced by NetTime.Now /// public double GetRemoteTime(double localTimestamp) { return localTimestamp + m_remoteTimeOffset; } internal void InitializePing() { float now = (float)NetTime.Now; // randomize ping sent time (0.25 - 1.0 x ping interval) m_sentPingTime = now; m_sentPingTime -= (m_peerConfiguration.PingInterval * 0.25f); // delay ping for a little while m_sentPingTime -= (MWCRandom.Instance.NextSingle() * (m_peerConfiguration.PingInterval * 0.75f)); m_timeoutDeadline = now + (m_peerConfiguration.m_connectionTimeout * 2.0f); // initially allow a little more time // make it better, quick :-) SendPing(); } internal void SendPing() { m_peer.VerifyNetworkThread(); m_sentPingNumber++; m_sentPingTime = (float)NetTime.Now; NetOutgoingMessage om = m_peer.CreateMessage(1); om.Write((byte)m_sentPingNumber); // truncating to 0-255 om.m_messageType = NetMessageType.Ping; int len = om.Encode(m_peer.m_sendBuffer, 0, 0); bool connectionReset; m_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset); m_statistics.PacketSent(len, 1); m_peer.Recycle(om); } internal void SendPong(int pingNumber) { m_peer.VerifyNetworkThread(); NetOutgoingMessage om = m_peer.CreateMessage(5); om.Write((byte)pingNumber); om.Write((float)NetTime.Now); // we should update this value to reflect the exact point in time the packet is SENT om.m_messageType = NetMessageType.Pong; int len = om.Encode(m_peer.m_sendBuffer, 0, 0); bool connectionReset; m_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset); m_statistics.PacketSent(len, 1); m_peer.Recycle(om); } internal void ReceivedPong(float now, int pongNumber, float remoteSendTime) { if ((byte)pongNumber != (byte)m_sentPingNumber) { m_peer.LogVerbose("Ping/Pong mismatch; dropped message?"); return; } m_timeoutDeadline = now + m_peerConfiguration.m_connectionTimeout; float rtt = now - m_sentPingTime; NetException.Assert(rtt >= 0); double diff = (remoteSendTime + (rtt / 2.0)) - now; if (m_averageRoundtripTime < 0) { m_remoteTimeOffset = diff; m_averageRoundtripTime = rtt; m_peer.LogDebug("Initiated average roundtrip time to " + NetTime.ToReadable(m_averageRoundtripTime) + " Remote time is: " + (now + diff)); } else { m_averageRoundtripTime = (m_averageRoundtripTime * 0.7f) + (float)(rtt * 0.3f); m_remoteTimeOffset = ((m_remoteTimeOffset * (double)(m_sentPingNumber - 1)) + diff) / (double)m_sentPingNumber; m_peer.LogVerbose("Updated average roundtrip time to " + NetTime.ToReadable(m_averageRoundtripTime) + ", remote time to " + (now + m_remoteTimeOffset) + " (ie. diff " + m_remoteTimeOffset + ")"); } // update resend delay for all channels float resendDelay = GetResendDelay(); foreach (var chan in m_sendChannels) { var rchan = chan as NetReliableSenderChannel; if (rchan != null) rchan.m_resendDelay = resendDelay; } // m_peer.LogVerbose("Timeout deadline pushed to " + m_timeoutDeadline); // notify the application that average rtt changed if (m_peer.m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.ConnectionLatencyUpdated)) { NetIncomingMessage update = m_peer.CreateIncomingMessage(NetIncomingMessageType.ConnectionLatencyUpdated, 4); update.m_senderConnection = this; update.m_senderEndPoint = this.m_remoteEndPoint; update.Write(rtt); m_peer.ReleaseMessage(update); } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnection.MTU.cs ================================================ using System; namespace Lidgren.Network { public partial class NetConnection { private enum ExpandMTUStatus { None, InProgress, Finished } private const int c_protocolMaxMTU = (int)((((float)ushort.MaxValue / 8.0f) - 1.0f)); private ExpandMTUStatus m_expandMTUStatus; private int m_largestSuccessfulMTU; private int m_smallestFailedMTU; private int m_lastSentMTUAttemptSize; private double m_lastSentMTUAttemptTime; private int m_mtuAttemptFails; internal int m_currentMTU; /// /// Gets the current MTU in bytes. If PeerConfiguration.AutoExpandMTU is false, this will be PeerConfiguration.MaximumTransmissionUnit. /// public int CurrentMTU { get { return m_currentMTU; } } internal void InitExpandMTU(double now) { m_lastSentMTUAttemptTime = now + m_peerConfiguration.m_expandMTUFrequency + 1.5f + m_averageRoundtripTime; // wait a tiny bit before starting to expand mtu m_largestSuccessfulMTU = 512; m_smallestFailedMTU = -1; m_currentMTU = m_peerConfiguration.MaximumTransmissionUnit; } private void MTUExpansionHeartbeat(double now) { if (m_expandMTUStatus == ExpandMTUStatus.Finished) return; if (m_expandMTUStatus == ExpandMTUStatus.None) { if (m_peerConfiguration.m_autoExpandMTU == false) { FinalizeMTU(m_currentMTU); return; } // begin expansion ExpandMTU(now); return; } if (now > m_lastSentMTUAttemptTime + m_peerConfiguration.ExpandMTUFrequency) { m_mtuAttemptFails++; if (m_mtuAttemptFails == 3) { FinalizeMTU(m_currentMTU); return; } // timed out; ie. failed m_smallestFailedMTU = m_lastSentMTUAttemptSize; ExpandMTU(now); } } private void ExpandMTU(double now) { int tryMTU; // we've nevered encountered failure if (m_smallestFailedMTU == -1) { // we've never encountered failure; expand by 25% each time tryMTU = (int)((float)m_currentMTU * 1.25f); //m_peer.LogDebug("Trying MTU " + tryMTU); } else { // we HAVE encountered failure; so try in between tryMTU = (int)(((float)m_smallestFailedMTU + (float)m_largestSuccessfulMTU) / 2.0f); //m_peer.LogDebug("Trying MTU " + m_smallestFailedMTU + " <-> " + m_largestSuccessfulMTU + " = " + tryMTU); } if (tryMTU > c_protocolMaxMTU) tryMTU = c_protocolMaxMTU; if (tryMTU == m_largestSuccessfulMTU) { //m_peer.LogDebug("Found optimal MTU - exiting"); FinalizeMTU(m_largestSuccessfulMTU); return; } SendExpandMTU(now, tryMTU); } private void SendExpandMTU(double now, int size) { NetOutgoingMessage om = m_peer.CreateMessage(size); byte[] tmp = new byte[size]; om.Write(tmp); om.m_messageType = NetMessageType.ExpandMTURequest; int len = om.Encode(m_peer.m_sendBuffer, 0, 0); bool ok = m_peer.SendMTUPacket(len, m_remoteEndPoint); if (ok == false) { //m_peer.LogDebug("Send MTU failed for size " + size); // failure if (m_smallestFailedMTU == -1 || size < m_smallestFailedMTU) { m_smallestFailedMTU = size; m_mtuAttemptFails++; if (m_mtuAttemptFails >= m_peerConfiguration.ExpandMTUFailAttempts) { FinalizeMTU(m_largestSuccessfulMTU); return; } } ExpandMTU(now); return; } m_lastSentMTUAttemptSize = size; m_lastSentMTUAttemptTime = now; m_statistics.PacketSent(len, 1); m_peer.Recycle(om); } private void FinalizeMTU(int size) { if (m_expandMTUStatus == ExpandMTUStatus.Finished) return; m_expandMTUStatus = ExpandMTUStatus.Finished; m_currentMTU = size; if (m_currentMTU != m_peerConfiguration.m_maximumTransmissionUnit) m_peer.LogDebug("Expanded Maximum Transmission Unit to: " + m_currentMTU + " bytes"); return; } private void SendMTUSuccess(int size) { NetOutgoingMessage om = m_peer.CreateMessage(4); om.Write(size); om.m_messageType = NetMessageType.ExpandMTUSuccess; int len = om.Encode(m_peer.m_sendBuffer, 0, 0); bool connectionReset; m_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset); m_peer.Recycle(om); //m_peer.LogDebug("Received MTU expand request for " + size + " bytes"); m_statistics.PacketSent(len, 1); } private void HandleExpandMTUSuccess(double now, int size) { if (size > m_largestSuccessfulMTU) m_largestSuccessfulMTU = size; if (size < m_currentMTU) { //m_peer.LogDebug("Received low MTU expand success (size " + size + "); current mtu is " + m_currentMTU); return; } //m_peer.LogDebug("Expanding MTU to " + size); m_currentMTU = size; ExpandMTU(now); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnection.cs ================================================ using System; using System.Net; using System.Threading; using System.Diagnostics; namespace Lidgren.Network { /// /// Represents a connection to a remote peer /// [DebuggerDisplay("RemoteUniqueIdentifier={RemoteUniqueIdentifier} RemoteEndPoint={remoteEndPoint}")] public partial class NetConnection { private const int m_infrequentEventsSkipFrames = 8; // number of heartbeats to skip checking for infrequent events (ping, timeout etc) private const int m_messageCoalesceFrames = 3; // number of heartbeats to wait for more incoming messages before sending packet internal NetPeer m_peer; internal NetPeerConfiguration m_peerConfiguration; internal NetConnectionStatus m_status; internal NetConnectionStatus m_visibleStatus; internal IPEndPoint m_remoteEndPoint; internal NetSenderChannelBase[] m_sendChannels; internal NetReceiverChannelBase[] m_receiveChannels; internal NetOutgoingMessage m_localHailMessage; internal long m_remoteUniqueIdentifier; internal NetQueue> m_queuedOutgoingAcks; internal NetQueue> m_queuedIncomingAcks; private int m_sendBufferWritePtr; private int m_sendBufferNumMessages; private object m_tag; internal NetConnectionStatistics m_statistics; /// /// Gets or sets the application defined object containing data about the connection /// public object Tag { get { return m_tag; } set { m_tag = value; } } /// /// Gets the peer which holds this connection /// public NetPeer Peer { get { return m_peer; } } /// /// Gets the current status of the connection (synced to the last status message read) /// public NetConnectionStatus Status { get { return m_visibleStatus; } } /// /// Gets various statistics for this connection /// public NetConnectionStatistics Statistics { get { return m_statistics; } } /// /// Gets the remote endpoint for the connection /// public IPEndPoint RemoteEndPoint { get { return m_remoteEndPoint; } } /// /// Gets the unique identifier of the remote NetPeer for this connection /// public long RemoteUniqueIdentifier { get { return m_remoteUniqueIdentifier; } } /// /// Gets the local hail message that was sent as part of the handshake /// public NetOutgoingMessage LocalHailMessage { get { return m_localHailMessage; } } // gets the time before automatically resending an unacked message internal float GetResendDelay() { float avgRtt = m_averageRoundtripTime; if (avgRtt <= 0) avgRtt = 0.1f; // "default" resend is based on 100 ms roundtrip time return 0.025f + (avgRtt * 2.1f); // 25 ms + double rtt } internal NetConnection(NetPeer peer, IPEndPoint remoteEndPoint) { m_peer = peer; m_peerConfiguration = m_peer.Configuration; m_status = NetConnectionStatus.None; m_visibleStatus = NetConnectionStatus.None; m_remoteEndPoint = remoteEndPoint; m_sendChannels = new NetSenderChannelBase[NetConstants.NumTotalChannels]; m_receiveChannels = new NetReceiverChannelBase[NetConstants.NumTotalChannels]; m_queuedOutgoingAcks = new NetQueue>(4); m_queuedIncomingAcks = new NetQueue>(4); m_statistics = new NetConnectionStatistics(this); m_averageRoundtripTime = -1.0f; m_currentMTU = m_peerConfiguration.MaximumTransmissionUnit; } /// /// Change the internal endpoint to this new one. Used when, during handshake, a switch in port is detected (due to NAT) /// internal void MutateEndPoint(IPEndPoint endPoint) { m_remoteEndPoint = endPoint; } internal void SetStatus(NetConnectionStatus status, string reason) { // user or library thread if (status == m_status) return; m_status = status; if (reason == null) reason = string.Empty; if (m_status == NetConnectionStatus.Connected) { m_timeoutDeadline = (float)NetTime.Now + m_peerConfiguration.m_connectionTimeout; m_peer.LogVerbose("Timeout deadline initialized to " + m_timeoutDeadline); } if (m_peerConfiguration.IsMessageTypeEnabled(NetIncomingMessageType.StatusChanged)) { NetIncomingMessage info = m_peer.CreateIncomingMessage(NetIncomingMessageType.StatusChanged, 4 + reason.Length + (reason.Length > 126 ? 2 : 1)); info.m_senderConnection = this; info.m_senderEndPoint = m_remoteEndPoint; info.Write((byte)m_status); info.Write(reason); m_peer.ReleaseMessage(info); } else { // app dont want those messages, update visible status immediately m_visibleStatus = m_status; } } internal void Heartbeat(float now, uint frameCounter) { m_peer.VerifyNetworkThread(); NetException.Assert(m_status != NetConnectionStatus.InitiatedConnect && m_status != NetConnectionStatus.RespondedConnect); if ((frameCounter % m_infrequentEventsSkipFrames) == 0) { if (now > m_timeoutDeadline) { // // connection timed out // m_peer.LogVerbose("Connection timed out at " + now + " deadline was " + m_timeoutDeadline); ExecuteDisconnect("Connection timed out", true); return; } // send ping? if (m_status == NetConnectionStatus.Connected) { if (now > m_sentPingTime + m_peer.m_configuration.m_pingInterval) SendPing(); // handle expand mtu MTUExpansionHeartbeat(now); } if (m_disconnectRequested) { ExecuteDisconnect(m_disconnectMessage, m_disconnectReqSendBye); return; } } bool connectionReset; // TODO: handle connection reset // // Note: at this point m_sendBufferWritePtr and m_sendBufferNumMessages may be non-null; resends may already be queued up // byte[] sendBuffer = m_peer.m_sendBuffer; int mtu = m_currentMTU; if ((frameCounter % m_messageCoalesceFrames) == 0) // coalesce a few frames { // // send ack messages // while (m_queuedOutgoingAcks.Count > 0) { int acks = (mtu - (m_sendBufferWritePtr + 5)) / 3; // 3 bytes per actual ack if (acks > m_queuedOutgoingAcks.Count) acks = m_queuedOutgoingAcks.Count; NetException.Assert(acks > 0); m_sendBufferNumMessages++; // write acks header sendBuffer[m_sendBufferWritePtr++] = (byte)NetMessageType.Acknowledge; sendBuffer[m_sendBufferWritePtr++] = 0; // no sequence number sendBuffer[m_sendBufferWritePtr++] = 0; // no sequence number int len = (acks * 3) * 8; // bits sendBuffer[m_sendBufferWritePtr++] = (byte)len; sendBuffer[m_sendBufferWritePtr++] = (byte)(len >> 8); // write acks for (int i = 0; i < acks; i++) { NetTuple tuple; m_queuedOutgoingAcks.TryDequeue(out tuple); //m_peer.LogVerbose("Sending ack for " + tuple.Item1 + "#" + tuple.Item2); sendBuffer[m_sendBufferWritePtr++] = (byte)tuple.Item1; sendBuffer[m_sendBufferWritePtr++] = (byte)tuple.Item2; sendBuffer[m_sendBufferWritePtr++] = (byte)(tuple.Item2 >> 8); } if (m_queuedOutgoingAcks.Count > 0) { // send packet and go for another round of acks NetException.Assert(m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0); m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connectionReset); m_statistics.PacketSent(m_sendBufferWritePtr, 1); m_sendBufferWritePtr = 0; m_sendBufferNumMessages = 0; } } // // Parse incoming acks (may trigger resends) // NetTuple incAck; while (m_queuedIncomingAcks.TryDequeue(out incAck)) { //m_peer.LogVerbose("Received ack for " + acktp + "#" + seqNr); NetSenderChannelBase chan = m_sendChannels[(int)incAck.Item1 - 1]; // If we haven't sent a message on this channel there is no reason to ack it if (chan == null) continue; chan.ReceiveAcknowledge(now, incAck.Item2); } } // // send queued messages // if (m_peer.m_executeFlushSendQueue) { for (int i = m_sendChannels.Length - 1; i >= 0; i--) // Reverse order so reliable messages are sent first { var channel = m_sendChannels[i]; NetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0); if (channel != null) channel.SendQueuedMessages(now); NetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0); } } // // Put on wire data has been written to send buffer but not yet sent // if (m_sendBufferWritePtr > 0) { m_peer.VerifyNetworkThread(); NetException.Assert(m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0); m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connectionReset); m_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages); m_sendBufferWritePtr = 0; m_sendBufferNumMessages = 0; } } // Queue an item for immediate sending on the wire // This method is called from the ISenderChannels internal void QueueSendMessage(NetOutgoingMessage om, int seqNr) { m_peer.VerifyNetworkThread(); int sz = om.GetEncodedSize(); //if (sz > m_currentMTU) // m_peer.LogWarning("Message larger than MTU! Fragmentation must have failed!"); bool connReset; // TODO: handle connection reset // can fit this message together with previously written to buffer? if (m_sendBufferWritePtr + sz > m_currentMTU) { if (m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0) { // previous message in buffer; send these first m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset); m_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages); m_sendBufferWritePtr = 0; m_sendBufferNumMessages = 0; } } // encode it into buffer regardless if it (now) fits within MTU or not m_sendBufferWritePtr = om.Encode(m_peer.m_sendBuffer, m_sendBufferWritePtr, seqNr); m_sendBufferNumMessages++; if (m_sendBufferWritePtr > m_currentMTU) { // send immediately; we're already over MTU m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset); m_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages); m_sendBufferWritePtr = 0; m_sendBufferNumMessages = 0; } } /// /// Send a message to this remote connection /// /// The message to send /// How to deliver the message /// Sequence channel within the delivery method public NetSendResult SendMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel) { return m_peer.SendMessage(msg, this, method, sequenceChannel); } // called by SendMessage() and NetPeer.SendMessage; ie. may be user thread internal NetSendResult EnqueueMessage(NetOutgoingMessage msg, NetDeliveryMethod method, int sequenceChannel) { if (m_status != NetConnectionStatus.Connected) return NetSendResult.FailedNotConnected; NetMessageType tp = (NetMessageType)((int)method + sequenceChannel); msg.m_messageType = tp; // TODO: do we need to make this more thread safe? int channelSlot = (int)method - 1 + sequenceChannel; NetSenderChannelBase chan = m_sendChannels[channelSlot]; if (chan == null) chan = CreateSenderChannel(tp); if ((method != NetDeliveryMethod.Unreliable && method != NetDeliveryMethod.UnreliableSequenced) && msg.GetEncodedSize() > m_currentMTU) m_peer.ThrowOrLog("Reliable message too large! Fragmentation failure?"); var retval = chan.Enqueue(msg); //if (retval == NetSendResult.Sent && m_peerConfiguration.m_autoFlushSendQueue == false) // retval = NetSendResult.Queued; // queued since we're not autoflushing return retval; } // may be on user thread private NetSenderChannelBase CreateSenderChannel(NetMessageType tp) { NetSenderChannelBase chan; lock (m_sendChannels) { NetDeliveryMethod method = NetUtility.GetDeliveryMethod(tp); int sequenceChannel = (int)tp - (int)method; int channelSlot = (int)method - 1 + sequenceChannel; if (m_sendChannels[channelSlot] != null) { // we were pre-empted by another call to this method chan = m_sendChannels[channelSlot]; } else { switch (method) { case NetDeliveryMethod.Unreliable: case NetDeliveryMethod.UnreliableSequenced: chan = new NetUnreliableSenderChannel(this, NetUtility.GetWindowSize(method)); break; case NetDeliveryMethod.ReliableOrdered: chan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method)); break; case NetDeliveryMethod.ReliableSequenced: case NetDeliveryMethod.ReliableUnordered: default: chan = new NetReliableSenderChannel(this, NetUtility.GetWindowSize(method)); break; } m_sendChannels[channelSlot] = chan; } } return chan; } // received a library message while Connected internal void ReceivedLibraryMessage(NetMessageType tp, int ptr, int payloadLength) { m_peer.VerifyNetworkThread(); float now = (float)NetTime.Now; switch (tp) { case NetMessageType.Connect: m_peer.LogDebug("Received handshake message (" + tp + ") despite connection being in place"); break; case NetMessageType.ConnectResponse: // handshake message must have been lost HandleConnectResponse(now, tp, ptr, payloadLength); break; case NetMessageType.ConnectionEstablished: // do nothing, all's well break; case NetMessageType.LibraryError: m_peer.ThrowOrLog("LibraryError received by ReceivedLibraryMessage; this usually indicates a malformed message"); break; case NetMessageType.Disconnect: NetIncomingMessage msg = m_peer.SetupReadHelperMessage(ptr, payloadLength); m_disconnectRequested = true; m_disconnectMessage = msg.ReadString(); m_disconnectReqSendBye = false; //ExecuteDisconnect(msg.ReadString(), false); break; case NetMessageType.Acknowledge: for (int i = 0; i < payloadLength; i+=3) { NetMessageType acktp = (NetMessageType)m_peer.m_receiveBuffer[ptr++]; // netmessagetype int seqNr = m_peer.m_receiveBuffer[ptr++]; seqNr |= (m_peer.m_receiveBuffer[ptr++] << 8); // need to enqueue this and handle it in the netconnection heartbeat; so be able to send resends together with normal sends m_queuedIncomingAcks.Enqueue(new NetTuple(acktp, seqNr)); } break; case NetMessageType.Ping: int pingNr = m_peer.m_receiveBuffer[ptr++]; SendPong(pingNr); break; case NetMessageType.Pong: NetIncomingMessage pmsg = m_peer.SetupReadHelperMessage(ptr, payloadLength); int pongNr = pmsg.ReadByte(); float remoteSendTime = pmsg.ReadSingle(); ReceivedPong(now, pongNr, remoteSendTime); break; case NetMessageType.ExpandMTURequest: SendMTUSuccess(payloadLength); break; case NetMessageType.ExpandMTUSuccess: if (m_peer.Configuration.AutoExpandMTU == false) { m_peer.LogDebug("Received ExpandMTURequest altho AutoExpandMTU is turned off!"); break; } NetIncomingMessage emsg = m_peer.SetupReadHelperMessage(ptr, payloadLength); int size = emsg.ReadInt32(); HandleExpandMTUSuccess(now, size); break; case NetMessageType.NatIntroduction: // Unusual situation where server is actually already known, but got a nat introduction - oh well, lets handle it as usual m_peer.HandleNatIntroduction(ptr); break; default: m_peer.LogWarning("Connection received unhandled library message: " + tp); break; } } internal void ReceivedMessage(NetIncomingMessage msg) { m_peer.VerifyNetworkThread(); NetMessageType tp = msg.m_receivedMessageType; int channelSlot = (int)tp - 1; NetReceiverChannelBase chan = m_receiveChannels[channelSlot]; if (chan == null) chan = CreateReceiverChannel(tp); chan.ReceiveMessage(msg); } private NetReceiverChannelBase CreateReceiverChannel(NetMessageType tp) { m_peer.VerifyNetworkThread(); // create receiver channel NetReceiverChannelBase chan; NetDeliveryMethod method = NetUtility.GetDeliveryMethod(tp); switch (method) { case NetDeliveryMethod.Unreliable: chan = new NetUnreliableUnorderedReceiver(this); break; case NetDeliveryMethod.ReliableOrdered: chan = new NetReliableOrderedReceiver(this, NetConstants.ReliableOrderedWindowSize); break; case NetDeliveryMethod.UnreliableSequenced: chan = new NetUnreliableSequencedReceiver(this); break; case NetDeliveryMethod.ReliableUnordered: chan = new NetReliableUnorderedReceiver(this, NetConstants.ReliableOrderedWindowSize); break; case NetDeliveryMethod.ReliableSequenced: chan = new NetReliableSequencedReceiver(this, NetConstants.ReliableSequencedWindowSize); break; default: throw new NetException("Unhandled NetDeliveryMethod!"); } int channelSlot = (int)tp - 1; NetException.Assert(m_receiveChannels[channelSlot] == null); m_receiveChannels[channelSlot] = chan; return chan; } internal void QueueAck(NetMessageType tp, int sequenceNumber) { m_queuedOutgoingAcks.Enqueue(new NetTuple(tp, sequenceNumber)); } /// /// Zero windowSize indicates that the channel is not yet instantiated (used) /// Negative freeWindowSlots means this amount of messages are currently queued but delayed due to closed window /// public void GetSendQueueInfo(NetDeliveryMethod method, int sequenceChannel, out int windowSize, out int freeWindowSlots) { int channelSlot = (int)method - 1 + sequenceChannel; var chan = m_sendChannels[channelSlot]; if (chan == null) { windowSize = NetUtility.GetWindowSize(method); freeWindowSlots = windowSize; return; } windowSize = chan.WindowSize; freeWindowSlots = chan.GetAllowedSends() - chan.m_queuedSends.Count; return; } public bool CanSendImmediately(NetDeliveryMethod method, int sequenceChannel) { int channelSlot = (int)method - 1 + sequenceChannel; var chan = m_sendChannels[channelSlot]; if (chan == null) return true; return (chan.GetAllowedSends() - chan.m_queuedSends.Count) > 0; } internal void Shutdown(string reason) { ExecuteDisconnect(reason, true); } /// /// Returns a string that represents this object /// public override string ToString() { return "[NetConnection to " + m_remoteEndPoint + "]"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnectionStatistics.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // Uncomment the line below to get statistics in RELEASE builds //#define USE_RELEASE_STATISTICS using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace Lidgren.Network { internal enum MessageResendReason { Delay, HoleInSequence } /// /// Statistics for a NetConnection instance /// public sealed class NetConnectionStatistics { private readonly NetConnection m_connection; internal int m_sentPackets; internal int m_receivedPackets; internal int m_sentMessages; internal int m_receivedMessages; internal int m_receivedFragments; internal int m_sentBytes; internal int m_receivedBytes; internal int m_resentMessagesDueToDelay; internal int m_resentMessagesDueToHole; internal NetConnectionStatistics(NetConnection conn) { m_connection = conn; Reset(); } internal void Reset() { m_sentPackets = 0; m_receivedPackets = 0; m_sentMessages = 0; m_receivedMessages = 0; m_receivedFragments = 0; m_sentBytes = 0; m_receivedBytes = 0; m_resentMessagesDueToDelay = 0; m_resentMessagesDueToHole = 0; } /// /// Gets the number of sent packets for this connection /// public int SentPackets { get { return m_sentPackets; } } /// /// Gets the number of received packets for this connection /// public int ReceivedPackets { get { return m_receivedPackets; } } /// /// Gets the number of sent bytes for this connection /// public int SentBytes { get { return m_sentBytes; } } /// /// Gets the number of received bytes for this connection /// public int ReceivedBytes { get { return m_receivedBytes; } } /// /// Gets the number of resent reliable messages for this connection /// public int ResentMessages { get { return m_resentMessagesDueToHole + m_resentMessagesDueToDelay; } } // public double LastSendRespondedTo { get { return m_connection.m_lastSendRespondedTo; } } #if USE_RELEASE_STATISTICS internal void PacketSent(int numBytes, int numMessages) { NetException.Assert(numBytes > 0 && numMessages > 0); m_sentPackets++; m_sentBytes += numBytes; m_sentMessages += numMessages; } #else [Conditional("DEBUG")] internal void PacketSent(int numBytes, int numMessages) { NetException.Assert(numBytes > 0 && numMessages > 0); m_sentPackets++; m_sentBytes += numBytes; m_sentMessages += numMessages; } #endif #if USE_RELEASE_STATISTICS internal void PacketReceived(int numBytes, int numMessages) { NetException.Assert(numBytes > 0 && numMessages > 0); m_receivedPackets++; m_receivedBytes += numBytes; m_receivedMessages += numMessages; } #else [Conditional("DEBUG")] internal void PacketReceived(int numBytes, int numMessages, int numFragments) { NetException.Assert(numBytes > 0 && numMessages > 0); m_receivedPackets++; m_receivedBytes += numBytes; m_receivedMessages += numMessages; m_receivedFragments += numFragments; } #endif #if USE_RELEASE_STATISTICS internal void MessageResent(MessageResendReason reason) { if (reason == MessageResendReason.Delay) m_resentMessagesDueToDelay++; else m_resentMessagesDueToHole++; } #else [Conditional("DEBUG")] internal void MessageResent(MessageResendReason reason) { if (reason == MessageResendReason.Delay) m_resentMessagesDueToDelay++; else m_resentMessagesDueToHole++; } #endif /// /// Returns a string that represents this object /// public override string ToString() { StringBuilder bdr = new StringBuilder(); //bdr.AppendLine("Average roundtrip time: " + NetTime.ToReadable(m_connection.m_averageRoundtripTime)); bdr.AppendLine("Current MTU: " + m_connection.m_currentMTU); bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets"); bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets"); if (m_resentMessagesDueToDelay > 0) bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay); if (m_resentMessagesDueToHole > 0) bdr.AppendLine("Resent messages (holes): " + m_resentMessagesDueToHole); int numUnsent = 0; int numStored = 0; foreach (NetSenderChannelBase sendChan in m_connection.m_sendChannels) { if (sendChan == null) continue; numUnsent += sendChan.m_queuedSends.Count; var relSendChan = sendChan as NetReliableSenderChannel; if (relSendChan != null) { for (int i = 0; i < relSendChan.m_storedMessages.Length; i++) if (relSendChan.m_storedMessages[i].Message != null) numStored++; } } int numWithheld = 0; foreach (NetReceiverChannelBase recChan in m_connection.m_receiveChannels) { var relRecChan = recChan as NetReliableOrderedReceiver; if (relRecChan != null) { for (int i = 0; i < relRecChan.m_withheldMessages.Length; i++) if (relRecChan.m_withheldMessages[i] != null) numWithheld++; } } bdr.AppendLine("Unsent messages: " + numUnsent); bdr.AppendLine("Stored messages: " + numStored); bdr.AppendLine("Withheld messages: " + numWithheld); return bdr.ToString(); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConnectionStatus.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; namespace Lidgren.Network { /// /// Status for a NetConnection instance /// public enum NetConnectionStatus { /// /// No connection, or attempt, in place /// None, /// /// Connect has been sent; waiting for ConnectResponse /// InitiatedConnect, /// /// Connect was received, but ConnectResponse hasn't been sent yet /// ReceivedInitiation, /// /// Connect was received and ApprovalMessage released to the application; awaiting Approve() or Deny() /// RespondedAwaitingApproval, // We got Connect, released ApprovalMessage /// /// Connect was received and ConnectResponse has been sent; waiting for ConnectionEstablished /// RespondedConnect, // we got Connect, sent ConnectResponse /// /// Connected /// Connected, // we received ConnectResponse (if initiator) or ConnectionEstablished (if passive) /// /// In the process of disconnecting /// Disconnecting, /// /// Disconnected /// Disconnected } } ================================================ FILE: ThirdParty/Lidgren.Network/NetConstants.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; namespace Lidgren.Network { /// /// All the constants used when compiling the library /// internal static class NetConstants { internal const int NumTotalChannels = 99; internal const int NetChannelsPerDeliveryMethod = 32; internal const int NumSequenceNumbers = 1024; internal const int HeaderByteSize = 5; internal const int UnreliableWindowSize = 128; internal const int ReliableOrderedWindowSize = 64; internal const int ReliableSequencedWindowSize = 64; internal const int DefaultWindowSize = 64; internal const int MaxFragmentationGroups = ushort.MaxValue - 1; internal const int UnfragmentedMessageHeaderSize = 5; /// /// Number of channels which needs a sequence number to work /// internal const int NumSequencedChannels = ((int)NetMessageType.UserReliableOrdered1 + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserSequenced1; /// /// Number of reliable channels /// internal const int NumReliableChannels = ((int)NetMessageType.UserReliableOrdered1 + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserReliableUnordered; internal const string ConnResetMessage = "Connection was reset by remote host"; } } ================================================ FILE: ThirdParty/Lidgren.Network/NetDeliveryMethod.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { /// /// How the library deals with resends and handling of late messages /// public enum NetDeliveryMethod : byte { // // Actually a publicly visible subset of NetMessageType // /// /// Indicates an error /// Unknown = 0, /// /// Unreliable, unordered delivery /// Unreliable = 1, /// /// Unreliable delivery, but automatically dropping late messages /// UnreliableSequenced = 2, /// /// Reliable delivery, but unordered /// ReliableUnordered = 34, /// /// Reliable delivery, except for late messages which are dropped /// ReliableSequenced = 35, /// /// Reliable, ordered delivery /// ReliableOrdered = 67, } } ================================================ FILE: ThirdParty/Lidgren.Network/NetException.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Diagnostics; using System.Runtime.Serialization; namespace Lidgren.Network { /// /// Exception thrown in the Lidgren Network Library /// public sealed class NetException : Exception { /// /// NetException constructor /// public NetException() : base() { } /// /// NetException constructor /// public NetException(string message) : base(message) { } /// /// NetException constructor /// public NetException(string message, Exception inner) : base(message, inner) { } /// /// Throws an exception, in DEBUG only, if first parameter is false /// [Conditional("DEBUG")] public static void Assert(bool isOk, string message) { if (!isOk) throw new NetException(message); } /// /// Throws an exception, in DEBUG only, if first parameter is false /// [Conditional("DEBUG")] public static void Assert(bool isOk) { if (!isOk) throw new NetException(); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetFragmentationHelper.cs ================================================ using System; namespace Lidgren.Network { internal static class NetFragmentationHelper { internal static int WriteHeader( byte[] destination, int ptr, int group, int totalBits, int chunkByteSize, int chunkNumber) { uint num1 = (uint)group; while (num1 >= 0x80) { destination[ptr++] = (byte)(num1 | 0x80); num1 = num1 >> 7; } destination[ptr++] = (byte)num1; // write variable length fragment total bits uint num2 = (uint)totalBits; while (num2 >= 0x80) { destination[ptr++] = (byte)(num2 | 0x80); num2 = num2 >> 7; } destination[ptr++] = (byte)num2; // write variable length fragment chunk size uint num3 = (uint)chunkByteSize; while (num3 >= 0x80) { destination[ptr++] = (byte)(num3 | 0x80); num3 = num3 >> 7; } destination[ptr++] = (byte)num3; // write variable length fragment chunk number uint num4 = (uint)chunkNumber; while (num4 >= 0x80) { destination[ptr++] = (byte)(num4 | 0x80); num4 = num4 >> 7; } destination[ptr++] = (byte)num4; return ptr; } internal static int ReadHeader(byte[] buffer, int ptr, out int group, out int totalBits, out int chunkByteSize, out int chunkNumber) { int num1 = 0; int num2 = 0; while (true) { byte num3 = buffer[ptr++]; num1 |= (num3 & 0x7f) << (num2 & 0x1f); num2 += 7; if ((num3 & 0x80) == 0) { group = num1; break; } } num1 = 0; num2 = 0; while (true) { byte num3 = buffer[ptr++]; num1 |= (num3 & 0x7f) << (num2 & 0x1f); num2 += 7; if ((num3 & 0x80) == 0) { totalBits = num1; break; } } num1 = 0; num2 = 0; while (true) { byte num3 = buffer[ptr++]; num1 |= (num3 & 0x7f) << (num2 & 0x1f); num2 += 7; if ((num3 & 0x80) == 0) { chunkByteSize = num1; break; } } num1 = 0; num2 = 0; while (true) { byte num3 = buffer[ptr++]; num1 |= (num3 & 0x7f) << (num2 & 0x1f); num2 += 7; if ((num3 & 0x80) == 0) { chunkNumber = num1; break; } } return ptr; } internal static int GetFragmentationHeaderSize(int groupId, int totalBytes, int chunkByteSize, int numChunks) { int len = 4; // write variable length fragment group id uint num1 = (uint)groupId; while (num1 >= 0x80) { len++; num1 = num1 >> 7; } // write variable length fragment total bits uint num2 = (uint)(totalBytes * 8); while (num2 >= 0x80) { len++; num2 = num2 >> 7; } // write variable length fragment chunk byte size uint num3 = (uint)chunkByteSize; while (num3 >= 0x80) { len++; num3 = num3 >> 7; } // write variable length fragment chunk number uint num4 = (uint)numChunks; while (num4 >= 0x80) { len++; num4 = num4 >> 7; } return len; } internal static int GetBestChunkSize(int group, int totalBytes, int mtu) { int tryChunkSize = mtu - NetConstants.HeaderByteSize - 4; // naive approximation int est = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, totalBytes / tryChunkSize); tryChunkSize = mtu - NetConstants.HeaderByteSize - est; // slightly less naive approximation int headerSize = 0; do { tryChunkSize--; // keep reducing chunk size until it fits within MTU including header int numChunks = totalBytes / tryChunkSize; if (numChunks * tryChunkSize < totalBytes) numChunks++; headerSize = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, numChunks); // 4+ bytes } while (tryChunkSize + headerSize + NetConstants.HeaderByteSize + 1 >= mtu); return tryChunkSize; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetFragmentationInfo.cs ================================================ using System; namespace Lidgren.Network { public sealed class NetFragmentationInfo { public int TotalFragmentCount; public bool[] Received; public int TotalReceived; public int FragmentSize; } } ================================================ FILE: ThirdParty/Lidgren.Network/NetIncomingMessage.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Net; using System.Diagnostics; namespace Lidgren.Network { /// /// Incoming message either sent from a remote peer or generated within the library /// [DebuggerDisplay("Type={MessageType} LengthBits={LengthBits}")] public sealed class NetIncomingMessage : NetBuffer { internal NetIncomingMessageType m_incomingMessageType; internal IPEndPoint m_senderEndPoint; internal NetConnection m_senderConnection; internal int m_sequenceNumber; internal NetMessageType m_receivedMessageType; internal bool m_isFragment; internal double m_receiveTime; /// /// Gets the type of this incoming message /// public NetIncomingMessageType MessageType { get { return m_incomingMessageType; } } /// /// Gets the delivery method this message was sent with (if user data) /// public NetDeliveryMethod DeliveryMethod { get { return NetUtility.GetDeliveryMethod(m_receivedMessageType); } } /// /// Gets the sequence channel this message was sent with (if user data) /// public int SequenceChannel { get { return (int)m_receivedMessageType - (int)NetUtility.GetDeliveryMethod(m_receivedMessageType); } } /// /// IPEndPoint of sender, if any /// public IPEndPoint SenderEndPoint { get { return m_senderEndPoint; } } /// /// NetConnection of sender, if any /// public NetConnection SenderConnection { get { return m_senderConnection; } } /// /// What local time the message was received from the network /// public double ReceiveTime { get { return m_receiveTime; } } internal NetIncomingMessage() { } internal NetIncomingMessage(NetIncomingMessageType tp) { m_incomingMessageType = tp; } internal void Reset() { m_incomingMessageType = NetIncomingMessageType.Error; m_readPosition = 0; m_receivedMessageType = NetMessageType.LibraryError; m_senderConnection = null; m_bitLength = 0; m_isFragment = false; } /// /// Decrypt a message /// /// The encryption algorithm used to encrypt the message /// true on success public bool Decrypt(NetEncryption encryption) { return encryption.Decrypt(this); } /// /// Reads a value, in local time comparable to NetTime.Now, written using WriteTime() /// Must have a connected sender /// public double ReadTime(bool highPrecision) { return ReadTime(m_senderConnection, highPrecision); } /// /// Returns a string that represents this object /// public override string ToString() { return "[NetIncomingMessage #" + m_sequenceNumber + " " + this.LengthBytes + " bytes]"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetIncomingMessageType.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Diagnostics.CodeAnalysis; namespace Lidgren.Network { /// /// The type of a NetIncomingMessage /// [SuppressMessage("Microsoft.Design", "CA1027:MarkEnumsWithFlags")] public enum NetIncomingMessageType { // // library note: values are power-of-two, but they are not flags - it's a convenience for NetPeerConfiguration.DisabledMessageTypes // /// /// Error; this value should never appear /// Error = 0, /// /// Status for a connection changed /// StatusChanged = 1 << 0, // Data (string) /// /// Data sent using SendUnconnectedMessage /// UnconnectedData = 1 << 1, // Data Based on data received /// /// Connection approval is needed /// ConnectionApproval = 1 << 2, // Data /// /// Application data /// Data = 1 << 3, // Data Based on data received /// /// Receipt of delivery /// Receipt = 1 << 4, // Data /// /// Discovery request for a response /// DiscoveryRequest = 1 << 5, // (no data) /// /// Discovery response to a request /// DiscoveryResponse = 1 << 6, // Data /// /// Verbose debug message /// VerboseDebugMessage = 1 << 7, // Data (string) /// /// Debug message /// DebugMessage = 1 << 8, // Data (string) /// /// Warning message /// WarningMessage = 1 << 9, // Data (string) /// /// Error message /// ErrorMessage = 1 << 10, // Data (string) /// /// NAT introduction was successful /// NatIntroductionSuccess = 1 << 11, // Data (as passed to master server) /// /// A roundtrip was measured and NetConnection.AverageRoundtripTime was updated /// ConnectionLatencyUpdated = 1 << 12, // Seconds as a Single } } ================================================ FILE: ThirdParty/Lidgren.Network/NetMessageType.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; namespace Lidgren.Network { internal enum NetMessageType : byte { Unconnected = 0, UserUnreliable = 1, UserSequenced1 = 2, UserSequenced2 = 3, UserSequenced3 = 4, UserSequenced4 = 5, UserSequenced5 = 6, UserSequenced6 = 7, UserSequenced7 = 8, UserSequenced8 = 9, UserSequenced9 = 10, UserSequenced10 = 11, UserSequenced11 = 12, UserSequenced12 = 13, UserSequenced13 = 14, UserSequenced14 = 15, UserSequenced15 = 16, UserSequenced16 = 17, UserSequenced17 = 18, UserSequenced18 = 19, UserSequenced19 = 20, UserSequenced20 = 21, UserSequenced21 = 22, UserSequenced22 = 23, UserSequenced23 = 24, UserSequenced24 = 25, UserSequenced25 = 26, UserSequenced26 = 27, UserSequenced27 = 28, UserSequenced28 = 29, UserSequenced29 = 30, UserSequenced30 = 31, UserSequenced31 = 32, UserSequenced32 = 33, UserReliableUnordered = 34, UserReliableSequenced1 = 35, UserReliableSequenced2 = 36, UserReliableSequenced3 = 37, UserReliableSequenced4 = 38, UserReliableSequenced5 = 39, UserReliableSequenced6 = 40, UserReliableSequenced7 = 41, UserReliableSequenced8 = 42, UserReliableSequenced9 = 43, UserReliableSequenced10 = 44, UserReliableSequenced11 = 45, UserReliableSequenced12 = 46, UserReliableSequenced13 = 47, UserReliableSequenced14 = 48, UserReliableSequenced15 = 49, UserReliableSequenced16 = 50, UserReliableSequenced17 = 51, UserReliableSequenced18 = 52, UserReliableSequenced19 = 53, UserReliableSequenced20 = 54, UserReliableSequenced21 = 55, UserReliableSequenced22 = 56, UserReliableSequenced23 = 57, UserReliableSequenced24 = 58, UserReliableSequenced25 = 59, UserReliableSequenced26 = 60, UserReliableSequenced27 = 61, UserReliableSequenced28 = 62, UserReliableSequenced29 = 63, UserReliableSequenced30 = 64, UserReliableSequenced31 = 65, UserReliableSequenced32 = 66, UserReliableOrdered1 = 67, UserReliableOrdered2 = 68, UserReliableOrdered3 = 69, UserReliableOrdered4 = 70, UserReliableOrdered5 = 71, UserReliableOrdered6 = 72, UserReliableOrdered7 = 73, UserReliableOrdered8 = 74, UserReliableOrdered9 = 75, UserReliableOrdered10 = 76, UserReliableOrdered11 = 77, UserReliableOrdered12 = 78, UserReliableOrdered13 = 79, UserReliableOrdered14 = 80, UserReliableOrdered15 = 81, UserReliableOrdered16 = 82, UserReliableOrdered17 = 83, UserReliableOrdered18 = 84, UserReliableOrdered19 = 85, UserReliableOrdered20 = 86, UserReliableOrdered21 = 87, UserReliableOrdered22 = 88, UserReliableOrdered23 = 89, UserReliableOrdered24 = 90, UserReliableOrdered25 = 91, UserReliableOrdered26 = 92, UserReliableOrdered27 = 93, UserReliableOrdered28 = 94, UserReliableOrdered29 = 95, UserReliableOrdered30 = 96, UserReliableOrdered31 = 97, UserReliableOrdered32 = 98, Unused1 = 99, Unused2 = 100, Unused3 = 101, Unused4 = 102, Unused5 = 103, Unused6 = 104, Unused7 = 105, Unused8 = 106, Unused9 = 107, Unused10 = 108, Unused11 = 109, Unused12 = 110, Unused13 = 111, Unused14 = 112, Unused15 = 113, Unused16 = 114, Unused17 = 115, Unused18 = 116, Unused19 = 117, Unused20 = 118, Unused21 = 119, Unused22 = 120, Unused23 = 121, Unused24 = 122, Unused25 = 123, Unused26 = 124, Unused27 = 125, Unused28 = 126, Unused29 = 127, LibraryError = 128, Ping = 129, // used for RTT calculation Pong = 130, // used for RTT calculation Connect = 131, ConnectResponse = 132, ConnectionEstablished = 133, Acknowledge = 134, Disconnect = 135, Discovery = 136, DiscoveryResponse = 137, NatPunchMessage = 138, // send between peers NatIntroduction = 139, // send to master server ExpandMTURequest = 140, ExpandMTUSuccess = 141, } } ================================================ FILE: ThirdParty/Lidgren.Network/NetNatIntroduction.cs ================================================ using System; using System.Collections.Generic; using System.Net; namespace Lidgren.Network { public partial class NetPeer { /// /// Send NetIntroduction to hostExternal and clientExternal; introducing client to host /// public void Introduce( IPEndPoint hostInternal, IPEndPoint hostExternal, IPEndPoint clientInternal, IPEndPoint clientExternal, string token) { // send message to client NetOutgoingMessage msg = CreateMessage(10 + token.Length + 1); msg.m_messageType = NetMessageType.NatIntroduction; msg.Write((byte)0); msg.Write(hostInternal); msg.Write(hostExternal); msg.Write(token); m_unsentUnconnectedMessages.Enqueue(new NetTuple(clientExternal, msg)); // send message to host msg = CreateMessage(10 + token.Length + 1); msg.m_messageType = NetMessageType.NatIntroduction; msg.Write((byte)1); msg.Write(clientInternal); msg.Write(clientExternal); msg.Write(token); m_unsentUnconnectedMessages.Enqueue(new NetTuple(hostExternal, msg)); } /// /// Called when host/client receives a NatIntroduction message from a master server /// internal void HandleNatIntroduction(int ptr) { VerifyNetworkThread(); // read intro NetIncomingMessage tmp = SetupReadHelperMessage(ptr, 1000); // never mind length byte hostByte = tmp.ReadByte(); IPEndPoint remoteInternal = tmp.ReadIPEndPoint(); IPEndPoint remoteExternal = tmp.ReadIPEndPoint(); string token = tmp.ReadString(); bool isHost = (hostByte != 0); LogDebug("NAT introduction received; we are designated " + (isHost ? "host" : "client")); NetOutgoingMessage punch; if (!isHost && m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess) == false) return; // no need to punch - we're not listening for nat intros! // send internal punch punch = CreateMessage(1); punch.m_messageType = NetMessageType.NatPunchMessage; punch.Write(hostByte); punch.Write(token); m_unsentUnconnectedMessages.Enqueue(new NetTuple(remoteInternal, punch)); LogDebug("NAT punch sent to " + remoteInternal); // send external punch punch = CreateMessage(1); punch.m_messageType = NetMessageType.NatPunchMessage; punch.Write(hostByte); punch.Write(token); m_unsentUnconnectedMessages.Enqueue(new NetTuple(remoteExternal, punch)); LogDebug("NAT punch sent to " + remoteExternal); } /// /// Called when receiving a NatPunchMessage from a remote endpoint /// private void HandleNatPunch(int ptr, IPEndPoint senderEndPoint) { NetIncomingMessage tmp = SetupReadHelperMessage(ptr, 1000); // never mind length byte fromHostByte = tmp.ReadByte(); if (fromHostByte == 0) { // it's from client LogDebug("NAT punch received from " + senderEndPoint + " we're host, so we ignore this"); return; // don't alert hosts about nat punch successes; only clients } string token = tmp.ReadString(); LogDebug("NAT punch received from " + senderEndPoint + " we're client, so we've succeeded - token is " + token); // // Release punch success to client; enabling him to Connect() to msg.SenderIPEndPoint if token is ok // NetIncomingMessage punchSuccess = CreateIncomingMessage(NetIncomingMessageType.NatIntroductionSuccess, 10); punchSuccess.m_senderEndPoint = senderEndPoint; punchSuccess.Write(token); ReleaseMessage(punchSuccess); // send a return punch just for good measure var punch = CreateMessage(1); punch.m_messageType = NetMessageType.NatPunchMessage; punch.Write((byte)0); punch.Write(token); m_unsentUnconnectedMessages.Enqueue(new NetTuple(senderEndPoint, punch)); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetOutgoingMessage.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Diagnostics; namespace Lidgren.Network { /// /// Outgoing message used to send data to remote peer(s) /// [DebuggerDisplay("LengthBits={LengthBits}")] public sealed class NetOutgoingMessage : NetBuffer { internal NetMessageType m_messageType; internal bool m_isSent; internal int m_recyclingCount; internal int m_fragmentGroup; // which group of fragments ths belongs to internal int m_fragmentGroupTotalBits; // total number of bits in this group internal int m_fragmentChunkByteSize; // size, in bytes, of every chunk but the last one internal int m_fragmentChunkNumber; // which number chunk this is, starting with 0 internal NetOutgoingMessage() { } internal void Reset() { m_messageType = NetMessageType.LibraryError; m_bitLength = 0; m_isSent = false; m_recyclingCount = 0; m_fragmentGroup = 0; } internal int Encode(byte[] intoBuffer, int ptr, int sequenceNumber) { // 8 bits - NetMessageType // 1 bit - Fragment? // 15 bits - Sequence number // 16 bits - Payload length in bits intoBuffer[ptr++] = (byte)m_messageType; byte low = (byte)((sequenceNumber << 1) | (m_fragmentGroup == 0 ? 0 : 1)); intoBuffer[ptr++] = low; intoBuffer[ptr++] = (byte)(sequenceNumber >> 7); if (m_fragmentGroup == 0) { intoBuffer[ptr++] = (byte)m_bitLength; intoBuffer[ptr++] = (byte)(m_bitLength >> 8); int byteLen = NetUtility.BytesToHoldBits(m_bitLength); if (byteLen > 0) { Buffer.BlockCopy(m_data, 0, intoBuffer, ptr, byteLen); ptr += byteLen; } } else { int wasPtr = ptr; intoBuffer[ptr++] = (byte)m_bitLength; intoBuffer[ptr++] = (byte)(m_bitLength >> 8); // // write fragmentation header // ptr = NetFragmentationHelper.WriteHeader(intoBuffer, ptr, m_fragmentGroup, m_fragmentGroupTotalBits, m_fragmentChunkByteSize, m_fragmentChunkNumber); int hdrLen = ptr - wasPtr - 2; // update length int realBitLength = m_bitLength + (hdrLen * 8); intoBuffer[wasPtr] = (byte)realBitLength; intoBuffer[wasPtr + 1] = (byte)(realBitLength >> 8); int byteLen = NetUtility.BytesToHoldBits(m_bitLength); if (byteLen > 0) { Buffer.BlockCopy(m_data, (int)(m_fragmentChunkNumber * m_fragmentChunkByteSize), intoBuffer, ptr, byteLen); ptr += byteLen; } } NetException.Assert(ptr > 0); return ptr; } internal int GetEncodedSize() { int retval = NetConstants.UnfragmentedMessageHeaderSize; // regular headers if (m_fragmentGroup != 0) retval += NetFragmentationHelper.GetFragmentationHeaderSize(m_fragmentGroup, m_fragmentGroupTotalBits / 8, m_fragmentChunkByteSize, m_fragmentChunkNumber); retval += this.LengthBytes; return retval; } /// /// Encrypt this message using the provided algorithm; no more writing can be done before sending it or the message will be corrupt! /// public bool Encrypt(NetEncryption encryption) { return encryption.Encrypt(this); } /// /// Returns a string that represents this object /// public override string ToString() { if (m_isSent) return "[NetOutgoingMessage " + m_messageType + " " + this.LengthBytes + " bytes]"; return "[NetOutgoingMessage " + this.LengthBytes + " bytes]"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.Discovery.cs ================================================ using System; using System.Net; namespace Lidgren.Network { public partial class NetPeer { /// /// Emit a discovery signal to all hosts on your subnet /// public void DiscoverLocalPeers(int serverPort) { NetOutgoingMessage om = CreateMessage(0); om.m_messageType = NetMessageType.Discovery; m_unsentUnconnectedMessages.Enqueue(new NetTuple(new IPEndPoint(IPAddress.Broadcast, serverPort), om)); } /// /// Emit a discovery signal to a single known host /// public bool DiscoverKnownPeer(string host, int serverPort) { IPAddress address = NetUtility.Resolve(host); if (address == null) return false; DiscoverKnownPeer(new IPEndPoint(address, serverPort)); return true; } /// /// Emit a discovery signal to a single known host /// public void DiscoverKnownPeer(IPEndPoint endPoint) { NetOutgoingMessage om = CreateMessage(0); om.m_messageType = NetMessageType.Discovery; m_unsentUnconnectedMessages.Enqueue(new NetTuple(endPoint, om)); } /// /// Send a discovery response message /// public void SendDiscoveryResponse(NetOutgoingMessage msg, IPEndPoint recipient) { if (recipient == null) throw new ArgumentNullException("recipient"); if (msg == null) msg = CreateMessage(0); else if (msg.m_isSent) throw new NetException("Message has already been sent!"); if (msg.LengthBytes >= m_configuration.MaximumTransmissionUnit) throw new NetException("Cannot send discovery message larger than MTU (currently " + m_configuration.MaximumTransmissionUnit + " bytes)"); msg.m_messageType = NetMessageType.DiscoveryResponse; m_unsentUnconnectedMessages.Enqueue(new NetTuple(recipient, msg)); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.Fragmentation.cs ================================================ using System; using System.Threading; using System.Collections.Generic; namespace Lidgren.Network { internal class ReceivedFragmentGroup { //public float LastReceived; public byte[] Data; public NetBitVector ReceivedChunks; } public partial class NetPeer { private int m_lastUsedFragmentGroup; private Dictionary> m_receivedFragmentGroups; // on user thread private NetSendResult SendFragmentedMessage(NetOutgoingMessage msg, IList recipients, NetDeliveryMethod method, int sequenceChannel) { // Note: this group id is PER SENDING/NetPeer; ie. same id is sent to all recipients; // this should be ok however; as long as recipients differentiate between same id but different sender int group = Interlocked.Increment(ref m_lastUsedFragmentGroup); if (group >= NetConstants.MaxFragmentationGroups) { // @TODO: not thread safe; but in practice probably not an issue m_lastUsedFragmentGroup = 1; group = 1; } msg.m_fragmentGroup = group; // do not send msg; but set fragmentgroup in case user tries to recycle it immediately // create fragmentation specifics int totalBytes = msg.LengthBytes; // determine minimum mtu for all recipients int mtu = GetMTU(recipients); int bytesPerChunk = NetFragmentationHelper.GetBestChunkSize(group, totalBytes, mtu); int numChunks = totalBytes / bytesPerChunk; if (numChunks * bytesPerChunk < totalBytes) numChunks++; NetSendResult retval = NetSendResult.Sent; int bitsPerChunk = bytesPerChunk * 8; int bitsLeft = msg.LengthBits; for (int i = 0; i < numChunks; i++) { NetOutgoingMessage chunk = CreateMessage(0); chunk.m_bitLength = (bitsLeft > bitsPerChunk ? bitsPerChunk : bitsLeft); chunk.m_data = msg.m_data; chunk.m_fragmentGroup = group; chunk.m_fragmentGroupTotalBits = totalBytes * 8; chunk.m_fragmentChunkByteSize = bytesPerChunk; chunk.m_fragmentChunkNumber = i; NetException.Assert(chunk.m_bitLength != 0); NetException.Assert(chunk.GetEncodedSize() < mtu); Interlocked.Add(ref chunk.m_recyclingCount, recipients.Count); foreach (NetConnection recipient in recipients) { var res = recipient.EnqueueMessage(chunk, method, sequenceChannel); if ((int)res > (int)retval) retval = res; // return "worst" result } bitsLeft -= bitsPerChunk; } return retval; } private void HandleReleasedFragment(NetIncomingMessage im) { VerifyNetworkThread(); // // read fragmentation header and combine fragments // int group; int totalBits; int chunkByteSize; int chunkNumber; int ptr = NetFragmentationHelper.ReadHeader( im.m_data, 0, out group, out totalBits, out chunkByteSize, out chunkNumber ); NetException.Assert(im.LengthBytes > ptr); NetException.Assert(group > 0); NetException.Assert(totalBits > 0); NetException.Assert(chunkByteSize > 0); int totalBytes = NetUtility.BytesToHoldBits((int)totalBits); int totalNumChunks = totalBytes / chunkByteSize; if (totalNumChunks * chunkByteSize < totalBytes) totalNumChunks++; NetException.Assert(chunkNumber < totalNumChunks); if (chunkNumber >= totalNumChunks) { LogWarning("Index out of bounds for chunk " + chunkNumber + " (total chunks " + totalNumChunks + ")"); return; } Dictionary groups; if (!m_receivedFragmentGroups.TryGetValue(im.SenderConnection, out groups)) { groups = new Dictionary(); m_receivedFragmentGroups[im.SenderConnection] = groups; } ReceivedFragmentGroup info; if (!groups.TryGetValue(group, out info)) { info = new ReceivedFragmentGroup(); info.Data = new byte[totalBytes]; info.ReceivedChunks = new NetBitVector(totalNumChunks); groups[group] = info; } info.ReceivedChunks[chunkNumber] = true; //info.LastReceived = (float)NetTime.Now; // copy to data int offset = (chunkNumber * chunkByteSize); Buffer.BlockCopy(im.m_data, ptr, info.Data, offset, im.LengthBytes - ptr); int cnt = info.ReceivedChunks.Count(); //LogVerbose("Found fragment #" + chunkNumber + " in group " + group + " offset " + offset + " of total bits " + totalBits + " (total chunks done " + cnt + ")"); LogVerbose("Received fragment " + chunkNumber + " of " + totalNumChunks + " (" + cnt + " chunks received)"); if (info.ReceivedChunks.Count() == totalNumChunks) { // Done! Transform this incoming message im.m_data = info.Data; im.m_bitLength = (int)totalBits; im.m_isFragment = false; LogVerbose("Fragment group #" + group + " fully received in " + totalNumChunks + " chunks (" + totalBits + " bits)"); groups.Remove(group); ReleaseMessage(im); } else { // data has been copied; recycle this incoming message Recycle(im); } return; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.Internal.cs ================================================ #if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE #define IS_MAC_AVAILABLE #endif using System; using System.Net; using System.Threading; using System.Diagnostics; using System.Security.Cryptography; using System.Net.Sockets; using System.Collections.Generic; namespace Lidgren.Network { public partial class NetPeer { private NetPeerStatus m_status; private Thread m_networkThread; private Socket m_socket; internal byte[] m_sendBuffer; internal byte[] m_receiveBuffer; internal NetIncomingMessage m_readHelperMessage; private EndPoint m_senderRemote; private object m_initializeLock = new object(); private uint m_frameCounter; private double m_lastHeartbeat; private double m_lastSocketBind = float.MinValue; private NetUPnP m_upnp; internal readonly NetPeerConfiguration m_configuration; private readonly NetQueue m_releasedIncomingMessages; internal readonly NetQueue> m_unsentUnconnectedMessages; internal Dictionary m_handshakes; internal readonly NetPeerStatistics m_statistics; internal long m_uniqueIdentifier; internal bool m_executeFlushSendQueue; private AutoResetEvent m_messageReceivedEvent; private List> m_receiveCallbacks; /// /// Gets the socket, if Start() has been called /// public Socket Socket { get { return m_socket; } } /// /// Call this to register a callback for when a new message arrives /// public void RegisterReceivedCallback(SendOrPostCallback callback, SynchronizationContext syncContext = null) { if (syncContext == null) syncContext = SynchronizationContext.Current; if (syncContext == null) throw new NetException("Need a SynchronizationContext to register callback on correct thread!"); if (m_receiveCallbacks == null) m_receiveCallbacks = new List>(); m_receiveCallbacks.Add(new NetTuple(syncContext, callback)); } /// /// Call this to unregister a callback, but remember to do it in the same synchronization context! /// public void UnregisterReceivedCallback(SendOrPostCallback callback) { if (m_receiveCallbacks == null) return; // remove all callbacks regardless of sync context RestartRemoveCallbacks: for (int i = 0; i < m_receiveCallbacks.Count; i++) { if (m_receiveCallbacks[i].Item2.Equals(callback)) { m_receiveCallbacks.RemoveAt(i); goto RestartRemoveCallbacks; } } if (m_receiveCallbacks.Count < 1) m_receiveCallbacks = null; } internal void ReleaseMessage(NetIncomingMessage msg) { NetException.Assert(msg.m_incomingMessageType != NetIncomingMessageType.Error); if (msg.m_isFragment) { HandleReleasedFragment(msg); return; } m_releasedIncomingMessages.Enqueue(msg); if (m_messageReceivedEvent != null) m_messageReceivedEvent.Set(); if (m_receiveCallbacks != null) { foreach (var tuple in m_receiveCallbacks) { try { tuple.Item1.Post(tuple.Item2, this); } catch (Exception ex) { LogWarning("Receive callback exception:" + ex); } } } } private void BindSocket(bool reBind) { double now = NetTime.Now; if (now - m_lastSocketBind < 1.0) { LogDebug("Suppressed socket rebind; last bound " + (now - m_lastSocketBind) + " seconds ago"); return; // only allow rebind once every second } m_lastSocketBind = now; if (m_socket == null) m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); if (reBind) m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, (int)1); m_socket.ReceiveBufferSize = m_configuration.ReceiveBufferSize; m_socket.SendBufferSize = m_configuration.SendBufferSize; m_socket.Blocking = false; var ep = (EndPoint)new IPEndPoint(m_configuration.LocalAddress, reBind ? m_listenPort : m_configuration.Port); m_socket.Bind(ep); try { const uint IOC_IN = 0x80000000; const uint IOC_VENDOR = 0x18000000; uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12; m_socket.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null); } catch { // ignore; SIO_UDP_CONNRESET not supported on this platform } IPEndPoint boundEp = m_socket.LocalEndPoint as IPEndPoint; LogDebug("Socket bound to " + boundEp + ": " + m_socket.IsBound); m_listenPort = boundEp.Port; } private void InitializeNetwork() { lock (m_initializeLock) { m_configuration.Lock(); if (m_status == NetPeerStatus.Running) return; if (m_configuration.m_enableUPnP) m_upnp = new NetUPnP(this); InitializePools(); m_releasedIncomingMessages.Clear(); m_unsentUnconnectedMessages.Clear(); m_handshakes.Clear(); // bind to socket BindSocket(false); m_receiveBuffer = new byte[m_configuration.ReceiveBufferSize]; m_sendBuffer = new byte[m_configuration.SendBufferSize]; m_readHelperMessage = new NetIncomingMessage(NetIncomingMessageType.Error); m_readHelperMessage.m_data = m_receiveBuffer; byte[] macBytes = new byte[8]; MWCRandom.Instance.NextBytes(macBytes); #if IS_MAC_AVAILABLE try { System.Net.NetworkInformation.PhysicalAddress pa = NetUtility.GetMacAddress(); if (pa != null) { macBytes = pa.GetAddressBytes(); LogVerbose("Mac address is " + NetUtility.ToHexString(macBytes)); } else { LogWarning("Failed to get Mac address"); } } catch (NotSupportedException) { // not supported; lets just keep the random bytes set above } #endif IPEndPoint boundEp = m_socket.LocalEndPoint as IPEndPoint; byte[] epBytes = BitConverter.GetBytes(boundEp.GetHashCode()); byte[] combined = new byte[epBytes.Length + macBytes.Length]; Array.Copy(epBytes, 0, combined, 0, epBytes.Length); Array.Copy(macBytes, 0, combined, epBytes.Length, macBytes.Length); m_uniqueIdentifier = BitConverter.ToInt64(NetUtility.CreateSHA1Hash(combined), 0); m_status = NetPeerStatus.Running; } } private void NetworkLoop() { VerifyNetworkThread(); LogDebug("Network thread started"); // // Network loop // do { try { Heartbeat(); } catch (Exception ex) { LogWarning(ex.ToString()); } } while (m_status == NetPeerStatus.Running); // // perform shutdown // ExecutePeerShutdown(); } private void ExecutePeerShutdown() { VerifyNetworkThread(); LogDebug("Shutting down..."); // disconnect and make one final heartbeat var list = new List(m_handshakes.Count + m_connections.Count); lock (m_connections) { foreach (var conn in m_connections) if (conn != null) list.Add(conn); lock (m_handshakes) { foreach (var hs in m_handshakes.Values) if (hs != null) list.Add(hs); // shut down connections foreach (NetConnection conn in list) conn.Shutdown(m_shutdownReason); } } FlushDelayedPackets(); // one final heartbeat, will send stuff and do disconnect Heartbeat(); Thread.Sleep(10); lock (m_initializeLock) { try { if (m_socket != null) { try { m_socket.Shutdown(SocketShutdown.Receive); } catch(Exception ex) { LogDebug("Socket.Shutdown exception: " + ex.ToString()); } try { m_socket.Close(2); // 2 seconds timeout } catch (Exception ex) { LogDebug("Socket.Close exception: " + ex.ToString()); } } } finally { m_socket = null; m_status = NetPeerStatus.NotRunning; LogDebug("Shutdown complete"); // wake up any threads waiting for server shutdown if (m_messageReceivedEvent != null) m_messageReceivedEvent.Set(); } m_lastSocketBind = float.MinValue; m_receiveBuffer = null; m_sendBuffer = null; m_unsentUnconnectedMessages.Clear(); m_connections.Clear(); m_connectionLookup.Clear(); m_handshakes.Clear(); } return; } private void Heartbeat() { VerifyNetworkThread(); double dnow = NetTime.Now; float now = (float)dnow; double delta = dnow - m_lastHeartbeat; int maxCHBpS = 1250 - m_connections.Count; if (maxCHBpS < 250) maxCHBpS = 250; if (delta > (1.0 / (double)maxCHBpS) || delta < 0.0) // max connection heartbeats/second max { m_frameCounter++; m_lastHeartbeat = dnow; // do handshake heartbeats if ((m_frameCounter % 3) == 0) { foreach (var kvp in m_handshakes) { NetConnection conn = kvp.Value as NetConnection; #if DEBUG // sanity check if (kvp.Key != kvp.Key) LogWarning("Sanity fail! Connection in handshake list under wrong key!"); #endif conn.UnconnectedHeartbeat(now); if (conn.m_status == NetConnectionStatus.Connected || conn.m_status == NetConnectionStatus.Disconnected) { #if DEBUG // sanity check if (conn.m_status == NetConnectionStatus.Disconnected && m_handshakes.ContainsKey(conn.RemoteEndPoint)) { LogWarning("Sanity fail! Handshakes list contained disconnected connection!"); m_handshakes.Remove(conn.RemoteEndPoint); } #endif break; // collection has been modified } } } #if DEBUG SendDelayedPackets(); #endif // update m_executeFlushSendQueue if (m_configuration.m_autoFlushSendQueue) m_executeFlushSendQueue = true; // do connection heartbeats lock (m_connections) { foreach (NetConnection conn in m_connections) { conn.Heartbeat(now, m_frameCounter); if (conn.m_status == NetConnectionStatus.Disconnected) { // // remove connection // m_connections.Remove(conn); m_connectionLookup.Remove(conn.RemoteEndPoint); break; // can't continue iteration here } } } m_executeFlushSendQueue = false; // send unsent unconnected messages NetTuple unsent; while (m_unsentUnconnectedMessages.TryDequeue(out unsent)) { NetOutgoingMessage om = unsent.Item2; bool connReset; int len = om.Encode(m_sendBuffer, 0, 0); SendPacket(len, unsent.Item1, 1, out connReset); Interlocked.Decrement(ref om.m_recyclingCount); if (om.m_recyclingCount <= 0) Recycle(om); } } // // read from socket // if (m_socket == null) return; if (!m_socket.Poll(1000, SelectMode.SelectRead)) // wait up to 1 ms for data to arrive return; //if (m_socket == null || m_socket.Available < 1) // return; // update now dnow = NetTime.Now; now = (float)dnow; do { int bytesReceived = 0; try { bytesReceived = m_socket.ReceiveFrom(m_receiveBuffer, 0, m_receiveBuffer.Length, SocketFlags.None, ref m_senderRemote); } catch (SocketException sx) { switch (sx.SocketErrorCode) { case SocketError.ConnectionReset: // connection reset by peer, aka connection forcibly closed aka "ICMP port unreachable" // we should shut down the connection; but m_senderRemote seemingly cannot be trusted, so which connection should we shut down?! // So, what to do? LogWarning("ConnectionReset"); return; case SocketError.NotConnected: // socket is unbound; try to rebind it (happens on mobile when process goes to sleep) BindSocket(true); return; default: LogWarning("Socket exception: " + sx.ToString()); return; } } if (bytesReceived < NetConstants.HeaderByteSize) return; //LogVerbose("Received " + bytesReceived + " bytes"); IPEndPoint ipsender = (IPEndPoint)m_senderRemote; if (m_upnp != null && now < m_upnp.m_discoveryResponseDeadline && bytesReceived > 32) { // is this an UPnP response? string resp = System.Text.Encoding.ASCII.GetString(m_receiveBuffer, 0, bytesReceived); if (resp.Contains("upnp:rootdevice") || resp.Contains("UPnP/1.0")) { try { resp = resp.Substring(resp.ToLower().IndexOf("location:") + 9); resp = resp.Substring(0, resp.IndexOf("\r")).Trim(); m_upnp.ExtractServiceUrl(resp); return; } catch (Exception ex) { LogDebug("Failed to parse UPnP response: " + ex.ToString()); // don't try to parse this packet further return; } } } NetConnection sender = null; m_connectionLookup.TryGetValue(ipsender, out sender); // // parse packet into messages // int numMessages = 0; int numFragments = 0; int ptr = 0; while ((bytesReceived - ptr) >= NetConstants.HeaderByteSize) { // decode header // 8 bits - NetMessageType // 1 bit - Fragment? // 15 bits - Sequence number // 16 bits - Payload length in bits numMessages++; NetMessageType tp = (NetMessageType)m_receiveBuffer[ptr++]; byte low = m_receiveBuffer[ptr++]; byte high = m_receiveBuffer[ptr++]; bool isFragment = ((low & 1) == 1); ushort sequenceNumber = (ushort)((low >> 1) | (((int)high) << 7)); numFragments++; ushort payloadBitLength = (ushort)(m_receiveBuffer[ptr++] | (m_receiveBuffer[ptr++] << 8)); int payloadByteLength = NetUtility.BytesToHoldBits(payloadBitLength); if (bytesReceived - ptr < payloadByteLength) { LogWarning("Malformed packet; stated payload length " + payloadByteLength + ", remaining bytes " + (bytesReceived - ptr)); return; } if (tp >= NetMessageType.Unused1 && tp <= NetMessageType.Unused29) { ThrowOrLog("Unexpected NetMessageType: " + tp); return; } try { if (tp >= NetMessageType.LibraryError) { if (sender != null) sender.ReceivedLibraryMessage(tp, ptr, payloadByteLength); else ReceivedUnconnectedLibraryMessage(dnow, ipsender, tp, ptr, payloadByteLength); } else { if (sender == null && !m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.UnconnectedData)) return; // dropping unconnected message since it's not enabled NetIncomingMessage msg = CreateIncomingMessage(NetIncomingMessageType.Data, payloadByteLength); msg.m_isFragment = isFragment; msg.m_receiveTime = dnow; msg.m_sequenceNumber = sequenceNumber; msg.m_receivedMessageType = tp; msg.m_senderConnection = sender; msg.m_senderEndPoint = ipsender; msg.m_bitLength = payloadBitLength; Buffer.BlockCopy(m_receiveBuffer, ptr, msg.m_data, 0, payloadByteLength); if (sender != null) { if (tp == NetMessageType.Unconnected) { // We're connected; but we can still send unconnected messages to this peer msg.m_incomingMessageType = NetIncomingMessageType.UnconnectedData; ReleaseMessage(msg); } else { // connected application (non-library) message sender.ReceivedMessage(msg); } } else { // at this point we know the message type is enabled // unconnected application (non-library) message msg.m_incomingMessageType = NetIncomingMessageType.UnconnectedData; ReleaseMessage(msg); } } } catch (Exception ex) { LogError("Packet parsing error: " + ex.Message + " from " + ipsender); } ptr += payloadByteLength; } m_statistics.PacketReceived(bytesReceived, numMessages, numFragments); if (sender != null) sender.m_statistics.PacketReceived(bytesReceived, numMessages, numFragments); } while (m_socket.Available > 0); } /// /// If NetPeerConfiguration.AutoFlushSendQueue() is false; you need to call this to send all messages queued using SendMessage() /// public void FlushSendQueue() { m_executeFlushSendQueue = true; } internal void HandleIncomingDiscoveryRequest(double now, IPEndPoint senderEndPoint, int ptr, int payloadByteLength) { if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DiscoveryRequest)) { NetIncomingMessage dm = CreateIncomingMessage(NetIncomingMessageType.DiscoveryRequest, payloadByteLength); if (payloadByteLength > 0) Buffer.BlockCopy(m_receiveBuffer, ptr, dm.m_data, 0, payloadByteLength); dm.m_receiveTime = now; dm.m_bitLength = payloadByteLength * 8; dm.m_senderEndPoint = senderEndPoint; ReleaseMessage(dm); } } internal void HandleIncomingDiscoveryResponse(double now, IPEndPoint senderEndPoint, int ptr, int payloadByteLength) { if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DiscoveryResponse)) { NetIncomingMessage dr = CreateIncomingMessage(NetIncomingMessageType.DiscoveryResponse, payloadByteLength); if (payloadByteLength > 0) Buffer.BlockCopy(m_receiveBuffer, ptr, dr.m_data, 0, payloadByteLength); dr.m_receiveTime = now; dr.m_bitLength = payloadByteLength * 8; dr.m_senderEndPoint = senderEndPoint; ReleaseMessage(dr); } } private void ReceivedUnconnectedLibraryMessage(double now, IPEndPoint senderEndPoint, NetMessageType tp, int ptr, int payloadByteLength) { NetConnection shake; if (m_handshakes.TryGetValue(senderEndPoint, out shake)) { shake.ReceivedHandshake(now, tp, ptr, payloadByteLength); return; } // // Library message from a completely unknown sender; lets just accept Connect // switch (tp) { case NetMessageType.Discovery: HandleIncomingDiscoveryRequest(now, senderEndPoint, ptr, payloadByteLength); return; case NetMessageType.DiscoveryResponse: HandleIncomingDiscoveryResponse(now, senderEndPoint, ptr, payloadByteLength); return; case NetMessageType.NatIntroduction: if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess)) HandleNatIntroduction(ptr); return; case NetMessageType.NatPunchMessage: if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.NatIntroductionSuccess)) HandleNatPunch(ptr, senderEndPoint); return; case NetMessageType.ConnectResponse: lock (m_handshakes) { foreach (var hs in m_handshakes) { if (hs.Key.Address.Equals(senderEndPoint.Address)) { if (hs.Value.m_connectionInitiator) { // // We are currently trying to connection to XX.XX.XX.XX:Y // ... but we just received a ConnectResponse from XX.XX.XX.XX:Z // Lets just assume the router decided to use this port instead // var hsconn = hs.Value; m_connectionLookup.Remove(hs.Key); m_handshakes.Remove(hs.Key); LogDebug("Detected host port change; rerouting connection to " + senderEndPoint); hsconn.MutateEndPoint(senderEndPoint); m_connectionLookup.Add(senderEndPoint, hsconn); m_handshakes.Add(senderEndPoint, hsconn); hsconn.ReceivedHandshake(now, tp, ptr, payloadByteLength); return; } } } } LogWarning("Received unhandled library message " + tp + " from " + senderEndPoint); return; case NetMessageType.Connect: if (m_configuration.AcceptIncomingConnections == false) { LogWarning("Received Connect, but we're not accepting incoming connections!"); return; } // handle connect // It's someone wanting to shake hands with us! int reservedSlots = m_handshakes.Count + m_connections.Count; if (reservedSlots >= m_configuration.m_maximumConnections) { // server full NetOutgoingMessage full = CreateMessage("Server full"); full.m_messageType = NetMessageType.Disconnect; SendLibrary(full, senderEndPoint); return; } // Ok, start handshake! NetConnection conn = new NetConnection(this, senderEndPoint); conn.m_status = NetConnectionStatus.ReceivedInitiation; m_handshakes.Add(senderEndPoint, conn); conn.ReceivedHandshake(now, tp, ptr, payloadByteLength); return; case NetMessageType.Disconnect: // this is probably ok LogVerbose("Received Disconnect from unconnected source: " + senderEndPoint); return; default: LogWarning("Received unhandled library message " + tp + " from " + senderEndPoint); return; } } internal void AcceptConnection(NetConnection conn) { // LogDebug("Accepted connection " + conn); conn.InitExpandMTU(NetTime.Now); if (m_handshakes.Remove(conn.m_remoteEndPoint) == false) LogWarning("AcceptConnection called but m_handshakes did not contain it!"); lock (m_connections) { if (m_connections.Contains(conn)) { LogWarning("AcceptConnection called but m_connection already contains it!"); } else { m_connections.Add(conn); m_connectionLookup.Add(conn.m_remoteEndPoint, conn); } } } [Conditional("DEBUG")] internal void VerifyNetworkThread() { Thread ct = Thread.CurrentThread; if (Thread.CurrentThread != m_networkThread) throw new NetException("Executing on wrong thread! Should be library system thread (is " + ct.Name + " mId " + ct.ManagedThreadId + ")"); } internal NetIncomingMessage SetupReadHelperMessage(int ptr, int payloadLength) { VerifyNetworkThread(); m_readHelperMessage.m_bitLength = (ptr + payloadLength) * 8; m_readHelperMessage.m_readPosition = (ptr * 8); return m_readHelperMessage; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.LatencySimulation.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ //#define USE_RELEASE_STATISTICS using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Diagnostics; namespace Lidgren.Network { public partial class NetPeer { #if DEBUG private readonly List m_delayedPackets = new List(); private class DelayedPacket { public byte[] Data; public double DelayedUntil; public IPEndPoint Target; } internal void SendPacket(int numBytes, IPEndPoint target, int numMessages, out bool connectionReset) { connectionReset = false; // simulate loss float loss = m_configuration.m_loss; if (loss > 0.0f) { if ((float)MWCRandom.Instance.NextDouble() < loss) { LogVerbose("Sending packet " + numBytes + " bytes - SIMULATED LOST!"); return; // packet "lost" } } m_statistics.PacketSent(numBytes, numMessages); // simulate latency float m = m_configuration.m_minimumOneWayLatency; float r = m_configuration.m_randomOneWayLatency; if (m == 0.0f && r == 0.0f) { // no latency simulation // LogVerbose("Sending packet " + numBytes + " bytes"); bool wasSent = ActuallySendPacket(m_sendBuffer, numBytes, target, out connectionReset); // TODO: handle wasSent == false? if (m_configuration.m_duplicates > 0.0f && MWCRandom.Instance.NextDouble() < m_configuration.m_duplicates) ActuallySendPacket(m_sendBuffer, numBytes, target, out connectionReset); // send it again! return; } int num = 1; if (m_configuration.m_duplicates > 0.0f && MWCRandom.Instance.NextSingle() < m_configuration.m_duplicates) num++; float delay = 0; for (int i = 0; i < num; i++) { delay = m_configuration.m_minimumOneWayLatency + (MWCRandom.Instance.NextSingle() * m_configuration.m_randomOneWayLatency); // Enqueue delayed packet DelayedPacket p = new DelayedPacket(); p.Target = target; p.Data = new byte[numBytes]; Buffer.BlockCopy(m_sendBuffer, 0, p.Data, 0, numBytes); p.DelayedUntil = NetTime.Now + delay; m_delayedPackets.Add(p); } // LogVerbose("Sending packet " + numBytes + " bytes - delayed " + NetTime.ToReadable(delay)); } private void SendDelayedPackets() { if (m_delayedPackets.Count <= 0) return; double now = NetTime.Now; bool connectionReset; RestartDelaySending: foreach (DelayedPacket p in m_delayedPackets) { if (now > p.DelayedUntil) { ActuallySendPacket(p.Data, p.Data.Length, p.Target, out connectionReset); m_delayedPackets.Remove(p); goto RestartDelaySending; } } } private void FlushDelayedPackets() { try { bool connectionReset; foreach (DelayedPacket p in m_delayedPackets) ActuallySendPacket(p.Data, p.Data.Length, p.Target, out connectionReset); m_delayedPackets.Clear(); } catch { } } internal bool ActuallySendPacket(byte[] data, int numBytes, IPEndPoint target, out bool connectionReset) { connectionReset = false; try { // TODO: refactor this check outta here if (target.Address == IPAddress.Broadcast) { // Some networks do not allow // a global broadcast so we use the BroadcastAddress from the configuration // this can be resolved to a local broadcast addresss e.g 192.168.x.255 target.Address = m_configuration.BroadcastAddress; m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); } int bytesSent = m_socket.SendTo(data, 0, numBytes, SocketFlags.None, target); if (numBytes != bytesSent) LogWarning("Failed to send the full " + numBytes + "; only " + bytesSent + " bytes sent in packet!"); // LogDebug("Sent " + numBytes + " bytes"); } catch (SocketException sx) { if (sx.SocketErrorCode == SocketError.WouldBlock) { // send buffer full? LogWarning("Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration"); return false; } if (sx.SocketErrorCode == SocketError.ConnectionReset) { // connection reset by peer, aka connection forcibly closed aka "ICMP port unreachable" connectionReset = true; return false; } LogError("Failed to send packet: " + sx); } catch (Exception ex) { LogError("Failed to send packet: " + ex); } finally { if (target.Address == IPAddress.Broadcast) m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false); } return true; } internal bool SendMTUPacket(int numBytes, IPEndPoint target) { try { m_socket.DontFragment = true; int bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target); if (numBytes != bytesSent) LogWarning("Failed to send the full " + numBytes + "; only " + bytesSent + " bytes sent in packet!"); m_statistics.PacketSent(numBytes, 1); } catch (SocketException sx) { if (sx.SocketErrorCode == SocketError.MessageSize) return false; if (sx.SocketErrorCode == SocketError.WouldBlock) { // send buffer full? LogWarning("Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration"); return true; } if (sx.SocketErrorCode == SocketError.ConnectionReset) return true; LogError("Failed to send packet: (" + sx.SocketErrorCode + ") " + sx); } catch (Exception ex) { LogError("Failed to send packet: " + ex); } finally { m_socket.DontFragment = false; } return true; } #else internal bool SendMTUPacket(int numBytes, IPEndPoint target) { try { m_socket.DontFragment = true; int bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target); if (numBytes != bytesSent) LogWarning("Failed to send the full " + numBytes + "; only " + bytesSent + " bytes sent in packet!"); } catch (SocketException sx) { if (sx.SocketErrorCode == SocketError.MessageSize) return false; if (sx.SocketErrorCode == SocketError.WouldBlock) { // send buffer full? LogWarning("Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration"); return true; } if (sx.SocketErrorCode == SocketError.ConnectionReset) return true; LogError("Failed to send packet: (" + sx.SocketErrorCode + ") " + sx); } catch (Exception ex) { LogError("Failed to send packet: " + ex); } finally { m_socket.DontFragment = false; } return true; } // // Release - just send the packet straight away // internal void SendPacket(int numBytes, IPEndPoint target, int numMessages, out bool connectionReset) { #if USE_RELEASE_STATISTICS m_statistics.PacketSent(numBytes, numMessages); #endif connectionReset = false; try { // TODO: refactor this check outta here if (target.Address == IPAddress.Broadcast) m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); int bytesSent = m_socket.SendTo(m_sendBuffer, 0, numBytes, SocketFlags.None, target); if (numBytes != bytesSent) LogWarning("Failed to send the full " + numBytes + "; only " + bytesSent + " bytes sent in packet!"); } catch (SocketException sx) { if (sx.SocketErrorCode == SocketError.WouldBlock) { // send buffer full? LogWarning("Socket threw exception; would block - send buffer full? Increase in NetPeerConfiguration"); return; } if (sx.SocketErrorCode == SocketError.ConnectionReset) { // connection reset by peer, aka connection forcibly closed aka "ICMP port unreachable" connectionReset = true; return; } LogError("Failed to send packet: " + sx); } catch (Exception ex) { LogError("Failed to send packet: " + ex); } finally { if (target.Address == IPAddress.Broadcast) m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false); } return; } private void FlushDelayedPackets() { } #endif } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.Logging.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System.Diagnostics; namespace Lidgren.Network { public partial class NetPeer { [Conditional("DEBUG")] internal void LogVerbose(string message) { #if __ANDROID__ Android.Util.Log.WriteLine(Android.Util.LogPriority.Verbose, "", message); #endif if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.VerboseDebugMessage)) ReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.VerboseDebugMessage, message)); } [Conditional("DEBUG")] internal void LogDebug(string message) { #if __ANDROID__ Android.Util.Log.WriteLine(Android.Util.LogPriority.Debug, "", message); #endif if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.DebugMessage)) ReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.DebugMessage, message)); } internal void LogWarning(string message) { #if __ANDROID__ Android.Util.Log.WriteLine(Android.Util.LogPriority.Warn, "", message); #endif if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.WarningMessage)) ReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.WarningMessage, message)); } internal void LogError(string message) { #if __ANDROID__ Android.Util.Log.WriteLine(Android.Util.LogPriority.Error, "", message); #endif if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.ErrorMessage)) ReleaseMessage(CreateIncomingMessage(NetIncomingMessageType.ErrorMessage, message)); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.MessagePools.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { public partial class NetPeer { private List m_storagePool; // sorted smallest to largest private NetQueue m_outgoingMessagesPool; private NetQueue m_incomingMessagesPool; internal int m_storagePoolBytes; private void InitializePools() { if (m_configuration.UseMessageRecycling) { m_storagePool = new List(16); m_outgoingMessagesPool = new NetQueue(4); m_incomingMessagesPool = new NetQueue(4); } else { m_storagePool = null; m_outgoingMessagesPool = null; m_incomingMessagesPool = null; } } internal byte[] GetStorage(int minimumCapacityInBytes) { if (m_storagePool == null) return new byte[minimumCapacityInBytes]; lock (m_storagePool) { for (int i = 0; i < m_storagePool.Count; i++) { byte[] retval = m_storagePool[i]; if (retval != null && retval.Length >= minimumCapacityInBytes) { m_storagePool[i] = null; m_storagePoolBytes -= retval.Length; return retval; } } } m_statistics.m_bytesAllocated += minimumCapacityInBytes; return new byte[minimumCapacityInBytes]; } internal void Recycle(byte[] storage) { if (m_storagePool == null || storage == null) return; lock (m_storagePool) { m_storagePoolBytes += storage.Length; int cnt = m_storagePool.Count; for (int i = 0; i < cnt; i++) { if (m_storagePool[i] == null) { m_storagePool[i] = storage; return; } } m_storagePool.Add(storage); } } /// /// Creates a new message for sending /// public NetOutgoingMessage CreateMessage() { return CreateMessage(m_configuration.m_defaultOutgoingMessageCapacity); } /// /// Creates a new message for sending and writes the provided string to it /// public NetOutgoingMessage CreateMessage(string content) { var om = CreateMessage(2 + content.Length); // fair guess om.Write(content); return om; } /// /// Creates a new message for sending /// /// initial capacity in bytes public NetOutgoingMessage CreateMessage(int initialCapacity) { NetOutgoingMessage retval; if (m_outgoingMessagesPool == null || !m_outgoingMessagesPool.TryDequeue(out retval)) retval = new NetOutgoingMessage(); if (initialCapacity > 0) retval.m_data = GetStorage(initialCapacity); return retval; } internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, byte[] useStorageData) { NetIncomingMessage retval; if (m_incomingMessagesPool == null || !m_incomingMessagesPool.TryDequeue(out retval)) retval = new NetIncomingMessage(tp); else retval.m_incomingMessageType = tp; retval.m_data = useStorageData; return retval; } internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, int minimumByteSize) { NetIncomingMessage retval; if (m_incomingMessagesPool == null || !m_incomingMessagesPool.TryDequeue(out retval)) retval = new NetIncomingMessage(tp); else retval.m_incomingMessageType = tp; retval.m_data = GetStorage(minimumByteSize); return retval; } /// /// Recycles a NetIncomingMessage instance for reuse; taking pressure off the garbage collector /// public void Recycle(NetIncomingMessage msg) { if (m_incomingMessagesPool == null) return; NetException.Assert(m_incomingMessagesPool.Contains(msg) == false, "Recyling already recycled message! Thread race?"); byte[] storage = msg.m_data; msg.m_data = null; Recycle(storage); msg.Reset(); m_incomingMessagesPool.Enqueue(msg); } /// /// Recycles a list of NetIncomingMessage instances for reuse; taking pressure off the garbage collector /// public void Recycle(IEnumerable toRecycle) { if (m_incomingMessagesPool == null) return; // first recycle the storage of each message if (m_storagePool != null) { lock (m_storagePool) { foreach (var msg in toRecycle) { var storage = msg.m_data; msg.m_data = null; m_storagePoolBytes += storage.Length; int cnt = m_storagePool.Count; for (int i = 0; i < cnt; i++) { if (m_storagePool[i] == null) { m_storagePool[i] = storage; return; } } msg.Reset(); m_storagePool.Add(storage); } } } // then recycle the message objects m_incomingMessagesPool.Enqueue(toRecycle); } internal void Recycle(NetOutgoingMessage msg) { if (m_outgoingMessagesPool == null) return; NetException.Assert(m_outgoingMessagesPool.Contains(msg) == false, "Recyling already recycled message! Thread race?"); byte[] storage = msg.m_data; msg.m_data = null; // message fragments cannot be recycled // TODO: find a way to recycle large message after all fragments has been acknowledged; or? possibly better just to garbage collect them if (msg.m_fragmentGroup == 0) Recycle(storage); msg.Reset(); m_outgoingMessagesPool.Enqueue(msg); } /// /// Creates an incoming message with the required capacity for releasing to the application /// internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, string text) { NetIncomingMessage retval; if (string.IsNullOrEmpty(text)) { retval = CreateIncomingMessage(tp, 1); retval.Write(string.Empty); return retval; } int numBytes = System.Text.Encoding.UTF8.GetByteCount(text); retval = CreateIncomingMessage(tp, numBytes + (numBytes > 127 ? 2 : 1)); retval.Write(text); return retval; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.Send.cs ================================================ using System; using System.Collections.Generic; using System.Threading; using System.Net; namespace Lidgren.Network { public partial class NetPeer { /// /// Send a message to a specific connection /// /// The message to send /// The recipient connection /// How to deliver the message public NetSendResult SendMessage(NetOutgoingMessage msg, NetConnection recipient, NetDeliveryMethod method) { return SendMessage(msg, recipient, method, 0); } /// /// Send a message to a specific connection /// /// The message to send /// The recipient connection /// How to deliver the message /// Sequence channel within the delivery method public NetSendResult SendMessage(NetOutgoingMessage msg, NetConnection recipient, NetDeliveryMethod method, int sequenceChannel) { if (msg == null) throw new ArgumentNullException("msg"); if (recipient == null) throw new ArgumentNullException("recipient"); if (sequenceChannel >= NetConstants.NetChannelsPerDeliveryMethod) throw new ArgumentOutOfRangeException("sequenceChannel"); NetException.Assert( ((method != NetDeliveryMethod.Unreliable && method != NetDeliveryMethod.ReliableUnordered) || ((method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered) && sequenceChannel == 0)), "Delivery method " + method + " cannot use sequence channels other than 0!" ); NetException.Assert(method != NetDeliveryMethod.Unknown, "Bad delivery method!"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); msg.m_isSent = true; bool suppressFragmentation = (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.UnreliableSequenced) && m_configuration.UnreliableSizeBehaviour != NetUnreliableSizeBehaviour.NormalFragmentation; int len = NetConstants.UnfragmentedMessageHeaderSize + msg.LengthBytes; // headers + length, faster than calling msg.GetEncodedSize if (len <= recipient.m_currentMTU || suppressFragmentation) { Interlocked.Increment(ref msg.m_recyclingCount); return recipient.EnqueueMessage(msg, method, sequenceChannel); } else { // message must be fragmented! if (recipient.m_status != NetConnectionStatus.Connected) return NetSendResult.FailedNotConnected; return SendFragmentedMessage(msg, new NetConnection[] { recipient }, method, sequenceChannel); } } internal static int GetMTU(IList recipients) { int count = recipients.Count; int mtu = int.MaxValue; if (count < 1) { #if DEBUG throw new NetException("GetMTU called with no recipients"); #else // we don't have access to the particular peer, so just use default MTU return NetPeerConfiguration.kDefaultMTU; #endif } for(int i=0;i /// Send a message to a list of connections /// /// The message to send /// The list of recipients to send to /// How to deliver the message /// Sequence channel within the delivery method public void SendMessage(NetOutgoingMessage msg, List recipients, NetDeliveryMethod method, int sequenceChannel) { if (msg == null) throw new ArgumentNullException("msg"); if (recipients == null) throw new ArgumentNullException("recipients"); if (recipients.Count < 1) throw new NetException("recipients must contain at least one item"); if (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.ReliableUnordered) NetException.Assert(sequenceChannel == 0, "Delivery method " + method + " cannot use sequence channels other than 0!"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); int mtu = GetMTU(recipients); msg.m_isSent = true; int len = msg.GetEncodedSize(); if (len <= mtu) { Interlocked.Add(ref msg.m_recyclingCount, recipients.Count); foreach (NetConnection conn in recipients) { if (conn == null) { Interlocked.Decrement(ref msg.m_recyclingCount); continue; } NetSendResult res = conn.EnqueueMessage(msg, method, sequenceChannel); if (res != NetSendResult.Queued && res != NetSendResult.Sent) Interlocked.Decrement(ref msg.m_recyclingCount); } } else { // message must be fragmented! SendFragmentedMessage(msg, recipients, method, sequenceChannel); } return; } /// /// Send a message to an unconnected host /// public void SendUnconnectedMessage(NetOutgoingMessage msg, string host, int port) { if (msg == null) throw new ArgumentNullException("msg"); if (host == null) throw new ArgumentNullException("host"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); if (msg.LengthBytes > m_configuration.MaximumTransmissionUnit) throw new NetException("Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently " + m_configuration.MaximumTransmissionUnit + ")"); IPAddress adr = NetUtility.Resolve(host); if (adr == null) throw new NetException("Failed to resolve " + host); msg.m_messageType = NetMessageType.Unconnected; msg.m_isSent = true; Interlocked.Increment(ref msg.m_recyclingCount); m_unsentUnconnectedMessages.Enqueue(new NetTuple(new IPEndPoint(adr, port), msg)); } /// /// Send a message to an unconnected host /// public void SendUnconnectedMessage(NetOutgoingMessage msg, IPEndPoint recipient) { if (msg == null) throw new ArgumentNullException("msg"); if (recipient == null) throw new ArgumentNullException("recipient"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); if (msg.LengthBytes > m_configuration.MaximumTransmissionUnit) throw new NetException("Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently " + m_configuration.MaximumTransmissionUnit + ")"); msg.m_messageType = NetMessageType.Unconnected; msg.m_isSent = true; Interlocked.Increment(ref msg.m_recyclingCount); m_unsentUnconnectedMessages.Enqueue(new NetTuple(recipient, msg)); } /// /// Send a message to an unconnected host /// public void SendUnconnectedMessage(NetOutgoingMessage msg, IList recipients) { if (msg == null) throw new ArgumentNullException("msg"); if (recipients == null) throw new ArgumentNullException("recipients"); if (recipients.Count < 1) throw new NetException("recipients must contain at least one item"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); if (msg.LengthBytes > m_configuration.MaximumTransmissionUnit) throw new NetException("Unconnected messages too long! Must be shorter than NetConfiguration.MaximumTransmissionUnit (currently " + m_configuration.MaximumTransmissionUnit + ")"); msg.m_messageType = NetMessageType.Unconnected; msg.m_isSent = true; Interlocked.Add(ref msg.m_recyclingCount, recipients.Count); foreach(IPEndPoint ep in recipients) m_unsentUnconnectedMessages.Enqueue(new NetTuple(ep, msg)); } /// /// Send a message to this exact same netpeer (loopback) /// public void SendUnconnectedToSelf(NetOutgoingMessage msg) { if (msg == null) throw new ArgumentNullException("msg"); if (msg.m_isSent) throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently"); msg.m_messageType = NetMessageType.Unconnected; msg.m_isSent = true; if (m_configuration.IsMessageTypeEnabled(NetIncomingMessageType.UnconnectedData) == false) return; // dropping unconnected message since it's not enabled for receiving NetIncomingMessage om = CreateIncomingMessage(NetIncomingMessageType.UnconnectedData, msg.LengthBytes); om.Write(msg); om.m_isFragment = false; om.m_receiveTime = NetTime.Now; om.m_senderConnection = null; om.m_senderEndPoint = m_socket.LocalEndPoint as IPEndPoint; NetException.Assert(om.m_bitLength == msg.LengthBits); ReleaseMessage(om); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeer.cs ================================================ using System; using System.Threading; using System.Collections.Generic; using System.Net; namespace Lidgren.Network { /// /// Represents a local peer capable of holding zero, one or more connections to remote peers /// public partial class NetPeer { private static int s_initializedPeersCount; private int m_listenPort; private object m_tag; private object m_messageReceivedEventCreationLock = new object(); internal readonly List m_connections; private readonly Dictionary m_connectionLookup; private string m_shutdownReason; /// /// Gets the NetPeerStatus of the NetPeer /// public NetPeerStatus Status { get { return m_status; } } /// /// Signalling event which can be waited on to determine when a message is queued for reading. /// Note that there is no guarantee that after the event is signaled the blocked thread will /// find the message in the queue. Other user created threads could be preempted and dequeue /// the message before the waiting thread wakes up. /// public AutoResetEvent MessageReceivedEvent { get { if (m_messageReceivedEvent == null) { lock (m_messageReceivedEventCreationLock) // make sure we don't create more than one event object { if (m_messageReceivedEvent == null) m_messageReceivedEvent = new AutoResetEvent(false); } } return m_messageReceivedEvent; } } /// /// Gets a unique identifier for this NetPeer based on Mac address and ip/port. Note! Not available until Start() has been called! /// public long UniqueIdentifier { get { return m_uniqueIdentifier; } } /// /// Gets the port number this NetPeer is listening and sending on, if Start() has been called /// public int Port { get { return m_listenPort; } } /// /// Returns an UPnP object if enabled in the NetPeerConfiguration /// public NetUPnP UPnP { get { return m_upnp; } } /// /// Gets or sets the application defined object containing data about the peer /// public object Tag { get { return m_tag; } set { m_tag = value; } } /// /// Gets a copy of the list of connections /// public List Connections { get { lock (m_connections) return new List(m_connections); } } /// /// Gets the number of active connections /// public int ConnectionsCount { get { return m_connections.Count; } } /// /// Statistics on this NetPeer since it was initialized /// public NetPeerStatistics Statistics { get { return m_statistics; } } /// /// Gets the configuration used to instanciate this NetPeer /// public NetPeerConfiguration Configuration { get { return m_configuration; } } /// /// NetPeer constructor /// public NetPeer(NetPeerConfiguration config) { m_configuration = config; m_statistics = new NetPeerStatistics(this); m_releasedIncomingMessages = new NetQueue(4); m_unsentUnconnectedMessages = new NetQueue>(2); m_connections = new List(); m_connectionLookup = new Dictionary(); m_handshakes = new Dictionary(); m_senderRemote = (EndPoint)new IPEndPoint(IPAddress.Any, 0); m_status = NetPeerStatus.NotRunning; m_receivedFragmentGroups = new Dictionary>(); } /// /// Binds to socket and spawns the networking thread /// public void Start() { if (m_status != NetPeerStatus.NotRunning) { // already running! Just ignore... LogWarning("Start() called on already running NetPeer - ignoring."); return; } m_status = NetPeerStatus.Starting; // fix network thread name if (m_configuration.NetworkThreadName == "Lidgren network thread") { int pc = Interlocked.Increment(ref s_initializedPeersCount); m_configuration.NetworkThreadName = "Lidgren network thread " + pc.ToString(); } InitializeNetwork(); // start network thread m_networkThread = new Thread(new ThreadStart(NetworkLoop)); m_networkThread.Name = m_configuration.NetworkThreadName; m_networkThread.IsBackground = true; m_networkThread.Start(); // send upnp discovery if (m_upnp != null) m_upnp.Discover(this); // allow some time for network thread to start up in case they call Connect() or UPnP calls immediately Thread.Sleep(50); } /// /// Get the connection, if any, for a certain remote endpoint /// public NetConnection GetConnection(IPEndPoint ep) { NetConnection retval; // this should not pose a threading problem, m_connectionLookup is never added to concurrently // and TryGetValue will not throw an exception on fail, only yield null, which is acceptable m_connectionLookup.TryGetValue(ep, out retval); return retval; } /// /// Read a pending message from any connection, blocking up to maxMillis if needed /// public NetIncomingMessage WaitMessage(int maxMillis) { var msg = ReadMessage(); if (msg != null) return msg; // no need to wait; we already have a message to deliver var msgEvt = MessageReceivedEvent; msgEvt.WaitOne(maxMillis); return ReadMessage(); } /// /// Read a pending message from any connection, if any /// public NetIncomingMessage ReadMessage() { NetIncomingMessage retval; if (m_releasedIncomingMessages.TryDequeue(out retval)) { if (retval.MessageType == NetIncomingMessageType.StatusChanged) { NetConnectionStatus status = (NetConnectionStatus)retval.PeekByte(); retval.SenderConnection.m_visibleStatus = status; } } return retval; } /// /// Read a pending message from any connection, if any /// public int ReadMessages(IList addTo) { int added = m_releasedIncomingMessages.TryDrain(addTo); if (added > 0) { for (int i = 0; i < added; i++) { var index = addTo.Count - added + i; var nim = addTo[index]; if (nim.MessageType == NetIncomingMessageType.StatusChanged) { NetConnectionStatus status = (NetConnectionStatus)nim.PeekByte(); nim.SenderConnection.m_visibleStatus = status; } } } return added; } // send message immediately internal void SendLibrary(NetOutgoingMessage msg, IPEndPoint recipient) { VerifyNetworkThread(); NetException.Assert(msg.m_isSent == false); bool connReset; int len = msg.Encode(m_sendBuffer, 0, 0); SendPacket(len, recipient, 1, out connReset); } /// /// Create a connection to a remote endpoint /// public NetConnection Connect(string host, int port) { return Connect(new IPEndPoint(NetUtility.Resolve(host), port), null); } /// /// Create a connection to a remote endpoint /// public NetConnection Connect(string host, int port, NetOutgoingMessage hailMessage) { return Connect(new IPEndPoint(NetUtility.Resolve(host), port), hailMessage); } /// /// Create a connection to a remote endpoint /// public NetConnection Connect(IPEndPoint remoteEndPoint) { return Connect(remoteEndPoint, null); } /// /// Create a connection to a remote endpoint /// public virtual NetConnection Connect(IPEndPoint remoteEndPoint, NetOutgoingMessage hailMessage) { if (remoteEndPoint == null) throw new ArgumentNullException("remoteEndPoint"); lock (m_connections) { if (m_status == NetPeerStatus.NotRunning) throw new NetException("Must call Start() first"); if (m_connectionLookup.ContainsKey(remoteEndPoint)) throw new NetException("Already connected to that endpoint!"); NetConnection hs; if (m_handshakes.TryGetValue(remoteEndPoint, out hs)) { // already trying to connect to that endpoint; make another try switch (hs.m_status) { case NetConnectionStatus.InitiatedConnect: // send another connect hs.m_connectRequested = true; break; case NetConnectionStatus.RespondedConnect: // send another response hs.SendConnectResponse((float)NetTime.Now, false); break; default: // weird LogWarning("Weird situation; Connect() already in progress to remote endpoint; but hs status is " + hs.m_status); break; } return hs; } NetConnection conn = new NetConnection(this, remoteEndPoint); conn.m_status = NetConnectionStatus.InitiatedConnect; conn.m_localHailMessage = hailMessage; // handle on network thread conn.m_connectRequested = true; conn.m_connectionInitiator = true; m_handshakes.Add(remoteEndPoint, conn); return conn; } } /// /// Send raw bytes; only used for debugging /// #if DEBUG public void RawSend(byte[] arr, int offset, int length, IPEndPoint destination) #else public void RawSend(byte[] arr, int offset, int length, IPEndPoint destination) #endif { // wrong thread - this miiiight crash with network thread... but what's a boy to do. Array.Copy(arr, offset, m_sendBuffer, 0, length); bool unused; SendPacket(length, destination, 1, out unused); } /// /// In DEBUG, throws an exception, in RELEASE logs an error message /// /// internal void ThrowOrLog(string message) { #if DEBUG throw new NetException(message); #else LogError(message); #endif } /// /// Disconnects all active connections and closes the socket /// public void Shutdown(string bye) { // called on user thread if (m_socket == null) return; // already shut down LogDebug("Shutdown requested"); m_shutdownReason = bye; m_status = NetPeerStatus.ShutdownRequested; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeerConfiguration.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Net; namespace Lidgren.Network { /// /// Partly immutable after NetPeer has been initialized /// public sealed class NetPeerConfiguration { // Maximum transmission unit // Ethernet can take 1500 bytes of payload, so lets stay below that. // The aim is for a max full packet to be 1440 bytes (30 x 48 bytes, lower than 1468) // -20 bytes IP header // -8 bytes UDP header // -4 bytes to be on the safe side and align to 8-byte boundary // Total 1408 bytes // Note that lidgren headers (5 bytes) are not included here; since it's part of the "mtu payload" /// /// Default MTU value in bytes /// public const int kDefaultMTU = 1408; private const string c_isLockedMessage = "You may not modify the NetPeerConfiguration after it has been used to initialize a NetPeer"; private bool m_isLocked; private readonly string m_appIdentifier; private string m_networkThreadName; private IPAddress m_localAddress; private IPAddress m_broadcastAddress; internal bool m_acceptIncomingConnections; internal int m_maximumConnections; internal int m_defaultOutgoingMessageCapacity; internal float m_pingInterval; internal bool m_useMessageRecycling; internal float m_connectionTimeout; internal bool m_enableUPnP; internal bool m_autoFlushSendQueue; private NetUnreliableSizeBehaviour m_unreliableSizeBehaviour; internal NetIncomingMessageType m_disabledTypes; internal int m_port; internal int m_receiveBufferSize; internal int m_sendBufferSize; internal float m_resendHandshakeInterval; internal int m_maximumHandshakeAttempts; // bad network simulation internal float m_loss; internal float m_duplicates; internal float m_minimumOneWayLatency; internal float m_randomOneWayLatency; // MTU internal int m_maximumTransmissionUnit; internal bool m_autoExpandMTU; internal float m_expandMTUFrequency; internal int m_expandMTUFailAttempts; /// /// NetPeerConfiguration constructor /// public NetPeerConfiguration(string appIdentifier) { if (string.IsNullOrEmpty(appIdentifier)) throw new NetException("App identifier must be at least one character long"); m_appIdentifier = appIdentifier; // // default values // m_disabledTypes = NetIncomingMessageType.ConnectionApproval | NetIncomingMessageType.UnconnectedData | NetIncomingMessageType.VerboseDebugMessage | NetIncomingMessageType.ConnectionLatencyUpdated | NetIncomingMessageType.NatIntroductionSuccess; m_networkThreadName = "Lidgren network thread"; m_localAddress = IPAddress.Any; m_broadcastAddress = IPAddress.Broadcast; var ip = NetUtility.GetBroadcastAddress(); if (ip != null) { m_broadcastAddress = ip; } m_port = 0; m_receiveBufferSize = 131071; m_sendBufferSize = 131071; m_acceptIncomingConnections = false; m_maximumConnections = 32; m_defaultOutgoingMessageCapacity = 16; m_pingInterval = 4.0f; m_connectionTimeout = 25.0f; m_useMessageRecycling = true; m_resendHandshakeInterval = 3.0f; m_maximumHandshakeAttempts = 5; m_autoFlushSendQueue = true; m_maximumTransmissionUnit = kDefaultMTU; m_autoExpandMTU = false; m_expandMTUFrequency = 2.0f; m_expandMTUFailAttempts = 5; m_unreliableSizeBehaviour = NetUnreliableSizeBehaviour.IgnoreMTU; m_loss = 0.0f; m_minimumOneWayLatency = 0.0f; m_randomOneWayLatency = 0.0f; m_duplicates = 0.0f; m_isLocked = false; } internal void Lock() { m_isLocked = true; } /// /// Gets the identifier of this application; the library can only connect to matching app identifier peers /// public string AppIdentifier { get { return m_appIdentifier; } } /// /// Enables receiving of the specified type of message /// public void EnableMessageType(NetIncomingMessageType type) { m_disabledTypes &= (~type); } /// /// Disables receiving of the specified type of message /// public void DisableMessageType(NetIncomingMessageType type) { m_disabledTypes |= type; } /// /// Enables or disables receiving of the specified type of message /// public void SetMessageTypeEnabled(NetIncomingMessageType type, bool enabled) { if (enabled) m_disabledTypes &= (~type); else m_disabledTypes |= type; } /// /// Gets if receiving of the specified type of message is enabled /// public bool IsMessageTypeEnabled(NetIncomingMessageType type) { return !((m_disabledTypes & type) == type); } /// /// Gets or sets the behaviour of unreliable sends above MTU /// public NetUnreliableSizeBehaviour UnreliableSizeBehaviour { get { return m_unreliableSizeBehaviour; } set { m_unreliableSizeBehaviour = value; } } /// /// Gets or sets the name of the library network thread. Cannot be changed once NetPeer is initialized. /// public string NetworkThreadName { get { return m_networkThreadName; } set { if (m_isLocked) throw new NetException("NetworkThreadName may not be set after the NetPeer which uses the configuration has been started"); m_networkThreadName = value; } } /// /// Gets or sets the maximum amount of connections this peer can hold. Cannot be changed once NetPeer is initialized. /// public int MaximumConnections { get { return m_maximumConnections; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_maximumConnections = value; } } /// /// Gets or sets the maximum amount of bytes to send in a single packet, excluding ip, udp and lidgren headers. Cannot be changed once NetPeer is initialized. /// public int MaximumTransmissionUnit { get { return m_maximumTransmissionUnit; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); if (value < 1 || value >= ((ushort.MaxValue + 1) / 8)) throw new NetException("MaximumTransmissionUnit must be between 1 and " + (((ushort.MaxValue + 1) / 8) - 1) + " bytes"); m_maximumTransmissionUnit = value; } } /// /// Gets or sets the default capacity in bytes when NetPeer.CreateMessage() is called without argument /// public int DefaultOutgoingMessageCapacity { get { return m_defaultOutgoingMessageCapacity; } set { m_defaultOutgoingMessageCapacity = value; } } /// /// Gets or sets the time between latency calculating pings /// public float PingInterval { get { return m_pingInterval; } set { m_pingInterval = value; } } /// /// Gets or sets if the library should recycling messages to avoid excessive garbage collection. Cannot be changed once NetPeer is initialized. /// public bool UseMessageRecycling { get { return m_useMessageRecycling; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_useMessageRecycling = value; } } /// /// Gets or sets the number of seconds timeout will be postponed on a successful ping/pong /// public float ConnectionTimeout { get { return m_connectionTimeout; } set { if (value < m_pingInterval) throw new NetException("Connection timeout cannot be lower than ping interval!"); m_connectionTimeout = value; } } /// /// Enables UPnP support; enabling port forwarding and getting external ip /// public bool EnableUPnP { get { return m_enableUPnP; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_enableUPnP = value; } } /// /// Enables or disables automatic flushing of the send queue. If disabled, you must manully call NetPeer.FlushSendQueue() to flush sent messages to network. /// public bool AutoFlushSendQueue { get { return m_autoFlushSendQueue; } set { m_autoFlushSendQueue = value; } } /// /// Gets or sets the local ip address to bind to. Defaults to IPAddress.Any. Cannot be changed once NetPeer is initialized. /// public IPAddress LocalAddress { get { return m_localAddress; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_localAddress = value; } } /// /// Gets or sets the local broadcast address to use when broadcasting /// public IPAddress BroadcastAddress { get { return m_broadcastAddress; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_broadcastAddress = value; } } /// /// Gets or sets the local port to bind to. Defaults to 0. Cannot be changed once NetPeer is initialized. /// public int Port { get { return m_port; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_port = value; } } /// /// Gets or sets the size in bytes of the receiving buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized. /// public int ReceiveBufferSize { get { return m_receiveBufferSize; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_receiveBufferSize = value; } } /// /// Gets or sets the size in bytes of the sending buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized. /// public int SendBufferSize { get { return m_sendBufferSize; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_sendBufferSize = value; } } /// /// Gets or sets if the NetPeer should accept incoming connections. This is automatically set to true in NetServer and false in NetClient. /// public bool AcceptIncomingConnections { get { return m_acceptIncomingConnections; } set { m_acceptIncomingConnections = value; } } /// /// Gets or sets the number of seconds between handshake attempts /// public float ResendHandshakeInterval { get { return m_resendHandshakeInterval; } set { m_resendHandshakeInterval = value; } } /// /// Gets or sets the maximum number of handshake attempts before failing to connect /// public int MaximumHandshakeAttempts { get { return m_maximumHandshakeAttempts; } set { if (value < 1) throw new NetException("MaximumHandshakeAttempts must be at least 1"); m_maximumHandshakeAttempts = value; } } /// /// Gets or sets if the NetPeer should send large messages to try to expand the maximum transmission unit size /// public bool AutoExpandMTU { get { return m_autoExpandMTU; } set { if (m_isLocked) throw new NetException(c_isLockedMessage); m_autoExpandMTU = value; } } /// /// Gets or sets how often to send large messages to expand MTU if AutoExpandMTU is enabled /// public float ExpandMTUFrequency { get { return m_expandMTUFrequency; } set { m_expandMTUFrequency = value; } } /// /// Gets or sets the number of failed expand mtu attempts to perform before setting final MTU /// public int ExpandMTUFailAttempts { get { return m_expandMTUFailAttempts; } set { m_expandMTUFailAttempts = value; } } #if DEBUG /// /// Gets or sets the simulated amount of sent packets lost from 0.0f to 1.0f /// public float SimulatedLoss { get { return m_loss; } set { m_loss = value; } } /// /// Gets or sets the minimum simulated amount of one way latency for sent packets in seconds /// public float SimulatedMinimumLatency { get { return m_minimumOneWayLatency; } set { m_minimumOneWayLatency = value; } } /// /// Gets or sets the simulated added random amount of one way latency for sent packets in seconds /// public float SimulatedRandomLatency { get { return m_randomOneWayLatency; } set { m_randomOneWayLatency = value; } } /// /// Gets the average simulated one way latency in seconds /// public float SimulatedAverageLatency { get { return m_minimumOneWayLatency + (m_randomOneWayLatency * 0.5f); } } /// /// Gets or sets the simulated amount of duplicated packets from 0.0f to 1.0f /// public float SimulatedDuplicatesChance { get { return m_duplicates; } set { m_duplicates = value; } } #endif /// /// Creates a memberwise shallow clone of this configuration /// public NetPeerConfiguration Clone() { NetPeerConfiguration retval = this.MemberwiseClone() as NetPeerConfiguration; retval.m_isLocked = false; return retval; } } /// /// Behaviour of unreliable sends above MTU /// public enum NetUnreliableSizeBehaviour { /// /// Sending an unreliable message will ignore MTU and send everything in a single packet; this is the new default /// IgnoreMTU = 0, /// /// Old behaviour; use normal fragmentation for unreliable messages - if a fragment is dropped, memory for received fragments are never reclaimed! /// NormalFragmentation = 1, /// /// Alternate behaviour; just drops unreliable messages above MTU /// DropAboveMTU = 2, } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeerStatistics.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // Uncomment the line below to get statistics in RELEASE builds //#define USE_RELEASE_STATISTICS using System; using System.Text; using System.Diagnostics; namespace Lidgren.Network { /// /// Statistics for a NetPeer instance /// public sealed class NetPeerStatistics { private readonly NetPeer m_peer; internal int m_sentPackets; internal int m_receivedPackets; internal int m_sentMessages; internal int m_receivedMessages; internal int m_receivedFragments; internal int m_sentBytes; internal int m_receivedBytes; internal long m_bytesAllocated; internal NetPeerStatistics(NetPeer peer) { m_peer = peer; Reset(); } internal void Reset() { m_sentPackets = 0; m_receivedPackets = 0; m_sentMessages = 0; m_receivedMessages = 0; m_receivedFragments = 0; m_sentBytes = 0; m_receivedBytes = 0; m_bytesAllocated = 0; } /// /// Gets the number of sent packets since the NetPeer was initialized /// public int SentPackets { get { return m_sentPackets; } } /// /// Gets the number of received packets since the NetPeer was initialized /// public int ReceivedPackets { get { return m_receivedPackets; } } /// /// Gets the number of sent messages since the NetPeer was initialized /// public int SentMessages { get { return m_sentMessages; } } /// /// Gets the number of received messages since the NetPeer was initialized /// public int ReceivedMessages { get { return m_receivedMessages; } } /// /// Gets the number of sent bytes since the NetPeer was initialized /// public int SentBytes { get { return m_sentBytes; } } /// /// Gets the number of received bytes since the NetPeer was initialized /// public int ReceivedBytes { get { return m_receivedBytes; } } /// /// Gets the number of bytes allocated (and possibly garbage collected) for message storage /// public long StorageBytesAllocated { get { return m_bytesAllocated; } } /// /// Gets the number of bytes in the recycled pool /// public int BytesInRecyclePool { get { return m_peer.m_storagePoolBytes; } } #if USE_RELEASE_STATISTICS internal void PacketSent(int numBytes, int numMessages) { m_sentPackets++; m_sentBytes += numBytes; m_sentMessages += numMessages; } #else [Conditional("DEBUG")] internal void PacketSent(int numBytes, int numMessages) { m_sentPackets++; m_sentBytes += numBytes; m_sentMessages += numMessages; } #endif #if USE_RELEASE_STATISTICS internal void PacketReceived(int numBytes, int numMessages) { m_receivedPackets++; m_receivedBytes += numBytes; m_receivedMessages += numMessages; } #else [Conditional("DEBUG")] internal void PacketReceived(int numBytes, int numMessages, int numFragments) { m_receivedPackets++; m_receivedBytes += numBytes; m_receivedMessages += numMessages; m_receivedFragments += numFragments; } #endif /// /// Returns a string that represents this object /// public override string ToString() { StringBuilder bdr = new StringBuilder(); bdr.AppendLine(m_peer.ConnectionsCount.ToString() + " connections"); #if DEBUG || USE_RELEASE_STATISTICS bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets"); bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets"); #else bdr.AppendLine("Sent (n/a) bytes in (n/a) messages in (n/a) packets"); bdr.AppendLine("Received (n/a) bytes in (n/a) messages in (n/a) packets"); #endif bdr.AppendLine("Storage allocated " + m_bytesAllocated + " bytes"); bdr.AppendLine("Recycled pool " + m_peer.m_storagePoolBytes + " bytes"); return bdr.ToString(); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetPeerStatus.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; namespace Lidgren.Network { /// /// Status for a NetPeer instance /// public enum NetPeerStatus { /// /// NetPeer is not running; socket is not bound /// NotRunning = 0, /// /// NetPeer is in the process of starting up /// Starting = 1, /// /// NetPeer is bound to socket and listening for packets /// Running = 2, /// /// Shutdown has been requested and will be executed shortly /// ShutdownRequested = 3, } } ================================================ FILE: ThirdParty/Lidgren.Network/NetQueue.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Diagnostics; using System.Collections.Generic; using System.Threading; namespace Lidgren.Network { /// /// Thread safe (blocking) expanding queue with TryDequeue() and EnqueueFirst() /// [DebuggerDisplay("Count={Count} Capacity={Capacity}")] public sealed class NetQueue { // Example: // m_capacity = 8 // m_size = 6 // m_head = 4 // // [0] item // [1] item (tail = ((head + size - 1) % capacity) // [2] // [3] // [4] item (head) // [5] item // [6] item // [7] item // private T[] m_items; private readonly ReaderWriterLockSlim m_lock = new ReaderWriterLockSlim(); private int m_size; private int m_head; /// /// Gets the number of items in the queue /// public int Count { get { return m_size; } } /// /// Gets the current capacity for the queue /// public int Capacity { get { return m_items.Length; } } /// /// NetQueue constructor /// public NetQueue(int initialCapacity) { m_items = new T[initialCapacity]; } /// /// Adds an item last/tail of the queue /// public void Enqueue(T item) { m_lock.EnterWriteLock(); try { if (m_size == m_items.Length) SetCapacity(m_items.Length + 8); int slot = (m_head + m_size) % m_items.Length; m_items[slot] = item; m_size++; } finally { m_lock.ExitWriteLock(); } } /// /// Adds an item last/tail of the queue /// public void Enqueue(IEnumerable items) { m_lock.EnterWriteLock(); try { foreach (var item in items) { if (m_size == m_items.Length) SetCapacity(m_items.Length + 8); // @TODO move this out of loop int slot = (m_head + m_size) % m_items.Length; m_items[slot] = item; m_size++; } } finally { m_lock.ExitWriteLock(); } } /// /// Places an item first, at the head of the queue /// public void EnqueueFirst(T item) { m_lock.EnterWriteLock(); try { if (m_size >= m_items.Length) SetCapacity(m_items.Length + 8); m_head--; if (m_head < 0) m_head = m_items.Length - 1; m_items[m_head] = item; m_size++; } finally { m_lock.ExitWriteLock(); } } // must be called from within a write locked m_lock! private void SetCapacity(int newCapacity) { if (m_size == 0) { if (m_size == 0) { m_items = new T[newCapacity]; m_head = 0; return; } } T[] newItems = new T[newCapacity]; if (m_head + m_size - 1 < m_items.Length) { Array.Copy(m_items, m_head, newItems, 0, m_size); } else { Array.Copy(m_items, m_head, newItems, 0, m_items.Length - m_head); Array.Copy(m_items, 0, newItems, m_items.Length - m_head, (m_size - (m_items.Length - m_head))); } m_items = newItems; m_head = 0; } /// /// Gets an item from the head of the queue, or returns default(T) if empty /// public bool TryDequeue(out T item) { if (m_size == 0) { item = default(T); return false; } m_lock.EnterWriteLock(); try { if (m_size == 0) { item = default(T); return false; } item = m_items[m_head]; m_items[m_head] = default(T); m_head = (m_head + 1) % m_items.Length; m_size--; return true; } catch { #if DEBUG throw; #else item = default(T); return false; #endif } finally { m_lock.ExitWriteLock(); } } /// /// Gets all items from the head of the queue, or returns number of items popped /// public int TryDrain(IList addTo) { if (m_size == 0) return 0; m_lock.EnterWriteLock(); try { int added = m_size; while (m_size > 0) { var item = m_items[m_head]; addTo.Add(item); m_items[m_head] = default(T); m_head = (m_head + 1) % m_items.Length; m_size--; } return added; } finally { m_lock.ExitWriteLock(); } } /// /// Returns default(T) if queue is empty /// public T TryPeek(int offset) { if (m_size == 0) return default(T); m_lock.EnterReadLock(); try { if (m_size == 0) return default(T); return m_items[(m_head + offset) % m_items.Length]; } finally { m_lock.ExitReadLock(); } } /// /// Determines whether an item is in the queue /// public bool Contains(T item) { m_lock.EnterReadLock(); try { int ptr = m_head; for (int i = 0; i < m_size; i++) { if (m_items[ptr] == null) { if (item == null) return true; } else { if (m_items[ptr].Equals(item)) return true; } ptr = (ptr + 1) % m_items.Length; } return false; } finally { m_lock.ExitReadLock(); } } /// /// Copies the queue items to a new array /// public T[] ToArray() { m_lock.EnterReadLock(); try { T[] retval = new T[m_size]; int ptr = m_head; for (int i = 0; i < m_size; i++) { retval[i] = m_items[ptr++]; if (ptr >= m_items.Length) ptr = 0; } return retval; } finally { m_lock.ExitReadLock(); } } /// /// Removes all objects from the queue /// public void Clear() { m_lock.EnterWriteLock(); try { for (int i = 0; i < m_items.Length; i++) m_items[i] = default(T); m_head = 0; m_size = 0; } finally { m_lock.ExitWriteLock(); } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetRandom.Implementations.cs ================================================ using System; using System.Security.Cryptography; namespace Lidgren.Network { /// /// Multiply With Carry random /// public class MWCRandom : NetRandom { /// /// Get global instance of MWCRandom /// public static new readonly MWCRandom Instance = new MWCRandom(); private uint m_w, m_z; /// /// Constructor with randomized seed /// public MWCRandom() { Initialize(NetRandomSeed.GetUInt64()); } /// /// (Re)initialize this instance with provided 32 bit seed /// [CLSCompliant(false)] public override void Initialize(uint seed) { m_w = seed; m_z = seed * 16777619; } /// /// (Re)initialize this instance with provided 64 bit seed /// [CLSCompliant(false)] public void Initialize(ulong seed) { m_w = (uint)seed; m_z = (uint)(seed >> 32); } /// /// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively /// [CLSCompliant(false)] public override uint NextUInt32() { m_z = 36969 * (m_z & 65535) + (m_z >> 16); m_w = 18000 * (m_w & 65535) + (m_w >> 16); return ((m_z << 16) + m_w); } } /// /// Xor Shift based random /// public sealed class XorShiftRandom : NetRandom { /// /// Get global instance of XorShiftRandom /// public static new readonly XorShiftRandom Instance = new XorShiftRandom(); private const uint c_x = 123456789; private const uint c_y = 362436069; private const uint c_z = 521288629; private const uint c_w = 88675123; private uint m_x, m_y, m_z, m_w; /// /// Constructor with randomized seed /// public XorShiftRandom() { Initialize(NetRandomSeed.GetUInt64()); } /// /// Constructor with provided 64 bit seed /// [CLSCompliant(false)] public XorShiftRandom(ulong seed) { Initialize(seed); } /// /// (Re)initialize this instance with provided 32 bit seed /// [CLSCompliant(false)] public override void Initialize(uint seed) { m_x = (uint)seed; m_y = c_y; m_z = c_z; m_w = c_w; } /// /// (Re)initialize this instance with provided 64 bit seed /// [CLSCompliant(false)] public void Initialize(ulong seed) { m_x = (uint)seed; m_y = c_y; m_z = (uint)(seed << 32); m_w = c_w; } /// /// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively /// [CLSCompliant(false)] public override uint NextUInt32() { uint t = (m_x ^ (m_x << 11)); m_x = m_y; m_y = m_z; m_z = m_w; return (m_w = (m_w ^ (m_w >> 19)) ^ (t ^ (t >> 8))); } } /// /// Mersenne Twister based random /// public sealed class MersenneTwisterRandom : NetRandom { /// /// Get global instance of MersenneTwisterRandom /// public static new readonly MersenneTwisterRandom Instance = new MersenneTwisterRandom(); private const int N = 624; private const int M = 397; private const uint MATRIX_A = 0x9908b0dfU; private const uint UPPER_MASK = 0x80000000U; private const uint LOWER_MASK = 0x7fffffffU; private const uint TEMPER1 = 0x9d2c5680U; private const uint TEMPER2 = 0xefc60000U; private const int TEMPER3 = 11; private const int TEMPER4 = 7; private const int TEMPER5 = 15; private const int TEMPER6 = 18; private UInt32[] mt; private int mti; private UInt32[] mag01; private const double c_realUnitInt = 1.0 / ((double)int.MaxValue + 1.0); /// /// Constructor with randomized seed /// public MersenneTwisterRandom() { Initialize(NetRandomSeed.GetUInt32()); } /// /// Constructor with provided 32 bit seed /// [CLSCompliant(false)] public MersenneTwisterRandom(uint seed) { Initialize(seed); } /// /// (Re)initialize this instance with provided 32 bit seed /// [CLSCompliant(false)] public override void Initialize(uint seed) { mt = new UInt32[N]; mti = N + 1; mag01 = new UInt32[] { 0x0U, MATRIX_A }; mt[0] = seed; for (int i = 1; i < N; i++) mt[i] = (UInt32)(1812433253 * (mt[i - 1] ^ (mt[i - 1] >> 30)) + i); } /// /// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively /// [CLSCompliant(false)] public override uint NextUInt32() { UInt32 y; if (mti >= N) { GenRandAll(); mti = 0; } y = mt[mti++]; y ^= (y >> TEMPER3); y ^= (y << TEMPER4) & TEMPER1; y ^= (y << TEMPER5) & TEMPER2; y ^= (y >> TEMPER6); return y; } private void GenRandAll() { int kk = 1; UInt32 y; UInt32 p; y = mt[0] & UPPER_MASK; do { p = mt[kk]; mt[kk - 1] = mt[kk + (M - 1)] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1]; y = p & UPPER_MASK; } while (++kk < N - M + 1); do { p = mt[kk]; mt[kk - 1] = mt[kk + (M - N - 1)] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1]; y = p & UPPER_MASK; } while (++kk < N); p = mt[0]; mt[N - 1] = mt[M - 1] ^ ((y | (p & LOWER_MASK)) >> 1) ^ mag01[p & 1]; } } /// /// RNGCryptoServiceProvider based random; very slow but cryptographically safe /// public class CryptoRandom : NetRandom { /// /// Global instance of CryptoRandom /// public static new readonly CryptoRandom Instance = new CryptoRandom(); private RandomNumberGenerator m_rnd = new RNGCryptoServiceProvider(); /// /// Seed in CryptoRandom does not create deterministic sequences /// [CLSCompliant(false)] public override void Initialize(uint seed) { byte[] tmp = new byte[seed % 16]; m_rnd.GetBytes(tmp); // just prime it } /// /// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively /// [CLSCompliant(false)] public override uint NextUInt32() { var bytes = new byte[4]; m_rnd.GetBytes(bytes); return (uint)bytes[0] | (((uint)bytes[1]) << 8) | (((uint)bytes[2]) << 16) | (((uint)bytes[3]) << 24); } /// /// Fill the specified buffer with random values /// public override void NextBytes(byte[] buffer) { m_rnd.GetBytes(buffer); } /// /// Fills all bytes from offset to offset + length in buffer with random values /// public override void NextBytes(byte[] buffer, int offset, int length) { var bytes = new byte[length]; m_rnd.GetBytes(bytes); Array.Copy(bytes, 0, buffer, offset, length); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetRandom.cs ================================================ using System; using System.Collections.Generic; using System.Threading; namespace Lidgren.Network { /// /// NetRandom base class /// public abstract class NetRandom : Random { /// /// Get global instance of NetRandom (uses MWCRandom) /// public static NetRandom Instance = new MWCRandom(); private const double c_realUnitInt = 1.0 / ((double)int.MaxValue + 1.0); /// /// Constructor with randomized seed /// public NetRandom() { Initialize(NetRandomSeed.GetUInt32()); } /// /// Constructor with provided 32 bit seed /// public NetRandom(int seed) { Initialize((uint)seed); } /// /// (Re)initialize this instance with provided 32 bit seed /// [CLSCompliant(false)] public virtual void Initialize(uint seed) { // should be abstract, but non-CLS compliant methods can't be abstract! throw new NotImplementedException("Implement this in inherited classes"); } /// /// Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively /// [CLSCompliant(false)] public virtual uint NextUInt32() { // should be abstract, but non-CLS compliant methods can't be abstract! throw new NotImplementedException("Implement this in inherited classes"); } /// /// Generates a random value that is greater or equal than 0 and less than Int32.MaxValue /// public override int Next() { var retval = (int)(0x7FFFFFFF & NextUInt32()); if (retval == 0x7FFFFFFF) return NextInt32(); return retval; } /// /// Generates a random value greater or equal than 0 and less or equal than Int32.MaxValue (inclusively) /// public int NextInt32() { return (int)(0x7FFFFFFF & NextUInt32()); } /// /// Returns random value larger or equal to 0.0 and less than 1.0 /// public override double NextDouble() { return c_realUnitInt * NextInt32(); } /// /// Returns random value is greater or equal than 0.0 and less than 1.0 /// protected override double Sample() { return c_realUnitInt * NextInt32(); } /// /// Returns random value is greater or equal than 0.0f and less than 1.0f /// public float NextSingle() { var retval = (float)(c_realUnitInt * NextInt32()); if (retval == 1.0f) return NextSingle(); return retval; } /// /// Returns a random value is greater or equal than 0 and less than maxValue /// public override int Next(int maxValue) { return (int)(NextDouble() * maxValue); } /// /// Returns a random value is greater or equal than minValue and less than maxValue /// public override int Next(int minValue, int maxValue) { return minValue + (int)(NextDouble() * (double)(maxValue - minValue)); } /// /// Generates a random value between UInt64.MinValue to UInt64.MaxValue /// [CLSCompliant(false)] public ulong NextUInt64() { ulong retval = NextUInt32(); retval |= NextUInt32() << 32; return retval; } private uint m_boolValues; private int m_nextBoolIndex; /// /// Returns true or false, randomly /// public bool NextBool() { if (m_nextBoolIndex >= 32) { m_boolValues = NextUInt32(); m_nextBoolIndex = 1; } var retval = ((m_boolValues >> m_nextBoolIndex) & 1) == 1; m_nextBoolIndex++; return retval; } /// /// Fills all bytes from offset to offset + length in buffer with random values /// public virtual void NextBytes(byte[] buffer, int offset, int length) { int full = length / 4; int ptr = offset; for (int i = 0; i < full; i++) { uint r = NextUInt32(); buffer[ptr++] = (byte)r; buffer[ptr++] = (byte)(r >> 8); buffer[ptr++] = (byte)(r >> 16); buffer[ptr++] = (byte)(r >> 24); } int rest = length - (full * 4); for (int i = 0; i < rest; i++) buffer[ptr++] = (byte)NextUInt32(); } /// /// Fill the specified buffer with random values /// public override void NextBytes(byte[] buffer) { NextBytes(buffer, 0, buffer.Length); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetRandomSeed.cs ================================================ using System; using System.Threading; namespace Lidgren.Network { /// /// Class for generating random seeds /// public static class NetRandomSeed { private static int m_seedIncrement = -1640531527; /// /// Generates a 32 bit random seed /// [CLSCompliant(false)] public static uint GetUInt32() { ulong seed = GetUInt64(); uint low = (uint)seed; uint high = (uint)(seed >> 32); return low ^ high; } /// /// Generates a 64 bit random seed /// [CLSCompliant(false)] public static ulong GetUInt64() { #if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE ulong seed = (ulong)System.Diagnostics.Stopwatch.GetTimestamp(); seed ^= (ulong)Environment.WorkingSet; ulong s2 = (ulong)Interlocked.Increment(ref m_seedIncrement); s2 |= (((ulong)Guid.NewGuid().GetHashCode()) << 32); seed ^= s2; #else ulong seed = (ulong)Environment.TickCount; seed |= (((ulong)(new object().GetHashCode())) << 32); ulong s2 = (ulong)Guid.NewGuid().GetHashCode(); s2 |= (((ulong)Interlocked.Increment(ref m_seedIncrement)) << 32); seed ^= s2; #endif return seed; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetReceiverChannelBase.cs ================================================ using System; namespace Lidgren.Network { internal abstract class NetReceiverChannelBase { internal NetPeer m_peer; internal NetConnection m_connection; public NetReceiverChannelBase(NetConnection connection) { m_connection = connection; m_peer = connection.m_peer; } internal abstract void ReceiveMessage(NetIncomingMessage msg); } } ================================================ FILE: ThirdParty/Lidgren.Network/NetReliableOrderedReceiver.cs ================================================ using System; namespace Lidgren.Network { internal sealed class NetReliableOrderedReceiver : NetReceiverChannelBase { private int m_windowStart; private int m_windowSize; private NetBitVector m_earlyReceived; internal NetIncomingMessage[] m_withheldMessages; public NetReliableOrderedReceiver(NetConnection connection, int windowSize) : base(connection) { m_windowSize = windowSize; m_withheldMessages = new NetIncomingMessage[windowSize]; m_earlyReceived = new NetBitVector(windowSize); } private void AdvanceWindow() { m_earlyReceived.Set(m_windowStart % m_windowSize, false); m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; } internal override void ReceiveMessage(NetIncomingMessage message) { int relate = NetUtility.RelativeSequenceNumber(message.m_sequenceNumber, m_windowStart); // ack no matter what m_connection.QueueAck(message.m_receivedMessageType, message.m_sequenceNumber); if (relate == 0) { // Log("Received message #" + message.SequenceNumber + " right on time"); // // excellent, right on time // //m_peer.LogVerbose("Received RIGHT-ON-TIME " + message); AdvanceWindow(); m_peer.ReleaseMessage(message); // release withheld messages int nextSeqNr = (message.m_sequenceNumber + 1) % NetConstants.NumSequenceNumbers; while (m_earlyReceived[nextSeqNr % m_windowSize]) { message = m_withheldMessages[nextSeqNr % m_windowSize]; NetException.Assert(message != null); // remove it from withheld messages m_withheldMessages[nextSeqNr % m_windowSize] = null; m_peer.LogVerbose("Releasing withheld message #" + message); m_peer.ReleaseMessage(message); AdvanceWindow(); nextSeqNr++; } return; } if (relate < 0) { m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE"); // duplicate return; } // relate > 0 = early message if (relate > m_windowSize) { // too early message! m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); return; } m_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true); m_peer.LogVerbose("Received " + message + " WITHHOLDING, waiting for " + m_windowStart); m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetReliableSenderChannel.cs ================================================ using System; using System.Threading; namespace Lidgren.Network { /// /// Sender part of Selective repeat ARQ for a particular NetChannel /// internal sealed class NetReliableSenderChannel : NetSenderChannelBase { private NetConnection m_connection; private int m_windowStart; private int m_windowSize; private int m_sendStart; private NetBitVector m_receivedAcks; internal NetStoredReliableMessage[] m_storedMessages; internal float m_resendDelay; internal override int WindowSize { get { return m_windowSize; } } internal NetReliableSenderChannel(NetConnection connection, int windowSize) { m_connection = connection; m_windowSize = windowSize; m_windowStart = 0; m_sendStart = 0; m_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers); m_storedMessages = new NetStoredReliableMessage[m_windowSize]; m_queuedSends = new NetQueue(8); m_resendDelay = m_connection.GetResendDelay(); } internal override int GetAllowedSends() { int retval = m_windowSize - ((m_sendStart + NetConstants.NumSequenceNumbers) - m_windowStart) % NetConstants.NumSequenceNumbers; NetException.Assert(retval >= 0 && retval <= m_windowSize); return retval; } internal override void Reset() { m_receivedAcks.Clear(); for (int i = 0; i < m_storedMessages.Length; i++) m_storedMessages[i].Reset(); m_queuedSends.Clear(); m_windowStart = 0; m_sendStart = 0; } internal override NetSendResult Enqueue(NetOutgoingMessage message) { m_queuedSends.Enqueue(message); if (m_queuedSends.Count <= GetAllowedSends()) return NetSendResult.Sent; return NetSendResult.Queued; } // call this regularely internal override void SendQueuedMessages(float now) { // // resends // for (int i = 0; i < m_storedMessages.Length; i++) { NetOutgoingMessage om = m_storedMessages[i].Message; if (om == null) continue; float t = m_storedMessages[i].LastSent; if (t > 0 && (now - t) > m_resendDelay) { // deduce sequence number /* int startSlot = m_windowStart % m_windowSize; int seqNr = m_windowStart; while (startSlot != i) { startSlot--; if (startSlot < 0) startSlot = m_windowSize - 1; seqNr--; } */ //m_connection.m_peer.LogVerbose("Resending due to delay #" + m_storedMessages[i].SequenceNumber + " " + om.ToString()); m_connection.m_statistics.MessageResent(MessageResendReason.Delay); m_connection.QueueSendMessage(om, m_storedMessages[i].SequenceNumber); m_storedMessages[i].LastSent = now; m_storedMessages[i].NumSent++; } } int num = GetAllowedSends(); if (num < 1) return; // queued sends while (m_queuedSends.Count > 0 && num > 0) { NetOutgoingMessage om; if (m_queuedSends.TryDequeue(out om)) ExecuteSend(now, om); num--; NetException.Assert(num == GetAllowedSends()); } } private void ExecuteSend(float now, NetOutgoingMessage message) { int seqNr = m_sendStart; m_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers; m_connection.QueueSendMessage(message, seqNr); int storeIndex = seqNr % m_windowSize; NetException.Assert(m_storedMessages[storeIndex].Message == null); m_storedMessages[storeIndex].NumSent++; m_storedMessages[storeIndex].Message = message; m_storedMessages[storeIndex].LastSent = now; m_storedMessages[storeIndex].SequenceNumber = seqNr; return; } private void DestoreMessage(int storeIndex) { NetOutgoingMessage storedMessage = m_storedMessages[storeIndex].Message; #if DEBUG if (storedMessage == null) throw new NetException("m_storedMessages[" + storeIndex + "].Message is null; sent " + m_storedMessages[storeIndex].NumSent + " times, last time " + (NetTime.Now - m_storedMessages[storeIndex].LastSent) + " seconds ago"); #else if (storedMessage != null) { #endif if (Interlocked.Decrement(ref storedMessage.m_recyclingCount) <= 0) m_connection.m_peer.Recycle(storedMessage); #if !DEBUG } #endif m_storedMessages[storeIndex] = new NetStoredReliableMessage(); } // remoteWindowStart is remote expected sequence number; everything below this has arrived properly // seqNr is the actual nr received internal override void ReceiveAcknowledge(float now, int seqNr) { // late (dupe), on time or early ack? int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart); if (relate < 0) { //m_connection.m_peer.LogDebug("Received late/dupe ack for #" + seqNr); return; // late/duplicate ack } if (relate == 0) { //m_connection.m_peer.LogDebug("Received right-on-time ack for #" + seqNr); // ack arrived right on time NetException.Assert(seqNr == m_windowStart); m_receivedAcks[m_windowStart] = false; DestoreMessage(m_windowStart % m_windowSize); m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; // advance window if we already have early acks while (m_receivedAcks.Get(m_windowStart)) { //m_connection.m_peer.LogDebug("Using early ack for #" + m_windowStart + "..."); m_receivedAcks[m_windowStart] = false; DestoreMessage(m_windowStart % m_windowSize); NetException.Assert(m_storedMessages[m_windowStart % m_windowSize].Message == null); // should already be destored m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; //m_connection.m_peer.LogDebug("Advancing window to #" + m_windowStart); } return; } // // early ack... (if it has been sent!) // // If it has been sent either the m_windowStart message was lost // ... or the ack for that message was lost // //m_connection.m_peer.LogDebug("Received early ack for #" + seqNr); int sendRelate = NetUtility.RelativeSequenceNumber(seqNr, m_sendStart); if (sendRelate <= 0) { // yes, we've sent this message - it's an early (but valid) ack if (m_receivedAcks[seqNr]) { // we've already destored/been acked for this message } else { m_receivedAcks[seqNr] = true; } } else if (sendRelate > 0) { // uh... we haven't sent this message yet? Weird, dupe or error... NetException.Assert(false, "Got ack for message not yet sent?"); return; } // Ok, lets resend all missing acks int rnr = seqNr; do { rnr--; if (rnr < 0) rnr = NetConstants.NumSequenceNumbers - 1; if (m_receivedAcks[rnr]) { // m_connection.m_peer.LogDebug("Not resending #" + rnr + " (since we got ack)"); } else { int slot = rnr % m_windowSize; NetException.Assert(m_storedMessages[slot].Message != null); if (m_storedMessages[slot].NumSent == 1) { // just sent once; resend immediately since we found gap in ack sequence NetOutgoingMessage rmsg = m_storedMessages[slot].Message; //m_connection.m_peer.LogVerbose("Resending #" + rnr + " (" + rmsg + ")"); if (now - m_storedMessages[slot].LastSent < (m_resendDelay * 0.35f)) { // already resent recently } else { m_storedMessages[slot].LastSent = now; m_storedMessages[slot].NumSent++; m_connection.m_statistics.MessageResent(MessageResendReason.HoleInSequence); m_connection.QueueSendMessage(rmsg, rnr); } } } } while (rnr != m_windowStart); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetReliableSequencedReceiver.cs ================================================ using System; namespace Lidgren.Network { internal sealed class NetReliableSequencedReceiver : NetReceiverChannelBase { private int m_windowStart; private int m_windowSize; public NetReliableSequencedReceiver(NetConnection connection, int windowSize) : base(connection) { m_windowSize = windowSize; } private void AdvanceWindow() { m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; } internal override void ReceiveMessage(NetIncomingMessage message) { int nr = message.m_sequenceNumber; int relate = NetUtility.RelativeSequenceNumber(nr, m_windowStart); // ack no matter what m_connection.QueueAck(message.m_receivedMessageType, nr); if (relate == 0) { // Log("Received message #" + message.SequenceNumber + " right on time"); // // excellent, right on time // AdvanceWindow(); m_peer.ReleaseMessage(message); return; } if (relate < 0) { m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING LATE or DUPE"); return; } // relate > 0 = early message if (relate > m_windowSize) { // too early message! m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); return; } // ok m_windowStart = (m_windowStart + relate) % NetConstants.NumSequenceNumbers; m_peer.ReleaseMessage(message); return; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetReliableUnorderedReceiver.cs ================================================ using System; namespace Lidgren.Network { internal sealed class NetReliableUnorderedReceiver : NetReceiverChannelBase { private int m_windowStart; private int m_windowSize; private NetBitVector m_earlyReceived; public NetReliableUnorderedReceiver(NetConnection connection, int windowSize) : base(connection) { m_windowSize = windowSize; m_earlyReceived = new NetBitVector(windowSize); } private void AdvanceWindow() { m_earlyReceived.Set(m_windowStart % m_windowSize, false); m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; } internal override void ReceiveMessage(NetIncomingMessage message) { int relate = NetUtility.RelativeSequenceNumber(message.m_sequenceNumber, m_windowStart); // ack no matter what m_connection.QueueAck(message.m_receivedMessageType, message.m_sequenceNumber); if (relate == 0) { // Log("Received message #" + message.SequenceNumber + " right on time"); // // excellent, right on time // //m_peer.LogVerbose("Received RIGHT-ON-TIME " + message); AdvanceWindow(); m_peer.ReleaseMessage(message); // release withheld messages int nextSeqNr = (message.m_sequenceNumber + 1) % NetConstants.NumSequenceNumbers; while (m_earlyReceived[nextSeqNr % m_windowSize]) { //message = m_withheldMessages[nextSeqNr % m_windowSize]; //NetException.Assert(message != null); // remove it from withheld messages //m_withheldMessages[nextSeqNr % m_windowSize] = null; //m_peer.LogVerbose("Releasing withheld message #" + message); //m_peer.ReleaseMessage(message); AdvanceWindow(); nextSeqNr++; } return; } if (relate < 0) { // duplicate m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE"); return; } // relate > 0 = early message if (relate > m_windowSize) { // too early message! m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); return; } m_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true); //m_peer.LogVerbose("Received " + message + " WITHHOLDING, waiting for " + m_windowStart); //m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message; m_peer.ReleaseMessage(message); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetSRP.cs ================================================ #define USE_SHA256 using System; using System.Security.Cryptography; using System.Text; namespace Lidgren.Network { /// /// Helper methods for implementing SRP authentication /// public static class NetSRP { private static readonly NetBigInteger N = new NetBigInteger("0115b8b692e0e045692cf280b436735c77a5a9e8a9e7ed56c965f87db5b2a2ece3", 16); private static readonly NetBigInteger g = NetBigInteger.Two; private static readonly NetBigInteger k = ComputeMultiplier(); private static HashAlgorithm GetHashAlgorithm() { #if USE_SHA256 // this does not seem to work as of yet return SHA256.Create(); #else return SHA1.Create(); #endif } /// /// Compute multiplier (k) /// private static NetBigInteger ComputeMultiplier() { string one = NetUtility.ToHexString(N.ToByteArrayUnsigned()); string two = NetUtility.ToHexString(g.ToByteArrayUnsigned()); string ccstr = one + two.PadLeft(one.Length, '0'); byte[] cc = NetUtility.ToByteArray(ccstr); var sha = GetHashAlgorithm(); var ccHashed = sha.ComputeHash(cc); return new NetBigInteger(NetUtility.ToHexString(ccHashed), 16); } /// /// Create 16 bytes of random salt /// public static byte[] CreateRandomSalt() { byte[] retval = new byte[16]; CryptoRandom.Instance.NextBytes(retval); return retval; } /// /// Create 32 bytes of random ephemeral value /// public static byte[] CreateRandomEphemeral() { byte[] retval = new byte[32]; CryptoRandom.Instance.NextBytes(retval); return retval; } /// /// Computer private key (x) /// public static byte[] ComputePrivateKey(string username, string password, byte[] salt) { var sha = GetHashAlgorithm(); byte[] tmp = Encoding.UTF8.GetBytes(username + ":" + password); byte[] innerHash = sha.ComputeHash(tmp); byte[] total = new byte[innerHash.Length + salt.Length]; Buffer.BlockCopy(salt, 0, total, 0, salt.Length); Buffer.BlockCopy(innerHash, 0, total, salt.Length, innerHash.Length); // x ie. H(salt || H(username || ":" || password)) return new NetBigInteger(NetUtility.ToHexString(sha.ComputeHash(total)), 16).ToByteArrayUnsigned(); } /// /// Creates a verifier that the server can later use to authenticate users later on (v) /// public static byte[] ComputeServerVerifier(byte[] privateKey) { NetBigInteger x = new NetBigInteger(NetUtility.ToHexString(privateKey), 16); // Verifier (v) = g^x (mod N) var serverVerifier = g.ModPow(x, N); return serverVerifier.ToByteArrayUnsigned(); } /// /// SHA hash data /// public static byte[] Hash(byte[] data) { var sha = GetHashAlgorithm(); return sha.ComputeHash(data); } /// /// Compute client public ephemeral value (A) /// public static byte[] ComputeClientEphemeral(byte[] clientPrivateEphemeral) // a { // A= g^a (mod N) NetBigInteger a = new NetBigInteger(NetUtility.ToHexString(clientPrivateEphemeral), 16); NetBigInteger retval = g.ModPow(a, N); return retval.ToByteArrayUnsigned(); } /// /// Compute server ephemeral value (B) /// public static byte[] ComputeServerEphemeral(byte[] serverPrivateEphemeral, byte[] verifier) // b { var b = new NetBigInteger(NetUtility.ToHexString(serverPrivateEphemeral), 16); var v = new NetBigInteger(NetUtility.ToHexString(verifier), 16); // B = kv + g^b (mod N) var bb = g.ModPow(b, N); var kv = v.Multiply(k); var B = (kv.Add(bb)).Mod(N); return B.ToByteArrayUnsigned(); } /// /// Compute intermediate value (u) /// public static byte[] ComputeU(byte[] clientPublicEphemeral, byte[] serverPublicEphemeral) { // u = SHA-1(A || B) string one = NetUtility.ToHexString(clientPublicEphemeral); string two = NetUtility.ToHexString(serverPublicEphemeral); int len = 66; // Math.Max(one.Length, two.Length); string ccstr = one.PadLeft(len, '0') + two.PadLeft(len, '0'); byte[] cc = NetUtility.ToByteArray(ccstr); var sha = GetHashAlgorithm(); var ccHashed = sha.ComputeHash(cc); return new NetBigInteger(NetUtility.ToHexString(ccHashed), 16).ToByteArrayUnsigned(); } /// /// Computes the server session value /// public static byte[] ComputeServerSessionValue(byte[] clientPublicEphemeral, byte[] verifier, byte[] udata, byte[] serverPrivateEphemeral) { // S = (Av^u) ^ b (mod N) var A = new NetBigInteger(NetUtility.ToHexString(clientPublicEphemeral), 16); var v = new NetBigInteger(NetUtility.ToHexString(verifier), 16); var u = new NetBigInteger(NetUtility.ToHexString(udata), 16); var b = new NetBigInteger(NetUtility.ToHexString(serverPrivateEphemeral), 16); NetBigInteger retval = v.ModPow(u, N).Multiply(A).Mod(N).ModPow(b, N).Mod(N); return retval.ToByteArrayUnsigned(); } /// /// Computes the client session value /// public static byte[] ComputeClientSessionValue(byte[] serverPublicEphemeral, byte[] xdata, byte[] udata, byte[] clientPrivateEphemeral) { // (B - kg^x) ^ (a + ux) (mod N) var B = new NetBigInteger(NetUtility.ToHexString(serverPublicEphemeral), 16); var x = new NetBigInteger(NetUtility.ToHexString(xdata), 16); var u = new NetBigInteger(NetUtility.ToHexString(udata), 16); var a = new NetBigInteger(NetUtility.ToHexString(clientPrivateEphemeral), 16); var bx = g.ModPow(x, N); var btmp = B.Add(N.Multiply(k)).Subtract(bx.Multiply(k)).Mod(N); return btmp.ModPow(x.Multiply(u).Add(a), N).ToByteArrayUnsigned(); } /// /// Create XTEA symmetrical encryption object from sessionValue /// public static NetXtea CreateEncryption(NetPeer peer, byte[] sessionValue) { var sha = GetHashAlgorithm(); var hash = sha.ComputeHash(sessionValue); var key = new byte[16]; for(int i=0;i<16;i++) { key[i] = hash[i]; for (int j = 1; j < hash.Length / 16; j++) key[i] ^= hash[i + (j * 16)]; } return new NetXtea(peer, key); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetSendResult.cs ================================================ using System; namespace Lidgren.Network { /// /// Result of a SendMessage call /// public enum NetSendResult { /// /// Message failed to enqueue because there is no connection /// FailedNotConnected = 0, /// /// Message was immediately sent /// Sent = 1, /// /// Message was queued for delivery /// Queued = 2, /// /// Message was dropped immediately since too many message were queued /// Dropped = 3 } } ================================================ FILE: ThirdParty/Lidgren.Network/NetSenderChannelBase.cs ================================================ using System; namespace Lidgren.Network { internal abstract class NetSenderChannelBase { // access this directly to queue things in this channel internal NetQueue m_queuedSends; internal abstract int WindowSize { get; } internal abstract int GetAllowedSends(); internal abstract NetSendResult Enqueue(NetOutgoingMessage message); internal abstract void SendQueuedMessages(float now); internal abstract void Reset(); internal abstract void ReceiveAcknowledge(float now, int sequenceNumber); } } ================================================ FILE: ThirdParty/Lidgren.Network/NetServer.cs ================================================ using System; using System.Collections.Generic; namespace Lidgren.Network { /// /// Specialized version of NetPeer used for "server" peers /// public class NetServer : NetPeer { /// /// NetServer constructor /// public NetServer(NetPeerConfiguration config) : base(config) { config.AcceptIncomingConnections = true; } /// /// Send a message to all connections /// /// The message to send /// How to deliver the message public void SendToAll(NetOutgoingMessage msg, NetDeliveryMethod method) { var all = this.Connections; if (all.Count <= 0) return; SendMessage(msg, all, method, 0); } /// /// Send a message to all connections except one /// /// The message to send /// How to deliver the message /// Don't send to this particular connection /// Which sequence channel to use for the message public void SendToAll(NetOutgoingMessage msg, NetConnection except, NetDeliveryMethod method, int sequenceChannel) { var all = this.Connections; if (all.Count <= 0) return; if (except == null) { SendMessage(msg, all, method, sequenceChannel); return; } List recipients = new List(all.Count - 1); foreach (var conn in all) if (conn != except) recipients.Add(conn); if (recipients.Count > 0) SendMessage(msg, recipients, method, sequenceChannel); } /// /// Returns a string that represents this object /// public override string ToString() { return "[NetServer " + ConnectionsCount + " connections]"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetStoredReliableMessage.cs ================================================ using System; namespace Lidgren.Network { internal struct NetStoredReliableMessage { public int NumSent; public float LastSent; public NetOutgoingMessage Message; public int SequenceNumber; public void Reset() { NumSent = 0; LastSent = 0; Message = null; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetTime.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define IS_STOPWATCH_AVAILABLE using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace Lidgren.Network { /// /// Time service /// public static class NetTime { #if IS_STOPWATCH_AVAILABLE private static readonly long s_timeInitialized = Stopwatch.GetTimestamp(); private static readonly double s_dInvFreq = 1.0 / (double)Stopwatch.Frequency; /// /// Get number of seconds since the application started /// public static double Now { get { return (double)(Stopwatch.GetTimestamp() - s_timeInitialized) * s_dInvFreq; } } #else private static readonly uint s_timeInitialized = (uint)Environment.TickCount; /// /// Get number of seconds since the application started /// public static double Now { get { return (double)((uint)Environment.TickCount - s_timeInitialized) / 1000.0; } } #endif /// /// Given seconds it will output a human friendly readable string (milliseconds if less than 60 seconds) /// public static string ToReadable(double seconds) { if (seconds > 60) return TimeSpan.FromSeconds(seconds).ToString(); return (seconds * 1000.0).ToString("N2") + " ms"; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetTuple.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace Lidgren.Network { // replace with BCL 4.0 Tuple<> when appropriate internal struct NetTuple { public A Item1; public B Item2; public NetTuple(A item1, B item2) { Item1 = item1; Item2 = item2; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetUPnP.cs ================================================ using System; using System.IO; using System.Xml; using System.Net; using System.Net.Sockets; using System.Threading; namespace Lidgren.Network { /// /// Status of the UPnP capabilities /// public enum UPnPStatus { /// /// Still discovering UPnP capabilities /// Discovering, /// /// UPnP is not available /// NotAvailable, /// /// UPnP is available and ready to use /// Available } /// /// UPnP support class /// public class NetUPnP { private const int c_discoveryTimeOutMillis = 1000; private string m_serviceUrl; private string m_serviceName = ""; private NetPeer m_peer; private ManualResetEvent m_discoveryComplete = new ManualResetEvent(false); internal float m_discoveryResponseDeadline; private UPnPStatus m_status; /// /// Status of the UPnP capabilities of this NetPeer /// public UPnPStatus Status { get { return m_status; } } /// /// NetUPnP constructor /// public NetUPnP(NetPeer peer) { m_peer = peer; m_discoveryResponseDeadline = float.MinValue; } internal void Discover(NetPeer peer) { string str = "M-SEARCH * HTTP/1.1\r\n" + "HOST: 239.255.255.250:1900\r\n" + "ST:upnp:rootdevice\r\n" + "MAN:\"ssdp:discover\"\r\n" + "MX:3\r\n\r\n"; m_status = UPnPStatus.Discovering; byte[] arr = System.Text.Encoding.UTF8.GetBytes(str); m_peer.LogDebug("Attempting UPnP discovery"); peer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); peer.RawSend(arr, 0, arr.Length, new IPEndPoint(IPAddress.Broadcast, 1900)); peer.Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false); // allow some extra time for router to respond // System.Threading.Thread.Sleep(50); m_discoveryResponseDeadline = (float)NetTime.Now + 6.0f; // arbitrarily chosen number, router gets 6 seconds to respond m_status = UPnPStatus.Discovering; } internal void ExtractServiceUrl(string resp) { #if !DEBUG try { #endif XmlDocument desc = new XmlDocument(); desc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream()); XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable); nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr); if (!typen.Value.Contains("InternetGatewayDevice")) return; m_serviceName = "WANIPConnection"; XmlNode node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:" + m_serviceName + ":1\"]/tns:controlURL/text()", nsMgr); if (node == null) { //try another service name m_serviceName = "WANPPPConnection"; node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:" + m_serviceName + ":1\"]/tns:controlURL/text()", nsMgr); if (node == null) return; } m_serviceUrl = CombineUrls(resp, node.Value); m_peer.LogDebug("UPnP service ready"); m_status = UPnPStatus.Available; m_discoveryComplete.Set(); #if !DEBUG } catch { m_peer.LogVerbose("Exception ignored trying to parse UPnP XML response"); return; } #endif } private static string CombineUrls(string gatewayURL, string subURL) { // Is Control URL an absolute URL? if ((subURL.Contains("http:")) || (subURL.Contains("."))) return subURL; gatewayURL = gatewayURL.Replace("http://", ""); // strip any protocol int n = gatewayURL.IndexOf("/"); if (n != -1) gatewayURL = gatewayURL.Substring(0, n); // Use first portion of URL return "http://" + gatewayURL + subURL; } private bool CheckAvailability() { switch (m_status) { case UPnPStatus.NotAvailable: return false; case UPnPStatus.Available: return true; case UPnPStatus.Discovering: if (m_discoveryComplete.WaitOne(c_discoveryTimeOutMillis)) return true; if (NetTime.Now > m_discoveryResponseDeadline) m_status = UPnPStatus.NotAvailable; return false; } return false; } /// /// Add a forwarding rule to the router using UPnP /// public bool ForwardPort(int port, string description) { if (!CheckAvailability()) return false; IPAddress mask; var client = NetUtility.GetMyAddress(out mask); if (client == null) return false; try { SOAPRequest(m_serviceUrl, "" + "" + "" + port.ToString() + "" + "" + ProtocolType.Udp.ToString().ToUpper(System.Globalization.CultureInfo.InvariantCulture) + "" + "" + port.ToString() + "" + "" + client.ToString() + "" + "1" + "" + description + "" + "0" + "", "AddPortMapping"); m_peer.LogDebug("Sent UPnP port forward request"); System.Threading.Thread.Sleep(50); } catch (Exception ex) { m_peer.LogWarning("UPnP port forward failed: " + ex.Message); return false; } return true; } /// /// Delete a forwarding rule from the router using UPnP /// public bool DeleteForwardingRule(int port) { if (!CheckAvailability()) return false; try { SOAPRequest(m_serviceUrl, "" + "" + "" + "" + port + "" + "" + ProtocolType.Udp.ToString().ToUpper(System.Globalization.CultureInfo.InvariantCulture) + "" + "", "DeletePortMapping"); return true; } catch (Exception ex) { m_peer.LogWarning("UPnP delete forwarding rule failed: " + ex.Message); return false; } } /// /// Retrieve the extern ip using UPnP /// public IPAddress GetExternalIP() { if (!CheckAvailability()) return null; try { XmlDocument xdoc = SOAPRequest(m_serviceUrl, "" + "", "GetExternalIPAddress"); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable); nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0"); string IP = xdoc.SelectSingleNode("//NewExternalIPAddress/text()", nsMgr).Value; return IPAddress.Parse(IP); } catch (Exception ex) { m_peer.LogWarning("Failed to get external IP: " + ex.Message); return null; } } private XmlDocument SOAPRequest(string url, string soap, string function) { string req = "" + "" + "" + soap + "" + ""; WebRequest r = HttpWebRequest.Create(url); r.Method = "POST"; byte[] b = System.Text.Encoding.UTF8.GetBytes(req); r.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:" + m_serviceName + ":1#" + function + "\""); r.ContentType = "text/xml; charset=\"utf-8\""; r.ContentLength = b.Length; r.GetRequestStream().Write(b, 0, b.Length); XmlDocument resp = new XmlDocument(); WebResponse wres = r.GetResponse(); Stream ress = wres.GetResponseStream(); resp.Load(ress); return resp; } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetUnreliableSenderChannel.cs ================================================ using System; using System.Threading; namespace Lidgren.Network { /// /// Sender part of Selective repeat ARQ for a particular NetChannel /// internal sealed class NetUnreliableSenderChannel : NetSenderChannelBase { private NetConnection m_connection; private int m_windowStart; private int m_windowSize; private int m_sendStart; private NetBitVector m_receivedAcks; internal override int WindowSize { get { return m_windowSize; } } internal NetUnreliableSenderChannel(NetConnection connection, int windowSize) { m_connection = connection; m_windowSize = windowSize; m_windowStart = 0; m_sendStart = 0; m_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers); m_queuedSends = new NetQueue(8); } internal override int GetAllowedSends() { int retval = m_windowSize - ((m_sendStart + NetConstants.NumSequenceNumbers) - m_windowStart) % m_windowSize; NetException.Assert(retval >= 0 && retval <= m_windowSize); return retval; } internal override void Reset() { m_receivedAcks.Clear(); m_queuedSends.Clear(); m_windowStart = 0; m_sendStart = 0; } internal override NetSendResult Enqueue(NetOutgoingMessage message) { int queueLen = m_queuedSends.Count + 1; int left = GetAllowedSends(); if (queueLen > left || (message.LengthBytes > m_connection.m_currentMTU && m_connection.m_peerConfiguration.UnreliableSizeBehaviour == NetUnreliableSizeBehaviour.DropAboveMTU)) { m_connection.Peer.Recycle(message); return NetSendResult.Dropped; } m_queuedSends.Enqueue(message); return NetSendResult.Sent; } // call this regularely internal override void SendQueuedMessages(float now) { int num = GetAllowedSends(); if (num < 1) return; // queued sends while (m_queuedSends.Count > 0 && num > 0) { NetOutgoingMessage om; if (m_queuedSends.TryDequeue(out om)) ExecuteSend(om); num--; } } private void ExecuteSend(NetOutgoingMessage message) { m_connection.m_peer.VerifyNetworkThread(); int seqNr = m_sendStart; m_sendStart = (m_sendStart + 1) % NetConstants.NumSequenceNumbers; m_connection.QueueSendMessage(message, seqNr); Interlocked.Decrement(ref message.m_recyclingCount); if (message.m_recyclingCount <= 0) m_connection.m_peer.Recycle(message); return; } // remoteWindowStart is remote expected sequence number; everything below this has arrived properly // seqNr is the actual nr received internal override void ReceiveAcknowledge(float now, int seqNr) { // late (dupe), on time or early ack? int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart); if (relate < 0) { //m_connection.m_peer.LogDebug("Received late/dupe ack for #" + seqNr); return; // late/duplicate ack } if (relate == 0) { //m_connection.m_peer.LogDebug("Received right-on-time ack for #" + seqNr); // ack arrived right on time NetException.Assert(seqNr == m_windowStart); m_receivedAcks[m_windowStart] = false; m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; return; } // Advance window to this position m_receivedAcks[seqNr] = true; while (m_windowStart != seqNr) { m_receivedAcks[m_windowStart] = false; m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers; } } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetUnreliableSequencedReceiver.cs ================================================ using System; namespace Lidgren.Network { internal sealed class NetUnreliableSequencedReceiver : NetReceiverChannelBase { private int m_lastReceivedSequenceNumber = -1; public NetUnreliableSequencedReceiver(NetConnection connection) : base(connection) { } internal override void ReceiveMessage(NetIncomingMessage msg) { int nr = msg.m_sequenceNumber; // ack no matter what m_connection.QueueAck(msg.m_receivedMessageType, nr); int relate = NetUtility.RelativeSequenceNumber(nr, m_lastReceivedSequenceNumber + 1); if (relate < 0) return; // drop if late m_lastReceivedSequenceNumber = nr; m_peer.ReleaseMessage(msg); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetUnreliableUnorderedReceiver.cs ================================================ using System; namespace Lidgren.Network { internal sealed class NetUnreliableUnorderedReceiver : NetReceiverChannelBase { public NetUnreliableUnorderedReceiver(NetConnection connection) : base(connection) { } internal override void ReceiveMessage(NetIncomingMessage msg) { // ack no matter what m_connection.QueueAck(msg.m_receivedMessageType, msg.m_sequenceNumber); m_peer.ReleaseMessage(msg); } } } ================================================ FILE: ThirdParty/Lidgren.Network/NetUtility.cs ================================================ /* Copyright (c) 2010 Michael Lidgren Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #if !__ANDROID__ && !IOS && !UNITY_WEBPLAYER && !UNITY_ANDROID && !UNITY_IPHONE #define IS_FULL_NET_AVAILABLE #endif using System; using System.Net; #if IS_FULL_NET_AVAILABLE using System.Net.NetworkInformation; #endif using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Security.Cryptography; namespace Lidgren.Network { /// /// Utility methods /// public static class NetUtility { /// /// Resolve endpoint callback /// public delegate void ResolveEndPointCallback(IPEndPoint endPoint); /// /// Resolve address callback /// public delegate void ResolveAddressCallback(IPAddress adr); /// /// Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number (asynchronous version) /// public static void ResolveAsync(string ipOrHost, int port, ResolveEndPointCallback callback) { ResolveAsync(ipOrHost, delegate(IPAddress adr) { if (adr == null) { callback(null); } else { callback(new IPEndPoint(adr, port)); } }); } /// /// Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number /// public static IPEndPoint Resolve(string ipOrHost, int port) { IPAddress adr = Resolve(ipOrHost); return new IPEndPoint(adr, port); } /// /// Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname (asynchronous version) /// public static void ResolveAsync(string ipOrHost, ResolveAddressCallback callback) { if (string.IsNullOrEmpty(ipOrHost)) throw new ArgumentException("Supplied string must not be empty", "ipOrHost"); ipOrHost = ipOrHost.Trim(); IPAddress ipAddress = null; if (IPAddress.TryParse(ipOrHost, out ipAddress)) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) { callback(ipAddress); return; } throw new ArgumentException("This method will not currently resolve other than ipv4 addresses"); } // ok must be a host name IPHostEntry entry; try { Dns.BeginGetHostEntry(ipOrHost, delegate(IAsyncResult result) { try { entry = Dns.EndGetHostEntry(result); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.HostNotFound) { //LogWrite(string.Format(CultureInfo.InvariantCulture, "Failed to resolve host '{0}'.", ipOrHost)); callback(null); return; } else { throw; } } if (entry == null) { callback(null); return; } // check each entry for a valid IP address foreach (IPAddress ipCurrent in entry.AddressList) { if (ipCurrent.AddressFamily == AddressFamily.InterNetwork) { callback(ipCurrent); return; } } callback(null); }, null); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.HostNotFound) { //LogWrite(string.Format(CultureInfo.InvariantCulture, "Failed to resolve host '{0}'.", ipOrHost)); callback(null); } else { throw; } } } /// /// Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname /// public static IPAddress Resolve(string ipOrHost) { if (string.IsNullOrEmpty(ipOrHost)) throw new ArgumentException("Supplied string must not be empty", "ipOrHost"); ipOrHost = ipOrHost.Trim(); IPAddress ipAddress = null; if (IPAddress.TryParse(ipOrHost, out ipAddress)) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) return ipAddress; throw new ArgumentException("This method will not currently resolve other than ipv4 addresses"); } // ok must be a host name try { var addresses = Dns.GetHostAddresses(ipOrHost); if (addresses == null) return null; foreach (var address in addresses) { if (address.AddressFamily == AddressFamily.InterNetwork) return address; } return null; } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.HostNotFound) { //LogWrite(string.Format(CultureInfo.InvariantCulture, "Failed to resolve host '{0}'.", ipOrHost)); return null; } else { throw; } } } #if IS_FULL_NET_AVAILABLE private static NetworkInterface GetNetworkInterface() { IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties(); if (computerProperties == null) return null; NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); if (nics == null || nics.Length < 1) return null; NetworkInterface best = null; foreach (NetworkInterface adapter in nics) { if (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback || adapter.NetworkInterfaceType == NetworkInterfaceType.Unknown) continue; if (!adapter.Supports(NetworkInterfaceComponent.IPv4)) continue; if (best == null) best = adapter; if (adapter.OperationalStatus != OperationalStatus.Up) continue; // make sure this adapter has any ipv4 addresses IPInterfaceProperties properties = adapter.GetIPProperties(); foreach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses) { if (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) { // Yes it does, return this network interface. return adapter; } } } return best; } /// /// Returns the physical (MAC) address for the first usable network interface /// public static PhysicalAddress GetMacAddress() { NetworkInterface ni = GetNetworkInterface(); if (ni == null) return null; return ni.GetPhysicalAddress(); } #endif /// /// Create a hex string from an Int64 value /// public static string ToHexString(long data) { return ToHexString(BitConverter.GetBytes(data)); } /// /// Create a hex string from an array of bytes /// public static string ToHexString(byte[] data) { return ToHexString(data, 0, data.Length); } /// /// Create a hex string from an array of bytes /// public static string ToHexString(byte[] data, int offset, int length) { char[] c = new char[length * 2]; byte b; for (int i = 0; i < length; ++i) { b = ((byte)(data[offset + i] >> 4)); c[i * 2] = (char)(b > 9 ? b + 0x37 : b + 0x30); b = ((byte)(data[offset + i] & 0xF)); c[i * 2 + 1] = (char)(b > 9 ? b + 0x37 : b + 0x30); } return new string(c); } /// /// Gets the local broadcast address /// public static IPAddress GetBroadcastAddress() { #if __ANDROID__ try{ Android.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Android.App.Application.Context.GetSystemService(Android.App.Activity.WifiService); if (wifi.IsWifiEnabled) { var dhcp = wifi.DhcpInfo; int broadcast = (dhcp.IpAddress & dhcp.Netmask) | ~dhcp.Netmask; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) { quads[k] = (byte) ((broadcast >> k * 8) & 0xFF); } return new IPAddress(quads); } } catch // Catch Access Denied Errors { return IPAddress.Broadcast; } #endif #if IS_FULL_NET_AVAILABLE try { NetworkInterface ni = GetNetworkInterface(); if (ni == null) { return null; } IPInterfaceProperties properties = ni.GetIPProperties(); foreach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses) { if (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) { var mask = unicastAddress.IPv4Mask; byte[] ipAdressBytes = unicastAddress.Address.GetAddressBytes(); byte[] subnetMaskBytes = mask.GetAddressBytes(); if (ipAdressBytes.Length != subnetMaskBytes.Length) throw new ArgumentException("Lengths of IP address and subnet mask do not match."); byte[] broadcastAddress = new byte[ipAdressBytes.Length]; for (int i = 0; i < broadcastAddress.Length; i++) { broadcastAddress[i] = (byte)(ipAdressBytes[i] | (subnetMaskBytes[i] ^ 255)); } return new IPAddress(broadcastAddress); } } } catch // Catch any errors { return IPAddress.Broadcast; } #endif return IPAddress.Broadcast; } /// /// Gets my local IPv4 address (not necessarily external) and subnet mask /// public static IPAddress GetMyAddress(out IPAddress mask) { mask = null; #if __ANDROID__ try { Android.Net.Wifi.WifiManager wifi = (Android.Net.Wifi.WifiManager)Android.App.Application.Context.GetSystemService(Android.App.Activity.WifiService); if (!wifi.IsWifiEnabled) return null; var dhcp = wifi.DhcpInfo; int addr = dhcp.IpAddress; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) { quads[k] = (byte) ((addr >> k * 8) & 0xFF); } return new IPAddress(quads); } catch // Catch Access Denied errors { return null; } #endif #if IS_FULL_NET_AVAILABLE NetworkInterface ni = GetNetworkInterface(); if (ni == null) { mask = null; return null; } IPInterfaceProperties properties = ni.GetIPProperties(); foreach (UnicastIPAddressInformation unicastAddress in properties.UnicastAddresses) { if (unicastAddress != null && unicastAddress.Address != null && unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) { mask = unicastAddress.IPv4Mask; return unicastAddress.Address; } } #endif return null; } /// /// Returns true if the IPEndPoint supplied is on the same subnet as this host /// public static bool IsLocal(IPEndPoint endPoint) { if (endPoint == null) return false; return IsLocal(endPoint.Address); } /// /// Returns true if the IPAddress supplied is on the same subnet as this host /// public static bool IsLocal(IPAddress remote) { IPAddress mask; IPAddress local = GetMyAddress(out mask); if (mask == null) return false; uint maskBits = BitConverter.ToUInt32(mask.GetAddressBytes(), 0); uint remoteBits = BitConverter.ToUInt32(remote.GetAddressBytes(), 0); uint localBits = BitConverter.ToUInt32(local.GetAddressBytes(), 0); // compare network portions return ((remoteBits & maskBits) == (localBits & maskBits)); } /// /// Returns how many bits are necessary to hold a certain number /// [CLSCompliant(false)] public static int BitsToHoldUInt(uint value) { int bits = 1; while ((value >>= 1) != 0) bits++; return bits; } /// /// Returns how many bytes are required to hold a certain number of bits /// public static int BytesToHoldBits(int numBits) { return (numBits + 7) / 8; } internal static UInt32 SwapByteOrder(UInt32 value) { return ((value & 0xff000000) >> 24) | ((value & 0x00ff0000) >> 8) | ((value & 0x0000ff00) << 8) | ((value & 0x000000ff) << 24); } internal static UInt64 SwapByteOrder(UInt64 value) { return ((value & 0xff00000000000000L) >> 56) | ((value & 0x00ff000000000000L) >> 40) | ((value & 0x0000ff0000000000L) >> 24) | ((value & 0x000000ff00000000L) >> 8) | ((value & 0x00000000ff000000L) << 8) | ((value & 0x0000000000ff0000L) << 24) | ((value & 0x000000000000ff00L) << 40) | ((value & 0x00000000000000ffL) << 56); } internal static bool CompareElements(byte[] one, byte[] two) { if (one.Length != two.Length) return false; for (int i = 0; i < one.Length; i++) if (one[i] != two[i]) return false; return true; } /// /// Convert a hexadecimal string to a byte array /// public static byte[] ToByteArray(String hexString) { byte[] retval = new byte[hexString.Length / 2]; for (int i = 0; i < hexString.Length; i += 2) retval[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16); return retval; } /// /// Converts a number of bytes to a shorter, more readable string representation /// public static string ToHumanReadable(long bytes) { if (bytes < 4000) // 1-4 kb is printed in bytes return bytes + " bytes"; if (bytes < 1000 * 1000) // 4-999 kb is printed in kb return Math.Round(((double)bytes / 1000.0), 2) + " kilobytes"; return Math.Round(((double)bytes / (1000.0 * 1000.0)), 2) + " megabytes"; // else megabytes } internal static int RelativeSequenceNumber(int nr, int expected) { return (nr - expected + NetConstants.NumSequenceNumbers + (NetConstants.NumSequenceNumbers / 2)) % NetConstants.NumSequenceNumbers - (NetConstants.NumSequenceNumbers / 2); // old impl: //int retval = ((nr + NetConstants.NumSequenceNumbers) - expected) % NetConstants.NumSequenceNumbers; //if (retval > (NetConstants.NumSequenceNumbers / 2)) // retval -= NetConstants.NumSequenceNumbers; //return retval; } /// /// Gets the window size used internally in the library for a certain delivery method /// public static int GetWindowSize(NetDeliveryMethod method) { switch (method) { case NetDeliveryMethod.Unknown: return 0; case NetDeliveryMethod.Unreliable: case NetDeliveryMethod.UnreliableSequenced: return NetConstants.UnreliableWindowSize; case NetDeliveryMethod.ReliableOrdered: return NetConstants.ReliableOrderedWindowSize; case NetDeliveryMethod.ReliableSequenced: case NetDeliveryMethod.ReliableUnordered: default: return NetConstants.DefaultWindowSize; } } // shell sort internal static void SortMembersList(System.Reflection.MemberInfo[] list) { int h; int j; System.Reflection.MemberInfo tmp; h = 1; while (h * 3 + 1 <= list.Length) h = 3 * h + 1; while (h > 0) { for (int i = h - 1; i < list.Length; i++) { tmp = list[i]; j = i; while (true) { if (j >= h) { if (string.Compare(list[j - h].Name, tmp.Name, StringComparison.InvariantCulture) > 0) { list[j] = list[j - h]; j -= h; } else break; } else break; } list[j] = tmp; } h /= 3; } } internal static NetDeliveryMethod GetDeliveryMethod(NetMessageType mtp) { if (mtp >= NetMessageType.UserReliableOrdered1) return NetDeliveryMethod.ReliableOrdered; else if (mtp >= NetMessageType.UserReliableSequenced1) return NetDeliveryMethod.ReliableSequenced; else if (mtp >= NetMessageType.UserReliableUnordered) return NetDeliveryMethod.ReliableUnordered; else if (mtp >= NetMessageType.UserSequenced1) return NetDeliveryMethod.UnreliableSequenced; return NetDeliveryMethod.Unreliable; } /// /// Creates a comma delimited string from a lite of items /// public static string MakeCommaDelimitedList(IList list) { var cnt = list.Count; StringBuilder bdr = new StringBuilder(cnt * 5); // educated guess for(int i=0;i /// Create a SHA1 digest from a string /// public static byte[] CreateSHA1Hash(string key) { using (var sha = new SHA1CryptoServiceProvider()) return sha.ComputeHash(Encoding.UTF8.GetBytes(key)); } /// /// Create a SHA1 digest from a byte buffer /// public static byte[] CreateSHA1Hash(byte[] data) { using (var sha = new SHA1CryptoServiceProvider()) return sha.ComputeHash(data); } /// /// Create a SHA1 digest from a byte buffer /// public static byte[] CreateSHA1Hash(byte[] data, int offset, int count) { using (var sha = new SHA1CryptoServiceProvider()) return sha.ComputeHash(data, offset, count); } } } ================================================ FILE: ThirdParty/Lidgren.Network/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("Lidgren.Network")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Lidgren.Network")] [assembly: AssemblyCopyright("Copyright © 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("78f2a988-46e1-4fc4-b7b4-dd2cbe46da6a")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("2012.1.7.0")] [assembly: AssemblyFileVersion("2012.1.7.0")] [assembly: System.CLSCompliant(true)] ================================================ FILE: ThirdParty/Lidgren.Network/Resources/Resource.Designer.cs ================================================ ================================================ FILE: ThirdParty/SharpFont/Windows/x64/SharpFont.XML ================================================ SharpFont A list of constants used for the glyph-to-script-map property to specify the script submodule the auto-hinter should use for hinting a particular glyph. Don't auto-hint this glyph. Apply the latin auto-hinter. For the auto-hinter, ‘latin’ is a very broad term, including Cyrillic and Greek also since characters from those scripts share the same design constraints. By default, characters from the following Unicode ranges are assigned to this submodule. U+0020 - U+007F // Basic Latin (no control characters) U+00A0 - U+00FF // Latin-1 Supplement (no control characters) U+0100 - U+017F // Latin Extended-A U+0180 - U+024F // Latin Extended-B U+0250 - U+02AF // IPA Extensions U+02B0 - U+02FF // Spacing Modifier Letters U+0300 - U+036F // Combining Diacritical Marks U+0370 - U+03FF // Greek and Coptic U+0400 - U+04FF // Cyrillic U+0500 - U+052F // Cyrillic Supplement U+1D00 - U+1D7F // Phonetic Extensions U+1D80 - U+1DBF // Phonetic Extensions Supplement U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement U+1E00 - U+1EFF // Latin Extended Additional U+1F00 - U+1FFF // Greek Extended U+2000 - U+206F // General Punctuation U+2070 - U+209F // Superscripts and Subscripts U+20A0 - U+20CF // Currency Symbols U+2150 - U+218F // Number Forms U+2460 - U+24FF // Enclosed Alphanumerics U+2C60 - U+2C7F // Latin Extended-C U+2DE0 - U+2DFF // Cyrillic Extended-A U+2E00 - U+2E7F // Supplemental Punctuation U+A640 - U+A69F // Cyrillic Extended-B U+A720 - U+A7FF // Latin Extended-D U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old Vietnamese, and some other scripts. By default, characters from the following Unicode ranges are assigned to this submodule. U+1100 - U+11FF // Hangul Jamo U+2E80 - U+2EFF // CJK Radicals Supplement U+2F00 - U+2FDF // Kangxi Radicals U+2FF0 - U+2FFF // Ideographic Description Characters U+3000 - U+303F // CJK Symbols and Punctuation U+3040 - U+309F // Hiragana U+30A0 - U+30FF // Katakana U+3100 - U+312F // Bopomofo U+3130 - U+318F // Hangul Compatibility Jamo U+3190 - U+319F // Kanbun U+31A0 - U+31BF // Bopomofo Extended U+31C0 - U+31EF // CJK Strokes U+31F0 - U+31FF // Katakana Phonetic Extensions U+3200 - U+32FF // Enclosed CJK Letters and Months U+3300 - U+33FF // CJK Compatibility U+3400 - U+4DBF // CJK Unified Ideographs Extension A U+4DC0 - U+4DFF // Yijing Hexagram Symbols U+4E00 - U+9FFF // CJK Unified Ideographs U+A960 - U+A97F // Hangul Jamo Extended-A U+AC00 - U+D7AF // Hangul Syllables U+D7B0 - U+D7FF // Hangul Jamo Extended-B U+F900 - U+FAFF // CJK Compatibility Ideographs U+FE10 - U+FE1F // Vertical forms U+FE30 - U+FE4F // CJK Compatibility Forms U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms U+1B000 - U+1B0FF // Kana Supplement U+1D300 - U+1D35F // Tai Xuan Hing Symbols U+1F200 - U+1F2FF // Enclosed Ideographic Supplement U+20000 - U+2A6DF // CJK Unified Ideographs Extension B U+2A700 - U+2B73F // CJK Unified Ideographs Extension C U+2B740 - U+2B81F // CJK Unified Ideographs Extension D U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement Apply the indic auto-hinter, covering all major scripts from the Indian sub-continent and some other related scripts like Thai, Lao, or Tibetan. By default, characters from the following Unicode ranges are assigned to this submodule. U+0900 - U+0DFF // Indic Range U+0F00 - U+0FFF // Tibetan U+1900 - U+194F // Limbu U+1B80 - U+1BBF // Sundanese U+1C80 - U+1CDF // Meetei Mayak U+A800 - U+A82F // Syloti Nagri U+11800 - U+118DF // Sharada Note that currently Indic support is rudimentary only, missing blue zone support. A structure used to hold an outline's bounding box, i.e., the coordinates of its extrema in the horizontal and vertical directions. Initializes a new instance of the struct. The left bound. The bottom bound. The right bound. The upper bound. Gets the horizontal minimum (left-most). Gets the vertical minimum (bottom-most). Gets the horizontal maximum (right-most). Gets the vertical maximum (top-most). Compares two instances of for equality. A . Another . A value indicating equality. Compares two instances of for inequality. A . Another . A value indicating inequality. Compares this instance of to another for equality. A . A value indicating equality. Compares this instance of to an object for equality. An object. A value indicating equality. Gets a unique hash code for this instance. A hash code. Gets a string that represents this instance. A string representation of this instance. This structure models a given BDF/PCF property. Gets the property type. Gets the atom string, if type is . Gets a signed integer, if type is . Gets an unsigned integer, if type is . A list of BDF property types. Value 0 is used to indicate a missing property. Property is a string atom. Property is a 32-bit signed integer. Property is a 32-bit unsigned integer. A list of constants used for the hinting-engine property to select the hinting engine for CFF fonts. Use the old FreeType hinting engine. Use the hinting engine contributed by Adobe. A list of bit-field constants used with to indicate the classic kern dialect or dialects. If the selected type doesn't fit, regards the table as invalid. Handle the ‘kern’ table as a classic Microsoft kern table. Handle the ‘kern’ table as a classic Apple kern table. Handle the ‘kern’ as either classic Apple or Microsoft kern table. A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various depths through the field. For now, the only pixel modes supported by FreeType are mono and grays. However, drivers might be added in the future to support more ‘colorful’ options. Initializes a new instance of the class. The parent . Finalizes an instance of the class. Gets a value indicating whether the has been disposed. Gets the number of bitmap rows. Gets the number of pixels in bitmap row. Gets the pitch's absolute value is the number of bytes taken by one bitmap row, including padding. However, the pitch is positive when the bitmap has a ‘down’ flow, and negative when it has an ‘up’ flow. In all cases, the pitch is an offset to add to a bitmap pointer in order to go down one row. Note that ‘padding’ means the alignment of a bitmap to a byte border, and FreeType functions normally align to the smallest possible integer value. For the B/W rasterizer, ‘pitch’ is always an even number. To change the pitch of a bitmap (say, to make it a multiple of 4), use . Alternatively, you might use callback functions to directly render to the application's surface; see the file ‘example2.cpp’ in the tutorial for a demonstration. Gets a typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases. Gets the number of gray levels used in the bitmap. This field is only used with . Gets the pixel mode, i.e., how pixel bits are stored. Gets how the palette is stored. This field is intended for paletted pixel modes. Gets a typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Gets the 's buffer as a byte array. Copy a bitmap into another one. A handle to a library object. A handle to the target bitmap. Embolden a bitmap. The new bitmap will be about ‘xStrength’ pixels wider and ‘yStrength’ pixels higher. The left and bottom borders are kept unchanged. The current implementation restricts ‘xStrength’ to be less than or equal to 8 if bitmap is of pixel_mode . If you want to embolden the bitmap owned by a , you should call on the slot first. A handle to a library object. How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format. How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format. Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a bitmap object with depth 8bpp, making the number of used bytes per line (a.k.a. the ‘pitch’) a multiple of ‘alignment’. It is possible to call multiple times without calling (the memory is simply reallocated). Use to finally remove the bitmap object. The ‘library’ argument is taken to have access to FreeType's memory handling functions. A handle to a library object. The pitch of the bitmap is a multiple of this parameter. Common values are 1, 2, or 4. The target bitmap. Copies the contents of the to a . A containing this bitmap's data. Disposes an instance of the class. A structure used for bitmap glyph images. This really is a ‘sub-class’ of . You can typecast an to if you have ‘ == ’. This lets you access the bitmap's contents easily. The corresponding pixel buffer is always owned by and is thus created and destroyed with it. Finalizes an instance of the class. Gets a value indicating whether the object has been disposed. Gets the root fields. Gets the left-side bearing, i.e., the horizontal distance from the current pen position to the left border of the glyph bitmap. Gets the top-side bearing, i.e., the vertical distance from the current pen position to the top border of the glyph bitmap. This distance is positive for upwards y! Gets a descriptor for the bitmap. Casts a back up to a . The eqivalent of . A . A . A CLS-compliant version of the implicit cast to . A . Disposes an instance of the class. This structure models the metrics of a bitmap strike (i.e., a set of glyphs for a given point size and resolution) in a bitmap font. It is used for the field of . Windows FNT: The nominal size given in a FNT font is not reliable. Thus when the driver finds it incorrect, it sets ‘size’ to some calculated values and sets ‘x_ppem’ and ‘y_ppem’ to the pixel width and height given in the font, respectively. TrueType embedded bitmaps: ‘size’, ‘width’, and ‘height’ values are not contained in the bitmap strike itself. They are computed from the global font parameters. Gets the vertical distance, in pixels, between two consecutive baselines. It is always positive. Gets the average width, in pixels, of all glyphs in the strike. Gets the nominal size of the strike in 26.6 fractional points. This field is not very useful. Gets the horizontal ppem (nominal width) in 26.6 fractional pixels. Gets the vertical ppem (nominal height) in 26.6 fractional pixels. An opaque handle used to model a charmap cache. This cache is to hold character codes -> glyph indices mappings. Initializes a new instance of the class. Like all other caches, this one will be destroyed with the cache manager. A handle to the cache manager. Translate a character code into a glyph index, using the charmap cache. The source face ID. The index of the charmap in the source face. Any negative value means to use the cache 's default charmap. The character code (in the corresponding charmap). Glyph index. 0 means ‘no glyph’. A callback function provided by client applications. It is used by the cache manager to translate a given FTC_FaceID into a new valid object, on demand. The third parameter ‘req_data’ is the same as the one passed by the client when is called. The face requester should not perform funny things on the returned face object, like creating a new for it, or setting a transformation through ! The face ID to resolve. A handle to a FreeType library object. Application-provided request data (see note below). A new handle. FreeType error code. 0 means success. A handle to an glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold. Initializes a new instance of the class. The parent manager for the image cache. Retrieve a given glyph image from a glyph image cache. The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with and modify the new one. If ‘node’ is not NULL, it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the ) will always be kept in the cache until you call to ‘release’ it. If ‘node’ is NULL, the cache node is left unchanged, which means that the could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! A pointer to a glyph image type descriptor. The glyph index to retrieve. Used to return the address of of the corresponding cache node after incrementing its reference count (see note below). The corresponding object. 0 in case of failure. A variant of that uses a to specify the face ID and its size. The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with and modify the new one. If ‘node’ is not NULL, it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the ) will always be kept in the cache until you call to ‘release’ it. If ‘node’ is NULL, the cache node is left unchanged, which means that the could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! Calls to and friends have no effect on cached glyphs; you should always use the FreeType cache API instead. A pointer to a scaler descriptor. The corresponding load flags. The glyph index to retrieve. Used to return the address of of the corresponding cache node after incrementing its reference count (see note below). The corresponding object. 0 in case of failure. A structure used to model the type of images in a glyph cache. Gets the face ID. Gets the width in pixels. Gets the height in pixels. Gets the load flags, as in This object corresponds to one instance of the cache-subsystem. It is used to cache one or more objects, along with corresponding objects. The manager intentionally limits the total number of opened and objects to control memory usage. See the ‘max_faces’ and ‘max_sizes’ parameters of . The manager is also used to cache ‘nodes’ of various types while limiting their total memory usage. All limitations are enforced by keeping lists of managed objects in most-recently-used order, and flushing old nodes to make room for new ones. Initializes a new instance of the Manager class. The parent FreeType library handle to use. Maximum number of opened objects managed by this cache instance. Use 0 for defaults. Maximum number of opened objects managed by this cache instance. Use 0 for defaults. Maximum number of bytes to use for cached data nodes. Use 0 for defaults. Note that this value does not account for managed and objects. An application-provided callback used to translate face IDs into real objects. A generic pointer that is passed to the requester each time it is called (see ). Finalizes an instance of the Manager class. Gets a value indicating whether the object has been disposed. Empty a given cache manager. This simply gets rid of all the currently cached and objects within the manager. Retrieve the object that corresponds to a given face ID through a cache manager. The returned object is always owned by the manager. You should never try to discard it yourself. The object doesn't necessarily have a current size object (i.e., can be 0). If you need a specific ‘font size’, use instead. Never change the face's transformation matrix (i.e., never call the function) on a returned face! If you need to transform glyphs, do it yourself after glyph loading. When you perform a lookup, out-of-memory errors are detected within the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed. If a lookup fails with the cache has already been completely flushed, and still no memory was available for the operation. The ID of the face object. A handle to the face object. Retrieve the object that corresponds to a given pointer through a cache manager. The returned object is always owned by the/ manager. You should never try to discard it by yourself. You can access the parent object simply as if you need it. Note that this object is also owned by the manager. When you perform a lookup, out-of-memory errors are detected within the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed. If a lookup fails with the cache has already been completely flushed, and still no memory is available for the operation. A scaler handle. A handle to the size object. A special function used to indicate to the cache manager that a given FTC_FaceID is no longer valid, either because its content changed, or because it was deallocated or uninstalled. This function flushes all nodes from the cache corresponding to this ‘faceID’, with the exception of nodes with a non-null reference count. Such nodes are however modified internally so as to never appear in later lookups with the same ‘faceID’ value, and to be immediately destroyed when released by all their users. The FTC_FaceID to be removed. Disposes the Manager. An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of 0 might be flushed out of a full cache whenever a lookup request is performed. If you look up nodes, you have the ability to ‘acquire’ them, i.e., to increment their reference count. This will prevent the node from being flushed out of the cache until you explicitly ‘release’ it. Decrement a cache node's internal reference count. When the count reaches 0, it is not destroyed but becomes eligible for subsequent cache flushes. The cache manager handle. A handle to a small bitmap cache. These are special cache objects used to store small glyph bitmaps (and anti-aliased pixmaps) in a much more efficient way than the traditional glyph image cache implemented by . Gets the bitmap width in pixels. Gets the bitmap height in pixels. Gets the horizontal distance from the pen position to the left bitmap border (a.k.a. ‘left side bearing’, or ‘lsb’). Gets the vertical distance from the pen position (on the baseline) to the upper bitmap border (a.k.a. ‘top side bearing’). The distance is positive for upwards y coordinates. Gets the format of the glyph bitmap (monochrome or gray). Gets the maximum gray level value (in the range 1 to 255). Gets the number of bytes per bitmap line. May be positive or negative. Gets the horizontal advance width in pixels. Gets the vertical advance height in pixels. Gets a pointer to the bitmap pixels. A handle to a small bitmap cache. These are special cache objects used to store small glyph bitmaps (and anti-aliased pixmaps) in a much more efficient way than the traditional glyph image cache implemented by . Initializes a new instance of the class. A handle to the source cache manager. Look up a given small glyph bitmap in a given sbit cache and ‘lock’ it to prevent its flushing from the cache until needed. The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data. The descriptor's ‘buffer’ field is set to 0 to indicate a missing glyph bitmap. If ‘node’ is not NULL, it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call to ‘release’ it. If ‘node’ is NULL, the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! A pointer to the glyph image type descriptor. The glyph index. Used to return the address of of the corresponding cache node after incrementing its reference count (see note below). A handle to a small bitmap descriptor. A variant of that uses a to specify the face ID and its size. The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data. The descriptor's ‘buffer’ field is set to 0 to indicate a missing glyph bitmap. If ‘node’ is not NULL, it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call to ‘release’ it. If ‘node’ is NULL, the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent! A pointer to the scaler descriptor. The corresponding load flags. The glyph index. Used to return the address of of the corresponding cache node after incrementing its reference count (see note below). A handle to a small bitmap descriptor. A structure used to describe a given character size in either pixels or points to the cache manager. This type is mainly used to retrieve objects through the cache manager. Gets the source face ID. Gets the character width. Gets the character height. Gets a boolean. If true, the ‘width’ and ‘height’ fields are interpreted as integer pixel character sizes. Otherwise, they are expressed as 1/64th of points. Gets the horizontal resolution in dpi; only used when ‘pixel’ is value 0. Gets the vertical resolution in dpi; only used when ‘pixel’ is value 0. The base charmap structure. Gets a handle to the parent face object. Gets an tag identifying the charmap. Use this with . Gets an ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and should be emulated for other formats. Gets a platform specific encoding number. This also comes from the TrueType specification and should be emulated similarly. Retrieve index of a given charmap. The index into the array of character maps within the face to which ‘charmap’ belongs. Return TrueType/sfnt specific cmap language ID. Definitions of language ID values are in ‘freetype/ttnameid.h’. The language ID of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, just return 0 as the default value. Return TrueType/sfnt specific cmap format. The format of ‘charmap’. If ‘charmap’ doesn't belong to a TrueType/sfnt face, return -1. Read-only binary data represented as a pointer and a length. Gets the data. Gets the length of the data in bytes. An enumeration used to specify character sets supported by charmaps. Used in the FT_Select_Charmap API function. Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, etc.). Other encodings might be defined in the future. The encoding value 0 is reserved. Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols in the 32..255 character code range. Corresponds to the Unicode character set. This value covers all versions of the Unicode repertoire, including ASCII and Latin-1. Most fonts include a Unicode charmap, but not all of them. For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for FT_Get_Char_Index. Corresponds to Japanese SJIS encoding. Corresponds to an encoding system for Simplified Chinese as used used in mainland China. Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong. Corresponds to the Korean encoding system known as Wansung. The Korean standard character set (KS C 5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangeul character combinations. Corresponds to the Adobe Standard encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. Corresponds to the Adobe Expert encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. Corresponds to a custom encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes. Corresponds to a Latin-1 encoding as defined in a Type 1 PostScript font. It is limited to 256 character codes. This value is deprecated and was never used nor reported by FreeType. Don't use or test for it. Corresponds to the 8-bit Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this encoding, since older versions of Mac OS are able to use it. Windows FNT Header info. A list of valid values for the ‘charset’ byte in . Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT. ANSI encoding. A superset of ISO 8859-1. This is used for font enumeration and font creation as a ‘don't care’ value. Valid font files don't contain this value. When querying for information about the character set of the font that is currently selected into a specified device context, this return value (of the related Windows API) simply denotes failure. There is no known mapping table available. Mac Roman encoding. A superset of Japanese Shift-JIS (with minor deviations). A superset of Korean Hangul KS C 5601-1987 (with different ordering and minor deviations). Korean (Johab). A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations). A superset of traditional Chinese Big 5 ETen (with different ordering and minor deviations). A superset of Greek ISO 8859-7 (with minor modifications). A superset of Turkish ISO 8859-9. For Vietnamese. This encoding doesn't cover all necessary characters. A superset of Hebrew ISO 8859-8 (with some modifications). A superset of Arabic ISO 8859-6 (with different ordering). A superset of Baltic ISO 8859-13 (with some deviations). A superset of Russian ISO 8859-5 (with different ordering). A superset of Thai TIS 620 and ISO 8859-11. A superset of East European ISO 8859-2 (with slightly different ordering). From Michael Pöttgen <michael@poettgen.de>: The ‘Windows Font Mapping’ article says that is used for the charset of vector fonts, like ‘modern.fon’, ‘roman.fon’, and ‘script.fon’ on Windows. The ‘CreateFont’ documentation says: The value specifies a character set that is operating-system dependent. The ‘IFIMETRICS’ documentation from the ‘Windows Driver Development Kit’ says: This font supports an OEM-specific character set. The OEM character set is system dependent. In general OEM, as opposed to ANSI (i.e., cp1252), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from , and is used for the ‘DOS boxes’, to support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM codepage 850. An iterator function which is called during a list parse by . The current iteration list node. A typeless pointer passed to . Can be used to point to the iteration's state. Error code. An iterator function which is called during a list finalization by to destroy all elements in a given list. The current system object. The current object to destroy. A typeless pointer passed to . It can be used to point to the iteration's state. A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType. Gets the head (first element) of doubly-linked list. Gets the tail (last element) of doubly-linked list. Find the list node for a given listed object. The address of the listed object. List node. NULL if it wasn't found. Append an element to the end of a list. The node to append. Insert an element at the head of a list. The node to insert. Remove a node from a list. This function doesn't check whether the node is in the list! The node to remove. Move a node to the head/top of a list. Used to maintain LRU lists. The node to move. Parse a list and calls a given iterator function on each element. Note that parsing is stopped as soon as one of the iterator calls returns a non-zero value. An iterator function, called on each node of the list. A user-supplied field which is passed as the second argument to the iterator. Destroy all elements in the list as well as the list itself. This function expects that all nodes added by or have been dynamically allocated. A list destructor that will be applied to each element of the list. The current memory object which handles deallocation. A user-supplied field which is passed as the last argument to the destructor. The data exchange structure for the glyph-to-script-map property. Initializes a new instance of the class. The face to apply the property to. Gets or sets the associated face. Gets or sets the associated map. The data exchange structure for the increase-x-height property. Initializes a new instance of the class. The face to increase the X height of. Gets or sets the associated face. Gets or sets the limit property. Internally represents a Bitmap. Refer to for FreeType documentation. Internally represents a BitmapSize. Refer to for FreeType documentation. Internally represents a CharMap. Refer to for FreeType documentation. Internally represents a Face. Refer to for FreeType documentation. Internally represents a GlyphMetrics. Refer to for FreeType documentation. Internally represents a GlyphSlot. Refer to for FreeType documentation. Internally represents a . Refer to for FreeType documentation. A list of values to identify various types of LCD filters. Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color fringes. The default filter reduces color fringes considerably, at the cost of a slight blurriness in the output. The light filter is a variant that produces less blurriness at the cost of slightly more color fringes than the default one. It might be better, depending on taste, your monitor, or your personal vision. This filter corresponds to the original libXft color filter. It provides high contrast output but can exhibit really bad color fringes if glyphs are not extremely well hinted to the pixel grid. In other words, it only works well if the TrueType bytecode interpreter is enabled and high-quality hinted fonts are used. This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the future. A structure used to hold a single list element. Gets the previous element in the list. NULL if first. Gets the next element in the list. NULL if last. Gets a typeless pointer to the listed object. A function used to allocate ‘size’ bytes from ‘memory’. A handle to the source memory manager. The size in bytes to allocate. Address of new memory block. 0 in case of failure. A function used to release a given block of memory. A handle to the source memory manager. The address of the target memory block. A function used to re-allocate a given block of memory. In case of error, the old block must still be available. A handle to the source memory manager. The block's current size in bytes. The block's requested new size. The block's current address. New block address. 0 in case of memory shortage. A structure used to describe a given memory manager to FreeType 2. Gets a generic typeless pointer for user data. Gets a pointer type to an allocation function. Gets a pointer type to an memory freeing function. Gets a pointer type to a reallocation function. Decompress a zipped input buffer into an output buffer. This function is modeled after zlib's ‘uncompress’ function. This function may return if your build of FreeType was not compiled with zlib support. The input buffer. The output buffer. The length of the used data in output. A function used to initialize (not create) a new module object. The module to initialize. FreeType error code. A function used to finalize (not destroy) a given module object. The module to finalize. A function used to query a given module for a specific interface. The module that contains the interface. The name of the interface in the module. The interface. The module class descriptor. Gets bit flags describing the module. Gets the size of one module object/instance in bytes. Gets the name of the module. Gets the version, as a 16.16 fixed number (major.minor). Gets the version of FreeType this module requires, as a 16.16 fixed number (major.minor). Starts at version 2.0, i.e., 0x20000. Gets the initializing function. Gets the finalizing function. Gets the interface requesting function. A simple structure used to model a given axis in design space for Multiple Masters fonts. This structure can't be used for GX var fonts. Gets the axis's name. Gets the axis's minimum design coordinate. Gets the axis's maximum design coordinate. A structure used to model the axes and space of a Multiple Masters or GX var distortable font. Some fields are specific to one format and not to the other. Gets the number of axes. The maximum value is 4 for MM; no limit in GX. Gets the number of designs; should be normally 2^num_axis for MM fonts. Not meaningful for GX (where every glyph could have a different number of designs). Gets the number of named styles; only meaningful for GX which allows certain design coordinates to have a string ID (in the ‘name’ table) associated with them. The font can tell the user that, for example, Weight=1.5 is ‘Bold’. Gets a table of axis descriptors. GX fonts contain slightly more data than MM. Gets a table of named styles. Only meaningful with GX. A structure used to model the axes and space of a Multiple Masters font. This structure can't be used for GX var fonts. Gets the number of axes. Cannot exceed 4. Gets the number of designs; should be normally 2^num_axis even though the Type 1 specification strangely allows for intermediate designs to be present. This number cannot exceed 16. Gets a table of axis descriptors. A simple structure used to model a given axis in design space for Multiple Masters and GX var fonts. Gets the axis's name. Not always meaningful for GX. Gets the axis's minimum design coordinate. Gets the axis's default design coordinate. FreeType computes meaningful default values for MM; it is then an integer value, not in 16.16 format. Gets the axis's maximum design coordinate. Gets the axis's tag (the GX equivalent to ‘name’). FreeType provides default values for MM if possible. Gets the entry in ‘name’ table (another GX version of ‘name’). Not meaningful for MM. A simple structure used to model a named style in a GX var font. This structure can't be used for MM fonts. Gets the design coordinates for this style. This is an array with one entry for each axis. Gets the entry in ‘name’ table identifying this style. A list of bit-field constants used with to indicate which OpenType tables should be validated. Validate BASE table. Validate GDEF table. Validate GPOS table. Validate GSUB table. Validate JSTF table. Validate MATH table. Validate all OpenType tables. A list of values used to describe an outline's contour orientation. The TrueType and PostScript specifications use different conventions to determine whether outline contours should be filled or unfilled. According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must be unfilled. According to the PostScript specification, counter-clockwise contours must be filled, and clockwise ones must be unfilled. This is identical to , but is used to remember that in TrueType, everything that is to the right of the drawing direction of a contour must be filled. This is identical to , but is used to remember that in PostScript, everything that is to the left of the drawing direction of a contour must be filled. The orientation cannot be determined. That is, different parts of the glyph have different orientation. A structure used for outline (vectorial) glyph images. This really is a ‘sub-class’ of . You can typecast an to if you have ‘ == ’. This lets you access the outline's content easily. As the outline is extracted from a glyph slot, its coordinates are expressed normally in 26.6 pixels, unless the flag was used in or . The outline's tables are always owned by the object and are destroyed with it. Finalizes an instance of the class. Gets a value indicating whether the object has been disposed. Gets the root fields. Gets a descriptor for the outline. Casts a back up to a . The eqivalent of . A . A . A CLS-compliant version of the implicit cast to . A . Disposes an instance of the class. Helpful methods to make marshalling simpler. A generic wrapper for . The type to cast to. The pointer that holds the struct. A marshalled struct. A method to copy data from one pointer to another, byte by byte. The source pointer. The destination pointer. The number of bytes to copy. A structure used to represent data in a CID top-level dictionary. A structure used to represent CID Face information. A structure used to model a Type 1 or Type 2 FontInfo dictionary. Note that for Multiple Master fonts, each instance has its own FontInfo dictionary. A structure used to model a Type 1 or Type 2 private dictionary. Note that for Multiple Master fonts, each instance has its own Private dictionary. An enumeration used in calls to to identify the Type 1 dictionary entry to retrieve. The font's type. Type 1 fonts must have a value of 1. The font's matrix. Typically scaled 1000:1. The font's general bounding box. The font's method of painting characters. Type 1 only supports fill (0) and outline (2). The font's name. A unique identifier for popular fonts assigned by Adobe. The number of characters the font can draw. The number of charstring subroutines in the font. The font's subroutines. An array with only one real number entry expressing the dominant width of horizontal stems (measured vertically in character space units). An array with only one real number entry expressing the dominant width of vertical stems (measured horizontally in character space units). The number of BlueValues the font defines. The value must be at least 0 and at most 14. (7 integer pairs). An array of integer pairs. The first pair must be the base overshoot position and the base-line. An optional entry that specifies the number of character space units to extend (in both directions) the effect of an alignment zone on a horizontal stem. The default value is 1. The number of OtherBlue values. The value must be at least 0 and at most 10 (5 integer pairs). An optional array of integer pairs very similar to those in . The number of FamilyBlue values. An array of integer pairs very similar to those in . The number of FamilyOtherBlue values. An array of integer pairs very similar to those in . An optional entry that controls the point size at which overshoot suppression ceases. The default value is 0.039625. An optional entry that indicates a character space distance beyond the flat position of alignment zones at which overshoot enforcement for character features occurs. The default value is 7. The number of StemSnapH values. Cannot exceed 12. An array of up to 12 real numbers of the most common widths (including the dominant width given in the StdHW array) for horizontal stems (measured vertically). These widths must be sorted in increasing order. The number of StemSnapV values. Cannot exceed 12. An array of up to 12 real numbers of the most common widths (including the dominant width given in the StdVW array) for vertical stems (measured horizontally). These widths must be sorted in increasing order. A boolean value indicating whether to force bold characters when a regular character is drawn 1-pixel wide. Compatibility entry. Use only for font programs in language group 1. Obsolete. Set to {16 16}. Required. An integer specifying the number of random bytes at the beginning of charstrings for encryption. By default this value is 4. Compatibility entry. Set to 5839. Identifies the language group of the font. A value of 0 indicates a language that uses Latin, Greek, Cyrillic, etc. characters. A value of 1 indicates a language that consists of Chinese ideographs, Jpaanese Kanji, and Korean Hangul. The default value is 0. A set of flags used to indicate which fields are present in a given blend dictionary (font info or private). Used to support Multiple Masters fonts. An enumeration describing the ‘Encoding’ entry in a Type 1 dictionary. A handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap. A list of bit flag constants as used in the ‘flags’ field of a structure. This value is 0. This flag is set to indicate that an anti-aliased glyph image should be generated. Otherwise, it will be monochrome (1-bit). This flag is set to indicate direct rendering. In this mode, client applications must provide their own span callback. This lets them directly draw or compose over an existing bitmap. If this bit is not set, the target pixmap's buffer must be zeroed before rendering. Note that for now, direct rendering is only possible with anti-aliased glyphs. This flag is only used in direct rendering mode. If set, the output will be clipped to a box specified in the ‘clip_box’ field of the structure. Note that by default, the glyph bitmap is clipped to the target pixmap, except in direct rendering mode where all spans are generated if no clipping box is set. A function used to create a new raster object. The ‘memory’ parameter is a typeless pointer in order to avoid un-wanted dependencies on the rest of the FreeType code. In practice, it is an object, i.e., a handle to the standard FreeType memory allocator. However, this field can be completely ignored by a given raster implementation. A handle to the memory allocator. A handle to the new raster object. Error code. 0 means success. A function used to destroy a given raster object. A handle to the raster object. FreeType provides an area of memory called the ‘render pool’, available to all registered rasters. This pool can be freely used during a given scan-conversion but is shared by all rasters. Its content is thus transient. This function is called each time the render pool changes, or just after a new raster object is created. Rasters can ignore the render pool and rely on dynamic memory allocation if they want to (a handle to the memory allocator is passed to the raster constructor). However, this is not recommended for efficiency purposes. A handle to the new raster object. The address in memory of the render pool. The size in bytes of the render pool. This function is a generic facility to change modes or attributes in a given raster. This can be used for debugging purposes, or simply to allow implementation-specific ‘features’ in a given raster module. A handle to the new raster object. A 4-byte tag used to name the mode or property. A pointer to the new mode/property to use. Invoke a given raster to scan-convert a given glyph image into a target bitmap. The exact format of the source image depends on the raster's glyph format defined in its structure. It can be an or anything else in order to support a large array of glyph formats. Note also that the render function can fail and return a error code if the raster used does not support direct composition. XXX: For now, the standard raster doesn't support direct composition but this should change for the final release (see the files ‘demos/src/ftgrays.c’ and ‘demos/src/ftgrays2.c’ for examples of distinct implementations which support direct composition). A handle to the raster object. A pointer to an structure used to store the rendering parameters. Error code. 0 means success. A structure used to describe a given raster class to the library. Gets the supported glyph format for this raster. Gets the raster constructor. Gets a function used to reset the render pool within the raster. Gets a function to set or change modes. Gets a function to render a glyph into a given bitmap. Gets the raster destructor. A function used as a call-back by the anti-aliased renderer in order to let client applications draw themselves the gray pixel spans on each scan line. This callback allows client applications to directly render the gray spans of the anti-aliased bitmap to any kind of surfaces. This can be used to write anti-aliased outlines directly to a given background bitmap, and even perform translucency. Note that the ‘count’ field cannot be greater than a fixed value defined by the ‘FT_MAX_GRAY_SPANS’ configuration macro in ‘ftoption.h’. By default, this value is set to 32, which means that if there are more than 32 spans on a given scanline, the callback is called several times with the same ‘y’ parameter in order to draw all callbacks. Otherwise, the callback is only called once per scan-line, and only for those scanlines that do have ‘gray’ pixels on them. The scanline's y coordinate. The number of spans to draw on this scanline. A table of ‘count’ spans to draw on the scanline. User-supplied data that is passed to the callback. THIS TYPE IS DEPRECATED. DO NOT USE IT. A function used as a call-back by the monochrome scan-converter to test whether a given target pixel is already set to the drawing ‘color’. These tests are crucial to implement drop-out control per-se the TrueType spec. The pixel's y coordinate. The pixel's x coordinate. User-supplied data that is passed to the callback. 1 if the pixel is ‘set’, 0 otherwise. THIS TYPE IS DEPRECATED. DO NOT USE IT. A function used as a call-back by the monochrome scan-converter to set an individual target pixel. This is crucial to implement drop-out control according to the TrueType specification. The pixel's y coordinate. The pixel's x coordinate. User-supplied data that is passed to the callback. A structure to hold the arguments used by a raster's render function. An anti-aliased glyph bitmap is drawn if the bit flag is set in the ‘flags’ field, otherwise a monochrome bitmap is generated. If the bit flag is set in ‘flags’, the raster will call the ‘gray_spans’ callback to draw gray pixel spans, in the case of an aa glyph bitmap, it will call ‘black_spans’, and ‘bit_test’ and ‘bit_set’ in the case of a monochrome bitmap. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing/composition. Note that the ‘bit_test’ and ‘bit_set’ callbacks are required when rendering a monochrome bitmap, as they are crucial to implement correct drop-out control as defined in the TrueType specification. Gets the target bitmap. Gets a pointer to the source glyph image (e.g., an ). Gets the rendering flags. Gets the gray span drawing callback. Gets the black span drawing callback. UNIMPLEMENTED! Gets the bit test callback. UNIMPLEMENTED! Gets the bit set callback. UNIMPLEMENTED! Gets the user-supplied data that is passed to each drawing callback. Gets an optional clipping box. It is only used in direct rendering mode. Note that coordinates here should be expressed in integer pixels (and not in 26.6 fixed-point units). A handle to a given FreeType renderer. A renderer is a special module in charge of converting a glyph image to a bitmap, when necessary. Each renderer supports a given glyph image format, and one or more target surface depths. The renderer module class descriptor. Gets the root fields. Gets the glyph image format this renderer handles. Gets a method used to render the image that is in a given glyph slot into a bitmap. Gets a method used to transform the image that is in a given glyph slot. Gets a method used to access the glyph's cbox. Gets a method used to pass additional parameters. Gets a pointer to its raster's class. For renderers only. A union type used to store either a long or a pointer. This is used to store a file descriptor or a ‘FILE*’ in an input stream. Gets the as a file descriptor. Gets the as an input stream (FILE*). Opaque handler to a path stroker object. Initializes a new instance of the class. FreeType library handle. Finalizes an instance of the class. Gets a value indicating whether the has been disposed. Reset a stroker object's attributes. The radius is expressed in the same units as the outline coordinates. The border radius. The line cap style. The line join style. The miter limit for the and line join styles, expressed as 16.16 fixed point value. Reset a stroker object without changing its attributes. You should call this function before beginning a new series of calls to or . A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be retrieved later by functions like and . If ‘opened’ is 0 (the default), the outline is treated as a closed path, and the stroker generates two distinct ‘border’ outlines. If ‘opened’ is 1, the outline is processed as an open path, and the stroker generates a single ‘stroke’ outline. This function calls automatically. The source outline. A boolean. If 1, the outline is treated as an open path instead of a closed one. Start a new sub-path in the stroker. This function is useful when you need to stroke a path that is not stored as an object. A pointer to the start vector. A boolean. If 1, the sub-path is treated as an open one. Close the current sub-path in the stroker. You should call this function after . If the subpath was not ‘opened’, this function ‘draws’ a single line segment to the start position when needed. ‘Draw’ a single line segment in the stroker's current sub-path, from the last position. You should call this function between and . A pointer to the destination point. ‘Draw’ a single quadratic Bézier in the stroker's current sub-path, from the last position. You should call this function between and . A pointer to a Bézier control point. A pointer to the destination point. ‘Draw’ a single cubic Bézier in the stroker's current sub-path, from the last position. You should call this function between and . A pointer to the first Bézier control point. A pointer to second Bézier control point. A pointer to the destination point. Call this function once you have finished parsing your paths with the stroker. It returns the number of points and contours necessary to export one of the ‘border’ or ‘stroke’ outlines generated by the stroker. When an outline, or a sub-path, is ‘closed’, the stroker generates two independent ‘border’ outlines, named ‘left’ and ‘right’. When the outline, or a sub-path, is ‘opened’, the stroker merges the ‘border’ outlines with caps. The ‘left’ border receives all points, while the ‘right’ border becomes empty. Use the function instead if you want to retrieve the counts associated to both borders. The border index. The number of points. The number of contours. Call this function after to export the corresponding border to your own structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays. Always call this function after to get sure that there is enough room in your object to receive all new data. When an outline, or a sub-path, is ‘closed’, the stroker generates two independent ‘border’ outlines, named ‘left’ and ‘right’. When the outline, or a sub-path, is ‘opened’, the stroker merges the ‘border’ outlines with caps. The ‘left’ border receives all points, while the ‘right’ border becomes empty. Use the function instead if you want to retrieve all borders at once. The border index. The target outline handle. Call this function once you have finished parsing your paths with the stroker. It returns the number of points and contours necessary to export all points/borders from the stroked outline/path. The number of points. The number of contours. Call this function after to export all borders to your own structure. Note that this function appends the border points and contours to your outline, but does not try to resize its arrays. The target outline handle. Disposes an instance of the class. These values are used to select a given stroke border in and . Applications are generally interested in the ‘inside’ and ‘outside’ borders. However, there is no direct mapping between these and the ‘left’ and ‘right’ ones, since this really depends on the glyph's drawing orientation, which varies between font formats. You can however use and to get these. Select the left border, relative to the drawing direction. Select the right border, relative to the drawing direction. These values determine how the end of opened sub-paths are rendered in a stroke. The end of lines is rendered as a full stop on the last point itself. The end of lines is rendered as a half-circle around the last point. The end of lines is rendered as a square around the last point. These values determine how two joining lines are rendered in a stroker. Used to render rounded line joins. Circular arcs are used to join two lines smoothly. Used to render beveled line joins. The outer corner of the joined lines is filled by enclosing the triangular region of the corner with a straight line between the outer corners of each stroke. Used to render mitered line joins, with fixed bevels if the miter limit is exceeded. The outer edges of the strokes for the two segments are extended until they meet at an angle. If the segments meet at too sharp an angle (such that the miter would extend from the intersection of the segments a distance greater than the product of the miter limit value and the border radius), then a bevel join (see above) is used instead. This prevents long spikes being created. generates a miter line join as used in PostScript and PDF. An alias for , retained for backwards compatibility. Used to render mitered line joins, with variable bevels if the miter limit is exceeded. The intersection of the strokes is clipped at a line perpendicular to the bisector of the angle between the strokes, at the distance from the intersection of the segments equal to the product of the miter limit value and the border radius. This prevents long spikes being created. generates a mitered line join as used in XPS. A list of bit-field constants used with to indicate which TrueTypeGX/AAT Type tables should be validated. Validate ‘feat’ table. Validate ‘mort’ table. Validate ‘morx’ table. Validate ‘bsln’ table. Validate ‘just’ table. Validate ‘kern’ table. Validate ‘opbd’ table. Validate ‘trak’ table. Validate ‘prop’ table. Validate ‘lcar’ table. Validate all TrueTypeGX tables. A structure used to model an SFNT ‘name’ table entry. Possible values for ‘platform_id’, ‘encoding_id’, ‘language_id’, and ‘name_id’ are given in the file ‘ttnameid.h’. For details please refer to the TrueType or OpenType specification. Gets the platform ID for ‘string’. Gets the encoding ID for ‘string’. Gets the language ID for ‘string’. Gets an identifier for ‘string’. Gets the ‘name’ string. Note that its format differs depending on the (platform,encoding) pair. It can be a Pascal String, a UTF-16 one, etc. Generally speaking, the string is not zero-terminated. Please refer to the TrueType specification for details. A list of valid values for the ‘encoding_id’ for TT_PLATFORM_APPLE_UNICODE charmaps and name entries. Unicode version 1.0. Unicode 1.1; specifies Hangul characters starting at U+34xx. Deprecated (identical to preceding). Unicode 2.0 and beyond (UTF-16 BMP only). Unicode 3.1 and beyond, using UTF-32. From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap. A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MACINTOSH charmaps and name entries. Roman encoding. Japanese encoding. Traditional Chinese encoding. Korean encoding. Arabic encoding. Hebrew encoding. Greek encoding. Russian encoding. RSymbol encoding. Devanagari encoding. Gurmukhi encoding. Gujarati encoding. Oriya encoding. Bengali encoding. Tamil encoding. Telugu encoding. Kannada encoding. Malayalam encoding. Sinhalese encoding. Burmese encoding. Khmer encoding. Thai encoding. Laotian encoding. Georgian encoding. Amernian encoding. Maldivian encoding. Simplified Chinese encoding. Tibetan encoding. Mongolian encoding. Geez encoding. Slavic encoding. Vietnamese encoding. Sindhi encoding. No encoding specified. A list of valid values for the ‘encoding_id’ for TT_PLATFORM_MICROSOFT charmaps and name entries. Corresponds to Microsoft symbol encoding. See FT_ENCODING_MS_SYMBOL. Corresponds to a Microsoft WGL4 charmap, matching Unicode. See FT_ENCODING_UNICODE. Corresponds to SJIS Japanese encoding. See FT_ENCODING_SJIS. Corresponds to Simplified Chinese as used in Mainland China. See FT_ENCODING_GB2312. Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. See FT_ENCODING_BIG5. Corresponds to Korean Wansung encoding. See FT_ENCODING_WANSUNG. Corresponds to Johab encoding. See FT_ENCODING_JOHAB. Corresponds to UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001.) A list of valid values for the ‘encoding_id’ for TT_PLATFORM_ADOBE charmaps. This is a FreeType-specific extension! Adobe standard encoding. Adobe expert encoding. Adobe custom encoding. Adobe Latin 1 encoding. A structure used to model a TrueType font header table. All fields follow the TrueType specification. A structure used to model a TrueType horizontal header, the ‘hhea’ table, as well as the corresponding horizontal metrics table, i.e., the ‘hmtx’ table. IMPORTANT: The and structures should be identical except for the names of their fields which are different. This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical headers. Gets the table version. Gets the font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one. Gets the font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one. Gets the font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font. Gets the maximum of all advance widths found in the font. It can be used to compute the maximum width of an arbitrary string of text. Gets the minimum left side bearing of all glyphs within the font. Gets the minimum right side bearing of all glyphs within the font. Gets the maximum horizontal extent (i.e., the ‘width’ of a glyph's bounding box) for all glyphs in the font. Gets the rise coefficient of the cursor's slope of the cursor (slope=rise/run). Gets the run coefficient of the cursor's slope. Gets the 8 reserved bytes. Gets 0, always. Gets the number of HMetrics entries in the ‘hmtx’ table -- this value can be smaller than the total number of glyphs in the font. Gets a pointer into the ‘hmtx’ table. Gets a pointer into the ‘hmtx’ table. The maximum profile is a table containing many max values which can be used to pre-allocate arrays. This ensures that no memory allocation occurs during a glyph load. This structure is only used during font loading. Gets the version number. Gets the number of glyphs in this TrueType font. Gets the maximum number of points in a non-composite TrueType glyph. See also the structure element ‘maxCompositePoints’. Gets the maximum number of contours in a non-composite TrueType glyph. See also the structure element ‘maxCompositeContours’. Gets the maximum number of points in a composite TrueType glyph. See also the structure element ‘maxPoints’. Gets the maximum number of contours in a composite TrueType glyph. See also the structure element ‘maxContours’. Gets the maximum number of zones used for glyph hinting. Gets the maximum number of points in the twilight zone used for glyph hinting. Gets the maximum number of elements in the storage area used for glyph hinting. Gets the maximum number of function definitions in the TrueType bytecode for this font. Gets the maximum number of instruction definitions in the TrueType bytecode for this font. Gets the maximum number of stack elements used during bytecode interpretation. Gets the maximum number of TrueType opcodes used for glyph hinting. Gets the maximum number of simple (i.e., non- composite) glyphs in a composite glyph. Gets the maximum nesting depth of composite glyphs. A structure used to model a TrueType OS/2 table. This is the long table version. All fields comply to the TrueType specification. Note that we now support old Mac fonts which do not include an OS/2 table. In this case, the ‘version’ field is always set to 0xFFFF. A structure used to model a TrueType PCLT table. All fields comply to the TrueType specification. A list of valid values for the ‘platform_id’ identifier code in and structures. Used by Apple to indicate a Unicode character map and/or name entry. See TT_APPLE_ID_XXX for corresponding ‘encoding_id’ values. Note that name entries in this format are coded as big-endian UCS-2 character codes only. Used by Apple to indicate a MacOS-specific charmap and/or name entry. See TT_MAC_ID_XXX for corresponding ‘encoding_id’ values. Note that most TrueType fonts contain an Apple roman charmap to be usable on MacOS systems (even if they contain a Microsoft charmap as well). This value was used to specify ISO/IEC 10646 charmaps. It is however now deprecated. See TT_ISO_ID_XXX for a list of corresponding ‘encoding_id’ values. Used by Microsoft to indicate Windows-specific charmaps. See TT_MS_ID_XXX for a list of corresponding ‘encoding_id’ values. Note that most fonts contain a Unicode charmap using (TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS). Used to indicate application-specific charmaps. This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific charmaps in an structure. See TT_ADOBE_ID_XXX. A list of values describing which kind of TrueType bytecode engine is implemented in a given instance. It is used by the function. The library doesn't implement any kind of bytecode interpreter. The library implements a bytecode interpreter that doesn't support the patented operations of the TrueType virtual machine. Its main use is to load certain Asian fonts which position and scale glyph components with bytecode instructions. It produces bad output for most other fonts. The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine (this was governed by patents until May 2010, hence the name). A structure used to model a TrueType PostScript table. All fields comply to the TrueType specification. This structure does not reference the PostScript glyph names, which can be nevertheless accessed with the ‘ttpost’ module. An enumeration used to specify the index of an SFNT table. Used in the API function. A structure used to model a TrueType vertical header, the ‘vhea’ table, as well as the corresponding vertical metrics table, i.e., the ‘vmtx’ table. IMPORTANT: The and structures should be identical except for the names of their fields which are different. This ensures that a single function in the ‘ttload’ module is able to read both the horizontal and vertical headers. Gets the table version. Gets the font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the ‘sTypoAscender’ field of the OS/2 table instead if you want the correct one. Gets the font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative. This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII). You should use the ‘sTypoDescender’ field of the OS/2 table instead if you want the correct one. Gets the font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font. Gets the maximum of all advance heights found in the font. It can be used to compute the maximum height of an arbitrary string of text. Gets the minimum top side bearing of all glyphs within the font. Gets the minimum bottom side bearing of all glyphs within the font. Gets the maximum vertical extent (i.e., the ‘height’ of a glyph's bounding box) for all glyphs in the font. Gets the rise coefficient of the cursor's slope of the cursor (slope=rise/run). Gets the run coefficient of the cursor's slope. Gets the 8 reserved bytes. Gets 0, always. Gets the number of VMetrics entries in the ‘vmtx’ table -- this value can be smaller than the total number of glyphs in the font. Gets a pointer into the ‘vmtx’ table. Gets a pointer into the ‘vmtx’ table. FreeType error codes. No error. Cannot open resource. Unknown file format. Broken file. Invalid FreeType version. Module version is too low. Invalid argument. Unimplemented feature. Broken table. Broken offset within table. Array allocation size too large. Invalid glyph index. Invalid character code. Unsupported glyph image format. Cannot render this glyph format. Invalid outline. Invalid composite glyph. Too many hints. Invalid pixel size. Invalid object handle. Invalid library handle. Invalid module handle. Invalid face handle. Invalid size handle. Invalid glyph slot handle. Invalid charmap handle. Invalid cache manager handle. Invalid stream handle. Too many modules. Too many extensions. Out of memory. Unlisted object. Cannot open stream. Invalid stream seek. Invalid stream skip. Invalid stream read. Invalid stream operation. Invalid frame operation. Nested frame access. Invalid frame read. Raster uninitialized. Raster corrupted. Raster overflow. Negative height while rastering. Too many registered caches. Invalid opcode. Too few arguments. Stack overflow. Code overflow. Bad argument. Division by zero. Invalid reference. Found debug opcode. Found ENDF opcode in execution stream. Nested DEFS. Invalid code range. Execution context too long. Too many function definitions. Too many instruction definitions. SFNT font table missing. Horizontal header (hhea) table missing. Locations (loca) table missing. Name table missing. Character map (cmap) table missing. Horizontal metrics (hmtx) table missing. PostScript (post) table missing. Invalid horizontal metrics. Invalid character map (cmap) format. Invalid ppem value. Invalid vertical metrics. Could not find context. Invalid PostScript (post) table format. Invalid PostScript (post) table. Opcode syntax error. Argument stack underflow. Ignore this error. No Unicode glyph name found. `STARTFONT' field missing. `FONT' field missing. `SIZE' field missing. `FONTBOUNDINGBOX' field missing. `CHARS' field missing. `STARTCHAR' field missing. `ENCODING' field missing. `BBX' field missing. `BBX' too big. Font header corrupted or missing fields. Font glyphs corrupted or missing fields. FreeType root face class structure. A face object models a typeface in a font file. Fields may be changed after a call to or . Initializes a new instance of the class with a default faceIndex of 0. The parent library. The path of the font file. Initializes a new instance of the class. The parent library. The path of the font file. The index of the face to take from the file. Initializes a new instance of the class from a file that's already loaded into memory. The parent library. The loaded file. The index of the face to take from the file. Initializes a new instance of the class from a file that's already loaded into memory. The parent library. The index of the face to take from the file. Initializes a new instance of the Face class. A pointer to the unmanaged memory containing the Face. The parent . Finalizes an instance of the Face class. Gets a value indicating whether the object has been disposed. Gets the number of faces in the font file. Some font formats can have multiple faces in a font file. Gets the index of the face in the font file. It is set to 0 if there is only one face in the font file. Gets a set of bit flags that give important information about the face. Gets a set of bit flags indicating the style of the face. Gets the number of glyphs in the face. If the face is scalable and has sbits (see ‘num_fixed_sizes’), it is set to the number of outline glyphs. For CID-keyed fonts, this value gives the highest CID used in the font. Gets the face's family name. This is an ASCII string, usually in English, which describes the typeface's family (like ‘Times New Roman’, ‘Bodoni’, ‘Garamond’, etc). This is a least common denominator used to list fonts. Some formats (TrueType & OpenType) provide localized and Unicode versions of this string. Applications should use the format specific interface to access them. Can be NULL (e.g., in fonts embedded in a PDF file). Gets the face's style name. This is an ASCII string, usually in English, which describes the typeface's style (like ‘Italic’, ‘Bold’, ‘Condensed’, etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL. As for ‘family_name’, some formats provide localized and Unicode versions of this string. Applications should use the format specific interface to access them. Gets the number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap strikes, which are called ‘sbits’ in that case. Gets an array of FT_Bitmap_Size for all bitmap strikes in the face. It is set to NULL if there is no bitmap strike. Gets the number of charmaps in the face. Gets an array of the charmaps of the face. Gets or sets a field reserved for client uses. Gets the font bounding box. Coordinates are expressed in font units (see ‘units_per_EM’). The box is large enough to contain any glyph from the font. Thus, ‘bbox.yMax’ can be seen as the ‘maximal ascender’, and ‘bbox.yMin’ as the ‘minimal descender’. Only relevant for scalable formats. Note that the bounding box might be off by (at least) one pixel for hinted fonts. See FT_Size_Metrics for further discussion. Gets the number of font units per EM square for this face. This is typically 2048 for TrueType fonts, and 1000 for Type 1 fonts. Only relevant for scalable formats. Gets the typographic ascender of the face, expressed in font units. For font formats not having this information, it is set to ‘bbox.yMax’. Only relevant for scalable formats. Gets the typographic descender of the face, expressed in font units. For font formats not having this information, it is set to ‘bbox.yMin’.Note that this field is usually negative. Only relevant for scalable formats. Gets the height is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats. Gets the maximal advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats. Gets the maximal advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to ‘height’ for fonts that do not provide vertical metrics. Only relevant for scalable formats. Gets the position, in font units, of the underline line for this face. It is the center of the underlining stem. Only relevant for scalable formats. Gets the thickness, in font units, of the underline for this face. Only relevant for scalable formats. Gets the face's associated glyph slot(s). Gets the current active size for this face. Gets the current active charmap for this face. Gets a value indicating whether a face object contains horizontal metrics (this is true for all font formats though). Gets a value indicating whether a face object contains vertical metrics. Gets a value indicating whether a face object contains kerning data that can be accessed with . Gets a value indicating whether a face object contains a scalable font face (true for TrueType, Type 1, Type 42, CID, OpenType/CFF, and PFR font formats. Gets a value indicating whether a face object contains a font whose format is based on the SFNT storage scheme. This usually means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap fonts. If this macro is true, all functions defined in FT_SFNT_NAMES_H and FT_TRUETYPE_TABLES_H are available. Gets a value indicating whether a face object contains a font face that contains fixed-width (or ‘monospace’, ‘fixed-pitch’, etc.) glyphs. Gets a value indicating whether a face object contains some embedded bitmaps. Gets a value indicating whether a face object contains some glyph names that can be accessed through . Gets a value indicating whether a face object contains some multiple masters. The functions provided by FT_MULTIPLE_MASTERS_H are then available to choose the exact design you want. Gets a value indicating whether a face object contains a CID-keyed font. See the discussion of FT_FACE_FLAG_CID_KEYED for more details. If this macro is true, all functions defined in FT_CID_H are available. Gets a value indicating whether a face represents a ‘tricky’ font. See the discussion of FT_FACE_FLAG_TRICKY for more details. Parse all bytecode instructions of a TrueType font file to check whether any of the patented opcodes are used. This is only useful if you want to be able to use the unpatented hinter with fonts that do not use these opcodes. Note that this function parses all glyph instructions in the font file, which may be slow. Since May 2010, TrueType hinting is no longer patented. True if this is a TrueType font that uses one of the patented opcodes, false otherwise. Enable or disable the unpatented hinter for a given . Only enable it if you have determined that the face doesn't use any patented opcodes. Since May 2010, TrueType hinting is no longer patented. New boolean setting. The old setting value. This will always be false if this is not an SFNT font, or if the unpatented hinter is not compiled in this instance of the library. This function calls to attach a file. The pathname. ‘Attach’ data to a face object. Normally, this is used to read additional information for the face object. For example, you can attach an AFM file that comes with a Type 1 font to get the kerning values and other metrics. The meaning of the ‘attach’ (i.e., what really happens when the new file is read) is not fixed by FreeType itself. It really depends on the font format (and thus the font driver). Client applications are expected to know what they are doing when invoking this function. Most drivers simply do not implement file attachments. A pointer to which must be filled by the caller. Select a bitmap strike. The index of the bitmap strike in the field of structure. Resize the scale of the active object in a face. A pointer to a . This function calls to request the nominal size (in points). If either the character width or height is zero, it is set equal to the other value. If either the horizontal or vertical resolution is zero, it is set equal to the other value. A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are set to 72dpi. The nominal width, in 26.6 fractional points. The nominal height, in 26.6 fractional points. The horizontal resolution in dpi. The vertical resolution in dpi. This function calls to request the nominal size (in pixels). The nominal width, in pixels. The nominal height, in pixels A function used to load a single glyph into the glyph slot of a face object. The loaded glyph may be transformed. See for the details. For subsetted CID-keyed fonts, is returned for invalid CID values (this is, for CID values which don't have a corresponding glyph in the font). See the discussion of the flag for more details. The index of the glyph in the font file. For CID-keyed fonts (either in PS or in CFF format) this argument specifies the CID value. A flag indicating what to load for this glyph. The constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc). The target to OR with the flags. A function used to load a single glyph into the glyph slot of a face object, according to its character code. This function simply calls and The glyph's character code, according to the current charmap used in the face. A flag indicating what to load for this glyph. The constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc). The target to OR with the flags. A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through . The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to or . Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’. A pointer to the transformation's 2x2 matrix. Use the method overloads for the identity matrix. A pointer to the translation vector. Use the method overloads for the null vector. A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through with the identity matrix. The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to or . Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’. A pointer to the translation vector. Use the method overloads for the null vector. A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through with the null vector. The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to or . Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’. A pointer to the transformation's 2x2 matrix. Use the method overloads for the identity matrix. A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through with the null vector and the identity matrix. The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to or . Note that this also transforms the ‘face.glyph.advance’ field, but not the values in ‘face.glyph.metrics’. Return the kerning vector between two glyphs of a same face. Only horizontal layouts (left-to-right & right-to-left) are supported by this method. Other layouts, or more sophisticated kernings, are out of the scope of this API function -- they can be implemented through format-specific interfaces. The index of the left glyph in the kern pair. The index of the right glyph in the kern pair. Determines the scale and dimension of the returned kerning vector. The kerning vector. This is either in font units or in pixels (26.6 format) for scalable formats, and in pixels for fixed-sizes formats. Return the track kerning for a given face object at a given size. The point size in 16.16 fractional points. The degree of tightness. The kerning in 16.16 fractional points. Retrieve the ASCII name of a given glyph in a face. This only works for those faces where returns 1. An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases of failure, the first byte of ‘buffer’ is set to 0 to indicate an empty name. The glyph name is truncated to fit within the buffer if it is too long. The returned string is always zero-terminated. Be aware that FreeType reorders glyph indices internally so that glyph index 0 always corresponds to the ‘missing glyph’ (called ‘.notdef’). This function is not compiled within the library if the config macro ‘FT_CONFIG_OPTION_NO_GLYPH_NAMES’ is defined in ‘include/freetype/config/ftoptions.h’. The glyph index. The maximal number of bytes available in the buffer. The ASCII name of a given glyph in a face. Retrieve the ASCII name of a given glyph in a face. This only works for those faces where returns 1. An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases of failure, the first byte of ‘buffer’ is set to 0 to indicate an empty name. The glyph name is truncated to fit within the buffer if it is too long. The returned string is always zero-terminated. Be aware that FreeType reorders glyph indices internally so that glyph index 0 always corresponds to the ‘missing glyph’ (called ‘.notdef’). This function is not compiled within the library if the config macro ‘FT_CONFIG_OPTION_NO_GLYPH_NAMES’ is defined in ‘include/freetype/config/ftoptions.h’. The glyph index. The target buffer where the name is copied to. The ASCII name of a given glyph in a face. Retrieve the ASCII Postscript name of a given face, if available. This only works with Postscript and TrueType fonts. The returned pointer is owned by the face and is destroyed with it. A pointer to the face's Postscript name. NULL if unavailable. Select a given charmap by its encoding tag (as listed in ‘freetype.h’). This function returns an error if no charmap in the face corresponds to the encoding queried here. Because many fonts contain more than a single cmap for Unicode encoding, this function has some special code to select the one which covers Unicode best. It is thus preferable to in this case. A handle to the selected encoding. Select a given charmap for character code to glyph index mapping. This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the ’ table). A handle to the selected charmap. Return the glyph index of a given character code. This function uses a charmap object to do the mapping. If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the ‘missing glyph’. The character code. The glyph index. 0 means ‘undefined character code’. This function is used to return the first character code in the current charmap of a given face. It also returns the corresponding glyph index. You should use this function with to be able to parse all character codes available in a given charmap. Note that ‘agindex’ is set to 0 if the charmap is empty. The result itself can be 0 in two cases: if the charmap is empty or when the value 0 is the first valid character code. Glyph index of first character code. 0 if charmap is empty. The charmap's first character code. This function is used to return the next character code in the current charmap of a given face following the value ‘charCode’, as well as the corresponding glyph index. You should use this function with to walk over all character codes available in a given charmap. See the note for this function for a simple code example. Note that ‘*agindex’ is set to 0 when there are no more codes in the charmap. The starting character code. Glyph index of first character code. 0 if charmap is empty. The charmap's next character code. Return the glyph index of a given glyph name. This function uses driver specific objects to do the translation. The glyph name. The glyph index. 0 means ‘undefined character code’. Return the flags for a font. Use this function rather than directly reading the ‘fs_type’ field in the structure which is only guaranteed to return the correct results for Type 1 fonts. The fsType flags, . Return the glyph index of a given character code as modified by the variation selector. If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the ‘missing glyph’. This function is only meaningful if a) the font has a variation selector cmap sub table, and b) the current charmap has a Unicode encoding. The character code point in Unicode. The Unicode code point of the variation selector. The glyph index. 0 means either ‘undefined character code’, or ‘undefined selector code’, or ‘no variation selector cmap subtable’, or ‘current CharMap is not Unicode’. Check whether this variant of this Unicode character is the one to be found in the ‘cmap’. This function is only meaningful if the font has a variation selector cmap subtable. The character codepoint in Unicode. The Unicode codepoint of the variation selector. 1 if found in the standard (Unicode) cmap, 0 if found in the variation selector cmap, or -1 if it is not a variant. Return a zero-terminated list of Unicode variant selectors found in the font. The last item in the array is 0; the array is owned by the object but can be overwritten or released on the next call to a FreeType function. A pointer to an array of selector code points, or NULL if there is no valid variant selector cmap subtable. Return a zero-terminated list of Unicode variant selectors found in the font. The last item in the array is 0; the array is owned by the object but can be overwritten or released on the next call to a FreeType function. The character codepoint in Unicode. A pointer to an array of variant selector code points which are active for the given character, or NULL if the corresponding list is empty. Return a zero-terminated list of Unicode character codes found for the specified variant selector. The last item in the array is 0; the array is owned by the object but can be overwritten or released on the next call to a FreeType function. The variant selector code point in Unicode. A list of all the code points which are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variant selector is invalid. Create a new size object from a given face object. You need to call in order to select the new size for upcoming calls to , , , , etc. A handle to a new size object. Retrieve the Multiple Master descriptor of a given font. This function can't be used with GX fonts. The Multiple Masters descriptor. Retrieve the Multiple Master/GX var descriptor of a given font. The Multiple Masters/GX var descriptor. Allocates a data structure, which the user must free (a single call to FT_FREE will do it). For Multiple Masters fonts, choose an interpolated font design through design coordinates. This function can't be used with GX fonts. An array of design coordinates. For Multiple Master or GX Var fonts, choose an interpolated font design through design coordinates. An array of design coordinates. For Multiple Masters and GX var fonts, choose an interpolated font design through normalized blend coordinates. The design coordinates array (each element must be between 0 and 1.0). This is another name of . The design coordinates array (each element must be between 0 and 1.0). Return a pointer to a given SFNT table within a face. The table is owned by the face object and disappears with it. This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype drivers. See for a list. The index of the SFNT table. A type-less pointer to the table. This will be 0 in case of error, or if the corresponding table was not found OR loaded from the file. Use a typecast according to ‘tag’ to access the structure elements. Load any font table into client memory. If you need to determine the table's length you should first call this function with ‘*length’ set to 0, as in the following example: FT_ULong length = 0; error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); if ( error ) { ... table does not exist ... } buffer = malloc( length ); if ( buffer == NULL ) { ... not enough memory ... } error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); if ( error ) { ... could not load table ... } The four-byte tag of the table to load. Use the value 0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the FT_TRUETYPE_TAGS_H file, or forge a new one with FT_MAKE_TAG. The starting offset in the table (or file if tag == 0). The target buffer address. The client must ensure that the memory array is big enough to hold the data. If the ‘length’ parameter is NULL, then try to load the whole table. Return an error code if it fails. Else, if ‘*length’ is 0, exit immediately while returning the table's (or file) full size in it. Else the number of bytes to read from the table or file, from the starting offset. Return information on an SFNT table. The index of an SFNT table. The function returns for an invalid value. The name tag of the SFNT table. If the value is NULL, ‘table_index’ is ignored, and ‘length’ returns the number of SFNT tables in the font. The length of the SFNT table (or the number of SFNT tables, depending on ‘tag’). Only gets the number of SFNT tables. The number of SFNT tables. Return true if a given face provides reliable PostScript glyph names. This is similar to using the macro, except that certain fonts (mostly TrueType) contain incorrect glyph name tables. When this function returns true, the caller is sure that the glyph names returned by are reliable. Boolean. True if glyph names are reliable. Retrieve the structure corresponding to a given PostScript font. The string pointers within the font info structure are owned by the face and don't need to be freed by the caller. If the font's format is not PostScript-based, this function will return the error code. Output font info structure pointer. Retrieve the structure corresponding to a given PostScript font. The string pointers within the structure are owned by the face and don't need to be freed by the caller. If the font's format is not PostScript-based, this function returns the error code. Output private dictionary structure pointer. Retrieve the value for the supplied key from a PostScript font. The values returned are not pointers into the internal structures of the face, but are ‘fresh’ copies, so that the memory containing them belongs to the calling application. This also enforces the ‘read-only’ nature of these values, i.e., this function cannot be used to manipulate the face. ‘value’ is a void pointer because the values returned can be of various types. If either ‘value’ is NULL or ‘value_len’ is too small, just the required memory size for the requested entry is returned. The ‘idx’ parameter is used, not only to retrieve elements of, for example, the FontMatrix or FontBBox, but also to retrieve name keys from the CharStrings dictionary, and the charstrings themselves. It is ignored for atomic values. returns a value that is scaled up by 1000. To get the value as in the font stream, you need to divide by 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale). IMPORTANT: Only key/value pairs read by the FreeType interpreter can be retrieved. So, for example, PostScript procedures such as NP, ND, and RD are not available. Arbitrary keys are, obviously, not be available either. If the font's format is not PostScript-based, this function returns the error code. An enumeration value representing the dictionary key to retrieve. For array values, this specifies the index to be returned. A pointer to memory into which to write the value. The size, in bytes, of the memory supplied for the value. The amount of memory (in bytes) required to hold the requested value (if it exists, -1 otherwise). Retrieve the number of name strings in the SFNT ‘name’ table. The number of strings in the ‘name’ table. Retrieve a string of the SFNT ‘name’ table for a given index. The ‘string’ array returned in the ‘aname’ structure is not null-terminated. The application should deallocate it if it is no longer in use. Use to get the total number of available ‘name’ table entries, then do a loop until you get the right platform, encoding, and name ID. The index of the ‘name’ string. The indexed structure. Retrieve a BDF font character set identity, according to the BDF specification. This function only works with BDF faces, returning an error otherwise. Charset encoding, as a C string, owned by the face. Charset registry, as a C string, owned by the face. Retrieve a BDF property from a BDF or PCF font file. This function works with BDF and PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font. A ‘property’ is a either key-value pair within the STARTPROPERTIES ... ENDPROPERTIES block of a BDF font or a key-value pair from the ‘info->props’ array within a ‘FontRec’ structure of a PCF font. Integer properties are always stored as ‘signed’ within PCF fonts; consequently, is a possible return value for BDF fonts only. In case of error, ‘aproperty->type’ is always set to . The property name. The property. Retrieve the Registry/Ordering/Supplement triple (also known as the "R/O/S") from a CID-keyed font. This function only works with CID faces, returning an error otherwise. The registry, as a C string, owned by the face. The ordering, as a C string, owned by the face. The supplement. Retrieve the type of the input face, CID keyed or not. In constrast to the macro this function returns successfully also for CID-keyed fonts in an SNFT wrapper. This function only works with CID faces and OpenType fonts, returning an error otherwise. The type of the face as an FT_Bool. Retrieve the CID of the input glyph index. This function only works with CID faces and OpenType fonts, returning an error otherwise. The input glyph index. The CID as an uint. Return the outline and metrics resolutions of a given PFR face. If the input face is not a PFR, this function will return an error. However, in all cases, it will return valid values. Outline resolution. This is equivalent to ‘face->units_per_EM’ for non-PFR fonts. Optional (parameter can be NULL). Metrics resolution. This is equivalent to ‘outline_resolution’ for non-PFR fonts. Optional (parameter can be NULL). A 16.16 fixed-point number used to scale distance expressed in metrics units to device sub-pixels. This is equivalent to ‘face->size->x_scale’, but for metrics only. Optional (parameter can be NULL). Same as ‘ametrics_x_scale’ but for the vertical direction. optional (parameter can be NULL). Return the kerning pair corresponding to two glyphs in a PFR face. The distance is expressed in metrics units, unlike the result of . This function always return distances in original PFR metrics units. This is unlike with the mode, which always returns distances converted to outline units. You can use the value of the ‘x_scale’ and ‘y_scale’ parameters returned by to scale these to device sub-pixels. Index of the left glyph. Index of the right glyph. A kerning vector. Return a given glyph advance, expressed in original metrics units, from a PFR font. You can use the ‘x_scale’ or ‘y_scale’ results of to convert the advance to device sub-pixels (i.e., 1/64th of pixels). The glyph index. The glyph advance in metrics units. Retrieve a Windows FNT font info header. This function only works with Windows FNT faces, returning an error otherwise. The WinFNT header. Return a string describing the format of a given face, using values which can be used as an X11 FONT_PROPERTY. Possible values are ‘TrueType’, ‘Type 1’, ‘BDF’, ‘PCF’, ‘Type 42’, ‘CID Type 1’, ‘CFF’, ‘PFR’, and ‘Windows FNT’. Font format string. NULL in case of error. Read the ‘gasp’ table from a TrueType or OpenType font file and return the entry corresponding to a given character pixel size. The vertical character pixel size. Bit flags (see ), or if there is no ‘gasp’ table in the face. Retrieve the advance value of a given glyph outline in a . By default, the unhinted advance is returned in font units. This function may fail if you use and if the corresponding font backend doesn't have a quick way to retrieve the advances. A scaled advance is returned in 16.16 format but isn't transformed by the affine transformation specified by . The glyph index. A set of bit flags similar to those used when calling , used to determine what kind of advances you need. The advance value, in either font units or 16.16 format. If is set, this is the vertical advance corresponding to a vertical layout. Otherwise, it is the horizontal advance in a horizontal layout. Retrieve the advance values of several glyph outlines in an . By default, the unhinted advances are returned in font units. This function may fail if you use and if the corresponding font backend doesn't have a quick way to retrieve the advances. Scaled advances are returned in 16.16 format but aren't transformed by the affine transformation specified by . The first glyph index. The number of advance values you want to retrieve. A set of bit flags similar to those used when calling . The advances, in either font units or 16.16 format. This array must contain at least ‘count’ elements. If is set, these are the vertical advances corresponding to a vertical layout. Otherwise, they are the horizontal advances in a horizontal layout. Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming). This function only works with OpenType fonts, returning an error otherwise. After use, the application should deallocate the five tables with . A NULL value indicates that the table either doesn't exist in the font, or the application hasn't asked for validation. A bit field which specifies the tables to be validated. A pointer to the BASE table. A pointer to the GDEF table. A pointer to the GPOS table. A pointer to the GSUB table. A pointer to the JSTF table. Free the buffer allocated by OpenType validator. This function must be used to free the buffer allocated by only. The pointer to the buffer that is allocated by . Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming). This function only works with TrueTypeGX fonts, returning an error otherwise. After use, the application should deallocate the buffers pointed to by each ‘tables’ element, by calling . A NULL value indicates that the table either doesn't exist in the font, the application hasn't asked for validation, or the validator doesn't have the ability to validate the sfnt table. A bit field which specifies the tables to be validated. The array where all validated sfnt tables are stored. The array itself must be allocated by a client. The size of the ‘tables’ array. Normally, FT_VALIDATE_GX_LENGTH should be passed. Free the buffer allocated by TrueTypeGX validator. This function must be used to free the buffer allocated by only. The pointer to the buffer allocated by . Validate classic (16-bit format) kern table to assure that the offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming). The ‘kern’ table validator in deals with both the new 32-bit format and the classic 16-bit format, while only supports the classic 16-bit format. After use, the application should deallocate the buffers pointed to by ‘ckern_table’, by calling . A NULL value indicates that the table doesn't exist in the font. A bit field which specifies the dialect to be validated. A pointer to the kern table. Free the buffer allocated by classic Kern validator. This function must be used to free the buffer allocated by only. The pointer to the buffer that is allocated by . Disposes the Face. A list of bit flags used in the ‘face_flags’ field of the structure. They inform client applications of properties of the corresponding face. No style flags. Indicates that the face contains outline glyphs. This doesn't prevent bitmap strikes, i.e., a face can have both this and and set. Indicates that the face contains bitmap strikes. See also and . Indicates that the face contains fixed-width characters (like Courier, Lucido, MonoType, etc.). Indicates that the face uses the ‘sfnt’ storage scheme. For now, this means TrueType and OpenType. Indicates that the face contains horizontal glyph metrics. This should be set for all common formats. Indicates that the face contains vertical glyph metrics. This is only available in some formats, not all of them. Indicates that the face contains kerning information. If set, the kerning distance can be retrieved through the function . Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the ‘GPOS’ table (as present in some OpenType fonts). THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. Indicates that the font contains multiple masters and is capable of interpolating between them. See the multiple-masters specific API for details. Indicates that the font contains glyph names that can be retrieved through . Note that some TrueType fonts contain broken glyph name tables. Use the function when needed. Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when is called. Don't read or test this flag. Set if the font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense to use data from the SFNT ‘gasp’ table only if the native TrueType hinting engine (with the bytecode interpreter) is available and active. Set if the font is CID-keyed. In that case, the font is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to . Only the CID values for which corresponding glyphs in the subsetted font exist make return successfully; in all other cases you get an error. Note that CID-keyed fonts which are in an SFNT wrapper don't have this flag set since the glyphs are accessed in the normal way (using contiguous indices); the ‘CID-ness’ isn't visible to the application. Set if the font is ‘tricky’, this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the Chinese font ‘mingli.ttf’ which uses TrueType bytecode instructions to move and scale all of its subglyphs. It is not possible to autohint such fonts using ; it will also ignore . You have to set both and to really disable hinting; however, you probably never want this except for demonstration purposes. Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file ‘ttobjs.c’. Set if the font has color glyph tables. To access color glyphs use . An exception that gets thrown when FreeType returns an error code. Initializes a new instance of the class. The error returned by FreeType. Gets the FreeType error code that caused the exception. A list of bit flags used in the ‘fsType’ field of the OS/2 table in a TrueType or OpenType font and the ‘FSType’ entry in a PostScript font. These bit flags are returned by FT_Get_FSType_Flags; they inform client applications of embedding and subsetting restrictions associated with a font. While the fsType flags can indicate that a font may be embedded, a license with the font vendor may be separately required to use the font in this way. Fonts with no fsType bit set may be embedded and permanently installed on the remote system by an application. Fonts that have only this bit set must not be modified, embedded or exchanged in any manner without first obtaining permission of the font software copyright owner. If this bit is set, the font may be embedded and temporarily loaded on the remote system. Documents containing Preview & Print fonts must be opened ‘read-only’; no edits can be applied to the document. If this bit is set, the font may be embedded but must only be installed temporarily on other systems. In contrast to Preview & Print fonts, documents containing editable fonts may be opened for reading, editing is permitted, and changes may be saved. If this bit is set, the font may not be subsetted prior to embedding. If this bit is set, only bitmaps contained in the font may be embedded; no outline data may be embedded. If there are no bitmaps available in the font, then the font is unembeddable. Provides an API very similar to the original FreeType API. Useful for porting over C code that relies on FreeType. For everything else, use the instance methods of the classes provided by SharpFont, they are designed to follow .NET naming and style conventions. This file contains all the raw FreeType2 function signatures. The angle pi expressed in FT_Angle units. The angle 2*pi expressed in FT_Angle units. The angle pi/2 expressed in FT_Angle units. The angle pi/4 expressed in FT_Angle units. A very simple function used to perform the computation ‘(a*b)/c’ with maximal accuracy (it uses a 64-bit intermediate integer whenever necessary). This function isn't necessarily as fast as some processor specific operations, but is at least completely portable. The first multiplier. The second multiplier. The divisor. The result of ‘(a*b)/c’. This function never traps when trying to divide by zero; it simply returns ‘MaxInt’ or ‘MinInt’ depending on the signs of ‘a’ and ‘b’. A very simple function used to perform the computation ‘(a*b)/0x10000’ with maximal accuracy. Most of the time this is used to multiply a given value by a 16.16 fixed float factor. This function has been optimized for the case where the absolute value of ‘a’ is less than 2048, and ‘b’ is a 16.16 scaling factor. As this happens mainly when scaling from notional units to fractional pixels in FreeType, it resulted in noticeable speed improvements between versions 2.x and 1.x. As a conclusion, always try to place a 16.16 factor as the second argument of this function; this can make a great difference. The first multiplier. The second multiplier. Use a 16.16 factor here whenever possible (see note below). The result of ‘(a*b)/0x10000’. A very simple function used to perform the computation ‘(a*0x10000)/b’ with maximal accuracy. Most of the time, this is used to divide a given value by a 16.16 fixed float factor. The optimization for is simple: If (a << 16) fits in 32 bits, then the division is computed directly. Otherwise, we use a specialized version of . The first multiplier. The second multiplier. Use a 16.16 factor here whenever possible (see note below). The result of ‘(a*0x10000)/b’. A very simple function used to round a 16.16 fixed number. The number to be rounded. The result of ‘(a + 0x8000) & -0x10000’. A very simple function used to compute the ceiling function of a 16.16 fixed number. The number for which the ceiling function is to be computed. The result of ‘(a + 0x10000 - 1) & -0x10000’. A very simple function used to compute the floor function of a 16.16 fixed number. The number for which the floor function is to be computed. The result of ‘a & -0x10000’. Return the sinus of a given angle in fixed point format. If you need both the sinus and cosinus for a given angle, use the function . The input angle. The sinus value. Return the cosinus of a given angle in fixed point format. If you need both the sinus and cosinus for a given angle, use the function . The input angle. The cosinus value. Return the tangent of a given angle in fixed point format. The input angle. The tangent value. Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane. The horizontal vector coordinate. The vertical vector coordinate. The arc-tangent value (i.e. angle). Return the difference between two angles. The result is always constrained to the [-PI..PI] interval. First angle. Second angle. Constrained value of ‘value2-value1’. Return an FSSpec for the disk file containing the named font. Mac OS name of the font (e.g., Times New Roman Bold). Index of the face. For passing to . FSSpec to the file. For passing to . Return an FSSpec for the disk file containing the named font. Mac OS name of the font in ATS framework. Index of the face. For passing to . FSSpec to the file. For passing to . Return a pathname of the disk file and face index for given font name which is handled by ATS framework. Mac OS name of the font in ATS framework. Buffer to store pathname of the file. For passing to . The client must allocate this buffer before calling this function. Index of the face. For passing to . Defines the location of the FreeType DLL. Update SharpFont.dll.config if you change this! Defines the calling convention for P/Invoking the native freetype methods. A list of values and/or bit-flags returned by the FT_Get_Gasp function. The bit-flags and are to be used for standard font rasterization only. Independently of that, and are to be used if ClearType is enabled (and and are consequently ignored). ‘ClearType’ is Microsoft's implementation of LCD rendering, partly protected by patents. This special value means that there is no GASP table in this face. It is up to the client to decide what to do. Grid-fitting and hinting should be performed at the specified ppem. This really means TrueType bytecode interpretation. If this bit is not set, no hinting gets applied. Anti-aliased rendering should be performed at the specified ppem. If not set, do monochrome rendering. If set, smoothing along multiple axes must be used with ClearType. Grid-fitting must be used with ClearType's symmetric smoothing. Describe a function used to destroy the ‘client’ data of any FreeType object. See the description of the type for details of usage. The address of the FreeType object which is under finalization. Its client data is accessed through its ‘generic’ field. Client applications often need to associate their own data to a variety of FreeType core objects. For example, a text layout API might want to associate a glyph cache to a given size object. Most FreeType object contains a ‘generic’ field, of type , which usage is left to client applications and font servers. It can be used to store a pointer to client-specific data, as well as the address of a ‘finalizer’ function, which will be called by FreeType when the object is destroyed (for example, the previous client example would put the address of the glyph cache destructor in the ‘finalizer’ field). Initializes a new instance of the class. A typeless pointer to some client data. The data it cointains must stay fixed until finalizer is called. A delegate that gets called when the contained object gets finalized. Gets the size of a , in bytes. Gets or sets a typeless pointer to any client-specified data. This field is completely ignored by the FreeType library. Gets or sets a pointer to a function, which will be called when the object is destroyed. If this field is set to NULL, no code will be called. The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed float format. Finalizes an instance of the Glyph class. Gets a value indicating whether the object has been disposed. Gets a handle to the FreeType library object. Gets the format of the glyph's image. Gets a 16.16 vector that gives the glyph's advance width. Downcasts a to a A . A . If the 's format is not . Downcasts a to a A . A . If the 's format is not . CLS-compliant equivalent of an explicit cast to . A . CLS-compliant equivalent of an explicit cast to . A . A function used to copy a glyph image. Note that the created object must be released with . A handle to the target glyph object. 0 in case of error. Transform a glyph image if its format is scalable. A pointer to a 2x2 matrix to apply. A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel. Return a glyph's ‘control box’. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline which contains Bézier outside arcs). Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component which is dedicated to this single task. Coordinates are relative to the glyph origin, using the y upwards convention. If the glyph has been loaded with , ‘bbox_mode’ must be set to to get unscaled font units in 26.6 pixel format. The value is another name for this constant. If the font is tricky and the glyph has been loaded with , the resulting CBox is meaningless. To get reasonable values for the CBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the CBox which can be eventually converted back to font units. Note that the maximum coordinates are exclusive, which means that one can compute the width and height of the glyph image (be it in integer or 26.6 pixels) as: width = bbox.xMax - bbox.xMin; height = bbox.yMax - bbox.yMin; Note also that for 26.6 coordinates, if ‘bbox_mode’ is set to , the coordinates will also be grid-fitted, which corresponds to: bbox.xMin = FLOOR(bbox.xMin); bbox.yMin = FLOOR(bbox.yMin); bbox.xMax = CEILING(bbox.xMax); bbox.yMax = CEILING(bbox.yMax); To get the bbox in pixel coordinates, set ‘bbox_mode’ to . To get the bbox in grid-fitted pixel coordinates, set ‘bbox_mode’ to . The mode which indicates how to interpret the returned bounding box values. The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted. Convert a given glyph object to a bitmap glyph object. This function does nothing if the glyph format isn't scalable. The glyph image is translated with the ‘origin’ vector before rendering. The first parameter is a pointer to an handle, that will be replaced by this function (with newly allocated data). Typically, you would use (omitting error handling): --sample code ommitted-- An enumeration that describes how the data is rendered. A pointer to a vector used to translate the glyph image before rendering. Can be 0 (if no translation). The origin is expressed in 26.6 pixels. A boolean that indicates that the original glyph image should be destroyed by this function. It is never destroyed in case of error. Stroke a given outline glyph object with a given stroker. The source glyph is untouched in case of error. A stroker handle. A Boolean. If 1, the source glyph object is destroyed on success. New glyph handle. Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border. The source glyph is untouched in case of error. A stroker handle. A Boolean. If 1, return the inside border, otherwise the outside border. A Boolean. If 1, the source glyph object is destroyed on success. New glyph handle. Disposes the Glyph. The mode how the values of are returned. Return unscaled font units. Return unfitted 26.6 coordinates. Return grid-fitted 26.6 coordinates. Return coordinates in integer pixels. Return grid-fitted pixel coordinates. An enumeration type used to describe the format of a given glyph image. Note that this version of FreeType only supports two image formats, even though future font drivers will be able to register their own format. The value 0 is reserved. The glyph image is a composite of several other images. This format is only used with , and is used to report compound glyphs (like accented characters). The glyph image is a bitmap, and can be described as an . You generally need to access the ‘bitmap’ field of the structure to read it. The glyph image is a vectorial outline made of line segments and Bézier arcs; it can be described as an ; you generally want to access the ‘outline’ field of the structure to read it. The glyph image is a vectorial path with no inside and outside contours. Some Type 1 fonts, like those in the Hershey family, contain glyphs in this format. These are described as , but FreeType isn't currently capable of rendering them correctly. A structure used to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag has been used while loading the glyph, values are expressed in font units instead. If not disabled with , the values represent dimensions of the hinted glyph (in case hinting is applicable). Gets the glyph's width. Gets the glyph's height. Gets the left side bearing for horizontal layout. Gets the top side bearing for horizontal layout. Gets the advance width for horizontal layout. Gets the left side bearing for vertical layout. Gets the top side bearing for vertical layout. Larger positive values mean further below the vertical glyph origin. Gets the advance height for vertical layout. Positive values mean the glyph has a positive advance downward. FreeType root glyph slot class structure. A glyph slot is a container where individual glyphs can be loaded, be they in outline or bitmap format. If is called with default flags (see ) the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type 1 formats). This image can later be converted into a bitmap by calling . This function finds the current renderer for the native image's format, then invokes it. The renderer is in charge of transforming the native image through the slot's face transformation fields, then converting it into a bitmap that is returned in ‘slot->bitmap’. Note that ‘slot->bitmap_left’ and ‘slot->bitmap_top’ are also used to specify the position of the bitmap relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, ‘slot->format’ is also changed to . FT_Pos origin_x = 0; FT_Pos prev_rsb_delta = 0; for all glyphs do <compute kern between current and previous glyph and add it to `origin_x'> <load glyph with `FT_Load_Glyph'> if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) origin_x -= 64; else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) origin_x += 64; prev_rsb_delta = face->glyph->rsb_delta; <save glyph image, or render glyph, or ...> origin_x += face->glyph->advance.x; endfor Gets a handle to the FreeType library instance this slot belongs to. Gets a handle to the parent face object. Gets the next . In some cases (like some font tools), several glyph slots per face object can be a good thing. As this is rare, the glyph slots are listed through a direct, single-linked list using its ‘next’ field. Gets a typeless pointer which is unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object. Gets the metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the API function) and can be expressed either in 26.6 fractional pixels or font units. Note that even when the glyph image is transformed, the metrics are not. Gets the advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs. Gets the advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs. Gets the advance. This shorthand is, depending on , the transformed advance width for the glyph (in 26.6 fractional pixel format). As specified with , it uses either the ‘horiAdvance’ or the ‘vertAdvance’ value of ‘metrics’ field. Gets the glyph format. This field indicates the format of the image contained in the glyph slot. Typically , , or , but others are possible. Gets the bitmap. This field is used as a bitmap descriptor when the slot format is . Note that the address and content of the bitmap buffer can change between calls of and a few other functions. Gets the bitmap's left bearing expressed in integer pixels. Of course, this is only valid if the format is . Gets the bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the baseline to the top-most glyph scanline, upwards y coordinates being positive. Gets the outline descriptor for the current glyph image if its format is . Once a glyph is loaded, ‘outline’ can be transformed, distorted, embolded, etc. However, it must not be freed. Gets the number of subglyphs in a composite glyph. This field is only valid for the composite glyph format that should normally only be loaded with the flag. For now this is internal to FreeType. Gets an array of subglyph descriptors for composite glyphs. There are ‘num_subglyphs’ elements in there. Currently internal to FreeType. Gets the control data. Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data. Gets the length in bytes of the control data. Gets the difference between hinted and unhinted left side bearing while autohinting is active. Zero otherwise. Gets the difference between hinted and unhinted right side bearing while autohinting is active. Zero otherwise. Gets other data. Really wicked formats can use this pointer to present their own glyph image to client applications. Note that the application needs to know about the image format. Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the relevant renderer, and invoking it. This is the render mode used to render the glyph image into a bitmap. Retrieve a description of a given subglyph. Only use it if is ; an error is returned otherwise. The values of ‘*p_arg1’, ‘*p_arg2’, and ‘*p_transform’ must be interpreted depending on the flags returned in ‘*p_flags’. See the TrueType specification for details. The index of the subglyph. Must be less than . The glyph index of the subglyph. The subglyph flags, see . The subglyph's first argument (if any). The subglyph's second argument (if any). The subglyph transformation (if any). A function used to extract a glyph image from a slot. Note that the created object must be released with . A handle to the glyph object. Make sure that a glyph slot owns ‘slot->bitmap’. This function is to be used in combination with . An enumeration used to specify which kerning values to return in . Return scaled and grid-fitted kerning distances. Return scaled but un-grid-fitted kerning distances. Return the kerning vector in original font units. A handle to a FreeType library instance. Each ‘library’ is completely independent from the others; it is the ‘root’ of a set of objects like fonts, faces, sizes, etc. It also embeds a memory manager (see ), as well as a scan-line converter object (see ). For multi-threading applications each thread should have its own object. Initializes a new instance of the class. Initializes a new instance of the class. A custom FreeType memory manager. Finalizes an instance of the class. Gets a value indicating whether the object has been disposed. Gets the version of the FreeType library being used. This function calls to open a font by its pathname. A path to the font file. The index of the face within the font. The first face has index 0. A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL. This function calls to open a font which has been loaded into memory. You must not deallocate the memory before calling . A pointer to the beginning of the font data. The index of the face within the font. The first face has index 0. A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL. This function calls to open a font which has been loaded into memory. A pointer to the beginning of the font data. Length of the buffer The index of the face within the font. The first face has index 0. A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL. Create a object from a given resource described by . Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object which can be accessed directly through . OpenFace can be used to quickly check whether the font format of a given font resource is supported by FreeType. If the ‘faceIndex’ field is negative, the function's return value is 0 if the font format is recognized, or non-zero otherwise; the function returns a more or less empty face handle in ‘*aface’ (if ‘aface’ isn't NULL). The only useful field in this special case is which gives the number of faces within the font file. After examination, the returned structure should be deallocated with a call to . Each new face object created with this function also owns a default object, accessible as . See the discussion of reference counters in the description of FT_Reference_Face. A pointer to an structure which must be filled by the caller. The index of the face within the font. The first face has index 0. A handle to a new face object. If ‘faceIndex’ is greater than or equal to zero, it must be non-NULL. Create a new face object from a FOND resource. This function can be used to create objects from fonts that are installed in the system as follows. fond = GetResource( 'FOND', fontName ); error = FT_New_Face_From_FOND( library, fond, 0, &face ); A FOND resource. Only supported for the -1 ‘sanity check’ special case. A handle to a new face object. Create a new face object from a given resource and typeface index using an FSSpec to the font file. is identical to except it accepts an FSSpec instead of a path. FSSpec to the font file. The index of the face within the resource. The first face has index 0. A handle to a new face object. Create a new face object from a given resource and typeface index using an FSRef to the font file. is identical to except it accepts an FSRef instead of a path. FSRef to the font file. The index of the face within the resource. The first face has index 0. A handle to a new face object. Add a new module to a given library instance. An error will be returned if a module already exists by that name, or if the module requires a version of FreeType that is too great. A pointer to class descriptor for the module. Find a module by its name. FreeType's internal modules aren't documented very well, and you should look up the source code for details. The module's name (as an ASCII string). A module handle. 0 if none was found. Remove a given module from a library instance. The module object is destroyed by the function in case of success. A handle to a module object. Set a property for a given module. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. Note that only a few modules have properties. A generic pointer to a variable or structure which gives the new value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Set a property for a given module. The type of property to set. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. Note that only a few modules have properties. A generic pointer to a variable or structure which gives the new value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Set a property for a given module. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. Note that only a few modules have properties. A generic pointer to a variable or structure which gives the new value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Set a property for a given module. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. Note that only a few modules have properties. A generic pointer to a variable or structure which gives the new value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Get a module's property value. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. A generic pointer to a variable or structure which gives the value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Get a module's property value. The type of property to get. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. A generic pointer to a variable or structure which gives the value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Get a module's property value. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. A generic pointer to a variable or structure which gives the value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Get a module's property value. The module name. The property name. Properties are described in the ‘Synopsis’ subsection of the module's documentation. A generic pointer to a variable or structure which gives the value of the property. The exact definition of ‘value’ is dependent on the property; see the ‘Synopsis’ subsection of the module's documentation. Set a debug hook function for debugging the interpreter of a font format. Currently, four debug hook slots are available, but only two (for the TrueType and the Type 1 interpreter) are defined. Since the internal headers of FreeType are no longer installed, the symbol ‘FT_DEBUG_HOOK_TRUETYPE’ isn't available publicly. This is a bug and will be fixed in a forthcoming release. The index of the debug hook. You should use the values defined in ‘ftobjs.h’, e.g., ‘FT_DEBUG_HOOK_TRUETYPE’. The function used to debug the interpreter. Add the set of default drivers to a given library object. This is only useful when you create a library object with (usually to plug a custom memory manager). Retrieve the current renderer for a given glyph format. An error will be returned if a module already exists by that name, or if the module requires a version of FreeType that is too great. To add a new renderer, simply use . To retrieve a renderer by its name, use . The glyph format. A renderer handle. 0 if none found. Set the current renderer to use, and set additional mode. In case of success, the renderer will be used to convert glyph images in the renderer's known format into bitmaps. This doesn't change the current renderer for other formats. Currently, only the B/W renderer, if compiled with FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels anti-aliasing mode; this option must be set directly in ‘ftraster.c’ and is undefined by default) accepts a single tag ‘pal5’ to set its gray palette as a character string with 5 elements. Consequently, the third and fourth argument are zero normally. A handle to the renderer object. The number of additional parameters. Additional parameters. This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling with or . This feature is always disabled by default. Clients must make an explicit call to this function with a ‘filter’ value other than in order to enable it. Due to PATENTS covering subpixel rendering, this function doesn't do anything except returning if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not defined in your build of the library, which should correspond to all default builds of FreeType. The filter affects glyph bitmaps rendered through , , , and . It does not affect the output of and . If this feature is activated, the dimensions of LCD glyph bitmaps are either larger or taller than the dimensions of the corresponding outline with regards to the pixel grid. For example, for , the filter adds up to 3 pixels to the left, and up to 3 pixels to the right. The bitmap offset values are adjusted correctly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter. The filter type. You can use here to disable this feature, or to use a default filter that should work well on most LCD screens. Use this function to override the filter weights selected by . By default, FreeType uses the quintuple (0x00, 0x55, 0x56, 0x55, 0x00) for , and (0x10, 0x40, 0x70, 0x40, 0x10) for and . Due to PATENTS covering subpixel rendering, this function doesn't do anything except returning if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not defined in your build of the library, which should correspond to all default builds of FreeType. This function must be called after to have any effect. A pointer to an array; the function copies the first five bytes and uses them to specify the filter weights. Return an value to indicate which level of the TrueType virtual machine a given library instance supports. A value indicating which level is supported. Disposes the Library. A list of bit-field constants used with to indicate what kind of operations to perform during glyph loading. By default, hinting is enabled and the font's native hinter (see ) is preferred over the auto-hinter. You can disable hinting by setting or change the precedence by setting . You can also set in case you don't want the auto-hinter to be used at all. See the description of for a special exception (affecting only a handful of Asian fonts). Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See for details. Corresponding to 0, this value is used as the default glyph load operation. In this case, the following happens: FreeType looks for a bitmap for the glyph corresponding to the face's current size. If one is found, the function returns. The bitmap data can be accessed from the glyph slot (see note below). If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then ‘hinted’ to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below). Note that by default, the glyph loader doesn't render outlines into bitmaps. The following flags are used to modify this default behaviour to more specific and useful cases. Don't scale the outline glyph loaded, but keep it in font units. This flag implies and , and unsets . Disable hinting. This generally generates ‘blurrier’ bitmap glyph when the glyph is rendered in any of the anti-aliased modes. See also the note below. This flag is implied by . Call after the glyph is loaded. By default, the glyph is rendered in mode. This can be overridden by or . This flag is unset by . Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag. always sets this flag. Load the glyph for vertical text layout. Don't use it as it is problematic currently. Indicates that the auto-hinter is preferred over the font's native hinter. See also the note below. Indicates that the font driver should crop the loaded bitmap glyph (i.e., remove all space around its black bits). Not all drivers implement this. Indicates that the font driver should perform pedantic verifications during glyph loading. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also. Ignored. Deprecated. This flag is only used internally. It merely indicates that the font driver should not load composite glyphs recursively. Instead, it should set the ‘num_subglyph’ and ‘subglyphs’ values of the glyph slot accordingly, and set ‘glyph->format’ to . The description of sub-glyphs is not available to client applications for now. This flag implies and . Indicates that the transform matrix set by should be ignored. This flag is used with to indicate that you want to render an outline glyph to a 1-bit monochrome bitmap glyph, with 8 pixels packed into each byte of the bitmap data. Note that this has no effect on the hinting algorithm used. You should rather use so that the monochrome-optimized hinting algorithm is used. Indicates that the ‘linearHoriAdvance’ and ‘linearVertAdvance’ fields of should be kept in font units. See for details. Disable auto-hinter. See also the note below. This flag is used to request loading of color embedded-bitmap images. The resulting color bitmaps, if available, will have the format. When the flag is not used and color bitmaps are found, they will be converted to 256-level gray bitmaps transparently. Those bitmaps will be in the format. A bit-flag to be OR-ed with the ‘flags’ parameter of the and functions. If set, it indicates that you want these functions to fail if the corresponding hinting mode or font driver doesn't allow for very quick advance computation. Typically, glyphs which are either unscaled, unhinted, bitmapped, or light-hinted can have their advance width computed very quickly. Normal and bytecode hinted modes, which require loading, scaling, and hinting of the glyph outline, are extremely slow by comparison. A list of values that are used to select a specific hinting algorithm to use by the hinter. You should OR one of these values to your ‘load_flags’ when calling . Note that font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set to ensure that the auto-hinter is used. Also note that is an exception, in that it always implies . You should use only one of the values in your ‘load_flags’. They can't be ORed. If is also set, the glyph is rendered in the corresponding mode (i.e., the mode which matches the used algorithm best) unless is set. You can use a hinting algorithm that doesn't correspond to the same rendering mode. As an example, it is possible to use the ‘light’ hinting algorithm and have the results rendered in horizontal LCD pixel mode, with code like: FT_Load_Glyph( face, glyph_index, load_flags | FT_LOAD_TARGET_LIGHT ); FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); This corresponds to the default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use instead. A lighter hinting algorithm for non-monochrome modes. Many generated glyphs are more fuzzy but better resemble its original shape. A bit like rendering on Mac OS X. As a special exception, this target implies . Strong hinting algorithm that should only be used for monochrome output. The result is probably unpleasant if the glyph is rendered in non-monochrome modes. A variant of optimized for horizontally decimated LCD displays. A variant of optimized for vertically decimated LCD displays. A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed float format. The computation performed is: x' = x*xx + y*xy y' = x*yx + y*yy Initializes a new instance of the struct. Matrix coefficient XX. Matrix coefficient XY. Matrix coefficient YX. Matrix coefficient YY. Initializes a new instance of the struct. Matrix coefficients XX, XY. Matrix coefficients YX, YY. Gets or sets the matrix coefficient. Gets or sets the matrix coefficient. Gets or sets the matrix coefficient. Gets or sets the matrix coefficient. Compares two instances of for equality. A . Another . A value indicating equality. Compares two instances of for inequality. A . Another . A value indicating inequality. Perform the matrix operation ‘b = a*b’. The result is undefined if either ‘a’ or ‘b’ is zero. A pointer to matrix ‘a’. A pointer to matrix ‘b’. Perform the matrix operation ‘b = a*b’. The result is undefined if either ‘a’ or ‘b’ is zero. A pointer to matrix ‘b’. Invert a 2x2 matrix. Return an error if it can't be inverted. Compares this instance of to another for equality. A . A value indicating equality. Compares this instance of to an object for equality. An object. A value indicating equality. Gets a unique hash code for this instance. A hash code. A handle to a given FreeType module object. Each module can be a font driver, a renderer, or anything else that provides services to the formers. A structure used to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions and . The stream type is determined by the contents of which are tested in the following order by : If the bit is set, assume that this is a memory file of bytes, located at . The data are are not copied, and the client is responsible for releasing and destroying them after the corresponding call to . Otherwise, if the bit is set, assume that a custom input stream is used. Otherwise, if the bit is set, assume that this is a normal file and use to open it. If the bit is set, only tries to open the file with the driver whose handler is in . If the bit is set, the parameters given by and is used. They are ignored otherwise. Ideally, both the and fields should be tagged as ‘const’; this is missing for API backwards compatibility. In other words, applications should treat them as read-only. Gets a set of bit flags indicating how to use the structure. Gets the first byte of the file in memory. Gets the size in bytes of the file in memory. Gets a pointer to an 8-bit file pathname. Gets a handle to a source stream object. Gets the font driver to use to open the face. If set to 0, FreeType tries to load the face with each one of the drivers in its list. This field is exclusively used by . Gets the number of extra parameters. Gets the extra parameters passed to the font driver when opening a new face. A list of bit-field constants used within the ‘flags’ field of the structure. The , , and flags are mutually exclusive. This is a memory-based stream. Copy the stream from the ‘stream’ field. Create a new input stream from a C path name. Use the ‘driver’ field. Use the ‘num_params’ and ‘params’ fields. This structure is used to describe an outline to the scan-line converter. The B/W rasterizer only checks bit 2 in the ‘tags’ array for the first point of each contour. The drop-out mode as given with , , and in ‘flags’ is then overridden. Initializes a new instance of the class. The reason why this function takes a ‘library’ parameter is simply to use the library's memory allocator. A handle to the library object from where the outline is allocated. Note however that the new outline will not necessarily be freed, when destroying the library, by . The maximum number of points within the outline. The maximum number of contours within the outline. Initializes a new instance of the class. A handle to the memory object from where the outline is allocated. The maximum number of points within the outline. The maximum number of contours within the outline. Finalizes an instance of the class. Gets a value indicating whether the has been disposed. Gets the number of contours in the outline. Gets the number of points in the outline. Gets a pointer to an array of ‘PointsCount’ elements, giving the outline's point coordinates. Gets a pointer to an array of ‘PointsCount’ chars, giving each outline point's type. If bit 0 is unset, the point is ‘off’ the curve, i.e., a Bézier control point, while it is ‘on’ if set. Bit 1 is meaningful for ‘off’ points only. If set, it indicates a third-order Bézier arc control point; and a second-order control point if unset. If bit 2 is set, bits 5-7 contain the drop-out mode (as defined in the OpenType specification; the value is the same as the argument to the SCANMODE instruction). Bits 3 and 4 are reserved for internal purposes. Gets an array of ‘ContoursCount’ shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points ‘0’ to ‘Contours[0]’, the second one is defined by the points ‘Contours[0]+1’ to ‘Contours[1]’, etc. Gets a set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on how to convert/grid-fit it. Copy an outline into another one. Both objects must have the same sizes (number of points & number of contours) when this function is called. A handle to the target outline. Apply a simple translation to the points of an outline. The horizontal offset. The vertical offset. Apply a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc. You can use if you need to translate the outline's points. A pointer to the transformation matrix. Embolden an outline. The new outline will be at most 4 times ‘strength’ pixels wider and higher. You may think of the left and bottom borders as unchanged. Negative ‘strength’ values to reduce the outline thickness are possible also. The used algorithm to increase or decrease the thickness of the glyph doesn't change the number of points; this means that certain situations like acute angles or intersections are sometimes handled incorrectly. If you need ‘better’ metrics values you should call or . FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) FT_Outline_Embolden( &face->slot->outline, strength ); How strong the glyph is emboldened. Expressed in 26.6 pixel format. Embolden an outline. The new outline will be ‘xstrength’ pixels wider and ‘ystrength’ pixels higher. Otherwise, it is similar to , which uses the same strength in both directions. How strong the glyph is emboldened in the X direction. Expressed in 26.6 pixel format. How strong the glyph is emboldened in the Y direction. Expressed in 26.6 pixel format. Reverse the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs. This function toggles the bit flag in the outline's ‘flags’ field. It shouldn't be used by a normal client application, unless it knows what it is doing. Check the contents of an outline descriptor. Compute the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm which returns very quickly when the two boxes coincide. Otherwise, the outline Bézier arcs are traversed to extract their extrema. If the font is tricky and the glyph has been loaded with , the resulting BBox is meaningless. To get reasonable values for the BBox it is necessary to load the glyph at a large ppem value (so that the hinting instructions can properly shift and scale the subglyphs), then extracting the BBox which can be eventually converted back to font units. The outline's exact bounding box. Walk over an outline's structure to decompose it into individual segments and Bézier arcs. This function also emits ‘move to’ operations to indicate the start of new contours in the outline. A table of ‘emitters’, i.e., function pointers called during decomposition to indicate path operations. A typeless pointer which is passed to each emitter during the decomposition. It can be used to store the state during the decomposition. Return an outline's ‘control box’. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline which contains Bézier outside arcs). Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the ‘ftbbox’ component which is dedicated to this single task. See for a discussion of tricky fonts. The outline's control box. Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap. This function does NOT CREATE the bitmap, it only renders an outline image within the one you pass to it! Consequently, the various fields in ‘abitmap’ should be set accordingly. It will use the raster corresponding to the default glyph format. The value of the ‘num_grays’ field in ‘abitmap’ is ignored. If you select the gray-level rasterizer, and you want less than 256 gray levels, you have to use directly. A pointer to the target bitmap descriptor. Render an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap. This function does NOT CREATE the bitmap, it only renders an outline image within the one you pass to it! Consequently, the various fields in ‘abitmap’ should be set accordingly. It will use the raster corresponding to the default glyph format. The value of the ‘num_grays’ field in ‘abitmap’ is ignored. If you select the gray-level rasterizer, and you want less than 256 gray levels, you have to use directly. A handle to a FreeType library object. A pointer to the target bitmap descriptor. Render an outline within a bitmap using the current scan-convert. This function uses an structure as an argument, allowing advanced features like direct composition, translucency, etc. You should know what you are doing and how works to use this function. The field ‘params.source’ will be set to ‘outline’ before the scan converter is called, which means that the value you give to it is actually ignored. The gray-level rasterizer always uses 256 gray levels. If you want less gray levels, you have to provide your own span callback. See the value of the ‘flags’ field in the structure for more details. A pointer to an structure used to describe the rendering operation. Render an outline within a bitmap using the current scan-convert. This function uses an structure as an argument, allowing advanced features like direct composition, translucency, etc. You should know what you are doing and how works to use this function. The field ‘params.source’ will be set to ‘outline’ before the scan converter is called, which means that the value you give to it is actually ignored. The gray-level rasterizer always uses 256 gray levels. If you want less gray levels, you have to provide your own span callback. See the value of the ‘flags’ field in the structure for more details. A handle to a FreeType library object. A pointer to an structure used to describe the rendering operation. This function analyzes a glyph outline and tries to compute its fill orientation (see ). This is done by computing the direction of each global horizontal and/or vertical extrema within the outline. Note that this will return for empty outlines. The orientation. Retrieve the value corresponding to the ‘inside’ borders of a given outline. The border index. for empty or invalid outlines. Retrieve the value corresponding to the ‘outside’ borders of a given outline. The border index. for empty or invalid outlines. Disposes an instance of the class. A list of bit-field constants use for the flags in an outline's ‘flags’ field. The flags , , and are ignored by the smooth rasterizer. There exists a second mechanism to pass the drop-out mode to the B/W rasterizer; see the ‘tags’ field in . Please refer to the description of the ‘SCANTYPE’ instruction in the OpenType specification (in file ‘ttinst1.doc’) how simple drop-outs, smart drop-outs, and stubs are defined. Value 0 is reserved. If set, this flag indicates that the outline's field arrays (i.e., ‘points’, ‘flags’, and ‘contours’) are ‘owned’ by the outline object, and should thus be freed when it is destroyed. By default, outlines are filled using the non-zero winding rule. If set to 1, the outline will be filled using the even-odd fill rule (only works with the smooth rasterizer). By default, outside contours of an outline are oriented in clock-wise direction, as defined in the TrueType specification. This flag is set if the outline uses the opposite direction (typically for Type 1 fonts). This flag is ignored by the scan converter. By default, the scan converter will try to detect drop-outs in an outline and correct the glyph bitmap to ensure consistent shape continuity. If set, this flag hints the scan-line converter to ignore such cases. See below for more information. Select smart dropout control. If unset, use simple dropout control. Ignored if is set. See below for more information. If set, turn pixels on for ‘stubs’, otherwise exclude them. Ignored if is set. See below for more information. This flag indicates that the scan-line converter should try to convert this outline to bitmaps with the highest possible quality. It is typically set for small character sizes. Note that this is only a hint that might be completely ignored by a given scan-converter. This flag is set to force a given scan-converter to only use a single pass over the outline to render a bitmap glyph image. Normally, it is set for very large character sizes. It is only a hint that might be completely ignored by a given scan-converter. A function pointer type used to describe the signature of a ‘move to’ function during outline walking/decomposition. A ‘move to’ is emitted to start a new contour in an outline. A pointer to the target point of the ‘move to’. A typeless pointer which is passed from the caller of the decomposition function. Error code. 0 means success. A function pointer type used to describe the signature of a ‘line to’ function during outline walking/decomposition. A ‘line to’ is emitted to indicate a segment in the outline. A pointer to the target point of the ‘line to’. A typeless pointer which is passed from the caller of the decomposition function. Error code. 0 means success. A function pointer type used to describe the signature of a ‘conic to’ function during outline walking or decomposition. A ‘conic to’ is emitted to indicate a second-order Bézier arc in the outline. An intermediate control point between the last position and the new target in ‘to’. A pointer to the target end point of the conic arc. A typeless pointer which is passed from the caller of the decomposition function. Error code. 0 means success. A function pointer type used to describe the signature of a ‘cubic to’ function during outline walking or decomposition. A ‘cubic to’ is emitted to indicate a third-order Bézier arc. A pointer to the first Bézier control point. A pointer to the second Bézier control point. A pointer to the target end point. A typeless pointer which is passed from the caller of the decomposition function. Error code. 0 means success. A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Béziers. The point coordinates sent to the emitters are the transformed version of the original coordinates (this is important for high accuracy during scan-conversion). The transformation is simple: x' = (x << shift) - delta y' = (x << shift) - delta Set the values of ‘shift’ and ‘delta’ to 0 to get the original point coordinates. Initializes a new instance of the OutlineFuncs class. Initializes a new instance of the OutlineFuncs class. The move to delegate. The line to delegate. The conic to delegate. The cubic to delegate. A value to shift by. A delta to transform by. Gets or sets the ‘move to’ emitter. Gets or sets the segment emitter. Gets or sets the second-order Bézier arc emitter. Gets or sets the third-order Bézier arc emitter. Gets or sets the shift that is applied to coordinates before they are sent to the emitter. Gets the delta that is applied to coordinates before they are sent to the emitter, but after the shift. A simple structure used to pass more or less generic parameters to . The ID and function of parameters are driver-specific. See the various flags for more information. Gets a four-byte identification tag. Gets a pointer to the parameter data. Constants used as the tag of structures. A constant used as the tag of structures to make ignore preferred family subfamily names in ‘name’ table since OpenType version 1.4. For backwards compatibility with legacy systems which has 4-face-per-family restriction. A constant used as the tag of structures to make ignore preferred subfamily names in ‘name’ table since OpenType version 1.4. For backwards compatibility with legacy systems which has 4-face-per-family restriction. A constant used as the tag of structures to indicate an incremental loading object to be used by FreeType. A constant used as the tag of an structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by . An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future. Value 0 is reserved. A monochrome bitmap, using 1 bit per pixel. Note that pixels are stored in most-significant order (MSB), which means that the left-most pixel in a byte has value 128. An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte. Note that the number of ‘gray’ levels is stored in the ‘num_grays’ field of the structure (it generally is 256). A 2-bit per pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however. A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however. An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also . An 8-bit bitmap, representing RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also . An image with four 8-bit channels per pixel, representing a color image (such as emoticons) with alpha channel. For each pixel, the format is BGRA, which means, the blue channel comes first in memory. The color channels are pre-multiplied and in the sRGB colorspace. For example, full red at half-translucent opacity will be represented as ‘00,00,80,80’, not ‘00,00,FF,80’. An enumeration type that lists the render modes supported by FreeType 2. Each mode corresponds to a specific type of scanline conversion performed on the outline. For bitmap fonts and embedded bitmaps the field in the structure gives the format of the returned bitmap. All modes except use 256 levels of opacity. The LCD-optimized glyph bitmaps produced by can be filtered to reduce color-fringes by using (not active in the default builds). It is up to the caller to either call (if available) or do the filtering itself. The selected render mode only affects vector glyphs of a font. Embedded bitmaps often have a different pixel mode like . You can use to transform them into 8-bit pixmaps. This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps. This is equivalent to . It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. This mode corresponds to 1-bit bitmaps (with 2 levels of opacity). This mode corresponds to horizontal RGB and BGR sub-pixel displays like LCD screens. It produces 8-bit bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the mode. This mode corresponds to vertical RGB and BGR sub-pixel displays (like PDA screens, rotated LCD displays, etc.). It produces 8-bit bitmaps that are 3 times the height of the original glyph outline in pixels and use the mode. FreeType root size class structure. A size object models a face object at a given size. Initializes a new instance of the class. The parent face. Finalizes an instance of the FTSize class. Gets a value indicating whether the object has been disposed. Gets a handle to the parent face object. Gets or sets a typeless pointer, which is unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each size object. Gets metrics for this size object. This field is read-only. Even though it is possible to create several size objects for a given face (see for details), functions like or only use the one which has been activated last to determine the ‘current character pixel size’. This function can be used to ‘activate’ a previously created size object. If ‘face’ is the size's parent face object, this function changes the value of ‘face->size’ to the input size handle. Diposes the FTSize. The size metrics structure gives the metrics of a size object. The scaling values, if relevant, are determined first during a size changing operation. The remaining fields are then set by the driver. For scalable formats, they are usually set to scaled values of the corresponding fields in . Note that due to glyph hinting, these values might not be exact for certain fonts. Thus they must be treated as unreliable with an error margin of at least one pixel! Indeed, the only way to get the exact metrics is to render all glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations. The structure is valid for bitmap fonts also. Gets the width of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to as ‘nominal width’. Gets the height of the scaled EM square in pixels, hence the term ‘ppem’ (pixels per EM). It is also referred to as ‘nominal height’. Gets a 16.16 fractional scaling value used to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats. Gets a 16.16 fractional scaling value used to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats. Gets the ascender in 26.6 fractional pixels. Gets the descender in 26.6 fractional pixels. Gets the height in 26.6 fractional pixels. Gets the maximal advance width in 26.6 fractional pixels. A structure used to model a size request. If is zero, then the horizontal scaling value is set equal to the vertical scaling value, and vice versa. Gets the type of request. See . Gets or sets the desired width. Gets or sets the desired height. Gets or sets the horizontal resolution. If set to zero, is treated as a 26.6 fractional pixel value. Gets or sets the horizontal resolution. If set to zero, is treated as a 26.6 fractional pixel value. Compares two s for equality. A . Another . A value indicating equality. Compares two s for inequality. A . Another . A value indicating inequality. Compares this instance of to another for equality. A . A value indicating equality. Compares this instance of to another object for equality. An object. A value indicating equality. Gets a unique hash code for this instance. A unique hash code. An enumeration type that lists the supported size request types. The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver. See the note section of if you wonder how size requesting relates to scaling values. The nominal size. The ‘units_per_EM’ field of is used to determine both scaling values. The real dimension. The sum of the the ‘ascender’ and (minus of) the ‘descender’ fields of are used to determine both scaling values. The font bounding box. The width and height of the ‘bbox’ field of are used to determine the horizontal and vertical scaling value, respectively. The ‘max_advance_width’ field of is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as does. Finally, both scaling values are set to the smaller one. This type is useful if you want to specify the font size for, say, a window of a given dimension and 80x24 cells. Specify the scaling values directly. A structure used to model a single span of gray (or black) pixels when rendering a monochrome or anti-aliased bitmap. This structure is used by the span drawing callback type named which takes the y coordinate of the span as a a parameter. The coverage value is always between 0 and 255. If you want less gray values, the callback function has to reduce them. Gets the span's horizontal start position. Gets the span's length in pixels. Gets the span color/coverage, ranging from 0 (background) to 255 (foreground). Only used for anti-aliased rendering. A function used to seek and read data from a given input stream. This function might be called to perform a seek or skip operation with a ‘count’ of 0. A non-zero return value then indicates an error. A handle to the source stream. The offset of read in stream (always from start). The address of the read buffer. The number of bytes to read from the stream. The number of bytes effectively read by the stream. A function used to close a given input stream. A handle to the target stream. A handle to an input stream. Gets base. For memory-based streams, this is the address of the first stream byte in memory. This field should always be set to NULL for disk-based streams. Gets the stream size in bytes. Gets the current position within the stream. Gets the descriptor. This field is a union that can hold an integer or a pointer. It is used by stream implementations to store file descriptors or ‘FILE*’ pointers. Gets the path name. This field is completely ignored by FreeType. However, it is often useful during debugging to use it to store the stream's filename (where available). Gets the stream's input function. Gets the stream's close function. Gets the memory manager to use to preload frames. This is set internally by FreeType and shouldn't be touched by stream implementations. Gets the cursor. This field is set and used internally by FreeType when parsing frames. Gets the limit. This field is set and used internally by FreeType when parsing frames. Open a new stream to parse gzip-compressed font files. This is mainly used to support the compressed ‘*.pcf.gz’ fonts that come with XFree86. The source stream must be opened before calling this function. Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the source stream. None of the stream objects will be released to the heap. The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream. In certain builds of the library, gzip compression recognition is automatically handled when calling or . This means that if no font driver is capable of handling the raw compressed file, the library will try to open a gzipped stream from it and re-open the face with it. This function may return if your build of FreeType was not compiled with zlib support. The source stream. Open a new stream to parse LZW-compressed font files. This is mainly used to support the compressed ‘*.pcf.Z’ fonts that come with XFree86. The source stream must be opened before calling this function. Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the source stream. None of the stream objects will be released to the heap. The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream. In certain builds of the library, LZW compression recognition is automatically handled when calling or . This means that if no font driver is capable of handling the raw compressed file, the library will try to open a LZW stream from it and re-open the face with it. This function may return if your build of FreeType was not compiled with LZW support. The source stream. Open a new stream to parse bzip2-compressed font files. This is mainly used to support the compressed ‘*.pcf.bz2’ fonts that come with XFree86. The source stream must be opened before calling this function. Calling the internal function ‘FT_Stream_Close’ on the new stream will not call ‘FT_Stream_Close’ on the source stream. None of the stream objects will be released to the heap. The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream. In certain builds of the library, bzip2 compression recognition is automatically handled when calling or . This means that if no font driver is capable of handling the raw compressed file, the library will try to open a bzip2 stream from it and re-open the face with it. This function may return if your build of FreeType was not compiled with bzip2 support. The source stream. A list of bit-flags used to indicate the style of a given face. These are used in the ‘style_flags’ field of . The style information as provided by FreeType is very basic. More details are beyond the scope and should be done on a higher level (for example, by analyzing various fields of the ‘OS/2’ table in SFNT based fonts). No style flags. Indicates that a given face style is italic or oblique. Indicates that a given face is bold. The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites). The subglyph implementation is not part of the high-level API, hence the forward structure declaration. You can however retrieve subglyph information with . A list of constants used to describe subglyphs. Please refer to the TrueType specification for the meaning of the various flags. A simple structure used to store a 2D vector. Initializes a new instance of the struct. The horizontal coordinate. The vertical coordinate. Gets or sets the horizontal coordinate. Gets or sets the vertical coordinate. Compares two instances of for equality. A . Another . A value indicating equality. Compares two instances of for inequality. A . Another . A value indicating inequality. Return the unit vector corresponding to a given angle. After the call, the value of ‘vec.x’ will be ‘sin(angle)’, and the value of ‘vec.y’ will be ‘cos(angle)’. This function is useful to retrieve both the sinus and cosinus of a given angle quickly. The address of angle. The address of target vector. Compute vector coordinates from a length and angle. The vector length. The vector angle. The address of source vector. Transform a single vector through a 2x2 matrix. The result is undefined if either ‘vector’ or ‘matrix’ is invalid. A pointer to the source 2x2 matrix. Rotate a vector by a given angle. The address of angle. Return the length of a given vector. The vector length, expressed in the same units that the original vector coordinates. Compute both the length and angle of a given vector. The vector length. The vector angle. Compares this instance of to another for equality. A . A value indicating equality. Compares this instance of to an object for equality. An object. A value indicating equality. Gets a unique hash code for this instance. A hash code. ================================================ FILE: ThirdParty/Typography/README.md ================================================ https://github.com/kniEngine/kniDependencies.Typography/ ================================================ FILE: ThirdParty/Typography/netstandard2.0/Typography.GlyphLayout.deps.json ================================================ { "runtimeTarget": { "name": ".NETStandard,Version=v2.0/", "signature": "" }, "compilationOptions": {}, "targets": { ".NETStandard,Version=v2.0": {}, ".NETStandard,Version=v2.0/": { "Typography.GlyphLayout/1.0.0": { "dependencies": { "NETStandard.Library": "2.0.3", "Typography.OpenFont": "1.0.0" }, "runtime": { "Typography.GlyphLayout.dll": {} } }, "Microsoft.NETCore.Platforms/1.1.0": {}, "NETStandard.Library/2.0.3": { "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0" } }, "nkast.Xna.Framework/4.2.9001": { "runtime": { "lib/netstandard2.0/Xna.Framework.dll": { "assemblyVersion": "4.2.9001.0", "fileVersion": "4.2.9001.0" } } }, "Typography.OpenFont/1.0.0": { "dependencies": { "nkast.Xna.Framework": "4.2.9001" }, "runtime": { "Typography.OpenFont.dll": { "assemblyVersion": "1.0.0.0", "fileVersion": "1.0.0.0" } } } } }, "libraries": { "Typography.GlyphLayout/1.0.0": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "serviceable": true, "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", "path": "microsoft.netcore.platforms/1.1.0", "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" }, "NETStandard.Library/2.0.3": { "type": "package", "serviceable": true, "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, "nkast.Xna.Framework/4.2.9001": { "type": "package", "serviceable": true, "sha512": "sha512-HGW9WIYZ/+uwQvCZTdPKMmLWIdcTfDZ42LbYZpRwwOkL1SJRcD3/cL2PfhUffMDwqwz1BMFfMacOmd3sfJizYQ==", "path": "nkast.xna.framework/4.2.9001", "hashPath": "nkast.xna.framework.4.2.9001.nupkg.sha512" }, "Typography.OpenFont/1.0.0": { "type": "project", "serviceable": false, "sha512": "" } } } ================================================ FILE: ThirdParty/Typography/netstandard2.0/Typography.OpenFont.deps.json ================================================ { "runtimeTarget": { "name": ".NETStandard,Version=v2.0/", "signature": "" }, "compilationOptions": {}, "targets": { ".NETStandard,Version=v2.0": {}, ".NETStandard,Version=v2.0/": { "Typography.OpenFont/1.0.0": { "dependencies": { "NETStandard.Library": "2.0.3", "nkast.Xna.Framework": "4.2.9001" }, "runtime": { "Typography.OpenFont.dll": {} } }, "Microsoft.NETCore.Platforms/1.1.0": {}, "NETStandard.Library/2.0.3": { "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0" } }, "nkast.Xna.Framework/4.2.9001": { "runtime": { "lib/netstandard2.0/Xna.Framework.dll": { "assemblyVersion": "4.2.9001.0", "fileVersion": "4.2.9001.0" } } } } }, "libraries": { "Typography.OpenFont/1.0.0": { "type": "project", "serviceable": false, "sha512": "" }, "Microsoft.NETCore.Platforms/1.1.0": { "type": "package", "serviceable": true, "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", "path": "microsoft.netcore.platforms/1.1.0", "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" }, "NETStandard.Library/2.0.3": { "type": "package", "serviceable": true, "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", "path": "netstandard.library/2.0.3", "hashPath": "netstandard.library.2.0.3.nupkg.sha512" }, "nkast.Xna.Framework/4.2.9001": { "type": "package", "serviceable": true, "sha512": "sha512-HGW9WIYZ/+uwQvCZTdPKMmLWIdcTfDZ42LbYZpRwwOkL1SJRcD3/cL2PfhUffMDwqwz1BMFfMacOmd3sfJizYQ==", "path": "nkast.xna.framework/4.2.9001", "hashPath": "nkast.xna.framework.4.2.9001.nupkg.sha512" } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/App.config ================================================ ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ActionStack.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Linq; namespace Content.Pipeline.Editor { internal interface IProjectAction { bool Do(); bool Undo(); } internal delegate void CanUndoRedoChanged(bool canUndo, bool canRedo); partial class PipelineController { /// /// Represents a stack of undo/redo-able actions. /// private class ActionStack { private readonly List _undoStack; private readonly List _redoStack; public bool CanUndo { get; private set; } public bool CanRedo { get; private set; } public event CanUndoRedoChanged OnCanUndoRedoChanged; public ActionStack() { _undoStack = new List(); _redoStack = new List(); } public void Add(IProjectAction action) { _undoStack.Add(action); if (_redoStack.Count > 0) _redoStack.Clear(); Update(); } public void Undo() { if (!_undoStack.Any()) return; var action = _undoStack.Last(); if (action.Undo()) { _undoStack.Remove(action); _redoStack.Add(action); } Update(); } public void Redo() { if (!_redoStack.Any()) return; var action = _redoStack.Last(); if (action.Do()) { _redoStack.Remove(action); _undoStack.Add(action); } Update(); } public void Clear() { _undoStack.Clear(); _redoStack.Clear(); Update(); } private void Update() { var canUndo = _undoStack.Any(); var canRedo = _redoStack.Any(); if (canUndo != CanUndo || canRedo != CanRedo) { CanUndo = canUndo; CanRedo = canRedo; if (OnCanUndoRedoChanged != null) OnCanUndoRedoChanged(canUndo, canRedo); } } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/AssemblyAttributes.cs ================================================ using System.Reflection; using System; namespace Content.Pipeline.Editor { public static class AssemblyAttributes { public static string AssemblyTitle { get { object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); if (attributes.Length > 0) { AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; if (titleAttribute.Title != "") { return titleAttribute.Title; } } return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); } } public static string AssemblyVersion { get { return Assembly.GetExecutingAssembly().GetName().Version.ToString(); } } public static string AssemblyDescription { get { object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); if (attributes.Length == 0) { return ""; } return ((AssemblyDescriptionAttribute)attributes[0]).Description; } } public static string AssemblyProduct { get { object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); if (attributes.Length == 0) { return ""; } return ((AssemblyProductAttribute)attributes[0]).Product; } } public static string AssemblyCopyright { get { object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); if (attributes.Length == 0) { return ""; } return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; } } public static string AssemblyCompany { get { object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); if (attributes.Length == 0) { return ""; } return ((AssemblyCompanyAttribute)attributes[0]).Company; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/CommandLineParser.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.ComponentModel; namespace Content.Pipeline.Editor { /// /// Adapted from this generic command line argument parser: /// http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx /// public class MGBuildParser { #region Supporting Types public class PreprocessorProperty { public string Name; public string CurrentValue; public PreprocessorProperty() { Name = string.Empty; CurrentValue = string.Empty; } } public class PreprocessorPropertyCollection { private readonly List _properties; public PreprocessorPropertyCollection() { _properties = new List(); } public string this[string name] { get { foreach (var i in _properties) { if (i.Name.Equals(name)) return i.CurrentValue; } return null; } set { foreach (var i in _properties) { if (i.Name.Equals(name)) { i.CurrentValue = value; return; } } var prop = new PreprocessorProperty() { Name = name, CurrentValue = value, }; _properties.Add(prop); } } } #endregion private readonly object _optionsObject; private readonly Queue _requiredOptions; private readonly Dictionary _optionalOptions; private readonly List _requiredUsageHelp; public readonly PreprocessorPropertyCollection _properties; public delegate void ErrorCallback(string msg, object[] args); public event ErrorCallback OnError; public MGBuildParser(object optionsObject) { _optionsObject = optionsObject; _requiredOptions = new Queue(); _optionalOptions = new Dictionary(); _requiredUsageHelp = new List(); _properties = new PreprocessorPropertyCollection(); // Reflect to find what commandline options are available... // Fields foreach (var field in optionsObject.GetType().GetFields()) { var param = GetAttribute(field); if (param == null) continue; CheckReservedPrefixes(param.Name); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(field); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), field); } } // Properties foreach (var property in optionsObject.GetType().GetProperties()) { var param = GetAttribute(property); if (param == null) continue; CheckReservedPrefixes(param.Name); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(property); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), property); } } // Methods foreach (var method in optionsObject.GetType().GetMethods()) { var param = GetAttribute(method); if (param == null) continue; CheckReservedPrefixes(param.Name); // Only accept methods that take less than 1 parameter. if (method.GetParameters().Length > 1) throw new NotSupportedException("Methods must have one or zero parameters."); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(method); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), method); } } } public bool Parse(IEnumerable args) { args = Preprocess(args); var showUsage = true; var success = true; foreach (var arg in args) { showUsage = false; if (!ParseArgument(arg)) { success = false; break; } } var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0); if (missingRequiredOption != null) { ShowError("Missing argument '{0}'", GetAttribute(missingRequiredOption).Name); return false; } if (showUsage) ShowError(null); return success; } private IEnumerable Preprocess(IEnumerable args) { var output = new List(); var lines = new List(args); var ifstack = new Stack>(); var fileStack = new Stack(); while (lines.Count > 0) { var arg = lines[0]; lines.RemoveAt(0); if (arg.StartsWith("# Begin:")) { var file = arg.Substring(8); fileStack.Push(file); continue; } if (arg.StartsWith("# End:")) { fileStack.Pop(); continue; } if (arg.StartsWith("$endif")) { ifstack.Pop(); continue; } if (ifstack.Count > 0) { var skip = false; foreach (var i in ifstack) { var val = _properties[i.Item1]; if (!(i.Item2).Equals(val)) { skip = true; break; } } if (skip) continue; } if (arg.StartsWith("$set")) { var words = arg.Substring(5).Split('='); var name = words[0]; var value = words[1]; _properties[name] = value; continue; } if (arg.StartsWith("$if")) { if (fileStack.Count == 0) throw new Exception("$if is invalid outside of a response file."); var words = arg.Substring(4).Split('='); var name = words[0]; var value = words[1]; var condition = new Tuple(name, value); ifstack.Push(condition); continue; } if (arg.StartsWith("/@:") || arg.StartsWith("-@:")) { var file = arg.Substring(3); var commands = File.ReadAllLines(file); var offset = 0; lines.Insert(0, string.Format("# Begin:{0} ", file)); offset++; for (var j = 0; j < commands.Length; j++) { var line = commands[j]; if (string.IsNullOrEmpty(line)) continue; if (line.StartsWith("#")) continue; lines.Insert(offset, line); offset++; } lines.Insert(offset, string.Format("# End:{0}", file)); continue; } output.Add(arg); } return output.ToArray(); } private bool ParseArgument(string arg) { if (arg.StartsWith("/") || arg.StartsWith("-")) { // After the first escaped argument we can no // longer read non-escaped arguments. if (_requiredOptions.Count > 0) return false; // Parse an optional argument. char[] separators = {':'}; string[] split = arg.Substring(1).Split(separators, 2, StringSplitOptions.None); string name = split[0]; string value = (split.Length > 1) ? split[1] : "true"; MemberInfo member; if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out member)) { ShowError("Unknown option '{0}'", name); return false; } return SetOption(member, value); } if (_requiredOptions.Count > 0) { // Parse the next non escaped argument. var field = _requiredOptions.Peek(); if (!IsList(field)) _requiredOptions.Dequeue(); return SetOption(field, arg); } ShowError("Too many arguments"); return false; } bool SetOption(MemberInfo member, string value) { try { if (IsList(member)) { // Append this value to a list of options. GetList(member).Add(ChangeType(value, ListElementType(member))); } else { // Set the value of a single option. if (member is MethodInfo) { MethodInfo method = member as MethodInfo; ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length == 0) method.Invoke(_optionsObject, null); else method.Invoke(_optionsObject, new[] { ChangeType(value, parameters[0].ParameterType) }); } else if (member is FieldInfo) { FieldInfo field = member as FieldInfo; field.SetValue(_optionsObject, ChangeType(value, field.FieldType)); } else { PropertyInfo property = member as PropertyInfo; property.SetValue(_optionsObject, ChangeType(value, property.PropertyType), null); } } return true; } catch(TargetInvocationException tiex) { ShowError("Invalid value '{0}' for option '{1}'", value, GetAttribute(member).Name); ShowError(tiex.InnerException.Message); return false; } catch { ShowError("Invalid value '{0}' for option '{1}'", value, GetAttribute(member).Name); return false; } } static readonly string[] ReservedPrefixes = new[] { "$", "/", "#", "-", }; static void CheckReservedPrefixes(string str) { foreach (var i in ReservedPrefixes) { if (str.StartsWith(i)) throw new Exception(string.Format("'{0}' is a reserved prefix and cannot be used at the start of an argument name.", i)); } } static object ChangeType(string value, Type type) { TypeConverter converter = TypeDescriptor.GetConverter(type); return converter.ConvertFromInvariantString(value); } static bool IsList(MemberInfo member) { if (member is MethodInfo) return false; if (member is FieldInfo) return typeof(IList).IsAssignableFrom((member as FieldInfo).FieldType); return typeof(IList).IsAssignableFrom((member as PropertyInfo).PropertyType); } IList GetList(MemberInfo member) { if (member is PropertyInfo) return (IList)(member as PropertyInfo).GetValue(_optionsObject, null); if (member is FieldInfo) return (IList)(member as FieldInfo).GetValue(_optionsObject); throw new Exception(); } static Type ListElementType(MemberInfo member) { if (member is FieldInfo) { var field = member as FieldInfo; var interfaces = from i in field.FieldType.GetInterfaces() where i.IsGenericType && i.GetGenericTypeDefinition() == typeof (IEnumerable<>) select i; return interfaces.First().GetGenericArguments()[0]; } if (member is PropertyInfo) { var property = member as PropertyInfo; var interfaces = from i in property.PropertyType.GetInterfaces() where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>) select i; return interfaces.First().GetGenericArguments()[0]; } throw new ArgumentException("Only FieldInfo and PropertyInfo are valid arguments.", "member"); } public string Title { get; set; } bool IsWindows(PlatformID platform) { switch (platform) { case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: return true; } return false; } public void ShowError(string message, params object[] args) { if (!string.IsNullOrEmpty(message) && OnError != null) { OnError(message, args); return; } var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName); if (!string.IsNullOrEmpty(Title)) { Console.Error.WriteLine(Title); Console.Error.WriteLine(); } if (!string.IsNullOrEmpty(message)) { Console.Error.WriteLine(message, args); Console.Error.WriteLine(); } var defaultParamPrefix = IsWindows(Environment.OSVersion.Platform) ? " /" : " -"; Console.Error.WriteLine("Usage: {0} {1}{2}", name, string.Join(" ", _requiredUsageHelp), _optionalOptions.Count > 0 ? " " : string.Empty); if (_optionalOptions.Count > 0) { Console.Error.WriteLine(); Console.Error.WriteLine("Options:\n"); foreach (var pair in _optionalOptions) { var field = pair.Value as FieldInfo; var prop = pair.Value as PropertyInfo; var method = pair.Value as MethodInfo; var param = GetAttribute(pair.Value); var hasValue = false; if (field != null && field.FieldType != typeof (bool)) hasValue = true; if (prop != null && prop.PropertyType != typeof (bool)) hasValue = true; if (method != null && method.GetParameters().Length != 0) hasValue = true; if (hasValue) Console.Error.WriteLine(defaultParamPrefix + "{0}:<{1}>\n {2}\n", param.Name, param.ValueName, param.Description); else Console.Error.WriteLine(defaultParamPrefix + "{0}\n {1}\n", param.Name, param.Description); } } } static T GetAttribute(ICustomAttributeProvider provider) where T : Attribute { return provider.GetCustomAttributes(typeof(T), false).OfType().FirstOrDefault(); } } // Used on an optionsObject field or method to rename the corresponding commandline option. [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property)] public sealed class CommandLineParameterAttribute : Attribute { public CommandLineParameterAttribute() { ValueName = "value"; } public string Name { get; set; } public bool Required { get; set; } public string ValueName { get; set; } public string Description { get; set; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/CompressionMethod.cs ================================================ // Copyright (C)2024 Nick Kastellanos namespace Content.Pipeline.Editor { public enum CompressionMethod { Default = 0, //ZLX = 1, LZ4 = 2, Brotli = 3, } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentFolder.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.ComponentModel; using System.Linq; namespace Content.Pipeline.Editor { public class FolderItem : IProjectItem { public FolderItem(string path) { Location = path; Name = path; if (Name.Contains("/")) Name = Name.Split('/').Last(); } [Browsable(false)] public string OriginalPath { get { return Location; } } [Category("Common")] [Description("The name of this folder.")] public string Name { get; private set; } [Category("Common")] [Description("The file path to this folder.")] public string Location { get; private set; } [Browsable(false)] public string Icon { get; set; } [Browsable(false)] public bool Exists { get; set; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.Importer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; namespace Content.Pipeline.Editor { /// /// Custom converter for the Processor property of a ContentItem. /// internal class ImporterConverter : TypeConverter { public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { if (context.Instance is Array) { Array array = context.Instance as Array; foreach (var obj in array) { ContentItem item = obj as ContentItem; if (item.BuildAction == BuildAction.Copy) return false; } } else { ContentItem contentItem = context.Instance as ContentItem; if (contentItem.BuildAction == BuildAction.Copy) return false; } return true; } public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { return PipelineTypes.ImportersStandardValuesCollection; } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof (string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string str = value as string; foreach (ImporterTypeDescription i in PipelineTypes.Importers) { if (i.DisplayName.Equals(str)) return i; } if (string.IsNullOrEmpty(str)) return PipelineTypes.NullImporter; else return PipelineTypes.MissingImporter; } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { ImporterTypeDescription importer = (ImporterTypeDescription)value; // contentItem.Importer; //System.Diagnostics.Debug.Assert(importer == value); if (importer == PipelineTypes.MissingImporter) { ContentItem contentItem = (ContentItem)context.Instance; return string.Format("[missing] {0}", contentItem.ImporterName ?? "[null]"); } return importer.DisplayName; } return base.ConvertTo(context, culture, value, destinationType); } public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return false; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.Processor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; namespace Content.Pipeline.Editor { /// /// Custom converter for the Processor property of a ContentItem. /// internal class ProcessorConverter : TypeConverter { public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { if (context.Instance is Array) { Array array = context.Instance as Array; foreach (var obj in array) { ContentItem item = obj as ContentItem; if (item.BuildAction == BuildAction.Copy) return false; } } else { ContentItem contentItem = context.Instance as ContentItem; if (contentItem.BuildAction == BuildAction.Copy) return false; } return true; } public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { return PipelineTypes.ProcessorsStandardValuesCollection; } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof (string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { foreach (ProcessorTypeDescription i in PipelineTypes.Processors) { if (i.DisplayName.Equals(value)) return i; } } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { ProcessorTypeDescription processor = (ProcessorTypeDescription)value; if (processor == PipelineTypes.MissingProcessor) { ContentItem contentItem = context.Instance as ContentItem; return string.Format("[missing] {0}", contentItem.ProcessorName); } return processor.DisplayName; } return base.ConvertTo(context, culture, value, destinationType); } public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return false; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItem.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Globalization; using Microsoft.Xna.Framework.Content.Pipeline; namespace Content.Pipeline.Editor { public enum BuildAction { Build, Copy, } [TypeConverter(typeof(ContentItemConverter))] public class ContentItem : IProjectItem { public IContentItemObserver Observer; public string ImporterName; public string ProcessorName; public OpaqueDataDictionary ProcessorParams; private ImporterTypeDescription _importer; private ProcessorTypeDescription _processor; private BuildAction _buildAction; #region IProjectItem [Browsable(false)] public string OriginalPath { get; set; } public string OutputFile; // This refers to the "Link" which can override the default output location [Category("1.Common")] [Description("The file name of this item.")] public string Name { get { if (OutputFile != null) return System.IO.Path.GetFileName(OutputFile); return System.IO.Path.GetFileName(OriginalPath); } } [Category("1.Common")] [Description("The folder where this item is located.")] public string Location { get { return System.IO.Path.GetDirectoryName(OriginalPath); } } [Browsable(false)] public string Icon { get; set; } [Browsable(false)] public bool Exists { get; set; } #endregion [Category("2.Settings")] [DisplayName("Build Action")] [Description("The way to process this content item.")] public BuildAction BuildAction { get { return _buildAction; } set { if (_buildAction == value) return; _buildAction = value; if (Observer != null) Observer.OnItemModified(this); } } [Category("2.Settings")] [Description("The importer used to load the content file.")] [TypeConverter(typeof(ImporterConverter))] public ImporterTypeDescription Importer { get { return _importer; } set { if (_importer == value) return; _importer = value; ImporterName = _importer.TypeName; // Validate that our processor can accept input content of the type output by the new importer. if ((_processor == null || _processor.InputType != _importer.OutputType) && _processor != PipelineTypes.MissingProcessor) { // If it cannot, set the default processor. Processor = PipelineTypes.FindProcessor(_importer.DefaultProcessor, _importer); } if (Observer != null) Observer.OnItemModified(this); } } [Category("2.Settings")] [Description("The processor used to transform the content for runtime use.")] [TypeConverter(typeof(ProcessorConverter))] public ProcessorTypeDescription Processor { get { return _processor; } set { if (_processor == value) return; _processor = value; ProcessorName = _processor.TypeName; // When the processor changes reset our parameters // to the default for the processor type. ProcessorParams.Clear(); //foreach (var p in _processor.Properties) // ProcessorParams.Add(p.Name, p.DefaultValue); if (Observer != null) Observer.OnItemModified(this); // Note: // There is no need to validate that the new processor can accept input // of the type output by our importer, because that should be handled by // only showing valid processors in the drop-down (eg, within ProcessConverter). } } public void ResolveTypes() { if (BuildAction == BuildAction.Copy) { // Copy items do not have importers or processors. _importer = PipelineTypes.NullImporter; _processor = PipelineTypes.NullProcessor; } else { _importer = PipelineTypes.FindImporter(ImporterName, System.IO.Path.GetExtension(OriginalPath)); if (_importer != null && (string.IsNullOrEmpty(ImporterName) || ImporterName != _importer.TypeName)) ImporterName = _importer.TypeName; if (_importer == null) _importer = PipelineTypes.MissingImporter; _processor = PipelineTypes.FindProcessor(ProcessorName, _importer); if (_processor != null && (string.IsNullOrEmpty(ProcessorName) || ProcessorName != _processor.TypeName)) ProcessorName = _processor.TypeName; if (_processor == null) _processor = PipelineTypes.MissingProcessor; // ProcessorParams get deserialized as strings // this code converts them to object(s) of their actual type // so that the correct editor appears within the property grid. foreach (var p in _processor.Properties) { if (ProcessorParams.ContainsKey(p.Name)) { object src = ProcessorParams[p.Name]; if (src != null) { Type srcType = src.GetType(); TypeConverter converter = PipelineTypes.FindConverter(p.Type); // Should we throw an exception here? // This property will actually not be editable in the property grid // since we do not have a type converter for it. if (converter.CanConvertFrom(srcType)) { object dst = converter.ConvertFrom(null, CultureInfo.InvariantCulture, src); ProcessorParams[p.Name] = dst; } } } else { //ProcessorParams[p.Name] = p.DefaultValue; } } } } public override string ToString() { return System.IO.Path.GetFileName(OriginalPath); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemConverter.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.ComponentModel; namespace Content.Pipeline.Editor { public class ContentItemConverter : TypeConverter { private static Attribute[] CategoryProcessorParams = new Attribute[] { new CategoryAttribute("3.ProcessorParams") }; public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return true; } public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { PropertyDescriptorCollection props = new PropertyDescriptorCollection(null); foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true)) props.Add(prop); ContentItem contentItem = value as ContentItem; if (contentItem.Processor == PipelineTypes.MissingProcessor) { foreach (var p in contentItem.ProcessorParams) { PropertyDescriptor desc = new ReadonlyProcessorParamsPropertyDescriptor(p.Key, p.Value.GetType(), CategoryProcessorParams); props.Add(desc); } } else { foreach (var p in contentItem.Processor.Properties) { PropertyDescriptor desc = new ProcessorParamsPropertyDescriptor(p.Name, p.Type, CategoryProcessorParams); props.Add(desc); } } return props; } } public class ProcessorParamsPropertyDescriptor : PropertyDescriptor { private static Type _componentType = typeof(ContentItem); private readonly Type _propertyType; public ProcessorParamsPropertyDescriptor(string propertyName, Type propertyType, Attribute[] attrs) : base(propertyName, attrs) { _propertyType = propertyType; } public override object GetValue(object component) { ContentItem contentItem = component as ContentItem; if (contentItem.ProcessorParams.ContainsKey(base.Name)) return contentItem.ProcessorParams[base.Name]; if (contentItem.Processor.Properties.Contains(base.Name)) return contentItem.Processor.Properties[base.Name].DefaultValue; return string.Empty; } public override void SetValue(object component, object value) { ContentItem contentItem = component as ContentItem; contentItem.ProcessorParams[base.Name] = value; } public override void ResetValue(object component) { SetValue(component, null); } public override bool CanResetValue(object component) { return true; } public override Type ComponentType { get { return _componentType; } } public override bool IsReadOnly { get { return false; } } public override Type PropertyType { get { return _propertyType; } } public override bool ShouldSerializeValue(object component) { return true; } } public class ReadonlyProcessorParamsPropertyDescriptor : ProcessorParamsPropertyDescriptor { public ReadonlyProcessorParamsPropertyDescriptor(string propertyName, Type propertyType, Attribute[] attrs) : base(propertyName, propertyType, attrs) { } public override void SetValue(object component, object value) { } public override void ResetValue(object component) { } public override bool CanResetValue(object component) { return false; } public override bool IsReadOnly { get { return true; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemPathComparer.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System.Collections.Generic; namespace Content.Pipeline.Editor { internal class ContentItemPathComparer : IComparer { private readonly PathComparer _pathComparer = new PathComparer(); public int Compare(ContentItem x, ContentItem y) { return _pathComparer.Compare(x.OriginalPath, y.OriginalPath); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline; namespace Content.Pipeline.Editor { /// /// Snapshot of a ContentItem's state, used for undo/redo. /// internal class ContentItemState { public BuildAction BuildAction; public string SourceFile; public string ImporterName; public string ProcessorName; public OpaqueDataDictionary ProcessorParams; /// /// Create a ContentItemState storing member values of the passed ContentItem. /// public static ContentItemState Get(ContentItem item) { var state = new ContentItemState() { BuildAction = item.BuildAction, SourceFile = item.OriginalPath, ImporterName = item.ImporterName, ProcessorName = item.ProcessorName, ProcessorParams = new OpaqueDataDictionary(), }; foreach (var pair in item.ProcessorParams) { state.ProcessorParams[pair.Key] = pair.Value; } return state; } /// /// Set a ContentItem's member values from this state object. /// public void Apply(ContentItem item) { item.BuildAction = BuildAction; item.OriginalPath = SourceFile; item.ImporterName = ImporterName; item.ProcessorName = ProcessorName; item.ProcessorParams = new OpaqueDataDictionary(); foreach (var pair in ProcessorParams) { item.ProcessorParams[pair.Key] = pair.Value; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ContentItemTemplate.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Content.Pipeline.Editor { public class ContentItemTemplate { public string Label; public string Icon; public string ImporterName; public string ProcessorName; public string TemplateFile; public override string ToString() { return Label; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/FileType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Content.Pipeline.Editor { public enum FileType { Base, File, Folder } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/IController.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Content.Pipeline.Editor { public interface IContentItemObserver { void OnItemModified(ContentItem item); } interface IController : IContentItemObserver { /// /// Types of content which can be created and added to a project. /// IEnumerable Templates { get; } Selection Selection { get; } /// /// True if there is a project. /// bool ProjectOpen { get; } /// /// True if the project has unsaved changes. /// bool ProjectDirty { get; } /// /// True if the project is actively building. /// bool ProjectBuilding { get; } bool SingleThread { get; set; } /// /// The view this controller is attached to. /// IView View { get; } /// /// Triggered when the project starts loading. /// event Action OnProjectLoading; /// /// Triggered when the project finishes loading. /// event Action OnProjectLoaded; /// /// Triggered when the project finishes building. /// event Action OnBuildStarted; /// /// Triggered when the project finishes building. /// event Action OnBuildFinished; /// /// Notify controller that a property of Project or its contents has been modified. /// void OnProjectModified(); /// /// Notify controller that Project.References has been modified. /// void OnReferencesModified(); void NewProject(); void ImportProject(); void OpenProject(); void OpenProject(string projectFilePath); void CloseProject(); bool SaveProject(bool saveAs); void Build(bool rebuild); void RebuildItems(IEnumerable items); void Clean(); void CancelBuild(); bool Exit(); #region ContentItem void Move (string[] paths, string[] newpaths, FileType[] types); void Include(string initialDirectory); void IncludeFolder(string initialDirectory); void Include(IEnumerable files, IEnumerable folders); void Exclude(IEnumerable items, IEnumerable folders); void NewItem(string name, string location, ContentItemTemplate template); void NewFolder(string name, string location); void AddAction(IProjectAction action); IProjectItem GetItem(string originalPath); #endregion #region Undo, Redo event CanUndoRedoChanged OnCanUndoRedoChanged; bool CanRedo { get; } bool CanUndo { get; } void Undo(); void Redo(); #endregion string GetFullPath(string filePath); } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/IProjectItem.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Content.Pipeline.Editor { interface IProjectItem { string OriginalPath { get; } string Name { get; } string Location { get; } string Icon { get; set; } bool Exists { get; set; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/IProjectObserver.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Content.Pipeline.Editor { interface IProjectObserver { } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/IView.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Diagnostics; namespace Content.Pipeline.Editor { enum AskResult { Yes, No, Cancel } interface IView { void Attach(IController controller); AskResult AskSaveOrCancel(); bool AskSaveName(ref string filePath, string title); bool AskOpenProject(out string projectFilePath); bool AskImportProject(out string projectFilePath); void ShowError(string title, string message); void ShowMessage(string message); void BeginTreeUpdate(); void SetTreeRoot(IProjectItem item); void AddTreeItem(IProjectItem item); void AddTreeFolder(string folder); void RemoveTreeItem(ContentItem contentItem); void RemoveTreeFolder(string folder); void UpdateTreeItem(IProjectItem item); void EndTreeUpdate(); void UpdateProperties(IProjectItem item); void OutputAppend(string text); void OutputClear(); void OutputPopulateAssets(PipelineProject project, IEnumerable items); bool ChooseContentFile(string initialDirectory, out List files); bool ChooseContentFolder(string initialDirectory, out string folder); void OnTemplateDefined(ContentItemTemplate item); Process CreateProcess(string exe, string commands); } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/OutputParser.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Text.RegularExpressions; namespace Content.Pipeline.Editor { enum OutputState { Initialized, BuildBegin, Cleaning, Skipping, BuildAsset, BuildError, BuildWarning, BuildErrorContinue, BuildEnd, BuildTime, BuildTerminated, Unknown } class OutputParser { internal OutputState State { get; private set; } internal String Filename { get; private set; } internal String ErrorMessage { get; private set; } internal String BuildBeginTime { get; private set; } internal String BuildInfo { get; private set; } internal String BuildElapsedTime { get; private set; } Regex _reBuildBegin = new Regex(@"^(Build started)\W+(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reCleaning = new Regex(@"^(Cleaning)\W(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reSkipping = new Regex(@"^(Skipping)\W(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reBuildAsset = new Regex(@"^(?([a-zA-Z]:)?/.+?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reBuildError = new Regex(@"^(?([a-zA-Z]:)?/.+?)\W*?:\W*?error\W*?:\W*(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reFileErrorWithLineNum = new Regex(@"^(?.+?)(\((?[0-9]+),(?[0-9]+)(-(?[0-9]+))?\))?:\W*?(error)\W*(?[A-Z][0-9]+)\W*:\W*(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reFileWarningWithLineNum = new Regex(@"^(?.+?)(\((?[0-9]+),(?[0-9]+)(-(?[0-9]+))?\))?:\W*?(warning)\W*(?[A-Z][0-9]+)\W*:\W*(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reFileWarning = new Regex(@"^(?.+?):\W*?(warning)\W*:\W*(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reFileError = new Regex(@"^(?([a-zA-Z]:)?/.+?)\W*?: (?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reBuildEnd = new Regex(@"^(Build)\W+(?.*?)\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); Regex _reBuildTime = new Regex(@"^(Time elapsed)\W+(?.*?)\.\r?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); public OutputParser() { Reset(); } internal void Reset() { State = OutputState.Initialized; Filename = null; BuildBeginTime = null; BuildInfo = null; BuildElapsedTime = null; ErrorMessage = null; } internal void Parse(string text) { ParseLine(text); } private void ParseLine(string line) { /* * Line <-- BuildBegin * Line <-- BuildEnd * Line <-- BuildTime * Line <-- Cleaning * Line <-- Skipping * Line <-- BuildError (BuildErrorContinue)+ * Line <-- BuildAsset * BuildBegin <-- "Build" "started" buildBeginTime * Cleaning <-- "Cleaning" filenane * Skipping <-- "Skipping" filenane * BuildAsset <-- filename * BuildError <-- filename ':' "Error" ':' errorMessage * BuildErrorContinue <-- errorMessage * BuildEnd <-- "Build" buildInfo * BuildTime <-- "Time" "elapsed" buildElapsedTime */ var prevState = State; var prevFilename = Filename; State = OutputState.Unknown; Filename = null; BuildBeginTime = null; BuildInfo = null; BuildElapsedTime = null; ErrorMessage = null; if (line == "Build terminated!") { State = OutputState.BuildTerminated; } else if (_reBuildBegin.IsMatch(line)) { State = OutputState.BuildBegin; var m = _reBuildBegin.Match(line); BuildBeginTime = m.Groups["buildBeginTime"].Value; } else if (_reBuildEnd.IsMatch(line)) { State = OutputState.BuildEnd; var m = _reBuildEnd.Match(line); BuildInfo = m.Groups["buildInfo"].Value; } else if (_reBuildTime.IsMatch(line)) { State = OutputState.BuildTime; var m = _reBuildTime.Match(line); BuildElapsedTime = m.Groups["buildElapsedTime"].Value; } else if (_reCleaning.IsMatch(line)) { State = OutputState.Cleaning; var m = _reCleaning.Match(line); Filename = m.Groups["filename"].Value; } else if (_reSkipping.IsMatch(line)) { State = OutputState.Skipping; var m = _reSkipping.Match(line); Filename = m.Groups["filename"].Value; } else if (_reBuildError.IsMatch(line)) { State = OutputState.BuildError; var m = _reBuildError.Match(line); Filename = m.Groups["filename"].Value; ErrorMessage = m.Groups["errorMessage"].Value; } else if (_reFileErrorWithLineNum.IsMatch(line)) { State = OutputState.BuildError; var m = _reFileErrorWithLineNum.Match(line); var lineNum = m.Groups["line"]; var columnBegin = m.Groups["column"]; var columnEnd = m.Groups["columnEnd"]; var column = columnBegin.Value; if(columnEnd.Success) column += "-" + columnEnd.Value; var errorCode = m.Groups["errorCode"]; Filename = m.Groups["filename"].Value.Replace("\\\\","/").Replace("\\", "/"); ErrorMessage = string.Format("{0} ({1},{2}): {3}", errorCode, lineNum, column, m.Groups["errorMessage"].Value); } else if (_reFileWarningWithLineNum.IsMatch(line)) { State = OutputState.BuildWarning; var m = _reFileWarningWithLineNum.Match(line); var lineNum = m.Groups["line"]; var columnBegin = m.Groups["column"]; var columnEnd = m.Groups["columnEnd"]; var column = columnBegin.Value; if(columnEnd.Success) column += "-" + columnEnd.Value; var errorCode = m.Groups["warningCode"]; Filename = m.Groups["filename"].Value.Replace("\\\\", "/").Replace("\\", "/"); ErrorMessage = string.Format("{0} ({1},{2}): {3}", errorCode, lineNum, column, m.Groups["warningMessage"].Value); } else if (_reFileWarning.IsMatch(line)) { State = OutputState.BuildWarning; var m = _reFileWarning.Match(line); Filename = m.Groups["filename"].Value.Replace("\\\\", "/").Replace("\\", "/"); ErrorMessage = m.Groups["warningMessage"].Value; } else if (_reFileError.IsMatch(line)) { State = OutputState.BuildError; var m = _reFileError.Match(line); Filename = m.Groups["filename"].Value; ErrorMessage = m.Groups["errorMessage"].Value; } else if (_reBuildAsset.IsMatch(line)) { State = OutputState.BuildAsset; var m = _reBuildAsset.Match(line); Filename = m.Groups["filename"].Value; } else if (prevState == OutputState.BuildError || prevState == OutputState.BuildErrorContinue) { State = OutputState.BuildErrorContinue; Filename = prevFilename; ErrorMessage = line.TrimEnd(); } else { State = OutputState.Unknown; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/Package.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Content.Pipeline.Editor { public struct Package : IComparable { public string Name; public string Version; public static Package Parse(string packageReference) { packageReference.Trim(); Package package; package.Name = packageReference; package.Version = String.Empty; string[] split = packageReference.Split(' '); if (split.Length == 2) { package.Name = split[0].Trim(); package.Version = split[1].Trim(); } return package; } public override string ToString() { string result = this.Name; if (this.Version != String.Empty) result += " " + this.Version; return result; } int IComparable.CompareTo(Package other) { int compName = this.Name.CompareTo(other.Name); if (compName != 0) return compName; int compVersion = this.Version.CompareTo(other.Version); if (compVersion != 0) return compVersion; return 0; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PackageReferencesCollection.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; namespace Content.Pipeline.Editor { public sealed class PackageReferencesCollection { public const string Extension = ".kniContent"; public List Packages { get; set; } public PackageReferencesCollection() { Packages = new List(); } public void SaveBinary(string filePath) { using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) using (var writer = new PackageReferencesCollectionBinaryWriter(stream)) { writer.Write(this); } } public static PackageReferencesCollection LoadBinary(string filePath) { try { if (!File.Exists(filePath)) return null; using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) using (var reader = new PackageReferencesCollectionBinaryReader(stream)) { PackageReferencesCollection result = new PackageReferencesCollection(); reader.Read(result); return result; } } catch (Exception) { return null; } } public int PackagesCount { get { return this.Packages.Count; } } internal void AddPackage(Package package) { this.Packages.Add(package); } internal class PackageReferencesCollectionBinaryWriter : BinaryWriter { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 3; // PackageReferencesCollection data public PackageReferencesCollectionBinaryWriter(Stream output) : base(output) { } internal void Write(PackageReferencesCollection value) { Write((byte)Header[0]); Write((byte)Header[1]); Write((byte)Header[2]); Write((byte)Header[3]); Write((Int16)MajorVersion); Write((Int16)MinorVersion); Write((Int32)DataType); Write((Int32)0); // reserved WritePackedInt(value.Packages.Count); for (int i = 0; i < value.Packages.Count; i++) { Write(value.Packages[i].Name); Write(value.Packages[i].Version); } return; } protected void WritePackedInt(int value) { // write zigzag encoded int int zzint = ((value << 1) ^ (value >> 31)); Write7BitEncodedInt(zzint); } private void WriteStringOrNull(string value) { if (value != null) { Write(true); Write(value); } else Write(false); } } internal class PackageReferencesCollectionBinaryReader : BinaryReader { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 3; // PackageReferencesCollection data public PackageReferencesCollectionBinaryReader(Stream output) : base(output) { } internal void Read(PackageReferencesCollection value) { if (ReadByte() != Header[0] || ReadByte() != Header[1] || ReadByte() != Header[2] || ReadByte() != Header[3]) throw new Exception("Invalid file."); if (ReadInt16() != MajorVersion || ReadInt16() != MinorVersion) throw new Exception("Invalid file version."); int dataType = ReadInt32(); if (dataType != DataType) throw new Exception("Invalid data type."); int reserved0 = ReadInt32(); int packagesCount = ReadPackedInt(); value.Packages = new List(packagesCount); for (int i = 0; i < packagesCount; i++) { Package package; package.Name = ReadString(); package.Version = ReadString(); value.Packages.Add(package); } return; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } private string ReadStringOrNull() { if (ReadBoolean()) return ReadString(); else return null; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PathComparer.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; namespace Content.Pipeline.Editor { internal class PathComparer : IComparer { private readonly StringComparer _stringComparer = StringComparer.Ordinal; public int Compare(string x, string y) { var sx = x.Split('/', '\\'); var sy = y.Split('/', '\\'); int minLength = Math.Min(sx.Length, sy.Length); for (int i = 0; i < minLength-1; i++) { int cmp = _stringComparer.Compare(sx[i], sy[i]); if (cmp != 0) return cmp; } if (sx.Length > sy.Length) return -1; if (sy.Length > sx.Length) return 1; return _stringComparer.Compare(sx[minLength - 1], sy[minLength - 1]); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PathHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Content.Pipeline.Editor { public static class PathHelper { /// /// The/universal/standard/directory/seperator. /// public const char DirectorySeparator = '/'; /// /// Returns a path string normalized to the\Windows\standard. /// public static string NormalizeWindows(string path) { return path.Replace('/', '\\'); } /// /// Returns a path string normalized to the/universal/standard. /// public static string Normalize(string path) { return path.Replace('\\', '/'); } /// /// Returns a directory path string normalized to the/universal/standard /// with a trailing seperator. /// public static string NormalizeDirectory(string path) { return path.Replace('\\', '/').TrimEnd('/') + '/'; } /// /// Returns a path relative to the base path. /// /// The path to make relative to. Must end with directory seperator. /// The path to be made relative to the basePath. /// The relative path or the original string if it is not absolute or cannot be made relative. public static string GetRelativePath(string basePath, string path) { Uri uri; if (!Uri.TryCreate(path, UriKind.Absolute, out uri)) return path; uri = new Uri(basePath).MakeRelativeUri(uri); var str = Uri.UnescapeDataString(uri.ToString()); return Normalize(str); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.ExcludeAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.IO; using System.Linq; namespace Content.Pipeline.Editor { internal partial class PipelineController { private class ExcludeAction : IProjectAction { private readonly PipelineController _con; private readonly ContentItemState[] _state; private readonly string[] _folder; public ExcludeAction(PipelineController controller, IEnumerable items, IEnumerable folders) { _con = controller; _folder = (folders == null) ? new string[0] : folders.ToArray(); if(items == null) _state = new ContentItemState[0]; else { _state = new ContentItemState[items.Count()]; var i = 0; foreach (var item in items) { _state[i++] = ContentItemState.Get(item); } } } public bool Do() { _con.View.BeginTreeUpdate(); foreach (var obj in _state) { for (var i = 0; i < _con._project.ContentItems.Count; i++) { var item = _con._project.ContentItems[i]; if (item.OriginalPath == obj.SourceFile) { _con._project.ContentItems.Remove(item); _con.View.RemoveTreeItem(item); break; } } } foreach (string f in _folder) _con.View.RemoveTreeFolder(f); _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } public bool Undo() { _con.View.BeginTreeUpdate(); foreach(string f in _folder) _con.View.AddTreeFolder(f); foreach (var obj in _state) { var item = new ContentItem() { Observer = _con, Exists = File.Exists(System.IO.Path.GetDirectoryName(_con._project.OriginalPath) + Path.DirectorySeparatorChar + obj.SourceFile) }; obj.Apply(item); item.ResolveTypes(); _con._project.ContentItems.Add(item); _con.View.AddTreeItem(item); } _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.IncludeAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace Content.Pipeline.Editor { internal partial class PipelineController { private class IncludeAction : IProjectAction { private readonly PipelineController _con; private readonly string[] _folder; private readonly string[] _files; public IncludeAction(PipelineController controller, IEnumerable files) : this(controller, files, null) { } public IncludeAction(PipelineController controller, IEnumerable files, IEnumerable folders) { _con = controller; _files = files == null ? new string[0] : files.ToArray(); _folder = folders == null ? new string[0] : folders.ToArray(); for (int i = 0; i < _folder.Length; i++) { if (Path.IsPathRooted(_folder[i])) { string projectloc = controller._project.Location; if (_folder[i].Length >= projectloc.Length + 1) _folder[i] = _folder[i].Substring(projectloc.Length + 1); } if(_folder[i].EndsWith(Path.DirectorySeparatorChar.ToString())) _folder[i] = _folder[i].Remove(_folder[i].Length - 1); } } public bool Do() { var parser = new PipelineProjectParser(_con, _con._project); _con.View.BeginTreeUpdate(); _con.Selection.Clear(_con); foreach(string f in _folder) if(f != "") _con.View.AddTreeFolder(f); for (var i = 0; i < _files.Length; i++ ) { bool skipduplicate = false; switch (Environment.OSVersion.Platform) { case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: skipduplicate = true; break; } var f = _files[i]; if (!parser.AddContent(f, skipDuplicates: skipduplicate, inorder: true, out int index)) continue; var item = _con._project.ContentItems[index]; item.Observer = _con; item.ResolveTypes(); _files[i] = item.OriginalPath; _con.View.AddTreeItem(item); _con.Selection.Add(item, _con); } _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } public bool Undo() { _con.View.BeginTreeUpdate(); foreach (var f in _files) { for (var i = 0; i < _con._project.ContentItems.Count; i++) { var item = _con._project.ContentItems[i]; if (item.OriginalPath == f) { _con.View.RemoveTreeItem(item); _con._project.ContentItems.Remove(item); _con.Selection.Remove(item, _con); break; } } } foreach(string f in _folder) if(f != "") _con.View.RemoveTreeFolder(f); _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.MoveAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.IO; using System.Collections.Generic; namespace Content.Pipeline.Editor { internal partial class PipelineController { private class MoveAction : IProjectAction { private readonly PipelineController _con; private readonly string[] paths; private readonly string[] newpaths; private readonly FileType[] types; public MoveAction(PipelineController controller, string[] paths, string[] newpaths, FileType[] types) { _con = controller; this.paths = paths; this.newpaths = newpaths; this.types = types; } private bool Move(string path, string newpath, FileType type) { _con.View.BeginTreeUpdate(); if (type == FileType.File) { var item = _con.GetItem(path) as ContentItem; string fullpath = _con.GetFullPath(path); string fullnewpath = _con.GetFullPath(newpath); if (item == null) { _con.View.ShowError("Error", "An internal error has occured."); return false; } try { if (File.Exists(fullnewpath)) { _con.View.ShowError("Error", "File: \"" + fullnewpath + "\" already exists."); return false; } File.Move(fullpath, fullnewpath); } catch { _con.View.ShowError("Error", "An error has occurred while trying to move a file."); return false; } MoveFile(item, newpath); } else if (type == FileType.Folder) { string fullpath = _con.GetFullPath(path); string fullnewpath = _con.GetFullPath(newpath); try { if (Directory.Exists(fullnewpath)) { _con.View.ShowError("Error", "Directory: \"" + fullnewpath + "\" already exists."); return false; } Directory.Move(fullpath, fullnewpath); } catch { _con.View.ShowError("Error", "An error has occurred while trying to move the directory."); return false; } var cis = new List(); var nps = new List(); for (var i = 0; i < _con._project.ContentItems.Count; i++) { var item = _con._project.ContentItems[i]; if (item.OriginalPath.StartsWith(path)) { cis.Add(item); nps.Add(newpath + item.OriginalPath.Substring(path.Length)); } } for (int i = 0; i < nps.Count; i++) { MoveFile(cis[i], newpath + cis[i].OriginalPath.Substring(path.Length)); } _con.View.RemoveTreeFolder(path); } else if (type == FileType.Base) { _con.MoveProject(newpath); } _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } private void MoveFile(ContentItem item, string newpath) { _con._project.ContentItems.Remove(item); _con.View.RemoveTreeItem(item); item.OriginalPath = newpath; item.ResolveTypes(); _con._project.ContentItems.Add(item); _con.View.AddTreeItem(item); } public bool Do() { bool ret = true; for (int i = 0; i < paths.Length; i++) ret = ret && Move(paths[i], newpaths[i], types[i]); return ret; } public bool Undo() { bool ret = true; for (int i = 0; i < paths.Length; i++) ret = ret && Move(newpaths[i], paths[i], types[i]); return ret; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.NewAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.IO; using System.Linq; namespace Content.Pipeline.Editor { internal partial class PipelineController { private class NewAction : IProjectAction { private readonly PipelineController _con; private readonly string _name; private readonly string _location; private readonly ContentItemTemplate _template; public NewAction(PipelineController controller, string name, string location, ContentItemTemplate template) { _con = controller; _name = name; _location = location; _template = template; } public bool Do() { var ext = Path.GetExtension(_template.TemplateFile); var filename = Path.ChangeExtension(_name, ext); var fullpath = _con.GetFullPath(Path.Combine(_location, filename)); if (File.Exists(fullpath)) { _con.View.ShowError("Error", string.Format("File already exists: '{0}'.", fullpath)); return false; } File.Copy(_template.TemplateFile, fullpath); var parser = new PipelineProjectParser(_con, _con._project); _con.View.BeginTreeUpdate(); _con.Selection.Clear(_con); if (parser.AddContent(fullpath, skipDuplicates: true, inorder: true, out int index)) { var item = _con._project.ContentItems[index]; item.Observer = _con; item.ImporterName = _template.ImporterName; item.ProcessorName = _template.ProcessorName; item.ResolveTypes(); _con.View.AddTreeItem(item); _con.Selection.Add(item, _con); } _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } public bool Undo() { var ext = Path.GetExtension(_template.TemplateFile); var filename = Path.ChangeExtension(_name, ext); var fullpath = Path.Combine(_location, filename); if (!File.Exists(fullpath)) { _con.View.ShowError("Error", string.Format("File does not exist: '{0}'.", fullpath)); return false; } File.Delete(fullpath); _con.View.BeginTreeUpdate(); for (var i = 0; i < _con._project.ContentItems.Count; i++) { var item = _con._project.ContentItems[i]; var path = Path.GetFullPath(_con._project.Location + "\\" + item.OriginalPath); if (fullpath == path) { _con._project.ContentItems.Remove(item); _con.View.RemoveTreeItem(item); _con.Selection.Remove(item, _con); } } _con.View.EndTreeUpdate(); _con.ProjectDirty = true; return true; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.UpdateContentItemAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Linq; namespace Content.Pipeline.Editor { internal class UpdateContentItemAction : IProjectAction { private readonly IView _view; private readonly IController _con; private List _states; public UpdateContentItemAction(IView view, IController con, IEnumerable states) { _view = view; _con = con; _states = states.ToList(); } public bool Do() { Toggle(); return true; } public bool Undo() { Toggle(); return true; } private void Toggle() { for (int i = 0; i < _states.Count; i++) { var item = (ContentItem)_con.GetItem(_states[i].SourceFile); var state = ContentItemState.Get(item); _states[i].Apply(item); _states[i] = state; item.ResolveTypes(); _view.BeginTreeUpdate(); _view.UpdateProperties(item); _view.UpdateTreeItem(item); _view.EndTreeUpdate(); } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.UpdateProjectAction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.ComponentModel; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Content.Pipeline.Editor { internal class UpdateProjectAction : IProjectAction { private readonly IView _view; private readonly IController _con; private readonly bool _referencesChanged; private readonly bool _packageReferencesChanged; private ProjectState _state; public UpdateProjectAction(IView view, IController con, PipelineProject item, PropertyDescriptor property, object previousValue) { _view = view; _con = con; _state = new ProjectState(item); switch (property.Name) { case "OutputDir": _state.OutputDir = (string)previousValue; break; case "IntermediateDir": _state.IntermediateDir = (string)previousValue; break; case "References": _state.References = new List((List)previousValue); _referencesChanged = true; break; case "PackageReferences": _state.PackageReferences = new List((List)previousValue); _packageReferencesChanged = true; break; case "Platform": _state.Platform = (TargetPlatform)previousValue; break; case "Profile": _state.Profile = (GraphicsProfile)previousValue; break; case "Config": _state.Config = (string)previousValue; break; case "OriginalPath": _state.OriginalPath = (string)previousValue; break; } } public bool Do() { Toggle(); return true; } public bool Undo() { Toggle(); return true; } private void Toggle() { PipelineProject item = (PipelineProject)_con.GetItem(_state.OriginalPath); ProjectState state = new ProjectState(item); _state.Apply(item); _state = state; if (_referencesChanged || _packageReferencesChanged) _con.OnReferencesModified(); else _con.OnProjectModified(); _view.BeginTreeUpdate(); _view.UpdateProperties(item); _view.UpdateTreeItem(item); _view.EndTreeUpdate(); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineController.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Content.Pipeline.Editor { internal partial class PipelineController : IController { private PipelineProject _project; private Task _buildTask; private Process _buildProcess; private readonly List _templateItems; private static readonly string [] _mgcbSearchPaths = new [] { "", // root #if DEBUG "../../../../../MGCB/bin/Windows/AnyCPU/Debug", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../../../MonoGame.Content.Builder/bin/Windows/AnyCPU/Debug"), #else "../../../../../MGCB/bin/Windows/AnyCPU/Release", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../../../MonoGame.Content.Builder/bin/Windows/AnyCPU/Release"), #endif "../MGCB", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../MGCB"), Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), }; public IEnumerable Templates { get { return _templateItems; } } public Selection Selection { get; private set; } public bool SingleThread { get; set; } public string ProjectLocation { get { return _project.Location; } } public string ProjectOutputDir { get { return _project.OutputDir; } } public bool ProjectOpen { get; private set; } public bool ProjectDirty { get; set; } public bool ProjectBuilding { get { return _buildTask != null && !_buildTask.IsCompleted; } } public IView View { get; private set; } public event Action OnProjectLoading; public event Action OnProjectLoaded; public event Action OnBuildStarted; public event Action OnBuildFinished; public PipelineController(IView view) { _actionStack = new ActionStack(); Selection = new Selection(); View = view; View.Attach(this); ProjectOpen = false; _templateItems = new List(); LoadTemplates(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Templates")); } public void OnProjectModified() { Debug.Assert(ProjectOpen, "OnProjectModified called with no project open?"); ProjectDirty = true; View.UpdateProperties(_project); } public void OnReferencesModified() { Debug.Assert(ProjectOpen, "OnReferencesModified called with no project open?"); ProjectDirty = true; ResolveTypes(); View.UpdateProperties(_project); } public void OnItemModified(ContentItem contentItem) { Debug.Assert(ProjectOpen, "OnItemModified called with no project open?"); ProjectDirty = true; View.UpdateProperties(contentItem); View.BeginTreeUpdate(); View.UpdateTreeItem(contentItem); View.EndTreeUpdate(); } public void NewProject() { // Make sure we give the user a chance to // save the project if they need too. if (!AskSaveProject()) return; // A project needs a root directory or it is impossible to resolve relative paths. // So we need the user to choose that location even though the project has not // yet actually been saved to disk. var projectFilePath = Environment.CurrentDirectory; if (!View.AskSaveName(ref projectFilePath, "New Project")) return; CloseProject(); if (OnProjectLoading != null) OnProjectLoading(); // Clear existing project data, initialize to a new blank project. _actionStack.Clear(); _project = new PipelineProject(); PipelineTypes.Load(_project); // Save the new project. _project.OriginalPath = projectFilePath; ProjectOpen = true; ProjectDirty = true; UpdateTree(); if (OnProjectLoaded != null) OnProjectLoaded(); } public void ImportProject() { // Make sure we give the user a chance to // save the project if they need too. if (!AskSaveProject()) return; string projectFilePath; if (!View.AskImportProject(out projectFilePath)) return; CloseProject(); if (OnProjectLoading != null) OnProjectLoading(); try { _actionStack.Clear(); _project = new PipelineProject(); var parser = new PipelineProjectParser(this, _project); parser.ImportProject(projectFilePath); ResolveTypes(); ProjectOpen = true; ProjectDirty = true; } catch (Exception e) { View.ShowError("Open Project", "Failed to open project!"); return; } UpdateTree(); if (OnProjectLoaded != null) OnProjectLoaded(); } public void OpenProject() { // Make sure we give the user a chance to // save the project if they need too. if (!AskSaveProject()) return; string projectFilePath; if (!View.AskOpenProject(out projectFilePath)) return; OpenProject(projectFilePath); } public void OpenProject(string projectFilePath) { CloseProject(); if (OnProjectLoading != null) OnProjectLoading(); #if !DEBUG try #endif { _actionStack.Clear(); _project = new PipelineProject(); var parser = new PipelineProjectParser(this, _project); var errorCallback = new MGBuildParser.ErrorCallback((msg, args) => View.OutputAppend(string.Format(Path.GetFileName(projectFilePath) + ": " + msg, args))); parser.OpenProject(projectFilePath, errorCallback); ResolveTypes(); ProjectOpen = true; ProjectDirty = false; PipelineSettingsMgr.Current.AddProjectHistory(projectFilePath); PipelineSettingsMgr.Settings.StartupProject = projectFilePath; PipelineSettingsMgr.Current.Save(); } #if !DEBUG catch (Exception e) { View.ShowError("Open Project", "Failed to open project!"); return; } #endif UpdateTree(); if (OnProjectLoaded != null) OnProjectLoaded(); } public void CloseProject() { if (!ProjectOpen) return; // Make sure we give the user a chance to // save the project if they need too. if (!AskSaveProject()) return; ProjectOpen = false; ProjectDirty = false; _project = null; _actionStack.Clear(); View.OutputClear(); PipelineSettingsMgr.Settings.StartupProject = null; PipelineSettingsMgr.Current.Save(); Selection.Clear(this); UpdateTree(); } public bool MoveProject(string newname) { string opath = _project.OriginalPath; string ext = Path.GetExtension(opath); try { File.Delete(_project.OriginalPath); } catch { View.ShowError("Error", "Could not delete old project file."); return false; } _project.OriginalPath = Path.GetDirectoryName(opath) + Path.DirectorySeparatorChar + newname + ext; if (!SaveProject(false)) { _project.OriginalPath = opath; SaveProject(false); View.ShowError("Error", "Could not save the new project file."); return false; } View.SetTreeRoot(_project); return true; } public bool SaveProject(bool saveAs) { // Do we need file name? if (saveAs || string.IsNullOrEmpty(_project.OriginalPath)) { string newFilePath = _project.OriginalPath; if (!View.AskSaveName(ref newFilePath, null)) return false; _project.OriginalPath = newFilePath; View.SetTreeRoot(_project); } // Do the save. ProjectDirty = false; var parser = new PipelineProjectParser(this, _project); parser.SaveProject(); // Note: This is where a project loaded via 'new project' or 'import project' // get recorded into PipelineSettings because up until this point they did not // exist as files on disk. PipelineSettingsMgr.Current.AddProjectHistory(_project.OriginalPath); PipelineSettingsMgr.Settings.StartupProject = _project.OriginalPath; PipelineSettingsMgr.Current.Save(); return true; } public void Build(bool rebuild) { var commands = string.Format("/@:\"{0}\" {1}", _project.OriginalPath, rebuild ? "/rebuild" : string.Empty); if (SingleThread) commands += " /singleThread"; BuildCommand(_project.ContentItems, commands); } public void RebuildItems(IEnumerable items) { // Make sure we save first! if (!AskSaveProject()) return; // Create a unique file within the same folder as // the normal project to store this incremental build. var uniqueName = Guid.NewGuid().ToString(); var tempPath = Path.Combine(Path.GetDirectoryName(_project.OriginalPath), uniqueName); // Write the incremental project file limiting the // content to just the files we want to rebuild. using (var io = File.CreateText(tempPath)) { var parser = new PipelineProjectParser(this, _project); parser.SaveProject(io, (i) => !items.Contains(i)); } // Run the build the command. var commands = string.Format("/@:\"{0}\" /rebuild /incremental", tempPath); if (SingleThread) commands += " /singleThread"; BuildCommand(items, commands); // Cleanup the temp file once we're done. _buildTask.ContinueWith((e) => File.Delete(tempPath)); } private void BuildCommand(IEnumerable items, string commands) { Debug.Assert(_buildTask == null || _buildTask.IsCompleted, "The previous build wasn't completed!"); // Make sure we save first! if (!AskSaveProject()) return; if (OnBuildStarted != null) OnBuildStarted(); View.OutputClear(); View.OutputPopulateAssets(_project, items); _buildTask = Task.Factory.StartNew(() => DoBuild(commands)); if (OnBuildFinished != null) _buildTask.ContinueWith((e) => OnBuildFinished()); } public void Clean() { Debug.Assert(_buildTask == null || _buildTask.IsCompleted, "The previous build wasn't completed!"); // Make sure we save first! if (!AskSaveProject()) return; if (OnBuildStarted != null) OnBuildStarted(); View.OutputClear(); View.OutputPopulateAssets(_project, _project.ContentItems); string commands = string.Format("/@:\"{0}\" ", _project.OriginalPath); commands += " /clean"; //commands += string.Format(" /intermediateDir:\"{0}\" /outputDir:\"{1}\"", _project.IntermediateDir, _project.OutputDir); if (SingleThread) commands += " /singleThread"; _buildTask = Task.Factory.StartNew(() => DoBuild(commands)); if (OnBuildFinished != null) _buildTask.ContinueWith((e) => OnBuildFinished()); } private string FindMGCB() { foreach (var root in _mgcbSearchPaths) { var mgcbPath = Path.Combine(root, "MGCB.exe"); if (File.Exists(mgcbPath)) return Path.GetFullPath(mgcbPath); } throw new FileNotFoundException("MGCB.exe is not in the search path!"); } private void DoBuild(string commands) { Encoding encoding; try { encoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage); } catch (NotSupportedException) { encoding = Encoding.UTF8; } catch (ArgumentException) { encoding = Encoding.UTF8; } try { // Prepare the process. _buildProcess = View.CreateProcess(FindMGCB(), commands); _buildProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(_project.OriginalPath); _buildProcess.StartInfo.CreateNoWindow = true; _buildProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; _buildProcess.StartInfo.UseShellExecute = false; _buildProcess.StartInfo.RedirectStandardOutput = true; _buildProcess.StartInfo.StandardOutputEncoding = encoding; _buildProcess.OutputDataReceived += (sender, args) => View.OutputAppend(args.Data); // Fire off the process. _buildProcess.Start(); _buildProcess.BeginOutputReadLine(); _buildProcess.WaitForExit(); } catch (Exception ex) { // If we got a message assume it has everything the user needs to know. if (!string.IsNullOrEmpty(ex.Message)) View.OutputAppend("Build failed: " + ex.Message); else { // Else we need to get verbose. View.OutputAppend("Build failed:" + Environment.NewLine); View.OutputAppend(ex.ToString()); } } // Clear the process pointer, so that cancel // can run after we've already finished. lock (_buildTask) _buildProcess = null; } public void CancelBuild() { if (_buildTask == null || _buildTask.IsCompleted) return; lock (_buildTask) { if (_buildProcess == null) return; _buildProcess.Kill(); View.OutputAppend("Build terminated!" + Environment.NewLine); } } /// /// Prompt the user if they wish to save the project. /// Save it if yes is chosen. /// Return true if yes or no is chosen. /// Return false if cancel is chosen. /// private bool AskSaveProject() { // If the project is not dirty // then we can simply skip it. if (!ProjectDirty) return true; // Ask the user if they want to save or cancel. var result = View.AskSaveOrCancel(); // Did we cancel the exit? if (result == AskResult.Cancel) return false; // Did we want to skip saving? if (result == AskResult.No) return true; return SaveProject(false); } private void UpdateTree() { View.BeginTreeUpdate(); if (_project == null || string.IsNullOrEmpty(_project.OriginalPath)) View.SetTreeRoot(null); else { View.SetTreeRoot(_project); foreach (var item in _project.ContentItems) View.AddTreeItem(item); } View.EndTreeUpdate(); } public bool Exit() { // Can't exit if we're building! if (ProjectBuilding) { View.ShowMessage("You cannot exit while the project is building!"); return false; } // Make sure we give the user a chance to // save the project if they need too. return AskSaveProject(); } public void Include(string initialDirectory) { // Root the path to the project. if (!Path.IsPathRooted(initialDirectory)) initialDirectory = Path.Combine(_project.Location, initialDirectory); if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString())) initialDirectory += Path.DirectorySeparatorChar.ToString(); List files; if (!View.ChooseContentFile(initialDirectory, out files)) return; Include(initialDirectory, files.ToArray()); } private void Include(string initialDirectory, string[] f) { List files = new List(); files.AddRange(f); List sc = new List(), dc = new List(); for (int i = 0; i < files.Count; i++) { if (!files[i].StartsWith(initialDirectory)) { string newfile = Path.Combine(initialDirectory, Path.GetFileName(files[i])); if (File.Exists(newfile)) continue; sc.Add(files[i]); dc.Add(newfile); files[i] = newfile; } } if (files.Count == 0) return; try { for (int i = 0; i < sc.Count; i++) File.Copy(sc[i], dc[i]); var action = new IncludeAction(this, files); if(action.Do()) _actionStack.Add(action); } catch { View.ShowError("Error While Copying Files", "An error occurred while the files were being copied, aborting."); } } public void IncludeFolder(string initialDirectory) { // Root the path to the project. if (!Path.IsPathRooted(initialDirectory)) initialDirectory = Path.Combine(_project.Location, initialDirectory); if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString())) initialDirectory += Path.DirectorySeparatorChar.ToString(); string folder; if (!View.ChooseContentFolder(initialDirectory, out folder)) return; IncludeFolder(initialDirectory, new []{ folder }); } public void IncludeFolder(string initialDirectory, string[] dirs) { List ffiles = new List(); List ddirectories = new List(); List sc = new List(), dc = new List(); foreach (string fol in dirs) { List files = new List(); List directories = new List(); string folder = fol; if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) folder += Path.DirectorySeparatorChar; files.AddRange(GetFiles(folder)); directories.Add(folder); directories.AddRange(GetDirectories(folder)); if (!folder.StartsWith(initialDirectory)) { string nd = folder.Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar); for (int i = 0; i < directories.Count; i++) ddirectories.Add(directories[i].Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar)); for (int i = 0; i < files.Count; i++) ffiles.Add(files[i].Replace(folder, initialDirectory + (new DirectoryInfo(folder)).Name + Path.DirectorySeparatorChar)); sc.Add(folder); dc.Add(nd); } else { ddirectories.AddRange(directories); ffiles.AddRange(files); } } try { for (int i = 0; i < sc.Count; i++) DirectoryCopy(sc[i], dc[i]); var action2 = new IncludeAction(this, ffiles, ddirectories); if (action2.Do()) _actionStack.Add(action2); } catch { View.ShowError("Error While Copying Files", "An error occurred while the directories were being copied, aborting."); } } private static void DirectoryCopy(string sourceDirName, string destDirName) { DirectoryInfo dir = new DirectoryInfo(sourceDirName); DirectoryInfo[] dirs = dir.GetDirectories(); if (!Directory.Exists(destDirName)) Directory.CreateDirectory(destDirName); FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string temppath = Path.Combine(destDirName, file.Name); file.CopyTo(temppath, false); } foreach (DirectoryInfo subdir in dirs) { string temppath = Path.Combine(destDirName, subdir.Name); DirectoryCopy(subdir.FullName, temppath); } } public void Move (string[] paths, string[] newnames, FileType[] types) { var action = new MoveAction(this, paths, newnames, types); if(action.Do()) _actionStack.Add(action); } public void Include(IEnumerable inputfiles, IEnumerable inputfolders) { var action = new PipelineController.IncludeAction(this, inputfiles, inputfolders); action.Do(); _actionStack.Add(action); //// Root the path to the project. //if (!Path.IsPathRooted(initialDirectory)) // initialDirectory = Path.Combine(_project.Location, initialDirectory); //if (!initialDirectory.EndsWith(Path.DirectorySeparatorChar.ToString())) // initialDirectory += Path.DirectorySeparatorChar.ToString(); //IncludeFolder(initialDirectory, folders); //Include(initialDirectory, files); } private List GetFiles(string folder) { List ret = new List(); string[] directories = Directory.GetDirectories(folder); foreach (string d in directories) ret.AddRange(GetFiles(d)); ret.AddRange(Directory.GetFiles(folder)); return ret; } private List GetDirectories(string folder) { List ret = new List(); string[] directories = Directory.GetDirectories(folder); foreach (string d in directories) { ret.Add(d); ret.AddRange(GetDirectories(d)); } return ret; } public void Exclude(IEnumerable items, IEnumerable folders) { var action = new ExcludeAction(this, items, folders); if(action.Do()) _actionStack.Add(action); } public void NewItem(string name, string location, ContentItemTemplate template) { var action = new NewAction(this, name, location, template); if(action.Do()) _actionStack.Add(action); } public void NewFolder(string name, string location) { string folder = Path.Combine(location, name); if (!Path.IsPathRooted(folder)) folder = _project.Location + Path.DirectorySeparatorChar + folder; try { if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); } catch { View.ShowError ("Error While Creating a Directory", "An error has occured while the directory: \"" + folder + "\" was beeing created, aborting..."); return; } var action = new IncludeAction(this, null, new List { folder }); if(action.Do()) _actionStack.Add(action); } public void AddAction(IProjectAction action) { _actionStack.Add(action); } public IProjectItem GetItem(string originalPath) { if (_project.OriginalPath.Equals(originalPath, StringComparison.OrdinalIgnoreCase)) return _project; foreach (var i in _project.ContentItems) { if (string.Equals(i.OriginalPath, originalPath, StringComparison.OrdinalIgnoreCase)) { return i; } } return null; } #region Undo, Redo private readonly ActionStack _actionStack; public event CanUndoRedoChanged OnCanUndoRedoChanged { add { _actionStack.OnCanUndoRedoChanged += value; } remove { _actionStack.OnCanUndoRedoChanged -= value; } } public bool CanUndo { get { return _actionStack.CanUndo; } } public bool CanRedo { get { return _actionStack.CanRedo; } } public void Undo() { _actionStack.Undo(); } public void Redo() { _actionStack.Redo(); } #endregion private void ResolveTypes() { PipelineTypes.Load(_project); foreach (var i in _project.ContentItems) { i.Observer = this; i.ResolveTypes(); View.UpdateProperties(i); } LoadTemplates(Path.Combine(_project.Location, "MGTemplates")); } private void LoadTemplates(string path) { if (!Directory.Exists(path)) return; var files = Directory.GetFiles(path, "*.template", SearchOption.AllDirectories); foreach (var f in files) { var lines = File.ReadAllLines(f); if (lines.Length != 5) throw new Exception("Invalid template"); var item = new ContentItemTemplate() { Label = lines[0], Icon = lines[1], ImporterName = lines[2], ProcessorName = lines[3], TemplateFile = lines[4], }; if (_templateItems.Any(i => i.Label == item.Label)) continue; var fpath = Path.GetDirectoryName(f); item.TemplateFile = Path.GetFullPath(Path.Combine(fpath, item.TemplateFile)); View.OnTemplateDefined(item); _templateItems.Add(item); } } public string GetFullPath(string filePath) { if (_project == null || Path.IsPathRooted(filePath)) { if (filePath.Length == 2 && filePath[0] != '/') filePath += "\\"; return filePath; } filePath = filePath.Replace("/", Path.DirectorySeparatorChar.ToString()); if (filePath.StartsWith("\\")) filePath = filePath.Substring(1); return _project.Location + Path.DirectorySeparatorChar + filePath; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineProject.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Content.Pipeline.Editor { public class PipelineProject : IProjectItem { public string OriginalPath { get; set; } public List ContentItems { get; private set; } public string OutputDir { get; set; } public string IntermediateDir { get; set; } public List References { get; set; } public List PackageReferences { get; set; } public TargetPlatform Platform { get; set; } public GraphicsProfile Profile { get; set; } public string Config { get; set; } public bool Compress { get; set; } public CompressionMethod Compression { get; set; } #region IPipelineItem public string Name { get { if (string.IsNullOrEmpty(OriginalPath)) return ""; return System.IO.Path.GetFileNameWithoutExtension(OriginalPath); } } public string Location { get { if (string.IsNullOrEmpty(OriginalPath)) return ""; return Path.GetDirectoryName(OriginalPath); } } [Browsable(false)] public string Icon { get; set; } [Browsable(false)] public bool Exists { get; set; } #endregion public PipelineProject() { ContentItems = new List(); References = new List(); PackageReferences = new List(); OutputDir = "bin"; IntermediateDir = "obj"; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineProjectParser.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Xml; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Content.Pipeline.Editor { public class PipelineProjectParser { #region Other Data private readonly PipelineProject _project; private readonly IContentItemObserver _observer; private readonly OpaqueDataDictionary _processorParams = new OpaqueDataDictionary(); private string _processor; #endregion #region CommandLineParameters [CommandLineParameter( Name = "outputDir", ValueName = "directoryPath", Description = "The directory where all content is written.")] public string OutputDir { set { _project.OutputDir = value; } } [CommandLineParameter( Name = "intermediateDir", ValueName = "directoryPath", Description = "The directory where all intermediate files are written.")] public string IntermediateDir { set { _project.IntermediateDir = value; } } [CommandLineParameter( Name = "reference", ValueName = "assemblyNameOrFile", Description = "Adds an assembly reference for resolving content importers, processors, and writers.")] public List References { set { _project.References = value; } get { return _project.References; } } [CommandLineParameter( Name = "packageReference", ValueName = "package", Description = "Adds a nuget package reference for resolving content importers, processors, and writers.")] public void SetPackageReference(string packageReference) { Package package = Package.Parse(packageReference); _project.PackageReferences.Add(package); } [CommandLineParameter( Name = "platform", ValueName = "targetPlatform", Description = "Set the target platform for this build. Defaults to Windows.")] public TargetPlatform Platform { set { _project.Platform = value; } } [CommandLineParameter( Name = "profile", ValueName = "graphicsProfile", Description = "Set the target graphics profile for this build. Defaults to HiDef.")] public GraphicsProfile Profile { set { _project.Profile = value; } } [CommandLineParameter( Name = "config", ValueName = "string", Description = "The optional build config string from the build system.")] public string Config { set { _project.Config = value; } } #pragma warning disable 414 // Allow a MGCB file containing the /rebuild parameter to be imported without error [CommandLineParameter( Name = "rebuild", ValueName = "bool", Description = "Forces a rebuild of the project.")] public bool Rebuild { set { _rebuild = value; } } private bool _rebuild; // Allow a MGCB file containing the /clean parameter to be imported without error [CommandLineParameter( Name = "clean", ValueName = "bool", Description = "Removes intermediate and output files.")] public bool Clean { set { _clean = value; } } private bool _clean; #pragma warning restore 414 [CommandLineParameter( Name = "compress", ValueName = "bool", Description = "Content files can be compressed for smaller file sizes.")] public bool Compress { set { _project.Compress = value; } } [CommandLineParameter( Name = "compression", ValueName = "string", Description = "The compression method.")] public CompressionMethod Compression { set { _project.Compression = value; } } [CommandLineParameter( Name = "importer", ValueName = "className", Description = "Defines the class name of the content importer for reading source content.")] public string Importer; [CommandLineParameter( Name = "processor", ValueName = "className", Description = "Defines the class name of the content processor for processing imported content.")] public string Processor { get { return _processor; } set { _processor = value; _processorParams.Clear(); } } [CommandLineParameter( Name = "processorParam", ValueName = "name=value", Description = "Defines a parameter name and value to set on a content processor.")] public void AddProcessorParam(string nameAndValue) { var keyAndValue = nameAndValue.Split('='); if (keyAndValue.Length != 2) { // Do we error out or something? return; } _processorParams.Remove(keyAndValue[0]); _processorParams.Add(keyAndValue[0], keyAndValue[1]); } [CommandLineParameter( Name = "build", ValueName = "sourceFile", Description = "Build the content source file using the previously set switches and options.")] public void OnBuild(string sourceFile) { AddContent(sourceFile, skipDuplicates: false, inorder: false, out int index); } public bool AddContent(string sourceFile, bool skipDuplicates, bool inorder, out int index) { string link = null; if (sourceFile.Contains(";")) { var split = sourceFile.Split(';'); sourceFile = split[0]; if (split.Length > 0) link = split[1]; } // Make sure the source file is relative to the project. var projectDir = ProjectDirectory + Path.DirectorySeparatorChar; sourceFile = PathHelper.GetRelativePath(projectDir, sourceFile); if (sourceFile.Contains("..")) throw new InvalidOperationException("Content file is not rooted in content path \""+ projectDir+"\""); // Do we have a duplicate? var previous = _project.ContentItems.FindIndex(e => string.Equals(e.OriginalPath, sourceFile, StringComparison.InvariantCultureIgnoreCase)); if (previous != -1) { if (skipDuplicates) { index = previous; return false; } // Replace the duplicate. _project.ContentItems.RemoveAt(previous); } // Create the item for processing later. var item = new ContentItem { Observer = _observer, BuildAction = BuildAction.Build, OriginalPath = sourceFile, OutputFile = link, ImporterName = Importer, ProcessorName = Processor, ProcessorParams = new OpaqueDataDictionary(), Exists = File.Exists(projectDir + sourceFile) }; index = _project.ContentItems.Count; if (inorder) { index = _project.ContentItems.BinarySearch(item, new ContentItemPathComparer()); if (index < 0) index = ~index; } _project.ContentItems.Insert(index, item); // Copy the current processor parameters blind as we // will validate and remove invalid parameters during // the build process later. foreach (var pair in _processorParams) item.ProcessorParams.Add(pair.Key, pair.Value); return true; } [CommandLineParameter( Name = "copy", ValueName = "sourceFile", Description = "Copy the content source file verbatim to the output directory.")] public void OnCopy(string sourceFile) { string link = null; if (sourceFile.Contains(";")) { var split = sourceFile.Split(';'); sourceFile = split[0]; if (split.Length > 0) link = split[1]; } // Make sure the source file is relative to the project. var projectDir = ProjectDirectory + Path.DirectorySeparatorChar; sourceFile = PathHelper.GetRelativePath(projectDir, sourceFile); if (sourceFile.Contains("..")) throw new InvalidOperationException("Content file is not rooted in content path \"" + projectDir + "\""); // Remove duplicates... keep this new one. var previous = _project.ContentItems.FirstOrDefault(e => e.OriginalPath.Equals(sourceFile)); if (previous != null) _project.ContentItems.Remove(previous); // Create the item for processing later. var item = new ContentItem { BuildAction = BuildAction.Copy, OriginalPath = sourceFile, OutputFile = link, ProcessorParams = new OpaqueDataDictionary(), Exists = File.Exists(projectDir + sourceFile) }; _project.ContentItems.Add(item); // Copy the current processor parameters blind as we // will validate and remove invalid parameters during // the build process later. foreach (var pair in _processorParams) item.ProcessorParams.Add(pair.Key, pair.Value); } #endregion public PipelineProjectParser(IContentItemObserver observer, PipelineProject project) { _observer = observer; _project = project; } public void OpenProject(string projectFilePath, MGBuildParser.ErrorCallback errorCallback) { _project.ContentItems.Clear(); // Store the file name for saving later. _project.OriginalPath = projectFilePath; var parser = new MGBuildParser(this); parser.Title = "Pipeline"; if (errorCallback != null) parser.OnError += errorCallback; var commands = new string[] { string.Format("/@:{0}", projectFilePath), }; parser.Parse(commands); } public void SaveProject() { using (var io = File.CreateText(_project.OriginalPath)) SaveProject(io, null); } public void SaveProject(TextWriter io, Func filterItem) { const string lineFormat = "/{0}:{1}"; const string processorParamFormat = "{0}={1}"; string line; line = FormatDivider("Global Properties"); io.WriteLine(line); line = string.Format(lineFormat, "outputDir", _project.OutputDir); io.WriteLine(line); line = string.Format(lineFormat, "intermediateDir", _project.IntermediateDir); io.WriteLine(line); line = string.Format(lineFormat, "platform", _project.Platform); io.WriteLine(line); line = string.Format(lineFormat, "config", _project.Config); io.WriteLine(line); line = string.Format(lineFormat, "profile", _project.Profile); io.WriteLine(line); line = string.Format(lineFormat, "compress", _project.Compress); io.WriteLine(line); if (_project.Compression != CompressionMethod.Default) { line = string.Format(lineFormat, "compression", _project.Compression); io.WriteLine(line); } line = FormatDivider("References"); io.WriteLine(line); foreach (string i in _project.References) { line = string.Format(lineFormat, "reference", i); io.WriteLine(line); } foreach (Package i in _project.PackageReferences) { line = string.Format(lineFormat, "packageReference", i.ToString()); io.WriteLine(line); } line = FormatDivider("Content"); io.WriteLine(line); foreach (var i in _project.ContentItems) { // Reject any items that don't pass the filter. if (filterItem != null && filterItem(i)) continue; // Wrap content item lines with a begin comment line // to make them more cohesive (for version control). line = string.Format("#begin {0}", i.OriginalPath); io.WriteLine(line); if (i.BuildAction == BuildAction.Copy) { string buildValue = i.OriginalPath; if (i.OutputFile != null) buildValue += ";" + i.OutputFile; line = string.Format(lineFormat, "copy", buildValue); io.WriteLine(line); io.WriteLine(); } else { // Write importer. { line = string.Format(lineFormat, "importer", i.ImporterName); io.WriteLine(line); } // Write processor. { line = string.Format(lineFormat, "processor", i.ProcessorName); io.WriteLine(line); } // Write processor parameters. { if (i.Processor == PipelineTypes.MissingProcessor) { // Could still be missing the real processor. // If so, write the string parameters from import. foreach (var j in i.ProcessorParams) { line = string.Format(lineFormat, "processorParam", string.Format(processorParamFormat, j.Key, j.Value)); io.WriteLine(line); } } else { // Otherwise, write only values which are defined by the real processor. foreach (var j in i.Processor.Properties) { object value = null; if (i.ProcessorParams.ContainsKey(j.Name)) value = i.ProcessorParams[j.Name]; // JCF: I 'think' writting an empty string for null would be appropriate but to be on the safe side // im just not writting the value at all. if (value != null) { var converter = PipelineTypes.FindConverter(value.GetType()); var valueStr = converter.ConvertTo(null, CultureInfo.InvariantCulture, value, typeof(string)); line = string.Format(lineFormat, "processorParam", string.Format(processorParamFormat, j.Name, valueStr)); io.WriteLine(line); } } } } string buildValue = i.OriginalPath; if (i.OutputFile != null) buildValue += ";" + i.OutputFile; line = string.Format(lineFormat, "build", buildValue); io.WriteLine(line); io.WriteLine(); } } } public void ImportProject(string projectFilePath) { _project.OriginalPath = projectFilePath.Remove(projectFilePath.LastIndexOf('.')) + ".mgcb"; using (XmlReader io = XmlReader.Create(File.OpenText(projectFilePath))) { while (io.Read()) { if (io.NodeType == XmlNodeType.Element) { var buildAction = io.LocalName; if (buildAction.Equals("Reference")) { string include, hintPath; ReadIncludeReference(io, out include, out hintPath); if (!string.IsNullOrEmpty(hintPath) && hintPath.IndexOf("microsoft", StringComparison.CurrentCultureIgnoreCase) == -1 && hintPath.IndexOf("monogamecontentprocessors", StringComparison.CurrentCultureIgnoreCase) == -1) { _project.References.Add(hintPath); } } else if (buildAction.Equals("Content") || buildAction.Equals("None")) { string include, copyToOutputDirectory; ReadIncludeContent(io, out include, out copyToOutputDirectory); if (!string.IsNullOrEmpty(copyToOutputDirectory) && !copyToOutputDirectory.Equals("Never")) { var sourceFilePath = Path.GetDirectoryName(projectFilePath); sourceFilePath += "\\" + include; OnCopy(sourceFilePath); } } else if (buildAction.Equals("Compile")) { string include, name, importer, processor; string[] processorParams; ReadIncludeCompile(io, out include, out name, out importer, out processor, out processorParams); Importer = importer; Processor = processor; if (processorParams != null) { foreach (var i in processorParams) AddProcessorParam(i); } var sourceFilePath = Path.GetDirectoryName(projectFilePath); sourceFilePath += "\\" + include; OnBuild(sourceFilePath); } } } } } private string ProjectDirectory { get { return _project.Location; } } private void ReadIncludeReference(XmlReader io, out string include, out string hintPath) { include = io.GetAttribute("Include").Unescape(); hintPath = null; if (!io.IsEmptyElement) { var depth = io.Depth; for (io.Read(); io.Depth != depth; io.Read()) { // process sub nodes if (io.IsStartElement("HintPath")) { io.Read(); hintPath = io.Value.Unescape(); } } } } private void ReadIncludeContent(XmlReader io, out string include, out string copyToOutputDirectory) { copyToOutputDirectory = null; include = io.GetAttribute("Include").Unescape(); if (!io.IsEmptyElement) { var depth = io.Depth; for (io.Read(); io.Depth != depth; io.Read()) { // process sub nodes here. if (io.IsStartElement()) { switch (io.LocalName) { case "CopyToOutputDirectory": io.Read(); copyToOutputDirectory = io.Value.Unescape(); break; } } } } } private void ReadIncludeCompile(XmlReader io, out string include, out string name, out string importer, out string processor, out string[] processorParams) { name = null; importer = null; processor = null; include = io.GetAttribute("Include").Unescape(); var parameters = new List(); if (!io.IsEmptyElement) { var depth = io.Depth; for (io.Read(); io.Depth != depth; io.Read()) { // process sub nodes here. if (io.IsStartElement()) { switch (io.LocalName) { case "Name": io.Read(); name = io.Value.Unescape(); break; case "Importer": io.Read(); importer = io.Value.Unescape(); break; case "Processor": io.Read(); processor = io.Value.Unescape(); break; default: if (io.LocalName.Contains("ProcessorParameters_")) { var line = io.LocalName.Replace("ProcessorParameters_", ""); line += "="; io.Read(); line += io.Value; parameters.Add(line.Unescape()); } break; } } } } processorParams = parameters.ToArray(); } private string FormatDivider(string label) { var commentFormat = Environment.NewLine + "#----------------------------------------------------------------------------#" + Environment.NewLine; label = " " + label + " "; var src = commentFormat.Length / 2 - label.Length / 2; var dst = src + label.Length; return commentFormat.Substring(0, src) + label + commentFormat.Substring(dst); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineSettings.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.IO.IsolatedStorage; using System.Xml.Serialization; namespace Content.Pipeline.Editor { public class PipelineSettings { public List ProjectHistory = new List(); public string StartupProject; public Microsoft.Xna.Framework.Point Size; public int HSeparator, VSeparator; public bool Maximized, FilterOutput; } public class PipelineSettingsMgr { private const string SettingsPath = "Settings.xml"; private IsolatedStorageFile _isoStore; public bool IsInit; public static PipelineSettingsMgr Current { get; private set; } public static PipelineSettings Settings { get; private set; } static PipelineSettingsMgr() { Current = new PipelineSettingsMgr(); Settings = new PipelineSettings(); } public PipelineSettingsMgr() { _isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null); } /// /// If the project already exists in history, it will be moved to the end. /// public void AddProjectHistory(string file) { string cleanFile = file.Trim(); Settings.ProjectHistory.Remove(cleanFile); Settings.ProjectHistory.Add(cleanFile); } public void RemoveProjectHistory(string file) { string cleanFile = file.Trim(); Settings.ProjectHistory.Remove(cleanFile); } public void Clear() { Settings.ProjectHistory.Clear(); Settings.StartupProject = null; Save(); } public void Save() { FileMode mode = FileMode.CreateNew; if (_isoStore.FileExists (SettingsPath)) mode = FileMode.Truncate; using (Stream isoStream = new IsolatedStorageFileStream(SettingsPath, mode, _isoStore)) using (TextWriter writer = new StreamWriter(isoStream)) { XmlSerializer serializer = new XmlSerializer(typeof(PipelineSettings)); serializer.Serialize(writer, Settings); } } public void Load() { if (_isoStore.FileExists(SettingsPath)) { using (Stream isoStream = new IsolatedStorageFileStream(SettingsPath, FileMode.Open, _isoStore)) using (TextReader reader = new StreamReader(isoStream)) { XmlSerializer serializer = new XmlSerializer(typeof(PipelineSettings)); Settings = (PipelineSettings)serializer.Deserialize(reader); } } return; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/PipelineTypes.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content.Pipeline; namespace Content.Pipeline.Editor { public class ImporterTypeDescription { public string TypeName; public string DisplayName; public string DefaultProcessor; public IEnumerable FileExtensions; public Type OutputType; public override string ToString() { return TypeName; } public override int GetHashCode() { return TypeName == null ? 0 : TypeName.GetHashCode(); } public override bool Equals(object obj) { var other = obj as ImporterTypeDescription; if (other == null) return false; if (string.IsNullOrEmpty(other.TypeName) != string.IsNullOrEmpty(TypeName)) return false; return TypeName.Equals(other.TypeName); } }; public class ProcessorTypeDescription { #region Supporting Types public struct Property { public string Name; public Type Type; public object DefaultValue; public override string ToString() { return Name; } } public class ProcessorPropertyCollection : IEnumerable { private readonly Property[] _properties; public ProcessorPropertyCollection(IEnumerable properties) { _properties = properties.ToArray(); } public Property this[int index] { get { return _properties[index]; } set { _properties[index] = value; } } public Property this[string name] { get { foreach (var p in _properties) { if (p.Name.Equals(name)) return p; } throw new IndexOutOfRangeException(); } set { for (var i = 0; i < _properties.Length; i++) { var p = _properties[i]; if (p.Name.Equals(name)) { _properties[i] = value; return; } } throw new IndexOutOfRangeException(); } } public bool Contains(string name) { return _properties.Any(e => e.Name == name); } public IEnumerator GetEnumerator() { return _properties.AsEnumerable().GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return _properties.GetEnumerator(); } } #endregion public string TypeName; public string DisplayName; public ProcessorPropertyCollection Properties; public Type InputType; public override string ToString() { return TypeName; } }; internal class PipelineTypes { [DebuggerDisplay("ImporterInfo: {Type.Name}")] private struct ImporterInfo { public ContentImporterAttribute Attribute; public Type Type; } [DebuggerDisplay("ProcessorInfo: {Type.Name}")] private struct ProcessorInfo { public ContentProcessorAttribute Attribute; public Type Type; } private static List _importers; private static List _processors; public static ImporterTypeDescription[] Importers { get; private set; } public static ProcessorTypeDescription[] Processors { get; private set; } public static ImporterTypeDescription NullImporter { get; private set; } public static ProcessorTypeDescription NullProcessor { get; private set; } public static ImporterTypeDescription MissingImporter { get; private set; } public static ProcessorTypeDescription MissingProcessor { get; private set; } public static TypeConverter.StandardValuesCollection ImportersStandardValuesCollection { get; private set; } public static TypeConverter.StandardValuesCollection ProcessorsStandardValuesCollection { get; private set; } private static readonly Dictionary _oldNameRemap = new Dictionary() { { "MGMaterialProcessor", "MaterialProcessor" }, { "MGSongProcessor", "SongProcessor" }, { "MGSoundEffectProcessor", "SoundEffectProcessor" }, { "MGSpriteFontDescriptionProcessor", "FontDescriptionProcessor" }, { "MGSpriteFontTextureProcessor", "FontTextureProcessor" }, { "MGTextureProcessor", "TextureProcessor" }, { "MGEffectProcessor", "EffectProcessor" }, }; private static string RemapOldNames(string name) { if (_oldNameRemap.ContainsKey(name)) return _oldNameRemap[name]; return name; } static PipelineTypes() { MissingImporter = new ImporterTypeDescription() { DisplayName = "Invalid / Missing Importer", }; MissingProcessor = new ProcessorTypeDescription() { DisplayName = "Invalid / Missing Processor", Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(new ProcessorTypeDescription.Property[0]), }; NullImporter = new ImporterTypeDescription() { DisplayName = "", }; NullProcessor = new ProcessorTypeDescription() { DisplayName = "", Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(new ProcessorTypeDescription.Property[0]), }; } public static void Load(PipelineProject project) { Unload(); List assemblyPaths = new List(); string projectRoot = project.Location; foreach (string i in project.References) { string path = Path.Combine(projectRoot, i); if (string.IsNullOrEmpty(path)) throw new ArgumentException("assemblyFilePath cannot be null!"); if (!Path.IsPathRooted(path)) throw new ArgumentException("assemblyFilePath must be absolute!"); // Make sure we're not adding the same assembly twice. path = PathHelper.Normalize(path); if (!assemblyPaths.Contains(path)) assemblyPaths.Add(path); } try { AddPackageReferences(project, projectRoot, project.PackageReferences, assemblyPaths); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show( string.Format("Failed to resolve package references.\n\n {0}.", ex.Message), "KNI Pipeline - " + Path.GetFileName(project.OriginalPath), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } ResolveAssemblies(assemblyPaths); var importerDescriptions = new ImporterTypeDescription[_importers.Count]; int cur = 0; foreach (var item in _importers) { // Find the abstract base class ContentImporter. Type baseType = item.Type.BaseType; while (!baseType.IsAbstract) baseType = baseType.BaseType; Type outputType = baseType.GetGenericArguments()[0]; var desc = new ImporterTypeDescription() { TypeName = item.Type.Name, DisplayName = item.Attribute.DisplayName, DefaultProcessor = item.Attribute.DefaultProcessor, FileExtensions = item.Attribute.FileExtensions, OutputType = outputType, }; importerDescriptions[cur] = desc; cur++; } Importers = importerDescriptions; ImportersStandardValuesCollection = new TypeConverter.StandardValuesCollection(Importers); var processorDescriptions = new ProcessorTypeDescription[_processors.Count]; const BindingFlags bindings = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; cur = 0; foreach (var item in _processors) { var obj = Activator.CreateInstance(item.Type); var typeProperties = item.Type.GetProperties(bindings); var properties = new List(); foreach (var i in typeProperties) { // TODO: //p.GetCustomAttribute(typeof(ContentPipelineIgnore)) var p = new ProcessorTypeDescription.Property() { Name = i.Name, Type = i.PropertyType, DefaultValue = i.GetValue(obj, null), }; properties.Add(p); } Type inputType = (obj as IContentProcessor).InputType; var desc = new ProcessorTypeDescription() { TypeName = item.Type.Name, DisplayName = item.Attribute.DisplayName, Properties = new ProcessorTypeDescription.ProcessorPropertyCollection(properties), InputType = inputType, }; if (string.IsNullOrEmpty(desc.DisplayName)) desc.DisplayName = desc.TypeName; processorDescriptions[cur] = desc; cur++; } Processors = processorDescriptions; ProcessorsStandardValuesCollection = new TypeConverter.StandardValuesCollection(Processors); } private static void AddPackageReferences(PipelineProject manager, string projectDirectory, List packageReferences, List assemblyPaths) { if (packageReferences.Count == 0) return; string intermediateFolder = "obj/"; intermediateFolder = Path.Combine(projectDirectory, intermediateFolder); intermediateFolder = PathHelper.Normalize(intermediateFolder); if (!Directory.Exists(intermediateFolder)) Directory.CreateDirectory(intermediateFolder); const string packageReferencesProjFolder = ".Packages"; const string libraryName = "PackagesLibrary"; string fullPackageReferencesFolder = Path.Combine(intermediateFolder, packageReferencesProjFolder); if (!Directory.Exists(fullPackageReferencesFolder)) Directory.CreateDirectory(fullPackageReferencesFolder); string projFolder = manager.Name; string fullPackageReferencesProjFolder = Path.Combine(fullPackageReferencesFolder, projFolder); fullPackageReferencesProjFolder = PathHelper.Normalize(fullPackageReferencesProjFolder); string publishDir = "publish"; bool rebuild = false; // load db List packages = new List(packageReferences); packages.Sort(); string intermediatePackageCollectionPath = Path.Combine(fullPackageReferencesProjFolder, Path.ChangeExtension(libraryName, PackageReferencesCollection.Extension)); PackageReferencesCollection previousPackageReferencesCollection = PackageReferencesCollection.LoadBinary(intermediatePackageCollectionPath); if (previousPackageReferencesCollection != null && previousPackageReferencesCollection.PackagesCount == packages.Count) { for (int i = 0; i < packages.Count; i++) { if (packages[i].Name != previousPackageReferencesCollection.Packages[i].Name || packages[i].Version != previousPackageReferencesCollection.Packages[i].Version) { rebuild = true; break; } } } else rebuild = true; // build PackageReferencesLibrary if (rebuild) { using (var modalWindow = new System.Windows.Forms.Form()) { modalWindow.Text = "KNI Pipeline"; modalWindow.Width = 300; modalWindow.Height = 80; modalWindow.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; modalWindow.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; modalWindow.ControlBox = false; modalWindow.TopMost = true; var label = new System.Windows.Forms.Label(); label.Text = "Resolving Package References..."; label.Dock = System.Windows.Forms.DockStyle.Fill; label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; modalWindow.Controls.Add(label); modalWindow.Show(); string framework = "netstandard2.0"; #if NET8_0_OR_GREATER framework = "net8.0"; #endif string newCmd = String.Format("new classlib --framework \"{0}\" -n {1} -o \"{2}\"", framework, libraryName, projFolder); newCmd += " --force"; ExecuteDotnet(fullPackageReferencesFolder, newCmd); foreach (Package packageReference in packageReferences) { string addCmd = String.Format("add {0}.csproj package {1} ", libraryName, packageReference.Name); addCmd += " --no-restore"; if (packageReference.Version != String.Empty) addCmd += " --version " + packageReference.Version; ExecuteDotnet(fullPackageReferencesProjFolder, addCmd); } string cleanCmd = String.Format("clean {0}.csproj --output {1}", libraryName, publishDir); cleanCmd += " --nologo"; ExecuteDotnet(fullPackageReferencesProjFolder, cleanCmd); string publishCmd = String.Format("publish {0}.csproj --output {1}", libraryName, publishDir); publishCmd += " --nologo"; ExecuteDotnet(fullPackageReferencesProjFolder, publishCmd); // save db PackageReferencesCollection dbfile = new PackageReferencesCollection(); foreach (Package package in packages) dbfile.AddPackage(package); dbfile.SaveBinary(intermediatePackageCollectionPath); } } // load packages string fullPublishDir = Path.Combine(fullPackageReferencesProjFolder, publishDir); fullPublishDir = PathHelper.Normalize(fullPublishDir); string[] references = Directory.GetFiles(fullPublishDir, "*.dll"); foreach (string assemblyFile in references) { string assemblyFileName = Path.GetFileNameWithoutExtension(assemblyFile); // skip the empty project and known pipeline libraries. if (assemblyFileName == libraryName) continue; if (assemblyFileName.StartsWith("Xna.Framework")) continue; assemblyPaths.Add(assemblyFile); } return; } private static void ExecuteDotnet(string workingDirectory, string args) { ProcessStartInfo startInfo = new ProcessStartInfo("dotnet", args); startInfo.CreateNoWindow = true; startInfo.WorkingDirectory = workingDirectory; startInfo.UseShellExecute = false; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; using (Process process = Process.Start(startInfo)) { process.WaitForExit(); if (process.ExitCode != 0) { string output = process.StandardOutput.ReadToEnd(); Console.Write(output); string error = process.StandardError.ReadToEnd(); Console.Write(error); throw new PipelineException(output + error); } } } public static void Unload() { _importers = null; Importers = null; _processors = null; Processors = null; ImportersStandardValuesCollection = null; ProcessorsStandardValuesCollection = null; } public static TypeConverter FindConverter(Type type) { return TypeDescriptor.GetConverter(type); } public static ImporterTypeDescription FindImporter(string name, string fileExtension) { if (!string.IsNullOrEmpty(name)) { name = RemapOldNames(name); foreach (var i in Importers) { if (i.TypeName.Equals(name)) return i; } foreach (var i in Importers) { if (i.DisplayName.Equals(name)) return i; } //Debug.Fail(string.Format("Importer not found! name={0}, ext={1}", name, fileExtension)); return null; } var lowerFileExt = fileExtension.ToLowerInvariant(); foreach (var i in Importers) { if (i.FileExtensions.Any(e => e.ToLowerInvariant() == lowerFileExt)) return i; } //Debug.Fail(string.Format("Importer not found! name={0}, ext={1}", name, fileExtension)); return null; } public static ProcessorTypeDescription FindProcessor(string name, ImporterTypeDescription importer) { if (!string.IsNullOrEmpty(name)) { name = RemapOldNames(name); foreach (var i in Processors) { if (i.TypeName.Equals(name)) return i; } //Debug.Fail(string.Format("Processor not found! name={0}, importer={1}", name, importer)); return null; } if (importer != null) { foreach (var i in Processors) { if (i.TypeName.Equals(importer.DefaultProcessor)) return i; } } //Debug.Fail(string.Format("Processor not found! name={0}, importer={1}", name, importer)); return null; } private static void ResolveAssemblies(IEnumerable assemblyPaths) { _importers = new List(); _processors = new List(); var assemblies = new List(); assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor).Assembly); // Common assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.SoundEffectProcessor).Assembly); // Audio assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.VideoProcessor).Assembly); // Media assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.TextureProcessor).Assembly); // Graphics assemblies.Add(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.EffectProcessor).Assembly); // Graphics Effects foreach (var asm in assemblies) { //try { var exportedTypes = asm.GetTypes(); ProcessTypes(exportedTypes); } //catch (Exception e) { } } foreach (var path in assemblyPaths) { try { var a = Assembly.LoadFrom(path); var types = a.GetTypes(); ProcessTypes(types); } catch { //Logger.LogWarning(null, null, "Failed to load assembly '{0}': {1}", assemblyPath, e.Message); // The assembly failed to load... nothing // we can do but ignore it. continue; } } } private static void ProcessTypes(IEnumerable types) { foreach (var t in types) { if (t.IsAbstract) continue; if (t.GetInterface(@"IContentImporter") == typeof(IContentImporter)) { var attributes = t.GetCustomAttributes(typeof(ContentImporterAttribute), false); if (attributes.Length != 0) { var importerAttribute = attributes[0] as ContentImporterAttribute; _importers.Add(new ImporterInfo { Attribute = importerAttribute, Type = t }); } else { // If no attribute specify default one var importerAttribute = new ContentImporterAttribute(".*"); importerAttribute.DefaultProcessor = ""; importerAttribute.DisplayName = t.Name; _importers.Add(new ImporterInfo { Attribute = importerAttribute, Type = t }); } } else if (t.GetInterface(@"IContentProcessor") == typeof(IContentProcessor)) { var attributes = t.GetCustomAttributes(typeof(ContentProcessorAttribute), false); if (attributes.Length != 0) { var processorAttribute = attributes[0] as ContentProcessorAttribute; _processors.Add(new ProcessorInfo { Attribute = processorAttribute, Type = t }); } } } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/ProjectState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Content.Pipeline.Editor { /// /// Snapshot of a PipelineProject's state, used for undo/redo. /// internal class ProjectState { public string OutputDir; public string IntermediateDir; public List References; public List PackageReferences; public TargetPlatform Platform; public GraphicsProfile Profile; public string Config; public string OriginalPath; /// /// Create a ProjectState storing member values of the passed PipelineProject. /// public ProjectState(PipelineProject proj) { this.OriginalPath = proj.OriginalPath; this.OutputDir = proj.OutputDir; this.IntermediateDir = proj.IntermediateDir; this.References = new List(proj.References); this.PackageReferences = new List(proj.PackageReferences); this.Platform = proj.Platform; this.Profile = proj.Profile; this.Config = proj.Config; } /// /// Set a PipelineProject's member values from this state object. /// public void Apply(PipelineProject proj) { proj.OutputDir = OutputDir; proj.IntermediateDir = IntermediateDir; proj.References = new List(this.References); proj.PackageReferences = new List(this.PackageReferences); proj.Platform = Platform; proj.Profile = Profile; proj.Config = Config; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/Selection.cs ================================================ using System.Collections; using System.Collections.Generic; namespace Content.Pipeline.Editor { internal delegate void SelectionModified(Selection selection, object source); internal class Selection : IEnumerable { private readonly List _list; public event SelectionModified Modified; public int Count { get { return _list.Count; } } public Selection() { _list = new List(); } public void Add(IProjectItem item, object source) { _list.Add(item); if (Modified != null) Modified(this, source); } public void Remove(IProjectItem item, object source) { _list.Remove(item); if (Modified != null) Modified(this, source); } public void Clear(object source) { _list.Clear(); if (Modified != null) Modified(this, source); } public IEnumerator GetEnumerator() { return _list.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/StringExtensions.cs ================================================  using System; using System.Security; namespace Content.Pipeline.Editor { public static class StringExtensions { public static string Unescape(this string text) { if (string.IsNullOrEmpty(text)) return text; var result = Uri.UnescapeDataString(text); // JCF: XmlReader already does this. /* result = result.Replace("'", "'"); result = result.Replace(""", "\""); result = result.Replace(">", ">"); result = result.Replace("&", "&"); */ return result; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Common/Util.cs ================================================ using System; using System.IO; namespace Content.Pipeline.Editor { internal static class Util { /// /// Returns the path 'filspec' made relative path 'folder'. /// /// If 'folder' is not an absolute path, throws ArgumentException. /// If 'filespec' is not an absolute path, returns 'filespec' unmodified. /// public static string GetRelativePath(string filespec, string folder) { if (!Path.IsPathRooted(filespec)) return filespec; if (!Path.IsPathRooted(folder)) throw new ArgumentException("Must be an absolute path.", "folder"); var pathUri = new Uri(filespec); if (folder[folder.Length-1] != Path.DirectorySeparatorChar) folder += Path.DirectorySeparatorChar; var folderUri = new Uri(folder); var result = folderUri.MakeRelativeUri(pathUri).ToString(); result = result.Replace('/', Path.DirectorySeparatorChar); result = Uri.UnescapeDataString(result); return result; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Content.Pipeline.Editor.net4.csproj ================================================  Debug AnyCPU 10.0.0 2.0 {CF15F9CF-0DF8-4B18-B0A0-F5AA33EA3598} App.ico WinExe Content.Pipeline.Editor PipelineEditor true CS1591;CS1574;CS0419 v4.8 Default true false full true bin\AnyCPU\Debug\net4 obj\Windows\AnyCPU\Debug DEBUG;TRACE; prompt 4 false true none bin\AnyCPU\Release\net4 obj\Windows\AnyCPU\Release TRACE; prompt 4 false Form MainView.cs Form NewContentDialog.cs Component Component Component Form AboutDialog.cs Form PackageDialog.cs Form PackageReferenceDialog.cs Form ReferenceDialog.cs Form TextEditDialog.cs True Resources.resx True True Settings.settings True {e37f98d7-c4e8-4556-b322-aef99638ece1} Xna.Framework.Design {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game False {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices False {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage False {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR False {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor {63486463-8aee-483e-862a-7720cd62b4df} Xna.Framework.Content.Pipeline.Media {4243474d-572e-6e69-646f-77734d474342} MGCB SettingsSingleFileGenerator Settings.Designer.cs PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest TextEditDialog.cs MainView.cs ResXFileCodeGenerator Resources.Designer.cs Designer AboutDialog.cs PackageDialog.cs PackageReferenceDialog.cs ReferenceDialog.cs NewContentDialog.cs Toolbar.New.png Toolbar.Open.png Toolbar.Save.png Toolbar.NewItem.png Toolbar.ExistingItem.png Toolbar.NewFolder.png Toolbar.ExistingFolder.png Toolbar.Build.png Toolbar.Rebuild.png Toolbar.Clean.png Toolbar.FilterOutput.png <_PostBuildHookTimestamp>@(IntermediateAssembly->'%(FullPath).timestamp') ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Content.Pipeline.Editor.net8.csproj ================================================  4.2.9001.0 4.2.9001.0 false False net8.0-windows true win-x64 {5212C44E-1573-43C2-85E8-5751A12FBBFD} App.ico WinExe Content.Pipeline.Editor PipelineEditor true CS1591;CS1574;CS0419 False bin\$(Platform)\$(Configuration)\ obj\Windows\$(Platform)\$(Configuration)\ $(DefineConstants); Default true Form MainView.cs Form NewContentDialog.cs Component Component Component Form AboutDialog.cs Form PackageDialog.cs Form PackageReferenceDialog.cs Form ReferenceDialog.cs Form TextEditDialog.cs True Resources.resx True True Settings.settings True {e37f98d7-c4e8-4556-b322-aef99638ece1} Xna.Framework.Design {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor {63486463-8aee-483e-862a-7720cd62b4df} Xna.Framework.Content.Pipeline.Media {4243474d-572e-6e69-646f-77734d474342} MGCB SettingsSingleFileGenerator Settings.Designer.cs PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest PreserveNewest TextEditDialog.cs MainView.cs ResXFileCodeGenerator Resources.Designer.cs Designer AboutDialog.cs PackageDialog.cs PackageReferenceDialog.cs ReferenceDialog.cs NewContentDialog.cs Toolbar.New.png Toolbar.Open.png Toolbar.Save.png Toolbar.NewItem.png Toolbar.ExistingItem.png Toolbar.NewFolder.png Toolbar.ExistingFolder.png Toolbar.Build.png Toolbar.Rebuild.png Toolbar.Clean.png Toolbar.FilterOutput.png <_PostBuildHookTimestamp>@(IntermediateAssembly->'%(FullPath).timestamp') ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.Designer.cs ================================================ namespace Content.Pipeline.Editor { partial class AboutDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutDialog)); this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.logoPictureBox = new System.Windows.Forms.PictureBox(); this.labelProductName = new System.Windows.Forms.Label(); this.labelVersion = new System.Windows.Forms.Label(); this.labelCopyright = new System.Windows.Forms.Label(); this.labelCompanyName = new System.Windows.Forms.Label(); this.textBoxDescription = new System.Windows.Forms.TextBox(); this.okButton = new System.Windows.Forms.Button(); this.tableLayoutPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel // this.tableLayoutPanel.ColumnCount = 2; this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 21.0396F)); this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 78.9604F)); this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); this.tableLayoutPanel.Name = "tableLayoutPanel"; this.tableLayoutPanel.RowCount = 6; this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); this.tableLayoutPanel.Size = new System.Drawing.Size(404, 256); this.tableLayoutPanel.TabIndex = 0; // // logoPictureBox // this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); this.logoPictureBox.Location = new System.Drawing.Point(3, 3); this.logoPictureBox.Name = "logoPictureBox"; this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); this.logoPictureBox.Size = new System.Drawing.Size(78, 250); this.logoPictureBox.TabIndex = 12; this.logoPictureBox.TabStop = false; // // labelProductName // this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; this.labelProductName.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this.labelProductName.Location = new System.Drawing.Point(90, 0); this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); this.labelProductName.Name = "labelProductName"; this.labelProductName.Size = new System.Drawing.Size(311, 17); this.labelProductName.TabIndex = 19; this.labelProductName.Text = "Product Name"; this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // labelVersion // this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; this.labelVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this.labelVersion.Location = new System.Drawing.Point(90, 25); this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); this.labelVersion.Name = "labelVersion"; this.labelVersion.Size = new System.Drawing.Size(311, 17); this.labelVersion.TabIndex = 0; this.labelVersion.Text = "Version"; this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // labelCopyright // this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; this.labelCopyright.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this.labelCopyright.Location = new System.Drawing.Point(90, 50); this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); this.labelCopyright.Name = "labelCopyright"; this.labelCopyright.Size = new System.Drawing.Size(311, 17); this.labelCopyright.TabIndex = 21; this.labelCopyright.Text = "Copyright"; this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // labelCompanyName // this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; this.labelCompanyName.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this.labelCompanyName.Location = new System.Drawing.Point(90, 75); this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); this.labelCompanyName.Name = "labelCompanyName"; this.labelCompanyName.Size = new System.Drawing.Size(311, 17); this.labelCompanyName.TabIndex = 22; this.labelCompanyName.Text = "Company Name"; this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // textBoxDescription // this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; this.textBoxDescription.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this.textBoxDescription.Location = new System.Drawing.Point(90, 103); this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); this.textBoxDescription.Multiline = true; this.textBoxDescription.Name = "textBoxDescription"; this.textBoxDescription.ReadOnly = true; this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.textBoxDescription.Size = new System.Drawing.Size(311, 122); this.textBoxDescription.TabIndex = 23; this.textBoxDescription.TabStop = false; this.textBoxDescription.Text = "Description"; // // okButton // this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.okButton.Location = new System.Drawing.Point(326, 231); this.okButton.Name = "okButton"; this.okButton.Size = new System.Drawing.Size(75, 22); this.okButton.TabIndex = 24; this.okButton.Text = "&OK"; this.okButton.Click += new System.EventHandler(this.okButton_Click); // // AboutDialog // this.AcceptButton = this.okButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(422, 274); this.Controls.Add(this.tableLayoutPanel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AboutDialog"; this.Padding = new System.Windows.Forms.Padding(9); this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "AboutDialog"; this.tableLayoutPanel.ResumeLayout(false); this.tableLayoutPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; private System.Windows.Forms.PictureBox logoPictureBox; private System.Windows.Forms.Label labelProductName; private System.Windows.Forms.Label labelVersion; private System.Windows.Forms.Label labelCopyright; private System.Windows.Forms.Label labelCompanyName; private System.Windows.Forms.TextBox textBoxDescription; private System.Windows.Forms.Button okButton; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace Content.Pipeline.Editor { partial class AboutDialog : Form { public AboutDialog() { InitializeComponent(); this.Text = String.Format("About {0}", AssemblyAttributes.AssemblyTitle); this.labelProductName.Text = AssemblyAttributes.AssemblyProduct; this.labelVersion.Text = String.Format("Version {0}", AssemblyAttributes.AssemblyVersion); this.labelCopyright.Text = AssemblyAttributes.AssemblyCopyright; this.labelCompanyName.Text = AssemblyAttributes.AssemblyCompany; this.textBoxDescription.Text = AssemblyAttributes.AssemblyDescription; } private void okButton_Click(object sender, EventArgs e) { this.Close(); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/AboutDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABGdBTUEAALGPC/xhBQAAADBQTFRF/8wQ /////9lM//LD/9Y9//zw/88g/99q/+WH//nh/+yl//XS/+mW/9xb/++0/+J5blhboAAAABl0RVh0U29m dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE8SURBVFhH7ZRJcsQgDEURk7Hdw/1vG+kLCF2VBFU7 2aT4C1sI6QFicHRRvwFwF7QAfwfI9T/XAAiyqQHmdkb8y4Yf5CmFIO0YRBrwDSASJQQUOvpcvHSXZpBX 75eAvLMBArvqXGqepM0BMGjnscVKd+22AwoC2gxYN3SbAdqvNVAAnVIIKyCnoV+KIUrcRJ44JwAdtG4f bKhYAaq2/bUpetzlK04L4FAPAIeuSSVO0xIqQUwfWyV4a8U5AdQiYhF8IhHZ54ZzOgE4rFUJCJXIG1xG QItmQge4TedlA7gTESkPAKeFMAIihnuZAd+wB9s41HOA29iQGuBWtEj31NtsAbijPQdDJGfuPwOiZ+nt z+0RYOfwuuVPWNcAeE8L8ALA7tilSQuArA54TwuwAKIFWADRAvwfwDVdBBB9ALA4CCBvqHlSAAAAAElF TkSuQmCC ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/BuildIcons.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Drawing; using System.IO; using System.Reflection; using System.Windows.Forms; namespace Content.Pipeline.Editor { public class BuildIcons: IDisposable { public ImageList Icons { get; private set; } public const int BeginEnd = 0; public const int Queued = 1; public const int Clean = 2; public const int Fail = 3; public const int Processing = 4; public const int Skip = 5; public const int Succeed = 6; public const int Null = 7; // set to >= Icons.Images.Count for no icon public BuildIcons() { Icons = new ImageList(); Icons.ColorDepth = ColorDepth.Depth32Bit; var asm = Assembly.GetExecutingAssembly(); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_begin_end.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_queued.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_clean.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_fail.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_processing.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_skip.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.build_succeed.png"))); } ~BuildIcons() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { Icons.Dispose(); } Icons = null; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/ContentIcons.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Drawing; using System.IO; using System.Reflection; using System.Windows.Forms; namespace Content.Pipeline.Editor { public class ContentIcons: IDisposable { public ImageList Icons { get; private set; } public const int ContentItemIcon = 0; public const int ContentMissingIcon = 1; public const int FolderOpenIcon = 2; public const int FolderClosedIcon = 3; public const int ProjectIcon = 4; public const int MaxDefinedIconIndex = 5; public ContentIcons() { Icons = new ImageList(); Icons.ColorDepth = ColorDepth.Depth32Bit; var asm = Assembly.GetExecutingAssembly(); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.blueprint.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.missing.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.folder_open.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.folder_closed.png"))); Icons.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.settings.png"))); } ~ContentIcons() { Dispose(false); } internal int GetIcon(bool exists, string fullPath) { if (!exists) return ContentMissingIcon; string ext = Path.GetExtension(fullPath).ToLowerInvariant(); int idx = Icons.Images.IndexOfKey(ext); //cache the icon if (idx == -1) { Icon icon =null; try { icon = Icon.ExtractAssociatedIcon(fullPath); Icons.Images.Add(ext, icon); idx = Icons.Images.IndexOfKey(ext); } catch (ArgumentException aex) { //The filePath does not indicate a valid file. //-or- //The filePath indicates a Universal Naming Convention (UNC) path } catch(FileNotFoundException fnfex) { } } if (idx != -1) return idx; //return default icon return ContentItemIcon; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { Icons.Dispose(); } Icons = null; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/Controls/FilterOutputControl.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; namespace Content.Pipeline.Editor.Windows.Controls { public partial class FilterOutputControl : TreeView { const int WM_VSCROLL = 0x0115; const int SB_BOTTOM = 0x07; [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); private BuildIcons _buildIcons; private TreeNode _lastTreeNode; private PipelineProject _project; private List _contentItems; Dictionary _assetMap = new Dictionary(); Dictionary _xnbMap = new Dictionary(); private OutputParser _outputParser; private string _prevFilename; Uri _folderUri; Uri _outputUri; public FilterOutputControl() : base() { this._buildIcons = new BuildIcons(); this.ImageList = _buildIcons.Icons; _outputParser = new OutputParser(); } internal void SetBaseFolder(IController controller) { string pl = ((PipelineController)controller).ProjectLocation; if (!pl.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString())) pl += System.IO.Path.DirectorySeparatorChar; _folderUri = new Uri(pl); string pod = ((PipelineController)controller).ProjectOutputDir; if (!pod.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString())) pod += System.IO.Path.DirectorySeparatorChar; pod = Path.Combine(pl, pod); _outputUri = new Uri(pod); _outputParser.Reset(); } protected override void OnBeforeSelect(TreeViewCancelEventArgs e) { // disable selection for all nodes e.Cancel = true; } internal void WriteLine(string line) { if (string.IsNullOrWhiteSpace(line)) return; this.SuspendLayout(); this.BeginUpdate(); try { _outputParser.Parse(line); line = line.TrimEnd(new[] { ' ', '\n', '\r', '\t' }); switch (_outputParser.State) { case OutputState.BuildBegin: { var tn = AddItem(BuildIcons.BeginEnd, line); PopulateAssets(); break; } case OutputState.Cleaning: { var tn = AddItem(_outputParser.Filename, BuildIcons.Clean, "Cleaned " + GetRelativeOutputPath(_outputParser.Filename)); tn.ToolTipText = line; AddSubItem(tn, line); break; } case OutputState.Skipping: { var tn = AddItem(_outputParser.Filename, BuildIcons.Skip, "Skipped " + GetRelativePath(_outputParser.Filename)); tn.ToolTipText = line; AddSubItem(tn, line); break; } case OutputState.BuildAsset: { var tn = AddItem(_outputParser.Filename, BuildIcons.Processing, "Building " + GetRelativePath(_outputParser.Filename)); tn.ToolTipText = line; AddSubItem(tn, line); break; } case OutputState.BuildError: { _lastTreeNode.ImageIndex = BuildIcons.Fail; _lastTreeNode.SelectedImageIndex = BuildIcons.Fail; _lastTreeNode.ToolTipText += Environment.NewLine + Environment.NewLine + _outputParser.ErrorMessage; AddSubItem(_lastTreeNode, _outputParser.ErrorMessage).ForeColor = System.Drawing.Color.DarkRed; break; } case OutputState.BuildErrorContinue: { _lastTreeNode.ToolTipText += Environment.NewLine + _outputParser.ErrorMessage; AddSubItem(_lastTreeNode, _outputParser.ErrorMessage).ForeColor = System.Drawing.Color.DarkRed; break; } case OutputState.BuildEnd: { var tn = AddItem(BuildIcons.BeginEnd, line); break; } case OutputState.BuildTime: { _lastTreeNode.Text = _lastTreeNode.Text.TrimEnd(new[] { '.', ' ' }) + ", " + line; SendMessage(this.Handle, WM_VSCROLL, SB_BOTTOM, 0); //scroll down to the end break; } } _prevFilename = _outputParser.Filename; } catch (Exception ex) { string msg = String.Format("output: \"{0}\"\n\nError message: {1}", line, ex.Message); MessageBox.Show(msg, "Failed to parse output", MessageBoxButtons.OK,MessageBoxIcon.Exclamation); } finally { this.EndUpdate(); this.ResumeLayout(); } } private TreeNode AddItem(int iconIdx, string text, TreeNode node = null) { if (node == null) { node = new TreeNode(text, iconIdx, iconIdx); this.Nodes.Add(node); } else { node.Text = text; node.ImageIndex = iconIdx; node.SelectedImageIndex = iconIdx; } if (_lastTreeNode != null && _lastTreeNode.ImageIndex == BuildIcons.Processing) { _lastTreeNode.ImageIndex = BuildIcons.Succeed; _lastTreeNode.SelectedImageIndex = BuildIcons.Succeed; if (_lastTreeNode.Text.StartsWith("Building")) _lastTreeNode.Text = _lastTreeNode.Text.Substring(9); } _lastTreeNode = node; node.EnsureVisible(); //SendMessage(this.Handle, WM_VSCROLL, SB_BOTTOM, 0); //scroll down to the end return node; } private TreeNode AddItem(string filename, int iconIdx, string text) { TreeNode item = null; var key = filename; //normalize key key = Path.ChangeExtension(key, null); key = key.Replace('\\', '/'); key = new Uri(key).AbsolutePath; //get node _assetMap.TryGetValue(key, out item); if (item == null) _xnbMap.TryGetValue(key, out item); return AddItem(iconIdx, text, item); } private static TreeNode AddSubItem(TreeNode treeNode, string text) { var subTreeNode = new TreeNode(text, BuildIcons.Null, BuildIcons.Null); treeNode.Nodes.Add(subTreeNode); return subTreeNode; } private string GetRelativePath(string path) { var pathUri = new Uri(path); return Uri.UnescapeDataString(_folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar)); } private string GetRelativeOutputPath(string path) { var pathUri = new Uri(path); return Uri.UnescapeDataString(_outputUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar)); } internal void Clear() { this.Nodes.Clear(); _project = null; _contentItems = null; _assetMap.Clear(); _xnbMap.Clear(); } internal void PopulateAssets(PipelineProject project, IEnumerable items) { this._project = project; this._contentItems = new List(items); } internal void PopulateAssets() { // Suspend FilterOutput this.SuspendLayout(); foreach (var ContentItem in _contentItems) { var node = new TreeNode(ContentItem.OriginalPath, BuildIcons.Queued, BuildIcons.Queued); this.Nodes.Add(node); string key = Path.Combine(_project.Location, ContentItem.OriginalPath); //normalize key key = Path.ChangeExtension(key, null); key = key.Replace('\\', '/'); key = new Uri(key).AbsolutePath; _assetMap.Add(key, node); //map key to node var resolvedOutputDir = ReplaceSymbols(_project, _project.OutputDir); key = Path.Combine(_project.Location, resolvedOutputDir, ContentItem.OriginalPath); //normalize key key = Path.ChangeExtension(key, null); key = key.Replace('\\', '/'); key = new Uri(key).AbsolutePath; _xnbMap.Add(key, node); //map key to node } // Resume FilterOutput Layout this.ResumeLayout(); } string ReplaceSymbols(PipelineProject project, string parameter) { if (string.IsNullOrWhiteSpace(parameter)) return parameter; return parameter .Replace("$(Platform)", project.Platform.ToString()) .Replace("$(Configuration)", project.Config) .Replace("$(Config)", project.Config) .Replace("$(Profile)", project.Profile.ToString()); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/Controls/TabControlEx.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Windows.Forms; namespace Content.Pipeline.Editor.Windows.Controls { public partial class TabControlEx : TabControl { const int TCM_ADJUSTRECT = 0x1328; [Browsable(true)] [EditorBrowsable(EditorBrowsableState.Always)] [Category("Behavior")] [DefaultValue(false)] public bool HideTabHeader { get; set; } public TabControlEx():base() { } protected override void WndProc(ref Message m) { switch (m.Msg) { case TCM_ADJUSTRECT: if (HideTabHeader && !DesignMode) { m.Result = (IntPtr)1; return; } break; } base.WndProc(ref m); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/EditorIcons.cs ================================================ using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Windows.Forms; namespace Content.Pipeline.Editor { public static class EditorIcons { public static ImageList Templates { get; private set; } static EditorIcons() { Templates = new ImageList(); var asm = Assembly.GetExecutingAssembly(); Templates.Images.Add(Image.FromStream(asm.GetManifestResourceStream(@"Content.Pipeline.Editor.Icons.blueprint.png"))); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/FolderSelectDialog.cs ================================================ using System; using System.ComponentModel; using System.Drawing.Design; using System.IO; using System.Reflection; using System.Windows.Forms; namespace Content.Pipeline.Editor { public class FolderSelectEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) { var project = context.Instance as PipelineProjectProxy; var initialDir = (string)value; if (initialDir == null || !Directory.Exists(initialDir)) initialDir = project.Location; var dlg = new FolderSelectDialog() { InitialDirectory = initialDir, Title = "Select Folder", }; if (dlg.ShowDialog(MainView.Form)) return dlg.FileName; return value; } } /// /// Wraps System.Windows.Forms.OpenFileDialog to make it present /// a vista-style dialog. /// public class FolderSelectDialog { // Wrapped dialog System.Windows.Forms.OpenFileDialog ofd = null; /// /// Default constructor /// public FolderSelectDialog() { ofd = new System.Windows.Forms.OpenFileDialog(); ofd.Filter = "Folders|\n"; ofd.AddExtension = false; ofd.CheckFileExists = false; ofd.DereferenceLinks = true; ofd.Multiselect = false; } #region Properties /// /// Gets/Sets the initial folder to be selected. A null value selects the current directory. /// public string InitialDirectory { get { return ofd.InitialDirectory; } set { ofd.InitialDirectory = value == null || value.Length == 0 ? Environment.CurrentDirectory : value; } } /// /// Gets/Sets the title to show in the dialog /// public string Title { get { return ofd.Title; } set { ofd.Title = value == null ? "Select a folder" : value; } } /// /// Gets the selected folder /// public string FileName { get { return ofd.FileName; } } #endregion #region Methods /// /// Shows the dialog /// /// Handle of the control to be parent /// True if the user presses OK else false public bool ShowDialog(IWin32Window wndOwner) { if (Environment.OSVersion.Version.Major >= 6) { Type tofd = ofd.GetType(); Assembly asm = tofd.Assembly; string nsForms = asm.GetName().Name + "."; Type tFileDialog = typeof(FileDialog); Type tIFileDialog = asm.GetType(nsForms + "FileDialogNative+IFileDialog"); Type tFOS = asm.GetType(nsForms + "FileDialogNative+FOS"); Type tVistaDialogEvents = asm.GetType(nsForms + "FileDialog+VistaDialogEvents"); MethodInfo miCreateVistaDialog = tofd.GetMethod("CreateVistaDialog", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); MethodInfo miOnBeforeVistaDialog = tofd.GetMethod("OnBeforeVistaDialog", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); MethodInfo miGetOptions = tFileDialog.GetMethod("GetOptions", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); MethodInfo miSetOptions = tIFileDialog.GetMethod("SetOptions", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); object dialog = miCreateVistaDialog.Invoke(ofd, new object[] { }); miOnBeforeVistaDialog.Invoke(ofd, new [] { dialog }); uint options = (uint)miGetOptions.Invoke(ofd, new object[] { }); uint FOS_PICKFOLDERS = (uint)tFOS.GetField("FOS_PICKFOLDERS").GetValue(null); options |= FOS_PICKFOLDERS; miSetOptions.Invoke(dialog, new object[] { options }); object pfde = null; ConstructorInfo[] ctorInfos = tVistaDialogEvents.GetConstructors(); foreach (ConstructorInfo ci in ctorInfos) { try { pfde = ci.Invoke(new[] { ofd }); break; } catch { } } MethodInfo miAdvise = tIFileDialog.GetMethod("Advise", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); MethodInfo miShow = tIFileDialog.GetMethod("Show", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); MethodInfo miUnadvise = tIFileDialog.GetMethod("Unadvise", (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); uint num = 0; object[] parameters = new [] { pfde, num }; miAdvise.Invoke(dialog, parameters); num = (uint)parameters[1]; try { int num2 = (int)miShow.Invoke(dialog, new object[] { wndOwner.Handle }); return (0 == num2); } finally { miUnadvise.Invoke(dialog, new object[] { num }); GC.KeepAlive(pfde); } } else { var fbd = new FolderBrowserDialog(); fbd.Description = this.Title; fbd.SelectedPath = this.InitialDirectory; fbd.ShowNewFolderButton = false; if (fbd.ShowDialog(wndOwner) != DialogResult.OK) return false; ofd.FileName = fbd.SelectedPath; return true; } } #endregion } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.Designer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Windows.Forms; namespace Content.Pipeline.Editor { partial class MainView { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Windows.Forms.ToolStripSeparator _toolStripSeparator3; System.Windows.Forms.ToolStripSeparator _toolStripSeparator1; System.Windows.Forms.ToolStripSeparator _toolStripSeparator2; System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainView)); this._mainMenu = new System.Windows.Forms.MenuStrip(); this._fileMenu = new System.Windows.Forms.ToolStripMenuItem(); this._newProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._openProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._openRecentMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._closeMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this._importProjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._saveMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._saveAsMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._exitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._undoMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._redoMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this._addMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.existingItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.existingFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this._renameMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._deleteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._buildMenu = new System.Windows.Forms.ToolStripMenuItem(); this._buildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._rebuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._cleanMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this._filterOutputMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._singlethreadMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._cancelBuildSeparator = new System.Windows.Forms.ToolStripSeparator(); this._cancelBuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._helpMenu = new System.Windows.Forms.ToolStripMenuItem(); this._viewHelpMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._treeContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this._treeOpenFileMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._treeAddMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem(); this._treeSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this._treeOpenFileLocationMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._treeRebuildMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this._treeRenameMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._treeDeleteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this._toolNew = new System.Windows.Forms.ToolStripButton(); this._toolOpen = new System.Windows.Forms.ToolStripButton(); this._toolSave = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); this._toolNewItem = new System.Windows.Forms.ToolStripButton(); this._toolAddItem = new System.Windows.Forms.ToolStripButton(); this._toolNewFolder = new System.Windows.Forms.ToolStripButton(); this._toolAddFolder = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); this._toolBuild = new System.Windows.Forms.ToolStripButton(); this._toolRebuild = new System.Windows.Forms.ToolStripButton(); this._toolClean = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); this._toolFilterOutput = new System.Windows.Forms.ToolStripButton(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this._splitEditorOutput = new System.Windows.Forms.SplitContainer(); this._splitTreeProps = new System.Windows.Forms.SplitContainer(); this._treeView = new Content.Pipeline.Editor.MultiSelectTreeview(); this._propertyGrid = new System.Windows.Forms.PropertyGrid(); this._outputTabs = new Content.Pipeline.Editor.Windows.Controls.TabControlEx(); this._outputTabPage1 = new System.Windows.Forms.TabPage(); this._outputWindow = new System.Windows.Forms.RichTextBox(); this._outputTabPage2 = new System.Windows.Forms.TabPage(); this._filterOutputWindow = new Content.Pipeline.Editor.Windows.Controls.FilterOutputControl(); _toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); _toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); _toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this._mainMenu.SuspendLayout(); this._treeContextMenu.SuspendLayout(); this.toolStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this._splitEditorOutput)).BeginInit(); this._splitEditorOutput.Panel1.SuspendLayout(); this._splitEditorOutput.Panel2.SuspendLayout(); this._splitEditorOutput.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this._splitTreeProps)).BeginInit(); this._splitTreeProps.Panel1.SuspendLayout(); this._splitTreeProps.Panel2.SuspendLayout(); this._splitTreeProps.SuspendLayout(); this._outputTabs.SuspendLayout(); this._outputTabPage1.SuspendLayout(); this._outputTabPage2.SuspendLayout(); this.SuspendLayout(); // // _toolStripSeparator3 // _toolStripSeparator3.Name = "_toolStripSeparator3"; _toolStripSeparator3.Size = new System.Drawing.Size(207, 6); // // _toolStripSeparator1 // _toolStripSeparator1.Name = "_toolStripSeparator1"; _toolStripSeparator1.Size = new System.Drawing.Size(207, 6); // // _toolStripSeparator2 // _toolStripSeparator2.Name = "_toolStripSeparator2"; _toolStripSeparator2.Size = new System.Drawing.Size(167, 6); // // _mainMenu // this._mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._fileMenu, this.editToolStripMenuItem, this._buildMenu, this._helpMenu}); this._mainMenu.Location = new System.Drawing.Point(0, 0); this._mainMenu.Name = "_mainMenu"; this._mainMenu.Size = new System.Drawing.Size(784, 28); this._mainMenu.TabIndex = 0; this._mainMenu.Text = "menuStrip1"; this._mainMenu.MenuActivate += new System.EventHandler(this.MainMenuMenuActivate); // // _fileMenu // this._fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._newProjectMenuItem, this._openProjectMenuItem, this._openRecentMenuItem, this._closeMenuItem, this.toolStripSeparator3, this._importProjectMenuItem, _toolStripSeparator3, this._saveMenuItem, this._saveAsMenuItem, _toolStripSeparator1, this._exitMenuItem}); this._fileMenu.Name = "_fileMenu"; this._fileMenu.Size = new System.Drawing.Size(44, 24); this._fileMenu.Text = "&File"; // // _newProjectMenuItem // this._newProjectMenuItem.Name = "_newProjectMenuItem"; this._newProjectMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.N))); this._newProjectMenuItem.Size = new System.Drawing.Size(210, 24); this._newProjectMenuItem.Text = "New..."; this._newProjectMenuItem.Click += new System.EventHandler(this.OnNewProjectClick); // // _openProjectMenuItem // this._openProjectMenuItem.Name = "_openProjectMenuItem"; this._openProjectMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); this._openProjectMenuItem.Size = new System.Drawing.Size(210, 24); this._openProjectMenuItem.Text = "Open..."; this._openProjectMenuItem.Click += new System.EventHandler(this.OnOpenProjectClick); // // _openRecentMenuItem // this._openRecentMenuItem.Name = "_openRecentMenuItem"; this._openRecentMenuItem.Size = new System.Drawing.Size(210, 24); this._openRecentMenuItem.Text = "Open Recent"; // // _closeMenuItem // this._closeMenuItem.Name = "_closeMenuItem"; this._closeMenuItem.Size = new System.Drawing.Size(210, 24); this._closeMenuItem.Text = "Close"; this._closeMenuItem.Click += new System.EventHandler(this.OnCloseProjectClick); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Size = new System.Drawing.Size(207, 6); // // _importProjectMenuItem // this._importProjectMenuItem.Name = "_importProjectMenuItem"; this._importProjectMenuItem.Size = new System.Drawing.Size(210, 24); this._importProjectMenuItem.Text = "Import..."; this._importProjectMenuItem.Click += new System.EventHandler(this.OnImportProjectClick); // // _saveMenuItem // this._saveMenuItem.Name = "_saveMenuItem"; this._saveMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); this._saveMenuItem.Size = new System.Drawing.Size(210, 24); this._saveMenuItem.Text = "&Save"; this._saveMenuItem.Click += new System.EventHandler(this.OnSaveProjectClick); // // _saveAsMenuItem // this._saveAsMenuItem.Name = "_saveAsMenuItem"; this._saveAsMenuItem.Size = new System.Drawing.Size(210, 24); this._saveAsMenuItem.Text = "Save &As..."; this._saveAsMenuItem.Click += new System.EventHandler(this.OnSaveAsProjectClick); // // _exitMenuItem // this._exitMenuItem.Name = "_exitMenuItem"; this._exitMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); this._exitMenuItem.Size = new System.Drawing.Size(210, 24); this._exitMenuItem.Text = "E&xit"; this._exitMenuItem.Click += new System.EventHandler(this.ExitMenuItemClick); // // editToolStripMenuItem // this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._undoMenuItem, this._redoMenuItem, this.toolStripSeparator2, this._addMenuItem, this.toolStripSeparator1, this._renameMenuItem, this._deleteMenuItem}); this.editToolStripMenuItem.Name = "editToolStripMenuItem"; this.editToolStripMenuItem.Size = new System.Drawing.Size(47, 24); this.editToolStripMenuItem.Text = "&Edit"; // // _undoMenuItem // this._undoMenuItem.Enabled = false; this._undoMenuItem.Name = "_undoMenuItem"; this._undoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); this._undoMenuItem.Size = new System.Drawing.Size(165, 24); this._undoMenuItem.Text = "Undo"; this._undoMenuItem.Click += new System.EventHandler(this.OnUndoClick); // // _redoMenuItem // this._redoMenuItem.Enabled = false; this._redoMenuItem.Name = "_redoMenuItem"; this._redoMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); this._redoMenuItem.Size = new System.Drawing.Size(165, 24); this._redoMenuItem.Text = "Redo"; this._redoMenuItem.Click += new System.EventHandler(this.OnRedoClick); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; this.toolStripSeparator2.Size = new System.Drawing.Size(162, 6); // // _addMenuItem // this._addMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.newItemToolStripMenuItem, this.newFolderToolStripMenuItem, this.toolStripMenuItem2, this.existingItemToolStripMenuItem, this.existingFolderToolStripMenuItem}); this._addMenuItem.Name = "_addMenuItem"; this._addMenuItem.Size = new System.Drawing.Size(165, 24); this._addMenuItem.Text = "Add"; // // newItemToolStripMenuItem // this.newItemToolStripMenuItem.Name = "newItemToolStripMenuItem"; this.newItemToolStripMenuItem.Size = new System.Drawing.Size(184, 24); this.newItemToolStripMenuItem.Text = "New Item..."; this.newItemToolStripMenuItem.Click += new System.EventHandler(this.OnNewItemClick); // // newFolderToolStripMenuItem // this.newFolderToolStripMenuItem.Name = "newFolderToolStripMenuItem"; this.newFolderToolStripMenuItem.Size = new System.Drawing.Size(184, 24); this.newFolderToolStripMenuItem.Text = "New Folder..."; this.newFolderToolStripMenuItem.Click += new System.EventHandler(this.OnNewFolderClick); // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6); // // existingItemToolStripMenuItem // this.existingItemToolStripMenuItem.Name = "existingItemToolStripMenuItem"; this.existingItemToolStripMenuItem.Size = new System.Drawing.Size(184, 24); this.existingItemToolStripMenuItem.Text = "Existing Item..."; this.existingItemToolStripMenuItem.Click += new System.EventHandler(this.OnAddItemClick); // // existingFolderToolStripMenuItem // this.existingFolderToolStripMenuItem.Name = "existingFolderToolStripMenuItem"; this.existingFolderToolStripMenuItem.Size = new System.Drawing.Size(184, 24); this.existingFolderToolStripMenuItem.Text = "Existing Folder..."; this.existingFolderToolStripMenuItem.Click += new System.EventHandler(this.OnAddFolderClick); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6); // // _renameMenuItem // this._renameMenuItem.Name = "_renameMenuItem"; this._renameMenuItem.Size = new System.Drawing.Size(165, 24); this._renameMenuItem.Text = "Rename"; this._renameMenuItem.Click += new System.EventHandler(this.OnRenameItemClick); // // _deleteMenuItem // this._deleteMenuItem.Name = "_deleteMenuItem"; this._deleteMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete; this._deleteMenuItem.Size = new System.Drawing.Size(165, 24); this._deleteMenuItem.Text = "&Remove"; this._deleteMenuItem.Click += new System.EventHandler(this.OnDeleteItemClick); // // _buildMenu // this._buildMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._buildMenuItem, this._rebuildMenuItem, this._cleanMenuItem, this.toolStripSeparator5, this._filterOutputMenuItem, this._singlethreadMenuItem, this._cancelBuildSeparator, this._cancelBuildMenuItem}); this._buildMenu.Name = "_buildMenu"; this._buildMenu.Size = new System.Drawing.Size(55, 24); this._buildMenu.Text = "&Build"; // // _buildMenuItem // this._buildMenuItem.Name = "_buildMenuItem"; this._buildMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F6; this._buildMenuItem.Size = new System.Drawing.Size(201, 24); this._buildMenuItem.Text = "&Build"; this._buildMenuItem.Click += new System.EventHandler(this.BuildMenuItemClick); // // _rebuildMenuItem // this._rebuildMenuItem.Name = "_rebuildMenuItem"; this._rebuildMenuItem.Size = new System.Drawing.Size(201, 24); this._rebuildMenuItem.Text = "&Rebuild"; this._rebuildMenuItem.Click += new System.EventHandler(this.RebuildMenuItemClick); // // _cleanMenuItem // this._cleanMenuItem.Name = "_cleanMenuItem"; this._cleanMenuItem.Size = new System.Drawing.Size(201, 24); this._cleanMenuItem.Text = "&Clean"; this._cleanMenuItem.Click += new System.EventHandler(this.CleanMenuItemClick); // // toolStripSeparator5 // this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(198, 6); // // _filterOutputMenuItem // this._filterOutputMenuItem.Checked = true; this._filterOutputMenuItem.CheckOnClick = true; this._filterOutputMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this._filterOutputMenuItem.Name = "_filterOutputMenuItem"; this._filterOutputMenuItem.Size = new System.Drawing.Size(201, 24); this._filterOutputMenuItem.Text = "Filter Output"; this._filterOutputMenuItem.CheckedChanged += new System.EventHandler(this.FilterOutputMenuItem_CheckedChanged); // // _singlethreadMenuItem // this._singlethreadMenuItem.CheckOnClick = true; this._singlethreadMenuItem.Name = "_singlethreadMenuItem"; this._singlethreadMenuItem.Size = new System.Drawing.Size(201, 24); this._singlethreadMenuItem.Text = "SingleThread"; // // _cancelBuildSeparator // this._cancelBuildSeparator.Name = "_cancelBuildSeparator"; this._cancelBuildSeparator.Size = new System.Drawing.Size(198, 6); this._cancelBuildSeparator.Visible = false; // // _cancelBuildMenuItem // this._cancelBuildMenuItem.Name = "_cancelBuildMenuItem"; this._cancelBuildMenuItem.ShortcutKeyDisplayString = "Ctrl+Break"; this._cancelBuildMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Pause))); this._cancelBuildMenuItem.Size = new System.Drawing.Size(201, 24); this._cancelBuildMenuItem.Text = "Cancel"; this._cancelBuildMenuItem.Visible = false; this._cancelBuildMenuItem.Click += new System.EventHandler(this.CancelBuildMenuItemClick); // // _helpMenu // this._helpMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._viewHelpMenuItem, _toolStripSeparator2, this._aboutMenuItem}); this._helpMenu.Name = "_helpMenu"; this._helpMenu.Size = new System.Drawing.Size(53, 24); this._helpMenu.Text = "&Help"; // // _viewHelpMenuItem // this._viewHelpMenuItem.Name = "_viewHelpMenuItem"; this._viewHelpMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1; this._viewHelpMenuItem.Size = new System.Drawing.Size(170, 24); this._viewHelpMenuItem.Text = "&View Help"; this._viewHelpMenuItem.Click += new System.EventHandler(this.ViewHelpMenuItemClick); // // _aboutMenuItem // this._aboutMenuItem.Name = "_aboutMenuItem"; this._aboutMenuItem.Size = new System.Drawing.Size(170, 24); this._aboutMenuItem.Text = "&About..."; this._aboutMenuItem.Click += new System.EventHandler(this.AboutMenuItemClick); // // _treeContextMenu // this._treeContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._treeOpenFileMenuItem, this._treeAddMenu, this._treeSeparator1, this._treeOpenFileLocationMenuItem, this._treeRebuildMenuItem, this.toolStripSeparator4, this._treeRenameMenuItem, this._treeDeleteMenuItem}); this._treeContextMenu.Name = "itemContextMenu"; this._treeContextMenu.Size = new System.Drawing.Size(203, 160); this._treeContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.MainMenuMenuActivate); // // _treeOpenFileMenuItem // this._treeOpenFileMenuItem.Name = "_treeOpenFileMenuItem"; this._treeOpenFileMenuItem.Size = new System.Drawing.Size(202, 24); this._treeOpenFileMenuItem.Text = "Open File"; this._treeOpenFileMenuItem.Click += new System.EventHandler(this.ContextMenu_OpenFile_Click); // // _treeAddMenu // this._treeAddMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem3, this.toolStripMenuItem4, this.toolStripSeparator7, this.toolStripMenuItem5, this.toolStripMenuItem6}); this._treeAddMenu.Name = "_treeAddMenu"; this._treeAddMenu.Size = new System.Drawing.Size(202, 24); this._treeAddMenu.Text = "Add"; // // toolStripMenuItem3 // this.toolStripMenuItem3.Name = "toolStripMenuItem3"; this.toolStripMenuItem3.Size = new System.Drawing.Size(184, 24); this.toolStripMenuItem3.Text = "New Item..."; this.toolStripMenuItem3.Click += new System.EventHandler(this.OnNewItemClick); // // toolStripMenuItem4 // this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem4.Size = new System.Drawing.Size(184, 24); this.toolStripMenuItem4.Text = "New Folder..."; this.toolStripMenuItem4.Click += new System.EventHandler(this.OnNewFolderClick); // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; this.toolStripSeparator7.Size = new System.Drawing.Size(181, 6); // // toolStripMenuItem5 // this.toolStripMenuItem5.Name = "toolStripMenuItem5"; this.toolStripMenuItem5.Size = new System.Drawing.Size(184, 24); this.toolStripMenuItem5.Text = "Existing Item..."; this.toolStripMenuItem5.Click += new System.EventHandler(this.OnAddItemClick); // // toolStripMenuItem6 // this.toolStripMenuItem6.Name = "toolStripMenuItem6"; this.toolStripMenuItem6.Size = new System.Drawing.Size(184, 24); this.toolStripMenuItem6.Text = "Existing Folder..."; this.toolStripMenuItem6.Click += new System.EventHandler(this.OnAddFolderClick); // // _treeSeparator1 // this._treeSeparator1.Name = "_treeSeparator1"; this._treeSeparator1.Size = new System.Drawing.Size(199, 6); // // _treeOpenFileLocationMenuItem // this._treeOpenFileLocationMenuItem.Name = "_treeOpenFileLocationMenuItem"; this._treeOpenFileLocationMenuItem.Size = new System.Drawing.Size(202, 24); this._treeOpenFileLocationMenuItem.Text = "Open File Location"; this._treeOpenFileLocationMenuItem.Click += new System.EventHandler(this.ContextMenu_OpenFileLocation_Click); // // _treeRebuildMenuItem // this._treeRebuildMenuItem.Name = "_treeRebuildMenuItem"; this._treeRebuildMenuItem.Size = new System.Drawing.Size(202, 24); this._treeRebuildMenuItem.Text = "Rebuild"; this._treeRebuildMenuItem.Click += new System.EventHandler(this.RebuildItemsMenuItemClick); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Size = new System.Drawing.Size(199, 6); // // _treeRenameMenuItem // this._treeRenameMenuItem.Name = "_treeRenameMenuItem"; this._treeRenameMenuItem.Size = new System.Drawing.Size(202, 24); this._treeRenameMenuItem.Text = "Rename"; this._treeRenameMenuItem.Click += new System.EventHandler(this.OnRenameItemClick); // // _treeDeleteMenuItem // this._treeDeleteMenuItem.Name = "_treeDeleteMenuItem"; this._treeDeleteMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete; this._treeDeleteMenuItem.Size = new System.Drawing.Size(202, 24); this._treeDeleteMenuItem.Text = "&Remove"; this._treeDeleteMenuItem.Click += new System.EventHandler(this.OnDeleteItemClick); // // _toolNew // this._toolNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolNew.Image = ((System.Drawing.Image)(resources.GetObject("_toolNew.Image"))); this._toolNew.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolNew.Name = "_toolNew"; this._toolNew.Size = new System.Drawing.Size(23, 22); this._toolNew.Text = "New"; this._toolNew.Click += new System.EventHandler(this.OnNewProjectClick); // // _toolOpen // this._toolOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolOpen.Image = ((System.Drawing.Image)(resources.GetObject("_toolOpen.Image"))); this._toolOpen.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolOpen.Name = "_toolOpen"; this._toolOpen.Size = new System.Drawing.Size(23, 22); this._toolOpen.Text = "Open"; this._toolOpen.Click += new System.EventHandler(this.OnOpenProjectClick); // // _toolSave // this._toolSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolSave.Image = ((System.Drawing.Image)(resources.GetObject("_toolSave.Image"))); this._toolSave.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolSave.Name = "_toolSave"; this._toolSave.Size = new System.Drawing.Size(23, 22); this._toolSave.Text = "Save"; this._toolSave.Click += new System.EventHandler(this.OnSaveProjectClick); // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25); // // _toolNewItem // this._toolNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolNewItem.Image = ((System.Drawing.Image)(resources.GetObject("_toolNewItem.Image"))); this._toolNewItem.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolNewItem.Name = "_toolNewItem"; this._toolNewItem.Size = new System.Drawing.Size(23, 22); this._toolNewItem.Text = "Add New Item"; this._toolNewItem.Click += new System.EventHandler(this.OnNewItemClick); // // _toolAddItem // this._toolAddItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolAddItem.Image = ((System.Drawing.Image)(resources.GetObject("_toolAddItem.Image"))); this._toolAddItem.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolAddItem.Name = "_toolAddItem"; this._toolAddItem.Size = new System.Drawing.Size(23, 22); this._toolAddItem.Text = "Add Existing Item"; this._toolAddItem.Click += new System.EventHandler(this.OnAddItemClick); // // _toolNewFolder // this._toolNewFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolNewFolder.Image = ((System.Drawing.Image)(resources.GetObject("_toolNewFolder.Image"))); this._toolNewFolder.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolNewFolder.Name = "_toolNewFolder"; this._toolNewFolder.Size = new System.Drawing.Size(23, 22); this._toolNewFolder.Text = "Add New Folder"; this._toolNewFolder.Click += new System.EventHandler(this.OnNewFolderClick); // // _toolAddFolder // this._toolAddFolder.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolAddFolder.Image = ((System.Drawing.Image)(resources.GetObject("_toolAddFolder.Image"))); this._toolAddFolder.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolAddFolder.Name = "_toolAddFolder"; this._toolAddFolder.Size = new System.Drawing.Size(23, 22); this._toolAddFolder.Text = "Add Existing Folder"; this._toolAddFolder.Click += new System.EventHandler(this.OnAddFolderClick); // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; this.toolStripSeparator8.Size = new System.Drawing.Size(6, 25); // // _toolBuild // this._toolBuild.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolBuild.Image = ((System.Drawing.Image)(resources.GetObject("_toolBuild.Image"))); this._toolBuild.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolBuild.Name = "_toolBuild"; this._toolBuild.Size = new System.Drawing.Size(23, 22); this._toolBuild.Text = "Build"; this._toolBuild.Click += new System.EventHandler(this.BuildMenuItemClick); // // _toolRebuild // this._toolRebuild.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolRebuild.Image = ((System.Drawing.Image)(resources.GetObject("_toolRebuild.Image"))); this._toolRebuild.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolRebuild.Name = "_toolRebuild"; this._toolRebuild.Size = new System.Drawing.Size(23, 22); this._toolRebuild.Text = "Rebuild"; this._toolRebuild.Click += new System.EventHandler(this.RebuildMenuItemClick); // // _toolClean // this._toolClean.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolClean.Image = ((System.Drawing.Image)(resources.GetObject("_toolClean.Image"))); this._toolClean.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolClean.Name = "_toolClean"; this._toolClean.Size = new System.Drawing.Size(23, 22); this._toolClean.Text = "Clean"; this._toolClean.Click += new System.EventHandler(this.CleanMenuItemClick); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; this.toolStripSeparator9.Size = new System.Drawing.Size(6, 25); // // _toolFilterOutput // this._toolFilterOutput.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this._toolFilterOutput.Image = ((System.Drawing.Image)(resources.GetObject("_toolFilterOutput.Image"))); this._toolFilterOutput.ImageTransparentColor = System.Drawing.Color.Magenta; this._toolFilterOutput.Name = "_toolFilterOutput"; this._toolFilterOutput.Size = new System.Drawing.Size(23, 22); this._toolFilterOutput.Text = "Filter Output"; this._toolFilterOutput.Click += new System.EventHandler(this._toolFilterOutput_Click); // // toolStrip1 // this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._toolNew, this._toolOpen, this._toolSave, this.toolStripSeparator6, this._toolNewItem, this._toolAddItem, this._toolNewFolder, this._toolAddFolder, this.toolStripSeparator8, this._toolBuild, this._toolRebuild, this._toolClean, this.toolStripSeparator9, this._toolFilterOutput}); this.toolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; this.toolStrip1.Location = new System.Drawing.Point(0, 28); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.Padding = new System.Windows.Forms.Padding(4, 0, 1, 0); this.toolStrip1.Size = new System.Drawing.Size(784, 25); this.toolStrip1.TabIndex = 3; this.toolStrip1.Text = "toolStrip1"; // // _splitEditorOutput // this._splitEditorOutput.Dock = System.Windows.Forms.DockStyle.Fill; this._splitEditorOutput.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this._splitEditorOutput.Location = new System.Drawing.Point(0, 53); this._splitEditorOutput.Name = "_splitEditorOutput"; // // _splitEditorOutput.Panel1 // this._splitEditorOutput.Panel1.Controls.Add(this._splitTreeProps); // // _splitEditorOutput.Panel2 // this._splitEditorOutput.Panel2.Controls.Add(this._outputTabs); this._splitEditorOutput.Size = new System.Drawing.Size(784, 508); this._splitEditorOutput.SplitterDistance = 306; this._splitEditorOutput.TabIndex = 4; this._splitEditorOutput.TabStop = false; this._splitEditorOutput.SplitterMoved += _splitEditorOutput_SplitterMoved; // // _splitTreeProps // this._splitTreeProps.Dock = System.Windows.Forms.DockStyle.Fill; this._splitTreeProps.Location = new System.Drawing.Point(0, 0); this._splitTreeProps.Name = "_splitTreeProps"; this._splitTreeProps.Orientation = System.Windows.Forms.Orientation.Horizontal; // // _splitTreeProps.Panel1 // this._splitTreeProps.Panel1.Controls.Add(this._treeView); // // _splitTreeProps.Panel2 // this._splitTreeProps.Panel2.Controls.Add(this._propertyGrid); this._splitTreeProps.Size = new System.Drawing.Size(306, 508); this._splitTreeProps.SplitterDistance = 198; this._splitTreeProps.TabIndex = 1; this._splitTreeProps.TabStop = false; this._splitTreeProps.SplitterMoved += _splitTreeProps_SplitterMoved; // // _treeView // this._treeView.AllowDrop = true; this._treeView.Dock = System.Windows.Forms.DockStyle.Fill; this._treeView.DragOverNodeBackColor = System.Drawing.SystemColors.Highlight; this._treeView.DragOverNodeForeColor = System.Drawing.SystemColors.HighlightText; this._treeView.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this._treeView.ItemHeight = 22; this._treeView.Location = new System.Drawing.Point(0, 0); this._treeView.Name = "_treeView"; this._treeView.Size = new System.Drawing.Size(306, 198); this._treeView.TabIndex = 0; this._treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeViewAfterSelect); this._treeView.DragDrop += new System.Windows.Forms.DragEventHandler(this._treeView_DragDrop); this._treeView.DragOver += new System.Windows.Forms.DragEventHandler(this._treeView_DragOver); this._treeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TreeViewOnKeyDown); this._treeView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.TreeViewMouseUp); // // _propertyGrid // this._propertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText; this._propertyGrid.Dock = System.Windows.Forms.DockStyle.Fill; this._propertyGrid.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this._propertyGrid.Location = new System.Drawing.Point(0, 0); this._propertyGrid.Name = "_propertyGrid"; this._propertyGrid.Size = new System.Drawing.Size(306, 306); this._propertyGrid.TabIndex = 0; // // _outputTabs // this._outputTabs.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; this._outputTabs.Controls.Add(this._outputTabPage1); this._outputTabs.Controls.Add(this._outputTabPage2); this._outputTabs.Dock = System.Windows.Forms.DockStyle.Fill; this._outputTabs.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this._outputTabs.HideTabHeader = true; this._outputTabs.Location = new System.Drawing.Point(0, 0); this._outputTabs.Margin = new System.Windows.Forms.Padding(0); this._outputTabs.Name = "_outputTabs"; this._outputTabs.Padding = new System.Drawing.Point(0, 0); this._outputTabs.SelectedIndex = 0; this._outputTabs.Size = new System.Drawing.Size(474, 508); this._outputTabs.TabIndex = 0; this._outputTabs.TabStop = false; // // _outputTabPage1 // this._outputTabPage1.Controls.Add(this._outputWindow); this._outputTabPage1.Location = new System.Drawing.Point(4, 25); this._outputTabPage1.Margin = new System.Windows.Forms.Padding(0); this._outputTabPage1.Name = "_outputTabPage1"; this._outputTabPage1.Size = new System.Drawing.Size(466, 479); this._outputTabPage1.TabIndex = 0; this._outputTabPage1.Text = "_outputTabPage1"; this._outputTabPage1.UseVisualStyleBackColor = true; // // _outputWindow // this._outputWindow.Dock = System.Windows.Forms.DockStyle.Fill; this._outputWindow.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this._outputWindow.HideSelection = false; this._outputWindow.Location = new System.Drawing.Point(0, 0); this._outputWindow.Name = "_outputWindow"; this._outputWindow.ReadOnly = true; this._outputWindow.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; this._outputWindow.Size = new System.Drawing.Size(466, 479); this._outputWindow.TabIndex = 0; this._outputWindow.TabStop = false; this._outputWindow.Text = ""; // // _outputTabPage2 // this._outputTabPage2.Controls.Add(this._filterOutputWindow); this._outputTabPage2.Location = new System.Drawing.Point(4, 25); this._outputTabPage2.Margin = new System.Windows.Forms.Padding(0); this._outputTabPage2.Name = "_outputTabPage2"; this._outputTabPage2.Size = new System.Drawing.Size(523, 479); this._outputTabPage2.TabIndex = 0; this._outputTabPage2.Text = "_outputTabPage2"; this._outputTabPage2.UseVisualStyleBackColor = true; // // _filterOutputWindow // this._filterOutputWindow.BackColor = System.Drawing.SystemColors.Control; this._filterOutputWindow.Dock = System.Windows.Forms.DockStyle.Fill; this._filterOutputWindow.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(161))); this._filterOutputWindow.FullRowSelect = true; this._filterOutputWindow.ImageIndex = 0; this._filterOutputWindow.ItemHeight = 22; this._filterOutputWindow.Location = new System.Drawing.Point(0, 0); this._filterOutputWindow.Name = "_filterOutputWindow"; this._filterOutputWindow.SelectedImageIndex = 0; this._filterOutputWindow.ShowLines = false; this._filterOutputWindow.ShowNodeToolTips = true; this._filterOutputWindow.Size = new System.Drawing.Size(523, 479); this._filterOutputWindow.TabIndex = 0; // // MainView // this.AllowDrop = true; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(784, 561); this.Controls.Add(this._splitEditorOutput); this.Controls.Add(this.toolStrip1); this.Controls.Add(this._mainMenu); this.DoubleBuffered = true; this.MainMenuStrip = this._mainMenu; this.MinimumSize = new System.Drawing.Size(320, 240); this.Name = "MainView"; this.Text = "Kni Pipeline"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainView_FormClosing); this.Load += new System.EventHandler(this.MainView_Load); this.Shown += new System.EventHandler(this.MainView_Shown); this.SizeChanged += new System.EventHandler(this.MainView_SizeChanged); this.DragDrop += new System.Windows.Forms.DragEventHandler(this.MainView_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.MainView_DragEnter); this._mainMenu.ResumeLayout(false); this._mainMenu.PerformLayout(); this._treeContextMenu.ResumeLayout(false); this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); this._splitEditorOutput.Panel1.ResumeLayout(false); this._splitEditorOutput.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this._splitEditorOutput)).EndInit(); this._splitEditorOutput.ResumeLayout(false); this._splitTreeProps.Panel1.ResumeLayout(false); this._splitTreeProps.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this._splitTreeProps)).EndInit(); this._splitTreeProps.ResumeLayout(false); this._outputTabs.ResumeLayout(false); this._outputTabPage1.ResumeLayout(false); this._outputTabPage2.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.MenuStrip _mainMenu; private System.Windows.Forms.ToolStripMenuItem _fileMenu; private System.Windows.Forms.ToolStripMenuItem _newProjectMenuItem; private System.Windows.Forms.ToolStripMenuItem _openProjectMenuItem; private System.Windows.Forms.ToolStripMenuItem _saveMenuItem; private System.Windows.Forms.ToolStripMenuItem _exitMenuItem; private System.Windows.Forms.ToolStripMenuItem _buildMenu; private System.Windows.Forms.ToolStripMenuItem _buildMenuItem; private System.Windows.Forms.ToolStripMenuItem _rebuildMenuItem; private System.Windows.Forms.ToolStripMenuItem _cleanMenuItem; private System.Windows.Forms.ToolStripMenuItem _helpMenu; private System.Windows.Forms.ToolStripMenuItem _viewHelpMenuItem; private System.Windows.Forms.ToolStripMenuItem _aboutMenuItem; private System.Windows.Forms.ToolStripMenuItem _saveAsMenuItem; private System.Windows.Forms.ToolStripMenuItem _closeMenuItem; private System.Windows.Forms.ToolStripMenuItem _importProjectMenuItem; private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem _undoMenuItem; private System.Windows.Forms.ToolStripMenuItem _redoMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripMenuItem _deleteMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripMenuItem _cancelBuildMenuItem; private System.Windows.Forms.ToolStripSeparator _cancelBuildSeparator; private System.Windows.Forms.ContextMenuStrip _treeContextMenu; private System.Windows.Forms.ToolStripMenuItem _treeDeleteMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripMenuItem _treeRebuildMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; private System.Windows.Forms.ToolStripMenuItem _filterOutputMenuItem; private System.Windows.Forms.ToolStripMenuItem _singlethreadMenuItem; private System.Windows.Forms.ToolStripSeparator _treeSeparator1; private System.Windows.Forms.ToolStripMenuItem _treeOpenFileMenuItem; private System.Windows.Forms.ToolStripMenuItem _treeOpenFileLocationMenuItem; private ToolStripMenuItem _openRecentMenuItem; private ToolStripMenuItem _addMenuItem; private ToolStripMenuItem newItemToolStripMenuItem; private ToolStripMenuItem newFolderToolStripMenuItem; private ToolStripSeparator toolStripMenuItem2; private ToolStripMenuItem existingItemToolStripMenuItem; private ToolStripMenuItem existingFolderToolStripMenuItem; private ToolStripMenuItem _treeAddMenu; private ToolStripMenuItem toolStripMenuItem3; private ToolStripMenuItem toolStripMenuItem4; private ToolStripSeparator toolStripSeparator7; private ToolStripMenuItem toolStripMenuItem5; private ToolStripMenuItem toolStripMenuItem6; private ToolStripMenuItem _renameMenuItem; private ToolStripMenuItem _treeRenameMenuItem; private ToolStripButton _toolNew; private ToolStripButton _toolOpen; private ToolStripButton _toolSave; private ToolStripSeparator toolStripSeparator6; private ToolStripButton _toolNewItem; private ToolStripButton _toolAddItem; private ToolStripButton _toolNewFolder; private ToolStripButton _toolAddFolder; private ToolStripSeparator toolStripSeparator8; private ToolStripButton _toolBuild; private ToolStripButton _toolRebuild; private ToolStripButton _toolClean; private ToolStripSeparator toolStripSeparator9; private ToolStripButton _toolFilterOutput; private ToolStrip toolStrip1; private SplitContainer _splitEditorOutput; private SplitContainer _splitTreeProps; private MultiSelectTreeview _treeView; private PropertyGrid _propertyGrid; private Windows.Controls.TabControlEx _outputTabs; private TabPage _outputTabPage1; private RichTextBox _outputWindow; private TabPage _outputTabPage2; private Windows.Controls.FilterOutputControl _filterOutputWindow; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.IO.IsolatedStorage; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Content.Pipeline.Editor { partial class MainView : Form, IView, IProjectObserver { // The project which will be opened as soon as a controller is attached. // Is used when PipelineTool is launched to open a project, provided by the command line. public string OpenProjectPath; public static IController _controller; private ContentIcons _treeIcons; private List _oldValues = new List(); private bool _treeUpdating; private bool _treeSort; private const string MGContentProjectFileFilter = "MG Content Build Files (*.mgcb)|*.mgcb"; private const string XnaContentProjectFileFilter = "XNA Content Project Files (*.contentproj)|*.contentproj"; public static MainView Form { get; private set; } public MainView() { InitializeComponent(); // Set MenuBar color to Window color if the current OS is Windows 10 if (System.Environment.OSVersion.Version.Major == 10) this._mainMenu.BackColor = SystemColors.Window; // Set the application icon this form. Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); // Find an appropriate font for console like output. var faces = new [] { "Consolas", "Lucida Console", "Courier New" }; for (var f=0; f < faces.Length; f++) { _outputWindow.Font = new System.Drawing.Font(faces[f], 11F, FontStyle.Regular, GraphicsUnit.Point, (byte)0); _filterOutputWindow.Font = new System.Drawing.Font(faces[f], 11F, FontStyle.Regular, GraphicsUnit.Point, (byte)0); if (_outputWindow.Font.Name == faces[f]) break; } _outputWindow.SelectionHangingIndent = TextRenderer.MeasureText(" ", _outputWindow.Font).Width; _treeIcons = new ContentIcons(); _treeView.TreeViewNodeSorter = new TreeViewNodeSorter(); _treeView.ImageList = _treeIcons.Icons; _treeView.BeforeExpand += TreeViewOnBeforeExpand; _treeView.BeforeCollapse += TreeViewOnBeforeCollapse; _treeView.NodeMouseClick += TreeViewOnNodeMouseClick; _treeView.NodeMouseDoubleClick += TreeViewOnNodeMouseDoubleClick; _propertyGrid.PropertyValueChanged += OnPropertyGridPropertyValueChanged; InitOutputWindowContextMenu(); Form = this; } public void Attach(IController controller) { _controller = controller; var updateMenus = new Action(UpdateMenus); var invokeUpdateMenus = new Action(() => Invoke(updateMenus)); _controller.OnBuildStarted += delegate { _filterOutputWindow.SetBaseFolder(_controller); UpdateMenus(); }; _controller.OnBuildFinished += invokeUpdateMenus; _controller.OnProjectLoading += invokeUpdateMenus; _controller.OnProjectLoaded += invokeUpdateMenus; var updateUndoRedo = new CanUndoRedoChanged(UpdateUndoRedo); var invokeUpdateUndoRedo = new CanUndoRedoChanged((u, r) => Invoke(updateUndoRedo, u, r)); _controller.OnCanUndoRedoChanged += invokeUpdateUndoRedo; _controller.Selection.Modified += OnSelectionModified; } private void InitOutputWindowContextMenu() { ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripMenuItem miCopy = new ToolStripMenuItem("&Copy"); miCopy.Click += (o, a) => { if (!string.IsNullOrEmpty(_outputWindow.SelectedText)) Clipboard.SetText(_outputWindow.SelectedText); }; ToolStripMenuItem miSelectAll = new ToolStripMenuItem("&Select all"); miSelectAll.Click += (o, a) => _outputWindow.SelectAll(); contextMenu.Items.Add(miCopy); contextMenu.Items.Add(miSelectAll); _outputWindow.ContextMenuStrip = contextMenu; } public void OnTemplateDefined(ContentItemTemplate template) { // Load icon try { var iconPath = Path.Combine(Path.GetDirectoryName(template.TemplateFile), template.Icon); var iconName = Path.GetFileNameWithoutExtension(iconPath); if (!EditorIcons.Templates.Images.ContainsKey(iconName)) { var iconImage = Image.FromFile(iconPath); EditorIcons.Templates.Images.Add(iconName, iconImage); } template.Icon = iconName; } catch (Exception) { template.Icon = "Default"; } } private void OnSelectionModified(Selection selection, object sender) { if (sender == this) return; _treeView.SelectedNodes = _controller.Selection.Select(FindNode); } private TreeNode FindNode(IProjectItem projectItem) { foreach (var n in _treeView.AllNodes()) { var i = n.Tag as IProjectItem; if (i.OriginalPath == projectItem.OriginalPath) return n; } return null; } private void OnPropertyGridPropertyValueChanged(object s, PropertyValueChangedEventArgs args) { if (args.ChangedItem.Label == "References") _controller.OnReferencesModified(); if (args.ChangedItem.Label == "PackageReferences") _controller.OnReferencesModified(); var obj = _propertyGrid.SelectedObject as PipelineProjectProxy; if (obj != null) { var item = (PipelineProject)_controller.GetItem(obj.OriginalPath); var action = new UpdateProjectAction(this, _controller, item, args.ChangedItem.PropertyDescriptor, args.OldValue); _controller.AddAction(action); _controller.OnProjectModified(); } else { var action = new UpdateContentItemAction(this, _controller, _oldValues); _controller.AddAction(action); _controller.OnProjectModified(); } } private void TreeViewOnNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { // Show menu only if the right mouse button is clicked. if (e.Button == MouseButtons.Right) { // Point where the mouse is clicked. var p = new Point(e.X, e.Y); // Get the node that the user has clicked. var node = _treeView.GetNodeAt(p); if (node != null) { TreeViewShowContextMenu(node, p); } } } private void TreeViewShowContextMenu(TreeNode node, Point contextMenuLocation) { if (!_treeView.SelectedNodes.Contains(node)) { _treeView.SelectedNode = node; } if (_treeView.SelectedNodes.Count() == 1) { _treeSeparator1.Visible = true; _treeOpenFileLocationMenuItem.Visible = true; _treeRenameMenuItem.Visible = true; if (node.Tag is ContentItem) _treeAddMenu.Visible = false; else _treeAddMenu.Visible = true; if (node.Tag is FolderItem) _treeOpenFileMenuItem.Visible = false; else _treeOpenFileMenuItem.Visible = true; } else { _treeAddMenu.Visible = false; _treeOpenFileMenuItem.Visible = false; _treeOpenFileLocationMenuItem.Visible = false; _treeRenameMenuItem.Visible = false; _treeSeparator1.Visible = false; } _treeContextMenu.Show(_treeView, contextMenuLocation); } private void TreeViewOnNodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs args) { // Even though we support 'Open File' as an action on the root (PipelineProject) // double clicking on it toggles whether it is expanded. // So if you want to open it just use the menu. if (!(args.Node.Tag is ContentItem)) return; ContextMenu_OpenFile_Click(sender, args); } public void UpdateRecentProjectList() { try { _mainMenu.SuspendLayout(); // TODO: clear removed projects from DropDownItems // attach added projects to DropDownItems foreach (string project in PipelineSettingsMgr.Settings.ProjectHistory) { if (_openRecentMenuItem.DropDownItems.ContainsKey(project)) continue; ToolStripMenuItem recentItem = new ToolStripMenuItem(project); recentItem.Name = project; _openRecentMenuItem.DropDownItems.Insert(0, recentItem); // We need a local to make the delegate work correctly. string localProject = project; recentItem.Click += (sender, args) => { _controller.OpenProject(localProject); }; } _openRecentMenuItem.Enabled = (_openRecentMenuItem.DropDownItems.Count >= 1); } finally { _mainMenu.ResumeLayout(); } } public AskResult AskSaveOrCancel() { var result = MessageBox.Show( this, "Do you want to save the project first?", "Save Project", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button3); if (result == DialogResult.Yes) return AskResult.Yes; if (result == DialogResult.No) return AskResult.No; return AskResult.Cancel; } public bool AskSaveName(ref string filePath, string title) { var dialog = new SaveFileDialog { Title = title, RestoreDirectory = true, InitialDirectory = Path.GetDirectoryName(filePath), FileName = Path.GetFileName(filePath), AddExtension = true, CheckPathExists = true, Filter = MGContentProjectFileFilter, FilterIndex = 2, }; var result = dialog.ShowDialog(this); filePath = dialog.FileName; return result != DialogResult.Cancel; } public bool AskOpenProject(out string projectFilePath) { var dialog = new OpenFileDialog() { RestoreDirectory = true, AddExtension = true, CheckPathExists = true, CheckFileExists = true, Filter = MGContentProjectFileFilter, FilterIndex = 2, }; var result = dialog.ShowDialog(this); projectFilePath = dialog.FileName; return result != DialogResult.Cancel; } public bool AskImportProject(out string projectFilePath) { var dialog = new OpenFileDialog() { RestoreDirectory = true, AddExtension = true, CheckPathExists = true, CheckFileExists = true, Filter = XnaContentProjectFileFilter, FilterIndex = 2, }; var result = dialog.ShowDialog(this); projectFilePath = dialog.FileName; return result != DialogResult.Cancel; } public void ShowError(string title, string message) { MessageBox.Show(this, message, title, MessageBoxButtons.OK, MessageBoxIcon.Stop); } public void ShowMessage(string message) { MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } public void BeginTreeUpdate() { Debug.Assert(_treeUpdating == false, "Must finish previous tree update!"); _treeUpdating = true; _treeSort = false; _treeView.BeginUpdate(); } public void SetTreeRoot(IProjectItem item) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); _propertyGrid.SelectedObject = null; if(item == null) { _treeView.Nodes.Clear(); return; } var project = item as PipelineProject; if (project == null) return; TreeNode root; if (_treeView.Nodes.Count == 0) root = _treeView.Nodes.Add(string.Empty, item.Name, -1); else root = _treeView.Nodes[0]; root.Tag = new PipelineProjectProxy(project); root.SelectedImageIndex = ContentIcons.ProjectIcon; root.ImageIndex = ContentIcons.ProjectIcon; root.Text = item.Name; _propertyGrid.SelectedObject = root.Tag; UpdateMenus(); } public void AddTreeItem(IProjectItem item) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); _treeSort = true; var path = item.Location; var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries); var root = _treeView.Nodes[0]; var parent = root.Nodes; foreach (var folder in folders) { var found = parent.Find(folder, false); if (found.Length == 0) { var folderNode = parent.Add(folder, folder, -1); folderNode.ImageIndex = ContentIcons.FolderClosedIcon; folderNode.SelectedImageIndex = ContentIcons.FolderClosedIcon; var idx = path.IndexOf(folder); var curPath = path.Substring(0, idx + folder.Length); folderNode.Tag = new FolderItem(curPath); parent = folderNode.Nodes; } else parent = found[0].Nodes; } string fullPath = ((PipelineController)_controller).GetFullPath(item.OriginalPath); int iconIdx = _treeIcons.GetIcon(item.Exists, fullPath); var node = parent.Add(string.Empty, item.Name, -1); node.Tag = item; node.ImageIndex = iconIdx; node.SelectedImageIndex = iconIdx; _treeView.SelectedNode = node; root.Expand(); } public void RemoveTreeItem(ContentItem item) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); var node = _treeView.AllNodes().Find(f => f.Tag == item); if (node == null) return; node.Remove(); var obj = _propertyGrid.SelectedObject as ContentItem; if (obj != null && obj.OriginalPath == item.OriginalPath) _propertyGrid.SelectedObject = null; } public void SelectTreeItem(IProjectItem item) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); var node = _treeView.AllNodes().Find(e => e.Tag == item); if (node != null) _treeView.SelectedNode = node; } public void UpdateTreeItem(IProjectItem item) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); var node = _treeView.AllNodes().Find(e => e.Tag == item); if (node != null) { // Do something useful, eg... /* if (!node.IsValid) { node.ForeColor = Color.Red; } else { node.ForeColor = Color.Black; }*/ } } public void EndTreeUpdate() { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); if (_treeSort) { var node = _treeView.SelectedNode; _treeView.Sort(); _treeView.SelectedNode = node; } _treeSort = false; _treeView.EndUpdate(); _treeUpdating = false; UpdateMenus(); } public void ShowProperties(IProjectItem item) { _propertyGrid.SelectedObject = item; _propertyGrid.ExpandAllGridItems(); } public void UpdateProperties(IProjectItem item) { foreach (var obj in _controller.Selection) { if (obj.OriginalPath.Equals(item.OriginalPath, StringComparison.OrdinalIgnoreCase)) { _propertyGrid.Refresh(); _propertyGrid.ExpandAllGridItems(); break; } } UpdateMenus(); } public void OutputAppend(string text) { if (text == null) return; // We need to append newlines. var line = string.Concat(text, Environment.NewLine); // Write the output... safely if needed. if (InvokeRequired) { _outputWindow.Invoke(new Action(_outputWindow.AppendText), new object[] { line }); _filterOutputWindow.Invoke(new Action(_filterOutputWindow.WriteLine), new object[] { line }); } else { _outputWindow.AppendText(line); _filterOutputWindow.WriteLine(line); } } public bool ChooseContentFile(string initialDirectory, out List files) { var dlg = new OpenFileDialog() { RestoreDirectory = true, AddExtension = true, CheckPathExists = true, CheckFileExists = true, Filter = "All Files (*.*)|*.*", InitialDirectory = initialDirectory, Multiselect = true, }; var result = dlg.ShowDialog(this); files = new List(); if (result != DialogResult.OK) return false; files.AddRange(dlg.FileNames); return true; } public void OutputClear() { _outputWindow.Clear(); _filterOutputWindow.Clear(); } public void OutputPopulateAssets(PipelineProject project, IEnumerable items) { _filterOutputWindow.PopulateAssets(project, items); } public Process CreateProcess(string exe, string commands) { var _buildProcess = new Process(); _buildProcess.StartInfo.FileName = exe; _buildProcess.StartInfo.Arguments = commands; return _buildProcess; } private void ExitMenuItemClick(object sender, System.EventArgs e) { if (_controller.Exit()) Application.Exit(); } private void MainView_Load(object sender, EventArgs e) { // We only load the PipelineSettings.StartupProject if there was not // already a project specified via command line. if (string.IsNullOrEmpty(OpenProjectPath)) { var startupProject = PipelineSettingsMgr.Settings.StartupProject; if (!string.IsNullOrEmpty(startupProject) && File.Exists(startupProject)) OpenProjectPath = startupProject; } PipelineSettingsMgr.Settings.StartupProject = null; if (!string.IsNullOrEmpty(OpenProjectPath)) { _controller.OpenProject(OpenProjectPath); OpenProjectPath = null; } UpdateMenus(); } private void MainView_SizeChanged(object sender, EventArgs e) { if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit) { PipelineSettingsMgr.Settings.Size.X = this.Width; PipelineSettingsMgr.Settings.Size.Y = this.Height; } } private void _splitTreeProps_SplitterMoved(object sender, SplitterEventArgs e) { if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit) PipelineSettingsMgr.Settings.HSeparator = _splitTreeProps.SplitterDistance; } private void _splitEditorOutput_SplitterMoved(object sender, SplitterEventArgs e) { if (this.WindowState != FormWindowState.Maximized && PipelineSettingsMgr.Current.IsInit) PipelineSettingsMgr.Settings.VSeparator = _splitEditorOutput.SplitterDistance; } private void MainView_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { if (!_controller.Exit()) e.Cancel = true; PipelineSettingsMgr.Settings.Maximized = (this.WindowState == FormWindowState.Maximized); PipelineSettingsMgr.Settings.FilterOutput = _filterOutputMenuItem.Checked; PipelineSettingsMgr.Current.Save(); } } private void OnNewProjectClick(object sender, EventArgs e) { _controller.NewProject(); } private void OnImportProjectClick(object sender, EventArgs e) { _controller.ImportProject(); } private void OnOpenProjectClick(object sender, EventArgs e) { _controller.OpenProject(); } private void OnCloseProjectClick(object sender, EventArgs e) { _controller.CloseProject(); } private void OnSaveProjectClick(object sender, System.EventArgs e) { _controller.SaveProject(false); } private void OnSaveAsProjectClick(object sender, System.EventArgs e) { _controller.SaveProject(true); } private void TreeViewAfterSelect(object sender, TreeViewEventArgs e) { _controller.Selection.Clear(this); _propertyGrid.SelectedObject = null; _oldValues.Clear(); foreach (var node in _treeView.SelectedNodes) { var item = node.Tag as IProjectItem; if (item is ContentItem) _oldValues.Add(ContentItemState.Get(item as ContentItem)); _controller.Selection.Add(item, this); } _propertyGrid.SelectedObjects = _controller.Selection.ToArray(); _propertyGrid.ExpandAllGridItems(); } private void TreeViewMouseUp(object sender, MouseEventArgs e) { // Show menu only if the right mouse button is clicked. if (e.Button != MouseButtons.Right) return; // Point where the mouse is clicked. var p = new Point(e.X, e.Y); // Get the node that the user has clicked. var node = _treeView.GetNodeAt(p); if (node == null) return; // Select the node the user has clicked. _treeView.SelectedNode = node; // TODO: Show context menu! } private void BuildMenuItemClick(object sender, EventArgs e) { _controller.SingleThread = _singlethreadMenuItem.Checked; _controller.Build(false); } private void RebuildMenuItemClick(object sender, EventArgs e) { _controller.SingleThread = _singlethreadMenuItem.Checked; _controller.Build(true); } private void RebuildItemsMenuItemClick(object sender, EventArgs e) { _controller.SingleThread = _singlethreadMenuItem.Checked; _controller.RebuildItems(_treeView.GetSelectedContentItems()); } private void CleanMenuItemClick(object sender, EventArgs e) { _controller.SingleThread = _singlethreadMenuItem.Checked; _controller.Clean(); } private void FilterOutputMenuItem_CheckedChanged(object sender, EventArgs e) { _outputTabs.SelectedIndex = _filterOutputMenuItem.Checked ? 1 : 0; _toolFilterOutput.Checked = _filterOutputMenuItem.Checked; } private void CancelBuildMenuItemClick(object sender, EventArgs e) { _controller.CancelBuild(); } private void TreeViewOnBeforeCollapse(object sender, TreeViewCancelEventArgs e) { if (e.Node.ImageIndex == ContentIcons.FolderOpenIcon) { e.Node.ImageIndex = ContentIcons.FolderClosedIcon; e.Node.SelectedImageIndex = ContentIcons.FolderClosedIcon; } } private void TreeViewOnBeforeExpand(object sender, TreeViewCancelEventArgs e) { if (e.Node.ImageIndex == ContentIcons.FolderClosedIcon) { e.Node.ImageIndex = ContentIcons.FolderOpenIcon; e.Node.SelectedImageIndex = ContentIcons.FolderOpenIcon; } } private void TreeViewOnKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Apps) { if (_treeView.SelectedNode != null) { Point nodeCoords = _treeView.PointToScreen(_treeView.SelectedNode.Bounds.Location); TreeViewShowContextMenu(_treeView.SelectedNode, nodeCoords); } } } private void MainMenuMenuActivate(object sender, EventArgs e) { UpdateMenus(); } private void UpdateMenus() { var notBuilding = !_controller.ProjectBuilding; var projectOpen = _controller.ProjectOpen; var projectOpenAndNotBuilding = projectOpen && notBuilding; var count = _treeView.SelectedNodes.Count(); // Update the state of all menu items. _newProjectMenuItem.Enabled = _toolNew.Enabled = notBuilding; _openProjectMenuItem.Enabled = _toolOpen.Enabled = notBuilding; _importProjectMenuItem.Enabled = notBuilding; _saveMenuItem.Enabled = _toolSave.Enabled = projectOpenAndNotBuilding && _controller.ProjectDirty; _saveAsMenuItem.Enabled = projectOpenAndNotBuilding; _closeMenuItem.Enabled = projectOpenAndNotBuilding; _exitMenuItem.Enabled = notBuilding; _addMenuItem.Enabled = _toolNewItem.Enabled = _toolAddItem.Enabled = _toolNewFolder.Enabled = _toolAddFolder.Enabled = projectOpen & count <= 1; _deleteMenuItem.Enabled = projectOpen & count > 0; _renameMenuItem.Enabled = projectOpen & count == 1; _buildMenuItem.Enabled = _toolBuild.Enabled = projectOpenAndNotBuilding; _treeRebuildMenuItem.Enabled = _rebuildMenuItem.Enabled = _toolRebuild.Enabled = projectOpenAndNotBuilding; _rebuildMenuItem.Enabled = _treeRebuildMenuItem.Enabled; _cleanMenuItem.Enabled = _toolClean.Enabled = projectOpenAndNotBuilding; _cancelBuildSeparator.Visible = !notBuilding; _cancelBuildMenuItem.Enabled = !notBuilding; _cancelBuildMenuItem.Visible = !notBuilding; UpdateUndoRedo(_controller.CanUndo, _controller.CanRedo); UpdateRecentProjectList(); } private void UpdateUndoRedo(bool canUndo, bool canRedo) { _undoMenuItem.Enabled = canUndo; _redoMenuItem.Enabled = canRedo; } private void OnDeleteItemClick(object sender, EventArgs e) { var items = new List(); var nodes = _treeView.SelectedNodesRecursive; List dirs = new List(); foreach (var node in nodes) { var item = node.Tag as ContentItem; if (item != null && !items.Contains(item)) items.Add(item); else dirs.Add(node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1)); } _controller.Exclude(items, dirs); } private void ViewHelpMenuItemClick(object sender, EventArgs e) { Process.Start("https://github.com/kniEngine/kni/blob/main/Documentation/articles/content/using_mgcb_editor.md"); } private void AboutMenuItemClick(object sender, EventArgs e) { var about = new AboutDialog(); about.Show(); } private void OnAddItemClick(object sender, EventArgs e) { var node = _treeView.SelectedNode ?? _treeView.Nodes[0]; var item = node.Tag as IProjectItem; _controller.Include(item.Location); } private void OnNewItemClick(object sender, System.EventArgs e) { var dlg = new NewContentDialog(_controller.Templates, EditorIcons.Templates); if (dlg.ShowDialog(this) == DialogResult.OK) { var template = dlg.Selected; var location = ((_treeView.SelectedNode ?? _treeView.Nodes[0]).Tag as IProjectItem).Location; // Ensure name is unique among files at this location? _controller.NewItem(dlg.NameGiven, location, template); } } private void OnAddFolderClick(object sender, EventArgs e) { var node = _treeView.SelectedNode ?? _treeView.Nodes[0]; string location = ""; if (node != null) { var item = node.Tag as IProjectItem; if (item != null) location = item.Location; else location = node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1); } _controller.IncludeFolder(location); } private void OnNewFolderClick(object sender, EventArgs e) { var node = _treeView.SelectedNode ?? _treeView.Nodes[0]; string location = ""; if (node != null) { var item = node.Tag as IProjectItem; if (item != null) location = item.Location; else location = node.FullPath.Substring(_treeView.Nodes[0].Text.Length + 1); } var dialog = new TextEditDialog("New Folder", "Folder Name:", ""); if (dialog.ShowDialog() == DialogResult.OK) _controller.NewFolder(dialog.text, location); } private void OnRedoClick(object sender, EventArgs e) { _controller.Redo(); } private void OnUndoClick(object sender, EventArgs e) { _controller.Undo(); } private void OnRenameItemClick(object sender, EventArgs e) { FileType type = FileType.Base; var item = (_treeView.SelectedNode.Tag as IProjectItem); string path = item.OriginalPath; if (_treeView.SelectedNode.Tag is ContentItem) type = FileType.File; else if (_treeView.SelectedNode.Tag is FolderItem) type = FileType.Folder; else path = item.Name; TextEditDialog dialog = new TextEditDialog("Rename", "New Name:", _treeView.SelectedNode.Text); if (dialog.ShowDialog() == DialogResult.OK) { string newpath = System.IO.Path.GetDirectoryName(path) + System.IO.Path.DirectorySeparatorChar + dialog.text; _controller.Move(new [] { path }, new [] { newpath.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()) ? newpath.Substring(1) : newpath }, new[] { type }); } } private void ContextMenu_OpenFile_Click(object sender, EventArgs e) { string filePath = (_treeView.SelectedNode.Tag as IProjectItem).OriginalPath; string absolutePath = _controller.GetFullPath(filePath); if (File.Exists(absolutePath)) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = absolutePath; startInfo.UseShellExecute = true; Process.Start(startInfo); } } private void ContextMenu_OpenFileLocation_Click(object sender, EventArgs e) { var filePath = (_treeView.SelectedNode.Tag as IProjectItem).OriginalPath; filePath = _controller.GetFullPath(filePath); if (File.Exists(filePath) || Directory.Exists(filePath)) { Process.Start("explorer.exe", "/select, " + filePath); } } // http://stackoverflow.com/a/3955553/168235 #region Custom Word-Wrapping (Output Window) const uint EM_SETWORDBREAKPROC = 0x00D0; [DllImport("user32.dll")] extern static IntPtr SendMessage(IntPtr hwnd, uint message, IntPtr wParam, IntPtr lParam); delegate int EditWordBreakProc(IntPtr text, int pos_in_text, int bCharSet, int action); event EditWordBreakProc WordWrapCallbackEvent; private int WordWrapCallback(IntPtr text, int pos_in_text, int bCharSet, int action) { return 0; } #endregion private void MainView_Shown(object sender, EventArgs e) { WordWrapCallbackEvent = new EditWordBreakProc(WordWrapCallback); IntPtr ptr_func = Marshal.GetFunctionPointerForDelegate(WordWrapCallbackEvent); SendMessage(_outputWindow.Handle, EM_SETWORDBREAKPROC, IntPtr.Zero, ptr_func); // load settings if (PipelineSettingsMgr.Settings.VSeparator != 0) { this.Width = PipelineSettingsMgr.Settings.Size.X; this.Height = PipelineSettingsMgr.Settings.Size.Y; _splitEditorOutput.SplitterDistance = PipelineSettingsMgr.Settings.VSeparator; _splitTreeProps.SplitterDistance = PipelineSettingsMgr.Settings.HSeparator; _filterOutputMenuItem.Checked = _toolFilterOutput.Checked = PipelineSettingsMgr.Settings.FilterOutput; if (PipelineSettingsMgr.Settings.Maximized) this.WindowState = FormWindowState.Maximized; } else { PipelineSettingsMgr.Settings.Size.X = this.Width; PipelineSettingsMgr.Settings.Size.Y = this.Height; PipelineSettingsMgr.Settings.VSeparator = _splitEditorOutput.SplitterDistance; PipelineSettingsMgr.Settings.HSeparator = _splitTreeProps.SplitterDistance; } PipelineSettingsMgr.Current.IsInit = true; _outputTabs.SelectedIndex = _filterOutputMenuItem.Checked ? 1 : 0; } public void AddTreeFolder(string afolder) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); _treeSort = true; var path = afolder; var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); var root = _treeView.Nodes[0]; var parent = root.Nodes; foreach (var folder in folders) { var found = parent.Find(folder, false); if (found.Length == 0) { var folderNode = parent.Add(folder, folder, -1); folderNode.ImageIndex = ContentIcons.FolderClosedIcon; folderNode.SelectedImageIndex = ContentIcons.FolderClosedIcon; var idx = path.IndexOf(folder); var curPath = path.Substring(0, idx + folder.Length); folderNode.Tag = new FolderItem(curPath); parent = folderNode.Nodes; } else parent = found[0].Nodes; } root.Expand(); } public void RemoveTreeFolder(string folder) { Debug.Assert(_treeUpdating, "Must call BeginTreeUpdate() first!"); _treeSort = true; var path = folder; var folders = path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); var root = _treeView.Nodes[0]; var parent = root.Nodes; for (int i = 0; i < folders.Length;i++) { var found = parent.Find(folders[i], false); if (found.Length == 0) return; else if (i != folders.Length - 1) parent = found[0].Nodes; else parent.Remove(found[0]); } } public bool ChooseContentFolder(string initialDirectory, out string folder) { var dialog = new FolderBrowserDialog(); dialog.SelectedPath = initialDirectory; if (dialog.ShowDialog() == DialogResult.OK) { folder = dialog.SelectedPath; return true; } folder = ""; return false; } #region drag & drop private void MainView_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; string filename = GetDropFile(e.Data, ".mgcb"); if (filename != null) e.Effect = DragDropEffects.Copy; } private void MainView_DragDrop(object sender, DragEventArgs e) { string filename = GetDropFile(e.Data, ".mgcb"); if (filename != null) _controller.OpenProject(filename); } private string GetDropFile(IDataObject dataObject, string extension) { if (dataObject.GetDataPresent(DataFormats.FileDrop)) { string[] files = (string[])dataObject.GetData(DataFormats.FileDrop); foreach (var filename in files) { if (Path.GetExtension(filename).Equals(extension, StringComparison.OrdinalIgnoreCase)) return filename; } } return null; } private void _treeView_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; IProjectItem targetItem = GetDropTargetItem(sender, e); if (GetDropAssets(e.Data, targetItem) != null) e.Effect = DragDropEffects.Copy; } private void _treeView_DragDrop(object sender, DragEventArgs e) { IProjectItem targetItem = GetDropTargetItem(sender, e); var droppedAssets = GetDropAssets(e.Data, targetItem); if (droppedAssets != null) { // seperate assets List IncludeAssets = new List(); List CopyOrLinkAssets = new List(); string initialDirectory = ((PipelineController)_controller).GetFullPath(""); foreach (var filename in droppedAssets) { if (filename.StartsWith(initialDirectory)) IncludeAssets.Add(filename); else CopyOrLinkAssets.Add(filename); } //include assets that are under the project base directory List files = new List(); List folders = new List(); foreach (var filename in IncludeAssets) { if (File.GetAttributes(filename).HasFlag(FileAttributes.Directory)) folders.Add(filename); else files.Add(filename); } _controller.Include(files, folders); //TODO: copy or link assets that are not under the project base directory // } } private static IProjectItem GetDropTargetItem(object sender, DragEventArgs e) { var treeView = sender as TreeView; var targetPoint = treeView.PointToClient(new Point(e.X, e.Y)); var targetNode = treeView.GetNodeAt(targetPoint); IProjectItem targetItem = (IProjectItem)((targetNode == null) ? null : targetNode.Tag); return targetItem; } // return a list of files that are allowed to drop on target item private List GetDropAssets(IDataObject dataObject, IProjectItem targetItem) { if (!dataObject.GetDataPresent(DataFormats.FileDrop)) return null; if (targetItem is ContentItem) return null; //drop to ContentItem is not allowed string initialDirectory = ((PipelineController)_controller).GetFullPath(""); string[] files = (string[])dataObject.GetData(DataFormats.FileDrop); if (targetItem is FolderItem) { return null; //drop to FolderItem is not yet supported } if ((targetItem is PipelineProjectProxy) || targetItem == null) { List result = new List(); foreach (var filename in files) { // filter items if (Path.GetExtension(filename).Equals(".MGCB", StringComparison.OrdinalIgnoreCase)) continue; //drop of .MGCB files is not allowed if (!filename.StartsWith(initialDirectory)) continue; //Copy/Link items is not yet supported result.Add(filename); } if (result.Count > 0) return result; } return null; } #endregion private void _toolFilterOutput_Click(object sender, EventArgs e) { _filterOutputMenuItem.Checked = !_filterOutputMenuItem.Checked; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/MainView.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False False False 17, 17 132, 17 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC0SURBVDhPrY/BDQIhEEWpwyqsgb680oZFUICJVdiCp9Us 7FXzYT4OE9R14yQvMDD/set0LcvyIHK0rnTwfNi1/RumlNJeorVwwaBdvfcdIYRegiFwvZxKiKDn3W26 F6ykCXRw1Kc5dQKA8yYgNmjRIvRFgELDkF31q/h0SIYCYl8f/X+MsdxJvApotUEr0HMSfwkwqPcjKMg5 HyW+TSDRWn8T8HKTQPOzQBcFn/gqWEOddu4JH/WN/fh+e1wAAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADoSURBVDhPzZAxDoJAEEX3Bt7EeAauYKuX8BAUNngAKzsL Y0GlhRbUxtLEythYaALCsu3oXxgyLFGwc5KXsLvz386iZBljSBBrrQflUbdCqD9ZkRrOaTTbSZmkKX5v BtxweyQkJWEYkud5Fb7v1yUIL6Mz9cYLG3KZro+Uphkl8bMhYYEN47bT9W6nwDfCmGS7j0hnuiYA6KsE aN4cLo0wnoM9RopsjgXuBMB9O8DokLiCALfzP8ABGnCTREogrwQoLECe560CwP1lvBBw6JOA+XMBH3YR lNGi2Mj8LJDFgm+0CrpQdCv1AoU8iRaUluKHAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVDhPY6AK+Pbt239S8NevX+dDtUIASJAheA4cf3j/ EY6RxUB0zIR9mIaQYgAIwwyBaifdABAm2gBkjKyGtgYQg0cNGJQGkIOh2ikBDAwAR/4LjdUkCHIAAAAA SUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACkSURBVDhP5ZK9DYMwFIQzRwokxCbeCyEQhVtWStiAQQAJ u3V80XsRFpeYhionfYX97s7m56by3g+RsGOQUV7RPGnwUd/3JZNYvss518M8dlVSoGvMxcoFk4IQCsa2 /OwBsXLBgJDC1r9IbxBPRujZFInJGEPBLPsOrLU0DN4F8hj0K2ybC8u8HjgUQHGR/Ac4mYUBLVBhUw0s DP6pIMd1Befx4QXCKlC0hGyA6wAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABfSURBVDhPY4CBb9++/UfGUGHiAUiTRZcJGJNkALKtyAbA MFQZboCsER1TxQBCmKAXnJyccGKQPNQdmIGITQM6xjAAGYMUfHj/ESvGagAMwDSPGkAlAwhh2hlAPP72 HwCNoBTnMYIrPQAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB9SURBVDhPY0AG3759+w/DUCHiALLGQ7VScDYIQ5XgB8ga 0WmoEtwApAiEX97YD9YEwyA+TA6qFDsAKUDWiI2PD2P4H5vGO9uqsGKQHIorsNFPTi///+H9RwyMYQAM E2s7CIPkwQaAALImQhphGMMAbIrw4VEDaGEA6fjbfwAIeZgfrfHBswAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACBSURBVDhPY6AJ+P//P9unT58effv27T8uDJT/C6QnQ7Wg gq9fv2a8f3L5/51tlTjx3Z11YEPAGkAmQU2E2/DoyJT/T8+v+f/h/Ues+O6uRrA6sAEgzSATMWzZUQtW iA2D5OEGgBjomonBowYMKgNwpQN8mGBKJISh6rHnBToCBgYAxYxmm36uVR4AAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACgSURBVDhPtZDBDYAgDEUdyRm4swWDeGIKtmAQL4wCXDHf WNIUFDXa5Kftb/uCTjxyzmuMcT7qopTahRoeZthB3Q0sQimlRQLIg471NjA0xpQQwr7IAfAwGwLoyDnX rYcAa21dlsKsAcCQ8t4XrXU9RA2vt1ufLQf0zfyfcNHNKWCkLgCZw656yt8CnugSgJ57sicP+R/AHTWA N6qA98plA092u5UZZO2MAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACjSURBVDhPtZDJDcMgEEVdkmvgThcUkhNV0AWF+EIfSSTg SvSRB41YjG05Iz0xzPKEvfCIMW7e+3XPkxAigxw19DCDvBsYBCGEVy2gGtjH20BTKZWcc3mQC1BDbyqg JWNMN58KtNZluAa9RoBCjbU2SSnLInLUerPl2XWDvpn/Ew7tDAUzugKcXHZ0p/NZwRUawR2Ggs/7mxnd if8JzlIE94npB0x8kNVSv0TSAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADGSURBVDhPlZBBDoMgEEU9G3sOwCHq2q5t2HOGmrDThVfx Hm03bGm+5SeDEgs/mZgwvDeDXUtCCPFYqfU/BJxzUSkVtdbtAu/9DrOqBbi4rmsGY5MqAS5t25bB2ATn RQEbLMB4L2Fswl5CfpEQLhljsqmQQFYFjuMjTs8pExRh5Ai+X5+9lnnZi4IijKBhrY3DcM9gfrEJ5JcC Svpbf5JgK/64hJwjJfIZKE6/FCBSwk2qpstICf5J9XQZKWmaLkMJKx0X0nVfAYShAr3vEz4AAAAASUVO RK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABBSURBVDhPY6AW+E8mHkQA3UnIzsSH4QCrICkA2QCyDMFl ALo4OoYDnBLEAoo0gwA2zciG4sKDCGBzHjF4wAEDAwCugky0VBDcOQAAAABJRU5ErkJggg== 284, 17 25 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/MultiSelectTreeview.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Content.Pipeline.Editor { public class MultiSelectTreeview : TreeView { [DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, int lParam); #region Selected Node(s) Properties private readonly List _selectedNodes = null; private Color _dragOverNodeForeColor = SystemColors.HighlightText; private Color _dragOverNodeBackColor = SystemColors.Highlight; private TreeNode _previousNode; /// /// The baskground colour of the node being dragged over. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Color DragOverNodeBackColor { get { return this._dragOverNodeBackColor; } set { this._dragOverNodeBackColor = value; } } /// /// The foreground colour of the node being dragged over. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Color DragOverNodeForeColor { get { return this._dragOverNodeForeColor; } set { this._dragOverNodeForeColor = value; } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public IEnumerable SelectedNodes { get { return _selectedNodes; } set { ClearSelectedNodes(); if( value != null ) { foreach( var node in value ) { ToggleNode( node, true ); } } } } [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public IEnumerable SelectedNodesRecursive { get { var nodes = new List(); foreach (var node in _selectedNodes) { if (!nodes.Contains(node)) nodes.Add(node); var children = new List(); TreeViewExtensions.AddTreeNodesRecursive(node.Nodes, children); foreach (var child in children) { if (!nodes.Contains(child)) nodes.Add(child); } } return nodes; } } // Note we use the new keyword to Hide the native treeview's SelectedNode property. private TreeNode _selectedNode; [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new TreeNode SelectedNode { get { return _selectedNode; } set { ClearSelectedNodes(); if( value != null ) { SelectNode( value ); } } } #endregion public MultiSelectTreeview() { _selectedNodes = new List(); base.SelectedNode = null; } #region Overridden Events protected override void OnGotFocus( EventArgs e ) { // Make sure at least one node has a selection // this way we can tab to the ctrl and use the // keyboard to select nodes try { if( _selectedNode == null && this.TopNode != null ) { ToggleNode( this.TopNode, true ); } base.OnGotFocus( e ); } catch( Exception ex ) { HandleException( ex ); } } protected override void OnMouseDown( MouseEventArgs e ) { // If the user clicks on a node that was not // previously selected, select it now. try { base.SelectedNode = null; TreeNode node = this.GetNodeAt( e.Location ); if( node != null ) { int leftBound = node.Bounds.X; // - 20; // Allow user to click on image int rightBound = node.Bounds.Right + 10; // Give a little extra room if( e.Location.X > leftBound && e.Location.X < rightBound ) { if( ModifierKeys == Keys.None && ( _selectedNodes.Contains( node ) ) ) { // Potential Drag Operation // Let Mouse Up do select } else { SelectNode( node ); } } } base.OnMouseDown( e ); } catch( Exception ex ) { HandleException( ex ); } } protected override void OnMouseUp( MouseEventArgs e ) { // If the clicked on a node that WAS previously // selected then, reselect it now. This will clear // any other selected nodes. e.g. A B C D are selected // the user clicks on B, now A C & D are no longer selected. // JCF: Only do that for left clicks. // Right clicks brings up a context menu which will apply even a multiselection. try { if (e.Button.HasFlag(MouseButtons.Left)) { // Check to see if a node was clicked on TreeNode node = this.GetNodeAt(e.Location); if (node != null) { if (ModifierKeys == Keys.None && _selectedNodes.Contains(node)) { int leftBound = node.Bounds.X; // -20; // Allow user to click on image int rightBound = node.Bounds.Right + 10; // Give a little extra room if (e.Location.X > leftBound && e.Location.X < rightBound) { SelectNode(node); } } } base.OnMouseUp(e); } } catch( Exception ex ) { HandleException( ex ); } } protected override void OnDragOver(DragEventArgs drgevent) { // Get the node from the mouse position, colour it Point pt = this.PointToClient(new Point(drgevent.X, drgevent.Y)); TreeNode treeNode = this.GetNodeAt(pt); // Change node color if (this._previousNode != null && this._previousNode != treeNode) { this._previousNode.BackColor = SystemColors.HighlightText; this._previousNode.ForeColor = SystemColors.ControlText; } if (treeNode != null && treeNode.BackColor != this._dragOverNodeBackColor) { treeNode.BackColor = this._dragOverNodeBackColor; treeNode.ForeColor = this._dragOverNodeForeColor; } // Scrolling down/up if (pt.Y + 10 > this.ClientSize.Height) SendMessage(this.Handle, 277, (IntPtr)1, 0); else if (pt.Y < this.Top + 10) SendMessage(this.Handle, 277, (IntPtr)0, 0); // Remember the target node, so we can set it back this._previousNode = treeNode; base.OnDragOver(drgevent); } protected override void OnDragDrop(DragEventArgs drgevent) { // Restore node color if (this._previousNode != null) { this._previousNode.BackColor = SystemColors.HighlightText; this._previousNode.ForeColor = SystemColors.ControlText; this._previousNode = null; } base.OnDragDrop(drgevent); } protected override void OnItemDrag( ItemDragEventArgs e ) { // If the user drags a node and the node being dragged is NOT // selected, then clear the active selection, select the // node being dragged and drag it. Otherwise if the node being // dragged is selected, drag the entire selection. try { TreeNode node = e.Item as TreeNode; if( node != null ) { if( !_selectedNodes.Contains( node ) ) { SelectSingleNode( node ); ToggleNode( node, true ); } } base.OnItemDrag( e ); } catch( Exception ex ) { HandleException( ex ); } } protected override void OnBeforeSelect( TreeViewCancelEventArgs e ) { // Never allow base.SelectedNode to be set! try { base.SelectedNode = null; e.Cancel = true; base.OnBeforeSelect( e ); } catch( Exception ex ) { HandleException( ex ); } } protected override void OnAfterSelect( TreeViewEventArgs e ) { // Never allow base.SelectedNode to be set! try { base.OnAfterSelect( e ); base.SelectedNode = null; } catch( Exception ex ) { HandleException( ex ); } } protected override void OnKeyDown( KeyEventArgs e ) { // Handle all possible key strokes for the control. // including navigation, selection, etc. base.OnKeyDown( e ); if( e.KeyCode == Keys.ShiftKey ) return; //this.BeginUpdate(); bool bShift = ( ModifierKeys == Keys.Shift ); try { // Nothing is selected in the tree, this isn't a good state // select the top node if( _selectedNode == null && this.TopNode != null ) { ToggleNode( this.TopNode, true ); } // Nothing is still selected in the tree, this isn't a good state, leave. if( _selectedNode == null ) return; if( e.KeyCode == Keys.Left ) { if( _selectedNode.IsExpanded && _selectedNode.Nodes.Count > 0 ) { // Collapse an expanded node that has children _selectedNode.Collapse(); } else if( _selectedNode.Parent != null ) { // Node is already collapsed, try to select its parent. SelectSingleNode( _selectedNode.Parent ); } } else if( e.KeyCode == Keys.Right ) { if( !_selectedNode.IsExpanded ) { // Expand a collpased node's children _selectedNode.Expand(); } else { // Node was already expanded, select the first child SelectSingleNode( _selectedNode.FirstNode ); } } else if( e.KeyCode == Keys.Up ) { // Select the previous node if( _selectedNode.PrevVisibleNode != null ) { SelectNode( _selectedNode.PrevVisibleNode ); } } else if( e.KeyCode == Keys.Down ) { // Select the next node if( _selectedNode.NextVisibleNode != null ) { SelectNode( _selectedNode.NextVisibleNode ); } } else if( e.KeyCode == Keys.Home ) { if( bShift ) { if( _selectedNode.Parent == null ) { // Select all of the root nodes up to this point if( this.Nodes.Count > 0 ) { SelectNode( this.Nodes[0] ); } } else { // Select all of the nodes up to this point under this nodes parent SelectNode( _selectedNode.Parent.FirstNode ); } } else { // Select this first node in the tree if( this.Nodes.Count > 0 ) { SelectSingleNode( this.Nodes[0] ); } } } else if( e.KeyCode == Keys.End ) { if( bShift ) { if( _selectedNode.Parent == null ) { // Select the last ROOT node in the tree if( this.Nodes.Count > 0 ) { SelectNode( this.Nodes[this.Nodes.Count - 1] ); } } else { // Select the last node in this branch SelectNode( _selectedNode.Parent.LastNode ); } } else { if( this.Nodes.Count > 0 ) { // Select the last node visible node in the tree. // Don't expand branches incase the tree is virtual TreeNode ndLast = this.Nodes[0].LastNode; while( ndLast.IsExpanded && ( ndLast.LastNode != null ) ) { ndLast = ndLast.LastNode; } SelectSingleNode( ndLast ); } } } else if( e.KeyCode == Keys.PageUp ) { // Select the highest node in the display int nCount = this.VisibleCount; TreeNode ndCurrent = _selectedNode; while( ( nCount ) > 0 && ( ndCurrent.PrevVisibleNode != null ) ) { ndCurrent = ndCurrent.PrevVisibleNode; nCount--; } SelectSingleNode( ndCurrent ); } else if( e.KeyCode == Keys.PageDown ) { // Select the lowest node in the display int nCount = this.VisibleCount; TreeNode ndCurrent = _selectedNode; while( ( nCount ) > 0 && ( ndCurrent.NextVisibleNode != null ) ) { ndCurrent = ndCurrent.NextVisibleNode; nCount--; } SelectSingleNode( ndCurrent ); } else { // Assume this is a search character a-z, A-Z, 0-9, etc. // Select the first node after the current node that // starts with this character string sSearch = ( (char) e.KeyValue ).ToString(); TreeNode ndCurrent = _selectedNode; while( ( ndCurrent.NextVisibleNode != null ) ) { ndCurrent = ndCurrent.NextVisibleNode; if( ndCurrent.Text.StartsWith( sSearch ) ) { SelectSingleNode( ndCurrent ); break; } } } } catch( Exception ex ) { HandleException( ex ); } finally { this.EndUpdate(); } } #endregion #region Helper Methods private void SelectNode( TreeNode node ) { try { this.BeginUpdate(); if( _selectedNode == null || ModifierKeys == Keys.Control ) { // Ctrl+Click selects an unselected node, or unselects a selected node. bool bIsSelected = _selectedNodes.Contains( node ); ToggleNode( node, !bIsSelected ); } else if( ModifierKeys == Keys.Shift ) { // Shift+Click selects nodes between the selected node and here. TreeNode ndStart = _selectedNode; TreeNode ndEnd = node; if( ndStart.Parent == ndEnd.Parent ) { // Selected node and clicked node have same parent, easy case. if( ndStart.Index < ndEnd.Index ) { // If the selected node is beneath the clicked node walk down // selecting each Visible node until we reach the end. while( ndStart != ndEnd ) { ndStart = ndStart.NextVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } else if( ndStart.Index == ndEnd.Index ) { // Clicked same node, do nothing } else { // If the selected node is above the clicked node walk up // selecting each Visible node until we reach the end. while( ndStart != ndEnd ) { ndStart = ndStart.PrevVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } } else { // Selected node and clicked node have same parent, hard case. // We need to find a common parent to determine if we need // to walk down selecting, or walk up selecting. TreeNode ndStartP = ndStart; TreeNode ndEndP = ndEnd; int startDepth = Math.Min( ndStartP.Level, ndEndP.Level ); // Bring lower node up to common depth while( ndStartP.Level > startDepth ) { ndStartP = ndStartP.Parent; } // Bring lower node up to common depth while( ndEndP.Level > startDepth ) { ndEndP = ndEndP.Parent; } // Walk up the tree until we find the common parent while( ndStartP.Parent != ndEndP.Parent ) { ndStartP = ndStartP.Parent; ndEndP = ndEndP.Parent; } // Select the node if( ndStartP.Index < ndEndP.Index ) { // If the selected node is beneath the clicked node walk down // selecting each Visible node until we reach the end. while( ndStart != ndEnd ) { ndStart = ndStart.NextVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } else if( ndStartP.Index == ndEndP.Index ) { if( ndStart.Level < ndEnd.Level ) { while( ndStart != ndEnd ) { ndStart = ndStart.NextVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } else { while( ndStart != ndEnd ) { ndStart = ndStart.PrevVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } } else { // If the selected node is above the clicked node walk up // selecting each Visible node until we reach the end. while( ndStart != ndEnd ) { ndStart = ndStart.PrevVisibleNode; if( ndStart == null ) break; ToggleNode( ndStart, true ); } } } } else { // Just clicked a node, select it SelectSingleNode( node ); } OnAfterSelect( new TreeViewEventArgs( _selectedNode ) ); } finally { this.EndUpdate(); } } private void ClearSelectedNodes() { try { foreach( TreeNode node in _selectedNodes ) { node.BackColor = this.BackColor; node.ForeColor = this.ForeColor; } } finally { _selectedNodes.Clear(); _selectedNode = null; } } private void SelectSingleNode( TreeNode node ) { if( node == null ) { return; } ClearSelectedNodes(); ToggleNode( node, true ); node.EnsureVisible(); OnAfterSelect( new TreeViewEventArgs( _selectedNode ) ); } private void ToggleNode( TreeNode node, bool bSelectNode ) { if( bSelectNode ) { _selectedNode = node; if( !_selectedNodes.Contains( node ) ) { _selectedNodes.Add( node ); } node.BackColor = SystemColors.Highlight; node.ForeColor = SystemColors.HighlightText; } else { _selectedNodes.Remove( node ); node.BackColor = this.BackColor; node.ForeColor = this.ForeColor; } } private void HandleException( Exception ex ) { // Perform some error handling here. // We don't want to bubble errors to the CLR. MessageBox.Show( ex.Message ); } #endregion } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.Designer.cs ================================================ namespace Content.Pipeline.Editor { partial class NewContentDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this._buttonPanel = new System.Windows.Forms.Panel(); this._cancelBtn = new System.Windows.Forms.Button(); this._okBtn = new System.Windows.Forms.Button(); this._namePanel = new System.Windows.Forms.Panel(); this._namePanelTable = new System.Windows.Forms.TableLayoutPanel(); this._name = new System.Windows.Forms.TextBox(); this._namePanelLabel = new System.Windows.Forms.Label(); this._listView = new System.Windows.Forms.ListView(); this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.tableLayoutPanel1.SuspendLayout(); this._buttonPanel.SuspendLayout(); this._namePanel.SuspendLayout(); this._namePanelTable.SuspendLayout(); this.SuspendLayout(); // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 1; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.Controls.Add(this._buttonPanel, 0, 2); this.tableLayoutPanel1.Controls.Add(this._namePanel, 0, 1); this.tableLayoutPanel1.Controls.Add(this._listView, 0, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.FixedSize; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(283, 323); this.tableLayoutPanel1.TabIndex = 2; // // _buttonPanel // this._buttonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._buttonPanel.BackColor = System.Drawing.SystemColors.Control; this._buttonPanel.Controls.Add(this._cancelBtn); this._buttonPanel.Controls.Add(this._okBtn); this._buttonPanel.Location = new System.Drawing.Point(0, 293); this._buttonPanel.Margin = new System.Windows.Forms.Padding(0); this._buttonPanel.Name = "_buttonPanel"; this._buttonPanel.Size = new System.Drawing.Size(283, 30); this._buttonPanel.TabIndex = 1; // // _cancelBtn // this._cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; this._cancelBtn.Location = new System.Drawing.Point(199, 3); this._cancelBtn.Name = "_cancelBtn"; this._cancelBtn.Size = new System.Drawing.Size(75, 23); this._cancelBtn.TabIndex = 1; this._cancelBtn.Text = "Cancel"; this._cancelBtn.UseVisualStyleBackColor = true; // // _okBtn // this._okBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._okBtn.DialogResult = System.Windows.Forms.DialogResult.OK; this._okBtn.Enabled = false; this._okBtn.Location = new System.Drawing.Point(118, 3); this._okBtn.Name = "_okBtn"; this._okBtn.Size = new System.Drawing.Size(75, 23); this._okBtn.TabIndex = 0; this._okBtn.Text = "Ok"; this._okBtn.UseVisualStyleBackColor = true; // // _namePanel // this._namePanel.AutoSize = true; this._namePanel.Controls.Add(this._namePanelTable); this._namePanel.Dock = System.Windows.Forms.DockStyle.Fill; this._namePanel.Location = new System.Drawing.Point(3, 264); this._namePanel.Name = "_namePanel"; this._namePanel.Size = new System.Drawing.Size(277, 26); this._namePanel.TabIndex = 2; // // _namePanelTable // this._namePanelTable.AutoSize = true; this._namePanelTable.ColumnCount = 2; this._namePanelTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this._namePanelTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this._namePanelTable.Controls.Add(this._name, 1, 0); this._namePanelTable.Controls.Add(this._namePanelLabel, 0, 0); this._namePanelTable.Dock = System.Windows.Forms.DockStyle.Fill; this._namePanelTable.Location = new System.Drawing.Point(0, 0); this._namePanelTable.Name = "_namePanelTable"; this._namePanelTable.RowCount = 1; this._namePanelTable.RowStyles.Add(new System.Windows.Forms.RowStyle()); this._namePanelTable.Size = new System.Drawing.Size(277, 26); this._namePanelTable.TabIndex = 2; // // _name // this._name.Dock = System.Windows.Forms.DockStyle.Fill; this._name.Location = new System.Drawing.Point(47, 3); this._name.Name = "_name"; this._name.Size = new System.Drawing.Size(227, 20); this._name.TabIndex = 1; // // _namePanelLabel // this._namePanelLabel.AutoSize = true; this._namePanelLabel.Dock = System.Windows.Forms.DockStyle.Fill; this._namePanelLabel.Location = new System.Drawing.Point(3, 0); this._namePanelLabel.Name = "_namePanelLabel"; this._namePanelLabel.Size = new System.Drawing.Size(38, 26); this._namePanelLabel.TabIndex = 2; this._namePanelLabel.Text = "Name:"; this._namePanelLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // _listView // this._listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.columnHeader1}); this._listView.Dock = System.Windows.Forms.DockStyle.Fill; this._listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this._listView.HideSelection = false; this._listView.LabelWrap = false; this._listView.Location = new System.Drawing.Point(3, 3); this._listView.MultiSelect = false; this._listView.Name = "_listView"; this._listView.Scrollable = false; this._listView.Size = new System.Drawing.Size(277, 255); this._listView.TabIndex = 3; this._listView.UseCompatibleStateImageBehavior = false; this._listView.View = System.Windows.Forms.View.Details; this._listView.SelectedIndexChanged += new System.EventHandler(this.OnSelectedValueChanged); this._listView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.OnDoubleClick); // // columnHeader1 // this.columnHeader1.Width = 417; // // NewContentDialog // this.AcceptButton = this._okBtn; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.CancelButton = this._cancelBtn; this.ClientSize = new System.Drawing.Size(283, 323); this.Controls.Add(this.tableLayoutPanel1); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "NewContentDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "New Content"; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this._buttonPanel.ResumeLayout(false); this._namePanel.ResumeLayout(false); this._namePanel.PerformLayout(); this._namePanelTable.ResumeLayout(false); this._namePanelTable.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.Panel _namePanel; private System.Windows.Forms.TextBox _name; private System.Windows.Forms.TableLayoutPanel _namePanelTable; private System.Windows.Forms.Label _namePanelLabel; private System.Windows.Forms.ListView _listView; private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.Panel _buttonPanel; private System.Windows.Forms.Button _cancelBtn; private System.Windows.Forms.Button _okBtn; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; namespace Content.Pipeline.Editor { public partial class NewContentDialog : Form { public ContentItemTemplate Selected { get { if (_listView.SelectedItems == null || _listView.SelectedItems.Count == 0) return null; return _listView.SelectedItems[0].Tag as ContentItemTemplate; } } public string NameGiven { get { if (string.IsNullOrEmpty(_name.Text)) { var item = Selected; if (item == null) return "NewContentItem"; return string.Concat("New", Path.GetFileNameWithoutExtension(item.TemplateFile)); } return _name.Text; } } public NewContentDialog(IEnumerable items, ImageList icons) { InitializeComponent(); _listView.SmallImageList = icons; _listView.Items.Clear(); foreach (var i in items) { var obj = new ListViewItem(i.Label, i.Icon); obj.Tag = i; _listView.Items.Add(obj); } } private void OnSelectedValueChanged(object sender, EventArgs e) { _okBtn.Enabled = _listView.SelectedItems.Count > 0; } private void OnDoubleClick(object sender, MouseEventArgs e) { if (Selected != null) { _okBtn.PerformClick(); } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/NewContentDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.Designer.cs ================================================ using System.Windows.Forms; namespace Content.Pipeline.Editor.Forms { partial class PackageDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PackageDialog)); tbName = new TextBox(); okButton = new Button(); cancelButton = new Button(); label1 = new Label(); label2 = new Label(); tbVersion = new TextBox(); llSearchNuget = new LinkLabel(); SuspendLayout(); // // tbName // tbName.Location = new System.Drawing.Point(12, 32); tbName.Name = "tbName"; tbName.Size = new System.Drawing.Size(359, 27); tbName.TabIndex = 0; // // okButton // okButton.DialogResult = DialogResult.OK; okButton.Location = new System.Drawing.Point(296, 88); okButton.Name = "okButton"; okButton.Size = new System.Drawing.Size(100, 35); okButton.TabIndex = 2; okButton.Text = "&OK"; // // cancelButton // cancelButton.DialogResult = DialogResult.Cancel; cancelButton.Location = new System.Drawing.Point(402, 88); cancelButton.Name = "cancelButton"; cancelButton.Size = new System.Drawing.Size(100, 35); cancelButton.TabIndex = 3; cancelButton.Text = "&Cancel"; // // label1 // label1.AutoSize = true; label1.Location = new System.Drawing.Point(12, 9); label1.Name = "label1"; label1.Size = new System.Drawing.Size(63, 20); label1.TabIndex = 3; label1.Text = "Package"; // // label2 // label2.AutoSize = true; label2.Location = new System.Drawing.Point(377, 9); label2.Name = "label2"; label2.Size = new System.Drawing.Size(57, 20); label2.TabIndex = 4; label2.Text = "Version"; // // tbVersion // tbVersion.Location = new System.Drawing.Point(377, 32); tbVersion.Name = "tbVersion"; tbVersion.Size = new System.Drawing.Size(125, 27); tbVersion.TabIndex = 1; // // llSearchNuget // llSearchNuget.AutoSize = true; llSearchNuget.Location = new System.Drawing.Point(12, 62); llSearchNuget.Name = "llSearchNuget"; llSearchNuget.Size = new System.Drawing.Size(140, 20); llSearchNuget.TabIndex = 5; llSearchNuget.TabStop = true; llSearchNuget.Text = "search on nuget.org"; llSearchNuget.LinkClicked += llSearchNuget_LinkClicked; // // PackageDialog // AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new System.Drawing.Size(514, 135); Controls.Add(llSearchNuget); Controls.Add(tbVersion); Controls.Add(label2); Controls.Add(label1); Controls.Add(tbName); Controls.Add(okButton); Controls.Add(cancelButton); FormBorderStyle = FormBorderStyle.FixedToolWindow; Name = "PackageDialog"; Text = "Package"; ResumeLayout(false); PerformLayout(); } #endregion private Button okButton; private Button cancelButton; private Label label1; private Label label2; public TextBox tbName; public TextBox tbVersion; private LinkLabel llSearchNuget; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Content.Pipeline.Editor.Forms { public partial class PackageDialog : Form { public PackageDialog() { InitializeComponent(); } private void llSearchNuget_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { string nugetUrl = "https://www.nuget.org/packages?q="; string packageName = this.tbName.Text; string tags = "Tags:\"kni\",\"pipeline\""; string query = string.Format("{0} {1}", packageName, tags); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = nugetUrl + Uri.EscapeDataString(query); startInfo.UseShellExecute = true; Process.Start(startInfo); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.Designer.cs ================================================ namespace Content.Pipeline.Editor { partial class PackageReferenceDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.listView1 = new System.Windows.Forms.ListView(); this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.buttonOk = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonAdd = new System.Windows.Forms.Button(); this.buttonRemove = new System.Windows.Forms.Button(); this.SuspendLayout(); // // listView1 // this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { columnHeader1, columnHeader2}); this.listView1.HideSelection = false; this.listView1.Location = new System.Drawing.Point(12, 12); this.listView1.Name = "listView1"; this.listView1.Size = new System.Drawing.Size(473, 300); this.listView1.TabIndex = 0; this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.View = System.Windows.Forms.View.Details; // // columnHeader1 // this.columnHeader1.Text = "Name"; this.columnHeader1.Width = 460; // // columnHeader2 // this.columnHeader2.Text = "Version"; // // buttonOk // this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; this.buttonOk.Location = new System.Drawing.Point(498, 258); this.buttonOk.Name = "buttonOk"; this.buttonOk.Size = new System.Drawing.Size(75, 23); this.buttonOk.TabIndex = 1; this.buttonOk.Text = "Ok"; this.buttonOk.UseVisualStyleBackColor = true; // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonCancel.Location = new System.Drawing.Point(498, 287); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 2; this.buttonCancel.Text = "Cancel"; this.buttonCancel.UseVisualStyleBackColor = true; // // buttonAdd // this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.buttonAdd.Location = new System.Drawing.Point(498, 12); this.buttonAdd.Name = "buttonAdd"; this.buttonAdd.Size = new System.Drawing.Size(75, 23); this.buttonAdd.TabIndex = 3; this.buttonAdd.Text = "Add"; this.buttonAdd.UseVisualStyleBackColor = true; this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); // // buttonRemove // this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.buttonRemove.Location = new System.Drawing.Point(498, 41); this.buttonRemove.Name = "buttonRemove"; this.buttonRemove.Size = new System.Drawing.Size(75, 23); this.buttonRemove.TabIndex = 4; this.buttonRemove.Text = "Remove"; this.buttonRemove.UseVisualStyleBackColor = true; this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); // // PackageReferenceDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(584, 321); this.Controls.Add(this.buttonRemove); this.Controls.Add(this.buttonAdd); this.Controls.Add(this.buttonOk); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.listView1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; this.Name = "PackageReferenceDialog"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "PackageReference Editor"; this.Load += new System.EventHandler(this.ReferenceDialog_Load); this.ResumeLayout(false); } #endregion private System.Windows.Forms.ListView listView1; private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonAdd; private System.Windows.Forms.Button buttonRemove; private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader2; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.IO; using System.Windows.Forms.Design; using System.Drawing.Design; using System.Text.RegularExpressions; namespace Content.Pipeline.Editor { public partial class PackageReferenceDialog : Form { public List Lines; public PackageReferenceDialog() { InitializeComponent(); } private void ReferenceDialog_Load(object sender, EventArgs e) { foreach (Package item in this.Lines) { string version = (item.Version != String.Empty) ? item.Version : "*"; string[] itemValues = new string[] { item.Name, version }; listView1.Items.Add(new ListViewItem(itemValues)); } } private void buttonAdd_Click(object sender, EventArgs e) { Forms.PackageDialog packageDialog = new Forms.PackageDialog(); DialogResult res = packageDialog.ShowDialog(this); if (res == DialogResult.OK) { Package package = default; package.Name = packageDialog.tbName.Text.Trim(); package.Version = packageDialog.tbVersion.Text.Trim(); if (String.IsNullOrWhiteSpace(package.Name)) return; Match match = Regex.Match(package.Name, @"(dotnet add package )?(?[^\s]+)(\s+--version)?(\s+(?[^\s]+))"); if (match.Success) { package.Name = match.Groups["Name"].Value; if (package.Version == String.Empty && match.Groups["VersionNumber"].Success) package.Version = match.Groups["VersionNumber"].Value; } foreach (Package line in this.Lines) { if (line.Name == package.Name) return; } this.Lines.Add(package); string version = (package.Version != String.Empty) ? package.Version : "*"; string[] itemValues = new string[] { package.Name, version }; listView1.Items.Add(new ListViewItem(itemValues)); } } private void buttonRemove_Click(object sender, EventArgs e) { var indices = listView1.SelectedIndices; for (int i = indices.Count - 1; i >= 0; i--) { int index = int.Parse(indices[i].ToString()); listView1.Items.RemoveAt(indices[i]); this.Lines.RemoveAt(index); } } } /// /// Custom editor for a the PackageReferences property of a PipelineProject. /// public class PackageReferenceListEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) { IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; List lines = (List)value; if (svc != null && lines != null) { using (var form = new PackageReferenceDialog()) { form.Lines = lines; if (svc.ShowDialog(form) == DialogResult.OK) { lines = form.Lines; MainView._controller.OnReferencesModified(); } } } return lines; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PackageReferenceDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/PipelineProjectProxy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Design; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Content.Pipeline.Editor { /// /// Wraps a PipelineProject object, defining its appearance within the windows specific IView (MainView). /// internal class PipelineProjectProxy : IProjectItem { private readonly PipelineProject _project; [Category("Settings")] [DisplayName("Output Folder")] [Description("The folder where the final build content is placed.")] [Editor(typeof(FolderSelectEditor), typeof(UITypeEditor))] public string OutputDir { get { return _project.OutputDir; } set { _project.OutputDir = Util.GetRelativePath(value, _project.Location); } } [Category("Settings")] [DisplayName("Intermediate Folder")] [Description("The folder where intermediate files are placed when building content.")] [Editor(typeof(FolderSelectEditor), typeof(UITypeEditor))] public string IntermediateDir { get { return _project.IntermediateDir; } set { _project.IntermediateDir = Util.GetRelativePath(value, _project.Location); } } [Category("Settings")] [Editor(typeof(AssemblyReferenceListEditor), typeof(UITypeEditor))] public List References { get { return _project.References; } set { _project.References = value; } } [Category("Settings")] [Editor(typeof(PackageReferenceListEditor), typeof(UITypeEditor))] public List PackageReferences { get { return _project.PackageReferences; } set { _project.PackageReferences = value; } } [Category("Settings")] [Description("The platform to target when building content.")] [TypeConverter(typeof(SortedEnumTypeConverter))] public TargetPlatform Platform { get { return _project.Platform; } set { _project.Platform = value; } } [Category("Settings")] [Description("The graphics profile to target when building content.")] public GraphicsProfile Profile { get { return _project.Profile; } set { _project.Profile = value; } } [Category("Settings")] [Description("The configuration to target when building content.")] public string Config { get { return _project.Config; } set { _project.Config = value; } } [Category("Settings")] [DisplayName("Compress")] [Description("Content files can be compressed for smaller file sizes.")] public bool Compress { get { return _project.Compress; } set { _project.Compress = value; } } [Category("Settings")] [DisplayName("Compression")] [Description("The compression method.")] public CompressionMethod Compression { get { return _project.Compression; } set { _project.Compression = value; } } [Category("Statistics")] [DisplayName("Total Items")] [Description("The total amount of content items in the project.")] public int TotalItems { get { return _project.ContentItems.Count; } } #region IPipelineItem [Browsable(false)] public string OriginalPath { get { return _project.OriginalPath; } } [Category("Common")] [Description("The name of this project.")] public string Name { get { return _project.Name; } } [Category("Common")] [Description("The folder where this project file is located.")] public string Location { get { return _project.Location; } } [Browsable(false)] public string Icon { get { return _project.Icon; } set { _project.Icon = value; } } [Browsable(false)] public bool Exists { get { return _project.Exists; } set { _project.Exists = value; } } #endregion public PipelineProjectProxy(PipelineProject project) { _project = project; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.Designer.cs ================================================ namespace Content.Pipeline.Editor { partial class ReferenceDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.listView1 = new System.Windows.Forms.ListView(); this.buttonOk = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonAdd = new System.Windows.Forms.Button(); this.buttonRemove = new System.Windows.Forms.Button(); this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.SuspendLayout(); // // listView1 // this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.columnHeader1, this.columnHeader2}); this.listView1.Location = new System.Drawing.Point(12, 12); this.listView1.Name = "listView1"; this.listView1.Size = new System.Drawing.Size(473, 300); this.listView1.TabIndex = 0; this.listView1.UseCompatibleStateImageBehavior = false; this.listView1.View = System.Windows.Forms.View.Details; // // buttonOk // this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; this.buttonOk.Location = new System.Drawing.Point(498, 258); this.buttonOk.Name = "buttonOk"; this.buttonOk.Size = new System.Drawing.Size(75, 23); this.buttonOk.TabIndex = 1; this.buttonOk.Text = "Ok"; this.buttonOk.UseVisualStyleBackColor = true; // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonCancel.Location = new System.Drawing.Point(498, 287); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 2; this.buttonCancel.Text = "Cancel"; this.buttonCancel.UseVisualStyleBackColor = true; // // buttonAdd // this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.buttonAdd.Location = new System.Drawing.Point(498, 12); this.buttonAdd.Name = "buttonAdd"; this.buttonAdd.Size = new System.Drawing.Size(75, 23); this.buttonAdd.TabIndex = 3; this.buttonAdd.Text = "Add"; this.buttonAdd.UseVisualStyleBackColor = true; this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); // // buttonRemove // this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.buttonRemove.Location = new System.Drawing.Point(498, 41); this.buttonRemove.Name = "buttonRemove"; this.buttonRemove.Size = new System.Drawing.Size(75, 23); this.buttonRemove.TabIndex = 4; this.buttonRemove.Text = "Remove"; this.buttonRemove.UseVisualStyleBackColor = true; this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); // // columnHeader1 // this.columnHeader1.Text = "Name"; this.columnHeader1.Width = 250; // // columnHeader2 // this.columnHeader2.Text = "Location"; this.columnHeader2.Width = 350; // // ReferenceDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(584, 321); this.Controls.Add(this.buttonRemove); this.Controls.Add(this.buttonAdd); this.Controls.Add(this.buttonOk); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.listView1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; this.Name = "ReferenceDialog"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Reference Editor"; this.Load += new System.EventHandler(this.ReferenceDialog_Load); this.ResumeLayout(false); } #endregion private System.Windows.Forms.ListView listView1; private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonAdd; private System.Windows.Forms.Button buttonRemove; private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.ColumnHeader columnHeader2; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.IO; using System.Windows.Forms.Design; using System.Drawing.Design; namespace Content.Pipeline.Editor { public partial class ReferenceDialog : Form { public List Lines; public ReferenceDialog() { InitializeComponent(); } private void ReferenceDialog_Load(object sender, EventArgs e) { foreach (string item in this.Lines) { string[] itemValues = new string[] { Path.GetFileName(item), item }; listView1.Items.Add(new ListViewItem(itemValues)); } } private void buttonAdd_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Dll Files (.dll)|*.dll|All Files (*.*)|*.*"; dialog.Multiselect = true; if (dialog.ShowDialog() == DialogResult.OK) { string pl = ((PipelineController)MainView._controller).ProjectLocation; if (!pl.EndsWith(Path.DirectorySeparatorChar.ToString())) pl += Path.DirectorySeparatorChar; Uri folderUri = new Uri(pl); foreach(string filename in dialog.FileNames) { Uri pathUri = new Uri(filename); string fl = Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', System.IO.Path.DirectorySeparatorChar)); if (!this.Lines.Contains(fl)) { this.Lines.Add(fl); string[] itemValues = new string[] { Path.GetFileName(fl), fl }; listView1.Items.Add(new ListViewItem(itemValues)); } } } } private void buttonRemove_Click(object sender, EventArgs e) { var indices = listView1.SelectedIndices; for (int i = indices.Count - 1; i >= 0; i--) { int index = int.Parse(indices[i].ToString()); listView1.Items.RemoveAt(indices[i]); this.Lines.RemoveAt(index); } } } /// /// Custom editor for a the References property of a PipelineProject. /// public class AssemblyReferenceListEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) { IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; List lines = (List)value; if (svc != null && lines != null) { using (var form = new ReferenceDialog()) { form.Lines = lines; if (svc.ShowDialog(form) == DialogResult.OK) { lines = form.Lines; MainView._controller.OnReferencesModified(); } } } return lines; } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/ReferenceDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/SortedEnumTypeConverter.cs ================================================ using System; using System.ComponentModel; using System.Globalization; namespace Content.Pipeline.Editor { class SortedEnumTypeConverter : EnumConverter { private readonly Type _enumType; private readonly StandardValuesCollection _values; public SortedEnumTypeConverter(Type type) : base(type) { _enumType = this.EnumType; if (_enumType.IsGenericType && _enumType.GetGenericTypeDefinition() == typeof(Nullable<>)) _enumType = Nullable.GetUnderlyingType(_enumType); string[] values = Enum.GetNames(_enumType); Array.Sort(values); _values = new StandardValuesCollection(values); } public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; } public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { return _values; } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string) || sourceType == _enumType) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value != null) { if (value.GetType() == _enumType) return value; if (value is string) return Enum.Parse(_enumType, value as string, true); } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { if (value != null) { if (value is string) return value; return Enum.GetName(_enumType, value); } } return base.ConvertTo(context, culture, value, destinationType); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.Designer.cs ================================================ namespace Content.Pipeline.Editor { partial class TextEditDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.panel1 = new System.Windows.Forms.Panel(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(12, 9); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(35, 13); this.label1.TabIndex = 0; this.label1.Text = "label1"; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(12, 37); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(362, 20); this.textBox1.TabIndex = 1; this.textBox1.KeyUp += this.TextBox1_KeyUp; // // panel1 // this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.panel1.Controls.Add(this.button2); this.panel1.Controls.Add(this.button1); this.panel1.Location = new System.Drawing.Point(1, 68); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(385, 45); this.panel1.TabIndex = 2; // // button1 // this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.button1.Location = new System.Drawing.Point(298, 10); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 0; this.button1.Text = "Cancel"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.DialogResult = System.Windows.Forms.DialogResult.OK; this.button2.Location = new System.Drawing.Point(217, 10); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(75, 23); this.button2.TabIndex = 3; this.button2.Text = "OK"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // TextEditDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(386, 113); this.Controls.Add(this.panel1); this.Controls.Add(this.textBox1); this.Controls.Add(this.label1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "TextEditDialog"; this.Text = "TextEditDialog"; this.panel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.cs ================================================ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Content.Pipeline.Editor { public partial class TextEditDialog : Form { public string text = ""; public TextEditDialog(string title, string label, string text) { InitializeComponent(); this.Text = title; label1.Text = label; textBox1.Text = text; } private void TextBox1_KeyUp (object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter && button2.Enabled) { this.DialogResult = button2.DialogResult; button2_Click(sender, e); } } private void button2_Click(object sender, EventArgs e) { text = textBox1.Text; this.Close(); } private void button1_Click(object sender, EventArgs e) { this.Close(); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/TextEditDialog.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/TreeViewExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Windows.Forms; namespace Content.Pipeline.Editor { static class TreeViewExtensions { public static List AllNodes(this TreeView tree) { var list = new List(); AddTreeNodesRecursive(tree.Nodes, list); return list; } public static void AddTreeNodesRecursive(TreeNodeCollection nodeCollection, List results) { foreach (var i in nodeCollection) { var node = i as TreeNode; results.Add(node); AddTreeNodesRecursive(node.Nodes, results); } } public static IEnumerable GetSelectedContentItems(this MultiSelectTreeview tree) { var found = tree.SelectedNodesRecursive; foreach (var node in found) { var item = node.Tag as ContentItem; if (item != null) yield return item; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Forms/TreeViewNodeSorter.cs ================================================ // Copyright (C)2026 Nick Kastellanos using System.Collections; using System.Windows.Forms; namespace Content.Pipeline.Editor { internal class TreeViewNodeSorter : IComparer { int IComparer.Compare(object x, object y) { TreeNode a = (TreeNode)x; TreeNode b = (TreeNode)y; if (a.Tag != null && b.Tag != null) { if ((a.Tag is FolderItem) && !(b.Tag is FolderItem)) return -1; if (!(a.Tag is FolderItem) && (b.Tag is FolderItem)) return +1; } return a.Text.CompareTo(b.Text); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Program.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Windows.Forms; namespace Content.Pipeline.Editor { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main(string [] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); PipelineSettingsMgr.Current.Load(); var view = new MainView(); if (args != null && args.Length > 0) { var projectFilePath = string.Join(" ", args); view.OpenProjectPath = projectFilePath; } var controller = new PipelineController(view); Application.Run(view); } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Properties/AssemblyInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNI Pipeline Editor")] [assembly: AssemblyDescription("Content pipeline tool for KNI framework.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("KNI Pipeline Tool")] [assembly: AssemblyCopyright("Copyright ©2025 Nick Kastellanos, Copyright © MonoGameTeam 2016")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("8b7e176c-bcab-4258-b4c4-231b1c4e7bfb")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace Content.Pipeline.Editor.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Content.Pipeline.Editor.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Properties/Settings.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace Content.Pipeline.Editor.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Properties/Settings.settings ================================================  ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/Effect.fx ================================================  matrix WorldViewProjection; struct VertexShaderInput { float4 Position : POSITION0; float4 Color : COLOR0; }; struct VertexShaderOutput { float4 Position : SV_POSITION; float4 Color : COLOR0; }; VertexShaderOutput MainVS(in VertexShaderInput input) { VertexShaderOutput output = (VertexShaderOutput)0; output.Position = mul(input.Position, WorldViewProjection); output.Color = input.Color; return output; } float4 MainPS(VertexShaderOutput input) : COLOR { return input.Color; } technique BasicColorDrawing { pass pass0 { VertexShader = compile vs_4_0_level_9_1 MainVS(); PixelShader = compile ps_4_0_level_9_1 MainPS(); } }; ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/Effect.template ================================================ Effect Effect.png EffectImporter EffectProcessor Effect.fx ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/LocalizedSpriteFont.spritefont ================================================  Arial 12 0 true ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/LocalizedSpriteFont.template ================================================ LocalizedSpriteFont Description Font.png FontDescriptionImporter LocalizedFontProcessor LocalizedSpriteFont.spritefont ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteEffect.fx ================================================  Texture2D SpriteTexture : register(t0); sampler2D SpriteTextureSampler : register(s0) = sampler_state { Texture = ; }; struct VertexShaderOutput { float4 Position : SV_POSITION; float4 Color : COLOR0; float2 TextureCoordinates : TEXCOORD0; }; float4 MainPS(VertexShaderOutput input) : COLOR { return tex2D(SpriteTextureSampler, input.TextureCoordinates) * input.Color; } technique SpriteDrawing { pass pass0 { PixelShader = compile ps_4_0_level_9_1 MainPS(); } }; ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteEffect.template ================================================ Sprite Effect Effect.png EffectImporter EffectProcessor SpriteEffect.fx ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteFont.spritefont ================================================  Arial 12 0 true ~ ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/SpriteFont.template ================================================ SpriteFont Description Font.png FontDescriptionImporter FontDescriptionProcessor SpriteFont.spritefont ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/XmlContent.template ================================================ Xml Content Xml.png XmlImporter PassThroughProcessor XmlContent.xml ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/Templates/XmlContent.xml ================================================  ================================================ FILE: Tools/Content.Pipeline.Editor.WinForms/app.manifest ================================================  ================================================ FILE: Tools/Directory.Build.props ================================================ ================================================ FILE: Tools/EffectCompiler/BuildLogger.cs ================================================ using System; using Microsoft.Xna.Framework.Content.Pipeline; namespace EffectCompiler { internal class BuildLogger : ContentBuildLogger { public override void LogImportantMessage(string message, params object[] messageArgs) { Console.WriteLine(message, messageArgs); } public override void LogMessage(string message, params object[] messageArgs) { Console.WriteLine(message, messageArgs); } public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs) { var warning = string.Empty; if (contentIdentity != null && !string.IsNullOrEmpty(contentIdentity.SourceFilename)) { warning = contentIdentity.SourceFilename; if (!string.IsNullOrEmpty(contentIdentity.FragmentIdentifier)) warning += "(" + contentIdentity.FragmentIdentifier + ")"; warning += ": "; } if (messageArgs != null && messageArgs.Length != 0) warning += string.Format(message, messageArgs); else if (!string.IsNullOrEmpty(message)) warning += message; Console.WriteLine(warning); } } } ================================================ FILE: Tools/EffectCompiler/CommandLineParser.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.ComponentModel; namespace EffectCompiler { // Reusable, reflection based helper for parsing commandline options. // // From Shawn Hargreaves Blog: // http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx // public class CommandLineParser { object _optionsObject; Queue _requiredOptions = new Queue(); Dictionary _optionalOptions = new Dictionary(); List _requiredUsageHelp = new List(); List _optionalUsageHelp = new List(); // Constructor. public CommandLineParser(object optionsObject) { this._optionsObject = optionsObject; // Reflect to find what commandline options are available. foreach (var field in optionsObject.GetType().GetFields()) { String description; var fieldName = GetOptionNameAndDescription(field, out description); if (GetAttribute(field) != null) { // Record a required option. _requiredOptions.Enqueue(field); _requiredUsageHelp.Add(string.Format("<{0}> {1}", fieldName, description)); } else { // Record an optional option. _optionalOptions.Add(fieldName.ToLowerInvariant(), field); if (field.FieldType == typeof(bool)) _optionalUsageHelp.Add(string.Format("/{0} {1}", fieldName, description)); else _optionalUsageHelp.Add(string.Format("/{0}:value {1}", fieldName, description)); } } } public bool ParseCommandLine(string[] args) { // Parse each argument in turn. foreach (var arg in args) { if (!ParseArgument(arg.Trim())) return false; } // Make sure we got all the required options. var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0); if (missingRequiredOption != null) { ShowError("Missing argument '{0}'", GetOptionName(missingRequiredOption)); return false; } return true; } bool ParseArgument(string arg) { if (_requiredOptions.Count > 0) { // Parse the next non escaped argument. var field = _requiredOptions.Peek(); if (!IsList(field)) _requiredOptions.Dequeue(); return SetOption(field, arg); } else if (arg.StartsWith("/")) { // After the first escaped argument we can no // longer read non-escaped arguments. _requiredOptions.Clear(); // Parse an optional argument. char[] separators = { ':' }; var split = arg.Substring(1).Split(separators, 2, StringSplitOptions.None); var name = split[0]; var value = (split.Length > 1) ? split[1] : "true"; FieldInfo field; if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out field)) { ShowError("Unknown option '{0}'", name); return false; } return SetOption(field, value); } ShowError("Too many arguments"); return false; } bool SetOption(FieldInfo field, string value) { try { if (IsList(field)) { // Append this value to a list of options. GetList(field).Add(ChangeType(value, ListElementType(field))); } else { // Set the value of a single option. field.SetValue(_optionsObject, ChangeType(value, field.FieldType)); } return true; } catch { ShowError("Invalid value '{0}' for option '{1}'", value, GetOptionName(field)); return false; } } static object ChangeType(string value, Type type) { var converter = TypeDescriptor.GetConverter(type); return converter.ConvertFromInvariantString(value); } static bool IsList(FieldInfo field) { return typeof(IList).IsAssignableFrom(field.FieldType); } IList GetList(FieldInfo field) { return (IList)field.GetValue(_optionsObject); } static Type ListElementType(FieldInfo field) { var interfaces = from i in field.FieldType.GetInterfaces() where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>) select i; return interfaces.First().GetGenericArguments()[0]; } static string GetOptionName(FieldInfo field) { var nameAttribute = GetAttribute(field); if (nameAttribute != null) return nameAttribute.Name; else return field.Name; } static string GetOptionNameAndDescription(FieldInfo field, out String description) { var nameAttribute = GetAttribute(field); if (nameAttribute != null) { description = nameAttribute.Description; return nameAttribute.Name; } else { description = null; return field.Name; } } public string Title { get; set; } void ShowError(string message, params object[] args) { var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName); if (!string.IsNullOrEmpty(Title)) { Console.Error.WriteLine(Title); Console.Error.WriteLine(); } Console.Error.WriteLine(message, args); Console.Error.WriteLine(); Console.Error.WriteLine("Usage: {0} {1}", name, string.Join(" ", _requiredUsageHelp)); if (_optionalUsageHelp.Count > 0) { Console.Error.WriteLine(); Console.Error.WriteLine("Options:"); foreach (string optional in _optionalUsageHelp) Console.Error.WriteLine(" {0}", optional); } } static T GetAttribute(ICustomAttributeProvider provider) where T : Attribute { return provider.GetCustomAttributes(typeof(T), false).OfType().FirstOrDefault(); } // Used on optionsObject fields to indicate which options are required. [AttributeUsage(AttributeTargets.Field)] public sealed class RequiredAttribute : Attribute { } // Used on an optionsObject field to rename the corresponding commandline option. [AttributeUsage(AttributeTargets.Field)] public class NameAttribute : Attribute { public NameAttribute(string name) { Name = name; Description = null; } public NameAttribute(string name, string description) { Name = name; Description = description; } public string Name { get; private set; } public string Description { get; protected set; } } } } ================================================ FILE: Tools/EffectCompiler/EffectCompiler.csproj ================================================  4.2.9001.0 4.2.9001.0 false False net48;net8.0 {46474D32-2E58-6957-6E64-6F7773324D47} Exe EffectCompiler KNIFXC true CS1591;CS1574;CS0419 False bin\Windows\$(Platform)\$(Configuration)\ obj\Windows\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX 7.3 App.ico true {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {4b8d3f73-bbd2-4057-b86b-8b73b957dc0f} Xna.Framework.Graphics {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Tools/EffectCompiler/ImporterContext.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline; namespace EffectCompiler { class ImporterContext : ContentImporterContext { ContentBuildLogger _logger; public ImporterContext(ContentBuildLogger logger) : base() { _logger = logger; } public override string IntermediateDirectory { get { throw new NotImplementedException(); } } public override string OutputDirectory { get { throw new NotImplementedException(); } } public override ContentBuildLogger Logger { get { return _logger; } } public override void AddDependency(string filename) { } } } ================================================ FILE: Tools/EffectCompiler/Options.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler; using Microsoft.Xna.Framework.Graphics; namespace EffectCompiler { public class Options { [CommandLineParser.Required] public string SourceFile; [CommandLineParser.Required] public string OutputFile = string.Empty; [CommandLineParser.Name("Platform", "\t - Specify the shader target Platform. Allowed values: (Windows,WindowsStoreApp,DesktopGL,Android,iOS,BlazorGL).")] public TargetPlatform Platform = (TargetPlatform)(-1); [CommandLineParser.Name("Backend", "\t - Specify the shader target Backend. Allowed values: (DirectX11,OpenGL).")] public List Backend = new List(); [CommandLineParser.Name("Profile", "\t - Specify the shader target GraphicsProfile. Allowed values: (Reach, HiDef)")] public GraphicsProfile Profile = GraphicsProfile.Reach; [CommandLineParser.Name("Config", "\t - BuildConfiguration. Set to 'Debug' to include extra debug information in the compiled effect.")] public string Config; [CommandLineParser.Name("Defines", "\t - Semicolon-delimited define assignments")] public string Defines; } } ================================================ FILE: Tools/EffectCompiler/ProcessorContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace EffectCompiler { internal class ProcessorContext : ContentProcessorContext { ContentBuildLogger _logger; OpaqueDataDictionary _parameters = new OpaqueDataDictionary(); TargetPlatform _targetPlatform; GraphicsProfile _targetProfile; string _buildConfiguration; string _outputFilename; public ProcessorContext(ContentBuildLogger logger, TargetPlatform targetPlatform, GraphicsProfile targetProfile, string outputFilename, string config) : base() { _logger = logger; _targetPlatform = targetPlatform; _targetProfile = targetProfile; _outputFilename = outputFilename; _buildConfiguration = config; } public override string IntermediateDirectory { get { throw new NotImplementedException(); } } public override string OutputDirectory { get { throw new NotImplementedException(); } } public override string BuildConfiguration { get { return _buildConfiguration; } } public override ContentBuildLogger Logger { get { return _logger; } } public override string OutputFilename { get { return _outputFilename; } } public override OpaqueDataDictionary Parameters { get { return _parameters; } } public override TargetPlatform TargetPlatform { get { return _targetPlatform; } } public override GraphicsProfile TargetProfile { get { return _targetProfile; } } public override void AddDependency(string filename) { } public override void AddOutputFile(string filename) { throw new System.NotImplementedException(); } public override TOutput BuildAndLoadAsset(ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName) { throw new System.NotImplementedException(); } public override ExternalReference BuildAsset(ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName) { throw new System.NotImplementedException(); } public override TOutput Convert(TInput input, string processorName, OpaqueDataDictionary processorParameters) { throw new System.NotImplementedException(); } } } ================================================ FILE: Tools/EffectCompiler/Program.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace EffectCompiler { public static class Program { public static int Main(string[] args) { Options options = new Options(); CommandLineParser parser = new CommandLineParser(options); parser.Title = "knifxc - The KNI Effect compiler."; if (!parser.ParseCommandLine(args)) return 1; // Validate the input file exits. if (!File.Exists(options.SourceFile)) { Console.Error.WriteLine("The input file '{0}' was not found!", options.SourceFile); return 1; } try { ContentBuildLogger logger = new BuildLogger(); ContentImporter importer = new EffectImporter(); ContentImporterContext importerContext = new ImporterContext(logger); EffectContent content = importer.Import(options.SourceFile, importerContext); EffectProcessor processor = new EffectProcessor(); processor.Defines = options.Defines; if (options.Platform == (TargetPlatform)(-1)) { if (options.Backend.Count == 0) throw new InvalidOperationException("Missing argument 'Platform' or 'Backend'"); else options.Platform = TargetPlatform.Windows; } ContentProcessorContext processorContext = new ProcessorContext(logger, options.Platform, options.Profile, options.OutputFile, options.Config); if (options.Backend.Count > 0) processorContext.Parameters.Add("_GraphicsBackendList", options.Backend); CompiledEffectContent output = processor.Process(content, processorContext); byte[] effectCode = output.GetEffectCode(); File.WriteAllBytes(options.OutputFile, effectCode); } catch(Exception ex) { Console.WriteLine(ex.Message); return 1; } // We finished succesfully. Console.WriteLine("Compiled '{0}' to '{1}'.", options.SourceFile, options.OutputFile); return 0; } } } ================================================ FILE: Tools/EffectCompiler/Properties/AssemblyInfo.cs ================================================ using System; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("KNIFXC")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("KNIFXC")] [assembly: AssemblyCopyright("Copyright (C)2022 The MonoGame Team, ©2022-2024 Nick Kastellanos")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Mark the assembly as CLS compliant so it can be safely used in other .NET languages [assembly: CLSCompliant(true)] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("91c6a368-4017-4be4-babb-39cca4870312")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Tools/EffectCompiler/Properties/launchSettings.json ================================================ { "profiles": { "EffectCompiler": { "commandName": "Project", "commandLineArgs": "AlphaTestEffect.fx ..\\Resources\\AlphaTestEffect.fxo /Backend:DirectX11 /Backend:OpenGL /Backend:GLES", "workingDirectory": "..\\..\\Platforms\\Graphics\\Effect\\Shaders" } } } ================================================ FILE: Tools/MonoGame.Content.Builder/AssertListener.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class AssertListener : DefaultTraceListener { public override void Fail(string message) { if (message == null) message = ""; throw new Exception("Debug assertion failed: " + message); } public override void Fail(string message, string detailMessage) { if (message == null) message = ""; if (detailMessage == null) detailMessage = ""; throw new Exception("Debug assertion failed: " + message + "\n" + detailMessage); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/BuildAsyncState.cs ================================================ // Copyright (C)2022 Nick Kastellanos using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class BuildAsyncState { public string SourceFile { get; internal set; } public string OutputFile { get; internal set; } public string Importer { get; internal set; } public string Processor { get; internal set; } public OpaqueDataDictionary ProcessorParams { get; internal set; } public ConsoleAsyncLogger Logger { get; internal set; } } } ================================================ FILE: Tools/MonoGame.Content.Builder/BuildEvent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { public class BuildEvent { public const string Extension = ".kniContent"; private static readonly OpaqueDataDictionary EmptyParameters = new OpaqueDataDictionary(); public BuildEvent() { SourceFile = string.Empty; DestFile = string.Empty; Importer = string.Empty; Processor = string.Empty; Parameters = new OpaqueDataDictionary(); Dependencies = new List(); BuildAsset = new List(); BuildOutput = new List(); } /// /// Absolute path to the source file. /// public string SourceFile { get; set; } /// /// The date/time stamp of the source file. /// public DateTime SourceTime { get; set; } /// /// Absolute path to the output file. /// public string DestFile { get; set; } /// /// The date/time stamp of the destination file. /// public DateTime DestTime { get; set; } public string Importer { get; set; } /// /// The date/time stamp of the DLL containing the importer. /// public DateTime ImporterTime { get; set; } public string Processor { get; set; } /// /// The date/time stamp of the DLL containing the processor. /// public DateTime ProcessorTime { get; set; } public OpaqueDataDictionary Parameters { get; set; } /// /// Gets or sets the dependencies. /// /// The dependencies. /// /// Dependencies are extra files that are required in addition to the . /// Dependencies are added using . Changes /// to the dependent file causes a rebuilt of the content. /// public List Dependencies { get; set; } /// /// Gets or sets the additional (nested) assets. /// /// The additional (nested) assets. /// /// /// Additional assets are built by using an and calling /// /// or . /// /// /// Examples: The mesh processor may build textures and effects in addition to the mesh. /// /// public List BuildAsset { get; set; } /// /// Gets or sets the related output files. /// /// The related output files. /// /// Related output files are non-XNB files that are included in addition to the XNB files. /// Related output files need to be copied to the output folder by a content processor and /// registered by calling . /// public List BuildOutput { get; set; } public void SaveBinary(string filePath) { // Make sure the directory exists. Directory.CreateDirectory(Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar); using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) using (var writer = new PipelineBuildEventBinaryWriter(stream)) { writer.Write(this); } } public static BuildEvent LoadBinary(string filePath) { try { if (!File.Exists(filePath)) return null; using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) using (var reader = new PipelineBuildEventBinaryReader(stream)) { BuildEvent result = new BuildEvent(); reader.Read(result); return result; } } catch (Exception) { return null; } } internal bool NeedsRebuild(PipelineManager manager, BuildEvent cachedEvent) { // If we have no previously cached build event then we cannot // be sure that the state hasn't changed... force a rebuild. if (cachedEvent == null) return true; // Verify that the last write time of the source file matches // what we recorded when it was built. If it is different // that means someone modified it and we need to rebuild. DateTime sourceWriteTime = File.GetLastWriteTime(SourceFile); if (cachedEvent.SourceTime != sourceWriteTime) return true; // Do the same test for the dest file. DateTime destWriteTime = File.GetLastWriteTime(DestFile); if (cachedEvent.DestTime != destWriteTime) return true; // If the source file is newer than the dest file // then it must have been updated and needs a rebuild. if (sourceWriteTime >= destWriteTime) return true; // Are any of the dependancy files newer than the dest file? foreach (string depFile in cachedEvent.Dependencies) { if (File.GetLastWriteTime(depFile) >= destWriteTime) return true; } // This shouldn't happen... but if the source or dest files changed // then force a rebuild. if (cachedEvent.SourceFile != SourceFile || cachedEvent.DestFile != DestFile) return true; // Did the importer change? if (cachedEvent.Importer != Importer) return true; // Did the processor change? if (cachedEvent.Processor != Processor) return true; // Did the importer assembly change? DateTime importerAssemblyTimestamp = manager.GetImporterAssemblyTimestamp(cachedEvent.Importer); if (importerAssemblyTimestamp > cachedEvent.ImporterTime) return true; // Did the processor assembly change? DateTime processorAssemblyTimestamp = manager.GetProcessorAssemblyTimestamp(cachedEvent.Processor); if (processorAssemblyTimestamp > cachedEvent.ProcessorTime) return true; // Did the parameters change? OpaqueDataDictionary processorDefaultValues = manager.GetProcessorDefaultValues(Processor); if (!AreParametersEqual(cachedEvent.Parameters, Parameters, processorDefaultValues)) return true; return false; } internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1, OpaqueDataDictionary processorDefaultValues) { Debug.Assert(processorDefaultValues != null, "processorDefaultValues must not be empty."); Debug.Assert(EmptyParameters != null && EmptyParameters.Count == 0); // Same reference or both null? if (parameters0 == parameters1) return true; if (parameters0 == null) parameters0 = EmptyParameters; if (parameters1 == null) parameters1 = EmptyParameters; // Are both dictionaries empty? if (parameters0.Count == 0 && parameters1.Count == 0) return true; // Compare the values with the second dictionary or // the default values. if (parameters0.Count < parameters1.Count) { OpaqueDataDictionary dummy = parameters0; parameters0 = parameters1; parameters1 = dummy; } // Compare parameters0 with parameters1 or processorDefaultValues. foreach (KeyValuePair pair in parameters0) { object value0 = pair.Value; object value1; // Search for matching parameter. if (!parameters1.TryGetValue(pair.Key, out value1) && !processorDefaultValues.TryGetValue(pair.Key, out value1)) return false; if (!AreEqual(value0, value1)) return false; } // Compare parameters which are only in parameters1 with processorDefaultValues. foreach (KeyValuePair pair in parameters1) { if (parameters0.ContainsKey(pair.Key)) continue; object defaultValue; if (!processorDefaultValues.TryGetValue(pair.Key, out defaultValue)) return false; if (!AreEqual(pair.Value, defaultValue)) return false; } return true; } private static bool AreEqual(object value0, object value1) { // Are values equal or both null? if (Equals(value0, value1)) return true; // Is one value null? if (value0 == null || value1 == null) return false; // Values are of different type: Compare string representation. if (ConvertToString(value0) != ConvertToString(value1)) return false; return true; } private static string ConvertToString(object value) { if (value == null) return null; TypeConverter typeConverter = TypeDescriptor.GetConverter(value.GetType()); return typeConverter.ConvertToInvariantString(value); } internal class PipelineBuildEventBinaryWriter : BinaryWriter { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const short DataType = 2; // PipelineBuildEvent data public PipelineBuildEventBinaryWriter(Stream output) : base(output) { } internal void Write(BuildEvent value) { Write(Header.ToCharArray()); Write((Int16)MajorVersion); Write((Int16)MinorVersion); Write((Int32)DataType); Write((Int32)0); // reserved WriteStringOrNull(value.SourceFile); WriteDateTime(value.SourceTime); WriteStringOrNull(value.DestFile); WriteDateTime(value.DestTime); WriteStringOrNull(value.Importer); WriteDateTime(value.ImporterTime); WriteStringOrNull(value.Processor); WriteDateTime(value.ProcessorTime); WritePackedInt(value.Parameters.Count); foreach (var param in value.Parameters) { WriteStringOrNull(param.Key); WriteStringOrNull(ConvertToString(param.Value)); } WritePackedInt(value.Dependencies.Count); for (int i = 0; i < value.Dependencies.Count; i++) WriteStringOrNull(value.Dependencies[i]); WritePackedInt(value.BuildAsset.Count); for (int i = 0; i < value.BuildAsset.Count; i++) WriteStringOrNull(value.BuildAsset[i]); WritePackedInt(value.BuildOutput.Count); for (int i = 0; i < value.BuildOutput.Count; i++) WriteStringOrNull(value.BuildOutput[i]); return; } protected void WritePackedInt(int value) { // write zigzag encoded int int zzint = ((value << 1) ^ (value >> 31)); Write7BitEncodedInt(zzint); } private void WriteStringOrNull(string value) { if (value != null) { Write(true); Write(value); } else Write(false); } private void WriteDateTime(DateTime value) { Write((Int64)value.ToBinary()); } } internal class PipelineBuildEventBinaryReader : BinaryReader { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 2; // PipelineBuildEvent data public PipelineBuildEventBinaryReader(Stream output) : base(output) { } internal void Read(BuildEvent value) { if (ReadByte() != Header[0] || ReadByte() != Header[1] || ReadByte() != Header[2] || ReadByte() != Header[3]) throw new Exception("Invalid file."); if (ReadInt16() != MajorVersion || ReadInt16() != MinorVersion) throw new Exception("Invalid file version."); int dataType = ReadInt32(); if (dataType != DataType) throw new Exception("Invalid data type."); int reserved0 = ReadInt32(); value.SourceFile = ReadStringOrNull(); value.SourceTime = ReadDateTime(); value.DestFile = ReadStringOrNull(); value.DestTime = ReadDateTime(); value.Importer = ReadStringOrNull(); value.ImporterTime = ReadDateTime(); value.Processor = ReadStringOrNull(); value.ProcessorTime = ReadDateTime(); int parametersCount = ReadPackedInt(); value.Parameters = new OpaqueDataDictionary(); for (int i = 0; i < parametersCount; i++) { value.Parameters.Add( ReadStringOrNull(), ReadStringOrNull()); } int dependenciesCount = ReadPackedInt(); value.Dependencies = new List(dependenciesCount); for (int i = 0; i < dependenciesCount; i++) value.Dependencies.Add(ReadStringOrNull()); int buildAssetCount = ReadPackedInt(); value.BuildAsset = new List(buildAssetCount); for (int i = 0; i < buildAssetCount; i++) value.BuildAsset.Add(ReadStringOrNull()); int buildOutputCount = ReadPackedInt(); value.BuildOutput = new List(buildOutputCount); for (int i = 0; i < buildOutputCount; i++) value.BuildOutput.Add(ReadStringOrNull()); return; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } private string ReadStringOrNull() { if (ReadBoolean()) return ReadString(); else return null; } private DateTime ReadDateTime() { return DateTime.FromBinary(ReadInt64()); } } } } ================================================ FILE: Tools/MonoGame.Content.Builder/CommandLineParser.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.ComponentModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { /// /// Adapted from this generic command line argument parser: /// http://blogs.msdn.com/b/shawnhar/archive/2012/04/20/a-reusable-reflection-based-command-line-parser.aspx /// public class CommandLineParser { public static CommandLineParser Instance; private readonly object _optionsObject; private readonly Queue _requiredOptions; private readonly Dictionary _optionalOptions; private readonly Dictionary _flags; private readonly List _requiredUsageHelp; public readonly Dictionary _properties; public delegate void ErrorCallback(string msg, object[] args); public event ErrorCallback OnError; public CommandLineParser(object optionsObject) { Instance = this; _optionsObject = optionsObject; _requiredOptions = new Queue(); _optionalOptions = new Dictionary(); _requiredUsageHelp = new List(); _properties = new Dictionary(); // Reflect to find what commandline options are available... // Fields foreach (var field in optionsObject.GetType().GetFields()) { var param = GetAttribute(field); if (param == null) continue; CheckReservedPrefixes(param.Name); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(field); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), field); } } // Properties foreach (var property in optionsObject.GetType().GetProperties()) { var param = GetAttribute(property); if (param == null) continue; CheckReservedPrefixes(param.Name); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(property); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), property); } } // Methods foreach (var method in optionsObject.GetType().GetMethods()) { var param = GetAttribute(method); if (param == null) continue; CheckReservedPrefixes(param.Name); // Only accept methods that take less than 1 parameter. if (method.GetParameters().Length > 1) throw new NotSupportedException("Methods must have one or zero parameters."); if (param.Required) { // Record a required option. _requiredOptions.Enqueue(method); _requiredUsageHelp.Add(string.Format("<{0}>", param.Name)); } else { // Record an optional option. _optionalOptions.Add(param.Name.ToLowerInvariant(), method); } } _flags = new Dictionary(); foreach(var pair in _optionalOptions) { var fi = GetAttribute(pair.Value); if(!string.IsNullOrEmpty(fi.Flag)) _flags.Add(fi.Flag, fi.Name); } } public bool Parse(IEnumerable args) { var preprocargs = Preprocess(args); var showUsage = true; var success = true; foreach (var arg in preprocargs) { showUsage = false; if (!ParseFlags(arg)) { success = false; break; } } var missingRequiredOption = _requiredOptions.FirstOrDefault(field => !IsList(field) || GetList(field).Count == 0); if (missingRequiredOption != null) { ShowError("Missing argument '{0}'", GetAttribute(missingRequiredOption).Name); return false; } if (showUsage) ShowError(null); return success; } private IEnumerable Preprocess(IEnumerable args) { var output = new List(); var ifstack = new Stack(); foreach (var arg in args) ParsePreprocessArg(arg, output, ifstack, false); return output; } private void ParsePreprocessArg(string arg, List output, Stack ifstack, bool inResponseFile) { if (arg.StartsWith("$endif")) { ifstack.Pop(); return; } if (ifstack.Count > 0) { foreach (var ifCondition in ifstack) { var expected = ifCondition.Value; string actual; if (!_properties.TryGetValue(ifCondition.Key, out actual)) return; if (expected != string.Empty && !expected.Equals(actual)) return; } } if (arg.StartsWith("$set ")) { if (!inResponseFile) throw new Exception("$set is invalid outside of a response file."); var words = arg.Substring(5).Split('='); var name = words[0].Trim(); var value = words.Length > 1 ? words[1].Trim() : string.Empty; _properties[name] = value; return; } if (arg.StartsWith("$if ")) { if (!inResponseFile) throw new Exception("$if is invalid outside of a response file."); var words = arg.Substring(4).Split('='); var name = words[0].Trim(); var value = words.Length > 1 ? words[1].Trim() : string.Empty; var condition = new IfCondition(name, value); ifstack.Push(condition); return; } if (arg.StartsWith("/define:") || arg.StartsWith("--define:")) { arg = arg.Substring(arg[0] == '/' ? 8 : 9); var words = arg.Split('='); var name = words[0]; var value = words.Length > 1 ? words[1] : string.Empty; _properties[name] = value; return; } if (arg.StartsWith("/@:") || arg.StartsWith("--@:") || arg.StartsWith("-@:")) { string file = null; if (arg.StartsWith("/@:") || arg.StartsWith("-@:")) file = arg.Substring(3); if (file.StartsWith("--@:")) file = arg.Substring(4); file = Path.GetFullPath(file); if (!File.Exists(file)) throw new Exception(string.Format("File '{0}' does not exist.", file)); string responseFilename = Path.GetFileName(file); if (!inResponseFile) output.Add("/@:" + responseFilename); var prevDir = Directory.GetCurrentDirectory(); var dir = Path.GetDirectoryName(file); if (prevDir != dir) { // make sure the working dir is changed both during preprocessing and during execution Directory.SetCurrentDirectory(dir); output.Add("/workingDir:" + dir); } var lines = File.ReadAllLines(file); foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue; ParsePreprocessArg(line, output, ifstack, true); } if (prevDir != dir) { Directory.SetCurrentDirectory(prevDir); output.Add("/workingDir:" + prevDir); } return; } output.Add(arg); } private bool ParseFlags(string arg) { // Only one flag if (arg.Length >= 3 && (arg[0] == '-' || arg[0] == '/') && (arg[2] == '=' || arg[2] == ':')) { string name; if (!_flags.TryGetValue(arg[1].ToString(), out name)) { ShowError("Unknown option '{0}'", arg[1].ToString()); return false; } ParseArgument("/" + name + arg.Substring(2)); return true; } // Not a flag, parse argument return ParseArgument(arg); } private bool ParseArgument(string arg) { if (arg.StartsWith("/") || arg.StartsWith("--")) { // After the first escaped argument we can no // longer read non-escaped arguments. if (_requiredOptions.Count > 0) return false; // Parse an optional argument. char[] separators = { ':', '=' }; var split = arg.Substring(arg.StartsWith("/") ? 1 : 2).Split(separators, 2, StringSplitOptions.None); var name = split[0]; var value = (split.Length > 1) ? split[1] : "true"; MemberInfo member; if (!_optionalOptions.TryGetValue(name.ToLowerInvariant(), out member)) { ShowError("Unknown option '{0}'", name); return false; } return SetOption(member, value); } if (_requiredOptions.Count > 0) { // Parse the next non escaped argument. var field = _requiredOptions.Peek(); if (!IsList(field)) _requiredOptions.Dequeue(); return SetOption(field, arg); } ShowError("Too many arguments"); return false; } bool SetOption(MemberInfo member, string value) { try { if (IsList(member)) { // Append this value to a list of options. GetList(member).Add(ChangeType(value, ListElementType(member))); } else { // Set the value of a single option. if (member is MethodInfo) { var method = member as MethodInfo; var parameters = method.GetParameters(); if (parameters.Length == 0) method.Invoke(_optionsObject, null); else method.Invoke(_optionsObject, new[] { ChangeType(value, parameters[0].ParameterType) }); } else if (member is FieldInfo) { var field = member as FieldInfo; field.SetValue(_optionsObject, ChangeType(value, field.FieldType)); } else { var property = member as PropertyInfo; property.SetValue(_optionsObject, ChangeType(value, property.PropertyType), null); } } return true; } catch (TargetInvocationException tiex) { ShowError("Invalid value '{0}' for option '{1}'", value, GetAttribute(member).Name); ShowError(tiex.InnerException.Message); return false; } catch { ShowError("Invalid value '{0}' for option '{1}'", value, GetAttribute(member).Name); return false; } } static readonly string[] ReservedPrefixes = new[] { "$", "/", "#", "--", "-" }; static void CheckReservedPrefixes(string str) { foreach (var i in ReservedPrefixes) { if (str.StartsWith(i)) throw new Exception(string.Format("'{0}' is a reserved prefix and cannot be used at the start of an argument name.", i)); } } static object ChangeType(string value, Type type) { var converter = TypeDescriptor.GetConverter(type); return converter.ConvertFromInvariantString(value); } static bool IsList(MemberInfo member) { if (member is MethodInfo) return false; if (member is FieldInfo) return typeof(IList).IsAssignableFrom((member as FieldInfo).FieldType); return typeof(IList).IsAssignableFrom((member as PropertyInfo).PropertyType); } IList GetList(MemberInfo member) { if (member is PropertyInfo) return (IList)(member as PropertyInfo).GetValue(_optionsObject, null); if (member is FieldInfo) return (IList)(member as FieldInfo).GetValue(_optionsObject); throw new Exception(); } static Type ListElementType(MemberInfo member) { if (member is FieldInfo) { var field = member as FieldInfo; var interfaces = from i in field.FieldType.GetInterfaces() where i.IsGenericType && i.GetGenericTypeDefinition() == typeof (IEnumerable<>) select i; return interfaces.First().GetGenericArguments()[0]; } if (member is PropertyInfo) { var property = member as PropertyInfo; var interfaces = from i in property.PropertyType.GetInterfaces() where i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>) select i; return interfaces.First().GetGenericArguments()[0]; } throw new ArgumentException("Only FieldInfo and PropertyInfo are valid arguments.", "member"); } public string Title { get; set; } bool IsWindows() { switch (Environment.OSVersion.Platform) { case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: return true; } return false; } public void ShowError(string message, params object[] args) { if (!string.IsNullOrEmpty(message) && OnError != null) { OnError(message, args); return; } var name = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName); if (!string.IsNullOrEmpty(Title)) { Console.Error.WriteLine(Title); Console.Error.WriteLine(); } if (!string.IsNullOrEmpty(message)) { Console.Error.WriteLine(message, args); Console.Error.WriteLine(); } var defaultParamPrefix = IsWindows() ? "/" : "--"; Console.Error.WriteLine("Usage: {0} {1}{2}", name, _requiredUsageHelp.Count > 0 ? string.Join(" ", _requiredUsageHelp) + " " : string.Empty, _optionalOptions.Count > 0 ? "" : string.Empty); if (_optionalOptions.Count > 0) { Console.Error.WriteLine(); Console.Error.WriteLine("Options:"); var data = _optionalOptions.Values.ToList(); data.Sort((x, y) => { var px = GetAttribute(x); var py = GetAttribute(y); return px.Name.CompareTo(py.Name); }); foreach(var d in data) { var attr = GetAttribute(d); var field = d as FieldInfo; var prop = d as PropertyInfo; var method = d as MethodInfo; var hasValue = false; if (field != null && field.FieldType != typeof (bool)) hasValue = true; if (prop != null && prop.PropertyType != typeof (bool)) hasValue = true; if (method != null && method.GetParameters().Length != 0) hasValue = true; var s = " "; s += (!string.IsNullOrEmpty(attr.Flag)) ? (IsWindows() ? "/" : "-") + attr.Flag + "," : " "; s += " " + defaultParamPrefix + attr.Name; if (hasValue) { if (IsWindows()) s += ":<" + attr.ValueName + ">"; else s += "=" + attr.ValueName.Replace("=", ":").ToUpper(); } s = s.PadRight(35, ' '); // Wrap text description var bw = Math.Max(60, Console.BufferWidth); var desc = attr.Description.Split(' '); foreach(var dw in desc) { if (s.Length + dw.Length >= bw) { Console.WriteLine(s); s = string.Empty.PadRight(37, ' '); } s += " " + dw; } Console.WriteLine(s); } } } static T GetAttribute(ICustomAttributeProvider provider) where T : Attribute { return provider.GetCustomAttributes(typeof(T), false).OfType().FirstOrDefault(); } private struct IfCondition { public readonly string Key; public readonly string Value; public IfCondition(string key, string value) { Key = key; Value = value; } } } // Used on an optionsObject field or method to rename the corresponding commandline option. [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property)] public sealed class CommandLineParameterAttribute : Attribute { public CommandLineParameterAttribute() { ValueName = "value"; } public string Name { get; set; } public string Flag { get; set; } public bool Required { get; set; } public string ValueName { get; set; } public string Description { get; set; } } } ================================================ FILE: Tools/MonoGame.Content.Builder/CompressionMethod.cs ================================================ // Copyright (C)2024 Nick Kastellanos namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { public enum CompressionMethod { Default = 0, //ZLX = 1, LZ4 = 2, Brotli = 3, } } ================================================ FILE: Tools/MonoGame.Content.Builder/ConsoleAsyncLogger.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class ConsoleAsyncLogger : ConsoleLogger { private ConsoleLogger _logger; Queue _commandQueue = new Queue(); private bool _immediate = false; public bool Immediate { get { return _immediate; } set { if (value != _immediate) { if (_immediate) Flush(); _immediate = value; } } } public ConsoleAsyncLogger(ConsoleLogger logger) { this._logger = logger; } //public override string LoggerRootDirectory //{ // get { return _logger.LoggerRootDirectory; } // set { throw new InvalidOperationException(); } //} public override void LogImportantMessage(string message, params object[] messageArgs) { Enqueue(new LogImportantMessageCmd(message, messageArgs)); } public override void LogMessage(string message, params object[] messageArgs) { Enqueue(new LogMessageCmd(message, messageArgs)); } public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs) { Enqueue(new LogWarningCmd(helpLink, contentIdentity, message, messageArgs)); } public override void PushFile(string filename) { Enqueue(new PushFileCmd(filename)); } public override void PopFile() { Enqueue(new PopFileCmd()); } public override void Indent() { Enqueue(new IndentCmd()); } public override void Unindent() { Enqueue(new UnindentCmd()); } private void Enqueue(ICmd cmd) { _commandQueue.Enqueue(cmd); if (Immediate) Flush(); } internal void Flush() { while(_commandQueue.Count>0) { var cmd = _commandQueue.Dequeue(); cmd.Execute(_logger); } } #region command queue interface ICmd { void Execute(ConsoleLogger reciever); } class LogImportantMessageCmd : ICmd { private string message; private object[] messageArgs; public LogImportantMessageCmd(string message, object[] messageArgs) { this.message = message; this.messageArgs = messageArgs; } public void Execute(ConsoleLogger reciever) { reciever.LogImportantMessage(message, messageArgs); } } class LogMessageCmd : ICmd { private string message; private object[] messageArgs; public LogMessageCmd(string message, object[] messageArgs) { this.message = message; this.messageArgs = messageArgs; } public void Execute(ConsoleLogger reciever) { reciever.LogMessage(message, messageArgs); } } class LogWarningCmd : ICmd { private string helpLink; private ContentIdentity contentIdentity; private string message; private object[] messageArgs; public LogWarningCmd(string helpLink, ContentIdentity contentIdentity, string message, object[] messageArgs) { this.helpLink = helpLink; this.contentIdentity = contentIdentity; this.message = message; this.messageArgs = messageArgs; } public void Execute(ConsoleLogger reciever) { reciever.LogWarning(helpLink, contentIdentity, message, messageArgs); } } class PushFileCmd: ICmd { private string filename; public PushFileCmd(string filename) { this.filename = filename; } public void Execute(ConsoleLogger reciever) { reciever.PushFile(filename); } } class PopFileCmd : ICmd { public PopFileCmd() { } public void Execute(ConsoleLogger reciever) { reciever.PopFile(); } } class IndentCmd : ICmd { public IndentCmd() { } public void Execute(ConsoleLogger reciever) { reciever.Indent(); } } class UnindentCmd : ICmd { public UnindentCmd() { } public void Execute(ConsoleLogger reciever) { reciever.Unindent(); } } #endregion } } ================================================ FILE: Tools/MonoGame.Content.Builder/ConsoleLogger.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class ConsoleLogger : ContentBuildLogger { private int indentCount = 0; public virtual void Indent() { indentCount++; } public virtual void Unindent() { indentCount--; } protected string IndentString { get { return String.Empty.PadLeft(Math.Max(0, indentCount), '\t'); } } public override void LogMessage(string message, params object[] messageArgs) { Console.WriteLine(IndentString + message, messageArgs); } public override void LogImportantMessage(string message, params object[] messageArgs) { // TODO: How do i make it high importance? Console.WriteLine(IndentString + message, messageArgs); } public override void LogWarning(string helpLink, ContentIdentity contentIdentity, string message, params object[] messageArgs) { var warning = string.Empty; if (contentIdentity != null && !string.IsNullOrEmpty(contentIdentity.SourceFilename)) { warning = contentIdentity.SourceFilename; if (!string.IsNullOrEmpty(contentIdentity.FragmentIdentifier)) warning += "(" + contentIdentity.FragmentIdentifier + ")"; else warning += " "; } else { warning = GetCurrentFilename(contentIdentity); warning += " "; } warning += ": warning "; // extract errorCode from message var match = System.Text.RegularExpressions.Regex.Match(message, @"([A-Z]+[0-9]+):(.+)"); if (match.Success || match.Groups.Count == 2) { warning += match.Groups[1].Value; warning += " "; message = match.Groups[2].Value; } warning += ": "; if (messageArgs != null && messageArgs.Length != 0) warning += string.Format(message, messageArgs); else if (!string.IsNullOrEmpty(message)) warning += message; Console.WriteLine(warning); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/ContentBuilder.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { class ContentBuilder { [CommandLineParameter( Name = "singleThread", Flag = "s", Description = "Use single Thread.")] public bool SingleThread = false; [CommandLineParameter( Name = "quiet", Flag = "q", Description = "Only output content build errors.")] public bool Quiet = false; [CommandLineParameter( Name = "help", Flag = "h", Description = "Displays this help.")] public void Help() { CommandLineParser.Instance.ShowError(null); } private string _responseFilename = string.Empty; [CommandLineParameter( Name = "@", Flag = "@", ValueName = "responseFile", Description = "Read a text response file with additional command line options and switches.")] // This property only exists for documentation. // The actual handling of '/@' is done in the preprocess step. public void SetResponseFile(string responseFilename) { _responseFilename = responseFilename; } [CommandLineParameter( Name = "workingDir", Flag = "w", ValueName = "directoryPath", Description = "The working directory where all source content is located.")] public void SetWorkingDir(string path) { Directory.SetCurrentDirectory(path); } private string _outputDir = string.Empty; [CommandLineParameter( Name = "outputDir", Flag = "o", ValueName = "path", Description = "The directory where all content is written.")] public void SetOutputDir(string path) { _outputDir = Path.GetFullPath(path); } private string _intermediateDir = string.Empty; [CommandLineParameter( Name = "intermediateDir", Flag = "n", ValueName = "path", Description = "The directory where all intermediate files are written.")] public void SetIntermediateDir(string path) { _intermediateDir = Path.GetFullPath(path); } [CommandLineParameter( Name = "rebuild", Flag = "r", Description = "Forces a full rebuild of all content.")] public bool Rebuild = false; [CommandLineParameter( Name = "clean", Flag = "c", Description = "Delete all previously built content and intermediate files.")] public bool Clean = false; [CommandLineParameter( Name = "incremental", Flag = "I", Description = "Skip cleaning files not included in the current build.")] public bool Incremental = false; [CommandLineParameter( Name = "reference", Flag = "f", ValueName = "assembly", Description = "Adds an assembly reference for resolving content importers, processors, and writers.")] public readonly List References = new List(); private readonly List _packageReferences = new List(); [CommandLineParameter( Name = "packageReference", ValueName = "package", Description = "Adds a nuget package reference for resolving content importers, processors, and writers.")] public void SetPackageReference(string packageReference) { Package package = Package.Parse(packageReference); _packageReferences.Add(package); } [CommandLineParameter( Name = "platform", Flag = "t", ValueName = "targetPlatform", Description = "Set the target platform for this build. Defaults to Windows desktop DirectX.")] public TargetPlatform Platform = TargetPlatform.Windows; [CommandLineParameter( Name = "profile", Flag = "g", ValueName = "graphicsProfile", Description = "Set the target graphics profile for this build. Defaults to HiDef.")] public GraphicsProfile Profile = GraphicsProfile.HiDef; [CommandLineParameter( Name = "config", ValueName = "string", Description = "The optional build config string from the build system.")] public string Config = string.Empty; [CommandLineParameter( Name = "importer", Flag = "i", ValueName = "className", Description = "Defines the class name of the content importer for reading source content.")] public string Importer = null; [CommandLineParameter( Name = "processor", Flag = "p", ValueName = "className", Description = "Defines the class name of the content processor for processing imported content.")] public void SetProcessor(string processor) { _processor = processor; // If you are changing the processor then reset all // the processor parameters. _processorParams.Clear(); } private string _processor = null; private readonly OpaqueDataDictionary _processorParams = new OpaqueDataDictionary(); [CommandLineParameter( Name = "processorParam", Flag = "m", ValueName = "name=value", Description = "Defines a parameter name and value to set on a content processor.")] public void AddProcessorParam(string nameAndValue) { var keyAndValue = nameAndValue.Split('=', ':'); if (keyAndValue.Length != 2) { // Do we error out or something? return; } _processorParams.Remove(keyAndValue[0]); _processorParams.Add(keyAndValue[0], keyAndValue[1]); } [CommandLineParameter( Name = "build", Flag = "b", ValueName = "sourceFile", Description = "Build the content source file using the previously set switches and options. Optional destination path may be specified with \"sourceFile;destFile\" if you wish to change the output filepath.")] public void OnBuild(string sourceFile) { string link = null; if (sourceFile.Contains(";")) { var split = sourceFile.Split(';'); sourceFile = split[0]; if(split.Length > 0) link = split[1]; } string projectDir = Directory.GetCurrentDirectory(); //if (sourceFile.Contains("..")) // throw new InvalidOperationException("Content file is not rooted in content path \"" + projectDir + "\""); // Make sure the source file is absolute. if (!Path.IsPathRooted(sourceFile)) sourceFile = Path.Combine(projectDir, sourceFile); // link should remain relative, absolute path will get set later when the build occurs sourceFile = PathHelper.Normalize(sourceFile); // Remove duplicates... keep this new one. int previous = _contentItems.FindIndex(e => string.Equals(e.SourceFile, sourceFile, StringComparison.InvariantCultureIgnoreCase)); if (previous != -1) { _contentItemsMap.Remove(_contentItems[previous].SourceFile.ToLowerInvariant()); _contentItems.RemoveAt(previous); } // Create the item for processing later. ContentItem contentItem = new ContentItem { SourceFile = sourceFile, OutputFile = link, Importer = Importer, Processor = _processor, ProcessorParams = new OpaqueDataDictionary() }; _contentItems.Add(contentItem); _contentItemsMap.Add(contentItem.SourceFile.ToLowerInvariant(), contentItem); // Copy the current processor parameters blind as we // will validate and remove invalid parameters during // the build process later. foreach (var pair in _processorParams) contentItem.ProcessorParams.Add(pair.Key, pair.Value); } [CommandLineParameter( Name = "copy", ValueName = "sourceFile", Description = "Copy the content source file verbatim to the output directory.")] public void OnCopy(string sourceFile) { string link = null; if (sourceFile.Contains(";")) { var split = sourceFile.Split(';'); sourceFile = split[0]; if (split.Length > 0) link = split[1]; } if (!Path.IsPathRooted(sourceFile)) sourceFile = Path.Combine(Directory.GetCurrentDirectory(), sourceFile); sourceFile = PathHelper.Normalize(sourceFile); // Remove duplicates... keep this new one. var previous = _copyItems.FindIndex(e => string.Equals(e.SourceFile, sourceFile, StringComparison.InvariantCultureIgnoreCase)); if (previous != -1) _copyItems.RemoveAt(previous); _copyItems.Add(new CopyItem { SourceFile = sourceFile, Link = link }); } [CommandLineParameter( Name = "compress", Description = "Compress the XNB files for smaller file sizes.")] public bool CompressContent = false; [CommandLineParameter( Name = "compression", Description = "The compression method.")] public CompressionMethod Compression = CompressionMethod.Default; public class ContentItem { public string SourceFile; public string OutputFile; // This refers to the "Link" which can override the default output location public string Importer; public string Processor; public OpaqueDataDictionary ProcessorParams; } public class CopyItem { public string SourceFile; public string Link; } private PipelineManager _manager; private readonly List _contentItems = new List(); private readonly Dictionary _contentItemsMap = new Dictionary(); private readonly List _copyItems = new List(); public int SuccessCount { get; private set; } public int ErrorCount { get; private set; } public bool HasWork { get { return _contentItems.Count > 0 || _copyItems.Count > 0 || Clean; } } public ContentBuilder() { AttachAssertListener(new AssertListener()); } [Conditional("DEBUG")] public static void AttachAssertListener(TraceListener traceListener) { if (!Debugger.IsAttached && Trace.Listeners.Count == 1 && Trace.Listeners[0].GetType() == typeof(DefaultTraceListener)) { Trace.Listeners.Clear(); Trace.Listeners.Add(traceListener); } } string ReplaceSymbols(string parameter) { if (string.IsNullOrWhiteSpace(parameter)) return parameter; parameter = parameter.Replace("$(Platform)", Platform.ToString()); parameter = parameter.Replace("$(Configuration)", Config); parameter = parameter.Replace("$(Config)", Config); parameter = parameter.Replace("$(Profile)", this.Profile.ToString()); return parameter; } public void Build() { string projectDirectory = PathHelper.Normalize(Directory.GetCurrentDirectory()); string outputPath = ReplaceSymbols(_outputDir); if (!Path.IsPathRooted(outputPath)) outputPath = PathHelper.Normalize(Path.GetFullPath(Path.Combine(projectDirectory, outputPath))); string intermediatePath = ReplaceSymbols(_intermediateDir); if (!Path.IsPathRooted(intermediatePath)) intermediatePath = PathHelper.Normalize(Path.GetFullPath(Path.Combine(projectDirectory, intermediatePath))); ContentCompression compression = ContentCompression.Uncompressed; if (this.CompressContent) { switch (this.Compression) { case CompressionMethod.Default: compression = ContentCompression.LegacyLZ4; break; case CompressionMethod.LZ4: compression = ContentCompression.LZ4; break; case CompressionMethod.Brotli: compression = ContentCompression.Brotli; break; default: throw new InvalidOperationException(); } } _manager = new PipelineManager(projectDirectory, _responseFilename, outputPath, intermediatePath, this.Quiet); // Feed all the assembly references to the pipeline manager // so it can resolve importers, processors, writers, and types. AddReferences(_manager, projectDirectory, this.References); AddPackageReferences(_manager, projectDirectory, this._packageReferences); // Load the previously serialized list of built content. bool targetChanged = false; SourceFileCollection previousFileCollection = LoadFileCollection(intermediatePath); if (previousFileCollection != null) { // If the target changed in any way then we need to force // a full rebuild even under incremental builds. targetChanged = previousFileCollection.Config != Config || previousFileCollection.Platform != Platform || previousFileCollection.Profile != Profile || previousFileCollection.Compression != compression ; // First clean previously built content. CleanItems(previousFileCollection, targetChanged); // TODO: Should we be cleaning copy items? I think maybe we should. } if (Clean) return; SourceFileCollection newFileCollection = new SourceFileCollection { Profile = _manager.Profile = Profile, Platform = _manager.Platform = Platform, Compression = _manager.Compression = compression, Config = _manager.Config = Config }; SuccessCount = 0; ErrorCount = 0; // Before building the content, register all files to be built. // (Necessary to correctly resolve external references.) foreach (ContentItem contentItem in _contentItems) { try { BuildEvent buildEvent = _manager.CreateBuildEvent(contentItem.SourceFile, contentItem.OutputFile, contentItem.Importer, contentItem.Processor, contentItem.ProcessorParams); OpaqueDataDictionary processorDefaultValues = _manager.GetProcessorDefaultValues(buildEvent.Processor); PipelineManager.TrackBuildEvent(_manager._buildEventsMap, buildEvent, processorDefaultValues); } catch { /* Ignore exception */ } } if (SingleThread) BuildItemsSingleThread(_contentItems, newFileCollection); else BuildItemsMultiThread(_contentItems, newFileCollection); // If this is an incremental build we merge the list // of previous content with the new list. if (Incremental && !targetChanged && previousFileCollection != null) newFileCollection.Merge(previousFileCollection); // Delete the old file and write the new content // list if we have any to serialize. DeleteFileCollection(intermediatePath); if (newFileCollection.SourceFilesCount > 0) SaveFileCollection(intermediatePath, newFileCollection); // Process copy items (files that bypass the content pipeline) CopyItems(_copyItems, projectDirectory, outputPath); } private void AddReferences(PipelineManager manager, string projectDirectory, List references) { foreach (string r in references) { string assemblyFile = ReplaceSymbols(r); if (!Path.IsPathRooted(assemblyFile)) assemblyFile = Path.GetFullPath(Path.Combine(projectDirectory, assemblyFile)); manager.AddAssembly(assemblyFile); } } private void AddPackageReferences(PipelineManager manager, string projectDirectory, List packageReferences) { if (packageReferences.Count == 0) return; string intermediateFolder = "obj/"; intermediateFolder = Path.Combine(projectDirectory, intermediateFolder); intermediateFolder = PathHelper.Normalize(intermediateFolder); if (!Directory.Exists(intermediateFolder)) Directory.CreateDirectory(intermediateFolder); const string packageReferencesProjFolder = ".Packages"; const string libraryName = "PackagesLibrary"; string fullPackageReferencesFolder = Path.Combine(intermediateFolder, packageReferencesProjFolder); if (!Directory.Exists(fullPackageReferencesFolder)) Directory.CreateDirectory(fullPackageReferencesFolder); string projFolder = Path.GetFileNameWithoutExtension(manager.ResponseFilename); string fullPackageReferencesProjFolder = Path.Combine(fullPackageReferencesFolder, projFolder); fullPackageReferencesProjFolder = PathHelper.Normalize(fullPackageReferencesProjFolder); string publishDir = "publish"; bool rebuild = false; // load db List packages = new List(packageReferences); packages.Sort(); string intermediatePackageCollectionPath = Path.Combine(fullPackageReferencesProjFolder, Path.ChangeExtension(libraryName, PackageReferencesCollection.Extension)); PackageReferencesCollection previousPackageReferencesCollection = PackageReferencesCollection.LoadBinary(intermediatePackageCollectionPath); if (previousPackageReferencesCollection != null && previousPackageReferencesCollection.PackagesCount == packages.Count) { for (int i = 0; i < packages.Count; i++) { if (packages[i].Name != previousPackageReferencesCollection.Packages[i].Name || packages[i].Version != previousPackageReferencesCollection.Packages[i].Version) { rebuild = true; break; } } } else rebuild = true; // build PackageReferencesLibrary if (rebuild) { string framework = "netstandard2.0"; #if NET8_0_OR_GREATER framework = "net8.0"; #endif string newCmd = String.Format("new classlib --framework \"{0}\" -n {1} -o \"{2}\"", framework, libraryName, projFolder); newCmd += " --force"; ExecuteDotnet(fullPackageReferencesFolder, newCmd); foreach (Package packageReference in packageReferences) { string addCmd = String.Format("add {0}.csproj package {1} ", libraryName, packageReference.Name); addCmd += " --no-restore"; if (packageReference.Version != String.Empty) addCmd += " --version " + packageReference.Version; ExecuteDotnet(fullPackageReferencesProjFolder, addCmd); } string cleanCmd = String.Format("clean {0}.csproj --output {1}", libraryName, publishDir); cleanCmd += " --nologo"; ExecuteDotnet(fullPackageReferencesProjFolder, cleanCmd); string publishCmd = String.Format("publish {0}.csproj --output {1}", libraryName, publishDir); publishCmd += " --nologo"; ExecuteDotnet(fullPackageReferencesProjFolder, publishCmd); // save db PackageReferencesCollection dbfile = new PackageReferencesCollection(); foreach (Package package in packages) dbfile.AddPackage(package); dbfile.SaveBinary(intermediatePackageCollectionPath); } // load packages string fullPublishDir = Path.Combine(fullPackageReferencesProjFolder, publishDir); fullPublishDir = PathHelper.Normalize(fullPublishDir); string[] references = Directory.GetFiles(fullPublishDir, "*.dll"); foreach (string assemblyFile in references) { string assemblyFileName = Path.GetFileNameWithoutExtension(assemblyFile); // skip the empty project and known pipeline libraries. if (assemblyFileName == libraryName) continue; if (assemblyFileName.StartsWith("Xna.Framework")) continue; manager.AddAssembly(assemblyFile); } return; } private void ExecuteDotnet(string workingDirectory, string args) { ProcessStartInfo startInfo = new ProcessStartInfo("dotnet", args); startInfo.CreateNoWindow = true; startInfo.WorkingDirectory = workingDirectory; startInfo.UseShellExecute = false; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; using (Process process = Process.Start(startInfo)) { process.WaitForExit(); if (process.ExitCode != 0) { string output = process.StandardOutput.ReadToEnd(); Console.Write(output); string error = process.StandardError.ReadToEnd(); Console.Write(error); throw new PipelineException(output + error); } } } private void CleanItems(SourceFileCollection previousFileCollection, bool targetChanged) { bool cleanOrRebuild = Clean || Rebuild; for (int i = 0; i < previousFileCollection.SourceFilesCount; i++) { string prevSourceFile = previousFileCollection.SourceFiles[i]; bool inContent = _contentItemsMap.ContainsKey(prevSourceFile.ToLowerInvariant()); bool cleanOldContent = !inContent && !Incremental; bool cleanRebuiltContent = inContent && cleanOrRebuild; if (targetChanged || cleanRebuiltContent || cleanOldContent) { string prevDestFile = previousFileCollection.DestFiles[i]; _manager.ResolveOutputFilepath(prevSourceFile, ref prevDestFile); _manager.CleanContent( prevDestFile); lock (_manager._buildEventsMap) { _manager._buildEventsMap.Remove(prevSourceFile); } } } } private void BuildItemsSingleThread(List contentItems, SourceFileCollection fileCollection) { foreach (ContentItem contentItem in contentItems) { try { BuildEvent buildEvent = _manager.CreateBuildEvent( contentItem.SourceFile, contentItem.OutputFile, contentItem.Importer, contentItem.Processor, contentItem.ProcessorParams ); // Load the previous content event if it exists. BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile); _manager.BuildContent(_manager.Logger, buildEvent, cachedBuildEvent, buildEvent.DestFile); fileCollection.AddFile(contentItem.SourceFile, contentItem.OutputFile); SuccessCount++; } catch (InvalidContentException ex) { WriteError(ex, contentItem.SourceFile); } catch (PipelineException ex) { WriteError(ex, contentItem.SourceFile); } catch (Exception ex) { WriteError(ex, contentItem.SourceFile); } } } private void BuildItemsMultiThread(List contentItems, SourceFileCollection fileCollection) { var buildTaskQueue = new Queue>(); var activeBuildTasks = new List>(); bool firstTask = true; int maxConcurrentTasks = Environment.ProcessorCount; int ci = 0; while (ci < contentItems.Count || activeBuildTasks.Count > 0 || buildTaskQueue.Count > 0) { // Create build tasks. while (activeBuildTasks.Count < maxConcurrentTasks && ci < contentItems.Count) { BuildAsyncState buildState = new BuildAsyncState() { SourceFile = contentItems[ci].SourceFile, OutputFile = contentItems[ci].OutputFile, Importer = contentItems[ci].Importer, Processor = contentItems[ci].Processor, ProcessorParams = contentItems[ci].ProcessorParams, Logger = new ConsoleAsyncLogger(_manager.Logger), }; buildState.Logger.Immediate = firstTask; Task task = Task.Factory.StartNew((stateobj) => { BuildAsyncState state = stateobj as BuildAsyncState; //Console.WriteLine("Task Started - " + Path.GetFileName(state.SourceFile)); BuildEvent buildEvent = _manager.CreateBuildEvent( state.SourceFile, state.OutputFile, state.Importer, state.Processor, state.ProcessorParams ); // Load the previous content event if it exists. BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile); _manager.BuildContent(state.Logger, buildEvent, cachedBuildEvent, buildEvent.DestFile); //Console.WriteLine("Task Ended - " + Path.GetFileName(state.SourceFile)); return buildEvent; }, buildState, TaskCreationOptions.PreferFairness); buildTaskQueue.Enqueue(task); activeBuildTasks.Add(task); firstTask = false; ci++; } if (buildTaskQueue.Count > 0) { // Get task at the top of the queue. var topTask = buildTaskQueue.Peek(); var topBuildState = topTask.AsyncState as BuildAsyncState; topBuildState.Logger.Immediate = true; // Remove task from queue if completed. if (topTask.IsCompleted || topTask.IsCanceled || topTask.IsFaulted) { buildTaskQueue.Dequeue(); //flash log topBuildState.Logger.Flush(); if (topTask.IsFaulted) { if (topTask.Exception.InnerException is InvalidContentException) { InvalidContentException ex = topTask.Exception.InnerException as InvalidContentException; WriteError(ex, topBuildState.SourceFile); } else if (topTask.Exception.InnerException is PipelineException) { PipelineException ex = topTask.Exception.InnerException as PipelineException; WriteError(ex, topBuildState.SourceFile); } else { Exception ex = topTask.Exception.InnerException; WriteError(ex, topBuildState.SourceFile); } } else if (topTask.IsCanceled) { // } continue; } } Task.WaitAny(activeBuildTasks.ToArray()); // Remove completed tasks. for (int i = activeBuildTasks.Count - 1; i >= 0; i--) { Task task = activeBuildTasks[i]; if (task.IsCompleted || task.IsCanceled || task.IsFaulted) { activeBuildTasks.RemoveAt(i); if (task.IsCompleted) { BuildAsyncState buildState = task.AsyncState as BuildAsyncState; fileCollection.AddFile(buildState.SourceFile, buildState.OutputFile); SuccessCount++; } } } } } private void CopyItems(List copyItems, string projectDirectory, string outputPath) { object syncHandle = new object(); Parallel.ForEach(copyItems, (item) => { try { // Figure out an asset name relative to the project directory, // retaining the file extension. // Note that replacing a sub-path like this requires consistent // directory separator characters. string relativeName = item.Link; if (string.IsNullOrWhiteSpace(relativeName)) relativeName = item.SourceFile.Replace(projectDirectory, string.Empty) .TrimStart(Path.DirectorySeparatorChar) .TrimStart(Path.AltDirectorySeparatorChar); string dest = Path.Combine(outputPath, relativeName); // Only copy if the source file is newer than the destination. // We may want to provide an option for overriding this, but for // nearly all cases this is the desired behavior. if (File.Exists(dest) && !Rebuild) { DateTime srcTime = File.GetLastWriteTimeUtc(item.SourceFile); DateTime dstTime = File.GetLastWriteTimeUtc(dest); if (srcTime <= dstTime) { lock (syncHandle) { if (!this.Quiet) { string skipSourceFileOutput = String.Format("Skipping {0}", item.SourceFile); //if (!string.IsNullOrEmpty(item.Link)) // skipSourceFileOutput = String.Format("Skipping {0} => {1}", item.SourceFile, item.Link); Console.WriteLine(skipSourceFileOutput); } SuccessCount++; return; } } } DateTime startTime = DateTime.UtcNow; // Create the destination directory if it doesn't already exist. string destPath = Path.GetDirectoryName(dest); if (!Directory.Exists(destPath)) Directory.CreateDirectory(destPath); File.Copy(item.SourceFile, dest, true); // Destination file should not be read-only even if original was. FileAttributes fileAttr = File.GetAttributes(dest); fileAttr = fileAttr & (~FileAttributes.ReadOnly); File.SetAttributes(dest, fileAttr); TimeSpan buildTime = DateTime.UtcNow - startTime; } catch (Exception ex) { lock (syncHandle) { string buildSourceFileOutput = String.Format("{0}", item.SourceFile); if (!string.IsNullOrEmpty(item.Link)) { //buildSourceFileOutput = String.Format("{0} => {1}", item.SourceFile, item.Link); } Console.WriteLine(buildSourceFileOutput); WriteError(ex, item.SourceFile); ErrorCount++; return; } } lock (syncHandle) { string buildSourceFileOutput = String.Format("{0}", item.SourceFile); if (!string.IsNullOrEmpty(item.Link)) { //buildSourceFileOutput = String.Format("{0} => {1}", item.SourceFile, item.Link); } Console.WriteLine(buildSourceFileOutput); SuccessCount++; return; } }); } private void WriteError(InvalidContentException ex, string sourceFile) { string message = string.Empty; if (ex.ContentIdentity != null && !string.IsNullOrEmpty(ex.ContentIdentity.SourceFilename)) { message = ex.ContentIdentity.SourceFilename; if (!string.IsNullOrEmpty(ex.ContentIdentity.FragmentIdentifier)) message += "(" + ex.ContentIdentity.FragmentIdentifier + ")"; else message += " "; } else { message = sourceFile; message += " "; } message += ": error "; // extract errorCode from message System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(ex.Message, @"([A-Z]+[0-9]+):(.+)"); if (match.Success || match.Groups.Count == 2) message += match.Groups[1].Value + " : " + match.Groups[2].Value; else message += ": " + ex.Message; Console.Error.WriteLine(message); ErrorCount++; } private void WriteError(PipelineException ex, string sourceFile) { Console.Error.WriteLine("{0} : error : {1}", sourceFile, ex.Message); if (ex.InnerException != null) Console.Error.WriteLine(ex.InnerException.ToString()); ErrorCount++; } private void WriteError(Exception ex, string sourceFile) { Console.Error.WriteLine("{0} : error : {1}", sourceFile, ex.Message); if (ex.InnerException != null) Console.Error.WriteLine(ex.InnerException.ToString()); ErrorCount++; } private void DeleteFileCollection(string intermediatePath) { string dbname = _responseFilename; if (dbname == String.Empty) dbname = PipelineManager.DefaultFileCollectionFilename; string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension)); if (File.Exists(intermediateFileCollectionPath)) File.Delete(intermediateFileCollectionPath); } private void SaveFileCollection(string intermediatePath, SourceFileCollection fileCollection) { string dbname = _responseFilename; if (dbname == String.Empty) dbname = PipelineManager.DefaultFileCollectionFilename; string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension)); fileCollection.SaveBinary(intermediateFileCollectionPath); } private SourceFileCollection LoadFileCollection(string intermediatePath) { string dbname = _responseFilename; if (dbname == String.Empty) dbname = PipelineManager.DefaultFileCollectionFilename; string intermediateFileCollectionPath = Path.Combine(intermediatePath, Path.ChangeExtension(dbname, SourceFileCollection.Extension)); return SourceFileCollection.LoadBinary(intermediateFileCollectionPath); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/Directory.Build.props ================================================ obj\$(MSBuildProjectName)\ ================================================ FILE: Tools/MonoGame.Content.Builder/ImporterContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class ImporterContext : ContentImporterContext { private readonly PipelineManager _manager; ConsoleLogger _logger; private readonly BuildEvent _buildEvent; public ImporterContext(PipelineManager manager, ConsoleLogger logger, BuildEvent buildEvent) { _manager = manager; _logger = logger; _buildEvent = buildEvent; } public override string IntermediateDirectory { get { return _manager.IntermediateDirectory; } } public override string OutputDirectory { get { return _manager.OutputDirectory; } } public override ContentBuildLogger Logger { get { return _logger; } } public override void AddDependency(string filename) { if (!_buildEvent.Dependencies.Contains(filename)) _buildEvent.Dependencies.Add(filename); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/MGCB.csproj ================================================  4.2.9001.0 4.2.9001.0 false False net48;net8.0-windows;net8.0 {4243474D-572E-6E69-646F-77734D474342} Exe Microsoft.Xna.Framework.Content.Pipeline.Builder MGCB true CS1591;CS1574;CS0419 False bin\Windows\$(Platform)\$(Configuration)\ obj\Windows\$(Platform)\$(Configuration)\ $(DefineConstants);WINDOWSDX 7.3 App.ico true true win-x64 true {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework {E37F98D7-C4E8-4556-B322-AEF99638ECE1} Xna.Framework.Design {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices {7AE82BAB-5F52-427A-8F6F-DA829261FF9C} Xna.Framework.Storage {6D0D985D-B256-4208-9E78-77897D461698} Xna.Framework.XR {73509f44-3566-4b79-bb47-c7c6e2aa2351} Xna.Framework.Content.Pipeline {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics {476ee43e-e93b-4019-b8b7-ad52c4216456} Xna.Framework.Content.Pipeline.Graphics.MojoProcessor {63486463-8aee-483e-862a-7720cd62b4df} Xna.Framework.Content.Pipeline.Media {7DE47032-A904-4C29-BD22-2D235E8D91BA} Kni.Platform.WinForms.DX11 runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Tools/MonoGame.Content.Builder/Package.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { public struct Package : IComparable { public string Name; public string Version; public static Package Parse(string packageReference) { packageReference.Trim(); Package package; package.Name = packageReference; package.Version = String.Empty; string[] split = packageReference.Split(' '); if (split.Length == 2) { package.Name = split[0].Trim(); package.Version = split[1].Trim(); } return package; } public override string ToString() { string result = this.Name; if (this.Version != String.Empty) result += " " + this.Version; return result; } int IComparable.CompareTo(Package other) { int compName = this.Name.CompareTo(other.Name); if (compName != 0) return compName; int compVersion = this.Version.CompareTo(other.Version); if (compVersion != 0) return compVersion; return 0; } } } ================================================ FILE: Tools/MonoGame.Content.Builder/PackageReferencesCollection.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { public sealed class PackageReferencesCollection { public const string Extension = ".kniContent"; public List Packages { get; set; } public PackageReferencesCollection() { Packages = new List(); } public void SaveBinary(string filePath) { using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) using (var writer = new PackageReferencesCollectionBinaryWriter(stream)) { writer.Write(this); } } public static PackageReferencesCollection LoadBinary(string filePath) { try { if (!File.Exists(filePath)) return null; using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) using (var reader = new PackageReferencesCollectionBinaryReader(stream)) { PackageReferencesCollection result = new PackageReferencesCollection(); reader.Read(result); return result; } } catch (Exception) { return null; } } public int PackagesCount { get { return this.Packages.Count; } } internal void AddPackage(Package package) { this.Packages.Add(package); } internal class PackageReferencesCollectionBinaryWriter : BinaryWriter { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 3; // PackageReferencesCollection data public PackageReferencesCollectionBinaryWriter(Stream output) : base(output) { } internal void Write(PackageReferencesCollection value) { Write((byte)Header[0]); Write((byte)Header[1]); Write((byte)Header[2]); Write((byte)Header[3]); Write((Int16)MajorVersion); Write((Int16)MinorVersion); Write((Int32)DataType); Write((Int32)0); // reserved WritePackedInt(value.Packages.Count); for (int i = 0; i < value.Packages.Count; i++) { Write(value.Packages[i].Name); Write(value.Packages[i].Version); } return; } protected void WritePackedInt(int value) { // write zigzag encoded int int zzint = ((value << 1) ^ (value >> 31)); Write7BitEncodedInt(zzint); } private void WriteStringOrNull(string value) { if (value != null) { Write(true); Write(value); } else Write(false); } } internal class PackageReferencesCollectionBinaryReader : BinaryReader { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 3; // PackageReferencesCollection data public PackageReferencesCollectionBinaryReader(Stream output) : base(output) { } internal void Read(PackageReferencesCollection value) { if (ReadByte() != Header[0] || ReadByte() != Header[1] || ReadByte() != Header[2] || ReadByte() != Header[3]) throw new Exception("Invalid file."); if (ReadInt16() != MajorVersion || ReadInt16() != MinorVersion) throw new Exception("Invalid file version."); int dataType = ReadInt32(); if (dataType != DataType) throw new Exception("Invalid data type."); int reserved0 = ReadInt32(); int packagesCount = ReadPackedInt(); value.Packages = new List(packagesCount); for (int i = 0; i < packagesCount; i++) { Package package; package.Name = ReadString(); package.Version = ReadString(); value.Packages.Add(package); } return; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } private string ReadStringOrNull() { if (ReadBoolean()) return ReadString(); else return null; } } } } ================================================ FILE: Tools/MonoGame.Content.Builder/PathHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal static class PathHelper { /// /// The/universal/standard/directory/seperator. /// public const char DirectorySeparator = '/'; /// /// Returns a path string normalized to the/universal/standard. /// public static string Normalize(string path) { return path.Replace('\\', '/'); } /// /// Returns a directory path string normalized to the/universal/standard /// with a trailing seperator. /// public static string NormalizeDirectory(string path) { return path.Replace('\\', '/').TrimEnd('/') + '/'; } /// /// Returns a path string normalized to the\Windows\standard. /// public static string NormalizeWindows(string path) { return path.Replace('/', '\\'); } /// /// Returns a path relative to the base path. /// /// The path to make relative to. Must end with directory seperator. /// The path to be made relative to the basePath. /// The relative path or the original string if it is not absolute or cannot be made relative. public static string GetRelativePath(string basePath, string path) { Uri uri; if (!Uri.TryCreate(path, UriKind.Absolute, out uri)) return path; uri = new Uri(basePath).MakeRelativeUri(uri); var str = Uri.UnescapeDataString(uri.ToString()); return Normalize(str); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/PipelineManager.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class PipelineManager { [DebuggerDisplay("ImporterInfo: {type.Name}")] private struct ImporterInfo { public ContentImporterAttribute attribute; public Type type; public DateTime assemblyTimestamp; }; private List _importers; [DebuggerDisplay("ProcessorInfo: {type.Name}")] private struct ProcessorInfo { public ContentProcessorAttribute attribute; public Type type; public DateTime assemblyTimestamp; }; private List _processors; private List _writers; // Keep track of all built assets. (Required to resolve automatic names "AssetName_n".) // Key = absolute, normalized path of source file // Value = list of build events // (Note: When using external references, an asset may be built multiple times // with different parameters.) internal readonly Dictionary> _buildEventsMap; // Store default values for content processor parameters. (Necessary to compare processor // parameters. See PipelineBuildEvent.AreParametersEqual.) // Key = name of content processor // Value = processor parameters private readonly Dictionary _processorDefaultValues; private readonly SortedSet _processingBuildEvents; public string ProjectDirectory { get; private set; } public string ResponseFilename { get; private set; } public string OutputDirectory { get; private set; } public string IntermediateDirectory { get; private set; } public bool Quiet { get; private set; } private ContentCompiler _compiler; internal readonly ConsoleLogger Logger; public List Assemblies { get; private set; } /// /// The current target graphics profile for which all content is built. /// public GraphicsProfile Profile { get; set; } /// /// The current target platform for which all content is built. /// public TargetPlatform Platform { get; set; } /// /// The build configuration passed thru to content processors. /// public string Config { get; set; } /// /// Gets or sets the compression method. /// public ContentCompression Compression { get; set; } internal const String DefaultFileCollectionFilename = "assetsdb.kniContent"; public PipelineManager(string projectDir, string responseFilename, string outputDir, string intermediateDir, bool quiet) { _buildEventsMap = new Dictionary>(); _processorDefaultValues = new Dictionary(); _processingBuildEvents = new SortedSet(); Assemblies = new List(); Logger = new ConsoleLogger(); ProjectDirectory = PathHelper.NormalizeDirectory(projectDir); ResponseFilename = responseFilename; OutputDirectory = PathHelper.NormalizeDirectory(outputDir); IntermediateDirectory = PathHelper.NormalizeDirectory(intermediateDir); Quiet = quiet; } public void AddAssembly(string assemblyFilePath) { if (assemblyFilePath == null) throw new ArgumentException("assemblyFilePath cannot be null!"); if (!Path.IsPathRooted(assemblyFilePath)) throw new ArgumentException("assemblyFilePath must be absolute!"); // Make sure we're not adding the same assembly twice. assemblyFilePath = PathHelper.Normalize(assemblyFilePath); if (!this.Assemblies.Contains(assemblyFilePath)) { this.Assemblies.Add(assemblyFilePath); //TODO need better way to update caches _processors = null; _importers = null; _writers = null; } } private void ResolveAssemblies() { _importers = new List(); _processors = new List(); _writers = new List(); // import the build-in Processors LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.IContentProcessor).Assembly); // Common LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.SoundEffectProcessor).Assembly); // Audio LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.VideoProcessor).Assembly); // Media LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.TextureProcessor).Assembly); // Graphics LoadAssembly(typeof(Microsoft.Xna.Framework.Content.Pipeline.Processors.EffectProcessor).Assembly); // Graphics Effects // import the referenced Processors foreach (string assemblyPath in Assemblies) { try { LoadAssembly(Assembly.LoadFrom(assemblyPath)); } catch (BadImageFormatException e) { Logger.LogWarning(null, null, "Assembly is either corrupt or built using a different " + "target platform than this process. Reference another target architecture (x86, x64, " + "AnyCPU, etc.) of this assembly. '{0}': {1}", assemblyPath, e.Message); // The assembly failed to load... nothing // we can do but ignore it. continue; } catch (Exception e) { Logger.LogWarning(null, null, "Failed to load assembly '{0}': {1}", assemblyPath, e.Message); continue; } } } private void LoadAssembly(Assembly asm) { Type[] exportedTypes; DateTime assemblyTimestamp; try { exportedTypes = asm.GetTypes(); assemblyTimestamp = File.GetLastWriteTime(asm.Location); } catch (ReflectionTypeLoadException e) { string missingTypes = String.Empty; foreach (var le in e.LoaderExceptions) missingTypes += le.Message; Logger.LogWarning(null, null, missingTypes + " '{0}': {1}", asm.Location, e.Message); // The assembly failed to load... nothing // we can do but ignore it. return; } catch (Exception e) { Logger.LogWarning(null, null, "Failed to load assembly '{0}': {1}", asm.Location, e.Message); return; } foreach (Type type in exportedTypes) { if (type.IsAbstract) continue; if (type.GetInterface(@"IContentImporter") != null) { var attributes = type.GetCustomAttributes(typeof(ContentImporterAttribute), false); if (attributes.Length != 0) { var importerAttribute = attributes[0] as ContentImporterAttribute; _importers.Add(new ImporterInfo { attribute = importerAttribute, type = type, assemblyTimestamp = assemblyTimestamp }); } else { // If no attribute specify default one var importerAttribute = new ContentImporterAttribute(".*"); importerAttribute.DefaultProcessor = ""; importerAttribute.DisplayName = type.Name; var importerInfo = new ImporterInfo { attribute = importerAttribute, type = type, assemblyTimestamp = assemblyTimestamp }; if (_importers.Contains(importerInfo)) { Logger.LogWarning(null, null, "Duplicate Type '{0}': {1}", type.Name); continue; } _importers.Add(importerInfo); } } else if (type.GetInterface(@"IContentProcessor") != null) { var attributes = type.GetCustomAttributes(typeof(ContentProcessorAttribute), false); if (attributes.Length != 0) { var processorAttribute = attributes[0] as ContentProcessorAttribute; var processorInfo = new ProcessorInfo { attribute = processorAttribute, type = type, assemblyTimestamp = assemblyTimestamp }; if (_processors.Contains(processorInfo)) { Logger.LogWarning(null, null, "Duplicate Type '{0}': {1}", type.Name); continue; } _processors.Add(processorInfo); } } else if (type.GetInterface(@"ContentTypeWriter") != null) { // TODO: This doesn't work... how do i find these? _writers.Add(type); } } } public Type[] GetImporterTypes() { if (_importers == null) ResolveAssemblies(); List types = new List(); foreach (var item in _importers) { types.Add(item.type); } return types.ToArray(); } public Type[] GetProcessorTypes() { if (_processors == null) ResolveAssemblies(); List types = new List(); foreach (var item in _processors) { types.Add(item.type); } return types.ToArray(); } private IContentImporter CreateImporter(string importerName) { if (_importers == null) ResolveAssemblies(); // Search for the importer. foreach (var info in _importers) { if (info.type.Name.Equals(importerName)) return Activator.CreateInstance(info.type) as IContentImporter; } throw new PipelineException("Failed to create importer '{0}'", importerName); } public string FindImporterByExtension(string ext) { if (_importers == null) ResolveAssemblies(); // Search for the importer. foreach (var info in _importers) { if (info.attribute.FileExtensions.Any(e => e.Equals(ext, StringComparison.InvariantCultureIgnoreCase))) return info.type.Name; } return null; } public DateTime GetImporterAssemblyTimestamp(string name) { if (_importers == null) ResolveAssemblies(); // Search for the importer. foreach (var info in _importers) { if (info.type.Name.Equals(name)) return info.assemblyTimestamp; } return DateTime.MaxValue; } public string FindDefaultProcessor(string importer) { if (_importers == null) ResolveAssemblies(); // Search for the importer. foreach (var info in _importers) { if (info.type.Name == importer) return info.attribute.DefaultProcessor; } return null; } public Type GetProcessorType(string name) { if (_processors == null) ResolveAssemblies(); // Search for the processor type. foreach (var info in _processors) { if (info.type.Name.Equals(name)) return info.type; } return null; } public void ResolveImporterAndProcessor(string sourceFilepath, ref string importerName, ref string processorName) { // Resolve the importer name. if (string.IsNullOrEmpty(importerName)) importerName = FindImporterByExtension(Path.GetExtension(sourceFilepath)); if (string.IsNullOrEmpty(importerName)) throw new Exception(string.Format("Couldn't find a default importer for '{0}'!", sourceFilepath)); // Resolve the processor name. if (string.IsNullOrEmpty(processorName)) processorName = FindDefaultProcessor(importerName); if (string.IsNullOrEmpty(processorName)) throw new Exception(string.Format("Couldn't find a default processor for importer '{0}'!", importerName)); } public IContentProcessor CreateProcessor(string name, OpaqueDataDictionary processorParameters) { Type processorType = GetProcessorType(name); if (processorType == null) return null; // Create the processor. IContentProcessor processor = (IContentProcessor)Activator.CreateInstance(processorType); // Convert and set the parameters on the processor. foreach (var param in processorParameters) { PropertyInfo property = processorType.GetProperty(param.Key, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance); if (property == null || property.GetSetMethod(false) == null) continue; // If the property value is already of the correct type then set it. if (property.PropertyType.IsInstanceOfType(param.Value)) property.SetValue(processor, param.Value, null); else { // Find a type converter for this property. TypeConverter typeConverter = TypeDescriptor.GetConverter(property.PropertyType); if (typeConverter.CanConvertFrom(param.Value.GetType())) { object propValue = typeConverter.ConvertFrom(null, CultureInfo.InvariantCulture, param.Value); property.SetValue(processor, propValue, null); } } } return processor; } /// /// Gets the default values for the content processor parameters. /// /// The name of the content processor. /// /// A dictionary containing the default value for each parameter. Returns /// if the content processor has not been created yet. /// public OpaqueDataDictionary GetProcessorDefaultValues(string processorName) { // null is not allowed as key in dictionary. if (processorName == null) processorName = string.Empty; OpaqueDataDictionary processorDefaultValues; lock (_processorDefaultValues) { if (!_processorDefaultValues.TryGetValue(processorName, out processorDefaultValues)) { // Create the content processor instance and read the default values. processorDefaultValues = new OpaqueDataDictionary(); var processorType = GetProcessorType(processorName); if (processorType != null) { try { var processor = (IContentProcessor)Activator.CreateInstance(processorType); var properties = processorType.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance); foreach (var property in properties) processorDefaultValues.Add(property.Name, property.GetValue(processor, null)); } catch { // Ignore exception. Will be handled in ProcessContent. } } _processorDefaultValues.Add(processorName, processorDefaultValues); } } return processorDefaultValues; } public DateTime GetProcessorAssemblyTimestamp(string name) { if (_processors == null) ResolveAssemblies(); // Search for the processor. foreach (var info in _processors) { if (info.type.Name.Equals(name)) return info.assemblyTimestamp; } return DateTime.MaxValue; } public OpaqueDataDictionary ValidateProcessorParameters(string processorName, OpaqueDataDictionary processorParameters) { OpaqueDataDictionary result = new OpaqueDataDictionary(); Type processorType = GetProcessorType(processorName); if (processorType == null || processorParameters == null) { return result; } foreach (var param in processorParameters) { PropertyInfo property = processorType.GetProperty(param.Key, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance); if (property == null || property.GetSetMethod(false) == null) continue; // Make sure we can assign the value. if (!property.PropertyType.IsInstanceOfType(param.Value)) { // Make sure we can convert the value. TypeConverter typeConverter = TypeDescriptor.GetConverter(property.PropertyType); if (!typeConverter.CanConvertFrom(param.Value.GetType())) continue; } result.Add(param.Key, param.Value); } return result; } internal void ResolveOutputFilepath(string sourceFilepath, ref string outputFilepath) { // If the output path is null... build it from the source file path. if (string.IsNullOrEmpty(outputFilepath)) { string filename = Path.GetFileNameWithoutExtension(sourceFilepath) + ".xnb"; string directory = PathHelper.GetRelativePath(ProjectDirectory, Path.GetDirectoryName(sourceFilepath) + Path.DirectorySeparatorChar); outputFilepath = Path.Combine(OutputDirectory, directory, filename); } else { // If the extension is not XNB or the source file extension then add XNB. string sourceExt = Path.GetExtension(sourceFilepath); if (outputFilepath.EndsWith(sourceExt, StringComparison.InvariantCultureIgnoreCase)) outputFilepath = outputFilepath.Substring(0, outputFilepath.Length - sourceExt.Length); if (!outputFilepath.EndsWith(".xnb", StringComparison.InvariantCultureIgnoreCase)) outputFilepath += ".xnb"; // If the path isn't rooted then put it into the output directory. if (!Path.IsPathRooted(outputFilepath)) outputFilepath = Path.Combine(OutputDirectory, outputFilepath); } outputFilepath = PathHelper.Normalize(outputFilepath); } private void DeleteBuildEvent(string destFile) { string dbname = ResponseFilename; if (dbname == String.Empty) dbname = DefaultFileCollectionFilename; string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension); string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath); if (File.Exists(intermediateEventPath)) File.Delete(intermediateEventPath); } private void SaveBuildEvent(string destFile, BuildEvent buildEvent) { string dbname = ResponseFilename; if (dbname == String.Empty) dbname = DefaultFileCollectionFilename; string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension); string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath); intermediateEventPath = Path.GetFullPath(intermediateEventPath); buildEvent.SaveBinary(intermediateEventPath); } internal BuildEvent LoadBuildEvent(string destFile) { string dbname = ResponseFilename; if (dbname == String.Empty) dbname = DefaultFileCollectionFilename; string relativeEventPath = Path.ChangeExtension(PathHelper.GetRelativePath(OutputDirectory, destFile), BuildEvent.Extension); string intermediateEventPath = Path.Combine(IntermediateDirectory, Path.GetFileNameWithoutExtension(dbname), relativeEventPath); intermediateEventPath = Path.GetFullPath(intermediateEventPath); return BuildEvent.LoadBinary(intermediateEventPath); } internal BuildEvent CreateBuildEvent(string sourceFilepath, string outputFilepath, string importerName, string processorName, OpaqueDataDictionary processorParameters) { sourceFilepath = PathHelper.Normalize(sourceFilepath); ResolveOutputFilepath(sourceFilepath, ref outputFilepath); ResolveImporterAndProcessor(sourceFilepath, ref importerName, ref processorName); OpaqueDataDictionary ProcessorParams = ValidateProcessorParameters(processorName, processorParameters); BuildEvent buildEvent = new BuildEvent { SourceFile = sourceFilepath, DestFile = outputFilepath, Importer = importerName, Processor = processorName, Parameters = ProcessorParams, }; return buildEvent; } internal void BuildContent(ConsoleLogger logger, BuildEvent buildEvent, BuildEvent cachedBuildEvent, string destFilePath) { if (!File.Exists(buildEvent.SourceFile)) { logger.LogMessage("{0}", buildEvent.SourceFile); throw new PipelineException("The source file '{0}' does not exist!", buildEvent.SourceFile); } logger.PushFile(buildEvent.SourceFile); OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(buildEvent.Processor); // Keep track of all build events. (Required to resolve automatic names "AssetName_n".) TrackBuildEvent(_buildEventsMap, buildEvent, processorDefaultValues); bool building = RegisterBuildEvent(buildEvent); bool rebuild = buildEvent.NeedsRebuild(this, cachedBuildEvent); rebuild = rebuild && !building; if (rebuild) logger.LogMessage("{0}", buildEvent.SourceFile); if (!rebuild && !this.Quiet) logger.LogMessage("Skipping {0}", buildEvent.SourceFile); logger.Indent(); try { if (!rebuild && cachedBuildEvent != null) { // While this asset doesn't need to be rebuilt the dependent assets might. foreach (string asset in cachedBuildEvent.BuildAsset) { BuildEvent assetCachedBuildEvent = LoadBuildEvent(asset); // If we cannot find the cached event for the dependancy // then we have to trigger a rebuild of the parent content. if (assetCachedBuildEvent == null) { rebuild = true; break; } BuildEvent depBuildEvent = new BuildEvent { SourceFile = assetCachedBuildEvent.SourceFile, DestFile = assetCachedBuildEvent.DestFile, Importer = assetCachedBuildEvent.Importer, Processor = assetCachedBuildEvent.Processor, Parameters = assetCachedBuildEvent.Parameters, }; // Give the asset a chance to rebuild. BuildContent(logger, depBuildEvent, assetCachedBuildEvent, asset); } } // Do we need to rebuild? if (rebuild) { // Import and process the content. ContentImporterContext importContext = new ImporterContext(this, logger, buildEvent); if (!File.Exists(buildEvent.SourceFile)) throw new PipelineException("The source file '{0}' does not exist!", buildEvent.SourceFile); // Store the last write time of the source file so we can detect if it has been changed. buildEvent.SourceTime = File.GetLastWriteTime(buildEvent.SourceFile); object importedObject = ImportContent(buildEvent.Importer, importContext, buildEvent.SourceFile); ContentProcessorContext processContext = new ProcessorContext(this, logger, buildEvent); object processedObject = ProcessContent(buildEvent.Processor, processContext, importedObject); // Write the content to disk. WriteXnb(processedObject, processContext); // Store the last write time of the output XNB here so we can verify it hasn't been tampered with. buildEvent.DestTime = File.GetLastWriteTime(processContext.OutputFilename); // Store the timestamp of the DLLs containing the importer and processor. buildEvent.ImporterTime = GetImporterAssemblyTimestamp(buildEvent.Importer); buildEvent.ProcessorTime = GetProcessorAssemblyTimestamp(buildEvent.Processor); // Store the new event into the intermediate folder. SaveBuildEvent(destFilePath, buildEvent); } } finally { logger.Unindent(); logger.PopFile(); } } private bool RegisterBuildEvent(BuildEvent buildEvent) { lock (_processingBuildEvents) { if (!_processingBuildEvents.Contains(buildEvent.DestFile)) { _processingBuildEvents.Add(buildEvent.DestFile); return false; } } return true; } public object ImportContent(string importerName, ContentImporterContext importContext, string sourceFile) { IContentImporter importer = CreateImporter(importerName); // Try importing the content. object importedObject; try { importedObject = importer.Import(sourceFile, importContext); return importedObject; } catch (PipelineException) { throw; } catch (InvalidContentException) { throw; } catch (Exception inner) { throw new PipelineException(string.Format("Importer '{0}' had unexpected failure!", importerName), inner); } } public object ProcessContent(string processorName, ContentProcessorContext processContext, object importedObject) { // The pipelineEvent.Processor can be null or empty. In this case the // asset should be imported but not processed. if (string.IsNullOrEmpty(processorName)) return importedObject; IContentProcessor processor = CreateProcessor2(processorName, processContext.Parameters, importedObject.GetType()); // Process the imported object. object processedObject; try { processedObject = processor.Process(importedObject, processContext); return processedObject; } catch (PipelineException) { throw; } catch (InvalidContentException) { throw; } catch (Exception inner) { throw new PipelineException(string.Format("Processor '{0}' had unexpected failure!", processorName), inner); } } public void CleanContent(string outputFilepath) { // First try to load the event file. BuildEvent cachedBuildEvent = LoadBuildEvent(outputFilepath); if (cachedBuildEvent != null) { // Remove related output files (non-XNB files) that were copied to the output folder. foreach (var asset in cachedBuildEvent.BuildOutput) { Logger.LogMessage("Cleaning {0}", asset); // Remove file (non .xnb file) from output folder. if (File.Exists(asset)) File.Delete(asset); } // Recursively clean additional (nested) assets. foreach (string asset in cachedBuildEvent.BuildAsset) { BuildEvent assetCachedBuildEvent = LoadBuildEvent(asset); if (assetCachedBuildEvent != null) { string assetOutputFilepath = asset; ResolveOutputFilepath(string.Empty, ref assetOutputFilepath); CleanContent(assetOutputFilepath); continue; } Logger.LogMessage("Cleaning {0}", asset); // Remove asset (.xnb file) from output folder. if (File.Exists(asset)) File.Delete(asset); // Remove event file (.kniContent file) from intermediate folder. DeleteBuildEvent(asset); } } Logger.LogMessage("Cleaning {0}", outputFilepath); // Remove asset (.xnb file) from output folder. if (File.Exists(outputFilepath)) File.Delete(outputFilepath); // Remove event file (.kniContent file) from intermediate folder. DeleteBuildEvent(outputFilepath); } private void WriteXnb(object content, ContentProcessorContext processContext) { // Make sure the output directory exists. string outputFileDir = Path.GetDirectoryName(processContext.OutputFilename); Directory.CreateDirectory(outputFileDir); if (_compiler == null) _compiler = new ContentCompiler(); // Write the XNB. using (Stream stream = new FileStream(processContext.OutputFilename, FileMode.Create, FileAccess.Write, FileShare.None)) _compiler.Compile(stream, content, Platform, Profile, Compression, OutputDirectory, outputFileDir); } private IContentProcessor CreateProcessor2(string processorName, OpaqueDataDictionary processorParameters, Type importedObjectType) { IContentProcessor processor = CreateProcessor(processorName, processorParameters); if (processor == null) throw new PipelineException("Failed to create processor '{0}'", processorName); // Make sure the input type is valid. if (!processor.InputType.IsAssignableFrom(importedObjectType)) { throw new PipelineException( string.Format("The type '{0}' cannot be processed by {1} as a {2}!", importedObjectType.FullName, processorName, processor.InputType.FullName)); } return processor; } /// /// Stores the pipeline build event (in memory) if no matching event is found. /// /// The pipeline build event. internal static void TrackBuildEvent(Dictionary> buildEventsMap, BuildEvent buildEvent, OpaqueDataDictionary processorDefaultValues) { lock (buildEventsMap) { if (!buildEventsMap.TryGetValue(buildEvent.SourceFile, out List buildEvents)) { buildEvents = new List(1); buildEventsMap.Add(buildEvent.SourceFile, buildEvents); } BuildEvent matchedBuildEvent = FindMatchingEvent(buildEvents, buildEvent.DestFile, buildEvent.Importer, buildEvent.Processor, buildEvent.Parameters, processorDefaultValues); if (matchedBuildEvent == null) buildEvents.Add(buildEvent); } } /// /// Gets an automatic asset name, such as "AssetName_0". /// /// The source file name. /// The name of the content importer. Can be . /// The name of the content processor. Can be . /// The processor parameters. Can be . /// The asset name. public string GetAssetName(string sourceFileName, string importerName, string processorName, OpaqueDataDictionary processorParameters, ContentBuildLogger logger) { if (!Path.IsPathRooted(sourceFileName)) sourceFileName = Path.Combine(this.ProjectDirectory, sourceFileName); // Get source file name, which is used for lookup in _pipelineBuildEvents. sourceFileName = PathHelper.Normalize(sourceFileName); string relativeSourceFileName = PathHelper.GetRelativePath(ProjectDirectory, sourceFileName); List buildEvents; lock (_buildEventsMap) { if (_buildEventsMap.TryGetValue(sourceFileName, out buildEvents)) { // This source file has already been build. // --> Compare pipeline build events. ResolveImporterAndProcessor(sourceFileName, ref importerName, ref processorName); OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(processorName); BuildEvent matchedBuildEvent = FindMatchingEvent(buildEvents, null, importerName, processorName, processorParameters, processorDefaultValues); if (matchedBuildEvent != null) { // Matching pipeline build event found. string existingName = matchedBuildEvent.DestFile; existingName = PathHelper.GetRelativePath(OutputDirectory, existingName); existingName = existingName.Substring(0, existingName.Length - 4); // Remove ".xnb". return existingName; } logger.LogMessage(string.Format("Warning: Asset {0} built multiple times with different settings.", relativeSourceFileName)); } } // No pipeline build event with matching settings found. // Get default asset name by searching the existing .kniContent files. string directoryName = Path.GetDirectoryName(relativeSourceFileName); string fileName = Path.GetFileNameWithoutExtension(relativeSourceFileName); string assetName = Path.Combine(directoryName, fileName); assetName = PathHelper.Normalize(assetName); for (int index = 0; ; index++) { string destFile = assetName + '_' + index; BuildEvent existingBuildEvent = LoadBuildEvent(destFile); if (existingBuildEvent == null) return destFile; string existingBuildEventDestFile = existingBuildEvent.DestFile; existingBuildEventDestFile = PathHelper.GetRelativePath(ProjectDirectory, existingBuildEventDestFile); existingBuildEventDestFile = Path.Combine(Path.GetDirectoryName(existingBuildEventDestFile), Path.GetFileNameWithoutExtension(existingBuildEventDestFile)); existingBuildEventDestFile = PathHelper.Normalize(existingBuildEventDestFile); string fullDestFile = Path.Combine(OutputDirectory, destFile); string relativeDestFile = PathHelper.GetRelativePath(ProjectDirectory, fullDestFile); relativeDestFile = PathHelper.Normalize(relativeDestFile); if (existingBuildEventDestFile.Equals(relativeDestFile) && existingBuildEvent.Importer == importerName && existingBuildEvent.Processor == processorName) { OpaqueDataDictionary processorDefaultValues = GetProcessorDefaultValues(processorName); if (BuildEvent.AreParametersEqual(existingBuildEvent.Parameters, processorParameters, processorDefaultValues)) return destFile; } } } /// /// Determines whether the specified list contains a matching pipeline build event. /// /// The list of pipeline build events. /// Absolute path to the output file. Can be . /// The name of the content importer. Can be . /// The name of the content processor. Can be . /// The processor parameters. Can be . /// /// The matching pipeline build event, or . /// private static BuildEvent FindMatchingEvent(List pipelineBuildEvents, string destFile, string importerName, string processorName, OpaqueDataDictionary processorParameters, OpaqueDataDictionary processorDefaultValues) { foreach (BuildEvent existingBuildEvent in pipelineBuildEvents) { if ((destFile == null || existingBuildEvent.DestFile.Equals(destFile)) && existingBuildEvent.Importer == importerName && existingBuildEvent.Processor == processorName) { if (BuildEvent.AreParametersEqual(existingBuildEvent.Parameters, processorParameters, processorDefaultValues)) { return existingBuildEvent; } } } return null; } } } ================================================ FILE: Tools/MonoGame.Content.Builder/ProcessorContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { internal class ProcessorContext : ContentProcessorContext { private readonly PipelineManager _manager; ConsoleLogger _logger; private readonly BuildEvent _buildEvent; public ProcessorContext(PipelineManager manager, ConsoleLogger logger, BuildEvent buildEvent) { _manager = manager; _logger = logger; _buildEvent = buildEvent; } public override TargetPlatform TargetPlatform { get { return _manager.Platform; } } public override GraphicsProfile TargetProfile { get { return _manager.Profile; } } public override string BuildConfiguration { get { return _manager.Config; } } public override string IntermediateDirectory { get { return _manager.IntermediateDirectory; } } public override string OutputDirectory { get { return _manager.OutputDirectory; } } public override string OutputFilename { get { return _buildEvent.DestFile; } } public override OpaqueDataDictionary Parameters { get { return _buildEvent.Parameters; } } public override ContentBuildLogger Logger { get { return _logger; } } public override void AddDependency(string filename) { if (!_buildEvent.Dependencies.Contains(filename)) _buildEvent.Dependencies.Add(filename); } public override void AddOutputFile(string filename) { if (!_buildEvent.BuildOutput.Contains(filename)) _buildEvent.BuildOutput.Add(filename); } public override TOutput Convert( TInput input, string processorName, OpaqueDataDictionary processorParameters) { IContentProcessor processor = _manager.CreateProcessor(processorName, processorParameters); ProcessorContext processContext = new ProcessorContext(_manager, this._logger, new BuildEvent { Parameters = processorParameters } ); var processedObject = processor.Process(input, processContext); // Add its dependencies and built assets to ours. foreach (string dependency in processContext._buildEvent.Dependencies) { if (!_buildEvent.Dependencies.Contains(dependency)) _buildEvent.Dependencies.Add(dependency); } foreach (string buildAsset in processContext._buildEvent.BuildAsset) { if (!_buildEvent.BuildAsset.Contains(buildAsset)) _buildEvent.BuildAsset.Add(buildAsset); } return (TOutput)processedObject; } public override TOutput BuildAndLoadAsset( ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName) { var sourceFilepath = PathHelper.Normalize(sourceAsset.Filename); // The processorName can be null or empty. In this case the asset should // be imported but not processed. This is, for example, necessary to merge // animation files as described here: // http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/merging-animation-files.aspx. bool processAsset = !string.IsNullOrEmpty(processorName); _manager.ResolveImporterAndProcessor(sourceFilepath, ref importerName, ref processorName); // Make sure the source file is absolute. string sourceFile = sourceAsset.Filename; if (!Path.IsPathRooted(sourceFile)) sourceFile = Path.Combine(_manager.ProjectDirectory, sourceFile); sourceFile = PathHelper.Normalize(sourceFile); BuildEvent buildEvent = new BuildEvent { SourceFile = sourceFile, Importer = importerName, Processor = processAsset ? processorName : null, Parameters = _manager.ValidateProcessorParameters(processorName, processorParameters), }; ImporterContext importContext = new ImporterContext(_manager, _logger, buildEvent); if (!File.Exists(buildEvent.SourceFile)) throw new PipelineException("The source file '{0}' does not exist!", buildEvent.SourceFile); // Store the last write time of the source file so we can detect if it has been changed. buildEvent.SourceTime = File.GetLastWriteTime(buildEvent.SourceFile); object importedObject = _manager.ImportContent(buildEvent.Importer, importContext, buildEvent.SourceFile); ContentProcessorContext processContext = new ProcessorContext(_manager, _logger, buildEvent); object processedObject = _manager.ProcessContent(buildEvent.Processor, processContext, importedObject); // Record that we processed this dependent asset. if (!_buildEvent.Dependencies.Contains(sourceFilepath)) _buildEvent.Dependencies.Add(sourceFilepath); return (TOutput)processedObject; } public override ExternalReference BuildAsset( ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName) { if (string.IsNullOrEmpty(assetName)) assetName = _manager.GetAssetName(sourceAsset.Filename, importerName, processorName, processorParameters, this._logger); // Make sure the source file is absolute. string sourceFile = sourceAsset.Filename; if (!Path.IsPathRooted(sourceFile)) sourceFile = Path.Combine(_manager.ProjectDirectory, sourceFile); sourceFile = PathHelper.Normalize(sourceFile); // Build the content. BuildEvent buildEvent = _manager.CreateBuildEvent(sourceFile, assetName, importerName, processorName, processorParameters); BuildEvent cachedBuildEvent = _manager.LoadBuildEvent(buildEvent.DestFile); _manager.BuildContent(this._logger, buildEvent, cachedBuildEvent, buildEvent.DestFile); // Record that we built this dependent asset. if (!_buildEvent.BuildAsset.Contains(buildEvent.DestFile)) _buildEvent.BuildAsset.Add(buildEvent.DestFile); return new ExternalReference(buildEvent.DestFile); } } } ================================================ FILE: Tools/MonoGame.Content.Builder/Program.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { class Program { static int Main(string[] args) { // We force all stderr to redirect to stdout // to avoid any out of order console output. Console.SetError(Console.Out); if (!Environment.Is64BitProcess && Environment.OSVersion.Platform != PlatformID.Unix) { Console.Error.WriteLine("The KNI content Builder tool only work on a 64bit OS."); return -1; } ContentBuilder content = new ContentBuilder(); // Parse the command line. CommandLineParser parser = new CommandLineParser(content) { Title = "KNI Content Builder\n" + "Builds optimized game content for KNI projects." }; if (!parser.Parse(args)) return -1; // Print a startup message. DateTime buildStarted = DateTime.Now; if (!content.Quiet) Console.WriteLine("Build started {0}\n", buildStarted); // Let the content build. content.Build(); // Print the finishing info. if (!content.Quiet) { Console.WriteLine("\nBuild {0} succeeded, {1} failed.\n", content.SuccessCount, content.ErrorCount); Console.WriteLine("Time elapsed {0:hh\\:mm\\:ss\\.fff}.", DateTime.Now - buildStarted); } else { Console.WriteLine("KNI content pipeline builder: {0} succeeded, {1} failed, took {2:hh\\:mm\\:ss\\.fff}.", content.SuccessCount, content.ErrorCount, DateTime.Now - buildStarted); } // Return the error count. return content.ErrorCount; } } } ================================================ FILE: Tools/MonoGame.Content.Builder/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MGCB")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MGCB")] [assembly: AssemblyCopyright("Copyright ©2025 MonoGame Team, ©2022 Nick Kastellanos")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("b64484a5-f0ca-47cb-8149-59272a68966d")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: Tools/MonoGame.Content.Builder/Properties/launchSettings.json ================================================ { "profiles": { "Debug ContentFont": { "commandName": "Project", "commandLineArgs": "/@:Content.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\Tests\\Assets\\Projects\\Content\\" }, "Debug DirectX Effects": { "commandName": "Project", "commandLineArgs": "/@:DirectX.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\" }, "Debug OpenGL Effects": { "commandName": "Project", "commandLineArgs": "/@:OpenGL.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\" }, "Debug NoResponseFile": { "commandName": "Project", "commandLineArgs": "/SingleThread /outputDir:X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\DirectX /intermediateDir:X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\obj\\ /platform:Windows /importer:EffectImporter /processor:EffectProcessor /build:X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\Bevels.fx /build:X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\BlackOut.fx /build:X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\ColorFlip.fx", "workingDirectory": "X:\\kniEngine\\kni\\Tests\\Assets\\Effects\\" } } } ================================================ FILE: Tools/MonoGame.Content.Builder/SourceFileCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Builder { public sealed class SourceFileCollection { public const string Extension = ".kniContent"; public GraphicsProfile Profile { get; set; } public TargetPlatform Platform { get; set; } public ContentCompression Compression { get; set; } public string Config { get; set; } public List SourceFiles { get; set; } public List DestFiles { get; set; } public SourceFileCollection() { SourceFiles = new List(); DestFiles = new List(); Config = string.Empty; } public void SaveBinary(string filePath) { using (Stream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) using (var writer = new SourceFileCollectionBinaryWriter(stream)) { writer.Write(this); } } public static SourceFileCollection LoadBinary(string filePath) { try { if (!File.Exists(filePath)) return null; using (Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) using (var reader = new SourceFileCollectionBinaryReader(stream)) { SourceFileCollection result = new SourceFileCollection(); reader.Read(result); return result; } } catch (Exception) { return null; } } public int SourceFilesCount { get { return this.SourceFiles.Count; } } internal void AddFile(string sourceFile, string outputFile) { this.SourceFiles.Add(sourceFile); this.DestFiles.Add(outputFile); } public void Merge(SourceFileCollection previousFileCollection) { for (int i = 0; i < previousFileCollection.SourceFiles.Count; i++) { string prevSourceFile = previousFileCollection.SourceFiles[i]; string prevDestFile = previousFileCollection.DestFiles[i]; bool contains = this.SourceFiles.Exists((sourceFile) => string.Equals(sourceFile, prevSourceFile, StringComparison.InvariantCultureIgnoreCase)); if (!contains) { this.SourceFiles.Add(prevSourceFile); this.DestFiles.Add(prevDestFile); } } } internal class SourceFileCollectionBinaryWriter : BinaryWriter { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 1; // SourceFileCollection data public SourceFileCollectionBinaryWriter(Stream output) : base(output) { } internal void Write(SourceFileCollection value) { Write((byte)Header[0]); Write((byte)Header[1]); Write((byte)Header[2]); Write((byte)Header[3]); Write((Int16)MajorVersion); Write((Int16)MinorVersion); Write((Int32)DataType); Write((Int32)0); // reserved Write((Int32)value.Profile); Write((Int32)value.Platform); Write((Int32)value.Compression); WriteStringOrNull(value.Config); WritePackedInt(value.SourceFiles.Count); for (int i = 0; i < value.SourceFiles.Count; i++) { WriteStringOrNull(value.SourceFiles[i]); WriteStringOrNull(value.DestFiles[i]); } return; } protected void WritePackedInt(int value) { // write zigzag encoded int int zzint = ((value << 1) ^ (value >> 31)); Write7BitEncodedInt(zzint); } private void WriteStringOrNull(string value) { if (value != null) { Write(true); Write(value); } else Write(false); } } internal class SourceFileCollectionBinaryReader : BinaryReader { private const string Header = "KNIC"; // content db private const short MajorVersion = 3; private const short MinorVersion = 15; private const int DataType = 1; // SourceFileCollection data public SourceFileCollectionBinaryReader(Stream output) : base(output) { } internal void Read(SourceFileCollection value) { if (ReadByte() != Header[0] || ReadByte() != Header[1] || ReadByte() != Header[2] || ReadByte() != Header[3]) throw new Exception("Invalid file."); if (ReadInt16() != MajorVersion || ReadInt16() != MinorVersion) throw new Exception("Invalid file version."); int dataType = ReadInt32(); if (dataType != DataType) throw new Exception("Invalid data type."); int reserved0 = ReadInt32(); value.Profile = (GraphicsProfile)ReadInt32(); value.Platform = (TargetPlatform)ReadInt32(); value.Compression = (ContentCompression)ReadInt32(); value.Config = ReadStringOrNull(); int filesCount = ReadPackedInt(); value.SourceFiles = new List(filesCount); value.DestFiles = new List(filesCount); for (int i = 0; i < filesCount; i++) { value.SourceFiles.Add(ReadStringOrNull()); value.DestFiles.Add(ReadStringOrNull()); } return; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } private string ReadStringOrNull() { if (ReadBoolean()) return ReadString(); else return null; } } } } ================================================ FILE: Tools/MonoGame.Packaging.Flatpak/BuildFlatpakTask.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace MonoGame.Packaging { public class BuildFlatpakTask : Task { [Required] public string IntermediateDir { get; set; } [Required] public string OutputPath { get; set; } [Required] public string ProjectDir { get; set; } [Required] public string PublishDir { get; set; } [Required] public string AssemblyName { get; set; } [Required] public string Title { get; set; } [Required] public string Id { get; set; } [Required] public string IconPath { get; set; } public override bool Execute() { try { Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Starting..."); // Ensure that flatpak command is installed if (!IsFlatpakInstalled()) { Log.LogMessage(MessageImportance.High, "Flatpak command not found :("); return false; } // Setup intermediate directory var objpath = Path.Combine(ProjectDir, IntermediateDir, "Flatpak"); if (Directory.Exists(objpath)) Directory.Delete(objpath, true); Directory.CreateDirectory(objpath); // Generate metadata Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Generating metadata"); var metadatalines = new[] { "[Application]", "name=" + Id, "runtime=org.freedesktop.Platform/x86_64/1.6", "command=/app/opt/" + AssemblyName + "/" + AssemblyName, "", "[Context]", "shared=ipc;network;", "sockets=x11;wayland;pulseaudio;", "devices=all;" }; File.WriteAllLines(Path.Combine(objpath, "metadata"), metadatalines); // Copy over icon Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Copying over icon"); var icondir = Path.Combine(objpath, "export/share/icons"); Directory.CreateDirectory(icondir); File.Copy(Path.Combine(ProjectDir, IconPath), Path.Combine(icondir, Id + ".png")); // Generate .desktop launcher file Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Generating launcher file"); var desktopdir = Path.Combine(objpath, "export/share/applications"); Directory.CreateDirectory(desktopdir); var desktoplines = new[] { "[Desktop Entry]", "Name=" + Title, "Exec=/app/opt/" + AssemblyName + "/" + AssemblyName, "Type=Application", "Icon=" + Id, "Categories=Game;" }; File.WriteAllLines(Path.Combine(desktopdir, Id + ".desktop"), desktoplines); // Copy over game Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Copying over game data"); var sourcegamedir = Path.Combine(ProjectDir, PublishDir); var gamedir = Path.Combine(objpath, "files/opt/" + AssemblyName + "/"); Directory.CreateDirectory(gamedir); foreach (var dirpath in Directory.GetDirectories(sourcegamedir, "*", SearchOption.AllDirectories)) Directory.CreateDirectory(dirpath.Replace(sourcegamedir, gamedir)); foreach (var filepath in Directory.GetFiles(sourcegamedir, "*.*", SearchOption.AllDirectories)) File.Copy(filepath, filepath.Replace(sourcegamedir, gamedir)); // Copy over suplementary libraries var libdir = Path.Combine(Path.GetDirectoryName((new Uri(typeof(BuildFlatpakTask).Assembly.CodeBase)).LocalPath), "../../extra"); Directory.CreateDirectory(Path.Combine(objpath, "files/lib")); File.Copy(Path.Combine(libdir, "libunwind-x86_64.so.8"), Path.Combine(objpath, "files/lib/libunwind-x86_64.so.8")); File.Copy(Path.Combine(libdir, "libunwind.so.8"), Path.Combine(objpath, "files/lib/libunwind.so.8")); File.Copy(Path.Combine(libdir, "libSDL2-2.0.so.0.8.0"), Path.Combine(objpath, "files/opt/" + AssemblyName + "/libSDL2-2.so"), true); // Generate flatpak Log.LogMessage(MessageImportance.Normal, "BuildFlatpakTask: Generating flatpak"); var repodir = Path.Combine(ProjectDir, IntermediateDir, "FlatpakRepo"); if (Directory.Exists(repodir)) Directory.Delete(repodir, true); Directory.CreateDirectory(repodir); var flatpak = Path.Combine(ProjectDir, OutputPath, AssemblyName + ".flatpak"); CallFlatpak("build-export " + repodir + " " + objpath); CallFlatpak("build-bundle " + repodir + " " + flatpak + " " + Id); Log.LogMessage(MessageImportance.High, "BuildFlatpakTask: Flatpak generated at: " + flatpak); } catch (Exception e) { Log.LogMessage(MessageImportance.High, "An error occured while trying to package the project into a flatpak."); Log.LogMessage(MessageImportance.High, "Error Info: " + e.ToString()); return false; } return true; } private bool IsFlatpakInstalled() { var proc = new Process(); proc.StartInfo.FileName = "which"; proc.StartInfo.Arguments = "flatpak"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); proc.WaitForExit(); proc.StandardOutput.ReadToEnd(); return proc.ExitCode == 0; } private void CallFlatpak(string args) { var proc = new Process(); proc.StartInfo.FileName = "flatpak"; proc.StartInfo.Arguments = args; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); proc.WaitForExit(); while (!proc.StandardOutput.EndOfStream) Log.LogMessage(MessageImportance.Normal, proc.StandardOutput.ReadLine()); } } } ================================================ FILE: Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.Common.props ================================================ ================================================ FILE: Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.csproj ================================================ false netstandard2.0;net46 ..\..\Artifacts\MonoGame.Packaging.Flatpak tasks https://pbs.twimg.com/profile_images/487954549441691649/O3KsHAsb_400x400.png https://github.com/MonoGame/MonoGame.git This package allows you to package up your MonoGame game into a flatpak installer for Linux. monogame;.net core;core;packaging;flatpak MonoGame Team MonoGame.Packaging.Flatpak runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: Tools/MonoGame.Packaging.Flatpak/MonoGame.Packaging.Flatpak.targets ================================================ netstandard2.0 net46 $(MSBuildThisFileDirectory)..\tasks\$(MGFlatpakFoler)\MonoGame.Packaging.Flatpak.dll $(IntermediateOutputPath) $(OutputPath) $(ProjectDir) $(PublishDir) $(AssemblyName) $(AssemblyTitle) com.$(Company).$(AssemblyName) Icon.png ================================================ FILE: Tools/MonoGame.Packaging.Flatpak/README.md ================================================ **This package only works if you are targeting .NET Core.** This package allows you to package up your MonoGame game into a flatpak installer for Linux. ## Requirements: - netcoreapp as the target - flatpak - org.freedesktop.Platform/x86_64/1.6 - org.freedesktop.Sdk/x86_64/1.6 Flatpak install instructions: [https://flatpak.org/setup/](https://flatpak.org/setup/) To install the required runtimes, simply do: ```sh flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install flathub org.freedesktop.Platform/x86_64/1.6 flatpak install flathub org.freedesktop.Sdk/x86_64/1.6 ``` ## Usage: Call the publish command as you normally would: `dotnet publish -r linux-x64`, the resulting flatpak should get generated in the output directory. ## Customization: This nuget package offers the following properties for customizing the build of the flatpak. Simply set them in the csproj or pass them to msbuild to change their values: ``` | Variable Name | Description / Default value | | ------------------------ | -------------------------------------- | | MGFlatpakIntermediateDir | Folder for temporary files. | | | $(IntermediateOutputPath) | | ------------------------ | -------------------------------------- | | MGFlatpakOutputPath | The output folder for the flatpak. | | | $(OutputPath) | | ------------------------ | -------------------------------------- | | MGFlatpakProjectDir | The current project directory. | | | $(ProjectDir) | | ------------------------ | -------------------------------------- | | MGFlatpakPublishDir | The publish output folder. | | | $(PublishDir) | | ------------------------ | -------------------------------------- | | MGFlatpakAssemblyName | The output assembly to run. | | | $(AssemblyName) | | ------------------------ | -------------------------------------- | | MGFlatpakTitle | The game title. | | | $(AssemblyTitle) | | ------------------------ | -------------------------------------- | | MGFlatpakId | The game id. | | | com.$(Company).$(AssemblyName) | | ------------------------ | -------------------------------------- | | MGFlatpakIcon | The icon file, needs to be png format. | | | Icon.png | ``` ================================================ FILE: default.build ================================================ The KNI automated build script. ================================================ FILE: global.json ================================================ { "sdk": { "version": "8.0.415" } } ================================================ FILE: kniPackage.props ================================================  Icon.png https://github.com/kniengine/kni/ https://github.com/kniengine/kni/ Kastellanos Nikos, MonoGame Team ©2013-2025 Kastellanos Nikos, ©2009-2022 The MonoGame Team MS-PL ================================================ FILE: src/Xna.Framework/BoundingBox.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Represents an axis-aligned bounding box (AABB) in 3D space. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct BoundingBox : IEquatable { #region Public Fields /// /// The minimum extent of this . /// [DataMember] public Vector3 Min; /// /// The maximum extent of this . /// [DataMember] public Vector3 Max; /// /// The number of corners in a . This is equal to 8. /// public const int CornerCount = 8; #endregion Public Fields #region Public Constructors /// /// Create a . /// /// The minimum extent of the . /// The maximum extent of the . public BoundingBox(Vector3 min, Vector3 max) { this.Min = min; this.Max = max; } #endregion Public Constructors #region Public Methods /// /// Check if this contains another . /// /// The to test for overlap. /// /// A value indicating if this contains, /// intersects with or is disjoint with . /// public ContainmentType Contains(BoundingBox box) { //test if all corner is in the same side of a face by just checking min and max if (box.Max.X < Min.X || box.Min.X > Max.X || box.Max.Y < Min.Y || box.Min.Y > Max.Y || box.Max.Z < Min.Z || box.Min.Z > Max.Z) return ContainmentType.Disjoint; if (box.Min.X >= Min.X && box.Max.X <= Max.X && box.Min.Y >= Min.Y && box.Max.Y <= Max.Y && box.Min.Z >= Min.Z && box.Max.Z <= Max.Z) return ContainmentType.Contains; return ContainmentType.Intersects; } /// /// Check if this contains another . /// /// The to test for overlap. /// /// A value indicating if this contains, /// intersects with or is disjoint with . /// public void Contains(ref BoundingBox box, out ContainmentType result) { result = Contains(box); } /// /// Check if this contains a . /// WARNING: Reported to not work properly. /// If a BoundingFrustum that is outside a BoundingBox, the returned value will be ContainmentType.Intersects. /// If instead call the equivalent (?) function on the BoundingFrustum.Contains(BoundingBox), we get the right result, namely ContainmentType.Disjoint. /// /// The to test for overlap. /// /// A value indicating if this contains, /// intersects with or is disjoint with . /// public ContainmentType Contains(BoundingFrustum frustum) { int i; for (i = 0; i < BoundingFrustum.CornerCount; i++) { this.Contains(ref frustum._corners[i], out ContainmentType contained); if (contained != ContainmentType.Contains) break; } if (i == BoundingFrustum.CornerCount) return ContainmentType.Contains; if (i > 0) return ContainmentType.Intersects; if (this.Intersects(frustum)) return ContainmentType.Intersects; else return ContainmentType.Disjoint; } /// /// Check if this contains a . /// /// The to test for overlap. /// /// A value indicating if this contains, /// intersects with or is disjoint with . /// public ContainmentType Contains(BoundingSphere sphere) { if (sphere.Center.X - Min.X >= sphere.Radius && sphere.Center.Y - Min.Y >= sphere.Radius && sphere.Center.Z - Min.Z >= sphere.Radius && Max.X - sphere.Center.X >= sphere.Radius && Max.Y - sphere.Center.Y >= sphere.Radius && Max.Z - sphere.Center.Z >= sphere.Radius) return ContainmentType.Contains; double dmin = 0; double e = sphere.Center.X - Min.X; if (e < 0) { if (e < -sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } else { e = sphere.Center.X - Max.X; if (e > 0) { if (e > sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } } e = sphere.Center.Y - Min.Y; if (e < 0) { if (e < -sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } else { e = sphere.Center.Y - Max.Y; if (e > 0) { if (e > sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } } e = sphere.Center.Z - Min.Z; if (e < 0) { if (e < -sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } else { e = sphere.Center.Z - Max.Z; if (e > 0) { if (e > sphere.Radius) { return ContainmentType.Disjoint; } dmin += e * e; } } if (dmin <= sphere.Radius * sphere.Radius) return ContainmentType.Intersects; return ContainmentType.Disjoint; } /// /// Check if this contains a . /// /// The to test for overlap. /// /// A value indicating if this contains, /// intersects with or is disjoint with . /// public void Contains(ref BoundingSphere sphere, out ContainmentType result) { result = this.Contains(sphere); } /// /// Check if this contains a point. /// /// The to test. /// /// if this contains /// or if it does not. /// public ContainmentType Contains(Vector3 point) { ContainmentType result; this.Contains(ref point, out result); return result; } /// /// Check if this contains a point. /// /// The to test. /// /// if this contains /// or if it does not. /// public void Contains(ref Vector3 point, out ContainmentType result) { //first we get if point is out of box if (point.X < this.Min.X || point.X > this.Max.X || point.Y < this.Min.Y || point.Y > this.Max.Y || point.Z < this.Min.Z || point.Z > this.Max.Z) { result = ContainmentType.Disjoint; } else { result = ContainmentType.Contains; } } private static readonly Vector3 MaxVector3 = new Vector3(float.MaxValue); private static readonly Vector3 MinVector3 = new Vector3(float.MinValue); /// /// Create a bounding box from the given list of points. /// /// The array of Vector3 instances defining the point cloud to bound /// The base index to start iterating from /// The number of points to iterate /// A bounding box that encapsulates the given point cloud. /// Thrown if the given array is null or has no points. public static BoundingBox CreateFromPoints(Vector3[] points, int index = 0, int count = -1) { if (points == null || points.Length == 0) throw new ArgumentException(); if (count == -1) count = points.Length; var minVec = points[index]; var maxVec = minVec; for (int i = index + 1; i < count; i++) { var ptVector = points[i]; if (ptVector.X < minVec.X) minVec.X = ptVector.X; else if (ptVector.X > maxVec.X) maxVec.X = ptVector.X; if (ptVector.Y < minVec.Y) minVec.Y = ptVector.Y; else if (ptVector.Y > maxVec.Y) maxVec.Y = ptVector.Y; if (ptVector.Z < minVec.Z) minVec.Z = ptVector.Z; else if (ptVector.Z > maxVec.Z) maxVec.Z = ptVector.Z; } BoundingBox result; result.Min = minVec; result.Max = maxVec; return result; } /// /// Create a bounding box from the given list of points. /// /// The list of Vector3 instances defining the point cloud to bound /// The base index to start iterating from /// The number of points to iterate /// A bounding box that encapsulates the given point cloud. /// Thrown if the given list is null or has no points. public static BoundingBox CreateFromPoints(List points, int index = 0, int count = -1) { if (points == null || points.Count == 0) throw new ArgumentException(); if (count == -1) count = points.Count; var minVec = points[index]; var maxVec = minVec; for (int i = index + 1; i < count; i++) { var ptVector = points[i]; if (ptVector.X < minVec.X) minVec.X = ptVector.X; else if (ptVector.X > maxVec.X) maxVec.X = ptVector.X; if (ptVector.Y < minVec.Y) minVec.Y = ptVector.Y; else if (ptVector.Y > maxVec.Y) maxVec.Y = ptVector.Y; if (ptVector.Z < minVec.Z) minVec.Z = ptVector.Z; else if (ptVector.Z > maxVec.Z) maxVec.Z = ptVector.Z; } BoundingBox result; result.Min = minVec; result.Max = maxVec; return result; } /// /// Create the enclosing from the given list of points. /// /// The list of instances defining the point cloud to bound. /// A that encloses the given point cloud. /// Thrown if the given list has no points. public static BoundingBox CreateFromPoints(IEnumerable points) { if (points == null) throw new ArgumentNullException(); var empty = true; var minVec = MaxVector3; var maxVec = MinVector3; foreach (var ptVector in points) { if (ptVector.X < minVec.X) minVec.X = ptVector.X; if (ptVector.X > maxVec.X) maxVec.X = ptVector.X; if (ptVector.Y < minVec.Y) minVec.Y = ptVector.Y; if (ptVector.Y > maxVec.Y) maxVec.Y = ptVector.Y; if (ptVector.Z < minVec.Z) minVec.Z = ptVector.Z; if (ptVector.Z > maxVec.Z) maxVec.Z = ptVector.Z; empty = false; } if (empty) throw new ArgumentException(); BoundingBox result; result.Min = minVec; result.Max = maxVec; return result; } /// /// Create the enclosing of a . /// /// The to enclose. /// A enclosing . public static BoundingBox CreateFromSphere(BoundingSphere sphere) { BoundingBox result; CreateFromSphere(ref sphere, out result); return result; } /// /// Create the enclosing of a . /// /// The to enclose. /// A enclosing . public static void CreateFromSphere(ref BoundingSphere sphere, out BoundingBox result) { var corner = new Vector3(sphere.Radius); result.Min = sphere.Center - corner; result.Max = sphere.Center + corner; } /// /// Create the enclosing two other instances. /// /// A to enclose. /// A to enclose. /// /// The enclosing and . /// public static BoundingBox CreateMerged(BoundingBox original, BoundingBox additional) { BoundingBox result; CreateMerged(ref original, ref additional, out result); return result; } /// /// Create the enclosing two other instances. /// /// A to enclose. /// A to enclose. /// /// The enclosing and . /// public static void CreateMerged(ref BoundingBox original, ref BoundingBox additional, out BoundingBox result) { result.Min.X = Math.Min(original.Min.X, additional.Min.X); result.Min.Y = Math.Min(original.Min.Y, additional.Min.Y); result.Min.Z = Math.Min(original.Min.Z, additional.Min.Z); result.Max.X = Math.Max(original.Max.X, additional.Max.X); result.Max.Y = Math.Max(original.Max.Y, additional.Max.Y); result.Max.Z = Math.Max(original.Max.Z, additional.Max.Z); } /// /// Check if two instances are equal. /// /// The to compare with this . /// /// true if is equal to this , /// false if it is not. /// public bool Equals(BoundingBox other) { return (this.Min == other.Min) && (this.Max == other.Max); } /// /// Check if two instances are equal. /// /// The to compare with this . /// /// true if is equal to this , /// false if it is not. /// public override bool Equals(object obj) { return (obj is BoundingBox) && this.Equals((BoundingBox)obj); } /// /// Get an array of containing the corners of this . /// /// An array of containing the corners of this . public Vector3[] GetCorners() { return new Vector3[] { new Vector3(this.Min.X, this.Max.Y, this.Max.Z), new Vector3(this.Max.X, this.Max.Y, this.Max.Z), new Vector3(this.Max.X, this.Min.Y, this.Max.Z), new Vector3(this.Min.X, this.Min.Y, this.Max.Z), new Vector3(this.Min.X, this.Max.Y, this.Min.Z), new Vector3(this.Max.X, this.Max.Y, this.Min.Z), new Vector3(this.Max.X, this.Min.Y, this.Min.Z), new Vector3(this.Min.X, this.Min.Y, this.Min.Z) }; } /// /// Fill the first 8 places of an array of /// with the corners of this . /// /// The array to fill. /// If is null. /// /// If has a length of less than 8. /// public void GetCorners(Vector3[] corners) { if (corners == null) { throw new ArgumentNullException("corners"); } if (corners.Length < 8) { throw new ArgumentOutOfRangeException("corners", "Not Enought Corners"); } corners[0].X = this.Min.X; corners[0].Y = this.Max.Y; corners[0].Z = this.Max.Z; corners[1].X = this.Max.X; corners[1].Y = this.Max.Y; corners[1].Z = this.Max.Z; corners[2].X = this.Max.X; corners[2].Y = this.Min.Y; corners[2].Z = this.Max.Z; corners[3].X = this.Min.X; corners[3].Y = this.Min.Y; corners[3].Z = this.Max.Z; corners[4].X = this.Min.X; corners[4].Y = this.Max.Y; corners[4].Z = this.Min.Z; corners[5].X = this.Max.X; corners[5].Y = this.Max.Y; corners[5].Z = this.Min.Z; corners[6].X = this.Max.X; corners[6].Y = this.Min.Y; corners[6].Z = this.Min.Z; corners[7].X = this.Min.X; corners[7].Y = this.Min.Y; corners[7].Z = this.Min.Z; } /// /// Get the hash code for this . /// /// A hash code for this . public override int GetHashCode() { return this.Min.GetHashCode() + this.Max.GetHashCode(); } /// /// Check if this intersects another . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public bool Intersects(BoundingBox box) { bool result; IntersectsHelper.BoundingBoxIntersectsBoundingBox(ref this, ref box, out result); return result; } /// /// Check if this intersects another . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public void Intersects(ref BoundingBox box, out bool result) { IntersectsHelper.BoundingBoxIntersectsBoundingBox(ref this, ref box, out result); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public bool Intersects(BoundingFrustum frustum) { IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref this, frustum, out bool result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public bool Intersects(BoundingSphere sphere) { bool result; IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref this, ref sphere, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public void Intersects(ref BoundingSphere sphere, out bool result) { IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref this, ref sphere, out result); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public PlaneIntersectionType Intersects(Plane plane) { PlaneIntersectionType result; IntersectsHelper.BoundingBoxIntersectsPlane(ref this, ref plane, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// true if this intersects , /// false if it does not. /// public void Intersects(ref Plane plane, out PlaneIntersectionType result) { IntersectsHelper.BoundingBoxIntersectsPlane(ref this, ref plane, out result); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The distance along the to the intersection point or /// null if the does not intesect this . /// public Nullable Intersects(Ray ray) { float? result; IntersectsHelper.BoundingBoxIntersectsRay(ref this, ref ray, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The distance along the to the intersection point or /// null if the does not intesect this . /// public void Intersects(ref Ray ray, out Nullable result) { IntersectsHelper.BoundingBoxIntersectsRay(ref this, ref ray, out result); } /// /// Check if two instances are equal. /// /// A to compare the other. /// A to compare the other. /// /// true if is equal to this , /// false if it is not. /// public static bool operator ==(BoundingBox left, BoundingBox right) { return left.Equals(right); } /// /// Check if two instances are not equal. /// /// A to compare the other. /// A to compare the other. /// /// true if is not equal to this , /// false if it is. /// public static bool operator !=(BoundingBox left, BoundingBox b) { return !left.Equals(b); } internal string DebugDisplayString { get { return string.Concat( "Min( ", this.Min.DebugDisplayString, " ) \r\n", "Max( ",this.Max.DebugDisplayString, " )" ); } } /// /// Get a representation of this . /// /// A representation of this . public override string ToString() { return "{{Min:" + this.Min.ToString() + " Max:" + this.Max.ToString() + "}}"; } /// /// Deconstruction method for . /// /// /// public void Deconstruct(out Vector3 min, out Vector3 max) { min = Min; max = Max; } #endregion Public Methods } } ================================================ FILE: src/Xna.Framework/BoundingFrustum.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; namespace Microsoft.Xna.Framework { /// /// Defines a viewing frustum for intersection operations. /// [DebuggerDisplay("{DebugDisplayString,nq}")] public class BoundingFrustum : IEquatable { #region Private Fields private Matrix _matrix; internal readonly Vector3[] _corners = new Vector3[CornerCount]; internal readonly Plane[] _planes = new Plane[PlaneCount]; #endregion #region Public Fields /// /// The number of planes in the frustum. /// public const int PlaneCount = 6; /// /// The number of corner points in the frustum. /// public const int CornerCount = 8; #endregion #region Properties /// /// Gets or sets the of the frustum. /// public Matrix Matrix { get { return this._matrix; } set { this._matrix = value; this.CreatePlanes(); // FIXME: The odds are the planes will be used a lot more often than the matrix this.CreateCorners(); // is updated, so this should help performance. I hope ;) } } /// /// Gets the near plane of the frustum. /// public Plane Near { get { return this._planes[0]; } } /// /// Gets the far plane of the frustum. /// public Plane Far { get { return this._planes[1]; } } /// /// Gets the left plane of the frustum. /// public Plane Left { get { return this._planes[2]; } } /// /// Gets the right plane of the frustum. /// public Plane Right { get { return this._planes[3]; } } /// /// Gets the top plane of the frustum. /// public Plane Top { get { return this._planes[4]; } } /// /// Gets the bottom plane of the frustum. /// public Plane Bottom { get { return this._planes[5]; } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( "Near( ", this._planes[0].DebugDisplayString, " ) \r\n", "Far( ", this._planes[1].DebugDisplayString, " ) \r\n", "Left( ", this._planes[2].DebugDisplayString, " ) \r\n", "Right( ", this._planes[3].DebugDisplayString, " ) \r\n", "Top( ", this._planes[4].DebugDisplayString, " ) \r\n", "Bottom( ", this._planes[5].DebugDisplayString, " ) " ); } } #endregion #region Constructors /// /// Constructs the frustum by extracting the view planes from a matrix. /// /// Combined matrix which usually is (View * Projection). public BoundingFrustum(Matrix value) { this._matrix = value; this.CreatePlanes(); this.CreateCorners(); } #endregion #region Operators /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(BoundingFrustum left, BoundingFrustum right) { if (Equals(left, null)) return (Equals(right, null)); if (Equals(right, null)) return (Equals(left, null)); return left._matrix == (right._matrix); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(BoundingFrustum left, BoundingFrustum right) { return !(left == right); } #endregion #region Public Methods #region Contains /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified . public ContainmentType Contains(BoundingBox box) { ContainmentType result = default(ContainmentType); this.Contains(ref box, out result); return result; } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified as an output parameter. public void Contains(ref BoundingBox box, out ContainmentType result) { result = ContainmentType.Contains; for (int i = 0; i < PlaneCount; i++) { _planes[i].Intersects(ref box, out PlaneIntersectionType planeIntersectionType); switch (planeIntersectionType) { case PlaneIntersectionType.Front: result = ContainmentType.Disjoint; return; case PlaneIntersectionType.Intersecting: result = ContainmentType.Intersects; break; } } if (result == ContainmentType.Intersects) { BoundingBox fbox = BoundingBox.CreateFromPoints(_corners); box.Intersects(ref fbox, out bool intersects); if (!intersects) result = ContainmentType.Disjoint; } } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified . public ContainmentType Contains(BoundingFrustum frustum) { if (this == frustum) // We check to see if the two frustums are equal return ContainmentType.Contains;// If they are, there's no need to go any further. int i; for (i = 0; i < BoundingFrustum.CornerCount; i++) { this.Contains(ref frustum._corners[i], out ContainmentType contained); if (contained != ContainmentType.Contains) break; } if (i == BoundingFrustum.CornerCount) return ContainmentType.Contains; if (i > 0) return ContainmentType.Intersects; if (this.Intersects(frustum)) return ContainmentType.Intersects; else return ContainmentType.Disjoint; } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified . public ContainmentType Contains(BoundingSphere sphere) { ContainmentType result = default(ContainmentType); this.Contains(ref sphere, out result); return result; } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified as an output parameter. public void Contains(ref BoundingSphere sphere, out ContainmentType result) { result = ContainmentType.Contains; for (int i = 0; i < PlaneCount; i++) { _planes[i].Intersects(ref sphere, out PlaneIntersectionType planeIntersectionType); switch (planeIntersectionType) { case PlaneIntersectionType.Front: result = ContainmentType.Disjoint; return; case PlaneIntersectionType.Intersecting: result = ContainmentType.Intersects; break; } } if (result == ContainmentType.Intersects) { Intersects(ref sphere, out bool intersects); if (!intersects) result = ContainmentType.Disjoint; } } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified . public ContainmentType Contains(Vector3 point) { ContainmentType result = default(ContainmentType); this.Contains(ref point, out result); return result; } /// /// Containment test between this and specified . /// /// A for testing. /// Result of testing for containment between this and specified as an output parameter. public void Contains(ref Vector3 point, out ContainmentType result) { result = ContainmentType.Contains; for (int i = 0; i < PlaneCount; i++) { this._planes[i].DotCoordinate(ref point, out float dot); if (dot > 0) { result = ContainmentType.Disjoint; return; } } } #endregion /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(BoundingFrustum other) { return (this == other); } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { return (obj is BoundingFrustum) && this == ((BoundingFrustum)obj); } /// /// Returns a copy of internal corners array. /// /// The array of corners. public Vector3[] GetCorners() { return (Vector3[])this._corners.Clone(); } /// /// Returns a copy of internal corners array. /// /// The array which values will be replaced to corner values of this instance. It must have size of . public void GetCorners(Vector3[] corners) { if (corners == null) throw new ArgumentNullException("corners"); if (corners.Length < CornerCount) throw new ArgumentOutOfRangeException("corners"); this._corners.CopyTo(corners, 0); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return this._matrix.GetHashCode(); } /// /// Gets whether or not a specified intersects with this . /// /// A for intersection test. /// true if specified intersects with this ; false otherwise. public bool Intersects(BoundingBox box) { IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref box, this, out bool result); return result; } /// /// Gets whether or not a specified intersects with this . /// /// A for intersection test. /// true if specified intersects with this ; false otherwise as an output parameter. public void Intersects(ref BoundingBox box, out bool result) { IntersectsHelper.BoundingBoxIntersectsBoundingFrustum(ref box, this ,out result); } /// /// Gets whether or not a specified intersects with this . /// /// An other for intersection test. /// true if other intersects with this ; false otherwise. public bool Intersects(BoundingFrustum frustum)//frustum) { if (this == frustum) return true; IntersectsHelper.BoundingFrustumIntersectsBoundingFrustum(this, frustum, out bool result); return result; } /// /// Gets whether or not a specified intersects with this . /// /// A for intersection test. /// true if specified intersects with this ; false otherwise. public bool Intersects(BoundingSphere sphere) { IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(this, ref sphere, out bool result); return result; } /// /// Gets whether or not a specified intersects with this . /// /// A for intersection test. /// true if specified intersects with this ; false otherwise as an output parameter. public void Intersects(ref BoundingSphere sphere, out bool result) { IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(this, ref sphere, out result); } /// /// Gets type of intersection between specified and this . /// /// A for intersection test. /// A plane intersection type. public PlaneIntersectionType Intersects(Plane plane) { IntersectsHelper.BoundingFrustumIntersectsPlane(this, ref plane, out PlaneIntersectionType result); return result; } /// /// Gets type of intersection between specified and this . /// /// A for intersection test. /// A plane intersection type as an output parameter. public void Intersects(ref Plane plane, out PlaneIntersectionType result) { IntersectsHelper.BoundingFrustumIntersectsPlane(this, ref plane, out result); } /// /// Gets the distance of intersection of and this or null if no intersection happens. /// /// A for intersection test. /// Distance at which ray intersects with this or null if no intersection happens. public float? Intersects(Ray ray) { float? result; IntersectsHelper.BoundingFrustumIntersectsRay(this, ref ray, out result); return result; } /// /// Gets the distance of intersection of and this or null if no intersection happens. /// /// A for intersection test. /// Distance at which ray intersects with this or null if no intersection happens as an output parameter. public void Intersects(ref Ray ray, out float? result) { IntersectsHelper.BoundingFrustumIntersectsRay(this, ref ray, out result); } /// /// Returns a representation of this in the format: /// {Near:[nearPlane] Far:[farPlane] Left:[leftPlane] Right:[rightPlane] Top:[topPlane] Bottom:[bottomPlane]} /// /// representation of this . public override string ToString() { return "{Near: " + this._planes[0] + " Far:" + this._planes[1] + " Left:" + this._planes[2] + " Right:" + this._planes[3] + " Top:" + this._planes[4] + " Bottom:" + this._planes[5] + "}"; } #endregion #region Private Methods private void CreateCorners() { IntersectionPoint(ref this._planes[0], ref this._planes[2], ref this._planes[4], out this._corners[0]); IntersectionPoint(ref this._planes[0], ref this._planes[3], ref this._planes[4], out this._corners[1]); IntersectionPoint(ref this._planes[0], ref this._planes[3], ref this._planes[5], out this._corners[2]); IntersectionPoint(ref this._planes[0], ref this._planes[2], ref this._planes[5], out this._corners[3]); IntersectionPoint(ref this._planes[1], ref this._planes[2], ref this._planes[4], out this._corners[4]); IntersectionPoint(ref this._planes[1], ref this._planes[3], ref this._planes[4], out this._corners[5]); IntersectionPoint(ref this._planes[1], ref this._planes[3], ref this._planes[5], out this._corners[6]); IntersectionPoint(ref this._planes[1], ref this._planes[2], ref this._planes[5], out this._corners[7]); } private void CreatePlanes() { this._planes[0] = new Plane(-this._matrix.M13, -this._matrix.M23, -this._matrix.M33, -this._matrix.M43); this._planes[1] = new Plane(this._matrix.M13 - this._matrix.M14, this._matrix.M23 - this._matrix.M24, this._matrix.M33 - this._matrix.M34, this._matrix.M43 - this._matrix.M44); this._planes[2] = new Plane(-this._matrix.M14 - this._matrix.M11, -this._matrix.M24 - this._matrix.M21, -this._matrix.M34 - this._matrix.M31, -this._matrix.M44 - this._matrix.M41); this._planes[3] = new Plane(this._matrix.M11 - this._matrix.M14, this._matrix.M21 - this._matrix.M24, this._matrix.M31 - this._matrix.M34, this._matrix.M41 - this._matrix.M44); this._planes[4] = new Plane(this._matrix.M12 - this._matrix.M14, this._matrix.M22 - this._matrix.M24, this._matrix.M32 - this._matrix.M34, this._matrix.M42 - this._matrix.M44); this._planes[5] = new Plane(-this._matrix.M14 - this._matrix.M12, -this._matrix.M24 - this._matrix.M22, -this._matrix.M34 - this._matrix.M32, -this._matrix.M44 - this._matrix.M42); this.NormalizePlane(ref this._planes[0]); this.NormalizePlane(ref this._planes[1]); this.NormalizePlane(ref this._planes[2]); this.NormalizePlane(ref this._planes[3]); this.NormalizePlane(ref this._planes[4]); this.NormalizePlane(ref this._planes[5]); } private static void IntersectionPoint(ref Plane a, ref Plane b, ref Plane c, out Vector3 result) { // Formula used // d1 ( N2 * N3 ) + d2 ( N3 * N1 ) + d3 ( N1 * N2 ) //P = ------------------------------------------------------------------------- // N1 . ( N2 * N3 ) // // Note: N refers to the normal, d refers to the displacement. '.' means dot product. '*' means cross product Vector3 v1, v2, v3; Vector3 cross; Vector3.Cross(ref b.Normal, ref c.Normal, out cross); float f; Vector3.Dot(ref a.Normal, ref cross, out f); f *= -1.0f; Vector3.Cross(ref b.Normal, ref c.Normal, out cross); Vector3.Multiply(ref cross, a.D, out v1); //v1 = (a.D * (Vector3.Cross(b.Normal, c.Normal))); Vector3.Cross(ref c.Normal, ref a.Normal, out cross); Vector3.Multiply(ref cross, b.D, out v2); //v2 = (b.D * (Vector3.Cross(c.Normal, a.Normal))); Vector3.Cross(ref a.Normal, ref b.Normal, out cross); Vector3.Multiply(ref cross, c.D, out v3); //v3 = (c.D * (Vector3.Cross(a.Normal, b.Normal))); result.X = (v1.X + v2.X + v3.X) / f; result.Y = (v1.Y + v2.Y + v3.Y) / f; result.Z = (v1.Z + v2.Z + v3.Z) / f; } private void NormalizePlane(ref Plane p) { float factor = 1f / p.Normal.Length(); p.Normal.X *= factor; p.Normal.Y *= factor; p.Normal.Z *= factor; p.D *= factor; } #endregion } } ================================================ FILE: src/Xna.Framework/BoundingSphere.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Describes a sphere in 3D-space for bounding operations. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct BoundingSphere : IEquatable { #region Public Fields /// /// The sphere center. /// [DataMember] public Vector3 Center; /// /// The sphere radius. /// [DataMember] public float Radius; #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( "Center( ", this.Center.DebugDisplayString, " ) \r\n", "Radius( ", this.Radius.ToString(), " )" ); } } #endregion #region Constructors /// /// Constructs a bounding sphere with the specified center and radius. /// /// The sphere center. /// The sphere radius. public BoundingSphere(Vector3 center, float radius) { this.Center = center; this.Radius = radius; } #endregion #region Public Methods #region Contains /// /// Test if a bounding box is fully inside, outside, or just intersecting the sphere. /// /// The box for testing. /// The containment type. public ContainmentType Contains(BoundingBox box) { //check if all corner is in sphere bool inside = true; foreach (Vector3 corner in box.GetCorners()) { if (this.Contains(corner) == ContainmentType.Disjoint) { inside = false; break; } } if (inside) return ContainmentType.Contains; //check if the distance from sphere center to cube face < radius double dmin = 0; if (Center.X < box.Min.X) dmin += (Center.X - box.Min.X) * (Center.X - box.Min.X); else if (Center.X > box.Max.X) dmin += (Center.X - box.Max.X) * (Center.X - box.Max.X); if (Center.Y < box.Min.Y) dmin += (Center.Y - box.Min.Y) * (Center.Y - box.Min.Y); else if (Center.Y > box.Max.Y) dmin += (Center.Y - box.Max.Y) * (Center.Y - box.Max.Y); if (Center.Z < box.Min.Z) dmin += (Center.Z - box.Min.Z) * (Center.Z - box.Min.Z); else if (Center.Z > box.Max.Z) dmin += (Center.Z - box.Max.Z) * (Center.Z - box.Max.Z); if (dmin <= Radius * Radius) return ContainmentType.Intersects; //else disjoint return ContainmentType.Disjoint; } /// /// Test if a bounding box is fully inside, outside, or just intersecting the sphere. /// /// The box for testing. /// The containment type as an output parameter. public void Contains(ref BoundingBox box, out ContainmentType result) { result = this.Contains(box); } /// /// Test if a frustum is fully inside, outside, or just intersecting the sphere. /// /// The frustum for testing. /// The containment type. public ContainmentType Contains(BoundingFrustum frustum) { int i; for (i = 0; i < BoundingFrustum.CornerCount; i++) { this.Contains(ref frustum._corners[i], out ContainmentType contained); if (contained == ContainmentType.Disjoint) break; } if (i == BoundingFrustum.CornerCount) return ContainmentType.Contains; if (i > 0) return ContainmentType.Intersects; if (this.Intersects(frustum)) return ContainmentType.Intersects; else return ContainmentType.Disjoint; } /// /// Test if a frustum is fully inside, outside, or just intersecting the sphere. /// /// The frustum for testing. /// The containment type as an output parameter. public void Contains(ref BoundingFrustum frustum,out ContainmentType result) { result = this.Contains(frustum); } /// /// Test if a sphere is fully inside, outside, or just intersecting the sphere. /// /// The other sphere for testing. /// The containment type. public ContainmentType Contains(BoundingSphere sphere) { ContainmentType result; Contains(ref sphere, out result); return result; } /// /// Test if a sphere is fully inside, outside, or just intersecting the sphere. /// /// The other sphere for testing. /// The containment type as an output parameter. public void Contains(ref BoundingSphere sphere, out ContainmentType result) { float sqDistance; Vector3.DistanceSquared(ref sphere.Center, ref Center, out sqDistance); if (sqDistance > (sphere.Radius + Radius) * (sphere.Radius + Radius)) result = ContainmentType.Disjoint; else if (sqDistance <= (Radius - sphere.Radius) * (Radius - sphere.Radius)) result = ContainmentType.Contains; else result = ContainmentType.Intersects; } /// /// Test if a point is fully inside, outside, or just intersecting the sphere. /// /// The vector in 3D-space for testing. /// The containment type. public ContainmentType Contains(Vector3 point) { ContainmentType result; Contains(ref point, out result); return result; } /// /// Test if a point is fully inside, outside, or just intersecting the sphere. /// /// The vector in 3D-space for testing. /// The containment type as an output parameter. public void Contains(ref Vector3 point, out ContainmentType result) { float sqRadius = Radius * Radius; float sqDistance; Vector3.DistanceSquared(ref point, ref Center, out sqDistance); if (sqDistance > sqRadius) result = ContainmentType.Disjoint; else if (sqDistance < sqRadius) result = ContainmentType.Contains; else result = ContainmentType.Intersects; } #endregion #region CreateFromBoundingBox /// /// Creates the smallest that can contain a specified . /// /// The box to create the sphere from. /// The new . public static BoundingSphere CreateFromBoundingBox(BoundingBox box) { BoundingSphere result; CreateFromBoundingBox(ref box, out result); return result; } /// /// Creates the smallest that can contain a specified . /// /// The box to create the sphere from. /// The new as an output parameter. public static void CreateFromBoundingBox(ref BoundingBox box, out BoundingSphere result) { // Find the center of the box. Vector3 center = new Vector3((box.Min.X + box.Max.X) / 2.0f, (box.Min.Y + box.Max.Y) / 2.0f, (box.Min.Z + box.Max.Z) / 2.0f); // Find the distance between the center and one of the corners of the box. float radius = Vector3.Distance(center, box.Max); result = new BoundingSphere(center, radius); } #endregion /// /// Creates the smallest that can contain a specified . /// /// The frustum to create the sphere from. /// The new . public static BoundingSphere CreateFromFrustum(BoundingFrustum frustum) { return CreateFromPoints(frustum.GetCorners()); } /// /// Creates the smallest that can contain a specified list of points in 3D-space. /// /// List of point to create the sphere from. /// The new . public static BoundingSphere CreateFromPoints(IEnumerable points) { if (points == null ) throw new ArgumentNullException("points"); // From "Real-Time Collision Detection" (Page 89) var minx = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); var maxx = -minx; var miny = minx; var maxy = -minx; var minz = minx; var maxz = -minx; // Find the most extreme points along the principle axis. var numPoints = 0; foreach (var pt in points) { ++numPoints; if (pt.X < minx.X) minx = pt; if (pt.X > maxx.X) maxx = pt; if (pt.Y < miny.Y) miny = pt; if (pt.Y > maxy.Y) maxy = pt; if (pt.Z < minz.Z) minz = pt; if (pt.Z > maxz.Z) maxz = pt; } if (numPoints == 0) throw new ArgumentException("You should have at least one point in points."); var sqDistX = Vector3.DistanceSquared(maxx, minx); var sqDistY = Vector3.DistanceSquared(maxy, miny); var sqDistZ = Vector3.DistanceSquared(maxz, minz); // Pick the pair of most distant points. var min = minx; var max = maxx; if (sqDistY > sqDistX && sqDistY > sqDistZ) { max = maxy; min = miny; } if (sqDistZ > sqDistX && sqDistZ > sqDistY) { max = maxz; min = minz; } var center = (min + max) * 0.5f; var radius = Vector3.Distance(max, center); // Test every point and expand the sphere. // The current bounding sphere is just a good approximation and may not enclose all points. // From: Mathematics for 3D Game Programming and Computer Graphics, Eric Lengyel, Third Edition. // Page 218 float sqRadius = radius * radius; foreach (var pt in points) { Vector3 diff = (pt-center); float sqDist = diff.LengthSquared(); if (sqDist > sqRadius) { float distance = (float)Math.Sqrt(sqDist); // equal to diff.Length(); Vector3 direction = diff / distance; Vector3 G = center - radius * direction; center = (G + pt) / 2; radius = Vector3.Distance(pt, center); sqRadius = radius * radius; } } return new BoundingSphere(center, radius); } /// /// Creates the smallest that can contain two spheres. /// /// First sphere. /// Second sphere. /// The new . public static BoundingSphere CreateMerged(BoundingSphere original, BoundingSphere additional) { BoundingSphere result; CreateMerged(ref original, ref additional, out result); return result; } /// /// Creates the smallest that can contain two spheres. /// /// First sphere. /// Second sphere. /// The new as an output parameter. public static void CreateMerged(ref BoundingSphere original, ref BoundingSphere additional, out BoundingSphere result) { Vector3 ocenterToaCenter = Vector3.Subtract(additional.Center, original.Center); float distance = ocenterToaCenter.Length(); if (distance <= original.Radius + additional.Radius)//intersect { if (distance <= original.Radius - additional.Radius)//original contain additional { result = original; return; } if (distance <= additional.Radius - original.Radius)//additional contain original { result = additional; return; } } //else find center of new sphere and radius float leftRadius = Math.Max(original.Radius - distance, additional.Radius); float Rightradius = Math.Max(original.Radius + distance, additional.Radius); ocenterToaCenter = ocenterToaCenter + (((leftRadius - Rightradius) / (2 * ocenterToaCenter.Length())) * ocenterToaCenter);//oCenterToResultCenter result = new BoundingSphere(); result.Center = original.Center + ocenterToaCenter; result.Radius = (leftRadius + Rightradius) / 2; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(BoundingSphere other) { return this.Center == other.Center && this.Radius == other.Radius; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is BoundingSphere) return this.Equals((BoundingSphere)obj); return false; } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return this.Center.GetHashCode() + this.Radius.GetHashCode(); } #region Intersects /// /// Gets whether or not a specified intersects with this sphere. /// /// The box for testing. /// true if intersects with this sphere; false otherwise. public bool Intersects(BoundingBox box) { bool result; IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref box, ref this, out result); return result; } /// /// Gets whether or not a specified intersects with this sphere. /// /// The box for testing. /// true if intersects with this sphere; false otherwise. As an output parameter. public void Intersects(ref BoundingBox box, out bool result) { IntersectsHelper.BoundingBoxIntersectsBoundingSphere(ref box, ref this, out result); } public bool Intersects(BoundingFrustum frustum) { if (frustum == null) throw new NullReferenceException(); IntersectsHelper.BoundingFrustumIntersectsBoundingSphere(frustum, ref this, out bool result); return result; } /// /// Gets whether or not the other intersects with this sphere. /// /// The other sphere for testing. /// true if other intersects with this sphere; false otherwise. public bool Intersects(BoundingSphere sphere) { bool result; IntersectsHelper.BoundingSphereIntersectsBoundingSphere(ref this, ref sphere, out result); return result; } /// /// Gets whether or not the other intersects with this sphere. /// /// The other sphere for testing. /// true if other intersects with this sphere; false otherwise. As an output parameter. public void Intersects(ref BoundingSphere sphere, out bool result) { IntersectsHelper.BoundingSphereIntersectsBoundingSphere(ref this, ref sphere, out result); } /// /// Gets whether or not a specified intersects with this sphere. /// /// The plane for testing. /// Type of intersection. public PlaneIntersectionType Intersects(Plane plane) { PlaneIntersectionType result; IntersectsHelper.BoundingSphereIntersectsPlane(ref this, ref plane, out result); return result; } /// /// Gets whether or not a specified intersects with this sphere. /// /// The plane for testing. /// Type of intersection as an output parameter. public void Intersects(ref Plane plane, out PlaneIntersectionType result) { IntersectsHelper.BoundingSphereIntersectsPlane(ref this, ref plane, out result); } /// /// Gets whether or not a specified intersects with this sphere. /// /// The ray for testing. /// Distance of ray intersection or null if there is no intersection. public float? Intersects(Ray ray) { float? result; IntersectsHelper.BoundingSphereIntersectsRay(ref this, ref ray, out result); return result; } /// /// Gets whether or not a specified intersects with this sphere. /// /// The ray for testing. /// Distance of ray intersection or null if there is no intersection as an output parameter. public void Intersects(ref Ray ray, out float? result) { IntersectsHelper.BoundingSphereIntersectsRay(ref this, ref ray, out result); } #endregion /// /// Returns a representation of this in the format: /// {Center:[] Radius:[]} /// /// A representation of this . public override string ToString() { return "{Center:" + this.Center + " Radius:" + this.Radius + "}"; } #region Transform /// /// Creates a new that contains a transformation of translation and scale from this sphere by the specified . /// /// The transformation . /// Transformed . public BoundingSphere Transform(Matrix matrix) { BoundingSphere sphere = new BoundingSphere(); sphere.Center = Vector3.Transform(this.Center, matrix); sphere.Radius = this.Radius * ((float)Math.Sqrt((double)Math.Max((matrix.M11 * matrix.M11) + (matrix.M12 * matrix.M12) + (matrix.M13 * matrix.M13), Math.Max( (matrix.M21 * matrix.M21) + (matrix.M22 * matrix.M22) + (matrix.M23 * matrix.M23), (matrix.M31 * matrix.M31) + (matrix.M32 * matrix.M32) + (matrix.M33 * matrix.M33))))); return sphere; } /// /// Creates a new that contains a transformation of translation and scale from this sphere by the specified . /// /// The transformation . /// Transformed as an output parameter. public void Transform(ref Matrix matrix, out BoundingSphere result) { result.Center = Vector3.Transform(this.Center, matrix); result.Radius = this.Radius * ((float)Math.Sqrt((double)Math.Max((matrix.M11 * matrix.M11) + (matrix.M12 * matrix.M12) + (matrix.M13 * matrix.M13), Math.Max((matrix.M21 * matrix.M21) + (matrix.M22 * matrix.M22) + (matrix.M23 * matrix.M23), (matrix.M31 * matrix.M31) + (matrix.M32 * matrix.M32) + (matrix.M33 * matrix.M33))))); } #endregion /// /// Deconstruction method for . /// /// /// public void Deconstruct(out Vector3 center, out float radius) { center = Center; radius = Radius; } #endregion #region Operators /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator == (BoundingSphere a, BoundingSphere b) { return a.Equals(b); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator != (BoundingSphere a, BoundingSphere b) { return !a.Equals(b); } #endregion } } ================================================ FILE: src/Xna.Framework/Complex.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Complex : IEquatable { #region Private Fields private static readonly Complex _zero = new Complex(0, 0); private static readonly Complex _one = new Complex(1, 0); private static readonly Complex _imaginaryOne = new Complex(0, 1); #endregion #region Public Fields /// /// The real part of this number. /// [DataMember] public float R; /// /// The imaginary part of this number. /// [DataMember] public float i; #endregion #region Properties /// /// Returns a number with components (0, 0i). /// public static Complex Zero { get { return _zero; } } /// /// Returns a number with components (1, 0i). /// public static Complex One { get { return _one; } } /// /// Returns a number with components (0, 1i). /// public static Complex ImaginaryOne { get { return _imaginaryOne; } } /// /// Returns a number with components (1, 0i). /// public static Complex Identity { get { return _one; } } public float Phase { get { return (float)Math.Atan2(i, R); } } public float Magnitude { get { return (float)Math.Sqrt((R * R) + (i * i)); } } internal string DebugDisplayString { get { if (this == Complex.Identity) return "Identity"; return String.Format("{{R: {0} i: {1} Magnitude: {2} Phase: {3}}}", R, i, Magnitude, Phase); } } #endregion /// /// Constructs a complex number with real and imaginary components. /// /// The real part of this number. /// The imaginary part of this number. public Complex(float real, float imaginary) { R = real; i = imaginary; } /// /// Constructs a complex number from . /// /// The R,i components. public Complex(Vector2 value) { R = value.X; i = value.Y; } /// /// Creates a new number from the specified angle. /// /// /// The angle in radians. /// /// The magnitude. public static Complex CreateFromPolarCoordinates(float phase, float magnitude) { Complex result; result.R = (float)Math.Cos(phase) * magnitude; result.i = (float)Math.Sin(phase) * magnitude; return result; } /// /// Creates a new number from the specified angle. /// /// /// The angle in radians. public static Complex CreateFromAngle(float angle) { Complex result; result.R = (float)Math.Cos(angle); result.i = (float)Math.Sin(angle); return result; } /// /// Transforms this complex number into its conjugated version. /// public void Conjugate() { i = -i; } /// /// Flips the sign of the all the complex number components. /// public void Negate() { R = -R; i = -i; } /// /// Returns the squared magnitude of the complex number. /// /// The squared magnitude of the complex number components. public float MagnitudeSquared() { return (R * R) + (i * i); } /// /// Scales the complex number magnitude to unit length. /// public void Normalize() { float mag = Magnitude; R = R / mag; i = i / mag; } /// /// Gets a representation for this complex number. /// /// A representation for this complex number. public Vector2 ToVector2() { return new Vector2(R, i); } internal Complex Rotate90() { return new Complex(-i, +R); } internal Complex Rotate180() { return new Complex(-R, -i); } internal Complex Rotate270() { return new Complex(+i, -R); } /// /// Creates a new number that contains a multiplication of two complex numbers. /// /// Source number. /// Source number. /// The result of the complex number multiplication. public static Complex Multiply(Complex left, Complex right) { return new Complex(left.R * right.R - left.i * right.i, left.i * right.R + left.R * right.i); } /// /// Creates a new number that contains a multiplication of two complex numbers. /// /// Source number. /// Source number. /// The result of the complex number multiplication as an output parameter. public static void Multiply(ref Complex left, ref Complex right, out Complex result) { result = new Complex(left.R * right.R - left.i * right.i, left.i * right.R + left.R * right.i); } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the Complex multiplication with a scalar. public static Complex Multiply(Complex left, float right) { left.R *= right; left.i *= right; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the multiplication with a scalar as an output parameter. public static void Multiply(ref Complex left, float right, out Complex result) { result.R = left.R * right; result.i = left.i * right; } public static Complex Divide(Complex left, Complex right) { return new Complex(right.R * left.R + right.i * left.i, right.R * left.i - right.i * left.R); } public static void Divide(ref Complex left, ref Complex right, out Complex result) { result = new Complex(right.R * left.R + right.i * left.i, right.R * left.i - right.i * left.R); } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a Complex by a scalar. public static Complex Divide(Complex left, float right) { left.R /= right; left.i /= right; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a Complex by a scalar as an output parameter. public static void Divide(ref Complex left, float right, out Complex result) { result.R = left.R / right; result.i = left.i / right; } /// /// Transforms this complex number into its conjugated version. /// /// The complex number which values will be used to create the conjugated version. /// The conjugate version of the specified complex number. public static Complex Conjugate(Complex value) { return new Complex(value.R, -value.i); } /// /// Transforms this complex number into its conjugated version. /// /// The complex number which values will be used to create the conjugated version. /// The conjugated version of the specified complex number as an output parameter. public static void Conjugate(ref Complex value, out Complex result) { result = new Complex(value.R, -value.i); } /// /// Flips the sign of the all the complex number components. /// /// Source . /// The result of the complex number negation. public static Complex Negate(Complex value) { return new Complex(-value.R, -value.i); } /// /// Flips the sign of the all the complex number components. /// /// Source . /// The result of the complex number negation as an output parameter. public static void Negate(ref Complex value, out Complex result) { result = new Complex(-value.R, -value.i); } /// /// Scales the complex number magnitude to unit length. /// /// Source . /// The unit length complex number. public static Complex Normalize(Complex value) { float mag = value.Magnitude; return new Complex(value.R / mag, -value.i / mag); } /// /// Scales the complex number magnitude to unit length. /// /// Source . /// The unit length complex number as an output parameter. public static void Normalize(ref Complex value, out Complex result) { float mag = value.Magnitude; result = new Complex(value.R / mag, -value.i / mag); } /// /// Deconstruction method for . /// /// The real part of this number. /// The imaginary part of this number. public void Deconstruct(out float real, out float imaginary) { real = this.R; imaginary = this.i; } #region Operators /// /// Flips the sign of the all the complex number components. /// /// Source on the right of the sub sign. /// The result of the complex number negation. public static Complex operator -(Complex value) { return new Complex(-value.R, -value.i); } /// /// Multiplies two complex numbers. /// /// Source number on the left of the mul sign. /// Source number on the right of the mul sign. /// Result of the complex numbers multiplication. public static Complex operator *(Complex left, Complex right) { return new Complex(left.R * right.R - left.i * right.i, left.i * right.R + left.R * right.i); } /// /// Multiplies the components of a number by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the complex number multiplication with a scalar. public static Complex operator *(Complex left, float right) { left.R *= right; left.i *= right; return left; } /// /// Divides a number by the other number. /// /// Source number on the left of the div sign. /// Divisor number on the right of the div sign. /// The result of dividing the complex numbers. public static Complex operator /(Complex left, Complex right) { return new Complex(right.R * left.R + right.i * left.i, right.R * left.i - right.i * left.R); } /// /// Divides the components of a number by a scalar. /// /// Source on the left of the div sign. /// Divisor scalar on the right of the div sign. /// The result of dividing a complex number by a scalar. public static Complex operator /(Complex left, float right) { left.R /= right; left.i /= right; return left; } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Complex left, Complex right) { return left.R == right.R && left.i == right.i; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Complex left, Complex right) { return left.R != right.R || left.i != right.i; } #if NET8_0_OR_GREATER public static explicit operator Complex(SysNumerics.Complex value) { Complex result; result.R = (float)value.Real; result.i = (float)value.Imaginary; return result; } public static explicit operator SysNumerics.Complex(Complex value) { return new SysNumerics.Complex( (double)value.R, (double)value.i); } #endif #endregion #region IEquatable /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is Complex) return Equals((Complex)obj); return false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Complex other) { return R == other.R && i == other.i; } #endregion /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return R.GetHashCode() + i.GetHashCode(); } /// public override string ToString() { return String.Format("{{R: {0}, i: {1} }}", R, i); } } } ================================================ FILE: src/Xna.Framework/ContainmentType.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines how the bounding volumes intersects or contain one another. /// public enum ContainmentType { /// /// Indicates that there is no overlap between two bounding volumes. /// Disjoint, /// /// Indicates that one bounding volume completely contains another volume. /// Contains, /// /// Indicates that bounding volumes partially overlap one another. /// Intersects } } ================================================ FILE: src/Xna.Framework/Curve.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Contains a collection of points in 2D space and provides methods for evaluating features of the curve they define. /// // TODO : [TypeConverter(typeof(ExpandableObjectConverter))] [DataContract] public class Curve : ICurveEvaluator { #region Private Fields private CurveLoopType _preLoop; private CurveLoopType _postLoop; private CurveKeyCollection _keys; #endregion #region Public Properties /// /// Returns true if this curve is constant (has zero or one points); false otherwise. /// [DataMember] public bool IsConstant { get { return this._keys.Count <= 1; } } /// /// Defines how to handle weighting values that are less than the first control point in the curve. /// [DataMember] public CurveLoopType PreLoop { get { return this._preLoop; } set { this._preLoop = value; } } /// /// Defines how to handle weighting values that are greater than the last control point in the curve. /// [DataMember] public CurveLoopType PostLoop { get { return this._postLoop; } set { this._postLoop = value; } } /// /// The collection of curve keys. /// [DataMember] public CurveKeyCollection Keys { get { return this._keys; } } #endregion #region Public Constructors /// /// Constructs a curve. /// public Curve() { this._keys = new CurveKeyCollection(); } #endregion #region Public Methods /// /// Creates a copy of this curve. /// /// A copy of this curve. public Curve Clone() { Curve curve = new Curve(); curve._keys = this._keys.Clone(); curve._preLoop = this._preLoop; curve._postLoop = this._postLoop; return curve; } /// /// Evaluate the value at a position of this . /// /// The position on this . /// Value at the position on this . public float Evaluate(float position) { if (_keys.Count == 0) { return 0f; } if (_keys.Count == 1) { return _keys[0].Value; } CurveKey first = _keys[0]; CurveKey last = _keys[_keys.Count - 1]; if (position < first.Position) { switch (this.PreLoop) { case CurveLoopType.Constant: //constant return first.Value; case CurveLoopType.Linear: // linear y = a*x +b with a tangeant of last point return first.Value - first.TangentIn * (first.Position - position); case CurveLoopType.Cycle: //start -> end / start -> end int cycle = GetNumberOfCycle(position); float virtualPos = position - (cycle * (last.Position - first.Position)); return GetCurvePosition(virtualPos); case CurveLoopType.CycleOffset: //make the curve continue (with no step) so must up the curve each cycle of delta(value) cycle = GetNumberOfCycle(position); virtualPos = position - (cycle * (last.Position - first.Position)); return (GetCurvePosition(virtualPos) + cycle * (last.Value - first.Value)); case CurveLoopType.Oscillate: //go back on curve from end and target start // start-> end / end -> start cycle = GetNumberOfCycle(position); if (0 == cycle % 2f)//if pair virtualPos = position - (cycle * (last.Position - first.Position)); else virtualPos = last.Position - position + first.Position + (cycle * (last.Position - first.Position)); return GetCurvePosition(virtualPos); } } else if (position > last.Position) { int cycle; switch (this.PostLoop) { case CurveLoopType.Constant: //constant return last.Value; case CurveLoopType.Linear: // linear y = a*x +b with a tangeant of last point return last.Value + first.TangentOut * (position - last.Position); case CurveLoopType.Cycle: //start -> end / start -> end cycle = GetNumberOfCycle(position); float virtualPos = position - (cycle * (last.Position - first.Position)); return GetCurvePosition(virtualPos); case CurveLoopType.CycleOffset: //make the curve continue (with no step) so must up the curve each cycle of delta(value) cycle = GetNumberOfCycle(position); virtualPos = position - (cycle * (last.Position - first.Position)); return (GetCurvePosition(virtualPos) + cycle * (last.Value - first.Value)); case CurveLoopType.Oscillate: //go back on curve from end and target start // start-> end / end -> start cycle = GetNumberOfCycle(position); virtualPos = position - (cycle * (last.Position - first.Position)); if (0 == cycle % 2f)//if pair virtualPos = position - (cycle * (last.Position - first.Position)); else virtualPos = last.Position - position + first.Position + (cycle * (last.Position - first.Position)); return GetCurvePosition(virtualPos); } } //in curve return GetCurvePosition(position); } /// /// Computes tangents for all keys in the collection. /// /// The tangent type for both in and out. public void ComputeTangents (CurveTangent tangentType) { ComputeTangents(tangentType, tangentType); } /// /// Computes tangents for all keys in the collection. /// /// The tangent in-type. for more details. /// The tangent out-type. for more details. public void ComputeTangents(CurveTangent tangentInType, CurveTangent tangentOutType) { for (var i = 0; i < Keys.Count; ++i) { ComputeTangent(i, tangentInType, tangentOutType); } } /// /// Computes tangent for the specific key in the collection. /// /// The index of a key in the collection. /// The tangent type for both in and out. public void ComputeTangent(int keyIndex, CurveTangent tangentType) { ComputeTangent(keyIndex, tangentType, tangentType); } /// /// Computes tangent for the specific key in the collection. /// /// The index of key in the collection. /// The tangent in-type. for more details. /// The tangent out-type. for more details. public void ComputeTangent(int keyIndex, CurveTangent tangentInType, CurveTangent tangentOutType) { // See http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.curvetangent.aspx var key = _keys[keyIndex]; float p0, p, p1; p0 = p = p1 = key.Position; float v0, v, v1; v0 = v = v1 = key.Value; if ( keyIndex > 0 ) { p0 = _keys[keyIndex - 1].Position; v0 = _keys[keyIndex - 1].Value; } if (keyIndex < _keys.Count-1) { p1 = _keys[keyIndex + 1].Position; v1 = _keys[keyIndex + 1].Value; } switch (tangentInType) { case CurveTangent.Flat: key.TangentIn = 0; break; case CurveTangent.Linear: key.TangentIn = v - v0; break; case CurveTangent.Smooth: var pn = p1 - p0; if (Math.Abs(pn) < float.Epsilon) key.TangentIn = 0; else key.TangentIn = (v1 - v0) * ((p - p0) / pn); break; } switch (tangentOutType) { case CurveTangent.Flat: key.TangentOut = 0; break; case CurveTangent.Linear: key.TangentOut = v1 - v; break; case CurveTangent.Smooth: var pn = p1 - p0; if (Math.Abs(pn) < float.Epsilon) key.TangentOut = 0; else key.TangentOut = (v1 - v0) * ((p1 - p) / pn); break; } } #endregion #region Private Methods private int GetNumberOfCycle(float position) { float cycle = (position - _keys[0].Position) / (_keys[_keys.Count - 1].Position - _keys[0].Position); if (cycle < 0f) cycle--; return (int)cycle; } private float GetCurvePosition(float position) { //only for position in curve CurveKey prev = this._keys[0]; CurveKey next; for (int i = 1; i < this._keys.Count; ++i) { next = this.Keys[i]; if (next.Position >= position) { if (prev.Continuity == CurveContinuity.Step) { if (position >= 1f) { return next.Value; } return prev.Value; } float t = (position - prev.Position) / (next.Position - prev.Position);//to have t in [0,1] float ts = t * t; float tss = ts * t; //After a lot of search on internet I have found all about spline function // and bezier (phi'sss ancien) but finaly use hermite curve //http://en.wikipedia.org/wiki/Cubic_Hermite_spline //P(t) = (2*t^3 - 3t^2 + 1)*P0 + (t^3 - 2t^2 + t)m0 + (-2t^3 + 3t^2)P1 + (t^3-t^2)m1 //with P0.value = prev.value , m0 = prev.tangentOut, P1= next.value, m1 = next.TangentIn return (2 * tss - 3 * ts + 1f) * prev.Value + (tss - 2 * ts + t) * prev.TangentOut + (3 * ts - 2 * tss) * next.Value + (tss - ts) * next.TangentIn; } prev = next; } return 0f; } #endregion } } ================================================ FILE: src/Xna.Framework/CurveContinuity.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines the continuity of keys on a . /// public enum CurveContinuity { /// /// Interpolation can be used between this key and the next. /// Smooth, /// /// Interpolation cannot be used. A position between the two points returns this point. /// Step } } ================================================ FILE: src/Xna.Framework/CurveKey.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Key point on the . /// // TODO : [TypeConverter(typeof(ExpandableObjectConverter))] [DataContract] public class CurveKey : IEquatable, IComparable { #region Private Fields private CurveContinuity _continuity; private readonly float _position; private float _tangentIn; private float _tangentOut; private float _value; #endregion #region Properties /// /// Gets or sets the indicator whether the segment between this point and the next point on the curve is discrete or continuous. /// [DataMember] public CurveContinuity Continuity { get { return this._continuity; } set { this._continuity = value; } } /// /// Gets a position of the key on the curve. /// [DataMember] public float Position { get { return this._position; } } /// /// Gets or sets a tangent when approaching this point from the previous point on the curve. /// [DataMember] public float TangentIn { get { return this._tangentIn; } set { this._tangentIn = value; } } /// /// Gets or sets a tangent when leaving this point to the next point on the curve. /// [DataMember] public float TangentOut { get { return this._tangentOut; } set { this._tangentOut = value; } } /// /// Gets a value of this point. /// [DataMember] public float Value { get { return this._value; } set { this._value = value; } } #endregion #region Constructors /// /// Creates a new instance of class with position: 0 and value: 0. /// public CurveKey() : this(0, 0) { // This parameterless constructor is needed for correct serialization of CurveKeyCollection and CurveKey. } /// /// Creates a new instance of class. /// /// Position on the curve. /// Value of the control point. public CurveKey(float position, float value) : this(position, value, 0, 0, CurveContinuity.Smooth) { } /// /// Creates a new instance of class. /// /// Position on the curve. /// Value of the control point. /// Tangent approaching point from the previous point on the curve. /// Tangent leaving point toward next point on the curve. public CurveKey(float position, float value, float tangentIn, float tangentOut) : this(position, value, tangentIn, tangentOut, CurveContinuity.Smooth) { } /// /// Creates a new instance of class. /// /// Position on the curve. /// Value of the control point. /// Tangent approaching point from the previous point on the curve. /// Tangent leaving point toward next point on the curve. /// Indicates whether the curve is discrete or continuous. public CurveKey(float position, float value, float tangentIn, float tangentOut, CurveContinuity continuity) { this._position = position; this._value = value; this._tangentIn = tangentIn; this._tangentOut = tangentOut; this._continuity = continuity; } #endregion /// /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(CurveKey left, CurveKey right) { return !(left == right); } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(CurveKey left, CurveKey right) { if (object.Equals(left, null)) return object.Equals(right, null); if (object.Equals(right, null)) return object.Equals(left, null); return (left._position == right._position) && (left._value == right._value) && (left._tangentIn == right._tangentIn) && (left._tangentOut == right._tangentOut) && (left._continuity == right._continuity); } /// /// Creates a copy of this key. /// /// A copy of this key. public CurveKey Clone() { return new CurveKey(this._position, this._value, this._tangentIn, this._tangentOut, this._continuity); } #region Inherited Methods public int CompareTo(CurveKey other) { return this._position.CompareTo(other._position); } public bool Equals(CurveKey other) { return (this == other); } public override bool Equals(object obj) { return (obj as CurveKey) != null && Equals((CurveKey)obj); } public override int GetHashCode() { return this._position.GetHashCode() ^ this._value.GetHashCode() ^ this._tangentIn.GetHashCode() ^ this._tangentOut.GetHashCode() ^ this._continuity.GetHashCode(); } #endregion } } ================================================ FILE: src/Xna.Framework/CurveKeyCollection.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// The collection of the elements and a part of the class. /// // TODO : [TypeConverter(typeof(ExpandableObjectConverter))] [DataContract] public class CurveKeyCollection : ICollection { #region Private Fields private readonly List _keys; #endregion #region Properties /// /// Indexer. /// /// The index of key in this collection. /// at position. [DataMember(Name = "Items")] public CurveKey this[int index] { get { return _keys[index]; } set { if (value == null) throw new ArgumentNullException(); if (index >= _keys.Count) throw new IndexOutOfRangeException(); if (_keys[index].Position == value.Position) _keys[index] = value; else { _keys.RemoveAt(index); _keys.Add(value); } } } /// /// Returns the count of keys in this collection. /// [DataMember] public int Count { get { return _keys.Count; } } /// /// Returns false because it is not a read-only collection. /// [DataMember] public bool IsReadOnly { get { return false; } } #endregion #region Constructors /// /// Creates a new instance of class. /// public CurveKeyCollection() { _keys = new List(); } #endregion IEnumerator IEnumerable.GetEnumerator() { return _keys.GetEnumerator(); } /// /// Adds a key to this collection. /// /// New key for the collection. /// Throws if is null. /// The new key would be added respectively to a position of that key and the position of other keys. public void Add(CurveKey item) { if (item == null) throw new ArgumentNullException("item"); if (_keys.Count == 0) { this._keys.Add(item); return; } for (int i = 0; i < this._keys.Count; i++) { if (item.Position < this._keys[i].Position) { this._keys.Insert(i, item); return; } } this._keys.Add(item); } /// /// Removes all keys from this collection. /// public void Clear() { _keys.Clear(); } /// /// Creates a copy of this collection. /// /// A copy of this collection. public CurveKeyCollection Clone() { CurveKeyCollection ckc = new CurveKeyCollection(); foreach (CurveKey key in this._keys) ckc.Add(key); return ckc; } /// /// Determines whether this collection contains a specific key. /// /// The key to locate in this collection. /// true if the key is found; false otherwise. public bool Contains(CurveKey item) { return _keys.Contains(item); } /// /// Copies the keys of this collection to an array, starting at the array index provided. /// /// Destination array where elements will be copied. /// The zero-based index in the array to start copying from. public void CopyTo(CurveKey[] array, int arrayIndex) { _keys.CopyTo(array, arrayIndex); } /// /// Returns an enumerator that iterates through the collection. /// /// An enumerator for the . public IEnumerator GetEnumerator() { return _keys.GetEnumerator(); } /// /// Finds element in the collection and returns its index. /// /// Element for the search. /// Index of the element; or -1 if item is not found. public int IndexOf(CurveKey item) { return _keys.IndexOf(item); } /// /// Removes element at the specified index. /// /// The index which element will be removed. public void RemoveAt(int index) { _keys.RemoveAt(index); } /// /// Removes specific element. /// /// The element /// true if item is successfully removed; false otherwise. This method also returns false if item was not found. public bool Remove(CurveKey item) { return _keys.Remove(item); } } } ================================================ FILE: src/Xna.Framework/CurveLoopType.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines how the value is determined for position before first point or after the end point on the . /// public enum CurveLoopType { /// /// The value of will be evaluated as first point for positions before the beginning and end point for positions after the end. /// Constant, /// /// The positions will wrap around from the end to beginning of the for determined the value. /// Cycle, /// /// The positions will wrap around from the end to beginning of the . /// The value will be offset by the difference between the values of first and end multiplied by the wrap amount. /// If the position is before the beginning of the the difference will be subtracted from its value; otherwise the difference will be added. /// CycleOffset, /// /// The value at the end of the act as an offset from the same side of the toward the opposite side. /// Oscillate, /// /// The linear interpolation will be performed for determined the value. /// Linear } } ================================================ FILE: src/Xna.Framework/CurveTangent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines the different tangent types to be calculated for points in a . /// public enum CurveTangent { /// /// The tangent which always has a value equal to zero. /// Flat, /// /// The tangent which contains a difference between current tangent value and the tangent value from the previous . /// Linear, /// /// The smoouth tangent which contains the inflection between and by taking into account the values of both neighbors of the . /// Smooth } } ================================================ FILE: src/Xna.Framework/FrameworkDispatcher.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform; namespace Microsoft.Xna.Platform { public interface IFrameworkDispatcher { event Action OnUpdate; void Update(); } } namespace Microsoft.Xna.Framework { /// /// Helper class for processing internal framework events. /// /// /// If you use class, is called automatically. /// Otherwise you must call it as part of your game loop. /// public sealed class FrameworkDispatcher : IFrameworkDispatcher { private static FrameworkDispatcher _current; /// /// Returns the current FrameworkDispatcher instance. /// public static FrameworkDispatcher Current { get { lock (typeof(FrameworkDispatcher)) { if (_current == null) _current = new FrameworkDispatcher(); return _current; } } } /// /// Processes framework events. /// public static void Update() { ((IFrameworkDispatcher)FrameworkDispatcher.Current).Update(); } private Action _onUpdate; private FrameworkDispatcher() { } event Action IFrameworkDispatcher.OnUpdate { add { _onUpdate += value; } remove { _onUpdate -= value; } } void IFrameworkDispatcher.Update() { var updateHandler = _onUpdate; if (updateHandler != null) updateHandler(); } } } ================================================ FILE: src/Xna.Framework/ICurveEvaluator.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Interface for curve evaluation. Implemented by /// public interface ICurveEvaluator { /// /// Evaluate the value at a position of this . /// /// The position on this . /// Value at the position on this . T Evaluate(float position); } } ================================================ FILE: src/Xna.Framework/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework/IntersectsHelper.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework { internal class IntersectsHelper { internal static void BoundingBoxIntersectsBoundingBox(ref BoundingBox box, ref BoundingBox other, out bool result) { if ((box.Max.X >= other.Min.X) && (box.Min.X <= other.Max.X)) { if ((box.Max.Y < other.Min.Y) || (box.Min.Y > other.Max.Y)) { result = false; return; } result = (box.Max.Z >= other.Min.Z) && (box.Min.Z <= other.Max.Z); return; } result = false; return; } internal static void BoundingBoxIntersectsBoundingFrustum(ref BoundingBox box, BoundingFrustum frustum, out bool result) { result = true; for (int i = 0; i < BoundingFrustum.PlaneCount; i++) { frustum._planes[i].Intersects(ref box, out PlaneIntersectionType planeIntersectionType); switch (planeIntersectionType) { case PlaneIntersectionType.Front: result = false; return; } } BoundingBox fbox = BoundingBox.CreateFromPoints(frustum._corners); box.Intersects(ref fbox, out result); } internal static void BoundingBoxIntersectsPlane(ref BoundingBox box, ref Plane plane, out PlaneIntersectionType result) { // See http://zach.in.tu-clausthal.de/teaching/cg_literatur/lighthouse3d_view_frustum_culling/index.html Vector3 positiveVertex; Vector3 negativeVertex; if (plane.Normal.X >= 0) { positiveVertex.X = box.Max.X; negativeVertex.X = box.Min.X; } else { positiveVertex.X = box.Min.X; negativeVertex.X = box.Max.X; } if (plane.Normal.Y >= 0) { positiveVertex.Y = box.Max.Y; negativeVertex.Y = box.Min.Y; } else { positiveVertex.Y = box.Min.Y; negativeVertex.Y = box.Max.Y; } if (plane.Normal.Z >= 0) { positiveVertex.Z = box.Max.Z; negativeVertex.Z = box.Min.Z; } else { positiveVertex.Z = box.Min.Z; negativeVertex.Z = box.Max.Z; } // Inline Vector3.Dot(plane.Normal, negativeVertex) + plane.D; var distance = plane.Normal.X * negativeVertex.X + plane.Normal.Y * negativeVertex.Y + plane.Normal.Z * negativeVertex.Z + plane.D; if (distance > 0) { result = PlaneIntersectionType.Front; return; } // Inline Vector3.Dot(plane.Normal, positiveVertex) + plane.D; distance = plane.Normal.X * positiveVertex.X + plane.Normal.Y * positiveVertex.Y + plane.Normal.Z * positiveVertex.Z + plane.D; if (distance < 0) { result = PlaneIntersectionType.Back; return; } result = PlaneIntersectionType.Intersecting; } // adapted from http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-7-intersecting-simple-shapes/ray-box-intersection/ internal static void BoundingBoxIntersectsRay(ref BoundingBox box, ref Ray ray, out float? result) { const float Epsilon = 1e-6f; float? tMin = null, tMax = null; if (Math.Abs(ray.Direction.X) < Epsilon) { if (ray.Position.X < box.Min.X || ray.Position.X > box.Max.X) { result = null; return; } } else { tMin = (box.Min.X - ray.Position.X) / ray.Direction.X; tMax = (box.Max.X - ray.Position.X) / ray.Direction.X; if (tMin > tMax) { var temp = tMin; tMin = tMax; tMax = temp; } } if (Math.Abs(ray.Direction.Y) < Epsilon) { if (ray.Position.Y < box.Min.Y || ray.Position.Y > box.Max.Y) { result = null; return; } } else { var tMinY = (box.Min.Y - ray.Position.Y) / ray.Direction.Y; var tMaxY = (box.Max.Y - ray.Position.Y) / ray.Direction.Y; if (tMinY > tMaxY) { var temp = tMinY; tMinY = tMaxY; tMaxY = temp; } if ((tMin.HasValue && tMin > tMaxY) || (tMax.HasValue && tMinY > tMax)) { result = null; return; } if (!tMin.HasValue || tMinY > tMin) tMin = tMinY; if (!tMax.HasValue || tMaxY < tMax) tMax = tMaxY; } if (Math.Abs(ray.Direction.Z) < Epsilon) { if (ray.Position.Z < box.Min.Z || ray.Position.Z > box.Max.Z) { result = null; return; } } else { var tMinZ = (box.Min.Z - ray.Position.Z) / ray.Direction.Z; var tMaxZ = (box.Max.Z - ray.Position.Z) / ray.Direction.Z; if (tMinZ > tMaxZ) { var temp = tMinZ; tMinZ = tMaxZ; tMaxZ = temp; } if ((tMin.HasValue && tMin > tMaxZ) || (tMax.HasValue && tMinZ > tMax)) { result = null; return; } if (!tMin.HasValue || tMinZ > tMin) tMin = tMinZ; if (!tMax.HasValue || tMaxZ < tMax) tMax = tMaxZ; } // having a positive tMax and a negative tMin means the ray is inside the box // we expect the intesection distance to be 0 in that case if ((tMin.HasValue && tMin < 0) && tMax > 0) { result = 0; return; } // a negative tMin means that the intersection point is behind the ray's origin // we discard these as not hitting the AABB if (tMin < 0) { result = null; return; } result = tMin; return; } internal static void BoundingBoxIntersectsBoundingSphere(ref BoundingBox box, ref BoundingSphere sphere, out bool result) { double squareDistance = 0.0; if (sphere.Center.X < box.Min.X) squareDistance += (sphere.Center.X - box.Min.X) * (sphere.Center.X - box.Min.X); else if (sphere.Center.X > box.Max.X) squareDistance += (sphere.Center.X - box.Max.X) * (sphere.Center.X - box.Max.X); if (sphere.Center.Y < box.Min.Y) squareDistance += (sphere.Center.Y - box.Min.Y) * (sphere.Center.Y - box.Min.Y); else if (sphere.Center.Y > box.Max.Y) squareDistance += (sphere.Center.Y - box.Max.Y) * (sphere.Center.Y - box.Max.Y); if (sphere.Center.Z < box.Min.Z) squareDistance += (sphere.Center.Z - box.Min.Z) * (sphere.Center.Z - box.Min.Z); else if (sphere.Center.Z > box.Max.Z) squareDistance += (sphere.Center.Z - box.Max.Z) * (sphere.Center.Z - box.Max.Z); result = squareDistance <= sphere.Radius * sphere.Radius; } internal static void BoundingFrustumIntersectsBoundingFrustum(BoundingFrustum frustum, BoundingFrustum other, out bool result) { result = true; for (int i = 0; i < BoundingFrustum.PlaneCount; i++) { other.Intersects(ref frustum._planes[i], out PlaneIntersectionType planeIntersectionType); switch (planeIntersectionType) { case PlaneIntersectionType.Front: result = false; return; } } for (int i = 0; i < BoundingFrustum.PlaneCount; i++) { frustum.Intersects(ref other._planes[i], out PlaneIntersectionType planeIntersectionType); switch (planeIntersectionType) { case PlaneIntersectionType.Front: result = false; return; } } } internal static void BoundingFrustumIntersectsPlane(BoundingFrustum frustum, ref Plane plane, out PlaneIntersectionType result) { result = plane.Intersects(ref frustum._corners[0]); for (int i = 1; i < frustum._corners.Length; i++) { PlaneIntersectionType planeIntersectionType = plane.Intersects(ref frustum._corners[i]); if (planeIntersectionType != result) result = PlaneIntersectionType.Intersecting; } } internal static void BoundingFrustumIntersectsBoundingSphere(BoundingFrustum frustum, ref BoundingSphere sphere, out bool result) { result = true; int sphereBack = 0; int sphereCenterBack = 0; for (int i = 0; i < BoundingFrustum.PlaneCount; i++) { float distance = frustum._planes[i].DotCoordinate(sphere.Center); if (distance > sphere.Radius) // PlaneIntersectionType.Front { result = false; return; } else if (distance < -sphere.Radius) // PlaneIntersectionType.Back { sphereBack++; } else // PlaneIntersectionType.Intersecting { } if (distance < 0) sphereCenterBack++; } // The sphere is inside the frustum (sphereBack==6), // or intersects with 1 face and is contained by the other 5 (sphereBack==5). if (sphereBack >= (BoundingFrustum.PlaneCount - 1)) return; // The sphere center is inside the frustum. if (sphereCenterBack == BoundingFrustum.PlaneCount) return; // The sphere intersects with an edge. if (SegmentIntersectsBoundingSphere(ref frustum._corners[0], ref frustum._corners[1], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[1], ref frustum._corners[2], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[2], ref frustum._corners[3], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[3], ref frustum._corners[0], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[4], ref frustum._corners[5], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[5], ref frustum._corners[6], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[6], ref frustum._corners[7], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[7], ref frustum._corners[4], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[0], ref frustum._corners[4], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[1], ref frustum._corners[5], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[2], ref frustum._corners[6], ref sphere)) return; if (SegmentIntersectsBoundingSphere(ref frustum._corners[3], ref frustum._corners[7], ref sphere)) return; float dotCoord0 = frustum._planes[0].DotCoordinate(sphere.Center); if (dotCoord0 >= 0 && dotCoord0 <= sphere.Radius) { Vector3 pt0 = sphere.Center - dotCoord0 * frustum._planes[0].Normal; FixedPolygon4 points = new FixedPolygon4(frustum._corners, 1, 0, 3, 2); points.OrderQuad(ref frustum._planes[0].Normal); if (PointInPolygon(ref pt0, points)) return; } float dotCoord1 = frustum._planes[1].DotCoordinate(sphere.Center); if (dotCoord1 >= 0 && dotCoord1 <= sphere.Radius) { Vector3 pt1 = sphere.Center - dotCoord1 * frustum._planes[1].Normal; FixedPolygon4 points = new FixedPolygon4(frustum._corners, 4, 5, 6, 7); points.OrderQuad(ref frustum._planes[1].Normal); if (PointInPolygon(ref pt1, points)) return; } float dotCoord2 = frustum._planes[2].DotCoordinate(sphere.Center); if (dotCoord2 >= 0 && dotCoord2 <= sphere.Radius) { Vector3 pt2 = sphere.Center - dotCoord2 * frustum._planes[2].Normal; FixedPolygon4 points =new FixedPolygon4(frustum._corners, 3, 0, 7, 4); points.OrderQuad(ref frustum._planes[2].Normal); if (PointInPolygon(ref pt2, points)) return; } float dotCoord3 = frustum._planes[3].DotCoordinate(sphere.Center); if (dotCoord3 >= 0 && dotCoord3 <= sphere.Radius) { Vector3 pt3 = sphere.Center - dotCoord3 * frustum._planes[3].Normal; FixedPolygon4 points =new FixedPolygon4(frustum._corners, 1, 2, 5, 6); points.OrderQuad(ref frustum._planes[3].Normal); if (PointInPolygon(ref pt3, points)) return; } float dotCoord4 = frustum._planes[4].DotCoordinate(sphere.Center); if (dotCoord4 >= 0 && dotCoord4 <= sphere.Radius) { Vector3 pt4 = sphere.Center - dotCoord4 * frustum._planes[4].Normal; FixedPolygon4 points =new FixedPolygon4(frustum._corners, 0, 1, 4, 5); points.OrderQuad(ref frustum._planes[4].Normal); if (PointInPolygon(ref pt4, points)) return; } float dotCoord5 = frustum._planes[5].DotCoordinate(sphere.Center); if (dotCoord5 >= 0 && dotCoord5 <= sphere.Radius) { Vector3 pt5 = sphere.Center - dotCoord5 * frustum._planes[5].Normal; FixedPolygon4 points =new FixedPolygon4(frustum._corners, 2, 3, 6, 7); points.OrderQuad(ref frustum._planes[5].Normal); if (PointInPolygon(ref pt5, points)) return; } result = false; } private struct FixedPolygon4 { private Vector3[] _corners; private int _v0, _v1,_v2,_v3; internal FixedPolygon4(Vector3[] corners, int v0, int v1, int v2, int v3) { this._corners = corners; this._v0 = v0; this._v1 = v1; this._v2 = v2; this._v3 = v3; } public Vector3 this[int idx] { get { switch (idx) { case 0: return _corners[_v0]; case 1: return _corners[_v1]; case 2: return _corners[_v2]; case 3: return _corners[_v3]; default: throw new InvalidOperationException("idx"); } } } private int GetInternalKey(int idx) { switch (idx) { case 0: return _v0; case 1: return _v1; case 2: return _v2; case 3: return _v3; default: throw new InvalidOperationException("idx"); } } private void SetInternalKey(int idx, int keyInternal) { switch (idx) { case 0: _v0 = keyInternal; return; case 1: _v1 = keyInternal; return; case 2: _v2 = keyInternal; return; case 3: _v3 = keyInternal; return; default: throw new InvalidOperationException("idx"); } } internal unsafe void OrderQuad(ref Vector3 normal) { Vector3 center = (this[0] + this[1] + this[2] + this[3]) * 0.25f; normal = Vector3.Normalize(normal); Vector3 refAxis = Math.Abs(normal.X) > 0.9f ? Vector3.UnitY : Vector3.UnitX; Vector3 u = Vector3.Normalize(Vector3.Cross(normal, refAxis)); Vector3 v = Vector3.Cross(normal, u); // precompute angles float* angles = stackalloc float[4]; angles[0] = (float)Math.Atan2(Vector3.Dot(this[0] - center, v), Vector3.Dot(this[0] - center, u)); angles[1] = (float)Math.Atan2(Vector3.Dot(this[1] - center, v), Vector3.Dot(this[1] - center, u)); angles[2] = (float)Math.Atan2(Vector3.Dot(this[2] - center, v), Vector3.Dot(this[2] - center, u)); angles[3] = (float)Math.Atan2(Vector3.Dot(this[3] - center, v), Vector3.Dot(this[3] - center, u)); // simple insertion sort for 4 items for (int i = 1; i < 4; i++) { int keyInternal = GetInternalKey(i); float keyAngle = angles[i]; int j = i-1; while (j >= 0 && angles[j] > keyAngle) { SetInternalKey(j+1, GetInternalKey(j)); angles[j+1] = angles[j]; j--; } SetInternalKey(j+1, keyInternal); angles[j+1] = keyAngle; } } } private static bool PointInPolygon(ref Vector3 pt, FixedPolygon4 points) { return (IsPointInTriangle(ref pt, points[0], points[1], points[2]) || IsPointInTriangle(ref pt, points[0], points[2], points[3])); } static bool IsPointInTriangle(ref Vector3 pt, Vector3 a, Vector3 b, Vector3 c) { Vector3 v0 = c - a; Vector3 v1 = b - a; Vector3 v2 = pt - a; float dot00 = Vector3.Dot(v0, v0); float dot01 = Vector3.Dot(v0, v1); float dot02 = Vector3.Dot(v0, v2); float dot11 = Vector3.Dot(v1, v1); float dot12 = Vector3.Dot(v1, v2); float denom = dot00 * dot11 - dot01 * dot01; if (denom == 0) return false; float u = (dot11 * dot02 - dot01 * dot12) / denom; float v = (dot00 * dot12 - dot01 * dot02) / denom; return (u >= 0) && (v >= 0) && (u + v <= 1); } private static bool SegmentIntersectsBoundingSphere(ref Vector3 pos0, ref Vector3 pos1, ref BoundingSphere sphere) { Vector3 direction = pos1 - pos0; float sqSegmentLength = direction.LengthSquared(); float segmentLength = (float)Math.Sqrt(sqSegmentLength); Vector3 segmentNormal = direction; segmentNormal.X /= segmentLength; segmentNormal.Y /= segmentLength; segmentNormal.Z /= segmentLength; Ray ray = new Ray(pos0, segmentNormal); ray.Intersects(ref sphere, out float? result); if (result != null && result < segmentLength) return true; return false; } internal static void BoundingSphereIntersectsBoundingSphere(ref BoundingSphere sphere, ref BoundingSphere other, out bool result) { Vector3.DistanceSquared(ref other.Center, ref sphere.Center, out float sqDistance); result = (sqDistance <= (other.Radius + sphere.Radius) * (other.Radius + sphere.Radius)); } internal static void BoundingSphereIntersectsPlane(ref BoundingSphere sphere, ref Plane plane, out PlaneIntersectionType result) { Vector3.Dot(ref plane.Normal, ref sphere.Center, out float distance); distance += plane.D; if (distance > sphere.Radius) result = PlaneIntersectionType.Front; else if (distance < -sphere.Radius) result = PlaneIntersectionType.Back; else result = PlaneIntersectionType.Intersecting; } internal static void BoundingSphereIntersectsRay(ref BoundingSphere sphere, ref Ray ray, out float? result) { // Find the vector between where the ray starts the the sphere's centre Vector3 difference = sphere.Center - ray.Position; float differenceLengthSquared = difference.LengthSquared(); float sphereRadiusSquared = sphere.Radius * sphere.Radius; float distanceAlongRay; // If the distance between the ray start and the sphere's centre is less than // the radius of the sphere, it means we've intersected. N.B. checking the LengthSquared is faster. if (differenceLengthSquared < sphereRadiusSquared) { result = 0.0f; return; } Vector3.Dot(ref ray.Direction, ref difference, out distanceAlongRay); // If the ray is pointing away from the sphere then we don't ever intersect if (distanceAlongRay < 0) { result = null; return; } // Next we kinda use Pythagoras to check if we are within the bounds of the sphere // if x = radius of sphere // if y = distance between ray position and sphere centre // if z = the distance we've travelled along the ray // if x^2 + z^2 - y^2 < 0, we do not intersect float dist = sphereRadiusSquared + distanceAlongRay * distanceAlongRay - differenceLengthSquared; result = (dist < 0) ? null : distanceAlongRay - (float?)Math.Sqrt(dist); } internal static void PlaneIntersectsRay(ref Plane plane, ref Ray ray, out float? result) { float den = Vector3.Dot(ray.Direction, plane.Normal); if (Math.Abs(den) < 0.00001f) { result = null; return; } result = (-plane.D - Vector3.Dot(plane.Normal, ray.Position)) / den; if (result < 0.0f) { if (result < -0.00001f) { result = null; return; } result = 0.0f; } } internal static void BoundingFrustumIntersectsRay(BoundingFrustum frustum, ref Ray ray, out float? result) { // From "Real-Time Collision Detection" (Page 198) float tfirst = 0; float tlast = float.MaxValue; for (int i = 0; i < BoundingFrustum.PlaneCount; i++) { float dist = -(Vector3.Dot(frustum._planes[i].Normal, ray.Position) + frustum._planes[i].D); float denom = Vector3.Dot(frustum._planes[i].Normal, ray.Direction); const float epsilon = 1e-6f; if (Math.Abs(denom) < epsilon) { if (dist > 0f) // ray runs parallel to the plane. { result = null; return; } } else { float t = dist / denom; if (denom < 0f) { if (t > tfirst) tfirst = t; } else { if (t < tlast) tlast = t; } if (tfirst > tlast) { result = null; return; } } } result = tfirst; return; } } } ================================================ FILE: src/Xna.Framework/MathHelper.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Contains commonly used precalculated values and mathematical operations. /// public static class MathHelper { /// /// Represents the mathematical constant e(2.71828175). /// public const float E = (float)Math.E; /// /// Represents the log base ten of e(0.4342945). /// public const float Log10E = 0.4342945f; /// /// Represents the log base two of e(1.442695). /// public const float Log2E = 1.442695f; /// /// Represents the value of pi(3.14159274). /// public const float Pi = (float)Math.PI; /// /// Represents the value of pi divided by two(1.57079637). /// public const float PiOver2 = (float)(Math.PI / 2.0); /// /// Represents the value of pi divided by four(0.7853982). /// public const float PiOver4 = (float)(Math.PI / 4.0); /// /// Represents the value of pi times two(6.28318548). /// public const float TwoPi = (float)(Math.PI * 2.0); /// /// Represents the value of pi times two(6.28318548). /// This is an alias of TwoPi. /// public const float Tau = TwoPi; /// /// Returns the Cartesian coordinate for one axis of a point that is defined by a given triangle and two normalized barycentric (areal) coordinates. /// /// The coordinate on one axis of vertex 1 of the defining triangle. /// The coordinate on the same axis of vertex 2 of the defining triangle. /// The coordinate on the same axis of vertex 3 of the defining triangle. /// The normalized barycentric (areal) coordinate b2, equal to the weighting factor for vertex 2, the coordinate of which is specified in value2. /// The normalized barycentric (areal) coordinate b3, equal to the weighting factor for vertex 3, the coordinate of which is specified in value3. /// Cartesian coordinate of the specified point with respect to the axis being used. public static float Barycentric(float value1, float value2, float value3, float amount1, float amount2) { return value1 + (value2 - value1) * amount1 + (value3 - value1) * amount2; } /// /// Performs a Catmull-Rom interpolation using the specified positions. /// /// The first position in the interpolation. /// The second position in the interpolation. /// The third position in the interpolation. /// The fourth position in the interpolation. /// Weighting factor. /// A position that is the result of the Catmull-Rom interpolation. public static float CatmullRom(float value1, float value2, float value3, float value4, float amount) { // Using formula from http://www.mvps.org/directx/articles/catmull/ // Internally using doubles not to lose precision double amountSquared = amount * amount; double amountCubed = amountSquared * amount; return (float)(0.5 * (2.0 * value2 + (value3 - value1) * amount + (2.0 * value1 - 5.0 * value2 + 4.0 * value3 - value4) * amountSquared + (3.0 * value2 - value1 - 3.0 * value3 + value4) * amountCubed)); } /// /// Restricts a value to be within a specified range. /// /// The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// The clamped value. public static float Clamp(float value, float min, float max) { // First we check to see if we're greater than the max value = (value > max) ? max : value; // Then we check to see if we're less than the min. value = (value < min) ? min : value; // There's no check to see if min > max. return value; } /// /// Restricts a value to be within a specified range. /// /// The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// The clamped value. public static int Clamp(int value, int min, int max) { value = (value > max) ? max : value; value = (value < min) ? min : value; return value; } /// /// Calculates the absolute value of the difference of two values. /// /// Source value. /// Source value. /// Distance between the two values. public static float Distance(float value1, float value2) { return Math.Abs(value1 - value2); } /// /// Performs a Hermite spline interpolation. /// /// Source position. /// Source tangent. /// Source position. /// Source tangent. /// Weighting factor. /// The result of the Hermite spline interpolation. public static float Hermite(float value1, float tangent1, float value2, float tangent2, float amount) { // All transformed to double not to lose precision // Otherwise, for high numbers of param:amount the result is NaN instead of Infinity double v1 = value1, v2 = value2, t1 = tangent1, t2 = tangent2, s = amount, result; double sCubed = s * s * s; double sSquared = s * s; if (amount == 0f) result = value1; else if (amount == 1f) result = value2; else result = (2 * v1 - 2 * v2 + t2 + t1) * sCubed + (3 * v2 - 3 * v1 - 2 * t1 - t2) * sSquared + t1 * s + v1; return (float)result; } /// /// Linearly interpolates between two values. /// /// Source value. /// Destination value. /// Value between 0 and 1 indicating the weight of value2. /// Interpolated value. /// This method performs the linear interpolation based on the following formula: /// value1 + (value2 - value1) * amount. /// Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. /// See for a less efficient version with more precision around edge cases. /// public static float Lerp(float start, float end, float amount) { return start + (end - start) * amount; } /// /// Linearly interpolates between two values. /// This method is a less efficient, more precise version of . /// See remarks for more info. /// /// Source value. /// Destination value. /// Value between 0 and 1 indicating the weight of value2. /// Interpolated value. /// This method performs the linear interpolation based on the following formula: /// ((1 - amount) * value1) + (value2 * amount). /// Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. /// This method does not have the floating point precision issue that has. /// i.e. If there is a big gap between value1 and value2 in magnitude (e.g. value1=10000000000000000, value2=1), /// right at the edge of the interpolation range (amount=1), will return 0 (whereas it should return 1). /// This also holds for value1=10^17, value2=10; value1=10^18,value2=10^2... so on. /// For an in depth explanation of the issue, see below references: /// Relevant Wikipedia Article: https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support /// Relevant StackOverflow Answer: http://stackoverflow.com/questions/4353525/floating-point-linear-interpolation#answer-23716956 /// public static float LerpPrecise(float start, float end, float amount) { return (start * (1 - amount)) + (end * amount); } /// /// Returns the greater of two values. /// /// Source value. /// Source value. /// The greater value. public static float Max(float value1, float value2) { return value1 > value2 ? value1 : value2; } /// /// Returns the greater of two values. /// /// Source value. /// Source value. /// The greater value. public static int Max(int value1, int value2) { return value1 > value2 ? value1 : value2; } /// /// Returns the lesser of two values. /// /// Source value. /// Source value. /// The lesser value. public static float Min(float value1, float value2) { return value1 < value2 ? value1 : value2; } /// /// Returns the lesser of two values. /// /// Source value. /// Source value. /// The lesser value. public static int Min(int value1, int value2) { return value1 < value2 ? value1 : value2; } /// /// Interpolates between two values using a cubic equation. /// /// Source value. /// Source value. /// Weighting value. /// Interpolated value. public static float SmoothStep(float value1, float value2, float amount) { // It is expected that 0 < amount < 1 // If amount < 0, return value1 // If amount > 1, return value2 float result = MathHelper.Clamp(amount, 0f, 1f); result = MathHelper.Hermite(value1, 0f, value2, 0f, result); return result; } /// /// Converts radians to degrees. /// /// The angle in radians. /// The angle in degrees. /// /// This method uses double precision internally, /// though it returns single float /// Factor = 180 / pi /// public static float ToDegrees(float radians) { return (float)(radians * 57.295779513082320876798154814105); } /// /// Converts degrees to radians. /// /// The angle in degrees. /// The angle in radians. /// /// This method uses double precision internally, /// though it returns single float /// Factor = pi / 180 /// public static float ToRadians(float degrees) { return (float)(degrees * 0.017453292519943295769236907684886); } /// /// Reduces a given angle to a value between π and -π. /// /// The angle to reduce, in radians. /// The new angle, in radians. public static float WrapAngle(float angle) { if ((angle > -Pi) && (angle <= Pi)) return angle; angle %= TwoPi; if (angle <= -Pi) return angle + TwoPi; if (angle > Pi) return angle - TwoPi; return angle; } /// /// Determines if value is powered by two. /// /// A value. /// true if value is powered by two; otherwise false. public static bool IsPowerOfTwo(int value) { return (value > 0) && ((value & (value - 1)) == 0); } } } ================================================ FILE: src/Xna.Framework/Matrix.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Matrix : IEquatable { #region Public Constructors /// /// Constructs a matrix. /// /// A first row and first column value. /// A first row and second column value. /// A first row and third column value. /// A first row and fourth column value. /// A second row and first column value. /// A second row and second column value. /// A second row and third column value. /// A second row and fourth column value. /// A third row and first column value. /// A third row and second column value. /// A third row and third column value. /// A third row and fourth column value. /// A fourth row and first column value. /// A fourth row and second column value. /// A fourth row and third column value. /// A fourth row and fourth column value. public Matrix(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) { this.M11 = m11; this.M12 = m12; this.M13 = m13; this.M14 = m14; this.M21 = m21; this.M22 = m22; this.M23 = m23; this.M24 = m24; this.M31 = m31; this.M32 = m32; this.M33 = m33; this.M34 = m34; this.M41 = m41; this.M42 = m42; this.M43 = m43; this.M44 = m44; } /// /// Constructs a matrix. /// /// A first row of the created matrix. /// A second row of the created matrix. /// A third row of the created matrix. /// A fourth row of the created matrix. public Matrix(Vector4 row1, Vector4 row2, Vector4 row3, Vector4 row4) { this.M11 = row1.X; this.M12 = row1.Y; this.M13 = row1.Z; this.M14 = row1.W; this.M21 = row2.X; this.M22 = row2.Y; this.M23 = row2.Z; this.M24 = row2.W; this.M31 = row3.X; this.M32 = row3.Y; this.M33 = row3.Z; this.M34 = row3.W; this.M41 = row4.X; this.M42 = row4.Y; this.M43 = row4.Z; this.M44 = row4.W; } #endregion #region Public Fields /// /// A first row and first column value. /// [DataMember] public float M11; /// /// A first row and second column value. /// [DataMember] public float M12; /// /// A first row and third column value. /// [DataMember] public float M13; /// /// A first row and fourth column value. /// [DataMember] public float M14; /// /// A second row and first column value. /// [DataMember] public float M21; /// /// A second row and second column value. /// [DataMember] public float M22; /// /// A second row and third column value. /// [DataMember] public float M23; /// /// A second row and fourth column value. /// [DataMember] public float M24; /// /// A third row and first column value. /// [DataMember] public float M31; /// /// A third row and second column value. /// [DataMember] public float M32; /// /// A third row and third column value. /// [DataMember] public float M33; /// /// A third row and fourth column value. /// [DataMember] public float M34; /// /// A fourth row and first column value. /// [DataMember] public float M41; /// /// A fourth row and second column value. /// [DataMember] public float M42; /// /// A fourth row and third column value. /// [DataMember] public float M43; /// /// A fourth row and fourth column value. /// [DataMember] public float M44; #endregion #region Indexers /// /// Get or set the matrix element at the given index, indexed in row major order. /// /// The linearized, zero-based index of the matrix element. /// /// If the index is less than 0 or larger than 15. /// public float this[int index] { get { switch (index) { case 0: return M11; case 1: return M12; case 2: return M13; case 3: return M14; case 4: return M21; case 5: return M22; case 6: return M23; case 7: return M24; case 8: return M31; case 9: return M32; case 10: return M33; case 11: return M34; case 12: return M41; case 13: return M42; case 14: return M43; case 15: return M44; default: throw new ArgumentOutOfRangeException(); } } set { switch (index) { case 0: M11 = value; break; case 1: M12 = value; break; case 2: M13 = value; break; case 3: M14 = value; break; case 4: M21 = value; break; case 5: M22 = value; break; case 6: M23 = value; break; case 7: M24 = value; break; case 8: M31 = value; break; case 9: M32 = value; break; case 10: M33 = value; break; case 11: M34 = value; break; case 12: M41 = value; break; case 13: M42 = value; break; case 14: M43 = value; break; case 15: M44 = value; break; default: throw new ArgumentOutOfRangeException(); } } } /// /// Get or set the value at the specified row and column (indices are zero-based). /// /// The row of the element. /// The column of the element. /// /// If the row or column is less than 0 or larger than 3. /// public float this[int row, int column] { get { return this[(row * 4) + column]; } set { this[(row * 4) + column] = value; } } #endregion #region Private Members private static Matrix identity = new Matrix(1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f); #endregion #region Public Properties /// /// The backward vector formed from the third row M31, M32, M33 elements. /// public Vector3 Backward { get { return new Vector3(this.M31, this.M32, this.M33); } set { this.M31 = value.X; this.M32 = value.Y; this.M33 = value.Z; } } /// /// The down vector formed from the second row -M21, -M22, -M23 elements. /// public Vector3 Down { get { return new Vector3(-this.M21, -this.M22, -this.M23); } set { this.M21 = -value.X; this.M22 = -value.Y; this.M23 = -value.Z; } } /// /// The forward vector formed from the third row -M31, -M32, -M33 elements. /// public Vector3 Forward { get { return new Vector3(-this.M31, -this.M32, -this.M33); } set { this.M31 = -value.X; this.M32 = -value.Y; this.M33 = -value.Z; } } /// /// Returns the identity matrix. /// public static Matrix Identity { get { return identity; } } /// /// The left vector formed from the first row -M11, -M12, -M13 elements. /// public Vector3 Left { get { return new Vector3(-this.M11, -this.M12, -this.M13); } set { this.M11 = -value.X; this.M12 = -value.Y; this.M13 = -value.Z; } } /// /// The right vector formed from the first row M11, M12, M13 elements. /// public Vector3 Right { get { return new Vector3(this.M11, this.M12, this.M13); } set { this.M11 = value.X; this.M12 = value.Y; this.M13 = value.Z; } } /// /// Position stored in this matrix. /// public Vector3 Translation { get { return new Vector3(this.M41, this.M42, this.M43); } set { this.M41 = value.X; this.M42 = value.Y; this.M43 = value.Z; } } /// /// The upper vector formed from the second row M21, M22, M23 elements. /// public Vector3 Up { get { return new Vector3(this.M21, this.M22, this.M23); } set { this.M21 = value.X; this.M22 = value.Y; this.M23 = value.Z; } } #endregion #region Public Methods /// /// Creates a new which contains sum of two matrixes. /// /// The first matrix to add. /// The second matrix to add. /// The result of the matrix addition. public static Matrix Add(Matrix left, Matrix right) { left.M11 += right.M11; left.M12 += right.M12; left.M13 += right.M13; left.M14 += right.M14; left.M21 += right.M21; left.M22 += right.M22; left.M23 += right.M23; left.M24 += right.M24; left.M31 += right.M31; left.M32 += right.M32; left.M33 += right.M33; left.M34 += right.M34; left.M41 += right.M41; left.M42 += right.M42; left.M43 += right.M43; left.M44 += right.M44; return left; } /// /// Creates a new which contains sum of two matrixes. /// /// The first matrix to add. /// The second matrix to add. /// The result of the matrix addition as an output parameter. public static void Add(ref Matrix left, ref Matrix right, out Matrix result) { result.M11 = left.M11 + right.M11; result.M12 = left.M12 + right.M12; result.M13 = left.M13 + right.M13; result.M14 = left.M14 + right.M14; result.M21 = left.M21 + right.M21; result.M22 = left.M22 + right.M22; result.M23 = left.M23 + right.M23; result.M24 = left.M24 + right.M24; result.M31 = left.M31 + right.M31; result.M32 = left.M32 + right.M32; result.M33 = left.M33 + right.M33; result.M34 = left.M34 + right.M34; result.M41 = left.M41 + right.M41; result.M42 = left.M42 + right.M42; result.M43 = left.M43 + right.M43; result.M44 = left.M44 + right.M44; } /// /// Creates a new for spherical billboarding that rotates around specified object position. /// /// Position of billboard object. It will rotate around that vector. /// The camera position. /// The camera up vector. /// Optional camera forward vector. /// The for spherical billboarding. public static Matrix CreateBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 cameraUpVector, Nullable cameraForwardVector) { Matrix result; // Delegate to the other overload of the function to do the work CreateBillboard(ref objectPosition, ref cameraPosition, ref cameraUpVector, cameraForwardVector, out result); return result; } /// /// Creates a new for spherical billboarding that rotates around specified object position. /// /// Position of billboard object. It will rotate around that vector. /// The camera position. /// The camera up vector. /// Optional camera forward vector. /// The for spherical billboarding as an output parameter. public static void CreateBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition, ref Vector3 cameraUpVector, Vector3? cameraForwardVector, out Matrix result) { Vector3 diffPosition; diffPosition.X = objectPosition.X - cameraPosition.X; diffPosition.Y = objectPosition.Y - cameraPosition.Y; diffPosition.Z = objectPosition.Z - cameraPosition.Z; float distanceSq = diffPosition.LengthSquared(); if (distanceSq < 0.0001f) { diffPosition = (cameraForwardVector.HasValue) ? -cameraForwardVector.Value : Vector3.Forward; } else { float distance = (float)Math.Sqrt((double)distanceSq); Vector3.Divide(ref diffPosition, distance, out diffPosition); } Vector3 right; Vector3.Cross(ref cameraUpVector, ref diffPosition, out right); right.Normalize(); Vector3 up; Vector3.Cross(ref diffPosition, ref right, out up); result.M11 = right.X; result.M12 = right.Y; result.M13 = right.Z; result.M14 = 0; result.M21 = up.X; result.M22 = up.Y; result.M23 = up.Z; result.M24 = 0; result.M31 = diffPosition.X; result.M32 = diffPosition.Y; result.M33 = diffPosition.Z; result.M34 = 0; result.M41 = objectPosition.X; result.M42 = objectPosition.Y; result.M43 = objectPosition.Z; result.M44 = 1; } /// /// Creates a new for cylindrical billboarding that rotates around specified axis. /// /// Object position the billboard will rotate around. /// Camera position. /// Axis of billboard for rotation. /// Optional camera forward vector. /// Optional object forward vector. /// The for cylindrical billboarding. public static Matrix CreateConstrainedBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 rotateAxis, Nullable cameraForwardVector, Nullable objectForwardVector) { Matrix result; CreateConstrainedBillboard(ref objectPosition, ref cameraPosition, ref rotateAxis, cameraForwardVector, objectForwardVector, out result); return result; } /// /// Creates a new for cylindrical billboarding that rotates around specified axis. /// /// Object position the billboard will rotate around. /// Camera position. /// Axis of billboard for rotation. /// Optional camera forward vector. /// Optional object forward vector. /// The for cylindrical billboarding as an output parameter. public static void CreateConstrainedBillboard(ref Vector3 objectPosition, ref Vector3 cameraPosition, ref Vector3 rotateAxis, Vector3? cameraForwardVector, Vector3? objectForwardVector, out Matrix result) { Vector3 diffPosition; diffPosition.X = objectPosition.X - cameraPosition.X; diffPosition.Y = objectPosition.Y - cameraPosition.Y; diffPosition.Z = objectPosition.Z - cameraPosition.Z; float distanceSq = diffPosition.LengthSquared(); if (distanceSq < 0.0001f) { diffPosition = (cameraForwardVector.HasValue) ? -cameraForwardVector.Value : Vector3.Forward; } else { float distance = (float)Math.Sqrt((double)distanceSq); Vector3.Divide(ref diffPosition, distance, out diffPosition); } Vector3 backward; Vector3 right; Vector3 up = rotateAxis; float dot; Vector3.Dot(ref rotateAxis, ref diffPosition, out dot); if (Math.Abs(dot) > 0.9982547f) { if (objectForwardVector.HasValue) { backward = objectForwardVector.Value; Vector3.Dot(ref rotateAxis, ref backward, out dot); if (Math.Abs(dot) > 0.9982547f) { dot = ((rotateAxis.X * Vector3.Forward.X) + (rotateAxis.Y * Vector3.Forward.Y)) + (rotateAxis.Z * Vector3.Forward.Z); backward = (Math.Abs(dot) > 0.9982547f) ? Vector3.Right : Vector3.Forward; } } else { dot = ((rotateAxis.X * Vector3.Forward.X) + (rotateAxis.Y * Vector3.Forward.Y)) + (rotateAxis.Z * Vector3.Forward.Z); backward = (Math.Abs(dot) > 0.9982547f) ? Vector3.Right : Vector3.Forward; } Vector3.Cross(ref rotateAxis, ref backward, out right); right.Normalize(); Vector3.Cross(ref right, ref rotateAxis, out backward); backward.Normalize(); } else { Vector3.Cross(ref rotateAxis, ref diffPosition, out right); right.Normalize(); Vector3.Cross(ref right, ref up, out backward); backward.Normalize(); } result.M11 = right.X; result.M12 = right.Y; result.M13 = right.Z; result.M14 = 0; result.M21 = up.X; result.M22 = up.Y; result.M23 = up.Z; result.M24 = 0; result.M31 = backward.X; result.M32 = backward.Y; result.M33 = backward.Z; result.M34 = 0; result.M41 = objectPosition.X; result.M42 = objectPosition.Y; result.M43 = objectPosition.Z; result.M44 = 1; } /// /// Creates a new which contains the rotation moment around specified axis. /// /// The axis of rotation. /// The angle of rotation in radians. /// The rotation . public static Matrix CreateFromAxisAngle(Vector3 axis, float angle) { Matrix result; CreateFromAxisAngle(ref axis, angle, out result); return result; } /// /// Creates a new which contains the rotation moment around specified axis. /// /// The axis of rotation. /// The angle of rotation in radians. /// The rotation as an output parameter. public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix result) { float x = axis.X; float y = axis.Y; float z = axis.Z; float sin = (float) Math.Sin((double)angle); float cos = (float) Math.Cos((double)angle); float xx = x * x; float yy = y * y; float zz = z * z; float xy = x * y; float xz = x * z; float yz = y * z; result.M11 = xx + (cos * (1f - xx)); result.M12 = xy - (cos * xy) + (sin * z); result.M13 = xz - (cos * xz) - (sin * y); result.M14 = 0; result.M21 = xy - (cos * xy) - (sin * z); result.M22 = yy + (cos * (1f - yy)); result.M23 = yz - (cos * yz) + (sin * x); result.M24 = 0; result.M31 = xz - (cos * xz) + (sin * y); result.M32 = yz - (cos * yz) - (sin * x); result.M33 = zz + (cos * (1f - zz)); result.M34 = 0; result.M41 = 0; result.M42 = 0; result.M43 = 0; result.M44 = 1; } /// /// Creates a new rotation from a . /// /// of rotation moment. /// The rotation . public static Matrix CreateFromQuaternion(Quaternion quaternion) { Matrix result; CreateFromQuaternion(ref quaternion, out result); return result; } /// /// Creates a new rotation from a . /// /// of rotation moment. /// The rotation as an output parameter. public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix result) { float xx = quaternion.X * quaternion.X; float yy = quaternion.Y * quaternion.Y; float zz = quaternion.Z * quaternion.Z; float xy = quaternion.X * quaternion.Y; float zw = quaternion.Z * quaternion.W; float zx = quaternion.Z * quaternion.X; float yw = quaternion.Y * quaternion.W; float yz = quaternion.Y * quaternion.Z; float xw = quaternion.X * quaternion.W; result.M11 = 1f - (2f * (yy + zz)); result.M12 = 2f * (xy + zw); result.M13 = 2f * (zx - yw); result.M14 = 0f; result.M21 = 2f * (xy - zw); result.M22 = 1f - (2f * (zz + xx)); result.M23 = 2f * (yz + xw); result.M24 = 0f; result.M31 = 2f * (zx + yw); result.M32 = 2f * (yz - xw); result.M33 = 1f - (2f * (yy + xx)); result.M34 = 0f; result.M41 = 0f; result.M42 = 0f; result.M43 = 0f; result.M44 = 1f; } /// /// Creates a new transform from a . /// /// The . /// The transform . public static Matrix CreateFromPose(Pose2 pose) { Matrix result; result = Matrix.CreateRotationZ(pose.Orientation); result.M41 = pose.Translation.X; result.M42 = pose.Translation.Y; return result; } /// /// Creates a new transform from a . /// /// The . /// The transform . public static Matrix CreateFromPose(Pose3 pose) { Matrix result; result = Matrix.CreateFromQuaternion(pose.Orientation); result.Translation = pose.Translation; return result; } /// /// Creates a new rotation from the specified yaw, pitch and roll values. /// /// The yaw rotation value in radians. /// The pitch rotation value in radians. /// The roll rotation value in radians. /// The rotation . /// For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. /// public static Matrix CreateFromYawPitchRoll(float yaw, float pitch, float roll) { Matrix result; CreateFromYawPitchRoll(yaw, pitch, roll, out result); return result; } /// /// Creates a new rotation from the specified yaw, pitch and roll values. /// /// The yaw rotation value in radians. /// The pitch rotation value in radians. /// The roll rotation value in radians. /// The rotation as an output parameter. /// For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. /// public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Matrix result) { Quaternion quaternion; Quaternion.CreateFromYawPitchRoll(yaw, pitch, roll, out quaternion); CreateFromQuaternion(ref quaternion, out result); } /// /// Creates a new viewing . /// /// Position of the camera. /// Lookup vector of the camera. /// The direction of the upper edge of the camera. /// The viewing . public static Matrix CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector) { Matrix result; CreateLookAt(ref cameraPosition, ref cameraTarget, ref cameraUpVector, out result); return result; } /// /// Creates a new viewing . /// /// Position of the camera. /// Lookup vector of the camera. /// The direction of the upper edge of the camera. /// The viewing as an output parameter. public static void CreateLookAt(ref Vector3 cameraPosition, ref Vector3 cameraTarget, ref Vector3 cameraUpVector, out Matrix result) { Vector3 vec3 = Vector3.Normalize(cameraPosition - cameraTarget); Vector3 vec1 = Vector3.Normalize(Vector3.Cross(cameraUpVector, vec3)); Vector3 vec2 = Vector3.Cross(vec3, vec1); result.M11 = vec1.X; result.M12 = vec2.X; result.M13 = vec3.X; result.M14 = 0f; result.M21 = vec1.Y; result.M22 = vec2.Y; result.M23 = vec3.Y; result.M24 = 0f; result.M31 = vec1.Z; result.M32 = vec2.Z; result.M33 = vec3.Z; result.M34 = 0f; result.M41 = -Vector3.Dot(vec1, cameraPosition); result.M42 = -Vector3.Dot(vec2, cameraPosition); result.M43 = -Vector3.Dot(vec3, cameraPosition); result.M44 = 1f; } /// /// Creates a new projection for orthographic view. /// /// Width of the viewing volume. /// Height of the viewing volume. /// Depth of the near plane. /// Depth of the far plane. /// The new projection for orthographic view. public static Matrix CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane) { Matrix result; CreateOrthographic(width, height, zNearPlane, zFarPlane, out result); return result; } /// /// Creates a new projection for orthographic view. /// /// Width of the viewing volume. /// Height of the viewing volume. /// Depth of the near plane. /// Depth of the far plane. /// The new projection for orthographic view as an output parameter. public static void CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane, out Matrix result) { result.M11 = 2f / width; result.M12 = result.M13 = result.M14 = 0f; result.M22 = 2f / height; result.M21 = result.M23 = result.M24 = 0f; result.M33 = 1f / (zNearPlane - zFarPlane); result.M31 = result.M32 = result.M34 = 0f; result.M41 = result.M42 = 0f; result.M43 = zNearPlane / (zNearPlane - zFarPlane); result.M44 = 1f; } /// /// Creates a new projection for customized orthographic view. /// /// Lower x-value at the near plane. /// Upper x-value at the near plane. /// Lower y-coordinate at the near plane. /// Upper y-value at the near plane. /// Depth of the near plane. /// Depth of the far plane. /// The new projection for customized orthographic view. public static Matrix CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane) { Matrix result; CreateOrthographicOffCenter(left, right, bottom, top, zNearPlane, zFarPlane, out result); return result; } /// /// Creates a new projection for customized orthographic view. /// /// The viewing volume. /// Depth of the near plane. /// Depth of the far plane. /// The new projection for customized orthographic view. public static Matrix CreateOrthographicOffCenter(Rectangle viewingVolume, float zNearPlane, float zFarPlane) { Matrix result; CreateOrthographicOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, zNearPlane, zFarPlane, out result); return result; } /// /// Creates a new projection for customized orthographic view. /// /// Lower x-value at the near plane. /// Upper x-value at the near plane. /// Lower y-coordinate at the near plane. /// Upper y-value at the near plane. /// Depth of the near plane. /// Depth of the far plane. /// The new projection for customized orthographic view as an output parameter. public static void CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane, out Matrix result) { result.M11 = (float)(2.0 / ((double)right - (double)left)); result.M12 = 0.0f; result.M13 = 0.0f; result.M14 = 0.0f; result.M21 = 0.0f; result.M22 = (float)(2.0 / ((double)top - (double)bottom)); result.M23 = 0.0f; result.M24 = 0.0f; result.M31 = 0.0f; result.M32 = 0.0f; result.M33 = (float)(1.0 / ((double)zNearPlane - (double)zFarPlane)); result.M34 = 0.0f; result.M41 = (float)(((double)left + (double)right) / ((double)left - (double)right)); result.M42 = (float)(((double)top + (double)bottom) / ((double)bottom - (double)top)); result.M43 = (float)((double)zNearPlane / ((double)zNearPlane - (double)zFarPlane)); result.M44 = 1.0f; } /// /// Creates a new projection for perspective view. /// /// Width of the viewing volume. /// Height of the viewing volume. /// Distance to the near plane. /// Distance to the far plane. /// The new projection for perspective view. public static Matrix CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance) { Matrix result; CreatePerspective(width, height, nearPlaneDistance, farPlaneDistance, out result); return result; } /// /// Creates a new projection for perspective view. /// /// Width of the viewing volume. /// Height of the viewing volume. /// Distance to the near plane. /// Distance to the far plane. /// The new projection for perspective view as an output parameter. public static void CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance, out Matrix result) { if (nearPlaneDistance <= 0f) { throw new ArgumentException("nearPlaneDistance <= 0"); } if (farPlaneDistance <= 0f) { throw new ArgumentException("farPlaneDistance <= 0"); } if (nearPlaneDistance >= farPlaneDistance) { throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); } result.M11 = (2.0f * nearPlaneDistance) / width; result.M12 = result.M13 = result.M14 = 0.0f; result.M22 = (2.0f * nearPlaneDistance) / height; result.M21 = result.M23 = result.M24 = 0.0f; result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); result.M31 = result.M32 = 0.0f; result.M34 = -1.0f; result.M41 = result.M42 = result.M44 = 0.0f; result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance); } /// /// Creates a new projection for perspective view with field of view. /// /// Field of view in the y direction in radians. /// Width divided by height of the viewing volume. /// Distance to the near plane. /// Distance to the far plane. /// The new projection for perspective view with FOV. public static Matrix CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance) { Matrix result; CreatePerspectiveFieldOfView(fieldOfView, aspectRatio, nearPlaneDistance, farPlaneDistance, out result); return result; } /// /// Creates a new projection for perspective view with field of view. /// /// Field of view in the y direction in radians. /// Width divided by height of the viewing volume. /// Distance of the near plane. /// Distance of the far plane. /// The new projection for perspective view with FOV as an output parameter. public static void CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance, out Matrix result) { if ((fieldOfView <= 0f) || (fieldOfView >= 3.141593f)) { throw new ArgumentException("fieldOfView <= 0 or >= PI"); } if (nearPlaneDistance <= 0f) { throw new ArgumentException("nearPlaneDistance <= 0"); } if (farPlaneDistance <= 0f) { throw new ArgumentException("farPlaneDistance <= 0"); } if (nearPlaneDistance >= farPlaneDistance) { throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); } float yScale = 1.0f / (float)Math.Tan((double)fieldOfView * 0.5f); float xScale = yScale / aspectRatio; result.M11 = xScale; result.M12 = result.M13 = result.M14 = 0.0f; result.M22 = yScale; result.M21 = result.M23 = result.M24 = 0.0f; result.M31 = result.M32 = 0.0f; result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); result.M34 = -1.0f; result.M41 = result.M42 = result.M44 = 0.0f; result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance); } /// /// Creates a new projection for customized perspective view. /// /// Lower x-value at the near plane. /// Upper x-value at the near plane. /// Lower y-coordinate at the near plane. /// Upper y-value at the near plane. /// Distance to the near plane. /// Distance to the far plane. /// The new for customized perspective view. public static Matrix CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance) { Matrix result; CreatePerspectiveOffCenter(left, right, bottom, top, nearPlaneDistance, farPlaneDistance, out result); return result; } /// /// Creates a new projection for customized perspective view. /// /// The viewing volume. /// Distance to the near plane. /// Distance to the far plane. /// The new for customized perspective view. public static Matrix CreatePerspectiveOffCenter(Rectangle viewingVolume, float nearPlaneDistance, float farPlaneDistance) { Matrix result; CreatePerspectiveOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, nearPlaneDistance, farPlaneDistance, out result); return result; } /// /// Creates a new projection for customized perspective view. /// /// Lower x-value at the near plane. /// Upper x-value at the near plane. /// Lower y-coordinate at the near plane. /// Upper y-value at the near plane. /// Distance to the near plane. /// Distance to the far plane. /// The new for customized perspective view as an output parameter. public static void CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance, out Matrix result) { if (nearPlaneDistance <= 0f) { throw new ArgumentException("nearPlaneDistance <= 0"); } if (farPlaneDistance <= 0f) { throw new ArgumentException("farPlaneDistance <= 0"); } if (nearPlaneDistance >= farPlaneDistance) { throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); } result.M11 = (2f * nearPlaneDistance) / (right - left); result.M12 = result.M13 = result.M14 = 0; result.M22 = (2f * nearPlaneDistance) / (top - bottom); result.M21 = result.M23 = result.M24 = 0; result.M31 = (left + right) / (right - left); result.M32 = (top + bottom) / (top - bottom); result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); result.M34 = -1; result.M43 = (nearPlaneDistance * farPlaneDistance) / (nearPlaneDistance - farPlaneDistance); result.M41 = result.M42 = result.M44 = 0; } /// /// Creates a new rotation around X axis. /// /// Angle in radians. /// The rotation around X axis. public static Matrix CreateRotationX(float radians) { Matrix result; CreateRotationX(radians, out result); return result; } /// /// Creates a new rotation around X axis. /// /// Angle in radians. /// The rotation around X axis as an output parameter. public static void CreateRotationX(float radians, out Matrix result) { result = Matrix.Identity; float cos = (float)Math.Cos(radians); float sin = (float)Math.Sin(radians); result.M22 = cos; result.M23 = sin; result.M32 = -sin; result.M33 = cos; } /// /// Creates a new rotation around Y axis. /// /// Angle in radians. /// The rotation around Y axis. public static Matrix CreateRotationY(float radians) { Matrix result; CreateRotationY(radians, out result); return result; } /// /// Creates a new rotation around Y axis. /// /// Angle in radians. /// The rotation around Y axis as an output parameter. public static void CreateRotationY(float radians, out Matrix result) { result = Matrix.Identity; float cos = (float)Math.Cos(radians); float sin = (float)Math.Sin(radians); result.M11 = cos; result.M13 = -sin; result.M31 = sin; result.M33 = cos; } /// /// Creates a new rotation around Z axis. /// /// Angle in radians. /// The rotation around Z axis. public static Matrix CreateRotationZ(float radians) { Matrix result; CreateRotationZ(radians, out result); return result; } /// /// Creates a new rotation around Z axis. /// /// Angle in radians. /// The rotation around Z axis as an output parameter. public static void CreateRotationZ(float radians, out Matrix result) { result = Matrix.Identity; float cos = (float)Math.Cos(radians); float sin = (float)Math.Sin(radians); result.M11 = cos; result.M12 = sin; result.M21 = -sin; result.M22 = cos; } /// /// Creates a new rotation around Z axis. /// /// A normalized Complex number. /// The rotation around Z axis. public static Matrix CreateRotationZ(Complex rotation) { Matrix result = Matrix.Identity; result.M11 = rotation.R; result.M12 = rotation.i; result.M21 = -rotation.i; result.M22 = rotation.R; return result; } /// /// Creates a new scaling . /// /// Scale value for all three axises. /// The scaling . public static Matrix CreateScale(float scale) { Matrix result; CreateScale(scale, scale, scale, out result); return result; } /// /// Creates a new scaling . /// /// Scale value for all three axises. /// The scaling as an output parameter. public static void CreateScale(float scale, out Matrix result) { CreateScale(scale, scale, scale, out result); } /// /// Creates a new scaling . /// /// Scale value for X axis. /// Scale value for Y axis. /// Scale value for Z axis. /// The scaling . public static Matrix CreateScale(float xScale, float yScale, float zScale) { Matrix result; CreateScale(xScale, yScale, zScale, out result); return result; } /// /// Creates a new scaling . /// /// Scale value for X axis. /// Scale value for Y axis. /// Scale value for Z axis. /// The scaling as an output parameter. public static void CreateScale(float xScale, float yScale, float zScale, out Matrix result) { result.M11 = xScale; result.M12 = 0; result.M13 = 0; result.M14 = 0; result.M21 = 0; result.M22 = yScale; result.M23 = 0; result.M24 = 0; result.M31 = 0; result.M32 = 0; result.M33 = zScale; result.M34 = 0; result.M41 = 0; result.M42 = 0; result.M43 = 0; result.M44 = 1; } /// /// Creates a new scaling . /// /// representing x,y and z scale values. /// The scaling . public static Matrix CreateScale(Vector3 scales) { Matrix result; CreateScale(ref scales, out result); return result; } /// /// Creates a new scaling . /// /// representing x,y and z scale values. /// The scaling as an output parameter. public static void CreateScale(ref Vector3 scales, out Matrix result) { result.M11 = scales.X; result.M12 = 0; result.M13 = 0; result.M14 = 0; result.M21 = 0; result.M22 = scales.Y; result.M23 = 0; result.M24 = 0; result.M31 = 0; result.M32 = 0; result.M33 = scales.Z; result.M34 = 0; result.M41 = 0; result.M42 = 0; result.M43 = 0; result.M44 = 1; } /// /// Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. /// /// A vector specifying the direction from which the light that will cast the shadow is coming. /// The plane onto which the new matrix should flatten geometry so as to cast a shadow. /// A that can be used to flatten geometry onto the specified plane from the specified direction. public static Matrix CreateShadow(Vector3 lightDirection, Plane plane) { Matrix result; CreateShadow(ref lightDirection, ref plane, out result); return result; } /// /// Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. /// /// A vector specifying the direction from which the light that will cast the shadow is coming. /// The plane onto which the new matrix should flatten geometry so as to cast a shadow. /// A that can be used to flatten geometry onto the specified plane from the specified direction as an output parameter. public static void CreateShadow(ref Vector3 lightDirection, ref Plane plane, out Matrix result) { float dot = (plane.Normal.X * lightDirection.X) + (plane.Normal.Y * lightDirection.Y) + (plane.Normal.Z * lightDirection.Z); float x = -plane.Normal.X; float y = -plane.Normal.Y; float z = -plane.Normal.Z; float d = -plane.D; result.M11 = (x * lightDirection.X) + dot; result.M12 = x * lightDirection.Y; result.M13 = x * lightDirection.Z; result.M14 = 0; result.M21 = y * lightDirection.X; result.M22 = (y * lightDirection.Y) + dot; result.M23 = y * lightDirection.Z; result.M24 = 0; result.M31 = z * lightDirection.X; result.M32 = z * lightDirection.Y; result.M33 = (z * lightDirection.Z) + dot; result.M34 = 0; result.M41 = d * lightDirection.X; result.M42 = d * lightDirection.Y; result.M43 = d * lightDirection.Z; result.M44 = dot; } /// /// Creates a new translation . /// /// X coordinate of translation. /// Y coordinate of translation. /// Z coordinate of translation. /// The translation . public static Matrix CreateTranslation(float xPosition, float yPosition, float zPosition) { Matrix result; CreateTranslation(xPosition, yPosition, zPosition, out result); return result; } /// /// Creates a new translation . /// /// X,Y and Z coordinates of translation. /// The translation as an output parameter. public static void CreateTranslation(ref Vector3 position, out Matrix result) { result.M11 = 1; result.M12 = 0; result.M13 = 0; result.M14 = 0; result.M21 = 0; result.M22 = 1; result.M23 = 0; result.M24 = 0; result.M31 = 0; result.M32 = 0; result.M33 = 1; result.M34 = 0; result.M41 = position.X; result.M42 = position.Y; result.M43 = position.Z; result.M44 = 1; } /// /// Creates a new translation . /// /// X,Y and Z coordinates of translation. /// The translation . public static Matrix CreateTranslation(Vector3 position) { Matrix result; CreateTranslation(ref position, out result); return result; } /// /// Creates a new translation . /// /// X coordinate of translation. /// Y coordinate of translation. /// Z coordinate of translation. /// The translation as an output parameter. public static void CreateTranslation(float xPosition, float yPosition, float zPosition, out Matrix result) { result.M11 = 1; result.M12 = 0; result.M13 = 0; result.M14 = 0; result.M21 = 0; result.M22 = 1; result.M23 = 0; result.M24 = 0; result.M31 = 0; result.M32 = 0; result.M33 = 1; result.M34 = 0; result.M41 = xPosition; result.M42 = yPosition; result.M43 = zPosition; result.M44 = 1; } /// /// Creates a new reflection . /// /// The plane that used for reflection calculation. /// The reflection . public static Matrix CreateReflection(Plane value) { Matrix result; CreateReflection(ref value, out result); return result; } /// /// Creates a new reflection . /// /// The plane that used for reflection calculation. /// The reflection as an output parameter. public static void CreateReflection(ref Plane value, out Matrix result) { Plane plane; Plane.Normalize(ref value, out plane); float nx = plane.Normal.X; float ny = plane.Normal.Y; float nz = plane.Normal.Z; float x2 = -2f * nx; float y2 = -2f * ny; float z2 = -2f * nz; result.M11 = x2 * nx + 1f; result.M12 = y2 * nx; result.M13 = z2 * nx; result.M14 = 0; result.M21 = x2 * ny; result.M22 = y2 * ny + 1; result.M23 = z2 * ny; result.M24 = 0; result.M31 = x2 * nz; result.M32 = y2 * nz; result.M33 = z2 * nz + 1; result.M34 = 0; result.M41 = x2 * plane.D; result.M42 = y2 * plane.D; result.M43 = z2 * plane.D; result.M44 = 0 + 1; } /// /// Creates a new world . /// /// The position vector. /// The forward direction vector. /// The upward direction vector. Usually . /// The world . public static Matrix CreateWorld(Vector3 position, Vector3 forward, Vector3 up) { Matrix result; CreateWorld(ref position, ref forward, ref up, out result); return result; } /// /// Creates a new world . /// /// The position vector. /// The forward direction vector. /// The upward direction vector. Usually . /// The world as an output parameter. public static void CreateWorld(ref Vector3 position, ref Vector3 forward, ref Vector3 up, out Matrix result) { Vector3 x, y, z; Vector3.Normalize(ref forward, out z); Vector3.Cross(ref forward, ref up, out x); Vector3.Cross(ref x, ref forward, out y); x.Normalize(); y.Normalize(); result = new Matrix(); result.Right = x; result.Up = y; result.Forward = z; result.Translation = position; result.M44 = 1f; } /// /// Decomposes this matrix to translation, rotation and scale elements. Returns true if matrix can be decomposed; false otherwise. /// /// Scale vector as an output parameter. /// Rotation quaternion as an output parameter. /// Translation vector as an output parameter. /// true if matrix can be decomposed; false otherwise. public bool Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation) { translation.X = this.M41; translation.Y = this.M42; translation.Z = this.M43; float xs = (Math.Sign(M11 * M12 * M13 * M14) < 0) ? -1 : 1; float ys = (Math.Sign(M21 * M22 * M23 * M24) < 0) ? -1 : 1; float zs = (Math.Sign(M31 * M32 * M33 * M34) < 0) ? -1 : 1; scale.X = xs * (float)Math.Sqrt(this.M11 * this.M11 + this.M12 * this.M12 + this.M13 * this.M13); scale.Y = ys * (float)Math.Sqrt(this.M21 * this.M21 + this.M22 * this.M22 + this.M23 * this.M23); scale.Z = zs * (float)Math.Sqrt(this.M31 * this.M31 + this.M32 * this.M32 + this.M33 * this.M33); if (scale.X == 0.0 || scale.Y == 0.0 || scale.Z == 0.0) { rotation = Quaternion.Identity; return false; } Matrix m1 = new Matrix(this.M11 / scale.X, M12 / scale.X, M13 / scale.X, 0, this.M21 / scale.Y, M22 / scale.Y, M23 / scale.Y, 0, this.M31 / scale.Z, M32 / scale.Z, M33 / scale.Z, 0, 0, 0, 0, 1); rotation = Quaternion.CreateFromRotationMatrix(m1); return true; } /// /// Returns a determinant of this . /// /// Determinant of this /// See more about determinant here - http://en.wikipedia.org/wiki/Determinant. /// public float Determinant() { float tmp1 = (M33 * M44) - (M34 * M43); float tmp2 = (M32 * M44) - (M34 * M42); float tmp3 = (M32 * M43) - (M33 * M42); float tmp4 = (M31 * M44) - (M34 * M41); float tmp5 = (M31 * M43) - (M33 * M41); float tmp6 = (M31 * M42) - (M32 * M41); float det = 0f; det = det + M11 * ( (M22 * tmp1) - (M23 * tmp2) + (M24 * tmp3) ); det = det - M12 * ( (M21 * tmp1) - (M23 * tmp4) + (M24 * tmp5) ); det = det + M13 * ( (M21 * tmp2) - (M22 * tmp4) + (M24 * tmp6) ); det = det - M14 * ( (M21 * tmp3) - (M22 * tmp5) + (M23 * tmp6) ); return det; } /// /// Divides the elements of a by the elements of another matrix. /// /// Source . /// Divisor . /// The result of dividing the matrix. public static Matrix Divide(Matrix left, Matrix right) { left.M11 = left.M11 / right.M11; left.M12 = left.M12 / right.M12; left.M13 = left.M13 / right.M13; left.M14 = left.M14 / right.M14; left.M21 = left.M21 / right.M21; left.M22 = left.M22 / right.M22; left.M23 = left.M23 / right.M23; left.M24 = left.M24 / right.M24; left.M31 = left.M31 / right.M31; left.M32 = left.M32 / right.M32; left.M33 = left.M33 / right.M33; left.M34 = left.M34 / right.M34; left.M41 = left.M41 / right.M41; left.M42 = left.M42 / right.M42; left.M43 = left.M43 / right.M43; left.M44 = left.M44 / right.M44; return left; } /// /// Divides the elements of a by the elements of another matrix. /// /// Source . /// Divisor . /// The result of dividing the matrix as an output parameter. public static void Divide(ref Matrix left, ref Matrix right, out Matrix result) { result.M11 = left.M11 / right.M11; result.M12 = left.M12 / right.M12; result.M13 = left.M13 / right.M13; result.M14 = left.M14 / right.M14; result.M21 = left.M21 / right.M21; result.M22 = left.M22 / right.M22; result.M23 = left.M23 / right.M23; result.M24 = left.M24 / right.M24; result.M31 = left.M31 / right.M31; result.M32 = left.M32 / right.M32; result.M33 = left.M33 / right.M33; result.M34 = left.M34 / right.M34; result.M41 = left.M41 / right.M41; result.M42 = left.M42 / right.M42; result.M43 = left.M43 / right.M43; result.M44 = left.M44 / right.M44; } /// /// Divides the elements of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a matrix by a scalar. public static Matrix Divide(Matrix left, float right) { float factor = 1f / right; left.M11 = left.M11 * factor; left.M12 = left.M12 * factor; left.M13 = left.M13 * factor; left.M14 = left.M14 * factor; left.M21 = left.M21 * factor; left.M22 = left.M22 * factor; left.M23 = left.M23 * factor; left.M24 = left.M24 * factor; left.M31 = left.M31 * factor; left.M32 = left.M32 * factor; left.M33 = left.M33 * factor; left.M34 = left.M34 * factor; left.M41 = left.M41 * factor; left.M42 = left.M42 * factor; left.M43 = left.M43 * factor; left.M44 = left.M44 * factor; return left; } /// /// Divides the elements of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a matrix by a scalar as an output parameter. public static void Divide(ref Matrix left, float right, out Matrix result) { float factor = 1f / right; result.M11 = left.M11 * factor; result.M12 = left.M12 * factor; result.M13 = left.M13 * factor; result.M14 = left.M14 * factor; result.M21 = left.M21 * factor; result.M22 = left.M22 * factor; result.M23 = left.M23 * factor; result.M24 = left.M24 * factor; result.M31 = left.M31 * factor; result.M32 = left.M32 * factor; result.M33 = left.M33 * factor; result.M34 = left.M34 * factor; result.M41 = left.M41 * factor; result.M42 = left.M42 * factor; result.M43 = left.M43 * factor; result.M44 = left.M44 * factor; } /// /// Compares whether current instance is equal to specified without any tolerance. /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Matrix other) { return ((this.M11 == other.M11) && (this.M22 == other.M22) && (this.M33 == other.M33) && (this.M44 == other.M44) && (this.M12 == other.M12) && (this.M13 == other.M13) && (this.M14 == other.M14) && (this.M21 == other.M21) && (this.M23 == other.M23) && (this.M24 == other.M24) && (this.M31 == other.M31) && (this.M32 == other.M32) && (this.M34 == other.M34) && (this.M41 == other.M41) && (this.M42 == other.M42) && (this.M43 == other.M43)); } /// /// Compares whether current instance is equal to specified without any tolerance. /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { bool flag = false; if (obj is Matrix) { flag = this.Equals((Matrix) obj); } return flag; } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return (this.M11.GetHashCode() + this.M12.GetHashCode() + this.M13.GetHashCode() + this.M14.GetHashCode() + this.M21.GetHashCode() + this.M22.GetHashCode() + this.M23.GetHashCode() + this.M24.GetHashCode() + this.M31.GetHashCode() + this.M32.GetHashCode() + this.M33.GetHashCode() + this.M34.GetHashCode() + this.M41.GetHashCode() + this.M42.GetHashCode() + this.M43.GetHashCode() + this.M44.GetHashCode()); } /// /// Creates a new which contains inversion of the specified matrix. /// /// Source . /// The inverted matrix. public static Matrix Invert(Matrix value) { Matrix result; Invert(ref value, out result); return result; } /// /// Creates a new which contains inversion of the specified matrix. /// /// Source . /// The inverted matrix as output parameter. public static void Invert(ref Matrix value, out Matrix result) { float tmp01 = (float) ((double)value.M33 * (double)value.M44 - (double)value.M34 * (double)value.M43); float tmp02 = (float) ((double)value.M32 * (double)value.M44 - (double)value.M34 * (double)value.M42); float tmp03 = (float) ((double)value.M32 * (double)value.M43 - (double)value.M33 * (double)value.M42); float tmp04 = (float) ((double)value.M31 * (double)value.M44 - (double)value.M34 * (double)value.M41); float tmp05 = (float) ((double)value.M31 * (double)value.M43 - (double)value.M33 * (double)value.M41); float tmp06 = (float) ((double)value.M31 * (double)value.M42 - (double)value.M32 * (double)value.M41); float tmp07 = (float) ((double)value.M22 * (double)tmp01 - (double)value.M23 * (double)tmp02 + (double) value.M24 * (double)tmp03); float tmp08 = (float) -((double)value.M21 * (double)tmp01 - (double)value.M23 * (double)tmp04 + (double) value.M24 * (double)tmp05); float tmp09 = (float) ((double)value.M21 * (double)tmp02 - (double)value.M22 * (double)tmp04 + (double) value.M24 * (double)tmp06); float tmp10 = (float) -((double)value.M21 * (double)tmp03 - (double)value.M22 * (double)tmp05 + (double) value.M23 * (double)tmp06); float tmp11 = (float) (1.0 / ((double)value.M11 * (double)tmp07 + (double)value.M12 * (double)tmp08 + (double)value.M13 * (double)tmp09 + (double)value.M14 * (double)tmp10)); float m11 = tmp07 * tmp11; float m21 = tmp08 * tmp11; float m31 = tmp09 * tmp11; float m41 = tmp10 * tmp11; float m12 = (float) -((double) value.M12 * (double)tmp01 - (double)value.M13 * (double)tmp02 + (double)value.M14 * (double)tmp03) * tmp11; float m22 = (float) ((double) value.M11 * (double)tmp01 - (double)value.M13 * (double)tmp04 + (double)value.M14 * (double)tmp05) * tmp11; float m32 = (float) -((double) value.M11 * (double)tmp02 - (double)value.M12 * (double)tmp04 + (double)value.M14 * (double)tmp06) * tmp11; float m42 = (float) ((double) value.M11 * (double)tmp03 - (double)value.M12 * (double)tmp05 + (double)value.M13 * (double)tmp06) * tmp11; float tmp12 = (float) ((double)value.M23 * (double)value.M44 - (double)value.M24 * (double)value.M43); float tmp13 = (float) ((double)value.M22 * (double)value.M44 - (double)value.M24 * (double)value.M42); float tmp14 = (float) ((double)value.M22 * (double)value.M43 - (double)value.M23 * (double)value.M42); float tmp15 = (float) ((double)value.M21 * (double)value.M44 - (double)value.M24 * (double)value.M41); float tmp16 = (float) ((double)value.M21 * (double)value.M43 - (double)value.M23 * (double)value.M41); float tmp17 = (float) ((double)value.M21 * (double)value.M42 - (double)value.M22 * (double)value.M41); float m13 = (float) ((double)value.M12 * (double)tmp12 - (double)value.M13 * (double)tmp13 + (double)value.M14 * (double)tmp14) * tmp11; float m23 = (float) -((double)value.M11 * (double)tmp12 - (double)value.M13 * (double)tmp15 + (double)value.M14 * (double)tmp16) * tmp11; float m33 = (float) ((double)value.M11 * (double)tmp13 - (double)value.M12 * (double)tmp15 + (double)value.M14 * (double)tmp17) * tmp11; float m43 = (float) -((double)value.M11 * (double)tmp14 - (double)value.M12 * (double)tmp16 + (double)value.M13 * (double)tmp17) * tmp11; float tmp18 = (float) ((double)value.M23 * (double)value.M34 - (double)value.M24 * (double)value.M33); float tmp19 = (float) ((double)value.M22 * (double)value.M34 - (double)value.M24 * (double)value.M32); float tmp20 = (float) ((double)value.M22 * (double)value.M33 - (double)value.M23 * (double)value.M32); float tmp21 = (float) ((double)value.M21 * (double)value.M34 - (double)value.M24 * (double)value.M31); float tmp22 = (float) ((double)value.M21 * (double)value.M33 - (double)value.M23 * (double)value.M31); float tmp23 = (float) ((double)value.M21 * (double)value.M32 - (double)value.M22 * (double)value.M31); float m14 = (float) -((double)value.M12 * (double)tmp18 - (double)value.M13 * (double)tmp19 + (double)value.M14 * (double)tmp20) * tmp11; float m24 = (float) ((double)value.M11 * (double)tmp18 - (double)value.M13 * (double)tmp21 + (double)value.M14 * (double)tmp22) * tmp11; float m34 = (float) -((double)value.M11 * (double)tmp19 - (double)value.M12 * (double)tmp21 + (double)value.M14 * (double)tmp23) * tmp11; float m44 = (float) ((double)value.M11 * (double)tmp20 - (double)value.M12 * (double)tmp22 + (double)value.M13 * (double)tmp23) * tmp11; result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M14 = m14; result.M21 = m21; result.M22 = m22; result.M23 = m23; result.M24 = m24; result.M31 = m31; result.M32 = m32; result.M33 = m33; result.M34 = m34; result.M41 = m41; result.M42 = m42; result.M43 = m43; result.M44 = m44; /* /// // Use Laplace expansion theorem to calculate the inverse of a 4x4 matrix // // 1. Calculate the 2x2 determinants needed the 4x4 determinant based on the 2x2 determinants // 3. Create the adjugate matrix, which satisfies: A * adj(A) = det(A) * I // 4. Divide adjugate matrix with the determinant to find the inverse float det1, det2, det3, det4, det5, det6, det7, det8, det9, det10, det11, det12; float detMatrix; FindDeterminants(ref matrix, out detMatrix, out det1, out det2, out det3, out det4, out det5, out det6, out det7, out det8, out det9, out det10, out det11, out det12); float invDetMatrix = 1f / detMatrix; Matrix ret; // Allow for matrix and result to point to the same structure ret.M11 = (matrix.M22*det12 - matrix.M23*det11 + matrix.M24*det10) * invDetMatrix; ret.M12 = (-matrix.M12*det12 + matrix.M13*det11 - matrix.M14*det10) * invDetMatrix; ret.M13 = (matrix.M42*det6 - matrix.M43*det5 + matrix.M44*det4) * invDetMatrix; ret.M14 = (-matrix.M32*det6 + matrix.M33*det5 - matrix.M34*det4) * invDetMatrix; ret.M21 = (-matrix.M21*det12 + matrix.M23*det9 - matrix.M24*det8) * invDetMatrix; ret.M22 = (matrix.M11*det12 - matrix.M13*det9 + matrix.M14*det8) * invDetMatrix; ret.M23 = (-matrix.M41*det6 + matrix.M43*det3 - matrix.M44*det2) * invDetMatrix; ret.M24 = (matrix.M31*det6 - matrix.M33*det3 + matrix.M34*det2) * invDetMatrix; ret.M31 = (matrix.M21*det11 - matrix.M22*det9 + matrix.M24*det7) * invDetMatrix; ret.M32 = (-matrix.M11*det11 + matrix.M12*det9 - matrix.M14*det7) * invDetMatrix; ret.M33 = (matrix.M41*det5 - matrix.M42*det3 + matrix.M44*det1) * invDetMatrix; ret.M34 = (-matrix.M31*det5 + matrix.M32*det3 - matrix.M34*det1) * invDetMatrix; ret.M41 = (-matrix.M21*det10 + matrix.M22*det8 - matrix.M23*det7) * invDetMatrix; ret.M42 = (matrix.M11*det10 - matrix.M12*det8 + matrix.M13*det7) * invDetMatrix; ret.M43 = (-matrix.M41*det4 + matrix.M42*det2 - matrix.M43*det1) * invDetMatrix; ret.M44 = (matrix.M31*det4 - matrix.M32*det2 + matrix.M33*det1) * invDetMatrix; result = ret; */ } /// /// Creates a new that contains linear interpolation of the values in specified matrixes. /// /// The first . /// The second . /// Weighting value(between 0.0 and 1.0). /// >The result of linear interpolation of the specified matrixes. public static Matrix Lerp(Matrix start, Matrix end, float amount) { start.M11 = start.M11 + ((end.M11 - start.M11) * amount); start.M12 = start.M12 + ((end.M12 - start.M12) * amount); start.M13 = start.M13 + ((end.M13 - start.M13) * amount); start.M14 = start.M14 + ((end.M14 - start.M14) * amount); start.M21 = start.M21 + ((end.M21 - start.M21) * amount); start.M22 = start.M22 + ((end.M22 - start.M22) * amount); start.M23 = start.M23 + ((end.M23 - start.M23) * amount); start.M24 = start.M24 + ((end.M24 - start.M24) * amount); start.M31 = start.M31 + ((end.M31 - start.M31) * amount); start.M32 = start.M32 + ((end.M32 - start.M32) * amount); start.M33 = start.M33 + ((end.M33 - start.M33) * amount); start.M34 = start.M34 + ((end.M34 - start.M34) * amount); start.M41 = start.M41 + ((end.M41 - start.M41) * amount); start.M42 = start.M42 + ((end.M42 - start.M42) * amount); start.M43 = start.M43 + ((end.M43 - start.M43) * amount); start.M44 = start.M44 + ((end.M44 - start.M44) * amount); return start; } /// /// Creates a new that contains linear interpolation of the values in specified matrixes. /// /// The first . /// The second . /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified matrixes as an output parameter. public static void Lerp(ref Matrix start, ref Matrix end, float amount, out Matrix result) { result.M11 = start.M11 + ((end.M11 - start.M11) * amount); result.M12 = start.M12 + ((end.M12 - start.M12) * amount); result.M13 = start.M13 + ((end.M13 - start.M13) * amount); result.M14 = start.M14 + ((end.M14 - start.M14) * amount); result.M21 = start.M21 + ((end.M21 - start.M21) * amount); result.M22 = start.M22 + ((end.M22 - start.M22) * amount); result.M23 = start.M23 + ((end.M23 - start.M23) * amount); result.M24 = start.M24 + ((end.M24 - start.M24) * amount); result.M31 = start.M31 + ((end.M31 - start.M31) * amount); result.M32 = start.M32 + ((end.M32 - start.M32) * amount); result.M33 = start.M33 + ((end.M33 - start.M33) * amount); result.M34 = start.M34 + ((end.M34 - start.M34) * amount); result.M41 = start.M41 + ((end.M41 - start.M41) * amount); result.M42 = start.M42 + ((end.M42 - start.M42) * amount); result.M43 = start.M43 + ((end.M43 - start.M43) * amount); result.M44 = start.M44 + ((end.M44 - start.M44) * amount); } /// /// Creates a new that contains a multiplication of two matrix. /// /// Source . /// Source . /// Result of the matrix multiplication. public static Matrix Multiply(Matrix left, Matrix right) { float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41); float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42); float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43); float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44); float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41); float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42); float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43); float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44); float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41); float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42); float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43); float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44); float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41); float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42); float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43); float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44); left.M11 = m11; left.M12 = m12; left.M13 = m13; left.M14 = m14; left.M21 = m21; left.M22 = m22; left.M23 = m23; left.M24 = m24; left.M31 = m31; left.M32 = m32; left.M33 = m33; left.M34 = m34; left.M41 = m41; left.M42 = m42; left.M43 = m43; left.M44 = m44; return left; } /// /// Creates a new that contains a multiplication of two matrix. /// /// Source . /// Source . /// Result of the matrix multiplication as an output parameter. public static void Multiply(ref Matrix left, ref Matrix right, out Matrix result) { float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41); float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42); float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43); float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44); float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41); float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42); float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43); float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44); float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41); float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42); float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43); float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44); float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41); float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42); float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43); float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44); result.M11 = m11; result.M12 = m12; result.M13 = m13; result.M14 = m14; result.M21 = m21; result.M22 = m22; result.M23 = m23; result.M24 = m24; result.M31 = m31; result.M32 = m32; result.M33 = m33; result.M34 = m34; result.M41 = m41; result.M42 = m42; result.M43 = m43; result.M44 = m44; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// Result of the matrix multiplication with a scalar. public static Matrix Multiply(Matrix left, float right) { left.M11 *= right; left.M12 *= right; left.M13 *= right; left.M14 *= right; left.M21 *= right; left.M22 *= right; left.M23 *= right; left.M24 *= right; left.M31 *= right; left.M32 *= right; left.M33 *= right; left.M34 *= right; left.M41 *= right; left.M42 *= right; left.M43 *= right; left.M44 *= right; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// Result of the matrix multiplication with a scalar as an output parameter. public static void Multiply(ref Matrix left, float right, out Matrix result) { result.M11 = left.M11 * right; result.M12 = left.M12 * right; result.M13 = left.M13 * right; result.M14 = left.M14 * right; result.M21 = left.M21 * right; result.M22 = left.M22 * right; result.M23 = left.M23 * right; result.M24 = left.M24 * right; result.M31 = left.M31 * right; result.M32 = left.M32 * right; result.M33 = left.M33 * right; result.M34 = left.M34 * right; result.M41 = left.M41 * right; result.M42 = left.M42 * right; result.M43 = left.M43 * right; result.M44 = left.M44 * right; } /// /// Copy the values of specified to the float array. /// /// The source . /// The array which matrix values will be stored. /// /// Required for OpenGL 2.0 projection matrix stuff. /// public static float[] ToFloatArray(Matrix matrix) { float[] matarray = { matrix.M11, matrix.M12, matrix.M13, matrix.M14, matrix.M21, matrix.M22, matrix.M23, matrix.M24, matrix.M31, matrix.M32, matrix.M33, matrix.M34, matrix.M41, matrix.M42, matrix.M43, matrix.M44 }; return matarray; } /// /// Returns a matrix with the all values negated. /// /// Source . /// Result of the matrix negation. public static Matrix Negate(Matrix value) { value.M11 = -value.M11; value.M12 = -value.M12; value.M13 = -value.M13; value.M14 = -value.M14; value.M21 = -value.M21; value.M22 = -value.M22; value.M23 = -value.M23; value.M24 = -value.M24; value.M31 = -value.M31; value.M32 = -value.M32; value.M33 = -value.M33; value.M34 = -value.M34; value.M41 = -value.M41; value.M42 = -value.M42; value.M43 = -value.M43; value.M44 = -value.M44; return value; } /// /// Returns a matrix with the all values negated. /// /// Source . /// Result of the matrix negation as an output parameter. public static void Negate(ref Matrix value, out Matrix result) { result.M11 = -value.M11; result.M12 = -value.M12; result.M13 = -value.M13; result.M14 = -value.M14; result.M21 = -value.M21; result.M22 = -value.M22; result.M23 = -value.M23; result.M24 = -value.M24; result.M31 = -value.M31; result.M32 = -value.M32; result.M33 = -value.M33; result.M34 = -value.M34; result.M41 = -value.M41; result.M42 = -value.M42; result.M43 = -value.M43; result.M44 = -value.M44; } /// /// Adds two matrixes. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the matrixes. public static Matrix operator +(Matrix left, Matrix right) { left.M11 = left.M11 + right.M11; left.M12 = left.M12 + right.M12; left.M13 = left.M13 + right.M13; left.M14 = left.M14 + right.M14; left.M21 = left.M21 + right.M21; left.M22 = left.M22 + right.M22; left.M23 = left.M23 + right.M23; left.M24 = left.M24 + right.M24; left.M31 = left.M31 + right.M31; left.M32 = left.M32 + right.M32; left.M33 = left.M33 + right.M33; left.M34 = left.M34 + right.M34; left.M41 = left.M41 + right.M41; left.M42 = left.M42 + right.M42; left.M43 = left.M43 + right.M43; left.M44 = left.M44 + right.M44; return left; } /// /// Divides the elements of a by the elements of another . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the matrixes. public static Matrix operator /(Matrix left, Matrix right) { left.M11 = left.M11 / right.M11; left.M12 = left.M12 / right.M12; left.M13 = left.M13 / right.M13; left.M14 = left.M14 / right.M14; left.M21 = left.M21 / right.M21; left.M22 = left.M22 / right.M22; left.M23 = left.M23 / right.M23; left.M24 = left.M24 / right.M24; left.M31 = left.M31 / right.M31; left.M32 = left.M32 / right.M32; left.M33 = left.M33 / right.M33; left.M34 = left.M34 / right.M34; left.M41 = left.M41 / right.M41; left.M42 = left.M42 / right.M42; left.M43 = left.M43 / right.M43; left.M44 = left.M44 / right.M44; return left; } /// /// Divides the elements of a by a scalar. /// /// Source on the left of the div sign. /// Divisor scalar on the right of the div sign. /// The result of dividing a matrix by a scalar. public static Matrix operator /(Matrix left, float right) { float factor = 1f / right; left.M11 = left.M11 * factor; left.M12 = left.M12 * factor; left.M13 = left.M13 * factor; left.M14 = left.M14 * factor; left.M21 = left.M21 * factor; left.M22 = left.M22 * factor; left.M23 = left.M23 * factor; left.M24 = left.M24 * factor; left.M31 = left.M31 * factor; left.M32 = left.M32 * factor; left.M33 = left.M33 * factor; left.M34 = left.M34 * factor; left.M41 = left.M41 * factor; left.M42 = left.M42 * factor; left.M43 = left.M43 * factor; left.M44 = left.M44 * factor; return left; } /// /// Compares whether two instances are equal without any tolerance. /// /// Source on the left of the equal sign. /// Source on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Matrix left, Matrix right) { return ( left.M11 == right.M11 && left.M12 == right.M12 && left.M13 == right.M13 && left.M14 == right.M14 && left.M21 == right.M21 && left.M22 == right.M22 && left.M23 == right.M23 && left.M24 == right.M24 && left.M31 == right.M31 && left.M32 == right.M32 && left.M33 == right.M33 && left.M34 == right.M34 && left.M41 == right.M41 && left.M42 == right.M42 && left.M43 == right.M43 && left.M44 == right.M44 ); } /// /// Compares whether two instances are not equal without any tolerance. /// /// Source on the left of the not equal sign. /// Source on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Matrix left, Matrix matrix2) { return ( left.M11 != matrix2.M11 || left.M12 != matrix2.M12 || left.M13 != matrix2.M13 || left.M14 != matrix2.M14 || left.M21 != matrix2.M21 || left.M22 != matrix2.M22 || left.M23 != matrix2.M23 || left.M24 != matrix2.M24 || left.M31 != matrix2.M31 || left.M32 != matrix2.M32 || left.M33 != matrix2.M33 || left.M34 != matrix2.M34 || left.M41 != matrix2.M41 || left.M42 != matrix2.M42 || left.M43 != matrix2.M43 || left.M44 != matrix2.M44 ); } /// /// Multiplies two matrixes. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the matrix multiplication. /// /// Using matrix multiplication algorithm - see http://en.wikipedia.org/wiki/Matrix_multiplication. /// public static Matrix operator *(Matrix left, Matrix right) { float m11 = (left.M11 * right.M11) + (left.M12 * right.M21) + (left.M13 * right.M31) + (left.M14 * right.M41); float m12 = (left.M11 * right.M12) + (left.M12 * right.M22) + (left.M13 * right.M32) + (left.M14 * right.M42); float m13 = (left.M11 * right.M13) + (left.M12 * right.M23) + (left.M13 * right.M33) + (left.M14 * right.M43); float m14 = (left.M11 * right.M14) + (left.M12 * right.M24) + (left.M13 * right.M34) + (left.M14 * right.M44); float m21 = (left.M21 * right.M11) + (left.M22 * right.M21) + (left.M23 * right.M31) + (left.M24 * right.M41); float m22 = (left.M21 * right.M12) + (left.M22 * right.M22) + (left.M23 * right.M32) + (left.M24 * right.M42); float m23 = (left.M21 * right.M13) + (left.M22 * right.M23) + (left.M23 * right.M33) + (left.M24 * right.M43); float m24 = (left.M21 * right.M14) + (left.M22 * right.M24) + (left.M23 * right.M34) + (left.M24 * right.M44); float m31 = (left.M31 * right.M11) + (left.M32 * right.M21) + (left.M33 * right.M31) + (left.M34 * right.M41); float m32 = (left.M31 * right.M12) + (left.M32 * right.M22) + (left.M33 * right.M32) + (left.M34 * right.M42); float m33 = (left.M31 * right.M13) + (left.M32 * right.M23) + (left.M33 * right.M33) + (left.M34 * right.M43); float m34 = (left.M31 * right.M14) + (left.M32 * right.M24) + (left.M33 * right.M34) + (left.M34 * right.M44); float m41 = (left.M41 * right.M11) + (left.M42 * right.M21) + (left.M43 * right.M31) + (left.M44 * right.M41); float m42 = (left.M41 * right.M12) + (left.M42 * right.M22) + (left.M43 * right.M32) + (left.M44 * right.M42); float m43 = (left.M41 * right.M13) + (left.M42 * right.M23) + (left.M43 * right.M33) + (left.M44 * right.M43); float m44 = (left.M41 * right.M14) + (left.M42 * right.M24) + (left.M43 * right.M34) + (left.M44 * right.M44); left.M11 = m11; left.M12 = m12; left.M13 = m13; left.M14 = m14; left.M21 = m21; left.M22 = m22; left.M23 = m23; left.M24 = m24; left.M31 = m31; left.M32 = m32; left.M33 = m33; left.M34 = m34; left.M41 = m41; left.M42 = m42; left.M43 = m43; left.M44 = m44; return left; } /// /// Multiplies the elements of matrix by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the matrix multiplication with a scalar. public static Matrix operator *(Matrix left, float right) { left.M11 = left.M11 * right; left.M12 = left.M12 * right; left.M13 = left.M13 * right; left.M14 = left.M14 * right; left.M21 = left.M21 * right; left.M22 = left.M22 * right; left.M23 = left.M23 * right; left.M24 = left.M24 * right; left.M31 = left.M31 * right; left.M32 = left.M32 * right; left.M33 = left.M33 * right; left.M34 = left.M34 * right; left.M41 = left.M41 * right; left.M42 = left.M42 * right; left.M43 = left.M43 * right; left.M44 = left.M44 * right; return left; } /// /// Subtracts the values of one from another . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the matrix subtraction. public static Matrix operator -(Matrix left, Matrix right) { left.M11 = left.M11 - right.M11; left.M12 = left.M12 - right.M12; left.M13 = left.M13 - right.M13; left.M14 = left.M14 - right.M14; left.M21 = left.M21 - right.M21; left.M22 = left.M22 - right.M22; left.M23 = left.M23 - right.M23; left.M24 = left.M24 - right.M24; left.M31 = left.M31 - right.M31; left.M32 = left.M32 - right.M32; left.M33 = left.M33 - right.M33; left.M34 = left.M34 - right.M34; left.M41 = left.M41 - right.M41; left.M42 = left.M42 - right.M42; left.M43 = left.M43 - right.M43; left.M44 = left.M44 - right.M44; return left; } /// /// Inverts values in the specified . /// /// Source on the right of the sub sign. /// Result of the inversion. public static Matrix operator -(Matrix value) { value.M11 = -value.M11; value.M12 = -value.M12; value.M13 = -value.M13; value.M14 = -value.M14; value.M21 = -value.M21; value.M22 = -value.M22; value.M23 = -value.M23; value.M24 = -value.M24; value.M31 = -value.M31; value.M32 = -value.M32; value.M33 = -value.M33; value.M34 = -value.M34; value.M41 = -value.M41; value.M42 = -value.M42; value.M43 = -value.M43; value.M44 = -value.M44; return value; } #if NET8_0_OR_GREATER public static explicit operator Matrix(SysNumerics.Matrix4x4 value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Matrix4x4(Matrix value) { return Unsafe.BitCast(value); } #endif /// /// Creates a new that contains subtraction of one matrix from another. /// /// The first . /// The second . /// The result of the matrix subtraction. public static Matrix Subtract(Matrix left, Matrix right) { left.M11 = left.M11 - right.M11; left.M12 = left.M12 - right.M12; left.M13 = left.M13 - right.M13; left.M14 = left.M14 - right.M14; left.M21 = left.M21 - right.M21; left.M22 = left.M22 - right.M22; left.M23 = left.M23 - right.M23; left.M24 = left.M24 - right.M24; left.M31 = left.M31 - right.M31; left.M32 = left.M32 - right.M32; left.M33 = left.M33 - right.M33; left.M34 = left.M34 - right.M34; left.M41 = left.M41 - right.M41; left.M42 = left.M42 - right.M42; left.M43 = left.M43 - right.M43; left.M44 = left.M44 - right.M44; return left; } /// /// Creates a new that contains subtraction of one matrix from another. /// /// The first . /// The second . /// The result of the matrix subtraction as an output parameter. public static void Subtract(ref Matrix left, ref Matrix right, out Matrix result) { result.M11 = left.M11 - right.M11; result.M12 = left.M12 - right.M12; result.M13 = left.M13 - right.M13; result.M14 = left.M14 - right.M14; result.M21 = left.M21 - right.M21; result.M22 = left.M22 - right.M22; result.M23 = left.M23 - right.M23; result.M24 = left.M24 - right.M24; result.M31 = left.M31 - right.M31; result.M32 = left.M32 - right.M32; result.M33 = left.M33 - right.M33; result.M34 = left.M34 - right.M34; result.M41 = left.M41 - right.M41; result.M42 = left.M42 - right.M42; result.M43 = left.M43 - right.M43; result.M44 = left.M44 - right.M44; } internal string DebugDisplayString { get { if (this == Identity) { return "Identity"; } return string.Concat( "( ", this.M11.ToString(), " ", this.M12.ToString(), " ", this.M13.ToString(), " ", this.M14.ToString(), " ) \r\n", "( ", this.M21.ToString(), " ", this.M22.ToString(), " ", this.M23.ToString(), " ", this.M24.ToString(), " ) \r\n", "( ", this.M31.ToString(), " ", this.M32.ToString(), " ", this.M33.ToString(), " ", this.M34.ToString(), " ) \r\n", "( ", this.M41.ToString(), " ", this.M42.ToString(), " ", this.M43.ToString(), " ", this.M44.ToString(), " )"); } } /// /// Returns a representation of this in the format: /// {M11:[] M12:[] M13:[] M14:[]} /// {M21:[] M12:[] M13:[] M14:[]} /// {M31:[] M32:[] M33:[] M34:[]} /// {M41:[] M42:[] M43:[] M44:[]} /// /// A representation of this . public override string ToString() { return "{M11:" + M11 + " M12:" + M12 + " M13:" + M13 + " M14:" + M14 + "}" + " {M21:" + M21 + " M22:" + M22 + " M23:" + M23 + " M24:" + M24 + "}" + " {M31:" + M31 + " M32:" + M32 + " M33:" + M33 + " M34:" + M34 + "}" + " {M41:" + M41 + " M42:" + M42 + " M43:" + M43 + " M44:" + M44 + "}"; } /// /// Swap the matrix rows and columns. /// /// The matrix for transposing operation. /// The new which contains the transposing result. public static Matrix Transpose(Matrix value) { Matrix result; Transpose(ref value, out result); return result; } /// /// Swap the matrix rows and columns. /// /// The matrix for transposing operation. /// The new which contains the transposing result as an output parameter. public static void Transpose(ref Matrix value, out Matrix result) { Matrix ret; ret.M11 = value.M11; ret.M12 = value.M21; ret.M13 = value.M31; ret.M14 = value.M41; ret.M21 = value.M12; ret.M22 = value.M22; ret.M23 = value.M32; ret.M24 = value.M42; ret.M31 = value.M13; ret.M32 = value.M23; ret.M33 = value.M33; ret.M34 = value.M43; ret.M41 = value.M14; ret.M42 = value.M24; ret.M43 = value.M34; ret.M44 = value.M44; result = ret; } #endregion #region Private Static Methods /// /// Helper method for using the Laplace expansion theorem using two rows expansions to calculate major and /// minor determinants of a 4x4 matrix. This method is used for inverting a matrix. /// private static void FindDeterminants(ref Matrix value, out float major, out float minor1, out float minor2, out float minor3, out float minor4, out float minor5, out float minor6, out float minor7, out float minor8, out float minor9, out float minor10, out float minor11, out float minor12) { double det1 = (double)value.M11 * (double)value.M22 - (double)value.M12 * (double)value.M21; double det2 = (double)value.M11 * (double)value.M23 - (double)value.M13 * (double)value.M21; double det3 = (double)value.M11 * (double)value.M24 - (double)value.M14 * (double)value.M21; double det4 = (double)value.M12 * (double)value.M23 - (double)value.M13 * (double)value.M22; double det5 = (double)value.M12 * (double)value.M24 - (double)value.M14 * (double)value.M22; double det6 = (double)value.M13 * (double)value.M24 - (double)value.M14 * (double)value.M23; double det7 = (double)value.M31 * (double)value.M42 - (double)value.M32 * (double)value.M41; double det8 = (double)value.M31 * (double)value.M43 - (double)value.M33 * (double)value.M41; double det9 = (double)value.M31 * (double)value.M44 - (double)value.M34 * (double)value.M41; double det10 = (double)value.M32 * (double)value.M43 - (double)value.M33 * (double)value.M42; double det11 = (double)value.M32 * (double)value.M44 - (double)value.M34 * (double)value.M42; double det12 = (double)value.M33 * (double)value.M44 - (double)value.M34 * (double)value.M43; major = (float)(det1*det12 - det2*det11 + det3*det10 + det4*det9 - det5*det8 + det6*det7); minor1 = (float)det1; minor2 = (float)det2; minor3 = (float)det3; minor4 = (float)det4; minor5 = (float)det5; minor6 = (float)det6; minor7 = (float)det7; minor8 = (float)det8; minor9 = (float)det9; minor10 = (float)det10; minor11 = (float)det11; minor12 = (float)det12; } #endregion } } ================================================ FILE: src/Xna.Framework/Plane.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// A plane in 3d space, represented by its normal away from the origin and its distance from the origin, D. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Plane : IEquatable { #region Public Fields /// /// The normal of the . /// [DataMember] public Vector3 Normal; /// /// The distance of the to the origin. /// [DataMember] public float D; #endregion Public Fields #region Constructors /// /// Create a with the first three components of the specified /// as the normal and the last component as the distance to the origin. /// /// A vector holding the normal and distance to origin. public Plane(Vector4 value) { Normal.X = value.X; Normal.Y = value.Y; Normal.Z = value.Z; D = value.W; } /// /// Create a with the specified normal and distance to the origin. /// /// The normal of the plane. /// The distance to the origin. public Plane(Vector3 normal, float d) { Normal = normal; D = d; } /// /// Create the that contains the three specified points. /// /// A point the created should contain. /// A point the created should contain. /// A point the created should contain. public Plane(Vector3 a, Vector3 b, Vector3 c) { Vector3 ab = b - a; Vector3 ac = c - a; Vector3.Cross(ref ab, ref ac, out Normal); Normal.Normalize(); D = -(Vector3.Dot(Normal, a)); } /// /// Create a with the first three values as the X, Y and Z /// components of the normal and the last value as the distance to the origin. /// /// The X component of the normal. /// The Y component of the normal. /// The Z component of the normal. /// The distance to the origin. public Plane(float a, float b, float c, float d) { Normal.X = a; Normal.Y = b; Normal.Z = c; D = d; } #endregion Constructors #region Public Methods /// /// Get the dot product of a with this . /// /// The to calculate the dot product with. /// The dot product of the specified and this . public float Dot(Vector4 value) { return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D * value.W; } /// /// Get the dot product of a with this . /// /// The to calculate the dot product with. /// /// The dot product of the specified and this . /// public void Dot(ref Vector4 value, out float result) { result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D * value.W; } /// /// Get the dot product of a with /// the vector of this /// plus the value of this . /// /// The to calculate the dot product with. /// /// The dot product of the specified and the normal of this /// plus the value of this . /// public float DotCoordinate(Vector3 value) { return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D; } /// /// Get the dot product of a with /// the vector of this /// plus the value of this . /// /// The to calculate the dot product with. /// /// The dot product of the specified and the normal of this /// plus the value of this . /// public void DotCoordinate(ref Vector3 value, out float result) { result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z + this.D; } /// /// Get the dot product of a with /// the vector of this . /// /// The to calculate the dot product with. /// /// The dot product of the specified and the normal of this . /// public float DotNormal(Vector3 value) { return this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z; } /// /// Get the dot product of a with /// the vector of this . /// /// The to calculate the dot product with. /// /// The dot product of the specified and the normal of this . /// public void DotNormal(ref Vector3 value, out float result) { result = this.Normal.X * value.X + this.Normal.Y * value.Y + this.Normal.Z * value.Z; } /// /// Create a that contains the specified point and has the specified vector. /// /// The normal of the plane. /// A point the created should contain. public static Plane FromPoint(Vector3 normal, Vector3 point) { Plane result; result.Normal = normal; // project point on normal. //Opt: -Vector3.Dot(normal, point); result.D = -(normal.X * point.X + normal.Y * point.Y + normal.Z * point.Z); return result; } /// /// Transforms a normalized plane by a matrix. /// /// The normalized plane to transform. /// The transformation matrix. /// The transformed plane. public static Plane Transform(Plane plane, Matrix matrix) { Plane result; Transform(ref plane, ref matrix, out result); return result; } /// /// Transforms a normalized plane by a matrix. /// /// The normalized plane to transform. /// The transformation matrix. /// The transformed plane. public static void Transform(ref Plane plane, ref Matrix matrix, out Plane result) { // See "Transforming Normals" in http://www.glprogramming.com/red/appendixf.html // for an explanation of how this works. Matrix transformedMatrix; Matrix.Invert(ref matrix, out transformedMatrix); Matrix.Transpose(ref transformedMatrix, out transformedMatrix); var vector = new Vector4(plane.Normal, plane.D); Vector4 transformedVector; Vector4.Transform(ref vector, ref transformedMatrix, out transformedVector); result = new Plane(transformedVector); } /// /// Transforms a normalized plane by a quaternion rotation. /// /// The normalized plane to transform. /// The quaternion rotation. /// The transformed plane. public static Plane Transform(Plane plane, Quaternion rotation) { Plane result; Transform(ref plane, ref rotation, out result); return result; } /// /// Transforms a normalized plane by a quaternion rotation. /// /// The normalized plane to transform. /// The quaternion rotation. /// The transformed plane. public static void Transform(ref Plane plane, ref Quaternion rotation, out Plane result) { Vector3.Transform(ref plane.Normal, ref rotation, out result.Normal); result.D = plane.D; } /// /// Normalize the normal vector of this plane. /// public void Normalize() { float length = Normal.Length(); float factor = 1f / length; Normal.X = Normal.X * factor; Normal.Y = Normal.Y * factor; Normal.Z = Normal.Z * factor; D = D * factor; } /// /// Get a normalized version of the specified plane. /// /// The to normalize. /// A normalized version of the specified . public static Plane Normalize(Plane value) { Plane result; Normalize(ref value, out result); return result; } /// /// Get a normalized version of the specified plane. /// /// The to normalize. /// A normalized version of the specified . public static void Normalize(ref Plane value, out Plane result) { float length = value.Normal.Length(); float factor = 1f / length; result.Normal.X = value.Normal.X * factor; result.Normal.Y = value.Normal.Y * factor; result.Normal.Z = value.Normal.Z * factor; result.D = value.D * factor; } #if NET8_0_OR_GREATER public static explicit operator Plane(SysNumerics.Plane value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Plane(Plane value) { return Unsafe.BitCast(value); } #endif /// /// Check if two planes are not equal. /// /// A to check for inequality. /// A to check for inequality. /// true if the two planes are not equal, false if they are. public static bool operator !=(Plane left, Plane right) { return !left.Equals(right); } /// /// Check if two planes are equal. /// /// A to check for equality. /// A to check for equality. /// true if the two planes are equal, false if they are not. public static bool operator ==(Plane left, Plane right) { return left.Equals(right); } /// /// Check if this is equal to another . /// /// An to check for equality with this . /// /// true if the specified is equal to this , /// false if it is not. /// public override bool Equals(object other) { return (other is Plane) ? this.Equals((Plane)other) : false; } /// /// Check if this is equal to another . /// /// A to check for equality with this . /// /// true if the specified is equal to this one, /// false if it is not. /// public bool Equals(Plane other) { return ((Normal == other.Normal) && (D == other.D)); } /// /// Get a hash code for this . /// /// A hash code for this . public override int GetHashCode() { return Normal.GetHashCode() ^ D.GetHashCode(); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The type of intersection of this with the specified . /// public PlaneIntersectionType Intersects(BoundingBox box) { PlaneIntersectionType result; IntersectsHelper.BoundingBoxIntersectsPlane(ref box, ref this, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The type of intersection of this with the specified . /// public void Intersects(ref BoundingBox box, out PlaneIntersectionType result) { IntersectsHelper.BoundingBoxIntersectsPlane(ref box, ref this, out result); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The type of intersection of this with the specified . /// public PlaneIntersectionType Intersects(BoundingFrustum frustum) { IntersectsHelper.BoundingFrustumIntersectsPlane(frustum, ref this, out PlaneIntersectionType result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The type of intersection of this with the specified . /// public PlaneIntersectionType Intersects(BoundingSphere sphere) { PlaneIntersectionType result; IntersectsHelper.BoundingSphereIntersectsPlane(ref sphere, ref this, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The type of intersection of this with the specified . /// public void Intersects(ref BoundingSphere sphere, out PlaneIntersectionType result) { IntersectsHelper.BoundingSphereIntersectsPlane(ref sphere, ref this, out result); } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if the /// does not intersect this . /// public float? Intersects(Ray ray) { float? result; IntersectsHelper.PlaneIntersectsRay(ref this, ref ray, out result); return result; } /// /// Check if this intersects a . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if the /// does not intersect this . /// public void Intersects(ref Ray ray, out float? result) { IntersectsHelper.PlaneIntersectsRay(ref this, ref ray, out result); } internal PlaneIntersectionType Intersects(ref Vector3 point) { float distance; DotCoordinate(ref point, out distance); if (distance > 0) return PlaneIntersectionType.Front; if (distance < 0) return PlaneIntersectionType.Back; return PlaneIntersectionType.Intersecting; } internal string DebugDisplayString { get { return string.Concat( this.Normal.DebugDisplayString, " ", this.D.ToString() ); } } /// /// Get a representation of this . /// /// A representation of this . public override string ToString() { return "{Normal:" + Normal + " D:" + D + "}"; } /// /// Deconstruction method for . /// /// /// public void Deconstruct(out Vector3 normal, out float d) { normal = Normal; d = D; } #endregion } } ================================================ FILE: src/Xna.Framework/PlaneIntersectionType.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines the intersection between a and a bounding volume. /// public enum PlaneIntersectionType { /// /// There is no intersection, the bounding volume is in the negative half space of the plane. /// Front, /// /// There is no intersection, the bounding volume is in the positive half space of the plane. /// Back, /// /// The plane is intersected. /// Intersecting } } ================================================ FILE: src/Xna.Framework/PlayerIndex.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Defines the index of player for various MonoGame components. /// public enum PlayerIndex { /// /// The first player index. /// One = 0, /// /// The second player index. /// Two = 1, /// /// The third player index. /// Three = 2, /// /// The fourth player index. /// Four = 3 } } ================================================ FILE: src/Xna.Framework/Point.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Describes a 2D-point. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Point : IEquatable { #region Private Fields private static readonly Point zeroPoint = new Point(); #endregion #region Public Fields /// /// The x coordinate of this . /// [DataMember] public int X; /// /// The y coordinate of this . /// [DataMember] public int Y; #endregion #region Properties /// /// Returns a with coordinates 0, 0. /// public static Point Zero { get { return zeroPoint; } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( this.X.ToString(), " ", this.Y.ToString() ); } } #endregion #region Constructors /// /// Constructs a point with X and Y from two values. /// /// The x coordinate in 2d-space. /// The y coordinate in 2d-space. public Point(int x, int y) { this.X = x; this.Y = y; } /// /// Constructs a point with X and Y set to the same value. /// /// The x and y coordinates in 2d-space. public Point(int value) { this.X = value; this.Y = value; } #endregion #region Operators /// /// Adds two points. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the points. public static Point operator +(Point left, Point right) { return new Point(left.X + right.X, left.Y + right.Y); } /// /// Subtracts a from a . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the subtraction. public static Point operator -(Point left, Point right) { return new Point(left.X - right.X, left.Y - right.Y); } /// /// Multiplies the components of two points by each other. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the multiplication. public static Point operator *(Point left, Point right) { return new Point(left.X * right.X, left.Y * right.Y); } /// /// Divides the components of a by the components of another . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the points. public static Point operator /(Point left, Point right) { return new Point(left.X / right.X, left.Y / right.Y); } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Point left, Point right) { return left.Equals(right); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Point left, Point right) { return !left.Equals(right); } #endregion #region Public methods /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { return (obj is Point) && Equals((Point)obj); } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Point other) { return ((X == other.X) && (Y == other.Y)); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { unchecked { var hash = 17; hash = hash * 23 + X.GetHashCode(); hash = hash * 23 + Y.GetHashCode(); return hash; } } /// /// Returns a representation of this in the format: /// {X:[] Y:[]} /// /// representation of this . public override string ToString() { return "{X:" + X + " Y:" + Y + "}"; } /// /// Gets a representation for this object. /// /// A representation for this object. public Vector2 ToVector2() { return new Vector2(X, Y); } /// /// Deconstruction method for . /// /// /// public void Deconstruct(out int x, out int y) { x = X; y = Y; } #endregion } } ================================================ FILE: src/Xna.Framework/Pose2.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Pose2 : IEquatable { #region Private Fields private static readonly Pose2 _identity = new Pose2(Complex.Identity, Vector2.Zero); #endregion #region Public Fields /// /// The orientation of this . /// [DataMember] public Complex Orientation; /// /// The translation part of this . /// [DataMember] public Vector2 Translation; #endregion #region Properties /// /// Returns the identity . /// public static Pose2 Identity { get { return _identity; } } internal string DebugDisplayString { get { if (this == Pose2.Identity) return "Identity"; return String.Format("{{Orientation: {0} Translation: {1} }}", Orientation, Translation); } } #endregion /// /// Constructs a 2D Pose with orientation and translation. /// /// The orientation of this . /// The translation of this . public Pose2(Complex orientation, Vector2 translation) { this.Orientation = orientation; this.Translation = translation; } /// /// Returns the inverse pose, which represents the opposite transformation. /// /// Source . /// The inverse pose. public static Pose2 Inverse(Pose2 value) { Pose2 result; result.Orientation = Complex.Conjugate(value.Orientation); result.Translation = Vector2.Transform(-value.Translation, result.Orientation); return result; } /// /// Creates a new that contains a multiplication of two poses. /// /// Source . /// Source . /// The result of the pose multiplication. public static Pose2 Multiply(Pose2 left, Pose2 right) { Pose2 result; result.Orientation = Complex.Multiply(left.Orientation, right.Orientation); result.Translation = Vector2.Transform(left.Translation, right); return result; } /// /// Deconstruction method for . /// /// The orientation of this . /// The translation of this . public void Deconstruct(out Complex orientation, out Vector2 translation) { orientation = this.Orientation; translation = this.Translation; } #region Operators /// /// Multiplies two poses. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the poses multiplication. public static Pose2 operator *(Pose2 left, Pose2 right) { Pose2 result; result = Pose2.Multiply(left, right); return result; } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Pose2 left, Pose2 right) { return left.Orientation == right.Orientation && left.Translation == right.Translation; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Pose2 left, Pose2 right) { return left.Orientation != right.Orientation || left.Translation != right.Translation; } #endregion #region IEquatable /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is Pose2) return Equals((Pose2)obj); return false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Pose2 other) { return Orientation == other.Orientation && Translation == other.Translation; } #endregion /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return Orientation.GetHashCode() + Translation.GetHashCode(); } /// public override string ToString() { return String.Format("{{Orientation: {0}, Translation: {1} }}", Orientation, Translation); } } } ================================================ FILE: src/Xna.Framework/Pose3.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] [StructLayout(LayoutKind.Sequential, Size = 32)] public struct Pose3 : IEquatable { #region Private Fields private static readonly Pose3 _identity = new Pose3(Quaternion.Identity, Vector3.Zero); #endregion #region Public Fields /// /// The orientation of this . /// [DataMember] public Quaternion Orientation; /// /// The translation part of this . /// [DataMember] public Vector3 Translation; #endregion #region Properties /// /// Returns the identity . /// public static Pose3 Identity { get { return _identity; } } internal string DebugDisplayString { get { if (this == Pose3.Identity) return "Identity"; return String.Format("{{Orientation: {0} Translation: {1} }}", Orientation, Translation); } } #endregion /// /// Constructs a 3D Pose with orientation and translation. /// /// The orientation of this . /// The translation of this . public Pose3(Quaternion orientation, Vector3 translation) { this.Orientation = orientation; this.Translation = translation; } /// /// Returns the inverse pose, which represents the opposite transformation. /// /// Source . /// The inverse pose. public static Pose3 Inverse(Pose3 value) { Pose3 result; result.Orientation = Quaternion.Inverse(value.Orientation); result.Translation = Vector3.Transform(-value.Translation, result.Orientation); return result; } /// /// Creates a new that contains a multiplication of two poses. /// /// Source . /// Source . /// The result of the pose multiplication. public static Pose3 Multiply(Pose3 left, Pose3 right) { Pose3 result; result.Orientation = Quaternion.Multiply(left.Orientation, right.Orientation); result.Translation = Vector3.Transform(left.Translation, right); return result; } /// /// Deconstruction method for . /// /// The orientation of this . /// The translation of this . public void Deconstruct(out Quaternion orientation, out Vector3 translation) { orientation = this.Orientation; translation = this.Translation; } #region Operators /// /// Multiplies two poses. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the poses multiplication. public static Pose3 operator *(Pose3 left, Pose3 right) { Pose3 result; result = Pose3.Multiply(left, right); return result; } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Pose3 left, Pose3 right) { return left.Orientation == right.Orientation && left.Translation == right.Translation; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Pose3 left, Pose3 right) { return left.Orientation != right.Orientation || left.Translation != right.Translation; } #endregion #region IEquatable /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is Pose3) return Equals((Pose3)obj); return false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Pose3 other) { return Orientation == other.Orientation && Translation == other.Translation; } #endregion /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return Orientation.GetHashCode() + Translation.GetHashCode(); } /// public override string ToString() { return String.Format("{{Orientation: {0}, Translation: {1} }}", Orientation, Translation); } } } ================================================ FILE: src/Xna.Framework/Properties/AssemblyInfo.cs ================================================ using System; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework/Quaternion.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// An efficient mathematical representation for three dimensional rotations. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Quaternion : IEquatable { #region Private Fields private static readonly Quaternion _identity = new Quaternion(0, 0, 0, 1); #endregion #region Public Fields /// /// The x coordinate of this . /// [DataMember] public float X; /// /// The y coordinate of this . /// [DataMember] public float Y; /// /// The z coordinate of this . /// [DataMember] public float Z; /// /// The rotation component of this . /// [DataMember] public float W; #endregion #region Constructors /// /// Constructs a quaternion with X, Y, Z and W from four values. /// /// The x coordinate in 3d-space. /// The y coordinate in 3d-space. /// The z coordinate in 3d-space. /// The rotation component. public Quaternion(float x, float y, float z, float w) { this.X = x; this.Y = y; this.Z = z; this.W = w; } /// /// Constructs a quaternion with X, Y, Z from and rotation component from a scalar. /// /// The x, y, z coordinates in 3d-space. /// The rotation component. public Quaternion(Vector3 value, float w) { this.X = value.X; this.Y = value.Y; this.Z = value.Z; this.W = w; } /// /// Constructs a quaternion from . /// /// The x, y, z coordinates in 3d-space and the rotation component. public Quaternion(Vector4 value) { this.X = value.X; this.Y = value.Y; this.Z = value.Z; this.W = value.W; } #endregion #region Public Properties /// /// Returns a quaternion representing no rotation. /// public static Quaternion Identity { get{ return _identity; } } #endregion #region Internal Properties internal string DebugDisplayString { get { if (this == Quaternion._identity) { return "Identity"; } return string.Concat( this.X.ToString(), " ", this.Y.ToString(), " ", this.Z.ToString(), " ", this.W.ToString() ); } } #endregion #region Public Methods #region Add /// /// Creates a new that contains the sum of two quaternions. /// /// Source . /// Source . /// The result of the quaternion addition. public static Quaternion Add(Quaternion left, Quaternion right) { Quaternion result; result.X = left.X + right.X; result.Y = left.Y + right.Y; result.Z = left.Z + right.Z; result.W = left.W + right.W; return result; } /// /// Creates a new that contains the sum of two quaternions. /// /// Source . /// Source . /// The result of the quaternion addition as an output parameter. public static void Add(ref Quaternion left, ref Quaternion right, out Quaternion result) { result.X = left.X + right.X; result.Y = left.Y + right.Y; result.Z = left.Z + right.Z; result.W = left.W + right.W; } #endregion #region Concatenate /// /// Creates a new that contains concatenation between two quaternion. /// /// The first to concatenate. /// The second to concatenate. /// The result of rotation of followed by rotation. public static Quaternion Concatenate(Quaternion value1, Quaternion value2) { Quaternion result; result.X = (value2.X * value1.W) + (value1.X * value2.W) +((value2.Y * value1.Z) - (value2.Z * value1.Y)); result.Y = (value2.Y * value1.W) + (value1.Y * value2.W) +((value2.Z * value1.X) - (value2.X * value1.Z)); result.Z = (value2.Z * value1.W) + (value1.Z * value2.W) +((value2.X * value1.Y) - (value2.Y * value1.X)); result.W = (value2.W * value1.W) -((value2.X * value1.X) + (value2.Y * value1.Y) + (value2.Z * value1.Z)); return result; } /// /// Creates a new that contains concatenation between two quaternion. /// /// The first to concatenate. /// The second to concatenate. /// The result of rotation of followed by rotation as an output parameter. public static void Concatenate(ref Quaternion value1, ref Quaternion value2, out Quaternion result) { float x = (value2.X * value1.W) + (value1.X * value2.W) +((value2.Y * value1.Z) - (value2.Z * value1.Y)); float y = (value2.Y * value1.W) + (value1.Y * value2.W) +((value2.Z * value1.X) - (value2.X * value1.Z)); float z = (value2.Z * value1.W) + (value1.Z * value2.W) +((value2.X * value1.Y) - (value2.Y * value1.X)); float w = (value2.W * value1.W) -((value2.X * value1.X) + (value2.Y * value1.Y) + (value2.Z * value1.Z)); result.X = x; result.Y = y; result.Z = z; result.W = w; } #endregion #region Conjugate /// /// Transforms this quaternion into its conjugated version. /// public void Conjugate() { X = -X; Y = -Y; Z = -Z; } /// /// Creates a new that contains conjugated version of the specified quaternion. /// /// The quaternion which values will be used to create the conjugated version. /// The conjugate version of the specified quaternion. public static Quaternion Conjugate(Quaternion value) { return new Quaternion(-value.X,-value.Y,-value.Z,value.W); } /// /// Creates a new that contains conjugated version of the specified quaternion. /// /// The quaternion which values will be used to create the conjugated version. /// The conjugated version of the specified quaternion as an output parameter. public static void Conjugate(ref Quaternion value, out Quaternion result) { result.X = -value.X; result.Y = -value.Y; result.Z = -value.Z; result.W = value.W; } #endregion #region CreateFromAxisAngle /// /// Creates a new from the specified axis and angle. /// /// The axis of rotation. /// The angle in radians. /// The new quaternion builded from axis and angle. public static Quaternion CreateFromAxisAngle(Vector3 axis, float angle) { float half = angle * 0.5f; float sin = (float)Math.Sin(half); float cos = (float)Math.Cos(half); return new Quaternion(axis.X * sin, axis.Y * sin, axis.Z * sin, cos); } /// /// Creates a new from the specified axis and angle. /// /// The axis of rotation. /// The angle in radians. /// The new quaternion builded from axis and angle as an output parameter. public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Quaternion result) { float half = angle * 0.5f; float sin = (float)Math.Sin(half); float cos = (float)Math.Cos(half); result.X = axis.X * sin; result.Y = axis.Y * sin; result.Z = axis.Z * sin; result.W = cos; } #endregion #region CreateFromRotationMatrix /// /// Creates a new from the specified . /// /// The rotation matrix. /// A quaternion composed from the rotation part of the matrix. public static Quaternion CreateFromRotationMatrix(Matrix matrix) { Quaternion result; float sqrt; float half; float scale = matrix.M11 + matrix.M22 + matrix.M33; if (scale > 0.0f) { sqrt = (float)Math.Sqrt(scale + 1.0f); result.W = sqrt * 0.5f; sqrt = 0.5f / sqrt; result.X = (matrix.M23 - matrix.M32) * sqrt; result.Y = (matrix.M31 - matrix.M13) * sqrt; result.Z = (matrix.M12 - matrix.M21) * sqrt; return result; } if ((matrix.M11 >= matrix.M22) && (matrix.M11 >= matrix.M33)) { sqrt = (float) Math.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33); half = 0.5f / sqrt; result.X = 0.5f * sqrt; result.Y = (matrix.M12 + matrix.M21) * half; result.Z = (matrix.M13 + matrix.M31) * half; result.W = (matrix.M23 - matrix.M32) * half; return result; } if (matrix.M22 > matrix.M33) { sqrt = (float) Math.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33); half = 0.5f / sqrt; result.X = (matrix.M21 + matrix.M12) * half; result.Y = 0.5f * sqrt; result.Z = (matrix.M32 + matrix.M23) * half; result.W = (matrix.M31 - matrix.M13) * half; return result; } sqrt = (float) Math.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22); half = 0.5f / sqrt; result.X = (matrix.M31 + matrix.M13) * half; result.Y = (matrix.M32 + matrix.M23) * half; result.Z = 0.5f * sqrt; result.W = (matrix.M12 - matrix.M21) * half; return result; } /// /// Creates a new from the specified . /// /// The rotation matrix. /// A quaternion composed from the rotation part of the matrix as an output parameter. public static void CreateFromRotationMatrix(ref Matrix matrix, out Quaternion result) { float sqrt; float half; float scale = matrix.M11 + matrix.M22 + matrix.M33; if (scale > 0.0f) { sqrt = (float)Math.Sqrt(scale + 1.0f); result.W = sqrt * 0.5f; sqrt = 0.5f / sqrt; result.X = (matrix.M23 - matrix.M32) * sqrt; result.Y = (matrix.M31 - matrix.M13) * sqrt; result.Z = (matrix.M12 - matrix.M21) * sqrt; } else if ((matrix.M11 >= matrix.M22) && (matrix.M11 >= matrix.M33)) { sqrt = (float)Math.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33); half = 0.5f / sqrt; result.X = 0.5f * sqrt; result.Y = (matrix.M12 + matrix.M21) * half; result.Z = (matrix.M13 + matrix.M31) * half; result.W = (matrix.M23 - matrix.M32) * half; } else if (matrix.M22 > matrix.M33) { sqrt = (float) Math.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33); half = 0.5f/sqrt; result.X = (matrix.M21 + matrix.M12)*half; result.Y = 0.5f*sqrt; result.Z = (matrix.M32 + matrix.M23)*half; result.W = (matrix.M31 - matrix.M13)*half; } else { sqrt = (float)Math.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22); half = 0.5f / sqrt; result.X = (matrix.M31 + matrix.M13) * half; result.Y = (matrix.M32 + matrix.M23) * half; result.Z = 0.5f * sqrt; result.W = (matrix.M12 - matrix.M21) * half; } } #endregion #region CreateFromYawPitchRoll /// /// Creates a new from the specified yaw, pitch and roll angles. /// /// Yaw around the y axis in radians. /// Pitch around the x axis in radians. /// Roll around the z axis in radians. /// A new quaternion from the concatenated yaw, pitch, and roll angles. public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll) { float halfRoll = roll * 0.5f; float halfPitch = pitch * 0.5f; float halfYaw = yaw * 0.5f; float sinRoll = (float)Math.Sin(halfRoll); float cosRoll = (float)Math.Cos(halfRoll); float sinPitch = (float)Math.Sin(halfPitch); float cosPitch = (float)Math.Cos(halfPitch); float sinYaw = (float)Math.Sin(halfYaw); float cosYaw = (float)Math.Cos(halfYaw); return new Quaternion((cosYaw * sinPitch * cosRoll) + (sinYaw * cosPitch * sinRoll), (sinYaw * cosPitch * cosRoll) - (cosYaw * sinPitch * sinRoll), (cosYaw * cosPitch * sinRoll) - (sinYaw * sinPitch * cosRoll), (cosYaw * cosPitch * cosRoll) + (sinYaw * sinPitch * sinRoll)); } /// /// Creates a new from the specified yaw, pitch and roll angles. /// /// Yaw around the y axis in radians. /// Pitch around the x axis in radians. /// Roll around the z axis in radians. /// A new quaternion from the concatenated yaw, pitch, and roll angles as an output parameter. public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Quaternion result) { float halfRoll = roll * 0.5f; float halfPitch = pitch * 0.5f; float halfYaw = yaw * 0.5f; float sinRoll = (float)Math.Sin(halfRoll); float cosRoll = (float)Math.Cos(halfRoll); float sinPitch = (float)Math.Sin(halfPitch); float cosPitch = (float)Math.Cos(halfPitch); float sinYaw = (float)Math.Sin(halfYaw); float cosYaw = (float)Math.Cos(halfYaw); result.X = (cosYaw * sinPitch * cosRoll) + (sinYaw * cosPitch * sinRoll); result.Y = (sinYaw * cosPitch * cosRoll) - (cosYaw * sinPitch * sinRoll); result.Z = (cosYaw * cosPitch * sinRoll) - (sinYaw * sinPitch * cosRoll); result.W = (cosYaw * cosPitch * cosRoll) + (sinYaw * sinPitch * sinRoll); } #endregion #region Divide /// /// Divides a by the other . /// /// Source . /// Divisor . /// The result of dividing the quaternions. public static Quaternion Divide(Quaternion left, Quaternion right) { // Opt: right = Quaternion.Inverse(right); float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W; float factor = 1f / dot; right.X = -right.X * factor; right.Y = -right.Y * factor; right.Z = -right.Z * factor; right.W = right.W * factor; float x2 = (left.Y * right.Z) - (left.Z * right.Y); float y2 = (left.Z * right.X) - (left.X * right.Z); float z2 = (left.X * right.Y) - (left.Y * right.X); float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z); Quaternion result; result.X = (left.X * right.W) + (right.X * left.W) + x2; result.Y = (left.Y * right.W) + (right.Y * left.W) + y2; result.Z = (left.Z * right.W) + (right.Z * left.W) + z2; result.W = (left.W * right.W) - w2; return result; } /// /// Divides a by the other . /// /// Source . /// Divisor . /// The result of dividing the quaternions as an output parameter. public static void Divide(ref Quaternion left, ref Quaternion right, out Quaternion result) { // Opt: Quaternion invright = Quaternion.Inverse(right); float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W; float factor = 1f / dot; float invrightX = -right.X * factor; float invrightY = -right.Y * factor; float invrightZ = -right.Z * factor; float invrightW = right.W * factor; float x2 = (left.Y * invrightZ) - (left.Z * invrightY); float y2 = (left.Z * invrightX) - (left.X * invrightZ); float z2 = (left.X * invrightY) - (left.Y * invrightX); float w2 = (left.X * invrightX) + (left.Y * invrightY) + (left.Z * invrightZ); float x = (left.X * invrightW) + (invrightX * left.W) + x2; float y = (left.Y * invrightW) + (invrightY * left.W) + y2; float z = (left.Z * invrightW) + (invrightZ * left.W) + z2; float w = (left.W * invrightW) - w2; result.X = x; result.Y = y; result.Z = z; result.W = w; } #endregion #region Dot /// /// Returns a dot product of two quaternions. /// /// The first quaternion. /// The second quaternion. /// The dot product of two quaternions. public static float Dot(Quaternion left, Quaternion right) { return (left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W); } /// /// Returns a dot product of two quaternions. /// /// The first quaternion. /// The second quaternion. /// The dot product of two quaternions as an output parameter. public static void Dot(ref Quaternion left, ref Quaternion right, out float result) { result = left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W; } #endregion #region Equals /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is Quaternion) return Equals((Quaternion)obj); return false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Quaternion other) { return X == other.X && Y == other.Y && Z == other.Z && W == other.W; } #endregion /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode(); } #region Inverse /// /// Returns the inverse quaternion which represents the opposite rotation. /// /// Source . /// The inverse quaternion. public static Quaternion Inverse(Quaternion value) { float dot = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W); Quaternion result; float factor = 1f / dot; result.X = -value.X * factor; result.Y = -value.Y * factor; result.Z = -value.Z * factor; result.W = value.W * factor; return result; } /// /// Returns the inverse quaternion which represents the opposite rotation. /// /// Source . /// The inverse quaternion as an output parameter. public static void Inverse(ref Quaternion value, out Quaternion result) { float dot = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W); float factor = 1f / dot; result.X = -value.X * factor; result.Y = -value.Y * factor; result.Z = -value.Z * factor; result.W = value.W * factor; } #endregion /// /// Returns the magnitude of the quaternion components. /// /// The magnitude of the quaternion components. public float Length() { return (float) Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W)); } /// /// Returns the squared magnitude of the quaternion components. /// /// The squared magnitude of the quaternion components. public float LengthSquared() { return (X * X) + (Y * Y) + (Z * Z) + (W * W); } #region Lerp /// /// Performs a linear blend between two quaternions. /// /// Source . /// Source . /// The blend amount where 0 returns and 1 . /// The result of linear blending between two quaternions. public static Quaternion Lerp(Quaternion start, Quaternion end, float amount) { float a = 1f - amount; float b = amount; float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W; Quaternion result; if (dot >= 0f) { result.X = a * start.X + b * end.X; result.Y = a * start.Y + b * end.Y; result.Z = a * start.Z + b * end.Z; result.W = a * start.W + b * end.W; } else { result.X = a * start.X - b * end.X; result.Y = a * start.Y - b * end.Y; result.Z = a * start.Z - b * end.Z; result.W = a * start.W - b * end.W; } float lengthSq = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.W; float invLength = 1f / ((float)Math.Sqrt((double)lengthSq)); result.X *= invLength; result.Y *= invLength; result.Z *= invLength; result.W *= invLength; return result; } /// /// Performs a linear blend between two quaternions. /// /// Source . /// Source . /// The blend amount where 0 returns and 1 . /// The result of linear blending between two quaternions as an output parameter. public static void Lerp(ref Quaternion start, ref Quaternion end, float amount, out Quaternion result) { float a = 1f - amount; float b = amount; float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W; if (dot >= 0f) { result.X = a * start.X + b * end.X; result.Y = a * start.Y + b * end.Y; result.Z = a * start.Z + b * end.Z; result.W = a * start.W + b * end.W; } else { result.X = a * start.X - b * end.X; result.Y = a * start.Y - b * end.Y; result.Z = a * start.Z - b * end.Z; result.W = a * start.W - b * end.W; } float lengthSq = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.W; float invLength = 1f / ((float)Math.Sqrt((double)lengthSq)); result.X *= invLength; result.Y *= invLength; result.Z *= invLength; result.W *= invLength; } #endregion #region Slerp /// /// Performs a spherical linear blend between two quaternions. /// /// Source . /// Source . /// The blend amount where 0 returns and 1 . /// The result of spherical linear blending between two quaternions. public static Quaternion Slerp(Quaternion start, Quaternion end, float amount) { float a = 1f - amount; float b = amount; float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W; float dotAbs = Math.Abs(dot); if (dotAbs <= 0.999999f) { float acos = (float)Math.Acos(dotAbs); float invSin = (float)(1.0 / Math.Sin(acos)); a = (float)Math.Sin(a * acos) * invSin; b = (float)Math.Sin(b * acos) * invSin; } if (dot < 0f) b = -b; Quaternion result; result.X = a * start.X + b * end.X; result.Y = a * start.Y + b * end.Y; result.Z = a * start.Z + b * end.Z; result.W = a * start.W + b * end.W; return result; } /// /// Performs a spherical linear blend between two quaternions. /// /// Source . /// Source . /// The blend amount where 0 returns and 1 . /// The result of spherical linear blending between two quaternions as an output parameter. public static void Slerp(ref Quaternion start, ref Quaternion end, float amount, out Quaternion result) { float a = 1f - amount; float b = amount; float dot = start.X * end.X + start.Y * end.Y + start.Z * end.Z + start.W * end.W; float dotAbs = Math.Abs(dot); if (dotAbs <= 0.999999f) { float acos = (float)Math.Acos(dotAbs); float invSin = (float)(1.0 / Math.Sin(acos)); a = (float)Math.Sin(a * acos) * invSin; b = (float)Math.Sin(b * acos) * invSin; } if (dot < 0f) b = -b; result.X = a * start.X + b * end.X; result.Y = a * start.Y + b * end.Y; result.Z = a * start.Z + b * end.Z; result.W = a * start.W + b * end.W; } #endregion #region Subtract /// /// Creates a new that contains subtraction of one from another. /// /// Source . /// Source . /// The result of the quaternion subtraction. public static Quaternion Subtract(Quaternion left, Quaternion right) { Quaternion result; result.X = left.X - right.X; result.Y = left.Y - right.Y; result.Z = left.Z - right.Z; result.W = left.W - right.W; return result; } /// /// Creates a new that contains subtraction of one from another. /// /// Source . /// Source . /// The result of the quaternion subtraction as an output parameter. public static void Subtract(ref Quaternion left, ref Quaternion right, out Quaternion result) { result.X = left.X - right.X; result.Y = left.Y - right.Y; result.Z = left.Z - right.Z; result.W = left.W - right.W; } #endregion #region Multiply /// /// Creates a new that contains a multiplication of two quaternions. /// /// Source . /// Source . /// The result of the quaternion multiplication. public static Quaternion Multiply(Quaternion left, Quaternion right) { Quaternion result; float x2 = (left.Y * right.Z) - (left.Z * right.Y); float y2 = (left.Z * right.X) - (left.X * right.Z); float z2 = (left.X * right.Y) - (left.Y * right.X); float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z); result.X = (left.X * right.W) + (right.X * left.W) + x2; result.Y = (left.Y * right.W) + (right.Y * left.W) + y2; result.Z = (left.Z * right.W) + (right.Z * left.W) + z2; result.W = (left.W * right.W) - w2; return result; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the quaternion multiplication with a scalar. public static Quaternion Multiply(Quaternion left, float right) { Quaternion result; result.X = left.X * right; result.Y = left.Y * right; result.Z = left.Z * right; result.W = left.W * right; return result; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the quaternion multiplication with a scalar as an output parameter. public static void Multiply(ref Quaternion left, float right, out Quaternion result) { result.X = left.X * right; result.Y = left.Y * right; result.Z = left.Z * right; result.W = left.W * right; } /// /// Creates a new that contains a multiplication of two quaternions. /// /// Source . /// Source . /// The result of the quaternion multiplication as an output parameter. public static void Multiply(ref Quaternion left, ref Quaternion right, out Quaternion result) { float x2 = (left.Y * right.Z) - (left.Z * right.Y); float y2 = (left.Z * right.X) - (left.X * right.Z); float z2 = (left.X * right.Y) - (left.Y * right.X); float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z); float x = (left.X * right.W) + (right.X * left.W) + x2; float y = (left.Y * right.W) + (right.Y * left.W) + y2; float z = (left.Z * right.W) + (right.Z * left.W) + z2; float w = (left.W * right.W) - w2; result.X = x; result.Y = y; result.Z = z; result.W = w; } #endregion #region Negate /// /// Flips the sign of the all the quaternion components. /// /// Source . /// The result of the quaternion negation. public static Quaternion Negate(Quaternion value) { return new Quaternion(-value.X, -value.Y, -value.Z, -value.W); } /// /// Flips the sign of the all the quaternion components. /// /// Source . /// The result of the quaternion negation as an output parameter. public static void Negate(ref Quaternion value, out Quaternion result) { result.X = -value.X; result.Y = -value.Y; result.Z = -value.Z; result.W = -value.W; } #endregion #region Normalize /// /// Scales the quaternion magnitude to unit length. /// public void Normalize() { float magnitute = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W)); float factor = 1f / magnitute; X *= factor; Y *= factor; Z *= factor; W *= factor; } /// /// Scales the quaternion magnitude to unit length. /// /// Source . /// The unit length quaternion. public static Quaternion Normalize(Quaternion value) { float magnitute = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W)); Quaternion result; float factor = 1f / magnitute; result.X = value.X * factor; result.Y = value.Y * factor; result.Z = value.Z * factor; result.W = value.W * factor; return result; } /// /// Scales the quaternion magnitude to unit length. /// /// Source . /// The unit length quaternion an output parameter. public static void Normalize(ref Quaternion value, out Quaternion result) { float magnitute = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W)); float factor = 1f / magnitute; result.X = value.X * factor; result.Y = value.Y * factor; result.Z = value.Z * factor; result.W = value.W * factor; } #endregion /// /// Returns a representation of this in the format: /// {X:[] Y:[] Z:[] W:[]} /// /// A representation of this . public override string ToString() { return "{X:" + X + " Y:" + Y + " Z:" + Z + " W:" + W + "}"; } /// /// Gets a representation for this object. /// /// A representation for this object. public Vector4 ToVector4() { return new Vector4(X,Y,Z,W); } public void Deconstruct(out float x, out float y, out float z, out float w) { x = X; y = Y; z = Z; w = W; } #endregion #region Operators /// /// Adds two quaternions. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the vectors. public static Quaternion operator +(Quaternion left, Quaternion right) { Quaternion result; result.X = left.X + right.X; result.Y = left.Y + right.Y; result.Z = left.Z + right.Z; result.W = left.W + right.W; return result; } /// /// Divides a by the other . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the quaternions. public static Quaternion operator /(Quaternion left, Quaternion right) { // Opt: right = Quaternion.Inverse(right); float dot = right.X * right.X + right.Y * right.Y + right.Z * right.Z + right.W * right.W; float factor = 1f / dot; right.X = -right.X * factor; right.Y = -right.Y * factor; right.Z = -right.Z * factor; right.W = right.W * factor; float x2 = (left.Y * right.Z) - (left.Z * right.Y); float y2 = (left.Z * right.X) - (left.X * right.Z); float z2 = (left.X * right.Y) - (left.Y * right.X); float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z); Quaternion result; result.X = (left.X * right.W) + (right.X * left.W) + x2; result.Y = (left.Y * right.W) + (right.Y * left.W) + y2; result.Z = (left.Z * right.W) + (right.Z * left.W) + z2; result.W = (left.W * right.W) - w2; return result; } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Quaternion left, Quaternion right) { return ((left.X == right.X) && (left.Y == right.Y) && (left.Z == right.Z) && (left.W == right.W)); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Quaternion left, Quaternion right) { if ((left.X == right.X) && (left.Y == right.Y) && (left.Z == right.Z)) { return (left.W != right.W); } return true; } /// /// Multiplies two quaternions. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the quaternions multiplication. public static Quaternion operator *(Quaternion left, Quaternion right) { float x2 = (left.Y * right.Z) - (left.Z * right.Y); float y2 = (left.Z * right.X) - (left.X * right.Z); float z2 = (left.X * right.Y) - (left.Y * right.X); float w2 = (left.X * right.X) + (left.Y * right.Y) + (left.Z * right.Z); Quaternion result; result.X = (left.X * right.W) + (right.X * left.W) + x2; result.Y = (left.Y * right.W) + (right.Y * left.W) + y2; result.Z = (left.Z * right.W) + (right.Z * left.W) + z2; result.W = (left.W * right.W) - w2; return result; } /// /// Multiplies the components of quaternion by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the quaternion multiplication with a scalar. public static Quaternion operator *(Quaternion left, float right) { Quaternion result; result.X = left.X * right; result.Y = left.Y * right; result.Z = left.Z * right; result.W = left.W * right; return result; } /// /// Subtracts a from a . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the quaternion subtraction. public static Quaternion operator -(Quaternion left, Quaternion right) { Quaternion result; result.X = left.X - right.X; result.Y = left.Y - right.Y; result.Z = left.Z - right.Z; result.W = left.W - right.W; return result; } /// /// Flips the sign of the all the quaternion components. /// /// Source on the right of the sub sign. /// The result of the quaternion negation. public static Quaternion operator -(Quaternion value) { Quaternion quaternion2; quaternion2.X = -value.X; quaternion2.Y = -value.Y; quaternion2.Z = -value.Z; quaternion2.W = -value.W; return quaternion2; } #if NET8_0_OR_GREATER public static explicit operator Quaternion(SysNumerics.Quaternion value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Quaternion(Quaternion value) { return Unsafe.BitCast(value); } #endif #endregion } } ================================================ FILE: src/Xna.Framework/Ray.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework { /// /// Represents a ray with an origin and a direction in 3D space. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Ray : IEquatable { #region Public Fields /// /// The direction of this . This vector is assumed to be normalized. /// [DataMember] public Vector3 Direction; /// /// The origin of this . /// [DataMember] public Vector3 Position; #endregion #region Public Constructors /// /// Create a . /// /// The origin of the . /// The direction of the . This vector is assumed to be normalized. public Ray(Vector3 position, Vector3 direction) { this.Position = position; this.Direction = direction; } #endregion #region Public Methods /// /// Check if the specified is equal to this . /// /// The to test for equality with this . /// /// true if the specified is equal to this , /// false if it is not. /// public override bool Equals(object obj) { return (obj is Ray) && this.Equals((Ray)obj); } /// /// Check if the specified is equal to this . /// /// The to test for equality with this . /// /// true if the specified is equal to this , /// false if it is not. /// public bool Equals(Ray other) { return this.Position.Equals(other.Position) && this.Direction.Equals(other.Direction); } /// /// Get a hash code for this . /// /// A hash code for this . public override int GetHashCode() { return Position.GetHashCode() ^ Direction.GetHashCode(); } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public float? Intersects(BoundingBox box) { float? result; IntersectsHelper.BoundingBoxIntersectsRay(ref box, ref this, out result); return result; } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public void Intersects(ref BoundingBox box, out float? result) { IntersectsHelper.BoundingBoxIntersectsRay(ref box, ref this, out result); } public float? Intersects(BoundingFrustum frustum) { if (frustum == null) throw new ArgumentNullException("frustum"); float? result; IntersectsHelper.BoundingFrustumIntersectsRay(frustum, ref this, out result); return result; } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public float? Intersects(BoundingSphere sphere) { float? result; IntersectsHelper.BoundingSphereIntersectsRay(ref sphere, ref this, out result); return result; } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public float? Intersects(Plane plane) { float? result; IntersectsHelper.PlaneIntersectsRay(ref plane, ref this, out result); return result; } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public void Intersects(ref Plane plane, out float? result) { IntersectsHelper.PlaneIntersectsRay(ref plane, ref this, out result); } /// /// Check if this intersects the specified . /// /// The to test for intersection. /// /// The distance along the ray of the intersection or null if this /// does not intersect the . /// public void Intersects(ref BoundingSphere sphere, out float? result) { IntersectsHelper.BoundingSphereIntersectsRay(ref sphere, ref this, out result); } /// /// Check if two rays are not equal. /// /// A ray to check for inequality. /// A ray to check for inequality. /// true if the two rays are not equal, false if they are. public static bool operator !=(Ray left, Ray right) { return !left.Equals(right); } /// /// Check if two rays are equal. /// /// A ray to check for equality. /// A ray to check for equality. /// true if the two rays are equals, false if they are not. public static bool operator ==(Ray left, Ray right) { return left.Equals(right); } internal string DebugDisplayString { get { return string.Concat( "Pos( ", this.Position.DebugDisplayString, " ) \r\n", "Dir( ", this.Direction.DebugDisplayString, " )" ); } } /// /// Get a representation of this . /// /// A representation of this . public override string ToString() { return "{{Position:" + Position.ToString() + " Direction:" + Direction.ToString() + "}}"; } /// /// Deconstruction method for . /// /// Receives the start position of the ray. /// Receives the direction of the ray. public void Deconstruct(out Vector3 position, out Vector3 direction) { position = Position; direction = Direction; } #endregion } } ================================================ FILE: src/Xna.Framework/Rectangle.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; using System.Diagnostics; namespace Microsoft.Xna.Framework { /// /// Describes a 2D-rectangle. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] public struct Rectangle : IEquatable { #region Private Fields private static Rectangle emptyRectangle = new Rectangle(); #endregion #region Public Fields /// /// The x coordinate of the top-left corner of this . /// [DataMember] public int X; /// /// The y coordinate of the top-left corner of this . /// [DataMember] public int Y; /// /// The width of this . /// [DataMember] public int Width; /// /// The height of this . /// [DataMember] public int Height; #endregion #region Public Properties /// /// Returns a with X=0, Y=0, Width=0, Height=0. /// public static Rectangle Empty { get { return emptyRectangle; } } /// /// Returns the x coordinate of the left edge of this . /// public int Left { get { return this.X; } } /// /// Returns the x coordinate of the right edge of this . /// public int Right { get { return (this.X + this.Width); } } /// /// Returns the y coordinate of the top edge of this . /// public int Top { get { return this.Y; } } /// /// Returns the y coordinate of the bottom edge of this . /// public int Bottom { get { return (this.Y + this.Height); } } /// /// Whether or not this has a and /// of 0, and a of (0, 0). /// public bool IsEmpty { get { return ((this.Width == 0) && (this.Height == 0) && (this.X == 0) && (this.Y == 0)); } } /// /// The top-left coordinates of this . /// public Point Location { get { return new Point(this.X, this.Y); } set { X = value.X; Y = value.Y; } } /// /// The width-height coordinates of this . /// public Point Size { get { return new Point(this.Width,this.Height); } set { Width = value.X; Height = value.Y; } } /// /// A located in the center of this . /// /// /// If or is an odd number, /// the center point will be rounded down. /// public Point Center { get { return new Point(this.X + (this.Width / 2), this.Y + (this.Height / 2)); } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( this.X, " ", this.Y, " ", this.Width, " ", this.Height ); } } #endregion #region Constructors /// /// Creates a new instance of struct, with the specified /// position, width, and height. /// /// The x coordinate of the top-left corner of the created . /// The y coordinate of the top-left corner of the created . /// The width of the created . /// The height of the created . public Rectangle(int x, int y, int width, int height) { this.X = x; this.Y = y; this.Width = width; this.Height = height; } /// /// Creates a new instance of struct, with the specified /// location and size. /// /// The x and y coordinates of the top-left corner of the created . /// The width and height of the created . public Rectangle(Point location,Point size) { this.X = location.X; this.Y = location.Y; this.Width = size.X; this.Height = size.Y; } #endregion #region Operators /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Rectangle left, Rectangle right) { return ((left.X == right.X) && (left.Y == right.Y) && (left.Width == right.Width) && (left.Height == right.Height)); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Rectangle left, Rectangle right) { return !(left == right); } #endregion #region Public Methods /// /// Gets whether or not the provided coordinates lie within the bounds of this . /// /// The x coordinate of the point to check for containment. /// The y coordinate of the point to check for containment. /// true if the provided coordinates lie inside this ; false otherwise. public bool Contains(int x, int y) { return ((this.X <= x) && (x < (this.X + this.Width)) && (this.Y <= y) && (y < (this.Y + this.Height))); } /// /// Gets whether or not the provided coordinates lie within the bounds of this . /// /// The x coordinate of the point to check for containment. /// The y coordinate of the point to check for containment. /// true if the provided coordinates lie inside this ; false otherwise. public bool Contains(float x, float y) { return ((this.X <= x) && (x < (this.X + this.Width)) && (this.Y <= y)) && (y < (this.Y + this.Height)); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The coordinates to check for inclusion in this . /// true if the provided lies inside this ; false otherwise. public bool Contains(Point value) { return ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height))); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The coordinates to check for inclusion in this . /// true if the provided lies inside this ; false otherwise. As an output parameter. public void Contains(ref Point value, out bool result) { result = ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height))); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The coordinates to check for inclusion in this . /// true if the provided lies inside this ; false otherwise. public bool Contains(Vector2 value) { return ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y)) && (value.Y < (this.Y + this.Height)); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The coordinates to check for inclusion in this . /// true if the provided lies inside this ; false otherwise. As an output parameter. public void Contains(ref Vector2 value, out bool result) { result = ((this.X <= value.X) && (value.X < (this.X + this.Width)) && (this.Y <= value.Y) && (value.Y < (this.Y + this.Height))); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The to check for inclusion in this . /// true if the provided 's bounds lie entirely inside this ; false otherwise. public bool Contains(Rectangle value) { return ((this.X <= value.X) && ((value.X + value.Width) <= (this.X + this.Width)) && (this.Y <= value.Y) && ((value.Y + value.Height) <= (this.Y + this.Height))); } /// /// Gets whether or not the provided lies within the bounds of this . /// /// The to check for inclusion in this . /// true if the provided 's bounds lie entirely inside this ; false otherwise. As an output parameter. public void Contains(ref Rectangle value,out bool result) { result = ((this.X <= value.X) && ((value.X + value.Width) <= (this.X + this.Width)) && (this.Y <= value.Y) && ((value.Y + value.Height) <= (this.Y + this.Height))); } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { return (obj is Rectangle) && this == ((Rectangle)obj); } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Rectangle other) { return this == other; } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { unchecked { var hash = 17; hash = hash * 23 + X.GetHashCode(); hash = hash * 23 + Y.GetHashCode(); hash = hash * 23 + Width.GetHashCode(); hash = hash * 23 + Height.GetHashCode(); return hash; } } /// /// Adjusts the edges of this by specified horizontal and vertical amounts. /// /// Value to adjust the left and right edges. /// Value to adjust the top and bottom edges. public void Inflate(int horizontalAmount, int verticalAmount) { X -= horizontalAmount; Y -= verticalAmount; Width += horizontalAmount * 2; Height += verticalAmount * 2; } /// /// Adjusts the edges of this by specified horizontal and vertical amounts. /// /// Value to adjust the left and right edges. /// Value to adjust the top and bottom edges. public void Inflate(float horizontalAmount, float verticalAmount) { X -= (int)horizontalAmount; Y -= (int)verticalAmount; Width += (int)horizontalAmount * 2; Height += (int)verticalAmount * 2; } /// /// Gets whether or not the other intersects with this rectangle. /// /// The other rectangle for testing. /// true if other intersects with this rectangle; false otherwise. public bool Intersects(Rectangle value) { return value.Left < Right && Left < value.Right && value.Top < Bottom && Top < value.Bottom; } /// /// Gets whether or not the other intersects with this rectangle. /// /// The other rectangle for testing. /// true if other intersects with this rectangle; false otherwise. As an output parameter. public void Intersects(ref Rectangle value, out bool result) { result = value.Left < Right && Left < value.Right && value.Top < Bottom && Top < value.Bottom; } /// /// Creates a new that contains overlapping region of two other rectangles. /// /// The first . /// The second . /// Overlapping region of the two rectangles. public static Rectangle Intersect(Rectangle value1, Rectangle value2) { Rectangle rectangle; Intersect(ref value1, ref value2, out rectangle); return rectangle; } /// /// Creates a new that contains overlapping region of two other rectangles. /// /// The first . /// The second . /// Overlapping region of the two rectangles as an output parameter. public static void Intersect(ref Rectangle value1, ref Rectangle value2, out Rectangle result) { if (value1.Intersects(value2)) { int right_side = Math.Min(value1.X + value1.Width, value2.X + value2.Width); int left_side = Math.Max(value1.X, value2.X); int top_side = Math.Max(value1.Y, value2.Y); int bottom_side = Math.Min(value1.Y + value1.Height, value2.Y + value2.Height); result = new Rectangle(left_side, top_side, right_side - left_side, bottom_side - top_side); } else { result = new Rectangle(0, 0, 0, 0); } } /// /// Changes the of this . /// /// The x coordinate to add to this . /// The y coordinate to add to this . public void Offset(int offsetX, int offsetY) { X += offsetX; Y += offsetY; } /// /// Changes the of this . /// /// The x coordinate to add to this . /// The y coordinate to add to this . public void Offset(float offsetX, float offsetY) { X += (int)offsetX; Y += (int)offsetY; } /// /// Changes the of this . /// /// The x and y components to add to this . public void Offset(Point amount) { X += amount.X; Y += amount.Y; } /// /// Changes the of this . /// /// The x and y components to add to this . public void Offset(Vector2 amount) { X += (int)amount.X; Y += (int)amount.Y; } /// /// Returns a representation of this in the format: /// {X:[] Y:[] Width:[] Height:[]} /// /// representation of this . public override string ToString() { return "{X:" + X + " Y:" + Y + " Width:" + Width + " Height:" + Height + "}"; } /// /// Creates a new that completely contains two other rectangles. /// /// The first . /// The second . /// The union of the two rectangles. public static Rectangle Union(Rectangle value1, Rectangle value2) { int x = Math.Min(value1.X, value2.X); int y = Math.Min(value1.Y, value2.Y); return new Rectangle(x, y, Math.Max(value1.Right, value2.Right) - x, Math.Max(value1.Bottom, value2.Bottom) - y); } /// /// Creates a new that completely contains two other rectangles. /// /// The first . /// The second . /// The union of the two rectangles as an output parameter. public static void Union(ref Rectangle value1, ref Rectangle value2, out Rectangle result) { result.X = Math.Min(value1.X, value2.X); result.Y = Math.Min(value1.Y, value2.Y); result.Width = Math.Max(value1.Right, value2.Right) - result.X; result.Height = Math.Max(value1.Bottom, value2.Bottom) - result.Y; } /// /// Deconstruction method for . /// /// /// /// /// public void Deconstruct(out int x, out int y, out int width, out int height) { x = X; y = Y; width = Width; height = Height; } #endregion } } ================================================ FILE: src/Xna.Framework/Vector2.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// Describes a 2D-vector. /// [DebuggerDisplay("{DebugDisplayString,nq}")] [DataContract] [TypeConverter("Microsoft.Xna.Framework.Design.Vector2Converter, Xna.Framework.Design")] public struct Vector2 : IEquatable { #region Private Fields private static readonly Vector2 zeroVector = new Vector2(0f, 0f); private static readonly Vector2 unitVector = new Vector2(1f, 1f); private static readonly Vector2 unitXVector = new Vector2(1f, 0f); private static readonly Vector2 unitYVector = new Vector2(0f, 1f); #endregion #region Public Fields /// /// The x coordinate of this . /// [DataMember] public float X; /// /// The y coordinate of this . /// [DataMember] public float Y; #endregion #region Properties /// /// Returns a with components 0, 0. /// public static Vector2 Zero { get { return zeroVector; } } /// /// Returns a with components 1, 1. /// public static Vector2 One { get { return unitVector; } } /// /// Returns a with components 1, 0. /// public static Vector2 UnitX { get { return unitXVector; } } /// /// Returns a with components 0, 1. /// public static Vector2 UnitY { get { return unitYVector; } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( this.X.ToString(), " ", this.Y.ToString() ); } } #endregion #region Constructors /// /// Constructs a 2d vector with X and Y from two values. /// /// The x coordinate in 2d-space. /// The y coordinate in 2d-space. public Vector2(float x, float y) { this.X = x; this.Y = y; } /// /// Constructs a 2d vector with X and Y set to the same value. /// /// The x and y coordinates in 2d-space. public Vector2(float value) { this.X = value; this.Y = value; } #endregion #region Operators /// /// Inverts values in the specified . /// /// Source on the right of the sub sign. /// Result of the inversion. public static Vector2 operator -(Vector2 value) { value.X = -value.X; value.Y = -value.Y; return value; } /// /// Adds two vectors. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the vectors. public static Vector2 operator +(Vector2 left, Vector2 right) { left.X += right.X; left.Y += right.Y; return left; } /// /// Subtracts a from a . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the vector subtraction. public static Vector2 operator -(Vector2 left, Vector2 right) { left.X -= right.X; left.Y -= right.Y; return left; } /// /// Multiplies the components of two vectors by each other. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication. public static Vector2 operator *(Vector2 left, Vector2 right) { left.X *= right.X; left.Y *= right.Y; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector2 operator *(Vector2 left, float right) { left.X *= right; left.Y *= right; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Scalar value on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector2 operator *(float left, Vector2 right) { right.X *= left; right.Y *= left; return right; } /// /// Divides the components of a by the components of another . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the vectors. public static Vector2 operator /(Vector2 left, Vector2 right) { left.X /= right.X; left.Y /= right.Y; return left; } /// /// Divides the components of a by a scalar. /// /// Source on the left of the div sign. /// Divisor scalar on the right of the div sign. /// The result of dividing a vector by a scalar. public static Vector2 operator /(Vector2 left, float right) { float factor = 1 / right; left.X *= factor; left.Y *= factor; return left; } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Vector2 left, Vector2 right) { return left.X == right.X && left.Y == right.Y; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Vector2 left, Vector2 right) { return left.X != right.X || left.Y != right.Y; } #if NET8_0_OR_GREATER public static explicit operator Vector2(SysNumerics.Vector2 value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Vector2(Vector2 value) { return Unsafe.BitCast(value); } #endif #endregion #region Public Methods /// /// Performs vector addition on and . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static Vector2 Add(Vector2 left, Vector2 right) { left.X += right.X; left.Y += right.Y; return left; } /// /// Performs vector addition on and /// , storing the result of the /// addition in . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static void Add(ref Vector2 left, ref Vector2 right, out Vector2 result) { result.X = left.X + right.X; result.Y = left.Y + right.Y; } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. /// /// The first vector of 2d-triangle. /// The second vector of 2d-triangle. /// The third vector of 2d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. /// The cartesian translation of barycentric coordinates. public static Vector2 Barycentric(Vector2 value1, Vector2 value2, Vector2 value3, float amount1, float amount2) { return new Vector2( MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2), MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2)); } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. /// /// The first vector of 2d-triangle. /// The second vector of 2d-triangle. /// The third vector of 2d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. /// The cartesian translation of barycentric coordinates as an output parameter. public static void Barycentric(ref Vector2 value1, ref Vector2 value2, ref Vector2 value3, float amount1, float amount2, out Vector2 result) { result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2); result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation. public static Vector2 CatmullRom(Vector2 value1, Vector2 value2, Vector2 value3, Vector2 value4, float amount) { return new Vector2( MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount), MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount)); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation as an output parameter. public static void CatmullRom(ref Vector2 value1, ref Vector2 value2, ref Vector2 value3, ref Vector2 value4, float amount, out Vector2 result) { result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount); result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount); } /// /// Round the members of this towards positive infinity. /// public void Ceiling() { X = (float)Math.Ceiling(X); Y = (float)Math.Ceiling(Y); } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static Vector2 Ceiling(Vector2 value) { value.X = (float)Math.Ceiling(value.X); value.Y = (float)Math.Ceiling(value.Y); return value; } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static void Ceiling(ref Vector2 value, out Vector2 result) { result.X = (float)Math.Ceiling(value.X); result.Y = (float)Math.Ceiling(value.Y); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value. public static Vector2 Clamp(Vector2 value1, Vector2 min, Vector2 max) { return new Vector2( MathHelper.Clamp(value1.X, min.X, max.X), MathHelper.Clamp(value1.Y, min.Y, max.Y)); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value as an output parameter. public static void Clamp(ref Vector2 value1, ref Vector2 min, ref Vector2 max, out Vector2 result) { result.X = MathHelper.Clamp(value1.X, min.X, max.X); result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y); } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors. public static float Distance(Vector2 value1, Vector2 value2) { float dX = value1.X - value2.X; float dY = value1.Y - value2.Y; return (float)Math.Sqrt(dX * dX + dY * dY); } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors as an output parameter. public static void Distance(ref Vector2 value1, ref Vector2 value2, out float result) { float v1 = value1.X - value2.X, v2 = value1.Y - value2.Y; result = (float)Math.Sqrt((v1 * v1) + (v2 * v2)); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors. public static float DistanceSquared(Vector2 value1, Vector2 value2) { float dX = value1.X - value2.X; float dY = value1.Y - value2.Y; return (dX * dX + dY * dY); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors as an output parameter. public static void DistanceSquared(ref Vector2 value1, ref Vector2 value2, out float result) { float v1 = value1.X - value2.X, v2 = value1.Y - value2.Y; result = (v1 * v1) + (v2 * v2); } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors. public static Vector2 Divide(Vector2 left, Vector2 right) { left.X /= right.X; left.Y /= right.Y; return left; } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors as an output parameter. public static void Divide(ref Vector2 left, ref Vector2 right, out Vector2 result) { result.X = left.X / right.X; result.Y = left.Y / right.Y; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar. public static Vector2 Divide(Vector2 left, float right) { float factor = 1 / right; left.X *= factor; left.Y *= factor; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar as an output parameter. public static void Divide(ref Vector2 left, float right, out Vector2 result) { float factor = 1 / right; result.X = left.X * factor; result.Y = left.Y * factor; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors. public static float Dot(Vector2 left, Vector2 right) { return left.X * right.X + left.Y * right.Y; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors as an output parameter. public static void Dot(ref Vector2 left, ref Vector2 right, out float result) { result = left.X * right.X + left.Y * right.Y; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (obj is Vector2) { return Equals((Vector2)obj); } return false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Vector2 other) { return (X == other.X) && (Y == other.Y); } /// /// Round the members of this towards negative infinity. /// public void Floor() { X = (float)Math.Floor(X); Y = (float)Math.Floor(Y); } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static Vector2 Floor(Vector2 value) { value.X = (float)Math.Floor(value.X); value.Y = (float)Math.Floor(value.Y); return value; } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static void Floor(ref Vector2 value, out Vector2 result) { result.X = (float)Math.Floor(value.X); result.Y = (float)Math.Floor(value.Y); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { unchecked { return (X.GetHashCode() * 397) ^ Y.GetHashCode(); } } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector. public static Vector2 Hermite(Vector2 value1, Vector2 tangent1, Vector2 value2, Vector2 tangent2, float amount) { return new Vector2(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount), MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount)); } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector as an output parameter. public static void Hermite(ref Vector2 value1, ref Vector2 tangent1, ref Vector2 value2, ref Vector2 tangent2, float amount, out Vector2 result) { result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount); result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount); } /// /// Returns the length of this . /// /// The length of this . public float Length() { return (float)Math.Sqrt((X * X) + (Y * Y)); } /// /// Returns the squared length of this . /// /// The squared length of this . public float LengthSquared() { return (X * X) + (Y * Y); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector2 Lerp(Vector2 start, Vector2 end, float amount) { Vector2 result; result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void Lerp(ref Vector2 start, ref Vector2 end, float amount, out Vector2 result) { result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector2 LerpPrecise(Vector2 start, Vector2 end, float amount) { Vector2 result; result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void LerpPrecise(ref Vector2 start, ref Vector2 end, float amount, out Vector2 result) { result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors. public static Vector2 Max(Vector2 value1, Vector2 value2) { return new Vector2(value1.X > value2.X ? value1.X : value2.X, value1.Y > value2.Y ? value1.Y : value2.Y); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors as an output parameter. public static void Max(ref Vector2 value1, ref Vector2 value2, out Vector2 result) { result.X = value1.X > value2.X ? value1.X : value2.X; result.Y = value1.Y > value2.Y ? value1.Y : value2.Y; } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors. public static Vector2 Min(Vector2 value1, Vector2 value2) { return new Vector2(value1.X < value2.X ? value1.X : value2.X, value1.Y < value2.Y ? value1.Y : value2.Y); } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors as an output parameter. public static void Min(ref Vector2 value1, ref Vector2 value2, out Vector2 result) { result.X = value1.X < value2.X ? value1.X : value2.X; result.Y = value1.Y < value2.Y ? value1.Y : value2.Y; } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication. public static Vector2 Multiply(Vector2 left, Vector2 right) { left.X *= right.X; left.Y *= right.Y; return left; } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication as an output parameter. public static void Multiply(ref Vector2 left, ref Vector2 right, out Vector2 result) { result.X = left.X * right.X; result.Y = left.Y * right.Y; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the vector multiplication with a scalar. public static Vector2 Multiply(Vector2 left, float right) { left.X *= right; left.Y *= right; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the multiplication with a scalar as an output parameter. public static void Multiply(ref Vector2 left, float right, out Vector2 result) { result.X = left.X * right; result.Y = left.Y * right; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion. public static Vector2 Negate(Vector2 value) { value.X = -value.X; value.Y = -value.Y; return value; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion as an output parameter. public static void Negate(ref Vector2 value, out Vector2 result) { result.X = -value.X; result.Y = -value.Y; } /// /// Turns this to a unit vector with the same direction. /// public void Normalize() { float val = 1.0f / (float)Math.Sqrt((X * X) + (Y * Y)); X *= val; Y *= val; } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector. public static Vector2 Normalize(Vector2 value) { float val = 1.0f / (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y)); value.X *= val; value.Y *= val; return value; } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector as an output parameter. public static void Normalize(ref Vector2 value, out Vector2 result) { float val = 1.0f / (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y)); result.X = value.X * val; result.Y = value.Y * val; } /// /// Creates a new that contains reflect vector of the given vector and normal. /// /// Source . /// Reflection normal. /// Reflected vector. public static Vector2 Reflect(Vector2 vector, Vector2 normal) { Vector2 result; float val = 2.0f * ((vector.X * normal.X) + (vector.Y * normal.Y)); result.X = vector.X - (normal.X * val); result.Y = vector.Y - (normal.Y * val); return result; } /// /// Creates a new that contains reflect vector of the given vector and normal. /// /// Source . /// Reflection normal. /// Reflected vector as an output parameter. public static void Reflect(ref Vector2 vector, ref Vector2 normal, out Vector2 result) { float val = 2.0f * ((vector.X * normal.X) + (vector.Y * normal.Y)); result.X = vector.X - (normal.X * val); result.Y = vector.Y - (normal.Y * val); } /// /// Round the members of this to the nearest integer value. /// public void Round() { X = (float)Math.Round(X); Y = (float)Math.Round(Y); } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static Vector2 Round(Vector2 value) { value.X = (float)Math.Round(value.X); value.Y = (float)Math.Round(value.Y); return value; } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static void Round(ref Vector2 value, out Vector2 result) { result.X = (float)Math.Round(value.X); result.Y = (float)Math.Round(value.Y); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors. public static Vector2 SmoothStep(Vector2 value1, Vector2 value2, float amount) { return new Vector2( MathHelper.SmoothStep(value1.X, value2.X, amount), MathHelper.SmoothStep(value1.Y, value2.Y, amount)); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors as an output parameter. public static void SmoothStep(ref Vector2 value1, ref Vector2 value2, float amount, out Vector2 result) { result.X = MathHelper.SmoothStep(value1.X, value2.X, amount); result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount); } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction. public static Vector2 Subtract(Vector2 left, Vector2 right) { left.X -= right.X; left.Y -= right.Y; return left; } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction as an output parameter. public static void Subtract(ref Vector2 left, ref Vector2 right, out Vector2 result) { result.X = left.X - right.X; result.Y = left.Y - right.Y; } /// /// Returns a representation of this in the format: /// {X:[] Y:[]} /// /// A representation of this . public override string ToString() { return String.Format("{{X: {0}, Y: {1} }}", X, Y); } /// /// Gets a representation for this object. /// /// A representation for this object. public Point ToPoint() { return new Point((int) X,(int) Y); } /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The transformation . /// Transformed . public static Vector2 Transform(Vector2 position, Matrix matrix) { return new Vector2((position.X * matrix.M11) + (position.Y * matrix.M21) + matrix.M41, (position.X * matrix.M12) + (position.Y * matrix.M22) + matrix.M42); } /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The transformation . /// Transformed as an output parameter. public static void Transform(ref Vector2 position, ref Matrix matrix, out Vector2 result) { var x = (position.X * matrix.M11) + (position.Y * matrix.M21) + matrix.M41; var y = (position.X * matrix.M12) + (position.Y * matrix.M22) + matrix.M42; result.X = x; result.Y = y; } /// /// Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. /// /// Source . /// The which contains rotation transformation. /// Transformed . public static Vector2 Transform(Vector2 value, Quaternion rotation) { Transform(ref value, ref rotation, out value); return value; } /// /// Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. /// /// Source . /// The which contains rotation transformation. /// Transformed as an output parameter. public static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector2 result) { var rot1 = new Vector3(rotation.X + rotation.X, rotation.Y + rotation.Y, rotation.Z + rotation.Z); var rot2 = new Vector3(rotation.X, rotation.X, rotation.W); var rot3 = new Vector3(1, rotation.Y, rotation.Z); var rot4 = rot1*rot2; var rot5 = rot1*rot3; var v = new Vector2(); v.X = (float)((double)value.X * (1.0 - (double)rot5.Y - (double)rot5.Z) + (double)value.Y * ((double)rot4.Y - (double)rot4.Z)); v.Y = (float)((double)value.X * ((double)rot4.Y + (double)rot4.Z) + (double)value.Y * (1.0 - (double)rot4.X - (double)rot5.Z)); result.X = v.X; result.Y = v.Y; } /// /// Creates a new that contains a transformation of 2d-vector by the specified number. /// /// Source . /// The transformation number which contains rotation and magnitude transformation. /// Transformed . public static Vector2 Transform(Vector2 value, Complex complex) { return new Vector2(value.X * complex.R - value.Y * complex.i, value.Y * complex.R + value.X * complex.i); } /// /// Creates a new that contains a transformation of 2d-vector by the specified number. /// /// Source . /// The transformation which contains rotation and magnitude transformation. /// Transformed as an output parameter. public static void Transform(ref Vector2 value, ref Complex complex, out Vector2 result) { result = new Vector2(value.X * complex.R - value.Y * complex.i, value.Y * complex.R + value.X * complex.i); } /// /// Creates a new that contains a transformation of 2d-vector by the specified number. /// /// Source . /// The transformation which contains rotation and translation transformation. /// Transformed . public static Vector2 Transform(Vector2 value, Pose2 pose) { Vector2 result; Vector2.Transform(ref value, ref pose.Orientation, out result); Vector2.Add(ref result, ref pose.Translation, out result); return result; } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation . /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform ( Vector2[] sourceArray, int sourceIndex, ref Matrix matrix, Vector2[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (int x = 0; x < length; x++) { Vector2.Transform(ref sourceArray[sourceIndex + x], ref matrix, out destinationArray[destinationIndex + x]); } } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The which contains rotation transformation. /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform ( Vector2[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector2[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (int x = 0; x < length; x++) { Vector2.Transform(ref sourceArray[sourceIndex + x], ref rotation, out destinationArray[destinationIndex + x]); } } /// /// Apply transformation on vectors within array of by the specified number and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation number. /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform ( Vector2[] sourceArray, int sourceIndex, ref Complex complex, Vector2[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (int x = 0; x < length; x++) { Vector2.Transform(ref sourceArray[sourceIndex + x], ref complex, out destinationArray[destinationIndex + x]); } } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The transformation . /// Destination array. public static void Transform(Vector2[] sourceArray, ref Matrix matrix, Vector2[] destinationArray) { Vector2.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length); } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The which contains rotation transformation. /// Destination array. public static void Transform(Vector2[] sourceArray, ref Quaternion rotation, Vector2[] destinationArray) { Vector2.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length); } /// /// Creates a new that contains a transformation of the specified normal by the specified . /// /// Source which represents a normal vector. /// The transformation . /// Transformed normal. public static Vector2 TransformNormal(Vector2 normal, Matrix matrix) { return new Vector2((normal.X * matrix.M11) + (normal.Y * matrix.M21),(normal.X * matrix.M12) + (normal.Y * matrix.M22)); } /// /// Apply transformation on all vectors within array of by the specified number and places the results in an another array. /// /// Source array. /// The number which contains rotation and magnitude transformation. /// Destination array. public static void Transform(Vector2[] sourceArray, ref Complex complex, Vector2[] destinationArray) { Vector2.Transform(sourceArray, 0, ref complex, destinationArray, 0, sourceArray.Length); } /// /// Creates a new that contains a transformation of the specified normal by the specified . /// /// Source which represents a normal vector. /// The transformation . /// Transformed normal as an output parameter. public static void TransformNormal(ref Vector2 normal, ref Matrix matrix, out Vector2 result) { var x = (normal.X * matrix.M11) + (normal.Y * matrix.M21); var y = (normal.X * matrix.M12) + (normal.Y * matrix.M22); result.X = x; result.Y = y; } /// /// Apply transformation on normals within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation . /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of normals to be transformed. public static void TransformNormal ( Vector2[] sourceArray, int sourceIndex, ref Matrix matrix, Vector2[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (int i = 0; i < length; i++) { Vector2.TransformNormal(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on all normals within array of by the specified and places the results in an another array. /// /// Source array. /// The transformation . /// Destination array. public static void TransformNormal(Vector2[] sourceArray, ref Matrix matrix,Vector2[] destinationArray) { Vector2.TransformNormal(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length); } /// /// Deconstruction method for . /// /// /// public void Deconstruct(out float x, out float y) { x = X; y = Y; } #endregion } } ================================================ FILE: src/Xna.Framework/Vector3.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// Describes a 3D-vector. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] [TypeConverter("Microsoft.Xna.Framework.Design.Vector3Converter, Xna.Framework.Design")] public struct Vector3 : IEquatable { #region Private Fields private static readonly Vector3 zero = new Vector3(0f, 0f, 0f); private static readonly Vector3 one = new Vector3(1f, 1f, 1f); private static readonly Vector3 unitX = new Vector3(1f, 0f, 0f); private static readonly Vector3 unitY = new Vector3(0f, 1f, 0f); private static readonly Vector3 unitZ = new Vector3(0f, 0f, 1f); private static readonly Vector3 up = new Vector3(0f, 1f, 0f); private static readonly Vector3 down = new Vector3(0f, -1f, 0f); private static readonly Vector3 right = new Vector3(1f, 0f, 0f); private static readonly Vector3 left = new Vector3(-1f, 0f, 0f); private static readonly Vector3 forward = new Vector3(0f, 0f, -1f); private static readonly Vector3 backward = new Vector3(0f, 0f, 1f); #endregion #region Public Fields /// /// The x coordinate of this . /// [DataMember] public float X; /// /// The y coordinate of this . /// [DataMember] public float Y; /// /// The z coordinate of this . /// [DataMember] public float Z; #endregion #region Public Properties /// /// Returns a with components 0, 0, 0. /// public static Vector3 Zero { get { return zero; } } /// /// Returns a with components 1, 1, 1. /// public static Vector3 One { get { return one; } } /// /// Returns a with components 1, 0, 0. /// public static Vector3 UnitX { get { return unitX; } } /// /// Returns a with components 0, 1, 0. /// public static Vector3 UnitY { get { return unitY; } } /// /// Returns a with components 0, 0, 1. /// public static Vector3 UnitZ { get { return unitZ; } } /// /// Returns a with components 0, 1, 0. /// public static Vector3 Up { get { return up; } } /// /// Returns a with components 0, -1, 0. /// public static Vector3 Down { get { return down; } } /// /// Returns a with components 1, 0, 0. /// public static Vector3 Right { get { return right; } } /// /// Returns a with components -1, 0, 0. /// public static Vector3 Left { get { return left; } } /// /// Returns a with components 0, 0, -1. /// public static Vector3 Forward { get { return forward; } } /// /// Returns a with components 0, 0, 1. /// public static Vector3 Backward { get { return backward; } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( this.X.ToString(), " ", this.Y.ToString(), " ", this.Z.ToString() ); } } #endregion #region Constructors /// /// Constructs a 3d vector with X, Y and Z from three values. /// /// The x coordinate in 3d-space. /// The y coordinate in 3d-space. /// The z coordinate in 3d-space. public Vector3(float x, float y, float z) { this.X = x; this.Y = y; this.Z = z; } /// /// Constructs a 3d vector with X, Y and Z set to the same value. /// /// The x, y and z coordinates in 3d-space. public Vector3(float value) { this.X = value; this.Y = value; this.Z = value; } /// /// Constructs a 3d vector with X, Y from and Z from a scalar. /// /// The x and y coordinates in 3d-space. /// The z coordinate in 3d-space. public Vector3(Vector2 value, float z) { this.X = value.X; this.Y = value.Y; this.Z = z; } #endregion #region Public Methods /// /// Performs vector addition on and . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static Vector3 Add(Vector3 left, Vector3 right) { left.X += right.X; left.Y += right.Y; left.Z += right.Z; return left; } /// /// Performs vector addition on and /// , storing the result of the /// addition in . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static void Add(ref Vector3 left, ref Vector3 right, out Vector3 result) { result.X = left.X + right.X; result.Y = left.Y + right.Y; result.Z = left.Z + right.Z; } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. /// /// The first vector of 3d-triangle. /// The second vector of 3d-triangle. /// The third vector of 3d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. /// The cartesian translation of barycentric coordinates. public static Vector3 Barycentric(Vector3 value1, Vector3 value2, Vector3 value3, float amount1, float amount2) { return new Vector3( MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2), MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2), MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2)); } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. /// /// The first vector of 3d-triangle. /// The second vector of 3d-triangle. /// The third vector of 3d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. /// The cartesian translation of barycentric coordinates as an output parameter. public static void Barycentric(ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, float amount1, float amount2, out Vector3 result) { result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2); result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2); result.Z = MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation. public static Vector3 CatmullRom(Vector3 value1, Vector3 value2, Vector3 value3, Vector3 value4, float amount) { return new Vector3( MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount), MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount), MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount)); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation as an output parameter. public static void CatmullRom(ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, ref Vector3 value4, float amount, out Vector3 result) { result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount); result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount); result.Z = MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount); } /// /// Round the members of this towards positive infinity. /// public void Ceiling() { X = (float)Math.Ceiling(X); Y = (float)Math.Ceiling(Y); Z = (float)Math.Ceiling(Z); } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static Vector3 Ceiling(Vector3 value) { value.X = (float)Math.Ceiling(value.X); value.Y = (float)Math.Ceiling(value.Y); value.Z = (float)Math.Ceiling(value.Z); return value; } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static void Ceiling(ref Vector3 value, out Vector3 result) { result.X = (float)Math.Ceiling(value.X); result.Y = (float)Math.Ceiling(value.Y); result.Z = (float)Math.Ceiling(value.Z); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value. public static Vector3 Clamp(Vector3 value1, Vector3 min, Vector3 max) { return new Vector3( MathHelper.Clamp(value1.X, min.X, max.X), MathHelper.Clamp(value1.Y, min.Y, max.Y), MathHelper.Clamp(value1.Z, min.Z, max.Z)); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value as an output parameter. public static void Clamp(ref Vector3 value1, ref Vector3 min, ref Vector3 max, out Vector3 result) { result.X = MathHelper.Clamp(value1.X, min.X, max.X); result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y); result.Z = MathHelper.Clamp(value1.Z, min.Z, max.Z); } /// /// Computes the cross product of two vectors. /// /// The first vector. /// The second vector. /// The cross product of two vectors. public static Vector3 Cross(Vector3 left, Vector3 right) { Vector3 result; result.X = (left.Y * right.Z) - (right.Y * left.Z); result.Y = -(left.X * right.Z) + (right.X * left.Z); result.Z = (left.X * right.Y) - (right.X * left.Y); return result; } /// /// Computes the cross product of two vectors. /// /// The first vector. /// The second vector. /// The cross product of two vectors as an output parameter. public static void Cross(ref Vector3 left, ref Vector3 right, out Vector3 result) { var x = (left.Y * right.Z) - (right.Y * left.Z); var y = -(left.X * right.Z) + (right.X * left.Z); var z = (left.X * right.Y) - (right.X * left.Y); result.X = x; result.Y = y; result.Z = z; } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors. public static float Distance(Vector3 value1, Vector3 value2) { float result; DistanceSquared(ref value1, ref value2, out result); return (float)Math.Sqrt(result); } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors as an output parameter. public static void Distance(ref Vector3 value1, ref Vector3 value2, out float result) { DistanceSquared(ref value1, ref value2, out result); result = (float)Math.Sqrt(result); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors. public static float DistanceSquared(Vector3 value1, Vector3 value2) { return (value1.X - value2.X) * (value1.X - value2.X) + (value1.Y - value2.Y) * (value1.Y - value2.Y) + (value1.Z - value2.Z) * (value1.Z - value2.Z); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors as an output parameter. public static void DistanceSquared(ref Vector3 value1, ref Vector3 value2, out float result) { result = (value1.X - value2.X) * (value1.X - value2.X) + (value1.Y - value2.Y) * (value1.Y - value2.Y) + (value1.Z - value2.Z) * (value1.Z - value2.Z); } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors. public static Vector3 Divide(Vector3 left, Vector3 right) { left.X /= right.X; left.Y /= right.Y; left.Z /= right.Z; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar. public static Vector3 Divide(Vector3 left, float right) { float factor = 1 / right; left.X *= factor; left.Y *= factor; left.Z *= factor; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar as an output parameter. public static void Divide(ref Vector3 left, float right, out Vector3 result) { float factor = 1 / right; result.X = left.X * factor; result.Y = left.Y * factor; result.Z = left.Z * factor; } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors as an output parameter. public static void Divide(ref Vector3 left, ref Vector3 right, out Vector3 result) { result.X = left.X / right.X; result.Y = left.Y / right.Y; result.Z = left.Z / right.Z; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors. public static float Dot(Vector3 left, Vector3 right) { return left.X * right.X + left.Y * right.Y + left.Z * right.Z; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors as an output parameter. public static void Dot(ref Vector3 left, ref Vector3 right, out float result) { result = left.X * right.X + left.Y * right.Y + left.Z * right.Z; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { if (!(obj is Vector3)) return false; var other = (Vector3)obj; return X == other.X && Y == other.Y && Z == other.Z; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Vector3 other) { return X == other.X && Y == other.Y && Z == other.Z; } /// /// Round the members of this towards negative infinity. /// public void Floor() { X = (float)Math.Floor(X); Y = (float)Math.Floor(Y); Z = (float)Math.Floor(Z); } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static Vector3 Floor(Vector3 value) { value.X = (float)Math.Floor(value.X); value.Y = (float)Math.Floor(value.Y); value.Z = (float)Math.Floor(value.Z); return value; } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static void Floor(ref Vector3 value, out Vector3 result) { result.X = (float)Math.Floor(value.X); result.Y = (float)Math.Floor(value.Y); result.Z = (float)Math.Floor(value.Z); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { unchecked { var hashCode = X.GetHashCode(); hashCode = (hashCode * 397) ^ Y.GetHashCode(); hashCode = (hashCode * 397) ^ Z.GetHashCode(); return hashCode; } } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector. public static Vector3 Hermite(Vector3 value1, Vector3 tangent1, Vector3 value2, Vector3 tangent2, float amount) { return new Vector3(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount), MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount), MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount)); } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector as an output parameter. public static void Hermite(ref Vector3 value1, ref Vector3 tangent1, ref Vector3 value2, ref Vector3 tangent2, float amount, out Vector3 result) { result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount); result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount); result.Z = MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount); } /// /// Returns the length of this . /// /// The length of this . public float Length() { return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z)); } /// /// Returns the squared length of this . /// /// The squared length of this . public float LengthSquared() { return (X * X) + (Y * Y) + (Z * Z); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector3 Lerp(Vector3 start, Vector3 end, float amount) { Vector3 result; result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); result.Z = MathHelper.Lerp(start.Z, end.Z, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void Lerp(ref Vector3 start, ref Vector3 end, float amount, out Vector3 result) { result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); result.Z = MathHelper.Lerp(start.Z, end.Z, amount); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector3 LerpPrecise(Vector3 start, Vector3 end, float amount) { Vector3 result; result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void LerpPrecise(ref Vector3 start, ref Vector3 end, float amount, out Vector3 result) { result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors. public static Vector3 Max(Vector3 value1, Vector3 value2) { return new Vector3( MathHelper.Max(value1.X, value2.X), MathHelper.Max(value1.Y, value2.Y), MathHelper.Max(value1.Z, value2.Z)); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors as an output parameter. public static void Max(ref Vector3 value1, ref Vector3 value2, out Vector3 result) { result.X = MathHelper.Max(value1.X, value2.X); result.Y = MathHelper.Max(value1.Y, value2.Y); result.Z = MathHelper.Max(value1.Z, value2.Z); } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors. public static Vector3 Min(Vector3 value1, Vector3 value2) { return new Vector3( MathHelper.Min(value1.X, value2.X), MathHelper.Min(value1.Y, value2.Y), MathHelper.Min(value1.Z, value2.Z)); } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors as an output parameter. public static void Min(ref Vector3 value1, ref Vector3 value2, out Vector3 result) { result.X = MathHelper.Min(value1.X, value2.X); result.Y = MathHelper.Min(value1.Y, value2.Y); result.Z = MathHelper.Min(value1.Z, value2.Z); } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication. public static Vector3 Multiply(Vector3 left, Vector3 right) { left.X *= right.X; left.Y *= right.Y; left.Z *= right.Z; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the vector multiplication with a scalar. public static Vector3 Multiply(Vector3 left, float right) { left.X *= right; left.Y *= right; left.Z *= right; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the multiplication with a scalar as an output parameter. public static void Multiply(ref Vector3 left, float right, out Vector3 result) { result.X = left.X * right; result.Y = left.Y * right; result.Z = left.Z * right; } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication as an output parameter. public static void Multiply(ref Vector3 left, ref Vector3 right, out Vector3 result) { result.X = left.X * right.X; result.Y = left.Y * right.Y; result.Z = left.Z * right.Z; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion. public static Vector3 Negate(Vector3 value) { value = new Vector3(-value.X, -value.Y, -value.Z); return value; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion as an output parameter. public static void Negate(ref Vector3 value, out Vector3 result) { result.X = -value.X; result.Y = -value.Y; result.Z = -value.Z; } /// /// Turns this to a unit vector with the same direction. /// public void Normalize() { float factor = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z)); factor = 1f / factor; X *= factor; Y *= factor; Z *= factor; } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector. public static Vector3 Normalize(Vector3 value) { float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z)); factor = 1f / factor; return new Vector3(value.X * factor, value.Y * factor, value.Z * factor); } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector as an output parameter. public static void Normalize(ref Vector3 value, out Vector3 result) { float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z)); factor = 1f / factor; result.X = value.X * factor; result.Y = value.Y * factor; result.Z = value.Z * factor; } /// /// Creates a new that contains reflect vector of the given vector and normal. /// /// Source . /// Reflection normal. /// Reflected vector. public static Vector3 Reflect(Vector3 vector, Vector3 normal) { // I is the original array // N is the normal of the incident plane // R = I - (2 * N * ( DotProduct[ I,N] )) Vector3 reflectedVector; // inline the dotProduct here instead of calling method float dotProduct = ((vector.X * normal.X) + (vector.Y * normal.Y)) + (vector.Z * normal.Z); reflectedVector.X = vector.X - (2.0f * normal.X) * dotProduct; reflectedVector.Y = vector.Y - (2.0f * normal.Y) * dotProduct; reflectedVector.Z = vector.Z - (2.0f * normal.Z) * dotProduct; return reflectedVector; } /// /// Creates a new that contains reflect vector of the given vector and normal. /// /// Source . /// Reflection normal. /// Reflected vector as an output parameter. public static void Reflect(ref Vector3 vector, ref Vector3 normal, out Vector3 result) { // I is the original array // N is the normal of the incident plane // R = I - (2 * N * ( DotProduct[ I,N] )) // inline the dotProduct here instead of calling method float dotProduct = ((vector.X * normal.X) + (vector.Y * normal.Y)) + (vector.Z * normal.Z); result.X = vector.X - (2.0f * normal.X) * dotProduct; result.Y = vector.Y - (2.0f * normal.Y) * dotProduct; result.Z = vector.Z - (2.0f * normal.Z) * dotProduct; } /// /// Round the members of this towards the nearest integer value. /// public void Round() { X = (float)Math.Round(X); Y = (float)Math.Round(Y); Z = (float)Math.Round(Z); } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static Vector3 Round(Vector3 value) { value.X = (float)Math.Round(value.X); value.Y = (float)Math.Round(value.Y); value.Z = (float)Math.Round(value.Z); return value; } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static void Round(ref Vector3 value, out Vector3 result) { result.X = (float)Math.Round(value.X); result.Y = (float)Math.Round(value.Y); result.Z = (float)Math.Round(value.Z); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors. public static Vector3 SmoothStep(Vector3 value1, Vector3 value2, float amount) { return new Vector3( MathHelper.SmoothStep(value1.X, value2.X, amount), MathHelper.SmoothStep(value1.Y, value2.Y, amount), MathHelper.SmoothStep(value1.Z, value2.Z, amount)); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors as an output parameter. public static void SmoothStep(ref Vector3 value1, ref Vector3 value2, float amount, out Vector3 result) { result.X = MathHelper.SmoothStep(value1.X, value2.X, amount); result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount); result.Z = MathHelper.SmoothStep(value1.Z, value2.Z, amount); } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction. public static Vector3 Subtract(Vector3 left, Vector3 right) { left.X -= right.X; left.Y -= right.Y; left.Z -= right.Z; return left; } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction as an output parameter. public static void Subtract(ref Vector3 left, ref Vector3 right, out Vector3 result) { result.X = left.X - right.X; result.Y = left.Y - right.Y; result.Z = left.Z - right.Z; } /// /// Returns a representation of this in the format: /// {X:[] Y:[] Z:[]} /// /// A representation of this . public override string ToString() { return String.Format("{{X: {0}, Y: {1}, Z: {2} }}", X, Y, Z); } #region Transform /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The transformation . /// Transformed . public static Vector3 Transform(Vector3 position, Matrix matrix) { Transform(ref position, ref matrix, out position); return position; } /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The transformation . /// Transformed as an output parameter. public static void Transform(ref Vector3 position, ref Matrix matrix, out Vector3 result) { var x = (position.X * matrix.M11) + (position.Y * matrix.M21) + (position.Z * matrix.M31) + matrix.M41; var y = (position.X * matrix.M12) + (position.Y * matrix.M22) + (position.Z * matrix.M32) + matrix.M42; var z = (position.X * matrix.M13) + (position.Y * matrix.M23) + (position.Z * matrix.M33) + matrix.M43; result.X = x; result.Y = y; result.Z = z; } /// /// Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. /// /// Source . /// The which contains rotation transformation. /// Transformed . public static Vector3 Transform(Vector3 value, Quaternion rotation) { Vector3 result; Transform(ref value, ref rotation, out result); return result; } /// /// Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. /// /// Source . /// The which contains rotation transformation. /// Transformed as an output parameter. public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector3 result) { float x = 2 * (rotation.Y * value.Z - rotation.Z * value.Y); float y = 2 * (rotation.Z * value.X - rotation.X * value.Z); float z = 2 * (rotation.X * value.Y - rotation.Y * value.X); result.X = value.X + x * rotation.W + (rotation.Y * z - rotation.Z * y); result.Y = value.Y + y * rotation.W + (rotation.Z * x - rotation.X * z); result.Z = value.Z + z * rotation.W + (rotation.X * y - rotation.Y * x); } /// /// Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation and translation. /// /// Source . /// The which contains rotation and translation transformation. /// Transformed . public static Vector3 Transform(Vector3 value, Pose3 pose) { Vector3 result; Vector3.Transform(ref value, ref pose.Orientation, out result); Vector3.Add(ref result, ref pose.Translation, out result); return result; } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation . /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform(Vector3[] sourceArray, int sourceIndex, ref Matrix matrix, Vector3[] destinationArray, int destinationIndex, int length) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (var i = 0; i < length; i++) { Vector3.Transform(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The which contains rotation transformation. /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform(Vector3[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector3[] destinationArray, int destinationIndex, int length) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (var i = 0; i < length; i++) { Vector3.Transform(ref sourceArray[sourceIndex + i], ref rotation, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The transformation . /// Destination array. public static void Transform(Vector3[] sourceArray, ref Matrix matrix, Vector3[] destinationArray) { Vector3.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length); } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The which contains rotation transformation. /// Destination array. public static void Transform(Vector3[] sourceArray, ref Quaternion rotation, Vector3[] destinationArray) { Vector3.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length); } #endregion #region TransformNormal /// /// Creates a new that contains a transformation of the specified normal by the specified . /// /// Source which represents a normal vector. /// The transformation . /// Transformed normal. public static Vector3 TransformNormal(Vector3 normal, Matrix matrix) { TransformNormal(ref normal, ref matrix, out normal); return normal; } /// /// Creates a new that contains a transformation of the specified normal by the specified . /// /// Source which represents a normal vector. /// The transformation . /// Transformed normal as an output parameter. public static void TransformNormal(ref Vector3 normal, ref Matrix matrix, out Vector3 result) { var x = (normal.X * matrix.M11) + (normal.Y * matrix.M21) + (normal.Z * matrix.M31); var y = (normal.X * matrix.M12) + (normal.Y * matrix.M22) + (normal.Z * matrix.M32); var z = (normal.X * matrix.M13) + (normal.Y * matrix.M23) + (normal.Z * matrix.M33); result.X = x; result.Y = y; result.Z = z; } /// /// Apply transformation on normals within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation . /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of normals to be transformed. public static void TransformNormal ( Vector3[] sourceArray, int sourceIndex, ref Matrix matrix, Vector3[] destinationArray,int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if(sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (int i = 0; i < length; i++) { Vector3.TransformNormal(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on all normals within array of by the specified and places the results in an another array. /// /// Source array. /// The transformation . /// Destination array. public static void TransformNormal(Vector3[] sourceArray, ref Matrix matrix, Vector3[] destinationArray) { Vector3.TransformNormal(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length); } #endregion /// /// Deconstruction method for . /// /// /// /// public void Deconstruct(out float x, out float y, out float z) { x = X; y = Y; z = Z; } #endregion #region Operators /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Vector3 left, Vector3 right) { return left.X == right.X && left.Y == right.Y && left.Z == right.Z; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Vector3 left, Vector3 right) { return !(left == right); } /// /// Adds two vectors. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the vectors. public static Vector3 operator +(Vector3 left, Vector3 right) { left.X += right.X; left.Y += right.Y; left.Z += right.Z; return left; } /// /// Inverts values in the specified . /// /// Source on the right of the sub sign. /// Result of the inversion. public static Vector3 operator -(Vector3 value) { value = new Vector3(-value.X, -value.Y, -value.Z); return value; } /// /// Subtracts a from a . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the vector subtraction. public static Vector3 operator -(Vector3 left, Vector3 right) { left.X -= right.X; left.Y -= right.Y; left.Z -= right.Z; return left; } /// /// Multiplies the components of two vectors by each other. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication. public static Vector3 operator *(Vector3 left, Vector3 right) { left.X *= right.X; left.Y *= right.Y; left.Z *= right.Z; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector3 operator *(Vector3 left, float right) { left.X *= right; left.Y *= right; left.Z *= right; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Scalar value on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector3 operator *(float left, Vector3 right) { right.X *= left; right.Y *= left; right.Z *= left; return right; } /// /// Divides the components of a by the components of another . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the vectors. public static Vector3 operator /(Vector3 left, Vector3 right) { left.X /= right.X; left.Y /= right.Y; left.Z /= right.Z; return left; } /// /// Divides the components of a by a scalar. /// /// Source on the left of the div sign. /// Divisor scalar on the right of the div sign. /// The result of dividing a vector by a scalar. public static Vector3 operator /(Vector3 left, float right) { float factor = 1 / right; left.X *= factor; left.Y *= factor; left.Z *= factor; return left; } #if NET8_0_OR_GREATER public static explicit operator Vector3(SysNumerics.Vector3 value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Vector3(Vector3 value) { return Unsafe.BitCast(value); } #endif #endregion } } ================================================ FILE: src/Xna.Framework/Vector4.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Diagnostics; using System.Runtime.Serialization; #if NET8_0_OR_GREATER using System.Runtime.CompilerServices; using SysNumerics = System.Numerics; #endif namespace Microsoft.Xna.Framework { /// /// Describes a 4D-vector. /// [DebuggerDisplay("{DebugDisplayString,nq}")] [DataContract] [TypeConverter("Microsoft.Xna.Framework.Design.Vector4Converter, Xna.Framework.Design")] public struct Vector4 : IEquatable { #region Private Fields private static readonly Vector4 zero = new Vector4(); private static readonly Vector4 one = new Vector4(1f, 1f, 1f, 1f); private static readonly Vector4 unitX = new Vector4(1f, 0f, 0f, 0f); private static readonly Vector4 unitY = new Vector4(0f, 1f, 0f, 0f); private static readonly Vector4 unitZ = new Vector4(0f, 0f, 1f, 0f); private static readonly Vector4 unitW = new Vector4(0f, 0f, 0f, 1f); #endregion #region Public Fields /// /// The x coordinate of this . /// [DataMember] public float X; /// /// The y coordinate of this . /// [DataMember] public float Y; /// /// The z coordinate of this . /// [DataMember] public float Z; /// /// The w coordinate of this . /// [DataMember] public float W; #endregion #region Public Properties /// /// Returns a with components 0, 0, 0, 0. /// public static Vector4 Zero { get { return zero; } } /// /// Returns a with components 1, 1, 1, 1. /// public static Vector4 One { get { return one; } } /// /// Returns a with components 1, 0, 0, 0. /// public static Vector4 UnitX { get { return unitX; } } /// /// Returns a with components 0, 1, 0, 0. /// public static Vector4 UnitY { get { return unitY; } } /// /// Returns a with components 0, 0, 1, 0. /// public static Vector4 UnitZ { get { return unitZ; } } /// /// Returns a with components 0, 0, 0, 1. /// public static Vector4 UnitW { get { return unitW; } } #endregion #region Internal Properties internal string DebugDisplayString { get { return string.Concat( this.X.ToString(), " ", this.Y.ToString(), " ", this.Z.ToString(), " ", this.W.ToString() ); } } #endregion #region Constructors /// /// Constructs a 3d vector with X, Y, Z and W from four values. /// /// The x coordinate in 4d-space. /// The y coordinate in 4d-space. /// The z coordinate in 4d-space. /// The w coordinate in 4d-space. public Vector4(float x, float y, float z, float w) { this.X = x; this.Y = y; this.Z = z; this.W = w; } /// /// Constructs a 3d vector with X and Z from and Z and W from the scalars. /// /// The x and y coordinates in 4d-space. /// The z coordinate in 4d-space. /// The w coordinate in 4d-space. public Vector4(Vector2 value, float z, float w) { this.X = value.X; this.Y = value.Y; this.Z = z; this.W = w; } /// /// Constructs a 3d vector with X, Y, Z from and W from a scalar. /// /// The x, y and z coordinates in 4d-space. /// The w coordinate in 4d-space. public Vector4(Vector3 value, float w) { this.X = value.X; this.Y = value.Y; this.Z = value.Z; this.W = w; } /// /// Constructs a 4d vector with X, Y, Z and W set to the same value. /// /// The x, y, z and w coordinates in 4d-space. public Vector4(float value) { this.X = value; this.Y = value; this.Z = value; this.W = value; } #endregion #region Public Methods /// /// Performs vector addition on and . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static Vector4 Add(Vector4 left, Vector4 right) { left.X += right.X; left.Y += right.Y; left.Z += right.Z; left.W += right.W; return left; } /// /// Performs vector addition on and /// , storing the result of the /// addition in . /// /// The first vector to add. /// The second vector to add. /// The result of the vector addition. public static void Add(ref Vector4 left, ref Vector4 right, out Vector4 result) { result.X = left.X + right.X; result.Y = left.Y + right.Y; result.Z = left.Z + right.Z; result.W = left.W + right.W; } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. /// /// The first vector of 4d-triangle. /// The second vector of 4d-triangle. /// The third vector of 4d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. /// The cartesian translation of barycentric coordinates. public static Vector4 Barycentric(Vector4 value1, Vector4 value2, Vector4 value3, float amount1, float amount2) { return new Vector4( MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2), MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2), MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2), MathHelper.Barycentric(value1.W, value2.W, value3.W, amount1, amount2)); } /// /// Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. /// /// The first vector of 4d-triangle. /// The second vector of 4d-triangle. /// The third vector of 4d-triangle. /// Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. /// Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. /// The cartesian translation of barycentric coordinates as an output parameter. public static void Barycentric(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, float amount1, float amount2, out Vector4 result) { result.X = MathHelper.Barycentric(value1.X, value2.X, value3.X, amount1, amount2); result.Y = MathHelper.Barycentric(value1.Y, value2.Y, value3.Y, amount1, amount2); result.Z = MathHelper.Barycentric(value1.Z, value2.Z, value3.Z, amount1, amount2); result.W = MathHelper.Barycentric(value1.W, value2.W, value3.W, amount1, amount2); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation. public static Vector4 CatmullRom(Vector4 value1, Vector4 value2, Vector4 value3, Vector4 value4, float amount) { return new Vector4( MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount), MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount), MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount), MathHelper.CatmullRom(value1.W, value2.W, value3.W, value4.W, amount)); } /// /// Creates a new that contains CatmullRom interpolation of the specified vectors. /// /// The first vector in interpolation. /// The second vector in interpolation. /// The third vector in interpolation. /// The fourth vector in interpolation. /// Weighting factor. /// The result of CatmullRom interpolation as an output parameter. public static void CatmullRom(ref Vector4 value1, ref Vector4 value2, ref Vector4 value3, ref Vector4 value4, float amount, out Vector4 result) { result.X = MathHelper.CatmullRom(value1.X, value2.X, value3.X, value4.X, amount); result.Y = MathHelper.CatmullRom(value1.Y, value2.Y, value3.Y, value4.Y, amount); result.Z = MathHelper.CatmullRom(value1.Z, value2.Z, value3.Z, value4.Z, amount); result.W = MathHelper.CatmullRom(value1.W, value2.W, value3.W, value4.W, amount); } /// /// Round the members of this towards positive infinity. /// public void Ceiling() { X = (float)Math.Ceiling(X); Y = (float)Math.Ceiling(Y); Z = (float)Math.Ceiling(Z); W = (float)Math.Ceiling(W); } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static Vector4 Ceiling(Vector4 value) { value.X = (float)Math.Ceiling(value.X); value.Y = (float)Math.Ceiling(value.Y); value.Z = (float)Math.Ceiling(value.Z); value.W = (float)Math.Ceiling(value.W); return value; } /// /// Creates a new that contains members from another vector rounded towards positive infinity. /// /// Source . /// The rounded . public static void Ceiling(ref Vector4 value, out Vector4 result) { result.X = (float)Math.Ceiling(value.X); result.Y = (float)Math.Ceiling(value.Y); result.Z = (float)Math.Ceiling(value.Z); result.W = (float)Math.Ceiling(value.W); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value. public static Vector4 Clamp(Vector4 value1, Vector4 min, Vector4 max) { return new Vector4( MathHelper.Clamp(value1.X, min.X, max.X), MathHelper.Clamp(value1.Y, min.Y, max.Y), MathHelper.Clamp(value1.Z, min.Z, max.Z), MathHelper.Clamp(value1.W, min.W, max.W)); } /// /// Clamps the specified value within a range. /// /// The value to clamp. /// The min value. /// The max value. /// The clamped value as an output parameter. public static void Clamp(ref Vector4 value1, ref Vector4 min, ref Vector4 max, out Vector4 result) { result.X = MathHelper.Clamp(value1.X, min.X, max.X); result.Y = MathHelper.Clamp(value1.Y, min.Y, max.Y); result.Z = MathHelper.Clamp(value1.Z, min.Z, max.Z); result.W = MathHelper.Clamp(value1.W, min.W, max.W); } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors. public static float Distance(Vector4 value1, Vector4 value2) { return (float)Math.Sqrt(DistanceSquared(value1, value2)); } /// /// Returns the distance between two vectors. /// /// The first vector. /// The second vector. /// The distance between two vectors as an output parameter. public static void Distance(ref Vector4 value1, ref Vector4 value2, out float result) { result = (float)Math.Sqrt(DistanceSquared(value1, value2)); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors. public static float DistanceSquared(Vector4 value1, Vector4 value2) { return (value1.W - value2.W) * (value1.W - value2.W) + (value1.X - value2.X) * (value1.X - value2.X) + (value1.Y - value2.Y) * (value1.Y - value2.Y) + (value1.Z - value2.Z) * (value1.Z - value2.Z); } /// /// Returns the squared distance between two vectors. /// /// The first vector. /// The second vector. /// The squared distance between two vectors as an output parameter. public static void DistanceSquared(ref Vector4 value1, ref Vector4 value2, out float result) { result = (value1.W - value2.W) * (value1.W - value2.W) + (value1.X - value2.X) * (value1.X - value2.X) + (value1.Y - value2.Y) * (value1.Y - value2.Y) + (value1.Z - value2.Z) * (value1.Z - value2.Z); } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors. public static Vector4 Divide(Vector4 left, Vector4 right) { left.W /= right.W; left.X /= right.X; left.Y /= right.Y; left.Z /= right.Z; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar. public static Vector4 Divide(Vector4 left, float right) { float factor = 1f / right; left.W *= factor; left.X *= factor; left.Y *= factor; left.Z *= factor; return left; } /// /// Divides the components of a by a scalar. /// /// Source . /// Divisor scalar. /// The result of dividing a vector by a scalar as an output parameter. public static void Divide(ref Vector4 left, float right, out Vector4 result) { float factor = 1f / right; result.W = left.W * factor; result.X = left.X * factor; result.Y = left.Y * factor; result.Z = left.Z * factor; } /// /// Divides the components of a by the components of another . /// /// Source . /// Divisor . /// The result of dividing the vectors as an output parameter. public static void Divide(ref Vector4 left, ref Vector4 right, out Vector4 result) { result.W = left.W / right.W; result.X = left.X / right.X; result.Y = left.Y / right.Y; result.Z = left.Z / right.Z; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors. public static float Dot(Vector4 left, Vector4 right) { return left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W; } /// /// Returns a dot product of two vectors. /// /// The first vector. /// The second vector. /// The dot product of two vectors as an output parameter. public static void Dot(ref Vector4 left, ref Vector4 right, out float result) { result = left.X * right.X + left.Y * right.Y + left.Z * right.Z + left.W * right.W; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { return (obj is Vector4) ? this == (Vector4)obj : false; } /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Vector4 other) { return this.W == other.W && this.X == other.X && this.Y == other.Y && this.Z == other.Z; } /// /// Round the members of this towards negative infinity. /// public void Floor() { X = (float)Math.Floor(X); Y = (float)Math.Floor(Y); Z = (float)Math.Floor(Z); W = (float)Math.Floor(W); } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static Vector4 Floor(Vector4 value) { value.X = (float)Math.Floor(value.X); value.Y = (float)Math.Floor(value.Y); value.Z = (float)Math.Floor(value.Z); value.W = (float)Math.Floor(value.W); return value; } /// /// Creates a new that contains members from another vector rounded towards negative infinity. /// /// Source . /// The rounded . public static void Floor(ref Vector4 value, out Vector4 result) { result.X = (float)Math.Floor(value.X); result.Y = (float)Math.Floor(value.Y); result.Z = (float)Math.Floor(value.Z); result.W = (float)Math.Floor(value.W); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { unchecked { var hashCode = W.GetHashCode(); hashCode = (hashCode * 397) ^ X.GetHashCode(); hashCode = (hashCode * 397) ^ Y.GetHashCode(); hashCode = (hashCode * 397) ^ Z.GetHashCode(); return hashCode; } } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector. public static Vector4 Hermite(Vector4 value1, Vector4 tangent1, Vector4 value2, Vector4 tangent2, float amount) { return new Vector4(MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount), MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount), MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount), MathHelper.Hermite(value1.W, tangent1.W, value2.W, tangent2.W, amount)); } /// /// Creates a new that contains hermite spline interpolation. /// /// The first position vector. /// The first tangent vector. /// The second position vector. /// The second tangent vector. /// Weighting factor. /// The hermite spline interpolation vector as an output parameter. public static void Hermite(ref Vector4 value1, ref Vector4 tangent1, ref Vector4 value2, ref Vector4 tangent2, float amount, out Vector4 result) { result.W = MathHelper.Hermite(value1.W, tangent1.W, value2.W, tangent2.W, amount); result.X = MathHelper.Hermite(value1.X, tangent1.X, value2.X, tangent2.X, amount); result.Y = MathHelper.Hermite(value1.Y, tangent1.Y, value2.Y, tangent2.Y, amount); result.Z = MathHelper.Hermite(value1.Z, tangent1.Z, value2.Z, tangent2.Z, amount); } /// /// Returns the length of this . /// /// The length of this . public float Length() { return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W)); } /// /// Returns the squared length of this . /// /// The squared length of this . public float LengthSquared() { return (X * X) + (Y * Y) + (Z * Z) + (W * W); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector4 Lerp(Vector4 start, Vector4 end, float amount) { Vector4 result; result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); result.Z = MathHelper.Lerp(start.Z, end.Z, amount); result.W = MathHelper.Lerp(start.W, end.W, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void Lerp(ref Vector4 start, ref Vector4 end, float amount, out Vector4 result) { result.X = MathHelper.Lerp(start.X, end.X, amount); result.Y = MathHelper.Lerp(start.Y, end.Y, amount); result.Z = MathHelper.Lerp(start.Z, end.Z, amount); result.W = MathHelper.Lerp(start.W, end.W, amount); } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors. public static Vector4 LerpPrecise(Vector4 start, Vector4 end, float amount) { Vector4 result; result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount); result.W = MathHelper.LerpPrecise(start.W, end.W, amount); return result; } /// /// Creates a new that contains linear interpolation of the specified vectors. /// Uses on MathHelper for the interpolation. /// Less efficient but more precise compared to . /// See remarks section of on MathHelper for more info. /// /// The first vector. /// The second vector. /// Weighting value(between 0.0 and 1.0). /// The result of linear interpolation of the specified vectors as an output parameter. public static void LerpPrecise(ref Vector4 start, ref Vector4 end, float amount, out Vector4 result) { result.X = MathHelper.LerpPrecise(start.X, end.X, amount); result.Y = MathHelper.LerpPrecise(start.Y, end.Y, amount); result.Z = MathHelper.LerpPrecise(start.Z, end.Z, amount); result.W = MathHelper.LerpPrecise(start.W, end.W, amount); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors. public static Vector4 Max(Vector4 value1, Vector4 value2) { return new Vector4( MathHelper.Max(value1.X, value2.X), MathHelper.Max(value1.Y, value2.Y), MathHelper.Max(value1.Z, value2.Z), MathHelper.Max(value1.W, value2.W)); } /// /// Creates a new that contains a maximal values from the two vectors. /// /// The first vector. /// The second vector. /// The with maximal values from the two vectors as an output parameter. public static void Max(ref Vector4 value1, ref Vector4 value2, out Vector4 result) { result.X = MathHelper.Max(value1.X, value2.X); result.Y = MathHelper.Max(value1.Y, value2.Y); result.Z = MathHelper.Max(value1.Z, value2.Z); result.W = MathHelper.Max(value1.W, value2.W); } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors. public static Vector4 Min(Vector4 value1, Vector4 value2) { return new Vector4( MathHelper.Min(value1.X, value2.X), MathHelper.Min(value1.Y, value2.Y), MathHelper.Min(value1.Z, value2.Z), MathHelper.Min(value1.W, value2.W)); } /// /// Creates a new that contains a minimal values from the two vectors. /// /// The first vector. /// The second vector. /// The with minimal values from the two vectors as an output parameter. public static void Min(ref Vector4 value1, ref Vector4 value2, out Vector4 result) { result.X = MathHelper.Min(value1.X, value2.X); result.Y = MathHelper.Min(value1.Y, value2.Y); result.Z = MathHelper.Min(value1.Z, value2.Z); result.W = MathHelper.Min(value1.W, value2.W); } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication. public static Vector4 Multiply(Vector4 left, Vector4 right) { left.W *= right.W; left.X *= right.X; left.Y *= right.Y; left.Z *= right.Z; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the vector multiplication with a scalar. public static Vector4 Multiply(Vector4 left, float right) { left.W *= right; left.X *= right; left.Y *= right; left.Z *= right; return left; } /// /// Creates a new that contains a multiplication of and a scalar. /// /// Source . /// Scalar value. /// The result of the multiplication with a scalar as an output parameter. public static void Multiply(ref Vector4 left, float right, out Vector4 result) { result.W = left.W * right; result.X = left.X * right; result.Y = left.Y * right; result.Z = left.Z * right; } /// /// Creates a new that contains a multiplication of two vectors. /// /// Source . /// Source . /// The result of the vector multiplication as an output parameter. public static void Multiply(ref Vector4 left, ref Vector4 right, out Vector4 result) { result.W = left.W * right.W; result.X = left.X * right.X; result.Y = left.Y * right.Y; result.Z = left.Z * right.Z; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion. public static Vector4 Negate(Vector4 value) { value = new Vector4(-value.X, -value.Y, -value.Z, -value.W); return value; } /// /// Creates a new that contains the specified vector inversion. /// /// Source . /// The result of the vector inversion as an output parameter. public static void Negate(ref Vector4 value, out Vector4 result) { result.X = -value.X; result.Y = -value.Y; result.Z = -value.Z; result.W = -value.W; } /// /// Turns this to a unit vector with the same direction. /// public void Normalize() { float factor = (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z) + (W * W)); factor = 1f / factor; X *= factor; Y *= factor; Z *= factor; W *= factor; } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector. public static Vector4 Normalize(Vector4 value) { float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W)); factor = 1f / factor; return new Vector4(value.X*factor,value.Y*factor,value.Z*factor,value.W*factor); } /// /// Creates a new that contains a normalized values from another vector. /// /// Source . /// Unit vector as an output parameter. public static void Normalize(ref Vector4 value, out Vector4 result) { float factor = (float)Math.Sqrt((value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z) + (value.W * value.W)); factor = 1f / factor; result.W = value.W * factor; result.X = value.X * factor; result.Y = value.Y * factor; result.Z = value.Z * factor; } /// /// Round the members of this to the nearest integer value. /// public void Round() { X = (float)Math.Round(X); Y = (float)Math.Round(Y); Z = (float)Math.Round(Z); W = (float)Math.Round(W); } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static Vector4 Round(Vector4 value) { value.X = (float)Math.Round(value.X); value.Y = (float)Math.Round(value.Y); value.Z = (float)Math.Round(value.Z); value.W = (float)Math.Round(value.W); return value; } /// /// Creates a new that contains members from another vector rounded to the nearest integer value. /// /// Source . /// The rounded . public static void Round(ref Vector4 value, out Vector4 result) { result.X = (float)Math.Round(value.X); result.Y = (float)Math.Round(value.Y); result.Z = (float)Math.Round(value.Z); result.W = (float)Math.Round(value.W); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors. public static Vector4 SmoothStep(Vector4 value1, Vector4 value2, float amount) { return new Vector4( MathHelper.SmoothStep(value1.X, value2.X, amount), MathHelper.SmoothStep(value1.Y, value2.Y, amount), MathHelper.SmoothStep(value1.Z, value2.Z, amount), MathHelper.SmoothStep(value1.W, value2.W, amount)); } /// /// Creates a new that contains cubic interpolation of the specified vectors. /// /// Source . /// Source . /// Weighting value. /// Cubic interpolation of the specified vectors as an output parameter. public static void SmoothStep(ref Vector4 value1, ref Vector4 value2, float amount, out Vector4 result) { result.X = MathHelper.SmoothStep(value1.X, value2.X, amount); result.Y = MathHelper.SmoothStep(value1.Y, value2.Y, amount); result.Z = MathHelper.SmoothStep(value1.Z, value2.Z, amount); result.W = MathHelper.SmoothStep(value1.W, value2.W, amount); } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction. public static Vector4 Subtract(Vector4 left, Vector4 right) { left.W -= right.W; left.X -= right.X; left.Y -= right.Y; left.Z -= right.Z; return left; } /// /// Creates a new that contains subtraction of on from a another. /// /// Source . /// Source . /// The result of the vector subtraction as an output parameter. public static void Subtract(ref Vector4 left, ref Vector4 right, out Vector4 result) { result.W = left.W - right.W; result.X = left.X - right.X; result.Y = left.Y - right.Y; result.Z = left.Z - right.Z; } #region Transform /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The transformation . /// Transformed . public static Vector4 Transform(Vector2 value, Matrix matrix) { Vector4 result; Transform(ref value, ref matrix, out result); return result; } /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed . public static Vector4 Transform(Vector2 value, Quaternion rotation) { Vector4 result; Transform(ref value, ref rotation, out result); return result; } /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The transformation . /// Transformed . public static Vector4 Transform(Vector3 value, Matrix matrix) { Vector4 result; Transform(ref value, ref matrix, out result); return result; } /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed . public static Vector4 Transform(Vector3 value, Quaternion rotation) { Vector4 result; Transform(ref value, ref rotation, out result); return result; } /// /// Creates a new that contains a transformation of 4d-vector by the specified . /// /// Source . /// The transformation . /// Transformed . public static Vector4 Transform(Vector4 value, Matrix matrix) { Transform(ref value, ref matrix, out value); return value; } /// /// Creates a new that contains a transformation of 4d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed . public static Vector4 Transform(Vector4 value, Quaternion rotation) { Vector4 result; Transform(ref value, ref rotation, out result); return result; } /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The transformation . /// Transformed as an output parameter. public static void Transform(ref Vector2 value, ref Matrix matrix, out Vector4 result) { result.X = (value.X * matrix.M11) + (value.Y * matrix.M21) + matrix.M41; result.Y = (value.X * matrix.M12) + (value.Y * matrix.M22) + matrix.M42; result.Z = (value.X * matrix.M13) + (value.Y * matrix.M23) + matrix.M43; result.W = (value.X * matrix.M14) + (value.Y * matrix.M24) + matrix.M44; } /// /// Creates a new that contains a transformation of 2d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed as an output parameter. public static void Transform(ref Vector2 value, ref Quaternion rotation, out Vector4 result) { double xx = rotation.X + rotation.X; double yy = rotation.Y + rotation.Y; double zz = rotation.Z + rotation.Z; double wxx = rotation.W * xx; double wyy = rotation.W * yy; double wzz = rotation.W * zz; double xxx = rotation.X * xx; double xyy = rotation.X * yy; double xzz = rotation.X * zz; double yyy = rotation.Y * yy; double yzz = rotation.Y * zz; double zzz = rotation.Z * zz; result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz)); result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz)); result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx)); result.W = 1f; } /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The transformation . /// Transformed as an output parameter. public static void Transform(ref Vector3 value, ref Matrix matrix, out Vector4 result) { result.X = (value.X * matrix.M11) + (value.Y * matrix.M21) + (value.Z * matrix.M31) + matrix.M41; result.Y = (value.X * matrix.M12) + (value.Y * matrix.M22) + (value.Z * matrix.M32) + matrix.M42; result.Z = (value.X * matrix.M13) + (value.Y * matrix.M23) + (value.Z * matrix.M33) + matrix.M43; result.W = (value.X * matrix.M14) + (value.Y * matrix.M24) + (value.Z * matrix.M34) + matrix.M44; } /// /// Creates a new that contains a transformation of 3d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed as an output parameter. public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector4 result) { double xx = rotation.X + rotation.X; double yy = rotation.Y + rotation.Y; double zz = rotation.Z + rotation.Z; double wxx = rotation.W * xx; double wyy = rotation.W * yy; double wzz = rotation.W * zz; double xxx = rotation.X * xx; double xyy = rotation.X * yy; double xzz = rotation.X * zz; double yyy = rotation.Y * yy; double yzz = rotation.Y * zz; double zzz = rotation.Z * zz; result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz) + (double)value.Z * (xzz + wyy)); result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz) + (double)value.Z * (yzz - wxx)); result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx) + (double)value.Z * (1.0 - xxx - yyy)); result.W = 1f; } /// /// Creates a new that contains a transformation of 4d-vector by the specified . /// /// Source . /// The transformation . /// Transformed as an output parameter. public static void Transform(ref Vector4 value, ref Matrix matrix, out Vector4 result) { var x = (value.X * matrix.M11) + (value.Y * matrix.M21) + (value.Z * matrix.M31) + (value.W * matrix.M41); var y = (value.X * matrix.M12) + (value.Y * matrix.M22) + (value.Z * matrix.M32) + (value.W * matrix.M42); var z = (value.X * matrix.M13) + (value.Y * matrix.M23) + (value.Z * matrix.M33) + (value.W * matrix.M43); var w = (value.X * matrix.M14) + (value.Y * matrix.M24) + (value.Z * matrix.M34) + (value.W * matrix.M44); result.X = x; result.Y = y; result.Z = z; result.W = w; } /// /// Creates a new that contains a transformation of 4d-vector by the specified . /// /// Source . /// The which contains rotation transformation. /// Transformed as an output parameter. public static void Transform(ref Vector4 value, ref Quaternion rotation, out Vector4 result) { double xx = rotation.X + rotation.X; double yy = rotation.Y + rotation.Y; double zz = rotation.Z + rotation.Z; double wxx = rotation.W * xx; double wyy = rotation.W * yy; double wzz = rotation.W * zz; double xxx = rotation.X * xx; double xyy = rotation.X * yy; double xzz = rotation.X * zz; double yyy = rotation.Y * yy; double yzz = rotation.Y * zz; double zzz = rotation.Z * zz; result.X = (float)((double)value.X * (1.0 - yyy - zzz) + (double)value.Y * (xyy - wzz) + (double)value.Z * (xzz + wyy)); result.Y = (float)((double)value.X * (xyy + wzz) + (double)value.Y * (1.0 - xxx - zzz) + (double)value.Z * (yzz - wxx)); result.Z = (float)((double)value.X * (xzz - wyy) + (double)value.Y * (yzz + wxx) + (double)value.Z * (1.0 - xxx - yyy)); result.W = value.W; } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The transformation . /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform ( Vector4[] sourceArray, int sourceIndex, ref Matrix matrix, Vector4[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (var i = 0; i < length; i++) { Vector4.Transform(ref sourceArray[sourceIndex + i], ref matrix, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The starting index of transformation in the source array. /// The which contains rotation transformation. /// Destination array. /// The starting index in the destination array, where the first should be written. /// The number of vectors to be transformed. public static void Transform ( Vector4[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector4[] destinationArray, int destinationIndex, int length ) { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (destinationArray == null) throw new ArgumentNullException("destinationArray"); if (sourceArray.Length < sourceIndex + length) throw new ArgumentException("Source array length is lesser than sourceIndex + length"); if (destinationArray.Length < destinationIndex + length) throw new ArgumentException("Destination array length is lesser than destinationIndex + length"); for (var i = 0; i < length; i++) { Vector4.Transform(ref sourceArray[sourceIndex + i], ref rotation, out destinationArray[destinationIndex + i]); } } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The transformation . /// Destination array. public static void Transform(Vector4[] sourceArray, ref Matrix matrix, Vector4[] destinationArray) { Vector4.Transform(sourceArray, 0, ref matrix, destinationArray, 0, sourceArray.Length); } /// /// Apply transformation on all vectors within array of by the specified and places the results in an another array. /// /// Source array. /// The which contains rotation transformation. /// Destination array. public static void Transform(Vector4[] sourceArray, ref Quaternion rotation, Vector4[] destinationArray) { Vector4.Transform(sourceArray, 0, ref rotation, destinationArray, 0, sourceArray.Length); } #endregion /// /// Returns a representation of this in the format: /// {X:[] Y:[] Z:[] W:[]} /// /// A representation of this . public override string ToString() { return String.Format("{{X: {0}, Y: {1}, Z: {2}, W: {3} }}", X, Y, Z, W); } /// /// Deconstruction method for . /// /// /// /// /// public void Deconstruct(out float x, out float y, out float z, out float w) { x = X; y = Y; z = Z; w = W; } #endregion #region Operators /// /// Inverts values in the specified . /// /// Source on the right of the sub sign. /// Result of the inversion. public static Vector4 operator -(Vector4 value) { return new Vector4(-value.X, -value.Y, -value.Z, -value.W); } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Vector4 left, Vector4 right) { return left.W == right.W && left.X == right.X && left.Y == right.Y && left.Z == right.Z; } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Vector4 left, Vector4 right) { return !(left == right); } /// /// Adds two vectors. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Sum of the vectors. public static Vector4 operator +(Vector4 left, Vector4 right) { left.W += right.W; left.X += right.X; left.Y += right.Y; left.Z += right.Z; return left; } /// /// Subtracts a from a . /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Result of the vector subtraction. public static Vector4 operator -(Vector4 left, Vector4 right) { left.W -= right.W; left.X -= right.X; left.Y -= right.Y; left.Z -= right.Z; return left; } /// /// Multiplies the components of two vectors by each other. /// /// Source on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication. public static Vector4 operator *(Vector4 left, Vector4 right) { left.W *= right.W; left.X *= right.X; left.Y *= right.Y; left.Z *= right.Z; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Source on the left of the mul sign. /// Scalar value on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector4 operator *(Vector4 left, float right) { left.W *= right; left.X *= right; left.Y *= right; left.Z *= right; return left; } /// /// Multiplies the components of vector by a scalar. /// /// Scalar value on the left of the mul sign. /// Source on the right of the mul sign. /// Result of the vector multiplication with a scalar. public static Vector4 operator *(float left, Vector4 right) { right.W *= left; right.X *= left; right.Y *= left; right.Z *= left; return right; } /// /// Divides the components of a by the components of another . /// /// Source on the left of the div sign. /// Divisor on the right of the div sign. /// The result of dividing the vectors. public static Vector4 operator /(Vector4 left, Vector4 right) { left.W /= right.W; left.X /= right.X; left.Y /= right.Y; left.Z /= right.Z; return left; } /// /// Divides the components of a by a scalar. /// /// Source on the left of the div sign. /// Divisor scalar on the right of the div sign. /// The result of dividing a vector by a scalar. public static Vector4 operator /(Vector4 left, float right) { float factor = 1f / right; left.W *= factor; left.X *= factor; left.Y *= factor; left.Z *= factor; return left; } #if NET8_0_OR_GREATER public static explicit operator Vector4(SysNumerics.Vector4 value) { return Unsafe.BitCast(value); } public static explicit operator SysNumerics.Vector4(Vector4 value) { return Unsafe.BitCast(value); } #endif #endregion } } ================================================ FILE: src/Xna.Framework/Xna.Framework.csproj ================================================  ..\..\Artifacts\Xna.Framework\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework Microsoft.Xna.Framework true CS0067;CS1591;CS1574;CS0419;CS8500 true The core framework. KNI;.net core;core;.net standard;standard nkast.Xna.Framework ILLink.Descriptors.xml runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioChannels.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Audio { /// /// Represents how many channels are used in the audio data. /// public enum AudioChannels { /// Single channel. Mono = 1, /// Two channels. Stereo = 2 } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioEmitter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Text; namespace Microsoft.Xna.Framework.Audio { /// /// Represents a 3D audio emitter. Used to simulate 3D audio effects. /// public class AudioEmitter { /// Initializes a new AudioEmitter instance. public AudioEmitter() { _dopplerScale = 1.0f; Forward = Vector3.Forward; Position = Vector3.Zero; Up = Vector3.Up; Velocity = Vector3.Zero; } private float _dopplerScale; /// Gets or sets a scale applied to the Doppler effect between the AudioEmitter and an AudioListener. /// /// Defaults to 1.0 /// A value of 1.0 leaves the Doppler effect unmodified. /// public float DopplerScale { get { return _dopplerScale; } set { if (value < 0.0f) throw new ArgumentOutOfRangeException("value", "AudioEmitter.DopplerScale must be greater than or equal to 0.0f"); _dopplerScale = value; } } /// Gets or sets the emitter's forward vector. /// /// Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) /// Used with AudioListener.Velocity to calculate Doppler values. /// The Forward and Up values must be orthonormal. /// public Vector3 Forward { get; set; } /// Gets or sets the position of this emitter. public Vector3 Position { get; set; } /// Gets or sets the emitter's Up vector. /// /// Defaults to Vector3.Up. (new Vector3(0, -1, 1)). /// The Up and Forward vectors must be orthonormal. /// public Vector3 Up { get; set; } /// Gets or sets the emitter's velocity vector. /// /// Defaults to Vector3.Zero. /// This value is only used when calculating Doppler values. /// public Vector3 Velocity { get; set; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioFactory.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { public abstract class AudioFactory { private volatile static AudioFactory _current; internal static AudioFactory Current { get { AudioFactory current = _current; if (current != null) return current; lock (AudioService.SyncHandle) { if (_current != null) return _current; Console.WriteLine("AudioFactory not found."); Console.WriteLine("Initialize audio with 'AudioFactory.RegisterAudioFactory(new ConcreteAudioFactory());'."); AudioFactory audioFactory = CreateAudioFactory(); AudioFactory.RegisterAudioFactory(audioFactory); } return _current; } } private static AudioFactory CreateAudioFactory() { Console.WriteLine("Registering Concrete AudioFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.Audio.ConcreteAudioFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(AudioFactory)) && !type.IsAbstract) return (AudioFactory)Activator.CreateInstance(type); return null; } public static void RegisterAudioFactory(AudioFactory audioFactory) { if (audioFactory == null) throw new NullReferenceException("audioFactory"); lock (AudioService.SyncHandle) { if (_current == null) _current = audioFactory; else throw new InvalidOperationException("AudioFactory allready registered."); } } public abstract AudioServiceStrategy CreateAudioServiceStrategy(); public abstract MicrophoneStrategy CreateMicrophoneStrategy(); public abstract SoundEffectStrategy CreateSoundEffectStrategy(); } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioListener.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Text; namespace Microsoft.Xna.Framework.Audio { /// /// Represents a 3D audio listener. Used when simulating 3D Audio. /// public class AudioListener { /// /// Create an instance. /// public AudioListener() { Forward = Vector3.Forward; Position = Vector3.Zero; Up = Vector3.Up; Velocity = Vector3.Zero; } /// Gets or sets the listener's forward vector. /// /// Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) /// Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. /// The Forward and Up vectors must be orthonormal. /// public Vector3 Forward { get; set; } /// Gets or sets the listener's position. /// /// Defaults to Vector3.Zero. /// public Vector3 Position { get; set; } /// /// Gets or sets the listener's up vector.. /// /// /// Defaults to Vector3.Up (New Vector3(0, -1, 0)). /// Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. /// The values of the Forward and Up vectors must be orthonormal. /// public Vector3 Up { get; set; } /// Gets or sets the listener's velocity vector. /// /// Defaults to Vector3.Zero. /// Scaled by DopplerScale to calculate the Doppler effect value applied to a Cue. /// This value is only used to calculate Doppler values. /// public Vector3 Velocity { get; set; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioService.InstancePool.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { public sealed partial class AudioService { private LinkedList _pooledInstances = new LinkedList(); /// /// Add the specified instance to the pool if it is a pooled instance and removes it from the /// list of playing instances. /// /// The SoundEffectInstance internal void AddPooledInstance(SoundEffectInstance inst) { if (inst.PooledInstancesNode == null) return; int maxPooledInstances = Math.Min(512, MAX_PLAYING_INSTANCES) * 2; if (_pooledInstances.Count >= maxPooledInstances) { var firstNode = _pooledInstances.First; firstNode.Value.Dispose(); _pooledInstances.Remove(firstNode); } _pooledInstances.AddLast(inst.PooledInstancesNode); } /// /// Returns a pooled SoundEffectInstance if one is available, or allocates a new /// SoundEffectInstance if the pool is empty. /// /// The SoundEffectInstance. private SoundEffectInstance GetPooledInstance(SoundEffect effect, bool forXAct = false) { // search for an instance of effect for (var node = _pooledInstances.First; node != null; node = node.Next) { if (ReferenceEquals(node.Value._effect, effect)) { SoundEffectInstance inst = node.Value; _pooledInstances.Remove(inst.PooledInstancesNode); inst._strategy.IsXAct = forXAct; inst.Reset(); return inst; } } return null; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioService.Microphones.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { /// /// Handles the buffer events of all DynamicSoundEffectInstance instances. /// public sealed partial class AudioService { internal Microphone _defaultMicrophone = null; internal List _microphones = new List(); private void UpdateMicrophones() { // querying all running microphones for new samples available for (int i = 0; i < _microphones.Count; i++) _microphones[i].UpdateBuffer(); } private void StopMicrophones() { // stopping all running microphones before shutting down audio devices for (int i = 0; i < _microphones.Count; i++) _microphones[i].Stop(); } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { public sealed partial class AudioService : IDisposable , IPlatformAudioService { private volatile static AudioService _current; private AudioServiceStrategy _strategy; private LinkedList _playingInstances = new LinkedList(); private readonly LinkedList _dynamicPlayingInstances = new LinkedList(); public readonly static object SyncHandle = new object(); AudioServiceStrategy IPlatformAudioService.Strategy { get { return _strategy; } } public static AudioService Current { get { AudioService current = _current; if (current != null) return current; // Create instance lock(SyncHandle) { if (_current == null) { try { _current = new AudioService(); } catch (Exception ex) { throw new NoAudioHardwareException("Audio has failed to initialize.", ex); } } return _current; } } } internal int MAX_PLAYING_INSTANCES { get { return _strategy.PlatformGetMaxPlayingInstances(); } } private AudioService() { PreserveAudioContentTypeReaders(); _strategy = AudioFactory.Current.CreateAudioServiceStrategy(); _strategy.PlatformPopulateCaptureDevices(_microphones, ref _defaultMicrophone); ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += AudioService.Update; } // Trick to prevent the linker removing the code, but not actually execute the code static bool _trimmingFalseFlag = false; private static void PreserveAudioContentTypeReaders() { #pragma warning disable 0219, 0649 // Trick to prevent the linker removing the code, but not actually execute the code if (_trimmingFalseFlag) { // Dummy variables required for it to work with trimming ** DO NOT DELETE ** // This forces the classes not to be optimized out when deploying with trimming // Framework.Audio types SoundEffectReader hSoundEffectReader = new SoundEffectReader(); } #pragma warning restore 0219, 0649 } internal static void UpdateMasterVolume() { if (_current == null) return; lock (SyncHandle) { if (_current != null) _current._UpdateMasterVolume(); } } internal static void OnEffectDisposed(SoundEffect effect, bool disposing) { if (_current == null) return; lock (SyncHandle) { if (_current != null) _current._OnEffectDisposed(effect, disposing); } } internal static void Update() { if (_current == null) return; lock (SyncHandle) { if (_current != null) { _current.UpdatePlayingInstances(); _current.UpdateMicrophones(); } } } public static void Suspend() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current._strategy.Suspend(); } } } public static void Resume() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current._strategy.Resume(); } } } public static void Shutdown() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current.Dispose(); _current = null; } } } private void _UpdateMasterVolume() { for (var node = _playingInstances.First; node != null; node = node.Next) { SoundEffectInstance inst = node.Value; // XAct sounds are not controlled by the SoundEffect // master volume, so we can skip them completely. if (inst._strategy.IsXAct) continue; // Re-applying the volume to itself will update // the sound with the current master volume. inst.Volume = inst.Volume; } } public void SetReverbSettings(ReverbSettings reverbSettings) { _strategy.PlatformSetReverbSettings(reverbSettings); } /// /// Iterates the list of playing instances, stop them and return them to the pool if they are instances of the given SoundEffect. /// /// The SoundEffect /// true if the Effect was disposed. false if it was collected. private void _OnEffectDisposed(SoundEffect effect, bool disposing) { // stop playing instances of the disposed effect for (var node = _playingInstances.First; node != null; ) { SoundEffectInstance inst = node.Value; node = node.Next; if (inst._effect == effect) { inst.Stop(); } } // remove instances of the disposed effect from _pooledInstances for (var node = _pooledInstances.First; node != null;) { SoundEffectInstance inst = node.Value; node = node.Next; if (inst._effect == effect) { _pooledInstances.Remove(inst.PooledInstancesNode); if (disposing) { inst.Dispose(); } } } } /// /// Iterates the list of playing instances, returning them to the pool if they /// have stopped playing. /// private void UpdatePlayingInstances() { // Updates buffer queues of the currently playing dynamic instances. // XNA posts "DynamicSoundEffectInstance.BufferNeeded" events always on the main thread. for (var node = _dynamicPlayingInstances.First; node != null;) { DynamicSoundEffectInstance inst = node.Value; node = node.Next; if (!inst.IsDisposed) inst.Update(); } // Cleanup instances which have finished playing. for (var node = _playingInstances.First; node != null; ) { SoundEffectInstance inst = node.Value; node = node.Next; // Don't consume XACT instances... XACT will // clear this flag when it is done with the wave. if (inst._strategy.IsXAct) continue; System.Diagnostics.Debug.Assert(!inst.IsDisposed); inst.UpdateState(); } } internal bool Play(SoundEffect effect) { lock (SyncHandle) { // is Sounds Available? if (!(_playingInstances.Count < MAX_PLAYING_INSTANCES)) return false; SoundEffectInstance inst = GetInstance(effect); inst.Play(); } return true; } internal bool Play(SoundEffect effect, float volume, float pitch, float pan) { lock (SyncHandle) { // is Sounds Available? if (!(_playingInstances.Count < MAX_PLAYING_INSTANCES)) return false; SoundEffectInstance inst = GetInstance(effect); inst.Volume = volume; inst.Pitch = pitch; inst.Pan = pan; inst.Play(); } return true; } internal SoundEffectInstance GetInstance(SoundEffect effect, bool isXAct = false) { SoundEffectInstance inst = GetPooledInstance(effect, isXAct); if (inst == null) inst = new SoundEffectInstance(this, effect, true, isXAct); return inst; } internal void AddPlayingInstance(SoundEffectInstance inst) { if (_playingInstances.Count >= MAX_PLAYING_INSTANCES) // is Sounds Available? throw new InstancePlayLimitException(); _playingInstances.AddLast(inst.PlayingInstancesNode); } internal void RemovePlayingInstance(SoundEffectInstance inst) { _playingInstances.Remove(inst.PlayingInstancesNode); } public void AddDynamicPlayingInstance(DynamicSoundEffectInstance instance) { _dynamicPlayingInstances.AddLast(instance.DynamicPlayingInstancesNode); } public void RemoveDynamicPlayingInstance(DynamicSoundEffectInstance instance) { _dynamicPlayingInstances.Remove(instance.DynamicPlayingInstancesNode); } /// /// Returns the duration for 16-bit PCM audio. /// /// The length of the audio data in bytes. /// Sample rate, in Hertz (Hz). Must be between 8000 Hz and 48000 Hz /// Number of channels in the audio data. /// The duration of the audio data. internal static TimeSpan GetSampleDuration(int sizeInBytes, int sampleRate, AudioChannels channels) { if (sizeInBytes < 0) throw new ArgumentException("Buffer size cannot be negative.", "sizeInBytes"); if (sampleRate < 8000 || sampleRate > 48000) throw new ArgumentOutOfRangeException("sampleRate"); int numChannels = (int)channels; if (numChannels != 1 && numChannels != 2) throw new ArgumentOutOfRangeException("channels"); float dur = sizeInBytes / (sampleRate * numChannels * 16f / 8f); return TimeSpan.FromSeconds(dur); } /// /// Returns the data size in bytes for 16bit PCM audio. /// /// The total duration of the audio data. /// Sample rate, in Hertz (Hz), of audio data. Must be between 8,000 and 48,000 Hz. /// Number of channels in the audio data. /// The size in bytes of a single sample of audio data. internal static int GetSampleSizeInBytes(TimeSpan duration, int sampleRate, AudioChannels channels) { if (duration < TimeSpan.Zero || duration > TimeSpan.FromMilliseconds(0x7FFFFFF)) throw new ArgumentOutOfRangeException("duration"); if (sampleRate < 8000 || sampleRate > 48000) throw new ArgumentOutOfRangeException("sampleRate"); int numChannels = (int)channels; if (numChannels != 1 && numChannels != 2) throw new ArgumentOutOfRangeException("channels"); return (int)(duration.TotalSeconds * (sampleRate * numChannels * 16f / 8f)); } #region IDisposable private bool isDisposed = false; public event EventHandler Disposing; ~AudioService() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (isDisposed) return; // stop playing instances of the disposed AudioSystem for (var node = _playingInstances.First; node != null;) { SoundEffectInstance inst = node.Value; node = node.Next; inst.Stop(); } var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); // dispose pooled instances for (var node = _pooledInstances.First; node != null;) { SoundEffectInstance inst = node.Value; node = node.Next; inst.Dispose(); } // stop all running microphones StopMicrophones(); ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate -= AudioService.Update; _strategy.Dispose(); _strategy = null; // free unmanaged resources (unmanaged objects) _playingInstances.Clear(); _pooledInstances.Clear(); // set large fields to null. _playingInstances = null; _pooledInstances = null; isDisposed = true; } else { if (isDisposed) return; ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate -= AudioService.Update; // stop all running microphones StopMicrophones(); _strategy = null; // free unmanaged resources (unmanaged objects) _playingInstances.Clear(); _pooledInstances.Clear(); _microphones.Clear(); // set large fields to null. _playingInstances = null; _pooledInstances = null; _microphones = null; _defaultMicrophone = null; isDisposed = true; } } #endregion // IDisposable } } ================================================ FILE: src/Xna.Framework.Audio/Audio/AudioServiceStrategy.cs ================================================ // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Platform.Audio { public interface IPlatformAudioService { AudioServiceStrategy Strategy { get; } } abstract public class AudioServiceStrategy : IDisposable { // factory methods public abstract SoundEffectInstanceStrategy CreateSoundEffectInstanceStrategy(SoundEffectStrategy _strategy); public abstract IDynamicSoundEffectInstanceStrategy CreateDynamicSoundEffectInstanceStrategy(int sampleRate, int channels); public abstract void Suspend(); public abstract void Resume(); public abstract int PlatformGetMaxPlayingInstances(); public abstract void PlatformSetReverbSettings(ReverbSettings reverbSettings); public abstract void PlatformPopulateCaptureDevices(List microphones, ref Microphone defaultMicrophone); public T ToConcrete() where T : AudioServiceStrategy { return (T)this; } protected Microphone CreateMicrophone(string deviceIdentifier) { return new Microphone(deviceIdentifier); } #region IDisposable ~AudioServiceStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion } abstract public class MicrophoneStrategy : IDisposable { private int _sampleRate = 44100; private TimeSpan _bufferDuration = TimeSpan.FromMilliseconds(1000.0); private MicrophoneState _state = MicrophoneState.Stopped; public int SampleRate { get { return _sampleRate; } protected set { _sampleRate = value; } } public virtual TimeSpan BufferDuration { get { return _bufferDuration; } set { _bufferDuration = value; } } public virtual MicrophoneState State { get { return _state; } set { _state = value; } } public abstract void PlatformStart(string deviceName); public abstract void PlatformStop(); public abstract bool PlatformUpdate(); public abstract bool PlatformIsHeadset(); public abstract int PlatformGetData(byte[] buffer, int offset, int count); public TimeSpan GetSampleDuration(int sizeInBytes) { // this should be 10ms aligned // this assumes 16bit mono data return AudioService.GetSampleDuration(sizeInBytes, _sampleRate, AudioChannels.Mono); } public int GetSampleSizeInBytes(TimeSpan duration) { // this should be 10ms aligned // this assumes 16bit mono data return AudioService.GetSampleSizeInBytes(duration, _sampleRate, AudioChannels.Mono); } #region IDisposable ~MicrophoneStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion } abstract public class SoundEffectStrategy : IDisposable { public abstract void PlatformLoadAudioStream(Stream stream, out TimeSpan duration); public abstract void PlatformInitializeFormat(byte[] header, byte[] buffer, int index, int count, int loopStart, int loopLength); public abstract void PlatformInitializePcm(byte[] buffer, int index, int count, int sampleBits, int sampleRate, int channels, int loopStart, int loopLength); public abstract void PlatformInitializeXactAdpcm(byte[] buffer, int index, int count, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength); #region IDisposable ~SoundEffectStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion } public interface IPlatformSoundEffectInstance { T GetStrategy() where T : SoundEffectInstanceStrategy; } abstract public class SoundEffectInstanceStrategy : IDisposable { private bool _isXAct; private bool _isLooped; private float _pan; private float _volume; private float _pitch; public virtual bool IsXAct { get { return _isXAct; } set { _isXAct = value; } } public virtual bool IsLooped { get { return _isLooped; } set { _isLooped = value; } } public virtual float Pan { get { return _pan; } set { _pan = value; } } public virtual float Volume { get { return _volume; } set { _volume = value; } } public virtual float Pitch { get { return _pitch; } set { _pitch = value; } } protected SoundEffectInstanceStrategy(AudioServiceStrategy audioServiceStrategy, SoundEffectStrategy sfxStrategy) { } public abstract void PlatformApply3D(AudioListener listener, AudioEmitter emitter); public abstract void PlatformSetIsLooped(bool isLooped, SoundState state); public abstract bool PlatformUpdateState(ref SoundState state); public abstract void PlatformPause(); public abstract void PlatformPlay(bool isLooped); public abstract void PlatformResume(bool isLooped); public abstract void PlatformStop(); public abstract void PlatformRelease(bool isLooped); public abstract void PlatformSetReverbMix(SoundState state, float mix, float pan); public abstract void PlatformSetFilter(SoundState state, FilterMode mode, float filterQ, float frequency); public abstract void PlatformClearFilter(); #region IDisposable ~SoundEffectInstanceStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion } public interface IDynamicSoundEffectInstanceStrategy { DynamicSoundEffectInstance DynamicSoundEffectInstance { get; set; } int BuffersNeeded { get; set; } void DynamicPlatformSubmitBuffer(byte[] buffer, int offset, int count, SoundState state); void DynamicPlatformUpdateBuffers(); void DynamicPlatformClearBuffers(); int DynamicPlatformGetPendingBufferCount(); } } ================================================ FILE: src/Xna.Framework.Audio/Audio/DynamicSoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// /// A for which the audio buffer is provided by the game at run time. /// public sealed class DynamicSoundEffectInstance : SoundEffectInstance { private IDynamicSoundEffectInstanceStrategy _dynamicStrategy; private const int TargetPendingBufferCount = 3; private bool _initialBuffersNeeded; private int _sampleRate; private AudioChannels _channels; private SoundState _dynamicState = SoundState.Stopped; internal LinkedListNode DynamicPlayingInstancesNode { get; private set; } #region Public Properties /// /// This value has no effect on DynamicSoundEffectInstance. /// It may not be set. /// public override bool IsLooped { get { return false; } set { AssertNotDisposed(); if (value == true) throw new InvalidOperationException("IsLooped cannot be set true. Submit looped audio data to implement looping."); } } public override SoundState State { get { AssertNotDisposed(); return _dynamicState; } } /// /// Returns the number of audio buffers queued for playback. /// public int PendingBufferCount { get { AssertNotDisposed(); return _dynamicStrategy.DynamicPlatformGetPendingBufferCount(); } } /// /// The event that occurs when the number of queued audio buffers is less than or equal to 2. /// /// /// This event may occur when is called or during playback when a buffer is completed. /// public event EventHandler BufferNeeded; #endregion #region Public Constructor /// Sample rate, in Hertz (Hz). /// Number of channels (mono or stereo). public DynamicSoundEffectInstance(int sampleRate, AudioChannels channels) : base(AudioService.Current) { if ((sampleRate < 8000) || (sampleRate > 48000)) throw new ArgumentOutOfRangeException("sampleRate"); if ((channels != AudioChannels.Mono) && (channels != AudioChannels.Stereo)) throw new ArgumentOutOfRangeException("channels"); _sampleRate = sampleRate; _channels = channels; // This instance is added to the pool so that its volume reflects master volume changes // and it contributes to the playing instances limit, but the source/voice is not owned by the pool. DynamicPlayingInstancesNode = new LinkedListNode(this); _dynamicStrategy = ((IPlatformAudioService)_audioService).Strategy.CreateDynamicSoundEffectInstanceStrategy(_sampleRate, (int)_channels); _strategy = (SoundEffectInstanceStrategy)_dynamicStrategy; _dynamicStrategy.DynamicSoundEffectInstance = this; } #endregion #region Public Functions /// /// Returns the duration of an audio buffer of the specified size, based on the settings of this instance. /// /// Size of the buffer, in bytes. /// The playback length of the buffer. public TimeSpan GetSampleDuration(int sizeInBytes) { AssertNotDisposed(); return AudioService.GetSampleDuration(sizeInBytes, _sampleRate, _channels); } /// /// Returns the size, in bytes, of a buffer of the specified duration, based on the settings of this instance. /// /// The playback length of the buffer. /// The data size of the buffer, in bytes. public int GetSampleSizeInBytes(TimeSpan duration) { AssertNotDisposed(); return AudioService.GetSampleSizeInBytes(duration, _sampleRate, _channels); } /// /// Pauses playback of the DynamicSoundEffectInstance. /// public override void Pause() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = _dynamicState; switch (state) { case SoundState.Paused: return; case SoundState.Stopped: return; case SoundState.Playing: { _strategy.PlatformPause(); _dynamicState = SoundState.Paused; _initialBuffersNeeded = false; } return; } } } /// /// Plays or resumes the DynamicSoundEffectInstance. /// public override void Play() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = _dynamicState; switch (state) { case SoundState.Playing: return; case SoundState.Paused: Resume(); return; case SoundState.Stopped: { // Ensure that the volume reflects master volume, which is done by the setter. Volume = Volume; _strategy.PlatformPlay(IsLooped); _dynamicState = SoundState.Playing; _initialBuffersNeeded = true; _audioService.AddPlayingInstance(this); _audioService.AddDynamicPlayingInstance(this); } return; } } } /// /// Resumes playback of the DynamicSoundEffectInstance. /// public override void Resume() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = _dynamicState; switch (state) { case SoundState.Playing: return; case SoundState.Stopped: Play(); return; case SoundState.Paused: { Volume = Volume; _strategy.PlatformResume(IsLooped); _dynamicState = SoundState.Playing; } return; } } } /// /// Immediately stops playing the DynamicSoundEffectInstance. /// /// /// Calling this also releases all queued buffers. /// public override void Stop() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = _dynamicState; switch (state) { case SoundState.Stopped: { _dynamicStrategy.DynamicPlatformClearBuffers(); } return; case SoundState.Paused: case SoundState.Playing: { _strategy.PlatformStop(); _dynamicState = SoundState.Stopped; _dynamicStrategy.DynamicPlatformClearBuffers(); _initialBuffersNeeded = false; _audioService.RemovePlayingInstance(this); _audioService.RemoveDynamicPlayingInstance(this); } return; } } } /// /// Stops playing the DynamicSoundEffectInstance. /// /// /// Calling this also releases all queued buffers. /// public override void Stop(bool immediate) { if (immediate) { Stop(); return; } lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Stopped: { _dynamicStrategy.DynamicPlatformClearBuffers(); } return; case SoundState.Paused: case SoundState.Playing: { System.Diagnostics.Debug.Assert(IsLooped == false); _strategy.PlatformRelease(IsLooped); } return; } } } /// /// Queues an audio buffer for playback. /// /// /// The buffer length must conform to alignment requirements for the audio format. /// /// The buffer containing PCM audio data. public void SubmitBuffer(byte[] buffer) { SubmitBuffer(buffer, 0, buffer.Length); } /// /// Queues an audio buffer for playback. /// /// /// The buffer length must conform to alignment requirements for the audio format. /// /// The buffer containing PCM audio data. /// The starting position of audio data. /// The amount of bytes to use. public void SubmitBuffer(byte[] buffer, int offset, int count) { lock (AudioService.SyncHandle) { AssertNotDisposed(); if ((buffer == null) || (buffer.Length == 0)) throw new ArgumentException("Buffer may not be null or empty."); if (count <= 0) throw new ArgumentException("Number of bytes must be greater than zero."); if ((offset + count) > buffer.Length) throw new ArgumentException("Buffer is shorter than the specified number of bytes from the offset."); // Ensure that the buffer length and start position match alignment. int sampleSize = 2 * (int)_channels; if (count % sampleSize != 0) throw new ArgumentException("Number of bytes does not match format alignment."); if (offset % sampleSize != 0) throw new ArgumentException("Offset into the buffer does not match format alignment."); if (PendingBufferCount >= 64) throw new InvalidOperationException("Buffers Limit Exceeded."); _dynamicStrategy.DynamicPlatformSubmitBuffer(buffer, offset, count, _dynamicState); } } #endregion #region Nonpublic Functions internal void Update() { lock (AudioService.SyncHandle) { // Update the buffers _dynamicStrategy.DynamicPlatformUpdateBuffers(); if (this.IsDisposed) return; if (_initialBuffersNeeded) _dynamicStrategy.BuffersNeeded = Math.Max(_dynamicStrategy.BuffersNeeded, TargetPendingBufferCount - 1 - PendingBufferCount); // Raise the event var bufferNeededHandler = BufferNeeded; if (bufferNeededHandler != null) { // raise the event for each processed buffer while(_dynamicStrategy.BuffersNeeded-- != 0) { bufferNeededHandler(this, EventArgs.Empty); if (this.IsDisposed) return; } if (State == SoundState.Playing && PendingBufferCount < TargetPendingBufferCount) bufferNeededHandler(this, EventArgs.Empty); } _initialBuffersNeeded = true; _dynamicStrategy.BuffersNeeded = 0; } } private void AssertNotDisposed() { if (IsDisposed) throw new ObjectDisposedException("DynamicSoundEffectInstance"); } protected override void Dispose(bool disposing) { if(disposing) { if (_dynamicStrategy !=null) _dynamicStrategy.DynamicSoundEffectInstance = null; base.Dispose(disposing); _dynamicStrategy = null; DynamicPlayingInstancesNode = null; } else { if (_dynamicStrategy != null) _dynamicStrategy.DynamicSoundEffectInstance = null; base.Dispose(disposing); _dynamicStrategy = null; DynamicPlayingInstancesNode = null; } } #endregion } } ================================================ FILE: src/Xna.Framework.Audio/Audio/InstancePlayLimitException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Audio { /// /// The exception thrown when the system attempts to play more SoundEffectInstances than allotted. /// /// /// Most platforms have a hard limit on how many sounds can be played simultaneously. This exception is thrown when that limit is exceeded. /// [DataContract] public sealed class InstancePlayLimitException : Exception { } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Microphone.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// /// Microphone state. /// public enum MicrophoneState { Started, Stopped } /// /// Provides microphones capture features. /// public sealed class Microphone { MicrophoneStrategy _strategy { get; set; } #region Internal Constructors internal Microphone() : this(null) { } internal Microphone(string name) { Name = name; _strategy = AudioFactory.Current.CreateMicrophoneStrategy(); } #endregion #region Public Fields /// /// Returns the friendly name of the microphone. /// public readonly string Name; #endregion #region Public Properties /// /// Gets or sets the capture buffer duration. This value must be greater than 100 milliseconds, lower than 1000 milliseconds, and must be 10 milliseconds aligned (BufferDuration % 10 == 10). /// public TimeSpan BufferDuration { get { return _strategy.BufferDuration; } set { if (value.TotalMilliseconds < 100 || value.TotalMilliseconds > 1000) throw new ArgumentOutOfRangeException("Buffer duration must be a value between 100 and 1000 milliseconds."); if (value.TotalMilliseconds % 10 != 0) throw new ArgumentOutOfRangeException("Buffer duration must be 10ms aligned (BufferDuration % 10 == 0)"); _strategy.BufferDuration = value; } } /// /// Determines if the microphone is a wired headset. /// Note: XNA could know if a headset microphone was plugged in an Xbox 360 controller but MonoGame can't. /// public bool IsHeadset { get { return _strategy.PlatformIsHeadset(); } } /// /// Returns the sample rate of the captured audio. /// Note: default value is 44100hz /// public int SampleRate { get { return _strategy.SampleRate; } } /// /// Returns the state of the Microphone. /// public MicrophoneState State { get { return _strategy.State; } } #endregion #region Static Members private static ReadOnlyCollection _readOnlyMicrophones = null; /// /// Returns all compatible microphones. /// public static ReadOnlyCollection All { get { if (_readOnlyMicrophones == null) _readOnlyMicrophones = new ReadOnlyCollection(AudioService.Current._microphones); return _readOnlyMicrophones; } } /// /// Returns the default microphone. /// public static Microphone Default { get { return AudioService.Current._defaultMicrophone; } } #endregion #region Public Methods /// /// Returns the duration based on the size of the buffer (assuming 16-bit PCM data). /// /// Size, in bytes /// TimeSpan of the duration. public TimeSpan GetSampleDuration(int sizeInBytes) { return _strategy.GetSampleDuration(sizeInBytes); } /// /// Returns the size, in bytes, of the array required to hold the specified duration of 16-bit PCM data. /// /// TimeSpan of the duration of the sample. /// Size, in bytes, of the buffer. public int GetSampleSizeInBytes(TimeSpan duration) { // this should be 10ms aligned // this assumes 16bit mono data return _strategy.GetSampleSizeInBytes(duration); } /// /// Starts microphone capture. /// public void Start() { MicrophoneState state = State; switch (state) { case MicrophoneState.Started: return; case MicrophoneState.Stopped: { _strategy.PlatformStart(Name); _strategy.State = MicrophoneState.Started; } return; } } /// /// Stops microphone capture. /// public void Stop() { MicrophoneState state = State; switch (state) { case MicrophoneState.Started: { _strategy.PlatformStop(); _strategy.State = MicrophoneState.Stopped; } return; case MicrophoneState.Stopped: return; } } /// /// Gets the latest available data from the microphone. /// /// Buffer, in bytes, of the captured data (16-bit PCM). /// The buffer size, in bytes, of the captured data. public int GetData(byte[] buffer) { return GetData(buffer, 0, buffer.Length); } /// /// Gets the latest available data from the microphone. /// /// Buffer, in bytes, of the captured data (16-bit PCM). /// Byte offset. /// Amount, in bytes. /// The buffer size, in bytes, of the captured data. public int GetData(byte[] buffer, int offset, int count) { if (State == MicrophoneState.Stopped || BufferReady == null) return 0; return _strategy.PlatformGetData(buffer, offset, count); } #endregion #region Public Events /// /// Event fired when the audio data are available. /// public event EventHandler BufferReady; #endregion internal void UpdateBuffer() { MicrophoneState state = State; switch (state) { case MicrophoneState.Started: { var handler = BufferReady; if (handler == null) return; if (_strategy.PlatformUpdate()) handler.Invoke(this, EventArgs.Empty); } return; case MicrophoneState.Stopped: return; } } #region Static Methods #endregion } } ================================================ FILE: src/Xna.Framework.Audio/Audio/NoAudioHardwareException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Audio { /// /// The exception thrown when no audio hardware is present, or driver issues are detected. /// [DataContract] public sealed class NoAudioHardwareException : Exception { /// A message describing the error. public NoAudioHardwareException(string msg) : base(msg) { } /// A message describing the error. /// The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. public NoAudioHardwareException(string msg, Exception innerException) : base(msg, innerException) { } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/NoMicrophoneConnectedException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Audio { /// /// The exception thrown when no audio hardware is present, or driver issues are detected. /// [DataContract] public sealed class NoMicrophoneConnectedException : Exception { public NoMicrophoneConnectedException() : base() { } /// A message describing the error. public NoMicrophoneConnectedException(string msg) : base(msg) { } /// A message describing the error. /// The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. public NoMicrophoneConnectedException(string msg, Exception innerException) : base(msg, innerException) { } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/SoundEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos  using System; using System.IO; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// Represents a loaded sound resource. /// /// A SoundEffect represents the buffer used to hold audio data and metadata. SoundEffectInstances are used to play from SoundEffects. Multiple SoundEffectInstance objects can be created and played from the same SoundEffect object. /// The only limit on the number of loaded SoundEffects is restricted by available memory. When a SoundEffect is disposed, all SoundEffectInstances created from it will become invalid. /// SoundEffect.Play() can be used for 'fire and forget' sounds. If advanced playback controls like volume or pitch is required, use SoundEffect.CreateInstance(). /// public sealed class SoundEffect : IDisposable { #region Internal Audio Data private string _name = string.Empty; private bool _isDisposed = false; private readonly TimeSpan _duration; #endregion internal SoundEffectStrategy _strategy { get; set; } #region Internal Constructors // Only used from SoundEffect.FromStream. private SoundEffect(Stream stream) { /* The Stream object must point to the head of a valid PCM wave file. Also, this wave file must be in the RIFF bitstream format. The audio format has the following restrictions: Must be a PCM wave file Can only be mono or stereo Must be 8 or 16 bit Sample rate must be between 8,000 Hz and 48,000 Hz */ _strategy = AudioFactory.Current.CreateSoundEffectStrategy(); _strategy.PlatformLoadAudioStream(stream, out _duration); } // Only used from SoundEffectReader. internal SoundEffect(byte[] header, byte[] buffer, int bufferSize, int durationMs, int loopStart, int loopLength) { _duration = TimeSpan.FromMilliseconds(durationMs); _strategy = AudioFactory.Current.CreateSoundEffectStrategy(); _strategy.PlatformInitializeFormat(header, buffer, 0, bufferSize, loopStart, loopLength); } // Only used from XACT WaveBank. internal SoundEffect(MiniFormatTag codec, byte[] buffer, int channels, int sampleRate, int blockAlignment, int loopStart, int loopLength) { _strategy = AudioFactory.Current.CreateSoundEffectStrategy(); switch(codec) { // Handle the common case... the rest is platform specific. case MiniFormatTag.Pcm: _duration = TimeSpan.FromSeconds((float)buffer.Length / (sampleRate * blockAlignment)); _strategy.PlatformInitializePcm(buffer, 0, buffer.Length, 16, sampleRate, channels, loopStart, loopLength); return; case MiniFormatTag.Adpcm: _duration = TimeSpan.FromSeconds((float)loopLength / sampleRate); _strategy.PlatformInitializeXactAdpcm(buffer, 0, buffer.Length, channels, sampleRate, blockAlignment, loopStart, loopLength); return; default: throw new NotSupportedException("Unsupported sound format!"); } } #endregion #region Public Constructors /// /// Create a sound effect. /// /// The buffer with the sound data. /// The sound data sample rate in hertz. /// The number of channels in the sound data. /// This only supports uncompressed 16bit PCM wav data. public SoundEffect(byte[] buffer, int sampleRate, AudioChannels channels) : this(buffer, 0, buffer != null ? buffer.Length : 0, sampleRate, channels, 0, 0) { } /// /// Create a sound effect. /// /// The buffer with the sound data. /// The offset to the start of the sound data in bytes. /// The length of the sound data in bytes. /// The sound data sample rate in hertz. /// The number of channels in the sound data. /// The position where the sound should begin looping in samples. /// The duration of the sound data loop in samples. /// This only supports uncompressed 16bit PCM wav data. public SoundEffect(byte[] buffer, int offset, int count, int sampleRate, AudioChannels channels, int loopStart, int loopLength) { if (sampleRate < 8000 || sampleRate > 48000) throw new ArgumentOutOfRangeException("sampleRate"); if ((int)channels != 1 && (int)channels != 2) throw new ArgumentOutOfRangeException("channels"); if (buffer == null || buffer.Length == 0) throw new ArgumentException("Ensure that the buffer length is non-zero.", "buffer"); int blockAlign = (int)channels * 2; if (count <= 0) throw new ArgumentException("Ensure that the count is greater than zero.", "count"); if ((count % blockAlign) != 0) throw new ArgumentException("Ensure that the count meets the block alignment requirements for the number of channels.", "count"); if (offset < 0) throw new ArgumentException("The offset cannot be negative.", "offset"); if (((ulong)count + (ulong)offset) > (ulong)buffer.Length) throw new ArgumentException("Ensure that the offset+count region lines within the buffer.", "offset"); int totalSamples = count / blockAlign; if (loopStart < 0) throw new ArgumentException("The loopStart cannot be negative.", "loopStart"); if (loopStart > totalSamples) throw new ArgumentException("The loopStart cannot be greater than the total number of samples.", "loopStart"); if (loopLength == 0) loopLength = totalSamples - loopStart; if (loopLength < 0) throw new ArgumentException("The loopLength cannot be negative.", "loopLength"); if (((ulong)loopStart + (ulong)loopLength) > (ulong)totalSamples) throw new ArgumentException("Ensure that the loopStart+loopLength region lies within the sample range.", "loopLength"); _duration = AudioService.GetSampleDuration(count, sampleRate, channels); _strategy = AudioFactory.Current.CreateSoundEffectStrategy(); _strategy.PlatformInitializePcm(buffer, offset, count, 16, sampleRate, (int)channels, loopStart, loopLength); } #endregion #region Finalizer /// /// Releases unmanaged resources and performs other cleanup operations before the /// is reclaimed by garbage collection. /// ~SoundEffect() { Dispose(false); } #endregion #region Additional SoundEffect/SoundEffectInstance Creation Methods /// /// Creates a new SoundEffectInstance for this SoundEffect. /// /// A new SoundEffectInstance for this SoundEffect. /// Creating a SoundEffectInstance before calling SoundEffectInstance.Play() allows you to access advanced playback features, such as volume, pitch, and 3D positioning. public SoundEffectInstance CreateInstance() { return new SoundEffectInstance(AudioService.Current, this); } /// /// Creates a new SoundEffect object based on the specified data stream. /// /// A stream containing the wave data. /// A new SoundEffect object. /// The stream must point to the head of a valid wave file in the RIFF bitstream format. The formats supported are: /// /// /// 8-bit unsigned PCM /// 16-bit signed PCM /// 24-bit signed PCM /// 32-bit IEEE float PCM /// MS-ADPCM 4-bit compressed /// IMA/ADPCM (IMA4) 4-bit compressed /// /// /// public static SoundEffect FromStream(Stream stream) { if (stream == null) throw new ArgumentNullException("stream"); return new SoundEffect(stream); } #endregion #region Play /// Gets an internal SoundEffectInstance and plays it. /// True if a SoundEffectInstance was successfully played, false if not. /// /// Play returns false if more SoundEffectInstances are currently playing then the platform allows. /// To loop a sound or apply 3D effects, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. /// SoundEffectInstances used by SoundEffect.Play() are pooled internally. /// public bool Play() { return AudioService.Current.Play(this); } /// Gets an internal SoundEffectInstance and plays it with the specified volume, pitch, and panning. /// True if a SoundEffectInstance was successfully created and played, false if not. /// Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. /// Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). /// Panning, ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). /// /// Play returns false if more SoundEffectInstances are currently playing then the platform allows. /// To apply looping or simulate 3D audio, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. /// SoundEffectInstances used by SoundEffect.Play() are pooled internally. /// public bool Play(float volume, float pitch, float pan) { return AudioService.Current.Play(this, volume, pitch, pan); } #endregion #region Public Properties /// Gets the duration of the SoundEffect. public TimeSpan Duration { get { if (_duration.Ticks == 0) throw new NotSupportedException(); return _duration; } } /// Gets or sets the asset name of the SoundEffect. public string Name { get { return _name; } set { _name = value; } } #endregion #region Static Members static float _masterVolume = 1.0f; /// /// Gets or sets the master volume scale applied to all SoundEffectInstances. /// /// /// Each SoundEffectInstance has its own Volume property that is independent to SoundEffect.MasterVolume. During playback SoundEffectInstance.Volume is multiplied by SoundEffect.MasterVolume. /// This property is used to adjust the volume on all current and newly created SoundEffectInstances. The volume of an individual SoundEffectInstance can be adjusted on its own. /// public static float MasterVolume { get { return _masterVolume; } set { if (value < 0.0f || value > 1.0f) throw new ArgumentOutOfRangeException(); if (_masterVolume == value) return; _masterVolume = value; AudioService.UpdateMasterVolume(); } } static float _distanceScale = 1.0f; /// /// Gets or sets the scale of distance calculations. /// /// /// DistanceScale defaults to 1.0 and must be greater than 0.0. /// Higher values reduce the rate of falloff between the sound and listener. /// public static float DistanceScale { get { return _distanceScale; } set { if (value <= 0f) throw new ArgumentOutOfRangeException("value", "value of DistanceScale"); _distanceScale = value; } } static float _dopplerScale = 1f; /// /// Gets or sets the scale of Doppler calculations applied to sounds. /// /// /// DopplerScale defaults to 1.0 and must be greater or equal to 0.0 /// Affects the relative velocity of emitters and listeners. /// Higher values more dramatically shift the pitch for the given relative velocity of the emitter and listener. /// public static float DopplerScale { get { return _dopplerScale; } set { // As per documenation it does not look like the value can be less than 0 // although the documentation does not say it throws an error we will anyway // just so it is like the DistanceScale if (value < 0.0f) throw new ArgumentOutOfRangeException("value", "value of DopplerScale"); _dopplerScale = value; } } static float speedOfSound = 343.5f; /// Returns the speed of sound used when calculating the Doppler effect.. /// /// Defaults to 343.5. Value is measured in meters per second. /// Has no effect on distance attenuation. /// public static float SpeedOfSound { get { return speedOfSound; } set { if (value <= 0.0f) throw new ArgumentOutOfRangeException(); speedOfSound = value; } } #endregion #region IDisposable Members /// Indicates whether the object is disposed. public bool IsDisposed { get { return _isDisposed; } } /// Releases the resources held by this . public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases the resources held by this . /// /// If set to true, Dispose was called explicitly. /// If the disposing parameter is true, the Dispose method was called explicitly. This /// means that managed objects referenced by this instance should be disposed or released as /// required. If the disposing parameter is false, Dispose was called by the finalizer and /// no managed objects should be touched because we do not know if they are still valid or /// not at that time. Unmanaged resources should always be released. void Dispose(bool disposing) { if (disposing) { lock (AudioService.SyncHandle) { if (IsDisposed) return; // Clean up managed objects // Clean up unmanaged resources AudioService.OnEffectDisposed(this, disposing); _strategy.Dispose(); _strategy = null; _isDisposed = true; } } else { lock (AudioService.SyncHandle) { if (IsDisposed) return; // Clean up unmanaged resources AudioService.OnEffectDisposed(this, disposing); } } } #endregion } } ================================================ FILE: src/Xna.Framework.Audio/Audio/SoundEffectInstance.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// Represents a single instance of a playing, paused, or stopped sound. /// /// SoundEffectInstances are created through SoundEffect.CreateInstance() and used internally by SoundEffect.Play() /// public class SoundEffectInstance : IPlatformSoundEffectInstance, IDisposable { internal AudioService _audioService { get; private set; } internal SoundEffectInstanceStrategy _strategy; internal LinkedListNode PlayingInstancesNode { get; private set; } internal LinkedListNode PooledInstancesNode { get; private set; } private SoundState _state = SoundState.Stopped; private bool _isDisposed = false; internal SoundEffect _effect; /// Enables or Disables whether the SoundEffectInstance should repeat after playback. /// This value has no effect on an already playing sound. public virtual bool IsLooped { get { return _strategy.IsLooped; } set { if (value == _strategy.IsLooped) return; // XNA will throw an InvalidOperationException if you change 'IsLooped' // after the first call to 'Play()' // If the audio platform can't release or resume loop while a sound is playing // it's preferred to throw an exception in 'PlatformSetIsLooped()' _strategy.PlatformSetIsLooped(value, State); _strategy.IsLooped = value; } } /// Gets or sets the pan, or speaker balance.. /// Pan value ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). Values outside of this range will throw an exception. /// In OpenAL Panning/3D works only with mono sounds. public float Pan { get { return _strategy.Pan; } set { if (value < -1.0f || value > 1.0f) throw new ArgumentOutOfRangeException(); _strategy.Pan = value; } } /// Gets or sets the pitch adjustment. /// Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). Values outside of this range will throw an Exception. public float Pitch { get { return _strategy.Pitch; } set { // XAct sounds effects don't have pitch limits if (!_strategy.IsXAct && (value < -1.0f || value > 1.0f)) throw new ArgumentOutOfRangeException(); _strategy.Pitch = value; } } /// Gets or sets the volume of the SoundEffectInstance. /// Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. /// /// This is the volume relative to SoundEffect.MasterVolume. Before playback, this Volume property is multiplied by SoundEffect.MasterVolume when determining the final mix volume. /// public float Volume { get { return _strategy.Volume; } set { // XAct sound effects don't have volume limits. if (!_strategy.IsXAct && (value < 0.0f || value > 1.0f)) throw new ArgumentOutOfRangeException(); _strategy.Volume = value; } } /// Gets the SoundEffectInstance's current playback state. public virtual SoundState State { get { lock (AudioService.SyncHandle) { UpdateState(); return _state; } } } /// Indicates whether the object is disposed. public bool IsDisposed { get { return _isDisposed; } } T IPlatformSoundEffectInstance.GetStrategy() { return (T)_strategy; } internal SoundEffectInstance(AudioService audioService) { System.Diagnostics.Debug.Assert(audioService != null); _audioService = audioService; _effect = null; PlayingInstancesNode = new LinkedListNode(this); PooledInstancesNode = null; } internal SoundEffectInstance(AudioService audioService, SoundEffect effect, bool isPooled = false, bool isXAct = false) { System.Diagnostics.Debug.Assert(audioService != null); System.Diagnostics.Debug.Assert(effect != null); _audioService = audioService; _effect = effect; PlayingInstancesNode = new LinkedListNode(this); PooledInstancesNode = (isPooled) ? new LinkedListNode(this) : null; _strategy = ((IPlatformAudioService)audioService).Strategy.CreateSoundEffectInstanceStrategy(_effect._strategy); _strategy.IsXAct = isXAct; } /// /// Releases unmanaged resources and performs other cleanup operations before the /// is reclaimed by garbage collection. /// ~SoundEffectInstance() { Dispose(false); } /// Applies 3D positioning to the SoundEffectInstance using a single listener. /// Data about the listener. /// Data about the source of emission. public void Apply3D(AudioListener listener, AudioEmitter emitter) { _strategy.PlatformApply3D(listener, emitter); } /// Applies 3D positioning to the SoundEffectInstance using multiple listeners. /// Data about each listener. /// Data about the source of emission. /// In OpenAL Panning/3D works only with mono sounds. public void Apply3D(AudioListener[] listeners, AudioEmitter emitter) { foreach (AudioListener listener in listeners) _strategy.PlatformApply3D(listener, emitter); } /// Pauses playback of a SoundEffectInstance. /// Paused instances can be resumed with SoundEffectInstance.Play() or SoundEffectInstance.Resume(). public virtual void Pause() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Paused: return; case SoundState.Stopped: return; case SoundState.Playing: { _strategy.PlatformPause(); _state = SoundState.Paused; } return; } } } /// Plays or resumes a SoundEffectInstance. /// Throws an exception if more sounds are playing than the platform allows. public virtual void Play() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Playing: return; case SoundState.Paused: Resume(); return; case SoundState.Stopped: { // we need to be sure the latest // master volume level is applied before playback. _strategy.Volume = _strategy.Volume; _strategy.PlatformPlay(_strategy.IsLooped); _state = SoundState.Playing; _audioService.AddPlayingInstance(this); } return; } } } /// Resumes playback for a SoundEffectInstance. // Only has effect on a SoundEffectInstance in a paused state. // In XNA 'Resume()' behaves exactly like 'Play()'. public virtual void Resume() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Playing: return; case SoundState.Stopped: Play(); return; case SoundState.Paused: { _strategy.PlatformResume(_strategy.IsLooped); _state = SoundState.Playing; } return; } } } /// Immediately stops playing a SoundEffectInstance. public virtual void Stop() { lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Stopped: return; case SoundState.Paused: case SoundState.Playing: { _strategy.PlatformStop(); _state = SoundState.Stopped; _audioService.RemovePlayingInstance(this); } return; } } } /// Stops playing a SoundEffectInstance, either immediately or as authored. /// Determined whether the sound stops immediately, or after playing its release phase and/or transitions. /// Stopping a sound with the immediate argument set to false will allow it to play any release phases, such as fade, before coming to a stop. public virtual void Stop(bool immediate) { if (immediate) { Stop(); return; } lock (AudioService.SyncHandle) { AssertNotDisposed(); SoundState state = State; switch (state) { case SoundState.Stopped: return; case SoundState.Paused: case SoundState.Playing: _strategy.PlatformRelease(_strategy.IsLooped); return; } } } internal void UpdateState() { if (_strategy.PlatformUpdateState(ref _state)) { if (_state == SoundState.Stopped) { _audioService.RemovePlayingInstance(this); _audioService.AddPooledInstance(this); } } } internal void SetReverbMix(float reverbMix) { _strategy.PlatformSetReverbMix(State, reverbMix, _strategy.Pan); } internal void SetFilter(FilterMode mode, float filterQ, float frequency) { _strategy.PlatformSetFilter(State, mode, filterQ, frequency); } /// /// Reset used instance to the "default" state. /// internal void Reset() { Volume = 1.0f; Pan = 0.0f; Pitch = 0.0f; IsLooped = false; SetReverbMix(0); _strategy.PlatformClearFilter(); } /// Releases the resources held by this . public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases the resources held by this . /// /// If set to true, Dispose was called explicitly. /// If the disposing parameter is true, the Dispose method was called explicitly. This /// means that managed objects referenced by this instance should be disposed or released as /// required. If the disposing parameter is false, Dispose was called by the finalizer and /// no managed objects should be touched because we do not know if they are still valid or /// not at that time. Unmanaged resources should always be released. protected virtual void Dispose(bool disposing) { if (disposing) { lock (AudioService.SyncHandle) { if (_isDisposed) return; if (_strategy != null) { Stop(); _strategy.Dispose(); _strategy = null; } _audioService = null; _effect = null; PlayingInstancesNode = null; PooledInstancesNode = null; _isDisposed = true; } } else { lock (AudioService.SyncHandle) { if (_isDisposed) return; if (_strategy != null) { Stop(); _strategy = null; } _audioService = null; _effect = null; PlayingInstancesNode = null; PooledInstancesNode = null; _isDisposed = true; } } } private void AssertNotDisposed() { if (IsDisposed) throw new ObjectDisposedException("SoundEffectInstance"); } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/SoundState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Audio { /// Described the playback state of a SoundEffectInstance. public enum SoundState { /// The SoundEffectInstance is currently playing. Playing, /// The SoundEffectInstance is currently paused. Paused, /// The SoundEffectInstance is currently stopped. Stopped } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Utilities/AudioUtil.cs ================================================ using System; using System.IO; namespace Microsoft.Xna.Framework.Audio { internal static class AudioUtil { /// /// Takes WAV data and appends a header to it. /// internal static byte[] FormatWavData(byte[] buffer, int sampleRate, int channels) { //buffer should contain 16-bit PCM wave data short bitsPerSample = 16; using (MemoryStream mStream = new MemoryStream(44+buffer.Length)) using (BinaryWriter writer = new BinaryWriter(mStream)) { writer.Write("RIFF".ToCharArray()); //chunk id writer.Write((int)(36 + buffer.Length)); //chunk size writer.Write("WAVE".ToCharArray()); //RIFF type writer.Write("fmt ".ToCharArray()); //chunk id writer.Write((int)16); //format header size writer.Write((short)1); //format (PCM) writer.Write((short)channels); writer.Write((int)sampleRate); short blockAlign = (short)((bitsPerSample / 8) * (int)channels); writer.Write((int)(sampleRate * blockAlign)); //byte rate writer.Write((short)blockAlign); writer.Write((short)bitsPerSample); writer.Write("data".ToCharArray()); //chunk id writer.Write((int)buffer.Length); //data size writer.Write(buffer); return mStream.ToArray(); } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Utilities/MsAdpcmDecoder.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Platform.Audio.Utilities { public static class MsAdpcmDecoder { #region MS-ADPCM decoding static int[] adaptationTable = new int[] { 230, 230, 230, 230, 307, 409, 512, 614, 768, 614, 512, 409, 307, 230, 230, 230 }; static int[] adaptationCoeff1 = new int[] { 256, 512, 0, 192, 240, 460, 392 }; static int[] adaptationCoeff2 = new int[] { 0, -256, 0, 64, 0, -208, -232 }; struct MsAdpcmState { public int delta; public int sample1; public int sample2; public int coeff1; public int coeff2; } static int MsAdpcmExpandNibble(ref MsAdpcmState channel, int nibble) { int nibbleSign = nibble - (((nibble & 0x08) != 0) ? 0x10 : 0); int predictor = ((channel.sample1 * channel.coeff1) + (channel.sample2 * channel.coeff2)) / 256 + (nibbleSign * channel.delta); if (predictor < -32768) predictor = -32768; else if (predictor > 32767) predictor = 32767; channel.sample2 = channel.sample1; channel.sample1 = predictor; channel.delta = (adaptationTable[nibble] * channel.delta) / 256; if (channel.delta < 16) channel.delta = 16; return predictor; } // Convert buffer containing MS-ADPCM wav data to a 16-bit signed PCM buffer public static byte[] ConvertMsAdpcmToPcm(byte[] buffer, int offset, int count, int channels, int blockAlignment) { MsAdpcmState channel0 = new MsAdpcmState(); MsAdpcmState channel1 = new MsAdpcmState(); int blockPredictor; int sampleCountFullBlock = ((blockAlignment / channels) - 7) * 2 + 2; int sampleCountLastBlock = 0; if ((count % blockAlignment) > 0) sampleCountLastBlock = (((count % blockAlignment) / channels) - 7) * 2 + 2; int sampleCount = ((count / blockAlignment) * sampleCountFullBlock) + sampleCountLastBlock; byte[] samples = new byte[sampleCount * sizeof(short) * channels]; int sampleOffset = 0; bool stereo = channels == 2; while (count > 0) { int blockSize = blockAlignment; if (count < blockSize) blockSize = count; count -= blockAlignment; int totalSamples = ((blockSize / channels) - 7) * 2 + 2; if (totalSamples < 2) break; int offsetStart = offset; blockPredictor = buffer[offset]; ++offset; if (blockPredictor > 6) blockPredictor = 6; channel0.coeff1 = adaptationCoeff1[blockPredictor]; channel0.coeff2 = adaptationCoeff2[blockPredictor]; if (stereo) { blockPredictor = buffer[offset]; ++offset; if (blockPredictor > 6) blockPredictor = 6; channel1.coeff1 = adaptationCoeff1[blockPredictor]; channel1.coeff2 = adaptationCoeff2[blockPredictor]; } channel0.delta = buffer[offset]; channel0.delta |= buffer[offset + 1] << 8; if ((channel0.delta & 0x8000) != 0) channel0.delta -= 0x10000; offset += 2; if (stereo) { channel1.delta = buffer[offset]; channel1.delta |= buffer[offset + 1] << 8; if ((channel1.delta & 0x8000) != 0) channel1.delta -= 0x10000; offset += 2; } channel0.sample1 = buffer[offset]; channel0.sample1 |= buffer[offset + 1] << 8; if ((channel0.sample1 & 0x8000) != 0) channel0.sample1 -= 0x10000; offset += 2; if (stereo) { channel1.sample1 = buffer[offset]; channel1.sample1 |= buffer[offset + 1] << 8; if ((channel1.sample1 & 0x8000) != 0) channel1.sample1 -= 0x10000; offset += 2; } channel0.sample2 = buffer[offset]; channel0.sample2 |= buffer[offset + 1] << 8; if ((channel0.sample2 & 0x8000) != 0) channel0.sample2 -= 0x10000; offset += 2; if (stereo) { channel1.sample2 = buffer[offset]; channel1.sample2 |= buffer[offset + 1] << 8; if ((channel1.sample2 & 0x8000) != 0) channel1.sample2 -= 0x10000; offset += 2; } if (stereo) { samples[sampleOffset] = (byte)channel0.sample2; samples[sampleOffset + 1] = (byte)(channel0.sample2 >> 8); samples[sampleOffset + 2] = (byte)channel1.sample2; samples[sampleOffset + 3] = (byte)(channel1.sample2 >> 8); samples[sampleOffset + 4] = (byte)channel0.sample1; samples[sampleOffset + 5] = (byte)(channel0.sample1 >> 8); samples[sampleOffset + 6] = (byte)channel1.sample1; samples[sampleOffset + 7] = (byte)(channel1.sample1 >> 8); sampleOffset += 8; } else { samples[sampleOffset] = (byte)channel0.sample2; samples[sampleOffset + 1] = (byte)(channel0.sample2 >> 8); samples[sampleOffset + 2] = (byte)channel0.sample1; samples[sampleOffset + 3] = (byte)(channel0.sample1 >> 8); sampleOffset += 4; } blockSize -= (offset - offsetStart); if (stereo) { for (int i = 0; i < blockSize; ++i) { int nibbles = buffer[offset]; int sample = MsAdpcmExpandNibble(ref channel0, nibbles >> 4); samples[sampleOffset] = (byte)sample; samples[sampleOffset + 1] = (byte)(sample >> 8); sample = MsAdpcmExpandNibble(ref channel1, nibbles & 0x0f); samples[sampleOffset + 2] = (byte)sample; samples[sampleOffset + 3] = (byte)(sample >> 8); sampleOffset += 4; ++offset; } } else { for (int i = 0; i < blockSize; ++i) { int nibbles = buffer[offset]; int sample = MsAdpcmExpandNibble(ref channel0, nibbles >> 4); samples[sampleOffset] = (byte)sample; samples[sampleOffset + 1] = (byte)(sample >> 8); sample = MsAdpcmExpandNibble(ref channel0, nibbles & 0x0f); samples[sampleOffset + 2] = (byte)sample; samples[sampleOffset + 3] = (byte)(sample >> 8); sampleOffset += 4; ++offset; } } } return samples; } #endregion } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/AudioCategory.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Collections.Generic; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// /// Provides functionality for manipulating multiple sounds at a time. /// public struct AudioCategory : IEquatable { readonly string _name; readonly AudioEngine _engine; readonly List _sounds; // This is a bit gross, but we use an array here // instead of a field since AudioCategory is a struct // This allows us to save _volume when the user // holds onto a reference of AudioCategory, or when a cue // is created/loaded after the volume's already been set. internal float[] _volume; internal bool isBackgroundMusic; internal bool isPublic; internal bool instanceLimit; internal int maxInstances; internal MaxInstanceBehavior InstanceBehavior; internal CrossfadeType fadeType; internal float fadeIn; internal float fadeOut; internal AudioCategory(AudioEngine audioengine, string name, BinaryReader reader) { Debug.Assert(audioengine != null); Debug.Assert(!string.IsNullOrEmpty(name)); _sounds = new List(); _name = name; _engine = audioengine; maxInstances = reader.ReadByte(); instanceLimit = maxInstances != 0xff; fadeIn = (reader.ReadUInt16() / 1000f); fadeOut = (reader.ReadUInt16() / 1000f); byte instanceFlags = reader.ReadByte(); fadeType = (CrossfadeType)(instanceFlags & 0x7); InstanceBehavior = (MaxInstanceBehavior)(instanceFlags >> 3); reader.ReadUInt16(); //unkn float volume = XactHelpers.ParseVolumeFromDecibels(reader.ReadByte()); _volume = new float[1] { volume }; byte visibilityFlags = reader.ReadByte(); isBackgroundMusic = (visibilityFlags & 0x1) != 0; isPublic = (visibilityFlags & 0x2) != 0; } internal void AddSound(XactSound sound) { _sounds.Add(sound); } internal int GetPlayingInstanceCount() { int sum = 0; for (int i = 0; i < _sounds.Count; i++) { if (_sounds[i].Playing) sum++; } return sum; } internal XactSound GetOldestInstance() { for (int i = 0; i < _sounds.Count; i++) { if (_sounds[i].Playing) return _sounds[i]; } return null; } /// /// Gets the category's friendly name. /// public string Name { get { return _name; } } /// /// Pauses all associated sounds. /// public void Pause() { foreach (XactSound sound in _sounds) sound.Pause(); } /// /// Resumes all associated paused sounds. /// public void Resume() { foreach (XactSound sound in _sounds) sound.Resume(); } /// /// Stops all associated sounds. /// public void Stop(AudioStopOptions options) { foreach (XactSound sound in _sounds) sound.Stop(options); } /// /// Set the volume for this . /// /// The new volume of the category. /// If the volume is less than zero. public void SetVolume(float volume) { if (volume < 0) throw new ArgumentException("The volume must be positive."); // Updating all the sounds in a category can be // very expensive... so avoid it if we can. if (_volume[0] == volume) return; _volume[0] = volume; foreach (XactSound sound in _sounds) sound.UpdateCategoryVolume(volume); } /// /// Determines whether two AudioCategory instances are equal. /// /// First AudioCategory instance to compare. /// Second AudioCategory instance to compare. /// true if the objects are equal or false if they aren't. public static bool operator ==(AudioCategory left, AudioCategory right) { return left._engine == right._engine && left._name.Equals(right._name, StringComparison.Ordinal); } /// /// Determines whether two AudioCategory instances are not equal. /// /// First AudioCategory instance to compare. /// Second AudioCategory instance to compare. /// true if the objects are not equal or false if they are. public static bool operator !=(AudioCategory left, AudioCategory second) { return left._engine != second._engine || !left._name.Equals(second._name, StringComparison.Ordinal); } /// /// Determines whether two AudioCategory instances are equal. /// /// AudioCategory to compare with this instance. /// true if the objects are equal or false if they aren't public bool Equals(AudioCategory other) { return _engine == other._engine && _name.Equals(other._name, StringComparison.Ordinal); } /// /// Determines whether two AudioCategory instances are equal. /// /// Object to compare with this instance. /// true if the objects are equal or false if they aren't. public override bool Equals(object obj) { if (obj is AudioCategory) { AudioCategory other = (AudioCategory)obj; return _engine == other._engine && _name.Equals(other._name, StringComparison.Ordinal); } return false; } /// /// Gets the hash code for this instance. /// /// Hash code for this object. public override int GetHashCode() { return _name.GetHashCode() ^ _engine.GetHashCode(); } /// /// Returns the name of this AudioCategory /// /// Friendly name of the AudioCategory public override string ToString() { return _name; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/AudioEngine.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Collections.Generic; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// /// Class used to create and manipulate code audio objects. /// public class AudioEngine : IDisposable { private readonly AudioCategory[] _categories; private readonly Dictionary _categoryLookup = new Dictionary(); private readonly RpcVariable[] _variables; private readonly Dictionary _variableLookup = new Dictionary(); private readonly RpcVariable[] _cueVariables; private readonly Stopwatch _stopwatch; private TimeSpan _lastUpdateTime; private readonly ReverbSettings _reverbSettings; private readonly RpcCurve[] _reverbCurves; internal List ActiveCues = new List(); internal AudioCategory[] Categories { get { return _categories; } } internal Dictionary Wavebanks = new Dictionary(); internal readonly RpcCurve[] RpcCurves; internal readonly object UpdateLock = new object(); internal RpcVariable[] CreateCueVariables() { RpcVariable[] clone = new RpcVariable[_cueVariables.Length]; Array.Copy(_cueVariables, clone, _cueVariables.Length); return clone; } /// /// The current content version. /// public const int ContentVersion = 39; /// Path to a XACT settings file. public AudioEngine(string settingsFile) : this(settingsFile, TimeSpan.Zero, "") { } /// Path to a XACT settings file. /// Determines how many milliseconds the engine will look ahead when determing when to transition to another sound. /// A string that specifies the audio renderer to use. /// For the best results, use a lookAheadTime of 250 milliseconds or greater. public AudioEngine(string settingsFile, TimeSpan lookAheadTime, string rendererId) { if (string.IsNullOrEmpty(settingsFile)) throw new ArgumentNullException("settingsFile"); // Read the xact settings file // Credits to alisci01 for initial format documentation using (Stream stream = TitleContainer.OpenStream(settingsFile)) using (BinaryReader reader = new BinaryReader(stream)) { uint magic = reader.ReadUInt32(); if (magic != 0x46534758) //'XGFS' throw new ArgumentException("XGS format not recognized"); reader.ReadUInt16(); // toolVersion uint formatVersion = reader.ReadUInt16(); if (formatVersion != 42) Debug.WriteLine("Warning: XGS format " + formatVersion + " not supported!"); reader.ReadUInt16(); // crc reader.ReadUInt32(); // lastModifiedLow reader.ReadUInt32(); // lastModifiedHigh reader.ReadByte(); //unkn, 0x03. Platform? uint numCats = reader.ReadUInt16(); uint numVars = reader.ReadUInt16(); reader.ReadUInt16(); //unkn, 0x16 reader.ReadUInt16(); //unkn, 0x16 uint numRpc = reader.ReadUInt16(); uint numDspPresets = reader.ReadUInt16(); uint numDspParams = reader.ReadUInt16(); uint catsOffset = reader.ReadUInt32(); uint varsOffset = reader.ReadUInt32(); reader.ReadUInt32(); //unknown, leads to a short with value of 1? reader.ReadUInt32(); // catNameIndexOffset reader.ReadUInt32(); //unknown, two shorts of values 2 and 3? reader.ReadUInt32(); // varNameIndexOffset uint catNamesOffset = reader.ReadUInt32(); uint varNamesOffset = reader.ReadUInt32(); uint rpcOffset = reader.ReadUInt32(); reader.ReadUInt32(); // dspPresetsOffset uint dspParamsOffset = reader.ReadUInt32(); reader.BaseStream.Seek(catNamesOffset, SeekOrigin.Begin); string[] categoryNames = ReadNullTerminatedStrings(numCats, reader); _categories = new AudioCategory[numCats]; reader.BaseStream.Seek(catsOffset, SeekOrigin.Begin); for (int i=0; i variables = new List(); List cueVariables = new List(); List globalVariables = new List(); reader.BaseStream.Seek(varsOffset, SeekOrigin.Begin); for (int i = 0; i < numVars; i++) { RpcVariable v = new RpcVariable(); v.Name = varNames[i]; v.Flags = reader.ReadByte(); v.InitValue = reader.ReadSingle(); v.MinValue = reader.ReadSingle(); v.MaxValue = reader.ReadSingle(); v.Value = v.InitValue; variables.Add(v); if (!v.IsGlobal) cueVariables.Add(v); else { globalVariables.Add(v); _variableLookup.Add(v.Name, globalVariables.Count - 1); } } _cueVariables = cueVariables.ToArray(); _variables = globalVariables.ToArray(); List reverbCurves = new List(); RpcCurves = new RpcCurve[numRpc]; if (numRpc > 0) { reader.BaseStream.Seek(rpcOffset, SeekOrigin.Begin); for (int i = 0; i < numRpc; i++) { RpcCurve curve = new RpcCurve(); curve.FileOffset = (uint)reader.BaseStream.Position; RpcVariable variable = variables[ reader.ReadUInt16() ]; if (variable.IsGlobal) { curve.IsGlobal = true; curve.Variable = globalVariables.FindIndex(e => e.Name == variable.Name); } else { curve.IsGlobal = false; curve.Variable = cueVariables.FindIndex(e => e.Name == variable.Name); } int pointCount = (int)reader.ReadByte(); curve.Parameter = (RpcParameter)reader.ReadUInt16(); curve.Points = new RpcPoint[pointCount]; for (int j = 0; j < pointCount; j++) { curve.Points[j].Position = reader.ReadSingle(); curve.Points[j].Value = reader.ReadSingle(); curve.Points[j].Type = (RpcPointType)reader.ReadByte(); } // If the parameter is greater than the max then this is a DSP // parameter which is for reverb. int dspParameter = curve.Parameter - RpcParameter.NumParameters; if (dspParameter >= 0 && variable.IsGlobal) reverbCurves.Add(curve); RpcCurves[i] = curve; } } _reverbCurves = reverbCurves.ToArray(); if (numDspPresets > 0) { // Note: It seemed like MS designed this to support multiple // DSP effects, but in practice XACT only has one... Microsoft Reverb. // // So because of this we know exactly how many presets and // parameters we should have. if (numDspPresets != 1) throw new Exception("Unexpected number of DSP presets!"); if (numDspParams != 22) throw new Exception("Unexpected number of DSP parameters!"); reader.BaseStream.Seek(dspParamsOffset, SeekOrigin.Begin); _reverbSettings = new ReverbSettings(reader); } } _stopwatch = new Stopwatch(); _stopwatch.Start(); } internal int GetRpcIndex(uint fileOffset) { for (int i = 0; i < RpcCurves.Length; i++) { if (RpcCurves[i].FileOffset == fileOffset) return i; } return -1; } private static string[] ReadNullTerminatedStrings(uint count, BinaryReader reader) { string[] ret = new string[count]; for (int i = 0; i < count; i++) { List s = new List(); while (reader.PeekChar() != 0) s.Add(reader.ReadChar()); reader.ReadChar(); ret[i] = new string(s.ToArray()); } return ret; } /// /// Performs periodic work required by the audio engine. /// /// Must be called at least once per frame. public void Update() { TimeSpan cur = _stopwatch.Elapsed; TimeSpan elapsed = cur - _lastUpdateTime; _lastUpdateTime = cur; float dt = (float)elapsed.TotalSeconds; lock (UpdateLock) { for (int x = 0; x < ActiveCues.Count; ) { Cue cue = ActiveCues[x]; cue.Update(dt); if (cue.IsStopped || cue.IsDisposed) { ActiveCues.Remove(cue); continue; } x++; } } // The only global curves we can process seem to be // specifically for the reverb DSP effect. if (_reverbSettings != null) { for (int i = 0; i < _reverbCurves.Length; i++) { RpcCurve curve = _reverbCurves[i]; float result = curve.Evaluate(_variables[curve.Variable].Value); int parameter = curve.Parameter - RpcParameter.NumParameters; _reverbSettings[parameter] = result; } AudioService.Current.SetReverbSettings(_reverbSettings); } } /// Returns an audio category by name. /// Friendly name of the category to get. /// The AudioCategory with a matching name. Throws an exception if not found. public AudioCategory GetCategory(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); int i; if (!_categoryLookup.TryGetValue(name, out i)) throw new InvalidOperationException("This resource could not be created."); return _categories[i]; } /// Gets the value of a global variable. /// Friendly name of the variable. /// float value of the queried variable. /// A global variable has global scope. It can be accessed by all code within a project. public float GetGlobalVariable(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); int i; if (!_variableLookup.TryGetValue(name, out i) || !_variables[i].IsPublic) throw new IndexOutOfRangeException("The specified variable index is invalid."); lock (UpdateLock) return _variables[i].Value; } internal float GetGlobalVariable(int index) { lock (UpdateLock) return _variables[index].Value; } /// Sets the value of a global variable. /// Friendly name of the variable. /// Value of the global variable. public void SetGlobalVariable(string name, float value) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); int i; if (!_variableLookup.TryGetValue(name, out i) || !_variables[i].IsPublic) throw new IndexOutOfRangeException("The specified variable index is invalid."); lock (UpdateLock) _variables[i].SetValue(value); } /// /// This event is triggered when the AudioEngine is disposed. /// public event EventHandler Disposing; /// /// Is true if the AudioEngine has been disposed. /// public bool IsDisposed { get; private set; } /// /// Disposes the AudioEngine. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~AudioEngine() { Dispose(false); } private void Dispose(bool disposing) { if (IsDisposed) return; IsDisposed = true; // TODO: Should we be forcing any active // audio cues to stop here? if (disposing) { var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/AudioStopOptions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Audio { /// Controls how Cue objects should cease playback when told to stop. public enum AudioStopOptions { /// Stop normally, playing any pending release phases or transitions. AsAuthored, /// Immediately stops the cue, ignoring any pending release phases or transitions. Immediate } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/ClipEvent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Framework.Audio { abstract class ClipEvent { protected XactClip _clip; protected ClipEvent(XactClip clip, float timeStamp, float randomOffset) { _clip = clip; TimeStamp = timeStamp; RandomOffset = randomOffset; } public float RandomOffset { get; private set; } public float TimeStamp { get; private set; } public abstract void Play(); public abstract void Stop(); public abstract void Pause(); public abstract void Resume(); public abstract void SetFade(float fadeInDuration, float fadeOutDuration); public abstract void SetTrackVolume(float volume); public abstract void SetTrackPan(float pan); public abstract void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor); public abstract bool Update(float dt); } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/CrossfadeType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { enum CrossfadeType { Linear, Logarithmic, EqualPower, } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/Cue.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// Manages the playback of a sound or set of sounds. /// /// Cues are comprised of one or more sounds. /// Cues also define specific properties such as pitch or volume. /// Cues are referenced through SoundBank objects. /// public class Cue : IDisposable { private readonly AudioEngine _engine; private readonly string _name; private readonly XactSound[] _sounds; private readonly float[] _probs; private readonly RpcVariable[] _variables; private XactSound _curSound; private bool _applied3D; private bool _played; /// Indicates whether or not the cue is currently paused. /// IsPlaying and IsPaused both return true if a cue is paused while playing. public bool IsPaused { get { if (_curSound != null) return _curSound.IsPaused; return false; } } /// Indicates whether or not the cue is currently playing. /// IsPlaying and IsPaused both return true if a cue is paused while playing. public bool IsPlaying { get { if (_curSound != null) return _curSound.Playing || _curSound.IsPaused; return false; } } /// Indicates whether or not the cue is currently stopped. public bool IsStopped { get { if (_curSound != null) return _curSound.Stopped; return !IsDisposed && !IsPrepared; } } public bool IsStopping { get { // TODO: Implement me! return false; } } public bool IsPreparing { get { return false; } } public bool IsPrepared { get; internal set; } public bool IsCreated { get; internal set; } /// Gets the friendly name of the cue. /// The friendly name is a value set from the designer. public string Name { get { return _name; } } internal Cue(AudioEngine engine, string cuename, XactSound sound) { _engine = engine; _name = cuename; _sounds = new XactSound[1]; _sounds[0] = sound; _probs = new float[1]; _probs[0] = 1.0f; _variables = engine.CreateCueVariables(); } internal Cue(AudioEngine engine, string cuename, XactSound[] sounds, float[] probs) { _engine = engine; _name = cuename; _sounds = sounds; _probs = probs; _variables = engine.CreateCueVariables(); } internal void Prepare() { IsDisposed = false; IsCreated = false; IsPrepared = true; _curSound = null; } /// Pauses playback. public void Pause() { lock (_engine.UpdateLock) { if (_curSound != null) _curSound.Pause(); } } /// Requests playback of a prepared or preparing Cue. /// Calling Play when the Cue already is playing can result in an InvalidOperationException. public void Play() { lock (_engine.UpdateLock) { if (!_engine.ActiveCues.Contains(this)) _engine.ActiveCues.Add(this); //TODO: Probabilities int index = XactHelpers.Random.Next(_sounds.Length); _curSound = _sounds[index]; float volume = UpdateRpcCurves(); _curSound.Play(volume, _engine); } _played = true; IsPrepared = false; } /// Resumes playback of a paused Cue. public void Resume() { lock (_engine.UpdateLock) { if (_curSound != null) _curSound.Resume(); } } /// Stops playback of a Cue. /// Specifies if the sound should play any pending release phases or transitions before stopping. public void Stop(AudioStopOptions options) { lock (_engine.UpdateLock) { _engine.ActiveCues.Remove(this); if (_curSound != null) _curSound.Stop(options); } IsPrepared = false; } private int FindVariable(string name) { // Do a simple linear search... which is fast // for as little variables as most cues have. for (int i = 0; i < _variables.Length; i++) { if (_variables[i].Name == name) return i; } return -1; } /// /// Sets the value of a cue-instance variable based on its friendly name. /// /// Friendly name of the variable to set. /// Value to assign to the variable. /// The friendly name is a value set from the designer. public void SetVariable(string name, float value) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); int i = FindVariable(name); if (i == -1 || !_variables[i].IsPublic) throw new IndexOutOfRangeException("The specified variable index is invalid."); _variables[i].SetValue(value); } /// Gets a cue-instance variable value based on its friendly name. /// Friendly name of the variable. /// Value of the variable. /// /// Cue-instance variables are useful when multiple instantiations of a single cue (and its associated sounds) are required (for example, a "car" cue where there may be more than one car at any given time). While a global variable allows multiple audio elements to be controlled in unison, a cue instance variable grants discrete control of each instance of a cue, even for each copy of the same cue. /// The friendly name is a value set from the designer. /// public float GetVariable(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); int i = FindVariable(name); if (i == -1 || !_variables[i].IsPublic) throw new IndexOutOfRangeException("The specified variable index is invalid."); return _variables[i].Value; } /// Updates the simulated 3D Audio settings calculated between an AudioEmitter and AudioListener. /// The listener to calculate. /// The emitter to calculate. /// /// This must be called before Play(). /// Calling this method automatically converts the sound to monoaural and sets the speaker mix for any sound played by this cue to a value calculated with the listener's and emitter's positions. Any stereo information in the sound will be discarded. /// public void Apply3D(AudioListener listener, AudioEmitter emitter) { if (listener == null) throw new ArgumentNullException("listener"); if (emitter == null) throw new ArgumentNullException("emitter"); if (_played && !_applied3D) throw new InvalidOperationException("You must call Apply3D on a Cue before calling Play to be able to call Apply3D after calling Play."); Vector3 direction = listener.Position - emitter.Position; lock (_engine.UpdateLock) { // Set the distance for falloff. float distance = direction.Length(); int i = FindVariable("Distance"); _variables[i].SetValue(distance); // Calculate the orientation. if (distance > 0.0f) direction /= distance; Vector3 right = Vector3.Cross(listener.Up, listener.Forward); float slope = Vector3.Dot(direction, listener.Forward); float angle = MathHelper.ToDegrees((float)Math.Acos(slope)); int j = FindVariable("OrientationAngle"); _variables[j].SetValue(angle); if (_curSound != null) _curSound.SetCuePan(Vector3.Dot(direction, right)); // Calculate doppler effect. Vector3 relativeVelocity = emitter.Velocity - listener.Velocity; relativeVelocity *= emitter.DopplerScale; } _applied3D = true; } internal void Update(float dt) { if (_curSound == null) return; _curSound.Update(dt); UpdateRpcCurves(); } private float UpdateRpcCurves() { float volume = 1.0f; // Evaluate the runtime parameter controls. int[] rpcCurves = _curSound.RpcCurves; if (rpcCurves.Length > 0) { float pitch = 0.0f; float reverbMix = 1.0f; float? filterFrequency = null; float? filterQFactor = null; for (int i = 0; i < rpcCurves.Length; i++) { RpcCurve rpcCurve = _engine.RpcCurves[rpcCurves[i]]; // Some curves are driven by global variables and others by cue instance variables. float value; if (rpcCurve.IsGlobal) value = rpcCurve.Evaluate(_engine.GetGlobalVariable(rpcCurve.Variable)); else value = rpcCurve.Evaluate(_variables[rpcCurve.Variable].Value); // Process the final curve value based on the parameter type it is. switch (rpcCurve.Parameter) { case RpcParameter.Volume: volume *= XactHelpers.ParseVolumeFromDecibels(value / 100.0f); break; case RpcParameter.Pitch: pitch += value / 1000.0f; break; case RpcParameter.ReverbSend: reverbMix *= XactHelpers.ParseVolumeFromDecibels(value / 100.0f); break; case RpcParameter.FilterFrequency: filterFrequency = value; break; case RpcParameter.FilterQFactor: filterQFactor = value; break; default: throw new ArgumentOutOfRangeException("rpcCurve.Parameter"); } } pitch = MathHelper.Clamp(pitch, -1.0f, 1.0f); if (volume < 0.0f) volume = 0.0f; _curSound.UpdateState(_engine, volume, pitch, reverbMix, filterFrequency, filterQFactor); } return volume; } /// /// This event is triggered when the Cue is disposed. /// public event EventHandler Disposing; /// /// Is true if the Cue has been disposed. /// public bool IsDisposed { get; internal set; } /// /// Disposes the Cue. /// public void Dispose() { Dispose(true); } private void Dispose(bool disposing) { if (IsDisposed) return; IsDisposed = true; if (disposing) { IsCreated = false; IsPrepared = false; var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/DspParameter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.IO; namespace Microsoft.Xna.Platform.Audio { struct DspParameter { public float Value; public readonly float MinValue; public readonly float MaxValue; public DspParameter(BinaryReader reader) { // This is 1 if the type is byte sized and 0 for // floats... not sure if we should use this info. reader.ReadByte(); // The value and the min/max range for limiting the // results from the RPC curve when animated. Value = reader.ReadSingle(); MinValue = reader.ReadSingle(); MaxValue = reader.ReadSingle(); // Looks to always be zero... maybe some padding // for future expansion that never occurred? reader.ReadUInt16(); } public void SetValue(float value) { if (value < MinValue) Value = MinValue; else if (value > MaxValue) Value = MaxValue; else Value = value; } public override string ToString() { return "Value:" + Value + " MinValue:" + MinValue + " MaxValue:" + MaxValue; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/FilterMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Platform.Audio { public enum FilterMode { LowPass = 0, BandPass = 1, HighPass = 2, } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/MaxInstanceBehavior.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { enum MaxInstanceBehavior { FailToPlay, Queue, ReplaceOldest, ReplaceQuietest, ReplaceLowestPriority, } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/MiniFormatTag.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Platform.Audio { public enum MiniFormatTag { Pcm = 0x0, Xma = 0x1, Adpcm = 0x2, Wma = 0x3, // We allow XMA to be reused for a platform specific format. PlatformSpecific = Xma, } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/PlayWaveEvent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { enum VariationType { Ordered, OrderedFromRandom, Random, RandomNoImmediateRepeats, Shuffle }; class PlayWaveEvent : ClipEvent { private readonly SoundBank _soundBank; private readonly VariationType _variation; private readonly int _loopCount; private readonly bool _newWaveOnLoop; private readonly int[] _tracks; private readonly int[] _waveBanks; private readonly byte[] _weights; private readonly int _totalWeights; private float _trackVolume; private float _trackPitch; private float _trackFilterFrequency; private float _trackFilterQFactor; private float _clipVolume; private float _clipPitch; private float _clipReverbMix; private readonly Vector4? _filterVar; private readonly Vector2? _volumeVar; private readonly Vector2? _pitchVar; private int _wavIndex; private int _loopIndex; private SoundEffectInstance _wav; private bool _streaming; public PlayWaveEvent( XactClip clip, float timeStamp, float randomOffset, SoundBank soundBank, int[] waveBanks, int[] tracks, byte[] weights, int totalWeights, VariationType variation, Vector2? volumeVar, Vector2? pitchVar, Vector4? filterVar, int loopCount, bool newWaveOnLoop) : base(clip, timeStamp, randomOffset) { _soundBank = soundBank; _waveBanks = waveBanks; _tracks = tracks; _weights = weights; _totalWeights = totalWeights; _volumeVar = volumeVar; _pitchVar = pitchVar; _filterVar = filterVar; _wavIndex = -1; _loopIndex = 0; _trackVolume = 1.0f; _trackPitch = 0; _trackFilterFrequency = 0; _trackFilterQFactor = 0; _clipVolume = 1.0f; _clipPitch = 0; _clipReverbMix = 0; _variation = variation; _loopCount = loopCount; _newWaveOnLoop = newWaveOnLoop; } public override void Play() { if (_wav != null) { if (_wav.State != SoundState.Stopped) _wav.Stop(); if (_streaming) _wav.Dispose(); else _wav._strategy.IsXAct = false; _wav = null; } Play(true); } private void Play(bool pickNewWav) { int trackCount = _tracks.Length; // Do we need to pick a new wav to play first? if (pickNewWav) { switch (_variation) { case VariationType.Ordered: _wavIndex = (_wavIndex + 1) % trackCount; break; case VariationType.OrderedFromRandom: _wavIndex = (_wavIndex + 1) % trackCount; break; case VariationType.Random: if (_weights == null || trackCount == 1) _wavIndex = XactHelpers.Random.Next() % trackCount; else { int sum = XactHelpers.Random.Next(_totalWeights); for (int i = 0; i < trackCount; i++) { sum -= _weights[i]; if (sum <= 0) { _wavIndex = i; break; } } } break; case VariationType.RandomNoImmediateRepeats: { if (_weights == null || trackCount == 1) _wavIndex = XactHelpers.Random.Next() % trackCount; else { int last = _wavIndex; int sum = XactHelpers.Random.Next(_totalWeights); for (int i = 0; i < trackCount; i++) { sum -= _weights[i]; if (sum <= 0) { _wavIndex = i; break; } } if (_wavIndex == last) _wavIndex = (_wavIndex + 1) % trackCount; } break; } case VariationType.Shuffle: // TODO: Need some sort of deck implementation. _wavIndex = XactHelpers.Random.Next() % trackCount; break; }; } _wav = _soundBank.GetSoundEffectInstance(_waveBanks[_wavIndex], _tracks[_wavIndex], out _streaming); if (_wav == null) { // We couldn't create a sound effect instance, most likely // because we've reached the sound pool limits. return; } // Do all the randoms before we play. if (_volumeVar.HasValue) _trackVolume = _volumeVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _volumeVar.Value.Y); if (_pitchVar.HasValue) _trackPitch = _pitchVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _pitchVar.Value.Y); if (_clip.FilterEnabled) { if (_filterVar.HasValue) { _trackFilterFrequency = _filterVar.Value.X + ((float)XactHelpers.Random.NextDouble() * _filterVar.Value.Y); _trackFilterQFactor = _filterVar.Value.Z + ((float)XactHelpers.Random.NextDouble() * _filterVar.Value.W); } else { _trackFilterFrequency = _clip.FilterFrequency; _trackFilterQFactor = _clip.FilterQ; } } // This is a shortcut for infinite looping of a single track. _wav.IsLooped = _loopCount == 255 && trackCount == 1; // Update all the wave states then play. UpdateState(); _wav.Play(); } public override void Stop() { if (_wav != null) { _wav.Stop(); if (_streaming) _wav.Dispose(); else _wav._strategy.IsXAct = false; _wav = null; } _loopIndex = 0; } public override void Pause() { if (_wav != null) _wav.Pause(); } public override void Resume() { if (_wav != null && _wav.State == SoundState.Paused) _wav.Resume(); } public override void SetTrackVolume(float volume) { _clipVolume = volume; if (_wav != null) _wav.Volume = _trackVolume * _clipVolume; } public override void SetTrackPan(float pan) { if (_wav != null) _wav.Pan = pan; } public override void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor) { _clipVolume = volume; _clipPitch = pitch; _clipReverbMix = reverbMix; // The RPC filter overrides the randomized track filter. if (filterFrequency.HasValue) _trackFilterFrequency = filterFrequency.Value; if (filterQFactor.HasValue) _trackFilterQFactor = filterQFactor.Value; if (_wav != null) UpdateState(); } private void UpdateState() { _wav.Volume = _trackVolume * _clipVolume; _wav.Pitch = _trackPitch + _clipPitch; if (_clip.UseReverb) _wav.SetReverbMix(_clipReverbMix); if (_clip.FilterEnabled) _wav.SetFilter(_clip.FilterMode, _trackFilterQFactor, _trackFilterFrequency); } public override void SetFade(float fadeInDuration, float fadeOutDuration) { // TODO } public override bool Update(float dt) { if (_wav != null && _wav.State == SoundState.Stopped) { // If we're not looping or reached our loop // limit then we can stop. if (_loopCount == 0 || _loopIndex >= _loopCount) { if (_streaming) _wav.Dispose(); else _wav._strategy.IsXAct = false; _wav = null; _loopIndex = 0; } else { // Increment the loop count if it isn't infinite. if (_loopCount != 255) ++_loopIndex; // Play the next track. Play(_newWaveOnLoop); } } return _wav != null; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/ReverbSettings.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Platform.Audio { public class ReverbSettings { private readonly DspParameter[] _parameters = new DspParameter[22]; public ReverbSettings(BinaryReader reader) { _parameters[0] = new DspParameter(reader); // ReflectionsDelayMs _parameters[1] = new DspParameter(reader); // ReverbDelayMs _parameters[2] = new DspParameter(reader); // PositionLeft _parameters[3] = new DspParameter(reader); // PositionRight _parameters[4] = new DspParameter(reader); // PositionLeftMatrix _parameters[5] = new DspParameter(reader); // PositionRightMatrix _parameters[6] = new DspParameter(reader); // EarlyDiffusion _parameters[7] = new DspParameter(reader); // LateDiffusion _parameters[8] = new DspParameter(reader); // LowEqGain _parameters[9] = new DspParameter(reader); // LowEqCutoff _parameters[10] = new DspParameter(reader); // HighEqGain _parameters[11] = new DspParameter(reader); // HighEqCutoff _parameters[12] = new DspParameter(reader); // RearDelayMs _parameters[13] = new DspParameter(reader); // RoomFilterFrequencyHz _parameters[14] = new DspParameter(reader); // RoomFilterMainDb _parameters[15] = new DspParameter(reader); // RoomFilterHighFrequencyDb _parameters[16] = new DspParameter(reader); // ReflectionsGainDb _parameters[17] = new DspParameter(reader); // ReverbGainDb _parameters[18] = new DspParameter(reader); // DecayTimeSec _parameters[19] = new DspParameter(reader); // DensityPct _parameters[20] = new DspParameter(reader); // RoomSizeFeet _parameters[21] = new DspParameter(reader); // WetDryMixPct } public float this[int index] { get { return _parameters[index].Value; } set { _parameters[index].SetValue(value); } } public float ReflectionsDelayMs { get { return _parameters[0].Value; } } public float ReverbDelayMs { get { return _parameters[1].Value; } } public float PositionLeft { get { return _parameters[2].Value; } } public float PositionRight { get { return _parameters[3].Value; } } public float PositionLeftMatrix { get { return _parameters[4].Value; } } public float PositionRightMatrix { get { return _parameters[5].Value; } } public float EarlyDiffusion { get { return _parameters[6].Value; } } public float LateDiffusion { get { return _parameters[7].Value; } } public float LowEqGain { get { return _parameters[8].Value; } } public float LowEqCutoff { get { return _parameters[9].Value; } } public float HighEqGain { get { return _parameters[10].Value; } } public float HighEqCutoff { get { return _parameters[11].Value; } } public float RearDelayMs { get { return _parameters[12].Value; } } public float RoomFilterFrequencyHz { get { return _parameters[13].Value; } } public float RoomFilterMainDb { get { return _parameters[14].Value; } } public float RoomFilterHighFrequencyDb { get { return _parameters[15].Value; } } public float ReflectionsGainDb { get { return _parameters[16].Value; } } public float ReverbGainDb { get { return _parameters[17].Value; } } public float DecayTimeSec { get { return _parameters[18].Value; } } public float DensityPct { get { return _parameters[19].Value; } } public float RoomSizeFeet { get { return _parameters[20].Value; } } public float WetDryMixPct { get { return _parameters[21].Value; } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/RpcCurve.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { struct RpcCurve { public uint FileOffset; public int Variable; public bool IsGlobal; public RpcParameter Parameter; public RpcPoint[] Points; public float Evaluate(float position) { // TODO: We need to implement the different RpcPointTypes. RpcPoint first = Points[0]; if (position <= first.Position) return first.Value; RpcPoint second = Points[Points.Length - 1]; if (position >= second.Position) return second.Value; for (int i = 1; i < Points.Length; ++i) { second = Points[i]; if (second.Position >= position) break; first = second; } switch (first.Type) { default: case RpcPointType.Linear: { float t = (position - first.Position) / (second.Position - first.Position); return first.Value + ((second.Value - first.Value) * t); } } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/RpcParameter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { enum RpcParameter { Volume, Pitch, ReverbSend, FilterFrequency, FilterQFactor, NumParameters, } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/RpcPoint.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { struct RpcPoint { public RpcPointType Type; public float Position; public float Value; } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/RpcPointType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { enum RpcPointType { Linear, Fast, Slow, SinCos } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/RpcVariable.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { struct RpcVariable { public string Name; public float Value; public byte Flags; public float InitValue; public float MaxValue; public float MinValue; public bool IsPublic { get { return (Flags & 0x1) != 0; } } public bool IsReadOnly { get { return (Flags & 0x2) != 0; } } public bool IsGlobal { get { return (Flags & 0x4) == 0; } } public bool IsReserved { get { return (Flags & 0x8) != 0; } } public void SetValue(float value) { if (value < MinValue) Value = MinValue; else if (value > MaxValue) Value = MaxValue; else Value = value; } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/SoundBank.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Diagnostics; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Audio { /// Represents a collection of Cues. public class SoundBank : IDisposable { readonly AudioEngine _audioengine; readonly string[] _waveBankNames; readonly WaveBank[] _waveBanks; readonly float [] defaultProbability = new float [1] { 1.0f }; readonly Dictionary _sounds = new Dictionary(); readonly Dictionary _probabilities = new Dictionary(); /// /// Is true if the SoundBank has any live Cues in use. /// public bool IsInUse { get; private set; } /// AudioEngine that will be associated with this sound bank. /// Path to a .xsb SoundBank file. public SoundBank(AudioEngine audioEngine, string fileName) { if (audioEngine == null) throw new ArgumentNullException("audioEngine"); if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException("fileName"); _audioengine = audioEngine; using (Stream stream = EnsureRandomAccessStream(TitleContainer.OpenStream(fileName))) using (BinaryReader reader = new BinaryReader(stream)) { // Thanks to Liandril for "xactxtract" for some of the offsets. uint magic = reader.ReadUInt32(); if (magic != 0x4B424453) //"SDBK" throw new Exception("Bad soundbank format"); reader.ReadUInt16(); // toolVersion uint formatVersion = reader.ReadUInt16(); if (formatVersion != 43) Debug.WriteLine("Warning: SoundBank format {0} not supported.", formatVersion); reader.ReadUInt16(); // crc, TODO: Verify crc (FCS16) reader.ReadUInt32(); // lastModifiedLow reader.ReadUInt32(); // lastModifiedHigh reader.ReadByte(); // platform ??? uint numSimpleCues = reader.ReadUInt16(); uint numComplexCues = reader.ReadUInt16(); reader.ReadUInt16(); //unkn reader.ReadUInt16(); // numTotalCues uint numWaveBanks = reader.ReadByte(); reader.ReadUInt16(); // numSounds uint cueNameTableLen = reader.ReadUInt16(); reader.ReadUInt16(); //unkn uint simpleCuesOffset = reader.ReadUInt32(); uint complexCuesOffset = reader.ReadUInt32(); //unkn uint cueNamesOffset = reader.ReadUInt32(); reader.ReadUInt32(); //unkn reader.ReadUInt32(); // variationTablesOffset reader.ReadUInt32(); //unkn uint waveBankNameTableOffset = reader.ReadUInt32(); reader.ReadUInt32(); // cueNameHashTableOffset reader.ReadUInt32(); // cueNameHashValsOffset reader.ReadUInt32(); // soundsOffset //name = System.Text.Encoding.UTF8.GetString(soundbankreader.ReadBytes(64),0,64).Replace("\0",""); //parse wave bank name table stream.Seek(waveBankNameTableOffset, SeekOrigin.Begin); _waveBanks = new WaveBank[numWaveBanks]; _waveBankNames = new string[numWaveBanks]; for (int i=0; i 0) { stream.Seek(simpleCuesOffset, SeekOrigin.Begin); for (int i = 0; i < numSimpleCues; i++) { reader.ReadByte(); // flags uint soundOffset = reader.ReadUInt32(); long oldPosition = stream.Position; stream.Seek(soundOffset, SeekOrigin.Begin); XactSound sound = new XactSound(audioEngine, this, reader); stream.Seek(oldPosition, SeekOrigin.Begin); _sounds.Add(cueNames [i], new XactSound [] { sound } ); _probabilities.Add(cueNames [i], defaultProbability); } } // Complex cues if (numComplexCues > 0) { stream.Seek(complexCuesOffset, SeekOrigin.Begin); for (int i = 0; i < numComplexCues; i++) { byte flags = reader.ReadByte(); if (((flags >> 2) & 1) != 0) { uint soundOffset = reader.ReadUInt32(); reader.ReadUInt32(); //unkn long oldPosition = stream.Position; stream.Seek(soundOffset, SeekOrigin.Begin); XactSound sound = new XactSound(audioEngine, this, reader); stream.Seek(oldPosition, SeekOrigin.Begin); _sounds.Add(cueNames [numSimpleCues + i], new XactSound [] { sound }); _probabilities.Add(cueNames [numSimpleCues + i], defaultProbability); } else { uint variationTableOffset = reader.ReadUInt32(); reader.ReadUInt32(); // transitionTableOffset //parse variation table long savepos = stream.Position; stream.Seek(variationTableOffset, SeekOrigin.Begin); uint numEntries = reader.ReadUInt16(); uint variationflags = reader.ReadUInt16(); reader.ReadByte(); reader.ReadUInt16(); reader.ReadByte(); XactSound[] cueSounds = new XactSound[numEntries]; float[] probs = new float[numEntries]; uint tableType = (variationflags >> 3) & 0x7; for (int j = 0; j < numEntries; j++) { switch (tableType) { case 0: //Wave { int trackIndex = reader.ReadUInt16(); int waveBankIndex = reader.ReadByte(); reader.ReadByte(); // weightMin reader.ReadByte(); // weightMax cueSounds[j] = new XactSound(this, waveBankIndex, trackIndex); break; } case 1: { uint soundOffset = reader.ReadUInt32(); reader.ReadByte(); // weightMin reader.ReadByte(); // weightMax long oldPosition = stream.Position; stream.Seek(soundOffset, SeekOrigin.Begin); cueSounds[j] = new XactSound(audioEngine, this, reader); stream.Seek(oldPosition, SeekOrigin.Begin); break; } case 3: { uint soundOffset = reader.ReadUInt32(); reader.ReadSingle(); // weightMin reader.ReadSingle(); // weightMax reader.ReadUInt32(); // flags long oldPosition = stream.Position; stream.Seek(soundOffset, SeekOrigin.Begin); cueSounds[j] = new XactSound(audioEngine, this, reader); stream.Seek(oldPosition, SeekOrigin.Begin); break; } case 4: //CompactWave { int trackIndex = reader.ReadUInt16(); int waveBankIndex = reader.ReadByte(); cueSounds[j] = new XactSound(this, waveBankIndex, trackIndex); break; } default: throw new NotSupportedException(); } } stream.Seek(savepos, SeekOrigin.Begin); _sounds.Add(cueNames [numSimpleCues + i], cueSounds); _probabilities.Add(cueNames [numSimpleCues + i], probs); } // Instance limiting reader.ReadByte(); //instanceLimit reader.ReadUInt16(); //fadeInSec, divide by 1000.0f reader.ReadUInt16(); //fadeOutSec, divide by 1000.0f reader.ReadByte(); //instanceFlags } } } } private static Stream EnsureRandomAccessStream(Stream stream) { if (!stream.CanSeek) { Stream memStream = new MemoryStream(); stream.CopyTo(memStream); memStream.Seek(0, SeekOrigin.Begin); stream.Dispose(); return memStream; } return stream; } internal SoundEffectInstance GetSoundEffectInstance(int waveBankIndex, int trackIndex, out bool streaming) { WaveBank waveBank = _waveBanks[waveBankIndex]; // If the wave bank has not been resolved then do so now. if (waveBank == null) { string name = _waveBankNames[waveBankIndex]; if (!_audioengine.Wavebanks.TryGetValue(name, out waveBank)) throw new Exception("The wave bank '" + name + "' was not found!"); _waveBanks[waveBankIndex] = waveBank; } return waveBank.GetSoundEffectInstance(trackIndex, out streaming); } /// /// Returns a pooled Cue object. /// /// Friendly name of the cue to get. /// a unique Cue object from a pool. /// /// Cue instances are unique, even when sharing the same name. This allows multiple instances to simultaneously play. /// public Cue GetCue(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); XactSound[] sounds; if (!_sounds.TryGetValue(name, out sounds)) throw new ArgumentException(); float [] probs; if (!_probabilities.TryGetValue(name, out probs)) throw new ArgumentException(); IsInUse = true; Cue cue = new Cue(_audioengine, name, sounds, probs); cue.Prepare(); return cue; } /// /// Plays a cue. /// /// Name of the cue to play. public void PlayCue(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); XactSound[] sounds; if (!_sounds.TryGetValue(name, out sounds)) throw new ArgumentException(); float [] probs; if (!_probabilities.TryGetValue(name, out probs)) throw new ArgumentException(); IsInUse = true; Cue cue = new Cue(_audioengine, name, sounds, probs); cue.Prepare(); cue.Play(); } /// /// Plays a cue with static 3D positional information. /// /// /// Commonly used for short lived effects. To dynamically change the 3D /// positional information on a cue over time use and . /// The name of the cue to play. /// The listener state. /// The cue emitter state. public void PlayCue(string name, AudioListener listener, AudioEmitter emitter) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); XactSound[] sounds; if (!_sounds.TryGetValue(name, out sounds)) throw new InvalidOperationException(); float [] probs; if (!_probabilities.TryGetValue(name, out probs)) throw new ArgumentException(); IsInUse = true; Cue cue = new Cue(_audioengine, name, sounds, probs); cue.Prepare(); cue.Apply3D(listener, emitter); cue.Play(); } /// /// This event is triggered when the SoundBank is disposed. /// public event EventHandler Disposing; /// /// Is true if the SoundBank has been disposed. /// public bool IsDisposed { get; private set; } /// /// Disposes the SoundBank. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~SoundBank() { Dispose(false); } private void Dispose(bool disposing) { if (IsDisposed) return; IsDisposed = true; if (disposing) { IsInUse = false; var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/VolumeEvent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Framework.Audio { class VolumeEvent : ClipEvent { private readonly float _volume; public VolumeEvent(XactClip clip, float timeStamp, float randomOffset, float volume) : base(clip, timeStamp, randomOffset) { _volume = volume; } public override void Play() { _clip.SetVolume(_volume); } public override void Stop() { } public override void Pause() { } public override void Resume() { } public override void SetTrackVolume(float volume) { } public override void SetTrackPan(float pan) { } public override void SetState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor) { } public override bool Update(float dt) { return false; } public override void SetFade(float fadeInDuration, float fadeOutDuration) { } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/WaveBank.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { /// Represents a collection of wave files. public partial class WaveBank : IDisposable { private readonly SoundEffect[] _sounds; private readonly StreamInfo[] _streams; private readonly string _bankName; private readonly string _waveBankFileName; private readonly bool _streaming; private readonly int _offset; private readonly int _packetSize; private readonly int _version; private readonly int _playRegionOffset; struct Segment { public int Offset; public int Length; } struct WaveBankHeader { public int Version; public Segment[] Segments; } struct WaveBankData { public int Flags; // Bank flags public int EntryCount; // Number of entries in the bank public string BankName; // Bank friendly name public int EntryMetaDataElementSize; // Size of each entry meta-data element, in bytes public int EntryNameElementSize; // Size of each entry name element, in bytes public int Alignment; // Entry alignment, in bytes public int CompactFormat; // Format data for compact bank public int BuildTime; // Build timestamp } struct StreamInfo { public int Format; public int FileOffset; public int FileLength; public int LoopStart; public int LoopLength; } private const int Flag_EntryNames = 0x00010000; // Bank includes entry names private const int Flag_Compact = 0x00020000; // Bank uses compact format private const int Flag_SyncDisabled = 0x00040000; // Bank is disabled for audition sync private const int Flag_SeekTables = 0x00080000; // Bank includes seek tables. private const int Flag_Mask = 0x000F0000; /// /// public bool IsInUse { get; private set; } /// /// public bool IsPrepared { get; private set; } /// Instance of the AudioEngine to associate this wave bank with. /// Path to the .xwb file to load. /// This constructor immediately loads all wave data into memory at once. public WaveBank(AudioEngine audioEngine, string nonStreamingWaveBankFilename) : this(audioEngine, nonStreamingWaveBankFilename, false, 0, 0) { } private WaveBank(AudioEngine audioEngine, string waveBankFilename, bool streaming, int offset, int packetsize) { if (audioEngine == null) throw new ArgumentNullException("audioEngine"); if (string.IsNullOrEmpty(waveBankFilename)) throw new ArgumentNullException("nonStreamingWaveBankFilename"); // Is this a streaming wavebank? if (streaming) { if (offset != 0) throw new ArgumentException("We only support a zero offset in streaming banks.", "offset"); if (packetsize < 2) throw new ArgumentException("The packet size must be greater than 2.", "packetsize"); _streaming = true; _offset = offset; _packetSize = packetsize; } //XWB PARSING //Adapted from MonoXNA //Originally adaped from Luigi Auriemma's unxwb WaveBankHeader wavebankheader; WaveBankData wavebankdata; wavebankdata.EntryNameElementSize = 0; wavebankdata.CompactFormat = 0; wavebankdata.Alignment = 0; wavebankdata.BuildTime = 0; int wavebank_offset = 0; _waveBankFileName = waveBankFilename; BinaryReader reader = new BinaryReader(TitleContainer.OpenStream(waveBankFilename)); reader.ReadBytes(4); _version = wavebankheader.Version = reader.ReadInt32(); int last_segment = 4; //if (wavebankheader.Version == 1) goto WAVEBANKDATA; if (wavebankheader.Version <= 3) last_segment = 3; if (wavebankheader.Version >= 42) reader.ReadInt32(); // skip HeaderVersion wavebankheader.Segments = new Segment[5]; for (int i = 0; i <= last_segment; i++) { wavebankheader.Segments[i].Offset = reader.ReadInt32(); wavebankheader.Segments[i].Length = reader.ReadInt32(); } reader.BaseStream.Seek(wavebankheader.Segments[0].Offset, SeekOrigin.Begin); //WAVEBANKDATA: wavebankdata.Flags = reader.ReadInt32(); wavebankdata.EntryCount = reader.ReadInt32(); if ((wavebankheader.Version == 2) || (wavebankheader.Version == 3)) { wavebankdata.BankName = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(16),0,16).Replace("\0", ""); } else { wavebankdata.BankName = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(64),0,64).Replace("\0", ""); } _bankName = wavebankdata.BankName; if (wavebankheader.Version == 1) { //wavebank_offset = (int)ftell(fd) - file_offset; wavebankdata.EntryMetaDataElementSize = 20; } else { wavebankdata.EntryMetaDataElementSize = reader.ReadInt32(); wavebankdata.EntryNameElementSize = reader.ReadInt32(); wavebankdata.Alignment = reader.ReadInt32(); wavebank_offset = wavebankheader.Segments[1].Offset; //METADATASEGMENT } if ((wavebankdata.Flags & Flag_Compact) != 0) { reader.ReadInt32(); // compact_format } _playRegionOffset = wavebankheader.Segments[last_segment].Offset; if (_playRegionOffset == 0) { _playRegionOffset = wavebank_offset + (wavebankdata.EntryCount * wavebankdata.EntryMetaDataElementSize); } int segidx_entry_name = 2; if (wavebankheader.Version >= 42) segidx_entry_name = 3; if ((wavebankheader.Segments[segidx_entry_name].Offset != 0) && (wavebankheader.Segments[segidx_entry_name].Length != 0)) { if (wavebankdata.EntryNameElementSize == -1) wavebankdata.EntryNameElementSize = 0; byte[] entry_name = new byte[wavebankdata.EntryNameElementSize + 1]; entry_name[wavebankdata.EntryNameElementSize] = 0; } _sounds = new SoundEffect[wavebankdata.EntryCount]; _streams = new StreamInfo[wavebankdata.EntryCount]; reader.BaseStream.Seek(wavebank_offset, SeekOrigin.Begin); // The compact format requires us to load stuff differently. bool isCompactFormat = (wavebankdata.Flags & Flag_Compact) != 0; if (isCompactFormat) { // Load the sound data offset table from disk. for (int i = 0; i < wavebankdata.EntryCount; i++) { int len = reader.ReadInt32(); _streams[i].Format = wavebankdata.CompactFormat; _streams[i].FileOffset = (len & ((1 << 21) - 1))*wavebankdata.Alignment; } // Now figure out the sound data lengths. for (int i = 0; i < wavebankdata.EntryCount; i++) { int nextOffset; if (i == (wavebankdata.EntryCount - 1)) nextOffset = wavebankheader.Segments[last_segment].Length; else nextOffset = _streams[i + 1].FileOffset; // The next and current offsets used to calculate the length. _streams[i].FileLength = nextOffset - _streams[i].FileOffset; } } else { for (int i = 0; i < wavebankdata.EntryCount; i++) { StreamInfo info = new StreamInfo(); if (wavebankheader.Version == 1) { info.Format = reader.ReadInt32(); info.FileOffset = reader.ReadInt32(); info.FileLength = reader.ReadInt32(); info.LoopStart = reader.ReadInt32(); info.LoopLength = reader.ReadInt32(); } else { int flagsAndDuration = reader.ReadInt32(); // Unused if (wavebankdata.EntryMetaDataElementSize >= 8) info.Format = reader.ReadInt32(); if (wavebankdata.EntryMetaDataElementSize >= 12) info.FileOffset = reader.ReadInt32(); if (wavebankdata.EntryMetaDataElementSize >= 16) info.FileLength = reader.ReadInt32(); if (wavebankdata.EntryMetaDataElementSize >= 20) info.LoopStart = reader.ReadInt32(); if (wavebankdata.EntryMetaDataElementSize >= 24) info.LoopLength = reader.ReadInt32(); } // TODO: What is this doing? if (wavebankdata.EntryMetaDataElementSize < 24) { if (info.FileLength != 0) info.FileLength = wavebankheader.Segments[last_segment].Length; } _streams[i] = info; } } // If this isn't a streaming wavebank then load all the sounds now. if (!_streaming) { for (int i = 0; i < _streams.Length; i++) { StreamInfo info = _streams[i]; // Read the data. reader.BaseStream.Seek(info.FileOffset + _playRegionOffset, SeekOrigin.Begin); byte[] audiodata = reader.ReadBytes(info.FileLength); // Decode the format information. MiniFormatTag codec; int channels, rate, alignment; DecodeFormat(info.Format, out codec, out channels, out rate, out alignment); // Call the special constuctor on SoundEffect to sort it out. _sounds[i] = new SoundEffect(codec, audiodata, channels, rate, alignment, info.LoopStart, info.LoopLength); } _streams = null; } audioEngine.Wavebanks[_bankName] = this; IsPrepared = true; } private void DecodeFormat(int format, out MiniFormatTag codec, out int channels, out int rate, out int alignment) { if (_version == 1) { // I'm not 100% sure if the following is correct // version 1: // 1 00000000 000101011000100010 0 001 0 // | | | | | | // | | | | | wFormatTag // | | | | nChannels // | | | ??? // | | nSamplesPerSec // | wBlockAlign // wBitsPerSample codec = (MiniFormatTag)((format) & ((1 << 1) - 1)); channels = (format >> (1)) & ((1 << 3) - 1); rate = (format >> (1 + 3 + 1)) & ((1 << 18) - 1); alignment = (format >> (1 + 3 + 1 + 18)) & ((1 << 8) - 1); //bits = (format >> (1 + 3 + 1 + 18 + 8)) & ((1 << 1) - 1); /*} else if(wavebankheader.dwVersion == 23) { // I'm not 100% sure if the following is correct // version 23: // 1000000000 001011101110000000 001 1 // | | | | | // | | | | ??? // | | | nChannels? // | | nSamplesPerSec // | ??? // !!!UNKNOWN FORMAT!!! //codec = -1; //chans = (wavebankentry.Format >> 1) & ((1 << 3) - 1); //rate = (wavebankentry.Format >> 4) & ((1 << 18) - 1); //bits = (wavebankentry.Format >> 31) & ((1 << 1) - 1); codec = (wavebankentry.Format ) & ((1 << 1) - 1); chans = (wavebankentry.Format >> (1) ) & ((1 << 3) - 1); rate = (wavebankentry.Format >> (1 + 3) ) & ((1 << 18) - 1); align = (wavebankentry.Format >> (1 + 3 + 18) ) & ((1 << 9) - 1); bits = (wavebankentry.Format >> (1 + 3 + 18 + 9)) & ((1 << 1) - 1); */ } else { // 0 00000000 000111110100000000 010 01 // | | | | | // | | | | wFormatTag // | | | nChannels // | | nSamplesPerSec // | wBlockAlign // wBitsPerSample codec = (MiniFormatTag)((format) & ((1 << 2) - 1)); channels = (format >> (2)) & ((1 << 3) - 1); rate = (format >> (2 + 3)) & ((1 << 18) - 1); alignment = (format >> (2 + 3 + 18)) & ((1 << 8) - 1); //bits = (info.Format >> (2 + 3 + 18 + 8)) & ((1 << 1) - 1); } } /// Instance of the AudioEngine to associate this wave bank with. /// Path to the .xwb to stream from. /// DVD sector-aligned offset within the wave bank data file. /// Stream packet size, in sectors, to use for each stream. The minimum value is 2. /// /// This constructor streams wave data as needed. /// Note that packetsize is in sectors, which is 2048 bytes. /// AudioEngine.Update() must be called at least once before using data from a streaming wave bank. /// public WaveBank(AudioEngine audioEngine, string streamingWaveBankFilename, int offset, short packetsize) : this(audioEngine, streamingWaveBankFilename, true, offset, packetsize) { } internal SoundEffectInstance GetSoundEffectInstance(int trackIndex, out bool streaming) { if (_streaming) { streaming = true; StreamInfo stream = _streams[trackIndex]; throw new NotImplementedException("XACT streaming is not implemented on this platform."); } else { streaming = false; SoundEffect effect = _sounds[trackIndex]; return AudioService.Current.GetInstance(effect, true); } } /// /// This event is triggered when the WaveBank is disposed. /// public event EventHandler Disposing; /// /// Is true if the WaveBank has been disposed. /// public bool IsDisposed { get; private set; } /// /// Disposes the WaveBank. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~WaveBank() { Dispose(false); } private void Dispose(bool disposing) { if (IsDisposed) return; IsDisposed = true; if (disposing) { foreach (SoundEffect s in _sounds) s.Dispose(); IsPrepared = false; IsInUse = false; var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); } } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/XactClip.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { class XactClip { private readonly float _defaultVolume; private float _volumeScale; private float _volume; private readonly ClipEvent[] _events; private float _time; private int _nextEvent; internal readonly bool FilterEnabled; internal readonly FilterMode FilterMode; internal readonly float FilterQ; internal readonly ushort FilterFrequency; internal readonly bool UseReverb; public XactClip(SoundBank soundBank, BinaryReader clipReader, bool useReverb) { #pragma warning disable 0219 State = SoundState.Stopped; UseReverb = useReverb; float volumeDb = XactHelpers.ParseDecibels(clipReader.ReadByte()); _defaultVolume = XactHelpers.ParseVolumeFromDecibels(volumeDb); uint clipOffset = clipReader.ReadUInt32(); // Read the filter info. ushort filterQAndFlags = clipReader.ReadUInt16(); FilterEnabled = (filterQAndFlags & 1) == 1; FilterMode = (FilterMode)((filterQAndFlags >> 1) & 3); FilterQ = (filterQAndFlags >> 3) * 0.01f; FilterFrequency = clipReader.ReadUInt16(); long oldPosition = clipReader.BaseStream.Position; clipReader.BaseStream.Seek(clipOffset, SeekOrigin.Begin); byte numEvents = clipReader.ReadByte(); _events = new ClipEvent[numEvents]; for (int i = 0; i> 5) & 0xFFFF) * 0.001f; uint unknown = eventInfo >> 21; switch (eventId) { case 0: // Stop Event throw new NotImplementedException("Stop event"); case 1: { // Unknown! clipReader.ReadByte(); // Event flags byte eventFlags = clipReader.ReadByte(); bool playRelease = (eventFlags & 0x01) == 0x01; bool panEnabled = (eventFlags & 0x02) == 0x02; bool useCenterSpeaker = (eventFlags & 0x04) == 0x04; int trackIndex = clipReader.ReadUInt16(); int waveBankIndex = clipReader.ReadByte(); byte loopCount = clipReader.ReadByte(); float panAngle = clipReader.ReadUInt16() / 100.0f; float panArc = clipReader.ReadUInt16() / 100.0f; _events[i] = new PlayWaveEvent( this, timeStamp, randomOffset, soundBank, new[] { waveBankIndex }, new[] { trackIndex }, null, 0, VariationType.Ordered, null, null, null, loopCount, false); break; } case 3: { // Unknown! clipReader.ReadByte(); // Event flags byte eventFlags = clipReader.ReadByte(); bool playRelease = (eventFlags & 0x01) == 0x01; bool panEnabled = (eventFlags & 0x02) == 0x02; bool useCenterSpeaker = (eventFlags & 0x04) == 0x04; byte loopCount = clipReader.ReadByte(); float panAngle = clipReader.ReadUInt16() / 100.0f; float panArc = clipReader.ReadUInt16() / 100.0f; // The number of tracks for the variations. ushort numTracks = clipReader.ReadUInt16(); // Not sure what most of this is. byte moreFlags = clipReader.ReadByte(); bool newWaveOnLoop = (moreFlags & 0x40) == 0x40; // The variation playlist type seems to be // stored in the bottom 4bits only. VariationType variationType = (VariationType)(moreFlags & 0x0F); // Unknown! clipReader.ReadBytes(5); // Read in the variation playlist. int[] waveBanks = new int[numTracks]; int[] tracks = new int[numTracks]; byte[] weights = new byte[numTracks]; int totalWeights = 0; for (int j = 0; j < numTracks; j++) { tracks[j] = clipReader.ReadUInt16(); waveBanks[j] = clipReader.ReadByte(); byte minWeight = clipReader.ReadByte(); byte maxWeight = clipReader.ReadByte(); weights[j] = (byte)(maxWeight - minWeight); totalWeights += weights[j]; } _events[i] = new PlayWaveEvent( this, timeStamp, randomOffset, soundBank, waveBanks, tracks, weights, totalWeights, variationType, null, null, null, loopCount, newWaveOnLoop); break; } case 4: { // Unknown! clipReader.ReadByte(); // Event flags byte eventFlags = clipReader.ReadByte(); bool playRelease = (eventFlags & 0x01) == 0x01; bool panEnabled = (eventFlags & 0x02) == 0x02; bool useCenterSpeaker = (eventFlags & 0x04) == 0x04; int trackIndex = clipReader.ReadUInt16(); int waveBankIndex = clipReader.ReadByte(); byte loopCount = clipReader.ReadByte(); float panAngle = clipReader.ReadUInt16() / 100.0f; float panArc = clipReader.ReadUInt16() / 100.0f; // Pitch variation range float minPitch = clipReader.ReadInt16() / 1000.0f; float maxPitch = clipReader.ReadInt16() / 1000.0f; // Volume variation range float minVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte()); float maxVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte()); // Filter variation float minFrequency = clipReader.ReadSingle(); float maxFrequency = clipReader.ReadSingle(); float minQ = clipReader.ReadSingle(); float maxQ = clipReader.ReadSingle(); // Unknown! clipReader.ReadByte(); byte variationFlags = clipReader.ReadByte(); // Enable pitch variation Vector2? pitchVar = null; if ((variationFlags & 0x10) == 0x10) pitchVar = new Vector2(minPitch, maxPitch - minPitch); // Enable volume variation Vector2? volumeVar = null; if ((variationFlags & 0x20) == 0x20) volumeVar = new Vector2(minVolume, maxVolume - minVolume); // Enable filter variation Vector4? filterVar = null; if ((variationFlags & 0x40) == 0x40) filterVar = new Vector4(minFrequency, maxFrequency - minFrequency, minQ, maxQ - minQ); _events[i] = new PlayWaveEvent( this, timeStamp, randomOffset, soundBank, new[] { waveBankIndex }, new[] { trackIndex }, null, 0, VariationType.Ordered, volumeVar, pitchVar, filterVar, loopCount, false); break; } case 6: { // Unknown! clipReader.ReadByte(); // Event flags byte eventFlags = clipReader.ReadByte(); bool playRelease = (eventFlags & 0x01) == 0x01; bool panEnabled = (eventFlags & 0x02) == 0x02; bool useCenterSpeaker = (eventFlags & 0x04) == 0x04; byte loopCount = clipReader.ReadByte(); float panAngle = clipReader.ReadUInt16() / 100.0f; float panArc = clipReader.ReadUInt16() / 100.0f; // Pitch variation range float minPitch = clipReader.ReadInt16() / 1000.0f; float maxPitch = clipReader.ReadInt16() / 1000.0f; // Volume variation range float minVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte()); float maxVolume = XactHelpers.ParseVolumeFromDecibels(clipReader.ReadByte()); // Filter variation range float minFrequency = clipReader.ReadSingle(); float maxFrequency = clipReader.ReadSingle(); float minQ = clipReader.ReadSingle(); float maxQ = clipReader.ReadSingle(); // Unknown! clipReader.ReadByte(); // TODO: Still has unknown bits! byte variationFlags = clipReader.ReadByte(); // Enable pitch variation Vector2? pitchVar = null; if ((variationFlags & 0x10) == 0x10) pitchVar = new Vector2(minPitch, maxPitch - minPitch); // Enable volume variation Vector2? volumeVar = null; if ((variationFlags & 0x20) == 0x20) volumeVar = new Vector2(minVolume, maxVolume - minVolume); // Enable filter variation Vector4? filterVar = null; if ((variationFlags & 0x40) == 0x40) filterVar = new Vector4(minFrequency, maxFrequency - minFrequency, minQ, maxQ - minQ); // The number of tracks for the variations. ushort numTracks = clipReader.ReadUInt16(); // Not sure what most of this is. byte moreFlags = clipReader.ReadByte(); bool newWaveOnLoop = (moreFlags & 0x40) == 0x40; // The variation playlist type seems to be // stored in the bottom 4bits only. VariationType variationType = (VariationType)(moreFlags & 0x0F); // Unknown! clipReader.ReadBytes(5); // Read in the variation playlist. int[] waveBanks = new int[numTracks]; int[] tracks = new int[numTracks]; byte[] weights = new byte[numTracks]; int totalWeights = 0; for (int j = 0; j < numTracks; j++) { tracks[j] = clipReader.ReadUInt16(); waveBanks[j] = clipReader.ReadByte(); byte minWeight = clipReader.ReadByte(); byte maxWeight = clipReader.ReadByte(); weights[j] = (byte)(maxWeight - minWeight); totalWeights += weights[j]; } _events[i] = new PlayWaveEvent( this, timeStamp, randomOffset, soundBank, waveBanks, tracks, weights, totalWeights, variationType, volumeVar, pitchVar, filterVar, loopCount, newWaveOnLoop); break; } case 7: // Pitch Event throw new NotImplementedException("Pitch event"); case 8: { // Unknown! clipReader.ReadBytes(2); // Event flags byte eventFlags = clipReader.ReadByte(); bool isAdd = (eventFlags & 0x01) == 0x01; // The replacement or additive volume. float decibles = clipReader.ReadSingle() / 100.0f; float volume = XactHelpers.ParseVolumeFromDecibels(decibles + (isAdd ? volumeDb : 0)); // Unknown! clipReader.ReadBytes(9); _events[i] = new VolumeEvent( this, timeStamp, randomOffset, volume); break; } case 17: // Volume Repeat Event throw new NotImplementedException("Volume repeat event"); case 9: // Marker Event throw new NotImplementedException("Marker event"); default: throw new NotSupportedException("Unknown event " + eventId); } } clipReader.BaseStream.Seek(oldPosition, SeekOrigin.Begin); #pragma warning restore 0219 } internal void Update(float dt) { if (State != SoundState.Playing) return; _time += dt; // Play the next event. while (_nextEvent < _events.Length) { ClipEvent evt = _events[_nextEvent]; if (_time < evt.TimeStamp) break; evt.Play(); ++_nextEvent; } // Update all the active events. bool isPlaying = _nextEvent < _events.Length; for (int i = 0; i < _nextEvent; i++) { ClipEvent evt = _events[i]; isPlaying |= evt.Update(dt); } // Update the state. if (!isPlaying) State = SoundState.Stopped; } internal void SetFade(float fadeInDuration, float fadeOutDuration) { foreach (ClipEvent evt in _events) { if (evt is PlayWaveEvent) evt.SetFade(fadeInDuration, fadeOutDuration); } } internal void UpdateState(float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor) { _volumeScale = volume; float trackVolume = _volume * _volumeScale; foreach (ClipEvent evt in _events) evt.SetState(trackVolume, pitch, reverbMix, filterFrequency, filterQFactor); } public void Play() { _time = 0.0f; _nextEvent = 0; SetVolume(_defaultVolume); State = SoundState.Playing; Update(0); } public void Resume() { foreach (ClipEvent evt in _events) evt.Resume(); State = SoundState.Playing; } public void Stop() { foreach (ClipEvent evt in _events) evt.Stop(); State = SoundState.Stopped; } public void Pause() { foreach (ClipEvent evt in _events) evt.Pause(); State = SoundState.Paused; } public SoundState State { get; private set; } /// /// Set the combined volume scale from the parent objects. /// /// The volume scale. public void SetVolumeScale(float volume) { _volumeScale = volume; UpdateVolumes(); } /// /// Set the volume for the clip. /// /// The volume level. public void SetVolume(float volume) { _volume = volume; UpdateVolumes(); } private void UpdateVolumes() { float volume = _volume * _volumeScale; foreach (ClipEvent evt in _events) evt.SetTrackVolume(volume); } public void SetPan(float pan) { foreach (ClipEvent evt in _events) evt.SetTrackPan(pan); } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/XactHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Platform.Audio { public static class XactHelpers { static internal readonly Random Random = new Random(); public static float ParseDecibels(byte decibles) { //lazy 4-param fitting: //0xff 6.0 //0xca 2.0 //0xbf 1.0 //0xb4 0.0 //0x8f -4.0 //0x5a -12.0 //0x14 -38.0 //0x00 -96.0 const double a = -96.0; const double b = 0.432254984608615; const double c = 80.1748600297963; const double d = 67.7385212334047; float dB = (float)(((a - d) / (1 + (Math.Pow(decibles / c, b)))) + d); return dB; } public static float ParseVolumeFromDecibels(byte decibles) { //lazy 4-param fitting: //0xff 6.0 //0xca 2.0 //0xbf 1.0 //0xb4 0.0 //0x8f -4.0 //0x5a -12.0 //0x14 -38.0 //0x00 -96.0 const double a = -96.0; const double b = 0.432254984608615; const double c = 80.1748600297963; const double d = 67.7385212334047; float dB = (float)(((a - d) / (1 + (Math.Pow(decibles / c, b)))) + d); return ParseVolumeFromDecibels(dB); } public static float ParseVolumeFromDecibels(float decibles) { // Convert from decibles to linear volume. return (float)Math.Pow(10.0, decibles / 20.0); } } } ================================================ FILE: src/Xna.Framework.Audio/Audio/Xact/XactSound.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Platform.Audio; namespace Microsoft.Xna.Framework.Audio { class XactSound { private readonly bool _complexSound; private readonly XactClip[] _soundClips; private readonly int _waveBankIndex; private readonly int _trackIndex; private readonly float _volume; private readonly float _pitch; private readonly uint _categoryID; private readonly SoundBank _soundBank; private readonly bool _useReverb; private SoundEffectInstance _wave; private bool _streaming; private float _cueVolume = 1; private float _cuePitch = 0; private float _cueReverbMix = 0; private float? _cueFilterFrequency; private float? _cueFilterQFactor; internal readonly int[] RpcCurves; public XactSound(SoundBank soundBank, int waveBankIndex, int trackIndex) { _complexSound = false; _soundBank = soundBank; _waveBankIndex = waveBankIndex; _trackIndex = trackIndex; RpcCurves = new int[0]; } public XactSound(AudioEngine engine, SoundBank soundBank, BinaryReader soundReader) { _soundBank = soundBank; byte flags = soundReader.ReadByte(); _complexSound = (flags & 0x1) != 0; bool hasRPCs = (flags & 0x0E) != 0; bool hasDSPs = (flags & 0x10) != 0; _categoryID = soundReader.ReadUInt16(); _volume = XactHelpers.ParseVolumeFromDecibels(soundReader.ReadByte()); _pitch = soundReader.ReadInt16() / 1000.0f; soundReader.ReadByte(); //priority soundReader.ReadUInt16(); // filter stuff? int numClips = 0; if (_complexSound) numClips = soundReader.ReadByte(); else { _trackIndex = soundReader.ReadUInt16(); _waveBankIndex = soundReader.ReadByte(); } if (!hasRPCs) RpcCurves = new int[0]; else { long current = soundReader.BaseStream.Position; // This doesn't seem to be used... might have been there // to allow for some future file format expansion. ushort dataLength = soundReader.ReadUInt16(); byte numPresets = soundReader.ReadByte(); RpcCurves = new int[numPresets]; for (int i = 0; i < numPresets; i++) RpcCurves[i] = engine.GetRpcIndex(soundReader.ReadUInt32()); // Just in case seek to the right spot. soundReader.BaseStream.Seek(current + dataLength, SeekOrigin.Begin); } if (!hasDSPs) _useReverb = false; else { // The file format for this seems to follow the pattern for // the RPC curves above, but in this case XACT only supports // a single effect... Microsoft Reverb... so just set it. _useReverb = true; soundReader.BaseStream.Seek(7, SeekOrigin.Current); } if (_complexSound) { _soundClips = new XactClip[numClips]; for (int i = 0; i < numClips; i++) _soundClips[i] = new XactClip(soundBank, soundReader, _useReverb); } AudioCategory category = engine.Categories[_categoryID]; category.AddSound(this); } internal void SetFade(float fadeInTime, float fadeOutTime) { if (fadeInTime == 0.0f && fadeOutTime == 0.0f ) return; if (_complexSound) { foreach (XactClip sound in _soundClips) sound.SetFade(fadeInTime, fadeOutTime); } else { // TODO: } } public void Play(float volume, AudioEngine engine) { _cueVolume = volume; AudioCategory category = engine.Categories[_categoryID]; int curInstances = category.GetPlayingInstanceCount(); if (curInstances >= category.maxInstances) { XactSound prevSound = category.GetOldestInstance(); if (prevSound != null) { prevSound.SetFade(0.0f, category.fadeOut); prevSound.Stop(AudioStopOptions.Immediate); SetFade(category.fadeIn, 0.0f); } } float finalVolume = _volume * _cueVolume * category._volume[0]; float finalPitch = _pitch + _cuePitch; float finalMix = _useReverb ? _cueReverbMix : 0.0f; if (_complexSound) { foreach (XactClip clip in _soundClips) { clip.UpdateState(finalVolume, finalPitch, finalMix, _cueFilterFrequency, _cueFilterQFactor); clip.Play(); } } else { if (_wave != null) { if (_streaming) _wave.Dispose(); else _wave._strategy.IsXAct = false; _wave = null; } _wave = _soundBank.GetSoundEffectInstance(_waveBankIndex, _trackIndex, out _streaming); if (_wave == null) { // We couldn't create a sound effect instance, most likely // because we've reached the sound pool limits. return; } _wave.Pitch = finalPitch; _wave.Volume = finalVolume; _wave.SetReverbMix(finalMix); _wave.Play(); } } internal void Update(float dt) { if (_complexSound) { foreach (XactClip sound in _soundClips) sound.Update(dt); } else { if (_wave != null && _wave.State == SoundState.Stopped) { if (_streaming) _wave.Dispose(); else _wave._strategy.IsXAct = false; _wave = null; } } } internal void StopAll(AudioStopOptions options) { if (_complexSound) { foreach (XactClip clip in _soundClips) clip.Stop(); } else { if (_wave != null) { _wave.Stop(); if (_streaming) _wave.Dispose(); else _wave._strategy.IsXAct = false; _wave = null; } } } public void Stop(AudioStopOptions options) { if (_complexSound) { foreach (XactClip sound in _soundClips) sound.Stop(); } else { if (_wave != null) { _wave.Stop(); if (_streaming) _wave.Dispose(); else _wave._strategy.IsXAct = false; _wave = null; } } } public void Pause() { if (_complexSound) { foreach (XactClip sound in _soundClips) { if (sound.State == SoundState.Playing) sound.Pause(); } } else { if (_wave != null && _wave.State == SoundState.Playing) _wave.Pause(); } } public void Resume() { if (_complexSound) { foreach (XactClip sound in _soundClips) { if (sound.State == SoundState.Paused) sound.Resume(); } } else { if (_wave != null && _wave.State == SoundState.Paused) _wave.Resume(); } } internal void UpdateCategoryVolume(float categoryVolume) { // The different volumes modulate each other. float volume = _volume * _cueVolume * categoryVolume; if (_complexSound) { foreach (XactClip clip in _soundClips) clip.SetVolumeScale(volume); } else { if (_wave != null) _wave.Volume = volume; } } internal void UpdateState(AudioEngine engine, float volume, float pitch, float reverbMix, float? filterFrequency, float? filterQFactor) { _cueVolume = volume; float finalVolume = _volume * _cueVolume * engine.Categories[_categoryID]._volume[0]; _cueReverbMix = reverbMix; _cueFilterFrequency = filterFrequency; _cueFilterQFactor = filterQFactor; _cuePitch = pitch; float finalPitch = _pitch + _cuePitch; if (_complexSound) { foreach (XactClip clip in _soundClips) clip.UpdateState(finalVolume, finalPitch, _useReverb ? _cueReverbMix : 0.0f, _cueFilterFrequency, _cueFilterQFactor); } else if (_wave != null) { _wave.SetReverbMix(_useReverb ? _cueReverbMix : 0.0f); _wave.Pitch = finalPitch; _wave.Volume = finalVolume; } } internal void SetCuePan(float pan) { if (_complexSound) { foreach (XactClip clip in _soundClips) clip.SetPan(pan); } else { if (_wave != null) _wave.Pan = pan; } } public bool Playing { get { if (_complexSound) { foreach (XactClip clip in _soundClips) if (clip.State == SoundState.Playing) return true; return false; } return _wave != null && _wave.State == SoundState.Playing; } } public bool Stopped { get { if (_complexSound) { bool notStopped = false; // All clips must be stopped for the sound to be stopped. foreach (XactClip clip in _soundClips) { if (clip.State != SoundState.Stopped) notStopped = true; } return !notStopped; } // We null the wave when it it stopped. return _wave == null; } } public bool IsPaused { get { if (_complexSound) { foreach (XactClip clip in _soundClips) if (clip.State == SoundState.Paused) return true; return false; } return _wave != null && _wave.State == SoundState.Paused; } } } } ================================================ FILE: src/Xna.Framework.Audio/Content/SoundEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Audio; namespace Microsoft.Xna.Framework.Content { internal class SoundEffectReader : ContentTypeReader { protected override SoundEffect Read(ContentReader input, SoundEffect existingInstance) { // XNB format for SoundEffect... // // Byte [format size] Format WAVEFORMATEX structure // UInt32 Data size // Byte [data size] Data Audio waveform data // Int32 Loop start In bytes (start must be format block aligned) // Int32 Loop length In bytes (length must be format block aligned) // Int32 Duration In milliseconds // The header containss the WAVEFORMATEX header structure // defined as the following... // // WORD wFormatTag; // byte[0] +2 // WORD nChannels; // byte[2] +2 // DWORD nSamplesPerSec; // byte[4] +4 // DWORD nAvgBytesPerSec; // byte[8] +4 // WORD nBlockAlign; // byte[12] +2 // WORD wBitsPerSample; // byte[14] +2 // WORD cbSize; // byte[16] +2 // // We let the sound effect deal with parsing this based // on what format the audio data actually is. int headerSize = input.ReadInt32(); byte[] header = input.ReadBytes(headerSize); // Read the audio data buffer. int dataSize = input.ReadInt32(); byte[] data = input.BufferPool.Get(dataSize); input.Read(data, 0, dataSize); int loopStart = input.ReadInt32(); int loopLength = input.ReadInt32(); int durationMs = input.ReadInt32(); // Create the effect. SoundEffect effect = existingInstance ?? new SoundEffect(header, data, dataSize, durationMs, loopStart, loopLength); // Store the original asset name for debugging later. effect.Name = input.AssetName; input.BufferPool.Return(data); return effect; } } } ================================================ FILE: src/Xna.Framework.Audio/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Audio/NamespaceDoc.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Audio { /// /// Support for playing sound effects and XACT audio. /// [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] class NamespaceDoc { } } ================================================ FILE: src/Xna.Framework.Audio/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Audio/Xna.Framework.Audio.csproj ================================================  ..\..\Artifacts\Xna.Framework.Audio\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {3F81F76D-F0F3-44FE-A256-40AF153C33F7} Xna.Framework.Audio Microsoft.Xna.Framework.Audio true CS0067;CS1591;CS1574;CS0419;CS8500 true The Audio framework. .net core;core;.net standard;standard nkast.Xna.Framework.Audio ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Content/Content/ContentLoadException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { /// /// The exception that's thrown when an error occurs when loading content. /// public class ContentLoadException : Exception { /// /// Create a new instance. /// public ContentLoadException() : base() { } /// /// Create a new instance with the specified message. /// /// The message of the exception. public ContentLoadException(string message) : base(message) { } /// /// Create a new instance with the specified message and inner exception. /// /// The message of the exception. /// The inner exception. public ContentLoadException(string message, Exception innerException) : base(message,innerException) { } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentManager.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using Microsoft.Xna.Platform; namespace Microsoft.Xna.Framework.Content { public class ContentManager : IDisposable { const byte ContentFlagCompressedLzx = 0x80; const byte ContentFlagCompressedLz4 = 0x40; const byte ContentFlagCompressedExt = 0xC0; const byte ContentFlagHiDef = 0x01; private readonly object SyncHandle = new object(); private string _rootDirectory = string.Empty; private IServiceProvider _serviceProvider; private Dictionary _loadedAssets = new Dictionary(StringComparer.OrdinalIgnoreCase); private HashSet _disposableAssets = new HashSet(); private bool _isDisposed; private static readonly List _targetPlatformIdentifiers = new List() { // XNA content identifiers 'w', // Windows (XNA & DirectX) 'x', // Xbox360 (XNA) 'm', // WindowsPhone7.0 (XNA) // content identifiers 'i', // iOS 'a', // Android 'd', // DesktopGL 'X', // MacOSX 'W', // WindowsStoreApp 'n', // NativeClient 'r', // RaspberryPi 'P', // PlayStation4 '5', // PlayStation5 'O', // XboxOne 'S', // Nintendo Switch 'b', // BlazorGL // NOTE: There are additional idenfiers for consoles that // are not defined in this repository. Be sure to ask the // console port maintainers to ensure no collisions occur. // Legacy identifiers... these could be reused in the // future if we feel enough time has passed. 'p', // PlayStationMobile 'v', // PSVita 'g', // Windows (OpenGL) 'l', // Linux 'M', // WindowsPhone8 'G', // Google Stadia }; public string RootDirectory { get { return _rootDirectory; } set { _rootDirectory = value; } } public IServiceProvider ServiceProvider { get { return this._serviceProvider; } } public ContentManager(IServiceProvider serviceProvider) { if (serviceProvider == null) throw new ArgumentNullException("serviceProvider"); this._serviceProvider = serviceProvider; } public ContentManager(IServiceProvider serviceProvider, string rootDirectory) { if (serviceProvider == null) throw new ArgumentNullException("serviceProvider"); if (rootDirectory == null) throw new ArgumentNullException("rootDirectory"); this.RootDirectory = rootDirectory; this._serviceProvider = serviceProvider; } public virtual T LoadLocalized (string assetName) { string [] cultureNames = { CultureInfo.CurrentCulture.Name, // eg. "en-US" CultureInfo.CurrentCulture.TwoLetterISOLanguageName // eg. "en" }; // Look first for a specialized language-country version of the asset, // then if that fails, loop back around to see if we can find one that // specifies just the language without the country part. foreach (string cultureName in cultureNames) { string localizedAssetName = assetName + '.' + cultureName; try { return Load(localizedAssetName); } catch (ContentLoadException) { /* ignore */ } } // If we didn't find any localized asset, fall back to the default name. return Load(assetName); } public virtual T Load(string assetName) { if (string.IsNullOrEmpty(assetName)) throw new ArgumentNullException("assetName"); if (_isDisposed) throw new ObjectDisposedException("ContentManager"); T result = default(T); // On some platforms, name and slash direction matter. // We store the asset by a /-seperating key rather than how the // path to the file was passed to us to avoid // loading "content/asset1.xnb" and "content\\ASSET1.xnb" as if they were two // different files. This matches stock XNA behavior. // The dictionary will ignore case differences string key = assetName.Replace('\\', '/'); lock (this.SyncHandle) { // Check for a previously loaded asset first object asset = null; if (_loadedAssets.TryGetValue(key, out asset)) { if (asset is T) return (T)asset; } else { _loadedAssets[key] = null; } } // Load the asset. result = ReadAsset(assetName, this.RecordDisposableCallback); lock (this.SyncHandle) { _loadedAssets[key] = result; } return result; } protected virtual Stream OpenStream(string assetName) { try { string assetPath = Path.Combine(RootDirectory, assetName) + ".xnb"; // This is primarily for editor support. // Setting the RootDirectory to an absolute path is useful in editor // situations, but TitleContainer can ONLY be passed relative paths. if (Path.IsPathRooted(assetPath)) return File.OpenRead(assetPath); return TitleContainer.OpenStream(assetPath); } catch (FileNotFoundException fileNotFoundex) { throw new ContentLoadException("The content file was not found for asset '" + assetName + "'.", fileNotFoundex); } catch (DirectoryNotFoundException directoryNotFoundex) { throw new ContentLoadException("The directory was not found for asset '" + assetName + "'.", directoryNotFoundex); } catch (Exception ex) { throw new ContentLoadException("Opening stream error for asset '" + assetName + "'.", ex); } } protected T ReadAsset(string assetName, Action recordDisposableObject) { if (string.IsNullOrEmpty(assetName)) throw new ArgumentNullException("assetName"); if (_isDisposed) throw new ObjectDisposedException("ContentManager"); if (recordDisposableObject == null) recordDisposableObject = this.RecordDisposableCallback; // Try to load as XNB file Stream stream = OpenStream(assetName); using (BinaryReader xnbReader = new BinaryReader(stream)) { // The first 4 bytes should be the "XNB" header. i use that to detect an invalid file byte x = xnbReader.ReadByte(); byte n = xnbReader.ReadByte(); byte b = xnbReader.ReadByte(); byte platform = xnbReader.ReadByte(); if (x != 'X' || n != 'N' || b != 'B') throw new ContentLoadException("Asset does not appear to be a valid XNB file."); if (!_targetPlatformIdentifiers.Contains((char)platform)) throw new ContentLoadException("Asset does not appear to target a known platform. Platform Identifier: '" + (char)platform+"'."); byte version = xnbReader.ReadByte(); if (version != 5 && version != 4) throw new ContentLoadException("Invalid XNB version"); byte flags = xnbReader.ReadByte(); bool isCompressed = (flags & ContentFlagCompressedExt) != 0; bool isHiDef = (flags & ContentFlagHiDef) != 0; // The next int32 is the length of the XNB file uint compressedFileSize = xnbReader.ReadUInt32(); if (isCompressed) { // Decompress the xnb uint decompressedDataSize = xnbReader.ReadUInt32(); uint compressedDataSize = compressedFileSize - 14; Stream decompressedStream = null; bool isCompressedLzx = (flags & ContentFlagCompressedExt) == ContentFlagCompressedLzx; bool isCompressedLz4 = (flags & ContentFlagCompressedExt) == ContentFlagCompressedLz4; bool isCompressedExt = (flags & ContentFlagCompressedExt) == ContentFlagCompressedExt; if (isCompressedExt) { // read Ext compression header byte reserved = xnbReader.ReadByte(); compressedDataSize -= 1; if (reserved != 0) throw new InvalidOperationException("Invalid compression header."); byte compression = xnbReader.ReadByte(); compressedDataSize -= 1; switch (compression) { case 0x02: // LX4 { decompressedStream = new Lz4DecoderStream(stream); } break; case 0x03: // Brotli { decompressedStream = ((IPlatformTitleContainer)TitleContainer.Current).GetStrategy().DecompressBrotliStream(stream, compressedDataSize, decompressedDataSize); } break; default: throw new NotImplementedException("ContentCompression " + compression + " not implemented."); } } else if (isCompressedLzx) { // LzxDecoderStream require a seekable stream. // Handle the case of Android's BufferedStream assets. Stream compressedStream = stream; if (stream is BufferedStream && !stream.CanSeek) { compressedStream = new MemoryStream((int)compressedDataSize); stream.CopyTo(compressedStream); compressedStream.Seek(0, SeekOrigin.Begin); } decompressedStream = new LzxDecoderStream(compressedStream, (int)decompressedDataSize, (int)compressedDataSize); } else if (isCompressedLz4) { decompressedStream = new Lz4DecoderStream(stream); } // create reader from decompressedStream using (ContentReader reader = new ContentReader(this, decompressedStream, assetName, version, recordDisposableObject)) { T result = reader.ReadAsset(); if (result == null) throw new ContentLoadException("Could not load " + assetName + " asset!"); return result; } } else // no compression { using (ContentReader reader = new ContentReader(this, stream, assetName, version, recordDisposableObject)) { T result = reader.ReadAsset(); if (result == null) throw new ContentLoadException("Could not load " + assetName + " asset!"); return result; } } } } private void RecordDisposableCallback(IDisposable disposable) { Debug.Assert(disposable != null, "The disposable is null."); lock (this.SyncHandle) { _disposableAssets.Add(disposable); } } public virtual void Unload() { lock (this.SyncHandle) { foreach (IDisposable disposable in _disposableAssets) { if (disposable != null) disposable.Dispose(); } _disposableAssets.Clear(); _loadedAssets.Clear(); } } #region IDisposable Implementation ~ContentManager() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (_isDisposed) return; if (disposing) { Unload(); } _isDisposed = true; } #endregion IDisposable Implementation } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReader.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { public sealed class ContentReader : BinaryReader { private ContentManager _contentManager; private Action _recordDisposableObject; private ContentTypeReaderManager _typeReaderManager; private string _assetName; private List>> _sharedResourceFixups; private ContentTypeReader[] _typeReaders; internal int _version; internal ContentTypeReader[] TypeReaders { get { return _typeReaders; } } internal ContentReader(ContentManager manager, Stream stream, string assetName, int version, Action recordDisposableObject) : base(stream) { this._recordDisposableObject = recordDisposableObject; this._contentManager = manager; this._assetName = assetName; this._version = version; } public ContentManager ContentManager { get { return _contentManager; } } public string AssetName { get { return _assetName; } } public ContentBufferPool BufferPool { get { return ContentBufferPool.Current; } } internal T ReadAsset() { int typeReaderCount = base.Read7BitEncodedInt(); _typeReaderManager = new ContentTypeReaderManager(); _typeReaders = _typeReaderManager.LoadAssetReaders(this, typeReaderCount); int sharedResourceCount = base.Read7BitEncodedInt(); _sharedResourceFixups = new List>>(); // Read primary object T result = ReadObject(); // Read shared resources if (sharedResourceCount > 0) ReadSharedResources(sharedResourceCount); return result; } internal void ReadSharedResources(int sharedResourceCount) { object[] sharedResources = new object[sharedResourceCount]; for (int i = 0; i < sharedResourceCount; ++i) { object existingInstance = null; sharedResources[i] = ReadObject(existingInstance); } // Fixup shared resources by calling each registered action for (int i = 0; i < _sharedResourceFixups.Count; ++i) { KeyValuePair> fixup = _sharedResourceFixups[i]; object sharedResource = sharedResources[fixup.Key]; Action fixupAction = fixup.Value; fixupAction(sharedResource); } } public T ReadExternalReference() { string externalReference = ReadString(); if (!String.IsNullOrEmpty(externalReference)) { return _contentManager.Load(FileHelpers.ResolveRelativePath(_assetName, externalReference)); } return default(T); } public T ReadObject() { return ReadObject(default(T)); } public T ReadObject(ContentTypeReader typeReader) { T result; ContentTypeReader typeReaderT = typeReader as ContentTypeReader; if (typeReaderT != null) result = typeReaderT.Read(this, default(T)); else result = (T)typeReader.Read(this, default(T)); if (result is IDisposable disposable) _recordDisposableObject(disposable); return result; } public T ReadObject(T existingInstance) { int typeReaderIndex = base.Read7BitEncodedInt(); if (typeReaderIndex == 0) return existingInstance; if (typeReaderIndex > _typeReaders.Length) throw new ContentLoadException("Incorrect type reader index found!"); ContentTypeReader typeReader = _typeReaders[typeReaderIndex - 1]; T result = (T)typeReader.Read(this, existingInstance); if (result is IDisposable disposable) _recordDisposableObject(disposable); return result; } public T ReadObject(ContentTypeReader typeReader, T existingInstance) { if (!ReflectionHelpers.IsValueType(typeReader.TargetType)) return ReadObject(existingInstance); T result = (T)typeReader.Read(this, existingInstance); if (result is IDisposable disposable) _recordDisposableObject(disposable); return result; } public T ReadRawObject() { return (T)ReadRawObject (default(T)); } public T ReadRawObject(ContentTypeReader typeReader) { return (T)ReadRawObject(typeReader, default(T)); } public T ReadRawObject(T existingInstance) { Type objectType = typeof(T); foreach(ContentTypeReader typeReader in _typeReaders) { if(typeReader.TargetType == objectType) return (T)ReadRawObject(typeReader,existingInstance); } throw new NotSupportedException(); } public T ReadRawObject(ContentTypeReader typeReader, T existingInstance) { return (T)typeReader.Read(this, existingInstance); } public void ReadSharedResource(Action fixup) { int index = base.Read7BitEncodedInt(); if (index > 0) { _sharedResourceFixups.Add(new KeyValuePair>(index - 1, delegate(object v) { if (!(v is T)) { throw new ContentLoadException(String.Format("Error loading shared resource. Expected type {0}, received type {1}", typeof(T).Name, v.GetType().Name)); } fixup((T)v); })); } } internal new int Read7BitEncodedInt() { return base.Read7BitEncodedInt(); } public Matrix ReadMatrix() { Matrix result; result.M11 = ReadSingle(); result.M12 = ReadSingle(); result.M13 = ReadSingle(); result.M14 = ReadSingle(); result.M21 = ReadSingle(); result.M22 = ReadSingle(); result.M23 = ReadSingle(); result.M24 = ReadSingle(); result.M31 = ReadSingle(); result.M32 = ReadSingle(); result.M33 = ReadSingle(); result.M34 = ReadSingle(); result.M41 = ReadSingle(); result.M42 = ReadSingle(); result.M43 = ReadSingle(); result.M44 = ReadSingle(); return result; } internal Complex ReadComplex() { Complex result; result.R = ReadSingle(); result.i = ReadSingle(); return result; } public Quaternion ReadQuaternion() { Quaternion result; result.X = ReadSingle(); result.Y = ReadSingle(); result.Z = ReadSingle(); result.W = ReadSingle(); return result; } public Vector2 ReadVector2() { Vector2 result; result.X = ReadSingle(); result.Y = ReadSingle(); return result; } public Vector3 ReadVector3() { Vector3 result; result.X = ReadSingle(); result.Y = ReadSingle(); result.Z = ReadSingle(); return result; } public Vector4 ReadVector4() { Vector4 result; result.X = ReadSingle(); result.Y = ReadSingle(); result.Z = ReadSingle(); result.W = ReadSingle(); return result; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ArrayReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { internal class ArrayReader : ContentTypeReader { ContentTypeReader _elementReader; protected internal override void Initialize(ContentTypeReaderManager manager) { Type readerType = typeof(T); _elementReader = manager.GetTypeReader(readerType); } protected internal override T[] Read(ContentReader input, T[] existingInstance) { uint count = input.ReadUInt32(); T[] array = existingInstance; if (array == null) array = new T[count]; if (ReflectionHelpers.IsValueType(typeof(T))) { for (uint i = 0; i < count; i++) { array[i] = input.ReadObject(_elementReader); } } else { for (uint i = 0; i < count; i++) { int readerType = input.Read7BitEncodedInt(); array[i] = readerType > 0 ? input.ReadObject(input.TypeReaders[readerType - 1]) : default(T); } } return array; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/BooleanReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class BooleanReader : ContentTypeReader { protected internal override bool Read(ContentReader input, bool existingInstance) { return input.ReadBoolean(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/BoundingBoxReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { class BoundingBoxReader : ContentTypeReader { protected internal override BoundingBox Read(ContentReader input, BoundingBox existingInstance) { Vector3 min = input.ReadVector3(); Vector3 max = input.ReadVector3(); BoundingBox result = new BoundingBox(min, max); return result; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/BoundingFrustumReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class BoundingFrustumReader : ContentTypeReader { protected internal override BoundingFrustum Read(ContentReader input, BoundingFrustum existingInstance) { return new BoundingFrustum(input.ReadMatrix()); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/BoundingSphereReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class BoundingSphereReader : ContentTypeReader { protected internal override BoundingSphere Read(ContentReader input, BoundingSphere existingInstance) { Vector3 center = input.ReadVector3(); float radius = input.ReadSingle(); return new BoundingSphere(center, radius); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ByteReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class ByteReader : ContentTypeReader { protected internal override byte Read(ContentReader input, byte existingInstance) { return input.ReadByte(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/CharReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class CharReader : ContentTypeReader { protected internal override char Read(ContentReader input, char existingInstance) { return input.ReadChar(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ComplexReader.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class ComplexReader : ContentTypeReader { protected internal override Complex Read(ContentReader input, Complex existingInstance) { return input.ReadComplex(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/CurveReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class CurveReader : ContentTypeReader { protected internal override Curve Read(ContentReader input, Curve existingInstance) { Curve curve = existingInstance; if (curve == null) { curve = new Curve(); } curve.PreLoop = (CurveLoopType)input.ReadInt32(); curve.PostLoop = (CurveLoopType)input.ReadInt32(); int count = input.ReadInt32(); for (int i = 0; i < count; i++) { float position = input.ReadSingle(); float value = input.ReadSingle(); float tangentIn = input.ReadSingle(); float tangentOut = input.ReadSingle(); CurveContinuity continuity = (CurveContinuity)input.ReadInt32(); curve.Keys.Add(new CurveKey(position, value, tangentIn, tangentOut, continuity)); } return curve; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/DateTimeReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class DateTimeReader : ContentTypeReader { protected internal override DateTime Read(ContentReader input, DateTime existingInstance) { UInt64 value = input.ReadUInt64(); UInt64 mask = (UInt64)3 << 62; long ticks = (long)(value & ~mask); DateTimeKind kind = (DateTimeKind)((value >> 62) & 3); return new DateTime(ticks, kind); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/DecimalReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class DecimalReader : ContentTypeReader { protected internal override decimal Read(ContentReader input, decimal existingInstance) { return input.ReadDecimal(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/DictionaryReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { internal class DictionaryReader : ContentTypeReader> { ContentTypeReader _keyReader; ContentTypeReader _valueReader; Type _keyType; Type _valueType; protected internal override void Initialize(ContentTypeReaderManager manager) { _keyType = typeof(TKey); _valueType = typeof(TValue); _keyReader = manager.GetTypeReader(_keyType); _valueReader = manager.GetTypeReader(_valueType); } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override Dictionary Read(ContentReader input, Dictionary existingInstance) { int count = input.ReadInt32(); Dictionary dictionary = existingInstance; if (dictionary == null) dictionary = new Dictionary(count); else dictionary.Clear(); if (ReflectionHelpers.IsValueType(_keyType)) { for (int i = 0; i < count; i++) { TKey key = input.ReadObject(_keyReader); TValue value; if (ReflectionHelpers.IsValueType(_valueType)) { value = input.ReadObject(_valueReader); } else { int valueReaderType = input.Read7BitEncodedInt(); value = (valueReaderType) > 0 ? input.ReadObject(input.TypeReaders[valueReaderType-1]) : default(TValue); } dictionary.Add(key, value); } } else { for (int i = 0; i < count; i++) { int keyReaderType = input.Read7BitEncodedInt(); TKey key = (keyReaderType > 0) ? input.ReadObject(input.TypeReaders[keyReaderType - 1]) : default(TKey); TValue value; if (ReflectionHelpers.IsValueType(_valueType)) { value = input.ReadObject(_valueReader); } else { int valueReaderType = input.Read7BitEncodedInt(); value = (valueReaderType > 0) ? input.ReadObject(input.TypeReaders[valueReaderType-1]) : default(TValue); } dictionary.Add(key, value); } } return dictionary; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/DoubleReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class DoubleReader : ContentTypeReader { protected internal override double Read(ContentReader input, double existingInstance) { return input.ReadDouble(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/EnumReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class EnumReader : ContentTypeReader { ContentTypeReader _elementReader; protected internal override void Initialize(ContentTypeReaderManager manager) { Type readerType = Enum.GetUnderlyingType(typeof(T)); _elementReader = manager.GetTypeReader(readerType); } protected internal override T Read(ContentReader input, T existingInstance) { return input.ReadRawObject(_elementReader); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ExternalReferenceReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content { /// /// External reference reader, provided for compatibility with XNA Framework built content /// internal class ExternalReferenceReader : ContentTypeReader { public ExternalReferenceReader() : base(null) { } protected internal override object Read(ContentReader input, object existingInstance) { return input.ReadExternalReference(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Int16Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class Int16Reader : ContentTypeReader { protected internal override short Read(ContentReader input, short existingInstance) { return input.ReadInt16(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Int32Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class Int32Reader : ContentTypeReader { protected internal override int Read(ContentReader input, int existingInstance) { return input.ReadInt32(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Int64Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class Int64Reader : ContentTypeReader { protected internal override long Read(ContentReader input, long existingInstance) { return input.ReadInt64(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ListReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { internal class ListReader : ContentTypeReader> { ContentTypeReader _elementReader; protected internal override void Initialize(ContentTypeReaderManager manager) { Type readerType = typeof(T); _elementReader = manager.GetTypeReader(readerType); } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override List Read(ContentReader input, List existingInstance) { int count = input.ReadInt32(); List list = existingInstance; if (list == null) list = new List(count); if (ReflectionHelpers.IsValueType(typeof(T))) { for (int i = 0; i < count; i++) { list.Add(input.ReadObject(_elementReader)); } } else { for (int i = 0; i < count; i++) { int readerType = input.Read7BitEncodedInt(); list.Add(readerType > 0 ? input.ReadObject(input.TypeReaders[readerType - 1]) : default(T)); } } return list; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/MatrixReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content { class MatrixReader : ContentTypeReader { protected internal override Matrix Read(ContentReader input, Matrix existingInstance) { //return input.ReadMatrix(); Matrix result; result.M11 = input.ReadSingle(); result.M12 = input.ReadSingle(); result.M13 = input.ReadSingle(); result.M14 = input.ReadSingle(); result.M21 = input.ReadSingle(); result.M22 = input.ReadSingle(); result.M23 = input.ReadSingle(); result.M24 = input.ReadSingle(); result.M31 = input.ReadSingle(); result.M32 = input.ReadSingle(); result.M33 = input.ReadSingle(); result.M34 = input.ReadSingle(); result.M41 = input.ReadSingle(); result.M42 = input.ReadSingle(); result.M43 = input.ReadSingle(); result.M44 = input.ReadSingle(); return result; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/MultiArrayReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { internal class MultiArrayReader : ContentTypeReader { ContentTypeReader _elementReader; protected internal override void Initialize(ContentTypeReaderManager manager) { Type readerType = typeof(T); _elementReader = manager.GetTypeReader(readerType); } protected internal override Array Read(ContentReader input, Array existingInstance) { int rank = input.ReadInt32(); if (rank < 1) throw new RankException(); int[] dimensions = new int[rank]; int count = 1; for (int d = 0; d < dimensions.Length; d++) count *= dimensions[d] = input.ReadInt32(); Array array = existingInstance; if (array == null) array = Array.CreateInstance(typeof(T), dimensions);//new T[count]; else if (dimensions.Length != array.Rank) throw new RankException("existingInstance"); int[] indices = new int[rank]; for (int i = 0; i < count; i++) { T value; if (ReflectionHelpers.IsValueType(typeof(T))) value = input.ReadObject(_elementReader); else { int readerType = input.Read7BitEncodedInt(); if (readerType > 0) value = input.ReadObject(input.TypeReaders[readerType - 1]); else value = default(T); } CalcIndices(array, i, indices); array.SetValue(value, indices); } return array; } static void CalcIndices(Array array, int index, int[] indices) { if (array.Rank != indices.Length) throw new Exception("indices"); for (int d = 0; d < indices.Length; d++) { if (index == 0) indices[d] = 0; else { indices[d] = index % array.GetLength(d); index /= array.GetLength(d); } } if (index != 0) throw new ArgumentOutOfRangeException("index"); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/NullableReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class NullableReader : ContentTypeReader where T : struct { ContentTypeReader _elementReader; protected internal override void Initialize(ContentTypeReaderManager manager) { Type readerType = typeof(T); _elementReader = manager.GetTypeReader(readerType); } protected internal override T? Read(ContentReader input, T? existingInstance) { if(input.ReadBoolean()) return input.ReadObject(_elementReader); return null; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/PlaneReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class PlaneReader : ContentTypeReader { protected internal override Plane Read(ContentReader input, Plane existingInstance) { existingInstance.Normal = input.ReadVector3(); existingInstance.D = input.ReadSingle(); return existingInstance; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/PointReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class PointReader : ContentTypeReader { protected internal override Point Read(ContentReader input, Point existingInstance) { int X = input.ReadInt32(); int Y = input.ReadInt32(); return new Point(X, Y); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/QuaternionReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class QuaternionReader : ContentTypeReader { protected internal override Quaternion Read(ContentReader input, Quaternion existingInstance) { return input.ReadQuaternion(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/RayReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class RayReader : ContentTypeReader { protected internal override Ray Read(ContentReader input, Ray existingInstance) { Vector3 position = input.ReadVector3(); Vector3 direction = input.ReadVector3(); return new Ray(position, direction); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/RectangleReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class RectangleReader : ContentTypeReader { protected internal override Rectangle Read(ContentReader input, Rectangle existingInstance) { int left = input.ReadInt32(); int top = input.ReadInt32(); int width = input.ReadInt32(); int height = input.ReadInt32(); return new Rectangle(left, top, width, height); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/ReflectiveReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { internal class ReflectiveReader : ContentTypeReader { delegate void ReadElement(ContentReader input, object parent); private List _readers; private ConstructorInfo _constructor; private ContentTypeReader _baseTypeReader; public ReflectiveReader() : base(typeof(T)) { } public override bool CanDeserializeIntoExistingObject { get { return TargetType.IsClass(); } } protected internal override void Initialize(ContentTypeReaderManager manager) { base.Initialize(manager); Type baseType = ReflectionHelpers.GetBaseType(TargetType); if (baseType != null && baseType != typeof(object)) _baseTypeReader = manager.GetTypeReader(baseType); _constructor = TargetType.GetDefaultConstructor(); PropertyInfo[] properties = TargetType.GetAllProperties(); FieldInfo[] fields = TargetType.GetAllFields(); _readers = new List(fields.Length + properties.Length); // Gather the properties. foreach (PropertyInfo property in properties) { ReadElement read = GetElementReader(manager, property); if (read != null) _readers.Add(read); } // Gather the fields. foreach (FieldInfo field in fields) { ReadElement read = GetElementReader(manager, field); if (read != null) _readers.Add(read); } } private static ReadElement GetElementReader(ContentTypeReaderManager manager, MemberInfo member) { PropertyInfo property = member as PropertyInfo; FieldInfo field = member as FieldInfo; Debug.Assert(field != null || property != null); if (property != null) { // Properties must have at least a getter. if (property.CanRead == false) return null; // Skip over indexer properties. if (property.GetIndexParameters().Any()) return null; } // Are we explicitly asked to ignore this item? if (ReflectionHelpers.GetCustomAttribute(member) != null) return null; ContentSerializerAttribute contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute(member); if (contentSerializerAttribute == null) { if (property != null) { // There is no ContentSerializerAttribute, so non-public // properties cannot be deserialized. if (!ReflectionHelpers.PropertyIsPublic(property)) return null; // If the read-only property has a type reader, // and CanDeserializeIntoExistingObject is true, // then it is safe to deserialize into the existing object. if (!property.CanWrite) { ContentTypeReader typeReader = manager.GetTypeReader(property.PropertyType); if (typeReader == null || !typeReader.CanDeserializeIntoExistingObject) return null; } } else { // There is no ContentSerializerAttribute, so non-public // fields cannot be deserialized. if (!field.IsPublic) return null; // evolutional: Added check to skip initialise only fields if (field.IsInitOnly) return null; } } Action setter; Type elementType; if (property != null) { elementType = property.PropertyType; if (property.CanWrite) setter = (o, v) => property.SetValue(o, v, null); else setter = (o, v) => { }; } else { elementType = field.FieldType; setter = field.SetValue; } // Shared resources get special treatment. if (contentSerializerAttribute != null && contentSerializerAttribute.SharedResource) { return (input, parent) => { Action action = value => setter(parent, value); input.ReadSharedResource(action); }; } // We need to have a reader at this point. ContentTypeReader reader = manager.GetTypeReader(elementType); if (reader == null) if (elementType == typeof(System.Array)) reader = new ArrayReader(); else throw new ContentLoadException(string.Format("Content reader could not be found for {0} type.", elementType.FullName)); // We use the construct delegate to pick the correct existing // object to be the target of deserialization. Func construct = parent => null; if (property != null && !property.CanWrite) construct = parent => property.GetValue(parent, null); return (input, parent) => { object existing = construct(parent); object obj2 = input.ReadObject(reader, existing); setter(parent, obj2); }; } protected internal override object Read(ContentReader input, object existingInstance) { T obj; if (existingInstance != null) obj = (T)existingInstance; else obj = (_constructor == null ? (T)Activator.CreateInstance(typeof(T)) : (T)_constructor.Invoke(null)); if(_baseTypeReader != null) _baseTypeReader.Read(input, obj); // Box the type. object boxed = (object)obj; foreach (ReadElement reader in _readers) reader(input, boxed); // Unbox it... required for value types. obj = (T)boxed; return obj; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/SByteReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class SByteReader : ContentTypeReader { protected internal override sbyte Read(ContentReader input, sbyte existingInstance) { return input.ReadSByte(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/SingleReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class SingleReader : ContentTypeReader { protected internal override float Read(ContentReader input, float existingInstance) { return input.ReadSingle(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/StringReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class StringReader : ContentTypeReader { protected internal override string Read(ContentReader input, string existingInstance) { return input.ReadString(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/TimeSpanReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class TimeSpanReader : ContentTypeReader { protected internal override TimeSpan Read(ContentReader input, TimeSpan existingInstance) { return new TimeSpan(input.ReadInt64()); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/UInt16Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class UInt16Reader : ContentTypeReader { protected internal override ushort Read(ContentReader input, ushort existingInstance) { return input.ReadUInt16(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/UInt32Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class UInt32Reader : ContentTypeReader { protected internal override uint Read(ContentReader input, uint existingInstance) { return input.ReadUInt32(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/UInt64Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class UInt64Reader : ContentTypeReader { protected internal override ulong Read(ContentReader input, ulong existingInstance) { return input.ReadUInt64(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Vector2Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class Vector2Reader : ContentTypeReader { protected internal override Vector2 Read(ContentReader input, Vector2 existingInstance) { return input.ReadVector2(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Vector3Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class Vector3Reader : ContentTypeReader { protected internal override Vector3 Read(ContentReader input, Vector3 existingInstance) { return input.ReadVector3(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentReaders/Vector4Reader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { internal class Vector4Reader : ContentTypeReader { protected internal override Vector4 Read(ContentReader input, Vector4 existingInstance) { return input.ReadVector4(); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentSerializerAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public sealed class ContentSerializerAttribute : Attribute { private string _collectionItemName; /// /// Creates an instance of the attribute. /// public ContentSerializerAttribute() { AllowNull = true; } public bool AllowNull { get; set; } /// /// Returns the overriden XML element name or the default "Item". /// public string CollectionItemName { get { // Return the defaul if unset. if (string.IsNullOrEmpty(_collectionItemName)) return "Item"; return _collectionItemName; } set { _collectionItemName = value; } } public string ElementName { get; set; } public bool FlattenContent { get; set; } /// /// Returns true if the default CollectionItemName value was overridden. /// public bool HasCollectionItemName { get { return !string.IsNullOrEmpty(_collectionItemName); } } public bool Optional { get; set; } public bool SharedResource { get; set; } public ContentSerializerAttribute Clone() { ContentSerializerAttribute clone = new ContentSerializerAttribute(); clone.AllowNull = AllowNull; clone._collectionItemName = _collectionItemName; clone.ElementName = ElementName; clone.FlattenContent = FlattenContent; clone.Optional = Optional; clone.SharedResource = SharedResource; return clone; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentSerializerCollectionItemNameAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { /// /// This is used to specify the XML element name to use for each item in a collection. /// [AttributeUsage(AttributeTargets.Class)] public sealed class ContentSerializerCollectionItemNameAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The XML element name to use for each item in the collection. public ContentSerializerCollectionItemNameAttribute(string collectionItemName) { CollectionItemName = collectionItemName; } /// /// The XML element name to use for each item in the collection. /// public string CollectionItemName { get; private set;} } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentSerializerIgnoreAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // // Author: Kenneth James Pouncey using System; namespace Microsoft.Xna.Framework.Content { [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public sealed class ContentSerializerIgnoreAttribute : Attribute { } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentSerializerRuntimeTypeAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { /// /// This is used to specify the type to use when deserializing this object at runtime. /// [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class)] public sealed class ContentSerializerRuntimeTypeAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The name of the type to use at runtime. public ContentSerializerRuntimeTypeAttribute(string runtimeType) { RuntimeType = runtimeType; } /// /// The name of the type to use at runtime. /// public string RuntimeType { get; private set;} } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentSerializerTypeVersionAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { /// /// This is used to specify the version when deserializing this object at runtime. /// [AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class)] public sealed class ContentSerializerTypeVersionAttribute : Attribute { /// /// Creates an instance of the attribute. /// /// The version passed to the type at runtime. public ContentSerializerTypeVersionAttribute(int typeVersion) { TypeVersion = typeVersion; } /// /// The version passed to the type at runtime. /// public int TypeVersion { get; private set; } } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentTypeReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content { public abstract class ContentTypeReader { private Type _targetType; public virtual bool CanDeserializeIntoExistingObject { get { return false; } } public Type TargetType { get { return _targetType; } } public virtual int TypeVersion { get { return 0; } // The default version (unless overridden) is zero } protected ContentTypeReader(Type targetType) { _targetType = targetType; } protected internal virtual void Initialize(ContentTypeReaderManager manager) { // Do nothing. Are we supposed to add ourselves to the manager? } /// The object receiving the data, or null if a new instance of the object should be created. protected internal abstract object Read(ContentReader input, object existingInstance); } public abstract class ContentTypeReader : ContentTypeReader { protected ContentTypeReader() : base(typeof(T)) { // Nothing } /// protected internal override object Read(ContentReader input, object existingInstance) { if (existingInstance == null) { return Read(input, default(T)); } return Read(input, (T)existingInstance); } protected internal abstract T Read(ContentReader input, T existingInstance); } } ================================================ FILE: src/Xna.Framework.Content/Content/ContentTypeReaderManager.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Text.RegularExpressions; using System.Collections.Generic; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Framework.Content { public sealed class ContentTypeReaderManager { private static readonly object _locker; private static readonly Dictionary _contentTypeReadersCache; private static readonly Dictionary _contentReadersCache; private Dictionary _contentReaders; private static readonly string _contentAssemblyName; private static readonly string _contentGraphicsAssemblyName; private static readonly string _contentAudioAssemblyName; private static readonly string _contentMediaAssemblyName; private static readonly bool _isRunningOnNetCore; static ContentTypeReaderManager() { _locker = new object(); _contentTypeReadersCache = new Dictionary(); _contentReadersCache = new Dictionary(255); _contentAssemblyName = ReflectionHelpers.GetAssembly(typeof(ContentTypeReaderManager)).FullName; _contentGraphicsAssemblyName = "Xna.Framework.Graphics"; _contentAudioAssemblyName = "Xna.Framework.Audio"; _contentMediaAssemblyName = "Xna.Framework.Media"; _isRunningOnNetCore = ReflectionHelpers.GetAssembly(typeof(System.Object)).GetName().Name == "System.Private.CoreLib"; } public ContentTypeReader GetTypeReader(Type targetType) { if (targetType.IsArray && targetType.GetArrayRank() > 1) targetType = typeof(Array); ContentTypeReader reader; if (_contentReaders.TryGetValue(targetType, out reader)) return reader; return null; } internal ContentTypeReader[] LoadAssetReaders(ContentReader reader, int typeReaderCount) { PreserveContentTypeReaders(); ContentTypeReader[] contentReaders = new ContentTypeReader[typeReaderCount]; BitArray needsInitialize = new BitArray(typeReaderCount); _contentReaders = new Dictionary(typeReaderCount); // Lock until we're done allocating and initializing any new // content type readers... this ensures we can load content // from multiple threads and still cache the readers. lock (_locker) { // For each reader in the file, we read out the length of the string which contains the type of the reader, // then we read out the string. Finally we instantiate an instance of that reader using reflection for (int i = 0; i < typeReaderCount; i++) { // This string tells us what reader we need to decode the following data string readerTypeName = reader.ReadString(); int readerTypeVersion = reader.ReadInt32(); ContentTypeReader typeReader; Type typeReaderType; if (!_contentTypeReadersCache.ContainsKey(readerTypeName)) { typeReaderType = ResolveReaderType(readerTypeName); _contentTypeReadersCache.Add(readerTypeName, typeReaderType); } else { typeReaderType = _contentTypeReadersCache[readerTypeName]; } if (!_contentReadersCache.ContainsKey(typeReaderType)) { typeReader = typeReaderType.GetDefaultConstructor().Invoke(null) as ContentTypeReader; needsInitialize[i] = true; _contentReadersCache.Add(typeReaderType, typeReader); } else { typeReader = _contentReadersCache[typeReaderType]; } if (readerTypeVersion != typeReader.TypeVersion) { throw new ContentLoadException( String.Format("{0} of TypeVersion {1} does not match reader of TypeVersion {2}.", typeReader.TargetType.Name, readerTypeVersion, typeReader.TypeVersion)); } contentReaders[i] = typeReader; Type targetType = contentReaders[i].TargetType; if (targetType != null) if (!_contentReaders.ContainsKey(targetType)) _contentReaders.Add(targetType, contentReaders[i]); } // Initialize any new readers. for (int i = 0; i < contentReaders.Length; i++) { if (needsInitialize.Get(i)) contentReaders[i].Initialize(this); } } // lock (_locker) return contentReaders; } // Trick to prevent the linker removing the code, but not actually execute the code static bool _trimmingFalseFlag = false; private static void PreserveContentTypeReaders() { #pragma warning disable 0219, 0649 // Trick to prevent the linker removing the code, but not actually execute the code if (_trimmingFalseFlag) { // Dummy variables required for it to work with trimming ** DO NOT DELETE ** // This forces the classes not to be optimized out when deploying with trimming // System types var hBooleanReader = new BooleanReader(); var hByteReader = new ByteReader(); var hCharReader = new CharReader(); var hDateTimeReader = new DateTimeReader(); var hDecimalReader = new DecimalReader(); var hDoubleReader = new DoubleReader(); var hInt16Reader = new Int16Reader(); var hInt32Reader = new Int32Reader(); var hInt64Reader = new Int64Reader(); var hSByteReader = new SByteReader(); var hSingleReader = new SingleReader(); var hStringReader = new StringReader(); var TimeSpanReader = new TimeSpanReader(); var hUInt16Reader = new UInt16Reader(); var hUInt32Reader = new UInt32Reader(); var hUInt64Reader = new UInt64Reader(); var hCharListReader = new ListReader(); var hIntListReader = new ListReader(); var hArrayFloatReader = new ArrayReader(); var hStringListReader = new ListReader(); // Framework types var hBoundingBoxReader = new BoundingBoxReader(); var hBoundingFrustumReader = new BoundingFrustumReader(); var hBoundingSphereReader = new BoundingSphereReader(); var hComplexReader = new ComplexReader(); var hCurveReader = new CurveReader(); var hExternalReferenceReader = new ExternalReferenceReader(); var hMatrixReader = new MatrixReader(); var hPlaneReader = new PlaneReader(); var hPointReader = new PointReader(); var hQuaternionReader = new QuaternionReader(); var hRayReader = new RayReader(); var hRectangleReader = new RectangleReader(); var hVector2Reader = new Vector2Reader(); var hVector3Reader = new Vector3Reader(); var hVector4Reader = new Vector4Reader(); var hArrayMatrixReader = new ArrayReader(); var hRectangleArrayReader = new ArrayReader(); var hArrayVector2Reader = new ArrayReader(); var hRectangleListReader = new ListReader(); var hVector3ListReader = new ListReader(); var hListVector2Reader = new ListReader(); var hNullableRectReader = new NullableReader(); } #pragma warning restore 0219, 0649 } /// /// Removes Version, Culture and PublicKeyToken from a type string. /// /// /// Supports multiple generic types (e.g. Dictionary<TKey,TValue>) and nested generic types (e.g. List<List<int>>). /// /// A /// A internal static Type ResolveReaderType(string readerTypeName) { // Handle nested types int count = readerTypeName.Split(new[] { "[[" }, StringSplitOptions.None).Length - 1; for (int i = 0; i < count; i++) { readerTypeName = Regex.Replace(readerTypeName, @"\[(.+?), Version=.+?\]", "[$1]"); } // Handle non generic types if (readerTypeName.Contains("PublicKeyToken")) readerTypeName = Regex.Replace(readerTypeName, @"(.+?), Version=.+?$", "$1"); string resolvedReaderTypeName; Type readerType; if (_isRunningOnNetCore) { // map net.framework (.net4.x) to core.net (.net5 or later) if (readerTypeName.Contains(", mscorlib")) { resolvedReaderTypeName = readerTypeName.Replace(", mscorlib", ", System.Private.CoreLib"); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; } } else // (!_isRunningOnNetCore) { // map core.net (.net5 or later) to net.framework (.net4) if (readerTypeName.Contains(", System.Private.CoreLib")) { resolvedReaderTypeName = readerTypeName.Replace(", System.Private.CoreLib", ", mscorlib"); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; } } // map XNA build-in TypeReaders resolvedReaderTypeName = readerTypeName; resolvedReaderTypeName = resolvedReaderTypeName.Replace(", Microsoft.Xna.Framework.Graphics", string.Format(", {0}", _contentGraphicsAssemblyName)); resolvedReaderTypeName = resolvedReaderTypeName.Replace(", Microsoft.Xna.Framework.Video", string.Format(", {0}", _contentMediaAssemblyName)); resolvedReaderTypeName = resolvedReaderTypeName.Replace(", Microsoft.Xna.Framework", string.Format(", {0}", _contentAssemblyName)); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; // map XNA build-in TypeReaders resolvedReaderTypeName = readerTypeName.Replace(", Microsoft.Xna.Framework", string.Format(", {0}", "Xna.Framework")); // e.g. "Microsoft.Xna.Framework.Content.ListReader`1[[Microsoft.Xna.Framework.Rectangle, Microsoft.Xna.Framework]] readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName + string.Format(", {0}", _contentGraphicsAssemblyName); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName + string.Format(", {0}", _contentAudioAssemblyName); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName + string.Format(", {0}", _contentMediaAssemblyName); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; // map MonoGame build-in TypeReaders resolvedReaderTypeName = readerTypeName.Replace(", MonoGame.Framework", string.Format(", {0}", "Xna.Framework")); // e.g. "Microsoft.Xna.Framework.Content.ListReader`1[[Microsoft.Xna.Framework.Rectangle, MonoGame.Framework]] readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName.Replace(", MonoGame.Framework", string.Format(", {0}", _contentAssemblyName)); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName.Replace(", MonoGame.Framework", string.Format(", {0}", _contentGraphicsAssemblyName)); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName.Replace(", MonoGame.Framework", string.Format(", {0}", _contentAudioAssemblyName)); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; resolvedReaderTypeName = readerTypeName.Replace(", MonoGame.Framework", string.Format(", {0}", _contentMediaAssemblyName)); readerType = Type.GetType(resolvedReaderTypeName); if (readerType != null) return readerType; throw new ContentLoadException( "Could not find ContentTypeReader Type. Please ensure the name of the Assembly that contains the Type matches the assembly in the full type name: " + readerTypeName + " (" + resolvedReaderTypeName + ")"); } } } ================================================ FILE: src/Xna.Framework.Content/Content/ResourceContentManager.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Resources; namespace Microsoft.Xna.Framework.Content { public class ResourceContentManager : ContentManager { private ResourceManager resource; public ResourceContentManager(IServiceProvider servicesProvider, ResourceManager resource) : base(servicesProvider) { if (resource == null) throw new ArgumentNullException("resource"); this.resource = resource; } protected override Stream OpenStream(string assetName) { object obj = this.resource.GetObject(assetName); if (obj == null) throw new ContentLoadException("Resource not found"); if (!(obj is byte[])) throw new ContentLoadException("Resource is not in binary format"); return new MemoryStream(obj as byte[]); } } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/ContentBufferPool.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content { public class ContentBufferPool : IComparer { private const int MinimumBufferSize = 2 * 1024 * 1024; private static readonly ContentBufferPool _current = new ContentBufferPool(); internal static ContentBufferPool Current { get { return _current; } } private SortedSet _bufferSet; private ContentBufferPool() { _bufferSet = new SortedSet(this); } public byte[] Get(int size) { lock (_bufferSet) { foreach (byte[] buffer in _bufferSet) { if (buffer.Length >= size) { _bufferSet.Remove(buffer); return buffer; } } if (_bufferSet.Count >= 1) _bufferSet.Remove(_bufferSet.Max); int dataSize = Math.Max(MinimumBufferSize, size); #if NET8_0_OR_GREATER return GC.AllocateUninitializedArray(dataSize); #else return new byte[dataSize]; #endif } } public void Return(byte[] buffer) { lock (_bufferSet) { _bufferSet.Add(buffer); } } int IComparer.Compare(byte[] x, byte[] y) { return (x.Length - y.Length); } } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/ContentExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Reflection; using System.Linq; namespace Microsoft.Xna.Platform.Content.Utilities { internal static class ContentExtensions { public static FieldInfo[] GetAllFields(this Type type) { #if WINRT FieldInfo[] fields= type.GetTypeInfo().DeclaredFields.ToArray(); IEnumerable nonStaticFields = from field in fields where !field.IsStatic select field; return nonStaticFields.ToArray(); #else BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; return type.GetFields(attrs); #endif } public static PropertyInfo[] GetAllProperties(this Type type) { // Sometimes, overridden properties of abstract classes can show up even with // BindingFlags.DeclaredOnly is passed to GetProperties. Make sure that // all properties in this list are defined in this class by comparing // its get method with that of it's base class. If they're the same // Then it's an overridden property. #if WINRT PropertyInfo[] infos= type.GetTypeInfo().DeclaredProperties.ToArray(); IEnumerable nonStaticPropertyInfos = from p in infos where (p.GetMethod != null) && (!p.GetMethod.IsStatic) && (p.GetMethod == p.GetMethod.GetRuntimeBaseDefinition()) select p; return nonStaticPropertyInfos.ToArray(); #else const BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; List allProps = type.GetProperties(attrs).ToList(); PropertyInfo[] props = allProps.FindAll(p => p.GetGetMethod(true) != null && p.GetGetMethod(true) == p.GetGetMethod(true).GetBaseDefinition()).ToArray(); return props; #endif } public static ConstructorInfo GetDefaultConstructor(this Type type) { #if WINRT TypeInfo typeInfo = type.GetTypeInfo(); ConstructorInfo ctor = typeInfo.DeclaredConstructors.FirstOrDefault(c => !c.IsStatic && c.GetParameters().Length == 0); return ctor; #else BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; return type.GetConstructor(attrs, null, new Type[0], null); #endif } public static bool IsClass(this Type type) { #if WINRT return type.GetTypeInfo().IsClass; #else return type.IsClass; #endif } } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/FileHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace Microsoft.Xna.Platform.Content.Utilities { internal static class FileHelpers { public static readonly char BackwardSlash = '\\'; public static readonly char ForwardSlash = '/'; public static readonly string ForwardSlashString = new string(ForwardSlash, 1); private static readonly char[] UrlSafeChars = new[] { '.', '_', '-', ';', '/', '?', '\\', ':' }; #if UAP || WINUI public static readonly char Separator = BackwardSlash; public static readonly char NotSeparator = ForwardSlash; #else public static readonly char Separator = Path.DirectorySeparatorChar; public static readonly char NotSeparator = (Path.DirectorySeparatorChar == BackwardSlash) ? ForwardSlash : BackwardSlash; #endif public static string NormalizeFilePathSeparators(string name) { return name.Replace(NotSeparator, Separator); } /// /// Combines the filePath and relativeFile based on relativeFile being a file in the same location as filePath. /// Relative directory operators (..) are also resolved /// /// "A\B\C.txt","D.txt" becomes "A\B\D.txt" /// "A\B\C.txt","..\D.txt" becomes "A\D.txt" /// Path to the file we are starting from /// Relative location of another file to resolve the path to public static string ResolveRelativePath(string filePath, string relativeFile) { // Uri accepts forward slashes filePath = filePath.Replace(BackwardSlash, ForwardSlash); relativeFile = relativeFile.Replace(BackwardSlash, ForwardSlash); // Sanitize the path of double slashes, they confuse Uri while (filePath.Contains("//")) filePath = filePath.Replace("//", "/"); bool hasForwardSlash = filePath.StartsWith(ForwardSlashString); if (!hasForwardSlash) filePath = ForwardSlashString + filePath; // Get a uri for filePath using the file:// schema and no host. var src = new Uri("file://" + UrlEncode(filePath)); var dst = new Uri(src, UrlEncode(relativeFile)); // The uri now contains the path to the relativeFile with // relative addresses resolved... get the local path. var localPath = dst.LocalPath; if (!hasForwardSlash && localPath.StartsWith("/")) localPath = localPath.Substring(1); // Convert the directory separator characters to the // correct platform specific separator. return TrimPath(NormalizeFilePathSeparators(localPath)); } internal static string UrlEncode(string url) { var encoder = new UTF8Encoding(); var safeline = new StringBuilder(encoder.GetByteCount(url) * 3); foreach (var c in url) { if ((c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || Array.IndexOf(UrlSafeChars, c) != -1) safeline.Append(c); else { var bytes = encoder.GetBytes(c.ToString()); foreach (var num in bytes) { safeline.Append("%"); safeline.Append(num.ToString("X")); } } } return safeline.ToString(); } private static string TrimPath(string filePath) { // Remove . in filePath while (filePath.Contains("/./")) filePath = filePath.Replace("/./", "/"); while (filePath.Contains(@"\.\")) filePath = filePath.Replace(@"\.\", @"\"); filePath = Regex.Replace(filePath, @"^\.(\/|\\)", string.Empty); // Remove .. in filePath filePath = Regex.Replace(filePath, @"[^\/\\]+(\/|\\)\.\.(\/|\\)", string.Empty); return filePath; } } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/Lz4DecoderStream.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. #define CHECK_ARGS #define CHECK_EOF //#define LOCAL_SHADOW using System; using System.IO; namespace Microsoft.Xna.Framework.Content { internal class Lz4DecoderStream : Stream { public Lz4DecoderStream() { } public Lz4DecoderStream( Stream input, long inputLength = long.MaxValue ) { Reset( input, inputLength ); } public void Reset( Stream input, long inputLength = long.MaxValue ) { this.inputLength = inputLength; this.input = input; phase = DecodePhase.ReadToken; decodeBufferPos = 0; litLen = 0; matLen = 0; matDst = 0; inBufPos = DecBufLen; inBufEnd = DecBufLen; } protected override void Dispose(bool disposing) { this.input = null; base.Dispose(disposing); } private long inputLength; private Stream input; //because we might not be able to match back across invocations, //we have to keep the last window's worth of bytes around for reuse //we use a circular buffer for this - every time we write into this //buffer, we also write the same into our output buffer private const int DecBufLen = 0x10000; private const int DecBufMask = 0xFFFF; private const int InBufLen = 128; private byte[] decodeBuffer = new byte[DecBufLen + InBufLen]; private int decodeBufferPos, inBufPos, inBufEnd; //we keep track of which phase we're in so that we can jump right back //into the correct part of decoding private DecodePhase phase; private enum DecodePhase { ReadToken, ReadExLiteralLength, CopyLiteral, ReadOffset, ReadExMatchLength, CopyMatch, } //state within interruptable phases and across phase boundaries is //kept here - again, so that we can punt out and restart freely private int litLen, matLen, matDst; public override int Read( byte[] buffer, int offset, int count ) { #if CHECK_ARGS if( buffer == null ) throw new ArgumentNullException( "buffer" ); if( offset < 0 || count < 0 || buffer.Length - count < offset ) throw new ArgumentOutOfRangeException(); if( input == null ) throw new InvalidOperationException(); #endif int nRead, nToRead = count; var decBuf = decodeBuffer; //the stringy gotos are obnoxious, but their purpose is to //make it *blindingly* obvious how the state machine transitions //back and forth as it reads - remember, we can yield out of //this routine in several places, and we must be able to re-enter //and pick up where we left off! #if LOCAL_SHADOW var phase = this.phase; var inBufPos = this.inBufPos; var inBufEnd = this.inBufEnd; #endif switch( phase ) { case DecodePhase.ReadToken: goto readToken; case DecodePhase.ReadExLiteralLength: goto readExLiteralLength; case DecodePhase.CopyLiteral: goto copyLiteral; case DecodePhase.ReadOffset: goto readOffset; case DecodePhase.ReadExMatchLength: goto readExMatchLength; case DecodePhase.CopyMatch: goto copyMatch; } readToken: int tok; if( inBufPos < inBufEnd ) { tok = decBuf[inBufPos++]; } else { #if LOCAL_SHADOW this.inBufPos = inBufPos; #endif tok = ReadByteCore(); #if LOCAL_SHADOW inBufPos = this.inBufPos; inBufEnd = this.inBufEnd; #endif #if CHECK_EOF if( tok == -1 ) goto finish; #endif } litLen = tok >> 4; matLen = (tok & 0xF) + 4; switch( litLen ) { case 0: phase = DecodePhase.ReadOffset; goto readOffset; case 0xF: phase = DecodePhase.ReadExLiteralLength; goto readExLiteralLength; default: phase = DecodePhase.CopyLiteral; goto copyLiteral; } readExLiteralLength: int exLitLen; if( inBufPos < inBufEnd ) { exLitLen = decBuf[inBufPos++]; } else { #if LOCAL_SHADOW this.inBufPos = inBufPos; #endif exLitLen = ReadByteCore(); #if LOCAL_SHADOW inBufPos = this.inBufPos; inBufEnd = this.inBufEnd; #endif #if CHECK_EOF if( exLitLen == -1 ) goto finish; #endif } litLen += exLitLen; if( exLitLen == 255 ) goto readExLiteralLength; phase = DecodePhase.CopyLiteral; goto copyLiteral; copyLiteral: int nReadLit = litLen < nToRead ? litLen : nToRead; if( nReadLit != 0 ) { if( inBufPos + nReadLit <= inBufEnd ) { int ofs = offset; for( int c = nReadLit; c-- != 0; ) buffer[ofs++] = decBuf[inBufPos++]; nRead = nReadLit; } else { #if LOCAL_SHADOW this.inBufPos = inBufPos; #endif nRead = ReadCore( buffer, offset, nReadLit ); #if LOCAL_SHADOW inBufPos = this.inBufPos; inBufEnd = this.inBufEnd; #endif #if CHECK_EOF if( nRead == 0 ) goto finish; #endif } offset += nRead; nToRead -= nRead; litLen -= nRead; if( litLen != 0 ) goto copyLiteral; } if( nToRead == 0 ) goto finish; phase = DecodePhase.ReadOffset; goto readOffset; readOffset: if( inBufPos + 1 < inBufEnd ) { matDst = (decBuf[inBufPos + 1] << 8) | decBuf[inBufPos]; inBufPos += 2; } else { #if LOCAL_SHADOW this.inBufPos = inBufPos; #endif matDst = ReadOffsetCore(); #if LOCAL_SHADOW inBufPos = this.inBufPos; inBufEnd = this.inBufEnd; #endif #if CHECK_EOF if( matDst == -1 ) goto finish; #endif } if( matLen == 15 + 4 ) { phase = DecodePhase.ReadExMatchLength; goto readExMatchLength; } else { phase = DecodePhase.CopyMatch; goto copyMatch; } readExMatchLength: int exMatLen; if( inBufPos < inBufEnd ) { exMatLen = decBuf[inBufPos++]; } else { #if LOCAL_SHADOW this.inBufPos = inBufPos; #endif exMatLen = ReadByteCore(); #if LOCAL_SHADOW inBufPos = this.inBufPos; inBufEnd = this.inBufEnd; #endif #if CHECK_EOF if( exMatLen == -1 ) goto finish; #endif } matLen += exMatLen; if( exMatLen == 255 ) goto readExMatchLength; phase = DecodePhase.CopyMatch; goto copyMatch; copyMatch: int nCpyMat = matLen < nToRead ? matLen : nToRead; if( nCpyMat != 0 ) { nRead = count - nToRead; int bufDst = matDst - nRead; if( bufDst > 0 ) { //offset is fairly far back, we need to pull from the buffer int bufSrc = decodeBufferPos - bufDst; if( bufSrc < 0 ) bufSrc += DecBufLen; int bufCnt = bufDst < nCpyMat ? bufDst : nCpyMat; for( int c = bufCnt; c-- != 0; ) buffer[offset++] = decBuf[bufSrc++ & DecBufMask]; } else { bufDst = 0; } int sOfs = offset - matDst; for( int i = bufDst; i < nCpyMat; i++ ) buffer[offset++] = buffer[sOfs++]; nToRead -= nCpyMat; matLen -= nCpyMat; } if( nToRead == 0 ) goto finish; phase = DecodePhase.ReadToken; goto readToken; finish: nRead = count - nToRead; int nToBuf = nRead < DecBufLen ? nRead : DecBufLen; int repPos = offset - nToBuf; if( nToBuf == DecBufLen ) { Buffer.BlockCopy( buffer, repPos, decBuf, 0, DecBufLen ); decodeBufferPos = 0; } else { int decPos = decodeBufferPos; while( nToBuf-- != 0 ) decBuf[decPos++ & DecBufMask] = buffer[repPos++]; decodeBufferPos = decPos & DecBufMask; } #if LOCAL_SHADOW this.phase = phase; this.inBufPos = inBufPos; #endif return nRead; } private int ReadByteCore() { var buf = decodeBuffer; if( inBufPos == inBufEnd ) { int nRead = input.Read( buf, DecBufLen, InBufLen < inputLength ? InBufLen : (int)inputLength ); #if CHECK_EOF if( nRead == 0 ) return -1; #endif inputLength -= nRead; inBufPos = DecBufLen; inBufEnd = DecBufLen + nRead; } return buf[inBufPos++]; } private int ReadOffsetCore() { var buf = decodeBuffer; if( inBufPos == inBufEnd ) { int nRead = input.Read( buf, DecBufLen, InBufLen < inputLength ? InBufLen : (int)inputLength ); #if CHECK_EOF if( nRead == 0 ) return -1; #endif inputLength -= nRead; inBufPos = DecBufLen; inBufEnd = DecBufLen + nRead; } if( inBufEnd - inBufPos == 1 ) { buf[DecBufLen] = buf[inBufPos]; int nRead = input.Read( buf, DecBufLen + 1, InBufLen - 1 < inputLength ? InBufLen - 1 : (int)inputLength ); #if CHECK_EOF if( nRead == 0 ) { inBufPos = DecBufLen; inBufEnd = DecBufLen + 1; return -1; } #endif inputLength -= nRead; inBufPos = DecBufLen; inBufEnd = DecBufLen + nRead + 1; } int ret = (buf[inBufPos + 1] << 8) | buf[inBufPos]; inBufPos += 2; return ret; } private int ReadCore( byte[] buffer, int offset, int count ) { int nToRead = count; var buf = decodeBuffer; int inBufLen = inBufEnd - inBufPos; int fromBuf = nToRead < inBufLen ? nToRead : inBufLen; if( fromBuf != 0 ) { var bufPos = inBufPos; for( int c = fromBuf; c-- != 0; ) buffer[offset++] = buf[bufPos++]; inBufPos = bufPos; nToRead -= fromBuf; } if( nToRead != 0 ) { int nRead; if( nToRead >= InBufLen ) { nRead = input.Read( buffer, offset, nToRead < inputLength ? nToRead : (int)inputLength ); nToRead -= nRead; } else { nRead = input.Read( buf, DecBufLen, InBufLen < inputLength ? InBufLen : (int)inputLength ); inBufPos = DecBufLen; inBufEnd = DecBufLen + nRead; fromBuf = nToRead < nRead ? nToRead : nRead; var bufPos = inBufPos; for( int c = fromBuf; c-- != 0; ) buffer[offset++] = buf[bufPos++]; inBufPos = bufPos; nToRead -= fromBuf; } inputLength -= nRead; } return count - nToRead; } #region Stream internals public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return false; } } public override void Flush() { } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } public override long Seek( long offset, SeekOrigin origin ) { throw new NotSupportedException(); } public override void SetLength( long value ) { throw new NotSupportedException(); } public override void Write( byte[] buffer, int offset, int count ) { throw new NotSupportedException(); } #endregion } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/LzxDecoder.cs ================================================ #region HEADER /* This file was derived from libmspack * (C) 2003-2004 Stuart Caie. * (C) 2011 Ali Scissons. * * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted * by Microsoft Corporation. * * This source file is Dual licensed; meaning the end-user of this source file * may redistribute/modify it under the LGPL 2.1 or MS-PL licenses. */ #region LGPL License /* GNU LESSER GENERAL PUBLIC LICENSE version 2.1 * LzxDecoder is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License (LGPL) version 2.1 */ #endregion #region MS-PL License /* * MICROSOFT PUBLIC LICENSE * This source code is subject to the terms of the Microsoft Public License (Ms-PL). * * Redistribution and use in source and binary forms, with or without modification, * is permitted provided that redistributions of the source code retain the above * copyright notices and this file header. * * Additional copyright notices should be appended to the list above. * * For details, see . */ #endregion /* * This derived work is recognized by Stuart Caie and is authorized to adapt * any changes made to lzxd.c in his libmspack library and will still retain * this dual licensing scheme. Big thanks to Stuart Caie! * * DETAILS * This file is a pure C# port of the lzxd.c file from libmspack, with minor * changes towards the decompression of XNB files. The original decompression * software of LZX encoded data was written by Suart Caie in his * libmspack/cabextract projects, which can be located at * http://http://www.cabextract.org.uk/ */ #endregion using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Content { using System.IO; class LzxDecoder { public static uint[] position_base = null; public static byte[] extra_bits = null; private LzxState m_state; public LzxDecoder (int window) { uint wndsize = (uint)(1 << window); int posn_slots; // setup proper exception if(window < 15 || window > 21) throw new UnsupportedWindowSizeRange(); // let's initialise our state m_state = new LzxState(); m_state.actual_size = 0; m_state.window = new byte[wndsize]; for(int i = 0; i < wndsize; i++) m_state.window[i] = 0xDC; m_state.actual_size = wndsize; m_state.window_size = wndsize; m_state.window_posn = 0; /* initialize static tables */ if(extra_bits == null) { extra_bits = new byte[52]; for(int i = 0, j = 0; i <= 50; i += 2) { extra_bits[i] = extra_bits[i+1] = (byte)j; if ((i != 0) && (j < 17)) j++; } } if(position_base == null) { position_base = new uint[51]; for(int i = 0, j = 0; i <= 50; i++) { position_base[i] = (uint)j; j += 1 << extra_bits[i]; } } /* calculate required position slots */ if(window == 20) posn_slots = 42; else if(window == 21) posn_slots = 50; else posn_slots = window << 1; m_state.R0 = m_state.R1 = m_state.R2 = 1; m_state.main_elements = (ushort)(LzxConstants.NUM_CHARS + (posn_slots << 3)); m_state.header_read = 0; m_state.frames_read = 0; m_state.block_remaining = 0; m_state.block_type = LzxConstants.BLOCKTYPE.INVALID; m_state.intel_curpos = 0; m_state.intel_started = 0; // yo dawg i herd u liek arrays so we put arrays in ur arrays so u can array while u array m_state.PRETREE_table = new ushort[(1 << LzxConstants.PRETREE_TABLEBITS) + (LzxConstants.PRETREE_MAXSYMBOLS << 1)]; m_state.PRETREE_len = new byte[LzxConstants.PRETREE_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY]; m_state.MAINTREE_table = new ushort[(1 << LzxConstants.MAINTREE_TABLEBITS) + (LzxConstants.MAINTREE_MAXSYMBOLS << 1)]; m_state.MAINTREE_len = new byte[LzxConstants.MAINTREE_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY]; m_state.LENGTH_table = new ushort[(1 << LzxConstants.LENGTH_TABLEBITS) + (LzxConstants.LENGTH_MAXSYMBOLS << 1)]; m_state.LENGTH_len = new byte[LzxConstants.LENGTH_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY]; m_state.ALIGNED_table = new ushort[(1 << LzxConstants.ALIGNED_TABLEBITS) + (LzxConstants.ALIGNED_MAXSYMBOLS << 1)]; m_state.ALIGNED_len = new byte[LzxConstants.ALIGNED_MAXSYMBOLS + LzxConstants.LENTABLE_SAFETY]; /* initialise tables to 0 (because deltas will be applied to them) */ for(int i = 0; i < LzxConstants.MAINTREE_MAXSYMBOLS; i++) m_state.MAINTREE_len[i] = 0; for(int i = 0; i < LzxConstants.LENGTH_MAXSYMBOLS; i++) m_state.LENGTH_len[i] = 0; } public int Decompress(Stream inData, int inLen, Stream outData, int outLen) { BitBuffer bitbuf = new BitBuffer(inData); long startpos = inData.Position; long endpos = inData.Position + inLen; byte[] window = m_state.window; uint window_posn = m_state.window_posn; uint window_size = m_state.window_size; uint R0 = m_state.R0; uint R1 = m_state.R1; uint R2 = m_state.R2; uint i, j; int togo = outLen, this_run, main_element, match_length, match_offset, length_footer, extra, verbatim_bits; int rundest, runsrc, copy_length, aligned_bits; bitbuf.InitBitStream(); /* read header if necessary */ if(m_state.header_read == 0) { uint intel = bitbuf.ReadBits(1); if(intel != 0) { // read the filesize i = bitbuf.ReadBits(16); j = bitbuf.ReadBits(16); m_state.intel_filesize = (int)((i << 16) | j); } m_state.header_read = 1; } /* main decoding loop */ while(togo > 0) { /* last block finished, new block expected */ if(m_state.block_remaining == 0) { // TODO may screw something up here if(m_state.block_type == LzxConstants.BLOCKTYPE.UNCOMPRESSED) { if((m_state.block_length & 1) == 1) inData.ReadByte(); /* realign bitstream to word */ bitbuf.InitBitStream(); } m_state.block_type = (LzxConstants.BLOCKTYPE)bitbuf.ReadBits(3);; i = bitbuf.ReadBits(16); j = bitbuf.ReadBits(8); m_state.block_remaining = m_state.block_length = (uint)((i << 8) | j); switch(m_state.block_type) { case LzxConstants.BLOCKTYPE.ALIGNED: for(i = 0, j = 0; i < 8; i++) { j = bitbuf.ReadBits(3); m_state.ALIGNED_len[i] = (byte)j; } MakeDecodeTable(LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS, m_state.ALIGNED_len, m_state.ALIGNED_table); /* rest of aligned header is same as verbatim */ goto case LzxConstants.BLOCKTYPE.VERBATIM; case LzxConstants.BLOCKTYPE.VERBATIM: ReadLengths(m_state.MAINTREE_len, 0, 256, bitbuf); ReadLengths(m_state.MAINTREE_len, 256, m_state.main_elements, bitbuf); MakeDecodeTable(LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS, m_state.MAINTREE_len, m_state.MAINTREE_table); if(m_state.MAINTREE_len[0xE8] != 0) m_state.intel_started = 1; ReadLengths(m_state.LENGTH_len, 0, LzxConstants.NUM_SECONDARY_LENGTHS, bitbuf); MakeDecodeTable(LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS, m_state.LENGTH_len, m_state.LENGTH_table); break; case LzxConstants.BLOCKTYPE.UNCOMPRESSED: m_state.intel_started = 1; /* because we can't assume otherwise */ bitbuf.EnsureBits(16); /* get up to 16 pad bits into the buffer */ if(bitbuf.GetBitsLeft() > 16) inData.Seek(-2, SeekOrigin.Current); /* and align the bitstream! */ byte hi, mh, ml, lo; lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte(); R0 = (uint)(lo | ml << 8 | mh << 16 | hi << 24); lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte(); R1 = (uint)(lo | ml << 8 | mh << 16 | hi << 24); lo = (byte)inData.ReadByte(); ml = (byte)inData.ReadByte(); mh = (byte)inData.ReadByte(); hi = (byte)inData.ReadByte(); R2 = (uint)(lo | ml << 8 | mh << 16 | hi << 24); break; default: return -1; // TODO throw proper exception } } /* buffer exhaustion check */ if(inData.Position > (startpos + inLen)) { /* it's possible to have a file where the next run is less than * 16 bits in size. In this case, the READ_HUFFSYM() macro used * in building the tables will exhaust the buffer, so we should * allow for this, but not allow those accidentally read bits to * be used (so we check that there are at least 16 bits * remaining - in this boundary case they aren't really part of * the compressed data) */ //Debug.WriteLine("WTF"); if(inData.Position > (startpos+inLen+2) || bitbuf.GetBitsLeft() < 16) return -1; //TODO throw proper exception } while((this_run = (int)m_state.block_remaining) > 0 && togo > 0) { if(this_run > togo) this_run = togo; togo -= this_run; m_state.block_remaining -= (uint)this_run; /* apply 2^x-1 mask */ window_posn &= window_size - 1; /* runs can't straddle the window wraparound */ if((window_posn + this_run) > window_size) return -1; //TODO throw proper exception switch(m_state.block_type) { case LzxConstants.BLOCKTYPE.VERBATIM: while(this_run > 0) { main_element = (int)ReadHuffSym(m_state.MAINTREE_table, m_state.MAINTREE_len, LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS, bitbuf); if(main_element < LzxConstants.NUM_CHARS) { /* literal: 0 to NUM_CHARS-1 */ window[window_posn++] = (byte)main_element; this_run--; } else { /* match: NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ main_element -= LzxConstants.NUM_CHARS; match_length = main_element & LzxConstants.NUM_PRIMARY_LENGTHS; if(match_length == LzxConstants.NUM_PRIMARY_LENGTHS) { length_footer = (int)ReadHuffSym(m_state.LENGTH_table, m_state.LENGTH_len, LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS, bitbuf); match_length += length_footer; } match_length += LzxConstants.MIN_MATCH; match_offset = main_element >> 3; if(match_offset > 2) { /* not repeated offset */ if(match_offset != 3) { extra = extra_bits[match_offset]; verbatim_bits = (int)bitbuf.ReadBits((byte)extra); match_offset = (int)position_base[match_offset] - 2 + verbatim_bits; } else { match_offset = 1; } /* update repeated offset LRU queue */ R2 = R1; R1 = R0; R0 = (uint)match_offset; } else if(match_offset == 0) { match_offset = (int)R0; } else if(match_offset == 1) { match_offset = (int)R1; R1 = R0; R0 = (uint)match_offset; } else /* match_offset == 2 */ { match_offset = (int)R2; R2 = R0; R0 = (uint)match_offset; } rundest = (int)window_posn; this_run -= match_length; /* copy any wrapped around source data */ if(window_posn >= match_offset) { /* no wrap */ runsrc = rundest - match_offset; } else { runsrc = rundest + ((int)window_size - match_offset); copy_length = match_offset - (int)window_posn; if(copy_length < match_length) { match_length -= copy_length; window_posn += (uint)copy_length; while(copy_length-- > 0) window[rundest++] = window[runsrc++]; runsrc = 0; } } window_posn += (uint)match_length; /* copy match data - no worries about destination wraps */ while(match_length-- > 0) window[rundest++] = window[runsrc++]; } } break; case LzxConstants.BLOCKTYPE.ALIGNED: while(this_run > 0) { main_element = (int)ReadHuffSym(m_state.MAINTREE_table, m_state.MAINTREE_len, LzxConstants.MAINTREE_MAXSYMBOLS, LzxConstants.MAINTREE_TABLEBITS, bitbuf); if(main_element < LzxConstants.NUM_CHARS) { /* literal 0 to NUM_CHARS-1 */ window[window_posn++] = (byte)main_element; this_run--; } else { /* match: NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ main_element -= LzxConstants.NUM_CHARS; match_length = main_element & LzxConstants.NUM_PRIMARY_LENGTHS; if(match_length == LzxConstants.NUM_PRIMARY_LENGTHS) { length_footer = (int)ReadHuffSym(m_state.LENGTH_table, m_state.LENGTH_len, LzxConstants.LENGTH_MAXSYMBOLS, LzxConstants.LENGTH_TABLEBITS, bitbuf); match_length += length_footer; } match_length += LzxConstants.MIN_MATCH; match_offset = main_element >> 3; if(match_offset > 2) { /* not repeated offset */ extra = extra_bits[match_offset]; match_offset = (int)position_base[match_offset] - 2; if(extra > 3) { /* verbatim and aligned bits */ extra -= 3; verbatim_bits = (int)bitbuf.ReadBits((byte)extra); match_offset += (verbatim_bits << 3); aligned_bits = (int)ReadHuffSym(m_state.ALIGNED_table, m_state.ALIGNED_len, LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS, bitbuf); match_offset += aligned_bits; } else if(extra == 3) { /* aligned bits only */ aligned_bits = (int)ReadHuffSym(m_state.ALIGNED_table, m_state.ALIGNED_len, LzxConstants.ALIGNED_MAXSYMBOLS, LzxConstants.ALIGNED_TABLEBITS, bitbuf); match_offset += aligned_bits; } else if (extra > 0) /* extra==1, extra==2 */ { /* verbatim bits only */ verbatim_bits = (int)bitbuf.ReadBits((byte)extra); match_offset += verbatim_bits; } else /* extra == 0 */ { /* ??? */ match_offset = 1; } /* update repeated offset LRU queue */ R2 = R1; R1 = R0; R0 = (uint)match_offset; } else if( match_offset == 0) { match_offset = (int)R0; } else if(match_offset == 1) { match_offset = (int)R1; R1 = R0; R0 = (uint)match_offset; } else /* match_offset == 2 */ { match_offset = (int)R2; R2 = R0; R0 = (uint)match_offset; } rundest = (int)window_posn; this_run -= match_length; /* copy any wrapped around source data */ if(window_posn >= match_offset) { /* no wrap */ runsrc = rundest - match_offset; } else { runsrc = rundest + ((int)window_size - match_offset); copy_length = match_offset - (int)window_posn; if(copy_length < match_length) { match_length -= copy_length; window_posn += (uint)copy_length; while(copy_length-- > 0) window[rundest++] = window[runsrc++]; runsrc = 0; } } window_posn += (uint)match_length; /* copy match data - no worries about destination wraps */ while(match_length-- > 0) window[rundest++] = window[runsrc++]; } } break; case LzxConstants.BLOCKTYPE.UNCOMPRESSED: if((inData.Position + this_run) > endpos) return -1; //TODO throw proper exception byte[] temp_buffer = new byte[this_run]; inData.Read(temp_buffer, 0, this_run); temp_buffer.CopyTo(window, (int)window_posn); window_posn += (uint)this_run; break; default: return -1; //TODO throw proper exception } } } if(togo != 0) return -1; //TODO throw proper exception int start_window_pos = (int)window_posn; if(start_window_pos == 0) start_window_pos = (int)window_size; start_window_pos -= outLen; outData.Write(window, start_window_pos, outLen); m_state.window_posn = window_posn; m_state.R0 = R0; m_state.R1 = R1; m_state.R2 = R2; // TODO finish intel E8 decoding /* intel E8 decoding */ if((m_state.frames_read++ < 32768) && m_state.intel_filesize != 0) { if(outLen <= 6 || m_state.intel_started == 0) { m_state.intel_curpos += outLen; } else { int dataend = outLen - 10; uint curpos = (uint)m_state.intel_curpos; m_state.intel_curpos = (int)curpos + outLen; while(outData.Position < dataend) { if(outData.ReadByte() != 0xE8) { curpos++; continue; } } } return -1; } return 0; } // READ_LENGTHS(table, first, last) // if(lzx_read_lens(LENTABLE(table), first, last, bitsleft)) // return ERROR (ILLEGAL_DATA) // // TODO make returns throw exceptions private int MakeDecodeTable(uint nsyms, uint nbits, byte[] length, ushort[] table) { ushort sym; uint leaf; byte bit_num = 1; uint fill; uint pos = 0; /* the current position in the decode table */ uint table_mask = (uint)(1 << (int)nbits); uint bit_mask = table_mask >> 1; /* don't do 0 length codes */ uint next_symbol = bit_mask; /* base of allocation for long codes */ /* fill entries for codes short enough for a direct mapping */ while (bit_num <= nbits ) { for(sym = 0; sym < nsyms; sym++) { if(length[sym] == bit_num) { leaf = pos; if((pos += bit_mask) > table_mask) return 1; /* table overrun */ /* fill all possible lookups of this symbol with the symbol itself */ fill = bit_mask; while(fill-- > 0) table[leaf++] = sym; } } bit_mask >>= 1; bit_num++; } /* if there are any codes longer than nbits */ if(pos != table_mask) { /* clear the remainder of the table */ for(sym = (ushort)pos; sym < table_mask; sym++) table[sym] = 0; /* give ourselves room for codes to grow by up to 16 more bits */ pos <<= 16; table_mask <<= 16; bit_mask = 1 << 15; while(bit_num <= 16) { for(sym = 0; sym < nsyms; sym++) { if(length[sym] == bit_num) { leaf = pos >> 16; for(fill = 0; fill < bit_num - nbits; fill++) { /* if this path hasn't been taken yet, 'allocate' two entries */ if(table[leaf] == 0) { table[(next_symbol << 1)] = 0; table[(next_symbol << 1) + 1] = 0; table[leaf] = (ushort)(next_symbol++); } /* follow the path and select either left or right for next bit */ leaf = (uint)(table[leaf] << 1); if(((pos >> (int)(15-fill)) & 1) == 1) leaf++; } table[leaf] = sym; if((pos += bit_mask) > table_mask) return 1; } } bit_mask >>= 1; bit_num++; } } /* full talbe? */ if(pos == table_mask) return 0; /* either erroneous table, or all elements are 0 - let's find out. */ for(sym = 0; sym < nsyms; sym++) if(length[sym] != 0) return 1; return 0; } // TODO throw exceptions instead of returns private void ReadLengths(byte[] lens, uint first, uint last, BitBuffer bitbuf) { uint x, y; int z; // hufftbl pointer here? for(x = 0; x < 20; x++) { y = bitbuf.ReadBits(4); m_state.PRETREE_len[x] = (byte)y; } MakeDecodeTable(LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS, m_state.PRETREE_len, m_state.PRETREE_table); for(x = first; x < last;) { z = (int)ReadHuffSym(m_state.PRETREE_table, m_state.PRETREE_len, LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS, bitbuf); if(z == 17) { y = bitbuf.ReadBits(4); y += 4; while(y-- != 0) lens[x++] = 0; } else if(z == 18) { y = bitbuf.ReadBits(5); y += 20; while(y-- != 0) lens[x++] = 0; } else if(z == 19) { y = bitbuf.ReadBits(1); y += 4; z = (int)ReadHuffSym(m_state.PRETREE_table, m_state.PRETREE_len, LzxConstants.PRETREE_MAXSYMBOLS, LzxConstants.PRETREE_TABLEBITS, bitbuf); z = lens[x] - z; if(z < 0) z += 17; while(y-- != 0) lens[x++] = (byte)z; } else { z = lens[x] - z; if(z < 0) z += 17; lens[x++] = (byte)z; } } } private uint ReadHuffSym(ushort[] table, byte[] lengths, uint nsyms, uint nbits, BitBuffer bitbuf) { uint i, j; bitbuf.EnsureBits(16); if((i = table[bitbuf.PeekBits((byte)nbits)]) >= nsyms) { j = (uint)(1 << (int)((sizeof(uint)*8) - nbits)); do { j >>= 1; i <<= 1; i |= (bitbuf.GetBuffer() & j) != 0 ? (uint)1 : 0; if(j == 0) return 0; // TODO throw proper exception } while((i = table[i]) >= nsyms); } j = lengths[i]; bitbuf.RemoveBits((byte)j); return i; } #region Our BitBuffer Class private class BitBuffer { uint buffer; byte bitsleft; Stream byteStream; public BitBuffer(Stream stream) { byteStream = stream; InitBitStream(); } public void InitBitStream() { buffer = 0; bitsleft = 0; } public void EnsureBits(byte bits) { while(bitsleft < bits) { int lo = (byte)byteStream.ReadByte(); int hi = (byte)byteStream.ReadByte(); //int amount2shift = sizeof(uint)*8 - 16 - bitsleft; buffer |= (uint)(((hi << 8) | lo) << (sizeof(uint)*8 - 16 - bitsleft)); bitsleft += 16; } } public uint PeekBits(byte bits) { return (buffer >> ((sizeof(uint)*8) - bits)); } public void RemoveBits(byte bits) { buffer <<= bits; bitsleft -= bits; } public uint ReadBits(byte bits) { uint ret = 0; if(bits > 0) { EnsureBits(bits); ret = PeekBits(bits); RemoveBits(bits); } return ret; } public uint GetBuffer() { return buffer; } public byte GetBitsLeft() { return bitsleft; } } #endregion struct LzxState { public uint R0, R1, R2; /* for the LRU offset system */ public ushort main_elements; /* number of main tree elements */ public int header_read; /* have we started decoding at all yet? */ public LzxConstants.BLOCKTYPE block_type; /* type of this block */ public uint block_length; /* uncompressed length of this block */ public uint block_remaining; /* uncompressed bytes still left to decode */ public uint frames_read; /* the number of CFDATA blocks processed */ public int intel_filesize; /* magic header value used for transform */ public int intel_curpos; /* current offset in transform space */ public int intel_started; /* have we seen any translateable data yet? */ public ushort[] PRETREE_table; public byte[] PRETREE_len; public ushort[] MAINTREE_table; public byte[] MAINTREE_len; public ushort[] LENGTH_table; public byte[] LENGTH_len; public ushort[] ALIGNED_table; public byte[] ALIGNED_len; // NEEDED MEMBERS // CAB actualsize // CAB window // CAB window_size // CAB window_posn public uint actual_size; public byte[] window; public uint window_size; public uint window_posn; } } /* CONSTANTS */ struct LzxConstants { public const ushort MIN_MATCH = 2; public const ushort MAX_MATCH = 257; public const ushort NUM_CHARS = 256; public enum BLOCKTYPE { INVALID = 0, VERBATIM = 1, ALIGNED = 2, UNCOMPRESSED = 3 } public const ushort PRETREE_NUM_ELEMENTS = 20; public const ushort ALIGNED_NUM_ELEMENTS = 8; public const ushort NUM_PRIMARY_LENGTHS = 7; public const ushort NUM_SECONDARY_LENGTHS = 249; public const ushort PRETREE_MAXSYMBOLS = PRETREE_NUM_ELEMENTS; public const ushort PRETREE_TABLEBITS = 6; public const ushort MAINTREE_MAXSYMBOLS = NUM_CHARS + 50*8; public const ushort MAINTREE_TABLEBITS = 12; public const ushort LENGTH_MAXSYMBOLS = NUM_SECONDARY_LENGTHS + 1; public const ushort LENGTH_TABLEBITS = 12; public const ushort ALIGNED_MAXSYMBOLS = ALIGNED_NUM_ELEMENTS; public const ushort ALIGNED_TABLEBITS = 7; public const ushort LENTABLE_SAFETY = 64; } /* EXCEPTIONS */ class UnsupportedWindowSizeRange : Exception { } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/LzxDecoderStream.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Framework.Content { internal class LzxDecoderStream : Stream { LzxDecoder dec; MemoryStream decompressedStream; public LzxDecoderStream(Stream input, int decompressedSize, int compressedSize) { dec = new LzxDecoder(16); // TODO: Rewrite using block decompression like Lz4DecoderStream Decompress(input, decompressedSize, compressedSize); } // Decompress into MemoryStream private void Decompress(Stream stream, int decompressedSize, int compressedSize) { //thanks to ShinAli (https://bitbucket.org/alisci01/xnbdecompressor) // default window size for XNB encoded files is 64Kb (need 16 bits to represent it) decompressedStream = new MemoryStream(decompressedSize); long startPos = stream.Position; long pos = startPos; while (pos - startPos < compressedSize) { // the compressed stream is seperated into blocks that will decompress // into 32Kb or some other size if specified. // normal, 32Kb output blocks will have a short indicating the size // of the block before the block starts // blocks that have a defined output will be preceded by a byte of value // 0xFF (255), then a short indicating the output size and another // for the block size // all shorts for these cases are encoded in big endian order int hi = stream.ReadByte(); int lo = stream.ReadByte(); int block_size = (hi << 8) | lo; int frame_size = 0x8000; // frame size is 32Kb by default // does this block define a frame size? if (hi == 0xFF) { hi = lo; lo = (byte)stream.ReadByte(); frame_size = (hi << 8) | lo; hi = (byte)stream.ReadByte(); lo = (byte)stream.ReadByte(); block_size = (hi << 8) | lo; pos += 5; } else pos += 2; // either says there is nothing to decode if (block_size == 0 || frame_size == 0) break; dec.Decompress(stream, block_size, decompressedStream, frame_size); pos += block_size; // reset the position of the input just incase the bit buffer // read in some unused bytes stream.Seek(pos, SeekOrigin.Begin); } if (decompressedStream.Position != decompressedSize) { throw new ContentLoadException("Decompression failed."); } decompressedStream.Seek(0, SeekOrigin.Begin); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if(disposing) { decompressedStream.Dispose(); } dec = null; decompressedStream = null; } #region Stream internals public override int Read(byte[] buffer, int offset, int count) { return decompressedStream.Read(buffer, offset, count); } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return false; } } public override void Flush() { } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } public override long Seek(long offset, SeekOrigin origin) { throw new NotImplementedException(); } public override void SetLength(long value) { throw new NotImplementedException(); } public override void Write(byte[] buffer, int offset, int count) { throw new NotImplementedException(); } #endregion } } ================================================ FILE: src/Xna.Framework.Content/Content/Utilities/ReflectionHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Reflection; namespace Microsoft.Xna.Platform.Content.Utilities { internal static partial class ReflectionHelpers { public static bool IsValueType(Type targetType) { #if WINRT return targetType.GetTypeInfo().IsValueType; #else return targetType.IsValueType; #endif } public static Type GetBaseType(Type targetType) { #if WINRT return targetType.GetTypeInfo().BaseType; #else return targetType.BaseType; #endif } /// /// Returns the Assembly of a Type /// public static Assembly GetAssembly(Type targetType) { #if WINRT return targetType.GetTypeInfo().Assembly; #else return targetType.Assembly; #endif } /// /// Returns true if the given type represents a non-object type that is not abstract. /// public static bool IsConcreteClass(Type t) { if (t == typeof(object)) return false; #if WINRT var ti = t.GetTypeInfo(); return (ti.IsClass && !ti.IsAbstract); #else return (t.IsClass && !t.IsAbstract); #endif } public static MethodInfo GetMethodInfo(Type type, string methodName) { #if WINRT return type.GetTypeInfo().GetDeclaredMethod(methodName); #else return type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); #endif } public static MethodInfo GetPropertyGetMethod(PropertyInfo property) { #if WINRT return property.GetMethod; #else return property.GetGetMethod(); #endif } public static MethodInfo GetPropertySetMethod(PropertyInfo property) { #if WINRT return property.SetMethod; #else return property.GetSetMethod(); #endif } public static T GetCustomAttribute(MemberInfo member) where T : Attribute { #if WINRT return member.GetCustomAttribute(typeof(T)) as T; #else return Attribute.GetCustomAttribute(member, typeof(T)) as T; #endif } /// /// Returns true if the get method of the given property exist and are public. /// Note that we allow a getter-only property to be serialized (and deserialized), /// *if* CanDeserializeIntoExistingObject is true for the property type. /// public static bool PropertyIsPublic(PropertyInfo property) { var getMethod = GetPropertyGetMethod(property); return (getMethod != null && getMethod.IsPublic); } /// /// Returns true if the given type can be assigned the given value /// public static bool IsAssignableFrom(Type type, object value) { return IsAssignableFromType(type, value.GetType()); } /// /// Returns true if the given type can be assigned a value with the given object type /// public static bool IsAssignableFromType(Type type, Type objectType) { #if WINRT return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo())); #else return (type.IsAssignableFrom(objectType)); #endif } } } ================================================ FILE: src/Xna.Framework.Content/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Content/NamespaceDoc.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content { /// /// The runtime support for loading content pipeline content. /// [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] class NamespaceDoc { } } ================================================ FILE: src/Xna.Framework.Content/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Content/TitleContainer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Content.Utilities; namespace Microsoft.Xna.Platform { public interface ITitleContainer { string Location { get; } TitlePlatform Platform { get; } Stream OpenStream(string name); } public interface IPlatformTitleContainer { T GetStrategy() where T : TitleContainerStrategy; } } namespace Microsoft.Xna.Framework { /// /// Provides functionality for opening a stream in the title storage area. /// public sealed class TitleContainer : ITitleContainer , IPlatformTitleContainer { private static TitleContainer _current; /// /// Returns the current TitleContainer instance. /// public static TitleContainer Current { get { if (_current != null) return _current; lock (typeof(TitleContainer)) { if (_current == null) _current = new TitleContainer(); return _current; } } } public static TitlePlatform Platform { get { return ((ITitleContainer)TitleContainer.Current).Platform; } } /// /// Returns an open stream to an existing file in the title storage area. /// /// The filepath relative to the title storage area. /// A open stream or null if the file is not found. public static Stream OpenStream(string name) { return ((ITitleContainer)TitleContainer.Current).OpenStream(name); } private TitleContainerStrategy _strategy; T IPlatformTitleContainer.GetStrategy() { return (T)_strategy; } private TitleContainer() { _strategy = TitleContainerFactory.Current.CreateTitleContainerStrategy(); } #region ITitleContainer string ITitleContainer.Location { get { return _strategy.Location; } } TitlePlatform ITitleContainer.Platform { get { return _strategy.Platform; } } Stream ITitleContainer.OpenStream(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); // We do not accept absolute paths here. if (Path.IsPathRooted(name)) throw new ArgumentException("Invalid filename. TitleContainer.OpenStream requires a relative path.", name); // Normalize the file path. string safeName = TitleContainer.NormalizeRelativePath(name); // Call the platform code to open the stream. // Any errors at this point should result in a file not found. try { Stream stream = _strategy.PlatformOpenStream(safeName); if (stream != null) return stream; else throw new FileNotFoundException("Error loading \"" + name + "\". File not found."); } catch (FileNotFoundException) { throw; } catch (Exception ex) { throw new FileNotFoundException(name, ex); } } #endregion ITitleContainer private static string NormalizeRelativePath(string name) { Uri uri = new Uri("file:///" + FileHelpers.UrlEncode(name)); string path = uri.LocalPath; path = path.Substring(1); path = path.Replace(FileHelpers.NotSeparator, FileHelpers.Separator); return path; } } } ================================================ FILE: src/Xna.Framework.Content/TitleContainerFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public abstract class TitleContainerFactory { private volatile static TitleContainerFactory _current; internal static TitleContainerFactory Current { get { TitleContainerFactory current = _current; if (current != null) return current; lock (typeof(TitleContainerFactory)) { if (_current != null) return _current; Console.WriteLine("TitleContainerFactory not found."); Console.WriteLine("Initialize title with 'TitleContainerFactory.RegisterTitleContainerFactory(new ConcreteTitleContainerFactory());'."); TitleContainerFactory titleContainerFactory = CreateTitleContainerFactory(); TitleContainerFactory.RegisterTitleContainerFactory(titleContainerFactory); } return _current; } } private static TitleContainerFactory CreateTitleContainerFactory() { Console.WriteLine("Registering Concrete TitleContainerFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.ConcreteTitleContainerFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(TitleContainerFactory)) && !type.IsAbstract) return (TitleContainerFactory)Activator.CreateInstance(type); return null; } public static void RegisterTitleContainerFactory(TitleContainerFactory titleContainerFactory) { if (titleContainerFactory == null) throw new NullReferenceException("titleContainerFactory"); lock (typeof(TitleContainerFactory)) { if (_current == null) _current = titleContainerFactory; else throw new InvalidOperationException("TitleContainerFactory allready registered."); } } public abstract TitleContainerStrategy CreateTitleContainerStrategy(); } } ================================================ FILE: src/Xna.Framework.Content/TitleContainerStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public abstract class TitleContainerStrategy { public abstract string Location { get; } public abstract TitlePlatform Platform { get; } protected TitleContainerStrategy() { } public abstract Stream PlatformOpenStream(string name); public virtual Stream DecompressBrotliStream(Stream stream, uint compressedDataSize, uint decompressedDataSize) { #if NET6_0_OR_GREATER Stream decompressedStream = new MemoryStream((int)decompressedDataSize); using (var brotliStream = new System.IO.Compression.BrotliStream(stream, System.IO.Compression.CompressionMode.Decompress, true)) { brotliStream.CopyTo(decompressedStream, (int)decompressedDataSize); } decompressedStream.Seek(0, SeekOrigin.Begin); return decompressedStream; #else throw new PlatformNotSupportedException("ContentCompression Brotli not Supported."); #endif } } } ================================================ FILE: src/Xna.Framework.Content/TitlePlatform.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework { public enum TitlePlatform { Windows = 0x0011, UAP = 0x0012, SDL = 0x0014, // DesktopGL Android = 0x0021, iOS = 0x0022, tvOS = 0x0024, BlazorWASM = 0x0031, Oculus = 0x0041, XboxOne = 0x0051, NintendoSwitch = 0x0052, PlayStation5 = 0x0054, } } ================================================ FILE: src/Xna.Framework.Content/Xna.Framework.Content.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content Microsoft.Xna.Framework.Content true CS0067;CS1591;CS1574;CS0419;CS8500 true The Content framework. .net core;core;.net standard;standard nkast.Xna.Framework.Content ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Content.Pipeline/ChildCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides a collection of child objects for a content item. /// /// Links from a child object to its parent are maintained as the collection contents are modified. /// /// /// public abstract class ChildCollection : Collection where TParent : class where TChild : class { TParent parent; /// /// Creates an instance of ChildCollection. /// /// Parent object of the child objects returned in the collection. protected ChildCollection(TParent parent) : base() { if (parent == null) throw new ArgumentNullException("parent"); this.parent = parent; } /// /// Removes all children from the collection. /// protected override void ClearItems() { // Remove parent reference from each child before clearing foreach (TChild child in this) SetParent(child, default(TParent)); base.ClearItems(); } /// /// Gets the parent of a child object. /// /// The child of the parent being retrieved. /// The parent of the child object. protected abstract TParent GetParent(TChild child); /// /// Inserts a child object into the collection at the specified location. /// /// The position in the collection. /// The child object being inserted. protected override void InsertItem(int index, TChild item) { // Make sure we have a if (item == null) throw new ArgumentNullException("child"); if (GetParent(item) != null) throw new InvalidOperationException("Child already has a parent"); SetParent(item, parent); base.InsertItem(index, item); } /// /// Removes a child object from the collection. /// /// The index of the item being removed. protected override void RemoveItem(int index) { TChild child = this[index]; SetParent(child, default(TParent)); base.RemoveItem(index); } /// /// Modifies the value of the child object at the specified location. /// /// The index of the child object being modified. /// The new value for the child object. protected override void SetItem(int index, TChild item) { if (item == null) throw new ArgumentNullException("child"); if (GetParent(item) != null) throw new InvalidOperationException("Child already has a parent"); TChild child = this[index]; SetParent(child, default(TParent)); SetParent(item, parent); base.SetItem(index, item); } /// /// Modifies the value of the parent object of the specified child object. /// /// The child of the parent being modified. /// The new value for the parent object. protected abstract void SetParent(TChild child, TParent parent); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentBuildLogger.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reporting informational messages or warnings from content importers and processors. /// Do not use this class to report errors. Instead, report errors by throwing a PipelineException or InvalidContentException. /// public abstract class ContentBuildLogger { readonly Stack _filenames = new Stack(); /// /// Initializes a new instance of ContentBuildLogger. /// protected ContentBuildLogger() { } /// /// Returns the relative path to the filename from the root directory. /// /// The target filename. /// The relative path. string GetRelativePath(string filename) { var currentDirectory = Path.GetFullPath("."); filename = Path.GetFullPath(filename); if (filename.StartsWith(currentDirectory)) filename = filename.Substring(currentDirectory.Length); return filename; } /// /// Gets the filename currently being processed, for use in warning and error messages. /// /// Identity of a content item. If specified, GetCurrentFilename uses this value to refine the search. If no value is specified, the current PushFile state is used. /// Name of the file being processed. protected string GetCurrentFilename(ContentIdentity contentIdentity) { string filename = null; if ((contentIdentity != null) && !string.IsNullOrEmpty(contentIdentity.SourceFilename)) filename = contentIdentity.SourceFilename; else if (_filenames.Count > 0) filename = _filenames.Peek(); // This convert's filepaths to relative if they are rooted in the current directory. // TODO: Move this out to concrete classes. if (filename != null) filename = GetRelativePath(filename); return filename; } /// /// Outputs a high-priority status message from a content importer or processor. /// /// Message being reported. /// Arguments for the reported message. public abstract void LogImportantMessage( string message, params Object[] messageArgs ); /// /// Outputs a low priority status message from a content importer or processor. /// /// Message being reported. /// Arguments for the reported message. public abstract void LogMessage( string message, params Object[] messageArgs ); /// /// Outputs a warning message from a content importer or processor. /// /// Link to an existing online help topic containing related information. /// Identity of the content item that generated the message. /// Message being reported. /// Arguments for the reported message. public abstract void LogWarning( string helpLink, ContentIdentity contentIdentity, string message, params Object[] messageArgs ); /// /// Outputs a message indicating that a content asset has begun processing. /// All logger warnings or error exceptions from this time forward to the next PopFile call refer to this file. /// /// Name of the file containing future messages. public virtual void PushFile(string filename) { _filenames.Push(filename); } /// /// Outputs a message indicating that a content asset has completed processing. /// public virtual void PopFile() { _filenames.Pop(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentIdentity.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides properties describing the origin of the game asset, such as the original source file and creation tool. This information is used for error reporting, and by processors that need to determine from what directory the asset was originally loaded. /// [Serializable] public class ContentIdentity { /// /// Gets or sets the specific location of the content item within the larger source file. /// public string FragmentIdentifier { get; set; } /// /// Gets or sets the file name of the asset source. /// public string SourceFilename { get; set; } /// /// Gets or sets the creation tool of the asset. /// public string SourceTool { get; set; } /// /// Initializes a new instance of ContentIdentity. /// public ContentIdentity() : this(string.Empty, string.Empty, null) { } /// /// Initializes a new instance of ContentIdentity with the specified values. /// /// The absolute path to the file name of the asset source. public ContentIdentity(string sourceFilename) : this(sourceFilename, string.Empty, null) { } /// /// Initializes a new instance of ContentIdentity with the specified values. /// /// The absolute path to the file name of the asset source. /// The name of the digital content creation (DCC) tool that created the asset. public ContentIdentity(string sourceFilename, string sourceTool) : this(sourceFilename, sourceTool, null) { } /// /// Initializes a new instance of ContentIdentity with the specified values. /// /// The absolute path to the file name of the asset source. /// The name of the digital content creation (DCC) tool that created the asset. /// Specific location of the content item within the larger source file. For example, this could be a line number in the file. public ContentIdentity(string sourceFilename, string sourceTool, string fragmentIdentifier) { SourceFilename = sourceFilename; SourceTool = sourceTool; FragmentIdentifier = fragmentIdentifier; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Implements a file format importer for use with game assets. /// Importers, either provided by the framework or written by a developer, must derive from ContentImporter, as well as being marked with a ContentImporterAttribute. /// An importer should produce results in the standard intermediate object model. If an asset has information not supported by the object model, the importer should output it as opaque data (key/value attributes attached to the relevant object). By following this procedure, a content pipeline can access specialized digital content creation (DCC) tool information, even when that information has not been fully standardized into the official object model. /// You can also design custom importers that accept and import types containing specific third-party extensions to the object model. /// public abstract class ContentImporter : IContentImporter { /// /// Initializes a new instance of ContentImporter. /// protected ContentImporter() { } /// /// Called by the framework when importing a game asset. This is the method called by XNA when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public abstract T Import(string filename, ContentImporterContext context); /// /// Called by the framework when importing a game asset. This is the method called by XNA when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. Object IContentImporter.Import(string filename, ContentImporterContext context) { if (filename == null) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); return Import(filename, context); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentImporterAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides properties that identify and provide metadata about the importer, such as supported file extensions and caching information. /// Importers are required to initialize this attribute. /// public class ContentImporterAttribute : Attribute { List _extensions = new List(); /// /// Gets and sets the caching of the content during importation. /// public bool CacheImportedData { get; set; } /// /// Gets or sets the name of the default processor for content read by this importer. /// public string DefaultProcessor { get; set; } /// /// Gets or sets the string representing the importer in a user interface. This name is not used by the content pipeline and should not be passed to the BuildAssets task (a custom MSBuild task used by XNA Game Studio). It is used for display purposes only. /// public virtual string DisplayName { get; set; } /// /// Gets the supported file name extensions of the importer. /// public IEnumerable FileExtensions { get { return _extensions; } } /// /// Initializes a new instance of ContentImporterAttribute and sets the file name extension supported by the importer. /// /// The list of file name extensions supported by the importer. Prefix each extension with a '.'. public ContentImporterAttribute(string fileExtension) { _extensions.Add(fileExtension); } /// /// Initializes a new instance of ContentImporterAttribute and sets the file name extensions supported by the importer. /// /// The list of file name extensions supported by the importer. Prefix each extension with a '.'. public ContentImporterAttribute(params string[] fileExtensions) { _extensions.AddRange(fileExtensions); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentImporterContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides properties that define logging behavior for the importer. /// public abstract class ContentImporterContext { /// /// The absolute path to the root of the build intermediate (object) directory. /// public abstract string IntermediateDirectory { get; } /// /// Gets the logger for an importer. /// public abstract ContentBuildLogger Logger { get; } /// /// The absolute path to the root of the build output (binaries) directory. /// public abstract string OutputDirectory { get; } /// /// Initializes a new instance of ContentImporterContext. /// public ContentImporterContext() { } /// /// Adds a dependency to the specified file. This causes a rebuild of the file, when modified, on subsequent incremental builds. /// /// Name of an asset file. public abstract void AddDependency(string filename); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentItem.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides properties that define various aspects of content stored using the intermediate file format of the XNA Framework. /// public class ContentItem { OpaqueDataDictionary opaqueData = new OpaqueDataDictionary(); /// /// Gets or sets the identity of the content item. /// [ContentSerializer(Optional = true)] public ContentIdentity Identity { get; set; } /// /// Gets or sets the name of the content item. /// [ContentSerializer(Optional = true)] public string Name { get; set; } /// /// Gets the opaque data of the content item. /// [ContentSerializer(Optional = true)] public OpaqueDataDictionary OpaqueData { get { return opaqueData; } } /// /// Initializes a new instance of ContentItem. /// public ContentItem() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides a base class to use when developing custom processor components. All processors must derive from this class. /// public abstract class ContentProcessor : IContentProcessor { /// /// Initializes a new instance of the ContentProcessor class. /// protected ContentProcessor() { } /// /// Processes the specified input data and returns the result. /// /// Existing content object being processed. /// Contains any required custom process parameters. /// A typed object representing the processed input. public abstract TOutput Process(TInput input, ContentProcessorContext context); /// /// Gets the expected object type of the input parameter to IContentProcessor.Process. /// Type IContentProcessor.InputType { get { return typeof(TInput); } } /// /// Gets the object type returned by IContentProcessor.Process. /// Type IContentProcessor.OutputType { get { return typeof(TOutput); } } /// /// Processes the specified input data and returns the result. /// /// Existing content object being processed. /// Contains any required custom process parameters. /// The processed input. object IContentProcessor.Process(object input, ContentProcessorContext context) { if (input == null) throw new ArgumentNullException("input"); if (context == null) throw new ArgumentNullException("context"); if (!(input is TInput)) throw new InvalidOperationException("input is not of the expected type"); return Process((TInput)input, context); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentProcessorAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Gets any existing content processor components. /// public class ContentProcessorAttribute : Attribute { /// /// Gets or sets the string representing the processor in a user interface. This name is not used by the content pipeline and should not be passed to the BuildAssets task (a custom MSBuild task used by XNA Game Studio). It is used for display purposes only. /// public virtual string DisplayName { get; set; } /// /// Initializes an instance of ContentProcessorAttribute. /// public ContentProcessorAttribute() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ContentProcessorContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides access to custom processor parameters, methods for converting member data, and triggering nested builds. /// public abstract class ContentProcessorContext { /// /// Gets the name of the current content build configuration. /// public abstract string BuildConfiguration { get; } /// /// Gets the path of the directory that will contain any intermediate files generated by the content processor. /// public abstract string IntermediateDirectory { get; } /// /// Gets the logger interface used for status messages or warnings. /// public abstract ContentBuildLogger Logger { get; } /// /// Gets the output path of the content processor. /// public abstract string OutputDirectory { get; } /// /// Gets the output file name of the content processor. /// public abstract string OutputFilename { get; } /// /// Gets the collection of parameters used by the content processor. /// public abstract OpaqueDataDictionary Parameters { get; } /// /// Gets the current content build target platform. /// public abstract TargetPlatform TargetPlatform { get; } /// /// Gets the current content build target profile. /// public abstract GraphicsProfile TargetProfile { get; } /// /// Initializes a new instance of ContentProcessorContext. /// public ContentProcessorContext() { } /// /// Adds a dependency to the specified file. This causes a rebuild of the file, when modified, on subsequent incremental builds. /// /// Name of an asset file. public abstract void AddDependency(string filename); /// /// Add a file name to the list of related output files maintained by the build item. This allows tracking build items that build multiple output files. /// /// The name of the file. public abstract void AddOutputFile(string filename); /// /// Initiates a nested build of the specified asset and then loads the result into memory. /// /// Type of the input. /// Type of the converted output. /// Reference to the source asset. /// Optional processor for this content. /// Copy of the final converted content. /// An example of usage would be a mesh processor calling BuildAndLoadAsset to build any associated textures and replace the original .tga file references with an embedded copy of the converted texture. public TOutput BuildAndLoadAsset( ExternalReference sourceAsset, string processorName ) { return BuildAndLoadAsset(sourceAsset, processorName, null, null); } /// /// Initiates a nested build of the specified asset and then loads the result into memory. /// /// Type of the input. /// Type of the converted output. /// Reference to the source asset. /// Optional processor for this content. /// Optional collection of named values available as input to the content processor. /// Optional importer for this content. /// Copy of the final converted content. /// An example of usage would be a mesh processor calling BuildAndLoadAsset to build any associated textures and replace the original .tga file references with an embedded copy of the converted texture. public abstract TOutput BuildAndLoadAsset( ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName ); /// /// Initiates a nested build of an additional asset. /// /// Type of the input. /// Type of the output. /// Reference to the source asset. /// Optional processor for this content. /// Reference to the final compiled content. The build work is not required to complete before returning. Therefore, this file may not be up to date when BuildAsset returns but it will be available for loading by the game at runtime. /// An example of usage for BuildAsset is being called by a mesh processor to request that any related textures used are also built, replacing the original TGA file references with new references to the converted texture files. public ExternalReference BuildAsset( ExternalReference sourceAsset, string processorName ) { return BuildAsset(sourceAsset, processorName, null, null, null); } /// /// Initiates a nested build of an additional asset. /// /// Type of the input. /// Type of the output. /// Reference to the source asset. /// Optional processor for this content. /// Optional collection of named values available as input to the content processor. /// Optional importer for this content. /// Optional name of the final compiled content. /// Reference to the final compiled content. The build work is not required to complete before returning. Therefore, this file may not be up to date when BuildAsset returns but it will be available for loading by the game at runtime. /// An example of usage for BuildAsset is being called by a mesh processor to request that any related textures used are also built, replacing the original TGA file references with new references to the converted texture files. public abstract ExternalReference BuildAsset( ExternalReference sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName ); /// /// Converts a content item object using the specified content processor. /// /// Type of the input content. /// Type of the converted output. /// Source content to be converted. /// Optional processor for this content. /// Reference of the final converted content. public TOutput Convert( TInput input, string processorName ) { return Convert(input, processorName, new OpaqueDataDictionary()); } /// /// Converts a content item object using the specified content processor. /// /// Type of the input content. /// Type of the converted output. /// Source content to be converted. /// Optional processor for this content. /// Optional parameters for the processor. /// Reference of the final converted content. public abstract TOutput Convert( TInput input, string processorName, OpaqueDataDictionary processorParameters ); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ExternalReference.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Specifies external references to a data file for the content item. /// /// While the object model is instantiated, reference file names are absolute. When the file containing the external reference is serialized to disk, file names are relative to the file. This allows movement of the content tree to a different location without breaking internal links. /// /// public sealed class ExternalReference : ContentItem { /// /// Gets and sets the file name of an ExternalReference. /// public string Filename { get; set; } /// /// Initializes a new instance of ExternalReference. /// public ExternalReference() { Filename = string.Empty; } /// /// Initializes a new instance of ExternalReference. /// /// The name of the referenced file. public ExternalReference(string filename) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); Filename = filename; } /// /// Initializes a new instance of ExternalReference, specifying the file path relative to another content item. /// /// The name of the referenced file. /// The content that the path specified in filename is relative to. public ExternalReference(string filename, ContentIdentity relativeToContent) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); if (relativeToContent == null) throw new ArgumentNullException("relativeToContent"); if (string.IsNullOrEmpty(relativeToContent.SourceFilename)) throw new ArgumentNullException("relativeToContent.SourceFilename"); // The intermediate serializer from XNA has the external reference // path walking up to the content project directory and then back // down to the asset path. We don't appear to have any way to do // that from here, so we'll work with the absolute path and let the // higher level process sort out any relative paths they need. var basePath = Path.GetDirectoryName(relativeToContent.SourceFilename); Filename = PathHelper.Normalize(Path.GetFullPath(Path.Combine(basePath, filename))); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/IContentImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Accesses a statically typed ContentImporter instance from generic code using dynamic typing. /// public interface IContentImporter { /// /// Imports an asset from the specified file. /// /// Name of the game asset file. /// A ContentImporterContext class containing information for importing a game asset, such as a logger interface. /// Resulting game asset. Object Import(string filename, ContentImporterContext context); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/IContentProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods and properties for accessing a statically typed ContentProcessor subclass, using dynamically typed object data. /// public interface IContentProcessor { /// /// Gets the expected object type of the input parameter to IContentProcessor.Process. /// Type InputType { get; } /// /// Gets the object type returned by IContentProcessor.Process. /// Type OutputType { get; } /// /// Processes the specified input data and returns the result. /// /// Existing content object being processed. /// Contains any required custom process parameters. /// An object representing the processed input. Object Process(Object input, ContentProcessorContext context); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/InvalidContentException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Thrown when errors are encountered in content during processing. /// [SerializableAttribute] public class InvalidContentException : Exception { /// /// Gets or sets the identity of the content item that caused the exception. /// public ContentIdentity ContentIdentity { get; set; } /// /// Initializes a new instance of the InvalidContentException class /// public InvalidContentException() { } /// /// Initializes a new instance of the InvalidContentException class with information on serialization and streaming context for the related content item. /// /// Information necessary for serialization and deserialization of the content item. /// Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context. protected InvalidContentException( SerializationInfo serializationInfo, StreamingContext streamingContext ) { } /// /// Initializes a new instance of the InvalidContentException class with the specified error message. /// /// A message that describes the error. public InvalidContentException( string message ) : this(message, null, null) { } /// /// Initializes a new instance of the InvalidContentException class with the specified error message and the identity of the content throwing the exception. /// /// A message that describes the error. /// Information about the content item that caused this error, including the file name. In some cases, a location within the file (of the problem) is specified. public InvalidContentException( string message, ContentIdentity contentIdentity ) : this(message, contentIdentity, null) { } /// /// Initializes a new instance of the InvalidContentException class with the specified error message, the identity of the content throwing the exception, and a reference to the inner exception that is the cause of this exception. /// /// A message that describes the error. /// Information about the content item that caused this error, including the file name. In some cases, a location within the file (of the problem) is specified. /// The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception. public InvalidContentException( string message, ContentIdentity contentIdentity, Exception innerException ) : base(message, innerException) { ContentIdentity = contentIdentity; } /// /// Initializes a new instance of the InvalidContentException class with the specified error message and a reference to the inner exception that is the cause of this exception. /// /// A message that describes the error. /// The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception. public InvalidContentException( string message, Exception innerException ) : this(message, null, innerException) { } /// /// When overridden in a derived class, returns information about the exception. /// In addition to the base behavior, this method provides serialization functionality. /// /// Information necessary for serialization and deserialization of the content item. /// Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context. public override void GetObjectData( SerializationInfo info, StreamingContext context ) { base.GetObjectData(info, context); // TODO: Complete me... } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/NamedValueDictionary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline { public class NamedValueDictionary : IDictionary { readonly Dictionary dict = new Dictionary(); /// /// Initializes an instance of NamedValueDictionary. /// public NamedValueDictionary() { } /// /// Adds the specified key and value to the dictionary. /// /// Identity of the key of the new data pair. /// The value of the new data pair. public void Add(string key, T value) { dict.Add(key, value); } /// /// Determines whether the specified key is present in the dictionary. /// /// Identity of a key. /// public bool ContainsKey(string key) { return dict.ContainsKey(key); } /// /// Gets all keys contained in the dictionary. /// public ICollection Keys { get { return dict.Keys; } } /// /// Removes the specified key and value from the dictionary. /// /// Identity of the key to be removed. /// true if the value is present; false otherwise. public bool Remove(string key) { return dict.Remove(key); } /// /// Gets the value associated with the specified key. /// /// Identity of the key of the element whose value is to be retrieved. /// The current value of the element. /// true if the value is present; false otherwise. public bool TryGetValue(string key, out T value) { return dict.TryGetValue(key, out value); } /// /// Specifies the type hint for the intermediate serializer. Values of this type do not store an explicit type attribute in the related XML source. /// protected internal virtual Type DefaultSerializerType { get { return typeof(T); } } /// /// Gets all values contained in the dictionary. /// public ICollection Values { get { return dict.Values; } } /// /// Gets or sets the specified item. /// /// Identity of a key. public T this[string key] { get { return dict[key]; } set { dict[key] = value; } } /// /// Adds an item to the collection. /// /// The item to add to the collection. void ICollection>.Add(KeyValuePair item) { ((ICollection>)dict).Add(item); } /// /// Removes all keys and values from the dictionary. /// public void Clear() { dict.Clear(); } /// /// Determines whether the collection contains a specific value. /// /// The object to locate in the collection. /// true if the collection contains the object; false otherwise. bool ICollection>.Contains(KeyValuePair item) { return ((ICollection>)dict).Contains(item); } /// /// Copies the elements of the collection to an array, starting at a specified index. /// /// The destination array. /// The index at which to begin the copy. void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) { ((ICollection>)dict).CopyTo(array, arrayIndex); } /// /// Gets the number of items in the dictionary. /// public int Count { get { return dict.Count; } } /// /// Gets a value indicating if this object is read-only. /// bool ICollection>.IsReadOnly { get { return false; } } /// /// Removes the first occurrence of the specified object from the collection. /// /// The item to remove from the collection. /// true if the item was successfully removed from the collection; false otherwise. bool ICollection>.Remove(KeyValuePair item) { return ((ICollection>)dict).Remove(item); } /// /// Gets an enumerator that iterates through items in a dictionary. /// /// Enumerator for iterating through the dictionary. public IEnumerator> GetEnumerator() { return dict.GetEnumerator(); } /// /// Returns an enumerator that can iterate through this collection. /// /// An enumerator that can iterate through this collection IEnumerator IEnumerable.GetEnumerator() { return dict.GetEnumerator(); } /// /// Adds an element to the dictionary. /// /// Identity of the key of the new element. /// The value of the new element. protected virtual void AddItem(string key, T value) { dict.Add(key, value); } /// /// Removes all elements from the dictionary. /// protected virtual void ClearItems() { dict.Clear(); } /// /// Removes the specified element from the dictionary. /// /// Identity of the key of the data pair to be removed. /// true if the value is present; false otherwise. protected virtual bool RemoveItem(string key) { return dict.Remove(key); } /// /// Modifies the value of an existing element. /// /// Identity of the element to be modified. /// The value to be set. protected virtual void SetItem(string key, T value) { dict[key] = value; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/OpaqueDataDictionary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { [ContentSerializerCollectionItemName("Data")] public sealed class OpaqueDataDictionary : NamedValueDictionary { /// /// Get the value for the specified key /// /// The key of the item to retrieve. /// The default value to return if the key does not exist. /// The item cast as T, or the default value if the item is not present in the dictonary. public T GetValue(string key, T defaultValue) { object o; if (TryGetValue(key, out o)) return (T)o; return defaultValue; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/PipelineComponentScanner.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Implements a scanner object containing the available importers and processors for an application. Designed for internal use only. /// public sealed class PipelineComponentScanner { List errors = new List(); Dictionary importerAttributes = new Dictionary(); Dictionary processorAttributes = new Dictionary(); Dictionary importerOutputTypes = new Dictionary(); Dictionary processorInputTypes = new Dictionary(); Dictionary processorOutputTypes = new Dictionary(); Dictionary processorParameters = new Dictionary(); /// /// Gets the list of error messages produced by the last call to Update. /// public IList Errors { get { return errors; } } /// /// Gets a dictionary that maps importer names to their associated metadata attributes. /// public IDictionary ImporterAttributes { get { return importerAttributes; } } /// /// Gets the names of all available importers. /// public IEnumerable ImporterNames { get { return importerAttributes.Keys; } } /// /// Gets a dictionary that maps importer names to the fully qualified name of their return types. /// public IDictionary ImporterOutputTypes { get { return importerOutputTypes; } } /// /// Gets a dictionary that maps processor names to their associated metadata attributes. /// public IDictionary ProcessorAttributes { get { return processorAttributes; } } /// /// Gets a dictionary that maps processor names to the fully qualified name of supported input types. /// public IDictionary ProcessorInputTypes { get { return processorInputTypes; } } /// /// Gets the names of all available processors. /// public IEnumerable ProcessorNames { get { return processorAttributes.Keys; } } /// /// Gets a dictionary that maps processor names to the fully qualified name of their output types. /// public IDictionary ProcessorOutputTypes { get { return processorOutputTypes; } } /// /// A collection of supported processor parameters. /// public IDictionary ProcessorParameters { get { return processorParameters; } } /// /// Initializes a new instance of PipelineComponentScanner. /// public PipelineComponentScanner() { } /// /// Updates the scanner object with the latest available assembly states. /// /// Enumerated list of available assemblies. /// true if an actual scan was required, indicating the collection contents may have changed. false if no assembly changes were detected since the previous call. public bool Update( IEnumerable pipelineAssemblies ) { return Update(pipelineAssemblies, null); } /// /// Updates the scanner object with the latest available assembly states. /// /// Enumerated list of available assemblies. /// Enumerated list of dependent assemblies. /// true if an actual scan was required, indicating the collection contents may have changed. false if no assembly changes were detected since the previous call. public bool Update( IEnumerable pipelineAssemblies, IEnumerable pipelineAssemblyDependencies ) { throw new NotImplementedException(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/PipelineException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Thrown when errors are encountered during a content pipeline build. /// [SerializableAttribute] public class PipelineException : Exception { /// /// Creates an instance of PipelineException. /// public PipelineException() { } /// /// Creates an instance of PipelineException with information on serialization and streaming context for the related content item. /// /// Information necessary for serialization and deserialization of the content item. /// Information necessary for the source and destination of a given serialized stream. Also provides an additional caller-defined context. protected PipelineException( SerializationInfo serializationInfo, StreamingContext streamingContext ) { } /// /// Initializes a new instance of the PipelineException class with the specified error message. /// /// A message that describes the error. public PipelineException( string message ) : base(message) { } /// /// Initializes a new instance of the PipelineException class with the specified error message and a reference to the inner exception that is the cause of this exception. /// /// A message that describes the error. /// The exception that is the cause of the current exception. If innerException is not a null reference, the current exception is raised in a catch block that handles the inner exception. public PipelineException( string message, Exception innerException ) :base(message, innerException) { } /// /// Initializes a new instance of the PipelineException class with the specified error message. /// /// A message that describes the error. /// Array of strings specifying message-related arguments. public PipelineException( string message, params Object[] messageArgs ) : base(String.Format(message, messageArgs)) { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ProcessorParameter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; using System.Reflection; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Represents a processor parameter. Processor parameters are automatically discovered by the content pipeline. Therefore, only custom processor developers should use this class directly. /// [SerializableAttribute] public sealed class ProcessorParameter { PropertyInfo propInfo; ReadOnlyCollection enumValues; /// /// Default value of the processor parameter. /// public Object DefaultValue { get; set; } /// /// Description of the parameter, as specified by the [Description] attribute. /// public string Description { get; set; } /// /// Name of the parameter displayed in the designer, as specified by the [DisplayName] attribute. /// public string DisplayName { get; set; } /// /// Gets a value indicating whether the parameter is an enumeration. /// public bool IsEnum { get { return enumValues != null; } } /// /// Available options for enumerated type parameters. For parameters of other types, this value is null. /// public ReadOnlyCollection PossibleEnumValues { get { return enumValues; } } /// /// Name of the property, as defined in the C# code. /// public string PropertyName { get { return propInfo.Name; } } /// /// Type of the parameter. /// public string PropertyType { get { return propInfo.PropertyType.Name; } } /// /// Constructs a ProcessorParameter instance. /// /// The info for the property. internal ProcessorParameter(PropertyInfo propertyInfo) { propInfo = propertyInfo; if (propInfo.PropertyType.IsEnum) enumValues = new ReadOnlyCollection(propInfo.PropertyType.GetEnumNames()); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/ProcessorParameterCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Represents a collection of processor parameters, usually for a single processor. This class is primarily designed for internal use or for custom processor developers. /// [SerializableAttribute] public sealed class ProcessorParameterCollection : ReadOnlyCollection { /// /// Constructs a new ProcessorParameterCollection instance. /// /// The parameters in the collection. internal ProcessorParameterCollection(IEnumerable parameters) : base(new List(parameters)) { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Processors/PassThroughProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// As the name implies, this processor simply passes data through as-is. /// [ContentProcessor(DisplayName = "No Processing Required")] public class PassThroughProcessor : ContentProcessor { public override object Process(object input, ContentProcessorContext context) { return input; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Properties/AssemblyInfo.cs ================================================ using System; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework.Content.Pipeline/Properties/AssemblyInfo.net4.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("MonoGame.Framework.Content.Pipeline")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MonoGame.Framework.Content.Pipeline")] [assembly: AssemblyCopyright("Copyright ©2012-2022 MonoGame Team, ©2025 Nick Kastellanos")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("28de7aeb-1303-46c6-a349-8f65494a621b")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("4.2.9001.0")] [assembly: AssemblyFileVersion("4.2.9001.0")] ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ArrayWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the array value to the output. /// [ContentTypeWriter] class ArrayWriter : ContentTypeWriterBaseGeneric { ContentTypeWriter _elementWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _elementWriter = output.GetTypeWriter(typeof(T)); } protected override void Write(ContentWriter output, T[] value) { if (value == null) throw new ArgumentNullException("value"); output.Write(value.Length); foreach (T element in value) output.WriteObject(element, _elementWriter); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".ArrayReader`1" + "[[" + _elementWriter.GetRuntimeType(targetPlatform) + "]]"; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BooleanWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Boolean; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the boolean value to the output. /// [ContentTypeWriter] class BooleanWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingBoxWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.BoundingBox; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the BoundingBox value to the output. /// [ContentTypeWriter] class BoundingBoxWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Min); output.Write(value.Max); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingFrustumWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.BoundingFrustum; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the BoundingFrustum value to the output. /// [ContentTypeWriter] class BoundingFrustumWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Matrix); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/BoundingSphereWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.BoundingSphere; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the BoundingSphere value to the output. /// [ContentTypeWriter] class BoundingSphereWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Center); output.Write(value.Radius); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ByteWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Byte; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the unsigned byte value to the output. /// [ContentTypeWriter] class ByteWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/CharWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Char; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the character value to the output. /// [ContentTypeWriter] class CharWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ComplexWriter.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using TOutput = Microsoft.Xna.Framework.Complex; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Complex value to the output. /// [ContentTypeWriter] class ComplexWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentCompiler.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Reflection; using Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Provides methods for writing compiled binary format. /// public sealed class ContentCompiler { const byte XnbFormatVersion = 5; const byte ContentFlagCompressedLzx = 0x80; const byte ContentFlagCompressedLz4 = 0x40; const byte ContentFlagCompressedExt = 0xC0; const byte ContentFlagHiDef = 0x01; // This array must remain in sync with TargetPlatform static char[] _targetPlatformIdentifiers = new[] { 'w', // Windows (DirectX) 'x', // Xbox360 'i', // iOS 'a', // Android 'd', // DesktopGL 'X', // MacOSX 'W', // WindowsStoreApp 'n', // NativeClient 'r', // RaspberryPi 'P', // PlayStation4 '5', // PlayStation5 'O', // XboxOne 'S', // Nintendo Switch 'b', // BlazorGL }; readonly Dictionary _typeWriterMap = new Dictionary(); /// /// Initializes a new instance of ContentCompiler. /// public ContentCompiler() { GetTypeWriters(); } /// /// Iterates through all loaded assemblies and finds the content type writers. /// void GetTypeWriters() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { Type[] exportedTypes; try { exportedTypes = assembly.GetTypes(); } catch (Exception) { continue; } Type contentTypeWriterGenericType = typeof(ContentTypeWriter<>); foreach (Type type in exportedTypes) { if (type.IsAbstract) continue; if (!Attribute.IsDefined(type, typeof(ContentTypeWriterAttribute))) continue; // Find the content type this writer implements Type baseType = type.BaseType; while ((baseType != null) && (baseType.GetGenericTypeDefinition() != contentTypeWriterGenericType)) { baseType = baseType.BaseType; } if (baseType != null) _typeWriterMap.Add(baseType, type); } } } /// /// Retrieves the worker writer for the specified type. /// /// The type. /// The worker writer. public ContentTypeWriter GetTypeWriter(Type type) { try { Type writerType = GetTypeWriterType(type); ContentTypeWriter writer = (ContentTypeWriter)Activator.CreateInstance(writerType); writer.Initialize(this); return writer; } catch (Exception) { throw new InvalidContentException(String.Format("Could not find ContentTypeWriter for type '{0}'", type.Name)); } } private Type GetTypeWriterType(Type type) { if (type == typeof(Array)) { Type resultType = typeof(ArrayWriter); return resultType; } lock (_typeWriterMap) { Type contentTypeWriterGenericType = typeof(ContentTypeWriter<>); Type contentTypeWriterType = contentTypeWriterGenericType.MakeGenericType(type); Type typeWriterType; if (_typeWriterMap.TryGetValue(contentTypeWriterType, out typeWriterType)) return typeWriterType; if (type.IsArray) { Type writerGenericType = (type.GetArrayRank() == 1) ? typeof(ArrayWriter<>) : typeof(MultiArrayWriter<>); Type writerType = writerGenericType.MakeGenericType(type.GetElementType()); _typeWriterMap.Add(contentTypeWriterType, writerType); return writerType; } if (type.IsEnum) { Type writerGenericType = typeof(EnumWriter<>); Type writerType = writerGenericType.MakeGenericType(type); _typeWriterMap.Add(contentTypeWriterType, writerType); return writerType; } if (type.IsGenericType) { Type writerGenericType = null; Type inputTypeDef = type.GetGenericTypeDefinition(); foreach (var kvp in _typeWriterMap) { Type[] args = kvp.Key.GetGenericArguments(); if (args.Length == 0) continue; if (!kvp.Value.IsGenericTypeDefinition) continue; if (!args[0].IsGenericType) continue; // Compare generic type definition Type keyTypeDef = args[0].GetGenericTypeDefinition(); if (inputTypeDef == keyTypeDef) { writerGenericType = kvp.Value; break; } } if (writerGenericType != null) { Type[] args = type.GetGenericArguments(); Type writerType = writerGenericType.MakeGenericType(args); _typeWriterMap.Add(contentTypeWriterType, writerType); return writerType; } } { Type writerGenericType = typeof(ReflectiveWriter<>); Type writerType = writerGenericType.MakeGenericType(type); _typeWriterMap.Add(contentTypeWriterType, writerType); return writerType; } } } /// /// Write the content to a XNB file. /// /// The stream to write the XNB file to. /// The content to write to the XNB file. /// The platform the XNB is intended for. /// The graphics profile of the target. /// True if the content should be LZ4 compressed. /// The root directory of the content. /// The path of the XNB file, used to calculate relative paths for external references. [Obsolete] public void Compile(Stream stream, object content, TargetPlatform targetPlatform, GraphicsProfile targetProfile, bool compressContent, string rootDirectory, string referenceRelocationPath) { ContentCompression compression = (compressContent == true) ? ContentCompression.LegacyLZ4 : ContentCompression.Uncompressed; Compile(stream, content, targetPlatform, targetProfile, compression, rootDirectory, referenceRelocationPath); } /// /// Write the content to a XNB file. /// /// The stream to write the XNB file to. /// The content to write to the XNB file. /// The platform the XNB is intended for. /// The graphics profile of the target. /// The compression method. /// The root directory of the content. /// The path of the XNB file, used to calculate relative paths for external references. public void Compile(Stream stream, object content, TargetPlatform targetPlatform, GraphicsProfile targetProfile, ContentCompression compression, string rootDirectory, string referenceRelocationPath) { using (MemoryStream contentStream = new MemoryStream()) using (ContentWriter contentwriter = new ContentWriter(this, contentStream, targetPlatform, targetProfile, rootDirectory, referenceRelocationPath)) { contentwriter.WriteObject(content); contentwriter.WriteSharedResources(contentwriter.SharedResources); if (compression == ContentCompression.Uncompressed) { BufferedStream bufferedStream = new BufferedStream(stream); WriteHeader(bufferedStream, targetPlatform, targetProfile, compression); long fileSizePos = bufferedStream.Position; uint compressedFileSize = 0; // compressedFileSize is not used on uncompressed XNBs. WriteUInt(bufferedStream, compressedFileSize); using (XnbBodyWriter xnbBodyWriter = new XnbBodyWriter(bufferedStream)) { xnbBodyWriter.WriteTypeWriters(contentwriter.TypeWriters, targetPlatform); xnbBodyWriter.WriteSharedResourcesCount(contentwriter.SharedResources.Count); } contentStream.Position = 0; contentStream.CopyTo(bufferedStream); // Write the file size. bufferedStream.Position = fileSizePos; UInt32 fileSize = (uint)bufferedStream.Length; WriteUInt(bufferedStream, (uint)bufferedStream.Length); bufferedStream.Flush(); } else // (compression != ContentCompression.Uncompressed) { MemoryStream bodyStream = new MemoryStream(); using (XnbBodyWriter xnbBodyWriter = new XnbBodyWriter(bodyStream)) { xnbBodyWriter.WriteTypeWriters(contentwriter.TypeWriters, targetPlatform); xnbBodyWriter.WriteSharedResourcesCount(contentwriter.SharedResources.Count); } contentStream.Position = 0; contentStream.CopyTo(bodyStream); // Before we write the header, try to compress the body stream. Stream compressedStream = null; switch (compression) { case ContentCompression.Uncompressed: throw new InvalidOperationException(); case ContentCompression.LegacyLZ4: compressedStream = CompressStreamLegacyLZ4(bodyStream); break; default: compressedStream = CompressStream(bodyStream, compression); break; } if (compressedStream == null || compressedStream.Length >= bodyStream.Length) { // If compression fails, we want to turn off the compression flag // so the correct flags are written in the header. compression = ContentCompression.Uncompressed; compressedStream = bodyStream; } BufferedStream bufferedStream = new BufferedStream(stream); WriteHeader(bufferedStream, targetPlatform, targetProfile, compression); long fileSizePos = bufferedStream.Position; uint compressedFileSize = (uint)(fileSizePos + sizeof(UInt32) + compressedStream.Length); WriteUInt(bufferedStream, compressedFileSize); compressedStream.Position = 0; compressedStream.CopyTo(bufferedStream); bufferedStream.Flush(); } } return; } private static void WriteUShort(Stream stream, ushort value) { byte[] data = BitConverter.GetBytes(value); stream.Write(data, 0, data.Length); } private static void WriteUInt(Stream stream, uint value) { byte[] data = BitConverter.GetBytes(value); stream.Write(data, 0, data.Length); } private MemoryStream CompressStreamLegacyLZ4(MemoryStream bodyStream) { MemoryStream compressedStream = new MemoryStream(); uint decompressedDataSize = (uint)bodyStream.Length; WriteUInt(compressedStream, decompressedDataSize); byte[] plainData = new byte[decompressedDataSize]; bodyStream.Position = 0; bodyStream.Read(plainData, 0, plainData.Length); // Compress stream int maxLength = LZ4Codec.MaximumOutputLength((int)plainData.Length); byte[] outputArray = new byte[maxLength * 2]; int resultLZ4Length = LZ4Codec.Encode32HC(plainData, 0, (int)plainData.Length, outputArray, 0, maxLength); if (resultLZ4Length < 0) // check error return null; compressedStream.Write(outputArray, 0, resultLZ4Length); return compressedStream; } private MemoryStream CompressStream(MemoryStream bodyStream, ContentCompression compression) { MemoryStream compressedStream = new MemoryStream(); uint decompressedDataSize = (uint)bodyStream.Length; WriteUInt(compressedStream, decompressedDataSize); // write Ext compression header compressedStream.WriteByte((byte)0); // reserved compressedStream.WriteByte((byte)compression); bodyStream.Position = 0; switch (compression) { case ContentCompression.LZ4: { byte[] plainData = new byte[decompressedDataSize]; bodyStream.Position = 0; bodyStream.Read(plainData, 0, plainData.Length); // Compress stream int maxLength = LZ4Codec.MaximumOutputLength((int)plainData.Length); byte[] outputArray = new byte[maxLength * 2]; int resultLZ4Length = LZ4Codec.Encode32HC(plainData, 0, (int)plainData.Length, outputArray, 0, maxLength); if (resultLZ4Length < 0) // check error return null; compressedStream.Write(outputArray, 0, resultLZ4Length); } break; case ContentCompression.Brotli: { #if NET6_0_OR_GREATER using (var brotliStream = new System.IO.Compression.BrotliStream(compressedStream, System.IO.Compression.CompressionLevel.SmallestSize, true)) { bodyStream.CopyTo(brotliStream); brotliStream.Flush(); } #else throw new PlatformNotSupportedException("ContentCompression Brotli not Supported."); #endif } break; default: throw new NotImplementedException("ContentCompression " + compression + " not implemented."); } return compressedStream; } /// /// Write the header to the output stream. /// private void WriteHeader(Stream stream, TargetPlatform targetPlatform, GraphicsProfile targetProfile, ContentCompression compression) { stream.WriteByte((byte)'X'); stream.WriteByte((byte)'N'); stream.WriteByte((byte)'B'); stream.WriteByte((byte)_targetPlatformIdentifiers[(int)targetPlatform]); stream.WriteByte(XnbFormatVersion); byte flags = default(byte); switch (compression) { case ContentCompression.Uncompressed: break; case ContentCompression.LegacyLZ4: // We cannot use LZX compression, so we use the public domain LZ4 compression. // Use one of the spare bits in the flags byte to specify LZ4. flags |= ContentFlagCompressedLz4; break; default: // Use both LZX & LZ4 bits to specify a compressed content. // The compression method is specified in the header of the compressed data. flags |= ContentFlagCompressedExt; break; } if (targetProfile == GraphicsProfile.HiDef) { flags |= ContentFlagHiDef; } stream.WriteByte(flags); } private class XnbBodyWriter : BinaryWriter { public XnbBodyWriter(Stream output) : base(output) { } public void WriteTypeWriters(ICollection typeWriters, TargetPlatform targetPlatform) { Write7BitEncodedInt(typeWriters.Count); foreach (ContentTypeWriter typeWriter in typeWriters) { Write(typeWriter.GetRuntimeReader(targetPlatform)); Write(typeWriter.TypeVersion); } } public void WriteSharedResourcesCount(int sharedResourcesCount) { Write7BitEncodedInt(sharedResourcesCount); } /// /// Releases the resources used by the IDisposable class. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { if (disposing) { } //base.Dispose(disposing); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentCompression.cs ================================================ // Copyright (C)2024 Nick Kastellanos namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { public enum ContentCompression { Uncompressed = 0, //ZLX = 1, LZ4 = 2, Brotli = 3, LegacyLZ4 = 255, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Provides methods and properties for compiling a specific managed type into a binary format. /// public abstract class ContentTypeWriter { private readonly Type _targetType; protected int _typeVersion; /// /// Determines if deserialization into an existing object is possible. /// /// true if the object can be deserialized into; false otherwise. public virtual bool CanDeserializeIntoExistingObject { get { return false; } } /// /// Gets the type handled by this compiler component. /// /// The type handled by this compiler component. public Type TargetType { get { return _targetType; } } /// /// Gets a format version number for this type. /// /// A format version number for this type. public virtual int TypeVersion { get { return _typeVersion; } } /// /// Initializes a new instance of the ContentTypeWriter class. /// /// protected ContentTypeWriter(Type targetType) { if (targetType == null) throw new ArgumentNullException(); _targetType = targetType; } /// /// Gets the assembly qualified name of the runtime loader for this type. /// /// Name of the platform. /// Name of the runtime loader. public abstract string GetRuntimeReader(TargetPlatform targetPlatform); /// /// Gets the assembly qualified name of the runtime target type. The runtime target type often matches the design time type, but may differ. /// /// The target platform. /// The qualified name. public virtual string GetRuntimeType(TargetPlatform targetPlatform) { string typeFullName = _targetType.FullName; string typeAssembly = _targetType.Assembly.FullName; string runtimeType = typeFullName + ", " + typeAssembly; return runtimeType; } /// /// Retrieves and caches nested type writers and allows for reflection over the target data type. Called by the framework at creation time. /// /// The content compiler. protected internal virtual void Initialize(ContentCompiler compiler) { } /// /// Allows type writers to add their element type writers to the content writer. /// /// The content writer. internal virtual void OnAddedToContentWriter(ContentWriter writer) { } /// /// Indicates whether a given type of content should be compressed. /// /// The target platform of the content build. /// The object about to be serialized, or null if a collection of objects is to be serialized. /// true if the content of the requested type should be compressed; false otherwise. /// This base class implementation of this method always returns true. It should be overridden /// to return false if there would be little or no useful reduction in size of the content type's data /// from a general-purpose lossless compression algorithm. /// The implementations for Song Class and SoundEffect Class data return false because data for these /// content types is already in compressed form. protected internal virtual bool ShouldCompressContent(TargetPlatform targetPlatform, object value) { return true; } /// /// Compiles an object into binary format. /// /// The content writer serializing the value. /// The resultant object. protected abstract void Write(ContentWriter output, object value); internal void InternalWrite(ContentWriter output, object value) { this.Write(output, value); } } /// /// Provides a generic implementation of ContentTypeWriter methods and properties for compiling a specific managed type into a binary format. /// /// The type to write /// This is a generic implementation of ContentTypeWriter and, therefore, can handle strongly typed content data. public abstract class ContentTypeWriter : ContentTypeWriter { /// /// Initializes a new instance of the ContentTypeWriter class. /// protected ContentTypeWriter() : base(typeof(T)) { } /// /// Compiles an object into binary format. /// /// The content writer serializing the value. /// The value to write. protected override void Write(ContentWriter output, object value) { Write(output, (T)value); } /// /// Compiles a strongly typed object into binary format. /// /// The content writer serializing the value. /// The value to write. protected abstract void Write(ContentWriter output, T value); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Identifies the components of a type writer. Custom content writers must apply this attribute to their class as well as extend the ContentTypeWriter class. /// [AttributeUsage(AttributeTargets.Class)] public sealed class ContentTypeWriterAttribute : Attribute { /// /// Initializes a new instance of the ContentTypeWriterAttribute class. /// public ContentTypeWriterAttribute() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Base class for the built-in content type writers where the content type is the same as the runtime type. /// /// The content type being written. internal abstract class ContentTypeWriterBase : ContentTypeWriter { /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; // Change "Writer" in this class name to "Reader" and use the runtime type namespace and assembly string readerName = this.GetType().Name.Replace("Writer", "Reader"); // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + "." + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeFullName = TargetType.FullName; string typeAssembly = TargetType.Assembly.FullName; if (typeAssembly.StartsWith("Xna.Framework,")) typeAssembly = "Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeFullName + ", " + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentTypeWriterBaseGeneric.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Base class for the built-in content type writers where the content type is the same as the runtime type. /// /// The content type being written. internal abstract class ContentTypeWriterBaseGeneric : ContentTypeWriter { private List _genericArgWriters; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _genericArgWriters = new List(); Type[] arguments = TargetType.GetGenericArguments(); foreach (Type argType in arguments) { ContentTypeWriter argWriter = output.GetTypeWriter(argType); _genericArgWriters.Add(argWriter); } } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; // Change "Writer" in this class name to "Reader" and use the runtime type namespace and assembly string readerName = this.GetType().Name.Replace("Writer", "Reader"); // Add generic arguments readerName += "["; foreach (ContentTypeWriter argWriter in _genericArgWriters) { readerName += "["; readerName += argWriter.GetRuntimeType(targetPlatform); readerName += "]"; // Important: Do not add a space char after the comma because // this will not work with Type.GetType in Xamarin.Android! readerName += ","; } readerName = readerName.TrimEnd(',', ' '); readerName += "]"; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + "." + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeFullName = TargetType.FullName; string typeAssembly = TargetType.Assembly.FullName; if (typeAssembly.StartsWith("Xna.Framework,")) typeAssembly = "Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeFullName + ", " + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ContentWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Provides an implementation for many of the ContentCompiler methods including compilation, state tracking for shared resources and creation of the header type manifest. /// /// A new ContentWriter is constructed for each compilation operation. public sealed class ContentWriter : BinaryWriter { ContentCompiler _compiler; TargetPlatform _targetPlatform; GraphicsProfile _targetProfile; string _rootDirectory; string _referenceRelocationPath; List _typeWriters = new List(); Dictionary _typeWriterMap = new Dictionary(); Dictionary _typeMap = new Dictionary(); List _sharedResources = new List(); Dictionary _sharedResourceMap = new Dictionary(); internal IList SharedResources { get {return _sharedResources; } } internal ICollection TypeWriters { get {return _typeWriters; } } /// /// Gets the content build target platform. /// public TargetPlatform TargetPlatform { get { return _targetPlatform; } } /// /// Gets or sets the target graphics profile. /// public GraphicsProfile TargetProfile { get { return _targetProfile; } } /// /// Creates a new instance of ContentWriter. /// /// The compiler object that created this writer. /// The stream to write the XNB file to. /// The platform the XNB is intended for. /// The graphics profile of the target. /// The root directory of the content. /// The path of the XNB file, used to calculate relative paths for external references. internal ContentWriter(ContentCompiler compiler, Stream output, TargetPlatform targetPlatform, GraphicsProfile targetProfile, string rootDirectory, string referenceRelocationPath) : base(output) { this._compiler = compiler; this._targetPlatform = targetPlatform; this._targetProfile = targetProfile; this._rootDirectory = rootDirectory; // Normalize the directory format so PathHelper.GetRelativePath will compute external references correctly. this._referenceRelocationPath = PathHelper.NormalizeDirectory(referenceRelocationPath); } /// /// Releases the resources used by the IDisposable class. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } /// /// Write all shared resources at the end of the file. /// internal void WriteSharedResources(IList sharedResources) { for (int i = 0; i < _sharedResources.Count; i++) { object resource = _sharedResources[i]; WriteObject(resource); } } /// /// Gets a ContentTypeWriter for the given type. /// /// The type of the object to write. /// The ContentTypeWriter for the type. internal ContentTypeWriter GetTypeWriter(Type type) { ContentTypeWriter typeWriter = null; if (_typeMap.TryGetValue(type, out typeWriter)) return typeWriter; int index = _typeWriters.Count; typeWriter = _compiler.GetTypeWriter(type); _typeWriters.Add(typeWriter); if (!_typeWriterMap.ContainsKey(typeWriter.GetType())) _typeWriterMap.Add(typeWriter.GetType(), index); _typeMap.Add(type, typeWriter); typeWriter.OnAddedToContentWriter(this); return typeWriter; } /// /// Writes the name of an external file to the output binary. /// /// The type of reference. /// External reference to a data file for the content item. public void WriteExternalReference(ExternalReference reference) { if (reference == null) { Write(string.Empty); } else { string fileName = reference.Filename; if (string.IsNullOrEmpty(fileName)) { Write(string.Empty); } else { // Make sure the filename ends with .xnb if (!fileName.EndsWith(".xnb")) throw new ArgumentException(string.Format("ExternalReference '{0}' must reference a .xnb file", fileName)); // Make sure it is in the same root directory if (!fileName.StartsWith(_rootDirectory, StringComparison.OrdinalIgnoreCase)) throw new ArgumentException(string.Format("ExternalReference '{0}' must be in the root directory '{1}'", fileName, _rootDirectory)); // Strip the .xnb extension fileName = fileName.Substring(0, fileName.Length - 4); // Get the relative directory fileName = PathHelper.GetRelativePath(_referenceRelocationPath, fileName); Write(fileName); } } } /// /// Writes a single object preceded by a type identifier to the output binary. /// /// The type of value. /// The value to write. /// This method can be called recursively with a null value. public void WriteObject(T value) { if (value == null) Write7BitEncodedInt(0); else { ContentTypeWriter typeWriter = GetTypeWriter(value.GetType()); // Because zero means null object, we add one to // the index before writing it to the file. int index = _typeWriterMap[typeWriter.GetType()]; Write7BitEncodedInt(index + 1); typeWriter.InternalWrite(this, value); } } /// /// Writes a single object to the output binary, using the specified type hint and writer worker. /// /// The type of value. /// The value to write. /// The content type writer. /// The type hint should be retrieved from the Initialize method of the ContentTypeWriter /// that is calling WriteObject, by calling GetTypeWriter and passing it the type of the field used /// to hold the value being serialized. /// public void WriteObject(T value, ContentTypeWriter typeWriter) { if (typeWriter == null) throw new ArgumentNullException("typeWriter"); if (typeWriter.TargetType.IsValueType) typeWriter.InternalWrite(this, value); else WriteObject(value); } /// /// Writes a single object to the output binary as an instance of the specified type. /// /// The type of value. /// The value to write. /// If you specify a base class of the actual object value only data from this base type /// will be written. This method does not write any type identifier so it cannot support null or /// polymorphic values, and the reader must specify an identical type while loading the compiled data. public void WriteRawObject(T value) { WriteRawObject(value, GetTypeWriter(typeof(T))); } /// /// Writes a single object to the output binary using the specified writer worker. /// /// The type of value. /// The value to write. /// The writer worker. This should be looked up from the Initialize method /// of the ContentTypeWriter that is calling WriteRawObject, by calling GetTypeWriter. /// WriteRawObject does not write any type identifier, so it cannot support null or polymorphic /// values, and the reader must specify an identical type while loading the compiled data. public void WriteRawObject(T value, ContentTypeWriter typeWriter) { if (value == null) throw new ArgumentNullException("value"); if (typeWriter == null) throw new ArgumentNullException("typeWriter"); typeWriter.InternalWrite(this, value); } /// /// Adds a shared reference to the output binary and records the object to be serialized later. /// /// The type of value. /// The object to record. public void WriteSharedResource(T value) { int index = GetSharedResourceIndex(value); Write7BitEncodedInt(index); } private int GetSharedResourceIndex(object value) { if (value != null) { int index; if (!_sharedResourceMap.TryGetValue(value, out index)) { // Add it to the list of shared resources _sharedResources.Add(value); index = _sharedResources.Count - 1; _sharedResourceMap.Add(value, index); } return (index + 1); // Because zero means null value, we add one to the index } else { return 0; // Zero means a null value } } /// /// Writes a Complex value. /// /// Value of a color using Red, Green, Blue, and Alpha values to write. public void Write(Complex value) { Write(value.R); Write(value.i); } /// /// Writes a Matrix value. /// /// Value to write. public void Write(Matrix value) { Write(value.M11); Write(value.M12); Write(value.M13); Write(value.M14); Write(value.M21); Write(value.M22); Write(value.M23); Write(value.M24); Write(value.M31); Write(value.M32); Write(value.M33); Write(value.M34); Write(value.M41); Write(value.M42); Write(value.M43); Write(value.M44); } /// /// Writes a Quaternion value. /// /// Value to write. public void Write(Quaternion value) { Write(value.X); Write(value.Y); Write(value.Z); Write(value.W); } /// /// Writes a Vector2 value. /// /// Value to write. public void Write(Vector2 value) { Write(value.X); Write(value.Y); } /// /// Writes a Vector3 value. /// /// Value to write. public void Write(Vector3 value) { Write(value.X); Write(value.Y); Write(value.Z); } /// /// Writes a Vector4 value. /// /// Value to write. public void Write(Vector4 value) { Write(value.X); Write(value.Y); Write(value.Z); Write(value.W); } /// /// Helper for checking if a type can be deserialized into an existing object. /// /// The type to check. /// True if the type can be deserialized into an existing object. internal bool CanDeserializeIntoExistingObject(Type type) { ContentTypeWriter typeWriter = _compiler.GetTypeWriter(type); return typeWriter != null && typeWriter.CanDeserializeIntoExistingObject; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/CurveWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Curve; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Curve value to the output. /// [ContentTypeWriter] class CurveWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write((Int32)value.PreLoop); output.Write((Int32)value.PostLoop); output.Write(value.Keys.Count); foreach (var key in value.Keys) { output.Write(key.Position); output.Write(key.Value); output.Write(key.TangentIn); output.Write(key.TangentOut); output.Write((Int32)key.Continuity); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DateTimeWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.DateTime; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the DateTime value to the output. /// [ContentTypeWriter] class DateTimeWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { UInt64 ticks = (UInt64)value.Ticks & ~((UInt64)0xC << 62); UInt64 kind = (UInt64)value.Kind << 62; output.Write((UInt64)(ticks | kind)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DecimalWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Decimal; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the decimal value to the output. /// [ContentTypeWriter] class DecimalWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DictionaryWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the dictionary to the output. /// [ContentTypeWriter] class DictionaryWriter : ContentTypeWriterBaseGeneric> { ContentTypeWriter _keyWriter; ContentTypeWriter _valueWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _keyWriter = output.GetTypeWriter(typeof(K)); _valueWriter = output.GetTypeWriter(typeof(V)); } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected override void Write(ContentWriter output, Dictionary value) { if (value == null) throw new ArgumentNullException("value"); output.Write(value.Count); foreach (var element in value) { output.WriteObject(element.Key, _keyWriter); output.WriteObject(element.Value, _valueWriter); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/DoubleWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Double; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the double precision floating point value to the output. /// [ContentTypeWriter] class DoubleWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/EnumWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the enum value to the output. Usually 32 bit, but can be other sizes if T is not integer. /// /// The enum type to write. [ContentTypeWriter] class EnumWriter : ContentTypeWriterBaseGeneric { Type _underlyingType; ContentTypeWriter _underlyingTypeWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _underlyingType = Enum.GetUnderlyingType(typeof(T)); _underlyingTypeWriter = output.GetTypeWriter(_underlyingType); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".EnumReader`1" + "[[" + GetRuntimeType(targetPlatform) + "]]" ; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } protected override void Write(ContentWriter output, T value) { output.WriteRawObject(Convert.ChangeType(value, _underlyingType), _underlyingTypeWriter); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ExternalReferenceWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the external reference to the output. /// [ContentTypeWriter] class ExternalReferenceWriter : ContentTypeWriterBaseGeneric> { private ContentTypeWriter _targetWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _targetWriter = output.GetTypeWriter(typeof(T)); } /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, ExternalReference value) { output.WriteExternalReference(value); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".ExternalReferenceReader"; string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string runtimeType = _targetWriter.GetRuntimeType(targetPlatform); return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int16Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Int16; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the signed short value to the output. /// [ContentTypeWriter] class Int16Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int32Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Int32; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the signed integer value to the output. /// [ContentTypeWriter] class Int32Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Int64Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Int64; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the signed long value to the output. /// [ContentTypeWriter] class Int64Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ListWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the list to the output. /// [ContentTypeWriter] class ListWriter : ContentTypeWriterBaseGeneric> { ContentTypeWriter _elementWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _elementWriter = output.GetTypeWriter(typeof(T)); } public override bool CanDeserializeIntoExistingObject { get { return true; } } /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, List value) { if (value == null) throw new ArgumentNullException("value"); output.Write(value.Count); foreach (var element in value) { output.WriteObject(element, _elementWriter); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/MatrixWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Matrix; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Matrix value to the output. /// [ContentTypeWriter] class MatrixWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/MultiArrayWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the array value to the output. /// [ContentTypeWriter] class MultiArrayWriter : ContentTypeWriterBaseGeneric { ContentTypeWriter _elementWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _elementWriter = output.GetTypeWriter(typeof(T)); } protected override void Write(ContentWriter output, Array value) { if (value == null) throw new ArgumentNullException("value"); var rank = value.Rank; // Dimension sizes output.Write(rank); for (int dimension = 0; dimension < rank; dimension++) output.Write(value.GetLength(dimension)); // Values var indices = new int[rank]; for (int i = 0; i < value.Length; i++) { CalcIndices(value, i, indices); output.WriteObject(value.GetValue(indices), _elementWriter); } } static void CalcIndices(Array array, int index, int[] indices) { if (array.Rank != indices.Length) throw new Exception("indices"); for (int d = 0; d < indices.Length; d++) { if (index == 0) indices[d] = 0; else { indices[d] = index % array.GetLength(d); index /= array.GetLength(d); } } if (index != 0) throw new ArgumentOutOfRangeException("index"); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".MultiArrayReader`1" + "[[" + _elementWriter.GetRuntimeType(targetPlatform) + "]]" ; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/NullableWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the nullable value to the output. /// [ContentTypeWriter] class NullableWriter : ContentTypeWriterBaseGeneric> where T: struct { ContentTypeWriter _elementWriter; protected internal override void Initialize(ContentCompiler compiler) { base.Initialize(compiler); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); _elementWriter = output.GetTypeWriter(typeof(T)); } /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, Nullable value) { output.Write(value.HasValue); if (value.HasValue) output.WriteObject(value.Value, _elementWriter); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/PlaneWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Plane; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Plane value to the output. /// [ContentTypeWriter] class PlaneWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Normal); output.Write(value.D); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/PointWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Point; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Point value to the output. /// [ContentTypeWriter] class PointWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.X); output.Write(value.Y); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/QuaternionWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Quaternion; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Quaternion value to the output. /// [ContentTypeWriter] class QuaternionWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/RayWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Ray; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Ray value to the output. /// [ContentTypeWriter] class RayWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Position); output.Write(value.Direction); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/RectangleWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Rectangle; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Rectangle value to the output. /// [ContentTypeWriter] class RectangleWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.X); output.Write(value.Y); output.Write(value.Width); output.Write(value.Height); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/ReflectiveWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { class ReflectiveWriter : ContentTypeWriter { private ContentCompiler _compiler; private PropertyInfo[] _properties; private FieldInfo[] _fields; private Type _baseType; private string _runtimeType; private static HashSet _sharedResources = new HashSet(); public ReflectiveWriter() : base(typeof(T)) { } public override bool CanDeserializeIntoExistingObject { get { return TargetType.IsClass; } } protected internal override void Initialize(ContentCompiler compiler) { _compiler = compiler; Type type = ReflectionHelpers.GetBaseType(TargetType); if (type != null && type != typeof(object) && !TargetType.IsValueType) _baseType = type; var runtimeType = TargetType.GetCustomAttributes(typeof(ContentSerializerRuntimeTypeAttribute), false).FirstOrDefault() as ContentSerializerRuntimeTypeAttribute; if (runtimeType != null) _runtimeType = runtimeType.RuntimeType; var typeVersion = TargetType.GetCustomAttributes(typeof(ContentSerializerTypeVersionAttribute), false).FirstOrDefault() as ContentSerializerTypeVersionAttribute; if (typeVersion != null) _typeVersion = typeVersion.TypeVersion; _properties = TargetType.GetAllProperties().Where(IsValidProperty).ToArray(); _fields = TargetType.GetAllFields().Where(IsValidField).ToArray(); } /// internal override void OnAddedToContentWriter(ContentWriter output) { base.OnAddedToContentWriter(output); foreach (var property in _properties) output.GetTypeWriter(property.PropertyType); foreach (var field in _fields) output.GetTypeWriter(field.FieldType); } private bool IsValidProperty(PropertyInfo property) { // Properties must have at least a getter. if (property.CanRead == false) return false; // Skip over indexer properties. if (property.Name == "Item" && property.GetIndexParameters().Length > 0) return false; // Are we explicitly asked to ignore this item? if (ReflectionHelpers.GetCustomAttribute(property) != null) return false; var contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute(property); if (contentSerializerAttribute == null) { // There is no ContentSerializerAttribute, so non-public // properties cannot be serialized. if (!ReflectionHelpers.PropertyIsPublic(property)) return false; // Check the type reader to see if it is safe to // deserialize into the existing type. if (!property.CanWrite) { if (!_compiler.GetTypeWriter(property.PropertyType).CanDeserializeIntoExistingObject) return false; } } else if (contentSerializerAttribute.SharedResource) { _sharedResources.Add(property); } return true; } private bool IsValidField(FieldInfo field) { // Are we explicitly asked to ignore this item? if (ReflectionHelpers.GetCustomAttribute(field) != null) return false; var contentSerializerAttribute = ReflectionHelpers.GetCustomAttribute(field); if (contentSerializerAttribute == null) { // There is no ContentSerializerAttribute, so non-public // fields cannot be deserialized. if (!field.IsPublic) return false; // evolutional: Added check to skip initialise only fields if (field.IsInitOnly) return false; } else if (contentSerializerAttribute.SharedResource) { _sharedResources.Add(field); } return true; } private static void Write(object parent, ContentWriter output, MemberInfo member) { PropertyInfo property = member as PropertyInfo; FieldInfo field = member as FieldInfo; Debug.Assert(field != null || property != null); Type elementType; object memberObject; if (property != null) { elementType = property.PropertyType; memberObject = property.GetValue(parent, null); } else { elementType = field.FieldType; memberObject = field.GetValue(parent); } if (_sharedResources.Contains(member)) output.WriteSharedResource(memberObject); else { ContentTypeWriter writer = output.GetTypeWriter(elementType); if (writer == null || elementType == typeof(object) || elementType == typeof(Array)) output.WriteObject(memberObject); else output.WriteObject(memberObject, writer); } } protected override void Write(ContentWriter output, object value) { if (_baseType != null) { ContentTypeWriter baseTypeWriter = output.GetTypeWriter(_baseType); baseTypeWriter.InternalWrite(output, value); } foreach (PropertyInfo property in _properties) Write(value, output, property); foreach (FieldInfo field in _fields) Write(value, output, field); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".ReflectiveReader`1" + "[[" + GetRuntimeType(targetPlatform) + "]]" ; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { if (string.IsNullOrEmpty(_runtimeType)) return base.GetRuntimeType(targetPlatform); return _runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/SByteWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.SByte; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the signed byte value to the output. /// [ContentTypeWriter] class SByteWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/SingleWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.Single; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the single precision floating point value to the output. /// [ContentTypeWriter] class SingleWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/StringWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.String; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the string value to the output. /// [ContentTypeWriter] class StringWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/TimeSpanWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.TimeSpan; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the TimeSpan value to the output. /// [ContentTypeWriter] class TimeSpanWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.Ticks); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt16Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.UInt16; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the unsigned short value to the output. /// [ContentTypeWriter] class UInt16Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt32Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.UInt32; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the unsigned integer value to the output. /// [ContentTypeWriter] class UInt32Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/UInt64Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = System.UInt64; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the unsigned long value to the output. /// [ContentTypeWriter] class UInt64Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector2Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Vector2; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Vector2 value to the output. /// [ContentTypeWriter] class Vector2Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector3Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Vector3; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Vector3 value to the output. /// [ContentTypeWriter] class Vector3Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Compiler/Vector4Writer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Vector4; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Vector4 value to the output. /// [ContentTypeWriter] class Vector4Writer : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ArraySerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { class ArraySerializer : ContentTypeSerializer { private readonly ListSerializer _listSerializer; public ArraySerializer() : base("array") { _listSerializer = new ListSerializer(); } protected internal override void Initialize(IntermediateSerializer serializer) { _listSerializer.Initialize(serializer); } public override bool ObjectIsEmpty(T[] value) { return value.Length == 0; } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, T[] value) { _listSerializer.ScanChildren(serializer, callback, new List(value)); } protected internal override T[] Deserialize(IntermediateReader input, ContentSerializerAttribute format, T[] existingInstance) { if (existingInstance != null) throw new InvalidOperationException("You cannot deserialize an array into a getter-only property."); var result = _listSerializer.Deserialize(input, format, null); return result.ToArray(); } protected internal override void Serialize(IntermediateWriter output, T[] value, ContentSerializerAttribute format) { _listSerializer.Serialize(output, new List(value), format); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/BoolSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class BoolSerializer : ElementSerializer { public BoolSerializer() : base("bool", 1) { } protected internal override bool Deserialize(string[] inputs, ref int index) { return XmlConvert.ToBoolean(inputs[index++]); } protected internal override void Serialize(bool value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ByteSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ByteSerializer : ElementSerializer { public ByteSerializer() : base("byte", 1) { } protected internal override byte Deserialize(string[] inputs, ref int index) { return XmlConvert.ToByte(inputs[index++]); } protected internal override void Serialize(byte value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/CharSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class CharSerializer : ElementSerializer { public CharSerializer() : base("char", 1) { } protected internal override char Deserialize(string[] inputs, ref int index) { var str = inputs[index++]; if (str.Length == 1) return XmlConvert.ToChar(str); // Try parsing it as a UTF code. int val; if (int.TryParse(str, out val)) return char.ConvertFromUtf32(val)[0]; // Last ditch effort to decode it as XML escape value. return XmlConvert.ToChar(XmlConvert.DecodeName(str)); } protected internal override void Serialize(char value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ColorSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Globalization; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ColorSerializer : ElementSerializer { public ColorSerializer() : base("Color", 1) { } protected internal override Color Deserialize(string[] inputs, ref int index) { // NOTE: The value is serialized in ARGB format. var value = uint.Parse(inputs[index++], NumberStyles.HexNumber, CultureInfo.InvariantCulture); return new Color( (int)(value >> 16 & 0xFF), (int)(value >> 8 & 0xFF), (int)(value >> 0 & 0xFF), (int)(value >> 24 & 0xFF)); } protected internal override void Serialize(Color value, List results) { // NOTE: The value is serialized in ARGB format. results.Add(string.Format("{0:X2}{1:X2}{2:X2}{3:X2}", value.A, value.R, value.G, value.B)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { public abstract class ContentTypeSerializer { protected ContentTypeSerializer(Type targetType, string xmlTypeName) { TargetType = targetType; XmlTypeName = xmlTypeName; } public virtual bool CanDeserializeIntoExistingObject { get { return false; } } public Type TargetType { get; private set; } public string XmlTypeName { get; private set; } protected internal abstract object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance); protected internal virtual void Initialize(IntermediateSerializer serializer) { } public virtual bool ObjectIsEmpty(object value) { return false; } protected internal virtual void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value) { } protected internal abstract void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format); internal protected delegate void ChildCallback(ContentTypeSerializer typeSerializer, object value); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializerAttribute.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { /// /// Used to identify custom ContentTypeSerializer classes. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] public sealed class ContentTypeSerializerAttribute : Attribute { /// /// Initializes an instance of the ContentTypeSerializerAttribute. /// public ContentTypeSerializerAttribute() { } private static readonly object _lock = new object(); private static ReadOnlyCollection _types; static internal ReadOnlyCollection GetTypes() { lock (_lock) { if (_types == null) { var found = new List(); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assembly in assemblies) { try { var types = assembly.GetTypes(); foreach (var type in types) { var attributes = type.GetCustomAttributes(typeof (ContentTypeSerializerAttribute), false); if (attributes.Length > 0) found.Add(type); } } catch (System.Reflection.ReflectionTypeLoadException ex) { Console.WriteLine("Warning: " + ex.Message); } } _types = new ReadOnlyCollection(found); } } return _types; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ContentTypeSerializerT.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { public abstract class ContentTypeSerializer : ContentTypeSerializer { protected ContentTypeSerializer() : this(string.Empty) { } protected ContentTypeSerializer(string xmlTypeName) : base(typeof(T), xmlTypeName) { } protected internal abstract T Deserialize(IntermediateReader input, ContentSerializerAttribute format, T existingInstance); protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance) { T cast = existingInstance == null ? default(T) : (T)existingInstance; return Deserialize(input, format, cast); } public virtual bool ObjectIsEmpty(T value) { return base.ObjectIsEmpty(value); } public override bool ObjectIsEmpty(object value) { T cast = value == null ? default(T) : (T)value; return ObjectIsEmpty(cast); } protected internal virtual void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, T value) { } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value) { if (value == null) return; ScanChildren(serializer, callback, (T)value); } protected internal abstract void Serialize(IntermediateWriter output, T value, ContentSerializerAttribute format); protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format) { T cast = value == null ? default(T) : (T)value; Serialize(output, cast, format); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/CurveKeyCollectionSerializer.cs ================================================ using System; using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class CurveKeyCollectionSerializer : ContentTypeSerializer { public CurveKeyCollectionSerializer() : base("Keys") { } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override CurveKeyCollection Deserialize( IntermediateReader input, ContentSerializerAttribute format, CurveKeyCollection existingInstance) { var result = existingInstance ?? new CurveKeyCollection(); if (input.Xml.HasValue) { var elements = PackedElementsHelper.ReadElements(input); if (elements.Length > 0) { // Each CurveKey consists of 5 elements if (elements.Length % 5 != 0) throw new InvalidContentException( "Elements count in CurveKeyCollection is inncorect!"); try { // Parse all CurveKeys for (int i = 0; i < elements.Length; i += 5) { // Order: Position, Value, TangentIn, TangentOut and Continuity var curveKey = new CurveKey (XmlConvert.ToSingle(elements[i]), XmlConvert.ToSingle(elements[i + 1]), XmlConvert.ToSingle(elements[i + 2]), XmlConvert.ToSingle(elements[i + 3]), (CurveContinuity)Enum.Parse( typeof(CurveContinuity), elements[i + 4], true)); result.Add(curveKey); } } catch (Exception e) { throw new InvalidContentException ("Error parsing CurveKey", e); } } } return result; } protected internal override void Serialize( IntermediateWriter output, CurveKeyCollection value, ContentSerializerAttribute format) { var elements = new List(); foreach (var curveKey in value) { // Order: Position, Value, TangentIn, TangentOut and Continuity elements.Add(XmlConvert.ToString(curveKey.Position)); elements.Add(XmlConvert.ToString(curveKey.Value)); elements.Add(XmlConvert.ToString(curveKey.TangentIn)); elements.Add(XmlConvert.ToString(curveKey.TangentOut)); elements.Add(curveKey.Continuity.ToString()); } var str = PackedElementsHelper.JoinElements(elements); output.Xml.WriteString(str); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/DictionarySerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class DictionarySerializer : ContentTypeSerializer> { private ContentTypeSerializer _keySerializer; private ContentTypeSerializer _valueSerializer; private ContentSerializerAttribute _keyFormat; private ContentSerializerAttribute _valueFormat; public DictionarySerializer() : base("dictionary") { } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override void Initialize(IntermediateSerializer serializer) { _keySerializer = serializer.GetTypeSerializer(typeof(TKey)); _valueSerializer = serializer.GetTypeSerializer(typeof(TValue)); _keyFormat = new ContentSerializerAttribute { ElementName = "Key", AllowNull = false }; _valueFormat = new ContentSerializerAttribute() { ElementName = "Value", AllowNull = typeof(TValue).IsValueType }; } public override bool ObjectIsEmpty(Dictionary value) { return value.Count == 0; } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, Dictionary value) { foreach (var kvp in value) { callback(_keySerializer, kvp.Key); callback(_valueSerializer, kvp.Value); } } protected internal override Dictionary Deserialize(IntermediateReader input, ContentSerializerAttribute format, Dictionary existingInstance) { var result = existingInstance ?? new Dictionary(); while (input.MoveToElement(format.CollectionItemName)) { input.Xml.ReadStartElement(); TKey key = input.ReadObject(_keyFormat, _keySerializer); TValue value = input.ReadObject(_valueFormat, _valueSerializer); result.Add(key,value); input.Xml.ReadEndElement(); } return result; } protected internal override void Serialize(IntermediateWriter output, Dictionary value, ContentSerializerAttribute format) { foreach (var kvp in value) { output.Xml.WriteStartElement(format.CollectionItemName); output.WriteObject(kvp.Key, _keyFormat, _keySerializer); output.WriteObject(kvp.Value, _valueFormat, _valueSerializer); output.Xml.WriteEndElement(); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/DoubleSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class DoubleSerializer : ElementSerializer { public DoubleSerializer() : base("double", 1) { } protected internal override double Deserialize(string[] inputs, ref int index) { return XmlConvert.ToDouble(inputs[index++]); } protected internal override void Serialize(double value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ElementSerializerT.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { abstract class ElementSerializer : ContentTypeSerializer { private readonly int _elementCount; protected ElementSerializer(string xmlTypeName, int elementCount) : base(xmlTypeName) { _elementCount = elementCount; } protected void ThrowElementCountException() { throw new InvalidContentException("Not have enough entries in space-separated list!"); } protected internal abstract T Deserialize(string [] inputs, ref int index); protected internal abstract void Serialize(T value, List results); protected internal void Deserialize(IntermediateReader input, List results) { var elements = PackedElementsHelper.ReadElements(input); for (int index = 0; index < elements.Length;) { if (elements.Length - index < _elementCount) ThrowElementCountException(); T elem = Deserialize(elements, ref index); results.Add(elem); } } protected internal override T Deserialize(IntermediateReader input, ContentSerializerAttribute format, T existingInstance) { string[] elements = PackedElementsHelper.ReadElements(input); if (elements.Length < _elementCount) ThrowElementCountException(); int index = 0; return Deserialize(elements, ref index); } protected internal void Serialize(IntermediateWriter output, List values) { List elements = new List(); for (int i = 0; i < values.Count; i++) Serialize(values[i], elements); string str = PackedElementsHelper.JoinElements(elements); output.Xml.WriteString(str); } protected internal override void Serialize(IntermediateWriter output, T value, ContentSerializerAttribute format) { List elements = new List(); Serialize(value, elements); string str = PackedElementsHelper.JoinElements(elements); output.Xml.WriteString(str); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/EnumSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { class EnumSerializer : ContentTypeSerializer { public EnumSerializer(Type targetType) : base(targetType, targetType.Name) { } protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance) { var str = input.Xml.ReadString(); try { return Enum.Parse(TargetType, str, true); } catch (Exception ex) { throw input.NewInvalidContentException(ex, "Invalid enum value '{0}' for type '{1}'", str, TargetType.Name); } } protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format) { Debug.Assert(value.GetType() == TargetType, "Got invalid value type!"); output.Xml.WriteString(value.ToString()); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ExternalReferenceSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ExternalReferenceSerializer : ContentTypeSerializer> { public ExternalReferenceSerializer() : base("ExternalReference") { } protected internal override ExternalReference Deserialize(IntermediateReader input, ContentSerializerAttribute format, ExternalReference existingInstance) { var result = existingInstance ?? new ExternalReference(); input.ReadExternalReference(result); return result; } protected internal override void Serialize(IntermediateWriter output, ExternalReference value, ContentSerializerAttribute format) { output.WriteExternalReference(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/FloatSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class FloatSerializer : ElementSerializer { public FloatSerializer() : base("float", 1) { } protected internal override float Deserialize(string[] inputs, ref int index) { return XmlConvert.ToSingle(inputs[index++]); } protected internal override void Serialize(float value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/GenericCollectionHelper.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Reflection; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { internal class GenericCollectionHelper { public static bool IsGenericCollectionType(Type type, bool checkAncestors) { return GetCollectionElementType(type, checkAncestors) != null; } private static Type GetCollectionElementType(Type type, bool checkAncestors) { if (!checkAncestors && type.BaseType != null && FindCollectionInterface(type.BaseType) != null) return null; var collectionInterface = FindCollectionInterface(type); if (collectionInterface == null) return null; return collectionInterface.GetGenericArguments()[0]; } private static Type FindCollectionInterface(Type type) { var interfaces = type.FindInterfaces((t, o) => { if (t.IsGenericType) return t.GetGenericTypeDefinition() == typeof(ICollection<>); return false; }, null); return (interfaces.Length == 1) ? interfaces[0] : null; } private readonly ContentTypeSerializer _contentSerializer; private readonly PropertyInfo _countProperty; private readonly MethodInfo _addMethod; public GenericCollectionHelper(IntermediateSerializer serializer, Type type) { var collectionElementType = GetCollectionElementType(type, false); _contentSerializer = serializer.GetTypeSerializer(collectionElementType); var collectionType = typeof(ICollection<>).MakeGenericType(collectionElementType); _countProperty = collectionType.GetProperty("Count"); _addMethod = collectionType.GetMethod("Add", new[] { collectionElementType }); } public bool ObjectIsEmpty(object list) { return (int) _countProperty.GetValue(list, null) == 0; } public void ScanChildren(ContentTypeSerializer.ChildCallback callback, object collection) { foreach (var item in (IEnumerable) collection) if (item != null) callback(_contentSerializer, item); } public void Serialize(IntermediateWriter output, object collection, ContentSerializerAttribute format) { var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; foreach (var item in (IEnumerable) collection) output.WriteObject(item, itemFormat, _contentSerializer); } public void Deserialize(IntermediateReader input, object collection, ContentSerializerAttribute format) { var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; while (input.MoveToElement(format.CollectionItemName)) _addMethod.Invoke(collection, new[] { input.ReadObject(itemFormat, _contentSerializer) }); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class IntSerializer : ElementSerializer { public IntSerializer() : base("int", 1) { } protected internal override int Deserialize(string[] inputs, ref int index) { return XmlConvert.ToInt32(inputs[index++]); } protected internal override void Serialize(int value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { public sealed class IntermediateReader { private readonly string _filePath; private readonly Dictionary> _resourceFixups; private readonly Dictionary>> _externalReferences; public XmlReader Xml { get; private set; } public IntermediateSerializer Serializer { get; private set; } internal IntermediateReader(IntermediateSerializer serializer, XmlReader xmlReader, string filePath) { Serializer = serializer; Xml = xmlReader; _filePath = filePath; _resourceFixups = new Dictionary>(); _externalReferences = new Dictionary>>(); } public bool MoveToElement(string elementName) { var nodeType = Xml.MoveToContent(); return nodeType == XmlNodeType.Element && Xml.Name == elementName; } public T ReadObject(ContentSerializerAttribute format) { return ReadObject(format, Serializer.GetTypeSerializer(typeof(T)), default(T)); } public T ReadObject(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer) { return ReadObject(format, typeSerializer, default(T)); } public T ReadObject(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, T existingInstance) { if (!format.FlattenContent) { if (!MoveToElement(format.ElementName)) throw NewInvalidContentException(null, "Element '{0}' was not found.", format.ElementName); // Is the object null? string isNull = Xml.GetAttribute("Null"); if (isNull != null && XmlConvert.ToBoolean(isNull)) { if (!format.AllowNull) throw NewInvalidContentException(null, "Element '{0}' cannot be null.", format.ElementName); Xml.Skip(); return default(T); } // Is the object overloading the serialized type? if (Xml.MoveToAttribute("Type")) { Type type = ReadTypeName(); if (type == null) throw NewInvalidContentException(null, "Could not resolve type '{0}'.", Xml.ReadContentAsString()); if (!typeSerializer.TargetType.IsAssignableFrom(type)) throw NewInvalidContentException(null, "Type '{0}' is not assignable to '{1}'.", type.FullName, typeSerializer.TargetType.FullName); typeSerializer = Serializer.GetTypeSerializer(type); Xml.MoveToElement(); } } return ReadRawObject(format, typeSerializer, existingInstance); } public T ReadObject(ContentSerializerAttribute format, T existingInstance) { return ReadObject(format, Serializer.GetTypeSerializer(typeof(T)), existingInstance); } public T ReadRawObject(ContentSerializerAttribute format) { return ReadRawObject(format, Serializer.GetTypeSerializer(typeof(T)), default(T)); } public T ReadRawObject(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer) { return ReadRawObject(format, typeSerializer, default(T)); } public T ReadRawObject(ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, T existingInstance) { if (format.FlattenContent) { Xml.MoveToContent(); return (T)typeSerializer.Deserialize(this, format, existingInstance); } if (!MoveToElement(format.ElementName)) throw NewInvalidContentException(null, "Element '{0}' was not found.", format.ElementName); bool isEmpty = Xml.IsEmptyElement; if (!isEmpty) Xml.ReadStartElement(); object result = typeSerializer.Deserialize(this, format, existingInstance); if (isEmpty) Xml.Skip(); if (!isEmpty) Xml.ReadEndElement(); return (T)result; } public T ReadRawObject(ContentSerializerAttribute format, T existingInstance) { return ReadRawObject(format, Serializer.GetTypeSerializer(typeof(T)), existingInstance); } public void ReadSharedResource(ContentSerializerAttribute format, Action fixup) { string str; if (format.FlattenContent) str = Xml.ReadContentAsString(); else { if (!MoveToElement(format.ElementName)) throw NewInvalidContentException(null, "Element '{0}' was not found.", format.ElementName); str = Xml.ReadElementContentAsString(); } if (string.IsNullOrEmpty(str)) return; // Do we already have one for this? Action prevFixup; if (!_resourceFixups.TryGetValue(str, out prevFixup)) _resourceFixups.Add(str, (o) => fixup((T)o)); else { _resourceFixups[str] = (o) => { prevFixup(o); fixup((T)o); }; } } internal void ReadSharedResources() { if (!MoveToElement("Resources")) return; var resources = new Dictionary(); var resourceFormat = new ContentSerializerAttribute { ElementName = "Resource" }; // Read all the resources. Xml.ReadStartElement(); while (MoveToElement("Resource")) { string id = Xml.GetAttribute("ID"); object resource = ReadObject(resourceFormat); resources.Add(id, resource); } Xml.ReadEndElement(); // Execute the fixups. foreach (var fixup in _resourceFixups) { object resource; if (!resources.TryGetValue(fixup.Key, out resource)) throw new InvalidContentException("Missing shared resource \"" + fixup.Key + "\"."); fixup.Value(resource); } } public void ReadExternalReference(ExternalReference existingInstance) { if (!MoveToElement("Reference")) return; string str = Xml.ReadElementContentAsString(); Action fixup = (type, filename) => { if (type != typeof(T)) throw NewInvalidContentException(null, "Invalid external reference type"); existingInstance.Filename = filename; }; List> fixups; if (!_externalReferences.TryGetValue(str, out fixups)) _externalReferences.Add(str, fixups = new List>()); fixups.Add(fixup); } internal void ReadExternalReferences() { if (!MoveToElement("ExternalReferences")) return; string currentDir = Path.GetDirectoryName(_filePath); // Read all the external references. Xml.ReadStartElement(); while (MoveToElement("ExternalReference")) { List> fixups; string id = Xml.GetAttribute("ID"); if (!_externalReferences.TryGetValue(id, out fixups)) throw NewInvalidContentException(null, "Unknown external reference id '{0}'!", id); Xml.MoveToAttribute("TargetType"); Type targetType = ReadTypeName(); if (targetType == null) throw NewInvalidContentException(null, "Could not resolve type '{0}'.", Xml.ReadContentAsString()); Xml.MoveToElement(); string filename = Xml.ReadElementString(); filename = Path.Combine(currentDir, filename); // Apply the fixups. foreach (var fixup in fixups) fixup(targetType, filename); } Xml.ReadEndElement(); } internal InvalidContentException NewInvalidContentException(Exception innerException, string message, params object[] args) { IXmlLineInfo xmlInfo = (IXmlLineInfo)Xml; string lineAndColumn = string.Format("{0},{1}", xmlInfo.LineNumber, xmlInfo.LinePosition); ContentIdentity identity = new ContentIdentity(_filePath, string.Empty, lineAndColumn); return new InvalidContentException(string.Format(message, args), identity, innerException); } /// /// Reads the next type in the /// /// public Type ReadTypeName() { string typeName = Xml.ReadContentAsString(); return Serializer.FindType(typeName); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { // The intermediate serializer implementation is based on testing XNA behavior and the following sources: // // http://msdn.microsoft.com/en-us/library/Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate.aspx // http://blogs.msdn.com/b/shawnhar/archive/2008/08/12/everything-you-ever-wanted-to-know-about-intermediateserializer.aspx // http://blogs.msdn.com/b/shawnhar/archive/2008/08/26/customizing-intermediateserializer-part-1.aspx // http://blogs.msdn.com/b/shawnhar/archive/2008/08/26/customizing-intermediateserializer-part-2.aspx // http://blogs.msdn.com/b/shawnhar/archive/2008/08/27/why-intermediateserializer-control-attributes-are-not-part-of-the-content-pipeline.aspx // public class IntermediateSerializer { /// /// According to the examples on Sean Hargreaves' blog, explicit types /// can also specify the type aliases from C#. This maps those names /// to the actual .NET framework types for parsing. /// private static readonly Dictionary _typeAliases = new Dictionary { { "bool", typeof(bool) }, { "byte", typeof(byte) }, { "sbyte", typeof(sbyte) }, { "char", typeof(char) }, { "decimal",typeof(decimal) }, { "double", typeof(double) }, { "float", typeof(float) }, { "int", typeof(int) }, { "uint", typeof(uint) }, { "long", typeof(long) }, { "ulong", typeof(ulong) }, { "object", typeof(object) }, { "short", typeof(short) }, { "ushort", typeof(ushort) }, { "string", typeof(string) } }; private static readonly Dictionary _typeAliasesReverse; static IntermediateSerializer() { _typeAliasesReverse = _typeAliases.ToDictionary(x => x.Value, x => x.Key); } private IntermediateSerializer() { _scannedObjects = new List(); _namespaceAliasHelper = new NamespaceAliasHelper(this); } /// /// Maps "ShortName:" -> "My.Namespace.LongName." for type lookups. /// private Dictionary _namespaceLookup; private Dictionary _serializers; private Dictionary _collectionHelpers; private Dictionary _genericSerializerTypes; private readonly NamespaceAliasHelper _namespaceAliasHelper; private readonly List _scannedObjects; public static T Deserialize(XmlReader input, string referenceRelocationPath) { var serializer = new IntermediateSerializer(); var reader = new IntermediateReader(serializer, input, referenceRelocationPath); T asset = default(T); try { if (!reader.MoveToElement("XnaContent")) throw new InvalidContentException(string.Format("Could not find XnaContent element in '{0}'.", referenceRelocationPath)); // Initialize the namespace lookups from // the attributes on the XnaContent element. serializer.CreateNamespaceLookup(input); // Move past the XnaContent. input.ReadStartElement(); // Read the asset. var format = new ContentSerializerAttribute {ElementName = "Asset"}; asset = reader.ReadObject(format); // Process the shared resources and external references. reader.ReadSharedResources(); reader.ReadExternalReferences(); // Move past the closing XnaContent element. input.ReadEndElement(); } catch (XmlException xmlException) { throw reader.NewInvalidContentException(xmlException, "An error occurred parsing."); } return asset; } public ContentTypeSerializer GetTypeSerializer(Type type) { // Create the known serializers if we haven't already. if (_serializers == null) { _serializers = new Dictionary(); _genericSerializerTypes = new Dictionary(); var types = ContentTypeSerializerAttribute.GetTypes(); foreach (Type t in types) { if (t.IsGenericType) { Type genericType = t.BaseType.GetGenericArguments()[0]; _genericSerializerTypes.Add(genericType.GetGenericTypeDefinition(), t); } else { var cts = Activator.CreateInstance(t) as ContentTypeSerializer; cts.Initialize(this); _serializers.Add(cts.TargetType, cts); } } } // Look it up. ContentTypeSerializer serializer; if (_serializers.TryGetValue(type, out serializer)) return serializer; Type serializerType; if (type.IsArray) { if (type.GetArrayRank() != 1) throw new RankException("We only support single dimension arrays."); Type arrayType = typeof(ArraySerializer<>).MakeGenericType(new[] { type.GetElementType() }); serializer = (ContentTypeSerializer)Activator.CreateInstance(arrayType); } else if (type.IsGenericType && _genericSerializerTypes.TryGetValue(type.GetGenericTypeDefinition(), out serializerType)) { serializerType = serializerType.MakeGenericType(type.GetGenericArguments()); serializer = (ContentTypeSerializer)Activator.CreateInstance(serializerType); } else if (type.IsEnum) { serializer = new EnumSerializer(type); } else if (typeof(IList).IsAssignableFrom(type) && !GenericCollectionHelper.IsGenericCollectionType(type, true)) { // Special handling for non-generic IList types. By the time we get here, // generic collection types will already have been handled by one of the known serializers. serializer = new NonGenericIListSerializer(type); } else { // The reflective serializer is not for primitive types! if (type.IsPrimitive) throw new NotImplementedException(string.Format("Unhandled primitive type `{0}`!", type.FullName)); // We still don't have a serializer then we // fallback to the reflection based serializer. serializer = new ReflectiveSerializer(type); } Debug.Assert(serializer.TargetType == type, "Target type mismatch!"); // We cache the serializer before we initialize it to // avoid a stack overflow on recursive types. _serializers.Add(type, serializer); serializer.Initialize(this); return serializer; } internal GenericCollectionHelper GetCollectionHelper(Type type) { if (_collectionHelpers == null) _collectionHelpers = new Dictionary(); GenericCollectionHelper result; if (!_collectionHelpers.TryGetValue(type, out result)) { result = new GenericCollectionHelper(this, type); _collectionHelpers.Add(type, result); } return result; } public static void Serialize(XmlWriter output, T value, string referenceRelocationPath) { var serializer = new IntermediateSerializer(); var writer = new IntermediateWriter(serializer, output, referenceRelocationPath); output.WriteStartElement("XnaContent"); serializer._namespaceAliasHelper.WriteNamespaces(output, value); // Write the asset. var format = new ContentSerializerAttribute { ElementName = "Asset" }; writer.WriteObject(value, format); // Process the shared resources and external references. writer.WriteSharedResources(); writer.WriteExternalReferences(); // Close the XnaContent element. output.WriteEndElement(); } /// /// Builds a lookup table from a short name to the full namespace. /// private void CreateNamespaceLookup(XmlReader reader) { _namespaceLookup = new Dictionary(); for (int i=0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); if (reader.Prefix != "xmlns") continue; _namespaceLookup.Add(reader.LocalName + ":", reader.Value + "."); } } /// /// Finds the type in any assembly loaded into the AppDomain. /// internal Type FindType(string typeName) { Type foundType; typeName = typeName.Trim(); // Shortcut for friendly C# names if (_typeAliases.TryGetValue(typeName, out foundType)) return foundType; // If this is an array then handle it separately. if (typeName.EndsWith("[]")) { string arrayType = typeName.Substring(0, typeName.Length - 2); foundType = FindType(arrayType); return foundType == null ? null : foundType.MakeArrayType(); } // Expand any namespaces in the asset type foreach (var pair in _namespaceLookup) typeName = typeName.Replace(pair.Key, pair.Value); string expandedName = typeName; // If this a generic type, handle it separately. if (typeName.EndsWith("]")) { int openBracketIndex = typeName.IndexOf("["); string typeNameWithoutArguments = typeName.Substring(0, openBracketIndex); string genericArgumentsString = typeName.Substring(openBracketIndex + 1, typeName.Length - openBracketIndex - 2); string[] genericArgumentsArray = genericArgumentsString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); Type[] genericArguments = genericArgumentsArray.Select(FindType).ToArray(); foundType = FindType(typeNameWithoutArguments + "`" + genericArguments.Length); return (foundType == null) ? null : foundType.MakeGenericType(genericArguments); } Parallel.ForEach(AppDomain.CurrentDomain.GetAssemblies(), (assembly, state) => { Parallel.ForEach(assembly.GetTypes(), (type, state2) => { if (state.IsStopped) { state2.Stop(); return; } if (type.FullName == typeName || type.Name == typeName) { foundType = type; state.Stop(); } }); }); if (foundType == null) foundType = Type.GetType(expandedName, false, true); return foundType; } /// /// Gets the (potentially) aliased name for any type. /// internal string GetFullTypeName(Type type) { string typeName; // Shortcut for friendly C# names if (_typeAliasesReverse.TryGetValue(type, out typeName)) return typeName; // Look for aliased namespace. if (_namespaceAliasHelper.TryGetAliasedTypeName(type, out typeName)) return typeName; // Fallback to full type name. string typeNamespace = type.Namespace; if (!string.IsNullOrEmpty(typeNamespace)) typeName = typeNamespace + "."; typeName += GetTypeName(type); return typeName; } /// /// Returns the name of the type, without the namespace. /// For generic types, we add the type parameters in square brackets. /// i.e. List<int> becomes List[int] /// internal string GetTypeName(Type type) { if (type.IsGenericType) { string typeName = type.Name; int genericBacktickIndex = typeName.IndexOf("`"); if (genericBacktickIndex >= 0) typeName = typeName.Substring(0, genericBacktickIndex); string result = typeName + "["; result += string.Join(",", type.GetGenericArguments().Select(GetFullTypeName)); result += "]"; return result; } if (type.IsArray) return GetTypeName(type.GetElementType()) + "[]"; if (type.IsNested) return type.DeclaringType.Name + "+" + type.Name; return type.Name; } internal bool AlreadyScanned(object value) { if (_scannedObjects.Contains(value)) return true; _scannedObjects.Add(value); return false; } internal bool HasTypeAlias(Type type) { return _typeAliasesReverse.ContainsKey(type); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/IntermediateWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { public sealed class IntermediateWriter { private readonly Stack _currentObjectStack; private readonly Dictionary _sharedResources; private readonly Dictionary _externalReferences; private readonly string _filePath; internal IntermediateWriter(IntermediateSerializer serializer, XmlWriter xmlWriter, string filePath) { Serializer = serializer; Xml = xmlWriter; _filePath = filePath; _currentObjectStack = new Stack(); _sharedResources = new Dictionary(); _externalReferences = new Dictionary(); } public XmlWriter Xml { get; private set; } public IntermediateSerializer Serializer { get; private set; } public void WriteExternalReference(ExternalReference value) { ExternalReference externalReference; if (!_externalReferences.TryGetValue(value, out externalReference)) _externalReferences.Add(value, externalReference = new ExternalReference { ID = "#External" + (_externalReferences.Count + 1), TargetType = typeof(T).FullName, FileName = MakeRelativePath(value.Filename) }); Xml.WriteElementString("Reference", externalReference.ID); } private string MakeRelativePath(string path) { var fullReferencePath = Path.GetFullPath(Path.GetDirectoryName(_filePath)) + Path.DirectorySeparatorChar; var fullPath = Path.GetFullPath(path); return new Uri(fullReferencePath).MakeRelativeUri(new Uri(fullPath)).ToString(); } private class ExternalReference { public string ID; public string TargetType; public string FileName; } public void WriteObject(T value, ContentSerializerAttribute format) { WriteObject(value, format, Serializer.GetTypeSerializer(typeof(T))); } public void WriteObject(T value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer) { WriteObjectInternal(value, format, typeSerializer, typeof(T)); } internal void WriteObjectInternal(object value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer, Type declaredType) { if (format.Optional && (value == null || typeSerializer.ObjectIsEmpty(value))) return; var isReferenceObject = false; if (value != null && !typeSerializer.TargetType.IsValueType) { if (_currentObjectStack.Contains(value)) throw new InvalidOperationException("Cyclic reference found during serialization. You may be missing a [ContentSerializer(SharedResource=true)] attribute."); _currentObjectStack.Push(value); isReferenceObject = true; } if (!format.FlattenContent) { Xml.WriteStartElement(format.ElementName); if (value == null) { if (!format.AllowNull) throw new InvalidOperationException(string.Format("Element {0} cannot be null.", format.ElementName)); Xml.WriteAttributeString("Null", "true"); } else if (value.GetType() != typeSerializer.TargetType && !IsNullableType(declaredType)) { Xml.WriteStartAttribute("Type"); WriteTypeName(value.GetType()); Xml.WriteEndAttribute(); typeSerializer = Serializer.GetTypeSerializer(value.GetType()); } } if (value != null && !typeSerializer.ObjectIsEmpty(value)) typeSerializer.Serialize(this, value, format); if (!format.FlattenContent) Xml.WriteEndElement(); if (isReferenceObject) _currentObjectStack.Pop(); } private static bool IsNullableType(Type type) { return Nullable.GetUnderlyingType(type) != null; } public void WriteRawObject(T value, ContentSerializerAttribute format) { WriteRawObject(value, format, Serializer.GetTypeSerializer(typeof(T))); } public void WriteRawObject(T value, ContentSerializerAttribute format, ContentTypeSerializer typeSerializer) { if (!format.FlattenContent) Xml.WriteStartElement(format.ElementName); typeSerializer.Serialize(this, value, format); if (!format.FlattenContent) Xml.WriteEndElement(); } public void WriteSharedResource(T value, ContentSerializerAttribute format) { var sharedResourceID = GetSharedResourceID(value); if (format.FlattenContent) Xml.WriteValue(sharedResourceID); else Xml.WriteElementString(format.ElementName, sharedResourceID); } private string GetSharedResourceID(object value) { if (value == null) return null; string id; if (!_sharedResources.TryGetValue(value, out id)) _sharedResources.Add(value, id = "#Resource" + (_sharedResources.Count + 1)); return id; } internal void WriteSharedResources() { if (!_sharedResources.Any()) return; Xml.WriteStartElement("Resources"); // Loop like this because we might create more shared resources while we're serializing. var writtenSharedResources = new List(); while (_sharedResources.Any(x => !writtenSharedResources.Contains(x.Value))) { var sharedResource = _sharedResources.First(x => !writtenSharedResources.Contains(x.Value)); writtenSharedResources.Add(sharedResource.Value); WriteSharedResource(sharedResource.Value, sharedResource.Key); } Xml.WriteEndElement(); } private void WriteSharedResource(string id, object sharedResource) { Xml.WriteStartElement("Resource"); Xml.WriteAttributeString("ID", id); Xml.WriteStartAttribute("Type"); WriteTypeName(sharedResource.GetType()); Xml.WriteEndAttribute(); Serializer.GetTypeSerializer(sharedResource.GetType()).Serialize(this, sharedResource, new ContentSerializerAttribute()); Xml.WriteEndElement(); } internal void WriteExternalReferences() { if (!_externalReferences.Any()) return; Xml.WriteStartElement("ExternalReferences"); foreach (var externalReference in _externalReferences.Values) { Xml.WriteStartElement("ExternalReference"); Xml.WriteAttributeString("ID", externalReference.ID); Xml.WriteAttributeString("TargetType", externalReference.TargetType); Xml.WriteValue(externalReference.FileName); Xml.WriteEndElement(); } Xml.WriteEndElement(); } public void WriteTypeName(Type type) { Xml.WriteString(Serializer.GetFullTypeName(type)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ListSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ListSerializer : ContentTypeSerializer> { private ContentTypeSerializer _itemSerializer; public ListSerializer() : base("list") { } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override void Initialize(IntermediateSerializer serializer) { _itemSerializer = serializer.GetTypeSerializer(typeof(T)); } public override bool ObjectIsEmpty(List value) { return value.Count == 0; } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, List value) { foreach (var item in value) callback(_itemSerializer, item); } protected internal override List Deserialize(IntermediateReader input, ContentSerializerAttribute format, List existingInstance) { List result = existingInstance ?? new List(); var elementSerializer = _itemSerializer as ElementSerializer; if (elementSerializer != null) elementSerializer.Deserialize(input, result); else { // Create the item serializer attribute. var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; // Read all the items. while (input.MoveToElement(itemFormat.ElementName)) { var value = input.ReadObject(itemFormat, _itemSerializer); result.Add(value); } } return result; } protected internal override void Serialize(IntermediateWriter output, List value, ContentSerializerAttribute format) { var elementSerializer = _itemSerializer as ElementSerializer; if (elementSerializer != null) elementSerializer.Serialize(output, value); else { // Create the item serializer attribute. var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; // Read all the items. foreach (var item in value) output.WriteObject(item, itemFormat, _itemSerializer); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/LongSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class LongSerializer : ElementSerializer { public LongSerializer() : base("long", 1) { } protected internal override long Deserialize(string[] inputs, ref int index) { return XmlConvert.ToInt64(inputs[index++]); } protected internal override void Serialize(long value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/MatrixSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class MatrixSerializer : ElementSerializer { public MatrixSerializer() : base("Matrix", 16) { } protected internal override Matrix Deserialize(string[] inputs, ref int index) { return new Matrix(XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Matrix value, List results) { results.Add(XmlConvert.ToString(value.M11)); results.Add(XmlConvert.ToString(value.M12)); results.Add(XmlConvert.ToString(value.M13)); results.Add(XmlConvert.ToString(value.M14)); results.Add(XmlConvert.ToString(value.M21)); results.Add(XmlConvert.ToString(value.M22)); results.Add(XmlConvert.ToString(value.M23)); results.Add(XmlConvert.ToString(value.M24)); results.Add(XmlConvert.ToString(value.M31)); results.Add(XmlConvert.ToString(value.M32)); results.Add(XmlConvert.ToString(value.M33)); results.Add(XmlConvert.ToString(value.M34)); results.Add(XmlConvert.ToString(value.M41)); results.Add(XmlConvert.ToString(value.M42)); results.Add(XmlConvert.ToString(value.M43)); results.Add(XmlConvert.ToString(value.M44)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NamedValueDictionarySerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class NamedValueDictionarySerializer : ContentTypeSerializer> { private ContentTypeSerializer _keySerializer; private ContentSerializerAttribute _keyFormat; private ContentSerializerAttribute _valueFormat; public NamedValueDictionarySerializer() : base("namedValueDictionary") { } public override bool CanDeserializeIntoExistingObject { get { return true; } } protected internal override void Initialize(IntermediateSerializer serializer) { _keySerializer = serializer.GetTypeSerializer(typeof(string)); _keyFormat = new ContentSerializerAttribute { ElementName = "Key", AllowNull = false }; _valueFormat = new ContentSerializerAttribute { ElementName = "Value", AllowNull = typeof(T).IsValueType }; } public override bool ObjectIsEmpty(NamedValueDictionary value) { return value.Count == 0; } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, NamedValueDictionary value) { foreach (var kvp in value) callback(serializer.GetTypeSerializer(typeof(T)), kvp.Value); } protected internal override NamedValueDictionary Deserialize(IntermediateReader input, ContentSerializerAttribute format, NamedValueDictionary existingInstance) { var result = existingInstance ?? new NamedValueDictionary(); var valueSerializer = input.Serializer.GetTypeSerializer(result.DefaultSerializerType); while (input.MoveToElement(format.CollectionItemName)) { input.Xml.ReadStartElement(); var key = input.ReadObject(_keyFormat, _keySerializer); var value = input.ReadObject(_valueFormat, valueSerializer); result.Add(key,value); input.Xml.ReadEndElement(); } return result; } protected internal override void Serialize(IntermediateWriter output, NamedValueDictionary value, ContentSerializerAttribute format) { var valueSerializer = output.Serializer.GetTypeSerializer(value.DefaultSerializerType); foreach (var kvp in value) { output.Xml.WriteStartElement(format.CollectionItemName); output.WriteObject(kvp.Key, _keyFormat, _keySerializer); output.WriteObject(kvp.Value, _valueFormat, valueSerializer); output.Xml.WriteEndElement(); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NamespaceAliasHelper.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { internal class NamespaceAliasHelper { private readonly IntermediateSerializer _serializer; /// /// Maps "My.Namespace.LongName" -> "ShortName" for type lookups. /// private Dictionary _namespaceLookupReverse; private class AliasedNamespace { public string Alias; public string TypePrefix; } public NamespaceAliasHelper(IntermediateSerializer serializer) { _serializer = serializer; } public void WriteNamespaces(XmlWriter writer, T value) { // Maps "My.Namespace.LongName" -> "ShortName" for type lookups. _namespaceLookupReverse = new Dictionary(); // Get all namespaces of types used by "value" or its children. var childNamespaces = GetAllUsedNamespaces(value).Distinct().ToList(); // Do first pass to determine what our aliases are. We do this on a sorted // list of namespaces so that more-nested namespaces will be processed last, // by which time we will have already created the aliases for parent namespaces. var sortedChildNamespaces = new List(childNamespaces); sortedChildNamespaces.Sort(); var tempAliases = new Dictionary(); foreach (var childNamespace in sortedChildNamespaces) { var alias = FindAlias(tempAliases, childNamespace); if (alias != null) tempAliases.Add(childNamespace, alias); } // Do second pass on the namespaces as they were originally ordered, to match XNA. foreach (var childNamespace in childNamespaces) { AliasedNamespace alias; if (tempAliases.TryGetValue(childNamespace, out alias)) _namespaceLookupReverse.Add(childNamespace, alias); } foreach (var kvp in _namespaceLookupReverse) { if (!string.IsNullOrEmpty(kvp.Value.TypePrefix)) continue; writer.WriteAttributeString("xmlns", kvp.Value.Alias, null, kvp.Key); } } private IEnumerable GetAllUsedNamespaces(T value) { var result = new List(); ContentTypeSerializer.ChildCallback onScanChild = (contentTypeSerializer, child) => { if (child == null) return; var childType = child.GetType(); if (contentTypeSerializer.TargetType == childType) return; if (contentTypeSerializer.TargetType.IsGenericType && contentTypeSerializer.TargetType.GetGenericTypeDefinition() == typeof(Nullable<>) && contentTypeSerializer.TargetType.GetGenericArguments()[0] == childType) return; if (_serializer.HasTypeAlias(childType)) return; var childNamespace = childType.Namespace; if (string.IsNullOrEmpty(childNamespace)) return; result.Add(childNamespace); }; // Force top-level object type to be included. onScanChild(_serializer.GetTypeSerializer(typeof(object)), value); // Scan child objects. var serializer = _serializer.GetTypeSerializer(typeof(T)); serializer.ScanChildren(_serializer, onScanChild, value); return result; } private static AliasedNamespace FindAlias(Dictionary aliases, string childNamespace) { if (string.IsNullOrEmpty(childNamespace)) return null; // If there isn't yet an alias for the last part of the namespace, use that. var alias = childNamespace.Substring(childNamespace.LastIndexOf('.') + 1); if (aliases.All(x => x.Value.Alias != alias)) return new AliasedNamespace { Alias = alias, TypePrefix = string.Empty }; // Otherwise, find the longest parent namespace, and use that, with a TypePrefix to make // this namespace relative to that one. if (aliases.Any(x => childNamespace.StartsWith(x.Key))) { string longestParentNamespace = string.Empty; foreach (var kvp in aliases.Where(x => string.IsNullOrEmpty(x.Value.TypePrefix))) { if (childNamespace.StartsWith(kvp.Key) && kvp.Key.Length > longestParentNamespace.Length) longestParentNamespace = kvp.Key; } return new AliasedNamespace { Alias = aliases[longestParentNamespace].Alias, TypePrefix = GetRelativeNamespace(longestParentNamespace, childNamespace) + "." }; } return null; } /// /// Returns just the portion relative to . /// For example, given namespaceParent=Foo.Bar and @namespace=Foo.Bar.Baz, will return Baz. /// private static string GetRelativeNamespace(string namespaceParent, string @namespace) { if (@namespace.StartsWith(namespaceParent)) return @namespace.Substring(namespaceParent.Length + 1); throw new InvalidOperationException(); } public bool TryGetAliasedTypeName(Type type, out string typeName) { if (!string.IsNullOrEmpty(type.Namespace)) { AliasedNamespace namespaceAlias; if (_namespaceLookupReverse.TryGetValue(type.Namespace, out namespaceAlias)) { typeName = namespaceAlias.Alias + ":" + namespaceAlias.TypePrefix + _serializer.GetTypeName(type); return true; } } typeName = null; return false; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NonGenericIListSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { class NonGenericIListSerializer : ContentTypeSerializer { public NonGenericIListSerializer(Type targetType) : base(targetType, targetType.Name) { } public override bool CanDeserializeIntoExistingObject { get { return true; } } public override bool ObjectIsEmpty(object value) { return ((IList) value).Count == 0; } protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance) { var result = (IList) (existingInstance ?? Activator.CreateInstance(TargetType)); // Create the item serializer attribute. var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; // Read all the items. while (input.MoveToElement(itemFormat.ElementName)) { var value = input.ReadObject(itemFormat); result.Add(value); } return result; } protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format) { // Create the item serializer attribute. var itemFormat = new ContentSerializerAttribute(); itemFormat.ElementName = format.CollectionItemName; // Read all the items. foreach (var item in (IList) value) output.WriteObject(item, itemFormat); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/NullableSerializer.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class NullableSerializer : ContentTypeSerializer where T : struct { private ContentTypeSerializer _serializer; private ContentSerializerAttribute _format; protected internal override void Initialize(IntermediateSerializer serializer) { _serializer = serializer.GetTypeSerializer(typeof(T)); _format = new ContentSerializerAttribute { FlattenContent = true }; } protected internal override T? Deserialize(IntermediateReader input, ContentSerializerAttribute format, T? existingInstance) { return input.ReadRawObject(_format, _serializer); } protected internal override void Serialize(IntermediateWriter output, T? value, ContentSerializerAttribute format) { output.WriteRawObject(value.Value, _format, _serializer); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PackedElementsHelper.cs ================================================ using System; using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { internal static class PackedElementsHelper { private static readonly char[] _seperators = { ' ', '\t', '\n' }; private const string _writeSeperator = " "; internal static string[] ReadElements(IntermediateReader input) { if (input.Xml.IsEmptyElement) return new string[0]; string str = string.Empty; while (input.Xml.NodeType != XmlNodeType.EndElement) { if (input.Xml.NodeType == XmlNodeType.Comment) input.Xml.Read(); else str += input.Xml.ReadString(); } // Special case for char ' ' if (str.Length > 0 && str.Trim() == string.Empty) return new string[] { str }; var elements = str.Split(_seperators, StringSplitOptions.RemoveEmptyEntries); if (elements.Length == 1 && string.IsNullOrEmpty(elements[0])) return new string[0]; return elements; } public static string JoinElements(IEnumerable elements) { return string.Join(_writeSeperator, elements); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PlaneSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class PlaneSerializer : ElementSerializer { public PlaneSerializer() : base("Plane", 4) { } protected internal override Plane Deserialize(string[] inputs, ref int index) { return new Plane( XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Plane value, List results) { results.Add(XmlConvert.ToString(value.Normal.X)); results.Add(XmlConvert.ToString(value.Normal.Y)); results.Add(XmlConvert.ToString(value.Normal.Z)); results.Add(XmlConvert.ToString(value.D)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/PointSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class PointSerializer : ElementSerializer { public PointSerializer() : base("Point", 2) { } protected internal override Point Deserialize(string[] inputs, ref int index) { return new Point( XmlConvert.ToInt32(inputs[index++]), XmlConvert.ToInt32(inputs[index++])); } protected internal override void Serialize(Point value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/QuaternionSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class QuaternionSerializer : ElementSerializer { public QuaternionSerializer() : base("Quaternion", 4) { } protected internal override Quaternion Deserialize(string[] inputs, ref int index) { return new Quaternion( XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Quaternion value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); results.Add(XmlConvert.ToString(value.Z)); results.Add(XmlConvert.ToString(value.W)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/RectangleSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class RectangleSerializer : ElementSerializer { public RectangleSerializer() : base("Rectangle", 4) { } protected internal override Rectangle Deserialize(string[] inputs, ref int index) { return new Rectangle( XmlConvert.ToInt32(inputs[index++]), XmlConvert.ToInt32(inputs[index++]), XmlConvert.ToInt32(inputs[index++]), XmlConvert.ToInt32(inputs[index++])); } protected internal override void Serialize(Rectangle value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); results.Add(XmlConvert.ToString(value.Width)); results.Add(XmlConvert.ToString(value.Height)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ReflectiveSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Xml; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { internal class ReflectiveSerializer : ContentTypeSerializer { const BindingFlags _bindingFlags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; private struct ElementInfo { public ContentSerializerAttribute Attribute; public ContentTypeSerializer Serializer; public Action Setter; public Func Getter; }; private readonly List _elements = new List(); private ContentTypeSerializer _baseSerializer; private GenericCollectionHelper _collectionHelper; private bool GetElementInfo(IntermediateSerializer serializer, MemberInfo member, out ElementInfo info) { info = new ElementInfo(); // Are we ignoring this property? if (ReflectionHelpers.GetCustomAttribute(member) != null) return false; var prop = member as PropertyInfo; var field = member as FieldInfo; var attrib = ReflectionHelpers.GetCustomAttribute(member); if (attrib != null) { // Store the attribute for later use. info.Attribute = attrib.Clone(); // Default the to member name as the element name. if (string.IsNullOrEmpty(attrib.ElementName)) info.Attribute.ElementName = member.Name; } else { // We don't have a serializer attribute, so we can // only access this member thru a public field/property. if (prop != null) { // If we don't have at least a public getter then this // property can't be serialized or deserialized in any way. if (prop.GetGetMethod() == null) return false; // If there is a setter, but it's private, then don't include this element // (although technically we could, as long as we have a serializer with // CanDeserializeIntoExistingObject=true for this property type) var setter = prop.GetSetMethod(true); if (setter != null && !setter.IsPublic) return false; // If there is no setter, and we don't have a type serializer // that can deserialize into an existing object, then we have no way // for it to be deserialized. if (setter == null && !serializer.GetTypeSerializer(prop.PropertyType).CanDeserializeIntoExistingObject) return false; // Don't serialize or deserialize indexers. if (prop.GetIndexParameters().Any()) return false; } else if (field != null) { if (!field.IsPublic) return false; } info.Attribute = new ContentSerializerAttribute(); info.Attribute.ElementName = member.Name; } if (prop != null) { info.Serializer = serializer.GetTypeSerializer(prop.PropertyType); if (prop.CanWrite) info.Setter = (o, v) => prop.SetValue(o, v, null); info.Getter = o => prop.GetValue(o, null); } else if (field != null) { info.Serializer = serializer.GetTypeSerializer(field.FieldType); info.Setter = field.SetValue; info.Getter = field.GetValue; } return true; } public ReflectiveSerializer(Type targetType) : base(targetType, string.Empty) { } protected internal override void Initialize(IntermediateSerializer serializer) { // If we have a base type then we need to deserialize it first. if (TargetType.BaseType != null) _baseSerializer = serializer.GetTypeSerializer(TargetType.BaseType); // Cache all our serializable properties. var properties = TargetType.GetProperties(_bindingFlags); foreach (var prop in properties) { ElementInfo info; if (GetElementInfo(serializer, prop, out info)) _elements.Add(info); } // Cache all our serializable fields. var fields = TargetType.GetFields(_bindingFlags); foreach (var field in fields) { ElementInfo info; if (GetElementInfo(serializer, field, out info)) _elements.Add(info); } if (GenericCollectionHelper.IsGenericCollectionType(TargetType, false)) _collectionHelper = serializer.GetCollectionHelper(TargetType); } public override bool CanDeserializeIntoExistingObject { get { return TargetType.IsClass && TargetType.BaseType != null; } } protected internal override object Deserialize(IntermediateReader input, ContentSerializerAttribute format, object existingInstance) { var result = existingInstance; if (result == null) { try { result = Activator.CreateInstance(TargetType, true); } catch (MissingMethodException e) { throw new Exception(string.Format("Couldn't create object of type {0}: {1}", TargetType.Name, e.Message), e); } } // First deserialize the base type. if (_baseSerializer != null) _baseSerializer.Deserialize(input, format, result); // Now deserialize our own elements. foreach (var info in _elements) { if (!info.Attribute.FlattenContent) { if (!input.MoveToElement(info.Attribute.ElementName)) { // If the the element was optional then we can // safely skip it and continue. if (info.Attribute.Optional) continue; // We failed to find a required element. throw input.NewInvalidContentException(null, "The Xml element `{0}` is required, but element `{1}` was found at line {2}:{3}.", info.Attribute.ElementName, input.Xml.Name, ((IXmlLineInfo)input.Xml).LineNumber, ((IXmlLineInfo)input.Xml).LinePosition); } } if (info.Attribute.SharedResource) { Action fixup = (o) => info.Setter(result, o); input.ReadSharedResource(info.Attribute, fixup); } else if (info.Setter == null) { var value = info.Getter(result); input.ReadObject(info.Attribute, info.Serializer, value); } else { var value = input.ReadObject(info.Attribute, info.Serializer); info.Setter(result, value); } } if (_collectionHelper != null) _collectionHelper.Deserialize(input, result, format); return result; } public override bool ObjectIsEmpty(object value) { if (_baseSerializer != null) return _baseSerializer.ObjectIsEmpty(value); if (_collectionHelper != null) return _collectionHelper.ObjectIsEmpty(value); return false; } protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, object value) { if (serializer.AlreadyScanned(value)) return; // First scan the base type. if (_baseSerializer != null) _baseSerializer.ScanChildren(serializer, callback, value); // Now scan our own elements. foreach (var info in _elements) { var elementValue = info.Getter(value); callback(info.Serializer, elementValue); var elementSerializer = info.Serializer; if (elementValue != null) elementSerializer = serializer.GetTypeSerializer(elementValue.GetType()); elementSerializer.ScanChildren(serializer, callback, elementValue); } if (_collectionHelper != null) _collectionHelper.ScanChildren(callback, value); } protected internal override void Serialize(IntermediateWriter output, object value, ContentSerializerAttribute format) { // First serialize the base type. if (_baseSerializer != null) _baseSerializer.Serialize(output, value, format); // Now serialize our own elements. foreach (var info in _elements) { var elementValue = info.Getter(value); if (info.Attribute.SharedResource) output.WriteSharedResource(elementValue, info.Attribute); else output.WriteObjectInternal(elementValue, info.Attribute, info.Serializer, info.Serializer.TargetType); } if (_collectionHelper != null) _collectionHelper.Serialize(output, value, format); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/SByteSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class SByteSerializer : ElementSerializer { public SByteSerializer() : base("sbyte", 1) { } protected internal override sbyte Deserialize(string[] inputs, ref int index) { return XmlConvert.ToSByte(inputs[index++]); } protected internal override void Serialize(sbyte value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ShortSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ShortSerializer : ElementSerializer { public ShortSerializer() : base("short", 1) { } protected internal override short Deserialize(string[] inputs, ref int index) { return XmlConvert.ToInt16(inputs[index++]); } protected internal override void Serialize(short value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/StringSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class StringSerializer : ContentTypeSerializer { public StringSerializer() : base("string") { } protected internal override string Deserialize(IntermediateReader input, ContentSerializerAttribute format, string existingInstance) { return input.Xml.ReadString(); } protected internal override void Serialize(IntermediateWriter output, string value, ContentSerializerAttribute format) { output.Xml.WriteString(value); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/TimeSpanSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class TimeSpanSerializer : ElementSerializer { public TimeSpanSerializer() : base("TimeSpan", 1) { } protected internal override TimeSpan Deserialize(string[] inputs, ref int index) { return XmlConvert.ToTimeSpan(inputs[index++]); } protected internal override void Serialize(TimeSpan value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/UIntSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class UIntSerializer : ElementSerializer { public UIntSerializer() : base("int", 1) { } protected internal override uint Deserialize(string[] inputs, ref int index) { return XmlConvert.ToUInt32(inputs[index++]); } protected internal override void Serialize(uint value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/ULongSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class ULongSerializer : ElementSerializer { public ULongSerializer() : base("ulong", 1) { } protected internal override ulong Deserialize(string[] inputs, ref int index) { return XmlConvert.ToUInt64(inputs[index++]); } protected internal override void Serialize(ulong value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/UShortSerializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class UShortSerializer : ElementSerializer { public UShortSerializer() : base("ushort", 1) { } protected internal override ushort Deserialize(string[] inputs, ref int index) { return XmlConvert.ToUInt16(inputs[index++]); } protected internal override void Serialize(ushort value, List results) { results.Add(XmlConvert.ToString(value)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector2Serializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class Vector2Serializer : ElementSerializer { public Vector2Serializer() : base("Vector2", 2) { } protected internal override Vector2 Deserialize(string[] inputs, ref int index) { return new Vector2( XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Vector2 value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector3Serializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class Vector3Serializer : ElementSerializer { public Vector3Serializer() : base("Vector3", 3) { } protected internal override Vector3 Deserialize(string[] inputs, ref int index) { return new Vector3( XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Vector3 value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); results.Add(XmlConvert.ToString(value.Z)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Serialization/Intermediate/Vector4Serializer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Xml; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate { [ContentTypeSerializer] class Vector4Serializer : ElementSerializer { public Vector4Serializer() : base("Vector4", 4) { } protected internal override Vector4 Deserialize(string[] inputs, ref int index) { return new Vector4( XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++]), XmlConvert.ToSingle(inputs[index++])); } protected internal override void Serialize(Vector4 value, List results) { results.Add(XmlConvert.ToString(value.X)); results.Add(XmlConvert.ToString(value.Y)); results.Add(XmlConvert.ToString(value.Z)); results.Add(XmlConvert.ToString(value.W)); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/TargetPlatform.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Identifiers for the target platform. /// [TypeConverter(typeof(TargetPlatformTypeConverter))] public enum TargetPlatform { /// /// All desktop versions of Windows using DirectX. /// Windows, /// /// Xbox 360 video game and entertainment system /// Xbox360, // MonoGame-specific platforms listed below /// /// Apple iOS-based devices (iPod Touch, iPhone, iPad) /// (MonoGame) /// iOS, /// /// Android-based devices /// (MonoGame) /// Android, /// /// All desktop versions using OpenGL. /// (MonoGame) /// DesktopGL, /// /// Apple Mac OSX-based devices (iMac, MacBook, MacBook Air, etc) /// (MonoGame) /// MacOSX, /// /// Windows Store App /// (MonoGame) /// WindowsStoreApp, /// /// Google Chrome Native Client /// (MonoGame) /// NativeClient, /// /// Raspberry Pi /// (MonoGame) /// RaspberryPi, /// /// Sony PlayStation4 /// PlayStation4, /// /// Sony PlayStation5 /// PlayStation5, /// /// Xbox One /// XboxOne, /// /// Nintendo Switch /// Switch, /// /// Blazor/WebAssembly (WebGL) /// BlazorGL, } /// /// Deserialize legacy Platforms from .MGCB files. /// internal class TargetPlatformTypeConverter : EnumConverter { public TargetPlatformTypeConverter(Type type) : base(type) { } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { try { return base.ConvertFrom(context, culture, value); } catch (FormatException fex) { // convert legacy Platforms if (value.Equals("Linux") || value.Equals("WindowsGL")) return TargetPlatform.DesktopGL; else throw fex; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/ContentExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Reflection; using System.Linq; namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities { internal static class ContentExtensions { public static FieldInfo[] GetAllFields(this Type type) { #if WINRT FieldInfo[] fields= type.GetTypeInfo().DeclaredFields.ToArray(); IEnumerable nonStaticFields = from field in fields where !field.IsStatic select field; return nonStaticFields.ToArray(); #else BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; return type.GetFields(attrs); #endif } public static PropertyInfo[] GetAllProperties(this Type type) { // Sometimes, overridden properties of abstract classes can show up even with // BindingFlags.DeclaredOnly is passed to GetProperties. Make sure that // all properties in this list are defined in this class by comparing // its get method with that of it's base class. If they're the same // Then it's an overridden property. #if WINRT PropertyInfo[] infos= type.GetTypeInfo().DeclaredProperties.ToArray(); IEnumerable nonStaticPropertyInfos = from p in infos where (p.GetMethod != null) && (!p.GetMethod.IsStatic) && (p.GetMethod == p.GetMethod.GetRuntimeBaseDefinition()) select p; return nonStaticPropertyInfos.ToArray(); #else const BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly; List allProps = type.GetProperties(attrs).ToList(); PropertyInfo[] props = allProps.FindAll(p => p.GetGetMethod(true) != null && p.GetGetMethod(true) == p.GetGetMethod(true).GetBaseDefinition()).ToArray(); return props; #endif } public static ConstructorInfo GetDefaultConstructor(this Type type) { #if WINRT TypeInfo typeInfo = type.GetTypeInfo(); ConstructorInfo ctor = typeInfo.DeclaredConstructors.FirstOrDefault(c => !c.IsStatic && c.GetParameters().Length == 0); return ctor; #else BindingFlags attrs = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; return type.GetConstructor(attrs, null, new Type[0], null); #endif } public static bool IsClass(this Type type) { #if WINRT return type.GetTypeInfo().IsClass; #else return type.IsClass; #endif } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe.cs ================================================ #region license /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { /// Unsafe LZ4 codec. internal static partial class LZ4Codec { /// Copies block of memory. /// The source. /// The destination. /// The length (in bytes). private static unsafe void BlockCopy(byte* src, byte* dst, int len) { while (len >= 8) { *(ulong*)dst = *(ulong*)src; dst += 8; src += 8; len -= 8; } if (len >= 4) { *(uint*)dst = *(uint*)src; dst += 4; src += 4; len -= 4; } if (len >= 2) { *(ushort*)dst = *(ushort*)src; dst += 2; src += 2; len -= 2; } if (len >= 1) { *dst = *src; /* d++; s++; l--; */ } } /// Copies block of memory. /// The destination. /// The length (in bytes). /// The value. private static unsafe void BlockFill(byte* dst, int len, byte val) { if (len >= 8) { ulong mask = val; mask |= mask << 8; mask |= mask << 16; mask |= mask << 32; do { *(ulong*)dst = mask; dst += 8; len -= 8; } while (len >= 8); } while (len-- > 0) *dst++ = val; } #region Encode32 /// Encodes the specified input. /// The input. /// The output. /// Length of the input. /// Length of the output. /// Number of bytes written. public static unsafe int Encode32( byte* input, byte* output, int inputLength, int outputLength) { if (inputLength < LZ4_64KLIMIT) { var hashTable = new ushort[HASH64K_TABLESIZE]; fixed (ushort* h = &hashTable[0]) { return LZ4_compress64kCtx_32(h, input, output, inputLength, outputLength); } } else { var hashTable = new byte*[HASH_TABLESIZE]; fixed (byte** h = &hashTable[0]) { return LZ4_compressCtx_32(h, input, output, inputLength, outputLength); } } } /// Encodes the specified input. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Number of bytes written. public static unsafe int Encode32( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) { CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); if (outputLength == 0) return 0; fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { return Encode32(inputPtr, outputPtr, inputLength, outputLength); } } /// Encodes the specified input. /// The input. /// The input offset. /// Length of the input. /// Compressed buffer. public static byte[] Encode32(byte[] input, int inputOffset, int inputLength) { if (inputLength < 0) inputLength = input.Length - inputOffset; if (input == null) throw new ArgumentNullException("input"); if (inputOffset < 0 || inputOffset + inputLength > input.Length) throw new ArgumentException("inputOffset and inputLength are invalid for given input"); var result = new byte[MaximumOutputLength(inputLength)]; var length = Encode32(input, inputOffset, inputLength, result, 0, result.Length); if (length != result.Length) { if (length < 0) throw new InvalidOperationException("Compression has been corrupted"); var buffer = new byte[length]; Buffer.BlockCopy(result, 0, buffer, 0, length); return buffer; } return result; } #endregion #region Decode32 /// Decodes the specified input. /// The input. /// Length of the input. /// The output. /// Length of the output. /// Set it to true if output length is known. /// Number of bytes written. public static unsafe int Decode32( byte* input, int inputLength, byte* output, int outputLength, bool knownOutputLength) { if (knownOutputLength) { var length = LZ4_uncompress_32(input, output, outputLength); if (length != inputLength) throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); return outputLength; } else { var length = LZ4_uncompress_unknownOutputSize_32(input, output, inputLength, outputLength); if (length < 0) throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); return length; } } /// Decodes the specified input. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Set it to true if output length is known. /// Number of bytes written. public static unsafe int Decode32( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength, bool knownOutputLength) { CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); if (outputLength == 0) return 0; fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { return Decode32(inputPtr, inputLength, outputPtr, outputLength, knownOutputLength); } } /// Decodes the specified input. /// The input. /// The input offset. /// Length of the input. /// Length of the output. /// Decompressed buffer. public static byte[] Decode32(byte[] input, int inputOffset, int inputLength, int outputLength) { if (inputLength < 0) inputLength = input.Length - inputOffset; if (input == null) throw new ArgumentNullException("input"); if (inputOffset < 0 || inputOffset + inputLength > input.Length) throw new ArgumentException("inputOffset and inputLength are invalid for given input"); var result = new byte[outputLength]; var length = Decode32(input, inputOffset, inputLength, result, 0, outputLength, true); if (length != outputLength) throw new ArgumentException("outputLength is not valid"); return result; } #endregion #region Encode64 /// Encodes the specified input. /// The input. /// The output. /// Length of the input. /// Length of the output. /// Number of bytes written. public static unsafe int Encode64( byte* input, byte* output, int inputLength, int outputLength) { if (inputLength < LZ4_64KLIMIT) { var hashTable = new ushort[HASH64K_TABLESIZE]; fixed (ushort* h = &hashTable[0]) { return LZ4_compress64kCtx_64(h, input, output, inputLength, outputLength); } } else { var hashTable = new uint[HASH_TABLESIZE]; fixed (uint* h = &hashTable[0]) { return LZ4_compressCtx_64(h, input, output, inputLength, outputLength); } } } /// Encodes the specified input. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Number of bytes written. public static unsafe int Encode64( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) { CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); if (outputLength == 0) return 0; fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { return Encode64(inputPtr, outputPtr, inputLength, outputLength); } } /// Encodes the specified input. /// The input. /// The input offset. /// Length of the input. /// Compressed buffer. public static byte[] Encode64(byte[] input, int inputOffset, int inputLength) { if (inputLength < 0) inputLength = input.Length - inputOffset; if (input == null) throw new ArgumentNullException("input"); if (inputOffset < 0 || inputOffset + inputLength > input.Length) throw new ArgumentException("inputOffset and inputLength are invalid for given input"); var result = new byte[MaximumOutputLength(inputLength)]; var length = Encode64(input, inputOffset, inputLength, result, 0, result.Length); if (length != result.Length) { if (length < 0) throw new InvalidOperationException("Compression has been corrupted"); var buffer = new byte[length]; Buffer.BlockCopy(result, 0, buffer, 0, length); return buffer; } return result; } #endregion #region Decode64 /// Decodes the specified input. /// The input. /// Length of the input. /// The output. /// Length of the output. /// Set it to true if output length is known. /// Number of bytes written. public static unsafe int Decode64( byte* input, int inputLength, byte* output, int outputLength, bool knownOutputLength) { if (knownOutputLength) { var length = LZ4_uncompress_64(input, output, outputLength); if (length != inputLength) throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); return outputLength; } else { var length = LZ4_uncompress_unknownOutputSize_64(input, output, inputLength, outputLength); if (length < 0) throw new ArgumentException("LZ4 block is corrupted, or invalid length has been given."); return length; } } /// Decode64s the specified input. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Set it to true if output length is known. /// Number of bytes written. public static unsafe int Decode64( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength, bool knownOutputLength) { CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); if (outputLength == 0) return 0; fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { return Decode64(inputPtr, inputLength, outputPtr, outputLength, knownOutputLength); } } /// Decode64s the specified input. /// The input. /// The input offset. /// Length of the input. /// Length of the output. /// Decompressed buffer. public static byte[] Decode64(byte[] input, int inputOffset, int inputLength, int outputLength) { if (inputLength < 0) inputLength = input.Length - inputOffset; if (input == null) throw new ArgumentNullException("input"); if (inputOffset < 0 || inputOffset + inputLength > input.Length) throw new ArgumentException("inputOffset and inputLength are invalid for given input"); var result = new byte[outputLength]; var length = Decode64(input, inputOffset, inputLength, result, 0, outputLength, true); if (length != outputLength) throw new ArgumentException("outputLength is not valid"); return result; } #endregion #region HC utilities // ReSharper disable InconsistentNaming private unsafe class LZ4HC_Data_Structure { public byte* src_base; public byte* nextToUpdate; public int[] hashTable; public ushort[] chainTable; }; // ReSharper restore InconsistentNaming private static unsafe LZ4HC_Data_Structure LZ4HC_Create(byte* src) { var hc4 = new LZ4HC_Data_Structure { hashTable = new int[HASHHC_TABLESIZE], chainTable = new ushort[MAXD] }; fixed (ushort* ct = &hc4.chainTable[0]) { BlockFill((byte*)ct, MAXD * sizeof(ushort), 0xFF); } hc4.src_base = src; hc4.nextToUpdate = src + 1; return hc4; } #endregion #region Encode32HC private static unsafe int LZ4_compressHC_32(byte* input, byte* output, int inputLength, int outputLength) { return LZ4_compressHCCtx_32(LZ4HC_Create(input), input, output, inputLength, outputLength); } /// Encodes the specified input using HC codec. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Number of bytes written. NOTE: when output buffer is too small it returns negative value. public static unsafe int Encode32HC( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) { if (inputLength == 0) return 0; CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { var length = LZ4_compressHC_32(inputPtr, outputPtr, inputLength, outputLength); return length <= 0 ? -1 : length; } } /// Encodes the specified input using HC codec. /// The input. /// The input offset. /// Length of the input. /// Buffer with compressed data (NOTE: it can be bigger than input). public static byte[] Encode32HC( byte[] input, int inputOffset, int inputLength) { if (inputLength == 0) return new byte[0]; var outputLength = MaximumOutputLength(inputLength); var result = new byte[outputLength]; var length = Encode32HC(input, inputOffset, inputLength, result, 0, outputLength); if (length < 0) throw new ArgumentException("Provided data seems to be corrupted."); if (length != outputLength) { var buffer = new byte[length]; Buffer.BlockCopy(result, 0, buffer, 0, length); result = buffer; } return result; } #endregion #region Encode64HC private static unsafe int LZ4_compressHC_64(byte* input, byte* output, int inputLength, int outputLength) { return LZ4_compressHCCtx_64(LZ4HC_Create(input), input, output, inputLength, outputLength); } /// Encodes the specified input using HC codec. /// The input. /// The input offset. /// Length of the input. /// The output. /// The output offset. /// Length of the output. /// Number of bytes written. NOTE: when output buffer is too small it returns negative value. public static unsafe int Encode64HC( byte[] input, int inputOffset, int inputLength, byte[] output, int outputOffset, int outputLength) { if (inputLength == 0) return 0; CheckArguments( input, inputOffset, ref inputLength, output, outputOffset, ref outputLength); fixed (byte* inputPtr = &input[inputOffset]) fixed (byte* outputPtr = &output[outputOffset]) { var length = LZ4_compressHC_64(inputPtr, outputPtr, inputLength, outputLength); return length <= 0 ? -1 : length; } } /// Encodes the specified input using HC codec. /// The input. /// The input offset. /// Length of the input. /// Buffer with compressed data (NOTE: it can be bigger than input). public static byte[] Encode64HC( byte[] input, int inputOffset, int inputLength) { if (inputLength == 0) return new byte[0]; var outputLength = MaximumOutputLength(inputLength); var result = new byte[outputLength]; var length = Encode64HC(input, inputOffset, inputLength, result, 0, outputLength); if (length < 0) throw new ArgumentException("Provided data seems to be corrupted."); if (length != outputLength) { var buffer = new byte[length]; Buffer.BlockCopy(result, 0, buffer, 0, length); result = buffer; } return result; } #endregion } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe32.Dirty.cs ================================================ #region LZ4 original /* LZ4 - Fast LZ compression algorithm Copyright (C) 2011-2012, Yann Collet. BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - LZ4 source repository : http://code.google.com/p/lz4/ */ #endregion #region LZ4 port /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion // ReSharper disable InconsistentNaming // ReSharper disable TooWideLocalVariableScope // ReSharper disable JoinDeclarationAndInitializer namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { internal static partial class LZ4Codec { #region LZ4_compressCtx_32 private static unsafe int LZ4_compressCtx_32( byte** hash_table, byte* src, byte* dst, int src_len, int dst_maxlen) { byte* _p; fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) { // r93 var src_p = src; const int src_base = 0; var src_anchor = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var dst_p = dst; var dst_end = dst_p + dst_maxlen; var src_LASTLITERALS = src_end - LASTLITERALS; var src_LASTLITERALS_1 = src_LASTLITERALS - 1; var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); int length; uint h, h_fwd; // Init if (src_len < MINLENGTH) goto _last_literals; // First Byte hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (src_p - src_base); src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); // Main Loop while (true) { var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; var src_p_fwd = src_p; byte* xxx_ref; byte* xxx_token; // Find a match do { h = h_fwd; var step = findMatchAttempts++ >> SKIPSTRENGTH; src_p = src_p_fwd; src_p_fwd = src_p + step; if (src_p_fwd > src_mflimit) goto _last_literals; h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); xxx_ref = src_base + hash_table[h]; hash_table[h] = (src_p - src_base); } while ((xxx_ref < src_p - MAX_DISTANCE) || ((*(uint*)(xxx_ref)) != (*(uint*)(src_p)))); // Catch up while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) { src_p--; xxx_ref--; } // Encode Literal length length = (int)(src_p - src_anchor); xxx_token = dst_p++; if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit if (length >= RUN_MASK) { var len = length - RUN_MASK; *xxx_token = (RUN_MASK << ML_BITS); if (len > 254) { do { *dst_p++ = 255; len -= 255; } while (len > 254); *dst_p++ = (byte)len; BlockCopy(src_anchor, dst_p, (length)); dst_p += length; goto _next_match; } *dst_p++ = (byte)len; } else { *xxx_token = (byte)(length << ML_BITS); } // Copy Literals _p = dst_p + (length); do { *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; } while (dst_p < _p); dst_p = _p; _next_match: // Encode Offset *(ushort*)dst_p = (ushort)(src_p - xxx_ref); dst_p += 2; // Start Counting src_p += MINMATCH; xxx_ref += MINMATCH; // MinMatch already verified src_anchor = src_p; while (src_p < src_LASTLITERALS_STEPSIZE_1) { var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); if (diff == 0) { src_p += STEPSIZE_32; xxx_ref += STEPSIZE_32; continue; } src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; goto _endCount; } if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) { src_p += 2; xxx_ref += 2; } if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; _endCount: // Encode MatchLength length = (int)(src_p - src_anchor); if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit if (length >= ML_MASK) { *xxx_token += ML_MASK; length -= ML_MASK; for (; length > 509; length -= 510) { *dst_p++ = 255; *dst_p++ = 255; } if (length > 254) { length -= 255; *dst_p++ = 255; } *dst_p++ = (byte)length; } else { *xxx_token += (byte)length; } // Test end of chunk if (src_p > src_mflimit) { src_anchor = src_p; break; } // Fill table hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (src_p - 2 - src_base); // Test next position h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); xxx_ref = src_base + hash_table[h]; hash_table[h] = (src_p - src_base); if ((xxx_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(xxx_ref)) == (*(uint*)(src_p)))) { xxx_token = dst_p++; *xxx_token = 0; goto _next_match; } // Prepare next loop src_anchor = src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); } _last_literals: // Encode Last Literals { var lastRun = (int)(src_end - src_anchor); if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else *dst_p++ = (byte)(lastRun << ML_BITS); BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; } // End return (int)((dst_p) - dst); } } #endregion #region LZ4_compress64kCtx_32 private static unsafe int LZ4_compress64kCtx_32( ushort* hash_table, byte* src, byte* dst, int src_len, int dst_maxlen) { byte* _p; fixed (int* debruijn32 = &DEBRUIJN_TABLE_32[0]) { // r93 var src_p = src; var src_anchor = src_p; var src_base = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var dst_p = dst; var dst_end = dst_p + dst_maxlen; var src_LASTLITERALS = src_end - LASTLITERALS; var src_LASTLITERALS_1 = src_LASTLITERALS - 1; var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_32 - 1); var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); int len, length; uint h, h_fwd; // Init if (src_len < MINLENGTH) goto _last_literals; // First Byte src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); // Main Loop while (true) { var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; var src_p_fwd = src_p; byte* xxx_ref; byte* xxx_token; // Find a match do { h = h_fwd; var step = findMatchAttempts++ >> SKIPSTRENGTH; src_p = src_p_fwd; src_p_fwd = src_p + step; if (src_p_fwd > src_mflimit) goto _last_literals; h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); xxx_ref = src_base + hash_table[h]; hash_table[h] = (ushort)(src_p - src_base); } while ((*(uint*)(xxx_ref)) != (*(uint*)(src_p))); // Catch up while ((src_p > src_anchor) && (xxx_ref > src) && (src_p[-1] == xxx_ref[-1])) { src_p--; xxx_ref--; } // Encode Literal length length = (int)(src_p - src_anchor); xxx_token = dst_p++; if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit if (length >= RUN_MASK) { len = length - RUN_MASK; *xxx_token = (RUN_MASK << ML_BITS); if (len > 254) { do { *dst_p++ = 255; len -= 255; } while (len > 254); *dst_p++ = (byte)len; BlockCopy(src_anchor, dst_p, (length)); dst_p += length; goto _next_match; } *dst_p++ = (byte)len; } else { *xxx_token = (byte)(length << ML_BITS); } // Copy Literals _p = dst_p + (length); do { *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; } while (dst_p < _p); dst_p = _p; _next_match: // Encode Offset *(ushort*)dst_p = (ushort)(src_p - xxx_ref); dst_p += 2; // Start Counting src_p += MINMATCH; xxx_ref += MINMATCH; // MinMatch verified src_anchor = src_p; while (src_p < src_LASTLITERALS_STEPSIZE_1) { var diff = (*(int*)(xxx_ref)) ^ (*(int*)(src_p)); if (diff == 0) { src_p += STEPSIZE_32; xxx_ref += STEPSIZE_32; continue; } src_p += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; goto _endCount; } if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(xxx_ref)) == (*(ushort*)(src_p)))) { src_p += 2; xxx_ref += 2; } if ((src_p < src_LASTLITERALS) && (*xxx_ref == *src_p)) src_p++; _endCount: // Encode MatchLength len = (int)(src_p - src_anchor); if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit if (len >= ML_MASK) { *xxx_token += ML_MASK; len -= ML_MASK; for (; len > 509; len -= 510) { *dst_p++ = 255; *dst_p++ = 255; } if (len > 254) { len -= 255; *dst_p++ = 255; } *dst_p++ = (byte)len; } else *xxx_token += (byte)len; // Test end of chunk if (src_p > src_mflimit) { src_anchor = src_p; break; } // Fill table hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); // Test next position h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); xxx_ref = src_base + hash_table[h]; hash_table[h] = (ushort)(src_p - src_base); if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) { xxx_token = dst_p++; *xxx_token = 0; goto _next_match; } // Prepare next loop src_anchor = src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); } _last_literals: // Encode Last Literals { var lastRun = (int)(src_end - src_anchor); if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else *dst_p++ = (byte)(lastRun << ML_BITS); BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; } // End return (int)((dst_p) - dst); } } #endregion #region LZ4_uncompress_32 private static unsafe int LZ4_uncompress_32( byte* src, byte* dst, int dst_len) { fixed (int* dec32table = &DECODER_TABLE_32[0]) { // r93 var src_p = src; byte* xxx_ref; var dst_p = dst; var dst_end = dst_p + dst_len; byte* dst_cpy; var dst_LASTLITERALS = dst_end - LASTLITERALS; var dst_COPYLENGTH = dst_end - COPYLENGTH; var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_32 - 4); uint xxx_token; // Main Loop while (true) { int length; // get runlength xxx_token = *src_p++; if ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK) { int len; for (; (len = *src_p++) == 255; length += 255) { /* do nothing */ } length += len; } // copy literals dst_cpy = dst_p + length; if (dst_cpy > dst_COPYLENGTH) { if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals BlockCopy(src_p, dst_p, (length)); src_p += length; break; // EOF } do { *(uint*)dst_p = *(uint*)src_p; dst_p += 4; src_p += 4; *(uint*)dst_p = *(uint*)src_p; dst_p += 4; src_p += 4; } while (dst_p < dst_cpy); src_p -= (dst_p - dst_cpy); dst_p = dst_cpy; // get offset xxx_ref = (dst_cpy) - (*(ushort*)(src_p)); src_p += 2; if (xxx_ref < dst) goto _output_error; // Error : offset outside destination buffer // get matchlength if ((length = (int)(xxx_token & ML_MASK)) == ML_MASK) { for (; *src_p == 255; length += 255) src_p++; length += *src_p++; } // copy repeated sequence if ((dst_p - xxx_ref) < STEPSIZE_32) { const int dec64 = 0; dst_p[0] = xxx_ref[0]; dst_p[1] = xxx_ref[1]; dst_p[2] = xxx_ref[2]; dst_p[3] = xxx_ref[3]; dst_p += 4; xxx_ref += 4; xxx_ref -= dec32table[dst_p - xxx_ref]; (*(uint*)(dst_p)) = (*(uint*)(xxx_ref)); dst_p += STEPSIZE_32 - 4; xxx_ref -= dec64; } else { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } dst_cpy = dst_p + length - (STEPSIZE_32 - 4); if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) { if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals { do { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } while (dst_p < dst_COPYLENGTH); } while (dst_p < dst_cpy) *dst_p++ = *xxx_ref++; dst_p = dst_cpy; continue; } do { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } while (dst_p < dst_cpy); dst_p = dst_cpy; // correction } // end of decoding return (int)((src_p) - src); // write overflow error detected _output_error: return (int)(-((src_p) - src)); } } #endregion #region LZ4_uncompress_unknownOutputSize_32 private static unsafe int LZ4_uncompress_unknownOutputSize_32( byte* src, byte* dst, int src_len, int dst_maxlen) { fixed (int* dec32table = &DECODER_TABLE_32[0]) { // r93 var src_p = src; var src_end = src_p + src_len; byte* xxx_ref; var dst_p = dst; var dst_end = dst_p + dst_maxlen; byte* dst_cpy; var src_LASTLITERALS_3 = (src_end - (2 + 1 + LASTLITERALS)); var src_LASTLITERALS_1 = (src_end - (LASTLITERALS + 1)); var dst_COPYLENGTH = (dst_end - COPYLENGTH); var dst_COPYLENGTH_STEPSIZE_4 = (dst_end - (COPYLENGTH + (STEPSIZE_32 - 4))); var dst_LASTLITERALS = (dst_end - LASTLITERALS); var dst_MFLIMIT = (dst_end - MFLIMIT); // Special case if (src_p == src_end) goto _output_error; // A correctly formed null-compressed LZ4 must have at least one byte (token=0) // Main Loop while (true) { uint xxx_token; int length; // get runlength xxx_token = *src_p++; if ((length = (int)(xxx_token >> ML_BITS)) == RUN_MASK) { var s = 255; while ((src_p < src_end) && (s == 255)) { s = *src_p++; length += s; } } // copy literals dst_cpy = dst_p + length; if ((dst_cpy > dst_MFLIMIT) || (src_p + length > src_LASTLITERALS_3)) { if (dst_cpy > dst_end) goto _output_error; // Error : writes beyond output buffer if (src_p + length != src_end) goto _output_error; // Error : LZ4 format requires to consume all input at this stage (no match within the last 11 bytes, and at least 8 remaining input bytes for another match+literals) BlockCopy(src_p, dst_p, (length)); dst_p += length; break; // Necessarily EOF, due to parsing restrictions } do { *(uint*)dst_p = *(uint*)src_p; dst_p += 4; src_p += 4; *(uint*)dst_p = *(uint*)src_p; dst_p += 4; src_p += 4; } while (dst_p < dst_cpy); src_p -= (dst_p - dst_cpy); dst_p = dst_cpy; // get offset xxx_ref = (dst_cpy) - (*(ushort*)(src_p)); src_p += 2; if (xxx_ref < dst) goto _output_error; // Error : offset outside of destination buffer // get matchlength if ((length = (int)(xxx_token & ML_MASK)) == ML_MASK) { while (src_p < src_LASTLITERALS_1) // Error : a minimum input bytes must remain for LASTLITERALS + token { int s = *src_p++; length += s; if (s == 255) continue; break; } } // copy repeated sequence if (dst_p - xxx_ref < STEPSIZE_32) { const int dec64 = 0; dst_p[0] = xxx_ref[0]; dst_p[1] = xxx_ref[1]; dst_p[2] = xxx_ref[2]; dst_p[3] = xxx_ref[3]; dst_p += 4; xxx_ref += 4; xxx_ref -= dec32table[dst_p - xxx_ref]; (*(uint*)(dst_p)) = (*(uint*)(xxx_ref)); dst_p += STEPSIZE_32 - 4; xxx_ref -= dec64; } else { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } dst_cpy = dst_p + length - (STEPSIZE_32 - 4); if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) { if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals { do { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } while (dst_p < dst_COPYLENGTH); } while (dst_p < dst_cpy) *dst_p++ = *xxx_ref++; dst_p = dst_cpy; continue; } do { *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; *(uint*)dst_p = *(uint*)xxx_ref; dst_p += 4; xxx_ref += 4; } while (dst_p < dst_cpy); dst_p = dst_cpy; // correction } // end of decoding return (int)((dst_p) - dst); // write overflow error detected _output_error: return (int)(-((src_p) - src)); } } #endregion } } // ReSharper restore JoinDeclarationAndInitializer // ReSharper restore TooWideLocalVariableScope // ReSharper restore InconsistentNaming ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe32HC.Dirty.cs ================================================ #region LZ4 original /* LZ4 - Fast LZ compression algorithm Copyright (C) 2011-2012, Yann Collet. BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - LZ4 source repository : http://code.google.com/p/lz4/ */ #endregion #region LZ4 port /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion // ReSharper disable InconsistentNaming namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { internal static partial class LZ4Codec { // Update chains up to ip (excluded) private static unsafe void LZ4HC_Insert_32(LZ4HC_Data_Structure hc4, byte* src_p) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) { var src_base = hc4.src_base; while (hc4.nextToUpdate < src_p) { var p = hc4.nextToUpdate; var delta = (int)((p) - (hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base)); if (delta > MAX_DISTANCE) delta = MAX_DISTANCE; chainTable[((int)p) & MAXD_MASK] = (ushort)delta; hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(p - src_base); hc4.nextToUpdate++; } } } private static unsafe int LZ4HC_CommonLength_32(byte* p1, byte* p2, byte* src_LASTLITERALS) { fixed (int* debruijn32 = DEBRUIJN_TABLE_32) { var p1t = p1; while (p1t < src_LASTLITERALS - (STEPSIZE_32 - 1)) { var diff = (*(int*)(p2)) ^ (*(int*)(p1t)); if (diff == 0) { p1t += STEPSIZE_32; p2 += STEPSIZE_32; continue; } p1t += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; return (int)(p1t - p1); } if ((p1t < (src_LASTLITERALS - 1)) && ((*(ushort*)(p2)) == (*(ushort*)(p1t)))) { p1t += 2; p2 += 2; } if ((p1t < src_LASTLITERALS) && (*p2 == *p1t)) p1t++; return (int)(p1t - p1); } } private static unsafe int LZ4HC_InsertAndFindBestMatch_32( LZ4HC_Data_Structure hc4, byte* src_p, byte* src_LASTLITERALS, ref byte* matchpos) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) { var src_base = hc4.src_base; var nbAttempts = MAX_NB_ATTEMPTS; int repl = 0, ml = 0; ushort delta = 0; // HC4 match finder LZ4HC_Insert_32(hc4, src_p); var xxx_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base); // Detect repetitive sequences of length <= 4 if (xxx_ref >= src_p - 4) // potential repetition { if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) // confirmed { delta = (ushort)(src_p - xxx_ref); repl = ml = LZ4HC_CommonLength_32(src_p + MINMATCH, xxx_ref + MINMATCH, src_LASTLITERALS) + MINMATCH; matchpos = xxx_ref; } xxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]); } while ((xxx_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0)) { nbAttempts--; if (*(xxx_ref + ml) == *(src_p + ml)) if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) { var mlt = LZ4HC_CommonLength_32(src_p + MINMATCH, xxx_ref + MINMATCH, src_LASTLITERALS) + MINMATCH; if (mlt > ml) { ml = mlt; matchpos = xxx_ref; } } xxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]); } // Complete table if (repl != 0) { var src_ptr = src_p; var src_end = src_p + repl - (MINMATCH - 1); while (src_ptr < src_end - delta) { chainTable[((int)src_ptr) & MAXD_MASK] = delta; // Pre-Load src_ptr++; } do { chainTable[((int)src_ptr) & MAXD_MASK] = delta; hashTable[((((*(uint*)(src_ptr))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(src_ptr - src_base); // Head of chain src_ptr++; } while (src_ptr < src_end); hc4.nextToUpdate = src_end; } return ml; } } private static unsafe int LZ4HC_InsertAndGetWiderMatch_32( LZ4HC_Data_Structure hc4, byte* src_p, byte* startLimit, byte* src_LASTLITERALS, int longest, ref byte* matchpos, ref byte* startpos) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) fixed (int* debruijn32 = DEBRUIJN_TABLE_32) { var src_base = hc4.src_base; var nbAttempts = MAX_NB_ATTEMPTS; var delta = (int)(src_p - startLimit); // First Match LZ4HC_Insert_32(hc4, src_p); var xxx_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base); while ((xxx_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0)) { nbAttempts--; if (*(startLimit + longest) == *(xxx_ref - delta + longest)) { if ((*(uint*)(xxx_ref)) == (*(uint*)(src_p))) { var reft = xxx_ref + MINMATCH; var ipt = src_p + MINMATCH; var startt = src_p; while (ipt < src_LASTLITERALS - (STEPSIZE_32 - 1)) { var diff = (*(int*)(reft)) ^ (*(int*)(ipt)); if (diff == 0) { ipt += STEPSIZE_32; reft += STEPSIZE_32; continue; } ipt += debruijn32[(((uint)((diff) & -(diff)) * 0x077CB531u)) >> 27]; goto _endCount; } if ((ipt < (src_LASTLITERALS - 1)) && ((*(ushort*)(reft)) == (*(ushort*)(ipt)))) { ipt += 2; reft += 2; } if ((ipt < src_LASTLITERALS) && (*reft == *ipt)) ipt++; _endCount: reft = xxx_ref; while ((startt > startLimit) && (reft > hc4.src_base) && (startt[-1] == reft[-1])) { startt--; reft--; } if ((ipt - startt) > longest) { longest = (int)(ipt - startt); matchpos = reft; startpos = startt; } } } xxx_ref = ((xxx_ref) - chainTable[((int)xxx_ref) & MAXD_MASK]); } return longest; } } private static unsafe int LZ4_encodeSequence_32( ref byte* src_p, ref byte* dst_p, ref byte* src_anchor, int matchLength, byte* xxx_ref, byte* dst_end) { int len; // Encode Literal length var length = (int)(src_p - src_anchor); var xxx_token = (dst_p)++; if ((dst_p + length + (2 + 1 + LASTLITERALS) + (length >> 8)) > dst_end) return 1; // Check output limit if (length >= RUN_MASK) { *xxx_token = (RUN_MASK << ML_BITS); len = length - RUN_MASK; for (; len > 254; len -= 255) *(dst_p)++ = 255; *(dst_p)++ = (byte)len; } else { *xxx_token = (byte)(length << ML_BITS); } // Copy Literals var _p = dst_p + (length); do { *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; *(uint*)dst_p = *(uint*)src_anchor; dst_p += 4; src_anchor += 4; } while (dst_p < _p); dst_p = _p; // Encode Offset *(ushort*)dst_p = (ushort)(src_p - xxx_ref); dst_p += 2; // Encode MatchLength len = (matchLength - MINMATCH); if (dst_p + (1 + LASTLITERALS) + (length >> 8) > dst_end) return 1; // Check output limit if (len >= ML_MASK) { *xxx_token += ML_MASK; len -= ML_MASK; for (; len > 509; len -= 510) { *(dst_p)++ = 255; *(dst_p)++ = 255; } if (len > 254) { len -= 255; *(dst_p)++ = 255; } *(dst_p)++ = (byte)len; } else { *xxx_token += (byte)len; } // Prepare next loop src_p += matchLength; src_anchor = src_p; return 0; } private static unsafe int LZ4_compressHCCtx_32( LZ4HC_Data_Structure ctx, byte* src, byte* dst, int src_len, int dst_maxlen) { var src_p = src; var src_anchor = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var src_LASTLITERALS = (src_end - LASTLITERALS); var dst_p = dst; var dst_end = dst_p + dst_maxlen; byte* xxx_ref = null; byte* start2 = null; byte* ref2 = null; byte* start3 = null; byte* ref3 = null; src_p++; // Main Loop while (src_p < src_mflimit) { var ml = LZ4HC_InsertAndFindBestMatch_32(ctx, src_p, src_LASTLITERALS, ref xxx_ref); if (ml == 0) { src_p++; continue; } // saved, in case we would skip too much var start0 = src_p; var ref0 = xxx_ref; var ml0 = ml; _Search2: var ml2 = src_p + ml < src_mflimit ? LZ4HC_InsertAndGetWiderMatch_32(ctx, src_p + ml - 2, src_p + 1, src_LASTLITERALS, ml, ref ref2, ref start2) : ml; if (ml2 == ml) // No better match { if (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0; continue; } if (start0 < src_p) { if (start2 < src_p + ml0) // empirical { src_p = start0; xxx_ref = ref0; ml = ml0; } } // Here, start0==ip if ((start2 - src_p) < 3) // First Match too small : removed { ml = ml2; src_p = start2; xxx_ref = ref2; goto _Search2; } _Search3: // Currently we have : // ml2 > ml1, and // ip1+3 <= ip2 (usually < ip1+ml1) if ((start2 - src_p) < OPTIMAL_ML) { var new_ml = ml; if (new_ml > OPTIMAL_ML) new_ml = OPTIMAL_ML; if (src_p + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - src_p) + ml2 - MINMATCH; var correction = new_ml - (int)(start2 - src_p); if (correction > 0) { start2 += correction; ref2 += correction; ml2 -= correction; } } // Now, we have start2 = ip+new_ml, with new_ml=min(ml, OPTIMAL_ML=18) var ml3 = start2 + ml2 < src_mflimit ? LZ4HC_InsertAndGetWiderMatch_32(ctx, start2 + ml2 - 3, start2, src_LASTLITERALS, ml2, ref ref3, ref start3) : ml2; if (ml3 == ml2) // No better match : 2 sequences to encode { // ip & ref are known; Now for ml if (start2 < src_p + ml) ml = (int)(start2 - src_p); // Now, encode 2 sequences if (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0; src_p = start2; if (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml2, ref2, dst_end) != 0) return 0; continue; } if (start3 < src_p + ml + 3) // Not enough space for match 2 : remove it { if (start3 >= (src_p + ml)) // can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 { if (start2 < src_p + ml) { var correction = (int)(src_p + ml - start2); start2 += correction; ref2 += correction; ml2 -= correction; if (ml2 < MINMATCH) { start2 = start3; ref2 = ref3; ml2 = ml3; } } if (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0; src_p = start3; xxx_ref = ref3; ml = ml3; start0 = start2; ref0 = ref2; ml0 = ml2; goto _Search2; } start2 = start3; ref2 = ref3; ml2 = ml3; goto _Search3; } // OK, now we have 3 ascending matches; let's write at least the first one // ip & ref are known; Now for ml if (start2 < src_p + ml) { if ((start2 - src_p) < ML_MASK) { if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; if (src_p + ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - src_p) + ml2 - MINMATCH; var correction = ml - (int)(start2 - src_p); if (correction > 0) { start2 += correction; ref2 += correction; ml2 -= correction; } } else { ml = (int)(start2 - src_p); } } if (LZ4_encodeSequence_32(ref src_p, ref dst_p, ref src_anchor, ml, xxx_ref, dst_end) != 0) return 0; src_p = start2; xxx_ref = ref2; ml = ml2; start2 = start3; ref2 = ref3; ml2 = ml3; goto _Search3; } // Encode Last Literals { var lastRun = (int)(src_end - src_anchor); if ((dst_p - dst) + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > (uint)dst_maxlen) return 0; // Check output limit if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else *dst_p++ = (byte)(lastRun << ML_BITS); BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; } // End return (int)((dst_p) - dst); } } } // ReSharper restore InconsistentNaming ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe64.Dirty.cs ================================================ #region LZ4 original /* LZ4 - Fast LZ compression algorithm Copyright (C) 2011-2012, Yann Collet. BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - LZ4 source repository : http://code.google.com/p/lz4/ */ #endregion #region LZ4 port /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion // ReSharper disable InconsistentNaming // ReSharper disable TooWideLocalVariableScope // ReSharper disable JoinDeclarationAndInitializer namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { internal static partial class LZ4Codec { #region LZ4_compressCtx_64 private static unsafe int LZ4_compressCtx_64( uint* hash_table, byte* src, byte* dst, int src_len, int dst_maxlen) { byte* _p; fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) { // r93 var src_p = src; var src_base = src_p; var src_anchor = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var dst_p = dst; var dst_end = dst_p + dst_maxlen; var src_LASTLITERALS = src_end - LASTLITERALS; var src_LASTLITERALS_1 = src_LASTLITERALS - 1; var src_LASTLITERALS_3 = src_LASTLITERALS - 3; var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); int length; uint h, h_fwd; // Init if (src_len < MINLENGTH) goto _last_literals; // First Byte hash_table[((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - src_base); src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); // Main Loop while (true) { var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; var src_p_fwd = src_p; byte* src_ref; byte* dst_token; // Find a match do { h = h_fwd; var step = findMatchAttempts++ >> SKIPSTRENGTH; src_p = src_p_fwd; src_p_fwd = src_p + step; if (src_p_fwd > src_mflimit) goto _last_literals; h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH_ADJUST); src_ref = src_base + hash_table[h]; hash_table[h] = (uint)(src_p - src_base); } while ((src_ref < src_p - MAX_DISTANCE) || ((*(uint*)(src_ref)) != (*(uint*)(src_p)))); // Catch up while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) { src_p--; src_ref--; } // Encode Literal length length = (int)(src_p - src_anchor); dst_token = dst_p++; if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit if (length >= RUN_MASK) { var len = length - RUN_MASK; *dst_token = (RUN_MASK << ML_BITS); if (len > 254) { do { *dst_p++ = 255; len -= 255; } while (len > 254); *dst_p++ = (byte)len; BlockCopy(src_anchor, dst_p, (length)); dst_p += length; goto _next_match; } *dst_p++ = (byte)len; } else { *dst_token = (byte)(length << ML_BITS); } // Copy Literals _p = dst_p + (length); { do { *(ulong*)dst_p = *(ulong*)src_anchor; dst_p += 8; src_anchor += 8; } while (dst_p < _p); } dst_p = _p; _next_match: // Encode Offset *(ushort*)dst_p = (ushort)(src_p - src_ref); dst_p += 2; // Start Counting src_p += MINMATCH; src_ref += MINMATCH; // MinMatch already verified src_anchor = src_p; while (src_p < src_LASTLITERALS_STEPSIZE_1) { var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); if (diff == 0) { src_p += STEPSIZE_64; src_ref += STEPSIZE_64; continue; } src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; goto _endCount; } if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) { src_p += 4; src_ref += 4; } if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) { src_p += 2; src_ref += 2; } if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; _endCount: // Encode MatchLength length = (int)(src_p - src_anchor); if (dst_p + (length >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit if (length >= ML_MASK) { *dst_token += ML_MASK; length -= ML_MASK; for (; length > 509; length -= 510) { *dst_p++ = 255; *dst_p++ = 255; } if (length > 254) { length -= 255; *dst_p++ = 255; } *dst_p++ = (byte)length; } else { *dst_token += (byte)length; } // Test end of chunk if (src_p > src_mflimit) { src_anchor = src_p; break; } // Fill table hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH_ADJUST)] = (uint)(src_p - 2 - src_base); // Test next position h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); src_ref = src_base + hash_table[h]; hash_table[h] = (uint)(src_p - src_base); if ((src_ref > src_p - (MAX_DISTANCE + 1)) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) { dst_token = dst_p++; *dst_token = 0; goto _next_match; } // Prepare next loop src_anchor = src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH_ADJUST); } _last_literals: // Encode Last Literals var lastRun = (int)(src_end - src_anchor); if (dst_p + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > dst_end) return 0; if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else *dst_p++ = (byte)(lastRun << ML_BITS); BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; // End return (int)(dst_p - dst); } } #endregion #region LZ4_compress64kCtx_64 private static unsafe int LZ4_compress64kCtx_64( ushort* hash_table, byte* src, byte* dst, int src_len, int dst_maxlen) { byte* _p; fixed (int* debruijn64 = &DEBRUIJN_TABLE_64[0]) { // r93 var src_p = src; var src_anchor = src_p; var src_base = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var dst_p = dst; var dst_end = dst_p + dst_maxlen; var src_LASTLITERALS = src_end - LASTLITERALS; var src_LASTLITERALS_1 = src_LASTLITERALS - 1; var src_LASTLITERALS_3 = src_LASTLITERALS - 3; var src_LASTLITERALS_STEPSIZE_1 = src_LASTLITERALS - (STEPSIZE_64 - 1); var dst_LASTLITERALS_1 = dst_end - (1 + LASTLITERALS); var dst_LASTLITERALS_3 = dst_end - (2 + 1 + LASTLITERALS); int len, length; uint h, h_fwd; // Init if (src_len < MINLENGTH) goto _last_literals; // First Byte src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); // Main Loop while (true) { var findMatchAttempts = (1 << SKIPSTRENGTH) + 3; var src_p_fwd = src_p; byte* src_ref; byte* dst_token; // Find a match do { h = h_fwd; var step = findMatchAttempts++ >> SKIPSTRENGTH; src_p = src_p_fwd; src_p_fwd = src_p + step; if (src_p_fwd > src_mflimit) goto _last_literals; h_fwd = ((((*(uint*)(src_p_fwd))) * 2654435761u) >> HASH64K_ADJUST); src_ref = src_base + hash_table[h]; hash_table[h] = (ushort)(src_p - src_base); } while ((*(uint*)(src_ref)) != (*(uint*)(src_p))); // Catch up while ((src_p > src_anchor) && (src_ref > src) && (src_p[-1] == src_ref[-1])) { src_p--; src_ref--; } // Encode Literal length length = (int)(src_p - src_anchor); dst_token = dst_p++; if (dst_p + length + (length >> 8) > dst_LASTLITERALS_3) return 0; // Check output limit if (length >= RUN_MASK) { len = length - RUN_MASK; *dst_token = (RUN_MASK << ML_BITS); if (len > 254) { do { *dst_p++ = 255; len -= 255; } while (len > 254); *dst_p++ = (byte)len; BlockCopy(src_anchor, dst_p, (length)); dst_p += length; goto _next_match; } *dst_p++ = (byte)len; } else { *dst_token = (byte)(length << ML_BITS); } // Copy Literals { _p = dst_p + (length); { do { *(ulong*)dst_p = *(ulong*)src_anchor; dst_p += 8; src_anchor += 8; } while (dst_p < _p); } dst_p = _p; } _next_match: // Encode Offset *(ushort*)dst_p = (ushort)(src_p - src_ref); dst_p += 2; // Start Counting src_p += MINMATCH; src_ref += MINMATCH; // MinMatch verified src_anchor = src_p; while (src_p < src_LASTLITERALS_STEPSIZE_1) { var diff = (*(long*)(src_ref)) ^ (*(long*)(src_p)); if (diff == 0) { src_p += STEPSIZE_64; src_ref += STEPSIZE_64; continue; } src_p += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; goto _endCount; } if ((src_p < src_LASTLITERALS_3) && ((*(uint*)(src_ref)) == (*(uint*)(src_p)))) { src_p += 4; src_ref += 4; } if ((src_p < src_LASTLITERALS_1) && ((*(ushort*)(src_ref)) == (*(ushort*)(src_p)))) { src_p += 2; src_ref += 2; } if ((src_p < src_LASTLITERALS) && (*src_ref == *src_p)) src_p++; _endCount: // Encode MatchLength len = (int)(src_p - src_anchor); if (dst_p + (len >> 8) > dst_LASTLITERALS_1) return 0; // Check output limit if (len >= ML_MASK) { *dst_token += ML_MASK; len -= ML_MASK; for (; len > 509; len -= 510) { *dst_p++ = 255; *dst_p++ = 255; } if (len > 254) { len -= 255; *dst_p++ = 255; } *dst_p++ = (byte)len; } else { *dst_token += (byte)len; } // Test end of chunk if (src_p > src_mflimit) { src_anchor = src_p; break; } // Fill table hash_table[((((*(uint*)(src_p - 2))) * 2654435761u) >> HASH64K_ADJUST)] = (ushort)(src_p - 2 - src_base); // Test next position h = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); src_ref = src_base + hash_table[h]; hash_table[h] = (ushort)(src_p - src_base); if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) { dst_token = dst_p++; *dst_token = 0; goto _next_match; } // Prepare next loop src_anchor = src_p++; h_fwd = ((((*(uint*)(src_p))) * 2654435761u) >> HASH64K_ADJUST); } _last_literals: // Encode Last Literals var lastRun = (int)(src_end - src_anchor); if (dst_p + lastRun + 1 + (lastRun - RUN_MASK + 255) / 255 > dst_end) return 0; if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else *dst_p++ = (byte)(lastRun << ML_BITS); BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; // End return (int)(dst_p - dst); } } #endregion #region LZ4_uncompress_64 private static unsafe int LZ4_uncompress_64( byte* src, byte* dst, int dst_len) { fixed (int* dec32table = &DECODER_TABLE_32[0]) fixed (int* dec64table = &DECODER_TABLE_64[0]) { // r93 var src_p = src; byte* dst_ref; var dst_p = dst; var dst_end = dst_p + dst_len; byte* dst_cpy; var dst_LASTLITERALS = dst_end - LASTLITERALS; var dst_COPYLENGTH = dst_end - COPYLENGTH; var dst_COPYLENGTH_STEPSIZE_4 = dst_end - COPYLENGTH - (STEPSIZE_64 - 4); byte token; // Main Loop while (true) { int length; // get runlength token = *src_p++; if ((length = (token >> ML_BITS)) == RUN_MASK) { int len; for (; (len = *src_p++) == 255; length += 255) { /* do nothing */ } length += len; } // copy literals dst_cpy = dst_p + length; if (dst_cpy > dst_COPYLENGTH) { if (dst_cpy != dst_end) goto _output_error; // Error : not enough place for another match (min 4) + 5 literals BlockCopy(src_p, dst_p, (length)); src_p += length; break; // EOF } do { *(ulong*)dst_p = *(ulong*)src_p; dst_p += 8; src_p += 8; } while (dst_p < dst_cpy); src_p -= (dst_p - dst_cpy); dst_p = dst_cpy; // get offset dst_ref = (dst_cpy) - (*(ushort*)(src_p)); src_p += 2; if (dst_ref < dst) goto _output_error; // Error : offset outside destination buffer // get matchlength if ((length = (token & ML_MASK)) == ML_MASK) { for (; *src_p == 255; length += 255) src_p++; length += *src_p++; } // copy repeated sequence if ((dst_p - dst_ref) < STEPSIZE_64) { var dec64 = dec64table[dst_p - dst_ref]; dst_p[0] = dst_ref[0]; dst_p[1] = dst_ref[1]; dst_p[2] = dst_ref[2]; dst_p[3] = dst_ref[3]; dst_p += 4; dst_ref += 4; dst_ref -= dec32table[dst_p - dst_ref]; (*(uint*)(dst_p)) = (*(uint*)(dst_ref)); dst_p += STEPSIZE_64 - 4; dst_ref -= dec64; } else { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } dst_cpy = dst_p + length - (STEPSIZE_64 - 4); if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) { if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals while (dst_p < dst_COPYLENGTH) { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } while (dst_p < dst_cpy) *dst_p++ = *dst_ref++; dst_p = dst_cpy; continue; } { do { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } while (dst_p < dst_cpy); } dst_p = dst_cpy; // correction } // end of decoding return (int)((src_p) - src); // write overflow error detected _output_error: return (int)(-((src_p) - src)); } } #endregion #region LZ4_uncompress_unknownOutputSize_64 private static unsafe int LZ4_uncompress_unknownOutputSize_64( byte* src, byte* dst, int src_len, int dst_maxlen) { fixed (int* dec32table = &DECODER_TABLE_32[0]) fixed (int* dec64table = &DECODER_TABLE_64[0]) { // r93 var src_p = src; var src_end = src_p + src_len; byte* dst_ref; var dst_p = dst; var dst_end = dst_p + dst_maxlen; byte* dst_cpy; var src_LASTLITERALS_3 = (src_end - (2 + 1 + LASTLITERALS)); var src_LASTLITERALS_1 = (src_end - (LASTLITERALS + 1)); var dst_COPYLENGTH = (dst_end - COPYLENGTH); var dst_COPYLENGTH_STEPSIZE_4 = (dst_end - (COPYLENGTH + (STEPSIZE_64 - 4))); var dst_LASTLITERALS = (dst_end - LASTLITERALS); var dst_MFLIMIT = (dst_end - MFLIMIT); // Special case if (src_p == src_end) goto _output_error; // A correctly formed null-compressed LZ4 must have at least one byte (token=0) // Main Loop while (true) { byte token; int length; // get runlength token = *src_p++; if ((length = (token >> ML_BITS)) == RUN_MASK) { var s = 255; while ((src_p < src_end) && (s == 255)) { s = *src_p++; length += s; } } // copy literals dst_cpy = dst_p + length; if ((dst_cpy > dst_MFLIMIT) || (src_p + length > src_LASTLITERALS_3)) { if (dst_cpy > dst_end) goto _output_error; // Error : writes beyond output buffer if (src_p + length != src_end) goto _output_error; // Error : LZ4 format requires to consume all input at this stage (no match within the last 11 bytes, and at least 8 remaining input bytes for another match+literals) BlockCopy(src_p, dst_p, (length)); dst_p += length; break; // Necessarily EOF, due to parsing restrictions } do { *(ulong*)dst_p = *(ulong*)src_p; dst_p += 8; src_p += 8; } while (dst_p < dst_cpy); src_p -= (dst_p - dst_cpy); dst_p = dst_cpy; // get offset dst_ref = (dst_cpy) - (*(ushort*)(src_p)); src_p += 2; if (dst_ref < dst) goto _output_error; // Error : offset outside of destination buffer // get matchlength if ((length = (token & ML_MASK)) == ML_MASK) { while (src_p < src_LASTLITERALS_1) // Error : a minimum input bytes must remain for LASTLITERALS + token { int s = *src_p++; length += s; if (s == 255) continue; break; } } // copy repeated sequence if (dst_p - dst_ref < STEPSIZE_64) { var dec64 = dec64table[dst_p - dst_ref]; dst_p[0] = dst_ref[0]; dst_p[1] = dst_ref[1]; dst_p[2] = dst_ref[2]; dst_p[3] = dst_ref[3]; dst_p += 4; dst_ref += 4; dst_ref -= dec32table[dst_p - dst_ref]; (*(uint*)(dst_p)) = (*(uint*)(dst_ref)); dst_p += STEPSIZE_64 - 4; dst_ref -= dec64; } else { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } dst_cpy = dst_p + length - (STEPSIZE_64 - 4); if (dst_cpy > dst_COPYLENGTH_STEPSIZE_4) { if (dst_cpy > dst_LASTLITERALS) goto _output_error; // Error : last 5 bytes must be literals while (dst_p < dst_COPYLENGTH) { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } while (dst_p < dst_cpy) *dst_p++ = *dst_ref++; dst_p = dst_cpy; continue; } do { *(ulong*)dst_p = *(ulong*)dst_ref; dst_p += 8; dst_ref += 8; } while (dst_p < dst_cpy); dst_p = dst_cpy; // correction } // end of decoding return (int)(dst_p - dst); _output_error: // write overflow error detected return (int)-(src_p - src); } } #endregion } } // ReSharper restore JoinDeclarationAndInitializer // ReSharper restore TooWideLocalVariableScope // ReSharper restore InconsistentNaming ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.Unsafe64HC.Dirty.cs ================================================ #region LZ4 original /* LZ4 - Fast LZ compression algorithm Copyright (C) 2011-2012, Yann Collet. BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at : - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html - LZ4 source repository : http://code.google.com/p/lz4/ */ #endregion #region LZ4 port /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion // ReSharper disable InconsistentNaming namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { internal static partial class LZ4Codec { // Update chains up to ip (excluded) private static unsafe void LZ4HC_Insert_64(LZ4HC_Data_Structure hc4, byte* src_p) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) { var src_base = hc4.src_base; while (hc4.nextToUpdate < src_p) { var p = hc4.nextToUpdate; var delta = (int)((p) - (hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base)); if (delta > MAX_DISTANCE) delta = MAX_DISTANCE; chainTable[((int)p) & MAXD_MASK] = (ushort)delta; hashTable[((((*(uint*)(p))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(p - src_base); hc4.nextToUpdate++; } } } private static unsafe int LZ4HC_CommonLength_64(byte* p1, byte* p2, byte* src_LASTLITERALS) { fixed (int* debruijn64 = DEBRUIJN_TABLE_64) { var p1t = p1; while (p1t < src_LASTLITERALS - (STEPSIZE_64 - 1)) { var diff = (*(long*)(p2)) ^ (*(long*)(p1t)); if (diff == 0) { p1t += STEPSIZE_64; p2 += STEPSIZE_64; continue; } p1t += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; return (int)(p1t - p1); } if ((p1t < (src_LASTLITERALS - 3)) && ((*(uint*)(p2)) == (*(uint*)(p1t)))) { p1t += 4; p2 += 4; } if ((p1t < (src_LASTLITERALS - 1)) && ((*(ushort*)(p2)) == (*(ushort*)(p1t)))) { p1t += 2; p2 += 2; } if ((p1t < src_LASTLITERALS) && (*p2 == *p1t)) p1t++; return (int)(p1t - p1); } } private static unsafe int LZ4HC_InsertAndFindBestMatch_64( LZ4HC_Data_Structure hc4, byte* src_p, byte* src_LASTLITERALS, ref byte* matchpos) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) { var src_base = hc4.src_base; var nbAttempts = MAX_NB_ATTEMPTS; int repl = 0, ml = 0; ushort delta = 0; // HC4 match finder LZ4HC_Insert_64(hc4, src_p); var src_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base); // Detect repetitive sequences of length <= 4 if (src_ref >= src_p - 4) // potential repetition { if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) // confirmed { delta = (ushort)(src_p - src_ref); repl = ml = LZ4HC_CommonLength_64(src_p + MINMATCH, src_ref + MINMATCH, src_LASTLITERALS) + MINMATCH; matchpos = src_ref; } src_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]); } while ((src_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0)) { nbAttempts--; if (*(src_ref + ml) == *(src_p + ml)) if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) { var mlt = LZ4HC_CommonLength_64(src_p + MINMATCH, src_ref + MINMATCH, src_LASTLITERALS) + MINMATCH; if (mlt > ml) { ml = mlt; matchpos = src_ref; } } src_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]); } // Complete table if (repl != 0) { var ptr = src_p; var end = src_p + repl - (MINMATCH - 1); while (ptr < end - delta) { chainTable[((int)ptr) & MAXD_MASK] = delta; // Pre-Load ptr++; } do { chainTable[((int)ptr) & MAXD_MASK] = delta; hashTable[((((*(uint*)(ptr))) * 2654435761u) >> HASHHC_ADJUST)] = (int)(ptr - src_base); // Head of chain ptr++; } while (ptr < end); hc4.nextToUpdate = end; } return ml; } } private static unsafe int LZ4HC_InsertAndGetWiderMatch_64( LZ4HC_Data_Structure hc4, byte* src_p, byte* startLimit, byte* src_LASTLITERALS, int longest, ref byte* matchpos, ref byte* startpos) { fixed (ushort* chainTable = hc4.chainTable) fixed (int* hashTable = hc4.hashTable) fixed (int* debruijn64 = DEBRUIJN_TABLE_64) { var src_base = hc4.src_base; var nbAttempts = MAX_NB_ATTEMPTS; var delta = (int)(src_p - startLimit); // First Match LZ4HC_Insert_64(hc4, src_p); var src_ref = (hashTable[((((*(uint*)(src_p))) * 2654435761u) >> HASHHC_ADJUST)] + src_base); while ((src_ref >= src_p - MAX_DISTANCE) && (nbAttempts != 0)) { nbAttempts--; if (*(startLimit + longest) == *(src_ref - delta + longest)) { if ((*(uint*)(src_ref)) == (*(uint*)(src_p))) { var reft = src_ref + MINMATCH; var ipt = src_p + MINMATCH; var startt = src_p; while (ipt < src_LASTLITERALS - (STEPSIZE_64 - 1)) { var diff = (*(long*)(reft)) ^ (*(long*)(ipt)); if (diff == 0) { ipt += STEPSIZE_64; reft += STEPSIZE_64; continue; } ipt += debruijn64[(((ulong)((diff) & -(diff)) * 0x0218A392CDABBD3FL)) >> 58]; goto _endCount; } if ((ipt < (src_LASTLITERALS - 3)) && ((*(uint*)(reft)) == (*(uint*)(ipt)))) { ipt += 4; reft += 4; } if ((ipt < (src_LASTLITERALS - 1)) && ((*(ushort*)(reft)) == (*(ushort*)(ipt)))) { ipt += 2; reft += 2; } if ((ipt < src_LASTLITERALS) && (*reft == *ipt)) ipt++; _endCount: reft = src_ref; while ((startt > startLimit) && (reft > hc4.src_base) && (startt[-1] == reft[-1])) { startt--; reft--; } if ((ipt - startt) > longest) { longest = (int)(ipt - startt); matchpos = reft; startpos = startt; } } } src_ref = ((src_ref) - chainTable[((int)src_ref) & MAXD_MASK]); } return longest; } } private static unsafe int LZ4_encodeSequence_64( ref byte* src_p, ref byte* dst_p, ref byte* src_anchor, int matchLength, byte* src_ref, byte* dst_end) { int len; var dst_token = (dst_p)++; // Encode Literal length var length = (int)(src_p - src_anchor); if ((dst_p + length + (2 + 1 + LASTLITERALS) + (length >> 8)) > dst_end) return 1; // Check output limit if (length >= RUN_MASK) { *dst_token = (RUN_MASK << ML_BITS); len = length - RUN_MASK; for (; len > 254; len -= 255) *(dst_p)++ = 255; *(dst_p)++ = (byte)len; } else { *dst_token = (byte)(length << ML_BITS); } // Copy Literals var _p = dst_p + (length); do { *(ulong*)dst_p = *(ulong*)src_anchor; dst_p += 8; src_anchor += 8; } while (dst_p < _p); dst_p = _p; // Encode Offset *(ushort*)dst_p = (ushort)(src_p - src_ref); dst_p += 2; // Encode MatchLength len = (matchLength - MINMATCH); if (dst_p + (1 + LASTLITERALS) + (length >> 8) > dst_end) return 1; // Check output limit if (len >= ML_MASK) { *dst_token += ML_MASK; len -= ML_MASK; for (; len > 509; len -= 510) { *(dst_p)++ = 255; *(dst_p)++ = 255; } if (len > 254) { len -= 255; *(dst_p)++ = 255; } *(dst_p)++ = (byte)len; } else { *dst_token += (byte)len; } // Prepare next loop src_p += matchLength; src_anchor = src_p; return 0; } private static unsafe int LZ4_compressHCCtx_64( LZ4HC_Data_Structure ctx, byte* src, byte* dst, int src_len, int dst_maxlen) { var src_p = src; var src_anchor = src_p; var src_end = src_p + src_len; var src_mflimit = src_end - MFLIMIT; var src_LASTLITERALS = (src_end - LASTLITERALS); var dst_p = dst; var dst_end = dst_p + dst_maxlen; byte* src_ref = null; byte* start2 = null; byte* ref2 = null; byte* start3 = null; byte* ref3 = null; src_p++; // Main Loop while (src_p < src_mflimit) { var ml = LZ4HC_InsertAndFindBestMatch_64(ctx, src_p, src_LASTLITERALS, ref src_ref); if (ml == 0) { src_p++; continue; } // saved, in case we would skip too much var start0 = src_p; var ref0 = src_ref; var ml0 = ml; _Search2: var ml2 = src_p + ml < src_mflimit ? LZ4HC_InsertAndGetWiderMatch_64(ctx, src_p + ml - 2, src_p + 1, src_LASTLITERALS, ml, ref ref2, ref start2) : ml; if (ml2 == ml) // No better match { if (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0; continue; } if (start0 < src_p && start2 < src_p + ml0) { src_p = start0; src_ref = ref0; ml = ml0; } // Here, start0==ip if ((start2 - src_p) < 3) // First Match too small : removed { ml = ml2; src_p = start2; src_ref = ref2; goto _Search2; } _Search3: // Currently we have : // ml2 > ml1, and // ip1+3 <= ip2 (usually < ip1+ml1) if ((start2 - src_p) < OPTIMAL_ML) { var new_ml = ml; if (new_ml > OPTIMAL_ML) new_ml = OPTIMAL_ML; if (src_p + new_ml > start2 + ml2 - MINMATCH) new_ml = (int)(start2 - src_p) + ml2 - MINMATCH; var correction = new_ml - (int)(start2 - src_p); if (correction > 0) { start2 += correction; ref2 += correction; ml2 -= correction; } } // Now, we have start2 = ip+new_ml, with new_ml=min(ml, OPTIMAL_ML=18) var ml3 = start2 + ml2 < src_mflimit ? LZ4HC_InsertAndGetWiderMatch_64(ctx, start2 + ml2 - 3, start2, src_LASTLITERALS, ml2, ref ref3, ref start3) : ml2; if (ml3 == ml2) // No better match : 2 sequences to encode { // ip & ref are known; Now for ml if (start2 < src_p + ml) ml = (int)(start2 - src_p); // Now, encode 2 sequences if (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0; src_p = start2; if (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml2, ref2, dst_end) != 0) return 0; continue; } if (start3 < src_p + ml + 3) // Not enough space for match 2 : remove it { if (start3 >= src_p + ml) // can write Seq1 immediately ==> Seq2 is removed, so Seq3 becomes Seq1 { if (start2 < src_p + ml) { var correction = (int)(src_p + ml - start2); start2 += correction; ref2 += correction; ml2 -= correction; if (ml2 < MINMATCH) { start2 = start3; ref2 = ref3; ml2 = ml3; } } if (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0; src_p = start3; src_ref = ref3; ml = ml3; start0 = start2; ref0 = ref2; ml0 = ml2; goto _Search2; } start2 = start3; ref2 = ref3; ml2 = ml3; goto _Search3; } // OK, now we have 3 ascending matches; let's write at least the first one // ip & ref are known; Now for ml if (start2 < src_p + ml) { if (start2 - src_p < ML_MASK) { if (ml > OPTIMAL_ML) ml = OPTIMAL_ML; if (src_p + ml > start2 + ml2 - MINMATCH) ml = (int)(start2 - src_p) + ml2 - MINMATCH; var correction = ml - (int)(start2 - src_p); if (correction > 0) { start2 += correction; ref2 += correction; ml2 -= correction; } } else { ml = (int)(start2 - src_p); } } if (LZ4_encodeSequence_64(ref src_p, ref dst_p, ref src_anchor, ml, src_ref, dst_end) != 0) return 0; src_p = start2; src_ref = ref2; ml = ml2; start2 = start3; ref2 = ref3; ml2 = ml3; goto _Search3; } // Encode Last Literals var lastRun = (int)(src_end - src_anchor); if ((dst_p - dst) + lastRun + 1 + ((lastRun + 255 - RUN_MASK) / 255) > (uint)dst_maxlen) return 0; // Check output limit if (lastRun >= RUN_MASK) { *dst_p++ = (RUN_MASK << ML_BITS); lastRun -= RUN_MASK; for (; lastRun > 254; lastRun -= 255) *dst_p++ = 255; *dst_p++ = (byte)lastRun; } else { *dst_p++ = (byte)(lastRun << ML_BITS); } BlockCopy(src_anchor, dst_p, (int)(src_end - src_anchor)); dst_p += src_end - src_anchor; // End return (int)((dst_p) - dst); } } } // ReSharper restore InconsistentNaming ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/LZ4/LZ4Codec.cs ================================================ #region license /* Copyright (c) 2013, Milosz Krajewski All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #endregion using System; /* NOTE: This file is shared between LZ4n and LZ4s. If you would like to modify this file please keep in mind that your changes will affect both projects. Use 'LZ4s' conditional define to differentiate */ namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities.LZ4 { internal static partial class LZ4Codec { #region configuration /// /// Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) /// Increasing memory usage improves compression ratio /// Reduced memory usage can improve speed, due to cache effect /// Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache /// private const int MEMORY_USAGE = 14; /// /// Decreasing this value will make the algorithm skip faster data segments considered "incompressible" /// This may decrease compression ratio dramatically, but will be faster on incompressible data /// Increasing this value will make the algorithm search more before declaring a segment "incompressible" /// This could improve compression a bit, but will be slower on incompressible data /// The default value (6) is recommended /// private const int NOTCOMPRESSIBLE_DETECTIONLEVEL = 6; #if LZ4s /// Buffer length when Buffer.BlockCopy becomes faster than straight loop. /// Please note that safe implementation REQUIRES it to be greater (not even equal) than 8. private const int BLOCK_COPY_LIMIT = 16; #endif #endregion #region consts private const int MINMATCH = 4; #pragma warning disable 162 private const int SKIPSTRENGTH = NOTCOMPRESSIBLE_DETECTIONLEVEL > 2 ? NOTCOMPRESSIBLE_DETECTIONLEVEL : 2; #pragma warning restore 162 private const int COPYLENGTH = 8; private const int LASTLITERALS = 5; private const int MFLIMIT = COPYLENGTH + MINMATCH; private const int MINLENGTH = MFLIMIT + 1; private const int MAXD_LOG = 16; private const int MAXD = 1 << MAXD_LOG; private const int MAXD_MASK = MAXD - 1; private const int MAX_DISTANCE = (1 << MAXD_LOG) - 1; private const int ML_BITS = 4; private const int ML_MASK = (1 << ML_BITS) - 1; private const int RUN_BITS = 8 - ML_BITS; private const int RUN_MASK = (1 << RUN_BITS) - 1; private const int STEPSIZE_64 = 8; private const int STEPSIZE_32 = 4; private const int LZ4_64KLIMIT = (1 << 16) + (MFLIMIT - 1); private const int HASH_LOG = MEMORY_USAGE - 2; private const int HASH_TABLESIZE = 1 << HASH_LOG; private const int HASH_ADJUST = (MINMATCH * 8) - HASH_LOG; private const int HASH64K_LOG = HASH_LOG + 1; private const int HASH64K_TABLESIZE = 1 << HASH64K_LOG; private const int HASH64K_ADJUST = (MINMATCH * 8) - HASH64K_LOG; private const int HASHHC_LOG = MAXD_LOG - 1; private const int HASHHC_TABLESIZE = 1 << HASHHC_LOG; private const int HASHHC_ADJUST = (MINMATCH * 8) - HASHHC_LOG; //private const int HASHHC_MASK = HASHHC_TABLESIZE - 1; private static readonly int[] DECODER_TABLE_32 = new[] { 0, 3, 2, 3, 0, 0, 0, 0 }; private static readonly int[] DECODER_TABLE_64 = new[] { 0, 0, 0, -1, 0, 1, 2, 3 }; private static readonly int[] DEBRUIJN_TABLE_32 = new[] { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; private static readonly int[] DEBRUIJN_TABLE_64 = new[] { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; private const int MAX_NB_ATTEMPTS = 256; private const int OPTIMAL_ML = (ML_MASK - 1) + MINMATCH; #endregion #region public interface (common) /// Gets maximum the length of the output. /// Length of the input. /// Maximum number of bytes needed for compressed buffer. public static int MaximumOutputLength(int inputLength) { return inputLength + (inputLength / 255) + 16; } #endregion #region internal interface (common) internal static void CheckArguments( byte[] input, int inputOffset, ref int inputLength, byte[] output, int outputOffset, ref int outputLength) { if (inputLength < 0) inputLength = input.Length - inputOffset; if (inputLength == 0) { outputLength = 0; return; } if (input == null) throw new ArgumentNullException("input"); if (inputOffset < 0 || inputOffset + inputLength > input.Length) throw new ArgumentException("inputOffset and inputLength are invalid for given input"); if (outputLength < 0) outputLength = output.Length - outputOffset; if (output == null) throw new ArgumentNullException("output"); if (outputOffset < 0 || outputOffset + outputLength > output.Length) throw new ArgumentException("outputOffset and outputLength are invalid for given output"); } #endregion } } // ReSharper restore InconsistentNaming ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/PathHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities { internal static class PathHelper { /// /// The/universal/standard/directory/seperator. /// public const char DirectorySeparator = '/'; /// /// Returns a path string normalized to the/universal/standard. /// public static string Normalize(string path) { return path.Replace('\\', '/'); } /// /// Returns a directory path string normalized to the/universal/standard /// with a trailing seperator. /// public static string NormalizeDirectory(string path) { return path.Replace('\\', '/').TrimEnd('/') + '/'; } /// /// Returns a path string normalized to the\Windows\standard. /// public static string NormalizeWindows(string path) { return path.Replace('/', '\\'); } /// /// Returns a path relative to the base path. /// /// The path to make relative to. Must end with directory seperator. /// The path to be made relative to the basePath. /// The relative path or the original string if it is not absolute or cannot be made relative. public static string GetRelativePath(string basePath, string path) { Uri uri; if (!Uri.TryCreate(path, UriKind.Absolute, out uri)) return path; uri = new Uri(basePath).MakeRelativeUri(uri); var str = Uri.UnescapeDataString(uri.ToString()); return Normalize(str); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Utilities/ReflectionHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Reflection; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities { internal static partial class ReflectionHelpers { public static bool IsValueType(Type targetType) { #if WINRT return targetType.GetTypeInfo().IsValueType; #else return targetType.IsValueType; #endif } public static Type GetBaseType(Type targetType) { #if WINRT return targetType.GetTypeInfo().BaseType; #else return targetType.BaseType; #endif } /// /// Returns the Assembly of a Type /// public static Assembly GetAssembly(Type targetType) { #if WINRT return targetType.GetTypeInfo().Assembly; #else return targetType.Assembly; #endif } /// /// Returns true if the given type represents a non-object type that is not abstract. /// public static bool IsConcreteClass(Type t) { if (t == typeof(object)) return false; #if WINRT var ti = t.GetTypeInfo(); return (ti.IsClass && !ti.IsAbstract); #else return (t.IsClass && !t.IsAbstract); #endif } public static MethodInfo GetMethodInfo(Type type, string methodName) { #if WINRT return type.GetTypeInfo().GetDeclaredMethod(methodName); #else return type.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance); #endif } public static MethodInfo GetPropertyGetMethod(PropertyInfo property) { #if WINRT return property.GetMethod; #else return property.GetGetMethod(); #endif } public static MethodInfo GetPropertySetMethod(PropertyInfo property) { #if WINRT return property.SetMethod; #else return property.GetSetMethod(); #endif } public static T GetCustomAttribute(MemberInfo member) where T : Attribute { #if WINRT return member.GetCustomAttribute(typeof(T)) as T; #else return Attribute.GetCustomAttribute(member, typeof(T)) as T; #endif } /// /// Returns true if the get method of the given property exist and are public. /// Note that we allow a getter-only property to be serialized (and deserialized), /// *if* CanDeserializeIntoExistingObject is true for the property type. /// public static bool PropertyIsPublic(PropertyInfo property) { var getMethod = GetPropertyGetMethod(property); return (getMethod != null && getMethod.IsPublic); } /// /// Returns true if the given type can be assigned the given value /// public static bool IsAssignableFrom(Type type, object value) { return IsAssignableFromType(type, value.GetType()); } /// /// Returns true if the given type can be assigned a value with the given object type /// public static bool IsAssignableFromType(Type type, Type objectType) { #if WINRT return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo())); #else return (type.IsAssignableFrom(objectType)); #endif } internal static int SizeOf() { return ManagedSizeOf.Value; } /// /// Generics handler for Marshal.SizeOf /// private static class ManagedSizeOf { static public int Value { get; private set; } static ManagedSizeOf() { #if NET40 || NET45 || NET40_OR_GREATER Value = Marshal.SizeOf(typeof(T)); #else Value = Marshal.SizeOf(); #endif } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/XmlImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Xml; using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Implements an importer for reading intermediate XML files. This is a wrapper around IntermediateSerializer. /// [ContentImporter(".xml", DisplayName = "Xml Importer - KNI", DefaultProcessor = "PassThroughProcessor")] public class XmlImporter : ContentImporter { /// /// Called by the XNA Framework when importing an intermediate file to be used as a game /// asset. This is the method called by the XNA Framework when an asset is to be imported /// into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// The imported game asset. public override object Import(string filename, ContentImporterContext context) { using (var reader = XmlReader.Create(filename)) return IntermediateSerializer.Deserialize(reader, filename); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline/Xna.Framework.Content.Pipeline.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content.Pipeline\ 4.2.9001.0 4.2.9001.0 false net40;netstandard2.0;net8.0 7.3 Xna.Framework.Content.Pipeline Microsoft.Xna.Framework.Content.Pipeline true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI Framework Framework Content Pipeline. KNI; nkast.Xna.Framework.Content.Pipeline {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; using System.Globalization; using System.IO; namespace Microsoft.Xna.Framework.Content.Pipeline.Audio { /// /// Encapsulates and provides operations, such as format conversions, on the /// source audio. This type is produced by the audio importers and used by audio /// processors to produce compiled audio assets. /// /// Note that AudioContent can load and process audio files that are not supported by the importers. public class AudioContent : ContentItem, IDisposable { private bool _isDisposed; private readonly string _fileName; private readonly AudioFileType _fileType; private byte[] _data; private TimeSpan _duration; private AudioFormat _format; private int _loopStart; private int _loopLength; private ReadOnlyCollection _readOnlyData; /// /// The name of the original source audio file. /// [ContentSerializer(AllowNull = false)] public string FileName { get { return _fileName; } } /// /// The type of the original source audio file. /// public AudioFileType FileType { get { return _fileType; } } /// /// The current raw audio data without header information. /// /// /// This changes from the source data to the output data after conversion. /// For MP3 and WMA files this throws an exception to match XNA behavior. /// public ReadOnlyCollection Data { get { if (_isDisposed || _data == null) throw new InvalidContentException("Could not read the audio data from file \"" + Path.GetFileName(_fileName) + "\"."); if (_readOnlyData == null) _readOnlyData = new ReadOnlyCollection(_data); return _readOnlyData; } } internal byte[] RawData { get { return _data; } } /// /// The duration of the audio data. /// public TimeSpan Duration { get { return _duration; } } /// /// The current format of the audio data. /// /// This changes from the source format to the output format after conversion. public AudioFormat Format { get { return _format; } } /// /// The current loop length in samples. /// /// This changes from the source loop length to the output loop length after conversion. public int LoopLength { get { return _loopLength; } } /// /// The current loop start location in samples. /// /// This changes from the source loop start to the output loop start after conversion. public int LoopStart { get { return _loopStart; } } /// /// Initializes a new instance of AudioContent. /// /// Name of the audio source file to be processed. /// Type of the processed audio: WAV, MP3 or WMA. /// Constructs the object from the specified source file, in the format specified. public AudioContent(string audioFileName, AudioFileType audioFileType) { _fileName = audioFileName; try { // Get the full path to the file. audioFileName = Path.GetFullPath(audioFileName); // Use probe to get the details of the file. AudioContent.ProbeFormat(audioFileName, out _fileType, out _format, out _duration, out _loopStart, out _loopLength); // Looks like XNA only cares about type mismatch when // the type is WAV... else it is ok. if ( (audioFileType == AudioFileType.Wav || _fileType == AudioFileType.Wav) && audioFileType != _fileType) throw new ArgumentException("Incorrect file type!", "audioFileType"); // Only provide the data for WAV files. if (audioFileType == AudioFileType.Wav) { byte[] rawData; // Must be opened in read mode otherwise it fails to open // read-only files (found in some source control systems) using (var fs = new FileStream(audioFileName, FileMode.Open, FileAccess.Read)) { rawData = new byte[fs.Length]; fs.Read(rawData, 0, rawData.Length); } AudioFormat riffAudioFormat; byte[] stripped = AudioContent.StripRiffWaveHeader(rawData, out riffAudioFormat); if (riffAudioFormat != null) { if ((_format.Format != 2 && _format.Format != 17) && _format.BlockAlign != riffAudioFormat.BlockAlign) throw new InvalidOperationException("Calculated block align does not match RIFF " + _format.BlockAlign + " : " + riffAudioFormat.BlockAlign); if (_format.ChannelCount != riffAudioFormat.ChannelCount) throw new InvalidOperationException("Probed channel count does not match RIFF: " + _format.ChannelCount + ", " + riffAudioFormat.ChannelCount); if (_format.Format != riffAudioFormat.Format) throw new InvalidOperationException("Probed audio format does not match RIFF: " + _format.Format + ", " + riffAudioFormat.Format); if (_format.SampleRate != riffAudioFormat.SampleRate) throw new InvalidOperationException("Probed sample rate does not match RIFF: " + _format.SampleRate + ", " + riffAudioFormat.SampleRate); } _data = stripped; } } catch (Exception ex) { var message = string.Format("Failed to open file {0}. Ensure the file is a valid audio file and is not DRM protected.", Path.GetFileNameWithoutExtension(audioFileName)); throw new InvalidContentException(message, ex); } } /// /// Transcodes the source audio to the target format and quality. /// /// Format to convert this audio to. /// Quality of the processed output audio. For streaming formats, it can be one of the following: Low (96 kbps), Medium (128 kbps), Best (192 kbps). For WAV formats, it can be one of the following: Low (11kHz ADPCM), Medium (22kHz ADPCM), Best (44kHz PCM) /// /// The name of the file that the converted audio should be saved into. This is used for SongContent, where /// the audio is stored external to the XNB file. If this is null, then the converted audio is stored in /// the Data property. /// public void ConvertFormat(ConversionFormat formatType, ConversionQuality quality, string saveToFile) { string temporaryOutput = Path.GetTempFileName(); try { string ffmpegCodecName, ffmpegMuxerName; //int format; switch (formatType) { case ConversionFormat.Adpcm: // ADPCM Microsoft ffmpegCodecName = "adpcm_ms"; ffmpegMuxerName = "wav"; //format = 0x0002; /* WAVE_FORMAT_ADPCM */ break; case ConversionFormat.Pcm: // XNA seems to preserve the bit size of the input // format when converting to PCM. if (this.Format.BitsPerSample == 8) ffmpegCodecName = "pcm_u8"; else if (this.Format.BitsPerSample == 32 && this.Format.Format == 3) ffmpegCodecName = "pcm_f32le"; else ffmpegCodecName = "pcm_s16le"; ffmpegMuxerName = "wav"; //format = 0x0001; /* WAVE_FORMAT_PCM */ break; case ConversionFormat.WindowsMedia: // Windows Media Audio 2 ffmpegCodecName = "wmav2"; ffmpegMuxerName = "asf"; //format = 0x0161; /* WAVE_FORMAT_WMAUDIO2 */ break; case ConversionFormat.Xma: throw new NotSupportedException( "XMA is not a supported encoding format. It is specific to the Xbox 360."); case ConversionFormat.ImaAdpcm: // ADPCM IMA WAV ffmpegCodecName = "adpcm_ima_wav"; ffmpegMuxerName = "wav"; //format = 0x0011; /* WAVE_FORMAT_IMA_ADPCM */ break; case ConversionFormat.Aac: // AAC (Advanced Audio Coding) // Requires -strict experimental ffmpegCodecName = "aac"; ffmpegMuxerName = "ipod"; //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */ break; case ConversionFormat.Vorbis: // Vorbis ffmpegCodecName = "libvorbis"; ffmpegMuxerName = "ogg"; //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */ break; case ConversionFormat.Mp3: // Vorbis ffmpegCodecName = "libmp3lame"; ffmpegMuxerName = "mp3"; //format = 0x0000; /* WAVE_FORMAT_UNKNOWN */ break; default: // Unknown format throw new NotSupportedException(); } ConversionQuality finalQuality = quality; string ffmpegStdout, ffmpegStderr; int ffmpegExitCode; do { ffmpegExitCode = ExternalTool.Run( "ffmpeg", string.Format( "-y -i \"{0}\" -vn -c:a {1} -b:a {2} -ar {3} -f:a {4} -strict experimental \"{5}\"", this.FileName, ffmpegCodecName, AudioContent.QualityToBitRate(finalQuality), AudioContent.QualityToSampleRate(finalQuality, this.Format.SampleRate), ffmpegMuxerName, temporaryOutput), out ffmpegStdout, out ffmpegStderr); if (ffmpegExitCode != 0) finalQuality--; } while (finalQuality >= 0 && ffmpegExitCode != 0); if (ffmpegExitCode != 0) throw new InvalidOperationException("ffmpeg exited with non-zero exit code: \n" + ffmpegStdout + "\n" + ffmpegStderr); byte[] rawData; using (FileStream fs = new FileStream(temporaryOutput, FileMode.Open, FileAccess.Read)) { rawData = new byte[fs.Length]; fs.Read(rawData, 0, rawData.Length); } if (saveToFile != null) { using (FileStream fs = new FileStream(saveToFile, FileMode.Create, FileAccess.Write)) fs.Write(rawData, 0, rawData.Length); } // Use probe to get the final format and information on the converted file. AudioFileType audioFileType; AudioFormat audioFormat; TimeSpan duration; int loopStart, loopLength; AudioContent.ProbeFormat(temporaryOutput, out audioFileType, out audioFormat, out duration, out loopStart, out loopLength); AudioFormat riffAudioFormat; byte[] data = AudioContent.StripRiffWaveHeader(rawData, out riffAudioFormat); // deal with adpcm if (audioFormat.Format == 2 || audioFormat.Format == 17) { // riff contains correct blockAlign audioFormat = riffAudioFormat; // fix loopLength -> has to be multiple of sample per block // see https://msdn.microsoft.com/de-de/library/windows/desktop/ee415711(v=vs.85).aspx int samplesPerBlock = AudioContent.SampleAlignment(audioFormat); loopLength = (int)(audioFormat.SampleRate * duration.TotalSeconds); int remainder = loopLength % samplesPerBlock; loopLength += samplesPerBlock - remainder; } this.SetData(data, audioFormat, duration, loopStart, loopLength); } finally { ExternalTool.DeleteFile(temporaryOutput); } //return quality; } public void SetData(byte[] data, AudioFormat format, TimeSpan duration, int loopStart, int loopLength) { if (data == null) throw new ArgumentNullException("data"); if (format == null) throw new ArgumentNullException("format"); _data = data; _format = format; _duration = duration; _loopStart = loopStart; _loopLength = loopLength; } public static void ProbeFormat(string sourceFile, out AudioFileType audioFileType, out AudioFormat audioFormat, out TimeSpan duration, out int loopStart, out int loopLength) { string ffprobeStdout, ffprobeStderr; int ffprobeExitCode = ExternalTool.Run( "ffprobe", string.Format("-i \"{0}\" -show_format -show_entries streams -v quiet -of flat", sourceFile), out ffprobeStdout, out ffprobeStderr); if (ffprobeExitCode != 0) throw new InvalidOperationException("ffprobe exited with non-zero exit code."); // Set default values if information is not available. int averageBytesPerSecond = 0; int bitsPerSample = 0; int blockAlign = 0; int channelCount = 0; int sampleRate = 0; int format = 0; string sampleFormat = null; double durationInSeconds = 0; string formatName = string.Empty; try { NumberFormatInfo numberFormat = CultureInfo.InvariantCulture.NumberFormat; foreach (string line in ffprobeStdout.Split(new[] { '\r', '\n', '\0' }, StringSplitOptions.RemoveEmptyEntries)) { string[] kv = line.Split(new[] { '=' }, 2); switch (kv[0]) { case "streams.stream.0.sample_rate": sampleRate = int.Parse(kv[1].Trim('"'), numberFormat); break; case "streams.stream.0.bits_per_sample": bitsPerSample = int.Parse(kv[1].Trim('"'), numberFormat); break; case "streams.stream.0.start_time": { double seconds; if (double.TryParse(kv[1].Trim('"'), NumberStyles.Any, numberFormat, out seconds)) durationInSeconds += seconds; break; } case "streams.stream.0.duration": durationInSeconds += double.Parse(kv[1].Trim('"'), numberFormat); break; case "streams.stream.0.channels": channelCount = int.Parse(kv[1].Trim('"'), numberFormat); break; case "streams.stream.0.sample_fmt": sampleFormat = kv[1].Trim('"').ToLowerInvariant(); break; case "streams.stream.0.bit_rate": averageBytesPerSecond = (int.Parse(kv[1].Trim('"'), numberFormat) / 8); break; case "format.format_name": formatName = kv[1].Trim('"').ToLowerInvariant(); break; case "streams.stream.0.codec_tag": { string hex = kv[1].Substring(3, kv[1].Length - 4); format = int.Parse(hex, NumberStyles.HexNumber); break; } } } } catch (Exception ex) { throw new InvalidOperationException("Failed to parse ffprobe output.", ex); } // XNA seems to use the sample format for the bits per sample // in the case of non-PCM formats like MP3 and WMA. if (bitsPerSample == 0 && sampleFormat != null) { switch (sampleFormat) { case "u8": case "u8p": bitsPerSample = 8; break; case "s16": case "s16p": bitsPerSample = 16; break; case "s32": case "s32p": case "flt": case "fltp": bitsPerSample = 32; break; case "dbl": case "dblp": bitsPerSample = 64; break; } } // Figure out the file type. int durationMs = (int)Math.Floor(durationInSeconds * 1000.0); if (formatName == "wav") { audioFileType = AudioFileType.Wav; } else if (formatName == "mp3") { audioFileType = AudioFileType.Mp3; format = 1; durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0); bitsPerSample = Math.Min(bitsPerSample, 16); } else if (formatName == "wma" || formatName == "asf") { audioFileType = AudioFileType.Wma; format = 1; durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0); bitsPerSample = Math.Min(bitsPerSample, 16); } else if (formatName == "ogg") { audioFileType = AudioFileType.Ogg; format = 1; durationMs = (int)Math.Ceiling(durationInSeconds * 1000.0); bitsPerSample = Math.Min(bitsPerSample, 16); } else audioFileType = (AudioFileType)(-1); // XNA seems to calculate the block alignment directly from // the bits per sample and channel count regardless of the // format of the audio data. // ffprobe doesn't report blockAlign for ADPCM and we cannot calculate it like this if (bitsPerSample > 0 && (format != 2 && format != 17)) blockAlign = (bitsPerSample * channelCount) / 8; // XNA seems to only be accurate to the millisecond. duration = TimeSpan.FromMilliseconds(durationMs); // Looks like XNA calculates the average bps from // the sample rate and block alignment. if (blockAlign > 0) averageBytesPerSecond = sampleRate * blockAlign; audioFormat = new AudioFormat( averageBytesPerSecond, bitsPerSample, blockAlign, channelCount, format, sampleRate); // Loop start and length in number of samples. For some // reason XNA doesn't report loop length for non-WAV sources. loopStart = 0; if (audioFileType != AudioFileType.Wav) loopLength = 0; else loopLength = (int)Math.Floor(sampleRate * durationInSeconds); } internal static byte[] StripRiffWaveHeader(byte[] data, out AudioFormat audioFormat) { audioFormat = null; using (BinaryReader reader = new BinaryReader(new MemoryStream(data))) { string signature = new string(reader.ReadChars(4)); if (signature != "RIFF") return data; reader.ReadInt32(); // riff_chunck_size string wformat = new string(reader.ReadChars(4)); if (wformat != "WAVE") return data; // Look for the data chunk. while (true) { string chunkSignature = new string(reader.ReadChars(4)); if (chunkSignature.ToLowerInvariant() == "data") break; if (chunkSignature.ToLowerInvariant() == "fmt ") { int fmtLength = reader.ReadInt32(); short formatTag = reader.ReadInt16(); short channels = reader.ReadInt16(); int sampleRate = reader.ReadInt32(); int avgBytesPerSec = reader.ReadInt32(); short blockAlign = reader.ReadInt16(); short bitsPerSample = reader.ReadInt16(); audioFormat = new AudioFormat(avgBytesPerSec, bitsPerSample, blockAlign, channels, formatTag, sampleRate); fmtLength -= 2 + 2 + 4 + 4 + 2 + 2; if (fmtLength < 0) throw new InvalidOperationException("riff wave header has unexpected format"); reader.BaseStream.Seek(fmtLength, SeekOrigin.Current); } else { reader.BaseStream.Seek(reader.ReadInt32(), SeekOrigin.Current); } } int dataSize = reader.ReadInt32(); data = reader.ReadBytes(dataSize); } return data; } public static void WritePcmFile(AudioContent content, string saveToFile, int bitRate = 192000, int? sampeRate = null) { string ffmpegStdout, ffmpegStderr; int ffmpegExitCode = ExternalTool.Run( "ffmpeg", string.Format( "-y -i \"{0}\" -vn -c:a pcm_s16le -b:a {2} {3} -f:a wav -strict experimental \"{1}\"", content.FileName, saveToFile, bitRate, sampeRate != null ? "-ar " + sampeRate.Value : "" ), out ffmpegStdout, out ffmpegStderr); if (ffmpegExitCode != 0) throw new InvalidOperationException("ffmpeg exited with non-zero exit code: \n" + ffmpegStdout + "\n" + ffmpegStderr); } // Converts block alignment in bytes to sample alignment, primarily for compressed formats // Calculation of sample alignment from http://kcat.strangesoft.net/openal-extensions/SOFT_block_alignment.txt private static int SampleAlignment(AudioFormat format) { switch (format.Format) { case 2: // MS-ADPCM return (format.BlockAlign / format.ChannelCount - 7) * 2 + 2; case 17: // IMA/ADPCM return (format.BlockAlign / format.ChannelCount - 4) / 4 * 8 + 1; default: return 0; } } private static int QualityToSampleRate(ConversionQuality quality, int sourceSampleRate) { switch (quality) { case ConversionQuality.Low: return Math.Max(8000, (int)Math.Floor(sourceSampleRate / 2.0)); case ConversionQuality.Medium: return Math.Max(8000, (int)Math.Floor((sourceSampleRate / 4.0) * 3)); case ConversionQuality.Best: return Math.Max(8000, sourceSampleRate); default: return Math.Max(8000, sourceSampleRate); } } private static int QualityToBitRate(ConversionQuality quality) { switch (quality) { case ConversionQuality.Low: return 96000; case ConversionQuality.Medium: return 128000; case ConversionQuality.Best: return 192000; default: return 192000; } } public void Dispose() { _data = null; _readOnlyData = null; _isDisposed = true; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioFileType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Audio { /// /// Type of the audio file. /// public enum AudioFileType { /// /// The MP3 format /// Mp3, /// /// The WAV format /// Wav, /// /// The WMA format /// Wma, /// /// The Ogg format /// Ogg, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Audio/AudioFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; namespace Microsoft.Xna.Framework.Content.Pipeline.Audio { /// /// Encapsulates the native audio format (WAVEFORMATEX) information of the audio content. /// public sealed class AudioFormat { int averageBytesPerSecond; int bitsPerSample; int blockAlign; int channelCount; int format; byte[] nativeWaveFormat; int sampleRate; /// /// Gets the average bytes processed per second. /// /// Average bytes processed per second. public int AverageBytesPerSecond { get { return averageBytesPerSecond; } } /// /// Gets the bit depth of the audio content. /// /// If the audio has not been processed, the source bit depth; otherwise, the bit depth of the new format. public int BitsPerSample { get { return bitsPerSample; } } /// /// Gets the number of bytes per sample block, taking channels into consideration. For example, for 16-bit stereo audio (PCM format), the size of each sample block is 4 bytes. /// /// Number of bytes, per sample block. public int BlockAlign { get { return blockAlign; } } /// /// Gets the number of channels. /// /// If the audio has not been processed, the source channel count; otherwise, the new channel count. public int ChannelCount { get { return channelCount; } } /// /// Gets the format of the audio content. /// /// If the audio has not been processed, the format tag of the source content; otherwise, the new format tag. public int Format { get { return format; } } /// /// Gets the raw byte buffer for the format. For non-PCM formats, this buffer contains important format-specific information beyond the basic format information exposed in other properties of the AudioFormat type. /// /// The raw byte buffer represented in a collection. public ReadOnlyCollection NativeWaveFormat { get { return new ReadOnlyCollection(nativeWaveFormat); } } internal byte[] RawNativeWaveFormat { get { return nativeWaveFormat; } } /// /// Gets the sample rate of the audio content. /// /// If the audio has not been processed, the source sample rate; otherwise, the new sample rate. public int SampleRate { get { return sampleRate; } } internal AudioFormat( int averageBytesPerSecond, int bitsPerSample, int blockAlign, int channelCount, int format, int sampleRate) { this.averageBytesPerSecond = averageBytesPerSecond; this.bitsPerSample = bitsPerSample; this.blockAlign = blockAlign; this.channelCount = channelCount; this.format = format; this.sampleRate = sampleRate; this.nativeWaveFormat = this.ConstructNativeWaveFormat(); } private byte[] ConstructNativeWaveFormat() { using (MemoryStream memory = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(memory)) { writer.Write((short)this.format); writer.Write((short)this.channelCount); writer.Write((int)this.sampleRate); writer.Write((int)this.averageBytesPerSecond); writer.Write((short)this.blockAlign); writer.Write((short)this.bitsPerSample); writer.Write((short)0); byte[] bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); return bytes; } } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Audio/ConversionFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Audio { /// /// Target formats supported for audio source conversions. /// public enum ConversionFormat { /// /// Microsoft ADPCM encoding technique using 4 bits /// Adpcm, /// /// 8/16-bit mono/stereo PCM audio 8KHz-48KHz /// Pcm, /// /// Windows Media CBR formats (64 kbps, 128 kbps, 192 kbps) /// WindowsMedia, /// /// The Xbox compression format /// Xma, /// /// QuickTime ADPCM format /// ImaAdpcm, /// /// Advanced Audio Coding /// Aac, /// /// Vorbis open, patent-free audio encoding /// Vorbis, /// /// mp3 audio format /// Mp3 } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Audio/ConversionQuality.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Audio { /// /// Compression quality of the audio content. /// public enum ConversionQuality { /// /// High compression yielding lower file size, but could compromise audio quality /// Low, /// /// Moderate compression resulting in a compromise between audio quality and file size /// Medium, /// /// Lowest compression, but the best audio quality /// Best, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/ExternalTool.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Threading; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Helper to run an external tool installed in the system. Useful for when /// we don't want to package the tool ourselves (ffmpeg) or it's provided /// by a third party (console manufacturer). /// internal class ExternalTool { public static int Run(string command, string arguments) { string stdout, stderr; var result = Run(command, arguments, out stdout, out stderr); if (result < 0) throw new Exception(string.Format("{0} returned exit code {1}", command, result)); return result; } public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null) { // This particular case is likely to be the most common and thus // warrants its own specific error message rather than falling // back to a general exception from Process.Start() var fullPath = FindCommand(command); if (string.IsNullOrEmpty(fullPath)) throw new Exception(string.Format("Couldn't locate external tool '{0}'.", command)); // We can't reference ref or out parameters from within // lambdas (for the thread functions), so we have to store // the data in a temporary variable and then assign these // variables to the out parameters. var stdoutTemp = string.Empty; var stderrTemp = string.Empty; var processInfo = new ProcessStartInfo { Arguments = arguments, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, ErrorDialog = false, FileName = fullPath, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, }; EnsureExecutable(fullPath); using (var process = new Process()) { process.StartInfo = processInfo; process.Start(); // We have to run these in threads, because using ReadToEnd // on one stream can deadlock if the other stream's buffer is // full. var stdoutThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardOutput.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes); })); var stderrThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardError.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stderrTemp = System.Text.Encoding.ASCII.GetString(bytes); })); stdoutThread.Start(); stderrThread.Start(); if (stdin != null) { process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin)); } // Make sure interactive prompts don't block. process.StandardInput.Close(); process.WaitForExit(); stdoutThread.Join(); stderrThread.Join(); stdout = stdoutTemp; stderr = stderrTemp; return process.ExitCode; } } /// /// Returns the fully-qualified path for a command, searching the system path if necessary. /// /// /// It's apparently necessary to use the full path when running on some systems. /// private static string FindCommand(string command) { // Expand any environment variables. command = Environment.ExpandEnvironmentVariables(command); // If we have a full path just pass it through. if (File.Exists(command)) return command; // For Linux check specific subfolder var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "linux", command); if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom)) return lincom; // For Mac check specific subfolder var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "osx", command); if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom)) return maccom; // We don't have a full path, so try running through the system path to find it. var paths = AppDomain.CurrentDomain.BaseDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH"); var justTheName = Path.GetFileName(command); foreach (var path in paths.Split(Path.PathSeparator)) { var fullName = Path.Combine(path, justTheName); if (File.Exists(fullName)) return fullName; if (CurrentPlatform.OS == OS.Windows) { var fullExeName = string.Concat(fullName, ".exe"); if (File.Exists(fullExeName)) return fullExeName; } } return null; } /// /// Ensures the specified executable has the executable bit set. If the /// executable doesn't have the executable bit set on Linux or Mac OS, then /// Mono will refuse to execute it. /// /// The full path to the executable. private static void EnsureExecutable(string path) { if (!path.StartsWith("/home") && !path.StartsWith("/Users")) return; try { var p = Process.Start("chmod", "u+x \"" + path + "\""); p.WaitForExit(); } catch { // This platform may not have chmod in the path, in which case we can't // do anything reasonable here. } } /// /// Safely deletes the file if it exists. /// /// The path to the file to delete. public static void DeleteFile(string filePath) { try { File.Delete(filePath); } catch (Exception) { } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Mp3Importer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Audio; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading MP3 audio files for use in the Content Pipeline. /// [ContentImporter(".mp3", DisplayName = "Mp3 Importer - KNI", DefaultProcessor = "SongProcessor")] public class Mp3Importer : ContentImporter { /// /// Initializes a new instance of Mp3Importer. /// public Mp3Importer() { } /// /// Called by the XNA Framework when importing an MP3 audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override AudioContent Import(string filename, ContentImporterContext context) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); if (!File.Exists(filename)) throw new FileNotFoundException(string.Format("Could not locate audio file {0}.", Path.GetFileName(filename))); var content = new AudioContent(filename, AudioFileType.Mp3); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/OggImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Audio; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading .ogg audio files for use in the Content Pipeline. /// [ContentImporter(".ogg", DisplayName = "Ogg Importer - KNI", DefaultProcessor = "SongProcessor")] public class OggImporter : ContentImporter { /// /// Called by the XNA Framework when importing an ogg audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override AudioContent Import(string filename, ContentImporterContext context) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); if (!File.Exists(filename)) throw new FileNotFoundException(string.Format("Could not locate audio file {0}.", Path.GetFileName(filename))); var content = new AudioContent(filename, AudioFileType.Ogg); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Processors/SoundEffectContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Represents a processed sound effect. /// public sealed class SoundEffectContent { internal byte[] _format; internal byte[] _data; internal int _loopStart; internal int _loopLength; internal int _duration; /// /// Initializes a new instance of the SoundEffectContent class. /// /// The WAV header. /// The audio waveform data. /// The start of the loop segment (must be block aligned). /// The length of the loop segment (must be block aligned). /// The duration of the wave file in milliseconds. internal SoundEffectContent(byte[] format, byte[] data, int loopStart, int loopLength, int duration) { this._format = format; this._data = data; this._loopStart = loopStart; this._loopLength = loopLength; this._duration = duration; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Processors/SoundEffectProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Xna.Framework.Content.Pipeline.Audio; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// A sound effect processor that processes an intermediate AudioContent type. This type encapsulates the source audio content, producing a SoundEffect type that can be used in the game. /// [ContentProcessor(DisplayName = "Sound Effect - KNI")] public class SoundEffectProcessor : ContentProcessor { ConversionQuality quality = ConversionQuality.Best; /// /// Gets or sets the target format quality of the audio content. /// /// The ConversionQuality of this audio data. public ConversionQuality Quality { get { return quality; } set { quality = value; } } /// /// Initializes a new instance of SoundEffectProcessor. /// public SoundEffectProcessor() { } /// /// Builds the content for the source audio. /// /// The audio content to build. /// Context for the specified processor. /// The built audio. public override SoundEffectContent Process(AudioContent input, ContentProcessorContext context) { if (input == null) throw new ArgumentNullException("input"); if (context == null) throw new ArgumentNullException("context"); TargetPlatform platform = context.TargetPlatform; // Default to PCM data, or ADPCM if the source is ADPCM. ConversionFormat targetFormat = ConversionFormat.Pcm; if (quality != ConversionQuality.Best || input.Format.Format == 2 || input.Format.Format == 17) { if (platform == TargetPlatform.iOS || platform == TargetPlatform.MacOSX || platform == TargetPlatform.DesktopGL) targetFormat = ConversionFormat.ImaAdpcm; else targetFormat = ConversionFormat.Adpcm; } input.ConvertFormat(targetFormat, quality, null); return new SoundEffectContent(input.Format.RawNativeWaveFormat, input.RawData, input.LoopStart, input.LoopLength, (int)input.Duration.TotalMilliseconds); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Serialization/Compiler/SoundEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class SoundEffectWriter : ContentTypeWriter { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, SoundEffectContent value) { output.Write(value._format.Length); output.Write(value._format); output.Write(value._data.Length); output.Write(value._data); output.Write(value._loopStart); output.Write(value._loopLength); output.Write(value._duration); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".SoundEffectReader"; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeNamespace = "Microsoft.Xna.Framework.Audio"; string typeName = ".SoundEffect"; string typeAssembly = ", Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeNamespace + typeName + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/WavImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Audio; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading .wav audio files for use in the Content Pipeline. /// [ContentImporter(".wav", DisplayName = "Wav Importer - KNI", DefaultProcessor = "SoundEffectProcessor")] public class WavImporter : ContentImporter { /// /// Called by the XNA Framework when importing a .wav audio file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. /// This importer supports PCM in unsigned 8-bit, signed 16-bit, signed 24-bit, IEEE Float 32-bit, MS-ADPCM or IMA/ADPCM with sample rates from 8KHz up to 48KHz. public override AudioContent Import(string filename, ContentImporterContext context) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); if (!File.Exists(filename)) throw new FileNotFoundException(string.Format("Could not locate audio file {0}.", Path.GetFileName(filename))); AudioContent content = new AudioContent(filename, AudioFileType.Wav); // Validate the format of the input. if (content.Format.SampleRate < 8000 || content.Format.SampleRate > 48000) throw new InvalidContentException(string.Format("Audio file {0} contains audio data with unsupported sample rate of {1}Hz. Supported sample rates are from 8KHz up to 48KHz.", Path.GetFileName(filename), content.Format.SampleRate)); bool validPcm = content.Format.Format == 1 && (content.Format.BitsPerSample == 8 || content.Format.BitsPerSample == 16 || content.Format.BitsPerSample == 24); bool validAdpcm = (content.Format.Format == 2 || content.Format.Format == 17) && content.Format.BitsPerSample == 4; bool validIeeeFloat = content.Format.Format == 3 && content.Format.BitsPerSample == 32; if (!(validPcm || validAdpcm || validIeeeFloat)) throw new InvalidContentException(string.Format("Audio file {0} contains audio data with unsupported format of {1} and bit depth of {2}. Supported bit depths are unsigned 8-bit, signed 16-bit, signed 24-bit for PCM(1) and 32-bit for IEEE Float(3).", Path.GetFileName(filename), content.Format.Format, content.Format.BitsPerSample)); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/WmaImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Audio; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading Windows Media Audio (.wma) files for use in the Content Pipeline. /// [ContentImporter(".wma", DisplayName = "Wma Importer - KNI", DefaultProcessor = "SongProcessor")] public class WmaImporter : ContentImporter { /// /// Initializes a new instance of WmaImporter. /// public WmaImporter() { } /// /// Called by the XNA Framework when importing a .wma file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override AudioContent Import(string filename, ContentImporterContext context) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); if (!File.Exists(filename)) throw new FileNotFoundException(string.Format("Could not locate audio file {0}.", Path.GetFileName(filename))); var content = new AudioContent(filename, AudioFileType.Wma); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Audio/Xna.Framework.Content.Pipeline.Audio.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content.Pipeline.Audio\ 4.2.9001.0 4.2.9001.0 false net40;netstandard2.0;net8.0 7.3 Xna.Framework.Content.Pipeline.Audio Microsoft.Xna.Framework.Content.Pipeline.Audio true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI Framework Framework Content Pipeline Audio. KNI; nkast.Xna.Framework.Content.Pipeline.Audio Utilities\CurrentPlatform.cs ffmpeg.exe PreserveNewest True ffprobe.exe PreserveNewest True {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {73509F44-3566-4B79-BB47-C7C6E2AA2351} Xna.Framework.Content.Pipeline False ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/DdsLoader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Loader class for DDS format image files. /// class DdsLoader { [Flags] enum Ddsd : uint { Caps = 0x1, // Required in every DDS file Height = 0x2, // Required in every DDS file Width = 0x4, // Required in every DDS file Pitch = 0x8, // Required when pitch is provided for an uncompressed texture PixelFormat = 0x1000, // Required in every DDS file MipMapCount = 0x2000, // Required in a mipmapped texture LinearSize = 0x80000, // Required when pitch is provided for a compressed texture Depth = 0x800000, // Required in a depth texture } [Flags] enum DdsCaps : uint { Complex = 0x8, // Optional; must be used on any file that contains more than one surface (a mipmap, a cubic environment map, or mipmapped volume texture) MipMap = 0x400000, // Optional; should be used for a mipmap Texture = 0x1000, // Required } [Flags] enum DdsCaps2 : uint { Cubemap = 0x200, CubemapPositiveX = 0x400, CubemapNegativeX = 0x800, CubemapPositiveY = 0x1000, CubemapNegativeY = 0x2000, CubemapPositiveZ = 0x4000, CubemapNegativeZ = 0x8000, Volume = 0x200000, CubemapAllFaces = Cubemap | CubemapPositiveX | CubemapNegativeX | CubemapPositiveY | CubemapNegativeY | CubemapPositiveZ | CubemapNegativeZ, } [Flags] enum Ddpf : uint { AlphaPixels = 0x1, Alpha = 0x2, FourCC = 0x4, Rgb = 0x40, Yuv = 0x200, Luminance = 0x20000, } static uint MakeFourCC(char c1, char c2, char c3, char c4) { return ((uint)c1 << 24) | ((uint)c2 << 16) | ((uint)c3 << 8) | (uint)c4; } static uint MakeFourCC(string cc) { return ((uint)cc[0] << 24) | ((uint)cc[1] << 16) | ((uint)cc[2] << 8) | (uint)cc[3]; } enum FourCC : uint { A32B32G32R32F = 116, Dxt1 = 0x31545844, Dxt2 = 0x32545844, Dxt3 = 0x33545844, Dxt4 = 0x34545844, Dxt5 = 0x35545844, Dx10 = 0x30315844, } struct DdsPixelFormat { public uint dwSize; public Ddpf dwFlags; public FourCC dwFourCC; public uint dwRgbBitCount; public uint dwRBitMask; public uint dwGBitMask; public uint dwBBitMask; public uint dwABitMask; } struct DdsHeader { public uint dwSize; public Ddsd dwFlags; public uint dwHeight; public uint dwWidth; public uint dwPitchOrLinearSize; public uint dwDepth; public uint dwMipMapCount; public DdsPixelFormat ddspf; public DdsCaps dwCaps; public DdsCaps2 dwCaps2; } static SurfaceFormat GetSurfaceFormat(ref DdsPixelFormat pixelFormat, out bool rbSwap) { rbSwap = false; if (pixelFormat.dwFlags.HasFlag(Ddpf.FourCC)) { switch (pixelFormat.dwFourCC) { case FourCC.A32B32G32R32F: return SurfaceFormat.Vector4; case FourCC.Dxt1: return SurfaceFormat.Dxt1; case FourCC.Dxt2: throw new ContentLoadException("Unsupported compression format DXT2"); case FourCC.Dxt3: return SurfaceFormat.Dxt3; case FourCC.Dxt4: throw new ContentLoadException("Unsupported compression format DXT4"); case FourCC.Dxt5: return SurfaceFormat.Dxt5; } } else if (pixelFormat.dwFlags.HasFlag(Ddpf.Rgb)) { // Uncompressed format if (pixelFormat.dwFlags.HasFlag(Ddpf.AlphaPixels)) { // Format contains RGB and A if (pixelFormat.dwRgbBitCount == 16) { if (pixelFormat.dwABitMask == 0xF) { rbSwap = pixelFormat.dwBBitMask == 0xF0; return SurfaceFormat.Bgra4444; } rbSwap = pixelFormat.dwBBitMask == 0x3E; return SurfaceFormat.Bgra5551; } else if (pixelFormat.dwRgbBitCount == 32) { rbSwap = pixelFormat.dwBBitMask == 0xFF; return SurfaceFormat.Color; } throw new ContentLoadException("Unsupported RGBA pixel format"); } else { // Format contains RGB only if (pixelFormat.dwRgbBitCount == 16) { rbSwap = pixelFormat.dwBBitMask == 0x1F; return SurfaceFormat.Bgr565; } else if (pixelFormat.dwRgbBitCount == 24) { rbSwap = pixelFormat.dwBBitMask == 0xFF; return SurfaceFormat.Color; } else if (pixelFormat.dwRgbBitCount == 32) { rbSwap = pixelFormat.dwBBitMask == 0xFF; return SurfaceFormat.Color; } throw new ContentLoadException("Unsupported RGB pixel format"); } } //else if (pixelFormat.dwFlags.HasFlag(Ddpf.Luminance)) //{ // return SurfaceFormat.Alpha8; //} throw new ContentLoadException("Unsupported pixel format"); } static BitmapContent CreateBitmapContent(SurfaceFormat format, int width, int height) { switch (format) { case SurfaceFormat.Color: return new PixelBitmapContent(width, height); case SurfaceFormat.Bgra4444: return new PixelBitmapContent(width, height); case SurfaceFormat.Bgra5551: return new PixelBitmapContent(width, height); case SurfaceFormat.Bgr565: return new PixelBitmapContent(width, height); case SurfaceFormat.Dxt1: return new Dxt1BitmapContent(width, height); case SurfaceFormat.Dxt3: return new Dxt3BitmapContent(width, height); case SurfaceFormat.Dxt5: return new Dxt5BitmapContent(width, height); case SurfaceFormat.Vector4: return new PixelBitmapContent(width, height); } throw new ContentLoadException("Unsupported SurfaceFormat " + format); } static int GetBitmapSize(SurfaceFormat format, int width, int height) { // It is recommended that the dwPitchOrLinearSize field is ignored and we calculate it ourselves // https://msdn.microsoft.com/en-us/library/bb943991.aspx int pitch = 0; int rows = 0; switch (format) { case SurfaceFormat.Color: case SurfaceFormat.Bgra4444: case SurfaceFormat.Bgra5551: case SurfaceFormat.Bgr565: case SurfaceFormat.Vector4: pitch = width * format.GetSize(); rows = height; break; case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt5: pitch = ((width + 3) / 4) * format.GetSize(); rows = (height + 3) / 4; break; default: throw new ContentLoadException("Unsupported SurfaceFormat " + format); } return pitch * rows; } static internal TextureContent Import(string filename, ContentImporterContext context) { var identity = new ContentIdentity(filename); TextureContent output = null; using (var reader = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read))) { // Read signature ("DDS ") var valid = reader.ReadByte() == 0x44; valid = valid && reader.ReadByte() == 0x44; valid = valid && reader.ReadByte() == 0x53; valid = valid && reader.ReadByte() == 0x20; if (!valid) throw new ContentLoadException("Invalid file signature"); var header = new DdsHeader(); // Read DDS_HEADER header.dwSize = reader.ReadUInt32(); if (header.dwSize != 124) throw new ContentLoadException("Invalid DDS_HEADER dwSize value"); header.dwFlags = (Ddsd)reader.ReadUInt32(); header.dwHeight = reader.ReadUInt32(); header.dwWidth = reader.ReadUInt32(); header.dwPitchOrLinearSize = reader.ReadUInt32(); header.dwDepth = reader.ReadUInt32(); header.dwMipMapCount = reader.ReadUInt32(); // The next 11 DWORDs are reserved and unused for (int i = 0; i < 11; ++i) reader.ReadUInt32(); // Read DDS_PIXELFORMAT header.ddspf.dwSize = reader.ReadUInt32(); if (header.ddspf.dwSize != 32) throw new ContentLoadException("Invalid DDS_PIXELFORMAT dwSize value"); header.ddspf.dwFlags = (Ddpf)reader.ReadUInt32(); header.ddspf.dwFourCC = (FourCC)reader.ReadUInt32(); header.ddspf.dwRgbBitCount = reader.ReadUInt32(); header.ddspf.dwRBitMask = reader.ReadUInt32(); header.ddspf.dwGBitMask = reader.ReadUInt32(); header.ddspf.dwBBitMask = reader.ReadUInt32(); header.ddspf.dwABitMask = reader.ReadUInt32(); // Continue reading DDS_HEADER header.dwCaps = (DdsCaps)reader.ReadUInt32(); header.dwCaps2 = (DdsCaps2)reader.ReadUInt32(); // dwCaps3 unused reader.ReadUInt32(); // dwCaps4 unused reader.ReadUInt32(); // dwReserved2 unused reader.ReadUInt32(); // Check for the existence of the DDS_HEADER_DXT10 struct next if (header.ddspf.dwFlags == Ddpf.FourCC && header.ddspf.dwFourCC == FourCC.Dx10) { throw new ContentLoadException("Unsupported DDS_HEADER_DXT10 struct found"); } int faceCount = 1; int mipMapCount = (int)(header.dwCaps.HasFlag(DdsCaps.MipMap) ? header.dwMipMapCount : 1); if (header.dwCaps2.HasFlag(DdsCaps2.Cubemap)) { if (!header.dwCaps2.HasFlag(DdsCaps2.CubemapAllFaces)) throw new ContentLoadException("Incomplete cubemap in DDS file"); faceCount = 6; output = new TextureCubeContent() { Identity = identity }; } else { output = new Texture2DContent() { Identity = identity }; } bool rbSwap; var format = GetSurfaceFormat(ref header.ddspf, out rbSwap); for (int f = 0; f < faceCount; ++f) { var w = (int)header.dwWidth; var h = (int)header.dwHeight; var mipMaps = new MipmapChain(); for (int m = 0; m < mipMapCount; ++m) { var content = CreateBitmapContent(format, w, h); var byteCount = GetBitmapSize(format, w, h); // A 24-bit format is slightly different if (header.ddspf.dwRgbBitCount == 24) byteCount = 3 * w * h; var bytes = reader.ReadBytes(byteCount); if (rbSwap) { switch (format) { case SurfaceFormat.Bgr565: ByteSwapBGR565(bytes); break; case SurfaceFormat.Bgra4444: ByteSwapBGRA4444(bytes); break; case SurfaceFormat.Bgra5551: ByteSwapBGRA5551(bytes); break; case SurfaceFormat.Color: if (header.ddspf.dwRgbBitCount == 32) ByteSwapRGBX(bytes); else if (header.ddspf.dwRgbBitCount == 24) ByteSwapRGB(bytes); break; } } if ((format == SurfaceFormat.Color) && header.ddspf.dwFlags.HasFlag(Ddpf.Rgb) && !header.ddspf.dwFlags.HasFlag(Ddpf.AlphaPixels)) { // Fill or add alpha with opaque if (header.ddspf.dwRgbBitCount == 32) ByteFillAlpha(bytes); else if (header.ddspf.dwRgbBitCount == 24) ByteExpandAlpha(ref bytes); } content.SetPixelData(bytes); mipMaps.Add(content); w = MathHelper.Max(1, w / 2); h = MathHelper.Max(1, h / 2); } output.Faces[f] = mipMaps; } } return output; } static void ByteFillAlpha(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 4) { bytes[i + 3] = 255; } } static void ByteExpandAlpha(ref byte[] bytes) { var rgba = new byte[bytes.Length + (bytes.Length / 3)]; int j = 0; for (int i = 0; i < bytes.Length; i += 3) { rgba[j] = bytes[i]; rgba[j + 1] = bytes[i + 1]; rgba[j + 2] = bytes[i + 2]; rgba[j + 3] = 255; j += 4; } bytes = rgba; } static void ByteSwapRGB(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 3) { byte r = bytes[i]; bytes[i] = bytes[i + 2]; bytes[i + 2] = r; } } static void ByteSwapRGBX(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 4) { byte r = bytes[i]; bytes[i] = bytes[i + 2]; bytes[i + 2] = r; } } static void ByteSwapBGRA4444(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 2) { var r = bytes[i] & 0xF0; var b = bytes[i + 1] & 0xF0; bytes[i] = (byte)((bytes[i] & 0x0F) | b); bytes[i + 1] = (byte)((bytes[i + 1] & 0x0F) | r); } } static void ByteSwapBGRA5551(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 2) { var r = (bytes[i] & 0xF8) >> 3; var b = (bytes[i + 1] & 0x3E) >> 1; bytes[i] = (byte)((bytes[i] & 0x07) | (b << 3)); bytes[i + 1] = (byte)((bytes[i + 1] & 0xC1) | (r << 1)); } } static void ByteSwapBGR565(byte[] bytes) { for (int i = 0; i < bytes.Length; i += 2) { var r = (bytes[i] & 0xF8) >> 3; var b = bytes[i + 1] & 0x1F; bytes[i] = (byte)((bytes[i] & 0x07) | (b << 3)); bytes[i + 1] = (byte)((bytes[i + 1] & 0xE0) | r); } } internal static void WriteUncompressed(string filename, BitmapContent bitmapContent) { using (var writer = new BinaryWriter(new FileStream(filename, FileMode.Create, FileAccess.Write))) { // Write signature ("DDS ") writer.Write((byte)0x44); writer.Write((byte)0x44); writer.Write((byte)0x53); writer.Write((byte)0x20); var header = new DdsHeader(); header.dwSize = 124; header.dwFlags = Ddsd.Caps | Ddsd.Width | Ddsd.Height | Ddsd.Pitch | Ddsd.PixelFormat; header.dwWidth = (uint)bitmapContent.Width; header.dwHeight = (uint)bitmapContent.Height; header.dwPitchOrLinearSize = (uint)(bitmapContent.Width * 4); header.dwDepth = (uint)0; header.dwMipMapCount = (uint)0; writer.Write((uint)header.dwSize); writer.Write((uint)header.dwFlags); writer.Write((uint)header.dwHeight); writer.Write((uint)header.dwWidth); writer.Write((uint)header.dwPitchOrLinearSize); writer.Write((uint)header.dwDepth); writer.Write((uint)header.dwMipMapCount); // 11 unsed and reserved DWORDS. writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); SurfaceFormat format; if (!bitmapContent.TryGetFormat(out format) || format != SurfaceFormat.Color) throw new NotSupportedException("Unsupported bitmap content!"); header.ddspf.dwSize = 32; header.ddspf.dwFlags = Ddpf.AlphaPixels | Ddpf.Rgb; header.ddspf.dwFourCC = 0; header.ddspf.dwRgbBitCount = 32; header.ddspf.dwRBitMask = 0x000000ff; header.ddspf.dwGBitMask = 0x0000ff00; header.ddspf.dwBBitMask = 0x00ff0000; header.ddspf.dwABitMask = 0xff000000; // Write the DDS_PIXELFORMAT writer.Write((uint)header.ddspf.dwSize); writer.Write((uint)header.ddspf.dwFlags); writer.Write((uint)header.ddspf.dwFourCC); writer.Write((uint)header.ddspf.dwRgbBitCount); writer.Write((uint)header.ddspf.dwRBitMask); writer.Write((uint)header.ddspf.dwGBitMask); writer.Write((uint)header.ddspf.dwBBitMask); writer.Write((uint)header.ddspf.dwABitMask); header.dwCaps = DdsCaps.Texture; header.dwCaps2 = 0; // Continue reading DDS_HEADER writer.Write((uint)header.dwCaps); writer.Write((uint)header.dwCaps2); // More reserved unused DWORDs. writer.Write((uint)0); writer.Write((uint)0); writer.Write((uint)0); // Write out the face data. writer.Write(bitmapContent.GetPixelData()); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/SamplerStateContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { public class SamplerStateContent //: ContentItem { public TextureAddressModeContent AddressU; public TextureAddressModeContent AddressV; public TextureAddressModeContent AddressW; public Color BorderColor; public int MaxAnisotropy; public int MaxMipLevel; public float MipMapLevelOfDetailBias; public TextureFilterContent Filter; public TextureFilterModeContent FilterMode; public CompareFunctionContent ComparisonFunction; public SamplerStateContent() { AddressU = TextureAddressModeContent.Wrap; AddressV = TextureAddressModeContent.Wrap; AddressW = TextureAddressModeContent.Wrap; BorderColor = Color.White; MaxAnisotropy = 4; MaxMipLevel = 0; MipMapLevelOfDetailBias = 0.0f; Filter = TextureFilterContent.Linear; FilterMode = TextureFilterModeContent.Default; ComparisonFunction = CompareFunctionContent.Never; } } /// /// Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0. /// public enum TextureAddressModeContent { /// /// Texels outside range will form the tile at every integer junction. /// Wrap, /// /// Texels outside range will be set to color of 0.0 or 1.0 texel. /// Clamp, /// /// Same as but tiles will also flipped at every integer junction. /// Mirror, /// /// Texels outside range will be set to the border color. /// Border } public enum TextureFilterTypeContent { None, Point, Linear, Anisotropic, } /// /// Defines filtering types for texture sampler. /// public enum TextureFilterContent { /// /// Use linear filtering. /// Linear, /// /// Use point filtering. /// Point, /// /// Use anisotropic filtering. /// Anisotropic, /// /// Use linear filtering to shrink or expand, and point filtering between mipmap levels (mip). /// LinearMipPoint, /// /// Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipmap levels. /// PointMipLinear, /// /// Use linear filtering to shrink, point filtering to expand, and linear filtering between mipmap levels. /// MinLinearMagPointMipLinear, /// /// Use linear filtering to shrink, point filtering to expand, and point filtering between mipmap levels. /// MinLinearMagPointMipPoint, /// /// Use point filtering to shrink, linear filtering to expand, and linear filtering between mipmap levels. /// MinPointMagLinearMipLinear, /// /// Use point filtering to shrink, linear filtering to expand, and point filtering between mipmap levels. /// MinPointMagLinearMipPoint } /// /// Filtering modes for texture samplers. /// public enum TextureFilterModeContent { Default, Comparison } /// /// The comparison function used for depth, stencil, and alpha tests. /// public enum CompareFunctionContent { /// /// Always passes the test. /// Always, /// /// Never passes the test. /// Never, /// /// Passes the test when the new pixel value is less than current pixel value. /// Less, /// /// Passes the test when the new pixel value is less than or equal to current pixel value. /// LessEqual, /// /// Passes the test when the new pixel value is equal to current pixel value. /// Equal, /// /// Passes the test when the new pixel value is greater than or equal to current pixel value. /// GreaterEqual, /// /// Passes the test when the new pixel value is greater than current pixel value. /// Greater, /// /// Passes the test when the new pixel value does not equal to current pixel value. /// NotEqual } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/FXParser.tpg ================================================ // KNI Effect Parser // // For use with our fork of the "Tiny Parser Generator" // https://github.com/kniEngine/TinyPG // <% @TinyPG Namespace="Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser" Language="C#"%> [Skip] BlockComment -> @"/\*([^*]|\*[^/])*\*/"; [Skip] Comment -> @"//[^\n\r]*"; [Skip] Whitespace -> @"[ \t\n\r]+"; [FileAndLine] LinePragma -> @"^[ \t]*#line[ \t]*(?\d*)[ \t]*(\""(?[^\""\\]*(?:\\.[^\""\\]*)*)\"")?\n"; // TOKENS [IgnoreCase] Pass -> @"pass"; [IgnoreCase] Technique -> @"technique"; [IgnoreCase] Sampler -> @"sampler1D|sampler2D|sampler3D|samplerCUBE|SamplerState|sampler"; [IgnoreCase] SamplerState -> @"sampler_state"; [IgnoreCase] VertexShader -> @"VertexShader"; [IgnoreCase] PixelShader -> @"PixelShader"; [IgnoreCase] ComputeShader -> @"ComputeShader"; [IgnoreCase] Register -> @"register"; [IgnoreCase] Boolean -> @"true|false|0|1"; Number -> @"[+-]? ?[0-9]?\.?[0-9]+[fF]?"; [IgnoreCase] HexColor -> @"0x[0-9a-f]{6}([0-9a-f][0-9a-f])?"; Identifier -> @"[A-Za-z_][A-Za-z0-9_]*"; OpenBracket -> @"{"; CloseBracket -> @"}"; Equals -> @"="; Colon -> @":"; Comma -> @","; Semicolon -> @";"; Or -> @"\|"; OpenParenthesis -> @"\("; CloseParenthesis -> @"\)"; OpenSquareBracket -> @"\["; CloseSquareBracket -> @"\]"; LessThan -> @"<"; GreaterThan -> @">"; [IgnoreCase] Compile -> @"compile"; ShaderModel -> @"[A-Za-z_][A-Za-z0-9_]*"; Code -> @"[\S]+"; EndOfFile -> @"^$"; // Sampler states [IgnoreCase] MinFilter -> @"MinFilter"; [IgnoreCase] MagFilter -> @"MagFilter"; [IgnoreCase] MipFilter -> @"MipFilter"; [IgnoreCase] Filter -> @"Filter"; [IgnoreCase] Texture -> @"Texture"; [IgnoreCase] AddressU -> @"AddressU"; [IgnoreCase] AddressV -> @"AddressV"; [IgnoreCase] AddressW -> @"AddressW"; [IgnoreCase] BorderColor -> @"BorderColor"; [IgnoreCase] MaxAnisotropy -> @"MaxAnisotropy"; [IgnoreCase] MaxMipLevel -> @"MaxMipLevel|MaxLod"; [IgnoreCase] MipLodBias -> @"MipLodBias"; // Address Mode [IgnoreCase] Clamp -> @"Clamp"; [IgnoreCase] Wrap -> @"Wrap"; [IgnoreCase] Mirror -> @"Mirror"; [IgnoreCase] Border -> @"Border"; // Texture Filters [IgnoreCase] None -> @"None"; [IgnoreCase] Linear -> @"Linear"; [IgnoreCase] Point -> @"Point"; [IgnoreCase] Anisotropic -> @"Anisotropic"; // Render states [IgnoreCase] AlphaBlendEnable -> @"AlphaBlendEnable"; [IgnoreCase] SrcBlend -> @"SrcBlend"; [IgnoreCase] DestBlend -> @"DestBlend"; [IgnoreCase] BlendOp -> @"BlendOp"; [IgnoreCase] ColorWriteEnable -> @"ColorWriteEnable"; [IgnoreCase] ZEnable -> @"ZEnable"; [IgnoreCase] ZWriteEnable -> @"ZWriteEnable"; [IgnoreCase] ZFunc-> @"ZFunc"; [IgnoreCase] DepthBias -> @"DepthBias"; [IgnoreCase] CullMode -> @"CullMode"; [IgnoreCase] FillMode -> @"FillMode"; [IgnoreCase] MultiSampleAntiAlias -> @"MultiSampleAntiAlias"; [IgnoreCase] ScissorTestEnable -> @"ScissorTestEnable"; [IgnoreCase] SlopeScaleDepthBias -> @"SlopeScaleDepthBias"; [IgnoreCase] StencilEnable -> @"StencilEnable"; [IgnoreCase] StencilFail -> @"StencilFail"; [IgnoreCase] StencilFunc -> @"StencilFunc"; [IgnoreCase] StencilMask -> @"StencilMask"; [IgnoreCase] StencilPass -> @"StencilPass"; [IgnoreCase] StencilRef -> @"StencilRef"; [IgnoreCase] StencilWriteMask -> @"StencilWriteMask"; [IgnoreCase] StencilZFail -> @"StencilZFail"; // Compare function [IgnoreCase] Never -> @"Never"; [IgnoreCase] Less -> @"Less"; [IgnoreCase] Equal -> @"Equal"; [IgnoreCase] LessEqual -> @"LessEqual"; [IgnoreCase] Greater -> @"Greater"; [IgnoreCase] NotEqual -> @"NotEqual"; [IgnoreCase] GreaterEqual -> @"GreaterEqual"; [IgnoreCase] Always -> @"Always"; // Stencil operation [IgnoreCase] Keep -> @"Keep"; [IgnoreCase] Zero -> @"Zero"; [IgnoreCase] Replace -> @"Replace"; [IgnoreCase] IncrSat -> @"IncrSat"; [IgnoreCase] DecrSat -> @"DecrSat"; [IgnoreCase] Invert -> @"Invert"; [IgnoreCase] Incr -> @"Incr"; [IgnoreCase] Decr -> @"Decr"; // Colors [IgnoreCase] Red -> @"Red"; [IgnoreCase] Green -> @"Green"; [IgnoreCase] Blue -> @"Blue"; [IgnoreCase] Alpha -> @"Alpha"; [IgnoreCase] All -> @"All"; // Cull mode [IgnoreCase] Cw -> @"Cw"; [IgnoreCase] Ccw -> @"Ccw"; // Fill mode [IgnoreCase] Solid -> @"Solid"; [IgnoreCase] WireFrame -> @"WireFrame"; // Blend function [IgnoreCase] Add -> @"Add"; [IgnoreCase] Subtract -> @"Subtract"; [IgnoreCase] RevSubtract -> @"RevSubtract"; [IgnoreCase] Min -> @"Min"; [IgnoreCase] Max -> @"Max"; // Blend [IgnoreCase] Zero -> @"Zero"; [IgnoreCase] One -> @"One"; [IgnoreCase] SrcColor -> @"SrcColor"; [IgnoreCase] InvSrcColor -> @"InvSrcColor"; [IgnoreCase] SrcAlpha -> @"SrcAlpha"; [IgnoreCase] InvSrcAlpha -> @"InvSrcAlpha"; [IgnoreCase] DestAlpha -> @"DestAlpha"; [IgnoreCase] InvDestAlpha -> @"InvDestAlpha"; [IgnoreCase] DestColor -> @"DestColor"; [IgnoreCase] InvDestColor -> @"InvDestColor"; [IgnoreCase] SrcAlphaSat -> @"SrcAlphaSat"; [IgnoreCase] BlendFactor -> @"BlendFactor"; [IgnoreCase] InvBlendFactor -> @"InvBlendFactor"; // Productions Start -> (Code | Technique_Declaration | Sampler_Declaration)* EndOfFile { var shader = new ShaderInfo(); foreach (var node in Nodes) node.Eval(tree, shader); return shader; }; Technique_Declaration -> Technique Identifier? OpenBracket Pass_Declaration+ CloseBracket { var technique = new TechniqueInfo(); technique.name = $Identifier as string ?? string.Empty; technique.startPos = Token.StartPos; technique.length = Token.Length; foreach (var node in Nodes) node.Eval(tree, technique); // Make sure we have at least one pass. if (technique.Passes.Count > 0) { var shaderInfo = paramlist[0] as ShaderInfo; shaderInfo.Techniques.Add(technique); } return null; }; FillMode_Solid -> Solid { return FillModeContent.Solid; }; FillMode_WireFrame -> WireFrame { return FillModeContent.WireFrame; }; FillModes -> (FillMode_Solid|FillMode_WireFrame) { return $FillMode_Solid ?? $FillMode_WireFrame; }; CullMode_None -> None { return CullModeContent.None; }; CullMode_Cw -> Cw { return CullModeContent.CullClockwiseFace; }; CullMode_Ccw -> Ccw { return CullModeContent.CullCounterClockwiseFace; }; CullModes -> (CullMode_None|CullMode_Cw|CullMode_Ccw) { return $CullMode_None ?? $CullMode_Cw ?? $CullMode_Ccw; }; Colors_None -> None { return ColorWriteChannelsContent.None; }; Colors_Red -> Red { return ColorWriteChannelsContent.Red; }; Colors_Green -> Green { return ColorWriteChannelsContent.Green; }; Colors_Blue -> Blue { return ColorWriteChannelsContent.Blue; }; Colors_Alpha -> Alpha { return ColorWriteChannelsContent.Alpha; }; Colors_All -> All { return ColorWriteChannelsContent.All; }; Colors_Boolean -> Boolean { return ParseTreeTools.ParseBool((string)$Boolean) ? ColorWriteChannelsContent.All : ColorWriteChannelsContent.None; }; Colors -> (Colors_Red|Colors_Green|Colors_Blue|Colors_Alpha|Colors_None|Colors_All|Colors_Boolean) { return $Colors_Red ?? $Colors_Green ?? $Colors_Blue ?? $Colors_Alpha ?? $Colors_None ?? $Colors_All ?? $Colors_Boolean; }; ColorsMasks -> Colors (Or Colors)? (Or Colors)? (Or Colors)? { return (ColorWriteChannelsContent)($Colors[0] ?? 0) | (ColorWriteChannelsContent)($Colors[1] ?? 0) | (ColorWriteChannelsContent)($Colors[2] ?? 0) | (ColorWriteChannelsContent)($Colors[3] ?? 0); }; Blend_Zero -> Zero { return BlendContent.Zero; }; Blend_One -> One { return BlendContent.One; }; Blend_SrcColor -> SrcColor { return BlendContent.SourceColor; }; Blend_InvSrcColor -> InvSrcColor { return BlendContent.InverseSourceColor; }; Blend_SrcAlpha -> SrcAlpha { return BlendContent.SourceAlpha; }; Blend_InvSrcAlpha -> InvSrcAlpha { return BlendContent.InverseSourceAlpha; }; Blend_DestAlpha -> DestAlpha { return BlendContent.DestinationAlpha; }; Blend_InvDestAlpha -> InvDestAlpha { return BlendContent.InverseDestinationAlpha; }; Blend_DestColor -> DestColor { return BlendContent.DestinationColor; }; Blend_InvDestColor -> InvDestColor { return BlendContent.InverseDestinationColor; }; Blend_SrcAlphaSat -> SrcAlphaSat { return BlendContent.SourceAlphaSaturation; }; Blend_BlendFactor -> BlendFactor { return BlendContent.BlendFactor; }; Blend_InvBlendFactor -> InvBlendFactor { return BlendContent.InverseBlendFactor; }; Blends -> ( Blend_Zero|Blend_One|Blend_SrcColor|Blend_InvSrcColor|Blend_SrcAlpha|Blend_InvSrcAlpha| Blend_DestAlpha|Blend_InvDestAlpha|Blend_DestColor|Blend_InvDestColor|Blend_SrcAlphaSat| Blend_BlendFactor|Blend_InvBlendFactor) { return $Blend_Zero ?? $Blend_One ?? $Blend_SrcColor ?? $Blend_InvSrcColor ?? $Blend_SrcAlpha ?? $Blend_InvSrcAlpha ?? $Blend_DestAlpha ?? $Blend_InvDestAlpha ?? $Blend_DestColor ?? $Blend_InvDestColor ?? $Blend_SrcAlphaSat ?? $Blend_BlendFactor ?? $Blend_InvBlendFactor; }; BlendOp_Add -> Add { return BlendFunctionContent.Add; }; BlendOp_Subtract -> Subtract { return BlendFunctionContent.Subtract; }; BlendOp_RevSubtract -> RevSubtract { return BlendFunctionContent.ReverseSubtract; }; BlendOp_Min -> Min { return BlendFunctionContent.Min; }; BlendOp_Max -> Max { return BlendFunctionContent.Max; }; BlendOps -> (BlendOp_Add|BlendOp_Subtract|BlendOp_RevSubtract|BlendOp_Min|BlendOp_Max) { return $BlendOp_Add ?? $BlendOp_Subtract ?? $BlendOp_RevSubtract ?? $BlendOp_Min ?? $BlendOp_Max; }; CmpFunc_Never -> Never { return CompareFunctionContent.Never; }; CmpFunc_Less -> Less { return CompareFunctionContent.Less; }; CmpFunc_Equal -> Equal { return CompareFunctionContent.Equal; }; CmpFunc_LessEqual -> LessEqual { return CompareFunctionContent.LessEqual; }; CmpFunc_Greater -> Greater { return CompareFunctionContent.Greater; }; CmpFunc_NotEqual -> NotEqual { return CompareFunctionContent.NotEqual; }; CmpFunc_GreaterEqual -> GreaterEqual { return CompareFunctionContent.GreaterEqual; }; CmpFunc_Always -> Always { return CompareFunctionContent.Always; }; CmpFunc -> (CmpFunc_Never|CmpFunc_Less|CmpFunc_Equal|CmpFunc_LessEqual|CmpFunc_Greater|CmpFunc_NotEqual|CmpFunc_GreaterEqual|CmpFunc_Always) { return $CmpFunc_Never ?? $CmpFunc_Less ?? $CmpFunc_Equal ?? $CmpFunc_LessEqual ?? $CmpFunc_Greater ?? $CmpFunc_NotEqual ?? $CmpFunc_GreaterEqual ?? $CmpFunc_Always; }; StencilOp_Keep -> Keep { return StencilOperationContent.Keep; }; StencilOp_Zero -> Zero { return StencilOperationContent.Zero; }; StencilOp_Replace -> Replace { return StencilOperationContent.Replace; }; StencilOp_IncrSat -> IncrSat { return StencilOperationContent.IncrementSaturation; }; StencilOp_DecrSat -> DecrSat { return StencilOperationContent.DecrementSaturation; }; StencilOp_Invert -> Invert { return StencilOperationContent.Invert; }; StencilOp_Incr -> Incr { return StencilOperationContent.Increment; }; StencilOp_Decr -> Decr { return StencilOperationContent.Decrement; }; StencilOp -> (StencilOp_Keep|StencilOp_Zero|StencilOp_Replace|StencilOp_IncrSat|StencilOp_DecrSat|StencilOp_Invert|StencilOp_Incr|StencilOp_Decr) { return $StencilOp_Keep ?? $StencilOp_Zero ?? $StencilOp_Replace ?? $StencilOp_IncrSat ?? $StencilOp_DecrSat ?? $StencilOp_Invert ?? $StencilOp_Incr ?? $StencilOp_Decr; }; // Render states Render_State_CullMode -> CullMode Equals CullModes Semicolon { (paramlist[0] as PassInfo).CullMode = (CullModeContent)$CullModes; return null; }; Render_State_FillMode -> FillMode Equals FillModes Semicolon { (paramlist[0] as PassInfo).FillMode = (FillModeContent)$FillModes; return null; }; Render_State_AlphaBlendEnable -> AlphaBlendEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).AlphaBlendEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_SrcBlend -> SrcBlend Equals Blends Semicolon { (paramlist[0] as PassInfo).SrcBlend = (BlendContent)$Blends; return null; }; Render_State_DestBlend -> DestBlend Equals Blends Semicolon { (paramlist[0] as PassInfo).DestBlend = (BlendContent)$Blends; return null; }; Render_State_BlendOp -> BlendOp Equals BlendOps Semicolon { (paramlist[0] as PassInfo).BlendOp = (BlendFunctionContent)$BlendOps; return null; }; Render_State_ColorWriteEnable -> ColorWriteEnable Equals ColorsMasks Semicolon { (paramlist[0] as PassInfo).ColorWriteEnable = (ColorWriteChannelsContent)$ColorsMasks; return null; }; Render_State_DepthBias -> DepthBias Equals Number Semicolon { (paramlist[0] as PassInfo).DepthBias = ParseTreeTools.ParseFloat((string)$Number); return null; }; Render_State_SlopeScaleDepthBias -> SlopeScaleDepthBias Equals Number Semicolon { (paramlist[0] as PassInfo).SlopeScaleDepthBias = ParseTreeTools.ParseFloat((string)$Number); return null; }; Render_State_ZEnable -> ZEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ZEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_ZWriteEnable -> ZWriteEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ZWriteEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_ZFunc -> ZFunc Equals CmpFunc Semicolon { (paramlist[0] as PassInfo).DepthBufferFunction = (CompareFunctionContent)$CmpFunc; return null; }; Render_State_MultiSampleAntiAlias -> MultiSampleAntiAlias Equals Boolean Semicolon { (paramlist[0] as PassInfo).MultiSampleAntiAlias = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_ScissorTestEnable -> ScissorTestEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).ScissorTestEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_StencilEnable -> StencilEnable Equals Boolean Semicolon { (paramlist[0] as PassInfo).StencilEnable = ParseTreeTools.ParseBool((string)$Boolean); return null; }; Render_State_StencilFail -> StencilFail Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilFail = (StencilOperationContent)$StencilOp; return null; }; Render_State_StencilFunc -> StencilFunc Equals CmpFunc Semicolon { (paramlist[0] as PassInfo).StencilFunc = (CompareFunctionContent)$CmpFunc; return null; }; Render_State_StencilMask -> StencilMask Equals Number Semicolon { (paramlist[0] as PassInfo).StencilMask = ParseTreeTools.ParseInt((string)$Number); return null; }; Render_State_StencilPass -> StencilPass Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilPass = (StencilOperationContent)$StencilOp; return null; }; Render_State_StencilRef -> StencilRef Equals Number Semicolon { (paramlist[0] as PassInfo).StencilRef = ParseTreeTools.ParseInt((string)$Number); return null; }; Render_State_StencilWriteMask -> StencilWriteMask Equals Number Semicolon { (paramlist[0] as PassInfo).StencilWriteMask = ParseTreeTools.ParseInt((string)$Number); return null; }; Render_State_StencilZFail -> StencilZFail Equals StencilOp Semicolon { (paramlist[0] as PassInfo).StencilZFail = (StencilOperationContent)$StencilOp; return null; }; Render_State_Expression -> Render_State_CullMode | Render_State_FillMode | Render_State_AlphaBlendEnable | Render_State_SrcBlend | Render_State_DestBlend | Render_State_BlendOp | Render_State_ColorWriteEnable | Render_State_DepthBias | Render_State_SlopeScaleDepthBias | Render_State_ZEnable | Render_State_ZWriteEnable | Render_State_ZFunc | Render_State_MultiSampleAntiAlias | Render_State_ScissorTestEnable | Render_State_StencilEnable | Render_State_StencilFail | Render_State_StencilFunc | Render_State_StencilMask | Render_State_StencilPass | Render_State_StencilRef | Render_State_StencilWriteMask | Render_State_StencilZFail; Pass_Declaration -> Pass Identifier? OpenBracket (VertexShader_Pass_Expression | PixelShader_Pass_Expression | ComputeShader_Pass_Expression | Render_State_Expression)* CloseBracket { var pass = new PassInfo(); pass.name = $Identifier as string ?? string.Empty; foreach (var node in Nodes) node.Eval(tree, pass); // We need to have at least one shader to keep this pass. if (!string.IsNullOrEmpty(pass.psFunction) || !string.IsNullOrEmpty(pass.vsFunction) || !string.IsNullOrEmpty(pass.csFunction)) { var technique = paramlist[0] as TechniqueInfo; technique.Passes.Add(pass); } return null; }; VertexShader_Pass_Expression -> VertexShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon { var pass = paramlist[0] as PassInfo; pass.vsModel = $ShaderModel as string; pass.vsFunction = $Identifier as string; return null; }; PixelShader_Pass_Expression -> PixelShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon { var pass = paramlist[0] as PassInfo; pass.psModel = $ShaderModel as string; pass.psFunction = $Identifier as string; return null; }; ComputeShader_Pass_Expression -> ComputeShader Equals Compile ShaderModel Identifier OpenParenthesis CloseParenthesis Semicolon { var pass = paramlist[0] as PassInfo; pass.csModel = $ShaderModel as string; pass.csFunction = $Identifier as string; return null; }; AddressMode_Clamp -> Clamp { return TextureAddressModeContent.Clamp; }; AddressMode_Wrap -> Wrap { return TextureAddressModeContent.Wrap; }; AddressMode_Mirror -> Mirror { return TextureAddressModeContent.Mirror; }; AddressMode_Border -> Border { return TextureAddressModeContent.Border; }; AddressMode -> (AddressMode_Clamp|AddressMode_Wrap|AddressMode_Mirror|AddressMode_Border) { return $AddressMode_Clamp ?? $AddressMode_Wrap ?? $AddressMode_Mirror ?? $AddressMode_Border; }; TextureFilter_None -> None { return TextureFilterTypeContent.None; }; TextureFilter_Linear -> Linear { return TextureFilterTypeContent.Linear; }; TextureFilter_Point -> Point { return TextureFilterTypeContent.Point; }; TextureFilter_Anisotropic -> Anisotropic { return TextureFilterTypeContent.Anisotropic; }; TextureFilter -> (TextureFilter_None|TextureFilter_Linear|TextureFilter_Point|TextureFilter_Anisotropic) { return $TextureFilter_None ?? $TextureFilter_Linear ?? $TextureFilter_Point ?? $TextureFilter_Anisotropic; }; // Sampler States Sampler_State_Texture -> Texture Equals (LessThan|OpenParenthesis) Identifier (GreaterThan|CloseParenthesis) Semicolon { (paramlist[0] as SamplerStateInfo).TextureName = (string)$Identifier; return null; }; Sampler_State_MinFilter -> MinFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MinFilter = (TextureFilterTypeContent)$TextureFilter; return null; }; Sampler_State_MagFilter -> MagFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MagFilter = (TextureFilterTypeContent)$TextureFilter; return null; }; Sampler_State_MipFilter -> MipFilter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).MipFilter = (TextureFilterTypeContent)$TextureFilter; return null; }; Sampler_State_Filter -> Filter Equals TextureFilter Semicolon { (paramlist[0] as SamplerStateInfo).Filter = (TextureFilterTypeContent)$TextureFilter; return null; }; Sampler_State_AddressU -> AddressU Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressU = (TextureAddressModeContent)$AddressMode; return null; }; Sampler_State_AddressV -> AddressV Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressV = (TextureAddressModeContent)$AddressMode; return null; }; Sampler_State_AddressW -> AddressW Equals AddressMode Semicolon { (paramlist[0] as SamplerStateInfo).AddressW = (TextureAddressModeContent)$AddressMode; return null; }; Sampler_State_BorderColor -> BorderColor Equals HexColor Semicolon { (paramlist[0] as SamplerStateInfo).BorderColor = ParseTreeTools.ParseColor((string)$HexColor); return null; }; Sampler_State_MaxMipLevel -> MaxMipLevel Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MaxMipLevel = ParseTreeTools.ParseInt((string)$Number); return null; }; Sampler_State_MaxAnisotropy -> MaxAnisotropy Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MaxAnisotropy = ParseTreeTools.ParseInt((string)$Number); return null; }; Sampler_State_MipLodBias -> MipLodBias Equals Number Semicolon { (paramlist[0] as SamplerStateInfo).MipMapLevelOfDetailBias = ParseTreeTools.ParseFloat((string)$Number); return null; }; Sampler_State_Expression -> Sampler_State_Texture | Sampler_State_MinFilter | Sampler_State_MagFilter | Sampler_State_MipFilter | Sampler_State_Filter | Sampler_State_AddressU | Sampler_State_AddressV | Sampler_State_AddressW | Sampler_State_BorderColor | Sampler_State_MaxMipLevel | Sampler_State_MaxAnisotropy | Sampler_State_MipLodBias; Sampler_Register_Expression -> Colon Register OpenParenthesis Identifier (Comma Identifier (OpenSquareBracket Number CloseSquareBracket)?)? CloseParenthesis { return null; }; Sampler_Declaration_States -> (Equals SamplerState)? OpenBracket Sampler_State_Expression* CloseBracket; Sampler_Declaration -> Sampler Identifier Sampler_Register_Expression* Sampler_Declaration_States? (Semicolon | Comma | CloseParenthesis) { // if there is a comma or closing paren at the end this is a sampler as a parameter of a function if ($Semicolon == null) return null; var sampler = new SamplerStateInfo(); sampler.Name = $Identifier[0] as string; foreach (ParseNode node in Nodes) node.Eval(tree, sampler); var shaderInfo = paramlist[0] as ShaderInfo; shaderInfo.SamplerStates.Add(sampler.Name, sampler); return null; }; ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ParseTree.cs ================================================ // Generated by TinyPG v1.3 available at www.codeproject.com using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { #region ParseTree [Serializable] public class ParseErrors : List { } [Serializable] public class ParseError { private string file; private string message; private int code; private int line; private int col; private int pos; private int length; public string File { get { return file; } } public int Code { get { return code; } } public int Line { get { return line; } } public int Column { get { return col; } } public int Position { get { return pos; } } public int Length { get { return length; } } public string Message { get { return message; } } // just for the sake of serialization public ParseError() { } public ParseError(string message, int code, ParseNode node) : this(message, code, node.Token) { } public ParseError(string message, int code, Token token) : this(message, code, token.File, token.Line, token.Column, token.StartPos, token.Length) { } public ParseError(string message, int code) : this(message, code, string.Empty, 0, 0, 0, 0) { } public ParseError(string message, int code, string file, int line, int col, int pos, int length) { this.file = file; this.message = message; this.code = code; this.line = line; this.col = col; this.pos = pos; this.length = length; } } // rootlevel of the node tree [Serializable] public partial class ParseTree : ParseNode { public ParseErrors Errors; public List Skipped; public ParseTree() : base(new Token(), "ParseTree") { Token.Type = TokenType.Start; Token.Text = "Root"; Errors = new ParseErrors(); } public string PrintTree() { StringBuilder sb = new StringBuilder(); int indent = 0; PrintNode(sb, this, indent); return sb.ToString(); } private void PrintNode(StringBuilder sb, ParseNode node, int indent) { string space = "".PadLeft(indent, ' '); sb.Append(space); sb.AppendLine(node.Text); foreach (ParseNode n in node.Nodes) PrintNode(sb, n, indent + 2); } /// /// this is the entry point for executing and evaluating the parse tree. /// /// additional optional input parameters /// the output of the evaluation function public object Eval(params object[] paramlist) { return Nodes[0].Eval(this, paramlist); } } [Serializable] [XmlInclude(typeof(ParseTree))] public partial class ParseNode { protected string text; protected List nodes; public List Nodes { get {return nodes;} } [XmlIgnore] // avoid circular references when serializing public ParseNode Parent; public Token Token; // the token/rule [XmlIgnore] // skip redundant text (is part of Token) public string Text { // text to display in parse tree get { return text;} set { text = value; } } public virtual ParseNode CreateNode(Token token, string text) { ParseNode node = new ParseNode(token, text); node.Parent = this; return node; } protected ParseNode(Token token, string text) { this.Token = token; this.text = text; this.nodes = new List(); } protected object GetValue(ParseTree tree, TokenType type, int index) { return GetValue(tree, type, ref index); } protected object GetValue(ParseTree tree, TokenType type, ref int index) { object o = null; if (index < 0) return o; // left to right foreach (ParseNode node in nodes) { if (node.Token.Type == type) { index--; if (index < 0) { o = node.Eval(tree); break; } } } return o; } /// /// this implements the evaluation functionality, cannot be used directly /// /// the parsetree itself /// optional input parameters /// a partial result of the evaluation internal object Eval(ParseTree tree, params object[] paramlist) { object Value = null; switch (Token.Type) { case TokenType.Start: Value = EvalStart(tree, paramlist); break; case TokenType.Technique_Declaration: Value = EvalTechnique_Declaration(tree, paramlist); break; case TokenType.FillMode_Solid: Value = EvalFillMode_Solid(tree, paramlist); break; case TokenType.FillMode_WireFrame: Value = EvalFillMode_WireFrame(tree, paramlist); break; case TokenType.FillModes: Value = EvalFillModes(tree, paramlist); break; case TokenType.CullMode_None: Value = EvalCullMode_None(tree, paramlist); break; case TokenType.CullMode_Cw: Value = EvalCullMode_Cw(tree, paramlist); break; case TokenType.CullMode_Ccw: Value = EvalCullMode_Ccw(tree, paramlist); break; case TokenType.CullModes: Value = EvalCullModes(tree, paramlist); break; case TokenType.Colors_None: Value = EvalColors_None(tree, paramlist); break; case TokenType.Colors_Red: Value = EvalColors_Red(tree, paramlist); break; case TokenType.Colors_Green: Value = EvalColors_Green(tree, paramlist); break; case TokenType.Colors_Blue: Value = EvalColors_Blue(tree, paramlist); break; case TokenType.Colors_Alpha: Value = EvalColors_Alpha(tree, paramlist); break; case TokenType.Colors_All: Value = EvalColors_All(tree, paramlist); break; case TokenType.Colors_Boolean: Value = EvalColors_Boolean(tree, paramlist); break; case TokenType.Colors: Value = EvalColors(tree, paramlist); break; case TokenType.ColorsMasks: Value = EvalColorsMasks(tree, paramlist); break; case TokenType.Blend_Zero: Value = EvalBlend_Zero(tree, paramlist); break; case TokenType.Blend_One: Value = EvalBlend_One(tree, paramlist); break; case TokenType.Blend_SrcColor: Value = EvalBlend_SrcColor(tree, paramlist); break; case TokenType.Blend_InvSrcColor: Value = EvalBlend_InvSrcColor(tree, paramlist); break; case TokenType.Blend_SrcAlpha: Value = EvalBlend_SrcAlpha(tree, paramlist); break; case TokenType.Blend_InvSrcAlpha: Value = EvalBlend_InvSrcAlpha(tree, paramlist); break; case TokenType.Blend_DestAlpha: Value = EvalBlend_DestAlpha(tree, paramlist); break; case TokenType.Blend_InvDestAlpha: Value = EvalBlend_InvDestAlpha(tree, paramlist); break; case TokenType.Blend_DestColor: Value = EvalBlend_DestColor(tree, paramlist); break; case TokenType.Blend_InvDestColor: Value = EvalBlend_InvDestColor(tree, paramlist); break; case TokenType.Blend_SrcAlphaSat: Value = EvalBlend_SrcAlphaSat(tree, paramlist); break; case TokenType.Blend_BlendFactor: Value = EvalBlend_BlendFactor(tree, paramlist); break; case TokenType.Blend_InvBlendFactor: Value = EvalBlend_InvBlendFactor(tree, paramlist); break; case TokenType.Blends: Value = EvalBlends(tree, paramlist); break; case TokenType.BlendOp_Add: Value = EvalBlendOp_Add(tree, paramlist); break; case TokenType.BlendOp_Subtract: Value = EvalBlendOp_Subtract(tree, paramlist); break; case TokenType.BlendOp_RevSubtract: Value = EvalBlendOp_RevSubtract(tree, paramlist); break; case TokenType.BlendOp_Min: Value = EvalBlendOp_Min(tree, paramlist); break; case TokenType.BlendOp_Max: Value = EvalBlendOp_Max(tree, paramlist); break; case TokenType.BlendOps: Value = EvalBlendOps(tree, paramlist); break; case TokenType.CmpFunc_Never: Value = EvalCmpFunc_Never(tree, paramlist); break; case TokenType.CmpFunc_Less: Value = EvalCmpFunc_Less(tree, paramlist); break; case TokenType.CmpFunc_Equal: Value = EvalCmpFunc_Equal(tree, paramlist); break; case TokenType.CmpFunc_LessEqual: Value = EvalCmpFunc_LessEqual(tree, paramlist); break; case TokenType.CmpFunc_Greater: Value = EvalCmpFunc_Greater(tree, paramlist); break; case TokenType.CmpFunc_NotEqual: Value = EvalCmpFunc_NotEqual(tree, paramlist); break; case TokenType.CmpFunc_GreaterEqual: Value = EvalCmpFunc_GreaterEqual(tree, paramlist); break; case TokenType.CmpFunc_Always: Value = EvalCmpFunc_Always(tree, paramlist); break; case TokenType.CmpFunc: Value = EvalCmpFunc(tree, paramlist); break; case TokenType.StencilOp_Keep: Value = EvalStencilOp_Keep(tree, paramlist); break; case TokenType.StencilOp_Zero: Value = EvalStencilOp_Zero(tree, paramlist); break; case TokenType.StencilOp_Replace: Value = EvalStencilOp_Replace(tree, paramlist); break; case TokenType.StencilOp_IncrSat: Value = EvalStencilOp_IncrSat(tree, paramlist); break; case TokenType.StencilOp_DecrSat: Value = EvalStencilOp_DecrSat(tree, paramlist); break; case TokenType.StencilOp_Invert: Value = EvalStencilOp_Invert(tree, paramlist); break; case TokenType.StencilOp_Incr: Value = EvalStencilOp_Incr(tree, paramlist); break; case TokenType.StencilOp_Decr: Value = EvalStencilOp_Decr(tree, paramlist); break; case TokenType.StencilOp: Value = EvalStencilOp(tree, paramlist); break; case TokenType.Render_State_CullMode: Value = EvalRender_State_CullMode(tree, paramlist); break; case TokenType.Render_State_FillMode: Value = EvalRender_State_FillMode(tree, paramlist); break; case TokenType.Render_State_AlphaBlendEnable: Value = EvalRender_State_AlphaBlendEnable(tree, paramlist); break; case TokenType.Render_State_SrcBlend: Value = EvalRender_State_SrcBlend(tree, paramlist); break; case TokenType.Render_State_DestBlend: Value = EvalRender_State_DestBlend(tree, paramlist); break; case TokenType.Render_State_BlendOp: Value = EvalRender_State_BlendOp(tree, paramlist); break; case TokenType.Render_State_ColorWriteEnable: Value = EvalRender_State_ColorWriteEnable(tree, paramlist); break; case TokenType.Render_State_DepthBias: Value = EvalRender_State_DepthBias(tree, paramlist); break; case TokenType.Render_State_SlopeScaleDepthBias: Value = EvalRender_State_SlopeScaleDepthBias(tree, paramlist); break; case TokenType.Render_State_ZEnable: Value = EvalRender_State_ZEnable(tree, paramlist); break; case TokenType.Render_State_ZWriteEnable: Value = EvalRender_State_ZWriteEnable(tree, paramlist); break; case TokenType.Render_State_ZFunc: Value = EvalRender_State_ZFunc(tree, paramlist); break; case TokenType.Render_State_MultiSampleAntiAlias: Value = EvalRender_State_MultiSampleAntiAlias(tree, paramlist); break; case TokenType.Render_State_ScissorTestEnable: Value = EvalRender_State_ScissorTestEnable(tree, paramlist); break; case TokenType.Render_State_StencilEnable: Value = EvalRender_State_StencilEnable(tree, paramlist); break; case TokenType.Render_State_StencilFail: Value = EvalRender_State_StencilFail(tree, paramlist); break; case TokenType.Render_State_StencilFunc: Value = EvalRender_State_StencilFunc(tree, paramlist); break; case TokenType.Render_State_StencilMask: Value = EvalRender_State_StencilMask(tree, paramlist); break; case TokenType.Render_State_StencilPass: Value = EvalRender_State_StencilPass(tree, paramlist); break; case TokenType.Render_State_StencilRef: Value = EvalRender_State_StencilRef(tree, paramlist); break; case TokenType.Render_State_StencilWriteMask: Value = EvalRender_State_StencilWriteMask(tree, paramlist); break; case TokenType.Render_State_StencilZFail: Value = EvalRender_State_StencilZFail(tree, paramlist); break; case TokenType.Render_State_Expression: Value = EvalRender_State_Expression(tree, paramlist); break; case TokenType.Pass_Declaration: Value = EvalPass_Declaration(tree, paramlist); break; case TokenType.VertexShader_Pass_Expression: Value = EvalVertexShader_Pass_Expression(tree, paramlist); break; case TokenType.PixelShader_Pass_Expression: Value = EvalPixelShader_Pass_Expression(tree, paramlist); break; case TokenType.ComputeShader_Pass_Expression: Value = EvalComputeShader_Pass_Expression(tree, paramlist); break; case TokenType.AddressMode_Clamp: Value = EvalAddressMode_Clamp(tree, paramlist); break; case TokenType.AddressMode_Wrap: Value = EvalAddressMode_Wrap(tree, paramlist); break; case TokenType.AddressMode_Mirror: Value = EvalAddressMode_Mirror(tree, paramlist); break; case TokenType.AddressMode_Border: Value = EvalAddressMode_Border(tree, paramlist); break; case TokenType.AddressMode: Value = EvalAddressMode(tree, paramlist); break; case TokenType.TextureFilter_None: Value = EvalTextureFilter_None(tree, paramlist); break; case TokenType.TextureFilter_Linear: Value = EvalTextureFilter_Linear(tree, paramlist); break; case TokenType.TextureFilter_Point: Value = EvalTextureFilter_Point(tree, paramlist); break; case TokenType.TextureFilter_Anisotropic: Value = EvalTextureFilter_Anisotropic(tree, paramlist); break; case TokenType.TextureFilter: Value = EvalTextureFilter(tree, paramlist); break; case TokenType.Sampler_State_Texture: Value = EvalSampler_State_Texture(tree, paramlist); break; case TokenType.Sampler_State_MinFilter: Value = EvalSampler_State_MinFilter(tree, paramlist); break; case TokenType.Sampler_State_MagFilter: Value = EvalSampler_State_MagFilter(tree, paramlist); break; case TokenType.Sampler_State_MipFilter: Value = EvalSampler_State_MipFilter(tree, paramlist); break; case TokenType.Sampler_State_Filter: Value = EvalSampler_State_Filter(tree, paramlist); break; case TokenType.Sampler_State_AddressU: Value = EvalSampler_State_AddressU(tree, paramlist); break; case TokenType.Sampler_State_AddressV: Value = EvalSampler_State_AddressV(tree, paramlist); break; case TokenType.Sampler_State_AddressW: Value = EvalSampler_State_AddressW(tree, paramlist); break; case TokenType.Sampler_State_BorderColor: Value = EvalSampler_State_BorderColor(tree, paramlist); break; case TokenType.Sampler_State_MaxMipLevel: Value = EvalSampler_State_MaxMipLevel(tree, paramlist); break; case TokenType.Sampler_State_MaxAnisotropy: Value = EvalSampler_State_MaxAnisotropy(tree, paramlist); break; case TokenType.Sampler_State_MipLodBias: Value = EvalSampler_State_MipLodBias(tree, paramlist); break; case TokenType.Sampler_State_Expression: Value = EvalSampler_State_Expression(tree, paramlist); break; case TokenType.Sampler_Register_Expression: Value = EvalSampler_Register_Expression(tree, paramlist); break; case TokenType.Sampler_Declaration_States: Value = EvalSampler_Declaration_States(tree, paramlist); break; case TokenType.Sampler_Declaration: Value = EvalSampler_Declaration(tree, paramlist); break; default: Value = Token.Text; break; } return Value; } protected virtual object EvalStart(ParseTree tree, params object[] paramlist) { var shader = new ShaderInfo(); foreach (var node in Nodes) node.Eval(tree, shader); return shader; } protected virtual object EvalTechnique_Declaration(ParseTree tree, params object[] paramlist) { var technique = new TechniqueInfo(); technique.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty; technique.startPos = Token.StartPos; technique.length = Token.Length; foreach (var node in Nodes) node.Eval(tree, technique); // Make sure we have at least one pass. if (technique.Passes.Count > 0) { var shaderInfo = paramlist[0] as ShaderInfo; shaderInfo.Techniques.Add(technique); } return null; } protected virtual object EvalFillMode_Solid(ParseTree tree, params object[] paramlist) { return FillModeContent.Solid; } protected virtual object EvalFillMode_WireFrame(ParseTree tree, params object[] paramlist) { return FillModeContent.WireFrame; } protected virtual object EvalFillModes(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.FillMode_Solid, 0) ?? this.GetValue(tree, TokenType.FillMode_WireFrame, 0); } protected virtual object EvalCullMode_None(ParseTree tree, params object[] paramlist) { return CullModeContent.None; } protected virtual object EvalCullMode_Cw(ParseTree tree, params object[] paramlist) { return CullModeContent.CullClockwiseFace; } protected virtual object EvalCullMode_Ccw(ParseTree tree, params object[] paramlist) { return CullModeContent.CullCounterClockwiseFace; } protected virtual object EvalCullModes(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.CullMode_None, 0) ?? this.GetValue(tree, TokenType.CullMode_Cw, 0) ?? this.GetValue(tree, TokenType.CullMode_Ccw, 0); } protected virtual object EvalColors_None(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.None; } protected virtual object EvalColors_Red(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.Red; } protected virtual object EvalColors_Green(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.Green; } protected virtual object EvalColors_Blue(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.Blue; } protected virtual object EvalColors_Alpha(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.Alpha; } protected virtual object EvalColors_All(ParseTree tree, params object[] paramlist) { return ColorWriteChannelsContent.All; } protected virtual object EvalColors_Boolean(ParseTree tree, params object[] paramlist) { return ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)) ? ColorWriteChannelsContent.All : ColorWriteChannelsContent.None; } protected virtual object EvalColors(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.Colors_Red, 0) ?? this.GetValue(tree, TokenType.Colors_Green, 0) ?? this.GetValue(tree, TokenType.Colors_Blue, 0) ?? this.GetValue(tree, TokenType.Colors_Alpha, 0) ?? this.GetValue(tree, TokenType.Colors_None, 0) ?? this.GetValue(tree, TokenType.Colors_All, 0) ?? this.GetValue(tree, TokenType.Colors_Boolean, 0); } protected virtual object EvalColorsMasks(ParseTree tree, params object[] paramlist) { return (ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 0) ?? 0) | (ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 1) ?? 0) | (ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 2) ?? 0) | (ColorWriteChannelsContent)(this.GetValue(tree, TokenType.Colors, 3) ?? 0); } protected virtual object EvalBlend_Zero(ParseTree tree, params object[] paramlist) { return BlendContent.Zero; } protected virtual object EvalBlend_One(ParseTree tree, params object[] paramlist) { return BlendContent.One; } protected virtual object EvalBlend_SrcColor(ParseTree tree, params object[] paramlist) { return BlendContent.SourceColor; } protected virtual object EvalBlend_InvSrcColor(ParseTree tree, params object[] paramlist) { return BlendContent.InverseSourceColor; } protected virtual object EvalBlend_SrcAlpha(ParseTree tree, params object[] paramlist) { return BlendContent.SourceAlpha; } protected virtual object EvalBlend_InvSrcAlpha(ParseTree tree, params object[] paramlist) { return BlendContent.InverseSourceAlpha; } protected virtual object EvalBlend_DestAlpha(ParseTree tree, params object[] paramlist) { return BlendContent.DestinationAlpha; } protected virtual object EvalBlend_InvDestAlpha(ParseTree tree, params object[] paramlist) { return BlendContent.InverseDestinationAlpha; } protected virtual object EvalBlend_DestColor(ParseTree tree, params object[] paramlist) { return BlendContent.DestinationColor; } protected virtual object EvalBlend_InvDestColor(ParseTree tree, params object[] paramlist) { return BlendContent.InverseDestinationColor; } protected virtual object EvalBlend_SrcAlphaSat(ParseTree tree, params object[] paramlist) { return BlendContent.SourceAlphaSaturation; } protected virtual object EvalBlend_BlendFactor(ParseTree tree, params object[] paramlist) { return BlendContent.BlendFactor; } protected virtual object EvalBlend_InvBlendFactor(ParseTree tree, params object[] paramlist) { return BlendContent.InverseBlendFactor; } protected virtual object EvalBlends(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.Blend_Zero, 0) ?? this.GetValue(tree, TokenType.Blend_One, 0) ?? this.GetValue(tree, TokenType.Blend_SrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvSrcAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_DestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestAlpha, 0) ?? this.GetValue(tree, TokenType.Blend_DestColor, 0) ?? this.GetValue(tree, TokenType.Blend_InvDestColor, 0) ?? this.GetValue(tree, TokenType.Blend_SrcAlphaSat, 0) ?? this.GetValue(tree, TokenType.Blend_BlendFactor, 0) ?? this.GetValue(tree, TokenType.Blend_InvBlendFactor, 0); } protected virtual object EvalBlendOp_Add(ParseTree tree, params object[] paramlist) { return BlendFunctionContent.Add; } protected virtual object EvalBlendOp_Subtract(ParseTree tree, params object[] paramlist) { return BlendFunctionContent.Subtract; } protected virtual object EvalBlendOp_RevSubtract(ParseTree tree, params object[] paramlist) { return BlendFunctionContent.ReverseSubtract; } protected virtual object EvalBlendOp_Min(ParseTree tree, params object[] paramlist) { return BlendFunctionContent.Min; } protected virtual object EvalBlendOp_Max(ParseTree tree, params object[] paramlist) { return BlendFunctionContent.Max; } protected virtual object EvalBlendOps(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.BlendOp_Add, 0) ?? this.GetValue(tree, TokenType.BlendOp_Subtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_RevSubtract, 0) ?? this.GetValue(tree, TokenType.BlendOp_Min, 0) ?? this.GetValue(tree, TokenType.BlendOp_Max, 0); } protected virtual object EvalCmpFunc_Never(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.Never; } protected virtual object EvalCmpFunc_Less(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.Less; } protected virtual object EvalCmpFunc_Equal(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.Equal; } protected virtual object EvalCmpFunc_LessEqual(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.LessEqual; } protected virtual object EvalCmpFunc_Greater(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.Greater; } protected virtual object EvalCmpFunc_NotEqual(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.NotEqual; } protected virtual object EvalCmpFunc_GreaterEqual(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.GreaterEqual; } protected virtual object EvalCmpFunc_Always(ParseTree tree, params object[] paramlist) { return CompareFunctionContent.Always; } protected virtual object EvalCmpFunc(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.CmpFunc_Never, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Less, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Equal, 0) ?? this.GetValue(tree, TokenType.CmpFunc_LessEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Greater, 0) ?? this.GetValue(tree, TokenType.CmpFunc_NotEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_GreaterEqual, 0) ?? this.GetValue(tree, TokenType.CmpFunc_Always, 0); } protected virtual object EvalStencilOp_Keep(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Keep; } protected virtual object EvalStencilOp_Zero(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Zero; } protected virtual object EvalStencilOp_Replace(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Replace; } protected virtual object EvalStencilOp_IncrSat(ParseTree tree, params object[] paramlist) { return StencilOperationContent.IncrementSaturation; } protected virtual object EvalStencilOp_DecrSat(ParseTree tree, params object[] paramlist) { return StencilOperationContent.DecrementSaturation; } protected virtual object EvalStencilOp_Invert(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Invert; } protected virtual object EvalStencilOp_Incr(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Increment; } protected virtual object EvalStencilOp_Decr(ParseTree tree, params object[] paramlist) { return StencilOperationContent.Decrement; } protected virtual object EvalStencilOp(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.StencilOp_Keep, 0) ?? this.GetValue(tree, TokenType.StencilOp_Zero, 0) ?? this.GetValue(tree, TokenType.StencilOp_Replace, 0) ?? this.GetValue(tree, TokenType.StencilOp_IncrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_DecrSat, 0) ?? this.GetValue(tree, TokenType.StencilOp_Invert, 0) ?? this.GetValue(tree, TokenType.StencilOp_Incr, 0) ?? this.GetValue(tree, TokenType.StencilOp_Decr, 0); } protected virtual object EvalRender_State_CullMode(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).CullMode = (CullModeContent)this.GetValue(tree, TokenType.CullModes, 0); return null; } protected virtual object EvalRender_State_FillMode(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).FillMode = (FillModeContent)this.GetValue(tree, TokenType.FillModes, 0); return null; } protected virtual object EvalRender_State_AlphaBlendEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).AlphaBlendEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_SrcBlend(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).SrcBlend = (BlendContent)this.GetValue(tree, TokenType.Blends, 0); return null; } protected virtual object EvalRender_State_DestBlend(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).DestBlend = (BlendContent)this.GetValue(tree, TokenType.Blends, 0); return null; } protected virtual object EvalRender_State_BlendOp(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).BlendOp = (BlendFunctionContent)this.GetValue(tree, TokenType.BlendOps, 0); return null; } protected virtual object EvalRender_State_ColorWriteEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).ColorWriteEnable = (ColorWriteChannelsContent)this.GetValue(tree, TokenType.ColorsMasks, 0); return null; } protected virtual object EvalRender_State_DepthBias(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).DepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalRender_State_SlopeScaleDepthBias(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).SlopeScaleDepthBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalRender_State_ZEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).ZEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_ZWriteEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).ZWriteEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_ZFunc(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).DepthBufferFunction = (CompareFunctionContent)this.GetValue(tree, TokenType.CmpFunc, 0); return null; } protected virtual object EvalRender_State_MultiSampleAntiAlias(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).MultiSampleAntiAlias = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_ScissorTestEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).ScissorTestEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_StencilEnable(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilEnable = ParseTreeTools.ParseBool((string)this.GetValue(tree, TokenType.Boolean, 0)); return null; } protected virtual object EvalRender_State_StencilFail(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilFail = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null; } protected virtual object EvalRender_State_StencilFunc(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilFunc = (CompareFunctionContent)this.GetValue(tree, TokenType.CmpFunc, 0); return null; } protected virtual object EvalRender_State_StencilMask(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalRender_State_StencilPass(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilPass = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null; } protected virtual object EvalRender_State_StencilRef(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilRef = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalRender_State_StencilWriteMask(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilWriteMask = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalRender_State_StencilZFail(ParseTree tree, params object[] paramlist) { (paramlist[0] as PassInfo).StencilZFail = (StencilOperationContent)this.GetValue(tree, TokenType.StencilOp, 0); return null; } protected virtual object EvalRender_State_Expression(ParseTree tree, params object[] paramlist) { foreach (var node in Nodes) node.Eval(tree, paramlist); return null; } protected virtual object EvalPass_Declaration(ParseTree tree, params object[] paramlist) { var pass = new PassInfo(); pass.name = this.GetValue(tree, TokenType.Identifier, 0) as string ?? string.Empty; foreach (var node in Nodes) node.Eval(tree, pass); // We need to have at least one shader to keep this pass. if (!string.IsNullOrEmpty(pass.psFunction) || !string.IsNullOrEmpty(pass.vsFunction) || !string.IsNullOrEmpty(pass.csFunction)) { var technique = paramlist[0] as TechniqueInfo; technique.Passes.Add(pass); } return null; } protected virtual object EvalVertexShader_Pass_Expression(ParseTree tree, params object[] paramlist) { var pass = paramlist[0] as PassInfo; pass.vsModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string; pass.vsFunction = this.GetValue(tree, TokenType.Identifier, 0) as string; return null; } protected virtual object EvalPixelShader_Pass_Expression(ParseTree tree, params object[] paramlist) { var pass = paramlist[0] as PassInfo; pass.psModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string; pass.psFunction = this.GetValue(tree, TokenType.Identifier, 0) as string; return null; } protected virtual object EvalComputeShader_Pass_Expression(ParseTree tree, params object[] paramlist) { var pass = paramlist[0] as PassInfo; pass.csModel = this.GetValue(tree, TokenType.ShaderModel, 0) as string; pass.csFunction = this.GetValue(tree, TokenType.Identifier, 0) as string; return null; } protected virtual object EvalAddressMode_Clamp(ParseTree tree, params object[] paramlist) { return TextureAddressModeContent.Clamp; } protected virtual object EvalAddressMode_Wrap(ParseTree tree, params object[] paramlist) { return TextureAddressModeContent.Wrap; } protected virtual object EvalAddressMode_Mirror(ParseTree tree, params object[] paramlist) { return TextureAddressModeContent.Mirror; } protected virtual object EvalAddressMode_Border(ParseTree tree, params object[] paramlist) { return TextureAddressModeContent.Border; } protected virtual object EvalAddressMode(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.AddressMode_Clamp, 0) ?? this.GetValue(tree, TokenType.AddressMode_Wrap, 0) ?? this.GetValue(tree, TokenType.AddressMode_Mirror, 0) ?? this.GetValue(tree, TokenType.AddressMode_Border, 0); } protected virtual object EvalTextureFilter_None(ParseTree tree, params object[] paramlist) { return TextureFilterTypeContent.None; } protected virtual object EvalTextureFilter_Linear(ParseTree tree, params object[] paramlist) { return TextureFilterTypeContent.Linear; } protected virtual object EvalTextureFilter_Point(ParseTree tree, params object[] paramlist) { return TextureFilterTypeContent.Point; } protected virtual object EvalTextureFilter_Anisotropic(ParseTree tree, params object[] paramlist) { return TextureFilterTypeContent.Anisotropic; } protected virtual object EvalTextureFilter(ParseTree tree, params object[] paramlist) { return this.GetValue(tree, TokenType.TextureFilter_None, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Linear, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Point, 0) ?? this.GetValue(tree, TokenType.TextureFilter_Anisotropic, 0); } protected virtual object EvalSampler_State_Texture(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).TextureName = (string)this.GetValue(tree, TokenType.Identifier, 0); return null; } protected virtual object EvalSampler_State_MinFilter(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MinFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null; } protected virtual object EvalSampler_State_MagFilter(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MagFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null; } protected virtual object EvalSampler_State_MipFilter(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MipFilter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null; } protected virtual object EvalSampler_State_Filter(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).Filter = (TextureFilterTypeContent)this.GetValue(tree, TokenType.TextureFilter, 0); return null; } protected virtual object EvalSampler_State_AddressU(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).AddressU = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null; } protected virtual object EvalSampler_State_AddressV(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).AddressV = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null; } protected virtual object EvalSampler_State_AddressW(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).AddressW = (TextureAddressModeContent)this.GetValue(tree, TokenType.AddressMode, 0); return null; } protected virtual object EvalSampler_State_BorderColor(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).BorderColor = ParseTreeTools.ParseColor((string)this.GetValue(tree, TokenType.HexColor, 0)); return null; } protected virtual object EvalSampler_State_MaxMipLevel(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MaxMipLevel = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalSampler_State_MaxAnisotropy(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MaxAnisotropy = ParseTreeTools.ParseInt((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalSampler_State_MipLodBias(ParseTree tree, params object[] paramlist) { (paramlist[0] as SamplerStateInfo).MipMapLevelOfDetailBias = ParseTreeTools.ParseFloat((string)this.GetValue(tree, TokenType.Number, 0)); return null; } protected virtual object EvalSampler_State_Expression(ParseTree tree, params object[] paramlist) { foreach (var node in Nodes) node.Eval(tree, paramlist); return null; } protected virtual object EvalSampler_Register_Expression(ParseTree tree, params object[] paramlist) { return null; } protected virtual object EvalSampler_Declaration_States(ParseTree tree, params object[] paramlist) { foreach (var node in Nodes) node.Eval(tree, paramlist); return null; } protected virtual object EvalSampler_Declaration(ParseTree tree, params object[] paramlist) { // if there is a comma or closing paren at the end this is a sampler as a parameter of a function if (this.GetValue(tree, TokenType.Semicolon, 0) == null) return null; var sampler = new SamplerStateInfo(); sampler.Name = this.GetValue(tree, TokenType.Identifier, 0) as string; foreach (ParseNode node in Nodes) node.Eval(tree, sampler); var shaderInfo = paramlist[0] as ShaderInfo; shaderInfo.SamplerStates.Add(sampler.Name, sampler); return null; } } #endregion ParseTree } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ParseTreeTools.cs ================================================ using System; using System.Globalization; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { public static class ParseTreeTools { public static float ParseFloat(string value) { // Remove all whitespace and trailing F or f. value = value.Replace(" ", ""); value = value.TrimEnd('f', 'F'); return float.Parse(value, NumberStyles.Float, CultureInfo.InvariantCulture); } public static int ParseInt(string value) { // We read it as a float and cast it down to // an integer to match Microsoft FX behavior. return (int)Math.Floor(ParseFloat(value)); } public static bool ParseBool(string value) { if (value.ToLowerInvariant() == "true" || value == "1") return true; if (value.ToLowerInvariant() == "false" || value == "0") return false; throw new Exception("Invalid boolean value '" + value + "'"); } public static Color ParseColor(string value) { var hexValue = Convert.ToUInt32(value, 16); byte r, g, b, a; if (value.Length == 8) { r = (byte) ((hexValue >> 16) & 0xFF); g = (byte) ((hexValue >> 8) & 0xFF); b = (byte) ((hexValue >> 0) & 0xFF); a = 255; } else if (value.Length == 10) { r = (byte) ((hexValue >> 24) & 0xFF); g = (byte) ((hexValue >> 16) & 0xFF); b = (byte) ((hexValue >> 8) & 0xFF); a = (byte) ((hexValue >> 0) & 0xFF); } else { throw new NotSupportedException(); } return new Color(r, g, b, a); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/Parser.cs ================================================ // Generated by TinyPG v1.3 available at www.codeproject.com using System; using System.Collections.Generic; // Disable unused variable warnings which // can happen during the parser generation. #pragma warning disable 168 namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { #region Parser public partial class Parser { private Scanner scanner; private ParseTree tree; public Parser(Scanner scanner) { this.scanner = scanner; } public ParseTree Parse(string input) { return Parse(input, "", new ParseTree()); } public ParseTree Parse(string input, string fileName) { return Parse(input, fileName, new ParseTree()); } public ParseTree Parse(string input, string fileName, ParseTree tree) { scanner.Init(input, fileName); this.tree = tree; ParseStart(tree); tree.Skipped = scanner.Skipped; return tree; } private void ParseStart(ParseNode parent) // NonTerminalSymbol: Start { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Start), "Start"); parent.Nodes.Add(node); // Concat Rule tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // ZeroOrMore Rule while (tok.Type == TokenType.Code || tok.Type == TokenType.Technique || tok.Type == TokenType.Sampler) { tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Code: tok = scanner.Scan(TokenType.Code); // Terminal Rule: Code n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Code) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Code.ToString(), 0x1001, tok)); return; } break; case TokenType.Technique: ParseTechnique_Declaration(node); // NonTerminal Rule: Technique_Declaration break; case TokenType.Sampler: ParseSampler_Declaration(node); // NonTerminal Rule: Sampler_Declaration break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Code, Technique, or Sampler.", 0x0002, tok)); break; } // Choice Rule tok = scanner.LookAhead(TokenType.Code, TokenType.Technique, TokenType.Sampler); // ZeroOrMore Rule } // Concat Rule tok = scanner.Scan(TokenType.EndOfFile); // Terminal Rule: EndOfFile n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.EndOfFile) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.EndOfFile.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Start private void ParseTechnique_Declaration(ParseNode parent) // NonTerminalSymbol: Technique_Declaration { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Technique_Declaration), "Technique_Declaration"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Technique); // Terminal Rule: Technique n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Technique) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Technique.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.Identifier); // Option Rule if (tok.Type == TokenType.Identifier) { tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } } // Concat Rule tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenBracket.ToString(), 0x1001, tok)); return; } // Concat Rule do { // OneOrMore Rule ParsePass_Declaration(node); // NonTerminal Rule: Pass_Declaration tok = scanner.LookAhead(TokenType.Pass); // OneOrMore Rule } while (tok.Type == TokenType.Pass); // OneOrMore Rule // Concat Rule tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseBracket.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Technique_Declaration private void ParseFillMode_Solid(ParseNode parent) // NonTerminalSymbol: FillMode_Solid { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillMode_Solid), "FillMode_Solid"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Solid); // Terminal Rule: Solid n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Solid) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Solid.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: FillMode_Solid private void ParseFillMode_WireFrame(ParseNode parent) // NonTerminalSymbol: FillMode_WireFrame { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillMode_WireFrame), "FillMode_WireFrame"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.WireFrame); // Terminal Rule: WireFrame n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.WireFrame) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.WireFrame.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: FillMode_WireFrame private void ParseFillModes(ParseNode parent) // NonTerminalSymbol: FillModes { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.FillModes), "FillModes"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Solid, TokenType.WireFrame); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Solid: ParseFillMode_Solid(node); // NonTerminal Rule: FillMode_Solid break; case TokenType.WireFrame: ParseFillMode_WireFrame(node); // NonTerminal Rule: FillMode_WireFrame break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Solid or WireFrame.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: FillModes private void ParseCullMode_None(ParseNode parent) // NonTerminalSymbol: CullMode_None { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_None), "CullMode_None"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.None); // Terminal Rule: None n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.None) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.None.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CullMode_None private void ParseCullMode_Cw(ParseNode parent) // NonTerminalSymbol: CullMode_Cw { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_Cw), "CullMode_Cw"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Cw); // Terminal Rule: Cw n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Cw) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Cw.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CullMode_Cw private void ParseCullMode_Ccw(ParseNode parent) // NonTerminalSymbol: CullMode_Ccw { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullMode_Ccw), "CullMode_Ccw"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Ccw); // Terminal Rule: Ccw n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Ccw) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Ccw.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CullMode_Ccw private void ParseCullModes(ParseNode parent) // NonTerminalSymbol: CullModes { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CullModes), "CullModes"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.None, TokenType.Cw, TokenType.Ccw); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.None: ParseCullMode_None(node); // NonTerminal Rule: CullMode_None break; case TokenType.Cw: ParseCullMode_Cw(node); // NonTerminal Rule: CullMode_Cw break; case TokenType.Ccw: ParseCullMode_Ccw(node); // NonTerminal Rule: CullMode_Ccw break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected None, Cw, or Ccw.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CullModes private void ParseColors_None(ParseNode parent) // NonTerminalSymbol: Colors_None { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_None), "Colors_None"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.None); // Terminal Rule: None n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.None) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.None.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_None private void ParseColors_Red(ParseNode parent) // NonTerminalSymbol: Colors_Red { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Red), "Colors_Red"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Red); // Terminal Rule: Red n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Red) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Red.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_Red private void ParseColors_Green(ParseNode parent) // NonTerminalSymbol: Colors_Green { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Green), "Colors_Green"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Green); // Terminal Rule: Green n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Green) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Green.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_Green private void ParseColors_Blue(ParseNode parent) // NonTerminalSymbol: Colors_Blue { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Blue), "Colors_Blue"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Blue); // Terminal Rule: Blue n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Blue) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Blue.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_Blue private void ParseColors_Alpha(ParseNode parent) // NonTerminalSymbol: Colors_Alpha { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Alpha), "Colors_Alpha"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Alpha); // Terminal Rule: Alpha n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Alpha) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Alpha.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_Alpha private void ParseColors_All(ParseNode parent) // NonTerminalSymbol: Colors_All { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_All), "Colors_All"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.All); // Terminal Rule: All n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.All) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.All.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_All private void ParseColors_Boolean(ParseNode parent) // NonTerminalSymbol: Colors_Boolean { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors_Boolean), "Colors_Boolean"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors_Boolean private void ParseColors(ParseNode parent) // NonTerminalSymbol: Colors { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Colors), "Colors"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Red, TokenType.Green, TokenType.Blue, TokenType.Alpha, TokenType.None, TokenType.All, TokenType.Boolean); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Red: ParseColors_Red(node); // NonTerminal Rule: Colors_Red break; case TokenType.Green: ParseColors_Green(node); // NonTerminal Rule: Colors_Green break; case TokenType.Blue: ParseColors_Blue(node); // NonTerminal Rule: Colors_Blue break; case TokenType.Alpha: ParseColors_Alpha(node); // NonTerminal Rule: Colors_Alpha break; case TokenType.None: ParseColors_None(node); // NonTerminal Rule: Colors_None break; case TokenType.All: ParseColors_All(node); // NonTerminal Rule: Colors_All break; case TokenType.Boolean: ParseColors_Boolean(node); // NonTerminal Rule: Colors_Boolean break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Red, Green, Blue, Alpha, None, All, or Boolean.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Colors private void ParseColorsMasks(ParseNode parent) // NonTerminalSymbol: ColorsMasks { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ColorsMasks), "ColorsMasks"); parent.Nodes.Add(node); // Concat Rule ParseColors(node); // NonTerminal Rule: Colors // Concat Rule tok = scanner.LookAhead(TokenType.Or); // Option Rule if (tok.Type == TokenType.Or) { // Concat Rule tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Or) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Or.ToString(), 0x1001, tok)); return; } // Concat Rule ParseColors(node); // NonTerminal Rule: Colors } // Concat Rule tok = scanner.LookAhead(TokenType.Or); // Option Rule if (tok.Type == TokenType.Or) { // Concat Rule tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Or) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Or.ToString(), 0x1001, tok)); return; } // Concat Rule ParseColors(node); // NonTerminal Rule: Colors } // Concat Rule tok = scanner.LookAhead(TokenType.Or); // Option Rule if (tok.Type == TokenType.Or) { // Concat Rule tok = scanner.Scan(TokenType.Or); // Terminal Rule: Or n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Or) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Or.ToString(), 0x1001, tok)); return; } // Concat Rule ParseColors(node); // NonTerminal Rule: Colors } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: ColorsMasks private void ParseBlend_Zero(ParseNode parent) // NonTerminalSymbol: Blend_Zero { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_Zero), "Blend_Zero"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Zero); // Terminal Rule: Zero n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Zero) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Zero.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_Zero private void ParseBlend_One(ParseNode parent) // NonTerminalSymbol: Blend_One { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_One), "Blend_One"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.One); // Terminal Rule: One n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.One) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.One.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_One private void ParseBlend_SrcColor(ParseNode parent) // NonTerminalSymbol: Blend_SrcColor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcColor), "Blend_SrcColor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.SrcColor); // Terminal Rule: SrcColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SrcColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SrcColor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_SrcColor private void ParseBlend_InvSrcColor(ParseNode parent) // NonTerminalSymbol: Blend_InvSrcColor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvSrcColor), "Blend_InvSrcColor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.InvSrcColor); // Terminal Rule: InvSrcColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.InvSrcColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.InvSrcColor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_InvSrcColor private void ParseBlend_SrcAlpha(ParseNode parent) // NonTerminalSymbol: Blend_SrcAlpha { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcAlpha), "Blend_SrcAlpha"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.SrcAlpha); // Terminal Rule: SrcAlpha n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SrcAlpha) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SrcAlpha.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_SrcAlpha private void ParseBlend_InvSrcAlpha(ParseNode parent) // NonTerminalSymbol: Blend_InvSrcAlpha { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvSrcAlpha), "Blend_InvSrcAlpha"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.InvSrcAlpha); // Terminal Rule: InvSrcAlpha n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.InvSrcAlpha) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.InvSrcAlpha.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_InvSrcAlpha private void ParseBlend_DestAlpha(ParseNode parent) // NonTerminalSymbol: Blend_DestAlpha { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_DestAlpha), "Blend_DestAlpha"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.DestAlpha); // Terminal Rule: DestAlpha n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.DestAlpha) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DestAlpha.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_DestAlpha private void ParseBlend_InvDestAlpha(ParseNode parent) // NonTerminalSymbol: Blend_InvDestAlpha { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvDestAlpha), "Blend_InvDestAlpha"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.InvDestAlpha); // Terminal Rule: InvDestAlpha n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.InvDestAlpha) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.InvDestAlpha.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_InvDestAlpha private void ParseBlend_DestColor(ParseNode parent) // NonTerminalSymbol: Blend_DestColor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_DestColor), "Blend_DestColor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.DestColor); // Terminal Rule: DestColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.DestColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DestColor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_DestColor private void ParseBlend_InvDestColor(ParseNode parent) // NonTerminalSymbol: Blend_InvDestColor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvDestColor), "Blend_InvDestColor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.InvDestColor); // Terminal Rule: InvDestColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.InvDestColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.InvDestColor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_InvDestColor private void ParseBlend_SrcAlphaSat(ParseNode parent) // NonTerminalSymbol: Blend_SrcAlphaSat { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_SrcAlphaSat), "Blend_SrcAlphaSat"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.SrcAlphaSat); // Terminal Rule: SrcAlphaSat n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SrcAlphaSat) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SrcAlphaSat.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_SrcAlphaSat private void ParseBlend_BlendFactor(ParseNode parent) // NonTerminalSymbol: Blend_BlendFactor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_BlendFactor), "Blend_BlendFactor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.BlendFactor); // Terminal Rule: BlendFactor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.BlendFactor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BlendFactor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_BlendFactor private void ParseBlend_InvBlendFactor(ParseNode parent) // NonTerminalSymbol: Blend_InvBlendFactor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blend_InvBlendFactor), "Blend_InvBlendFactor"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.InvBlendFactor); // Terminal Rule: InvBlendFactor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.InvBlendFactor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.InvBlendFactor.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blend_InvBlendFactor private void ParseBlends(ParseNode parent) // NonTerminalSymbol: Blends { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Blends), "Blends"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Zero, TokenType.One, TokenType.SrcColor, TokenType.InvSrcColor, TokenType.SrcAlpha, TokenType.InvSrcAlpha, TokenType.DestAlpha, TokenType.InvDestAlpha, TokenType.DestColor, TokenType.InvDestColor, TokenType.SrcAlphaSat, TokenType.BlendFactor, TokenType.InvBlendFactor); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Zero: ParseBlend_Zero(node); // NonTerminal Rule: Blend_Zero break; case TokenType.One: ParseBlend_One(node); // NonTerminal Rule: Blend_One break; case TokenType.SrcColor: ParseBlend_SrcColor(node); // NonTerminal Rule: Blend_SrcColor break; case TokenType.InvSrcColor: ParseBlend_InvSrcColor(node); // NonTerminal Rule: Blend_InvSrcColor break; case TokenType.SrcAlpha: ParseBlend_SrcAlpha(node); // NonTerminal Rule: Blend_SrcAlpha break; case TokenType.InvSrcAlpha: ParseBlend_InvSrcAlpha(node); // NonTerminal Rule: Blend_InvSrcAlpha break; case TokenType.DestAlpha: ParseBlend_DestAlpha(node); // NonTerminal Rule: Blend_DestAlpha break; case TokenType.InvDestAlpha: ParseBlend_InvDestAlpha(node); // NonTerminal Rule: Blend_InvDestAlpha break; case TokenType.DestColor: ParseBlend_DestColor(node); // NonTerminal Rule: Blend_DestColor break; case TokenType.InvDestColor: ParseBlend_InvDestColor(node); // NonTerminal Rule: Blend_InvDestColor break; case TokenType.SrcAlphaSat: ParseBlend_SrcAlphaSat(node); // NonTerminal Rule: Blend_SrcAlphaSat break; case TokenType.BlendFactor: ParseBlend_BlendFactor(node); // NonTerminal Rule: Blend_BlendFactor break; case TokenType.InvBlendFactor: ParseBlend_InvBlendFactor(node); // NonTerminal Rule: Blend_InvBlendFactor break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Zero, One, SrcColor, InvSrcColor, SrcAlpha, InvSrcAlpha, DestAlpha, InvDestAlpha, DestColor, InvDestColor, SrcAlphaSat, BlendFactor, or InvBlendFactor.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Blends private void ParseBlendOp_Add(ParseNode parent) // NonTerminalSymbol: BlendOp_Add { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Add), "BlendOp_Add"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Add); // Terminal Rule: Add n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Add) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Add.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOp_Add private void ParseBlendOp_Subtract(ParseNode parent) // NonTerminalSymbol: BlendOp_Subtract { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Subtract), "BlendOp_Subtract"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Subtract); // Terminal Rule: Subtract n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Subtract) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Subtract.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOp_Subtract private void ParseBlendOp_RevSubtract(ParseNode parent) // NonTerminalSymbol: BlendOp_RevSubtract { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_RevSubtract), "BlendOp_RevSubtract"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.RevSubtract); // Terminal Rule: RevSubtract n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.RevSubtract) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.RevSubtract.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOp_RevSubtract private void ParseBlendOp_Min(ParseNode parent) // NonTerminalSymbol: BlendOp_Min { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Min), "BlendOp_Min"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Min); // Terminal Rule: Min n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Min) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Min.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOp_Min private void ParseBlendOp_Max(ParseNode parent) // NonTerminalSymbol: BlendOp_Max { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOp_Max), "BlendOp_Max"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Max); // Terminal Rule: Max n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Max) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Max.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOp_Max private void ParseBlendOps(ParseNode parent) // NonTerminalSymbol: BlendOps { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.BlendOps), "BlendOps"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Add, TokenType.Subtract, TokenType.RevSubtract, TokenType.Min, TokenType.Max); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Add: ParseBlendOp_Add(node); // NonTerminal Rule: BlendOp_Add break; case TokenType.Subtract: ParseBlendOp_Subtract(node); // NonTerminal Rule: BlendOp_Subtract break; case TokenType.RevSubtract: ParseBlendOp_RevSubtract(node); // NonTerminal Rule: BlendOp_RevSubtract break; case TokenType.Min: ParseBlendOp_Min(node); // NonTerminal Rule: BlendOp_Min break; case TokenType.Max: ParseBlendOp_Max(node); // NonTerminal Rule: BlendOp_Max break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Add, Subtract, RevSubtract, Min, or Max.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: BlendOps private void ParseCmpFunc_Never(ParseNode parent) // NonTerminalSymbol: CmpFunc_Never { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Never), "CmpFunc_Never"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Never); // Terminal Rule: Never n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Never) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Never.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_Never private void ParseCmpFunc_Less(ParseNode parent) // NonTerminalSymbol: CmpFunc_Less { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Less), "CmpFunc_Less"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Less); // Terminal Rule: Less n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Less) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Less.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_Less private void ParseCmpFunc_Equal(ParseNode parent) // NonTerminalSymbol: CmpFunc_Equal { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Equal), "CmpFunc_Equal"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Equal); // Terminal Rule: Equal n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equal) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equal.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_Equal private void ParseCmpFunc_LessEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_LessEqual { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_LessEqual), "CmpFunc_LessEqual"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.LessEqual); // Terminal Rule: LessEqual n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.LessEqual) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.LessEqual.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_LessEqual private void ParseCmpFunc_Greater(ParseNode parent) // NonTerminalSymbol: CmpFunc_Greater { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Greater), "CmpFunc_Greater"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Greater); // Terminal Rule: Greater n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Greater) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Greater.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_Greater private void ParseCmpFunc_NotEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_NotEqual { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_NotEqual), "CmpFunc_NotEqual"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.NotEqual); // Terminal Rule: NotEqual n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.NotEqual) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NotEqual.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_NotEqual private void ParseCmpFunc_GreaterEqual(ParseNode parent) // NonTerminalSymbol: CmpFunc_GreaterEqual { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_GreaterEqual), "CmpFunc_GreaterEqual"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.GreaterEqual); // Terminal Rule: GreaterEqual n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.GreaterEqual) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.GreaterEqual.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_GreaterEqual private void ParseCmpFunc_Always(ParseNode parent) // NonTerminalSymbol: CmpFunc_Always { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc_Always), "CmpFunc_Always"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Always); // Terminal Rule: Always n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Always) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Always.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc_Always private void ParseCmpFunc(ParseNode parent) // NonTerminalSymbol: CmpFunc { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CmpFunc), "CmpFunc"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Never, TokenType.Less, TokenType.Equal, TokenType.LessEqual, TokenType.Greater, TokenType.NotEqual, TokenType.GreaterEqual, TokenType.Always); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Never: ParseCmpFunc_Never(node); // NonTerminal Rule: CmpFunc_Never break; case TokenType.Less: ParseCmpFunc_Less(node); // NonTerminal Rule: CmpFunc_Less break; case TokenType.Equal: ParseCmpFunc_Equal(node); // NonTerminal Rule: CmpFunc_Equal break; case TokenType.LessEqual: ParseCmpFunc_LessEqual(node); // NonTerminal Rule: CmpFunc_LessEqual break; case TokenType.Greater: ParseCmpFunc_Greater(node); // NonTerminal Rule: CmpFunc_Greater break; case TokenType.NotEqual: ParseCmpFunc_NotEqual(node); // NonTerminal Rule: CmpFunc_NotEqual break; case TokenType.GreaterEqual: ParseCmpFunc_GreaterEqual(node); // NonTerminal Rule: CmpFunc_GreaterEqual break; case TokenType.Always: ParseCmpFunc_Always(node); // NonTerminal Rule: CmpFunc_Always break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Never, Less, Equal, LessEqual, Greater, NotEqual, GreaterEqual, or Always.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: CmpFunc private void ParseStencilOp_Keep(ParseNode parent) // NonTerminalSymbol: StencilOp_Keep { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Keep), "StencilOp_Keep"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Keep); // Terminal Rule: Keep n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Keep) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Keep.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Keep private void ParseStencilOp_Zero(ParseNode parent) // NonTerminalSymbol: StencilOp_Zero { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Zero), "StencilOp_Zero"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Zero); // Terminal Rule: Zero n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Zero) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Zero.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Zero private void ParseStencilOp_Replace(ParseNode parent) // NonTerminalSymbol: StencilOp_Replace { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Replace), "StencilOp_Replace"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Replace); // Terminal Rule: Replace n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Replace) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Replace.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Replace private void ParseStencilOp_IncrSat(ParseNode parent) // NonTerminalSymbol: StencilOp_IncrSat { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_IncrSat), "StencilOp_IncrSat"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.IncrSat); // Terminal Rule: IncrSat n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.IncrSat) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.IncrSat.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_IncrSat private void ParseStencilOp_DecrSat(ParseNode parent) // NonTerminalSymbol: StencilOp_DecrSat { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_DecrSat), "StencilOp_DecrSat"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.DecrSat); // Terminal Rule: DecrSat n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.DecrSat) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DecrSat.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_DecrSat private void ParseStencilOp_Invert(ParseNode parent) // NonTerminalSymbol: StencilOp_Invert { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Invert), "StencilOp_Invert"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Invert); // Terminal Rule: Invert n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Invert) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Invert.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Invert private void ParseStencilOp_Incr(ParseNode parent) // NonTerminalSymbol: StencilOp_Incr { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Incr), "StencilOp_Incr"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Incr); // Terminal Rule: Incr n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Incr) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Incr.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Incr private void ParseStencilOp_Decr(ParseNode parent) // NonTerminalSymbol: StencilOp_Decr { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp_Decr), "StencilOp_Decr"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Decr); // Terminal Rule: Decr n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Decr) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Decr.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp_Decr private void ParseStencilOp(ParseNode parent) // NonTerminalSymbol: StencilOp { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.StencilOp), "StencilOp"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Keep, TokenType.Zero, TokenType.Replace, TokenType.IncrSat, TokenType.DecrSat, TokenType.Invert, TokenType.Incr, TokenType.Decr); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Keep: ParseStencilOp_Keep(node); // NonTerminal Rule: StencilOp_Keep break; case TokenType.Zero: ParseStencilOp_Zero(node); // NonTerminal Rule: StencilOp_Zero break; case TokenType.Replace: ParseStencilOp_Replace(node); // NonTerminal Rule: StencilOp_Replace break; case TokenType.IncrSat: ParseStencilOp_IncrSat(node); // NonTerminal Rule: StencilOp_IncrSat break; case TokenType.DecrSat: ParseStencilOp_DecrSat(node); // NonTerminal Rule: StencilOp_DecrSat break; case TokenType.Invert: ParseStencilOp_Invert(node); // NonTerminal Rule: StencilOp_Invert break; case TokenType.Incr: ParseStencilOp_Incr(node); // NonTerminal Rule: StencilOp_Incr break; case TokenType.Decr: ParseStencilOp_Decr(node); // NonTerminal Rule: StencilOp_Decr break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Keep, Zero, Replace, IncrSat, DecrSat, Invert, Incr, or Decr.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: StencilOp private void ParseRender_State_CullMode(ParseNode parent) // NonTerminalSymbol: Render_State_CullMode { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_CullMode), "Render_State_CullMode"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.CullMode); // Terminal Rule: CullMode n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CullMode) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CullMode.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseCullModes(node); // NonTerminal Rule: CullModes // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_CullMode private void ParseRender_State_FillMode(ParseNode parent) // NonTerminalSymbol: Render_State_FillMode { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_FillMode), "Render_State_FillMode"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.FillMode); // Terminal Rule: FillMode n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.FillMode) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.FillMode.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseFillModes(node); // NonTerminal Rule: FillModes // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_FillMode private void ParseRender_State_AlphaBlendEnable(ParseNode parent) // NonTerminalSymbol: Render_State_AlphaBlendEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_AlphaBlendEnable), "Render_State_AlphaBlendEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.AlphaBlendEnable); // Terminal Rule: AlphaBlendEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.AlphaBlendEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.AlphaBlendEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_AlphaBlendEnable private void ParseRender_State_SrcBlend(ParseNode parent) // NonTerminalSymbol: Render_State_SrcBlend { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_SrcBlend), "Render_State_SrcBlend"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.SrcBlend); // Terminal Rule: SrcBlend n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SrcBlend) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SrcBlend.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseBlends(node); // NonTerminal Rule: Blends // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_SrcBlend private void ParseRender_State_DestBlend(ParseNode parent) // NonTerminalSymbol: Render_State_DestBlend { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_DestBlend), "Render_State_DestBlend"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.DestBlend); // Terminal Rule: DestBlend n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.DestBlend) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DestBlend.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseBlends(node); // NonTerminal Rule: Blends // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_DestBlend private void ParseRender_State_BlendOp(ParseNode parent) // NonTerminalSymbol: Render_State_BlendOp { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_BlendOp), "Render_State_BlendOp"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.BlendOp); // Terminal Rule: BlendOp n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.BlendOp) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BlendOp.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseBlendOps(node); // NonTerminal Rule: BlendOps // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_BlendOp private void ParseRender_State_ColorWriteEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ColorWriteEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ColorWriteEnable), "Render_State_ColorWriteEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ColorWriteEnable); // Terminal Rule: ColorWriteEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ColorWriteEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ColorWriteEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseColorsMasks(node); // NonTerminal Rule: ColorsMasks // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_ColorWriteEnable private void ParseRender_State_DepthBias(ParseNode parent) // NonTerminalSymbol: Render_State_DepthBias { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_DepthBias), "Render_State_DepthBias"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.DepthBias); // Terminal Rule: DepthBias n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.DepthBias) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DepthBias.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_DepthBias private void ParseRender_State_SlopeScaleDepthBias(ParseNode parent) // NonTerminalSymbol: Render_State_SlopeScaleDepthBias { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_SlopeScaleDepthBias), "Render_State_SlopeScaleDepthBias"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.SlopeScaleDepthBias); // Terminal Rule: SlopeScaleDepthBias n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SlopeScaleDepthBias) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SlopeScaleDepthBias.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_SlopeScaleDepthBias private void ParseRender_State_ZEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ZEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZEnable), "Render_State_ZEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ZEnable); // Terminal Rule: ZEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ZEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ZEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_ZEnable private void ParseRender_State_ZWriteEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ZWriteEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZWriteEnable), "Render_State_ZWriteEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ZWriteEnable); // Terminal Rule: ZWriteEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ZWriteEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ZWriteEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_ZWriteEnable private void ParseRender_State_ZFunc(ParseNode parent) // NonTerminalSymbol: Render_State_ZFunc { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ZFunc), "Render_State_ZFunc"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ZFunc); // Terminal Rule: ZFunc n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ZFunc) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ZFunc.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseCmpFunc(node); // NonTerminal Rule: CmpFunc // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_ZFunc private void ParseRender_State_MultiSampleAntiAlias(ParseNode parent) // NonTerminalSymbol: Render_State_MultiSampleAntiAlias { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_MultiSampleAntiAlias), "Render_State_MultiSampleAntiAlias"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MultiSampleAntiAlias); // Terminal Rule: MultiSampleAntiAlias n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MultiSampleAntiAlias) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MultiSampleAntiAlias.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_MultiSampleAntiAlias private void ParseRender_State_ScissorTestEnable(ParseNode parent) // NonTerminalSymbol: Render_State_ScissorTestEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_ScissorTestEnable), "Render_State_ScissorTestEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ScissorTestEnable); // Terminal Rule: ScissorTestEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ScissorTestEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ScissorTestEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_ScissorTestEnable private void ParseRender_State_StencilEnable(ParseNode parent) // NonTerminalSymbol: Render_State_StencilEnable { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilEnable), "Render_State_StencilEnable"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilEnable); // Terminal Rule: StencilEnable n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilEnable) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilEnable.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Boolean); // Terminal Rule: Boolean n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Boolean) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Boolean.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilEnable private void ParseRender_State_StencilFail(ParseNode parent) // NonTerminalSymbol: Render_State_StencilFail { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilFail), "Render_State_StencilFail"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilFail); // Terminal Rule: StencilFail n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilFail) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilFail.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseStencilOp(node); // NonTerminal Rule: StencilOp // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilFail private void ParseRender_State_StencilFunc(ParseNode parent) // NonTerminalSymbol: Render_State_StencilFunc { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilFunc), "Render_State_StencilFunc"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilFunc); // Terminal Rule: StencilFunc n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilFunc) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilFunc.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseCmpFunc(node); // NonTerminal Rule: CmpFunc // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilFunc private void ParseRender_State_StencilMask(ParseNode parent) // NonTerminalSymbol: Render_State_StencilMask { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilMask), "Render_State_StencilMask"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilMask); // Terminal Rule: StencilMask n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilMask) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilMask.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilMask private void ParseRender_State_StencilPass(ParseNode parent) // NonTerminalSymbol: Render_State_StencilPass { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilPass), "Render_State_StencilPass"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilPass); // Terminal Rule: StencilPass n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilPass) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilPass.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseStencilOp(node); // NonTerminal Rule: StencilOp // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilPass private void ParseRender_State_StencilRef(ParseNode parent) // NonTerminalSymbol: Render_State_StencilRef { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilRef), "Render_State_StencilRef"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilRef); // Terminal Rule: StencilRef n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilRef) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilRef.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilRef private void ParseRender_State_StencilWriteMask(ParseNode parent) // NonTerminalSymbol: Render_State_StencilWriteMask { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilWriteMask), "Render_State_StencilWriteMask"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilWriteMask); // Terminal Rule: StencilWriteMask n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilWriteMask) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilWriteMask.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilWriteMask private void ParseRender_State_StencilZFail(ParseNode parent) // NonTerminalSymbol: Render_State_StencilZFail { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_StencilZFail), "Render_State_StencilZFail"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.StencilZFail); // Terminal Rule: StencilZFail n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.StencilZFail) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.StencilZFail.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseStencilOp(node); // NonTerminal Rule: StencilOp // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_StencilZFail private void ParseRender_State_Expression(ParseNode parent) // NonTerminalSymbol: Render_State_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Render_State_Expression), "Render_State_Expression"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.CullMode: ParseRender_State_CullMode(node); // NonTerminal Rule: Render_State_CullMode break; case TokenType.FillMode: ParseRender_State_FillMode(node); // NonTerminal Rule: Render_State_FillMode break; case TokenType.AlphaBlendEnable: ParseRender_State_AlphaBlendEnable(node); // NonTerminal Rule: Render_State_AlphaBlendEnable break; case TokenType.SrcBlend: ParseRender_State_SrcBlend(node); // NonTerminal Rule: Render_State_SrcBlend break; case TokenType.DestBlend: ParseRender_State_DestBlend(node); // NonTerminal Rule: Render_State_DestBlend break; case TokenType.BlendOp: ParseRender_State_BlendOp(node); // NonTerminal Rule: Render_State_BlendOp break; case TokenType.ColorWriteEnable: ParseRender_State_ColorWriteEnable(node); // NonTerminal Rule: Render_State_ColorWriteEnable break; case TokenType.DepthBias: ParseRender_State_DepthBias(node); // NonTerminal Rule: Render_State_DepthBias break; case TokenType.SlopeScaleDepthBias: ParseRender_State_SlopeScaleDepthBias(node); // NonTerminal Rule: Render_State_SlopeScaleDepthBias break; case TokenType.ZEnable: ParseRender_State_ZEnable(node); // NonTerminal Rule: Render_State_ZEnable break; case TokenType.ZWriteEnable: ParseRender_State_ZWriteEnable(node); // NonTerminal Rule: Render_State_ZWriteEnable break; case TokenType.ZFunc: ParseRender_State_ZFunc(node); // NonTerminal Rule: Render_State_ZFunc break; case TokenType.MultiSampleAntiAlias: ParseRender_State_MultiSampleAntiAlias(node); // NonTerminal Rule: Render_State_MultiSampleAntiAlias break; case TokenType.ScissorTestEnable: ParseRender_State_ScissorTestEnable(node); // NonTerminal Rule: Render_State_ScissorTestEnable break; case TokenType.StencilEnable: ParseRender_State_StencilEnable(node); // NonTerminal Rule: Render_State_StencilEnable break; case TokenType.StencilFail: ParseRender_State_StencilFail(node); // NonTerminal Rule: Render_State_StencilFail break; case TokenType.StencilFunc: ParseRender_State_StencilFunc(node); // NonTerminal Rule: Render_State_StencilFunc break; case TokenType.StencilMask: ParseRender_State_StencilMask(node); // NonTerminal Rule: Render_State_StencilMask break; case TokenType.StencilPass: ParseRender_State_StencilPass(node); // NonTerminal Rule: Render_State_StencilPass break; case TokenType.StencilRef: ParseRender_State_StencilRef(node); // NonTerminal Rule: Render_State_StencilRef break; case TokenType.StencilWriteMask: ParseRender_State_StencilWriteMask(node); // NonTerminal Rule: Render_State_StencilWriteMask break; case TokenType.StencilZFail: ParseRender_State_StencilZFail(node); // NonTerminal Rule: Render_State_StencilZFail break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected CullMode, FillMode, AlphaBlendEnable, SrcBlend, DestBlend, BlendOp, ColorWriteEnable, DepthBias, SlopeScaleDepthBias, ZEnable, ZWriteEnable, ZFunc, MultiSampleAntiAlias, ScissorTestEnable, StencilEnable, StencilFail, StencilFunc, StencilMask, StencilPass, StencilRef, StencilWriteMask, or StencilZFail.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Render_State_Expression private void ParsePass_Declaration(ParseNode parent) // NonTerminalSymbol: Pass_Declaration { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Pass_Declaration), "Pass_Declaration"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Pass); // Terminal Rule: Pass n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Pass) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Pass.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.Identifier); // Option Rule if (tok.Type == TokenType.Identifier) { tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } } // Concat Rule tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenBracket.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // ZeroOrMore Rule while (tok.Type == TokenType.VertexShader || tok.Type == TokenType.PixelShader || tok.Type == TokenType.ComputeShader || tok.Type == TokenType.CullMode || tok.Type == TokenType.FillMode || tok.Type == TokenType.AlphaBlendEnable || tok.Type == TokenType.SrcBlend || tok.Type == TokenType.DestBlend || tok.Type == TokenType.BlendOp || tok.Type == TokenType.ColorWriteEnable || tok.Type == TokenType.DepthBias || tok.Type == TokenType.SlopeScaleDepthBias || tok.Type == TokenType.ZEnable || tok.Type == TokenType.ZWriteEnable || tok.Type == TokenType.ZFunc || tok.Type == TokenType.MultiSampleAntiAlias || tok.Type == TokenType.ScissorTestEnable || tok.Type == TokenType.StencilEnable || tok.Type == TokenType.StencilFail || tok.Type == TokenType.StencilFunc || tok.Type == TokenType.StencilMask || tok.Type == TokenType.StencilPass || tok.Type == TokenType.StencilRef || tok.Type == TokenType.StencilWriteMask || tok.Type == TokenType.StencilZFail) { tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.VertexShader: ParseVertexShader_Pass_Expression(node); // NonTerminal Rule: VertexShader_Pass_Expression break; case TokenType.PixelShader: ParsePixelShader_Pass_Expression(node); // NonTerminal Rule: PixelShader_Pass_Expression break; case TokenType.ComputeShader: ParseComputeShader_Pass_Expression(node); // NonTerminal Rule: ComputeShader_Pass_Expression break; case TokenType.CullMode: case TokenType.FillMode: case TokenType.AlphaBlendEnable: case TokenType.SrcBlend: case TokenType.DestBlend: case TokenType.BlendOp: case TokenType.ColorWriteEnable: case TokenType.DepthBias: case TokenType.SlopeScaleDepthBias: case TokenType.ZEnable: case TokenType.ZWriteEnable: case TokenType.ZFunc: case TokenType.MultiSampleAntiAlias: case TokenType.ScissorTestEnable: case TokenType.StencilEnable: case TokenType.StencilFail: case TokenType.StencilFunc: case TokenType.StencilMask: case TokenType.StencilPass: case TokenType.StencilRef: case TokenType.StencilWriteMask: case TokenType.StencilZFail: ParseRender_State_Expression(node); // NonTerminal Rule: Render_State_Expression break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected VertexShader, PixelShader, ComputeShader, CullMode, FillMode, AlphaBlendEnable, SrcBlend, DestBlend, BlendOp, ColorWriteEnable, DepthBias, SlopeScaleDepthBias, ZEnable, ZWriteEnable, ZFunc, MultiSampleAntiAlias, ScissorTestEnable, StencilEnable, StencilFail, StencilFunc, StencilMask, StencilPass, StencilRef, StencilWriteMask, or StencilZFail.", 0x0002, tok)); break; } // Choice Rule tok = scanner.LookAhead(TokenType.VertexShader, TokenType.PixelShader, TokenType.ComputeShader, TokenType.CullMode, TokenType.FillMode, TokenType.AlphaBlendEnable, TokenType.SrcBlend, TokenType.DestBlend, TokenType.BlendOp, TokenType.ColorWriteEnable, TokenType.DepthBias, TokenType.SlopeScaleDepthBias, TokenType.ZEnable, TokenType.ZWriteEnable, TokenType.ZFunc, TokenType.MultiSampleAntiAlias, TokenType.ScissorTestEnable, TokenType.StencilEnable, TokenType.StencilFail, TokenType.StencilFunc, TokenType.StencilMask, TokenType.StencilPass, TokenType.StencilRef, TokenType.StencilWriteMask, TokenType.StencilZFail); // ZeroOrMore Rule } // Concat Rule tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseBracket.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Pass_Declaration private void ParseVertexShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: VertexShader_Pass_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.VertexShader_Pass_Expression), "VertexShader_Pass_Expression"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.VertexShader); // Terminal Rule: VertexShader n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.VertexShader) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.VertexShader.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Compile) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Compile.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ShaderModel) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ShaderModel.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: VertexShader_Pass_Expression private void ParsePixelShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: PixelShader_Pass_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.PixelShader_Pass_Expression), "PixelShader_Pass_Expression"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.PixelShader); // Terminal Rule: PixelShader n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.PixelShader) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.PixelShader.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Compile) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Compile.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ShaderModel) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ShaderModel.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: PixelShader_Pass_Expression private void ParseComputeShader_Pass_Expression(ParseNode parent) // NonTerminalSymbol: ComputeShader_Pass_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ComputeShader_Pass_Expression), "ComputeShader_Pass_Expression"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.ComputeShader); // Terminal Rule: ComputeShader n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ComputeShader) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ComputeShader.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Compile); // Terminal Rule: Compile n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Compile) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Compile.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.ShaderModel); // Terminal Rule: ShaderModel n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.ShaderModel) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ShaderModel.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: ComputeShader_Pass_Expression private void ParseAddressMode_Clamp(ParseNode parent) // NonTerminalSymbol: AddressMode_Clamp { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Clamp), "AddressMode_Clamp"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Clamp); // Terminal Rule: Clamp n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Clamp) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Clamp.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: AddressMode_Clamp private void ParseAddressMode_Wrap(ParseNode parent) // NonTerminalSymbol: AddressMode_Wrap { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Wrap), "AddressMode_Wrap"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Wrap); // Terminal Rule: Wrap n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Wrap) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Wrap.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: AddressMode_Wrap private void ParseAddressMode_Mirror(ParseNode parent) // NonTerminalSymbol: AddressMode_Mirror { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Mirror), "AddressMode_Mirror"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Mirror); // Terminal Rule: Mirror n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Mirror) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Mirror.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: AddressMode_Mirror private void ParseAddressMode_Border(ParseNode parent) // NonTerminalSymbol: AddressMode_Border { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode_Border), "AddressMode_Border"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Border); // Terminal Rule: Border n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Border) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Border.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: AddressMode_Border private void ParseAddressMode(ParseNode parent) // NonTerminalSymbol: AddressMode { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.AddressMode), "AddressMode"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Clamp, TokenType.Wrap, TokenType.Mirror, TokenType.Border); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Clamp: ParseAddressMode_Clamp(node); // NonTerminal Rule: AddressMode_Clamp break; case TokenType.Wrap: ParseAddressMode_Wrap(node); // NonTerminal Rule: AddressMode_Wrap break; case TokenType.Mirror: ParseAddressMode_Mirror(node); // NonTerminal Rule: AddressMode_Mirror break; case TokenType.Border: ParseAddressMode_Border(node); // NonTerminal Rule: AddressMode_Border break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Clamp, Wrap, Mirror, or Border.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: AddressMode private void ParseTextureFilter_None(ParseNode parent) // NonTerminalSymbol: TextureFilter_None { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_None), "TextureFilter_None"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.None); // Terminal Rule: None n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.None) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.None.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: TextureFilter_None private void ParseTextureFilter_Linear(ParseNode parent) // NonTerminalSymbol: TextureFilter_Linear { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Linear), "TextureFilter_Linear"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Linear); // Terminal Rule: Linear n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Linear) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Linear.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: TextureFilter_Linear private void ParseTextureFilter_Point(ParseNode parent) // NonTerminalSymbol: TextureFilter_Point { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Point), "TextureFilter_Point"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Point); // Terminal Rule: Point n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Point) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Point.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: TextureFilter_Point private void ParseTextureFilter_Anisotropic(ParseNode parent) // NonTerminalSymbol: TextureFilter_Anisotropic { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter_Anisotropic), "TextureFilter_Anisotropic"); parent.Nodes.Add(node); tok = scanner.Scan(TokenType.Anisotropic); // Terminal Rule: Anisotropic n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Anisotropic) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Anisotropic.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: TextureFilter_Anisotropic private void ParseTextureFilter(ParseNode parent) // NonTerminalSymbol: TextureFilter { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.TextureFilter), "TextureFilter"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.None, TokenType.Linear, TokenType.Point, TokenType.Anisotropic); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.None: ParseTextureFilter_None(node); // NonTerminal Rule: TextureFilter_None break; case TokenType.Linear: ParseTextureFilter_Linear(node); // NonTerminal Rule: TextureFilter_Linear break; case TokenType.Point: ParseTextureFilter_Point(node); // NonTerminal Rule: TextureFilter_Point break; case TokenType.Anisotropic: ParseTextureFilter_Anisotropic(node); // NonTerminal Rule: TextureFilter_Anisotropic break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected None, Linear, Point, or Anisotropic.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: TextureFilter private void ParseSampler_State_Texture(ParseNode parent) // NonTerminalSymbol: Sampler_State_Texture { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Texture), "Sampler_State_Texture"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Texture); // Terminal Rule: Texture n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Texture) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Texture.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.LessThan, TokenType.OpenParenthesis); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.LessThan: tok = scanner.Scan(TokenType.LessThan); // Terminal Rule: LessThan n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.LessThan) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.LessThan.ToString(), 0x1001, tok)); return; } break; case TokenType.OpenParenthesis: tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok)); return; } break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected LessThan or OpenParenthesis.", 0x0002, tok)); break; } // Choice Rule // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.GreaterThan, TokenType.CloseParenthesis); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.GreaterThan: tok = scanner.Scan(TokenType.GreaterThan); // Terminal Rule: GreaterThan n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.GreaterThan) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.GreaterThan.ToString(), 0x1001, tok)); return; } break; case TokenType.CloseParenthesis: tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected GreaterThan or CloseParenthesis.", 0x0002, tok)); break; } // Choice Rule // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_Texture private void ParseSampler_State_MinFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MinFilter { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MinFilter), "Sampler_State_MinFilter"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MinFilter); // Terminal Rule: MinFilter n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MinFilter) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MinFilter.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseTextureFilter(node); // NonTerminal Rule: TextureFilter // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MinFilter private void ParseSampler_State_MagFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MagFilter { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MagFilter), "Sampler_State_MagFilter"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MagFilter); // Terminal Rule: MagFilter n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MagFilter) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MagFilter.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseTextureFilter(node); // NonTerminal Rule: TextureFilter // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MagFilter private void ParseSampler_State_MipFilter(ParseNode parent) // NonTerminalSymbol: Sampler_State_MipFilter { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MipFilter), "Sampler_State_MipFilter"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MipFilter); // Terminal Rule: MipFilter n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MipFilter) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MipFilter.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseTextureFilter(node); // NonTerminal Rule: TextureFilter // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MipFilter private void ParseSampler_State_Filter(ParseNode parent) // NonTerminalSymbol: Sampler_State_Filter { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Filter), "Sampler_State_Filter"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Filter); // Terminal Rule: Filter n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Filter) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Filter.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseTextureFilter(node); // NonTerminal Rule: TextureFilter // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_Filter private void ParseSampler_State_AddressU(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressU { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressU), "Sampler_State_AddressU"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.AddressU); // Terminal Rule: AddressU n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.AddressU) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.AddressU.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseAddressMode(node); // NonTerminal Rule: AddressMode // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_AddressU private void ParseSampler_State_AddressV(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressV { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressV), "Sampler_State_AddressV"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.AddressV); // Terminal Rule: AddressV n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.AddressV) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.AddressV.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseAddressMode(node); // NonTerminal Rule: AddressMode // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_AddressV private void ParseSampler_State_AddressW(ParseNode parent) // NonTerminalSymbol: Sampler_State_AddressW { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_AddressW), "Sampler_State_AddressW"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.AddressW); // Terminal Rule: AddressW n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.AddressW) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.AddressW.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule ParseAddressMode(node); // NonTerminal Rule: AddressMode // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_AddressW private void ParseSampler_State_BorderColor(ParseNode parent) // NonTerminalSymbol: Sampler_State_BorderColor { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_BorderColor), "Sampler_State_BorderColor"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.BorderColor); // Terminal Rule: BorderColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.BorderColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BorderColor.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.HexColor); // Terminal Rule: HexColor n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.HexColor) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.HexColor.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_BorderColor private void ParseSampler_State_MaxMipLevel(ParseNode parent) // NonTerminalSymbol: Sampler_State_MaxMipLevel { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MaxMipLevel), "Sampler_State_MaxMipLevel"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MaxMipLevel); // Terminal Rule: MaxMipLevel n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MaxMipLevel) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MaxMipLevel.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MaxMipLevel private void ParseSampler_State_MaxAnisotropy(ParseNode parent) // NonTerminalSymbol: Sampler_State_MaxAnisotropy { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MaxAnisotropy), "Sampler_State_MaxAnisotropy"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MaxAnisotropy); // Terminal Rule: MaxAnisotropy n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MaxAnisotropy) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MaxAnisotropy.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MaxAnisotropy private void ParseSampler_State_MipLodBias(ParseNode parent) // NonTerminalSymbol: Sampler_State_MipLodBias { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_MipLodBias), "Sampler_State_MipLodBias"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.MipLodBias); // Terminal Rule: MipLodBias n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.MipLodBias) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.MipLodBias.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_MipLodBias private void ParseSampler_State_Expression(ParseNode parent) // NonTerminalSymbol: Sampler_State_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_State_Expression), "Sampler_State_Expression"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Texture: ParseSampler_State_Texture(node); // NonTerminal Rule: Sampler_State_Texture break; case TokenType.MinFilter: ParseSampler_State_MinFilter(node); // NonTerminal Rule: Sampler_State_MinFilter break; case TokenType.MagFilter: ParseSampler_State_MagFilter(node); // NonTerminal Rule: Sampler_State_MagFilter break; case TokenType.MipFilter: ParseSampler_State_MipFilter(node); // NonTerminal Rule: Sampler_State_MipFilter break; case TokenType.Filter: ParseSampler_State_Filter(node); // NonTerminal Rule: Sampler_State_Filter break; case TokenType.AddressU: ParseSampler_State_AddressU(node); // NonTerminal Rule: Sampler_State_AddressU break; case TokenType.AddressV: ParseSampler_State_AddressV(node); // NonTerminal Rule: Sampler_State_AddressV break; case TokenType.AddressW: ParseSampler_State_AddressW(node); // NonTerminal Rule: Sampler_State_AddressW break; case TokenType.BorderColor: ParseSampler_State_BorderColor(node); // NonTerminal Rule: Sampler_State_BorderColor break; case TokenType.MaxMipLevel: ParseSampler_State_MaxMipLevel(node); // NonTerminal Rule: Sampler_State_MaxMipLevel break; case TokenType.MaxAnisotropy: ParseSampler_State_MaxAnisotropy(node); // NonTerminal Rule: Sampler_State_MaxAnisotropy break; case TokenType.MipLodBias: ParseSampler_State_MipLodBias(node); // NonTerminal Rule: Sampler_State_MipLodBias break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Texture, MinFilter, MagFilter, MipFilter, Filter, AddressU, AddressV, AddressW, BorderColor, MaxMipLevel, MaxAnisotropy, or MipLodBias.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_State_Expression private void ParseSampler_Register_Expression(ParseNode parent) // NonTerminalSymbol: Sampler_Register_Expression { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Register_Expression), "Sampler_Register_Expression"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Colon); // Terminal Rule: Colon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Colon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Colon.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Register); // Terminal Rule: Register n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Register) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Register.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.OpenParenthesis); // Terminal Rule: OpenParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenParenthesis.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.Comma); // Option Rule if (tok.Type == TokenType.Comma) { // Concat Rule tok = scanner.Scan(TokenType.Comma); // Terminal Rule: Comma n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Comma) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Comma.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.OpenSquareBracket); // Option Rule if (tok.Type == TokenType.OpenSquareBracket) { // Concat Rule tok = scanner.Scan(TokenType.OpenSquareBracket); // Terminal Rule: OpenSquareBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenSquareBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenSquareBracket.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Number); // Terminal Rule: Number n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Number) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Number.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.CloseSquareBracket); // Terminal Rule: CloseSquareBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseSquareBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseSquareBracket.ToString(), 0x1001, tok)); return; } } } // Concat Rule tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_Register_Expression private void ParseSampler_Declaration_States(ParseNode parent) // NonTerminalSymbol: Sampler_Declaration_States { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Declaration_States), "Sampler_Declaration_States"); parent.Nodes.Add(node); // Concat Rule tok = scanner.LookAhead(TokenType.Equals); // Option Rule if (tok.Type == TokenType.Equals) { // Concat Rule tok = scanner.Scan(TokenType.Equals); // Terminal Rule: Equals n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Equals) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Equals.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.SamplerState); // Terminal Rule: SamplerState n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.SamplerState) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SamplerState.ToString(), 0x1001, tok)); return; } } // Concat Rule tok = scanner.Scan(TokenType.OpenBracket); // Terminal Rule: OpenBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.OpenBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OpenBracket.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // ZeroOrMore Rule while (tok.Type == TokenType.Texture || tok.Type == TokenType.MinFilter || tok.Type == TokenType.MagFilter || tok.Type == TokenType.MipFilter || tok.Type == TokenType.Filter || tok.Type == TokenType.AddressU || tok.Type == TokenType.AddressV || tok.Type == TokenType.AddressW || tok.Type == TokenType.BorderColor || tok.Type == TokenType.MaxMipLevel || tok.Type == TokenType.MaxAnisotropy || tok.Type == TokenType.MipLodBias) { ParseSampler_State_Expression(node); // NonTerminal Rule: Sampler_State_Expression tok = scanner.LookAhead(TokenType.Texture, TokenType.MinFilter, TokenType.MagFilter, TokenType.MipFilter, TokenType.Filter, TokenType.AddressU, TokenType.AddressV, TokenType.AddressW, TokenType.BorderColor, TokenType.MaxMipLevel, TokenType.MaxAnisotropy, TokenType.MipLodBias); // ZeroOrMore Rule } // Concat Rule tok = scanner.Scan(TokenType.CloseBracket); // Terminal Rule: CloseBracket n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseBracket) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseBracket.ToString(), 0x1001, tok)); return; } parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_Declaration_States private void ParseSampler_Declaration(ParseNode parent) // NonTerminalSymbol: Sampler_Declaration { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Sampler_Declaration), "Sampler_Declaration"); parent.Nodes.Add(node); // Concat Rule tok = scanner.Scan(TokenType.Sampler); // Terminal Rule: Sampler n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Sampler) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Sampler.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.Scan(TokenType.Identifier); // Terminal Rule: Identifier n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Identifier) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Identifier.ToString(), 0x1001, tok)); return; } // Concat Rule tok = scanner.LookAhead(TokenType.Colon); // ZeroOrMore Rule while (tok.Type == TokenType.Colon) { ParseSampler_Register_Expression(node); // NonTerminal Rule: Sampler_Register_Expression tok = scanner.LookAhead(TokenType.Colon); // ZeroOrMore Rule } // Concat Rule tok = scanner.LookAhead(TokenType.Equals, TokenType.OpenBracket); // Option Rule if (tok.Type == TokenType.Equals || tok.Type == TokenType.OpenBracket) { ParseSampler_Declaration_States(node); // NonTerminal Rule: Sampler_Declaration_States } // Concat Rule tok = scanner.LookAhead(TokenType.Semicolon, TokenType.Comma, TokenType.CloseParenthesis); // Choice Rule switch (tok.Type) { // Choice Rule case TokenType.Semicolon: tok = scanner.Scan(TokenType.Semicolon); // Terminal Rule: Semicolon n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Semicolon) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Semicolon.ToString(), 0x1001, tok)); return; } break; case TokenType.Comma: tok = scanner.Scan(TokenType.Comma); // Terminal Rule: Comma n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.Comma) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.Comma.ToString(), 0x1001, tok)); return; } break; case TokenType.CloseParenthesis: tok = scanner.Scan(TokenType.CloseParenthesis); // Terminal Rule: CloseParenthesis n = node.CreateNode(tok, tok.ToString() ); node.Token.UpdateRange(tok); node.Nodes.Add(n); if (tok.Type != TokenType.CloseParenthesis) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CloseParenthesis.ToString(), 0x1001, tok)); return; } break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected Semicolon, Comma, or CloseParenthesis.", 0x0002, tok)); break; } // Choice Rule parent.Token.UpdateRange(node.Token); } // NonTerminalSymbol: Sampler_Declaration } #endregion Parser } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/PassInfo.cs ================================================ using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { public class PassInfo { public string name; public string vsModel; public string vsFunction; public string psModel; public string psFunction; public string csModel; public string csFunction; public BlendState blendState; public RasterizerState rasterizerState; public DepthStencilState depthStencilState; private static Blend ToAlphaBlend(BlendContent blend) { switch (blend) { case BlendContent.SourceColor: return Blend.SourceAlpha; case BlendContent.InverseSourceColor: return Blend.InverseSourceAlpha; case BlendContent.DestinationColor: return Blend.DestinationAlpha; case BlendContent.InverseDestinationColor: return Blend.InverseDestinationAlpha; } return (Blend)blend; } public bool AlphaBlendEnable { set { if (value) { if (blendState == null) { blendState = new BlendState(); blendState.ColorSourceBlend = Blend.One; blendState.AlphaSourceBlend = Blend.One; blendState.ColorDestinationBlend = Blend.InverseSourceAlpha; blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha; } } else if (!value) { if (blendState == null) blendState = new BlendState(); blendState.ColorSourceBlend = Blend.One; blendState.AlphaSourceBlend = Blend.One; blendState.ColorDestinationBlend = Blend.Zero; blendState.AlphaDestinationBlend = Blend.Zero; } } } public FillModeContent FillMode { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.FillMode = (FillMode)value; } } public CullModeContent CullMode { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.CullMode = (CullMode)value; } } public bool ZEnable { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.DepthBufferEnable = value; } } public bool ZWriteEnable { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.DepthBufferWriteEnable = value; } } public CompareFunctionContent DepthBufferFunction { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.DepthBufferFunction = (CompareFunction)value; } } public bool MultiSampleAntiAlias { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.MultiSampleAntiAlias = value; } } public bool ScissorTestEnable { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.ScissorTestEnable = value; } } public bool StencilEnable { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilEnable = value; } } public StencilOperationContent StencilFail { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilFail = (StencilOperation)value; } } public CompareFunctionContent StencilFunc { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilFunction = (CompareFunction)value; } } public int StencilMask { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilMask = value; } } public StencilOperationContent StencilPass { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilPass = (StencilOperation)value; } } public int StencilRef { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.ReferenceStencil = value; } } public int StencilWriteMask { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilWriteMask = value; } } public StencilOperationContent StencilZFail { set { if (depthStencilState == null) depthStencilState = new DepthStencilState(); depthStencilState.StencilDepthBufferFail = (StencilOperation)value; } } public BlendContent SrcBlend { set { if (blendState == null) blendState = new BlendState(); blendState.ColorSourceBlend = (Blend)value; blendState.AlphaSourceBlend = ToAlphaBlend(value); } } public BlendContent DestBlend { set { if (blendState == null) blendState = new BlendState(); blendState.ColorDestinationBlend = (Blend)value; blendState.AlphaDestinationBlend = ToAlphaBlend(value); } } public BlendFunctionContent BlendOp { set { if (blendState == null) blendState = new BlendState(); blendState.AlphaBlendFunction = (BlendFunction)value; } } public ColorWriteChannelsContent ColorWriteEnable { set { if (blendState == null) blendState = new BlendState(); blendState.ColorWriteChannels = (ColorWriteChannels)value; } } public float DepthBias { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.DepthBias = value; } } public float SlopeScaleDepthBias { set { if (rasterizerState == null) rasterizerState = new RasterizerState(); rasterizerState.SlopeScaleDepthBias = value; } } } /// /// Defines stencil buffer operations. /// public enum StencilOperationContent { /// /// Does not update the stencil buffer entry. /// Keep, /// /// Sets the stencil buffer entry to 0. /// Zero, /// /// Replaces the stencil buffer entry with a reference value. /// Replace, /// /// Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value. /// Increment, /// /// Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0. /// Decrement, /// /// Increments the stencil buffer entry, clamping to the maximum value. /// IncrementSaturation, /// /// Decrements the stencil buffer entry, clamping to 0. /// DecrementSaturation, /// /// Inverts the bits in the stencil buffer entry. /// Invert } /// /// Defines a blend mode. /// public enum BlendContent { /// /// Each component of the color is multiplied by {1, 1, 1, 1}. /// One, /// /// Each component of the color is multiplied by {0, 0, 0, 0}. /// Zero, /// /// Each component of the color is multiplied by the source color. /// {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values. /// SourceColor, /// /// Each component of the color is multiplied by the inverse of the source color. /// {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values. /// InverseSourceColor, /// /// Each component of the color is multiplied by the alpha value of the source. /// {As, As, As, As}, where As is the source alpha value. /// SourceAlpha, /// /// Each component of the color is multiplied by the inverse of the alpha value of the source. /// {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value. /// InverseSourceAlpha, /// /// Each component color is multiplied by the destination color. /// {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values. /// DestinationColor, /// /// Each component of the color is multiplied by the inversed destination color. /// {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values. /// InverseDestinationColor, /// /// Each component of the color is multiplied by the alpha value of the destination. /// {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value. /// DestinationAlpha, /// /// Each component of the color is multiplied by the inversed alpha value of the destination. /// {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value. /// InverseDestinationAlpha, /// /// Each component of the color is multiplied by a constant in the . /// BlendFactor, /// /// Each component of the color is multiplied by a inversed constant in the . /// InverseBlendFactor, /// /// Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. /// {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value. /// SourceAlphaSaturation } /// /// Defines a function for color blending. /// public enum BlendFunctionContent { /// /// The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend) /// Add, /// /// The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend) /// Subtract, /// /// The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) /// ReverseSubtract, /// /// The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend)) /// Min, /// /// The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend)) /// Max } /// /// Defines the color channels for render target blending operations. /// [Flags] public enum ColorWriteChannelsContent { /// /// No channels selected. /// None = 0, /// /// Red channel selected. /// Red = 1, /// /// Green channel selected. /// Green = 2, /// /// Blue channel selected. /// Blue = 4, /// /// Alpha channel selected. /// Alpha = 8, /// /// All channels selected. /// All = 15 } /// /// Defines options for filling the primitive. /// public enum FillModeContent { /// /// Draw solid faces for each primitive. /// Solid, /// /// Draw lines for each primitive. /// WireFrame } /// /// Defines a culling mode for faces in rasterization process. /// public enum CullModeContent { /// /// Do not cull faces. /// None, /// /// Cull faces with clockwise order. /// CullClockwiseFace, /// /// Cull faces with counter clockwise order. /// CullCounterClockwiseFace } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/SamplerStateInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { public class SamplerStateInfo { private SamplerState _state; private bool _dirty; private TextureFilterTypeContent _minFilter; private TextureFilterTypeContent _magFilter; private TextureFilterTypeContent _mipFilter; private TextureAddressModeContent _addressU; private TextureAddressModeContent _addressV; private TextureAddressModeContent _addressW; private Color _borderColor; private int _maxAnisotropy; private int _maxMipLevel; private float _mipMapLevelOfDetailBias; public SamplerStateInfo() { // NOTE: These match the defaults of SamplerState. _minFilter = TextureFilterTypeContent.Linear; _magFilter = TextureFilterTypeContent.Linear; _mipFilter = TextureFilterTypeContent.Linear; _addressU = TextureAddressModeContent.Wrap; _addressV = TextureAddressModeContent.Wrap; _addressW = TextureAddressModeContent.Wrap; _borderColor = Color.White; _maxAnisotropy = 4; _maxMipLevel = 0; _mipMapLevelOfDetailBias = 0.0f; } public string Name { get; set; } public string TextureName { get; set; } public TextureFilterTypeContent MinFilter { set { _minFilter = value; _dirty = true; } } public TextureFilterTypeContent MagFilter { set { _magFilter = value; _dirty = true; } } public TextureFilterTypeContent MipFilter { set { _mipFilter = value; _dirty = true; } } public TextureFilterTypeContent Filter { set { _minFilter = _magFilter = _mipFilter = value; _dirty = true; } } public TextureAddressModeContent AddressU { set { _addressU = value; _dirty = true; } } public TextureAddressModeContent AddressV { set { _addressV = value; _dirty = true; } } public TextureAddressModeContent AddressW { set { _addressW = value; _dirty = true; } } public Color BorderColor { set { _borderColor = value; _dirty = true; } } public int MaxAnisotropy { set { _maxAnisotropy = value; _dirty = true; } } public int MaxMipLevel { set { _maxMipLevel = value; _dirty = true; } } public float MipMapLevelOfDetailBias { set { _mipMapLevelOfDetailBias = value; _dirty = true; } } static TextureAddressMode ToXNATextureAddressMode(TextureAddressModeContent textureAddressMode) { switch (textureAddressMode) { case TextureAddressModeContent.Clamp: return TextureAddressMode.Clamp; case TextureAddressModeContent.Wrap: return TextureAddressMode.Wrap; case TextureAddressModeContent.Mirror: return TextureAddressMode.Mirror; case TextureAddressModeContent.Border: return TextureAddressMode.Border; default: throw new NotImplementedException(); } } private void UpdateSamplerState() { // Get the existing state or create it. if (_state == null) _state = new SamplerState(); _state.AddressU = ToXNATextureAddressMode(_addressU); _state.AddressV = ToXNATextureAddressMode(_addressV); _state.AddressW = ToXNATextureAddressMode(_addressW); _state.BorderColor = _borderColor; _state.MaxAnisotropy = _maxAnisotropy; _state.MaxMipLevel = _maxMipLevel; _state.MipMapLevelOfDetailBias = _mipMapLevelOfDetailBias; // Figure out what kind of filter to set based on each // individual min, mag, and mip filter settings. // // NOTE: We're treating "None" and "Point" the same here // and disabling mipmapping further below. // if (_minFilter == TextureFilterTypeContent.Anisotropic) _state.Filter = TextureFilter.Anisotropic; else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter == TextureFilterTypeContent.Linear && _mipFilter == TextureFilterTypeContent.Linear) _state.Filter = TextureFilter.Linear; else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter == TextureFilterTypeContent.Linear && _mipFilter <= TextureFilterTypeContent.Point) _state.Filter = TextureFilter.LinearMipPoint; else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter <= TextureFilterTypeContent.Point && _mipFilter == TextureFilterTypeContent.Linear) _state.Filter = TextureFilter.MinLinearMagPointMipLinear; else if (_minFilter == TextureFilterTypeContent.Linear && _magFilter <= TextureFilterTypeContent.Point && _mipFilter <= TextureFilterTypeContent.Point) _state.Filter = TextureFilter.MinLinearMagPointMipPoint; else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter == TextureFilterTypeContent.Linear && _mipFilter == TextureFilterTypeContent.Linear) _state.Filter = TextureFilter.MinPointMagLinearMipLinear; else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter == TextureFilterTypeContent.Linear && _mipFilter <= TextureFilterTypeContent.Point) _state.Filter = TextureFilter.MinPointMagLinearMipPoint; else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter <= TextureFilterTypeContent.Point && _mipFilter <= TextureFilterTypeContent.Point) _state.Filter = TextureFilter.Point; else if (_minFilter <= TextureFilterTypeContent.Point && _magFilter <= TextureFilterTypeContent.Point && _mipFilter == TextureFilterTypeContent.Linear) _state.Filter = TextureFilter.PointMipLinear; // Do we need to disable mipmapping? if (_mipFilter == TextureFilterTypeContent.None) { // TODO: This is the only option we have right now for // disabling mipmapping. We should add support for MinLod // and MaxLod which potentially does a better job at this. _state.MipMapLevelOfDetailBias = -16.0f; _state.MaxMipLevel = 0; } _dirty = false; } public SamplerState State { get { if (_dirty) UpdateSamplerState(); return _state; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/Scanner.cs ================================================ // Generated by TinyPG v1.3 available at www.codeproject.com using System; using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; using System.Xml.Serialization; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { #region Scanner public partial class Scanner { public string Input; public int StartPos = 0; public int EndPos = 0; public string CurrentFile; public int CurrentLine; public int CurrentColumn; public int CurrentPosition; public List Skipped; // tokens that were skipped public Dictionary Patterns; private Token LookAheadToken; private List Tokens; private List SkipList; // tokens to be skipped private readonly TokenType FileAndLine; public Scanner() { Regex regex; Patterns = new Dictionary(); Tokens = new List(); LookAheadToken = null; Skipped = new List(); SkipList = new List(); SkipList.Add(TokenType.BlockComment); SkipList.Add(TokenType.Comment); SkipList.Add(TokenType.Whitespace); SkipList.Add(TokenType.LinePragma); FileAndLine = TokenType.LinePragma; regex = new Regex(@"/\*([^*]|\*[^/])*\*/", RegexOptions.Compiled); Patterns.Add(TokenType.BlockComment, regex); Tokens.Add(TokenType.BlockComment); regex = new Regex(@"//[^\n\r]*", RegexOptions.Compiled); Patterns.Add(TokenType.Comment, regex); Tokens.Add(TokenType.Comment); regex = new Regex(@"[ \t\n\r]+", RegexOptions.Compiled); Patterns.Add(TokenType.Whitespace, regex); Tokens.Add(TokenType.Whitespace); regex = new Regex(@"^[ \t]*#line[ \t]*(?\d*)[ \t]*(\""(?[^\""\\]*(?:\\.[^\""\\]*)*)\"")?\n", RegexOptions.Compiled); Patterns.Add(TokenType.LinePragma, regex); Tokens.Add(TokenType.LinePragma); regex = new Regex(@"pass", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Pass, regex); Tokens.Add(TokenType.Pass); regex = new Regex(@"technique", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Technique, regex); Tokens.Add(TokenType.Technique); regex = new Regex(@"sampler1D|sampler2D|sampler3D|samplerCUBE|SamplerState|sampler", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Sampler, regex); Tokens.Add(TokenType.Sampler); regex = new Regex(@"sampler_state", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SamplerState, regex); Tokens.Add(TokenType.SamplerState); regex = new Regex(@"VertexShader", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.VertexShader, regex); Tokens.Add(TokenType.VertexShader); regex = new Regex(@"PixelShader", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.PixelShader, regex); Tokens.Add(TokenType.PixelShader); regex = new Regex(@"ComputeShader", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ComputeShader, regex); Tokens.Add(TokenType.ComputeShader); regex = new Regex(@"register", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Register, regex); Tokens.Add(TokenType.Register); regex = new Regex(@"true|false|0|1", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Boolean, regex); Tokens.Add(TokenType.Boolean); regex = new Regex(@"[+-]? ?[0-9]?\.?[0-9]+[fF]?", RegexOptions.Compiled); Patterns.Add(TokenType.Number, regex); Tokens.Add(TokenType.Number); regex = new Regex(@"0x[0-9a-f]{6}([0-9a-f][0-9a-f])?", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.HexColor, regex); Tokens.Add(TokenType.HexColor); regex = new Regex(@"[A-Za-z_][A-Za-z0-9_]*", RegexOptions.Compiled); Patterns.Add(TokenType.Identifier, regex); Tokens.Add(TokenType.Identifier); regex = new Regex(@"{", RegexOptions.Compiled); Patterns.Add(TokenType.OpenBracket, regex); Tokens.Add(TokenType.OpenBracket); regex = new Regex(@"}", RegexOptions.Compiled); Patterns.Add(TokenType.CloseBracket, regex); Tokens.Add(TokenType.CloseBracket); regex = new Regex(@"=", RegexOptions.Compiled); Patterns.Add(TokenType.Equals, regex); Tokens.Add(TokenType.Equals); regex = new Regex(@":", RegexOptions.Compiled); Patterns.Add(TokenType.Colon, regex); Tokens.Add(TokenType.Colon); regex = new Regex(@",", RegexOptions.Compiled); Patterns.Add(TokenType.Comma, regex); Tokens.Add(TokenType.Comma); regex = new Regex(@";", RegexOptions.Compiled); Patterns.Add(TokenType.Semicolon, regex); Tokens.Add(TokenType.Semicolon); regex = new Regex(@"\|", RegexOptions.Compiled); Patterns.Add(TokenType.Or, regex); Tokens.Add(TokenType.Or); regex = new Regex(@"\(", RegexOptions.Compiled); Patterns.Add(TokenType.OpenParenthesis, regex); Tokens.Add(TokenType.OpenParenthesis); regex = new Regex(@"\)", RegexOptions.Compiled); Patterns.Add(TokenType.CloseParenthesis, regex); Tokens.Add(TokenType.CloseParenthesis); regex = new Regex(@"\[", RegexOptions.Compiled); Patterns.Add(TokenType.OpenSquareBracket, regex); Tokens.Add(TokenType.OpenSquareBracket); regex = new Regex(@"\]", RegexOptions.Compiled); Patterns.Add(TokenType.CloseSquareBracket, regex); Tokens.Add(TokenType.CloseSquareBracket); regex = new Regex(@"<", RegexOptions.Compiled); Patterns.Add(TokenType.LessThan, regex); Tokens.Add(TokenType.LessThan); regex = new Regex(@">", RegexOptions.Compiled); Patterns.Add(TokenType.GreaterThan, regex); Tokens.Add(TokenType.GreaterThan); regex = new Regex(@"compile", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Compile, regex); Tokens.Add(TokenType.Compile); regex = new Regex(@"[A-Za-z_][A-Za-z0-9_]*", RegexOptions.Compiled); Patterns.Add(TokenType.ShaderModel, regex); Tokens.Add(TokenType.ShaderModel); regex = new Regex(@"[\S]+", RegexOptions.Compiled); Patterns.Add(TokenType.Code, regex); Tokens.Add(TokenType.Code); regex = new Regex(@"^$", RegexOptions.Compiled); Patterns.Add(TokenType.EndOfFile, regex); Tokens.Add(TokenType.EndOfFile); regex = new Regex(@"MinFilter", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MinFilter, regex); Tokens.Add(TokenType.MinFilter); regex = new Regex(@"MagFilter", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MagFilter, regex); Tokens.Add(TokenType.MagFilter); regex = new Regex(@"MipFilter", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MipFilter, regex); Tokens.Add(TokenType.MipFilter); regex = new Regex(@"Filter", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Filter, regex); Tokens.Add(TokenType.Filter); regex = new Regex(@"Texture", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Texture, regex); Tokens.Add(TokenType.Texture); regex = new Regex(@"AddressU", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.AddressU, regex); Tokens.Add(TokenType.AddressU); regex = new Regex(@"AddressV", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.AddressV, regex); Tokens.Add(TokenType.AddressV); regex = new Regex(@"AddressW", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.AddressW, regex); Tokens.Add(TokenType.AddressW); regex = new Regex(@"BorderColor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.BorderColor, regex); Tokens.Add(TokenType.BorderColor); regex = new Regex(@"MaxAnisotropy", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MaxAnisotropy, regex); Tokens.Add(TokenType.MaxAnisotropy); regex = new Regex(@"MaxMipLevel|MaxLod", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MaxMipLevel, regex); Tokens.Add(TokenType.MaxMipLevel); regex = new Regex(@"MipLodBias", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MipLodBias, regex); Tokens.Add(TokenType.MipLodBias); regex = new Regex(@"Clamp", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Clamp, regex); Tokens.Add(TokenType.Clamp); regex = new Regex(@"Wrap", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Wrap, regex); Tokens.Add(TokenType.Wrap); regex = new Regex(@"Mirror", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Mirror, regex); Tokens.Add(TokenType.Mirror); regex = new Regex(@"Border", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Border, regex); Tokens.Add(TokenType.Border); regex = new Regex(@"None", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.None, regex); Tokens.Add(TokenType.None); regex = new Regex(@"Linear", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Linear, regex); Tokens.Add(TokenType.Linear); regex = new Regex(@"Point", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Point, regex); Tokens.Add(TokenType.Point); regex = new Regex(@"Anisotropic", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Anisotropic, regex); Tokens.Add(TokenType.Anisotropic); regex = new Regex(@"AlphaBlendEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.AlphaBlendEnable, regex); Tokens.Add(TokenType.AlphaBlendEnable); regex = new Regex(@"SrcBlend", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SrcBlend, regex); Tokens.Add(TokenType.SrcBlend); regex = new Regex(@"DestBlend", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.DestBlend, regex); Tokens.Add(TokenType.DestBlend); regex = new Regex(@"BlendOp", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.BlendOp, regex); Tokens.Add(TokenType.BlendOp); regex = new Regex(@"ColorWriteEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ColorWriteEnable, regex); Tokens.Add(TokenType.ColorWriteEnable); regex = new Regex(@"ZEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ZEnable, regex); Tokens.Add(TokenType.ZEnable); regex = new Regex(@"ZWriteEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ZWriteEnable, regex); Tokens.Add(TokenType.ZWriteEnable); regex = new Regex(@"ZFunc", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ZFunc, regex); Tokens.Add(TokenType.ZFunc); regex = new Regex(@"DepthBias", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.DepthBias, regex); Tokens.Add(TokenType.DepthBias); regex = new Regex(@"CullMode", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.CullMode, regex); Tokens.Add(TokenType.CullMode); regex = new Regex(@"FillMode", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.FillMode, regex); Tokens.Add(TokenType.FillMode); regex = new Regex(@"MultiSampleAntiAlias", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.MultiSampleAntiAlias, regex); Tokens.Add(TokenType.MultiSampleAntiAlias); regex = new Regex(@"ScissorTestEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.ScissorTestEnable, regex); Tokens.Add(TokenType.ScissorTestEnable); regex = new Regex(@"SlopeScaleDepthBias", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SlopeScaleDepthBias, regex); Tokens.Add(TokenType.SlopeScaleDepthBias); regex = new Regex(@"StencilEnable", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilEnable, regex); Tokens.Add(TokenType.StencilEnable); regex = new Regex(@"StencilFail", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilFail, regex); Tokens.Add(TokenType.StencilFail); regex = new Regex(@"StencilFunc", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilFunc, regex); Tokens.Add(TokenType.StencilFunc); regex = new Regex(@"StencilMask", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilMask, regex); Tokens.Add(TokenType.StencilMask); regex = new Regex(@"StencilPass", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilPass, regex); Tokens.Add(TokenType.StencilPass); regex = new Regex(@"StencilRef", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilRef, regex); Tokens.Add(TokenType.StencilRef); regex = new Regex(@"StencilWriteMask", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilWriteMask, regex); Tokens.Add(TokenType.StencilWriteMask); regex = new Regex(@"StencilZFail", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.StencilZFail, regex); Tokens.Add(TokenType.StencilZFail); regex = new Regex(@"Never", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Never, regex); Tokens.Add(TokenType.Never); regex = new Regex(@"Less", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Less, regex); Tokens.Add(TokenType.Less); regex = new Regex(@"Equal", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Equal, regex); Tokens.Add(TokenType.Equal); regex = new Regex(@"LessEqual", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.LessEqual, regex); Tokens.Add(TokenType.LessEqual); regex = new Regex(@"Greater", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Greater, regex); Tokens.Add(TokenType.Greater); regex = new Regex(@"NotEqual", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.NotEqual, regex); Tokens.Add(TokenType.NotEqual); regex = new Regex(@"GreaterEqual", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.GreaterEqual, regex); Tokens.Add(TokenType.GreaterEqual); regex = new Regex(@"Always", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Always, regex); Tokens.Add(TokenType.Always); regex = new Regex(@"Keep", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Keep, regex); Tokens.Add(TokenType.Keep); regex = new Regex(@"Zero", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Zero, regex); Tokens.Add(TokenType.Zero); regex = new Regex(@"Replace", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Replace, regex); Tokens.Add(TokenType.Replace); regex = new Regex(@"IncrSat", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.IncrSat, regex); Tokens.Add(TokenType.IncrSat); regex = new Regex(@"DecrSat", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.DecrSat, regex); Tokens.Add(TokenType.DecrSat); regex = new Regex(@"Invert", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Invert, regex); Tokens.Add(TokenType.Invert); regex = new Regex(@"Incr", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Incr, regex); Tokens.Add(TokenType.Incr); regex = new Regex(@"Decr", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Decr, regex); Tokens.Add(TokenType.Decr); regex = new Regex(@"Red", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Red, regex); Tokens.Add(TokenType.Red); regex = new Regex(@"Green", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Green, regex); Tokens.Add(TokenType.Green); regex = new Regex(@"Blue", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Blue, regex); Tokens.Add(TokenType.Blue); regex = new Regex(@"Alpha", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Alpha, regex); Tokens.Add(TokenType.Alpha); regex = new Regex(@"All", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.All, regex); Tokens.Add(TokenType.All); regex = new Regex(@"Cw", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Cw, regex); Tokens.Add(TokenType.Cw); regex = new Regex(@"Ccw", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Ccw, regex); Tokens.Add(TokenType.Ccw); regex = new Regex(@"Solid", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Solid, regex); Tokens.Add(TokenType.Solid); regex = new Regex(@"WireFrame", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.WireFrame, regex); Tokens.Add(TokenType.WireFrame); regex = new Regex(@"Add", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Add, regex); Tokens.Add(TokenType.Add); regex = new Regex(@"Subtract", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Subtract, regex); Tokens.Add(TokenType.Subtract); regex = new Regex(@"RevSubtract", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.RevSubtract, regex); Tokens.Add(TokenType.RevSubtract); regex = new Regex(@"Min", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Min, regex); Tokens.Add(TokenType.Min); regex = new Regex(@"Max", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.Max, regex); Tokens.Add(TokenType.Max); regex = new Regex(@"One", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.One, regex); Tokens.Add(TokenType.One); regex = new Regex(@"SrcColor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SrcColor, regex); Tokens.Add(TokenType.SrcColor); regex = new Regex(@"InvSrcColor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.InvSrcColor, regex); Tokens.Add(TokenType.InvSrcColor); regex = new Regex(@"SrcAlpha", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SrcAlpha, regex); Tokens.Add(TokenType.SrcAlpha); regex = new Regex(@"InvSrcAlpha", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.InvSrcAlpha, regex); Tokens.Add(TokenType.InvSrcAlpha); regex = new Regex(@"DestAlpha", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.DestAlpha, regex); Tokens.Add(TokenType.DestAlpha); regex = new Regex(@"InvDestAlpha", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.InvDestAlpha, regex); Tokens.Add(TokenType.InvDestAlpha); regex = new Regex(@"DestColor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.DestColor, regex); Tokens.Add(TokenType.DestColor); regex = new Regex(@"InvDestColor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.InvDestColor, regex); Tokens.Add(TokenType.InvDestColor); regex = new Regex(@"SrcAlphaSat", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.SrcAlphaSat, regex); Tokens.Add(TokenType.SrcAlphaSat); regex = new Regex(@"BlendFactor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.BlendFactor, regex); Tokens.Add(TokenType.BlendFactor); regex = new Regex(@"InvBlendFactor", RegexOptions.Compiled | RegexOptions.IgnoreCase); Patterns.Add(TokenType.InvBlendFactor, regex); Tokens.Add(TokenType.InvBlendFactor); } public void Init(string input) { Init(input, ""); } public void Init(string input, string fileName) { this.Input = input; StartPos = 0; EndPos = 0; CurrentFile = fileName; CurrentLine = 1; CurrentColumn = 1; CurrentPosition = 0; LookAheadToken = null; } public Token GetToken(TokenType type) { Token t = new Token(this.StartPos, this.EndPos); t.Type = type; return t; } /// /// executes a lookahead of the next token /// and will advance the scan on the input string /// /// public Token Scan(params TokenType[] expectedtokens) { Token tok = LookAhead(expectedtokens); // temporarely retrieve the lookahead LookAheadToken = null; // reset lookahead token, so scanning will continue StartPos = tok.EndPos; EndPos = tok.EndPos; // set the tokenizer to the new scan position CurrentLine = tok.Line + (tok.Text.Length - tok.Text.Replace("\n", "").Length); CurrentFile = tok.File; return tok; } /// /// returns token with longest best match /// /// public Token LookAhead(params TokenType[] expectedtokens) { int i; int startpos = StartPos; int endpos = EndPos; int currentline = CurrentLine; string currentFile = CurrentFile; Token tok = null; List scantokens; // this prevents double scanning and matching // increased performance if (LookAheadToken != null && LookAheadToken.Type != TokenType._UNDETERMINED_ && LookAheadToken.Type != TokenType._NONE_) return LookAheadToken; // if no scantokens specified, then scan for all of them (= backward compatible) if (expectedtokens.Length == 0) scantokens = Tokens; else { scantokens = new List(expectedtokens); scantokens.AddRange(SkipList); } do { int len = -1; TokenType index = (TokenType)int.MaxValue; string input = Input.Substring(startpos); tok = new Token(startpos, endpos); for (i = 0; i < scantokens.Count; i++) { Regex r = Patterns[scantokens[i]]; Match m = r.Match(input); if (m.Success && m.Index == 0 && ((m.Length > len) || (scantokens[i] < index && m.Length == len ))) { len = m.Length; index = scantokens[i]; } } if (index >= 0 && len >= 0) { tok.EndPos = startpos + len; tok.Text = Input.Substring(tok.StartPos, len); tok.Type = index; } else if (tok.StartPos == tok.EndPos) { if (tok.StartPos < Input.Length) tok.Text = Input.Substring(tok.StartPos, 1); else tok.Text = "EOF"; } // Update the line and column count for error reporting. tok.File = currentFile; tok.Line = currentline; if (tok.StartPos < Input.Length) tok.Column = tok.StartPos - Input.LastIndexOf('\n', tok.StartPos); if (SkipList.Contains(tok.Type)) { startpos = tok.EndPos; endpos = tok.EndPos; currentline = tok.Line + (tok.Text.Length - tok.Text.Replace("\n", "").Length); currentFile = tok.File; Skipped.Add(tok); } else { // only assign to non-skipped tokens tok.Skipped = Skipped; // assign prior skips to this token Skipped = new List(); //reset skips } // Check to see if the parsed token wants to // alter the file and line number. if (tok.Type == FileAndLine) { var match = Patterns[tok.Type].Match(tok.Text); var fileMatch = match.Groups["File"]; if (fileMatch.Success) currentFile = fileMatch.Value.Replace("\\\\", "\\"); var lineMatch = match.Groups["Line"]; if (lineMatch.Success) currentline = int.Parse(lineMatch.Value, NumberStyles.Integer, CultureInfo.InvariantCulture); } } while (SkipList.Contains(tok.Type)); LookAheadToken = tok; return tok; } } #endregion #region Token public enum TokenType { //Non terminal tokens: _NONE_ = 0, _UNDETERMINED_= 1, //Non terminal tokens: Start = 2, Technique_Declaration= 3, FillMode_Solid= 4, FillMode_WireFrame= 5, FillModes= 6, CullMode_None= 7, CullMode_Cw= 8, CullMode_Ccw= 9, CullModes= 10, Colors_None= 11, Colors_Red= 12, Colors_Green= 13, Colors_Blue= 14, Colors_Alpha= 15, Colors_All= 16, Colors_Boolean= 17, Colors = 18, ColorsMasks= 19, Blend_Zero= 20, Blend_One= 21, Blend_SrcColor= 22, Blend_InvSrcColor= 23, Blend_SrcAlpha= 24, Blend_InvSrcAlpha= 25, Blend_DestAlpha= 26, Blend_InvDestAlpha= 27, Blend_DestColor= 28, Blend_InvDestColor= 29, Blend_SrcAlphaSat= 30, Blend_BlendFactor= 31, Blend_InvBlendFactor= 32, Blends = 33, BlendOp_Add= 34, BlendOp_Subtract= 35, BlendOp_RevSubtract= 36, BlendOp_Min= 37, BlendOp_Max= 38, BlendOps= 39, CmpFunc_Never= 40, CmpFunc_Less= 41, CmpFunc_Equal= 42, CmpFunc_LessEqual= 43, CmpFunc_Greater= 44, CmpFunc_NotEqual= 45, CmpFunc_GreaterEqual= 46, CmpFunc_Always= 47, CmpFunc = 48, StencilOp_Keep= 49, StencilOp_Zero= 50, StencilOp_Replace= 51, StencilOp_IncrSat= 52, StencilOp_DecrSat= 53, StencilOp_Invert= 54, StencilOp_Incr= 55, StencilOp_Decr= 56, StencilOp= 57, Render_State_CullMode= 58, Render_State_FillMode= 59, Render_State_AlphaBlendEnable= 60, Render_State_SrcBlend= 61, Render_State_DestBlend= 62, Render_State_BlendOp= 63, Render_State_ColorWriteEnable= 64, Render_State_DepthBias= 65, Render_State_SlopeScaleDepthBias= 66, Render_State_ZEnable= 67, Render_State_ZWriteEnable= 68, Render_State_ZFunc= 69, Render_State_MultiSampleAntiAlias= 70, Render_State_ScissorTestEnable= 71, Render_State_StencilEnable= 72, Render_State_StencilFail= 73, Render_State_StencilFunc= 74, Render_State_StencilMask= 75, Render_State_StencilPass= 76, Render_State_StencilRef= 77, Render_State_StencilWriteMask= 78, Render_State_StencilZFail= 79, Render_State_Expression= 80, Pass_Declaration= 81, VertexShader_Pass_Expression= 82, PixelShader_Pass_Expression= 83, ComputeShader_Pass_Expression= 84, AddressMode_Clamp= 85, AddressMode_Wrap= 86, AddressMode_Mirror= 87, AddressMode_Border= 88, AddressMode= 89, TextureFilter_None= 90, TextureFilter_Linear= 91, TextureFilter_Point= 92, TextureFilter_Anisotropic= 93, TextureFilter= 94, Sampler_State_Texture= 95, Sampler_State_MinFilter= 96, Sampler_State_MagFilter= 97, Sampler_State_MipFilter= 98, Sampler_State_Filter= 99, Sampler_State_AddressU= 100, Sampler_State_AddressV= 101, Sampler_State_AddressW= 102, Sampler_State_BorderColor= 103, Sampler_State_MaxMipLevel= 104, Sampler_State_MaxAnisotropy= 105, Sampler_State_MipLodBias= 106, Sampler_State_Expression= 107, Sampler_Register_Expression= 108, Sampler_Declaration_States= 109, Sampler_Declaration= 110, //Terminal tokens: BlockComment= 111, Comment = 112, Whitespace= 113, LinePragma= 114, Pass = 115, Technique= 116, Sampler = 117, SamplerState= 118, VertexShader= 119, PixelShader= 120, ComputeShader= 121, Register= 122, Boolean = 123, Number = 124, HexColor= 125, Identifier= 126, OpenBracket= 127, CloseBracket= 128, Equals = 129, Colon = 130, Comma = 131, Semicolon= 132, Or = 133, OpenParenthesis= 134, CloseParenthesis= 135, OpenSquareBracket= 136, CloseSquareBracket= 137, LessThan= 138, GreaterThan= 139, Compile = 140, ShaderModel= 141, Code = 142, EndOfFile= 143, MinFilter= 144, MagFilter= 145, MipFilter= 146, Filter = 147, Texture = 148, AddressU= 149, AddressV= 150, AddressW= 151, BorderColor= 152, MaxAnisotropy= 153, MaxMipLevel= 154, MipLodBias= 155, Clamp = 156, Wrap = 157, Mirror = 158, Border = 159, None = 160, Linear = 161, Point = 162, Anisotropic= 163, AlphaBlendEnable= 164, SrcBlend= 165, DestBlend= 166, BlendOp = 167, ColorWriteEnable= 168, ZEnable = 169, ZWriteEnable= 170, ZFunc = 171, DepthBias= 172, CullMode= 173, FillMode= 174, MultiSampleAntiAlias= 175, ScissorTestEnable= 176, SlopeScaleDepthBias= 177, StencilEnable= 178, StencilFail= 179, StencilFunc= 180, StencilMask= 181, StencilPass= 182, StencilRef= 183, StencilWriteMask= 184, StencilZFail= 185, Never = 186, Less = 187, Equal = 188, LessEqual= 189, Greater = 190, NotEqual= 191, GreaterEqual= 192, Always = 193, Keep = 194, Zero = 195, Replace = 196, IncrSat = 197, DecrSat = 198, Invert = 199, Incr = 200, Decr = 201, Red = 202, Green = 203, Blue = 204, Alpha = 205, All = 206, Cw = 207, Ccw = 208, Solid = 209, WireFrame= 210, Add = 211, Subtract= 212, RevSubtract= 213, Min = 214, Max = 215, One = 216, SrcColor= 217, InvSrcColor= 218, SrcAlpha= 219, InvSrcAlpha= 220, DestAlpha= 221, InvDestAlpha= 222, DestColor= 223, InvDestColor= 224, SrcAlphaSat= 225, BlendFactor= 226, InvBlendFactor= 227 } public class Token { private string file; private int line; private int column; private int startpos; private int endpos; private string text; private object value; // contains all prior skipped symbols private List skipped; public string File { get { return file; } set { file = value; } } public int Line { get { return line; } set { line = value; } } public int Column { get { return column; } set { column = value; } } public int StartPos { get { return startpos;} set { startpos = value; } } public int Length { get { return endpos - startpos;} } public int EndPos { get { return endpos;} set { endpos = value; } } public string Text { get { return text;} set { text = value; } } public List Skipped { get { return skipped;} set { skipped = value; } } public object Value { get { return value;} set { this.value = value; } } [XmlAttribute] public TokenType Type; public Token() : this(0, 0) { } public Token(int start, int end) { Type = TokenType._UNDETERMINED_; startpos = start; endpos = end; Text = ""; // must initialize with empty string, may cause null reference exceptions otherwise Value = null; } public void UpdateRange(Token token) { if (token.StartPos < startpos) startpos = token.StartPos; if (token.EndPos > endpos) endpos = token.EndPos; } public override string ToString() { if (Text != null) return Type.ToString() + " '" + Text + "'"; else return Type.ToString(); } } #endregion } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/ShaderInfo.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { public class ShaderInfo { public readonly List Techniques = new List(); public readonly Dictionary SamplerStates = new Dictionary(); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectCompiler/TPGParser/TechniqueInfo.cs ================================================ using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser { public class TechniqueInfo { public int startPos; public int length; public string name; public List Passes = new List(); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/EffectImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading effect (.fx) files for use in the Content Pipeline. /// [ContentImporter(".fx", DisplayName = "Effect Importer - KNI", DefaultProcessor = "EffectProcessor")] public class EffectImporter : ContentImporter { /// /// Initializes a new instance of EffectImporter. /// public EffectImporter() { } /// /// Called by the XNA Framework when importing an .fx file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override EffectContent Import(string filename, ContentImporterContext context) { EffectContent effect = new EffectContent(); effect.Identity = new ContentIdentity(filename); effect.Name = Path.GetFileNameWithoutExtension(filename); using (TextReader reader = new StreamReader(filename)) effect.EffectCode = reader.ReadToEnd(); return effect; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/ExternalTool.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Threading; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Helper to run an external tool installed in the system. Useful for when /// we don't want to package the tool ourselves (ffmpeg) or it's provided /// by a third party (console manufacturer). /// internal class ExternalTool { public static int Run(string command, string arguments) { string stdout, stderr; var result = Run(command, arguments, out stdout, out stderr); if (result < 0) throw new Exception(string.Format("{0} returned exit code {1}", command, result)); return result; } public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null) { // This particular case is likely to be the most common and thus // warrants its own specific error message rather than falling // back to a general exception from Process.Start() var fullPath = FindCommand(command); if (string.IsNullOrEmpty(fullPath)) throw new Exception(string.Format("Couldn't locate external tool '{0}'.", command)); // We can't reference ref or out parameters from within // lambdas (for the thread functions), so we have to store // the data in a temporary variable and then assign these // variables to the out parameters. var stdoutTemp = string.Empty; var stderrTemp = string.Empty; var processInfo = new ProcessStartInfo { Arguments = arguments, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, ErrorDialog = false, FileName = fullPath, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, }; EnsureExecutable(fullPath); using (var process = new Process()) { process.StartInfo = processInfo; process.Start(); // We have to run these in threads, because using ReadToEnd // on one stream can deadlock if the other stream's buffer is // full. var stdoutThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardOutput.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes); })); var stderrThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardError.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stderrTemp = System.Text.Encoding.ASCII.GetString(bytes); })); stdoutThread.Start(); stderrThread.Start(); if (stdin != null) { process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin)); } // Make sure interactive prompts don't block. process.StandardInput.Close(); process.WaitForExit(); stdoutThread.Join(); stderrThread.Join(); stdout = stdoutTemp; stderr = stderrTemp; return process.ExitCode; } } /// /// Returns the fully-qualified path for a command, searching the system path if necessary. /// /// /// It's apparently necessary to use the full path when running on some systems. /// private static string FindCommand(string command) { // Expand any environment variables. command = Environment.ExpandEnvironmentVariables(command); // If we have a full path just pass it through. if (File.Exists(command)) return command; // For Linux check specific subfolder var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "linux", command); if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom)) return lincom; // For Mac check specific subfolder var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "osx", command); if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom)) return maccom; // We don't have a full path, so try running through the system path to find it. var paths = AppDomain.CurrentDomain.BaseDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH"); var justTheName = Path.GetFileName(command); foreach (var path in paths.Split(Path.PathSeparator)) { var fullName = Path.Combine(path, justTheName); if (File.Exists(fullName)) return fullName; if (CurrentPlatform.OS == OS.Windows) { var fullExeName = string.Concat(fullName, ".exe"); if (File.Exists(fullExeName)) return fullExeName; } } return null; } /// /// Ensures the specified executable has the executable bit set. If the /// executable doesn't have the executable bit set on Linux or Mac OS, then /// Mono will refuse to execute it. /// /// The full path to the executable. private static void EnsureExecutable(string path) { if (!path.StartsWith("/home") && !path.StartsWith("/Users")) return; try { var p = Process.Start("chmod", "u+x \"" + path + "\""); p.WaitForExit(); } catch { // This platform may not have chmod in the path, in which case we can't // do anything reasonable here. } } /// /// Safely deletes the file if it exists. /// /// The path to the file to delete. public static void DeleteFile(string filePath) { try { File.Delete(filePath); } catch (Exception) { } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/FbxImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading AutoDesk (.fbx) files for use in the Content Pipeline. /// [ContentImporter(".fbx", DisplayName = "Fbx Importer - KNI", DefaultProcessor = "ModelProcessor")] public class FbxImporter : ContentImporter { public override NodeContent Import(string filename, ContentImporterContext context) { if (filename == null) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); var importer = new OpenAssetImporter("FbxImporter"); return importer.Import(filename, context); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/FontDescriptionImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading .spritefont files for use in the Content Pipeline. /// [ContentImporter(".spritefont", DisplayName = "Sprite Font Importer - KNI", DefaultProcessor = "FontDescriptionProcessor")] public class FontDescriptionImporter : ContentImporter { /// /// Initializes a new instance of FontDescriptionImporter. /// public FontDescriptionImporter() { } /// /// Called by the XNA Framework when importing a .spritefont file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override FontDescription Import(string filename, ContentImporterContext context) { XmlImporter xmlImporter = new XmlImporter(); FontDescription fontDescription = (FontDescription)xmlImporter.Import(filename, context); fontDescription.Identity = new ContentIdentity(new FileInfo(filename).FullName, "FontDescriptionImporter"); return fontDescription; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AlphaTestMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class AlphaTestMaterialContent : MaterialContent { public const string AlphaKey = "Alpha"; public const string AlphaFunctionKey = "AlphaFunction"; public const string DiffuseColorKey = "DiffuseColor"; public const string ReferenceAlphaKey = "ReferenceAlpha"; public const string TextureKey = "Texture"; public const string VertexColorEnabledKey = "VertexColorEnabled"; public float? Alpha { get { return GetValueTypeProperty(AlphaKey); } set { SetProperty(AlphaKey, value); } } public CompareFunction? AlphaFunction { get { return GetValueTypeProperty(AlphaFunctionKey); } set { SetProperty(AlphaFunctionKey, value); } } public Vector3? DiffuseColor { get { return GetValueTypeProperty(DiffuseColorKey); } set { SetProperty(DiffuseColorKey, value); } } public int? ReferenceAlpha { get { return GetValueTypeProperty(ReferenceAlphaKey); } set { SetProperty(ReferenceAlphaKey, value); } } public ExternalReference Texture { get { return GetTexture(TextureKey); } set { SetTexture(TextureKey, value); } } public bool? VertexColorEnabled { get { return GetValueTypeProperty(VertexColorEnabledKey); } set { SetProperty(VertexColorEnabledKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationChannel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for maintaining an animation channel. An animation channel is a collection of keyframes describing the movement of a single bone or rigid object. /// public sealed class AnimationChannel : ICollection, IEnumerable, IEnumerable { List _keyframes; /// /// Gets the number of keyframes in the collection. /// public int Count { get { return _keyframes.Count; } } /// /// Gets the keyframe at the specified index position. /// public AnimationKeyframe this[int index] { get { return _keyframes[index]; } } /// /// Returns a value indicating whether the object is read-only. /// bool ICollection.IsReadOnly { get { return false; } } /// /// Initializes a new instance of AnimationChannel. /// public AnimationChannel() { _keyframes = new List(); } /// /// To satisfy ICollection /// /// void ICollection.Add(AnimationKeyframe item) { _keyframes.Add(item); } /// /// Adds a new keyframe to the collection, automatically sorting the contents according to keyframe times. /// /// Keyframe to be added to the channel. /// Index of the new keyframe. public int Add(AnimationKeyframe item) { if (item == null) throw new ArgumentNullException("item"); // Find the correct place at which to insert it, so we can know the index to return. // The alternative is Add, Sort then return IndexOf, which would be horribly inefficient // and the order returned by Sort would change each time for keyframes with the same time. // BinarySearch returns the index of the first item found with the same time, or the bitwise // complement of the next largest item found. int index = _keyframes.BinarySearch(item); if (index >= 0) { // If a match is found, we do not know if it is at the start, middle or end of a range of // keyframes with the same time value. So look for the end of the range and insert there // so we have deterministic behaviour. while (index < _keyframes.Count) { if (item.CompareTo(_keyframes[index]) != 0) break; index++; } } else { // If BinarySearch returns a negative value, it is the bitwise complement of the next largest // item in the list. So we just do a bitwise complement and insert at that index. index = ~index; } _keyframes.Insert(index, item); return index; } /// /// Removes all keyframes from the collection. /// public void Clear() { _keyframes.Clear(); } /// /// Searches the collection for the specified keyframe. /// /// Keyframe being searched for. /// true if the keyframe exists; false otherwise. public bool Contains(AnimationKeyframe item) { return _keyframes.Contains(item); } /// /// To satisfy ICollection /// /// /// void ICollection.CopyTo(AnimationKeyframe[] array, int arrayIndex) { _keyframes.CopyTo(array, arrayIndex); } /// /// Determines the index for the specified keyframe. /// /// Identity of a keyframe. /// Index of the specified keyframe. public int IndexOf(AnimationKeyframe item) { return _keyframes.IndexOf(item); } /// /// Removes the specified keyframe from the collection. /// /// Keyframe being removed. /// true if the keyframe was removed; false otherwise. public bool Remove(AnimationKeyframe item) { return _keyframes.Remove(item); } /// /// Removes the keyframe at the specified index position. /// /// Index of the keyframe being removed. public void RemoveAt(int index) { _keyframes.RemoveAt(index); } /// /// Returns an enumerator that iterates through the keyframes. /// /// Enumerator for the keyframe collection. public IEnumerator GetEnumerator() { return _keyframes.GetEnumerator(); } /// /// To satisfy ICollection /// /// IEnumerator IEnumerable.GetEnumerator() { return _keyframes.GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationChannelDictionary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Collection of animation data channels, one per bone or rigid object. /// public sealed class AnimationChannelDictionary : NamedValueDictionary { /// /// Initializes a new instance of AnimationChannelDictionary. /// public AnimationChannelDictionary() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties for maintaining an animation. /// public class AnimationContent : ContentItem { TimeSpan _duration; AnimationChannelDictionary _channels; /// /// Gets the collection of animation data channels. Each channel describes the movement of a single bone or rigid object. /// public AnimationChannelDictionary Channels { get { return _channels; } } /// /// Gets or sets the total length of the animation. /// public TimeSpan Duration { get { return _duration; } set { _duration = value; } } /// /// Initializes a new instance of AnimationContent. /// public AnimationContent() { _channels = new AnimationChannelDictionary(); } public override string ToString() { return String.Format("{{Duration:{0}, _channels: {1}}}", _duration, _channels.Count); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationContentDictionary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Collection of named animations. /// public sealed class AnimationContentDictionary : NamedValueDictionary { /// /// Initializes a new instance of AnimationContentDictionary. /// public AnimationContentDictionary() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AnimationKeyframe.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for managing a keyframe. A keyframe describes the position of an animation channel at a single point in time. /// public sealed class AnimationKeyframe : IComparable { TimeSpan _time; Matrix _transform; /// /// Gets the time offset from the start of the animation to the position described by this keyframe. /// public TimeSpan Time { get { return _time; } } /// /// Gets or sets the position described by this keyframe. /// public Matrix Transform { get { return _transform; } set { _transform = value; } } /// /// Initializes a new instance of AnimationKeyframe with the specified time offsetand transform. /// /// Time offset of the keyframe. /// Position of the keyframe. public AnimationKeyframe(TimeSpan time, Matrix transform) { this._time = time; this._transform = transform; } /// /// Compares this instance of a keyframe to another. /// /// Keyframe being compared to. /// Indication of their relative values. public int CompareTo(AnimationKeyframe other) { // No sense in comparing the transform, so compare the time. // This would be used for sorting keyframes in time order. return _time.CompareTo(other._time); } public override string ToString() { return String.Format("{{Time:{0}, Transform: {1}}}", _time, _transform); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; using ATI.TextureConverter; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public abstract class AtcBitmapContent : BitmapContent { internal byte[] _bitmapData; public AtcBitmapContent() : base() { } public AtcBitmapContent(int width, int height) : base(width, height) { } public override byte[] GetPixelData() { return _bitmapData; } public override void SetPixelData(byte[] sourceData) { _bitmapData = sourceData; } protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { SetPixelData(sourceBitmap.GetPixelData()); return true; } // Destination region copy is not yet supported if (destinationRegion != new Rectangle(0, 0, Width, Height)) return false; // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(sourceBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } // Convert to full colour 32-bit format. Floating point would be preferred for processing, but it appears the ATICompressor does not support this var colorBitmap = new PixelBitmapContent(sourceRegion.Width, sourceRegion.Height); BitmapContent.Copy(sourceBitmap, sourceRegion, colorBitmap, new Rectangle(0, 0, colorBitmap.Width, colorBitmap.Height)); sourceBitmap = colorBitmap; ATICompressor.CompressionFormat targetFormat; switch (format) { case SurfaceFormat.RgbaAtcExplicitAlpha: targetFormat = ATICompressor.CompressionFormat.AtcRgbaExplicitAlpha; break; case SurfaceFormat.RgbaAtcInterpolatedAlpha: targetFormat = ATICompressor.CompressionFormat.AtcRgbaInterpolatedAlpha; break; default: return false; } var sourceData = sourceBitmap.GetPixelData(); var compressedData = ATICompressor.Compress(sourceData, Width, Height, targetFormat); SetPixelData(compressedData); return true; } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { destinationBitmap.SetPixelData(GetPixelData()); return true; } // No other support for copying from a ATC texture yet return false; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcExplicitBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class AtcExplicitBitmapContent : AtcBitmapContent { /// /// Creates an instance of AtcExplicitBitmapContent. /// public AtcExplicitBitmapContent() { } /// /// Creates an instance of AtcExplicitBitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public AtcExplicitBitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbaAtcExplicitAlpha; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "ATITC Explicit Alpha " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/AtcInterpolatedBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class AtcInterpolatedBitmapContent : AtcBitmapContent { /// /// Creates an instance of AtcInterpolatedBitmapContent. /// public AtcInterpolatedBitmapContent() { } /// /// Creates an instance of AtcInterpolatedBitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public AtcInterpolatedBitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbaAtcInterpolatedAlpha; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "ATITC Interpolated Alpha " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BasicMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class BasicMaterialContent : MaterialContent { public const string AlphaKey = "Alpha"; public const string DiffuseColorKey = "DiffuseColor"; public const string EmissiveColorKey = "EmissiveColor"; public const string SpecularColorKey = "SpecularColor"; public const string SpecularPowerKey = "SpecularPower"; public const string TextureKey = "Texture"; public const string VertexColorEnabledKey = "VertexColorEnabled"; public float? Alpha { get { return GetValueTypeProperty(AlphaKey); } set { SetProperty(AlphaKey, value); } } public Vector3? DiffuseColor { get { return GetValueTypeProperty(DiffuseColorKey); } set { SetProperty(DiffuseColorKey, value); } } public Vector3? EmissiveColor { get { return GetValueTypeProperty(EmissiveColorKey); } set { SetProperty(EmissiveColorKey, value); } } public Vector3? SpecularColor { get { return GetValueTypeProperty(SpecularColorKey); } set { SetProperty(SpecularColorKey, value); } } public float? SpecularPower { get { return GetValueTypeProperty(SpecularPowerKey); } set { SetProperty(SpecularPowerKey, value); } } public ExternalReference Texture { get { return GetTexture(TextureKey); } set { SetTexture(TextureKey, value); } } public bool? VertexColorEnabled { get { return GetValueTypeProperty(VertexColorEnabledKey); } set { SetProperty(VertexColorEnabledKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties and methods for creating and maintaining a bitmap resource. /// public abstract class BitmapContent : ContentItem { int _height; int _width; /// /// Gets or sets the height of the bitmap, in pixels. /// public int Height { get { return _height; } protected set { if (value <= 0) throw new ArgumentOutOfRangeException("height"); _height = value; } } /// /// Gets or sets the width of the bitmap, in pixels. /// public int Width { get { return _width; } protected set { if (value <= 0) throw new ArgumentOutOfRangeException("width"); _width = value; } } /// /// Initializes a new instance of BitmapContent. /// protected BitmapContent() { } /// /// Initializes a new instance of BitmapContent with the specified width or height. /// /// Width, in pixels, of the bitmap resource. /// Height, in pixels, of the bitmap resource. protected BitmapContent(int width, int height) { // Write to properties so validation is run. Width = width; Height = height; } /// /// Copies one bitmap into another. /// The destination bitmap can be in any format and size. If the destination is larger or smaller, the source bitmap is scaled accordingly. /// /// BitmapContent being copied. /// BitmapContent being overwritten. public static void Copy(BitmapContent sourceBitmap, BitmapContent destinationBitmap) { if (sourceBitmap == null) throw new ArgumentNullException("sourceBitmap"); if (destinationBitmap == null) throw new ArgumentNullException("destinationBitmap"); var sourceRegion = new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height); var destinationRegion = new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height); Copy(sourceBitmap, sourceRegion, destinationBitmap, destinationRegion); } /// /// Copies one bitmap into another. /// The destination bitmap can be in any format and size. If the destination is larger or smaller, the source bitmap is scaled accordingly. /// /// BitmapContent being copied. /// Region of sourceBitmap. /// BitmapContent being overwritten. /// Region of bitmap to be overwritten. public static void Copy(BitmapContent sourceBitmap, Rectangle sourceRegion, BitmapContent destinationBitmap, Rectangle destinationRegion) { if (sourceBitmap == null) throw new ArgumentNullException("sourceBitmap"); if (destinationBitmap == null) throw new ArgumentNullException("destinationBitmap"); // Make sure regions are within the bounds of the bitmaps if (sourceRegion.Left < 0 || sourceRegion.Top < 0 || sourceRegion.Width <= 0 || sourceRegion.Height <= 0 || sourceRegion.Right > sourceBitmap.Width || sourceRegion.Bottom > sourceBitmap.Height) throw new ArgumentOutOfRangeException("sourceRegion"); if (destinationRegion.Left < 0 || destinationRegion.Top < 0 || destinationRegion.Width <= 0 || destinationRegion.Height <= 0 || destinationRegion.Right > destinationBitmap.Width || destinationRegion.Bottom > destinationBitmap.Height) throw new ArgumentOutOfRangeException("destinationRegion"); SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) throw new InvalidOperationException("Could not retrieve surface format of source bitmap"); SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) throw new InvalidOperationException("Could not retrieve surface format of destination bitmap"); // If the formats are the same and the regions are the full bounds of the bitmaps and they are the same size, do a simpler copy if (sourceFormat == destinationFormat && sourceRegion == destinationRegion && sourceRegion == new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height) && destinationRegion == new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height)) { destinationBitmap.SetPixelData(sourceBitmap.GetPixelData()); return; } // if the destination format is and the regions are the full bounds of the bitmaps and they are the same size, // copy to the destinationBitmap directly using TryCopyTo(). if (destinationFormat == SurfaceFormat.Vector4 && sourceRegion == destinationRegion && sourceRegion == new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height) && destinationRegion == new Rectangle(0, 0, destinationBitmap.Width, destinationBitmap.Height)) { if (sourceBitmap.TryCopyTo(destinationBitmap, sourceRegion, destinationRegion)) return; } // The basic process is // 1. Copy from source bitmap region to a new PixelBitmapContent using sourceBitmap.TryCopyTo() // 2. If source and destination regions are a different size, resize Vector4 version // 3. Copy from Vector4 to destination region using destinationBitmap.TryCopyFrom() // Copy from the source to the intermediate Vector4 format var intermediate = new PixelBitmapContent(sourceRegion.Width, sourceRegion.Height); var intermediateRegion = new Rectangle(0, 0, sourceRegion.Width, sourceRegion.Height); if (sourceBitmap.TryCopyTo(intermediate, sourceRegion, intermediateRegion)) { // Resize the intermediate if required if (intermediate.Width != destinationRegion.Width || intermediate.Height != destinationRegion.Height) intermediate = intermediate.Resize(destinationRegion.Width, destinationRegion.Height) as PixelBitmapContent; // Copy from the intermediate to the destination if (destinationBitmap.TryCopyFrom(intermediate, new Rectangle(0, 0, intermediate.Width, intermediate.Height), destinationRegion)) return; } // If we got here, one of the above steps didn't work throw new InvalidOperationException("Could not copy between " + sourceFormat + " and " + destinationFormat); } /// /// Reads encoded bitmap content. /// /// Array containing encoded bitmap data. public abstract byte[] GetPixelData(); /// /// Writes encoded bitmap content. /// /// Array containing encoded bitmap data to be set. public abstract void SetPixelData(byte[] sourceData); /// /// Returns a string description of the bitmap resource. /// /// Description of the bitmap. public override string ToString() { return string.Format("{0}, {1}x{2}", GetType().Name, Width, Height); } /// /// Attempts to copy a region from a specified bitmap. /// /// BitmapContent being copied. /// Location of sourceBitmap. /// Region of destination bitmap to be overwritten. /// true if region copy is supported; false otherwise. protected abstract bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion); /// /// Attempts to copy a region of the specified bitmap onto another. /// /// BitmapContent being overwritten. /// Location of the source bitmap. /// Region of destination bitmap to be overwritten. /// true if region copy is supported; false otherwise. protected abstract bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion); /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public abstract bool TryGetFormat(out SurfaceFormat format); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Represents an animation skeleton. /// [System.Diagnostics.DebuggerDisplay("Bone '{Name}'")] public class BoneContent : NodeContent { /// /// Initializes a new instance of BoneContent. /// public BoneContent() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneWeight.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties for managing a bone weight. /// public struct BoneWeight { string _boneName; float _weight; /// /// Gets the name of the bone. /// public string BoneName { get { return _boneName; } } /// /// Gets the amount of bone influence, ranging from zero to one. The complete set of weights in a BoneWeightCollection should sum to one. /// public float Weight { get { return _weight; } internal set { _weight = value; } } /// /// Initializes a new instance of BoneWeight with the specified name and weight. /// /// Name of the bone. /// Amount of influence, ranging from zero to one. public BoneWeight(string boneName, float weight) { this._boneName = boneName; this._weight = weight; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/BoneWeightCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Collection of bone weights of a vertex. /// public sealed class BoneWeightCollection : Collection { /// /// Initializes a new instance of BoneWeightCollection. /// public BoneWeightCollection() { } /// /// Normalizes the contents of the weights list. /// public void NormalizeWeights() { // Normalization does the following: // // - Sorts weights such that the most significant weight is first. // - Removes zero-value entries. // - Adjusts values so the sum equals one. // // Throws InvalidContentException if all weights are zero. NormalizeWeights(int.MaxValue); } /// /// Normalizes the contents of the bone weights list. /// /// Maximum number of weights allowed. public void NormalizeWeights(int maxWeights) { // Normalization does the following: // // - Sorts weights such that the most significant weight is first. // - Removes zero-value entries. // - Discards weights with the smallest value until there are maxWeights or less in the list. // - Adjusts values so the sum equals one. // // Throws InvalidContentException if all weights are zero. List weights = (List)Items; // Sort into descending order weights.Sort((b1, b2) => b2.Weight.CompareTo(b1.Weight)); // Find the sum to validate we have weights and to normalize the weights float sum = 0.0f; int index = 0; // Cannot use a foreach or for because the index may not always increment and the length of the list may change. while (index < weights.Count) { float weight = weights[index].Weight; if ((weight > 0.0f) && (index < maxWeights)) { sum += weight; ++index; } else { // Discard any zero weights or if we have exceeded the maximum number of weights weights.RemoveAt(index); } } if (sum == 0.0f) throw new InvalidContentException("Total bone weights in a collection must not be zero"); // Normalize each weight int count = weights.Count; // Old-school trick. Multiplication is faster than division, so multiply by the inverse. float invSum = 1.0f / sum; for (index = 0; index < count; ++index) { BoneWeight bw = weights[index]; bw.Weight *= invSum; weights[index] = bw; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/DualTextureMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class DualTextureMaterialContent : MaterialContent { public const string AlphaKey = "Alpha"; public const string DiffuseColorKey = "DiffuseColor"; public const string TextureKey = "Texture"; public const string Texture2Key = "Texture2"; public const string VertexColorEnabledKey = "VertexColorEnabled"; public float? Alpha { get { return GetValueTypeProperty(AlphaKey); } set { SetProperty(AlphaKey, value); } } public Vector3? DiffuseColor { get { return GetValueTypeProperty(DiffuseColorKey); } set { SetProperty(DiffuseColorKey, value); } } public ExternalReference Texture { get { return GetTexture(TextureKey); } set { SetTexture(TextureKey, value); } } public ExternalReference Texture2 { get { return GetTexture(Texture2Key); } set { SetTexture(Texture2Key, value); } } public bool? VertexColorEnabled { get { return GetValueTypeProperty(VertexColorEnabledKey); } set { SetProperty(VertexColorEnabledKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt1BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class Dxt1BitmapContent : DxtBitmapContent { public Dxt1BitmapContent(int width, int height) : base(8, width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.Dxt1; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "DXT1 " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt3BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class Dxt3BitmapContent : DxtBitmapContent { public Dxt3BitmapContent(int width, int height) : base(16, width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.Dxt3; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "DXT3 " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Dxt5BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class Dxt5BitmapContent : DxtBitmapContent { public Dxt5BitmapContent(int width, int height) : base(16, width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.Dxt5; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "DXT5 " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/DxtBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Graphics; using NVTT = Nvidia.TextureTools; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public abstract class DxtBitmapContent : BitmapContent { private byte[] _bitmapData; private int _blockSize; private SurfaceFormat _format; private int _nvttWriteOffset; protected DxtBitmapContent(int blockSize) { if (!((blockSize == 8) || (blockSize == 16))) throw new ArgumentException("Invalid block size"); _blockSize = blockSize; TryGetFormat(out _format); } protected DxtBitmapContent(int blockSize, int width, int height) : this(blockSize) { Width = width; Height = height; } public override byte[] GetPixelData() { return _bitmapData; } public override void SetPixelData(byte[] sourceData) { _bitmapData = sourceData; } private void NvttBeginImageCallback(int size, int width, int height, int depth, int face, int miplevel) { _bitmapData = new byte[size]; _nvttWriteOffset = 0; } private bool NvttWriteImageCallback(IntPtr data, int length) { Marshal.Copy(data, _bitmapData, _nvttWriteOffset, length); _nvttWriteOffset += length; return true; } private void NvttEndImageCallback() { } private unsafe static void PrepareNVTT(byte[] data) { fixed (byte* pdata = data) { int count = data.Length / 4; for (int x = 0; x < count; x++) { // NVTT wants BGRA where our source is RGBA so // we swap the red and blue channels. byte r = pdata[x*4+0]; byte b = pdata[x*4+2]; pdata[x*4+0] = b; pdata[x*4+2] = r; } } } private unsafe static bool PrepareNVTT_DXT1(byte[] data) { bool hasTransparency = false; fixed (byte* pdata = data) { int count = data.Length/4; for (int x = 0; x < count; x++) { // NVTT wants BGRA where our source is RGBA so // we swap the red and blue channels. byte r = pdata[x*4+0]; byte b = pdata[x*4+2]; pdata[x*4+0] = b; pdata[x*4+2] = r; // Look for non-opaque pixels. hasTransparency = (hasTransparency || pdata[x*4+3] < 255); } } return hasTransparency; } protected unsafe override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { SetPixelData(sourceBitmap.GetPixelData()); return true; } // TODO: Add a XNA unit test to see what it does // my guess is that this is invalid for DXT. // // Destination region copy is not yet supported if (destinationRegion != new Rectangle(0, 0, Width, Height)) return false; // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(sourceBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } // NVTT wants 8bit data in BGRA format. PixelBitmapContent colorBitmap = new PixelBitmapContent(sourceBitmap.Width, sourceBitmap.Height); BitmapContent.Copy(sourceBitmap, colorBitmap); byte[] sourceData = colorBitmap.GetPixelData(); NVTT.AlphaMode alphaMode; NVTT.Format outputFormat; bool alphaDither = false; switch (format) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: { bool hasTransparency = PrepareNVTT_DXT1(sourceData); outputFormat = hasTransparency ? NVTT.Format.DXT1a : NVTT.Format.DXT1; alphaMode = hasTransparency ? NVTT.AlphaMode.Transparency : NVTT.AlphaMode.None; alphaDither = true; break; } case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: { PrepareNVTT(sourceData); outputFormat = NVTT.Format.DXT3; alphaMode = NVTT.AlphaMode.Transparency; break; } case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: { PrepareNVTT(sourceData); outputFormat = NVTT.Format.DXT5; alphaMode = NVTT.AlphaMode.Transparency; break; } default: throw new InvalidOperationException("Invalid DXT surface format!"); } using (NVTT.Compressor dxtCompressor = new NVTT.Compressor()) { fixed (byte* pData = &sourceData[0]) { dxtCompressor.InputOptions.SetTextureLayout(NVTT.TextureType.Texture2D, colorBitmap.Width, colorBitmap.Height, 1); dxtCompressor.InputOptions.SetMipmapData((IntPtr)pData, colorBitmap.Width, colorBitmap.Height, 1, 0, 0); dxtCompressor.InputOptions.SetMipmapGeneration(false); dxtCompressor.InputOptions.SetGamma(1.0f, 1.0f); dxtCompressor.InputOptions.SetAlphaMode(alphaMode); dxtCompressor.CompressionOptions.SetFormat(outputFormat); dxtCompressor.CompressionOptions.SetQuality(NVTT.Quality.Normal); // TODO: This isn't working which keeps us from getting the // same alpha dither behavior on DXT1 as XNA. // See: https://github.com/MonoGame/MonoGame/issues/6259 //if (alphaDither) // compressionOptions.SetQuantization(false, false, true); NVTT.OutputOptions.BeginImageDelegate beginImageDelegate = new NVTT.OutputOptions.BeginImageDelegate(NvttBeginImageCallback); NVTT.OutputOptions.WriteDataDelegate outputDelegate = new NVTT.OutputOptions.WriteDataDelegate(NvttWriteImageCallback); NVTT.OutputOptions.EndImageDelegate endImageDelegate = new NVTT.OutputOptions.EndImageDelegate(NvttEndImageCallback); GCHandle beginImageHandle = GCHandle.Alloc(beginImageDelegate); GCHandle writeHandle = GCHandle.Alloc(outputDelegate); GCHandle endImageHandle = GCHandle.Alloc(endImageDelegate); try { dxtCompressor.OutputOptions.SetOutputHeader(false); dxtCompressor.OutputOptions.SetOutputOptionsOutputHandler(beginImageDelegate, outputDelegate, endImageDelegate); dxtCompressor.Compress(); } finally { beginImageHandle.Free(); writeHandle.Free(); endImageHandle.Free(); } } } return true; } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format Rectangle fullRegion = new Rectangle(0, 0, Width, Height); if ((format == destinationFormat) && (sourceRegion == fullRegion) && (sourceRegion == destinationRegion)) { destinationBitmap.SetPixelData(GetPixelData()); return true; } // No other support for copying from a DXT texture yet return false; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EffectContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Contains the source code for a DirectX Effect, loaded from a .fx file. /// public class EffectContent : ContentItem { /// /// Initializes a new instance of EffectContent. /// public EffectContent() { } /// /// Gets or sets the effect program source code. /// public string EffectCode { get; set; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EffectMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class EffectMaterialContent : MaterialContent { public const string EffectKey = "Effect"; public const string CompiledEffectKey = "CompiledEffect"; public ExternalReference Effect { get { return GetReferenceTypeProperty>(EffectKey); } set { SetProperty(EffectKey, value); } } public ExternalReference CompiledEffect { get { return GetReferenceTypeProperty>(CompiledEffectKey); } set { SetProperty(CompiledEffectKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/EnvironmentMapMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class EnvironmentMapMaterialContent : MaterialContent { public const string AlphaKey = "Alpha"; public const string DiffuseColorKey = "DiffuseColor"; public const string EmissiveColorKey = "EmissiveColor"; public const string EnvironmentMapKey = "EnvironmentMap"; public const string EnvironmentMapAmountKey = "EnvironmentMapAmount"; public const string EnvironmentMapSpecularKey = " EnvironmentMapSpecular"; public const string FresnelFactorKey = "FresnelFactor"; public const string TextureKey = "Texture"; public float? Alpha { get { return GetValueTypeProperty(AlphaKey); } set { SetProperty(AlphaKey, value); } } public Vector3? DiffuseColor { get { return GetValueTypeProperty(DiffuseColorKey); } set { SetProperty(DiffuseColorKey, value); } } public Vector3? EmissiveColor { get { return GetValueTypeProperty(EmissiveColorKey); } set { SetProperty(EmissiveColorKey, value); } } public ExternalReference EnvironmentMap { get { return GetTexture(EnvironmentMapKey); } set { SetTexture(EnvironmentMapKey, value); } } public float? EnvironmentMapAmount { get { return GetValueTypeProperty(EnvironmentMapAmountKey); } set { SetProperty(EnvironmentMapAmountKey, value); } } public Vector3? EnvironmentMapSpecular { get { return GetValueTypeProperty(EnvironmentMapSpecularKey); } set { SetProperty(EnvironmentMapSpecularKey, value); } } public float? FresnelFactor { get { return GetValueTypeProperty(FresnelFactorKey); } set { SetProperty(FresnelFactorKey, value); } } public ExternalReference Texture { get { return GetTexture(TextureKey); } set { SetTexture(TextureKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Etc1BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; using PVRTexLibNET; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Supports the processing of a texture compressed using ETC1. /// public class Etc1BitmapContent : BitmapContent { byte[] _bitmapData; /// /// Initializes a new instance of Etc1BitmapContent. /// protected Etc1BitmapContent() : base() { } /// /// Initializes a new instance of Etc1BitmapContent with the specified width or height. /// /// Width in pixels of the bitmap resource. /// Height in pixels of the bitmap resource. public Etc1BitmapContent(int width, int height) : base(width, height) { } public override byte[] GetPixelData() { return _bitmapData; } public override void SetPixelData(byte[] sourceData) { int bytesRequired = ((Width + 3) >> 2) * ((Height + 3) >> 2) * SurfaceFormat.RgbEtc1.GetSize(); if (bytesRequired != sourceData.Length) throw new ArgumentException("ETC1 bitmap with width " + Width + " and height " + Height + " needs " + bytesRequired + " bytes. Received " + sourceData.Length + " bytes"); if (_bitmapData == null || _bitmapData.Length != bytesRequired) _bitmapData = new byte[bytesRequired]; Buffer.BlockCopy(sourceData, 0, _bitmapData, 0, bytesRequired); } protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) return false; // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (SurfaceFormat.RgbEtc1 == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { SetPixelData(sourceBitmap.GetPixelData()); return true; } // Destination region copy is not yet supported if (destinationRegion != new Rectangle(0, 0, Width, Height)) return false; // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(sourceBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } // Create the texture object in the PVR library var sourceData = sourceBitmap.GetPixelData(); var rgba32F = (PixelFormat)0x2020202061626772; // static const PixelType PVRStandard32PixelType = PixelType('r', 'g', 'b', 'a', 32, 32, 32, 32); using (var pvrTexture = PVRTexture.CreateTexture(sourceData, (uint)sourceBitmap.Width, (uint)sourceBitmap.Height, 1, rgba32F, true, VariableType.Float, ColourSpace.lRGB)) { // Resize the bitmap if needed if ((sourceBitmap.Width != Width) || (sourceBitmap.Height != Height)) pvrTexture.Resize((uint)Width, (uint)Height, 1, ResizeMode.Cubic); pvrTexture.Transcode(PixelFormat.ETC1, VariableType.UnsignedByte, ColourSpace.lRGB /*, CompressorQuality.ETCMediumPerceptual, true*/); var texDataSize = pvrTexture.GetTextureDataSize(0); var texData = new byte[texDataSize]; pvrTexture.GetTextureData(texData, texDataSize); SetPixelData(texData); } return true; } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) return false; // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (SurfaceFormat.RgbEtc1 == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { destinationBitmap.SetPixelData(GetPixelData()); return true; } // No other support for copying from a ETC1 texture yet return false; } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbEtc1; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "ETC1 " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/CharacterRegion.cs ================================================ using System; using System.ComponentModel; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { // Describes a range of consecutive characters that should be included in the font. [TypeConverter(typeof(CharacterRegionTypeConverter))] public struct CharacterRegion { public char Start; public char End; // Enumerates all characters within the region. public IEnumerable Characters() { for (char ch = Start; ch <= End; ch++) { yield return ch; } } // Constructor. public CharacterRegion(char start, char end) { if (start > end) throw new ArgumentException(); Start = start; End = end; } // Default to just the base ASCII character set. public static CharacterRegion Default = new CharacterRegion(' ', '~'); /// /// Test if there is an element in this enumeration. /// /// Type of the element /// The enumerable source. /// true if there is an element in this enumeration, false otherwise public static bool Any(IEnumerable source) { return source.GetEnumerator().MoveNext(); } /// /// Select elements from an enumeration. /// /// The type of the T source. /// The type of the T result. /// The source. /// The selector. /// A enumeration of selected values public static IEnumerable SelectMany(IEnumerable source, Func> selector) { foreach (TSource sourceItem in source) { foreach (TResult result in selector(sourceItem)) yield return result; } } /// /// Selects distinct elements from an enumeration. /// /// The type of the T source. /// The source. /// The comparer. /// A enumeration of selected values public static IEnumerable Distinct(IEnumerable source, IEqualityComparer comparer = null) { if (comparer == null) comparer = EqualityComparer.Default; // using Dictionary is not really efficient but easy to implement Dictionary values = new Dictionary(comparer); foreach (TSource sourceItem in source) { if (!values.ContainsKey(sourceItem)) { values.Add(sourceItem, null); yield return sourceItem; } } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/CharacterRegionTypeConverter.cs ================================================ using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class CharacterRegionTypeConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return sourceType == typeof(string); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { // Input must be a string. string source = value as string; if (string.IsNullOrEmpty(source)) { throw new ArgumentException(); } // Supported input formats: // A // A-Z // 32-127 // 0x20-0x7F string[] splitStr = source.Split('-'); char[] split = new char[splitStr.Length]; for (int i = 0; i < splitStr.Length; i++) { split[i] = ConvertCharacter(splitStr[i]); } switch (split.Length) { case 1: // Only a single character (eg. "a"). return new CharacterRegion(split[0], split[0]); case 2: // Range of characters (eg. "a-z"). return new CharacterRegion(split[0], split[1]); default: throw new ArgumentException(); } } static char ConvertCharacter(string value) { if (value.Length == 1) { // Single character directly specifies a codepoint. return value[0]; } else { // Otherwise it must be an integer (eg. "32" or "0x20"). return (char)(int)intConverter.ConvertFromInvariantString(value); } } static TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(int)); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/FontFamilyInfo.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System.Collections.Generic; using OpenFontStyleFlags = Typography.OpenFont.Extensions.TranslatedOS2FontStyle; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { internal class FontFamilyInfo { public readonly string FamilyName; public readonly List Faces = new List(); public FontFamilyInfo(string familyName) { FamilyName = familyName; } public override string ToString() { return string.Format("{{FamilyName: {0}, FacesCount: {1} }}", FamilyName, Faces.Count); } } internal class FontFaceInfo { public readonly string FontFile; public readonly int FaceIndex; public readonly FontDescriptionStyle Style; // optional properties public readonly string StyleName; public readonly ushort WinAscend; public readonly ushort WinDescent; private readonly SharpFont.FaceFlags FaceFlags; public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style) { this.FontFile = fontPath; this.FaceIndex = faceIndex; this.Style = style; } public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style, string styleName, ushort winAscend, ushort winDescent) { this.FontFile = fontPath; this.FaceIndex = faceIndex; this.Style = style; this.StyleName = styleName; this.WinAscend = winAscend; this.WinDescent = winDescent; } public FontFaceInfo(string fontPath, int faceIndex, FontDescriptionStyle style, string styleName, SharpFont.FaceFlags faceFlags) { this.FontFile = fontPath; this.FaceIndex = faceIndex; this.Style = style; this.StyleName = styleName; this.FaceFlags = faceFlags; } internal static FontDescriptionStyle ToFontStyle(SharpFont.StyleFlags styleFlags) { FontDescriptionStyle style = default(FontDescriptionStyle); if ((styleFlags & SharpFont.StyleFlags.Bold) == SharpFont.StyleFlags.Bold) style |= FontDescriptionStyle.Bold; if ((styleFlags & SharpFont.StyleFlags.Italic) == SharpFont.StyleFlags.Italic) style |= FontDescriptionStyle.Italic; return style; } internal static FontDescriptionStyle ToFontStyle(OpenFontStyleFlags styleFlags) { FontDescriptionStyle style = default(FontDescriptionStyle); if ((styleFlags & OpenFontStyleFlags.BOLD) == OpenFontStyleFlags.BOLD) style |= FontDescriptionStyle.Bold; if ((styleFlags & OpenFontStyleFlags.ITALIC) == OpenFontStyleFlags.ITALIC) style |= FontDescriptionStyle.Italic; // not supported styles if ((styleFlags & OpenFontStyleFlags.OBLIQUE) == OpenFontStyleFlags.OBLIQUE) style = (FontDescriptionStyle)(-1); return style; } public override string ToString() { return string.Format("{{FontFile: {0}, FaceIndex: {1}, Style: {2}, StyleName: {3}, FaceFlags: [{4}] }}", FontFile, FaceIndex, Style, StyleName, FaceFlags); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/Glyph.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { internal struct GlyphKerning { public float LeftBearing; public float AdvanceWidth; public float RightBearing; public Vector3 ToVector3() { return new Vector3(LeftBearing, AdvanceWidth, RightBearing); } public override string ToString() { return String.Format("{{LeftBearing: {0}, AdvanceWidth: {1}, RightBearing: {2} }}", LeftBearing, AdvanceWidth, RightBearing); } } // Represents a single character within a font. internal class FontGlyph { // Constructor. public FontGlyph(PixelBitmapContent bitmap) { Bitmap = bitmap; Subrect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); Width = bitmap.Width; Height = bitmap.Height; } // Glyph image data (may only use a portion of a larger bitmap). public PixelBitmapContent Bitmap; public Rectangle Subrect; public int FontBitmapLeft; public int FontBitmapTop; // Layout information. public int XOffset; public int YOffset; public int Width; public int Height; public float XAdvance; public GlyphKerning Kerning; public float GlyphMetricTopBearing; #if DEBUG public float GlyphMetricLeftBearing; public float GlyphMetricWidth; public float GlyphMetricXAdvance; #endif // Crops unused space from around the edge of a glyph bitmap. public void Crop() { // Crop the top. while (Subrect.Height > 1 && IsEmptyRow(this.Bitmap, Subrect.X, Subrect.Y, Subrect.Width)) { YOffset++; Subrect.Y++; Subrect.Height--; } // Crop the bottom. while (Subrect.Height > 1 && IsEmptyRow(this.Bitmap, Subrect.X, Subrect.Bottom - 1, Subrect.Width)) { Subrect.Height--; } // Crop the left. while (Subrect.Width > 1 && IsEmptyColumn(this.Bitmap, Subrect.X, Subrect.Y, Subrect.Height)) { XOffset++; Subrect.X++; Subrect.Width--; } // Crop the right. while (Subrect.Width > 1 && IsEmptyColumn(this.Bitmap, Subrect.Right - 1, Subrect.Y, Subrect.Height)) { Subrect.Width--; XAdvance++; } } const float TransparentAlpha = 0f; public static bool IsEmptyRow(PixelBitmapContent bmp, int rX, int rY, int rW) { for (int x = 0; x < rW; x++) { float alpha = bmp.GetPixel(rX + x, rY + 0).W; if (alpha != TransparentAlpha) return false; } return true; } public static bool IsEmptyColumn(PixelBitmapContent bmp, int rX, int rY, int rH) { for (int y = 0; y < rH; y++) { float alpha = bmp.GetPixel(rX + 0, rY + y).W; if (alpha != TransparentAlpha) return false; } return true; } } internal class FontContent : ContentItem { public readonly Dictionary Glyphs = new Dictionary(); public float MetricsHeight; public float MetricsAscender; public float MetricsDescender; public float WinAscend; public float WinDescend; public float FaceBBoxLeft; public float FaceBBoxTop; public float FaceBBoxRight; public float FaceBBoxBottom; #if DEBUG public float FaceAscender; public float FaceDescender; public float FaceUnderlinePosition; public float FaceUnderlineThickness; #endif } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/GlyphPacker.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2023 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { // Helper for arranging many small bitmaps onto a single larger surface. internal static class GlyphPacker { public static BitmapContent ArrangeGlyphs(ICollection glyphs, bool requirePOT, bool requireSquare) { // Build up a list of all the glyphs needing to be arranged. List arrangedGlyphs = new List(); foreach (FontGlyph glyph in glyphs) { ArrangedFontGlyph arrangedGlyph = new ArrangedFontGlyph(glyph); arrangedGlyph.Bounds.Size = glyph.Subrect.Size; // Leave a one pixel border around every glyph in the output bitmap. arrangedGlyph.Bounds.Width += 2; arrangedGlyph.Bounds.Height += 2; arrangedGlyphs.Add(arrangedGlyph); } // Sort so the largest glyphs get arranged first. arrangedGlyphs.Sort(); // Work out how big the output bitmap should be. int guessedWidth = GuessOutputWidth(glyphs); MaxRectsBin rectPacker = new MaxRectsBin(guessedWidth, 1024 * 2, GrowRule.Height); for (int i = 0; i < arrangedGlyphs.Count; i++) { ArrangedFontGlyph arrangedGlyph = arrangedGlyphs[i]; Rectangle bounds = rectPacker.Insert(arrangedGlyph.Bounds.Width, arrangedGlyph.Bounds.Height, MaxRectsHeuristic.Bl); arrangedGlyph.Bounds.Location = bounds.Location; } // Create the merged output bitmap. int outputWidth = MakeValidTextureSize(rectPacker.UsedWidth, requirePOT); int outputHeight = MakeValidTextureSize(rectPacker.UsedHeight, requirePOT); if (requireSquare) { outputHeight = Math.Max(outputWidth, outputHeight); outputWidth = outputHeight; } return CopyGlyphsToOutput(arrangedGlyphs, outputWidth, outputHeight); } // Once arranging is complete, copies each glyph to its chosen position in the single larger output bitmap. static BitmapContent CopyGlyphsToOutput(List arrangedGlyphs, int width, int height) { PixelBitmapContent output = new PixelBitmapContent(width, height); foreach (ArrangedFontGlyph glyph in arrangedGlyphs) { FontGlyph sourceGlyph = glyph.Glyph; Rectangle sourceRegion = sourceGlyph.Subrect; Rectangle destinationRegion = new Rectangle(glyph.Bounds.Location, sourceRegion.Size); destinationRegion.Offset(1,1); BitmapContent.Copy(sourceGlyph.Bitmap, sourceRegion, output, destinationRegion); sourceGlyph.Bitmap = output; sourceGlyph.Subrect = destinationRegion; } return output; } // Internal helper class keeps track of a glyph while it is being arranged. class ArrangedFontGlyph : IComparable { public readonly FontGlyph Glyph; public Rectangle Bounds; public ArrangedFontGlyph(FontGlyph glyph) { Glyph = glyph; } int IComparable.CompareTo(ArrangedFontGlyph other) { int aSize = this.Bounds.Height << 10 + this.Bounds.Width; int bSize = other.Bounds.Height << 10 + other.Bounds.Width; return bSize.CompareTo(aSize); } } // Heuristic guesses what might be a good output width for a list of glyphs. static int GuessOutputWidth(ICollection sourceGlyphs) { int maxWidth = 0; int totalSize = 0; foreach (FontGlyph glyph in sourceGlyphs) { maxWidth = Math.Max(maxWidth, glyph.Bitmap.Width+2); totalSize += (glyph.Bitmap.Width+2) * (glyph.Bitmap.Height+2); } int width = Math.Max((int)Math.Sqrt(totalSize), maxWidth); return MakeValidTextureSize(width, true); } // Rounds a value up to the next larger valid texture size. static int MakeValidTextureSize(int value, bool requirePowerOfTwo) { // In case we want to compress the texture, make sure the size is a multiple of 4. const int blockSize = 4; if (requirePowerOfTwo) { // Round up to a power of two. int powerOfTwo = blockSize; while (powerOfTwo < value) powerOfTwo <<= 1; return powerOfTwo; } else { // Round up to the specified block size. return (value + blockSize - 1) & ~(blockSize - 1); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/GrowRule.cs ================================================ /* This was adapted from a version I found online. Here's the original header: Based on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki https://github.com/juj/RectangleBinPack/ Ported to C# by Sven Magnus This version is also public domain - do whatever you want with it. */ namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// How to grow the bin when a rectangel can't be placed. /// internal enum GrowRule { /// /// Don't grow the bin, throw an exception when full. /// None, /// /// Grow the bins width. /// Width, /// /// Grow the bins height. /// Height, /// /// Alternate growing the bins width and height. Starts with width. /// Both } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/MaxRectsBin.cs ================================================ /* This was adapted from a version I found online. Here's the original header: Based on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki https://github.com/juj/RectangleBinPack/ Ported to C# by Sven Magnus This version is also public domain - do whatever you want with it. */ using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// A bin that can pack rectangles using the MaxRects algorithm with several heuristics. /// internal class MaxRectsBin { /// /// Width of the bin. /// public int BinWidth { get; private set; } /// /// Height of the bin. /// public int BinHeight { get; private set; } /// /// Indicates if rectangle can be rotated. /// public bool AllowRotations { get; private set; } /// /// Padding to add to both sides in the horizontal dimension. Default is 0. /// public int PaddingWidth { get; set; } /// /// Padding to add to both sides in the vertical dimension. Default is 0. /// public int PaddingHeight { get; set; } /// /// Determines if padding is included in returned rectangles. Default is false. /// public bool IncludePadding { get; set; } private readonly List _usedRectangles; private readonly List _freeRectangles; /// /// The actually used width of the bin. /// public int UsedWidth { get; private set; } /// /// The actually used height of the bin. /// public int UsedHeight { get; private set; } /// /// The number of times to grow the bin for a single rectangle when it doesn't fit. Defaults to 3. /// public int GrowLimit { get { return _growLimit; } set { if (value <= 0) throw new ArgumentOutOfRangeException(nameof(value), "Grow limit must be larger than 0."); _growLimit = value; } } /// /// Rule to choose in which dimension to grow. /// public GrowRule Grow { get; set; } /// /// Determines how the bin is grown. /// A positive value means a fixed size increase, a negative value means a factor increase. /// E.g. -2 will grow the bin by a factor of 2 when it needs to grow. /// public float GrowIncrement { get; set; } private bool _growWidth; private int _growLimit = 3; /// /// Create a instance. /// /// Initial available width. Defaults to 64. /// Initial available height. Defaults to 64. /// Whether to allow growing the available space when a rectangle doesn't fit. /// /// Determines how the bin is grown. /// A positive value means a fixed size increase, a negative value means a factor increase. /// E.g. -2 will grow the bin by a factor of 2 when it needs to grow. /// /// Whether to allow rotating the rectangles. public MaxRectsBin(int width = 64, int height = 64, GrowRule grow = GrowRule.Both, float growIncrement = -2, bool allowRotation = false) { BinWidth = width; BinHeight = height; Grow = grow; GrowIncrement = growIncrement; AllowRotations = allowRotation; _usedRectangles = new List(); _freeRectangles = new List(); Rectangle n = new Rectangle(0, 0, width, height); _freeRectangles.Add(n); } private void DoGrow() { switch (Grow) { case GrowRule.None: break; case GrowRule.Width: GrowWidth(); break; case GrowRule.Height: GrowHeight(); break; case GrowRule.Both: // alternate between growing width and height if (_growWidth) GrowWidth(); else GrowHeight(); _growWidth = !_growWidth; break; default: throw new ArgumentOutOfRangeException(); } } private void GrowWidth() { float grow = GrowIncrement < 0 ? BinWidth * -(GrowIncrement + 1) : BinWidth + GrowIncrement; Rectangle rect = new Rectangle(BinWidth, 0, (int)grow, BinHeight); BinWidth += (int)grow; _freeRectangles.Add(rect); } private void GrowHeight() { float grow = GrowIncrement < 0 ? BinHeight * -(GrowIncrement + 1) : BinHeight + GrowIncrement; Rectangle rect = new Rectangle(0, BinHeight, BinWidth, (int)grow); BinHeight += (int)grow; _freeRectangles.Add(rect); } /// /// Insert a rectangle into the bin. /// /// Width of the rectangle. /// Height of the rectangle. /// Heuristic to use. /// The bounds of the rectangle after placement. /// If the rectangle did not fit in the bin. public Rectangle Insert(int width, int height, MaxRectsHeuristic heuristic) { if (width == 0 || height == 0) return new Rectangle(0, 0, width, height); width += PaddingWidth; height += PaddingHeight; Rectangle newNode; FindPositionForNewNode(heuristic, width, height, out newNode); if (Grow == GrowRule.None && newNode.Height == 0) throw new Exception($"Failed to pack rectangle of size ({width}, {height}). BinWidth: {BinWidth}, BinHeight: {BinHeight}. Growing not allowed."); int growTries = 0; while (newNode.Height == 0) { DoGrow(); growTries++; FindPositionForNewNode(heuristic, width, height, out newNode); if (growTries >= GrowLimit) throw new Exception($"Failed to pack rectangle of size ({width}, {height}). BinWidth: {BinWidth}, BinHeight: {BinHeight}, Occupancy: {GetOccupancy()}"); } PlaceRect(ref newNode); if (newNode.Right > UsedWidth) UsedWidth = newNode.Right; if (newNode.Bottom > UsedHeight) UsedHeight = newNode.Bottom; if (!IncludePadding) { newNode = new Rectangle( newNode.X + PaddingWidth, newNode.Y + PaddingHeight, newNode.Width - PaddingWidth * 2, newNode.Height - PaddingHeight * 2); } return newNode; } void FindPositionForNewNode(MaxRectsHeuristic heuristic, int width, int height, out Rectangle rect) { int score1 = 0; // Unused in this function. We don't need to know the score after finding the position. int score2 = 0; switch (heuristic) { case MaxRectsHeuristic.Bssf: rect = FindPositionForNewNodeBestShortSideFit(width, height, ref score1, ref score2); break; case MaxRectsHeuristic.Bl: rect = FindPositionForNewNodeBottomLeft(width, height, ref score1, ref score2); break; case MaxRectsHeuristic.RectContactPointRule: rect = FindPositionForNewNodeContactPoint(width, height, ref score1); break; case MaxRectsHeuristic.Blsf: rect = FindPositionForNewNodeBestLongSideFit(width, height, ref score2, ref score1); break; case MaxRectsHeuristic.Baf: rect = FindPositionForNewNodeBestAreaFit(width, height, ref score1, ref score2); break; default: throw new ArgumentOutOfRangeException(nameof(heuristic), heuristic, null); } } /// /// Place an array of rectangles in the bin. /// /// Sizes of the rectangles. /// Heuristic to use. /// Bounds of all rectangles after placement. /// If is null. public Rectangle[] Insert(Point[] sizes, MaxRectsHeuristic heuristic = MaxRectsHeuristic.Bssf) { if (sizes == null) throw new ArgumentNullException(nameof(sizes)); Rectangle[] bounds = new Rectangle[sizes.Length]; Insert(sizes, bounds, 0, heuristic); return bounds; } /// /// Place an array of rectangles in the bin. /// /// Sizes of the rectangles. /// Array to fill with rectangle bounds. /// Index into to start filling. /// Heuristic to use. /// /// If or is null. /// /// If is less than 0. /// /// If is not large enough to hold all bounds. /// I.e. bounds.Length - indexOffset < sizes.Length /// public void Insert(Point[] sizes, Rectangle[] bounds, int indexOffset = 0, MaxRectsHeuristic heuristic = MaxRectsHeuristic.Bssf) { if (sizes == null) throw new ArgumentNullException(nameof(sizes)); if (bounds == null) throw new ArgumentNullException(nameof(bounds)); if (indexOffset < 0) throw new ArgumentOutOfRangeException(nameof(indexOffset), "Index offset must be larger than 0."); if (bounds.Length - indexOffset < sizes.Length) throw new ArgumentException("Packed array not large enough to hold bounds.", nameof(bounds)); List indices = new List(sizes.Length); for (int i = 0; i < sizes.Length; i++) indices.Add(i); while (indices.Count > 0) { Rectangle bestNode; int bestRectIndex = GetBestRect(sizes, heuristic, indices, out bestNode); if (Grow == GrowRule.None && bestRectIndex == -1) throw new Exception($"Failed to pack rectangles with {indices.Count} rectangles left. BinWidth: {BinWidth}, BinHeight: {BinHeight}. Growing not allowed."); int growTries = 0; while (bestRectIndex == -1) { DoGrow(); growTries++; bestRectIndex = GetBestRect(sizes, heuristic, indices, out bestNode); if (growTries >= GrowLimit) throw new Exception($"Failed to pack rectangles with {indices.Count} rectangles left. BinWidth: {BinWidth}, BinHeight: {BinHeight}, Occupancy: {GetOccupancy()}"); } PlaceRect(ref bestNode); int ogIndex = indices[bestRectIndex]; indices.RemoveAt(bestRectIndex); if (bestNode.Right > UsedWidth) UsedWidth = bestNode.Right; if (bestNode.Bottom > UsedHeight) UsedHeight = bestNode.Bottom; if (!IncludePadding) bestNode = new Rectangle( bestNode.X + PaddingWidth, bestNode.Y + PaddingHeight, bestNode.Width - PaddingWidth * 2, bestNode.Height - PaddingHeight * 2); bounds[indexOffset + ogIndex] = bestNode; } } private int GetBestRect(Point[] sizes, MaxRectsHeuristic heuristic, List indices, out Rectangle bestNode) { int bestScore1 = int.MaxValue; int bestScore2 = int.MaxValue; int bestRectIndex = -1; bestNode = new Rectangle(); for (int indirectIndex = 0; indirectIndex < indices.Count; indirectIndex++) { int i = indices[indirectIndex]; int score1 = 0; int score2 = 0; Rectangle newNode = ScoreRect(sizes[i].X + PaddingWidth * 2, sizes[i].Y + PaddingHeight * 2, heuristic, ref score1, ref score2); if (score1 < bestScore1 || (score1 == bestScore1 && score2 < bestScore2)) { bestScore1 = score1; bestScore2 = score2; bestNode = newNode; bestRectIndex = indirectIndex; } } return bestRectIndex; } private void PlaceRect(ref Rectangle node) { int numRectanglesToProcess = _freeRectangles.Count; for (int i = 0; i < numRectanglesToProcess; ++i) { if (SplitFreeNode(_freeRectangles[i], ref node)) { _freeRectangles.RemoveAt(i); --i; --numRectanglesToProcess; } } PruneFreeList(); _usedRectangles.Add(node); } private Rectangle ScoreRect(int width, int height, MaxRectsHeuristic method, ref int score1, ref int score2) { Rectangle newNode = new Rectangle(); score1 = int.MaxValue; score2 = int.MaxValue; switch (method) { case MaxRectsHeuristic.Bssf: newNode = FindPositionForNewNodeBestShortSideFit(width, height, ref score1, ref score2); break; case MaxRectsHeuristic.Bl: newNode = FindPositionForNewNodeBottomLeft(width, height, ref score1, ref score2); break; case MaxRectsHeuristic.RectContactPointRule: newNode = FindPositionForNewNodeContactPoint(width, height, ref score1); score1 = -score1; // Reverse since we are minimizing, but for contact point score bigger is better. break; case MaxRectsHeuristic.Blsf: newNode = FindPositionForNewNodeBestLongSideFit(width, height, ref score2, ref score1); break; case MaxRectsHeuristic.Baf: newNode = FindPositionForNewNodeBestAreaFit(width, height, ref score1, ref score2); break; default: throw new ArgumentOutOfRangeException(nameof(method), method, null); } // Cannot fit the current rectangle. if (newNode.Height == 0) { score1 = int.MaxValue; score2 = int.MaxValue; } return newNode; } /// /// Computes the ratio of used surface area. /// /// /// If true this uses and instead of /// and for available area. /// public float GetOccupancy(bool crop = false) { ulong usedSurfaceArea = 0; for (int i = 0; i < _usedRectangles.Count; ++i) usedSurfaceArea += (uint)_usedRectangles[i].Width * (uint)_usedRectangles[i].Height; int available = crop ? UsedWidth * UsedHeight : BinWidth * BinHeight; return (float)usedSurfaceArea / available; } private Rectangle FindPositionForNewNodeBottomLeft(int width, int height, ref int bestY, ref int bestX) { Rectangle bestNode = new Rectangle(); bestY = int.MaxValue; for (int i = 0; i < _freeRectangles.Count; ++i) { // Try to place the rectangle in upright (non-flipped) orientation. if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height) { int topSideY = _freeRectangles[i].Y + height; if (topSideY < bestY || (topSideY == bestY && _freeRectangles[i].X < bestX)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); bestY = topSideY; bestX = _freeRectangles[i].X; } } if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width) { int topSideY = _freeRectangles[i].Y + width; if (topSideY < bestY || (topSideY == bestY && _freeRectangles[i].X < bestX)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); bestY = topSideY; bestX = _freeRectangles[i].X; } } } return bestNode; } private Rectangle FindPositionForNewNodeBestShortSideFit(int width, int height, ref int bestShortSideFit, ref int bestLongSideFit) { Rectangle bestNode = new Rectangle(); bestShortSideFit = int.MaxValue; for (int i = 0; i < _freeRectangles.Count; ++i) { // Try to place the rectangle in upright (non-flipped) orientation. if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height) { int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width); int leftoverVert = Math.Abs(_freeRectangles[i].Height - height); int shortSideFit = Math.Min(leftoverHoriz, leftoverVert); int longSideFit = Math.Max(leftoverHoriz, leftoverVert); if (shortSideFit < bestShortSideFit || (shortSideFit == bestShortSideFit && longSideFit < bestLongSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); bestShortSideFit = shortSideFit; bestLongSideFit = longSideFit; } } if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width) { int flippedLeftoverHoriz = Math.Abs(_freeRectangles[i].Width - height); int flippedLeftoverVert = Math.Abs(_freeRectangles[i].Height - width); int flippedShortSideFit = Math.Min(flippedLeftoverHoriz, flippedLeftoverVert); int flippedLongSideFit = Math.Max(flippedLeftoverHoriz, flippedLeftoverVert); if (flippedShortSideFit < bestShortSideFit || (flippedShortSideFit == bestShortSideFit && flippedLongSideFit < bestLongSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); bestShortSideFit = flippedShortSideFit; bestLongSideFit = flippedLongSideFit; } } } return bestNode; } private Rectangle FindPositionForNewNodeBestLongSideFit(int width, int height, ref int bestShortSideFit, ref int bestLongSideFit) { Rectangle bestNode = new Rectangle(); bestLongSideFit = int.MaxValue; for (int i = 0; i < _freeRectangles.Count; ++i) { // Try to place the rectangle in upright (non-flipped) orientation. if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height) { int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width); int leftoverVert = Math.Abs(_freeRectangles[i].Height - height); int shortSideFit = Math.Min(leftoverHoriz, leftoverVert); int longSideFit = Math.Max(leftoverHoriz, leftoverVert); if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); bestShortSideFit = shortSideFit; bestLongSideFit = longSideFit; } } if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width) { int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - height); int leftoverVert = Math.Abs(_freeRectangles[i].Height - width); int shortSideFit = Math.Min(leftoverHoriz, leftoverVert); int longSideFit = Math.Max(leftoverHoriz, leftoverVert); if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); bestShortSideFit = shortSideFit; bestLongSideFit = longSideFit; } } } return bestNode; } private Rectangle FindPositionForNewNodeBestAreaFit(int width, int height, ref int bestAreaFit, ref int bestShortSideFit) { Rectangle bestNode = new Rectangle(); bestAreaFit = int.MaxValue; for (int i = 0; i < _freeRectangles.Count; ++i) { int areaFit = _freeRectangles[i].Width * _freeRectangles[i].Height - width * height; // Try to place the rectangle in upright (non-flipped) orientation. if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height) { int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - width); int leftoverVert = Math.Abs(_freeRectangles[i].Height - height); int shortSideFit = Math.Min(leftoverHoriz, leftoverVert); if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); bestShortSideFit = shortSideFit; bestAreaFit = areaFit; } } if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width) { int leftoverHoriz = Math.Abs(_freeRectangles[i].Width - height); int leftoverVert = Math.Abs(_freeRectangles[i].Height - width); int shortSideFit = Math.Min(leftoverHoriz, leftoverVert); if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); bestShortSideFit = shortSideFit; bestAreaFit = areaFit; } } } return bestNode; } /// Returns 0 if the two intervals i1 and i2 are disjoint, or the length of their overlap otherwise. private int CommonIntervalLength(int i1Start, int i1End, int i2Start, int i2End) { if (i1End < i2Start || i2End < i1Start) return 0; return Math.Min(i1End, i2End) - Math.Max(i1Start, i2Start); } private int ContactPointScoreNode(int x, int y, int width, int height) { int score = 0; if (x == 0 || x + width == BinWidth) score += height; if (y == 0 || y + height == BinHeight) score += width; for (int i = 0; i < _usedRectangles.Count; ++i) { if (_usedRectangles[i].X == x + width || _usedRectangles[i].X + _usedRectangles[i].Width == x) score += CommonIntervalLength(_usedRectangles[i].Y, _usedRectangles[i].Y + _usedRectangles[i].Height, y, y + height); if (_usedRectangles[i].Y == y + height || _usedRectangles[i].Y + _usedRectangles[i].Height == y) score += CommonIntervalLength(_usedRectangles[i].X, _usedRectangles[i].X + _usedRectangles[i].Width, x, x + width); } return score; } private Rectangle FindPositionForNewNodeContactPoint(int width, int height, ref int bestContactScore) { Rectangle bestNode = new Rectangle(); bestContactScore = -1; for (int i = 0; i < _freeRectangles.Count; ++i) { // Try to place the rectangle in upright (non-flipped) orientation. if (_freeRectangles[i].Width >= width && _freeRectangles[i].Height >= height) { int score = ContactPointScoreNode(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); if (score > bestContactScore) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, width, height); bestContactScore = score; } } if (AllowRotations && _freeRectangles[i].Width >= height && _freeRectangles[i].Height >= width) { int score = ContactPointScoreNode(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); if (score > bestContactScore) { bestNode = new Rectangle(_freeRectangles[i].X, _freeRectangles[i].Y, height, width); bestContactScore = score; } } } return bestNode; } private bool SplitFreeNode(Rectangle freeNode, ref Rectangle usedNode) { // Test with SAT if the rectangles even intersect. if (usedNode.Left >= freeNode.Right || usedNode.Right <= freeNode.Left || usedNode.Top >= freeNode.Bottom || usedNode.Bottom <= freeNode.Top) return false; if (usedNode.Left < freeNode.Right && usedNode.Right > freeNode.Left) { // New node at the top side of the used node. if (usedNode.Top > freeNode.Top && usedNode.Top < freeNode.Bottom) { Rectangle newNode = new Rectangle(freeNode.X, freeNode.Y, freeNode.Width, usedNode.Top - freeNode.Top); _freeRectangles.Add(newNode); } // New node at the bottom side of the used node. if (usedNode.Bottom < freeNode.Bottom) { Rectangle newNode = new Rectangle(freeNode.X, usedNode.Bottom, freeNode.Width, freeNode.Bottom - usedNode.Bottom); _freeRectangles.Add(newNode); } } if (usedNode.Top < freeNode.Bottom && usedNode.Bottom > freeNode.Top) { // New node at the left side of the used node. if (usedNode.Left > freeNode.Left && usedNode.Left < freeNode.Right) { Rectangle newNode = new Rectangle(freeNode.Left, freeNode.Top, usedNode.Left - freeNode.Left, freeNode.Height); _freeRectangles.Add(newNode); } // New node at the right side of the used node. if (usedNode.X + usedNode.Width < freeNode.X + freeNode.Width) { Rectangle newNode = new Rectangle(usedNode.Right, freeNode.Top, freeNode.Right - usedNode.Right, freeNode.Height); _freeRectangles.Add(newNode); } } return true; } private void PruneFreeList() { for (int i = 0; i < _freeRectangles.Count; ++i) for (int j = i + 1; j < _freeRectangles.Count; ++j) { if (IsContainedIn(_freeRectangles[i], _freeRectangles[j])) { _freeRectangles.RemoveAt(i); --i; break; } if (IsContainedIn(_freeRectangles[j], _freeRectangles[i])) { _freeRectangles.RemoveAt(j); --j; } } } private bool IsContainedIn(Rectangle a, Rectangle b) { return a.Left >= b.Left && a.Top >= b.Top && a.Right <= b.Right && a.Bottom <= b.Bottom; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Font/MaxRectsHeuristic.cs ================================================ /* This was adapted from a version I found online. Here's the original header: Based on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki https://github.com/juj/RectangleBinPack/ Ported to C# by Sven Magnus This version is also public domain - do whatever you want with it. */ namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Heuristic method to use to choose the rectangles positions. /// internal enum MaxRectsHeuristic { /// /// Best Short Side Fit: Positions the rectangle against the short side of a free rectangle into which it fits the best. /// Bssf, /// /// Best Long Side Fit: Positions the rectangle against the long side of a free rectangle into which it fits the best. /// Blsf, /// /// Best Area Fit: Positions the rectangle into the smallest free rect into which it fits. /// Baf, /// /// Bottom Left (Tetris method): Each rectangle is placed to a position (possibly rotating it) where its top side lies as low as possible. /// Bl, /// /// Contact Point: Choosest the placement where the rectangle touches other rects as much as possible. /// RectContactPointRule } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/FontDescription.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides information to the FontDescriptionProcessor describing which font to rasterize, which font size to utilize, and which Unicode characters to include in the processor output. /// public class FontDescription : ContentItem { private string _fontName; private float _size; private float _spacing; private FontDescriptionStyle _style; private bool _useKerning; private ICollection _characters = new HashSet(); private char? _defaultCharacter; /// /// Gets or sets the name of the font, such as "Times New Roman" or "Arial". This value cannot be null or empty. /// [ContentSerializer(AllowNull = false)] public string FontName { get { return _fontName; } set { if (string.IsNullOrEmpty(value)) throw new ArgumentNullException("FontName is null or an empty string."); _fontName = value; } } /// /// Gets or sets the size, in points, of the font. /// public float Size { get { return _size; } set { if (value <= 0.0f) throw new ArgumentOutOfRangeException("Size must be greater than zero."); _size = value; } } /// /// Gets or sets the amount of space, in pixels, to insert between letters in a string. /// [ContentSerializer(Optional = true)] public float Spacing { get { return _spacing; } set { _spacing = value; } } /// /// Indicates if kerning information is used when drawing characters. /// [ContentSerializer(Optional = true)] public bool UseKerning { get { return _useKerning; } set { _useKerning = value; } } /// /// Gets or sets the style of the font, expressed as a combination of one or more FontDescriptionStyle flags. /// public FontDescriptionStyle Style { get { return _style; } set { _style = value; } } /// /// Gets or sets the default character for the font. /// [ContentSerializer(Optional = true)] public Nullable DefaultCharacter { get { return _defaultCharacter; } set { _defaultCharacter = value; } } [ContentSerializer(CollectionItemName = "CharacterRegion")] internal CharacterRegion[] CharacterRegions { get { List regions = new List(); List chars = new List(Characters); chars.Sort(); char start = chars[0]; char end = chars[0]; for (int i=1; i < chars.Count; i++) { if (chars[i] != (end+1)) { regions.Add(new CharacterRegion(start, end)); start = chars[i]; } end = chars[i]; } regions.Add(new CharacterRegion(start, end)); return regions.ToArray(); } set { for (int index = 0; index < value.Length; ++index) { CharacterRegion characterRegion = value[index]; if (characterRegion.End < characterRegion.Start) throw new ArgumentException("CharacterRegion.End must be greater than CharacterRegion.Start"); for (char start = characterRegion.Start; start <= characterRegion.End; start++) Characters.Add(start); } } } [ContentSerializerIgnore] public ICollection Characters { get { return _characters; } internal set { _characters = new HashSet(value); } } internal FontDescription() { } /// /// Initializes a new instance of FontDescription and initializes its members to the specified font, size, and spacing, using FontDescriptionStyle.Regular as the default value for Style. /// /// The name of the font, such as Times New Roman. /// The size, in points, of the font. /// The amount of space, in pixels, to insert between letters in a string. public FontDescription(string fontName, float size, float spacing) : this(fontName, size, spacing, FontDescriptionStyle.Regular, false) { } /// /// Initializes a new instance of FontDescription and initializes its members to the specified font, size, spacing, and style. /// /// The name of the font, such as Times New Roman. /// The size, in points, of the font. /// The amount of space, in pixels, to insert between letters in a string. /// The font style for the font. public FontDescription(string fontName, float size, float spacing, FontDescriptionStyle fontStyle) : this(fontName, size, spacing, fontStyle, false) { } /// /// Initializes a new instance of FontDescription using the specified values. /// /// The name of the font, such as Times New Roman. /// The size, in points, of the font. /// The amount of space, in pixels, to insert between letters in a string. /// The font style for the font. /// true if kerning information is used when drawing characters; false otherwise. public FontDescription(string fontName, float size, float spacing, FontDescriptionStyle fontStyle, bool useKerning) { // Write to the properties so the validation is run this.FontName = fontName; this.Size = size; this.Spacing = spacing; this.Style = fontStyle; this.UseKerning = useKerning; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/FontDescriptionStyle.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Flags that describe style information to be applied to text. /// You can combine these flags by using a bitwise OR operator (|). /// [Flags] public enum FontDescriptionStyle { /// /// Normal text. /// Regular = 0x0000, /// /// Bold text. /// Bold = 0x0001, /// /// Italic text. /// Italic = 0x0002, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GeometryContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties that define various aspects of a geometry batch. /// public class GeometryContent : ContentItem { IndexCollection _indices; MaterialContent _material; MeshContent _parent; VertexContent _vertices; /// /// Gets the list of triangle indices for this geometry batch. Geometry is stored as an indexed triangle list, where each group of three indices defines a single triangle. /// public IndexCollection Indices { get { return _indices; } } /// /// Gets or sets the material of the parent mesh. /// public MaterialContent Material { get { return _material; } set { _material = value; } } /// /// Gets or sets the parent MeshContent for this object. /// public MeshContent Parent { get { return _parent; } set { _parent = value; } } /// /// Gets the set of vertex batches for the geometry batch. /// public VertexContent Vertices { get { return _vertices; } } /// /// Creates an instance of GeometryContent. /// public GeometryContent() { _indices = new IndexCollection(); _vertices = new VertexContent(this); } public override string ToString() { return String.Format("{{Name:{0}, Vertices: {1}, Indices: {2} }}", base.Name, this.Vertices.VertexCount, this.Indices.Count); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GeometryContentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods for maintaining a collection of geometry batches that make up a mesh. /// public sealed class GeometryContentCollection : ChildCollection { internal GeometryContentCollection(MeshContent parent) : base(parent) { } /// /// Gets the parent of a child object. /// /// The child of the parent being retrieved. /// The parent of the child object. protected override MeshContent GetParent(GeometryContent child) { return child.Parent; } /// /// Sets the parent of the specified child object. /// /// The child of the parent being set. /// The parent of the child object. protected override void SetParent(GeometryContent child, MeshContent parent) { child.Parent = parent; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/GraphicsUtil.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; using FreeImageAPI; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public static class GraphicsUtil { internal static BitmapContent Resize(this BitmapContent bitmap, int newWidth, int newHeight) { BitmapContent src = bitmap; SurfaceFormat format; src.TryGetFormat(out format); if (format != SurfaceFormat.Vector4) { var v4 = new PixelBitmapContent(src.Width, src.Height); BitmapContent.Copy(src, v4); src = v4; } // Convert to FreeImage bitmap var bytes = src.GetPixelData(); var fi = FreeImage.ConvertFromRawBits(bytes, FREE_IMAGE_TYPE.FIT_RGBAF, src.Width, src.Height, SurfaceFormat.Vector4.GetSize() * src.Width, 128, 0, 0, 0, true); // Resize var newfi = FreeImage.Rescale(fi, newWidth, newHeight, FREE_IMAGE_FILTER.FILTER_BICUBIC); FreeImage.Unload(fi); // Convert back to PixelBitmapContent src = new PixelBitmapContent(newWidth, newHeight); bytes = new byte[SurfaceFormat.Vector4.GetSize() * newWidth * newHeight]; FreeImage.ConvertToRawBits(bytes, newfi, SurfaceFormat.Vector4.GetSize() * newWidth, 128, 0, 0, 0, true); src.SetPixelData(bytes); FreeImage.Unload(newfi); // Convert back to source type if required if (format != SurfaceFormat.Vector4) { var s = (BitmapContent)Activator.CreateInstance(bitmap.GetType(), new object[] { newWidth, newHeight }); BitmapContent.Copy(src, s); src = s; } return src; } public static void BGRAtoRGBA(byte[] data) { for (var x = 0; x < data.Length; x += 4) { data[x] ^= data[x + 2]; data[x + 2] ^= data[x]; data[x] ^= data[x + 2]; } } public static bool IsPowerOfTwo(int x) { return (x & (x - 1)) == 0; } /// /// Returns the next power of two. Returns same value if already is PoT. /// public static int GetNextPowerOfTwo(int value) { if (IsPowerOfTwo(value)) return value; var nearestPower = 1; while (nearestPower < value) nearestPower = nearestPower << 1; return nearestPower; } enum AlphaRange { /// /// Pixel data has no alpha values below 1.0. /// Opaque, /// /// Pixel data contains alpha values that are either 0.0 or 1.0. /// Cutout, /// /// Pixel data contains alpha values that cover the full range of 0.0 to 1.0. /// Full, } /// /// Gets the alpha range in a set of pixels. /// /// A bitmap of full-colour floating point pixel data in RGBA or BGRA order. /// A member of the AlphaRange enum to describe the range of alpha in the pixel data. static unsafe AlphaRange CalculateAlphaRange(BitmapContent bitmap) { AlphaRange result = AlphaRange.Opaque; if (bitmap is PixelBitmapContent) { var pixelBitmap = (PixelBitmapContent)bitmap; for (int y = 0; y < pixelBitmap.Height; ++y) { Vector4[] row = pixelBitmap.GetRow(y); fixed (Vector4* prow = row) { for (int i = 0; i < row.Length; i++) { if (prow[i].W < 1.0) { if (prow[i].W == 0.0) result = AlphaRange.Cutout; else return AlphaRange.Full; } } } } return result; } else if (bitmap is PixelBitmapContent) { var pixelBitmap = (PixelBitmapContent)bitmap; for (int y = 0; y < pixelBitmap.Height; ++y) { Color[] row = pixelBitmap.GetRow(y); fixed (Color* prow = row) { for (int i = 0; i < row.Length; i++) { if (prow[i].A < 255) { if (prow[i].A == 0.0) result = AlphaRange.Cutout; else return AlphaRange.Full; } } } } return result; } else { throw new NotImplementedException(); } } public static void CompressPvrtc(TextureContent input, ContentProcessorContext context) { // Calculate number of mip levels var width = input.Faces[0][0].Height; var height = input.Faces[0][0].Width; if (!IsPowerOfTwo(width) || !IsPowerOfTwo(height) || (width != height)) { context.Logger.LogWarning(null, input.Identity, "PVR compression requires width and height to be powers of two and equal. Falling back to 16-bit color."); GraphicsUtil.CompressColor16Bit(input); return; } BitmapContent face = input.Faces[0][0]; AlphaRange alphaRange = CalculateAlphaRange(face); if (alphaRange == AlphaRange.Opaque) input.ConvertBitmapType(typeof(PvrtcRgb4BitmapContent)); else input.ConvertBitmapType(typeof(PvrtcRgba4BitmapContent)); } public static void CompressDxt(TextureContent input, ContentProcessorContext context) { BitmapContent face = input.Faces[0][0]; if (context.TargetProfile == GraphicsProfile.Reach) { if (!IsPowerOfTwo(face.Width) || !IsPowerOfTwo(face.Height)) throw new PipelineException("DXT compression requires width and height must be powers of two in Reach graphics profile."); } // Test the alpha channel to figure out if we have alpha. AlphaRange alphaRange = CalculateAlphaRange(face); // TODO: This isn't quite right. // // We should be generating DXT1 textures for cutout alpha // as DXT1 supports 1bit alpha and it uses less memory. // // XNA never generated DXT3 for textures... it always picked // between DXT1 for cutouts and DXT5 for fractional alpha. // // DXT3 however can produce better results for high frequency // alpha like a chain link fence where is DXT5 is better for // low frequency alpha like clouds. I don't know how we can // pick the right thing in this case without a hint. // switch (alphaRange) { case AlphaRange.Opaque: input.ConvertBitmapType(typeof(Dxt1BitmapContent)); break; case AlphaRange.Cutout: input.ConvertBitmapType(typeof(Dxt3BitmapContent)); break; case AlphaRange.Full: input.ConvertBitmapType(typeof(Dxt5BitmapContent)); break; default: throw new InvalidOperationException(); } } static public void CompressAti(TextureContent input) { BitmapContent face = input.Faces[0][0]; AlphaRange alphaRange = CalculateAlphaRange(face); if (alphaRange == AlphaRange.Full) input.ConvertBitmapType(typeof(AtcExplicitBitmapContent)); else input.ConvertBitmapType(typeof(AtcInterpolatedBitmapContent)); } static public void CompressEtc1(TextureContent input, ContentProcessorContext context) { BitmapContent face = input.Faces[0][0]; AlphaRange alphaRange = CalculateAlphaRange(face); // Use BGRA4444 for textures with non-opaque alpha values if (alphaRange != AlphaRange.Opaque) input.ConvertBitmapType(typeof(PixelBitmapContent)); else { // PVR SGX does not handle non-POT ETC1 textures. // https://code.google.com/p/libgdx/issues/detail?id=1310 // Since we already enforce POT for PVR and DXT in Reach, we will also enforce POT for ETC1 if (!IsPowerOfTwo(face.Width) || !IsPowerOfTwo(face.Height)) { context.Logger.LogWarning(null, input.Identity, "ETC1 compression requires width and height to be powers of two due to hardware restrictions on some devices. Falling back to BGR565."); input.ConvertBitmapType(typeof(PixelBitmapContent)); } else input.ConvertBitmapType(typeof(Etc1BitmapContent)); } } static public void CompressColor16Bit(TextureContent input) { BitmapContent face = input.Faces[0][0]; AlphaRange alphaRange = CalculateAlphaRange(face); if (alphaRange == AlphaRange.Opaque) input.ConvertBitmapType(typeof(PixelBitmapContent)); else if (alphaRange == AlphaRange.Cutout) input.ConvertBitmapType(typeof(PixelBitmapContent)); else input.ConvertBitmapType(typeof(PixelBitmapContent)); } // Compress the greyscale font texture page using a specially-formulated DXT3 mode internal static unsafe void CompressFontDXT3(TextureContent input, ContentProcessorContext context) { if (input.Faces.Count > 1) throw new PipelineException("Font textures should only have one face"); if (context.TargetProfile == GraphicsProfile.Reach) { if (!IsPowerOfTwo(input.Faces[0][0].Width) || !IsPowerOfTwo(input.Faces[0][0].Height)) throw new PipelineException("DXT compression requires width and height must be powers of two in Reach graphics profile."); } var block = new Vector4[16]; for (int i = 0; i < input.Faces[0].Count; ++i) { var face = input.Faces[0][i]; var xBlocks = (face.Width + 3) / 4; var yBlocks = (face.Height + 3) / 4; var dxt3Size = xBlocks * yBlocks * 16; var buffer = new byte[dxt3Size]; var bytes = face.GetPixelData(); fixed (byte* b = bytes) { Vector4* colors = (Vector4*)b; int w = 0; int h = 0; int x = 0; int y = 0; while (h < (face.Height & ~3)) { w = 0; x = 0; var h0 = h * face.Width; var h1 = h0 + face.Width; var h2 = h1 + face.Width; var h3 = h2 + face.Width; while (w < (face.Width & ~3)) { block[0] = colors[w + h0]; block[1] = colors[w + h0 + 1]; block[2] = colors[w + h0 + 2]; block[3] = colors[w + h0 + 3]; block[4] = colors[w + h1]; block[5] = colors[w + h1 + 1]; block[6] = colors[w + h1 + 2]; block[7] = colors[w + h1 + 3]; block[8] = colors[w + h2]; block[9] = colors[w + h2 + 1]; block[10] = colors[w + h2 + 2]; block[11] = colors[w + h2 + 3]; block[12] = colors[w + h3]; block[13] = colors[w + h3 + 1]; block[14] = colors[w + h3 + 2]; block[15] = colors[w + h3 + 3]; int offset = (x + y * xBlocks) * 16; CompressFontDXT3Block(block, buffer, offset); w += 4; ++x; } // Do partial block at end of row if (w < face.Width) { var cols = face.Width - w; Array.Clear(block, 0, 16); for (int r = 0; r < 4; ++r) { h0 = (h + r) * face.Width; for (int c = 0; c < cols; ++c) block[(r * 4) + c] = colors[w + h0 + c]; } int offset = (x + y * xBlocks) * 16; CompressFontDXT3Block(block, buffer, offset); } h += 4; ++y; } // Do last partial row if (h < face.Height) { var rows = face.Height - h; w = 0; x = 0; while (w < (face.Width & ~3)) { Array.Clear(block, 0, 16); for (int r = 0; r < rows; ++r) { var h0 = (h + r) * face.Width; block[(r * 4) + 0] = colors[w + h0 + 0]; block[(r * 4) + 1] = colors[w + h0 + 1]; block[(r * 4) + 2] = colors[w + h0 + 2]; block[(r * 4) + 3] = colors[w + h0 + 3]; } int offset = (x + y * xBlocks) * 16; CompressFontDXT3Block(block, buffer, offset); w += 4; ++x; } // Do last partial block if (w < face.Width) { var cols = face.Width - w; Array.Clear(block, 0, 16); for (int r = 0; r < rows; ++r) { var h0 = (h + r) * face.Width; for (int c = 0; c < cols; ++c) block[(r * 4) + c] = colors[w + h0 + c]; } int offset = (x + y * xBlocks) * 16; CompressFontDXT3Block(block, buffer, offset); } } } var dxt3 = new Dxt3BitmapContent(face.Width, face.Height); dxt3.SetPixelData(buffer); input.Faces[0][i] = dxt3; } } // Maps a 2-bit greyscale to the index required for DXT3 // 00 = color0 // 01 = color1 // 10 = 2/3 * color0 + 1/3 * color1 // 11 = 1/3 * color0 + 2/3 * color1 static byte[] dxt3Map = new byte[] { 0, 2, 3, 1 }; // Compress a single 4x4 block from colors into buffer at the given offset static void CompressFontDXT3Block(Vector4[] colors, byte[] buffer, int offset) { // Get the alpha into a 0-15 range int a0 = (int)(colors[0].W * 15.0); int a1 = (int)(colors[1].W * 15.0); int a2 = (int)(colors[2].W * 15.0); int a3 = (int)(colors[3].W * 15.0); int a4 = (int)(colors[4].W * 15.0); int a5 = (int)(colors[5].W * 15.0); int a6 = (int)(colors[6].W * 15.0); int a7 = (int)(colors[7].W * 15.0); int a8 = (int)(colors[8].W * 15.0); int a9 = (int)(colors[9].W * 15.0); int a10 = (int)(colors[10].W * 15.0); int a11 = (int)(colors[11].W * 15.0); int a12 = (int)(colors[12].W * 15.0); int a13 = (int)(colors[13].W * 15.0); int a14 = (int)(colors[14].W * 15.0); int a15 = (int)(colors[15].W * 15.0); // Duplicate the top two bits into the bottom two bits so we get one of four values: b0000, b0101, b1010, b1111 a0 = (a0 & 0xC) | (a0 >> 2); a1 = (a1 & 0xC) | (a1 >> 2); a2 = (a2 & 0xC) | (a2 >> 2); a3 = (a3 & 0xC) | (a3 >> 2); a4 = (a4 & 0xC) | (a4 >> 2); a5 = (a5 & 0xC) | (a5 >> 2); a6 = (a6 & 0xC) | (a6 >> 2); a7 = (a7 & 0xC) | (a7 >> 2); a8 = (a8 & 0xC) | (a8 >> 2); a9 = (a9 & 0xC) | (a9 >> 2); a10 = (a10 & 0xC) | (a10 >> 2); a11 = (a11 & 0xC) | (a11 >> 2); a12 = (a12 & 0xC) | (a12 >> 2); a13 = (a13 & 0xC) | (a13 >> 2); a14 = (a14 & 0xC) | (a14 >> 2); a15 = (a15 & 0xC) | (a15 >> 2); // 4-bit alpha buffer[offset + 0] = (byte)((a1 << 4) | a0); buffer[offset + 1] = (byte)((a3 << 4) | a2); buffer[offset + 2] = (byte)((a5 << 4) | a4); buffer[offset + 3] = (byte)((a7 << 4) | a6); buffer[offset + 4] = (byte)((a9 << 4) | a8); buffer[offset + 5] = (byte)((a11 << 4) | a10); buffer[offset + 6] = (byte)((a13 << 4) | a12); buffer[offset + 7] = (byte)((a15 << 4) | a14); // color0 (transparent) buffer[offset + 8] = 0; buffer[offset + 9] = 0; // color1 (white) buffer[offset + 10] = 255; buffer[offset + 11] = 255; // Get the red (to be used for green and blue channels as well) into a 0-15 range a0 = (int)(colors[0].X * 15.0); a1 = (int)(colors[1].X * 15.0); a2 = (int)(colors[2].X * 15.0); a3 = (int)(colors[3].X * 15.0); a4 = (int)(colors[4].X * 15.0); a5 = (int)(colors[5].X * 15.0); a6 = (int)(colors[6].X * 15.0); a7 = (int)(colors[7].X * 15.0); a8 = (int)(colors[8].X * 15.0); a9 = (int)(colors[9].X * 15.0); a10 = (int)(colors[10].X * 15.0); a11 = (int)(colors[11].X * 15.0); a12 = (int)(colors[12].X * 15.0); a13 = (int)(colors[13].X * 15.0); a14 = (int)(colors[14].X * 15.0); a15 = (int)(colors[15].X * 15.0); // Duplicate the top two bits into the bottom two bits so we get one of four values: b0000, b0101, b1010, b1111 a0 = (a0 & 0xC) | (a0 >> 2); a1 = (a1 & 0xC) | (a1 >> 2); a2 = (a2 & 0xC) | (a2 >> 2); a3 = (a3 & 0xC) | (a3 >> 2); a4 = (a4 & 0xC) | (a4 >> 2); a5 = (a5 & 0xC) | (a5 >> 2); a6 = (a6 & 0xC) | (a6 >> 2); a7 = (a7 & 0xC) | (a7 >> 2); a8 = (a8 & 0xC) | (a8 >> 2); a9 = (a9 & 0xC) | (a9 >> 2); a10 = (a10 & 0xC) | (a10 >> 2); a11 = (a11 & 0xC) | (a11 >> 2); a12 = (a12 & 0xC) | (a12 >> 2); a13 = (a13 & 0xC) | (a13 >> 2); a14 = (a14 & 0xC) | (a14 >> 2); a15 = (a15 & 0xC) | (a15 >> 2); // Color indices (00 = color0, 01 = color1, 10 = 2/3 * color0 + 1/3 * color1, 11 = 1/3 * color0 + 2/3 * color1) buffer[offset + 12] = (byte)((dxt3Map[a3 >> 2] << 6) | (dxt3Map[a2 >> 2] << 4) | (dxt3Map[a1 >> 2] << 2) | dxt3Map[a0 >> 2]); buffer[offset + 13] = (byte)((dxt3Map[a7 >> 2] << 6) | (dxt3Map[a6 >> 2] << 4) | (dxt3Map[a5 >> 2] << 2) | dxt3Map[a4 >> 2]); buffer[offset + 14] = (byte)((dxt3Map[a11 >> 2] << 6) | (dxt3Map[a10 >> 2] << 4) | (dxt3Map[a9 >> 2] << 2) | dxt3Map[a8 >> 2]); buffer[offset + 15] = (byte)((dxt3Map[a15 >> 2] << 6) | (dxt3Map[a14 >> 2] << 4) | (dxt3Map[a13 >> 2] << 2) | dxt3Map[a12 >> 2]); } internal static TextureProcessorOutputFormat GetTextureFormatForPlatform(TextureProcessorOutputFormat format, TargetPlatform platform) { // Select the default texture compression format for the target platform if (format == TextureProcessorOutputFormat.Compressed) { switch (platform) { case TargetPlatform.iOS: format = TextureProcessorOutputFormat.PvrCompressed; break; case TargetPlatform.Android: format = TextureProcessorOutputFormat.Etc1Compressed; break; default: format = TextureProcessorOutputFormat.DxtCompressed; break; } } // Is Compressed TextureFormat ? if (format == TextureProcessorOutputFormat.AtcCompressed || format == TextureProcessorOutputFormat.DxtCompressed || format == TextureProcessorOutputFormat.Etc1Compressed || format == TextureProcessorOutputFormat.PvrCompressed) { // Make sure the target platform supports the selected texture compression format switch (platform) { case TargetPlatform.iOS: if (format != TextureProcessorOutputFormat.PvrCompressed) throw new PlatformNotSupportedException("iOS platform only supports PVR texture compression"); break; case TargetPlatform.Windows: case TargetPlatform.WindowsStoreApp: case TargetPlatform.DesktopGL: case TargetPlatform.MacOSX: case TargetPlatform.NativeClient: case TargetPlatform.BlazorGL: if (format != TextureProcessorOutputFormat.DxtCompressed) throw new PlatformNotSupportedException(platform + " platform only supports DXT texture compression"); break; } } return format; } internal static bool RequiresPowerOfTwo(TextureProcessorOutputFormat format, bool generateMipmaps, TargetPlatform targetPlatform, GraphicsProfile targetProfile) { if (generateMipmaps) return (targetProfile == GraphicsProfile.Reach); switch (format) { case TextureProcessorOutputFormat.DxtCompressed: return (targetProfile == GraphicsProfile.Reach); case TextureProcessorOutputFormat.PvrCompressed: case TextureProcessorOutputFormat.Etc1Compressed: return true; default: return false; break; } } internal static bool RequiresSquare(TextureProcessorOutputFormat format, TargetPlatform targetPlatform) { switch (format) { case TextureProcessorOutputFormat.PvrCompressed: return true; default: return false; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/IndexCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.ObjectModel; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods for maintaining a list of index values. /// public sealed class IndexCollection : Collection { /// /// Initializes a new instance of IndexCollection. /// public IndexCollection() { } /// /// Add a range of indices to the collection. /// /// A collection of indices to add. public void AddRange(IEnumerable indices) { foreach (var t in indices) Add(t); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/IndirectPositionCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods for maintaining a list of vertex positions. /// /// /// This class is designed to collect the vertex positions for a VertexContent object. Use the contents /// of the PositionIndices property (of the contained VertexContent object) to index into the Positions /// property of the parent mesh. /// public sealed class IndirectPositionCollection : IList { private readonly VertexChannel _positionIndices; private readonly GeometryContent _geometry; /// /// Number of positions in the collection. /// /// Number of positions. public int Count { get { return _positionIndices.Count; } } /// /// Gets or sets the position at the specified index. /// /// Position located at index. public Vector3 this[int index] { get { int remap = _positionIndices[index]; return _geometry.Parent.Positions[remap]; } set { throw Readonly(); } } /// /// Gets a value indicating whether this object is read-only. /// /// true if this object is read-only; false otherwise. bool ICollection.IsReadOnly { get { return true; } } /// /// Initializes a new instance of IndirectPositionCollection. /// internal IndirectPositionCollection(GeometryContent geometry, VertexChannel positionIndices) { _geometry = geometry; _positionIndices = positionIndices; } /// /// Determines whether the specified position is in the collection. /// /// Position being searched for in the collection. /// true if the position was found; false otherwise. public bool Contains(Vector3 item) { return IndexOf(item) > -1; } /// /// Copies the specified positions to an array, starting at the specified index. /// /// Array of positions to be copied. /// Index of the first copied position. public void CopyTo(Vector3[] array, int arrayIndex) { foreach (Vector3 vec in this) array[arrayIndex++] = vec; } /// /// Gets an enumerator interface for reading the position values. /// /// Interface for enumerating the collection of position values. public IEnumerator GetEnumerator() { for (int i = 0; i < Count; i++) yield return this[i]; } /// /// Gets the index of the specified position in a collection. /// /// Position being searched for. /// Index of the specified position or -1 if not found. public int IndexOf(Vector3 item) { for (int i = 0; i < Count; i++) if (this[i] == item) return i; return -1; } internal Exception Readonly() { return new NotSupportedException("The collection is read only!"); } void ICollection.Add(Vector3 item) { throw Readonly(); } void ICollection.Clear() { throw Readonly(); } bool ICollection.Remove(Vector3 item) { throw Readonly(); } void IList.Insert(int index, Vector3 item) { throw Readonly(); } void IList.RemoveAt(int index) { throw Readonly(); } /// /// Returns an enumerator that can iterate through the collection. /// /// Enumerator that can iterate through the collection. IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/LocalizedFontDescription.cs ================================================ #region File Description //----------------------------------------------------------------------------- // LocalizedFontDescription.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System.Collections.Generic; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; #endregion namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Normally, when you add a .spritefont file to your project, this data is /// deserialized into a FontDescription object, which is then built into a /// SpriteFontContent by the FontDescriptionProcessor. But to localize the /// font, we want to add some additional data, so our custom processor can /// know what .resx files it needs to scan. We do this by defining our own /// custom font description class, deriving from the built in FontDescription /// type, and adding a new property to store the resource filenames. /// public class LocalizedFontDescription : FontDescription { /// /// Constructor. /// public LocalizedFontDescription() : base("Arial", 14, 0) { } /// /// Add a new property to our font description, which will allow us to /// include a ResourceFiles element in the .spritefont XML. We use the /// ContentSerializer attribute to mark this as optional, so existing /// .spritefont files that do not include this ResourceFiles element /// can be imported as well. /// [ContentSerializer(Optional = true, CollectionItemName = "Resx")] public List ResourceFiles { get { return resourceFiles; } } List resourceFiles = new List(); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for maintaining a collection of named texture references. /// /// In addition to texture references, opaque data values are stored in the OpaqueData property of the base class. public class MaterialContent : ContentItem { readonly TextureReferenceDictionary _textures; /// /// Gets the texture collection of the material. /// /// Collection of textures used by the material. public TextureReferenceDictionary Textures { get { return _textures; } } /// /// Initializes a new instance of MaterialContent. /// public MaterialContent() { _textures = new TextureReferenceDictionary(); } /// /// Gets a reference type from the OpaqueDataDictionary collection. /// /// Type of the related opaque data. /// Key of the property being retrieved. /// The related opaque data. protected T GetReferenceTypeProperty(string key) where T : class { object value; if (OpaqueData.TryGetValue(key, out value)) return (T)value; return default(T); } /// /// Gets a value from the Textures collection. /// /// Key of the texture being retrieved. /// Reference to a texture from the collection. protected ExternalReference GetTexture(string key) { ExternalReference texture; _textures.TryGetValue(key, out texture); return texture; } /// /// Gets a value type from the OpaqueDataDictionary collection. /// /// Type of the value being retrieved. /// Key of the value type being retrieved. /// Index of the value type beng retrieved. protected Nullable GetValueTypeProperty(string key) where T : struct { object value; if (OpaqueData.TryGetValue(key, out value)) return (T)value; return null; } /// /// Sets a value in the contained OpaqueDataDictionary object. /// If null is passed, the value is removed. /// /// Type of the element being set. /// Name of the key being modified. /// Value being set. protected void SetProperty(string key, T value) { if (value != null) OpaqueData[key] = value; else OpaqueData.Remove(key); } /// /// Sets a value in the contained TextureReferenceDictionary object. /// If null is passed, the value is removed. /// /// Name of the key being modified. /// Value being set. /// The key value differs depending on the type of attached dictionary. /// If attached to a BasicMaterialContent dictionary (which becomes a BasicEffect object at run time), the value for the Texture key is used as the texture for the BasicEffect runtime object. Other keys are ignored. /// If attached to a EffectMaterialContent dictionary, key names are the texture names used by the effect. These names are dependent upon the author of the effect object. protected void SetTexture(string key, ExternalReference value) { if (value != null) _textures[key] = value; else _textures.Remove(key); } /// /// Helper method to make a copy of a material. /// /// A clone of the material. public MaterialContent Clone() { // Construct it via reflection. var clone = (MaterialContent)Activator.CreateInstance(GetType()); // Give it the same identity as the original material. clone.Name = Name; clone.Identity = Identity; // Just copy the opaque data and textures which should // result in the same properties being set if the material // is implemented correctly. foreach (var pair in Textures) clone.Textures.Add(pair.Key, pair.Value); foreach (var pair in OpaqueData) clone.OpaqueData.Add(pair.Key, pair.Value); return clone; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshBuilder.cs ================================================ using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public sealed class MeshBuilder { private readonly MeshContent _meshContent; private MaterialContent _currentMaterial; private OpaqueDataDictionary _currentOpaqueData; private bool _geometryDirty; private GeometryContent _currentGeometryContent; private readonly List _vertexChannels; private readonly List _vertexChannelData; private bool _finishedCreation; private bool _finishedMesh; /// /// Gets or sets the current value for position merging of the mesh. /// public bool MergeDuplicatePositions { get; set; } /// /// Gets or sets the tolerance for . /// public float MergePositionTolerance { get; set; } /// /// Gets or sets the name of the current object being processed. /// public string Name { get { return _meshContent.Name; } set { _meshContent.Name = value; } } /// /// Reverses the triangle winding order of the specified mesh. /// public bool SwapWindingOrder { get; set; } private MeshBuilder(string name) { _meshContent = new MeshContent(); _vertexChannels = new List(); _vertexChannelData = new List(); _currentGeometryContent = new GeometryContent(); _currentOpaqueData = new OpaqueDataDictionary(); _geometryDirty = true; Name = name; } /// /// Adds a vertex into the index collection. /// /// Index of the inserted vertex, in the collection. /// This corresponds to the value returned by . public void AddTriangleVertex(int indexIntoVertexCollection) { if (_finishedMesh) throw new InvalidOperationException( "This MeshBuilder can no longer be used because FinishMesh has been called."); _finishedCreation = true; if (_geometryDirty) { _currentGeometryContent = new GeometryContent(); _currentGeometryContent.Material = _currentMaterial; foreach (KeyValuePair kvp in _currentOpaqueData) _currentGeometryContent.OpaqueData.Add(kvp.Key, kvp.Value); // we have to copy our vertex channels to the new geometry foreach (VertexChannel channel in _vertexChannels) { _currentGeometryContent.Vertices.Channels.Add(channel.Name, channel.ElementType, null); } _meshContent.Geometry.Add(_currentGeometryContent); _geometryDirty = false; } // Add the vertex to the mesh and then add the vertex position to the indices list int pos = _currentGeometryContent.Vertices.Add(indexIntoVertexCollection); // Then add the data for the other channels for (int i = 0; i < _vertexChannels.Count; i++) { VertexChannel channel = _currentGeometryContent.Vertices.Channels[i]; object data = _vertexChannelData[i]; if (data == null) throw new InvalidOperationException(String.Format("Missing vertex channel data for channel {0}", channel.Name)); channel.Items.Add(data); } _currentGeometryContent.Indices.Add(pos); } public int CreateVertexChannel(string usage) { if (_finishedMesh) throw new InvalidOperationException("This MeshBuilder can no longer be used because FinishMesh has been called."); if (_finishedCreation) throw new InvalidOperationException("Functions starting with 'Create' must be called before calling AddTriangleVertex"); VertexChannel channel = new VertexChannel(usage); _vertexChannels.Add(channel); _vertexChannelData.Add(default(T)); _currentGeometryContent.Vertices.Channels.Add(usage, null); return _vertexChannels.Count - 1; } /// /// Inserts the specified vertex position into the vertex channel. /// /// Value of the x component of the vector. /// Value of the y component of the vector. /// Value of the z component of the vector. /// Index of the inserted vertex. public int CreatePosition(float x, float y, float z) { return CreatePosition(new Vector3(x, y, z)); } /// /// Inserts the specified vertex position into the vertex channel at the specified index. /// /// Value of the vertex being inserted. /// Index of the vertex being inserted. public int CreatePosition(Vector3 pos) { if (_finishedMesh) throw new InvalidOperationException( "This MeshBuilder can no longer be used because FinishMesh has been called."); if (_finishedCreation) throw new InvalidOperationException("Functions starting with 'Create' must be called before calling AddTriangleVertex"); _meshContent.Positions.Add(pos); return _meshContent.Positions.Count - 1; } /// /// Ends the creation of a mesh. /// /// Resultant mesh. public MeshContent FinishMesh() { if (_finishedMesh) return _meshContent; if (MergeDuplicatePositions) MeshHelper.MergeDuplicatePositions(_meshContent, MergePositionTolerance); MeshHelper.MergeDuplicateVertices(_meshContent); MeshHelper.CalculateNormals(_meshContent, false); if (SwapWindingOrder) MeshHelper.SwapWindingOrder(_meshContent); _finishedMesh = true; return _meshContent; } /// /// Sets the material for the next triangles. /// /// Material for the next triangles. /// /// Sets the material for the triangles being defined next. This material /// and the opaque data dictionary, set with /// define the object containing the next /// triangles. When you set a new material or opaque data dictionary the /// triangles you add afterwards will belong to a new /// object. /// public void SetMaterial(MaterialContent material) { if (_currentMaterial == material) return; _currentMaterial = material; _geometryDirty = true; } /// /// Sets the opaque data for the next triangles. /// /// Opaque data dictionary for the next triangles. /// /// Sets the opaque data dictionary for the triangles being defined next. This dictionary /// and the material, set with , define the /// object containing the next triangles. When you set a new material or opaque data dictionary /// the triangles you add afterwards will belong to a new object. /// public void SetOpaqueData(OpaqueDataDictionary opaqueData) { if (_currentOpaqueData == opaqueData) return; _currentOpaqueData = opaqueData; _geometryDirty = true; } /// /// Sets the specified vertex data with new data. /// /// Index of the vertex data channel being set. This should match the index returned by CreateVertexChannel. /// New data values for the vertex data. The data type being set must match the data type for the vertex channel specified by vertexDataIndex. public void SetVertexChannelData(int vertexDataIndex, object channelData) { if (_currentGeometryContent.Vertices.Channels[vertexDataIndex].ElementType != channelData.GetType()) throw new InvalidOperationException(String.Format("Channel {0} data has a different type from input. Expected: {1}. Actual: {2}", vertexDataIndex, _currentGeometryContent.Vertices.Channels[vertexDataIndex].ElementType, channelData.GetType())); _vertexChannelData[vertexDataIndex] = channelData; } /// /// Initializes the creation of a mesh. /// /// Name of the mesh. /// Object used when building the mesh. public static MeshBuilder StartMesh(string name) { return new MeshBuilder(name); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties and methods that define various aspects of a mesh. /// public class MeshContent : NodeContent { GeometryContentCollection _geometry; PositionCollection _positions; /// /// Gets the list of geometry batches for the mesh. /// public GeometryContentCollection Geometry { get { return _geometry; } } /// /// Gets the list of vertex position values. /// public PositionCollection Positions { get { return _positions; } } /// /// Initializes a new instance of MeshContent. /// public MeshContent() { _geometry = new GeometryContentCollection(this); _positions = new PositionCollection(); } /// /// Applies a transform directly to position and normal channels. Node transforms are unaffected. /// internal void TransformContents(ref Matrix xform) { // Transform positions for (int i = 0; i < _positions.Count; i++) _positions[i] = Vector3.Transform(_positions[i], xform); // Transform all vectors too: // Normals are "tangent covectors", which need to be transformed using the // transpose of the inverse matrix! Matrix inverseTranspose = Matrix.Transpose(Matrix.Invert(xform)); foreach (GeometryContent geometry in _geometry) { foreach (VertexChannel vertexChannel in geometry.Vertices.Channels) { VertexChannel vector3Channel = vertexChannel as VertexChannel; if (vector3Channel == null) continue; if (vertexChannel.Name.StartsWith("Normal") || vertexChannel.Name.StartsWith("Binormal") || vertexChannel.Name.StartsWith("Tangent")) { for (int i = 0; i < vector3Channel.Count; i++) { Vector3 normal = vector3Channel[i]; Vector3.TransformNormal(ref normal, ref inverseTranspose, out normal); Vector3.Normalize(ref normal, out normal); vector3Channel[i] = normal; } } } } // Swap winding order when faces are mirrored. if (MeshHelper.IsLeftHanded(ref xform)) MeshHelper.SwapWindingOrder(this); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MeshHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public static class MeshHelper { static bool IsFinite(float v) { return !float.IsInfinity(v) && !float.IsNaN(v); } static bool IsFinite(this Vector3 v) { return IsFinite(v.X) && IsFinite(v.Y) && IsFinite(v.Z); } static bool IsNaN(this Vector3 v) { return float.IsNaN(v.X) || float.IsNaN(v.Y) || float.IsNaN(v.Z); } /// /// Generates vertex normals by accumulation of triangle face normals. /// /// The mesh which will receive the normals. /// Overwrite or skip over geometry with existing normals. /// /// This calls to do the work. /// public static void CalculateNormals(MeshContent mesh, bool overwriteExistingNormals) { foreach (GeometryContent geometry in mesh.Geometry) CalculateNormals(geometry, overwriteExistingNormals); } /// /// Generates vertex normals by accumulation of triangle face normals. /// /// The geometry which will receive the normals. /// Overwrite or skip over geometry with existing normals. /// /// We use a "Mean Weighted Equally" method generate vertex normals from triangle /// face normals. If normal cannot be calculated from the geometry we set it to zero. /// public static void CalculateNormals(GeometryContent geometry, bool overwriteExistingNormals) { VertexChannel normalsChannel; // Look for an existing normals channel. if (!geometry.Vertices.Channels.Contains(VertexChannelNames.Normal())) { // We don't have existing normals, so add a new channel. normalsChannel = geometry.Vertices.Channels.Add(VertexChannelNames.Normal(), null); } else { // If we're not supposed to overwrite the existing // normals then we're done here. if (!overwriteExistingNormals) return; normalsChannel = geometry.Vertices.Channels.Get(VertexChannelNames.Normal()); } // Accumulate all the triangle face normals for each vertex. Vector3[] normals = new Vector3[normalsChannel.Count]; for (int i = 0; i < geometry.Indices.Count; i += 3) { int ia = geometry.Indices[i + 0]; int ib = geometry.Indices[i + 1]; int ic = geometry.Indices[i + 2]; Vector3 aa = geometry.Vertices.Positions[ia]; Vector3 bb = geometry.Vertices.Positions[ib]; Vector3 cc = geometry.Vertices.Positions[ic]; Vector3 faceNormal = Vector3.Cross(cc - bb, bb - aa); float len = faceNormal.Length(); if (len > 0.0f) { faceNormal.X /= len; faceNormal.Y /= len; faceNormal.Z /= len; // We are using the "Mean Weighted Equally" method where each // face has an equal weight in the final normal calculation. // // We could maybe switch to "Mean Weighted by Angle" which is said // to look best in most cases, but is more expensive to calculate. // // There is also an idea of weighting by triangle area, but IMO the // triangle area doesn't always have a direct relationship to the // shape of a mesh. // // For more ideas see: // // "A Comparison of Algorithms for Vertex Normal Computation" // by Shuangshuang Jin, Robert R. Lewis, David West. // Vector3.Add(ref normals[ia], ref faceNormal, out normals[ia]); Vector3.Add(ref normals[ib], ref faceNormal, out normals[ib]); Vector3.Add(ref normals[ic], ref faceNormal, out normals[ic]); } } // Normalize the gathered vertex normals. for (int i = 0; i < normals.Length; i++) { float len = normals[i].Length(); if (len > 0.0f) { normals[i].X /= len; normals[i].Y /= len; normals[i].Z /= len; } else { // TODO: It would be nice to be able to log this to // the pipeline so that it can be fixed in the model. // TODO: We could maybe void this by a better algorithm // above for generating the normals. // We have a zero length normal. You can argue that putting // anything here is better than nothing, but by leaving it to // zero it allows the caller to detect this and react to it. normals[i] = Vector3.Zero; } Debug.Assert(!normals[i].IsNaN(), "Bad normal!"); Debug.Assert(normals[i].IsFinite(), "Bad normal!"); Debug.Assert(normals[i].Length() >= 0.9999f, "Bad normal!"); // Set the new normals on the vertex channel. normalsChannel[i] = normals[i]; } return; } /// /// Generate the tangents and binormals (tangent frames) for each vertex in the mesh. /// /// The mesh which will have add tangent and binormal channels added. /// The Vector2 texture coordinate channel used to generate tangent frames. /// /// public static void CalculateTangentFrames(MeshContent mesh, string textureCoordinateChannelName, string tangentChannelName, string binormalChannelName) { for (int g = 0; g < mesh.Geometry.Count; g++) { GeometryContent geometry = mesh.Geometry[g]; CalculateTangentFrames(geometry, textureCoordinateChannelName, tangentChannelName, binormalChannelName); } } public static void CalculateTangentFrames(GeometryContent geometry, string textureCoordinateChannelName, string tangentChannelName, string binormalChannelName) { VertexContent verts = geometry.Vertices; IndexCollection indices = geometry.Indices; VertexChannelCollection channels = geometry.Vertices.Channels; string normalChannelName = VertexChannelNames.Normal(0); if (!channels.Contains(normalChannelName)) throw new InvalidContentException("geometry doesn't contain 'Normal0' channel."); if (!channels.Contains(textureCoordinateChannelName)) throw new InvalidContentException("geometry doesn't contain '"+ textureCoordinateChannelName + "' channel."); VertexChannel normals = channels.Get(normalChannelName); VertexChannel uvs = channels.Get(textureCoordinateChannelName); Vector3[] tangents, bitangents; CalculateTangentFrames(verts.Positions, indices, normals, uvs, out tangents, out bitangents); // All the indices are 1:1 with the others, so we // can just add the new channels in place. if (!string.IsNullOrEmpty(tangentChannelName)) channels.Add(tangentChannelName, tangents); if (!string.IsNullOrEmpty(binormalChannelName)) channels.Add(binormalChannelName, bitangents); } public static void CalculateTangentFrames(IList positions, IList indices, IList normals, IList textureCoords, out Vector3[] tangents, out Vector3[] bitangents) { // Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. // Terathon Software 3D Graphics Library, 2001. // http://www.terathon.com/code/tangent.html // Hegde, Siddharth. "Messing with Tangent Space". Gamasutra, 2007. // http://www.gamasutra.com/view/feature/129939/messing_with_tangent_space.php int numVerts = positions.Count; int numIndices = indices.Count; Vector3[] tan1 = new Vector3[numVerts]; Vector3[] tan2 = new Vector3[numVerts]; for (int index = 0; index < numIndices; index += 3) { int i1 = indices[index + 0]; int i2 = indices[index + 1]; int i3 = indices[index + 2]; Vector2 w1 = textureCoords[i1]; Vector2 w2 = textureCoords[i2]; Vector2 w3 = textureCoords[i3]; 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 denom = s1 * t2 - s2 * t1; if (Math.Abs(denom) < float.Epsilon) { // The triangle UVs are zero sized one dimension. // // So we cannot calculate the vertex tangents for this // one trangle, but maybe it can with other trangles. continue; } float r = 1.0f / denom; Debug.Assert(IsFinite(r), "Bad r!"); Vector3 v1 = positions[i1]; Vector3 v2 = positions[i2]; Vector3 v3 = positions[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; Vector3 sdir; sdir.X = (t2 * x1 - t1 * x2) * r; sdir.Y = (t2 * y1 - t1 * y2) * r; sdir.Z = (t2 * z1 - t1 * z2) * r; Vector3 tdir; tdir.X = (s1 * x2 - s2 * x1) * r; tdir.Y = (s1 * y2 - s2 * y1) * r; tdir.Z = (s1 * z2 - s2 * z1) * r; tan1[i1] += sdir; Debug.Assert(tan1[i1].IsFinite(), "Bad tan1[i1]!"); tan1[i2] += sdir; Debug.Assert(tan1[i2].IsFinite(), "Bad tan1[i2]!"); tan1[i3] += sdir; Debug.Assert(tan1[i3].IsFinite(), "Bad tan1[i3]!"); tan2[i1] += tdir; Debug.Assert(tan2[i1].IsFinite(), "Bad tan2[i1]!"); tan2[i2] += tdir; Debug.Assert(tan2[i2].IsFinite(), "Bad tan2[i2]!"); tan2[i3] += tdir; Debug.Assert(tan2[i3].IsFinite(), "Bad tan2[i3]!"); } tangents = new Vector3[numVerts]; bitangents = new Vector3[numVerts]; // At this point we have all the vectors accumulated, but we need to average // them all out. So we loop through all the final verts and do a Gram-Schmidt // orthonormalize, then make sure they're all unit length. for (int i = 0; i < numVerts; i++) { Vector3 n = normals[i]; Debug.Assert(n.IsFinite(), "Bad normal!"); Debug.Assert(n.Length() >= 0.9999f, "Bad normal!"); Vector3 t = tan1[i]; if (t.LengthSquared() < float.Epsilon) { // TODO: Ideally we could spit out a warning to the // content logging here! // We couldn't find a good tanget for this vertex. // // Rather than set them to zero which could produce // errors in other parts of the pipeline, we just take // a guess at something that may look ok. t = Vector3.Cross(n, Vector3.UnitX); if (t.LengthSquared() < float.Epsilon) t = Vector3.Cross(n, Vector3.UnitY); tangents[i] = Vector3.Normalize(t); bitangents[i] = Vector3.Cross(n, tangents[i]); continue; } // Gram-Schmidt orthogonalize // TODO: This can be zero can cause NaNs on // normalize... how do we fix this? Vector3 tangent = t - n * Vector3.Dot(n, t); tangent = Vector3.Normalize(tangent); Debug.Assert(tangent.IsFinite(), "Bad tangent!"); tangents[i] = tangent; // Calculate handedness float w = (Vector3.Dot(Vector3.Cross(n, t), tan2[i]) < 0.0F) ? -1.0F : 1.0F; Debug.Assert(IsFinite(w), "Bad handedness!"); // Calculate the bitangent Vector3 bitangent = Vector3.Cross(n, tangent) * w; Debug.Assert(bitangent.IsFinite(), "Bad bitangent!"); bitangents[i] = bitangent; } } /// /// Search for the root bone of the skeletion. /// /// The node from which to begin the search for the skeleton. /// The root bone of the skeletion or null if none is found. public static BoneContent FindSkeleton(NodeContent node) { // We should always get a node to search! if (node == null) throw new ArgumentNullException("node"); // Search up thru the hierarchy. for (; node != null; node = node.Parent) { // First if this node is a bone then search up for the root. BoneContent root = node as BoneContent; if (root != null) { while (root.Parent is BoneContent) root = (BoneContent)root.Parent; return root; } // Next try searching the children for a root bone. foreach (NodeContent nodeContent in node.Children) { BoneContent bone = nodeContent as BoneContent; if (bone == null) continue; // If we found a bone if (root != null) throw new InvalidContentException("DuplicateSkeleton", node.Identity); // This is our new root. root = bone; } // If we found a root bone then return it, else // we continue the search to the node parent. if (root != null) return root; } // We didn't find any bones! return null; } /// /// Traverses a skeleton depth-first and builds a list of its bones. /// public static IList FlattenSkeleton(BoneContent skeleton) { if (skeleton == null) throw new ArgumentNullException("skeleton"); List results = new List(); Stack work = new Stack(new[] { skeleton }); while (work.Count > 0) { NodeContent top = work.Pop(); BoneContent bone = top as BoneContent; if (bone != null) results.Add(bone); for (int i = top.Children.Count - 1; i >= 0; i--) work.Push(top.Children[i]); } return results; } /// /// Merge any positions in the of the /// specified mesh that are at a distance less than the specified tolerance /// from each other. /// /// Mesh to be processed. /// Tolerance value that determines how close /// positions must be to each other to be merged. /// /// This method will also update the /// in the of the specified mesh. /// public static void MergeDuplicatePositions(MeshContent mesh, float tolerance) { if (mesh == null) throw new ArgumentNullException("mesh"); // TODO Improve performance with spatial partitioning scheme List indexLists = new List(); foreach (GeometryContent geometry in mesh.Geometry) { IndexUpdateList list = new IndexUpdateList(geometry.Vertices.PositionIndices); indexLists.Add(list); } for (int i = mesh.Positions.Count - 1; i >= 1; i--) { Vector3 pi = mesh.Positions[i]; for (int j = i - 1; j >= 0; j--) { Vector3 pj = mesh.Positions[j]; if (Vector3.Distance(pi, pj) <= tolerance) { foreach (IndexUpdateList list in indexLists) list.Update(i, j); mesh.Positions.RemoveAt(i); } } } } /// /// Merge vertices with the same and /// data within the specified /// . /// /// Geometry to be processed. public static void MergeDuplicateVertices(GeometryContent geometry) { if (geometry == null) throw new ArgumentNullException("geometry"); VertexContent verts = geometry.Vertices; var hashMap = new Dictionary>(); IndexUpdateList indices = new IndexUpdateList(geometry.Indices); int vIndex = 0; for (int i = 0; i < geometry.Indices.Count; i++) { int iIndex = geometry.Indices[i]; VertexData iData = new VertexData { Index = iIndex, PositionIndex = verts.PositionIndices[vIndex], ChannelData = new object[verts.Channels.Count] }; for (int channel = 0; channel < verts.Channels.Count; channel++) iData.ChannelData[channel] = verts.Channels[channel][vIndex]; int hash = iData.ComputeHash(); bool merged = false; List candidates; if (hashMap.TryGetValue(hash, out candidates)) { for (int candidateIndex = 0; candidateIndex < candidates.Count; candidateIndex++) { VertexData c = candidates[candidateIndex]; if (!iData.ContentEquals(c)) continue; // Match! Update the corresponding indices and remove the vertex indices.Update(iIndex, c.Index); verts.RemoveAt(vIndex); merged = true; } if (!merged) candidates.Add(iData); } else { // no vertices with the same hash yet, create a new list for the data hashMap.Add(hash, new List { iData }); } if (!merged) vIndex++; } // update the indices because of the vertices we removed indices.Pack(); } /// /// Merge vertices with the same and /// data within the /// of this mesh. If you want to merge positions too, call /// on your mesh before this function. /// /// Mesh to be processed public static void MergeDuplicateVertices(MeshContent mesh) { if (mesh == null) throw new ArgumentNullException("mesh"); foreach (GeometryContent geometry in mesh.Geometry) MergeDuplicateVertices(geometry); } public static void OptimizeForCache(MeshContent mesh) { // We don't throw here as non-optimized still works. } /// /// Reverses the triangle winding order of the mesh. /// /// The mesh which will be modified. /// /// This method is useful when changing the direction of backface culling /// like when switching between left/right handed coordinate systems. /// public static void SwapWindingOrder(MeshContent mesh) { // Gotta have a mesh to run! if (mesh == null) throw new ArgumentNullException("mesh"); foreach (GeometryContent geometry in mesh.Geometry) { for (int i = 0; i < geometry.Indices.Count; i += 3) { int first = geometry.Indices[i]; int last = geometry.Indices[i+2]; geometry.Indices[i] = last; geometry.Indices[i+2] = first; } } } /// /// Transforms the contents of a node and its descendants. /// /// The node transforms themselves are unaffected. /// The root node of the scene to transform. /// The transform matrix to apply to the scene. public static void TransformScene(NodeContent scene, Matrix transform) { if (scene == null) throw new ArgumentException("scene"); // If the transformation is an identity matrix, this is a no-op and // we can save ourselves a bunch of work in the first place. if (transform == Matrix.Identity) return; Matrix inverseTransform = Matrix.Invert(transform); Stack work = new Stack(); work.Push(scene); while (work.Count > 0) { NodeContent node = work.Pop(); foreach (NodeContent child in node.Children) work.Push(child); // Transform the mesh content. MeshContent mesh = node as MeshContent; if (mesh != null) mesh.TransformContents(ref transform); // Transform local coordinate system using "similarity transform". node.Transform = inverseTransform * node.Transform * transform; // Transform animations. foreach (AnimationContent animation in node.Animations.Values) foreach (AnimationChannel animationChannel in animation.Channels.Values) for (int i = 0; i < animationChannel.Count; i++) animationChannel[i].Transform = inverseTransform * animationChannel[i].Transform * transform; } } /// /// Determines whether the specified transform is left-handed. /// /// The transform. /// /// if is left-handed; otherwise, /// if is right-handed. /// internal static bool IsLeftHanded(ref Matrix xform) { // Check sign of determinant of upper-left 3x3 matrix: // positive determinant ... right-handed // negative determinant ... left-handed // Since XNA does not have a 3x3 matrix, use the "scalar triple product" // (see http://en.wikipedia.org/wiki/Triple_product) to calculate the // determinant. float d = Vector3.Dot(xform.Right, Vector3.Cross(xform.Forward, xform.Up)); return d < 0.0f; } #region Private helpers private static void UpdatePositionIndices(MeshContent mesh, int from, int to) { foreach (GeometryContent geometry in mesh.Geometry) { for (int i = 0; i < geometry.Vertices.PositionIndices.Count; i++) { int index = geometry.Vertices.PositionIndices[i]; if (index == from) geometry.Vertices.PositionIndices[i] = to; } } } private class VertexData { public int Index; public int PositionIndex; public object[] ChannelData; // Compute a hash based on PositionIndex and ChannelData public int ComputeHash() { int hash = PositionIndex; foreach (object channel in ChannelData) hash ^= channel.GetHashCode(); return hash; } // Check equality on PositionIndex and ChannelData public bool ContentEquals(VertexData other) { if (PositionIndex != other.PositionIndex) return false; if (ChannelData.Length != other.ChannelData.Length) return false; for (int i = 0; i < ChannelData.Length; i++) { if (!Equals(ChannelData[i], other.ChannelData[i])) return false; } return true; } } // takes an IndexCollection and can efficiently update index values private class IndexUpdateList { private readonly IList _collectionToUpdate; private readonly Dictionary> _indexPositions; // create the list, presort the values and compute the start positions of each value public IndexUpdateList(IList collectionToUpdate) { _collectionToUpdate = collectionToUpdate; _indexPositions = new Dictionary>(); Initialize(); } private void Initialize() { for (int pos = 0; pos < _collectionToUpdate.Count; pos++) { int v = _collectionToUpdate[pos]; if (_indexPositions.ContainsKey(v)) _indexPositions[v].Add(pos); else _indexPositions.Add(v, new List {pos}); } } public void Update(int from, int to) { if (from == to || !_indexPositions.ContainsKey(from)) return; foreach (int pos in _indexPositions[from]) _collectionToUpdate[pos] = to; if (_indexPositions.ContainsKey(to)) _indexPositions[to].AddRange(_indexPositions[from]); else _indexPositions.Add(to, _indexPositions[from]); _indexPositions.Remove(from); } // Pack all indices together starting from zero // E.g. [5, 5, 3, 5, 21, 3] -> [1, 1, 0, 1, 2, 0] // note that the order must be kept public void Pack() { if (_collectionToUpdate.Count == 0) return; SortedSet sorted = new SortedSet(_collectionToUpdate); int newIndex = 0; foreach (int value in sorted) { foreach (int pos in _indexPositions[value]) _collectionToUpdate[pos] = newIndex; newIndex++; } } } #endregion } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MipmapChain.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods for accessing a mipmap chain. /// public sealed class MipmapChain : Collection { /// /// Initializes a new instance of MipmapChain. /// public MipmapChain() { } /// /// Initializes a new instance of MipmapChain with the specified mipmap. /// /// public MipmapChain(BitmapContent bitmap) { Add(bitmap); } /// /// Constructs a new mipmap chain containing the specified bitmap. /// /// Bitmap used for the mipmap chain. /// Resultant mipmap chain. public static implicit operator MipmapChain(BitmapContent bitmap) { return new MipmapChain(bitmap); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/MipmapChainCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods for maintaining a mipmap chain. /// public sealed class MipmapChainCollection : Collection { private readonly bool _fixedSize; private const string CannotResizeError = "Cannot resize MipmapChainCollection. This type of texture has a fixed number of faces."; internal MipmapChainCollection(int count, bool fixedSize) { for (var i = 0; i < count; i++) Add(new MipmapChain()); _fixedSize = fixedSize; } protected override void ClearItems() { if (_fixedSize) throw new NotSupportedException(CannotResizeError); base.ClearItems(); } protected override void RemoveItem(int index) { if (_fixedSize) throw new NotSupportedException(CannotResizeError); base.RemoveItem(index); } protected override void InsertItem(int index, MipmapChain item) { if (_fixedSize) throw new NotSupportedException(CannotResizeError); base.InsertItem(index, item); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/NodeContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides a base class for graphics types that define local coordinate systems. /// [System.Diagnostics.DebuggerDisplay("Node '{Name}'")] public class NodeContent : ContentItem { Matrix _transform; NodeContent _parent; NodeContentCollection _children; AnimationContentDictionary _animations; /// /// Gets the value of the local Transform property, multiplied by the AbsoluteTransform of the parent. /// public Matrix AbsoluteTransform { get { if (_parent != null) return _transform * _parent.AbsoluteTransform; return _transform; } } /// /// Gets the set of animations belonging to this node. /// public AnimationContentDictionary Animations { get { return _animations; } } /// /// Gets the children of the NodeContent object. /// public NodeContentCollection Children { get { return _children; } } /// /// Gets the parent of this NodeContent object. /// public NodeContent Parent { get { return _parent; } set { _parent = value; } } /// /// Gets the transform matrix of the scene. /// The transform matrix defines a local coordinate system for the content in addition to any children of this object. /// public Matrix Transform { get { return _transform; } set { _transform = value; } } /// /// Creates an instance of NodeContent. /// public NodeContent() { _children = new NodeContentCollection(this); _animations = new AnimationContentDictionary(); Transform = Matrix.Identity; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/NodeContentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class NodeContentCollection : ChildCollection { /// /// Creates an instance of NodeContentCollection. /// /// Parent object of the child objects returned in the collection. internal NodeContentCollection(NodeContent parent) : base(parent) { } /// /// Gets the parent of a child object. /// /// The child of the parent being retrieved. /// The parent of the child object. protected override NodeContent GetParent(NodeContent child) { return child.Parent; } /// /// Modifies the value of the parent object of the specified child object. /// /// The child of the parent being modified. /// The new value for the parent object. protected override void SetParent(NodeContent child, NodeContent parent) { child.Parent = parent; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PixelBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.InteropServices; using System.Threading.Tasks; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class PixelBitmapContent : BitmapContent where T : struct, IEquatable { private T[][] _pixelData; internal SurfaceFormat _format; public PixelBitmapContent(int width, int height) { if (!TryGetFormat(out _format)) throw new InvalidOperationException(String.Format("Color format \"{0}\" is not supported",typeof(T).ToString())); Height = height; Width = width; _pixelData = new T[height][]; Parallel.For(0, Height, (y) => { _pixelData[y] = new T[Width]; }); } public unsafe override byte[] GetPixelData() { int formatSize = _format.GetSize(); int dataSize = Width * Height * formatSize; byte[] outputData = new byte[dataSize]; Parallel.For(0, Height, (y) => { T[] row = _pixelData[y]; fixed (T* pData = &row[0]) { IntPtr dataPtr = (IntPtr)pData; Marshal.Copy(dataPtr, outputData, (formatSize * y * Width), (Width * formatSize)); } }); return outputData; } public unsafe override void SetPixelData(byte[] sourceData) { int formatSize = _format.GetSize(); int rowSize = Width * formatSize; Parallel.For(0, Height, (y) => { T[] row = _pixelData[y]; fixed (T* pData = &row[0]) { IntPtr dataPtr = (IntPtr)pData; Marshal.Copy(sourceData, (y * rowSize), dataPtr, rowSize); } }); } public T[] GetRow(int y) { if (y < 0 || y >= Height) throw new ArgumentOutOfRangeException("y"); return _pixelData[y]; } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { if (typeof(T) == typeof(Color)) format = SurfaceFormat.Color; else if (typeof(T) == typeof(Vector2)) format = SurfaceFormat.Vector2; else if (typeof(T) == typeof(Vector4)) format = SurfaceFormat.Vector4; else if (typeof(T) == typeof(byte)) format = SurfaceFormat.Alpha8; else if (typeof(T) == typeof(Single)) format = SurfaceFormat.Single; else if (typeof(T) == typeof(Alpha8)) format = SurfaceFormat.Alpha8; else if (typeof(T) == typeof(Bgr565)) format = SurfaceFormat.Bgr565; else if (typeof(T) == typeof(Bgra4444)) format = SurfaceFormat.Bgra4444; else if (typeof(T) == typeof(Bgra5551)) format = SurfaceFormat.Bgra5551; else if (typeof(T) == typeof(Byte4)) format = SurfaceFormat.Color; else if (typeof(T) == typeof(HalfSingle)) format = SurfaceFormat.HalfSingle; else if (typeof(T) == typeof(HalfVector2)) format = SurfaceFormat.HalfVector2; else if (typeof(T) == typeof(HalfVector4)) format = SurfaceFormat.HalfVector4; else if (typeof(T) == typeof(NormalizedByte2)) format = SurfaceFormat.NormalizedByte2; else if (typeof(T) == typeof(NormalizedByte4)) format = SurfaceFormat.NormalizedByte4; else if (typeof(T) == typeof(NormalizedShort2)) format = SurfaceFormat.NormalizedByte2; else if (typeof(T) == typeof(NormalizedShort4)) format = SurfaceFormat.NormalizedByte4; else if (typeof(T) == typeof(Rg32)) format = SurfaceFormat.Rg32; else if (typeof(T) == typeof(Rgba1010102)) format = SurfaceFormat.Rgba1010102; else if (typeof(T) == typeof(Rgba64)) format = SurfaceFormat.Rgba64; else { format = (SurfaceFormat)(int)-1; return false; } return true; } public T GetPixel(int x, int y) { return _pixelData[y][x]; } public void SetPixel(int x, int y, T value) { _pixelData[y][x] = value; } public void ReplaceColor(T originalColor, T newColor) { Parallel.For(0, Height, (y) => { T[] row = _pixelData[y]; for (int x = 0; x < Width; x++) { if (row[x].Equals(originalColor)) row[x] = newColor; } }); } protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) return false; // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (_format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { SetPixelData(sourceBitmap.GetPixelData()); return true; } // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(sourceBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } // Convert from a Vector4 format PixelBitmapContent src = sourceBitmap as PixelBitmapContent; if (default(T) is IPackedVector) { Parallel.For(0, sourceRegion.Height, (y) => { T pixel = default(T); IPackedVector p = (IPackedVector)pixel; Vector4[] row = src.GetRow(sourceRegion.Top + y); for (int x = 0; x < sourceRegion.Width; x++) { p.PackFromVector4(row[sourceRegion.Left + x]); pixel = (T)p; SetPixel(destinationRegion.Left + x, destinationRegion.Top + y, pixel); } }); } else { VectorConverterEx converter = new VectorConverterEx() as VectorConverterEx; // If no converter could be created, converting from this format is not supported if (converter == null) return false; Parallel.For(0, sourceRegion.Height, (y) => { Vector4[] row = src.GetRow(sourceRegion.Top + y); for (int x = 0; x < sourceRegion.Width; x++) { SetPixel(destinationRegion.Left + x, destinationRegion.Top + y, converter.FromVector4(row[sourceRegion.Left + x])); } }); } return true; } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) return false; // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (_format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { destinationBitmap.SetPixelData(GetPixelData()); return true; } // If the destination is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(destinationBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(this, sourceRegion, destinationBitmap, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } // Convert to a Vector4 format PixelBitmapContent dest = destinationBitmap as PixelBitmapContent; if (default(T) is IPackedVector) { Parallel.For(0, sourceRegion.Height, (y) => { T[] row = GetRow(sourceRegion.Top + y); for (int x = 0; x < sourceRegion.Width; x++) { dest.SetPixel(destinationRegion.Left + x, destinationRegion.Top + y, ((IPackedVector)row[sourceRegion.Left + x]).ToVector4()); } }); } else { VectorConverterEx converter = new VectorConverterEx() as VectorConverterEx; // If no converter could be created, converting from this format is not supported if (converter == null) return false; Parallel.For(0, sourceRegion.Height, (y) => { T[] row = GetRow(sourceRegion.Top + y); for (int x = 0; x < sourceRegion.Width; x++) { dest.SetPixel(destinationRegion.Left + x, destinationRegion.Top + y, converter.ToVector4(row[sourceRegion.Left + x])); } }); } return true; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PositionCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides a collection of vertex position values. /// public sealed class PositionCollection : Collection { /// /// Initializes a new instance of PositionCollection. /// public PositionCollection() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcBitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; using PVRTexLibNET; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public abstract class PvrtcBitmapContent : BitmapContent { internal byte[] _bitmapData; public PvrtcBitmapContent(int width, int height) : base(width, height) { } int GetDataSize() { SurfaceFormat format; TryGetFormat(out format); switch (format) { case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: return (Math.Max(Width, 16) * Math.Max(Height, 8) * 2 + 7) / 8; case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: return (Math.Max(Width, 8) * Math.Max(Height, 8) * 4 + 7) / 8; } return 0; } public override byte[] GetPixelData() { if (_bitmapData == null) throw new InvalidOperationException("No data set on bitmap"); var result = new byte[_bitmapData.Length]; Buffer.BlockCopy(_bitmapData, 0, result, 0, _bitmapData.Length); return result; } public override void SetPixelData(byte[] sourceData) { var size = GetDataSize(); if (sourceData.Length != size) throw new ArgumentException("Incorrect data size. Expected " + size + " bytes"); if (_bitmapData == null || _bitmapData.Length != size) _bitmapData = new byte[size]; Buffer.BlockCopy(sourceData, 0, _bitmapData, 0, size); } protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat sourceFormat; if (!sourceBitmap.TryGetFormat(out sourceFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (format == sourceFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { SetPixelData(sourceBitmap.GetPixelData()); return true; } // Destination region copy is not yet supported if (destinationRegion != new Rectangle(0, 0, Width, Height)) return false; // If the source is not Vector4 or requires resizing, send it through BitmapContent.Copy if (!(sourceBitmap is PixelBitmapContent) || sourceRegion.Width != destinationRegion.Width || sourceRegion.Height != destinationRegion.Height) { try { BitmapContent.Copy(sourceBitmap, sourceRegion, this, destinationRegion); return true; } catch (InvalidOperationException) { return false; } } PixelFormat targetFormat; switch (format) { case SurfaceFormat.RgbPvrtc2Bpp: targetFormat = PixelFormat.PVRTCI_2bpp_RGB; break; case SurfaceFormat.RgbaPvrtc2Bpp: targetFormat = PixelFormat.PVRTCI_2bpp_RGBA; break; case SurfaceFormat.RgbPvrtc4Bpp: targetFormat = PixelFormat.PVRTCI_4bpp_RGB; break; case SurfaceFormat.RgbaPvrtc4Bpp: targetFormat = PixelFormat.PVRTCI_4bpp_RGBA; break; default: return false; } // Create the texture object in the PVR library var sourceData = sourceBitmap.GetPixelData(); var rgba32F = (PixelFormat)0x2020202061626772; // static const PixelType PVRStandard32PixelType = PixelType('r', 'g', 'b', 'a', 32, 32, 32, 32); using (var pvrTexture = PVRTexture.CreateTexture(sourceData, (uint)sourceBitmap.Width, (uint)sourceBitmap.Height, 1, rgba32F, true, VariableType.Float, ColourSpace.lRGB)) { // Resize the bitmap if needed if ((sourceBitmap.Width != Width) || (sourceBitmap.Height != Height)) pvrTexture.Resize((uint)Width, (uint)Height, 1, ResizeMode.Cubic); // On Linux, anything less than CompressorQuality.PVRTCHigh crashes in libpthread.so at the end of compression pvrTexture.Transcode(targetFormat, VariableType.UnsignedByte, ColourSpace.lRGB, CompressorQuality.PVRTCHigh); var texDataSize = pvrTexture.GetTextureDataSize(0); var texData = new byte[texDataSize]; pvrTexture.GetTextureData(texData, texDataSize); SetPixelData(texData); } return true; } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { SurfaceFormat destinationFormat; if (!destinationBitmap.TryGetFormat(out destinationFormat)) return false; SurfaceFormat format; TryGetFormat(out format); // A shortcut for copying the entire bitmap to another bitmap of the same type and format if (format == destinationFormat && (sourceRegion == new Rectangle(0, 0, Width, Height)) && sourceRegion == destinationRegion) { destinationBitmap.SetPixelData(GetPixelData()); return true; } // No other support for copying from a PVR texture yet return false; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgb2BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class PvrtcRgb2BitmapContent : PvrtcBitmapContent { /// /// Creates an instance of PvrtcRgb2BitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public PvrtcRgb2BitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbPvrtc2Bpp; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "PVRTC RGB 2bpp " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgb4BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class PvrtcRgb4BitmapContent : PvrtcBitmapContent { /// /// Creates an instance of PvrtcRgb4BitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public PvrtcRgb4BitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbPvrtc4Bpp; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "PVRTC RGB 4bpp " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgba2BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class PvrtcRgba2BitmapContent : PvrtcBitmapContent { /// /// Creates an instance of PvrtcRgba2BitBitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public PvrtcRgba2BitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbaPvrtc2Bpp; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "PVRTC RGBA 2bpp " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/PvrtcRgba4BitmapContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class PvrtcRgba4BitmapContent : PvrtcBitmapContent { /// /// Creates an instance of PvrtcRgba4BitBitmapContent with the specified width and height. /// /// The width in pixels of the bitmap. /// The height in pixels of the bitmap. public PvrtcRgba4BitmapContent(int width, int height) : base(width, height) { } /// /// Gets the corresponding GPU texture format for the specified bitmap type. /// /// Format being retrieved. /// The GPU texture format of the bitmap type. public override bool TryGetFormat(out SurfaceFormat format) { format = SurfaceFormat.RgbaPvrtc4Bpp; return true; } /// /// Returns a string description of the bitmap. /// /// Description of the bitmap. public override string ToString() { return "PVRTC RGBA 4bpp " + Width + "x" + Height; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/SkinnedMaterialContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class SkinnedMaterialContent : MaterialContent { public const string AlphaKey = "Alpha"; public const string DiffuseColorKey = "DiffuseColor"; public const string EmissiveColorKey = "EmissiveColor"; public const string SpecularColorKey = "SpecularColor"; public const string SpecularPowerKey = "SpecularPower"; public const string TextureKey = "Texture"; public const string WeightsPerVertexKey = "WeightsPerVertex"; public float? Alpha { get { return GetValueTypeProperty(AlphaKey); } set { SetProperty(AlphaKey, value); } } public Vector3? DiffuseColor { get { return GetValueTypeProperty(DiffuseColorKey); } set { SetProperty(DiffuseColorKey, value); } } public Vector3? EmissiveColor { get { return GetValueTypeProperty(EmissiveColorKey); } set { SetProperty(EmissiveColorKey, value); } } public Vector3? SpecularColor { get { return GetValueTypeProperty(SpecularColorKey); } set { SetProperty(SpecularColorKey, value); } } public float? SpecularPower { get { return GetValueTypeProperty(SpecularPowerKey); } set { SetProperty(SpecularPowerKey, value); } } public ExternalReference Texture { get { return GetTexture(TextureKey); } set { SetTexture(TextureKey, value); } } public int? WeightsPerVertex { get { return GetValueTypeProperty(WeightsPerVertexKey); } set { SetProperty(WeightsPerVertexKey, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Texture2DContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class Texture2DContent : TextureContent { public MipmapChain Mipmaps { get { return Faces[0]; } set { Faces[0] = value; } } public Texture2DContent() : base(new MipmapChainCollection(1, true)) { } public override void Validate(GraphicsProfile? targetProf) { throw new NotImplementedException(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/Texture3DContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class Texture3DContent : TextureContent { public Texture3DContent() : base(new MipmapChainCollection(0, false)) { } public override void Validate(GraphicsProfile? targetProf) { throw new NotImplementedException(); } public override void GenerateMipmaps(bool overwriteExistingMipmaps) { throw new NotImplementedException(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides a base class for all texture objects. /// public abstract class TextureContent : ContentItem { MipmapChainCollection faces; /// /// Collection of image faces that hold a single mipmap chain for a regular 2D texture, six chains for a cube map, or an arbitrary number for volume and array textures. /// public MipmapChainCollection Faces { get { return faces; } } /// /// Initializes a new instance of TextureContent with the specified face collection. /// /// Mipmap chain containing the face collection. protected TextureContent(MipmapChainCollection faces) { this.faces = faces; } /// /// Converts all bitmaps for this texture to a different format. /// /// Type being converted to. The new type must be a subclass of BitmapContent, such as PixelBitmapContent or DxtBitmapContent. public void ConvertBitmapType(Type newBitmapType) { if (newBitmapType == null) throw new ArgumentNullException("newBitmapType"); if (!newBitmapType.IsSubclassOf(typeof (BitmapContent))) throw new ArgumentException(string.Format("Type '{0}' is not a subclass of BitmapContent.", newBitmapType)); if (newBitmapType.IsAbstract) throw new ArgumentException(string.Format("Type '{0}' is abstract and cannot be allocated.", newBitmapType)); if (newBitmapType.ContainsGenericParameters) throw new ArgumentException(string.Format("Type '{0}' contains generic parameters and cannot be allocated.", newBitmapType)); if (newBitmapType.GetConstructor(new Type[2] {typeof (int), typeof (int)}) == null) throw new ArgumentException(string.Format("Type '{0} does not have a constructor with signature (int, int) and cannot be allocated.", newBitmapType)); foreach (var mipChain in faces) { for (var i = 0; i < mipChain.Count; i++) { var src = mipChain[i]; if (src.GetType() != newBitmapType) { var dst = (BitmapContent)Activator.CreateInstance(newBitmapType, new object[] { src.Width,src.Height }); BitmapContent.Copy(src, dst); mipChain[i] = dst; } } } } /// /// Generates a full set of mipmaps for the texture. /// /// true if the existing mipmap set is replaced with the new set; false otherwise. public virtual void GenerateMipmaps(bool overwriteExistingMipmaps) { // If we already have mipmaps and we're not supposed to overwrite // them then return without any generation. if (!overwriteExistingMipmaps && faces.Any(f => f.Count > 1)) return; // Generate the mips for each face. foreach (var face in faces) { // Remove any existing mipmaps. var faceBitmap = face[0]; face.Clear(); face.Add(faceBitmap); var faceType = faceBitmap.GetType(); int width = faceBitmap.Width; int height = faceBitmap.Height; while (width > 1 || height > 1) { if (width > 1) width /= 2; if (height > 1) height /= 2; var mip = (BitmapContent)Activator.CreateInstance(faceType, new object[] { width, height }); BitmapContent.Copy(faceBitmap, mip); face.Add(mip); } } } /// /// Verifies that all contents of this texture are present, correct and match the capabilities of the device. /// /// The profile identifier that defines the capabilities of the device. public abstract void Validate(GraphicsProfile? targetProfile); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureCubeContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class TextureCubeContent : TextureContent { public TextureCubeContent() : base(new MipmapChainCollection(6, true)) { } public override void Validate(GraphicsProfile? targetProf) { throw new NotImplementedException(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/TextureReferenceDictionary.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides a collection of named references to texture files. /// public sealed class TextureReferenceDictionary : NamedValueDictionary> { /// /// Initializes a new instance of TextureReferenceDictionary. /// public TextureReferenceDictionary() { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VectorConverter.cs ================================================ // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public static class VectorConverter { public static bool TryGetSurfaceFormat(Type vectorType, out SurfaceFormat surfaceFormat) { throw new NotImplementedException(); } public static bool TryGetVectorType(SurfaceFormat surfaceFormat, out Type vectorType) { throw new NotImplementedException(); } public static bool TryGetVectorType(VertexElementFormat vertexElementFormat, out Type vectorType) { throw new NotImplementedException(); } public static bool TryGetVertexElementFormat(Type vectorType, out VertexElementFormat vertexElementFormat) { throw new NotImplementedException(); } // see: https://docs.microsoft.com/en-us/dotnet/api/system.converter-2 public static Converter GetConverter() { if (typeof(TInput) == typeof(Vector2) && typeof(TOutput) == typeof(Vector4)) { var converter = new Converter(Vector2ToVector4); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector3) && typeof(TOutput) == typeof(Vector4)) { var converter = new Converter(Vector3ToVector4); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector4)) { var converter = new Converter(Vector4ToVector4); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(float)) { var converter = new Converter(Vector4ToFloat); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector2)) { var converter = new Converter(Vector4ToVector2); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector4) && typeof(TOutput) == typeof(Vector3)) { var converter = new Converter(Vector4ToVector3); return (Converter)(object)converter; } if (typeof(TInput) == typeof(Vector4) && typeof(TOutput).GetInterface("IPackedVector") != null) { var converter = new Converter(Vector4ToPackedVector); return (Converter)(object)converter; } throw new NotImplementedException( string.Format("TypeConverter for {0} -> {1} is not implemented.", typeof(TInput).Name, typeof(TOutput).Name)); } private static Vector4 Vector2ToVector4(Vector2 value) { return new Vector4(value.X, value.Y, 0.0f, 0.0f); } private static Vector4 Vector3ToVector4(Vector3 value) { return new Vector4(value.X, value.Y, value.Z, 0.0f); } private static Vector4 Vector4ToVector4(Vector4 value) { return value; } private static float Vector4ToFloat(Vector4 value) { return value.X; } private static Vector2 Vector4ToVector2(Vector4 value) { return new Vector2(value.X, value.Y); } private static Vector3 Vector4ToVector3(Vector4 value) { return new Vector3(value.X, value.Y, value.Z); } private static TPacked Vector4ToPackedVector(Vector4 value) { var packedVec = (IPackedVector)Activator.CreateInstance(typeof(TPacked)); packedVec.PackFromVector4(value); return (TPacked)packedVec; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for maintaining a vertex channel. /// A vertex channel is a list of arbitrary data with one value for each vertex. Channels are stored inside a GeometryContent and identified by name. /// public abstract class VertexChannel : IList, ICollection, IEnumerable { string _name; /// /// Allows overriding classes to implement the list, and for properties/methods in this class to access it. /// internal abstract IList Items { get; } /// /// Gets the number of elements in the vertex channel /// public int Count { get { return Items.Count; } } /// /// Gets the type of data contained in this channel. /// public abstract Type ElementType { get; } /// /// Gets or sets the element at the specified index. /// public Object this[int index] { get { return Items[index]; } set { Items[index] = value; } } /// /// Gets the name of the vertex channel. /// public string Name { get { return _name; } internal set { _name = value; } } /// /// Gets a value indicating whether access to the collection is synchronized (thread safe). /// bool ICollection.IsSynchronized { get { return false; } } /// /// Gets an object that can be used to synchronize access to the collection. /// Object ICollection.SyncRoot { get { return this; } } /// /// Gets a value indicating whether this list has a fixed size. /// bool IList.IsFixedSize { get { return false; } } /// /// Gets a value indicating whether this object is read-only. /// bool IList.IsReadOnly { get { return false; } } /// /// Creates an instance of VertexChannel. /// /// Name of the channel. internal VertexChannel(string name) { Name = name; } /// /// Determines whether the specified element is in the channel. /// /// Element being searched for. /// true if the element is present; false otherwise. public bool Contains(Object value) { return Items.Contains(value); } /// /// Copies the elements of the channel to an array, starting at the specified index. /// /// Array that will receive the copied channel elements. /// Starting index for copy operation. public void CopyTo(Array array, int index) { ((ICollection)Items).CopyTo(array, index); } /// /// Gets an enumerator interface for reading channel content. /// /// Enumeration of the channel content. public IEnumerator GetEnumerator() { return Items.GetEnumerator(); } /// /// Gets the index of the specified item. /// /// Item whose index is to be retrieved. /// Index of specified item. public int IndexOf(Object value) { return Items.IndexOf(value); } /// /// Reads channel content and automatically converts it to the specified vector format. /// /// Target vector format of the converted data. /// The converted data. public abstract IEnumerable ReadConvertedContent(); /// /// Adds a new element to the end of the collection. /// /// The element to add. /// Index of the element. int IList.Add(Object value) { return Items.Add(value); } /// /// Removes all elements from the collection. /// void IList.Clear() { Items.Clear(); } /// /// Inserts an element into the collection at the specified position. /// /// Index at which to insert the element. /// The element to insert. void IList.Insert(int index, Object value) { Items.Insert(index, value); } /// /// Inserts the range of values from the enumerable into the channel. /// /// The zero-based index at which the new elements should be inserted. /// The data to insert into the channel. internal abstract void InsertRange(int index, IEnumerable data); /// /// Removes a specified element from the collection. /// /// The element to remove. void IList.Remove(Object value) { Items.Remove(value); } /// /// Removes the element at the specified index position. /// /// Index of the element to remove. void IList.RemoveAt(int index) { Items.RemoveAt(index); } /// /// Removes a range of values from the channel. /// /// The zero-based starting index of the range of elements to remove. /// The number of elements to remove. internal abstract void RemoveRange(int index, int count); public override string ToString() { return String.Format("{{Name:{0}, ElementType: {1}, Count: {2} }}", this.Name, this.ElementType, this.Count); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for managing a list of vertex data channels. /// public sealed class VertexChannelCollection : IList, ICollection, IEnumerable, IEnumerable { List _channels; VertexContent _vertexContent; /// /// Gets the number of vertex channels in the collection. /// public int Count { get { return _channels.Count; } } /// /// Gets or sets the vertex channel at the specified index position. /// public VertexChannel this[int index] { get { return _channels[index]; } set { _channels[index] = value; } } /// /// Gets or sets the vertex channel with the specified name. /// public VertexChannel this[string name] { get { var index = IndexOf(name); if (index < 0) throw new ArgumentException("name"); return _channels[index]; } set { var index = IndexOf(name); if (index < 0) throw new ArgumentException("name"); _channels[index] = value; } } /// /// Determines whether the collection is read-only. /// bool ICollection.IsReadOnly { get { return false; } } /// /// Creates an instance of VertexChannelCollection. /// /// The VertexContent object that owns this collection. internal VertexChannelCollection(VertexContent vertexContent) { this._vertexContent = vertexContent; _channels = new List(); _insertOverload = GetType().GetMethods().First(m => m.Name == "Insert" && m.IsGenericMethodDefinition); } /// /// Adds a new vertex channel to the end of the collection. /// /// Type of the channel. /// Name of the new channel. /// Initial data for the new channel. If null, the channel is filled with the default value for that type. /// The newly added vertex channel. public VertexChannel Add(string name, IEnumerable channelData) { return Insert(_channels.Count, name, channelData); } /// /// Adds a new vertex channel to the end of the collection. /// /// Name of the new channel. /// Type of data to be contained in the new channel. /// Initial data for the new channel. If null, the channel is filled with the default value for that type. /// The newly added vertex channel. public VertexChannel Add(string name, Type elementType, IEnumerable channelData) { return Insert(_channels.Count, name, elementType, channelData); } /// /// Removes all vertex channels from the collection. /// public void Clear() { _channels.Clear(); } /// /// Determines whether the collection contains the specified vertex channel. /// /// Name of the channel being searched for. /// true if the channel was found; false otherwise. public bool Contains(string name) { return _channels.Exists(c => { return c.Name == name; }); } /// /// Determines whether the collection contains the specified vertex channel. /// /// The channel being searched for. /// true if the channel was found; false otherwise. public bool Contains(VertexChannel item) { return _channels.Contains(item); } /// /// Converts the channel, at the specified index, to another vector format. /// /// Type of the target format. Can be one of the following: Single, Vector2, Vector3, Vector4, IPackedVector /// Index of the channel to be converted. /// New channel in the specified format. public VertexChannel ConvertChannelContent(int index) { if (index < 0 || index >= _channels.Count) throw new ArgumentOutOfRangeException("index"); // Get the channel at that index VertexChannel channel = this[index]; // Remove it because we cannot add a new channel with the same name RemoveAt(index); VertexChannel result = null; try { // Insert a new converted channel at the same index result = Insert(index, channel.Name, channel.ReadConvertedContent()); } catch { // If anything went wrong, put the old channel back... _channels.Insert(index, channel); // ...before throwing the exception again throw; } // Return the new converted channel return result; } /// /// Converts the channel, specified by name to another vector format. /// /// Type of the target format. Can be one of the following: Single, Vector2, Vector3, Vector4, IPackedVector /// Name of the channel to be converted. /// New channel in the specified format. public VertexChannel ConvertChannelContent(string name) { int index = IndexOf(name); if (index < 0) throw new ArgumentException("name"); return ConvertChannelContent(index); } /// /// Gets the vertex channel with the specified index and content type. /// /// Type of a vertex channel. /// Index of a vertex channel. /// The vertex channel. public VertexChannel Get(int index) { if (index < 0 || index >= _channels.Count) throw new ArgumentOutOfRangeException("index"); VertexChannel channel = this[index]; // Make sure the channel type is as expected if (channel.ElementType != typeof(T)) throw new InvalidOperationException("Mismatched channel type '"+typeof(T).Name+"' for channel["+index+"] " + channel); return (VertexChannel)channel; } /// /// Gets the vertex channel with the specified name and content type. /// /// Type of the vertex channel. /// Name of a vertex channel. /// The vertex channel. public VertexChannel Get(string name) { int index = IndexOf(name); if (index < 0) throw new ArgumentException("name"); return Get(index); } /// /// Gets an enumerator that iterates through the vertex channels of a collection. /// /// Enumerator for the collection. public IEnumerator GetEnumerator() { return _channels.GetEnumerator(); } /// /// Determines the index of a vertex channel with the specified name. /// /// Name of the vertex channel being searched for. /// Index of the vertex channel. public int IndexOf(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); return _channels.FindIndex((v) => v.Name == name); } /// /// Determines the index of the specified vertex channel. /// /// Vertex channel being searched for. /// Index of the vertex channel. public int IndexOf(VertexChannel item) { if (item == null) throw new ArgumentNullException("item"); return _channels.IndexOf(item); } /// /// Inserts a new vertex channel at the specified position. /// /// Type of the new channel. /// Index for channel insertion. /// Name of the new channel. /// The new channel. /// The inserted vertex channel. public VertexChannel Insert(int index, string name, IEnumerable channelData) { if ((index < 0) || (index > _channels.Count)) throw new ArgumentOutOfRangeException("index"); if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); // Don't insert a channel with the same name if (IndexOf(name) >= 0) throw new ArgumentException("Vertex channel with name " + name + " already exists"); VertexChannel channel = new VertexChannel(name); if (channelData != null) { // Insert the values from the enumerable into the channel channel.InsertRange(0, channelData); // Make sure we have the right number of vertices if (channel.Count != _vertexContent.VertexCount) throw new ArgumentOutOfRangeException("channelData"); } else { // Insert enough default values to fill the channel channel.InsertRange(0, new ElementType[_vertexContent.VertexCount]); } _channels.Insert(index, channel); return channel; } // this reference the above Insert method and is initialized in the constructor private readonly MethodInfo _insertOverload; /// /// Inserts a new vertex channel at the specified position. /// /// Index for channel insertion. /// Name of the new channel. /// Type of the new channel. /// Initial data for the new channel. If null, it is filled with the default value. /// The inserted vertex channel. public VertexChannel Insert(int index, string name, Type elementType, IEnumerable channelData) { // Call the generic version of this method return (VertexChannel) _insertOverload.MakeGenericMethod(elementType).Invoke(this, new object[] { index, name, channelData }); } /// /// Removes the specified vertex channel from the collection. /// /// Name of the vertex channel being removed. /// true if the channel was removed; false otherwise. public bool Remove(string name) { int index = IndexOf(name); if (index >= 0) { _channels.RemoveAt(index); return true; } return false; } /// /// Removes the specified vertex channel from the collection. /// /// The vertex channel being removed. /// true if the channel was removed; false otherwise. public bool Remove(VertexChannel item) { return _channels.Remove(item); } /// /// Removes the vertex channel at the specified index position. /// /// Index of the vertex channel being removed. public void RemoveAt(int index) { _channels.RemoveAt(index); } /// /// Adds a new vertex channel to the collection. /// /// Vertex channel to be added. void ICollection.Add(VertexChannel item) { _channels.Add(item); } /// /// Copies the elements of the collection to an array, starting at the specified index. /// /// The destination array. /// The index at which to begin copying elements. void ICollection.CopyTo(VertexChannel[] array, int arrayIndex) { _channels.CopyTo(array, arrayIndex); } /// /// Inserts an item at the specified index. /// /// The zero-based index at which item should be inserted. /// The item to insert. void IList.Insert(int index, VertexChannel item) { _channels.Insert(index, item); } /// /// Returns an enumerator that iterates through a collection. /// /// An object that can be used to iterate through the collection. IEnumerator IEnumerable.GetEnumerator() { return _channels.GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelGeneric.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for maintaining a vertex channel. /// This is a generic implementation of VertexChannel and, therefore, can handle strongly typed content data. /// public sealed class VertexChannel : VertexChannel, IList, ICollection, IEnumerable, IEnumerable { List _items; /// /// Gets the strongly-typed list for the base class to access. /// internal override IList Items { get { return _items; } } /// /// Gets the type of data contained in this channel. /// public override Type ElementType { get { return typeof(T); } } /// /// Gets or sets the element at the specified index. /// public new T this[int index] { get { return _items[index]; } set { _items[index] = value; } } /// /// true if this object is read-only; false otherwise. /// bool ICollection.IsReadOnly { get { return false; } } /// /// Creates an instance of VertexChannel. /// /// Name of the channel. internal VertexChannel(string name) : base(name) { _items = new List(); } /// /// Determines whether the specified element is in the channel. /// /// Element being searched for. /// true if the element is present; false otherwise. public bool Contains(T item) { return _items.Contains(item); } /// /// Copies the elements of the channel to an array, starting at the specified index. /// /// Array that will receive the copied channel elements. /// Starting index for copy operation. public void CopyTo(T[] array, int arrayIndex) { _items.CopyTo(array, arrayIndex); } /// /// Gets an enumerator interface for reading channel content. /// /// Enumeration of the channel content. public new IEnumerator GetEnumerator() { return _items.GetEnumerator(); } /// /// Gets the index of the specified item. /// /// Item whose index is to be retrieved. /// Index of specified item. public int IndexOf(T item) { return _items.IndexOf(item); } /// /// Inserts the range of values from the enumerable into the channel. /// /// The zero-based index at which the new elements should be inserted. /// The data to insert into the channel. internal override void InsertRange(int index, IEnumerable data) { if ((index < 0) || (index > _items.Count)) throw new ArgumentOutOfRangeException("index"); if (data == null) throw new ArgumentNullException("data"); if (!(data is IEnumerable)) throw new ArgumentException("data"); _items.InsertRange(index, (IEnumerable)data); } /// /// Reads channel content and automatically converts it to the specified vector format. /// /// Target vector format for the converted channel data. /// The converted channel data. public override IEnumerable ReadConvertedContent() { if (typeof(TargetType).IsAssignableFrom(typeof(T))) return _items.Cast(); return Convert(_items); } private static IEnumerable Convert(List items) { // The following formats are supported: // - Single // - Vector2 Structure // - Vector3 Structure // - Vector4 Structure // - Any implementation of IPackedVector Interface. Converter vconverter4 = VectorConverter.GetConverter(); Converter converter = VectorConverter.GetConverter(); foreach (T item in items) { Vector4 vec4 = vconverter4(item); yield return (TargetType)converter(vec4); } } /// /// Adds a new element to the end of the collection. /// /// The element to add. void ICollection.Add(T value) { ((ICollection)Items).Add(value); } /// /// Removes all elements from the collection. /// void ICollection.Clear() { Items.Clear(); } /// /// Removes a specified element from the collection. /// /// The element to remove. /// true if the channel was removed; false otherwise. bool ICollection.Remove(T value) { return ((ICollection)Items).Remove(value); } /// /// Inserts an element into the collection at the specified position. /// /// Index at which to insert the element. /// The element to insert. void IList.Insert(int index, T value) { Items.Insert(index, value); } /// /// Removes the element at the specified index position. /// /// Index of the element to remove. void IList.RemoveAt(int index) { Items.RemoveAt(index); } /// /// Removes a range of values from the channel. /// /// The zero-based starting index of the range of elements to remove. /// The number of elements to remove. internal override void RemoveRange(int index, int count) { _items.RemoveRange(index, count); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexChannelNames.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Globalization; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides properties for managing a collection of vertex channel names. /// public static class VertexChannelNames { /// /// A lookup for the TryDecodeUsage method. /// static Dictionary usages; static VertexChannelNames() { // Populate the lookup for TryDecodeUsage usages = new Dictionary(); string[] names = Enum.GetNames(typeof(VertexElementUsage)); Array values = Enum.GetValues(typeof(VertexElementUsage)); for (int i = 0; i < names.Length; ++i) usages.Add(names[i], (VertexElementUsage)values.GetValue(i)); } /// /// Gets the name of a binormal vector channel with the specified index. /// This will typically contain Vector3 data. /// /// Zero-based index of the vector channel being retrieved. /// Name of the retrieved vector channel. public static string Binormal(int usageIndex) { return EncodeName(VertexElementUsage.Binormal, usageIndex); } /// /// Gets the name of a color channel with the specified index. /// This will typically contain Vector3 data. /// /// Zero-based index of the color channel being retrieved. /// Name of the retrieved color channel. public static string Color(int usageIndex) { return EncodeName(VertexElementUsage.Color, usageIndex); } /// /// Gets a channel base name stub from the encoded string format. /// /// Encoded string to be decoded. /// Extracted base name. public static string DecodeBaseName(string encodedName) { if (string.IsNullOrEmpty(encodedName)) throw new ArgumentNullException("encodedName"); return encodedName.TrimEnd("0123456789".ToCharArray()); } /// /// Gets a channel usage index from the encoded format. /// /// Encoded name to be decoded. /// Resulting channel usage index. public static int DecodeUsageIndex(string encodedName) { if (string.IsNullOrEmpty(encodedName)) throw new ArgumentNullException("encodedName"); // Extract the base name string baseName = DecodeBaseName(encodedName); if (string.IsNullOrEmpty(baseName)) throw new InvalidOperationException("encodedName"); // Subtract the base name from the string and convert the remainder to an integer. // TryParse solves the problem when name is just 'BlendIndicies' for example, in // which case we default to index 0, assuming only 1 index. int index = 0; int.TryParse(encodedName.Substring(baseName.Length), NumberStyles.Integer, CultureInfo.InvariantCulture, out index); return index; } /// /// Combines a channel name stub and usage index into a string name. /// /// A channel base name stub. /// A channel usage index. /// Resulting encoded name. public static string EncodeName(string baseName, int usageIndex) { return baseName + usageIndex.ToString(CultureInfo.InvariantCulture); } /// /// Combines a vertex declaration usage and usage index into a string name. /// /// A vertex declaration. /// An index for the vertex declaration. /// Resulting encoded name. public static string EncodeName(VertexElementUsage vertexElementUsage, int usageIndex) { return vertexElementUsage.ToString() + usageIndex.ToString(CultureInfo.InvariantCulture); } /// /// Gets the name of the primary normal channel. /// This will typically contain Vector3 data. /// /// Primary normal channel name. public static string Normal() { return Normal(0); } /// /// Gets the name of a normal channel with the specified index. /// This will typically contain Vector3 data. /// /// Zero-based index of the normal channel being retrieved. /// Normal channel at the specified index. public static string Normal(int usageIndex) { return EncodeName(VertexElementUsage.Normal, usageIndex); } /// /// Gets the name of a tangent vector channel with the specified index. /// This will typically contain Vector3 data. /// /// Zero-based index of the tangent vector channel being retrieved. /// Name of the retrieved tangent vector channel. public static string Tangent(int usageIndex) { return EncodeName(VertexElementUsage.Tangent, usageIndex); } /// /// Gets the name of a texture coordinate channel with the specified index. /// This will typically contain Vector3 data. /// /// Zero-based index of the texture coordinate channel being retrieved. /// Name of the retrieved texture coordinate channel. public static string TextureCoordinate(int usageIndex) { return EncodeName(VertexElementUsage.TextureCoordinate, usageIndex); } /// /// Gets a vertex declaration usage enumeration from the encoded string format. /// /// Encoded name of a vertex declaration. /// Value of the declaration usage for the vertex declaration. /// true if the encoded name maps to a VertexElementUsage enumeration value; false otherwise. public static bool TryDecodeUsage(string encodedName, out VertexElementUsage usage) { if (string.IsNullOrEmpty(encodedName)) throw new ArgumentNullException("encodedName"); // Extract the base name string baseName = DecodeBaseName(encodedName); if (string.IsNullOrEmpty(baseName)) throw new InvalidOperationException("encodedName"); return usages.TryGetValue(baseName, out usage); } /// /// Gets the name of the primary animation weights channel. /// This will typically contain data on the bone weights for a vertex channel. For more information, see BoneWeightCollection. /// /// Name of the primary animation weights channel. public static string Weights() { return Weights(0); } /// /// Gets the name of an animation weights channel at the specified index. /// This will typically contain data on the bone weights for a vertex channel. For more information, see BoneWeightCollection. /// /// Index of the animation weight channel to be retrieved. /// Name of the retrieved animation weights channel. public static string Weights(int usageIndex) { // This appears to be the odd one out that doesn't use the VertexElementUsage enum. return EncodeName("Weights", usageIndex); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Graphics/VertexContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { /// /// Provides methods and properties for maintaining the vertex data of a GeometryContent. /// /// This class combines a collection of arbitrarily named data channels with a list of position indices that reference the Positions collection of the parent MeshContent. public sealed class VertexContent { VertexChannelCollection _channels; VertexChannel _positionIndices; IndirectPositionCollection _positions; /// /// Gets the list of named vertex data channels in the VertexContent. /// /// Collection of vertex data channels. public VertexChannelCollection Channels { get { return _channels; } } /// /// Gets the list of position indices. /// /// Position of the position index being retrieved. /// This list adds a level of indirection between the actual triangle indices and the Positions member of the parent. This indirection preserves the topological vertex identity in cases where a single vertex position is used by triangles that straddle a discontinuity in some other data channel. /// For example, the following code gets the position of the first vertex of the first triangle in a GeometryContent object: /// parent.Positions[Vertices.PositionIndices[Indices[0]]] public VertexChannel PositionIndices { get { return _positionIndices; } } /// /// Gets position data from the parent mesh object. /// /// Collection of vertex positions for the mesh. /// The collection returned from this call provides a virtualized view of the vertex positions for this batch. The collection uses the contents of the PositionIndices property to index into the parent Positions. This collection is read-only. If you need to modify any contained values, edit the PositionIndices or Positions members directly. public IndirectPositionCollection Positions { get { return _positions; } } /// /// Number of vertices for the content. /// /// Number of vertices. public int VertexCount { get { return _positionIndices.Count; } } /// /// Constructs a VertexContent instance. /// internal VertexContent(GeometryContent geometry) { _positionIndices = new VertexChannel("PositionIndices"); _positions = new IndirectPositionCollection(geometry, _positionIndices); _channels = new VertexChannelCollection(this); } /// /// Appends a new vertex index to the end of the PositionIndices collection. /// Other vertex channels will automatically be extended and the new indices populated with default values. /// /// Index into the MeshContent.Positions member of the parent. /// Index of the new entry. This can be added to the Indices member of the parent. public int Add(int positionIndex) { return _positionIndices.Items.Add(positionIndex); } /// /// Appends multiple vertex indices to the end of the PositionIndices collection. /// Other vertex channels will automatically be extended and the new indices populated with default values. /// /// Index into the Positions member of the parent. public void AddRange(IEnumerable positionIndexCollection) { _positionIndices.InsertRange(_positionIndices.Items.Count, positionIndexCollection); } /// /// Converts design-time vertex position and channel data into a vertex buffer format that a graphics device can recognize. /// /// A packed vertex buffer. /// One or more of the vertex channel types are invalid or an unrecognized name was passed to VertexElementUsage. public VertexBufferContent CreateVertexBuffer() { VertexBufferContent vertexBuffer = new VertexBufferContent(_positions.Count); SetupVertexDeclaration(vertexBuffer.VertexDeclaration); int stride = vertexBuffer.VertexDeclaration.VertexStride.Value; // TODO: Verify enough elements in channels to match positions? // Write out data in an interleaved fashion each channel at a time, for example: // |------------------------------------------------------------| // |POSITION[0] | NORMAL[0] |TEX0[0] | POSITION[1]| NORMAL[1] | // |-----------------------------------------------|------------| // #0 |111111111111|____________|________|111111111111|____________| // #1 |111111111111|111111111111|________|111111111111|111111111111| // #2 |111111111111|111111111111|11111111|111111111111|111111111111| // #0: Write position vertices using stride to skip over the other channels: int bufferOffset = 0; vertexBuffer.Write(bufferOffset, stride, _positions); int channelOffset = VertexBufferContent.SizeOf(typeof(Vector3)); foreach (VertexChannel channel in Channels) { // #N: Fill in the channel within each vertex Type channelType = channel.ElementType; vertexBuffer.Write(bufferOffset + channelOffset, stride, channelType, channel); channelOffset += VertexBufferContent.SizeOf(channelType); } return vertexBuffer; } internal void SetupVertexDeclaration(VertexDeclarationContent vertexDeclaration) { int offset = 0; // We always have a position channel vertexDeclaration.VertexElements.Add( new VertexElement(offset, VertexElementFormat.Vector3, VertexElementUsage.Position, 0)); offset += VertexElementFormat.Vector3.GetSize(); // Optional channels foreach (VertexChannel channel in Channels) { VertexElementFormat format; VertexElementUsage usage; // Try to determine the vertex format if (channel.ElementType == typeof(Single)) format = VertexElementFormat.Single; else if (channel.ElementType == typeof(Vector2)) format = VertexElementFormat.Vector2; else if (channel.ElementType == typeof(Vector3)) format = VertexElementFormat.Vector3; else if (channel.ElementType == typeof(Vector4)) format = VertexElementFormat.Vector4; else if (channel.ElementType == typeof(Color)) format = VertexElementFormat.Color; else if (channel.ElementType == typeof(Byte4)) format = VertexElementFormat.Byte4; else if (channel.ElementType == typeof(Short2)) format = VertexElementFormat.Short2; else if (channel.ElementType == typeof(Short4)) format = VertexElementFormat.Short4; else if (channel.ElementType == typeof(NormalizedShort2)) format = VertexElementFormat.NormalizedShort2; else if (channel.ElementType == typeof(NormalizedShort4)) format = VertexElementFormat.NormalizedShort4; else if (channel.ElementType == typeof(HalfVector2)) format = VertexElementFormat.HalfVector2; else if (channel.ElementType == typeof(HalfVector4)) format = VertexElementFormat.HalfVector4; else throw new InvalidContentException(string.Format("Unrecognized vertex content type: '{0}'", channel.ElementType)); // Try to determine the vertex usage if (!VertexChannelNames.TryDecodeUsage(channel.Name, out usage)) throw new InvalidContentException(string.Format("Unknown vertex element usage for channel '{0}'", channel.Name)); // Try getting the usage index int usageIndex = VertexChannelNames.DecodeUsageIndex(channel.Name); vertexDeclaration.VertexElements.Add(new VertexElement(offset, format, usage, usageIndex)); offset += format.GetSize(); } vertexDeclaration.VertexStride = offset; } /// /// Inserts a new vertex index to the PositionIndices collection. /// Other vertex channels will automatically be extended and the new indices populated with default values. /// /// Vertex index to be inserted. /// Position of new vertex index in the collection. public void Insert(int index, int positionIndex) { _positionIndices.Items.Insert(index, positionIndex); } /// /// Inserts multiple vertex indices to the PositionIndices collection. /// Other vertex channels will automatically be extended and the new indices populated with default values. /// /// Vertex index to be inserted. /// Position of the first element of the inserted range in the collection. public void InsertRange(int index, IEnumerable positionIndexCollection) { _positionIndices.InsertRange(index, positionIndexCollection); } /// /// Removes a vertex index from the specified location in both PositionIndices and VertexChannel<T>. /// /// Index of the vertex to be removed. public void RemoveAt(int index) { if (index < 0 || index >= VertexCount) throw new ArgumentOutOfRangeException("index"); _positionIndices.Items.RemoveAt(index); foreach (VertexChannel channel in _channels) channel.Items.RemoveAt(index); } /// /// Removes a range of vertex indices from the specified location in both PositionIndices and VertexChannel<T>. /// /// Index of the first vertex index to be removed. /// Number of indices to remove. public void RemoveRange(int index, int count) { if (index < 0 || index >= VertexCount) throw new ArgumentOutOfRangeException("index"); if (count < 0 || (index+count) > VertexCount) throw new ArgumentOutOfRangeException("count"); _positionIndices.RemoveRange(index, count); foreach (VertexChannel channel in _channels) channel.RemoveRange(index, count); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/OpenAssetImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using Assimp; using Assimp.Unmanaged; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { [ContentImporter( ".dae", // Collada ".gltf", "glb", // glTF ".blend", // Blender 3D ".3ds", // 3ds Max 3DS ".ase", // 3ds Max ASE ".obj", // Wavefront Object ".ifc", // Industry Foundation Classes (IFC/Step) ".xgl", ".zgl", // XGL ".ply", // Stanford Polygon Library ".dxf", // AutoCAD DXF ".lwo", // LightWave ".lws", // LightWave Scene ".lxo", // Modo ".stl", // Stereolithography ".ac", // AC3D ".ms3d", // Milkshape 3D ".cob", ".scn", // TrueSpace ".bvh", // Biovision BVH ".csm", // CharacterStudio Motion ".irrmesh", // Irrlicht Mesh ".irr", // Irrlicht Scene ".mdl", // Quake I, 3D GameStudio (3DGS) ".md2", // Quake II ".md3", // Quake III Mesh ".pk3", // Quake III Map/BSP ".mdc", // Return to Castle Wolfenstein ".md5", // Doom 3 ".smd", ".vta", // Valve Model ".ogex", // Open Game Engine Exchange ".3d", // Unreal ".b3d", // BlitzBasic 3D ".q3d", ".q3s", // Quick3D ".nff", // Neutral File Format, Sense8 WorldToolKit ".off", // Object File Format ".ter", // Terragen Terrain ".hmp", // 3D GameStudio (3DGS) Terrain ".ndo", // Izware Nendo DisplayName = "Open Asset Import Library - KNI", DefaultProcessor = "ModelProcessor")] public class OpenAssetImporter : ContentImporter { // Assimp has a few limitations (not all FBX files are supported): // FBX files reference objects using IDs. Therefore, it is possible to resolve // bones even if multiple bones/nodes have the same name. But Assimp references // bones only by name! // --> Limitation #1: A model cannot have more than one skeleton! // --> Limitation #2: Bone names need to be unique! // // Bones are represented by regular nodes, but there is no flag indicating whether // a node is a bone. A mesh in Assimp references deformation bones (= bones that // affect vertices) by name. That means, we can identify the nodes that represent // deformation bones. But there is no way to identify helper bones (= bones that // belong to the skeleton, but do not affect vertices). As described in // http://assimp.sourceforge.net/lib_html/data.html and // http://gamedev.stackexchange.com/questions/26382/i-cant-figure-out-how-to-animate-my-loaded-model-with-assimp/26442#26442 // we can only guess which nodes belong to a skeleton: // --> Limitation #3: The skeleton needs to be a direct child of the root node or // the mesh node! // // Node.Transform is irrelevant for bones. This transform is just the pose of the // bone at the time of the export. This could be one of the animation frames. It // is not necessarily the bind pose (rest pose)! For example, XNA's Dude.fbx does // NOT store the skeleton in bind pose. // The correct transform is stored in Mesh.Bones[i].OffsetMatrix. However, this // information is only available for deformation bones, not for helper bones. // --> Limitation #4: The skeleton either must not contain helper bones, or it must // be guaranteed that the skeleton is exported in bind pose! // // An FBX file does not directly store all animation values. In some FBX scene it // is insufficient to simply read the animation data from the file. Instead, the // animation properties of all relevant objects in the scene need to be evaluated. // For example, some animations are the result of the current skeleton pose + the // current animation. The current skeleton pose is not imported/processed by XNA. // Assimp does not include an "animation evaluater" that automatically bakes these // animations. // --> Limitation #5: All bones included in an animation need to be key framed. // (There is no automatic evaluation.) // // In FBX it is possible to define animations curves for some transform components // (e.g. translation X and Y) and leave other components (e.g. translation Z) undefined. // Assimp does not pick the right defaults for undefined components. // --> Limitation #6: When scale, rotation, or translation is animated, all components // X, Y, Z need to be key framed. private static readonly List EmptyVectorKeys = new List(0); private static readonly List EmptyQuaternionKeys = new List(0); private readonly string _importerName; // XNA Content importer private ContentIdentity _identity; // Assimp scene private Dictionary _deformationBones; // The names of all deformation bones. private Node _rootBone; // The node that represents the root bone. private List _bones = new List(); // All nodes attached to the root bone. /// /// Default constructor. /// public OpenAssetImporter() : this("OpenAssetImporter") { } internal OpenAssetImporter(string importerName) { _importerName = importerName; } public override NodeContent Import(string filename, ContentImporterContext context) { if (filename == null) throw new ArgumentNullException("filename"); if (context == null) throw new ArgumentNullException("context"); if (CurrentPlatform.OS == OS.Linux) { string targetDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName; try { AssimpLibrary.Instance.LoadLibrary( Path.Combine(targetDir, "libassimp.so"), Path.Combine(targetDir, "libassimp.so")); } catch { } } _identity = new ContentIdentity(filename, _importerName); using (AssimpContext importer = new AssimpContext()) { // FBXPreservePivotsConfig(false) can be set to remove transformation // pivots. importer.SetConfig(new Assimp.Configs.FBXPreservePivotsConfig(false)); // Set flag to remove degenerate faces (points and lines). // This flag is very important when PostProcessSteps.FindDegenerates is used // because FindDegenerates converts degenerate triangles to points and lines! importer.SetConfig(new Assimp.Configs.RemoveDegeneratePrimitivesConfig(true)); // Set flag to not remove small triangles when PostProcessSteps.FindDegenerates is used. //importer.SetConfig(new Assimp.Configs.RemoveDegeneratePrimitivesCheckAreaConfig(false)); // Note about Assimp post-processing: // Keep post-processing to a minimum. The ModelImporter should import // the model as is. We don't want to lose any information, i.e. empty // nodes shoud not be thrown away, meshes/materials should not be merged, // etc. Custom model processors may depend on this information! Scene aiScene = importer.ImportFile(filename, //PostProcessSteps.FindDegenerates | PostProcessSteps.FindInvalidData | PostProcessSteps.FlipUVs | // Required for Direct3D PostProcessSteps.FlipWindingOrder | // Required for Direct3D PostProcessSteps.JoinIdenticalVertices | PostProcessSteps.ImproveCacheLocality | PostProcessSteps.OptimizeMeshes | PostProcessSteps.Triangulate // Unused: //PostProcessSteps.CalculateTangentSpace //PostProcessSteps.Debone | //PostProcessSteps.FindInstances | // No effect + slow? //PostProcessSteps.FixInFacingNormals | //PostProcessSteps.GenerateNormals | //PostProcessSteps.GenerateSmoothNormals | //PostProcessSteps.GenerateUVCoords | // Might be needed... find test case //PostProcessSteps.LimitBoneWeights | //PostProcessSteps.MakeLeftHanded | // Not necessary, XNA is right-handed. //PostProcessSteps.OptimizeGraph | // Will eliminate helper nodes //PostProcessSteps.PreTransformVertices | //PostProcessSteps.RemoveComponent | //PostProcessSteps.RemoveRedundantMaterials | //PostProcessSteps.SortByPrimitiveType | //PostProcessSteps.SplitByBoneCount | //PostProcessSteps.SplitLargeMeshes | //PostProcessSteps.TransformUVCoords | //PostProcessSteps.ValidateDataStructure | ); // Find _rootBone, _bones, _deformationBones. FindSkeleton(aiScene); // Create _materials. List materials = ImportMaterials(aiScene.Materials); // Create _pivots and _rootNode (incl. children). NodeContent rootNode = ImportNodes(context, aiScene, materials); // If we have a simple hierarchy and just the one mesh, // we can flatten it out so the mesh is the root node. //if ((rootNode is MeshContent) == false //&& rootNode.Transform == Matrix.Identity //&& rootNode.Children.Count == 1 //&& rootNode.Children[0] is MeshContent) //{ // Matrix absXform = rootNode.Children[0].Transform; // rootNode = rootNode.Children[0]; // rootNode.Identity = _identity; // rootNode.Transform = absXform; // rootNode.Parent = null; //} // Create skeleton (incl. animations) and add to _rootNode. ImportSkeleton(aiScene, rootNode); // If we have a simple hierarchy with no bones and just the one // mesh, we can flatten it out so the mesh is the root node. if (rootNode.Children.Count == 1 && rootNode.Children[0] is MeshContent) { Matrix absXform = rootNode.Children[0].AbsoluteTransform; rootNode = rootNode.Children[0]; rootNode.Identity = _identity; rootNode.Transform = absXform; } ImportMetadata(aiScene, rootNode); MetaTransform(rootNode); aiScene.Clear(); return rootNode; } } /// /// Converts all Assimp s to standard XNA compatible s. /// private List ImportMaterials(List aiMaterials) { List materials = new List(); foreach (Material aiMaterial in aiMaterials) { // TODO: What about AlphaTestMaterialContent, DualTextureMaterialContent, // EffectMaterialContent, EnvironmentMapMaterialContent, and SkinnedMaterialContent? BasicMaterialContent material = new BasicMaterialContent(); material.Name = aiMaterial.Name; material.Identity = _identity; if (aiMaterial.HasTextureDiffuse) material.Texture = ImportTextureContentRef(aiMaterial.TextureDiffuse); if (aiMaterial.HasTextureOpacity) material.Textures.Add("Transparency", ImportTextureContentRef(aiMaterial.TextureOpacity)); if (aiMaterial.HasTextureSpecular) material.Textures.Add("Specular", ImportTextureContentRef(aiMaterial.TextureSpecular)); if (aiMaterial.HasTextureHeight) material.Textures.Add("Bump", ImportTextureContentRef(aiMaterial.TextureHeight)); if (aiMaterial.HasColorDiffuse) material.DiffuseColor = ToXna(aiMaterial.ColorDiffuse); if (aiMaterial.HasColorEmissive) material.EmissiveColor = ToXna(aiMaterial.ColorEmissive); if (aiMaterial.HasOpacity) material.Alpha = aiMaterial.Opacity; if (aiMaterial.HasColorSpecular) material.SpecularColor = ToXna(aiMaterial.ColorSpecular); if (aiMaterial.HasShininess) material.SpecularPower = aiMaterial.Shininess; materials.Add(material); } return materials; } private ExternalReference ImportTextureContentRef(TextureSlot textureSlot, bool ext = false) { ExternalReference texture = new ExternalReference(textureSlot.FilePath, _identity); texture.OpaqueData.Add("TextureCoordinate", String.Format("TextureCoordinate{0}", textureSlot.UVIndex)); // ext is set by ImportMaterialsEx() if (ext) { texture.OpaqueData.Add("Operation", textureSlot.Operation.ToString()); texture.OpaqueData.Add("AddressU", textureSlot.WrapModeU.ToString()); texture.OpaqueData.Add("AddressV", textureSlot.WrapModeV.ToString()); texture.OpaqueData.Add("Mapping", textureSlot.Mapping.ToString()); } return texture; } /// /// Returns all the Assimp features as a . /// private List ImportMaterialsExt(List aiMaterials) { List materials = new List(); foreach (Material aiMaterial in aiMaterials) { MaterialContent material = new MaterialContent(); material.Name = aiMaterial.Name; material.Identity = _identity; TextureSlot[] textureSlots = aiMaterial.GetAllMaterialTextures(); foreach (TextureSlot textureSlot in textureSlots) { string name; // Force the XNA naming standard for diffuse textures // which allows the material to work with the stock // model processor. if (textureSlot.TextureType == TextureType.Diffuse) name = BasicMaterialContent.TextureKey; else name = textureSlot.TextureType.ToString(); // We might have multiple textures of the same type so number // them starting with 2 like in DualTextureMaterialContent. if (textureSlot.TextureIndex > 0) name += (textureSlot.TextureIndex + 1); material.Textures.Add(name, ImportTextureContentRef(textureSlot, true)); } if (aiMaterial.HasBlendMode) material.OpaqueData.Add("BlendMode", aiMaterial.BlendMode.ToString()); if (aiMaterial.HasBumpScaling) material.OpaqueData.Add("BumpScaling", aiMaterial.BumpScaling); if (aiMaterial.HasColorAmbient) material.OpaqueData.Add("AmbientColor", ToXna(aiMaterial.ColorAmbient)); if (aiMaterial.HasColorDiffuse) material.OpaqueData.Add("DiffuseColor", ToXna(aiMaterial.ColorDiffuse)); if (aiMaterial.HasColorEmissive) material.OpaqueData.Add("EmissiveColor", ToXna(aiMaterial.ColorEmissive)); if (aiMaterial.HasColorReflective) material.OpaqueData.Add("ReflectiveColor", ToXna(aiMaterial.ColorReflective)); if (aiMaterial.HasColorSpecular) material.OpaqueData.Add("SpecularColor", ToXna(aiMaterial.ColorSpecular)); if (aiMaterial.HasColorTransparent) material.OpaqueData.Add("TransparentColor", ToXna(aiMaterial.ColorTransparent)); if (aiMaterial.HasOpacity) material.OpaqueData.Add("Opacity", aiMaterial.Opacity); if (aiMaterial.HasReflectivity) material.OpaqueData.Add("Reflectivity", aiMaterial.Reflectivity); if (aiMaterial.HasShadingMode) material.OpaqueData.Add("ShadingMode", aiMaterial.ShadingMode.ToString()); if (aiMaterial.HasShininess) material.OpaqueData.Add("Shininess", aiMaterial.Shininess); if (aiMaterial.HasShininessStrength) material.OpaqueData.Add("ShininessStrength", aiMaterial.ShininessStrength); if (aiMaterial.HasTwoSided) material.OpaqueData.Add("TwoSided", aiMaterial.IsTwoSided); if (aiMaterial.HasWireFrame) material.OpaqueData.Add("WireFrame", aiMaterial.IsWireFrameEnabled); materials.Add(material); } return materials; } /// /// Converts all Assimp nodes to XNA nodes. (Nodes representing bones are excluded!) /// private NodeContent ImportNodes(ContentImporterContext context, Scene aiScene, List materials) { NodeContent rootNode = ImportNodes(context, aiScene, aiScene.RootNode, materials, null, null); return rootNode; } /// /// Converts the specified node and all descendant nodes. /// /// The node. /// The parent node. Can be . /// The node converted to XNA. /// The XNA . /// /// It may be necessary to skip certain "preserve pivot" nodes in the hierarchy. The /// converted node needs to be relative to , not node.Parent. /// private NodeContent ImportNodes(ContentImporterContext context, Scene aiScene, Node aiNode, List materials, Node aiParent, NodeContent parent) { NodeContent node = null; if (aiNode.HasMeshes) { MeshContent mesh = new MeshContent(); mesh.Name = aiNode.Name; mesh.Identity = _identity; mesh.Transform = ToXna(GetRelativeTransform(aiNode, aiParent)); foreach (int meshIndex in aiNode.MeshIndices) { Mesh aiMesh = aiScene.Meshes[meshIndex]; if (!aiMesh.HasVertices) continue; GeometryContent geometry = CreateGeometry(context, mesh, aiMesh, materials); mesh.Geometry.Add(geometry); } node = mesh; } else if (!_bones.Contains(aiNode)) // Ignore bones. { node = new NodeContent(); node.Name = aiNode.Name; node.Identity = _identity; node.Transform = ToXna(GetRelativeTransform(aiNode, aiParent)); } if (node != null) { if (parent != null) parent.Children.Add(node); // For the children, this is the new parent. aiParent = aiNode; parent = node; if (aiScene.HasAnimations) { foreach (Animation aiAnimation in aiScene.Animations) { AnimationContent animationContent = ImportAnimation(aiAnimation, node.Name); if (animationContent.Channels.Count > 0) node.Animations.Add(animationContent.Name, animationContent); } } } Debug.Assert(parent != null); foreach (Node aiChild in aiNode.Children) ImportNodes(context, aiScene, aiChild, materials, aiParent, parent); return node; } private GeometryContent CreateGeometry(ContentImporterContext context, MeshContent mesh, Mesh aiMesh, List materials) { GeometryContent geometry = new GeometryContent(); geometry.Identity = _identity; geometry.Material = materials[aiMesh.MaterialIndex]; // Vertices int baseVertex = mesh.Positions.Count; foreach (Vector3D aiVert in aiMesh.Vertices) mesh.Positions.Add(ToXna(aiVert)); geometry.Vertices.AddRange(Enumerable.Range(baseVertex, aiMesh.VertexCount)); geometry.Indices.AddRange(aiMesh.GetIndices()); if (aiMesh.HasBones) { int vertexCount = geometry.Vertices.VertexCount; BoneWeightCollection[] weights = new BoneWeightCollection[vertexCount]; for (int vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) weights[vertexIndex] = new BoneWeightCollection(); for (int boneIndex = 0; boneIndex < aiMesh.BoneCount; boneIndex++) { Bone aiBone = aiMesh.Bones[boneIndex]; for (int weightIndex = 0; weightIndex < aiBone.VertexWeights.Count; weightIndex++) { VertexWeight aiWeight = aiBone.VertexWeights[weightIndex]; if (aiWeight.VertexID <= vertexCount) weights[aiWeight.VertexID].Add(new BoneWeight(aiBone.Name, aiWeight.Weight)); } } bool missingBoneWeights = false; for (int vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) { if (weights[vertexIndex].Count == 0) { // No bone weights found for vertex. Use bone 0 as fallback. missingBoneWeights = true; weights[vertexIndex].Add(new BoneWeight(aiMesh.Bones[0].Name, 1)); } } if (missingBoneWeights) context.Logger.LogWarning(string.Empty, _identity, "No bone weights found for one or more vertices of skinned mesh '{0}'.", aiMesh.Name); geometry.Vertices.Channels.Add(VertexChannelNames.Weights(0), weights); } // Individual channels go here if (aiMesh.HasNormals) geometry.Vertices.Channels.Add(VertexChannelNames.Normal(), aiMesh.Normals.Select(ToXna)); for (int i = 0; i < aiMesh.TextureCoordinateChannelCount; i++) geometry.Vertices.Channels.Add(VertexChannelNames.TextureCoordinate(i), aiMesh.TextureCoordinateChannels[i].Select(ToXnaTexCoord)); for (int i = 0; i < aiMesh.VertexColorChannelCount; i++) geometry.Vertices.Channels.Add(VertexChannelNames.Color(i), aiMesh.VertexColorChannels[i].Select(ToXnaColor)); return geometry; } /// /// Identifies the nodes that represent bones and stores the bone offset matrices. /// private void FindSkeleton(Scene aiScene) { // See http://assimp.sourceforge.net/lib_html/data.html, section "Bones" // and notes above. // First, identify all deformation bones. _deformationBones = FindDeformationBones(aiScene); if (_deformationBones.Count == 0) return; // Walk the tree upwards to find the root bones. HashSet rootBones = new HashSet(); foreach (string boneName in _deformationBones.Keys) { Node aiRootBone = FindRootBone(aiScene, boneName); rootBones.Add(aiRootBone); } if (rootBones.Count > 1) throw new InvalidContentException("Multiple skeletons found. Please ensure that the model does not contain more that one skeleton.", _identity); _rootBone = rootBones.First(); // Add all nodes below root bone to skeleton. GetSubtree(_rootBone, _bones); } /// /// Copies the current node and all descendant nodes into a list. /// /// The current node. /// The list. private static void GetSubtree(Node aiNode, List list) { list.Add(aiNode); foreach (Node aiChild in aiNode.Children) GetSubtree(aiChild, list); } /// /// Finds the deformation bones (= bones attached to meshes). /// /// The scene. /// A dictionary of all deformation bones and their offset matrices. private static Dictionary FindDeformationBones(Scene aiScene) { Dictionary deformationBones = new Dictionary(); if (aiScene.HasMeshes) foreach (Mesh aiMesh in aiScene.Meshes) if (aiMesh.HasBones) foreach (Bone aiBone in aiMesh.Bones) if (!deformationBones.ContainsKey(aiBone.Name)) deformationBones[aiBone.Name] = aiBone; return deformationBones; } /// /// Finds the root bone of a specific bone in the skeleton. /// /// The scene. /// The name of a bone in the skeleton. /// The root bone. private static Node FindRootBone(Scene aiScene, string boneName) { Debug.Assert(!string.IsNullOrEmpty(boneName)); // Start with the specified bone. Node aiNode = aiScene.RootNode.FindNode(boneName); Debug.Assert(aiNode != null, "Node referenced by mesh not found in model."); // Walk all the way up to the scene root or the mesh node. Node rootBone = aiNode; while (aiNode != aiScene.RootNode && !aiNode.HasMeshes) { rootBone = aiNode; aiNode = aiNode.Parent; } return rootBone; } /// /// Imports the skeleton including all skeletal animations. /// private void ImportSkeleton(Scene aiScene, NodeContent rootNode) { if (_rootBone == null) return; // Convert nodes to bones and attach to root node. BoneContent rootBoneContent = ImportBones(_rootBone, _rootBone.Parent, null); rootNode.Children.Add(rootBoneContent); if (!aiScene.HasAnimations) return; // Convert animations and add to root bone. foreach (Animation aiAnimation in aiScene.Animations) { AnimationContent animationContent = ImportAnimation(aiAnimation); rootBoneContent.Animations.Add(animationContent.Name, animationContent); } } /// /// Converts the specified node and all descendant nodes to XNA bones. /// /// The node. /// The parent node. /// The node converted to XNA. /// The XNA . private BoneContent ImportBones(Node aiNode, Node aiParent, BoneContent parentBone) { Debug.Assert(aiNode != null); if (_bones.Contains(aiNode)) { // Bone BoneContent bone = new BoneContent(); bone.Name = aiNode.Name; bone.Identity = _identity; // node.Transform is irrelevant for bones. This transform is just the // pose of the node at the time of the export. This could, for example, // be one of the animation frames. It is not necessarily the bind pose // (rest pose)! // In XNA BoneContent.Transform needs to be set to the relative bind pose // matrix. The relative bind pose matrix can be derived from the OffsetMatrix // which is stored in aiMesh.Bones. // // offsetMatrix ... Offset matrix. Transforms the mesh from local space to bone space in bind pose. // bindPoseRel ... Relative bind pose matrix. Defines the transform of a bone relative to its parent bone. // bindPoseAbs ... Absolute bind pose matrix. Defines the transform of a bone relative to world space. // // The offset matrix is the inverse of the absolute bind pose matrix. // offsetMatrix = inverse(bindPoseAbs) // // bindPoseAbs = bindPoseRel * parentBindPoseAbs // => bindPoseRel = bindPoseAbs * inverse(parentBindPoseAbs) // = inverse(offsetMatrix) * parentOffsetMatrix _deformationBones.TryGetValue(aiNode.Name, out Bone aiBone); _deformationBones.TryGetValue(aiParent.Name, out Bone aiParentBone); if (aiBone != null && aiParentBone != null) { bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix)) * ToXna(aiParentBone.OffsetMatrix); } else if (aiBone != null && aiNode == _rootBone) { // The current bone is the first in the chain. // The parent offset matrix is missing. :( // --> Let's assume that parent's transform is Identity. bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix)); } else if (aiBone != null && aiParent == _rootBone) { // The current bone is the second bone in the chain. // The parent offset matrix is missing. :( // --> Derive matrix from parent bone, which is the root bone. bone.Transform = Matrix.Invert(ToXna(aiBone.OffsetMatrix)) * Matrix.Invert(parentBone.Transform); } else { // Offset matrices are not provided by Assimp. :( // Let's hope that the skeleton was exported in bind pose. // (Otherwise we are just importing garbage.) bone.Transform = ToXna(GetRelativeTransform(aiNode, aiParent)); } if (parentBone != null) parentBone.Children.Add(bone); foreach (Node aiChild in aiNode.Children) ImportBones(aiChild, aiNode, bone); return bone; } else { foreach (Node aiChild in aiNode.Children) ImportBones(aiChild, aiParent, parentBone); return null; } } /// /// Converts the specified animation to XNA. /// /// The animation. /// An optional filter. /// The animation converted to XNA. private AnimationContent ImportAnimation(Animation aiAnimation, string nodeName = null) { AnimationContent animation = new AnimationContent(); animation.Name = aiAnimation.Name.Replace("AnimStack::", string.Empty); animation.Identity = _identity; animation.Duration = TimeSpan.FromTicks((long)(aiAnimation.DurationInTicks * TimeSpan.TicksPerSecond / aiAnimation.TicksPerSecond)); // In Assimp animation channels may be split into separate channels. // Group animation channels by name. IEnumerable> channelGroups; if (nodeName != null) { channelGroups = aiAnimation.NodeAnimationChannels .Where(channel => nodeName == channel.NodeName) .GroupBy(channel => channel.NodeName); } else { channelGroups = aiAnimation.NodeAnimationChannels .GroupBy(channel => channel.NodeName); } foreach (IGrouping channelGroup in channelGroups) { string boneName = channelGroup.Key; AnimationChannel channel = new AnimationChannel(); List scaleKeys = EmptyVectorKeys; List rotationKeys = EmptyQuaternionKeys; List translationKeys = EmptyVectorKeys; foreach (NodeAnimationChannel aiChannel in channelGroup) { scaleKeys = aiChannel.ScalingKeys; rotationKeys = aiChannel.RotationKeys; translationKeys = aiChannel.PositionKeys; } int scaleIndex = -1; int rotationIndex = -1; int translationIndex = -1; // Interpolate frames int framesPerSecond = 60; double ticksPerFrame = aiAnimation.TicksPerSecond / framesPerSecond; int frames = (int)Math.Ceiling(aiAnimation.DurationInTicks / ticksPerFrame); for (int frame = 0; frame < frames; frame++) { double time = frame * ticksPerFrame; Vector3? scale = null; if (scaleKeys.Count > 0) { while ((scaleIndex+1) < scaleKeys.Count && time > scaleKeys[(scaleIndex+1)].Time) scaleIndex++; int scaleIndexA = scaleIndex; if (scaleIndexA == -1) // wrap scaleIndexA scaleIndexA = scaleKeys.Count-1; int scaleIndexB = Math.Min(scaleIndex+1, scaleKeys.Count-1); // (scaleIndex+1) % scaleKeys.Count; double scaleTimeA = scaleKeys[scaleIndexA].Time; double scaleTimeB = scaleKeys[scaleIndexB].Time; if (scaleIndexA == scaleKeys.Count-1) // wrap scaleTimeA scaleTimeA = Math.Min(0, scaleTimeA - aiAnimation.DurationInTicks); double dt = scaleTimeB - scaleTimeA; if (dt != 0) { float amount = (float)((time - scaleTimeA) / dt); Vector3 scaleA = ToXna(scaleKeys[scaleIndexA].Value); Vector3 scaleB = ToXna(scaleKeys[scaleIndexB].Value); scale = Vector3.Lerp(scaleA, scaleB, amount); } else { scale = ToXna(scaleKeys[scaleIndexB].Value); } } Quaternion? rotation = null; if (rotationKeys.Count > 0) { while ((rotationIndex+1) < rotationKeys.Count && time > rotationKeys[(rotationIndex+1)].Time) rotationIndex++; int rotationIndexA = rotationIndex; if (rotationIndexA == -1) // wrap rotationIndexA rotationIndexA = rotationKeys.Count-1; int rotationIndexB = Math.Min(rotationIndex+1, rotationKeys.Count - 1); // (rotationIndex+1) % rotationKeys.Count; double rotationTimeA = rotationKeys[rotationIndexA].Time; double rotationTimeB = rotationKeys[rotationIndexB].Time; if (rotationIndexA == rotationKeys.Count-1) // wrap rotationTimeA rotationTimeA = Math.Min(0, rotationTimeA - aiAnimation.DurationInTicks); double dt = rotationTimeB - rotationTimeA; if (dt != 0) { float amount = (float)((time - rotationTimeA) / dt); Quaternion rotationA = ToXna(rotationKeys[rotationIndexA].Value); Quaternion rotationB = ToXna(rotationKeys[rotationIndexB].Value); rotation = Quaternion.Slerp(rotationA, rotationB, amount); } else { rotation = ToXna(rotationKeys[rotationIndexB].Value); } } Vector3? translation = null; if (translationKeys.Count > 0) { while ((translationIndex+1) < translationKeys.Count && time > translationKeys[(translationIndex+1)].Time) translationIndex++; int translationIndexA = translationIndex; if (translationIndexA == -1) // wrap translationIndexA translationIndexA = translationKeys.Count-1; int translationIndexB = Math.Min(translationIndex+1, translationKeys.Count-1); // (translationIndex+1) % translationKeys.Count; double translationTimeA = translationKeys[translationIndexA].Time; double translationTimeB = translationKeys[translationIndexB].Time; if (translationIndexA == translationKeys.Count-1) // wrap translationTimeA translationTimeA = Math.Min(0, translationTimeA - aiAnimation.DurationInTicks); double dt = translationTimeB - translationTimeA; if (dt != 0) { float amount = (float)((time - translationTimeA) / dt); Vector3 translationA = ToXna(translationKeys[translationIndexA].Value); Vector3 translationB = ToXna(translationKeys[translationIndexB].Value); translation = Vector3.Lerp(translationA, translationB, amount); } else { translation = ToXna(translationKeys[translationIndexB].Value); } } // Apply transformation. Matrix transform = Matrix.Identity; if (scale.HasValue) transform *= Matrix.CreateScale(scale.Value); if (rotation.HasValue) transform *= Matrix.CreateFromQuaternion(rotation.Value); if (translation.HasValue) transform *= Matrix.CreateTranslation(translation.Value); long ticks = (long)(time * (TimeSpan.TicksPerSecond / aiAnimation.TicksPerSecond)); channel.Add(new AnimationKeyframe(TimeSpan.FromTicks(ticks), transform)); } animation.Channels[channelGroup.Key] = channel; } return animation; } /// /// Gets the transform of node relative to a specific ancestor node. /// /// The node. /// The ancestor node. Can be . /// /// The relative transform. If is the /// absolute transform of is returned. /// private static Matrix4x4 GetRelativeTransform(Node node, Node ancestorNode) { // Get transform of node relative to ancestor. Matrix4x4 transform = node.Transform; for (Node parent = node.Parent; parent != ancestorNode; parent = parent.Parent) { if (parent == null) { if (ancestorNode != null) throw new ArgumentException(String.Format("Node \"{0}\" is not an ancestor of \"{1}\".", ancestorNode.Name, node.Name)); break; } transform = transform * parent.Transform; } return transform; } private static void ImportMetadata(Scene _scene, NodeContent rootNode) { foreach (var metaDataPair in _scene.Metadata) { string key = "metadata:" + metaDataPair.Key; object value = metaDataPair.Value.Data; if (metaDataPair.Value.DataType == MetaDataType.Vector3D) value = ToXna((Vector3D)value); rootNode.OpaqueData.Add(key, value); } } private static Vector3 GetAxis(int axis) { switch (axis) { case 0: return Vector3.Right; case 1: return Vector3.Up; case 2: return Vector3.Forward; default: throw new InvalidOperationException("axis"); } } private static void MetaTransform(NodeContent rootNode) { Matrix metaTransform = Matrix.Identity; int metaCoordAxis = rootNode.OpaqueData.GetValue("metadata:CoordAxis", 0); int metaCoordAxisSign = rootNode.OpaqueData.GetValue("metadata:CoordAxisSign", 1); metaTransform.Right = GetAxis(metaCoordAxis) * metaCoordAxisSign; int metaUpAxis = rootNode.OpaqueData.GetValue("metadata:UpAxis", 1); int metaUpAxisSign = rootNode.OpaqueData.GetValue("metadata:UpAxisSign", 1); metaTransform.Up = GetAxis(metaUpAxis) * metaUpAxisSign; int metaFrontAxis = rootNode.OpaqueData.GetValue("metadata:FrontAxis", 2); int metaFrontAxisSign = rootNode.OpaqueData.GetValue("metadata:FrontAxisSign", 1); metaTransform.Forward = GetAxis(metaFrontAxis) * metaFrontAxisSign; float metaUnitScaleFactor = rootNode.OpaqueData.GetValue("metadata:UnitScaleFactor", 1f); metaTransform *= Matrix.CreateScale(metaUnitScaleFactor); MeshHelper.TransformScene(rootNode, metaTransform); } #region Conversion Helpers [DebuggerStepThrough] private static Matrix ToXna(Matrix4x4 matrix) { Matrix result; result.M11 = matrix.A1; result.M12 = matrix.B1; result.M13 = matrix.C1; result.M14 = matrix.D1; result.M21 = matrix.A2; result.M22 = matrix.B2; result.M23 = matrix.C2; result.M24 = matrix.D2; result.M31 = matrix.A3; result.M32 = matrix.B3; result.M33 = matrix.C3; result.M34 = matrix.D3; result.M41 = matrix.A4; result.M42 = matrix.B4; result.M43 = matrix.C4; result.M44 = matrix.D4; return result; } [DebuggerStepThrough] private static Vector2 ToXna(Vector2D vector) { Vector2 result; result.X = vector.X; result.Y = vector.Y; return result; } [DebuggerStepThrough] private static Vector3 ToXna(Vector3D vector) { Vector3 result; result.X = vector.X; result.Y = vector.Y; result.Z = vector.Z; return result; } [DebuggerStepThrough] private static Quaternion ToXna(Assimp.Quaternion quaternion) { Quaternion result; result.X = quaternion.X; result.Y = quaternion.Y; result.Z = quaternion.Z; result.W = quaternion.W; return result; } [DebuggerStepThrough] private static Vector3 ToXna(Color4D color) { Vector3 result; result.X = color.R; result.Y = color.G; result.Z = color.B; return result; } [DebuggerStepThrough] private static Vector2 ToXnaTexCoord(Vector3D vector) { Vector2 result; result.X = vector.X; result.Y = vector.Y; return result; } [DebuggerStepThrough] private static Color ToXnaColor(Color4D color) { return new Color(color.R, color.G, color.B, color.A); } #endregion } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/CompiledEffectContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Represents a compiled Effect. /// public class CompiledEffectContent : ContentItem { byte[] effectCode; /// /// Creates a new instance of the CompiledEffectContent class /// /// The compiled effect code. public CompiledEffectContent(byte[] effectCode) { this.effectCode = effectCode; } /// /// Retrieves the compiled byte code for this shader. /// /// The compiled bytecode. public byte[] GetEffectCode() { return effectCode; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/FontDescriptionProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2023 Nick Kastellanos using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using Microsoft.Win32; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Platform.Utilities; using SharpFont; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { [ContentProcessor(DisplayName = "Sprite Font Description - KNI")] public class FontDescriptionProcessor : ContentProcessor { private static object _fontFamilyInfoCacheLocker = new object(); private static Dictionary _fontFamilyInfoCache; List _allowedFontFileExtensions = new List { ".ttf", ".ttc", ".otf" }; SmoothingMode _smoothing = SmoothingMode.Normal; private bool _generateMipmaps = false; [DefaultValue(true)] public virtual bool PremultiplyAlpha { get; set; } [DefaultValue(typeof(TextureProcessorOutputFormat), "Compressed")] public virtual TextureProcessorOutputFormat TextureFormat { get; set; } [DefaultValue(typeof(SmoothingMode), "Normal")] public virtual SmoothingMode Smoothing { get { return _smoothing; } set { _smoothing = value; } } [DefaultValue(false)] [DisplayName("Generate Mipmaps")] public virtual bool GenerateMipmaps { get { return _generateMipmaps; } set { _generateMipmaps = value; } } public FontDescriptionProcessor() { PremultiplyAlpha = true; TextureFormat = TextureProcessorOutputFormat.Compressed; } public override SpriteFontContent Process(FontDescription input, ContentProcessorContext context) { SpriteFontContent output = new SpriteFontContent(input); FontFaceInfo faceInfo = null; faceInfo = FindLocalFontFile(input, context); if (faceInfo == null) faceInfo = FindFontFile(input, context); if (faceInfo == null) throw new PipelineException("Could not find \"" + input.FontName + "\" font."); context.Logger.LogMessage("Building Font {0}", faceInfo.FontFile); List characters = new List(input.Characters); // add default character if (input.DefaultCharacter != null) { if (!characters.Contains(input.DefaultCharacter.Value)) characters.Add(input.DefaultCharacter.Value); } characters.Sort(); FontContent font = ImportFont(input, context, faceInfo, characters); Dictionary glyphs = font.Glyphs; // Validate. if (glyphs.Count == 0) throw new PipelineException("Font does not contain any glyphs."); // Optimize glyphs. foreach (FontGlyph glyph in glyphs.Values) glyph.Crop(); // We need to know how to pack the glyphs. TextureProcessorOutputFormat format = TextureFormat; if (format == TextureProcessorOutputFormat.Compressed) format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform); bool requiresPot = GraphicsUtil.RequiresPowerOfTwo(format, GenerateMipmaps ,context.TargetPlatform, context.TargetProfile); bool requiresSquare = GraphicsUtil.RequiresSquare(format, context.TargetPlatform); BitmapContent glyphAtlas = GlyphPacker.ArrangeGlyphs(glyphs.Values, requiresPot, requiresSquare); // calculate line spacing. if (font.WinAscend != 0 || font.WinDescend != 0) { output.VerticalLineSpacing = (int)Math.Ceiling(font.WinAscend + font.WinDescend); } else { output.VerticalLineSpacing = (int)font.MetricsHeight; // The LineSpacing from XNA font importer is +1px that SharpFont. output.VerticalLineSpacing += 1; } float glyphHeightEx = -(font.MetricsDescender/2f); // The above value of glyphHeightEx match the XNA importer, // however the height of MeasureString() does not match VerticalLineSpacing. //glyphHeightEx = 0; float baseline = font.MetricsHeight + font.MetricsDescender + (font.MetricsDescender/2f) + glyphHeightEx; foreach (char ch in glyphs.Keys) { FontGlyph glyph = glyphs[ch]; output.CharacterMap.Add(ch); Rectangle texRect = glyph.Subrect; output.Glyphs.Add(texRect); int yoffset = (font.WinAscend != 0 || font.WinDescend != 0) ? (int)Math.Ceiling(font.WinAscend - glyph.FontBitmapTop) : (int)Math.Ceiling(baseline - glyph.FontBitmapTop); Rectangle cropping; cropping.X = glyph.XOffset + glyph.FontBitmapLeft; cropping.Y = glyph.YOffset + yoffset; cropping.Width = (int)glyph.XAdvance; cropping.Height = (int)Math.Ceiling(font.MetricsHeight + glyphHeightEx); output.Cropping.Add(cropping); // Set the optional character kerning. if (input.UseKerning) output.Kerning.Add(glyph.Kerning.ToVector3()); else output.Kerning.Add(new Vector3(0, glyph.Width + 1, 0)); } if (PremultiplyAlpha) TextureProcessor.ProcessPremultiplyAlpha((PixelBitmapContent)glyphAtlas); output.Texture.Faces[0].Add(glyphAtlas); if (GenerateMipmaps) output.Texture.GenerateMipmaps(false); // Perform the final texture conversion. try { TextureProcessorOutputFormat textureFormat = GraphicsUtil.GetTextureFormatForPlatform(TextureFormat, context.TargetPlatform); switch (textureFormat) { case TextureProcessorOutputFormat.NoChange: // We do nothing in this case. break; case TextureProcessorOutputFormat.Color: // If this is color just make sure the format is right and return it. output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Color16Bit: // Handle this common compression format. GraphicsUtil.CompressColor16Bit(output.Texture); break; case TextureProcessorOutputFormat.AtcCompressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressAti(input); } break; case TextureProcessorOutputFormat.DxtCompressed: { // Compress the greyscale font texture page using a specially-formulated DXT3 mode output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressFontDXT3(output.Texture, context); //GraphicsUtil.CompressDxt(output.Texture, context); } break; case TextureProcessorOutputFormat.Etc1Compressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressEtc1(input, context); } break; case TextureProcessorOutputFormat.PvrCompressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressPvrtc(input, context); } break; } } catch (EntryPointNotFoundException ex) { context.Logger.LogImportantMessage("Could not find the entry point to compress the texture. " + ex.ToString()); throw; } catch (DllNotFoundException ex) { context.Logger.LogImportantMessage("Could not compress texture. Required shared lib is missing. " + ex.ToString()); throw; } catch (Exception ex) { context.Logger.LogImportantMessage("Could not convert texture. " + ex.ToString()); throw; } return output; } private FontFaceInfo FindLocalFontFile(FontDescription input, ContentProcessorContext context) { string fontsDirectory = Path.GetDirectoryName(input.Identity.SourceFilename); string fontFile = Path.Combine(fontsDirectory, input.FontName); if (!File.Exists(fontFile)) return null; string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant(); if (!_allowedFontFileExtensions.Contains(fontFileExtension)) throw new PipelineException("Unknown file extension " + fontFileExtension); Dictionary fontFamilyInfoCache = new Dictionary(); //using (Library sharpFontLib = new Library()) // AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib); AddOpenFontFaces(fontFamilyInfoCache, fontFile); foreach(FontFamilyInfo familyInfo in fontFamilyInfoCache.Values) { foreach (FontFaceInfo faceInfo in familyInfo.Faces) { if (faceInfo.Style == input.Style) return faceInfo; } } return null; } private FontFaceInfo FindFontFile(FontDescription input, ContentProcessorContext context) { if (CurrentPlatform.OS == OS.Windows) { lock (_fontFamilyInfoCacheLocker) { if (_fontFamilyInfoCache == null) { Dictionary fontFamilyInfoCache = new Dictionary(); //using (Library sharpFontLib = new Library()) { string fontsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "Fonts"); foreach (RegistryKey key in new RegistryKey[] { Registry.LocalMachine, Registry.CurrentUser }) { RegistryKey subkey = key.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", false); string[] valueNames = subkey.GetValueNames(); Array.Sort(valueNames); foreach (string font in valueNames) { string fontFile = subkey.GetValue(font).ToString(); // The registry value might have trailing NUL characters fontFile.TrimEnd(new char[] { '\0' }); string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant(); if (!_allowedFontFileExtensions.Contains(fontFileExtension)) continue; if (!Path.IsPathRooted(fontFile)) fontFile = Path.Combine(fontsDirectory, fontFile); if (!File.Exists(fontFile)) continue; //AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib); AddOpenFontFaces(fontFamilyInfoCache, fontFile); } } } _fontFamilyInfoCache = fontFamilyInfoCache; } FontFamilyInfo familyInfo; if (_fontFamilyInfoCache.TryGetValue(input.FontName.ToUpperInvariant(), out familyInfo)) { foreach (FontFaceInfo faceInfo in familyInfo.Faces) { if (faceInfo.Style == input.Style) return faceInfo; } string errorMsg = String.Format("Font '{0}' does not have style '{1}'.", input.FontName, input.Style); throw new InvalidContentException(errorMsg); } } } else if (CurrentPlatform.OS == OS.MacOSX) { lock (_fontFamilyInfoCacheLocker) { if (_fontFamilyInfoCache == null) { Dictionary fontFamilyInfoCache = new Dictionary(); //using (Library sharpFontLib = new Library()) { List directories = new List(); directories.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Library", "Fonts")); directories.Add("/Library/Fonts"); directories.Add("/System/Library/Fonts/Supplemental"); foreach (string fontsDirectory in directories) { foreach (string fontFile in Directory.GetFiles(fontsDirectory)) { string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant(); if (!_allowedFontFileExtensions.Contains(fontFileExtension)) continue; //AddSharpFontFaces(fontFamilyInfoCache, fontFile, sharpFontLib); AddOpenFontFaces(fontFamilyInfoCache, fontFile); } } } _fontFamilyInfoCache = fontFamilyInfoCache; } FontFamilyInfo familyInfo; if (_fontFamilyInfoCache.TryGetValue(input.FontName.ToUpperInvariant(), out familyInfo)) { foreach (FontFaceInfo faceInfo in familyInfo.Faces) { if (faceInfo.Style == input.Style) return faceInfo; } string errorMsg = String.Format("Font '{0}' does not have style '{1}'.", input.FontName, input.Style); throw new InvalidContentException(errorMsg); } } } else if (CurrentPlatform.OS == OS.Linux) { string stdout, stderr; ExternalTool.Run("/bin/bash", string.Format("-c \"fc-match -f '%{{file}}:%{{family}}\\n' '{0}:style={1}'\"", input.FontName, input.Style.ToString()), out stdout, out stderr); stdout = stdout.Trim(); string[] split = stdout.Split(':'); if (split.Length >= 2) { string fontFile = split[0]; string fontName = split[1]; string fontFileExtension = Path.GetExtension(fontFile).ToLowerInvariant(); if (!_allowedFontFileExtensions.Contains(fontFileExtension)) return null; // check font family, fontconfig might return a fallback string[] families = new string[] { fontName }; if (fontName.Contains(",")) families = fontName.Split(','); // this file defines multiple family names foreach (string family in families) { if (input.FontName.Equals(family, StringComparison.InvariantCultureIgnoreCase)) { FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, 0, input.Style); return fontFaceInfo; } } } } return null; } private static void AddOpenFontFaces(Dictionary fontFamilyInfoCache, string fontFile) { using (Stream fontFileStream = new FileStream(fontFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { Typography.OpenFont.OpenFontReader reader = new Typography.OpenFont.OpenFontReader(); Typography.OpenFont.PreviewFontInfo previewFontInfo = reader.ReadPreview(fontFileStream); bool isFontCollection = previewFontInfo.IsFontCollection; if (!isFontCollection) { int faceIndex = 0; Typography.OpenFont.PreviewFontInfo fontInfo = previewFontInfo; string fontName = fontInfo.Name; string styleName = fontInfo.NameEntry.TypographyicSubfamilyName; FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(fontInfo.OS2TranslatedStyle); Typography.OpenFont.Tables.OS2Table table = fontInfo.OS2Table; ushort winAscend = (table != null) ? table.usWinAscent : (ushort)0; ushort winDescent = (table != null) ? table.usWinDescent : (ushort)0; FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, faceIndex, fontStyle, styleName, winAscend, winDescent); CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo); } else { for (int faceIndex = 0; faceIndex < previewFontInfo.MemberCount; faceIndex++) { Typography.OpenFont.PreviewFontInfo fontInfo = previewFontInfo.GetMember(faceIndex); string fontName = fontInfo.Name; string styleName = fontInfo.NameEntry.TypographyicSubfamilyName; FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(fontInfo.OS2TranslatedStyle); Typography.OpenFont.Tables.OS2Table table = fontInfo.OS2Table; ushort winAscend = (table != null) ? table.usWinAscent : (ushort)0; ushort winDescent = (table != null) ? table.usWinDescent : (ushort)0; FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, faceIndex, fontStyle, styleName, winAscend, winDescent); CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo); } } } } private static void AddSharpFontFaces(Dictionary fontFamilyInfoCache, string fontFile, Library sharpFontLib) { int faceCount = 1; for (int faceIndex = 0; faceIndex < faceCount; faceIndex++) { using (Face face = sharpFontLib.NewFace(fontFile, faceIndex)) { faceCount = face.FaceCount; string fontName = face.FamilyName; string styleName = face.StyleName; FontDescriptionStyle fontStyle = FontFaceInfo.ToFontStyle(face.StyleFlags); FontFaceInfo fontFaceInfo = new FontFaceInfo(fontFile, face.FaceIndex, fontStyle, styleName, face.FaceFlags); CachefontFaceInfo(fontFamilyInfoCache, fontName, fontFaceInfo); } } } private static void CachefontFaceInfo(Dictionary fontFamilyInfoCache, string fontName, FontFaceInfo fontFaceInfo) { FontFamilyInfo fontFamilyInfo; if (!fontFamilyInfoCache.TryGetValue(fontName.ToUpperInvariant(), out fontFamilyInfo)) { fontFamilyInfo = new FontFamilyInfo(fontName); fontFamilyInfoCache.Add(fontName.ToUpperInvariant(), fontFamilyInfo); } fontFamilyInfo.Faces.Add(fontFaceInfo); } // Uses FreeType to rasterize TrueType fonts into a series of glyph bitmaps. private FontContent ImportFont(FontDescription input, ContentProcessorContext context, FontFaceInfo faceInfo, List characters) { FontContent fontContent = new FontContent(); using (Library sharpFontLib = new Library()) using (Face face = sharpFontLib.NewFace(faceInfo.FontFile, faceInfo.FaceIndex)) { float emSizeInPixels = (96f/72f) * input.Size; int fixedSize = (int)(emSizeInPixels * 64); const uint dpi = 0; face.SetCharSize(0, fixedSize, dpi, dpi); // Rasterize each character in turn. foreach (char ch in characters) { if (fontContent.Glyphs.ContainsKey(ch)) continue; FontGlyph glyph = ImportGlyph(input, context, face, ch); fontContent.Glyphs.Add(ch, glyph); } //SharpFont.Fnt.Header header = face.GetWinFntHeader(); fontContent.WinAscend = faceInfo.WinAscend * emSizeInPixels / face.UnitsPerEM; fontContent.WinDescend = faceInfo.WinDescent * emSizeInPixels / face.UnitsPerEM; fontContent.MetricsHeight = face.Size.Metrics.Height / 64f; fontContent.MetricsAscender = face.Size.Metrics.Ascender / 64f; fontContent.MetricsDescender = face.Size.Metrics.Descender / 64f; fontContent.FaceBBoxLeft = face.BBox.Left * emSizeInPixels / face.UnitsPerEM; fontContent.FaceBBoxTop = face.BBox.Top * emSizeInPixels / face.UnitsPerEM; fontContent.FaceBBoxRight = face.BBox.Right * emSizeInPixels / face.UnitsPerEM; fontContent.FaceBBoxBottom = face.BBox.Bottom * emSizeInPixels / face.UnitsPerEM; #if DEBUG fontContent.FaceAscender = face.Ascender * emSizeInPixels / face.UnitsPerEM; fontContent.FaceDescender = face.Descender * emSizeInPixels / face.UnitsPerEM; fontContent.FaceUnderlinePosition = face.UnderlinePosition * emSizeInPixels / face.UnitsPerEM; fontContent.FaceUnderlineThickness = face.UnderlineThickness * emSizeInPixels / face.UnitsPerEM; #endif return fontContent; } } // Rasterizes a single character glyph. private FontGlyph ImportGlyph(FontDescription input, ContentProcessorContext context, Face face, char ch) { LoadFlags loadFlags = LoadFlags.Default; LoadTarget loadTarget = LoadTarget.Normal; RenderMode renderMode = RenderMode.Normal; switch (this.Smoothing) { case SmoothingMode.Disable: //loadTarget = LoadTarget.Mono; renderMode = RenderMode.Mono; break; case SmoothingMode.Normal: break; case SmoothingMode.Light: loadFlags |= LoadFlags.ForceAutohint; loadTarget = LoadTarget.Light; //renderMode = RenderMode.Light; break; case SmoothingMode.AutoHint: loadFlags |= LoadFlags.ForceAutohint; break; default: throw new InvalidOperationException("RenderMode"); } uint glyphIndex = face.GetCharIndex(ch); face.LoadGlyph(glyphIndex, loadFlags, loadTarget); face.Glyph.RenderGlyph(renderMode); // Render the character. PixelBitmapContent glyphBitmap = null; if (face.Glyph.Bitmap.Width > 0 && face.Glyph.Bitmap.Rows > 0) { switch (face.Glyph.Bitmap.PixelMode) { case PixelMode.Mono: glyphBitmap = new PixelBitmapContent(face.Glyph.Bitmap.Width, face.Glyph.Bitmap.Rows); glyphBitmap.SetPixelData(ConvertMonoToVector4(face.Glyph)); break; case PixelMode.Gray: glyphBitmap = new PixelBitmapContent(face.Glyph.Bitmap.Width, face.Glyph.Bitmap.Rows); glyphBitmap.SetPixelData(ConvertAlphaToVector4(face.Glyph)); break; default: throw new PipelineException(string.Format("Glyph PixelMode {0} is not supported.", face.Glyph.Bitmap.PixelMode)); } } else // whitespace { float gHA = face.Glyph.Metrics.HorizontalAdvance / 64f; float gVA = face.Size.Metrics.Height / 64f; gHA = (gHA > 0) ? gHA : gVA; gVA = (gVA > 0) ? gVA : gHA; glyphBitmap = new PixelBitmapContent((int)gHA, (int)gVA); } GlyphKerning kerning = new GlyphKerning(); kerning.LeftBearing = (face.Glyph.Metrics.HorizontalBearingX / 64f); kerning.AdvanceWidth = (face.Glyph.Metrics.Width / 64f); kerning.RightBearing = (face.Glyph.Metrics.HorizontalAdvance / 64f) - (kerning.LeftBearing + kerning.AdvanceWidth); kerning.LeftBearing -= face.Glyph.BitmapLeft; kerning.AdvanceWidth += face.Glyph.BitmapLeft; // Construct the output Glyph object. FontGlyph glyph = new FontGlyph(glyphBitmap); glyph.FontBitmapLeft = face.Glyph.BitmapLeft; glyph.FontBitmapTop = face.Glyph.BitmapTop; glyph.XOffset = 0; glyph.YOffset = 0; glyph.XAdvance = (face.Glyph.Metrics.HorizontalAdvance / 64f); glyph.Kerning = kerning; glyph.GlyphMetricTopBearing = (face.Glyph.Metrics.HorizontalBearingY / 64f); #if DEBUG glyph.GlyphMetricLeftBearing = (face.Glyph.Metrics.HorizontalBearingX / 64f); glyph.GlyphMetricWidth = (face.Glyph.Metrics.Width / 64f); glyph.GlyphMetricXAdvance = (face.Glyph.Metrics.HorizontalAdvance / 64f); #endif return glyph; } private static unsafe byte[] ConvertMonoToVector4(GlyphSlot glyph) { FTBitmap bitmap = glyph.Bitmap; int cols = bitmap.Width; int rows = bitmap.Rows; int stride = bitmap.Pitch; // SharpFont 2.5.3 doesn't return the entire bitmapdata when Pitch > 1. //System.Diagnostics.Debug.Assert(bitmap.BufferData.Length == rows * bitmap.Pitch); byte* pGlyphData = (byte*)bitmap.Buffer.ToPointer(); byte[] data = new byte[cols * rows * sizeof(Vector4)]; fixed (byte* pdata = data) { Vector4* pvdata = (Vector4*)pdata; for (int y = 0; y < rows; y++) { for (int x = 0; x < cols; x++) { byte b = pGlyphData[(x >> 3) + y * stride]; b = (byte)(b & (0x80 >> (x & 0x07))); float a = (b == (byte)0) ? 0f : 1f; int idx = x + y * cols; pvdata[idx].X = 1f; pvdata[idx].Y = 1f; pvdata[idx].Z = 1f; pvdata[idx].W = a; } } } return data; } private static unsafe byte[] ConvertAlphaToVector4(GlyphSlot glyph) { FTBitmap bitmap = glyph.Bitmap; int cols = bitmap.Width; int rows = bitmap.Rows; byte* pGlyphData = (byte*)bitmap.Buffer.ToPointer(); byte[] data = new byte[cols * rows * sizeof(Vector4)]; fixed (byte* pdata = data) { Vector4* pvdata = (Vector4*)pdata; int count = (cols * rows); for (int idx = 0; idx < count; idx++) { byte a = pGlyphData[idx]; pvdata[idx].X = 1f; pvdata[idx].Y = 1f; pvdata[idx].Z = 1f; pvdata[idx].W = a / (float)byte.MaxValue; } } return data; } public enum SmoothingMode { [Description("Normal hinting")] Normal, [Description("Light hinting")] Light, [Description("Auto-hinter")] AutoHint, [Description("Bitmap with 1bit alpha")] Disable, } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/FontTextureProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2023 Nick Kastellanos using System; using System.Collections.Generic; using System.ComponentModel; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { [ContentProcessorAttribute(DisplayName = "Font Texture - KNI")] public class FontTextureProcessor : ContentProcessor { private Vector4 transparentPixel = Color.Magenta.ToVector4(); private bool _generateMipmaps = false; [DefaultValue(' ')] public virtual char FirstCharacter { get; set; } [DefaultValue(true)] public virtual bool PremultiplyAlpha { get; set; } public virtual TextureProcessorOutputFormat TextureFormat { get; set; } [DefaultValue(false)] [DisplayName("Generate Mipmaps")] public virtual bool GenerateMipmaps { get { return _generateMipmaps; } set { _generateMipmaps = value; } } public FontTextureProcessor() { FirstCharacter = ' '; PremultiplyAlpha = true; } public override SpriteFontContent Process(Texture2DContent input, ContentProcessorContext context) { SpriteFontContent output = new SpriteFontContent(); BitmapContent fontBitmap = input.Faces[0][0]; SurfaceFormat faceFormat; fontBitmap.TryGetFormat(out faceFormat); if (faceFormat != SurfaceFormat.Vector4) { PixelBitmapContent colorFace = new PixelBitmapContent(fontBitmap.Width, fontBitmap.Height); BitmapContent.Copy(fontBitmap, colorFace); fontBitmap = colorFace; } // extract the glyphs from the texture and map them to a list of characters. // we need to call GtCharacterForIndex for each glyph in the Texture to // get the char for that glyph, by default we start at ' ' then '!' and then ASCII // after that. Dictionary glyphs = ImportFont(input, context, (PixelBitmapContent)fontBitmap); // Optimize glyphs. foreach (FontGlyph glyph in glyphs.Values) glyph.Crop(); // calculate line spacing. foreach (FontGlyph glyph in glyphs.Values) output.VerticalLineSpacing = Math.Max(output.VerticalLineSpacing, glyph.Subrect.Height); TextureProcessorOutputFormat format = TextureFormat; // resolve Compressed format. if (format == TextureProcessorOutputFormat.Compressed) format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform); if (format == TextureProcessorOutputFormat.NoChange) { switch(faceFormat) { case SurfaceFormat.Color: format = TextureProcessorOutputFormat.Color; break; // TODO: Get output format from input faceFormat default: throw new NotImplementedException(); } } // We need to know how to pack the glyphs. bool requiresPot = GraphicsUtil.RequiresPowerOfTwo(format, GenerateMipmaps ,context.TargetPlatform, context.TargetProfile); bool requiresSquare = GraphicsUtil.RequiresSquare(format, context.TargetPlatform); BitmapContent glyphAtlas = GlyphPacker.ArrangeGlyphs(glyphs.Values, requiresPot, requiresSquare); foreach (char ch in glyphs.Keys) { FontGlyph glyph = glyphs[ch]; output.CharacterMap.Add(ch); Rectangle texRect = glyph.Subrect; output.Glyphs.Add(texRect); Rectangle cropping; cropping.X = (int)glyph.XOffset; cropping.Y = (int)glyph.YOffset; cropping.Width = glyph.Width; cropping.Height = glyph.Height; output.Cropping.Add(cropping); output.Kerning.Add(glyph.Kerning.ToVector3()); } if (PremultiplyAlpha) TextureProcessor.ProcessPremultiplyAlpha((PixelBitmapContent)glyphAtlas); output.Texture.Faces[0].Add(glyphAtlas); if (GenerateMipmaps) output.Texture.GenerateMipmaps(false); // Perform the final texture conversion. try { format = GraphicsUtil.GetTextureFormatForPlatform(format, context.TargetPlatform); switch (format) { case TextureProcessorOutputFormat.Color: // If this is color just make sure the format is right and return it. output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Color16Bit: // Handle this common compression format. GraphicsUtil.CompressColor16Bit(output.Texture); break; case TextureProcessorOutputFormat.AtcCompressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressAti(output.Texture); } break; case TextureProcessorOutputFormat.DxtCompressed: { // Compress the greyscale font texture page using a specially-formulated DXT3 mode output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressFontDXT3(output.Texture, context); //GraphicsUtil.CompressDxt(output.Texture, context); } break; case TextureProcessorOutputFormat.Etc1Compressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressEtc1(output.Texture, context); } break; case TextureProcessorOutputFormat.PvrCompressed: { // If sharp alpha is required (for a font texture page), use 16-bit color instead of PVR output.Texture.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressColor16Bit(output.Texture); //GraphicsUtil.CompressPvrtc(output.Texture, context); } break; default: throw new NotImplementedException("The texture output format " + format + " is not implemented for font textures."); } } catch (EntryPointNotFoundException ex) { context.Logger.LogImportantMessage("Could not find the entry point to compress the texture. " + ex.ToString()); throw ex; } catch (DllNotFoundException ex) { context.Logger.LogImportantMessage("Could not compress texture. Required shared lib is missing. " + ex.ToString()); throw ex; } catch (Exception ex) { context.Logger.LogImportantMessage("Could not convert texture. " + ex.ToString()); throw ex; } return output; } private Dictionary ImportFont(Texture2DContent input, ContentProcessorContext context, PixelBitmapContent bitmap) { Dictionary glyphs = new Dictionary(); List regions = new List(); for (int y = 0; y < bitmap.Height; y++) { for (int x = 0; x < bitmap.Width; x++) { if (bitmap.GetPixel(x, y) != transparentPixel) { // if we don't have a region that has this pixel already Rectangle rect = regions.Find(r => { return r.Contains(x, y); }); if (rect == Rectangle.Empty) { // we have found the top, left of a image. // we now need to scan for the 'bounds' int top = y; int bottom = y; int left = x; int right = x; while (bitmap.GetPixel(right, bottom) != transparentPixel) right++; while (bitmap.GetPixel(left, bottom) != transparentPixel) bottom++; // we got a glyph :) regions.Add(new Rectangle(left, top, right - left, bottom - top)); x = right; } else { x += rect.Width; } } } } for (int i = 0; i < regions.Count; i++) { char ch = (char)(FirstCharacter + i); Rectangle rect = regions[i]; PixelBitmapContent glyphBitmap = new PixelBitmapContent(rect.Width, rect.Height); BitmapContent.Copy(bitmap, rect, glyphBitmap, new Rectangle(0, 0, rect.Width, rect.Height)); GlyphKerning kerning = new GlyphKerning(); kerning.AdvanceWidth = glyphBitmap.Width; FontGlyph glyph = new FontGlyph(glyphBitmap); glyph.Kerning = kerning; glyphs.Add(ch, glyph); //newbitmap.Save(""+ch+".png", System.Drawing.Imaging.ImageFormat.Png); } return glyphs; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/LocalizedFontProcessor.cs ================================================ #region File Description //----------------------------------------------------------------------------- // LocalizedFontProcessor.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion using System.ComponentModel; using System.IO; using System.Xml; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Custom processor extends the SpriteFont build process to scan over the resource /// strings used by the game, automatically adding whatever characters it finds in /// them to the font. This makes sure the game will always have all the characters /// it needs, no matter what languages it is localized into, while still producing /// an efficient font that does not waste space on unnecessary characters. This is /// especially useful for languages such as Japanese and Korean, which have /// potentially thousands of different characters, although games typically only /// use a small fraction of these. Building only the characters we need is far more /// efficient than if we tried to include the entire CJK character region. /// [ContentProcessor] public class LocalizedFontProcessor : ContentProcessor { [DefaultValue(true)] public virtual bool PremultiplyAlpha { get; set; } [DefaultValue(typeof(TextureProcessorOutputFormat), "Compressed")] public virtual TextureProcessorOutputFormat TextureFormat { get; set; } public LocalizedFontProcessor() { PremultiplyAlpha = true; TextureFormat = TextureProcessorOutputFormat.Compressed; } /// /// Converts a font description into SpriteFont format. /// public override SpriteFontContent Process(LocalizedFontDescription input, ContentProcessorContext context) { // Scan each .resx file in turn. foreach (string resourceFile in input.ResourceFiles) { string absolutePath = Path.GetFullPath(resourceFile.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar)); // Make sure the .resx file really does exist. if (!File.Exists(absolutePath)) throw new InvalidContentException("Can't find " + absolutePath); // Load the .resx data. XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(absolutePath); // Scan each string from the .resx file. foreach (XmlNode xmlNode in xmlDocument.SelectNodes("root/data/value")) { string resourceString = xmlNode.InnerText; // Scan each character of the string. foreach (char usedCharacter in resourceString) { if (!input.Characters.Contains(usedCharacter)) input.Characters.Add(usedCharacter); } } // Mark that this font should be rebuilt if the resource file changes. context.AddDependency(absolutePath); } OpaqueDataDictionary parameters = new OpaqueDataDictionary(); parameters.Add("PremultiplyAlpha", PremultiplyAlpha); parameters.Add("TextureFormat", TextureFormat); // After adding the necessary characters, we can use the built in // FontDescriptionProcessor to do the hard work of building the font for us. return context.Convert(input, "FontDescriptionProcessor", parameters); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/MaterialProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using System; using System.Collections.Generic; using System.ComponentModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Provides methods and properties for maintaining a collection of named texture references. /// /// In addition to texture references, opaque data values are stored in the OpaqueData property of the base class. [ContentProcessor(DisplayName = "Material - KNI")] public class MaterialProcessor : ContentProcessor { Color colorKeyColor; bool colorKeyEnabled; MaterialProcessorDefaultEffect defaultEffect; bool generateMipmaps; bool premultiplyTextureAlpha; bool resizeTexturesToPowerOfTwo; TextureProcessorOutputFormat textureFormat; /// /// Gets or sets the color value to replace with transparent black. /// /// Color value of the material to replace with transparent black. [DefaultValue(typeof(Color), "255, 0, 255, 255")] [DisplayName("Color Key Color")] [Description("If the texture is color-keyed, pixels of this color are replaced with transparent black.")] public virtual Color ColorKeyColor { get { return colorKeyColor; } set { colorKeyColor = value; } } /// /// Specifies whether color keying of a texture is enabled. /// /// true if color keying is enabled; false otherwise. [DefaultValue(true)] [DisplayName("Color Key Enabled")] [Description("If enabled, the source texture is color-keyed. Pixels matching the value of \"Color Key Color\" are replaced with transparent black.")] public virtual bool ColorKeyEnabled { get { return colorKeyEnabled; } set { colorKeyEnabled = value; } } /// /// The default effect type for this instance of MaterialProcessor. /// /// The default effect type. /// When MaterialProcessor is instantiated, DefaultEffect is set to default to BasicEffect Class. [DefaultValue(typeof(MaterialProcessorDefaultEffect), "BasicEffect")] [DisplayName("Default Effect")] [Description("The default effect type.")] public virtual MaterialProcessorDefaultEffect DefaultEffect { get { return defaultEffect; } set { defaultEffect = value; } } /// /// Specifies if a full chain of mipmaps are generated from the source material. Existing mipmaps of the material are not replaced. /// /// true if mipmap generation is enabled; false otherwise. [DefaultValue(true)] [DisplayName("Generate Mipmaps")] [Description("If enabled, a full chain of mipmaps are generated from the source material. Existing mipmaps of the material are not replaced.")] public virtual bool GenerateMipmaps { get { return generateMipmaps; } set { generateMipmaps = value; } } /// /// Specifies whether alpha premultiply of textures is enabled. /// /// true if alpha premultiply is enabled; false otherwise. [DefaultValue(true)] [DisplayName("Premultiply Alpha")] [Description("If enabled, the texture is converted to premultiplied alpha format.")] public virtual bool PremultiplyTextureAlpha { get { return premultiplyTextureAlpha; } set { premultiplyTextureAlpha = value; } } /// /// Specifies whether resizing of a material is enabled. Typically used to maximize compatability with a graphics card because many graphics cards do not support a material size that is not a power of two. If ResizeTexturesToPowerOfTwo is enabled, the material is resized to the next largest power of two. /// /// true if resizing is enabled; false otherwise. [DefaultValue(false)] [DisplayName("Resize to Power of Two")] [Description("If enabled, the texture is resized to the next largest power of two, maximizing compatibility. Many graphics cards do not support texture sizes that are not a power of two.")] public virtual bool ResizeTexturesToPowerOfTwo { get { return resizeTexturesToPowerOfTwo; } set { resizeTexturesToPowerOfTwo = value; } } /// /// Specifies the texture format of output materials. Materials can either be left unchanged from the source asset, converted to a corresponding Color, or compressed using the appropriate DxtCompressed format. /// /// The texture format of the output. [DefaultValue(typeof(TextureProcessorOutputFormat), "Compressed")] [DisplayName("Texture Format")] [Description("Specifies the SurfaceFormat type of processed textures. Textures can either remain unchanged from the source asset, converted to the Color format, or DXT compressed.")] public virtual TextureProcessorOutputFormat TextureFormat { get { return textureFormat; } set { textureFormat = value; } } /// /// Initializes a new instance of the MaterialProcessor class. /// public MaterialProcessor() { colorKeyColor = new Color(255, 0, 255, 255); colorKeyEnabled = true; defaultEffect = MaterialProcessorDefaultEffect.BasicEffect; generateMipmaps = true; premultiplyTextureAlpha = true; resizeTexturesToPowerOfTwo = false; textureFormat = TextureProcessorOutputFormat.Compressed; } /// /// Builds effect content. /// /// An external reference to the effect content. /// Context for the specified processor. /// A platform-specific compiled binary effect. /// If the input to process is of type EffectMaterialContent, this function will be called to request that the EffectContent be built. The EffectProcessor is used to process the EffectContent. Subclasses of MaterialProcessor can override this function to modify the parameters used to build EffectContent. For example, a different version of this function could request a different processor for the EffectContent. protected virtual ExternalReference BuildEffect(ExternalReference effect, ContentProcessorContext context) { return context.BuildAsset(effect, "EffectProcessor"); } /// /// Builds texture content. /// /// The name of the texture. This should correspond to the key used to store the texture in Textures. /// The asset to build. This should be a member of Textures. /// Context for the specified processor. /// The built texture content. /// textureName can be used to determine which processor to use. For example, if a texture is being used as a normal map, the user may not want to use the ModelTextureProcessor on it, which compresses textures. protected virtual ExternalReference BuildTexture(string textureName, ExternalReference texture, ContentProcessorContext context) { OpaqueDataDictionary parameters = new OpaqueDataDictionary(); parameters.Add("ColorKeyColor", ColorKeyColor); parameters.Add("ColorKeyEnabled", ColorKeyEnabled); parameters.Add("GenerateMipmaps", GenerateMipmaps); parameters.Add("PremultiplyAlpha", PremultiplyTextureAlpha); parameters.Add("ResizeToPowerOfTwo", ResizeTexturesToPowerOfTwo); parameters.Add("TextureFormat", TextureFormat); return context.BuildAsset(texture, "TextureProcessor", parameters, "TextureImporter", null); } /// /// Builds the texture and effect content for the material. /// /// The material content to build. /// Context for the specified processor. /// The built material. /// If the MaterialContent is of type EffectMaterialContent, a build is requested for Effect, and validation will be performed on the OpaqueData to ensure that all parameters are valid input to SetValue or SetValueTranspose. If the MaterialContent is a BasicMaterialContent, no validation will be performed on OpaqueData. Process requests builds for all textures in Textures, unless the MaterialContent is of type BasicMaterialContent, in which case a build will only be requested for DiffuseColor. The textures in Textures will be ignored. public override MaterialContent Process(MaterialContent input, ContentProcessorContext context) { // Apply specified default effect. if (input is BasicMaterialContent && DefaultEffect != MaterialProcessorDefaultEffect.BasicEffect) { MaterialContent newMaterial = CreateDefaultMaterial(DefaultEffect); // Preserve material properties. newMaterial.Name = input.Name; newMaterial.Identity = input.Identity; foreach (KeyValuePair item in input.OpaqueData) newMaterial.OpaqueData.Add(item.Key, item.Value); foreach (var item in input.Textures) newMaterial.Textures.Add(item.Key, item.Value); input = newMaterial; } // Docs say that if it's a basic effect, only build the diffuse texture. BasicMaterialContent basic = input as BasicMaterialContent; if (basic != null) { ExternalReference texture; if (basic.Textures.TryGetValue(BasicMaterialContent.TextureKey, out texture)) basic.Texture = BuildTexture(texture.Filename, texture, context); return basic; } // Build custom effects EffectMaterialContent effectMaterial = input as EffectMaterialContent; if (effectMaterial != null && effectMaterial.CompiledEffect == null) { if (effectMaterial.Effect == null) throw new PipelineException("EffectMaterialContent.Effect or EffectMaterialContent.CompiledEffect should be set for materials with a custom effect."); effectMaterial.CompiledEffect = BuildEffect(effectMaterial.Effect, context); // TODO: Docs say to validate OpaqueData for SetValue/SetValueTranspose // Does that mean to match up with effect param names?? } // Build all textures List keys = new List(input.Textures.Keys); foreach (string key in keys) { ExternalReference texture = input.Textures[key]; ExternalReference builtTexture = BuildTexture(texture.Filename, texture, context); input.Textures[key] = builtTexture; } return input; } /// /// Helper method which returns the material for a default effect. /// /// A material. public static MaterialContent CreateDefaultMaterial(MaterialProcessorDefaultEffect effect) { switch (effect) { case MaterialProcessorDefaultEffect.BasicEffect: return new BasicMaterialContent(); case MaterialProcessorDefaultEffect.SkinnedEffect: return new SkinnedMaterialContent(); case MaterialProcessorDefaultEffect.EnvironmentMapEffect: return new EnvironmentMapMaterialContent(); case MaterialProcessorDefaultEffect.DualTextureEffect: return new DualTextureMaterialContent(); case MaterialProcessorDefaultEffect.AlphaTestEffect: return new AlphaTestMaterialContent(); default: throw new ArgumentOutOfRangeException(); } } /// /// Helper method which returns the default effect for a material. /// /// The default effect. public static MaterialProcessorDefaultEffect GetDefaultEffect(MaterialContent content) { if (content is AlphaTestMaterialContent) return MaterialProcessorDefaultEffect.AlphaTestEffect; if (content is BasicMaterialContent) return MaterialProcessorDefaultEffect.BasicEffect; if (content is DualTextureMaterialContent) return MaterialProcessorDefaultEffect.DualTextureEffect; if (content is EnvironmentMapMaterialContent) return MaterialProcessorDefaultEffect.EnvironmentMapEffect; if (content is SkinnedMaterialContent) return MaterialProcessorDefaultEffect.SkinnedEffect; throw new ArgumentOutOfRangeException("Unknown material content type!"); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/MaterialProcessorDefaultEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Specifies the default effect type. /// public enum MaterialProcessorDefaultEffect { /// /// A BasicEffect Class effect. /// BasicEffect = 0, /// /// A SkinnedEffect Class effect. /// SkinnedEffect = 1, /// /// An EnvironmentMapEffect Class effect. /// EnvironmentMapEffect = 2, /// /// A DualTextureEffect Class effect. /// DualTextureEffect = 3, /// /// An AlphaTestEffect Class effect. /// AlphaTestEffect = 4, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelBoneContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelBoneContent { private ModelBoneContentCollection _children; private int _index; private string _name; private ModelBoneContent _parent; private Matrix _transform; internal ModelBoneContent() { } internal ModelBoneContent(string name, int index, Matrix transform, ModelBoneContent parent) { _name = name; _index = index; _transform = transform; _parent = parent; } public ModelBoneContentCollection Children { get { return _children; } internal set { _children = value; } } public int Index { get { return _index; } } public string Name { get { return _name; } } public ModelBoneContent Parent { get { return _parent; } } public Matrix Transform { get { return _transform; } set { _transform = value; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelBoneContentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelBoneContentCollection : ReadOnlyCollection { internal ModelBoneContentCollection(IList list) : base(list) { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelContent { private ModelBoneContentCollection _bones; private ModelMeshContentCollection _meshes; private ModelBoneContent _root; internal ModelContent() { } internal ModelContent(ModelBoneContent root, IList bones, IList meshes) { _root = root; _bones = new ModelBoneContentCollection(bones); _meshes = new ModelMeshContentCollection(meshes); } public ModelBoneContentCollection Bones { get { return _bones; } } public ModelMeshContentCollection Meshes { get { return _meshes; } } public ModelBoneContent Root { get { return _root; } } public object Tag { get; set; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelMeshContent { private BoundingSphere _boundingSphere; private ModelMeshPartContentCollection _meshParts; private string _name; private ModelBoneContent _parentBone; private MeshContent _sourceMesh; internal ModelMeshContent() { } internal ModelMeshContent(string name, MeshContent sourceMesh, ModelBoneContent parentBone, BoundingSphere boundingSphere, IList meshParts) { _name = name; _sourceMesh = sourceMesh; _parentBone = parentBone; _boundingSphere = boundingSphere; _meshParts = new ModelMeshPartContentCollection(meshParts); } public BoundingSphere BoundingSphere { get { return _boundingSphere; } } public ModelMeshPartContentCollection MeshParts { get { return _meshParts; } } public string Name { get { return _name; } } public ModelBoneContent ParentBone { get { return _parentBone; } } public MeshContent SourceMesh { get { return _sourceMesh; } } public object Tag { get; set; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshContentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelMeshContentCollection : ReadOnlyCollection { internal ModelMeshContentCollection(IList list) : base(list) { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshPartContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelMeshPartContent { private IndexCollection _indexBuffer; private MaterialContent _material; private int _numVertices; private int _primitiveCount; private int _startIndex; private VertexBufferContent _vertexBuffer; private int _vertexOffset; internal ModelMeshPartContent() { } internal ModelMeshPartContent(VertexBufferContent vertexBuffer, IndexCollection indices, int vertexOffset, int numVertices, int startIndex, int primitiveCount) { _vertexBuffer = vertexBuffer; _indexBuffer = indices; _vertexOffset = vertexOffset; _numVertices = numVertices; _startIndex = startIndex; _primitiveCount = primitiveCount; } public IndexCollection IndexBuffer { get { return _indexBuffer; } } public MaterialContent Material { get { return _material; } set { _material = value; } } public int NumVertices { get { return _numVertices; } } public int PrimitiveCount { get { return _primitiveCount; } } public int StartIndex { get { return _startIndex; } } public object Tag { get; set; } public VertexBufferContent VertexBuffer { get { return _vertexBuffer; } } public int VertexOffset { get { return _vertexOffset; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelMeshPartContentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public sealed class ModelMeshPartContentCollection : ReadOnlyCollection { internal ModelMeshPartContentCollection(IList list) : base(list) { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/ModelProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { [ContentProcessor(DisplayName = "Model - KNI")] public class ModelProcessor : ContentProcessor { private ContentIdentity _identity; #region Fields for default values private bool _colorKeyEnabled = true; private bool _generateMipmaps = true; private bool _premultiplyTextureAlpha = true; private bool _premultiplyVertexColors = true; private float _scale = 1.0f; private TextureProcessorOutputFormat _textureFormat = TextureProcessorOutputFormat.Compressed; #endregion public ModelProcessor() { ColorKeyColor = new Color(255, 0, 255, 255); } #region Properties [DefaultValue(typeof(Color), "255,0,255,255")] public virtual Color ColorKeyColor { get; set; } [DefaultValue(true)] public virtual bool ColorKeyEnabled { get { return _colorKeyEnabled; } set { _colorKeyEnabled = value; } } public virtual MaterialProcessorDefaultEffect DefaultEffect { get; set; } [DefaultValue(true)] public virtual bool GenerateMipmaps { get { return _generateMipmaps; } set { _generateMipmaps = value; } } public virtual bool GenerateNormals { get; set; } public virtual bool GenerateTangentFrames { get; set; } [DefaultValue(true)] public virtual bool PremultiplyTextureAlpha { get { return _premultiplyTextureAlpha; } set { _premultiplyTextureAlpha = value; } } [DefaultValue(true)] public virtual bool PremultiplyVertexColors { get { return _premultiplyVertexColors; } set { _premultiplyVertexColors = value; } } public virtual bool ResizeTexturesToPowerOfTwo { get; set; } public virtual float RotationX { get; set; } public virtual float RotationY { get; set; } public virtual float RotationZ { get; set; } [DefaultValue(1.0f)] public virtual float Scale { get { return _scale; } set { _scale = value; } } public virtual bool SwapWindingOrder { get; set; } [DefaultValue(typeof(TextureProcessorOutputFormat), "Compressed")] public virtual TextureProcessorOutputFormat TextureFormat { get { return _textureFormat; } set { _textureFormat = value; } } #endregion public override ModelContent Process(NodeContent input, ContentProcessorContext context) { _identity = input.Identity; // Perform the processor transforms. if (RotationX != 0.0f || RotationY != 0.0f || RotationZ != 0.0f || Scale != 1.0f) { Matrix rotX = Matrix.CreateRotationX(MathHelper.ToRadians(RotationX)); Matrix rotY = Matrix.CreateRotationY(MathHelper.ToRadians(RotationY)); Matrix rotZ = Matrix.CreateRotationZ(MathHelper.ToRadians(RotationZ)); Matrix scale = Matrix.CreateScale(Scale); MeshHelper.TransformScene(input, rotZ * rotX * rotY * scale); } // Gather all the nodes in tree traversal order. List nodes = input.AsEnumerable().SelectDeep(n => n.Children).ToList(); List meshes = nodes.FindAll(n => n is MeshContent).Cast().ToList(); List geometries = meshes.SelectMany(m => m.Geometry).ToList(); List distinctMaterials = geometries.Select(g => g.Material).Distinct().ToList(); // Loop through all distinct materials, passing them through the conversion method // only once, and then processing all geometries using that material. foreach (MaterialContent inputMaterial in distinctMaterials) { List geomsWithMaterial = geometries.Where(g => g.Material == inputMaterial).ToList(); MaterialContent material = ConvertMaterial(inputMaterial, context); ProcessGeometryUsingMaterial(material, geomsWithMaterial, context); } List boneList = new List(); List meshList = new List(); ModelBoneContent rootNode = ProcessNode(input, null, boneList, meshList, context); return new ModelContent(rootNode, boneList, meshList); } private ModelBoneContent ProcessNode(NodeContent node, ModelBoneContent parent, List boneList, List meshList, ContentProcessorContext context) { ModelBoneContent result = new ModelBoneContent(node.Name, boneList.Count, node.Transform, parent); boneList.Add(result); if (node is MeshContent) meshList.Add(ProcessMesh(node as MeshContent, result, context)); List children = new List(); foreach (NodeContent child in node.Children) children.Add(ProcessNode(child, result, boneList, meshList, context)); result.Children = new ModelBoneContentCollection(children); return result; } private ModelMeshContent ProcessMesh(MeshContent mesh, ModelBoneContent parent, ContentProcessorContext context) { List parts = new List(); VertexBufferContent vertexBuffer = null; IndexCollection indexBuffer = new IndexCollection(); if (GenerateNormals) { context.Logger.LogMessage("Generating normals."); MeshHelper.CalculateNormals(mesh, false); } if (GenerateTangentFrames) { context.Logger.LogMessage("Generating tangent frames."); foreach (GeometryContent geometry in mesh.Geometry) { if (!geometry.Vertices.Channels.Contains(VertexChannelNames.Normal(0))) { MeshHelper.CalculateNormals(geometry, true); } if(!geometry.Vertices.Channels.Contains(VertexChannelNames.Tangent(0)) || !geometry.Vertices.Channels.Contains(VertexChannelNames.Binormal(0))) { MeshHelper.CalculateTangentFrames(geometry, VertexChannelNames.TextureCoordinate(0), VertexChannelNames.Tangent(0), VertexChannelNames.Binormal(0)); } } } int startVertex = 0; foreach (GeometryContent geometry in mesh.Geometry) { VertexContent vertices = geometry.Vertices; int vertexCount = vertices.VertexCount; ModelMeshPartContent partContent; if (vertexCount == 0) { partContent = new ModelMeshPartContent(); } else { if (vertexBuffer == null) { vertexBuffer = geometry.Vertices.CreateVertexBuffer(); } else { VertexDeclarationContent vertexDeclaration = new VertexDeclarationContent(); geometry.Vertices.SetupVertexDeclaration(vertexDeclaration); if (vertexBuffer.VertexDeclaration.VertexStride != vertexDeclaration.VertexStride || vertexBuffer.VertexDeclaration.VertexElements.Count != vertexDeclaration.VertexElements.Count) throw new InvalidOperationException("Invalid geometry"); int stride = vertexDeclaration.VertexStride.Value; int bufferOffset0 = vertexBuffer.VertexData.Length; vertexBuffer.Write(bufferOffset0, stride, geometry.Vertices.Positions); Collection vertexElements = vertexBuffer.VertexDeclaration.VertexElements; for (int ve = 0; ve < vertexElements.Count; ve++) { VertexElement vertexElement = vertexElements[ve]; // find channel string channelName = vertexElement.VertexElementUsage.ToString() + vertexElement.UsageIndex.ToString(); if (channelName == "Position0") continue; VertexChannel channel = geometry.Vertices.Channels.First(ch => ch.Name == channelName); int channelOffset = vertexElement.Offset; Type channelType = channel.ElementType; vertexBuffer.Write(bufferOffset0 + channelOffset, stride, channelType, channel); } } int startIndex = indexBuffer.Count; indexBuffer.AddRange(geometry.Indices); partContent = new ModelMeshPartContent(vertexBuffer, indexBuffer, startVertex, vertexCount, startIndex, geometry.Indices.Count / 3); startVertex += vertexCount; } partContent.Material = geometry.Material; parts.Add(partContent); } BoundingSphere bounds = new BoundingSphere(); if (mesh.Positions.Count > 0) bounds = BoundingSphere.CreateFromPoints(mesh.Positions); return new ModelMeshContent(mesh.Name, mesh, parent, bounds, parts); } protected virtual MaterialContent ConvertMaterial(MaterialContent material, ContentProcessorContext context) { OpaqueDataDictionary parameters = new OpaqueDataDictionary(); parameters.Add("ColorKeyColor", ColorKeyColor); parameters.Add("ColorKeyEnabled", ColorKeyEnabled); parameters.Add("GenerateMipmaps", GenerateMipmaps); parameters.Add("PremultiplyTextureAlpha", PremultiplyTextureAlpha); parameters.Add("ResizeTexturesToPowerOfTwo", ResizeTexturesToPowerOfTwo); parameters.Add("TextureFormat", TextureFormat); parameters.Add("DefaultEffect", DefaultEffect); return context.Convert(material, "MaterialProcessor", parameters); } protected virtual void ProcessGeometryUsingMaterial(MaterialContent material, IEnumerable geometryCollection, ContentProcessorContext context) { // If we don't get a material then assign a default one. if (material == null) material = MaterialProcessor.CreateDefaultMaterial(DefaultEffect); // Test requirements from the assigned material. int textureChannels; bool vertexWeights = false; if (material is DualTextureMaterialContent) { textureChannels = 2; } else if (material is SkinnedMaterialContent) { textureChannels = 1; vertexWeights = true; } else if (material is EnvironmentMapMaterialContent) { textureChannels = 1; } else if (material is AlphaTestMaterialContent) { textureChannels = 1; } else { // Just check for a "Texture" which should cover custom Effects // and BasicEffect which can have an optional texture. textureChannels = material.Textures.ContainsKey("Texture") ? 1 : 0; } // By default we must set the vertex color property // to match XNA behavior. material.OpaqueData["VertexColorEnabled"] = false; // If we run into a geometry that requires vertex // color we need a seperate material for it. MaterialContent colorMaterial = material.Clone(); colorMaterial.OpaqueData["VertexColorEnabled"] = true; foreach (GeometryContent geometry in geometryCollection) { // Process the geometry. for (int i = 0; i < geometry.Vertices.Channels.Count; i++) ProcessVertexChannel(geometry, i, context); // Verify we have the right number of texture coords. for (int i = 0; i < textureChannels; i++) { if (!geometry.Vertices.Channels.Contains(VertexChannelNames.TextureCoordinate(i))) throw new InvalidContentException( String.Format("The mesh \"{0}\", using {1}, contains geometry that is missing texture coordinates for channel {2}.", geometry.Parent.Name, MaterialProcessor.GetDefaultEffect(material), i), _identity); } // Do we need to enable vertex color? if (geometry.Vertices.Channels.Contains(VertexChannelNames.Color(0))) geometry.Material = colorMaterial; else geometry.Material = material; // Do we need vertex weights? if (vertexWeights) { string weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0); if (!geometry.Vertices.Channels.Contains(weightsName)) throw new InvalidContentException( String.Format("The skinned mesh \"{0}\" contains geometry without any vertex weights.", geometry.Parent.Name), _identity); } } } protected virtual void ProcessVertexChannel(GeometryContent geometry, int vertexChannelIndex, ContentProcessorContext context) { VertexChannel vertexChannel = geometry.Vertices.Channels[vertexChannelIndex]; // TODO: According to docs, channels with VertexElementUsage.Color -> Color // Channels[VertexChannelNames.Weights] -> { Byte4 boneIndices, Color boneWeights } if (vertexChannel.Name.StartsWith(VertexChannelNames.Weights())) ProcessWeightsChannel(geometry, vertexChannelIndex, _identity); } private static void ProcessWeightsChannel(GeometryContent geometry, int vertexChannelIndex, ContentIdentity identity) { // NOTE: Portions of this code is from the XNA CPU Skinning // sample under Ms-PL, (c) Microsoft Corporation. // create a map of Name->Index of the bones BoneContent skeleton = MeshHelper.FindSkeleton(geometry.Parent); if (skeleton == null) { throw new InvalidContentException( "Skeleton not found. Meshes that contain a Weights vertex channel cannot be processed without access to the skeleton data.", identity); } Dictionary boneIndices = new Dictionary(); IList flattenedBones = MeshHelper.FlattenSkeleton(skeleton); for (int i = 0; i < flattenedBones.Count; i++) boneIndices.Add(flattenedBones[i].Name, i); VertexChannel vertexChannel = geometry.Vertices.Channels[vertexChannelIndex]; VertexChannel inputWeights = vertexChannel as VertexChannel; if (inputWeights == null) { throw new InvalidContentException( String.Format( "Vertex channel \"{0}\" is the wrong type. It has element type {1}. Type {2} is expected.", vertexChannel.Name, vertexChannel.ElementType.FullName, "Microsoft.Xna.Framework.Content.Pipeline.Graphics.BoneWeightCollection"), identity); } Byte4[] outputIndices = new Byte4[inputWeights.Count]; Vector4[] outputWeights = new Vector4[inputWeights.Count]; for (int i = 0; i < inputWeights.Count; i++) ConvertWeights(inputWeights[i], boneIndices, outputIndices, outputWeights, i); // create our new channel names int usageIndex = VertexChannelNames.DecodeUsageIndex(inputWeights.Name); string indicesName = VertexChannelNames.EncodeName(VertexElementUsage.BlendIndices, usageIndex); string weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, usageIndex); // add in the index and weight channels geometry.Vertices.Channels.Insert(vertexChannelIndex + 1, indicesName, outputIndices); geometry.Vertices.Channels.Insert(vertexChannelIndex + 2, weightsName, outputWeights); // remove the original weights channel geometry.Vertices.Channels.RemoveAt(vertexChannelIndex); } // From the XNA CPU Skinning Sample under Ms-PL, (c) Microsoft Corporation private static void ConvertWeights(BoneWeightCollection weights, Dictionary boneIndices, Byte4[] outIndices, Vector4[] outWeights, int vertexIndex) { // we only handle 4 weights per bone const int maxWeights = 4; // create some temp arrays to hold our values int[] tempIndices = new int[maxWeights]; float[] tempWeights = new float[maxWeights]; // cull out any extra bones weights.NormalizeWeights(maxWeights); // get our indices and weights for (int i = 0; i < weights.Count; i++) { BoneWeight weight = weights[i]; if (!boneIndices.ContainsKey(weight.BoneName)) { string errorMessage = String.Format("Bone '{0}' was not found in the skeleton! Skeleton bones are: '{1}'.", weight.BoneName, string.Join("', '", boneIndices.Keys)); throw new Exception(errorMessage); } tempIndices[i] = boneIndices[weight.BoneName]; tempWeights[i] = weight.Weight; } // zero out any remaining spaces for (int i = weights.Count; i < maxWeights; i++) { tempIndices[i] = 0; tempWeights[i] = 0; } // output the values outIndices[vertexIndex] = new Byte4(tempIndices[0], tempIndices[1], tempIndices[2], tempIndices[3]); outWeights[vertexIndex] = new Vector4(tempWeights[0], tempWeights[1], tempWeights[2], tempWeights[3]); } } internal static class ModelEnumerableExtensions { /// /// Returns each element of a tree structure in hierarchical order. /// /// The enumerated type. /// The enumeration to traverse. /// A function which returns the children of the element. /// An IEnumerable whose elements are in tree structure heriarchical order. public static IEnumerable SelectDeep(this IEnumerable source, Func> selector) { Stack stack = new Stack(source.Reverse()); while (stack.Count > 0) { // Return the next item on the stack. T item = stack.Pop(); yield return item; // Get the children from this item. IEnumerable children = selector(item); // If we have no children then skip it. if (children == null) continue; // We're using a stack, so we need to push the // children on in reverse to get the correct order. foreach (T child in children.Reverse()) stack.Push(child); } } /// /// Returns an enumerable from a single element. /// /// /// /// public static IEnumerable AsEnumerable(this T item) { yield return item; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/SpriteFontContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { public class SpriteFontContent { internal Texture2DContent Texture = new Texture2DContent(); internal List Glyphs = new List(); internal List Cropping = new List(); internal List CharacterMap = new List(); internal List Kerning = new List(); internal int VerticalLineSpacing; internal float HorizontalSpacing; internal Nullable DefaultCharacter; internal SpriteFontContent() { } internal SpriteFontContent(FontDescription desc) { FontName = desc.FontName; Style = desc.Style; FontSize = desc.Size; CharacterMap = new List(desc.Characters.Count); VerticalLineSpacing = (int)desc.Spacing; // Will be replaced in the pipeline. HorizontalSpacing = desc.Spacing; DefaultCharacter = desc.DefaultCharacter; } internal string FontName = string.Empty; FontDescriptionStyle Style = FontDescriptionStyle.Regular; internal float FontSize; } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/TextureProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { [ContentProcessor(DisplayName="Texture - KNI")] public class TextureProcessor : ContentProcessor { public TextureProcessor() { ColorKeyColor = new Color(255, 0, 255, 255); ColorKeyEnabled = true; PremultiplyAlpha = true; } [DefaultValueAttribute(typeof(Color), "255,0,255,255")] public virtual Color ColorKeyColor { get; set; } [DefaultValueAttribute(true)] public virtual bool ColorKeyEnabled { get; set; } public virtual bool GenerateMipmaps { get; set; } [DefaultValueAttribute(true)] public virtual bool PremultiplyAlpha { get; set; } public virtual bool ResizeToPowerOfTwo { get; set; } public virtual bool MakeSquare { get; set; } public virtual TextureProcessorOutputFormat TextureFormat { get; set; } public override TextureContent Process(TextureContent input, ContentProcessorContext context) { SurfaceFormat format; if (input.Faces[0][0].TryGetFormat(out format)) { // If it is already a compressed format, we cannot do anything else so just return it if (format.IsCompressedFormat()) return input; } if (ColorKeyEnabled || ResizeToPowerOfTwo || MakeSquare || PremultiplyAlpha || GenerateMipmaps) { // Convert to floating point format for modifications. Keep the original format for conversion back later on if required. var originalType = input.Faces[0][0].GetType(); try { input.ConvertBitmapType(typeof(PixelBitmapContent)); } catch (Exception ex) { context.Logger.LogImportantMessage("Could not convert input texture for processing. " + ex.ToString()); throw ex; } if (GenerateMipmaps) input.GenerateMipmaps(false); for (int f = 0; f < input.Faces.Count; ++f) { var face = input.Faces[f]; for (int m = 0; m < face.Count; ++m) { var bmp = (PixelBitmapContent)face[m]; if (ColorKeyEnabled) { bmp.ReplaceColor(ColorKeyColor.ToVector4(), Vector4.Zero); } if (ResizeToPowerOfTwo) { if (!GraphicsUtil.IsPowerOfTwo(bmp.Width) || !GraphicsUtil.IsPowerOfTwo(bmp.Height) || (MakeSquare && bmp.Height != bmp.Width)) { var newWidth = GraphicsUtil.GetNextPowerOfTwo(bmp.Width); var newHeight = GraphicsUtil.GetNextPowerOfTwo(bmp.Height); if (MakeSquare) newWidth = newHeight = Math.Max(newWidth, newHeight); var resized = new PixelBitmapContent(newWidth, newHeight); BitmapContent.Copy(bmp, resized); bmp = resized; } } else if (MakeSquare && bmp.Height != bmp.Width) { var newSize = Math.Max(bmp.Width, bmp.Height); var resized = new PixelBitmapContent(newSize, newSize); BitmapContent.Copy(bmp, resized); } if (PremultiplyAlpha) ProcessPremultiplyAlpha(bmp); face[m] = bmp; } } // If no change to the surface format was desired, change it back now before it early outs if (TextureFormat == TextureProcessorOutputFormat.NoChange) input.ConvertBitmapType(originalType); } try { TextureProcessorOutputFormat textureFormat = GraphicsUtil.GetTextureFormatForPlatform(TextureFormat, context.TargetPlatform); switch (textureFormat) { case TextureProcessorOutputFormat.NoChange: // We do nothing in this case. break; case TextureProcessorOutputFormat.Color: // If this is color just make sure the format is right and return it. input.ConvertBitmapType(typeof(PixelBitmapContent)); break; case TextureProcessorOutputFormat.Color16Bit: // Handle this common compression format. GraphicsUtil.CompressColor16Bit(input); break; case TextureProcessorOutputFormat.AtcCompressed: { input.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressAti(input); } break; case TextureProcessorOutputFormat.DxtCompressed: { input.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressDxt(input, context); } break; case TextureProcessorOutputFormat.Etc1Compressed: { input.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressEtc1(input, context); } break; case TextureProcessorOutputFormat.PvrCompressed: { input.ConvertBitmapType(typeof(PixelBitmapContent)); // Make sure we're in a floating point format GraphicsUtil.CompressPvrtc(input, context); } break; } } catch (EntryPointNotFoundException ex) { context.Logger.LogImportantMessage("Could not find the entry point to compress the texture. " + ex.ToString()); throw; } catch (DllNotFoundException ex) { context.Logger.LogImportantMessage("Could not compress texture. Required shared lib is missing. " + ex.ToString()); throw; } catch (Exception ex) { context.Logger.LogImportantMessage("Could not convert texture. " + ex.ToString()); throw; } return input; } internal static unsafe void ProcessPremultiplyAlpha(PixelBitmapContent bmp) { for (int y = 0; y < bmp.Height; y++) { Vector4[] row = bmp.GetRow(y); fixed (Vector4* pdata = row) { int count = bmp.Width; for (int x = 0; x < count; x++) { var a = pdata[x].W; pdata[x].X *= a; pdata[x].Y *= a; pdata[x].Z *= a; } } } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/TextureProcessorOutputFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Specifies the target output (of type SurfaceFormat) of the texture processor. Used by TextureProcessor.TextureFormat. /// public enum TextureProcessorOutputFormat { /// /// The SurfaceFormat value, of the input TextureContent object, is converted to Color by the processor. Typically used for 2D graphics and overlays. /// Color, /// /// The SurfaceFormat value, of the input TextureContent object, is converted to an appropriate DXT compression by the processor. If the input texture /// contains fractional alpha values, it is converted to DXT5 format (8 bits per texel); otherwise it is converted to DXT1 (4 bits per texel). This /// conversion reduces the resource's size on the graphics card. Typically used for 3D textures such as 3D model textures. /// DxtCompressed, /// /// The SurfaceFormat value, of the input TextureContent object, is not changed by the processor. Typically used for textures processed by an external tool. /// NoChange, /// /// The SurfaceFormat value, of the input TextureContent object, is converted to an appropriate compressed format for the target platform. /// This can include PVRTC for iOS, DXT for desktop, Windows 8 and Windows Phone 8, and ETC1 or BGRA4444 for Android. /// Compressed, /// /// The pixel depth of the input texture is reduced to BGR565 for opaque textures, otherwise it uses BGRA4444. /// Color16Bit, /// /// The input texture is compressed using ETC1 texture compression. Used on Android platforms. /// Etc1Compressed, /// /// The input texture is compressed using PVR texture compression. Used on iOS and some Android platforms. /// PvrCompressed, /// /// The input texture is compressed using ATI texture compression. Used on some Android platforms. /// AtcCompressed, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/VertexBufferContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Microsoft.Xna.Framework.Content.Pipeline.Graphics.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Provides methods and properties for managing a design-time vertex buffer that holds packed vertex data. /// /// This type directly corresponds to the runtime VertexBuffer class, and when a VertexBufferContent object is passed to the content compiler, the vertex data deserializes directly into a VertexBuffer at runtime. VertexBufferContent objects are not directly created by importers. The preferred method is to store vertex data in the more flexible VertexContent class. public class VertexBufferContent : ContentItem { VertexDeclarationContent _vertexDeclaration; readonly MemoryStream _memoryStream; /// /// Gets the array containing the raw bytes of the packed vertex data. Use this method to get and set the contents of the vertex buffer. /// /// Raw data of the packed vertex data. public byte[] VertexData { get { byte[] result = _memoryStream.ToArray(); return result; } } /// /// Gets and sets the associated VertexDeclarationContent object. /// /// The associated VertexDeclarationContent object. public VertexDeclarationContent VertexDeclaration { get { return _vertexDeclaration; } set { _vertexDeclaration = value; } } /// /// Initializes a new instance of VertexBufferContent. /// public VertexBufferContent() { _memoryStream = new MemoryStream(); _vertexDeclaration = new VertexDeclarationContent(); } /// /// Initializes a new instance of VertexBufferContent of the specified size. /// /// The size of the vertex buffer content, in bytes. public VertexBufferContent(int size) : base() { _memoryStream = new MemoryStream(size); _vertexDeclaration = new VertexDeclarationContent(); } /// /// Gets the size of the specified type, in bytes. /// /// The type. /// The size of the specified type, in bytes. /// Call this method to compute offset parameters for the Write method. If the specified /// data type cannot be packed into a vertex buffer—for example, if type is not a valid value type—a /// NotSupportedException is thrown. /// type is not a valid value type public static int SizeOf(Type type) { if (!type.IsValueType || type.IsAutoLayout) throw new NotSupportedException("The vertex type must be a struct and have a fixed layout"); return Marshal.SizeOf(type); } /// /// Gets the size of the specified type, in bytes. /// /// The type. /// The size of the specified type, in bytes. /// Call this method to compute offset parameters for the Write method. If the specified /// data type cannot be packed into a vertex buffer—for example, if type is not a valid value type—a /// NotSupportedException is thrown. /// type is not a valid value type public static int SizeOf() where T : struct { Type type = typeof(T); if (type.IsAutoLayout) throw new NotSupportedException("The vertex type must have a fixed layout"); return ReflectionHelpers.SizeOf(); } /// /// Writes additional data into the vertex buffer. Writing begins at the specified byte offset, and each value is spaced according to the specified stride value (in bytes). /// /// Type being written. /// Offset to begin writing at. /// Stride of the data being written, in bytes. /// Enumerated collection of data. /// The specified data type cannot be packed into a vertex buffer. public void Write(int offset, int stride, IEnumerable data) { Write(offset, stride, typeof(T), data); } /// /// Writes additional data into the vertex buffer. Writing begins at the specified byte offset, and each value is spaced according to the specified stride value (in bytes). /// /// Offset at which to begin writing. /// Stride of the data being written, in bytes. /// The type of data to be written. /// The data to write. /// The specified data type cannot be packed into a vertex buffer. public void Write(int offset, int stride, Type dataType, IEnumerable data) { int size = SizeOf(dataType); byte[] bytes = new byte[size]; IntPtr ptr = Marshal.AllocHGlobal(size); // NOTE: This is not a very fast way to serialize // an unknown struct type, but it is reliable. // // Still the chances vertex buffer serialization // being the bottleneck of the content pipeline // are almost non-existent. _memoryStream.Seek(offset, SeekOrigin.Begin); foreach (object item in data) { long next = _memoryStream.Position + stride; Marshal.StructureToPtr(item, ptr, false); Marshal.Copy(ptr, bytes, 0, size); _memoryStream.Write(bytes, 0, size); _memoryStream.Seek(next, SeekOrigin.Begin); } Marshal.FreeHGlobal(ptr); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Processors/VertexDeclarationContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Provides methods and properties for maintaining the vertex declaration data of a VertexContent. /// public class VertexDeclarationContent : ContentItem { Collection vertexElements; int? vertexStride; /// /// Gets the VertexElement object of the vertex declaration. /// /// The VertexElement object of the vertex declaration. public Collection VertexElements { get { return vertexElements; } } /// /// The number of bytes from one vertex to the next. /// /// The stride (in bytes). public int? VertexStride { get { return vertexStride; } set { vertexStride = value; } } /// /// Initializes a new instance of VertexDeclarationContent. /// public VertexDeclarationContent() { vertexElements = new Collection(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Properties/launchSettings.json ================================================ { "profiles": { "Font Debug ContentFont": { "commandName": "Executable", "executablePath": "X:\\kniEngine\\kni\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Debug\\net8.0-windows\\MGCB.exe", "commandLineArgs": "/@:Content.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\\\Tests\\Assets\\Projects\\Content\\" } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/AlphaTestEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class AlphaTestEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, AlphaTestMaterialContent value) { output.WriteExternalReference(value.Textures.ContainsKey(AlphaTestMaterialContent.TextureKey) ? value.Texture : null); output.Write((int)(value.AlphaFunction.HasValue ? value.AlphaFunction.Value : CompareFunction.Greater)); output.Write((int)(value.ReferenceAlpha.HasValue ? value.ReferenceAlpha.Value : 0)); output.Write(value.DiffuseColor.GetValueOrDefault()); output.Write(value.Alpha.GetValueOrDefault()); output.Write(value.VertexColorEnabled.GetValueOrDefault()); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/BasicEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class BasicEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, BasicMaterialContent value) { output.WriteExternalReference(value.Textures.ContainsKey(BasicMaterialContent.TextureKey) ? value.Texture : null); output.Write(value.DiffuseColor ?? new Vector3(1, 1, 1)); output.Write(value.EmissiveColor ?? new Vector3(0, 0, 0)); output.Write(value.SpecularColor ?? new Vector3(1, 1, 1)); output.Write(value.SpecularPower ?? 16); output.Write(value.Alpha ?? 1); output.Write(value.VertexColorEnabled ?? false); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ColorWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using TOutput = Microsoft.Xna.Framework.Color; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Writes the Color value to the output. /// [ContentTypeWriter] class ColorWriter : ContentTypeWriterBase { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, TOutput value) { output.Write(value.R); output.Write(value.G); output.Write(value.B); output.Write(value.A); } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeNamespace = "Microsoft.Xna.Framework"; // Color namespace is not 'Microsoft.Xna.Framework.Graphics' string typeName = TargetType.Name; string typeAssembly = TargetType.Assembly.FullName; if (typeAssembly.StartsWith("Xna.Framework.Graphics,")) typeAssembly = "Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeNamespace + "." + typeName + ", " + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/CompiledEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class CompiledEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, CompiledEffectContent value) { byte[] bytecode = value.GetEffectCode(); output.Write(bytecode.Length); output.Write(bytecode); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".EffectReader"; string readerAssembly = ", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ContentTypeWriterBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { /// /// Base class for the built-in content type writers where the content type is the same as the runtime type. /// /// The content type being written. internal abstract class ContentTypeWriterBase : ContentTypeWriter { /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; // Change "Writer" in this class name to "Reader" and use the runtime type namespace and assembly string readerName = this.GetType().Name.Replace("Writer", "Reader"); // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + "." + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeNamespace = "Microsoft.Xna.Framework.Graphics"; string typeName = TargetType.Name; string typeAssembly = TargetType.Assembly.FullName; if (typeAssembly.StartsWith("Xna.Framework.Graphics,")) typeAssembly = "Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeNamespace + "." + typeName + ", " + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/DualTextureEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class DualTextureEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, DualTextureMaterialContent value) { output.WriteExternalReference(value.Textures.ContainsKey(DualTextureMaterialContent.TextureKey) ? value.Texture : null); output.WriteExternalReference(value.Textures.ContainsKey(DualTextureMaterialContent.Texture2Key) ? value.Texture2 : null); output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One); output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f); output.Write(value.VertexColorEnabled.HasValue ? value.VertexColorEnabled.Value : false); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/EffectMaterialWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class EffectMaterialWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, EffectMaterialContent value) { output.WriteExternalReference(value.CompiledEffect); Dictionary dict = new Dictionary(); foreach (KeyValuePair> item in value.Textures) { dict.Add(item.Key, item.Value); } foreach (KeyValuePair item in value.OpaqueData) { if (item.Key != EffectMaterialContent.EffectKey && item.Key != EffectMaterialContent.CompiledEffectKey) dict.Add(item.Key, item.Value); } output.WriteObject(dict); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/EnvironmentMapEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class EnvironmentMapEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, EnvironmentMapMaterialContent value) { output.WriteExternalReference(value.Textures.ContainsKey(EnvironmentMapMaterialContent.TextureKey) ? value.Texture : null); output.WriteExternalReference(value.Textures.ContainsKey(EnvironmentMapMaterialContent.EnvironmentMapKey) ? value.EnvironmentMap : null); output.Write(value.EnvironmentMapAmount.HasValue ? value.EnvironmentMapAmount.Value : 1.0f); output.Write(value.EnvironmentMapSpecular.HasValue ? value.EnvironmentMapSpecular.Value : Vector3.Zero); output.Write(value.FresnelFactor.HasValue ? value.FresnelFactor.Value : 1.0f); output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One); output.Write(value.EmissiveColor.HasValue ? value.EmissiveColor.Value : Vector3.Zero); output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/IndexBufferWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class IndexBufferWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, IndexCollection value) { // Check if the buffer and can be saved as Int16. bool shortIndices = true; foreach(int index in value) { if(index > ushort.MaxValue) { shortIndices = false; break; } } output.Write(shortIndices); int indicesSize = shortIndices ? 2 : 4; int byteCount = value.Count * indicesSize; output.Write(byteCount); if (shortIndices) { foreach (int item in value) output.Write((ushort)item); } else { foreach (int item in value) output.Write(item); } } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".IndexBufferReader"; string readerAssembly = ", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { Type type = typeof(ContentReader); string runtimeType = type.Namespace + ".IndexBufferReader, " + type.AssemblyQualifiedName; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/ModelWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class ModelWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, ModelContent value) { WriteBones(output, value.Bones); output.Write((uint)value.Meshes.Count); foreach (ModelMeshContent mesh in value.Meshes) { output.WriteObject(mesh.Name); WriteBoneReference(output, mesh.ParentBone, value.Bones); WriteBoundingSphere(output, mesh.BoundingSphere); output.WriteObject(mesh.Tag); output.Write((uint)mesh.MeshParts.Count); foreach (ModelMeshPartContent part in mesh.MeshParts) { output.Write((uint)part.VertexOffset); output.Write((uint)part.NumVertices); output.Write((uint)part.StartIndex); output.Write((uint)part.PrimitiveCount); output.WriteObject(part.Tag); output.WriteSharedResource(part.VertexBuffer); output.WriteSharedResource(part.IndexBuffer); output.WriteSharedResource(part.Material); } } WriteBoneReference(output, value.Root, value.Bones); output.WriteObject(value.Tag); } private void WriteBones(ContentWriter output, ModelBoneContentCollection bones) { output.Write((uint)bones.Count); // Bone properties foreach (ModelBoneContent bone in bones) { output.WriteObject(bone.Name); output.Write(bone.Transform); } // Hierarchy foreach (ModelBoneContent bone in bones) { WriteBoneReference(output, bone.Parent, bones); output.Write((uint)bone.Children.Count); foreach (ModelBoneContent child in bone.Children) WriteBoneReference(output, child, bones); } } private void WriteBoneReference(ContentWriter output, ModelBoneContent bone, ModelBoneContentCollection bones) { int boneCount = (bones != null) ? bones.Count : 0; int boneId = (bone != null) ? bone.Index + 1 : 0; if (boneCount < 255) output.Write((byte)boneId); else output.Write((uint)boneId); } private static void WriteBoundingSphere(ContentWriter output, BoundingSphere value) { //output.WriteRawObject(boundingSphere); output.Write(value.Center); output.Write(value.Radius); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/SkinnedEffectWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class SkinnedEffectWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, SkinnedMaterialContent value) { output.WriteExternalReference(value.Textures.ContainsKey(SkinnedMaterialContent.TextureKey) ? value.Texture : null); output.Write(value.WeightsPerVertex.GetValueOrDefault(4)); output.Write(value.DiffuseColor.HasValue ? value.DiffuseColor.Value : Vector3.One); output.Write(value.EmissiveColor.HasValue ? value.EmissiveColor.Value : Vector3.Zero); output.Write(value.SpecularColor.HasValue ? value.SpecularColor.Value : Vector3.Zero); output.Write(value.SpecularPower.HasValue ? value.SpecularPower.Value : 0); output.Write(value.Alpha.HasValue ? value.Alpha.Value : 1.0f); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/SpriteFontWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] public class SpriteFontWriter : ContentTypeWriter { protected override void Write(ContentWriter output, SpriteFontContent value) { output.WriteObject(value.Texture); output.WriteObject(value.Glyphs); output.WriteObject(value.Cropping); output.WriteObject(value.CharacterMap); output.Write(value.VerticalLineSpacing); output.Write(value.HorizontalSpacing); output.WriteObject(value.Kerning); var hasDefChar = value.DefaultCharacter.HasValue; output.Write(hasDefChar); if (hasDefChar) output.Write(value.DefaultCharacter.Value); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".SpriteFontReader"; string readerAssembly = ", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { // Base the reader type string from a known public class in the same namespace in the same assembly Type type = typeof(ContentReader); string runtimeType = type.Namespace + ".SpriteFontReader, " + type.AssemblyQualifiedName; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/Texture2DWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class Texture2DWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, Texture2DContent value) { MipmapChain mipmaps = value.Faces[0]; // Mipmap chain. BitmapContent level0 = mipmaps[0]; // Most detailed mipmap level. SurfaceFormat format; if (!level0.TryGetFormat(out format)) throw new Exception("Couldn't get Format for TextureContent."); output.Write((int)format); output.Write(level0.Width); output.Write(level0.Height); output.Write(mipmaps.Count); // Number of mipmap levels. foreach (BitmapContent level in mipmaps) { byte[] pixelData = level.GetPixelData(); output.Write(pixelData.Length); output.Write(pixelData); } } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".Texture2DReader"; string readerAssembly = ", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/TextureCubeWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] internal class TextureCubeWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, TextureCubeContent value) { var mipmaps0 = value.Faces[0]; // Mipmap chain of face 0 (+X). var level0 = mipmaps0[0]; // Most detailed mipmap level of face 0. SurfaceFormat format; if (!level0.TryGetFormat(out format)) throw new Exception("Couldn't get format for TextureCubeContent."); output.Write((int)format); // Surface format output.Write(level0.Width); // Cube map size output.Write(mipmaps0.Count); // Number of mipmap levels // The number of faces in TextureCubeContent is guaranteed to be 6. foreach (var mipmaps in value.Faces) { foreach (var level in mipmaps) { byte[] pixelData = level.GetPixelData(); output.Write(pixelData.Length); output.Write(pixelData); } } } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".TextureCubeReader"; string readerAssembly = ", Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/TextureWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] internal class TextureWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, TextureContent value) { // Do nothing. // The TextureWriter is not used to write anything, but it is used by // the ExternalReferenceWriter when an ExternalReference // is written! (See ExternalReferenceWriter implementation.) } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/VertexBufferWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class VertexBufferWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, VertexBufferContent value) { output.WriteRawObject(value.VertexDeclaration); uint vertexCount = (uint)(value.VertexData.Length / value.VertexDeclaration.VertexStride); int rem = (value.VertexData.Length % value.VertexDeclaration.VertexStride.Value); if (rem != 0) throw new PipelineException("Invalid VertexData.Length"); output.Write((uint)vertexCount); output.Write(value.VertexData); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Serialization/Compiler/VertexDeclarationWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class VertexDeclarationWriter : ContentTypeWriterBase { protected override void Write(ContentWriter output, VertexDeclarationContent value) { // If fpr whatever reason there isn't a vertex stride defined, it's going to // cause problems after reading it in, so better to fail early here. output.Write((uint)value.VertexStride.Value); output.Write((uint)value.VertexElements.Count); foreach (VertexElement element in value.VertexElements) { output.Write((uint)element.Offset); output.Write((int)element.VertexElementFormat); output.Write((int)element.VertexElementUsage); output.Write((uint)element.UsageIndex); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/TextureImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; using FreeImageAPI; using StbImageSharp; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading texture files for use in the Content Pipeline. /// [ContentImporter( ".bmp", // Bitmap Image File ".cut", // Dr Halo CUT ".dds", // Direct Draw Surface ".g3", // Raw Fax G3 ".hdr", // RGBE ".gif", // Graphcis Interchange Format ".ico", // Microsoft Windows Icon ".iff", // Interchange File Format ".jbg", ".jbig", // JBIG ".jng", ".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi", // JPEG ".jp2", ".j2k", ".jpf", ".jpx", ".jpm", ".mj2", // JPEG 2000 ".jxr", ".hdp", ".wdp", // JPEG XR ".koa", ".gg", // Koala ".pcd", // Kodak PhotoCD ".mng", // Multiple-Image Network Graphics ".pcx", //Personal Computer Exchange ".pbm", ".pgm", ".ppm", ".pnm", // Netpbm ".pfm", // Printer Font Metrics ".png", //Portable Network Graphics ".pict", ".pct", ".pic", // PICT ".psd", // Photoshop ".3fr", ".ari", ".arw", ".bay", ".crw", ".cr2", ".cap", ".dcs", // RAW ".dcr", ".dng", ".drf", ".eip", ".erf", ".fff", ".iiq", ".k25", // RAW ".kdc", ".mdc", ".mef", ".mos", ".mrw", ".nef", ".nrw", ".obm", // RAW ".orf", ".pef", ".ptx", ".pxn", ".r3d", ".raf", ".raw", ".rwl", // RAW ".rw2", ".rwz", ".sr2", ".srf", ".srw", ".x3f", // RAW ".ras", ".sun", // Sun RAS ".sgi", ".rgba", ".bw", ".int", ".inta", // Silicon Graphics Image ".tga", // Truevision TGA/TARGA ".tiff", ".tif", // Tagged Image File Format ".wbmp", // Wireless Application Protocol Bitmap Format ".webp", // WebP ".xbm", // X BitMap ".xpm", // X PixMap DisplayName = "Texture Importer - KNI", DefaultProcessor = "TextureProcessor")] public class TextureImporter : ContentImporter { /// /// Initializes a new instance of TextureImporter. /// public TextureImporter( ) { } /// /// Called by the XNA Framework when importing a texture file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override TextureContent Import(string filename, ContentImporterContext context) { var ext = Path.GetExtension(filename).ToLower(); // Special case for loading some formats switch (ext) { case ".dds": return DdsLoader.Import(filename, context); case ".bmp": return LoadImage(filename); } var output = new Texture2DContent { Identity = new ContentIdentity(filename) }; var format = FreeImage.GetFileType(filename, 0); var fBitmap = FreeImage.Load(format, filename, 0); //if freeimage can not recognize the image type if(format == FREE_IMAGE_FORMAT.FIF_UNKNOWN) throw new ContentLoadException("TextureImporter failed to load '" + filename + "'"); //if freeimage can recognize the file headers but can't read its contents else if(fBitmap == IntPtr.Zero) throw new InvalidContentException("TextureImporter couldn't understand the contents of '" + filename + "'", output.Identity); BitmapContent face = null; var height = (int) FreeImage.GetHeight(fBitmap); var width = (int) FreeImage.GetWidth(fBitmap); //uint bpp = FreeImage.GetBPP(fBitmap); var imageType = FreeImage.GetImageType(fBitmap); // Swizzle channels and expand to include an alpha channel fBitmap = ConvertAndSwapChannels(fBitmap, imageType); // The bits per pixel and image type may have changed uint bpp = FreeImage.GetBPP(fBitmap); imageType = FreeImage.GetImageType(fBitmap); var pitch = (int) FreeImage.GetPitch(fBitmap); var redMask = FreeImage.GetRedMask(fBitmap); var greenMask = FreeImage.GetGreenMask(fBitmap); var blueMask = FreeImage.GetBlueMask(fBitmap); // Create the byte array for the data byte[] bytes = new byte[((width * height * bpp - 1) / 8) + 1]; //Converts the pixel data to bytes, do not try to use this call to switch the color channels because that only works for 16bpp bitmaps FreeImage.ConvertToRawBits(bytes, fBitmap, pitch, bpp, redMask, greenMask, blueMask, true); // Create the Pixel bitmap content depending on the image type switch(imageType) { //case FREE_IMAGE_TYPE.FIT_BITMAP: default: face = new PixelBitmapContent(width, height); break; case FREE_IMAGE_TYPE.FIT_RGBA16: face = new PixelBitmapContent(width, height); break; case FREE_IMAGE_TYPE.FIT_RGBAF: face = new PixelBitmapContent(width, height); break; } FreeImage.Unload(fBitmap); face.SetPixelData(bytes); output.Faces[0].Add(face); return output; } /// /// Expands images to have an alpha channel and swaps red and blue channels /// /// Image to process /// Type of the image for the procedure /// private static IntPtr ConvertAndSwapChannels(IntPtr fBitmap, FREE_IMAGE_TYPE imageType) { IntPtr bgra; switch(imageType) { // Return BGRA images as is case FREE_IMAGE_TYPE.FIT_RGBAF: case FREE_IMAGE_TYPE.FIT_RGBA16: break; // Add an alpha channel to BGRA images without one case FREE_IMAGE_TYPE.FIT_RGBF: bgra = FreeImage.ConvertToType(fBitmap, FREE_IMAGE_TYPE.FIT_RGBAF, true); FreeImage.Unload(fBitmap); fBitmap = bgra; break; case FREE_IMAGE_TYPE.FIT_RGB16: bgra = FreeImage.ConvertToType(fBitmap, FREE_IMAGE_TYPE.FIT_RGBA16, true); FreeImage.Unload(fBitmap); fBitmap = bgra; break; // Add an alpha channel to RGB images // Swap the red and blue channels of RGBA images default: // Bitmap and other formats are converted to 32-bit by default bgra = FreeImage.ConvertTo32Bits(fBitmap); SwitchRedAndBlueChannels(bgra); FreeImage.Unload(fBitmap); fBitmap = bgra; break; } return fBitmap; } /// /// Switches the red and blue channels /// /// image private static void SwitchRedAndBlueChannels(IntPtr fBitmap) { var r = FreeImage.GetChannel(fBitmap, FREE_IMAGE_COLOR_CHANNEL.FICC_RED); var b = FreeImage.GetChannel(fBitmap, FREE_IMAGE_COLOR_CHANNEL.FICC_BLUE); FreeImage.SetChannel(fBitmap, b, FREE_IMAGE_COLOR_CHANNEL.FICC_RED); FreeImage.SetChannel(fBitmap, r, FREE_IMAGE_COLOR_CHANNEL.FICC_BLUE); FreeImage.Unload(r); FreeImage.Unload(b); } // Loads BMP using StbSharp. This allows us to load BMP files containing BITMAPV4HEADER and BITMAPV5HEADER // structures, which FreeImage does not support. TextureContent LoadImage(string filename) { var output = new Texture2DContent { Identity = new ContentIdentity(filename) }; ImageResult result; using (var stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) { result = ImageResult.FromStream(stream, ColorComponents.RedGreenBlueAlpha); } var face = new PixelBitmapContent(result.Width, result.Height); face.SetPixelData(result.Data); output.Faces[0].Add(face); return output; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/ContentWriterExtensions.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { public static class ContentWriterExtensions { /// /// Writes a Color value to the current stream and advances the stream position by 4 bytes. /// /// The ContentWriter. /// The Color value to write. public static void Write(this ContentWriter output, Color value) { output.Write(value.R); output.Write(value.G); output.Write(value.B); output.Write(value.A); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/FreeImageAPI.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.InteropServices; using Microsoft.Xna.Platform.Utilities; namespace FreeImageAPI { internal enum FREE_IMAGE_TYPE { FIT_UNKNOWN, FIT_BITMAP, FIT_UINT16, FIT_INT16, FIT_UINT32, FIT_INT32, FIT_FLOAT, FIT_DOUBLE, FIT_COMPLEX, FIT_RGB16, FIT_RGBA16, FIT_RGBF, FIT_RGBAF } internal enum FREE_IMAGE_FILTER { FILTER_BOX, FILTER_BICUBIC, FILTER_BILINEAR, FILTER_BSPLINE, FILTER_CATMULLROM, FILTER_LANCZOS3 } internal enum FREE_IMAGE_FORMAT { FIF_UNKNOWN = -1, FIF_BMP, FIF_ICO, FIF_JPEG, FIF_JNG, FIF_KOALA, FIF_LBM, FIF_IFF, FIF_MNG, FIF_PBM, FIF_PBMRAW, FIF_PCD, FIF_PCX, FIF_PGM, FIF_PGMRAW, FIF_PNG, FIF_PPM, FIF_PPMRAW, FIF_RAS, FIF_TARGA, FIF_TIFF, FIF_WBMP, FIF_PSD, FIF_CUT, FIF_XBM, FIF_XPM, FIF_DDS, FIF_GIF, FIF_HDR, FIF_FAXG3, FIF_SGI, FIF_EXR, FIF_J2K, FIF_JP2, FIF_PFM, FIF_PICT, FIF_RAW, FIF_WEBP, FIF_JXR } internal enum FREE_IMAGE_COLOR_CHANNEL { FICC_RGB, FICC_RED, FICC_GREEN, FICC_BLUE, FICC_ALPHA, FICC_BLACK, FICC_REAL, FICC_IMAG, FICC_MAG, FICC_PHASE } partial class FreeImage { private const string NativeLibName = "FreeImage"; [DllImport(NativeLibName, EntryPoint = "FreeImage_ConvertFromRawBits")] public static extern IntPtr ConvertFromRawBits(byte[] bits, int width, int height, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown); [DllImport(NativeLibName, EntryPoint = "FreeImage_Rescale")] public static extern IntPtr Rescale(IntPtr dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter); [DllImport(NativeLibName, EntryPoint = "FreeImage_Unload")] public static extern void Unload(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_ConvertToRawBits")] public static extern void ConvertToRawBits(byte[] bits, IntPtr dib, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown); [DllImport(NativeLibName, CharSet = CharSet.Unicode, EntryPoint = "FreeImage_GetFileTypeU")] public static extern FREE_IMAGE_FORMAT GetFileTypeU(string filename, int size); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetFileType")] public static extern FREE_IMAGE_FORMAT GetFileTypeS(string filename, int size); public static FREE_IMAGE_FORMAT GetFileType(string filename, int size) { if (CurrentPlatform.OS == OS.Windows) return GetFileTypeU(filename, size); else return GetFileTypeS(filename, size); } [DllImport(NativeLibName, CharSet = CharSet.Unicode, EntryPoint = "FreeImage_LoadU")] public static extern IntPtr LoadU(FREE_IMAGE_FORMAT fif, string filename, int flags); [DllImport(NativeLibName, EntryPoint = "FreeImage_Load")] public static extern IntPtr LoadS(FREE_IMAGE_FORMAT fif, string filename, int flags); public static IntPtr Load(FREE_IMAGE_FORMAT fif, string filename, int flags) { if (CurrentPlatform.OS == OS.Windows) return LoadU(fif, filename, flags); else return LoadS(fif, filename, flags); } [DllImport(NativeLibName, EntryPoint = "FreeImage_GetHeight")] public static extern uint GetHeight(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetWidth")] public static extern uint GetWidth(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetImageType")] public static extern FREE_IMAGE_TYPE GetImageType(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetChannel")] public static extern IntPtr GetChannel(IntPtr dib, FREE_IMAGE_COLOR_CHANNEL channel); [DllImport(NativeLibName, EntryPoint = "FreeImage_SetChannel")] public static extern bool SetChannel(IntPtr dib, IntPtr dib8, FREE_IMAGE_COLOR_CHANNEL channel); [DllImport(NativeLibName, EntryPoint = "FreeImage_ConvertToType")] public static extern IntPtr ConvertToType(IntPtr src, FREE_IMAGE_TYPE dst_type, bool scale_linear); [DllImport(NativeLibName, EntryPoint = "FreeImage_ConvertTo32Bits")] public static extern IntPtr ConvertTo32Bits(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetBPP")] public static extern uint GetBPP(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetPitch")] public static extern uint GetPitch(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetRedMask")] public static extern uint GetRedMask(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetGreenMask")] public static extern uint GetGreenMask(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetBlueMask")] public static extern uint GetBlueMask(IntPtr dib); [DllImport(NativeLibName, EntryPoint = "FreeImage_AllocateT")] public static extern IntPtr AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, uint red_mask, uint green_mask, uint blue_mask); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetScanLine")] public static extern IntPtr GetScanLine(IntPtr dib, int scanline); [DllImport(NativeLibName, EntryPoint = "FreeImage_GetLine")] public static extern uint GetLine(IntPtr dib); } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/FreeImageAPIC.cs ================================================ // The following code is part of FreeImage.NET // https://freeimagenet.codeplex.com/SourceControl/latest#FreeImage.NET/FreeImage.NET/3.17.0.4/FreeImageWrapper.cs // // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER // THIS DISCLAIMER. using System; namespace FreeImageAPI { partial class FreeImage { public static unsafe void CopyMemory(byte* dest, byte* src, int len) { if (len >= 0x10) { do { *((int*)dest) = *((int*)src); *((int*)(dest + 4)) = *((int*)(src + 4)); *((int*)(dest + 8)) = *((int*)(src + 8)); *((int*)(dest + 12)) = *((int*)(src + 12)); dest += 0x10; src += 0x10; } while ((len -= 0x10) >= 0x10); } if (len > 0) { if ((len & 8) != 0) { *((int*)dest) = *((int*)src); *((int*)(dest + 4)) = *((int*)(src + 4)); dest += 8; src += 8; } if ((len & 4) != 0) { *((int*)dest) = *((int*)src); dest += 4; src += 4; } if ((len & 2) != 0) { *((short*)dest) = *((short*)src); dest += 2; src += 2; } if ((len & 1) != 0) { *dest = *src; } } } public static unsafe IntPtr ConvertFromRawBits( byte[] bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown) { fixed (byte* ptr = bits) { return ConvertFromRawBits( (IntPtr)ptr, type, width, height, pitch, bpp, red_mask, green_mask, blue_mask, topdown); } } public static unsafe IntPtr ConvertFromRawBits( IntPtr bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, uint bpp, uint red_mask, uint green_mask, uint blue_mask, bool topdown) { byte* addr = (byte*)bits; if ((addr == null) || (width <= 0) || (height <= 0)) { return IntPtr.Zero; } IntPtr dib = AllocateT(type, width, height, (int)bpp, red_mask, green_mask, blue_mask); if (dib != IntPtr.Zero) { if (topdown) { for (int i = height - 1; i >= 0; --i) { CopyMemory((byte*)GetScanLine(dib, i), addr, (int)GetLine(dib)); addr += pitch; } } else { for (int i = 0; i < height; ++i) { CopyMemory((byte*)GetScanLine(dib, i), addr, (int)GetLine(dib)); addr += pitch; } } } return dib; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/GraphicsExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics { static class GraphicsExtensions { public static int GetSize(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 4; case VertexElementFormat.Vector2: return 8; case VertexElementFormat.Vector3: return 12; case VertexElementFormat.Vector4: return 16; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 4; case VertexElementFormat.Short4: return 8; case VertexElementFormat.NormalizedShort2: return 4; case VertexElementFormat.NormalizedShort4: return 8; case VertexElementFormat.HalfVector2: return 4; case VertexElementFormat.HalfVector4: return 8; default: return 0; } } public static bool IsCompressedFormat(this SurfaceFormat format) { switch (format) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1a: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: case SurfaceFormat.RgbaPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbPvrtc4Bpp: return true; default: return false; } } public static int GetSize(this SurfaceFormat surfaceFormat) { switch (surfaceFormat) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: // One texel in DXT1, PVRTC (2bpp and 4bpp) and ETC1 is a minimum 4x4 block (8x4 for PVRTC 2bpp), which is 8 bytes return 8; case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: // One texel in DXT3 and DXT5 is a minimum 4x4 block, which is 16 bytes return 16; case SurfaceFormat.Alpha8: return 1; case SurfaceFormat.Bgr565: case SurfaceFormat.Bgra4444: case SurfaceFormat.Bgra5551: case SurfaceFormat.HalfSingle: case SurfaceFormat.NormalizedByte2: return 2; case SurfaceFormat.Color: case SurfaceFormat.ColorSRgb: case SurfaceFormat.ColorSRgba: case SurfaceFormat.Single: case SurfaceFormat.Rg32: case SurfaceFormat.HalfVector2: case SurfaceFormat.NormalizedByte4: case SurfaceFormat.Rgba1010102: case SurfaceFormat.Bgra32: case SurfaceFormat.Bgra32SRgb: case SurfaceFormat.Bgr32: case SurfaceFormat.Bgr32SRgb: return 4; case SurfaceFormat.HalfVector4: case SurfaceFormat.Rgba64: case SurfaceFormat.Vector2: return 8; case SurfaceFormat.Vector4: return 16; default: throw new ArgumentException(); } } public static void GetBlockSize(this SurfaceFormat surfaceFormat, out int width, out int height) { switch (surfaceFormat) { case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: width = 8; height = 4; break; case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: width = 4; height = 4; break; default: width = 1; height = 1; break; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/ReflectionHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Reflection; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Content.Pipeline.Graphics.Utilities { internal static partial class ReflectionHelpers { internal static int SizeOf() { return ManagedSizeOf.Value; } /// /// Generics handler for Marshal.SizeOf /// private static class ManagedSizeOf { static public int Value { get; private set; } static ManagedSizeOf() { #if NET40 || NET45 || NET40_OR_GREATER Value = Marshal.SizeOf(typeof(T)); #else Value = Marshal.SizeOf(); #endif } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/Utilities/VectorConverterEx.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities { interface VectorConverterEx where T : struct { Vector4 ToVector4(T value); T FromVector4(Vector4 value); } /// /// Helper class used by PixelBitmapContent.TryCopyFrom and TryCopyTo /// to convert between non-PackedValue types and Vector4. /// class VectorConverterEx : VectorConverterEx, VectorConverterEx, VectorConverterEx, VectorConverterEx, VectorConverterEx, VectorConverterEx { Vector4 VectorConverterEx.ToVector4(byte value) { var f = (float)value / (float)byte.MaxValue; return new Vector4(f, 0f, 0f, 1f); } Vector4 VectorConverterEx.ToVector4(short value) { var f = (float)value / (float)short.MaxValue; return new Vector4(f, 0f, 0f, 1f); } Vector4 VectorConverterEx.ToVector4(int value) { var f = (float)value / (float)int.MaxValue; return new Vector4(f, 0f, 0f, 1f); } Vector4 VectorConverterEx.ToVector4(float value) { return new Vector4(value, 0f, 0f, 1f); } Vector4 VectorConverterEx.ToVector4(Color value) { return value.ToVector4(); } Vector4 VectorConverterEx.ToVector4(Vector4 value) { return value; } byte VectorConverterEx.FromVector4(Vector4 value) { return (byte)(value.X * (float)byte.MaxValue); } short VectorConverterEx.FromVector4(Vector4 value) { return (short)(value.X * (float)short.MaxValue); } int VectorConverterEx.FromVector4(Vector4 value) { return (int)(value.X * (float)int.MaxValue); } float VectorConverterEx.FromVector4(Vector4 value) { return value.X; } Color VectorConverterEx.FromVector4(Vector4 value) { return new Color(value); } Vector4 VectorConverterEx.FromVector4(Vector4 value) { return value; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/XImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading DirectX Object (.x) files for use in the Content Pipeline. /// [ContentImporter(".x", DisplayName = "X Importer - KNI", DefaultProcessor = "ModelProcessor")] public class XImporter : ContentImporter { /// /// Initializes a new instance of XImporter. /// public XImporter() { } /// /// Called by the XNA Framework when importing a .x file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override NodeContent Import(string filename, ContentImporterContext context) { var importer = new OpenAssetImporter("XImporter"); return importer.Import(filename, context); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/XNA.Framework.Content.Pipeline.Graphics.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content.Pipeline.Graphics\ 4.2.9001.0 4.2.9001.0 false net40;netstandard2.0;net8.0 7.3 Xna.Framework.Content.Pipeline.Graphics Microsoft.Xna.Framework.Content.Pipeline.Graphics true STBSHARP_INTERNAL CS0067;CS1591;CS1574;CS0419;CS8500 true KNI Framework Framework Content Pipeline Graphics. KNI; nkast.Xna.Framework.Content.Pipeline.Graphics ..\..\ThirdParty\AssimpNet\5.0.0\lib\net40\AssimpNet.dll ..\..\ThirdParty\Typography\net40\Typography.OpenFont.dll ..\..\ThirdParty\SharpFont\Windows\x64\SharpFont.dll ..\..\ThirdParty\PVRTexLibNET\PVRTexLibNET.dll ..\..\ThirdParty\AssimpNet\5.0.0\lib\netstandard2.0\AssimpNet.dll ..\..\ThirdParty\Typography\netstandard2.0\Typography.OpenFont.dll ..\..\ThirdParty\Dependencies\SharpFont\x64\SharpFont.dll ..\..\ThirdParty\Dependencies\PVRTexLibNET\PVRTexLibNET.dll ..\..\ThirdParty\Dependencies\NVTT\lib\\netstandard2.0\Nvidia.TextureTools.dll ..\..\ThirdParty\Dependencies\NVTT\lib\\net40\Nvidia.TextureTools.dll ..\..\ThirdParty\Dependencies\ATI.TextureConverter\ATI.TextureConverter.dll Utilities\CurrentPlatform.cs assimp.dll PreserveNewest True nvtt.dll PreserveNewest True FreeImage.dll PreserveNewest True freetype6.dll PreserveNewest True msvcr110.dll PreserveNewest True PVRTexLibWrapper.dll PreserveNewest True freetype6.dll PreserveNewest True msvcr110.dll PreserveNewest True PVRTexLibWrapper.dll PreserveNewest True {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {73509F44-3566-4B79-BB47-C7C6E2AA2351} Xna.Framework.Content.Pipeline False ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics/XNA.Framework.Content.Pipeline.Graphics.dll.config ================================================  ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ConstantBufferData.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class ConstantBufferData { public ConstantBufferData() { } public string Name { get; internal set; } public int Size { get; internal set; } public List ParameterIndex { get; internal set; } public List ParameterOffset { get; internal set; } public List Parameters { get; internal set; } public ConstantBufferData(string name) { Name = name; ParameterIndex = new List(); ParameterOffset = new List(); Parameters = new List(); Size = 0; } public bool SameAs(ConstantBufferData other) { // If the names of the constant buffers don't // match then consider them different right off // the bat... even if their parameters are the same. if (Name != other.Name) return false; // Do we have the same count of parameters and size? if ( Size != other.Size || Parameters.Count != other.Parameters.Count) return false; // Compare the parameters themselves. for (int i = 0; i < Parameters.Count; i++) { EffectObject.EffectParameterContent p1 = Parameters[i]; EffectObject.EffectParameterContent p2 = other.Parameters[i]; // Check the importaint bits. if ( p1.name != p2.name || p1.rows != p2.rows || p1.columns != p2.columns || p1.columnsActual != p2.columnsActual || p1.class_ != p2.class_ || p1.type != p2.type || p1.bufferOffset != p2.bufferOffset) return false; } // These are equal. return true; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/EffectObject.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class EffectObject { public EffectObject() { } public enum RENDERSTATETYPE { ZENABLE = 7, FILLMODE = 8, SHADEMODE = 9, ZWRITEENABLE = 14, ALPHATESTENABLE = 15, LASTPIXEL = 16, SRCBLEND = 19, DESTBLEND = 20, CULLMODE = 22, ZFUNC = 23, ALPHAREF = 24, ALPHAFUNC = 25, DITHERENABLE = 26, ALPHABLENDENABLE = 27, FOGENABLE = 28, SPECULARENABLE = 29, FOGCOLOR = 34, FOGTABLEMODE = 35, FOGSTART = 36, FOGEND = 37, FOGDENSITY = 38, RANGEFOGENABLE = 48, STENCILENABLE = 52, STENCILFAIL = 53, STENCILZFAIL = 54, STENCILPASS = 55, STENCILFUNC = 56, STENCILREF = 57, STENCILMASK = 58, STENCILWRITEMASK = 59, TEXTUREFACTOR = 60, WRAP0 = 128, WRAP1 = 129, WRAP2 = 130, WRAP3 = 131, WRAP4 = 132, WRAP5 = 133, WRAP6 = 134, WRAP7 = 135, CLIPPING = 136, LIGHTING = 137, AMBIENT = 139, FOGVERTEXMODE = 140, COLORVERTEX = 141, LOCALVIEWER = 142, NORMALIZENORMALS = 143, DIFFUSEMATERIALSOURCE = 145, SPECULARMATERIALSOURCE = 146, AMBIENTMATERIALSOURCE = 147, EMISSIVEMATERIALSOURCE = 148, VERTEXBLEND = 151, CLIPPLANEENABLE = 152, POINTSIZE = 154, POINTSIZE_MIN = 155, POINTSPRITEENABLE = 156, POINTSCALEENABLE = 157, POINTSCALE_A = 158, POINTSCALE_B = 159, POINTSCALE_C = 160, MULTISAMPLEANTIALIAS = 161, MULTISAMPLEMASK = 162, PATCHEDGESTYLE = 163, DEBUGMONITORTOKEN = 165, POINTSIZE_MAX = 166, INDEXEDVERTEXBLENDENABLE = 167, COLORWRITEENABLE = 168, TWEENFACTOR = 170, BLENDOP = 171, POSITIONDEGREE = 172, NORMALDEGREE = 173, SCISSORTESTENABLE = 174, SLOPESCALEDEPTHBIAS = 175, ANTIALIASEDLINEENABLE = 176, MINTESSELLATIONLEVEL = 178, MAXTESSELLATIONLEVEL = 179, ADAPTIVETESS_X = 180, ADAPTIVETESS_Y = 181, ADAPTIVETESS_Z = 182, ADAPTIVETESS_W = 183, ENABLEADAPTIVETESSELLATION= 184, TWOSIDEDSTENCILMODE = 185, CCW_STENCILFAIL = 186, CCW_STENCILZFAIL = 187, CCW_STENCILPASS = 188, CCW_STENCILFUNC = 189, COLORWRITEENABLE1 = 190, COLORWRITEENABLE2 = 191, COLORWRITEENABLE3 = 192, BLENDFACTOR = 193, SRGBWRITEENABLE = 194, DEPTHBIAS = 195, WRAP8 = 198, WRAP9 = 199, WRAP10 = 200, WRAP11 = 201, WRAP12 = 202, WRAP13 = 203, WRAP14 = 204, WRAP15 = 205, SEPARATEALPHABLENDENABLE = 206, SRCBLENDALPHA = 207, DESTBLENDALPHA = 208, BLENDOPALPHA = 209, FORCE_DWORD = 0x7fffffff } public enum TEXTURESTAGESTATETYPE { COLOROP = 1, COLORARG1 = 2, COLORARG2 = 3, ALPHAOP = 4, ALPHAARG1 = 5, ALPHAARG2 = 6, BUMPENVMAT00 = 7, BUMPENVMAT01 = 8, BUMPENVMAT10 = 9, BUMPENVMAT11 = 10, TEXCOORDINDEX = 11, BUMPENVLSCALE = 22, BUMPENVLOFFSET = 23, TEXTURETRANSFORMFLAGS = 24, COLORARG0 = 26, ALPHAARG0 = 27, RESULTARG = 28, CONSTANT = 32, FORCE_DWORD = 0x7fffffff } public enum TRANSFORMSTATETYPE { VIEW = 2, PROJECTION = 3, TEXTURE0 = 16, TEXTURE1 = 17, TEXTURE2 = 18, TEXTURE3 = 19, TEXTURE4 = 20, TEXTURE5 = 21, TEXTURE6 = 22, TEXTURE7 = 23, WORLD = 256, FORCE_DWORD = 0x7fffffff } public const int PARAMETER_SHARED = 1; public const int PARAMETER_LITERAL = 2; public const int PARAMETER_ANNOTATION = 4; public enum PARAMETER_CLASS { SCALAR, VECTOR, MATRIX_ROWS, MATRIX_COLUMNS, OBJECT, STRUCT, FORCE_DWORD = 0x7fffffff, } public enum PARAMETER_TYPE { VOID, BOOL, INT, FLOAT, STRING, TEXTURE, TEXTURE1D, TEXTURE2D, TEXTURE3D, TEXTURECUBE, SAMPLER, SAMPLER1D, SAMPLER2D, SAMPLER3D, SAMPLERCUBE, PIXELSHADER, VERTEXSHADER, COMPUTESHADER, PIXELFRAGMENT, VERTEXFRAGMENT, UNSUPPORTED, FORCE_DWORD = 0x7fffffff, } enum SAMPLERSTATETYPE { ADDRESSU = 1, ADDRESSV = 2, ADDRESSW = 3, BORDERCOLOR = 4, MAGFILTER = 5, MINFILTER = 6, MIPFILTER = 7, MIPMAPLODBIAS = 8, MAXMIPLEVEL = 9, MAXANISOTROPY = 10, SRGBTEXTURE = 11, ELEMENTINDEX = 12, DMAPOFFSET = 13, FORCE_DWORD = 0x7fffffff, }; public enum STATE_CLASS { LIGHTENABLE, FVF, LIGHT, MATERIAL, NPATCHMODE, PIXELSHADER, RENDERSTATE, SETSAMPLER, SAMPLERSTATE, TEXTURE, TEXTURESTAGE, TRANSFORM, VERTEXSHADER, SHADERCONST, COMPUTESHADER, UNKNOWN, }; public enum MATERIAL_TYPE { DIFFUSE, AMBIENT, SPECULAR, EMISSIVE, POWER, }; public enum LIGHT_TYPE { TYPE, DIFFUSE, SPECULAR, AMBIENT, POSITION, DIRECTION, RANGE, FALLOFF, ATTENUATION0, ATTENUATION1, ATTENUATION2, THETA, PHI, }; public enum SHADER_CONSTANT_TYPE { VSFLOAT, VSBOOL, VSINT, PSFLOAT, PSBOOL, PSINT, } public enum STATE_TYPE { CONSTANT, PARAMETER, EXPRESSION, EXPRESSIONINDEX, } public class EffectParameterContent { public string name; public string semantic; public object data; public PARAMETER_CLASS class_; public PARAMETER_TYPE type; public uint rows; public uint columns; // MojoShader optimizes matrices to occupy less registers. // columnsActual store the actual number of columns. public uint columnsActual; public uint element_count; public uint annotation_count = 0; public uint member_count; public uint flags = 0; public uint bytes = 0; public int bufferIndex = -1; public int bufferOffset = -1; public EffectParameterContent[] annotation_handles = null; public EffectParameterContent[] member_handles; public override string ToString() { if (rows > 0 || columns > 0) return string.Format("{0} {1}{2}x{3} {4} : cb{5},{6}", class_, type, rows, columns, name, bufferIndex, bufferOffset); else return string.Format("{0} {1} {2}", class_, type, name); } } public class EffectStateContent { public uint operation; public uint index; public STATE_TYPE type; public EffectParameterContent parameter; } public class EffectSamplerContent { public uint state_count = 0; public EffectStateContent[] states = null; } public class EffectPassContent { public string name; public uint state_count; public uint annotation_count = 0; public BlendState blendState; public DepthStencilState depthStencilState; public RasterizerState rasterizerState; public EffectStateContent[] states; public EffectParameterContent[] annotation_handles = null; } public class EffectTechniqueContent { public string name; public uint pass_count; public uint annotation_count = 0; public EffectParameterContent[] annotation_handles = null; public EffectPassContent[] pass_handles; } public class state_info { public STATE_CLASS class_ { get; private set; } public uint op { get; private set; } public string name { get; private set; } public state_info(STATE_CLASS class_, uint op, string name) { this.class_ = class_; this.op = op; this.name = name; } } /// /// The shared state definition table. /// public static readonly state_info[] state_table = { new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZENABLE, "ZENABLE"), /* 0x0 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FILLMODE, "FILLMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SHADEMODE, "SHADEMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZWRITEENABLE, "ZWRITEENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHATESTENABLE, "ALPHATESTENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LASTPIXEL, "LASTPIXEL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRCBLEND, "SRCBLEND"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DESTBLEND, "DESTBLEND"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CULLMODE, "CULLMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ZFUNC, "ZFUNC"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHAREF, "ALPHAREF"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHAFUNC, "ALPHAFUNC"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DITHERENABLE, "DITHERENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ALPHABLENDENABLE, "ALPHABLENDENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGENABLE, "FOGENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SPECULARENABLE, "SPECULARENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGCOLOR, "FOGCOLOR"), /* 0x10 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGTABLEMODE, "FOGTABLEMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGSTART, "FOGSTART"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGEND, "FOGEND"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGDENSITY, "FOGDENSITY"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.RANGEFOGENABLE, "RANGEFOGENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILENABLE, "STENCILENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILFAIL, "STENCILFAIL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILZFAIL, "STENCILZFAIL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILPASS, "STENCILPASS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILFUNC, "STENCILFUNC"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILREF, "STENCILREF"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILMASK, "STENCILMASK"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.STENCILWRITEMASK, "STENCILWRITEMASK"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TEXTUREFACTOR, "TEXTUREFACTOR"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP0, "WRAP0"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP1, "WRAP1"), /* 0x20 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP2, "WRAP2"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP3, "WRAP3"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP4, "WRAP4"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP5, "WRAP5"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP6, "WRAP6"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP7, "WRAP7"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP8, "WRAP8"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP9, "WRAP9"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP10, "WRAP10"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP11, "WRAP11"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP12, "WRAP12"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP13, "WRAP13"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP14, "WRAP14"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.WRAP15, "WRAP15"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CLIPPING, "CLIPPING"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LIGHTING, "LIGHTING"), /* 0x30 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.AMBIENT, "AMBIENT"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.FOGVERTEXMODE, "FOGVERTEXMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORVERTEX, "COLORVERTEX"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.LOCALVIEWER, "LOCALVIEWER"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.NORMALIZENORMALS, "NORMALIZENORMALS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DIFFUSEMATERIALSOURCE, "DIFFUSEMATERIALSOURCE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SPECULARMATERIALSOURCE, "SPECULARMATERIALSOURCE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.AMBIENTMATERIALSOURCE, "AMBIENTMATERIALSOURCE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.EMISSIVEMATERIALSOURCE, "EMISSIVEMATERIALSOURCE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.VERTEXBLEND, "VERTEXBLEND"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CLIPPLANEENABLE, "CLIPPLANEENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE, "POINTSIZE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE_MIN, "POINTSIZE_MIN"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSIZE_MAX, "POINTSIZE_MAX"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSPRITEENABLE, "POINTSPRITEENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALEENABLE, "POINTSCALEENABLE"), /* 0x40 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_A, "POINTSCALE_A"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_B, "POINTSCALE_B"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POINTSCALE_C, "POINTSCALE_C"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MULTISAMPLEANTIALIAS, "MULTISAMPLEANTIALIAS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MULTISAMPLEMASK, "MULTISAMPLEMASK"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.PATCHEDGESTYLE, "PATCHEDGESTYLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DEBUGMONITORTOKEN, "DEBUGMONITORTOKEN"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.INDEXEDVERTEXBLENDENABLE, "INDEXEDVERTEXBLENDENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE, "COLORWRITEENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TWEENFACTOR, "TWEENFACTOR"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDOP, "BLENDOP"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.POSITIONDEGREE, "POSITIONDEGREE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.NORMALDEGREE, "NORMALDEGREE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SCISSORTESTENABLE, "SCISSORTESTENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SLOPESCALEDEPTHBIAS, "SLOPESCALEDEPTHBIAS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ANTIALIASEDLINEENABLE, "ANTIALIASEDLINEENABLE"), /* 0x50 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MINTESSELLATIONLEVEL, "MINTESSELLATIONLEVEL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.MAXTESSELLATIONLEVEL, "MAXTESSELLATIONLEVEL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_X, "ADAPTIVETESS_X"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_Y, "ADAPTIVETESS_Y"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_Z, "ADAPTIVETESS_Z"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ADAPTIVETESS_W, "ADAPTIVETESS_W"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.ENABLEADAPTIVETESSELLATION, "ENABLEADAPTIVETESSELLATION"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.TWOSIDEDSTENCILMODE, "TWOSIDEDSTENCILMODE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILFAIL, "CCW_STENCILFAIL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILZFAIL, "CCW_STENCILZFAIL"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILPASS, "CCW_STENCILPASS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.CCW_STENCILFUNC, "CCW_STENCILFUNC"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE1, "COLORWRITEENABLE1"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE2, "COLORWRITEENABLE2"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.COLORWRITEENABLE3, "COLORWRITEENABLE3"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDFACTOR, "BLENDFACTOR"), /* 0x60 */ new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRGBWRITEENABLE, "SRGBWRITEENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DEPTHBIAS, "DEPTHBIAS"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SEPARATEALPHABLENDENABLE, "SEPARATEALPHABLENDENABLE"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.SRCBLENDALPHA, "SRCBLENDALPHA"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.DESTBLENDALPHA, "DESTBLENDALPHA"), new state_info(STATE_CLASS.RENDERSTATE, (uint)RENDERSTATETYPE.BLENDOPALPHA, "BLENDOPALPHA"), /* Texture stages */ new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLOROP, "COLOROP"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG0, "COLORARG0"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG1, "COLORARG1"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.COLORARG2, "COLORARG2"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAOP, "ALPHAOP"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG0, "ALPHAARG0"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG1, "ALPHAARG1"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.ALPHAARG2, "ALPHAARG2"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.RESULTARG, "RESULTARG"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT00, "BUMPENVMAT00"), /* 0x70 */ new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT01, "BUMPENVMAT01"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT10, "BUMPENVMAT10"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVMAT11, "BUMPENVMAT11"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.TEXCOORDINDEX, "TEXCOORDINDEX"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVLSCALE, "BUMPENVLSCALE"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.BUMPENVLOFFSET, "BUMPENVLOFFSET"), new state_info(STATE_CLASS.TEXTURESTAGE, (uint)TEXTURESTAGESTATETYPE.TEXTURETRANSFORMFLAGS, "TEXTURETRANSFORMFLAGS"), /* */ new state_info(STATE_CLASS.UNKNOWN, 0, "UNKNOWN"), /* NPatchMode */ new state_info(STATE_CLASS.NPATCHMODE, 0, "NPatchMode"), /* */ new state_info(STATE_CLASS.UNKNOWN, 0, "UNKNOWN"), /* Transform */ new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.PROJECTION, "PROJECTION"), new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.VIEW, "VIEW"), new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.WORLD, "WORLD"), new state_info(STATE_CLASS.TRANSFORM, (uint)TRANSFORMSTATETYPE.TEXTURE0, "TEXTURE0"), /* Material */ new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.DIFFUSE, "MaterialDiffuse"), new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.AMBIENT, "MaterialAmbient"), /* 0x80 */ new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.SPECULAR, "MaterialSpecular"), new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.EMISSIVE, "MaterialEmissive"), new state_info(STATE_CLASS.MATERIAL, (uint)MATERIAL_TYPE.POWER, "MaterialPower"), /* Light */ new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.TYPE, "LightType"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.DIFFUSE, "LightDiffuse"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.SPECULAR, "LightSpecular"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.AMBIENT, "LightAmbient"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.POSITION, "LightPosition"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.DIRECTION, "LightDirection"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.RANGE, "LightRange"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.FALLOFF, "LightFallOff"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION0, "LightAttenuation0"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION1, "LightAttenuation1"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.ATTENUATION2, "LightAttenuation2"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.THETA, "LightTheta"), new state_info(STATE_CLASS.LIGHT, (uint)LIGHT_TYPE.PHI, "LightPhi"), /* 0x90 */ /* Ligthenable */ new state_info(STATE_CLASS.LIGHTENABLE, 0, "LightEnable"), /* Vertexshader */ new state_info(STATE_CLASS.VERTEXSHADER, 0, "Vertexshader"), /* Pixelshader */ new state_info(STATE_CLASS.PIXELSHADER, 0, "Pixelshader"), /* ComputerShader */ new state_info(STATE_CLASS.COMPUTESHADER, 0, "ComputeShader"), /* Shader constants */ new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstantF"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSBOOL, "VertexShaderConstantB"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSINT, "VertexShaderConstantI"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstant"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstant1"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstant2"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstant3"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.VSFLOAT, "VertexShaderConstant4"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstantF"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSBOOL, "PixelShaderConstantB"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSINT, "PixelShaderConstantI"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstant"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstant1"), /* 0xa0 */ new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstant2"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstant3"), new state_info(STATE_CLASS.SHADERCONST, (uint)SHADER_CONSTANT_TYPE.PSFLOAT, "PixelShaderConstant4"), /* Texture */ new state_info(STATE_CLASS.TEXTURE, 0, "Texture"), /* Sampler states */ new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSU, "AddressU"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSV, "AddressV"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ADDRESSW, "AddressW"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.BORDERCOLOR, "BorderColor"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAGFILTER, "MagFilter"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MINFILTER, "MinFilter"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MIPFILTER, "MipFilter"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MIPMAPLODBIAS, "MipMapLodBias"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAXMIPLEVEL, "MaxMipLevel"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.MAXANISOTROPY, "MaxAnisotropy"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.SRGBTEXTURE, "SRGBTexture"), new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.ELEMENTINDEX, "ElementIndex"), /* 0xb0 */ new state_info(STATE_CLASS.SAMPLERSTATE, (uint)SAMPLERSTATETYPE.DMAPOFFSET, "DMAPOffset"), /* Set sampler */ new state_info(STATE_CLASS.SETSAMPLER, 0, "Sampler"), }; static public EffectParameterClass ToXNAParameterClass( PARAMETER_CLASS class_ ) { switch (class_) { case PARAMETER_CLASS.SCALAR: return EffectParameterClass.Scalar; case PARAMETER_CLASS.VECTOR: return EffectParameterClass.Vector; case PARAMETER_CLASS.MATRIX_ROWS: case PARAMETER_CLASS.MATRIX_COLUMNS: return EffectParameterClass.Matrix; case PARAMETER_CLASS.OBJECT: return EffectParameterClass.Object; case PARAMETER_CLASS.STRUCT: return EffectParameterClass.Struct; default: throw new NotImplementedException(); } } static public EffectParameterType ToXNAParameterType(PARAMETER_TYPE type) { switch (type) { case PARAMETER_TYPE.BOOL: return EffectParameterType.Bool; case PARAMETER_TYPE.INT: return EffectParameterType.Int32; case PARAMETER_TYPE.FLOAT: return EffectParameterType.Single; case PARAMETER_TYPE.STRING: return EffectParameterType.String; case PARAMETER_TYPE.TEXTURE: return EffectParameterType.Texture; case PARAMETER_TYPE.TEXTURE1D: return EffectParameterType.Texture1D; case PARAMETER_TYPE.TEXTURE2D: return EffectParameterType.Texture2D; case PARAMETER_TYPE.TEXTURE3D: return EffectParameterType.Texture3D; case PARAMETER_TYPE.TEXTURECUBE: return EffectParameterType.TextureCube; default: throw new NotImplementedException(); } } static internal VertexElementUsage ToXNAVertexElementUsage(MojoShader.Usage usage) { switch (usage) { case MojoShader.Usage.POSITION: return VertexElementUsage.Position; case MojoShader.Usage.BLENDWEIGHT: return VertexElementUsage.BlendWeight; case MojoShader.Usage.BLENDINDICES: return VertexElementUsage.BlendIndices; case MojoShader.Usage.NORMAL: return VertexElementUsage.Normal; case MojoShader.Usage.POINTSIZE: return VertexElementUsage.PointSize; case MojoShader.Usage.TEXCOORD: return VertexElementUsage.TextureCoordinate; case MojoShader.Usage.TANGENT: return VertexElementUsage.Tangent; case MojoShader.Usage.BINORMAL: return VertexElementUsage.Binormal; case MojoShader.Usage.TESSFACTOR: return VertexElementUsage.TessellateFactor; case MojoShader.Usage.COLOR: return VertexElementUsage.Color; case MojoShader.Usage.FOG: return VertexElementUsage.Fog; case MojoShader.Usage.DEPTH: return VertexElementUsage.Depth; case MojoShader.Usage.SAMPLE: return VertexElementUsage.Sample; default: throw new NotImplementedException(); } } internal static int GetShaderIndex(STATE_CLASS type, EffectStateContent[] states) { foreach (EffectStateContent state in states) { state_info operation = state_table[state.operation]; if (operation.class_ != type) continue; if (state.type != STATE_TYPE.CONSTANT) throw new NotSupportedException("We do not support shader expressions!"); return (int)state.parameter.data; } return -1; } public EffectParameterContent[] Objects { get; private set; } public EffectParameterContent[] Parameters { get; internal set; } public EffectTechniqueContent[] Techniques { get; internal set; } public List Shaders { get; internal set; } public List ConstantBuffers { get; internal set; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/GLSLBytecode.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class GLSLBytecode { internal readonly byte Major; internal readonly byte Minor; internal readonly bool ES; internal readonly byte[] Bytecode; public GLSLBytecode(byte major, byte minor, bool es, byte[] bytecode) { this.Major = major; this.Minor = minor; this.ES = es; this.Bytecode = bytecode; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/KNIFXWriter11.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { class KNIFXWriter11 : BinaryWriter { internal const string KNIFXSignature = "KNIF"; internal const int Version = 11; public KNIFXWriter11(Stream output) : base(output) { } protected void WritePackedInt(int value) { // write zigzag encoded int int zzint = ((value << 1) ^ (value >> 31)); Write7BitEncodedInt(zzint); } internal void WriteEffect(EffectObject effectObject, bool integersAsFloats) { Write((bool)integersAsFloats); WriteConstantBuffers(effectObject.ConstantBuffers); WriteShaders(effectObject.Shaders); WriteParameters(effectObject.Parameters, effectObject.Parameters.Length); WriteTechniques(effectObject.Techniques); } private void WriteConstantBuffers(ICollection constantBuffers) { WritePackedInt(constantBuffers.Count); foreach (ConstantBufferData cbuffer in constantBuffers) WriteConstantBuffer(cbuffer); } private void WriteConstantBuffer(ConstantBufferData cbuffer) { Write(cbuffer.Name); WritePackedInt(cbuffer.Size); WritePackedInt(cbuffer.ParameterIndex.Count); for (int i = 0; i < cbuffer.ParameterIndex.Count; i++) { WritePackedInt(cbuffer.ParameterIndex[i]); Write((ushort)cbuffer.ParameterOffset[i]); } } private void WriteShaders(ICollection shaders) { WritePackedInt(shaders.Count); foreach (ShaderData shader in shaders) WriteShader(shader); } private void WriteShader(ShaderData shader) { Write((byte)shader.Stage); WriteShaderVersion(shader.ShaderVersion); Write(shader.ShaderCode.Length); Write(shader.ShaderCode); Debug.WriteLine("Write Samplers ("+ shader._samplers.Length + ")"); foreach (SamplerInfo sampler in shader._samplers) { Debug.WriteLine(" "); Debug.WriteLine(" GLsamplerName: " + sampler.GLsamplerName); Debug.WriteLine(" textureName: //" + sampler.textureName); Debug.WriteLine(" type: " + sampler.type); Debug.WriteLine(" textureSlot: #" + sampler.textureSlot); Debug.WriteLine(" samplerSlot: #" + sampler.samplerSlot); bool hasState = sampler.state != null; Debug.WriteLine(" hasState: " + hasState); if (hasState) { Debug.WriteLine(" Filter: " + sampler.state.Filter); Debug.WriteLine(" AddressU: " + sampler.state.AddressU); Debug.WriteLine(" AddressV: " + sampler.state.AddressV); } } Debug.WriteLine(""); WritePackedInt(shader._samplers.Length); foreach (SamplerInfo sampler in shader._samplers) { Write((byte)sampler.type); Write((byte)sampler.textureSlot); Write((byte)sampler.samplerSlot); if (sampler.state != null) { Write(true); WriteSamplerState(sampler.state); } else Write(false); Write(sampler.GLsamplerName); WritePackedInt(sampler.textureParameter); } WritePackedInt(shader._cbuffers.Length); foreach (int cb in shader._cbuffers) WritePackedInt((byte)cb); Debug.WriteLine("Write _attributes (" + shader._attributes.Length + ")"); foreach (ShaderData.Attribute attrib in shader._attributes) { Debug.WriteLine(" "); Debug.WriteLine(" name: " + attrib.name); Debug.WriteLine(" usage: " + attrib.usage); Debug.WriteLine(" index: " + attrib.index); Debug.WriteLine(" location: " + attrib.location); } WritePackedInt(shader._attributes.Length); foreach (ShaderData.Attribute attrib in shader._attributes) { Write(attrib.name); Write((byte)attrib.usage); WritePackedInt(attrib.index); Write((short)attrib.location); } } private void WriteShaderVersion(ShaderVersion shaderVersion) { WritePackedInt(checked((ushort)shaderVersion.Major)); WritePackedInt(checked((ushort)shaderVersion.Minor)); } private void WriteSamplerState(SamplerState state) { Write((byte)state.AddressU); Write((byte)state.AddressV); Write((byte)state.AddressW); Write(state.BorderColor.R); Write(state.BorderColor.G); Write(state.BorderColor.B); Write(state.BorderColor.A); Write((byte)state.Filter); WritePackedInt(state.MaxAnisotropy); WritePackedInt(state.MaxMipLevel); Write(state.MipMapLevelOfDetailBias); } private void WriteParameters(EffectObject.EffectParameterContent[] parameters, int count) { WritePackedInt(count); for (int i = 0; i < count; i++) WriteParameter(parameters[i]); } private void WriteParameter(EffectObject.EffectParameterContent param) { EffectParameterClass paramClass = EffectObject.ToXNAParameterClass(param.class_); EffectParameterType paramType = EffectObject.ToXNAParameterType(param.type); Write((byte)paramClass); Write((byte)paramType); Write(param.name); Write(param.semantic); WriteAnnotations(param.annotation_handles); Write((byte)param.rows); Write((byte)param.columns); Write((byte)param.columnsActual); // Write the elements or struct members. WriteParameters(param.member_handles, (int)param.element_count); WriteParameters(param.member_handles, (int)param.member_count); if (param.element_count == 0 && param.member_count == 0) { switch (paramType) { case EffectParameterType.Bool: case EffectParameterType.Int32: case EffectParameterType.Single: Write((byte[])param.data); break; } } } private void WriteTechniques(EffectObject.EffectTechniqueContent[] techniques) { WritePackedInt(techniques.Length); foreach (EffectObject.EffectTechniqueContent technique in techniques) { Write(technique.name); WriteAnnotations(technique.annotation_handles); // Write the passes. WritePasses(technique); } } private void WritePasses(EffectObject.EffectTechniqueContent technique) { WritePackedInt((int)technique.pass_count); for (int p = 0; p < technique.pass_count; p++) { EffectObject.EffectPassContent pass = technique.pass_handles[p]; WriteEffectPass(pass); } } private void WriteEffectPass(EffectObject.EffectPassContent pass) { Write(pass.name); WriteAnnotations(pass.annotation_handles); // Write the index for the vertex and pixel shaders. int vertexShaderIndex = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.VERTEXSHADER, pass.states); int pixelShaderIndex = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.PIXELSHADER, pass.states); int computeShaderIndex = EffectObject.GetShaderIndex(EffectObject.STATE_CLASS.COMPUTESHADER, pass.states); WritePackedInt(vertexShaderIndex); WritePackedInt(pixelShaderIndex); WritePackedInt(computeShaderIndex); // Write the state objects too! if (pass.blendState != null) { Write(true); WriteBlendState(pass.blendState); } else Write(false); if (pass.depthStencilState != null) { Write(true); WriteDepthStencilState(pass.depthStencilState); } else Write(false); if (pass.rasterizerState != null) { Write(true); WriteRasterizerState(pass.rasterizerState); } else Write(false); } private void WriteBlendState(BlendState blendState) { Write((byte)blendState.AlphaBlendFunction); Write((byte)blendState.AlphaDestinationBlend); Write((byte)blendState.AlphaSourceBlend); Write(blendState.BlendFactor.R); Write(blendState.BlendFactor.G); Write(blendState.BlendFactor.B); Write(blendState.BlendFactor.A); Write((byte)blendState.ColorBlendFunction); Write((byte)blendState.ColorDestinationBlend); Write((byte)blendState.ColorSourceBlend); Write((byte)blendState.ColorWriteChannels); Write((byte)blendState.ColorWriteChannels1); Write((byte)blendState.ColorWriteChannels2); Write((byte)blendState.ColorWriteChannels3); Write(blendState.MultiSampleMask); } private void WriteDepthStencilState(DepthStencilState depthStencilState) { Write((byte)depthStencilState.CounterClockwiseStencilDepthBufferFail); Write((byte)depthStencilState.CounterClockwiseStencilFail); Write((byte)depthStencilState.CounterClockwiseStencilFunction); Write((byte)depthStencilState.CounterClockwiseStencilPass); Write(depthStencilState.DepthBufferEnable); Write((byte)depthStencilState.DepthBufferFunction); Write(depthStencilState.DepthBufferWriteEnable); Write(depthStencilState.ReferenceStencil); Write((byte)depthStencilState.StencilDepthBufferFail); Write(depthStencilState.StencilEnable); Write((byte)depthStencilState.StencilFail); Write((byte)depthStencilState.StencilFunction); Write(depthStencilState.StencilMask); Write((byte)depthStencilState.StencilPass); Write(depthStencilState.StencilWriteMask); Write(depthStencilState.TwoSidedStencilMode); } private void WriteRasterizerState(RasterizerState rasterizerState) { Write((byte)rasterizerState.CullMode); Write(rasterizerState.DepthBias); Write((byte)rasterizerState.FillMode); Write(rasterizerState.MultiSampleAntiAlias); Write(rasterizerState.ScissorTestEnable); Write(rasterizerState.SlopeScaleDepthBias); } private void WriteAnnotations(EffectObject.EffectParameterContent[] annotations) { int count = annotations == null ? 0 : annotations.Length; WritePackedInt(count); // TODO: Annotations are not implemented! System.Diagnostics.Debug.Assert(count == 0); //for (int i = 0; i < count; i++) // WriteParameter(writer, annotations[i]); } //protected void Write7BitEncodedInt(int value) //{ // unchecked // { // do // { // byte value7bit = (byte)(value & 0x7f); // value = (int)((uint)value >> 7); // if (value != 0) // value7bit |= 0x80; // Write(value7bit); // } // while (value != 0); // } //} } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/MarshalHelper.cs ================================================ using System; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class MarshalHelper { public static T Unmarshal(IntPtr ptr) { Type type = typeof(T); T result = (T)Marshal.PtrToStructure(ptr, type); return result; } public static T[] UnmarshalArray(IntPtr ptr, int count) { Type type = typeof(T); int size = Marshal.SizeOf(type); T[] ret = new T[count]; for (int i = 0; i < count; i++) { int offset = i * size; IntPtr structPtr = ptr + offset; ret[i] = (T)Marshal.PtrToStructure(structPtr, type); } return ret; } public static byte[] UnmarshalArray(IntPtr ptr, int count) { byte[] result = new byte[count]; Marshal.Copy(ptr, result, 0, count); return result; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/MojoShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class MojoShader { #if OLD_CONTENT_PROCESSORS const string mojoshader_dll = "libmojoshader_32.dll"; #else const string mojoshader_dll = "libmojoshader_64.dll"; #endif public partial class NativeConstants { /// MOJOSHADER_VERSION -> 1111 public const int MOJOSHADER_VERSION = 1111; /// MOJOSHADER_CHANGESET -> "hg-1111:91a6af79b5e4" public const string MOJOSHADER_CHANGESET = "hg-1111:91a6af79b5e4"; /// POSITION_NONE -> (-3) public const int POSITION_NONE = -3; /// POSITION_BEFORE -> (-2) public const int POSITION_BEFORE = -2; /// POSITION_AFTER -> (-1) public const int POSITION_AFTER = -1; /// PROFILE_D3D -> "d3d" public const string PROFILE_D3D = "d3d"; /// PROFILE_BYTECODE -> "bytecode" public const string PROFILE_BYTECODE = "bytecode"; /// PROFILE_GLSL -> "glsl" public const string PROFILE_GLSL = "glsl"; /// PROFILE_GLSL120 -> "glsl120" public const string PROFILE_GLSL120 = "glsl120"; /// PROFILE_ARB1 -> "arb1" public const string PROFILE_ARB1 = "arb1"; /// PROFILE_NV2 -> "nv2" public const string PROFILE_NV2 = "nv2"; /// PROFILE_NV3 -> "nv3" public const string PROFILE_NV3 = "nv3"; /// PROFILE_NV4 -> "nv4" public const string PROFILE_NV4 = "nv4"; /// SRC_PROFILE_HLSL_VS_1_1 -> "hlsl_vs_1_1" public const string SRC_PROFILE_HLSL_VS_1_1 = "hlsl_vs_1_1"; /// SRC_PROFILE_HLSL_VS_2_0 -> "hlsl_vs_2_0" public const string SRC_PROFILE_HLSL_VS_2_0 = "hlsl_vs_2_0"; /// SRC_PROFILE_HLSL_VS_3_0 -> "hlsl_vs_3_0" public const string SRC_PROFILE_HLSL_VS_3_0 = "hlsl_vs_3_0"; /// SRC_PROFILE_HLSL_PS_1_1 -> "hlsl_ps_1_1" public const string SRC_PROFILE_HLSL_PS_1_1 = "hlsl_ps_1_1"; /// SRC_PROFILE_HLSL_PS_1_2 -> "hlsl_ps_1_2" public const string SRC_PROFILE_HLSL_PS_1_2 = "hlsl_ps_1_2"; /// SRC_PROFILE_HLSL_PS_1_3 -> "hlsl_ps_1_3" public const string SRC_PROFILE_HLSL_PS_1_3 = "hlsl_ps_1_3"; /// SRC_PROFILE_HLSL_PS_1_4 -> "hlsl_ps_1_4" public const string SRC_PROFILE_HLSL_PS_1_4 = "hlsl_ps_1_4"; /// SRC_PROFILE_HLSL_PS_2_0 -> "hlsl_ps_2_0" public const string SRC_PROFILE_HLSL_PS_2_0 = "hlsl_ps_2_0"; /// SRC_PROFILE_HLSL_PS_3_0 -> "hlsl_ps_3_0" public const string SRC_PROFILE_HLSL_PS_3_0 = "hlsl_ps_3_0"; // CONST -> (1 << 31) public const int CONST = (1) << (31); } [StructLayout(LayoutKind.Sequential)] public struct Uniform { /// UniformType->Anonymous_cf91fd71_65e4_4c31_a6d5_9488d7f3d32a public UniformType type; /// int public int index; /// int public int array_count; /// int public int constant; /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; } [StructLayout(LayoutKind.Sequential)] public struct Constant { /// UniformType->Anonymous_cf91fd71_65e4_4c31_a6d5_9488d7f3d32a public UniformType type; /// int public int index; /// Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be public Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be value; } [StructLayout(LayoutKind.Sequential)] public struct Sampler { /// SamplerType->Anonymous_a752a39b_b479_42b0_9502_e39ba7d86100 public SamplerType type; /// int public int index; /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// int public int texbem; } [StructLayout(LayoutKind.Sequential)] public struct SamplerMap { /// int public int index; /// SamplerType->Anonymous_a752a39b_b479_42b0_9502_e39ba7d86100 public SamplerType type; } [StructLayout(LayoutKind.Sequential)] public struct Attribute { /// Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5 public Usage usage; /// int public int index; /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct Swizzle { /// Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5 public Usage usage; /// unsigned int public uint index; /// unsigned char[4] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)] public string swizzles; } [StructLayout(LayoutKind.Sequential)] public struct SymbolTypeInfo { /// SymbolClass->Anonymous_681c4b26_94f7_4142_a8e9_b970fe0b60df public SymbolClass parameter_class; /// SymbolType->Anonymous_d8534f21_7f44_465d_8843_40a435dbb54a public SymbolType parameter_type; /// unsigned int public uint rows; /// unsigned int public uint columns; /// unsigned int public uint elements; /// unsigned int public uint member_count; /// SymbolStructMember* public IntPtr members; } [StructLayout(LayoutKind.Sequential)] public struct SymbolStructMember { /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// SymbolTypeInfo public SymbolTypeInfo info; } [StructLayout(LayoutKind.Sequential)] public struct Symbol { /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// SymbolRegisterSet->Anonymous_9ff7ac54_131c_43b0_a295_9830d24ac76b public SymbolRegisterSet register_set; /// unsigned int public uint register_index; /// unsigned int public uint register_count; /// SymbolTypeInfo public SymbolTypeInfo info; } [StructLayout(LayoutKind.Sequential)] public struct Error { /// char* [MarshalAs(UnmanagedType.LPStr)] public string error; /// char* [MarshalAs(UnmanagedType.LPStr)] public string filename; /// int public int error_position; } public enum PreshaderOpcode { NOP, MOV, NEG, RCP, FRC, EXP, LOG, RSQ, SIN, COS, ASIN, ACOS, ATAN, MIN, MAX, LT, GE, ADD, MUL, ATAN2, DIV, CMP, MOVC, DOT, NOISE, SCALAR_OPS, /// MIN_SCALAR -> SCALAR_OPS MIN_SCALAR = PreshaderOpcode.SCALAR_OPS, MAX_SCALAR, LT_SCALAR, GE_SCALAR, ADD_SCALAR, MUL_SCALAR, ATAN2_SCALAR, DIV_SCALAR, DOT_SCALAR, NOISE_SCALAR, } public enum PreshaderOperandType { /// LITERAL -> 1 LITERAL = 1, /// INPUT -> 2 INPUT = 2, /// OUTPUT -> 4 OUTPUT = 4, /// TEMP -> 7 TEMP = 7, /// UNKN -> 0xff UNKN = 255, } [StructLayout(LayoutKind.Sequential)] public struct PreshaderOperand { /// PreshaderOperandType public PreshaderOperandType type; /// unsigned int public uint index; /// int public int indexingType; /// unsigned int public uint indexingIndex; } [StructLayout(LayoutKind.Sequential)] public struct PreshaderInstruction { /// PreshaderOpcode public PreshaderOpcode opcode; /// unsigned int public uint element_count; /// unsigned int public uint operand_count; /// PreshaderOperand[4] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.Struct)] public PreshaderOperand[] operands; } [StructLayout(LayoutKind.Sequential)] public struct Preshader { /// unsigned int public uint literal_count; /// double* public IntPtr literals; /// unsigned int public uint temp_count; /// unsigned int public uint symbol_count; /// Symbol* public IntPtr symbols; /// unsigned int public uint instruction_count; /// PreshaderInstruction* public IntPtr instructions; } [StructLayout(LayoutKind.Sequential)] public struct ParseData { /// int public int error_count; /// Error* public IntPtr errors; /// char* [MarshalAs(UnmanagedType.LPStr)] public string profile; /// char* [MarshalAs(UnmanagedType.LPStr)] public string output; /// int public int output_len; /// int public int instruction_count; /// ShaderType->Anonymous_96517ad6_cc69_4542_8537_054e63919d54 public ShaderType shader_type; /// int public int major_ver; /// int public int minor_ver; /// int public int uniform_count; /// Uniform* public IntPtr uniforms; /// int public int constant_count; /// Constant* public IntPtr constants; /// int public int sampler_count; /// Sampler* public IntPtr samplers; /// int public int attribute_count; /// Attribute* public IntPtr attributes; /// int public int output_count; /// Attribute* public IntPtr outputs; /// int public int swizzle_count; /// Swizzle* public IntPtr swizzles; /// int public int symbol_count; /// Symbol* public IntPtr symbols; /// Preshader* public IntPtr preshader; /// Malloc public IntPtr malloc; /// Free public IntPtr free; /// void* public IntPtr malloc_data; } [StructLayout(LayoutKind.Sequential)] public struct EffectParam { /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// char* [MarshalAs(UnmanagedType.LPStr)] public string semantic; } [StructLayout(LayoutKind.Sequential)] public struct EffectState { /// unsigned int public uint type; } [StructLayout(LayoutKind.Sequential)] public struct EffectPass { /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// unsigned int public uint state_count; /// EffectState* public IntPtr states; } [StructLayout(LayoutKind.Sequential)] public struct EffectTechnique { /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; /// unsigned int public uint pass_count; /// EffectPass* public IntPtr passes; } [StructLayout(LayoutKind.Sequential)] public struct EffectTexture { /// unsigned int public uint param; /// char* [MarshalAs(UnmanagedType.LPStr)] public string name; } [StructLayout(LayoutKind.Sequential)] public struct EffectShader { /// unsigned int public uint technique; /// unsigned int public uint pass; /// ParseData* public IntPtr shader; } [StructLayout(LayoutKind.Sequential)] public struct Effect { /// int public int error_count; /// Error* public IntPtr errors; /// char* [MarshalAs(UnmanagedType.LPStr)] public string profile; /// int public int param_count; /// EffectParam* public IntPtr @params; /// int public int technique_count; /// EffectTechnique* public IntPtr techniques; /// int public int texture_count; /// EffectTexture* public IntPtr textures; /// int public int shader_count; /// EffectShader* public IntPtr shaders; /// Malloc public IntPtr malloc; /// Free public IntPtr free; /// void* public IntPtr malloc_data; } [StructLayout(LayoutKind.Sequential)] public struct PreprocessorDefine { /// char* [MarshalAs(UnmanagedType.LPStr)] public string identifier; /// char* [MarshalAs(UnmanagedType.LPStr)] public string definition; } [StructLayout(LayoutKind.Sequential)] public struct PreprocessData { /// int public int error_count; /// Error* public IntPtr errors; /// char* [MarshalAs(UnmanagedType.LPStr)] public string output; /// int public int output_len; /// Malloc public IntPtr malloc; /// Free public IntPtr free; /// void* public IntPtr malloc_data; } /// Return Type: int ///inctype: IncludeType->Anonymous_f1eed39d_7d1b_46d4_972e_a3229d15c26e ///fname: char* ///parent: char* ///outdata: char** ///outbytes: unsigned int* ///m: Malloc ///f: Free ///d: void* public delegate int IncludeOpen(IncludeType inctype, [In()] [MarshalAs(UnmanagedType.LPStr)] string fname, [In()] [MarshalAs(UnmanagedType.LPStr)] string parent, ref IntPtr outdata, ref uint outbytes, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///data: char* ///m: Malloc ///f: Free ///d: void* public delegate void IncludeClose([In()] [MarshalAs(UnmanagedType.LPStr)] string data, IntPtr m, IntPtr f, IntPtr d); public enum AstDataTypeType { NONE, BOOL, INT, UINT, FLOAT, FLOAT_SNORM, FLOAT_UNORM, HALF, DOUBLE, STRING, SAMPLER_1D, SAMPLER_2D, SAMPLER_3D, SAMPLER_CUBE, SAMPLER_STATE, SAMPLER_COMPARISON_STATE, STRUCT, ARRAY, VECTOR, MATRIX, BUFFER, FUNCTION, USER, } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeStructMember { /// AstDataType* public IntPtr datatype; /// char* [MarshalAs(UnmanagedType.LPStr)] public string identifier; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeStruct { /// AstDataTypeType public AstDataTypeType type; /// AstDataTypeStructMember* public IntPtr members; /// int public int member_count; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeArray { /// AstDataTypeType public AstDataTypeType type; /// AstDataType* public IntPtr @base; /// int public int elements; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeMatrix { /// AstDataTypeType public AstDataTypeType type; /// AstDataType* public IntPtr @base; /// int public int rows; /// int public int columns; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeBuffer { /// AstDataTypeType public AstDataTypeType type; /// AstDataType* public IntPtr @base; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeFunction { /// AstDataTypeType public AstDataTypeType type; /// AstDataType* public IntPtr retval; /// AstDataType** public IntPtr @params; /// int public int num_params; /// int public int intrinsic; } [StructLayout(LayoutKind.Sequential)] public struct AstDataTypeUser { /// AstDataTypeType public AstDataTypeType type; /// AstDataType* public IntPtr details; /// char* public IntPtr name; } [StructLayout(LayoutKind.Explicit)] public struct AstDataType { /// AstDataTypeType [FieldOffset(0)] public AstDataTypeType type; /// AstDataTypeArray [FieldOffset(0)] public AstDataTypeArray array; /// AstDataTypeStruct [FieldOffset(0)] public AstDataTypeStruct structure; /// AstDataTypeVector->AstDataTypeArray [FieldOffset(0)] public AstDataTypeArray vector; /// AstDataTypeMatrix [FieldOffset(0)] public AstDataTypeMatrix matrix; /// AstDataTypeBuffer [FieldOffset(0)] public AstDataTypeBuffer buffer; /// AstDataTypeUser [FieldOffset(0)] public AstDataTypeUser user; /// AstDataTypeFunction [FieldOffset(0)] public AstDataTypeFunction function; } public enum AstNodeType { OP_START_RANGE, OP_START_RANGE_UNARY, OP_PREINCREMENT, OP_PREDECREMENT, OP_NEGATE, OP_COMPLEMENT, OP_NOT, OP_POSTINCREMENT, OP_POSTDECREMENT, OP_CAST, OP_END_RANGE_UNARY, OP_START_RANGE_BINARY, OP_COMMA, OP_MULTIPLY, OP_DIVIDE, OP_MODULO, OP_ADD, OP_SUBTRACT, OP_LSHIFT, OP_RSHIFT, OP_LESSTHAN, OP_GREATERTHAN, OP_LESSTHANOREQUAL, OP_GREATERTHANOREQUAL, OP_EQUAL, OP_NOTEQUAL, OP_BINARYAND, OP_BINARYXOR, OP_BINARYOR, OP_LOGICALAND, OP_LOGICALOR, OP_ASSIGN, OP_MULASSIGN, OP_DIVASSIGN, OP_MODASSIGN, OP_ADDASSIGN, OP_SUBASSIGN, OP_LSHIFTASSIGN, OP_RSHIFTASSIGN, OP_ANDASSIGN, OP_XORASSIGN, OP_ORASSIGN, OP_DEREF_ARRAY, OP_END_RANGE_BINARY, OP_START_RANGE_TERNARY, OP_CONDITIONAL, OP_END_RANGE_TERNARY, OP_START_RANGE_DATA, OP_IDENTIFIER, OP_INT_LITERAL, OP_FLOAT_LITERAL, OP_STRING_LITERAL, OP_BOOLEAN_LITERAL, OP_END_RANGE_DATA, OP_START_RANGE_MISC, OP_DEREF_STRUCT, OP_CALLFUNC, OP_CONSTRUCTOR, OP_END_RANGE_MISC, OP_END_RANGE, COMPUNIT_START_RANGE, COMPUNIT_FUNCTION, COMPUNIT_TYPEDEF, COMPUNIT_STRUCT, COMPUNIT_VARIABLE, COMPUNIT_END_RANGE, STATEMENT_START_RANGE, STATEMENT_EMPTY, STATEMENT_BREAK, STATEMENT_CONTINUE, STATEMENT_DISCARD, STATEMENT_BLOCK, STATEMENT_EXPRESSION, STATEMENT_IF, STATEMENT_SWITCH, STATEMENT_FOR, STATEMENT_DO, STATEMENT_WHILE, STATEMENT_RETURN, STATEMENT_TYPEDEF, STATEMENT_STRUCT, STATEMENT_VARDECL, STATEMENT_END_RANGE, MISC_START_RANGE, FUNCTION_PARAMS, FUNCTION_SIGNATURE, SCALAR_OR_ARRAY, TYPEDEF, PACK_OFFSET, VARIABLE_LOWLEVEL, ANNOTATION, VARIABLE_DECLARATION, STRUCT_DECLARATION, STRUCT_MEMBER, SWITCH_CASE, ARGUMENTS, MISC_END_RANGE, END_RANGE, } [StructLayout(LayoutKind.Sequential)] public struct AstNodeInfo { /// AstNodeType public AstNodeType type; /// char* public IntPtr filename; /// unsigned int public uint line; } public enum AstVariableAttributes { // EXTERN -> (1<<0) EXTERN = (1) << (0), // NOINTERPOLATION -> (1<<1) NOINTERPOLATION = (1) << (1), // SHARED -> (1<<2) SHARED = (1) << (2), // STATIC -> (1<<3) STATIC = (1) << (3), // UNIFORM -> (1<<4) UNIFORM = (1) << (4), // VOLATILE -> (1<<5) VOLATILE = (1) << (5), // CONST -> (1<<6) CONST = (1) << (6), // ROWMAJOR -> (1<<7) ROWMAJOR = (1) << (7), // COLUMNMAJOR -> (1<<8) COLUMNMAJOR = (1) << (8), } public enum AstIfAttributes { NONE, BRANCH, FLATTEN, IFALL, IFANY, PREDICATE, PREDICATEBLOCK, } public enum AstSwitchAttributes { NONE, FLATTEN, BRANCH, FORCECASE, CALL, } [StructLayout(LayoutKind.Sequential)] public struct AstGeneric { /// AstNodeInfo public AstNodeInfo ast; } [StructLayout(LayoutKind.Sequential)] public struct AstExpression { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; } [StructLayout(LayoutKind.Sequential)] public struct AstArguments { /// AstNodeInfo public AstNodeInfo ast; /// AstExpression* public IntPtr argument; /// AstArguments* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionUnary { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr operand; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionBinary { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr left; /// AstExpression* public IntPtr right; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionTernary { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr left; /// AstExpression* public IntPtr center; /// AstExpression* public IntPtr right; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionIdentifier { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// char* public IntPtr identifier; /// int public int index; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionIntLiteral { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// int public int value; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionFloatLiteral { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// double public double value; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionStringLiteral { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// char* public IntPtr @string; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionBooleanLiteral { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// int public int value; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionConstructor { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstArguments* public IntPtr args; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionDerefStruct { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr identifier; /// char* public IntPtr member; /// int public int isswizzle; /// int public int member_index; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionCallFunction { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpressionIdentifier* public IntPtr identifier; /// AstArguments* public IntPtr args; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionCast { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr operand; } [StructLayout(LayoutKind.Sequential)] public struct AstCompilationUnit { /// AstNodeInfo public AstNodeInfo ast; /// AstCompilationUnit* public IntPtr next; } public enum AstFunctionStorageClass { NONE, INLINE, } public enum AstInputModifier { NONE, IN, OUT, INOUT, UNIFORM, } public enum AstInterpolationModifier { NONE, LINEAR, CENTROID, NOINTERPOLATION, NOPERSPECTIVE, SAMPLE, } [StructLayout(LayoutKind.Sequential)] public struct AstFunctionParameters { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstInputModifier public AstInputModifier input_modifier; /// char* public IntPtr identifier; /// char* public IntPtr semantic; /// AstInterpolationModifier public AstInterpolationModifier interpolation_modifier; /// AstExpression* public IntPtr initializer; /// AstFunctionParameters* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstFunctionSignature { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// char* public IntPtr identifier; /// AstFunctionParameters* public IntPtr @params; /// AstFunctionStorageClass public AstFunctionStorageClass storage_class; /// char* public IntPtr semantic; } [StructLayout(LayoutKind.Sequential)] public struct AstScalarOrArray { /// AstNodeInfo public AstNodeInfo ast; /// char* public IntPtr identifier; /// int public int isarray; /// AstExpression* public IntPtr dimension; } [StructLayout(LayoutKind.Sequential)] public struct AstAnnotations { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// AstExpression* public IntPtr initializer; /// AstAnnotations* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstPackOffset { /// AstNodeInfo public AstNodeInfo ast; /// char* public IntPtr ident1; /// char* public IntPtr ident2; } [StructLayout(LayoutKind.Sequential)] public struct AstVariableLowLevel { /// AstNodeInfo public AstNodeInfo ast; /// AstPackOffset* public IntPtr packoffset; /// char* public IntPtr register_name; } [StructLayout(LayoutKind.Sequential)] public struct AstStructMembers { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// char* public IntPtr semantic; /// AstScalarOrArray* public IntPtr details; /// AstInterpolationModifier public AstInterpolationModifier interpolation_mod; /// AstStructMembers* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstStructDeclaration { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// char* public IntPtr name; /// AstStructMembers* public IntPtr members; } [StructLayout(LayoutKind.Sequential)] public struct AstVariableDeclaration { /// AstNodeInfo public AstNodeInfo ast; /// int public int attributes; /// AstDataType* public IntPtr datatype; /// AstStructDeclaration* public IntPtr anonymous_datatype; /// AstScalarOrArray* public IntPtr details; /// char* public IntPtr semantic; /// AstAnnotations* public IntPtr annotations; /// AstExpression* public IntPtr initializer; /// AstVariableLowLevel* public IntPtr lowlevel; /// AstVariableDeclaration* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstBlockStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstStatement* public IntPtr statements; } [StructLayout(LayoutKind.Sequential)] public struct AstReturnStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstExpression* public IntPtr expr; } [StructLayout(LayoutKind.Sequential)] public struct AstExpressionStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstExpression* public IntPtr expr; } [StructLayout(LayoutKind.Sequential)] public struct AstIfStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// int public int attributes; /// AstExpression* public IntPtr expr; /// AstStatement* public IntPtr statement; /// AstStatement* public IntPtr else_statement; } [StructLayout(LayoutKind.Sequential)] public struct AstSwitchCases { /// AstNodeInfo public AstNodeInfo ast; /// AstExpression* public IntPtr expr; /// AstStatement* public IntPtr statement; /// AstSwitchCases* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct AstSwitchStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// int public int attributes; /// AstExpression* public IntPtr expr; /// AstSwitchCases* public IntPtr cases; } [StructLayout(LayoutKind.Sequential)] public struct AstWhileStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// int public int unroll; /// AstExpression* public IntPtr expr; /// AstStatement* public IntPtr statement; } [StructLayout(LayoutKind.Sequential)] public struct AstForStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// int public int unroll; /// AstVariableDeclaration* public IntPtr var_decl; /// AstExpression* public IntPtr initializer; /// AstExpression* public IntPtr looptest; /// AstExpression* public IntPtr counter; /// AstStatement* public IntPtr statement; } [StructLayout(LayoutKind.Sequential)] public struct AstTypedef { /// AstNodeInfo public AstNodeInfo ast; /// AstDataType* public IntPtr datatype; /// int public int isconst; /// AstScalarOrArray* public IntPtr details; } [StructLayout(LayoutKind.Sequential)] public struct AstTypedefStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstTypedef* public IntPtr type_info; } [StructLayout(LayoutKind.Sequential)] public struct AstVarDeclStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstVariableDeclaration* public IntPtr declaration; } [StructLayout(LayoutKind.Sequential)] public struct AstStructStatement { /// AstNodeInfo public AstNodeInfo ast; /// AstStatement* public IntPtr next; /// AstStructDeclaration* public IntPtr struct_info; } [StructLayout(LayoutKind.Sequential)] public struct AstCompilationUnitFunction { /// AstNodeInfo public AstNodeInfo ast; /// AstCompilationUnit* public IntPtr next; /// AstFunctionSignature* public IntPtr declaration; /// AstStatement* public IntPtr definition; /// int public int index; } [StructLayout(LayoutKind.Sequential)] public struct AstCompilationUnitTypedef { /// AstNodeInfo public AstNodeInfo ast; /// AstCompilationUnit* public IntPtr next; /// AstTypedef* public IntPtr type_info; } [StructLayout(LayoutKind.Sequential)] public struct AstCompilationUnitStruct { /// AstNodeInfo public AstNodeInfo ast; /// AstCompilationUnit* public IntPtr next; /// AstStructDeclaration* public IntPtr struct_info; } [StructLayout(LayoutKind.Sequential)] public struct AstCompilationUnitVariable { /// AstNodeInfo public AstNodeInfo ast; /// AstCompilationUnit* public IntPtr next; /// AstVariableDeclaration* public IntPtr declaration; } [StructLayout(LayoutKind.Explicit)] public struct AstNode { /// AstNodeInfo [FieldOffset(0)] public AstNodeInfo ast; /// AstGeneric [FieldOffset(0)] public AstGeneric generic; /// AstExpression [FieldOffset(0)] public AstExpression expression; /// AstArguments [FieldOffset(0)] public AstArguments arguments; /// AstExpressionUnary [FieldOffset(0)] public AstExpressionUnary unary; /// AstExpressionBinary [FieldOffset(0)] public AstExpressionBinary binary; /// AstExpressionTernary [FieldOffset(0)] public AstExpressionTernary ternary; /// AstExpressionIdentifier [FieldOffset(0)] public AstExpressionIdentifier identifier; /// AstExpressionIntLiteral [FieldOffset(0)] public AstExpressionIntLiteral intliteral; /// AstExpressionFloatLiteral [FieldOffset(0)] public AstExpressionFloatLiteral floatliteral; /// AstExpressionStringLiteral [FieldOffset(0)] public AstExpressionStringLiteral stringliteral; /// AstExpressionBooleanLiteral [FieldOffset(0)] public AstExpressionBooleanLiteral boolliteral; /// AstExpressionConstructor [FieldOffset(0)] public AstExpressionConstructor constructor; /// AstExpressionDerefStruct [FieldOffset(0)] public AstExpressionDerefStruct derefstruct; /// AstExpressionCallFunction [FieldOffset(0)] public AstExpressionCallFunction callfunc; /// AstExpressionCast [FieldOffset(0)] public AstExpressionCast cast; /// AstCompilationUnit [FieldOffset(0)] public AstCompilationUnit compunit; /// AstFunctionParameters [FieldOffset(0)] public AstFunctionParameters @params; /// AstFunctionSignature [FieldOffset(0)] public AstFunctionSignature funcsig; /// AstScalarOrArray [FieldOffset(0)] public AstScalarOrArray soa; /// AstAnnotations [FieldOffset(0)] public AstAnnotations annotations; /// AstPackOffset [FieldOffset(0)] public AstPackOffset packoffset; /// AstVariableLowLevel [FieldOffset(0)] public AstVariableLowLevel varlowlevel; /// AstStructMembers [FieldOffset(0)] public AstStructMembers structmembers; /// AstStructDeclaration [FieldOffset(0)] public AstStructDeclaration structdecl; /// AstVariableDeclaration [FieldOffset(0)] public AstVariableDeclaration vardecl; /// AstStatement [FieldOffset(0)] public AstStatement stmt; /// AstEmptyStatement->AstStatement [FieldOffset(0)] public AstStatement emptystmt; /// AstBreakStatement->AstStatement [FieldOffset(0)] public AstStatement breakstmt; /// AstContinueStatement->AstStatement [FieldOffset(0)] public AstStatement contstmt; /// AstDiscardStatement->AstStatement [FieldOffset(0)] public AstStatement discardstmt; /// AstBlockStatement [FieldOffset(0)] public AstBlockStatement blockstmt; /// AstReturnStatement [FieldOffset(0)] public AstReturnStatement returnstmt; /// AstExpressionStatement [FieldOffset(0)] public AstExpressionStatement exprstmt; /// AstIfStatement [FieldOffset(0)] public AstIfStatement ifstmt; /// AstSwitchCases [FieldOffset(0)] public AstSwitchCases cases; /// AstSwitchStatement [FieldOffset(0)] public AstSwitchStatement switchstmt; /// AstWhileStatement [FieldOffset(0)] public AstWhileStatement whilestmt; /// AstDoStatement->AstWhileStatement [FieldOffset(0)] public AstWhileStatement dostmt; /// AstForStatement [FieldOffset(0)] public AstForStatement forstmt; /// AstTypedef [FieldOffset(0)] public AstTypedef typdef; /// AstTypedefStatement [FieldOffset(0)] public AstTypedefStatement typedefstmt; /// AstVarDeclStatement [FieldOffset(0)] public AstVarDeclStatement vardeclstmt; /// AstStructStatement [FieldOffset(0)] public AstStructStatement structstmt; /// AstCompilationUnitFunction [FieldOffset(0)] public AstCompilationUnitFunction funcunit; /// AstCompilationUnitTypedef [FieldOffset(0)] public AstCompilationUnitTypedef typedefunit; /// AstCompilationUnitStruct [FieldOffset(0)] public AstCompilationUnitStruct structunit; /// AstCompilationUnitVariable [FieldOffset(0)] public AstCompilationUnitVariable varunit; } [StructLayout(LayoutKind.Sequential)] public struct AstData { /// int public int error_count; /// Error* public IntPtr errors; /// char* [MarshalAs(UnmanagedType.LPStr)] public string source_profile; /// AstNode* public IntPtr ast; /// malloc public IntPtr Malloc; /// Free public IntPtr free; /// void* public IntPtr malloc_data; /// void* public IntPtr opaque; } public enum irNodeType { START_RANGE_EXPR, CONSTANT, TEMP, BINOP, MEMORY, CALL, ESEQ, ARRAY, CONVERT, SWIZZLE, CONSTRUCT, END_RANGE_EXPR, START_RANGE_STMT, MOVE, EXPR_STMT, JUMP, CJUMP, SEQ, LABEL, DISCARD, END_RANGE_STMT, START_RANGE_MISC, EXPRLIST, END_RANGE_MISC, END_RANGE, } [StructLayout(LayoutKind.Sequential)] public struct irNodeInfo { /// irNodeType public irNodeType type; /// char* public IntPtr filename; /// unsigned int public uint line; } [StructLayout(LayoutKind.Sequential)] public struct irGeneric { /// irNodeInfo public irNodeInfo ir; } public enum irBinOpType { ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULO, AND, OR, XOR, LSHIFT, RSHIFT, UNKNOWN, } public enum irConditionType { EQL, NEQ, LT, GT, LEQ, GEQ, UNKNOWN, } [StructLayout(LayoutKind.Sequential)] public struct irExprInfo { /// irNodeInfo public irNodeInfo ir; /// AstDataTypeType public AstDataTypeType type; /// int public int elements; } [StructLayout(LayoutKind.Sequential)] public struct irConstant { /// irExprInfo public irExprInfo info; /// Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111 public Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111 value; } [StructLayout(LayoutKind.Sequential)] public struct irTemp { /// irExprInfo public irExprInfo info; /// int public int index; } [StructLayout(LayoutKind.Sequential)] public struct irBinOp { /// irExprInfo public irExprInfo info; /// irBinOpType public irBinOpType op; /// irExpression* public IntPtr left; /// irExpression* public IntPtr right; } [StructLayout(LayoutKind.Sequential)] public struct irMemory { /// irExprInfo public irExprInfo info; /// int public int index; } [StructLayout(LayoutKind.Sequential)] public struct irCall { /// irExprInfo public irExprInfo info; /// int public int index; /// irExprList* public IntPtr args; } [StructLayout(LayoutKind.Sequential)] public struct irESeq { /// irExprInfo public irExprInfo info; /// irStatement* public IntPtr stmt; /// irExpression* public IntPtr expr; } [StructLayout(LayoutKind.Sequential)] public struct irArray { /// irExprInfo public irExprInfo info; /// irExpression* public IntPtr array; /// irExpression* public IntPtr element; } [StructLayout(LayoutKind.Sequential)] public struct irConvert { /// irExprInfo public irExprInfo info; /// irExpression* public IntPtr expr; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct irSwizzle { /// irExprInfo public irExprInfo info; /// irExpression* public IntPtr expr; /// char[4] public IntPtr channels; } [StructLayout(LayoutKind.Sequential)] public struct irConstruct { /// irExprInfo public irExprInfo info; /// irExprList* public IntPtr args; } [StructLayout(LayoutKind.Explicit)] public struct irExpression { /// irNodeInfo [FieldOffset(0)] public irNodeInfo ir; /// irExprInfo [FieldOffset(0)] public irExprInfo info; /// irConstant [FieldOffset(0)] public irConstant constant; /// irTemp [FieldOffset(0)] public irTemp temp; /// irBinOp [FieldOffset(0)] public irBinOp binop; /// irMemory [FieldOffset(0)] public irMemory memory; /// irCall [FieldOffset(0)] public irCall call; /// irESeq [FieldOffset(0)] public irESeq eseq; /// irArray [FieldOffset(0)] public irArray array; /// irConvert [FieldOffset(0)] public irConvert convert; /// irSwizzle [FieldOffset(0)] public irSwizzle swizzle; /// irConstruct [FieldOffset(0)] public irConstruct construct; } [StructLayout(LayoutKind.Sequential)] public struct irMove { /// irNodeInfo public irNodeInfo ir; /// irExpression* public IntPtr dst; /// irExpression* public IntPtr src; /// int public int writemask; } [StructLayout(LayoutKind.Sequential)] public struct irExprStmt { /// irNodeInfo public irNodeInfo ir; /// irExpression* public IntPtr expr; } [StructLayout(LayoutKind.Sequential)] public struct irJump { /// irNodeInfo public irNodeInfo ir; /// int public int label; } [StructLayout(LayoutKind.Sequential)] public struct irCJump { /// irNodeInfo public irNodeInfo ir; /// irConditionType public irConditionType cond; /// irExpression* public IntPtr left; /// irExpression* public IntPtr right; /// int public int iftrue; /// int public int iffalse; } [StructLayout(LayoutKind.Sequential)] public struct irSeq { /// irNodeInfo public irNodeInfo ir; /// irStatement* public IntPtr first; /// irStatement* public IntPtr next; } [StructLayout(LayoutKind.Sequential)] public struct irLabel { /// irNodeInfo public irNodeInfo ir; /// int public int index; } [StructLayout(LayoutKind.Explicit)] public struct irStatement { /// irNodeInfo [FieldOffset(0)] public irNodeInfo ir; /// irGeneric [FieldOffset(0)] public irGeneric generic; /// irMove [FieldOffset(0)] public irMove move; /// irExprStmt [FieldOffset(0)] public irExprStmt expr; /// irJump [FieldOffset(0)] public irJump jump; /// irCJump [FieldOffset(0)] public irCJump cjump; /// irSeq [FieldOffset(0)] public irSeq seq; /// irLabel [FieldOffset(0)] public irLabel label; /// irDiscard->irGeneric [FieldOffset(0)] public irGeneric discard; } [StructLayout(LayoutKind.Sequential)] public struct irExprList { /// irNodeInfo public irNodeInfo ir; /// irExpression* public IntPtr expr; /// irExprList* public IntPtr next; } [StructLayout(LayoutKind.Explicit)] public struct irMisc { /// irNodeInfo [FieldOffset(0)] public irNodeInfo ir; /// irGeneric [FieldOffset(0)] public irGeneric generic; /// irExprList [FieldOffset(0)] public irExprList exprlist; } [StructLayout(LayoutKind.Explicit)] public struct irNode { /// irNodeInfo [FieldOffset(0)] public irNodeInfo ir; /// irGeneric [FieldOffset(0)] public irGeneric generic; /// irExpression [FieldOffset(0)] public irExpression expr; /// irStatement [FieldOffset(0)] public irStatement stmt; /// irMisc [FieldOffset(0)] public irMisc misc; } [StructLayout(LayoutKind.Sequential)] public struct CompileData { /// int public int error_count; /// Error* public IntPtr errors; /// int public int warning_count; /// Error* public IntPtr warnings; /// char* [MarshalAs(UnmanagedType.LPStr)] public string source_profile; /// char* [MarshalAs(UnmanagedType.LPStr)] public string output; /// int public int output_len; /// int public int symbol_count; /// Symbol* public IntPtr symbols; /// Malloc public IntPtr malloc; /// Free public IntPtr free; /// void* public IntPtr malloc_data; } /// Return Type: void* ///fnname: char* ///data: void* public delegate IntPtr glGetProcAddress([In()] [MarshalAs(UnmanagedType.LPStr)] string fnname, IntPtr data); [StructLayout(LayoutKind.Explicit)] public struct Anonymous_5371dd6a_e42a_47c1_91d1_a2af9a8283be { /// float[4] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.R4)] [FieldOffset(0)] public IntPtr f; /// int[4] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.I4)] [FieldOffset(0)] public IntPtr i; /// int [FieldOffset(0)] public int b; } [StructLayout(LayoutKind.Explicit)] public struct Anonymous_3a13e6d2_72d8_4c86_b5bf_9aff36c73111 { /// int[16] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.I4)] [FieldOffset(0)] public IntPtr ival; /// float[16] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.R4)] [FieldOffset(0)] public IntPtr fval; } public enum UniformType { /// UNKNOWN -> -1 UNKNOWN = -1, FLOAT, INT, BOOL, } public enum SamplerType { /// UNKNOWN -> -1 SAMPLER_UNKNOWN = -1, SAMPLER_2D = 0, SAMPLER_CUBE = 1, SAMPLER_VOLUME = 2, SAMPLER_1D = 3, } public enum Usage { /// UNKNOWN -> -1 UNKNOWN = -1, POSITION, BLENDWEIGHT, BLENDINDICES, NORMAL, POINTSIZE, TEXCOORD, TANGENT, BINORMAL, TESSFACTOR, POSITIONT, COLOR, FOG, DEPTH, SAMPLE, TOTAL, } public enum SymbolClass { SCALAR, VECTOR, MATRIX_ROWS, MATRIX_COLUMNS, OBJECT, STRUCT, } public enum SymbolType { VOID, BOOL, INT, FLOAT, STRING, TEXTURE, TEXTURE1D, TEXTURE2D, TEXTURE3D, TEXTURECUBE, SAMPLER, SAMPLER1D, SAMPLER2D, SAMPLER3D, SAMPLERCUBE, PIXELSHADER, VERTEXSHADER, PIXELFRAGMENT, VERTEXFRAGMENT, UNSUPPORTED, } public enum SymbolRegisterSet { BOOL, INT4, FLOAT4, SAMPLER, } public enum ShaderType { // UNKNOWN -> 0 UNKNOWN = 0, // PIXEL -> (1<<0) PIXEL = (1) << (0), // VERTEX -> (1<<1) VERTEX = (1) << (1), // GEOMETRY -> (1<<2) GEOMETRY = (1) << (2), // ANY -> 0xFFFFFFFF ANY = -1, } public enum IncludeType { LOCAL, SYSTEM, } public enum AttributeType { // UNKNOWN -> -1 UNKNOWN = -1, BYTE, UBYTE, SHORT, USHORT, INT, UINT, FLOAT, DOUBLE, HALF_FLOAT, } public partial class NativeMethods { /// Return Type: int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_version")] public static extern int Version(); /// Return Type: char* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_changeset")] public static extern IntPtr Changeset(); /// Return Type: int ///profile: char* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_maxShaderModel")] public static extern int MaxShaderModel([In()] [MarshalAs(UnmanagedType.LPStr)] string profile); /// Return Type: ParseData* ///tokenbuf: char* ///bufsize: int ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_parseExpression")] public static extern IntPtr ParseExpression([In()] byte[] tokenbuf, int bufsize, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///param0: Preshader* ///param1: float* ///param2: float* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_runPreshader")] public static extern void RunPreshader(ref Preshader param0, ref float param1, ref float param2); /// Return Type: ParseData* ///profile: char* ///tokenbuf: char* ///bufsize: int ///swiz: Swizzle* ///swizcount: int ///smap: SamplerMap* ///smapcount: int ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_parse")] public static extern IntPtr Parse([In()] [MarshalAs(UnmanagedType.LPStr)] string profile, [In()] byte[] tokenbuf, int bufsize, IntPtr swiz, int swizcount, IntPtr smap, int smapcount, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///data: ParseData* [DllImport(mojoshader_dll, EntryPoint = "FreeParseData")] public static extern void FreeParseData(ref ParseData data); /// Return Type: Effect* ///profile: char* ///buf: char* ///_len: int ///swiz: Swizzle* ///swizcount: int ///smap: SamplerMap* ///smapcount: int ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_parseEffect")] public static extern IntPtr ParseEffect([In()] [MarshalAs(UnmanagedType.LPStr)] string profile, [In()] [MarshalAs(UnmanagedType.LPStr)] string buf, int _len, ref Swizzle swiz, int swizcount, ref SamplerMap smap, int smapcount, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///effect: Effect* [DllImport(mojoshader_dll, EntryPoint = "FreeEffect")] public static extern void FreeEffect(ref Effect effect); /// Return Type: PreprocessData* ///filename: char* ///source: char* ///sourcelen: unsigned int ///defines: PreprocessorDefine* ///define_count: unsigned int ///include_open: IncludeOpen ///include_close: IncludeClose ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_preprocess")] public static extern IntPtr Preprocess([In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defines, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///data: PreprocessData* [DllImport(mojoshader_dll, EntryPoint = "FreePreprocessData")] public static extern void FreePreprocessData(ref PreprocessData data); /// Return Type: ParseData* ///filename: char* ///source: char* ///sourcelen: unsigned int ///comments: char** ///comment_count: unsigned int ///symbols: Symbol* ///symbol_count: unsigned int ///defines: PreprocessorDefine* ///define_count: unsigned int ///include_open: IncludeOpen ///include_close: IncludeClose ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_assemble")] public static extern IntPtr Assemble([In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref IntPtr comments, uint comment_count, ref Symbol symbols, uint symbol_count, ref PreprocessorDefine defines, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d); /// Return Type: AstData* ///srcprofile: char* ///filename: char* ///source: char* ///sourcelen: unsigned int ///defs: PreprocessorDefine* ///define_count: unsigned int ///include_open: IncludeOpen ///include_close: IncludeClose ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_parseAst")] public static extern IntPtr ParseAst([In()] [MarshalAs(UnmanagedType.LPStr)] string srcprofile, [In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defs, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///data: AstData* [DllImport(mojoshader_dll, EntryPoint = "FreeAstData")] public static extern void FreeAstData(ref AstData data); /// Return Type: CompileData* ///srcprofile: char* ///filename: char* ///source: char* ///sourcelen: unsigned int ///defs: PreprocessorDefine* ///define_count: unsigned int ///include_open: IncludeOpen ///include_close: IncludeClose ///m: Malloc ///f: Free ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_compile")] public static extern IntPtr Compile([In()] [MarshalAs(UnmanagedType.LPStr)] string srcprofile, [In()] [MarshalAs(UnmanagedType.LPStr)] string filename, [In()] [MarshalAs(UnmanagedType.LPStr)] string source, uint sourcelen, ref PreprocessorDefine defs, uint define_count, IncludeOpen include_open, IncludeClose include_close, IntPtr m, IntPtr f, IntPtr d); /// Return Type: void ///data: CompileData* [DllImport(mojoshader_dll, EntryPoint = "FreeCompileData")] public static extern void FreeCompileData(ref CompileData data); /// Return Type: int ///lookup: glGetProcAddress ///d: void* ///profs: char** ///size: int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glAvailableProfiles")] public static extern int glAvailableProfiles(glGetProcAddress lookup, IntPtr d, ref IntPtr profs, int size); /// Return Type: char* ///lookup: glGetProcAddress ///d: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glBestProfile")] public static extern IntPtr glBestProfile(glGetProcAddress lookup, IntPtr d); /// Return Type: char* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetError")] public static extern IntPtr glGetError(); /// Return Type: int ///shader_type: ShaderType->Anonymous_96517ad6_cc69_4542_8537_054e63919d54 [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glMaxUniforms")] public static extern int glMaxUniforms(ShaderType shader_type); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetVertexShaderUniformF")] public static extern void glSetVertexShaderUniformF(uint idx, ref float data, uint vec4count); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetVertexShaderUniformF")] public static extern void glGetVertexShaderUniformF(uint idx, ref float data, uint vec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///ivec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetVertexShaderUniformI")] public static extern void glSetVertexShaderUniformI(uint idx, ref int data, uint ivec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///ivec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetVertexShaderUniformI")] public static extern void glGetVertexShaderUniformI(uint idx, ref int data, uint ivec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///bcount: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetVertexShaderUniformB")] public static extern void glSetVertexShaderUniformB(uint idx, ref int data, uint bcount); /// Return Type: void ///idx: unsigned int ///data: int* ///bcount: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetVertexShaderUniformB")] public static extern void glGetVertexShaderUniformB(uint idx, ref int data, uint bcount); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetPixelShaderUniformF")] public static extern void glSetPixelShaderUniformF(uint idx, ref float data, uint vec4count); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetPixelShaderUniformF")] public static extern void glGetPixelShaderUniformF(uint idx, ref float data, uint vec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///ivec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetPixelShaderUniformI")] public static extern void glSetPixelShaderUniformI(uint idx, ref int data, uint ivec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///ivec4count: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetPixelShaderUniformI")] public static extern void glGetPixelShaderUniformI(uint idx, ref int data, uint ivec4count); /// Return Type: void ///idx: unsigned int ///data: int* ///bcount: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetPixelShaderUniformB")] public static extern void glSetPixelShaderUniformB(uint idx, ref int data, uint bcount); /// Return Type: void ///idx: unsigned int ///data: int* ///bcount: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetPixelShaderUniformB")] public static extern void glGetPixelShaderUniformB(uint idx, ref int data, uint bcount); /// Return Type: void ///sampler: unsigned int ///mat00: float ///mat01: float ///mat10: float ///mat11: float ///lscale: float ///loffset: float [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetLegacyBumpMapEnv")] public static extern void glSetLegacyBumpMapEnv(uint sampler, float mat00, float mat01, float mat10, float mat11, float lscale, float loffset); /// Return Type: void ///usage: Usage->Anonymous_9c01433d_7bb5_4c50_bf77_e65cef0661b5 ///index: int ///size: unsigned int ///type: AttributeType->Anonymous_2f2591e6_1657_418c_9f54_80f3acd43cbe ///normalized: int ///stride: unsigned int ///ptr: void* [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetVertexAttribute")] public static extern void glSetVertexAttribute(Usage usage, int index, uint size, AttributeType type, int normalized, uint stride, IntPtr ptr); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4n: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetVertexPreshaderUniformF")] public static extern void glSetVertexPreshaderUniformF(uint idx, ref float data, uint vec4n); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4n: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetVertexPreshaderUniformF")] public static extern void glGetVertexPreshaderUniformF(uint idx, ref float data, uint vec4n); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4n: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glSetPixelPreshaderUniformF")] public static extern void glSetPixelPreshaderUniformF(uint idx, ref float data, uint vec4n); /// Return Type: void ///idx: unsigned int ///data: float* ///vec4n: unsigned int [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glGetPixelPreshaderUniformF")] public static extern void glGetPixelPreshaderUniformF(uint idx, ref float data, uint vec4n); /// Return Type: void [DllImport(mojoshader_dll, EntryPoint = "MOJOSHADER_glProgramReady")] public static extern void glProgramReady(); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/Preprocessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using System.Text; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using CppNet; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { public class Preprocessor : PreprocessorListener, VirtualFileSystem { private EffectContent _input; private ContentProcessorContext _context; private string _fullFilePath; private CppNet.Preprocessor _pp; public Preprocessor(EffectContent input, ContentProcessorContext context, string fullFilePath) { this._input = input; this._context = context; this._fullFilePath = fullFilePath; _pp = new CppNet.Preprocessor(); _pp.EmitExtraLineInfo = false; _pp.addFeature(Feature.LINEMARKERS); _pp.setListener(this); _pp.setFileSystem(this); } internal void AddMacro(string name, string value) { _pp.addMacro(name, value); } public string Preprocess() { _pp.setQuoteIncludePath(new List { Path.GetDirectoryName(_fullFilePath) }); string effectCode = _input.EffectCode; effectCode = effectCode.Replace("#line", "//--WORKAROUND#line"); StringLexerSource inputSource = new PPStringLexerSource(effectCode, true, _fullFilePath); _pp.addInput(inputSource); StringBuilder result = new StringBuilder(); while (true) { Token token = _pp.token(); int tokenType = token.getType(); switch (tokenType) { case CppNet.Token.EOF: return result.ToString(); case CppNet.Token.CPPCOMMENT: { string tokenText = token.getText(); if (tokenText.StartsWith("//--WORKAROUND#line")) { result.Append(tokenText.Replace("//--WORKAROUND#line", "#line")); } } break; case CppNet.Token.CCOMMENT: { string tokenText = token.getText(); if (tokenText != null) { // Need to preserve line breaks so that line numbers are correct. foreach (char c in tokenText) if (c == '\n') result.Append(c); } } break; default: { string tokenText = token.getText(); if (tokenText != null) result.Append(tokenText); } break; } } } #region PreprocessorListener void PreprocessorListener.handleWarning(Source source, int line, int column, string msg) { string file = ((PPStringLexerSource)source).Path; ContentIdentity contentIdentity = new ContentIdentity(file, null, line + "," + column); _context.Logger.LogWarning(null, contentIdentity, msg); } void PreprocessorListener.handleError(Source source, int line, int column, string msg) { string file = ((PPStringLexerSource)source).Path; ContentIdentity contentIdentity = new ContentIdentity(file, null, line + "," + column); throw new InvalidContentException(msg, contentIdentity); } void PreprocessorListener.handleSourceChange(Source source, string ev) { } #endregion PreprocessorListener #region VirtualFileSystem VirtualFile VirtualFileSystem.getFile(string path) { return new PPVirtualFile((VirtualFileSystem)this, path); } VirtualFile VirtualFileSystem.getFile(string dir, string name) { return new PPVirtualFile((VirtualFileSystem)this, Path.Combine(dir, name)); } #endregion VirtualFileSystem private class PPVirtualFile : VirtualFile { VirtualFileSystem _virtualFileSystem; private readonly string _path; public PPVirtualFile(VirtualFileSystem virtualFileSystem, string path) { this._virtualFileSystem = virtualFileSystem; this._path = Path.GetFullPath(path); } bool VirtualFile.isFile() { return File.Exists(_path) && !File.GetAttributes(_path).HasFlag(FileAttributes.Directory); } string VirtualFile.getPath() { return _path; } string VirtualFile.getName() { return Path.GetFileName(_path); } VirtualFile VirtualFile.getParentFile() { return new PPVirtualFile(_virtualFileSystem, Path.GetDirectoryName(_path)); } VirtualFile VirtualFile.getChildFile(string name) { return new PPVirtualFile(_virtualFileSystem, Path.Combine(_path, name)); } Source VirtualFile.getSource() { // Add the include dependencies so that if they change // it will trigger a rebuild of this effect. ((Preprocessor)_virtualFileSystem)._context.AddDependency(_path); string effectCode = File.ReadAllText(_path); // Append new line if none present. if (!effectCode.EndsWith("\n")) effectCode += "\n"; StringLexerSource source = new PPStringLexerSource(effectCode, true, _path); return source; } } private class PPStringLexerSource : StringLexerSource { public string Path { get; private set; } public PPStringLexerSource(string str, bool ppvalid, string fileName) : base(str.Replace("\r\n", "\n"), ppvalid, fileName) { Path = fileName; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/SamplerInfo.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal struct SamplerInfo { public MojoShader.SamplerType type; public int textureSlot; public int samplerSlot; public string GLsamplerName; // e.g. "ps_s0", "ps_s1", etc public string textureName; public int textureParameter; public SamplerState state; public override string ToString() { return String.Format("type: {0}, textureParameter:{1}, GLsamplerName: {2}, t#: {3}, s#: {4}, textureName: {5}", type, textureParameter, GLsamplerName, textureSlot, samplerSlot, textureName); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderCompilerException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { public class ShaderCompilerException : Exception { public ShaderCompilerException() : base("A shader failed to compile!") { } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderData.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal class ShaderData { private readonly ShaderStage _shaderStage; public ShaderStage Stage { get { return _shaderStage; } } public ShaderData(ShaderStage shaderStage) { _shaderStage = shaderStage; } public struct Attribute { public string name; public VertexElementUsage usage; public int index; #pragma warning disable 649 public int location; #pragma warning restore 649 } /// /// The index to the constant buffers which are /// required by this shader at runtime. /// public int[] _cbuffers; public SamplerInfo[] _samplers; public ShaderData.Attribute[] _attributes; public byte[] ShaderCode { get; set; } #region Non-Serialized Stuff public string ShaderFunctionName { get; set; } public string ShaderProfile { get; set; } public ShaderVersion ShaderVersion { get; internal set; } #endregion // Non-Serialized Stuff } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfile.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Linq; using System.Text; using System.Text.RegularExpressions; using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using Microsoft.Xna.Framework.Graphics; using D3DC = SharpDX.D3DCompiler; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { [TypeConverter(typeof(StringConverter))] public abstract class ShaderProfile { protected ShaderProfile() { } public static readonly ShaderProfile DirectX_11 = new ShaderProfileDX11(); public static readonly ShaderProfile OpenGL_Mojo = new ShaderProfileGL(); /// /// Returns the name of the shader profile. /// public abstract string Name { get; } /// /// Returns the format identifier used in the FX file format. /// public abstract ShaderProfileType ProfileType { get; } internal abstract IEnumerable> GetMacros(GraphicsBackend backend); internal abstract void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion); internal abstract ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings); internal static D3DC.ShaderBytecode CompileHLSL(EffectContent input, ContentProcessorContext context, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, bool backwardsCompatibility, ref string errorsAndWarnings) { try { D3DC.ShaderFlags shaderFlags = 0; // While we never allow preshaders, this flag is invalid for // the DX11 shader compiler which doesn't allow preshaders // in the first place. //shaderFlags |= D3DC.ShaderFlags.NoPreshader; if (backwardsCompatibility) shaderFlags |= D3DC.ShaderFlags.EnableBackwardsCompatibility; if (debugMode == Processors.EffectProcessorDebugMode.Debug) { shaderFlags |= D3DC.ShaderFlags.SkipOptimization; shaderFlags |= D3DC.ShaderFlags.Debug; } else { shaderFlags |= D3DC.ShaderFlags.OptimizationLevel3; } // Compile the shader into bytecode. D3DC.CompilationResult result = D3DC.ShaderBytecode.Compile( fileContent, shaderFunction, shaderProfileName, shaderFlags, 0, null, null, fullFilePath); // Store all the errors and warnings to log out later. errorsAndWarnings += result.Message; if (result.Bytecode == null) throw new ShaderCompilerException(); D3DC.ShaderBytecode shaderBytecode = result.Bytecode; //string source = shaderByteCode.Disassemble(); return shaderBytecode; } catch (SharpDX.CompilationException ex) { errorsAndWarnings += ex.Message; throw new ShaderCompilerException(); } } [Conditional("DEBUG")] internal static void LogDX11ShaderReflection(D3DC.ShaderReflection d3dcShaderReflection) { StringBuilder sb = new StringBuilder(); sb.AppendLine("LogShaderReflection "); for (int r = 0; r < d3dcShaderReflection.Description.BoundResources; r++) { D3DC.InputBindingDescription ibDesc = d3dcShaderReflection.GetResourceBindingDescription(r); sb.AppendLine(""); sb.AppendLine("ResourceBindingDescription: #" + r); sb.AppendLine("Name: '" + ibDesc.Name + "'"); sb.AppendLine("Type: " + ibDesc.Type); sb.AppendLine("BindPoint: " + ibDesc.BindPoint); sb.AppendLine("BindCount: " + ibDesc.BindCount); sb.AppendLine("Flags: " + ibDesc.Flags); sb.AppendLine("ReturnType: " + ibDesc.ReturnType); sb.AppendLine("Dimension: " + ibDesc.Dimension); } for (int i = 0; i < d3dcShaderReflection.Description.InputParameters; i++) { D3DC.ShaderParameterDescription paramDesc = d3dcShaderReflection.GetInputParameterDescription(i); sb.AppendLine(""); sb.AppendLine("InputParameterDescription: #" + i); sb.AppendLine("SemanticName: '" + paramDesc.SemanticName + "'"); sb.AppendLine("SemanticIndex: " + paramDesc.SemanticIndex); sb.AppendLine("Register: " + paramDesc.Register); sb.AppendLine("SystemValueType: " + paramDesc.SystemValueType); sb.AppendLine("UsageMask: " + paramDesc.UsageMask); } for (int o = 0; o < d3dcShaderReflection.Description.OutputParameters; o++) { D3DC.ShaderParameterDescription paramDesc = d3dcShaderReflection.GetOutputParameterDescription(o); sb.AppendLine(""); sb.AppendLine("OutputParameterDescription: #" + o); sb.AppendLine("SemanticName: '" + paramDesc.SemanticName + "'"); sb.AppendLine("SemanticIndex: " + paramDesc.SemanticIndex); sb.AppendLine("Register: " + paramDesc.Register); sb.AppendLine("SystemValueType: " + paramDesc.SystemValueType); sb.AppendLine("UsageMask: " + paramDesc.UsageMask); } for (int c = 0; c < d3dcShaderReflection.Description.ConstantBuffers; c++) { D3DC.ConstantBuffer cbuffer = d3dcShaderReflection.GetConstantBuffer(c); sb.AppendLine(""); sb.AppendLine("ConstantBuffer: #" + c); sb.AppendLine("Tag: " + cbuffer.Tag); sb.AppendLine("Name: '" + cbuffer.Description.Name + "'"); sb.AppendLine("Size: " + cbuffer.Description.Size); sb.AppendLine("Flags: " + cbuffer.Description.Flags); for (int v = 0; v < cbuffer.Description.VariableCount; v++) { D3DC.ShaderReflectionVariable variable = cbuffer.GetVariable(v); D3DC.ShaderReflectionType type = variable.GetVariableType(); sb.AppendLine(""); sb.AppendLine(" Variable: #" + v); sb.AppendLine(" Name: '" + variable.Description.Name + "'"); sb.AppendLine(" Flags: " + variable.Description.Flags); sb.AppendLine(" TypeClass: " + type.Description.Class); sb.AppendLine(" StartOffset: " + variable.Description.StartOffset); sb.AppendLine(" Size: " + variable.Description.Size); sb.AppendLine(" StartSampler: " + variable.Description.StartSampler); sb.AppendLine(" SamplerSize: " + variable.Description.SamplerSize); sb.AppendLine(" StartTexture: " + variable.Description.StartTexture); sb.AppendLine(" TextureSize: " + variable.Description.TextureSize); sb.Append(" DefaultValue: "); if (variable.Description.DefaultValue == IntPtr.Zero) { sb.Append("(null)"); } else { int size = type.Description.ColumnCount * type.Description.RowCount; switch (type.Description.Type) { case D3DC.ShaderVariableType.Float: float[] fdata = new float[size]; Marshal.Copy(variable.Description.DefaultValue, fdata, 0, (int)size); for (int d = 0; d < fdata.Length; d++) sb.Append(fdata[d].ToString(CultureInfo.InvariantCulture) + " "); break; case D3DC.ShaderVariableType.Int: case D3DC.ShaderVariableType.Bool: int[] idata = new int[size]; Marshal.Copy(variable.Description.DefaultValue, idata, 0, (int)size); for(int d = 0; d(); List parameters = new List(); // Gather all the parameters. for (int i = 0; i < d3dcbuffer.Description.VariableCount; i++) { D3DC.ShaderReflectionVariable vdesc = d3dcbuffer.GetVariable(i); EffectObject.EffectParameterContent param = GetParameterFromType(vdesc.GetVariableType()); param.name = vdesc.Description.Name; param.semantic = string.Empty; param.bufferOffset = vdesc.Description.StartOffset; uint size = param.columns * param.rows * 4; byte[] data = new byte[size]; if (vdesc.Description.DefaultValue != IntPtr.Zero) Marshal.Copy(vdesc.Description.DefaultValue, data, 0, (int)size); param.data = data; parameters.Add(param); } // Sort them by the offset for some consistent results. IEnumerable sortedParameters = parameters.OrderBy(e => e.bufferOffset); cbufferData.Parameters = sortedParameters.ToList(); // Store the parameter offsets. cbufferData.ParameterOffset = new List(); foreach (EffectObject.EffectParameterContent param in cbufferData.Parameters) cbufferData.ParameterOffset.Add(param.bufferOffset); return cbufferData; } private static EffectObject.EffectParameterContent GetParameterFromType(D3DC.ShaderReflectionType type) { EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent(); param.rows = (uint)type.Description.RowCount; param.columns = (uint)type.Description.ColumnCount; param.columnsActual = (uint)type.Description.ColumnCount; param.name = type.Description.Name ?? string.Empty; param.semantic = string.Empty; param.bufferOffset = type.Description.Offset; switch (type.Description.Class) { case D3DC.ShaderVariableClass.Scalar: param.class_ = EffectObject.PARAMETER_CLASS.SCALAR; break; case D3DC.ShaderVariableClass.Vector: param.class_ = EffectObject.PARAMETER_CLASS.VECTOR; break; case D3DC.ShaderVariableClass.MatrixColumns: param.class_ = EffectObject.PARAMETER_CLASS.MATRIX_COLUMNS; break; default: throw new Exception("Unsupported parameter class!"); } switch (type.Description.Type) { case D3DC.ShaderVariableType.Bool: param.type = EffectObject.PARAMETER_TYPE.BOOL; break; case D3DC.ShaderVariableType.Float: param.type = EffectObject.PARAMETER_TYPE.FLOAT; break; case D3DC.ShaderVariableType.Int: param.type = EffectObject.PARAMETER_TYPE.INT; break; default: throw new Exception("Unsupported parameter type!"); } param.member_count = (uint)type.Description.MemberCount; param.element_count = (uint)type.Description.ElementCount; if (param.member_count > 0) { param.member_handles = new EffectObject.EffectParameterContent[param.member_count]; for (int i = 0; i < param.member_count; i++) { EffectObject.EffectParameterContent mparam = GetParameterFromType(type.GetMemberType(i)); mparam.name = type.GetMemberTypeName(i) ?? string.Empty; param.member_handles[i] = mparam; } } else { param.member_handles = new EffectObject.EffectParameterContent[param.element_count]; for (int i = 0; i < param.element_count; i++) { EffectObject.EffectParameterContent mparam = new EffectObject.EffectParameterContent(); mparam.name = string.Empty; mparam.semantic = string.Empty; mparam.type = param.type; mparam.class_ = param.class_; mparam.rows = param.rows; mparam.columns = param.columns; mparam.columnsActual = param.columnsActual; mparam.data = new byte[param.columns * param.rows * 4]; param.member_handles[i] = mparam; } } return param; } private class StringConverter : TypeConverter { public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string name = value as string; if (ShaderProfile.DirectX_11.Name == name) return ShaderProfile.DirectX_11; if (ShaderProfile.OpenGL_Mojo.Name == name) return ShaderProfile.OpenGL_Mojo; } return base.ConvertFrom(context, culture, value); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileDX11.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Text.RegularExpressions; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using Microsoft.Xna.Framework.Graphics; using D3D = SharpDX.Direct3D; using D3DC = SharpDX.D3DCompiler; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { class ShaderProfileDX11 : ShaderProfile { public override ShaderProfileType ProfileType { get { return ShaderProfileType.DirectX_11; } } public override string Name { get { return "DirectX_11"; } } public ShaderProfileDX11() { } internal override IEnumerable> GetMacros(GraphicsBackend backend) { yield return new KeyValuePair("__DIRECTX__", "1"); } internal override void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion) { if (shaderStage == ShaderStage.Vertex) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Vertex shader '{1}'.", shaderModel, shaderFunction)); if (shaderVersion.Major < 2) throw new Exception(String.Format("Invalid profile '{0}'. Vertex shader '{1}' must be at least SM 2.0.", shaderModel, shaderFunction)); } if (shaderStage == ShaderStage.Pixel) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Pixel shader '{1}'.", shaderModel, shaderFunction)); if (shaderVersion.Major < 2) throw new Exception(String.Format("Invalid profile '{0}'. Pixel shader '{1}' must be at least SM 2.0.", shaderModel, shaderFunction)); } if (shaderStage == ShaderStage.Compute) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Compute shader '{1}'.", shaderModel, shaderFunction)); if (shaderVersion.Major < 5) throw new Exception(String.Format("Invalid profile '{0}'. Compute shader '{1}' must be at least SM 5.0.", shaderModel, shaderFunction)); } } internal override ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings) { string dx11ShaderProfileName = shaderProfileName; dx11ShaderProfileName = dx11ShaderProfileName.Replace("s_2_0", "s_4_0_level_9_1"); dx11ShaderProfileName = dx11ShaderProfileName.Replace("s_3_0", "s_4_0_level_9_3"); using (D3DC.ShaderBytecode shaderBytecodeDX11 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx11ShaderProfileName, true, ref errorsAndWarnings)) { ShaderData shaderDataDX11 = ShaderProfileDX11.CreateHLSL(input, context, backend, shaderInfo, shaderBytecodeDX11, shaderStage, effect.ConstantBuffers, debugMode); return shaderDataDX11; } } private static ShaderData CreateHLSL(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderInfo shaderInfo, D3DC.ShaderBytecode shaderBytecodeDX11, ShaderStage shaderStage, List cbuffers, EffectProcessorDebugMode debugMode) { ShaderData dxshader = new ShaderData(shaderStage); dxshader._attributes = new ShaderData.Attribute[0]; // Strip the bytecode we're gonna save! D3DC.StripFlags stripFlags = D3DC.StripFlags.CompilerStripReflectionData | D3DC.StripFlags.CompilerStripTestBlobs; if (debugMode != EffectProcessorDebugMode.Debug) stripFlags |= D3DC.StripFlags.CompilerStripDebugInformation; // Strip the bytecode for saving to disk. D3DC.ShaderBytecode stripped = shaderBytecodeDX11.Strip(stripFlags); { // Only SM4 and above works with strip... so this can return null! if (stripped != null) { dxshader.ShaderCode = stripped; } else { // TODO: There is a way to strip SM3 and below // but we have to write the method ourselves. // // If we need to support it then consider porting // this code over... // // http://entland.homelinux.com/blog/2009/01/15/stripping-comments-from-shader-bytecodes/ // dxshader.ShaderCode = (byte[])shaderBytecodeDX11.Data.Clone(); } } // Use reflection to get details of the shader. using (D3DC.ShaderReflection shaderReflectionDX11 = new D3DC.ShaderReflection(shaderBytecodeDX11.Data)) { LogDX11ShaderReflection(shaderReflectionDX11); List samplersMap = new List(); List texturesMap = new List(); for (int i = 0; i < shaderReflectionDX11.Description.BoundResources; i++) { D3DC.InputBindingDescription ibDesc = shaderReflectionDX11.GetResourceBindingDescription(i); switch (ibDesc.Type) { case D3DC.ShaderInputType.Sampler: samplersMap.Add(ibDesc); break; case D3DC.ShaderInputType.Texture: texturesMap.Add(ibDesc); break; } } // Get the textures. List textures = new List(); foreach (D3DC.InputBindingDescription txDesc in texturesMap) { // Init samplerInfo SamplerInfo textureInfo = new SamplerInfo(); textureInfo.type = MojoShader.SamplerType.SAMPLER_UNKNOWN; textureInfo.GLsamplerName = String.Empty; textureInfo.samplerSlot = -1; textureInfo.state = null; textureInfo.textureSlot = -1; textureInfo.textureName = null; textureInfo.textureParameter = -1; textureInfo.textureSlot = txDesc.BindPoint; textureInfo.textureName = txDesc.Name; textureInfo.type = DXToSamplerType(txDesc.Dimension); textures.Add(textureInfo); } // Get the samplers. List samplers = new List(); foreach (D3DC.InputBindingDescription samplerDesc in samplersMap) { // Init samplerInfo SamplerInfo samplerInfo = new SamplerInfo(); samplerInfo.type = MojoShader.SamplerType.SAMPLER_UNKNOWN; samplerInfo.GLsamplerName = String.Empty; samplerInfo.samplerSlot = -1; samplerInfo.state = null; samplerInfo.textureSlot = -1; samplerInfo.textureName = null; samplerInfo.textureParameter = -1; samplerInfo.samplerSlot = samplerDesc.BindPoint; samplerInfo.GLsamplerName = samplerDesc.Name; SamplerStateInfo samplerStateInfo = shaderInfo.SamplerStates[samplerDesc.Name]; samplerInfo.textureName = samplerStateInfo.TextureName; samplerInfo.state = samplerStateInfo.State; samplers.Add(samplerInfo); } // merge paired samples & textures // & resolve textureName from sample. for(int t = 0; t< textures.Count; t++) { SamplerInfo textureInfo = textures[t]; for (int s = 0; s < samplers.Count; s++) { if (textureInfo.textureName == samplers[s].GLsamplerName) { textureInfo.textureName = samplers[s].textureName; textureInfo.samplerSlot = samplers[s].samplerSlot; if (samplers[s].state != null) { textureInfo.state = samplers[s].state; } samplers.RemoveAt(s--); break; } } textures[t] = textureInfo; // update struct } // merge remaining samples into textures for (int t = 0; t < textures.Count; t++) { SamplerInfo textureInfo = textures[t]; for (int s = 0; s < samplers.Count; s++) { if (textureInfo.samplerSlot == -1) { textureInfo.samplerSlot = samplers[s].samplerSlot; if (samplers[s].state != null) { textureInfo.state = samplers[s].state; } samplers.RemoveAt(s--); break; } } textures[t] = textureInfo; // update struct } if (samplers.Count > 0) throw new InvalidOperationException("samplers not merged."); dxshader._samplers = textures.ToArray(); // Gather all the constant buffers used by this shader. ConstantBufferData[] cbuffersData = GetDX11ConstantBuffers(shaderReflectionDX11); // map ConstantBuffers int[] cbindexmap = new int[cbuffersData.Length]; for (int i = 0; i < cbuffersData.Length; i++) { // Look for a duplicate cbuffer in the list. int cbindex = 0; for (; cbindex < cbuffers.Count; cbindex++) if (cbuffersData[i].SameAs(cbuffers[cbindex])) break; // Add a new cbuffer. if (cbindex == cbuffers.Count) cbuffers.Add(cbuffersData[i]); cbindexmap[i] = cbindex; } dxshader._cbuffers = cbindexmap; } return dxshader; } private static MojoShader.SamplerType DXToSamplerType(D3D.ShaderResourceViewDimension dimension) { switch (dimension) { case D3D.ShaderResourceViewDimension.Texture1D: case D3D.ShaderResourceViewDimension.Texture1DArray: return MojoShader.SamplerType.SAMPLER_1D; case D3D.ShaderResourceViewDimension.Texture2D: case D3D.ShaderResourceViewDimension.Texture2DArray: case D3D.ShaderResourceViewDimension.Texture2DMultisampled: case D3D.ShaderResourceViewDimension.Texture2DMultisampledArray: return MojoShader.SamplerType.SAMPLER_2D; case D3D.ShaderResourceViewDimension.Texture3D: return MojoShader.SamplerType.SAMPLER_VOLUME; case D3D.ShaderResourceViewDimension.TextureCube: case D3D.ShaderResourceViewDimension.TextureCubeArray: return MojoShader.SamplerType.SAMPLER_CUBE; default: throw new InvalidOperationException(); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileGL.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using System.Linq; using System.Text.RegularExpressions; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.Processors; using Microsoft.Xna.Framework.Graphics; using D3DC = SharpDX.D3DCompiler; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { class ShaderProfileGL : ShaderProfile { public override ShaderProfileType ProfileType { get { return ShaderProfileType.OpenGL_Mojo; } } public override string Name { get { return "OpenGL"; } } public ShaderProfileGL() { } internal override IEnumerable> GetMacros(GraphicsBackend backend) { yield return new KeyValuePair("__GL__", "1"); yield return new KeyValuePair("__MOJOSHADER__", "1"); switch(backend) { case GraphicsBackend.OpenGL: yield return new KeyValuePair("__OPENGL__", "1"); break; case GraphicsBackend.GLES: case GraphicsBackend.WebGL: yield return new KeyValuePair("__GLES__", "1"); break; } } internal override void ValidateShaderModels(PassInfo pass, string shaderFunction, string shaderModel, ShaderStage shaderStage, ShaderVersion shaderVersion) { const int MojoMaxShaderVersion = 4; if (shaderStage == ShaderStage.Vertex) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Vertex shader '{1}'.", shaderModel, shaderFunction)); if (shaderVersion.Major < 2) throw new Exception(String.Format("Invalid profile '{0}'. Vertex shader '{1}' must be at least SM 2.0.", shaderModel, shaderFunction)); if (shaderVersion.Major > MojoMaxShaderVersion) throw new Exception(String.Format("Invalid profile '{0}'. Vertex shader '{1}' must be SM 3.0 or lower.", shaderModel, shaderFunction)); } if (shaderStage == ShaderStage.Pixel) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Pixel shader '{1}'.", shaderModel, pass.psFunction)); if (shaderVersion.Major < 2) throw new Exception(String.Format("Invalid profile '{0}'. Pixel shader '{1}' must be at least SM 2.0.", shaderModel, shaderFunction)); if (shaderVersion.Major > MojoMaxShaderVersion) throw new Exception(String.Format("Invalid profile '{0}'. Pixel shader '{1}' must be SM 3.0 or lower.", shaderModel, shaderFunction)); } if (shaderStage == ShaderStage.Compute) { if (shaderVersion.Major == -1) throw new Exception(String.Format("Invalid profile '{0}'. Compute shader '{1}'.", shaderModel, shaderFunction)); if (shaderVersion.Major < 5) throw new Exception(String.Format("Invalid profile '{0}'. Compute shader '{1}' must be at least SM 5.0.", shaderModel, shaderFunction)); if (shaderVersion.Major > MojoMaxShaderVersion) throw new Exception(String.Format("Invalid profile '{0}'. Compute shader '{1}' must be SM 3.0 or lower.", shaderModel, shaderFunction)); } } internal override ShaderData CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderVersion shaderVersion, ShaderStage shaderStage, ref string errorsAndWarnings) { ConstantBufferData[] dx11CBuffersData; string dx11ShaderProfileName = shaderProfileName; dx11ShaderProfileName = dx11ShaderProfileName.Replace("s_2_0", "s_4_0_level_9_1"); dx11ShaderProfileName = dx11ShaderProfileName.Replace("s_3_0", "s_4_0_level_9_3"); using (D3DC.ShaderBytecode shaderBytecodeDX11 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx11ShaderProfileName, true, ref errorsAndWarnings)) { // Use reflection to get details of the shader. using (D3DC.ShaderReflection shaderReflection = new D3DC.ShaderReflection(shaderBytecodeDX11.Data)) { LogDX11ShaderReflection(shaderReflection); dx11CBuffersData = GetDX11ConstantBuffers(shaderReflection); } } // For now GLSL is only supported via translation // using MojoShader which works from DX9 HLSL bytecode. string dx9ShaderProfileName = shaderProfileName; dx9ShaderProfileName = dx9ShaderProfileName.Replace("s_4_0_level_9_1", "s_2_0"); dx9ShaderProfileName = dx9ShaderProfileName.Replace("s_4_0_level_9_3", "s_3_0"); dx9ShaderProfileName = dx9ShaderProfileName.Replace("s_4_0", "s_3_0"); using (D3DC.ShaderBytecode shaderBytecodeDX9 = ShaderProfile.CompileHLSL(input, context, fullFilePath, fileContent, debugMode, shaderFunction, dx9ShaderProfileName, false, ref errorsAndWarnings)) { ShaderData shaderDataDX9 = ShaderProfileGL.CreateGLSL(input, context, backend, shaderInfo, shaderBytecodeDX9, shaderStage, shaderVersion, effect.ConstantBuffers, debugMode, dx11CBuffersData); return shaderDataDX9; } } private static ShaderData CreateGLSL(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderInfo shaderInfo, D3DC.ShaderBytecode shaderBytecodeDX9, ShaderStage shaderStage, ShaderVersion shaderVersion, List cbuffers, EffectProcessorDebugMode debugMode, ConstantBufferData[] dx11CBuffersData) { ShaderData dxshader = new ShaderData(shaderStage); // Use MojoShader to convert the HLSL bytecode to GLSL. IntPtr parseDataPtr = MojoShader.NativeMethods.Parse( MojoShader.NativeConstants.PROFILE_GLSL, shaderBytecodeDX9.Data, shaderBytecodeDX9.Data.Length, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); MojoShader.ParseData parseData = MarshalHelper.Unmarshal(parseDataPtr); if (parseData.error_count > 0) { MojoShader.Error[] errors = MarshalHelper.UnmarshalArray( parseData.errors, parseData.error_count ); throw new Exception(errors[0].error); } // Conver the attributes. // // TODO: Could this be done using DX shader reflection? // { MojoShader.Attribute[] attributes = MarshalHelper.UnmarshalArray( parseData.attributes, parseData.attribute_count); dxshader._attributes = new ShaderData.Attribute[attributes.Length]; for (int i = 0; i < attributes.Length; i++) { dxshader._attributes[i].name = attributes[i].name; dxshader._attributes[i].index = attributes[i].index; dxshader._attributes[i].usage = EffectObject.ToXNAVertexElementUsage(attributes[i].usage); } } MojoShader.Symbol[] symbols = MarshalHelper.UnmarshalArray( parseData.symbols, parseData.symbol_count); //try to put the symbols in the order they are eventually packed into the uniform arrays //this /should/ be done by pulling the info from mojoshader Array.Sort(symbols, delegate (MojoShader.Symbol a, MojoShader.Symbol b) { uint va = a.register_index; if (a.info.elements == 1) va += 1024; //hax. mojoshader puts array objects first uint vb = b.register_index; if (b.info.elements == 1) vb += 1024; return va.CompareTo(vb); } );//(a, b) => ((int)(a.info.elements > 1))a.register_index.CompareTo(b.register_index)); // NOTE: Because we are compiling SM3.0 to GLSL 1.10 instead of GLSL 1.20 // MojoShader encodes integers and booleans as floats, // and we need to handle int<->float conversion manually. // We leave the code below, but the runtime has been optimized for this case. // TODO: Compile SM 3.0 and above with MojoShader.NativeConstants.PROFILE_GLSL120. // For whatever reason the register indexing is // incorrect from MojoShader. // TODO: use reflection to map HLSL parameter indices to GLSL { uint bool_index = 0; uint float4_index = 0; uint int4_index = 0; for (int i = 0; i < symbols.Length; i++) { switch (symbols[i].register_set) { case MojoShader.SymbolRegisterSet.BOOL: symbols[i].register_index = bool_index; bool_index += symbols[i].register_count; break; case MojoShader.SymbolRegisterSet.FLOAT4: symbols[i].register_index = float4_index; float4_index += symbols[i].register_count; break; case MojoShader.SymbolRegisterSet.INT4: symbols[i].register_index = int4_index; int4_index += symbols[i].register_count; break; } } } // Get the samplers. MojoShader.Sampler[] samplers = MarshalHelper.UnmarshalArray( parseData.samplers, parseData.sampler_count); dxshader._samplers = new SamplerInfo[samplers.Length]; for (int i = 0; i < samplers.Length; i++) { // We need the original sampler name... look for that in the symbols. MojoShader.Symbol symbol = symbols.First(e => e.register_set == MojoShader.SymbolRegisterSet.SAMPLER && e.register_index == samplers[i].index); string samplerName = symbol.name; SamplerInfo samplerInfo = new SamplerInfo(); samplerInfo.textureSlot = samplers[i].index; samplerInfo.samplerSlot = samplers[i].index; // GLSL needs the uniform sampler name. samplerInfo.GLsamplerName = samplers[i].name; //sampler mapping to parameter is unknown atm samplerInfo.textureParameter = -1; // By default use the original sampler name for the parameter name. samplerInfo.textureName = samplerName; samplerInfo.type = samplers[i].type; string textureName = null; if (samplerName.Contains("+")) { int plusIndex = samplerName.IndexOf('+'); textureName = samplerName.Substring(plusIndex + 1); samplerName = samplerName.Substring(0, plusIndex); } SamplerStateInfo state; if (shaderInfo.SamplerStates.TryGetValue(samplerName, out state)) { samplerInfo.state = state.State; if (textureName != null) samplerInfo.textureName = textureName; else samplerInfo.textureName = state.TextureName; } // Store the sampler. dxshader._samplers[i] = samplerInfo; } // For whatever reason the register indexing is // incorrect from MojoShader. // TODO: use reflection to map HLSL sampler & texture indices to GLSL { uint sampler_index = 0; for (int i = 0; i < dxshader._samplers.Length; i++) { dxshader._samplers[i].samplerSlot = i; dxshader._samplers[i].textureSlot = i; } } // Gather all the parameters used by this shader. AddConstantBuffers(cbuffers, dxshader, symbols, dx11CBuffersData); string glslCode = parseData.output; glslCode = glslCode.Replace("\r\n", "\n"); List glslBytecodes = new List(); switch(backend) { case GraphicsBackend.OpenGL: { string glsl110Code = ConvertGLSL110ToGLSL110(dxshader.Stage, glslCode); GLSLBytecode glsl110 = new GLSLBytecode(1, 1, false, Encoding.ASCII.GetBytes(glsl110Code)); glslBytecodes.Add(glsl110); } break; case GraphicsBackend.GLES: case GraphicsBackend.WebGL: { // GLES 3.00 is required for dFdx/dFdy/gl_FragData string glsl300esCode = ConvertGLSL110ToGLSL300es(dxshader.Stage, glslCode); GLSLBytecode glsl300es = new GLSLBytecode(3, 0, true, Encoding.ASCII.GetBytes(glsl300esCode)); glslBytecodes.Add(glsl300es); if (shaderVersion == new ShaderVersion(2, 0)) { string glsl100Code = ConvertGLSL110ToGLSL100(dxshader.Stage, glslCode); GLSLBytecode glsl100 = new GLSLBytecode(1, 0, false, Encoding.ASCII.GetBytes(glsl100Code)); glslBytecodes.Add(glsl100); } } break; default: throw new InvalidOperationException(); } using (MemoryStream memoryStream = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(memoryStream, Encoding.ASCII)) { writer.Write((short)0); // Reserved // write bytecode directory writer.Write((short)glslBytecodes.Count); const int HeaderSize = 4; const int EntrySize = 7; int bytecodesOffset = HeaderSize + EntrySize * glslBytecodes.Count; for (int i = 0; i < glslBytecodes.Count; i++) { writer.Write((byte)glslBytecodes[i].Major); writer.Write((byte)glslBytecodes[i].Minor); writer.Write(glslBytecodes[i].ES); writer.Write((int)(bytecodesOffset)); bytecodesOffset += (4 + glslBytecodes[i].Bytecode.Length); } // write bytecodes for (int i = 0; i < glslBytecodes.Count; i++) { writer.Write((Int32)glslBytecodes[i].Bytecode.Length); writer.Write(glslBytecodes[i].Bytecode); } // Store the code for serialization. dxshader.ShaderCode = memoryStream.ToArray(); } return dxshader; } private static string ConvertGLSL110ToGLSL110(ShaderStage shaderStage, string glslCode) { // remove the opengl 1.10 header for now. Debug.Assert(glslCode.StartsWith("#version 110\n")); glslCode = glslCode.Replace("#version 110\n", ""); // add the header back. // (version 1.10 is the OpenGL default) //glslCode = "#version 110\n" // + glslCode; return glslCode; } private static string ConvertGLSL110ToGLSL100(ShaderStage shaderStage, string glslCode) { // remove the opengl 1.10 header. GLES platforms do not like this. Debug.Assert(glslCode.StartsWith("#version 110\n")); glslCode = glslCode.Replace("#version 110\n", ""); // Add the required precision specifiers for GLES. if (shaderStage == ShaderStage.Pixel) { glslCode = "precision highp float;\n" + "precision highp int;\n" + "\n" + glslCode; } // Enable standard derivatives extension as necessary. // (we dont need that on Reach/sm2.0) //if (glslCode.IndexOf("dFdx", StringComparison.InvariantCulture) >= 0 //|| glslCode.IndexOf("dFdy", StringComparison.InvariantCulture) >= 0 //|| glslCode.IndexOf("fwidth", StringComparison.InvariantCulture) >= 0) //{ // glslCode = "#extension GL_OES_standard_derivatives : enable\n" // + "\n"; //} // add the GL ES header. // (version 1.00 is the GLes default) //glslCode = "#version 100\n" // + glslCode; return glslCode; } static Regex rgxAttribute = new Regex( @"^attribute(?=\s)", RegexOptions.Multiline); static Regex rgxVarying = new Regex( @"^varying(?=\s)", RegexOptions.Multiline); static Regex rgxFragColor = new Regex( @"^#define (\w+) gl_FragColor", RegexOptions.Multiline); static Regex rgxFragData = new Regex( @"^#define (\w+) gl_FragData\[(\d+)\]", RegexOptions.Multiline); static Regex rgxTexture = new Regex( @"texture(2D|3D|Cube)(?=\()", RegexOptions.Multiline); private static string ConvertGLSL110ToGLSL300es(ShaderStage shaderStage, string glslCode) { // remove the opengl 1.10 header. GLES platforms do not like this. Debug.Assert(glslCode.StartsWith("#version 110\n")); glslCode = glslCode.Replace("#version 110\n", ""); // Add the required precision specifiers for GLES. if (shaderStage == ShaderStage.Pixel) { glslCode = "precision highp float;\n" + "precision highp int;\n" + "\n" + glslCode; } // add the GL ES header. glslCode = "#version 300 es\n" + glslCode; switch (shaderStage) { case ShaderStage.Vertex: { glslCode = rgxVarying.Replace(glslCode, "out"); } break; case ShaderStage.Pixel: { glslCode = rgxVarying.Replace(glslCode, "in"); glslCode = rgxFragColor.Replace(glslCode, "out vec4 $1;"); glslCode = rgxFragData.Replace(glslCode, "layout(location=$2) out vec4 $1;"); } break; } glslCode = rgxAttribute.Replace(glslCode, "in"); glslCode = rgxTexture.Replace(glslCode, "texture"); return glslCode; } private static void AddConstantBuffers(List cbuffers, ShaderData dxshader, MojoShader.Symbol[] symbols, ConstantBufferData[] dx11CBuffersData) { var symbol_types = new[] { new { name = (dxshader.Stage == ShaderStage.Vertex) ? "vs_uniforms_bool" : "ps_uniforms_bool", set = MojoShader.SymbolRegisterSet.BOOL, }, new { name = (dxshader.Stage == ShaderStage.Vertex) ? "vs_uniforms_ivec4" : "ps_uniforms_ivec4", set = MojoShader.SymbolRegisterSet.INT4, }, new { name = (dxshader.Stage == ShaderStage.Vertex) ? "vs_uniforms_vec4" : "ps_uniforms_vec4", set = MojoShader.SymbolRegisterSet.FLOAT4, }, }; List cbuffer_index = new List(); for (int i = 0; i < symbol_types.Length; i++) { ConstantBufferData cbuffer = ShaderProfileGL.CreateConstantBufferData(symbol_types[i].name, symbol_types[i].set, symbols); if (cbuffer.Size == 0) continue; int match = cbuffers.FindIndex(e => e.SameAs(cbuffer)); if (match == -1) { cbuffer_index.Add(cbuffers.Count); cbuffers.Add(cbuffer); foreach (EffectObject.EffectParameterContent param in cbuffer.Parameters) SetReflectionData(dx11CBuffersData, param); } else { cbuffer_index.Add(match); } } dxshader._cbuffers = cbuffer_index.ToArray(); } private static void SetReflectionData(ConstantBufferData[] dx11CBuffersData, EffectObject.EffectParameterContent param) { foreach (ConstantBufferData dx11cb in dx11CBuffersData) { foreach (EffectObject.EffectParameterContent dx11param in dx11cb.Parameters) { if (param.name == dx11param.name && param.type == dx11param.type && param.class_ == dx11param.class_) { // set reflection data if (param.data is Array && dx11param.data is Array) { Array paramArray = param.data as Array; Array dx11paramArray = dx11param.data as Array; if (paramArray.Length == dx11paramArray.Length) { Array.Copy(dx11paramArray, paramArray, paramArray.Length); } else { Debug.Assert(paramArray.Length == dx11paramArray.Length); } } return; } } } return; } private static ConstantBufferData CreateConstantBufferData(string name, MojoShader.SymbolRegisterSet set, MojoShader.Symbol[] symbols) { ConstantBufferData cbuffer = new ConstantBufferData(); cbuffer.Name = name ?? string.Empty; cbuffer.ParameterIndex = new List(); cbuffer.ParameterOffset = new List(); cbuffer.Parameters = new List(); int minRegister = short.MaxValue; int maxRegister = 0; int registerSize = (set == MojoShader.SymbolRegisterSet.BOOL ? 1 : 4) * 4; foreach (MojoShader.Symbol symbol in symbols) { if (symbol.register_set != set) continue; // Create the parameter. EffectObject.EffectParameterContent parm = GetParameterFromSymbol(symbol); int offset = (int)symbol.register_index * registerSize; parm.bufferOffset = offset; cbuffer.Parameters.Add(parm); cbuffer.ParameterOffset.Add(offset); minRegister = Math.Min(minRegister, (int)symbol.register_index); maxRegister = Math.Max(maxRegister, (int)(symbol.register_index + symbol.register_count)); } cbuffer.Size = Math.Max(maxRegister - minRegister, 0) * registerSize; return cbuffer; } private static EffectObject.EffectParameterContent GetParameterFromSymbol(MojoShader.Symbol symbol) { EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent(); param.rows = symbol.info.rows; param.columns = symbol.info.columns; param.columnsActual = symbol.info.columns; param.name = symbol.name ?? string.Empty; param.semantic = string.Empty; // TODO: How do i do this with only MojoShader? int registerSize = (symbol.register_set == MojoShader.SymbolRegisterSet.BOOL ? 1 : 4) * 4; int offset = (int)symbol.register_index * registerSize; param.bufferOffset = offset; switch (symbol.info.parameter_class) { case MojoShader.SymbolClass.SCALAR: param.class_ = EffectObject.PARAMETER_CLASS.SCALAR; break; case MojoShader.SymbolClass.VECTOR: param.class_ = EffectObject.PARAMETER_CLASS.VECTOR; break; case MojoShader.SymbolClass.MATRIX_COLUMNS: param.class_ = EffectObject.PARAMETER_CLASS.MATRIX_COLUMNS; // MojoShader optimizes matrices to occupy less registers. param.columnsActual = Math.Min(param.columns, symbol.register_count); break; default: throw new Exception("Unsupported parameter class!"); } switch (symbol.info.parameter_type) { case MojoShader.SymbolType.BOOL: param.type = EffectObject.PARAMETER_TYPE.BOOL; break; case MojoShader.SymbolType.FLOAT: param.type = EffectObject.PARAMETER_TYPE.FLOAT; break; case MojoShader.SymbolType.INT: param.type = EffectObject.PARAMETER_TYPE.INT; break; default: throw new Exception("Unsupported parameter type!"); } param.data = new byte[param.rows * param.columns * 4]; param.member_count = symbol.info.member_count; param.element_count = symbol.info.elements > 1 ? symbol.info.elements : 0; if (param.member_count > 0) { param.member_handles = new EffectObject.EffectParameterContent[param.member_count]; MojoShader.Symbol[] members = MarshalHelper.UnmarshalArray( symbol.info.members, (int)symbol.info.member_count); for (int i = 0; i < param.member_count; i++) { EffectObject.EffectParameterContent mparam = GetParameterFromSymbol(members[i]); param.member_handles[i] = mparam; } } else { param.member_handles = new EffectObject.EffectParameterContent[param.element_count]; for (int i = 0; i < param.element_count; i++) { EffectObject.EffectParameterContent mparam = new EffectObject.EffectParameterContent(); mparam.name = string.Empty; mparam.semantic = string.Empty; mparam.type = param.type; mparam.class_ = param.class_; mparam.rows = param.rows; mparam.columns = param.columns; mparam.columnsActual = (uint)Math.Min(param.columns, symbol.register_count - i * param.columns); mparam.data = new byte[param.columns * param.rows * 4]; param.member_handles[i] = mparam; } } return param; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderProfileType.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { public enum ShaderProfileType { OpenGL_Mojo = 0, DirectX_11 = 1, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderStage.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { internal enum ShaderStage : byte { Pixel = 0, Vertex = 1, Compute = 5, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/EffectCompiler/ShaderVersion.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Globalization; using System.Text.RegularExpressions; namespace Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler { public struct ShaderVersion { public readonly int Major; public readonly int Minor; private static readonly Regex VertexShaderRegex = new Regex(@"^vs_(?1|2|3|4|5)_(?0|1|)(_level_(?9_1|9_3))?$", RegexOptions.Compiled); private static readonly Regex PixelShaderRegex = new Regex(@"^ps_(?1|2|3|4|5)_(?0|1|)(_level_(?9_1|9_3))?$", RegexOptions.Compiled); private static readonly Regex ComputeShaderRegex = new Regex(@"^cs_(?1|2|3|4|5)_(?0|1|)?$", RegexOptions.Compiled); public ShaderVersion(int major, int minor) : this() { this.Major = major; this.Minor = minor; } private static ShaderVersion ParseShaderModel(string shaderModel, Regex regex) { Match match = regex.Match(shaderModel); if (match.Success) { int major = int.Parse(match.Groups["major"].Value, NumberStyles.Integer, CultureInfo.InvariantCulture); int minor = int.Parse(match.Groups["minor"].Value, NumberStyles.Integer, CultureInfo.InvariantCulture); Group levelGroup = match.Groups["level"]; if (levelGroup.Success) { if (major == 4 && minor == 0) { string level = levelGroup.Value; if (level == "9_1") return new ShaderVersion(2, 0); if (level == "9_3") return new ShaderVersion(3, 0); } } else { return new ShaderVersion(major, minor); } } return new ShaderVersion(-1, 0); } internal static ShaderVersion ParseVertexShaderModel(string vsModel) { return ParseShaderModel(vsModel, VertexShaderRegex); } internal static ShaderVersion ParsePixelShaderModel(string psModel) { return ParseShaderModel(psModel, PixelShaderRegex); } internal static ShaderVersion ParseComputeShaderModel(string csModel) { return ParseShaderModel(csModel, ComputeShaderRegex); } public static bool operator <(ShaderVersion l, ShaderVersion r) { if (l.Major == r.Major) return (l.Minor < r.Minor); return (l.Major < r.Major); } public static bool operator >(ShaderVersion l, ShaderVersion r) { if (l.Major == r.Major) return (l.Minor > r.Minor); return (l.Major > r.Major); } public static bool operator <=(ShaderVersion l, ShaderVersion r) { if (l.Major == r.Major) return (l.Minor <= r.Minor); return (l.Major < r.Major); } public static bool operator >=(ShaderVersion l, ShaderVersion r) { if (l.Major == r.Major) return (l.Minor >= r.Minor); return (l.Major > r.Major); } public static bool operator ==(ShaderVersion l, ShaderVersion r) { return (l.Major == r.Major && l.Minor == r.Minor); } public static bool operator !=(ShaderVersion l, ShaderVersion r) { return (l.Major != r.Major || l.Minor != r.Minor); } public override string ToString() { return String.Format("{{Major: {0}, Minor: {1} }}", Major, Minor); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/ExternalTool.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Threading; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Helper to run an external tool installed in the system. Useful for when /// we don't want to package the tool ourselves (ffmpeg) or it's provided /// by a third party (console manufacturer). /// internal class ExternalTool { public static int Run(string command, string arguments) { string stdout, stderr; int result = Run(command, arguments, out stdout, out stderr); if (result < 0) throw new Exception(string.Format("{0} returned exit code {1}", command, result)); return result; } public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null) { // This particular case is likely to be the most common and thus // warrants its own specific error message rather than falling // back to a general exception from Process.Start() string fullPath = FindCommand(command); if (string.IsNullOrEmpty(fullPath)) throw new Exception(string.Format("Couldn't locate external tool '{0}'.", command)); // We can't reference ref or out parameters from within // lambdas (for the thread functions), so we have to store // the data in a temporary variable and then assign these // variables to the out parameters. string stdoutTemp = string.Empty; string stderrTemp = string.Empty; ProcessStartInfo processInfo = new ProcessStartInfo { FileName = fullPath, Arguments = arguments, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, ErrorDialog = false, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, }; EnsureExecutable(fullPath); using (Process process = new Process()) { process.StartInfo = processInfo; process.Start(); // We have to run these in threads, because using ReadToEnd // on one stream can deadlock if the other stream's buffer is // full. Thread stdoutThread = new Thread(new ThreadStart(() => { MemoryStream memory = new MemoryStream(); process.StandardOutput.BaseStream.CopyTo(memory); byte[] bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes); })); Thread stderrThread = new Thread(new ThreadStart(() => { MemoryStream memory = new MemoryStream(); process.StandardError.BaseStream.CopyTo(memory); byte[] bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stderrTemp = System.Text.Encoding.ASCII.GetString(bytes); })); stdoutThread.Start(); stderrThread.Start(); if (stdin != null) { process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin)); } // Make sure interactive prompts don't block. process.StandardInput.Close(); process.WaitForExit(); stdoutThread.Join(); stderrThread.Join(); stdout = stdoutTemp; stderr = stderrTemp; return process.ExitCode; } } /// /// Returns the fully-qualified path for a command, searching the system path if necessary. /// /// /// It's apparently necessary to use the full path when running on some systems. /// private static string FindCommand(string command) { // Expand any environment variables. command = Environment.ExpandEnvironmentVariables(command); // If we have a full path just pass it through. if (File.Exists(command)) return command; // For Linux check specific subfolder string lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "linux", command); if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom)) return lincom; // For Mac check specific subfolder string maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "osx", command); if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom)) return maccom; // We don't have a full path, so try running through the system path to find it. string paths = AppDomain.CurrentDomain.BaseDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH"); string justTheName = Path.GetFileName(command); foreach (string path in paths.Split(Path.PathSeparator)) { string fullName = Path.Combine(path, justTheName); if (File.Exists(fullName)) return fullName; if (CurrentPlatform.OS == OS.Windows) { string fullExeName = string.Concat(fullName, ".exe"); if (File.Exists(fullExeName)) return fullExeName; } } return null; } /// /// Ensures the specified executable has the executable bit set. If the /// executable doesn't have the executable bit set on Linux or Mac OS, then /// Mono will refuse to execute it. /// /// The full path to the executable. private static void EnsureExecutable(string path) { if (!path.StartsWith("/home") && !path.StartsWith("/Users")) return; try { Process process = Process.Start("chmod", "u+x \"" + path + "\""); process.WaitForExit(); } catch { // This platform may not have chmod in the path, in which case we can't // do anything reasonable here. } } /// /// Safely deletes the file if it exists. /// /// The path to the file to delete. public static void DeleteFile(string filePath) { try { File.Delete(filePath); } catch (Exception) { } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/EffectProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Processes a string representation to a platform-specific compiled effect. /// [ContentProcessor(DisplayName = "Effect - KNI")] public class EffectProcessor : ContentProcessor { private EffectProcessorDebugMode _debugMode; private string _defines; /// /// The debug mode for compiling effects. /// /// The debug mode to use when compiling effects. public virtual EffectProcessorDebugMode DebugMode { get { return _debugMode; } set { _debugMode = value; } } /// /// Define assignments for the effect. /// /// A list of define assignments delimited by semicolons. public virtual string Defines { get { return _defines; } set { _defines = value; } } /// /// Initializes a new instance of EffectProcessor. /// public EffectProcessor() { } /// /// Processes the string representation of the specified effect into a platform-specific binary format using the specified context. /// /// The effect string to be processed. /// Context for the specified processor. /// A platform-specific compiled binary effect. public override CompiledEffectContent Process(EffectContent input, ContentProcessorContext context) { MojoEffectProcessor mojoProcessor = new MojoEffectProcessor(); mojoProcessor.DebugMode = this.DebugMode; mojoProcessor.Defines = this.Defines; return mojoProcessor.Process(input, context); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/EffectProcessorDebugMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Specifies how debugging of effects is to be supported in PIX. /// public enum EffectProcessorDebugMode { /// /// Enables effect debugging when built with Debug profile. /// Auto = 0, /// /// Enables effect debugging for all profiles. Will produce unoptimized shaders. /// Debug = 1, /// /// Disables debugging for all profiles, produce optimized shaders. /// Optimize = 2, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Processors/MojoEffectProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.Xna.Framework.Content.Pipeline.Graphics; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler; using Microsoft.Xna.Framework.Content.Pipeline.EffectCompiler.TPGParser; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Processes a string representation to a platform-specific compiled effect. /// [ContentProcessor(DisplayName = "Effect (MojoShader) - KNI")] public class MojoEffectProcessor : ContentProcessor { private EffectProcessorDebugMode _debugMode; private string _defines; /// /// The debug mode for compiling effects. /// /// The debug mode to use when compiling effects. public virtual EffectProcessorDebugMode DebugMode { get { return _debugMode; } set { _debugMode = value; } } /// /// Define assignments for the effect. /// /// A list of define assignments delimited by semicolons. public virtual string Defines { get { return _defines; } set { _defines = value; } } /// /// Initializes a new instance of MojoEffectProcessor. /// public MojoEffectProcessor() { } /// /// Processes the string representation of the specified effect into a platform-specific binary format using the specified context. /// /// The effect string to be processed. /// Context for the specified processor. /// A platform-specific compiled binary effect. public override CompiledEffectContent Process(EffectContent input, ContentProcessorContext context) { if (DebugMode == EffectProcessorDebugMode.Auto) { if (String.Equals(context.BuildConfiguration, "Debug", StringComparison.OrdinalIgnoreCase)) DebugMode = EffectProcessorDebugMode.Debug; } List backends = context.Parameters.GetValue>("_GraphicsBackendList", null); if (backends == null) { backends = new List(); GraphicsBackend backend = MojoEffectProcessor.BackendFromPlatform(context.TargetPlatform); backends.Add(backend); } // replace any WebGL backend with GLES, and remove duplicates. backends = backends.Select( (backend) => (backend == GraphicsBackend.WebGL) ? GraphicsBackend.GLES : backend) .Distinct() .ToList(); // compile effect Dictionary effectObjects = new Dictionary(); Dictionary shaderProfileTypes = new Dictionary(); for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++) { GraphicsBackend backend = backends[backendIdx]; ShaderProfile shaderProfile = MojoEffectProcessor.ShaderProfileFromBackend(backend); if (shaderProfile == null) throw new InvalidContentException(string.Format("{0} effects are not supported.", backend), input.Identity); try { string fullFilePath = Path.GetFullPath(input.Identity.SourceFilename); // Preprocess the FX file expanding includes and macros. string effectCode = Preprocess(input, context, backend, shaderProfile, fullFilePath); EffectObject effectObject = ProcessTechniques(input, context, backend, shaderProfile, fullFilePath, effectCode); effectObjects[backend] = effectObject; shaderProfileTypes[backend] = shaderProfile.ProfileType; } catch (InvalidContentException) { throw; } catch (Exception ex) { // TODO: Extract good line numbers from fx parser! throw new InvalidContentException(ex.Message, input.Identity, ex); } } Dictionary fxStreams = new Dictionary(); for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++) { GraphicsBackend backend = backends[backendIdx]; EffectObject effectObject = effectObjects[backend]; MemoryStream fxStream = new MemoryStream(); KNIFXWriter11 fxWriter = new KNIFXWriter11(fxStream); { bool integersAsFloats = (shaderProfileTypes[backend] == ShaderProfileType.OpenGL_Mojo); fxWriter.WriteEffect(effectObject, integersAsFloats); } fxStreams[backend] = fxStream; } // Write out the effect to a runtime format. try { using (MemoryStream stream = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(stream)) { // Write a very simple header for identification and versioning. writer.Write(KNIFXWriter11.KNIFXSignature.ToCharArray()); writer.Write((short)KNIFXWriter11.Version); writer.Write((short)0); // reserved // write fx Directory writer.Write((short)backends.Count); int HeaderSize = (int)writer.BaseStream.Position; const int EntrySize = 10; int fxOffset = HeaderSize + (backends.Count * EntrySize); for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++) { GraphicsBackend backend = backends[backendIdx]; MemoryStream fxStream = fxStreams[backend]; { int effectLength = (int)fxStream.Length; // Write the GraphicsBackend, so we can easily detect the correct shader type. writer.Write((short)backend); // Calculate a hash code from memory stream and write it to the header. int effectKey = HashHelper.ComputeHash(fxStream); writer.Write((Int32)effectKey); // write fxOffset writer.Write((Int32)fxOffset); fxOffset += (4 + effectLength); } } // write fx streams for (int backendIdx = 0; backendIdx < backends.Count; backendIdx++) { GraphicsBackend backend = backends[backendIdx]; using (MemoryStream fxStream = fxStreams[backend]) { int effectLength = (int)fxStream.Length; // write the length of the memory stream. writer.Write((Int32)effectLength); //write content from memory stream to final stream. fxStream.WriteTo(writer.BaseStream); } } byte[] effectBytecode = stream.ToArray(); return new CompiledEffectContent(effectBytecode); } } catch (Exception ex) { throw new InvalidContentException("Failed to serialize the effect!", input.Identity, ex); } } /// /// Returns the correct GraphicsBackend for the named platform or /// null if no supporting profile is found. /// public static GraphicsBackend BackendFromPlatform(TargetPlatform platform) { switch (platform) { case TargetPlatform.Windows: case TargetPlatform.WindowsStoreApp: return GraphicsBackend.DirectX11; case TargetPlatform.DesktopGL: case TargetPlatform.MacOSX: return GraphicsBackend.OpenGL; case TargetPlatform.iOS: case TargetPlatform.Android: case TargetPlatform.RaspberryPi: return GraphicsBackend.GLES; case TargetPlatform.BlazorGL: return GraphicsBackend.WebGL; default: throw new InvalidOperationException(); } } /// /// Returns the correct profile for the named GraphicsBackend or /// null if no supporting profile is found. /// public static ShaderProfile ShaderProfileFromBackend(GraphicsBackend backend) { switch (backend) { case GraphicsBackend.DirectX11: return ShaderProfile.DirectX_11; case GraphicsBackend.OpenGL: case GraphicsBackend.GLES: case GraphicsBackend.WebGL: return ShaderProfile.OpenGL_Mojo; default: throw new InvalidOperationException(); } } // Pre-process the file, // resolving all #includes and macros. private string Preprocess(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, string fullFilePath) { Preprocessor pp = new Preprocessor(input, context, fullFilePath); pp.AddMacro("__KNIFX__", "1"); // If we're building shaders for debug set __DEBUG__ flag too. if (DebugMode == EffectProcessorDebugMode.Debug) pp.AddMacro("__DEBUG__", "1"); foreach (KeyValuePair macro in shaderProfile.GetMacros(backend)) pp.AddMacro(macro.Key, macro.Value); if (!string.IsNullOrEmpty(Defines)) { string[] defines = Defines.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string define in defines) { string name = define; string value = "1"; if (define.Contains("=")) { string[] parts = define.Split('='); if (parts.Length > 0) name = parts[0].Trim(); if (parts.Length > 1) value = parts[1].Trim(); } pp.AddMacro(name, value); } } string effectCode = pp.Preprocess(); return effectCode; } private EffectObject ProcessTechniques(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, string fullFilePath, string effectCode) { // Parse the resulting file for techniques and passes. ParseTree tree = new Parser(new Scanner()).Parse(effectCode, fullFilePath); if (tree.Errors.Count > 0) { string errors = String.Empty; foreach (ParseError error in tree.Errors) { errors += string.Format("{0}({1},{2}) : {3}\r\n", error.File, error.Line, error.Column, error.Message); } throw new InvalidContentException(errors, input.Identity); } // Evaluate the results of the parse tree. ShaderInfo shaderInfo = tree.Eval() as ShaderInfo; // Remove the samplers and techniques so that the shader compiler // gets a clean file without any FX file syntax in it. string cleanFile = effectCode; WhitespaceNodes(TokenType.Technique_Declaration, tree.Nodes, ref cleanFile); WhitespaceNodes(TokenType.Sampler_Declaration_States, tree.Nodes, ref cleanFile); // Remove empty techniques. for (int i = 0; i < shaderInfo.Techniques.Count; i++) { TechniqueInfo tech = shaderInfo.Techniques[i]; if (tech.Passes.Count <= 0) { shaderInfo.Techniques.RemoveAt(i); i--; } } // We must have at least one technique. if (shaderInfo.Techniques.Count <= 0) throw new InvalidContentException("The effect must contain at least one technique and pass!", input.Identity); // Create the effect object. EffectObject effectObject = null; string shaderErrorsAndWarnings = String.Empty; try { effectObject = MojoEffectProcessor.CompileEffect(input, context, backend, shaderProfile, shaderInfo, fullFilePath, cleanFile, this.DebugMode, out shaderErrorsAndWarnings); } catch (ShaderCompilerException) { // This will log any warnings and errors and throw. ProcessErrorsAndWarnings(true, shaderErrorsAndWarnings, input, context); } // Process any warning messages that the shader compiler might have produced. ProcessErrorsAndWarnings(false, shaderErrorsAndWarnings, input, context); return effectObject; } private static void WhitespaceNodes(TokenType type, List nodes, ref string sourceFile) { for (int i = 0; i < nodes.Count; i++) { ParseNode n = nodes[i]; if (n.Token.Type != type) { WhitespaceNodes(type, n.Nodes, ref sourceFile); continue; } // Get the full content of this node. int start = n.Token.StartPos; int end = n.Token.EndPos; int length = end - n.Token.StartPos; string content = sourceFile.Substring(start, length); // Replace the content of this node with whitespace. for (int c = 0; c < length; c++) { if (!char.IsWhiteSpace(content[c])) content = content.Replace(content[c], ' '); } // Add the whitespace back to the source file. string newfile = sourceFile.Substring(0, start); newfile += content; newfile += sourceFile.Substring(end); sourceFile = newfile; } } private static EffectObject CompileEffect(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, ShaderProfile shaderProfile, ShaderInfo shaderInfo, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, out string errorsAndWarnings) { errorsAndWarnings = string.Empty; EffectObject effect = new EffectObject(); // These are filled out as we process stuff. effect.ConstantBuffers = new List(); effect.Shaders = new List(); // Go thru the techniques and that will find all the // shaders and constant buffers. effect.Techniques = new EffectObject.EffectTechniqueContent[shaderInfo.Techniques.Count]; for (int t = 0; t < shaderInfo.Techniques.Count; t++) { TechniqueInfo tinfo = shaderInfo.Techniques[t]; EffectObject.EffectTechniqueContent technique = new EffectObject.EffectTechniqueContent(); technique.name = tinfo.name; technique.pass_count = (uint)tinfo.Passes.Count; technique.pass_handles = new EffectObject.EffectPassContent[tinfo.Passes.Count]; for (int p = 0; p < tinfo.Passes.Count; p++) { PassInfo pinfo = tinfo.Passes[p]; EffectObject.EffectPassContent pass = new EffectObject.EffectPassContent(); pass.name = pinfo.name ?? string.Empty; pass.blendState = pinfo.blendState; pass.depthStencilState = pinfo.depthStencilState; pass.rasterizerState = pinfo.rasterizerState; pass.state_count = 0; EffectObject.EffectStateContent[] tempstate = new EffectObject.EffectStateContent[3]; if (!string.IsNullOrEmpty(pinfo.psFunction)) { ShaderVersion psShaderVersion = ShaderVersion.ParsePixelShaderModel(pinfo.psModel); shaderProfile.ValidateShaderModels(pinfo, pinfo.psFunction, pinfo.psModel, ShaderStage.Pixel, psShaderVersion); pass.state_count += 1; tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.psFunction, pinfo.psModel, ShaderStage.Pixel, psShaderVersion, ref errorsAndWarnings); } if (!string.IsNullOrEmpty(pinfo.vsFunction)) { ShaderVersion vsShaderVersion = ShaderVersion.ParseVertexShaderModel(pinfo.vsModel); shaderProfile.ValidateShaderModels(pinfo, pinfo.vsFunction, pinfo.vsModel, ShaderStage.Pixel, vsShaderVersion); pass.state_count += 1; tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.vsFunction, pinfo.vsModel, ShaderStage.Vertex, vsShaderVersion, ref errorsAndWarnings); } if (!string.IsNullOrEmpty(pinfo.csFunction)) { ShaderVersion csShaderVersion = ShaderVersion.ParseComputeShaderModel(pinfo.csModel); shaderProfile.ValidateShaderModels(pinfo, pinfo.csFunction, pinfo.csModel, ShaderStage.Compute, csShaderVersion); pass.state_count += 1; tempstate[pass.state_count - 1] = MojoEffectProcessor.CreateShader(input, context, backend, effect, shaderInfo, shaderProfile, fullFilePath, fileContent, debugMode, pinfo.csFunction, pinfo.csModel, ShaderStage.Compute, csShaderVersion, ref errorsAndWarnings); } pass.states = new EffectObject.EffectStateContent[pass.state_count]; for (int s = 0; s < pass.state_count; s++) pass.states[s] = tempstate[s]; technique.pass_handles[p] = pass; } effect.Techniques[t] = technique; } // Make the list of parameters by combining all the // constant buffers ignoring the buffer offsets. List parameters = new List(); for (int c = 0; c < effect.ConstantBuffers.Count; c++) { ConstantBufferData cb = effect.ConstantBuffers[c]; for (int i = 0; i < cb.Parameters.Count; i++) { EffectObject.EffectParameterContent param = cb.Parameters[i]; int match = parameters.FindIndex(e => e.name == param.name); if (match == -1) { cb.ParameterIndex.Add(parameters.Count); parameters.Add(param); } else { // TODO: Make sure the type and size of // the parameter match up! cb.ParameterIndex.Add(match); } } } // Add the texture parameters from the samplers. foreach (ShaderData shader in effect.Shaders) { for (int s = 0; s < shader._samplers.Length; s++) { SamplerInfo samplerInfo = shader._samplers[s]; int textureParameterIdx = parameters.FindIndex((paramContent) => paramContent.name == samplerInfo.textureName); if (textureParameterIdx != -1) { // TODO: Make sure the type and size of // the parameter match up! shader._samplers[s].textureParameter = textureParameterIdx; } else if (samplerInfo.textureName != null) { EffectObject.EffectParameterContent param = new EffectObject.EffectParameterContent(); param.class_ = EffectObject.PARAMETER_CLASS.OBJECT; param.name = samplerInfo.textureName; param.semantic = string.Empty; param.type = SamplerTypeToParameterType(samplerInfo.type); parameters.Add(param); // Store the index for runtime lookup. textureParameterIdx = parameters.Count-1; shader._samplers[s].textureParameter = textureParameterIdx; } } } // TODO: Annotations are part of the .FX format and // not a part of shaders... we need to implement them // in our fx parser if we want them back. effect.Parameters = parameters.ToArray(); return effect; } private static EffectObject.PARAMETER_TYPE SamplerTypeToParameterType(MojoShader.SamplerType samplerType) { switch (samplerType) { case MojoShader.SamplerType.SAMPLER_1D: return EffectObject.PARAMETER_TYPE.TEXTURE1D; case MojoShader.SamplerType.SAMPLER_2D: return EffectObject.PARAMETER_TYPE.TEXTURE2D; case MojoShader.SamplerType.SAMPLER_VOLUME: return EffectObject.PARAMETER_TYPE.TEXTURE3D; case MojoShader.SamplerType.SAMPLER_CUBE: return EffectObject.PARAMETER_TYPE.TEXTURECUBE; default: throw new InvalidOperationException(); } } internal static EffectObject.EffectStateContent CreateShader(EffectContent input, ContentProcessorContext context, GraphicsBackend backend, EffectObject effect, ShaderInfo shaderInfo, ShaderProfile shaderProfile, string fullFilePath, string fileContent, EffectProcessorDebugMode debugMode, string shaderFunction, string shaderProfileName, ShaderStage shaderStage, ShaderVersion shaderVersion, ref string errorsAndWarnings) { // Check if this shader has already been created. // The index of the shader in the shared list. int sharedIndex = effect.Shaders.FindIndex(shader => shader.ShaderFunctionName == shaderFunction && shader.ShaderProfile == shaderProfileName); if (sharedIndex == -1) { // Compile and create the shader. ShaderData shaderData = shaderProfile.CreateShader(input, context, backend, effect, shaderInfo, fullFilePath, fileContent, debugMode, shaderFunction, shaderProfileName, shaderVersion, shaderStage, ref errorsAndWarnings); shaderData.ShaderFunctionName = shaderFunction; shaderData.ShaderProfile = shaderProfileName; shaderData.ShaderVersion = shaderVersion; sharedIndex = effect.Shaders.Count; effect.Shaders.Add(shaderData); } EffectObject.EffectStateContent state = new EffectObject.EffectStateContent(); state.index = 0; state.type = EffectObject.STATE_TYPE.CONSTANT; state.parameter = new EffectObject.EffectParameterContent(); state.parameter.name = string.Empty; state.parameter.semantic = string.Empty; state.parameter.class_ = EffectObject.PARAMETER_CLASS.OBJECT; state.parameter.rows = 0; state.parameter.columns = 0; state.parameter.columnsActual = 0; state.parameter.data = sharedIndex; switch (shaderStage) { case ShaderStage.Vertex: state.operation = (uint)146; state.parameter.type = EffectObject.PARAMETER_TYPE.VERTEXSHADER; break; case ShaderStage.Pixel: state.operation = (uint)147; state.parameter.type = EffectObject.PARAMETER_TYPE.PIXELSHADER; break; case ShaderStage.Compute: state.operation = (uint)148; state.parameter.type = EffectObject.PARAMETER_TYPE.COMPUTESHADER; break; default: throw new InvalidOperationException("Unsupported shader stage: " + shaderStage); } return state; } private static void ProcessErrorsAndWarnings(bool buildFailed, string shaderErrorsAndWarnings, EffectContent input, ContentProcessorContext context) { // Split the errors and warnings into individual lines. string[] errorsAndWarningArray = shaderErrorsAndWarnings.Split(new[] { "\n", "\r", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); Regex errorOrWarning = new Regex(@"(?.*)\((?[0-9]*(,([0-9]+)(-[0-9]+)?)?)\)\s*:\s*(?error|warning)\s*(?[A-Z0-9]*)\s*:\s*(?.*)", RegexOptions.Compiled); ContentIdentity identity = null; string allErrorsAndWarnings = string.Empty; // Process all the lines. for (int i = 0; i < errorsAndWarningArray.Length; i++) { Match match = errorOrWarning.Match(errorsAndWarningArray[i]); if (!match.Success) // || match.Groups.Count != 8) { // Just log anything we don't recognize as a warning. context.Logger.LogWarning(string.Empty, input.Identity, errorsAndWarningArray[i]); continue; } string fileName = match.Groups["Filename"].Value; string lineAndColumn = match.Groups["LineAndColumn"].Value; string errorType = match.Groups["ErrorType"].Value; string errorCode = match.Groups["ErrorCode"].Value; string message = match.Groups["Message"].Value; // Try to ensure a good file name for the error message. if (string.IsNullOrEmpty(fileName)) fileName = input.Identity.SourceFilename; else if (!File.Exists(fileName)) { string folder = Path.GetDirectoryName(input.Identity.SourceFilename); fileName = Path.Combine(folder, fileName); } identity = new ContentIdentity(fileName, input.Identity.SourceTool, lineAndColumn); string errorCodeAndMessage = string.Format("{0}:{1}", errorCode, message); switch (errorType) { case "warning": context.Logger.LogWarning(string.Empty, identity, errorCodeAndMessage); break; case "error": throw new InvalidContentException(errorCodeAndMessage, identity); default: // log anything we didn't recognize as a warning. if (allErrorsAndWarnings != string.Empty) context.Logger.LogWarning(string.Empty, input.Identity, errorsAndWarningArray[i]); break; } } if (buildFailed) throw new InvalidContentException(allErrorsAndWarnings, identity ?? input.Identity); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Properties/launchSettings.json ================================================ { "profiles": { "Mojo Debug DirectX Effects": { "commandName": "Executable", "executablePath": "X:\\kniEngine\\kni\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Debug\\net8.0-windows\\MGCB.exe", "commandLineArgs": "/@:DirectX.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\\\Tests\\Assets\\Effects\\" }, "Mojo Debug OpenGL Effects": { "commandName": "Executable", "executablePath": "X:\\kniEngine\\kni\\Tools\\MonoGame.Content.Builder\\bin\\Windows\\AnyCPU\\Debug\\net8.0-windows\\MGCB.exe", "commandLineArgs": "/@:OpenGL.mgcb /Rebuild /SingleThread", "workingDirectory": "X:\\kniEngine\\kni\\Tests\\Assets\\\\Effects\\" } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor/Xna.Framework.Content.Pipeline.Graphics.MojoProcessor.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content.Pipeline.Graphics.MojoProcessor\ 4.2.9001.0 4.2.9001.0 false net40;netstandard2.0;net8.0 7.3 Xna.Framework.Content.Pipeline.Graphics.MojoProcessor Microsoft.Xna.Framework.Content.Pipeline.Graphics true CS0067;CS1591;CS1574;CS0419;CS8500 true ..\..\ThirdParty\CppNet\net40\CppNet.dll ..\..\ThirdParty\CppNet\net40\CppNet.dll Utilities\CurrentPlatform.cs libmojoshader_64.dll PreserveNewest True {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {73509F44-3566-4B79-BB47-C7C6E2AA2351} Xna.Framework.Content.Pipeline False {7a3fa1d0-1b03-49cb-9e1b-b9dbf27d74b1} Xna.Framework.Content.Pipeline.Graphics False ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/ExternalTool.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; using System.Threading; using Microsoft.Xna.Platform.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Helper to run an external tool installed in the system. Useful for when /// we don't want to package the tool ourselves (ffmpeg) or it's provided /// by a third party (console manufacturer). /// internal class ExternalTool { public static int Run(string command, string arguments) { string stdout, stderr; var result = Run(command, arguments, out stdout, out stderr); if (result < 0) throw new Exception(string.Format("{0} returned exit code {1}", command, result)); return result; } public static int Run(string command, string arguments, out string stdout, out string stderr, string stdin = null) { // This particular case is likely to be the most common and thus // warrants its own specific error message rather than falling // back to a general exception from Process.Start() var fullPath = FindCommand(command); if (string.IsNullOrEmpty(fullPath)) throw new Exception(string.Format("Couldn't locate external tool '{0}'.", command)); // We can't reference ref or out parameters from within // lambdas (for the thread functions), so we have to store // the data in a temporary variable and then assign these // variables to the out parameters. var stdoutTemp = string.Empty; var stderrTemp = string.Empty; var processInfo = new ProcessStartInfo { Arguments = arguments, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, ErrorDialog = false, FileName = fullPath, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, }; EnsureExecutable(fullPath); using (var process = new Process()) { process.StartInfo = processInfo; process.Start(); // We have to run these in threads, because using ReadToEnd // on one stream can deadlock if the other stream's buffer is // full. var stdoutThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardOutput.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stdoutTemp = System.Text.Encoding.ASCII.GetString(bytes); })); var stderrThread = new Thread(new ThreadStart(() => { var memory = new MemoryStream(); process.StandardError.BaseStream.CopyTo(memory); var bytes = new byte[memory.Position]; memory.Seek(0, SeekOrigin.Begin); memory.Read(bytes, 0, bytes.Length); stderrTemp = System.Text.Encoding.ASCII.GetString(bytes); })); stdoutThread.Start(); stderrThread.Start(); if (stdin != null) { process.StandardInput.Write(System.Text.Encoding.ASCII.GetBytes(stdin)); } // Make sure interactive prompts don't block. process.StandardInput.Close(); process.WaitForExit(); stdoutThread.Join(); stderrThread.Join(); stdout = stdoutTemp; stderr = stderrTemp; return process.ExitCode; } } /// /// Returns the fully-qualified path for a command, searching the system path if necessary. /// /// /// It's apparently necessary to use the full path when running on some systems. /// private static string FindCommand(string command) { // Expand any environment variables. command = Environment.ExpandEnvironmentVariables(command); // If we have a full path just pass it through. if (File.Exists(command)) return command; // For Linux check specific subfolder var lincom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "linux", command); if (CurrentPlatform.OS == OS.Linux && File.Exists(lincom)) return lincom; // For Mac check specific subfolder var maccom = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "osx", command); if (CurrentPlatform.OS == OS.MacOSX && File.Exists(maccom)) return maccom; // We don't have a full path, so try running through the system path to find it. var paths = AppDomain.CurrentDomain.BaseDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable("PATH"); var justTheName = Path.GetFileName(command); foreach (var path in paths.Split(Path.PathSeparator)) { var fullName = Path.Combine(path, justTheName); if (File.Exists(fullName)) return fullName; if (CurrentPlatform.OS == OS.Windows) { var fullExeName = string.Concat(fullName, ".exe"); if (File.Exists(fullExeName)) return fullExeName; } } return null; } /// /// Ensures the specified executable has the executable bit set. If the /// executable doesn't have the executable bit set on Linux or Mac OS, then /// Mono will refuse to execute it. /// /// The full path to the executable. private static void EnsureExecutable(string path) { if (!path.StartsWith("/home") && !path.StartsWith("/Users")) return; try { var p = Process.Start("chmod", "u+x \"" + path + "\""); p.WaitForExit(); } catch { // This platform may not have chmod in the path, in which case we can't // do anything reasonable here. } } /// /// Safely deletes the file if it exists. /// /// The path to the file to delete. public static void DeleteFile(string filePath) { try { File.Delete(filePath); } catch (Exception) { } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/H264Importer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Content.Pipeline { [ContentImporter(".mp4", DisplayName = "H.264 Video - KNI", DefaultProcessor = "VideoProcessor")] public class H264Importer : ContentImporter { public H264Importer() { } public override VideoContent Import(string filename, ContentImporterContext context) { var content = new VideoContent(filename); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Processors/SongProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Audio; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// A custom song processor that processes an intermediate AudioContent type. This type encapsulates the source audio content, producing a Song type that can be used in the game. /// [ContentProcessor(DisplayName = "Song - KNI")] public class SongProcessor : ContentProcessor { ConversionQuality _quality = ConversionQuality.Best; /// /// Gets or sets the target format quality of the audio content. /// /// The ConversionQuality of this audio data. public ConversionQuality Quality { get { return _quality; } set { _quality = value; } } /// /// Initializes a new instance of SongProcessor. /// public SongProcessor() { } /// /// Builds the content for the source audio. /// /// The audio content to build. /// Context for the specified processor. /// The built audio. public override SongContent Process(AudioContent input, ContentProcessorContext context) { // The xnb name is the basis for the final song filename. string songFileName = context.OutputFilename; // Convert and write out the song media file. ConversionQuality quality = _quality; ConversionFormat targetFormat; switch (context.TargetPlatform) { case TargetPlatform.Windows: case TargetPlatform.WindowsStoreApp: targetFormat = ConversionFormat.WindowsMedia; break; case TargetPlatform.DesktopGL: targetFormat = ConversionFormat.Vorbis; break; case TargetPlatform.BlazorGL: targetFormat = ConversionFormat.Mp3; break; case TargetPlatform.Android: targetFormat = ConversionFormat.Mp3; break; case TargetPlatform.iOS: targetFormat = ConversionFormat.Mp3; break; default: targetFormat = ConversionFormat.Mp3; break; } // Get the song output path with the target format extension. songFileName = Path.ChangeExtension(songFileName, SongProcessor.GetExtension(targetFormat)); // Make sure the output folder for the file exists. Directory.CreateDirectory(Path.GetDirectoryName(songFileName)); input.ConvertFormat(targetFormat, quality, songFileName); // Let the pipeline know about the song file so it can clean things up. context.AddOutputFile(songFileName); // Return the XNB song content. string relativeMediaPath = PathHelper.GetRelativePath(Path.GetDirectoryName(context.OutputFilename) + Path.DirectorySeparatorChar, songFileName); return new SongContent(relativeMediaPath, input.Duration); } /// /// Gets the file extension for an audio format. /// /// The conversion format /// The file extension for the given conversion format. static public string GetExtension(ConversionFormat format) { switch (format) { case ConversionFormat.Adpcm: case ConversionFormat.Pcm: return "wav"; case ConversionFormat.WindowsMedia: return "wma"; case ConversionFormat.Xma: return "xma"; case ConversionFormat.ImaAdpcm: return "wav"; case ConversionFormat.Aac: return "m4a"; case ConversionFormat.Vorbis: return "ogg"; case ConversionFormat.Mp3: return "mp3"; default: throw new ArgumentOutOfRangeException(nameof(format), format, null); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Processors/VideoProcessor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2025 Nick Kastellanos using System; using System.ComponentModel; using System.IO; using Microsoft.Xna.Framework.Content.Pipeline.Utilities; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { [ContentProcessor(DisplayName = "Video - KNI")] public class VideoProcessor : ContentProcessor { [DefaultValue(typeof(VideoProcessorOutputFormat), "Default")] public virtual VideoProcessorOutputFormat VideoFormat { get; set; } public override VideoContent Process(VideoContent input, ContentProcessorContext context) { string relative = Path.GetDirectoryName(PathHelper.GetRelativePath(context.OutputDirectory, context.OutputFilename)); string relVideoPath = PathHelper.Normalize(Path.Combine(relative, Path.GetFileName(input.Filename))); string absVideoPath = PathHelper.Normalize(Path.Combine(context.OutputDirectory, relVideoPath)); // Make sure the output folder for the video exists. Directory.CreateDirectory(Path.GetDirectoryName(absVideoPath)); VideoProcessorOutputFormat videoFormat = VideoFormat; if (videoFormat == VideoProcessorOutputFormat.NoChange) { // Copy the already encoded video file over File.Copy(input.Filename, absVideoPath, true); context.AddOutputFile(absVideoPath); } else { if (videoFormat == VideoProcessorOutputFormat.Default) videoFormat = VideoProcessor.GetDefaultOutputFormat(context.TargetPlatform); string containerExt = VideoProcessor.GetExtension(videoFormat); absVideoPath = Path.ChangeExtension(absVideoPath, containerExt); input.ConvertFormat(absVideoPath); context.AddOutputFile(absVideoPath); } // Fixup relative path string relativeMediaPath = PathHelper.GetRelativePath(context.OutputFilename, absVideoPath); input.Filename = relativeMediaPath; return input; } public static VideoProcessorOutputFormat GetDefaultOutputFormat(TargetPlatform targetPlatform) { switch (targetPlatform) { case TargetPlatform.Windows: case TargetPlatform.WindowsStoreApp: return VideoProcessorOutputFormat.WMV; case TargetPlatform.iOS: return VideoProcessorOutputFormat.WebM; case TargetPlatform.Android: return VideoProcessorOutputFormat.WebM; case TargetPlatform.BlazorGL: return VideoProcessorOutputFormat.WebM; case TargetPlatform.DesktopGL: return VideoProcessorOutputFormat.WebM; default: return VideoProcessorOutputFormat.WebM; } } public static string GetExtension(VideoProcessorOutputFormat videoFormat) { switch (videoFormat) { case VideoProcessorOutputFormat.WMV: return ".wmv"; case VideoProcessorOutputFormat.MP4: return ".mp4"; case VideoProcessorOutputFormat.WebM: return ".webm"; default: throw new InvalidOperationException("Unsupported video format: " + videoFormat); } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Processors/VideoProcessorOutputFormat.cs ================================================ // Copyright (C)2025 Nick Kastellanos namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { public enum VideoProcessorOutputFormat { Default = 0, NoChange = 1, WMV = 2, MP4 = 3, WebM = 4, } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Serialization/Compiler/SongWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline.Processors; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class SongWriter : ContentTypeWriter { /// /// Writes the value to the output. /// /// The output writer object. /// The value to write to the output. protected override void Write(ContentWriter output, SongContent value) { output.Write(value.fileName); output.WriteObject((int)value.duration.TotalMilliseconds); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".SongReader"; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeNamespace = "Microsoft.Xna.Framework.Media"; string typeName = ".Song"; string typeAssembly = ", Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeNamespace + typeName + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Serialization/Compiler/VideoWriter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler { [ContentTypeWriter] class VideoWriter : ContentTypeWriter { protected override void Write(ContentWriter output, VideoContent value) { output.WriteObject(value.Filename); output.WriteObject((int)value.Duration.TotalMilliseconds); output.WriteObject(value.Width); output.WriteObject(value.Height); output.WriteObject(value.FramesPerSecond); output.WriteObject((int)value.VideoSoundtrackType); } /// public override string GetRuntimeReader(TargetPlatform targetPlatform) { string readerNamespace = "Microsoft.Xna.Framework.Content"; string readerName = ".VideoReader"; // From looking at XNA-produced XNBs, it appears built-in // type readers don't need assembly qualification. string readerAssembly = String.Empty; string runtimeReader = readerNamespace + readerName + readerAssembly; return runtimeReader; } /// public override string GetRuntimeType(TargetPlatform targetPlatform) { string typeNamespace = "Microsoft.Xna.Framework.Media"; string typeName = ".Video"; string typeAssembly = ", Microsoft.Xna.Framework.Video, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"; string runtimeType = typeNamespace + typeName + typeAssembly; return runtimeType; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/SongContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline.Processors { /// /// Represents a processed Song object. /// public sealed class SongContent { internal string fileName; internal TimeSpan duration; /// /// Creates a new instance of the SongContent class /// /// Filename of the song /// Duration of the song internal SongContent(string fileName, TimeSpan duration) { this.fileName = fileName; this.duration = duration; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Utilities/PathHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Content.Pipeline; namespace Microsoft.Xna.Framework.Content.Pipeline.Utilities { internal static class PathHelper { /// /// The/universal/standard/directory/seperator. /// public const char DirectorySeparator = '/'; /// /// Returns a path string normalized to the/universal/standard. /// public static string Normalize(string path) { return path.Replace('\\', '/'); } /// /// Returns a directory path string normalized to the/universal/standard /// with a trailing seperator. /// public static string NormalizeDirectory(string path) { return path.Replace('\\', '/').TrimEnd('/') + '/'; } /// /// Returns a path string normalized to the\Windows\standard. /// public static string NormalizeWindows(string path) { return path.Replace('/', '\\'); } /// /// Returns a path relative to the base path. /// /// The path to make relative to. Must end with directory seperator. /// The path to be made relative to the basePath. /// The relative path or the original string if it is not absolute or cannot be made relative. public static string GetRelativePath(string basePath, string path) { Uri uri; if (!Uri.TryCreate(path, UriKind.Absolute, out uri)) return path; uri = new Uri(basePath).MakeRelativeUri(uri); var str = Uri.UnescapeDataString(uri.ToString()); return Normalize(str); } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/VideoContent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Linq; using System.Globalization; using System.IO; using Microsoft.Xna.Framework.Media; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides a base class for all video objects. /// public class VideoContent : ContentItem, IDisposable { private bool _disposed; private int _bitsPerSecond; private TimeSpan _duration; private float _framesPerSecond; private int _height; private int _width; /// /// Gets the bit rate for this video. /// public int BitsPerSecond { get { return _bitsPerSecond; } } /// /// Gets the duration of this video. /// public TimeSpan Duration { get { return _duration; } } /// /// Gets or sets the file name for this video. /// [ContentSerializerAttribute] public string Filename { get; set; } /// /// Gets the frame rate for this video. /// public float FramesPerSecond { get { return _framesPerSecond; } } /// /// Gets the height of this video. /// public int Height { get { return _height; } } /// /// Gets or sets the type of soundtrack accompanying the video. /// [ContentSerializerAttribute] public VideoSoundtrackType VideoSoundtrackType { get; set; } /// /// Gets the width of this video. /// public int Width { get { return _width; } } /// /// Initializes a new copy of the VideoContent class for the specified video file. /// /// The file name of the video to import. public VideoContent(string filename) { Filename = filename; VideoContent.ProbeFormat(filename, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond); } private static void ProbeFormat(string sourceFile, out int width, out int height, out TimeSpan duration, out int bitsPerSecond, out float framesPerSecond) { // Set default values if information is not available. width = 0; height = 0; duration = TimeSpan.Zero; bitsPerSecond = 0; framesPerSecond = 0.0f; string stdout, stderr; var result = ExternalTool.Run("ffprobe", string.Format("-i \"{0}\" -show_format -select_streams v -show_streams -print_format ini", sourceFile), out stdout, out stderr); var lines = stdout.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { if (!line.Contains('=')) continue; var key = line.Substring(0, line.IndexOf('=')); var value = line.Substring(line.IndexOf('=') + 1); switch (key) { case "duration": if (value != "N/A") duration = TimeSpan.FromSeconds(double.Parse(value, CultureInfo.InvariantCulture)); break; case "bit_rate": if (value != "N/A") bitsPerSecond = int.Parse(value, CultureInfo.InvariantCulture); break; case "width": width = int.Parse(value, CultureInfo.InvariantCulture); break; case "height": height = int.Parse(value, CultureInfo.InvariantCulture); break; case "r_frame_rate": var frac = value.Split('/'); framesPerSecond = float.Parse(frac[0], CultureInfo.InvariantCulture) / float.Parse(frac[1], CultureInfo.InvariantCulture); break; } } } public void ConvertFormat(string saveToFile) { string containerExt = Path.GetExtension(saveToFile).ToLower(); switch (containerExt) { case ".wmv": this.ConvertToWmv(saveToFile); VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond); this.Filename = saveToFile; break; case ".mp4": this.ConvertToMP4(saveToFile); VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond); this.Filename = saveToFile; break; case ".webm": this.ConvertToWebM(saveToFile); VideoContent.ProbeFormat(saveToFile, out _width, out _height, out _duration, out _bitsPerSecond, out _framesPerSecond); this.Filename = saveToFile; break; default: throw new InvalidOperationException("Unsupported video format: " + containerExt); } } private void ConvertToWmv(string saveToFile) { string ffmpegVCodecName, ffmpegACodecName; ffmpegVCodecName = "wmv2"; ffmpegACodecName = "wmav2"; string args = string.Format( "-y -i \"{0}\" -c:v {1} -c:a {2} -movflags +faststart \"{3}\"", this.Filename, ffmpegVCodecName, ffmpegACodecName, saveToFile); string ffmpegStdout, ffmpegStderr; int ffmpegExitCode; ffmpegExitCode = ExternalTool.Run("ffmpeg", args, out ffmpegStdout, out ffmpegStderr); if (ffmpegExitCode != 0) throw new InvalidOperationException("ffmpeg exited with non-zero exit code: \n" + ffmpegStdout + "\n" + ffmpegStderr); } private void ConvertToMP4(string saveToFile) { string ffmpegVCodecName, ffmpegACodecName; ffmpegVCodecName = "libx264"; ffmpegACodecName = "aac"; string args = string.Format( //"-y -i \"{0}\" -c:v {1} -profile:v baseline -level 3.0 -c:a {2} -strict -2 -movflags +faststart \"{3}\"", "-y -i \"{0}\" -c:v {1} -profile:v main -c:a {2} -strict -2 -movflags +faststart \"{3}\"", this.Filename, ffmpegVCodecName, ffmpegACodecName, saveToFile); string ffmpegStdout, ffmpegStderr; int ffmpegExitCode; ffmpegExitCode = ExternalTool.Run("ffmpeg", args, out ffmpegStdout, out ffmpegStderr); if (ffmpegExitCode != 0) throw new InvalidOperationException("ffmpeg exited with non-zero exit code: \n" + ffmpegStdout + "\n" + ffmpegStderr); } private void ConvertToWebM(string saveToFile) { string ffmpegVCodecName, ffmpegACodecName; ffmpegVCodecName = "libvpx-vp9"; ffmpegACodecName = "libopus"; string args = string.Format( "-y -i \"{0}\" -c:v {1} -b:v 0 -crf 30 -c:a {2} -fflags +bitexact \"{3}\"", this.Filename, ffmpegVCodecName, ffmpegACodecName, saveToFile); string ffmpegStdout, ffmpegStderr; int ffmpegExitCode; ffmpegExitCode = ExternalTool.Run("ffmpeg", args, out ffmpegStdout, out ffmpegStderr); if (ffmpegExitCode != 0) throw new InvalidOperationException("ffmpeg exited with non-zero exit code: \n" + ffmpegStdout + "\n" + ffmpegStderr); } ~VideoContent() { Dispose(false); } /// /// Immediately releases the unmanaged resources used by this object. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { // TODO: Free managed resources here // ... } // TODO: Free unmanaged resources here // ... _disposed = true; } } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/VideoImporter.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Content.Pipeline { [ContentImporter(".wmv", ".asf", ".mp4", ".m4v", ".avi", ".divx", ".xvid", ".mov", ".mpg", ".mpeg", ".webm", ".mkv", ".ogv", ".mjpeg", ".vob", ".ts", ".y4m", ".flv", ".3gp", DisplayName = "Video Importer - KNI", DefaultProcessor = "VideoProcessor")] public class VideoImporter : ContentImporter { public VideoImporter() { } public override VideoContent Import(string filename, ContentImporterContext context) { var content = new VideoContent(filename); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/WmvImporter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Content.Pipeline { /// /// Provides methods for reading Windows Media Video (.wmv) files for use in the Content Pipeline. /// [ContentImporter(".wmv", DisplayName = "Wmv Importer - KNI", DefaultProcessor = "VideoProcessor")] public class WmvImporter : ContentImporter { /// /// Initializes a new instance of WmvImporter. /// public WmvImporter() { } /// /// Called by the XNA Framework when importing a .wmv file to be used as a game asset. This is the method called by the XNA Framework when an asset is to be imported into an object that can be recognized by the Content Pipeline. /// /// Name of a game asset file. /// Contains information for importing a game asset, such as a logger interface. /// Resulting game asset. public override VideoContent Import(string filename, ContentImporterContext context) { var content = new VideoContent(filename); return content; } } } ================================================ FILE: src/Xna.Framework.Content.Pipeline.Media/Xna.Framework.Content.Pipeline.Media.csproj ================================================  ..\..\Artifacts\Xna.Framework.Content.Pipeline.Media\ 4.2.9001.0 4.2.9001.0 false net40;netstandard2.0;net8.0 7.3 Xna.Framework.Content.Pipeline.Media Microsoft.Xna.Framework.Content.Pipeline true CS0067;CS1591;CS1574;CS0419;CS8500 true KNI Framework Framework Content Pipeline Media. KNI; nkast.Xna.Framework.Content.Pipeline.Media Utilities\CurrentPlatform.cs ffmpeg.exe PreserveNewest True ffprobe.exe PreserveNewest True {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {73509F44-3566-4B79-BB47-C7C6E2AA2351} Xna.Framework.Content.Pipeline False {6E0E6284-13FF-4DC7-8FC2-B6D756EAF1FD} Xna.Framework.Media {acd26013-5730-4caf-9468-3baae867a8a2} Xna.Framework.Content.Pipeline.Audio False ================================================ FILE: src/Xna.Framework.Design/Design/ColorConverter.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Design { public class ColorConverter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) return true; return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { Color color = (Color)value; if (destinationType == typeof(string)) { var terms = new string[4]; terms[0] = color.R.ToString("R", culture); terms[1] = color.G.ToString("R", culture); terms[2] = color.B.ToString("R", culture); terms[3] = color.A.ToString("R", culture); return string.Join(culture.TextInfo.ListSeparator + " ", terms); } return base.ConvertTo(context, culture, value, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { Type sourceType = value.GetType(); Color color = default(Color); if (sourceType == typeof(string)) { string str = (string)value; string[] values = str.Split(culture.TextInfo.ListSeparator.ToCharArray()); color.R = (byte)int.Parse(values[0], culture); color.G = (byte)int.Parse(values[1], culture); color.B = (byte)int.Parse(values[2], culture); color.A = (byte)int.Parse(values[3], culture); return color; } return base.ConvertFrom(context, culture, value); } } } ================================================ FILE: src/Xna.Framework.Design/Design/Vector2Converter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Design { public class Vector2Converter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) return true; return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var vec = (Vector2)value; if (destinationType == typeof(string)) { var terms = new string[2]; terms[0] = vec.X.ToString("R", culture); terms[1] = vec.Y.ToString("R", culture); return string.Join(culture.TextInfo.ListSeparator + " ", terms); } return base.ConvertTo(context, culture, value, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var sourceType = value.GetType(); var vec = Vector2.Zero; if (sourceType == typeof(string)) { var str = (string)value; var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray()); vec.X = float.Parse(words[0], culture); vec.Y = float.Parse(words[1], culture); return vec; } return base.ConvertFrom(context, culture, value); } } } ================================================ FILE: src/Xna.Framework.Design/Design/Vector3Converter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Design { public class Vector3Converter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) return true; return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var vec = (Vector3)value; if (destinationType == typeof(string)) { var terms = new string[3]; terms[0] = vec.X.ToString("R", culture); terms[1] = vec.Y.ToString("R", culture); terms[2] = vec.Z.ToString("R", culture); return string.Join(culture.TextInfo.ListSeparator + " ", terms); } return base.ConvertTo(context, culture, value, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var sourceType = value.GetType(); var vec = Vector3.Zero; if (sourceType == typeof(string)) { var str = (string)value; var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray()); vec.X = float.Parse(words[0], culture); vec.Y = float.Parse(words[1], culture); vec.Z = float.Parse(words[2], culture); return vec; } return base.ConvertFrom(context, culture, value); } } } ================================================ FILE: src/Xna.Framework.Design/Design/Vector4Converter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Globalization; namespace Microsoft.Xna.Framework.Design { public class Vector4Converter : TypeConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) return true; return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var vec = (Vector4)value; if (destinationType == typeof(string)) { var terms = new string[4]; terms[0] = vec.X.ToString("R", culture); terms[1] = vec.Y.ToString("R", culture); terms[2] = vec.Z.ToString("R", culture); terms[3] = vec.W.ToString("R", culture); return string.Join(culture.TextInfo.ListSeparator + " ", terms); } return base.ConvertTo(context, culture, value, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var sourceType = value.GetType(); var vec = Vector4.Zero; if (sourceType == typeof(string)) { var str = (string)value; var words = str.Split(culture.TextInfo.ListSeparator.ToCharArray()); vec.X = float.Parse(words[0], culture); vec.Y = float.Parse(words[1], culture); vec.Z = float.Parse(words[2], culture); vec.W = float.Parse(words[3], culture); return vec; } return base.ConvertFrom(context, culture, value); } } } ================================================ FILE: src/Xna.Framework.Design/Properties/AssemblyInfo.cs ================================================ using System; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework.Design/Xna.Framework.Design.csproj ================================================  ..\..\Artifacts\Xna.Framework.Design\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 {E37F98D7-C4E8-4556-B322-AEF99638ECE1} Xna.Framework.Design Microsoft.Xna.Framework.Design true CS0067;CS1591;CS1574;CS0419;CS8500 true The Design Converters. KNI;.net core;core;.net standard;standard nkast.Xna.Framework.Design {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False ================================================ FILE: src/Xna.Framework.Devices/Devices/DevicesFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices { public abstract class DevicesFactory { private volatile static DevicesFactory _current; internal static DevicesFactory Current { get { DevicesFactory current = _current; if (current != null) return current; lock (typeof(DevicesFactory)) { if (_current != null) return _current; Console.WriteLine("DevicesFactory not found."); Console.WriteLine("Initialize devices with 'DevicesFactory.RegisterDevicesFactory(new ConcreteDevicesFactory());'."); DevicesFactory devicesFactory = CreateDevicesFactory(); DevicesFactory.RegisterDevicesFactory(devicesFactory); } return _current; } } private static DevicesFactory CreateDevicesFactory() { Console.WriteLine("Registering ConcreteDevicesFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.Devices.ConcreteDevicesFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(DevicesFactory)) && !type.IsAbstract) return (DevicesFactory)Activator.CreateInstance(type); return null; } public static void RegisterDevicesFactory(DevicesFactory devicesFactory) { if (devicesFactory == null) throw new NullReferenceException("devicesFactory"); lock (typeof(DevicesFactory)) { if (_current == null) _current = devicesFactory; else throw new InvalidOperationException("devicesFactory allready registered."); } } public abstract HapticsStrategy CreateConcreteHapticsStrategy(); public abstract SensorServiceStrategy CreateSensorServiceStrategy(); public abstract AccelerometerStrategy CreateAccelerometerStrategy(); public abstract CompassStrategy CreateCompassStrategy(); } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Haptics.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Devices; using Microsoft.Xna.Platform.Devices; namespace Microsoft.Xna.Platform.Devices { public interface IPlatformHaptics { T GetStrategy() where T : HapticsStrategy; } } namespace Microsoft.Xna.Framework.Devices { public sealed class Haptics : IPlatformHaptics { private static Haptics _current; /// /// Returns the current Vibrator instance. /// public static Haptics Current { get { if (_current != null) return _current; lock (typeof(Haptics)) { if (_current == null) _current = new Haptics(); return _current; } } } private HapticsStrategy _strategy; T IPlatformHaptics.GetStrategy() { return (T)_strategy; } private Haptics() { _strategy = DevicesFactory.Current.CreateConcreteHapticsStrategy(); } public void Vibrate(TimeSpan duration) { lock (typeof(Haptics)) { _strategy.Vibrate(duration); } } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/HapticsStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Devices; namespace Microsoft.Xna.Platform.Devices { public abstract class HapticsStrategy { public abstract void Vibrate(TimeSpan duration); } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/Accelerometer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Framework.Devices.Sensors { /// /// Provides access to the device's accelerometer sensor. /// public sealed class Accelerometer : SensorBase { private AccelerometerStrategy _strategy; private bool _isDisposed; internal AccelerometerStrategy Strategy { get { return _strategy; } } /// /// Gets whether the device on which the application is running supports the accelerometer sensor. /// public static bool IsSupported { get { return SensorService.Current.IsAccelerometerSupported; } } /// /// Gets the current state of the accelerometer. The value is a member of the SensorState enumeration. /// public SensorState State { get { ThrowIfDisposed(); return Strategy.State; } } protected override bool IsDisposed { get { return _isDisposed; } } public override bool IsDataValid { get { return Strategy.IsDataValid; } } public override TimeSpan ReportInterval { get { return Strategy.ReportInterval; } set { Strategy.ReportInterval = value; } } public override AccelerometerReading CurrentReading { get { return Strategy.CurrentReading; } } /// /// Creates a new instance of the Accelerometer object. /// public Accelerometer() { _strategy = DevicesFactory.Current.CreateAccelerometerStrategy(); _strategy.ReadingChanged += _strategy_ReadingChanged; } private void _strategy_ReadingChanged(object sender, SensorReadingEventArgs eventArgs) { OnReadingChanged(eventArgs); } /// /// Starts data acquisition from the accelerometer. /// public override void Start() { ThrowIfDisposed(); Strategy.Start(); } /// /// Stops data acquisition from the accelerometer. /// public override void Stop() { ThrowIfDisposed(); Strategy.Stop(); } protected override void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { Strategy.Dispose(); } _isDisposed = true; //base.Dispose(disposing); } } private void ThrowIfDisposed() { if (!_isDisposed) return; throw new ObjectDisposedException("Accelerometer"); } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/AccelerometerFailedException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Devices.Sensors { /// /// The exception that may be thrown during a call to Start() or Stop(). The Message field describes the reason for the exception and the ErrorId field contains the error code from the underlying native code implementation of the accelerometer framework. /// public class AccelerometerFailedException : SensorFailedException { /// /// Initializes a new instance of AccelerometerFailedException /// /// The descriptive reason for the exception /// The native error code that caused the exception internal AccelerometerFailedException(string message, int errorId) : base(message) { ErrorId = errorId; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/AccelerometerReading.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Devices.Sensors { public struct AccelerometerReading : ISensorReading { public Vector3 Acceleration { get; internal set; } public DateTimeOffset Timestamp { get; internal set; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/AccelerometerStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { public abstract class AccelerometerStrategy : SensorStrategy , IDisposable { public AccelerometerStrategy() { } protected AccelerometerReading CreateAccelerometerReading( Vector3 acceleration, DateTimeOffset timestamp ) { AccelerometerReading reading = new AccelerometerReading(); reading.Acceleration = acceleration; reading.Timestamp = timestamp; return reading; } protected AccelerometerFailedException CreateAccelerometerFailedException(string message, int errorId) { return new AccelerometerFailedException(message, errorId); } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/CalibrationEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Devices.Sensors { /// /// Provides data for Calibrate and events. /// public class CalibrationEventArgs : EventArgs { public static readonly CalibrationEventArgs Empty = new CalibrationEventArgs(); /// /// Initializes a new instance of the CalibrationEventArgs class. /// /// /// Obtain a CalibrationEventArgs object by implementing a handler for the Compass.Calibrate event. /// public CalibrationEventArgs() { } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/Compass.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Devices; using Microsoft.Xna.Platform.Devices.Sensors; namespace Microsoft.Xna.Framework.Devices.Sensors { /// /// Provides access to the device's compass sensor. /// public sealed class Compass : SensorBase { private CompassStrategy _strategy; private bool _isDisposed; public event EventHandler Calibrate; internal CompassStrategy Strategy { get { return _strategy; } } /// /// Gets whether the device on which the application is running supports the compass sensor. /// public static bool IsSupported { get { return SensorService.Current.IsCompassSupported; } } /// /// Gets the current state of the compass. The value is a member of the SensorState enumeration. /// public SensorState State { get { ThrowIfDisposed(); return Strategy.State; } } protected override bool IsDisposed { get { return _isDisposed; } } public override bool IsDataValid { get { return Strategy.IsDataValid; } } public override TimeSpan ReportInterval { get { return Strategy.ReportInterval; } set { Strategy.ReportInterval = value; } } public override CompassReading CurrentReading { get { return Strategy.CurrentReading; } } /// /// Creates a new instance of the Compass object. /// public Compass() { _strategy = DevicesFactory.Current.CreateCompassStrategy(); _strategy.ReadingChanged += _strategy_CurrentReadingChanged; _strategy.Calibrate += _strategy_Calibrate; } private void _strategy_CurrentReadingChanged(object sender, SensorReadingEventArgs eventArgs) { OnReadingChanged(eventArgs); } private void _strategy_Calibrate(object sender, CalibrationEventArgs eventArgs) { OnCalibrate(eventArgs); } /// /// Starts data acquisition from the compass. /// public override void Start() { ThrowIfDisposed(); Strategy.Start(); } /// /// Stops data acquisition from the accelerometer. /// public override void Stop() { ThrowIfDisposed(); Strategy.Stop(); } private void OnCalibrate(CalibrationEventArgs eventArgs) { var handler = Calibrate; if (handler != null) handler(this, eventArgs); } protected override void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { Strategy.Dispose(); } _isDisposed = true; //base.Dispose(disposing); } } private void ThrowIfDisposed() { if (!_isDisposed) return; throw new ObjectDisposedException("Compass"); } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/CompassReading.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Devices.Sensors { public struct CompassReading : ISensorReading { public double HeadingAccuracy { get; internal set; } public double MagneticHeading { get; internal set; } public Vector3 MagnetometerReading { get; internal set; } public DateTimeOffset Timestamp { get; internal set; } public double TrueHeading { get; internal set; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/CompassStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { public abstract class CompassStrategy : SensorStrategy , IDisposable { public event EventHandler Calibrate; public CompassStrategy() { } internal protected virtual void OnCalibrate(CalibrationEventArgs eventArgs) { var handler = Calibrate; if (handler != null) handler(this, eventArgs); } protected CompassReading CreateCompassReading( double headingAccuracy, double magneticHeading, Vector3 magnetometerReading, DateTimeOffset timestamp, double trueHeading ) { CompassReading reading = new CompassReading(); reading.HeadingAccuracy = headingAccuracy; reading.MagneticHeading = magneticHeading; reading.MagnetometerReading = magnetometerReading; reading.Timestamp = timestamp; reading.TrueHeading = trueHeading; return reading; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/ISensorReading.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Devices.Sensors { public interface ISensorReading { DateTimeOffset Timestamp { get; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorBase.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Devices.Sensors { public abstract class SensorBase : IDisposable where TSensorReading : ISensorReading { public event EventHandler> ReadingChanged; public abstract TSensorReading CurrentReading { get; } public abstract bool IsDataValid { get; } public abstract TimeSpan ReportInterval { get; set; } protected abstract bool IsDisposed { get; } public SensorBase() { } public abstract void Start(); public abstract void Stop(); protected virtual void OnReadingChanged(SensorReadingEventArgs eventArgs) { var handler = ReadingChanged; if (handler != null) handler(this, eventArgs); } #region IDisposable ~SensorBase() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion IDisposable } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorFailedException.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Devices.Sensors { public class SensorFailedException : Exception { public int ErrorId { get; protected set; } internal SensorFailedException(string message) : base(message) { } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorReadingEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Devices.Sensors { public class SensorReadingEventArgs : EventArgs where T : ISensorReading { public T SensorReading { get; set; } public SensorReadingEventArgs(T sensorReading) { this.SensorReading = sensorReading; } } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorService.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { public sealed class SensorService : IDisposable , IPlatformSensorService { private volatile static SensorService _current; private SensorServiceStrategy _strategy; public readonly static object SyncHandle = new object(); SensorServiceStrategy IPlatformSensorService.Strategy { get { return _strategy; } } public static SensorService Current { get { SensorService current = _current; if (current != null) return current; // Create instance lock(SyncHandle) { if (_current == null) { try { _current = new SensorService(); } catch (Exception ex) { throw new Exception("SensorService has failed to initialize.", ex); } } return _current; } } } internal bool IsAccelerometerSupported { get { return _strategy.PlatformIsAccelerometerSupported(); } } internal bool IsCompassSupported { get { return _strategy.PlatformIsCompassSupported(); } } private SensorService() { _strategy = DevicesFactory.Current.CreateSensorServiceStrategy(); } public static void Suspend() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current._strategy.Suspend(); } } } public static void Resume() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current._strategy.Resume(); } } } public static void Shutdown() { if (_current == null) return; // Shutdown lock (SyncHandle) { if (_current != null) { _current.Dispose(); _current = null; } } } #region IDisposable private bool isDisposed = false; public event EventHandler Disposing; ~SensorService() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (disposing) { if (isDisposed) return; var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); _strategy.Dispose(); _strategy = null; isDisposed = true; } else { if (isDisposed) return; _strategy = null; isDisposed = true; } } #endregion // IDisposable } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorServiceStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { public interface IPlatformSensorService { SensorServiceStrategy Strategy { get; } } abstract public class SensorServiceStrategy : IDisposable { public abstract void Suspend(); public abstract void Resume(); public abstract bool PlatformIsAccelerometerSupported(); public abstract bool PlatformIsCompassSupported(); public T ToConcrete() where T : SensorServiceStrategy { return (T)this; } #region IDisposable ~SensorServiceStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Devices.Sensors { public enum SensorState { NotSupported, Ready, Initializing, NoData, NoPermissions, Disabled } } ================================================ FILE: src/Xna.Framework.Devices/Devices/Sensors/SensorStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Devices.Sensors; namespace Microsoft.Xna.Platform.Devices.Sensors { public class SensorStrategy : IDisposable where TSensorReading : ISensorReading { private SensorState _state; private bool _isDataValid; private TimeSpan _reportInterval = TimeSpan.FromMilliseconds(2); private TSensorReading _currentReading; public event EventHandler> ReadingChanged; public virtual SensorState State { get { return _state; } set { _state = value; } } public virtual bool IsDataValid { get { return _isDataValid; } set { _isDataValid = value; } } public virtual TimeSpan ReportInterval { get { return _reportInterval; } set { _reportInterval = value; } } public virtual TSensorReading CurrentReading { get { return _currentReading; } set { _currentReading = value; } } public SensorStrategy() { } public virtual void Start() { } public virtual void Stop() { } internal protected virtual void OnReadingChanged(SensorReadingEventArgs eventArgs) { var handler = ReadingChanged; if (handler != null) handler(this, eventArgs); } protected SensorFailedException CreateSensorFailedException(string message) { throw new SensorFailedException(message); } #region IDisposable Members ~SensorStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { } } #endregion } } ================================================ FILE: src/Xna.Framework.Devices/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Devices/NamespaceDoc.cs ================================================ // Copyright (C)2024 Nick Kastellanos namespace Microsoft.Xna.Framework.Devices { /// /// Provides functionality to handle devices like haptics, etc. /// [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] class NamespaceDoc { } } ================================================ FILE: src/Xna.Framework.Devices/Xna.Framework.Devices.csproj ================================================  ..\..\Artifacts\Xna.Framework.Devices\ 4.2.9001.0 4.2.9001.0 false false netstandard2.0;net8.0 7.3 true {6B3E56F7-C567-463C-9746-0244FD959322} Xna.Framework.Devices Microsoft.Xna.Framework.Devices true CS0067;CS1591;CS1574;CS0419;CS8500 true The Devices framework. .net core;core;.net standard;standard nkast.Xna.Framework.Devices ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Game/DrawableGameComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// A that is drawn when its is drawn. /// public class DrawableGameComponent : GameComponent, IDrawable { private bool _initialized; private bool _disposed; private int _drawOrder; private bool _visible = true; /// /// Get the that this uses for drawing. /// public Graphics.GraphicsDevice GraphicsDevice { get { return this.Game.GraphicsDevice; } } public int DrawOrder { get { return _drawOrder; } set { if (_drawOrder != value) { _drawOrder = value; OnDrawOrderChanged(EventArgs.Empty); } } } public bool Visible { get { return _visible; } set { if (_visible != value) { _visible = value; OnVisibleChanged(EventArgs.Empty); } } } /// public event EventHandler DrawOrderChanged; /// public event EventHandler VisibleChanged; /// /// Create a . /// /// The game that this component will belong to. public DrawableGameComponent(Game game) : base(game) { } public override void Initialize() { if (!_initialized) { _initialized = true; LoadContent(); } } protected override void Dispose(bool disposing) { if (!_disposed) { _disposed = true; if (disposing) { UnloadContent(); } base.Dispose(disposing); } } /// /// Load graphical resources needed by this component. /// protected virtual void LoadContent() { } /// /// Unload graphical resources needed by this component. /// protected virtual void UnloadContent() { } /// /// Draw this component. /// /// The time elapsed since the last call to . public virtual void Draw(GameTime gameTime) { } /// /// Called when changed. /// /// Arguments to the event. protected virtual void OnVisibleChanged(EventArgs args) { var handler = VisibleChanged; if (handler != null) handler(this, EventArgs.Empty); } /// /// Called when changed. /// /// Arguments to the event. protected virtual void OnDrawOrderChanged(EventArgs args) { var handler = DrawOrderChanged; if (handler != null) handler(this, EventArgs.Empty); } } } ================================================ FILE: src/Xna.Framework.Game/FileDropEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// This class is used in the event as . /// public class FileDropEventArgs : EventArgs { public FileDropEventArgs(string[] files) { Files = files; } /// /// The paths of dropped files /// public string[] Files { get; private set; } } } ================================================ FILE: src/Xna.Framework.Game/Game.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Framework { /// /// This class is the entry point for most games. Handles setting up /// a window and graphics and runs a game loop that calls and . /// public class Game : IDisposable , IPlatformGame { private GameStrategy _strategy; GameStrategy Strategy { get { return _strategy; } } /// /// Create a . /// public Game() { LaunchParameters = new LaunchParameters(); _strategy = GameFactory.Current.CreateGameStrategy(this); Strategy.Activated += Platform_Activated; Strategy.Deactivated += Platform_Deactivated; } ~Game() { Dispose(false); } T IPlatformGame.GetStrategy() { return (T)_strategy; } void Platform_Activated(object sender, EventArgs e) { OnActivated(e); } void Platform_Deactivated(object sender, EventArgs e) { OnDeactivated(e); } #region IDisposable Implementation private bool _isDisposed; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); var handler = Disposed; if (handler != null) handler(this, EventArgs.Empty); } protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { if (_strategy != null) { _strategy.Activated -= Platform_Activated; _strategy.Deactivated -= Platform_Deactivated; _strategy.Dispose(); _strategy = null; } } _isDisposed = true; } } [System.Diagnostics.DebuggerNonUserCode] internal void AssertNotDisposed() { if (_isDisposed) { string name = GetType().Name; throw new ObjectDisposedException( name, string.Format("The {0} object was used after being Disposed.", name)); } } #endregion IDisposable Implementation #region Properties /// /// The start up parameters for this . /// public LaunchParameters LaunchParameters { get; private set; } /// /// A collection of game components attached to this . /// public GameComponentCollection Components { get { return Strategy.Components; } } public TimeSpan InactiveSleepTime { get { return Strategy.InactiveSleepTime; } set { Strategy.InactiveSleepTime = value; } } /// /// The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls. /// MonoGame extension. /// public TimeSpan MaxElapsedTime { get { return Strategy.MaxElapsedTime; } set { Strategy.MaxElapsedTime = value; } } /// /// Indicates if the game is the focused application. /// public bool IsActive { get { return Strategy.IsActive; } } public bool IsVisible { get { return Strategy.IsVisible; } } /// /// Indicates if the mouse cursor is visible on the game screen. /// public bool IsMouseVisible { get { return Strategy.IsMouseVisible; } set { Strategy.IsMouseVisible = value; } } /// /// The time between frames when running with a fixed time step. /// /// Target elapsed time must be strictly larger than zero. public TimeSpan TargetElapsedTime { get { return Strategy.TargetElapsedTime; } set { Strategy.TargetElapsedTime = value; } } /// /// Indicates if this game is running with a fixed time between frames. /// /// When set to true the target time between frames is /// given by . /// public bool IsFixedTimeStep { get { return Strategy.IsFixedTimeStep; } set { Strategy.IsFixedTimeStep = value; } } /// /// Get a container holding service providers attached to this . /// public GameServiceContainer Services { get { return Strategy.Services; } } /// /// The of this . /// /// If Content is set to null. public ContentManager Content { get { return Strategy.Content; } set { Strategy.Content = value; } } /// /// Gets the used for rendering by this . /// /// /// There is no attached to this . /// public GraphicsDevice GraphicsDevice { get { return Strategy.GraphicsDevice; } } /// /// The system window that this game is displayed on. /// [CLSCompliant(false)] public GameWindow Window { get { return Strategy.Window; } } #endregion Properties #region Events /// /// Raised when the game gains focus. /// public event EventHandler Activated; /// /// Raised when the game loses focus. /// public event EventHandler Deactivated; /// /// Raised when this game is being disposed. /// public event EventHandler Disposed; /// /// Raised when this game is exiting. /// public event EventHandler Exiting; #endregion #region Public Methods /// /// Exit the game at the end of this tick. /// /// public void Exit() { Strategy.Exit(); } /// /// Reset the elapsed game time to . /// public void ResetElapsedTime() { Strategy.ResetElapsedTime(); } /// /// Supress calling in the game loop. /// public void SuppressDraw() { Strategy.SuppressDraw(); } /// /// Run the game for one frame, then exit. /// public void RunOneFrame() { if (Strategy == null) return; Strategy.RunOneFrame(); } /// /// Run the game for the current platform. /// public void Run() { AssertNotDisposed(); Strategy.Run(); } /// /// Run one iteration of the game loop. /// /// Makes at least one call to /// and exactly one call to if drawing is not supressed. /// When is set to false this will /// make exactly one call to . /// public void Tick() { Strategy.Tick(); if (Strategy.ShouldExit) Strategy.TickExiting(); } #endregion #region Protected Methods /// /// Called right before is normally called. Can return false /// to let the game loop not call . /// /// /// true if should be called, false if it should not. /// protected internal virtual bool BeginDraw() { return Strategy.BeginDraw(); } /// /// Called right after . Presents the /// rendered frame in the . /// protected internal virtual void EndDraw() { Strategy.EndDraw(); } /// /// Called after , but before the first call to . /// protected internal virtual void BeginRun() { } /// /// Called when the game loop has been terminated before exiting. /// protected internal virtual void EndRun() { } /// /// Override this to load graphical resources required by the game. /// protected virtual void LoadContent() { } /// /// Override this to unload graphical resources loaded by the game. /// protected internal virtual void UnloadContent() { } /// /// Override this to initialize the game and load any needed non-graphical resources. /// /// Initializes attached instances and calls . /// protected internal virtual void Initialize() { Strategy.Initialize(); IGraphicsDeviceService graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService)); if (graphicsDeviceService != null) { if (graphicsDeviceService.GraphicsDevice != null) LoadContent(); } } /// /// Called when the game should update. /// /// Updates the instances attached to this game. /// Override this to update your game. /// /// The elapsed time since the last call to . protected internal virtual void Update(GameTime gameTime) { Strategy.Update(gameTime); } /// /// Called when the game should draw a frame. /// /// Draws the instances attached to this game. /// Override this to render your game. /// /// A instance containing the elapsed time since the last call to and the total time elapsed since the game started. protected internal virtual void Draw(GameTime gameTime) { Strategy.Draw(gameTime); } /// /// Called when the game is exiting. Raises the event. /// /// The arguments to the event. protected internal virtual void OnExiting(EventArgs args) { var handler = Exiting; if (handler != null) handler(this, args); } /// /// Called when the game gains focus. Raises the event. /// /// The arguments to the event. protected virtual void OnActivated(EventArgs args) { AssertNotDisposed(); var handler = Activated; if (handler != null) handler(this, args); } /// /// Called when the game loses focus. Raises the event. /// /// The arguments to the event. protected virtual void OnDeactivated(EventArgs args) { AssertNotDisposed(); var handler = Deactivated; if (handler != null) handler(this, args); } #endregion Protected Methods } } ================================================ FILE: src/Xna.Framework.Game/GameComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// An object that can be attached to a and have its /// method called when is called. /// public class GameComponent : IGameComponent, IUpdateable, IDisposable { bool _enabled = true; int _updateOrder; /// /// The that owns this . /// public Game Game { get; private set; } public bool Enabled { get { return _enabled; } set { if (_enabled != value) { _enabled = value; OnEnabledChanged(EventArgs.Empty); } } } public int UpdateOrder { get { return _updateOrder; } set { if (_updateOrder != value) { _updateOrder = value; OnUpdateOrderChanged(EventArgs.Empty); } } } /// public event EventHandler EnabledChanged; /// public event EventHandler UpdateOrderChanged; /// /// Create a . /// /// The game that this component will belong to. public GameComponent(Game game) { this.Game = game; } ~GameComponent() { Dispose(false); } public virtual void Initialize() { } /// /// Update the component. /// /// of the . public virtual void Update(GameTime gameTime) { } /// /// Called when changed. Raises the event. /// /// Arguments to the event. protected virtual void OnUpdateOrderChanged(EventArgs args) { var handler = UpdateOrderChanged; if (handler != null) handler(this, args); } /// /// Called when changed. Raises the event. /// /// Arguments to the event. protected virtual void OnEnabledChanged(EventArgs args) { var handler = EnabledChanged; if (handler != null) handler(this, args); } /// /// Shuts down the component. /// protected virtual void Dispose(bool disposing) { } /// /// Shuts down the component. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } } ================================================ FILE: src/Xna.Framework.Game/GameComponentCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework { /// /// A collection of instances. /// public sealed class GameComponentCollection : Collection { /// /// Event that is triggered when a is added /// to this . /// public event EventHandler ComponentAdded; /// /// Event that is triggered when a is removed /// from this . /// public event EventHandler ComponentRemoved; /// /// Removes every from this . /// Triggers once for each removed. /// protected override void ClearItems() { for (int i = 0; i < base.Count; i++) { this.OnComponentRemoved(new GameComponentCollectionEventArgs(base[i])); } base.ClearItems(); } protected override void InsertItem(int index, IGameComponent item) { if (base.IndexOf(item) != -1) { throw new ArgumentException("Cannot Add Same Component Multiple Times"); } base.InsertItem(index, item); if (item != null) { this.OnComponentAdded(new GameComponentCollectionEventArgs(item)); } } private void OnComponentAdded(GameComponentCollectionEventArgs eventArgs) { var handler = ComponentAdded; if (handler != null) handler(this, eventArgs); } private void OnComponentRemoved(GameComponentCollectionEventArgs eventArgs) { var handler = ComponentRemoved; if (handler != null) handler(this, eventArgs); } protected override void RemoveItem(int index) { IGameComponent gameComponent = base[index]; base.RemoveItem(index); if (gameComponent != null) { this.OnComponentRemoved(new GameComponentCollectionEventArgs(gameComponent)); } } protected override void SetItem(int index, IGameComponent item) { throw new NotSupportedException(); } } } ================================================ FILE: src/Xna.Framework.Game/GameComponentCollectionEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Arguments for the and /// events. /// public class GameComponentCollectionEventArgs : EventArgs { private IGameComponent _gameComponent; /// /// Create a instance. /// /// The that the event notifies about. public GameComponentCollectionEventArgs(IGameComponent gameComponent) { _gameComponent = gameComponent; } /// /// The that the event notifies about. /// public IGameComponent GameComponent { get { return _gameComponent; } } } } ================================================ FILE: src/Xna.Framework.Game/GameFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Platform { public abstract class GameFactory { private volatile static GameFactory _current; internal static GameFactory Current { get { GameFactory current = _current; if (current != null) return current; lock (typeof(GameFactory)) { if (_current != null) return _current; Console.WriteLine("GameFactory not found."); Console.WriteLine("Initialize input with 'GameFactory.RegisterGameFactory(new ConcreteGameFactory());'."); GameFactory gameFactory = CreateGameFactory(); GameFactory.RegisterGameFactory(gameFactory); } return _current; } } private static GameFactory CreateGameFactory() { Console.WriteLine("Registering ConcreteGameFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.ConcreteGameFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(GameFactory)) && !type.IsAbstract) return (GameFactory)Activator.CreateInstance(type); return null; } public static void RegisterGameFactory(GameFactory gameFactory) { if (gameFactory == null) throw new NullReferenceException("gameFactory"); lock (typeof(GameFactory)) { if (_current == null) _current = gameFactory; else throw new InvalidOperationException("gameFactory allready registered."); } } public abstract GameStrategy CreateGameStrategy(Game game); public abstract GraphicsDeviceManagerStrategy CreateGraphicsDeviceManagerStrategy(Game game); } } ================================================ FILE: src/Xna.Framework.Game/GameServiceContainer.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework { /// /// A container for services for a . /// public class GameServiceContainer : IServiceProvider { Dictionary services; /// /// Create an empty . /// public GameServiceContainer() { services = new Dictionary(); } /// /// Add a service provider to this container. /// /// The type of the service. /// The provider of the service. /// /// If or is null. /// /// /// If cannot be assigned to . /// public void AddService(Type type, object provider) { if (type == null) throw new ArgumentNullException("type"); if (provider == null) throw new ArgumentNullException("provider"); Type providerType = provider.GetType(); if (!type.IsAssignableFrom(providerType)) throw new ArgumentException("The provider does not match the specified service type!"); services.Add(type, provider); } /// /// Get a service provider for the service of the specified type. /// /// The type of the service. /// /// A service provider for the service of the specified type or null if /// no suitable service provider is registered in this container. /// /// If the specified type is null. public object GetService(Type type) { if (type == null) throw new ArgumentNullException("type"); object service; if (services.TryGetValue(type, out service)) return service; return null; } /// /// Remove the service with the specified type. Does nothing no service of the specified type is registered. /// /// The type of the service to remove. /// If the specified type is null. public void RemoveService(Type type) { if (type == null) throw new ArgumentNullException("type"); services.Remove(type); } /// /// Add a service provider to this container. /// /// The type of the service. /// The provider of the service. /// /// If is null. /// public void AddService(T provider) { AddService(typeof(T), provider); } /// /// Get a service provider of the specified type. /// /// The type of the service provider. /// /// A service provider of the specified type or null if /// no suitable service provider is registered in this container. /// public T GetService() where T : class { var service = GetService(typeof(T)); if (service == null) return null; return (T)service; } } } ================================================ FILE: src/Xna.Framework.Game/GameStrategy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform { public interface IPlatformGame { T GetStrategy() where T : GameStrategy; } public abstract class GameStrategy : IDisposable { #region Fields private GameServiceContainer _services; private IGraphicsDeviceService _graphicsDeviceService; private IGraphicsDeviceManager _graphicsDeviceManager; private ContentManager _content; private GameComponentCollection _components; private DrawableComponents _drawableComponents = new DrawableComponents(); private UpdateableComponents _updateableComponents = new UpdateableComponents(); private TimeSpan _targetElapsedTime = TimeSpan.FromTicks(166666); // 60fps private TimeSpan _inactiveSleepTime = TimeSpan.FromMilliseconds(20.0); private TimeSpan _maxElapsedTime = TimeSpan.FromMilliseconds(500); private bool _isFixedTimeStep = true; private bool _shouldExit; private bool _suppressDraw; bool _isDisposed; protected bool InFullScreenMode = false; protected bool IsDisposed { get { return _isDisposed; } } private bool _initialized = false; #endregion #region Construction/Destruction protected GameStrategy(Game game) { if (game == null) throw new ArgumentNullException("game"); Game = game; _services = new GameServiceContainer(); _components = new GameComponentCollection(); _content = new ContentManager(_services); _services.AddService(typeof(GameStrategy), this); } ~GameStrategy() { Dispose(false); } #endregion Construction/Destruction #region Public Properties /// /// Get a container holding service providers attached to this . /// public GameServiceContainer Services { get { return _services; } } /// /// A collection of game components attached to this . /// public GameComponentCollection Components { get { return _components; } } /// /// The of this . /// /// If Content is set to null. public ContentManager Content { get { return _content; } set { if (value == null) throw new ArgumentNullException(); _content = value; } } public GraphicsDevice GraphicsDevice { get { IGraphicsDeviceService graphicsDeviceService = this.GraphicsDeviceService; if (graphicsDeviceService == null) throw new InvalidOperationException("No Graphics Device Service"); return graphicsDeviceService.GraphicsDevice; } } private IGraphicsDeviceService GraphicsDeviceService { get { if (_graphicsDeviceService != null) return _graphicsDeviceService; _graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService)); return _graphicsDeviceService; } } public GraphicsDeviceManager GraphicsDeviceManager { get { if (_graphicsDeviceManager != null) return (GraphicsDeviceManager)_graphicsDeviceManager; _graphicsDeviceManager = (IGraphicsDeviceManager)Services.GetService(typeof(IGraphicsDeviceManager)); return (GraphicsDeviceManager)_graphicsDeviceManager; } } /// /// Gets the Game instance that owns this GamePlatform instance. /// public readonly Game Game; private readonly GameTime Time = new GameTime(); private Stopwatch Timer = new Stopwatch(); private bool _isActive; public bool IsActive { get { return _isActive; } } private bool _isVisible = true; public bool IsVisible { get { return _isVisible; } protected set { _isVisible = value; } } private bool _isMouseVisible; public virtual bool IsMouseVisible { get { return _isMouseVisible; } set { _isMouseVisible = value; } } private GameWindow _window; public GameWindow Window { get { return _window; } protected set { _window = value; } } public TimeSpan InactiveSleepTime { get { return _inactiveSleepTime; } set { if (value < TimeSpan.Zero) throw new ArgumentOutOfRangeException("InactiveSleepTime must be positive."); _inactiveSleepTime = value; } } /// /// The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls. /// MonoGame extension. /// public TimeSpan MaxElapsedTime { get { return _maxElapsedTime; } set { if (value < TimeSpan.FromMilliseconds(500)) throw new ArgumentOutOfRangeException("MaxElapsedTime must be at least 0.5s"); _maxElapsedTime = value; } } /// /// The time between frames when running with a fixed time step. /// /// Target elapsed time must be strictly larger than zero. public virtual TimeSpan TargetElapsedTime { get { return _targetElapsedTime; } set { if (value <= TimeSpan.Zero) throw new ArgumentOutOfRangeException("TargetElapsedTime must be positive and non-zero."); _targetElapsedTime = value; } } /// /// Indicates if this game is running with a fixed time between frames. /// /// When set to true the target time between frames is /// given by . /// public bool IsFixedTimeStep { get { return _isFixedTimeStep; } set { _isFixedTimeStep = value; } } public bool ShouldExit { get { return _shouldExit; } } #endregion #region Events public event EventHandler Activated; public event EventHandler Deactivated; protected virtual void OnActivated(EventArgs e) { var handler = Activated; if (handler != null) handler(this, EventArgs.Empty); } protected virtual void OnDeactivated(EventArgs e) { var handler = Deactivated; if (handler != null) handler(this, EventArgs.Empty); } #endregion Events #region Methods protected void SetWindowListeners() { _window.Activated += GameWindow_Activated; _window.Deactivated += GameWindow_Deactivated; } private void GameWindow_Activated(object sender, EventArgs e) { _isActive = true; var handler = Activated; if (handler != null) handler(this, EventArgs.Empty); } private void GameWindow_Deactivated(object sender, EventArgs e) { _isActive = false; var handler = Deactivated; if (handler != null) handler(this, EventArgs.Empty); } public void RunOneFrame() { this.CallInitialize(); this.CallBeginRun(); //Not quite right.. Game.Tick(); this.CallEndRun(); } protected internal virtual void Run() { this.CallInitialize(); this.CallBeginRun(); // XNA runs one Update even before showing the window this.CallUpdate(new GameTime()); this.RunGameLoop(); this.CallEndRun(); this.CallExiting(); } protected virtual void RunGameLoop() { throw new NotImplementedException("Blocking Run() is not implemented."); } #region Internal Methods protected void CallInitialize() { if (!_initialized) { this.Game.AssertNotDisposed(); GraphicsDeviceManager gdm = this.GraphicsDeviceManager; if (gdm != null) ((IGraphicsDeviceManager)gdm).CreateDevice(); this.Game.Initialize(); this.InitializeComponents(); _initialized = true; } } protected void CallBeginRun() { this.Game.BeginRun(); this.Timer.Restart(); } protected void CallUpdate(GameTime gameTime) { this.Game.AssertNotDisposed(); ((IFrameworkDispatcher)FrameworkDispatcher.Current).Update(); this.Game.Update(gameTime); } protected void CallDraw(GameTime gameTime) { this.Game.AssertNotDisposed(); bool gdmBeginDraw; IGraphicsDeviceManager gdm = (IGraphicsDeviceManager)this.Services.GetService(typeof(IGraphicsDeviceManager)); if (gdm != null) gdmBeginDraw = gdm.BeginDraw(); else // (gdm == null) gdmBeginDraw = true; // Draw and EndDraw should not be called if BeginDraw returns false. // http://stackoverflow.com/questions/4054936/manual-control-over-when-to-redraw-the-screen/4057180#4057180 // http://stackoverflow.com/questions/4235439/xna-3-1-to-4-0-requires-constant-redraw-or-will-display-a-purple-screen if (gdmBeginDraw && this.Game.BeginDraw()) { this.Game.Draw(gameTime); this.Game.EndDraw(); } } protected void CallEndRun() { this.Game.EndRun(); } protected void CallExiting() { this.Game.OnExiting(EventArgs.Empty); this.Game.UnloadContent(); } #endregion Internal Methods public virtual void Initialize() { // According to the information given on MSDN (see link below), all // GameComponents in Components at the time Initialize() is called // are initialized. // http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game.initialize.aspx // Initialize all existing components for (int i = 0; i < this.Components.Count; i++) this.Components[i].Initialize(); this._graphicsDeviceService = (IGraphicsDeviceService)Services.GetService(typeof(IGraphicsDeviceService)); } internal void InitializeComponents() { // We need to do this after virtual Initialize(...) is called. // 1. Categorize components into IUpdateable and IDrawable lists. // 2. Subscribe to Added/Removed events to keep the categorized // lists synced and to Initialize future components as they are // added. _updateableComponents.ClearUpdatables(); _drawableComponents.ClearDrawables(); for (int i = 0; i < Components.Count; i++) { if (Components[i] is IUpdateable) _updateableComponents.AddUpdatable((IUpdateable)Components[i]); if (Components[i] is IDrawable) _drawableComponents.AddDrawable((IDrawable)Components[i]); } Components.ComponentAdded += Components_ComponentAdded; Components.ComponentRemoved += Components_ComponentRemoved; } private void Components_ComponentAdded(object sender, GameComponentCollectionEventArgs e) { // Since we only subscribe to ComponentAdded after the graphics // devices are set up, it is safe to just blindly call Initialize. e.GameComponent.Initialize(); if (e.GameComponent is IUpdateable) _updateableComponents.AddUpdatable((IUpdateable)e.GameComponent); if (e.GameComponent is IDrawable) _drawableComponents.AddDrawable((IDrawable)e.GameComponent); } private void Components_ComponentRemoved(object sender, GameComponentCollectionEventArgs e) { if (e.GameComponent is IUpdateable) _updateableComponents.RemoveUpdatable((IUpdateable)e.GameComponent); if (e.GameComponent is IDrawable) _drawableComponents.RemoveDrawable((IDrawable)e.GameComponent); } /// /// When implemented in a derived, ends the active run loop. /// public virtual void Exit() { _shouldExit = true; SuppressDraw(); } public abstract void TickExiting(); /// /// MSDN: Use this method if your game is recovering from a slow-running state, and ElapsedGameTime is too large to be useful. /// Frame timing is generally handled by the Game class, but some platforms still handle it elsewhere. Once all platforms /// rely on the Game class's functionality, this method and any overrides should be removed. /// public void ResetElapsedTime() { Timer.Reset(); Timer.Start(); Time.ElapsedGameTime = TimeSpan.Zero; _currElapsedTime = TimeSpan.Zero; _prevElapsedTime = TimeSpan.Zero; } internal void Update(GameTime gameTime) { _updateableComponents.UpdateEnabledComponent(gameTime); } internal void Draw(GameTime gameTime) { _drawableComponents.DrawVisibleComponents(gameTime); } /// /// Suppress the next call in the game loop. /// public void SuppressDraw() { _suppressDraw = true; } public virtual bool BeginDraw() { return true; } public virtual void EndDraw() { IGraphicsDeviceManager gdm = (IGraphicsDeviceManager)Services.GetService(typeof(IGraphicsDeviceManager)); if (gdm != null) gdm.EndDraw(); } private TimeSpan _currElapsedTime; private TimeSpan _prevElapsedTime; private int _updateFrameLag; /// /// Run one iteration of the game loop. /// /// Makes at least one call to /// and exactly one call to if drawing is not supressed. /// When is set to false this will /// make exactly one call to . /// public virtual void Tick() { // implement InactiveSleepTime to save battery life // and/or release CPU time to other threads and processes. if (!IsActive) System.Threading.Thread.Sleep((int)InactiveSleepTime.TotalMilliseconds); RetryTick: // Advance the accumulated elapsed time. TimeSpan elapsedTime = Timer.Elapsed; TimeSpan dt = elapsedTime - _prevElapsedTime; _currElapsedTime += dt; _prevElapsedTime = elapsedTime; if (IsFixedTimeStep && _currElapsedTime < TargetElapsedTime) { // When game IsActive use CPU Spin. /* if ((TargetElapsedTime - _currElapsedTime).TotalMilliseconds >= 2.0) { #if WINDOWSDX || DESKTOPGL || ANDROID || IOS || TVOS || (UAP || WINUI) System.Threading.Thread.Sleep(0); #endif } */ // Keep looping until it's time to perform the next update goto RetryTick; } // Do not allow any update to take longer than our maximum. TimeSpan maxElapsedTime = TimeSpan.FromTicks(Math.Max(MaxElapsedTime.Ticks, TargetElapsedTime.Ticks)); if (_currElapsedTime > maxElapsedTime) _currElapsedTime = maxElapsedTime; if (IsFixedTimeStep) { Time.ElapsedGameTime = TargetElapsedTime; int stepCount = 0; // Perform as many full fixed length time steps as we can. while (_currElapsedTime >= TargetElapsedTime && !_shouldExit) { Time.TotalGameTime += TargetElapsedTime; _currElapsedTime -= TargetElapsedTime; stepCount++; this.CallUpdate(Time); } //Every update after the first accumulates lag _updateFrameLag += Math.Max(0, stepCount - 1); _updateFrameLag = Math.Min(_updateFrameLag, 5); //If we think we are running slowly, wait until the lag clears before resetting it if (Time.IsRunningSlowly) { if (_updateFrameLag == 0) Time.IsRunningSlowly = false; } else if (_updateFrameLag >= 5) { //If we lag more than 5 frames, start thinking we are running slowly Time.IsRunningSlowly = true; } //Every time we just do one update and one draw, then we are not running slowly, so decrease the lag if (stepCount == 1 && _updateFrameLag > 0) _updateFrameLag--; // Draw needs to know the total elapsed time // that occurred for the fixed length updates. Time.ElapsedGameTime = TimeSpan.FromTicks(TargetElapsedTime.Ticks * stepCount); } else { // Perform a single variable length update. Time.ElapsedGameTime = _currElapsedTime; Time.TotalGameTime += _currElapsedTime; _currElapsedTime = TimeSpan.Zero; this.CallUpdate(Time); } if (!_suppressDraw) this.CallDraw(Time); else _suppressDraw = false; } #endregion Methods #region IDisposable implementation /// /// Performs application-defined tasks associated with freeing, /// releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { for (int i = 0; i < _components.Count; i++) { IDisposable disposable = _components[i] as IDisposable; if (disposable != null) disposable.Dispose(); } _components = null; if (_content != null) { _content.Dispose(); _content = null; } if (_graphicsDeviceManager != null) { ((IDisposable)_graphicsDeviceManager).Dispose(); _graphicsDeviceManager = null; } if (_window != null) { _window.Deactivated -= GameWindow_Deactivated; _window.Activated -= GameWindow_Activated; } } _services.RemoveService(typeof(GameStrategy)); _isDisposed = true; } } #endregion #region Component Collections private class DrawableComponents { private readonly List _drawableComponents = new List(); private readonly List _visibleComponents = new List(); private bool _isVisibleCacheInvalidated = true; private readonly List _addDrawableJournal = new List(); private readonly List _removeDrawableJournal = new List(); private int _addDrawableJournalCount; public void AddDrawable(IDrawable component) { // NOTE: We subscribe to item events after components in _addDrawableJournal have been merged. _addDrawableJournal.Add(new DrawableJournalEntry(component, _addDrawableJournalCount++)); _isVisibleCacheInvalidated = true; } public void RemoveDrawable(IDrawable component) { if (_addDrawableJournal.Remove(new DrawableJournalEntry(component, -1))) return; int index = _drawableComponents.IndexOf(component); if (index >= 0) { component.VisibleChanged -= Component_VisibleChanged; component.DrawOrderChanged -= Component_DrawOrderChanged; _removeDrawableJournal.Add(index); _isVisibleCacheInvalidated = true; } } public void ClearDrawables() { for (int i = 0; i < _drawableComponents.Count; i++) { _drawableComponents[i].VisibleChanged -= Component_VisibleChanged; _drawableComponents[i].DrawOrderChanged -= Component_DrawOrderChanged; } _addDrawableJournal.Clear(); _removeDrawableJournal.Clear(); _drawableComponents.Clear(); _isVisibleCacheInvalidated = true; } private void Component_VisibleChanged(object sender, EventArgs e) { _isVisibleCacheInvalidated = true; } private void Component_DrawOrderChanged(object sender, EventArgs e) { IDrawable component = (IDrawable)sender; int index = _drawableComponents.IndexOf(component); _addDrawableJournal.Add(new DrawableJournalEntry(component, _addDrawableJournalCount++)); component.VisibleChanged -= Component_VisibleChanged; component.DrawOrderChanged -= Component_DrawOrderChanged; _removeDrawableJournal.Add(index); _isVisibleCacheInvalidated = true; } internal void DrawVisibleComponents(GameTime gameTime) { if (_removeDrawableJournal.Count > 0) ProcessRemoveDrawableJournal(); if (_addDrawableJournal.Count > 0) ProcessAddDrawableJournal(); // rebuild _visibleComponents if (_isVisibleCacheInvalidated) { _visibleComponents.Clear(); for (int i = 0; i < _drawableComponents.Count; i++) if (_drawableComponents[i].Visible) _visibleComponents.Add(_drawableComponents[i]); _isVisibleCacheInvalidated = false; } // draw components for (int i = 0; i < _visibleComponents.Count; i++) _visibleComponents[i].Draw(gameTime); // If the cache was invalidated as a result of processing components, // now is a good time to clear it and give the GC (more of) a // chance to do its thing. if (_isVisibleCacheInvalidated) _visibleComponents.Clear(); } private void ProcessRemoveDrawableJournal() { // Remove components in reverse. _removeDrawableJournal.Sort(); for (int i = _removeDrawableJournal.Count - 1; i >= 0; i--) _drawableComponents.RemoveAt(_removeDrawableJournal[i]); _removeDrawableJournal.Clear(); } private void ProcessAddDrawableJournal() { // Prepare the _addJournal to be merge-sorted with _drawableComponents. // _drawableComponents is always sorted. _addDrawableJournal.Sort(DrawableJournalEntry.CompareAddJournalEntry); _addDrawableJournalCount = 0; int iAddJournal = 0; int iItems = 0; while (iItems < _drawableComponents.Count && iAddJournal < _addDrawableJournal.Count) { IDrawable addDrawableItem = _addDrawableJournal[iAddJournal].Component; // If addDrawableItem is less than (belongs before) _items[iItems], insert it. if (Comparer.Default.Compare(addDrawableItem.DrawOrder, _drawableComponents[iItems].DrawOrder) < 0) { addDrawableItem.VisibleChanged += Component_VisibleChanged; addDrawableItem.DrawOrderChanged += Component_DrawOrderChanged; _drawableComponents.Insert(iItems, addDrawableItem); iAddJournal++; } // Always increment iItems, either because we inserted and // need to move past the insertion, or because we didn't // insert and need to consider the next element. iItems++; } // If _addJournal had any "tail" items, append them all now. for (; iAddJournal < _addDrawableJournal.Count; iAddJournal++) { IDrawable addDrawableItem = _addDrawableJournal[iAddJournal].Component; addDrawableItem.VisibleChanged += Component_VisibleChanged; addDrawableItem.DrawOrderChanged += Component_DrawOrderChanged; _drawableComponents.Add(addDrawableItem); } _addDrawableJournal.Clear(); } private struct DrawableJournalEntry { private readonly int AddOrder; public readonly IDrawable Component; public DrawableJournalEntry(IDrawable component, int addOrder) { Component = component; this.AddOrder = addOrder; } public override int GetHashCode() { return Component.GetHashCode(); } public override bool Equals(object obj) { if (!(obj is DrawableJournalEntry)) return false; return object.ReferenceEquals(Component, ((DrawableJournalEntry)obj).Component); } internal static int CompareAddJournalEntry(DrawableJournalEntry x, DrawableJournalEntry y) { int result = Comparer.Default.Compare(x.Component.DrawOrder, y.Component.DrawOrder); if (result == 0) result = x.AddOrder - y.AddOrder; return result; } } } private class UpdateableComponents { private readonly List _updateableComponents = new List(); private readonly List _enabledComponents = new List(); private bool _isEnabledCacheInvalidated = true; private readonly List _addUpdateableJournal = new List(); private readonly List _removeUpdateableJournal = new List(); private int _addUpdateableJournalCount; public void AddUpdatable(IUpdateable component) { // NOTE: We subscribe to item events after items in _addUpdateableJournal have been merged. _addUpdateableJournal.Add(new UpdateableJournalEntry(component, _addUpdateableJournalCount++)); _isEnabledCacheInvalidated = true; } public void RemoveUpdatable(IUpdateable component) { if (_addUpdateableJournal.Remove(new UpdateableJournalEntry(component, -1))) return; int index = _updateableComponents.IndexOf(component); if (index >= 0) { component.EnabledChanged -= Component_EnabledChanged; component.UpdateOrderChanged -= Component_UpdateOrderChanged; _removeUpdateableJournal.Add(index); _isEnabledCacheInvalidated = true; } } public void ClearUpdatables() { for (int i = 0; i < _updateableComponents.Count; i++) { _updateableComponents[i].EnabledChanged -= Component_EnabledChanged; _updateableComponents[i].UpdateOrderChanged -= Component_UpdateOrderChanged; } _addUpdateableJournal.Clear(); _removeUpdateableJournal.Clear(); _updateableComponents.Clear(); _isEnabledCacheInvalidated = true; } private void Component_EnabledChanged(object sender, EventArgs e) { _isEnabledCacheInvalidated = true; } private void Component_UpdateOrderChanged(object sender, EventArgs e) { IUpdateable component = (IUpdateable)sender; int index = _updateableComponents.IndexOf(component); _addUpdateableJournal.Add(new UpdateableJournalEntry(component, _addUpdateableJournalCount++)); component.EnabledChanged -= Component_EnabledChanged; component.UpdateOrderChanged -= Component_UpdateOrderChanged; _removeUpdateableJournal.Add(index); _isEnabledCacheInvalidated = true; } private void ProcessRemoveUpdateableJournal() { // Remove components in reverse. _removeUpdateableJournal.Sort(); for (int i = _removeUpdateableJournal.Count - 1; i >= 0; i--) _updateableComponents.RemoveAt(_removeUpdateableJournal[i]); _removeUpdateableJournal.Clear(); } internal void UpdateEnabledComponent(GameTime gameTime) { if (_removeUpdateableJournal.Count > 0) ProcessRemoveUpdateableJournal(); if (_addUpdateableJournal.Count > 0) ProcessAddUpdateableJournal(); // rebuild _enabledComponents if (_isEnabledCacheInvalidated) { _enabledComponents.Clear(); for (int i = 0; i < _updateableComponents.Count; i++) if (_updateableComponents[i].Enabled) _enabledComponents.Add(_updateableComponents[i]); _isEnabledCacheInvalidated = false; } // update components for (int i = 0; i < _enabledComponents.Count; i++) _enabledComponents[i].Update(gameTime); // If the cache was invalidated as a result of processing components, // now is a good time to clear it and give the GC (more of) a // chance to do its thing. if (_isEnabledCacheInvalidated) _enabledComponents.Clear(); } private void ProcessAddUpdateableJournal() { // Prepare the _addJournal to be merge-sorted with _updateableComponents. // _updateableComponents is always sorted. _addUpdateableJournal.Sort(UpdateableJournalEntry.CompareAddJournalEntry); _addUpdateableJournalCount = 0; int iAddJournal = 0; int iItems = 0; while (iItems < _updateableComponents.Count && iAddJournal < _addUpdateableJournal.Count) { IUpdateable addUpdateableItem = _addUpdateableJournal[iAddJournal].Component; // If addUpdateableItem is less than (belongs before) _items[iItems], insert it. if (Comparer.Default.Compare(addUpdateableItem.UpdateOrder, _updateableComponents[iItems].UpdateOrder) < 0) { addUpdateableItem.EnabledChanged += Component_EnabledChanged; addUpdateableItem.UpdateOrderChanged += Component_UpdateOrderChanged; _updateableComponents.Insert(iItems, addUpdateableItem); iAddJournal++; } // Always increment iItems, either because we inserted and // need to move past the insertion, or because we didn't // insert and need to consider the next element. iItems++; } // If _addJournal had any "tail" items, append them all now. for (; iAddJournal < _addUpdateableJournal.Count; iAddJournal++) { IUpdateable addUpdateableItem = _addUpdateableJournal[iAddJournal].Component; addUpdateableItem.EnabledChanged += Component_EnabledChanged; addUpdateableItem.UpdateOrderChanged += Component_UpdateOrderChanged; _updateableComponents.Add(addUpdateableItem); } _addUpdateableJournal.Clear(); } private struct UpdateableJournalEntry { private readonly int AddOrder; public readonly IUpdateable Component; public UpdateableJournalEntry(IUpdateable component, int addOrder) { Component = component; AddOrder = addOrder; } public override int GetHashCode() { return Component.GetHashCode(); } public override bool Equals(object obj) { if (!(obj is UpdateableJournalEntry)) return false; return object.Equals(Component, ((UpdateableJournalEntry)obj).Component); } internal static int CompareAddJournalEntry(UpdateableJournalEntry x, UpdateableJournalEntry y) { int result = Comparer.Default.Compare(x.Component.UpdateOrder, y.Component.UpdateOrder); if (result == 0) result = x.AddOrder - y.AddOrder; return result; } } } #endregion Component Collections } } ================================================ FILE: src/Xna.Framework.Game/GameTime.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Holds the time state of a . /// public class GameTime { /// /// Time since the start of the . /// public TimeSpan TotalGameTime { get; protected internal set; } /// /// Time since the last call to . /// public TimeSpan ElapsedGameTime { get; protected internal set; } /// /// Indicates whether the is running slowly. /// /// This flag is set to true when is set to true /// and a tick of the game loop takes longer than for /// a few frames in a row. /// public bool IsRunningSlowly { get; protected internal set; } /// /// Create a instance with a and /// of 0. /// public GameTime() { TotalGameTime = TimeSpan.Zero; ElapsedGameTime = TimeSpan.Zero; IsRunningSlowly = false; } /// /// Create a with the specified /// and . /// /// The total game time elapsed since the start of the . /// The time elapsed since the last call to . public GameTime(TimeSpan totalGameTime, TimeSpan elapsedGameTime) { TotalGameTime = totalGameTime; ElapsedGameTime = elapsedGameTime; IsRunningSlowly = false; } /// /// Create a with the specified /// and . /// /// The total game time elapsed since the start of the . /// The time elapsed since the last call to . /// A value indicating if the is running slowly. public GameTime(TimeSpan totalRealTime, TimeSpan elapsedRealTime, bool isRunningSlowly) { TotalGameTime = totalRealTime; ElapsedGameTime = elapsedRealTime; IsRunningSlowly = isRunningSlowly; } } } ================================================ FILE: src/Xna.Framework.Game/GameWindow.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.ComponentModel; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Framework { /// /// The system window used by a . /// public abstract class GameWindow { #region Properties /// /// Indicates if users can resize this . /// [DefaultValue(false)] public abstract bool AllowUserResizing { get; set; } /// /// The client rectangle of the . /// public abstract Rectangle ClientBounds { get; } private bool _disableAltF4; /// /// Gets or sets a bool that enables usage of Alt+F4 for window closing on desktop platforms. Value is true by default. /// public bool AllowAltF4 { get { return !_disableAltF4; } set { _disableAltF4 = !value; } } /// /// The display orientation on a mobile device. /// public abstract DisplayOrientation CurrentOrientation { get; } /// /// The handle to the window used by the backend windowing service. /// /// For WindowsDX this is the Win32 window handle (HWND). /// For DesktopGL this is the SDL window handle. /// For UWP this is a handle to an IUnknown interface for the CoreWindow. /// public abstract IntPtr Handle { get; } /// /// The name of the screen the window is currently on. /// public abstract string ScreenDeviceName { get; } private string _title; /// /// Gets or sets the title of the game window. /// /// /// For UWP this has no effect. The title should be /// set by using the DisplayName property found in the app manifest file. /// public string Title { get { return _title; } set { if (value != null) { if (_title != value) { SetTitle(value); _title = value; } } else throw new ArgumentNullException("Title"); } } /// /// Determines whether the border of the window is visible. Currently only supported on the WindowsDX and DesktopGL platforms. /// /// /// Thrown when trying to use this property on a platform other than WinowsDX or DesktopGL. /// public virtual bool IsBorderless { get { return false; } set { throw new NotImplementedException(); } } /// /// Create a . /// protected GameWindow() { } #endregion Properties #region Events /// /// Raised when the user resized the window or the window switches from fullscreen mode to /// windowed mode or vice versa. /// public event EventHandler ClientSizeChanged; /// /// Raised when changed. /// public event EventHandler OrientationChanged; /// /// Raised when changed. /// public event EventHandler ScreenDeviceNameChanged; internal event EventHandler Deactivated; internal event EventHandler Activated; /// /// Use this event to user text input. /// /// This event is not raised by noncharacter keys except control characters such as backspace, tab, carriage return and escape. /// This event also supports key repeat. /// /// /// This event is only supported on desktop/browser platforms. /// public event EventHandler TextInput; /// /// Buffered keyboard KeyDown event. /// public event EventHandler KeyDown; /// /// Buffered keyboard KeyUp event. /// public event EventHandler KeyUp; /// /// This event is raised when user drops a file into the game window /// /// /// This event is only supported on desktop platforms. /// public event EventHandler FileDrop; #endregion Events /// /// Called when the window gains focus. /// protected void OnActivated() { var handler = Activated; if (handler != null) handler(this, EventArgs.Empty); } /// /// Called when the window loses focus. /// protected void OnDeactivated() { var handler = Deactivated; if (handler != null) handler(this, EventArgs.Empty); } protected void OnClientSizeChanged() { var handler = ClientSizeChanged; if (handler != null) handler(this, EventArgs.Empty); } /// /// Called when changed. Raises the event. /// protected void OnOrientationChanged() { var handler = OrientationChanged; if (handler != null) handler(this, EventArgs.Empty); } protected void OnPaint() { } /// /// Called when changed. Raises the event. /// protected void OnScreenDeviceNameChanged() { var handler = ScreenDeviceNameChanged; if (handler != null) handler(this, EventArgs.Empty); } protected void OnFileDrop(FileDropEventArgs e) { var handler = FileDrop; if (handler != null) handler(this, e); } /// /// Set the title of this window to the given string. /// /// The new title of the window. protected abstract void SetTitle(string title); #region Keyboard events /// /// Called when the window receives text input. Raises the event. /// protected void OnTextInput(char character, Keys key) { var handler = TextInput; if (handler != null) handler(this, new TextInputEventArgs(key, character)); } protected void OnKeyDown(Keys key) { var handler = KeyDown; if (handler != null) handler(this, new InputKeyEventArgs(key)); } protected void OnKeyUp(Keys key) { var handler = KeyUp; if (handler != null) handler(this, new InputKeyEventArgs(key)); } protected bool IsTextInputAttached() { return (TextInput != null); } protected bool IsKeyUpDownAttached() { return (KeyDown != null || KeyUp != null); } #endregion Keyboard events } } ================================================ FILE: src/Xna.Framework.Game/GraphicsDeviceManager.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform; namespace Microsoft.Xna.Framework { /// /// Used to initialize and control the presentation of the graphics device. /// public class GraphicsDeviceManager : IGraphicsDeviceService, IGraphicsDeviceManager, IDisposable , IPlatformGraphicsDeviceManager { GraphicsDeviceManagerStrategy _strategy; /// /// The default back buffer width. /// public static readonly int DefaultBackBufferWidth = 800; /// /// The default back buffer height. /// public static readonly int DefaultBackBufferHeight = 480; /// /// Associates this graphics device manager to a game instances. /// /// The game instance to attach. public GraphicsDeviceManager(Game game) { _strategy = GameFactory.Current.CreateGraphicsDeviceManagerStrategy(game); // dispatch events _strategy.PreparingDeviceSettings += (sender, e) => { OnPreparingDeviceSettings(e); }; _strategy.DeviceCreated += (sender, e) => { OnDeviceCreated(e); }; _strategy.DeviceDisposing += (sender, e) => { OnDeviceDisposing(e); }; _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); }; _strategy.DeviceReset += (sender, e) => { OnDeviceReset(e); }; if (game.Services.GetService(typeof(IGraphicsDeviceManager)) != null) throw new ArgumentException("A graphics device manager is already registered. The graphics device manager cannot be changed once it is set."); game.Services.AddService(typeof(IGraphicsDeviceManager), this); game.Services.AddService(typeof(IGraphicsDeviceService), this); } T IPlatformGraphicsDeviceManager.GetStrategy() { return (T)_strategy; } #region IGraphicsDeviceManager void IGraphicsDeviceManager.CreateDevice() { _strategy.CreateDevice(); } bool IGraphicsDeviceManager.BeginDraw() { return _strategy.BeginDraw(); } void IGraphicsDeviceManager.EndDraw() { _strategy.EndDraw(); } #endregion // IGraphicsDeviceManager #region IGraphicsDeviceService /// /// Returns the graphics device for this manager. /// public GraphicsDevice GraphicsDevice { get { return _strategy.GraphicsDevice; } } /// public event EventHandler DeviceCreated; /// public event EventHandler DeviceDisposing; /// public event EventHandler DeviceResetting; /// public event EventHandler DeviceReset; /// /// Called when a is created. Raises the event. /// /// protected virtual void OnDeviceCreated(EventArgs e) { var handler = DeviceCreated; if (handler != null) handler(this, e); } /// /// Called when a is disposed. Raises the event. /// /// protected virtual void OnDeviceDisposing(EventArgs e) { var handler = DeviceDisposing; if (handler != null) handler(this, e); } /// /// Called before a is reset. /// Raises the event. /// /// protected virtual void OnDeviceResetting(EventArgs e) { var handler = DeviceResetting; if (handler != null) handler(this, e); } /// /// Called after a is reset. /// Raises the event. /// /// protected virtual void OnDeviceReset(EventArgs e) { var handler = DeviceReset; if (handler != null) handler(this, e); } #endregion // IGraphicsDeviceService #region IDisposable /// /// Raised when this is disposed. /// public event EventHandler Disposed; ~GraphicsDeviceManager() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_strategy.IsDisposed) { if (disposing) { _strategy.Dispose(); _strategy.PreparingDeviceSettings -= (sender, e) => { OnPreparingDeviceSettings(e); }; _strategy.DeviceCreated -= (sender, e) => { OnDeviceCreated(e); }; _strategy.DeviceDisposing -= (sender, e) => { OnDeviceDisposing(e); }; _strategy.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); }; _strategy.DeviceReset -= (sender, e) => { OnDeviceReset(e); }; _strategy = null; } var handler = Disposed; if (handler != null) handler(this, EventArgs.Empty); } } #endregion // IDisposable /// /// The profile which determines the graphics feature level. /// public GraphicsProfile GraphicsProfile { get { return _strategy.GraphicsProfile; } set { _strategy.GraphicsProfile = value; } } /// /// Indicates if DX9 style pixel addressing or current standard /// pixel addressing should be used. This flag is set to /// false by default. It should be set to true /// for XNA compatibility. It is recommended to leave this flag /// set to false for projects that are not ported from /// XNA. This value is passed to . /// /// /// XNA uses DirectX9 for its graphics. DirectX9 interprets UV /// coordinates differently from other graphics API's. This is /// typically referred to as the half-pixel offset. MonoGame /// replicates XNA behavior if this flag is set to true. /// public bool PreferHalfPixelOffset { get { return _strategy.PreferHalfPixelOffset; } set { _strategy.PreferHalfPixelOffset = value; } } /// /// Indicates the desired back buffer width in pixels. /// /// /// When called at startup this will automatically set the width during initialization. If /// set after startup you must call ApplyChanges() for the width to be changed. /// public int PreferredBackBufferWidth { get { return _strategy.PreferredBackBufferWidth; } set { _strategy.PreferredBackBufferWidth = value; } } /// /// Indicates the desired back buffer height in pixels. /// /// /// When called at startup this will automatically set the height during initialization. If /// set after startup you must call ApplyChanges() for the height to be changed. /// public int PreferredBackBufferHeight { get { return _strategy.PreferredBackBufferHeight; } set { _strategy.PreferredBackBufferHeight = value; } } /// /// Indicates the desired back buffer color format. /// /// /// When called at startup this will automatically set the format during initialization. If /// set after startup you must call ApplyChanges() for the format to be changed. /// public SurfaceFormat PreferredBackBufferFormat { get { return _strategy.PreferredBackBufferFormat; } set { _strategy.PreferredBackBufferFormat = value; } } /// /// Indicates the desired depth-stencil buffer format. /// /// /// The depth-stencil buffer format defines the scene depth precision and stencil bits available for effects during rendering. /// When called at startup this will automatically set the format during initialization. If /// set after startup you must call ApplyChanges() for the format to be changed. /// public DepthFormat PreferredDepthStencilFormat { get { return _strategy.PreferredDepthStencilFormat; } set { _strategy.PreferredDepthStencilFormat = value; } } /// /// Indicates the desire for a multisampled back buffer. /// /// /// When called at startup this will automatically set the MSAA mode during initialization. If /// set after startup you must call ApplyChanges() for the MSAA mode to be changed. /// public bool PreferMultiSampling { get { return _strategy.PreferMultiSampling; } set { _strategy.PreferMultiSampling = value; } } /// /// Indicates the desire for vsync when presenting the back buffer. /// /// /// Vsync limits the frame rate of the game to the monitor referesh rate to prevent screen tearing. /// When called at startup this will automatically set the vsync mode during initialization. If /// set after startup you must call ApplyChanges() for the vsync mode to be changed. /// public bool SynchronizeWithVerticalRetrace { get { return _strategy.SynchronizeWithVerticalRetrace; } set { _strategy.SynchronizeWithVerticalRetrace = value; } } /// /// Indicates the desire to switch into fullscreen mode. /// /// /// When called at startup this will automatically set fullscreen mode during initialization. If /// set after startup you must call ApplyChanges() for the fullscreen mode to be changed. /// Note that for some platforms that do not support windowed modes this property has no affect. /// public bool IsFullScreen { get { return _strategy.IsFullScreen; } set { _strategy.IsFullScreen = value; } } /// /// Gets or sets the boolean which defines how window switches from windowed to fullscreen state. /// "Hard" mode(true) is slow to switch, but more effecient for performance, while "soft" mode(false) is vice versa. /// The default value is true. /// public bool HardwareModeSwitch { get { return _strategy.HardwareModeSwitch; } set { _strategy.HardwareModeSwitch = value; } } /// /// Indicates the desired allowable display orientations when the device is rotated. /// /// /// This property only applies to mobile platforms with automatic display rotation. /// When called at startup this will automatically apply the supported orientations during initialization. If /// set after startup you must call ApplyChanges() for the supported orientations to be changed. /// public DisplayOrientation SupportedOrientations { get { return _strategy.SupportedOrientations; } set { _strategy.SupportedOrientations = value; } } /// /// Raised by or . Allows users /// to override the to pass to the /// . /// public event EventHandler PreparingDeviceSettings; protected virtual void OnPreparingDeviceSettings(PreparingDeviceSettingsEventArgs e) { var handler = PreparingDeviceSettings; if (handler != null) handler(this, e); } protected virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { return _strategy.FindBestDevice(anySuitableDevice); } protected virtual void RankDevices(List foundDevices) { _strategy.RankDevices(foundDevices); } protected virtual bool CanResetDevice(GraphicsDeviceInformation newDeviceInfo) { return _strategy.CanResetDevice(newDeviceInfo); } /// /// Toggles between windowed and fullscreen modes. /// /// /// Note that on platforms that do not support windowed modes this has no affect. /// public void ToggleFullScreen() { _strategy.ToggleFullScreen(); } /// /// Applies any pending property changes to the graphics device. /// public void ApplyChanges() { _strategy.ApplyChanges(); } } } ================================================ FILE: src/Xna.Framework.Game/GraphicsDeviceManagerStrategy.cs ================================================ using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform { public interface IPlatformGraphicsDeviceManager { T GetStrategy() where T : GraphicsDeviceManagerStrategy; } public abstract class GraphicsDeviceManagerStrategy : IDisposable { public static readonly int DefaultBackBufferWidth = 800; public static readonly int DefaultBackBufferHeight = 480; private Game _game; private bool _isDrawing; private bool _isDisposed; protected /*private*/ GraphicsDevice _graphicsDevice; public virtual GraphicsProfile GraphicsProfile { get; set; } public virtual bool PreferHalfPixelOffset { get; set; } public virtual int PreferredBackBufferWidth { get; set; } public virtual int PreferredBackBufferHeight { get; set; } public virtual SurfaceFormat PreferredBackBufferFormat { get; set; } public virtual DepthFormat PreferredDepthStencilFormat { get; set; } public virtual bool PreferMultiSampling { get; set; } public virtual bool SynchronizeWithVerticalRetrace { get; set; } public virtual bool IsFullScreen { get; set; } public virtual bool HardwareModeSwitch { get; set; } public virtual DisplayOrientation SupportedOrientations { get; set; } public Game Game { get { return _game; } } public GraphicsDeviceManagerStrategy(Game game) { if (game == null) throw new ArgumentNullException("game", "Game cannot be null."); _game = game; GraphicsProfile = GraphicsProfile.Reach; PreferHalfPixelOffset = false; PreferredBackBufferWidth = DefaultBackBufferWidth; PreferredBackBufferHeight = DefaultBackBufferHeight; PreferredBackBufferFormat = SurfaceFormat.Color; PreferredDepthStencilFormat = DepthFormat.Depth24; PreferMultiSampling = false; SynchronizeWithVerticalRetrace = true; IsFullScreen = false; HardwareModeSwitch = true; SupportedOrientations = DisplayOrientation.Default; } #region IGraphicsDeviceManager public bool IsDrawing { get { return _isDrawing; } set { _isDrawing = value; } } public abstract void CreateDevice(); public virtual bool BeginDraw() { if (_graphicsDevice != null) { _isDrawing = true; return true; } return false; } public virtual void EndDraw() { GraphicsDevice device = this.GraphicsDevice; if (device != null) { if (_isDrawing) { _isDrawing = false; device.Present(); } } } #endregion // IGraphicsDeviceManager #region IGraphicsDeviceService public virtual GraphicsDevice GraphicsDevice { get { return _graphicsDevice; } set { if (_graphicsDevice != null) { _graphicsDevice.Disposing -= (sender, e) => { OnDeviceDisposing(e); }; _graphicsDevice.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); }; _graphicsDevice.DeviceReset -= (sender, e) => { OnDeviceReset(e); }; } _graphicsDevice = value; if (_graphicsDevice != null) { _graphicsDevice.Disposing += (sender, e) => { OnDeviceDisposing(e); }; _graphicsDevice.DeviceResetting += (sender, e) => { OnDeviceResetting(e); }; _graphicsDevice.DeviceReset += (sender, e) => { OnDeviceReset(e); }; } } } /// public event EventHandler DeviceCreated; /// public event EventHandler DeviceDisposing; /// public event EventHandler DeviceResetting; /// public event EventHandler DeviceReset; /// /// Called when a is created. Raises the event. /// /// protected virtual void OnDeviceCreated(EventArgs e) { var handler = DeviceCreated; if (handler != null) handler(this, e); } /// /// Called when a is disposed. Raises the event. /// /// protected virtual void OnDeviceDisposing(EventArgs e) { var handler = DeviceDisposing; if (handler != null) handler(this, e); } /// /// Called before a is reset. /// Raises the event. /// /// protected virtual void OnDeviceResetting(EventArgs e) { var handler = DeviceResetting; if (handler != null) handler(this, e); } /// /// Called after a is reset. /// Raises the event. /// /// protected virtual void OnDeviceReset(EventArgs e) { var handler = DeviceReset; if (handler != null) handler(this, e); } #endregion // IGraphicsDeviceService #region IDisposable public bool IsDisposed { get { return _isDisposed; } } /// /// Raised when this is disposed. /// public event EventHandler Disposed; ~GraphicsDeviceManagerStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { if (_graphicsDevice != null) { _graphicsDevice.Dispose(); _graphicsDevice = null; } _game = null; } _isDisposed = true; var handler = Disposed; if (handler != null) handler(this, EventArgs.Empty); } } #endregion // IDisposable /// /// Raised by or . Allows users /// to override the to pass to the /// . /// public event EventHandler PreparingDeviceSettings; protected virtual void OnPreparingDeviceSettings(PreparingDeviceSettingsEventArgs e) { var handler = PreparingDeviceSettings; if (handler != null) handler(this, e); } public virtual GraphicsDeviceInformation FindBestDevice(bool anySuitableDevice) { throw new NotImplementedException(); } public virtual void RankDevices(List foundDevices) { throw new NotImplementedException(); } public virtual bool CanResetDevice(GraphicsDeviceInformation newDeviceInfo) { throw new NotImplementedException(); } /// /// Toggles between windowed and fullscreen modes. /// /// /// Note that on platforms that do not support windowed modes this has no affect. /// public virtual void ToggleFullScreen() { IsFullScreen = !IsFullScreen; ApplyChanges(); } /// /// Applies any pending property changes to the graphics device. /// public abstract void ApplyChanges(); public T ToConcrete() where T : GraphicsDeviceManagerStrategy { return (T)this; } } } ================================================ FILE: src/Xna.Framework.Game/IDrawable.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Interface for drawable entities. /// public interface IDrawable { /// /// The draw order of this relative /// to other instances. /// int DrawOrder { get; } /// /// Indicates if will be called. /// bool Visible { get; } /// /// Raised when changed. /// event EventHandler DrawOrderChanged; /// /// Raised when changed. /// event EventHandler VisibleChanged; /// /// Called when this should draw itself. /// /// The elapsed time since the last call to . void Draw(GameTime gameTime); } } ================================================ FILE: src/Xna.Framework.Game/IGameComponent.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// An interface for . /// public interface IGameComponent { /// /// Initializes the component. Used to load non-graphical resources. /// void Initialize(); } } ================================================ FILE: src/Xna.Framework.Game/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Game/IUpdateable.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Interface for updateable entities. /// public interface IUpdateable { #region Methods /// /// Called when this should update itself. /// /// The elapsed time since the last call to . void Update(GameTime gameTime); #endregion #region Events /// /// Raised when changed. /// event EventHandler EnabledChanged; /// /// Raised when changed. /// event EventHandler UpdateOrderChanged; #endregion #region Properties /// /// Indicates if will be called. /// bool Enabled { get; } /// /// The update order of this relative /// to other instances. /// int UpdateOrder { get; } #endregion } } ================================================ FILE: src/Xna.Framework.Game/LaunchParameters.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; namespace Microsoft.Xna.Framework { /// /// The parameters for launching a . /// public class LaunchParameters : Dictionary { } } ================================================ FILE: src/Xna.Framework.Game/Properties/AssemblyInfo.cs ================================================ using System; [assembly:CLSCompliant(true)] ================================================ FILE: src/Xna.Framework.Game/Xna.Framework.Game.csproj ================================================  ..\..\Artifacts\Xna.Framework.Game\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {90BBD6EF-F386-4F47-88CD-BF386C7D1705} Xna.Framework.Game Microsoft.Xna.Framework.Game true CS0067;CS1591;CS1574;CS0419;CS8500 true The Game framework. .net core;core;.net standard;standard nkast.Xna.Framework.Game ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False Xna.Framework.Content False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Graphics/Color.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.ComponentModel; using System.Text; using System.Runtime.Serialization; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Framework { /// /// Describes a 32-bit packed color. /// [DataContract] [DebuggerDisplay("{DebugDisplayString,nq}")] [TypeConverter("Microsoft.Xna.Framework.Design.ColorConverter, Xna.Framework.Design")] public struct Color : IPackedVector, IEquatable { static Color() { Transparent = new Color(0); AliceBlue = new Color(0xfffff8f0); AntiqueWhite = new Color(0xffd7ebfa); Aqua = new Color(0xffffff00); Aquamarine = new Color(0xffd4ff7f); Azure = new Color(0xfffffff0); Beige = new Color(0xffdcf5f5); Bisque = new Color(0xffc4e4ff); Black = new Color(0xff000000); BlanchedAlmond = new Color(0xffcdebff); Blue = new Color(0xffff0000); BlueViolet = new Color(0xffe22b8a); Brown = new Color(0xff2a2aa5); BurlyWood = new Color(0xff87b8de); CadetBlue = new Color(0xffa09e5f); Chartreuse = new Color(0xff00ff7f); Chocolate = new Color(0xff1e69d2); Coral = new Color(0xff507fff); CornflowerBlue = new Color(0xffed9564); Cornsilk = new Color(0xffdcf8ff); Crimson = new Color(0xff3c14dc); Cyan = new Color(0xffffff00); DarkBlue = new Color(0xff8b0000); DarkCyan = new Color(0xff8b8b00); DarkGoldenrod = new Color(0xff0b86b8); DarkGray = new Color(0xffa9a9a9); DarkGreen = new Color(0xff006400); DarkKhaki = new Color(0xff6bb7bd); DarkMagenta = new Color(0xff8b008b); DarkOliveGreen = new Color(0xff2f6b55); DarkOrange = new Color(0xff008cff); DarkOrchid = new Color(0xffcc3299); DarkRed = new Color(0xff00008b); DarkSalmon = new Color(0xff7a96e9); DarkSeaGreen = new Color(0xff8bbc8f); DarkSlateBlue = new Color(0xff8b3d48); DarkSlateGray = new Color(0xff4f4f2f); DarkTurquoise = new Color(0xffd1ce00); DarkViolet = new Color(0xffd30094); DeepPink = new Color(0xff9314ff); DeepSkyBlue = new Color(0xffffbf00); DimGray = new Color(0xff696969); DodgerBlue = new Color(0xffff901e); Firebrick = new Color(0xff2222b2); FloralWhite = new Color(0xfff0faff); ForestGreen = new Color(0xff228b22); Fuchsia = new Color(0xffff00ff); Gainsboro = new Color(0xffdcdcdc); GhostWhite = new Color(0xfffff8f8); Gold = new Color(0xff00d7ff); Goldenrod = new Color(0xff20a5da); Gray = new Color(0xff808080); Green = new Color(0xff008000); GreenYellow = new Color(0xff2fffad); Honeydew = new Color(0xfff0fff0); HotPink = new Color(0xffb469ff); IndianRed = new Color(0xff5c5ccd); Indigo = new Color(0xff82004b); Ivory = new Color(0xfff0ffff); Khaki = new Color(0xff8ce6f0); Lavender = new Color(0xfffae6e6); LavenderBlush = new Color(0xfff5f0ff); LawnGreen = new Color(0xff00fc7c); LemonChiffon = new Color(0xffcdfaff); LightBlue = new Color(0xffe6d8ad); LightCoral = new Color(0xff8080f0); LightCyan = new Color(0xffffffe0); LightGoldenrodYellow = new Color(0xffd2fafa); LightGray = new Color(0xffd3d3d3); LightGreen = new Color(0xff90ee90); LightPink = new Color(0xffc1b6ff); LightSalmon = new Color(0xff7aa0ff); LightSeaGreen = new Color(0xffaab220); LightSkyBlue = new Color(0xffface87); LightSlateGray = new Color(0xff998877); LightSteelBlue = new Color(0xffdec4b0); LightYellow = new Color(0xffe0ffff); Lime = new Color(0xff00ff00); LimeGreen = new Color(0xff32cd32); Linen = new Color(0xffe6f0fa); Magenta = new Color(0xffff00ff); Maroon = new Color(0xff000080); MediumAquamarine = new Color(0xffaacd66); MediumBlue = new Color(0xffcd0000); MediumOrchid = new Color(0xffd355ba); MediumPurple = new Color(0xffdb7093); MediumSeaGreen = new Color(0xff71b33c); MediumSlateBlue = new Color(0xffee687b); MediumSpringGreen = new Color(0xff9afa00); MediumTurquoise = new Color(0xffccd148); MediumVioletRed = new Color(0xff8515c7); MidnightBlue = new Color(0xff701919); MintCream = new Color(0xfffafff5); MistyRose = new Color(0xffe1e4ff); Moccasin = new Color(0xffb5e4ff); MonoGameOrange = new Color(0xff003ce7); NavajoWhite = new Color(0xffaddeff); Navy = new Color(0xff800000); OldLace = new Color(0xffe6f5fd); Olive = new Color(0xff008080); OliveDrab = new Color(0xff238e6b); Orange = new Color(0xff00a5ff); OrangeRed = new Color(0xff0045ff); Orchid = new Color(0xffd670da); PaleGoldenrod = new Color(0xffaae8ee); PaleGreen = new Color(0xff98fb98); PaleTurquoise = new Color(0xffeeeeaf); PaleVioletRed = new Color(0xff9370db); PapayaWhip = new Color(0xffd5efff); PeachPuff = new Color(0xffb9daff); Peru = new Color(0xff3f85cd); Pink = new Color(0xffcbc0ff); Plum = new Color(0xffdda0dd); PowderBlue = new Color(0xffe6e0b0); Purple = new Color(0xff800080); Red = new Color(0xff0000ff); RosyBrown = new Color(0xff8f8fbc); RoyalBlue = new Color(0xffe16941); SaddleBrown = new Color(0xff13458b); Salmon= new Color(0xff7280fa); SandyBrown = new Color(0xff60a4f4); SeaGreen = new Color(0xff578b2e); SeaShell = new Color(0xffeef5ff); Sienna = new Color(0xff2d52a0); Silver = new Color(0xffc0c0c0); SkyBlue = new Color(0xffebce87); SlateBlue= new Color(0xffcd5a6a); SlateGray= new Color(0xff908070); Snow= new Color(0xfffafaff); SpringGreen= new Color(0xff7fff00); SteelBlue= new Color(0xffb48246); Tan= new Color(0xff8cb4d2); Teal= new Color(0xff808000); Thistle= new Color(0xffd8bfd8); Tomato= new Color(0xff4763ff); Turquoise= new Color(0xffd0e040); Violet= new Color(0xffee82ee); Wheat= new Color(0xffb3def5); White= new Color(uint.MaxValue); WhiteSmoke= new Color(0xfff5f5f5); Yellow = new Color(0xff00ffff); YellowGreen = new Color(0xff32cd9a); } // Stored as RGBA with R in the least significant octet: // |-------|-------|-------|------- // A B G R private uint _packedValue; /// /// Gets or sets packed value of this . /// [CLSCompliant(false)] public UInt32 PackedValue { get { return _packedValue; } set { _packedValue = value; } } void IPackedVector.PackFromVector4(Vector4 vector) { int r = (int)(vector.X * 255); int g = (int)(vector.Y * 255); int b = (int)(vector.Z * 255); int a = (int)(vector.W * 255); if (((r | g | b | a) & 0xFFFFFF00) != 0) { r = MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue); g = MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue); b = MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue); a = MathHelper.Clamp(a, Byte.MinValue, Byte.MaxValue); } _packedValue = ((uint)a << 24) | ((uint)b << 16) | ((uint)g << 8) | ((uint)r); } /// /// Constructs an RGBA color from a packed value. /// The value is a 32-bit unsigned integer, with R in the least significant octet. /// /// The packed value. [CLSCompliant(false)] public Color(uint packedValue) { _packedValue = packedValue; } /// /// Constructs an RGBA color from the XYZW unit length components of a vector. /// /// A representing color. public Color(Vector4 color) : this((int)(color.X * 255), (int)(color.Y * 255), (int)(color.Z * 255), (int)(color.W * 255)) { } /// /// Constructs an RGBA color from the XYZ unit length components of a vector. Alpha value will be opaque. /// /// A representing color. public Color(Vector3 color) : this((int)(color.X * 255), (int)(color.Y * 255), (int)(color.Z * 255)) { } /// /// Constructs an RGBA color from a and an alpha value. /// /// A for RGB values of new instance. /// The alpha component value from 0 to 255. public Color(Color color, int alpha) { if ((alpha & 0xFFFFFF00) != 0) { var clampedA = (uint)MathHelper.Clamp(alpha, Byte.MinValue, Byte.MaxValue); _packedValue = (color._packedValue & 0x00FFFFFF) | (clampedA << 24); } else { _packedValue = (color._packedValue & 0x00FFFFFF) | ((uint)alpha << 24); } } /// /// Constructs an RGBA color from color and alpha value. /// /// A for RGB values of new instance. /// Alpha component value from 0.0f to 1.0f. public Color(Color color, float alpha): this(color, (int)(alpha * 255)) { } /// /// Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. /// /// Red component value from 0.0f to 1.0f. /// Green component value from 0.0f to 1.0f. /// Blue component value from 0.0f to 1.0f. public Color(float r, float g, float b) : this((int)(r * 255), (int)(g * 255), (int)(b * 255)) { } /// /// Constructs an RGBA color from scalars representing red, green, blue and alpha values. /// /// Red component value from 0.0f to 1.0f. /// Green component value from 0.0f to 1.0f. /// Blue component value from 0.0f to 1.0f. /// Alpha component value from 0.0f to 1.0f. public Color(float r, float g, float b, float alpha) : this((int)(r * 255), (int)(g * 255), (int)(b * 255), (int)(alpha * 255)) { } /// /// Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. /// /// Red component value from 0 to 255. /// Green component value from 0 to 255. /// Blue component value from 0 to 255. public Color(int r, int g, int b) { _packedValue = 0xFF000000; // A = 255 if (((r | g | b) & 0xFFFFFF00) != 0) { var clampedR = (uint)MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue); var clampedG = (uint)MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue); var clampedB = (uint)MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue); _packedValue |= (clampedB << 16) | (clampedG << 8) | (clampedR); } else { _packedValue |= ((uint)b << 16) | ((uint)g << 8) | ((uint)r); } } /// /// Constructs an RGBA color from scalars representing red, green, blue and alpha values. /// /// Red component value from 0 to 255. /// Green component value from 0 to 255. /// Blue component value from 0 to 255. /// Alpha component value from 0 to 255. public Color(int r, int g, int b, int alpha) { if (((r | g | b | alpha) & 0xFFFFFF00) != 0) { var clampedR = (uint)MathHelper.Clamp(r, Byte.MinValue, Byte.MaxValue); var clampedG = (uint)MathHelper.Clamp(g, Byte.MinValue, Byte.MaxValue); var clampedB = (uint)MathHelper.Clamp(b, Byte.MinValue, Byte.MaxValue); var clampedA = (uint)MathHelper.Clamp(alpha, Byte.MinValue, Byte.MaxValue); _packedValue = (clampedA << 24) | (clampedB << 16) | (clampedG << 8) | (clampedR); } else { _packedValue = ((uint)alpha << 24) | ((uint)b << 16) | ((uint)g << 8) | ((uint)r); } } /// /// Constructs an RGBA color from scalars representing red, green, blue and alpha values. /// /// /// This overload sets the values directly without clamping, and may therefore be faster than the other overloads. /// /// /// /// /// public Color(byte r, byte g, byte b, byte alpha) { _packedValue = ((uint)alpha << 24) | ((uint)b << 16) | ((uint)g << 8) | (r); } /// /// Gets or sets the blue component. /// [DataMember] public byte B { get { unchecked { return (byte) (_packedValue >> 16); } } set { _packedValue = (_packedValue & 0xff00ffff) | ((uint)value << 16); } } /// /// Gets or sets the green component. /// [DataMember] public byte G { get { unchecked { return (byte)(_packedValue >> 8); } } set { _packedValue = (_packedValue & 0xffff00ff) | ((uint)value << 8); } } /// /// Gets or sets the red component. /// [DataMember] public byte R { get { unchecked { return (byte)_packedValue; } } set { _packedValue = (_packedValue & 0xffffff00) | value; } } /// /// Gets or sets the alpha component. /// [DataMember] public byte A { get { unchecked { return (byte)(_packedValue >> 24); } } set { _packedValue = (_packedValue & 0x00ffffff) | ((uint)value << 24); } } /// /// Compares whether two instances are equal. /// /// instance on the left of the equal sign. /// instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(Color left, Color right) { return (left._packedValue == right._packedValue); } /// /// Compares whether two instances are not equal. /// /// instance on the left of the not equal sign. /// instance on the right of the not equal sign. /// true if the instances are not equal; false otherwise. public static bool operator !=(Color left, Color right) { return (left._packedValue != right._packedValue); } /// /// Gets the hash code of this . /// /// Hash code of this . public override int GetHashCode() { return _packedValue.GetHashCode(); } /// /// Compares whether current instance is equal to specified object. /// /// The to compare. /// true if the instances are equal; false otherwise. public override bool Equals(object obj) { return ((obj is Color) && this.Equals((Color)obj)); } #region Color Bank /// /// Transparent color (R:0,G:0,B:0,A:0). /// public static Color Transparent { get; private set; } /// /// AliceBlue color (R:240,G:248,B:255,A:255). /// public static Color AliceBlue { get; private set; } /// /// AntiqueWhite color (R:250,G:235,B:215,A:255). /// public static Color AntiqueWhite { get; private set; } /// /// Aqua color (R:0,G:255,B:255,A:255). /// public static Color Aqua { get; private set; } /// /// Aquamarine color (R:127,G:255,B:212,A:255). /// public static Color Aquamarine { get; private set; } /// /// Azure color (R:240,G:255,B:255,A:255). /// public static Color Azure { get; private set; } /// /// Beige color (R:245,G:245,B:220,A:255). /// public static Color Beige { get; private set; } /// /// Bisque color (R:255,G:228,B:196,A:255). /// public static Color Bisque { get; private set; } /// /// Black color (R:0,G:0,B:0,A:255). /// public static Color Black { get; private set; } /// /// BlanchedAlmond color (R:255,G:235,B:205,A:255). /// public static Color BlanchedAlmond { get; private set; } /// /// Blue color (R:0,G:0,B:255,A:255). /// public static Color Blue { get; private set; } /// /// BlueViolet color (R:138,G:43,B:226,A:255). /// public static Color BlueViolet { get; private set; } /// /// Brown color (R:165,G:42,B:42,A:255). /// public static Color Brown { get; private set; } /// /// BurlyWood color (R:222,G:184,B:135,A:255). /// public static Color BurlyWood { get; private set; } /// /// CadetBlue color (R:95,G:158,B:160,A:255). /// public static Color CadetBlue { get; private set; } /// /// Chartreuse color (R:127,G:255,B:0,A:255). /// public static Color Chartreuse { get; private set; } /// /// Chocolate color (R:210,G:105,B:30,A:255). /// public static Color Chocolate { get; private set; } /// /// Coral color (R:255,G:127,B:80,A:255). /// public static Color Coral { get; private set; } /// /// CornflowerBlue color (R:100,G:149,B:237,A:255). /// public static Color CornflowerBlue { get; private set; } /// /// Cornsilk color (R:255,G:248,B:220,A:255). /// public static Color Cornsilk { get; private set; } /// /// Crimson color (R:220,G:20,B:60,A:255). /// public static Color Crimson { get; private set; } /// /// Cyan color (R:0,G:255,B:255,A:255). /// public static Color Cyan { get; private set; } /// /// DarkBlue color (R:0,G:0,B:139,A:255). /// public static Color DarkBlue { get; private set; } /// /// DarkCyan color (R:0,G:139,B:139,A:255). /// public static Color DarkCyan { get; private set; } /// /// DarkGoldenrod color (R:184,G:134,B:11,A:255). /// public static Color DarkGoldenrod { get; private set; } /// /// DarkGray color (R:169,G:169,B:169,A:255). /// public static Color DarkGray { get; private set; } /// /// DarkGreen color (R:0,G:100,B:0,A:255). /// public static Color DarkGreen { get; private set; } /// /// DarkKhaki color (R:189,G:183,B:107,A:255). /// public static Color DarkKhaki { get; private set; } /// /// DarkMagenta color (R:139,G:0,B:139,A:255). /// public static Color DarkMagenta { get; private set; } /// /// DarkOliveGreen color (R:85,G:107,B:47,A:255). /// public static Color DarkOliveGreen { get; private set; } /// /// DarkOrange color (R:255,G:140,B:0,A:255). /// public static Color DarkOrange { get; private set; } /// /// DarkOrchid color (R:153,G:50,B:204,A:255). /// public static Color DarkOrchid { get; private set; } /// /// DarkRed color (R:139,G:0,B:0,A:255). /// public static Color DarkRed { get; private set; } /// /// DarkSalmon color (R:233,G:150,B:122,A:255). /// public static Color DarkSalmon { get; private set; } /// /// DarkSeaGreen color (R:143,G:188,B:139,A:255). /// public static Color DarkSeaGreen { get; private set; } /// /// DarkSlateBlue color (R:72,G:61,B:139,A:255). /// public static Color DarkSlateBlue { get; private set; } /// /// DarkSlateGray color (R:47,G:79,B:79,A:255). /// public static Color DarkSlateGray { get; private set; } /// /// DarkTurquoise color (R:0,G:206,B:209,A:255). /// public static Color DarkTurquoise { get; private set; } /// /// DarkViolet color (R:148,G:0,B:211,A:255). /// public static Color DarkViolet { get; private set; } /// /// DeepPink color (R:255,G:20,B:147,A:255). /// public static Color DeepPink { get; private set; } /// /// DeepSkyBlue color (R:0,G:191,B:255,A:255). /// public static Color DeepSkyBlue { get; private set; } /// /// DimGray color (R:105,G:105,B:105,A:255). /// public static Color DimGray { get; private set; } /// /// DodgerBlue color (R:30,G:144,B:255,A:255). /// public static Color DodgerBlue { get; private set; } /// /// Firebrick color (R:178,G:34,B:34,A:255). /// public static Color Firebrick { get; private set; } /// /// FloralWhite color (R:255,G:250,B:240,A:255). /// public static Color FloralWhite { get; private set; } /// /// ForestGreen color (R:34,G:139,B:34,A:255). /// public static Color ForestGreen { get; private set; } /// /// Fuchsia color (R:255,G:0,B:255,A:255). /// public static Color Fuchsia { get; private set; } /// /// Gainsboro color (R:220,G:220,B:220,A:255). /// public static Color Gainsboro { get; private set; } /// /// GhostWhite color (R:248,G:248,B:255,A:255). /// public static Color GhostWhite { get; private set; } /// /// Gold color (R:255,G:215,B:0,A:255). /// public static Color Gold { get; private set; } /// /// Goldenrod color (R:218,G:165,B:32,A:255). /// public static Color Goldenrod { get; private set; } /// /// Gray color (R:128,G:128,B:128,A:255). /// public static Color Gray { get; private set; } /// /// Green color (R:0,G:128,B:0,A:255). /// public static Color Green { get; private set; } /// /// GreenYellow color (R:173,G:255,B:47,A:255). /// public static Color GreenYellow { get; private set; } /// /// Honeydew color (R:240,G:255,B:240,A:255). /// public static Color Honeydew { get; private set; } /// /// HotPink color (R:255,G:105,B:180,A:255). /// public static Color HotPink { get; private set; } /// /// IndianRed color (R:205,G:92,B:92,A:255). /// public static Color IndianRed { get; private set; } /// /// Indigo color (R:75,G:0,B:130,A:255). /// public static Color Indigo { get; private set; } /// /// Ivory color (R:255,G:255,B:240,A:255). /// public static Color Ivory { get; private set; } /// /// Khaki color (R:240,G:230,B:140,A:255). /// public static Color Khaki { get; private set; } /// /// Lavender color (R:230,G:230,B:250,A:255). /// public static Color Lavender { get; private set; } /// /// LavenderBlush color (R:255,G:240,B:245,A:255). /// public static Color LavenderBlush { get; private set; } /// /// LawnGreen color (R:124,G:252,B:0,A:255). /// public static Color LawnGreen { get; private set; } /// /// LemonChiffon color (R:255,G:250,B:205,A:255). /// public static Color LemonChiffon { get; private set; } /// /// LightBlue color (R:173,G:216,B:230,A:255). /// public static Color LightBlue { get; private set; } /// /// LightCoral color (R:240,G:128,B:128,A:255). /// public static Color LightCoral { get; private set; } /// /// LightCyan color (R:224,G:255,B:255,A:255). /// public static Color LightCyan { get; private set; } /// /// LightGoldenrodYellow color (R:250,G:250,B:210,A:255). /// public static Color LightGoldenrodYellow { get; private set; } /// /// LightGray color (R:211,G:211,B:211,A:255). /// public static Color LightGray { get; private set; } /// /// LightGreen color (R:144,G:238,B:144,A:255). /// public static Color LightGreen { get; private set; } /// /// LightPink color (R:255,G:182,B:193,A:255). /// public static Color LightPink { get; private set; } /// /// LightSalmon color (R:255,G:160,B:122,A:255). /// public static Color LightSalmon { get; private set; } /// /// LightSeaGreen color (R:32,G:178,B:170,A:255). /// public static Color LightSeaGreen { get; private set; } /// /// LightSkyBlue color (R:135,G:206,B:250,A:255). /// public static Color LightSkyBlue { get; private set; } /// /// LightSlateGray color (R:119,G:136,B:153,A:255). /// public static Color LightSlateGray { get; private set; } /// /// LightSteelBlue color (R:176,G:196,B:222,A:255). /// public static Color LightSteelBlue { get; private set; } /// /// LightYellow color (R:255,G:255,B:224,A:255). /// public static Color LightYellow { get; private set; } /// /// Lime color (R:0,G:255,B:0,A:255). /// public static Color Lime { get; private set; } /// /// LimeGreen color (R:50,G:205,B:50,A:255). /// public static Color LimeGreen { get; private set; } /// /// Linen color (R:250,G:240,B:230,A:255). /// public static Color Linen { get; private set; } /// /// Magenta color (R:255,G:0,B:255,A:255). /// public static Color Magenta { get; private set; } /// /// Maroon color (R:128,G:0,B:0,A:255). /// public static Color Maroon { get; private set; } /// /// MediumAquamarine color (R:102,G:205,B:170,A:255). /// public static Color MediumAquamarine { get; private set; } /// /// MediumBlue color (R:0,G:0,B:205,A:255). /// public static Color MediumBlue { get; private set; } /// /// MediumOrchid color (R:186,G:85,B:211,A:255). /// public static Color MediumOrchid { get; private set; } /// /// MediumPurple color (R:147,G:112,B:219,A:255). /// public static Color MediumPurple { get; private set; } /// /// MediumSeaGreen color (R:60,G:179,B:113,A:255). /// public static Color MediumSeaGreen { get; private set; } /// /// MediumSlateBlue color (R:123,G:104,B:238,A:255). /// public static Color MediumSlateBlue { get; private set; } /// /// MediumSpringGreen color (R:0,G:250,B:154,A:255). /// public static Color MediumSpringGreen { get; private set; } /// /// MediumTurquoise color (R:72,G:209,B:204,A:255). /// public static Color MediumTurquoise { get; private set; } /// /// MediumVioletRed color (R:199,G:21,B:133,A:255). /// public static Color MediumVioletRed { get; private set; } /// /// MidnightBlue color (R:25,G:25,B:112,A:255). /// public static Color MidnightBlue { get; private set; } /// /// MintCream color (R:245,G:255,B:250,A:255). /// public static Color MintCream { get; private set; } /// /// MistyRose color (R:255,G:228,B:225,A:255). /// public static Color MistyRose { get; private set; } /// /// Moccasin color (R:255,G:228,B:181,A:255). /// public static Color Moccasin { get; private set; } /// /// MonoGame orange theme color (R:231,G:60,B:0,A:255). /// public static Color MonoGameOrange { get; private set; } /// /// NavajoWhite color (R:255,G:222,B:173,A:255). /// public static Color NavajoWhite { get; private set; } /// /// Navy color (R:0,G:0,B:128,A:255). /// public static Color Navy { get; private set; } /// /// OldLace color (R:253,G:245,B:230,A:255). /// public static Color OldLace { get; private set; } /// /// Olive color (R:128,G:128,B:0,A:255). /// public static Color Olive { get; private set; } /// /// OliveDrab color (R:107,G:142,B:35,A:255). /// public static Color OliveDrab { get; private set; } /// /// Orange color (R:255,G:165,B:0,A:255). /// public static Color Orange { get; private set; } /// /// OrangeRed color (R:255,G:69,B:0,A:255). /// public static Color OrangeRed { get; private set; } /// /// Orchid color (R:218,G:112,B:214,A:255). /// public static Color Orchid { get; private set; } /// /// PaleGoldenrod color (R:238,G:232,B:170,A:255). /// public static Color PaleGoldenrod { get; private set; } /// /// PaleGreen color (R:152,G:251,B:152,A:255). /// public static Color PaleGreen { get; private set; } /// /// PaleTurquoise color (R:175,G:238,B:238,A:255). /// public static Color PaleTurquoise { get; private set; } /// /// PaleVioletRed color (R:219,G:112,B:147,A:255). /// public static Color PaleVioletRed { get; private set; } /// /// PapayaWhip color (R:255,G:239,B:213,A:255). /// public static Color PapayaWhip { get; private set; } /// /// PeachPuff color (R:255,G:218,B:185,A:255). /// public static Color PeachPuff { get; private set; } /// /// Peru color (R:205,G:133,B:63,A:255). /// public static Color Peru { get; private set; } /// /// Pink color (R:255,G:192,B:203,A:255). /// public static Color Pink { get; private set; } /// /// Plum color (R:221,G:160,B:221,A:255). /// public static Color Plum { get; private set; } /// /// PowderBlue color (R:176,G:224,B:230,A:255). /// public static Color PowderBlue { get; private set; } /// /// Purple color (R:128,G:0,B:128,A:255). /// public static Color Purple { get; private set; } /// /// Red color (R:255,G:0,B:0,A:255). /// public static Color Red { get; private set; } /// /// RosyBrown color (R:188,G:143,B:143,A:255). /// public static Color RosyBrown { get; private set; } /// /// RoyalBlue color (R:65,G:105,B:225,A:255). /// public static Color RoyalBlue { get; private set; } /// /// SaddleBrown color (R:139,G:69,B:19,A:255). /// public static Color SaddleBrown { get; private set; } /// /// Salmon color (R:250,G:128,B:114,A:255). /// public static Color Salmon { get; private set; } /// /// SandyBrown color (R:244,G:164,B:96,A:255). /// public static Color SandyBrown { get; private set; } /// /// SeaGreen color (R:46,G:139,B:87,A:255). /// public static Color SeaGreen { get; private set; } /// /// SeaShell color (R:255,G:245,B:238,A:255). /// public static Color SeaShell { get; private set; } /// /// Sienna color (R:160,G:82,B:45,A:255). /// public static Color Sienna { get; private set; } /// /// Silver color (R:192,G:192,B:192,A:255). /// public static Color Silver { get; private set; } /// /// SkyBlue color (R:135,G:206,B:235,A:255). /// public static Color SkyBlue { get; private set; } /// /// SlateBlue color (R:106,G:90,B:205,A:255). /// public static Color SlateBlue { get; private set; } /// /// SlateGray color (R:112,G:128,B:144,A:255). /// public static Color SlateGray { get; private set; } /// /// Snow color (R:255,G:250,B:250,A:255). /// public static Color Snow { get; private set; } /// /// SpringGreen color (R:0,G:255,B:127,A:255). /// public static Color SpringGreen { get; private set; } /// /// SteelBlue color (R:70,G:130,B:180,A:255). /// public static Color SteelBlue { get; private set; } /// /// Tan color (R:210,G:180,B:140,A:255). /// public static Color Tan { get; private set; } /// /// Teal color (R:0,G:128,B:128,A:255). /// public static Color Teal { get; private set; } /// /// Thistle color (R:216,G:191,B:216,A:255). /// public static Color Thistle { get; private set; } /// /// Tomato color (R:255,G:99,B:71,A:255). /// public static Color Tomato { get; private set; } /// /// Turquoise color (R:64,G:224,B:208,A:255). /// public static Color Turquoise { get; private set; } /// /// Violet color (R:238,G:130,B:238,A:255). /// public static Color Violet { get; private set; } /// /// Wheat color (R:245,G:222,B:179,A:255). /// public static Color Wheat { get; private set; } /// /// White color (R:255,G:255,B:255,A:255). /// public static Color White { get; private set; } /// /// WhiteSmoke color (R:245,G:245,B:245,A:255). /// public static Color WhiteSmoke { get; private set; } /// /// Yellow color (R:255,G:255,B:0,A:255). /// public static Color Yellow { get; private set; } /// /// YellowGreen color (R:154,G:205,B:50,A:255). /// public static Color YellowGreen { get; private set; } #endregion /// /// Performs linear interpolation of . /// /// Source . /// Destination . /// Interpolation factor. /// Interpolated . public static Color Lerp(Color start, Color end, Single amount) { amount = MathHelper.Clamp(amount, 0, 1); return new Color( (int)MathHelper.Lerp(start.R, end.R, amount), (int)MathHelper.Lerp(start.G, end.G, amount), (int)MathHelper.Lerp(start.B, end.B, amount), (int)MathHelper.Lerp(start.A, end.A, amount) ); } /// /// should be used instead of this function. /// /// Interpolated . [Obsolete("Color.Lerp should be used instead of this function.")] public static Color LerpPrecise(Color start, Color end, Single amount) { amount = MathHelper.Clamp(amount, 0, 1); return new Color( (int)MathHelper.LerpPrecise(start.R, end.R, amount), (int)MathHelper.LerpPrecise(start.G, end.G, amount), (int)MathHelper.LerpPrecise(start.B, end.B, amount), (int)MathHelper.LerpPrecise(start.A, end.A, amount)); } /// /// Multiply by value. /// /// Source . /// Multiplicator. /// Multiplication result. public static Color Multiply(Color left, float right) { return new Color((int)(left.R * right), (int)(left.G * right), (int)(left.B * right), (int)(left.A * right)); } /// /// Multiply by value. /// /// Source . /// Multiplicator. /// Multiplication result. public static Color operator *(Color left, float right) { return new Color((int)(left.R * right), (int)(left.G * right), (int)(left.B * right), (int)(left.A * right)); } /// /// Multiply by value. /// /// Scalar value on the left of the mul sign. /// Source . /// Multiplication result. public static Color operator *(float left, Color right) { return new Color((int)(right.R * left), (int)(right.G * left), (int)(right.B * left), (int)(right.A * left)); } /// /// Gets a representation for this object. /// /// A representation for this object. public Vector3 ToVector3() { return new Vector3(R / 255.0f, G / 255.0f, B / 255.0f); } /// /// Gets a representation for this object. /// /// A representation for this object. public Vector4 ToVector4() { return new Vector4(R / 255.0f, G / 255.0f, B / 255.0f, A / 255.0f); } internal string DebugDisplayString { get { return string.Concat( this.R.ToString(), " ", this.G.ToString(), " ", this.B.ToString(), " ", this.A.ToString() ); } } /// /// Returns a representation of this in the format: /// {R:[red] G:[green] B:[blue] A:[alpha]} /// /// representation of this . public override string ToString() { StringBuilder sb = new StringBuilder(25); sb.Append("{R:"); sb.Append(R); sb.Append(" G:"); sb.Append(G); sb.Append(" B:"); sb.Append(B); sb.Append(" A:"); sb.Append(A); sb.Append("}"); return sb.ToString(); } /// /// Translate a non-premultipled alpha to a that contains premultiplied alpha. /// /// A representing color. /// A which contains premultiplied alpha data. public static Color FromNonPremultiplied(Vector4 vector) { return new Color(vector.X * vector.W, vector.Y * vector.W, vector.Z * vector.W, vector.W); } /// /// Translate a non-premultipled alpha to a that contains premultiplied alpha. /// /// Red component value. /// Green component value. /// Blue component value. /// Alpha component value. /// A which contains premultiplied alpha data. public static Color FromNonPremultiplied(int r, int g, int b, int a) { return new Color(r * a / 255, g * a / 255, b * a / 255, a); } #region IEquatable Members /// /// Compares whether current instance is equal to specified . /// /// The to compare. /// true if the instances are equal; false otherwise. public bool Equals(Color other) { return this.PackedValue == other.PackedValue; } #endregion /// /// Deconstruction method for . /// /// Red component value from 0 to 255. /// Green component value from 0 to 255. /// Blue component value from 0 to 255. public void Deconstruct(out byte r, out byte g, out byte b) { r = R; g = G; b = B; } /// /// Deconstruction method for . /// /// Red component value from 0.0f to 1.0f. /// Green component value from 0.0f to 1.0f. /// Blue component value from 0.0f to 1.0f. public void Deconstruct(out float r, out float g, out float b) { r = R / 255f; g = G / 255f; b = B / 255f; } /// /// Deconstruction method for with Alpha. /// /// Red component value from 0 to 255. /// Green component value from 0 to 255. /// Blue component value from 0 to 255. /// Alpha component value from 0 to 255. public void Deconstruct(out byte r, out byte g, out byte b, out byte a) { r = R; g = G; b = B; a = A; } /// /// Deconstruction method for with Alpha. /// /// Red component value from 0.0f to 1.0f. /// Green component value from 0.0f to 1.0f. /// Blue component value from 0.0f to 1.0f. /// Alpha component value from 0.0f to 1.0f. public void Deconstruct(out float r, out float g, out float b, out float a) { r = R / 255f; g = G / 255f; b = B / 255f; a = A / 255f; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/AlphaTestEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class AlphaTestEffectReader : ContentTypeReader { protected override AlphaTestEffect Read(ContentReader input, AlphaTestEffect existingInstance) { AlphaTestEffect effect = new AlphaTestEffect(input.GetGraphicsDevice()); effect.Texture = input.ReadExternalReference() as Texture2D; effect.AlphaFunction = (CompareFunction)input.ReadInt32(); effect.ReferenceAlpha = (int)input.ReadUInt32(); effect.DiffuseColor = input.ReadVector3(); effect.Alpha = input.ReadSingle(); effect.VertexColorEnabled = input.ReadBoolean(); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/BasicEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class BasicEffectReader : ContentTypeReader { protected override BasicEffect Read(ContentReader input, BasicEffect existingInstance) { BasicEffect effect = new BasicEffect(input.GetGraphicsDevice()); Texture2D texture = input.ReadExternalReference() as Texture2D; if (texture != null) { effect.Texture = texture; effect.TextureEnabled = true; } effect.DiffuseColor = input.ReadVector3(); effect.EmissiveColor = input.ReadVector3(); effect.SpecularColor = input.ReadVector3(); effect.SpecularPower = input.ReadSingle(); effect.Alpha = input.ReadSingle(); effect.VertexColorEnabled = input.ReadBoolean(); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/ColorReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Content { internal class ColorReader : ContentTypeReader { protected override Color Read(ContentReader input, Color existingInstance) { Color result = new Color(); result.R = input.ReadByte(); result.G = input.ReadByte(); result.B = input.ReadByte(); result.A = input.ReadByte(); return result; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/DualTextureEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class DualTextureEffectReader : ContentTypeReader { protected override DualTextureEffect Read(ContentReader input, DualTextureEffect existingInstance) { DualTextureEffect effect = new DualTextureEffect(input.GetGraphicsDevice()); effect.Texture = input.ReadExternalReference() as Texture2D; effect.Texture2 = input.ReadExternalReference() as Texture2D; effect.DiffuseColor = input.ReadVector3(); effect.Alpha = input.ReadSingle(); effect.VertexColorEnabled = input.ReadBoolean(); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/EffectMaterialReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Content { internal class EffectMaterialReader : ContentTypeReader { protected override EffectMaterial Read(ContentReader input, EffectMaterial existingInstance) { Effect effect = input.ReadExternalReference(); EffectMaterial effectMaterial = new EffectMaterial(effect); Dictionary dict = input.ReadObject>(); foreach (KeyValuePair item in dict) { EffectParameter parameter = effectMaterial.Parameters[item.Key]; if (parameter != null) { Type itemType = item.Value.GetType(); if (ReflectionHelpers.IsAssignableFromType(typeof(Texture), itemType)) parameter.SetValue((Texture)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(int), itemType)) parameter.SetValue((int)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(int[]), itemType)) parameter.SetValue((int[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(bool), itemType)) parameter.SetValue((bool)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(float), itemType)) parameter.SetValue((float)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(float[]), itemType)) parameter.SetValue((float[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector2), itemType)) parameter.SetValue((Vector2)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector2[]), itemType)) parameter.SetValue((Vector2[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector3), itemType)) parameter.SetValue((Vector3)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector3[]), itemType)) parameter.SetValue((Vector3[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector4), itemType)) parameter.SetValue((Vector4)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Vector4[]), itemType)) parameter.SetValue((Vector4[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Matrix), itemType)) parameter.SetValue((Matrix)item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Matrix[]), itemType)) parameter.SetValue((Matrix[])item.Value); else if (ReflectionHelpers.IsAssignableFromType(typeof(Quaternion), itemType)) parameter.SetValue((Quaternion)item.Value); else throw new NotSupportedException("Parameter type is not supported"); } else { Debug.WriteLine("No parameter " + item.Key); } } return effectMaterial; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/EffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class EffectReader : ContentTypeReader { protected override Effect Read(ContentReader input, Effect existingInstance) { int dataSize = input.ReadInt32(); byte[] data = input.BufferPool.Get(dataSize); input.Read(data, 0, dataSize); Effect effect = existingInstance ?? new Effect(input.GetGraphicsDevice(), data, 0, dataSize); input.BufferPool.Return(data); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/EnvironmentMapEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class EnvironmentMapEffectReader : ContentTypeReader { protected override EnvironmentMapEffect Read(ContentReader input, EnvironmentMapEffect existingInstance) { EnvironmentMapEffect effect = new EnvironmentMapEffect(input.GetGraphicsDevice()); effect.Texture = input.ReadExternalReference() as Texture2D; effect.EnvironmentMap = input.ReadExternalReference() as TextureCube; effect.EnvironmentMapAmount = input.ReadSingle(); effect.EnvironmentMapSpecular = input.ReadVector3(); effect.FresnelFactor = input.ReadSingle(); effect.DiffuseColor = input.ReadVector3(); effect.EmissiveColor = input.ReadVector3(); effect.Alpha = input.ReadSingle(); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/IndexBufferReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class IndexBufferReader : ContentTypeReader { protected override IndexBuffer Read(ContentReader input, IndexBuffer existingInstance) { IndexBuffer indexBuffer = existingInstance; bool sixteenBits = input.ReadBoolean(); int dataSize = input.ReadInt32(); if (indexBuffer == null) { indexBuffer = new IndexBuffer(input.GetGraphicsDevice(), sixteenBits ? IndexElementSize.SixteenBits : IndexElementSize.ThirtyTwoBits, dataSize / (sixteenBits ? 2 : 4), BufferUsage.None); } byte[] data = input.BufferPool.Get(dataSize); input.Read(data, 0, dataSize); indexBuffer.SetData(data, 0, dataSize); input.BufferPool.Return(data); return indexBuffer; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/ModelReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class ModelReader : ContentTypeReader { // List vertexBuffers = new List(); // List indexBuffers = new List(); // List effects = new List(); // List sharedResources = new List(); protected override Model Read(ContentReader input, Model existingInstance) { // Read the bone names and transforms. uint boneCount = input.ReadUInt32(); bool is8BitBoneReference = (boneCount < 255); //Debug.WriteLine("Bone count: {0}", boneCount); List bones = new List((int)boneCount); for (uint boneIndex = 0; boneIndex < boneCount; boneIndex++) { string boneName = input.ReadObject(); Matrix boneTransform = input.ReadMatrix(); ModelBone bone = new ModelBone((int)boneIndex, boneName, boneTransform); bones.Add(bone); } // Read the bone hierarchy. for (int boneIndex = 0; boneIndex < boneCount; boneIndex++) { ModelBone bone = bones[boneIndex]; //Debug.WriteLine("Bone {0} hierarchy:", i); // Read the parent bone reference. //Debug.WriteLine("Parent: "); int parentIndex = ReadBoneReference(input, is8BitBoneReference); if (parentIndex != -1) bone.Parent = bones[parentIndex]; // Read the child bone references. uint childCount = input.ReadUInt32(); //Debug.WriteLine("Children:"); for (uint j = 0; j < childCount; j++) { int childIndex = ReadBoneReference(input, is8BitBoneReference); if (childIndex != -1) bone.AddChild(bones[childIndex]); } } List meshes = new List(); //// Read the mesh data. int meshCount = input.ReadInt32(); //Debug.WriteLine("Mesh count: {0}", meshCount); for (int i = 0; i < meshCount; i++) { //Debug.WriteLine("Mesh {0}", i); string name = input.ReadObject(); int parentBoneIndex = ReadBoneReference(input, is8BitBoneReference); //Opt: BoundingSphere boundingSphere = input.ReadRawObject(); BoundingSphere boundingSphere = new BoundingSphere(input.ReadVector3(), input.ReadSingle()); // Tag object meshTag = input.ReadObject(); // Read the mesh part data. int partCount = input.ReadInt32(); //Debug.WriteLine("Mesh part count: {0}", partCount); List parts = new List(partCount); for (uint j = 0; j < partCount; j++) { ModelMeshPart part; if (existingInstance != null) part = existingInstance.Meshes[i].MeshParts[(int)j]; else part = new ModelMeshPart(); part.VertexOffset = input.ReadInt32(); part.NumVertices = input.ReadInt32(); part.StartIndex = input.ReadInt32(); part.PrimitiveCount = input.ReadInt32(); // tag part.Tag = input.ReadObject(); parts.Add(part); int jj = (int)j; input.ReadSharedResource(delegate (VertexBuffer v) { parts[jj].VertexBuffer = v; }); input.ReadSharedResource(delegate (IndexBuffer v) { parts[jj].IndexBuffer = v; }); input.ReadSharedResource(delegate (Effect v) { parts[jj].Effect = v; }); } if (existingInstance != null) continue; ModelMesh mesh = new ModelMesh(input.GetGraphicsDevice(), parts); mesh.Tag = meshTag; mesh.Name = name; mesh.ParentBone = bones[parentBoneIndex]; mesh.BoundingSphere = boundingSphere; meshes.Add(mesh); } if (existingInstance != null) { // Read past remaining data and return existing instance ReadBoneReference(input, is8BitBoneReference); input.ReadObject(); return existingInstance; } // Read the final pieces of model data. int rootBoneIndex = ReadBoneReference(input, is8BitBoneReference); Model model = new Model(bones, meshes); model.Root = bones[rootBoneIndex]; // Tag? model.Tag = input.ReadObject(); return model; } static int ReadBoneReference(ContentReader input, bool is8BitBoneReference) { // Read the bone ID, which may be encoded as either an 8 or 32 bit value. uint boneId = (is8BitBoneReference) ? input.ReadByte() : input.ReadUInt32() ; // Print out the bone ID. //if (boneId == 0) // Debug.WriteLine("null"); //else // Debug.WriteLine("bone #{0}", boneId - 1); return (int)(boneId - 1); } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/SkinnedEffectReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class SkinnedEffectReader : ContentTypeReader { protected override SkinnedEffect Read(ContentReader input, SkinnedEffect existingInstance) { SkinnedEffect effect = new SkinnedEffect(input.GetGraphicsDevice()); effect.Texture = input.ReadExternalReference() as Texture2D; effect.WeightsPerVertex = input.ReadInt32(); effect.DiffuseColor = input.ReadVector3(); effect.EmissiveColor = input.ReadVector3(); effect.SpecularColor = input.ReadVector3(); effect.SpecularPower = input.ReadSingle(); effect.Alpha = input.ReadSingle(); return effect; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/SpriteFontReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class SpriteFontReader : ContentTypeReader { protected override SpriteFont Read(ContentReader input, SpriteFont existingInstance) { if (existingInstance != null) { // Read the texture into the existing texture instance input.ReadObject(existingInstance.Texture); // discard the rest of the SpriteFont data as we are only reloading GPU resources for now input.ReadObject>(); input.ReadObject>(); input.ReadObject>(); input.ReadInt32(); input.ReadSingle(); input.ReadObject>(); if (input.ReadBoolean()) { input.ReadChar(); } return existingInstance; } else { // Create a fresh SpriteFont instance Texture2D texture = input.ReadObject(); List glyphs = input.ReadObject>(); List cropping = input.ReadObject>(); List charMap = input.ReadObject>(); int lineSpacing = input.ReadInt32(); float spacing = input.ReadSingle(); List kerning = input.ReadObject>(); char? defaultCharacter = null; if (input.ReadBoolean()) { defaultCharacter = new char?(input.ReadChar()); } return new SpriteFont(texture, glyphs, cropping, charMap, lineSpacing, spacing, kerning, defaultCharacter); } } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/Texture2DReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Content { internal class Texture2DReader : ContentTypeReader { protected override Texture2D Read(ContentReader input, Texture2D existingInstance) { Texture2D texture = null; SurfaceFormat surfaceFormat = (SurfaceFormat)input.ReadInt32(); int width = input.ReadInt32(); int height = input.ReadInt32(); int levelCount = input.ReadInt32(); int levelCountOutput = levelCount; SurfaceFormat convertedFormat = surfaceFormat; switch (surfaceFormat) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1a: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1) convertedFormat = SurfaceFormat.Color; break; case SurfaceFormat.Dxt1SRgb: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1) convertedFormat = SurfaceFormat.ColorSRgb; break; case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt5: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc) convertedFormat = SurfaceFormat.Color; break; case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5SRgb: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc) convertedFormat = SurfaceFormat.ColorSRgb; break; case SurfaceFormat.NormalizedByte4: convertedFormat = SurfaceFormat.Color; break; case SurfaceFormat.Bgra5551: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra5551) { //if (((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsAbgr5551) // convertedFormat = SurfaceFormat.Abgr5551; } break; case SurfaceFormat.Bgra4444: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra4444) { //if (((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsAbgr4444) // convertedFormat = SurfaceFormat.Abgr4444; } break; } texture = existingInstance ?? new Texture2D(input.GetGraphicsDevice(), width, height, levelCountOutput > 1, convertedFormat); for (int level = 0; level < levelCount; level++) { int levelDataSizeInBytes = input.ReadInt32(); byte[] levelData = input.BufferPool.Get(levelDataSizeInBytes); input.Read(levelData, 0, levelDataSizeInBytes); int levelWidth = Math.Max(width >> level, 1); int levelHeight = Math.Max(height >> level, 1); if (level >= levelCountOutput) continue; //Convert the image data if required switch (surfaceFormat) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsDxt1 && convertedFormat == SurfaceFormat.Color) { levelData = DxtDecoder.DecompressDxt1(levelData, levelWidth, levelHeight); levelDataSizeInBytes = levelData.Length; } break; case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc) if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc && convertedFormat == SurfaceFormat.Color) { levelData = DxtDecoder.DecompressDxt3(levelData, levelWidth, levelHeight); levelDataSizeInBytes = levelData.Length; } break; case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc) if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsS3tc && convertedFormat == SurfaceFormat.Color) { levelData = DxtDecoder.DecompressDxt5(levelData, levelWidth, levelHeight); levelDataSizeInBytes = levelData.Length; } break; case SurfaceFormat.Bgra5551: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra5551) { //if (convertedFormat == SurfaceFormat.Abgr5551) { // Shift the channels to suit OpenGL int offset = 0; for (int y = 0; y < levelHeight; y++) { for (int x = 0; x < levelWidth; x++) { ushort pixel = BitConverter.ToUInt16(levelData, offset); pixel = (ushort)(((pixel & 0x7FFF) << 1) | ((pixel & 0x8000) >> 15)); levelData[offset] = (byte)(pixel); levelData[offset + 1] = (byte)(pixel >> 8); offset += 2; } } } } break; case SurfaceFormat.Bgra4444: if (!((IPlatformGraphicsDevice)input.GetGraphicsDevice()).Strategy.Capabilities.SupportsBgra4444) { //if (convertedFormat == SurfaceFormat.Abgr4444) { // Shift the channels to suit OpenGL int offset = 0; for (int y = 0; y < levelHeight; y++) { for (int x = 0; x < levelWidth; x++) { ushort pixel = BitConverter.ToUInt16(levelData, offset); pixel = (ushort)(((pixel & 0x0FFF) << 4) | ((pixel & 0xF000) >> 12)); levelData[offset] = (byte)(pixel); levelData[offset + 1] = (byte)(pixel >> 8); offset += 2; } } } } break; case SurfaceFormat.NormalizedByte4: { int bytesPerPixel = surfaceFormat.GetSize(); int pitch = levelWidth * bytesPerPixel; for (int y = 0; y < levelHeight; y++) { for (int x = 0; x < levelWidth; x++) { int color = BitConverter.ToInt32(levelData, y * pitch + x * bytesPerPixel); levelData[y * pitch + x * 4] = (byte)(((color >> 16) & 0xff)); //R:=W levelData[y * pitch + x * 4 + 1] = (byte)(((color >> 8) & 0xff)); //G:=V levelData[y * pitch + x * 4 + 2] = (byte)(((color) & 0xff)); //B:=U levelData[y * pitch + x * 4 + 3] = (byte)(((color >> 24) & 0xff)); //A:=Q } } } break; } texture.SetData(level, null, levelData, 0, levelDataSizeInBytes); input.BufferPool.Return(levelData); } texture.Name = input.AssetName; return texture; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/Texture3DReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class Texture3DReader : ContentTypeReader { protected override Texture3D Read(ContentReader input, Texture3D existingInstance) { Texture3D texture = null; SurfaceFormat format = (SurfaceFormat)input.ReadInt32(); int width = input.ReadInt32(); int height = input.ReadInt32(); int depth = input.ReadInt32(); int levelCount = input.ReadInt32(); if (existingInstance == null) texture = new Texture3D(input.GetGraphicsDevice(), width, height, depth, levelCount > 1, format); else texture = existingInstance; for (int i = 0; i < levelCount; i++) { int dataSize = input.ReadInt32(); byte[] data = input.BufferPool.Get(dataSize); input.Read(data, 0, dataSize); texture.SetData(i, 0, 0, width, height, 0, depth, data, 0, dataSize); // Calculate dimensions of next mip level. width = Math.Max(width >> 1, 1); height = Math.Max(height >> 1, 1); depth = Math.Max(depth >> 1, 1); input.BufferPool.Return(data); } return texture; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/TextureCubeReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class TextureCubeReader : ContentTypeReader { protected override TextureCube Read(ContentReader input, TextureCube existingInstance) { TextureCube textureCube = null; SurfaceFormat surfaceFormat = (SurfaceFormat)input.ReadInt32(); int size = input.ReadInt32(); int levels = input.ReadInt32(); if (existingInstance == null) textureCube = new TextureCube(input.GetGraphicsDevice(), size, levels > 1, surfaceFormat); else textureCube = existingInstance; for (int face = 0; face < 6; face++) { for (int i = 0; i < levels; i++) { int faceSize = input.ReadInt32(); byte[] faceData = input.BufferPool.Get(faceSize); input.Read(faceData, 0, faceSize); textureCube.SetData((CubeMapFace)face, i, null, faceData, 0, faceSize); input.BufferPool.Return(faceData); } } return textureCube; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/TextureReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class TextureReader : ContentTypeReader { protected override Texture Read(ContentReader input, Texture existingInstance) { return existingInstance; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/VertexBufferReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { class VertexBufferReader : ContentTypeReader { protected override VertexBuffer Read(ContentReader input, VertexBuffer existingInstance) { VertexDeclaration declaration = input.ReadRawObject(); int vertexCount = (int)input.ReadUInt32(); int dataSize = vertexCount * declaration.VertexStride; byte[] data = input.BufferPool.Get(dataSize); input.Read(data, 0, dataSize); VertexBuffer buffer = existingInstance ?? new VertexBuffer(input.GetGraphicsDevice(), declaration, vertexCount, BufferUsage.None); buffer.SetData(data, 0, dataSize); input.BufferPool.Return(data); return buffer; } } } ================================================ FILE: src/Xna.Framework.Graphics/Content/VertexDeclarationReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { internal class VertexDeclarationReader : ContentTypeReader { protected override VertexDeclaration Read(ContentReader input, VertexDeclaration existingInstance) { int vertexStride = input.ReadInt32(); int elementCount = input.ReadInt32(); VertexElement[] elements = new VertexElement[elementCount]; for (int i = 0; i < elementCount; i++) { int offset = input.ReadInt32(); VertexElementFormat elementFormat = (VertexElementFormat)input.ReadInt32(); VertexElementUsage elementUsage = (VertexElementUsage)input.ReadInt32(); int usageIndex = input.ReadInt32(); elements[i] = new VertexElement(offset, elementFormat, elementUsage, usageIndex); } VertexDeclaration vertexDeclaration = VertexDeclaration.GetOrCreate(vertexStride, elements); return vertexDeclaration; } } } ================================================ FILE: src/Xna.Framework.Graphics/DisplayOrientation.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// Defines the orientation of the display. /// [Flags] public enum DisplayOrientation { /// /// The default orientation. /// Default = 0, /// /// The display is rotated counterclockwise into a landscape orientation. Width is greater than height. /// LandscapeLeft = 1, /// /// The display is rotated clockwise into a landscape orientation. Width is greater than height. /// LandscapeRight = 2, /// /// The display is rotated as portrait, where height is greater than width. /// Portrait = 4, /// /// The display is rotated as inverted portrait, where height is greater than width. /// PortraitDown = 8, /// /// Unknown display orientation. /// Unknown = 16 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ClearOptions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines the buffers for clearing when calling operation. /// [Flags] public enum ClearOptions { /// /// Color buffer. /// Target = 1, /// /// Depth buffer. /// DepthBuffer = 2, /// /// Stencil buffer. /// Stencil = 4 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ColorWriteChannels.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines the color channels for render target blending operations. /// [Flags] public enum ColorWriteChannels { /// /// No channels selected. /// None = 0, /// /// Red channel selected. /// Red = 1, /// /// Green channel selected. /// Green = 2, /// /// Blue channel selected. /// Blue = 4, /// /// Alpha channel selected. /// Alpha = 8, /// /// All channels selected. /// All = 15 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/CubeMapFace.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines the faces in a cube map for the class. /// public enum CubeMapFace { /// /// Positive X face in the cube map. /// PositiveX, /// /// Negative X face in the cube map. /// NegativeX, /// /// Positive Y face in the cube map. /// PositiveY, /// /// Negative Y face in the cube map. /// NegativeY, /// /// Positive Z face in the cube map. /// PositiveZ, /// /// Negative Z face in the cube map. /// NegativeZ } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/DeviceLostException.cs ================================================ using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Graphics { [DataContract] public sealed class DeviceLostException : Exception { public DeviceLostException() : base() { } public DeviceLostException(string message) : base(message) { } public DeviceLostException(string message, Exception inner) : base(message, inner) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/DeviceNotResetException.cs ================================================ using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Graphics { [DataContract] public sealed class DeviceNotResetException : Exception { public DeviceNotResetException() : base() { } public DeviceNotResetException(string message) : base(message) { } public DeviceNotResetException(string message, Exception inner) : base(message, inner) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/DirectionalLight.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { public sealed class DirectionalLight { EffectParameter _directionParameter; EffectParameter _diffuseColorParameter; EffectParameter _specularColorParameter; bool _enabled; Vector3 _direction; Vector3 _diffuseColor; Vector3 _specularColor; internal event EventHandler EnabledChanged; public DirectionalLight(EffectParameter directionParameter, EffectParameter diffuseColorParameter, EffectParameter specularColorParameter, DirectionalLight cloneSource) { this._directionParameter = directionParameter; this._diffuseColorParameter = diffuseColorParameter; this._specularColorParameter = specularColorParameter; if (cloneSource != null) {; this._enabled = cloneSource._enabled; this._direction = cloneSource._direction; this._diffuseColor = cloneSource._diffuseColor; this._specularColor = cloneSource._specularColor; } else { this._directionParameter = directionParameter; this._diffuseColorParameter = diffuseColorParameter; this._specularColorParameter = specularColorParameter; } } public bool Enabled { get { return _enabled; } set { if (this._enabled != value) { this._enabled = value; if (this._diffuseColorParameter != null) this._diffuseColorParameter.SetValue(this._enabled ? this._diffuseColor : Vector3.Zero); if (this._specularColorParameter != null) this._specularColorParameter.SetValue(this._enabled ? this._specularColor : Vector3.Zero); OnEnabledChanged(EventArgs.Empty); } } } public Vector3 Direction { get { return _direction; } set { _direction = value; if (this._directionParameter != null) _directionParameter.SetValue(_direction); } } public Vector3 DiffuseColor { get { return _diffuseColor; } set { _diffuseColor = value; if (this._diffuseColorParameter != null && this._enabled) _diffuseColorParameter.SetValue(_diffuseColor); } } public Vector3 SpecularColor { get { return _specularColor; } set { _specularColor = value; if (this._specularColorParameter != null && this._enabled) _specularColorParameter.SetValue(_specularColor); } } private void OnEnabledChanged(EventArgs args) { var handler = EnabledChanged; if (handler != null) handler(this, args); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/DisplayMode.cs ================================================ #region License /* MIT License Copyright © 2006 The Mono.Xna Team All rights reserved. Authors: * Rob Loach Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #endregion License using System; using System.Globalization; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Graphics { [DataContract] public class DisplayMode { #region Fields private int _width; private int _height; private SurfaceFormat _format; #endregion Fields #region Properties public int Width { get { return _width; } } public int Height { get { return _height; } } public SurfaceFormat Format { get { return _format; } } public float AspectRatio { get { return (float)_width / (float)_height; } } public Rectangle TitleSafeArea { get { return GraphicsDevice.GetTitleSafeArea(0, 0, _width, _height); } } #endregion Properties #region Constructors internal DisplayMode(int width, int height, SurfaceFormat format) { this._width = width; this._height = height; this._format = format; } #endregion Constructors #region Operators public static bool operator !=(DisplayMode left, DisplayMode right) { return !(left == right); } public static bool operator ==(DisplayMode left, DisplayMode right) { if (ReferenceEquals(left, right)) //Same object or both are null { return true; } if (ReferenceEquals(left, null) || ReferenceEquals(right, null)) { return false; } return (left._width == right._width ) && (left._height == right._height) && (left._format == right._format); } #endregion Operators #region Public Methods public override bool Equals(object obj) { return obj is DisplayMode && this == (DisplayMode)obj; } public override int GetHashCode() { return (this._width.GetHashCode() ^ this._height.GetHashCode() ^ this._format.GetHashCode()); } public override string ToString() { return String.Format("{Width:{0}, Height:{1}, Format:{2}, AspectRatio:{3}}", _width, _height, _format, AspectRatio); } #endregion Public Methods } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/DisplayModeCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { public class DisplayModeCollection : IEnumerable { private readonly List _modes; public IEnumerable this[SurfaceFormat format] { get { var list = new List(); foreach (DisplayMode mode in _modes) { if (mode.Format == format) list.Add(mode); } return list; } } public IEnumerator GetEnumerator() { return _modes.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return _modes.GetEnumerator(); } internal DisplayModeCollection(List modes) { // Sort the modes in a consistent way that happens // to match XNA behavior on some graphics devices. modes.Sort(delegate(DisplayMode a, DisplayMode b) { if (a == b) return 0; if (a.Format <= b.Format && a.Width <= b.Width && a.Height <= b.Height) return -1; return 1; }); _modes = modes; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/AlphaTestEffect.cs ================================================ #region File Description //----------------------------------------------------------------------------- // AlphaTestEffect.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Built-in effect that supports alpha testing. /// public class AlphaTestEffect : Effect, IEffectMatrices, IEffectFog { #region Effect Parameters EffectParameter textureParam; EffectParameter diffuseColorParam; EffectParameter alphaTestParam; EffectParameter fogColorParam; EffectParameter fogVectorParam; EffectParameter worldViewProjParam; #endregion #region Fields bool fogEnabled; bool vertexColorEnabled; Matrix world = Matrix.Identity; Matrix view = Matrix.Identity; Matrix projection = Matrix.Identity; Matrix worldView; Vector3 diffuseColor = Vector3.One; float alpha = 1; float fogStart = 0; float fogEnd = 1; CompareFunction alphaFunction = CompareFunction.Greater; int referenceAlpha; EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All; #endregion #region Public Properties /// /// Gets or sets the world matrix. /// public Matrix World { get { return world; } set { world = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the view matrix. /// public Matrix View { get { return view; } set { view = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the projection matrix. /// public Matrix Projection { get { return projection; } set { projection = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj; } } /// /// Gets or sets the material diffuse color (range 0 to 1). /// public Vector3 DiffuseColor { get { return diffuseColor; } set { diffuseColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material alpha. /// public float Alpha { get { return alpha; } set { alpha = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the fog enable flag. /// public bool FogEnabled { get { return fogEnabled; } set { if (fogEnabled != value) { fogEnabled = value; dirtyFlags |= EffectDirtyFlags.FogEnable; UpdateCurrentTechnique(); } } } /// /// Gets or sets the fog start distance. /// public float FogStart { get { return fogStart; } set { fogStart = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog end distance. /// public float FogEnd { get { return fogEnd; } set { fogEnd = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog color. /// public Vector3 FogColor { get { return fogColorParam.GetValueVector3(); } set { fogColorParam.SetValue(value); } } /// /// Gets or sets the current texture. /// public Texture2D Texture { get { return textureParam.GetValueTexture2D(); } set { textureParam.SetValue(value); } } /// /// Gets or sets whether vertex color is enabled. /// public bool VertexColorEnabled { get { return vertexColorEnabled; } set { if (vertexColorEnabled != value) { vertexColorEnabled = value; UpdateCurrentTechnique(); } } } /// /// Gets or sets the alpha compare function (default Greater). /// public CompareFunction AlphaFunction { get { return alphaFunction; } set { if (alphaFunction != value) { alphaFunction = value; dirtyFlags |= EffectDirtyFlags.AlphaTest; UpdateCurrentTechnique(); } } } /// /// Gets or sets the reference alpha value (default 0). /// public int ReferenceAlpha { get { return referenceAlpha; } set { referenceAlpha = value; dirtyFlags |= EffectDirtyFlags.AlphaTest; } } #endregion #region Methods /// /// Creates a new AlphaTestEffect with default parameter settings. /// public AlphaTestEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameAlphaTestEffect)) { CacheEffectParameters(); } /// /// Creates a new AlphaTestEffect by cloning parameter settings from an existing instance. /// protected AlphaTestEffect(AlphaTestEffect cloneSource) : base(cloneSource) { CacheEffectParameters(); fogEnabled = cloneSource.fogEnabled; vertexColorEnabled = cloneSource.vertexColorEnabled; world = cloneSource.world; view = cloneSource.view; projection = cloneSource.projection; diffuseColor = cloneSource.diffuseColor; alpha = cloneSource.alpha; fogStart = cloneSource.fogStart; fogEnd = cloneSource.fogEnd; alphaFunction = cloneSource.alphaFunction; referenceAlpha = cloneSource.referenceAlpha; } /// /// Creates a clone of the current AlphaTestEffect instance. /// public override Effect Clone() { return new AlphaTestEffect(this); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters() { textureParam = Parameters["Texture"]; diffuseColorParam = Parameters["DiffuseColor"]; alphaTestParam = Parameters["AlphaTest"]; fogColorParam = Parameters["FogColor"]; fogVectorParam = Parameters["FogVector"]; worldViewProjParam = Parameters["WorldViewProj"]; } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { // Recompute the world+view+projection matrix or fog vector? dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam); // Recompute the diffuse/alpha material color parameter? if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0) { diffuseColorParam.SetValue(new Vector4(diffuseColor * alpha, alpha)); dirtyFlags &= ~EffectDirtyFlags.MaterialColor; } // Recompute the alpha test settings? if ((dirtyFlags & EffectDirtyFlags.AlphaTest) != 0) { Vector4 alphaTest = new Vector4(); // Convert reference alpha from 8 bit integer to 0-1 float format. float reference = (float)referenceAlpha / 255f; // Comparison tolerance of half the 8 bit integer precision. const float threshold = 0.5f / 255f; switch (alphaFunction) { case CompareFunction.Less: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.X = reference - threshold; alphaTest.Z = 1; alphaTest.W = -1; break; case CompareFunction.LessEqual: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.X = reference + threshold; alphaTest.Z = 1; alphaTest.W = -1; break; case CompareFunction.GreaterEqual: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.X = reference - threshold; alphaTest.Z = -1; alphaTest.W = 1; break; case CompareFunction.Greater: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.X = reference + threshold; alphaTest.Z = -1; alphaTest.W = 1; break; case CompareFunction.Equal: // Shader will evaluate: clip((abs(a - x) < Y) ? z : w) alphaTest.X = reference; alphaTest.Y = threshold; alphaTest.Z = 1; alphaTest.W = -1; break; case CompareFunction.NotEqual: // Shader will evaluate: clip((abs(a - x) < Y) ? z : w) alphaTest.X = reference; alphaTest.Y = threshold; alphaTest.Z = -1; alphaTest.W = 1; break; case CompareFunction.Never: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.Z = -1; alphaTest.W = -1; break; case CompareFunction.Always: default: // Shader will evaluate: clip((a < x) ? z : w) alphaTest.Z = 1; alphaTest.W = 1; break; } alphaTestParam.SetValue(alphaTest); dirtyFlags &= ~EffectDirtyFlags.AlphaTest; } } private void UpdateCurrentTechnique() { int shaderIndex = 0; if (fogEnabled) shaderIndex += 1; if (vertexColorEnabled) shaderIndex += 2; if (alphaFunction == CompareFunction.Equal || alphaFunction == CompareFunction.NotEqual) shaderIndex += 4; CurrentTechnique = Techniques[shaderIndex]; } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/BasicEffect.cs ================================================ #region File Description //----------------------------------------------------------------------------- // BasicEffect.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Built-in effect that supports optional texturing, vertex coloring, fog, and lighting. /// public class BasicEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog { #region Effect Parameters EffectParameter textureParam; EffectParameter diffuseColorParam; EffectParameter emissiveColorParam; EffectParameter specularColorParam; EffectParameter specularPowerParam; EffectParameter eyePositionParam; EffectParameter fogColorParam; EffectParameter fogVectorParam; EffectParameter worldParam; EffectParameter worldInverseTransposeParam; EffectParameter worldViewProjParam; #endregion #region Fields bool lightingEnabled; bool preferPerPixelLighting; bool _oneLight; bool fogEnabled; bool textureEnabled; bool vertexColorEnabled; Matrix world = Matrix.Identity; Matrix view = Matrix.Identity; Matrix projection = Matrix.Identity; Matrix worldView; Vector3 diffuseColor = Vector3.One; Vector3 emissiveColor = Vector3.Zero; Vector3 ambientLightColor = Vector3.Zero; float alpha = 1; DirectionalLight light0; DirectionalLight light1; DirectionalLight light2; float fogStart = 0; float fogEnd = 1; EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All; #endregion #region Public Properties /// /// Gets or sets the world matrix. /// public Matrix World { get { return world; } set { world = value; dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the view matrix. /// public Matrix View { get { return view; } set { view = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog; } } /// /// Gets or sets the projection matrix. /// public Matrix Projection { get { return projection; } set { projection = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj; } } /// /// Gets or sets the material diffuse color (range 0 to 1). /// public Vector3 DiffuseColor { get { return diffuseColor; } set { diffuseColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material emissive color (range 0 to 1). /// public Vector3 EmissiveColor { get { return emissiveColor; } set { emissiveColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material specular color (range 0 to 1). /// public Vector3 SpecularColor { get { return specularColorParam.GetValueVector3(); } set { specularColorParam.SetValue(value); } } /// /// Gets or sets the material specular power. /// public float SpecularPower { get { return specularPowerParam.GetValueSingle(); } set { specularPowerParam.SetValue(value); } } /// /// Gets or sets the material alpha. /// public float Alpha { get { return alpha; } set { alpha = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// public bool LightingEnabled { get { return lightingEnabled; } set { if (lightingEnabled != value) { lightingEnabled = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; UpdateCurrentTechnique(); } } } /// /// Gets or sets the per-pixel lighting prefer flag. /// public bool PreferPerPixelLighting { get { return preferPerPixelLighting; } set { if (preferPerPixelLighting != value) { preferPerPixelLighting = value; UpdateCurrentTechnique(); } } } /// public Vector3 AmbientLightColor { get { return ambientLightColor; } set { ambientLightColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// public DirectionalLight DirectionalLight0 { get { return light0; } } /// public DirectionalLight DirectionalLight1 { get { return light1; } } /// public DirectionalLight DirectionalLight2 { get { return light2; } } /// public bool FogEnabled { get { return fogEnabled; } set { if (fogEnabled != value) { fogEnabled = value; dirtyFlags |= EffectDirtyFlags.FogEnable; UpdateCurrentTechnique(); } } } /// public float FogStart { get { return fogStart; } set { fogStart = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// public float FogEnd { get { return fogEnd; } set { fogEnd = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// public Vector3 FogColor { get { return fogColorParam.GetValueVector3(); } set { fogColorParam.SetValue(value); } } /// /// Gets or sets whether texturing is enabled. /// public bool TextureEnabled { get { return textureEnabled; } set { if (textureEnabled != value) { textureEnabled = value; UpdateCurrentTechnique(); } } } /// /// Gets or sets the current texture. /// public Texture2D Texture { get { return textureParam.GetValueTexture2D(); } set { textureParam.SetValue(value); } } /// /// Gets or sets whether vertex color is enabled. /// public bool VertexColorEnabled { get { return vertexColorEnabled; } set { if (vertexColorEnabled != value) { vertexColorEnabled = value; UpdateCurrentTechnique(); } } } #endregion #region Methods /// /// Creates a new BasicEffect with default parameter settings. /// public BasicEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameBasicEffect)) { CacheEffectParameters(null); DirectionalLight0.Enabled = true; SpecularColor = Vector3.One; SpecularPower = 16; } /// /// Creates a new BasicEffect by cloning parameter settings from an existing instance. /// protected BasicEffect(BasicEffect cloneSource) : base(cloneSource) { CacheEffectParameters(cloneSource); lightingEnabled = cloneSource.lightingEnabled; preferPerPixelLighting = cloneSource.preferPerPixelLighting; fogEnabled = cloneSource.fogEnabled; textureEnabled = cloneSource.textureEnabled; vertexColorEnabled = cloneSource.vertexColorEnabled; world = cloneSource.world; view = cloneSource.view; projection = cloneSource.projection; diffuseColor = cloneSource.diffuseColor; emissiveColor = cloneSource.emissiveColor; ambientLightColor = cloneSource.ambientLightColor; alpha = cloneSource.alpha; fogStart = cloneSource.fogStart; fogEnd = cloneSource.fogEnd; } /// /// Creates a clone of the current BasicEffect instance. /// public override Effect Clone() { return new BasicEffect(this); } /// public void EnableDefaultLighting() { LightingEnabled = true; AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters(BasicEffect cloneSource) { textureParam = Parameters["Texture"]; diffuseColorParam = Parameters["DiffuseColor"]; emissiveColorParam = Parameters["EmissiveColor"]; specularColorParam = Parameters["SpecularColor"]; specularPowerParam = Parameters["SpecularPower"]; eyePositionParam = Parameters["EyePosition"]; fogColorParam = Parameters["FogColor"]; fogVectorParam = Parameters["FogVector"]; worldParam = Parameters["World"]; worldInverseTransposeParam = Parameters["WorldInverseTranspose"]; worldViewProjParam = Parameters["WorldViewProj"]; light0 = new DirectionalLight(Parameters["DirLight0Direction"], Parameters["DirLight0DiffuseColor"], Parameters["DirLight0SpecularColor"], (cloneSource != null) ? cloneSource.light0 : null); light1 = new DirectionalLight(Parameters["DirLight1Direction"], Parameters["DirLight1DiffuseColor"], Parameters["DirLight1SpecularColor"], (cloneSource != null) ? cloneSource.light1 : null); light2 = new DirectionalLight(Parameters["DirLight2Direction"], Parameters["DirLight2DiffuseColor"], Parameters["DirLight2SpecularColor"], (cloneSource != null) ? cloneSource.light2 : null); light1.EnabledChanged += Light_EnabledChanged; light2.EnabledChanged += Light_EnabledChanged; } private void Light_EnabledChanged(object sender, EventArgs e) { _oneLight = !light1.Enabled && !light2.Enabled; UpdateCurrentTechnique(); } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { // Recompute the world+view+projection matrix or fog vector? dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam); // Recompute the diffuse/emissive/alpha material color parameters? if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0) { EffectHelpers.SetMaterialColor(lightingEnabled, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam); dirtyFlags &= ~EffectDirtyFlags.MaterialColor; } if (lightingEnabled) { // Recompute the world inverse transpose and eye position? dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam); } } private void UpdateCurrentTechnique() { int shaderIndex = 0; if (fogEnabled) shaderIndex += 1; if (vertexColorEnabled) shaderIndex += 2; if (textureEnabled) shaderIndex += 4; if (lightingEnabled) { if (preferPerPixelLighting) shaderIndex += 24; else if (_oneLight) // oneLight shaderIndex += 16; else // three lights shaderIndex += 8; } CurrentTechnique = Techniques[shaderIndex]; } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/DualTextureEffect.cs ================================================ #region File Description //----------------------------------------------------------------------------- // DualTextureEffect.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Built-in effect that supports two-layer multitexturing. /// public class DualTextureEffect : Effect, IEffectMatrices, IEffectFog { #region Effect Parameters EffectParameter textureParam; EffectParameter texture2Param; EffectParameter diffuseColorParam; EffectParameter fogColorParam; EffectParameter fogVectorParam; EffectParameter worldViewProjParam; #endregion #region Fields bool fogEnabled; bool vertexColorEnabled; Matrix world = Matrix.Identity; Matrix view = Matrix.Identity; Matrix projection = Matrix.Identity; Matrix worldView; Vector3 diffuseColor = Vector3.One; float alpha = 1; float fogStart = 0; float fogEnd = 1; EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All; #endregion #region Public Properties /// /// Gets or sets the world matrix. /// public Matrix World { get { return world; } set { world = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the view matrix. /// public Matrix View { get { return view; } set { view = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the projection matrix. /// public Matrix Projection { get { return projection; } set { projection = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj; } } /// /// Gets or sets the material diffuse color (range 0 to 1). /// public Vector3 DiffuseColor { get { return diffuseColor; } set { diffuseColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material alpha. /// public float Alpha { get { return alpha; } set { alpha = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the fog enable flag. /// public bool FogEnabled { get { return fogEnabled; } set { if (fogEnabled != value) { fogEnabled = value; dirtyFlags |= EffectDirtyFlags.FogEnable; UpdateCurrentTechnique(); } } } /// /// Gets or sets the fog start distance. /// public float FogStart { get { return fogStart; } set { fogStart = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog end distance. /// public float FogEnd { get { return fogEnd; } set { fogEnd = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog color. /// public Vector3 FogColor { get { return fogColorParam.GetValueVector3(); } set { fogColorParam.SetValue(value); } } /// /// Gets or sets the current base texture. /// public Texture2D Texture { get { return textureParam.GetValueTexture2D(); } set { textureParam.SetValue(value); } } /// /// Gets or sets the current overlay texture. /// public Texture2D Texture2 { get { return texture2Param.GetValueTexture2D(); } set { texture2Param.SetValue(value); } } /// /// Gets or sets whether vertex color is enabled. /// public bool VertexColorEnabled { get { return vertexColorEnabled; } set { if (vertexColorEnabled != value) { vertexColorEnabled = value; UpdateCurrentTechnique(); } } } #endregion #region Methods /// /// Creates a new DualTextureEffect with default parameter settings. /// public DualTextureEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameDualTextureEffect)) { CacheEffectParameters(); } /// /// Creates a new DualTextureEffect by cloning parameter settings from an existing instance. /// protected DualTextureEffect(DualTextureEffect cloneSource) : base(cloneSource) { CacheEffectParameters(); fogEnabled = cloneSource.fogEnabled; vertexColorEnabled = cloneSource.vertexColorEnabled; world = cloneSource.world; view = cloneSource.view; projection = cloneSource.projection; diffuseColor = cloneSource.diffuseColor; alpha = cloneSource.alpha; fogStart = cloneSource.fogStart; fogEnd = cloneSource.fogEnd; } /// /// Creates a clone of the current DualTextureEffect instance. /// public override Effect Clone() { return new DualTextureEffect(this); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters() { textureParam = Parameters["Texture"]; texture2Param = Parameters["Texture2"]; diffuseColorParam = Parameters["DiffuseColor"]; fogColorParam = Parameters["FogColor"]; fogVectorParam = Parameters["FogVector"]; worldViewProjParam = Parameters["WorldViewProj"]; } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { // Recompute the world+view+projection matrix or fog vector? dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam); // Recompute the diffuse/alpha material color parameter? if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0) { diffuseColorParam.SetValue(new Vector4(diffuseColor * alpha, alpha)); dirtyFlags &= ~EffectDirtyFlags.MaterialColor; } } private void UpdateCurrentTechnique() { int shaderIndex = 0; if (fogEnabled) shaderIndex += 1; if (vertexColorEnabled) shaderIndex += 2; CurrentTechnique = Techniques[shaderIndex]; } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/Effect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public partial class Effect : GraphicsResource { public EffectParameterCollection Parameters { get; private set; } public EffectTechniqueCollection Techniques { get; private set; } public EffectTechnique CurrentTechnique { get; set; } internal ConstantBuffer[] ConstantBuffers { get; private set; } private Shader[] _shaders; private readonly bool _isClone; internal Effect(GraphicsDevice graphicsDevice) : base(graphicsDevice) { } protected Effect(Effect cloneSource) : this(cloneSource.GraphicsDevice) { _isClone = true; Clone(cloneSource); } public Effect(GraphicsDevice graphicsDevice, byte[] effectCode) : this(graphicsDevice, effectCode, 0, effectCode.Length) { } public Effect (GraphicsDevice graphicsDevice, byte[] effectCode, int index, int count) : this(graphicsDevice) { // By default we currently cache all unique byte streams // and use cloning to populate the effect with parameters, // techniques, and passes. // // This means all the immutable types in an effect: // // - Shaders // - Annotations // - Names // - State Objects // // Are shared for every instance of an effect while the // parameter values and constant buffers are copied. // // This might need to change slightly if/when we support // shared constant buffers as 'new' should return unique // effects without any shared instance state. //Read the KNI fx header KNIFXHeader fxHeader = new KNIFXHeader(effectCode, index); if (fxHeader.Signature == KNIFXHeader.KNIFXSignature) { switch (fxHeader.Version) { case 11: { int headerOffset = fxHeader.HeaderSize; int fxCount = BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2; for (int fxIdx = 0; fxIdx < fxCount; fxIdx++) { GraphicsBackend shaderBackend = (GraphicsBackend)BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2; int effectKey = BitConverter.ToInt32(effectCode, index + headerOffset); headerOffset += 4; int fxOffset = BitConverter.ToInt32(effectCode, index + headerOffset); headerOffset += 4; if (!((IPlatformGraphicsAdapter)graphicsDevice.Adapter).Strategy.Platform_IsShaderBackendSupported(shaderBackend)) continue; Effect effect; lock (((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache) { if (!((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.TryGetValue(effectKey, out effect)) { int effectLength = BitConverter.ToInt32(effectCode, index + fxOffset); fxOffset += 4; using (Stream stream = new MemoryStream(effectCode, index + fxOffset, effectLength, false)) using (KNIFXReader11 reader = new KNIFXReader11(stream, graphicsDevice)) effect = reader.ReadEffect(); ((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.Add(effectKey, effect); } } // Clone it. _isClone = true; Clone(effect); return; } headerOffset = fxHeader.HeaderSize; String[] shaderProfiles = new string[fxCount]; for (int fxIdx = 0; fxIdx < fxCount; fxIdx++) { ShaderProfileType shaderProfile = (ShaderProfileType)BitConverter.ToInt16(effectCode, index + headerOffset); headerOffset += 2; headerOffset += 8; shaderProfiles[fxIdx] = shaderProfile.ToString(); } throw new Exception("Effect profile '" + String.Join(",", shaderProfiles) + "' is not compatible with the graphics backend '" + graphicsDevice.Adapter.Backend + "'."); } default: if (fxHeader.Version > KNIFXHeader.CurrentKNIFXVersion) throw new Exception("This effect seems to be for a newer version of KNI."); if (fxHeader.Version < KNIFXHeader.CurrentKNIFXVersion) throw new Exception("This effect is for an older version of KNI and needs to be rebuilt."); break; } } //Read the mgfx header MGFXHeader mgfxheader = new MGFXHeader(effectCode, index); if (mgfxheader.Signature == MGFXHeader.MGFXSignature) { switch (mgfxheader.Version) { case 10: { ShaderProfileType shaderProfile = mgfxheader.Profile; int headerOffset = mgfxheader.HeaderSize; int fxOffset = headerOffset; if (!((IPlatformGraphicsAdapter)graphicsDevice.Adapter).Strategy.Platform_IsShaderProfileSupported(shaderProfile)) throw new Exception("Effect profile '" + shaderProfile + "' is not compatible with the graphics backend '" + graphicsDevice.Adapter.Backend + "'."); Effect effect; lock (((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache) { if (!((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.TryGetValue(mgfxheader.EffectKey, out effect)) { int length = count - fxOffset; using (Stream stream = new MemoryStream(effectCode, index + fxOffset, length, false)) using (MGFXReader10 reader = new MGFXReader10(stream, graphicsDevice, shaderProfile)) effect = reader.ReadEffect(); ((IPlatformGraphicsDevice)graphicsDevice).Strategy.EffectCache.Add(mgfxheader.EffectKey, effect); } } // Clone it. _isClone = true; Clone(effect); return; } default: if (mgfxheader.Version > MGFXHeader.MGFXVersion) throw new Exception("This effect seems to be for a newer version of KNI."); if (mgfxheader.Version < MGFXHeader.MGFXVersion) throw new Exception("This effect is for an older version of KNI and needs to be rebuilt."); break; } } throw new Exception("This does not appear to be an FX effect file."); } /// /// Clone the source into this existing object. /// /// /// Note this is not overloaded in derived classes on purpose. This is /// only a reason this exists is for caching effects. /// /// The source effect to clone from. private void Clone(Effect cloneSource) { Debug.Assert(_isClone, "Cannot clone into non-cloned effect!"); // Copy the mutable members of the effect. Parameters = cloneSource.Parameters.Clone(); Techniques = cloneSource.Techniques.Clone(this); // Make a copy of the immutable constant buffers. ConstantBuffers = new ConstantBuffer[cloneSource.ConstantBuffers.Length]; for (int i = 0; i < cloneSource.ConstantBuffers.Length; i++) ConstantBuffers[i] = new ConstantBuffer(cloneSource.ConstantBuffers[i]); // Find and set the current technique. for (int i = 0; i < cloneSource.Techniques.Count; i++) { if (cloneSource.Techniques[i] == cloneSource.CurrentTechnique) { CurrentTechnique = Techniques[i]; break; } } // Take a reference to the original shader list. _shaders = cloneSource._shaders; } /// /// Returns a deep copy of the effect where immutable types /// are shared and mutable data is duplicated. /// /// /// See "Cloning an Effect" in MSDN: /// http://msdn.microsoft.com/en-us/library/windows/desktop/ff476138(v=vs.85).aspx /// /// The cloned effect. public virtual Effect Clone() { return new Effect(this); } protected internal virtual void OnApply() { } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { if (!_isClone) { // Only the original source can dispose the shaders. if (_shaders != null) { foreach (Shader shader in _shaders) shader.Dispose(); } } if (ConstantBuffers != null) { foreach (ConstantBuffer buffer in ConstantBuffers) buffer.Dispose(); ConstantBuffers = null; } } base.Dispose(disposing); } internal protected override void GraphicsContextLost() { for (int i = 0; i < ConstantBuffers.Length; i++) ((IPlatformConstantBuffer)ConstantBuffers[i]).Strategy.PlatformContextLost(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectAnnotation.cs ================================================ using System; namespace Microsoft.Xna.Framework.Graphics { // TODO: This class needs to be finished! public class EffectAnnotation { internal EffectAnnotation( EffectParameterClass class_, EffectParameterType type, string name, int rowCount, int columnCount, string semantic, object data) { ParameterClass = class_; ParameterType = type; Name = name; RowCount = rowCount; ColumnCount = columnCount; Semantic = semantic; } internal EffectAnnotation(EffectParameter parameter) { ParameterClass = parameter.ParameterClass; ParameterType = parameter.ParameterType; Name = parameter.Name; RowCount = parameter.RowCount; ColumnCount = parameter.ColumnCount; Semantic = parameter.Semantic; } public EffectParameterClass ParameterClass {get; private set;} public EffectParameterType ParameterType {get; private set;} public string Name {get; private set;} public int RowCount {get; private set;} public int ColumnCount {get; private set;} public string Semantic {get; private set;} } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectAnnotationCollection.cs ================================================ using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { public class EffectAnnotationCollection : IEnumerable { internal static readonly EffectAnnotationCollection Empty = new EffectAnnotationCollection(new EffectAnnotation[0]); private readonly EffectAnnotation[] _annotations; internal EffectAnnotationCollection(EffectAnnotation[] annotations) { _annotations = annotations; } public int Count { get { return _annotations.Length; } } public EffectAnnotation this[int index] { get { return _annotations[index]; } } public EffectAnnotation this[string name] { get { foreach (EffectAnnotation annotation in _annotations) { if (annotation.Name == name) return annotation; } return null; } } public IEnumerator GetEnumerator() { return ((IEnumerable)_annotations).GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _annotations.GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectHelpers.cs ================================================ //#region File Description //----------------------------------------------------------------------------- // EffectHelpers.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- //#endregion //#region Using Statements using System; //#endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Track which effect parameters need to be recomputed during the next OnApply. /// [Flags] internal enum EffectDirtyFlags { WorldViewProj = 1, World = 2, EyePosition = 4, MaterialColor = 8, Fog = 16, FogEnable = 32, AlphaTest = 64, All = -1 } /// /// Helper code shared between the various built-in effects. /// internal static class EffectHelpers { /// /// Sets up the standard key/fill/back lighting rig. /// internal static Vector3 EnableDefaultLighting(DirectionalLight light0, DirectionalLight light1, DirectionalLight light2) { // Key light. light0.Direction = new Vector3(-0.5265408f, -0.5735765f, -0.6275069f); light0.DiffuseColor = new Vector3(1, 0.9607844f, 0.8078432f); light0.SpecularColor = new Vector3(1, 0.9607844f, 0.8078432f); light0.Enabled = true; // Fill light. light1.Direction = new Vector3(0.7198464f, 0.3420201f, 0.6040227f); light1.DiffuseColor = new Vector3(0.9647059f, 0.7607844f, 0.4078432f); light1.SpecularColor = Vector3.Zero; light1.Enabled = true; // Back light. light2.Direction = new Vector3(0.4545195f, -0.7660444f, 0.4545195f); light2.DiffuseColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f); light2.SpecularColor = new Vector3(0.3231373f, 0.3607844f, 0.3937255f); light2.Enabled = true; // Ambient light. return new Vector3(0.05333332f, 0.09882354f, 0.1819608f); } /// /// Lazily recomputes the world+view+projection matrix and /// fog vector based on the current effect parameter settings. /// internal static EffectDirtyFlags SetWorldViewProjAndFog(EffectDirtyFlags dirtyFlags, ref Matrix world, ref Matrix view, ref Matrix projection, ref Matrix worldView, bool fogEnabled, float fogStart, float fogEnd, EffectParameter worldViewProjParam, EffectParameter fogVectorParam) { // Recompute the world+view+projection matrix? if ((dirtyFlags & EffectDirtyFlags.WorldViewProj) != 0) { Matrix worldViewProj; Matrix.Multiply(ref world, ref view, out worldView); Matrix.Multiply(ref worldView, ref projection, out worldViewProj); worldViewProjParam.SetValue(worldViewProj); dirtyFlags &= ~EffectDirtyFlags.WorldViewProj; } if (fogEnabled) { // Recompute the fog vector? if ((dirtyFlags & (EffectDirtyFlags.Fog | EffectDirtyFlags.FogEnable)) != 0) { SetFogVector(ref worldView, fogStart, fogEnd, fogVectorParam); dirtyFlags &= ~(EffectDirtyFlags.Fog | EffectDirtyFlags.FogEnable); } } else { // When fog is disabled, make sure the fog vector is reset to zero. if ((dirtyFlags & EffectDirtyFlags.FogEnable) != 0) { fogVectorParam.SetValue(Vector4.Zero); dirtyFlags &= ~EffectDirtyFlags.FogEnable; } } return dirtyFlags; } /// /// Sets a vector which can be dotted with the object space vertex position to compute fog amount. /// static void SetFogVector(ref Matrix worldView, float fogStart, float fogEnd, EffectParameter fogVectorParam) { if (fogStart == fogEnd) { // Degenerate case: force everything to 100% fogged if start and end are the same. fogVectorParam.SetValue(new Vector4(0, 0, 0, 1)); } else { // We want to transform vertex positions into view space, take the resulting // Z value, then scale and offset according to the fog start/end distances. // Because we only care about the Z component, the shader can do all this // with a single dot product, using only the Z row of the world+view matrix. float scale = 1f / (fogStart - fogEnd); Vector4 fogVector = new Vector4(); fogVector.X = worldView.M13 * scale; fogVector.Y = worldView.M23 * scale; fogVector.Z = worldView.M33 * scale; fogVector.W = (worldView.M43 + fogStart) * scale; fogVectorParam.SetValue(fogVector); } } /// /// Lazily recomputes the world inverse transpose matrix and /// eye position based on the current effect parameter settings. /// internal static EffectDirtyFlags SetLightingMatrices(EffectDirtyFlags dirtyFlags, ref Matrix world, ref Matrix view, EffectParameter worldParam, EffectParameter worldInverseTransposeParam, EffectParameter eyePositionParam) { // Set the world and world inverse transpose matrices. if ((dirtyFlags & EffectDirtyFlags.World) != 0) { Matrix worldTranspose; Matrix worldInverseTranspose; Matrix.Invert(ref world, out worldTranspose); Matrix.Transpose(ref worldTranspose, out worldInverseTranspose); worldParam.SetValue(world); worldInverseTransposeParam.SetValue(worldInverseTranspose); dirtyFlags &= ~EffectDirtyFlags.World; } // Set the eye position. if ((dirtyFlags & EffectDirtyFlags.EyePosition) != 0) { Matrix viewInverse; Matrix.Invert(ref view, out viewInverse); eyePositionParam.SetValue(viewInverse.Translation); dirtyFlags &= ~EffectDirtyFlags.EyePosition; } return dirtyFlags; } /// /// Sets the diffuse/emissive/alpha material color parameters. /// internal static void SetMaterialColor(bool lightingEnabled, float alpha, ref Vector3 diffuseColor, ref Vector3 emissiveColor, ref Vector3 ambientLightColor, EffectParameter diffuseColorParam, EffectParameter emissiveColorParam) { // Desired lighting model: // // ((AmbientLightColor + sum(diffuse directional light)) * DiffuseColor) + EmissiveColor // // When lighting is disabled, ambient and directional lights are ignored, leaving: // // DiffuseColor + EmissiveColor // // For the lighting disabled case, we can save one shader instruction by precomputing // diffuse+emissive on the CPU, after which the shader can use DiffuseColor directly, // ignoring its emissive parameter. // // When lighting is enabled, we can merge the ambient and emissive settings. If we // set our emissive parameter to emissive+(ambient*diffuse), the shader no longer // needs to bother adding the ambient contribution, simplifying its computation to: // // (sum(diffuse directional light) * DiffuseColor) + EmissiveColor // // For futher optimization goodness, we merge material alpha with the diffuse // color parameter, and premultiply all color values by this alpha. if (lightingEnabled) { Vector4 diffuse = new Vector4(); Vector3 emissive = new Vector3(); diffuse.X = diffuseColor.X * alpha; diffuse.Y = diffuseColor.Y * alpha; diffuse.Z = diffuseColor.Z * alpha; diffuse.W = alpha; emissive.X = (emissiveColor.X + ambientLightColor.X * diffuseColor.X) * alpha; emissive.Y = (emissiveColor.Y + ambientLightColor.Y * diffuseColor.Y) * alpha; emissive.Z = (emissiveColor.Z + ambientLightColor.Z * diffuseColor.Z) * alpha; diffuseColorParam.SetValue(diffuse); emissiveColorParam.SetValue(emissive); } else { Vector4 diffuse = new Vector4(); diffuse.X = (diffuseColor.X + emissiveColor.X) * alpha; diffuse.Y = (diffuseColor.Y + emissiveColor.Y) * alpha; diffuse.Z = (diffuseColor.Z + emissiveColor.Z) * alpha; diffuse.W = alpha; diffuseColorParam.SetValue(diffuse); } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectMaterial.cs ================================================ #region License /* Microsoft Public License (Ms-PL) MonoGame - Copyright © 2009 The MonoGame Team All rights reserved. This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. 1. Definitions The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution. 2. Grant of Rights (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. 3. Conditions and Limitations (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. */ #endregion License using System; namespace Microsoft.Xna.Framework.Graphics { public class EffectMaterial : Effect { public EffectMaterial (Effect cloneSource) : base(cloneSource) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectParameter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Linq; using System.Text; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { [DebuggerDisplay("{DebugDisplayString}")] public class EffectParameter { public string Name { get; private set; } public string Semantic { get; private set; } public EffectParameterClass ParameterClass { get; private set; } public EffectParameterType ParameterType { get; private set; } public int RowCount { get; private set; } public int ColumnCount { get; private set; } internal int ColumnCountActual { get; private set; } public EffectParameterCollection Elements { get; private set; } public EffectParameterCollection StructureMembers { get; private set; } public EffectAnnotationCollection Annotations { get; private set; } internal object Data { get; private set; } // Because we are compiling SM3.0 to GLSL 1.10 instead of GLSL 1.20 // MojoShader encodes integers and booleans as floats, // and we need to handle int<->float conversion manually. // TODO: Compile SM 3.0 and above with MojoShader.NativeConstants.PROFILE_GLSL120. private bool _integersAsFloats; /// /// The next state key used when an effect parameter /// is updated by any of the 'set' methods. /// internal static ulong NextStateKey { get; private set; } /// /// The current state key which is used to detect /// if the parameter value has been changed. /// internal ulong StateKey { get; private set; } internal EffectParameter(EffectParameterClass class_, EffectParameterType type, string name, int rowCount, int columnCount, int columnCountActual, string semantic, EffectAnnotationCollection annotations, EffectParameterCollection elements, EffectParameterCollection structMembers, object data, bool integersAsFloats) { ParameterClass = class_; ParameterType = type; Name = name; Semantic = semantic; Annotations = annotations; RowCount = rowCount; ColumnCount = columnCount; ColumnCountActual = columnCountActual; Elements = elements; StructureMembers = structMembers; Data = data; _integersAsFloats = integersAsFloats; StateKey = unchecked(NextStateKey++); } internal EffectParameter(EffectParameter cloneSource) { // Share all the immutable types. ParameterClass = cloneSource.ParameterClass; ParameterType = cloneSource.ParameterType; Name = cloneSource.Name; Semantic = cloneSource.Semantic; Annotations = cloneSource.Annotations; RowCount = cloneSource.RowCount; ColumnCount = cloneSource.ColumnCount; ColumnCountActual = cloneSource.ColumnCountActual; // Clone the mutable types. Elements = cloneSource.Elements.Clone(); StructureMembers = cloneSource.StructureMembers.Clone(); // The data is mutable, so we have to clone it. Array array = cloneSource.Data as Array; if (array != null) Data = array.Clone(); _integersAsFloats = cloneSource._integersAsFloats; StateKey = unchecked(NextStateKey++); } public bool GetValueBoolean() { if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Bool) { if (_integersAsFloats) return ((float[])Data)[0] != 0.0f; else return ((int[])Data)[0] != 0; } else throw new InvalidCastException(); } public void SetValue(bool value) { if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Bool) { if (_integersAsFloats) ((float[])Data)[0] = value ? 1 : 0; else ((int[])Data)[0] = value ? 1 : 0; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public bool[] GetValueBooleanArray() { throw new NotImplementedException(); } public void SetValue(bool[] value) { throw new NotImplementedException(); } public int GetValueInt32() { if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Int32) { if (_integersAsFloats) return (int)((float[])Data)[0]; else return ((int[])Data)[0]; } else throw new InvalidCastException(); } public void SetValue(int value) { if (ParameterType == EffectParameterType.Single) { ((float[])Data)[0] = value; StateKey = unchecked(NextStateKey++); return; } if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Int32) { if (_integersAsFloats) ((float[])Data)[0] = value; else ((int[])Data)[0] = value; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public int[] GetValueInt32Array() { if (Elements != null && Elements.Count > 0) { int[] ret = new int[RowCount * ColumnCount * Elements.Count]; for (int i = 0; i < Elements.Count; i++) { int[] elmArray = Elements[i].GetValueInt32Array(); for (int j = 0; j < elmArray.Length; j++) ret[RowCount * ColumnCount * i + j] = elmArray[j]; } return ret; } switch (ParameterClass) { case EffectParameterClass.Scalar: return new int[] { GetValueInt32() }; default: throw new NotImplementedException(); } } public void SetValue(int[] value) { for (int i = 0; i < value.Length; i++) Elements[i].SetValue(value[i]); StateKey = unchecked(NextStateKey++); } public Single GetValueSingle() { if (ParameterClass == EffectParameterClass.Scalar && ParameterType == EffectParameterType.Single) { return ((float[])Data)[0]; } else throw new InvalidCastException(); } public void SetValue(Single value) { if (ParameterType == EffectParameterType.Single) { ((float[])Data)[0] = value; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Single[] GetValueSingleArray() { if (Elements != null && Elements.Count > 0) { Single[] ret = new Single[RowCount * ColumnCount * Elements.Count]; for (int i = 0; i < Elements.Count; i++) { Single[] elmArray = Elements[i].GetValueSingleArray(); for (int j = 0; j < elmArray.Length; j++) ret[RowCount * ColumnCount * i + j] = elmArray[j]; } return ret; } switch (ParameterClass) { case EffectParameterClass.Scalar: return new Single[] { GetValueSingle() }; case EffectParameterClass.Vector: case EffectParameterClass.Matrix: if (Data is Matrix) return Matrix.ToFloatArray((Matrix)Data); else return (float[])Data; default: throw new NotImplementedException(); } } public void SetValue(Single[] value) { for (int i = 0; i < value.Length; i++) Elements[i].SetValue(value[i]); StateKey = unchecked(NextStateKey++); } public Vector2 GetValueVector2() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] vecInfo = (float[])Data; return new Vector2(vecInfo[0], vecInfo[1]); } else throw new InvalidCastException(); } public void SetValue(Vector2 value) { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] fData = (float[])Data; fData[0] = value.X; fData[1] = value.Y; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Vector2[] GetValueVector2Array() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { if (Elements != null && Elements.Count > 0) { Vector2[] result = new Vector2[Elements.Count]; for (int i = 0; i < Elements.Count; i++) { float[] v = Elements[i].GetValueSingleArray(); result[i] = new Vector2(v[0], v[1]); } return result; } return null; } else throw new InvalidCastException(); } public void SetValue(Vector2[] value) { for (int i = 0; i < value.Length; i++) Elements[i].SetValue(value[i]); StateKey = unchecked(NextStateKey++); } public Vector3 GetValueVector3() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] vecInfo = (float[])Data; return new Vector3(vecInfo[0], vecInfo[1], vecInfo[2]); } else throw new InvalidCastException(); } public void SetValue(Vector3 value) { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] fData = (float[])Data; fData[0] = value.X; fData[1] = value.Y; fData[2] = value.Z; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Vector3[] GetValueVector3Array() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { if (Elements != null && Elements.Count > 0) { Vector3[] result = new Vector3[Elements.Count]; for (int i = 0; i < Elements.Count; i++) { float[] v = Elements[i].GetValueSingleArray(); result[i] = new Vector3(v[0], v[1], v[2]); } return result; } return null; } else throw new InvalidCastException(); } public void SetValue(Vector3[] value) { for (int i = 0; i < value.Length; i++) Elements[i].SetValue(value[i]); StateKey = unchecked(NextStateKey++); } public Vector4 GetValueVector4() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] vecInfo = (float[])Data; return new Vector4(vecInfo[0], vecInfo[1], vecInfo[2], vecInfo[3]); } else throw new InvalidCastException(); } public void SetValue(Vector4 value) { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] fData = (float[])Data; fData[0] = value.X; fData[1] = value.Y; fData[2] = value.Z; fData[3] = value.W; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Vector4[] GetValueVector4Array() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { if (Elements != null && Elements.Count > 0) { Vector4[] result = new Vector4[Elements.Count]; for (int i = 0; i < Elements.Count; i++) { float[] v = Elements[i].GetValueSingleArray(); result[i] = new Vector4(v[0], v[1], v[2], v[3]); } return result; } return null; } else throw new InvalidCastException(); } public void SetValue(Vector4[] value) { for (int i = 0; i < value.Length; i++) Elements[i].SetValue(value[i]); StateKey = unchecked(NextStateKey++); } public Quaternion GetValueQuaternion() { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] vecInfo = (float[])Data; return new Quaternion(vecInfo[0], vecInfo[1], vecInfo[2], vecInfo[3]); } else throw new InvalidCastException(); } public void SetValue(Quaternion value) { if (ParameterClass == EffectParameterClass.Vector && ParameterType == EffectParameterType.Single) { float[] fData = (float[])Data; fData[0] = value.X; fData[1] = value.Y; fData[2] = value.Z; fData[3] = value.W; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Quaternion[] GetValueQuaternionArray() { throw new NotImplementedException(); } public void SetValue(Quaternion[] value) { throw new NotImplementedException(); } public Matrix GetValueMatrix() { if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single) { float[] fData = (float[])Data; if (RowCount == 4 && ColumnCount == 4) { return new Matrix(fData[0], fData[4], fData[ 8], fData[12], fData[1], fData[5], fData[ 9], fData[13], fData[2], fData[6], fData[10], fData[14], fData[3], fData[7], fData[11], fData[15]); } else throw new InvalidCastException(); } else throw new InvalidCastException(); } public void SetValue(Matrix value) { if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single) { // HLSL expects matrices to be transposed by default. // These unrolled loops do the transpose during assignment. if (RowCount == 4) { if (ColumnCount == 4) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M41; fData[4] = value.M12; fData[5] = value.M22; fData[6] = value.M32; fData[7] = value.M42; fData[8] = value.M13; fData[9] = value.M23; fData[10] = value.M33; fData[11] = value.M43; fData[12] = value.M14; fData[13] = value.M24; fData[14] = value.M34; fData[15] = value.M44; } else if (ColumnCount == 3) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M41; fData[4] = value.M12; fData[5] = value.M22; fData[6] = value.M32; fData[7] = value.M42; fData[8] = value.M13; fData[9] = value.M23; fData[10] = value.M33; fData[11] = value.M43; } else if (ColumnCount == 2) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M41; fData[4] = value.M12; fData[5] = value.M22; fData[6] = value.M32; fData[7] = value.M42; } else throw new InvalidCastException(); } else if (RowCount == 3) { if (ColumnCount == 4) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M12; fData[4] = value.M22; fData[5] = value.M32; fData[6] = value.M13; fData[7] = value.M23; fData[8] = value.M33; fData[9] = value.M14; fData[10] = value.M24; fData[11] = value.M34; } else if (ColumnCount == 3) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M12; fData[4] = value.M22; fData[5] = value.M32; fData[6] = value.M13; fData[7] = value.M23; fData[8] = value.M33; } else if (ColumnCount == 2) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M12; fData[4] = value.M22; fData[5] = value.M32; } else throw new InvalidCastException(); } else throw new InvalidCastException(); StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public Matrix[] GetValueMatrixArray(int count) { if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single) { Matrix[] ret = new Matrix[count]; for (int i = 0; i < count; i++) ret[i] = Elements[i].GetValueMatrix(); return ret; } else throw new InvalidCastException(); } public void SetValue(Matrix[] value) { if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single) { if (RowCount == 4) { if (ColumnCount == 4) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M41; fData[4] = value[i].M12; fData[5] = value[i].M22; fData[6] = value[i].M32; fData[7] = value[i].M42; fData[8] = value[i].M13; fData[9] = value[i].M23; fData[10] = value[i].M33; fData[11] = value[i].M43; fData[12] = value[i].M14; fData[13] = value[i].M24; fData[14] = value[i].M34; fData[15] = value[i].M44; } } else if (ColumnCount == 3) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M41; fData[4] = value[i].M12; fData[5] = value[i].M22; fData[6] = value[i].M32; fData[7] = value[i].M42; fData[8] = value[i].M13; fData[9] = value[i].M23; fData[10] = value[i].M33; fData[11] = value[i].M43; } } else if (ColumnCount == 2) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M41; fData[4] = value[i].M12; fData[5] = value[i].M22; fData[6] = value[i].M32; fData[7] = value[i].M42; } } else throw new InvalidCastException(); } else if (RowCount == 3) { if (ColumnCount == 4) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M12; fData[4] = value[i].M22; fData[5] = value[i].M32; fData[6] = value[i].M13; fData[7] = value[i].M23; fData[8] = value[i].M33; fData[9] = value[i].M14; fData[10] = value[i].M24; fData[11] = value[i].M34; } } else if (ColumnCount == 3) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M12; fData[4] = value[i].M22; fData[5] = value[i].M32; fData[6] = value[i].M13; fData[7] = value[i].M23; fData[8] = value[i].M33; } } else if (ColumnCount == 2) { for (int i = 0; i < value.Length; i++) { float[] fData = (float[])Elements[i].Data; fData[0] = value[i].M11; fData[1] = value[i].M21; fData[2] = value[i].M31; fData[3] = value[i].M12; fData[4] = value[i].M22; fData[5] = value[i].M32; } } else throw new InvalidCastException(); } else throw new InvalidCastException(); StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public void SetValueTranspose(Matrix value) { if (ParameterClass == EffectParameterClass.Matrix && ParameterType == EffectParameterType.Single) { // HLSL expects matrices to be transposed by default, so copying them straight // from the in-memory version effectively transposes them back to row-major. if (RowCount == 4) { if (ColumnCount == 4) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M12; fData[2] = value.M13; fData[3] = value.M14; fData[4] = value.M21; fData[5] = value.M22; fData[6] = value.M23; fData[7] = value.M24; fData[8] = value.M31; fData[9] = value.M32; fData[10] = value.M33; fData[11] = value.M34; fData[12] = value.M41; fData[13] = value.M42; fData[14] = value.M43; fData[15] = value.M44; } else if (ColumnCount == 3) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M12; fData[2] = value.M13; fData[3] = value.M14; fData[4] = value.M21; fData[5] = value.M22; fData[6] = value.M23; fData[7] = value.M24; fData[8] = value.M31; fData[9] = value.M32; fData[10] = value.M33; fData[11] = value.M34; } else if (ColumnCount == 2) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M21; fData[2] = value.M31; fData[3] = value.M41; fData[4] = value.M12; fData[5] = value.M22; fData[6] = value.M32; fData[7] = value.M42; } else throw new InvalidCastException(); } else if (RowCount == 3) { if (ColumnCount == 4) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M12; fData[2] = value.M13; fData[3] = value.M21; fData[4] = value.M22; fData[5] = value.M23; fData[6] = value.M31; fData[7] = value.M32; fData[8] = value.M33; fData[9] = value.M41; fData[10] = value.M42; fData[11] = value.M43; } else if (ColumnCount == 3) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M12; fData[2] = value.M13; fData[3] = value.M21; fData[4] = value.M22; fData[5] = value.M23; fData[6] = value.M31; fData[7] = value.M32; fData[8] = value.M33; } else if (ColumnCount == 2) { float[] fData = (float[])Data; fData[0] = value.M11; fData[1] = value.M12; fData[2] = value.M13; fData[3] = value.M21; fData[4] = value.M22; fData[5] = value.M23; } else throw new InvalidCastException(); } else throw new InvalidCastException(); StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } public string GetValueString() { if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.String) { return ((string[])Data)[0]; } else throw new InvalidCastException(); } public void SetValue(string value) { throw new NotImplementedException(); } public Texture2D GetValueTexture2D() { if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.Texture2D) { return (Texture2D)Data; } else throw new InvalidCastException(); } public Texture3D GetValueTexture3D() { if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.Texture3D) { return (Texture3D)Data; } else throw new InvalidCastException(); } public TextureCube GetValueTextureCube() { if (ParameterClass == EffectParameterClass.Object && ParameterType == EffectParameterType.TextureCube) { return (TextureCube)Data; } else throw new InvalidCastException(); } public void SetValue(Texture value) { if (this.ParameterType == EffectParameterType.Texture || this.ParameterType == EffectParameterType.Texture1D || this.ParameterType == EffectParameterType.Texture2D || this.ParameterType == EffectParameterType.Texture3D || this.ParameterType == EffectParameterType.TextureCube) { Data = value; StateKey = unchecked(NextStateKey++); } else throw new InvalidCastException(); } /// /// Property referenced by the DebuggerDisplayAttribute. /// private string DebugDisplayString { get { string semanticStr = string.Empty; if (!string.IsNullOrEmpty(Semantic)) semanticStr = string.Concat(" <", Semantic, ">"); return string.Concat("[", ParameterClass, " ", ParameterType, "]", semanticStr, " ", Name, " : ", GetDebugDataValueString()); } } private string GetDebugDataValueString() { string valueStr; if (Data == null) { if (Elements == null) valueStr = "(null)"; else valueStr = string.Join(", ", Elements.Select(e => e.GetDebugDataValueString())); } else { switch (ParameterClass) { // Object types are stored directly in the Data property. // Display Data's string value. case EffectParameterClass.Object: valueStr = Data.ToString(); break; // Matrix types are stored in a float[16] which we don't really have room for. // Display "...". case EffectParameterClass.Matrix: valueStr = "..."; break; // Scalar types are stored as a float[1]. // Display the first (and only) element's string value. case EffectParameterClass.Scalar: valueStr = (Data as Array).GetValue(0).ToString(); break; // Vector types are stored as an Array. // Display the string value of each array element. case EffectParameterClass.Vector: Array array = Data as Array; string[] arrayStr = new string[array.Length]; int idx = 0; foreach (object e in array) { arrayStr[idx] = array.GetValue(idx).ToString(); idx++; } valueStr = string.Join(" ", arrayStr); break; // Handle additional cases here... default: valueStr = Data.ToString(); break; } } return string.Concat("{", valueStr, "}"); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterClass.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines classes for effect parameters and shader constants. /// public enum EffectParameterClass { /// /// Scalar class type. /// Scalar, /// /// Vector class type. /// Vector, /// /// Matrix class type. /// Matrix, /// /// Class type for textures, shaders or strings. /// Object, /// /// Structure class type. /// Struct } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterCollection.cs ================================================ using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { public class EffectParameterCollection : IEnumerable { internal static readonly EffectParameterCollection Empty = new EffectParameterCollection(new EffectParameter[0]); private readonly EffectParameter[] _parameters; private readonly Dictionary _indexLookup; internal EffectParameterCollection(EffectParameter[] parameters) { _parameters = parameters; _indexLookup = new Dictionary(_parameters.Length); for (int i = 0; i < _parameters.Length; i++) { string name = _parameters[i].Name; if(!string.IsNullOrWhiteSpace(name)) _indexLookup.Add(name, i); } } private EffectParameterCollection(EffectParameter[] parameters, Dictionary indexLookup) { _parameters = parameters; _indexLookup = indexLookup; } internal EffectParameterCollection Clone() { if (_parameters.Length == 0) return Empty; EffectParameter[] parameters = new EffectParameter[_parameters.Length]; for (int i = 0; i < _parameters.Length; i++) parameters[i] = new EffectParameter(_parameters[i]); return new EffectParameterCollection(parameters, _indexLookup); } public int Count { get { return _parameters.Length; } } public EffectParameter this[int index] { get { return _parameters[index]; } } public EffectParameter this[string name] { get { int index; if (_indexLookup.TryGetValue(name, out index)) return _parameters[index]; return null; } } public IEnumerator GetEnumerator() { return ((IEnumerable)_parameters).GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _parameters.GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectParameterType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines types for effect parameters and shader constants. /// public enum EffectParameterType { /// /// Pointer to void type. /// Void, /// /// Boolean type. Any non-zero will be true; false otherwise. /// Bool, /// /// 32-bit integer type. /// Int32, /// /// Float type. /// Single, /// /// String type. /// String, /// /// Any texture type. /// Texture, /// /// 1D-texture type. /// Texture1D, /// /// 2D-texture type. /// Texture2D, /// /// 3D-texture type. /// Texture3D, /// /// Cubic texture type. /// TextureCube } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectPass.cs ================================================ using System; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class EffectPass { private readonly Effect _effect; private readonly PixelShader _pixelShader; private readonly VertexShader _vertexShader; private readonly BlendState _blendState; private readonly DepthStencilState _depthStencilState; private readonly RasterizerState _rasterizerState; public string Name { get; private set; } public EffectAnnotationCollection Annotations { get; private set; } internal EffectPass( Effect effect, string name, VertexShader vertexShader, PixelShader pixelShader, BlendState blendState, DepthStencilState depthStencilState, RasterizerState rasterizerState, EffectAnnotationCollection annotations ) { Debug.Assert(effect != null, "Got a null effect!"); Debug.Assert(annotations != null, "Got a null annotation collection!"); _effect = effect; Name = name; _vertexShader = vertexShader; _pixelShader = pixelShader; _blendState = blendState; _depthStencilState = depthStencilState; _rasterizerState = rasterizerState; Annotations = annotations; } internal EffectPass(Effect effect, EffectPass cloneSource) { Debug.Assert(effect != null, "Got a null effect!"); Debug.Assert(cloneSource != null, "Got a null cloneSource!"); _effect = effect; // Share all the immutable types. Name = cloneSource.Name; _blendState = cloneSource._blendState; _depthStencilState = cloneSource._depthStencilState; _rasterizerState = cloneSource._rasterizerState; Annotations = cloneSource.Annotations; _vertexShader = cloneSource._vertexShader; _pixelShader = cloneSource._pixelShader; } public void Apply() { EffectTechnique currentTechnique = _effect.CurrentTechnique; _effect.OnApply(); if (_effect.CurrentTechnique != currentTechnique) throw new InvalidOperationException("CurrentTechnique changed during Effect.OnApply()."); GraphicsContext context = _effect.GraphicsDevice.CurrentContext; if (_vertexShader != null) { context.VertexShader = _vertexShader; // Update the texture parameters. SetShaderSamplers(_vertexShader, context.VertexTextures, context.VertexSamplerStates); // Update the constant buffers. for (int c = 0; c < _vertexShader.CBuffers.Length; c++) { ConstantBuffer constantBuffer = _effect.ConstantBuffers[_vertexShader.CBuffers[c]]; ((IPlatformConstantBuffer)constantBuffer).Strategy.Update(_effect.Parameters); ((IPlatformGraphicsContext)context).Strategy._vertexConstantBuffers[c] = constantBuffer; } } if (_pixelShader != null) { context.PixelShader = _pixelShader; // Update the texture parameters. SetShaderSamplers(_pixelShader, context.Textures, context.SamplerStates); // Update the constant buffers. for (int c = 0; c < _pixelShader.CBuffers.Length; c++) { ConstantBuffer constantBuffer = _effect.ConstantBuffers[_pixelShader.CBuffers[c]]; ((IPlatformConstantBuffer)constantBuffer).Strategy.Update(_effect.Parameters); ((IPlatformGraphicsContext)context).Strategy._pixelConstantBuffers[c] = constantBuffer; } } // Set the render states if we have some. if (_rasterizerState != null) context.RasterizerState = _rasterizerState; if (_blendState != null) context.BlendState = _blendState; if (_depthStencilState != null) context.DepthStencilState = _depthStencilState; } private void SetShaderSamplers(Shader shader, TextureCollection textures, SamplerStateCollection samplerStates) { SamplerInfo[] samplers = shader.Samplers; for (int i = 0; i < samplers.Length; i++) { // Set Texture if (samplers[i].textureParameter != -1) { EffectParameter param = _effect.Parameters[samplers[i].textureParameter]; textures[samplers[i].textureSlot] = param.Data as Texture; } // Set SamplerState if (samplers[i].state != null) samplerStates[samplers[i].samplerSlot] = samplers[i].state; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectPassCollection.cs ================================================ using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { public class EffectPassCollection : IEnumerable { private readonly EffectPass[] _passes; internal EffectPassCollection(EffectPass [] passes) { _passes = passes; } internal EffectPassCollection Clone(Effect effect) { EffectPass[] passes = new EffectPass[_passes.Length]; for (int i = 0; i < _passes.Length; i++) passes[i] = new EffectPass(effect, _passes[i]); return new EffectPassCollection(passes); } public EffectPass this[int index] { get { return _passes[index]; } } public EffectPass this[string name] { get { // TODO: Add a name to pass lookup table. foreach (EffectPass pass in _passes) { if (pass.Name == name) return pass; } return null; } } public int Count { get { return _passes.Length; } } public Enumerator GetEnumerator() { return new Enumerator(_passes); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_passes).GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _passes.GetEnumerator(); } public struct Enumerator : IEnumerator { private readonly EffectPass[] _array; private int _index; private EffectPass _current; internal Enumerator(EffectPass[] array) { _array = array; _index = 0; _current = null; } public bool MoveNext() { if (_index < _array.Length) { _current = _array[_index]; _index++; return true; } _index = _array.Length + 1; _current = null; return false; } public EffectPass Current { get { return _current; } } public void Dispose() { } object System.Collections.IEnumerator.Current { get { if (_index == _array.Length + 1) throw new InvalidOperationException(); return Current; } } void System.Collections.IEnumerator.Reset() { _index = 0; _current = null; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectTechnique.cs ================================================ using System; namespace Microsoft.Xna.Framework.Graphics { public class EffectTechnique { public EffectPassCollection Passes { get; private set; } public EffectAnnotationCollection Annotations { get; private set; } public string Name { get; private set; } internal EffectTechnique(Effect effect, EffectTechnique cloneSource) { // Share all the immutable types. Name = cloneSource.Name; Annotations = cloneSource.Annotations; // Clone the mutable types. Passes = cloneSource.Passes.Clone(effect); } internal EffectTechnique(Effect effect, string name, EffectPassCollection passes, EffectAnnotationCollection annotations) { Name = name; Passes = passes; Annotations = annotations; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EffectTechniqueCollection.cs ================================================ using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { public class EffectTechniqueCollection : IEnumerable { private readonly EffectTechnique[] _techniques; public int Count { get { return _techniques.Length; } } internal EffectTechniqueCollection(EffectTechnique[] techniques) { _techniques = techniques; } internal EffectTechniqueCollection Clone(Effect effect) { EffectTechnique[] techniques = new EffectTechnique[_techniques.Length]; for (int i = 0; i < _techniques.Length; i++) techniques[i] = new EffectTechnique(effect, _techniques[i]); return new EffectTechniqueCollection(techniques); } public EffectTechnique this[int index] { get { return _techniques[index]; } } public EffectTechnique this[string name] { get { // TODO: Add a name to technique lookup table. foreach (EffectTechnique technique in _techniques) { if (technique.Name == name) return technique; } return null; } } public IEnumerator GetEnumerator() { return ((IEnumerable)_techniques).GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _techniques.GetEnumerator(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/EnvironmentMapEffect.cs ================================================ #region File Description //----------------------------------------------------------------------------- // EnvironmentMapEffect.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Built-in effect that supports environment mapping. /// public class EnvironmentMapEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog { #region Effect Parameters EffectParameter textureParam; EffectParameter environmentMapParam; EffectParameter environmentMapAmountParam; EffectParameter environmentMapSpecularParam; EffectParameter fresnelFactorParam; EffectParameter diffuseColorParam; EffectParameter emissiveColorParam; EffectParameter eyePositionParam; EffectParameter fogColorParam; EffectParameter fogVectorParam; EffectParameter worldParam; EffectParameter worldInverseTransposeParam; EffectParameter worldViewProjParam; #endregion #region Fields bool _oneLight; bool fogEnabled; bool fresnelEnabled; bool specularEnabled; Matrix world = Matrix.Identity; Matrix view = Matrix.Identity; Matrix projection = Matrix.Identity; Matrix worldView; Vector3 diffuseColor = Vector3.One; Vector3 emissiveColor = Vector3.Zero; Vector3 ambientLightColor = Vector3.Zero; float alpha = 1; DirectionalLight light0; DirectionalLight light1; DirectionalLight light2; float fogStart = 0; float fogEnd = 1; EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All; #endregion #region Public Properties /// /// Gets or sets the world matrix. /// public Matrix World { get { return world; } set { world = value; dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the view matrix. /// public Matrix View { get { return view; } set { view = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog; } } /// /// Gets or sets the projection matrix. /// public Matrix Projection { get { return projection; } set { projection = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj; } } /// /// Gets or sets the material diffuse color (range 0 to 1). /// public Vector3 DiffuseColor { get { return diffuseColor; } set { diffuseColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material emissive color (range 0 to 1). /// public Vector3 EmissiveColor { get { return emissiveColor; } set { emissiveColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material alpha. /// public float Alpha { get { return alpha; } set { alpha = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the ambient light color (range 0 to 1). /// public Vector3 AmbientLightColor { get { return ambientLightColor; } set { ambientLightColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets the first directional light. /// public DirectionalLight DirectionalLight0 { get { return light0; } } /// /// Gets the second directional light. /// public DirectionalLight DirectionalLight1 { get { return light1; } } /// /// Gets the third directional light. /// public DirectionalLight DirectionalLight2 { get { return light2; } } /// /// Gets or sets the fog enable flag. /// public bool FogEnabled { get { return fogEnabled; } set { if (fogEnabled != value) { fogEnabled = value; dirtyFlags |= EffectDirtyFlags.FogEnable; UpdateCurrentTechnique(); } } } /// /// Gets or sets the fog start distance. /// public float FogStart { get { return fogStart; } set { fogStart = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog end distance. /// public float FogEnd { get { return fogEnd; } set { fogEnd = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog color. /// public Vector3 FogColor { get { return fogColorParam.GetValueVector3(); } set { fogColorParam.SetValue(value); } } /// /// Gets or sets the current texture. /// public Texture2D Texture { get { return textureParam.GetValueTexture2D(); } set { textureParam.SetValue(value); } } /// /// Gets or sets the current environment map texture. /// public TextureCube EnvironmentMap { get { return environmentMapParam.GetValueTextureCube(); } set { environmentMapParam.SetValue(value); } } /// /// Gets or sets the amount of the environment map RGB that will be blended over /// the base texture. Range 0 to 1, default 1. If set to zero, the RGB channels /// of the environment map will completely ignored (but the environment map alpha /// may still be visible if EnvironmentMapSpecular is greater than zero). /// public float EnvironmentMapAmount { get { return environmentMapAmountParam.GetValueSingle(); } set { environmentMapAmountParam.SetValue(value); } } /// /// Gets or sets the amount of the environment map alpha channel that will /// be added to the base texture. Range 0 to 1, default 0. This can be used /// to implement cheap specular lighting, by encoding one or more specular /// highlight patterns into the environment map alpha channel, then setting /// EnvironmentMapSpecular to the desired specular light color. /// public Vector3 EnvironmentMapSpecular { get { return environmentMapSpecularParam.GetValueVector3(); } set { environmentMapSpecularParam.SetValue(value); bool enabled = (value != Vector3.Zero); if (specularEnabled != enabled) { specularEnabled = enabled; UpdateCurrentTechnique(); } } } /// /// Gets or sets the Fresnel factor used for the environment map blending. /// Higher values make the environment map only visible around the silhouette /// edges of the object, while lower values make it visible everywhere. /// Setting this property to 0 disables Fresnel entirely, making the /// environment map equally visible regardless of view angle. The default is 1. /// Fresnel only affects the environment map RGB (the intensity of which is /// controlled by EnvironmentMapAmount). The alpha contribution (controlled by /// EnvironmentMapSpecular) is not affected by the Fresnel setting. /// public float FresnelFactor { get { return fresnelFactorParam.GetValueSingle(); } set { fresnelFactorParam.SetValue(value); bool enabled = (value != 0); if (fresnelEnabled != enabled) { fresnelEnabled = enabled; UpdateCurrentTechnique(); } } } /// /// This effect requires lighting, so we explicitly implement /// IEffectLights.LightingEnabled, and do not allow turning it off. /// bool IEffectLights.LightingEnabled { get { return true; } set { if (!value) throw new NotSupportedException("EnvironmentMapEffect does not support setting LightingEnabled to false."); } } #endregion #region Methods /// /// Creates a new EnvironmentMapEffect with default parameter settings. /// public EnvironmentMapEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameEnvironmentMapEffect)) { CacheEffectParameters(null); DirectionalLight0.Enabled = true; EnvironmentMapAmount = 1; EnvironmentMapSpecular = Vector3.Zero; FresnelFactor = 1; } /// /// Creates a new EnvironmentMapEffect by cloning parameter settings from an existing instance. /// protected EnvironmentMapEffect(EnvironmentMapEffect cloneSource) : base(cloneSource) { CacheEffectParameters(cloneSource); fogEnabled = cloneSource.fogEnabled; fresnelEnabled = cloneSource.fresnelEnabled; specularEnabled = cloneSource.specularEnabled; world = cloneSource.world; view = cloneSource.view; projection = cloneSource.projection; diffuseColor = cloneSource.diffuseColor; emissiveColor = cloneSource.emissiveColor; ambientLightColor = cloneSource.ambientLightColor; alpha = cloneSource.alpha; fogStart = cloneSource.fogStart; fogEnd = cloneSource.fogEnd; } /// /// Creates a clone of the current EnvironmentMapEffect instance. /// public override Effect Clone() { return new EnvironmentMapEffect(this); } /// /// Sets up the standard key/fill/back lighting rig. /// public void EnableDefaultLighting() { AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters(EnvironmentMapEffect cloneSource) { textureParam = Parameters["Texture"]; environmentMapParam = Parameters["EnvironmentMap"]; environmentMapAmountParam = Parameters["EnvironmentMapAmount"]; environmentMapSpecularParam = Parameters["EnvironmentMapSpecular"]; fresnelFactorParam = Parameters["FresnelFactor"]; diffuseColorParam = Parameters["DiffuseColor"]; emissiveColorParam = Parameters["EmissiveColor"]; eyePositionParam = Parameters["EyePosition"]; fogColorParam = Parameters["FogColor"]; fogVectorParam = Parameters["FogVector"]; worldParam = Parameters["World"]; worldInverseTransposeParam = Parameters["WorldInverseTranspose"]; worldViewProjParam = Parameters["WorldViewProj"]; light0 = new DirectionalLight(Parameters["DirLight0Direction"], Parameters["DirLight0DiffuseColor"], null, (cloneSource != null) ? cloneSource.light0 : null); light1 = new DirectionalLight(Parameters["DirLight1Direction"], Parameters["DirLight1DiffuseColor"], null, (cloneSource != null) ? cloneSource.light1 : null); light2 = new DirectionalLight(Parameters["DirLight2Direction"], Parameters["DirLight2DiffuseColor"], null, (cloneSource != null) ? cloneSource.light2 : null); light1.EnabledChanged += Light_EnabledChanged; light2.EnabledChanged += Light_EnabledChanged; } private void Light_EnabledChanged(object sender, EventArgs e) { _oneLight = !light1.Enabled && !light2.Enabled; UpdateCurrentTechnique(); } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { // Recompute the world+view+projection matrix or fog vector? dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam); // Recompute the world inverse transpose and eye position? dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam); // Recompute the diffuse/emissive/alpha material color parameters? if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0) { EffectHelpers.SetMaterialColor(true, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam); dirtyFlags &= ~EffectDirtyFlags.MaterialColor; } } private void UpdateCurrentTechnique() { int shaderIndex = 0; if (fogEnabled) shaderIndex += 1; if (fresnelEnabled) shaderIndex += 2; if (specularEnabled) shaderIndex += 4; if (_oneLight) // oneLight shaderIndex += 8; CurrentTechnique = Techniques[shaderIndex]; } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/IEffectBones.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Interface for Effects that support bone transforms. /// public interface IEffectBones { /// /// Sets an array of skinning bone transform matrices. /// void SetBoneTransforms(Matrix[] boneTransforms); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/IEffectFog.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// The common effect fog rendering parameters. /// public interface IEffectFog { /// /// The floating point fog color. /// Vector3 FogColor { get; set; } /// /// Used to toggle the rendering of fog. /// bool FogEnabled { get; set; } /// /// The world space distance from the camera at which fogging is fully applied. /// /// /// FogEnd should be greater than FogStart. If FogEnd and FogStart /// are the same value everything is fully fogged. /// float FogEnd { get; set; } /// /// The world space distance from the camera at which fogging begins. /// /// /// FogStart should be less than FogEnd. If FogEnd and FogStart are the /// same value everything is fully fogged. /// float FogStart { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/IEffectLights.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// The common effect light rendering parameters. /// public interface IEffectLights { /// /// The floating point ambient light color. /// Vector3 AmbientLightColor { get; set; } /// /// Returns the first directional light. /// DirectionalLight DirectionalLight0 { get; } /// /// Returns the second directional light. /// DirectionalLight DirectionalLight1 { get; } /// /// Returns the third directional light. /// DirectionalLight DirectionalLight2 { get; } /// /// Toggles the rendering of lighting. /// bool LightingEnabled { get; set; } /// /// Initializes the lights to the standard key/fill/back lighting rig. /// void EnableDefaultLighting(); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/IEffectMatrices.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { public interface IEffectMatrices { Matrix Projection { get; set; } Matrix View { get; set; } Matrix World { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/KNIFXHeader.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { internal struct KNIFXHeader { /// /// The KNI Effect file format header identifier ("KNIF"). /// public static readonly int KNIFXSignature = (BitConverter.IsLittleEndian) ? 0x46494E4B : 0x4B4E4946; /// /// The current KNI Effect file format versions /// public const int CurrentKNIFXVersion = 11; public readonly int Signature; public readonly int Version; public readonly int HeaderSize; public KNIFXHeader(byte[] effectCode, int index) { int offset = 0; Signature = BitConverter.ToInt32(effectCode, index + offset); offset += 4; Version = (int)BitConverter.ToInt16(effectCode, index + offset); offset += 2; short reserved0 = BitConverter.ToInt16(effectCode, index + offset); offset += 2; HeaderSize = offset; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/KNIFXReader11.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2025 Nick Kastellanos using System; using System.Diagnostics; using System.IO; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public partial class Effect { private class KNIFXReader11 : BinaryReader { private readonly GraphicsDevice _graphicsDevice; private bool _integersAsFloats; public KNIFXReader11(Stream stream, GraphicsDevice graphicsDevice) : base(stream) { this._graphicsDevice = graphicsDevice; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } internal Effect ReadEffect() { Effect effect = new Effect(_graphicsDevice); _integersAsFloats = ReadBoolean(); effect.ConstantBuffers = ReadConstantBuffers(); effect._shaders = ReadShaders(); effect.Parameters = ReadParameters(); effect.Techniques = ReadTechniques(effect); effect.CurrentTechnique = effect.Techniques[0]; return effect; } private ConstantBuffer[] ReadConstantBuffers() { int buffersCount = ReadPackedInt(); ConstantBuffer[] constantBuffers = new ConstantBuffer[buffersCount]; for (int c = 0; c < buffersCount; c++) constantBuffers[c] = ReadConstantBuffer(); return constantBuffers; } ConstantBuffer ReadConstantBuffer() { string name = ReadString(); // Create the backing system memory buffer. int sizeInBytes = ReadPackedInt(); // Read the parameter index values. int[] parameters = new int[ReadPackedInt()]; int[] offsets = new int[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { parameters[i] = ReadPackedInt(); offsets[i] = (int)ReadUInt16(); } ConstantBuffer buffer = new ConstantBuffer(_graphicsDevice, name, parameters, offsets, sizeInBytes, _integersAsFloats); return buffer; } private Shader[] ReadShaders() { int shadersCount = ReadPackedInt(); Shader[] shaders = new Shader[shadersCount]; for (int s = 0; s < shadersCount; s++) shaders[s] = ReadShader(); return shaders; } private Shader ReadShader() { ShaderStage shaderStage = (ShaderStage)ReadByte(); ShaderVersion shaderVersion = ReadShaderVersion(); int shaderLength = ReadInt32(); byte[] shaderBytecode = ReadBytes(shaderLength); int samplerCount = ReadPackedInt(); SamplerInfo[] samplers = new SamplerInfo[samplerCount]; for (int s = 0; s < samplerCount; s++) { samplers[s].type = (SamplerType)ReadByte(); samplers[s].textureSlot = ReadByte(); samplers[s].samplerSlot = ReadByte(); if (samplers[s].samplerSlot == 255) samplers[s].samplerSlot = samplers[s].textureSlot; if (ReadBoolean()) samplers[s].state = ReadSamplerState(); samplers[s].GLsamplerName = ReadString(); samplers[s].textureParameter = ReadPackedInt(); } int cbufferCount = ReadPackedInt(); int[] cBuffers = new int[cbufferCount]; for (int c = 0; c < cbufferCount; c++) cBuffers[c] = ReadPackedInt(); int attributeCount = ReadPackedInt(); VertexAttribute[] attributes = new VertexAttribute[attributeCount]; for (int a = 0; a < attributeCount; a++) { attributes[a].name = ReadString(); attributes[a].usage = (VertexElementUsage)ReadByte(); attributes[a].index = ReadPackedInt(); attributes[a].location = ReadInt16(); } switch (shaderStage) { case ShaderStage.Vertex: return new VertexShader(_graphicsDevice, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); case ShaderStage.Pixel: return new PixelShader(_graphicsDevice, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); default: throw new InvalidOperationException("stage"); } } private ShaderVersion ReadShaderVersion() { ushort major = checked((ushort)ReadPackedInt()); ushort minor = checked((ushort)ReadPackedInt()); return new ShaderVersion(major, minor); } private SamplerState ReadSamplerState() { SamplerState state = new SamplerState(); state.AddressU = (TextureAddressMode)ReadByte(); state.AddressV = (TextureAddressMode)ReadByte(); state.AddressW = (TextureAddressMode)ReadByte(); state.BorderColor = new Color( ReadByte(), ReadByte(), ReadByte(), ReadByte()); state.Filter = (TextureFilter)ReadByte(); state.MaxAnisotropy = ReadPackedInt(); state.MaxMipLevel = ReadPackedInt(); state.MipMapLevelOfDetailBias = ReadSingle(); return state; } private EffectParameterCollection ReadParameters() { int count = ReadPackedInt(); if (count == 0) return EffectParameterCollection.Empty; EffectParameter[] parameters = new EffectParameter[count]; for (int i = 0; i < count; i++) parameters[i] = ReadParameter(); return new EffectParameterCollection(parameters); } private EffectParameter ReadParameter() { EffectParameterClass class_ = (EffectParameterClass)ReadByte(); EffectParameterType type = (EffectParameterType)ReadByte(); string name = ReadString(); string semantic = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); int rowCount = (int)ReadByte(); int columnCount = (int)ReadByte(); int columnCountActual = (int)ReadByte(); EffectParameterCollection elements = ReadParameters(); EffectParameterCollection structMembers = ReadParameters(); object data = null; if (elements.Count == 0 && structMembers.Count == 0) { switch (type) { case EffectParameterType.Bool: if (_integersAsFloats) { // Booleans are stored in a float type. float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } else { // Booleans are stored in an integer type. int[] buffer = new int[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } break; case EffectParameterType.Int32: if (_integersAsFloats) { // Integers are stored in a float type. float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } else { int[] buffer = new int[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } break; case EffectParameterType.Single: { float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadSingle(); data = buffer; } break; case EffectParameterType.String: throw new NotImplementedException(); default: { Debug.WriteLine("Parameter {0} of type {1} is ignored", name, type.ToString()); // throw new NotImplementedException(); } break; } } return new EffectParameter( class_, type, name, rowCount, columnCount, columnCountActual, semantic, annotations, elements, structMembers, data, _integersAsFloats); } private EffectTechniqueCollection ReadTechniques(Effect effect) { int techniqueCount = ReadPackedInt(); EffectTechnique[] techniques = new EffectTechnique[techniqueCount]; for (int t = 0; t < techniqueCount; t++) { string name = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); EffectPassCollection passes = ReadPasses(effect); techniques[t] = new EffectTechnique(effect, name, passes, annotations); } return new EffectTechniqueCollection(techniques); } private EffectPassCollection ReadPasses(Effect effect) { int passesCount = ReadPackedInt(); EffectPass[] passes = new EffectPass[passesCount]; for (int i = 0; i < passesCount; i++) ReadEffectPass(effect, passes, i); return new EffectPassCollection(passes); } private void ReadEffectPass(Effect effect, EffectPass[] passes, int i) { string name = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); // Get the vertex and pixel shader. VertexShader vertexShader = null; PixelShader pixelShader = null; //ComputeShader computeShader = null; { int vertexShaderIndex = ReadPackedInt(); int pixelShaderIndex = ReadPackedInt(); int computeShaderIndex = ReadPackedInt(); if (vertexShaderIndex >= 0) vertexShader = (VertexShader)effect._shaders[vertexShaderIndex]; if (pixelShaderIndex >= 0) pixelShader = (PixelShader)effect._shaders[pixelShaderIndex]; if (computeShaderIndex >= 0) throw new NotImplementedException("Compute shaders are not implemented in this version of KNI."); //computeShader = (ComputeShader)effect._shaders[computeShaderIndex]; } BlendState blend = ReadBoolean() ? ReadBlendState() : null; DepthStencilState depth = ReadBoolean() ? ReadDepthStencilState() : null; RasterizerState rasterizer = ReadBoolean() ? ReadRasterizerState() : null; passes[i] = new EffectPass(effect, name, vertexShader, pixelShader, blend, depth, rasterizer, annotations); } private BlendState ReadBlendState() { return new BlendState { AlphaBlendFunction = (BlendFunction)ReadByte(), AlphaDestinationBlend = (Blend)ReadByte(), AlphaSourceBlend = (Blend)ReadByte(), BlendFactor = new Color(ReadByte(), ReadByte(), ReadByte(), ReadByte()), ColorBlendFunction = (BlendFunction)ReadByte(), ColorDestinationBlend = (Blend)ReadByte(), ColorSourceBlend = (Blend)ReadByte(), ColorWriteChannels = (ColorWriteChannels)ReadByte(), ColorWriteChannels1 = (ColorWriteChannels)ReadByte(), ColorWriteChannels2 = (ColorWriteChannels)ReadByte(), ColorWriteChannels3 = (ColorWriteChannels)ReadByte(), MultiSampleMask = ReadInt32(), }; } private DepthStencilState ReadDepthStencilState() { return new DepthStencilState { CounterClockwiseStencilDepthBufferFail = (StencilOperation)ReadByte(), CounterClockwiseStencilFail = (StencilOperation)ReadByte(), CounterClockwiseStencilFunction = (CompareFunction)ReadByte(), CounterClockwiseStencilPass = (StencilOperation)ReadByte(), DepthBufferEnable = ReadBoolean(), DepthBufferFunction = (CompareFunction)ReadByte(), DepthBufferWriteEnable = ReadBoolean(), ReferenceStencil = ReadInt32(), StencilDepthBufferFail = (StencilOperation)ReadByte(), StencilEnable = ReadBoolean(), StencilFail = (StencilOperation)ReadByte(), StencilFunction = (CompareFunction)ReadByte(), StencilMask = ReadInt32(), StencilPass = (StencilOperation)ReadByte(), StencilWriteMask = ReadInt32(), TwoSidedStencilMode = ReadBoolean(), }; } private RasterizerState ReadRasterizerState() { return new RasterizerState { CullMode = (CullMode)ReadByte(), DepthBias = ReadSingle(), FillMode = (FillMode)ReadByte(), MultiSampleAntiAlias = ReadBoolean(), ScissorTestEnable = ReadBoolean(), SlopeScaleDepthBias = ReadSingle(), }; } private EffectAnnotationCollection ReadAnnotations() { int count = ReadPackedInt(); if (count == 0) return EffectAnnotationCollection.Empty; EffectAnnotation[] annotations = new EffectAnnotation[count]; // TODO: Annotations are not implemented! return new EffectAnnotationCollection(annotations); } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/MGFXHeader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { internal struct MGFXHeader { /// /// The MonoGame Effect file format header identifier ("MGFX"). /// public static readonly int MGFXSignature = (BitConverter.IsLittleEndian) ? 0x5846474D: 0x4D474658; /// /// The current MonoGame Effect file format versions /// used to detect old packaged content. /// /// /// We should avoid supporting old versions for very long if at all /// as users should be rebuilding content when packaging their game. /// public const int MGFXVersion = 10; public readonly int Signature; public readonly int Version; public readonly ShaderProfileType Profile; public readonly int EffectKey; public readonly int HeaderSize; public MGFXHeader(byte[] effectCode, int index) { int offset = 0; Signature = BitConverter.ToInt32(effectCode, index + offset); offset += 4; Version = (int)effectCode[index + offset]; offset += 1; Profile = (ShaderProfileType)effectCode[index + offset]; offset += 1; EffectKey = BitConverter.ToInt32(effectCode, index + offset); offset += 4; HeaderSize = offset; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/MGFXReader10.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using System.IO; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public partial class Effect { private class MGFXReader10 : BinaryReader { private readonly GraphicsDevice _graphicsDevice; private bool _integersAsFloats; ShaderProfileType _shaderProfile; public MGFXReader10(Stream stream, GraphicsDevice graphicsDevice, ShaderProfileType shaderProfile) : base(stream) { this._graphicsDevice = graphicsDevice; this._shaderProfile = shaderProfile; } private int ReadPackedInt() { unchecked { // read zigzag encoded int int zzint = Read7BitEncodedInt(); return ((int)((uint)zzint >> 1) ^ (-(zzint & 1))); } } internal Effect ReadEffect() { Effect effect = new Effect(_graphicsDevice); _integersAsFloats = (_shaderProfile == ShaderProfileType.OpenGL_Mojo); effect.ConstantBuffers = ReadConstantBuffers(); effect._shaders = ReadShaders(); effect.Parameters = ReadParameters(); effect.Techniques = ReadTechniques(effect); effect.CurrentTechnique = effect.Techniques[0]; // Check file tail to ensure we parsed the content correctly. int tail = ReadInt32(); if (tail != MGFXHeader.MGFXSignature) throw new ArgumentException("The MGFX effect code was not parsed correctly.", "effectCode"); return effect; } private ConstantBuffer[] ReadConstantBuffers() { int buffersCount = ReadInt32(); ConstantBuffer[] constantBuffers = new ConstantBuffer[buffersCount]; for (int c = 0; c < buffersCount; c++) constantBuffers[c] = ReadConstantBuffer(); return constantBuffers; } ConstantBuffer ReadConstantBuffer() { string name = ReadString(); // Create the backing system memory buffer. int sizeInBytes = (int)ReadInt16(); // Read the parameter index values. int[] parameters = new int[ReadInt32()]; int[] offsets = new int[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { parameters[i] = ReadInt32(); offsets[i] = (int)ReadUInt16(); } ConstantBuffer buffer = new ConstantBuffer(_graphicsDevice, name, parameters, offsets, sizeInBytes, _integersAsFloats); return buffer; } private Shader[] ReadShaders() { int shadersCount = ReadInt32(); Shader[] shaders = new Shader[shadersCount]; for (int s = 0; s < shadersCount; s++) shaders[s] = ReadShader(); return shaders; } private Shader ReadShader() { ShaderStage shaderStage = (ShaderStage)ReadByte(); ShaderVersion shaderVersion = default; int shaderLength = ReadInt32(); byte[] shaderBytecode = ReadBytes(shaderLength); int samplerCount = (int)ReadByte(); SamplerInfo[] samplers = new SamplerInfo[samplerCount]; for (int s = 0; s < samplerCount; s++) { samplers[s].type = (SamplerType)ReadByte(); samplers[s].textureSlot = ReadByte(); samplers[s].samplerSlot = ReadByte(); if (samplers[s].samplerSlot == 255) samplers[s].samplerSlot = samplers[s].textureSlot; if (ReadBoolean()) samplers[s].state = ReadSamplerState(); samplers[s].GLsamplerName = ReadString(); samplers[s].textureParameter = ReadByte(); if (samplers[s].textureParameter == 255) samplers[s].textureParameter = -1; } int cbufferCount = (int)ReadByte(); int[] cBuffers = new int[cbufferCount]; for (int c = 0; c < cbufferCount; c++) cBuffers[c] = ReadByte(); int attributeCount = (int)ReadByte(); VertexAttribute[] attributes = new VertexAttribute[attributeCount]; for (int a = 0; a < attributeCount; a++) { attributes[a].name = ReadString(); attributes[a].usage = (VertexElementUsage)ReadByte(); attributes[a].index = ReadByte(); attributes[a].location = ReadInt16(); } switch (shaderStage) { case ShaderStage.Vertex: return new VertexShader(_graphicsDevice, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); case ShaderStage.Pixel: return new PixelShader(_graphicsDevice, shaderVersion, shaderBytecode, samplers, cBuffers, attributes); default: throw new InvalidOperationException("stage"); } } private SamplerState ReadSamplerState() { SamplerState state = new SamplerState(); state.AddressU = (TextureAddressMode)ReadByte(); state.AddressV = (TextureAddressMode)ReadByte(); state.AddressW = (TextureAddressMode)ReadByte(); state.BorderColor = new Color( ReadByte(), ReadByte(), ReadByte(), ReadByte()); state.Filter = (TextureFilter)ReadByte(); state.MaxAnisotropy = ReadInt32(); state.MaxMipLevel = ReadInt32(); state.MipMapLevelOfDetailBias = ReadSingle(); return state; } private EffectParameterCollection ReadParameters() { int count = ReadInt32(); if (count == 0) return EffectParameterCollection.Empty; EffectParameter[] parameters = new EffectParameter[count]; for (int i = 0; i < count; i++) parameters[i] = ReadParameter(); return new EffectParameterCollection(parameters); } private EffectParameter ReadParameter() { EffectParameterClass class_ = (EffectParameterClass)ReadByte(); EffectParameterType type = (EffectParameterType)ReadByte(); string name = ReadString(); string semantic = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); int rowCount = (int)ReadByte(); int columnCount = (int)ReadByte(); EffectParameterCollection elements = ReadParameters(); EffectParameterCollection structMembers = ReadParameters(); object data = null; if (elements.Count == 0 && structMembers.Count == 0) { switch (type) { case EffectParameterType.Bool: if (_integersAsFloats) { // Booleans are stored in a float type. float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } else { // Booleans are stored in an integer type. int[] buffer = new int[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } break; case EffectParameterType.Int32: if (_integersAsFloats) { // Integers are stored in a float type. float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } else { int[] buffer = new int[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadInt32(); data = buffer; } break; case EffectParameterType.Single: { float[] buffer = new float[rowCount * columnCount]; for (int j = 0; j < buffer.Length; j++) buffer[j] = ReadSingle(); data = buffer; } break; case EffectParameterType.String: throw new NotImplementedException(); default: { Debug.WriteLine("Parameter {0} of type {1} is ignored", name, type.ToString()); // throw new NotImplementedException(); } break; } } return new EffectParameter( class_, type, name, rowCount, columnCount, columnCount, semantic, annotations, elements, structMembers, data, _integersAsFloats); } private EffectTechniqueCollection ReadTechniques(Effect effect) { int techniqueCount = ReadInt32(); EffectTechnique[] techniques = new EffectTechnique[techniqueCount]; for (int t = 0; t < techniqueCount; t++) { string name = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); EffectPassCollection passes = ReadPasses(effect); techniques[t] = new EffectTechnique(effect, name, passes, annotations); } return new EffectTechniqueCollection(techniques); } private EffectPassCollection ReadPasses(Effect effect) { int passesCount = ReadInt32(); EffectPass[] passes = new EffectPass[passesCount]; for (int i = 0; i < passesCount; i++) ReadEffectPass(effect, passes, i); return new EffectPassCollection(passes); } private void ReadEffectPass(Effect effect, EffectPass[] passes, int i) { string name = ReadString(); EffectAnnotationCollection annotations = ReadAnnotations(); // Get the vertex and pixel shader. VertexShader vertexShader = null; PixelShader pixelShader = null; { int vertexShaderIndex = ReadInt32(); int pixelShaderIndex = ReadInt32(); if (vertexShaderIndex >= 0) vertexShader = (VertexShader)effect._shaders[vertexShaderIndex]; if (pixelShaderIndex >= 0) pixelShader = (PixelShader)effect._shaders[pixelShaderIndex]; } BlendState blend = ReadBoolean() ? ReadBlendState() : null; DepthStencilState depth = ReadBoolean() ? ReadDepthStencilState() : null; RasterizerState rasterizer = ReadBoolean() ? ReadRasterizerState() : null; passes[i] = new EffectPass(effect, name, vertexShader, pixelShader, blend, depth, rasterizer, annotations); } private BlendState ReadBlendState() { return new BlendState { AlphaBlendFunction = (BlendFunction)ReadByte(), AlphaDestinationBlend = (Blend)ReadByte(), AlphaSourceBlend = (Blend)ReadByte(), BlendFactor = new Color(ReadByte(), ReadByte(), ReadByte(), ReadByte()), ColorBlendFunction = (BlendFunction)ReadByte(), ColorDestinationBlend = (Blend)ReadByte(), ColorSourceBlend = (Blend)ReadByte(), ColorWriteChannels = (ColorWriteChannels)ReadByte(), ColorWriteChannels1 = (ColorWriteChannels)ReadByte(), ColorWriteChannels2 = (ColorWriteChannels)ReadByte(), ColorWriteChannels3 = (ColorWriteChannels)ReadByte(), MultiSampleMask = ReadInt32(), }; } private DepthStencilState ReadDepthStencilState() { return new DepthStencilState { CounterClockwiseStencilDepthBufferFail = (StencilOperation)ReadByte(), CounterClockwiseStencilFail = (StencilOperation)ReadByte(), CounterClockwiseStencilFunction = (CompareFunction)ReadByte(), CounterClockwiseStencilPass = (StencilOperation)ReadByte(), DepthBufferEnable = ReadBoolean(), DepthBufferFunction = (CompareFunction)ReadByte(), DepthBufferWriteEnable = ReadBoolean(), ReferenceStencil = ReadInt32(), StencilDepthBufferFail = (StencilOperation)ReadByte(), StencilEnable = ReadBoolean(), StencilFail = (StencilOperation)ReadByte(), StencilFunction = (CompareFunction)ReadByte(), StencilMask = ReadInt32(), StencilPass = (StencilOperation)ReadByte(), StencilWriteMask = ReadInt32(), TwoSidedStencilMode = ReadBoolean(), }; } private RasterizerState ReadRasterizerState() { return new RasterizerState { CullMode = (CullMode)ReadByte(), DepthBias = ReadSingle(), FillMode = (FillMode)ReadByte(), MultiSampleAntiAlias = ReadBoolean(), ScissorTestEnable = ReadBoolean(), SlopeScaleDepthBias = ReadSingle(), }; } private EffectAnnotationCollection ReadAnnotations() { int count = (int)ReadInt32(); if (count == 0) return EffectAnnotationCollection.Empty; EffectAnnotation[] annotations = new EffectAnnotation[count]; // TODO: Annotations are not implemented! return new EffectAnnotationCollection(annotations); } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/SkinnedEffect.cs ================================================ #region File Description //----------------------------------------------------------------------------- // SkinnedEffect.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Graphics; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Built-in effect for rendering skinned character models. /// public class SkinnedEffect : Effect, IEffectMatrices, IEffectLights, IEffectFog, IEffectBones { public const int MaxBones = 72; #region Effect Parameters EffectParameter textureParam; EffectParameter diffuseColorParam; EffectParameter emissiveColorParam; EffectParameter specularColorParam; EffectParameter specularPowerParam; EffectParameter eyePositionParam; EffectParameter fogColorParam; EffectParameter fogVectorParam; EffectParameter worldParam; EffectParameter worldInverseTransposeParam; EffectParameter worldViewProjParam; EffectParameter bonesParam; #endregion #region Fields bool preferPerPixelLighting; bool _oneLight; bool fogEnabled; Matrix world = Matrix.Identity; Matrix view = Matrix.Identity; Matrix projection = Matrix.Identity; Matrix worldView; Vector3 diffuseColor = Vector3.One; Vector3 emissiveColor = Vector3.Zero; Vector3 ambientLightColor = Vector3.Zero; float alpha = 1; DirectionalLight light0; DirectionalLight light1; DirectionalLight light2; float fogStart = 0; float fogEnd = 1; int weightsPerVertex = 4; EffectDirtyFlags dirtyFlags = EffectDirtyFlags.All; #endregion #region Public Properties /// /// Gets or sets the world matrix. /// public Matrix World { get { return world; } set { world = value; dirtyFlags |= EffectDirtyFlags.World | EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog; } } /// /// Gets or sets the view matrix. /// public Matrix View { get { return view; } set { view = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.EyePosition | EffectDirtyFlags.Fog; } } /// /// Gets or sets the projection matrix. /// public Matrix Projection { get { return projection; } set { projection = value; dirtyFlags |= EffectDirtyFlags.WorldViewProj; } } /// /// Gets or sets the material diffuse color (range 0 to 1). /// public Vector3 DiffuseColor { get { return diffuseColor; } set { diffuseColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material emissive color (range 0 to 1). /// public Vector3 EmissiveColor { get { return emissiveColor; } set { emissiveColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the material specular color (range 0 to 1). /// public Vector3 SpecularColor { get { return specularColorParam.GetValueVector3(); } set { specularColorParam.SetValue(value); } } /// /// Gets or sets the material specular power. /// public float SpecularPower { get { return specularPowerParam.GetValueSingle(); } set { specularPowerParam.SetValue(value); } } /// /// Gets or sets the material alpha. /// public float Alpha { get { return alpha; } set { alpha = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets or sets the per-pixel lighting prefer flag. /// public bool PreferPerPixelLighting { get { return preferPerPixelLighting; } set { if (preferPerPixelLighting != value) { preferPerPixelLighting = value; UpdateCurrentTechnique(); } } } /// /// Gets or sets the ambient light color (range 0 to 1). /// public Vector3 AmbientLightColor { get { return ambientLightColor; } set { ambientLightColor = value; dirtyFlags |= EffectDirtyFlags.MaterialColor; } } /// /// Gets the first directional light. /// public DirectionalLight DirectionalLight0 { get { return light0; } } /// /// Gets the second directional light. /// public DirectionalLight DirectionalLight1 { get { return light1; } } /// /// Gets the third directional light. /// public DirectionalLight DirectionalLight2 { get { return light2; } } /// /// Gets or sets the fog enable flag. /// public bool FogEnabled { get { return fogEnabled; } set { if (fogEnabled != value) { fogEnabled = value; dirtyFlags |= EffectDirtyFlags.FogEnable; UpdateCurrentTechnique(); } } } /// /// Gets or sets the fog start distance. /// public float FogStart { get { return fogStart; } set { fogStart = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog end distance. /// public float FogEnd { get { return fogEnd; } set { fogEnd = value; dirtyFlags |= EffectDirtyFlags.Fog; } } /// /// Gets or sets the fog color. /// public Vector3 FogColor { get { return fogColorParam.GetValueVector3(); } set { fogColorParam.SetValue(value); } } /// /// Gets or sets the current texture. /// public Texture2D Texture { get { return textureParam.GetValueTexture2D(); } set { textureParam.SetValue(value); } } /// /// Gets or sets the number of skinning weights to evaluate for each vertex (1, 2, or 4). /// public int WeightsPerVertex { get { return weightsPerVertex; } set { if ((value != 1) && (value != 2) && (value != 4)) { throw new ArgumentOutOfRangeException("value"); } weightsPerVertex = value; UpdateCurrentTechnique(); } } /// /// Sets an array of skinning bone transform matrices. /// public void SetBoneTransforms(Matrix[] boneTransforms) { if ((boneTransforms == null) || (boneTransforms.Length == 0)) throw new ArgumentNullException("boneTransforms"); if (boneTransforms.Length > MaxBones) throw new ArgumentException(); bonesParam.SetValue(boneTransforms); } /// /// Gets a copy of the current skinning bone transform matrices. /// public Matrix[] GetBoneTransforms(int count) { if (count <= 0 || count > MaxBones) throw new ArgumentOutOfRangeException("count"); Matrix[] bones = bonesParam.GetValueMatrixArray(count); // Convert matrices from 43 to 44 format. for (int i = 0; i < bones.Length; i++) { bones[i].M44 = 1; } return bones; } /// /// This effect requires lighting, so we explicitly implement /// IEffectLights.LightingEnabled, and do not allow turning it off. /// bool IEffectLights.LightingEnabled { get { return true; } set { if (!value) throw new NotSupportedException("SkinnedEffect does not support setting LightingEnabled to false."); } } #endregion #region Methods /// /// Creates a new SkinnedEffect with default parameter settings. /// public SkinnedEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameSkinnedEffect)) { CacheEffectParameters(null); DirectionalLight0.Enabled = true; SpecularColor = Vector3.One; SpecularPower = 16; Matrix[] identityBones = new Matrix[MaxBones]; for (int i = 0; i < MaxBones; i++) { identityBones[i] = Matrix.Identity; } SetBoneTransforms(identityBones); } /// /// Creates a new SkinnedEffect by cloning parameter settings from an existing instance. /// protected SkinnedEffect(SkinnedEffect cloneSource) : base(cloneSource) { CacheEffectParameters(cloneSource); preferPerPixelLighting = cloneSource.preferPerPixelLighting; fogEnabled = cloneSource.fogEnabled; world = cloneSource.world; view = cloneSource.view; projection = cloneSource.projection; diffuseColor = cloneSource.diffuseColor; emissiveColor = cloneSource.emissiveColor; ambientLightColor = cloneSource.ambientLightColor; alpha = cloneSource.alpha; fogStart = cloneSource.fogStart; fogEnd = cloneSource.fogEnd; weightsPerVertex = cloneSource.weightsPerVertex; } /// /// Creates a clone of the current SkinnedEffect instance. /// public override Effect Clone() { return new SkinnedEffect(this); } /// /// Sets up the standard key/fill/back lighting rig. /// public void EnableDefaultLighting() { AmbientLightColor = EffectHelpers.EnableDefaultLighting(light0, light1, light2); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters(SkinnedEffect cloneSource) { textureParam = Parameters["Texture"]; diffuseColorParam = Parameters["DiffuseColor"]; emissiveColorParam = Parameters["EmissiveColor"]; specularColorParam = Parameters["SpecularColor"]; specularPowerParam = Parameters["SpecularPower"]; eyePositionParam = Parameters["EyePosition"]; fogColorParam = Parameters["FogColor"]; fogVectorParam = Parameters["FogVector"]; worldParam = Parameters["World"]; worldInverseTransposeParam = Parameters["WorldInverseTranspose"]; worldViewProjParam = Parameters["WorldViewProj"]; bonesParam = Parameters["Bones"]; light0 = new DirectionalLight(Parameters["DirLight0Direction"], Parameters["DirLight0DiffuseColor"], Parameters["DirLight0SpecularColor"], (cloneSource != null) ? cloneSource.light0 : null); light1 = new DirectionalLight(Parameters["DirLight1Direction"], Parameters["DirLight1DiffuseColor"], Parameters["DirLight1SpecularColor"], (cloneSource != null) ? cloneSource.light1 : null); light2 = new DirectionalLight(Parameters["DirLight2Direction"], Parameters["DirLight2DiffuseColor"], Parameters["DirLight2SpecularColor"], (cloneSource != null) ? cloneSource.light2 : null); light1.EnabledChanged += Light_EnabledChanged; light2.EnabledChanged += Light_EnabledChanged; } private void Light_EnabledChanged(object sender, EventArgs e) { _oneLight = !light1.Enabled && !light2.Enabled; UpdateCurrentTechnique(); } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { // Recompute the world+view+projection matrix or fog vector? dirtyFlags = EffectHelpers.SetWorldViewProjAndFog(dirtyFlags, ref world, ref view, ref projection, ref worldView, fogEnabled, fogStart, fogEnd, worldViewProjParam, fogVectorParam); // Recompute the world inverse transpose and eye position? dirtyFlags = EffectHelpers.SetLightingMatrices(dirtyFlags, ref world, ref view, worldParam, worldInverseTransposeParam, eyePositionParam); // Recompute the diffuse/emissive/alpha material color parameters? if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0) { EffectHelpers.SetMaterialColor(true, alpha, ref diffuseColor, ref emissiveColor, ref ambientLightColor, diffuseColorParam, emissiveColorParam); dirtyFlags &= ~EffectDirtyFlags.MaterialColor; } } private void UpdateCurrentTechnique() { int shaderIndex = 0; if (fogEnabled) shaderIndex += 1; if (weightsPerVertex == 2) shaderIndex += 2; else if (weightsPerVertex == 4) shaderIndex += 4; if (preferPerPixelLighting) shaderIndex += 12; else if (_oneLight) // oneLight shaderIndex += 6; CurrentTechnique = Techniques[shaderIndex]; } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Effect/SpriteEffect.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { /// /// The default effect used by SpriteBatch. /// public class SpriteEffect : Effect { private EffectParameter _matrixParam; private Viewport _lastViewport; private Matrix _projection; /// /// Creates a new SpriteEffect. /// public SpriteEffect(GraphicsDevice device) : base(device, ((IPlatformGraphicsDevice)device).Strategy.GetResourceStreamBytes(GraphicsDeviceStrategy.ResourceNameSpriteEffect)) { CacheEffectParameters(); // initialize static values of _projection. _projection = Matrix.CreateTranslation(-1f, 1f, 0); } /// /// An optional matrix used to transform the sprite geometry. Uses if null. /// public Matrix? TransformMatrix { get; set; } /// /// Creates a new SpriteEffect by cloning parameter settings from an existing instance. /// protected SpriteEffect(SpriteEffect cloneSource) : base(cloneSource) { CacheEffectParameters(); // initialize static values of _projection. _projection = Matrix.CreateTranslation(-1f, 1f, 0); } /// /// Creates a clone of the current SpriteEffect instance. /// public override Effect Clone() { return new SpriteEffect(this); } /// /// Looks up shortcut references to our effect parameters. /// void CacheEffectParameters() { _matrixParam = Parameters["MatrixTransform"]; } /// /// Lazily computes derived parameter values immediately before applying the effect. /// protected internal override void OnApply() { Viewport vp = GraphicsDevice.Viewport; if ((vp.Width != _lastViewport.Width) || (vp.Height != _lastViewport.Height)) { // Normal 3D cameras look into the -z direction (z = 1 is in front of z = 0). The // sprite batch layer depth is the opposite (z = 0 is in front of z = 1). // --> We get the correct matrix with near plane 0 and far plane -1. //Matrix.CreateOrthographicOffCenter(0, vp.Width, vp.Height, 0, 0, -1, out _projection); // static values of _projection were set in the constuctor as Matrix.CreateTranslation(-1f, 1f, 0). // we calculate only M11,M22 and M41,M42 if (GraphicsDevice.UseHalfPixelOffset) { float texelW = (1f / vp.Width); float texelH = (1f / vp.Height); _projection.M11 = (2f * texelW); _projection.M22 = -(2f * texelH); _projection.M41 = -(1f + texelW); _projection.M42 = (1f + texelH); } else { _projection.M11 = (2f / vp.Width); _projection.M22 = -(2f / vp.Height); } _lastViewport = vp; } if (TransformMatrix.HasValue) { // OPT: Matrix transform = TransformMatrix.Value * _projection; Matrix transform = TransformMatrix.Value; // copy M13,M14,M23,M24,M33,M34,M43,M44. // calculate M11,M12,M21,M22,M31,M32,M41,M42. if (GraphicsDevice.UseHalfPixelOffset) { transform.M11 = ((transform.M11 * _projection.M11) + (transform.M14 * _projection.M41)); transform.M12 = ((transform.M12 * _projection.M22) + (transform.M14 * _projection.M42)); transform.M21 = ((transform.M21 * _projection.M11) + (transform.M24 * _projection.M41)); transform.M22 = ((transform.M22 * _projection.M22) + (transform.M24 * _projection.M42)); transform.M31 = ((transform.M31 * _projection.M11) + (transform.M34 * _projection.M41)); transform.M32 = ((transform.M32 * _projection.M22) + (transform.M34 * _projection.M42)); transform.M41 = ((transform.M41 * _projection.M11) + (transform.M44 * _projection.M41)); transform.M42 = ((transform.M42 * _projection.M22) + (transform.M44 * _projection.M42)); } else { transform.M11 = ((transform.M11 * _projection.M11) - transform.M14); transform.M12 = ((transform.M12 * _projection.M22) + transform.M14); transform.M21 = ((transform.M21 * _projection.M11) - transform.M24); transform.M22 = ((transform.M22 * _projection.M22) + transform.M24); transform.M31 = ((transform.M31 * _projection.M11) - transform.M34); transform.M32 = ((transform.M32 * _projection.M22) + transform.M34); transform.M41 = ((transform.M41 * _projection.M11) - transform.M44); transform.M42 = ((transform.M42 * _projection.M22) + transform.M44); } _matrixParam.SetValue(transform); } else _matrixParam.SetValue(_projection); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsAdapter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.ObjectModel; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public sealed class GraphicsAdapter : IPlatformGraphicsAdapter { private GraphicsAdapterStrategy _strategy; GraphicsAdapterStrategy IPlatformGraphicsAdapter.Strategy { get { return _strategy; } } public static ReadOnlyCollection Adapters { get { return GraphicsAdaptersProviderStrategy.Current.Platform_Adapters; } } public static GraphicsAdapter DefaultAdapter { get { return GraphicsAdaptersProviderStrategy.Current.Platform_DefaultAdapter; } } /// /// Used to request creation of the reference graphics device, /// or the default hardware accelerated device (when set to false). /// /// /// This only works on DirectX platforms where a reference graphics /// device is available and must be defined before the graphics device /// is created. It defaults to false. /// public static bool UseReferenceDevice { get { return GraphicsAdaptersProviderStrategy.Current.Platform_UseReferenceDevice; } set { GraphicsAdaptersProviderStrategy.Current.Platform_UseReferenceDevice = value; } } public string DeviceName { get { return _strategy.Platform_DeviceName; } } public string Description { get { return _strategy.Platform_Description; } } public int DeviceId { get { return _strategy.Platform_DeviceId; } } public int Revision { get { return _strategy.Platform_Revision; } } public int VendorId { get { return _strategy.Platform_VendorId; } } public int SubSystemId { get { return _strategy.Platform_SubSystemId; } } public IntPtr MonitorHandle { get { return _strategy.Platform_MonitorHandle; } } public bool IsDefaultAdapter { get { return _strategy.Platform_IsDefaultAdapter; } } public DisplayModeCollection SupportedDisplayModes { get { return _strategy.Platform_SupportedDisplayModes; } } public DisplayMode CurrentDisplayMode { get { return _strategy.Platform_CurrentDisplayMode; } } /// /// Returns true if the is widescreen. /// /// /// Common widescreen modes include 16:9, 16:10 and 2:1. /// public bool IsWideScreen { get { return _strategy.Platform_IsWideScreen; } } public GraphicsBackend Backend { get { return _strategy.Backend; } } internal GraphicsAdapter(GraphicsAdapterStrategy strategy) { _strategy = strategy; } public bool QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { return _strategy.Platform_QueryBackBufferFormat( graphicsProfile, format, depthFormat, multiSampleCount, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount ); } /// /// Queries for support of the requested render target format on the adaptor. /// /// The graphics profile. /// The requested surface format. /// The requested depth stencil format. /// The requested multisample count. /// Set to the best format supported by the adaptor for the requested surface format. /// Set to the best format supported by the adaptor for the requested depth stencil format. /// Set to the best count supported by the adaptor for the requested multisample count. /// True if the requested format is supported by the adaptor. False if one or more of the values was changed. public bool QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { return _strategy.Platform_QueryRenderTargetFormat( graphicsProfile, format, depthFormat, multiSampleCount, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount ); } public bool IsProfileSupported(GraphicsProfile graphicsProfile) { return _strategy.Platform_IsProfileSupported(graphicsProfile); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsAdapterStrategy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformGraphicsAdapter { GraphicsAdapterStrategy Strategy { get; } } public abstract class GraphicsAdapterStrategy { public virtual string Platform_DeviceName { get; set; } public virtual string Platform_Description { get; set; } public virtual int Platform_DeviceId { get; set; } public virtual int Platform_Revision { get; set; } public virtual int Platform_VendorId { get; set; } public virtual int Platform_SubSystemId { get; set; } public virtual IntPtr Platform_MonitorHandle { get; set; } public virtual bool Platform_IsDefaultAdapter { get; set; } public abstract DisplayModeCollection Platform_SupportedDisplayModes { get; } public abstract DisplayMode Platform_CurrentDisplayMode { get; } public abstract bool Platform_IsWideScreen { get; } public abstract GraphicsBackend Backend { get; } public abstract bool Platform_IsProfileSupported(GraphicsProfile graphicsProfile); public abstract bool Platform_IsShaderBackendSupported(GraphicsBackend shaderBackend); public abstract bool Platform_IsShaderProfileSupported(ShaderProfileType shaderProfile); public abstract bool Platform_QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount); public abstract bool Platform_QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount); public T ToConcrete() where T : GraphicsAdapterStrategy { return (T)this; } protected DisplayMode CreateDisplayMode(int width, int height, SurfaceFormat format) { return new DisplayMode(width, height, format); } protected DisplayModeCollection CreateDisplayModeCollection(List modes) { return new DisplayModeCollection(modes); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsAdaptersProviderStrategy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.ObjectModel; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public abstract class GraphicsAdaptersProviderStrategy { private static GraphicsAdaptersProviderStrategy _current; internal static GraphicsAdaptersProviderStrategy Current { get { lock (typeof(GraphicsAdaptersProviderStrategy)) { if (_current == null) _current = GraphicsFactory.Current.CreateGraphicsAdaptersProviderStrategy(); return _current; } } } public abstract ReadOnlyCollection Platform_Adapters { get; } public abstract GraphicsAdapter Platform_DefaultAdapter { get; } public virtual bool Platform_UseReferenceDevice { get; set; } public T ToConcrete() where T : GraphicsAdaptersProviderStrategy { return (T)this; } protected GraphicsAdapter CreateGraphicsAdapter(GraphicsAdapterStrategy adapterStrategy) { return new GraphicsAdapter(adapterStrategy); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsBackend.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Graphics { public enum GraphicsBackend { OpenGL = 0x0011, GLES = 0x0012, WebGL = 0x0014, DirectX11 = 0x0021, DirectX12 = 0x0022, WebGPU = 0x0041, Vulkan = 0x0081, Metal = 0x0101, } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { /// /// Provides information about the capabilities of the /// current graphics device. A very useful thread for investigating GL extenion names /// http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices /// public abstract class GraphicsCapabilities { /// /// Whether the device supports anisotropic texture filtering /// public bool SupportsTextureFilterAnisotropic { get; protected set; } public bool SupportsDepth24 { get; protected set; } public bool SupportsPackedDepthStencil { get; protected set; } public bool SupportsDepthNonLinear { get; protected set; } public bool SupportsBgra5551 { get; protected set; } public bool SupportsAbgr5551 { get; protected set; } public bool SupportsBgra4444 { get; protected set; } public bool SupportsAbgr4444 { get; protected set; } /// /// Gets the support for DXT1 /// public bool SupportsDxt1 { get; protected set; } /// /// Gets the support for S3TC (DXT1, DXT3, DXT5) /// public bool SupportsS3tc { get; protected set; } /// /// Gets the support for PVRTC /// public bool SupportsPvrtc { get; protected set; } /// /// Gets the support for ETC1 /// public bool SupportsEtc1 { get; protected set; } /// /// Gets the support for ETC2 /// public bool SupportsEtc2 { get; protected set; } /// /// Gets the support for ATITC /// public bool SupportsAtitc { get; protected set; } public bool SupportsTextureMaxLevel { get; protected set; } /// /// True, if sRGB is supported. On Direct3D platforms, this is always true. /// On OpenGL platforms, it is true if both framebuffer sRGB /// and texture sRGB are supported. /// public bool SupportsSRgb { get; protected set; } public bool SupportsTextureArrays { get; protected set; } public bool SupportsDepthClamp { get; protected set; } protected int _maxTextureSize; protected int _maxTextureSlots; protected int _maxVertexTextureSlots; internal int MaxTextureSize { get { return _maxTextureSize; } } internal int MaxTextureSlots { get { return _maxTextureSlots; } } internal int MaxVertexTextureSlots { get { return _maxVertexTextureSlots; } } protected int _maxVertexBufferSlots; public int MaxVertexBufferSlots { get { return _maxVertexBufferSlots; } } /// /// True, if the underlying platform supports floating point textures. /// For Direct3D platforms this is always true. /// For OpenGL Desktop platforms it is always true. /// For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_float`. /// If the requested format is not supported an NotSupportedException /// will be thrown. /// public bool SupportsFloatTextures { get; protected set; } /// /// True, if the underlying platform supports half floating point textures. /// For Direct3D platforms this is always true. /// For OpenGL Desktop platforms it is always true. /// For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_half_float`. /// If the requested format is not supported an NotSupportedException /// will be thrown. /// public bool SupportsHalfFloatTextures { get; protected set; } public bool SupportsNormalized { get; protected set; } /// /// Gets the max texture anisotropy. This value typically lies /// between 0 and 16, where 0 means anisotropic filtering is not /// supported. /// public int MaxTextureAnisotropy { get; protected set; } public bool SupportsInstancing { get; protected set; } public bool SupportsBaseIndexInstancing { get; protected set; } public bool SupportsSeparateBlendStates { get; protected set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsContext.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public sealed class GraphicsContext : IDisposable , IPlatformGraphicsContext { private GraphicsContextStrategy _strategy; private GraphicsDeviceStrategy _deviceStrategy; private bool _isDisposed = false; private readonly RenderTargetBinding[] _singleRenderTargetBinding = new RenderTargetBinding[1]; GraphicsContextStrategy IPlatformGraphicsContext.Strategy { get { return _strategy; } } GraphicsDeviceStrategy IPlatformGraphicsContext.DeviceStrategy { get { return _deviceStrategy; } } internal GraphicsContext(GraphicsDevice device) : this(((IPlatformGraphicsDevice)device).Strategy) { } internal GraphicsContext(GraphicsDeviceStrategy deviceStrategy) { _deviceStrategy = deviceStrategy; _strategy = deviceStrategy.CreateGraphicsContextStrategy(this); } /// /// The rendering information for debugging and profiling. /// The metrics are reset every frame after draw within . /// public GraphicsMetrics Metrics { get { return _strategy._graphicsMetrics; } set { _strategy._graphicsMetrics = value; } } /// /// Get or set the color a is cleared to when it is set. /// public Color DiscardColor { get { return _strategy.DiscardColor; } set { _strategy.DiscardColor = value; } } /// /// Access debugging APIs for the graphics subsystem. /// public GraphicsDebug GraphicsDebug { get { return _strategy.GraphicsDebug; } set { _strategy.GraphicsDebug = value; } } public Rectangle ScissorRectangle { get { return _strategy.ScissorRectangle; } set { _strategy.ScissorRectangle = value; } } public Viewport Viewport { get { return _strategy.Viewport; } set { _strategy.Viewport = value; } } public BlendState BlendState { get { return _strategy.BlendState; } set { _strategy.BlendState = value; } } public Color BlendFactor { get { return _strategy.BlendFactor; } set { _strategy.BlendFactor = value; } } public DepthStencilState DepthStencilState { get { return _strategy.DepthStencilState; } set { _strategy.DepthStencilState = value; } } public RasterizerState RasterizerState { get { return _strategy.RasterizerState; } set { _strategy.RasterizerState = value; } } public SamplerStateCollection SamplerStates { get { return _strategy.SamplerStates; } } public SamplerStateCollection VertexSamplerStates { get { return _strategy.VertexSamplerStates; } } public TextureCollection Textures { get { return _strategy.Textures; } } public TextureCollection VertexTextures { get { return _strategy.VertexTextures; } } public IndexBuffer Indices { get { return _strategy.Indices; } set { _strategy.Indices = value; } } public void Clear(Color color) { ClearOptions options = ClearOptions.Target | ClearOptions.DepthBuffer | ClearOptions.Stencil; _strategy.Clear(options, color.ToVector4(), _strategy.Viewport.MaxDepth, 0); } public void Clear(ClearOptions options, Color color, float depth, int stencil) { _strategy.Clear(options, color.ToVector4(), depth, stencil); } public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { _strategy.Clear(options, color, depth, stencil); } public void SetVertexBuffer(VertexBuffer vertexBuffer) { _strategy.SetVertexBuffer(vertexBuffer); } public void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset) { _strategy.SetVertexBuffer(vertexBuffer, vertexOffset); } public void SetVertexBuffers(VertexBufferBinding[] vertexBuffers) { _strategy.SetVertexBuffers(vertexBuffers); } internal VertexShader VertexShader { get { return _strategy.VertexShader; } set { _strategy.VertexShader = value; } } internal PixelShader PixelShader { get { return _strategy.PixelShader; } set { _strategy.PixelShader = value; } } /// /// Retrieves the currently bound render targets as an array. /// /// An array of representing the current render targets. internal RenderTargetBinding[] GetRenderTargets() { return _strategy.GetRenderTargets(); } /// /// Copies the currently bound render targets into the provided array. /// /// The array to store the current render targets. /// GraphicsProfile.Reach supports a maximum of 1 simultaneous rendertargets. /// GraphicsProfile.HiDef supports a maximum of 4 simultaneous rendertargets. /// GraphicsProfile.FL10_0 supports a maximum of 8 simultaneous rendertargets. /// /// The number of render targets copied. /// This is a MonoGame extension public int GetRenderTargets(RenderTargetBinding[] bindings) { return _strategy.GetRenderTargets(bindings); } public void SetRenderTarget(RenderTarget2D renderTarget) { if (renderTarget == null) { SetRenderTargets(null); } else { _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget); SetRenderTargets(_singleRenderTargetBinding); } } public void SetRenderTarget(RenderTargetCube renderTarget, CubeMapFace cubeMapFace) { if (renderTarget == null) { SetRenderTargets(null); } else { _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, cubeMapFace); SetRenderTargets(_singleRenderTargetBinding); } } /// Only implemented for DirectX public void SetRenderTarget(RenderTarget2D renderTarget, int arraySlice) { if (!_strategy.Capabilities.SupportsTextureArrays) throw new InvalidOperationException("Texture arrays are not supported on this graphics device"); if (renderTarget == null) { SetRenderTargets(null); } else { _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, arraySlice); SetRenderTargets(_singleRenderTargetBinding); } } /// Only implemented for DirectX public void SetRenderTarget(RenderTarget3D renderTarget, int arraySlice) { if (renderTarget == null) { SetRenderTargets(null); } else { _singleRenderTargetBinding[0] = new RenderTargetBinding(renderTarget, arraySlice); SetRenderTargets(_singleRenderTargetBinding); } } public void SetRenderTargets(params RenderTargetBinding[] renderTargets) { // Avoid having to check for both null and zero length array. int renderTargetCount = 0; if (renderTargets != null) { renderTargetCount = renderTargets.Length; if (renderTargetCount == 0) renderTargets = null; } if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && renderTargetCount > 1) throw new NotSupportedException("Reach profile supports a maximum of 1 simultaneous rendertargets"); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && renderTargetCount > 4) throw new NotSupportedException("HiDef profile supports a maximum of 4 simultaneous rendertargets"); if (renderTargetCount > 8) throw new NotSupportedException("Current profile supports a maximum of 8 simultaneous rendertargets"); // Try to early out if the current and new bindings are equal. if (_strategy.RenderTargetCount == renderTargetCount) { bool isEqual = true; for (int i = 0; i < _strategy.RenderTargetCount; i++) { if (_strategy.CurrentRenderTargetBindings[i].RenderTarget != renderTargets[i].RenderTarget || _strategy.CurrentRenderTargetBindings[i].ArraySlice != renderTargets[i].ArraySlice) { isEqual = false; break; } } if (isEqual) return; } _strategy.ApplyRenderTargets(renderTargets); } /// /// Draw geometry by indexing into the vertex buffer. /// /// The type of primitives in the index buffer. /// A hint of the lowest vertex indexed relative to baseVertex. /// A hint of the maximum vertex indexed. /// This is unused and remains here only for XNA API compatibility. /// The index within the index buffer to start drawing from. /// The number of primitives to render from the index buffer. public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { if (_strategy._vertexBuffers.Count == 0) throw new InvalidOperationException("Vertex buffer must be set before calling DrawIndexedPrimitives."); if (_strategy.Indices == null) throw new InvalidOperationException("Index buffer must be set before calling DrawIndexedPrimitives."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawIndexedPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawIndexedPrimitives."); _strategy.DrawIndexedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } /// /// Draw geometry by indexing into the vertex buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives to render from the index buffer. public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { if (_strategy._vertexBuffers.Count == 0) throw new InvalidOperationException("Vertex buffer must be set before calling DrawIndexedPrimitives."); if (_strategy.Indices == null) throw new InvalidOperationException("Index buffer must be set before calling DrawIndexedPrimitives."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawIndexedPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawIndexedPrimitives."); _strategy.DrawIndexedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount); } /// /// Draw primitives of the specified type from the data in an array of vertices without indexing. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex that should be rendered. /// The number of primitives to draw. /// The will be found by getting /// from an instance of and cached for subsequent calls. public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct, IVertexType { VertexDeclaration vertexDeclaration = VertexDeclarationCache.VertexDeclaration; DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type from the data in the given array of vertices without indexing. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex that should be rendered. /// The number of primitives to draw. /// The layout of the vertices. public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { if (vertexData == null) throw new ArgumentNullException("vertexData"); if (vertexData.Length == 0) throw new ArgumentOutOfRangeException("vertexData"); if (vertexOffset < 0 || vertexOffset >= vertexData.Length) throw new ArgumentOutOfRangeException("vertexOffset"); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); int vertexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); if (vertexOffset + vertexCount > vertexData.Length) throw new ArgumentOutOfRangeException("primitiveCount"); if (vertexDeclaration == null) throw new ArgumentNullException("vertexDeclaration"); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawUserPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawUserPrimitives."); _strategy.DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration, vertexCount); } /// /// Draw primitives of the specified type from the currently bound vertexbuffers without indexing. /// /// The type of primitives to draw. /// Index of the vertex to start at. /// The number of primitives to draw. public void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount) { if (_strategy._vertexBuffers.Count == 0) throw new InvalidOperationException("Vertex buffer must be set before calling DrawPrimitives."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawPrimitives."); int vertexCount = GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount); _strategy.DrawPrimitives(primitiveType, vertexStart, primitiveCount, vertexCount); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The will be found by getting /// from an instance of and cached for subsequent calls. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { VertexDeclaration vertexDeclaration = VertexDeclarationCache.VertexDeclaration; DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The layout of the vertices. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { if (vertexData == null || vertexData.Length == 0) throw new ArgumentNullException("vertexData"); if (vertexOffset < 0 || vertexOffset >= vertexData.Length) throw new ArgumentOutOfRangeException("vertexOffset"); if (numVertices <= 0 || numVertices > vertexData.Length) throw new ArgumentOutOfRangeException("numVertices"); if (vertexOffset + numVertices > vertexData.Length) throw new ArgumentOutOfRangeException("numVertices"); if (indexData == null || indexData.Length == 0) throw new ArgumentNullException("indexData"); if (indexOffset < 0 || indexOffset >= indexData.Length) throw new ArgumentOutOfRangeException("indexOffset"); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (indexOffset + GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount) > indexData.Length) throw new ArgumentOutOfRangeException("primitiveCount"); if (vertexDeclaration == null) throw new ArgumentNullException("vertexDeclaration"); if (vertexDeclaration.VertexStride < ReflectionHelpers.SizeOf()) throw new ArgumentOutOfRangeException("vertexDeclaration", "Vertex stride of vertexDeclaration should be at least as big as the stride of the actual vertices."); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawUserIndexedPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawUserIndexedPrimitives."); _strategy.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The will be found by getting /// from an instance of and cached for subsequent calls. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { VertexDeclaration vertexDeclaration = VertexDeclarationCache.VertexDeclaration; DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The layout of the vertices. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Reach profile does not support 32 bit indices"); if (vertexData == null || vertexData.Length == 0) throw new ArgumentNullException("vertexData"); if (vertexOffset < 0 || vertexOffset >= vertexData.Length) throw new ArgumentOutOfRangeException("vertexOffset"); if (numVertices <= 0 || numVertices > vertexData.Length) throw new ArgumentOutOfRangeException("numVertices"); if (vertexOffset + numVertices > vertexData.Length) throw new ArgumentOutOfRangeException("numVertices"); if (indexData == null || indexData.Length == 0) throw new ArgumentNullException("indexData"); if (indexOffset < 0 || indexOffset >= indexData.Length) throw new ArgumentOutOfRangeException("indexOffset"); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach && primitiveCount > 65535) throw new NotSupportedException("Reach profile supports a maximum of 65535 primitives per draw call."); if (_deviceStrategy.GraphicsProfile == GraphicsProfile.HiDef && primitiveCount > 1048575) throw new NotSupportedException("HiDef profile supports a maximum of 1048575 primitives per draw call."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (indexOffset + GraphicsContextStrategy.GetElementCountArray(primitiveType, primitiveCount) > indexData.Length) throw new ArgumentOutOfRangeException("primitiveCount"); if (vertexDeclaration == null) throw new ArgumentNullException("vertexDeclaration"); if (vertexDeclaration.VertexStride < ReflectionHelpers.SizeOf()) throw new ArgumentOutOfRangeException("vertexDeclaration", "Vertex stride of vertexDeclaration should be at least as big as the stride of the actual vertices."); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawUserIndexedPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawUserIndexedPrimitives."); _strategy.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// This is unused and remains here only for XNA API compatibility. /// This is unused and remains here only for XNA API compatibility. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// The number of instances to render. /// Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) { DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, 0, instanceCount); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// The number of instances to render. /// Draw geometry with data from multiple bound vertex streams at different frequencies. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int instanceCount) { DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, 0, instanceCount); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// Used to offset the instance range indexed from the instance buffer. /// The number of instances to render. /// Draw geometry with data from multiple bound vertex streams at different frequencies. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { if (_deviceStrategy.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Reach profile does not support Instancing."); if (_strategy._vertexBuffers.Count == 0) throw new InvalidOperationException("Vertex buffer must be set before calling DrawInstancedPrimitives."); if (_strategy.Indices == null) throw new InvalidOperationException("Index buffer must be set before calling DrawInstancedPrimitives."); if (primitiveCount <= 0) throw new ArgumentOutOfRangeException("primitiveCount"); if (_strategy.VertexShader == null) throw new InvalidOperationException("Vertex shader must be set before calling DrawInstancedPrimitives."); if (_strategy.PixelShader == null) throw new InvalidOperationException("Pixel shader must be set before calling DrawInstancedPrimitives."); _strategy.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, baseInstance, instanceCount); } /// /// Sends queued-up commands in the command buffer to the graphics processing unit (GPU). /// public void Flush() { _strategy.Flush(); } #region IDisposable Members ~GraphicsContext() { Dispose(false); } public void Dispose() { ThrowIfDisposed(); { Dispose(true); GC.SuppressFinalize(this); _isDisposed = true; } } private void Dispose(bool disposing) { if (disposing) { if (_strategy != null) _strategy.Dispose(); _strategy = null; _deviceStrategy = null; } } //[Conditional("DEBUG")] private void ThrowIfDisposed() { if (!_isDisposed) return; throw new ObjectDisposedException("Object is Disposed."); } #endregion IDisposable Members } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsContextStrategy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformGraphicsContext { GraphicsContextStrategy Strategy { get; } GraphicsDeviceStrategy DeviceStrategy { get; } } public abstract class GraphicsContextStrategy : IDisposable { private GraphicsContext _context; public GraphicsContext Context { get { return _context; } } private bool _isDisposed = false; internal GraphicsMetrics _graphicsMetrics; protected internal GraphicsCapabilities _capabilities; public GraphicsCapabilities Capabilities { get { return _capabilities; } } protected internal Rectangle _scissorRectangle; protected internal bool _scissorRectangleDirty; public Viewport _viewport; // states private BlendState _blendState; private Color _blendFactor = Color.White; private DepthStencilState _depthStencilState; private RasterizerState _rasterizerState; internal SamplerStateCollection _vertexSamplerStates; internal SamplerStateCollection _pixelSamplerStates; // states dirty flags protected internal bool _blendStateDirty; protected internal bool _blendFactorDirty; protected internal bool _depthStencilStateDirty; protected internal bool _rasterizerStateDirty; // actual states public BlendState _actualBlendState; public DepthStencilState _actualDepthStencilState; public RasterizerState _actualRasterizerState; // predefined states internal BlendState _blendStateAdditive; internal BlendState _blendStateAlphaBlend; internal BlendState _blendStateNonPremultiplied; internal BlendState _blendStateOpaque; internal DepthStencilState _depthStencilStateDefault; internal DepthStencilState _depthStencilStateDepthRead; internal DepthStencilState _depthStencilStateNone; internal RasterizerState _rasterizerStateCullClockwise; internal RasterizerState _rasterizerStateCullCounterClockwise; internal RasterizerState _rasterizerStateCullNone; // shaders private VertexShader _vertexShader; private PixelShader _pixelShader; protected internal ConstantBufferCollection _vertexConstantBuffers; protected internal ConstantBufferCollection _pixelConstantBuffers; // shaders dirty flags protected internal bool _vertexShaderDirty; protected internal bool _pixelShaderDirty; // buffers private IndexBuffer _indexBuffer; protected internal VertexBufferCollection _vertexBuffers; // buffers dirty flags public bool _indexBufferDirty; public bool _vertexBuffersDirty; // textures internal TextureCollection _vertexTextures; internal TextureCollection _pixelTextures; private readonly RenderTargetBinding[] _currentRenderTargetBindings = new RenderTargetBinding[8]; protected int _currentRenderTargetCount; private static RenderTargetBinding[] _emptyRenderTargetBindings = new RenderTargetBinding[0]; private Color _discardColor = new Color(68, 34, 136, 255); private GraphicsDebug _graphicsDebug; public readonly object SyncHandle = new object(); public RenderTargetBinding[] CurrentRenderTargetBindings { get { return _currentRenderTargetBindings; } } public int RenderTargetCount { get { return _currentRenderTargetCount; } } public bool IsRenderTargetBound { get { return _currentRenderTargetCount > 0; } } /// /// Get or set the color a is cleared to when it is set. /// public Color DiscardColor { get { return _discardColor; } set { _discardColor = value; } } /// /// Access debugging APIs for the graphics subsystem. /// public GraphicsDebug GraphicsDebug { get { return _graphicsDebug; } set { _graphicsDebug = value; } } public Rectangle ScissorRectangle { get { return _scissorRectangle; } set { if (_scissorRectangle == value) return; _scissorRectangle = value; _scissorRectangleDirty = true; } } virtual public Viewport Viewport { get { return _viewport; } set { _viewport = value; } } public BlendState BlendState { get { return _blendState; } set { if (value == null) throw new ArgumentNullException("value"); // Don't set the same state twice! if (_blendState == value) return; _blendState = value; // Static state properties never actually get bound; // instead we use our GraphicsDevice-specific version of them. BlendState newBlendState = _blendState; if (ReferenceEquals(_blendState, BlendState.Additive)) newBlendState = _blendStateAdditive; else if (ReferenceEquals(_blendState, BlendState.AlphaBlend)) newBlendState = _blendStateAlphaBlend; else if (ReferenceEquals(_blendState, BlendState.NonPremultiplied)) newBlendState = _blendStateNonPremultiplied; else if (ReferenceEquals(_blendState, BlendState.Opaque)) newBlendState = _blendStateOpaque; if (newBlendState.IndependentBlendEnable && !this.Capabilities.SupportsSeparateBlendStates) throw new PlatformNotSupportedException("Independent blend states requires at least OpenGL 4.0 or GL_ARB_draw_buffers_blend. Try upgrading your graphics drivers."); // Blend state is now bound to a device... no one should // be changing the state of the blend state object now! newBlendState.BindToGraphicsDevice(this); _actualBlendState = newBlendState; BlendFactor = _actualBlendState.BlendFactor; _blendStateDirty = true; } } public Color BlendFactor { get { return _blendFactor; } set { if (_blendFactor == value) return; _blendFactor = value; _blendFactorDirty = true; } } public DepthStencilState DepthStencilState { get { return _depthStencilState; } set { if (value == null) throw new ArgumentNullException("value"); // Don't set the same state twice! if (_depthStencilState == value) return; _depthStencilState = value; // Static state properties never actually get bound; // instead we use our GraphicsDevice-specific version of them. DepthStencilState newDepthStencilState = _depthStencilState; if (ReferenceEquals(_depthStencilState, DepthStencilState.Default)) newDepthStencilState = _depthStencilStateDefault; else if (ReferenceEquals(_depthStencilState, DepthStencilState.DepthRead)) newDepthStencilState = _depthStencilStateDepthRead; else if (ReferenceEquals(_depthStencilState, DepthStencilState.None)) newDepthStencilState = _depthStencilStateNone; newDepthStencilState.BindToGraphicsDevice(this); _actualDepthStencilState = newDepthStencilState; _depthStencilStateDirty = true; } } public RasterizerState RasterizerState { get { return _rasterizerState; } set { if (value == null) throw new ArgumentNullException("value"); // Don't set the same state twice! if (_rasterizerState == value) return; if (!value.DepthClipEnable && !this.Capabilities.SupportsDepthClamp) throw new InvalidOperationException("Cannot set RasterizerState.DepthClipEnable to false on this graphics device"); _rasterizerState = value; // Static state properties never actually get bound; // instead we use our GraphicsDevice-specific version of them. RasterizerState newRasterizerState = _rasterizerState; if (ReferenceEquals(_rasterizerState, RasterizerState.CullClockwise)) newRasterizerState = _rasterizerStateCullClockwise; else if (ReferenceEquals(_rasterizerState, RasterizerState.CullCounterClockwise)) newRasterizerState = _rasterizerStateCullCounterClockwise; else if (ReferenceEquals(_rasterizerState, RasterizerState.CullNone)) newRasterizerState = _rasterizerStateCullNone; newRasterizerState.BindToGraphicsDevice(this); _actualRasterizerState = newRasterizerState; _rasterizerStateDirty = true; } } public SamplerStateCollection VertexSamplerStates { get { return _vertexSamplerStates; } } public SamplerStateCollection SamplerStates { get { return _pixelSamplerStates; } } public TextureCollection VertexTextures { get { return _vertexTextures; } } public TextureCollection Textures { get { return _pixelTextures; } } public IndexBuffer Indices { get { return _indexBuffer; } set { if (_indexBuffer != value) { _indexBuffer = value; _indexBufferDirty = true; } } } public VertexShader VertexShader { get { return _vertexShader; } set { if (_vertexShader == value) return; _vertexShader = value; _vertexConstantBuffers.Clear(); _vertexShaderDirty = true; } } public PixelShader PixelShader { get { return _pixelShader; } set { if (_pixelShader == value) return; _pixelShader = value; _pixelConstantBuffers.Clear(); _pixelShaderDirty = true; } } protected GraphicsContextStrategy(GraphicsContext context) { _context = context; } protected void Initialize(GraphicsCapabilities capabilities) { this._vertexConstantBuffers = new ConstantBufferCollection(this, 16); this._pixelConstantBuffers = new ConstantBufferCollection(this, 16); this._vertexTextures = new TextureCollection(this, this.Capabilities.MaxVertexTextureSlots); this._pixelTextures = new TextureCollection(this, this.Capabilities.MaxTextureSlots); this._pixelSamplerStates = new SamplerStateCollection(this, this.Capabilities.MaxTextureSlots); this._vertexSamplerStates = new SamplerStateCollection(this, this.Capabilities.MaxVertexTextureSlots); this._blendStateAdditive = new BlendState(BlendState.Additive); this._blendStateAlphaBlend = new BlendState(BlendState.AlphaBlend); this._blendStateNonPremultiplied = new BlendState(BlendState.NonPremultiplied); this._blendStateOpaque = new BlendState(BlendState.Opaque); this.BlendState = BlendState.Opaque; this._blendStateDirty = true; this._blendFactorDirty = true; this._depthStencilStateDefault = new DepthStencilState(DepthStencilState.Default); this._depthStencilStateDepthRead = new DepthStencilState(DepthStencilState.DepthRead); this._depthStencilStateNone = new DepthStencilState(DepthStencilState.None); this.DepthStencilState = DepthStencilState.Default; this._depthStencilStateDirty = true; this._rasterizerStateCullClockwise = new RasterizerState(RasterizerState.CullClockwise); this._rasterizerStateCullCounterClockwise = new RasterizerState(RasterizerState.CullCounterClockwise); this._rasterizerStateCullNone = new RasterizerState(RasterizerState.CullNone); this.RasterizerState = RasterizerState.CullCounterClockwise; this._rasterizerStateDirty = true; // Force set the buffers and shaders on next ApplyState() call this._vertexBuffers = new VertexBufferCollection(this.Capabilities.MaxVertexBufferSlots); this._vertexBuffersDirty = true; this._indexBufferDirty = true; this._vertexShaderDirty = true; this._pixelShaderDirty = true; this._scissorRectangleDirty = true; } protected internal void SetVertexBuffer(VertexBuffer vertexBuffer) { if (vertexBuffer != null) { _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffer, 0); } else { _vertexBuffersDirty |= _vertexBuffers.Clear(); } } public abstract void PlatformSetup(); public abstract void Clear(ClearOptions options, Vector4 color, float depth, int stencil); internal void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset) { if (vertexBuffer != null) { if (0 >= vertexOffset && vertexOffset < vertexBuffer.VertexCount) { _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffer, vertexOffset); } else throw new ArgumentOutOfRangeException("vertexOffset"); } else { if (vertexOffset == 0) { _vertexBuffersDirty |= _vertexBuffers.Clear(); } else throw new ArgumentOutOfRangeException("vertexOffset"); } } internal void SetVertexBuffers(VertexBufferBinding[] vertexBuffers) { if (vertexBuffers != null && vertexBuffers.Length > 0) { if (vertexBuffers.Length <= this.Capabilities.MaxVertexBufferSlots) { _vertexBuffersDirty |= _vertexBuffers.Set(vertexBuffers); } else { string message = String.Format("Max number of vertex buffers is {0}.", this.Capabilities.MaxVertexBufferSlots); throw new ArgumentOutOfRangeException("vertexBuffers", message); } } else { _vertexBuffersDirty |= _vertexBuffers.Clear(); } } public void ApplyRenderTargets(RenderTargetBinding[] renderTargets) { bool clearTarget = false; this.PlatformResolveRenderTargets(); // Clear the current bindings. Array.Clear(_currentRenderTargetBindings, 0, _currentRenderTargetBindings.Length); int renderTargetWidth; int renderTargetHeight; if (renderTargets == null) { _currentRenderTargetCount = 0; this.PlatformApplyDefaultRenderTarget(); clearTarget = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.RenderTargetUsage == RenderTargetUsage.DiscardContents; renderTargetWidth = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferWidth; renderTargetHeight = ((IPlatformGraphicsContext)this.Context).DeviceStrategy.PresentationParameters.BackBufferHeight; unchecked { _graphicsMetrics._targetCount++; } } else { // Copy the new bindings. Array.Copy(renderTargets, _currentRenderTargetBindings, renderTargets.Length); _currentRenderTargetCount = renderTargets.Length; IRenderTarget renderTarget = this.PlatformApplyRenderTargets(); // We clear the render target if asked. clearTarget = renderTarget.RenderTargetUsage == RenderTargetUsage.DiscardContents; renderTargetWidth = renderTarget.Width; renderTargetHeight = renderTarget.Height; if (renderTargets.Length == 0) unchecked { _graphicsMetrics._targetCount++; } else unchecked { _graphicsMetrics._targetCount += renderTargets.Length; } } // Set the viewport to the size of the first render target. this.Viewport = new Viewport(0, 0, renderTargetWidth, renderTargetHeight); // Set the scissor rectangle to the size of the first render target. this.ScissorRectangle = new Rectangle(0, 0, renderTargetWidth, renderTargetHeight); if (clearTarget) { ClearOptions options = ClearOptions.Target | ClearOptions.DepthBuffer | ClearOptions.Stencil; this.Clear(options, this.DiscardColor.ToVector4(), this.Viewport.MaxDepth, 0); } } internal RenderTargetBinding[] GetRenderTargets() { int renderTargetCount = _currentRenderTargetCount; if (renderTargetCount == 0) return _emptyRenderTargetBindings; RenderTargetBinding[] bindings = new RenderTargetBinding[renderTargetCount]; Array.Copy(_currentRenderTargetBindings, bindings, _currentRenderTargetCount); return bindings; } internal int GetRenderTargets(RenderTargetBinding[] bindings) { int renderTargetCount = _currentRenderTargetCount; Array.Copy(_currentRenderTargetBindings, bindings, renderTargetCount); return renderTargetCount; } protected internal static int GetElementCountArray(PrimitiveType primitiveType, int primitiveCount) { switch (primitiveType) { case PrimitiveType.LineList: return primitiveCount * 2; case PrimitiveType.LineStrip: return primitiveCount + 1; case PrimitiveType.TriangleList: return primitiveCount * 3; case PrimitiveType.TriangleStrip: return primitiveCount + 2; case PrimitiveType.PointList: return primitiveCount; default: throw new NotSupportedException(); } } public abstract void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount, int vertexCount); public abstract void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount); public abstract void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount); public abstract void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount); public abstract void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration, int vertexCount) where T : struct; public abstract void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct; public abstract void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct; public abstract void Flush(); public abstract OcclusionQueryStrategy CreateOcclusionQueryStrategy(); public abstract GraphicsDebugStrategy CreateGraphicsDebugStrategy(); public abstract ConstantBufferCollectionStrategy CreateConstantBufferCollectionStrategy(int capacity); public abstract TextureCollectionStrategy CreateTextureCollectionStrategy(int capacity); public abstract SamplerStateCollectionStrategy CreateSamplerStateCollectionStrategy(int capacity); public abstract ITexture2DStrategy CreateTexture2DStrategy(int width, int height, bool mipMap, SurfaceFormat format, int arraySize, bool shared); public abstract ITexture3DStrategy CreateTexture3DStrategy(int width, int height, int depth, bool mipMap, SurfaceFormat format); public abstract ITextureCubeStrategy CreateTextureCubeStrategy(int size, bool mipMap, SurfaceFormat format); public abstract IRenderTarget2DStrategy CreateRenderTarget2DStrategy(int width, int height, bool mipMap, int arraySize, bool shared, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount); public abstract IRenderTarget3DStrategy CreateRenderTarget3DStrategy(int width, int height, int depth, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount); public abstract IRenderTargetCubeStrategy CreateRenderTargetCubeStrategy(int size, bool mipMap, RenderTargetUsage usage, SurfaceFormat preferredSurfaceFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount); public abstract ITexture2DStrategy CreateTexture2DStrategy(Stream stream); public abstract ShaderStrategy CreateVertexShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes); public abstract ShaderStrategy CreatePixelShaderStrategy(ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes); public abstract ConstantBufferStrategy CreateConstantBufferStrategy(string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats); public abstract IndexBufferStrategy CreateIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage); public abstract VertexBufferStrategy CreateVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage); public abstract IndexBufferStrategy CreateDynamicIndexBufferStrategy(IndexElementSize indexElementSize, int indexCount, BufferUsage usage); public abstract VertexBufferStrategy CreateDynamicVertexBufferStrategy(VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage); public abstract IBlendStateStrategy CreateBlendStateStrategy(IBlendStateStrategy source); public abstract IDepthStencilStateStrategy CreateDepthStencilStateStrategy(IDepthStencilStateStrategy source); public abstract IRasterizerStateStrategy CreateRasterizerStateStrategy(IRasterizerStateStrategy stsourcerategy); public abstract ISamplerStateStrategy CreateSamplerStateStrategy(ISamplerStateStrategy source); protected abstract void PlatformResolveRenderTargets(); protected abstract void PlatformApplyDefaultRenderTarget(); protected abstract IRenderTarget PlatformApplyRenderTargets(); protected GraphicsDebug CreateGraphicsDebug() { return new GraphicsDebug(this); } public T ToConcrete() where T : GraphicsContextStrategy { return (T)this; } #region Metrics protected void Metrics_AddClearCount() { unchecked { _graphicsMetrics._clearCount++; } } protected void Metrics_AddDrawCount() { unchecked { _graphicsMetrics._drawCount++; } } protected void Metrics_AddPixelShaderCount() { unchecked { _graphicsMetrics._pixelShaderCount++; } } protected void Metrics_AddTargetCount() { unchecked { _graphicsMetrics._targetCount++; } } protected void Metrics_AddVertexShaderCount() { unchecked { _graphicsMetrics._vertexShaderCount++; } } protected void Metrics_AddPrimitiveCount(int primitiveCount) { unchecked { _graphicsMetrics._primitiveCount += primitiveCount; } } public void Metrics_AddSpriteCount(int batchCount) { unchecked { _graphicsMetrics._spriteCount += batchCount; } } public void Metrics_AddTextureCount() { unchecked { _graphicsMetrics._textureCount++; } } #endregion Metrics #region IDisposable Members ~GraphicsContextStrategy() { Dispose(false); } public void Dispose() { ThrowIfDisposed(); { Dispose(true); GC.SuppressFinalize(this); _isDisposed = true; } } protected virtual void Dispose(bool disposing) { if (disposing) { _blendState = null; _actualBlendState = null; _blendStateAdditive.Dispose(); _blendStateAlphaBlend.Dispose(); _blendStateNonPremultiplied.Dispose(); _blendStateOpaque.Dispose(); _depthStencilState = null; _actualDepthStencilState = null; _depthStencilStateDefault.Dispose(); _depthStencilStateDepthRead.Dispose(); _depthStencilStateNone.Dispose(); _rasterizerState = null; _actualRasterizerState = null; _rasterizerStateCullClockwise.Dispose(); _rasterizerStateCullCounterClockwise.Dispose(); _rasterizerStateCullNone.Dispose(); } } //[Conditional("DEBUG")] protected void ThrowIfDisposed() { if (!_isDisposed) return; throw new ObjectDisposedException("Object is Disposed."); } #endregion IDisposable Members } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDebug.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class GraphicsDebug : IPlatformGraphicsDebug { private GraphicsDebugStrategy _strategy; GraphicsDebugStrategy IPlatformGraphicsDebug.Strategy { get { return _strategy; } } public GraphicsDebug(GraphicsDevice device) : this(device.MainContext) { } internal GraphicsDebug(GraphicsContext context) : this(((IPlatformGraphicsContext)context).Strategy) { } internal GraphicsDebug(GraphicsContextStrategy contextStrategy) { _strategy = contextStrategy.CreateGraphicsDebugStrategy(); } /// /// Attempt to dequeue a debugging message from the graphics subsystem. /// /// /// When running on a graphics device with debugging enabled, this allows you to retrieve /// subsystem-specific (e.g. DirectX, OpenGL, etc.) debugging messages including information /// about improper usage of shaders and APIs. /// /// The graphics debugging message if retrieved, null otherwise. /// True if a graphics debugging message was retrieved, false otherwise. public bool TryDequeueMessage(out GraphicsDebugMessage message) { return _strategy.TryDequeueMessage(out message); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDebugMessage.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { public class GraphicsDebugMessage { public string Message { get; set; } public string Severity { get; set; } public int Id { get; set; } public string IdName { get; set; } public string Category { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDebugStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformGraphicsDebug { GraphicsDebugStrategy Strategy { get; } } public abstract class GraphicsDebugStrategy { protected readonly GraphicsContextStrategy _contextStrategy; protected GraphicsDebugStrategy(GraphicsContextStrategy contextStrategy) { _contextStrategy = contextStrategy; } public abstract bool TryDequeueMessage(out GraphicsDebugMessage message); public T ToConcrete() where T : GraphicsDebugStrategy { return (T)this; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDevice.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class GraphicsDevice : IDisposable , IPlatformGraphicsDevice { private GraphicsDeviceStrategy _strategy; GraphicsDeviceStrategy IPlatformGraphicsDevice.Strategy { get { return _strategy; } } internal GraphicsContext MainContext { get { return _strategy.MainContext; } } internal GraphicsContext CurrentContext { get { return _strategy.CurrentContext; } } // TODO: Graphics Device events need implementing public event EventHandler DeviceLost; public event EventHandler DeviceReset; public event EventHandler DeviceResetting; public event EventHandler ResourceCreated; public event EventHandler ResourceDestroyed; /// /// Raised when the GraphicsDevice is disposed or finalized. /// public event EventHandler Disposing; private event EventHandler _presentationChanged; event EventHandler IPlatformGraphicsDevice.PresentationChanged { add { _presentationChanged += value; } remove { _presentationChanged -= value; } } public bool IsDisposed { get { return _strategy.IsDisposed; } } public GraphicsAdapter Adapter { get { return _strategy.Adapter; } } public GraphicsProfile GraphicsProfile { get { return _strategy.GraphicsProfile; } } /// /// Indicates if DX9 style pixel addressing or current standard /// pixel addressing should be used. This flag is set to /// false by default. If `UseHalfPixelOffset` is /// `true` you have to add half-pixel offset to a Projection matrix. /// See also . /// /// /// XNA uses DirectX9 for its graphics. DirectX9 interprets UV /// coordinates differently from other graphics API's. This is /// typically referred to as the half-pixel offset. MonoGame /// replicates XNA behavior if this flag is set to true. /// public bool UseHalfPixelOffset { get { return _strategy.UseHalfPixelOffset; } } public PresentationParameters PresentationParameters { get { return _strategy.PresentationParameters; } } /// /// The rendering information for debugging and profiling. /// The metrics are reset every frame after draw within . /// public GraphicsMetrics Metrics { get { return CurrentContext.Metrics; } set { CurrentContext.Metrics = value; } } /// /// Access debugging APIs for the graphics subsystem. /// public GraphicsDebug GraphicsDebug { get { return CurrentContext.GraphicsDebug ; } set { CurrentContext.GraphicsDebug = value; } } /// /// Initializes a new instance of the class. /// /// The graphics adapter. /// The graphics profile. /// The presentation options. /// /// is . /// public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, PresentationParameters presentationParameters) { PreserveGraphicsContentTypeReaders(); _strategy = GraphicsFactory.Current.CreateGraphicsDeviceStrategy(this, adapter, graphicsProfile, false, presentationParameters); _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); }; _strategy.DeviceReset += (sender, e) => { OnDeviceReset(e); }; _strategy.PresentationChanged += (sender, e) => { OnPresentationChanged(e); }; _strategy.Disposing += (sender, e) => { OnDisposing(e); }; _strategy.Initialize(); } /// /// Initializes a new instance of the class. /// /// The graphics adapter. /// The graphics profile. /// Indicates if DX9 style pixel addressing or current standard pixel addressing should be used. This value is passed to /// The presentation options. /// /// is . /// public GraphicsDevice(GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { PreserveGraphicsContentTypeReaders(); _strategy = GraphicsFactory.Current.CreateGraphicsDeviceStrategy(this, adapter, graphicsProfile, preferHalfPixelOffset, presentationParameters); _strategy.DeviceResetting += (sender, e) => { OnDeviceResetting(e); }; _strategy.DeviceReset += (sender, e) => { OnDeviceReset(e); }; _strategy.PresentationChanged += (sender, e) => { OnPresentationChanged(e); }; _strategy.Disposing += (sender, e) => { OnDisposing(e); }; _strategy.Initialize(); } ~GraphicsDevice() { Dispose(false); } // Trick to prevent the linker removing the code, but not actually execute the code static bool _trimmingFalseFlag = false; private static void PreserveGraphicsContentTypeReaders() { #pragma warning disable 0219, 0649 // Trick to prevent the linker removing the code, but not actually execute the code if (_trimmingFalseFlag) { // Dummy variables required for it to work with trimming ** DO NOT DELETE ** // This forces the classes not to be optimized out when deploying with trimming // Framework.Graphics.PackedVector types var hColorReader = new ColorReader(); // Framework.Graphics types var hAlphaTestEffectReader = new AlphaTestEffectReader(); var hBasicEffectReader = new BasicEffectReader(); var hDualTextureEffectReader = new DualTextureEffectReader(); var hEffectMaterialReader = new EffectMaterialReader(); var hEffectReader = new EffectReader(); var hIndexBufferReader = new IndexBufferReader(); var hModelReader = new ModelReader(); var hSkinnedEffectReader = new SkinnedEffectReader(); var hSpriteFontReader = new SpriteFontReader(); var hTexture2DReader = new Texture2DReader(); var hTexture3DReader = new Texture3DReader(); var hTextureCubeReader = new TextureCubeReader(); var hVertexBufferReader = new VertexBufferReader(); } #pragma warning restore 0219, 0649 } public Rectangle ScissorRectangle { get { return CurrentContext.ScissorRectangle; } set { CurrentContext.ScissorRectangle = value; } } public Viewport Viewport { get { return CurrentContext.Viewport; } set { CurrentContext.Viewport = value; } } public BlendState BlendState { get { return CurrentContext.BlendState; } set { CurrentContext.BlendState = value; } } /// /// The color used as blend factor when alpha blending. /// /// /// When only changing BlendFactor, use this rather than to /// only update BlendFactor so the whole BlendState does not have to be updated. /// public Color BlendFactor { get { return CurrentContext.BlendFactor; } set { CurrentContext.BlendFactor = value; } } public DepthStencilState DepthStencilState { get { return CurrentContext.DepthStencilState; } set { CurrentContext.DepthStencilState = value; } } public RasterizerState RasterizerState { get { return CurrentContext.RasterizerState; } set { CurrentContext.RasterizerState = value; } } public SamplerStateCollection SamplerStates { get { return CurrentContext.SamplerStates; } } public SamplerStateCollection VertexSamplerStates { get { return CurrentContext.VertexSamplerStates; } } public TextureCollection Textures { get { return CurrentContext.Textures; } } public TextureCollection VertexTextures { get { return CurrentContext.VertexTextures; } } /// /// Get or set the color a is cleared to when it is set. /// public Color DiscardColor { get { return CurrentContext.DiscardColor; } set { CurrentContext.DiscardColor = value; } } public void Clear(Color color) { CurrentContext.Clear(color); } public void Clear(ClearOptions options, Color color, float depth, int stencil) { CurrentContext.Clear(options, color, depth, stencil); } public void Clear(ClearOptions options, Vector4 color, float depth, int stencil) { CurrentContext.Clear(options, color, depth, stencil); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void OnDisposing(EventArgs e) { var handler = Disposing; if (handler != null) handler(this, e); } protected virtual void Dispose(bool disposing) { if (disposing) { _strategy.Dispose(); } _strategy.DeviceResetting -= (sender, e) => { OnDeviceResetting(e); }; _strategy.DeviceReset -= (sender, e) => { OnDeviceReset(e); }; _strategy.PresentationChanged -= (sender, e) => { OnPresentationChanged(e); }; _strategy.Disposing -= (sender, e) => { OnDisposing(e); }; } public void Present() { // We cannot present with a RT set on the device. if (((IPlatformGraphicsContext)_strategy._mainContext).Strategy.IsRenderTargetBound) throw new InvalidOperationException("Cannot call Present when a render target is active."); _strategy.Present(); } public void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle) { _strategy.Present(sourceRectangle, destinationRectangle, overrideWindowHandle); } private void OnDeviceResetting(EventArgs e) { var handler = DeviceResetting; if (handler != null) handler(this, e); } private void OnPresentationChanged(PresentationEventArgs e) { var handler = _presentationChanged; if (handler != null) handler(this, e); } private void OnDeviceReset(EventArgs e) { var handler = DeviceReset; if (handler != null) handler(this, e); } public void Reset() { _strategy.OnDeviceResetting(EventArgs.Empty); _strategy.Reset(); _strategy.OnPresentationChanged(new PresentationEventArgs(this.PresentationParameters)); _strategy.OnDeviceReset(EventArgs.Empty); } public void Reset(PresentationParameters presentationParameters) { if (presentationParameters == null) throw new ArgumentNullException("presentationParameters"); _strategy.OnDeviceResetting(EventArgs.Empty); _strategy.Reset(presentationParameters); _strategy.OnPresentationChanged(new PresentationEventArgs(this.PresentationParameters)); _strategy.OnDeviceReset(EventArgs.Empty); } public DisplayMode DisplayMode { get { return _strategy.DisplayMode; } } public GraphicsDeviceStatus GraphicsDeviceStatus { get { return GraphicsDeviceStatus.Normal; } } public void SetRenderTarget(RenderTarget2D renderTarget) { CurrentContext.SetRenderTarget(renderTarget); } public void SetRenderTarget(RenderTargetCube renderTarget, CubeMapFace cubeMapFace) { CurrentContext.SetRenderTarget(renderTarget, cubeMapFace); } /// Only implemented for DirectX public void SetRenderTarget(RenderTarget2D renderTarget, int arraySlice) { CurrentContext.SetRenderTarget(renderTarget, arraySlice); } /// Only implemented for DirectX public void SetRenderTarget(RenderTarget3D renderTarget, int arraySlice) { CurrentContext.SetRenderTarget(renderTarget, arraySlice); } public void SetRenderTargets(params RenderTargetBinding[] renderTargets) { CurrentContext.SetRenderTargets(renderTargets); } /// /// Retrieves the currently bound render targets as an array. /// /// An array of representing the current render targets. public RenderTargetBinding[] GetRenderTargets() { return CurrentContext.GetRenderTargets(); } /// /// Copies the currently bound render targets into the provided array. /// /// The array to store the current render targets. /// Reach profile supports a maximum of 1 simultaneous rendertargets. /// HiDef profile supports a maximum of 4 simultaneous rendertargets. /// FL10_0 profile supports a maximum of 8 simultaneous rendertargets. /// /// The number of render targets copied. /// This is a MonoGame extension public int GetRenderTargets(RenderTargetBinding[] bindings) { return CurrentContext.GetRenderTargets(bindings); } public void SetVertexBuffer(VertexBuffer vertexBuffer) { CurrentContext.SetVertexBuffer(vertexBuffer); } public void SetVertexBuffer(VertexBuffer vertexBuffer, int vertexOffset) { CurrentContext.SetVertexBuffer(vertexBuffer, vertexOffset); } public void SetVertexBuffers(params VertexBufferBinding[] vertexBuffers) { CurrentContext.SetVertexBuffers(vertexBuffers); } public IndexBuffer Indices { get { return CurrentContext.Indices; } set { CurrentContext.Indices = value; } } /// /// Draw geometry by indexing into the vertex buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// This is unused and remains here only for XNA API compatibility. /// This is unused and remains here only for XNA API compatibility. /// The index within the index buffer to start drawing from. /// The number of primitives to render from the index buffer. /// Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount) { CurrentContext.DrawIndexedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount); } /// /// Draw geometry by indexing into the vertex buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives to render from the index buffer. public void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount) { CurrentContext.DrawIndexedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount); } /// /// Draw primitives of the specified type from the data in an array of vertices without indexing. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex that should be rendered. /// The number of primitives to draw. /// The will be found by getting /// from an instance of and cached for subsequent calls. public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct, IVertexType { CurrentContext.DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount); } /// /// Draw primitives of the specified type from the data in the given array of vertices without indexing. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex that should be rendered. /// The number of primitives to draw. /// The layout of the vertices. public void DrawUserPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { CurrentContext.DrawUserPrimitives(primitiveType, vertexData, vertexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type from the currently bound vertexbuffers without indexing. /// /// The type of primitives to draw. /// Index of the vertex to start at. /// The number of primitives to draw. public void DrawPrimitives(PrimitiveType primitiveType, int vertexStart, int primitiveCount) { CurrentContext.DrawPrimitives(primitiveType, vertexStart, primitiveCount); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The will be found by getting /// from an instance of and cached for subsequent calls. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { CurrentContext.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The layout of the vertices. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, short[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { CurrentContext.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The will be found by getting /// from an instance of and cached for subsequent calls. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example a value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount) where T : struct, IVertexType { CurrentContext.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount); } /// /// Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. /// /// The type of the vertices. /// The type of primitives to draw with the vertices. /// An array of vertices to draw. /// The index in the array of the first vertex to draw. /// The index in the array of indices of the first index to use /// The number of primitives to draw. /// The number of vertices to draw. /// The index data. /// The layout of the vertices. /// All indices in the vertex buffer are interpreted relative to the specified . /// For example value of zero in the array of indices points to the vertex at index /// in the array of vertices. public void DrawUserIndexedPrimitives(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int numVertices, int[] indexData, int indexOffset, int primitiveCount, VertexDeclaration vertexDeclaration) where T : struct { CurrentContext.DrawUserIndexedPrimitives(primitiveType, vertexData, vertexOffset, numVertices, indexData, indexOffset, primitiveCount, vertexDeclaration); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// This is unused and remains here only for XNA API compatibility. /// This is unused and remains here only for XNA API compatibility. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// The number of instances to render. /// Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount, int instanceCount) { CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, minVertexIndex, numVertices, startIndex, primitiveCount, instanceCount); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// The number of instances to render. /// Draw geometry with data from multiple bound vertex streams at different frequencies. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int instanceCount) { CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, instanceCount); } /// /// Draw instanced geometry from the bound vertex buffers and index buffer. /// /// The type of primitives in the index buffer. /// Used to offset the vertex range indexed from the vertex buffer. /// The index within the index buffer to start drawing from. /// The number of primitives in a single instance. /// Used to offset the instance range indexed from the instance buffer. /// The number of instances to render. /// Draw geometry with data from multiple bound vertex streams at different frequencies. public void DrawInstancedPrimitives(PrimitiveType primitiveType, int baseVertex, int startIndex, int primitiveCount, int baseInstance, int instanceCount) { CurrentContext.DrawInstancedPrimitives(primitiveType, baseVertex, startIndex, primitiveCount, baseInstance, instanceCount); } /// /// Sends queued-up commands in the command buffer to the graphics processing unit (GPU). /// public void Flush() { CurrentContext.Flush(); } /// /// Gets the Pixel data of what is currently drawn on screen. /// The format is whatever the current format of the backbuffer is. /// /// A byte[] of size (ViewPort.Width * ViewPort.Height * 4) public void GetBackBufferData(T[] data) where T : struct { GetBackBufferData(null, data, 0, data.Length); } public void GetBackBufferData(T[] data, int startIndex, int elementCount) where T : struct { GetBackBufferData(null, data, startIndex, elementCount); } public unsafe void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { if (data == null) throw new ArgumentNullException("data"); int width, height; if (rect.HasValue) { Rectangle rectangle = rect.Value; width = rectangle.Width; height = rectangle.Height; if (rectangle.X < 0 || rectangle.Y < 0 || rectangle.Width <= 0 || rectangle.Height <= 0 || rectangle.Right > PresentationParameters.BackBufferWidth || rectangle.Top > PresentationParameters.BackBufferHeight) throw new ArgumentException("Rectangle must fit in BackBuffer dimensions"); } else { width = PresentationParameters.BackBufferWidth; height = PresentationParameters.BackBufferHeight; } int tSize = sizeof(T); int fSize = PresentationParameters.BackBufferFormat.GetSize(); if (tSize > fSize || fSize % tSize != 0) throw new ArgumentException("Type T is of an invalid size for the format of this texture.", "T"); if (startIndex < 0 || startIndex >= data.Length) throw new ArgumentException("startIndex must be at least zero and smaller than data.Length.", "startIndex"); if (data.Length < startIndex + elementCount) throw new ArgumentException("The data array is too small."); int dataByteSize = width * height * fSize; if (elementCount * tSize != dataByteSize) throw new ArgumentException(string.Format("elementCount is not the right size, " + "elementCount * sizeof(T) is {0}, but data size is {1} bytes.", elementCount * tSize, dataByteSize), "elementCount"); _strategy.GetBackBufferData(rect, data, startIndex, elementCount); } // uniformly scales down the given rectangle by 10% internal static Rectangle GetDefaultTitleSafeArea(int x, int y, int width, int height) { int marginX = (width + 19) / 20; int marginY = (height + 19) / 20; x += marginX; y += marginY; width -= marginX * 2; height -= marginY * 2; return new Rectangle(x, y, width, height); } internal static Rectangle GetTitleSafeArea(int x, int y, int width, int height) { return new Rectangle(x, y, width, height); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDeviceStatus.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Describes the status of the . /// public enum GraphicsDeviceStatus { /// /// The device is normal. /// Normal, /// /// The device has been lost. /// Lost, /// /// The device has not been reset. /// NotReset } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsDeviceStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformGraphicsDevice { GraphicsDeviceStrategy Strategy { get; } event EventHandler PresentationChanged; } public abstract class GraphicsDeviceStrategy : IDisposable { GraphicsDevice _device; private bool _isDisposed; private GraphicsAdapter _graphicsAdapter; private readonly GraphicsProfile _graphicsProfile; private bool _useHalfPixelOffset; private PresentationParameters _presentationParameters; protected internal GraphicsContext _mainContext; /// /// The cache of effects from unique byte streams. /// public readonly Dictionary EffectCache = new Dictionary(); /// /// Raised when the GraphicsResource is disposed or finalized. /// public event EventHandler Disposing; internal event EventHandler ContextLost; internal event EventHandler DeviceReset; internal event EventHandler DeviceResetting; internal event EventHandler PresentationChanged; public GraphicsDevice Device { get { return _device; } } public bool IsDisposed { get { return _isDisposed; } } public GraphicsAdapter Adapter { get { return _graphicsAdapter; } protected set { _graphicsAdapter = value; } } public DisplayMode DisplayMode { get { return _graphicsAdapter.CurrentDisplayMode; } } public GraphicsProfile GraphicsProfile { get { return _graphicsProfile; } } public bool UseHalfPixelOffset { get { return _useHalfPixelOffset; } } public PresentationParameters PresentationParameters { get { return _presentationParameters; } protected set { _presentationParameters = value; } } public GraphicsCapabilities Capabilities { get { return ((IPlatformGraphicsContext)_mainContext).Strategy.Capabilities; } } public GraphicsContext MainContext { get { return _mainContext; } } public GraphicsContext CurrentContext { get { return _mainContext; } } protected GraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters) { if (adapter == null) throw new ArgumentNullException("adapter"); if (!adapter.IsProfileSupported(graphicsProfile)) throw new NoSuitableGraphicsDeviceException(String.Format("Adapter '{0}' does not support the {1} profile.", adapter.Description, graphicsProfile)); if (presentationParameters == null) throw new ArgumentNullException("presentationParameters"); this._device = device; this._graphicsAdapter = adapter; this._graphicsProfile = graphicsProfile; this._useHalfPixelOffset = preferHalfPixelOffset; this._presentationParameters = presentationParameters; } internal void Initialize() { // Setup _mainContext = this.CreateGraphicsContext(); this.PlatformInitialize(); // Set the default render target. ((IPlatformGraphicsContext)_mainContext).Strategy.ApplyRenderTargets(null); } protected abstract void PlatformInitialize(); protected void OnContextLost(EventArgs e) { var handler = ContextLost; if (handler != null) handler(this, e); } internal void OnDeviceResetting(EventArgs e) { var handler = DeviceResetting; if (handler != null) handler(this, e); } internal void OnPresentationChanged(PresentationEventArgs e) { var handler = PresentationChanged; if (handler != null) handler(this, e); } protected internal void OnDeviceReset(EventArgs e) { var handler = DeviceReset; if (handler != null) handler(this, e); } public abstract void Reset(); public abstract void Reset(PresentationParameters presentationParameters); public abstract void Present(Rectangle? sourceRectangle, Rectangle? destinationRectangle, IntPtr overrideWindowHandle); public virtual void Present() { // reset _graphicsMetrics ((IPlatformGraphicsContext)MainContext).Strategy._graphicsMetrics = new GraphicsMetrics(); } public abstract void GetBackBufferData(Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct; public abstract GraphicsContextStrategy CreateGraphicsContextStrategy(GraphicsContext context); protected GraphicsContext CreateGraphicsContext() { return new GraphicsContext(this); } public T ToConcrete() where T : GraphicsDeviceStrategy { return (T)this; } public abstract Assembly ConcreteAssembly { get; } internal const string ResourceNameAlphaTestEffect = "Resources.AlphaTestEffect.fxo"; internal const string ResourceNameBasicEffect = "Resources.BasicEffect.fxo"; internal const string ResourceNameDualTextureEffect = "Resources.DualTextureEffect.fxo"; internal const string ResourceNameEnvironmentMapEffect = "Resources.EnvironmentMapEffect.fxo"; internal const string ResourceNameSkinnedEffect = "Resources.SkinnedEffect.fxo"; internal const string ResourceNameSpriteEffect = "Resources.SpriteEffect.fxo"; internal byte[] GetResourceStreamBytes(string resourceName) { Stream stream = ConcreteAssembly.GetManifestResourceStream(resourceName); byte[] bytecode = new byte[stream.Length]; stream.Read(bytecode, 0, (int)stream.Length); return bytecode; } #region IDisposable Members ~GraphicsDeviceStrategy() { _isDisposed = true; OnDisposing(EventArgs.Empty); Dispose(false); } public void Dispose() { if (!_isDisposed) { _isDisposed = true; OnDisposing(EventArgs.Empty); Dispose(true); GC.SuppressFinalize(this); } } private void OnDisposing(EventArgs e) { var handler = Disposing; if (handler != null) handler(this, e); } protected virtual void Dispose(bool disposing) { if (disposing) { // Clear the effect cache. this.EffectCache.Clear(); if (_mainContext != null) { _mainContext.Dispose(); _mainContext = null; } _device = null; } } #endregion IDisposable Members } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsFactory.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public abstract class GraphicsFactory { private volatile static GraphicsFactory _current; internal static GraphicsFactory Current { get { GraphicsFactory current = _current; if (current != null) return current; lock (typeof(GraphicsFactory)) { if (_current != null) return _current; Console.WriteLine("GraphicsFactory not found."); Console.WriteLine("Initialize graphics with 'GraphicsFactory.RegisterGraphicsFactory(new ConcreteGraphicsFactory());'."); GraphicsFactory graphicsFactory = CreateGraphicsFactory(); GraphicsFactory.RegisterGraphicsFactory(graphicsFactory); } return _current; } } private static GraphicsFactory CreateGraphicsFactory() { Console.WriteLine("Registering Concrete GraphicsFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.Graphics.ConcreteGraphicsFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(GraphicsFactory)) && !type.IsAbstract) return (GraphicsFactory)Activator.CreateInstance(type); return null; } public static void RegisterGraphicsFactory(GraphicsFactory graphicsFactory) { if (graphicsFactory == null) throw new NullReferenceException("graphicsFactory"); lock (typeof(GraphicsFactory)) { if (_current == null) _current = graphicsFactory; else throw new InvalidOperationException("GraphicsFactory allready registered."); } } public abstract GraphicsAdaptersProviderStrategy CreateGraphicsAdaptersProviderStrategy(); public abstract GraphicsDeviceStrategy CreateGraphicsDeviceStrategy(GraphicsDevice device, GraphicsAdapter adapter, GraphicsProfile graphicsProfile, bool preferHalfPixelOffset, PresentationParameters presentationParameters); public abstract SpriteBatcherStrategy CreateSpriteBatcher(GraphicsDevice graphicsDevice, int capacity); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsMetrics.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// A snapshot of rendering statistics from to be used for runtime debugging and profiling. /// public struct GraphicsMetrics { internal long _clearCount; internal long _drawCount; internal long _pixelShaderCount; internal long _primitiveCount; internal long _spriteCount; internal long _targetCount; internal long _textureCount; internal long _vertexShaderCount; /// /// Number of times Clear was called. /// public long ClearCount { get { return _clearCount; } } /// /// Number of times Draw was called. /// public long DrawCount { get { return _drawCount; } } /// /// Number of times the pixel shader was changed on the GPU. /// public long PixelShaderCount { get { return _pixelShaderCount; } } /// /// Number of rendered primitives. /// public long PrimitiveCount { get { return _primitiveCount; } } /// /// Number of sprites and text characters rendered via . /// public long SpriteCount { get { return _spriteCount; } } /// /// Number of times a target was changed on the GPU. /// public long TargetCount {get { return _targetCount; } } /// /// Number of times a texture was changed on the GPU. /// public long TextureCount { get { return _textureCount; } } /// /// Number of times the vertex shader was changed on the GPU. /// public long VertexShaderCount { get { return _vertexShaderCount; } } /// /// Returns the difference between two sets of metrics. /// /// Source on the left of the sub sign. /// Source on the right of the sub sign. /// Difference between two sets of metrics. public static GraphicsMetrics operator -(GraphicsMetrics left, GraphicsMetrics right) { return new GraphicsMetrics() { _clearCount = left._clearCount - right._clearCount, _drawCount = left._drawCount - right._drawCount, _pixelShaderCount = left._pixelShaderCount - right._pixelShaderCount, _primitiveCount = left._primitiveCount - right._primitiveCount, _spriteCount = left._spriteCount - right._spriteCount, _targetCount = left._targetCount - right._targetCount, _textureCount = left._textureCount - right._textureCount, _vertexShaderCount = left._vertexShaderCount - right._vertexShaderCount }; } /// /// Returns the combination of two sets of metrics. /// /// Source on the left of the add sign. /// Source on the right of the add sign. /// Combination of two sets of metrics. public static GraphicsMetrics operator +(GraphicsMetrics left, GraphicsMetrics right) { return new GraphicsMetrics() { _clearCount = left._clearCount + right._clearCount, _drawCount = left._drawCount + right._drawCount, _pixelShaderCount = left._pixelShaderCount + right._pixelShaderCount, _primitiveCount = left._primitiveCount + right._primitiveCount, _spriteCount = left._spriteCount + right._spriteCount, _targetCount = left._targetCount + right._targetCount, _textureCount = left._textureCount + right._textureCount, _vertexShaderCount = left._vertexShaderCount + right._vertexShaderCount }; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsProfile.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines a set of graphic capabilities. /// public enum GraphicsProfile { /// /// Use a limited set of graphic features and capabilities, allowing the game to support the widest variety of devices. /// Reach = 0, /// /// Use the largest available set of graphic features and capabilities to target devices, that have more enhanced graphic capabilities. /// HiDef = 1, FL10_0 = 2, FL10_1 = 3, FL11_0 = 4, FL11_1 = 5, } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsResource.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public abstract class GraphicsResource : IDisposable { private IGraphicsResourceStrategy _strategy; private bool _isDisposed; public string Name { get; set; } public Object Tag { get; set; } public bool IsDisposed { get { return _isDisposed; } } public GraphicsDevice GraphicsDevice { get { if (_strategy != null) return _strategy.GraphicsDevice; return null; } } /// /// Raised when the GraphicsResource is disposed or finalized. /// public event EventHandler Disposing; protected GraphicsResource() { // parent class will set the _strategy } protected GraphicsResource(GraphicsDevice device) { if (device == null) throw new ArgumentNullException("graphicsDevice"); IGraphicsResourceStrategy strategy = new GraphicsResourceStrategy(); SetResourceStrategy(strategy); Debug.Assert(device != null); ((GraphicsResourceStrategy)_strategy).BindGraphicsDevice(((IPlatformGraphicsDevice)device).Strategy); } protected void SetResourceStrategy(IGraphicsResourceStrategy strategy) { Debug.Assert(_strategy == null); _strategy = strategy; _strategy.GraphicsResource = this; } ~GraphicsResource() { Dispose(false); } /// /// Called before the device is reset. Allows graphics resources to /// invalidate their state so they can be recreated after the device reset. /// Warning: This may be called after a call to Dispose() up until /// the resource is garbage collected. /// internal protected virtual void GraphicsContextLost() { } internal void GraphicsResourceStrategy_ContextLost() { GraphicsContextLost(); } internal void GraphicsResourceStrategy_DeviceDisposing() { this.Dispose(); } public void Dispose() { if (!IsDisposed) { Dispose(true); GC.SuppressFinalize(this); _isDisposed = true; } } internal void OnDisposing() { var handler = Disposing; if (handler != null) handler(this, EventArgs.Empty); } /// /// The method that derived classes should override to implement disposing of managed and native resources. /// /// True if managed objects should be disposed. /// Native resources should always be released regardless of the value of the disposing parameter. protected virtual void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { if (_strategy != null) { _strategy.Dispose(); _strategy.GraphicsResource = null; } } } public override string ToString() { return string.IsNullOrEmpty(Name) ? base.ToString() : Name; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/GraphicsResourceStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class GraphicsResourceStrategy : IGraphicsResourceStrategy { private GraphicsDeviceStrategy _deviceStrategy; private WeakDeviceStrategyEvents _deviceStrategyEvents; private readonly WeakReference _graphicsResourceRef = new WeakReference(null); public GraphicsDeviceStrategy GraphicsDeviceStrategy { get { return _deviceStrategy; } } public GraphicsDevice GraphicsDevice { get { if (_deviceStrategy != null) return _deviceStrategy.Device; return null; } } GraphicsResource IGraphicsResourceStrategy.GraphicsResource { get { return _graphicsResourceRef.Target as GraphicsResource;} set { if (_graphicsResourceRef.Target != null || value != null) _graphicsResourceRef.Target = value; } } internal GraphicsResourceStrategy() { } public GraphicsResourceStrategy(GraphicsContextStrategy contextStrategy) { BindGraphicsDevice(((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy); } public GraphicsResourceStrategy(GraphicsResourceStrategy source) { BindGraphicsDevice(source._deviceStrategy); } internal void BindGraphicsDevice(GraphicsDeviceStrategy deviceStrategy) { _deviceStrategy = deviceStrategy; _deviceStrategyEvents = new WeakDeviceStrategyEvents(this, _deviceStrategy); } private void GraphicsDeviceStrategy_ContextLost(object sender, EventArgs e) { OnContextLost(e); PlatformGraphicsContextLost(); } private void GraphicsDeviceStrategy_Disposing(object sender, EventArgs e) { OnDeviceDisposing(e); } private void OnContextLost(EventArgs e) { if (_graphicsResourceRef.Target != null) { GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target; graphicsResource.GraphicsResourceStrategy_ContextLost(); } } private void OnDeviceDisposing(EventArgs e) { if (_graphicsResourceRef.Target != null) { GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target; graphicsResource.GraphicsResourceStrategy_DeviceDisposing(); } } protected virtual void PlatformGraphicsContextLost() { } #region IDisposable Members ~GraphicsResourceStrategy() { OnDisposing(EventArgs.Empty); Dispose(false); } public void Dispose() { OnDisposing(EventArgs.Empty); Dispose(true); GC.SuppressFinalize(this); } internal void OnDisposing(EventArgs e) { if (_graphicsResourceRef.Target != null) { GraphicsResource graphicsResource = (GraphicsResource)_graphicsResourceRef.Target; graphicsResource.OnDisposing(); } } protected virtual void Dispose(bool disposing) { if (disposing) { } if (_deviceStrategyEvents != null) { _deviceStrategyEvents.Dispose(); _deviceStrategyEvents = null; } _deviceStrategy = null; } #endregion IDisposable Members private sealed class WeakDeviceStrategyEvents : IDisposable { readonly WeakReference _resourceStrategyRef; GraphicsDeviceStrategy _deviceStrategy; internal WeakDeviceStrategyEvents(GraphicsResourceStrategy resourceStrategy, GraphicsDeviceStrategy deviceStrategy) { _resourceStrategyRef = new WeakReference(resourceStrategy); _deviceStrategy = deviceStrategy; _deviceStrategy.ContextLost += this.GraphicsDeviceStrategy_ContextLost; _deviceStrategy.Disposing += this.GraphicsDeviceStrategy_Disposing; } private void GraphicsDeviceStrategy_ContextLost(object sender, EventArgs e) { if (_resourceStrategyRef.IsAlive) ((GraphicsResourceStrategy)_resourceStrategyRef.Target).GraphicsDeviceStrategy_ContextLost(sender, e); } private void GraphicsDeviceStrategy_Disposing(object sender, EventArgs e) { if (_resourceStrategyRef.IsAlive) ((GraphicsResourceStrategy)_resourceStrategyRef.Target).GraphicsDeviceStrategy_Disposing(sender, e); } public void Dispose() { _deviceStrategy.ContextLost -= this.GraphicsDeviceStrategy_ContextLost; _deviceStrategy.Disposing -= this.GraphicsDeviceStrategy_Disposing; if (_resourceStrategyRef.Target != null) _resourceStrategyRef.Target = null; _deviceStrategy = null; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IGraphicsDeviceService.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Provider of a . /// public interface IGraphicsDeviceService { /// /// The provided . /// GraphicsDevice GraphicsDevice { get; } /// /// Raised when a new has been created. /// event EventHandler DeviceCreated; /// /// Raised when the is disposed. /// event EventHandler DeviceDisposing; /// /// Raised when the has reset. /// /// event EventHandler DeviceReset; /// /// Raised before the is resetting. /// event EventHandler DeviceResetting; } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IGraphicsResourceStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IGraphicsResourceStrategy : IDisposable { GraphicsDevice GraphicsDevice { get; } GraphicsResource GraphicsResource { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IRenderTarget.cs ================================================ //// MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { /// /// Represents a render target. /// public interface IRenderTarget { /// /// Gets the width of the render target in pixels /// /// The width of the render target in pixels. int Width { get; } /// /// Gets the height of the render target in pixels /// /// The height of the render target in pixels. int Height { get; } DepthFormat DepthStencilFormat { get; } int MultiSampleCount { get; } /// /// Gets the usage mode of the render target. /// /// The usage mode of the render target. RenderTargetUsage RenderTargetUsage { get; } IRenderTargetStrategy RenderTargetStrategy { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IRenderTarget2DStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IRenderTarget2DStrategy : ITexture2DStrategy, IRenderTargetStrategy { } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IRenderTarget3DStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IRenderTarget3DStrategy : ITexture3DStrategy, IRenderTargetStrategy { } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IRenderTargetCubeStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IRenderTargetCubeStrategy : ITextureCubeStrategy, IRenderTargetStrategy { } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/IRenderTargetStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IRenderTargetStrategy { DepthFormat DepthStencilFormat { get; } int MultiSampleCount { get; } RenderTargetUsage RenderTargetUsage { get; } bool IsContentLost { get; } void ResolveSubresource(GraphicsContextStrategy graphicsContextStrategy); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ITexture2DStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.IO; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public enum TextureSurfaceType { Texture, RenderTarget, RenderTargetSwapChain, } public interface ITexture2DStrategy : ITextureStrategy { int Width { get; } int Height { get; } int ArraySize { get; } Rectangle Bounds { get; } IntPtr GetSharedHandle(); void SetData(int level, T[] data, int startIndex, int elementCount) where T : struct; void SetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct; void GetData(int level, int arraySlice, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct; int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect); void SaveAsJpeg(Stream stream, int width, int height); void SaveAsPng(Stream stream, int width, int height); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ITexture3DStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface ITexture3DStrategy : ITextureStrategy { int Width { get; } int Height { get; } int Depth { get; } void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct; void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct; } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ITextureCubeStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface ITextureCubeStrategy : ITextureStrategy { int Size { get; } void SetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct; void GetData(CubeMapFace face, int level, Rectangle checkedRect, T[] data, int startIndex, int elementCount) where T : struct; int GetCompressedDataByteSize(int fSize, Rectangle rect, ref Rectangle textureBounds, out Rectangle checkedRect); } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ITextureStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformTexture { T GetTextureStrategy() where T : ITextureStrategy; } public interface ITextureStrategy { SurfaceFormat Format { get; } int LevelCount { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Model.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { /// /// A basic 3D model with per mesh parent bones. /// public sealed class Model { private Matrix[] _cachedBoneTransforms; /// /// A collection of objects which describe how each mesh in the /// mesh collection for this model relates to its parent mesh. /// public ModelBoneCollection Bones { get; private set; } /// /// A collection of objects which compose the model. Each /// in a model may be moved independently and may be composed of multiple materials /// identified as objects. /// public ModelMeshCollection Meshes { get; private set; } /// /// Root bone for this model. /// public ModelBone Root { get; internal set; } /// /// Custom attached object. /// /// Skinning data is example of attached object for model. /// /// public object Tag { get; set; } /// /// Constructs a model. /// /// A valid reference to . /// The collection of bones. /// The collection of meshes. /// /// is null. /// /// /// is null. /// /// /// is null. /// internal Model(List bones, List meshes) { Bones = new ModelBoneCollection(bones); Meshes = new ModelMeshCollection(meshes); } /// /// Draws the model meshes. /// /// The world transform. /// The view transform. /// The projection transform. /// public void Draw(Matrix world, Matrix view, Matrix projection) { if (_cachedBoneTransforms == null) _cachedBoneTransforms = new Matrix[this.Bones.Count]; // Look up combined bone matrices for the entire model. CopyAbsoluteBoneTransformsTo(_cachedBoneTransforms); // Draw the model. foreach (ModelMesh mesh in Meshes) { foreach (Effect effect in mesh.Effects) { IEffectMatrices effectMatricies = effect as IEffectMatrices; if (effectMatricies != null) { effectMatricies.World = _cachedBoneTransforms[mesh.ParentBone.Index] * world; effectMatricies.View = view; effectMatricies.Projection = projection; } else throw new InvalidOperationException("This model contains a custom effect which does not implement the IEffectMatrices interface, so it cannot be drawn using Model.Draw(...). Instead, call ModelMesh.Draw() after setting the appropriate effect parameters."); } mesh.Draw(); } } /// /// Copies bone transforms relative to all parent bones of the each bone from this model to a given array. /// /// The array receiving the transformed bones. public void CopyAbsoluteBoneTransformsTo(Matrix[] destinationBoneTransforms) { if (destinationBoneTransforms == null) throw new ArgumentNullException("destinationBoneTransforms"); if (destinationBoneTransforms.Length < this.Bones.Count) throw new ArgumentOutOfRangeException("destinationBoneTransforms"); int count = this.Bones.Count; for (int i = 0; i < count; i++) { ModelBone modelBone = this.Bones[i]; if (modelBone.Parent != null) { int parentBoneIndex = modelBone.Parent.Index; Matrix.Multiply(ref modelBone._transform, ref destinationBoneTransforms[parentBoneIndex], out destinationBoneTransforms[i]); } else { destinationBoneTransforms[i] = modelBone._transform; } } } /// /// Copies bone transforms relative to bone from a given array to this model. /// /// The array of prepared bone transform data. /// /// is null. /// /// /// is invalid. /// public void CopyBoneTransformsFrom(Matrix[] sourceBoneTransforms) { if (sourceBoneTransforms == null) throw new ArgumentNullException("sourceBoneTransforms"); if (sourceBoneTransforms.Length < Bones.Count) throw new ArgumentOutOfRangeException("sourceBoneTransforms"); int count = Bones.Count; for (int i = 0; i < count; i++) { Bones[i].Transform = sourceBoneTransforms[i]; } } /// /// Copies bone transforms relative to bone from this model to a given array. /// /// The array receiving the transformed bones. /// /// is null. /// /// /// is invalid. /// public void CopyBoneTransformsTo(Matrix[] destinationBoneTransforms) { if (destinationBoneTransforms == null) throw new ArgumentNullException("destinationBoneTransforms"); if (destinationBoneTransforms.Length < Bones.Count) throw new ArgumentOutOfRangeException("destinationBoneTransforms"); int count = Bones.Count; for (int i = 0; i < count; i++) { destinationBoneTransforms[i] = Bones[i].Transform; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelBone.cs ================================================ using System; using Microsoft.Xna.Framework; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { /// /// Represents bone data for a model. /// public sealed class ModelBone { private List _children = new List(); internal Matrix _transform; /// /// Gets a collection of bones that are children of this bone. /// public ModelBoneCollection Children { get; private set; } /// /// Gets the index of this bone in the Bones collection. /// public int Index { get; private set; } /// /// Gets the name of this bone. /// public string Name { get; private set; } /// /// Gets the parent of this bone. /// public ModelBone Parent { get; internal set; } /// /// Gets or sets the matrix used to transform this bone relative to its parent bone. /// public Matrix Transform { get { return this._transform; } set { this._transform = value; } } internal ModelBone(int index, string name, Matrix transform) { Children = new ModelBoneCollection(_children); this.Index = index; this.Name = name; this.Transform = transform; } // tests only internal ModelBone() { Children = new ModelBoneCollection(_children); } internal void AddChild(ModelBone childModelBone) { _children.Add(childModelBone); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelBoneCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Graphics { /// /// Represents a set of bones associated with a model. /// public class ModelBoneCollection : ReadOnlyCollection { internal ModelBoneCollection(IList list) : base(list) { } /// /// Retrieves a ModelBone from the collection, given the name of the bone. /// /// The name of the bone to retrieve. public ModelBone this[string boneName] { get { ModelBone ret; if (!TryGetValue(boneName, out ret)) throw new KeyNotFoundException(); return ret; } } /// /// Finds a bone with a given name if it exists in the collection. /// /// The name of the bone to find. /// The bone named boneName, if found. /// true if the bone was found public bool TryGetValue(string boneName, out ModelBone value) { if (string.IsNullOrEmpty(boneName)) throw new ArgumentNullException("boneName"); foreach (ModelBone bone in this) { if (bone.Name == boneName) { value = bone; return true; } } value = null; return false; } /// /// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. /// /// public new Enumerator GetEnumerator() { return new Enumerator(this); } /// /// Provides the ability to iterate through the bones in an ModelMeshCollection. /// public struct Enumerator : IEnumerator { private readonly ModelBoneCollection _collection; private int _position; internal Enumerator(ModelBoneCollection collection) { _collection = collection; _position = -1; } /// /// Gets the current element in the ModelMeshCollection. /// public ModelBone Current { get { return _collection[_position]; } } /// /// Advances the enumerator to the next element of the ModelMeshCollection. /// public bool MoveNext() { _position++; return (_position < _collection.Count); } #region IDisposable /// /// Immediately releases the unmanaged resources used by this object. /// public void Dispose() { } #endregion #region IEnumerator Members object IEnumerator.Current { get { return _collection[_position]; } } public void Reset() { _position = -1; } #endregion } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelEffectCollection.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Graphics { // Summary: // Represents a collection of effects associated with a model. public sealed class ModelEffectCollection : ReadOnlyCollection { internal ModelEffectCollection(IList list) : base(list) { } internal ModelEffectCollection() : base(new List()) { } //ModelMeshPart needs to be able to add to ModelMesh's effects list internal void Add(Effect item) { Items.Add(item); } internal void Remove(Effect item) { Items.Remove(item); } // Summary: // Returns a ModelEffectCollection.Enumerator that can iterate through a ModelEffectCollection. public new ModelEffectCollection.Enumerator GetEnumerator() { return new ModelEffectCollection.Enumerator((List)Items); } // Summary: // Provides the ability to iterate through the bones in an ModelEffectCollection. public struct Enumerator : IEnumerator, IDisposable, IEnumerator { List.Enumerator _enumerator; bool _isDisposed; internal Enumerator(List list) { _enumerator = list.GetEnumerator(); _isDisposed = false; } // Summary: // Gets the current element in the ModelEffectCollection. public Effect Current { get { return _enumerator.Current; } } // Summary: // Immediately releases the unmanaged resources used by this object. public void Dispose() { if (!_isDisposed) { _enumerator.Dispose(); _isDisposed = true; } } // // Summary: // Advances the enumerator to the next element of the ModelEffectCollection. public bool MoveNext() { return _enumerator.MoveNext(); } #region IEnumerator Members object IEnumerator.Current { get { return Current; } } void IEnumerator.Reset() { IEnumerator resetEnumerator = _enumerator; resetEnumerator.Reset(); _enumerator = (List.Enumerator)resetEnumerator; } #endregion } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelMesh.cs ================================================ using System; using Microsoft.Xna.Framework; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Graphics { // Summary: // Represents a mesh that is part of a Model. public sealed class ModelMesh { private GraphicsDevice graphicsDevice; internal ModelMesh(GraphicsDevice graphicsDevice, List parts) { // TODO: Complete member initialization this.graphicsDevice = graphicsDevice; MeshParts = new ModelMeshPartCollection(parts); for (int i = 0; i < parts.Count; i++) { parts[i]._parent = this; } Effects = new ModelEffectCollection(); } /*internal void BuildEffectList() { List effects = new List(); foreach (ModelMeshPart item in parts) { if (!effects.Contains(item.Effect)) { if (item.Effect != null) effects.Add(item.Effect); } } Effects = new ModelEffectCollection(effects); }*/ // Summary: // Gets the BoundingSphere that contains this mesh. public BoundingSphere BoundingSphere { get; internal set; } // // Summary: // Gets a collection of effects associated with this mesh. public ModelEffectCollection Effects { get; internal set; } // // Summary: // Gets the ModelMeshPart objects that make up this mesh. Each part of a mesh // is composed of a set of primitives that share the same material. public ModelMeshPartCollection MeshParts { get; private set; } // // Summary: // Gets the name of this mesh. public string Name { get; internal set; } // // Summary: // Gets the parent bone for this mesh. The parent bone of a mesh contains a // transformation matrix that describes how the mesh is located relative to // any parent meshes in a model. public ModelBone ParentBone { get; internal set; } // // Summary: // Gets or sets an object identifying this mesh. public object Tag { get; set; } // Summary: // Draws all of the ModelMeshPart objects in this mesh, using their current // Effect settings. public void Draw() { for(int i = 0; i < MeshParts.Count; i++) { ModelMeshPart part = MeshParts[i]; Effect effect = part.Effect; if (part.PrimitiveCount > 0) { this.graphicsDevice.SetVertexBuffer(part.VertexBuffer); this.graphicsDevice.Indices = part.IndexBuffer; for (int j = 0; j < effect.CurrentTechnique.Passes.Count; j++) { effect.CurrentTechnique.Passes[j].Apply(); graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, part.VertexOffset, part.StartIndex, part.PrimitiveCount); } } } } } //// Summary: //// Represents a mesh that is part of a Model. //public sealed class ModelMesh //{ // // Summary: // // Gets the BoundingSphere that contains this mesh. // public BoundingSphere BoundingSphere { get { throw new NotImplementedException(); } } // // // // Summary: // // Gets a collection of effects associated with this mesh. // public ModelEffectCollection Effects { get { throw new NotImplementedException(); } } // // // // Summary: // // Gets the ModelMeshPart objects that make up this mesh. Each part of a mesh // // is composed of a set of primitives that share the same material. // public ModelMeshPartCollection MeshParts { get { throw new NotImplementedException(); } } // // // // Summary: // // Gets the name of this mesh. // public string Name { get { throw new NotImplementedException(); } } // // // // Summary: // // Gets the parent bone for this mesh. The parent bone of a mesh contains a // // transformation matrix that describes how the mesh is located relative to // // any parent meshes in a model. // public ModelBone ParentBone { get { throw new NotImplementedException(); } } // // // // Summary: // // Gets or sets an object identifying this mesh. // public object Tag { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } // // Summary: // // Draws all of the ModelMeshPart objects in this mesh, using their current // // Effect settings. // public void Draw() { throw new NotImplementedException(); } //} } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelMeshCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Graphics { /// /// Represents a collection of ModelMesh objects. /// public sealed class ModelMeshCollection : ReadOnlyCollection { internal ModelMeshCollection(IList list) : base(list) { } /// /// Retrieves a ModelMesh from the collection, given the name of the mesh. /// /// The name of the mesh to retrieve. public ModelMesh this[string meshName] { get { ModelMesh ret; if (!TryGetValue(meshName, out ret)) throw new KeyNotFoundException(); return ret; } } /// /// Finds a mesh with a given name if it exists in the collection. /// /// The name of the mesh to find. /// The mesh named meshName, if found. /// true if a mesh was found public bool TryGetValue(string meshName, out ModelMesh value) { if (string.IsNullOrEmpty(meshName)) throw new ArgumentNullException("meshName"); foreach (ModelMesh mesh in this) { if (string.Compare(mesh.Name, meshName, StringComparison.Ordinal) == 0) { value = mesh; return true; } } value = null; return false; } /// /// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. /// /// public new Enumerator GetEnumerator() { return new Enumerator(this); } /// /// Provides the ability to iterate through the bones in an ModelMeshCollection. /// public struct Enumerator : IEnumerator { private readonly ModelMeshCollection _collection; private int _position; internal Enumerator(ModelMeshCollection collection) { _collection = collection; _position = -1; } /// /// Gets the current element in the ModelMeshCollection. /// public ModelMesh Current { get { return _collection[_position]; } } /// /// Advances the enumerator to the next element of the ModelMeshCollection. /// public bool MoveNext() { _position++; return (_position < _collection.Count); } #region IDisposable /// /// Immediately releases the unmanaged resources used by this object. /// public void Dispose() { } #endregion #region IEnumerator Members object IEnumerator.Current { get { return _collection[_position]; } } /// This is a MonoGame extension public void Reset() { _position = -1; } #endregion } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelMeshPart.cs ================================================ using System; namespace Microsoft.Xna.Framework.Graphics { public sealed class ModelMeshPart { private Effect _effect; internal ModelMesh _parent; public Effect Effect { get { return _effect; } set { if (value == _effect) return; if (_effect != null) { // First check to see any other parts are also using this effect. bool removeEffect = true; foreach (ModelMeshPart part in _parent.MeshParts) { if (part != this && part._effect == _effect) { removeEffect = false; break; } } if (removeEffect) _parent.Effects.Remove(_effect); } // Set the new effect. _effect = value; if (_effect != null && !_parent.Effects.Contains(_effect)) _parent.Effects.Add(_effect); } } public IndexBuffer IndexBuffer { get; internal set; } public int NumVertices { get; internal set; } public int PrimitiveCount { get; internal set; } public int StartIndex { get; internal set; } public object Tag { get; set; } public VertexBuffer VertexBuffer { get; internal set; } public int VertexOffset { get; internal set; } internal int VertexBufferIndex { get; set; } internal int IndexBufferIndex { get; set; } internal int EffectIndex { get; set; } internal ModelMeshPart() { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ModelMeshPartCollection.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; namespace Microsoft.Xna.Framework.Graphics { public sealed class ModelMeshPartCollection : ReadOnlyCollection { public ModelMeshPartCollection(IList list) : base(list) { } } //// Summary: //// Represents a collection of ModelMeshPart objects. //public sealed class ModelMeshPartCollection : ReadOnlyCollection //{ // internal ModelMeshPartCollection() // : base(new List()) // { // } // // Summary: // // Returns a ModelMeshPartCollection.Enumerator that can iterate through a ModelMeshPartCollection. // public ModelMeshPartCollection.Enumerator GetEnumerator() { throw new NotImplementedException(); } // // Summary: // // Provides the ability to iterate through the bones in an ModelMeshPartCollection. // public struct Enumerator : IEnumerator, IDisposable, IEnumerator // { // // Summary: // // Gets the current element in the ModelMeshPartCollection. // public ModelMeshPart Current { get { throw new NotImplementedException(); } } // // Summary: // // Immediately releases the unmanaged resources used by this object. // public void Dispose() { throw new NotImplementedException(); } // // // // Summary: // // Advances the enumerator to the next element of the ModelMeshPartCollection. // public bool MoveNext() { throw new NotImplementedException(); } // #region IEnumerator Members // object IEnumerator.Current // { // get { throw new NotImplementedException(); } // } // public void Reset() // { // throw new NotImplementedException(); // } // #endregion // } //} } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/NoSuitableGraphicsDeviceException.cs ================================================ using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Graphics { [DataContract] public sealed class NoSuitableGraphicsDeviceException : Exception { public NoSuitableGraphicsDeviceException() : base() { } public NoSuitableGraphicsDeviceException(string message) : base(message) { } public NoSuitableGraphicsDeviceException(string message, Exception inner) : base(message, inner) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/OcclusionQuery.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class OcclusionQuery : GraphicsResource , IPlatformOcclusionQuery { private OcclusionQueryStrategy _strategy; OcclusionQueryStrategy IPlatformOcclusionQuery.Strategy { get { return _strategy; } } /// /// Gets a value indicating whether the occlusion query has completed. /// /// /// if the occlusion query has completed; otherwise, /// . /// public bool IsComplete { get { return _strategy.IsComplete; } } /// /// Gets the number of visible pixels. /// /// The number of visible pixels. /// /// The occlusion query has not yet completed. Check before reading /// the result! /// public int PixelCount { get { if (!IsComplete) throw new InvalidOperationException("The occlusion query has not yet completed. Check IsComplete before reading the result."); return _strategy.PixelCount; } } /// /// Initializes a new instance of the class. /// /// The graphics device. /// /// is . /// /// /// The current graphics profile does not support occlusion queries. /// public OcclusionQuery(GraphicsDevice graphicsDevice) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("The Reach profile does not support occlusion queries."); _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateOcclusionQueryStrategy(); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } /// /// Begins the occlusion query. /// /// /// is called again before calling . /// public void Begin() { _strategy.PlatformBegin(); } /// /// Ends the occlusion query. /// /// /// is called before calling . /// public void End() { _strategy.PlatformEnd(); } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { if (_strategy != null) _strategy.Dispose(); } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/OcclusionQueryStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformOcclusionQuery { OcclusionQueryStrategy Strategy { get; } } public abstract class OcclusionQueryStrategy : GraphicsResourceStrategy { protected readonly GraphicsContextStrategy _contextStrategy; public abstract int PixelCount { get; } public abstract bool IsComplete { get; } protected OcclusionQueryStrategy(GraphicsContextStrategy contextStrategy) : base(contextStrategy) { _contextStrategy = contextStrategy; } public abstract void PlatformBegin(); public abstract void PlatformEnd(); protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Alpha8.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing a single 8 bit normalized W values that is ranging from 0 to 1. /// public struct Alpha8 : IPackedVector, IEquatable, IPackedVector { private byte _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public byte PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Alpha8. /// /// The alpha component public Alpha8(float alpha) { _packedValue = Pack(alpha); } /// /// Gets the packed vector in float format. /// /// The packed vector in Vector3 format public float ToAlpha() { return (float) (_packedValue / 255.0f); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.W); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4( 0.0f, 0.0f, 0.0f, (float) (_packedValue / 255.0f) ); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// True if the object is equal to the packed vector. public override bool Equals(object obj) { return (obj is Alpha8) && Equals((Alpha8) obj); } /// /// Compares another Alpha8 packed vector with the packed vector. /// /// The Alpha8 packed vector to compare. /// True if the packed vectors are equal. public bool Equals(Alpha8 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return (_packedValue / 255.0f).ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Alpha8 left, Alpha8 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Alpha8 left, Alpha8 right) { return left._packedValue != right._packedValue; } private static byte Pack(float alpha) { return (byte) Math.Round( MathHelper.Clamp(alpha, 0, 1) * 255.0f ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Bgr565.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing unsigned normalized values ranging from 0 to 1. The x and z components use 5 bits, and the y component uses 6 bits. /// public struct Bgr565 : IPackedVector, IEquatable, IPackedVector { UInt16 _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public UInt16 PackedValue { get { return _packedValue; } set { _packedValue = value; } } private static UInt16 Pack(float x, float y, float z) { return (UInt16) ((((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 31.0f) & 0x1F) << 11) | (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 63.0f) & 0x3F) << 5) | ((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 31.0f) & 0x1F)); } /// /// Creates a new instance of Bgr565. /// /// The x component /// The y component /// The z component public Bgr565(float x, float y, float z) { _packedValue = Pack(x, y, z); } /// /// Creates a new instance of Bgr565. /// /// Vector containing the components for the packed vector. public Bgr565(Vector3 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z); } /// /// Gets the packed vector in Vector3 format. /// /// The packed vector in Vector3 format public Vector3 ToVector3() { return new Vector3((float)(((_packedValue >> 11) & 0x1F) * (1.0f / 31.0f)), (float)(((_packedValue >> 5) & 0x3F) * (1.0f / 63.0f)), (float)((_packedValue & 0x1F) * (1.0f / 31.0f)) ); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = (UInt16)((((int)(vector.X * 31.0f) & 0x1F) << 11) | (((int)(vector.Y * 63.0f) & 0x3F) << 5) | ((int)(vector.Z * 31.0f) & 0x1F)); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4(ToVector3(), 1.0f); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// true if the object is equal to the packed vector. public override bool Equals(object obj) { if (obj != null && (obj is Bgr565)) return this == (Bgr565)obj; return false; } /// /// Compares another Bgr565 packed vector with the packed vector. /// /// The Bgr565 packed vector to compare. /// true if the packed vectors are equal. public bool Equals(Bgr565 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector3().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Bgr565 left, Bgr565 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Bgr565 left, Bgr565 right) { return left._packedValue != right._packedValue; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Bgra4444.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w. /// public struct Bgra4444 : IPackedVector, IEquatable { UInt16 _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public UInt16 PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Bgra4444. /// /// The x component /// The y component /// The z component /// The w component public Bgra4444(float x, float y, float z, float w) { _packedValue = Pack(x, y, z, w); } /// /// Creates a new instance of Bgra4444. /// /// Vector containing the components for the packed vector. public Bgra4444(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } private static UInt16 Pack(float x, float y, float z, float w) { return (UInt16) ((((int) Math.Round(MathHelper.Clamp(w, 0, 1) * 15.0f) & 0x0F) << 12) | (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 15.0f) & 0x0F) << 8) | (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 15.0f) & 0x0F) << 4) | ((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 15.0f) & 0x0F)); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { const float maxVal = 1 / 15.0f; return new Vector4( ((_packedValue >> 8) & 0x0F) * maxVal, ((_packedValue >> 4) & 0x0F) * maxVal, (_packedValue & 0x0F) * maxVal, ((_packedValue >> 12) & 0x0F) * maxVal); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// true if the object is equal to the packed vector. public override bool Equals(object obj) { if (obj != null && (obj is Bgra4444)) return this == (Bgra4444)obj; return false; } /// /// Compares another Bgra4444 packed vector with the packed vector. /// /// The Bgra4444 packed vector to compare. /// true if the packed vectors are equal. public bool Equals(Bgra4444 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector4().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Bgra4444 left, Bgra4444 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Bgra4444 left, Bgra4444 right) { return left._packedValue != right._packedValue; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Bgra5551.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing unsigned normalized values ranging from 0 to 1. /// The x , y and z components use 5 bits, and the w component uses 1 bit. /// public struct Bgra5551 : IPackedVector, IEquatable, IPackedVector { private UInt16 _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public UInt16 PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Bgra5551. /// /// The x component /// The y component /// The z component /// The w component public Bgra5551(float x, float y, float z, float w) { _packedValue = Pack(x, y, z, w); } /// /// Creates a new instance of Bgra5551. /// /// /// Vector containing the components for the packed vector. /// public Bgra5551(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4( (float) (((_packedValue >> 10) & 0x1F) / 31.0f), (float) (((_packedValue >> 5) & 0x1F) / 31.0f), (float) (((_packedValue >> 0) & 0x1F) / 31.0f), (float) ((_packedValue >> 15)& 0x01) ); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// True if the object is equal to the packed vector. public override bool Equals(object obj) { return (obj is Bgra5551) && Equals((Bgra5551) obj); } /// /// Compares another Bgra5551 packed vector with the packed vector. /// /// The Bgra5551 packed vector to compare. /// True if the packed vectors are equal. public bool Equals(Bgra5551 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector4().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Bgra5551 left, Bgra5551 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Bgra5551 left, Bgra5551 right) { return left._packedValue != right._packedValue; } private static UInt16 Pack(float x, float y, float z, float w) { return (UInt16) ( (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 31.0f) & 0x1F) << 10) | (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 31.0f) & 0x1F) << 5) | (((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 31.0f) & 0x1F) << 0) | ((((int) Math.Round(MathHelper.Clamp(w, 0, 1)) & 0x1) << 15)) ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Byte4.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing four 8-bit unsigned integer values, ranging from 0 to 255. /// public struct Byte4 : IPackedVector, IEquatable, IPackedVector { uint _packedValue; /// /// Directly gets or sets the packed representation of the value. /// /// The packed representation of the value. [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Initializes a new instance of the Byte4 class. /// /// A vector containing the initial values for the components of the Byte4 structure. public Byte4(Vector4 vector) { _packedValue = Pack(ref vector); } /// /// Initializes a new instance of the Byte4 class. /// /// Initial value for the x component. /// Initial value for the y component. /// Initial value for the z component. /// Initial value for the w component. public Byte4(float x, float y, float z, float w) { var vector = new Vector4(x, y, z, w); _packedValue = Pack(ref vector); } /// /// Compares the current instance of a class to another instance to determine whether they are different. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are different; false otherwise. public static bool operator !=(Byte4 left, Byte4 right) { return left.PackedValue != right.PackedValue; } /// /// Compares the current instance of a class to another instance to determine whether they are the same. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are the same; false otherwise. public static bool operator ==(Byte4 left, Byte4 right) { return left.PackedValue == right.PackedValue; } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public override bool Equals(object obj) { if (obj is Byte4) return this == (Byte4)obj; return false; } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public bool Equals(Byte4 other) { return this == other; } /// /// Gets the hash code for the current instance. /// /// Hash code for the instance. public override int GetHashCode() { return _packedValue.GetHashCode(); } /// /// Returns a string representation of the current instance. /// /// String that represents the object. public override string ToString() { return _packedValue.ToString("x8"); } /// /// Packs a vector into a uint. /// /// The vector containing the values to pack. /// The ulong containing the packed values. static uint Pack(ref Vector4 vector) { const float max = 255.0f; const float min = 0.0f; // clamp the value between min and max values var byte4 = (uint) Math.Round(MathHelper.Clamp(vector.X, min, max)) & 0xFF; var byte3 = ((uint) Math.Round(MathHelper.Clamp(vector.Y, min, max)) & 0xFF) << 0x8; var byte2 = ((uint) Math.Round(MathHelper.Clamp(vector.Z, min, max)) & 0xFF) << 0x10; var byte1 = ((uint) Math.Round(MathHelper.Clamp(vector.W, min, max)) & 0xFF) << 0x18; return byte4 | byte3 | byte2 | byte1; } /// /// Sets the packed representation from a Vector4. /// /// The vector to create the packed representation from. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(ref vector); } /// /// Expands the packed representation into a Vector4. /// /// The expanded vector. public Vector4 ToVector4() { return new Vector4( (float)(_packedValue & 0xFF), (float)((_packedValue >> 0x8) & 0xFF), (float)((_packedValue >> 0x10) & 0xFF), (float)((_packedValue >> 0x18) & 0xFF)); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/HalfSingle.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct HalfSingle : IPackedVector, IEquatable, IPackedVector { UInt16 _packedValue; [CLSCompliant(false)] public ushort PackedValue { get { return _packedValue; } set { _packedValue = value; } } public HalfSingle(float single) { _packedValue = HalfTypeHelper.Convert(single); } public float ToSingle() { return HalfTypeHelper.Convert(_packedValue); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = HalfTypeHelper.Convert(vector.X); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4(this.ToSingle(), 0f, 0f, 1f); } public override bool Equals(object obj) { if (obj != null && obj.GetType() == this.GetType()) { return this == (HalfSingle)obj; } return false; } public bool Equals(HalfSingle other) { return _packedValue == other._packedValue; } public override string ToString() { return this.ToSingle().ToString(); } public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(HalfSingle left, HalfSingle right) { return left._packedValue == right._packedValue; } public static bool operator !=(HalfSingle left, HalfSingle right) { return left._packedValue != right._packedValue; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/HalfTypeHelper.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics.PackedVector { internal class HalfTypeHelper { [StructLayout(LayoutKind.Explicit)] private struct uif { [FieldOffset(0)] public float f; [FieldOffset(0)] public int i; [FieldOffset(0)] public uint u; } internal static UInt16 Convert(float f) { uif uif = new uif(); uif.f = f; return Convert(uif.i); } internal static UInt16 Convert(int i) { int s = (i >> 16) & 0x00008000; int e = ((i >> 23) & 0x000000ff) - (127 - 15); int m = i & 0x007fffff; if (e <= 0) { if (e < -10) { return (UInt16)s; } m = m | 0x00800000; int t = 14 - e; int a = (1 << (t - 1)) - 1; int b = (m >> t) & 1; m = (m + a + b) >> t; return (UInt16)(s | m); } else if (e == 0xff - (127 - 15)) { if (m == 0) { return (UInt16)(s | 0x7c00); } else { m >>= 13; return (UInt16)(s | 0x7c00 | m | ((m == 0) ? 1 : 0)); } } else { m = m + 0x00000fff + ((m >> 13) & 1); if ((m & 0x00800000) != 0) { m = 0; e += 1; } if (e > 30) { return (UInt16)(s | 0x7c00); } return (UInt16)(s | (e << 10) | (m >> 13)); } } internal static float Convert(ushort value) { uint rst; uint mantissa = (uint)(value & 1023); uint exp = 0xfffffff2; if ((value & -33792) == 0) { if (mantissa != 0) { while ((mantissa & 1024) == 0) { exp--; mantissa = mantissa << 1; } mantissa &= 0xfffffbff; rst = ((uint)((((uint)value & 0x8000) << 16) | ((exp + 127) << 23))) | (mantissa << 13); } else { rst = (uint)((value & 0x8000) << 16); } } else { rst = (uint)(((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0x1f) - 15) + 127) << 23)) | (mantissa << 13)); } var uif = new uif(); uif.u = rst; return uif.f; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/HalfVector2.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct HalfVector2 : IPackedVector, IPackedVector, IEquatable { private uint _packedValue; [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } public HalfVector2(float x, float y) { this._packedValue = PackHelper(x, y); } public HalfVector2(Vector2 vector) { this._packedValue = PackHelper(vector.X, vector.Y); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = PackHelper(vector.X, vector.Y); } private static uint PackHelper(float vectorX, float vectorY) { uint word2 = HalfTypeHelper.Convert(vectorX); uint word1 = (uint)(HalfTypeHelper.Convert(vectorY) << 0x10); return (word2 | word1); } public Vector2 ToVector2() { Vector2 result; result.X = HalfTypeHelper.Convert((ushort)_packedValue); result.Y = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x10)); return result; } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { Vector2 vector = this.ToVector2(); return new Vector4(vector.X, vector.Y, 0f, 1f); } public override string ToString() { return this.ToVector2().ToString(); } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override bool Equals(object obj) { return ((obj is HalfVector2) && this.Equals((HalfVector2)obj)); } public bool Equals(HalfVector2 other) { return _packedValue.Equals(other._packedValue); } public static bool operator ==(HalfVector2 left, HalfVector2 right) { return left.Equals(right); } public static bool operator !=(HalfVector2 left, HalfVector2 right) { return !left.Equals(right); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/HalfVector4.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing four 16-bit floating-point values. /// public struct HalfVector4 : IPackedVector, IPackedVector, IEquatable { ulong _packedValue; /// /// Directly gets or sets the packed representation of the value. /// /// The packed representation of the value. [CLSCompliant(false)] public ulong PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Initializes a new instance of the HalfVector4 structure. /// /// Initial value for the x component. /// Initial value for the y component. /// Initial value for the z component. /// Initial value for the q component. public HalfVector4(float x, float y, float z, float w) { var vector = new Vector4(x, y, z, w); _packedValue = PackHelper(ref vector); } /// /// Initializes a new instance of the HalfVector4 structure. /// /// A vector containing the initial values for the components of the HalfVector4 structure. public HalfVector4(Vector4 vector) { _packedValue = PackHelper(ref vector); } /// /// Sets the packed representation from a Vector4. /// /// The vector to create the packed representation from. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = PackHelper(ref vector); } /// /// Packs a vector into a ulong. /// /// The vector containing the values to pack. /// The ulong containing the packed values. static ulong PackHelper(ref Vector4 vector) { ulong word4 = (ulong)HalfTypeHelper.Convert(vector.X); ulong word3 = ((ulong)HalfTypeHelper.Convert(vector.Y) << 0x10); ulong word2 = ((ulong)HalfTypeHelper.Convert(vector.Z) << 0x20); ulong word1 = ((ulong)HalfTypeHelper.Convert(vector.W) << 0x30); return word4 | word3 | word2 | word1; } /// /// Expands the packed representation into a Vector4. /// /// The expanded vector. public Vector4 ToVector4() { Vector4 result; result.X = HalfTypeHelper.Convert((ushort)_packedValue); result.Y = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x10)); result.Z = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x20)); result.W = HalfTypeHelper.Convert((ushort)(_packedValue >> 0x30)); return result; } /// /// Returns a string representation of the current instance. /// /// String that represents the object. public override string ToString() { return ToVector4().ToString(); } /// /// Gets the hash code for the current instance. /// /// Hash code for the instance. public override int GetHashCode() { return _packedValue.GetHashCode(); } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public override bool Equals(object obj) { return ((obj is HalfVector4) && Equals((HalfVector4)obj)); } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public bool Equals(HalfVector4 other) { return _packedValue.Equals(other._packedValue); } /// /// Compares the current instance of a class to another instance to determine whether they are the same. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are the same; false otherwise. public static bool operator ==(HalfVector4 left, HalfVector4 right) { return left.Equals(right); } /// /// Compares the current instance of a class to another instance to determine whether they are different. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are different; false otherwise. public static bool operator !=(HalfVector4 left, HalfVector4 right) { return !left.Equals(right); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/IPackedVector.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // // Author: Kenneth James Pouncey using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { // http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.packedvector.ipackedvector.aspx public interface IPackedVector { void PackFromVector4(Vector4 vector); Vector4 ToVector4(); } // PackedVector Generic interface // http://msdn.microsoft.com/en-us/library/bb197661.aspx public interface IPackedVector : IPackedVector { TPacked PackedValue { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedByte2.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct NormalizedByte2 : IPackedVector, IEquatable { private ushort _packedValue; public NormalizedByte2(Vector2 vector) { _packedValue = Pack(vector.X, vector.Y); } public NormalizedByte2(float x, float y) { _packedValue = Pack(x, y); } public static bool operator !=(NormalizedByte2 left, NormalizedByte2 right) { return left._packedValue != right._packedValue; } public static bool operator ==(NormalizedByte2 left, NormalizedByte2 right) { return left._packedValue == right._packedValue; } [CLSCompliant(false)] public ushort PackedValue { get { return _packedValue; } set { _packedValue = value; } } public override bool Equals(object obj) { return (obj is NormalizedByte2) && ((NormalizedByte2)obj)._packedValue == _packedValue; } public bool Equals(NormalizedByte2 other) { return _packedValue == other._packedValue; } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override string ToString() { return _packedValue.ToString("X"); } private static ushort Pack(float x, float y) { var byte2 = (((ushort) Math.Round(MathHelper.Clamp(x, -1.0f, 1.0f) * 127.0f)) & 0xFF) << 0; var byte1 = (((ushort) Math.Round(MathHelper.Clamp(y, -1.0f, 1.0f) * 127.0f)) & 0xFF) << 8; return (ushort)(byte2 | byte1); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4(ToVector2(), 0.0f, 1.0f); } public Vector2 ToVector2() { return new Vector2( ((sbyte) ((_packedValue >> 0) & 0xFF)) / 127.0f, ((sbyte) ((_packedValue >> 8) & 0xFF)) / 127.0f); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedByte4.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct NormalizedByte4 : IPackedVector, IEquatable { private uint _packedValue; public NormalizedByte4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } public NormalizedByte4(float x, float y, float z, float w) { _packedValue = Pack(x, y, z, w); } public static bool operator !=(NormalizedByte4 left, NormalizedByte4 right) { return left._packedValue != right._packedValue; } public static bool operator ==(NormalizedByte4 left, NormalizedByte4 right) { return left._packedValue == right._packedValue; } [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } public override bool Equals(object obj) { return (obj is NormalizedByte4) && ((NormalizedByte4)obj)._packedValue == _packedValue; } public bool Equals(NormalizedByte4 other) { return _packedValue == other._packedValue; } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override string ToString() { return _packedValue.ToString("X"); } private static uint Pack(float x, float y, float z, float w) { var byte4 = (((uint) Math.Round(MathHelper.Clamp(x, -1.0f, 1.0f) * 127.0f)) & 0xff) << 0; var byte3 = (((uint) Math.Round(MathHelper.Clamp(y, -1.0f, 1.0f) * 127.0f)) & 0xff) << 8; var byte2 = (((uint) Math.Round(MathHelper.Clamp(z, -1.0f, 1.0f) * 127.0f)) & 0xff) << 16; var byte1 = (((uint) Math.Round(MathHelper.Clamp(w, -1.0f, 1.0f) * 127.0f)) & 0xff) << 24; return byte4 | byte3 | byte2 | byte1; } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } public Vector4 ToVector4() { return new Vector4( ((sbyte) ((_packedValue >> 0) & 0xFF)) / 127.0f, ((sbyte) ((_packedValue >> 8) & 0xFF)) / 127.0f, ((sbyte) ((_packedValue >> 16) & 0xFF)) / 127.0f, ((sbyte) ((_packedValue >> 24) & 0xFF)) / 127.0f); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedShort2.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct NormalizedShort2 : IPackedVector, IEquatable { private uint _packedValue; public NormalizedShort2(Vector2 vector) { _packedValue = PackInTwo(vector.X, vector.Y); } public NormalizedShort2(float x, float y) { _packedValue = PackInTwo(x, y); } public static bool operator !=(NormalizedShort2 left, NormalizedShort2 right) { return !left.Equals(right); } public static bool operator ==(NormalizedShort2 left, NormalizedShort2 right) { return left.Equals(right); } [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } public override bool Equals(object obj) { return (obj is NormalizedShort2) && Equals((NormalizedShort2)obj); } public bool Equals(NormalizedShort2 other) { return _packedValue.Equals(other._packedValue); } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override string ToString() { return _packedValue.ToString("X"); } public Vector2 ToVector2() { const float maxVal = 0x7FFF; var v2 = new Vector2(); v2.X = ((short)(_packedValue & 0xFFFF)) / maxVal; v2.Y = (short)(_packedValue >> 0x10) / maxVal; return v2; } private static uint PackInTwo(float vectorX, float vectorY) { const float maxPos = 0x7FFF; const float minNeg = -maxPos; // clamp the value between min and max values // Round rather than truncate. var word2 = (uint)((int)MathHelper.Clamp((float)Math.Round(vectorX * maxPos), minNeg, maxPos) & 0xFFFF); var word1 = (uint)(((int)MathHelper.Clamp((float)Math.Round(vectorY * maxPos), minNeg, maxPos) & 0xFFFF) << 0x10); return (word2 | word1); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = PackInTwo(vector.X, vector.Y); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { const float maxVal = 0x7FFF; var v4 = new Vector4(0,0,0,1); v4.X = ((short)((_packedValue >> 0x00) & 0xFFFF)) / maxVal; v4.Y = ((short)((_packedValue >> 0x10) & 0xFFFF)) / maxVal; return v4; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/NormalizedShort4.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct NormalizedShort4 : IPackedVector, IEquatable { private ulong _packedValue; public NormalizedShort4(Vector4 vector) { _packedValue = PackInFour(vector.X, vector.Y, vector.Z, vector.W); } public NormalizedShort4(float x, float y, float z, float w) { _packedValue = PackInFour(x, y, z, w); } public static bool operator !=(NormalizedShort4 left, NormalizedShort4 right) { return !left.Equals(right); } public static bool operator ==(NormalizedShort4 left, NormalizedShort4 right) { return left.Equals(right); } [CLSCompliant(false)] public ulong PackedValue { get { return _packedValue; } set { _packedValue = value; } } public override bool Equals(object obj) { return (obj is NormalizedShort4) && Equals((NormalizedShort4)obj); } public bool Equals(NormalizedShort4 other) { return _packedValue.Equals(other._packedValue); } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override string ToString() { return _packedValue.ToString("X"); } private static ulong PackInFour(float vectorX, float vectorY, float vectorZ, float vectorW) { const long mask = 0xFFFF; const long maxPos = 0x7FFF; const long minNeg = -maxPos; // clamp the value between min and max values var word4 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorX * maxPos, minNeg, maxPos)) & mask); var word3 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorY * maxPos, minNeg, maxPos)) & mask) << 0x10; var word2 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorZ * maxPos, minNeg, maxPos)) & mask) << 0x20; var word1 = (ulong)((int)Math.Round(MathHelper.Clamp(vectorW * maxPos, minNeg, maxPos)) & mask) << 0x30; return (word4 | word3 | word2 | word1); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = PackInFour(vector.X, vector.Y, vector.Z, vector.W); } public Vector4 ToVector4() { const float maxVal = 0x7FFF; var v4 = new Vector4(); v4.X = ((short)((_packedValue >> 0x00) & 0xFFFF)) / maxVal; v4.Y = ((short)((_packedValue >> 0x10) & 0xFFFF)) / maxVal; v4.Z = ((short)((_packedValue >> 0x20) & 0xFFFF)) / maxVal; v4.W = ((short)((_packedValue >> 0x30) & 0xFFFF)) / maxVal; return v4; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Rg32.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing two 16-bit unsigned normalized values ranging from 0 to 1. /// public struct Rg32 : IPackedVector, IEquatable, IPackedVector { private uint _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Rg32. /// /// The x component /// The y component public Rg32(float x, float y) { _packedValue = Pack(x, y); } /// /// Creates a new instance of Rg32. /// /// /// Vector containing the components for the packed vector. /// public Rg32(Vector2 vector) { _packedValue = Pack(vector.X, vector.Y); } /// /// Gets the packed vector in Vector2 format. /// /// The packed vector in Vector2 format public Vector2 ToVector2() { return new Vector2( (float) ((_packedValue & 0xFFFF) / 65535.0f), (float)(((_packedValue >> 16) & 0xFFFF) / 65535.0f) ); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4(ToVector2(), 0.0f, 1.0f); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// True if the object is equal to the packed vector. public override bool Equals(object obj) { return (obj is Rg32) && Equals((Rg32) obj); } /// /// Compares another Rg32 packed vector with the packed vector. /// /// The Rg32 packed vector to compare. /// True if the packed vectors are equal. public bool Equals(Rg32 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector2().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Rg32 left, Rg32 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Rg32 left, Rg32 right) { return left._packedValue != right._packedValue; } private static uint Pack(float x, float y) { return (uint) ( (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 65535.0f) & 0xFFFF) ) | (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 65535.0f) & 0xFFFF) << 16) ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Rgba1010102.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing unsigned normalized values ranging from 0 to 1. /// The x, y and z components use 10 bits, and the w component uses 2 bits. /// public struct Rgba1010102 : IPackedVector, IEquatable, IPackedVector { private uint _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Rgba1010102. /// /// The x component /// The y component /// The z component /// The w component public Rgba1010102(float x, float y, float z, float w) { _packedValue = Pack(x, y, z, w); } /// /// Creates a new instance of Rgba1010102. /// /// /// Vector containing the components for the packed vector. /// public Rgba1010102(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4( (float) (((_packedValue >> 0) & 0x03FF) / 1023.0f), (float) (((_packedValue >> 10) & 0x03FF) / 1023.0f), (float) (((_packedValue >> 20) & 0x03FF) / 1023.0f), (float) (((_packedValue >> 30) & 0x03) / 3.0f) ); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// True if the object is equal to the packed vector. public override bool Equals(object obj) { return (obj is Rgba1010102) && Equals((Rgba1010102) obj); } /// /// Compares another Rgba1010102 packed vector with the packed vector. /// /// The Rgba1010102 packed vector to compare. /// True if the packed vectors are equal. public bool Equals(Rgba1010102 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector4().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Rgba1010102 left, Rgba1010102 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Rgba1010102 left, Rgba1010102 right) { return left._packedValue != right._packedValue; } private static uint Pack(float x, float y, float z, float w) { return (uint) ( (((int) Math.Round(MathHelper.Clamp(x, 0, 1) * 1023.0f) & 0x03FF) << 0) | (((int) Math.Round(MathHelper.Clamp(y, 0, 1) * 1023.0f) & 0x03FF) << 10) | (((int) Math.Round(MathHelper.Clamp(z, 0, 1) * 1023.0f) & 0x03FF) << 20) | (((int) Math.Round(MathHelper.Clamp(w, 0, 1) * 3.0f) & 0x03) << 30) ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Rgba64.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing four 16-bit unsigned normalized values ranging from 0 to 1. /// public struct Rgba64 : IPackedVector, IEquatable, IPackedVector { private ulong _packedValue; /// /// Gets and sets the packed value. /// [CLSCompliant(false)] public ulong PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Creates a new instance of Rgba64. /// /// The x component /// The y component /// The z component /// The w component public Rgba64(float x, float y, float z, float w) { _packedValue = Pack(x, y, z, w); } /// /// Creates a new instance of Rgba64. /// /// /// Vector containing the components for the packed vector. /// public Rgba64(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { return new Vector4( (float) (((_packedValue) & 0xFFFF) / 65535.0f), (float) (((_packedValue >> 16) & 0xFFFF) / 65535.0f), (float) (((_packedValue >> 32) & 0xFFFF) / 65535.0f), (float) (((_packedValue >> 48) & 0xFFFF) / 65535.0f) ); } /// /// Sets the packed vector from a Vector4. /// /// Vector containing the components. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(vector.X, vector.Y, vector.Z, vector.W); } /// /// Compares an object with the packed vector. /// /// The object to compare. /// True if the object is equal to the packed vector. public override bool Equals(object obj) { return (obj is Rgba64) && Equals((Rgba64) obj); } /// /// Compares another Rgba64 packed vector with the packed vector. /// /// The Rgba64 packed vector to compare. /// True if the packed vectors are equal. public bool Equals(Rgba64 other) { return _packedValue == other._packedValue; } /// /// Gets a string representation of the packed vector. /// /// A string representation of the packed vector. public override string ToString() { return ToVector4().ToString(); } /// /// Gets a hash code of the packed vector. /// /// The hash code for the packed vector. public override int GetHashCode() { return _packedValue.GetHashCode(); } public static bool operator ==(Rgba64 left, Rgba64 right) { return left._packedValue == right._packedValue; } public static bool operator !=(Rgba64 left, Rgba64 right) { return left._packedValue != right._packedValue; } private static ulong Pack(float x, float y, float z, float w) { return (ulong) ( (((ulong)Math.Round(MathHelper.Clamp(x * 0xFFFF, 0, 65535f)) ) ) | (((ulong)Math.Round(MathHelper.Clamp(y * 0xFFFF, 0, 65535f)) ) << 16) | (((ulong)Math.Round(MathHelper.Clamp(z * 0xFFFF, 0, 65535f)) ) << 32) | (((ulong)Math.Round(MathHelper.Clamp(w * 0xFFFF, 0, 65535f)) ) << 48) ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Short2.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { public struct Short2 : IPackedVector, IEquatable { private uint _packedValue; [CLSCompliant(false)] public uint PackedValue { get { return _packedValue; } set { _packedValue = value; } } public Short2(Vector2 vector) { _packedValue = PackInTwo(vector.X, vector.Y); } public Short2(Single x,Single y) { _packedValue = PackInTwo(x, y); } public static bool operator !=(Short2 left, Short2 right) { return left.PackedValue != right.PackedValue; } public static bool operator ==(Short2 left, Short2 right) { return left.PackedValue == right.PackedValue; } public override bool Equals(object obj) { if (obj is Short2) return this == (Short2)obj; return false; } public bool Equals(Short2 other) { return this == other; } public override int GetHashCode() { return _packedValue.GetHashCode(); } public override string ToString() { return _packedValue.ToString("x8"); } public Vector2 ToVector2() { var v2 = new Vector2(); v2.X = (short)(_packedValue & 0xFFFF); v2.Y = (short)(_packedValue >> 0x10); return v2; } private static uint PackInTwo(float vectorX, float vectorY) { const float maxPos = 0x7FFF; // Largest two byte positive number 0xFFFF >> 1; const float minNeg = ~(int)maxPos; // two's complement // clamp the value between min and max values var word2 = ((uint) Math.Round(MathHelper.Clamp(vectorX, minNeg, maxPos)) & 0xFFFF); var word1 = (((uint) Math.Round(MathHelper.Clamp(vectorY, minNeg, maxPos)) & 0xFFFF) << 0x10); return (word2 | word1); } void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Short2.PackInTwo(vector.X, vector.Y); } /// /// Gets the packed vector in Vector4 format. /// /// The packed vector in Vector4 format public Vector4 ToVector4() { var v4 = new Vector4(0,0,0,1); v4.X = (short)(_packedValue & 0xFFFF); v4.Y = (short)(_packedValue >> 0x10); return v4; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PackedVector/Short4.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics.PackedVector { /// /// Packed vector type containing four 16-bit signed integer values. /// public struct Short4 : IPackedVector, IEquatable { ulong _packedValue; /// /// Directly gets or sets the packed representation of the value. /// /// The packed representation of the value. [CLSCompliant(false)] public ulong PackedValue { get { return _packedValue; } set { _packedValue = value; } } /// /// Initializes a new instance of the Short4 class. /// /// A vector containing the initial values for the components of the Short4 structure. public Short4(Vector4 vector) { _packedValue = Pack(ref vector); } /// /// Initializes a new instance of the Short4 class. /// /// Initial value for the x component. /// Initial value for the y component. /// Initial value for the z component. /// Initial value for the w component. public Short4(float x, float y, float z, float w) { var vector = new Vector4(x, y, z, w); _packedValue = Pack(ref vector); } /// /// Compares the current instance of a class to another instance to determine whether they are different. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are different; false otherwise. public static bool operator !=(Short4 left, Short4 right) { return left.PackedValue != right.PackedValue; } /// /// Compares the current instance of a class to another instance to determine whether they are the same. /// /// The object to the left of the equality operator. /// The object to the right of the equality operator. /// true if the objects are the same; false otherwise. public static bool operator ==(Short4 left, Short4 right) { return left.PackedValue == right.PackedValue; } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public override bool Equals(object obj) { if (obj is Short4) return this == (Short4)obj; return false; } /// /// Returns a value that indicates whether the current instance is equal to a specified object. /// /// The object with which to make the comparison. /// true if the current instance is equal to the specified object; false otherwise. public bool Equals(Short4 other) { return this == other; } /// /// Gets the hash code for the current instance. /// /// Hash code for the instance. public override int GetHashCode() { return _packedValue.GetHashCode(); } /// /// Returns a string representation of the current instance. /// /// String that represents the object. public override string ToString() { return _packedValue.ToString("x16"); } /// /// Packs a vector into a ulong. /// /// The vector containing the values to pack. /// The ulong containing the packed values. static ulong Pack(ref Vector4 vector) { const long mask = 0xFFFF; const long maxPos = 0x7FFF; // Largest two byte positive number 0xFFFF >> 1; const float minNeg = ~(int)maxPos; // two's complement // clamp the value between min and max values var word4 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.X, minNeg, maxPos))) & mask); var word3 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.Y, minNeg, maxPos)) & mask)) << 0x10; var word2 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.Z, minNeg, maxPos)) & mask)) << 0x20; var word1 = ((ulong)((int) Math.Round(MathHelper.Clamp(vector.W, minNeg, maxPos)) & mask)) << 0x30; return word4 | word3 | word2 | word1; } /// /// Sets the packed representation from a Vector4. /// /// The vector to create the packed representation from. void IPackedVector.PackFromVector4(Vector4 vector) { _packedValue = Pack(ref vector); } /// /// Expands the packed representation into a Vector4. /// /// The expanded vector. public Vector4 ToVector4() { return new Vector4( (short)((_packedValue & 0xFFFF)), (short)((_packedValue >> 0x10) & 0xFFFF), (short)((_packedValue >> 0x20) & 0xFFFF), (short)((_packedValue >> 0x30) & 0xFFFF)); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PresentInterval.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines how updates the game window. /// public enum PresentInterval { /// /// Equivalent to . /// Default, /// /// The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than the screen refresh rate. /// One, /// /// The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than every second screen refresh. /// Two, /// /// The driver updates the window client area immediately. Present operations might be affected immediately. There is no limit for framerate. /// Immediate, } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PresentationEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class PresentationEventArgs : EventArgs { public PresentationParameters PresentationParameters { get; private set; } internal PresentationEventArgs(PresentationParameters presentationParameters) { PresentationParameters = presentationParameters; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/PresentationParameters.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Graphics { public class PresentationParameters { #region Constants public const int DefaultPresentRate = 60; #endregion Constants #region Private Fields private SurfaceFormat _backBufferFormat = SurfaceFormat.Color; private DepthFormat _depthStencilFormat = DepthFormat.None; private int _backBufferWidth; private int _backBufferHeight; private int _multiSampleCount; private RenderTargetUsage _renderTargetUsage = RenderTargetUsage.DiscardContents; private PresentInterval _presentationInterval = PresentInterval.Default; private DisplayOrientation _displayOrientation= DisplayOrientation.Default; private bool _isFullScreen; private bool _hardwareModeSwitch = true; private IntPtr _deviceWindowHandle; private bool _useDebugLayers; private DriverType _useDriverType; #endregion Private Fields #region Constructors /// /// Create a instance with default values for all properties. /// public PresentationParameters() { } #endregion Constructors #region Properties /// /// Get or set the format of the back buffer. /// public SurfaceFormat BackBufferFormat { get { return _backBufferFormat; } set { _backBufferFormat = value; } } /// /// Get or set the height of the back buffer. /// public int BackBufferHeight { get { return _backBufferHeight; } set { _backBufferHeight = value; } } /// /// Get or set the width of the back buffer. /// public int BackBufferWidth { get { return _backBufferWidth; } set { _backBufferWidth = value; } } /// /// Get the bounds of the back buffer. /// public Rectangle Bounds { get { return new Rectangle(0, 0, _backBufferWidth, _backBufferHeight); } } /// /// Get or set the handle of the window that will present the back buffer. /// public IntPtr DeviceWindowHandle { get { return _deviceWindowHandle; } set { _deviceWindowHandle = value; } } /// /// Get or set the depth stencil format for the back buffer. /// public DepthFormat DepthStencilFormat { get { return _depthStencilFormat; } set { _depthStencilFormat = value; } } /// /// Get or set a value indicating if we are in full screen mode. /// public bool IsFullScreen { get { return _isFullScreen; } set { _isFullScreen = value; } } /// /// If true the will do a mode switch /// when going to full screen mode. If false it will instead do a /// soft full screen by maximizing the window and making it borderless. /// public bool HardwareModeSwitch { get { return _hardwareModeSwitch; } set { _hardwareModeSwitch = value; } } /// /// Get or set the multisample count for the back buffer. /// public int MultiSampleCount { get { return _multiSampleCount; } set { _multiSampleCount = value; } } /// /// Get or set the presentation interval. /// public PresentInterval PresentationInterval { get { return _presentationInterval; } set { _presentationInterval = value; } } /// /// Get or set the display orientation. /// public DisplayOrientation DisplayOrientation { get { return _displayOrientation; } set { _displayOrientation = value; } } /// /// Get or set the RenderTargetUsage for the back buffer. /// Determines if the back buffer is cleared when it is set as the /// render target by the . /// target. /// public RenderTargetUsage RenderTargetUsage { get { return _renderTargetUsage; } set { _renderTargetUsage = value; } } /// /// Used to request the graphics device should be created /// with debugging features enabled. /// /// Usable only on DirectX platforms. public bool UseDebugLayers { get { return _useDebugLayers; } set { _useDebugLayers = value; } } /// /// Used to request creation of a specific kind of driver. /// /// /// These values only work on DirectX platforms and must be defined before the graphics device /// is created. by default. /// public DriverType UseDriverType { get { return _useDriverType; } set { _useDriverType = value; } } /// /// Defines the driver type for graphics adapter. /// /// Usable only on DirectX platforms. public enum DriverType { /// /// Hardware device been used for rendering. Maximum speed and performance. /// Hardware, /// /// Emulates the hardware device on CPU. Slowly, only for testing. /// Reference, /// /// Useful when acceleration does not work. /// FastSoftware } #endregion Properties #region Methods /// /// Create a copy of this instance. /// /// public PresentationParameters Clone() { PresentationParameters clone = new PresentationParameters(); clone._backBufferFormat = this._backBufferFormat; clone._depthStencilFormat = this._depthStencilFormat; clone._backBufferHeight = this._backBufferHeight; clone._backBufferWidth = this._backBufferWidth; clone._multiSampleCount = this._multiSampleCount; clone._renderTargetUsage = this._renderTargetUsage; clone._presentationInterval = this._presentationInterval; clone._displayOrientation = this._displayOrientation; clone._isFullScreen = this._isFullScreen; clone._hardwareModeSwitch = this._hardwareModeSwitch; clone._deviceWindowHandle = this._deviceWindowHandle; clone._useDebugLayers = this._useDebugLayers; clone._useDriverType = this._useDriverType; return clone; } #endregion Methods } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/RenderTarget2D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class RenderTarget2D : Texture2D, IRenderTarget { protected IRenderTarget2DStrategy _strategyRenderTarget2D; public DepthFormat DepthStencilFormat { get { return _strategyRenderTarget2D.DepthStencilFormat; } } public int MultiSampleCount { get { return _strategyRenderTarget2D.MultiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTarget2D.RenderTargetUsage; } } IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTarget2D; } } public bool IsContentLost { get { return _strategyRenderTarget2D.IsContentLost; } } public event EventHandler ContentLost; protected RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize, bool isInternal) : base(graphicsDevice, width, height, mipMap, format, shared, arraySize, true) { System.Diagnostics.Debug.Assert(isInternal == true); } public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, bool shared, int arraySize) : base(graphicsDevice, width, height, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), shared, arraySize, true) { SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat); _strategyRenderTarget2D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTarget2DStrategy(width, height, mipMap, arraySize, shared, usage, format, preferredDepthFormat, preferredMultiSampleCount); _strategyTexture2D = _strategyRenderTarget2D; _strategyTexture = _strategyTexture2D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D); } protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat) { SurfaceFormat selectedFormat = preferredFormat; DepthFormat selectedDepthFormat; int selectedMultiSampleCount; if (graphicsDevice != null) { graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount); } return selectedFormat; } public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage, bool shared) : this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage, shared, 1) { } public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage) :this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage, false, 1) { } public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat) :this(graphicsDevice, width, height, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents, false, 1) { } public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height) : this(graphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents, false, 1) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/RenderTarget3D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class RenderTarget3D : Texture3D, IRenderTarget { private IRenderTarget3DStrategy _strategyRenderTarget3D; public DepthFormat DepthStencilFormat { get { return _strategyRenderTarget3D.DepthStencilFormat; } } public int MultiSampleCount { get { return _strategyRenderTarget3D.MultiSampleCount; } } public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTarget3D.RenderTargetUsage; } } IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTarget3D; } } public bool IsContentLost { get { return _strategyRenderTarget3D.IsContentLost; } } public event EventHandler ContentLost; public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage) :base(graphicsDevice, width, height, depth, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), true) { SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat); _strategyRenderTarget3D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTarget3DStrategy(width, height, depth, mipMap, usage, format, preferredDepthFormat, preferredMultiSampleCount); _strategyTexture3D = _strategyRenderTarget3D; _strategyTexture = _strategyTexture3D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture3D); } protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat) { SurfaceFormat selectedFormat = preferredFormat; DepthFormat selectedDepthFormat; int selectedMultiSampleCount; if (graphicsDevice != null) { graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount); } return selectedFormat; } public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat) :this(graphicsDevice, width, height, depth, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents) { } public RenderTarget3D(GraphicsDevice graphicsDevice, int width, int height, int depth) : this(graphicsDevice, width, height, depth, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.DiscardContents) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/RenderTargetBinding.cs ================================================ //// MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // // Author: Kenneth James Pouncey // Copyright (C)2023-2024 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { // http://msdn.microsoft.com/en-us/library/ff434403.aspx public struct RenderTargetBinding { private readonly Texture _renderTarget; private readonly int _arraySlice; public Texture RenderTarget { get { return _renderTarget; } } public int ArraySlice { get { return _arraySlice; } } public RenderTargetBinding(RenderTarget2D renderTarget) { if (renderTarget == null) throw new ArgumentNullException("renderTarget"); _renderTarget = renderTarget; _arraySlice = (int)CubeMapFace.PositiveX; } public RenderTargetBinding(RenderTargetCube renderTarget, CubeMapFace cubeMapFace) { if (renderTarget == null) throw new ArgumentNullException("renderTarget"); if (cubeMapFace < CubeMapFace.PositiveX || cubeMapFace > CubeMapFace.NegativeZ) throw new ArgumentOutOfRangeException("cubeMapFace"); _renderTarget = renderTarget; _arraySlice = (int)cubeMapFace; } public RenderTargetBinding(RenderTarget2D renderTarget, int arraySlice) { if (renderTarget == null) throw new ArgumentNullException("renderTarget"); if (arraySlice < 0 || arraySlice >= renderTarget.ArraySize) throw new ArgumentOutOfRangeException("arraySlice"); if (!((IPlatformGraphicsDevice)renderTarget.GraphicsDevice).Strategy.Capabilities.SupportsTextureArrays) throw new InvalidOperationException("Texture arrays are not supported on this graphics device"); _renderTarget = renderTarget; _arraySlice = arraySlice; } public RenderTargetBinding(RenderTarget3D renderTarget, int arraySlice) { if (renderTarget == null) throw new ArgumentNullException("renderTarget"); if (arraySlice < 0 || arraySlice >= renderTarget.Depth) throw new ArgumentOutOfRangeException("arraySlice"); _renderTarget = renderTarget; _arraySlice = arraySlice; } public RenderTargetBinding(RenderTarget3D renderTarget) { if (renderTarget == null) throw new ArgumentNullException("renderTarget"); _renderTarget = renderTarget; _arraySlice = 0; } public static implicit operator RenderTargetBinding(RenderTarget2D renderTarget) { return new RenderTargetBinding(renderTarget); } public static implicit operator RenderTargetBinding(RenderTarget3D renderTarget) { return new RenderTargetBinding(renderTarget); } public override string ToString() { return String.Format("{{_arraySlice: {0}, _renderTarget: {1} }}", _arraySlice, (_renderTarget != null) ? _renderTarget.GetHashCode().ToString("X") : "null" ); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/RenderTargetCube.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { /// /// Represents a texture cube that can be used as a render target. /// public class RenderTargetCube : TextureCube, IRenderTarget { private IRenderTargetCubeStrategy _strategyRenderTargetCube; /// /// Gets the depth-stencil buffer format of this render target. /// /// The format of the depth-stencil buffer. public DepthFormat DepthStencilFormat { get { return _strategyRenderTargetCube.DepthStencilFormat; } } /// /// Gets the number of multisample locations. /// /// The number of multisample locations. public int MultiSampleCount { get { return _strategyRenderTargetCube.MultiSampleCount; } } /// /// Gets the usage mode of this render target. /// /// The usage mode of the render target. public RenderTargetUsage RenderTargetUsage { get { return _strategyRenderTargetCube.RenderTargetUsage; } } IRenderTargetStrategy IRenderTarget.RenderTargetStrategy { get { return _strategyRenderTargetCube; } } /// int IRenderTarget.Width { get { return this.Size; } } /// int IRenderTarget.Height { get { return this.Size; } } public bool IsContentLost { get { return _strategyRenderTargetCube.IsContentLost; } } public event EventHandler ContentLost; /// /// Initializes a new instance of the class. /// /// The graphics device. /// The width and height of a texture cube face in pixels. /// to generate a full mipMap chain; otherwise . /// The preferred format of the surface. /// The preferred format of the depth-stencil buffer. public RenderTargetCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat) : this(graphicsDevice, size, mipMap, preferredFormat, preferredDepthFormat, 0, RenderTargetUsage.DiscardContents) { } /// /// Initializes a new instance of the class. /// /// The graphics device. /// The width and height of a texture cube face in pixels. /// to generate a full mipMap chain; otherwise . /// The preferred format of the surface. /// The preferred format of the depth-stencil buffer. /// The preferred number of multisample locations. /// The usage mode of the render target. public RenderTargetCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage) : base(graphicsDevice, size, mipMap, QuerySelectedFormat(graphicsDevice, preferredFormat), true) { SurfaceFormat format = QuerySelectedFormat(graphicsDevice, preferredFormat); _strategyRenderTargetCube = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateRenderTargetCubeStrategy(size, mipMap, usage, format, preferredDepthFormat, preferredMultiSampleCount); _strategyTextureCube = _strategyRenderTargetCube; _strategyTexture = _strategyTextureCube; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTextureCube); } protected static SurfaceFormat QuerySelectedFormat(GraphicsDevice graphicsDevice, SurfaceFormat preferredFormat) { SurfaceFormat selectedFormat = preferredFormat; DepthFormat selectedDepthFormat; int selectedMultiSampleCount; if (graphicsDevice != null) { graphicsDevice.Adapter.QueryRenderTargetFormat(((IPlatformGraphicsDevice)graphicsDevice).Strategy.GraphicsProfile, preferredFormat, DepthFormat.None, 0, out selectedFormat, out selectedDepthFormat, out selectedMultiSampleCount); } return selectedFormat; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/RenderTargetUsage.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines if the previous content in a render target is preserved when it set on the graphics device. /// public enum RenderTargetUsage { /// /// The render target content will not be preserved. /// DiscardContents, /// /// The render target content will be preserved even if it is slow or requires extra memory. /// PreserveContents, /// /// The render target content might be preserved if the platform can do so without a penalty in performance or memory usage. /// PlatformContents } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ResourceCreatedEventArgs.cs ================================================ using System; namespace Microsoft.Xna.Framework.Graphics { public sealed class ResourceCreatedEventArgs : EventArgs { /// /// The newly created resource object. /// public Object Resource { get; internal set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/ResourceDestroyedEventArgs.cs ================================================ using System; namespace Microsoft.Xna.Framework.Graphics { public sealed class ResourceDestroyedEventArgs : EventArgs { /// /// The name of the destroyed resource. /// public string Name { get; internal set; } /// /// The resource manager tag of the destroyed resource. /// public Object Tag { get; internal set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SamplerStateCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // // Author: Kenneth James Pouncey // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public sealed partial class SamplerStateCollection : IPlatformSamplerStateCollection { private SamplerStateCollectionStrategy _strategy; SamplerStateCollectionStrategy IPlatformSamplerStateCollection.Strategy { get { return _strategy; } } internal SamplerStateCollection(GraphicsContextStrategy contextStrategy, int capacity) { _strategy = contextStrategy.CreateSamplerStateCollectionStrategy(capacity); Clear(); } public SamplerState this[int index] { get { return _strategy[index]; } set { _strategy[index] = value; } } internal void Clear() { _strategy.Clear(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SamplerStateCollectionStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformSamplerStateCollection { SamplerStateCollectionStrategy Strategy { get; } } public abstract class SamplerStateCollectionStrategy { protected readonly GraphicsContextStrategy _contextStrategy; private readonly SamplerState _samplerStateAnisotropicClamp; private readonly SamplerState _samplerStateAnisotropicWrap; private readonly SamplerState _samplerStateLinearClamp; private readonly SamplerState _samplerStateLinearWrap; private readonly SamplerState _samplerStatePointClamp; private readonly SamplerState _samplerStatePointWrap; private readonly SamplerState[] _samplers; protected internal readonly SamplerState[] _actualSamplers; protected SamplerStateCollectionStrategy(GraphicsContextStrategy contextStrategy, int capacity) { // hard limit of 32 because of _d3dDirty flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _contextStrategy = contextStrategy; _samplerStateAnisotropicClamp = new SamplerState(SamplerState.AnisotropicClamp); _samplerStateAnisotropicWrap = new SamplerState(SamplerState.AnisotropicWrap); _samplerStateLinearClamp = new SamplerState(SamplerState.LinearClamp); _samplerStateLinearWrap = new SamplerState(SamplerState.LinearWrap); _samplerStatePointClamp = new SamplerState(SamplerState.PointClamp); _samplerStatePointWrap = new SamplerState(SamplerState.PointWrap); _samplers = new SamplerState[capacity]; _actualSamplers = new SamplerState[capacity]; } public virtual SamplerState this[int index] { get { return _samplers[index]; } set { if (value == null) throw new ArgumentNullException("value"); if (_samplers[index] == value) return; _samplers[index] = value; // Static state properties never actually get bound; // instead we use our GraphicsDevice-specific version of them. SamplerState newSamplerState = value; if (ReferenceEquals(value, SamplerState.AnisotropicClamp)) newSamplerState = _samplerStateAnisotropicClamp; else if (ReferenceEquals(value, SamplerState.AnisotropicWrap)) newSamplerState = _samplerStateAnisotropicWrap; else if (ReferenceEquals(value, SamplerState.LinearClamp)) newSamplerState = _samplerStateLinearClamp; else if (ReferenceEquals(value, SamplerState.LinearWrap)) newSamplerState = _samplerStateLinearWrap; else if (ReferenceEquals(value, SamplerState.PointClamp)) newSamplerState = _samplerStatePointClamp; else if (ReferenceEquals(value, SamplerState.PointWrap)) newSamplerState = _samplerStatePointWrap; newSamplerState.BindToGraphicsDevice(_contextStrategy); _actualSamplers[index] = newSamplerState; } } public virtual void Clear() { for (int i = 0; i < _samplers.Length; i++) { _samplers[i] = SamplerState.LinearWrap; _samplerStateLinearWrap.BindToGraphicsDevice(_contextStrategy); _actualSamplers[i] = _samplerStateLinearWrap; } } /// /// Mark all the sampler slots as dirty. /// public virtual void Dirty() { } public T ToConcrete() where T : SamplerStateCollectionStrategy { return (T)this; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SetDataOptions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines how vertex or index buffer data will be flushed during a SetData operation. /// public enum SetDataOptions { /// /// The SetData can overwrite the portions of existing data. /// None, /// /// The SetData will discard the entire buffer. A pointer to a new memory area is returned and rendering from the previous area do not stall. /// Discard, /// /// The SetData operation will not overwrite existing data. This allows the driver to return immediately from a SetData operation and continue rendering. /// NoOverwrite } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ConstantBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ConstantBuffer : GraphicsResource , IPlatformConstantBuffer { private ConstantBufferStrategy _strategy; ConstantBufferStrategy IPlatformConstantBuffer.Strategy { get { return _strategy; } } public ConstantBuffer(GraphicsDevice device, string name, int[] parameterIndexes, int[] parameterOffsets, int sizeInBytes, bool integersAsFloats) : base() { _strategy = ((IPlatformGraphicsContext)device.MainContext).Strategy.CreateConstantBufferStrategy(name, parameterIndexes, parameterOffsets, sizeInBytes, integersAsFloats); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } public ConstantBuffer(ConstantBuffer cloneSource) : base() { _strategy = (ConstantBufferStrategy)cloneSource._strategy.Clone(); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } protected override void Dispose(bool disposing) { if (disposing) { if (_strategy != null) _strategy.Dispose(); _strategy = null; } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferCollection.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class ConstantBufferCollection : IPlatformConstantBufferCollection { private ConstantBufferCollectionStrategy _strategy; ConstantBufferCollectionStrategy IPlatformConstantBufferCollection.Strategy { get { return _strategy; } } internal ConstantBufferCollection(GraphicsContextStrategy contextStrategy, int capacity) { _strategy = contextStrategy.CreateConstantBufferCollectionStrategy(capacity); } public ConstantBuffer this[int index] { get { return _strategy[index]; } set { _strategy[index] = value; } } internal void Clear() { _strategy.Clear(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferCollectionStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformConstantBufferCollection { ConstantBufferCollectionStrategy Strategy { get; } } public abstract class ConstantBufferCollectionStrategy { private readonly ConstantBuffer[] _buffers; public int Length { get { return _buffers.Length; } } protected ConstantBufferCollectionStrategy(int capacity) { _buffers = new ConstantBuffer[capacity]; } public virtual ConstantBuffer this[int index] { get { return _buffers[index]; } set { _buffers[index] = value; } } public abstract void Clear(); public T ToConcrete() where T : ConstantBufferCollectionStrategy { return (T)this; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ConstantBufferStrategy.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformConstantBuffer { ConstantBufferStrategy Strategy { get; } } public abstract class ConstantBufferStrategy : GraphicsResourceStrategy, ICloneable, IDisposable { private string _name; private int[] _parameters; private int[] _offsets; private byte[] _bufferData; private bool _integersAsFloats; private bool _dirty; private ulong _stateKey; public string Name { get { return _name; } } public int[] Parameters { get { return _parameters; } } public int[] Offsets { get { return _offsets; } } public byte[] BufferData { get { return _bufferData; } } public virtual bool Dirty { get { return _dirty; } set { _dirty = value; } } public virtual ulong StateKey { get { return _stateKey; } set { _stateKey = value; } } protected bool IntegersAsFloats { get { return _integersAsFloats; } } protected ConstantBufferStrategy(GraphicsContextStrategy contextStrategy, string name, int[] parameters, int[] offsets, int sizeInBytes, bool integersAsFloats) : base(contextStrategy) { this._name = name; this._parameters = parameters; this._offsets = offsets; this._bufferData = new byte[sizeInBytes]; this._integersAsFloats = integersAsFloats; } protected ConstantBufferStrategy(ConstantBufferStrategy source) : base(source) { // shared this._name = source._name; this._parameters = source._parameters; this._offsets = source._offsets; // copies this._bufferData = (byte[])source._bufferData.Clone(); this._integersAsFloats = source._integersAsFloats; } public T ToConcrete() where T : ConstantBufferStrategy { return (T)this; } public void Update(EffectParameterCollection parameters) { // TODO: We should be doing some sort of dirty state // testing here. // // It should let us skip all parameter updates if // nothing has changed. It should not be per-parameter // as that is why you should use multiple constant // buffers. // If our state key becomes larger than the // next state key then the keys have rolled // over and we need to reset. if (this.StateKey > EffectParameter.NextStateKey) this.StateKey = 0; for (int p = 0; p < this.Parameters.Length; p++) { int index = this.Parameters[p]; EffectParameter param = parameters[index]; if (param.StateKey < this.StateKey) continue; this.Dirty = true; int offset = this.Offsets[p]; this.SetParameter(param, offset); } this.StateKey = EffectParameter.NextStateKey; } private int SetParameter(EffectParameter param, int offset) { EffectParameterCollection elements = param.Elements; if (elements.Count <= 0) { if (param.Data != null) { switch (param.ParameterType) { case EffectParameterType.Single: case EffectParameterType.Int32: case EffectParameterType.Bool: // HLSL assumes matrices are column-major, whereas in-memory we use row-major. // TODO: HLSL can be told to use row-major. We should handle that too. if (param.ParameterClass == EffectParameterClass.Matrix) { SetData(offset, param.ColumnCountActual, param.RowCount, param.Data); return (param.ColumnCount * RowSize); } else { SetData(offset, param.RowCount, param.ColumnCount, param.Data); return (param.RowCount * RowSize); } default: throw new NotSupportedException("Not supported!"); } } else { return 0; } } else // (elements.Count > 0) { int elementByteCount = 0; for (int i = 0; i < elements.Count; i++) { int subElementByteCount = SetParameter(elements[i], offset + elementByteCount); elementByteCount += subElementByteCount; } return elementByteCount; } } // Shader registers are always 4 bytes and all the // incoming data objects should be 4 bytes per element. const int ElementSize = 4; const int RowSize = (ElementSize * 4); private void SetData(int offset, int rows, int columns, object data) { Array src = (Array)data; int srcStride = (columns * ElementSize); // Take care of the single copy case! if (rows == 1 || RowSize == srcStride) { Buffer.BlockCopy(src, 0, this.BufferData, offset, srcStride * rows); } // Take care of Matrix3x3 and Matrix4x3. (unroll loop) else if (rows == 3) { Buffer.BlockCopy(src, srcStride * 0, this.BufferData, offset + (RowSize * 0), srcStride); Buffer.BlockCopy(src, srcStride * 1, this.BufferData, offset + (RowSize * 1), srcStride); Buffer.BlockCopy(src, srcStride * 2, this.BufferData, offset + (RowSize * 2), srcStride); } else { for (int r = 0; r < rows; r++) Buffer.BlockCopy(src, srcStride * r, this.BufferData, offset + (RowSize * r), srcStride); } } public abstract object Clone(); public abstract void PlatformContextLost(); #region IDisposable protected override void Dispose(bool disposing) { if (disposing) { _name = null; _parameters = null; _offsets = null; _bufferData = null; _dirty = true; } base.Dispose(disposing); } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/PixelShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class PixelShader : Shader { internal PixelShader(GraphicsDevice graphicsDevice, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base() { _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreatePixelShaderStrategy(shaderVersion, shaderBytecode, samplers, cBuffers, attributes); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/SamplerInfo.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public enum SamplerType { Sampler2D = 0, SamplerCube = 1, SamplerVolume = 2, Sampler1D = 3, } public struct SamplerInfo { public SamplerType type; public int textureSlot; public int samplerSlot; public string GLsamplerName; // e.g. "ps_s0", "ps_s1", etc public SamplerState state; // TODO: This should be moved to EffectPass. public int textureParameter; public override string ToString() { return String.Format("type: {0}, textureParameter:{1}, GLsamplerName: {2}, t#: {3}, s#: {4}", type, textureParameter, GLsamplerName, textureSlot, samplerSlot); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/Shader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public abstract class Shader : GraphicsResource , IPlatformShader { protected ShaderStrategy _strategy; ShaderStrategy IPlatformShader.Strategy { get { return _strategy; } } public ShaderVersion ShaderModelVersion { get { return _strategy.ShaderModelVersion; } } public SamplerInfo[] Samplers { get { return _strategy.Samplers; } } public int[] CBuffers { get { return _strategy.CBuffers; } } public VertexAttribute[] Attributes { get { return _strategy.Attributes; } } internal Shader() : base() { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ShaderProfileType.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; namespace Microsoft.Xna.Platform.Graphics { public enum ShaderProfileType { OpenGL_Mojo = 0, DirectX_11 = 1, } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ShaderStage.cs ================================================ namespace Microsoft.Xna.Platform.Graphics { public enum ShaderStage : byte { Pixel = 0, Vertex = 1, } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ShaderStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformShader { ShaderStrategy Strategy { get; } } public abstract class ShaderStrategy : GraphicsResourceStrategy { protected readonly GraphicsContextStrategy _contextStrategy; ShaderVersion _shaderVersion; private SamplerInfo[] _samplers; private int[] _CBuffers; private VertexAttribute[] _attributes; public ShaderVersion ShaderModelVersion { get { return _shaderVersion; } } public SamplerInfo[] Samplers { get { return _samplers; } } public int[] CBuffers { get { return _CBuffers; } } public VertexAttribute[] Attributes { get { return _attributes; } } protected static readonly Dictionary MaxShaderVersions = new Dictionary() { { GraphicsProfile.Reach, new ShaderVersion(2, 0) }, { GraphicsProfile.HiDef, new ShaderVersion(3, 0) }, { GraphicsProfile.FL10_0, new ShaderVersion(4, 0) }, { GraphicsProfile.FL10_1, new ShaderVersion(4, 1) }, { GraphicsProfile.FL11_0, new ShaderVersion(5, 0) }, { GraphicsProfile.FL11_1, new ShaderVersion(5, 0) }, }; protected ShaderStrategy(GraphicsContextStrategy contextStrategy, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base(contextStrategy) { _contextStrategy = contextStrategy; this._shaderVersion = shaderVersion; this._samplers = samplers; this._CBuffers = cBuffers; this._attributes = attributes; } public T ToConcrete() where T : ShaderStrategy { return (T)this; } protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/ShaderVersion.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; namespace Microsoft.Xna.Platform.Graphics { public struct ShaderVersion { public readonly ushort Major; public readonly ushort Minor; public uint PackedValue { get { return ((uint)Major << 16) | (uint)Minor; } } public ShaderVersion(ushort major, ushort minor) { this.Major = major; this.Minor = minor; } public static bool operator <(ShaderVersion l, ShaderVersion r) { return l.PackedValue < r.PackedValue; } public static bool operator >(ShaderVersion l, ShaderVersion r) { return l.PackedValue > r.PackedValue; } public static bool operator <=(ShaderVersion l, ShaderVersion r) { return l.PackedValue <= r.PackedValue; } public static bool operator >=(ShaderVersion l, ShaderVersion r) { return l.PackedValue >= r.PackedValue; } public static bool operator ==(ShaderVersion l, ShaderVersion r) { return l.PackedValue == r.PackedValue; } public static bool operator !=(ShaderVersion l, ShaderVersion r) { return l.PackedValue != r.PackedValue; } public override string ToString() { return String.Format("{0}.{1}", Major, Minor); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/VertexAttribute.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public struct VertexAttribute { public VertexElementUsage usage; public int index; public string name; public int location; } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Shader/VertexShader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public sealed class VertexShader : Shader { internal VertexShader(GraphicsDevice graphicsDevice, ShaderVersion shaderVersion, byte[] shaderBytecode, SamplerInfo[] samplers, int[] cBuffers, VertexAttribute[] attributes) : base() { _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateVertexShaderStrategy(shaderVersion, shaderBytecode, samplers, cBuffers, attributes); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteBatch.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2023 Nick Kastellanos using System; using System.Text; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { /// /// Helper class for drawing text strings and sprites in one or more optimized batches. /// public class SpriteBatch : GraphicsResource { #region Private Fields readonly SpriteBatcherStrategy _batcher; SpriteSortMode _sortMode; BlendState _blendState; SamplerState _samplerState; DepthStencilState _depthStencilState; RasterizerState _rasterizerState; Effect _effect; bool _beginCalled; SpriteEffect _spriteEffect; readonly EffectPass _spritePass; Rectangle _tempRect = new Rectangle(0, 0, 0, 0); Vector2 _texCoordTL = new Vector2(0, 0); Vector2 _texCoordBR = new Vector2(0, 0); #endregion /// /// Constructs a . /// /// The , which will be used for sprite rendering. /// Thrown when is null. public SpriteBatch(GraphicsDevice graphicsDevice) : this(graphicsDevice, 0) { } /// /// Constructs a . /// /// The , which will be used for sprite rendering. /// The initial capacity of the internal array holding batch items (the value will be rounded to the next multiple of 64). /// Thrown when is null. public SpriteBatch(GraphicsDevice graphicsDevice, int capacity) : base(graphicsDevice) { _spriteEffect = new SpriteEffect(graphicsDevice); _spritePass = _spriteEffect.CurrentTechnique.Passes[0]; _batcher = GraphicsFactory.Current.CreateSpriteBatcher(graphicsDevice, capacity); _beginCalled = false; } /// /// Begins a new sprite and text batch with the specified render state. /// /// The drawing order for sprite and text drawing. by default. /// State of the blending. Uses if null. /// State of the sampler. Uses if null. /// State of the depth-stencil buffer. Uses if null. /// State of the rasterization. Uses if null. /// A custom to override the default sprite effect. Uses default sprite effect if null. /// An optional matrix used to transform the sprite geometry. Uses if null. /// Thrown if is called next time without previous . /// This method uses optional parameters. /// The Begin should be called before drawing commands, and you cannot call it again before subsequent . public void Begin ( SpriteSortMode sortMode = SpriteSortMode.Deferred, BlendState blendState = null, SamplerState samplerState = null, DepthStencilState depthStencilState = null, RasterizerState rasterizerState = null, Effect effect = null, Matrix? transformMatrix = null ) { if (_beginCalled) throw new InvalidOperationException("Begin cannot be called again until End has been successfully called."); // defaults _sortMode = sortMode; _blendState = blendState ?? BlendState.AlphaBlend; _samplerState = samplerState ?? SamplerState.LinearClamp; _depthStencilState = depthStencilState ?? DepthStencilState.None; _rasterizerState = rasterizerState ?? RasterizerState.CullCounterClockwise; _effect = effect; _spriteEffect.TransformMatrix = transformMatrix; // Setup things now so a user can change them. if (sortMode == SpriteSortMode.Immediate) { Setup(); } _beginCalled = true; } /// /// Flushes all batched text and sprites to the screen. /// /// This command should be called after and drawing commands. public void End() { if (!_beginCalled) throw new InvalidOperationException("Begin must be called before calling End."); _beginCalled = false; if (_sortMode != SpriteSortMode.Immediate) { Setup(); if (_batcher.BatchItemCount > 0) { _batcher.SortBatch(_sortMode); _batcher.DrawBatch(_effect); } } } void Setup() { GraphicsDevice gd = this.GraphicsDevice; gd.BlendState = _blendState; gd.DepthStencilState = _depthStencilState; gd.RasterizerState = _rasterizerState; gd.SamplerStates[0] = _samplerState; _spritePass.Apply(); } void CheckValid(Texture2D texture) { if (texture == null) throw new ArgumentNullException("texture"); if (!_beginCalled) throw new InvalidOperationException("Draw was called, but Begin has not yet been called. Begin must be called successfully before you can call Draw."); } void CheckValid(SpriteFont spriteFont, string text) { if (spriteFont == null) throw new ArgumentNullException("spriteFont"); if (text == null) throw new ArgumentNullException("text"); if (!_beginCalled) throw new InvalidOperationException("DrawString was called, but Begin has not yet been called. Begin must be called successfully before you can call DrawString."); } void CheckValid(SpriteFont spriteFont, StringBuilder text) { if (spriteFont == null) throw new ArgumentNullException("spriteFont"); if (text == null) throw new ArgumentNullException("text"); if (!_beginCalled) throw new InvalidOperationException("DrawString was called, but Begin has not yet been called. Begin must be called successfully before you can call DrawString."); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing location on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. /// A rotation of this sprite. /// Center of the rotation. 0,0 by default. /// A scaling of this sprite. /// Modificators for drawing. Can be combined. /// A depth of the layer of this sprite. public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } Draw(texture, position, sourceRectangle, color, rotation2, origin, scale, effects, layerDepth); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing location on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. /// A rotation of this sprite. /// Center of the rotation. 0,0 by default. /// A scaling of this sprite. /// Modificators for drawing. Can be combined. /// A depth of the layer of this sprite. public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. switch (_sortMode) { // Comparison of Texture objects. case SpriteSortMode.Texture: item.SortKey = texture.SortingKey; break; // Comparison of Depth case SpriteSortMode.FrontToBack: item.SortKey = layerDepth; break; // Comparison of Depth in reverse case SpriteSortMode.BackToFront: item.SortKey = -layerDepth; break; } origin = origin * scale; float w, h; if (sourceRectangle.HasValue) { Rectangle srcRect = sourceRectangle.GetValueOrDefault(); w = srcRect.Width * scale.X; h = srcRect.Height * scale.Y; _texCoordTL.X = srcRect.X * texture.TexelWidth; _texCoordTL.Y = srcRect.Y * texture.TexelHeight; _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth; _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight; } else { w = texture.Width * scale.X; h = texture.Height * scale.Y; _texCoordTL = Vector2.Zero; _texCoordBR = Vector2.One; } if ((effects & SpriteEffects.FlipVertically) != 0) { float temp = _texCoordBR.Y; _texCoordBR.Y = _texCoordTL.Y; _texCoordTL.Y = temp; } if ((effects & SpriteEffects.FlipHorizontally) != 0) { float temp = _texCoordBR.X; _texCoordBR.X = _texCoordTL.X; _texCoordTL.X = temp; } if (rotation.i == 0f) { item.Set(position.X - origin.X, position.Y - origin.Y, w, h, layerDepth, color, _texCoordTL, _texCoordBR); } else { item.Set(position.X, position.Y, -origin.X, -origin.Y, w, h, ref rotation, layerDepth, color, _texCoordTL, _texCoordBR); } if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing location on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. /// A rotation of this sprite. /// Center of the rotation. 0,0 by default. /// A scaling of this sprite. /// Modificators for drawing. Can be combined. /// A depth of the layer of this sprite. public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth) { Vector2 scaleVec = new Vector2(scale, scale); Draw(texture, position, sourceRectangle, color, rotation, origin, scaleVec, effects, layerDepth); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing bounds on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. /// A rotation of this sprite. /// Center of the rotation. 0,0 by default. /// Modificators for drawing. Can be combined. /// A depth of the layer of this sprite. public void Draw(Texture2D texture, Rectangle destinationRectangle, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } Draw(texture, destinationRectangle, sourceRectangle, color, rotation2, origin, effects, layerDepth); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing bounds on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. /// A rotation of this sprite. /// Center of the rotation. 0,0 by default. /// Modificators for drawing. Can be combined. /// A depth of the layer of this sprite. public void Draw(Texture2D texture, Rectangle destinationRectangle, Rectangle? sourceRectangle, Color color, Complex rotation, Vector2 origin, SpriteEffects effects, float layerDepth) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. switch (_sortMode) { // Comparison of Texture objects. case SpriteSortMode.Texture: item.SortKey = texture.SortingKey; break; // Comparison of Depth case SpriteSortMode.FrontToBack: item.SortKey = layerDepth; break; // Comparison of Depth in reverse case SpriteSortMode.BackToFront: item.SortKey = -layerDepth; break; } if (sourceRectangle.HasValue) { Rectangle srcRect = sourceRectangle.GetValueOrDefault(); _texCoordTL.X = srcRect.X * texture.TexelWidth; _texCoordTL.Y = srcRect.Y * texture.TexelHeight; _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth; _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight; if (srcRect.Width != 0) origin.X = origin.X * (float)destinationRectangle.Width / (float)srcRect.Width; else origin.X = origin.X * (float)destinationRectangle.Width * texture.TexelWidth; if (srcRect.Height != 0) origin.Y = origin.Y * (float)destinationRectangle.Height / (float)srcRect.Height; else origin.Y = origin.Y * (float)destinationRectangle.Height * texture.TexelHeight; } else { _texCoordTL = Vector2.Zero; _texCoordBR = Vector2.One; origin.X = origin.X * (float)destinationRectangle.Width * texture.TexelWidth; origin.Y = origin.Y * (float)destinationRectangle.Height * texture.TexelHeight; } if ((effects & SpriteEffects.FlipVertically) != 0) { float temp = _texCoordBR.Y; _texCoordBR.Y = _texCoordTL.Y; _texCoordTL.Y = temp; } if ((effects & SpriteEffects.FlipHorizontally) != 0) { float temp = _texCoordBR.X; _texCoordBR.X = _texCoordTL.X; _texCoordTL.X = temp; } if (rotation.i == 0f) { item.Set(destinationRectangle.X - origin.X, destinationRectangle.Y - origin.Y, destinationRectangle.Width, destinationRectangle.Height, layerDepth, color, _texCoordTL, _texCoordBR); } else { item.Set(destinationRectangle.X, destinationRectangle.Y, -origin.X, -origin.Y, destinationRectangle.Width, destinationRectangle.Height, ref rotation, layerDepth, color, _texCoordTL, _texCoordBR); } if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing location on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0; Vector2 size; if (sourceRectangle.HasValue) { Rectangle srcRect = sourceRectangle.GetValueOrDefault(); size = new Vector2(srcRect.Width, srcRect.Height); _texCoordTL.X = srcRect.X * texture.TexelWidth; _texCoordTL.Y = srcRect.Y * texture.TexelHeight; _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth; _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight; } else { size = new Vector2(texture.Width, texture.Height); _texCoordTL = Vector2.Zero; _texCoordBR = Vector2.One; } item.Set(position.X, position.Y, size.X, size.Y, 0, color, _texCoordTL, _texCoordBR); if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing bounds on screen. /// An optional region on the texture which will be rendered. If null - draws full texture. /// A color mask. public void Draw(Texture2D texture, Rectangle destinationRectangle, Rectangle? sourceRectangle, Color color) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0; if (sourceRectangle.HasValue) { Rectangle srcRect = sourceRectangle.GetValueOrDefault(); _texCoordTL.X = srcRect.X * texture.TexelWidth; _texCoordTL.Y = srcRect.Y * texture.TexelHeight; _texCoordBR.X = (srcRect.X + srcRect.Width) * texture.TexelWidth; _texCoordBR.Y = (srcRect.Y + srcRect.Height) * texture.TexelHeight; } else { _texCoordTL = Vector2.Zero; _texCoordBR = Vector2.One; } item.Set(destinationRectangle.X, destinationRectangle.Y, destinationRectangle.Width, destinationRectangle.Height, 0, color, _texCoordTL, _texCoordBR); if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing location on screen. /// A color mask. public void Draw(Texture2D texture, Vector2 position, Color color) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0; item.Set(position.X, position.Y, texture.Width, texture.Height, 0, color, Vector2.Zero, Vector2.One); if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a sprite for drawing in the current batch. /// /// A texture. /// The drawing bounds on screen. /// A color mask. public void Draw(Texture2D texture, Rectangle destinationRectangle, Color color) { CheckValid(texture); SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = texture; // set SortKey based on SpriteSortMode. item.SortKey = _sortMode == SpriteSortMode.Texture ? texture.SortingKey : 0; item.Set(destinationRectangle.X, destinationRectangle.Y, destinationRectangle.Width, destinationRectangle.Height, 0, color, Vector2.Zero, Vector2.One); if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. public unsafe void DrawString(SpriteFont spriteFont, string text, Vector2 position, Color color) { CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. public unsafe void DrawString(SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color) { CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color); } private unsafe void DrawString(SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color) { // set SortKey based on SpriteSortMode. float sortKey = (_sortMode == SpriteSortMode.Texture) ? spriteFont.Texture.SortingKey : 0; Vector2 offset = Vector2.Zero; bool firstGlyphOfLine = true; fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs) { for (int i = 0; i < charsCount; i++) { char c = pChars[i]; if (c == '\r') continue; if (c == '\n') { offset.X = 0; offset.Y += spriteFont.LineSpacing; firstGlyphOfLine = true; continue; } int currentGlyphIndex = pGlyphIndices[i]; if (currentGlyphIndex == -1) throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), "text"); SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex; // The first character on a line might have a negative left side bearing. // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right, // so that text does not hang off the left side of its rectangle. if (firstGlyphOfLine) { offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0); firstGlyphOfLine = false; } else { offset.X += spriteFont.Spacing + pCurrentGlyph->LeftSideBearing; } Vector2 p = offset; p.X += pCurrentGlyph->Cropping.X; p.Y += pCurrentGlyph->Cropping.Y; p += position; SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = spriteFont.Texture; item.SortKey = sortKey; item.Set(p.X, p.Y, pCurrentGlyph->BoundsInTexture.Width, pCurrentGlyph->BoundsInTexture.Height, 0, color, pCurrentGlyph->TexCoordTL, pCurrentGlyph->TexCoordBR ); offset.X += pCurrentGlyph->Width + pCurrentGlyph->RightSideBearing; } } if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } Vector2 scale2; scale2.X = scale; scale2.Y = scale; CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale2, effects, layerDepth); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale, effects, layerDepth); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, string text, Vector2 position, Color color, Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation, origin, scale, effects, layerDepth); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } Vector2 scale2; scale2.X = scale; scale2.Y = scale; CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale2, effects, layerDepth); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale, effects, layerDepth); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. public unsafe void DrawString( SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation, origin, scale, effects, layerDepth); } private unsafe void DrawString( SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color, ref Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth) { float sortKey = 0; // set SortKey based on SpriteSortMode. switch (_sortMode) { // Comparison of Texture objects. case SpriteSortMode.Texture: sortKey = spriteFont.Texture.SortingKey; break; // Comparison of Depth case SpriteSortMode.FrontToBack: sortKey = layerDepth; break; // Comparison of Depth in reverse case SpriteSortMode.BackToFront: sortKey = -layerDepth; break; } Vector2 flipAdjustment = Vector2.Zero; bool flippedVert = (effects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically; bool flippedHorz = (effects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally; if (flippedVert || flippedHorz) { Vector2 size = spriteFont.MeasureString(pChars, pGlyphIndices, charsCount); if (flippedHorz) { origin.X *= -1; flipAdjustment.X = -size.X; } if (flippedVert) { origin.Y *= -1; flipAdjustment.Y = spriteFont.LineSpacing - size.Y; } } Matrix transformation = Matrix.Identity; if (rotation.i == 0) { transformation.M11 = (flippedHorz ? -scale.X : scale.X); transformation.M22 = (flippedVert ? -scale.Y : scale.Y); transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + position.X; transformation.M42 = (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y; } else { transformation.M11 = (flippedHorz ? -scale.X : scale.X) * rotation.R; transformation.M12 = (flippedHorz ? -scale.X : scale.X) * rotation.i; transformation.M21 = (flippedVert ? -scale.Y : scale.Y) * -rotation.i; transformation.M22 = (flippedVert ? -scale.Y : scale.Y) * rotation.R; transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + (flipAdjustment.Y - origin.Y) * transformation.M21 + position.X; transformation.M42 = (flipAdjustment.X - origin.X) * transformation.M12 + (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y; } Vector2 offset = Vector2.Zero; bool firstGlyphOfLine = true; fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs) { for (int i = 0; i < charsCount; i++) { char c = pChars[i]; if (c == '\r') continue; if (c == '\n') { offset.X = 0; offset.Y += spriteFont.LineSpacing; firstGlyphOfLine = true; continue; } int currentGlyphIndex = pGlyphIndices[i]; if (currentGlyphIndex == -1) throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), "text"); SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex; // The first character on a line might have a negative left side bearing. // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right, // so that text does not hang off the left side of its rectangle. if (firstGlyphOfLine) { offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0); firstGlyphOfLine = false; } else { offset.X += spriteFont.Spacing + pCurrentGlyph->LeftSideBearing; } Vector2 p = offset; if (flippedHorz) p.X += pCurrentGlyph->BoundsInTexture.Width; p.X += pCurrentGlyph->Cropping.X; if (flippedVert) p.Y += pCurrentGlyph->BoundsInTexture.Height - spriteFont.LineSpacing; p.Y += pCurrentGlyph->Cropping.Y; //Opt: Vector2.Transform(ref p, ref transformation, out p); float tpx = (p.X * transformation.M11); float tpy = (p.X * transformation.M12); tpx += (p.Y * transformation.M21) + transformation.M41; tpy += (p.Y * transformation.M22) + transformation.M42; SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = spriteFont.Texture; item.SortKey = sortKey; _texCoordTL = pCurrentGlyph->TexCoordTL; _texCoordBR = pCurrentGlyph->TexCoordBR; if ((effects & SpriteEffects.FlipVertically) != 0) { float temp = _texCoordBR.Y; _texCoordBR.Y = _texCoordTL.Y; _texCoordTL.Y = temp; } if ((effects & SpriteEffects.FlipHorizontally) != 0) { float temp = _texCoordBR.X; _texCoordBR.X = _texCoordTL.X; _texCoordTL.X = temp; } if (rotation.i == 0f) { item.Set(tpx, tpy, pCurrentGlyph->BoundsInTexture.Width * scale.X, pCurrentGlyph->BoundsInTexture.Height * scale.Y, layerDepth, color, _texCoordTL, _texCoordBR); } else { item.Set(tpx, tpy, 0, 0, pCurrentGlyph->BoundsInTexture.Width * scale.X, pCurrentGlyph->BoundsInTexture.Height * scale.Y, ref rotation, layerDepth, color, _texCoordTL, _texCoordBR); } offset.X += pCurrentGlyph->Width + pCurrentGlyph->RightSideBearing; } } if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. /// Text is Right to Left. public unsafe void DrawString( SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale, effects, layerDepth, rtl); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. /// Text is Right to Left. public unsafe void DrawString( SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl) { Complex rotation2; if (rotation == 0f) { rotation2.R = 1f; rotation2.i = 0f; } else { rotation2.R = (float)Math.Cos(rotation); rotation2.i = (float)Math.Sin(rotation); } CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation2, origin, scale, effects, layerDepth, rtl); } /// /// Submit a text string of sprites for drawing in the current batch. /// /// A font. /// The text which will be drawn. /// The drawing location on screen. /// A color mask. /// A rotation of this string. /// Center of the rotation. 0,0 by default. /// A scaling of this string. /// Modificators for drawing. Can be combined. /// A depth of the layer of this string. /// Text is Right to Left. public unsafe void DrawString( SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl) { CheckValid(spriteFont, text); char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; spriteFont.GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); DrawString(spriteFont, pChars, pGlyphIndices, text.Length, position, color, ref rotation, origin, scale, effects, layerDepth, rtl); } private unsafe void DrawString( SpriteFont spriteFont, char* pChars, int* pGlyphIndices, int charsCount, Vector2 position, Color color, ref Complex rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth, bool rtl) { float sortKey = 0; // set SortKey based on SpriteSortMode. switch (_sortMode) { // Comparison of Texture objects. case SpriteSortMode.Texture: sortKey = spriteFont.Texture.SortingKey; break; // Comparison of Depth case SpriteSortMode.FrontToBack: sortKey = layerDepth; break; // Comparison of Depth in reverse case SpriteSortMode.BackToFront: sortKey = -layerDepth; break; } Vector2 flipAdjustment = Vector2.Zero; bool flippedVert = (effects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically; bool flippedHorz = ((effects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally) ^ rtl; if (flippedVert || flippedHorz || rtl) { Vector2 size = spriteFont.MeasureString(pChars, pGlyphIndices, charsCount); if (flippedHorz ^ rtl) { origin.X *= -1; flipAdjustment.X = -size.X; } if (flippedVert) { origin.Y *= -1; flipAdjustment.Y = spriteFont.LineSpacing - size.Y; } } Matrix transformation = Matrix.Identity; if (rotation.i == 0) { transformation.M11 = (flippedHorz ? -scale.X : scale.X); transformation.M22 = (flippedVert ? -scale.Y : scale.Y); transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + position.X; transformation.M42 = (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y; } else { transformation.M11 = (flippedHorz ? -scale.X : scale.X) * rotation.R; transformation.M12 = (flippedHorz ? -scale.X : scale.X) * rotation.i; transformation.M21 = (flippedVert ? -scale.Y : scale.Y) * -rotation.i; transformation.M22 = (flippedVert ? -scale.Y : scale.Y) * rotation.R; transformation.M41 = (flipAdjustment.X - origin.X) * transformation.M11 + (flipAdjustment.Y - origin.Y) * transformation.M21 + position.X; transformation.M42 = (flipAdjustment.X - origin.X) * transformation.M12 + (flipAdjustment.Y - origin.Y) * transformation.M22 + position.Y; } Vector2 offset = Vector2.Zero; bool firstGlyphOfLine = true; fixed (SpriteFont.Glyph* pGlyphs = spriteFont.InternalGlyphs) { for (int i = 0; i < charsCount; i++) { char c = pChars[i]; if (c == '\r') continue; if (c == '\n') { offset.X = 0; offset.Y += spriteFont.LineSpacing; firstGlyphOfLine = true; continue; } int currentGlyphIndex = pGlyphIndices[i]; if (currentGlyphIndex == -1) throw new ArgumentException(SpriteFont.UnresolvableCharacterErrorMessage(c), "text"); SpriteFont.Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex; // The first character on a line might have a negative left side bearing. // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right, // so that text does not hang off the left side of its rectangle. if (firstGlyphOfLine) { offset.X = Math.Max(rtl ? pCurrentGlyph->RightSideBearing : pCurrentGlyph->LeftSideBearing, 0); firstGlyphOfLine = false; } else { offset.X += spriteFont.Spacing + (rtl ? pCurrentGlyph->RightSideBearing : pCurrentGlyph->LeftSideBearing); } Vector2 p = offset; if (flippedHorz) p.X += pCurrentGlyph->BoundsInTexture.Width; p.X += pCurrentGlyph->Cropping.X; if (flippedVert) p.Y += pCurrentGlyph->BoundsInTexture.Height - spriteFont.LineSpacing; p.Y += pCurrentGlyph->Cropping.Y; //Opt: Vector2.Transform(ref p, ref transformation, out p); float tpx = (p.X * transformation.M11); float tpy = (p.X * transformation.M12); tpx += (p.Y * transformation.M21) + transformation.M41; tpy += (p.Y * transformation.M22) + transformation.M42; SpriteBatchItem item = _batcher.CreateBatchItem(); item.Texture = spriteFont.Texture; item.SortKey = sortKey; _texCoordTL = pCurrentGlyph->TexCoordTL; _texCoordBR = pCurrentGlyph->TexCoordBR; if ((effects & SpriteEffects.FlipVertically) != 0) { float temp = _texCoordBR.Y; _texCoordBR.Y = _texCoordTL.Y; _texCoordTL.Y = temp; } if ((effects & SpriteEffects.FlipHorizontally) != 0) { float temp = _texCoordBR.X; _texCoordBR.X = _texCoordTL.X; _texCoordTL.X = temp; } if (rotation.i == 0f) { item.Set(tpx, tpy, pCurrentGlyph->BoundsInTexture.Width * scale.X, pCurrentGlyph->BoundsInTexture.Height * scale.Y, layerDepth, color, _texCoordTL, _texCoordBR); } else { item.Set(tpx, tpy, 0, 0, pCurrentGlyph->BoundsInTexture.Width * scale.X, pCurrentGlyph->BoundsInTexture.Height * scale.Y, ref rotation, layerDepth, color, _texCoordTL, _texCoordBR); } offset.X += pCurrentGlyph->Width + (rtl ? pCurrentGlyph->LeftSideBearing : pCurrentGlyph->RightSideBearing); } } if (_sortMode == SpriteSortMode.Immediate) _batcher.DrawBatch(_effect); } /// /// Immediately releases the unmanaged resources used by this object. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { if (_spriteEffect != null) { _spriteEffect.Dispose(); _spriteEffect = null; } if (_batcher != null) { _batcher.Dispose(); } } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteBatchItem.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class SpriteBatchItem : IComparable { public Texture2D Texture; public float SortKey; public VertexPositionColorTexture vertexTL; public VertexPositionColorTexture vertexTR; public VertexPositionColorTexture vertexBL; public VertexPositionColorTexture vertexBR; public SpriteBatchItem() { vertexTL = new VertexPositionColorTexture(); vertexTR = new VertexPositionColorTexture(); vertexBL = new VertexPositionColorTexture(); vertexBR = new VertexPositionColorTexture(); } public void Set(float x, float y, float w, float h, float depth, Color color, Vector2 texCoordTL, Vector2 texCoordBR) { vertexTL.Position.X = x; vertexTL.Position.Y = y; vertexTL.Position.Z = depth; vertexTL.Color = color; vertexTL.TextureCoordinate.X = texCoordTL.X; vertexTL.TextureCoordinate.Y = texCoordTL.Y; vertexTR.Position.X = x + w; vertexTR.Position.Y = y; vertexTR.Position.Z = depth; vertexTR.Color = color; vertexTR.TextureCoordinate.X = texCoordBR.X; vertexTR.TextureCoordinate.Y = texCoordTL.Y; vertexBL.Position.X = x; vertexBL.Position.Y = y + h; vertexBL.Position.Z = depth; vertexBL.Color = color; vertexBL.TextureCoordinate.X = texCoordTL.X; vertexBL.TextureCoordinate.Y = texCoordBR.Y; vertexBR.Position.X = x + w; vertexBR.Position.Y = y + h; vertexBR.Position.Z = depth; vertexBR.Color = color; vertexBR.TextureCoordinate.X = texCoordBR.X; vertexBR.TextureCoordinate.Y = texCoordBR.Y; } public void Set(float x, float y, float dx, float dy, float w, float h, ref Complex q, float depth, Color color, Vector2 texCoordTL, Vector2 texCoordBR) { vertexTL.Position.X = x + dx*q.R-dy*q.i; vertexTL.Position.Y = y + dx*q.i+dy*q.R; vertexTL.Position.Z = depth; vertexTL.Color = color; vertexTL.TextureCoordinate.X = texCoordTL.X; vertexTL.TextureCoordinate.Y = texCoordTL.Y; vertexTR.Position.X = x + (dx+w)*q.R-dy*q.i; vertexTR.Position.Y = y + (dx+w)*q.i+dy*q.R; vertexTR.Position.Z = depth; vertexTR.Color = color; vertexTR.TextureCoordinate.X = texCoordBR.X; vertexTR.TextureCoordinate.Y = texCoordTL.Y; vertexBL.Position.X = x + dx*q.R-(dy+h)*q.i; vertexBL.Position.Y = y + dx*q.i+(dy+h)*q.R; vertexBL.Position.Z = depth; vertexBL.Color = color; vertexBL.TextureCoordinate.X = texCoordTL.X; vertexBL.TextureCoordinate.Y = texCoordBR.Y; vertexBR.Position.X = x + (dx+w)*q.R-(dy+h)*q.i; vertexBR.Position.Y = y + (dx+w)*q.i+(dy+h)*q.R; vertexBR.Position.Z = depth; vertexBR.Color = color; vertexBR.TextureCoordinate.X = texCoordBR.X; vertexBR.TextureCoordinate.Y = texCoordBR.Y; } #region Implement IComparable public int CompareTo(SpriteBatchItem other) { return SortKey.CompareTo(other.SortKey); } #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteBatcherStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public abstract class SpriteBatcherStrategy : IDisposable { public abstract int BatchItemCount { get; } public abstract SpriteBatchItem CreateBatchItem(); public abstract void SortBatch(SpriteSortMode sortMode); public abstract void DrawBatch(Effect effect); #region IDisposable Members ~SpriteBatcherStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected abstract void Dispose(bool disposing); #endregion IDisposable Members } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteEffects.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines sprite visual options for mirroring. /// [Flags] public enum SpriteEffects { /// /// No options specified. /// None = 0, /// /// Render the sprite reversed along the X axis. /// FlipHorizontally = 1, /// /// Render the sprite reversed along the Y axis. /// FlipVertically = 2 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteFont.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos // Original code from SilverSprite Project using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Text; namespace Microsoft.Xna.Framework.Graphics { public sealed class SpriteFont { private readonly ReadOnlyCollection _readOnlyKeys; private readonly CharacterRegion[] _regions; private readonly Texture2D _texture; private char? _defaultCharacter; private int _defaultGlyphIndex = -1; private readonly Glyph[] _glyphs; ///SpriteBatcher need direct accest to the Glyph array internal Glyph[] InternalGlyphs { get { return _glyphs; } } class CharComparer: IEqualityComparer { public bool Equals(char x, char y) { return x == y; } public int GetHashCode(char b) { return (b); } static public readonly CharComparer Default = new CharComparer(); } /// /// Initializes a new instance of the class. /// /// The font texture. /// The rectangles in the font texture containing letters. /// The cropping rectangles, which are applied to the corresponding glyphBounds to calculate the bounds of the actual character. /// The characters. /// The line spacing (the distance from baseline to baseline) of the font. /// The spacing (tracking) between characters in the font. /// The letters kernings (X - left side bearing, Y - width and Z - right side bearing). /// The character that will be substituted when a given character is not included in the font. public SpriteFont( Texture2D texture, List glyphBounds, List cropping, List characters, int lineSpacing, float spacing, List kerning, char? defaultCharacter) { _texture = texture; LineSpacing = lineSpacing; Spacing = spacing; _readOnlyKeys = new ReadOnlyCollection(characters); // create regions var regions = new Stack(); for (int i = 0; i < characters.Count; i++) { if(regions.Count == 0 || characters[i] > (regions.Peek().End+1)) { // Start a new region regions.Push(new CharacterRegion(characters[i], i)); } else if(characters[i] == (regions.Peek().End+1)) { CharacterRegion currentRegion = regions.Pop(); // include character in currentRegion currentRegion.End++; regions.Push(currentRegion); } else // characters[i] < (regions.Peek().End+1) { throw new InvalidOperationException("Invalid SpriteFont. Character map must be in ascending order."); } } _regions = regions.ToArray(); Array.Reverse(_regions); // create Glyphs _glyphs = new Glyph[characters.Count]; for (int i = 0; i < characters.Count; i++) { _glyphs[i] = new Glyph(glyphBounds[i], cropping[i], kerning[i], _texture); } Glyphs = new GlyphCollection(this, _readOnlyKeys); DefaultCharacter = defaultCharacter; } /// /// Gets the texture that this SpriteFont draws from. /// /// Can be used to implement custom rendering of a SpriteFont public Texture2D Texture { get { return _texture; } } /// /// Gets a collection of the characters in the font. /// public ReadOnlyCollection Characters { get { return _readOnlyKeys; } } /// /// The glyphs in this SpriteFont. /// /// public readonly GlyphCollection Glyphs; /// /// Gets or sets the character that will be substituted when a /// given character is not included in the font. /// public char? DefaultCharacter { get { return _defaultCharacter; } set { // Get the default glyph index here once. if (value.HasValue) { if(!TryGetGlyphIndex(value.Value, out _defaultGlyphIndex)) throw new ArgumentException(UnresolvableCharacterErrorMessage(value.Value)); } else _defaultGlyphIndex = -1; _defaultCharacter = value; } } /// /// Gets or sets the line spacing (the distance from baseline /// to baseline) of the font. /// public int LineSpacing { get; set; } /// /// Gets or sets the spacing (tracking) between characters in /// the font. /// public float Spacing { get; set; } /// /// Returns the size of a string when rendered in this font. /// /// The text to measure. /// The size, in pixels, of 'text' when rendered in /// this font. public unsafe Vector2 MeasureString(string text) { char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); return MeasureString(pChars, pGlyphIndices, text.Length); } /// /// Returns the size of the contents of a StringBuilder when /// rendered in this font. /// /// The text to measure. /// The size, in pixels, of 'text' when rendered in /// this font. public unsafe Vector2 MeasureString(StringBuilder text) { char* pChars = stackalloc char[text.Length]; int* pGlyphIndices = stackalloc int[text.Length]; GetGlyphIndexes(text, pChars, pGlyphIndices, text.Length); return MeasureString(pChars, pGlyphIndices, text.Length); } internal unsafe Vector2 MeasureString(char* pChars, int* pGlyphIndices, int charsCount) { if (charsCount == 0) return Vector2.Zero; float width = 0.0f; float finalLineHeight = (float)LineSpacing; Vector2 offset = Vector2.Zero; bool firstGlyphOfLine = true; fixed (Glyph* pGlyphs = InternalGlyphs) for (int i = 0; i < charsCount; i++) { char c = pChars[i]; if (c == '\r') continue; if (c == '\n') { finalLineHeight = LineSpacing; offset.X = 0; offset.Y += LineSpacing; firstGlyphOfLine = true; continue; } int currentGlyphIndex = pGlyphIndices[i]; if (currentGlyphIndex == -1) throw new ArgumentException(UnresolvableCharacterErrorMessage(c), "text"); Debug.Assert(currentGlyphIndex >= 0 && currentGlyphIndex < InternalGlyphs.Length, "currentGlyphIndex was outside the bounds of the array."); Glyph* pCurrentGlyph = pGlyphs + currentGlyphIndex; // The first character on a line might have a negative left side bearing. // In this scenario, SpriteBatch/SpriteFont normally offset the text to the right, // so that text does not hang off the left side of its rectangle. if (firstGlyphOfLine) { offset.X = Math.Max(pCurrentGlyph->LeftSideBearing, 0); firstGlyphOfLine = false; } else { offset.X += Spacing + pCurrentGlyph->LeftSideBearing; } offset.X += pCurrentGlyph->Width; float proposedWidth = offset.X + Math.Max(pCurrentGlyph->RightSideBearing, 0); if (proposedWidth > width) width = proposedWidth; offset.X += pCurrentGlyph->RightSideBearing; if (pCurrentGlyph->Cropping.Height > finalLineHeight) finalLineHeight = pCurrentGlyph->Cropping.Height; } float height = offset.Y + finalLineHeight; return new Vector2(width, height); } internal unsafe bool TryGetGlyphIndex(char c, out int index) { fixed (CharacterRegion* pRegions = _regions) return TryGetGlyphIndex(pRegions, c, out index); } private unsafe bool TryGetGlyphIndex(CharacterRegion* pRegions, char c, out int index) { // Get region Index int regionIdx = -1; int l = 0; int r = _regions.Length - 1; while (l <= r) { int m = (l + r) >> 1; Debug.Assert(m >= 0 && m < _regions.Length, "Index was outside the bounds of the array."); if (pRegions[m].End < c) { l = m + 1; } else if (pRegions[m].Start > c) { r = m - 1; } else { regionIdx = m; break; } } if (regionIdx != -1) { index = pRegions[regionIdx].StartIndex + (c - pRegions[regionIdx].Start); return true; } else { index = -1; return false; } } internal unsafe void GetGlyphIndexes(StringBuilder text, char* pChars, int* pGlyphIndices, int charsCount) { fixed (CharacterRegion* pRegions = _regions) { for (int i = 0; i < charsCount; i++) { pChars[i] = text[i]; if (!TryGetGlyphIndex(pRegions, pChars[i], out pGlyphIndices[i])) { pGlyphIndices[i] = _defaultGlyphIndex; } } } } internal unsafe void GetGlyphIndexes(string text, char* pChars, int* pGlyphIndices, int charsCount) { fixed (CharacterRegion* pRegions = _regions) { for (int i = 0; i < charsCount; i++) { pChars[i] = text[i]; if (!TryGetGlyphIndex(pRegions, pChars[i], out pGlyphIndices[i])) { pGlyphIndices[i] = _defaultGlyphIndex; } } } } internal static string UnresolvableCharacterErrorMessage(char ch) { return String.Format("Character '{0}' (#{1}) cannot be resolved by this SpriteFont.", ch,(int)ch); } /// /// Struct that defines the spacing, Kerning, and bounds of a character. /// /// Provides the data necessary to implement custom SpriteFont rendering. public struct Glyph { /// /// Rectangle in the font texture where this letter exists. /// public Rectangle BoundsInTexture; /// /// Cropping applied to the BoundsInTexture to calculate the bounds of the actual character. /// public Rectangle Cropping; /// /// The amount of space between the left side of the character and its first pixel in the X dimension. /// public float LeftSideBearing; /// /// The amount of space between the right side of the character and its last pixel in the X dimension. /// public float RightSideBearing; /// /// Width of the character before kerning is applied. /// public float Width; /// /// Width of the character before kerning is applied. /// public float WidthIncludingBearings; internal Vector2 TexCoordTL; internal Vector2 TexCoordBR; public static readonly Glyph Empty = new Glyph(); public Glyph(Rectangle glyphBounds, Rectangle cropping, Vector3 kerning, Texture2D texture) : this() { BoundsInTexture = glyphBounds; Cropping = cropping; LeftSideBearing = kerning.X; Width = kerning.Y; RightSideBearing = kerning.Z; WidthIncludingBearings = kerning.X + kerning.Y + kerning.Z; TexCoordTL = new Vector2(glyphBounds.X * texture.TexelWidth, glyphBounds.Y * texture.TexelHeight); TexCoordBR = new Vector2((glyphBounds.X + glyphBounds.Width) * texture.TexelWidth, (glyphBounds.Y + glyphBounds.Height) * texture.TexelHeight); } public override string ToString () { return "Glyph=" + BoundsInTexture + ", Cropping=" + Cropping + ", Kerning=" + LeftSideBearing + "," + Width + "," + RightSideBearing; } } private struct CharacterRegion { public char Start; public char End; public int StartIndex; public CharacterRegion(char start, int startIndex) { this.Start = start; this.End = start; this.StartIndex = startIndex; } } public class GlyphCollection : IDictionary { private readonly SpriteFont _spriteFont; private readonly ReadOnlyCollection _keys; private readonly ICollection _values; internal GlyphCollection(SpriteFont spriteFont, ReadOnlyCollection keys) { _spriteFont = spriteFont; _keys = keys; _values = new ReadOnlyCollection(_spriteFont._glyphs); } public Glyph this[char key] { get { if (_spriteFont.TryGetGlyphIndex(key, out int glyphIdx)) { Glyph glyph = _spriteFont._glyphs[glyphIdx]; return glyph; } else throw new KeyNotFoundException(); } set { throw new NotSupportedException(); } } public int Count { get { return _keys.Count; } } public bool IsReadOnly { get { return true; } } ICollection IDictionary.Keys { get { return _keys; } } ICollection IDictionary.Values { get { return _values; } } public bool ContainsKey(char key) { return _spriteFont.TryGetGlyphIndex(key, out int glyphIdx); } public bool TryGetValue(char key, out Glyph value) { if (_spriteFont.TryGetGlyphIndex(key, out int glyphIdx)) { value = _spriteFont._glyphs[glyphIdx]; return true; } else { value = default(Glyph); return false; } } bool ICollection>.Contains(KeyValuePair item) { return (_keys.Contains(item.Key) && this[item.Key].Equals(item.Value)); } void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) { foreach (var keyValue in this) array[arrayIndex++] = keyValue; } IEnumerator> IEnumerable>.GetEnumerator() { return new CharGlyphPairEnumerator(_keys, this); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable>)this).GetEnumerator(); } void IDictionary.Add(char key, Glyph value) { throw new NotSupportedException(); } bool IDictionary.Remove(char key) { throw new NotSupportedException(); } void ICollection>.Add(KeyValuePair item) { throw new NotSupportedException(); } bool ICollection>.Remove(KeyValuePair item) { throw new NotSupportedException(); } void ICollection>.Clear() { throw new NotSupportedException(); } public struct CharGlyphPairEnumerator : IEnumerator> { private int i; private ReadOnlyCollection _keys; private GlyphCollection _collection; public CharGlyphPairEnumerator( ReadOnlyCollection keys, GlyphCollection collection) { i = -1; _keys = keys; _collection = collection; } #region IEnumerator> public KeyValuePair Current { get { char key = _keys[i]; Glyph glyph = _collection[key]; return new KeyValuePair(key, glyph); } } #endregion IEnumerator> #region IEnumerator public bool MoveNext() { return (++i < _keys.Count); } object IEnumerator.Current { get { char key = _keys[i]; Glyph glyph = _collection[key]; return new KeyValuePair(key, glyph); } } void IDisposable.Dispose() { _collection = null; _keys = null; i = -1; } void IEnumerator.Reset() { i = -1; } #endregion IEnumerator } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SpriteSortMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines sprite sort rendering options. /// public enum SpriteSortMode { /// /// All sprites are drawing when invokes, in order of draw call sequence. Depth is ignored. /// Deferred, /// /// Each sprite is drawing at individual draw call, instead of . Depth is ignored. /// Immediate, /// /// Same as , except sprites are sorted by texture prior to drawing. Depth is ignored. /// Texture, /// /// Same as , except sprites are sorted by depth in back-to-front order prior to drawing. /// An unstable sort is used, which means sprites with equal depth may not have their order preserved. /// BackToFront, /// /// Same as , except sprites are sorted by depth in front-to-back order prior to drawing. /// An unstable sort is used, which means sprites with equal depth may not have their order preserved. /// FrontToBack } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/Blend.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines a blend mode. /// public enum Blend { /// /// Each component of the color is multiplied by {1, 1, 1, 1}. /// One, /// /// Each component of the color is multiplied by {0, 0, 0, 0}. /// Zero, /// /// Each component of the color is multiplied by the source color. /// {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values. /// SourceColor, /// /// Each component of the color is multiplied by the inverse of the source color. /// {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values. /// InverseSourceColor, /// /// Each component of the color is multiplied by the alpha value of the source. /// {As, As, As, As}, where As is the source alpha value. /// SourceAlpha, /// /// Each component of the color is multiplied by the inverse of the alpha value of the source. /// {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value. /// InverseSourceAlpha, /// /// Each component color is multiplied by the destination color. /// {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values. /// DestinationColor, /// /// Each component of the color is multiplied by the inversed destination color. /// {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values. /// InverseDestinationColor, /// /// Each component of the color is multiplied by the alpha value of the destination. /// {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value. /// DestinationAlpha, /// /// Each component of the color is multiplied by the inversed alpha value of the destination. /// {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value. /// InverseDestinationAlpha, /// /// Each component of the color is multiplied by a constant in the . /// BlendFactor, /// /// Each component of the color is multiplied by a inversed constant in the . /// InverseBlendFactor, /// /// Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. /// {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value. /// SourceAlphaSaturation } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/BlendFunction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines a function for color blending. /// public enum BlendFunction { /// /// The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend) /// Add, /// /// The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend) /// Subtract, /// /// The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) /// ReverseSubtract, /// /// The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend)) /// Min, /// /// The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend)) /// Max } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/BlendState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class BlendState : GraphicsResource , IPlatformBlendState { internal IBlendStateStrategy _strategy; T IPlatformBlendState.GetStrategy() { return (T)_strategy; } public static readonly BlendState Additive; public static readonly BlendState AlphaBlend; public static readonly BlendState NonPremultiplied; public static readonly BlendState Opaque; static BlendState() { Additive = new BlendState("BlendState.Additive", Blend.SourceAlpha, Blend.One); AlphaBlend = new BlendState("BlendState.AlphaBlend", Blend.One, Blend.InverseSourceAlpha); NonPremultiplied = new BlendState("BlendState.NonPremultiplied", Blend.SourceAlpha, Blend.InverseSourceAlpha); Opaque = new BlendState("BlendState.Opaque", Blend.One, Blend.Zero); } /// /// Enables use of the per-target blend states. /// public bool IndependentBlendEnable { get { return _strategy.IndependentBlendEnable; } set { _strategy.IndependentBlendEnable = value; } } /// /// Returns the target specific blend state. /// /// The 0 to 3 target blend state index. /// A target blend state. public TargetBlendState this[int index] { get { return _strategy.Targets[index]; } } public BlendFunction AlphaBlendFunction { get { return _strategy.AlphaBlendFunction; } set { _strategy.AlphaBlendFunction = value; } } public Blend AlphaDestinationBlend { get { return _strategy.AlphaDestinationBlend; } set { _strategy.AlphaDestinationBlend = value; } } public Blend AlphaSourceBlend { get { return _strategy.AlphaSourceBlend; } set { _strategy.AlphaSourceBlend = value; } } public BlendFunction ColorBlendFunction { get { return _strategy.ColorBlendFunction; } set { _strategy.ColorBlendFunction = value; } } public Blend ColorDestinationBlend { get { return _strategy.ColorDestinationBlend; } set { _strategy.ColorDestinationBlend = value; } } public Blend ColorSourceBlend { get { return _strategy.ColorSourceBlend; } set { _strategy.ColorSourceBlend = value; } } public ColorWriteChannels ColorWriteChannels { get { return _strategy.ColorWriteChannels; } set { _strategy.ColorWriteChannels = value; } } public ColorWriteChannels ColorWriteChannels1 { get { return _strategy.ColorWriteChannels1; } set { _strategy.ColorWriteChannels1 = value; } } public ColorWriteChannels ColorWriteChannels2 { get { return _strategy.ColorWriteChannels2; } set { _strategy.ColorWriteChannels2 = value; } } public ColorWriteChannels ColorWriteChannels3 { get { return _strategy.ColorWriteChannels3; } set { _strategy.ColorWriteChannels3 = value; } } /// /// The color used as blend factor when alpha blending. /// /// /// is set to this value when this /// is bound to a GraphicsDevice. /// public Color BlendFactor { get { return _strategy.BlendFactor; } set { _strategy.BlendFactor = value; } } public int MultiSampleMask { get { return _strategy.MultiSampleMask; } set { _strategy.MultiSampleMask = value; } } internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy) { if (_strategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("You cannot bind a default state object."); GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy; if (this.GraphicsDevice != deviceStrategy.Device) { if (this.GraphicsDevice == null) { System.Diagnostics.Debug.Assert(deviceStrategy.Device != null); _strategy = contextStrategy.CreateBlendStateStrategy(_strategy); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } else throw new InvalidOperationException("This blend state is already bound to a different graphics device."); } } public BlendState() : base() { _strategy = new BlendStateStrategy(); } private BlendState(string name, Blend sourceBlend, Blend destinationBlend) : base() { Name = name; _strategy = new ReadonlyBlendStateStrategy(sourceBlend, destinationBlend); } internal BlendState(BlendState source) : base() { Name = source.Name; _strategy = new BlendStateStrategy(source._strategy); } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { } for (int i = 0; i < _strategy.Targets.Length; i++) _strategy.Targets[i] = null; base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/BlendStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class BlendStateStrategy : GraphicsResourceStrategy , IBlendStateStrategy { private Color _blendFactor; private int _multiSampleMask; private bool _independentBlendEnable; private readonly TargetBlendState[] _targetBlendState; public virtual bool IndependentBlendEnable { get { return _independentBlendEnable; } set { _independentBlendEnable = value; } } public TargetBlendState[] Targets { get { return _targetBlendState; } } public virtual Color BlendFactor { get { return _blendFactor; } set { _blendFactor = value; } } public virtual int MultiSampleMask { get { return _multiSampleMask; } set { _multiSampleMask = value; } } public virtual BlendFunction AlphaBlendFunction { get { return _targetBlendState[0].AlphaBlendFunction; } set { _targetBlendState[0].AlphaBlendFunction = value; } } public virtual Blend AlphaDestinationBlend { get { return _targetBlendState[0].AlphaDestinationBlend; } set { _targetBlendState[0].AlphaDestinationBlend = value; } } public virtual Blend AlphaSourceBlend { get { return _targetBlendState[0].AlphaSourceBlend; } set { _targetBlendState[0].AlphaSourceBlend = value; } } public virtual BlendFunction ColorBlendFunction { get { return _targetBlendState[0].ColorBlendFunction; } set { _targetBlendState[0].ColorBlendFunction = value; } } public virtual Blend ColorDestinationBlend { get { return _targetBlendState[0].ColorDestinationBlend; } set { _targetBlendState[0].ColorDestinationBlend = value; } } public virtual Blend ColorSourceBlend { get { return _targetBlendState[0].ColorSourceBlend; } set { _targetBlendState[0].ColorSourceBlend = value; } } public virtual ColorWriteChannels ColorWriteChannels { get { return _targetBlendState[0].ColorWriteChannels; } set { _targetBlendState[0].ColorWriteChannels = value; } } public virtual ColorWriteChannels ColorWriteChannels1 { get { return _targetBlendState[1].ColorWriteChannels; } set { _targetBlendState[1].ColorWriteChannels = value; } } public virtual ColorWriteChannels ColorWriteChannels2 { get { return _targetBlendState[2].ColorWriteChannels; } set { _targetBlendState[2].ColorWriteChannels = value; } } public virtual ColorWriteChannels ColorWriteChannels3 { get { return _targetBlendState[3].ColorWriteChannels; } set { _targetBlendState[3].ColorWriteChannels = value; } } public BlendStateStrategy() : base() { _blendFactor = Color.White; _multiSampleMask = Int32.MaxValue; _independentBlendEnable = false; _targetBlendState = new TargetBlendState[4]; _targetBlendState[0] = new TargetBlendState(this); _targetBlendState[1] = new TargetBlendState(this); _targetBlendState[2] = new TargetBlendState(this); _targetBlendState[3] = new TargetBlendState(this); //_alphaBlendFunction = BlendFunction.Add; //_alphaDestinationBlend = Blend.Zero; //_alphaSourceBlend = Blend.One; //_colorBlendFunction = BlendFunction.Add; //_colorDestinationBlend = Blend.Zero; //_colorSourceBlend = Blend.One; //_colorWriteChannels = ColorWriteChannels.All; //_colorWriteChannels1 = ColorWriteChannels1.All; //_colorWriteChannels2 = ColorWriteChannels2.All; //_colorWriteChannels3 = ColorWriteChannels3.All; } internal BlendStateStrategy(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy) { this._blendFactor = source.BlendFactor; this._multiSampleMask = source.MultiSampleMask; _independentBlendEnable = source.IndependentBlendEnable; _targetBlendState = new TargetBlendState[4]; _targetBlendState[0] = new TargetBlendState(source.Targets[0], source); _targetBlendState[1] = new TargetBlendState(source.Targets[1], source); _targetBlendState[2] = new TargetBlendState(source.Targets[2], source); _targetBlendState[3] = new TargetBlendState(source.Targets[3], source); //_alphaBlendFunction = source.AlphaBlendFunction; //_alphaDestinationBlend = source.AlphaDestinationBlend; //_alphaSourceBlend = source.AlphaSourceBlend; //_colorBlendFunction = source.ColorBlendFunction; //_colorDestinationBlend = source.ColorDestinationBlend; //_colorSourceBlend = source.ColorSourceBlend; //_colorWriteChannels = source.ColorWriteChannels; //_colorWriteChannels1 = source.ColorWriteChannels1; //_colorWriteChannels2 = source.ColorWriteChannels2; //_colorWriteChannels3 = source.ColorWriteChannels3; } internal BlendStateStrategy(IBlendStateStrategy source) : base() { this._blendFactor = source.BlendFactor; this._multiSampleMask = source.MultiSampleMask; _independentBlendEnable = source.IndependentBlendEnable; _targetBlendState = new TargetBlendState[4]; _targetBlendState[0] = new TargetBlendState(source.Targets[0], source); _targetBlendState[1] = new TargetBlendState(source.Targets[1], source); _targetBlendState[2] = new TargetBlendState(source.Targets[2], source); _targetBlendState[3] = new TargetBlendState(source.Targets[3], source); //_alphaBlendFunction = source.AlphaBlendFunction; //_alphaDestinationBlend = source.AlphaDestinationBlend; //_alphaSourceBlend = source.AlphaSourceBlend; //_colorBlendFunction = source.ColorBlendFunction; //_colorDestinationBlend = source.ColorDestinationBlend; //_colorSourceBlend = source.ColorSourceBlend; //_colorWriteChannels = source.ColorWriteChannels; //_colorWriteChannels1 = source.ColorWriteChannels1; //_colorWriteChannels2 = source.ColorWriteChannels2; //_colorWriteChannels3 = source.ColorWriteChannels3; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/CompareFunction.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// The comparison function used for depth, stencil, and alpha tests. /// public enum CompareFunction { /// /// Always passes the test. /// Always, /// /// Never passes the test. /// Never, /// /// Passes the test when the new value is less than current value. /// Less, /// /// Passes the test when the new value is less than or equal to current value. /// LessEqual, /// /// Passes the test when the new value is equal to current value. /// Equal, /// /// Passes the test when the new value is greater than or equal to current value. /// GreaterEqual, /// /// Passes the test when the new value is greater than current value. /// Greater, /// /// Passes the test when the new value does not equal to current value. /// NotEqual } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/CullMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines a culling mode for faces in rasterization process. /// public enum CullMode { /// /// Do not cull faces. /// None, /// /// Cull faces with clockwise order. /// CullClockwiseFace, /// /// Cull faces with counter clockwise order. /// CullCounterClockwiseFace } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/DepthFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines formats for depth-stencil buffer. /// public enum DepthFormat { /// /// Depth-stencil buffer will not be created. /// None, /// /// 16-bit depth buffer. /// Depth16, /// /// 24-bit depth buffer. Equivalent of for DirectX platforms. /// Depth24, /// /// 32-bit depth-stencil buffer. Where 24-bit depth and 8-bit for stencil used. /// Depth24Stencil8 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/DepthStencilState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class DepthStencilState : GraphicsResource , IPlatformDepthStencilState { internal IDepthStencilStateStrategy _strategy; T IPlatformDepthStencilState.GetStrategy() { return (T)_strategy; } public static readonly DepthStencilState Default; public static readonly DepthStencilState DepthRead; public static readonly DepthStencilState None; static DepthStencilState() { Default = new DepthStencilState("DepthStencilState.Default", true, true); DepthRead = new DepthStencilState("DepthStencilState.DepthRead", true, false); None = new DepthStencilState("DepthStencilState.None", false, false); } public bool DepthBufferEnable { get { return _strategy.DepthBufferEnable; } set { _strategy.DepthBufferEnable = value; } } public bool DepthBufferWriteEnable { get { return _strategy.DepthBufferWriteEnable; } set { _strategy.DepthBufferWriteEnable = value; } } public StencilOperation CounterClockwiseStencilDepthBufferFail { get { return _strategy.CounterClockwiseStencilDepthBufferFail; } set { _strategy.CounterClockwiseStencilDepthBufferFail = value; } } public StencilOperation CounterClockwiseStencilFail { get { return _strategy.CounterClockwiseStencilFail; } set { _strategy.CounterClockwiseStencilFail = value; } } public CompareFunction CounterClockwiseStencilFunction { get { return _strategy.CounterClockwiseStencilFunction; } set { _strategy.CounterClockwiseStencilFunction = value; } } public StencilOperation CounterClockwiseStencilPass { get { return _strategy.CounterClockwiseStencilPass; } set { _strategy.CounterClockwiseStencilPass = value; } } public CompareFunction DepthBufferFunction { get { return _strategy.DepthBufferFunction; } set { _strategy.DepthBufferFunction = value; } } public int ReferenceStencil { get { return _strategy.ReferenceStencil; } set { _strategy.ReferenceStencil = value; } } public StencilOperation StencilDepthBufferFail { get { return _strategy.StencilDepthBufferFail; } set { _strategy.StencilDepthBufferFail = value; } } public bool StencilEnable { get { return _strategy.StencilEnable; } set { _strategy.StencilEnable = value; } } public StencilOperation StencilFail { get { return _strategy.StencilFail; } set { _strategy.StencilFail = value; } } public CompareFunction StencilFunction { get { return _strategy.StencilFunction; } set { _strategy.StencilFunction = value; } } public int StencilMask { get { return _strategy.StencilMask; } set { _strategy.StencilMask = value; } } public StencilOperation StencilPass { get { return _strategy.StencilPass; } set { _strategy.StencilPass = value; } } public int StencilWriteMask { get { return _strategy.StencilWriteMask; } set { _strategy.StencilWriteMask = value; } } public bool TwoSidedStencilMode { get { return _strategy.TwoSidedStencilMode; } set { _strategy.TwoSidedStencilMode = value; } } internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy) { if (_strategy is ReadonlyDepthStencilStateStrategy) throw new InvalidOperationException("You cannot bind a default state object."); GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy; if (this.GraphicsDevice != deviceStrategy.Device) { if (this.GraphicsDevice == null) { System.Diagnostics.Debug.Assert(deviceStrategy.Device != null); _strategy = contextStrategy.CreateDepthStencilStateStrategy(_strategy); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } else throw new InvalidOperationException("This depth stencil state is already bound to a different graphics device."); } } public DepthStencilState() : base() { _strategy = new DepthStencilStateStrategy(); } private DepthStencilState(string name, bool depthBufferEnable, bool depthBufferWriteEnable) : base() { Name = name; _strategy = new ReadonlyDepthStencilStateStrategy(depthBufferEnable, depthBufferWriteEnable); } internal DepthStencilState(DepthStencilState source) : base() { Name = source.Name; _strategy = new DepthStencilStateStrategy(source._strategy); } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/DepthStencilStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class DepthStencilStateStrategy : GraphicsResourceStrategy , IDepthStencilStateStrategy { private bool _depthBufferEnable; private bool _depthBufferWriteEnable; private CompareFunction _depthBufferFunction; private StencilOperation _counterClockwiseStencilDepthBufferFail; private StencilOperation _counterClockwiseStencilFail; private CompareFunction _counterClockwiseStencilFunction; private StencilOperation _counterClockwiseStencilPass; private int _referenceStencil; private StencilOperation _stencilDepthBufferFail; private bool _stencilEnable; private StencilOperation _stencilFail; private CompareFunction _stencilFunction; private int _stencilMask; private StencilOperation _stencilPass; private int _stencilWriteMask; private bool _twoSidedStencilMode; public virtual bool DepthBufferEnable { get { return _depthBufferEnable; } set { _depthBufferEnable = value; } } public virtual bool DepthBufferWriteEnable { get { return _depthBufferWriteEnable; } set { _depthBufferWriteEnable = value; } } public virtual CompareFunction DepthBufferFunction { get { return _depthBufferFunction; } set { _depthBufferFunction = value; } } public virtual StencilOperation CounterClockwiseStencilDepthBufferFail { get { return _counterClockwiseStencilDepthBufferFail; } set { _counterClockwiseStencilDepthBufferFail = value; } } public virtual StencilOperation CounterClockwiseStencilFail { get { return _counterClockwiseStencilFail; } set { _counterClockwiseStencilFail = value; } } public virtual CompareFunction CounterClockwiseStencilFunction { get { return _counterClockwiseStencilFunction; } set { _counterClockwiseStencilFunction = value; } } public virtual StencilOperation CounterClockwiseStencilPass { get { return _counterClockwiseStencilPass; } set { _counterClockwiseStencilPass = value; } } public virtual int ReferenceStencil { get { return _referenceStencil; } set { _referenceStencil = value; } } public virtual StencilOperation StencilDepthBufferFail { get { return _stencilDepthBufferFail; } set { _stencilDepthBufferFail = value; } } public virtual bool StencilEnable { get { return _stencilEnable; } set { _stencilEnable = value; } } public virtual StencilOperation StencilFail { get { return _stencilFail; } set { _stencilFail = value; } } public virtual CompareFunction StencilFunction { get { return _stencilFunction; } set { _stencilFunction = value; } } public virtual int StencilMask { get { return _stencilMask; } set { _stencilMask = value; } } public virtual StencilOperation StencilPass { get { return _stencilPass; } set { _stencilPass = value; } } public virtual int StencilWriteMask { get { return _stencilWriteMask; } set { _stencilWriteMask = value; } } public virtual bool TwoSidedStencilMode { get { return _twoSidedStencilMode; } set { _twoSidedStencilMode = value; } } public DepthStencilStateStrategy() : base() { _depthBufferEnable = true; _depthBufferWriteEnable = true; _depthBufferFunction = CompareFunction.LessEqual; _stencilEnable = false; _stencilFunction = CompareFunction.Always; _stencilPass = StencilOperation.Keep; _stencilFail = StencilOperation.Keep; _stencilDepthBufferFail = StencilOperation.Keep; _twoSidedStencilMode = false; _counterClockwiseStencilFunction = CompareFunction.Always; _counterClockwiseStencilPass = StencilOperation.Keep; _counterClockwiseStencilFail = StencilOperation.Keep; _counterClockwiseStencilDepthBufferFail = StencilOperation.Keep; _stencilMask = Int32.MaxValue; _stencilWriteMask = Int32.MaxValue; _referenceStencil = 0; } internal DepthStencilStateStrategy(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy) { _depthBufferEnable = source.DepthBufferEnable; _depthBufferWriteEnable = source.DepthBufferWriteEnable; _depthBufferFunction = source.DepthBufferFunction; _stencilEnable = source.StencilEnable; _stencilFunction = source.StencilFunction; _stencilPass = source.StencilPass; _stencilFail = source.StencilFail; _stencilDepthBufferFail = source.StencilDepthBufferFail; _twoSidedStencilMode = source.TwoSidedStencilMode; _counterClockwiseStencilFunction = source.CounterClockwiseStencilFunction; _counterClockwiseStencilPass = source.CounterClockwiseStencilPass; _counterClockwiseStencilFail = source.CounterClockwiseStencilFail; _counterClockwiseStencilDepthBufferFail = source.CounterClockwiseStencilDepthBufferFail; _stencilMask = source.StencilMask; _stencilWriteMask = source.StencilWriteMask; _referenceStencil = source.ReferenceStencil; } internal DepthStencilStateStrategy(IDepthStencilStateStrategy source) : base() { _depthBufferEnable = source.DepthBufferEnable; _depthBufferWriteEnable = source.DepthBufferWriteEnable; _depthBufferFunction = source.DepthBufferFunction; _stencilEnable = source.StencilEnable; _stencilFunction = source.StencilFunction; _stencilPass = source.StencilPass; _stencilFail = source.StencilFail; _stencilDepthBufferFail = source.StencilDepthBufferFail; _twoSidedStencilMode = source.TwoSidedStencilMode; _counterClockwiseStencilFunction = source.CounterClockwiseStencilFunction; _counterClockwiseStencilPass = source.CounterClockwiseStencilPass; _counterClockwiseStencilFail = source.CounterClockwiseStencilFail; _counterClockwiseStencilDepthBufferFail = source.CounterClockwiseStencilDepthBufferFail; _stencilMask = source.StencilMask; _stencilWriteMask = source.StencilWriteMask; _referenceStencil = source.ReferenceStencil; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/FillMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines options for filling the primitive. /// public enum FillMode { /// /// Draw solid faces for each primitive. /// Solid, /// /// Draw lines for each primitive. /// WireFrame } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/IBlendStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformBlendState { T GetStrategy() where T : IBlendStateStrategy; } public interface IBlendStateStrategy { bool IndependentBlendEnable { get; set; } TargetBlendState[] Targets { get; } Color BlendFactor { get; set; } int MultiSampleMask { get; set; } BlendFunction AlphaBlendFunction { get; set; } Blend AlphaDestinationBlend { get; set; } Blend AlphaSourceBlend { get; set; } BlendFunction ColorBlendFunction { get; set; } Blend ColorDestinationBlend { get; set; } Blend ColorSourceBlend { get; set; } ColorWriteChannels ColorWriteChannels { get; set; } ColorWriteChannels ColorWriteChannels1 { get; set; } ColorWriteChannels ColorWriteChannels2 { get; set; } ColorWriteChannels ColorWriteChannels3 { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/IDepthStencilStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformDepthStencilState { T GetStrategy() where T : IDepthStencilStateStrategy; } public interface IDepthStencilStateStrategy { bool DepthBufferEnable { get; set; } bool DepthBufferWriteEnable { get; set; } CompareFunction DepthBufferFunction { get; set; } StencilOperation CounterClockwiseStencilDepthBufferFail { get; set; } StencilOperation CounterClockwiseStencilFail { get; set; } CompareFunction CounterClockwiseStencilFunction { get; set; } StencilOperation CounterClockwiseStencilPass { get; set; } int ReferenceStencil { get; set; } StencilOperation StencilDepthBufferFail { get; set; } bool StencilEnable { get; set; } StencilOperation StencilFail { get; set; } CompareFunction StencilFunction { get; set; } int StencilMask { get; set; } StencilOperation StencilPass { get; set; } int StencilWriteMask { get; set; } bool TwoSidedStencilMode { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/IRasterizerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformRasterizerState { T GetStrategy() where T : IRasterizerStateStrategy; } public interface IRasterizerStateStrategy { CullMode CullMode { get; set; } float DepthBias { get; set; } FillMode FillMode { get; set; } bool MultiSampleAntiAlias { get; set; } bool ScissorTestEnable { get; set; } float SlopeScaleDepthBias { get; set; } bool DepthClipEnable { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ISamplerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformSamplerState { T GetStrategy() where T : ISamplerStateStrategy; } public interface ISamplerStateStrategy { TextureFilter Filter { get; set; } TextureAddressMode AddressU { get; set; } TextureAddressMode AddressV { get; set; } TextureAddressMode AddressW { get; set; } Color BorderColor { get; set; } int MaxAnisotropy { get; set; } int MaxMipLevel { get; set; } float MipMapLevelOfDetailBias { get; set; } CompareFunction ComparisonFunction { get; set; } TextureFilterMode FilterMode { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/RasterizerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class RasterizerState : GraphicsResource , IPlatformRasterizerState { internal IRasterizerStateStrategy _strategy; T IPlatformRasterizerState.GetStrategy() { return (T)_strategy; } public static readonly RasterizerState CullClockwise; public static readonly RasterizerState CullCounterClockwise; public static readonly RasterizerState CullNone; static RasterizerState() { CullClockwise = new RasterizerState("RasterizerState.CullClockwise", CullMode.CullClockwiseFace); CullCounterClockwise = new RasterizerState("RasterizerState.CullCounterClockwise", CullMode.CullCounterClockwiseFace); CullNone = new RasterizerState("RasterizerState.CullNone", CullMode.None); } public CullMode CullMode { get { return _strategy.CullMode; } set { _strategy.CullMode = value; } } public float DepthBias { get { return _strategy.DepthBias; } set { _strategy.DepthBias = value; } } public FillMode FillMode { get { return _strategy.FillMode; } set { _strategy.FillMode = value; } } public bool MultiSampleAntiAlias { get { return _strategy.MultiSampleAntiAlias; } set { _strategy.MultiSampleAntiAlias = value; } } public bool ScissorTestEnable { get { return _strategy.ScissorTestEnable; } set { _strategy.ScissorTestEnable = value; } } public float SlopeScaleDepthBias { get { return _strategy.SlopeScaleDepthBias; } set { _strategy.SlopeScaleDepthBias = value; } } public bool DepthClipEnable { get { return _strategy.DepthClipEnable; } set { _strategy.DepthClipEnable = value; } } internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy) { if (_strategy is ReadonlyRasterizerStateStrategy) throw new InvalidOperationException("You cannot bind a default state object."); GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy; if (this.GraphicsDevice != deviceStrategy.Device) { if (this.GraphicsDevice == null) { System.Diagnostics.Debug.Assert(deviceStrategy.Device != null); _strategy = contextStrategy.CreateRasterizerStateStrategy(_strategy); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } else throw new InvalidOperationException("This rasterizer state is already bound to a different graphics device."); } } public RasterizerState() : base() { _strategy = new RasterizerStateStrategy(); } private RasterizerState(string name, CullMode cullMode) : base() { Name = name; _strategy = new ReadonlyRasterizerStateStrategy(cullMode); } internal RasterizerState(RasterizerState source) : base() { Name = source.Name; _strategy = new RasterizerStateStrategy(source._strategy); } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/RasterizerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class RasterizerStateStrategy : GraphicsResourceStrategy , IRasterizerStateStrategy { private CullMode _cullMode; private float _depthBias; private FillMode _fillMode; private bool _multiSampleAntiAlias; private bool _scissorTestEnable; private float _slopeScaleDepthBias; private bool _depthClipEnable; public virtual CullMode CullMode { get { return _cullMode; } set { _cullMode = value; } } public virtual float DepthBias { get { return _depthBias; } set { _depthBias = value; } } public virtual FillMode FillMode { get { return _fillMode; } set { _fillMode = value; } } public virtual bool MultiSampleAntiAlias { get { return _multiSampleAntiAlias; } set { _multiSampleAntiAlias = value; } } public virtual bool ScissorTestEnable { get { return _scissorTestEnable; } set { _scissorTestEnable = value; } } public virtual float SlopeScaleDepthBias { get { return _slopeScaleDepthBias; } set { _slopeScaleDepthBias = value; } } public virtual bool DepthClipEnable { get { return _depthClipEnable; } set { _depthClipEnable = value; } } public RasterizerStateStrategy() : base() { _cullMode = CullMode.CullCounterClockwiseFace; _fillMode = FillMode.Solid; _depthBias = 0; _multiSampleAntiAlias = true; _scissorTestEnable = false; _slopeScaleDepthBias = 0; _depthClipEnable = true; } internal RasterizerStateStrategy(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy) { _cullMode = source.CullMode; _fillMode = source.FillMode; _depthBias = source.DepthBias; _multiSampleAntiAlias = source.MultiSampleAntiAlias; _scissorTestEnable = source.ScissorTestEnable; _slopeScaleDepthBias = source.SlopeScaleDepthBias; _depthClipEnable = source.DepthClipEnable; } internal RasterizerStateStrategy(IRasterizerStateStrategy source) : base() { _cullMode = source.CullMode; _fillMode = source.FillMode; _depthBias = source.DepthBias; _multiSampleAntiAlias = source.MultiSampleAntiAlias; _scissorTestEnable = source.ScissorTestEnable; _slopeScaleDepthBias = source.SlopeScaleDepthBias; _depthClipEnable = source.DepthClipEnable; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ReadonlyBlendStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ReadonlyBlendStateStrategy : BlendStateStrategy { public override bool IndependentBlendEnable { get { return base.IndependentBlendEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Color BlendFactor { get { return base.BlendFactor; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int MultiSampleMask { get { return base.MultiSampleMask; } set { throw new InvalidOperationException("The state object is readonly."); } } public override BlendFunction AlphaBlendFunction { get { return base.AlphaBlendFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Blend AlphaDestinationBlend { get { return base.AlphaDestinationBlend; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Blend AlphaSourceBlend { get { return base.AlphaSourceBlend; } set { throw new InvalidOperationException("The state object is readonly."); } } public override BlendFunction ColorBlendFunction { get { return base.ColorBlendFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Blend ColorDestinationBlend { get { return base.ColorDestinationBlend; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Blend ColorSourceBlend { get { return base.ColorSourceBlend; } set { throw new InvalidOperationException("The state object is readonly."); } } public override ColorWriteChannels ColorWriteChannels { get { return base.ColorWriteChannels; } set { throw new InvalidOperationException("The state object is readonly."); } } public override ColorWriteChannels ColorWriteChannels1 { get { return base.ColorWriteChannels1; } set { throw new InvalidOperationException("The state object is readonly."); } } public override ColorWriteChannels ColorWriteChannels2 { get { return base.ColorWriteChannels2; } set { throw new InvalidOperationException("The state object is readonly."); } } public override ColorWriteChannels ColorWriteChannels3 { get { return base.ColorWriteChannels3; } set { throw new InvalidOperationException("The state object is readonly."); } } public ReadonlyBlendStateStrategy(Blend sourceBlend, Blend destinationBlend) : base() { //base.ColorSourceBlend = sourceBlend; //base.AlphaSourceBlend = sourceBlend; //base.ColorDestinationBlend = destinationBlend; //base.AlphaDestinationBlend = destinationBlend; base.Targets[0] = new TargetBlendState(this, sourceBlend, destinationBlend); base.Targets[1] = new TargetBlendState(this, sourceBlend, destinationBlend); base.Targets[2] = new TargetBlendState(this, sourceBlend, destinationBlend); base.Targets[3] = new TargetBlendState(this, sourceBlend, destinationBlend); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ReadonlyDepthStencilStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ReadonlyDepthStencilStateStrategy : DepthStencilStateStrategy { public override bool DepthBufferEnable { get { return base.DepthBufferEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool DepthBufferWriteEnable { get { return base.DepthBufferWriteEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation CounterClockwiseStencilDepthBufferFail { get { return base.CounterClockwiseStencilDepthBufferFail; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation CounterClockwiseStencilFail { get { return base.CounterClockwiseStencilFail; } set { throw new InvalidOperationException("The state object is readonly."); } } public override CompareFunction CounterClockwiseStencilFunction { get { return base.CounterClockwiseStencilFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation CounterClockwiseStencilPass { get { return base.CounterClockwiseStencilPass; } set { throw new InvalidOperationException("The state object is readonly."); } } public override CompareFunction DepthBufferFunction { get { return base.DepthBufferFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int ReferenceStencil { get { return base.ReferenceStencil; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation StencilDepthBufferFail { get { return base.StencilDepthBufferFail; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool StencilEnable { get { return base.StencilEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation StencilFail { get { return base.StencilFail; } set { throw new InvalidOperationException("The state object is readonly."); } } public override CompareFunction StencilFunction { get { return base.StencilFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int StencilMask { get { return base.StencilMask; } set { throw new InvalidOperationException("The state object is readonly."); } } public override StencilOperation StencilPass { get { return base.StencilPass; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int StencilWriteMask { get { return base.StencilWriteMask; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool TwoSidedStencilMode { get { return base.TwoSidedStencilMode; } set { throw new InvalidOperationException("The state object is readonly."); } } public ReadonlyDepthStencilStateStrategy(bool depthBufferEnable, bool depthBufferWriteEnable) : base() { base.DepthBufferEnable = depthBufferEnable; base.DepthBufferWriteEnable = depthBufferWriteEnable; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ReadonlyRasterizerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ReadonlyRasterizerStateStrategy : RasterizerStateStrategy { public override CullMode CullMode { get { return base.CullMode; } set { throw new InvalidOperationException("The state object is readonly."); } } public override float DepthBias { get { return base.DepthBias; } set { throw new InvalidOperationException("The state object is readonly."); } } public override FillMode FillMode { get { return base.FillMode; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool MultiSampleAntiAlias { get { return base.MultiSampleAntiAlias; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool ScissorTestEnable { get { return base.ScissorTestEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public override float SlopeScaleDepthBias { get { return base.SlopeScaleDepthBias; } set { throw new InvalidOperationException("The state object is readonly."); } } public override bool DepthClipEnable { get { return base.DepthClipEnable; } set { throw new InvalidOperationException("The state object is readonly."); } } public ReadonlyRasterizerStateStrategy(CullMode cullMode) : base() { base.CullMode = cullMode; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ReadonlySamplerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { internal class ReadonlySamplerStateStrategy : SamplerStateStrategy { public override TextureFilter Filter { get { return base.Filter; } set { throw new InvalidOperationException("The state object is readonly."); } } public override TextureAddressMode AddressU { get { return base.AddressU; } set { throw new InvalidOperationException("The state object is readonly."); } } public override TextureAddressMode AddressV { get { return base.AddressV; } set { throw new InvalidOperationException("The state object is readonly."); } } public override TextureAddressMode AddressW { get { return base.AddressW; } set { throw new InvalidOperationException("The state object is readonly."); } } public override Color BorderColor { get { return base.BorderColor; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int MaxAnisotropy { get { return base.MaxAnisotropy; } set { throw new InvalidOperationException("The state object is readonly."); } } public override int MaxMipLevel { get { return base.MaxMipLevel; } set { throw new InvalidOperationException("The state object is readonly."); } } public override float MipMapLevelOfDetailBias { get { return base.MipMapLevelOfDetailBias; } set { throw new InvalidOperationException("The state object is readonly."); } } public override CompareFunction ComparisonFunction { get { return base.ComparisonFunction; } set { throw new InvalidOperationException("The state object is readonly."); } } public override TextureFilterMode FilterMode { get { return base.FilterMode; } set { throw new InvalidOperationException("The state object is readonly."); } } public ReadonlySamplerStateStrategy(TextureFilter filter, TextureAddressMode addressMode) : base() { base.Filter = filter; base.AddressU = addressMode; base.AddressV = addressMode; base.AddressW = addressMode; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ResourceBlendStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ResourceBlendStateStrategy : BlendStateStrategy { public override bool IndependentBlendEnable { get { return base.IndependentBlendEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Color BlendFactor { get { return base.BlendFactor; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int MultiSampleMask { get { return base.MultiSampleMask; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override BlendFunction AlphaBlendFunction { get { return base.AlphaBlendFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Blend AlphaDestinationBlend { get { return base.AlphaDestinationBlend; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Blend AlphaSourceBlend { get { return base.AlphaSourceBlend; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override BlendFunction ColorBlendFunction { get { return base.ColorBlendFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Blend ColorDestinationBlend { get { return base.ColorDestinationBlend; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Blend ColorSourceBlend { get { return base.ColorSourceBlend; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override ColorWriteChannels ColorWriteChannels { get { return base.ColorWriteChannels; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override ColorWriteChannels ColorWriteChannels1 { get { return base.ColorWriteChannels1; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override ColorWriteChannels ColorWriteChannels2 { get { return base.ColorWriteChannels2; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override ColorWriteChannels ColorWriteChannels3 { get { return base.ColorWriteChannels3; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public ResourceBlendStateStrategy(GraphicsContextStrategy contextStrategy, IBlendStateStrategy source) : base(contextStrategy, source) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ResourceDepthStencilStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ResourceDepthStencilStateStrategy : DepthStencilStateStrategy { public override bool DepthBufferEnable { get { return base.DepthBufferEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool DepthBufferWriteEnable { get { return base.DepthBufferWriteEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation CounterClockwiseStencilDepthBufferFail { get { return base.CounterClockwiseStencilDepthBufferFail; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation CounterClockwiseStencilFail { get { return base.CounterClockwiseStencilFail; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override CompareFunction CounterClockwiseStencilFunction { get { return base.CounterClockwiseStencilFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation CounterClockwiseStencilPass { get { return base.CounterClockwiseStencilPass; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override CompareFunction DepthBufferFunction { get { return base.DepthBufferFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int ReferenceStencil { get { return base.ReferenceStencil; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation StencilDepthBufferFail { get { return base.StencilDepthBufferFail; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool StencilEnable { get { return base.StencilEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation StencilFail { get { return base.StencilFail; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override CompareFunction StencilFunction { get { return base.StencilFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int StencilMask { get { return base.StencilMask; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override StencilOperation StencilPass { get { return base.StencilPass; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int StencilWriteMask { get { return base.StencilWriteMask; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool TwoSidedStencilMode { get { return base.TwoSidedStencilMode; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public ResourceDepthStencilStateStrategy(GraphicsContextStrategy contextStrategy, IDepthStencilStateStrategy source) : base(contextStrategy, source) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ResourceRasterizerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ResourceRasterizerStateStrategy : RasterizerStateStrategy { public override CullMode CullMode { get { return base.CullMode; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override float DepthBias { get { return base.DepthBias; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override FillMode FillMode { get { return base.FillMode; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool MultiSampleAntiAlias { get { return base.MultiSampleAntiAlias; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool ScissorTestEnable { get { return base.ScissorTestEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override float SlopeScaleDepthBias { get { return base.SlopeScaleDepthBias; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override bool DepthClipEnable { get { return base.DepthClipEnable; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public ResourceRasterizerStateStrategy(GraphicsContextStrategy contextStrategy, IRasterizerStateStrategy source) : base(contextStrategy, source) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/ResourceSamplerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class ResourceSamplerStateStrategy : SamplerStateStrategy { public override TextureFilter Filter { get { return base.Filter; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override TextureAddressMode AddressU { get { return base.AddressU; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override TextureAddressMode AddressV { get { return base.AddressV; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override TextureAddressMode AddressW { get { return base.AddressW; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override Color BorderColor { get { return base.BorderColor; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int MaxAnisotropy { get { return base.MaxAnisotropy; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override int MaxMipLevel { get { return base.MaxMipLevel; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override float MipMapLevelOfDetailBias { get { return base.MipMapLevelOfDetailBias; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override CompareFunction ComparisonFunction { get { return base.ComparisonFunction; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public override TextureFilterMode FilterMode { get { return base.FilterMode; } set { throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device."); } } public ResourceSamplerStateStrategy(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy, source) { } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/SamplerState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class SamplerState : GraphicsResource , IPlatformSamplerState { internal ISamplerStateStrategy _strategy; public static readonly SamplerState AnisotropicClamp; public static readonly SamplerState AnisotropicWrap; public static readonly SamplerState LinearClamp; public static readonly SamplerState LinearWrap; public static readonly SamplerState PointClamp; public static readonly SamplerState PointWrap; static SamplerState() { AnisotropicClamp = new SamplerState("SamplerState.AnisotropicClamp", TextureFilter.Anisotropic, TextureAddressMode.Clamp); AnisotropicWrap = new SamplerState("SamplerState.AnisotropicWrap", TextureFilter.Anisotropic, TextureAddressMode.Wrap); LinearClamp = new SamplerState("SamplerState.LinearClamp", TextureFilter.Linear, TextureAddressMode.Clamp); LinearWrap = new SamplerState("SamplerState.LinearWrap", TextureFilter.Linear, TextureAddressMode.Wrap); PointClamp = new SamplerState("SamplerState.PointClamp", TextureFilter.Point, TextureAddressMode.Clamp); PointWrap = new SamplerState("SamplerState.PointWrap", TextureFilter.Point, TextureAddressMode.Wrap); } T IPlatformSamplerState.GetStrategy() { return (T)_strategy; } public TextureAddressMode AddressU { get { return _strategy.AddressU; } set { _strategy.AddressU = value; } } public TextureAddressMode AddressV { get { return _strategy.AddressV; } set { _strategy.AddressV = value; } } public TextureAddressMode AddressW { get { return _strategy.AddressW; } set { _strategy.AddressW = value; } } public Color BorderColor { get { return _strategy.BorderColor; } set { _strategy.BorderColor = value; } } public TextureFilter Filter { get { return _strategy.Filter; } set { _strategy.Filter = value; } } public int MaxAnisotropy { get { return _strategy.MaxAnisotropy; } set { _strategy.MaxAnisotropy = value; } } public int MaxMipLevel { get { return _strategy.MaxMipLevel; } set { _strategy.MaxMipLevel = value; } } public float MipMapLevelOfDetailBias { get { return _strategy.MipMapLevelOfDetailBias; } set { _strategy.MipMapLevelOfDetailBias = value; } } /// /// When using comparison sampling, also set to . /// public CompareFunction ComparisonFunction { get { return _strategy.ComparisonFunction; } set { _strategy.ComparisonFunction = value; } } public TextureFilterMode FilterMode { get { return _strategy.FilterMode; } set { _strategy.FilterMode = value; } } internal void BindToGraphicsDevice(GraphicsContextStrategy contextStrategy) { if (_strategy is ReadonlySamplerStateStrategy) throw new InvalidOperationException("You cannot bind a default state object."); GraphicsDeviceStrategy deviceStrategy = ((IPlatformGraphicsContext)contextStrategy.Context).DeviceStrategy; if (this.GraphicsDevice != deviceStrategy.Device) { if (this.GraphicsDevice == null) { System.Diagnostics.Debug.Assert(deviceStrategy.Device != null); _strategy = contextStrategy.CreateSamplerStateStrategy(_strategy); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } else throw new InvalidOperationException("This sampler state is already bound to a different graphics device."); } } public SamplerState() : base() { _strategy = new SamplerStateStrategy(); } private SamplerState(string name, TextureFilter filter, TextureAddressMode addressMode) : base() { Name = name; _strategy = new ReadonlySamplerStateStrategy(filter, addressMode); } internal SamplerState(SamplerState source) : base() { Name = source.Name; _strategy = new SamplerStateStrategy(source._strategy); } protected override void Dispose(bool disposing) { System.Diagnostics.Debug.Assert(!IsDisposed); if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/SamplerStateStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public class SamplerStateStrategy : GraphicsResourceStrategy , ISamplerStateStrategy { private TextureFilter _filter; private TextureAddressMode _addressU; private TextureAddressMode _addressV; private TextureAddressMode _addressW; private Color _borderColor; private int _maxAnisotropy; private int _maxMipLevel; private float _mipMapLevelOfDetailBias; private TextureFilterMode _filterMode; private CompareFunction _comparisonFunction; public virtual TextureFilter Filter { get { return _filter; } set { _filter = value; } } public virtual TextureAddressMode AddressU { get { return _addressU; } set { _addressU = value; } } public virtual TextureAddressMode AddressV { get { return _addressV; } set { _addressV = value; } } public virtual TextureAddressMode AddressW { get { return _addressW; } set { _addressW = value; } } public virtual Color BorderColor { get { return _borderColor; } set { _borderColor = value; } } public virtual int MaxAnisotropy { get { return _maxAnisotropy; } set { _maxAnisotropy = value; } } public virtual int MaxMipLevel { get { return _maxMipLevel; } set { _maxMipLevel = value; } } public virtual float MipMapLevelOfDetailBias { get { return _mipMapLevelOfDetailBias; } set { _mipMapLevelOfDetailBias = value; } } public virtual CompareFunction ComparisonFunction { get { return _comparisonFunction; } set { _comparisonFunction = value; } } public virtual TextureFilterMode FilterMode { get { return _filterMode; } set { _filterMode = value; } } public SamplerStateStrategy() : base() { _filter = TextureFilter.Linear; _addressU = TextureAddressMode.Wrap; _addressV = TextureAddressMode.Wrap; _addressW = TextureAddressMode.Wrap; _borderColor = Color.White; _maxAnisotropy = 4; _maxMipLevel = 0; _mipMapLevelOfDetailBias = 0.0f; _comparisonFunction = CompareFunction.Never; _filterMode = TextureFilterMode.Default; } internal SamplerStateStrategy(GraphicsContextStrategy contextStrategy, ISamplerStateStrategy source) : base(contextStrategy) { _filter = source.Filter; _addressU = source.AddressU; _addressV = source.AddressV; _addressW = source.AddressW; _borderColor = source.BorderColor; _maxAnisotropy = source.MaxAnisotropy; _maxMipLevel = source.MaxMipLevel; _mipMapLevelOfDetailBias = source.MipMapLevelOfDetailBias; _comparisonFunction = source.ComparisonFunction; _filterMode = source.FilterMode; } internal SamplerStateStrategy(ISamplerStateStrategy source) : base() { _filter = source.Filter; _addressU = source.AddressU; _addressV = source.AddressV; _addressW = source.AddressW; _borderColor = source.BorderColor; _maxAnisotropy = source.MaxAnisotropy; _maxMipLevel = source.MaxMipLevel; _mipMapLevelOfDetailBias = source.MipMapLevelOfDetailBias; _comparisonFunction = source.ComparisonFunction; _filterMode = source.FilterMode; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/StencilOperation.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines stencil buffer operations. /// public enum StencilOperation { /// /// Does not update the stencil buffer entry. /// Keep, /// /// Sets the stencil buffer entry to 0. /// Zero, /// /// Replaces the stencil buffer entry with a reference value. /// Replace, /// /// Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value. /// Increment, /// /// Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0. /// Decrement, /// /// Increments the stencil buffer entry, clamping to the maximum value. /// IncrementSaturation, /// /// Decrements the stencil buffer entry, clamping to 0. /// DecrementSaturation, /// /// Inverts the bits in the stencil buffer entry. /// Invert } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/TargetBlendState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class TargetBlendState { private readonly IBlendStateStrategy _parentStrategy; private BlendFunction _alphaBlendFunction; private Blend _alphaDestinationBlend; private Blend _alphaSourceBlend; private BlendFunction _colorBlendFunction; private Blend _colorDestinationBlend; private Blend _colorSourceBlend; private ColorWriteChannels _colorWriteChannels; internal TargetBlendState(IBlendStateStrategy parentStrategy) { _parentStrategy = parentStrategy; _alphaBlendFunction = BlendFunction.Add; _alphaDestinationBlend = Blend.Zero; _alphaSourceBlend = Blend.One; _colorBlendFunction = BlendFunction.Add; _colorDestinationBlend = Blend.Zero; _colorSourceBlend = Blend.One; _colorWriteChannels = ColorWriteChannels.All; } internal TargetBlendState(IBlendStateStrategy parentStrategy, Blend sourceBlend, Blend destinationBlend) : this(parentStrategy) { _colorSourceBlend = sourceBlend; _alphaSourceBlend = sourceBlend; _colorDestinationBlend = destinationBlend; _alphaDestinationBlend = destinationBlend; } internal TargetBlendState(TargetBlendState source, IBlendStateStrategy parentStrategy) { _parentStrategy = parentStrategy; this._alphaBlendFunction = source.AlphaBlendFunction; this._alphaDestinationBlend = source.AlphaDestinationBlend; this._alphaSourceBlend = source.AlphaSourceBlend; this._colorBlendFunction = source.ColorBlendFunction; this._colorDestinationBlend = source.ColorDestinationBlend; this._colorSourceBlend = source.ColorSourceBlend; this._colorWriteChannels = source.ColorWriteChannels; } public BlendFunction AlphaBlendFunction { get { return _alphaBlendFunction; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _alphaBlendFunction = value; } } public Blend AlphaDestinationBlend { get { return _alphaDestinationBlend; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _alphaDestinationBlend = value; } } public Blend AlphaSourceBlend { get { return _alphaSourceBlend; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _alphaSourceBlend = value; } } public BlendFunction ColorBlendFunction { get { return _colorBlendFunction; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _colorBlendFunction = value; } } public Blend ColorDestinationBlend { get { return _colorDestinationBlend; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _colorDestinationBlend = value; } } public Blend ColorSourceBlend { get { return _colorSourceBlend; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _colorSourceBlend = value; } } public ColorWriteChannels ColorWriteChannels { get { return _colorWriteChannels; } set { if (_parentStrategy is ReadonlyBlendStateStrategy) throw new InvalidOperationException("The state object is readonly."); if (_parentStrategy is ResourceBlendStateStrategy) throw new InvalidOperationException("You cannot modify the state after it has been bound to the graphics device!"); _colorWriteChannels = value; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/TextureAddressMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0. /// public enum TextureAddressMode { /// /// Texels outside range will form the tile at every integer junction. /// Wrap, /// /// Texels outside range will be set to color of 0.0 or 1.0 texel. /// Clamp, /// /// Same as but tiles will also flipped at every integer junction. /// Mirror, /// /// Texels outside range will be set to the border color. /// Border } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/TextureFilter.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines filtering types for texture sampler. /// public enum TextureFilter { /// /// Use linear filtering. /// Linear, /// /// Use point filtering. /// Point, /// /// Use anisotropic filtering. /// Anisotropic, /// /// Use linear filtering to shrink or expand, and point filtering between mipMap levels (mip). /// LinearMipPoint, /// /// Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipMap levels. /// PointMipLinear, /// /// Use linear filtering to shrink, point filtering to expand, and linear filtering between mipMap levels. /// MinLinearMagPointMipLinear, /// /// Use linear filtering to shrink, point filtering to expand, and point filtering between mipMap levels. /// MinLinearMagPointMipPoint, /// /// Use point filtering to shrink, linear filtering to expand, and linear filtering between mipMap levels. /// MinPointMagLinearMipLinear, /// /// Use point filtering to shrink, linear filtering to expand, and point filtering between mipMap levels. /// MinPointMagLinearMipPoint } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/States/TextureFilterMode.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Filtering modes for texture samplers. /// public enum TextureFilterMode { Default, Comparison } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/SurfaceFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines types of surface formats. /// public enum SurfaceFormat { /// /// Unsigned 32-bit ARGB pixel format for store 8 bits per channel. /// Color, /// /// Unsigned 16-bit BGR pixel format for store 5 bits for blue, 6 bits for green, and 5 bits for red. /// Bgr565, /// /// Unsigned 16-bit BGRA pixel format where 5 bits reserved for each color and last bit is reserved for alpha. /// Bgra5551, /// /// Unsigned 16-bit BGRA pixel format for store 4 bits per channel. /// Bgra4444, /// /// DXT1. Texture format with compression. Surface dimensions must be a multiple 4. /// Dxt1, /// /// DXT3. Texture format with compression. Surface dimensions must be a multiple 4. /// Dxt3, /// /// DXT5. Texture format with compression. Surface dimensions must be a multiple 4. /// Dxt5, /// /// Signed 16-bit bump-map format for store 8 bits for u and v data. /// NormalizedByte2, /// /// Signed 32-bit bump-map format for store 8 bits per channel. /// NormalizedByte4, /// /// Unsigned 32-bit RGBA pixel format for store 10 bits for each color and 2 bits for alpha. /// Rgba1010102, /// /// Unsigned 32-bit RG pixel format using 16 bits per channel. /// Rg32, /// /// Unsigned 64-bit RGBA pixel format using 16 bits per channel. /// Rgba64, /// /// Unsigned A 8-bit format for store 8 bits to alpha channel. /// Alpha8, /// /// IEEE 32-bit R float format for store 32 bits to red channel. /// Single, /// /// IEEE 64-bit RG float format for store 32 bits per channel. /// Vector2, /// /// IEEE 128-bit RGBA float format for store 32 bits per channel. /// Vector4, /// /// Float 16-bit R format for store 16 bits to red channel. /// HalfSingle, /// /// Float 32-bit RG format for store 16 bits per channel. /// HalfVector2, /// /// Float 64-bit ARGB format for store 16 bits per channel. /// HalfVector4, /// /// Float pixel format for high dynamic range data. /// HdrBlendable, #region Extensions /// /// For compatibility with WPF D3DImage. /// Bgr32 = 20, // B8G8R8X8 /// /// For compatibility with WPF D3DImage. /// Bgra32 = 21, // B8G8R8A8 /// /// Unsigned 32-bit RGBA sRGB pixel format that supports 8 bits per channel. /// ColorSRgb = 30, /// /// Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. 8 bits are unused. /// Bgr32SRgb = 31, /// /// Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. /// Bgra32SRgb = 32, /// /// DXT1. sRGB texture format with compression. Surface dimensions must be a multiple of 4. /// Dxt1SRgb = 33, /// /// DXT3. sRGB texture format with compression. Surface dimensions must be a multiple of 4. /// Dxt3SRgb = 34, /// /// DXT5. sRGB texture format with compression. Surface dimensions must be a multiple of 4. /// Dxt5SRgb = 35, /// /// PowerVR texture compression format (iOS and Android). /// RgbPvrtc2Bpp = 50, /// /// PowerVR texture compression format (iOS and Android). /// RgbPvrtc4Bpp = 51, /// /// PowerVR texture compression format (iOS and Android). /// RgbaPvrtc2Bpp = 52, /// /// PowerVR texture compression format (iOS and Android). /// RgbaPvrtc4Bpp = 53, /// /// Ericcson Texture Compression (Android) /// RgbEtc1 = 60, /// /// DXT1 version where 1-bit alpha is used. /// Dxt1a = 70, /// /// ATC/ATITC compression (Android) /// RgbaAtcExplicitAlpha = 80, /// /// ATC/ATITC compression (Android) /// RgbaAtcInterpolatedAlpha = 81, /// /// Etc2 RGB8 (Android/iOS withh OpenglES 3.0) /// Rgb8Etc2 = 90, /// /// Etc2 SRGB8 (Android/iOS withh OpenglES 3.0) /// Srgb8Etc2 = 91, /// /// Etc2 RGB8A1 (Android/iOS withh OpenglES 3.0) /// Rgb8A1Etc2 = 92, /// /// Etc2 SRGB8A1 (Android/iOS withh OpenglES 3.0) /// Srgb8A1Etc2 = 93, /// /// Etc2 RGBA8 EAC (Android/iOS withh OpenglES 3.0) /// Rgba8Etc2 = 94, /// /// Etc2 SRGB8A8 EAC (Android/iOS withh OpenglES 3.0) /// SRgb8A8Etc2 = 95, /// /// Unsigned 32-bit RGBA sRGBA pixel format that supports 8 bits per channel. /// ColorSRgba = 96, #endregion } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Texture.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.Threading; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public abstract class Texture : GraphicsResource , IPlatformTexture { protected ITextureStrategy _strategyTexture; private readonly int _sortingKey = Interlocked.Increment(ref _lastSortingKey); private static int _lastSortingKey; /// /// Gets a unique identifier of this texture for sorting purposes. /// /// /// For example, this value is used by when drawing with . /// The value is an implementation detail and may change between application launches or MonoGame versions. /// It is only guaranteed to stay consistent during application lifetime. /// internal int SortingKey { get { return _sortingKey; } } public SurfaceFormat Format { get { return _strategyTexture.Format; } } public int LevelCount { get { return _strategyTexture.LevelCount; } } protected Texture() : base() { } T IPlatformTexture.GetTextureStrategy() { return (T)_strategyTexture; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Texture2D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.IO; using Microsoft.Xna.Framework.Graphics.PackedVector; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class Texture2D : Texture { protected internal ITexture2DStrategy _strategyTexture2D; internal float TexelWidth { get; private set; } internal float TexelHeight { get; private set; } /// /// Gets the width of the texture in pixels. /// public int Width { get { return _strategyTexture2D.Width; } } /// /// Gets the height of the texture in pixels. /// public int Height { get { return _strategyTexture2D.Height; } } internal int ArraySize { get { return _strategyTexture2D.ArraySize; } } /// /// Gets the dimensions of the texture /// public Rectangle Bounds { get { return _strategyTexture2D.Bounds; } } /// /// Creates a new texture of the given size /// /// /// /// public Texture2D(GraphicsDevice graphicsDevice, int width, int height) : this(graphicsDevice, width, height, false, SurfaceFormat.Color, false, 1) { } /// /// Creates a new texture of a given size with a surface format and optional mipmaps /// /// /// /// /// /// public Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format) : this(graphicsDevice, width, height, mipMap, format, false, 1) { } /// /// Creates a new texture array of a given size with a surface format and optional mipmaps. /// Throws ArgumentException if the current GraphicsDevice can't work with texture arrays /// /// /// /// /// /// /// public Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, int arraySize) : this(graphicsDevice, width, height, mipMap, format, false, arraySize) { } private Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize) : this(graphicsDevice, width, height, mipMap, format, shared, arraySize, true) { _strategyTexture2D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTexture2DStrategy(width, height, mipMap, format, arraySize, shared); _strategyTexture = _strategyTexture2D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D); } protected Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat format, bool shared, int arraySize, bool isInternal) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (width > 2048 || height > 2048)) throw new NotSupportedException("Reach profile supports a maximum Texture2D size of 2048"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && (width > 4096 || height > 4096)) throw new NotSupportedException("HiDef profile supports a maximum Texture2D size of 4096"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_0 profile supports a maximum Texture2D size of 8192"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 8192 || height > 8192)) throw new NotSupportedException("FL10_1 profile supports a maximum Texture2D size of 8192"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_0 profile supports a maximum Texture2D size of 16384"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 16384 || height > 16384)) throw new NotSupportedException("FL11_1 profile supports a maximum Texture2D size of 16384"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && mipMap && (!MathHelper.IsPowerOfTwo(width) || !MathHelper.IsPowerOfTwo(height))) throw new NotSupportedException("Reach profile requires mipmapped Texture2D sizes to be powers of two"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && GraphicsExtensions.IsCompressedFormat(format) && (!MathHelper.IsPowerOfTwo(width) || !MathHelper.IsPowerOfTwo(height))) throw new NotSupportedException("Reach profile requires compressed Texture2D sizes to be powers of two"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (format == SurfaceFormat.Rgba1010102 || format == SurfaceFormat.Rg32 || format == SurfaceFormat.Rgba64 || format == SurfaceFormat.Alpha8 || format == SurfaceFormat.Single || format == SurfaceFormat.Vector2 || format == SurfaceFormat.Vector4 || format == SurfaceFormat.HalfSingle || format == SurfaceFormat.HalfVector2 || format == SurfaceFormat.HalfVector4 || format == SurfaceFormat.HdrBlendable)) throw new NotSupportedException("Reach profile does not support Texture2D format "+ format); if (width <= 0) throw new ArgumentOutOfRangeException("width","Texture width must be greater than zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height","Texture height must be greater than zero"); if (arraySize > 1 && !((IPlatformGraphicsDevice)graphicsDevice).Strategy.Capabilities.SupportsTextureArrays) throw new ArgumentException("Texture arrays are not supported on this graphics device", "arraySize"); this.TexelWidth = 1f / (float)width; this.TexelHeight = 1f / (float)height; } private Texture2D(GraphicsContext context, Stream stream) { _strategyTexture2D = ((IPlatformGraphicsContext)context).Strategy.CreateTexture2DStrategy(stream); _strategyTexture = _strategyTexture2D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture2D); this.TexelWidth = 1f / (float)this.Width; this.TexelHeight = 1f / (float)this.Height; } /// /// Gets the handle to a shared resource. /// /// /// The handle of the shared resource, or if the texture was not /// created as a shared resource. /// public IntPtr GetSharedHandle() { return _strategyTexture2D.GetSharedHandle(); } /// /// Changes the pixels of the texture /// Throws ArgumentNullException if data is null /// Throws ArgumentException if arraySlice is greater than 0, and the GraphicsDevice does not support texture arrays /// /// /// Layer of the texture to modify /// Index inside the texture array /// Area to modify /// New data for the texture /// Start position of data /// public void SetData(int level, int arraySlice, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(arraySlice, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1)); if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); _strategyTexture2D.SetData(level, arraySlice, checkedRect, data, startIndex, elementCount); } /// /// Changes the pixels of the texture /// /// /// Layer of the texture to modify /// Area to modify /// New data for the texture /// Start position of data /// public void SetData(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(0, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1)); bool rectHasValue = rect.HasValue; if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); if (rectHasValue) _strategyTexture2D.SetData(level, 0, checkedRect, data, startIndex, elementCount); else _strategyTexture2D.SetData(level, data, startIndex, elementCount); } /// /// Changes the texture's pixels /// /// /// New data for the texture /// Start position of data /// public void SetData(T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(0, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Width, Height); Rectangle checkedRect; ValidateParams(0, textureBounds, elementCount, ref textureBounds, out checkedRect); _strategyTexture2D.SetData(0, data, startIndex, elementCount); } /// /// Changes the texture's pixels /// /// New data for the texture /// public void SetData(T[] data) where T : struct { ValidateArrayBounds(0, data, 0, data.Length); Rectangle textureBounds = new Rectangle(0, 0,Width, Height); Rectangle checkedRect; ValidateParams(0, textureBounds, data.Length, ref textureBounds, out checkedRect); _strategyTexture2D.SetData(0, data, 0, data.Length); } /// /// Retrieves the contents of the texture /// Throws ArgumentException if data is null, data.length is too short or /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays /// /// /// Layer of the texture /// Index inside the texture array /// Area of the texture to retrieve /// Destination array for the data /// Starting index of data where to write the pixel data /// Number of pixels to read public void GetData(int level, int arraySlice, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(arraySlice, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1)); if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); _strategyTexture2D.GetData(level, arraySlice, checkedRect, data, startIndex, elementCount); } /// /// Retrieves the contents of the texture /// Throws ArgumentException if data is null, data.length is too short or /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays /// /// /// Layer of the texture /// Area of the texture /// Destination array for the texture data /// First position in data where to write the pixel data /// Number of pixels to read public void GetData(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(0, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Width >> level, 1), Math.Max(Height >> level, 1)); if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); _strategyTexture2D.GetData(level, 0, checkedRect, data, startIndex, elementCount); } /// /// Retrieves the contents of the texture /// Throws ArgumentException if data is null, data.length is too short or /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays /// /// /// Destination array for the texture data /// First position in data where to write the pixel data /// Number of pixels to read public void GetData(T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(0, data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Width, Height); Rectangle checkedRect; ValidateParams(0, textureBounds, elementCount, ref textureBounds, out checkedRect); _strategyTexture2D.GetData(0, 0, checkedRect, data, startIndex, elementCount); } /// /// Retrieves the contents of the texture /// Throws ArgumentException if data is null, data.length is too short or /// if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays /// /// /// Destination array for the texture data public void GetData(T[] data) where T : struct { ValidateArrayBounds(0, data, 0, data.Length); Rectangle textureBounds = new Rectangle(0, 0, Width, Height); Rectangle checkedRect; ValidateParams(0, textureBounds, data.Length, ref textureBounds, out checkedRect); _strategyTexture2D.GetData(0, 0, checkedRect, data, 0, data.Length); } private void ValidateArrayBounds(int arraySlice, T[] data, int startIndex, int elementCount) where T : struct { if (arraySlice > 0 && !((IPlatformGraphicsDevice)base.GraphicsDevice).Strategy.Capabilities.SupportsTextureArrays) throw new ArgumentException("Texture arrays are not supported on this graphics device", "arraySlice"); if (arraySlice < 0 || arraySlice >= ArraySize) throw new ArgumentException("arraySlice must be smaller than the ArraySize of this texture and larger than 0.", "arraySlice"); if (data == null) throw new ArgumentNullException("data"); if (startIndex < 0 || startIndex >= data.Length) throw new ArgumentException("startIndex must be at least zero and smaller than data.Length.", "startIndex"); if (data.Length < startIndex + elementCount) throw new ArgumentException("The data array is too small."); } private void ValidateRect(int level, ref Rectangle textureBounds, Rectangle rect) where T : struct { if (level < 0 || level >= LevelCount) throw new ArgumentException("level must be smaller than the number of levels in this texture.", "level"); if (!textureBounds.Contains(rect) || rect.Width <= 0 || rect.Height <= 0) throw new ArgumentException("Rectangle must be inside the texture bounds", "rect"); } private unsafe void ValidateParams(int level, Rectangle rect, int elementCount, ref Rectangle textureBounds, out Rectangle checkedRect) where T : struct { int tSize = sizeof(T); int fSize = Format.GetSize(); if (tSize > fSize || fSize % tSize != 0) throw new ArgumentException("Type T is of an invalid size for the format of this texture.", "T"); int dataByteSize; if (Format.IsCompressedFormat()) { dataByteSize = _strategyTexture2D.GetCompressedDataByteSize(fSize, rect, ref textureBounds, out checkedRect); } else { checkedRect = rect; dataByteSize = rect.Width * rect.Height * fSize; } if (elementCount * tSize != dataByteSize) throw new ArgumentException(string.Format("elementCount is not the right size, " + "elementCount * sizeof(T) is {0}, but data size is {1}.", elementCount * tSize, dataByteSize), "elementCount"); } /// /// Creates a from a stream, supported formats bmp, gif, jpg, png, tif and dds (only for simple textures). /// May work with other formats, but will not work with tga files. /// /// The graphics device to use to create the texture. /// The stream from which to read the image data. /// The created from the image stream. /// Note that different image decoders may generate slight differences between platforms, but perceptually /// the images should be identical. This call does not premultiply the image alpha, but areas of zero alpha will /// result in black color data. /// public static Texture2D FromStream(GraphicsDevice graphicsDevice, Stream stream) { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (stream == null) throw new ArgumentNullException("stream"); try { return new Texture2D(graphicsDevice.MainContext, stream); } catch(Exception e) { throw new InvalidOperationException("This image format is not supported", e); } } /// /// Converts the texture to a JPG image /// /// Destination for the image /// /// public void SaveAsJpeg(Stream stream, int width, int height) { _strategyTexture2D.SaveAsJpeg(stream, width, height); } /// /// Converts the texture to a PNG image /// /// Destination for the image /// /// public void SaveAsPng(Stream stream, int width, int height) { _strategyTexture2D.SaveAsPng(stream, width, height); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Texture3D.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class Texture3D : Texture { protected ITexture3DStrategy _strategyTexture3D; public int Width { get { return _strategyTexture3D.Width; } } public int Height { get { return _strategyTexture3D.Height; } } public int Depth { get { return _strategyTexture3D.Depth; } } public Texture3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat format) : this(graphicsDevice, width, height, depth, mipMap, format, true) { _strategyTexture3D = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTexture3DStrategy(width, height, depth, mipMap, format); _strategyTexture = _strategyTexture3D; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTexture3D); } protected Texture3D(GraphicsDevice graphicsDevice, int width, int height, int depth, bool mipMap, SurfaceFormat format, bool isInternal) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("Reach profile does not support Texture3D"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && (width > 256 || height > 256 || height > 256)) throw new NotSupportedException("HiDef profile supports a maximum Texture3D size of 256"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && (width > 2048 || height > 2048 || height > 2048)) throw new NotSupportedException("FL10_0 profile supports a maximum Texture3D size of 2048"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && (width > 2048 || height > 2048 || height > 2048)) throw new NotSupportedException("FL10_1 profile supports a maximum Texture3D size of 2048"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && (width > 2048 || height > 2048 || height > 2048)) throw new NotSupportedException("FL11_0 profile supports a maximum Texture3D size of 2048"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && (width > 2048 || height > 2048 || height > 2048)) throw new NotSupportedException("FL11_1 profile supports a maximum Texture3D size of 2048"); if (width <= 0) throw new ArgumentOutOfRangeException("width","Texture width must be greater than zero"); if (height <= 0) throw new ArgumentOutOfRangeException("height","Texture height must be greater than zero"); if (depth <= 0) throw new ArgumentOutOfRangeException("depth","Texture depth must be greater than zero"); } public void SetData(T[] data) where T : struct { ValidateArrayBounds(data, 0, data.Length); ValidateParams(0, 0, 0, this.Width, this.Height, 0, this.Depth, data.Length); _strategyTexture3D.SetData(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, 0, data.Length); } public void SetData(T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); ValidateParams(0, 0, 0, this.Width, this.Height, 0, this.Depth, elementCount); _strategyTexture3D.SetData(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, startIndex, elementCount); } public void SetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); ValidateParams(level, left, top, right, bottom, front, back, elementCount); _strategyTexture3D.SetData(level, left, top, right, bottom, front, back, data, startIndex, elementCount); } /// /// Gets a copy of 3D texture data, specifying a mipMap level, source box, start index, and number of elements. /// /// The type of the elements in the array. /// MipMap level. /// Position of the left side of the box on the x-axis. /// Position of the top of the box on the y-axis. /// Position of the right side of the box on the x-axis. /// Position of the bottom of the box on the y-axis. /// Position of the front of the box on the z-axis. /// Position of the back of the box on the z-axis. /// Array of data. /// Index of the first element to get. /// Number of elements to get. public void GetData(int level, int left, int top, int right, int bottom, int front, int back, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); ValidateParams(level, left, top, right, bottom, front, back, elementCount); _strategyTexture3D.GetData(level, left, top, right, bottom, front, back, data, startIndex, elementCount); } /// /// Gets a copy of 3D texture data, specifying a start index and number of elements. /// /// The type of the elements in the array. /// Array of data. /// Index of the first element to get. /// Number of elements to get. public void GetData(T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); ValidateParams(0, 0, 0, this.Width, this.Height, 0, this.Depth, elementCount); _strategyTexture3D.GetData(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, startIndex, elementCount); } /// /// Gets a copy of 3D texture data. /// /// The type of the elements in the array. /// Array of data. public void GetData(T[] data) where T : struct { ValidateArrayBounds(data, 0, data.Length); ValidateParams(0, 0, 0, this.Width, this.Height, 0, this.Depth, data.Length); _strategyTexture3D.GetData(0, 0, 0, this.Width, this.Height, 0, this.Depth, data, 0, data.Length); } private void ValidateArrayBounds(T[] data, int startIndex, int elementCount) where T : struct { if (data == null) throw new ArgumentNullException("data"); if (startIndex < 0 || startIndex >= data.Length) throw new ArgumentException("startIndex must be at least zero and smaller than data.Length.", "startIndex"); if (data.Length < startIndex + elementCount) throw new ArgumentException("The data array is too small."); } private unsafe void ValidateParams(int level, int left, int top, int right, int bottom, int front, int back, int elementCount) where T : struct { int tSize = sizeof(T); int fSize = Format.GetSize(); if (tSize > fSize || fSize % tSize != 0) throw new ArgumentException("Type T is of an invalid size for the format of this texture.", "T"); int texWidth = Math.Max(Width >> level, 1); int texHeight = Math.Max(Height >> level, 1); int texDepth = Math.Max(Depth >> level, 1); int width = right - left; int height = bottom - top; int depth = back - front; if (left < 0 || top < 0 || back < 0 || right > texWidth || bottom > texHeight || front > texDepth) throw new ArgumentException("Area must remain inside texture bounds"); // Disallow negative box size if (left >= right || top >= bottom || front >= back) throw new ArgumentException("Neither box size nor box position can be negative"); if (level < 0 || level >= LevelCount) throw new ArgumentException("level must be smaller than the number of levels in this texture."); int dataByteSize = width*height*depth*fSize; if (elementCount * tSize != dataByteSize) throw new ArgumentException(string.Format("elementCount is not the right size, " + "elementCount * sizeof(T) is {0}, but data size is {1}.", elementCount * tSize, dataByteSize), "elementCount"); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/TextureCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public sealed class TextureCollection : IPlatformTextureCollection { private TextureCollectionStrategy _strategy; TextureCollectionStrategy IPlatformTextureCollection.Strategy { get { return _strategy; } } internal TextureCollection(GraphicsContextStrategy contextStrategy, int capacity) { _strategy = contextStrategy.CreateTextureCollectionStrategy(capacity); } public Texture this[int index] { get { return _strategy[index]; } set { _strategy[index] = value; } } internal void Clear() { _strategy.Clear(); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/TextureCollectionStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformTextureCollection { TextureCollectionStrategy Strategy { get; } } public abstract class TextureCollectionStrategy { protected readonly GraphicsContextStrategy _contextStrategy; protected readonly Texture[] _textures; protected uint _dirty; protected TextureCollectionStrategy(GraphicsContextStrategy contextStrategy, int capacity) { // hard limit of 32 because of _dirty flags being 32bits. if (capacity > 32) throw new ArgumentOutOfRangeException("capacity"); _contextStrategy = contextStrategy; _textures = new Texture[capacity]; Dirty(); } public int Length { get { return _textures.Length; } } public Texture this[int index] { get { return _textures[index]; } set { if (_textures[index] != value) { uint mask = ((uint)1) << index; _textures[index] = value; _dirty |= mask; } } } public virtual void Clear() { for (int i = 0; i < _textures.Length; i++) { _textures[i] = null; } Dirty(); } public void Dirty(int index) { uint mask = ((uint)1) << index; _dirty |= mask; } /// /// Marks all texture slots as dirty. /// public void Dirty() { for (int i = 0; i < _textures.Length; i++) _dirty |= (((uint)1) << i); } public T ToConcrete() where T : TextureCollectionStrategy { return (T)this; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/TextureCube.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class TextureCube : Texture { protected ITextureCubeStrategy _strategyTextureCube; /// /// Gets the width and height of the cube map face in pixels. /// /// The width and height of a cube map face in pixels. public int Size { get { return _strategyTextureCube.Size; } } public TextureCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat format) : this(graphicsDevice, size, mipMap, format, true) { _strategyTextureCube = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateTextureCubeStrategy(size, mipMap, format); _strategyTexture = _strategyTextureCube; SetResourceStrategy((IGraphicsResourceStrategy)_strategyTextureCube); } protected TextureCube(GraphicsDevice graphicsDevice, int size, bool mipMap, SurfaceFormat format, bool isInternal) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && size > 512) throw new NotSupportedException("Reach profile supports a maximum TextureCube size of 512"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.HiDef && size > 4096) throw new NotSupportedException("HiDef profile supports a maximum TextureCube size of 4096"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_0 && size > 8192) throw new NotSupportedException("FL10_0 profile supports a maximum TextureCube size of 8192"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL10_1 && size > 8192) throw new NotSupportedException("FL10_1 profile supports a maximum TextureCube size of 8192"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_0 && size > 16384) throw new NotSupportedException("FL11_0 profile supports a maximum TextureCube size of 16384"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.FL11_1 && size > 16384) throw new NotSupportedException("FL11_1 profile supports a maximum TextureCube size of 16384"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && !MathHelper.IsPowerOfTwo(size)) throw new NotSupportedException("Reach profile requires TextureCube sizes to be powers of two"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && (format == SurfaceFormat.NormalizedByte2 || format == SurfaceFormat.NormalizedByte4 || format == SurfaceFormat.Rgba1010102 || format == SurfaceFormat.Rg32 || format == SurfaceFormat.Rgba64 || format == SurfaceFormat.Alpha8 || format == SurfaceFormat.Single || format == SurfaceFormat.Vector2 || format == SurfaceFormat.Vector4 || format == SurfaceFormat.HalfSingle || format == SurfaceFormat.HalfVector2 || format == SurfaceFormat.HalfVector4 || format == SurfaceFormat.HdrBlendable)) throw new NotSupportedException("Reach profile does not support Texture2D format "+ format); if (size <= 0) throw new ArgumentOutOfRangeException("size","Cube size must be greater than zero"); } /// /// Gets a copy of cube texture data specifying a cubemap face. /// /// /// The cube map face. /// The data. public void GetData(CubeMapFace cubeMapFace, T[] data) where T : struct { ValidateArrayBounds(data, 0, data.Length); Rectangle textureBounds = new Rectangle(0, 0, Size, Size); Rectangle checkedRect; ValidateParams(0, textureBounds, data.Length, ref textureBounds, out checkedRect); _strategyTextureCube.GetData(cubeMapFace, 0, checkedRect, data, 0, data.Length); } public void GetData(CubeMapFace cubeMapFace, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Size, Size); Rectangle checkedRect; ValidateParams(0, textureBounds, elementCount, ref textureBounds, out checkedRect); _strategyTextureCube.GetData(cubeMapFace, 0, checkedRect, data, startIndex, elementCount); } public void GetData(CubeMapFace cubeMapFace, int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Size >> level, 1), Math.Max(Size >> level, 1)); if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); _strategyTextureCube.GetData(cubeMapFace, level, checkedRect, data, startIndex, elementCount); } public void SetData(CubeMapFace cubeMapFace, T[] data) where T : struct { ValidateArrayBounds(data, 0, data.Length); Rectangle textureBounds = new Rectangle(0, 0, Size, Size); Rectangle checkedRect; ValidateParams(0, textureBounds, data.Length, ref textureBounds, out checkedRect); _strategyTextureCube.SetData(cubeMapFace, 0, checkedRect, data, 0, data.Length); } public void SetData(CubeMapFace cubeMapFace, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Size, Size); Rectangle checkedRect; ValidateParams(0, textureBounds, elementCount, ref textureBounds, out checkedRect); _strategyTextureCube.SetData(cubeMapFace, 0, checkedRect, data, startIndex, elementCount); } public void SetData(CubeMapFace cubeMapFace, int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { ValidateArrayBounds(data, startIndex, elementCount); Rectangle textureBounds = new Rectangle(0, 0, Math.Max(Size >> level, 1), Math.Max(Size >> level, 1)); if (rect == null) rect = textureBounds; ValidateRect(level, ref textureBounds, rect.Value); Rectangle checkedRect; ValidateParams(level, rect.Value, elementCount, ref textureBounds, out checkedRect); _strategyTextureCube.SetData(cubeMapFace, level, checkedRect, data, startIndex, elementCount); } private void ValidateArrayBounds(T[] data, int startIndex, int elementCount) where T : struct { if (data == null) throw new ArgumentNullException("data"); if (startIndex < 0 || startIndex >= data.Length) throw new ArgumentException("startIndex must be at least zero and smaller than data.Length.", "startIndex"); if (data.Length < startIndex + elementCount) throw new ArgumentException("The data array is too small."); } private void ValidateRect(int level, ref Rectangle textureBounds, Rectangle rect) where T : struct { if (level < 0 || level >= LevelCount) throw new ArgumentException("level must be smaller than the number of levels in this texture."); if (!textureBounds.Contains(rect) || rect.Width <= 0 || rect.Height <= 0) throw new ArgumentException("Rectangle must be inside the texture bounds", "rect"); } private unsafe void ValidateParams(int level, Rectangle rect, int elementCount, ref Rectangle textureBounds, out Rectangle checkedRect) where T : struct { int tSize = sizeof(T); int fSize = Format.GetSize(); if (tSize > fSize || fSize % tSize != 0) throw new ArgumentException("Type T is of an invalid size for the format of this texture.", "T"); int dataByteSize; if (Format.IsCompressedFormat()) { dataByteSize = _strategyTextureCube.GetCompressedDataByteSize(fSize, rect, ref textureBounds, out checkedRect); } else { checkedRect = rect; dataByteSize = rect.Width * rect.Height * fSize; } if (elementCount * tSize != dataByteSize) throw new ArgumentException(string.Format("elementCount is not the right size, " + "elementCount * sizeof(T) is {0}, but data size is {1}.", elementCount * tSize, dataByteSize), "elementCount"); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/ContentReaderExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework.Content { public static class ContentReaderExtensions { /// /// Reads the next Color from the current stream and advances the current position of the stream by 4 bytes. /// /// The ContentReader. /// The next Color read from the current stream. public static Color ReadColor(this ContentReader input) { Color result = new Color(); result.R = input.ReadByte(); result.G = input.ReadByte(); result.B = input.ReadByte(); result.A = input.ReadByte(); return result; } /// /// Gets the GraphicsDevice from the ContentManager.ServiceProvider. /// /// The . public static GraphicsDevice GetGraphicsDevice(this ContentReader contentReader) { IServiceProvider serviceProvider = contentReader.ContentManager.ServiceProvider; IGraphicsDeviceService graphicsDeviceService = serviceProvider.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; if (graphicsDeviceService == null) throw new InvalidOperationException("No Graphics Device Service"); return graphicsDeviceService.GraphicsDevice; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/DxtDecoder.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; namespace Microsoft.Xna.Platform.Graphics.Utilities { internal static class DxtDecoder { internal static byte[] DecompressDxt1(byte[] imageData, int width, int height) { using (MemoryStream imageStream = new MemoryStream(imageData)) return DecompressDxt1(imageStream, width, height); } internal static byte[] DecompressDxt1(Stream imageStream, int width, int height) { byte[] imageData = new byte[width * height * 4]; using (BinaryReader imageReader = new BinaryReader(imageStream)) { int blockCountX = (width + 3) / 4; int blockCountY = (height + 3) / 4; for (int y = 0; y < blockCountY; y++) { for (int x = 0; x < blockCountX; x++) { DecompressDxt1Block(imageReader, x, y, blockCountX, width, height, imageData); } } } return imageData; } private static void DecompressDxt1Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData) { ushort c0 = imageReader.ReadUInt16(); ushort c1 = imageReader.ReadUInt16(); byte r0, g0, b0; byte r1, g1, b1; ConvertRgb565ToRgb888(c0, out r0, out g0, out b0); ConvertRgb565ToRgb888(c1, out r1, out g1, out b1); uint lookupTable = imageReader.ReadUInt32(); for (int blockY = 0; blockY < 4; blockY++) { for (int blockX = 0; blockX < 4; blockX++) { byte r = 0, g = 0, b = 0, a = 255; uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03; if (c0 > c1) { switch (index) { case 0: r = r0; g = g0; b = b0; break; case 1: r = r1; g = g1; b = b1; break; case 2: r = (byte)((2 * r0 + r1) / 3); g = (byte)((2 * g0 + g1) / 3); b = (byte)((2 * b0 + b1) / 3); break; case 3: r = (byte)((r0 + 2 * r1) / 3); g = (byte)((g0 + 2 * g1) / 3); b = (byte)((b0 + 2 * b1) / 3); break; } } else { switch (index) { case 0: r = r0; g = g0; b = b0; break; case 1: r = r1; g = g1; b = b1; break; case 2: r = (byte)((r0 + r1) / 2); g = (byte)((g0 + g1) / 2); b = (byte)((b0 + b1) / 2); break; case 3: r = 0; g = 0; b = 0; a = 0; break; } } int px = (x << 2) + blockX; int py = (y << 2) + blockY; if ((px < width) && (py < height)) { int offset = ((py * width) + px) << 2; imageData[offset] = r; imageData[offset + 1] = g; imageData[offset + 2] = b; imageData[offset + 3] = a; } } } } internal static byte[] DecompressDxt3(byte[] imageData, int width, int height) { using (MemoryStream imageStream = new MemoryStream(imageData)) return DecompressDxt3(imageStream, width, height); } internal static byte[] DecompressDxt3(Stream imageStream, int width, int height) { byte[] imageData = new byte[width * height * 4]; using (BinaryReader imageReader = new BinaryReader(imageStream)) { int blockCountX = (width + 3) / 4; int blockCountY = (height + 3) / 4; for (int y = 0; y < blockCountY; y++) { for (int x = 0; x < blockCountX; x++) { DecompressDxt3Block(imageReader, x, y, blockCountX, width, height, imageData); } } } return imageData; } private static void DecompressDxt3Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData) { byte a0 = imageReader.ReadByte(); byte a1 = imageReader.ReadByte(); byte a2 = imageReader.ReadByte(); byte a3 = imageReader.ReadByte(); byte a4 = imageReader.ReadByte(); byte a5 = imageReader.ReadByte(); byte a6 = imageReader.ReadByte(); byte a7 = imageReader.ReadByte(); ushort c0 = imageReader.ReadUInt16(); ushort c1 = imageReader.ReadUInt16(); byte r0, g0, b0; byte r1, g1, b1; ConvertRgb565ToRgb888(c0, out r0, out g0, out b0); ConvertRgb565ToRgb888(c1, out r1, out g1, out b1); uint lookupTable = imageReader.ReadUInt32(); int alphaIndex = 0; for (int blockY = 0; blockY < 4; blockY++) { for (int blockX = 0; blockX < 4; blockX++) { byte r = 0, g = 0, b = 0, a = 0; uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03; switch (alphaIndex) { case 0: a = (byte)((a0 & 0x0F) | ((a0 & 0x0F) << 4)); break; case 1: a = (byte)((a0 & 0xF0) | ((a0 & 0xF0) >> 4)); break; case 2: a = (byte)((a1 & 0x0F) | ((a1 & 0x0F) << 4)); break; case 3: a = (byte)((a1 & 0xF0) | ((a1 & 0xF0) >> 4)); break; case 4: a = (byte)((a2 & 0x0F) | ((a2 & 0x0F) << 4)); break; case 5: a = (byte)((a2 & 0xF0) | ((a2 & 0xF0) >> 4)); break; case 6: a = (byte)((a3 & 0x0F) | ((a3 & 0x0F) << 4)); break; case 7: a = (byte)((a3 & 0xF0) | ((a3 & 0xF0) >> 4)); break; case 8: a = (byte)((a4 & 0x0F) | ((a4 & 0x0F) << 4)); break; case 9: a = (byte)((a4 & 0xF0) | ((a4 & 0xF0) >> 4)); break; case 10: a = (byte)((a5 & 0x0F) | ((a5 & 0x0F) << 4)); break; case 11: a = (byte)((a5 & 0xF0) | ((a5 & 0xF0) >> 4)); break; case 12: a = (byte)((a6 & 0x0F) | ((a6 & 0x0F) << 4)); break; case 13: a = (byte)((a6 & 0xF0) | ((a6 & 0xF0) >> 4)); break; case 14: a = (byte)((a7 & 0x0F) | ((a7 & 0x0F) << 4)); break; case 15: a = (byte)((a7 & 0xF0) | ((a7 & 0xF0) >> 4)); break; } ++alphaIndex; switch (index) { case 0: r = r0; g = g0; b = b0; break; case 1: r = r1; g = g1; b = b1; break; case 2: r = (byte)((2 * r0 + r1) / 3); g = (byte)((2 * g0 + g1) / 3); b = (byte)((2 * b0 + b1) / 3); break; case 3: r = (byte)((r0 + 2 * r1) / 3); g = (byte)((g0 + 2 * g1) / 3); b = (byte)((b0 + 2 * b1) / 3); break; } int px = (x << 2) + blockX; int py = (y << 2) + blockY; if ((px < width) && (py < height)) { int offset = ((py * width) + px) << 2; imageData[offset] = r; imageData[offset + 1] = g; imageData[offset + 2] = b; imageData[offset + 3] = a; } } } } internal static byte[] DecompressDxt5(byte[] imageData, int width, int height) { using (MemoryStream imageStream = new MemoryStream(imageData)) return DecompressDxt5(imageStream, width, height); } internal static byte[] DecompressDxt5(Stream imageStream, int width, int height) { byte[] imageData = new byte[width * height * 4]; using (BinaryReader imageReader = new BinaryReader(imageStream)) { int blockCountX = (width + 3) / 4; int blockCountY = (height + 3) / 4; for (int y = 0; y < blockCountY; y++) { for (int x = 0; x < blockCountX; x++) { DecompressDxt5Block(imageReader, x, y, blockCountX, width, height, imageData); } } } return imageData; } private static void DecompressDxt5Block(BinaryReader imageReader, int x, int y, int blockCountX, int width, int height, byte[] imageData) { byte alpha0 = imageReader.ReadByte(); byte alpha1 = imageReader.ReadByte(); ulong alphaMask = (ulong)imageReader.ReadByte(); alphaMask += (ulong)imageReader.ReadByte() << 8; alphaMask += (ulong)imageReader.ReadByte() << 16; alphaMask += (ulong)imageReader.ReadByte() << 24; alphaMask += (ulong)imageReader.ReadByte() << 32; alphaMask += (ulong)imageReader.ReadByte() << 40; ushort c0 = imageReader.ReadUInt16(); ushort c1 = imageReader.ReadUInt16(); byte r0, g0, b0; byte r1, g1, b1; ConvertRgb565ToRgb888(c0, out r0, out g0, out b0); ConvertRgb565ToRgb888(c1, out r1, out g1, out b1); uint lookupTable = imageReader.ReadUInt32(); for (int blockY = 0; blockY < 4; blockY++) { for (int blockX = 0; blockX < 4; blockX++) { byte r = 0, g = 0, b = 0, a = 255; uint index = (lookupTable >> 2 * (4 * blockY + blockX)) & 0x03; uint alphaIndex = (uint)((alphaMask >> 3 * (4 * blockY + blockX)) & 0x07); if (alphaIndex == 0) { a = alpha0; } else if (alphaIndex == 1) { a = alpha1; } else if (alpha0 > alpha1) { a = (byte)(((8 - alphaIndex) * alpha0 + (alphaIndex - 1) * alpha1) / 7); } else if (alphaIndex == 6) { a = 0; } else if (alphaIndex == 7) { a = 0xff; } else { a = (byte)(((6 - alphaIndex) * alpha0 + (alphaIndex - 1) * alpha1) / 5); } switch (index) { case 0: r = r0; g = g0; b = b0; break; case 1: r = r1; g = g1; b = b1; break; case 2: r = (byte)((2 * r0 + r1) / 3); g = (byte)((2 * g0 + g1) / 3); b = (byte)((2 * b0 + b1) / 3); break; case 3: r = (byte)((r0 + 2 * r1) / 3); g = (byte)((g0 + 2 * g1) / 3); b = (byte)((b0 + 2 * b1) / 3); break; } int px = (x << 2) + blockX; int py = (y << 2) + blockY; if ((px < width) && (py < height)) { int offset = ((py * width) + px) << 2; imageData[offset] = r; imageData[offset + 1] = g; imageData[offset + 2] = b; imageData[offset + 3] = a; } } } } private static void ConvertRgb565ToRgb888(ushort color, out byte r, out byte g, out byte b) { int temp; temp = (color >> 11) * 255 + 16; r = (byte)((temp / 32 + temp) / 32); temp = ((color & 0x07E0) >> 5) * 255 + 32; g = (byte)((temp / 64 + temp) / 64); temp = (color & 0x001F) * 255 + 16; b = (byte)((temp / 32 + temp) / 32); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/GraphicsExtensions.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics.Utilities { public static class GraphicsExtensions { public static int GetSize(this VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 4; case VertexElementFormat.Vector2: return 8; case VertexElementFormat.Vector3: return 12; case VertexElementFormat.Vector4: return 16; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 4; case VertexElementFormat.Short4: return 8; case VertexElementFormat.NormalizedShort2: return 4; case VertexElementFormat.NormalizedShort4: return 8; case VertexElementFormat.HalfVector2: return 4; case VertexElementFormat.HalfVector4: return 8; default: return 0; } } public static bool IsCompressedFormat(this SurfaceFormat format) { switch (format) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1a: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: case SurfaceFormat.RgbaPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbPvrtc4Bpp: return true; default: return false; } } public static int GetSize(this SurfaceFormat surfaceFormat) { switch (surfaceFormat) { case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: // One texel in DXT1, PVRTC (2bpp and 4bpp) and ETC1 is a minimum 4x4 block (8x4 for PVRTC 2bpp), which is 8 bytes return 8; case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: // One texel in DXT3 and DXT5 is a minimum 4x4 block, which is 16 bytes return 16; case SurfaceFormat.Alpha8: return 1; case SurfaceFormat.Bgr565: case SurfaceFormat.Bgra4444: case SurfaceFormat.Bgra5551: case SurfaceFormat.HalfSingle: case SurfaceFormat.NormalizedByte2: return 2; case SurfaceFormat.Color: case SurfaceFormat.ColorSRgb: case SurfaceFormat.ColorSRgba: case SurfaceFormat.Single: case SurfaceFormat.Rg32: case SurfaceFormat.HalfVector2: case SurfaceFormat.NormalizedByte4: case SurfaceFormat.Rgba1010102: case SurfaceFormat.Bgra32: case SurfaceFormat.Bgra32SRgb: case SurfaceFormat.Bgr32: case SurfaceFormat.Bgr32SRgb: return 4; case SurfaceFormat.HalfVector4: case SurfaceFormat.Rgba64: case SurfaceFormat.Vector2: return 8; case SurfaceFormat.Vector4: return 16; default: throw new ArgumentException(); } } public static void GetBlockSize(this SurfaceFormat surfaceFormat, out int width, out int height) { switch (surfaceFormat) { case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: width = 8; height = 4; break; case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt1SRgb: case SurfaceFormat.Dxt1a: case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt3SRgb: case SurfaceFormat.Dxt5: case SurfaceFormat.Dxt5SRgb: case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: case SurfaceFormat.RgbEtc1: case SurfaceFormat.Rgb8Etc2: case SurfaceFormat.Srgb8Etc2: case SurfaceFormat.Rgb8A1Etc2: case SurfaceFormat.Srgb8A1Etc2: case SurfaceFormat.Rgba8Etc2: case SurfaceFormat.SRgb8A8Etc2: case SurfaceFormat.RgbaAtcExplicitAlpha: case SurfaceFormat.RgbaAtcInterpolatedAlpha: width = 4; height = 4; break; default: width = 1; height = 1; break; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/HashHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using System.IO; namespace Microsoft.Xna.Platform.Graphics.Utilities { // TODO: precompute shader's hashKey in the processor. public static class HashHelper { /// /// Compute a hash from a byte array. /// /// /// Modified FNV Hash in C# /// http://stackoverflow.com/a/468084 /// public unsafe static int ComputeHash(params byte[] data) { unchecked { const int p = 16777619; int hash = (int)2166136261; int count = data.Length; fixed (byte* pData = data) { for (int i = 0; i < count; i++) { hash = (hash ^ pData[i]) * p; } } hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; return hash; } } /// /// Compute a hash from the content of a stream and restore the position. /// /// /// Modified FNV Hash in C# /// http://stackoverflow.com/a/468084 /// public unsafe static int ComputeHash(Stream stream) { System.Diagnostics.Debug.Assert(stream.CanSeek); unchecked { const int p = 16777619; int hash = (int)2166136261; long prevPosition = stream.Position; stream.Position = 0; int count; byte[] data = new byte[1024]; fixed (byte* pData = data) { while ((count = stream.Read(data, 0, data.Length)) != 0) { for (int i = 0; i < count; i++) hash = (hash ^ pData[i]) * p; } } // Restore stream position. stream.Position = prevPosition; hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; return hash; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/ReflectionHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Reflection; using System.Runtime.InteropServices; namespace Microsoft.Xna.Platform.Graphics.Utilities { public static class ReflectionHelpers { public static bool IsValueType(Type targetType) { #if WINRT return targetType.GetTypeInfo().IsValueType; #else return targetType.IsValueType; #endif } /// /// Returns the Assembly of a Type /// public static Assembly GetAssembly(Type targetType) { #if WINRT return targetType.GetTypeInfo().Assembly; #else return targetType.Assembly; #endif } /// /// Returns true if the given type can be assigned the given value /// public static bool IsAssignableFrom(Type type, object value) { return IsAssignableFromType(type, value.GetType()); } /// /// Returns true if the given type can be assigned a value with the given object type /// public static bool IsAssignableFromType(Type type, Type objectType) { #if WINRT return (type.GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo())); #else return (type.IsAssignableFrom(objectType)); #endif } public static int SizeOf() { return ManagedSizeOf.Value; } /// /// Generics handler for Marshal.SizeOf /// private static class ManagedSizeOf { static public int Value { get; private set; } static ManagedSizeOf() { #if NET40 || NET45 || NET40_OR_GREATER Value = Marshal.SizeOf(typeof(T)); #else Value = Marshal.SizeOf(); #endif } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Utilities/TextureHelpers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics.PackedVector; namespace Microsoft.Xna.Platform.Graphics.Utilities { public static class TextureHelpers { public static int GetClampedMultiSampleCount(SurfaceFormat surfaceFormat, int multiSampleCount, int maxMultiSampleCount) { if (multiSampleCount > 1) { // Round down MultiSampleCount to the nearest power of two // hack from http://stackoverflow.com/a/2681094 // Note: this will return an incorrect, but large value // for very large numbers. That doesn't matter because // the number will get clamped below anyway in this case. int msc = multiSampleCount; msc = msc | (msc >> 1); msc = msc | (msc >> 2); msc = msc | (msc >> 4); msc -= (msc >> 1); // and clamp it to what the device can handle msc = Math.Min(msc, maxMultiSampleCount); return msc; } else return 0; } public static int CalculateMipLevels(bool mipMap, int width, int height = 0, int depth = 0) { if (!mipMap) return 1; int levels = 1; int size = Math.Max(Math.Max(width, height), depth); while (size > 1) { size = size / 2; levels++; } return levels; } public static void GetSizeForLevel(int width, int height, int level, out int w, out int h) { w = width; h = height; while (level > 0) { --level; w /= 2; h /= 2; } if (w == 0) w = 1; if (h == 0) h = 1; } public static void GetSizeForLevel(int width, int height, int depth, int level, out int w, out int h, out int d) { w = width; h = height; d = depth; while (level > 0) { --level; w /= 2; h /= 2; d /= 2; } if (w == 0) w = 1; if (h == 0) h = 1; if (d == 0) d = 1; } public static Color[] GetColorData(ITexture2DStrategy texture2D) { int colorDataLength = texture2D.Width * texture2D.Height; Color[] colorData = new Color[colorDataLength]; switch (texture2D.Format) { case SurfaceFormat.Single: float[] floatData = new float[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, floatData, 0, floatData.Length); for (int i = 0; i < colorDataLength; i++) { float brightness = floatData[i]; // Export as a greyscale image. colorData[i] = new Color(brightness, brightness, brightness); } break; case SurfaceFormat.Color: texture2D.GetData(0, 0, texture2D.Bounds, colorData, 0, colorData.Length); break; case SurfaceFormat.Alpha8: Alpha8[] alpha8Data = new Alpha8[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, alpha8Data, 0, alpha8Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(alpha8Data[i].ToVector4()); break; case SurfaceFormat.Bgr565: Bgr565[] bgr565Data = new Bgr565[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, bgr565Data, 0, bgr565Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(bgr565Data[i].ToVector4()); break; case SurfaceFormat.Bgra4444: Bgra4444[] bgra4444Data = new Bgra4444[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, bgra4444Data, 0, bgra4444Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(bgra4444Data[i].ToVector4()); break; case SurfaceFormat.Bgra5551: Bgra5551[] bgra5551Data = new Bgra5551[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, bgra5551Data, 0, bgra5551Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(bgra5551Data[i].ToVector4()); break; case SurfaceFormat.HalfSingle: HalfSingle[] halfSingleData = new HalfSingle[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, halfSingleData, 0, halfSingleData.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(halfSingleData[i].ToVector4()); break; case SurfaceFormat.HalfVector2: HalfVector2[] halfVector2Data = new HalfVector2[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, halfVector2Data, 0, halfVector2Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(halfVector2Data[i].ToVector4()); break; case SurfaceFormat.HalfVector4: HalfVector4[] halfVector4Data = new HalfVector4[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, halfVector4Data, 0, halfVector4Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(halfVector4Data[i].ToVector4()); break; case SurfaceFormat.NormalizedByte2: NormalizedByte2[] normalizedByte2Data = new NormalizedByte2[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, normalizedByte2Data, 0, normalizedByte2Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(normalizedByte2Data[i].ToVector4()); break; case SurfaceFormat.NormalizedByte4: NormalizedByte4[] normalizedByte4Data = new NormalizedByte4[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, normalizedByte4Data, 0, normalizedByte4Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(normalizedByte4Data[i].ToVector4()); break; case SurfaceFormat.Rg32: Rg32[] rg32Data = new Rg32[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, rg32Data, 0, rg32Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(rg32Data[i].ToVector4()); break; case SurfaceFormat.Rgba64: Rgba64[] rgba64Data = new Rgba64[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, rgba64Data, 0, rgba64Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(rgba64Data[i].ToVector4()); break; case SurfaceFormat.Rgba1010102: Rgba1010102[] rgba1010102Data = new Rgba1010102[colorDataLength]; texture2D.GetData(0, 0, texture2D.Bounds, rgba1010102Data, 0, rgba1010102Data.Length); for (int i = 0; i < colorDataLength; i++) colorData[i] = new Color(rgba1010102Data[i].ToVector4()); break; default: throw new Exception("Texture surface format not supported"); } return colorData; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/BufferUsage.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// A usage hint for optimizing memory placement of graphics buffers. /// public enum BufferUsage { /// /// No special usage. /// None, /// /// The buffer will not be readable and will be optimized for rendering and writing. /// WriteOnly } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/DynamicIndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Graphics; namespace Microsoft.Xna.Framework.Graphics { public class DynamicIndexBuffer : IndexBuffer { public bool IsContentLost { get { return ((IDynamicIndexBufferStrategy)_strategy).IsContentLost; } } public event EventHandler ContentLost; public DynamicIndexBuffer(GraphicsDevice graphicsDevice, Type indexType, int indexCount, BufferUsage usage) : this(graphicsDevice, SizeForType(graphicsDevice, indexType), indexCount, usage) { } public DynamicIndexBuffer(GraphicsDevice graphicsDevice, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && indexElementSize == IndexElementSize.ThirtyTwoBits) throw new NotSupportedException("Reach profile does not support 32 bit indices"); _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateDynamicIndexBufferStrategy(indexElementSize, indexCount, usage); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct { base.SetDataInternal(offsetInBytes, data, startIndex, elementCount, options); } public void SetData(T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct { base.SetDataInternal(0, data, startIndex, elementCount, options); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/DynamicVertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class DynamicVertexBuffer : VertexBuffer { public bool IsContentLost { get { return ((IDynamicVertexBufferStrategy)_strategy).IsContentLost; } } public event EventHandler ContentLost; public DynamicVertexBuffer(GraphicsDevice graphicsDevice, Type type, int vertexCount, BufferUsage usage) : this(graphicsDevice, VertexDeclaration.FromType(type), vertexCount, usage) { } public DynamicVertexBuffer(GraphicsDevice graphicsDevice, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateDynamicVertexBufferStrategy(vertexDeclaration, vertexCount, usage); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options) where T : struct { base.SetDataInternal(offsetInBytes, data, startIndex, elementCount, vertexStride, options); } public unsafe void SetData(T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct { int elementSizeInBytes = sizeof(T); base.SetDataInternal(0, data, startIndex, elementCount, elementSizeInBytes, options); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IDynamicIndexBufferStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IDynamicIndexBufferStrategy { bool IsContentLost { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IDynamicVertexBufferStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IDynamicVertexBufferStrategy { bool IsContentLost { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IPlatformVertexDeclaration.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformVertexDeclaration { VertexElement[] InternalVertexElements { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IVertexType.cs ================================================ namespace Microsoft.Xna.Framework.Graphics { public interface IVertexType { VertexDeclaration VertexDeclaration { get; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IndexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class IndexBuffer : GraphicsResource , IPlatformIndexBuffer { internal IndexBufferStrategy _strategy; IndexBufferStrategy IPlatformIndexBuffer.Strategy { get { return _strategy; } } public BufferUsage BufferUsage { get { return _strategy.BufferUsage; } } public int IndexCount { get { return _strategy.IndexCount; } } public IndexElementSize IndexElementSize { get { return _strategy.IndexElementSize; } } public IndexBuffer(GraphicsDevice graphicsDevice, Type indexType, int indexCount, BufferUsage usage) : this(graphicsDevice, SizeForType(graphicsDevice, indexType), indexCount, usage) { } public IndexBuffer(GraphicsDevice graphicsDevice, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach && indexElementSize == IndexElementSize.ThirtyTwoBits) throw new NotSupportedException("Reach profile does not support 32 bit indices"); _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateIndexBufferStrategy(indexElementSize, indexCount, usage); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } protected IndexBuffer() : base() { } /// /// Gets the relevant IndexElementSize enum value for the given type. /// /// The graphics device. /// The type to use for the index buffer /// The IndexElementSize enum value that matches the type internal static IndexElementSize SizeForType(GraphicsDevice graphicsDevice, Type type) { switch (Marshal.SizeOf(type)) { case 2: return IndexElementSize.SixteenBits; case 4: if (graphicsDevice.GraphicsProfile == GraphicsProfile.Reach) throw new NotSupportedException("The profile does not support an elementSize of IndexElementSize.ThirtyTwoBits; use IndexElementSize.SixteenBits or a type that has a size of two bytes."); return IndexElementSize.ThirtyTwoBits; default: throw new ArgumentOutOfRangeException("type","Index buffers can only be created for types that are sixteen or thirty two bits in length"); } } public void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { if (data == null) throw new ArgumentNullException("data"); if (data.Length < (startIndex + elementCount)) throw new InvalidOperationException("The array specified in the data parameter is not the correct size for the amount of data requested."); if (BufferUsage == BufferUsage.WriteOnly) throw new NotSupportedException("This IndexBuffer was created with a usage type of BufferUsage.WriteOnly. Calling GetData on a resource that was created with BufferUsage.WriteOnly is not supported."); _strategy.GetData(offsetInBytes, data, startIndex, elementCount); } public void GetData(T[] data, int startIndex, int elementCount) where T : struct { this.GetData(0, data, startIndex, elementCount); } public void GetData(T[] data) where T : struct { this.GetData(0, data, 0, data.Length); } public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct { SetDataInternal(offsetInBytes, data, startIndex, elementCount, SetDataOptions.None); } public void SetData(T[] data, int startIndex, int elementCount) where T : struct { SetDataInternal(0, data, startIndex, elementCount, SetDataOptions.None); } public void SetData(T[] data) where T : struct { SetDataInternal(0, data, 0, data.Length, SetDataOptions.None); } protected void SetDataInternal(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct { if (data == null) throw new ArgumentNullException("data"); if (data.Length < (startIndex + elementCount)) throw new InvalidOperationException("The array specified in the data parameter is not the correct size for the amount of data requested."); _strategy.SetData(offsetInBytes, data, startIndex, elementCount, options); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IndexBufferStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformIndexBuffer { IndexBufferStrategy Strategy { get; } } public abstract class IndexBufferStrategy : GraphicsResourceStrategy { protected readonly GraphicsContextStrategy _contextStrategy; private IndexElementSize _indexElementSize; private int _indexCount; private BufferUsage _bufferUsage; private readonly int _elementSizeInBytes; public IndexElementSize IndexElementSize { get { return _indexElementSize; } } public int IndexCount { get { return _indexCount; } } public BufferUsage BufferUsage { get { return _bufferUsage; } } public int ElementSizeInBytes { get { return _elementSizeInBytes; } } public T ToConcrete() where T : IndexBufferStrategy { return (T)this; } protected IndexBufferStrategy(GraphicsContextStrategy contextStrategy, IndexElementSize indexElementSize, int indexCount, BufferUsage usage) : base(contextStrategy) { _contextStrategy = contextStrategy; this._indexElementSize = indexElementSize; this._indexCount = indexCount; this._bufferUsage = usage; switch (indexElementSize) { case IndexElementSize.SixteenBits: this._elementSizeInBytes = sizeof(Int16); break; case IndexElementSize.ThirtyTwoBits: this._elementSizeInBytes = sizeof(Int32); break; default: throw new InvalidOperationException(); } } public abstract void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, SetDataOptions options) where T : struct; public abstract void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct; protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/IndexElementSize.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines size for index in and . /// public enum IndexElementSize { /// /// 16-bit short/ushort value been used. /// SixteenBits, /// /// 32-bit int/uint value been used. /// ThirtyTwoBits } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/PrimitiveType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines how vertex data is ordered. /// public enum PrimitiveType { /// /// Renders the specified vertices as a sequence of isolated triangles. Each group of three vertices defines a separate triangle. Back-face culling is affected by the current winding-order render state. /// TriangleList, /// /// Renders the vertices as a triangle strip. The back-face culling flag is flipped automatically on even-numbered triangles. /// TriangleStrip, /// /// Renders the vertices as a list of isolated straight line segments; the count may be any positive integer. /// LineList, /// /// Renders the vertices as a single polyline; the count may be any positive integer. /// LineStrip, /// /// Renders the vertices as individual points; the count may be any positive integer. /// PointList } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexBuffer.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2023 Nick Kastellanos using System; using System.Diagnostics; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { public class VertexBuffer : GraphicsResource , IPlatformVertexBuffer { internal VertexBufferStrategy _strategy; VertexBufferStrategy IPlatformVertexBuffer.Strategy { get { return _strategy; } } public int VertexCount { get { return _strategy.VertexCount; } } public VertexDeclaration VertexDeclaration { get { return _strategy.VertexDeclaration; } } public BufferUsage BufferUsage { get { return _strategy.BufferUsage; } } public VertexBuffer(GraphicsDevice graphicsDevice, Type type, int vertexCount, BufferUsage usage) : this(graphicsDevice, VertexDeclaration.FromType(type), vertexCount, usage) { } public VertexBuffer(GraphicsDevice graphicsDevice, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base() { if (graphicsDevice == null) throw new ArgumentNullException("graphicsDevice"); _strategy = ((IPlatformGraphicsContext)graphicsDevice.CurrentContext).Strategy.CreateVertexBufferStrategy(vertexDeclaration, vertexCount, usage); SetResourceStrategy((IGraphicsResourceStrategy)_strategy); } protected VertexBuffer() : base() { } /// /// Get the vertex data froom this VertexBuffer. /// /// The struct you want to fill. /// The offset to the first element in the vertex buffer in bytes. /// An array of T's to be filled. /// The index to start filling the data array. /// The number of T's to get. /// The size of how a vertex buffer element should be interpreted. /// /// /// Note that this pulls data from VRAM into main memory and because of that is a very expensive operation. /// It is often a better idea to keep a copy of the data in main memory. /// /// /// ///

    Using this operation it is easy to get certain vertex elements from a VertexBuffer.

    ///

    /// For example to get the texture coordinates from a VertexBuffer of you can call /// GetData(4 * 3, data, elementCount, 20). 'data'should be an array of in this example. /// The offsetInBytes is the number of bytes taken up by the of the vertex. /// For vertexStride we pass the size of a . ///

    ///
    public unsafe void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride = 0) where T : struct { int elementSizeInBytes = sizeof(T); if (vertexStride == 0) vertexStride = elementSizeInBytes; int vertexByteSize = VertexCount * VertexDeclaration.VertexStride; if (vertexStride > vertexByteSize) throw new ArgumentOutOfRangeException("vertexStride", "Vertex stride can not be larger than the vertex buffer size."); if (data == null) throw new ArgumentNullException("data"); if (data.Length < (startIndex + elementCount)) throw new ArgumentOutOfRangeException("elementCount", "This parameter must be a valid index within the array."); if (BufferUsage == BufferUsage.WriteOnly) throw new NotSupportedException("Calling GetData on a resource that was created with BufferUsage.WriteOnly is not supported."); if (elementCount > 1 && elementCount * vertexStride > vertexByteSize) throw new InvalidOperationException("The array is not the correct size for the amount of data requested."); _strategy.GetData(offsetInBytes, data, startIndex, elementCount, vertexStride); } public void GetData(T[] data, int startIndex, int elementCount) where T : struct { this.GetData(0, data, startIndex, elementCount, 0); } public unsafe void GetData(T[] data) where T : struct { int elementSizeInByte = sizeof(T); this.GetData(0, data, 0, data.Length, elementSizeInByte); } /// /// Sets the vertex buffer data, specifying the index at which to start copying from the source data array, /// the number of elements to copy from the source data array, /// and how far apart elements from the source data array should be when they are copied into the vertex buffer. /// /// Type of elements in the data array. /// Offset in bytes from the beginning of the vertex buffer to the start of the copied data. /// Data array. /// Index at which to start copying from . /// Must be within the array bounds. /// Number of elements to copy from . /// The combination of and /// must be within the array bounds. /// Specifies how far apart, in bytes, elements from should be when /// they are copied into the vertex buffer. /// In almost all cases this should be sizeof(T), to create a tightly-packed vertex buffer. /// If you specify sizeof(T), elements from will be copied into the /// vertex buffer with no padding between each element. /// If you specify a value greater than sizeof(T), elements from will be copied /// into the vertex buffer with padding between each element. /// If you specify 0 for this parameter, it will be treated as if you had specified sizeof(T). /// With the exception of 0, you must specify a value greater than or equal to sizeof(T). /// /// If T is VertexPositionTexture, but you want to set only the position component of the vertex data, /// you would call this method as follows: /// /// Vector3[] positions = new Vector3[numVertices]; /// vertexBuffer.SetData(0, positions, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); /// /// /// Continuing from the previous example, if you want to set only the texture coordinate component of the vertex data, /// you would call this method as follows (note the use of : /// /// Vector2[] texCoords = new Vector2[numVertices]; /// vertexBuffer.SetData(12, texCoords, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); /// /// /// /// If you provide a byte[] in the parameter, then you should almost certainly /// set to 1, to avoid leaving any padding between the byte values /// when they are copied into the vertex buffer. /// public void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct { SetDataInternal(offsetInBytes, data, startIndex, elementCount, vertexStride, SetDataOptions.None); } /// /// Sets the vertex buffer data, specifying the index at which to start copying from the source data array, /// and the number of elements to copy from the source data array. This is the same as calling /// with offsetInBytes equal to 0, /// and vertexStride equal to sizeof(T). /// /// Type of elements in the data array. /// Data array. /// Index at which to start copying from . /// Must be within the array bounds. /// Number of elements to copy from . /// The combination of and /// must be within the array bounds. public unsafe void SetData(T[] data, int startIndex, int elementCount) where T : struct { int elementSizeInBytes = sizeof(T); SetDataInternal(0, data, startIndex, elementCount, elementSizeInBytes, SetDataOptions.None); } /// /// Sets the vertex buffer data. This is the same as calling /// with offsetInBytes and startIndex equal to 0, elementCount equal to data.Length, /// and vertexStride equal to sizeof(T). /// /// Type of elements in the data array. /// Data array. public unsafe void SetData(T[] data) where T : struct { int elementSizeInBytes = sizeof(T); SetDataInternal(0, data, 0, data.Length, elementSizeInBytes, SetDataOptions.None); } protected unsafe void SetDataInternal(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options) where T : struct { if (data == null) throw new ArgumentNullException("data"); int elementSizeInBytes = sizeof(T); int bufferSize = VertexCount * VertexDeclaration.VertexStride; if (vertexStride == 0) vertexStride = elementSizeInBytes; int vertexByteSize = VertexCount * VertexDeclaration.VertexStride; if (vertexStride > vertexByteSize) throw new ArgumentOutOfRangeException("vertexStride", "Vertex stride can not be larger than the vertex buffer size."); if (startIndex + elementCount > data.Length || elementCount <= 0) throw new ArgumentOutOfRangeException("data","The array specified in the data parameter is not the correct size for the amount of data requested."); if (elementCount > 1 && (elementCount * vertexStride > bufferSize)) throw new InvalidOperationException("The vertex stride is larger than the vertex buffer."); if (vertexStride < elementSizeInBytes) throw new ArgumentOutOfRangeException("The vertex stride must be greater than or equal to the size of the specified data (" + elementSizeInBytes + ")."); _strategy.SetData(offsetInBytes, data, startIndex, elementCount, vertexStride, options, bufferSize, elementSizeInBytes); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferBinding.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines how a vertex buffer is bound to the graphics device for rendering. /// public struct VertexBufferBinding { private readonly VertexBuffer _vertexBuffer; private readonly int _vertexOffset; private readonly int _instanceFrequency; /// /// Gets the vertex buffer. /// /// The vertex buffer. public VertexBuffer VertexBuffer { get { return _vertexBuffer; } } /// /// Gets the index of the first vertex in the vertex buffer to use. /// /// The index of the first vertex in the vertex buffer to use. public int VertexOffset { get { return _vertexOffset; } } /// /// Gets the number of instances to draw using the same per-instance data before advancing /// in the buffer by one element. /// /// /// The number of instances to draw using the same per-instance data before advancing in the /// buffer by one element. This value must be 0 for an element that contains per-vertex /// data and greater than 0 for per-instance data. /// public int InstanceFrequency { get { return _instanceFrequency; } } /// /// Creates an instance of . /// /// The vertex buffer to bind. public VertexBufferBinding(VertexBuffer vertexBuffer) : this(vertexBuffer, 0, 0) { } /// /// Creates an instance of . /// /// The vertex buffer to bind. /// /// The index of the first vertex in the vertex buffer to use. /// public VertexBufferBinding(VertexBuffer vertexBuffer, int vertexOffset) : this(vertexBuffer, vertexOffset, 0) { } /// /// Creates an instance of VertexBufferBinding. /// /// The vertex buffer to bind. /// /// The index of the first vertex in the vertex buffer to use. /// /// /// The number of instances to draw using the same per-instance data before advancing in the /// buffer by one element. This value must be 0 for an element that contains per-vertex data /// and greater than 0 for per-instance data. /// /// /// is . /// /// /// or is invalid. /// public VertexBufferBinding(VertexBuffer vertexBuffer, int vertexOffset, int instanceFrequency) { if (vertexBuffer == null) throw new ArgumentNullException("vertexBuffer"); if (vertexOffset < 0 || vertexOffset >= vertexBuffer.VertexCount) throw new ArgumentOutOfRangeException("vertexOffset"); if (instanceFrequency < 0) throw new ArgumentOutOfRangeException("instanceFrequency"); _vertexBuffer = vertexBuffer; _vertexOffset = vertexOffset; _instanceFrequency = instanceFrequency; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { /// /// Stores the vertex buffers to be bound to the input assembler stage. /// public sealed class VertexBufferCollection { VertexBufferBinding[] _bindings; /// /// Gets or sets the number of used input slots. /// /// The number of used input slots. public int Count { get; private set; } // VertexDeclarations and InstanceFrequencies are used by DX VertexInputLayoutKey and InputLayoutCache public VertexDeclaration[] VertexDeclarations { get; private set; } public int[] InstanceFrequencies { get; private set; } /// /// Initializes a new instance of the class. /// /// The maximum number of vertex buffer slots. internal VertexBufferCollection(int maxVertexBufferSlots) { Count = 0; _bindings = new VertexBufferBinding[maxVertexBufferSlots]; VertexDeclarations = new VertexDeclaration[maxVertexBufferSlots]; InstanceFrequencies = new int[maxVertexBufferSlots]; } /// /// Clears the vertex buffer slots. /// /// /// if the input layout was changed; otherwise, /// . /// public bool Clear() { if (Count == 0) return false; Array.Clear(_bindings, 0, Count); Array.Clear(VertexDeclarations, 0, Count); Array.Clear(InstanceFrequencies, 0, Count); Count = 0; return true; } /// /// Binds the specified vertex buffer to the first input slot. /// /// The vertex buffer. /// /// The offset (in vertices) from the beginning of the vertex buffer to the first vertex to /// use. /// /// /// if the input layout was changed; otherwise, /// . /// public bool Set(VertexBuffer vertexBuffer, int vertexOffset) { Debug.Assert(vertexBuffer != null); Debug.Assert(0 <= vertexOffset && vertexOffset < vertexBuffer.VertexCount); if (Count == 1 && _bindings[0].VertexBuffer == vertexBuffer && _bindings[0].VertexOffset == vertexOffset && _bindings[0].InstanceFrequency == 0) { return false; } _bindings[0] = new VertexBufferBinding(vertexBuffer, vertexOffset, 0); VertexDeclarations[0] = vertexBuffer.VertexDeclaration; InstanceFrequencies[0] = 0; if (Count > 1) { Array.Clear(_bindings, 1, Count - 1); Array.Clear(VertexDeclarations, 1, Count - 1); Array.Clear(InstanceFrequencies, 1, Count - 1); } Count = 1; return true; } /// /// Binds the the specified vertex buffers to the input slots. /// /// The vertex buffer bindings. /// /// if the input layout was changed; otherwise, /// . /// public bool Set(params VertexBufferBinding[] vertexBufferBindings) { Debug.Assert(vertexBufferBindings != null); Debug.Assert(vertexBufferBindings.Length > 0); Debug.Assert(vertexBufferBindings.Length <= _bindings.Length); bool isDirty = false; for (int i = 0; i < vertexBufferBindings.Length; i++) { Debug.Assert(vertexBufferBindings[i].VertexBuffer != null); if (_bindings[i].VertexBuffer != vertexBufferBindings[i].VertexBuffer || _bindings[i].VertexOffset != vertexBufferBindings[i].VertexOffset || _bindings[i].InstanceFrequency != vertexBufferBindings[i].InstanceFrequency) { _bindings[i] = vertexBufferBindings[i]; VertexDeclarations[i] = vertexBufferBindings[i].VertexBuffer.VertexDeclaration; InstanceFrequencies[i] = vertexBufferBindings[i].InstanceFrequency; isDirty = true; } } if (Count > vertexBufferBindings.Length) { int startIndex = vertexBufferBindings.Length; int length = Count - startIndex; Array.Clear(_bindings, startIndex, length); Array.Clear(VertexDeclarations, startIndex, length); Array.Clear(InstanceFrequencies, startIndex, length); isDirty = true; } Count = vertexBufferBindings.Length; return isDirty; } /// /// Gets vertex buffer bound to the specified input slots. /// /// The vertex buffer binding. public VertexBufferBinding Get(int slot) { Debug.Assert(0 <= slot && slot < Count); return _bindings[slot]; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexBufferStrategy.cs ================================================ // Copyright (C)2023 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Platform.Graphics { public interface IPlatformVertexBuffer { VertexBufferStrategy Strategy { get; } } public abstract class VertexBufferStrategy : GraphicsResourceStrategy { protected readonly GraphicsContextStrategy _contextStrategy; private VertexDeclaration _vertexDeclaration; private int _vertexCount; private BufferUsage _bufferUsage; public VertexDeclaration VertexDeclaration { get { return _vertexDeclaration; } } public int VertexCount { get { return _vertexCount; } } public BufferUsage BufferUsage { get { return _bufferUsage; } } public T ToConcrete() where T : VertexBufferStrategy { return (T)this; } protected VertexBufferStrategy(GraphicsContextStrategy contextStrategy, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage) : base(contextStrategy) { this._contextStrategy = contextStrategy; this._vertexDeclaration = vertexDeclaration; this._vertexCount = vertexCount; this._bufferUsage = usage; } public abstract void SetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options, int bufferSize, int elementSizeInBytes) where T : struct; public abstract void GetData(int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride) where T : struct; protected override void Dispose(bool disposing) { if (disposing) { } base.Dispose(disposing); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexDeclaration.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Platform.Graphics; using Microsoft.Xna.Platform.Graphics.Utilities; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines per-vertex data of a vertex buffer. /// /// /// implements and can be used as /// a key in a dictionary. Two vertex declarations are considered equal if the vertices are /// structurally equivalent, i.e. the vertex elements and the vertex stride are identical. (The /// properties and are /// ignored in and !) /// public class VertexDeclaration : IEquatable, IDisposable , IPlatformVertexDeclaration { #region ----- Data shared between structurally identical vertex declarations ----- private sealed class VertexDeclarationData : IEquatable { private readonly int _hashCode; public readonly int VertexStride; public VertexElement[] Elements; public VertexDeclarationData(int vertexStride, VertexElement[] elements) { this.VertexStride = vertexStride; this.Elements = elements; // Pre-calculate hash code for fast comparisons and lookup in dictionaries. _hashCode = VertexDeclarationData.CalculateHashCode(this.VertexStride, this.Elements); } private static int CalculateHashCode(int vertexStride, VertexElement[] elements) { int hashCode; unchecked { hashCode = elements[0].GetHashCode(); for (int i = 1; i < elements.Length; i++) hashCode = (hashCode * 397) ^ elements[i].GetHashCode(); hashCode = (hashCode * 397) ^ elements.Length; hashCode = (hashCode * 397) ^ vertexStride; return hashCode; } } public override bool Equals(object obj) { return Equals(obj as VertexDeclarationData); } public bool Equals(VertexDeclarationData other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; if (_hashCode != other._hashCode || VertexStride != other.VertexStride || Elements.Length != other.Elements.Length) { return false; } for (int i = 0; i < Elements.Length; i++) { if (!Elements[i].Equals(other.Elements[i])) return false; } return true; } public override int GetHashCode() { return _hashCode; } } #endregion #region ----- VertexDeclaration Cache ----- private static readonly Dictionary _vertexDeclarationDataCache = new Dictionary(); internal static VertexDeclaration GetOrCreate(int vertexStride, VertexElement[] elements) { lock (_vertexDeclarationDataCache) { VertexDeclarationData data = new VertexDeclarationData(vertexStride, elements); VertexDeclaration vertexDeclaration; if (_vertexDeclarationDataCache.TryGetValue(data, out vertexDeclaration)) return vertexDeclaration; // Data.Elements have already been set in the Data ctor. However, entries // in the vertex declaration cache must be immutable. Therefore, we create a // copy of the array, which the user cannot access. data.Elements = (VertexElement[])elements.Clone(); vertexDeclaration = new VertexDeclaration(data); _vertexDeclarationDataCache[data] = vertexDeclaration; return vertexDeclaration; } } private VertexDeclaration(VertexDeclarationData data) { _data = data; } #endregion private readonly VertexDeclarationData _data; /// /// Gets the internal vertex elements array. /// /// The internal vertex elements array. VertexElement[] IPlatformVertexDeclaration.InternalVertexElements { get { return _data.Elements; } } /// /// Initializes a new instance of the class. /// /// The vertex elements. /// /// is or empty. /// public VertexDeclaration(params VertexElement[] elements) : this(CalculateVertexStride(elements), elements) { } /// /// Initializes a new instance of the class. /// /// The size of a vertex (including padding) in bytes. /// The vertex elements. /// /// is or empty. /// public VertexDeclaration(int vertexStride, params VertexElement[] elements) { if ((elements == null) || (elements.Length == 0)) throw new ArgumentNullException("elements", "Elements cannot be empty"); lock (_vertexDeclarationDataCache) { VertexDeclarationData data = new VertexDeclarationData(vertexStride, elements); VertexDeclaration vertexDeclaration; if (_vertexDeclarationDataCache.TryGetValue(data, out vertexDeclaration)) { // Reuse existing data. _data = vertexDeclaration._data; } else { // Cache new vertex declaration. data.Elements = (VertexElement[])elements.Clone(); _data = data; _vertexDeclarationDataCache[data] = this; } } } private static int CalculateVertexStride(VertexElement[] elements) { int max = 0; for (int i = 0; i < elements.Length; i++) { int start = elements[i].Offset + elements[i].VertexElementFormat.GetSize(); if (max < start) max = start; } return max; } /// /// Returns the VertexDeclaration for Type. /// /// A value type which implements the IVertexType interface. /// The VertexDeclaration. /// /// Prefer to use VertexDeclarationCache when the declaration lookup /// can be performed with a templated type. /// internal static VertexDeclaration FromType(Type vertexType) { if (vertexType == null) throw new ArgumentNullException("vertexType", "Cannot be null"); if (!ReflectionHelpers.IsValueType(vertexType)) { throw new ArgumentException("Must be value type", "vertexType"); } IVertexType type = Activator.CreateInstance(vertexType) as IVertexType; if (type == null) { throw new ArgumentException("vertexData does not inherit IVertexType"); } VertexDeclaration vertexDeclaration = type.VertexDeclaration; if (vertexDeclaration == null) { throw new Exception("VertexDeclaration cannot be null"); } return vertexDeclaration; } /// /// Gets a copy of the vertex elements. /// /// A copy of the vertex elements. public VertexElement[] GetVertexElements() { return (VertexElement[])_data.Elements.Clone(); } /// /// Gets the size of a vertex (including padding) in bytes. /// /// The size of a vertex (including padding) in bytes. public int VertexStride { get { return _data.VertexStride; } } /// /// Determines whether the specified is equal to this instance. /// /// The object to compare with the current object. /// /// if the specified is equal to this instance; /// otherwise, . /// public override bool Equals(object obj) { return Equals(obj as VertexDeclaration); } /// /// Determines whether the specified is equal to this /// instance. /// /// The object to compare with the current object. /// /// if the specified is equal to this /// instance; otherwise, . /// public bool Equals(VertexDeclaration other) { return other != null && ReferenceEquals(_data, other._data); } /// /// Returns a hash code for this instance. /// /// /// A hash code for this instance, suitable for use in hashing algorithms and data /// structures like a hash table. /// public override int GetHashCode() { return _data.GetHashCode(); } /// /// Compares two instances to determine whether they are the /// same. /// /// The first instance. /// The second instance. /// /// if the and are /// the same; otherwise, . /// public static bool operator ==(VertexDeclaration left, VertexDeclaration right) { return Equals(left, right); } /// /// Compares two instances to determine whether they are /// different. /// /// The first instance. /// The second instance. /// /// if the and are /// the different; otherwise, . /// public static bool operator !=(VertexDeclaration left, VertexDeclaration right) { return !Equals(left, right); } #region IDisposable Implementation ~VertexDeclaration() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { } } #endregion IDisposable Implementation } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexDeclarationCache.cs ================================================ namespace Microsoft.Xna.Framework.Graphics { /// /// Helper class which ensures we only lookup a vertex /// declaration for a particular type once. /// /// A vertex structure which implements IVertexType. internal class VertexDeclarationCache where T : struct, IVertexType { static private VertexDeclaration _cached; static public VertexDeclaration VertexDeclaration { get { if (_cached == null) _cached = VertexDeclaration.FromType(typeof(T)); return _cached; } } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexElement.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Graphics { /// /// Defines a single element in a vertex. /// public struct VertexElement : IEquatable { private int _offset; private VertexElementFormat _format; private VertexElementUsage _usage; private int _usageIndex; /// /// Gets or sets the offset in bytes from the beginning of the stream to the vertex element. /// /// The offset in bytes. public int Offset { get { return _offset; } set { _offset = value; } } /// /// Gets or sets the data format. /// /// The data format. public VertexElementFormat VertexElementFormat { get { return _format; } set { _format = value; } } /// /// Gets or sets the HLSL semantic of the element in the vertex shader input. /// /// The HLSL semantic of the element in the vertex shader input. public VertexElementUsage VertexElementUsage { get { return _usage; } set { _usage = value; } } /// /// Gets or sets the semantic index. /// /// /// The semantic index, which is required if the semantic is used for more than one vertex /// element. /// /// /// Usage indices in a vertex declaration usually start with 0. When multiple vertex buffers /// are bound to the input assembler stage (see ), /// MonoGame internally adjusts the usage indices based on the order in which the vertex /// buffers are bound. /// public int UsageIndex { get { return _usageIndex; } set { _usageIndex = value; } } /// /// Initializes a new instance of the struct. /// /// The offset in bytes from the beginning of the stream to the vertex element. /// The element format. /// The HLSL semantic of the element in the vertex shader input-signature. /// The semantic index, which is required if the semantic is used for more than one vertex element. public VertexElement(int offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, int usageIndex) { _offset = offset; _format = elementFormat; _usageIndex = usageIndex; _usage = elementUsage; } /// /// Returns a hash code for this instance. /// /// /// A hash code for this instance, suitable for use in hashing algorithms and data /// structures like a hash table. /// public override int GetHashCode() { // ReSharper disable NonReadonlyMemberInGetHashCode // Optimized hash: // - DirectX 11 has max 32 registers. A register is max 16 byte. _offset is in the range // 0 to 512 (exclusive). --> _offset needs 9 bit. // - VertexElementFormat has 12 values. --> _format needs 4 bit. // - VertexElementUsage has 13 values. --> _usage needs 4 bit. // - DirectX 11 has max 32 registers. --> _usageIndex needs 6 bit. // (Note: If these assumptions are correct we get a unique hash code. If these // assumptions are not correct, we still get a useful hash code because we use XOR.) int hashCode = _offset; hashCode ^= (int)_format << 9; hashCode ^= (int)_usage << (9 + 4); hashCode ^= _usageIndex << (9 + 4 + 4); return hashCode; // ReSharper restore NonReadonlyMemberInGetHashCode } /// /// Returns a that represents this instance. /// /// A that represents this instance. public override string ToString() { return "{Offset:" + _offset + " Format:" + _format + " Usage:" + _usage + " UsageIndex: " + _usageIndex + "}"; } /// /// Determines whether the specified is equal to this instance. /// /// The object to compare with the current object. /// /// if the specified is equal to this instance; /// otherwise, . /// public override bool Equals(object obj) { return obj is VertexElement && Equals((VertexElement)obj); } /// /// Determines whether the specified is equal to this /// instance. /// /// The object to compare with the current object. /// /// if the specified is equal to this /// instance; otherwise, . /// public bool Equals(VertexElement other) { return _offset == other._offset && _format == other._format && _usage == other._usage && _usageIndex == other._usageIndex; } /// /// Compares two instances to determine whether they are the /// same. /// /// The first instance. /// The second instance. /// /// if the and are /// the same; otherwise, . /// public static bool operator ==(VertexElement left, VertexElement right) { return left.Equals(right); } /// /// Compares two instances to determine whether they are /// different. /// /// The first instance. /// The second instance. /// /// if the and are /// the different; otherwise, . /// public static bool operator !=(VertexElement left, VertexElement right) { return !left.Equals(right); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexElementFormat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines vertex element formats. /// public enum VertexElementFormat { /// /// Single 32-bit floating point number. /// Single, /// /// Two component 32-bit floating point number. /// Vector2, /// /// Three component 32-bit floating point number. /// Vector3, /// /// Four component 32-bit floating point number. /// Vector4, /// /// Four component, packed unsigned byte, mapped to 0 to 1 range. /// Color, /// /// Four component unsigned byte. /// Byte4, /// /// Two component signed 16-bit integer. /// Short2, /// /// Four component signed 16-bit integer. /// Short4, /// /// Normalized, two component signed 16-bit integer. /// NormalizedShort2, /// /// Normalized, four component signed 16-bit integer. /// NormalizedShort4, /// /// Two component 16-bit floating point number. /// HalfVector2, /// /// Four component 16-bit floating point number. /// HalfVector4 } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexElementUsage.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Graphics { /// /// Defines usage for vertex elements. /// public enum VertexElementUsage { /// /// Position data. /// Position, /// /// Color data. /// Color, /// /// Texture coordinate data or can be used for user-defined data. /// TextureCoordinate, /// /// Normal data. /// Normal, /// /// Binormal data. /// Binormal, /// /// Tangent data. /// Tangent, /// /// Blending indices data. /// BlendIndices, /// /// Blending weight data. /// BlendWeight, /// /// Depth data. /// Depth, /// /// Fog data. /// Fog, /// /// Point size data. Usable for drawing point sprites. /// PointSize, /// /// Sampler data for specifies the displacement value to look up. /// Sample, /// /// Single, positive float value, specifies a tessellation factor used in the tessellation unit to control the rate of tessellation. /// TessellateFactor } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPosition.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Runtime.Serialization; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [DataContract] [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPosition : IVertexType { [DataMember] public Vector3 Position; public static readonly VertexDeclaration VertexDeclaration; public VertexPosition(Vector3 position) { Position = position; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { return Position.GetHashCode(); } public override string ToString() { return "{{Position:" + Position + "}}"; } public static bool operator == (VertexPosition left, VertexPosition right) { return left.Position == right.Position; } public static bool operator != (VertexPosition left, VertexPosition right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != GetType()) { return false; } return this == (VertexPosition) obj; } static VertexPosition() { VertexElement[] elements = { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0) }; VertexDeclaration declaration = new VertexDeclaration(elements); VertexDeclaration = declaration; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColor.cs ================================================ using System; using System.Runtime.Serialization; using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [DataContract] [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPositionColor : IVertexType { [DataMember] public Vector3 Position; [DataMember] public Color Color; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionColor(Vector3 position, Color color) { this.Position = position; Color = color; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { return (Position.GetHashCode() * 397) ^ Color.GetHashCode(); } } public override string ToString() { return "{{Position:" + this.Position + " Color:" + this.Color + "}}"; } public static bool operator == (VertexPositionColor left, VertexPositionColor right) { return ((left.Color == right.Color) && (left.Position == right.Position)); } public static bool operator != (VertexPositionColor left, VertexPositionColor right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != base.GetType()) { return false; } return (this == ((VertexPositionColor)obj)); } static VertexPositionColor() { VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0) }; VertexDeclaration declaration = new VertexDeclaration(elements); VertexDeclaration = declaration; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorNormal.cs ================================================ using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPositionColorNormal : IVertexType { public Vector3 Position; public Color Color; public Vector3 Normal; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionColorNormal(Vector3 position, Color color, Vector3 normal) { Position = position; Color = color; Normal = normal; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { int hashCode = Position.GetHashCode(); hashCode = (hashCode * 397) ^ Color.GetHashCode(); hashCode = (hashCode * 397) ^ Normal.GetHashCode(); return hashCode; } } public override string ToString() { return "{{Position:" + this.Position + " Color:" + this.Color + " Normal:" + this.Normal + "}}"; } public static bool operator ==(VertexPositionColorNormal left, VertexPositionColorNormal right) { return ((left.Position == right.Position) && (left.Color == right.Color) && (left.Normal == right.Normal)); } public static bool operator !=(VertexPositionColorNormal left, VertexPositionColorNormal right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) return false; if (obj.GetType() != base.GetType()) return false; return (this == ((VertexPositionColorNormal)obj)); } static VertexPositionColorNormal() { var elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0), new VertexElement(16, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0) }; VertexDeclaration = new VertexDeclaration(elements); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorNormalTexture.cs ================================================ using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPositionColorNormalTexture : IVertexType { public Vector3 Position; public Color Color; public Vector3 Normal; public Vector2 TextureCoordinate; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionColorNormalTexture(Vector3 position, Color color, Vector3 normal, Vector2 textureCoordinate) { Position = position; Color = color; Normal = normal; TextureCoordinate = textureCoordinate; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { int hashCode = Position.GetHashCode(); hashCode = (hashCode * 397) ^ Color.GetHashCode(); hashCode = (hashCode * 397) ^ Normal.GetHashCode(); hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode(); return hashCode; } } public override string ToString() { return "{{Position:" + this.Position + " Color:" + this.Color + " Normal:" + this.Normal + " TextureCoordinate:" + this.TextureCoordinate + "}}"; } public static bool operator ==(VertexPositionColorNormalTexture left, VertexPositionColorNormalTexture right) { return ((left.Position == right.Position) && (left.Color == right.Color) && (left.Normal == right.Normal) && (left.TextureCoordinate == right.TextureCoordinate)); } public static bool operator !=(VertexPositionColorNormalTexture left, VertexPositionColorNormalTexture right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) return false; if (obj.GetType() != base.GetType()) return false; return (this == ((VertexPositionColorNormalTexture)obj)); } static VertexPositionColorNormalTexture() { var elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0), new VertexElement(16, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0), new VertexElement(28, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) }; VertexDeclaration = new VertexDeclaration(elements); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionColorTexture.cs ================================================ using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPositionColorTexture : IVertexType { public Vector3 Position; public Color Color; public Vector2 TextureCoordinate; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionColorTexture(Vector3 position, Color color, Vector2 textureCoordinate) { Position = position; Color = color; TextureCoordinate = textureCoordinate; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { int hashCode = Position.GetHashCode(); hashCode = (hashCode * 397) ^ Color.GetHashCode(); hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode(); return hashCode; } } public override string ToString() { return "{{Position:" + this.Position + " Color:" + this.Color + " TextureCoordinate:" + this.TextureCoordinate + "}}"; } public static bool operator ==(VertexPositionColorTexture left, VertexPositionColorTexture right) { return ((left.Position == right.Position) && (left.Color == right.Color) && (left.TextureCoordinate == right.TextureCoordinate)); } public static bool operator !=(VertexPositionColorTexture left, VertexPositionColorTexture right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) return false; if (obj.GetType() != base.GetType()) return false; return (this == ((VertexPositionColorTexture)obj)); } static VertexPositionColorTexture() { var elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0), new VertexElement(16, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) }; VertexDeclaration = new VertexDeclaration(elements); } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionNormalTexture.cs ================================================ using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct VertexPositionNormalTexture : IVertexType { public Vector3 Position; public Vector3 Normal; public Vector2 TextureCoordinate; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionNormalTexture(Vector3 position, Vector3 normal, Vector2 textureCoordinate) { this.Position = position; this.Normal = normal; this.TextureCoordinate = textureCoordinate; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { int hashCode = Position.GetHashCode(); hashCode = (hashCode * 397) ^ Normal.GetHashCode(); hashCode = (hashCode * 397) ^ TextureCoordinate.GetHashCode(); return hashCode; } } public override string ToString() { return "{{Position:" + this.Position + " Normal:" + this.Normal + " TextureCoordinate:" + this.TextureCoordinate + "}}"; } public static bool operator ==(VertexPositionNormalTexture left, VertexPositionNormalTexture right) { return ((left.Position == right.Position) && (left.Normal == right.Normal) && (left.TextureCoordinate == right.TextureCoordinate)); } public static bool operator !=(VertexPositionNormalTexture left, VertexPositionNormalTexture right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != base.GetType()) { return false; } return (this == ((VertexPositionNormalTexture)obj)); } static VertexPositionNormalTexture() { VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0), new VertexElement(0x18, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) }; VertexDeclaration declaration = new VertexDeclaration(elements); VertexDeclaration = declaration; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Vertices/VertexPositionTexture.cs ================================================ using System.Runtime.InteropServices; namespace Microsoft.Xna.Framework.Graphics { [StructLayout(LayoutKind.Sequential, Pack=1)] public struct VertexPositionTexture : IVertexType { public Vector3 Position; public Vector2 TextureCoordinate; public static readonly VertexDeclaration VertexDeclaration; public VertexPositionTexture(Vector3 position, Vector2 textureCoordinate) { this.Position = position; this.TextureCoordinate = textureCoordinate; } VertexDeclaration IVertexType.VertexDeclaration { get { return VertexDeclaration; } } public override int GetHashCode() { unchecked { return (Position.GetHashCode() * 397) ^ TextureCoordinate.GetHashCode(); } } public override string ToString() { return "{{Position:" + this.Position + " TextureCoordinate:" + this.TextureCoordinate + "}}"; } public static bool operator ==(VertexPositionTexture left, VertexPositionTexture right) { return ((left.Position == right.Position) && (left.TextureCoordinate == right.TextureCoordinate)); } public static bool operator !=(VertexPositionTexture left, VertexPositionTexture right) { return !(left == right); } public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != base.GetType()) { return false; } return (this == ((VertexPositionTexture)obj)); } static VertexPositionTexture() { VertexElement[] elements = new VertexElement[] { new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(12, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0) }; VertexDeclaration declaration = new VertexDeclaration(elements); VertexDeclaration = declaration; } } } ================================================ FILE: src/Xna.Framework.Graphics/Graphics/Viewport.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Runtime.Serialization; namespace Microsoft.Xna.Framework.Graphics { /// /// Describes the view bounds for render-target surface. /// [DataContract] public struct Viewport { private int x; private int y; private int w; private int h; private float minDepth; private float maxDepth; #region Properties /// /// The height of the bounds in pixels. /// [DataMember] public int Height { get { return this.h; } set { h = value; } } /// /// The upper limit of depth of this viewport. /// [DataMember] public float MaxDepth { get { return this.maxDepth; } set { maxDepth = value; } } /// /// The lower limit of depth of this viewport. /// [DataMember] public float MinDepth { get { return this.minDepth; } set { minDepth = value; } } /// /// The width of the bounds in pixels. /// [DataMember] public int Width { get { return this.w; } set { w = value; } } /// /// The y coordinate of the beginning of this viewport. /// [DataMember] public int Y { get { return this.y; } set { y = value; } } /// /// The x coordinate of the beginning of this viewport. /// [DataMember] public int X { get{ return x;} set{ x = value;} } #endregion /// /// Gets the aspect ratio of this , which is width / height. /// public float AspectRatio { get { if ((h != 0) && (w != 0)) { return ((float)w / (float)h); } return 0f; } } /// /// Gets or sets a boundary of this . /// public Rectangle Bounds { get { return new Rectangle(x, y, w, h); } set { x = value.X; y = value.Y; w = value.Width; h = value.Height; } } /// /// Returns the subset of the viewport that is guaranteed to be visible on a lower quality display. /// public Rectangle TitleSafeArea { get { return GraphicsDevice.GetTitleSafeArea(x, y, w, h); } } /// /// Constructs a viewport from the given values. /// /// The x coordinate of the upper-left corner of the view bounds in pixels. /// The y coordinate of the upper-left corner of the view bounds in pixels. /// The width of the view bounds in pixels. /// The height of the view bounds in pixels. /// The lower limit of depth. /// The upper limit of depth. public Viewport(int x, int y, int width, int height,float minDepth,float maxDepth) { this.x = x; this.y = y; this.w = width; this.h = height; this.minDepth = minDepth; this.maxDepth = maxDepth; } /// /// Constructs a viewport from the given values. The will be 0.0 and will be 1.0. /// /// The x coordinate of the upper-left corner of the view bounds in pixels. /// The y coordinate of the upper-left corner of the view bounds in pixels. /// The width of the view bounds in pixels. /// The height of the view bounds in pixels. public Viewport(int x, int y, int width, int height) : this(x, y, width, height, 0.0f, 1.0f) { } /// /// Creates a new instance of struct. /// /// A that defines the location and size of the in a render target. public Viewport(Rectangle bounds) : this(bounds.X, bounds.Y, bounds.Width, bounds.Height) { } /// /// Projects a from model space into screen space. /// The source point is transformed from model space to world space by the world matrix, /// then from world space to view space by the view matrix, and /// finally from view space to screen space by the projection matrix. /// /// The to project. /// The projection . /// The view . /// The world . /// public Vector3 Project(Vector3 source, Matrix projection, Matrix view, Matrix world) { Matrix.Multiply(ref world, ref view, out view); Matrix.Multiply(ref view, ref projection, out projection); float w = (source.X * projection.M14) + (source.Y * projection.M24) + (source.Z * projection.M34) + projection.M44; Vector3.Transform(ref source, ref projection, out source); float invW = 1 / w; source.X = source.X * invW; source.Y = source.Y * invW; source.Z = source.Z * invW; source.X = (((source.X + 1f) * 0.5f) * this.w) + this.x; source.Y = (((-source.Y + 1f) * 0.5f) * this.h) + this.y; source.Z = (source.Z * (this.maxDepth - this.minDepth)) + this.minDepth; return source; } /// /// Unprojects a from screen space into model space. /// The source point is transformed from screen space to view space by the inverse of the projection matrix, /// then from view space to world space by the inverse of the view matrix, and /// finally from world space to model space by the inverse of the world matrix. /// Note source.Z must be less than or equal to MaxDepth. /// /// The to unproject. /// The projection . /// The view . /// The world . /// public Vector3 Unproject(Vector3 source, Matrix projection, Matrix view, Matrix world) { Matrix.Multiply(ref world, ref view, out view); Matrix.Multiply(ref view, ref projection, out projection); Matrix.Invert(ref projection, out projection); source.X = (((source.X - this.x) / ((float) this.w)) * 2f) - 1f; source.Y = -((((source.Y - this.y) / ((float) this.h)) * 2f) - 1f); source.Z = (source.Z - this.minDepth) / (this.maxDepth - this.minDepth); float w = (source.X * projection.M14) + (source.Y * projection.M24) + (source.Z * projection.M34) + projection.M44; Vector3.Transform(ref source, ref projection, out source); float invW = 1 / w; source.X = source.X * invW; source.Y = source.Y * invW; source.Z = source.Z * invW; return source; } /// /// Returns a representation of this in the format: /// {X:[] Y:[] Width:[] Height:[] MinDepth:[] MaxDepth:[]} /// /// A representation of this . public override string ToString() { return "{X:" + x + ", Y:" + y + ", Width:" + w + ", Height:" + h + ", MinDepth:" + minDepth + ", MaxDepth:" + maxDepth + "}"; } } } ================================================ FILE: src/Xna.Framework.Graphics/GraphicsDeviceInformation.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Framework.Graphics; namespace Microsoft.Xna.Framework { /// /// The settings used in creation of the graphics device. /// See . /// public class GraphicsDeviceInformation { /// /// The graphics adapter on which the graphics device will be created. /// /// /// This is only valid on desktop systems where multiple graphics /// adapters are possible. Defaults to . /// public GraphicsAdapter Adapter { get; set; } /// /// The requested graphics device feature set. /// public GraphicsProfile GraphicsProfile { get; set; } /// /// The settings that define how graphics will be presented to the display. /// public PresentationParameters PresentationParameters { get; set; } } } ================================================ FILE: src/Xna.Framework.Graphics/IGraphicsDeviceManager.cs ================================================ // MIT License - Copyright (C) The Mono.Xna Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework { /// /// Used by the platform code to control the graphics device. /// public interface IGraphicsDeviceManager { /// /// Called to create the graphics device. /// /// Does nothing if the graphics device is already created. void CreateDevice(); /// /// Called at the start of rendering a frame. /// /// Returns true if the frame should be rendered. bool BeginDraw(); /// /// Called after rendering to present the frame to the screen. /// void EndDraw(); } } ================================================ FILE: src/Xna.Framework.Graphics/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Graphics/PreparingDeviceSettingsEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework { /// /// The arguments to the event. /// public class PreparingDeviceSettingsEventArgs : EventArgs { GraphicsDeviceInformation _graphicsDeviceInformation; /// /// The default settings that will be used in device creation. /// public GraphicsDeviceInformation GraphicsDeviceInformation { get { return _graphicsDeviceInformation; } } /// /// Create a new instance of the event. /// /// The default settings to be used in device creation. public PreparingDeviceSettingsEventArgs(GraphicsDeviceInformation graphicsDeviceInformation) { this._graphicsDeviceInformation = graphicsDeviceInformation; } } } ================================================ FILE: src/Xna.Framework.Graphics/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Graphics/Xna.Framework.Graphics.csproj ================================================  ..\..\Artifacts\Xna.Framework.Graphics\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics Microsoft.Xna.Framework.Graphics true CS0067;CS1591;CS1574;CS0419;CS8500 true The Graphics framework. .net core;core;.net standard;standard nkast.Xna.Framework.Graphics ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {1DC4C439-A8A6-4A11-AB3B-A88DCBA05449} Xna.Framework.Content False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Input/ILLink.Descriptors.xml ================================================ ================================================ FILE: src/Xna.Framework.Input/Input/ButtonState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// Defines a button state for buttons of mouse, gamepad or joystick. /// public enum ButtonState { /// /// The button is released. /// Released = 0, /// /// The button is pressed. /// Pressed = 1, } } ================================================ FILE: src/Xna.Framework.Input/Input/Buttons.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Input { /// /// Defines the buttons on gamepad. /// [Flags] public enum Buttons { /// /// Directional pad up. /// DPadUp = 1 << 0, /// /// Directional pad down. /// DPadDown = 1 << 1, /// /// Directional pad left. /// DPadLeft = 1 << 2, /// /// Directional pad right. /// DPadRight = 1 << 3, /// /// START button. /// Start = 1 << 4, /// /// BACK button. /// Back = 1 << 5, /// /// Left stick button (pressing the left stick). /// LeftStick = 1 << 6, /// /// Right stick button (pressing the right stick). /// RightStick = 1 << 7, /// /// Left bumper (shoulder) button. /// LeftShoulder = 1 << 8, /// /// Right bumper (shoulder) button. /// RightShoulder = 1 << 9, /// /// Big button. /// BigButton = 1 << 11, /// /// A button. /// A = 1 << 12, /// /// B button. /// B = 1 << 13, /// /// X button. /// X = 1 << 14, /// /// Y button. /// Y = 1 << 15, /// /// Left grip. /// LeftGrip = 1 << 19, /// /// Right grip. /// RightGrip = 1 << 20, /// /// Left stick is towards the left. /// LeftThumbstickLeft = 1 << 21, /// /// Right trigger. /// RightTrigger = 1 << 22, /// /// Left trigger. /// LeftTrigger = 1 << 23, /// /// Right stick is towards up. /// RightThumbstickUp = 1 << 24, /// /// Right stick is towards down. /// RightThumbstickDown = 1 << 25, /// /// Right stick is towards the right. /// RightThumbstickRight = 1 << 26, /// /// Right stick is towards the left. /// RightThumbstickLeft = 1 << 27, /// /// Left stick is towards up. /// LeftThumbstickUp = 1 << 28, /// /// Left stick is towards down. /// LeftThumbstickDown = 1 << 29, /// /// Left stick is towards the right. /// LeftThumbstickRight = 1 << 30 } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IGamePad { int MaximumGamePadCount { get; } GamePadCapabilities GetCapabilities(PlayerIndex playerIndex); GamePadCapabilities GetCapabilities(int index); GamePadState GetState(PlayerIndex playerIndex); GamePadState GetState(int index); GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode); GamePadState GetState(int index, GamePadDeadZone deadZoneMode); GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode); GamePadState GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode); bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor); bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger); bool SetVibration(int index, float leftMotor, float rightMotor); bool SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger); } public interface IPlatformGamePad { T GetStrategy() where T : GamePadStrategy; } } namespace Microsoft.Xna.Framework.Input { /// /// Supports querying the game controllers and setting the vibration motors. /// public sealed class GamePad : IGamePad , IPlatformGamePad { private static GamePad _current; /// /// Returns the current GamePad instance. /// public static GamePad Current { get { if (_current != null) return _current; lock (typeof(GamePad)) { if (_current == null) _current = new GamePad(); return _current; } } } /// /// The maximum number of game pads supported on this system. /// public static int MaximumGamePadCount { get { return ((IGamePad)GamePad.Current).MaximumGamePadCount; } } /// /// Returns the capabilities of the connected controller. /// /// Player index for the controller you want to query. /// The capabilities of the controller. public static GamePadCapabilities GetCapabilities(PlayerIndex playerIndex) { return ((IGamePad)GamePad.Current).GetCapabilities(playerIndex); } /// /// Returns the capabilities of the connected controller. /// /// Index for the controller you want to query. /// The capabilities of the controller. public static GamePadCapabilities GetCapabilities(int index) { return ((IGamePad)GamePad.Current).GetCapabilities(index); } /// /// Gets the current state of a game pad controller with an independent axes dead zone. /// /// Player index for the controller you want to query. /// The state of the controller. public static GamePadState GetState(PlayerIndex playerIndex) { return ((IGamePad)GamePad.Current).GetState(playerIndex); } /// /// Gets the current state of a game pad controller with an independent axes dead zone. /// /// Index for the controller you want to query. /// The state of the controller. public static GamePadState GetState(int index) { return ((IGamePad)GamePad.Current).GetState(index); } /// /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// /// Player index for the controller you want to query. /// Enumerated value that specifies what dead zone type to use. /// The state of the controller. public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { return ((IGamePad)GamePad.Current).GetState(playerIndex, deadZoneMode); } /// /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// /// Index for the controller you want to query. /// Enumerated value that specifies what dead zone type to use. /// The state of the controller. public static GamePadState GetState(int index, GamePadDeadZone deadZoneMode) { return ((IGamePad)GamePad.Current).GetState(index, deadZoneMode); } /// /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// /// Player index for the controller you want to query. /// Enumerated value that specifies what dead zone type to use for the left stick. /// Enumerated value that specifies what dead zone type to use for the right stick. /// The state of the controller. public static GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { return ((IGamePad)GamePad.Current).GetState(playerIndex, leftDeadZoneMode, rightDeadZoneMode); } /// /// Gets the current state of a game pad controller, using a specified dead zone /// on analog stick positions. /// /// Index for the controller you want to query. /// Enumerated value that specifies what dead zone type to use for the left stick. /// Enumerated value that specifies what dead zone type to use for the right stick. /// The state of the controller. public static GamePadState GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { return ((IGamePad)GamePad.Current).GetState(index, leftDeadZoneMode, rightDeadZoneMode); } /// /// Sets the vibration motor speeds on the controller device if supported. /// /// Player index that identifies the controller to set. /// The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. /// The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// Returns true if the vibration motors were set. public static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor) { return ((IGamePad)GamePad.Current).SetVibration(playerIndex, leftMotor, rightMotor); } /// /// Sets the vibration motor speeds on the controller device if supported. /// /// Player index that identifies the controller to set. /// The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. /// The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// (Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// (Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// Returns true if the vibration motors were set. public static bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { return ((IGamePad)GamePad.Current).SetVibration(playerIndex, leftMotor, rightMotor, leftTrigger, rightTrigger); } /// /// Sets the vibration motor speeds on the controller device if supported. /// /// Index for the controller you want to query. /// The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. /// The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// Returns true if the vibration motors were set. public static bool SetVibration(int index, float leftMotor, float rightMotor) { return ((IGamePad)GamePad.Current).SetVibration(index, leftMotor, rightMotor); } /// /// Sets the vibration motor speeds on the controller device if supported. /// /// Index for the controller you want to query. /// The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. /// The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// (Xbox One controller only) The speed of the left trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// (Xbox One controller only) The speed of the right trigger motor, between 0.0 and 1.0. This motor is a high-frequency motor. /// Returns true if the vibration motors were set. public static bool SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { return ((IGamePad)GamePad.Current).SetVibration(index, leftMotor, rightMotor, leftTrigger, rightTrigger); } private GamePadStrategy _strategy; T IPlatformGamePad.GetStrategy() { return (T)_strategy; } private GamePad() { _strategy = InputFactory.Current.CreateGamePadStrategy(); } #region IGamePad int IGamePad.MaximumGamePadCount { get { return _strategy.PlatformGetMaxNumberOfGamePads(); } } GamePadCapabilities IGamePad.GetCapabilities(PlayerIndex playerIndex) { return GetCapabilities((int)playerIndex); } GamePadCapabilities IGamePad.GetCapabilities(int index) { if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads()) { return new GamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } return _strategy.PlatformGetCapabilities(index); } GamePadState IGamePad.GetState(PlayerIndex playerIndex) { return GetState((int)playerIndex, GamePadDeadZone.IndependentAxes); } GamePadState IGamePad.GetState(int index) { return GetState(index, GamePadDeadZone.IndependentAxes); } GamePadState IGamePad.GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode) { return GetState((int)playerIndex, deadZoneMode); } GamePadState IGamePad.GetState(int index, GamePadDeadZone deadZoneMode) { return GetState(index, deadZoneMode, deadZoneMode); } GamePadState IGamePad.GetState(PlayerIndex playerIndex, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { return GetState((int)playerIndex, leftDeadZoneMode, rightDeadZoneMode); } GamePadState IGamePad.GetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads()) return new GamePadState(); return _strategy.PlatformGetState(index, leftDeadZoneMode, rightDeadZoneMode); } bool IGamePad.SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor) { return SetVibration((int)playerIndex, leftMotor, rightMotor, 0.0f, 0.0f); } bool IGamePad.SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { return SetVibration((int)playerIndex, leftMotor, rightMotor, leftTrigger, rightTrigger); } bool IGamePad.SetVibration(int index, float leftMotor, float rightMotor) { return SetVibration(index, leftMotor, rightMotor, 0.0f, 0.0f); } bool IGamePad.SetVibration(int index, float leftMotor, float rightMotor, float leftTrigger, float rightTrigger) { if (index < 0 || index >= _strategy.PlatformGetMaxNumberOfGamePads()) return false; return _strategy.PlatformSetVibration(index, MathHelper.Clamp(leftMotor, 0.0f, 1.0f), MathHelper.Clamp(rightMotor, 0.0f, 1.0f), MathHelper.Clamp(leftTrigger, 0.0f, 1.0f), MathHelper.Clamp(rightTrigger, 0.0f, 1.0f)); } #endregion IGamePad } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadButtons.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// A struct that represents the current button states for the controller. /// public struct GamePadButtons { internal readonly Buttons _buttons; /// /// Gets a value indicating if the button A is pressed. /// /// if the button A is pressed; otherwise, . public ButtonState A { get { return ((_buttons & Buttons.A) == Buttons.A) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the button B is pressed. /// /// if the button B is pressed; otherwise, . public ButtonState B { get { return ((_buttons & Buttons.B) == Buttons.B) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the button Back is pressed. /// /// if the button Back is pressed; otherwise, . public ButtonState Back { get { return ((_buttons & Buttons.Back) == Buttons.Back) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the button X is pressed. /// /// if the button X is pressed; otherwise, . public ButtonState X { get { return ((_buttons & Buttons.X) == Buttons.X) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the button Y is pressed. /// /// if the button Y is pressed; otherwise, . public ButtonState Y { get { return ((_buttons & Buttons.Y) == Buttons.Y) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the button Start is pressed. /// /// if the button Start is pressed; otherwise, . public ButtonState Start { get { return ((_buttons & Buttons.Start) == Buttons.Start) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the left shoulder button is pressed. /// /// if the left shoulder button is pressed; otherwise, . public ButtonState LeftShoulder { get { return ((_buttons & Buttons.LeftShoulder) == Buttons.LeftShoulder) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the left grip button is pressed. /// /// if the left grip button is pressed; otherwise, . public ButtonState LeftGrip { get { return ((_buttons & Buttons.LeftGrip) == Buttons.LeftGrip) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the left stick button is pressed. /// /// if the left stick button is pressed; otherwise, . public ButtonState LeftStick { get { return ((_buttons & Buttons.LeftStick) == Buttons.LeftStick) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the right shoulder button is pressed. /// /// if the right shoulder button is pressed; otherwise, . public ButtonState RightShoulder { get { return ((_buttons & Buttons.RightShoulder) == Buttons.RightShoulder) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the right grip button is pressed. /// /// if the right grip button is pressed; otherwise, . public ButtonState RightGrip { get { return ((_buttons & Buttons.RightGrip) == Buttons.RightGrip) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the right stick button is pressed. /// /// if the right stick button is pressed; otherwise, . public ButtonState RightStick { get { return ((_buttons & Buttons.RightStick) == Buttons.RightStick) ? ButtonState.Pressed : ButtonState.Released; } } /// /// Gets a value indicating if the guide button is pressed. /// /// if the guide button is pressed; otherwise, . public ButtonState BigButton { get { return ((_buttons & Buttons.BigButton) == Buttons.BigButton) ? ButtonState.Pressed : ButtonState.Released; } } public GamePadButtons(Buttons buttons) { _buttons = buttons; } internal GamePadButtons(params Buttons[] buttons) : this() { foreach (Buttons b in buttons) _buttons |= b; } /// /// Determines whether two specified instances of are equal. /// /// The first object to compare. /// The second object to compare. /// true if and are equal; otherwise, false. public static bool operator ==(GamePadButtons left, GamePadButtons right) { return left._buttons == right._buttons; } /// /// Determines whether two specified instances of are not equal. /// /// The first object to compare. /// The second object to compare. /// true if and are not equal; otherwise, false. public static bool operator !=(GamePadButtons left, GamePadButtons right) { return !(left == right); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare to this instance. /// true if is a and has the same value as this instance; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadButtons) && (this == (GamePadButtons)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { return (int)_buttons; } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[GamePadButtons:" + " A=" + (int)A + ", B=" + (int)B + ", X=" + (int)X + ", Y=" + (int)Y + ", Start=" + (int)Start + ", Back=" + (int)Back + ", BigButton=" + (int)BigButton + ", LeftShoulder=" + (int)LeftShoulder + ", RightShoulder=" + (int)RightShoulder + ", LeftStick=" + (int)LeftStick + ", RightStick=" + (int)RightStick + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Input { /// /// A stuct that represents the controller capabilities. /// public struct GamePadCapabilities { private const Buttons ButtonLeftXThumbStick = (Buttons.LeftThumbstickLeft & Buttons.LeftThumbstickRight); private const Buttons ButtonLeftYThumbStick = (Buttons.LeftThumbstickDown & Buttons.LeftThumbstickUp); private const Buttons ButtonRightXThumbStick = (Buttons.RightThumbstickLeft & Buttons.RightThumbstickRight); private const Buttons ButtonRightYThumbStick = (Buttons.RightThumbstickDown & Buttons.RightThumbstickUp); private const uint CapsConnected = (1 << 0); private const uint CapsLeftVibrationMotor = (1 << 1); private const uint CapsRightVibrationMotor = (1 << 2); private const uint CapsVoiceSupport = (1 << 3); private Buttons _hasButtons; private uint _hasCaps; private GamePadType _gamePadType; [Obsolete] public GamePadCapabilities( GamePadType gamePadType, string displayName, string identifier, bool isConnected, bool hasAButton, bool hasBButton, bool hasXButton, bool hasYButton, bool hasStartButton, bool hasBackButton, bool hasBigButton, bool hasDPadDownButton, bool hasDPadLeftButton, bool hasDPadRightButton, bool hasDPadUpButton, bool hasLeftShoulderButton, bool hasLeftStickButton, bool hasRightShoulderButton, bool hasRightStickButton, bool hasLeftXThumbStick, bool hasLeftYThumbStick, bool hasRightXThumbStick, bool hasRightYThumbStick, bool hasLeftTrigger, bool hasRightTrigger, bool hasLeftVibrationMotor, bool hasRightVibrationMotor, bool hasVoiceSupport) : this() { _gamePadType = gamePadType; DisplayName = displayName; Identifier = identifier; IsConnected = isConnected; HasAButton = hasAButton; HasBButton = hasBButton; HasXButton = hasXButton; HasYButton = hasYButton; HasStartButton = hasStartButton; HasBackButton = hasBackButton; HasBigButton = hasBigButton; HasDPadDownButton = hasDPadDownButton; HasDPadLeftButton = hasDPadLeftButton; HasDPadRightButton = hasDPadRightButton; HasDPadUpButton = hasDPadUpButton; HasLeftShoulderButton = hasLeftShoulderButton; HasLeftStickButton = hasLeftStickButton; HasRightShoulderButton = hasRightShoulderButton; HasRightStickButton = hasRightStickButton; HasLeftXThumbStick = hasLeftXThumbStick; HasLeftYThumbStick = hasLeftYThumbStick; HasRightXThumbStick = hasRightXThumbStick; HasRightYThumbStick = hasRightYThumbStick; HasLeftTrigger = hasLeftTrigger; HasRightTrigger=hasRightTrigger; HasLeftVibrationMotor = hasLeftVibrationMotor; HasRightVibrationMotor=hasRightVibrationMotor; HasVoiceSupport = hasVoiceSupport; } internal GamePadCapabilities( GamePadType gamePadType, string displayName, string identifier, bool isConnected, Buttons buttons, bool hasLeftVibrationMotor, bool hasRightVibrationMotor, bool hasVoiceSupport) : this() { bool hasLeftThumbstickLeft = (_hasButtons & Buttons.LeftThumbstickLeft) == Buttons.LeftThumbstickLeft; bool hasLeftThumbstickRight = (_hasButtons & Buttons.LeftThumbstickRight) == Buttons.LeftThumbstickRight; bool hasLeftThumbstickDown = (_hasButtons & Buttons.LeftThumbstickDown) == Buttons.LeftThumbstickDown; bool hasLeftThumbstickUp = (_hasButtons & Buttons.LeftThumbstickUp) == Buttons.LeftThumbstickUp; bool hasRightThumbstickLeft = (_hasButtons & Buttons.RightThumbstickLeft) == Buttons.RightThumbstickLeft; bool hasRightThumbstickRight = (_hasButtons & Buttons.RightThumbstickRight) == Buttons.RightThumbstickRight; bool hasRightThumbstickDown = (_hasButtons & Buttons.RightThumbstickDown) == Buttons.RightThumbstickDown; bool hasRightThumbstickUp = (_hasButtons & Buttons.RightThumbstickUp) == Buttons.RightThumbstickUp; Debug.Assert(hasLeftThumbstickLeft == hasLeftThumbstickRight); // ButtonLeftXThumbStick Debug.Assert(hasLeftThumbstickDown == hasLeftThumbstickUp); // ButtonLeftYThumbStick Debug.Assert(hasRightThumbstickLeft == hasRightThumbstickRight); // ButtonRightXThumbStick Debug.Assert(hasRightThumbstickDown == hasRightThumbstickUp); // ButtonRightYThumbStick this._gamePadType = gamePadType; this.DisplayName = displayName; this.Identifier = identifier; this.IsConnected = isConnected; this._hasButtons = buttons; this.HasLeftVibrationMotor = hasLeftVibrationMotor; this.HasRightVibrationMotor = hasRightVibrationMotor; this.HasVoiceSupport = hasVoiceSupport; } /// /// Gets a value indicating if the controller is connected. /// /// true if it is connected; otherwise, false. public bool IsConnected { get { return (_hasCaps & CapsConnected) == CapsConnected; } internal set { _hasCaps = (value) ? (_hasCaps | CapsConnected) : (_hasCaps & ~CapsConnected); } } /// /// Gets the gamepad display name. /// /// This property is not available in XNA. /// /// String representing the display name of the gamepad. public string DisplayName { get; internal set; } /// /// Gets the unique identifier of the gamepad. /// /// This property is not available in XNA. /// /// String representing the unique identifier of the gamepad. public string Identifier { get; internal set; } /// /// Gets a value indicating whether the controller has the button A. /// /// true if it has the button A; otherwise, false. public bool HasAButton { get { return (_hasButtons & Buttons.A) == Buttons.A; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.A) : (_hasButtons & ~Buttons.A); } } /// /// Gets a value indicating whether the controller has the button Back. /// /// true if it has the button Back; otherwise, false. public bool HasBackButton { get { return (_hasButtons & Buttons.Back) == Buttons.Back; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.Back) : (_hasButtons & ~Buttons.Back); } } /// /// Gets a value indicating whether the controller has the button B. /// /// true if it has the button B; otherwise, false. public bool HasBButton { get { return (_hasButtons & Buttons.B) == Buttons.B; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.B) : (_hasButtons & ~Buttons.B); } } /// /// Gets a value indicating whether the controller has the directional pad down button. /// /// true if it has the directional pad down button; otherwise, false. public bool HasDPadDownButton { get { return (_hasButtons & Buttons.DPadDown) == Buttons.DPadDown; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.DPadDown) : (_hasButtons & ~Buttons.DPadDown); } } /// /// Gets a value indicating whether the controller has the directional pad left button. /// /// true if it has the directional pad left button; otherwise, false. public bool HasDPadLeftButton { get { return (_hasButtons & Buttons.DPadLeft) == Buttons.DPadLeft; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.DPadLeft) : (_hasButtons & ~Buttons.DPadLeft); } } /// /// Gets a value indicating whether the controller has the directional pad right button. /// /// true if it has the directional pad right button; otherwise, false. public bool HasDPadRightButton { get { return (_hasButtons & Buttons.DPadRight) == Buttons.DPadRight; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.DPadRight) : (_hasButtons & ~Buttons.DPadRight); } } /// /// Gets a value indicating whether the controller has the directional pad up button. /// /// true if it has the directional pad up button; otherwise, false. public bool HasDPadUpButton { get { return (_hasButtons & Buttons.DPadUp) == Buttons.DPadUp; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.DPadUp) : (_hasButtons & ~Buttons.DPadUp); } } /// /// Gets a value indicating whether the controller has the left shoulder button. /// /// true if it has the left shoulder button; otherwise, false. public bool HasLeftShoulderButton { get { return (_hasButtons & Buttons.LeftShoulder) == Buttons.LeftShoulder; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.LeftShoulder) : (_hasButtons & ~Buttons.LeftShoulder); } } /// /// Gets a value indicating whether the controller has the left stick button. /// /// true if it has the left stick button; otherwise, false. public bool HasLeftStickButton { get { return (_hasButtons & Buttons.LeftStick) == Buttons.LeftStick; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.LeftStick) : (_hasButtons & ~Buttons.LeftStick); } } /// /// Gets a value indicating whether the controller has the right shoulder button. /// /// true if it has the right shoulder button; otherwise, false. public bool HasRightShoulderButton { get { return (_hasButtons & Buttons.RightShoulder) == Buttons.RightShoulder; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.RightShoulder) : (_hasButtons & ~Buttons.RightShoulder); } } /// /// Gets a value indicating whether the controller has the right stick button. /// /// true if it has the right stick button; otherwise, false. public bool HasRightStickButton { get { return (_hasButtons & Buttons.RightStick) == Buttons.RightStick; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.RightStick) : (_hasButtons & ~Buttons.RightStick); } } /// /// Gets a value indicating whether the controller has the button Start. /// /// true if it has the button Start; otherwise, false. public bool HasStartButton { get { return (_hasButtons & Buttons.Start) == Buttons.Start; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.Start) : (_hasButtons & ~Buttons.Start); } } /// /// Gets a value indicating whether the controller has the button X. /// /// true if it has the button X; otherwise, false. public bool HasXButton { get { return (_hasButtons & Buttons.X) == Buttons.X; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.X) : (_hasButtons & ~Buttons.X); } } /// /// Gets a value indicating whether the controller has the button Y. /// /// true if it has the button Y; otherwise, false. public bool HasYButton { get { return (_hasButtons & Buttons.Y) == Buttons.Y; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.Y) : (_hasButtons & ~Buttons.Y); } } /// /// Gets a value indicating whether the controller has the guide button. /// /// true if it has the guide button; otherwise, false. public bool HasBigButton { get { return (_hasButtons & Buttons.BigButton) == Buttons.BigButton; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.BigButton) : (_hasButtons & ~Buttons.BigButton); } } /// /// Gets a value indicating whether the controller has X axis for the left stick (thumbstick) button. /// /// true if it has X axis for the left stick (thumbstick) button; otherwise, false. public bool HasLeftXThumbStick { get { return (_hasButtons & ButtonLeftXThumbStick) == ButtonLeftXThumbStick; } internal set { _hasButtons = (value) ? (_hasButtons | ButtonLeftXThumbStick) : (_hasButtons & ~ButtonLeftXThumbStick); } } /// /// Gets a value indicating whether the controller has Y axis for the left stick (thumbstick) button. /// /// true if it has Y axis for the left stick (thumbstick) button; otherwise, false. public bool HasLeftYThumbStick { get { return (_hasButtons & ButtonLeftYThumbStick) == ButtonLeftYThumbStick; } internal set { _hasButtons = (value) ? (_hasButtons | ButtonLeftYThumbStick) : (_hasButtons & ~ButtonLeftYThumbStick); } } /// /// Gets a value indicating whether the controller has X axis for the right stick (thumbstick) button. /// /// true if it has X axis for the right stick (thumbstick) button; otherwise, false. public bool HasRightXThumbStick { get { return (_hasButtons & ButtonRightXThumbStick) == ButtonRightXThumbStick; } internal set { _hasButtons = (value) ? (_hasButtons | ButtonRightXThumbStick) : (_hasButtons & ~ButtonRightXThumbStick); } } /// /// Gets a value indicating whether the controller has Y axis for the right stick (thumbstick) button. /// /// true if it has Y axis for the right stick (thumbstick) button; otherwise, false. public bool HasRightYThumbStick { get { return (_hasButtons & ButtonRightYThumbStick) == ButtonRightYThumbStick; } internal set { _hasButtons = (value) ? (_hasButtons | ButtonRightYThumbStick) : (_hasButtons & ~ButtonRightYThumbStick); } } /// /// Gets a value indicating whether the controller has the left trigger button. /// /// true if it has the left trigger button; otherwise, false. public bool HasLeftTrigger { get { return (_hasButtons & Buttons.LeftTrigger) == Buttons.LeftTrigger; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.LeftTrigger) : (_hasButtons & ~Buttons.LeftTrigger); } } /// /// Gets a value indicating whether the controller has the right trigger button. /// /// true if it has the right trigger button; otherwise, false. public bool HasRightTrigger { get { return (_hasButtons & Buttons.RightTrigger) == Buttons.RightTrigger; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.RightTrigger) : (_hasButtons & ~Buttons.RightTrigger); } } /// /// Gets a value indicating whether the controller has the left grip button. /// /// true if it has the left grip button; otherwise, false. public bool HasLeftGrip { get { return (_hasButtons & Buttons.LeftGrip) == Buttons.LeftGrip; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.LeftGrip) : (_hasButtons & ~Buttons.LeftGrip); } } /// /// Gets a value indicating whether the controller has the right grip button. /// /// true if it has the right grip button; otherwise, false. public bool HasRightGrip { get { return (_hasButtons & Buttons.RightGrip) == Buttons.RightGrip; } internal set { _hasButtons = (value) ? (_hasButtons | Buttons.RightGrip) : (_hasButtons & ~Buttons.RightGrip); } } /// /// Gets a value indicating whether the controller has the left vibration motor. /// /// true if it has the left vibration motor; otherwise, false. public bool HasLeftVibrationMotor { get { return (_hasCaps & CapsLeftVibrationMotor) == CapsLeftVibrationMotor; } internal set { _hasCaps = (value) ? (_hasCaps | CapsLeftVibrationMotor) : (_hasCaps & ~CapsLeftVibrationMotor); } } /// /// Gets a value indicating whether the controller has the right vibration motor. /// /// true if it has the right vibration motor; otherwise, false. public bool HasRightVibrationMotor { get { return (_hasCaps & CapsRightVibrationMotor) == CapsRightVibrationMotor; } internal set { _hasCaps = (value) ? (_hasCaps | CapsRightVibrationMotor) : (_hasCaps & ~CapsRightVibrationMotor); } } /// /// Gets a value indicating whether the controller has a microphone. /// /// true if it has a microphone; otherwise, false. public bool HasVoiceSupport { get { return (_hasCaps & CapsVoiceSupport) == CapsVoiceSupport; } internal set { _hasCaps = (value) ? (_hasCaps | CapsVoiceSupport) : (_hasCaps & ~CapsVoiceSupport); } } /// /// Gets the type of the controller. /// /// A representing the controller type.. public GamePadType GamePadType { get { return _gamePadType; } internal set { _gamePadType = value; } } /// /// Determines whether a specified instance of /// is equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are equal; otherwise, false. public static bool operator ==(GamePadCapabilities left, GamePadCapabilities right) { bool eq = true; eq &= (left.DisplayName == right.DisplayName); eq &= (left.Identifier == right.Identifier); eq &= (left._hasButtons == right._hasButtons); eq &= (left._hasCaps == right._hasCaps); eq &= (left._gamePadType == right._gamePadType); return eq; } /// /// Determines whether a specified instance of /// is not equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are not equal; otherwise, false. public static bool operator !=(GamePadCapabilities left, GamePadCapabilities right) { return !(left == right); } /// /// Determines whether the specified is equal to the current . /// /// The to compare with the current . /// true if the specified is equal to the current /// ; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadCapabilities) && (this == (GamePadCapabilities)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { return Identifier.GetHashCode(); } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[GamePadCapabilities: IsConnected=" + IsConnected + ", DisplayName=" + DisplayName + ", Identifier=" + Identifier + ", HasAButton=" + HasAButton + ", HasBackButton=" + HasBackButton + ", HasBButton=" + HasBButton + ", HasDPadDownButton=" + HasDPadDownButton + ", HasDPadLeftButton=" + HasDPadLeftButton + ", HasDPadRightButton=" + HasDPadRightButton + ", HasDPadUpButton=" + HasDPadUpButton + ", HasLeftShoulderButton=" + HasLeftShoulderButton + ", HasLeftStickButton=" + HasLeftStickButton + ", HasRightShoulderButton=" + HasRightShoulderButton + ", HasRightStickButton=" + HasRightStickButton + ", HasStartButton=" + HasStartButton + ", HasXButton=" + HasXButton + ", HasYButton=" + HasYButton + ", HasBigButton=" + HasBigButton + ", HasLeftXThumbStick=" + HasLeftXThumbStick + ", HasLeftYThumbStick=" + HasLeftYThumbStick + ", HasRightXThumbStick=" + HasRightXThumbStick + ", HasRightYThumbStick=" + HasRightYThumbStick + ", HasLeftTrigger=" + HasLeftTrigger + ", HasRightTrigger=" + HasRightTrigger + ", HasLeftVibrationMotor=" + HasLeftVibrationMotor + ", HasRightVibrationMotor=" + HasRightVibrationMotor + ", HasVoiceSupport=" + HasVoiceSupport + ", GamePadType=" + GamePadType + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadDPad.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { public struct GamePadDPad { private const Buttons ButtonsMask = (Buttons.DPadUp | Buttons.DPadDown | Buttons.DPadLeft | Buttons.DPadRight); internal readonly Buttons _buttons; /// /// Gets a value indicating whether up is pressed on the directional pad. /// /// if the up button is pressed; otherwise, . public ButtonState Up { get { return (ButtonState)((int)(_buttons & Buttons.DPadUp) >> 0); } } /// /// Gets a value indicating whether down is pressed on the directional pad. /// /// if the down button is pressed; otherwise, . public ButtonState Down { get { return (ButtonState)((int)(_buttons & Buttons.DPadDown) >> 1); } } /// /// Gets a value indicating whether left is pressed on the directional pad. /// /// if the left button is pressed; otherwise, . public ButtonState Left { get { return (ButtonState)((int)(_buttons & Buttons.DPadLeft) >> 2); } } /// /// Gets a value indicating whether right is pressed on the directional pad. /// /// if the right button is pressed; otherwise, . public ButtonState Right { get { return (ButtonState)((int)(_buttons & Buttons.DPadRight) >> 3); } } /// /// Initializes a new instance of the struct. /// /// Current state of directional pad up. /// Current state of directional pad down. /// Current state of directional pad left. /// Current state of directional pad right. public GamePadDPad(ButtonState upValue, ButtonState downValue, ButtonState leftValue, ButtonState rightValue) : this() { int buttons = (int)upValue << 0 | (int)downValue << 1 | (int)leftValue << 2 | (int)rightValue << 3; _buttons = (Buttons)buttons; } internal GamePadDPad(params Buttons[] buttons) : this() { foreach (Buttons button in buttons) { _buttons |= button & ButtonsMask; } } internal GamePadDPad(Buttons buttons) : this() { _buttons |= buttons & ButtonsMask; } /// /// Determines whether two specified instances of are equal. /// /// The first object to compare. /// The second object to compare. /// true if and are equal; otherwise, false. public static bool operator ==(GamePadDPad left, GamePadDPad right) { return (left._buttons == right._buttons); } /// /// Determines whether two specified instances of are not equal. /// /// The first object to compare. /// The second object to compare. /// true if and are not equal; otherwise, false. public static bool operator !=(GamePadDPad left, GamePadDPad right) { return !(left == right); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare to this instance. /// true if is a and has the same value as this instance; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadDPad) && (this == (GamePadDPad)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { return (int)_buttons; } /// /// Returns a that represents the current /// in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. /// /// A that represents the current . public override string ToString() { return "" + (int)Left + (int)Up + (int)Right + (int)Down; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadDeadZone.cs ================================================  namespace Microsoft.Xna.Framework.Input { /// /// Specifies a type of dead zone processing to apply to Xbox 360 Controller /// analog sticks when calling GetState. /// public enum GamePadDeadZone { /// /// The values of each stick are not processed and are returned by GetState as /// "raw" values. This is best if you intend to implement your own dead zone /// processing. /// None, /// /// The X and Y positions of each stick are compared against the dead zone independently. /// This setting is the default when calling GetState. /// IndependentAxes, /// /// The combined X and Y position of each stick is compared to the dead zone. /// This provides better control than IndependentAxes when the stick is used /// as a two-dimensional control surface, such as when controlling a character's /// view in a first-person game. /// Circular } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos namespace Microsoft.Xna.Framework.Input { /// /// Represents specific information about the state of the controller, /// including the current state of buttons and sticks. /// /// This is implemented as a partial struct to allow for individual platforms /// to offer additional data without separate state queries to GamePad. /// public struct GamePadState { /// /// Gets a value indicating if the controller is connected. /// /// true if it is connected; otherwise, false. public bool IsConnected { get; internal set; } /// /// Gets the packet number associated with this state. /// /// The packet number. public int PacketNumber { get; internal set; } /// /// Gets a structure that identifies what buttons on the controller are pressed. /// /// The GamePadButtons structure. public GamePadButtons Buttons { get { return new GamePadButtons(this.TouchButtons._buttons); } } /// /// Gets a structure that identifies what buttons on the controller are pressed or touched. /// /// The TouchButtons structure. public GamePadTouchButtons TouchButtons { get; internal set; } /// /// Gets a structure that identifies what directions of the directional pad on the controller are pressed. /// /// The directional pad structure. public GamePadDPad DPad { get; internal set; } /// /// Gets a structure that indicates the position of the controller sticks (thumbsticks). /// /// The thumbsticks position. public GamePadThumbSticks ThumbSticks { get; internal set; } /// /// Gets a structure that identifies the position of triggers on the controller. /// /// Positions of the triggers. public GamePadTriggers Triggers { get; internal set; } /// /// Gets a structure that identifies the position of Grips on the controller. /// /// Positions of the grips. public GamePadTriggers Grips { get; internal set; } /// /// Initializes a new instance of the struct /// using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad. /// /// Initial thumbstick state. /// Initial trigger state. /// Initial button state. /// Initial directional pad state. public GamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad) : this() { ThumbSticks = thumbSticks; Triggers = triggers; Grips = default(GamePadTriggers); TouchButtons = new GamePadTouchButtons(buttons._buttons, default(Buttons)); DPad = dPad; IsConnected = true; } /// /// Initializes a new instance of the struct /// using the specified stick, trigger, and button values. /// /// Left stick value. Each axis is clamped between −1.0 and 1.0. /// Right stick value. Each axis is clamped between −1.0 and 1.0. /// Left trigger value. This value is clamped between 0.0 and 1.0. /// Right trigger value. This value is clamped between 0.0 and 1.0. /// Array or parameter list of Buttons to initialize as pressed. public GamePadState(Vector2 leftThumbStick, Vector2 rightThumbStick, float leftTrigger, float rightTrigger, params Buttons[] buttons) : this() { Buttons buttonFlags = default; foreach (Buttons b in buttons) buttonFlags |= b; ThumbSticks = new GamePadThumbSticks(leftThumbStick, rightThumbStick); Triggers = new GamePadTriggers(leftTrigger, rightTrigger); Grips = default(GamePadTriggers); TouchButtons = new GamePadTouchButtons(buttonFlags, default(Buttons)); DPad = new GamePadDPad(buttons); IsConnected = true; } /// /// Initializes a new instance of the struct /// using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad. /// /// Initial thumbstick state. /// Initial trigger state. /// Initial directional pad state. /// Initial button state. /// Initial directional pad state. public GamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadTriggers grips, GamePadTouchButtons touchButtons, GamePadDPad dPad) : this() { ThumbSticks = thumbSticks; Triggers = triggers; Grips = grips; TouchButtons = touchButtons; DPad = dPad; IsConnected = true; } /// /// Determines whether specified input device buttons are pressed in this GamePadState. /// /// true if button was pressed, false if button was released or touched. /// Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. public bool IsButtonDown(Buttons button) { Buttons virtualButtons = TouchButtons._buttons | DPad._buttons | ThumbSticks._virtualButtons ; return (virtualButtons & button) == button; } /// /// Determines whether specified input device buttons are released in this GamePadState. /// /// true if button was released or touched, false if button was pressed. /// Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. public bool IsButtonUp(Buttons button) { Buttons virtualButtons = TouchButtons._buttons | DPad._buttons | ThumbSticks._virtualButtons ; return (virtualButtons & button) != button; } /// /// Determines whether specified input device buttons are touched in this GamePadState. /// /// true if button was touched, false if button was released or touched. /// Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. public bool IsButtonTouched(Buttons button) { Buttons touchButtons = TouchButtons._touches & ~TouchButtons._buttons; return (touchButtons & button) == button; } /// /// Determines whether a specified instance of is equal /// to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are equal; otherwise, false. public static bool operator ==(GamePadState left, GamePadState right) { return (left.IsConnected == right.IsConnected) && (left.PacketNumber == right.PacketNumber) && (left.TouchButtons == right.TouchButtons) && (left.DPad == right.DPad) && (left.ThumbSticks == right.ThumbSticks) && (left.Triggers == right.Triggers) && (left.Grips == right.Grips) ; } /// /// Determines whether a specified instance of is not /// equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are not equal; otherwise, false. public static bool operator !=(GamePadState left, GamePadState right) { return !(left == right); } /// /// Determines whether the specified is equal to the current . /// /// The to compare with the current . /// true if the specified is equal to the current /// ; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadState) && (this == (GamePadState)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { unchecked { int hash = PacketNumber; hash = (hash * 397) ^ TouchButtons.GetHashCode(); hash = (hash * 397) ^ DPad.GetHashCode(); hash = (hash * 397) ^ ThumbSticks.GetHashCode(); hash = (hash * 397) ^ Triggers.GetHashCode(); hash = (hash * 397) ^ Grips.GetHashCode(); return hash; } } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { if (!IsConnected) return "[GamePadState: IsConnected = 0]"; return "[GamePadState: IsConnected=" + (IsConnected ? "1" : "0") + ", PacketNumber=" + PacketNumber.ToString("00000") + ", Buttons=" + Buttons + ", TouchButtons=" + TouchButtons + ", DPad=" + DPad + ", ThumbSticks=" + ThumbSticks + ", Triggers=" + Triggers + ", Grips=" + Grips + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class GamePadStrategy { public abstract float LeftThumbDeadZone { get; } public abstract float RightThumbDeadZone { get; } public abstract int PlatformGetMaxNumberOfGamePads(); public abstract GamePadCapabilities PlatformGetCapabilities(int index); public abstract GamePadState PlatformGetState(int index, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode); public abstract bool PlatformSetVibration(int index, float v1, float v2, float v3, float v4); protected GamePadCapabilities CreateGamePadCapabilities( GamePadType gamePadType, string displayName, string identifier, bool isConnected, Buttons buttons, bool hasLeftVibrationMotor, bool hasRightVibrationMotor, bool hasVoiceSupport) { return new GamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad) { return new GamePadState(thumbSticks, triggers, buttons, dPad); } protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad, int packetNumber) { GamePadState state = new GamePadState(thumbSticks, triggers, buttons, dPad); state.PacketNumber = packetNumber; return state; } protected GamePadState CreateGamePadState(GamePadThumbSticks thumbSticks, GamePadTriggers triggers, GamePadButtons buttons, GamePadDPad dPad, bool isConnected) { GamePadState state = new GamePadState(thumbSticks, triggers, buttons, dPad); state.IsConnected = isConnected; return state; } protected GamePadThumbSticks CreateGamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) { return new GamePadThumbSticks(leftPosition, rightPosition, leftDeadZoneMode, rightDeadZoneMode); } protected GamePadDPad CreateGamePadDPad(Buttons buttons) { return new GamePadDPad(buttons); } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadThumbSticks.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Framework.Input { /// /// A struct that represents the current stick (thumbstick) states for the controller. /// public struct GamePadThumbSticks { internal readonly Buttons _virtualButtons; private readonly Vector2 _left, _right; /// /// Gets a value indicating the position of the left stick (thumbstick). /// /// A indicating the current position of the left stick (thumbstick). public Vector2 Left { get { return _left; } } /// /// Gets a value indicating the position of the right stick (thumbstick). /// /// A indicating the current position of the right stick (thumbstick). public Vector2 Right { get { return _right; } } public GamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition) : this(leftPosition, rightPosition, GamePadDeadZone.None, GamePadDeadZone.None) { } internal GamePadThumbSticks(Vector2 leftPosition, Vector2 rightPosition, GamePadDeadZone leftDeadZoneMode, GamePadDeadZone rightDeadZoneMode) : this() { float leftThumbDeadZone = ((IPlatformGamePad)GamePad.Current).GetStrategy().LeftThumbDeadZone; float rightThumbDeadZone = ((IPlatformGamePad)GamePad.Current).GetStrategy().RightThumbDeadZone; // Apply dead zone _left = ApplyDeadZone(leftDeadZoneMode, leftThumbDeadZone, leftPosition); _right = ApplyDeadZone(rightDeadZoneMode, rightThumbDeadZone, rightPosition); // VirtualButtons should always behave like deadzone is IndependentAxes. // This is consistent with XNA behaviour and generally most convenient (e.g. for menu navigation) _virtualButtons = 0; if (leftPosition.X < -leftThumbDeadZone) _virtualButtons |= Buttons.LeftThumbstickLeft; else if (leftPosition.X > leftThumbDeadZone) _virtualButtons |= Buttons.LeftThumbstickRight; if (leftPosition.Y < -leftThumbDeadZone) _virtualButtons |= Buttons.LeftThumbstickDown; else if (leftPosition.Y > leftThumbDeadZone) _virtualButtons |= Buttons.LeftThumbstickUp; if (rightPosition.X < -rightThumbDeadZone) _virtualButtons |= Buttons.RightThumbstickLeft; else if (rightPosition.X > rightThumbDeadZone) _virtualButtons |= Buttons.RightThumbstickRight; if (rightPosition.Y < -rightThumbDeadZone) _virtualButtons |= Buttons.RightThumbstickDown; else if (rightPosition.Y > rightThumbDeadZone) _virtualButtons |= Buttons.RightThumbstickUp; } private Vector2 ApplyDeadZone(GamePadDeadZone deadZoneMode, float deadZone, Vector2 thumbstickPosition) { // XNA applies dead zones before rounding/clamping values. The public ctor does not allow this because the dead zone must be known before // Apply dead zone switch (deadZoneMode) { case GamePadDeadZone.None: break; case GamePadDeadZone.IndependentAxes: thumbstickPosition = ExcludeIndependentAxesDeadZone(thumbstickPosition, deadZone); break; case GamePadDeadZone.Circular: thumbstickPosition = ExcludeCircularDeadZone(thumbstickPosition, deadZone); break; } // Apply clamp if (deadZoneMode == GamePadDeadZone.Circular) { if (thumbstickPosition.LengthSquared() > 1f) thumbstickPosition.Normalize(); } else { thumbstickPosition = new Vector2(MathHelper.Clamp(thumbstickPosition.X, -1f, 1f), MathHelper.Clamp(thumbstickPosition.Y, -1f, 1f)); } return thumbstickPosition; } private Vector2 ExcludeIndependentAxesDeadZone(Vector2 value, float deadZone) { return new Vector2(ExcludeAxisDeadZone(value.X, deadZone), ExcludeAxisDeadZone(value.Y, deadZone)); } private float ExcludeAxisDeadZone(float value, float deadZone) { if (value < -deadZone) value += deadZone; else if (value > deadZone) value -= deadZone; else return 0f; return value / (1f - deadZone); } private Vector2 ExcludeCircularDeadZone(Vector2 value, float deadZone) { float originalLength = value.Length(); if (originalLength <= deadZone) return Vector2.Zero; float newLength = (originalLength - deadZone) / (1f - deadZone); return value * (newLength / originalLength); } /// /// Determines whether two specified instances of are equal. /// /// The first object to compare. /// The second object to compare. /// true if and are equal; otherwise, false. public static bool operator ==(GamePadThumbSticks left, GamePadThumbSticks right) { return (left.Left == right.Left) && (left.Right == right.Right); } /// /// Determines whether two specified instances of are not equal. /// /// The first object to compare. /// The second object to compare. /// true if and are not equal; otherwise, false. public static bool operator !=(GamePadThumbSticks left, GamePadThumbSticks right) { return !(left == right); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare to this instance. /// true if is a and has the same value as this instance; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadThumbSticks) && (this == (GamePadThumbSticks)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { unchecked { return (Left.GetHashCode() * 397) ^ Right.GetHashCode(); } } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[GamePadThumbSticks: Left=" + Left + ", Right=" + Right + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadTouchButtons.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022-2024 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Input { /// /// A struct that represents the current button states for the controller. /// public struct GamePadTouchButtons { internal readonly Buttons _buttons; internal readonly Buttons _touches; /// /// Gets a value indicating if the button A is pressed or Touched. /// public TouchButtonState A { get { if ((_buttons & Buttons.A) == Buttons.A) return TouchButtonState.Pressed; if ((_touches & Buttons.A) == Buttons.A) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the button B is pressed or Touched. /// public TouchButtonState B { get { if ((_buttons & Buttons.B) == Buttons.B) return TouchButtonState.Pressed; if ((_touches & Buttons.B) == Buttons.B) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the button Back is pressed or Touched. /// public TouchButtonState Back { get { if ((_buttons & Buttons.Back) == Buttons.Back) return TouchButtonState.Pressed; if ((_touches & Buttons.Back) == Buttons.Back) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the button X is pressed or Touched. /// public TouchButtonState X { get { if ((_buttons & Buttons.X) == Buttons.X) return TouchButtonState.Pressed; if ((_touches & Buttons.X) == Buttons.X) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the button Y is pressed or Touched. /// public TouchButtonState Y { get { if ((_buttons & Buttons.Y) == Buttons.Y) return TouchButtonState.Pressed; if ((_touches & Buttons.Y) == Buttons.Y) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the button Start is pressed or Touched. /// public TouchButtonState Start { get { if ((_buttons & Buttons.Start) == Buttons.Start) return TouchButtonState.Pressed; if ((_touches & Buttons.Start) == Buttons.Start) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the left shoulder button is pressed or Touched. /// public TouchButtonState LeftShoulder { get { if ((_buttons & Buttons.LeftShoulder) == Buttons.LeftShoulder) return TouchButtonState.Pressed; if ((_touches & Buttons.LeftShoulder) == Buttons.LeftShoulder) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the left grip button is pressed or Touched. /// public TouchButtonState LeftGrip { get { if ((_buttons & Buttons.LeftGrip) == Buttons.LeftGrip) return TouchButtonState.Pressed; if ((_touches & Buttons.LeftGrip) == Buttons.LeftGrip) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the left stick button is pressed or Touched. /// public TouchButtonState LeftStick { get { if ((_buttons & Buttons.LeftStick) == Buttons.LeftStick) return TouchButtonState.Pressed; if ((_touches & Buttons.LeftStick) == Buttons.LeftStick) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the left trigger button is pressed or Touched. /// public TouchButtonState LeftTrigger { get { if ((_buttons & Buttons.LeftTrigger) == Buttons.LeftTrigger) return TouchButtonState.Pressed; if ((_touches & Buttons.LeftTrigger) == Buttons.LeftTrigger) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the right shoulder button is pressed or Touched. /// public TouchButtonState RightShoulder { get { if ((_buttons & Buttons.RightShoulder) == Buttons.RightShoulder) return TouchButtonState.Pressed; if ((_touches & Buttons.RightShoulder) == Buttons.RightShoulder) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the right grip button is pressed or Touched. /// public TouchButtonState RightGrip { get { if ((_buttons & Buttons.RightGrip) == Buttons.RightGrip) return TouchButtonState.Pressed; if ((_touches & Buttons.RightGrip) == Buttons.RightGrip) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the right stick button is pressed or Touched. /// public TouchButtonState RightStick { get { if ((_buttons & Buttons.RightStick) == Buttons.RightStick) return TouchButtonState.Pressed; if ((_touches & Buttons.RightStick) == Buttons.RightStick) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the right trigger button is pressed or Touched. /// public TouchButtonState RightTrigger { get { if ((_buttons & Buttons.RightTrigger) == Buttons.RightTrigger) return TouchButtonState.Pressed; if ((_touches & Buttons.RightTrigger) == Buttons.RightTrigger) return TouchButtonState.Touched; return TouchButtonState.Released; } } /// /// Gets a value indicating if the guide button is pressed or Touched. /// public TouchButtonState BigButton { get { if ((_buttons & Buttons.BigButton) == Buttons.BigButton) return TouchButtonState.Pressed; if ((_touches & Buttons.BigButton) == Buttons.BigButton) return TouchButtonState.Touched; return TouchButtonState.Released; } } public GamePadTouchButtons(Buttons buttons, Buttons touches) { _buttons = buttons; _touches = touches; } /// /// Determines whether two specified instances of are equal. /// /// The first object to compare. /// The second object to compare. /// true if and are equal; otherwise, false. public static bool operator ==(GamePadTouchButtons left, GamePadTouchButtons right) { return left._buttons == right._buttons && left._touches == right._touches; } /// /// Determines whether two specified instances of are not equal. /// /// The first object to compare. /// The second object to compare. /// true if and are not equal; otherwise, false. public static bool operator !=(GamePadTouchButtons left, GamePadTouchButtons right) { return !(left == right); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare to this instance. /// true if is a and has the same value as this instance; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadTouchButtons) && (this == (GamePadTouchButtons)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { return (int)_buttons ^ (int)_touches; } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[GamePadButtons:" + " A=" + (int)A + ", B=" + (int)B + ", X=" + (int)X + ", Y=" + (int)Y + ", Start=" + (int)Start + ", Back=" + (int)Back + ", BigButton=" + (int)BigButton + ", LeftShoulder=" + (int)LeftShoulder + ", RightShoulder=" + (int)RightShoulder + ", LeftStick=" + (int)LeftStick + ", RightStick=" + (int)RightStick + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadTriggers.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// A struct that contains information on the left and the right trigger buttons. /// public struct GamePadTriggers { /// /// Gets the position of the left trigger. /// /// A value from 0.0f to 1.0f representing left trigger. public float Left { get; private set; } /// /// Gets the position of the right trigger. /// /// A value from 0.0f to 1.0f representing right trigger. public float Right { get; private set; } /// /// Initializes a new instance of the struct. /// /// The position of the left trigger, the value will get clamped between 0.0f and 1.0f. /// The position of the right trigger, the value will get clamped between 0.0f and 1.0f. public GamePadTriggers(float leftTrigger, float rightTrigger) : this() { Left = MathHelper.Clamp(leftTrigger, 0f, 1f); Right = MathHelper.Clamp(rightTrigger, 0f, 1f); } /// /// Determines whether two specified instances of are equal. /// /// The first object to compare. /// The second object to compare. /// true if and are equal; otherwise, false. public static bool operator ==(GamePadTriggers left, GamePadTriggers right) { return (left.Left == right.Left) && (left.Right == right.Right); } /// /// Determines whether two specified instances of are not equal. /// /// The first object to compare. /// The second object to compare. /// true if and are not equal; otherwise, false. public static bool operator !=(GamePadTriggers left, GamePadTriggers right) { return !(left == right); } /// /// Returns a value indicating whether this instance is equal to a specified object. /// /// An object to compare to this instance. /// true if is a and has the same value as this instance; otherwise, false. public override bool Equals(object obj) { return (obj is GamePadTriggers) && (this == (GamePadTriggers)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { unchecked { return (Left.GetHashCode() * 397) ^ Right.GetHashCode(); } } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[GamePadTriggers: Left=" + Left + ", Right=" + Right + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/GamePadType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// Defines a type of gamepad. /// public enum GamePadType { /// /// Unknown. /// Unknown, /// /// GamePad is the Xbox controller. /// GamePad, /// /// GamePad is a wheel. /// Wheel, /// /// GamePad is an arcade stick. /// ArcadeStick, /// /// GamePad is a flight stick. /// FlightStick, /// /// GamePad is a dance pad. /// DancePad, /// /// GamePad is a guitar. /// Guitar, /// /// GamePad is an alternate guitar. /// AlternateGuitar, /// /// GamePad is a drum kit. /// DrumKit, /// /// GamePad is a big button pad. /// BigButtonPad = 768 } } ================================================ FILE: src/Xna.Framework.Input/Input/InputFactory.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input { public abstract class InputFactory { private volatile static InputFactory _current; internal static InputFactory Current { get { InputFactory current = _current; if (current != null) return current; lock (typeof(InputFactory)) { if (_current != null) return _current; Console.WriteLine("InputFactory not found."); Console.WriteLine("Initialize input with 'InputFactory.RegisterInputFactory(new ConcreteInputFactory());'."); InputFactory inputFactory = CreateInputFactory(); InputFactory.RegisterInputFactory(inputFactory); } return _current; } } private static InputFactory CreateInputFactory() { Console.WriteLine("Registering ConcreteInputFactoryStrategy through reflection."); Type type = Type.GetType("Microsoft.Xna.Platform.Input.ConcreteInputFactory, Kni.Platform", false); if (type != null) if (type.IsSubclassOf(typeof(InputFactory)) && !type.IsAbstract) return (InputFactory)Activator.CreateInstance(type); return null; } public static void RegisterInputFactory(InputFactory inputFactory) { if (inputFactory == null) throw new NullReferenceException("inputFactory"); lock (typeof(InputFactory)) { if (_current == null) _current = inputFactory; else throw new InvalidOperationException("inputFactory allready registered."); } } public abstract TouchPanelStrategy CreateTouchPanelStrategy(); public abstract GamePadStrategy CreateGamePadStrategy(); public abstract JoystickStrategy CreateJoystickStrategy(); public abstract KeyboardStrategy CreateKeyboardStrategy(); public abstract MouseStrategy CreateMouseStrategy(); public abstract MouseCursorStrategy CreateMouseCursorStrategy(MouseCursorStrategy.MouseCursorType cursorType); public abstract MouseCursorStrategy CreateMouseCursorStrategy(byte[] data, int w, int h, int originx, int originy); public abstract KeyboardInputStrategy CreateKeyboardInputStrategy(); public abstract MessageBoxStrategy CreateMessageBoxStrategy(); } } ================================================ FILE: src/Xna.Framework.Input/Input/InputKeyEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Input { public class InputKeyEventArgs : EventArgs { /// /// The key that was either pressed or released. /// public readonly Keys Key; /// /// Create a new keyboard input event /// /// The key involved in this event public InputKeyEventArgs(Keys key) { Key = key; } } } ================================================ FILE: src/Xna.Framework.Input/Input/Joystick.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IJoystick { bool IsSupported { get; } int LastConnectedIndex { get; } JoystickCapabilities GetCapabilities(int index); JoystickState GetState(int index); void GetState(int index, ref JoystickState joystickState); } public interface IPlatformJoystick { T GetStrategy() where T : JoystickStrategy; } } namespace Microsoft.Xna.Framework.Input { /// /// Allows interaction with joysticks. Unlike the number of Buttons/Axes/DPads is not limited. /// public sealed class Joystick : IJoystick , IPlatformJoystick { private static Joystick _current; /// /// Returns the current Keyboard instance. /// public static Joystick Current { get { if (_current != null) return _current; lock (typeof(Joystick)) { if (_current == null) _current = new Joystick(); return _current; } } } /// /// Gets a value indicating whether the current platform supports reading raw joystick data. /// /// true if the current platform supports reading raw joystick data; otherwise, false. public static bool IsSupported { get { return ((IJoystick)Joystick.Current).IsSupported; } } /// /// Gets a value indicating the last joystick index connected to the system. If this value is less than 0, no joysticks are connected. /// The order joysticks are connected and disconnected determines their index. /// As such, this value may be larger than 0 even if only one joystick is connected. /// /// public static int LastConnectedIndex { get { return ((IJoystick)Joystick.Current).LastConnectedIndex; } } /// /// Gets the capabilities of the joystick. /// /// Index of the joystick you want to access. /// The capabilities of the joystick. public static JoystickCapabilities GetCapabilities(int index) { return ((IJoystick)Joystick.Current).GetCapabilities(index); } /// /// Gets the current state of the joystick. /// /// Index of the joystick you want to access. /// The state of the joystick. public static JoystickState GetState(int index) { return ((IJoystick)Joystick.Current).GetState(index); } /// /// Gets the current state of the joystick by updating an existing . /// /// The to update. /// Index of the joystick you want to access. public static void GetState(ref JoystickState joystickState, int index) { ((IJoystick)Joystick.Current).GetState(index, ref joystickState); } private JoystickStrategy _strategy; T IPlatformJoystick.GetStrategy() { return (T)_strategy; } private Joystick() { _strategy = InputFactory.Current.CreateJoystickStrategy(); } #region IJoystick bool IJoystick.IsSupported { get { return _strategy.PlatformIsSupported; } } /// /// Gets a value indicating the last joystick index connected to the system. If this value is less than 0, no joysticks are connected. /// The order joysticks are connected and disconnected determines their index. /// As such, this value may be larger than 0 even if only one joystick is connected. /// /// int IJoystick.LastConnectedIndex { get { return _strategy.PlatformLastConnectedIndex; } } /// /// Gets the capabilities of the joystick. /// /// Index of the joystick you want to access. /// The capabilities of the joystick. JoystickCapabilities IJoystick.GetCapabilities(int index) { return _strategy.PlatformGetCapabilities(index); } /// /// Gets the current state of the joystick. /// /// Index of the joystick you want to access. /// The state of the joystick. JoystickState IJoystick.GetState(int index) { return _strategy.PlatformGetState(index); } /// /// Gets the current state of the joystick by updating an existing . /// /// The to update. /// Index of the joystick you want to access. void IJoystick.GetState(int index, ref JoystickState joystickState) { _strategy.PlatformGetState(index, ref joystickState); } #endregion } } ================================================ FILE: src/Xna.Framework.Input/Input/JoystickCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// Describes joystick capabilities. /// public struct JoystickCapabilities { /// /// Gets a value indicating whether the joystick is connected. /// /// true if the joystick is connected; otherwise, false. public bool IsConnected { get; internal set; } /// /// Gets the unique identifier of the joystick. /// /// String representing the unique identifier of the joystick. public string Identifier { get; internal set; } /// /// Gets the joystick's display name. /// /// String representing the display name of the joystick. public string DisplayName { get; internal set; } /// /// Gets a value indicating if the joystick is a gamepad. /// /// true if the joystick is a gamepad; otherwise, false. public bool IsGamepad { get; internal set; } /// /// Gets the axis count. /// /// The number of axes that the joystick possesses. public int AxisCount { get; internal set; } /// /// Gets the button count. /// /// The number of buttons that the joystick possesses. public int ButtonCount { get; internal set; } /// /// Gets the hat count. /// /// The number of hats/dpads that the joystick possesses. public int HatCount { get; internal set; } /// /// Determines whether a specified instance of /// is equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are equal; otherwise, false. public static bool operator ==(JoystickCapabilities left, JoystickCapabilities right) { return left.IsConnected == right.IsConnected && left.Identifier == right.Identifier && left.IsGamepad == right.IsGamepad && left.AxisCount == right.AxisCount && left.ButtonCount == right.ButtonCount && left.HatCount == right.HatCount; } /// /// Determines whether a specified instance of /// is not equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are not equal; otherwise, false. public static bool operator !=(JoystickCapabilities left, JoystickCapabilities right) { return !(left == right); } /// /// Determines whether the specified is equal to the current . /// /// The to compare with the current . /// true if the specified is equal to the current /// ; otherwise, false. public override bool Equals(object obj) { return (obj is JoystickCapabilities) && (this == (JoystickCapabilities)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { return Identifier.GetHashCode(); } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return "[JoystickCapabilities: IsConnected=" + IsConnected + ", Identifier=" + Identifier + ", DisplayName=" + DisplayName + ", IsGamepad=" + IsGamepad + " , AxisCount=" + AxisCount + ", ButtonCount=" + ButtonCount + ", HatCount=" + HatCount + "]"; } } } ================================================ FILE: src/Xna.Framework.Input/Input/JoystickHat.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos namespace Microsoft.Xna.Framework.Input { /// /// Describes joystick hat state. /// public struct JoystickHat { private readonly Buttons _dPadButtons; internal JoystickHat(Buttons dPadButtons) { this._dPadButtons = dPadButtons; } /// /// Gets if joysticks hat "down" is pressed. /// /// if the button is pressed otherwise, . public ButtonState Down { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadDown) >> 1); } } /// /// Gets if joysticks hat "left" is pressed. /// /// if the button is pressed otherwise, . public ButtonState Left { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadLeft) >> 2); } } /// /// Gets if joysticks hat "right" is pressed. /// /// if the button is pressed otherwise, . public ButtonState Right { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadRight) >> 3); } } /// /// Gets if joysticks hat "up" is pressed. /// /// if the button is pressed otherwise, . public ButtonState Up { get { return (ButtonState)((int)(_dPadButtons & Buttons.DPadUp) >> 0); } } /// /// Determines whether a specified instance of is equal /// to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are equal; otherwise, false. public static bool operator ==(JoystickHat left, JoystickHat right) { return (left._dPadButtons == right._dPadButtons); } /// /// Determines whether a specified instance of is not /// equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are not equal; otherwise, false. public static bool operator !=(JoystickHat left, JoystickHat right) { return !(left == right); } /// /// Determines whether the specified is equal to the current . /// /// The to compare with the current . /// true if the specified is equal to the current /// ; otherwise, false. public override bool Equals(object obj) { return (obj is JoystickHat) && (this == (JoystickHat)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { int hash = 0; hash |= (int)_dPadButtons; return hash; } /// /// Returns a that represents the current in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. /// /// A that represents the current . public override string ToString() { return string.Format("{{ Left: {0}, Up: {1}, Right: {2}, Down: {3} }}", (int)Left, (int)Up, (int)Right, (int)Down); } } } ================================================ FILE: src/Xna.Framework.Input/Input/JoystickState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Linq; using System.Text; namespace Microsoft.Xna.Framework.Input { /// /// Describes current joystick state. /// public struct JoystickState { /// /// Gets a value indicating whether the joystick is connected. /// /// true if the joystick is connected; otherwise, false. public bool IsConnected { get; internal set; } /// /// Gets the joystick axis values. /// /// An array list of ints that indicate axis values. public int[] Axes { get; internal set; } /// /// Gets the joystick button values. /// /// An array list of ButtonState that indicate button values. public ButtonState[] Buttons { get; internal set; } /// /// Gets the joystick hat values. /// /// An array list of that indicate hat values. public JoystickHat[] Hats{ get; internal set; } /// /// Determines whether a specified instance of is /// equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are equal; otherwise, false. public static bool operator ==(JoystickState left, JoystickState right) { return left.IsConnected == right.IsConnected && left.Axes.SequenceEqual(right.Axes) && left.Buttons.SequenceEqual(right.Buttons) && left.Hats.SequenceEqual(right.Hats); } /// /// Determines whether a specified instance of is not /// equal to another specified . /// /// The first to compare. /// The second to compare. /// true if left and right are not equal; otherwise, false. public static bool operator !=(JoystickState left, JoystickState right) { return !(left == right); } /// /// Determines whether the specified is equal to the current . /// /// The to compare with the current . /// true if the specified is equal to the current /// ; otherwise, false. public override bool Equals(object obj) { return (obj is JoystickState) && (this == (JoystickState)obj); } /// /// Serves as a hash function for a object. /// /// A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a /// hash table. public override int GetHashCode() { int hash = 0; if (IsConnected) { unchecked { foreach (var axis in Axes) hash = (hash * 397) ^ axis; for (int i = 0; i < Buttons.Length; i++) hash = hash ^ ((int)Buttons[i] << (i % 32)); foreach (var hat in Hats) hash = (hash * 397) ^ hat.GetHashCode(); } } return hash; } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { StringBuilder ret = new StringBuilder(54 - 2 + Axes.Length * 7 + Buttons.Length + Hats.Length * 5); ret.Append("[JoystickState: IsConnected=" + (IsConnected ? 1 : 0)); if (IsConnected) { ret.Append(", Axes="); foreach (var axis in Axes) ret.Append((axis > 0 ? "+" : "") + axis.ToString("00000") + " "); ret.Length--; ret.Append(", Buttons="); foreach (var button in Buttons) ret.Append((int)button); ret.Append(", Hats="); foreach (var hat in Hats) ret.Append(hat + " "); ret.Length--; } ret.Append("]"); return ret.ToString(); } } } ================================================ FILE: src/Xna.Framework.Input/Input/JoystickStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class JoystickStrategy { public abstract bool PlatformIsSupported { get; } public abstract int PlatformLastConnectedIndex { get; } public abstract JoystickCapabilities PlatformGetCapabilities(int index); public abstract JoystickState PlatformGetState(int index); public abstract void PlatformGetState(int index, ref JoystickState joystickState); protected JoystickCapabilities CreateJoystickCapabilities( bool isConnected, string displayName, string identifier, bool isGamepad, int axisCount, int buttonCount, int hatCount) { JoystickCapabilities caps = new JoystickCapabilities(); caps.IsConnected = isConnected; caps.DisplayName = displayName; caps.Identifier = identifier; caps.IsGamepad = isGamepad; caps.AxisCount = axisCount; caps.ButtonCount = buttonCount; caps.HatCount = hatCount; return caps; } protected JoystickState CreateJoystickState(bool isConnected, int[] axes, ButtonState[] buttons, JoystickHat[] hats) { JoystickState state = new JoystickState(); state.IsConnected = isConnected; state.Axes = axes; state.Buttons = buttons; state.Hats = hats; return state; } protected JoystickHat CreateJoystickHat(Buttons dPadButtons) { return new JoystickHat(dPadButtons); } /// /// A default . /// protected static JoystickState DefaultJoystickState = new JoystickState { IsConnected = false, Axes = new int[0], Buttons = new ButtonState[0], Hats = new JoystickHat[0] }; } } ================================================ FILE: src/Xna.Framework.Input/Input/KeyState.cs ================================================ #region License // /* // Microsoft Public License (Ms-PL) // MonoGame - Copyright © 2009 The MonoGame Team // // All rights reserved. // // This license governs use of the accompanying software. If you use the software, you accept this license. If you do not // accept the license, do not use the software. // // 1. Definitions // The terms "reproduce, " "reproduction, " "derivative works, " and "distribution" have the same meaning here as under // U.S. copyright law. // // A "contribution" is the original software, or any additions or changes to the software. // A "contributor" is any person that distributes its contribution under this license. // "Licensed patents" are a contributor's patent claims that read directly on its contribution. // // 2. Grant of Rights // (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, // each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. // (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, // each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. // // 3. Conditions and Limitations // (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. // (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, // your patent license from such contributor to the software ends automatically. // (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution // notices that are present in the software. // (D) If you distribute any portion of the software in source code form, you may do so only under this license by including // a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object // code form, you may only do so under a license that complies with this license. // (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees // or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent // permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular // purpose and non-infringement. // */ #endregion License namespace Microsoft.Xna.Framework.Input { /// /// Identifies the state of a keyboard key. /// public enum KeyState { /// /// Key is released. /// Up, /// /// Key is pressed. /// Down, } } ================================================ FILE: src/Xna.Framework.Input/Input/Keyboard.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IKeyboard { KeyboardState GetState(); } public interface IPlatformKeyboard { T GetStrategy() where T : KeyboardStrategy; } } namespace Microsoft.Xna.Framework.Input { /// /// Allows getting keystrokes from keyboard. /// public sealed class Keyboard : IKeyboard , IPlatformKeyboard { private static Keyboard _current; /// /// Returns the current Keyboard instance. /// public static Keyboard Current { get { if (_current != null) return _current; lock (typeof(Keyboard)) { if (_current == null) _current = new Keyboard(); return _current; } } } /// /// Returns the current keyboard state. /// /// Current keyboard state. public static KeyboardState GetState() { return ((IKeyboard)Keyboard.Current).GetState(); } /// /// Returns the current keyboard state for a given player. /// /// Player index of the keyboard. /// Current keyboard state. [Obsolete("Use GetState() instead. In future versions this method can be removed.")] public static KeyboardState GetState(PlayerIndex playerIndex) { return ((IKeyboard)Keyboard.Current).GetState(); } private KeyboardStrategy _strategy; T IPlatformKeyboard.GetStrategy() { return (T)_strategy; } private Keyboard() { _strategy = InputFactory.Current.CreateKeyboardStrategy(); } #region IKeyboard KeyboardState IKeyboard.GetState() { return _strategy.PlatformGetState(); } #endregion IKeyboard } } ================================================ FILE: src/Xna.Framework.Input/Input/KeyboardInput.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IKeyboardInput { bool IsVisible { get; } #if !NET40 Task Show(string title, string description, string defaultText = "", bool usePasswordMode = false); #endif void Cancel(string result); } public interface IPlatformKeyboardInput { T GetStrategy() where T : KeyboardInputStrategy; } } namespace Microsoft.Xna.Framework.Input { public sealed class KeyboardInput : IKeyboardInput , IPlatformKeyboardInput { private static KeyboardInput _current; /// /// Returns the current Mouse instance. /// public static KeyboardInput Current { get { if (_current != null) return _current; lock (typeof(KeyboardInput)) { if (_current == null) _current = new KeyboardInput(); return _current; } } } public static bool IsVisible { get { return ((IKeyboardInput)KeyboardInput.Current).IsVisible; } } #if !NET40 /// /// Displays the keyboard input interface asynchronously. /// /// Title of the dialog box. /// Description of the dialog box. /// Default text displayed in the input area. /// If password mode is enabled, the characters entered are not displayed. /// Text entered by the player. Null if back was used. /// Thrown when the message box is already visible /// /// /// var name = await KeyboardInput.Show("Name", "What's your name?", "Player"); /// /// public static async Task Show(string title, string description, string defaultText = "", bool usePasswordMode = false) { return await ((IKeyboardInput)KeyboardInput.Current).Show(title, description, defaultText, usePasswordMode); } #endif /// /// Hides the keyboard input interface and returns the parameter as the result of /// /// Result to return /// Thrown when the keyboard input is not visible /// /// /// var nameTask = KeyboardInput.Show("Name", "What's your name?", "Player"); /// KeyboardInput.Cancel("John Doe"); /// var name = await nameTask; /// /// public static void Cancel(string result) { ((IKeyboardInput)KeyboardInput.Current).Cancel(result); } private KeyboardInputStrategy _strategy; T IPlatformKeyboardInput.GetStrategy() { return (T)_strategy; } private KeyboardInput() { _strategy = InputFactory.Current.CreateKeyboardInputStrategy(); } #region IKeyboardInput private bool _isVisible; bool IKeyboardInput.IsVisible { get { return _isVisible; } } #if !NET40 async Task IKeyboardInput.Show(string title, string description, string defaultText = "", bool usePasswordMode = false) { if (IsVisible) throw new Exception("The function cannot be completed at this time: the KeyboardInput UI is already active. Wait until KeyboardInput.IsVisible is false before issuing this call."); _isVisible = true; string result = await _strategy.PlatformShow(title, description, defaultText, usePasswordMode); _isVisible = false; return result; } #endif void IKeyboardInput.Cancel(string result) { if (!IsVisible) throw new Exception("The function cannot be completed at this time: the MessageBox UI is not active."); _strategy.PlatformCancel(result); } #endregion IKeyboardInput } } ================================================ FILE: src/Xna.Framework.Input/Input/KeyboardInputStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class KeyboardInputStrategy { public abstract void PlatformCancel(string result); public abstract Task PlatformShow(string title, string description, string defaultText, bool usePasswordMode); } } ================================================ FILE: src/Xna.Framework.Input/Input/KeyboardState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System.Collections.Generic; namespace Microsoft.Xna.Framework.Input { /// /// Holds the state of keystrokes by a keyboard. /// public struct KeyboardState { private const byte CapsLockBit = 1; private const byte NumLockBit = 2; // Used for the common situation where GetPressedKeys will return an empty array private static Keys[] _empty = new Keys[0]; #region Key Data // Array of 256 bits: private uint _keys0, _keys1, _keys2, _keys3, _keys4, _keys5, _keys6, _keys7; private byte _modifiers; bool InternalGetKey(Keys key) { uint mask = (uint)1 << (((int)key) & 0x1f); uint element; switch (((int)key) >> 5) { case 0: element = _keys0; break; case 1: element = _keys1; break; case 2: element = _keys2; break; case 3: element = _keys3; break; case 4: element = _keys4; break; case 5: element = _keys5; break; case 6: element = _keys6; break; case 7: element = _keys7; break; default: element = 0; break; } return (element & mask) != 0; } internal void InternalSetKey(Keys key) { uint mask = (uint)1 << (((int)key) & 0x1f); switch (((int)key) >> 5) { case 0: _keys0 |= mask; break; case 1: _keys1 |= mask; break; case 2: _keys2 |= mask; break; case 3: _keys3 |= mask; break; case 4: _keys4 |= mask; break; case 5: _keys5 |= mask; break; case 6: _keys6 |= mask; break; case 7: _keys7 |= mask; break; } } internal void InternalResetKey(Keys key) { uint mask = (uint)1 << (((int)key) & 0x1f); switch (((int)key) >> 5) { case 0: _keys0 &= ~mask; break; case 1: _keys1 &= ~mask; break; case 2: _keys2 &= ~mask; break; case 3: _keys3 &= ~mask; break; case 4: _keys4 &= ~mask; break; case 5: _keys5 &= ~mask; break; case 6: _keys6 &= ~mask; break; case 7: _keys7 &= ~mask; break; } } internal void InternalResetKeys() { _keys0 = 0; _keys1 = 0; _keys2 = 0; _keys3 = 0; _keys4 = 0; _keys5 = 0; _keys6 = 0; _keys7 = 0; } #endregion #region XNA Interface internal KeyboardState(List keys, bool capsLock = false, bool numLock = false) : this() { _keys0 = 0; _keys1 = 0; _keys2 = 0; _keys3 = 0; _keys4 = 0; _keys5 = 0; _keys6 = 0; _keys7 = 0; _modifiers = (byte)(0 | (capsLock ? CapsLockBit : 0) | (numLock ? NumLockBit : 0)); if (keys != null) { for (int i = 0; i < keys.Count; i++) InternalSetKey(keys[i]); } } /// /// Initializes a new instance of the class. /// /// List of keys to be flagged as pressed on initialization. /// Caps Lock state. /// Num Lock state. public KeyboardState(Keys[] keys, bool capsLock = false, bool numLock = false) : this() { _keys0 = 0; _keys1 = 0; _keys2 = 0; _keys3 = 0; _keys4 = 0; _keys5 = 0; _keys6 = 0; _keys7 = 0; _modifiers = (byte)(0 | (capsLock ? CapsLockBit : 0) | (numLock ? NumLockBit : 0)); if (keys != null) { for (int i = 0; i < keys.Length; i++) InternalSetKey(keys[i]); } } /// /// Initializes a new instance of the class. /// /// List of keys to be flagged as pressed on initialization. public KeyboardState(params Keys[] keys) : this() { _keys0 = 0; _keys1 = 0; _keys2 = 0; _keys3 = 0; _keys4 = 0; _keys5 = 0; _keys6 = 0; _keys7 = 0; _modifiers = 0; if (keys != null) { for (int i = 0; i < keys.Length; i++) InternalSetKey(keys[i]); } } /// /// Gets the current state of the Caps Lock key. /// public bool CapsLock { get { return (_modifiers & CapsLockBit) > 0; } } /// /// Gets the current state of the Num Lock key. /// public bool NumLock { get { return (_modifiers & NumLockBit) > 0; } } /// /// Returns the state of a specified key. /// /// The key to query. /// The state of the key. public KeyState this[Keys key] { get { return InternalGetKey(key) ? KeyState.Down : KeyState.Up; } } /// /// Gets whether given key is currently being pressed. /// /// The key to query. /// true if the key is pressed; false otherwise. public bool IsKeyDown(Keys key) { return InternalGetKey(key); } /// /// Gets whether given key is currently being not pressed. /// /// The key to query. /// true if the key is not pressed; false otherwise. public bool IsKeyUp(Keys key) { return !InternalGetKey(key); } #endregion #region GetPressedKeys() /// /// Returns the number of pressed keys in this . /// /// An integer representing the number of keys currently pressed in this . public int GetPressedKeyCount() { uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3) + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7); return (int)count; } private static uint CountBits(uint v) { // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel v = v - ((v >> 1) & 0x55555555); // reuse input as temporary v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count } private static int AddKeysToArray(uint keys, int offset, Keys[] pressedKeys, int index) { for (int i = 0; i < 32; i++) { if ((keys & (1 << i)) != 0) pressedKeys[index++] = (Keys)(offset + i); } return index; } /// /// Returns an array of values holding keys that are currently being pressed. /// /// The keys that are currently being pressed. public Keys[] GetPressedKeys() { uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3) + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7); if (count == 0) return _empty; Keys[] keys = new Keys[count]; int index = 0; if (_keys0 != 0) index = AddKeysToArray(_keys0, 0 * 32, keys, index); if (_keys1 != 0) index = AddKeysToArray(_keys1, 1 * 32, keys, index); if (_keys2 != 0) index = AddKeysToArray(_keys2, 2 * 32, keys, index); if (_keys3 != 0) index = AddKeysToArray(_keys3, 3 * 32, keys, index); if (_keys4 != 0) index = AddKeysToArray(_keys4, 4 * 32, keys, index); if (_keys5 != 0) index = AddKeysToArray(_keys5, 5 * 32, keys, index); if (_keys6 != 0) index = AddKeysToArray(_keys6, 6 * 32, keys, index); if (_keys7 != 0) index = AddKeysToArray(_keys7, 7 * 32, keys, index); return keys; } /// /// Fills an array of values holding keys that are currently being pressed. /// /// The keys array to fill. /// This array is not cleared, and it must be equal to or larger than the number of keys pressed. public void GetPressedKeys(Keys[] keys) { if (keys == null) throw new System.ArgumentNullException("keys"); uint count = CountBits(_keys0) + CountBits(_keys1) + CountBits(_keys2) + CountBits(_keys3) + CountBits(_keys4) + CountBits(_keys5) + CountBits(_keys6) + CountBits(_keys7); if (count > keys.Length) { throw new System.ArgumentOutOfRangeException("keys", "The supplied array cannot fit the number of pressed keys. Call GetPressedKeyCount() to get the number of pressed keys."); } int index = 0; if (_keys0 != 0 && index < keys.Length) index = AddKeysToArray(_keys0, 0 * 32, keys, index); if (_keys1 != 0 && index < keys.Length) index = AddKeysToArray(_keys1, 1 * 32, keys, index); if (_keys2 != 0 && index < keys.Length) index = AddKeysToArray(_keys2, 2 * 32, keys, index); if (_keys3 != 0 && index < keys.Length) index = AddKeysToArray(_keys3, 3 * 32, keys, index); if (_keys4 != 0 && index < keys.Length) index = AddKeysToArray(_keys4, 4 * 32, keys, index); if (_keys5 != 0 && index < keys.Length) index = AddKeysToArray(_keys5, 5 * 32, keys, index); if (_keys6 != 0 && index < keys.Length) index = AddKeysToArray(_keys6, 6 * 32, keys, index); if (_keys7 != 0 && index < keys.Length) index = AddKeysToArray(_keys7, 7 * 32, keys, index); } #endregion #region Object and Equality /// /// Gets the hash code for instance. /// /// Hash code of the object. public override int GetHashCode() { return (int)(_keys0 ^ _keys1 ^ _keys2 ^ _keys3 ^ _keys4 ^ _keys5 ^ _keys6 ^ _keys7); } /// /// Compares whether two instances are equal. /// /// instance to the left of the equality operator. /// instance to the right of the equality operator. /// true if the instances are equal; false otherwise. public static bool operator ==(KeyboardState left, KeyboardState right) { return left._keys0 == right._keys0 && left._keys1 == right._keys1 && left._keys2 == right._keys2 && left._keys3 == right._keys3 && left._keys4 == right._keys4 && left._keys5 == right._keys5 && left._keys6 == right._keys6 && left._keys7 == right._keys7; } /// /// Compares whether two instances are not equal. /// /// instance to the left of the inequality operator. /// instance to the right of the inequality operator. /// true if the instances are different; false otherwise. public static bool operator !=(KeyboardState left, KeyboardState right) { return !(left == right); } /// /// Compares whether current instance is equal to specified object. /// /// The to compare. /// true if the provided instance is same with current; false otherwise. public override bool Equals(object obj) { return (obj is KeyboardState && this == (KeyboardState)obj); } #endregion } } ================================================ FILE: src/Xna.Framework.Input/Input/KeyboardStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class KeyboardStrategy { public abstract KeyboardState PlatformGetState(); protected KeyboardState CreateKeyboardState(List keys, bool capsLock = false, bool numLock = false) { return new KeyboardState(keys, capsLock, numLock); } protected void InternalSetKey(ref KeyboardState keyboardState, Keys key) { keyboardState.InternalSetKey(key); } protected void InternalResetKey(ref KeyboardState keyboardState, Keys key) { keyboardState.InternalResetKey(key); } protected void InternalResetKeys(ref KeyboardState keyboardState) { keyboardState.InternalResetKeys(); } } } ================================================ FILE: src/Xna.Framework.Input/Input/Keys.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// Defines the keys on a keyboard. /// public enum Keys { /// /// Reserved. /// None = 0, /// /// BACKSPACE key. /// Back = 8, /// /// TAB key. /// Tab = 9, /// /// ENTER key. /// Enter = 13, /// /// CAPS LOCK key. /// CapsLock = 20, /// /// ESC key. /// Escape = 27, /// /// SPACEBAR key. /// Space = 32, /// /// PAGE UP key. /// PageUp = 33, /// /// PAGE DOWN key. /// PageDown = 34, /// /// END key. /// End = 35, /// /// HOME key. /// Home = 36, /// /// LEFT ARROW key. /// Left = 37, /// /// UP ARROW key. /// Up = 38, /// /// RIGHT ARROW key. /// Right = 39, /// /// DOWN ARROW key. /// Down = 40, /// /// SELECT key. /// Select = 41, /// /// PRINT key. /// Print = 42, /// /// EXECUTE key. /// Execute = 43, /// /// PRINT SCREEN key. /// PrintScreen = 44, /// /// INS key. /// Insert = 45, /// /// DEL key. /// Delete = 46, /// /// HELP key. /// Help = 47, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D0 = 48, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D1 = 49, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D2 = 50, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D3 = 51, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D4 = 52, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D5 = 53, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D6 = 54, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D7 = 55, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D8 = 56, /// /// Used for miscellaneous characters; it can vary by keyboard. /// D9 = 57, /// /// A key. /// A = 65, /// /// B key. /// B = 66, /// /// C key. /// C = 67, /// /// D key. /// D = 68, /// /// E key. /// E = 69, /// /// F key. /// F = 70, /// /// G key. /// G = 71, /// /// H key. /// H = 72, /// /// I key. /// I = 73, /// /// J key. /// J = 74, /// /// K key. /// K = 75, /// /// L key. /// L = 76, /// /// M key. /// M = 77, /// /// N key. /// N = 78, /// /// O key. /// O = 79, /// /// P key. /// P = 80, /// /// Q key. /// Q = 81, /// /// R key. /// R = 82, /// /// S key. /// S = 83, /// /// T key. /// T = 84, /// /// U key. /// U = 85, /// /// V key. /// V = 86, /// /// W key. /// W = 87, /// /// X key. /// X = 88, /// /// Y key. /// Y = 89, /// /// Z key. /// Z = 90, /// /// Left Windows key. /// LeftWindows = 91, /// /// Right Windows key. /// RightWindows = 92, /// /// Applications key. /// Apps = 93, /// /// Computer Sleep key. /// Sleep = 95, /// /// Numeric keypad 0 key. /// NumPad0 = 96, /// /// Numeric keypad 1 key. /// NumPad1 = 97, /// /// Numeric keypad 2 key. /// NumPad2 = 98, /// /// Numeric keypad 3 key. /// NumPad3 = 99, /// /// Numeric keypad 4 key. /// NumPad4 = 100, /// /// Numeric keypad 5 key. /// NumPad5 = 101, /// /// Numeric keypad 6 key. /// NumPad6 = 102, /// /// Numeric keypad 7 key. /// NumPad7 = 103, /// /// Numeric keypad 8 key. /// NumPad8 = 104, /// /// Numeric keypad 9 key. /// NumPad9 = 105, /// /// Multiply key. /// Multiply = 106, /// /// Add key. /// Add = 107, /// /// Separator key. /// Separator = 108, /// /// Subtract key. /// Subtract = 109, /// /// Decimal key. /// Decimal = 110, /// /// Divide key. /// Divide = 111, /// /// F1 key. /// F1 = 112, /// /// F2 key. /// F2 = 113, /// /// F3 key. /// F3 = 114, /// /// F4 key. /// F4 = 115, /// /// F5 key. /// F5 = 116, /// /// F6 key. /// F6 = 117, /// /// F7 key. /// F7 = 118, /// /// F8 key. /// F8 = 119, /// /// F9 key. /// F9 = 120, /// /// F10 key. /// F10 = 121, /// /// F11 key. /// F11 = 122, /// /// F12 key. /// F12 = 123, /// /// F13 key. /// F13 = 124, /// /// F14 key. /// F14 = 125, /// /// F15 key. /// F15 = 126, /// /// F16 key. /// F16 = 127, /// /// F17 key. /// F17 = 128, /// /// F18 key. /// F18 = 129, /// /// F19 key. /// F19 = 130, /// /// F20 key. /// F20 = 131, /// /// F21 key. /// F21 = 132, /// /// F22 key. /// F22 = 133, /// /// F23 key. /// F23 = 134, /// /// F24 key. /// F24 = 135, /// /// NUM LOCK key. /// NumLock = 144, /// /// SCROLL LOCK key. /// Scroll = 145, /// /// Left SHIFT key. /// LeftShift = 160, /// /// Right SHIFT key. /// RightShift = 161, /// /// Left CONTROL key. /// LeftControl = 162, /// /// Right CONTROL key. /// RightControl = 163, /// /// Left ALT key. /// LeftAlt = 164, /// /// Right ALT key. /// RightAlt = 165, /// /// Browser Back key. /// BrowserBack = 166, /// /// Browser Forward key. /// BrowserForward = 167, /// /// Browser Refresh key. /// BrowserRefresh = 168, /// /// Browser Stop key. /// BrowserStop = 169, /// /// Browser Search key. /// BrowserSearch = 170, /// /// Browser Favorites key. /// BrowserFavorites = 171, /// /// Browser Start and Home key. /// BrowserHome = 172, /// /// Volume Mute key. /// VolumeMute = 173, /// /// Volume Down key. /// VolumeDown = 174, /// /// Volume Up key. /// VolumeUp = 175, /// /// Next Track key. /// MediaNextTrack = 176, /// /// Previous Track key. /// MediaPreviousTrack = 177, /// /// Stop Media key. /// MediaStop = 178, /// /// Play/Pause Media key. /// MediaPlayPause = 179, /// /// Start Mail key. /// LaunchMail = 180, /// /// Select Media key. /// SelectMedia = 181, /// /// Start Application 1 key. /// LaunchApplication1 = 182, /// /// Start Application 2 key. /// LaunchApplication2 = 183, /// /// The OEM Semicolon key on a US standard keyboard. /// OemSemicolon = 186, /// /// For any country/region, the '+' key. /// OemPlus = 187, /// /// For any country/region, the ',' key. /// OemComma = 188, /// /// For any country/region, the '-' key. /// OemMinus = 189, /// /// For any country/region, the '.' key. /// OemPeriod = 190, /// /// The OEM question mark key on a US standard keyboard. /// OemQuestion = 191, /// /// The OEM tilde key on a US standard keyboard. /// OemTilde = 192, /// /// The OEM open bracket key on a US standard keyboard. /// OemOpenBrackets = 219, /// /// The OEM pipe key on a US standard keyboard. /// OemPipe = 220, /// /// The OEM close bracket key on a US standard keyboard. /// OemCloseBrackets = 221, /// /// The OEM singled/double quote key on a US standard keyboard. /// OemQuotes = 222, /// /// Used for miscellaneous characters; it can vary by keyboard. /// Oem8 = 223, /// /// The OEM angle bracket or backslash key on the RT 102 key keyboard. /// OemBackslash = 226, /// /// IME PROCESS key. /// ProcessKey = 229, /// /// Attn key. /// Attn = 246, /// /// CrSel key. /// Crsel = 247, /// /// ExSel key. /// Exsel = 248, /// /// Erase EOF key. /// EraseEof = 249, /// /// Play key. /// Play = 250, /// /// Zoom key. /// Zoom = 251, /// /// PA1 key. /// Pa1 = 253, /// /// CLEAR key. /// OemClear = 254, /// /// Green ChatPad key. /// ChatPadGreen = 0xCA, /// /// Orange ChatPad key. /// ChatPadOrange = 0xCB, /// /// PAUSE key. /// Pause = 0x13, /// /// IME Convert key. /// ImeConvert = 0x1c, /// /// IME NoConvert key. /// ImeNoConvert = 0x1d, /// /// Kana key on Japanese keyboards. /// Kana = 0x15, /// /// Kanji key on Japanese keyboards. /// Kanji = 0x19, /// /// OEM Auto key. /// OemAuto = 0xf3, /// /// OEM Copy key. /// OemCopy = 0xf2, /// /// OEM Enlarge Window key. /// OemEnlW = 0xf4 } } ================================================ FILE: src/Xna.Framework.Input/Input/MessageBox.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IMessageBox { bool IsVisible { get; } #if !NET40 Task Show(string title, string description, IEnumerable buttons); #endif void Cancel(int? result); } public interface IPlatformMessageBox { T GetStrategy() where T : MessageBoxStrategy; } } namespace Microsoft.Xna.Framework.Input { public sealed partial class MessageBox : IMessageBox , IPlatformMessageBox { private static MessageBox _current; /// /// Returns the current Mouse instance. /// public static MessageBox Current { get { if (_current != null) return _current; lock (typeof(MessageBox)) { if (_current == null) _current = new MessageBox(); return _current; } } } public static bool IsVisible { get { return ((IMessageBox)MessageBox.Current).IsVisible; } } #if !NET40 /// /// Displays the message box interface asynchronously. /// /// Title of the message box. /// Description of the message box. /// Captions of the message box buttons. Up to three supported. /// Index of button selected by the player. Null if back was used. /// Thrown when the message box is already visible /// /// /// var color = await MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); /// /// public static async Task Show(string title, string description, IEnumerable buttons) { return await ((IMessageBox)MessageBox.Current).Show(title, description, buttons); } #endif /// /// Hides the message box interface and returns the parameter as the result of /// /// Result to return /// Thrown when the message box is not visible /// /// /// var colorTask = MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); /// MessageBox.Cancel(0); /// var color = await colorTask; /// /// public static void Cancel(int? result) { ((IMessageBox)MessageBox.Current).Cancel(result); } private MessageBoxStrategy _strategy; T IPlatformMessageBox.GetStrategy() { return (T)_strategy; } private MessageBox() { _strategy = InputFactory.Current.CreateMessageBoxStrategy(); } #region IMessageBox private static bool _isVisible; bool IMessageBox.IsVisible { get { return _isVisible; } } #if !NET40 async Task IMessageBox.Show(string title, string description, IEnumerable buttons) { if (IsVisible) throw new Exception("The function cannot be completed at this time: the MessageBox UI is already active. Wait until MessageBox.IsVisible is false before issuing this call."); _isVisible = true; List buttonsList = buttons.ToList(); if (buttonsList.Count > 3 || buttonsList.Count == 0) throw new ArgumentException("Invalid number of buttons: one to three required", "buttons"); int? result = await _strategy.PlatformShow(title, description, buttonsList); _isVisible = false; return result; } #endif void IMessageBox.Cancel(int? result) { if (!IsVisible) throw new Exception("The function cannot be completed at this time: the MessageBox UI is not active."); _strategy.PlatformCancel(result); } #endregion IMessageBox } } ================================================ FILE: src/Xna.Framework.Input/Input/MessageBoxStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class MessageBoxStrategy { public abstract void PlatformCancel(int? result); public abstract Task PlatformShow(string title, string description, List buttonsList); } } ================================================ FILE: src/Xna.Framework.Input/Input/Mouse.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021-2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IMouse { IntPtr WindowHandle { get; set; } bool IsRawInputAvailable { get; } MouseState GetState(); void SetPosition(int x, int y); void SetCursor(MouseCursor cursor); } public interface IPlatformMouse { T GetStrategy() where T : MouseStrategy; } } namespace Microsoft.Xna.Framework.Input { /// /// Allows reading position and button click information from mouse. /// public sealed class Mouse : IMouse , IPlatformMouse { private static Mouse _current; private MouseCursor _mouseCursor; /// /// Returns the current Mouse instance. /// public static Mouse Current { get { if (_current != null) return _current; lock (typeof(Mouse)) { if (_current == null) _current = new Mouse(); return _current; } } } /// /// Gets or sets the window handle for current mouse processing. /// public static IntPtr WindowHandle { get { return ((IMouse)Mouse.Current).WindowHandle; } set { ((IMouse)Mouse.Current).WindowHandle = value; } } /// /// Gets if RawInput is available. /// public static bool IsRawInputAvailable { get { return ((IMouse)Mouse.Current).IsRawInputAvailable; } } /// /// Gets mouse state information that includes position and button presses /// for the primary window /// /// Current state of the mouse. public static MouseState GetState() { return ((IMouse)Mouse.Current).GetState(); } /// /// Sets mouse cursor's relative position to game-window. /// /// Relative horizontal position of the cursor. /// Relative vertical position of the cursor. public static void SetPosition(int x, int y) { ((IMouse)Mouse.Current).SetPosition(x, y); } /// /// Sets the cursor image to the specified MouseCursor. /// /// Mouse cursor to use for the cursor image. public static void SetCursor(MouseCursor cursor) { ((IMouse)Mouse.Current).SetCursor(cursor); } private MouseStrategy _strategy; T IPlatformMouse.GetStrategy() { return (T)_strategy; } private Mouse() { _strategy = InputFactory.Current.CreateMouseStrategy(); } #region IMouse IntPtr IMouse.WindowHandle { get { return _strategy.PlatformGetWindowHandle(); } set { _strategy.PlatformSetWindowHandle(value); } } bool IMouse.IsRawInputAvailable { get { return _strategy.PlatformIsRawInputAvailable(); } } MouseState IMouse.GetState() { return _strategy.PlatformGetState(); } void IMouse.SetPosition(int x, int y) { _strategy.PlatformSetPosition(x, y); } void IMouse.SetCursor(MouseCursor cursor) { _strategy.PlatformSetCursor(cursor); _mouseCursor = cursor; } #endregion IMouse } } ================================================ FILE: src/Xna.Framework.Input/Input/MouseCursor.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos using System; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Platform.Input; namespace Microsoft.Xna.Platform.Input { public interface IPlatformMouseCursor { T GetStrategy() where T : MouseCursorStrategy; } } namespace Microsoft.Xna.Framework.Input { /// /// Describes a mouse cursor. /// public class MouseCursor : IDisposable , IPlatformMouseCursor { private MouseCursorStrategy _strategy; /// /// Gets the default arrow cursor. /// public static MouseCursor Arrow { get; private set; } /// /// Gets the cursor that appears when the mouse is over text editing regions. /// public static MouseCursor IBeam { get; private set; } /// /// Gets the waiting cursor that appears while the application/system is busy. /// public static MouseCursor Wait { get; private set; } /// /// Gets the crosshair ("+") cursor. /// public static MouseCursor Crosshair { get; private set; } /// /// Gets the cross between Arrow and Wait cursors. /// public static MouseCursor WaitArrow { get; private set; } /// /// Gets the northwest/southeast ("\") cursor. /// public static MouseCursor SizeNWSE { get; private set; } /// /// Gets the northeast/southwest ("/") cursor. /// public static MouseCursor SizeNESW { get; private set; } /// /// Gets the horizontal west/east ("-") cursor. /// public static MouseCursor SizeWE { get; private set; } /// /// Gets the vertical north/south ("|") cursor. /// public static MouseCursor SizeNS { get; private set; } /// /// Gets the size all cursor which points in all directions. /// public static MouseCursor SizeAll { get; private set; } /// /// Gets the cursor that points that something is invalid, usually a cross. /// public static MouseCursor No { get; private set; } /// /// Gets the hand cursor, usually used for web links. /// public static MouseCursor Hand { get; private set; } static MouseCursor() { Arrow = new MouseCursor(MouseCursorStrategy.MouseCursorType.Arrow); IBeam = new MouseCursor(MouseCursorStrategy.MouseCursorType.IBeam); Wait = new MouseCursor(MouseCursorStrategy.MouseCursorType.Wait); Crosshair = new MouseCursor(MouseCursorStrategy.MouseCursorType.Crosshair); WaitArrow = new MouseCursor(MouseCursorStrategy.MouseCursorType.WaitArrow); SizeNWSE = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNWSE); SizeNESW = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNESW); SizeWE = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeWE); SizeNS = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeNS); SizeAll = new MouseCursor(MouseCursorStrategy.MouseCursorType.SizeAll); No = new MouseCursor(MouseCursorStrategy.MouseCursorType.No); Hand = new MouseCursor(MouseCursorStrategy.MouseCursorType.Hand); } T IPlatformMouseCursor.GetStrategy() { return (T)_strategy; } private MouseCursor(MouseCursorStrategy.MouseCursorType cursorType) { _strategy = InputFactory.Current.CreateMouseCursorStrategy(cursorType); } public MouseCursor(byte[] data, int w, int h, int originx, int originy) { _strategy = InputFactory.Current.CreateMouseCursorStrategy(data, w, h, originx, originy); } /// /// Creates a mouse cursor from the specified texture. /// /// Texture to use as the cursor image. /// X cordinate of the image that will be used for mouse position. /// Y cordinate of the image that will be used for mouse position. public static MouseCursor FromTexture2D(Texture2D texture, int originx, int originy) { if (texture.Format != SurfaceFormat.Color && texture.Format != SurfaceFormat.ColorSRgb && texture.Format != SurfaceFormat.ColorSRgba) throw new ArgumentException("Only Color or ColorSrgb textures are accepted for mouse cursors", "texture"); int w = texture.Width; int h = texture.Height; byte[] data = new byte[w * h * 4]; texture.GetData(data); return new MouseCursor(data, w, h, originx, originy); } public IntPtr Handle { get { return _strategy.Handle; } } #region IDisposable ~MouseCursor() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool dispose) { if (dispose) { if (_strategy.IsBuildInMouseCursor) throw new InvalidOperationException("Disposing Stock MouseCursors is not allowed."); if (_strategy != null) { _strategy.Dispose(); _strategy = null; } } } #endregion IDisposable } } ================================================ FILE: src/Xna.Framework.Input/Input/MouseCursorStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public class MouseCursorStrategy : IDisposable { protected MouseCursorStrategy.MouseCursorType _cursorType; protected IntPtr _handle; public bool IsBuildInMouseCursor { get { return _cursorType != MouseCursorStrategy.MouseCursorType.User; } } public IntPtr Handle { get { return _handle; } } #region IDisposable ~MouseCursorStrategy() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool dispose) { if (dispose) { } _cursorType = (MouseCursorStrategy.MouseCursorType)0; _handle = IntPtr.Zero; } #endregion IDisposable public enum MouseCursorType { Arrow = 1, IBeam, Wait, Crosshair, WaitArrow, SizeNWSE, SizeNESW, SizeWE, SizeNS, SizeAll, No, Hand, User = 0x80 } } } ================================================ FILE: src/Xna.Framework.Input/Input/MouseState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2021 Nick Kastellanos namespace Microsoft.Xna.Framework.Input { /// /// Represents a mouse state with cursor position and button press information. /// public struct MouseState { private const int LeftButtonBit = 0; private const int MiddleButtonBit = 1; private const int RightButtonBit = 2; private const int XButton1Bit = 3; private const int XButton2Bit = 4; private int _x; private int _y; private int _scrollWheelValue; private int _horizontalScrollWheelValue; private int _rawX; private int _rawY; private int _buttons; /// /// Initializes a new instance of the MouseState. /// /// Horizontal position of the mouse in relation to the window. /// Vertical position of the mouse in relation to the window. /// Mouse scroll wheel's value. /// Left mouse button's state. /// Middle mouse button's state. /// Right mouse button's state. /// XBUTTON1's state. /// XBUTTON2's state. /// Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. public MouseState( int x, int y, int scrollWheel, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2) { _x = x; _y = y; _scrollWheelValue = scrollWheel; _horizontalScrollWheelValue = 0; _rawX = 0; _rawY = 0; _buttons = (int)leftButton << LeftButtonBit | (int)middleButton << MiddleButtonBit | (int)rightButton << RightButtonBit | (int)xButton1 << XButton1Bit | (int)xButton2 << XButton2Bit; ; } /// /// Initializes a new instance of the MouseState. /// /// Horizontal position of the mouse in relation to the window. /// Vertical position of the mouse in relation to the window. /// Mouse scroll wheel's value. /// Mouse horizontal scroll wheel's value. /// Mouse rawX value. /// Mouse rawY value. /// Left mouse button's state. /// Middle mouse button's state. /// Right mouse button's state. /// XBUTTON1's state. /// XBUTTON2's state. /// Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. public MouseState( int x, int y, int scrollWheel, int horizontalScrollWheel, int rawX, int rawY, ButtonState leftButton, ButtonState middleButton, ButtonState rightButton, ButtonState xButton1, ButtonState xButton2) { _x = x; _y = y; _scrollWheelValue = scrollWheel; _horizontalScrollWheelValue = horizontalScrollWheel; _rawX = rawX; _rawY = rawY; _buttons = (int)leftButton << LeftButtonBit | (int)middleButton << MiddleButtonBit | (int)rightButton << RightButtonBit | (int)xButton1 << XButton1Bit | (int)xButton2 << XButton2Bit; } /// /// Compares whether two MouseState instances are equal. /// /// MouseState instance on the left of the equal sign. /// MouseState instance on the right of the equal sign. /// true if the instances are equal; false otherwise. public static bool operator ==(MouseState left, MouseState right) { return left._x == right._x && left._y == right._y && left._scrollWheelValue == right._scrollWheelValue && left._horizontalScrollWheelValue == right._horizontalScrollWheelValue && left.RawX == right.RawX && left.RawY == right.RawY && left._buttons == right._buttons; } /// /// Compares whether two MouseState instances are not equal. /// /// MouseState instance on the left of the equal sign. /// MouseState instance on the right of the equal sign. /// true if the objects are not equal; false otherwise. public static bool operator !=(MouseState left, MouseState right) { return !(left == right); } /// /// Compares whether current instance is equal to specified object. /// /// The MouseState to compare. /// public override bool Equals(object obj) { if (obj is MouseState) return this == (MouseState)obj; return false; } /// /// Gets the hash code for MouseState instance. /// /// Hash code of the object. public override int GetHashCode() { unchecked { var hashCode = _x; hashCode = (hashCode * 397) ^ _y; hashCode = (hashCode * 397) ^ _scrollWheelValue; hashCode = (hashCode * 397) ^ _horizontalScrollWheelValue; hashCode = (hashCode * 397) ^ RawX.GetHashCode(); hashCode = (hashCode * 397) ^ RawY.GetHashCode(); hashCode = (hashCode * 397) ^ _buttons; return hashCode; } } /// /// Returns a string describing the mouse state. /// public override string ToString() { string buttons; if (_buttons == 0) buttons = "None"; else { buttons = string.Empty; if (LeftButton == ButtonState.Pressed) { if (buttons.Length > 0) buttons += " Left"; else buttons += "Left"; } if (RightButton == ButtonState.Pressed) { if (buttons.Length > 0) buttons += " Right"; else buttons += "Right"; } if (MiddleButton == ButtonState.Pressed) { if (buttons.Length > 0) buttons += " Middle"; else buttons += "Middle"; } if (XButton1 == ButtonState.Pressed) { if (buttons.Length > 0) buttons += " XButton1"; else buttons += "XButton1"; } if (XButton2 == ButtonState.Pressed) { if (buttons.Length > 0) buttons += " XButton2"; else buttons += "XButton2"; } } return "[MouseState X=" + _x + ", Y=" + _y + ", Buttons=" + buttons + ", Wheel=" + _scrollWheelValue + ", HWheel=" + _horizontalScrollWheelValue + "]"; } /// /// Gets horizontal position of the cursor in relation to the window. /// public int X { get { return _x; } internal set { _x = value; } } /// /// Gets vertical position of the cursor in relation to the window. /// public int Y { get { return _y; } internal set { _y = value; } } /// /// Gets cursor position. /// public Point Position { get { return new Point(_x, _y); } } /// /// Returns cumulative scroll wheel value since the game start. /// public int ScrollWheelValue { get { return _scrollWheelValue; } internal set { _scrollWheelValue = value; } } /// /// Returns the cumulative horizontal scroll wheel value since the game start /// public int HorizontalScrollWheelValue { get { return _horizontalScrollWheelValue; } internal set { _horizontalScrollWheelValue = value; } } /// /// Gets cursor raw X input. /// public int RawX { get { return _rawX; } internal set { _rawX = value; } } /// /// Gets cursor raw X input. /// public int RawY { get { return _rawY; } internal set { _rawY = value; } } /// /// Gets state of the left mouse button. /// public ButtonState LeftButton { get { return (ButtonState)((_buttons >> LeftButtonBit) & 1); } internal set { _buttons = _buttons & (~(1 << LeftButtonBit)) | (int)value << LeftButtonBit; } } /// /// Gets state of the middle mouse button. /// public ButtonState MiddleButton { get { return (ButtonState)((_buttons >> MiddleButtonBit) & 1); } internal set { _buttons = _buttons & (~(1 << MiddleButtonBit)) | (int)value << MiddleButtonBit; } } /// /// Gets state of the right mouse button. /// public ButtonState RightButton { get { return (ButtonState)((_buttons >> RightButtonBit) & 1); } internal set { _buttons = _buttons & (~(1 << RightButtonBit)) | (int)value << RightButtonBit; } } /// /// Gets state of the XButton1. /// public ButtonState XButton1 { get { return (ButtonState)((_buttons >> XButton1Bit) & 1); } internal set { _buttons = _buttons & (~(1 << XButton1Bit)) | (int)value << XButton1Bit; } } /// /// Gets state of the XButton2. /// public ButtonState XButton2 { get { return (ButtonState)((_buttons >> XButton2Bit) & 1); } internal set { _buttons = _buttons & (~(1 << XButton2Bit)) | (int)value << XButton2Bit; } } } } ================================================ FILE: src/Xna.Framework.Input/Input/MouseStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework.Input; namespace Microsoft.Xna.Platform.Input { public abstract class MouseStrategy { public abstract IntPtr PlatformGetWindowHandle(); public abstract void PlatformSetWindowHandle(IntPtr value); public abstract bool PlatformIsRawInputAvailable(); public abstract MouseState PlatformGetState(); public abstract void PlatformSetPosition(int x, int y); public abstract void PlatformSetCursor(MouseCursor cursor); } } ================================================ FILE: src/Xna.Framework.Input/Input/TextInputEventArgs.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Input { /// /// This class is used in the event as . /// public class TextInputEventArgs : InputKeyEventArgs { /// /// The character for the key that was pressed. /// public readonly char Character; public TextInputEventArgs(Keys key, char character) : base(key) { Character = character; } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/GestureLocationData.cs ================================================ // Copyright (C)2025 Nick Kastellanos using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Input.Touch { internal struct GestureLocationData : IEquatable { private int _id; internal TouchLocationState _state; internal Vector2 _position; internal TouchLocationState _previousState; internal Vector2 _previousPosition; internal Vector2 _velocity; private Vector2 _pressPosition; private TimeSpan _pressTimestamp; internal TimeSpan _timestamp; internal int _framestamp; /// /// True if this touch was pressed and released on the same frame. /// In this case we will keep it around for the user to get by GetState that frame. /// However if they do not call GetState that frame, this touch will be forgotten. /// internal bool SameFrameReleased; internal int Id { get { return _id; } } internal TouchLocationState State { get { return _state; } } internal Vector2 Position { get { return _position; } } internal Vector2 Velocity { get { return _velocity; } } internal Vector2 PressPosition { get { return _pressPosition; } } internal TimeSpan PressTimestamp { get { return _pressTimestamp; } } internal TimeSpan Timestamp { get { return _timestamp; } } internal int Framestamp { get { return _framestamp; } } internal GestureLocationData(int id, TouchLocationState state, Vector2 position, TimeSpan timestamp, int framestamp) { _id = id; _state = state; _position = position; _previousState = TouchLocationState.Invalid; _previousPosition = Vector2.Zero; _timestamp = timestamp; _framestamp = framestamp; _velocity = Vector2.Zero; Debug.Assert(state == TouchLocationState.Pressed); _pressPosition = position; _pressTimestamp = timestamp; SameFrameReleased = false; } public bool TryGetPreviousLocationData(out GestureLocationData aPreviousLocation) { if (_previousState == TouchLocationState.Invalid) { aPreviousLocation._id = -1; aPreviousLocation._state = TouchLocationState.Invalid; aPreviousLocation._position = Vector2.Zero; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; aPreviousLocation._timestamp = TimeSpan.Zero; aPreviousLocation._framestamp = 0; aPreviousLocation._pressPosition = Vector2.Zero; aPreviousLocation._pressTimestamp = TimeSpan.Zero; aPreviousLocation._velocity = Vector2.Zero; aPreviousLocation.SameFrameReleased = false; return false; } aPreviousLocation._id = _id; aPreviousLocation._state = _previousState; aPreviousLocation._position = _previousPosition; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; aPreviousLocation._timestamp = _timestamp; aPreviousLocation._framestamp = _framestamp; aPreviousLocation._pressPosition = _pressPosition; aPreviousLocation._pressTimestamp = _pressTimestamp; aPreviousLocation._velocity = _velocity; aPreviousLocation.SameFrameReleased = SameFrameReleased; return true; } public override int GetHashCode() { return _id; } public override bool Equals(object obj) { if (obj is GestureLocationData) return Equals((GestureLocationData)obj); return false; } public bool Equals(GestureLocationData other) { return _id.Equals(other._id) && _position.Equals(other._position) && _previousPosition.Equals(other._previousPosition); } public static bool operator !=(GestureLocationData left, GestureLocationData right) { return left._id != right._id || left._state != right._state || left._position != right._position || left._previousState != right._previousState || left._previousPosition != right._previousPosition; } public static bool operator ==(GestureLocationData left, GestureLocationData right) { return left._id == right._id && left._state == right._state && left._position == right._position && left._previousState == right._previousState && left._previousPosition == right._previousPosition; } public override string ToString() { return String.Format("{{ Touch id: {0}, state: {1}, position: {2}, pressure: {3}, prevState: {4}, prevPosition: {5}, previousPressure: {6} }}", _id, _state, _position, 0f, _previousState, _previousPosition, 0f); } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/GestureSample.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using Microsoft.Xna.Framework; namespace Microsoft.Xna.Framework.Input.Touch { /// /// Represents data from a multi-touch gesture over a span of time. /// public struct GestureSample { // attributes private GestureType _gestureType; private TimeSpan _timestamp; private Vector2 _position; private Vector2 _position2; private Vector2 _delta; private Vector2 _delta2; #region Properties /// /// Gets the type of the gesture. /// public GestureType GestureType { get { return this._gestureType; } } /// /// Gets the starting time for this multi-touch gesture sample. /// public TimeSpan Timestamp { get { return this._timestamp; } } /// /// Gets the position of the first touch-point in the gesture sample. /// public Vector2 Position { get { return this._position; } } /// /// Gets the position of the second touch-point in the gesture sample. /// public Vector2 Position2 { get { return this._position2; } } /// /// Gets the delta information for the first touch-point in the gesture sample. /// public Vector2 Delta { get { return this._delta; } } /// /// Gets the delta information for the second touch-point in the gesture sample. /// public Vector2 Delta2 { get { return this._delta2; } } #endregion /// /// Initializes a new . /// /// /// /// /// /// /// public GestureSample(GestureType gestureType, TimeSpan timestamp, Vector2 position, Vector2 position2, Vector2 delta, Vector2 delta2) { this._gestureType = gestureType; this._timestamp = timestamp; this._position = position; this._position2 = position2; this._delta = delta; this._delta2 = delta2; } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/GestureType.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Input.Touch { /// /// Enumeration of values that represent different gestures that can be processed by . /// [Flags] public enum GestureType { /// /// No gestures. /// None = 0, /// /// The user touched a single point. /// Tap = 1, /// /// States completion of a drag gesture(VerticalDrag, HorizontalDrag, or FreeDrag). /// /// No position or delta information is available for this sample. DragComplete = 2, /// /// States that a touch was combined with a quick swipe. /// /// Flicks does not contain position information. The velocity of it can be read from Flick = 4, /// /// The user touched a point and then performed a free-form drag. /// FreeDrag = 8, /// /// The user touched a single point for approximately one second. /// /// As this is a single event, it will not be continuously fired while the user is holding the touch-point. Hold = 16, /// /// The user touched the screen and performed either left to right or right to left drag gesture. /// HorizontalDrag = 32, /// /// The user either converged or diverged two touch-points on the screen which is like a two-finger drag. /// /// When this gesture-type is enabled and two fingers are down, it takes precedence over drag gestures. Pinch = 64, /// /// An in-progress pinch operation was completed. /// /// No position or delta information is available for this sample. PinchComplete = 128, /// /// The user tapped the device twice which is always preceded by a Tap gesture. /// /// If the time between two touches are long enough, insted two seperate single Tap gestures will be generated. DoubleTap = 256, /// /// The user touched the screen and performed either top to bottom or bottom to top drag gesture. /// VerticalDrag = 512, } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchCollection.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Input.Touch { /// /// Provides state information for a touch screen enabled device. /// public struct TouchCollection : IList { private readonly int _count; private readonly TouchLocation _value0, _value1, _value2, _value3; private readonly TouchLocation[] _collection; #region Properties /// /// States if a touch screen is available. /// public bool IsConnected { get { return TouchPanel.GetCapabilities().IsConnected; } } private static readonly TouchLocation[] EmptyLocationArray = new TouchLocation[0]; internal static readonly TouchCollection Empty = new TouchCollection(EmptyLocationArray); #endregion /// /// Initializes a new instance of the with a pre-determined set of touch locations. /// /// Array of items to initialize with. public TouchCollection(TouchLocation[] touches): this((IList)touches) { } internal TouchCollection(IList touches) { if (touches == null) throw new ArgumentNullException("touches"); _count = touches.Count; _value0 = (_count > 0) ? touches[0] : TouchLocation.Invalid; _value1 = (_count > 1) ? touches[1] : TouchLocation.Invalid; _value2 = (_count > 2) ? touches[2] : TouchLocation.Invalid; _value3 = (_count > 3) ? touches[3] : TouchLocation.Invalid; _collection = null; if (_count > 4) { _collection = new TouchLocation[_count]; touches.CopyTo(_collection, 0); } } internal TouchCollection(IList touches) { if (touches == null) throw new ArgumentNullException("touches"); _count = touches.Count; _value0 = (_count > 0) ? touches[0].TouchLocation : TouchLocation.Invalid; _value1 = (_count > 1) ? touches[1].TouchLocation : TouchLocation.Invalid; _value2 = (_count > 2) ? touches[2].TouchLocation : TouchLocation.Invalid; _value3 = (_count > 3) ? touches[3].TouchLocation : TouchLocation.Invalid; _collection = null; if (_count > 4) { _collection = new TouchLocation[_count]; for (int i = 0; i < _count; i++) _collection[i] = touches[i].TouchLocation; } } /// /// Returns specified by ID. /// /// /// /// public bool FindById(int id, out TouchLocation touchLocation) { for (int i = 0; i < Count; i++) { if (this[i].Id == id) { touchLocation = this[i]; return true; } } touchLocation = TouchLocation.Invalid; return false; } #region IList /// /// States if touch collection is read only. /// public bool IsReadOnly { get { return true; } } /// /// Returns the index of the first occurrence of specified item in the collection. /// /// to query. /// public int IndexOf(TouchLocation item) { for (int i = 0; i < Count; i++) { if (item == this[i]) return i; } return -1; } /// /// Inserts a item into the indicated position. /// /// The position to insert into. /// The item to insert. public void Insert(int index, TouchLocation item) { throw new NotSupportedException(); } /// /// Removes the item at specified index. /// /// Index of the item that will be removed from collection. public void RemoveAt(int index) { throw new NotSupportedException(); } /// /// Gets or sets the item at the specified index of the collection. /// /// Position of the item. /// public TouchLocation this[int index] { get { if (index < 0 || index >= _count) throw new ArgumentOutOfRangeException("index"); switch (index) { case 0: return _value0; case 1: return _value1; case 2: return _value2; case 3: return _value3; default: return _collection[index]; } } set { throw new NotSupportedException(); } } /// /// Adds a to the collection. /// /// The item to be added. public void Add(TouchLocation item) { throw new NotSupportedException(); } /// /// Clears all the items in collection. /// public void Clear() { throw new NotSupportedException(); } /// /// Returns true if specified item exists in the collection, false otherwise./> /// /// The item to query for. /// Returns true if queried item is found, false otherwise. public bool Contains(TouchLocation item) { for (int i = 0; i < Count; i++) { if (item == this[i]) return true; } return false; } /// /// Copies the collection to specified array starting from the given index. /// /// The array to copy items. /// The starting index of the copy operation. public void CopyTo(TouchLocation[] array, int arrayIndex) { for (int i = 0; i < Count; i++) { array[arrayIndex + i] = this[i]; } } /// /// Returns the number of items that exist in the collection. /// public int Count { get { return _count; } } /// /// Removes the specified item from the collection. /// /// The item to remove. /// public bool Remove(TouchLocation item) { throw new NotSupportedException(); } /// /// Returns an enumerator for the . /// /// Enumerable list of objects. public Enumerator GetEnumerator() { return new Enumerator(this); } /// /// Returns an enumerator for the . /// /// Enumerable list of objects. IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(this); } /// /// Returns an enumerator for the . /// /// Enumerable list of objects. IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(this); } #endregion // IList /// /// Provides the ability to iterate through the TouchLocations in an TouchCollection. /// public struct Enumerator : IEnumerator { private readonly TouchCollection _collection; private int _position; internal Enumerator(TouchCollection collection) { _collection = collection; _position = -1; } /// /// Gets the current element in the TouchCollection. /// public TouchLocation Current { get { return _collection[_position]; } } /// /// Advances the enumerator to the next element of the TouchCollection. /// public bool MoveNext() { _position++; return (_position < _collection.Count); } #region IDisposable /// /// Immediately releases the unmanaged resources used by this object. /// public void Dispose() { } #endregion #region IEnumerator Members object IEnumerator.Current { get { return _collection[_position]; } } public void Reset() { _position = -1; } #endregion } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchLocation.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Input.Touch { public struct TouchLocation : IEquatable { /// ///Attributes /// private int _id; private TouchLocationState _state; private Vector2 _position; private Vector2 _previousPosition; private TouchLocationState _previousState; /// /// Helper for assigning an invalid touch location. /// internal static readonly TouchLocation Invalid = new TouchLocation(); #region Properties public int Id { get { return _id; } } public Vector2 Position { get { return _position; } } public float Pressure { get { return 0f; } } public TouchLocationState State { get { return _state; } } #endregion #region Constructors public TouchLocation(int id, TouchLocationState state, Vector2 position) : this(id, state, position, TouchLocationState.Invalid, Vector2.Zero) { } public TouchLocation( int id, TouchLocationState state, Vector2 position, TouchLocationState previousState, Vector2 previousPosition) { _id = id; _state = state; _position = position; _previousState = previousState; _previousPosition = previousPosition; } #endregion public override bool Equals(object obj) { if (obj is TouchLocation) return Equals((TouchLocation)obj); return false; } public bool Equals(TouchLocation other) { return _id.Equals(other._id) && _position.Equals(other._position) && _previousPosition.Equals(other._previousPosition); } public override int GetHashCode() { return _id; } public override string ToString() { return "Touch id:"+_id+" state:"+_state + " position:" + _position + " pressure:" + 0f +" prevState:"+_previousState+" prevPosition:"+ _previousPosition + " previousPressure:" + 0f; } public bool TryGetPreviousLocation(out TouchLocation aPreviousLocation) { if (_previousState == TouchLocationState.Invalid) { aPreviousLocation._id = -1; aPreviousLocation._state = TouchLocationState.Invalid; aPreviousLocation._position = Vector2.Zero; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; return false; } aPreviousLocation._id = _id; aPreviousLocation._state = _previousState; aPreviousLocation._position = _previousPosition; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; return true; } public static bool operator !=(TouchLocation left, TouchLocation right) { return left._id != right._id || left._state != right._state || left._position != right._position || left._previousState != right._previousState || left._previousPosition != right._previousPosition; } public static bool operator ==(TouchLocation left, TouchLocation right) { return left._id == right._id && left._state == right._state && left._position == right._position && left._previousState == right._previousState && left._previousPosition == right._previousPosition; } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchLocationData.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Input.Touch { internal struct TouchLocationData : IEquatable { private int _id; internal TouchLocationState _state; internal Vector2 _position; internal TouchLocationState _previousState; internal Vector2 _previousPosition; internal TimeSpan _timestamp; internal int _framestamp; /// /// True if this touch was pressed and released on the same frame. /// In this case we will keep it around for the user to get by GetState that frame. /// However if they do not call GetState that frame, this touch will be forgotten. /// internal bool SameFrameReleased; internal int Id { get { return _id; } } internal TouchLocationState State { get { return _state; } } internal Vector2 Position { get { return _position; } } internal TimeSpan Timestamp { get { return _timestamp; } } internal int Framestamp { get { return _framestamp; } } internal TouchLocation TouchLocation { get { return new TouchLocation(this._id, this._state, this._position, this._previousState, this._previousPosition); } } internal TouchLocationData(int id, TouchLocationState state, Vector2 position, TimeSpan timestamp, int framestamp) { _id = id; _state = state; _position = position; _previousState = TouchLocationState.Invalid; _previousPosition = Vector2.Zero; _timestamp = timestamp; _framestamp = framestamp; SameFrameReleased = false; } public bool TryGetPreviousLocationData(out TouchLocationData aPreviousLocation) { if (_previousState == TouchLocationState.Invalid) { aPreviousLocation._id = -1; aPreviousLocation._state = TouchLocationState.Invalid; aPreviousLocation._position = Vector2.Zero; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; aPreviousLocation._timestamp = TimeSpan.Zero; aPreviousLocation._framestamp = 0; aPreviousLocation.SameFrameReleased = false; return false; } aPreviousLocation._id = _id; aPreviousLocation._state = _previousState; aPreviousLocation._position = _previousPosition; aPreviousLocation._previousState = TouchLocationState.Invalid; aPreviousLocation._previousPosition = Vector2.Zero; aPreviousLocation._timestamp = _timestamp; aPreviousLocation._framestamp = _framestamp; aPreviousLocation.SameFrameReleased = SameFrameReleased; return true; } public override int GetHashCode() { return _id; } public override bool Equals(object obj) { if (obj is TouchLocationData) return Equals((TouchLocationData)obj); return false; } public bool Equals(TouchLocationData other) { return _id.Equals(other._id) && _position.Equals(other._position) && _previousPosition.Equals(other._previousPosition); } public static bool operator !=(TouchLocationData left, TouchLocationData right) { return left._id != right._id || left._state != right._state || left._position != right._position || left._previousState != right._previousState || left._previousPosition != right._previousPosition; } public static bool operator ==(TouchLocationData left, TouchLocationData right) { return left._id == right._id && left._state == right._state && left._position == right._position && left._previousState == right._previousState && left._previousPosition == right._previousPosition; } public override string ToString() { return String.Format("{{ Touch id: {0}, state: {1}, position: {2}, pressure: {3}, prevState: {4}, prevPosition: {5}, previousPressure: {6} }}", _id, _state, _position, 0f, _previousState, _previousPosition, 0f); } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchLocationState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; namespace Microsoft.Xna.Framework.Input.Touch { /// /// Holds the possible state information for a touch location.. /// public enum TouchLocationState { /// /// This touch location position is invalid. /// /// Typically, you will encounter this state when a new touch location attempts to get the previous state of itself. Invalid, /// /// This touch location position was updated or pressed at the same position. /// Moved, /// /// This touch location position is new. /// Pressed, /// /// This touch location position was released. /// Released, } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchPanel.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; using Microsoft.Xna.Platform.Input; using Microsoft.Xna.Platform.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public interface ITouchPanel { IntPtr WindowHandle { get; set; } int DisplayWidth { get; set; } int DisplayHeight { get; set; } DisplayOrientation DisplayOrientation { get; set; } GestureType EnabledGestures { get; set; } bool IsGestureAvailable { get; } TouchPanelCapabilities GetCapabilities(); TouchCollection GetState(); GestureSample ReadGesture(); } public interface IPlatformTouchPanel { T GetStrategy() where T : TouchPanelStrategy; } } namespace Microsoft.Xna.Framework.Input.Touch { /// /// Allows retrieval of information from Touch Panel device. /// public sealed class TouchPanel : ITouchPanel , IPlatformTouchPanel { private static TouchPanel _current; /// /// Returns the current Keyboard instance. /// public static TouchPanel Current { get { if (_current != null) return _current; lock (typeof(Keyboard)) { if (_current == null) _current = new TouchPanel(); return _current; } } } /// /// The window handle of the touch panel. Purely for Xna compatibility. /// public static IntPtr WindowHandle { get { return ((ITouchPanel)TouchPanel.Current).WindowHandle; } set { ((ITouchPanel)TouchPanel.Current).WindowHandle = value; } } /// /// Gets or sets the display width of the touch panel. /// public static int DisplayWidth { get { return ((ITouchPanel)TouchPanel.Current).DisplayWidth; } set { ((ITouchPanel)TouchPanel.Current).DisplayWidth = value; } } /// /// Gets or sets the display height of the touch panel. /// public static int DisplayHeight { get { return ((ITouchPanel)TouchPanel.Current).DisplayHeight; } set { ((ITouchPanel)TouchPanel.Current).DisplayHeight = value; } } /// /// Gets or sets the display orientation of the touch panel. /// public static DisplayOrientation DisplayOrientation { get { return ((ITouchPanel)TouchPanel.Current).DisplayOrientation; } set { ((ITouchPanel)TouchPanel.Current).DisplayOrientation = value; } } /// /// Gets or sets enabled gestures. /// public static GestureType EnabledGestures { get { return ((ITouchPanel)TouchPanel.Current).EnabledGestures; } set { ((ITouchPanel)TouchPanel.Current).EnabledGestures = value; } } /// /// Returns true if a touch gesture is available. /// public static bool IsGestureAvailable { get { return ((ITouchPanel)TouchPanel.Current).IsGestureAvailable; } } /// /// Gets the current state of the touch panel. /// /// public static TouchCollection GetState() { return ((ITouchPanel)TouchPanel.Current).GetState(); } public static TouchPanelCapabilities GetCapabilities() { return ((ITouchPanel)TouchPanel.Current).GetCapabilities(); } /// /// Returns the next available gesture on touch panel device. /// /// public static GestureSample ReadGesture() { return ((ITouchPanel)TouchPanel.Current).ReadGesture(); } private TouchPanelStrategy _strategy; T IPlatformTouchPanel.GetStrategy() { return (T)_strategy; } private TouchPanel() { _strategy = InputFactory.Current.CreateTouchPanelStrategy(); } #region ITouchPanel IntPtr ITouchPanel.WindowHandle { get { return _strategy.WindowHandle; } set { _strategy.WindowHandle = value; } } int ITouchPanel.DisplayWidth { get { return _strategy.DisplayWidth; } set { _strategy.DisplayWidth = value; } } int ITouchPanel.DisplayHeight { get { return _strategy.DisplayHeight; } set { _strategy.DisplayHeight = value; } } DisplayOrientation ITouchPanel.DisplayOrientation { get { return _strategy.DisplayOrientation; } set { _strategy.DisplayOrientation = value; } } GestureType ITouchPanel.EnabledGestures { get { return _strategy.EnabledGestures; } set { _strategy.EnabledGestures = value; } } bool ITouchPanel.IsGestureAvailable { get { return _strategy.IsGestureAvailable; } } TouchPanelCapabilities ITouchPanel.GetCapabilities() { return _strategy.GetCapabilities(); } TouchCollection ITouchPanel.GetState() { return _strategy.GetState(); } GestureSample ITouchPanel.ReadGesture() { return _strategy.ReadGesture(); } #endregion ITouchPanel } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchPanelCapabilities.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2024 Nick Kastellanos using System; namespace Microsoft.Xna.Framework.Input.Touch { /// /// Allows retrieval of capabilities information from touch panel device. /// public struct TouchPanelCapabilities { internal bool _isConnected; internal int _maximumTouchCount; internal bool _hasPressure; /// /// Returns true if a device is available for use. /// public bool IsConnected { get { return _isConnected; } } /// /// Returns the maximum number of touch locations tracked by the touch panel device. /// public int MaximumTouchCount { get { return _maximumTouchCount; } } public bool HasPressure { get { return _hasPressure; } } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.Legacy.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public abstract partial class TouchPanelStrategy { /// The value 1 is reserved for the mouse touch point. private const int StartingTouchId = 2; /// /// The current touch state. /// private readonly List _touchStates = new List(); /// /// The next touch location identifier. /// private int _nextTouchId = StartingTouchId; private TimeSpan _currentTimestamp; private int _currentFramestamp; /// /// The current timestamp that we use for setting the timestamp of new TouchLocations /// internal TimeSpan CurrentTimestamp { get { return _currentTimestamp; } } private void UpdateCurrentTimestamp() { _currentTimestamp = _stopwatch.Elapsed; _currentFramestamp++; } /// /// The mapping between platform specific touch ids /// and the touch ids we assign to touch locations. /// /// Different platforms return different touch identifiers /// based on the specifics of their implementation and the /// system drivers. /// /// Sometimes these ids are suitable for our use, but other /// times it can recycle ids or do cute things like return /// the same id for double tap events. /// /// We instead provide consistent ids by generating them /// ourselves on the press and looking them up on move /// and release events. /// private readonly Dictionary _touchIdsMap = new Dictionary(); private TouchCollection LegacyGetState() { int currentFramestamp = this._currentFramestamp; //Clear out touches from previous frames that were released on the same frame they were touched that haven't been seen for (int i = _touchStates.Count - 1; i >= 0; i--) { TouchLocationData touch = _touchStates[i]; //If a touch was pressed and released in a previous frame and the user didn't ask about it then trash it. if (touch.SameFrameReleased && touch.State == TouchLocationState.Pressed && touch.Framestamp < currentFramestamp) { _touchStates.RemoveAt(i); } } TouchCollection result = (_touchStates.Count > 0) ? new TouchCollection(_touchStates) : TouchCollection.Empty; // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed for (int i = _touchStates.Count - 1; i >= 0; i--) { TouchLocationData touch = _touchStates[i]; switch (touch.State) { case TouchLocationState.Pressed: touch._previousState = touch.State; touch._previousPosition = touch.Position; if (touch.SameFrameReleased) touch._state = TouchLocationState.Released; else touch._state = TouchLocationState.Moved; _touchStates[i] = touch; break; case TouchLocationState.Moved: touch._previousState = touch.State; touch._previousPosition = touch.Position; _touchStates[i] = touch; break; case TouchLocationState.Released: _touchStates.RemoveAt(i); break; } } return result; } protected void AddPressedEvent(int nativeTouchId, Vector2 position, Point winSize) { // Register touchId. int touchId; if (_touchIdsMap.TryGetValue(nativeTouchId, out touchId)) { System.Diagnostics.Debug.Assert(false, "nativeTouchId already registered."); } else { touchId = _nextTouchId; _touchIdsMap[nativeTouchId] = touchId; if (_nextTouchId < int.MaxValue) _nextTouchId++; else _nextTouchId = StartingTouchId; } // scale position position.X = position.X * DisplayWidth / winSize.X; position.Y = position.Y * DisplayHeight / winSize.Y; TimeSpan currentTimestamp = this.CurrentTimestamp; int currentFramestamp = this._currentFramestamp; // Add event System.Diagnostics.Debug.Assert(_touchStates.TrueForAll(t => t.Id != touchId)); TouchLocationData evt = new TouchLocationData(touchId, TouchLocationState.Pressed, position, currentTimestamp, currentFramestamp); _touchStates.Add(evt); // If we have gestures enabled then collect events for those too. // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled GesturesAddPressedEvent(touchId, position, currentTimestamp, currentFramestamp); } protected void AddMovedEvent(int nativeTouchId, Vector2 position, Point winSize) { // Find touchId. int touchId; if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId)) { System.Diagnostics.Debug.Assert(false, "nativeTouchId not found."); return; } // scale position position.X = position.X * DisplayWidth / winSize.X; position.Y = position.Y * DisplayHeight / winSize.Y; TimeSpan currentTimestamp = this.CurrentTimestamp; int currentFramestamp = this._currentFramestamp; //Find the matching touch int tidx = FindTouchStateIndex(touchId); if (tidx != -1) { TouchLocationData existingTouch = _touchStates[tidx]; { // Update the touch based on the new one System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, "We shouldn't be changing state on a released location."); System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, "The currentTimestamp is older than our TouchLocationData."); // Store the current state as the previous one. existingTouch._previousState = existingTouch.State; existingTouch._previousPosition = existingTouch.Position; // Set the new state. existingTouch._position = position; // Set the new timestamp. existingTouch._timestamp = currentTimestamp; existingTouch._framestamp = currentFramestamp; _touchStates[tidx] = existingTouch; } } // If we have gestures enabled then collect events for those too. // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled GesturesAddMovedEvent(touchId, position, currentTimestamp, currentFramestamp); } protected void AddReleasedEvent(int nativeTouchId, Vector2 position, Point winSize) { // Find and unregister touchId. int touchId; if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId)) { System.Diagnostics.Debug.Assert(false, "nativeTouchId not found."); return; } _touchIdsMap.Remove(nativeTouchId); // scale position position.X = position.X * DisplayWidth / winSize.X; position.Y = position.Y * DisplayHeight / winSize.Y; TimeSpan currentTimestamp = this.CurrentTimestamp; int currentFramestamp = this._currentFramestamp; //Find the matching touch int tidx = FindTouchStateIndex(touchId); if (tidx != -1) { TouchLocationData existingTouch = _touchStates[tidx]; { //If we are moving straight from Pressed to Released and we've existed for multiple frames, // that means we've never been seen, so just get rid of us if (existingTouch.State == TouchLocationState.Pressed && existingTouch.Framestamp != currentFramestamp) { _touchStates.RemoveAt(tidx); } else { //Otherwise update the touch based on the new one System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, "We shouldn't be changing state on a released location."); System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, "The currentTimestamp is older than our TouchLocationData."); // Store the current state as the previous one. existingTouch._previousState = existingTouch.State; existingTouch._previousPosition = existingTouch.Position; // Set the new state. existingTouch._state = TouchLocationState.Released; existingTouch._position = position; //Going straight from pressed to released on the same frame if (existingTouch._previousState == TouchLocationState.Pressed) { if (existingTouch.Framestamp == currentFramestamp) { //Lie that we are pressed for now existingTouch.SameFrameReleased = true; existingTouch._state = TouchLocationState.Pressed; } } // Set the new timestamp. existingTouch._timestamp = currentTimestamp; existingTouch._framestamp = currentFramestamp; _touchStates[tidx] = existingTouch; } } } // If we have gestures enabled then collect events for those too. // We also have to keep tracking any touches while we know about touches so we don't miss releases even if gesture recognition is disabled GesturesAddReleasedEvent(touchId, position, currentTimestamp, currentFramestamp); } protected void AddCanceledEvent(int nativeTouchId, Vector2 position, Point winSize) { // Find and unregister touchId. int touchId; if (!_touchIdsMap.TryGetValue(nativeTouchId, out touchId)) { System.Diagnostics.Debug.Assert(false, "nativeTouchId not found."); return; } _touchIdsMap.Remove(nativeTouchId); throw new NotImplementedException(); } private int FindTouchStateIndex(int touchId) { for (int tidx = 0; tidx < _touchStates.Count; tidx++) { if (_touchStates[tidx].Id == touchId) return tidx; } return -1; } } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.LegacyGesture.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public abstract partial class TouchPanelStrategy { /// /// The current gesture state. /// private readonly List _gestureStates = new List(); internal readonly Queue GestureList = new Queue(); /// /// Returns true if a touch gesture is available. /// private bool LegacyIsGestureAvailable { get { // Process the pending gesture events. (May cause hold events) TimeSpan currentTimestamp = this.CurrentTimestamp; UpdateGestures(currentTimestamp, false); return GestureList.Count > 0; } } private int FindGestureStateIndex(int touchId) { for (int gidx = 0; gidx < _gestureStates.Count; gidx++) { if (_gestureStates[gidx].Id == touchId) return gidx; } return -1; } private static void UpdateGestureVelocity(TimeSpan currentTimestamp, ref GestureLocationData existingTouch) { TimeSpan elapsed = currentTimestamp - existingTouch.Timestamp; // If time has elapsed then update the velocity. if (elapsed > TimeSpan.Zero) { // Use a simple low pass filter to accumulate velocity. Vector2 delta = existingTouch.Position - existingTouch._previousPosition; Vector2 velocity = delta / (float)elapsed.TotalSeconds; existingTouch._velocity += (velocity - existingTouch.Velocity) * 0.45f; } } /// /// Returns the next available gesture on touch panel device. /// /// private GestureSample LegacyReadGesture() { // Return the next gesture. return GestureList.Dequeue(); } #region Gesture Recognition private void GesturesAddPressedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp) { if (EnabledGestures != GestureType.None || _gestureStates.Count > 0) { GestureLocationData evt = new GestureLocationData(touchId, TouchLocationState.Pressed, position, currentTimestamp, currentFramestamp); _gestureStates.Add(evt); if (EnabledGestures != GestureType.None) UpdateGestures(currentTimestamp, true); // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed for (int i = _gestureStates.Count - 1; i >= 0; i--) { GestureLocationData touch = _gestureStates[i]; switch (touch.State) { case TouchLocationState.Pressed: touch._previousState = touch.State; touch._previousPosition = touch.Position; if (touch.SameFrameReleased) touch._state = TouchLocationState.Released; else touch._state = TouchLocationState.Moved; _gestureStates[i] = touch; break; case TouchLocationState.Moved: touch._previousState = touch.State; touch._previousPosition = touch.Position; _gestureStates[i] = touch; break; case TouchLocationState.Released: _gestureStates.RemoveAt(i); break; } } } } private void GesturesAddMovedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp) { //Find the matching gesture int gidx = FindGestureStateIndex(touchId); if (gidx != -1) { GestureLocationData existingTouch = _gestureStates[gidx]; { // Update the touch based on the new one System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, "We shouldn't be changing state on a released location."); System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, "The currentTimestamp is older than our GestureLocationData."); // Store the current state as the previous one. existingTouch._previousPosition = existingTouch.Position; existingTouch._previousState = existingTouch.State; // Set the new state. existingTouch._position = position; // Update the velocity. UpdateGestureVelocity(currentTimestamp, ref existingTouch); // Set the new timestamp. existingTouch._timestamp = currentTimestamp; existingTouch._framestamp = currentFramestamp; _gestureStates[gidx] = existingTouch; } } if (EnabledGestures != GestureType.None || _gestureStates.Count > 0) { if (EnabledGestures != GestureType.None) UpdateGestures(currentTimestamp, true); // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed for (int i = _gestureStates.Count - 1; i >= 0; i--) { GestureLocationData touch = _gestureStates[i]; switch (touch.State) { case TouchLocationState.Pressed: touch._previousState = touch.State; touch._previousPosition = touch.Position; if (touch.SameFrameReleased) touch._state = TouchLocationState.Released; else touch._state = TouchLocationState.Moved; _gestureStates[i] = touch; break; case TouchLocationState.Moved: touch._previousState = touch.State; touch._previousPosition = touch.Position; _gestureStates[i] = touch; break; case TouchLocationState.Released: _gestureStates.RemoveAt(i); break; } } } } private void GesturesAddReleasedEvent(int touchId, Vector2 position, TimeSpan currentTimestamp, int currentFramestamp) { //Find the matching gesture int gidx = FindGestureStateIndex(touchId); if (gidx != -1) { GestureLocationData existingTouch = _gestureStates[gidx]; { //If we are moving straight from Pressed to Released and we've existed for multiple frames, // that means we've never been seen, so just get rid of us if (existingTouch.State == TouchLocationState.Pressed && existingTouch.Framestamp != currentFramestamp) { _gestureStates.RemoveAt(gidx); } else { //Otherwise update the touch based on the new one System.Diagnostics.Debug.Assert(existingTouch.State != TouchLocationState.Released, "We shouldn't be changing state on a released location."); System.Diagnostics.Debug.Assert(existingTouch.Timestamp <= currentTimestamp, "The currentTimestamp is older than our GestureLocationData."); // Store the current state as the previous one. existingTouch._previousPosition = existingTouch.Position; existingTouch._previousState = existingTouch.State; // Set the new state. existingTouch._position = position; existingTouch._state = TouchLocationState.Released; // Update the velocity. UpdateGestureVelocity(currentTimestamp, ref existingTouch); //Going straight from pressed to released on the same frame if (existingTouch._previousState == TouchLocationState.Pressed) { if (existingTouch.Framestamp == currentFramestamp) { //Lie that we are pressed for now existingTouch.SameFrameReleased = true; existingTouch._state = TouchLocationState.Pressed; } } // Set the new timestamp. existingTouch._timestamp = currentTimestamp; existingTouch._framestamp = currentFramestamp; _gestureStates[gidx] = existingTouch; } } } if (EnabledGestures != GestureType.None || _gestureStates.Count > 0) { if (EnabledGestures != GestureType.None) UpdateGestures(currentTimestamp, true); // Age all the touches, so any that were Pressed become Moved, and any that were Released are removed for (int i = _gestureStates.Count - 1; i >= 0; i--) { GestureLocationData touch = _gestureStates[i]; switch (touch.State) { case TouchLocationState.Pressed: touch._previousState = touch.State; touch._previousPosition = touch.Position; if (touch.SameFrameReleased) touch._state = TouchLocationState.Released; else touch._state = TouchLocationState.Moved; _gestureStates[i] = touch; break; case TouchLocationState.Moved: touch._previousState = touch.State; touch._previousPosition = touch.Position; _gestureStates[i] = touch; break; case TouchLocationState.Released: _gestureStates.RemoveAt(i); break; } } } } /// /// Maximum distance a touch location can wiggle and /// not be considered to have moved. /// internal const float TapJitterTolerance = 35.0f; internal static readonly TimeSpan TimeRequiredForHold = TimeSpan.FromMilliseconds(1024); /// /// The pinch touch locations. /// private readonly GestureLocationData[] _pinchTouch = new GestureLocationData[2]; /// /// If true the pinch touch locations are valid and /// a pinch gesture has begun. /// private bool _pinchGestureStarted; private bool IsGestureEnabled(GestureType gestureType) { return (EnabledGestures & gestureType) != 0; } /// /// Used to disable emitting of tap gestures. /// bool _tapDisabled; /// /// Used to disable emitting of hold gestures. /// bool _holdDisabled; private void UpdateGestures(TimeSpan currentTimestamp, bool stateChanged) { // These are observed XNA gesture rules which we follow below. Please // add to them if a new case is found. // // - Tap occurs on release. // - DoubleTap occurs on the first press after a Tap. // - Tap, Double Tap, and Hold are disabled if a drag begins or more than one finger is pressed. // - Drag occurs when one finger is down and actively moving. // - Pinch occurs if 2 or more fingers are down and at least one is moving. // - If you enter a Pinch during a drag a DragComplete is fired. // - Drags are classified as horizontal, vertical, free, or none and stay that way. // // First get a count of touch locations which // are not in the released state. int heldLocations = 0; foreach (GestureLocationData touch in _gestureStates) heldLocations += touch.State != TouchLocationState.Released ? 1 : 0; // As soon as we have more than one held point then // tap and hold gestures are disabled until all the // points are released. if (heldLocations > 1) { _tapDisabled = true; _holdDisabled = true; } // Process the touch locations for gestures. for (int i = 0; i < _gestureStates.Count; i++) { GestureLocationData touch = _gestureStates[i]; switch (touch.State) { case TouchLocationState.Pressed: case TouchLocationState.Moved: { // The DoubleTap event is emitted on first press as // opposed to Tap which happens on release. if (touch.State == TouchLocationState.Pressed && ProcessDoubleTap(ref touch)) break; // Any time more than one finger is down and pinch is // enabled then we exclusively do pinch processing. if (IsGestureEnabled(GestureType.Pinch) && heldLocations > 1) { // Save or update the first pinch point. if (_pinchTouch[0].State == TouchLocationState.Invalid || _pinchTouch[0].Id == touch.Id) _pinchTouch[0] = touch; // Save or update the second pinch point. else if (_pinchTouch[1].State == TouchLocationState.Invalid || _pinchTouch[1].Id == touch.Id) _pinchTouch[1] = touch; // NOTE: Actual pinch processing happens outside and // below this loop to ensure both points are updated // before gestures are emitted. break; } // If we're not dragging try to process a hold event. float sqDist = Vector2.DistanceSquared(touch.Position, touch.PressPosition); if (_dragGestureStarted == GestureType.None && sqDist < TapJitterTolerance * TapJitterTolerance) { ProcessHold(currentTimestamp, ref touch); break; } // If the touch state has changed then do a drag gesture. if (stateChanged) ProcessDrag(ref touch); break; } case TouchLocationState.Released: { // If the touch state hasn't changed then this // is an old release event... skip it. if (!stateChanged) break; // If this is one of the pinch locations then we // need to fire off the complete event and stop // the pinch gesture operation. if (_pinchGestureStarted && (touch.Id == _pinchTouch[0].Id || touch.Id == _pinchTouch[1].Id)) { if (IsGestureEnabled(GestureType.PinchComplete)) GestureList.Enqueue(new GestureSample( GestureType.PinchComplete, touch.Timestamp, Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero)); _pinchGestureStarted = false; _pinchTouch[0] = new GestureLocationData(); _pinchTouch[1] = new GestureLocationData(); break; } // If there are still other pressed locations then there // is nothing more we can do with this release. if (heldLocations != 0) break; // From testing XNA it seems we need a velocity // of about 100 to classify this as a flick. if (IsGestureEnabled(GestureType.Flick)) { float sqDist = Vector2.DistanceSquared(touch.Position, touch.PressPosition); if (sqDist > TapJitterTolerance * TapJitterTolerance && touch.Velocity.LengthSquared() > 100.0f * 100.0f) { GestureList.Enqueue(new GestureSample( GestureType.Flick, touch.Timestamp, Vector2.Zero, Vector2.Zero, touch.Velocity, Vector2.Zero)); //fall through, a drag should still happen even if a flick does } } // If a drag is active then we need to finalize it. if (_dragGestureStarted != GestureType.None) { if (IsGestureEnabled(GestureType.DragComplete)) GestureList.Enqueue(new GestureSample( GestureType.DragComplete, touch.Timestamp, Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero)); _dragGestureStarted = GestureType.None; break; } // If all else fails try to process it as a tap. ProcessTap(currentTimestamp, ref touch); break; } } } // If the touch state hasn't changed then there is no // cleanup to do and no pinch to process. if (!stateChanged) return; // If we have two pinch points then update the pinch state. if (IsGestureEnabled(GestureType.Pinch) && _pinchTouch[0].State != TouchLocationState.Invalid && _pinchTouch[1].State != TouchLocationState.Invalid) ProcessPinch(_pinchTouch); else { // Make sure a partial pinch state // is not left hanging around. _pinchGestureStarted = false; _pinchTouch[0] = new GestureLocationData(); _pinchTouch[1] = new GestureLocationData(); } // If all points are released then clear some states. if (heldLocations == 0) { _tapDisabled = false; _holdDisabled = false; _dragGestureStarted = GestureType.None; } } private void ProcessHold(TimeSpan currentTimestamp, ref GestureLocationData touch) { if (!IsGestureEnabled(GestureType.Hold) || _holdDisabled) return; TimeSpan elapsed = currentTimestamp - touch.PressTimestamp; if (elapsed < TimeRequiredForHold) return; _holdDisabled = true; GestureList.Enqueue( new GestureSample(GestureType.Hold, touch.Timestamp, touch.Position, Vector2.Zero, Vector2.Zero, Vector2.Zero)); } private bool ProcessDoubleTap(ref GestureLocationData touch) { if (!IsGestureEnabled(GestureType.DoubleTap) || _tapDisabled || _lastTap.State == TouchLocationState.Invalid) return false; // If the new tap is too far away from the last then // this cannot be a double tap event. float sqDist = Vector2.DistanceSquared(touch.Position, _lastTap.Position); if (sqDist > TapJitterTolerance * TapJitterTolerance) return false; // Check that this tap happened within the standard // double tap time threshold of 300 milliseconds. TimeSpan elapsed = touch.Timestamp - _lastTap.Timestamp; if (elapsed.TotalMilliseconds > 300) return false; GestureList.Enqueue(new GestureSample( GestureType.DoubleTap, touch.Timestamp, touch.Position, Vector2.Zero, Vector2.Zero, Vector2.Zero)); // Disable taps until after the next release. _tapDisabled = true; return true; } private GestureLocationData _lastTap; private void ProcessTap(TimeSpan currentTimestamp, ref GestureLocationData touch) { if (_tapDisabled) return; // If the release is too far away from the press // position then this cannot be a tap event. float sqDist = Vector2.DistanceSquared(touch.PressPosition, touch.Position); if (sqDist > TapJitterTolerance * TapJitterTolerance) return; // If we pressed and held too long then don't // generate a tap event for it. TimeSpan elapsed = currentTimestamp - touch.PressTimestamp; if (elapsed > TimeRequiredForHold) return; // Store the last tap for // double tap processing. _lastTap = touch; // Fire off the tap event immediately. if (IsGestureEnabled(GestureType.Tap)) { GestureSample tap = new GestureSample( GestureType.Tap, touch.Timestamp, touch.Position, Vector2.Zero, Vector2.Zero, Vector2.Zero); GestureList.Enqueue(tap); } } private GestureType _dragGestureStarted = GestureType.None; private void ProcessDrag(ref GestureLocationData touch) { bool dragH = IsGestureEnabled(GestureType.HorizontalDrag); bool dragV = IsGestureEnabled(GestureType.VerticalDrag); bool dragF = IsGestureEnabled(GestureType.FreeDrag); if (!dragH && !dragV && !dragF) return; // Make sure this is a move event and that we have // a previous touch location. GestureLocationData prevTouch; if (touch.State != TouchLocationState.Moved || !touch.TryGetPreviousLocationData(out prevTouch)) return; Vector2 delta = touch.Position - prevTouch.Position; // If we're free dragging then stick to it. if (_dragGestureStarted != GestureType.FreeDrag) { bool isHorizontalDelta = Math.Abs(delta.X) > Math.Abs(delta.Y * 2.0f); bool isVerticalDelta = Math.Abs(delta.Y) > Math.Abs(delta.X * 2.0f); bool classify = _dragGestureStarted == GestureType.None; // Once we enter either vertical or horizontal drags // we stick to it... regardless of the delta. if (dragH && ((classify && isHorizontalDelta) || _dragGestureStarted == GestureType.HorizontalDrag)) { delta.Y = 0; _dragGestureStarted = GestureType.HorizontalDrag; } else if (dragV && ((classify && isVerticalDelta) || _dragGestureStarted == GestureType.VerticalDrag)) { delta.X = 0; _dragGestureStarted = GestureType.VerticalDrag; } // If the delta isn't either horizontal or vertical //then it could be a free drag if not classified. else if (dragF && classify) { _dragGestureStarted = GestureType.FreeDrag; } else { // If we couldn't classify the drag then // it is nothing... set it to complete. _dragGestureStarted = GestureType.DragComplete; } } // If the drag could not be classified then no gesture. if (_dragGestureStarted == GestureType.None || _dragGestureStarted == GestureType.DragComplete) return; _tapDisabled = true; _holdDisabled = true; GestureList.Enqueue(new GestureSample( _dragGestureStarted, touch.Timestamp, touch.Position, Vector2.Zero, delta, Vector2.Zero)); } private void ProcessPinch(GestureLocationData[] touches) { GestureLocationData prevPos0; GestureLocationData prevPos1; if (!touches[0].TryGetPreviousLocationData(out prevPos0)) prevPos0 = touches[0]; if (!touches[1].TryGetPreviousLocationData(out prevPos1)) prevPos1 = touches[1]; Vector2 delta0 = touches[0].Position - prevPos0.Position; Vector2 delta1 = touches[1].Position - prevPos1.Position; // Get the newest timestamp. TimeSpan timestamp = touches[0].Timestamp > touches[1].Timestamp ? touches[0].Timestamp : touches[1].Timestamp; // If we were already in a drag state then fire // off the drag completion event. if (_dragGestureStarted != GestureType.None) { if (IsGestureEnabled(GestureType.DragComplete)) GestureList.Enqueue(new GestureSample( GestureType.DragComplete, timestamp, Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero)); _dragGestureStarted = GestureType.None; } GestureList.Enqueue(new GestureSample( GestureType.Pinch, timestamp, touches[0].Position, touches[1].Position, delta0, delta1)); _pinchGestureStarted = true; _tapDisabled = true; _holdDisabled = true; } #endregion } } ================================================ FILE: src/Xna.Framework.Input/Input/Touch/TouchPanelStrategy.cs ================================================ // Copyright (C)2024 Nick Kastellanos using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Microsoft.Xna.Platform.Input.Touch { public abstract partial class TouchPanelStrategy { private readonly Stopwatch _stopwatch; private IntPtr _windowHandle; private int _displayWidth; private int _displayHeight; private DisplayOrientation _displayOrientation; private GestureType _enabledGestures; protected TouchPanelCapabilities _capabilities; public virtual IntPtr WindowHandle { get { return _windowHandle; } set { _windowHandle = value; } } public virtual int DisplayWidth { get { return _displayWidth; } set { _displayWidth = value; } } public virtual int DisplayHeight { get { return _displayHeight; } set { _displayHeight = value; } } public virtual DisplayOrientation DisplayOrientation { get { return _displayOrientation; } set { _displayOrientation = value; } } public virtual GestureType EnabledGestures { get { return _enabledGestures; } set { _enabledGestures = value; } } public virtual bool IsGestureAvailable { get { return this.LegacyIsGestureAvailable; } } protected TouchPanelStrategy() { _stopwatch = Stopwatch.StartNew(); // the current implementation need to update on each frame ((IFrameworkDispatcher)FrameworkDispatcher.Current).OnUpdate += this.UpdateCurrentTimestamp; } public virtual TouchPanelCapabilities GetCapabilities() { throw new NotImplementedException(); } public virtual TouchCollection GetState() { return this.LegacyGetState(); } public virtual GestureSample ReadGesture() { return this.LegacyReadGesture(); } public abstract void AddPressedEvent(int nativeTouchId, Vector2 position); public abstract void AddMovedEvent(int nativeTouchId, Vector2 position); public abstract void AddReleasedEvent(int nativeTouchId, Vector2 position); public abstract void AddCanceledEvent(int nativeTouchId, Vector2 position); /// /// This will invalidate the touch panel state. /// /// /// Called from orientation change on mobiles, window clientBounds changes, minimize, etc /// public void BlazorCancelAllTouches() { // local copy of touchStates int[] nativeTouchIds = new int[_touchIdsMap.Count]; _touchIdsMap.Keys.CopyTo(nativeTouchIds, 0); // submit a Canceled event for each touch Id for (int i = 0; i < nativeTouchIds.Length; i++) AddCanceledEvent(nativeTouchIds[i], Vector2.Zero); } public void TestReleaseAllTouches() { // local copy of touchStates int[] nativeTouchIds = new int[_touchIdsMap.Count]; _touchIdsMap.Keys.CopyTo(nativeTouchIds, 0); for (int i = 0; i < nativeTouchIds.Length; i++) AddReleasedEvent(nativeTouchIds[i], Vector2.Zero); } protected TouchPanelCapabilities CreateTouchPanelCapabilities(int maximumTouchCount, bool isConnected, bool hasPressure) { TouchPanelCapabilities caps = new TouchPanelCapabilities(); caps._maximumTouchCount = maximumTouchCount; caps._isConnected = isConnected; caps._hasPressure = hasPressure; return caps; } } } ================================================ FILE: src/Xna.Framework.Input/Input/TouchButtonState.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Input { /// /// Defines a button state for buttons of mouse, gamepad or joystick. /// public enum TouchButtonState { /// /// The button is released. /// Released = 0, /// /// The button is pressed. /// Pressed = 1, /// /// The button is touched. /// Touched = 2, } } ================================================ FILE: src/Xna.Framework.Input/Input/XR/ITouchControllerInput.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; namespace Microsoft.Xna.Platform.Input.XR { public interface ITouchControllerInput { void GetCapabilities(TouchControllerType type, ref GamePadType gamePadType, ref string displayName, ref string identifier, ref bool isConnected, ref Buttons buttons, ref bool hasLeftVibrationMotor, ref bool hasRightVibrationMotor, ref bool hasVoiceSupport ); GamePadState GetState(TouchControllerType type); bool SetVibration(TouchControllerType type, float amplitude); } } ================================================ FILE: src/Xna.Framework.Input/Input/XR/TouchController.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input.XR; using Microsoft.Xna.Platform.Input; using Microsoft.Xna.Platform.Input.XR; namespace Microsoft.Xna.Platform.Input { public interface ITouchController { ITouchControllerInput DeviceHandle { get; set; } GamePadCapabilities GetCapabilities(TouchControllerType type); GamePadState GetState(TouchControllerType type); bool SetVibration(TouchControllerType type, float amplitude); } } namespace Microsoft.Xna.Framework.Input.XR { public class TouchController : ITouchController { private static TouchController _current; /// /// Returns the current GamePad instance. /// public static TouchController Current { get { if (_current != null) return _current; lock (typeof(TouchController)) { if (_current == null) _current = new TouchController(); return _current; } } } public static ITouchControllerInput DeviceHandle { get { return ((ITouchController)TouchController.Current).DeviceHandle; } set { ((ITouchController)TouchController.Current).DeviceHandle = value; } } public static GamePadCapabilities GetCapabilities(TouchControllerType type) { return ((ITouchController)TouchController.Current).GetCapabilities(type); } public static GamePadState GetState(TouchControllerType type) { return ((ITouchController)TouchController.Current).GetState(type); } public static bool SetVibration(TouchControllerType type, float amplitude) { return ((ITouchController)TouchController.Current).SetVibration(type, amplitude); } private TouchController() { } #region ITouchController ITouchControllerInput ITouchController.DeviceHandle { get; set; } GamePadCapabilities ITouchController.GetCapabilities(TouchControllerType type) { ITouchControllerInput device = ((ITouchController)this).DeviceHandle; if (device != null) { //-- GamePadType gamePadType = GamePadType.Unknown; string displayName = String.Empty; string identifier = String.Empty; bool isConnected = false; Buttons buttons = (Buttons)0; bool hasLeftVibrationMotor = false; bool hasRightVibrationMotor = false; bool hasVoiceSupport = false; //-- device.GetCapabilities(type, ref gamePadType, ref displayName, ref identifier, ref isConnected, ref buttons, ref hasLeftVibrationMotor, ref hasRightVibrationMotor, ref hasVoiceSupport ); return new GamePadCapabilities( gamePadType: gamePadType, displayName: displayName, identifier: identifier, isConnected: isConnected, buttons: buttons, hasLeftVibrationMotor: hasLeftVibrationMotor, hasRightVibrationMotor: hasRightVibrationMotor, hasVoiceSupport: hasVoiceSupport ); } else { return new GamePadCapabilities( gamePadType: GamePadType.Unknown, displayName: null, identifier: null, isConnected: false, buttons: (Buttons)0, hasLeftVibrationMotor: false, hasRightVibrationMotor: false, hasVoiceSupport: false ); } } GamePadState ITouchController.GetState(TouchControllerType type) { ITouchControllerInput device = ((ITouchController)this).DeviceHandle; if (device != null) return device.GetState(type); else return new GamePadState(); } bool ITouchController.SetVibration(TouchControllerType type, float amplitude) { ITouchControllerInput device = ((ITouchController)this).DeviceHandle; if (device != null) return device.SetVibration(type, amplitude); else return false; } #endregion ITouchController } } ================================================ FILE: src/Xna.Framework.Input/Input/XR/TouchControllerType.cs ================================================ // Copyright (C)2022 Nick Kastellanos using System; using System.Collections.Generic; namespace Microsoft.Xna.Framework.Input.XR { public enum TouchControllerType { LTouch = 0x0001, RTouch = 0x0002, Touch = 0x0003, } } ================================================ FILE: src/Xna.Framework.Input/NamespaceDoc.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. namespace Microsoft.Xna.Framework.Input { /// /// Provides functionality to handle input from keyboards, mice, gamepads, etc. /// [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] class NamespaceDoc { } } ================================================ FILE: src/Xna.Framework.Input/Properties/AssemblyInfo.cs ================================================ using System; using System.Runtime.CompilerServices; [assembly:CLSCompliant(true)] [assembly:InternalsVisibleTo("Kni.Tests")] ================================================ FILE: src/Xna.Framework.Input/Xna.Framework.Input.csproj ================================================  ..\..\Artifacts\Xna.Framework.Input\ 4.2.9001.0 4.2.9001.0 false false net40;netstandard2.0;net8.0 7.3 true {8FB8B257-C091-4C41-B221-75C37B68CD8F} Xna.Framework.Input Microsoft.Xna.Framework.Input true CS0067;CS1591;CS1574;CS0419;CS8500 true The Input framework. .net core;core;.net standard;standard nkast.Xna.Framework.Input ILLink.Descriptors.xml {741B4B1E-89E4-434C-8867-6129838AFD51} Xna.Framework False {4B8D3F73-BBD2-4057-B86B-8B73B957DC0F} Xna.Framework.Graphics False runtime; build; native; contentfiles; analyzers; buildtransitive all ================================================ FILE: src/Xna.Framework.Media/Content/SongReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Media.Utilities; namespace Microsoft.Xna.Framework.Content { internal class SongReader : ContentTypeReader { protected override Song Read(ContentReader input, Song existingInstance) { string path = input.ReadString(); int durationMs = input.ReadObject(); if (String.IsNullOrEmpty(path)) throw new InvalidOperationException(); { // Add the ContentManager's RootDirectory string assetsLocationFullPath = ((ITitleContainer)TitleContainer.Current).Location; string rootDirectoryFullPath = Path.Combine(assetsLocationFullPath, input.ContentManager.RootDirectory); string dirPath = Path.Combine(rootDirectoryFullPath, input.AssetName); // Resolve the relative path path = FileHelpers.ResolveRelativePath(dirPath, path); } string name = Path.GetFileNameWithoutExtension(path); Uri streamSource = new Uri(path, UriKind.RelativeOrAbsolute); Song result = existingInstance ?? new Song(name, streamSource, durationMs); return result; } } } ================================================ FILE: src/Xna.Framework.Media/Content/VideoReader.cs ================================================ // MonoGame - Copyright (C) The MonoGame Team // This file is subject to the terms and conditions defined in // file 'LICENSE.txt', which is part of this source code package. using System; using System.IO; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Platform; using Microsoft.Xna.Platform.Media.Utilities; namespace Microsoft.Xna.Framework.Content { internal class VideoReader : ContentTypeReader